From ef3f38da8b1abc19ac570a3c5dfa88e6456c2879 Mon Sep 17 00:00:00 2001 From: vasilito Date: Mon, 3 Aug 2026 09:10:57 +0300 Subject: [PATCH] feat: port Vulkan headers and ICD loader; wire into kwin KWin does an unconditional find_package(Vulkan REQUIRED), and CMake's FindVulkan needs BOTH Vulkan_INCLUDE_DIR and Vulkan_LIBRARY. Mesa already builds the Vulkan drivers (libvulkan_intel/_radeon/_lvp) but an ICD is not the API surface a consumer links against, so kwin could not configure. vulkan-headers: header-only, but VulkanHeadersConfig.cmake is GENERATED at install time rather than shipped in the tarball, and Vulkan-Loader hard-requires it -- a hand copy of include/ satisfies FindVulkan and then fails the loader. Run upstream's cmake install instead. vulkan-loader: one real port. vk_loader_platform.h gates the whole POSIX arm (DIRECTORY_SYMBOL, the dlopen wrappers, manifest search) on an OS list that predates Redox, so the build collapsed with 'DIRECTORY_SYMBOL' undeclared. Redox provides dlopen/dlsym and POSIX paths via relibc, so it belongs in the same arm as Linux; that header is the only file under loader/ doing OS detection. WSI backends are left off: Red Bear is Wayland-only and the compositor talks to Mesa's ICDs directly. Both shadow the untested recipes/wip/libs/graphics/{vulkan-headers, libvulkan} via the local-over-WIP mechanism, per the WIP ownership rule that the shipping version lives in local/recipes/. Verified: kwin now reports -- Found Vulkan: .../sysroot/lib/libvulkan.so (found version 1.4.321) kwin also gains its missing kf6-knewstuff dep -- its find_package(KF6 COMPONENTS NewStuff) is REQUIRED, so without the dep the framework was never staged into kwin's sysroot. --- config/redbear-full.toml | 5 + local/recipes/kde/kwin/recipe.toml | 8 + local/recipes/libs/vulkan-headers/recipe.toml | 43 + local/recipes/libs/vulkan-headers/source.tar | Bin 0 -> 2760031 bytes .../libs/vulkan-headers/source/.gitattributes | 24 + .../.github/ISSUE_TEMPLATE/bug_report.md | 52 + .../source/.github/dependabot.yml | 12 + .../source/.github/pull_request_template.md | 18 + .../source/.github/workflows/ci.yml | 132 + .../libs/vulkan-headers/source/.gitignore | 16 + .../libs/vulkan-headers/source/.reuse/dep5 | 15 + .../libs/vulkan-headers/source/BUILD.gn | 76 + .../libs/vulkan-headers/source/BUILD.md | 46 + .../libs/vulkan-headers/source/CMakeLists.txt | 140 + .../source/CODE_OF_CONDUCT.adoc | 10 + .../vulkan-headers/source/CONTRIBUTING.md | 40 + .../libs/vulkan-headers/source/LICENSE.md | 18 + .../source/LICENSES/Apache-2.0.txt | 202 + .../vulkan-headers/source/LICENSES/MIT.txt | 9 + .../vulkan-headers/source/Makefile.release | 110 + .../libs/vulkan-headers/source/README.md | 52 + .../libs/vulkan-headers/source/SECURITY.md | 11 + .../vk_video/vulkan_video_codec_av1std.h | 394 + .../vulkan_video_codec_av1std_decode.h | 109 + .../vulkan_video_codec_av1std_encode.h | 143 + .../vk_video/vulkan_video_codec_h264std.h | 312 + .../vulkan_video_codec_h264std_decode.h | 77 + .../vulkan_video_codec_h264std_encode.h | 147 + .../vk_video/vulkan_video_codec_h265std.h | 446 + .../vulkan_video_codec_h265std_decode.h | 67 + .../vulkan_video_codec_h265std_encode.h | 157 + .../vk_video/vulkan_video_codec_vp9std.h | 151 + .../vulkan_video_codec_vp9std_decode.h | 68 + .../vk_video/vulkan_video_codecs_common.h | 36 + .../source/include/vulkan/vk_icd.h | 244 + .../source/include/vulkan/vk_layer.h | 189 + .../source/include/vulkan/vk_platform.h | 84 + .../source/include/vulkan/vulkan.cppm | 10250 + .../source/include/vulkan/vulkan.h | 103 + .../source/include/vulkan/vulkan.hpp | 23460 ++ .../source/include/vulkan/vulkan_android.h | 159 + .../source/include/vulkan/vulkan_beta.h | 344 + .../source/include/vulkan/vulkan_core.h | 24051 +++ .../source/include/vulkan/vulkan_directfb.h | 59 + .../source/include/vulkan/vulkan_enums.hpp | 9328 + .../vulkan/vulkan_extension_inspection.hpp | 3768 + .../include/vulkan/vulkan_format_traits.hpp | 9646 + .../source/include/vulkan/vulkan_fuchsia.h | 282 + .../source/include/vulkan/vulkan_funcs.hpp | 31323 +++ .../source/include/vulkan/vulkan_ggp.h | 62 + .../source/include/vulkan/vulkan_handles.hpp | 21405 ++ .../source/include/vulkan/vulkan_hash.hpp | 20170 ++ .../include/vulkan/vulkan_hpp_macros.hpp | 326 + .../source/include/vulkan/vulkan_ios.h | 50 + .../source/include/vulkan/vulkan_macos.h | 50 + .../source/include/vulkan/vulkan_metal.h | 244 + .../source/include/vulkan/vulkan_ohos.h | 53 + .../source/include/vulkan/vulkan_raii.hpp | 28836 +++ .../source/include/vulkan/vulkan_screen.h | 114 + .../source/include/vulkan/vulkan_shared.hpp | 1204 + .../vulkan/vulkan_static_assertions.hpp | 9219 + .../source/include/vulkan/vulkan_structs.hpp | 167051 +++++++++++++++ .../include/vulkan/vulkan_to_string.hpp | 10500 + .../source/include/vulkan/vulkan_vi.h | 50 + .../source/include/vulkan/vulkan_video.cppm | 171 + .../source/include/vulkan/vulkan_video.hpp | 5410 + .../source/include/vulkan/vulkan_wayland.h | 59 + .../source/include/vulkan/vulkan_win32.h | 372 + .../source/include/vulkan/vulkan_xcb.h | 60 + .../source/include/vulkan/vulkan_xlib.h | 60 + .../include/vulkan/vulkan_xlib_xrandr.h | 50 + .../source/registry/apiconventions.py | 21 + .../source/registry/base_generator.py | 977 + .../source/registry/cgenerator.py | 549 + .../source/registry/generator.py | 1424 + .../source/registry/parse_dependency.py | 404 + .../registry/profiles/VP_KHR_roadmap.json | 390 + .../vulkan-headers/source/registry/reg.py | 1885 + .../source/registry/spec_tools/conventions.py | 562 + .../source/registry/spec_tools/util.py | 58 + .../source/registry/stripAPI.py | 42 + .../source/registry/validusage.json | 113641 ++++++++++ .../vulkan-headers/source/registry/video.xml | 2019 + .../vulkan-headers/source/registry/vk.xml | 31524 +++ .../source/registry/vkconventions.py | 314 + .../source/registry/vulkan_object.py | 494 + .../source/tests/CMakeLists.txt | 33 + .../source/tests/integration/CMakeLists.txt | 89 + .../vulkan-headers/source/tests/vk_hpp.cpp | 13 + .../source/tests/vk_hpp_module.cpp | 13 + .../libs/vulkan-headers/source/tests/vk_icd.c | 14 + .../vulkan-headers/source/tests/vk_layer.c | 14 + local/recipes/libs/vulkan-loader/recipe.toml | 71 + local/recipes/libs/vulkan-loader/source.tar | Bin 0 -> 1762478 bytes .../libs/vulkan-loader/source/.clang-format | 7 + .../libs/vulkan-loader/source/.gitattributes | 22 + .../.github/ISSUE_TEMPLATE/bug_report.md | 31 + .../.github/ISSUE_TEMPLATE/feature_request.md | 16 + .../source/.github/dependabot.yml | 7 + .../source/.github/workflows/build.yml | 431 + .../source/.github/workflows/codeql.yml | 97 + .../source/.github/workflows/format.yml | 43 + .../libs/vulkan-loader/source/.gitignore | 47 + .../libs/vulkan-loader/source/BUILD.gn | 341 + .../libs/vulkan-loader/source/BUILD.md | 662 + .../libs/vulkan-loader/source/CMakeLists.txt | 293 + .../vulkan-loader/source/CODE_OF_CONDUCT.md | 1 + .../libs/vulkan-loader/source/CONTRIBUTING.md | 158 + .../libs/vulkan-loader/source/GOVERNANCE.md | 49 + .../libs/vulkan-loader/source/LICENSE.txt | 207 + .../libs/vulkan-loader/source/README.md | 54 + .../libs/vulkan-loader/source/SECURITY.md | 13 + .../source/docs/LoaderApplicationInterface.md | 799 + .../source/docs/LoaderDebugging.md | 363 + .../source/docs/LoaderDriverInterface.md | 2006 + .../docs/LoaderInterfaceArchitecture.md | 1323 + .../source/docs/LoaderLayerInterface.md | 2738 + .../docs/images/function_device_chain.png | Bin 0 -> 128677 bytes .../docs/images/function_instance_chain.png | Bin 0 -> 205296 bytes .../source/docs/images/high_level_loader.png | Bin 0 -> 191966 bytes .../docs/images/loader_device_chain_app.png | Bin 0 -> 35185 bytes .../images/loader_device_chain_loader.png | Bin 0 -> 46318 bytes .../images/loader_device_surface_chain.png | Bin 0 -> 55094 bytes .../docs/images/loader_instance_chain.png | Bin 0 -> 73656 bytes .../source/docs/images/loader_layer_order.png | Bin 0 -> 101536 bytes .../docs/images/loader_layer_order_calls.png | Bin 0 -> 105522 bytes .../source/docs/images/svgs/README.txt | 6 + .../images/svgs/function_device_chain.svg | 2803 + .../images/svgs/function_instance_chain.svg | 3485 + .../docs/images/svgs/high_level_loader.svg | 2920 + .../images/svgs/loader_device_chain_app.svg | 1030 + .../svgs/loader_device_chain_loader.svg | 1084 + .../svgs/loader_device_surface_chain.svg | 1240 + .../images/svgs/loader_instance_chain.svg | 1482 + .../docs/images/svgs/loader_layer_order.svg | 1767 + .../images/svgs/loader_layer_order_calls.svg | 1661 + .../source/loader/CMakeLists.txt | 568 + .../source/loader/LoaderAndLayerInterface.md | 19 + .../vulkan-loader/source/loader/README.md | 5 + .../vulkan-loader/source/loader/adapters.h | 83 + .../vulkan-loader/source/loader/allocation.c | 160 + .../vulkan-loader/source/loader/allocation.h | 64 + .../vulkan-loader/source/loader/asm_offset.c | 172 + .../source/loader/asm_test_aarch32.S | 25 + .../source/loader/asm_test_aarch64.S | 23 + .../source/loader/asm_test_x86.S | 24 + .../libs/vulkan-loader/source/loader/cJSON.c | 1806 + .../libs/vulkan-loader/source/loader/cJSON.h | 220 + .../vulkan-loader/source/loader/debug_utils.c | 727 + .../vulkan-loader/source/loader/debug_utils.h | 79 + .../source/loader/dev_ext_trampoline.c | 544 + .../source/loader/dirent_on_windows.c | 135 + .../source/loader/dirent_on_windows.h | 51 + .../source/loader/dlopen_fuchsia.c | 87 + .../source/loader/dlopen_fuchsia.h | 29 + .../source/loader/extension_manual.c | 394 + .../source/loader/extension_manual.h | 90 + .../generated/vk_layer_dispatch_table.h | 1310 + .../loader/generated/vk_loader_extensions.c | 14104 ++ .../loader/generated/vk_loader_extensions.h | 608 + .../source/loader/generated/vk_object_types.h | 471 + .../vulkan-loader/source/loader/gpa_helper.c | 300 + .../vulkan-loader/source/loader/gpa_helper.h | 29 + .../libs/vulkan-loader/source/loader/loader.c | 7511 + .../libs/vulkan-loader/source/loader/loader.h | 233 + .../vulkan-loader/source/loader/loader.rc | 59 + .../vulkan-loader/source/loader/loader.rc.in | 59 + .../source/loader/loader_common.h | 523 + .../source/loader/loader_environment.c | 568 + .../source/loader/loader_environment.h | 56 + .../vulkan-loader/source/loader/loader_json.c | 258 + .../vulkan-loader/source/loader/loader_json.h | 55 + .../source/loader/loader_linux.c | 453 + .../source/loader/loader_linux.h | 38 + .../source/loader/loader_windows.c | 1264 + .../source/loader/loader_windows.h | 125 + .../libs/vulkan-loader/source/loader/log.c | 276 + .../libs/vulkan-loader/source/loader/log.h | 85 + .../source/loader/phys_dev_ext.c | 1063 + .../vulkan-loader/source/loader/settings.c | 868 + .../vulkan-loader/source/loader/settings.h | 114 + .../source/loader/stack_allocation.h | 47 + .../vulkan-loader/source/loader/terminator.c | 654 + .../vulkan-loader/source/loader/trampoline.c | 3828 + .../loader/unknown_ext_chain_gas_aarch.S | 959 + .../source/loader/unknown_ext_chain_gas_x86.S | 906 + .../loader/unknown_ext_chain_marmasm.asm | 896 + .../source/loader/unknown_ext_chain_masm.asm | 885 + .../source/loader/unknown_function_handling.c | 379 + .../source/loader/unknown_function_handling.h | 37 + .../source/loader/vk_loader_layer.h | 50 + .../source/loader/vk_loader_platform.h | 645 + .../vulkan-loader/source/loader/vulkan-1.def | 298 + .../vulkan-loader/source/loader/vulkan.pc.in | 10 + .../libs/vulkan-loader/source/loader/wsi.c | 3087 + .../libs/vulkan-loader/source/loader/wsi.h | 260 + .../source/scripts/CMakeLists.txt | 146 + .../source/scripts/CodeCoverage.cmake | 665 + .../source/scripts/common_codegen.py | 110 + .../source/scripts/generate_loader_rc.py | 31 + .../source/scripts/generate_source.py | 279 + .../dispatch_table_helper_generator.py | 104 + .../generators/helper_file_generator.py | 205 + .../generators/loader_extension_generator.py | 1367 + .../libs/vulkan-loader/source/scripts/gn/DEPS | 68 + .../vulkan-loader/source/scripts/gn/gn.py | 56 + .../source/scripts/gn/update_deps.sh | 49 + .../source/scripts/known_good.json | 45 + .../source/scripts/loader_genvk.py | 51 + .../source/scripts/parse_asm_values.py | 135 + .../source/scripts/qnx/README.md | 12 + .../source/scripts/qnx/common.mk | 44 + .../source/scripts/qnx/loader_cmake_config.h | 2 + .../source/scripts/update_deps.py | 822 + .../vulkan-loader/source/tests/CMakeLists.txt | 171 + .../libs/vulkan-loader/source/tests/README.md | 52 + .../tests/corpus/VkLayer_complex_file.json | 741 + .../source/tests/corpus/config.json | 99 + .../tests/corpus/config_with_other_arch.json | 99 + .../config_with_unordered_layer_location.json | 40 + .../source/tests/framework/CMakeLists.txt | 88 + .../source/tests/framework/README.md | 192 + .../source/tests/framework/data/.gitignore | 1 + .../tests/framework/data/CMakeLists.txt | 47 + .../framework/data/VkLayer_complex_file.json | 741 + .../data/binaries/dummy_library_elf_32.dll | Bin 0 -> 16160 bytes .../data/binaries/dummy_library_elf_64.dll | Bin 0 -> 17392 bytes .../data/binaries/dummy_library_pe_32.dll | Bin 0 -> 36352 bytes .../data/binaries/dummy_library_pe_32.so | Bin 0 -> 36352 bytes .../data/binaries/dummy_library_pe_64.dll | Bin 0 -> 49664 bytes .../data/binaries/dummy_library_pe_64.so | Bin 0 -> 49664 bytes .../data/binaries/libdummy_library_elf_32.so | Bin 0 -> 16160 bytes .../data/binaries/libdummy_library_elf_64.so | Bin 0 -> 17392 bytes ...se-instance_create_fuzzer-5599244505186304 | Bin 0 -> 718 bytes ...se-instance_create_fuzzer-5817896795701248 | Bin 0 -> 7283 bytes ...se-instance_create_fuzzer-6541440380895232 | Bin 0 -> 1608 bytes ...instance_enumerate_fuzzer-5126563864051712 | 3 + ...instance_enumerate_fuzzer-6308459683315712 | 246 + ...testcase-json_load_fuzzer-5258042868105216 | 0 ...testcase-json_load_fuzzer-5487817455960064 | 0 ...ed-instance_create_fuzzer-4558978302214144 | 99 + ...ed-instance_create_fuzzer-4568454561071104 | 6 + ...ed-instance_create_fuzzer-4820577276723200 | 50 + ...ed-instance_create_fuzzer-5177827962454016 | 7 + ...ed-instance_create_fuzzer-5198773675425792 | 1 + ...ed-instance_create_fuzzer-5416197367070720 | 1 + ...ed-instance_create_fuzzer-5494771615137792 | 99 + ...ed-instance_create_fuzzer-5801855065915392 | 88 + ...ed-instance_create_fuzzer-6353004288081920 | Bin 0 -> 24335 bytes ...instance_enumerate_fuzzer-6465902356791296 | 2 + ...instance_enumerate_fuzzer-6583684169269248 | Bin 0 -> 7793 bytes ...inimized-json_load_fuzzer-4512865114259456 | Bin 0 -> 55 bytes ...inimized-json_load_fuzzer-4552015310880768 | 1 + ...inimized-json_load_fuzzer-5208693600747520 | 1 + ...inimized-json_load_fuzzer-5347670374612992 | 1 + ...inimized-json_load_fuzzer-5392928643547136 | 1 + ...inimized-json_load_fuzzer-5636386303049728 | 1 + ...inimized-json_load_fuzzer-6182254813249536 | 2 + ...inimized-json_load_fuzzer-6265355951996928 | Bin 0 -> 10341 bytes ...inimized-json_load_fuzzer-6363106126659584 | Bin 0 -> 577 bytes ...inimized-json_load_fuzzer-6482033715838976 | 1 + ...minimized-settings_fuzzer-4857714377818112 | 2 + ...minimized-settings_fuzzer-5123849246867456 | 99 + .../tests/framework/data/fuzzer_output.json | 125 + .../source/tests/framework/data/stub.cpp | 1 + .../tests/framework/framework_config.h.in | 113 + .../source/tests/framework/icd/CMakeLists.txt | 52 + .../icd/export_definitions/test_icd_0.def | 5 + .../icd/export_definitions/test_icd_2.def | 4 + .../test_icd_2_enum_adapter.def | 5 + .../export_definitions/test_icd_2_gpdpa.def | 5 + .../icd/export_definitions/test_icd_6.def | 6 + .../icd/export_definitions/test_icd_7.def | 6 + .../test_icd_7_without_exports.def | 3 + .../icd/export_definitions/test_icd_gipa.def | 3 + .../test_icd_negotiate_version.def | 6 + .../framework/icd/export_definitions/🌋.def | 4 + .../source/tests/framework/icd/test_icd.cpp | 1851 + .../source/tests/framework/icd/test_icd.h | 239 + .../source/tests/framework/json_writer.h | 142 + .../tests/framework/layer/CMakeLists.txt | 51 + .../layer/export_definitions/test_layer_0.def | 8 + .../test_layer_0_named_gpa.def | 8 + .../layer/export_definitions/test_layer_1.def | 9 + .../layer/export_definitions/test_layer_2.def | 14 + .../export_definitions/test_layer_base.def | 6 + .../layer/export_definitions/wrap_objects.def | 9 + .../export_definitions/wrap_objects_1.def | 9 + .../export_definitions/wrap_objects_2.def | 9 + .../export_definitions/wrap_objects_3.def | 9 + .../generated/vk_dispatch_table_helper.h | 933 + .../source/tests/framework/layer/layer_util.h | 47 + .../tests/framework/layer/test_layer.cpp | 1079 + .../source/tests/framework/layer/test_layer.h | 228 + .../tests/framework/layer/wrap_objects.cpp | 982 + .../tests/framework/shim/CMakeLists.txt | 39 + .../source/tests/framework/shim/shim.h | 251 + .../tests/framework/shim/shim_common.cpp | 254 + .../source/tests/framework/shim/unix_shim.cpp | 427 + .../tests/framework/shim/windows_shim.cpp | 519 + .../tests/framework/test_environment.cpp | 1091 + .../source/tests/framework/test_environment.h | 756 + .../source/tests/framework/test_util.cpp | 375 + .../source/tests/framework/test_util.h | 966 + .../source/tests/integration/CMakeLists.txt | 39 + .../tests/live_verification/CMakeLists.txt | 33 + .../dynamic_loader_behavior/CMakeLists.txt | 49 + .../dynamic_library.cpp | 47 + .../dynamic_loader_behavior/dynamic_library.h | 53 + .../dynamic_loading_behavior.md | 31 + .../test_dynamic_linking.cpp | 45 + .../test_dynamic_loading.cpp | 54 + .../test_dynamic_loading_and_linking.cpp | 48 + .../dynamic_rendering_get_proc_addr.cpp | 94 + .../macos_static_loader_build.cpp | 88 + .../time_dynamic_loading.cpp | 74 + .../tests/loader_alloc_callback_tests.cpp | 1066 + .../source/tests/loader_debug_ext_tests.cpp | 1238 + .../source/tests/loader_envvar_tests.cpp | 851 + .../source/tests/loader_fuzz_tests.cpp | 283 + .../tests/loader_get_proc_addr_tests.cpp | 496 + .../tests/loader_handle_validation_tests.cpp | 1720 + .../source/tests/loader_layer_tests.cpp | 5740 + .../tests/loader_phys_dev_inst_ext_tests.cpp | 5619 + .../source/tests/loader_regression_tests.cpp | 4866 + .../source/tests/loader_settings_tests.cpp | 3020 + .../source/tests/loader_testing_main.cpp | 87 + .../source/tests/loader_threading_tests.cpp | 131 + .../source/tests/loader_unknown_ext_tests.cpp | 1309 + .../source/tests/loader_version_tests.cpp | 1405 + .../source/tests/loader_wsi_tests.cpp | 1152 + recipes/libs/vulkan-headers | 1 + recipes/libs/vulkan-loader | 1 + recipes/wip/libs/graphics/libvulkan | 1 + .../wip/libs/graphics/libvulkan/recipe.toml | 15 - recipes/wip/libs/graphics/vulkan-headers | 1 + .../libs/graphics/vulkan-headers/recipe.toml | 11 - 337 files changed, 659829 insertions(+), 26 deletions(-) create mode 100644 local/recipes/libs/vulkan-headers/recipe.toml create mode 100644 local/recipes/libs/vulkan-headers/source.tar create mode 100644 local/recipes/libs/vulkan-headers/source/.gitattributes create mode 100644 local/recipes/libs/vulkan-headers/source/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 local/recipes/libs/vulkan-headers/source/.github/dependabot.yml create mode 100644 local/recipes/libs/vulkan-headers/source/.github/pull_request_template.md create mode 100644 local/recipes/libs/vulkan-headers/source/.github/workflows/ci.yml create mode 100644 local/recipes/libs/vulkan-headers/source/.gitignore create mode 100644 local/recipes/libs/vulkan-headers/source/.reuse/dep5 create mode 100644 local/recipes/libs/vulkan-headers/source/BUILD.gn create mode 100644 local/recipes/libs/vulkan-headers/source/BUILD.md create mode 100644 local/recipes/libs/vulkan-headers/source/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-headers/source/CODE_OF_CONDUCT.adoc create mode 100644 local/recipes/libs/vulkan-headers/source/CONTRIBUTING.md create mode 100644 local/recipes/libs/vulkan-headers/source/LICENSE.md create mode 100644 local/recipes/libs/vulkan-headers/source/LICENSES/Apache-2.0.txt create mode 100644 local/recipes/libs/vulkan-headers/source/LICENSES/MIT.txt create mode 100644 local/recipes/libs/vulkan-headers/source/Makefile.release create mode 100644 local/recipes/libs/vulkan-headers/source/README.md create mode 100644 local/recipes/libs/vulkan-headers/source/SECURITY.md create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_decode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_encode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_decode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_encode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_decode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_encode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std_decode.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codecs_common.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vk_icd.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vk_layer.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vk_platform.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.cppm create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_android.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_beta.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_core.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_directfb.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_enums.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_extension_inspection.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_format_traits.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_fuchsia.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_funcs.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ggp.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_handles.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hash.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hpp_macros.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ios.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_macos.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_metal.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ohos.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_raii.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_screen.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_shared.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_static_assertions.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_structs.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_to_string.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_vi.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.cppm create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.hpp create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_wayland.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_win32.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xcb.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib.h create mode 100644 local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib_xrandr.h create mode 100644 local/recipes/libs/vulkan-headers/source/registry/apiconventions.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/base_generator.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/cgenerator.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/generator.py create mode 100755 local/recipes/libs/vulkan-headers/source/registry/parse_dependency.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/profiles/VP_KHR_roadmap.json create mode 100644 local/recipes/libs/vulkan-headers/source/registry/reg.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/spec_tools/conventions.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/spec_tools/util.py create mode 100755 local/recipes/libs/vulkan-headers/source/registry/stripAPI.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/validusage.json create mode 100644 local/recipes/libs/vulkan-headers/source/registry/video.xml create mode 100644 local/recipes/libs/vulkan-headers/source/registry/vk.xml create mode 100755 local/recipes/libs/vulkan-headers/source/registry/vkconventions.py create mode 100644 local/recipes/libs/vulkan-headers/source/registry/vulkan_object.py create mode 100644 local/recipes/libs/vulkan-headers/source/tests/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-headers/source/tests/integration/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-headers/source/tests/vk_hpp.cpp create mode 100644 local/recipes/libs/vulkan-headers/source/tests/vk_hpp_module.cpp create mode 100644 local/recipes/libs/vulkan-headers/source/tests/vk_icd.c create mode 100644 local/recipes/libs/vulkan-headers/source/tests/vk_layer.c create mode 100644 local/recipes/libs/vulkan-loader/recipe.toml create mode 100644 local/recipes/libs/vulkan-loader/source.tar create mode 100644 local/recipes/libs/vulkan-loader/source/.clang-format create mode 100644 local/recipes/libs/vulkan-loader/source/.gitattributes create mode 100644 local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 local/recipes/libs/vulkan-loader/source/.github/dependabot.yml create mode 100644 local/recipes/libs/vulkan-loader/source/.github/workflows/build.yml create mode 100644 local/recipes/libs/vulkan-loader/source/.github/workflows/codeql.yml create mode 100644 local/recipes/libs/vulkan-loader/source/.github/workflows/format.yml create mode 100644 local/recipes/libs/vulkan-loader/source/.gitignore create mode 100644 local/recipes/libs/vulkan-loader/source/BUILD.gn create mode 100644 local/recipes/libs/vulkan-loader/source/BUILD.md create mode 100644 local/recipes/libs/vulkan-loader/source/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/CODE_OF_CONDUCT.md create mode 100644 local/recipes/libs/vulkan-loader/source/CONTRIBUTING.md create mode 100644 local/recipes/libs/vulkan-loader/source/GOVERNANCE.md create mode 100644 local/recipes/libs/vulkan-loader/source/LICENSE.txt create mode 100644 local/recipes/libs/vulkan-loader/source/README.md create mode 100644 local/recipes/libs/vulkan-loader/source/SECURITY.md create mode 100644 local/recipes/libs/vulkan-loader/source/docs/LoaderApplicationInterface.md create mode 100644 local/recipes/libs/vulkan-loader/source/docs/LoaderDebugging.md create mode 100644 local/recipes/libs/vulkan-loader/source/docs/LoaderDriverInterface.md create mode 100644 local/recipes/libs/vulkan-loader/source/docs/LoaderInterfaceArchitecture.md create mode 100644 local/recipes/libs/vulkan-loader/source/docs/LoaderLayerInterface.md create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/function_device_chain.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/function_instance_chain.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/high_level_loader.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/loader_device_chain_app.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/loader_device_chain_loader.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/loader_device_surface_chain.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/loader_instance_chain.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/loader_layer_order.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/loader_layer_order_calls.png create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/svgs/README.txt create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/function_device_chain.svg create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/function_instance_chain.svg create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/high_level_loader.svg create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_app.svg create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_loader.svg create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_surface_chain.svg create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_instance_chain.svg create mode 100755 local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order.svg create mode 100644 local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order_calls.svg create mode 100644 local/recipes/libs/vulkan-loader/source/loader/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/loader/LoaderAndLayerInterface.md create mode 100644 local/recipes/libs/vulkan-loader/source/loader/README.md create mode 100644 local/recipes/libs/vulkan-loader/source/loader/adapters.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/allocation.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/allocation.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/asm_offset.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch32.S create mode 100644 local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch64.S create mode 100644 local/recipes/libs/vulkan-loader/source/loader/asm_test_x86.S create mode 100644 local/recipes/libs/vulkan-loader/source/loader/cJSON.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/cJSON.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/debug_utils.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/debug_utils.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/dev_ext_trampoline.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/extension_manual.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/extension_manual.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/generated/vk_layer_dispatch_table.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/generated/vk_object_types.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/gpa_helper.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/gpa_helper.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader.rc create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader.rc.in create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_common.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_environment.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_environment.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_json.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_json.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_linux.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_linux.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_windows.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/loader_windows.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/log.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/log.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/phys_dev_ext.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/settings.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/settings.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/stack_allocation.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/terminator.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/trampoline.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_aarch.S create mode 100644 local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_x86.S create mode 100644 local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_marmasm.asm create mode 100644 local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_masm.asm create mode 100644 local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/vk_loader_layer.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/vk_loader_platform.h create mode 100644 local/recipes/libs/vulkan-loader/source/loader/vulkan-1.def create mode 100644 local/recipes/libs/vulkan-loader/source/loader/vulkan.pc.in create mode 100644 local/recipes/libs/vulkan-loader/source/loader/wsi.c create mode 100644 local/recipes/libs/vulkan-loader/source/loader/wsi.h create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/CodeCoverage.cmake create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/common_codegen.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/generate_loader_rc.py create mode 100755 local/recipes/libs/vulkan-loader/source/scripts/generate_source.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/generators/dispatch_table_helper_generator.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/generators/helper_file_generator.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/generators/loader_extension_generator.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/gn/DEPS create mode 100755 local/recipes/libs/vulkan-loader/source/scripts/gn/gn.py create mode 100755 local/recipes/libs/vulkan-loader/source/scripts/gn/update_deps.sh create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/known_good.json create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/loader_genvk.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/parse_asm_values.py create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/qnx/README.md create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/qnx/common.mk create mode 100644 local/recipes/libs/vulkan-loader/source/scripts/qnx/loader_cmake_config.h create mode 100755 local/recipes/libs/vulkan-loader/source/scripts/update_deps.py create mode 100644 local/recipes/libs/vulkan-loader/source/tests/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/README.md create mode 100644 local/recipes/libs/vulkan-loader/source/tests/corpus/VkLayer_complex_file.json create mode 100644 local/recipes/libs/vulkan-loader/source/tests/corpus/config.json create mode 100644 local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_other_arch.json create mode 100644 local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_unordered_layer_location.json create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/README.md create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/.gitignore create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/VkLayer_complex_file.json create mode 100755 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_elf_32.dll create mode 100755 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_elf_64.dll create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_32.dll create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_32.so create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_64.dll create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_64.so create mode 100755 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/libdummy_library_elf_32.so create mode 100755 local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/libdummy_library_elf_64.so create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_create_fuzzer-5599244505186304 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_create_fuzzer-5817896795701248 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_create_fuzzer-6541440380895232 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_enumerate_fuzzer-5126563864051712 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_enumerate_fuzzer-6308459683315712 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-json_load_fuzzer-5258042868105216 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-json_load_fuzzer-5487817455960064 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-4558978302214144 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-4568454561071104 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-4820577276723200 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-5177827962454016 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-5198773675425792 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-5416197367070720 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-5494771615137792 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-5801855065915392 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_create_fuzzer-6353004288081920 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6465902356791296 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6583684169269248 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-4512865114259456 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-4552015310880768 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5208693600747520 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5347670374612992 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5392928643547136 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5636386303049728 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6182254813249536 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6265355951996928 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6363106126659584 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6482033715838976 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-settings_fuzzer-4857714377818112 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-settings_fuzzer-5123849246867456 create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzzer_output.json create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/data/stub.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/framework_config.h.in create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_0.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_enum_adapter.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_gpdpa.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_6.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7_without_exports.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_gipa.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_negotiate_version.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/🌋.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/json_writer.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0_named_gpa.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_1.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_2.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_base.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_1.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_2.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_3.def create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/generated/vk_dispatch_table_helper.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/layer_util.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/layer/wrap_objects.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/shim/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim_common.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/shim/unix_shim.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/shim/windows_shim.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/test_util.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/framework/test_util.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/integration/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/CMakeLists.txt create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.h create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_loading_behavior.md create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_linking.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading_and_linking.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_rendering_get_proc_addr.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/macos_static_loader_build.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/live_verification/time_dynamic_loading.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_alloc_callback_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_debug_ext_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_envvar_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_fuzz_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_get_proc_addr_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_handle_validation_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_layer_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_phys_dev_inst_ext_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_regression_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_settings_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_testing_main.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_threading_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_unknown_ext_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_version_tests.cpp create mode 100644 local/recipes/libs/vulkan-loader/source/tests/loader_wsi_tests.cpp create mode 120000 recipes/libs/vulkan-headers create mode 120000 recipes/libs/vulkan-loader create mode 120000 recipes/wip/libs/graphics/libvulkan delete mode 100644 recipes/wip/libs/graphics/libvulkan/recipe.toml create mode 120000 recipes/wip/libs/graphics/vulkan-headers delete mode 100644 recipes/wip/libs/graphics/vulkan-headers/recipe.toml diff --git a/config/redbear-full.toml b/config/redbear-full.toml index e53d9ffbdc..a0324cc865 100644 --- a/config/redbear-full.toml +++ b/config/redbear-full.toml @@ -250,6 +250,11 @@ wireplumber = {} # AMD GPU display amdgpu = {} +# Vulkan API surface: headers + ICD loader. Mesa builds the ICDs +# (libvulkan_intel/_radeon/_lvp); the loader is what consumers link against. +vulkan-headers = {} +vulkan-loader = {} + # Core Red Bear umbrella package redbear-meta = {} diff --git a/local/recipes/kde/kwin/recipe.toml b/local/recipes/kde/kwin/recipe.toml index 39e14e5780..9daea9b3e1 100644 --- a/local/recipes/kde/kwin/recipe.toml +++ b/local/recipes/kde/kwin/recipe.toml @@ -40,6 +40,13 @@ dependencies = [ "kdecoration", "kf6-kcmutils", "kf6-ksvg", + # KWin's find_package(KF6 ... COMPONENTS NewStuff) is REQUIRED; without this + # dep kf6-knewstuff is never staged into kwin's sysroot and cmake aborts: + # Could NOT find KF6 (missing: NewStuff) + "kf6-knewstuff", + # kwin: find_package(Vulkan REQUIRED) needs headers + libvulkan.so + "vulkan-headers", + "vulkan-loader", "plasma-wayland-protocols", "libepoxy", "libudev", @@ -93,6 +100,7 @@ cmake "${COOKBOOK_SOURCE}" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \ -DBUILD_TESTING=OFF \ + -DWaylandScanner_EXECUTABLE=/usr/bin/wayland-scanner \ -DBUILD_QCH=OFF \ -DKWIN_BUILD_X11=OFF \ -DKWIN_BUILD_KCMS=ON \ diff --git a/local/recipes/libs/vulkan-headers/recipe.toml b/local/recipes/libs/vulkan-headers/recipe.toml new file mode 100644 index 0000000000..2dc0e9c2f2 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/recipe.toml @@ -0,0 +1,43 @@ +[package] +name = "vulkan-headers" +version = "1.4.321" +description = "Khronos Vulkan API headers (vulkan/*.h, vk_video/*.h) plus the VulkanHeaders CMake package. Header-only; the runtime entry points come from vulkan-loader." + +#TODO: Vulkan-Headers — Khronos API headers. Header-only, no target code is +# compiled, so nothing here is Redox-specific. Needed because KWin does an +# unconditional `find_package(Vulkan REQUIRED)` (kwin CMakeLists.txt:201), which +# resolves Vulkan_INCLUDE_DIR from these headers and Vulkan_LIBRARY from +# vulkan-loader. Mesa already builds the Vulkan *drivers* (ICDs: +# libvulkan_intel/_radeon/_lvp) but ICDs are not the API surface a consumer +# links against. +[source] +tar = "https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/v1.4.321.tar.gz" +blake3 = "295fcff47d680442e732c525c1b864892f16bd40c3abeebf454df2b39c55a5dc" + +[build] +template = "custom" +dependencies = [] +script = """ +DYNAMIC_INIT + +# Run upstream's CMake install rather than copying headers by hand. +# VulkanHeadersConfig.cmake is GENERATED at install time -- it is not shipped in +# the tarball -- and Vulkan-Loader hard-requires it: +# CMake Error: Could not find a package configuration file provided by +# "VulkanHeaders" ... VulkanHeadersConfig.cmake +# A hand copy of include/ alone satisfies FindVulkan but not the loader. +# Nothing is compiled here (header-only), so no cross toolchain is needed. +rm -f CMakeCache.txt +rm -rf CMakeFiles + +cmake "${COOKBOOK_SOURCE}" \\ + -DCMAKE_INSTALL_PREFIX=/usr \\ + -DCMAKE_BUILD_TYPE=Release \\ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \\ + -Wno-dev + +DESTDIR="${COOKBOOK_STAGE}" cmake --install . --prefix /usr + +ls "${COOKBOOK_STAGE}/usr/include/vulkan/vulkan.h" >/dev/null +find "${COOKBOOK_STAGE}" -name 'VulkanHeadersConfig.cmake' | head -1 +""" diff --git a/local/recipes/libs/vulkan-headers/source.tar b/local/recipes/libs/vulkan-headers/source.tar new file mode 100644 index 0000000000000000000000000000000000000000..381e25c92a40a1bbe0379c0e6687106272bac966 GIT binary patch literal 2760031 zcmV)LK)JskiwFP!000001MEF%ciPCZ`K({jL+-f&Ct~%Ia3}KygY0mFfd|+(b22%y zkQz`dBt0$IoEgt=e^uQr7O~qN=VpdJbH+lduBz^?wYRw1o!YmYu4btNsu|RK@$@AN z<@orR{e=?$3m*?(bJ3;P(G;)%fRf`Fwo*PYTC{7thj(fAjHwN&fib59uW-JMP#s`-6bwv$?l& zKASI)&VZ7S1JAJ?pPYM6=#r|fr&j=9Y1W9s7teJ(EifH>1zat(HShe5Km|bUX62Jy zGj(eFRIVD}iOil!y&@^Onm(X%KAn{~mk3NL83cjr7c&_UQQ6mrY4Bee!_ocBoXp06 z2h?&=s0U$}RnWY^)Gg{~460eC-Is6Sn+#7>rnUhu{0!2o(4H1r0qN3#HZmRW4KaJ* zFg=>q!oblzt4B91AT?Wh#*EB zn?Pgr8z)3WY29@hGI$*D2SC_?zoZvo)vQ}>>=WP%y1i99BT2*YQ){tywSXZb)Un

{8a)e^8aDi31+s|BthUz5joXvSIwI?e?Xjc9e@| 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

5l>%5T~MbK!(_Um1mbrx|OtBoh? zZPM)`4W?3d`CX)iP#Ke`5@C$4P~2@IEtqHv&Un#^1}0pJd2EpjM6`k+Xc7pziQ(g; z(#Nhd8uVr<(hMb$klDOIQI;iwG3J9wv^+E6X&5KO*_>=J{PiST^W|WVLVO!X8CDkK zZ!kEoIG~aVfq5!m7s%;0{ACBRON!v*0?!Ru7uO^h6crtJ>{)sjFG(%e;fE-|!x}6J z)k|y5MfP2q3(R@Aby)2SRONFW&t!9zN7QWz6BT9axS*a=v@e{nyNB8X2T)?{=ul8) z))fYB0tXnuE5Kz=9nk!dNlI%{(?yz|hnq(pmO|U|SDO!;^ds&5Q{v6}Rv{i})Zf(d z$@^S}91G?kjj+N{UnK2!!v{-gMDRv5FIK|cUXS9*9|i+@*tzuqYe$o#zZ0+)Q7-w=* zV79G%cAe=QF;W)epDt(oU&D(9iRCoZGk-x5D~lpr-UD-Uwb|v-s*@E8lf1i@cDh0V z@gm)HwmlC&DG7bSG(mu<_)NAzh%lnQKooAfOJK{^uzZx(btN*DD72iPhU++aoZM~F ztb6un5s21cmB_O25jl`f@=BQVc#Cdeoe;wPQ}SV*k5ATpB(8SciLI;M`};HzbEn_a z6x-<;u`}FyWeH-(6{}`PPbkG|1_U6B4vHcw#RyPsF@5ip@-Ylqz0`Ia;SWx=wpnYz z=G4w-*PtpeaLyMmV!zVVfKoPhrbPl;siBvKX02t72S-YzwT?iC>+DF>zLV61uhaP3 zRB>h?N-<{F5h$QF;{VeWaRwTf-lJPO4(>muhBJez*I{-YXC0b0*8ji~&J3zvhS_zz zb!ggn|AQ(x!|Et?n4MQvfhDf%{t7rV5T&%T6X|tOs#Ool5mCc2aI(Bq&P^bCNn6j=AE(_yjm1(>cC()e=q7n-w* zG>BHDoUicWa}4K*00oytI%d$$oPz<6k^IT|+nOH~#bA5>mU};;Ba{<`bxLv6Ny?3R!T)o1ek!r3_^G}>yYAO%wYMESa8U51au`_^V9}6VhY+C9{{Dxpa)^T6Jow`PUafdsVJD7XjsT|aL8@QFCXAr1tLb=ZMxL1$_ ziX5v@OZ2=fr$2cLyme#VEjRS1hylD^ZakhM70~uFuE5n8U0JG3&ZH;uL;?;=ILEhA zgTZ1%sc0LAX*446Z#WmErIJXUK1H02E(($OxDgEPy^OV7xy)WT7|(q zn)_(9p>-AFM1_sek-P@D^<=EF@M91Q=N?|1l6FK+7+~d4#K2sSN(+IN&P{YDf}mvK z$9wdTrV)D~pk=kicL?iBu^x;4;@R%xt9TzKw-C`A5@~+B-SMmB9RoZCIOof#g@N*V z-@v6rq>-aPMhL%`nZpuZ7`F=b@`0#ot9!jKN@;c%3Mr-8TU{LWqwt9SN;}SBRXe-K z8*QCK*nNyI13PNKj@UiyLP)Kfq!j6lK`%J)TZDxSyJxAJY-YegIWNQ#;pL78Ww_s2 zK{dKnTl%;O*YVP+7&2%(IapcD*jZcJfG5owzKoDjBghL#fKOg)F&6+2xhrR6+qoFC9v?bh^X|{nFUep1s$R%eku15&Sbq6b)Zbx>ejlg;a z*1Lqg(d>n$?frAv+;!8JfOho<`eFpzhpeEgKM>*)0G!ny6{t=8h=gfRrYBm;&`DY< z`itv&N&Ark?zpsOL=N;YM(tuf@UOwe?jm-ig-?WxPjM^Y!mzxJin?D#Rg1-KMLTfW zIR+7210DiIW}$K^aOM*fZv>mtK`l4~VFxsogW|=9@i2}GhX%OADZics7Z;6J>QJu0~olJ6dpMs0}F9wUmhmy8yz1IA3|RIolRAIIMd_5S;IBaPQKk zRt79IbOO{vdNts1BKRRCRh4RWb zIgDF+EmB77Gr)d>au|rlNs|q@K}nMTm7t)o?yT)DzgN_^G&(OCP^E2kC9w`|WgW}tM>d@#54Z?UIv}5x2PFOqi#|G$_QRZ8rv8;c=FQXvD>boa8?nmw+XFwGIG@t z{tCet0@|HB*W}nr{9FfMttcS7DD(a&73BExiI3?)sj{Rwt51VX6azd zrWOAY%2ZG^tLsmt#rZPAA`)dPDOaW^v|6l25~qOLg${7CNuU}emhI!^5Q$=k1U;=FodpjK4lBKA0f>Y=3@;W@ZNf9#%_=Zg zN?Qo5zCc-&grA~Sz)e4nC!ZmhariSZ-*_K<3!W}P9@0$<859m7*$0dZ;|%(;0(N%< zGh(6X32&p#vX8#=6yW!v>ue!%px=Y!US#fBx5?MQL$8U%^wMco81|^oXP!d z3hd#}r9)$P@ei{Y@8vBNG$DKMTnn&E0p;xD-+=F&T`9x+ILrw_yq~9B8;Qd`H<`|Z z^Xnh#w;cN-h|}D`;fp~`(%i@8s|HEC%mmGyUYqB`k!f`6aOpa}a{%!ip$bbIV@bP4 z71y*zuht>d_@?pOb(8YRIy~Opx-#B699FRa<7k6hbTR-R@+iI|iie7K!YPMyCAN*h z&pASNugjqA83Bvx{eB^^dK82}@Lds;>JH0b?ki~TF6T-}hbzgL#6|wl-2XDM3uC8O z9~ny>kR?2UvA&;0(w27u+p)XQM@Q?G5~isj5E(T@Y6@~r1rYB!D9~E~z%mZu;I(7)>jYrjc2g7DewHW&(HY90 z%Ip>!YL)|l5@`fDjO#G!&<@wI9Q-Q!#PePPGN1D6Z2i_TC@sP=k)}95l+DM$&jGs1 z!pV2P+s-p$p~M;9irnUClW_?!lu6OSg5pYU8-w+Mi8rVc+HGRYw17p-X!p?sA+I{xFMn9T)HEAp9mEr?kABX-*Fz>7&-+@!QEsLn)Ko1 zIY^eA=a{Lm9-^fNOSh(728kwdPIc}9FdprB#(=yO>=n3mlQPMEvkFp~3_J)|51>RL zW=%T==rWV|P{6wGSv?k;sj|HFrR^OurlC2AWVDnwx3riqQZ(l{8ZQl4tQ*3+02l+- z*41*|8(JjxTS6&{EhAfqw?tVDTZW}L-x4hh&P)>LkF-$;9Z7Sh9HncQ_ z35JZ$h2c(=(8x*oaA8I)RTRSF*#iYmg;#%+@ z>tg}r>XOp{w+D%(c_FRsbO#~`@nV47Uhd;Kq(eZ;Px-jKSz>jT2j0>tH|5U&JSt(G znJz6BE7>n$d%3pc!vtFbWV;zD5g0NqC!prP6V90O0S85B4CxiR!A=&J{-1GZCxR__tW$c2Wl@5ysEb0I)p{)z*NJUZVj(E) z%0wApy<%fr1qD{9b@GZ=1|@<_nlfTe8Dut*`(BD-vkVk14&h`~!G&qzS~#2lH?*xmM-v~k1h&lmBUz4=V! zBx>wOCFr7rbavL);GmelmJn@Sd0M#`z(x$T@{#g0fz@$1WvF$@p zmq|_EAfIX{798_0i1*c#^{%0yDD|b_unpNn!m^XBm8E)KfL~V7ero7 z6?9<|9U2*^@QUz}BlRfk++`VLx8Ct+Ag-|{?hOfj&VjkA*?D_tu~_pwFoq9a2ASV5WPfKQ9Zh8# zmo*?tXipP+3lHI*kiHjb!8kgS@=G3V;Xfe&y>5p(3M;kCIA=Tr6Wv8+a~h!>sw{`@ zN@N4vMxaQ>xQfHO4HN2_P`td4mLD(*g?6rZKE#s}!Ki|Fq}zhYdYyqthYX8jIY(2zG7TYn#inU7 z*rm~3@*&(v;RrJBP*fBkP$D1~Vjy3Rn{q;j!0simjDwq9PAx(LJn=F<-sR3kNNSK) z&4Y~Z+HivnEoU&)gW_-(2!NULn zeSL&=2)fco-9t%Y`DTXT13<}Y&4J%B*wY%Qn{LH`q%-4Hv`o>n0Ez{Z?DryNm4KTU z&Uqen2<$sRO5Az;Yvh(ZOiIb1f$+>Ara@tS+H10lbljj_eX6)2oG)B2Jq-#EJwAoq zGbrKRSUnRGI|slef@OLiWf*!xP3jG=IKqwus7GpV0}i|HrCB!(gEBx16B3gTz>D*h!K^DSB$Aum>W<_yhnxw393zA~S5v`K=yLNZ;n;nBO6t(|^%EIA z*bQ1lOEBWPX95zu-K9j)CmE0pmtEJ=j+>XKK8eGe#vy3SK=X4ekT|Pd?C9)k6G6ct zu-DZz;GC1Bu8qK&RQ5nA?yn-=zHqh5$You)?+Jgkh8)m2M5>L#N^Oy* zkZ#yPZ?NDHK8gbc)c%UeognwXE+jkEM2{Qxfjcbg&V zjwKZLb8%K6*TMT|7sUO(OOha8W>K_pvXQ|iWuS9}^s|%cQS?hNh)H3YxQFRios^gF z1eB-#vH@-np7Z2&AQY}AucJp{-RoZYRvBQwM5{Uk6d7Jf@91*lBE55w8=YnR1a}32 zJ!LTjrlRc*yi}+{DEND$*=-iNMs2mAJCdnDz#PO11Uq868BBx1punmBDt4_k(}M2w zz{h9?sdHj42(=KX3_cJ#qIuz}e>C9e@JnKc4O0K&x|fL{s9tdb8Wyn3;Nb2Xr^RAt zc%=(s^eI{j7bRDhzA7t$MB(q=XT#Nf+&ELTOt(bE3QQDoG$RJ$bJ$AYj?lKPTMYGi zxb+O7t|0AdsFI>!n}p;%B_;Mt1aj6y)xlk_dCKJJu4%VP)MDtc>u{}^V-;Am$snY6 zF<3ncJF%5VqC2^zCt)9gbx0^%Va2viff;JK;yCpLm7 z*j==Vc%;lSU9Xu);^GDNRsxR%td|E^3yY2HcyrG8zC0;GoC+7FoE-LGpGE_gzTH9-+P^j*g@kpijSv!`!i;7r-4eFyE414fqZs z@y;l7x6$(n@{=wzuKA=BY-6yJD(loieiolHbtl=nUzNHFftAjxsyvagsEWZma})}w zJ$#b2O4q?nnsILiS|&CKd_=%wgmX{ArbE!>akI<8J&p-;WM7*r1_9EahnI~6rO7fF z14^#uAfV1TkgvcZz-4%ba5?g1jii2@vW=_Q(njoq|=KSD^Q?k1j*=C zK5Q3^?Gdof<}VWxlC>r#dY_2-m^gczlz<(|VhB-T7azGu)g^~G@hDQIfZB;_#Ta7h zDYvJt86b$6q&%NJ8!kfRbF{(8XKHR~8M{12upgbXOKaerf;^C?xQ(gq2KBHE;0zdS z&)^P$#UW8k0bX<|DQ>@!TLmDej$!+H6#esOfmw353WE<(wu!(|Vz*h+s&kGQ*bfMG zhCr^y$Od@7)LFPZMVv&^5tFzo3kD**C!Lo=fwk@SB>fmb&FIaN^44BlpQRtqcyq@Y ztpNAw^Pb-Pd$c6E&Pc!YDTna#c^9z#eBSY?eq?(pOEeVZeh{45o>hKbP87$AB;O9WqL_%{?Q^MPb%BpsBnzPbMgQ7!-NDE=l*gm=# zHBbWJuwYB|GHDoa*nJ?-TwLh^i9QejRVnnGognJq*4wvv+d?6kBwogalOJ8{zU4Ul zJn5{+tb?iT3To+TWhvduPOHF#jR0v+z)K31BrfU^;RR4adum1uXza@Ns@{~$9mT}5 zbn6shT2+janV-%W3cp}e8!qceUO8XNul%p#SHufg=yPtvUE*YJIRyYeI}3uE`F|!H z)_n8=ZYogr0n|nz-DM0{&FyZQq1S^%G( zW2Dz%A~-)RlX&al{4io*eViW@_%6fRI>z{?BHgA*diRJ$;J~lC2&q$jDUmD$4yfri z;}|@QZ$?~pEf=p>BckAf+a$cBvcmjv5>afY2K zh_M2y80X#$^y>t2M=|pcf++yMIExjE2i}*GpP>&9nwZjaoYb zZCMS5)uefcfRbPxZ-OKxUb3hwhY*nScypFIU#Si7?xz9kz&YIiP`u6So(DjJt>TbJ z;RNYz@X}?<4o_gz)7zIPUQ}s)4;>^(3j#{9y z36YCgU`Dnu0Bx$%RU1!0Op16I^7@Tl=y+|EPySKr+1TRRw!RtgOnAnQ!qru@v9DKx~ zJsdX7XzW?Tlz^BZ{}})JE0s@DBU(6|bI!0920O3B4zaKppn906$Rul&fXfjWxJnl@ zTY4y#Y=}Cd)k_YAn8#7!X`GWes<2k8r+=lk*?Ip;ZF(F|9)a9D#>WSc`?d7*`{Ow5 zGrYWyRy({F9BLTB)Rcf;C5*Hf2s}`puwCuR2h9<-7cW#t;lLfwA~<5~cLoJG@)l>z zO^=GnF^>wK;etI?Tbf=Eaa0Dwc~n5cigOO{ZhMbo95};^%AWjk7*)!0D$ez=1`zV#avH&vR?0##94Z-To<@8LvttKISJ2IuGO7OMm0p%Y7KnUUsA-<1PSeINOdD zg@qOW96)`m3F~ke2|l~J7|z}bhf!Hm7*uJr1IfX;=O?ezdzQL;Fc`5|`EckU&4?oM zf;V>MxCIzRZO!)c4iwjn*)CvX6YmM}CLr*ng!NNmH?g=`j0`wTmZN=n!Gr(ze!bvH z7;P+Bx-HQEl^8R6aXsY#&e5SYNPBYN=q_9`AtNsCBVvIqP);M%i3D=iZP&rcUNE9| ziOUvHJXtuj-?|&nI5;~DFHUCD$w@n=K>kp^vci{?UIJTSknbV)2K6a~Z9_zJiBLwV z$#9@(ppTq2&__Kq&_~v|dq_$YBq3$*v*ttA`Yd$Y^A#8|?-9{=xXfSV>@r+Ik|=_@ z8E!N|^$TCB5SHxwu}$+>)F3HHiC}7e8;!3=5$K$jB6iM$rHUD4r}1-Yv7)yKceB?~eV>zf4``s$qp*@VQduRuQ}Gt)`qCV=gv3k z68-4<#$1|^P(&mVc*#W3EWX(lRA+oH>+o>NVF~LeF*UK+$qpYQG%yzoGnH6?nF|nS z8dYGj%g4qr3G;wQYS)Urb3E%qGlX)6HaQ79qCX!%KBke zlRkC*bO@|x5R%#QTzRyU2MK90sh#VAD*+w(`+CT>L{gT&VHXV$09-%ogvM404~sC1 zLSN2`Z_^=Q=*?RxxH@(e8m+5(8JHp%q9v$1iyOT~VT%&leS_)o5VHG%6T^xzEDuCp z9CP!YAkgr^nF+5$yX`xKWl%GyxdbNEoUIndo3(_?R`O!E;qlbNzQZe_>9hZ^{iE~j zUvK}|WA+)e$LupGr`dNG^{|^hVqOb@?UCB@LYa3_!}E{yU|nKe%e$!Nr|0-|X>qt2 z(J8O1#tQEC$m$SuxS}x@4!z!Q7<2P6itp~pGV>{djsWsK2Xyy7YoV}H%X1a37%#sj z#T)|=CKo*6AkGA;zz!3Mj-Bq)h+dg}CJ_<%rA70|grm=B)+Z@WH%9wq-HKXri zK0g)u7w|Ab#}mTX0P2hbac32$@wA|=Tg;y;t7Nebfn6{Q zQ7Z&K2}QhyG*N3(aSf2AO3+0K=`4?Fa8NFm=+hRQvcf#yt(|;T#|St?IKN9p#Xt>K zd+qEh@VbYqz-zmsd&$3V(=-WEcFw{ip;xN}$8?F}l3|$E5IFm|n^D=hJ+z35EBHPl zMZ`#(CciA-MULSxZE)*6^W>HR9K?uHt4ap{KF$%sD{xrA669$i?z26Ug+UhGW>HS` zJ5WUT2|&*{a1RZDiiS@5FFSC0`Bi3WqHKU>#iR;>YiN`elikkvQ8<4EXk(?uVtnM@ zS|fyUHYe7gNtvaj!j4+Zs!9zdRBZ0`tn?@-uR#_i;V1TjmBvLj$|BoQ)25YI`;6m} zhQUdN#qX&w(Waf+W*z|K}(JsRqh_s03jd(-2|dt;kWO}*}e z*Dee|5 zvFQz1s?)~<<3v|<9;kBBxGn*`y*w%u)_XzZ$AIS}5hkR7-zYm$YD{*hIf|izVJ;E4 z-VYX3R!wr473gLtyr4Zta#^9-$7s6HIhX*tP?f)+$XoR5eqp{flnT62G=hUc7=et z>O>ozvU1KAIu({6GbqFnwUABon6nD9g}_1oIDI#5B&LFI98yU_bDu1d3LH&=2mtzY zzxOL}S$H57K;|ItR@pTGcw}vopj7ur?$tu`w`n=0xVqi65m?%C&NJd<&)7Nu)ZfP6P;_3v4(xk zzucG+k@a|p*s?7xaF{{x7_dv%aN!!Hks_WBNt;eaSWl?=klJ}*ge}B9A(9c5Js_!^ zf8rBaEtvD;sDSPzX=7OqA}Xjcpp5AkRT~71tH@A??w_TxUrwU2t|+2MN+Js$>$TFX z#wx@Ym*j%=>Zx4v@XIb}#zYDg^e!q=#sBp!Dq_WC4aF+ihh@0D2Mzx+!*rtX+A>tM z&@B1-j{wJ{LIK3M25Q-GX-A^{l*1gc)3X@=bU7QayY6Z%A1y1Sm4S>vSws}>ukz^i ztK+!1EV2{4rScB4b##x0XJ=yq;a!x6+gOl&9{zipbiw!5thA^ryr$@B>D9&Payq$KbS*}m(Hqa;;SLUh7lbSH^7JAYmX_?(-3F~b zovK3yb(%$yOZ&-&3o})37b&DC;s18Q06n|HvggQal-Fszs@k_zUN<|3Vs(J<1VDIE zxe+4?lLP5evvAbAA|@q}EiqpKz&T@Aqs?8Eb@ZSxKCXkP7?qB(^h{0!y}gYJutYVx?~14tHyk?JKGxz&x&W%iayGgRL#8s4R@4rTX<*zi`1I<~ zm2$Q{hH8d(@7|+N*N!feaO2Zk1CG+AvKs203E-V(Q!6l`bB%s&zS~mHk{Qye+pF!0 zU5$%~z1&V5Q8$JjWRNa*D=?|^@)WokYK(wxo%-qbI}x}M;isb2g1U9=!IIjc-MXj0 z^;#fuXUNo(Zj$jQIJ=H|S1k~MI1cBoqB6meyY%4rjew+1xzhwcBW~(+9h^g#xG3&D zHozP@^pa7mzz&@Y-rrH9Z-;j7-cc!U1$OS-ea@S34qcX~!M#@vD52x#*66&>S^$Jj zw41QACp{FkJ5RpP221T)VO5(r`odF5Pz86tIj~}&k^%DLRqk$4)4)->6f&}`rjJK4ra-umylhuG49;ZKnHQ3Jy93^v1mtG?DJa3c2~Zvfe=-_Kyoo8FUVl<*D4YqA zTdMOk7{Hu6M6t=&JlX(u?tF6M+p`Mk-fexiIL>tw+PQlrmi?vg`1Ls4Nog>+j#JSB zcPBvR!S}n3Tj2f#c&|hofin@8DO=4^5~F*jw~vD!i90dAyP?lMD2r+GE#pAC&Ol*B%N1J9Mi^Oy#;jNz0)PaO;lI)j|+IuH>Su!c+WR@IlIbhq&j`y$}m6N&zAEEI$!A}jTQZbQ<|{&pM`yIB?J zR9z|L&_X-3Z}$$ny9?gUsCO3U4qT}bkZj!I7q*XKNe@ccdgcw|Zg%Oy;wQR`5LDtiw+|mBM;d&hs^A{|d8X_ELP{tdpni)r7{Kpoj_6VNtsqMSVI? z(z+3PYQK5e2X>5Kzv`p=)}ZkuNOQ6535_Q~QV%Zcr9hmp?=p5HbS4rilwqu*w3Pdi zW<=AUAm2;Eg2=SF)c+{HO-lsq;$y>QokLf#|yNS+wGHpJ1k(tp)~Y!edz; z=y`kx?nW+=vlR$soDvGISdTE>I+#m`??Yl_WfOqX2@kF$Z_Q?VdKXo|XSeyF1>w>S z-6o&`@#;t;w(bQ9otQB(*0|Q1fWGx?(ha&6P>TWRB_(z>i7Q23ca&kRHCdq#iHwL5 zjM$WnxJ;8o#9p;`jK>toaGb(0B@D^fpih>^-w_5!*(4++uEfyyr~!=B;r6le@$H=B zMsueQ7AbwR>!FCHwT+Z>Z3Da;@^&^E6Z#u=u&*R|RZ(=!@G( z+%?#(ThWsqBc45w6GicA4^b4adZ_AZ=}s}}I%NOj1|CmO zb^=D{g;O3MU;p|R0(V0LcRXhoS-}{tcTuthhU-C=KIr4j-htDTRH*83$FQgHnu7kQ z4~<4-o|^s^K5z3@7dlS@7g4s3H^}JhV~s87yrTsmuXnG*YC+__=i0cum(+&Jov_Ev z@;*y9BEOrb&fSE?-DDGeiV~TzUlalMw%S;6InNYB2V;UP`rz@xhB=%sM(<8$o@TBt zbnXPE{+p@}>)f@lxxDOUvGER?tXH#ppJpHMfbb00Wb zg}f^3&MRVO(pnF+$PXdjglbj7j`(k%tz+a$dS8E+S-?DRc)l>{=OAdlaQ zg)kiOW-XP-LT3?WGWH1lT=#&2Fq{$#_pe%HAyj}SMsr$$37t3h0!?YH0{C=7)uhW) zNUq_d0+8c7&O=h#K$Oyfz3Bs$-2!R?ZIXVBn~+K)@62qduVq zkBhOV1C`6@$}8VvL>gF!Q79F;#OCZ@HBpafpF~mSRw<@PQjE6%h@CW){Irf*Kt7$l zkBfU*kI1XzCISKxN*=+w`hb3=5Ks{I3IU6Y)o#f4mYac4062A08Wqok=Z~jNQU!Oj zP1Z6mqE5ikUa3bw3&4_!R#2~;N9*PG5sZG`fHWInRx5BwF%>o-yt*Mwh^81KzwG)I zRBYiO&`&|ribZ2z1oWiVV(Wk4^?Ek!L>2*|Bk)gf;^Ao=c)VGF*9qx>0KCqq*9vIA^cbBVnyi zc*}a2G-b{zxGJr*Bb>_%B;c^jj_bZqK)w3(fRV?Tv`kKivm~m%Z=U=iz8$QhTgDcy zz6AVN^Ko!_He8%eXXn9BXOm;-aqzTB!lxv@ak!p-V$Jnq`vZIX7zy8eW$OE@Z@P#a znP^-(k+^iGa6}{U{qX0r;l+ub$dBP8+h8jPLf>-;M`9HsItga&X48p*VAge(#x4X8 zIfNs@3K88iJh^yzXqex4!+vs@U1;w*x3YU6ROz3w2Ei)2+1&+M1ZgiR#}t~+u=OZR z5{;Xs+QIPrB*;`jIY=|cNfP?eirFXz*1nknI@ZhghH;tJk9M?Iv=Ko9f`Y7S1 zH~$_jiwpK<_`)v2JMA>WK6!{&Q5yULVh_>42E+~L}(SaCyX1ZbQJ6DhKpOw6`R z3hoBx^ynyvkP0VYguwh8qjVLMeJv5p@g?Rk*o#mByL2|*tlTN|NY2iuFkXVeodCsdcjEZk$HXzDT18OtjNUXo|E#(Ff1L?Po9{9|gGnB44-#`k(&u&G>In1qY#pMsls z6K0P=ye6_CquuFlgNd-zh5D(B%F*sDWN`Q7=1iX3C6Qwv9Ee9fv37MC6frc1AH$Xl zpcF}P&-mAba+1s9q#`eIwOj-uOW=3dotCibj$v0Z+%fluuPKh{;!y*TcMQVknyH{q zwl}ViKn08mSV2|j4*E9T&LSx7!ypii9|ad-vYRKd+e2G{i`Uu{*!{h(fPdV2!0bY{ z%#UZ$LzK94CKa9;7<+v9C=G(M@R3|zw1LH&nP{P?o^*Cr_k?M$WXUUkPw3u8`t)VG z8|BFPMmg$rqa5|QQI7m?l%xIJC`aXuGLP;Y;?o*f`dlnWeJ++GkBjAKPZ!Hk-;3pF zFBi*E|BK~lZx>4&(_YEyb+NS3bzdw(9CBe*xP;=%s#MS(7fS`~aUd07_XAl0_uWbs zOcpZ%Xa)(O?#Ecw@!BRx2 zay<#kuZWcb1#(ZE7x5AuNjNc9{qWnjmvzlB`y$9uaAG@Jx@@?ZTM<_A_Gl`MSqBz{ zG5fWlDrRE(GR-z@{&LJjyy7y8v%ES&Bs`ljx2j5kwJ9L89wSkZJXoVR9W0geN$6Qq zT3r>Ay1FCv0P?C{*r(AZ6tiuWgO@=;GiPXDa2yKS7*xryTb#54(+m@y1Lg*l578sr zlj|M3Q>aFi9{}VWAcSMUEJ~sMpiF<*@M>j5efXN6S-UekGbTjD;$ z$szez^nvDZZ^4((4^)9`aMsS-UpI%hl-FFHf>SE*A)7nN1Lbrn-So8F?)lDBs~z6poXK;Z?jhu>9F6cqA%1fuMR@pz>O<; znX<9KbHXUgq~|6@r*6nGKC1B564#ItP_#kIk_gThz7AXc>TfJiyjgNH9-E0RcPyeX zti0un(Mc-vT5C`9I$jp2KF}G%mPxz~@-2IrgO5SZ#!g$j(s!P{tFXJ?&pBwrbH1CE zYa-CutxEqc&O)#qx7!pXHw%p$=wWN=)Gn4>+d?u2!X6nv2%Q+k|AP170dkpsBzuTd zzKwjAES9jh)9Kr@aXI!PUK1CeabaQ?A|JUxK#q;Ld!Y)2GXRRWG^km0%i!)ukIN)F z*=0zkglt;F*1M#L(HO>Fc5W35We638p+1-Jmr;g%W(iC*;Wa{Qjp!OCx5i0+5GN_f zKgPfQO0wxSPw|{XdLLo|Z#cutFk7(~V##j#yM#2ejXW6~#Y|%GG8i|J=)#6HFI*mF z4{Q@XM0Ni%4}C<1sz=bi&ibvQri^L@g>Cr#A8nvQwflkqh7m(BMtB!j0NnsebQJ3E zR~cjai;zjOA%XCBtL$8~CXn~j&!aR+vsTBG^S5jRC*dc?f&=+IH^YphGUk+E-Dx5a z?!%0AFZc_Xcd}}1j-cW~HAP7D=ksrYVRsZ~k;!-Gvk}Zo9OX>0vDYx0 z0j?wK7$nTFOne}mASlmBl`VlgJ*YdR^FA=aHWfNT4uwsBa|@ZM4qm%6jR=1%z-wG{ z^C9J<4`i@|&osys78Kx*;@h^7+HP@wUSY0;zeT6$DKAwG$wODlG99o%Li zI_U<>^nnp^7X?Mi{>?BsD1%1=c99|t8f9?vDhQX$D3NQC7ugPd3n`~Gyt%ndd8%%T zlv``xt(G1tbj>AM$GbRLy^Yd!RFET7&4^~z^hLA}91~2mwT$*cP+#~(7IOz%a_+X8keyq^A>T>w32&ovOCr|-ce?%C;84R-m*0bmhja3n_sIzZTeWx5zD=`&o07om?Iw>%j)Zk{VufOk82k;BO-vTgZIX&h++FY< zv-g|szc5O}EN>`9x^F5K3iCIOc6pJmeXcmx7D6&xaYTLa)UQf6f34QgoIST%9$*dX zoDnJrF2f`$ik3GRTYZHiBl#s*C0*4V+y)}rM^w#v2 zr7Y`u3=}rh;Q-ipUl(XC%epryM7QIkZRs%k5LJr0BFf#b_E`BlfM&>7iB3p0jyC90;81_t%GH{-o^>^M|P&K#2^kTk{;BI zX~qcaB}Bqh?moT)OtZQLush_RoJ*vPS@+5%QbG3#`S;1ep#b*?`R|=Q!h)$INwK7R%m5nFMp3SAhhFXs0Nv>*@NpuaY}nftCh@PTKl5-K!{UpMI!IT&x;MA+ zorvBN-swJgstn7nkZ|RLlG+EB=S1=E`#MZ^5$sSeKoU^tHC`Q1H@K$HdJ9kUS==t; z;AWRov*I)qQKQN64rOf%zYEX4^a0;+Y3qJPdT=<<1;V^rWg0hiN=6{8xdMNk?3F<6IN=j|tj;}eeKJluLa3bj!=iGx)*dJB(QEy>YE ztc}d#Z3OaAIjgERm!by{aEh+5PPVg(T7%JB-L1j34;*e)7^RK5jmNzpnz0 z6F_548zDOXWf!hoR3@5ke`F|x>cr|$E5zcP-RjQ6vc%`}7=bMhvC`326w4#s`~V@V z>#0f3oG;lrD*FFIV@ZFdfOx&4wj%xRX9W;nJ!xBO5bG)a)? zQOn&I#K{Y}GX|yb2g21{INWM**8OJ@o517mh1;gdxcJQ+YNDN68a3O_6593PV;Fnb za5?aM25WObS*F4jn(?}8bf_X3Q%fN3gym$2Y+SSrRK8l44w_oS7EaDtwA!IeOHB!P zT6yf8gToHDpys1=4TS+{X5}X3oR*m+Sp8*BGsSts+KXyYuq#uCUeBqLV)QTy2V3V7R~!8 zT(R@-5-j{qfarx(1Ai$vON@E)Wbrstc?uY;=LC$LjO||qtH(_Uo#q8iIBT040nG`= zf}7I*-bpK9gh79ppQMLvPM(x;iLE+lE)re~4OPt40CMB2YB;CmxUdYx3%pGG+z%Sn zg$^jFoSo8KFNB2KQa(sRTJ#oY=|NqB5Po7oxD}EC;_!X|8hAP+Avr zwq|cOPGZcno3bNVCF$el(H?nHOP5WKiRkZHcbk%QHE`K91?)&hiPRS`8Tf9qCgwS< zmwy8^Lf)51jF;Juqv^TGEgL|La8=2!$NW`_?=l(*<`DX#>gGN78nH)o9}+ryF* zE-6MC&@qD{=Ts5x>%58AD_P=d=o1a81o5R2uen2U-|9HZdlucA-Ez>hz}=GI=q?8p zopt0(^d%2&u+A_&)Vi)aKpe-20z60*Zygl@g)|1&0qxQBa=fv7Is;kFe&r$>Nf>S9 zT&;W>HNB0dpffMBq!!j93SgzHfr3U>dGakCvNH@bkqiJIHTcveH&A(F)~YW3CjJKoWgM$36C47YJ8bbY#C_HcdIb?5M>+2#U)ss zmQ??C73wPBcDmXzIJE>WrG2{wuInSX3V*=y@t(bn5e+KaIW*KfVvM<0d5Y|%P&tU zHb_s(sSO7Ww>*oH#D|Wvv_bKi?}MQNQW7XR!EqWu>lu@)-58)RclmwuC!XEh2`4#) ztOO9u7&Tu&pZPAs{rVu8ZbK%}XfgC~VQJ31r-!E)gHm|)*1#xdX=ZdSmlsKLCYvRoV3*mNPe zVPjabzcW%;ug!_%xWcp-hg>a2SI*vuupweMr%5K<+1=cM9VXaqVo?1`jV@UAKKiEM z5jd|nN~v^Z2s<(lwH>g7XtP_p?;nkG@E8#7W0F;TKKU*TxVmG@)YM<=lm~w%J8v#S zW<5AZRJA;QzNsY8&5h&hnUYT;@lR_}qoU8C_A#9KY~hN>lwpG7Ic5v*p#7aKq>+v!`@ml#VSS54A~42OfT7-b*4|5m z+y*A|igB~QHL8F+fkO6&j4Ns#Or2aLs6fR7NERk4$i7)b+C*5ls*$xIQb8f~J1qpwDcFipl*TNQn@mGdkgYq|gL z0Mj?@t}I!pdn#zMjdZH#m4)BktG;`V zUabLdMDck?FI)|mX_7=sVx3i?(l0^8-|eIaZfG#cdltsR3)mM+UotqK+82vv8`BW@ z%zE^9)7m!s@VQ z;w&sIP>`3=GPP~|SHfL-b9`q==a;~6pFe933gtUuCSL#a$&z{JB7s1p@-nhcF04kg7h|c>Fzg=bANaOvp>Ck zd19S=VFX4`PHN!-oy8Y@I@Lk~&NI}&(=kse<6F^`5-+oqmi|m%a!Xo0rySwAz(*io zEx#qfh`S3x{Xx_^VU)cuz_2)<4@_Cm&jHZs?kEQ)R>J`V{ofthE2Z9?w`gOJcyILv zp04c2L|1s8CUS{kz56>CCkj?cu)F7f8;5tes|Ht3Uv?qGK>`k*|369KwI|!e8_W?$ zGvZk4=4~IDR)^13vhBuro#i&E6Run}Dlo`D#=rjR!8$5|cyo@zMJV7ddulLWy56Q6 z*b3ox8>@cudS;T{6_~?AsQV$Yn1lYd!A=Tf{4c2BlhkwbwY}vSZ~i&6{Ljuc{VngK z)ebkbFbhyRyf&#uR+OL-m@Slk2LN47LQTdlZDX-c|Q%yNSH=-d?a*P9PaE9L>D9&GVzi>E{Kb+M_PFQn#FA z@ZR+;OpQ%%$JK-`qpCb$J;CO?8zzI7zzr4#or{E4GZs=V(Z@(~#EywoR3;uzXV2OU zZBqQR2R1QT(+7%KgK{pV#}Da-knLrXfIE+TfgJWk?c2XJMGKX6+{Uy(=(@EdIZD9I zSS5IJ-a*(+6TS+7+EYRo(T{r;MoCf4uYllT46q?^deOEB@-1W^rmzlHSK~9pIR}(; zjho!R4rK@V3Cpvk9rzgIxxUv_wxIZv+6IQ7zdskGR-QvV5S z{~GR!(o5La=zk7aq;IgpI4Zsp53Q4rbsM&wf~6N4X9Qw0dXmw=qSb<&U0n=kZ-s+v zu*za~Y@5|A6 z3)6aZPE(`zi*ec-%|wE|hU75>v6oC?&~yy!G|?NoY+Vj=5^dq8+bpTaTY{DTrN&Lwx43Hp*TUF<*dR&Z65 zC}@54dI}1&J`Xl^65WN%N5-KR_gLo3U8#ZyP9(g8=icz*WHz0gw2My2A4)-$2dqJO z3b-dyv|^i8md2}hVYd1hW}>JM-yPD&v3hQJZ+^T-4QF{!_l8kJrO^#hna+mA9nyw` z>}Cs+kg~o**7PjAgWXH0St(jyHgX0NAR7@_9FH~CNR{2x-Osd4ReD%cw{@T>fe4Mw zIbSClufb-0C+`tKfhUhKAs8_Mrg>zDMLRZCx4ljCSd_>rNGT&tYU4|R=oIi+)uw_4 z;yLm>`5vAGt|zy{k+|hb;ywVx%*i(xcTDy&kPH+LSC$1yMvN_x9tX}jcIqg-Q}xu* zc-1%IpiZfM>!9+<_5ySU;^A<)SBG9eKSYl{Fgbfq9S7)GWHgDwT&7bijf1ttXqh3< ziMEGN5BR>e16(K;ggRu~P%s~lf^Z$*r9j?ooY2^+AwXP8fXZ^uusOb@HAHe?h^A%W z5~V90UG2+)mG}lgwK^~+v9}*z2TDjz2L}3^q+sys*14xSo97s!&8xT2xnm6ueagI>@q^toy@z?cs8Dx-8+2o+C2hZN#I@Jx624XjdeyMZHGFg|>LyQbu&n zAuHwfg2A~3wAe9_d}g&cz+mdzKfro;>uPcJ2!yj>GdTVVm7qw56w2H~?zbja4e}&J zWeOwz(%gD<9sUyu6dnO*?t*ng83I-+ne+Ap64mC-*Y!!m#I6P--0WiZq-^?xA{+}8 z{!aZZR2@$J%{0sbPab&B#aQn&10wM;)+ZDqu|4;aa3A8%;_$leHoKf%sg*UxofzSi zGm|*45M^aBvD!+MiVze%-dk|)$JXaz_JQiRDho&?QM7f3kenkO3M5eB5iGQr4zMkS zAsKcNui-4A8w5|pMKHwdis|jKtWN=V9Brs`uZ1W%QUPl($))m2Yh-muyppk)y|Z4e zh09w**F{zH!drz!$dkAe-HJftgK5!AGcPx*IXN1&kbr6-PB8nBb3~N}8Kx92`oMD2 z{XAO7rFS*wx8lNokiAAFiv{_@>#Xlycs$|6MtsB!6SF9Xq@f;Y!0fimmfmED?TQf& zX}l>EFOxl^qdKjaaQ0iK+OgaVRf-#iCuyY*_jq&XdLA0AfW+zV>n1Tww=#@^mwocb z)Eu8PCVU!C8IO}Z8j%vGi-O9@pUZ&I#EY5~JR*89WJ^zB0GnDJ&if4kx^nY%tA%FO z8Y%eAdLzyaQy^{NLG*CRCyo>fVMQtD!Ouub)&3-HKGw5!5e_?>1WU9r^5aPA=elO z>Tbg0;5>@7q6koH#MTh)LJ%Nd#A_)3u-=l2R+VrI2}VuRsE5=t5DM$?nyQX≥EN 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

NwRlJuNf~CeZqy?D_VBH zfh~9+IOjEu=AO{7w_v;}JiX||X`F8T?+j($*%g$3jp zJ$Q2U-B`Q)ew3n~rSN}yh0jm#CvN+=PbV+VbM+9>B_d=k_JC&(%xE1Ma7yG}zHB^($J!8C3Y2H`fWtVXea4x3$;us}Sm{n)Q z9|wvK*J0ur7l1faL7^uquv+><`*)73ah$|{o%dTygq|_+K6&Utd|hP`Wq!K1>XK8> z+>^cfKR0X_yPLZ#-EDiSN8veDb+`V98`O-IHq)PPtc~*E^>NH(k~9N#a32d7r|KkH z#h9S0x3aZ?Z%;-6i3UT$dYXXV!tT)T%U&q=_`)bydm4BYOnb14G!KP>eP8EeA1Lcb zEm%F8Qr#!Sg&}5% z?Q3V#;p``@mlmq4{PQTVPttW5Z>CwyUi*D$h^rY!L%~CT<67e^NUVGGiYjsL)dlG~ z%;NAS;ro|KAA2O2(OIyqCH-DLALhL<9e6MHxD6ypJsC-TkZE7dl@@7#R`L?EX7`l0 znuwb0&ps}F?eKf;N5hQn&1=XMAnb2~GGW|4JdAPq2lCwDPE6V9in||!8)&SfWRVh?@ssdV;(w=yv-L@B+ zei~N7SvoZYk8y4w0UQRZ}>sNa`;~e*C zl7_{>Yli&WJ>o{JP?IA|lYIZri||T8yUku-Z^c&#f+wMm{Y^?6`95bxsy3=Gv3S&e zoq`OV^ndi*x1VaR?_+juu0adyeh)1BSIDbm@k!~mf4H@TQ@amkqmbig(Q1cDH6WkU zUeAx{;51GcpLQN^*5Rkm!0K>;2Z&Ghcsy~klPJ#>XRKc66+9J}(D%O5BJJncSn*XA z#(wX9ePXXRF+8?h;++@aW))_uJ)92Rb0+;XcnQ#G1>wH?)bh@wZ3w9{)O&;vrC%=^ zHnN6&e{61lwDlQzm*xeAXtC=w+UJ5U;+1E(biYTF7dn% z_km>|-+^XvKUV|46ZpS}s}&U8?6t}od_BD>cx>k=+yYSoMSj&(e(u{M)A%`QM@}oowO)!wRGKY4!nm z^SwJraM$$oW|tS6z8nPj$5&=ezeNWerAX$Ff|IdG_kapfEYiLMgV2MX)Ci?ZPb^hz zOOG3-Cpb(-AL{o(gP6^|_zDWi8DbIl@t|~K-xD{d#F7hVnpLf{eZIbv4fH7W8KC6b z=PlMk-gAc9(UR>hda8sWAg_&duXDbLKEVt_-i%BnP@OME?@ngDrk?A(;>}%8tr^3h zsNs4iT#z{TYt-PGEK1}(-$#9zV*d%%NfDDx5#2FiA_e~?P+IR@Vc66Ij}_NgS<=VVKi`*RO|o1`}( zd#2-*o$<%LUP*P-s6OsB6-t;#9rb6>Y)I~6mV#^k=P}4j)A>H7F_BjN69hmE^L)47 zZxYi+x}eXAdrzEW4JUN6mkdAkLy0M8sth*qL!765T|_i_Y&hP&Sr#-&j|Ar5YG(Gz zPOqX*V2-(p`}(#BdvoX?JIXO!ZPq<-7~j^T&+}v-?Io@Y7-Y6@dRjD^xdZl=gVozP zuAX?&Qvk1J?L%*-!@Yz6qp!$b@HMp0yZl}e{`UE{HieY4l>Ib|!qtAnyh=zrOM50) zS0tTUXdzxW`#;^UKhNoYy@yN|{8odvVdsyerl9B%1EnND>xZSGG1(WU_i=H*5J>iH z3@W4Xpk`Q4{kOh{Jt^0_knfAJD-rJX_5)9sQfa%#d8py-IR&D~LAr-rKZ}$j^Uwao z0BiL0$|zW)X&;#SkyI`kX8;yixXI&w2{$5S0~z(IoQ=P9;ck*29{dwvpRs=7Q#vsIM! zEWg^WFHrkt3SF?C|7uuC7H z7JaXhv5Emr26OC^f~$7=KZFYQYaq2hMv3M&PI~c3Djo`cQ_0%)s*Fuka2 zIuG=lwis)s&J>+|FML(xQ; z(v@%=>V@n7&)%PQH*#YM!tnDse+6BAjwkKOvYqlW(_ZpDltg9fDQy;&O1t{>i4!72 zQgo7xa70j!!V|U;%4* z)u1Cm6_*3eXXtOU%+TNFpP|3q(IooqE@%F4cRoYw7_!dLI{2(Jv<^Q14E=5P8T#Ao zGxWD?hMre<>%=otmHpfk^|w2jsK4FaMEz~9iTc~j6ZN;FCu$PuNOh%gG$H3Q&LL(F zpX}1lbzsObiwaWCGzD>p+7$FmIV&3QrOo259PX5&h1RCE)p)`yt78DF=)csH|P=+cY+j%tk`t^l;C<(qOdK44^ z!;z+!rsi!SctW$mKx(yINewBQQ;|W>9TL%a*t~7{KoM?PY z3$g(+DpEzeSfiL+u@EMRNOGLj^#f=~L~E=_9~rx}6_CeV#2lI%M2^nTqr*p>Ky;2S zhLMt4HbD$Kk&hG&PA7O@J%SOj-hx>&C8gkR5X>orLK5>Xt5sF@V_8wtkkBA2&=tq% zApS0L`~I0B`INbg@O`j+A-QyNsCW>|X7#MUViG=W-Bk20LI6G5D&l&JS6BoMc zT3g!A&Rhcp(P7BIDf?kT-QhL(pVZ(uENOw=D|l9r=bVPal+S;nbD^GSUXQhK$HX2B zQUjJAqQM|v!}~x65~F5pRWG-(ezvHTqof@Og^^KSB0-7id{40cj!|dwch&)jBfavL|QOn+4811A=U^BNw|5#=S3rtm%Y6mUvm3uBrNyO@D} zM=&zB@bS=mm*n7b6G+j2sDJ-GIxULM zLvsuz)2v3I1x{*}Sj5Gs8AeTHBrrNgFwj=zN3iXLobJFBFEMy)9X3FM!8h&i%MQ>) z+)}8_q=T9{0!P*jYc+uM4eu@7`DNJbq8((`jc!he2-a>krC5N88&X7H+GdopXxoTF zqFY|J0$#F+K0i~6&nU$(=s3x9XG?{i9tRU35|1|@B%y9#!VN#bC45RmfSz7gLn9U6 zOH4eT!D%PB$XHUYm#Stp7^Rx>T{ZAsq__dhV$x*7h3NO9qeF(>X(B9qLcV902;G;p zY>>ptL#x~nO}n|GL@GGBdPWxFlC*8B!?72#P#>Sqi_`1B$;&kOqNtlb@th8T)(+|b zWY@AssPV?rPp1bqy4U3*nex+eF`jltll89ucBoge8#Hu}{4E4}1O*>wM8 zR_xENrf@EsoxvLVb7dHu9{xg8HLFd^C2C`}a}1F>_YheI?_Po}rJ=?_pM9(rTNFs{ z%J!Z;Y_sUfVQ~)=zB5DS6KphK=s7^@5Zru_ke8nX&hRYInRNX&o=~Lw^A1*4qz{3@ zg0lpmI7rNfudMDcM|oYtkWk5L2$OW#*rlEqBgW~mqBzabA2{r8ZsC&yFTcw;?)C{t zc~`CaHkjFh-kOi)8uLo)I!7NUNl^L}cR^JH0~$@+_NFcSJ`*(l-nRlU{Yah;J{hht zgqv(=GLH0!J30))CaD5b4fkdRL|DK!I6JajKEN12Y&cDM6Bzqxm(`_quA<)zCd& zbu~V_ggek!46L5XX*qQD$NYk%)TSktJH!A5og@My^kY;^e-VA#&`B}{o}X-rVP}A| z0!@#R>#sZ-5#>48FoMo|bYeu2etu#EOEBVTH2d(puDYHSgpY*_i? zG2|V%I{fre3zS?htEDtf(-K!9iI7xaEXx`uKanKge0qZ~iUt+@hDMq1KpPNZILOvL z>~)0$$|UxX7I073IXFA>APXqx&GKnA}yIXgnIpHO%3|6EtLgst@NXUUfqMXvu3-4!}P=(Rr zth>`yExTIvQ1Ro1q3ZLj$(Is>BLe>lfKQ#{>6Hj8f{;5tw_t|?Hdu@8O})s%FRND} zls-yv$Bqzz2arA!Xx}lMnmTpgMC(;7eE^SEE*kh!Zqg1#1D1PJB^QK3h#UeF4*VCZ zCR3?-yapaXc=oshOmv_@w_?$(+j<3wNV?U^0}mJ+sof~0c^Jr`0)W@?dAe~MbkEm#x$$hnT;Z;?7FaIxu7{rkJgsD~ISUrbuQt6k=mfOcXcOefdyF zAB~gCwFvaN1lcu)(B2-{cJ+~8^DUP3L*2)p(aVn=A>iyD?jZ)P&1>UpCZfn^F*NV1 z==*kfB}SD}uOOV5s)*~VzbCU$p4-s?9-eu!?kYLhmHc zwrPg8tK%zX7^Z0AU=YBr+L8UD?t%3IKVz}l_P_y4T&(EMbw=UMF@jwL9aJ1HK1s>H zWnJEF8d#pRSlm~O_bqf=Vi!l@$+rUrEIl~EKqc%YJ*4erp>0nS^zqr%?1WdP9jZI< z-&^veORg(m*upXJBLbozt+=A%=Tewt16{b@=I#5T3)XLr*^@ z7ju=Y!v#&T%ZU=IUa z?C5t&toz0(f_)4@D^-=vq1NBFAX8T=8JhS6f<>*QdIuPCL$!cU-e!1Ef_MoR6sDnMlK;V7YW%CZ z?BkEO)k0t9*LbG{i8J?&q#2SKqQuFYd2UD{$Wl^hsvQ_W`f84e)$s}T^aAi<9g2+PlNg1ws#K?dl5xM~)DpD8_ z;jon_L{&ViatUUH)EZ202pCK7#jAK9l*`WI8I&?Gu-H{E^QlGwrnf8Ds$CYI4xVU`$I7Eu5}9V4Am(RG#EQY07p${ zIio_te70wwL-?WcUA2KOGu$ZSGyhC=#_@Az6gbHz$bHw#f+f+BFuT!AI}O%{3>$ZEN;QdSUI zR&g7U33ybY;|Cbf``0;70nqCR`v9tP2oPW3l)y`?l1hNcKAr1z3gjXX*RHFe6=(Dg z=!Af4)u#%`3^zxuS`DUFR#z3=0^Or4Zki6C0mfIz!a+E4F>fEiLnX3uS8LM{yuIihvj6bm?U`{X;SH%ag?$G%CP1$wvH2{nu{Cx~EafvYmk7W3mAhwUGGRKXp8O%%n+R9>joH1jtdnj zV`aL`fq|kb)tO+ytO~MJ=7)&hLClvZBOv*CTfz(ZC)Gohi*6BQdO&Npv}#v*UROye zPcG2ZgsqdemL!iny4yO_NjnFN^Ij8Yatl;-#*L|Q0Z%r!%d&W1bsMmuSe4t&;y(5~ z7y!c6IFk345ERXL&jRcOF_!H@1_b#xBr*&*@5!_RT#18?uHAvQXhXfKXbNMVZ6W|j z(%dNb(c3dCWX^gtY+;MX;c}abr@87N!1TQ-0W{kzlfcl@>sRF3s9_Ha2K%b{P(Y}g zMXZ;MT!xe8!wH5m-?ng@W1fM=rD!+kIgZ$nGJdiRC2He$J<@kQ8pxy_wE&HVma+gN zu?=()DicWl#zlNptc<_}%C4%9^u}%m(lS63XgfX^9_`9NT^4u(efUAg z?n5kDIg_*}a@5cfg{r=4lP6B0!q0gr!i_0C1V-Tr1#{DZVdCJy4OnD%0PX02 z$28Lsr9FH_p^#loTIwp;+T)7GB5lb<3U>n)o>*juOe2}O;hwkUZ(Fk<(%l7f9Vs^p z>O6Qyj()SnG^JTYJy<4@&b-+Y79{C2q6M%kB}}+nQ6$U&&?tGGI|{w(C45WVk;zgTS-K7i>t<^KI<65Fvtb zB^`@(gG=MAw$bk;x?X-bMc}1JN3vGTYv^(5E}-J~Hg*R&yEM=Zi``K_zr4x<9KcCn z-B#ETleP~G*?Grm_vM5#r9&F(3B^~Vwigs~-PhP_;WNj@H{X0iim_+BwXt^rVFS>( zaG~ewhUq4Mo*Yg6zWQEXMH&#eE`j1yp9aq2FaflEOw9s?&x#OT`_gZqi}0c8-ec#0 zB$-sCh&%A;U`AUOp}(U@a1sZt6OVJ|+}CsQ9U@p0vBL*aS+j)j7LEhYlq_Tcn+u%p zQnBz_<}Eq2D^^X@=2R)aflto`PXGp4qh{*9$vwY(6FRGq1IpWSyUHVkBM2!^;uHdf zUL(x`C_UW@fyolaV$iOu&9X^~S!=-d>kZfq!Rt&_M;?Mr)Q=%_`;DxK>;?{&gg$8m3D`~a+aCf{UX@dWt4gpX4703>=-gfNbCN@d1FE$zf3IU#jqZH#FO>Ue~Djz|geK zs=0eCR&_rBoq|D`NvRhU#}z>VU(C702*%8N&iZId!SW2X%Ku(>K=b%KL#~fD9VX<3sSNjYgHe`h6@!p<}J=Z`&@?C`VOEi4_7WC3WW zm`$3(QxiMXkri~vU=~K{o43<&*kLnYAwaJauG_8O&1vQe*R(d}g6OT+%JqWptTQvbbJ?e+=SV#+k~9i*Jlv z9-dB}@o07gon9E^CY(-t)yxqZoTrgoZh;JZ;Gs9G2eGI(N;ZwI zvfv}zzDY6HZ^;wZHx+PEt1md+zWKrBY<5=seD;g%`GGHJIis{l46X*G#bE$^*Fwk1 zGDKm}wZ`HDyh&YD8(1?WQ{^-O7QKfyLqKzFZaLiG?QAbp$H?~(G~3Dc?25efFtqtX zq;!l9ofRN*Fq&TGdYhV_YYL!K(@1PjdGEQ-THuZUVqI^FRg-6?V;OCy_2#5Wp4Sv` zK3hUFda>-vJee+N{(}dsnU8-d*bH@WD5#{T**K78_0ct}W24!_l_HAfw)i@u)$AQY zMW5e(edzW)NTL(EkCXC>t|_Yt-Te?>rOl&p1-LJ0+kmYhItZ^9T@zo|{*-iwZ?i9x z41@qecTiJ-U_DKRHu%st`ICiyy{$R!gvjYtJ07I5j&9ViBOh^o&p&^y;KXSB`t&V%qW zJbXx+3~tIOq9XB@8-UC*CT`)wE{iG?Se%w8kPSsiVXLOHX*NKHwQUTklwY|m(& zfwh?cJ^*mFXSCG8FIK<FB%ujHr;N5R<5KX|x)>(pa^b$*9 z&|-ae^v#O&>k$y(p-5!r=bSb8Zn0U5H=|tjZKgy>OL^r3j3T{UDulvI!DDmbr6m$? ztWkhc=3ZivWfivLnQSp$54)6bD^ayW(YNr~v`qQGEN*{-P|P8QIYyAE9_K|n9b4|( zWfYSNUXe19EZ(Z|iw9YRiJcYb?MfN#(~~UT9(EB|SBVF_~buw}9QFeP`~zquuels=m7)a+HVCdA(q?W-gee zK-Y?9X>N1X3(G*xf-7eTvQ%w3Z$#UGz;_&>=I507_32`}SvO0Vf)eYg%jq=aQR}x1 z>X^)euXmPN@O57K8&Ra6E1-#Ue+59#e%qqSJsr|?`2bI*Eqb7tcWXE&vb$$_CSDBs z6hfvq&Qi6&H!f&yO24S50~Cv9=7*Z=9cQ$6!vfArumaQ-$2oa>HobgJ?mZRDt_BNh zv1(FMIPvADLj>vsLxQ+5rnsnz4iVmhU=Y;^1{l|U)5W@)SE#pemne3Jjsc}dIWZhm zoG244^OF>@FyRhCgqs2jB`Qf#Gz>Y7Uz|&w9uQJrmw>R-p^CC270A;-9ab%z3pR@+ zRhXDf4cUpXbR&#~3WF~gX8O>8uwo(5aEAOiF&eLFR&36FPG?z$ly1qg8<}hVbC(ay zW0)a0(&Z!7*2`wGwz6y))|=d*rCe}~$8vN=V+yDUcTuw(`<(Fv1e>St?;_Jo#gXrE zSyKFK0Q+SXNxFk-Cf;(xUwq}Zz&Qj$EsS!p$o0Ou^q%f{hhF`oc%}%A^X0z=cysWO zKU@8^a|}={wU#9;F2GGr(Gg$?*UA#&!DfIt=_GF;Bp1uKfxG}43Gg2}m!(6;uZNl| z!NC!-s_x3gBiLjO@U^Z?XX7Ub=pltU=GMjZ?C|pZ_)vdJn*PAzOt@$VywDDBvt*0x zK-k!B$UPahd}9JKI!O{5VFgb>G~Fz_re3}&yXA+nt4M6nhsS!^M9_wk_6AFSmSFBJ zR%ITWnF3%ZC9@S=zB5Ju2n-xRi6AbN_t?w@MfrnEvDcRD4@e!;YZ(!;O^0B9$7#=g zsv(NwLs>^Zp=%e&I|wx^LkMDWZB_x6`7Ipvwou#jHF8OAt0DR!7~8qy1p$5pVY?5Z zh$oAmgvjW=;&&W&;k07N>8>it_)GRi|HukLfA#|a>CwO&RG2GI`YM5mYklRdtSrM$ zf9=ZzmA>PC0QLto;WYJ?cntY()ngt&aQ)0iQV+b6d;rrQ%u}@y59zX6Rb@}B&$C<< z>b~dGMGk1W1&536^yU?hzlN1LQykup)5{M;AMwlJ3@7>X*+EgR>$?Ura$B!*?UAMs z<^=^w`2g7Bd{zk>&$qzg`>FdYW0 zehBcRrBFW2kI8?to2B05yx6Ti7kdOVkW$9F3J}VzPoF|eU~|Hwc9Tpfnc5kA6i{+a zcIa9;x<~;g6MUoMffVn{GxMEN1Q!*GfYZ`|>LmEgp7kh{@#!iQ4$Zvx;5B_NG5qw` z4ni?m(*RM1Ii#XQ^$;Jx{vrD9Z#A=;fxSjhGjprKPtNbnP459pcN{dp_$7jb5GIK> zckqe|Nfb_V!6i_rzL@dp5tcaCw`JG!ny7snU+Bf0+cifB2tl~cTh2he9gQQ69hb)# z$mK(Jfogbc^YDI(Ve><~D*!n)Oke~GlW?*E^j+E{fpk&_xum=HJX1dosN<*r3kdXi z<11zyzO>I3e8?N#up7Xf9Lp?v4SY^uq{n1LaQ>UDH`^MltDD^SSoaCo%=bJs_`Z9d z>I-KDe%s+5Z{D)TW5`QkuOR}mIrNm@C&{_^S|4;!wwrAaCSQI=n}* z!V`rBH^k%)7dgm?6&u|T5Xk8#!Q0{dcAvg13|E>AwxOS(7%#_&Zt)soJIO)YMxWnYr_m zE#yl$Q?P}=&wbN@Av$mAh2?DvJ;v-yD9#C|SIuBg;=-x~d#p57Dvz5%ptB93A=PGOXxX&NApX29;j!sS^-!(Sw|O#b&F9Su zHoGA*1i1{60n`jJnZiud1vdj!2RaWd6z73OTl0W>-L#h#Jhq346%cejuHhr=WRtoR zpeS_hn|{bj^3eWkzUc=~f!7!Rnq~T7(DJTQ0AS`-3X-UfU9-@$r-2|Ua;AVFfX5r? zvZB48nWM97qKy*Rq%F2)n^+Nn{bRWl}kI z)hynh!kzHDdb4akXk~IV0fHfhYY*Sli{b;St&_>Gh7fVFp7f0bVNZmap#so8mhN5;|2_1t*= zhk?znj@#b|RwwuE22~Lva}a(GJ2q?%Ru zeIvDc6n@?)4VrqdGZrR!n^b_zA7B~}O}^F_3&r)8oFoG}1S6k|I-MVp>xnl1Xw3+sMql6;B^~2{07`cx@2iE1sR;&$UgnDjJ}J5|{djFXC#eKXCytoJ$DYZXUV~ zK<1bGDpLh%n7@w)$D68D*QLC`GkAC$pmN}I(iG+hRB|E(0SdEgFhob5qZY~olR;M&U3CkLC-z8R*wi0GaF-Zb<_H{#Wl0!v zMzch~$sk$T`dm=0fm0EI`--xp_usbg68rD;W!u;}Ng(8B0pe-dX45|LDrD$cb2U^LNXDj=*&ghi<}rASHhal){&* z^3Mlc;O79rbX`MXyDWMf`WrkjPppeeP9@RVJK3kFE~O^WI{^yM+R;>y@6LmY!s7*y z1L>|>l^?+-gkArrHyC*?w;3NAUt%=$ZpJZ3Vqde+^(C={G@uRE)fviMCCsHd&&M3N zv#`3bf%;#0au@`FdC%=d$hi|!$#!?z)*Ldtd$K#|xglR~SMSS>XX+%wq#PO;zPnvD z1L_@IlYdB0>G{jFceJ z{BP%N1@XS;L%FJ#`S$+&_T@DL?7VhK9z`sL=Ol`rCQs#j9MSk-Mc!9*9Ej4dQ96K= z-}?P#0HXt?U7*4+J3vLB$0Tibh32$*sBj&hepe{Y+g(9Ma1-1hr>eQ+^dU>He&FLK zVRk{Iz=t5y>wX?A=pg|-L~#E4j_|x~m*tZnLJYA+U<_^g6>5=yQ-5v2N5zhqqw-7g zRRXQgQl!`VwBRnE6wF&)z=9;bkfR3Dd=o7C-C;5#;5y1sTh)+Wp}+(+H$3rjSx&fk zBbowLQ&|cyGMU=>PvxBwiF0`J>0X9=)x58wi*X)yz7^x?kw>0H|KLX{~LZoO9DqK@%#-fImCu6gz8F6hQBK* z$#33H-_4GT`z5?44-71eMZH;e*AN&rB#b0V4-^!+U2s|rC9DI)AU;!1?bYf^v13H9 zezdAS*04lj4ORwd2Yq_%&0P>_FYjTR2HugT0qZTXDt1jbNdIHy9d2E?p#s=fHj9rrPjRovrLHk?bI(sQ=qy{WKCWAq~t_CBC z)+vF>P?;CtdLw!@zgJyTG@CpTbnYVj9e_RGRQ609s7$rKXVEn`+kV*OdPh#Fzj?`^ z+t2*r_#lsAwYeVGCO2$^C$;tJCfC!G>sfKzm3PQ%U&5IPj?A*9_e%1RLJ%Bc_@`w{ za#tv2h>i@Ck`)mj5DBQr6k|ogS5AsV9Rl3a^7vZZw$fifvH{lINOcmOolW;oX2m`j z`fz;B&gRGGXNrRYkJHGzQpnede}Vyq1u-PB#kj5S@*IniO7?^_X`vM7Iy0-vTnFbE ze+ez9y0 z2Cwp2Mkrj7ju`^71w`Q8ms;6qfma-E>)QsEukGPuiRCiW8%+H9h9iLB1i`Wk-Agp-lTpJxmtm=6?*6n`*MIf!F^Yz_@vwJiPxa z+6kz zDG%8qlmqVSoFC8|U+(F_)#S25zWT?iOQ*U1z>=Mkjg3^eL5RapH0YE z4IwhTgNndEr3AG_vsh3|>fT5s+ms63oS=p{OF5`1S@z(O=S{%u=5L4r@;Hzip0^zs zc)U6`7%H3Xs_g2)=E$%?0yByH+VnR>s`NLbdX(<{y7U;-5S0LzT3TKGWk@rT8TUH1 zUZNK!Jk!T|2`r1|nm8NH7j@q^4s>v&0!;7f<#6w8g$|eY>(Xk_s1In__^? zcC&Q1o5Od2YIG64?0{e2zYl4SQqe*iv)V3hwS*09+*Zi3bT<@pM;$O>Uab39gt1zB z8=>U9AW#8~$vYSR7JgUD^m6yv^ zRdxr>s_A^x!G>rY5kn4XFFX}zZwa49T0J;jTs(rDdj}l6D16lPhF~ZjMmu* z2qgp-&gx~?dw(#7iC@~o#9B=48drr4jJE8Bg=x2_<2Y2A1q;MQc3@W&zF@hD`+Zcln?yUyl zgF8BcZ#EcLUA^}E&vMw=220vlD&?Gm_L*UQ)LkK7QR$`V(EVXhFT+mlT|L};dTDy0 zRhrbwz+?NPh+}+r7G?}PX3%!&6S%jJ zIIEd^nhfe|yFqCde$|NAPu$@&^oSLT5W@FnJn^)k#wf>%HFS(hZzI83cGw;FmK}|_ zyX!RqCgG!V$0kjVNd;0uHs0e}d#Jc9VWpP(cQAL?{i5uap-jT? zTtHi99+z;?cW%PjG(Y~JT5z}{yV(z|O$*C6PEUnII_E>(wpMOg!h+3Kg^UH)mkOKVfy*TTLDw*)!q;k@j zIIc$qED$qBR%6smy-D$Vrgf3(ZRZH?^P){h}5L_f~!#f3&6=nnye8LW&ON?3> zG0N^s`1mz#PDZTrg5)nJ$NLc3p5<|4$N#V!ns<+Ftv!_=^%`ychg@_re}vHwmy`PD_DsAHuemsOdquTEUm@00>_&dsH9R__XT#64eIz!ASAC?B0{N(d?j3Q6u1( z;v%(I<(&t&(&4OJSN0w-4$M2DAWCTC8LCee)bx1MgGEb`1F!YL->L|+A5^s>(wh`s z`3PT2Q72Lt!|VNpHGT~PJ-ng5r?z)RfgG*x7#?_S4|^|sBr~>`K?Wh+XaEmuwpoJT zoQ-Eh0s&1)#UHh~$qvcu*B*03rj1^BhMg2(aBvT(&+=yeo(OPU+$1<4xvVM2S{o|K^7{okr?Q>{=_nPFVB?4hnc6!)mUg>z

Le3F9>u6Pw~bR; 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 z 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

A`>+jUsJwR(|?_4%;IQ?50uvtE}EllZJ_ z5MNAJhxvNvk$TQjn%y&CFMyDJ3!SkHMPyty8#2ft>!Hmkbt`zfGg#gBIy4t)~I*U=u1j}C}GjaHUip1DIem(R$&bBc*qM&|QB{fnc9@r^!OqbGA}Mo~&9}^0&)g_Nx`7iI z*Z9=00qY8p>T%q=d0@7F=GqY39{^vhPhh@|JSLiBC@Uu$SSmyH%k0+_TrYHzZ_s#$ zq8SKx*IS*z-QG_;Bd55pR8{&O5}V5sV)7dSLq&RqXTlUWfbqEVOKecC&JXDefS-NC zY-*|0MZVJIJgw&8MHK21C!)p{Cu6Oq(3Co#6UJ(hZqj;rK)@@ zKT|D}2O)-dFx99${tt6w8jl`FKT<_dME*s(GO5fkeLBW;T! zSNQ8SE)BS+pPZ+w*5h9W+HeQAW0)(p1A$yUT`Zb@16(X#vvgi$ zYfI5#RQits)$V)pvDdj7u&dNg?k5^Eq?-(8j;D|dd zbG@!oa?z{u-+~;w2=;&=k7ZnBQZP^Gafc8Y_x~2{#|1G&CI-OJ>zzuxP_Y2a;1??X zKE&c6?T=I9Wr&AC?(!@pakRfkDID!RL31r}UuqgZ81z^{vmP<8=5Yq+aAj+j<~!mZ z&Gd2-+W{&sY=6*sxvIg@WWY2RS+b=iA%iNx5mcJ^>wzMoRp4maU7G1Dc_2FFUm}~X z@X}sJSw^$~&`jwmLZT_wzJ)ZxH5)g08lMU=E(i0i5SkANhU72V|an2$LUrXjK zfUhf}mTbP{M#$GiQ{5;iHeHaQQ?@BEghr_M$QDj+XMFB96^5b%)j{59bS=W$VIrxM z9Asa!nFz6s3gT~z($sXE0sT^OnqF6gyzU&`Z<7NvwAkhF*mC)`aaOKEo=fSlvO8Rt z;Mq1@eu3+b?qgp|6;8J8R^sGJio1%a(J)L`_7V-$uXe`@4J{8e9qzqveTKG`$*M@h z%AqxK+%rtplRH&2XTX2uwvys+>o9F4LhdjM2$blG(fv@O^Dh@K*|a2 z?a54KZS^Db#zIap&_zUnj8rp-O{E=*hj}eoUyJ! zID0LiIa!(;Rxt22D^|=18ybnz%>^7I+d`gQPPIrNAwcL9quLz zcQ3!qI%IoZZm8l*UtxmXH$}MgO}V+}6zoo%b+Gi!h#6VwW6n;#oCbTlM<>MI;X6St z2SsgxON;zvN#A2ayeKFEZVT(w=$JbNQNjncHLNq}f4F0>IdPj5#253hfcXaG&fiq& za!sEb;?m|%YjmHK`O|UdZo&-45gmi@^~sdq@^zK1qW)@6dAg2>=3(Ap*96xd%ELXv zuKS(Ij&VFXKeS+#!OztR?6hi%Z_~Xjs2eDHUHh6MqaDFcil**0+XQ2~Lg$Hg2Efza z9qEkK?`HMxL;!q1Z*(~JO|=m5=tyUDx~%Lst20-Jq{sDz!4c^Sh@-tHs`6>O-Ym1V zf9MiH8@E_U+sC8phspGgJ{-hepCl$oa}_3zl-Gn*xk#SMibrh)6w4;)U50(lkg+=1 zluMV0L$;~w(U^x!MOMg$IAV#e0glc%&+VE9;yV+A(RRKjj?;eFO z*fqz4wd~p(?7A}^M;7eV8Nmv*&d5uPUeaps8M)1DSd5szi*2LC-jPeAAb>dAN-FFf zy(sp`ZD`7ZwBj6ZG1hkN*<|hKgP4cJ8H#c0V{wJ`81-YL2pa|t-^0GkM7Uz<8p)xa zZqguk7lw92uuxYQn%9w>svWr^W1yQ$!vuA4k(f9dYGi|E#b_hcTRkN+s}^flbvL&l&@as0)hQzb8G6Ow^`x8aARyF9|u{r}kJ@g)8BiVI+ z*184?zpzw;?1uE52L(r|DgNlag%I#eG01K&xBciyD3G^jYQctgNJ+X4jrK47Yo%z# z;3)bCER|x`ft%8J`%zr26qv17`MHMe9_sm0XXx!bO+IJUGNYkl+vV&vzz>?>{>V@V z3=?sIez@r*Kla9VJsOJjaM%49>HVy6LmZz?ZaWt8WkayZi>ywr5i+-?1W%;5z$VqS zKj<}iEh6WV#0Hy03LERLQquV@t_enQChgn03LXm z!Co_Wl~4bj&HMu>dm^RQh@)9Eca5(9Z?78{AgQsjX6~xl?3lTWsqpV)>M>st912BRgu{1J0bEx&~RVlDaQ}v&izNK5bWbVk8{T=pQ7Bo@(*QcRlFzZ za?bWtwTgCl?Xn)F)>+Q!Rw!4pc9b#eb;g5VlFr=?+alGH*1HuoLj|%YE3yj|knAch zeZ7`^%9X#~NI|uG0(+YTK1r~=Q`k#}mnL&s9l9g#qtsjHOLS3Q5jP|5g13Z}XJy_x ze5Sq+-qIs{7uyUjk!O)!P$GNR{+3l`k}va3o)$D8-IucZ%sV+OpBAC@H$tl4Q2JC8 zLKACI_J8Y*M}$s)+V2c#y0}lH@sGSM@hP@kq9C2=6ve+LMV-NpT>rO=0DlcAjUA=n zQIeufWq0>5jC9$+*n3o@(AZnMs!HGK`|*tS(xT)g|B7vZ33;5pPdWaOpjAc-;KZm|?L%Iy1ZOqU$P2_H|X{ zvwRaC!)<6QoRBq&8_-qm2mNk;x?3E#RTM;baf)K^NM%)p*hJ)MjTuDL=^SegQ8*#J zpmXwBI<%x5jZ|fiT*1#J_g7!Ui{Ep)EyCUZZYh@C@9(zrFxbuCk1?@3`f(-}>lnFWE0O34 zclwf6N;;bboW_Kp5-dKdSXfU@t;2{x7BV7;8a&Ruw4}+}>2@PeZ7-o9E19=Y4#&Zl zr}W!@{rW@1x*0RnpMS8go$-h34u#rr{b%^oGi-y?nR)i6+(+80+GB@SHm)lcOV3Lo?w^c^s2kiq`yj5MoMT-#SbF}6 z^$W$h1Knun?#Rl>QV=Eia<$z=Cotf7jQW&@M-Bs#&ZvKPPn48>iG$UoGCdV2|M;lTsOnJ^cxkH1X%v_e4by%QH?0&&Eg$^edDDwW6rlsx52 zZeNZIu@H%Qt~nK-P>VV}&vpNfn|XJSxqyVQt7M1}K7l#2B45P@=5z_JPhd`W(7)eD zV2;Gk8knQ-b2_aqa+WP~Q?AOQe0fibe7&JLb2e$v1iG&&O$DI=p)=-WaL3kRpCz`O zj_yZ;(T87>L4Pu(Np7Z{=t*P~1b2S53gURNWvX4BB{q33(w87J30Dn8!q;1djlI$` z?Xb@In%oXLAL4B$09)*77G~?3S=`&3CLc|n^XHOz2(YP@&O^K@go8HC26{`#3>Xz! z<^^-8s6Dn>O3>T>?TEd?v*GOA#ClcWQlN9nD#hLkg3^>n)sh^AVK1@*y(h5IXV{tz z?X~e8Iho>LUO|?YLZCX!@G_u#=+)qI-dZbdCB2P??o`$rW9-wzSb6WmcCrYgo|Q$B z%|cQ@2m;*ktJ|Pkx>)#rbw`6iuN#}|0by(DV3X}mwQN5=bUyX^)YFCggNJ$Sa_k95 z#@%)WlgYz1cgc?T-GvweorN&Oj~9W^rVdFK>DoJsGskWdbPNeD-VIVdj$vo=V|+KL z4DoKz8Csnsw9P-M<_quGqq|3SCms`A*u0}}#N(S`R3H+>5jO6C96h6w!gIFu+5jMH zrna6O_On}hHjt$&(#Sg#+jB)^PM*pw&GHwf~W4ok0TTz9N$ zkH~rb)7{Ui=0kp{^L+1%nKTm_qTFULk@)*b1V%AND zEtX{1WrvwaIktGd;T=sd8h@Ah#pG|dyePh+5jpn=4asfOo^+4$Q#?0!O}mFON31Y7 zb4Nr=Q9cn3v94knJefW){JOxTZ619XjIN2!)>N6?WeNdYu?QBBtB-dNO$(PS@?}z# zA*um$tf3j%hWT<(Vu}EFsG*tIl41WY8H{32eT|*fe@9{Gp)e)$D)o+ys5Ouqf@9Nu zlACcSD%3${U{hr{1D_GTidPJ1dW{*@ zm(%ES5@=A9;7E&2O{wYqVK89Ui_L;(YIieCo*Y3o{pO^Ip&1d7;|x<<;Fu_Iq6+gkm0^114;ya>|~cwa%u|a zE#_N7%a!l)>S+@JyARt$a8;vd?vdXIm7{3U(1H~0mGk>ZjZS8R)})Zx*uAWU_BNxN zYq-^)P~gkBOYp6Bf67a&;4ayD;p8baTV~|&Iq;s!jo)6YYz=M z5!7#4@))Lt-dHIjqKV!|zQ9|BK;4&ZLiqVqri&HN9TBGQ3NJ^3O;a?CP>r{CbLsk z_&K0dC8c9V){htsEP5S`uOHpsMpm%2iGT&N+eC0wwqL#1jxN+UoQAZ7l(k>IbFI5C zaFK+LG)!3N+SHw#hPK2xyO>gH3m)P$VV5YOWs+)9yc6$Gzoe8JA;{^NtXHpD z<$te|Q{fC4oe3o~;Z)q2cqpX~H4=~$mq`4vH;%h!+2wGj<^kofrxxYC#tk@axNkt3 zQAU87Q`%5kB;zQTjvG{@;Mu5-0{J3|ND;oyq7TB~g(*WpPtY8H(xPKe(1MY0Nnv_P z^b0i16fX*4GWEKlFVe5%8dea+h+IeCvWo0t{w_hyeR;^KjAbJB+xoEcGr1ZKh~h#> z6Cuf-5$7#rmBD^P&%Fz~I+&w=>Qw%XUQAb-EafgeoMWFE99gRQ^b(DAPsw!#N zeqa`8CiQ)Tim9Gl%KPz%M)&WK4O(M|shI{l$7L;BOUgrd_S-v#FV1Oe0^GaaL^_;z zOM(k<#ja~0SGUin>|I``6WA^n3)$PsN*vd#=O>+ifG)=o-0XJc2@1sl&Q$WQq)t_boqL&O$CeU@MM?{+VN%vrfAAPZIw ziz)lx$65En@ySXBo%&hhGy!;O*gbaC?IOBU zY63pp(mZ$UrDGt@Sl1w&9h(FT!eqXeWc_g`O!^-hwimQx3~M^~Sw&qUA8R7m=E349 znL{L5(cCkV{)a}b(uh5XOzu15Nt?5j{4?(9-6jH_ zRS6ft6)wJ03g;dT?eF_l$YdZ^%X$)G-usBJi;O=={=S&gxUL zCr0;z%m{0|%E&)H>1msj({ULWopddbJz|rtANu4_z1ux9spjbsm(=j|v@?r}x(N?X zdQF$}A}U#%sBHUzlKIG~xD3v9aa$fU^s#eyGuSzS8z6?u@(hdNh^-JF1Kf$8YChZL zc1?}-&0A1NCyGb>aZT-k5o_O-u&%7%^SRGERY4x^9wyX=-n=WtcBoS%EH=YOB;TU& z-qt#~Xgg%9)2g;dS?UxX?#l2kE1j(TEmE@2e+{bU)gTWUE?Uv6)yIY%aytARdH*sP zqJ_N-hW34Vo^DcJ=sRFHz9C4gv^KH{-*l!OUQIi4>uneyJFdha{8lLfvz3l zsLxMVx|=?lbC- z_y4~8s1sg3qfUAGG(FO$$prGSXL6bLVaqf)T6@9QhDp>9dcv$X)OlQunfBMB$bLSd z1e7pkSf8TX_+(1`y0sAHDAfvN3@ceE<3P81Z{-qjbcb|I*wZ~q)r2^D`_?-vG(VHe zB+LKvL~bx&vi#*W%)oui@VgZK6URm)T*+OOW!||aH-b;S{)dn87HyL&8q^ALb@U0Z zc0SKu(uIH4c8bXgjo)xQtQ&ZN@tfX<&M+=nyUqw}xymSH8n840k&}Q$?0ZcC9rny@EnT~ha&T^`LJR8pR*7S0v}TS?=Hvpg_J8r9=cZ~C zz2O9~<61L`CO72vF^PNrKzU;aH^$rEMe*tB2(~*t9c8hf^mHaWq$7gT(@})&l12Q8 zvznK!4!PnzaC~-l@*>gL?e5`@hY0cGlb42$z1RU6V%K^B!^y39QlhbRET+h}M=9!nWAb1mpcff=_SQoq*mw|9M86rV zfWCrQ*%xQNoRd?HzP=_~a-sW6z_RR9RQme)KoOAz*}uCXCkcD?d?5G0zeKJ?l^3!G z4PK7piasAHAwMC<6+u=aX|Mx}zR;+VGm!_D&Ja7YOok5AWXhh+K>umqL$WcNnt$ zz#=rL`)g-1c^K}NJ3;1YKdV%p-l;%;hzphY!6Q`ShuuRZe((sD_`#I~sIfh*%CbmG zve%|XA)Ki~G62jbxLn1Y#$Ams5G3FF}UNFd-9(R&)?{?gq z#71f$?0p_JRQ3T~_3M^~WBpdwoAh2Js<=N%RN#b;hQvQT(8#L4)g>XL){a#OpKddR zaJc7w5h0`rbD$2&9rlF>Z+00X=7syI4%uW**U|aG6keFKtr?CUy07zc;J#wXC)oN^mwi`jXAN} z2e#jmva4<5-k|eyoi>I#!;&GLjvu0n0(%H#*XgVRIefY0WJRPmX;k3jdpZQi!#d zZc6%$z$|#*{t)cy&!=>U5xM0wY%c#|DtD$MYMW;kHNtck=YLcHcxqS$@QTN*vQ?4K z>I|YRhBe43wcZ43D&2;NJy>(xyC3wsb-qp(NgC~uipyY+NYmPyiHJzjBH3D z1C%5c8^tK=lg7s0c)`Xy-smkY@_FFBvJLThY_Qz{Mvt9A|7M4KB*fJnQ6zD-pFY+S zO#vqmr_+(hOlm5~DI}`vP_=B(6nbN4=EFGlB(g|>oJMvj>|QfzwP6wFBG<|;{deEe z3h2Z8&UngV)WFWKg(1dK8_OLhUh$mgL_q{BctA%*U^nNKKG}r@cr=}pD6rmR* z%8x&>lKu0;9dlg}kBU)GM;LGD3CYIWzhFmT@ATy28FRjYS@|P%aio?1q`%Z@ z9elfp;)tXQK+iCWbtZ*~?vSVhy`WI{d}OCM+Vi?7WB59!;Ui?SgjH(%IIkWl7G9n4 z;|(3G$9`1yUX=-6gt2Af9TCriq5?v|j2I;(5)6n@iVO%dIl9B*8;ICE5k%%gsd&s6S>`goDI8%3y9*{tLk!{kD^Hp`a8B%P|JlTy< zJEz8GTs_labFQA-P9q|a=5LoeVg%o(ju>ULuR3B7OXP@(s3T^$u~y|1xvVb3GIVO* zq~nGLGNTNK((&k;TzK!|vvi^oAhXLRfqf$r88=q}sly2xPjGn;Ck&@#MMBH_$SmOs z3uH@@S-6T6f+fU+Ph3!yLbHOGa9Tsl6oNIpYA3dcuCa@O7Amxg;Ye86%)SuSx1FD{xmKS=0AvG>tJFs^*_oX$^G%)>`EN}L@8IIy^epW+WVngUTD_Yc zsr|eDwBH%@|JGE{-l=>yE(FqVb|L%{$1bSP$#ec(vb+>)nm#(62c^#xYlYCcC1eJS z%9s*yhtU7S4#R(JPs0}Iraxg@fA8)iwG-X2o*{=~J)@vM z&1~b35|az=u`#)jzJYj(>c;y$`8N4ifw##PE4s!n{`0@czj(J?@b?n#OS1k?xsXPe zYy=xJ6Q0XIT-1|8luf6>%4GrH*iV0_)A8?Y zLG2(;lfgulO9v!+?%`x>k}|QFC|SDed^uM_z1N5BC0vsG?fSJ_F4voMd0HWq?l>Dk zKINO&si1f&p@G0^i>GW(b3mqqFgXiOC|+IVxPH3SA>zdX zcF%A9chCFR_cg5)!!@_b_KD@4Yja+cDX2iSUoH>WjS9*EU{JQe67;z_vf)Ajl~d&!qv7U0KI3&V0NA4v?wr&W>!{{1K-kv(sbZ^X&g{QW4b z>6yjz6Srqr`|rbvK>6^lt`~13QY(lIaCmW;JBLLY>HE=!N8inlxxXXF+v!BOFZ1Q5 zTjZ-1tpRgd{h-~<`peaJBh~v`(_m3~#9Gi}bQznaGy&toTDfi#{jdIVl#vr^=rmie zv!Y;5hBqbkXc<*G*;`q18R)JoBWOU!7|kY)<>^LHoz0CvXQOul5}j&CXp@ef({14~ zt#X>sp6yrU&UZE=hYNPHExoP?$3xwdCFS(U8mlgXeD9Zf1^#%nMGcSI+3Yzk@s79kAk&);q41EA zwjc24qjg&C3@1q;^hpIw`+Pw00D;b@xB53HJ~&k0Mb;U{73CN+T$O{{85C2#_RAq9 zp*7e{``~eHhFprv>y)5f08ZI)oWR0>Qj&Lc^i40+D$j3<9ft7|f+KJzgq(~-XS3uilAY@KX7jno*6Ukp=;L`#&!)fZ!X2;6B=%CRY{kspLLArIsg>tc{=w>y z(W*&gcNB$dHtBMnR`WAE`MhL2?LD`Sq2MstoK|@`xAy^uj3?{BY?aakf3jvM>UW(_ z2l~i(ybf$Pk#R&;KwjJm?Cv-8>6FtJXx z7HJhC7N%Oi0G~}yStL7~&N{JH-N->V_LIHmqf)?LL=E_1r836q*lv_o0ge>{qz(bs zr}*DH^La(}_H$Y8R@siX;6k_|;Lh>BQkqL16_-;q1kMGWA zl9>XX*ooleE>Cr871{yJ6PA~#mM1$)XOYj=3ha?Wn{0B4LOtguR$Fnvl=I6+^WFDE(_SOy~SMWkkw(TL|X^lZQ$@6D$tK)b&S&7fggjmsiU5eTs`9M5lpf<()GE82y&rEIcwf$5t8ys{U!IS5FD}@r zX1bd3@>5xTW~THri=p+D@}zH+#6Mh^ zP>0m4Yc}^~S(wtm4$lwI@*$g5s*zv{=D}=42FVu1fN?^yg`t+BZ>?NyiN}6VX`hcFza608X zt+~t)?9{58zM*9WpI%Mj$rB5xC$sqO4;LrPZy^QjpHDa(EYzuHxh%~gXAbaI`~8k@ zwdXUWra&itt3BvYdK-j)+GgAALs34ZRskNS<60(8+?HYfHemqzOXLW*F_lomQ<;VtUWWwr&;fv|ZNwN;CO(*6Z!! z+~yc8+Nrv0KrglFnihTg?Yy3rEs~v0XPx?fQClTsnW&IxhGqrwXepXCwMVU0dXvB9 z>+;aFa9AsE`166jg=X@qcj{<>GxYGaiFQ8Sb!yeh5a?X4eXv9)yc@#;o!EgF7V2bI zP&3mB&ktCx&gU5zk?K@if+EhTvx#hGUb#hCAKX#{3g|Ihiujy+m%S-_eh&|VsUC2p7Wwz^{mg170w|`Kns(!>)DJ* zJWAGLPk|U%E6_oAYE-179iFHJdwQ+_*8Du1mGdlg=`%rZ7-~0NrB8X0H;apX(|$d0 zmvKqhV@A_uz?wUO6#HA`&Dh;Nl0lp2G{M$9NqMR*aw>!zodUblAZs)H?(v9|9uP;L z?o^)Rz1RT)nR(5qNc+!rM)jdhl`hxxqLDm{WIeIY^wXMBo%N@_X)^uj)B$@|;ZAiE zHl%9x1EAAR=eEamKmwPg3r+1khRS&N_;d1S%IK zcx0}2{bfMVr(?_27BRI*hya~V*3NwH5cFX+KL@vr`^EMuw(@BkdOZ@MM*@lrpX zUMg0Ygo}1UnFi@QcgWM%83J=O89$V(akfbFCC!#V_oD;#o>h(dbF3Qm=d)6y{(PqD z$)Eq1sCR$9p4F|mFAorHV~=ya)iY#e|m{J+Rq zPC@g6WYz%o82jcY>Z<4vzirgb9|Z|}2K*T~jc^_G%JnyF!>JE&z1MI`a?sk>bfOO_Yv|6_zQ z@CfA9=9TLl*)n|!TDR(Sr-ZtMPLGi}CzaSH+6f9{$s^i`cB(nhAATTvU6Fpx<_YDs zpVc_#6w$=wgzL#?g_n%`exzdgEnd@#^tQNs&>0!}1~_39gkCw>R?p@;KM4ALwZ9WtlKOFMbsGUGsVwHOK0rB9+&){W~?PMvu zG@&%7;1ithjhBxkn&#eeR7W7ahxTfM+p`Ee`%|=8RJNPE2vF8p5|syvGtAaxAAK>5 z410UA3zBB^^xs4;zY~6ViXO1P9A}RGymNOm9`$d`9lidbzle}+xhnH{Le8c67jiZw zPwX1*KN=lQ;G@8oGBgX8d-lhP70K`vs-**=4Y(jKX!wZz9hDXEq|nDGXJJD5o*zd9C=%BP@A~ zQYvlD@S|hzu5&%;CD*-ahaQf-J6e`o6nE3pnAHKr;!a6PAtc+k{-Mrqc*bg%F6#HY$f=bgZFWoHLK~p;wL2|8 z1la46Xz0my9ji=-v%?Bg1l050JPnR>W|2mTOX+%%JZ*ErC*&Fh-To%SYe7eLWITgPin@4b6uN5@ z?GP7d<^Yk*Y2sgIZ>7O(`EwrfgmhCaxUF_5P}>ou`NWwPdBo==)(evv`Zf%(=`+5!B8 zJV6KmDi^TY4jYN{OzwB&vOU{A<+Iqi(4-5|E-oj%+T5~+b!odG`Ly?s!zBBn9jv=b zzLp`2PEH>|%W~eAw19bgaXh9wpE{Ci$}A?^kzN=j$AuYbcXWv$eyQkE66d6VV`A;w z>_R9dx_gTN8R;v)PvFIINe= zmQXLQBf4qTYm??NSvAXk$5mQZs>9rY_ZK}sZD^YRCNt(4B$38tIbnX_M$5qnJEpujyMJ;!7g(axiKmg_w2#9O6ZW@Y`fx z+q@#lJb%mAL9Q@rHCslnNknnOsU1{jbVNCQ_;9aUdC3p_MK#%!pR9}LtHYU!*oH!HPwmq@UiLHq-v2A?)d*55@{nd4E*DBvzxAxil9N$cn zmHAT4WTjQfO>9{Lh#jL066}>1b%LH*Z6gFk-@Tk!ej=wkzr*F3KYd$qpz#aDKWw#nxPYKmt zs#VAkzbUB%awZ?`lv8;DS@W8ev)c$AT_`&y!8)Zvmw4>U4LHLM3W_)r*wQtz_Vo@q zTl4r1EBhH6y>a;mk&jQ0jx3=2oj(O&`=IxDgL5yViZJPPw6rES?lotmbJ$%<9@31} zsHchb%PgAGS~gvFrFIUV?Xqb*U+Qel>Bh%>3TzF*IEl3D2anZuLQh@il<1vzjMuP| z;1oTHGm`4JJ-A=L(b(9(rF1=RA#0VvWJUUqAK|iy z>?TIVf~!XQx8v!5drFpkPx7ulne^)XfBMY94*r>dTm;JNL2m_%K>b$H3FGU4 z+s5pk!48keD8#4`b*lq^uLoXqc`bDh?XTkYEfVWUbcc;c3<-pa+DgH3@3jx7ImOjp zcJO(UmsFXyto1LHi9$j_2&K-3i6F}_+8f(E(^jby7{|eC1i0ck)$TMiPO6C)>`Bj4 z3`aTf$-H6b1iWsObRn!!uYZq&Gk@MtPW~&Lfk9 z8@Wfc`(J1q4p}xuVbDz!1;3?yMYAl9V3Z!^aBB?E18hDX!rCh5V59*Psr-cW^ zM!LChVKjDV&F0<`%By$2qga_{o8+&Dabc(2{%m=K_(*eDvbo;7rVD%bbT`m}Fjo?rT)LMfuD*^2=}|%}vc_-C~KV6uS&W8~KZ-$MAOP z4}}dn=G1TX)QWibtcXhJuSxnxvgWgz!`^3 z?2;^+-@eH@$QErM7-H=NbA5jn#s+p)iF=cpJZzzH@GDdPTTieeQ^|=Bo)Yc*3J2=|5G_H9@RHz1o^TScKL>8 zy?Gdrb5R_soDe%&jd?IH*ahx{o47hL_(;X`I}lK zcO_ASctLe5C86M60*67-P^HnwxYgN{@a2}Z*<~5EQQks&crb{?DYdOH{Vg)WxgEzs z9qS&|I}O5OWq=tC*d8$`;%wKp37VWi#i$Szq^IYhSs>*Ez@o%PbB^!LVTXJIjU~kkW0Y?D==(WK%@DUE=18XnH8rCiWTFXV?D|W`!l5N9f3`$n)wJRW8@_)N0`Y=}hPRr?%(sVB;R)Ll}kEn_*!x{{lHRqb_UK&E1 z%2RZ)Qm8w9kW?A@gL@ZFJ5B2uY-y{`X_2{_euqRctE>nS%HYKf!2rn_ZH@r*cOo+) zzF(Mev$%k2kgL+!Yi?eR z21e>VzSA;$o$L{m7Fqn|c0{ZhrOBQ(*har30ZF4Ok3A6B$%Uy=j|)R#Ht^dtb#hAX zQGQKcPw4slcnwm=kLq!(wTVi7Od`m48xPN(FYAEi8zc*;I21qB2GWOSs~3C&gRL4G z6m2n0b3d#6q?=GPV9oD|;=h#0&IAoW0>qhfR?}xQA&4Am&z)Eht0TP|QZtwT)5cxu zk@@nxw$t5ccS}dyb*)RltN2wMJEaEYtB?WTXYYnUD8PQdhWb68GI3+8hc&kW`fKwqRs#oe?N3ews# z{Zu|j<|aZmgYXKQ{{8beCj-zvuUlsWoe~%0mkKB)@*cpU)$0vdw|O5YWHz2!HD~m| z_RVsvOFO>iA;GCe79o2_ewJ?SYqZ{OU&R!9MP#rVu~kCEh2Z{1#TYiI^17K;(@eR$ zlUlrcGw!#47T&d2pO3s7T^TCEEU?r=;kI9Q3YwBwDeK6dxSg2#JqAyY*4K0hvw{+2 zBZ5@D>vla%^n%1t`p*B=bK8 z<_fg~GNQ}kk1dczTZ; zM(hiu%)M?I5!^SFVSc;k>vXEVe$x)-U38A;Y>uu+c3&k*wgS@L?(6Euc*R#2o{~S{ zvxMhVWq#!3ih=~ zy%4&9j%4tlYZ-q=RYq<}8fzkPQs9q3a_gKljL-MYA@O`WZY8RHm2Vy%)32zZj%NSqGMW?kbETUKE5S0tP6D?C@ z%b7rBT9YqmT#JW{YT_%gTz1z&h>TO)X)9+zOIEPftCZ8evKesI_&4>)Xv$rKleRO` z&oI^OWO%9W87ML7=AvS_!g)aznOvHDqC#f{pC8HRPv&zP1cNMN5YiPHI&?^n z^c#0>%@Ng^p5`_f{H3(pl>bNrUXofP*$vTmj%aUf?I#wmm8_g8k;eeC57?&SQ1 z0$`&BYhf4NJP=!@jck}H`fT)nq&s!w0=q6D0TZC;R{2KN=vJ!vW9JC}zAE|F-&9OF z;+8eP+GoFgIe7LIr;lTEKhd{%h!&H}6}7lB-9^7tV<^3coVJ zcXrisP8c*ir(}EgoAKsB>XD_u^(1dP2%1O73B?{_5|gYTR#(YSBekvSxgV4fe7IYeg0}rT<0}@vwJmKrD1?Zf1-8NzLNpY=vt7;(LZnU1%ig%Qg7*RN%bb)XjC)azAznCuw(p8&D+M+Zv;7`J2v!Zr=;Lc9WIw$OJCQ=SQ z=E@Awc2P@)e%c7$F8dL{@T+K3@-$V}3@F>c4Q#jgiK{~Rban$!!VXtQu~RE7#GV}p z&NIy1ilvr0O&&E>rh7g=qpnB_Djv-ba^{KNsjAm@=_Qz47_1TU5k8Kp`VB6{{3mM> zPgSuxktguvR!*iBGuJVGu038ld-gAH5%0=t2kp|egkjnbotj!6QG)TFrf9|H-p@5| zgYe%!7)9o$EH$2xJUbB!U@sOkMRfnhL^NC;2{1UbQ0A!ouxnnWI9>dqF{GQWBUlGn z$dfNdoppdaiD(FntnG9k!41gFt!CNVwpHQ_)d(g=W z+}uiyu9Kfs^SC%@I`JdgV*5?dxllv=^$;}q07{+rmHF|U1`=NUF|tqv z=eLJ`ofeDR!;rJ(auauDns1zES-M50+a|Cenbs&Py%nV5$}OGbZK8+1NiR8l0mmk& zk-(MyDh>9I26ZO5ulv5MKGnj$n?n$QZ*3CZ+!EnVAyK`h#9J9zt=pdnIt(nx7GUkr z*cT_fMQQ4^5+MWSQ$+EnR!Unj7=7SR-;SF+6hUbmM|JBBzW$UNluUAah1oDpnzj;w zm+81H9q1S?qF5HhV|dg{nzgc%$oj)b>L_7=5T;hTN$rrH=t3wNkV zj&CxD1HVo`N1gg4_r!k|N+jq|At(854I5~iG9RDurypi&9z+qHvko4uFPKhQp*4m# zrw*NzCC;{W;KsgiErd(S!>agM8nAnKaOlhhn>%c91oPx>k`dZCH|+8$3efn9o z>5X3;XJvXE-*Z-o7*7!OZiFGnXfy+fM{SwXn!M(*s==Pi-&6Y2w}j_QNI>Xs)5>eX zB@`XQ#wNhwo>RD#>&VI-K5e7|GR@Rw`TdR2#@_cB zOXXFIDL*$_jv50o5=WYr;{8xBaufP>!82zPMXT;NYLBwv@}P4#0CFp}f&!|apkYrO zljZ)7)uBhj+Q(FXHIgn8?FX2n8EZ4x1nkpo^80+7?E0bchbIyMn`!wf@SVELE`jML zHNoxJ+2G8m=0u70kt12hrhj{n&^rDs3^F|ea6V3lVdB?@tEETSLm`%u0MJCvS3w*1 zfXhOF3QJE#^ZZmQP6t40bzMEYIA{EbUy*jfR^S4eeELGYSa?ujDnj(+UA88* zgN$v7!Pg%AyERufc>u$gG9;cFFxA`S^f%#IbKvYBASUT}k5Kgz2mTCCUC@|PN~@mV z$^W*>%f2AQr?H;3%4*Z%8_KbF6=F{E<}U3%q`{zBWRzNL>sVT8|Aj_+^T%acBHy!f zZA+2GUHc_C!@+P>k!Zr)oWZCr=UUP=;=Ha*Y}8EpB#dY`8=haK4Lr_0Rjb3K_fvw4 zKxyB{UGDWWqBIidl)$*-33YFC+*WY`m3MZA^ER6gz%)3sFYae$4pPaBoK;y4Zk#59w! zS$iN`W7yFQ%?S$(Qz^GH{2ZTc9+Ew0nC7ryaG1=5voy)-Qs7Zw}{#{ERw?aE1p z=ycak4@BE{Y}+_zkU~XH-+X1%Uoq+wcssY~7-Q($oz( zRT)$Y?7cSv)4z`(WG8ZLF|C(RDT-D=dx_Dk&hu>)?TyH3&N7+GlZ82}Bpc<&aPKHdo8Y=kG2R5R#oXpAE>ucOAD*56j-_uTl)0%gd{qL)T4{=jLsir} z9LMNXQyTPcM66osP&s2)F>)q7;j4NTlvX(i?UgRc%U*USDWKshmU{K~6UxFC&+jtk zT2NM=uudo3G4`e(#ed&q8JzmpvOe_NwaLhEkr-|Hx0|x>s`=t;odUBu=734G&yp{H z3JclQvp{jUBBypSFDlTIcV;$(#bUUF4)4>`RN78MF|lC1EFr4lu&MynXs+~~Q9^|K zC$Pc`2BW?OQ=Yr@{V$lX=Vq)P=B!m1%_3;4dLqU1A2os(jzS3YMC&^q2r~+0FKsP^ zX$kkzA-ZfEb-0H}J3;i)VMpKDNge9j{!@h*`B4#7*xSze7I=eue`X>!qXXXI@P&+Mj!BHPRNy96dIt25-+ zVDz>f_9^R-od80g5TJ5<6&(YI@@N7nhQa{%9x59>!g%&WDpRq8hDmI=D?+M1t)rX% z0R!!rQ!!Rwq{0Acvi-pzd{DFA(s@>=8+7r;qr(jTireTI!I$W2qkM_k;X`QZKM(pu zO)eTW+hEdb8Y(Qo6O~l)wWsAy!M-B}MvlvH*QWjr*cF2{lkrWUGH&uZOT7)Q9))}V z%-&#q!kFhH+sYs%#QyvaTwYIJ-7~9+TZxjDg7ST+JCccCW8)6QC3JR)GO*qjNMZJ| zaES5k5qUR?zi559`uk|aI+GD2?Tv#Iy~vSeu(pOh3r`GKN-d7G_Du#vFvEO!q1?Pv z^`EY%UvQs3QEtN0-f?KyrD%qad_JZo4ZiNGR?PYPmfz%@WprwZ^FO3L@_Z)^of`1@ z2G?CJeX6%{{tNq*mX!^b{GTD9pI`(@Ba6BhwA#s^$J9nDXrwFtv$Cc+xtpz`R~j{x zN4_HNu^FN7XQLjeIdIPzVIp@*P8a58Qlt7I)Zdq>kabb&RY_y^5XsZ##EkW*I3UCB zv~`X{9qPtYGwI|j&eCoCAW5~xUQzN{4q&Esv=e11^|CN`rbg9evCdqGl%iuXn5G;z z@{}~CwR@fG>HkCe*P`pg{5Iyk&=g2)kck25FFNLw`pK;PE?*4hdz6rgYc0lCne}6^}{bbfp)|WVlsuIE)MNQ&JNPj!!9yM%P;oRn^ZVrz~>&~TV zW;!TuU_QAaq`f2?*PAL-sH~FeF~8-Mq{h{vx&iQ+^j{)*-(8{g^k$;iX#FZM5sij{7;{DDh5ZyuWi$}pa% zveQgpWI5A0@xoEpTOoC6Gcco`I9ehLa9mQ<%`z>XZrA;8Jlwe9-Eq#6(2}*gQat>S za1Hp7nvCzHb9&hpw5UM)eS@8gULde#ov;zI3-TcLkn!kMu$X^k?zm^oWbgy^_`>e- z_*0QD`;u@!dzXe@H%s)Hh@M70Af)~boxzM`^s)V(IuSrQLZ6C=o$L_3gaulR5pz+Q z=PUep_;za=Zo+Vr-N_28gfc@`?a3?PKq-tzm7MUPifCEA-ZgdpnsU=NeF;!jiSFdKL#uWiy2T9xdG#s@qulEKu5gwZ=(-tHtlVZl;g zXX(aEg8^ihS$E**1(>?cG4sAJ2FJ70n5LmVmE3cmksZEutrN9Ys@`s}WlC=iQ@V1i zNQuaWOwU4{7z`_XCZ4oJ*bNpN(NH^icx%@qG~z0t|UjY7|jo zM0nQwYz#%J)gaEq&WYH3h+>sVwJ^PCMsly0BoM72fBrW+rYgVl$0>R0X3|UKKvx}3 zT+#9dF@Rjbo@OLlRhy3Z>mw^JK{|Cvmz9N(y@2&DqUX0c48=Hpew0?^>pj$UZ=sfm zfYd@8_UCugpS6Q~T=MfGH{~&uhPS@s6|A(Wv-Y;<$@}&}bC&7Zi794aBbouF=f+VH zU2gN~WC9KRtY?+Z$Io>DUnzbQ*y4QQ*zPC5R`U^bMv-gcr3C{A_;Ls~VXB;Wpb_&1 z4jbI)6*Er|fTmM^xP2+E_Xx!q*{BKj@gFv^AXpOwJuG1<8xHPTOjFbdEcnBqN~;Xl`^ek{|4k|><;lU5dTjZb~)d&A9n*x z#y>ZasK{XC+s!bSU1Yw(q0h~AAL+KeupyVY%xYw2#+^QV+wITZ%q^Z&4jlda&&oH= ze>Yw4&4o#Y1JQ1k_|Y-ec)8y@-TtO=#Bbc180d=|qc3xZzGQD1K@E_&&caFrg9Blz zKVld%N;Ip@o;f5Pq{sYZwi!?v~2RFS{5Cu_AXSy6+~Z31pS<^ zW8pT5N5xh;{cd?nK+D`2?b+TZTR!fz!g_iP2?6sY-k&d;bme&~&wrB6W7*T)#629c ztChm$7p4spgYG6iU;S>TvtPYfa}F-q$!nia&)pu{r&M2Hzd9QLY`e5$!wd3r`la0>EyW6Br?0U{*@9uEF7QB{t z%eDXHW{&U^d1*Qpk_>&rcn+U`{r8sr_MXc?IIFUITV71<{7ig&sgSc3;_&`zK#7wA zyMjdQ7nSU9W0?K?CL$LUX~Dy2$(V#h)b16}bcoFn8=3X?8j$?uO+_R3^XIJg?~ysC z%Cmx1td$Jo!@_Wx9H!TmlAqM`5#H4J+x4B>b02=Ef(CcF%$zkVui`ppCm^%cRy8%5ficA#cV5SQqxFTNBVY%}zLGg25KQwL;H-5SzeQSLp4_&=f zzcHhh+Aud!beAlnE>Ea?O5onjxQ=DO;zdof@BMirlEpX5sF~ z&aRbg%J_?|M5!0puyNmlNpF0uhGqIS;afce7xs$g&Hb*d0#z$S8rWV?nJoW&c%EQp z_gqK;*nsMBV60eW0<%SBwTR;{4#;L;RlyR^GC1r4pU)>nC&5qs%dVbJ=&EYkPaDkU zty$%%FZI1214yw|!wC;0RV)T?P1yol4!wdI|K?&MP#sjpV%Go2u zPVdoaG7Za(?N2@p0n&sF(^+Nz;^>*POw^|6;T6iu*C^!pY<_Yx{|`_RU@cvW_Q^qMPlRT=5`juyNk zFJZ^9-$Cq2(%M%AmUL-(7g&$!kWU2kqL{nn2T<{(X#-l}*%)n$Bhz8mC!=7$ky1eQ zZA=)EDw}gUaIvwNLRy$ZyR-efgxxeThYn3!j4TllnD|gidkz$x$e429{$l>I4ae5~ z=>Wwk*2jQAuvYyx1KoFh4t|H3hg)1j9pu3W{F`X4<eb&6CIEi|XU_DsafAz1?GLyd^9R~Vu6K_e;C*24FINfPAq;-Nx{(I2 z+AYfBCBhX*!S})H*3j1BpXidJ;)rg!fkj zRM$d=@~i-u?^rOX)|$VI-1Z`c9FkT{lQn)|M+-T$B#e#r(s`3`dk@YSA8K7mwJ;(< zN#6ZgoA9yfvb>j2bda;Z6GemJN{ePY7-|`;uD}DAZW+L$m!WQSN(Ml%V=1J5W0e1W zN^V2K%_>ZV3o0=3OQ21rPJ@jUym_U@x%ApHhGz<@WdDCIBI(0@mQ@*S6F+=CFbLIA32~%5y$^ zKwt|F?k&|u5f-=sC9{;31`Bp|L_p!~k+kET_%cEY1Oj6!86{90xKMozm`jW)@Vo-= zuYDA((y3c3&D_9Uw&{?;uI!g&M1YcPp=So)xZ9DGv9aZy4(PoOB_;;nuo$nhwj%+r zEKcyn6V^Z4V{sC0>t#&|$gS#tUg3^z?EiXgm$9npY$%*w&JRPtmZV&BOnqoe3LxM} z@&LD!obiV!wQYg{On?dFEqKa8F^OVUNLdsA`L;36(QWlgfJ@e6%%knm*SryOsKS2- z57^H6nCcvOLAZ3NoDjBy+vecVanrvCezGP*bI&LZ>5eqOz3z4XT*pooe1!Mcr4ExE z2mk5XoHoCVY8cIpK=556CY;BjmhhPjKw!+7zJKa^Tv!z1Pd))xBrC9gJ6TE0rsxoa zD@*H^U5bj~Ov2rN);@BSWnRsy(L{o? zmR@%PqN(nifVH#WoEk|n^0-5S8Fm8*%Ci6nOqQrUhcsimfCvO8f7r&_V#4b4eVc(k~;$0o<)+k=_`+6U6JA(erZ(lz{bB@GlVS*EWF74)O~3_P=^;4KN`a zW{C;T{*cL5+G!^x|5%6aQ#O|i{YuRu1FpnuX~hQoId_0>&TxRve;*;*los9wG`yHo)5*7i-${Y^z^)`VLxh@?|K3j{#p_6# zEVuBI)M2T-(j?s6!bk5$8O*Fs8#+~46K{QW{Cu&H`er`{&KuN9U=M4<5!Js`nKk z2D-m=8S1P;fx6dr^m8uVZ07GbAY(%T-eqIwCjynlA)+#(JIb;EW`*Dk0X#S3tLE`< zC~nOrhC%)Rc1$Wvcu(nQUdWLJNRl8jVDqm?jnN@|X}lfI`in=IAT|lRW{RX?Uf{kM z*7kR-NF!Qx{ng&#*C`d((&GWAHqLs>Vq~+jzim#UG7*P1G=MW5?<`hNHTGX(YC7ZM zXgOQeXKFn6KN=@AGa(ZR`v1k@j;V=M`q>dX&)iUo+qT2J#S%<{xw*5y*N+zL?g{Pq zZ=!K3EwFJ4d-EL4bOt0|NgHdbcEAn|iKET*PH+g*0HsWyi3Qi0st}w_3@)vCKkbj@SdZfaEQ}Ou_ECXjwy0@^W zEDaMOXRHGsgW00HY^MY($M)b4cN}9@WB9i7`s~#(`IM%xr#M>T8u7awp5`lKj09{v zdX0&MB7Crqz0kOsZ%Q_{uu<1KGnId=)4&(_PPLO>LLQQB8CExEVx{6mSTOkH5N8=` zg#wFxcCx1QQ%>vQvzBMb+^o@Bx6_@iNbUR6_eMA3FV#4y9SphSI$JYz=8RtYS4MQb zJ$!cjEe?~g@+nUPj7f0;-aEYm2^vEB_LUZ%$8%`oFFVP8RB^R`u|ML7E}yc3elA$k zJd1iZ9F#S^&;W*c!gmjf1~xgjGZZla-bMnnJ`8N~&;Q>V#?m#Mpt zPs4gaBjjvzB(Z(ZKVyJNj-2F@$FjewQ2m;QVt`<$9l<>w3EmG&L~^UP%1 z(7s8J_b(Rxv>*b38K9$ ztA&&}C6oPKCi4?XrkHxPfZAQ~W$Mq{7*Cx0%8S#%FWs($!)|gvtuksl7KgnQV5Tr4 zHCex0pY|_aDdUZ!4WbQ`Nkl?pSmNr@&k4nKnRAZqP-t4@&kFoslQav`!YHU$ zPuyT)#LHAVDfLdY_`gngsh@RCdFs{2fed3Q2%T+dyaW{!Jsui;q${GHAqL1j zM1}t#7tmX$V92d36Mn?JHV0l+UqZCO*`@tn-s>Oy%ZV}mLAXG^MxRgtw5ApL7;;%Tee`;@Za@PcGwfD%0@3ogsNw~@$a^8 zf1d_k|Iz=>IvmGdhd4uthQ)whN zfEAYk=bWJyDj&Up<=a;W3UV5BU4KA0BhK$Z4U#LCl-=s;EiOJNFrl4LXd9;8>kR}p zI9uK4>>))`t!&&>;J_HL1o=ultX+Wp=Vd92r}dEvnyh7xK|kY4rg)GD26_#;#i7S7 z6E|3=e3WaI|`=#u~MtDj1CdVnNP?sQvZ$HE>P8mudPBO{~1>Rf}B~Z(&oUK%Q-~H<1t_; zQS5f&{G-^~_4=R70Nl2YMc=iVkl)-fT%`fe4dY%}xtb%>L{vB6@PP8VP|rY8dRkfR zJ)25GK?1j6#K6=yF>dzaOUPZv;^8{z>J1pYR);Nqs&s^Fc`UgtIrF*f0iWV>=%Btq zX!qEe+Axa5wMUa3g_zo`5hj-^`FpSgHPp}~rb6dzLb#A4TQFOOR(iYAx?FT8 z)y0Kt{!ear?fOiT6cp?)zERhU_acOxd9G&i(TfQGf<)e*PuaCH!0BS++mJps$n5NpRz3#lv`6W-p@9pnnDA4CRa9?JK zQPYh0q5byzh~3Uu&y?+F;rBdZV*i{I5W>7;Y(BO)H;&&cUclB>tLlkWBa+z0m}ryW zcRp zIe010CQt|&8|UYbfnHLERZ)|ozxD8`rmFCq#)^jyI?cpw9rf^lkFXeW4@lB!`54+A z$e=XVL@?bHz2Fl4{#3S}N*BmVyvOo{2yYSsb%*hhFwGc-^kNwRl8kL2BVTQC;NMrB zdYfE^zdHop*XK`6n*5SUazeAeK#vHgSnn-2ETrfU-Xpd14R9+1t{4m#o|`vq&`gR7 zYPa~sakM%H@(PXs7la$m4JI;+A0Q7>(e3!)*15e!T$wUAZ=jpxM41+%1fennDErUb z-V)Sz^J^cdg}ZSI`Kfp*P%N=mQ6`_srHl+6(7(G_OT9&Mh)5J^VyGAy_6q!erErGb z+8&Z+sgZH_^q$-2s!#5>mC5Gs?w}a&Sr{l?5+Pox_RSFiP1Qeod99>2&i>}OQWaDx zFe@)&JONY%VqQ>9B1W93gul$bSSo1J2T@Do1(9S|Yalen8XSIWYq6OF$sZR#qLMy4 z8lVhWFm*oTdpb2#`ch$j%|ZDpP*U*LJUz$@>fD zZ8VuX0!C#foLO<7L@AyE)S1r^wE=4ne_-D(x}gN-#VX^M1sSC)|DC`KU0$yauNimT z06#`t(O%%rH2`{D_oQ2V)juIh4)3ReJ?dI22`>%rbcSJ+Yh30OEj24NLHE>ec&X|O z_Ca_Ikqv7L`wriL58FcL8?;;E(Fbo}LS>FXZ z!DX!M2zKm3djeEH3Wruuh_lV^#Or6R%@)}dT80c90ZOsdi6?ve<{2)|z;V`{ZAEJ%`7aA&FyGzo)?qLM0n8H&xgxBP@##U-d&E8g3m=Bk&lvqLT zK3t_hS+OdS7NBhPB@uoVM^W8JSr5sQam=0w_ooO`@F+&jH>9jCGVbd_|ApKv*w9FT z*4xfk3Z=qp)Z0*3eyCUJQx9pUannxbwU+OaMi&1kP`;Sx;?3A_fST~%nVfEFv2GR% zK>qt>Cm5le_P2~?jVt;U2c?7KEQ70|l4X=}<7idECTrqbOVn2ch{Uwm||*Pg0151KYu?y>9gn7=NDhg^y{tU z^uoAO`0o0yl7d5~9pFFq9e@rI#<&fo!g!kCRGfvP&JDY;72KS)IW$kqP01Jgq%hwO z^Zmhu0%<2zk#b<8WV%zEN|6*k-%AEVK{;+*9ibqv$$4Km3JY?w+d345h$! zx_#Mt^mbs;FL^{cPK`vq0>6GB00~1l*J&qX97cqZ0NU-YqR!)p21#U_xpoE-FT&V@ z_T(a(?F9g#iZtxMq{7DfCmzY&h9ty&Sb_8Sj4itougL*#+#kN>~_GUPnwcK%BSA2 z?7mfyrz$i<5vV=`A%y--K5Qe%4JYCjtypv0TY0cGkelq)=1*J`8|gYK$Jb)-oPa~x zczUyb(&4-N`2G!kYx;HApfmEO%ElniT&xxIM97Z?5`ajn?i@X{VR&K0nN!Fh6G_#4 zku(1u6GNh15dtJyJ3KxZklVCQvQjG}KX~u!;~x*Gmcd6La$8yAr2_CBeSwYwgQx1G zz(b5dFk)l)J4gyPAe1iY1qKo7G3P~|2q7?C@aJ7{)GQ(lybWfgx$)>>VeC2p)uRHo~6bNq?5vLpWoMlc3HOM)`KEv^*m8=8C zNAhP+!?~PLb|5@54YWMLAn|IQSke6+rVJhQ_vdJa+!Q3KB7m~BPN+}WR1)D`Cw zRwHmVf6sQhHh#~RrGgmmy;bM5qxiM|_U3OC|H|buE80m-27_>N!K7L>ySRk95Ta15 z^2@o=?|)H#G5&(f&-uqufZv}33n`}OSdoNFyDX` z+m`~H=X5e*?p_&jW_y_~X!DP83Us^xNkdW-HjHJ-r1A#zq(R919 zgg^25xTcF9Y?Lz!JN?#MROo;73F zzDKf|(p2A-y20qNJFU-Kq|;^EYlm2*h!0XPDX3w07MEh>G7r4{;5-bua&6I@5nHj5 z8GwRUx#BKh0FJx(^4lZTQ~xKi)nPK%!pzmvn~w($KnyLE>XOX{Aui~Ruiim^XTF6S zN}?gA+RSUEhtmkVs}DcDf^!w8{ps2s`&!pv54~QHt&el?{rsZ*9X6{W3vb=jlIy_nW=d=UGd6~ zo2_lVTs?XmmfUdfCKZfAOTj|#GM}`q2Miv<$wVhPzx}V*X4(rLu6J8i50(YZ6Zo(; zU66?}j;iR|KUP1~(9)nG)S1Tj4>aTq!braOZ}e1p$Ip{{==>MHsk}i;pBs`uaf2N@ zU8Sxc(I0?mE(HD7j|kEIYfeX0?0BR*f|VxKRuTjWK(w#_Hrdg<**NN{hNujIFKm9h z49J4u444S79h0EnH*$sei(rtrnNzdq27;_rrmD0~!8WG`L7u@R{}F=rbnzippom{UkM`6mq<5*Op~F8atkTR(}$7OQ!g+Wt;y5 z^U@EQUAXhM#mW^~_}ssf3cQX}oPx$9{By(Fga{PM);GGtgOSz0aX_B=V*$uR%yW8? z*qxjU*cq@k#|wkeHt8f0%-aqmha>4gV1nB&ZS zO0_DT5rGHpgiEC!sL!8RJlHhtn~sE9;kWZN`OIo0CIu^)h}M;yr*$1iAu;$n=pfd> zFt`53nFjbB*^en?TL@C+F8_`#MomiWcN@CI2Kya!mnI-;CCUrzcaP^*SziCd;6^{I zs0bp|!(NC$-}>dz0DINPnhy4-{Vm!%6U9&6(JgsTZRi8)=-fE<)}eaH2gEgsWnfb~5&2+Ic$*R;cqTQ-2S5MKwAagjq7h+R znL&qMS;z)6dVZ!O4iJn+vS1&siah^YN3jLbzeA}RoVx(c8bjR*-KhAXHk(TI=$VC_7!l4+*wL#INp+ zIlCk|^}+UXYU188%x7DE0MLHkN5F;_`-_MD{w=R&<&uY<*Hq;>=LrZ+H50EjEVqFn zo`5dDQB=stI>%ON4iI$WKcaYmqE_}58Zj>*P>Hr7)HB5eWF17eV4?MSJ!Zp^22c3J z&dQ?5X0Qh*+Z(x#(`~@ag~t0j1R8qx(lMD<(=C_lO+}yan^kua2JOSD{qfz)pRYY--9;RPEmDT4L79o)TmT_tqq41zZPC*oa@Sjk4 z@Gc}eB456VAh={fZo^m>v3>(KBv4JWZC^2aho1eUnlDU;gyy&(lmBjNZ~WRH2>yh- zKGcqle%_2wfE)NJ(4iiCJh`XuW1;{rOX9LtO(1p<#JW2cVF|3TF0GYn`ZHTVtS-`d zy4Ib(HLq(J1R**oU-FshvMdv|fVg4+#`NK(lKrbaKs*%vNq5}q-6cQW{cI{16K)BnbsJd9Ez}T9A@q<7=mTn>rEnr| zmTHyNKA=LDE7C2S_k`@ORY|TDSiHaZjO;E>7)+bB;P}9Rc2b&~u*N}5><$=%tOK5r zb;E$Z-L_t9yw9yLRd;H3WRrQgco%~_(Ifzsy(juTeVI6F+GD2D$v=bKW*~iY{u_wD8t+NdeULuoy zh2E|WS00+ga>z003mYSg`u%{wPG=(ti(_a@)E5}L+p-s8aj&h@m16J2yodFCiN=O$ z0=PC|Hi{CO698+CXvjR9ku9*|Ug6-L(*Qteo9ms&0R-+p8V;N*(gB3E4h>eKe_3sj zj7!20P&2_}mb@ULMnA0PG~Pl(=NpZhS<(v;pdG}_9V`cI7wKYU z+76Vdw+u+cWZoL-E4l{vMB_)&H2OH z*l>*-ok1b62%9M_V_g(XHlBTXROK(ZB4-G!*Yaf9J>e_2CoI}&w1W5>%MhlJk+zf& zScFaQ>!wN@gC@-;nyokaf(tBMv_oKR_TO%i+g3vetaVRoOO@I-8y{Hby6Mc{=$&Bh zvu$a-5HPsEnTSS>NX{q#7}{_L=9|C*aOJ*-lL~210Q-IAc!!M2~B+ua{^=@}}dRnnwN-$}R6muf}&+p5X!W?qV=& z&2WW%!qzwkRf(XV@coy})UN)fbA9L$Lw9-H!hq2HiGSdYLCe_0E3`N|0mRs zCKE=DD0k8O^~A zr2k}|3+&sZ$g)*!oj^Yrt&)M1+?B`&DCS3i@;YXXaSQnXEgS(i&1n&1^&wqRzjMwwuxOb-J9hDTaJN*VdkkyC7Nk92lrIiKbXgUaEA3Wt5{^~vuys9&OQ^3rd)X?P-rXN-3r_R zK{dl)TyT4cywc+fMI;uU50A$WaSM*5+}D9n_-AX}lMQoUQAt!4iYY=QS1i7!VbvZ1*^+`FcvG15BiNL$QLmLSMDoWhD zzN5An5ww#^$pXnCDzXJaTc-%70kaFXQA5(LI|Kool@!KCL=PhfLBRTDm6CIiB9WuS zzi;kaERgY9X>SAy+CNS*t;c*Y3aX9myOc`v%IXOV?#y_F6vI2$6Bc5F)kuMy89iYU za|c{n#Mt`1VX=M612+WL(V8Zm`NYhK90KcVjRiLZ)?mY5_aMxsu9lz>0vo_ae^(2E z^|-){K8}Ej6!ceDx(NQ2;X}V!?;{3yz$Ju&1J@6*%C>3wcH32Ni|lJo6#g5clrO0j zXC3ea;YGq@SR5(+^=l?ojPE$dotE6NKIi&0Mmh3SFMg5Uh^ z;_+edW9KgUcz>VVje0+Kd-q;>;jidCq`74O!%83i`C>+|aTot`QN6A&U=bwxb_T7J z2fG>4ir3|g#`j&k0Kb9E1cU$ihq`h3GT(dyFUp^wo^jB6{LHs4 z^UK`${p#X>{_ZOpr`ia1K}FMkySi9zi(<728@#5Ez{U!x{{XNvM|dMH;}`$Ad0%B@ zbg~OENPNWDt}IC=%G2EZa@QI5yUAeGx#^9Q>1Z@CI^{}fQD@kj+;_UYzy5VjcAvcX z>t8iKY^O1Z{FnIUt<2}V^}jPZg_=Iex>M*~%!~ifdTm}rwBO{f@u^okrS3I^VQZRf z6~!MLAzxS!(o977{wGT6zrMNnC-B2RwOtUl6G-hp#HJ*{bS9JDc#6u^pui$rL3k2Y zn-`%srj?bFZ)9D{UZN)^c1r%~_r|gH`#%MrlfZsbcgV%R{EL0h3*1`T z4yOas?hg$=Wf_sv^qabye%Ji^KT`jQLxzF0pfZiWTQ=urI@IjDtCeq`eKwFuoB83I z%+mGdKU;|Z`bK3Cw!=2&2V?49>BbDlZrf@?|70NH8<=`qU0;}cfCk~mAHy~TF)qxv zKw&+DoH(&UYGmBPN+BO%5`&15VuQ5YvI7UF1twCq5P>9b zg|N;95hDc#X}M*u(~O0Pt>Z*WtdoI+HEw;#>E|tiie|7Bu71*KtZK3K>Egpp#xNMw z{$4F7Z3hqGq@dutcNECYuQ2pA7+hV(ZrP&X&xp*L^L0M~{Z(%^sj)sv9Y5L2zw8-fj93oOJjSbLGBpU^Mm*Y_M z%{JfAM+v=`P{6~cG z?-9WWKvE$IT+La60D23B;G;5O*kvatYY$*3V;CG+iFo#DeSvV4K>Qd=2++J_ zUnZM$vt5JyR1ojkCE*xcMQA$I&YG(N;>T1$LFP_Vvkjj+4M@oRX^^lv1Tog;P#|L+ z3u$rhO*+5f7Bi5L)-nXFr4U1{r2!0O3~2VU5BAwBfq2he3CG|%5uf!=mAKX*e*9`^ zcsGD~DZ4=cuNEGeFJup{-tWt@z~@T?5;A8RBy8S5jJ0_a$XLgM=1=pHbj-GBR2X^w z=pf#cNJm6^oGV_)_{tz5-OVwuzJ^$8eI3G5L9w=y=7Dmwl7fV{lw#RitFi`L>(AOi zLt4%BDQ#%=2XYD$(qM*wwH0EhzY+N}lreCfThEeX-T(}cKs8%OxAnF*#h~5}onj4= zwbzlkt%HR3yk&mLNyd;C%OF82jf974H2`~Es|jWgAR?`=oua$x?A728fP^$(LB!e* z381wBL?o3Wh9-v&5+a6<>za|!4yb`dO-9E`tPcRoN(?ywAWT=wWf72;hll{8 zV!JVqWxP=SXuB~73EGG`3c3daO!YlDgsF;yzLXjzjLauf10?MI)Ii4{Q%zxvSJg;i zaC~RaNOu{mXF@MgDyF+XS`pCx2)<4^WMCIeuoKifYm5W{BKm@-hM_C`VUVylJQWvw z%L62kr7%JKU-KN?d3+bhzj<8)Ks=w>08GqM+orR__CpCI$X?r`p;lXfxo))$Wp3gj zE$2}<_vu=;N~tYxK|&hdVqxuuSZnPLWo@8A+9?03C3wA1v{4YmTO$Rraczu-o2up{ zLmR6>0u`|u4I2T7xi$j9%uPIa=LH+C?!3Xgbu4tx6)@Z?0`IvhNZ6jM;(~iFAb~7} z3F5!!I=EkFFZoh|F}Rx`p3lSv9^gAQhk46hQ}YPkI+k_TA?-Fn!si`kTjbe2Y_}c_ z#B;5yNDyDCxXlH^R|4^7E8!qqC$oILF0osN3=+arpddVHTBT3EDAr8zRJEoUI%ZD(lM45P_UbCw(? ztys-FbA}lpL6gnEwoB5~-h<}41`;7hgKL*!oRKZ4@dW^-Xh0&QXmGJz4pQi~T`oqU z2T?H@r1AjJtkgh)1d#AB?!1nidb(@e6_6nQ3MM20Ef9VI{E;M}Al^(VFvf>Pgo-rF@MBmuV&nX^lhKnC$^>RG421Uai9{=8K@!M$Pck>*7Yfx5iV z{$LSSmvJFhm#!EqLjWwsDnI}k3y*sHP?g)&eO5~f<(RMn1_r+&R8V^$3z(~IV92^r z0K<%eHJ0tRdY!I;fL!3tN&$oKs}u>33RlCGSm!CbwiPfiC>$aY5C?au_KO8@*FZRM zHe-=|m%3Ca;LbsVpj_6Fxl1_g&5pC5XgyF^I33KT+JOjAWC&h^@0OsesDBsY*E zg*NEy6tL?hx($E-A-iUSrd7UxokP^aN`vzgO+&&}EH+zk4Nrp$RH!(T-8c7_+0(4z z)iGHzLy5T!F2Y||qu_AgHRXbRc%$U9l5qO5aalkInT`hKu&Xl!>_av$_I|UeC*CFT-#n_c4r|e z6UH6a3IKh_mH-stZQXE;pKMpmDN5PYF{pqo9wXsl^tjYB7OT(F-Eu2i(~%c%1{L+} z%`iRRzH3?R&)-q97zCWo%j!vu`7e8((*~M{W%3eYZ$iadCqWS;JEE?sz!pk>_A-*w zMu~L34i#soG}&XX0V?~L2LZ=x03pz9Hf&mE)ni(0wLFX%l=lV#VjIHHH>m~^&B3BV z`H7(7m{}$A7kSr37;8|T`6W~&++@U007@ZSLzxf&s6b1Rf{P0>TBW~kvu?Vg_K;d0 zLl6imP#%Z`etY59Mp!uLtaf1q-fwV19!KDJ+7W0R{8O?vW#t1?IaIhvEkh-O1(jC$ zTgnTtPl{50?$#npRk)zgQWX`AEyX0!159HifpN_Zf|jyqK=hqS$vq>%dF~Jj4yd*I zu>KIi`h%UdAn+31902)I%Vk4^%uu1Sv1Bb<)Xje#~VIyZfMhCoBg`9LX4#N7jDwmtv6ev=o zvToo)csEE0bD{x|9Wj3+%VJd)<;y$5+<*%a!a#OJ^-+7OY8iq<`x>~I7{3PD9_(kz z0!REs$)e+WMc-hS83Qgp1_#_D>HxMWIlOzz^r?U{YJzaVF>)=cO%SF`=#l_}NN~ZD zNVqmpL_FO{@}~qvY2bndX)xVUi`oF8p^G~VkWRoJz6Z=0ForKqAOqPhj5=GNgnS(%fqDiz4@vo zLh2`*e6=!brSI$&&EH0Y<)Tq?}mJCYO@K<{ab5pbYYD+94G57FTf2}C!X++1kUhXZN7y0t2SsJ z?%5nxxP&noJbbcsq*zC6osPG>-E@^chB(Apc?EuGj=_vPJ9eVZ8`AOk2!z{zetN|BZgXHt$hu6 zif)lyVX++0Yrk@$MFq-&lpIorEPE$fjMUZzZ`rQ|!Z@1|$}ffYZUx~*$Nrh5oJ-mP*P?@vMP#~K)xN$^4Oa+QsB8uSEF!A~Z;t?3CI~Dj3`@au4W@Av zz@rzv_2V?`{Ue6Dxr-qEqk%>AlSaX3e{yMauW6Od8%;#%Rum#gu`|(YvHv-LzL;mv z`I2UoBvL<2dddBuGrb*+hsn=_{xxmK#qZ$eeJ%1Q)Hoy<`}n`W!Pr1qc#g0wAn6W zh9Soe8Ai`JVqL!h`_%bm(7C&@4ceFVooqdG>%e{DFzDbJ-$Mq_Kz0wJK#3nnD}l(t zw9<49s5DT{K_zhGQQtbKM2@P=?StCkFzBEf-$Mq~Kz4P2)F}6??%#cPX`R#gk^op| zG=;$Dv-&k?Hmj%}bD1LSFq3ig*m;aobk5>>VCWDUBh&kNn#{AO?MqT+Jf;^Im>UW( zX5YJMQ9Pxy&jioR697SlWeI>N;5h<7sf-K(@lshy0Ae*@!)(1Kms-|I;!i6U0OczV zfQl-m?Z__D>T^~ZCVld0$i7Un&FJaBv)N{vz9{30!vqKn;=`S%f!?KyOdU}aCSD#v z0F2#k!I@)uGn{hdwh7}Ov~A)##ON*O(wu_D;4m>la7>2?gd(}d)>6PCG%ztzG|1NL z)>}T$%H&sS;dGgV9w}(VGYo_mxqU;V+@}!3()0d=2oK=y(g1)Qa#3gC6S7BgV!Ij;G`~%jQ%;H|3){&$NcS6<{I`iD{XT%asEu$Q#Z= z2VEcrj;s&cfWnptL;+bSphWs2*-0Vd+}D6D%lWTa<6Il$ch5ptNQ zmTXfj|I_vRh9|;Nuj)8ZRN^a{0J=o)9)C`r@?~1RC;0-kGIY1Ya=tAx0I!lMTMXO@=VR<83=g3B>D< zS+&dxnK$&&|2Wezt@ALa-Uj4A%f2M9>2h8G*GJ}%K*M)GG5~dW!0%zf0tzY`yU;@Y z@V(qu$oE(g7_wCek%35A9`N^Y8CqO)&^p7LWKMRRBo|vwGGk%V?tFg))0*jze2?1m zYGkd~^5=_hF8&dQmW<+tlV?&vxWN!uXuBaA&gPp*53yb_A+MY*#pcTTHJxV_ znJv$yxwI$jW1oDJ`%3@d?@}mZ+1&%)m+2y(B~_Dr!c46Babp>K3#|1Ac@G0Vd$$?D-R)tKZh9}-CRvHj zBf5J8Q!PVtKEt6Rhgc?o>?JskwyjtIuUw6EI1D!(XYCIaF4{F%CgR&C z5|*o1WKghQR0*s-W0Xeld?SJIVrLLQ%6ldm#U@-c%B)V|+b!09gzHRrb|#7(*`p{u z-)=<;c{utOEB_JHU)ElR%c*$wGKw78%P2kHUPfxvIC>eYY!lR9)?PO1zj$^qgcsSj z5GmhoHEZWMdK4(Onp9D=LBuB7~2G71Qi|JNT7fXF!Rm*uqHHpS8=W{w*vOm4t|2Pt~fA z#{E?Nd4+$=w}zhayePt@rE4 zTwHMp0o`+;`4Z+U(4e_)N=$6@mb6IoVySJnmg9)*fzlM5trKc0-UW+(WDF`c-;!GoM+F^k>>F3HlzNTg`f3 zGV?(imnIYB3U5Y8jyZT+^}yOsp1H7oQSwu|`$$V?=_L*3S~@GqVx`v;vgllo_uUq@ zc|(RAHW9e6Cw+tn;+%+yru!%EDjH70?jF%Tl5d%>d$MW94-80zEA}Fj+JzGqqll8h zCbYfUvNoOVz*jz90LDs&beJ0{Fn%($%Uo5U)jo6AjP?=5jP3~BJKabj!5$Gir>i`* z+H3A&);^-ZZkEZc$XCgFmClHMn5>C*3T~Qmm6Qnwk~|tPfDk*ZiEWRUC79K!ZWz|wXx9z9zy*dd<|?XJasD+4Y zWzteSN!28E1dm-&v8PG>*v2bq51=Mo&@-rsj^xibAX%*(?eb)U+exgNh^KHgf1Yu9 z!r^uiO^~pT`Rlw&7TG49)6%`_XcLMb=haYrl)KaT;wPnnX1&(2r@c(vn^&yjJ#?Lu ziqgP)5mMfaV!zsUeeBaizJ}`y4XWRx(sQ<)#XTt9X3LrS1`_g^WMc35kYo}JeMHhI z_&y-%Xx7IgQ_B549Py#VAB`Aq>w^&h5%PiophM~&B*%rKfkw*#csi1#t_FvM6x zk3#K-;O;~pgCu4^=Y>528Jv&@psb>q11Kg=8W4N_f-SIZ-C&s1ECEtvG-aA0c#4F?Elg{`cSyt$_hBdGSckpQG_~!r-U8FNdV~6R? z(p>FpNP{(0SCgBjI5G@xH+i97+*mXN`S?J;scB!ORf9u$Tdfd$W5ocVby{4zKp}~7 zQFKEbruZ;JOp7o`pEC7D#Rlakk&OZ@RBt(lMAC!;p#nq#@nM1bEO9I#lOhlX6(AEv z0?kln?$0S zDodVNh=-|qi;@Z-1)LrUBIv`)s~@hn>g7ic4<-QdtqpMF1qK}0NbOjwqIcK19`usy z-n2tClHT2+3M|m&1PHnWL%}I*ZX{xksCPaXM&FUAX;!j zHVz9JXnbMt$*iK0my`Ur43XIv)q9k^sQI_xj@*A(afo{x1d;Nzu=%(?&d<-TY0(>tb3pZ;zSFZLpDl|nS`Pu^9hH) z^6U|8iKeqzR%F~gkS2B9&S)|bxO|%gI;kOlG>cVWa3M+{MgzM)qOxf>$lYXf5CKgj z+q{^A2#C9e6UX0fVkHwOY<()n2rc36LwJdtS?R^m-F2OpJ@jyB_m(SsmP$*=0_NFy z77G4SP0O}O4lv#xXgf+PQ39prU#BI$@c_Js&ZswTf2O?d{OL&o;K@yGbPz1RJ%~*BsAlGc>TfLc zp#}}W4l6VO+j}6Q*Xf5kiyDaBEf?growL_#WJQD#2+XGEMbmqNv16E;*8*pkg16h$ zQb<`Z#1)MVs?u4$d`VWq#%3BLrUW7zr|;_@wPIcJ1}g)3&nOuQc^@KQr(D9u^r~#_ z7NDT;1&{(9K3PNZf&?sI7@!_{VY5L-+igC`l#n1RbGkdE_CX6VKiVl-H!W`UtCIKG z)2yOVv2R(mHd7jk(hD5;7Yf^LK+PQlg$t_lfDy5VL%~>JWE28=_P_ctTA3g8!04CB!2B_98=JzW^?*Gu* zC0T`yW@+F2Tcsgd8YM#lZBjm8!6IYvo4h31oK~-7uE8|_ME;yZ{sxTVO|{@Y#6tn+ z@$%t;7-rhF)3U~^zNJMz=jPN|I(tR(^)^6V3IjOcm=Hnfdkt*Na0*DGm(Puq1VuMQ z8D`asF7jIG6AZ#n5)2#CFf_0mEwC7c@Sa~VIy$B99+|ray)e)i88E1^%S*6MINX>z z^-?G`+YAihZ;u7h5pAbVOd}!Or$x5eWMHi$H&RSi9Ec7gZ?~imC;Y4$RYa{b67>KO zAu<8zwh@=EiT*D!L}s6d7;nLCB!Zq{q|UU1?fwV@NQPb7&1W*K4wpCjZdL?{qWQi- zmZ1e3Y=RTVU!$;+342k}b|(wm9^Q;#;ZQrRvXrcFyW50e(V7b}6-EC8-MRxrk#PKN zKtc|u87ORf0SSZ}fv|OJ$JvVs$PiX~=y%zzjF*0=q06T$e6~KQyq**2Pyrn&zu_Q#FSnb? zc10B=Jw(n17+~VJP{9`qjs}&=L1C{v+KgstjVi;eSwW%i{%()}GM-RnuVt8jG)wIu z#fjktLtvrphG;mOf50-#7Ndq9Qt?`@^~v&~_WS=xzTKB}iTao_>^OlT2N)T2JE0|} zc{B*wRjSX1k*3}xg*l6X&|1^-jDP^bwqOkzJvU^yORYRO2oNvErL6=u%cM=N^-uJM zKBvk5$Q6a$^_+Qpx-}BbS2QJPHznQ7eO-Jl=#gH&7K*;9d@vHA%Hxj;ru4ChtLZ@v zazLI8US1H7`f4Y4f{h*uE-1Rrlh0x(V2pN*@Bw(Co9K|8&K z2ZkZYAoYG+i-L*J!o`Ww;(Lq4jtKP>|mfs|4K!gB(NPrmT5dni;*_);~r>1!er+EArUp$>mbu^@n zDxB6b?c)_Bs1mlFzsTjGlG+1G=ckf)84?D_^pkElv0Rw zRyo6#b|EXAXKFkf31drmSmsvIYQY?Ep4BDnM3AFLg5=tM-D%q14a0@(;xGlbSd&ea zr3+a&>=n(16e+1e$1U&ZEvu@0o~c7@2aA+Wp@C+}YvH@)@;QGI3DL2>^g#>Dq-Udq zrqv6S+6OHx^|j<0$4hK4ynqZgE>d9JZHsW9R_P+!Gz(3-ePclWw{47q)gn{p z$y<^(yk#^ax|wH+1{N1L`GRKBmrWt&C+{Rq8lG25lG}&w$4S2frJfLdb^zHwDen`&^|j^yOM{S#cS`ZUvI$ui=}?8bOUTej(J5(++^vOyej}$VmrNu-b~VTiz72|BtfOM(KA?Tz~MRhKbv<5`~R)3ySi^--4o`*=&`wl1k4N z#6`NP@~_Uvrxs(#5F8E{VFY3yplmel?I-s@>S`Eg+lUQf-`X zFvI+7Hs`*Y>u$Mt%9ni4SFM=4(Aha-d>A_~&D~n$g6=EN+k)t+vntD$=pzFlDAO** z9Hu#)Lkj`wsJo>n*QsF!gIm(r32STfWKh?|LahZjPLQbpCxh7uf`oPA1X&0Ig#A#* z|MHl*kcr{O3k*TFk#b#w?4?Rr$ugp7lSOFHZ~ajKp%*(7AmnamVq5PF@v4>fL;^$X zqFPy>M-HG`{fH#u8m-b_x0wi@wKX0A4D17himNLiG^|HJ*ej1VgUgz`9HG60uWKt} z;KH`jvbi7Hks&8U2ga3m-(ZS7d$FuiS_w7(jh*G-?R~&vdGpl@swk;`47o$9nAZEE z1Pa~_Jg;X!|& z^35xAG%(u^fy9LN$@tc`8wg%w;Q10ZoZC$_ksa=IMAWs~f$9by>DcYI-Ns~ND)Nl0#?v>XU4qrQ^f&J1I} zfbTWnt~{A;B!2_Hoet>cWuQ#R?K-Ev{UP!yNIS@@(D9SEzvPjJ=*0qgD3 zKl-;z$F#Id0R`Hne!oKGM%o1qm-a2VRUU&SL*i{xhf1R^w`f|W%XQ8?N9k7{N-j4G z1Mq7bhK)231lL*#!(3U~0@l{pK9OZyZmXGqQ!e*bsK6Q;5D8cD3Y1iYMnU?Zh0)q9eYnzvQo}J8puF1ezTp-N51C~sO={)Sl_?%} zZmhqgtJ!OsFXiMH-x_ZN?1_3(!?HnFT)|L?pf_+69ep!^;LVU<9PY~2EPE8=OSa5- zeEO_hEK+h4Hr2TgHB484_$SHoLiOGoyr@Brx%U-OK+0LRUK=FTAXh7(_YK!d1(J_z zOc^BHg<7K)1@smUCjn;a%9rydHE^3)NYDFZ0SvP3f)tQ+RBaSAZvfw|nPgfx00I~k z4}j3XZt1vi+Eslw;T%M)TK1e;zmlgsUDNE%giHZGCvqbhfzmDc`nPbypFp%qnR53h zmMT_6yl7$y2dSHCal^mMazY=2{H_#C(2}6=l~;xS(cfkO@PvD3RpoCq|K~j2q@eZc zo&(Tu=t)tkFHi_T$g(i8tvR+ea4@;H4s&H`3$XAk4Mrh?)|z*dVR$%YHq>a8pAy>4 z-eGG1xwXa@?+7my4U215;PkL&_2U&JsBY7MTVZ_hw?_E1;)AUfAIw%5bg_%UTRzXq zBwNnPIg89T3Mw0}sE-t*#}IznrnKJ4AbZOS&2omh#rk0H>|gA|1ll4w%ABE3h*m@{ zn@yY}ZliKxdCvqFAy6Y@I1ELL-%`K$t6d5j=6mg5vYR@$Z|7<9Ijfdgkre56IeP_< zfGz*~Wy8#YtbPq` zcZ-Rse_EewCs25w1Bf=(Qo{k(p$!L7!OXb?V!$Tik8D<|cPsO&f0|qa6>!H6sQ&y@ zcQi~kd6Cs2sX)#vQG9wzpeT5|K>@Y6Yasu0P8uS3^~zrI<$YFBn5GUp6GgsuVL<-Z zE{p=aEzUuS)JrN16tGo-_+IfUo`Kcn(|?oel5XqheWgBKEdF`K0c2GK{OZ>z5Ow#! z>h(KW5mmVqe!#j3l3%rYZ`pEl`J)kp-25JtDXT`ZzS?sr@X20$x-!MnW*YO11!Y&i zcuTLM;qpsxW((wxSCF83LdrDf-`097)Gz)iC>1ok6%w4;3i;y|B&cpa6IPk)w5sx~ z(whQ&_BWN8xOk&{%>}z5`Q(Grd zJ4VmXbo0Oi+?d`2_5tB$Ev3d(1T7sO%w0n73}TS@ z>w<|zKKz`mh;oOH0h6E5XCK9&K(A40z5o%zJ zfs&YE<25bu$!7qBkDrX~F^&zmWjtFLeOzT`y6#)#8*p5e5B}P#jAe;5Y`}mB!}i-1 zAfsvcDvP%aY=ZtR#Q3EkTFqZABxnGWK3~Bi<5zg*bM~BW3!pBJNViBo_LtA4ackGV z2Ihc}QFl*$M0AweGv!OZtTuMvlur~yxO7N53HUY0J4Ho>v`39K{Uh~i3~K`|C^e3? z%WwMQUUzzXZ8PBW1Nr&Mnnve_0o`7sX>?40pm;3<8w}G>9?xr>dnpn^B2t!F(^xbg1N7>#ahWPtlHP#@@iHt zdC5aPXR!^)dr(md(8M%>TNjQ-I%qz6AnqWsL2F;xmP5u7s|C_uud%R0ZkuPVS)N3yG%e2;f^tmB4gRCEQ)LfB}ZcWH&-6J4G^409DxcsC=e3HXiaJ( zV++c(scuPVRy3HwvM~LTyG`yy{&!qMFzo1-U<5ID8rM{@g9SO*_)eA&W~)5+ zZzo!yN!&syV9gtg`Qt<9Q?E}Hyr)%4^Cf~lI*npK;b6iVH%z~NDyz>gER|#aTgGYG z63zMG2i`S&NP_Q53SKR`qyPcm{dFJ!8MSALA;_0+BDZ<6NY|fDeT_cu^c$cdfib1V zV1izdAObcEvR;d|nlE$@`9=vDlmBk&)O%_^Ul1Tr$I-Cu4*hkgy-$4oy_%!j4DY^= z%f}62Tcw7x)4~2o_tfvL%L7hW6NH<6`FJig^S7^s1xx^AgEy3vk0o7Kq^690@n?F(jE7D zcgat8KSP%S@^hV<+-5A|nW}{?hmumS0s7|<{a?p*n~69EV2xpdxs60N{MaPv7LqPC zuN@%NJVfqlWtDuPE^J9AW(Jhjl!95)&H)fXX--Xa>vLa~z9-}kF{97ZmUweQd`h6Q zar)joC+c>65Wrh@5ZnG1y)8C*GOyAv$Wt`^F718#Bdhov_NFS3&?jE{owOkPn$4ky zUG;M~>lWAAHRXzo=;l2kT1-_g(iL2LOMJv%>UFS?O+!M%Zl#z2+O0HL022>%FWctD zyoS--6=c0%2lH3>bxcDFn+TE=ks`SHvt&NlERcFZ1q;YTWE%nLyPPY?!aFK!5P%HJ zB9a;b{Q;$Ait7&(*^q_p-OZ?}mm^6Q3z(lg76M>Ylx3=D&+y@0W8k?Y&?gKcLHLA0 z@llD8X`@RNJ#A2YNFv+h(E|Z?nLKtHunRV;6(HbQ?$%BIl+*BAi|4ovC$xG3LI!+V z60mFsrN%DZGywwm8&n`{ml2CrpxMwzfo;J`pxK=8x*S#*v4CZ200n6x3MQrr37}e= zGYx7eP>d`p1-o%700cq%zJ1A9@<-vw!3#)&FP{^&#s#_Hl~p}qTWdc8;%(eV@U3dQ zq^f_9nUuM8+srQHC|P1b3tVy*N_Zv%J1SPJ1ckry>=AIgVh={a9f)HE_8(5j)qMyi z)_WNEm0xGzeK%R9)jF~VEx0lLXd&m-n;5>ePf;YZXD#wUo4{jd@Ys{X$=2D1ryL~* z%L;jDGJ>Z*5`-a#r%q*zsCN_>guF{67evn)i6$Wl=@FTAz&J^DDz?WP=1DCcZgO!x z!T!{I)ax@$IJjLPN@NQbp+UCDE`^p&N=YO{q1C{mlv<63txrXF&a)X&<0_s81<-+- z&zyxSzWLQ(<1kP`^+$tJ{O`degKnf~5j8rt&PB5+(!Z>>V7YVg%2spnPpasH8T{C1 zBLgyKiV$~YR z^}P@V3x26n(XltIvUqy{lkgA>v>(?2?U^nRPA$U=c#e=!iV^ zgRLrzA&(9g^Cs+&guPN-7i3qk_6z_P{1&F7yXEiWXo z3nSK-fsDv9C7XO!6iniqk{TaIRsNDMVbh%xCqzUG8L!Q9Q)TG__kdA>;&;lL0y>z> zbymHx;_nI~Ud-ALF>JK$v=G^QUpH0SI5&*Q-j}U6`GU8*&P;-c?|~bXxyelq&2+&| z{M^|6K)oX0Nv+78`yW5o2ErE*bw|R$!jDjshI1$E%-<-fxnn1kz~Xj7i2&+HRKAs; z>6M#BzqGoT?nVTGh4~Oc6tL5jXv6SQR!>s|Ea+54Xjmkxs}C!)-IPoR3zbU8cdfp= z?1gPVL|fr1i)HVyAw{i9fDR&WQyFzKOX+J1Z=aHZ(+U?9(uL4)h&K6>|Mpv*4HXz& z11?6U1{vKgxF$?>VzQpwZZftD5H4)P07>`>R&ResDh(8F2hmz04&hi5)Mh=KvkQZZ zkxi%JE!vc=?0R5vHN}dzo5TvKFu~CQH{kXlA}XAeV}(~@LbekOF6g{RXkf~+RMhM( ztCPaC#WXEr?nVt#r=8RsBR|gO+nKbO;BnWWVn$sffttQL<6*MNmg};DYjRH6Hv)B` z{Zakz8n6)Wy9NpKy~CJmzITDlbu1*UHUCZz8BGAF*bFy8 z>*EdgGfNgMVSkd($=uJMb0~2wFL%W=`}Z3-&2tU~@{iHSD1g}mB;dLR)^n*z2MvY? zVwA)PE!(qfx!TYLl{^=v9_e7Lw-JZEC7?|EyDh6lYI%h9LylbhC_O|ikl;my6R6e) z1QntjK=_!BfJmgN2=NkG2!O}33CKED(sr#-{^v7F0y^^~U{RN^u}Vk>AOz)o4noMj z4w8Sy0>0l@QI_ljHvJ7n5_sM005s#4cd ztpbw;%zN2eXyCqe7?SBwheBRCTWWDl)GOqA`6L2JQO<|}9X~Hb9ntQ7Xg~vghkz(h z7G<-dur`r!sIUylAPKy44qP@Falh;gZ<3T8-${|`o|YZ*^B{fU{yhY)O_Zm7@XV2? zVOe)QVM0m1q^vH1A{Q-=aZ7b@2BM6f`N=be$iVYaC3)EzIEa}+D3Nel7;^&<6u{hI zVFx{jfcWYFK?i$-h3lqdBTuXMI_33+sVgf0fjXyx3kE@wW5n!q?I;ZHbREt9DwHl( z<8=9grDIS4;+(u{Z2Q`&la@TOPJ;`P))iPNh^S@=%u)a>WV!Wh?!?9Q^DZfN7!{9V>$XE*I)&KgKE!l!Q`14Abf}3rCPSnx8|PTjN1H zs{oni3$mxJRVy6u*?aBjhz4&~M(wWLl%Vbvpy9pAU)vQJ6&7acQXL2_vR~}_IIt}Wrz#I@nDZT>nWpv;L#pBsY)h*vKBdDGk zT4V^tiVE}Wm;9|zvQJ29LTy0)R%eXDju|$oGR|zXl^g{D&HyPY!7LZAevAxua21Z1 zK*2<^^7ku5ZuCZy7Woqo&fnCPvZ37Cs`g(a(J4p^Z1Xre?;8n@9(x_ZDMA}%13qu6 zgDd7Q9K>5b1mD-i;0M^nKuI04hP(_+h@dAH6W#7>puxlL20GA{twEZ$cE4S}va%HE z(rmEt(Yvh%Cf-aH)NG;l{R)vAXqVD>sBH#7Q2PvQdmB}7xSblzm8C7N_I}DYuhVR? zqV~Bf(eX-#eX6022{2J5%71d_R3kI=hFWhDXW3=kx}ny7_Qa42uh0ViR7JrmhHQ>o%Oxz>o1 z)Ymm(lP8KV0vj z^dkq2;eC~@xFN@&f$9Tx9DfziN(K^ExQ2t0Dqd|CKyUFZG?1sMHWeR-XNOEqMH_AQIW>%UV85X6btKpY_-O`bH)UCL`~S zC;ib~@@?|3STTaSu@~AOC0(}+_zi?zOQMEU)n8F}2i`j1k9ItBKsRRv9M4_AYylRo zDqui^89eMeH`zWd@(tA1mahcpW-0;09BB|xpR7VB#~RR+XAKUFDh0H#ZAVoG^chwe z-r(CQXsM8mFzQ+Os(^03D!jq>w#smxGT#=^&9j9y_zlyQm0iQH0d%u#Kuv9Lxv=xA zxk-R-eiE?RpT&0lN|X3!b8!u(;X!MlKVd+R&V>;TN&3sTw8*KtiHK86Vgq!GW5dRG zFAha-XZeO6hkEazfB_qsjtY9($yHm>*`Wivh0rlT-cr#Md}eBZeyk+~XbjMTHu@M~ zfL^13Awv>jMPdwz5I`@15L{FqOMw+FFc|^#mkOf*pNcF1l40QUMg#Ob7h43xP;#3s zVQoh@lrTUyR|y!?uyB@|hULjph6cjxh$hZHtwEMjSX2Y(W+?$fvyFY35bbyiF_mNC zT0pP4CBYkfMSL~hRxN{Q zQ}zc>ZY?Y_bI9IYz2BE*;hH%OpzrKy5U?49v({!%0Baosnn}$^(mC5=vxa#CfL_x{ zM?(6Yt1#AamH~Y`okL?ijx*JI+?S~WZfz+|=jPQ?3K-T}ieYat#2jp~A9Di*d-|dJ z7dXWF(+>soZ8QT$pL9@``jd_yOBov1W{rG38c!53K#kQ=ZG8?-HmJ`-CR>AG?R)Dy z*8#)&-!jwWRDIS~%YfdBkA!1SL<0!`CZzEd06;=|pnjR_rn6T>0szpr3lt<*QWH}I zB&~_32oRPnl?Vf%zFeRT5TMsGG_XtyTvolPU4@*j0HB90&O}1y0*m9xXX_^H7MlwO zpznMz5D`g)cO4*zCW#K{D~OKgnwuBKA7pL@PfN$TR1XHry7WC5AS_qwO(Brh`w9V~ zVS6<905(U!*rPe1_x8-e(VZD(tMAOdY*lzHp4}{z3%3>k^ldqSioc~{;uvpf5#r#u z&fYQZKUnXCT)k8*cc17&pnVc_33EunuBMibQ182;G5|>E%a|G-1V{h_`oEB=c;HJJ zDuXPC3F!A?=HSm=hb$5_Z&?7K$Dul7q6EaL0 zI$I4Gpsv*@*f`+qwQ&eyZ{ooFv8D0qejLPI$3S;t0mCgTww+i7^xuh9Ja8vQWsv1C z0sVGj2mkBrC0{Bq2!9jMzH9|J!j|8#uP&|)pfBGB z0pZN@>t5$6@Qehc@uh&ioErp$Gpifgglk(ktAM`jRV-`k%PkH4@n}5*3~N6_!R8vx zqnERw!?a?>o3XiO0D4b51Jf=`Q$`w}_ZncJBn_Tjj&VjdCCwiJl%oL*l%v6OM^ft- z0BiOK@BPnp12C#X;PX=h^cF$F!T9qUy3pyb@mB!7B~Y-y#9>tmyj=h?P(UxX6cFRY zIwYIBISD{-h63Kgm&K|0@MVA@j2VKX#ee{Ci(>?k@jy95{xdgMd3BSTR<CNO2tY5MH847-P{%-hPKEd+ z>L}pcqF1#hlb&sEDS&?SOF_ZTPuw?AJ3qsH6A?skw##YdY~!u~`ptD21D)yUV}w4_ zgI+=m9Eks2_H{GaKCPfv7=^zC=*3%tN7kCp`;P|byWs3?7CAxclol4=Dxe>C6{n6l zuc-skxOycSJ>=;U?H&U%Jf7;(6;Nez$0Djcxyu-MT-%4L+^+7kTFl!lWqE&qz%~Rj zAifQufSMF3j%GqL=Z*sDZ&Iu=Y`5C$6pB}ZuC)|0=t@fw0>a8JHP#l$T>{I%d4fg7 zT^b^xkUK@+fkIhh&@R2>-2!?GC1Hp+t@4HK!L#i%4bm-)hTsUc2euR>+TO1pWCXi6 z+Ap)GS;dPV(d;1Fy0Jh8dZ%gF4ret;D%e{sSSl;J(_4!h0qXRrW?x~D;f`A>zT1V% zkPP+V3YE-3z{i_N&N(ZI=75ayERqSptIqJzn`~FjyQ{M5Fi6ieh@pFEKzfEE&9>bw zxALVMF_|-{V7ocP@-&{;a@Z~B!EzYLPJbzN1I3)BJT^}Q#p8-{39&YzVlF5kd+8#f z9~|)Y#E-R%;Jlz99j-%#Ur$WdekOrXdw|0jK#-f5TQ&u=>MzUU)-tsHN!~T$5@g_OJj$3^Lg3~?5AptdIk=Y#0;(gLka123 z_SV;K0#-3p$T&X)_>NF}Yd8m?g$#28!S=W2mDpma)**vmpk4Q(eEDK+vjQ1zNGjvml2S&th+4=T7}y&+7hJiX;#A{jBl%Qxw%cjL{=)}2GW;vgMhFmCp_8x z@;9;+R%KDXyrZlQNM8{QM2Gi0wf|`55yXAIfeiJdZxHPc^^hd6M}4p)I-Zv=E4mMw zka6Cu;GR&sg-^-x%!^4{Ca4A(9QLu5#44U`Uc*ff)@u{5z zE*_c$)evu&ET~or4&m^OsJLNk_YA2XbUe&k-@7XM+P4r1FeJuJpcwtyKz!Z^Y z;x#Vs0~$k5i^!mLU~Nd=iiw4WOV<8!wUtWQ(^q7ggV-r9j2A31OvW$ZQrW?*5tsg3 zn1<){^~F6a4ajhBU%!QjUQwPhD_8IQAcSJOlwQ&yJ;c#b zK=#7k=_qDkK>D#)P;Bg7Q8gN55O=ukQ*z#}S=~+c-IBx(g!J(f1kg~G^T&_lWc?*w z&0f=d2^V3jztURga^DzVy&d=@9Mo-3<*K{t1#tzCK<|wDJL|W#T-F}^>gSSSpc$+? zGj=tg&N2*0Z87lG%@{y}AF=LUL?S!^hT_x@s{q9XH3#!uUqWRX^%vr3cphJG5dFXT`iJ^gn!+f36JrBW>p!u0g=e23#IYj6!=ZyfE2plF<0FLEg z-(Rk?sxHEduy0^OC1?<>3-2wTXJzs$tF#9#xkvhalC7y%I@|Bn^`?FHU27T|cAV?X zwevifIgAHw;WCJ6ibJ<>Cz{t5?xX@nhM8FH`K$znfq;GyVjwEw6fMKvr!?o}Caczt zIivu_%qE2Z5)$AcnFG)_BEVlVU}~zOS>}GAXf6t0|R|KfSl z$S77#X+!Up&tzz zhJb)v;Z5+2F@+lof$bD$>eF;H{uS#16Y|R0N^Fj-Sp_UIOP)(}8T0a3eezB2C;fw; z1zg6kn-1TX=^~#cRpWAPDwm4Owx;_UA0xcL&6|QWUYa+$F-qF^D@10CleyL+?NhL0 zxwSQlbGy+NBKo)RG(grxq9!9U zR*Cxg3KrLrVo1NetDl0?3R#Unt7=IURsKuLGn-e|wX?r*S34uOo@>kwnP0Y?a~vZ{HWwTPlX#tEg6*nKb7 zyZ?EP_5JPK(d7&vpivAS@8H|HqhB?EAkI)P?rS2i>qHCST<$YlM3am`o6&V6tx)ck zTG6dZH_R0VCEbWvU3OviF@xKFHzu*xAABk!eeF4oAuMapHtPrKQ2(_9a)f(kwOzjw zWvh00GcO8;L!5TfLf_*&?W||6=@e`nye7yM-h>bzLs+5oz}ns8Fsx4$CuMj4Xg=iZH zG~)&stg(D>rgM-5($}(VA%RU@d*(iE;@W|)d>S2)oey5?ZX|Exba;2U@(HT_<$}KQ z>Vtr!fpCwxk$fEnBKAgCnnSh6T+mlueE^&KlUb3k5_0*Q5lt^y&(Z?i7Uc-`2?vsF zGZ;W{aD0Pl_u>JaulMDbtP*eXsuLgh-D7!xctFOvmz>7Na!M?>j=~=P z?vry4!o%5fX&e3qd-Zz&e-+W{UM-T-DeZ^9hk01Hc<4O&FdBUr^qQ%%$rt9l{y>9o zo~vyA+I^oD+0C|MaY7vRLW{z~;5_5-Fmy1hR=VB@2Ve#{Wx@-wd6g`(O**Fu-qaB$6hF?Zq4+3wqw&Qn)0~Q8RW@f#of29+&twWI znNnU*Q?FD%`l^yDmQ{O{)15*Jqx}5}k=crQzUhQgY%N?NPp7fs$I2-C_@YL1ScKc|7(Znacq#C zjXR3~FU$3DJt3#d7LBrMzJ}=l4ceX!pUEn?VYtRbUj`yr?sQDdgW2Sn;;smn z=bT=C2IWk7`9!{Z2XyI(z?GrM(lsss^4;gk03v!sXl*xnp{tbat(AOypx@M>C}|jR zC@(Dp!TtZU_wUbbIbf6+(CZwy;mV6jbDsPXrrgC|}(}>^Ka8P?79_xG*#FSrx#K#S8`&$q$B(MqJbK z!J*=fx;SRgp>qAoHCc%pCD4osG6{I2;N*jb>XKK{heLCBke z(M*-0+OLC5X~_DVX%c|igH;)LgyUxUPLw>GEvp<}fV)@LMbqiFeAlWE5bM13G08L6 z`(j`2zFWIwAoz*}sQ2f1D+sXoXB{v;9*>KbiS$BoQOFm;UOH+Mt5$q9tS|B&Y;t5MDqNo<~%{%{YdzWjVjQE0%@4{+jLf z+s8W|1`ZlVnE^U3Asv?u4H;_{Vffg4K!P*pabSJU0tCP#<>O*`40#&MX@tS3)q?rwr$WmD=6G-_W(p~m^VVkkj^f5K`^z>XS#+G|o%29ZTEko`jB zPefKg8i9mYj8XKWCzaS_wO$r2q7Ev8;Gt{-s*#5MuQBkN5MtU-(i>n*kUnTGx4%^b8zNSFoqO-ta z1jqnA7z>QmLqK1Iy9(vI4vHlN80|ku6%2_6KjR=o6Ji3JWN#O%d*!`#9kx92o9VW* zypqtzxD=T#79t)G)DemQ{RP6an+MeJ&w5>QzQy&(K_WV2LIVA-=j zc{Nar!`P|i5Qyl6svahquhi$lO;lQg3l!C3qgQO-yX@{PSzr)hE-*|mU$70fWXnJp&X>i0 zFZe<17YZr$tr$cD;kC8qR~2#}8f=-F<~>~lAY%CeP^nQij&||)9*p0ZOOGg~DfFZ( z4?~DF*wd~%0IskDwtpD~&czh;`lo$}8khr|z&1o2gp9KbND^uHHhfaXT`R@vAA&%V zyH;=(188P7FeKVSipo1n}fq=-V?io9~8x8qnmyE}raZMib zA$j-YL8ntp=VMeFlm?Fktgo<~)Ogm6j&dzy8-FD7;e6asAJz|>#j=?E!?o9*0 z{StF+=b(^26C-EZ36v<%c(E@lc#R)7+`w@HZb-mLmpVa#$_j{~K`8-I*cTD~MYD_4 zN^t8U*E#Yi%qwYVfckU#)EBUwY}^o4)@)0IO*E7<>Ig{Ga3i?5W`z(ya{~i> zLG}wdfij2>>S+S3M0*TiGT;5;nXit1G2o(gih%>hOq(F($}ic#ny=u}*{E=%*%6A! z_8?Gj^?6bRNT1Q&Vz*mwnew|^KJFGD0hiI3zeG@9#}Zs7r0|>|7+9<)1j9$XGA_7( zOhLfv@QMEjEr9OytL-Wpaw z+_7l7hcJjJ4F+OHGSRdTDKJD`E}8)wn`?c32(8j*0_h0KPbz!R?R@!II7T)Gla|!d zLB=-#5W`phFxU&aTUN;6d{Mz!u^Qf&h|oV51?is+=k&_?_yS_mdT+gW&ulyW+3bS< zDdKgthl6y&0d#udetiLQ3QgKhf0B2DsR617S;Go4+bjgOp>0UGh@=S=y0`qNs|CrH zF2_g1MP%2b2_V~w0jX+gDq%Ug8HS71(lB14xh^&s&sm8W%{yQzg# z#9IlN?f3J$54<`3l$4COqw%5x?r1W&LoI*{7AYYSUc`z72w5x+H`bT9!;OXV^z3qcfZshXm$Tj7 zwkTGpuSOXgR}6G4AhrLZObF^^1j8YtEgPH!X4XWo7le#9V-ncY^kfM3Noe3MyFQVmwZP>!sxSjKS=!?Gz zqY1P-yW(xdVzYtrOxqu0Eg&0aAa*44-0<$o~$?P<@)_6 zzdsO2v;zykCHvDb!(rq=sLcxMaUQ1hC&e)C;mle!tZv zAJJ_9B0Bw)k4kphg$MiW0llC);>f+0I=LnQUqMh$n@ zfXDl50==L*gY;ND>)#fG4borpds1&r#Bg6VG~Uw+N9{J z?z)SFOTdGC5$q+Pv6)qMw^&lLfIy;kHh@bjZ5IL7+8)#kvPWpYp^0vOO6+HNdTT(c zU)H2HN#m9OWE8YK67cv&I76f=fhU0nC74KE;a2?fVPc;pK)BeWCXg5BMN>Uq2xQoA z<-qmkzqQt@yGQoN)g6^`C4?7wIuDVFVw#<%9+!U5ItEpbHH{7osssA(>%~eZMyZAs zhKdywK`^vMDR`ec89f$)s<2^=QpTT+iA z2FZlP`(qE0L*4AnWIJE&LRX+1EyMzIR`-Nd5oddz09>Op$h<WC4cIL+O7#94zmz5BMU~LHyC%21()4n{R+bC)Qsh(ma^pNdGGsr@zLB z7cN6~pyLC`tMm7mK*om%eoZL10I>P#h0hwcH|)w{Y33uuhUcpncdfdxniy;=umFXK zzR2}aQ6D}8?>~yc;a*T(qGSKx7pp?PBDz~YJj~e%);H0vOPH1diBCEZg&L&`q9{QD zp2ICOF4lL&Zs(D(pM#KqQ72Q90>qoNgbIkUBfAn23K+#0jt=HOSgh`KnzZT>w|ep6 z_*+51XrC*HjXd+O-UvzNrAD?>GLV3=Cu$5IJ5}S1IY;aIj0Fgg*77~~PR-sf<~yW% zxaq`VP_9?q{g&pGQ%EF-o9*Hw&j19J+?69TlmPr$%y_xB?>P{F*unNO$qaf9IG8%m zg?T~r1DH-kXHkgg85G@J7#>cD2Xz>2&wAn_Zum+7v!~vdsEA-21$*CO!MV>{?2j)X zCf$=Z+yn1R+!;Bh2iH^&uKgZ(bTJe5FzBT$?$Zu?8zK5C(0agy;R)0iE0_jo^_{ZedK#d5ZsKd$aR zfEuvHz3AP6*}7S~U$ zL2tHSEQ|8(2JnPml>(bEC=OmJAfV(}2^9BA-9ZBFWnOo5SZq0ru7D@la0{D4KykJ* zh7GH{dypHqwrOo{5ZtJ^@g5uTE+29%Zk%cJ`Es@v<$vA7X#N`yis^9(Ss&Osvx8s5 z9Rkrpam%_JXx#Gd6I%h>^-2Xxx;`OkBj+F4!L|9)dtapg9{upYL?Ew2B@}oUsy@B& zS#xHW2q6Udw!cJiZlmD58*o1N=EoNhlWrcD`9gl%xjnGI#AR-=Q1BiYaDETWk1rr5 zU7v4nc4?n@|BnV}V(p=@W1zZK5W2#2bj z*G;0s7xx}CcRn#wV({)AR}}a&nIK|ac3nC&-+5V`-1vdgOy>w{TY2XyAQh;n*>IeI z5MZbsy)dO+1x95CK{g;9u=R{rp|xM#;zRSW>h=N^w-Tc7|fXtn|GYbr|G zy8$he7|gowj66aR>*BJb4(Abw@i&z<`R1|SwRsOC$MYYi1@%GAsyaQ0LXFEq6hkRG zsdlI@fxNVV{hS?i_ywdY$QiJgNDYO1LQVupfV??)h)(S1 z?VwmLyI4)@B1I?DgEmnNuzn`J6poje3zr{MHEF{u3RY8KzDdY1Cm|gt1ErN93%^#OQ zVrSWdEB>*wdbjpY*zVVahwCO9xdDF^@7QJwp8h4`t+0IdCX&VYhc^3T^y^FuE6N9b zHErFDI~nAGR-fF|+E`ZYpBLM^^-7izD5-i0wE>`nT-pFOWXSr!RXDrm3^Kwa5NmSl z(Fr-#6&QD^A8h=v?5LdwQBkS<3J#?9m{gwx#5(_aNIVun)l2%L~ z%754E1cqI!7Z@?@Ry{O5Xt3ye_Sgw>?e{2BM+eaoylVuNg!Sz$+?#3kD(}p8k8d~g z-43~`*DQ`Dm^$qD=D)pKZ-03&@<=WIR!CY@f}R-s1al{b9O#m^@JhA~qXzgMXV(CT zs2!$6zgT@#*$ih7?8psQQtW7;9)s~Y#$ckI&k!=@kaBC7Z0{f37*K6ojM)F~%Tz^n z?sX6#!ESLd>2THZiDS&W#vxX01q4WXM>mYF)Cy>erFdOsx+Fie2+{qLI&dV$P{mLUBW`&{#r3vF;WQrF6B06oDk4k!&jgqv~ zJF%8gezNpnyY3|rAc}7glfLeFT<#a5G#qlJf10sfZM$YiSMZ$JQy-}?3J)^&d}yFx2N9xu=PZ)czK;XOCh!`w zB@B5F=0V0;eJ+;AM1TW>i5eV)n-`Dki5XzXz=n)W3_ywB_-;Pkr<+cG#}6RFtf&+N zur#0?3F*@C5j|FfqSixZTgWym1Y|^FYaAI2hNq{AbLo>N7!N1J05Dk)2GS-Aiiu|r&;yD#I4ms8*ik^GvF7_u zP@q&kY;4*WF@Il(982n|P*w#2FRjLU=7_J%&R=hx`H6!>`D+ne(h@hU?^DcMs0yQc z5B>vLya}{~bw*GLW$?yOvHaaA{EJ9wfLclT{*#4=VS#4JoK zSPUVCEL1TO4R#Ro)B#I2Q5}3rmP(BG#T~QJw(`L`VB6@=vI(coviCL4n()v-v&Mn) z>OFglDU4K$y@dMD%Fyu>7xDktJbHmg#)V1QN__sJ7|f(Q8;TG#LetGX&l}=kOB2AJ zC^Tf$sL&*+ER!Xyq;K5N#R%0wswGc{MvdFB6Fe(UYdL?|R9>gsh z{PcdkD$8wHKj$XGf{ea?u&@I6aq>-qczL1ElkkO{1DSdo=b$5ONdSK9?0avVl+z|; zbk1oL31J~yZa&N>>(=@s(@pOSYs%OxV34ugVE8m+gH;il#sFj@PbMnDPI=$v@#3-L zLZ;s61sDpkSUg=H_TgE*!5lF%JL8q zRwhif7t5t!xV`3%gTZ$3ezEdz5(&syrU(*IYEjglMj|I*$a-3_#72j2wJWwCMNwW0 zQCDn&OuPuh_`#*=AbjV)?YDD%70v5q7rXu9LH4Og{R~| zt6@>wXjlYwoZPr{rCYS_1Ok?}Kl=DVRhQj=yNS#H&`bz6zYQwbnkyix$s@1g{#R{MIgYK$SkMVtv{PExKzGe{Aji& zVg;9jiJKcFUVUyYGHFbsgY3aQkv)_#<1xIfIe@4P3@&=_M({C9*C^NVu_#~eS0$i` zaSo$Ko54X!fzcin_m6kR!hy%yfl3`|2OafGWux9~U#xcPEnG!vBEB)GBj;y_uW7K@ z;5Chag|1-@J8^3X4Z9df4p8}>ZyrwLP>&T@TCWun-E*G-u;8* z=R}R6Kyhz+F>LUqu>oAxLwL7#ID-Zu0x_9egbsB-xZdm+JO=9Ba_vRQ3u*%iaK*l> zB;rs?Z3rrMdx3DVT?XOC*<|W*Lm-37-3JubpkW)4P;puwMTfMf0jz46=<}(eN+GBy zjS3;gMys7+4=nG?y3Sr675{U>vq}q($f@E0!-c6Wh!-gLj%pb3Ytt<|C}eD!UvK9t zc8K9Ieoh5U0xU`a5cqho6NcnRIH8a)g1sc-#N0|@Q2}BAQgUP%KqD?B%tfSQ!8~Xn z2n=8aN_gm3RdXf~4i%rw5JblX^M%XCA#re7uRWWyZEd!kyCH8G`*U~xUWQ~aI4vLd zLs%p(2C3oHp?db~T%-oJc;Y#!uh!e41hGcV{}k~)!^4R&sbpq&aA%j6gB9CuZ|W65 z>{ec3U>mrEfZB8cqBm@ff!k+HS|EznPz6?dk3 zV9_(y!=!@6UKR!m4ksR1QZ$%Eq1vvdw=V?@EQtjR)8j-{X;eo_oe96>r{shN3-d$c zqjS5ev_fUJxZ)L;WPT=I0;GByWtBV$0Y(XxqyYMdWJI4f;UESYTmb&NpzmI=<6f^RMOBv#Tx(Yy${{j5UEkWaK`{ zgH_%q%Pk**tj$5PPt9XTIOh?>>mq6z_`S{_Xtk7iQtCHxWstGmUzsFuM%Vh;v0^ zQ380;&mL$pWv|JMxZ~C+&-=5V`mdp+xa`kfp2XeVwkTF;6|S-PEIs+g353x%Jw+H$ zoWBUe4y6&TI*S%h6yBAs8I=l-yb&qt*HE-S)(AcgRZ}!T!BlJJ_ZJAyXbFt@a`9Ha zZ`_yV>R!#v)(3qH5g%tXg8vdO5c?^@bGn+3-p5O zjI)akA9o)_%HlataMJr2)lUx#@1hL~)M&K7zd(2f`ebz+>X!!)-8T=D?w<_~_tAlQ zLG&Zk*H?@Ehe`3U;b-qAe9aewR!W5*kPa&xu;pENT$4z|UDc&fL`OJCg&f`p?D(;bAV!|OB}pKqia(&&B}_|! z`0g?^Kr{|FY6#;#2qIDL$6h|kx_m2uypLtdB-8u& zQ0(VRtV~Off0Tv8;CvwnWL%nA01-@i>%tAOLM$|7J*I|0!eG=Ns-+LQL%H~M)#m$R zwG-Ly=bPDD9BusrUcS250VwVv+x-@|Q#eSLxIdRH@0Ana=wJ7rHpOcGP#mdnnC_a- z#eY+9AJ>cfqs3~m|MsXOJWO}R(H-|S9sOVSXZeR8jwDC=L&=auvHH4X9NkX4FSGva zW;mSn2l?w(KAfl)|69waiZE6Um0do15B%)~Bm8IGt@k2*!<|Yo_OB?ZfBUu!Lv}v= zlQ~D7aB$t`5pT!)TO21gn&!j)v&DrR27a@$xSQS0cl&?6{iS4^;g`d4^xY4TfPQc= zWkdf~P9Kh?{_Fn>^y*)ZR*%c&X1}d5mxMMm20ZU)m)(5Ue$&r-oz|>7$lCd6HW>`M zhTbi8kU3GZUOpaXt^8m9<(@6x#qwYN#c4;ZS&zs8=5pkWl@fO5{r%D%!m6=yrSLUT z$yNL>|L13}S&q0wcbhrmLU#Kb_s@`wN@4t;fBeMn_Hp^keD%*ag@{}J=fV9%TeQ-Z~pTAH{XAM#NYC67w;>H-YT z-@Wn+Cb=El{-PZ^6Nc^XNqn>5f0s&MZZ>>>`W^t}zfGSF4RP1<-^KWlovI#I7PDV%Hn+Ic?3`73z+saZgc0bu|vf1yCHr2lk zjO9|L+-b4d$D=rQ3{w4d&1@Yee%(6zqW+ww^r8e9-#vGR*jq%Lhz@hWK58Nq{^vc2+T%?gyzn(N`~b$ zHsnbE3@Ix$qqU7xHsx}4&!^@3{J^x#uk&qD#>qTc5v4X*DXAOvMc(ZF2odGVX4GeA z!Cu}QjNVimM>cA|%0~I@a(Z>e3|mWuojrvTpxzRD_)n-RvpYQ9&EFS_Hm=YN4F>2g zLuEZKR{QhQ+1~g%N1L@&5zdyOkm$Y`QEdn7P1DznRZLeiM8C7=wSNJV~QBcl@%nO4xW>^$%kf*=*XEk#erI1|a3 zgs}P+7;lv({~XO9)HCTjye^*5Il5DTl96qSuTp!+PDHZ;^&_{|*B90F?o$4YHD6o7 zHUB4TxTfF2KQvq#a$ODA^d}~9_Q6)7r!o0yNO>7c|DRL@nD&yY>xXDdfgO0NzkT;( zB=hPe3e-Y~@dRbWc#}stq_gb1{I4&6R*N36Z!L9d0lC(JkPL9J5pLRSUmmG9^OCL$Ba;G}v$?I~xUY?k{Vga=*)qFaOkP#9= zCFQggFhA(dihDSbbh>)U#G|@FuJDZ#l$p6rzJ3Dkn`q%b^^lt`{e+3;S$lW3*iD1B z29H0&?)uM_`u@ia-r;^p_kVAT{XF&Z@Bf7E|4yDYkI%gOzvE}kf876lg`ac(cbQKz z;POxX`G3pJANPXHWi9gA?(r=TP&&xvA3(R^!f;bGyXx+aL3)c#cYS}km=ll%Ynf*go7}!=S7JE7Wq858wQ8oF6OKE%i?NIwEs~QH)2-JcJcOcU+^ahyWM5+ zX}!8<^L=p-TGG^V30u$}c4ZqKX1PK4E{l~ci=n)TYR%dD5hO1_bM`f(8;+VB9zHzI;A@BcK-r_Qmk8G?q6f_|(2WRg)7I{kM3 zdN%D($9Y@eC{cg={~k}j3(Wx)@+_(AGZ-iGMYQeCY%T!RD|R0=q(382&chSmLNyKq zhv_yn>*v4eICGKeL*&kk2bT;F9`|g`^qH#JrJ@e!pO)+SJ$)rgqKYEZC~jf*PNj-b z!M4W2j&1tYdi%?JZqtco|KsF8YoP9ev&J5J_&G!M2^yo+q6DXZav zzR!Onzwg+88i}~e3!jMo#0#PdaiQga{E|YiK&jb`_*c>8&j`f=<`Bl-o*78Syf6Ku zT5Qtd5KvkWg8hy7;|@ma^6VhnPe9brMt$OcbbF{0h@-!y`0iqby7+d!(cYCEhL`n^7dPyMlng8kD`~y0lK2$U%k5psO z8YtD8=#n$(!?S9|^tKXE9Kyy^yaD-CIL1^bFF#9o)4~LM85D=$GFc{fDScZo>d_tB zVLh@K1x*Eib@MG3RCP513oHdDzu$eBZ>{h12Yi?2a?qE4O4tS&!ebdD9sx(h_I9vwNstR+qFu0TsF`kFUtCq9JC zdr%=7Hf#(c2al4R zwGA9dRA0ZV)!f9lHGAr9^tW^|m9M1#A+98G2@-$DGD~gs&JfvGdD%hODNl=macvdq zXWKD}hfCj%u?~whY#9r`-Xjytz5)7fT0Dmibc!-P4mHkUJZFbf`0@6UX&ZeVQCU{h z?<=T8OR6%Yto0OQOj(9hO*soaZ|j?|$yEwCUeVi1{y-BlUS*e?1m-#nAu5yWkTUj+ zvjYkB>k7r5@-Y^NWo>*hftqIAKLq;)1gj0czhmj9w0h?Y*9qa}sVpDw=d)jm?W$PL zmh;Ee-G`^&#KL47Y}97${HoK>na$aswL9ZsHfi061SdCHzunEbAgU~AH=FibH^iMU3=iD;f;|KRXR6**duadm0Pmgn#gSvd^1?OM zWfO$X6Prq(B+M7&X*H#L;6B)cExyXC;;7$Md0jsfd|`d)iXjT|9_AnHLpA*r#5?r| z@*3g&cEJ?Y!|NEJH!(mzlR$6TIpUXKdnFXzU4{m2uH z&uW?##H zgx!WJ!DnFb5fMhRn8XDsLT?``cc26E!mB!JJt-HKze;Hw+NI^Gm!~?gJW~+;sWoPp0CBf?hC0JGssOH1dpF-V z2;biPpS|IsE}8qqZnK=}v`43C5o`RAOZmNUGOQd1-g8Te*HW_uY{&hDW^M72vnXvy5 z^Z0C4V}04igoSkkLLR zfyiI@FnbTQ37z0*-ol4j2>;6;XdmXkK@E=|-`+1iE_jNVZt;;Pgo*1ga%`=hd_#p% zCh9rU4x$+HfLXtk1VHY<2XX*8Gl4%e%U1VeCXE8h^b<=*7MiyyU~#J|3n;-!nbpvw zL%HrTI%W879e!kwp2CTwP?v}MYA!Aw7CbxZRTZnB!U{sj=1W`;ldlpMB}9Bz1WKv| z1(L~JOy~#?wl9}oJl5l`e8;c@UNe+p6GT7yvz7Sp9KYd#P z{&sOblc4|i{~rB+s=s%-L$=?sKif2Vv)7771-h8qe>&n|oy>!q&$o9Ue70tr^{>Tt zbEm%;+-(=TyN`l3_20AKmIW`je#EGMQ|@Snm|+32K@xDqa#ti^9V;yRkZ%kJ9oV3U zbiQ(ErZk8^Gg?tfsX;{W1zau57+_lF}9o%P+( z|4)$nmiP0oM)*Q4h1DVwB67J#6nJ~x5SyaoBWQGTwz%7)o2=DOWX_fYW+ z_T%`6qs9+M?0=8H;{}C=oXk;~@pboM{kXh8nlFEyf7%_rEsl5=AGQG;%MC=EnA=J{O zWGX#zU@v`_KYrusLnjiGfRI6X0Bz+&0lvr#Nj#gvKt9To7S z?WhDnh)<%hdK`b_;$gn|z)qDQA?vaxj^I_{^a%$wlgP(me;VO-SjG&46^TIHI9#u|9pI9V#sV;S6Q#qeKYG^vkk%G$YW=e_p(mE)4!f&qfz#Tomt*6 z{T~D0>kMbz{5J27Df;8-Sn-(Xx#Z3M&ZP}-S2F} z=yh5CNZfrp7$?oC3q8DfGw!sqE}J2@omMXHV^x#QvvUi4I^{*;Fm8?-=N@tUn%Ba0 ziF5FFK5mUV!wE-l+JV4TN13HKbUVs$mo>{jpE{qFbj3}xrs1+K zmXna$kaxN-D4jb%#w@S_pE-b6c{Z7jau@8v>me5=>z=58JL)itj)OgSz$SwM;~Ye%gQ8AH3>|Z?3e} z@NryokcG4RIr|^4kGE_LjnwnX^HAbEYaSoFO_VH(fiEE&=M9|tV3;w5I%{P^A@{7^ z9?2CUP@8AZOw?g#n0NUm!lln91e@kRO*XUpv^8B;9tK#R9WqrKOx$Ch#c*VLS94anS)dJJf1EyAbOpX#r!Zdstma8nAIP}>6 zx+}z%pu!T;Bq)fQ*X z6Cd-o)6NHMlv`phu)c6v&?LOhNfM*M6`vmiHt@2iG!=Il*;Jqv>XC4V(I(LvwDVSg zf;+g9!g$iw2Sys-)r{q+wMRW2sWWJIt~zW8*+l7U2^+)TIJ@wN<%;_q*}j+0mh>a(?Q)v~(m^s~_$ zg~V}AFRaz2wVwj)by$1MOsx8KdI2mdE`z*3m|pY8gtHT}106iRds*A?hV34I8zaxlPl1U(!a2Ni;wj-AF4|Q4oi}r;?JFn80@C zuL^Oyd0%X{#htiYoi7*j9kC%o>ngbRboZFRrrj#I(T{AD*8Gp2m2ZcwRmMI$c*%{8 zpNnSMaM)$19x2ykFK{qZF0vkAp?FgFVnd;^15(@&mMZJcHR$A&(^pqV+t z7C;Ghih-4NaJ$_>%OHD(!ZWF`nWNA~S^t{bo97rf8?`o9YNN3x{S1S>%6$P|pxt9< z@Zk-QA+QmiV+iuppS z>7|MEm|E?OGwzIlNuYC1lW6C|2{UKdp}y7W!bH$nXzWH^wqvkOfGZJ*M0iTJ-}JLy zrv;;xWi}dhgqQ9#u%-D3xVhqiq7$JzP^C6NOYRh%3Z0QNmBW7HoQElm*@ENLl#f>Tz&^vm zL)6aO+}LKer8;}?Gh<1i(WLs}QE=CZCV}?HHG{9Z+4a~&KR!PuI8aiMBZ#g9O@~mE z1|4c0YEtM@u}Im60ga3<8w(k*;WY)?@VDosMbsgL+r0iHCF$Uni8Eud)%GlUoWT{Z zX@t%ROE0TyB+BjOM{)f;lO#Gy(rWV>Gi%j$Ymr6*Z zAD=xZ1nQz!Gs7l;3R5|7F+5aovflx0+-7&!wy0UdC+MKkv+m3>E^v$8;X;ifMhDdz z)>H_H1V2~0TPr}+mrV3dJsfnnBca%d@t_MK6iBudDofN$27^&v0hAVZnj z76DvuhcyXBD|)nV?vS5Rnq-K3qqc!A)_?Sxv|C6Q6yW`7p%0(mSXuv|Eq z)V;BcdS@iNp1>L@>rV)<%cI21Ye;tm9#eLaiCArgplUd#tRt9?8e*49)GeSv1=z1H z5>7VLeutYE<@tnP(6zHs8=JF9zN9kvq`ZF<4-wjVTR{7coM$Pg)p5@4%89ECB-)y&Bm(5&b4rVIGE9neYFCe=vi+8lDEzv z32VPNB}PG^Bf+-7pqx>IqEtCT4YDuj`Y$uz{ZigF9)-m zygL-WJ(Ne%nc}ANg zVnjTL3fj>}oVGzyhCt!M{;Av}Q-6Pj(e5~IMqEkj@u;c!+E34$K& z1Q@^Rw{Av*ei>lebVpW@i@uuuIUfyX`Y|fo)&`@O(hP&|uTGjNi&zfpXmB|lPx`<< zb#g*c6M=+=OTQYb6Ke7bw90C>v51(vsxhW*Fnn|x8m%&PlxsZ7rrVjIt)kPiJk?@| z=&UR+8aUS$209Vdoq~sePBn=j`eh-Y_xz>MkcLnfu9{^^6ebS-ya0{<<1gB^()9N* zdisO$^!l-n(}u6`n<;n0Fvp(vAY~8f^ac0&uqWIS?)mG4Itxcp1Y8N!xflvS1__(g zqT{DQ4k0&1%5izZ&anKW`Q$MhPg=8^w&z?pKBvqUd7S4?JoDP8~FC25#6h;xS#9p;4 zvb&(R2`kporRNR2pp|;5thdL}K*Y^?Gqc7`mvf!uncip3l)X_A&0mX^8#9`hNIidWf zph4Xo*og@=nTUDjg`LYK>{5!>0Os^R_qUJ~kBv>r*P&$ivWV4H%7JUlsfC6=#OG-C z`Ob3DpOLZ3V%o4hncqnQc=$oUnQrn_X(Qt%8i4$&Gr6haY+X|E%b;ANRq%HvQs8+i zk~}z8dwJ!30}gUz#2?BU?$J9=3IK!%`pf>DQib3hsNq8LE(ua}h)c}3Rmh#C%<(ud zXqbor{m$?d1s9PxE1Ou%>V*gAD^eccM< zQ&!8X>`j-u1Vc2a4U*xH2AwbsYJ+^$>7O)%6sRM2JHMP>Gt*E!JK)7`-J5+Q*WEE4 z*+wOxvHvz0iMZWfTN9?^{yB@iZ1j>xeTXcrGEuP0UXz@(0F_C04H6+%p+Q9bABX_D z_Uw$4?npJMNiR_`UD~94lXlKd>zwG)2yi}DmkH2AHir`Zo*yI!F@zcmHU(tv+c`H$ z3dREvf*5Kypv2SzIEWa!`AK3jX0kPCmlq5!KDzNqd>-siV57U8nrRZVyx0RM;QO7V zU_>eM2os0`I%O>ntzI?dRe?h#a=D3@DG(R&o^(Oad_nF|3d~mj(!;?==c*+S9b(Co zAIgI+K{GIA+c{5s>-UD*KP^mDB~jOW76s|YfjA&8N}N_DUKEUQt!{@{OfpB6snPCx5T8KDkf)Nx7y3&^B&Js29*O~jKBkYr#}v1Eln zXB3z5oI(luK;fjS)^gfvc#X{`>QG`LoLTwN}RaCK1Pl|mqxMHEU7@v-zSjPEv5AxKU zQ16a?ict!NdX)^w3{x;vjwqiDtze!fsDra81@k;XC7cBn%<}|oa2BUvo+qdRa6Nzu z=6RA9NK!D*g9k8m;21jMFLkboI6aPMUsSV^gka^JvC{wABI;CqjwPNx&32gg{a&myuJ#nK7gV_O8^J?k0e!d7IiMXW@C7oq}#*{3UC1Cp_<6&k`n znUp8B=DdtoK~lKe?WEmks>EC73p)oNPwAt12u~5} zobO2o8Z9#Ehs6kj9h<$~e6PSP(zb|)5OHYc+XYiMT#(m%-UbJegj5ds8~`R$WsPtN z;jU73p*&)!gTA%6F34DBul~j>ksgJ!;YHsX8_ETxmG!1znwm|sFVCrcUtf|BUI7=4 zT5)4$#7Bb$R6yqU*Q@dZ@HCGaFVj`Q51f?v9*5#;F-R08Vj!Qi@^YwVOq=0=Lw zve=G}f5u#(^xI^TpzD+6@$=z|A63nlSDl}KhH9=DGwykcSD%e$iziAMfx0=q30b!fJ%#y+MXK!Kt2jMrd|;6$zyP z1=t{iY7mAE$~3!F*aCm`$Ifh-c7bgd6nBG+J5jr>-1ezWyFq3Tu+nx0$>7i01b)bVXpk8NtRDHhe}l}0Q89pE#s|l` zL5I~in@>2-(@l{G8cyQePEiQ=KrrEpy-Ar(HZm@JP6WSX9*jXxM(X=!tC*S3Vr?pTL)LVyKs{_OCq#j zBcMs$8kg~=Z0l{mV%x9%h)R9cl*oL$2qn|`>XXCs(IMmjm#$AWw25NGh3Ei!=s+0G zmsFbJ?CYwl04}QZOvZcR$8NM(z=m3P~2vlU#wYk z{kyH6JXy|Q7MZ>qx8$~as@p{-Z1vnw6&975c1vRBi8;P#o+=Gprfh~RRQmQuvQkFr zjXj-uN^MqVvQv)|=)4m2!qIacG4k+tno_F9BMqOfPbnw3SsoTgkIsQ2>$`F?@;sTf zZ@Dqs22ataDee!HGQxFKXroz_RuiNLhfxDegKz^i$ZJS2XAytK*)1he zAs9=AA1u*`2?YIe+Ud60zBuUR6F-K(L0)VkB!SGJE=g3H2uaOfmR(+sr48ngB+hp< z$+BQ5OcpoD0%Rwnj_|R;WO2hFK-Qsyo(2&*W&tIa7E#4^_y!{g5W?ePC_?swQ2H7{Y91+IZ)|~QHL?wldtxe1n9>H~a2jVR`HldR)`gNu6!$am7Z>u-#=70P z>ewe~@o32~CCC64IR7csf@`6ih10!2WZYsuE=l5!93z>(9(Fse4oNofNFpFohZtVP zE@EVwE;T%EwF)j$nUUfCk=gImj8m^lQb;xqcHrlJ73o_P?s7BFzo|V`)vUvw`GL0K z-R}IvJoX3lPIdjt#LIQ02;VJho8bEAJXKjZv;qBdPUgl8lLYn8IhifflR|4C%H^u_ zoqVhv5<}EJ25yK39qL{y!a}hrp;FYAunmu@D!?GOF;Q(~9XcE&Jhv5p9*y+Yv~O*4 zsM<+63ECu6Ej+Y*xJ@?6qR=x3oYrT=kt51}vS{H)1nNv+lZZYNjB<7PEkhBmnAsy- zW0QP50rf&$t|f{pxr9@yI2!S)eo1X(+aXgOsp?Lx=_Rk-hERkzZ8GPP9iJ)k>8P5_ zK7W)c1rb2lNy#|nhH^{#DBXCko}A(>D`mF1A<{v8l?C1#cDf=lyL`LicziXr8U>bG zcEufw9Hsf)R|DwNum%~6=aY$kDNxzkSG|zO=32^oi->fr<{BfzFU#;G`ABUtc$xQ&cOVTi{?ZFW%*Qu6 zjjyNPn{;RxK?~X#n`AH;mMC25-N9ry>hz&Ks7a<&^3BNnb*noai$J?pXAEYsHHoJc z0e4A5>{2-&*=ecuQs{N*T{Y0Coz_ajVbFkwArQqBqSUNtiJ~f~<>Yq8MT{;!>?DmZ zb0(Onrp3pu?jp4|kw7i^XLA-jC5NquRW@{m+8 zP^?n?O)`0Z6>APqhIf)CnZREtK(58W@TIG1>t@`^G$s0x&x99E2dJ3BO7Tu>L%z-3 zB@>x08@L>8l8Mx!s3Jp4*|_E{I7kx{LAZ{ndL!+W?+31@on5;vMs4C@+edKV7!H*Acg%2i8 zQ)e_&)@f^S!!w>$&jXEMC`~ZMoVAQIu+X`=piXLBUi>u8+Ftc0bEL=;X})PHE9gzz z*Ew>oZIZ>)5Q4fm2iWb1bG#;CKYDhk1cQ>RoY=@2v`MBX@!yT0SV=4RMh&J<21RsD=y8-lS-u)<8uH-Ey0dogiO>(kC;G z`6R%z!D-slsCc5$nqObGIwjJ99+NRV{_Sl=kUH?4QP#Oxi@ew2&yM76#F%@iE_t$0WQ^=Op6fmd46#Wfr1+rdk&3Y2pLq!@KJ_ny_+ zgsB*|CV7b+9e+{i1CmD@fipf?se~I(bt{pd}E~UgQ1DEVv=pWe4&eP8;H4Rr8 zUeM)DHJ-C;KxE=e^IE5TRfYoW6lLF1#1Jd$f(*$72_f${1u5K26vq}G=P+jb#_Uo? zQ_0sI7;8x$Cx9-zRg!nuF=WAEp)|hUJG!0AQRdwF7{&&D35%TgFWK>`17D_+`C-7L zfJ@Y-g?okc9fV5&-i@A<=0;fwr)|k5#ieJEfQ;qm;e`Au^`Zff&8Gw^7D23jfOl)! z&fw|_n!enUo)*h3nnB7im<>JowYF%;uGe7FfAX_zf3sxmy<|t~yjwO44fwM|yv+_b z4V@ZA-66wzJt3n%NOA^~F2Sg4W{a3Pm0W66^oFDYTjm0pirA3I z{0T6KitY zL;>BtEfy#W=$38q&>7gNpBy6Ser>T4AcF4E7AGoC9GHrdlfgG-i3yQXfSeODLt3~2;4F7SW=bgNv@PvJh7`6n`^FiK93~ z3tem~b$S9RV%6zK3n}#Q;=!e>Ab}XV76-$ODMOSNru5IrBDU@<;!l-;1j2$0;atJU zxJAv?XO%+Hp`V%nB1Njv@v^>~ymWOy3#^&q=fFwB3ZZ$NHw@ zQ^Gp2A0HVG>narLgv`hny0yP#?6=szNBlAd@OF?Dgj0yaSpdj1c-TYn>7~4pnf5!v zE3DnP+@^!x&6BC};)3q-{B?aBoCx(io+kMjO8uRkRTC>8X17 z2S&}Dko66tf}6qX+LM!%rHs&pg>gc8k455{^5lZwHl3WL=zv#)(Mzdg)a`{%r=adh zAuV%~q6d@(HRy3~^H?R-#xA2y$ki ztII&#)X8beBv(;uo&J!GcQDN9gpB92XqC3EnV-4olEUvuOj5=hM~YbdT`W^R@aj2B z(Lm+#u3^$AIuZ29 z2vVygPaH9{o25fz(Cy~_ZHP-Lek6Um0IdYB{5o?0J#+|sdc>@td`Fs4pMA(WI;aYu z5%eKd%mC%x0fHe%QUp%{2a-y45km=g9laT|DNrU29m=?54;^(D0rN3}8`Mj}j=3@; zZh6@QrTw{?X0P&&rkC_6%Av3IpHDOX6}-!HHC278(OYV#e_Oul>1E@W7^h^S6hkMD z*ndu(yr|Ww@L7sC#mz%9YWFhe(E5xr1EEBT9d<67l$qT0c9azS3z3EPI5PMbIJfoK zOlNj(8}rYRCGQ-32Q8WnBXe@QywRKtX8fgBH`irCLGGx1pq#!8XVAUPf%oN%y^`1|k2Iw-lNOu{Co049qFUs~p?2-vp02+uy$?A6CdSpkR z>=n#Xa;Z5<3qD7Y!Gy5TnleCpHn^IdAX2N5ib=*E*f|JIk||GqeUeD$DK*Koz-Yid zX);Z)H>A{T)3{b@Y6m-z{<$Opq2f7YEL11`v_k|nZk_bgBqz}xtN}9tg>SN?297dW zQz}Fe8Dz@d)wtNgrA%CBh8T&Y9SW$Gi=_?M_W)iW9m>xSmO@pgENO`sBETS3=GXH> z1m4B94&D$wKSVrUQ1CEAHW$sr=r#TlQzjVfc8wg6umyffr?!eCjU5>T@%YGlnE35z zOz|FVdsz|vWwlX2JDig7UuCF*{hVRY8xHzn2(#hP4a{>$$D2HCM-g*P{hOyr(5DuV z@fsJiUTVToPm`neLPbS}otd=2^oa)1lq<$@>n3kc#bi)q&D(UFX#9B>Ac_be<+4%b zOzw7CdB|`%C36)S=ANR4O{SFlMkfufNWNK4R?XsV#!gTrc`|0hAy;|4uXq-iR_>FE ziHhN*)J>Dcpy;_rF?wkFT>0i%PrNa2O)qmSiPULQXoFP(iK+CVd3-gdQ8PuuLPX)& z*`#!UVEg?(2S#o~aC*zq``0o2zVY5=Dh|DZ=PDXknUIKUG| zQiw`f%prTtb~~Ppf$hZX40|o>KKo9W)1>@fcyLAaY!TA_N$I)tfxpGuK;DU*CWSM2 zB;mIrf@mNvM4At>i~%#4uWu&UTMNo_JD7?HUGS-(;^NK)=drwD zGLeak6sio-$MNwSabAi;5ixyx4n8_AVC@Y>&!G{WSyQ3I)-b1p8juPTD64D}Kz)LW zfEjJ%prWonTZn#s6o(G#1+?juuk9V|=n5mHM1bQ8r-K?DHagTPn^K^jp`rr_0)ItO zt_o2P(Z)fiqaME@*BAWxAk<{20=Ad4QY|WQUgH%9(Fs#UWo@TTj zwkxq2Q4f$&abCkG=~IRcp>y(55v=9ylSYh$b1Hrm<rF1PD$1Q%;gEQBj zoTkWkz_u>_Py5kLb%sl->ShrGoeyNdqlNAlQ?jX`BY{&vIYI};qE+U|0AJwA}iB4Jg1SUJKRs`zQfAt#?xc;(>*k?1G+ zA`T4-95%hZWHw2cf{PffuCrd}dZ5boS+>PEZ)t*L&0B|nd2Q&>h^Sm4HLS?-Z#mIN}@y)mlYWoH)E?E2zZh5a+S8;;_$iYl;6TpVeV& zIK^-_Z35#_#weGkOyCrll$10;9z2CTC+#8cUcRaTa?5N5FirDmQbkIDB+Msu)09Gl zh@<7#o)d_es&?WW@i?_4$D+7b8V^NT^YWftJ(B{Ym}0@v)L~hqM1l8I&VIx7CB0eD zn@?)^F+$h_RcgSHQ?y%q74+4dCIy$Hlwn($j4_vKWXJhr!j>sky6BV)HK)P{d0aB1 z49Dg@PYU>hsKOrI=P8jbUh*HAD55mGz`;sUvgO5XRlaT7pN{!Ofp+2{txzXto$9cg z=R;%n(+ld1EFEj31DNVcwprNIMn@OPbrd?fX_u&zPESl%>AqHv>1`UQDy*_Z zGP|*ikJ2s#n+WcQn@)HT=Vg^&QASw!eL>G2m8np21UeK25%dgFbp~)_*fgT=PpE=l zl_hgVmIS7Yb2(HFRPxKAif8TP$3&6*3qJo5YcG!*`N<>KY|vzIzis7yB%VPahCx= zRn6cx>d7KwlIM?cD58rOq6o2s-*AF+r8n$!Wp)7~VxJQxG9wbBD~4az<_^svB4=W9 z11{;L1%zA-IwX^plTLdKQNoiY8D3+->SM!QU~oVK^&d(1aX8^^hOoW zHzbb46`{1Jx`7|(y-tOv4m#Xf1GV&&^S+8=%h<5OM}Bd>Ar3e+MKeea&iO6qC+yHN zs#~c_Zt>n`@@+Pljxz0Rj?#v$0P?k#EPKG?SDvAfUeMR%_M^g zx{}Cx*d7&Z!cuWNu#AG&A!p?KR!OAO7lwf}+C8R{GTG@6G$$z9cf+0~rO@{tjWiJp zBE_Et5QVP=&&Wrp`mwYqG2IhZ@GEAt4_;xfQ3Sn+l5&@wmU`DR#!01Q*0M>$5~KoF zF1!4CQa(JgNP%oc`!;C6nU^~@|)COz_sL`Xi|g+Tsl=~>c)Tb_`dKMRs$Ctn|fcI+AXL=$D#@v@(hFEUkDC;$CZmDB00Nlj~; zfFBC!&>>!tsp6$3IVZc6pg>fqu>TJf`HH2_&7+m~F7vjy ztdj}>rdlWZUex&;Fxja$5%Bxwv!oovA`V53_f4K5>f|)#X2~Oo>}RLc@-&H9E-jY= z{t(5WAco3Qxu=x7)`XE()p&LDu)hT*sP~>PvdMtbOPpXl_Mies@~zzrVDLlXJJ=BRm8GC zDIX??3|82{gb(!PPT-P+k8NksCwY&cC(7vKyhkeD^KeE+F;e5@H3|+{^uhC{d48HU zZgHhx8Qrrqx`8RC<^xO@pA_-#h9qVKP6x#-NEYWcdPn7{6V)>xabFB2oH!$2m1{$( zbfHSmd1;)(I-c5<5rR0S@T+`>HSU8K3v299N=m2-P=>c6Dj6XXi89K&*=w0JKn6Q? z`V!GHbId_c%eZRgJLvTJQ=Ca=CBZQGPdU$;?vH06r%5mKY;y2?r=Q~?c6T=HnB>G0 zd530vFcwVHAs0ObOmer=?#rxCP>nutsEL(L2K*3v)g5G$#yK9@cy?YR$>}KPm2b)v zKH?<^9OZPD^y05fB*=NbfXUS@Aa%>mP;K<^kn~clOe2Wo$AQQvIf`iVpyna-u?GmM z&*RzUV8Z5%t|rdwpx7}Y7z$@K}N3nxHW(sFj8bE<}L zNYG`nD}W|ya#$~}^gVK*A#ejdr|Qc4sUg`E<7Bydik|0Wvi%xOfOGvB;d*5e7sC{$%;l-IW7ri@X9F|vB}_N z-gn8M3PmnNL`YhZIn>a@3`wo5k!sUIkFp`20BI4mut}C6Qn*K)B&7xcqDX{E`-_L_ zWy%C4dKhh~nl}Fhc!VHd(7Bn4R1OQF&`w+`iD`D3wRqhZmn~imvtB;VH06{B7Z_#p zO2DBVNW$mSGFQAyEWTQus@-3Uz%K9G@b zRjq)+!7H|O#y6dzDnn{t0XZb2N63#r022e8k)=ee;0WQ3OVag4UQpf`m+)C4 z;ka-P?kG#6izjBe0qfih0H#1$zitL&jh}MxylL|&NyaUbSN@EA0a;;}H_@z5neb)# zRG#wcp$XaWWX%)kQAam_-4U>coAa&`r1C!dHlhMLS^o>d2wUAK#9U^TiIgfUHGMH-Ez}=^r zRLIJr25yl}wdvF>l_HFM^+b=EA6K30N{gJUXyL;agVAXP_?Bd4sjwSvB-UR6$5sY& zz(ogAtW=6P{4%&n8LH;f0E%?p_exUN(@mfGue=AMAG$ue2HYb1i3lxTuUru$MZTGOU*d5J}?u*T~ zxSQ{b`=j}CG2dbFEEFNA2R1@kncKk(FAl>F4uOS<88L{FbRCS~wpC&JK@h2E(N>Q4 zw%%EiPa%O@(&)`>j4>@{kE&JGvZmvR! z-)(fC;+rv%u!j6tUz|PwOM9|Xh@%*3jyN+JY`mlZ+$cX#RL@Y1=&3DDmRfTFz(vD} zWkR0xp$j2KTLb`|#DT;~1diA`HM{gQlZp~YLE~Q4y_ZNIgS@N7T8qGqYS!6VQd>sR zqZ&68@kKRfAVf7FqN2;uk8Z`qLho@qRnK)+e}fL$Vhl3bu$;~H+NE)0SLTFSrPGmJ z94Q-5TEeU89HkCKEo@X)u7w!OJAjvbEW_PfPb2aaM!b{!Q^~|KBWF|%!^=gCTI)b; zYSe1?@si_3{f#BIr#OjV_$#)tVoiq-lY4DG5#8kjNOOan3E@EXL#nlymT!hN_80z-&s zpnB99Mcx2Moj9tRWgP1ubeOa*hZjS+0*)DEa|+|sQH&7p5fjG;4H4B>l_8QPV6vg( z<UM@hrzCQ;J%dq*na1*!fLV)eJQU&A ziT5xObZ8g6xYU@AV~+w9QqUtaVf$F#?aIdp?Ew#DoDD`DzKmqnm89Fh6l!(vyuFMq zPa*N-i}wTYz)1u=-BmeK>zPEr*$rbwHx+j_q|u^}5h{7nRj13P+w1gu+3PyKu@E72 zUr>0Xygijqer4sB2rp$AHQGRxL9{$i(O}e5xwMi!l_ZrXu~K6^0(9tSCeG_IkQT;B zG=+#0mPmX9wjLKhl12!ewc!L7LiZ~%jg*a;srhW6-ZX!q0E^y<7|Z4-yC;UkEo7t7wolkS2*>_o|^v_ou0ouAeg2S@~sq(-x& zVv~Z*r~2fn7zi*q*i>{$$Q7mg*x-1$`ZoO3Zi8eGzESfR)-&t8+MIG6aZ5WD3G$Z8!NhGBQ zGABhd6Cf0{r^*wXD7B-!j%}B0iiMR(@M#iDA3Tyw{U^5E57QMd;1BWI7NC~&npqc? zNPpIBp@tjv!Zd`}EVf+&J9=K^{QdjHwJMRiGzX)X6yjzRNsD*0aT7!L(i_IHV+W)R zc5JstwVntmeDyDgOyFwQ!6da7juLG|4(cgx2QP4yt46{PXTq8b;KlY%U$09!@l>$w zY}EGl&e+uzNiT7(VRI#xE1FD==@tkfNSJPAX`^BG(^N!li%%tH%()?&Lf|?dA&?Z` z6hkB6u%s!)cr3#dVyB;cKA7>`)n#>yWOYZ-2tNe1(4_U1?kkL;@&t+0(2XROSXOQZ z<4ILL-cKd<1PbxtU)-7zpQiSUn)tvkghG-O)U&q1(98Z*pFmv(YD@>5L_lRt1|}NT z90W{n$CE*cL=uL8(OVx*$VH%UeJ~8N3AeN1CLj!~31g(nEZaOwY^OSlU`+)v;{+Gm zDFA`+I&-J+bX3knCXm)pm6OAtS>Z?#!V^4}(fFQ&C_;uLfxxP93W5dU0_3LsSb`NK zJ{I!znw5es^wiA)CcM-xJood66kO(0x!A@)$A>)vHNiJOew7VH zK`pExbhM`>M2M1x#w|N#yaPhzKp`bH#w8dRRTYDq+;p8LYc!>&Xsv!i*hKTAyqjlZ zlaNqUf#W%il`^Z#OSRr$BJ}=E-W`hE48CJJdV5QAqOIHar6^JadoZg6{hD1 zg0KT#0ShM~kPgE`duqauyMwsgrzBRiP`wZqnIE_IRY)wsfPGiiD+#{v(13AIbHa2H z_^4+%Vd^kAJ`eS4?|=`=f+G$c`ktPAYFt;0Q zm!2UnSNl^)#4_Qg*nTw_y_ENgZkFv>o}wv6JDz&NPd>~O1m+IIEyqbvZ=$CypfpPKFR};j;uNseaVDx&8Kk?bxX+-bs*ahg>aNr&s z#|$)yKcNq_h$7Z~t~MHoi|QvoQ*-E~y@nZgg#N%W_vmZQ8tX2C)}da<1}DeYejWQ{8P&Y7bDn(G@stJ#Jv|aGI$!Wp zBjKoE%~&SBc(7)0>VCao%_qpDb^`SLwaD?wOsQ$FzF7}bsbgWBKh3;3e`4cLG;hu$ z20|nwQYSJ#k*0W4J}61lPLL7`jK?rg!SS5?Od;_X1R>%8EJ@Z&cNn4#Afz<#s>9BI zI&*w-b3Qui0?b~sW5|@BV~&4&b|rt`d_KDUWxU@$-t8Z^#pKhb`0<->_U!-glEKC5 z@qv9FE;hw-u_{{gyAQ=pF~2Xix5ak1Sg(%$yKKuT+j^6WwOD5CVrN>`YE@R3hQ=Ai zIq|vfJj~x0-T9~WaD;< zrX7ZJ(l|xCi83jWkRC!WU`zf^nrK@(CXr25sW~|YYXz0YZKs_N*if{%W1r7i1Fea7 z%0hEmYvSFqTN_@wXxNb5Wc(Oc_O3!|H1O#KyP)I<7$v`(jf*e|t~K~zi1)DmfSMeg zpQ5uz_MXi?U)Ig%&jYenXtt~c8Y%0tHA~h44Ux6cJDnM*I~YKsJ2}CbW{ZrU*O+3< z#?lYeQ&^|x$8lZ#Y09jW(vs$bS9Rd*>;$FZ#E-P`^6oWNY-N+wB=A(VOfnEd0N)z* zBrlsP6XVog7xDTH=@tZ|4!)xBpe#?fE&NGMWdM|ISa;()-eX*&n>>TNbnVy(7+9E!*5T0h}YNWha|(`tu3+ zSzI1l7O(kL$1z$Kt_fjBB3h=c2`1ij4ubGznF$%0-0y&00(v{AbG5*E^Ziax% zhk_;sHvX4WW(MRUQ!rC$U12v?me+9u{ySTJoUKNYiRbahNYc$|TC*#oe z9EC2=Y}io^fE8uJ90Yh(a0`vwI#=DnE4_5J6i&}iv6l2*M%jbY3siCGZS=C!&qk)U zJH0@)iO|s3BW5KT_sC^Udfm0N<7XHFT?((vTq?u)bmz|S9R{7sRd>&xq21Nk`Rlwj zl}kAHaDzLxTe4MK+i~zon=VWogO1x-tFQnP3|=AV*`PB2{iDGxTdeDC=e{}^Fw?Zn zOC^X??4Umw3xc-pt6*+BxB7bn`abUH?@i$Q%k1Z@uOUtV2<}1Qd$E>^84fG5GLSpw z*@`NHT!|S?EA7U03*Y7JyCDpoIBkP0_^e*7w-0mUrb@-Z!*^8b z06ud8vxcPU0$zAcUq}$^XkL9At8Wco?hKJ3!KURQ1gh zDE~IPzO>KX`rCEYnT97j@mcrBlbFP=SOz3@ZS@Hd*R}3d6Oh-n?pG5K*R}3h6Oh*R z#bwpECLl5aQ1-3~$W2nv>^DL2U79^?f+D=E`UuMKvg#!$!po|ko&+!1cVj}HctTVF zWj{|mIhGW3Crr+IqMz2p1*;>6m_4TBtQvrD*t|+NK zc@nP3Cvs!54lO~7sWUL{_4x}gRil*$I0qaSE77h2;&AMcI|Xxj$YeZ4cZZG?Tg| zjB|h3Owu;2KWxoQ0Xy>Laqf?s0qn@*+#frWve!X>1Wno=I53U|b-RziFdC$7SYMAd z&b8in<|{DvwNx3;eC5S)wIX=tt1gaRefM`)jxRO9Gk<60$m*lNr}B>?beMnk_kqUw zwb?I!7mxtDYyKXfC{)}-lDoD#cmav;y6WQvB*5#cn-`D(ug#ubKq6!imquqVAW15i zvcDIQKubDRe-OD|+Py}EduenW5$~nZcSO9GX7`^X0%ky&A%W+JoE2Cpgy)F3OKQ4@ z&vB_|mMEU%qR%R6JjaEfRRVdA3qP}D;*0;Jshjcz&pwtd_#)>YOTvv~U)m?l>xy{e z*q5^eC{G#3zJwJ()rc=!0di@!dn3ZQDlm#zT0G~4lIt6_9gzF;eu zsx@D(B~)fM2uZa9E87H4j24(~);~OoU9>T3G-gxzOhxab4gV~epItt`em;5*z%CmtdHxWs@Q zLjHlNb?OoF&rA$xYy39XkfFCwmjvA?%HT0jnK_6}UGVHn>gPKh2uZ9^d|v)&_To`>H8x&4dmQ27lh*9?H*c~7=h_m|>AZg!;(%uWN&i4wLfRyO zqpSq<77}oZEg>C}{t=b~o&zNP18fQDkn|6)67bw3>7QInNQWdmJQo0$@bFytT*AY1 z0dNTq&xOaOe`r;J-ZJtJuo}`K2@g->*zdW2sI5R9qVNDQNU!hydA9;}h{8j}ApPFM zVHy4+5i z&B}W7*oyX*vIm^DzF$*lR)zN>^B842z1|R3PAGa zt=H7)sgDJmbdO(`i$dS9X>h>bz`(B!oTiTicpyroOa4EZfqv?vd$YX46#peT)-nM| z_@_Jv`#Ma*pELqT5K=;OXAk>>N5-E;6&XpzolX!He_G+pG;uQiJVTiwsQ42PWu}~g z5E)=5HeY*})*2j`i46SO!0~4yaJbb-m;8S+109$Hz)UPL#eYeTscGaNh#l|@4$z86z5n?0qkN*mh;}Lt2?+ySP^f~q215kqi9x%iF27yh<_a3Mif(o^`?1@NG!Fp~=4C;e#BAv=GA4mY}&vI&Yt$QT+D#sJz){h!y?wNenh4)Yi*M}3$M@>oKK{nj2WA0*bB4U+-@(>>h;X$+;FKin5> z6k0vcxxcoe(CYix;oe1|*7nF#ZPJ+a-S;W|Y}V~(LYp*Z{hNV=e!8gPdjw$3xgfE( z3ot1FF#YC%AdR8ayPp7L9fMZyCIiq6F=+MgJmB6%q1L`3q1vP|>tCm&^fS0jBQIYP z`WfG3;HD;_pCQcv-|GMkKwxnEePnUDT?0& z`QkPx0UUc%<(+*nz}mN1ehaafwXeK@CL=Ku?#F;eP}r#JGyfP0K}FrG0i*yZPU|r< z(N&m%^ox>htWS213Q3k{nP@Q*C=DUc>NBAZ>sHVDQuYh3e;s_ohJaB6i1gl~7otx-P76?Bt^zU_=AQ}#Crd_n`a z1kfoBMC7RVB;-r+r^jOZ$rheWcf1?_LJWF-b@#DlZgz{BB5pe zTIiHpJD-sS(i-$z)6qz!n}uPBj7${^K7XzC!)CoIR{QaVxr&=N6wnh^#u&Bp^oCZs32vwl)I)yGVOMeCLVA&WZ21I9-V$ zro!!__!Tl2M2bS(W~e@chC}rkv>vL@t?8wm_RDX5mW@UtBb!^B#NHjO^17W@YzYrW<&3LjX?=A|+*luZ0RvGf#*(Is z&-6y0?ZGDS2@K5ZD3l^nu9pO|veHYN3Sc;|( z=uWAU&#BiVcV3lj`jGCFQZ%#4VCaInsz4D1Ks{x^AYKn#33=?QHbYCkc#Cw{v|n@gac$68fM$XkX_pFfc{}_;Nb( z2m_F!-WNgX*{@^K(I|g- z+@0M_T``;h!^R=i{^yU~2{3jXK^E3?V1eP|u-z%s@&i%t%0U2zaLA^R3kHmx0Bd!# z-q1SJ3UFZbEO5EyJ4nDN3M8Qgyq*H1D7R<_4j4jZqkycR0s|=u`)1xgbqb86S}TLw zYZn+8#gX4SFn-s7T0I4Z?Xv65wNqf&0>;T;10PQ3+rl(W#JPRM^S96X+{*CIqUvKe zAKRWc<6HjI)F}h$AkO&wRzN2Z(6uP)YuorHXFLhG!apPM&34WqxUBmsdo#AIdE+a6 zMiqkdW!nC4rD_)QLmMxhVF}j;8Miv)@xXS_+YrJH`l{2O z+*qQvfn;H-%T6}7L~R4fDWnUEi#@3vQ7?;lja|lLjpled0SqwI?8B&%8=fz<=;})|n?50kh5!0($w*V40 zyQ(=k;x`|o34n`D7Imr884fF1oIS@^OEr^cJi{QLTH4Kjd_gR;QWm_BMb^LWnp@lP zbD~86Q5Iuy@KKR^_{u$OVPmqDB`aoS?t9xBIl;LevGWi=qjLe7mskAO$Z^V_5>nIR zwn{J#vu-|_SQjj(ggz)~v<8{*9>^}SQxlt_HVJHbYhSunNoowLQas0JcrSc(8xI>g zxB#Vb%hNn3L}#i&;~wIyiQ^2jN$WD-sE+cB zqr@KQG14Aj^kJW-XhKGM0%(F2T%wbJChNn;`w`Ho;DZLe3?W)*w^7#vMiE7bbx#BY zS^*}yF2WkXhL6#bIxag|OX3b;)9VXVxZAE*`>Xk#;Se_TrBDpK;wyjJ{i-vz1Jz7G z1E2u`5Rv312T*a#?Y{V}v)VlFN0!gp(lDb+=UD9dKt`Rz1_4G@iL@93BC)rNhsA#J zv6!qk>*f0WCnFHs-$TUdosI6;cDDnNvLd?#Yy<(huC-%}0Z0ZTeNBq&NfdBN`ZNmq zO4J5Di|U!&in8{hv;q96(GKLU##vH zOY@4**q~nK`Oxa4@y!cUHNK5_vD%hXVzv6*>9gaQmnqjyX*IhJ5%1;8`bK{Cp(q6^(R>bw*h`A!^JFV zS40QHH}KZw6SgJ_K`#ZdX+ewub}v#t!ze(rzQ z!`cAk!i?{#_YFWky!&P^8-R#-Sz`kN5LI8vACS>F7rX%?!e@t?0zf3;dV61NTTCaJ zp}Nw8FP#Z8ON@A5@VfNEB*RV~Tv;%n(LG{&5 zXJS`L#;BH%XB5@ebj%-9ROjjDh2@R+h{Fg7H$>D$HCBK{xLEEBV+@%_=O!QzZOR=( zMSTJu?5QuU>1D?Z$dvDOU?`aq5Wsc82~$$A4(t^3ht0CsX7~5oVz+Z1WT=AgS-U;r z@gHJGVw*so*?k4!dY#c|z(Z;@LW4$-Zj{Mjmbb5+J%$9A18eUzI741DVur|PtkG!V zFhag=O(XRp2_?`?eE0H(8l4Wk#pYqYfoDUnGvrT&q_+*2`4Aki3?Q%|?-gG_2v4!Q z+b%Zy_11o1($2>%W|8tpaPi_oHEi+h!n6jxOJ2lW`8X?-28tqK6oxf@JxKOnoN5Vq zf~hLOPc0RTk#-Qyf-Pv!^B`>v`Ye)ac^tP41)92n@*G8x$I{A` zYa0_jv^W-N){NA-=b`U5Bk{5KmGH!xy~;&ItelWPu?brGxlhT)Wrn(* zIA6iI_>^WQG53R_iDq5+-gM$#gr7Ai1ZKQUI$SI~1~nk1vu9-6(C`{=s0ip_x0pFA zo+Hvd$I0MsC`)tsnl0P!=XW0-iq*cmo?A~+jC%}bHOWY8_J1wi2Edd@k_H9T<_@YB z)9;ot0|5K#DH)$2$JQVrz}2`Q06_wJ)2u-N9|u>?)JTlkXcfp%a9t+c;Nm~9!O&2q zpurK*kcOmBjvI)iEoe|u7DSkYQW#I70gZS(iI^c%0|NMb7Mo(ZSQVFx)%|e2SnUnZ zPZ`?9Z(@|o@p_aEZ)Ac3!zTj(@@tIgL=D=X7VmhI3{-i*FY}3rsAnpaM;B0p*k0Y5 z3biNNo@KrEYrQkc+s8i@tNX<}iijDpX6#J%)&e1przWB{~Ufpl!ua#BCL?ns_7_Y1C zud*gA_VuDXSlg4zfHE`=F#BAJ|3!fYN@B?8Pry+&Km3%&eV4E1My#BX=Pd#AiR-@Uu z2x9?_HI6+rc|Bcv?8!!(3D`j6r#`w&Bm@faf`Imk+xD9TzZr~yUNkXCpXez7+RJ+b zw)i}<7dWg(xN!^sD{~a-w3TZ~6I3dL5p5nHLqq}O@~XY;K}F*9e<}NH$z5$f;O!A@w=OZ-QJP_>~kY0`A#O63`)f zZEnd<`2Fh;5JCf%A^ZdYSg{5l7l=5esvhzX!h!e`FceY>5xBrKP!fRDpcC?_8!j!F zI=xLDX{W7-iIF@P;+nALPRcMjBo+)__Bb%s44mfAr>aH@oIUDC@*FK7Q1; z$?Y%vZ#xSDuw6vjpKP}&?)JU`Bj;Z>9!l#)grH+)iv?RobRl+&1zT>7sJ&uA_t-&K zoB>gb#R8X^O^sY%<`1ljzcSkf94IToE8G6UctuFcKN$-mgtu z(on}Vu;o(}%QNiIQ%(?3ydFYNI}SQ}Zb1(`4uQ)qTVXtV5qiXd5O@wF^pr!+TPp+t zKl(T{^ohyk6slV2A-UXM5JGGYPJZBl4LbXIfS6CG zwPi5C*-s8jOXNPA@p$fWu3v@*oI5tsC?E4&hs-Q zDG%*s1*|uFB;33jhBUMn(y{~_IIZcW*}jQ%iXs_tcglioWkcm0AM!-E4k_C_cP4vx z(kVHRcR)M{d)$!^-C)*Eae8cy0TTqjzp#*{9mz(WZG^eFjUIB29AnlylUX!C!+LOa zHO{^3DEsJ~ve;ZtTpU)?szjPVpldB#q=^7l?D|Hi`+(uKjF19%TUfs$6!iCcbEyg& zOr3&Ad$Imnd!t4DwG|k!W6Spjt@YyyxP?(FP9~9XFDH)OCk_hEy_Pt3-?u2ZQ+y+~ z;4bjJ*XHjW-)=3y6PLp#0(kDSc!~hVj2IwjXv7>a%*LAT*#BTAmRwV)e-W^+91PDD z>YG*)!`K-plS%=XFCS=AN&*L*&z>nIvEp3EzJX)(zaw7GVwj#$B{97qrGPmku|#N# z7CP$7Gf`|W*x20?LCX=qw0$0^K?Swxdfs5WMq-BDTd-y3V8{5j5EIhuLFt(Sqy|`d z045|gz&wN61f&L-9TF4G+2ly>0-YtD{%x7GOQhW6h&tREwcX4mUB1FG_BYhzvhd7j zI1X|XM=l@W@Qqj<2UUukLWqLTPK4 z)+J*mmnmomBX*4Mbh+~J)P=PVIwYcc2eJkB(1Qee*()B_+fO&eeB<{}P4SyN8I4G+^W zyj)DgPh(nJh!Cwv(X7{o4K4(E+ON9kAYb6fqjoRj{u1p}Hheyo9pNIzPf2$!;nUKD z1g7RskHsUP^?sV>(_BB}!snobQ?I!2NhiSobJUq-5{~xYUO3R$)G%g~1hi~TUtu?4 zc(wWZ@TV?3FFef`>{WO0iX3(cZoK)jO_F2V(3a3KQ^OidXhvuN@T;s{Ol~6*M3BMu zOSN*;#2~$__OodpEvC;XM|ck%V4$1jL$~oBJPDi0?5{;ut=Zs8{1xw?gVP>muc{|B z=(=&RoWz&NB7%|BOB8f5xt%goWS80CK^kVJF@i>Zn{`!oZ;(tAC3Bq*dijLuNf7T8 z#k0&=5AOoS<2AP4*lBeg4QMWA2f1sx=K$O$j_dg)s!$eKHF)?^4MY9Cz|lapY@NFu z1XZIMn)6KpO_&TO@F@YzYy^1wxd#*!b(RhOby?`OF zJKSEu0Y;b8PS<(%;T|O&Lgp*rYL4K~U$FI5dR)q90d{9D;)ujKUQS736YhX8dV)GI z96V6~9mHz{#?pHdL0&yM=z*hnO-Ut=HqshCH)>Byq@|eY96R7h6TrNPoeBs=V8$d) z5`-{5r6_$>9ejb0=+cWYr$EaGGNn8~^w`@Yd=A``CDLK~chkqfQMZ?LZ12UK+I#4s zeY}}(cZG!F84rLfEO}1Rjtn-8*h3!UKFddny5d2&0q=PLShRz}L8jtwupX*tKN+o} zF7A7s;Ux1PIC&klaI)w^W9;s-m{McO+PMM-Cf_GmT3wCwX`bv@+KIt|luk9q{Pi*#yeH*HrD zOpKT88FK3g=c$=O24&_nf{J^z#d*4jphlhbMN)B>N5`2JLDfI~qbxULh&xAJl-Ow$ zr-r%cP_j*uix_IAsYp??PT0hJnU3YVgKpQb&0WIw4Xk|($7fNTPmxesh?5b)Ky~7J zy~Oqk#r%NHNTsuR?IYlR9?*LRQhZlEUhqCzpjhWd#qMzlm{yWU)|qJ+hz9aHqX1uJ z9l~8`gNot-x6DQ}E-5K}tnfrWN&nu-)wgCVd`eBnz?gW7RbfRBhb=vHC@L^u7-Y6D zY=V{Ht!bg-AXY@|IEWVv9=EYjZ~6s-piH4M!?7R93y+vfBrPJ?-VbeBu~E3rc9__! zDgYr7v37&n58J(mzBZ9lg2-^n4kQ(Uafp~3O=uD8bz1y|;ENAjaua6ZH!>3r2|I5+%Ae=NmE3)Q*9{dF@k(ML_CQp zYZ#K33qGwHwyyUsAfL?FOP!;Zl8}vm|MtqE1Q14XTL_sfcbKeCeQs=p# zF@lBr56RSrq}D`mIp}wXV&mZ8WdcrjT0U8 z+iwFe1dvcbh28C3jhPklS5vps8qKV$pm$JBJf*OFW50Lo2n6k=MZlP4}Qpb#gFd|CcW?ef|cI z%gH5lfTs9P%ww_y`&N5OuvNY_?NgGqAIUwPuJuTxzKF6IYFj8kI9()Wyg7rn0rn$8 zpy2|VVf5MzjWT{MU9MfOTIu8zz@`w#`T-gOJDI$R)f7T#3p< zq1Q3q@g@nRR3jg61VKnY2;fbiDEL^VI2Ypm3Q>=$gd<7B4F`|I%H~y}(&p**mRUi< zDxO|Six>(8g`Qsl6x9TqUGW1%NigQnT!TGe5Nl9*YQG}6zzM`LkQ8x_O$##m972LZ zohvvX$l2t)ykSM7noVFZa1Na|II0mHhk9KsY#rH%x>qc4t=dtyiamPZbKWKbZNAhp ziC>}M)+B(Tm_2%(_x)pz>A$hbDqn|((Zn!JX9jtfXkiI&1$p|iz%6$K={~S|V^RVy zIh!cTq)f(QUnQJk{oqlGKKKO!?iRSb^kWWB@!mKwj6SmMslaAJd0|J)laQI_8qY=^=Q% zVZe}E@oll)7r%8@o5wv5`VBoJDbWN%w%ZjCZunN~ zqxo)MY!`n^ZmjpX+%I+_?VgW@8OZHov;Q#O7puF)(!oN^WZU^&{Cg zoD}^J4iTREmyZ8$7rVRdVzXawsRvnxjI9S&qui3edZPu;0ffeM*cQI8tBH!h#LZ%a zf=Dp~1fn|QgkVdj+u$}IsSI_plFGz5rvcL@g%}3_s2P(WMKqNcF9j=2hPPSwHYXeL zWFBfDF0B_n7vaoaFnk2?sMr-)+*SoSF81_h;mmzo+xr6{1QIj7ePT{LchoZTse~fR z@p!&hC; zrDDc4iBCUJg`^OuEq_?C#136tvuTm(?0gwPalI{2NyAKb=YF}b5)+=9!Sm#UG zFPUfi4OGX+TH?ZOR96c?QY54D`CwfHv-&{5fZRr0tlQyyx5LDysyB(7AjNIq*JS8cpI~e|8u`3@B5Lw+J0^(6$ zdA*piLo>vMb^Qwv3HZEJz$fOjYdnc~z?I&767itx{FElIqCva)b;cETXL5r)N49Q& z4LfwMz2NeXBRmQxZf?&TRG3i$CE08GnQyE_Q+N&$_Sxsr{mN9crQ z1Yjrj)nY5qRmx+dz{p%C&dAG$&^)WEc$C1FMz0ewqnwBOhD9>yPdfc6k=zm_G4Alf zC0RcoOvmD|5S&`c54myS5EA#Fb%S}XTI(y?LlKh^7Z2F8H$&2$DV`{*IwoePy_0|I&3C_`Q1`pN3uUf=BTY+I z)|o#nmY+JS`{FkgmQjRZ%f1`1(q~hCmc?tvi@%j)Vb4bI^N#)Jk4F9$OQ?|S+l$?1 zzQ6mxm|8G>x>q|0peTUuee(aL)*3<<PggfTEbK-}Iuai3fjvx7hCX zhV0E@`Y7TU2Zn3`Oi5k!4`rI@VxVu5i6?YUMq{S%A7WhOiD3u2ZLwQFZtsfGeD%K4 z72<2Q+b|k>`OL*X$(6$=InxTg#im<)ES419k^>-Jwy9;??fg@B{;6C#2t5v<=zYfe zhYBK6LzO>TQ*c-ta}aV>{AxnNGA{Xz){X|(n3fbA z0Vqcc{=tIsW-I5$8{yC3m_j4}N8Oe_ySzcnTe*L33LgB$l*DeaUJX_Spn{;^2Z1&g z8;fKOr&__QKLiI|{5}?|`}MZdj)T4zo1O`Mfde0HOlGIkPWwNYk&Ic!vDmrk{fb}d{!q^9PrH5bP<3W}w}wpsnLuX0Q-*56eCNmr5Yg4P zC=Mr_BviRfB6#eq_QiHJUse+6ulI|03;Ex_*O1-)kMBRE71R`? zV*UkmMH1>@yLi7~^7$XBW^UP^E4gx@?*LCr)pmcKm82d3xeH<2fQR;O zRRNi((7fWh0TQy3=9`5E`Rt1XlA5eXr3yeV z3hmZaAFhfy7oD~%xz#h@P8RI{zE|INKav>h&7N7^%M=vp)2LuS1AL;VF0@11scHNk z=D+32D~E_w0+ol)T>!2+R_ZRwsCsdT)E(Saf75WDZ$?rase{N^duqU5g5oHB0OHn< zUK9EkcM7#nD0V~U0rQ=7U02k+IVl~0-bBTvEPusn{&rd1cZ~yj)reeO;=c{fH*B3% zNPM-CqiMAxCJA3xscmUQ)!t`tT=0V=J6vq^r~y-CXPmPt3_S!&{-3R{cxz%d{I^BU zDh)5XX4i@*1<1~J8+9=MY&8NNK0kcgu{p4my)0M1X6JIfUY<1he{a`sA9s7{u#`vK zA3d0NkISWYx=jUtK9KMRv>x9|ZxHaEAy_>I^FaAkPHV}yMZR4w z<~!v3yM=rq-e+Q1FBd>3Bn7s*?t#(#b#Y&G+0FxeTF$rci{W}I_-ZMItM)_XSPf$6blDv(W4p4XR6RKCdbNeh@}K3q1Qv}WD*CBW$8{7Y|h&40qab@=QoFCM+uJC0b}ehU&q;fh0SZ zj%bZ-jdsnEuFJOE3u`xC6I*61(r@5m36y(D2;Lgd$lyxk@n69R5C?O}gNh>5q=}=Ve~02ux9o2%zFkUB5J5#sbm{4oChPrt`2;fg$NBP6 zIqaTJBaxA7%k9!xeN?+{EM6MRC00!)B^sXri?C)dk?IW3l{%HD^{&K{jm7J#60a?N zQ|X9|!?%l7aW5N=-THXH9)+uHTii=iEnaN&Bf$A z2HM*_z8x-@`7GTz-1D=bWyuhPy&aA4u-H7zH}T+XGqd6ri{Eb9f(^;qjuq5q@H>7| zKXQMS?aU6(+<_Pe?7HRfy+=9tf_tKZ(`TdIe>DG-;^m`4kSj3~QV#OK{`Cq|LH8AiS%XCxKix%$SywPyfN zW_C=+E0aN{WA@j^R_5aq8lUyh+XbonUwIHol8lMS=g0e^7HX1IO~gd8?u>I&f+!^@ zk6UH?Cv+cF{q{^>@AeE{ZMgh)VLRV^(3cVLs?=!Apk9<-TYP8@XLWEI7*6X5BSBa| zoIYbb8ufm`j+n*15aG{5)`9Ip#sJ_Q-jr7@_D%%@^GhJ1JYs+~WzUTjAP%^_pb_4& zBj(*6x&1T2=BxYp_Fm4Nu5G5ldzXq#xl{^j^C@B9^KeJ&Uxy2JGK<1q@naa-ti{}U2{+qJMT#==bs#Qzup1m%swSWTK{`*OLyE-0dM5x)KS?FgTTi*vtSd`t}f=fAWE0HPu5 z5rErYDB$;Ae~~ym(1&WF!r`Gl_D1FT5-wKNv~s{aKKtN2b_#^^nr9a0zfmqt(R z$UknwbAx2U_MaWo-qt?!8DkoJrza#Jz`uBmo!6Ed;{}Pt{QWiceU&G0$*b7aJ!Uta zE%F%?5H86iA*RU^7pWh#sDF`?wZx^n;0X>9$M=T(s=umc|MC|<(vjygFtZt~?vHjK z){o13W>)Nv-WErXyW&2UX(W!4wF`tx#T^i49(r8Fxe_M5?!7Z+(Jru@z=Cg1US$l#F!WZlBs1mN>5~=P))N37Y1O^${SNLxv~Bpx14v((w#5s zNMmecs%2P>FBs-L-)zcj1N(9MQ(owrM-}l^o^;R?V02Ojk6k=;TZNtkcF*Ka8EhGk ztEdZ?>Hz6Qew#evJsA~$eOzp1@DLLEZbrS^U*`7l8$SX|`|vZ^DyTPvEv#NpFLXi% z_~;WpBjCc|g0RwsFi30Kc}YsDpP8g@8VRh4jDtxw`jxz2}d14HDHKNx{2!4c=Z@;#IB(JC&P^ zl>H1y5|=g);Y*p#HS+Db4Z+e!kH2=VPPtP7VDGHAp{V8$c#+EAw#r}!$q79_#)~pW zkaoU^iawGoLc#b7U{U@#AVph-h%HkDQ-2&)C*P3OFb}5wxKtOiJNvz(?5RkPV$$1- zzgR%ddOeC+vhj=*N8nHlo4Kj9F+eR<+nBw+^}wJLD8;Z{ZO zAWlU-w8VFjyFh*a4DkweNC)V1CodoSvOoI6_}9hX{i^|wS->_!(IGM+~2V2o3HlUPe5?joq8w@#a5ZB)$Cq%Uj;W4X2=+_2#?Ey zq6<2CAO@s+N&QQo|08k|-Y1NY9HeS={2o&C*Qm5!CkiIj=?Ttgj|bSib&A4YdSPZf z7T2;$^je0Qc@W=B=B@O20P{Li9z5=jZxb4c&mq}kTlV9=(ChB&hAY|40s%|bDA5zk z9i$Q(%Hl14ODp4d362gCPqAJC-ON|_B;k_-t+-y55^e0PY$;{+A^A?!NvV{>3eBSP5 zT%tV$lrX75FyHAvbqs0^0XPB(SE;ekPD?zaLYZJeWfJ@xCkjx3t9QOiO!^g+in!MQ zc3(*um9_NW%(7bgj}MDgTb9+b|IBlb=xSS4WYoFiBbD3lqj>ED>Fu2@eW2j-&Z*Uu>0q`$tlk7-NXvJXY^j znMg~Gmq=i%_$s#T#qMsty|?KM*UL}u+40eFqyn9;0JV?kQD!;?9~79sI|ZnXvn|s= zyxd=i`FAB?J-P8D3ubrWSDG|_nNE#yv0rbWK&Q$UTL*o-TyKh+Jm_br_UfaS614=4 z2Z2vqfOVE1xcFd}kTX4eQ{n!$mUOVRjpR=;Br_e?nuk2)gh|Bl1n9Tph|D$>L?Y`d zn{aE*ENY%*wvO(pG7>|^8a|6aADVoOKiCLZW1gu$3#sx*5}lCQ`oyblBcH?yyRuOE z`Fp-C(ezw#8E=+|xWjz5epE6>@Tq?VveYM>Gn{9!CsgsZ3RfMR@@ zS-P*c{|R)Fjo8Mw#yEuEvgbfz>oRRl{VwdJM12CzqCkIQ7fnUtwMSBSn$lV~bDJk% zE2F-|{v0>q$*U5ca73h%udYsO=B9H%S4HvW?FkmmBk|tA0UAL9#6~5+d5`28SneV(i;z;Z#TJC`jci;=LYssO zQ|cP;gR@J!k_R0rGO29z@I(xY9Y<%shScc;Jo_hG#c_Y8uArw>hgGNGZip)BADwGz%gD#UYn69)$02nMb4LEC$kG}VB4Tm6;p!sBYi13Z>YS+Vm0!&&`DV90-#P3x#;`E^nL)B0W+PK)ZFE{D2hnnC_B zOZ4==y=hR+);;-X3>-V3ewd5Yt-e;8A-K^R2W6gfH&7X`&+&rnjin zz(ttp_N`tS6TIm>JUs6C_FUCI@+4z*Hc~Wo9W&|f7<^lVZT32@7d41+b4>|KPPwX( z5F%E3(F)&or1el=khEoC{{p+e2OP2mJcKCAz`=r-1+>;cELT+EeyKbu#{LN-R3?C$ z0ftFnVpLB^ol)5sr6=Sb{~4SK(0r-f;C`Sp@)bEnVeh!a&wk8BhdelMG%Fsu>$!LP zvlM^xVMTdd2Y4s{7Drg!a(0vGD|eaI4Du9H{hSw>F(~iYiNboq362sy*rW2MAKQwm zD;9*QCCI?2iXZ?ITo^SezI4uBuPu1i;$FZMhaY(#r7dyOof%oON&bEf6%&!a55XcL z^0!nEr9Wdsg1iCd?n_8X_@B_1<)vqc>v$3FYcaNQzs70vg!UuBe442 z+2ux38iXsA1krefuI0xf9no~-XU>ui`UbbfuGpHb#ymu9G_3ve(wrQ|W)kxavTPWa!Kp?sfkp6Jh14};?9$O`Se1kzW@Nfo$(O}=q;ZdeV|27)%qj?oT% z{afGNEgyNBbdiY4zN7d_Cb<&tn1DzQkpt_>w1jHrz@i2$IKY?1`^75V!*YPQc#91` zm5v@0-}^*$xU}IMDR^?y{U*|dtv8_4OQTo?lxMh1!i33LmEA*yZE+AUV^V~$I2D~8PSi|9}s zsauk9LjGfwo;5BDvINdmVyw@;%nY$UuJ{Rz>h3m$#ClJgocfvHb6orif4!jTjOU z|E<56!g{PeefFCHH4O(bj~f_6_tpDJt6GJ`GTQTqVf{B-@X&yEZjqB?Go`r6N3X89Q;2+ij(zpn5j?qwqJO$1N1WaC7eELw_vxdQ z*mVq1s5kr-W`u_55D-m}(@r@km+`aq#7 zi{FczC0N2I)-klO~Kcl;WLmD;JR z9wkk^X@zIc)waMnb;_2>8e|7noW1!bwSCLKDudIVKXM244_d^m3Co-lXH3SaNUj?e z(RB5Y%41yDua=Ly4_-;m9kqlXDmZ5ud35w7P*kH>>a0HUV&{DNeto_|3QnT&Tad+` z`vL3CnD1p-*~NZevej8#e%i-Mh{y4mwa-8%)Y}T_ZHSx4W`VzWPK-)SAR{ubz3{<5 zi4A;cOj(%4pyK4><5kncBo@O7Qk5!3E(d4BEX|n4jA1AsM6}&N7URP4>zu5Jf@p_2 zt3&a#Drz=-Xm`%|l(j{4rG{ZBY>cXy9&Y=*Rn-9<^=Q}O`(B31%gw)r38Z`%#fm)e zIHl3*AIYv{Oy1_INO2Kj>{BO6Q#Bqt0V#G3 z+DE(czYaVZWv4|^Jwjkk(Y^Y@5`@?vWrMLo!q`*vjtc(22Nn!lHi9^@Y>dX^XpR-l z!%!1?n)RBDn} zU=<*?A7opa3aXw5P)2qEtf$IJK6eqhkrE|^Fl!Q46662*MWiO|T|!_^#k?n69&^tq~@O1I7!<#HtW5V;C%#yT7lnLV5B$591V*B16S=e~88R6-4B@fkQ z&h}0YxP8)e$8M~^l58M1b6X6Hj;u7FcX|#woZ{)>teLy3HFb?yo78isEZG<7I9mGb z%k?{MrIMZ1{rsZ34z&W@`R(Sdc)GUJHiE-TsuT%B#z`)@vHtmGc4L`Ph1!VS^kGlf zgUhTgo3h#Hofl=Z%1Nb?QGF3H0Vz=kk&y{ho)TdLWDKg(1tmn>#B>I1&(3P}1?Q!m zk10ylhjPBy6h%Oj#Y?)FQD2Ocb;?dN^(9>FPv^-6ke>TgS4tU1VNEe;GX<9v8I$3_ zTH_}giM#vX7GdUs!qR)ap9~D?8pSRa|FF4_ktD#2$kyX<<7e=(SQ4LiAT|C9!?R?Z zEQl5@_BHw*Pu-kVZv?3OGbq2v6K>Hea{PwIU?KWOjbz(?4`Dom_#%q6df7lo5PHR5 zUw{?0?|D`c-F~e2NS3WfC)HDv!}_8|`ppSDl&l_?bG8cLfDVM2@&OO84!ALCq#ZrV zhy29QfmsRakDWnI1?H42#Eu@#ww<-W$W`zqcE8%JSf8G@<5`cysWph^Q~-873$_}k zvXQ7L!ysdXe5y08mmmV^5XB@FQ^j9nS%{ob>kl>$Nb~wt7r$I7|2sC+_&$Y!^ywMd zFXuBcE0IBOJ=}|=SH|H!(4e15%gdexdIX|)Vb(!e)*{G?eMwlN8GpA*!d7#jDhFGY zevM^LRc}q?O<|dSIiq~6x#P;xvARfXEL+{Ou4Rxh`5s=^!HjL7T~^VM|7 zK)t^jB|c*rytJw!Md}0DtXEJeO(>#9TclX*vT*vZR=Kz6sVMUVw5qy`5sOzL@j|jn zO|bvsxVHM%6w`Ro<;@PniLM!$$cIivcOX7=b;@Xc>L0`ot5uaFW~qEHj=CxK2RU_` zL}U>h8FFk9F`_uzCQ$s|BVM#b?{`Slw)4zD&=irYi}Jss`H>}~3==3p)2kH1PDp8) zkJ$}<&_NwLb4beWu&*hiY;Whk#&i2obW(Ap|60CsbpI}QSb^gHHU9Cr;!zAuaUajB z7{Me?)f*|huLCtXp3eS)=PEhSRIOGRqwRJ^Ml7XD_K(WpVz-&^@4_aECjNfAe%y!_ zUxR;r1OD~rByJ8Wtf-c`J1kY(@scR+-+01uS7KXsieV>YNZ0UYh3ADs#Ay_cqGNsn zjLPU6#%Jfj4Eb04RQdPvuAqcxeE{LhzjxjJ4eX#!|B~20o;>I8rhlB-s(->^D9b{< z6aOc1>P^Qmg)LE(vM*_6Sm!K7>BwqGT7<+gO-t#{(!s*KL|n1Ew7< z5-Gto^OS+$8=IX%-$|bTkFkObbbcu#9_vI56aA3ruksBMlrKB}rX*k8ACQ}PXDBupt0id7duX1AD3i- zamRC;DgrV02~TN?DVS(6#1Z_hxO>#`1_?IGlkV`p`P1UvN?dloob?B@;b<@!Ox_Ih z@i&skY{Hn-7vb`6t*qNU`sk!i{noB$Rr-95kQVo6hPc=jS)c$C7rBahDUUCKO^935s>;5m>1{KFcTVY5Z!O3+x-(w5It z#_!9Tl|&lmZ__7HmFu{MkqIe2Fe@^NA8V(C6Fnbta{mvOAChVM+XMB$OZptduQ>xi z{=cdf@WuKM?)QcT^fWaUE^Au-ywuwDC>Xdp3wOj%C+ZGQ4kJ(Zw`Myr&8VD~$z3zk zep?%Wnfe>;TbUBPJQ)>H1`hj`xfLUYQl|Z`DVC^) z?*8nzLkBZu%Eac>uS$AOD~T%S`P0PWJemX}yJ)?{i@n2i;QPTp+H2?MXM=w9TtylaU@!ro(8XxX7mCOEr zO3w)k$jz4j`)h>In#1$*hX>nD%m38gsynQRp9trnBTV9{l95qiF+Uj- z_(u>7xJ=CHVy4Icy`~P7!yo>^r3r!^Mk)pTP7~tmbQi0E@Vj(6>C{YCe^6WmDnLY# ztKmW?3Ml-2UVlNAC*WUMkKzFLU&+^PPj|VHl`la2SeKJi1>>uE7VM%LmSyD@)&Rw% zi*0;C=Ymm_<1nXiuY3p8v%_8|sPYjJKV1tX>Nep3Qb``PFMb9$YK?roV}?=m!=EgH zk*i9ZM1?^Zl}*0#&_!`*)k*og8USrT%F-+mzp{FZ=2ld2iTG7TUSbuPE{k#)B?gv* zam8|2C1w@GEs``K+-X*&xC$eb($}&(2RODhZ%gYv<>h(@ZhUQFcCjpCnsv) z4oaVy`5gnw0etEkm~2)Wet0)KHUPO`<5 z6CQHl-O@u2qhDg+Wq~64SC%hI81|=2#;WQS_`TJTUupP-^Y1Vt?^O%~eusWCC2NaC z{B-%Txc5>|mrBhWfrAVsU66xg%p*uSUs>;%c?s^{oI;#agMEn$;hc* zNB*qRc3)>QST(f{GaJylcqXrhoefU)HR9(L)r*=A2b7Xq#*AdvDslD|PRL%dzTdU4 zW!=A+UsW5h-gz}H%+xO;`1J&&YY`^90ql~6_*z8-X4Nu`)hk{p!{2o#rAW)IA85&o zDxRp@H;V}#P`QQYvsHsIcBEQP>BavU1J%NdJyz}i@dhfm108B~!g#vwo;fSC#?&Is*^X$UMv>2-Faj93T2oI#6E}{8>duBj2STSWY0jD4t)m z^lML#!(Ha$6;BOjztqeK-RSzoQWK}gA+B|us+=UARj~6*PYR$0>+joF7vHEN=KbRD zFUu#Uc1@Wtpcj#+uD}~tuiy>w^DD4Myx{Zd#s0nnn{qw@$^_ve$94o#X26R~plI#a z3kC&C;97l#%HR@xR%LOYz(`d+*Et?~6?7>+bV=Rlxc92u?17@+;o`eC!v~IjHw*NV zKc{+cTnzl7BxKk5rGI7>;ICt;RLMsVGY{Yr!VaT{od;%}VftrRA&!~`hmwy~A~^6f zDhMBL5`eeSV1eV`ucKzU8nvN{2*OT4tCdd$CJ_R^5oW{sY;X+QZkE|$H++)75{z2RF*(b z#~ir3-0Cr?^d~w(pg@S`vYxgUfFl_r|ZGjvFJ*!)4Kbr ztb6}=)Y)H4p3}NIDj1(;f{DL_u5L@7V~sJ`!~MrG$-?mzOXI#YeeW-7V19x7h#E|M zTFoC8cQRd>$3$GRpH15&5^cbXEW-yqX*?}kUV64r(SxWwPm2;VRyeoCc3(>8FzYFK zQgb%Ev`;bEZzUp>4JqRGLOqk*xr?D3A{={@Fag`!`LADHtRKao8gfZNE^B4fM3+Z7 z!9Y#q=<;7mykd0}_g`JgVy*p-LN>CeC!ngyF)$R&*BGG%uLAvdseY4oIo8>lLn@!a zC(ikQ2sZpn5bR>NneXoovt$Wcui*30E$|Bqq)V+<=Fi-=*>0aT0SK2E>96Od{8bFx0EOBF}9Fu~Ld&nJE zu7*jKX}abADw$SggOZL}k>YGEi#f9lm+S5Cv-25ql0JalM{?$7OfiBzH6i0?Ht z2T}{iO%DXs!`Vbu!6}DCTnnm;oBu&0V|EJ|ppE(ck3B%yem}qaV3p+fYF>u9ZX1e; zv$=y;fWdv89rO-umQTdi4Q+~Dn&F}>{l<@Be(%ULUR2`y)Q4M~nT@etpCwb#ymhE_Z+a=1=#?Z5CyZN^| z3E-Q%w|7j+D@FCYDBS8jfV{Ar6pR-8zu%et>t(MQrQ1#`pIwgz)8TB~`8ltK=%hI{ zp}W&g+kr5D7Z&hO(|nrGuCiXI`(~EEp5&u`)~$fQ{eK(N@4oqlmpx`UM+K8T-xT zzi&QcgYly`W)rp^i{($LO!q%(PAjZ*+m{@K86q+vcge$J4ZX-MbC z4Tf}*hSWT69y6@dSS(W_)xakp)e~WKQ#M+%)Dzob7|COl*aX8!AJN1%I7)0I_|ha6 z9KAZlO*OVAM_Kt@7sEK|fSsc~C_ac7dZXZda3x5VlK_Bw5`hgt%qs8uqcpn~n; zWJ(B}1S&vVI==KU>ruRM)Us^n_ z#sC^yQcp#$M3{;h-K5>s_y%pf=;rW|rA7|WKaX$43zMs2zJJ_Se#=S=O)uri;4051 z(@{RV%*LJ8?6M<<^S5L9Gc=3~e>-42JK#+mJR5Z;H@$q~w{eOiT`~)MFmVwsaD?&A z^y;eX^3^yFV~lccsolD$O#-#mosQY@hpl%T=aj(tX_~p<7XM$EIn}Vqqi8brrR)~#=HaSkUJK#WR%!f%@;5hNCZg$Nf#?bm_!`X)ip zoxco+MS0tZF2rHZcE?`c8;ssmGixw>GaHYH<%nXn$KHBrl33SyKOeDG2{d;ag$T5G z5$01hXPkZmkkMU_AgLfzvM#m>G^vNNA3Oz`!h*FlCNJe~K$UxiW9@ z6{|c`y=?pvpWz5n)^3m3!5W|A0lZc=l*%J#yY3r&#=B&G&PRh;r_U5**6sW(wO#%i zne~AVS3@2EOb|wprU6@DR?)5asA!`x(-xj#(46%lK`mu*r=?J&msgsCgJJd)_q4k9g0V&-&|h`>Crx~{L{oU#^R)bF z6qWW#yU}1)?rUk$VH-s}37-?gz6+6Q&TjH-h#Prfd^WuY(^1Rq%4sAGc8t56Uis?7 zwCX4V>_10?PMiI0)P9w5i8A|@?FF2m`Ucy36w#Xj+g{Xy>Se$YzY|xki|ja1Z@rUlM8-Kgi{1=IDN>Ur}qHh+_Z%hwPr z@chbOCDvL;jEOxkK74B)Z|2+Gp%fy}&obwtX1Vwcg?&&e(SZC+aU5d^ z8pvOI;dFEv8GImtkqdAfVGI7T`-m-o4No_(>d){Fjj9BMxQZRaSUb?xjF6;lN?k`E z&;m!Zz@cnowQ6+PWylBK{l_ix9Q!}80_K?zRX#ejKs0IS?OvK^KCrF{na4D$oAtu|74ltMi)eo<~JxL+g-R2OO9!tM}QxC51@jvJ}yK_a?g?2H`H*em?582mwNqlCM>I%)vUa>b$Gj7z{S408)^bNrs6stb|rHtg7~OVO+T!Dq6a%#}wS+ZHx; z!w;m!PPV59crN}~xgu%qp#D^@RuDJk=<5FBj}9W({AZ$ha0ROrqF6Gl@m{~cjGhqDbHM5ongfmf?ydA( zpVRrKS3&P_xnF!_0*mSBQyhi6GIJ*BB;-R!d&sL~^ByUak|d=Hxf8zp?Y58-zyV!!<)BSFIO<~%HM0F%t^XM$*AHq>b0KsOBY z-*j7i+8Fa70A2c=jeCh;AHp5Koo^TOw@bNC7u(&Jof;pV)~o=AXe_AnSU(I2M0Y&^ z7(c7nKO^Ho$VW_%y~<4<)eE`1{#-mLtybLZ_agr3<9IQMqzck4umu?Wu>IEr65 zb`)$A^fr;)B`g@wjrc`OWv0^Jva_e0TZ)@1dyz7niS+~DSU|=BoDnHsv6BhmcH$*e z*woio0tigD-OfMdOEHxQK(}L3pcQYWMDMM?NH|{0!!-}qhLVQ9%Tg?*(LhKbMPyI# zY1MLRIo4M&vz0)Kw8iY-y+d4x2JnTEqLgQQ7leOWRL*8Hp{?=TTj^3=+;Ood>ebx) zaN6ZtRu^3GWMT`n^ykKfa|wjX2>+aL#tw$9hGeV3;F5TxKJpG};HZ^DbP|hqp7GcG^6$bXu0~`A-~SyI?k63W8{%s}Q;X0vKxC zX9xD`bp~L5S9EXZ%f&qy*U_ehZ4aptGLp6~(-vj4vUL^2_r4)zpzr(iIe;D18Cuq)@CE2#ljQ0Fg%A+|T)? z?26xvpL~VO`(eRdCY95{aND?v2gnwMbYqYoXUx)MU{Gs^r(FQx9MbI}+a7M%rkR6Hu2Ah!Ou#di#b##Z5(b4zA ztN!fcFZt^6fhQ~}$~cf)Rb%zrDspI(Z5HL9e~cmOzWi){_iZ_o)#2ucY8|}g_dHB1 z$|}0r;|Zk?VXRy#=v_P~#$%egj5v8d5I#huVxNa=zObv8h;FTr9mUg!V!jdA@W$Wx zvM-N;&ZjLSyf3V8SalNC2Y{7eXIc;Ul`Gz=NBB{#v=_S#FC~0A z-xcwVyk*cr%&(z8zJdPuv+>9GG9>^T|JUGO-++JpIc_fMr3SoD6_cP`f=3JWA3qr3 zdm8{t&D6k)R~WbY9yNop7iqxc)$zN;GfBo1|G%7ffGGRw|22wD>>(+|C;9mFOEF45 z$P7xAe95U<}jq*IDE-An&E~EZlwo?N4ou%UFt6S{@6=+mjkh7}$Jm zr7a|Pc^twob|Tn>pRBtNQ}|@H|MbHV_V&+)eUjYa zM`aPcGS-w&0gT~bS4P9@lqVjfZZgd4G0&b@MpiGP%TjMEL$hXaSj5S)a< z>KGH%KPt59eA}8Ymv85Hzi>-N{dK+l0j12KT;_suWhc=6cKs>3Z)hCeC;Q*g-ANe% zEH;6h4WV#``lEo+{@#yC(VWH(NJ3X}M!YDS@N@{u3VMLsGdhNnS$^5EW<_- z=coUJ-J!JfU2kY9ZQEH%{cJ~Oa=$I7YLHjcr~1`dHC(gxao;=v_vdt6(;xf<8NMy2p^KlUn*tXBhvGl*-q`r5>jVpr>aT7W@W+QYtjLRo!-ygF zE<)hD_YvjhiMWmd4zOE_#5n<9A{<5{Nm>fM=}@d-w;fTWYKg|Xy7)579k?N>@PVt6 z#9mN$5?^xS$6Th=F#MpYL0`K-_%V`nZeX6a&)b(Z^v}G?@sX?R9Pn4(@kE~JlUbH7e=Zvmy&nDsi+>5Oz2rXfnV0R#gS`}%xVh5Ng_+^=gOI)5s&6qDEJK|mn zz(X#o4mWxH-Un{t4%d5rX-DIk7kXbrc#$Fg>LxJJI>Bz-zNBRW-4z~zw}s9-0sqF( zV}iIrtSK4iw(e^P#<*iN`&3;sI&$%@8gaS!caJs20^I9;4bjBiPCD`dZzy5;z}J-# z#vFE)c<4I1?Vs*cG_suuo{N*qF%JViKjXQ(>tTAgIEp|t9 zUKw$-UGrLz>+R9|$NBdD&qwX`(Q3Uv;;B=Q7WhNI_vdf^bYHw%tO}P{ zLp1QX{AIp6YW%r*RN5u0$A`DY*2LnnHZesJp_jS&_ivAXIBNWG)coP-_&Y{+$ZtS2 z#odSXu0@OJo7dr)I2+%BH*3=)c^!{ zD=oLh>+{ZiRZ+R5(4J+zHosdQjym}y8@)Mtaa0vfwxI^YygwTcrlVHQpqc$I%P57|d ztULptf0}09)}YsOKrbL6ja;bb0MzwhaNT9Y{Hk*`8Q)~>oR@Pps?-~h*F$$`ps~3e z4YD?4(S=1vsN22m4Ld_ViVbL(dV}sH@87=U-=WcI4Mur(+i}~22Ik+Vyxx`r2n`DR zKb>)>+i7`&(tt)q^kXs|^*cij0*!_Mxjhk+u>lQ)02pSnqfKZ4##wJX?O!_#HK9R} zt>yhGpQ24v^zFgVd7ndoa_10=9dK0`6Bn54O=tiF&6`0#fAf+FmBs=RTF*nXO097f}=XB%H$|WShHY63=m53KyZ3<3|QHY4IY#};6R9G8>bZn4FT@6u!;GlWWi~*)|dJO&ew`W)K zC!f8lE&oT)7?968ua@iizO`Pl!~Al`qgqtn_@c5Al)SFGgKWZdet$9=bjNItwR1MX z+IgQ%uaoBNvNK_tqRSOyr9vZ6xeaUD8WAXcrp7GGBaOpK&S`jwy-I3^!KX?fi9Sb2 zX#k&4foTKGGwJ>t756d^F3%-wOs=dq>@sFXd3)Lt%B44G=d)LN=lW)nv!%^ucy^uJ zvkJ!Pb^7*9Lcp@u_T-7%7%v(6gV|iWJ7$@$p%c|8Fv}{PjeQT^vG0--9$6 zOoVL0WU|*$WZ>BYOa@@el&4_vl)joPc`qB@Fr#zE<6qgj>`Oz;5WfvE>Gbk$M<|O1 z1|z8$iwXK1Y5+wq0WboDq)Zw3A{rID_3~rE<)<@+XhDtg@t}K~%fV3EvJ#T@RgU27 z=X^BaicauxEPo9cqnyGHbQ6Z=6Vrh_MIf0d9LNh8lFiV3)X%!JtHG$pR2Z|D`l=sX zS7-h9XwYdJgc?ZaZ8hqBijo+D??44biI6cMNcke@>MJR53{`&RsL~M=I|QZpg|mij z4BLWd=i=^<#eA1Kp4C{^n*?yrue#YahZ+;>4_IL4^C@`+>w)e3m0CH$RLW(4y|(jl zYt$J|1|zO-+8uV(oDSRBg!TW5^-}y1U!6GilpRCa9`fp@!=%FZcK!`rw*Z}CHkx#p zZSrPzIhgu9oKm>A*{G9UvWAUsEkzsTg{}r@ae=_V64QI-tNCK@FRyCPeU%B-@CIK@Ff6pco8K|?7>R()L(=d74JfQc zl5lS~8eceBky#3sI_5S&BRnL+@)QcIZRkn#)|cx1jRcS1%~`BE5Pv|K2Vc(?q?>#&53y&5q! z)vw)RLdstoF_`+-Z%3s74v^nHz7;PKa;=6B!K=J zjb7KyuTo{Ex7cpi+t!l(YqHMotBmV@UTmhq*eEQvyoRe;&V=6eE^2Rj5tzW9cM;IU zWf05${50FI9~O56b-9E;%(umT0)p@WQd_Tp>QJm!(MMw58wKi7YIdbvUY@4?X*Fl; zMpBr{L6{W36)Hxj1`#!WPa~o@G4T8AmHJ~WA7XOLm%cSAm^1N7B%Z(oG^)u&kb$k+ zohQ(_cMmPrNXt08>>V?Z_~&>k=3v(+Vhq+(i9E4C{(wD|p+k_8h||^MuDE~oVZjXQ z!YGp!LxI`9`^9{@{B+57kA#-XO08a*FoeLCeOx>k;9{PJHbPm;g+3wp<#tNZ!(KG1+#l*+K>9OE18jbpp9vGK6FZ`sB;wYq)g*0`t`}-}mzXPzX z`G%W7qhhlp1{FXQCZ+rfepnQymo)CI%AR3JWi8&VHwomkkMqTH{&ulk>_6Qub_@Am ztq=1BVbsf!mxp$4RP)mSZ62E#Y`lq?SRNEEx9j=+-F&w%w{EZwifgGtwk@;E#M8zq z$BI#XPo47~=Kp0LCd$7qR={6(yud85RsTix|Czo#aCw`<&$!H4)y9+^9B zl~SLXq@flRN}p+;|3G3W|1+5y4`Fqv=@85REV~1Yxcj>U21p`@VlOx=#fmFSbq2Ms z*rSPT`5weJ7rqQ35`k*A{HHYV;{B?)|GC(%nQ;2^)sU@&V*9ZOodRmnJ82%4-uY=V zy|$44Q+o+esnIupO6?w9E!iP*vgU$%TBlq>wfp4~s?oKPG0R7jyl%%JGBvsdk$G~b zem+d6em+d6ezrOlm2!sJn~qU#_@ac1jz4Y<`}kbOVvf=M`JSoube$4DUe~1@aqNB? z=`X-^+%Y|w_;&sFai@~XNIzKY;m!a3^>KdR<~#U%#$e|`R$=e1!>;Y>r(C7nUF<%i z(;TTFrj$awF=VZ&d}!j*-f_18xP*M}wxuL?iZ381WNE(za@fl!Nx^4&mWA~u7CKJV-m z1-4tI>`Xp^1mt&yqixLg#bwc2KWrEStG&!olF}8En5`*l|P;(f7gt(WVqfk}k{H0cXNBcn@qvD?SgC8R6z z(IwLOMXYSi@Vu5UVC4rvX>+RqRp(Gfp(1w)yXF`4HsPiCn-9yCT;Txk*PM598jT6zivCl0+f*l(_zqcU;N%NkN?4pQiCBmMHf;!30#AO(Uc#; zpp2*wTFKM|zqkJ?fw4)#SL)#1J8^&b85}KWOh^3VcE|uLvmsisJ*n)v+p=fl8R{+K zTrrQ+0OlN*E3(c3d?#fKv;-`rQXCugE#a_KO#rGXJ;0TvssFf0Xzgyj-4;Cm(*3Q{ z`YGx~s8g4KQZV2wBUH>~@&5nM-oG}tjU)-9@b~!@3h$R0htIA>U&eDf_5(yh64tym zK+1McOfVo4lJGQd4U)1oZ}|N7w{8IHl63wiPd{md!W{u8^8&OEk!w{2Hr--X_^<;Oym0d96(~of zpcZ0`rX$);iOSS%^_oI2lmHH0AOwKq;#?|7j!WX!HE@%JX>>!Q7}%ykul`Z4P*^Ku z=?oHd*n5$Wke_%FM?J9)Y_8~d(#D>$`cHQ__kE!B&gdz`6u-LUzdlQYiJHTp)j1=eSVx3$I|OY5I%=w->+x>x=>2KC z-R~=rfG*4&5Qklo5s=y9w8DgQX{ePlaR$|k1FJ_{Ld0qje1e9VrIJF)ga}!{-klw& zr6YfW`xRgF#s0wr@Q~&A55_HzB~AumP0HpP{(lCY05A*Lxmg-*5S5SLMp60rZ5WkL zs#X$`no%m$DFi;4WNO(h6sK6WRs-Y#QIN`EwUKMB1n2>b+s)NfpIhg&R?C>w zM>Sp!e7XkqfJuR#W3Nz?jYt>GW8~AJvifXBC$6k1jS^5ZTl2+3`ha zkD(+Yl;csZ=VL!|I&#E-FP#n>S*t8I`n8ZY>$LhPr|42u5az~S3*|iIX)6LG5mW1; z<*7k+THjcc4w*U~DRro#d8Q*=h|=m=Q2D|cj4R&0qNzAL^GE9XlX`25*;P@hpWvKd z`_nB0e@*kf*goJ|Fs>tYQa&jN`o;BKe$QWD>q0&OP}tC7kd09_Fvkwgv){2ODDysk z?{GY(QX}Z}NcoKwyscjBv@)ZByrh(>8|6bq-hQ`H>Z|QCk3e6kxw0F#3pM58X|46| zB9WtNJPmSygb0AQrUjI?QX9&(reHmfqiy;dG96TGr4ZXb`7bHu1}Kwf-^>$K7rN#I z;hkW+&$%{kT)~@nxB>O}ttk^<5c#@d_f&j$=4!DY_hkYk@5)EpDNfIzt~BZgIt9(acuaYi`e zUZYmX7unx_a<5qS4WF#}!`6>%ksG{We^>k53V7O^c9e$=x8CLPqq29Q>cH*0DI|{X-q@8J;M%f^m-A->J0ky%8n`m& zVk66L-d~04x|GJuj&-i)t=72_#~=yWhXhH~4yCoqqDOm*O1H|f=m8(sb9rak_SDX_ zw`t;hZf{({HMg5Koo9ZmoRq~_?NdAX!V;3rKH;aD3fSu@&IH=A-@v3nWwDw?=oZMd zPd(YNS5KO2v|K-aS|Zm^n5Bq}iZc~i?Eu%m9k#V|3Z89%;i_$5PNB)c@04NNoTeSN z{bo-8fe)D8{pBxz`LF-Nlc$?7PNLCpc0PM^mha9|oXl`rZ1B;#O>uUANQ=dPp7l0o z>&^ZQTl=#d&AvBhsGetYsM#zug>1QI(z*$M0Sj?JE|z|9yW*N;w)W$O`mpWw|KdN@c8;K z>a3OBn~gI%klV^HqhW|9ki%IoO2)yYdrhu5zYd1Ieu(C(<05~=(JSdbO_rPe-;_JX z%LIkQJH&}VvuuHVK=r!uaWoG5xU_B@1`}M@%P{O+1YIPypda=0mya7TgYmc@b?M6* zEa+aNIz$thWXFZ%MUaH`_n_Mi`(aFBByw+E$W?W#FPC?LZm052W!lLcFE%Ge%p_cx zaJg9Crm@f+^CldAW07@=339f^hhn?gWokc|j7I(0cp8sKsJ5iNLFKB|UqBegqss`@ z{z|Xg0{kQnx&ZWB7&_?nBFs$CM=}j2(>P3I%nvZ;VAP8)zu=NIi07|i#9nwYy_&`0 zcoa_eL-gjc(1$Z4Q`8dgIY z28Ic{^i`lELETdVgS)Uel5qj~3iSK8T$isi@8ZOuXzay*pWWgveTN(b01$K8aid8< zfBMUAkF3hP@@HT$!Sp4Q;3}MT@W>rvu}%B^W5`TKbIigr5=l@l>JxwjJ8ZbmZ;z*mrF<0!h)-5Y4_Xkxq!BvNtu4@4y9bciJeNRxMy%Ir4mo!TuMcp!oie^IGK|vmUA*kQ!M7B z&Zbz@DI89*g!Y|Ifqu)5XWO(@=Tj)5MF&)%djcm^pnn2Kl&9aOGg{F-fkRr+ZrdrX z2)FK-R+LZVoT}nJor9{1|D;Z;+9>T4sD_FMQR^YeDvel)Dsmg5jLR}8G_zip); z(w(ss$ML9(ToF>r@TM%JbGkyfs|zD!OnjxDzrOaeOpAq52SKyv+P0pON0cbBVXf4YXyZ%j)t zN@b+)BxtQm1_<*OvQt#4T= zsZ8mXv`nN1;b0VhQQ6WhUpdfH7}Ks*IrP9J7>xU&WMz%(R4zo(*oen4fv9nT%7ds_ zedFqs(TwvubS0y1OHdHKniuF9}^p~<1yCQ(0x%-rl}G{8$9 zdwZqS6{(8hJv0AuY#XADTpFjnPEqrw?Qu48ah$d@J=`3p%}O6v z$7yS_k-OuxBiYR5aoU7D%I$I5e>~3haoTtEa(|rm8U0)!r|myyH^^zL&)pSr+TrtX zhn#lwd|V=@ExZP9k=qtt1J}rH|E`I9mLK>EuJ&AWm)8T~gT~!%| zps9vs02MJrPMM7+w6~?!!LV3sCa-KZRkR(pwLD4JVyS6s_vMeU|qj0)qp-^hV@&9$5g;!TkRdSI`(k=|3E5@K6294g7k5`G+Rj@!4rAg4 zo_V1jHX)~%^<#MhzoXnlQDkD<0C1wJnzPOkWQF|^xeLkL2~FuLedj}S!rabB#csL% z@!<$TaCB>SOTxnX0Nq)U5Af2w+9mD!>~1o>7$8bG+ZvkYhlVrj5G2z_%~u)K<$R>b zCv@zwh5*hf)9g9;erlzrwS$8LiIJ&EW=V)Wpa6N{<+x1Eg>po=mO@P>nI_|K*fSnn z=AEi!Ixrqvu3^I=>Gb{ZD(HThArI{u3_8Nk2LQdQUNj_|a?r{GfHp=}ryqPl|5t_p zOyMTz--NM*gjSpb4A{X|i8sH+G-np45_ zb}N=r+_dYe0O~hiVNk{1!C+Vxc;XXG$|Ki!RAiIdDzMAC_UJ>L%|Ain;7Vj;;=yEu zMoOnGSC2BvCCW+oIqa7%kIPPMgL)XsfEO%}Edvx8yq4)v6k9I_>jAH8dJtEwhTQiIsBCc^SuVJ^>bkDlq#Tz6 zIHu6)8$INS;;%bhW+d4(sv@pMQio0oHj_VYT z)51L0DLALSxvo>}&N1^{r&yjN=e$l)J*~`poq~K?n)^D1`!t;YI>q@koC7;W{IoX@ zc8Uf%VlM0y&~wCm*eSrLorx-6)Q^~~^5y?7CagR|zl%vL$I$O>;_4I;(QxwW6b#YI z1lB1erM*e45-oq?iL6@?UaON?xA4677WJIs7h9V@3mc&=%%OErJ81eeO?bCS4G}oH zY-W!^4@wDjII^ryVRUsp;id!CAp>KqrGE+P%tk#makO(Y>f(z9Cf)0D_ZB!Zacm)@ z&!zH}RT2s^A7AnDKf+;x+Mhddtj3MBQv{o;^`jsu8Kr5@C3x$JN-zDBB; zC?&pCO0?Y?Pj4qVe{3v3HwzQD>8lRY-uJb!2n~UXU{;L*rk?rP1 zzTIz%i+sJv*Y}ZvJKZkQeHPs9GXkR}wUsV+=%(|Bth-t7i_KDxRHu{I!t5T>1-?#a zwb^Hr&2_fiW<|7qWVhv6&?Z^2%Gcz^Jv+wX_P*F0w)nb38{_lMYJ1pcmxtvtVQBgW z**&f255;Dk|C=z-(E{#~0vzzgU8^m=aR>jnmWgFEf-p5eM zsQLG~sh6GEI@+0X$-R0T8`7GD(+4AH`ppBhOEsrzBSn1@BJ8BPFaf_UvfmDQkuCUg z2*l1(n%bWoSRAwBdzE!i$=C{3X-I~|pJYuc$@WL0AI*$_G1=_XWi42sN1S1^EOnm` zXsDX5clrG~TVRvE%nF?G$D2lSG=)L_4e1skvqpBODXF*LFtKqu|2112TQQ#2aTVk# zwN%mb_boIXA#z;R2#J>J^rq87od}WR>O@GiRHyfETc{Hua$KDViI(bw@D8iP5_uBq z`vec4+ORjqO{7^`-`W2rl0y5C?trnC4F5H zGjVcYzGibybQF9!LGCX_r!KF4epk=dz!{$AI>>5fXS^>GgWS<0CZulmo0u0w8}I^v z=>kh1PU-b`_(ojgY_wK|dRj`?ui(k)nY0$9E1qC(^%W`QVz_I3%jZ{As)sKS_hSO2 zvolM)mZE(fAknSroObceu$ZK3zm-ROHOW@XOFvn2W@{Fe!rU7l=5SFe{OywTq~QxWAFC09&&)|%{_*;rhrPg!ARP;Eo80bKP` zw@CRM%Bf!<)oG}WTYIg!+dxlSMPZ#-tq;Hl#JmFRV!zEc+q{mr6>m$8v)>NcZqLl> zcQZ$z^r72V-G?8K@kbhfw70(E?`#zQZeq|umkj#{Csr=w&IO=t4xB>urK|B5X;I`^ z(Xlm|OIv|nLcMZKD!D7>&PJ%em-P}>@r>D%cp3)$i7)H5Oo-%6uW|POJ1Ai1nAk2$%F-HS4|n97KSu| zYn83NvEGaZ4Od9Zf)+lQxKB)*=g#A z=HYxTxyf1?8zD-8V{PM(>ia}FT2wJ;l?XFdUI>C?z{LaHLpyz9v@2j@M zH32#d(6)68e3A)x6fQK7rf^MjP*c&B33wEaSEkeDQFTvL63k$5n&Gf0AjSQhco{&6 zG6E+48jkFBF-90Y$NGjP#7V8I6UX+7ld&Tv!FPDu;Ms%x)QV|1($Av0o9&aqka?J5 z#i>Ug;mGXvBmd6=Ax{YiyYL{heX31@%``ihW3e&7sSm2)g)sSn!B8zN!x3%Y>>e)| z=)5LUb7}!&0=X-PE}`PuS(2rpeMF;(M|Q*ecv*GFM8v%>;c274=_yoIozauV^CKV9 zin4{@_SqT)&BzyS&R|qK0^y)_cFC$j1>_Sc6CiowRssQYJU}RRdL@v z5^boAlRk+XixBPS7~ zq^h*s%Y3<4`pX@8$?UcuXss54k=pPP|lc^bs;(%|>5|MiTh*2$gb#%1P*M!HitdF;Jps z#EDq}0Rcg^6r=B)8FW}0Q%+5tws)QQU@NfFrmbKT;kb0XW7^*TxZlxd{n|e0cg!ij zCP(~Sn%vy)KNa~tv+#VH;Iah{vZ`7aLa)Q+T)2dH$xDR~F*sRQUhm1aG<+QM~Z z(IM;>Jb!)Ni%)CUOvk=~&{P|fuy@MNcnAA^I)A_s{wLYWCf?aio_!Tz^76ICm&{e~ zl(~I_&7w;0fIk%VYfIS$=QldAz=MmN)S~Ne(#2@Y5SHYJ3X~v~%u1*o{ZT@7mswie z;C*|6)p_;0ba}y6Gd8eKIE!No>l$0U>H`AjHmx!EeBS}4S-k8q!2tDGht(hUknnD9 zI^lxzh}6I#7=nA|o8_jcTLGB9XxfTSWV#~y&I7fVZTAoL2M^2y&0gpElE?inYl_L0 ztpHDL<*m(Omp)Ac0}7jds@GD;PmcIP6fpg+h2F_RE#beLC1)RedQvuy(~dc6?hkdO z(Q#xA0E*TR2w{)&e|Xs?@8L#cfm~u`9BqJ?>M;&I6_7QEml`s8>6DR4IbCg+8DUu% zI#YyKun-Umvjak;bdBhG7)D7K^BhqkK#m&S@fR(BjVsvd1P`459+^Sp$n+s?~Wb%T1iWCWKI&lge2fns6p&dv(X7s4fDohO6r!Z1Gw83f56KEX)(!{!aUlD zvf1wQRl4-Tp)rOv@OP-rc6}aj2|Q0bZL_5cg*fr!|J41^nhghLMxUU7KPShwXvw1C zi9-FP5cF!riY=ybD_GyHEb1%89l`UglYb{hI5G|S>x7cm7xv)%vftTr;ec@}b zsS8(mvTbo#?$7>u^D!7lv+*Q8dpW)w&K`fg%J!yIBY*p=tUhO3;peMrt?K337UPoj zomZ-D6v#4IuAHA-n5Dv!vN~WE8EXs1QYmq5{)d;m;A{9`xnxO4y6JLBas?qs_I6Xe zQc0rEGCOrmux0?Y=w(P5H&6CzD5c36Je)aq6K{fap)LSqXmtC3koJ*Iv8n!iRUZbW zFR#<}V(C_a3KQ=i+huq416h1Yx3KL@c2^4|%J32O!VYFpIWa0d!udqZ58)jRlx^K2|K$cRdLy@1FOQ!WZ7VZ1Gt^G zlsl)!mD+OWB!N<*U5s&J^8|Q+F3*}dC9r(+NtzLLmmmRceQfvN^@&tJDW$?U}1OEY=SYX9Iz9g z;d;@WOIP2idsr@UES0qx&}Rlpx7_C?qGLgq#b&*~Oy@2oRj_Aw6_#T$$j3w$GJiyU zVY^vw?w=frQ*f|nDp7GP9>-2W%qWEl;Y#|}~lt&!5Mg{ViJ|*IS z)D#Cfy4a8smKIr~`V@G9nticrELa8IwKvhAnqp zUbDicn$QWud83`@()M@Y*_F~mjv zW9!K+u3H{%?Y-(emK!l7T((5tj)Z-RXIl|wJ-Yf+u6*%MHnHa-Sbq1U6sv8Kp?*Z~ zg`vA|H_&Ycp-;N3X{&45);e-qC_l26F6-gt!*8ru>&NY@v{FBx<#cX`MQBRHE=%>4 z+bzfHfIMu2LXx*$T9MR=6<6AWX-RoKwXj5U-=V2@X1vv@+?BBpw*02dUuzbP8#6*V zhs>Wne!E6c0R5It{ZyMbWgwTdfun!QtsSeva63D#>bJ7{165Di5OQLdZUVHEU-P?Z!~qtbF#`3VWX3*uvH*5a(@?Rk?L4&2Q>WP%UP;t?G|S zw_F?GRok&HS}g6xwq$Rh>vrKs-PCpFn%kNEF>H%l!_ItHdxmX|o7Enq6W9FivNO-} z?(mNhIIu_UWU1wS=4a;~+UfS-yfsx(Hp8_~wM#ByIw%?2N%zKMyY1e1{EobLkC=OQ z2F<4Zvn!N-@87*kS3CGWs5A2s1YXXu5CHJ(%xmKitot?QXo7Y&OKlMgqz3gisU{cz zt~k7D?pABfj(nSy)qDd4dDHC>;b|L5ECzV@^AVRf4oJQi+F9+O;{{xRg=|Mm5& zv-4MHZ(p6g{u?4YPWSVNisJ5Jb676U(&g9mX?J#;ouOF(=JEAk_)_p4>{tEKMbMv( z<7gB|lP}~Fb|$j(_tW|iWrmpKHY(~HuV`n#$R5(i9Epb=A^kWTN8_*`4Z~SHx|k-D zVVESdi|OTM7|$-k>)-~JH|vErQ8z^YTn5wrmV|3{3;>HU>1JHa%hCxNOqnDGOXhTC%HR$c4yOaG z>EHf-Ngpv;p{8H`x4d}b~>_~eYM=&rb{#**cAExsqSb$Ps3@b z457ZB5)DGk!0XOi3pC=iZWt|y zQ#EXKD3n7rZGy>^!l-1aK&`44KrcS5L^)u0aoEXLpbezv#WcflmU5-)ZA#fnw3(ExWRH@v57Vwv z)|&vZcdJH#&ef;uRl2QG0aYeo5DrH1m)UeU2*xv9_4o$KAS%1g>u;~=Q+I3u=sw<4!P|RBrdt*NR`0;^q1Wp z33gr|Vu0ZU2daxq`y@op8S^q{qcJk{Ws@RV31Xf0`^S|M^zlgALrQalO1KFVxrolu zMbyM)+Ha4heG`SBX3?-0ex6;%qd_?npl_toJ{(_@C>aNn?)B^XwIMJV$8_3=f9LEOjQ#AF%|anYECX)M*P(?UV)C>63_s2Xhg zP!;llity+{loCcmRJ*d6x39Tk{v*F*hrGfe>1G$geC1@+PiDhu<( z4@7TUD@|vZ1^J%NILpPfZJ=fPr#I4ai6=1BQV}f}Yvh!Mab=-7wPvkyd!Y~ocSG+JH<$SA7?zdcpK-To*ElZmnL52q@85FuAhQ|fsuN(z-q z%w2-qMch9$rFU8{ofd@r!qId*yGCvjvUsHdMs~L!C_U*zD?FgVHo~h1i2ATc9bRF` zdfR$Usq-=zRVJ@0?7SVz6Nked_46*{;A()zDuMO|pmWtw-=`Z&hY5t!fSSlKVk7B=QtghjrESwo2`VNjHwh z6Qn-nW;|E9PHV-WnHjMK6;T>CG2KOV~IizMzk zEvWj^?IjbZRa8g1(_wTuiU+ev_&Mxz{l_{rYN12)itoYU325^>HOSfE5cQnPzA-V!}i)*fm8}-5w8bG=@AOSL}x&^f+^dZBl zTQ~EfkEWnH`nsjDCiDUMXcxhb9l@Q}x*Q9^Q`deN)AiLBiYJ@i#4a`L0tAKd`sh1!exQXkv>@fpw1~WtYLID6eI|&J{)7e@irNYqr#+r z?v4i51u0iWz?*-gE`Mx-la#Qmp+t&ZZ+0{z5YA_$#)@5!s`&BlXpG}(2i@_P*@ZL% z$B|<61Q?7!4}&eTZIR9K^`&R&GEaBrLTFT-o`F|(9_tWDGZ_=>ghm7QUCRbZxWw3j zEeA!}DS#Z5=H5wq((e4kcV^xTq0A&BpZ=Oxa=C4CxV1|6qaH=iBWvTg0wqmk1Y*JTUOYftN>;ejuP1oeJ@m5OyvVnEEK2p>SJ@cYudOXHT&}DI9+$g{ zg@-dUZn=d>!qCI*IRBO*`;*OceDs&vPj@1#^xF-mpEhNLDtg$G#8t!18msdq&XiQ@ zxF;uLp&9i`0X$muC)p-gJ`YsKbpF8Zhi!rO;IQ21yL5$(NJH9LS}dO~i}W62a`d_z zWH#_sxOd3jC+yW>jc-+NOrDa#c~x*Kn2YRgQ)JCaFF3&_U-N(edzp=}LK1E8A++5r zpYG`)fbj;Y3cb479e=%9I%mmAZC83uI5 z_)MN>@He0v*|YmOSLy`j2h5n%7BcV!Rf@ zqgLWlg04;wSN0kyr$$d(q5o?ZJk(awO1eQKxmaK4W&$j(VG`_6F^kix$f*Z}TbiO-Cx0X(2={Ewy70oI~^Bvu8qn{~@6o_K4 z$lv03yoOg&-;gBq`tLik-uGRuj=sJm*M`-MSZxJR>pF{vL%r*oe^*(v>)e3bemSki zi5oqtzCoP$@!#qI4Ah{_Rr0o$#G9>udo6aiv$E~7jBQp5vnx{Viv(zBGIvXJpEQrq z_=XkSP+EZbX1OWqZ5UvDzT6b6lrCv*yCO9GRP}cHQ*Lb;TnoLE_nS)i?~uG8q0$BY z1D;%N4#hm{xY|0{BNDooOdG$=rFWE7g$w;6sSN7u<~jRxTph{=r8~p&mCRe-M^eD~ z>QGfss;#dPRDTYHE@qqC%3+yNXf1_2p&`GdjH|4e+;lz{m4|Qc)L=ptpaSt1Ho$(j z@&wgFIqBtE1v~%ZU?i7=Umx&K%DI6L`yeXrct68DR@q`#Ex(Q@du@8Ujq=m_H-^v` zwRTn>%|l#e(fjPG^3x4?w((5JrZ10YC3`!0%mFK4tTUN{)_7!g@;j|HVHGim+Igo( zA|WAAt@J3&&x4V^yGYB+p??2t6N2{^-|u~+3BmhQPY8|-rZ_Tk!Zl37ELpQ<#cM-! zPKlR&4sLQZ_qOuZW=_&u`i6~UQjt2gYB43*es?0DfozCv%)R-N&|BXK`5o2;pJp4fDTOb%09E%E9KSWQFe7BstpA8UNp{kH)N5` zp%wj>Q=m5C+XHT2xou%#@#{%2#IBlDYgoNWmxpTaOBRDpR)SRBSFzpKtey1#3=)*S z6DX3mtbJP~TRnAmAomag9fG_!_6h>QwSppGrrjT_0>|j zYEq*g5XSyzgeXL)j1YBcaL4$B3cleEtM|65cO&l_x9OpA6FxRQg|DfH}peq1G;>y+r#h}xsH$Alwf-w@d zt;26<+O7wtpZT3&t_`&NJChBCJy}DU?D(GzrL+OmQ24#jq9>kXs0W>EKp`N306~&R z&w|kaY@HUi?>q@9vip3q2Bv(9=F=HpOyHSm1Ldg`ywE~_1i|l$xwGI)*cJq@XtGA| ziaafXcU5=?i95*JLCS9Og(Rz^=+;$yI*GZJaE;l`#M<^T_KQk(l$S}7u6Mb8C(5I# zVXR+-FvZ#)8iMkUn$2Ue*0m31oj&2eGRm>wn|ZkI?NA zfSp0g?q=^`KG-el?22@0JY?~VFU#B9+3#1hJ`(VVqWX`SUZnb*Sqq}0)h}qD_tTp-HCh9Qj`(w@i~1nl z7XIXHg2mljyA`eyuYo(k*a6tWpPUu7+AeixM%iVp9FeW^sac2d<3-tPd|C0Ld^)}Z zAHkcvUH1}TQigH!C6t-CVPFDh?NnsoCwC5nDXE16W%^okpnUS?z(oY|{7fm|Qvloy zrJl9`JX98WUm-{%k#Xun*{t8;Aql5UU$dO)?7orFnm(S0*&b=4X05epp4LvyO;fsx zYreA3)Jap>YC>hLr)JJ~Touhr;o?K5km_=%avDdfB0sM@nSdbottFeHPD*u;I$4!S zXtoi!hfUzTht$d@`5=KaW1)dH5rAT?f!VTuWAP4fOATj=_0tJLnqfbG`}rhAfE)vz zzh|1tw<2%n={{y$n(=#80G{xlrVjc=0pqHGllvnr3ba}Q{lWpKJ=!G%r`}tyAhgQ4 zewBga99nPiH#zMy4lhYaj6;hP$JxshS43UEa9hBz&sUU%hjtt`{Za?l6uLzZH?D=n ziuSmMmq#S7p@kAJu3Hv0xTKvN1`wYtRQjJh^`*Mx4V8d>fBiC8pe8ktv z%yx(3E=9ENs?zEy8NB>{35AlM*?`WK_m4CovNx{NMI45DLzh{JyHIqWgWH!x&!9mEKx7Y>j} z5y~a{cwH8cuOm6f|2N`xN5e@poQ|f64&PLdK9Wg7Z@&4$;k|jUFIUB@?gz2c*U6n; z4N_f`BwP<7w(w7i29V>w$(AZ&tpN1CXr#7S3*)N`tjGA$*&tSwfCr`55`USE-*5=D zhD4(H@}YAOlW1=bH3=yV#_ZV2gwfu>Xx+%j=35Z!V)FOb|In24&VZpU=Dh}~^Sbj| zQ_kN(lSm(%{Sw zMS;GT$3mQNO5XgC7;`+5bB%(cNT2weCi<3Om@Efzwx|G%m}SqZB~pDZ(O@O1Sgi^a z;e<%;I!TsX(F(f;`H8m}k`}?S+ys(l+T*N*nw{@XNZu#TAx8E+!U*;e?;g`fOZUqC@ttaVi=~mEfoUCQFhRnp^5Hn1 zSx(7g*sasPYz3k$`bSkx8Suy|a1-#h>cNq$Y9Y?^MIdvq68C{z-y41&kKzd$id_Sm zl)hT75LW%w`cxfSG_bsN)I6npgtbAi-%F2R2FjH|Pg%gLrgno-3P@4}!z1a4_fo22 zc8(KtZJq3oV85P4(2`+lN7_foN@p)YSwR-`S)^9m+8-=1C{dTTV8Et}rE_-OjmWbJ zTpAhvNK#iupptiK6mlcMNgUdu`I>I$4{5$`X_KZR=eSK%!h;(%pMo($h=%G`&EH?^ zft9VA7cz6|R!zl6o!?homa0nV#vxw6NYJEuf~LvIBpBjl<%n#QT%nQ^%R-e*2`hZq zo!F-L3f^EkA@anF9052}e`_j~?sG)FS;w-bqeJ}^AT$X1g8>;SMHu7#p+Ptp#b0Kq zACJ1h1UHy@#mtjXwa(dq1AU>+OG#Rd0@p26Xn4_y-93n}lH>X~sIR^7CPHd?6_2K4 zaZ?M|wr^HZJ#vg>HUZbLIu6(gl9y3UZCsPptP;woFM3L@ZDl12OY^!2fYIfaN+_0P6)g8& z0?Re)UzP=>y!y-~)Wkt~iO5Dnx?au;oowVAzMu*%8hxIuQfy8V9 z%W_f(g~DO|S$ptbeCEr1yTuoEvU+g-2LQcUE-HwhAhXUoE10K@^5)o`J+I-_w)@vK z-zV8B-9BszDC=qUt)#vE#ADd909P&)M4FQ&p}wu&=#!l@CRpT@pkqohXa-B)mzl@} zDeG@4@wBlXIja>F+KC!tC|{SrnxL>u*Cpa}v8-wSoHbCHPu{{NRI^}C(#T;(szABt ztkL_oLXGzMD&zA#mtCMz_3}kEL}k)y+g-Lc40;QeP#xb0^j%+l{f#xe3jyy^xn$4u zOpxk%3t?%1Q7y~+p#`@~$Tev8j4;d!&sTra_+AcsEGm+xH>JqT@x+4v<&AnvYF#VX z_A1rd*=5U(vMVx9!qRn9$K!lef6)T@iv0D*YJ5!xunCH=Orbx54Hxv1zwpU<`|Oo6 zqSp1WANVhK4a|H?cC%8+_V@Ve@qr|-^<{_OW)dh>J2d2%^4W2BNjA+**dwD08&h5h z<4HA;ys8EfGI9vjimLI|jb-ARvtGd1C9kN%&*f_ndUw5Z<(>neI)!Sm#h|pTST9RU zrh{q1pnhXeZBB6i)of*Osw%dq+GN|3QDhgWFI(HR#00CpfPavzQ239AU7%yObQ)&{ z+XniD+B%(rx3*uZISry1?RL(C=W?kGJ|V$Ev7NB0N^5)I; z#{IKt?1#-)0RRtW3l{I>67zQb3s(&YBgnr)HYAv69EliTsW z8_0u;rLtant&ujoj8WSe@MmEsUn?m>vwEY{+q!SX6RxfR;_EG%4zV(e`kM=*20n$d z4SW(c)a|NhRh2YR8E`9XRMSgdG;sy1e4P~Y@rEW#a6?JI0Vu}k1zL*7p&wd?h+wNn z58uh-R}TQiRu6>YR}T(BwoNYEMjW_Nc|QtAkl0Ij+lRp<`*i**w{NN~%EXrgOX9QO zIirRI&1wtCkTB38>QFAiu3S?z+gpEz0TV;$1_6`$c!U{Ip>vniJ7VzN zgNeu-Swz#;)Nw_3%Z(vy3_thF&273AjJ44rL{Ey}@q>{iYD~Sl%b*Ny`;N-Y5>i8t zqj6;ChoC-H`vefl8m{^AGOdkkiC=|oGp2cR)hQbG(vw?G{e>zpYH|(O-WMy%mtn=t zaoRxQh6~ocorJ9v)1&i%jn+V z>U-~?3Jt{igXL(j)C`cJJ0k9(D!o1~diq^MCzIRm;XIvUdM~E4bZQ4cUP()R?&zr!*@kI;U-$JJt_zVUDH>zyJ>^EI$w@jk zCxeqWRaLUx03*)Vvb0R?iCOou+CEpTl0Db%J;A4j&y^FyDuT2V^+H$p3&T>KThzJ7 z(FVE$%eBLM_xM811PPw!d@ zpKdi{i!lOG70mPHcb3E~mVe$OVOS=hUhvP~;{;YL)ASu!#ALJ-trzQ{H+5?R%bTzG?weF~g8h11fW16l3>5iH>9R>}D_|5FP^ZuL~NU%Jx8a1tB3 zQo0ybVnh#a&dq@(#;OC@Z{2HtGyaD;76rz3jYcu65foyg!7yp*L$O(<$>Ek*-h6#; zQq=2sGzezN^n#f7Xn2MC-%ZeudOCGg5eB2-h`hE$AZZD_?N|~Y8!(})E~=&gm~TM^ zSK3*{^lNHETj*OGLNc1A)poN+PB9|f%eMOmqh%V5kujpC6)F9Aa&2pI0ONz3aZnM@ zEs3fPm{3cfyD;n7H}$eKbWZ@u)L`ZO|H;%+!8o{x`Z%3)(J4F}`vAc+zUEu|mARV?3DvV&^dvC#5TLY=l~^-w{ut77f)J1Zq809GrZ*|3nY zB}2dPM8iWJ-0a#OEAYPr`%2M4yY?K7H13Ru=Z8@O+hef5RQW1 z-X_b<-j>9TK?n1F{+PuX5(GX*Jf@Ws38eT=ep9D#Ev8>W0K2s4a>bh|~imP$l? zC&+>G8Y@9??*v$>-{<8!5h!1>ayg)UDVHmyz|6&WoaO)$)mv_=tN1v=9vpH`iJ#q^f6Qo6sl^T7yJryf9ri zD|dvy>I{H5>Vb7;qo4SVlN3~St(@2dizYIRGjiY;4+supqQh|L-~g;h$t0s9e-c7v zs0QZW{-jJZ!K&zzO{$3Pbtj<4n#!`2cH|=mrybVmXR%vqfbfetX{ENhHvMRFqUSV@ zqMXxL@Uy^m7W|!awXA+6|G_jSaqQE+D5hvOADe+Z99uDk5Z&9&xJia4mE=UWN=>B!Q&Z)y z5vhAiOt*_x^9chwc_2k3$eLpnWYa@^MFftt72#F~o2Zeu3aRP?tWWX?TGi1tw%E`r zo=)Xpb#pz%h@XP@HgwZ>$R(jxLioau=4u;ho3mQLb#F|^CR7_vSuEz7>${F2{UQXv z@cA60t7*X%stLqk!!w-F4B6pum~prk#_Cs^X?UYkVKDo^G|i(5w)u8hpZcY6N>SyY zKCr0c4n*@j8Yf4u=@VmW2lwWu;iSUL`mi_7xq$6;Q0**l8{1C`Y@M<+;E_`nm87UE zrjkK)w~E1&jN@u^c8iEAlNKp{+BmyG6}o_EH0}msJf>TR(0E(zbPa(asgu;-+^S1` zD4*(@d=1#cu!%_U<4}F--;KKbDJ$S^5H$RDR}13oa04#mvb$NW()EI_*W(q=`j;d? z)my?kk6*gU4Dk@M4%CnX+2=v!3$L7bV2;Kyd_W!x?ql-nA8@1^a!%SgnPywl5by<` z3EZVJo~VA-3q*B(O}k>VJ7#C9YbMN*Yzqjr;2{T&Zv@bZb0BrHLx0jB-A?{VgQr+m zvfZZ(} z7BkL+PB||9jwSV6W0fi=c&1iLN1UUW9&!GnssS{c<15Ec?AolHG6ihEYU(smY&Ut% z*k<*>*=74xglC|26``r9{+u`I5wk^xqiotg#VpWO&UDjIaCU|fIA5$eT`V9N4;k~t zt7nagG1-1#mpfY28(++VVQ)5?PR7&8tUHQ^T?Fb9jc+B^i;@W<2Zr{`LHQ~% zuYh`k474%z5RTz+0|l>Q)65c{CczcCNIt;lp+ABL`~=WR91Ih7q`+PF6nAuaNsjrr zi<#ol6W*E<<>L+lW`nko1!rlNItI`VYd8-9HMH*?seV_as#}RVJ;NaKZX(F4c5{>y zmCx3w^Tw#IE<)oFx!`Z)?R74OoT)5YYV(7_4Ma^+5QK08hY=8G;h|s-k>@IsC2-Az z8mH@fF$zW#4O>2o-Cl{5#P1!$6OwFy5Mva653vz~E^!*CUs$IY1lfB+?N<6-%0 zx@OQAc20nI`^A4gyzoO{g%Lc+v*Xi&;?uyhXgKS?p7oIz>~eJ5f!Mi@m~wVo z*CgZ?pzdTEvq~cGkGOC@L#NB%dQhc;>yC!WBtUWm>3wjdS1JhBpv&kp>J0s()byxeI^FEI7eAzl8CKPL?i5@nClGWgH}l zk+#XA5N6R}O48{BlNc%67@tN*8f+qIGAo!Q%U*+YBpUX@&v=5Sp=7csRFbGmc@Q*O z6-*Fy1wlrADdE9!NzBZSOJ1kp3v5FNc} zprdCtBA8ySYac#;m<{kZeRa(}9+T@uao9!U49+nT^k;(`PJ+`RNYreWFwqdFAQ*os zQxeonYAAkaP7$Jq^P{;{8;dX+mbq{YEOzW9$ygHy5q1EmVK?jITL&(~i~gwlkz|{S z`Z&i-FG{e_q8j%PO{j%KkQkI-&Q1)OSfWA>+2$0hLI!I*gpoWo5`_;g>_{Gyh8C%r zjaI|aPaKjQhCPPhG~VIM{p@*6_?ie=NYH#O9E>MN`qBc)IJ}zngLrl|0+R}vMmdR2 z+5N_t%b4WQ^B(0aBzs>1Xe(J!Z>jF$c<6rQgc0K1)R89>Qfl=QCfp zV~*L{R{wRiR@8{jMN4%0=f~mWb8ed=U6NDc90l{;b=8x7+h+59?fI z?bG$X?62OO43M!q##oA!K(p!C`)f+5TZdR@wof#~V8Hf#;2xyw84kUwK~eyRO)PWr zHS!#G*+3p=b>p)zAVVIu&mnXLtqx8K7K^55(VHDc_sN#PmxavxI8kK>Xj`W@{1sw~ZE>e){;UJ1(x;&6M+3z`T)LimlM8nF- z16PD5VyR7e{SK6&EC2_YF)QBOf;Kdp4Q=JRtRZ%op6sSgmIxK)kf)N1nQ_#X;6zm0 z6|BqNZcDcWui$L+M_4r1+3%hIO!vO|1UGLsubsCro!tYo zSo4ysds`Epa4=on$~;?l_;W;)!hzq$hHn>jGC4!3ehNus;Hi~9>gX`3tR6hOtQY;P zYYHnK)`2v?I%p&9v64thS1q6^LC_0Y0*7MOKE90{T31GdhuP`(Tj{AxxIB3^n&pux(UnZy)qi8S@7aJA$XB=X3`1`uz}zD~zu~b{i3` zs;_+_Er3Qisu$N0iR81lfY~yMA(6?)$fZ%uro=|FK@cNTW2Am8F1?DMrF}24cN1e! zBgZtkK&*^Iwu-_S*Z8jexW;!-G-vW<*tN52jBtFX2}&Fxe>KMEhi&A|F^?traX9QL z{*+zJ<`_sLaV<^gE?cFy9T8XguEn^@cSpokzVnT%eCH8Y`L4Ua#q(*`X~pCMS+HNi z**Rq9%@c_d^$mDat#O`EqQZAE8z%!LYEz#`5s!;QR3kaH!K6snJA7Tt#d0(M)uTDM zV;8vF)0#TnS8b&NUTkY>B#;WMCZ+}h$-pXOa&|y64RyfSJPzsr<2z}FZ`AX<_M@KP zwG{QN&^bQp*-ElW)bl${)N?YuXd&|XT^o_l8ntjx#U_!@?~aOmE}sU`i0m#V6 zH(>l7957x!_P}x3?Adpb-u+%Z= zw4|WMnHl;$$IC<7-aNql-5)u~`^Fq^{f=f$QlhPCB-KsBAa6@#`MVzxS^ln3WVxyB zn`qAe%EO1kZ6 z`FFn2^13#1Xx%@f!3feGU-m=;pAuC;BIaml3-C;LB(_!Rec?;xI{YtS8%Fg_G$+$kA{T#{Hm6qrcFf zVQ_=~#tHrtkDCE3q^lTL65R?C)?6I`5pHlDfJxMrbpIf#J^%l;|CvSLX*zFkI@t)7 zCwgv_UssjIX z1b=&L7J4PyH8}z&PJ#OC+ZXytXXnuL>dID(oJWVqIB;hID`D3@DQq zu5O9e4+walBE6NR7e{9m>}bKvk|HgwAM#~a3olV1-ZbelPFAP9Z?H9-sqYU*TUxuZF7{3*3o}4x96CX zhT)q`&Y0<#!FZvzVvG3ItoF zO692raZRMOi-|G0Q=icNH=4-ORhA@VcqHM0_?#70@j0{F+8n@QfKO9Pp*dxIp>;s&WAX+fY{3U}Kh-)=ab`G}obs;LF1i<3MLH01kA6)amq1 zJDjy6Kl_?7hp!zI87sPR(TUWl1qqF*r!iB&uv_B;N+fi)*KEx#`|hiyx1{5(ZbFyG+{v@%L=N1%qJ)p z_Tdl8ToZy~3;o(}G7$h%?tX}wBE)_EBn zGk}4duxzTK2*VhNCWqTqzE=s=?+wTo`Fg>+l|n%LCKJJ5DU(#J93mrSfq)2-zHOqX z2XI}~;LsFR-mzH?vyTgDws`iCrKqe$_Kkaom8tYbq)!E+z0ZVix*mvUEebbIJ0wY2 zr9ry;72G0`c5W*678ROPLA`vpP51MMi*%QHm2-;_h`c{TFTX%9f8k!<(_VqbfzROE zFW}o>PCoUsDN;G;+6UY6Spfc;3tp|3-l&T9dQ(u9ymU4+impDe>bJR#C3limHtBq% zB=og5YbN!|XRjF7xtrsDIRf_=e_Y<89D&?`YtcUG{nFh7K1?@T6zSL5wu+8w$3xZ7 zR(#duI_Tj$vE$$q$x}KAC&*W|#G`1CH0~?R$_sH@I7RZ!);QSVyrrFCo}#+p8{oj{ zA<1QSZrK_XVKtTHi+jOUj6;^nA+=nfN@mzkU7V%MJlz?}meB1r(QzTwz@HC^fP{77n{m(PIN~AStlOV@*QCvJ@NOIir1YFe$J25DvlMa}(lH0L~!!u{^}3 zgV628b?rFA&;H7d~<;%WZ3BdYP5^AuprjsMMM5xHpLdtR3E&GO(&85rPia7nVId?Xr z9a~^5LFwMOBgaFWwLTn-;xF}e2ROjTY#EHG8UtZsPOuaGY1ET!1OM<4TrUh6c{-!I zMwWX?qO;2Z)%acR(k5WGEN25Tlav-H^&g$dfNWV7D@9mQb*sVLanMHVbAlFx5D$L6s63d(@Y&3^Gv=epo1j zK|rV6O@d^221=1Jp_in>gh8^-L)A$}C;O=4HwL*4JHklw^E8}>v&&!*^}p2gc#jl> z&{|MphXgm$_}y%dX@eQ4$p9+3?WWj^+dmZ{_>&skERWiEi_^F&h_1DTFMFOUfe;*> zk-J5`kyxDti&nLiE*l+!^*;Y4GQDKlt5;n2tru^dFvt zRM^Hzu>fV|6`UFaUyqyC!UT_=*$P$V=BmQ`SLTXAXg_?G3(M;{Cc17Sl}tV;R*@02 zjD2kJsm!mF&Ga_1&UTeIrM0lhETFVX&}+Ga12D`6X}-X7(+XIc{Qnjm@^L1}UjjeU^tY0_;_AhRrS=pwkSYyIP3&Nw#+h-mY^b;i&uZ29Fb4`3(<7 zQ%;^O$v<2~_Ac8CA?GC@pYW|2EP|s{L-I~w6`78nh~gF$uhjWdzJI`X-Yt;>K@PE+CE7+%Z_M`$-Y}|(*61S8Di)|s{z>p zVO?PLWq%Y*5KuInd~gfJ7BI|l*gOaNfh!@vmlQTapxQK4T1fNqn|lFT(tNv}zrW4* zvmH{%^uDFV43VTF`SbTU!FGbYgy71ygdxIe+D9l)-!h0+zE3EWR%Q^8Dztn(FEX55 z5ly#|w07vPc0>meR)i7_yKy)Ohm)X>Y+;z7zbxJvgrN~8zyYv`5NGo}xw(L!vhqo& zH{@@AvRK}`oRPnwUEL)nNT-QBeQ54HrkusueZEW zgl4B@B6!xsSH8|VA@4_myu7Ev4YuB+J#hl&x!F@KiF3>_?8 zBrTV49iUtZlY6^t-~G6(BJ6EI&PzxX#h@gH)f_t;XueYas1aG*6u#IQX+6G15AX7@ zw;SVZN|@k@pX?Jogt;#^Pkyy+G_!N8shwp?*fupau#6BmK9g*JREyt%VSlo*_PRnaXP4Idu!7|d%rj~_N1-pU^B6|DJy%2Y)@9W@0#)Weti;A zw>25gar`cFA9piyx7#gUR%mC20FqYc2m>@>>W4`(yTr$gFQ%85VQg`0U>w~%0pdeH z`HD*L%Nklc2{Qr9V?75_=e*wu4ulQFi6r64M6d!-y^%5rP7Taww=sTKop5qwGGjLt zV3lbpaWp_z(GYUBGi28(jDti;5AB4Z(I}MxIAeI-a2?%yxe02)mi7YK(vJ3n9=*Cb zqoaAP1V9{aaaE*Zfwx-3Ew12t{?q|qYS4K7l3!_1!u3K#U@ttK>$*KUW`7!NxaKZ& zP449xmv_o(KZLubfM?ve1)^4?5-=M<yJ=I1fg`T_ zbceTm%3#8sSo{`8FJ+4whDEd4nRGsLm6U7u$sWygv?re`Ff4#-z5iK`E2$hFJNXwX zV|@6UI)rE6VQ2i5$7Fy4^x?agAGkORo=bQS40N? z;YV6j**wQ_mP_#}PE~?ZaJ3>ul?T08UCrbvETh$=dD%ZFlgC>*Dp29Hiu_7h^b@}` za{;_nJ2m-=0fEyg(tC9|PqN#spGv97+Jx+W8l{4F8;T64P^cAda`wUZ+=Jlnkz&pM z24P)*Z*bZ~H!_|zJZU1HG7*Ib#iS63rl(7uRl=SU`wmsk=M)K(oq2^45_5HWgnR9L za>S`rrCvYw#7NC^o2Nx&p-QR*iMZ{PB5hX;XgB3K=_!${AlD&bll$8tYbzO(N>)87 z62_OKct8@^{yYt>37J%Q-DwfI>=$(x&(?<(_Oogb67!Z7({;Y*Ox;JJxbA2=M5EYj zI*cZ>t8f^`QJ3U#`tP&XudE2@Ll>`eT!jqh+>SF0hNC3xj)uL2A$9CX7hfh}3I4_v ze2h1ENl6UztsV1Y*uRN}4E~)R{uAm`C1daH;5Vaw1^#zCcrX~3&>!s3*I_*Qg@OOW z4&MFJ?N>rQcW7;#WHua52c>>|`}-w*Xso18@qTj9(PX|MA$w*eO}e8o{xv|ado#8j z@1m>}k?y(9$fm1{x{Aedx=L*f>)AS<;B45eI1BE7`$_=jO0KXoORA)N1Zx&iBiVQe zg)v}hRbO2$71T+YX|%juommurG@QKYxao0?@&2uw4l|4?Ux?Y@@+eg)W}{o8ki#QY zF=lfs;8f+9O>T+f-Fj7vxU?S^g}}{m&23pmK;t2s{~is-L3a`juV(n%M#=7L`k0%J zCy55J?leaIY=Rs-N)tJF07=e1HDlA-J)4u&c3@}WxmOMr*wK~KlXa?`u^F9};j$kP zi6q|r0M=}NwpL&KX2IQoohg|AcF0Ncn7e$LukZVt`LAFf3c5c}qd3HKl*_1(o47yf zesr#yr5vb6IusGUKE5Izs;wZ%_wMTJLSJpt(I$1EzICptH;R%_2SJM6eC@l ztA)X{N&c=D$C1Zey?*~zt<`}8KXC8|4xSv~X4NNumk5i^;dYsEA20^o@D;~Un?qx+ z@5;N^vb)foO(Q<7S=Ebq3Bk`kUuB!a{wJ;bVc2$%hacgp)zhdw(`Fp=#nk@0jgh0S z=Hc({mI`5t;<(*j)kW^O!u39kW__g(H15=JI~YbZS~WQL-XUJvcs0B1c%b(14Lq<~ z7IGP^By%oioDCdOP70K8Z|} z9wSh2afrlzrS*#7y__?yySX@20u@cyYb_AAQ73IT0>+^q8#}UpYx3Q_)!jmkVQ6RH z&}c)-sJ*8P4O(Rf9v?Rc69Yrmqjqq(BAbKDiB9s3of9fvDQ zl^Xc-VZWkOhT#Jyao)1-GT&~IN?l|R>0^!>So2jI0qPl`-gLNZ+&;8<{xvM0tzB_!@X+s}41m|louZpnJ+$t&jJDxA!cX?z*TLD)9C zVnEaw87)^p@SKzojAE4sUt5@9;d3s8X1x-}Sc6s@rSid4$Li4tGpp6(xXcAHFP|2v zYr%hE2RUE{4RxWn2wH1lmw!SRKd&70yZP!_72>LaS-I(oQnu^IS9J)aa)Se^=y4@p)nDyDof{26eQ!h%! z{oo7ku;Vax_PRhcgU&7w)=oa+WvO)OKanfOhpn98cH)$H!QZR<$KK4W@? z{?w-!-BKQ^trdthTNN6(|DMWcP(NTcFjuAlCT<)0*kBj+*cigQ9TfMe@+(1_HDGh! zS>Nqi;#eizjBRZlurxaN3E8zCZom|~Pcn&z*vJ0*d#{AA^Zg5j$=fn|}MGn$^W`Z-?` zskf3<$y9=xB8i>hC^N9KpWQw_J!HwQWJ1+tSTZp80=lr}mR)Po>SZkzQQfsG7v;Sx zPM5S)(B=zT%2Mq+CItS1fuB6Mow9equ4AbQSwVZ7J+j;j#EBz9cZ2Ob>Zgy{Al(=F zH*mj3S9_@^71=WVhWh?3>TbWz=ygNwXbDJJY5X|s2cPkI5pqe zG4VoK3tJJ}gMe$})#73pNF7|(8ia#U`~_8zoFluH%jgQSveTI_5DjX?0o6blUmzLgPaDViE|tNw&0#t@UT zvH_U)^g#iE53C<;Mq!$?z8&#cI>_%^Jl2lZq6#_n$p#y$rk-26la}6VCug3Ak|e4# z5=pzCE%RMlx6vtN;X5N{4+)1)umi*Ae$T{G!R zP4U(lPdCldROp4KK6qtnsjZasRq>xV&^TS+XV5ztsryiDR%yRnFOgrE%BVRJw8;kI zM$$+OB7<)MCW=g!tEe?#M0B4(hnRzrO`ZdYIr;#ujsCh*Be%J`n^m;%$@8r=o z)^IOWr1|A_|qn~w)Y%g0OX=xQmps09D7tyd+F5%c#dqh~x5Y89(LK<)Q zi3B&+$gj0S6+BAm5w(_AE>$z(uEJDsrEmdkvRqA!0OpbTxnR(a`}I;qj^ITShs4T> zEg>Y+Avf@*d95@_AujZ_qUagd7n_}!bV^!O};un+(H6F4kL^a zG@+dDXCy&KOQ8_}VKp)$4nED0M-;_jcS6(3*)DYlFm!PdDhDrYTHakPdI&9ISj6Uk zbh!7fT;M&stzNMCbpG$`Y;$+FqnBJ)*of{01j>CGF|2B^TBYAGbIfU}UL*HDUpU+} zUe_)AmM#96RXky@*ED@A7n4;|ad>V8JWg(whqZurd3-~87pk_Uw|^xxxi@yD8ExK9 zXXqw>s)Hl)??WBn%lvQ{((Z73Uu+Irat{h>>%|P4&$fck%w^~zsFLZ$RXm!G>4?@t zN=x+BE&NJ{Y>vj#u&6&PN8^$bh88j`94@6l*yezvZu@+=&G%(wTsy5IP*lYD0cX4| zqxZy_h8b2PV7@fHI6qwEdzSQ4D?R`Q*d?RwneI2Md_E(Y<66~afv`>ogUM(Rby+5G zC#@AQ%&N+BVAIclz(yF z%hEECGA*!_M+T`2o0OTCn)4Bj5u4c}n{O7`?4k4iT}!8(6|$(Y^7VXqSY&4}9)G0( z|MhrS{+g~CG=`lM;N5<~aR2k+g>vdS>V>0OFYJzb;p`egi(2u)4zD{UE%OYh#|?(* z5fDs@rlYbaNG+SqB~>P;CCPq43gnAg%<161s9(^=H?jtubd(T0?y9wFx~U@l>@i!i zY9J4%{0UYJVH770?>e6t>>MY_uH$?;&(b|5!3%H`rhlZJ(kErpJA(mrZkaiL>UD4;Edwr`?2j>(T* zo@R=~Kh2bie^6gbWF0$-RMH+PNFRKfmnx+4#Z60eu`ybsPnENoVl>bMuIa^|03bUxVwsSbP#-Rdz&mb_PosPiQY;0RWdt4{K8wX z{$h3Hv?j~VZMvLoi+oe$`RylAX3?i9x_rGi`T)kS`TFi z4TWfUIWkkIAb4dY3`Ps?PbFG(vo4bl-&7&0>PxdWQsRaURvAFM20#wv;jr3$v01je zTqu#&&GgAJOB@J1iAQ}&Rn+KV5XZbsAo3x^4HE!zjIql;<8|^aUeBYMPc0DURua$* zjirGDx^%YPKg@P}RCKKDM-&2$KfRevc>DvjmB|8}(;#n2h>2wtLlK9PR0E zfR7hq%oKiw1G%{?(}A}@E?;^NvzJir7`7{%rAMm>rtWQm2KxHf zbUS}Y^Yv_X*pno3^oT=C-Cajr?eU+2arZiihO@zRLbBemGZ~h(RUMkH-)k5W58C3( zMsUX9*)Ch9+lNijQcnWtDm9u!gRmbBQO^kn!T5R^iqt$Pnqie6SeTB|$p}0wxhYXIi;>tR!)c93(fzZpdEkSmRrNx!3 z$nD?)tEhTeGN`EX&$|5bo+7vMskAD}jttZ?#$jUBk7r4grE969L+h(XwLNvCSF0Yh z;q6bQ8m)%xDoWJSDGpWN)CyG!D9FO4$XZWZ6^5$OElYz}epwnqUod0?*t zxol}y3?Qs#^_})V2E+1T#9-75`<4tz5Qc7#OXa|j3zz`YfNpa5QJ=0?2dSMqBGa(S z*JuQr(n1!4*#SLgb3C8;-F|&5kXMqY*yH#|!0xJD!ckvyWjoCQCs4wefbeI2`x!H5?zM>*MX1ND~=W z#|JC;%&^}0U`_iB>#b*5`dg!I!UwK_22kqDW;}Nad^QM_eSw=_>vF5Lf0`*_Yhr97Ty@g!?ZL8W9;#0nVC~vLDw{hWP zHToOx>9b6qkUd<0?AdVdR2GJt^`yuj^K@DF>YazQ{bUMB&a*MPo5u`?tkU!06|3|o znJ8B)WLg?=xO5d8KgUXw4wty$5QE{!6hpm zNg_!>Qq9Qm^2hgxBYMVoOfzqX-F~y8H7pamG!Qm2Yx#W7y53W%`Hq%Wx7_G%Yi$UYN8EROh2)z?&--g<~&j`JctuBodoF)Y94T%1F% z$~L?^0wC>qt@umOTdwaBcW7ytghL+1?rM=_kUR4cIulqw(&@l*K2Wxj(cR^TnHtsK zf&BruAZQx<2juhDY7EGVPHS|eT1_En(y>+!)HT;W0lkq18qQWfty6qrr6`Ti3}>&w zoAl|Tr62@T32I!ymtlYp+r;>ISd5n{aB6uRVG#6eAqgf_U1WlRIsMXKk78AZ8#@on z7@=sF{;U|PX=jl22vE8x!p*>12rWVB-d}QtR3@o|5s4bDwSm1IXtp)R+EPt4rtm*q z#}Y$LQEN40P$x8!5ETA&^3&q>hG^BcSsM%6HmSW@w&3=bJxz`Et#538>lxtR4(Xzd zb8B@UMj)))MfrJ(Y$prJbK7?jFwFZcJO_>^{(eR%EU508&i!#E>d*4QY{?sJ+q`(3 zozL1j^IDNpn_?WrH~5ouF7pgJnpwe0jdfNxS6PyD?FYMK9Mxi<&GFqX{55zjRnlCB zS{rs#I<^^M7h4bE&UA|gn~`W;^s2cMhnLQ+07CoQt6Ey))qG->ss8%qG89F;qfbcbp61PmcWi9 zdwRfjmw@O1q9@6P!|I9ZfK-h_+OorYzhBe5rNC8zqSD~wI85+9=%*l>*bc1=uo_k1 zOS2APV+u^dBu~EGRF?$}TQDnbi%SG)Q!oCgUjKMqcnu$_} zqr>3%>KdO~7T%#>waAW-8UsAe!#c+?)%A^E$md1TnK{} z;>TUUWYRRI55fWOJhTDI5pGM2VHC{$E=Uq znr_fVvMSK@`(d-&&)DsisEoFbQfjE5BWa>R?Gm5k8lqvW7bW9h(!C}}+OCnq(GN+N zrRbv)5qD+vOeGp1W7JgFqhvC}=cY;2vhDb+7EOB^6Rye&7w4Z2NMLpJmdW8h5{M$c zf?j^@d>@G;i*U(jl~jDLAmNQX2}05sd8xcX`mMWJ&kqHjhd(uA)9us}R5}GdWvL2{ z|JmdXTjROzd4afS$J#Z!r3LOC&;$0Ew(n_aUp$(I2cNoc9wFJ|MoiMX)e+Oyv44P! z+CC;`G$H>B>ZdbSKeTFqw^N3b&$4gXoE?a7J1dN(40XXY8q@Ra;pec+4)r_di?JZ< z)?bY*s;7v`g9Kp(j?WL|yL~>V*Sme>PZB{qB@^UbC6lOI<}0`ujrzzQe3Xt8IpNZj zvLB`ML{6wv9=GF%OERrg$Z!0R%_oIi1Pq)Ol2)e`B6XPTvmMl^3$GJ}HDc3ru&2!s z){>@D6Y&gk#T3=JIjN@aGebd!T)tAGXCb%;6^)kCaRkgaC z-M;BimiXO^{QcXS&+_e|e7V>h5OK=&9e!!CG-c^-tx%!aR2+I-4lgMWe?}41SLkW1 z{LtgxAsoj{^w4}f4p^0P5UJrG))w{XQv0k}-`ejDfu;ME&v4+#}uy#BdVWq}=}Bf{@j)UQLYi8JRmf)idn%C72G zm0rC${dg#dsU71WNfhqeqL^zJ+HGD}w@0hCRBE|4#lbbQUL1V8ThFWDJAm(T=+EDFBs_zK6IjV4&&y=m8)l~#{vKFb2IWlJ3vQIy_hKc)zl#9>-^ z+4wji8*-vrF@QMkavgq|-xg`n(zOT*RsF6(Ke~v6*mg030&d$@Uv5JaZ+k5$C*7bN(KE~Co7_b;ao+uuwCqzt;ub6zu`+j+Pv9MpsS`Z zC0Fi+LvrQb&(m-!r}IRY5QTl)C&)$Lbu(N0J}CWm#tzQ;L9g)LX1yvcNkkMZNg zsW{3lnD!^iKC2etI=Z^Xr&0U(Vj6jiRg2XheVX+Hd=9Kc>e!JGUvU7SzHuopN%}Yt z{-cz#QHx>Tf7MC&CsSK+(<)6%AcqLmFb*$~xw)R8Ub11UuX)} zUf7=mWReI_(KHaD5)Q`KK@uf8TunP&_Jb=7p12E6m}S;(RXMYiAa^$DR%a@o>~gLS zoPNQUy&IBbow&orLo^ro!oYg7i!YNf@sJ=#HyS3>%gd-6;b8*{W)g=%bw(x*hF7?= z;RCR^x!eWK72)3C8nxkQ*_!=>l|lmz0GrIB3nGqHD`?^ta%6nq)CF0}R(i1B-6R5N zQGz2odLHVd66s#V9=f68-@y19eNgcmG^$?WmX-w&t<8IxWeXgGXm8icFzj6f-H&Qt z99>=};l!hvAX3Coe2Sw98kl^{rb-HR!`TRV3NeBMZI7n$DpE~Mu_{KJN#-!Dtu)=S z02Ff*O_SitvAa=FG*}K3^c!1m_vWLxRN5L$O>0q1G+>NkU74E3p_r&^A%(+--(h5p zk)_BDnpKv&rA;ev`&f&*X|~=w47A9Y-~rI7QA^-1@^_IN_lVqOWje0IfLf&gy*t#d}yx1`cJe3I=CTj8_M z4Yvi4sJnJpU%2qa>-K9j^`2)qn;y>1hj-$ZPgDgK7f<_)za&>sOYP0Ll0)d023vX> z1eWO(S@ldS6hW2kE)QuX@ssB@$Tk&K3UrT>e?FvG3gl*c zTV87E$ymd04|~=@u8MShSf=>KR>*irZU{$;rQ*pJ0HmU7YC;}G<;Y#Mg!wsOOGRdf?s7l>Z+@%;GIxVvKB_(U*}xXWc|QdA+h&5G;!68Jp1aE zqCC7jETWS;WqYB?K)+6D)^(*DOJEK?{SMz1Pg2hxR`}S=rm%zdvh{}Cz_Te7iD|^( zF1)69p!+JL^yqXG@VF#Qj}f5ssM#Y81b)_-J>&uc-B53A61K}F4ImyxKjy_AjR!3C z3i79-^`IH0e2vU=ii{UXP_JRm_myzy{1EmWmQHApak06}#h|J!|G`aqzj0N7_E5~V zwRA-u!|N6j^=TB^@6r>2{OQGQZ2H+J8FZiEKu)+ z?>TT$ZHG$_s*nl~!}RiOE5Ci^*x4l121gOtbXBWnhG;)G4SUHfy#fN%)7G~59tiHu zD|U?KB|Vx#FI=G7CWklbb9&Q~2@@YZl6R|GRte0`j=Bg0(5-0flyZZ%0e)XSAB3BBGB z=K8drKNOoayT+=e=zE2#8rJq@*u9QN!*W}_V+(^*;C1nDQqe-#DvKJd4{CSdxAKUs zfM8!2#3dhO^k9xfSry3t)Pt5qNN;3>wDeg7kY3JR&$`>B1H~QR&5~G=d5OlXG-p@FmmYTs*6y%ke`XO^; zY)1%7s><1WdD>4u?Xb`;@rEn+?GFEbj%$r7+tiAu=wq#@l@c6Gm(HMef;PQp(O&;Z znYi@1^5Ly`o6->NeJj%N>EN8@7u3XH{i~-O29DLQwl7BnMvqqKXg|ISsUuEH-N>^) zlxXhbQ9TZMt7hRaj(Pe; zgYstN^03)$T0G6s?;@YKvwmPIKv^2NjDxEIju2!=2Wb^fz?ore;pubkpiD^lt{+$(@8H>oki{W24 z#jjL)G~q})>SQfN(Su*Ycr=TK(Ig7`(J$fb(`$wRU<* z@F7E2Zk9StkN;{ay%|=5s+JZP%gy}PW5|5C$oF)Apc(%8dyar=wp_(7Y5#n)eVVbU z!>*+rC5fh@n%&X(3;N$+5Da^XbvH?d*66KR=nG+`fBQsdMdf~i^hVtp*glah4IaLJ z0fAF$lZ}F=e$bXS*{EEqAC%3UC7NCErHU_rc$UrbF%vM9ckqT0=BFe60=I`sxcUbO zhWYFWKj2~on(`} z%G$8*ys8T#;6C_CqE!E85)nENFB$%W6GK(U@?u2nj)(!_h3ke`)jz$;Ryy`ed{jw% zck%^uu{X84aHsS*;88nan+tbBcWu3He8Xw$#uKHQH)>9`%r?JY_)cPDOGC+*jB^BEXi3vyQ8l8?2azZ zx3eS*l2(^g*_A9|Fqy{mFumfAD_NN|NV+9hh!fs9r)m7z{G^Jy0^Z7=o&r+FV8I_? z^m>8t4fIZ(E*0t1Y+t1Fe0@J#r8x8AI$h7R^LE-zOI>NYIQW7yJ&>dcg8=7@90tQ~ zI6JpYru2B42Gp@+T?UBLrwPRyaA+r={}*7f4&dcZ8UBfx-$kg$7TJ8?fo9v*+Chu% z3TbAUI=nQ*8*M3z_t~1RO2*lIQ!Lm=?Xi3nqrQ~^C}5TEc5LZ9U*n_b6Pz{LRtSux z7Gy`+<6|0H?jG{JKXV|GkvAB_%o^^*1k9U1J*JUK0~*IEuxWUmvpk{y~2Z zYLRU*@^^~{J58qSa0Am@?Vbq)WDa!ZF${^EVK6l+9K-T~=W+Ji0qHm1&fQr7U~*hEI!I0P z-N}Six04%KG8}j_IKY|eu983p#CnIs+Xuwbhd}&vuU8hc(X9ch-mO#t!)phj= zub7bwr#%7+sx+&&(qa@@m)np8snW|GNh5;9j*B9OGB5vfn*Ru@!sU82PkIyuBb)uw zJ90RdWt~LdIpW?kGg&*Fr(}`>bF)ZQ<6e?HYv?a0_F%>|SI)6+ah9*hAGb~aDD2nncgOG}V0*@WqH3oKolvjWqHbrx^DU6m+=?^Cvi?{jTVl?=VJo%s>a zk(CGN+2z5>s(0HSsrR31Itkc`*5{FmNvZ0{iw5eq8qrj}xlO6)&C_uLDJ_}HL#>@4 zN5JB#0^v>I@#2JbDXOc&S_*>T37YOMv)(Ez!0I+0>cW5-S8^!s(z%dOxw@^ZbF%4G zbz4{`DbqgFd6kVF@W7Zizt4YLo0fO@p0v*M-PZ=j5P*!xms>Ku`kLZk=~nv%C8^c+ zPeC-X#^y`Fmd-&+^y(h?F#X9p2r0z5i$Ci8I(ckkAn}XqMrvpi8e{h8>W5i|TRLg%^S)=Oh>GL+K)j8IE5Nd9G zYOx3|1SlHmfh47O2l%+N?PizbZT#6?wx2(=A8IGjHwMj(M@d8?5H7<>_u3=cPC|4D zw-ed&2)G+F#7m6#j1hN2x#p-j9gDiVop1AX`&Tc91Jp+N zrn=d6Fzofizt&4x7X%605S}i+=BT>i`63$P3!XoQUuFqDFpEY1rZd&v2+iOf?~i8C zw(Fy5<*ZsGR_pY`6kl9@L$n)94nwYh`V83%g!(+;d&}`1KHYTwkTtbJ;uIF3>h#&E&}tXU$dt=dK7>EAf~QC-~Z`gs{SS3+RpQBuOC*2x`H$%FcB}y_bXRz%jpk9 z$VsBRV7(9vwrB3SWqPc=%AT(`<5ex#gvvO2383mKE!M?UcgM?>oYd*Nj;>w!jqZ3V zpC(t%0M~<y_Mj_UTKVadqbX zI$bZ8+0IS#9CXe>+hk{>(zl~DO{|F9(gE$BGIjG-r=f%6^XJv?8Y5UPH**rH-bFJO zoK_!4sj{~lA(<>x6?~|iac18p?PaK)H&5zx23itP^-F9T=PEegCQ_D22VMs$%kov< z0~KMT`j#urn?qrgcUA|k>v0?37WS&w+g5)^|M*-QwyoXKcylT&A0j$NPx$2stk?9&k8R&~@B+E^A6v>Fj@>H@B%<3unps>u)19+q z5|cd=fI>%0!GQEuizKm&q=oRDs^wo3Epb!bovN#)>`DwL@xVX{SscXYY%3A|{gOWX z4y>vWylYwBSEK?~$~4FWK3n0)~Q+z&z#BJry@$z4&8d7H?)XKmX5kx|i8UaFNAfFp!ekn1_5LLBK zt9*_5%N8Uik-|A(rQZN7wdvp%v9}~{a=hb(oC}&;z|xMk2DGh!ZTVvPwJ$*f*}_-- zZl_aMnRog0Tp81G3V#Qtt$Ht?f^qj6xh{S_j|NNU^?=OSPso*M&zi_+2bBt*i?gr? z>UW95w1iwZ(Qd4lb8siS?t<;Hk-tk#HgM@uE7B=Ex2W7UP26@&;C?K{Oxb#~wN9>* z_#q-NHG6Xbc+|YK`JNk%~yOl>;NOX`a4Et^sIvG~& z8$cf67fQfkr6*dA%4t%?MfMF053e!=Y+3fjMPAtvV}0EAfnX9&E8=jmzM;f}E@m4CsvssABA`3991joe8R9>%9(Y%CYr#6Hvw02NP7q);~;86!LPc6r8^kV%@SZ8#ei?FKkGsUd~@xmrrJ+!wVxVm zKeg6=YOMX#TKlQ7_ET%^iF(kEVp5>GFIfoT-eV!eI+%`-c>zuyKh)*cWWJF`mZXbD zuvss>iMpXOP|%O{WkT`@LBCfigXFP+e*SqHPEiGeL4@2F+2jkwm$H$0(()rB2z=^z z6j6BAO>B!;a*ZTRb0d{a04#NOYad}iTm;7$_A`fNL+gxfAchaC07DzVM?QV6;>(~X zsF{QTE^Gi@8vylwc_?LV1xpLBk03d(?}PdLusSTs&S5n_DLV;|f#3badYP$}?8g)o z{FARH&E*o^A>+;MVYjE*A@tWznX1%4Ag57#M1kfNt8T*uYh0ZLC2(%lH6;Tw#FBXs z#WPJ2{%kA!6f#;e)Tb(irI~n*K_h}rJR9|_dO1gxs&9BC$p|J(x1l27i}I_?jah~& zz7SspPIXt?!#*ohxZ#u@kA(iNttqdTJ}~tijHftBAWcDs{)=wNyf(4k(56MyPK9-B zSy$t`6qR=5UXAz+CX^Ih7kPzK6aIWi7y1kRV4OaZU0T3q#acNRV+s>_hU0LnZ1)hX z7n5}Nt5UpAeN7klKIV&TgH&d|S!A>Hv89bFg(}kWd_7+t7TMX0$6x99|9U(ue@)j6 z7=z9+>~6pK&xaRY@T??)CY~a_iF)B^7TlcA;_xzzao)#dHV(-J*aPaH|6MssN|AbD zchn0BuDQc1;F@kK3kB$$HyETxAP^zcZg=_8X`S7=!p>=0vR{yL>JkWr{et~6IeO^( z>Z(ZdH5=8b8k*RKdYB0BzNhaVion&epFL(v(w)+8k!(mU3i^t7($`cEFo@*BLedbp0NE7GFcPH&@0kjB!rt*y!Y%|G71-2q1nc zDRA#7uJuqOeaNX`EWROX(&mC?9+EgQw;mr$sk2;=tM+cPX z1fkK=cK(QXmbwECfuI(4HR^3|sepgn0Z2ua;+pk8en^eTG90+&CQ8{HohGM5N)m8dfsY@$kBW6tnhGEpi-(y{JnPgbeVzXgG-j zI>VB;c&xZdG`#AEb?;Ud^{f=8!>AXlhM;BAB!(WGF4r>e+ zHnJT@1DsKz?tIsy!WQC>it?Q{ohsDVm?2Vj8`$KM7Em^ixWV*{qF4 z(c2rB!8^6;VVf1V%gy{(>?Ari@Dv%Vi~gwlk#^GeZ+%--B5>aM;M?@NFTnrAym z{FP%sNfR{-*hdZh%R*7lrJ?5uG@Gdk+;Vn3k?=GpKEzc*k;2IrdLM=2pk+%fL)sam zI?gyB2N55~!y$(H+Qz*SiQLt!Uz>uTdc}$sra!bHKA4+w!6R7a_v@9@$q%J)JiFg{ z-%L^&Fr~V6n8Q^kp^Be8l<~l8*npS=k#V$ zH1SH8WM}@cUL41rmMocooF7O0U}pFTQCyrv5+Kz!1YxAzIga-2sboCK5UnCz_S2`V zXj<(ApNl$@#)xhSz_$jdxN5RM0ocDdbTuelv`M}uWBfZ`MdD-jL`aOY zBHt{U(Lfd1W%C1W&qAI~GoLcsPebyOWyS-++&#oKjmVG|+Z1n7~Lsj5s zRgRGYMsA(!czn1({WRI{lqKX6Lck#c!2~Lms?KyXw7}a&OYR;iOhx|W>#dRc?-!!8 zsO)C-xm2Q#TQ?fW_ocqS}&ixXxwLOtftxM_CVHDus$kbJsO3xE9mbi{-RbmulNg1 zRUG=}j|#PeHr$=U=jsJhY>x1vmtl5R!I&m!2B2Hnji+EL^E@+l)|IJlo2TNH4uyt( z-P{_mRQDWcgk|UiIj+Ry1kO*7AaUvhWEU-GsDJ!`qnZ8QdCzq38&7b5Z9cD^w>q8O z1G8A;hES6xC&c~Q-J`)RE;j#QcUxSNv(465GPu0}dFjqlfZs|VEkLr3MjK4aFq%nC zQ<-A(AGiNFL2N#z>KZ4AV7+4VDZDK<|7QFTeQf?4b8J4w^@z>K;4ZQGh;i$|87|xt zk$s+B)T%h`E-J*3CGHjhpV;}SOCS^==SRbeo%K_m9YEymX9rXs9OV6b3YQo8d8S#F zsnh#~%OBSB>h`S0QS&X3z=8L>5)aU8c`Byb`S#NV0(3P7(kD$IgkiL*Ug-ge*q${t z;GG~_X{Aq2;$8s*pD$`@LVy~~T;p5SRg2oc#IRcj!t zZdUBGZ?km2FY;S_26d4?=2%_ZQD7Z)RVl-G5`HF!q@xRbdbStcLde+Vwp{>1Dflk#F&Oo+Fq{y37^N z;WDITj~&=*`O^nhDa4`nWoPpQSJid7Nf)!-ep6(#&33llAWdjRQ31M&uJuPjZV2NFZhA4Agpg{`tn{@uLBDr9* z1-|2#Lm z$r)%KDi-^j%sRFV%Ni_QhGmc${a8Z}{$FD7ZV9b5ohD$_aOQZyWQGf#k-Jdak+wor zkr+Le#AQb_3s?cyNLDUbFH^EogcW{@;k43(!GHk>F*_^L-99Vwf0HChEe${_U3EOc zSJcKqG7018mw=otvJ5~ff^Gm(isvPYGjzoKN4&qNdvEp+6clZXXdyidFt}<4Se+{+ zfMa~UCuIW_i_qLp*j+7>Y)`TC?RJU9i&GzUH>*{;UeG*Lc>Y`esuLfbEo;2XbWZM0 z#NW=}i{Hk`AI^$(n~9Fp%g~^jl$ngg+L#`(rruEpsz53dL@0hFYPlIw8l}tp7H|13 zX8U}V?e^(v+g3IskhGeQDCkEQ_>4<$Hi-sdG6@D_YYrn2N0+_`;zKcX#ze}K`7-K`ldirlpUML z!5@^$9Ci=ofs_(cc?Tg0q&Y<8y%qUWzJI`HYnI#`)CQwjQACh68l7aZv|`p(Mf}(| zx2@@i5ijM>60Dq1(?wB6h^`PDw|L2>Sz_4-Ms>62Tia4mRM+U#pygPF1BK|`dzFUm zyNf)bMi3Q`Vuh>QY_Z4|2^uh#S>e`O6dMx{3wQ_)G>{#1oaH} zta4gH@#vGDm?oi|mRNVxpALq4dYWW%0KEq3>qIIbN6V_?tt@QZHhE%rHP28X3=k=e}f zY4^I6IJ-w5eW|WD>o}Vu@9h4tObd{nK^6T{4zaWL0)ZnlCN#{K;GARNa8tDaq{I_a&l@| zG~H?N+W}4CSme@dm2OYqj44H!-Kw9b!EjOru?>Q;;&ZTKu@pq%WZXW${PAZ6o7chb|v7!!0da?^+3fxB5SI@GMH7unDo0=j6_cV z{oSjM@Clt9m?hxPg zcXfeTIunD_*<_1gn+vPT|BxWo=lK#w1{R-I zI5L;pC7o>c=@K99MZ*}~B-{0#*6Avr`;kb{-)Lfa42g!g)9nIF?+#7A@Sa}_6@n-p zS3iiNOv^9%;&X8pnfbgyuhO^Kr!G8M7ZjUBu^D3@H1;OF>fAZAHk3`*n&Rr>(=Pc%$`b=9+pIDP`GfV%pCDqg;{)lB&dr${S zmDK6sy{6IKn_hxuExRhetwmdLZ`VWE1Znlgem-P}>=OCi%cs%THS)qA^6jKZ*E{5q zw><|0e5=iNkA$-%TXAKvlTFQ3w0)X#%87DeC7L=x-(Y&!3 z@4K%&>;irF`xodt@`oxGDwrFsK;JcNh<8mI!XigYLj*VHt+j(^19;wA1l?8i-Lo>1 z(O%&7yxDx2uC}v(XT@gLTKY(kvSNmN;dpXA>-K}exOUvkmK#LTm~My(tMMjloL!9b z3ql#Kvy&U|g*Qo7U8iRR)N`u6si)k_$;+d;7>RMnmjm8ybZL7G3 zJ$WlpzUUGvo%MAru*BK2fvykBWxa3L| zu!s(#8^vStPjNPML}9kVp^SH^m>E8$wcF1MWJ;gf=_i&llML(Qf2g6=JBsrrHN=z`ih$hY(iw`Et zlzZXD^a?dKK1e59-PcB7Krv)ip_QJBtI_TM$>w|9kX*Kfk7604i~qryYG~Hd;m6_V z(~xCH<5zSv2smVeOvxz5xgA5^LZOHqJE8#p#t#4UG@O>;Z|&eoI0(kqINLQvd1puI zjs^py3bTvpy1YJ63L;_StV|wu*?Q{?$GqKDm;>l0??==WTL12N)8TMFpkC{Nmbhoy4Mw= zgBnzbG`Dz(>7WrYj+a8CN{}QamV-i6=e3L;q5gF|`=tzP*|9+)} z9S1GpO5{|f<76KMUKyf;wvek|gx=C|P?xgv^ISS;OEQfw1DaE_#BxxT2w^lF)CLcIsNwmNT{MSb5s#-vedC}sH$gw@(c>;vmnzX6nzPio zFWrl7jMJR6!L~AOuV0_PdyoF_rBc%|Vkw+WLPQ+@Q4@Rp;hht)?zFTm!<)}Me&-*q z_?OcmjgAB;IP@*NXNe@ka&MDROMD`_ZXGI{*G}wchz)OeTJK#&(+g_ha0K4G{<}K? zPC7CP2jMUS&>i*rAtiG;?OrEQz|(qP>J4>7-TEEICm!koIjGqjXJ$N0mwCGL>%LXS z+Gf4oforJaHRK#5W#(Sj?T_lFwQe`>=SP?vx8h9}%U*c38Ooe?c{3EA4E$u8Hk82* z`bk4HBq@@sJPKvmN*)CP>r)U9qu~{Vp&8)$T+9Y+&3GNgF=|o(UNh{`A1b`g9R|`P z*cyQoEtC#Hf|SA7L|e_9rJ0G=8EF-=XYfNV#eJosi8D#%*;Jp!bg-II09=Z<%m1CZ zVV#{VH*<2Df?|4vsGY5{-7dY)x|>DD=a9hxfz~Y;7N0gQ(5(Gi1MC4U`<3&ydWAXN zWkoODr+X8G4S$iTmP=nf@P`BCDsl>vbXr=3*BlHrpJES)9dvzq%fN& zuZrmkCd+8}Z|6$5@K=?@`iUc7mC{lBWwKqIsjAHsvq7c(sZ2{{R(O*kba=rWh+kM0 zPM^-*q^{)&{`rhV`n*5tlC}$ zJXJ?KLZgVbn5RRLOgW(n4l8M7)5=UL! zL-o6iMl|g<63kF7lxT1@yUUmRteDLYxB2{dK`0c@<*%1fAK$psonAy;Q;dQF3)E6B zt*%)x=!rMR%{E0Vs;nb?E(3`-+l^vHxt%b8N^3Y!HwuL--bNS(q1F?AkU^qSxCmi? z5CScacT?DNBWyK&W`xD*Gsq_t#|>RwN3N|i)>J>vTxgE zKF{~%J=xnbqOMhe=u6Sn6FFG@s2f$s8O8zLahh2ByA|CmF)gF=pofDAR%!8T8-h|O z0;3dOK^p||M`bjBYlJlhL(tNIm>A+74#-#P9^&(yK8qsGOCq`j5ydO5{m`Er{7?%0 zlYiLNrg7Lwwy)&DmUg6z_k{HZSb{H!prs2X zJj=(G_hf+UJcxtxm(!gV9IcD&K3|6(*H`Fd|FUeyCR~K;g`EdqqG;-mMw(O9?ZoS6 zdIdf1NJFV&t0Y)xwMs1N1-}5d$QC&X$(W_pN^mPH zaUfxNnXMQ0qAs~%8|lNS8(7l5=`aAFUc&+C+B2|vDV!YRsCOZTH?5?D1x^7eC6|tp zoh8@-RPbnz_?hd7-Tz#HMucU{B6hZ;I9I zF3T2p+ohdJGeB3FI#1$YnBaJr*<~2^NOYHZMHoQP%%auemES-PT{p+>G~ zPN+=ELN8gF<#`X+sgL);l)YS{7VQ=i+k*DkX zr4PE)6)~+OTUN^;E+l$I`qfFl1q}r?+{r%pg(N{w!^>34M@-D+Wz#SY7tZ998LfN@ zwZ&{(0f6+JFPPPJUYB`#RXuVUF{YNU@445v^bNg*zP^c#V81Ny9p3Tt{ra}y@~UCY zSCUBC?ZQwz^HXZ+Up-QbtWZAA`S-f23dp)T2|%p+PE`znX8d1OLDGiUbUu+xX0z@&(+pfwM==(!uv`ke3PEg5*0(sCl^-$ZD0ao4)yX^hj+k9V@EAp*p2d+e^6YX=( zDJcEAB0u#JMRm-XhAp@T{S?7ISUI<0!KndxqBRV$pU~tA#Su*8Z?_P&l4;(|o7e{X*fETA1*4DUFXt1bW^s!K zh1!xkKK^PVGd8X?mDw zW!gP9D)d6*Q+Lr;L+*gi+?Fsk{r;4~6fA>Dn4HmQ`wVVtY6-YD+K1VxBZPPoNwlU_ z8Yc;SDqHzGkp^UFTa7(bj4|+t_E|scBq2$&$2|KwdqBl4TS(gtlRcL~xI~C_E-B6q z-`L?bGeo6qV3t^2C4WsI>|Vab#W&wmPXoX3n>s3`%+y?#un^vqa7nt_E(J~5(Kply zg{uM0XDY~Gu_#cp*5MMa^D?(g&Wt>*5%)qHjyw@@9}aVhfs+ja^yxa54HOjvR1}Q318WSjd-blx9Q$hO(z&ku+`e}N_4Uo zwD`F2_)0e{bs}o`<@TOWjkeu#5_;F)t56qxHe~iz59x%h}TVj4b}P z6O|7URzmK3aqwvt4SP|HbLe$P)1hh6REMECdkb*z!ZVPAERrBv4sj*y{Vf!Yv0;H0 zV(5lGa6=Qef$yqC%*pW~yK=GJxo&u~>W^8)(}tu#P2bXvp8F=yZNuH44YyL!1xgCp|qLmhw-Z=KzvdGaHjGT~jd*+Z7!KeROLX{jq? z-!QxiCeaO@oB^yo>($bXwfvIppGFiZO8rgQ0A(5NSAjrdJMgt<9Q%y_4M6% zTAseU4*Hj~%l;^^IRh|`Mi3w$VDge%eAKO_+KVK0c||VpIXqj-i?HT|BeXoRc6+j? znaz+sJYbMK-OZMp7BXs?h%2?2AjWZaa-_xAxHeIc%=#l!J}ncLMhY5kfRz!t(VHP! zR|NKQQ>@Z`?K~Tk6CHE>X?NJ--ne57(9#hb7l>DqT9Lx z#z^xvsQEu_ieIma&0(uFqLe zFQh_oECo5G+rvJq8XPz4Ki~X|Zz`n$-1hvhvVE=IY+k9X(v`=n&bI82S8BWB)a-nV zz5;DP&i*d*1+#TUT%T9WC~u!<*H*6hvCBl2jI2*3M7VOZtZ!z2LH$~Q-t79raJL-|$9ORy&Hxqobncd|vVOqvd zfHNUq#e7q&5ggrHSy1>^@>PI@?5SaS zSY2vZt~5bckrcCHoi1l9k`Q7xPq*o9zRa=v+ltN_3y^gea~}_bet898Hy8&OQ9qhQ zVPej?V#I`X*~FRZABPN@CeEM$uRu`0TP0XS%ORjv<&O$8Y=@b+uA_1A^E8}&iiXH} zz!$I}MDRWtXCfa56M#_1iBRuN@BEzgc$LOmZyGQ!ADrj_cg!#{f_HCk2UF@6Yz+pXx1{ zMN$cti)zlH@=*2WX3Fm$nHPx{# zC7^pum-&L;>p=QlJL%^Xs!A?7?tV_}10{w~QV?8|cup=@onzco5Z#B2UXoO~nf#@p z*J1Y~&MjHq!T3rGL{~YgyR-Fx=4%~Q#sD|12C7m>IjNz$0-964@y{aP;pN(e#JF-Q z3#u9^dfS63FdbIwD(Nm;E7~1y@9_d~Ynz@1+KL{RnOUb7SMg{%wr_(PkTg0Cv+}|y zipR~qh2=0UWowOYMw8G}2n5AZ1egg?0OfWm_Stb*A+`YNZa<$rELysU!dQZuE0gW^ zc1MG8944enK{Dyiu6w47I;^O=gqsHD_|%(HNUPHQMs6)_T#^};T`GM?NUZMIRkyT~5W#~fAK4kBN_p~4fbGEx*E6oNu~ zs>oWCqX+dZf?Kfi0k(^#okI7K^ciL)(}o>ORBU@eW|t@3CXq=6w=E?k|gc}duZGO(~y4{CFu zP%Uu2en0^GYyq(f@1`271g1sdW49w(AWaXYl4|dsC`ZYJYdrre8{C^wx2(ljX&@pl znN6z$ycTUF*=jW)u8Clq@p$?qrv~}8dq~|^NJKJs3c{ckx z+o4|HiZ7retOT|6qcIxygKjwcG)s^u6hFWTLle{jZ~#o5Zdio>r-Xu3%dFLZ<(8MBNrH6$1?@)bYk-mDpGS$c(pchemZiB86nrH*-FBI_u%o6UtllY0Pv(+UAe=$5ADH&mbQqf15Wv9;mtcW7TW0Al>roWu z7g(bK82HEQ_>2{H`t5Ut)3)}KNIx?>FeXTg4nZ63Fnd6s$TqtD6V`^`nol5=4c{A_qY?ZUiadf(AS-Omq2fxc5HN1T#3KP1K+kK|mVpeWL(e)`1SOU2r)&N7dixHd-YG+b7v zp*Lb;O=8GQBGu=5wPdy3?DBmUEVmD-R2)~J2q)w;(#Ppk*fog6uB6E-rU+Lal7h9n zVMLsUn$y_FaIwgk;d`a$58n}_e)$2hW*Yw58bdjuSe{a5l2RygQwxR#X&;H_G;p`KNjMu_UMevt z5L_}vH5m4kFcgsHkb!lKVCK;gs)`!p%_1ltv4KNh#Oj7O5gL}mn{YU(PN)(tu1Aw` ze|n`>T*0vLsFV(H$Q)Ie#nPLvOT3KY1n=H`4*RpwbfRq>cP3Q^0Jnh`x9e_z)3St^ z6Asc(3{<`NNojn;iaaNOH=Z3h26EU5ZFg24LnLp1lJ&sEE!Pl^B6g85Bw&SO?)6WK zRv36rzNXvxLyDJZ$uR7DDWc=bl~4!0gRlc#0uzgFjsdT3?1~lU1}Fz})hRD`y_~AG zFG(1h@YXG(U!2|N_+~{;wP2RSOLzG8#AS;wz4B~dX6re=Cy)H=$uy^2M+j1`jP&-@ zwZZ3=CEe0hrh+5xVEN+}sLbV@mravjRS5&@I|*;n<)PJNUa)rvtNpRZvc1<)q|2kA zP9&QPpii}$*AVV~?Idf2I;vVhspAS1nq|jkJ;33qI>~8dDjJ91hq@V?L$y5r3z`GA zZpXHUU=c`sWN@23+07&WL zPojZ&lN5#rCXZm*zy@iY-4)sHq5CvnX1zl}l$zpld38u~+cTUSh5(mv)Em=N0QX7L z-F}SVQNJRP6T+BMV!5WarJzyoCxw|sw#$ob!H6L`nF^C4A2nSXL9(=1=2^uQ48+(N zq{V&Cs%@$WSn-;ETebZTk+qafGS>(Um=}nhH=>=FhIfJu5;v2T+R(jZ!njgjt}4!} zfqG^2^z!tCYQL4LgmB)^am~`8TV8yYEkV+G%kcg7O|P!aA~GSu0y3~Ah^I;=o8pbWPAejjY09;!(%lAe zjGV!ax$X)yTw$ru7j+dy0#a%4w!4V~iGV|u^sGo#X~K*|!bxVrJvu97nR9aI3^Mfe z@|kqMFY?>NzMZs8wjz}Kbq3S^BqG=4jBzXj{sWIA(ZzIPNzG)#1y#qwpEc#!pu`@d z`5HcLR-v|kRgDrTxus=}@xC`cg}7XjU2uGUYzIZoJ2DG-<9gJSUhleUuCkZifKg2$sIA_>huv+PZ;T(GJ%=nU)J39BmW3&raAmBp~$_?7hw z#d_;k7Q=eySJo$r_1>>6hV^$REMu-MgEl~6Uvhvn1LoqR^+~rR94^@0q>||Q_LCdj zlOx=}9pS!;A@-bL>=E{=VEpr_)Q@jQ70z1nR@b@pF!)^^B;^x2edZL8U&#`##8!gS zgy-voES)-C16&#wKy8q9SytvX@X4+5bpsYgr7x(a~py+NCe{BWRheQS*zhV6VY#yX$Z%n zTX5}wj)bpIkxB(!IwNZ)i)4_C?=f5HX>OG?cFCa$F~S`mzNyo2&9eZ&8yPv36kzV~ zw@%MNBwL*hI5(o}i6ohl%eheTNRmu}`woial_Czcwoa!;A@0d3F_$`2GYOeTN}?$P zOx+xc*C{Hbk3{GM4D*LupHrFutL)zc@%HVI2KJv+bE9 zxebUKw^Gj*n8l=mjd@VT&ouB+o+HF*rF)9MX+y+22w^gb2Ej!2J#ENSoD)UD?l@yx z)2A3^WAbGMc%D!br&h~I+um(;K%M(qq~wHLs;$969&z|>U!>y( zxS0jC;b9ri9W??5Ndo=u8&H<;|&_Og7u;=x1u32*nPIn3e=*LBB#Sn ziI^=Muy9E(70Peb#?#E_OQP}La9&OTWTq)(FTp-*>?ZXWjk}4 zTrLhuXqv~k^ob)UG}Uv=%%*z4DUMIiCauQLb*$!A^Jtr{p8WuQ$?>suIdLN6(Tega z4puRmStBE^N=u743R!gxCmc_%Y5I?FNG?CHoSstPbt^b>*)Lqj1lr#aVxv`#5}CSu z&yf01C=XoS(6Z!g5+ISZVh@ft26jteYEO(Nm;rYmpL^g&@D!w+lDLeiK~CdxQ;>u= zE#={bD62_zKLz9Nbr21atJWXIEIE(RIp4YAXgVmwhM0->VNuLh**;yQ`?Q^^3lx9t z(r@^v4D#jr_>$;;_LwbAz{vAkWdZfmc#Q8#>)00*(d1r40ir*vWgIcEwq6tDBlz&K z^z!Gf1`!KEK;^H~E|V$MJ1$t!>sEA8Si(w{C@}cp#V8=lq6CpS@xrSk`2M#dTc+Q# z#f&EEZFhCVLSMPBE)M&_XVkJZzp&%#hy@X_mu9xC5kxUXRc3~zvxCT=#{Vib1w)RQ z1Cx>yAYXd7Sf#Vu!(BUrp^msRE{4*DFTFu9yO>^DJarwGX0X(7BYFhC9kN38f4=?KPm-8R#^A&$CDiEl|77z$E}+fy+>|P}=(DL_sD~K^5PAWb zULG~Sa($JWm@5w2_=am&O;@a>Tr*C?57mNdbqbJ?p*+?rqD8GyUQsx!3jeUWEz|Tj zVxd6{5b=bFRs)egs@?<4Y=5puG>NpFukdF0aU67O8ckTBoy1tW(hq7jSnt`%T}Rg! zgoCtfnge9d(bFMo6rg@g?bG{ul-T9}&Lk6szSp4v5SOT;@EBc7!0n_y4r&6-8@vGO zWDvLIFSkSZ00XEFe&yGden~_lm9AOxB?A_@fkGW#aN*=T9T}mb>yd~$k{*SI>xH#Q zM^X{qb>2T?1Sg!|f{HE2E}6cN*VI z_PDG=v*28LIaY#Cb^7!n`T?Y^lx}wCn;&vo&G?}moK90WejMY6`s1pm?gpAhzOrU? z@NjwP0OLJh6O3ZJRRc$dh81g_Io$~J2N%5FFKG3uu^(DNqh1|-t5_>6+O+Er)d;Xr zHhD*7HLH=@`cy-?bp=Coqs|0JN@HvK(Lbwvy-L5e6iNw_R%0niey(_S8TIj{ zL4#jMSCN4?o0Xsb$!=?QtrEa?-Dut`BT~g7wVo9`mvd`A@d7?YN-Nxb4=o#Pv~ zX18d-Z$SWB%F5sp4M~LMbQs}Kk=aFm)HMk}i=r7?ASPaD?Ri9?rxf@C!wxt|HN{}*jqds$PE&2%K=zJZBj~9T)H!J<~mO>vDsv19UhPo38`ZA4q zAh^-Hs|yCkIBKT*45Hp|v>ho?@W6|K1fZSIPIZ$c;^y&dCo(h6iZOBpmL;m`CPxwV zs>m1hrluuxxmc)nq~-)k$7xA)kkEIA{bYF@u5fDkn;5U%qX^A7zlq{i+EcA3{sKD$ zJR_jW9By%+YQ*)9;vUPgmIa94IK$`B$0|HoLu`1|u}P?y&poS9Gw1s}T_#p_HMJ+z z+`vNAlgI65w})E<>P)((D}}cmYsr;YQ#iDz>G-RJ*67@8lMB)G=T9X?FOQlsCj9${ zb4@`p0rT?OCcEXnIJ2F+k!2$d3p=%X9K_BvBCOJHiD58+5A2IY)p;%BbbX)wv-2-g zkC50r+>${H4{WA}e`I+hKoxgy0&OZ{%2nH`N&t}?`I@ak&jcI`0W2C-$1R|cu!5D4hgb0j`fTcXvC9$jk*nh3XCYpd_hZQR;L%f{6l z{wbA%A?g)GDOjg4`c-vgmez|I1|?#irHe07pnGr*=OF zCh-i3Y=!C$a9RRk`B(2m2#9z_wZ)F{dQX14VGVH}sf=9kuwCZaA}Qvi_-5F>-QEMc zyD9Ji>wQ+Lq#IhWTsF}K=X6=52DBuG>Nh{IO$=-^f?Y8eglYg?kn58GP{~T6=azdV zP7z${E8hB0t(TWK3eEN#n&+jJ`yUMC<+~lKRsQNeq{*mCPh+?f!hi=15k{U&nWxIU zZj%iWvQx5uJMQl&AHKDM7`%B3rnyL-pA~y1ot7w-{-fLz%pzBM!795Yek|LtY;9B4 zNFC7SL3lB}yd;4Hc%#+6DQiU2_5he6D7h(><6yHmEUR>R{4FU}w;POl(>|9ObU4E4 z25zK8rW)Y*>O#H}MGG7B$Jc>;6^e;+Am4zZ1vXw2qLYOwiK&Xy$Z~+_#~6>ZBU8E= zO^B(o7(>eEsL?P>_ZQ)triD|fO-L^4=H^LHR9QeJ%U6yP->Pz&s5$H$^hMb3G=^Ll zJ}U+^UoPuAINGtAB1y&OMg2Z^orc*yim)1^D3mAM99ZsTu4cD~964xhY*fNzl?x-; zhU;Kz%eJO&qIq(Y!39I$Z&5qVY--0!Qh>5@g`$309RcN zygMwLOW5UHw3T`THftx9=Tf7ZCn?eZZ|IasR$IF?RYzD^^%;+nDi^H%ic}qjW~~R{ zKnnR;VfTJftZ?@W=ajUxqdlB1FCzSMVi zn%P(r@C3LXqo42gp1a7_{W0nB-91)>APCM}d%8_*fU$~@3B+zFBdmN1q4rMJ1G=bD zLsZH`S|B|k0o1gO>K9tclao=GB(EC@YfxM^;mT~9x}*X}0su|5Q7Vv7VFcU?jw@GQ z0+mEyQngwJxD_;t#bn@E3HSPk-?qzqp1aC`dzu6{>CB!{>&$)GY67{i3S`+fhhm=f z)2GdWNt%Gu7e*O_f^wJhDVE9YomO9+V@!F+K8|^}WuuX-17dm(Wu0bYS;uoQ^B&Fo zgP|IaXPwptG)b6-tO{4z-a#{gv?ENT&xlX<%1yyvqJDmoNC5auq+8vNJGEYl!R4W% z;?W$On=?sf`pxjibeS*c#_&9yKeRLxQmDEmT)nB#x)>`2lC5%yDZ4@U+BSDmz%`Qu znPK39Y>~I?49_-i(BLjaEhBPDk=G$vf?zz(@FK9h9d5%h?|fTWgH~fD6l*3)5Z*hu z)Ng@RSQ0QYj6t|1R3HtM(yM4>C_aH{Ob?~-6xE17LBhAX7<8F}EJtQXNYz1@C77&E=(mC&rQ++_GOCoQQamOI-K~~($!q$$( z0Cx*C8KG>|S2PrJ+6>|i4WKv^2D@|P7LBzMnV$B_2sdHUu8;4MWj*^9>loYT$>F2Z z_I9$|m^%jR_3h?TfSOrj8r8nkc1DG^<*GA_&?Bqb5wdMNjfbw&Kc8?av*EozC|Vbj zw!`6{yv1o%s9M|fgH^7ya4t`61wE#&9IA2Vu&54u&T_mmi018WUDTiw25!?!x^Xm~ zjBx6KUicZOhBt2dsL==Gj*aKoxklOrP4?<1-bYJ0E=$g`ddDXwvg${osqd&*z1y>9z*Wl;{PdEi-&i zF5Mn%EqXyB3q>PfyA$J!rRh$lAcZ$}czyJOShl)?kx-ZzfsE5-w%=#rdS5*8p=&~U zYA7C z(7>Oo{TYZ+(_xMqHqdc+WP_k_M6A#HtmD~lS%8E=uVB)0ICm1aUeY@;F4S3eZozOo ziRTE0cJ9!{jT=5DATsuGLT)$4R6*<&+eXs}QVjuUvEuP_&b$kbsq~l^hbhLfW2MVR=-h zv<|41O1GIx-J<-h2+3#DLF_}`=werM^GLZz)A?E!IM7X7Qbw0?hCXuV_Lj8926&7) zOyr7ZEtBXt zk|AQs;<6%(a6xc!ktnJv!bHPlg3|>hiav^P$@n^q!)pEX_3O8tfAH6K zi_kbJa}dvxPvLl?L4Bt|tt(e*fuZuoio^JoP&Bw^wUAnf*95uo#5Z7jgH~N>{Gi(n z`(<{gWD-xilWENEF`taavwnCJsy5ApbupUY1zsNU+zFA`m8h%eiW`e%gE&{nzcMaG z$hCJW#jF;lhU9g`*x-iGp!Re(+b0kMAK(%+s5=^e(bbM*b?EkS6tb*BcC^u89CRm& z3Rw{oq(wnL`Xy8}$%@(wW#l&=4EL*)8(w1Z7m0frwG7=$F>9kuF?fx%Dv<@m-L4I? z)uwogv)>MRk&#?q@&=Z!#^GRutaBXxJdNTIXEI7?pB!EMPuNwqwS1}IJOI5}(v7j# zEpK}H5}S^Dcn46RW;K&qYQ_yOFCnYjiRIu_#v{T0#%LV;JVi2!CY7qarVrpy3`eux zbli`+SOmfF3vtW1Jyd`S;BIh5DkHeaPBRV^qK<5hV~^Ftzg74wD7oz*p2t8Orn$fKbOo zsFrFxBFW&U!$}x-@r@~;qJ*!dccZwJswjlg5508h$cnlYZWNP`>gfxEwA52EZNwEd z#`NjRmbdC+Z6oVni)>qDIM8u%mM-&j*SIrK{XL=^nQEi&It?mfCZ?%_wey-9+jDdQ z47O>M;lXvIjSQpvq#1pnAw>Tb9F1`Do(1UXfa4PNL!6QDGDs$5p~^B+In$zm#$n4y3s;air796_v@#MIj6|0U7^EEJtn`1b{lvlV ztruONVfDjt93y@ME!*d>5%K@X@7NAcIHZGIh)}9U`NXeY<37?PdL0}fG`=l5q;R_3 z;ZX#x4~9q*RXsku_7axNSd%_{M7Q-QQ|<7_^l_(xwdUa%i{M?dU`!g>52qqkn^O<% zN7xDLNPi@4SM{;jF|WEF;ny5Z-L<|>o=@}ET{zJ9*K^wu0+qddg`d?W-ML(d?!~J^7ze&GL{|M4kXP7+?;q9 zI5-Lu++=MObmnCp<1dtWG zjNFl4Vrnn+R-ew1ga8C zRh2FI(5T>h(l%-IcIGZ0xHliL*O)JaWB{*?OU}Q{};&0PkR>EJW z>qU9)#4m?APla9Y`Q56^koH$G0!2>JYP%kfFlVjAwp0q{d(4V`_KoH#q9E+7LjLbe z02$rg?J|7?J_Qo9(ZPfe`+1#ro~9^M2+`MCuE~*IBhv)J!gDTVD!uuYv>9(n^74h2 zm3@(}cQ|FRk(~;vWa&HH$R=IDAu6X*gEYOptt$Y?YJFJY^7UPNCp4=ffDKS@S|L-F zF-u&Pp>SjHObm?Fqs4hF){J@-zAWAzu{WSGkTI;+N; z?*jkey~~h0)nsV(A5#T^7(!cWjJ?qREG{M|2K=YvAe6IJXTM`c_$iwO7&Gf800pvT z->ZY2hDLF2!)HCusq}L3nQvCxbdF|Q^&vX5=8=Y|ZsfLA50VK!USWuUaF>g#OzhfB z>y<*EL^)CxCHgD!(m~)9&@$rH4^1}YkgJ=kYOlnp6Lvev8)~ReMZV93JSIBfxtk+T zTjZI17i>Z3=5e?l)ISD4GFdu{#Mv0AVLwM+eRSO2M-H7u8x3|Q4g-ds=FxfvL!%R& z{fIN?>_5{*FJ#h1CoRU~%9<$_49QLNc#qx8#08rF1k3z>jU`qiNa@27^(%GMgaIRX zU{(Q3pU^ylBS3o(0}pS*%?hc*r1bR%DH7bbdMCQNb$vxX{PWGf{`vM_v@8`zSSkZZ zDlav50r|Y+%`PWLnITs4H9I)YzxtxS`bB<~ep3+BZwg}i?HAU|Bu2#Rv}7)&S6)sm zRTwS+01{vIR5LS|k)U!D$vH7Hdj7wiw=S5gbocB3`@yFS+5uSxHgaVd>b#p`L5KLN zSVLIG8S{ksa`jg;fEF^&?(ogSbCap$BrZ0pt$8dU(sHpSb+GOzoIZcB)xm6@L|E$s zzz%?OK4JGt>W4_Motxwr*06e|v8w8b>fbuLQTZj#xQ*NB=2sP@gLDl6s2|+24_jPZ zuo6`dzs>Qj)OQ={P`Z=bjCj6a=x(R(^>br~v-d{1D^g}ON?V23DPD>5lkyWaR|JP9 zo;hq6s7skNbg|o;KJSV-#{wG6)BXHGDxJNhg*ypPdz`^3Z^3a@v7WYAp?{rffn5~r zs_dM&X77vi={{Sl<4q07NfrR+nwSz?<-46DIR&&PW`d$FDOcn}xmjf`QHBHyl!27; z@BwaIgkzx~I9M_WSr%W}m9P0?|G@oz$nyIKKF38t)qbAowre~ZqkurFm4L?r_`{|X_(y{tFa$`tfx z3rzz0h%~6xAZmsOKxQX;%FZ>t8I?+3!^#}*`k47(G`N{x>i9W$ad~laF{f-eYb*X zK~cul%r4r#Vc{eq_F2_~d;Sr^Zc|7;GoTY{rERjrO4d!70QCZ=P_164V4Z9oCoi9n z6mjY%h`Y)3ta$f5#8hPs5rs5eU$t`6Kd%mWyPP(gy&A!_dBsWiQNpS9(Wtr}KE1Z5s zz?(JW!httqy0wMl39msm_rV9`$de z3q{}hU;+wm;p~Oblkbrw$(3dFxgN=GgByybH6SJcQyZ=Dtt@n_?izuNHzaX^)xHAHaW`>=j9%laS7rGF{p%*-dZEga1A{q>Ovs<$IFSD1*c)D8h^{b^1OFI=GDhuot+$Gv6HIg@#t#rj;;vFV z@2%Imk-S&Pss?I(p;+!3r)m$Svy{*7kK7Kx08#4KY)+SA3-rf&Uu>4`3>JFw%3v^# z#v#6IiezVv`gmz(G@QhvzGV>6<7oyIEl)3$l-1Q1G=uC?z_Q08YIVM9Js&_;K#Zwm z1+JFg+tSpacA zZv<3WGd-)UbkzXz4aZu+GTy3JyI0j2aQ>6{dVo_TJmzGB@mc0%&J9)YDAK3h*bN0c2#0+(T_Z0Ep(Hg0eJS~BF~+s8Ftwmx)5q+tK%NDm zjqvP{#*99@`)y$*waV8Cf~(^hjcI?}Aa?@TRgta_%M@=v=o5rGvU=mpsw3p1o>g@b zR-?$AXN$fI=G2Ow$(EW zvc_1LSyZP$bmeg*fL}0ZVg6%brx#uZ)BdEK`Mh#OBMI5j5KGa{UD5EB1p;Qr71KOL zvq%G&Z1HIVMZ6y~-?FtQdN$xk+VdQ%BTc$!e&AWU-xv8UvbVEE{+RFD=ygWw%G3+B z`6T>I+_UInI>DEE-9(Ap)09vVEt+NmrenxDB;OFkpv3D@wCC8vLzbB4W3$5{ElO^hI_iBvNp3zl7KO7-s6!Epnb`OlHR%Fl9lZ7@2lj};WgkaG# zBdjFRQlwl_)`5P2V5v+_9of83cfayC!T=zviWz9Yhgh`-@YGnRPpFIY!xrgRT;v4R zc4y5di=jSkieJg$rfB`hJXn49c^L=K@BjJcUpDy3W?#mY*mC@0@X=w9`ihl%Tu)!_ z1sn(Ni7ef@$KaHE?D5b{<1WzSB46di9@yXqhb4l`v#&U=*CL{td{$5o%w?@ZK&u$D zEIq(#4s{PfLvcFxBAf5owsqApc(!oI)l`%m$ialzoXkj?V@4l$B9QP&l2vgj=c>Y# zoI+ke?tL;L-a?Tm8#%sYfr^nC-I0Uj&ABA>T4S|NQ;5mJ842qzK$H=&g4#NsHdsbd zpl3g>SLc3<}!m!TC-3P4T7t1b~zeN z#&I;X9Cg*;7}pgfJ{&h(*`YLsbn59}E|jL_oPLrV|Qv^egMf*&Qh*v3-;l6_n%3U@<>itq} zNy>@a-2y;Gp0Nt0KB~%i^4W-?1)qIp0!z`G3@mKH0F*jodJOv1rq2y(-v46JbGBFe zfc-%0*wWa(*&tG+5FcnKK|9twuHF^c?j->H&GYwdsi$cvp;%_KdZL+dNE4pq-0la9T@F4eU( zU#FG!>$o)FGgio@?VMV!t_)^4*E;>>< zy@WcyOA&PpGSZ4ja=MT=685XLo%KGuNB`a()^oDE+Bx3mvK4Ty0+-8D=*JcM_i{Sy z;)s`I)-kLoT2TR)%fg%M+7?B;tnkX2Hz9wT1%Vx0vSF#q$RxMmMP-6Uc6`$)zPMmU zk|?&N2rA)o)FE-8G!C8{qSopC|Ji%@C&!KCK=^*%zoM;+aO~>SdeuD-%PZRvXcFBG z4_^Ywo*6l81e(Nj<3ti%fE-QlS@*Yp^#V|jtQQEjb@=;k;Sy@?`(R>yx z26w^rC`|5x$#4|nXK*dtpxAxNACEM#B56dt%rBTvBXf;M* z0(eBLp%;(2pcn51#DnSNCc0h5G=vbZS2)TE{WiojEyH9SVh8ygOKE_kxj!ZW((rro zNRsx;$C+EYZo1;54e3*Ivs|QJJOrb%YLv`Whtx$ewg-*lj)up}O|c=vOI&hi zea3BGU4a#($!~98OEtf_-)``C;C4%X#^3N4538rN{JQxS*Jju~eh>235DnfcNR35{ zL9cP>b7+hQlb|kW=4+TVEm_enKji5q|7*s91p6FckGLB(=Ib8FXwZJQfawkH@Pc!C*6NgSaWbuO4w`tEz7Iy|`^zxDaCIomuCa>idIqlpaX? z)B>Q;`<8RZ=y6*pMHFS}_B`||v6>*gAO#kx>;2hROFdu5i9R%w)pH@PGq$Q_8Ox)r z8CjW(dec>8r^vw~H^Dd!R;1{kzYP5aX_ThM>~BPBGO%SH+)|5Z7ffMot?#_Jaql2fGqrXxkdyzfdExOntIT{E+~Ql?Bz zL>2#?8(mDl&4+ru!n#fyQjxg%>Kg-O-CX$6jh8svWNGEii-i`y^4xq zE9kYdtZBPwYye?lJ};lj26HZMHJi}Oaw}|D=i(ID)Y!O6TU)QZx@>~|tSBA#ON&h_ z%>gVfdHd{DUM?H$$)%KxTcM~~XJplBCqL;%@;Ae($yVrbGy$`M|FkBC#-*kzdjncq z9`FS#N%gSGlZRuKQYs3*sPbLsKe`H zg%^+)Na2DgqbUnbEf6`z4hY$%7WJ(ubiJx!SIWb+&a3?t1 ze4#oDKB6Hd1^ST?lfj5ri5 z4Zm_+YtZ4hQx*DSfdBZWrC6o&ym4D9-KTCH0*l5^%fF+S)HIyNZKQesw$64{et1r{ z>At4|b5PG}p}G3S-Vm<^i;u}Tm|0RdgCM%Pa{v+6-KKu2H>5D*bk8N4I#azi1*J#R z;qxxtnhL!s5R+mzKR#6Wekfa$7i$%?4;ckvf6=6Z_g{Mm7oFK1u7=I8Nbe=Qi|k9b zX%lZiFzFW?j7_LQ`VbdMTI)E)q@dgkO*Iu*NOI*70MzoZou0qO@ zmdOKJuzyN66iF`&FVwNJ?#|IJ7sSc+XgYY8Aj53BwAG@6AT+BkK!N@-^_(=m#%-x& zwMhWAEk)tpPN%n{FnQWkn~S@^nD4myBp0%O~7a{!kg8lLChv7K-79- zz7j>Db|_InJTccF3A9THImSaRZE-9e-+vj`>SlD?^<1c>THGc=*JMQXrow) zFpO@|g6J?TTdX-Y66$&?+J#Hs)|@330Br3Bzt*~Jm^74|ympE+;-_5;{XjW4oncg` z1)O5Phc^MH&RuH>nBD>y!My4TT&a=WP~vs4Hj;({*TP5^JWy369f+V+?yUi&(Aa9plFfWR#Z7uB z&_O*RVQf9^p4#r!9hA?^6D+3VXpqpTaEsxuh12b%I+}bE`ve3o!eD3jzEmw*f{@~_ z^zHX)S!Fpe{ z>ujBqQ**-As$mN>K1TO)j&;PNCPW!V1M=9ADR=|8jSuspfG1&&mL5qK5Yl-9#ax$_;%L^kfac=BOFxaGK<3C?XbuYZf?N< z^vRqVnqM@FJ zk$ySG3nsmv@J20{{OlAXIDy;s1DZ`}Iqfk>OXyKq92e8+h`y{v3iJ0-+91;~v|I2lBv zWI4x{s>KHb1L+(vASwI=Cf44Z{z{Iuf}h{;t9pL@j4b7KU2Ke9fb>(15a?JfM2HhP z)Wy+)#WI!)JiT>+(8v*>K=s|yjc*L65wpcMq?d>K$#2pJ#rfWz>5d7F^@-Zu>Fl>^xP z<799bPbblj^k=Rm?c}vXC(S(vlbLwWp&t`92Zz#jm{%?Xh%2LFO3P?-y zj86@+xQoMJn9PHlkosP1u-=!a#UovDU=>n>8h1xb0sy7)(zEr z)~^+Uft=|28AYkuhnl{euhr;hO(olnrgm5eQTw5;Gj^5&M@n>@tqN>d&`|VkdMNWR zJykMPx>YL?;_F=+E2(Eq&nc*OuQ0mfwf`?@Yiv zeHH$SrI|I!*dDB_fS=oMxsnmOw~UL2W5tgD!D`j`Mw~h7AP(mg*w&B*AWT6@el6o> zuS~KvY3IhQX7qgy!NxxQ4#W)dxy{OJ>bnK_bxy=a;(mqGu_(P}wJ=H$fH$3v$-aQg z&_8BLnXQi`m^9fI>wYTJ==xSSF|@tmlWiOhmn0^W=47<&d@zu1`vXZ)4|W6AFs|F- zd|U10f2YMe4rBBsYRMl7bd4ABa)K|fX!}cR`^HkG{fmaGhGZzNt0{RcgK(v5NLwCU zyI2Bf&%b{FNa3Z?NFBHrI0(m9q{#f~VBo`Y@fb%8@CpC3H8@}m*L+M8cNQ2V?i>72 znqD-G^Dk(dBM*}*WDh;$J7S-^3EDMUP!OO&2pWbN9fU}-B=bcc@TW|xLssU0C8RTE zG+-4+);ilCo|xOs9coodnc%{T2>NT-3w~1h6$}VP zw2TBd@ycD8ee7~YMVte@#BX+bepaeS5KyoR($!+|w-pV?dn0 z1kkUdFdqlkgC;;Wj)RYLi-rLJ8r4$KTXpIq2BG0R1mNt-^eiES#?wHQG>~YtJ{LdX zTj$TDNg3?^GHp+;<0{j$rtWBLvr#;ZZYYo`mT^szA0@4j5!MF)Kg8yP6*6oBwL8N|I zyi$Y+$H~Sna`ullh|h!=pQoC?TaY$Xc!0DB&wL!c#J(*^9#z)cySo_u!u~k_aZD$I z`kd8>!TM?BBwRC^WyLgrlb8SuN=;UuR*1EJa)LB}I5F#wWO&_41gAtl3kT4zvKEYR z4W<}b9${Pue3%yx06?>RsOb3xWF#-PcrDg_Zw@+CK(sHtwJkjn7(yHkZ51TYo-?Aw zEf4V1Zd+3kg|U1kh0gc;O}!wwRmdUG? znl6Y?{JLo6W{8udehl_@lRiZ1^SP?fvF^bsdumE65jj0k6(Dr6ktzj_&r<38O;Xh7 zgOg|^+8xN@@v9ERjt9xH%+_A~03cp?T=@Y&?0ASj!;2ji!ic4P zXY7ha13|FpUMItfEgwCK>Oczl3}) zp_Zh!QHl?1V(#2oue{q}Ur@UnNxi3jW;_yH3E~zkZYNpJV zSKFtRh4;3~iOd^TkgR?m&5>NcBzX7}-1~R^Od6$EWfnw}Vfdjf{P&$@(kRU}lSW3Y zpEMC}iTA%HZl|3za5HuB$#BNTb+%5{G}UENVXL$sX=?gbghXUAM6+V}5eWsE8S@2s zkYSXp21p}cm=vpd5;8EB2b5UsXSYx?04cP^Scr2yObm{j4Lhh=PZH>7)|xtzR_rf( zg(-^brYv@co7RtFLDn?C_*DPP71ONDw>ggBS`_^~~$2_L)Jm`}!s@n|+N-=&*lQt_00jIiAVg=&2~ML{6No4p&3$lA=Gm(Q=Je zJL;CDXsRnOQpoOt`^a~X+}98E8;L>+jVNTO+F#m4B)BNnr%!03)%}Y9qy6oGD~>o1 z!VpKIEVAm*MEN^tC0ioaBCHq6_ho*_y5i)3y^!LtYh?US_l|2z-JD`={`A6mjmCdn zog!hm2j}@kdAkKBf3S;&*t{m%k$tyJ;G? zL%8Bb@9b_QZV&6lha~TFM(}nI?5(Pox?A?dR=cCxKKzc`Ghfi&+!KH5{;m5!`+CoO zLKeV_yEsKdLVV@b7!&%BU}p3zAHX1aaq$RtjUb)cwlRHpyQfd#fELn=%SJG?yrBhq zOpt7ClbJq^y(U2NmX{W?w&naGsh!sWuCW1oo*}BW*wZ@cUiCyZI?utQXrBH$Oo~?S zIk@EQ;lAvY#^7?|k+-SO!69IM|2l&S81a4YUVyp(;=DqqhV$^*r_w5C5bdWqoQRMP z>dp=@-f--Y;|<3jguLhGN}ZN~&zsz=(17JtvF|CLsoW`i??VHs2h*7?pQ+s1bV<}= z<=x%*x`$k|4bTr<4lM9{IW9wK1VUP3M#T1}Ybm9bN5_Uh6iqw1bDE`eQ8Z1V?_?nI z!=j+=7?ARv41~WEdSy;QQ9v zvIcdB7}#N z)v3WabXjxx(4|k13b6bsA7MRgBH-0E5&pC*rT$E^P4`W4f(<&Xt$V7npmeKNP6%dA z^@LF{Kx1mDw4k)toJ|zm_G%01o>dGW?O&+e0xoq*@Y&nN>FzOeYP{Sb_G9|)46Ngz zW!3%?PlA1cnk3tNM{$j7Nd%kxao5&Wbth0?r=l5${t}i$j8Ysz#&Q@xTqcPR%kH5l zoVI7D2y#<7I6aJe-1(J%;Q7_dN1k84^^ORyLA)Z*YoKwy8>jkYaN00;U${EV+X;>f z4|kOZ0OA$7?j;W(Ox_pHOCD;3xeZJcm|lZ9#HL^A<3ri|QM4)I)EhhOf#{*wueN8P zI4OPSIu3BIkV!B>|27r+)x+pk4}c6I`W6SV?+&;^GA`f3{Ejp)C;Xe@15{dR!F8~= zW%?PHO@gpXzu9}xf-A7>1te>UgIriXQssLyB;#<9?$d{Slj9u~>Ii6Nr-(S&4>L%N*$oZBHqwZ&0KX}Bs(k*arQX`i>&7HaQQfs({Hl>;BgWY6l)k>SJ{#Dzd z{�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

mX4 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≪tn$Ug-pY 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

v8Y!lRNItF5W5kPh3CAvthFAfuUx^+_83>qj2 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 z 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

@;0Oxx?ldUic*v=*Q!FL)@*iKzc8%2j6= zD8g=RX-8G5IsW(`x%q(Zip;fJO-Q>%kHe8;TWDu%Xz19bHItJlNq8_T zQX4GGne5LLqi;6L>45&Tnk%9uE*jwAVh5CGfFA#C+Hq%Ef+b@|>Fj#vst0)B0+T_z zqq|{N>FPP3P&~6b^vobld*wI|6O%d%DJ{Z_1*(&_r**Tcrz4-^tXWM%Nx zCV(2>O^37hT}r*&N`QQl2!)e2h5?4YHOVYG`sPxR$-ro;zy&VF&-l zLCLO3p|ERqJtY^*S8#V{7LwoHOeu405A0X#>JLaI^%pZ- z%A_)eEuWGpUNhmRr;yz=W7l3quHdmSh{lhefIiF{<&UJnwj)h*i@@DWDeeAn z+?(H%^iX?zww$6z#klgeO(`v8TJFuyciTn5v{&Fh^}afJK-;u1vkS#%pT*M-3@P0O|@F`sCr z^kCn`f&5VI|D~Kd%$2H@xGaQj94dvwm@9{cDDT)A?{^cnr?vVqJZ$WbFT{{&(5w_# zfU3{x_4Ulv6`~O1{DfockCx8>Y|9MbJaw#is__K|Rpm<3&*8caojTh5@K{9okt89{ z8A*C0<(`G^hN4H6mt%2WU0o+2v$L�X)3NnRcKt;K6}NB6KZ(bG^NFZ z*C5fwT8NMw6xr)z!}tQKq?z*$)J1F&hyJ*+JvQ@6r ztR`elm8)0e5==FD3$aYni_v7DiV^x#x-5n`+?yYYh0C~=8LQOgt7?C~Qf0Mgdk8nd zIM40uTMcVDOO5B*if1|Ry^nHR=Q!k`&Oe=F@{7`o+f$nq8S!5}E<5Vhr0VK<&iIG` z=z%CiNR;j`i)7QZ`N596u5xT67A@Z$S^w;o6C!Qf1oyq;p+{Mm96o7Ou&6^Pt{Fke zE`W|N9*nf~x^TP-A01q}pU_;)UyvwNWvZ7vx7HMh0s6FG4C4#Nc9Zad%jK)QqEBLU z_c6meTL4DgHCyQyffZFX-%T*9c=sHc{*dlsB6jEJYHaJ%@sHC%Lyi{9eA`-b`9AH% zbfx(xjZ_KGscLV#tscij;|`-r{mMi2*D?7egRjVq-x-E$d()Sg|3NpB{BF+sfc9Pc ztcb3IE&sJHGPhMwzkI*Z)SGHn+S!|`w~y&mjLtT`2ddl=P?x1lG|A8I^;5{v)=%RK zn}^HWP}zjltna*ZWn^dA2!P5F4A*zurT)_FvGPrdsPC&L;~(gAG34c%yw<0JGWq29 zg}D^-`PzeTl$<`bDD&A_e~vu|9;`e8!*AKDsN9FPuu6@aoCHws0C`Z!_+)1So8jTnbKZMtkW3(CRImTuQSkRUu&!} zdYq(_e0`$6-B6XP%G{Fveau$mvCoUL>hl&8YS`+@k3T&Z>yP^SdPeU(CuqZphoiEjLjGN>7&JA?|xuF`Dw! z_>rLaY;|fYPDz5=k!OqbNqOD1E}tOD#r*=mdvhDV0Qa1?N$Txpd@S+0b2((7;zRoj zp1~SX{NmrvQBhKLJhg;^H`i}}-s_AsJuz#w+poi!i~h-LobgN6i3=S(0s~I=f&LiO zc&JE_kHR6qtqi;7h}umw?Li*X)X2|M&3bAnYG~(>_UgMrI|MQ|^cY7L$4p4&@LL&4 z3!@zTUhW@UIlFe%K6Ax{olfGsN5oHIHbo30@B0NHYzIDa*4icCf`2aA6BV!JvPDVt z)V(1PnF=xC&#jrtv5bUoJldAc{XKs3CCXu3CcO?73~jC?EZ6kEw{ta!<&OD%e?Hq7 zd-jgHA5r(MF;e|nh46juweB}`%3afye8QkBCQa=52|cP}cUA=v@>^^x;7q&jG>_e$ zY`eE~1{mJD@f&M5HB9hc+WqM0rvWe~{f7o$`=P;q+vMN)xC980Yld|MWsQCylAM&U z=rEi7)b${a$3NiP3AF)9XSq6$S@<|CNW(}ASw_V)ixtDMRA};lGik`>d*cH}aR4uj;4%CEj8ZG0%F zsM^H>6y0&65i)U6xZ@Jo4VaB-_vN^hzj@rWn3e7UPEG2zQ*dTLIrZj~hOfzcXKS9bMmIlLC>B8W#EGKc{==`Q@hsLOzt7byUYUaMi~aobWOIGqJ#@d;1Cs{5q?Q*y zSYS4k59~kX!zGe;Z_3>++hr9?IY(>&Vh8>w%8-%r7Fio>$l12T$(?7v<4SiLU$c_) zb_k76QYd@c!!=a|atnP$NHi-Qkv@+XmB)&*1dwxSTN5~!aA(MD#lPeHb+fLO;DBG5`OWe$X2ytp)lEhUAlnVvQ(PW(GQyGG!;Y?tcEFPI zdra$WK<^{JLEDr=Kqyo6v2ob+MWYL!p)AqK>=qcz)$!e!b1Gh0>rDK-N*6m;C7qMra`h`)kVpWU^YDpuk*9ji;C=rWi#uh^luL0s829}~m&x}Bfq{#T zu|ZMZd0G&@D&#G#rUnyL3wP*A5XIOW`sI1scIAIyAN0mcwSxa(1F{Z(((qnDlRL-E zSw6hT4<95qfaPzHuXT!ZqT7%(iIn~gzGb&HOj8Kkgv}e)31I!g6Gta_ZTXOBW+#hI z61QChA)UfEJI2F=gNi~`Z__VbjzFzh3tF?@F6jOjci~QX^Q_{Dr{Aw;r zt>k;w)CVxZAX)S@RwbEP08sBe*1X)@OV#Bi8FT25*kuT?^H%6l8GZDr;iBmT(qGQA|{oMbY7Pb&NcTOkL~{$@X1v%$r^$O8?h5$j=HvZ}v0z;lXw7Jm73Q zcCCynJtp?&N=Vhsgc5u5IK8u3km`W{aqpre`dOQ}yu*ygBGv86>F)BaouQ9y1N8k? zjvv21)WW_|-)SLrmah&01c*20vE6nFTmVZq7wI><*Z+^m@HMh8uG?})hh!ByISXwR zG*J(P<--{a&-+k;$x0s**tp8(YZ{fU9ut%yH`AlE9RW3jAAju{diIBpg4 zTO-D#uQ&$XxIZmm+noi2G?JJf5l%2VEgr zasOW;q3H){5No^hSWkICbLkL-;c_4Mr4@dg8O$@ttWo;u1m5~fP{U_ynYUljNiyvV z{dfQ=LP(&;`cD&L!Z9vG1_MD8H?xf2r&wt0^Os8ww%k^z`gm1$A<6gkRw}5YU5DdU zk9gw=<9(TaKugK!clCYXg<;ORz}?44e7NqCd@xm7I+C+!cBaSMqp5;pV!*>AeJ^ju z?!(EWbcdK3BO{N@P1(J?c3Oj-5L>a(aNOZX+>NxMBItC@dH}>Q8#%La74L#7VxQ)x z*;MxQu~tK)2D3q|WSMM9^AQlixpepzDMfvJyqz1ejQE=%gF35$k9FV#WEtMpa_}cv z5&lY^{3FE>tM7u zQS|__TpV!C=j0r*RCa@v;8_mk$)~!+VJRCXfNmlmyBImlv{hQap#LLV7C30iVYue8 z(vGFXl31(N!r0+oKfA7<0W!nxBZ>_Mb3kNOqdE^Kl2y*iG!hZ?bN%_F15UJI#c9kG zMqt$5p@Tpl5$RjE{^{$SX{j>;*<)S!d*tHG2Ys73ob$@3bs9!rnDgdqut2K(<7JA8 zr0|7o3~;w4l~5Uh!(e$*>}Xoy5fCW8GLhT;PGTa*F#ha0b-WEyw}2(52!fuBu8j; zeH`hC_`Cd=*-HR`!n5?pE@yxUF+H_8rsZA`8rGnn0Sb!~N6&n11%SW#E)HpKHJ4_c znaYmak1NkB?Pk8x+sbDoGQ7wH-+oQsOEda##@V+Xnf?@@xXoBrANtw+zjxSadc$Rr zkV`}@Wv_k1v{5-^E6UBXz7sS*25-%_Qsl4F<@A=I-v5SOdD(4+8WD**j49M<_FmM} zG9#Pv9Bq=LIQ0PHebj8AZD(U<<+{D^LT)Tvwr+ZJ%_Sbv2md_V8cX#5_7XvQCpf^h+Va9hgS?T;9b=$F2X_L$1 zL>b3JR0~yFG=4Xw{&!cCP~Q6rs!M3V-HGx2aq9imN%nm<=lzayz}<0`@!eWgz*W`N zd5<{NT_Hzyq|Iduq`}qDqs54$snVtMT*#Hq>+Yhr|HuUl%`%2ADq-KBt_9rQ9V&<2 z^Ld?grrlIb%)nfDE&;MkUlAmFFKs`(bI&gr06rdB6o)W&o2lR4*=go<*AHK3=j)=E9eb= z>t$#-Vq4L6FOA1o?w1CcxXFfk-QFIhyIMXKyJnB2lB&`UO@! zo3|zNPDk-A(%{yt8ShIW<5MJ%?HJ1{mw{O z?{xfT7GDR!!cWuHDlcp5es;exW^W7VygjnM+MkD5?7gamh;K98M)nt#y*_A~MXZle z-8Va|-O*8{inC2lR&Y&~mkkV2T^60iHX(5inwt0nc=d0dUU$5H=T-`>T-+s1_h~YH zJV!J{bIE@W@uqqd$M^&W-J*jfj2jt|Lw&nsj*t1;K>OnNaJ>W~I18`ahqbh(;(K4D z9viw4A6g_wv2k zj;7vKmF`x0dF*(!Lxe>lEE#pY19cCg-kMCy$fTCPM22NjD_kOtg(b=FlVg{l;&l-( zUuNA66zCE#-V5qN7k}(dB$V{JdVAE}Mx2|!1#M&IP0LD1L-nj4XU>^yV4hiEkz@Z8^=4yCKF799N6OGYjaKqc~KHD))EnCitH#`5I`>;*;5 ziCs)C{sJm?*by020)pb^)EmZV5na;pC!9*d(7yiC=;=T+d)(FWHDbYX0Z~D5a;73m znPHp^@~f`0q4U7n;herpBF0`(9YQp*aI50p-R{&yrPtsVy(OrB z`C!P^J+uO`zq=M$)Uh@1-v3*RKfUZSH;}Z^1BrcaD@O6qt z{P4Qc;R5P^6aDG>4|l$umL4-ypTqHLJ}iJ}H4%f#9;(H3{K*@6?dZKUsiZMKOVvu% zsfM2qai=D9Hfp`}sDlfCjKKH5X{JJ;|y7+Usb9;IcWD0l9&woyJHCi>YSw{MBi5MJT$$H(Z<-ZakYRJ1bI}5bl2W zmZI4lm5yaY54d2B)`I1$zodVPV}6B>BPAMW6kl98)Kx?pM>vDr-z->pyVl)Y7A!zU zIBn&|MU540qc7wgl$x}OIE_CFn9J%*U%tPDI4F7DZmJUeo)G)HHACF=9Q?eY5fQq0 z{5UduvF7K;YQ;cEh@ST%CrWT-bJ>dXcY>(|=O-j#M2RnY|7^91W#6k!o2y6qi9tBj zT00^C3zzis!Q4=*f306p~%nBOAAn5O6YtRBXXe1;g$ynQFS_O!s1qGs>QzYeAm z4S}sfuvLG(|R)S?i2dPER^cAdQpAcUUYvxo-FQeZdTj1Cy>-s+qJd(kdHj^ zcbXZ{OEGSD%1qQt@JX`Mri>C`;`+RkRl9%RDcw%iKkYpyLmK}6y)rO6eVmXXt!T3w zR6Hgs7Ptz8t=-5N5mTl>LV%E41YvSK&K$_F7S*U-zF`Xq>BTdUXP~2lfk|UqQlv0& zMA-QeW?nU)SeRVDpqqlVpm~M(s8BfBZzZ$u**&T&gr6z7e9fCueJB=1Hyxwwg&UG_ zVgna~FU&)t zqT-M&blYm{HwwC)yR=X8bJi8EIqNG9uZd^v<}GC!N;^O#=VB7}6^G~ijl3mI;a=O@ z`X!)LsHLDbKpXXs*^UsV1O#=D2#kjfc49KYUWq49L)a@fi3tp;v=5fu09z3i5pDAq zbeuxjtJ(@Vw}fGp5VkF-rDm&QtJtmoVJ-Ko>wbB2wnU$LvSBQL!Tk>v8Ilno73+~O z9SOdXkQxn?@ue7GR9SsC%5TX?zcD9J5BJ@ABHBcTG$h`RyP8P6t3MpDj-ecjlglk7 zz}_fnqEKwn5*Eddm1e)q#7h%_F>6^c+v;}30)~^Xzv*Ls$Ey`%;cG?zzet-7-)ONx z;W`9Qsq`Q#OYj*oz$*6_5?qz*eHI^Bm794WK~;^VJq1+pqZi|x&C=tO<`Zs-H|eoT z^N9~trN*dcO)zJs#deKkM4x%0JLKAo(gj4A{5mHk}DI>C(jp#uU&1_s`L^6FeKXeo`Cm@*{qnkAVo3L`Z zkhLT~&lnukBjB_Y{A9*Km=r*(TRjHBUSzq&;4Zq{(=nH`1-skna?r$fz0VNrMX#HH zzvxXp5DW%jt4JJ1r_;76d{Pg=pARj9U$3Y4FRxxLo8@prjD~2e1>!^9LrxRq(xl=q znk09oXkAzhRlcpM6G6qP@fkox!%PYlPGb@hh}BpKOTcT47V(%(+OSdKHf{#;40IO! z#yhrS!Ek^P83T@ElHFrDN2(R|tZ|0T^)skdsae$<8J_9V04!S6$2Ro`LVk?y6Cnt5 zATuIB*@+(%3Chk*Mnnih`$I>Cgw-8g)|O`B`G!1q(iMRpY77_ZQPZycXitE@NC7?> zbY+H+bg{<3NYK#yTe?oiSvehe>3ZGQ1v?n(Y#W%cjNxtjLwgHP=kIlI4&*|B7dAK( zO0Zzc{@_>mH2*y4fAQTGl#M`R?V7hgTu1`$empSW?-Wy6*0nVg;GY)l?Xa-Lqb^>EMF@RAvd{td%I- zoV98z4(EkgoG(I0i)d3Xxm6@ClzYFPeC<=@^5)t^;U{1>r=pv)FAeJbQ)z4l1lx6% z0=+VY{Gl(s8YmnX7y(S%dp?{v-(Ev|m|%`$d)Ljhnop+Y*V5nitEseFwSc;rijS{F z7?pN1wp50O8Qt7Gy_sHbT2rAvSL|iPt)64$v0v{`0-BiXIRV!iQm(iCJn!KT7+{_pUCM*?3s zcX*MA#6g3IL^Nj%75+-2gSvGOs~uuG0}1Mk)Ii}zd0p!N5?gcnuw(Zq@y8hF*ieA5 zM+rRoB89rPfRDD|2Yb2Eu$b<_2C?LKP<0_?4uM8SJ%KE)^@j`+v3H)cWvi9a5 zGs}`~e>RsjO_%Ra^wWb7XHo8~{AeE-Q94VD`E8q6-&Tw9K~cQsTOmt!yAz+X(ydRH zxw3Q2BI$IZMfrD*X<z>WGQP#hFwS0qbyPxb|+DfvZaxBG3t)xpi4JUb}R>C$MU(lV>#&J zz{-y0Ki&n#{Fmy0p|P^kwZDEY^(ehRP+DL|q7IajN>QaQA!e){^&!Nekh|9A2mg{=1X&so6oOYy~a<+Jkj!hTS{`8vGCme&^XtJl!? z>*ddrXUpsP<>`98Tpx6A;2F+fhqD*oN~Qk8VpX7BLrBpm4*#Q1N&2^t8wlL?yTI+5KN~H5|C^eY<|mwf$4r{2hT15Xp0Q>bg_2X(>?FH#*PK4W7MZ}d z<&g50K4A@JN_64N=0dm~8S=a6nS8#qUzO^2Xv7}H%ONYrK7zI+|Ad>5zjN!ZDbPJ} zY_h!U+v>6lWo^w4E2b0c_ApRPj@_g`+-#}KmOxvxL)p1+)g5q$Yir;gJ}tGWAmyg= z28JE=SMts|(Wz9tNW^N@7iVjhRN1|JX9m5L!DeFFBV2GDBv4(iEIu0GjCC6(c}ym~ zYD%t@Gl3#}cTKCzD?)9C!!roA*7Uj{#kNfQVvwiSbDdDBItVd*1r3yDfkvS0=Q5BH zgwwUMSJ4mu7N#%GBra9Xe;&c*eP%wG0CpXjN)L}|hNBAEi5}$eLUt}P9B07N{Ls%e zI6eQs3)K9MHdTYIS4+U_0L^&6NlLN>%G4~u#}#s(PU(nJPpNF1KN^^ZM``R)8GFP< zi>4@{4mFyg#49o$f{~w%Na0M#e(aTmCWpv-h$JdqF*#e&MNwR?qW{{#m_$W_JjGz) z$7CtS4RcJ2V$wHd!AJE-q^IwRJ~>e(fvhLU^|kawpOy&oltI z)5Uc))M)^@GxSjaxzcBm=K$n3_LMP?)>j>-fa0tv3Vj3bqC$|rezL%iN181k$(ks$);;D=i|h@sa01#rZx$SjFQ2I1*xZ{ZIt>m4E$qc6@9 zGNj6b@bE@meGVMUD(1purAl*cvf9W%&^=_9hQRHWep8TRb)a$~_Ib!14y(^Ye=d~X zN9|w`y@BJJ$S&d+`U`s0b;;OzEBk9>BW_068*{JXPP7cXC(zCNnANMh|~ za_e;F>&M>&@7P-ImHk;e2+cY3Zfh009rTHptB7Bflwn}X`1^1AF?{@(_4bGEhp!ZE z>Z<9Z*4ER0Z8lK{=EAKNZikYWR+dIyQvQjRQr*Y{a|Pnn09{d(SJ(<=cz%;>cog~l zM%D&t!)gQFE&IR;gfN=hB%_EdPxb&s%tc*>$f7YP_Tl2qP?(e485(nvE5%|?avKlf z;t7qP!Z0+MI(L#v^V#ev)DU|^27-A>xLeKY5f!;LyzBNEiiCHK<9PL zzW{6-OJep6gnb$D|j26@OG4l&3>e=fwpN9{vT z>XUXUd#jlJv!}LQ2(b4sw-=sv36YwYRA--IC=~fGTOdE^Lufs++XPsctlXmKw(JWQL!eBt$}^Zl%ZoN)OJ&AW-$-Tx9^TLwR`UShm&r z6EssBvwfn~R)1tzbQ-mpBLJ!cHjNJyvv%UuAXaT%gB=ZV{fWn+3CBqhWDZDLdTi)4 z2|{HUG5=#jtfLQ4!&(#BpaTTTjXb*~9Rfo8Ml1o3URO2410-209ib3sxk3!YEY}}9 zrmXQ&5Qr>O7V&isUcbLJr~gw2k8RgQTwT@r?tI=gWxC`+?AHX;7?u7k#gQk{MmP54 z%J^GG#COp8Mw4zB!7$l=02EDd%xAwc2&+)xTMabK6Vf z`1hvC_uOb1q42k(6glm5u_a}Qs6@S@RfmDV1+mDcYdywswtkG_7Q)Z z0^p|X555xxVxVO%cjQIsGZxQR$16u{g`Uh|q9^op=ZKH^sQgt1MD(3Q;61y|a$EWt z1Lr~zLqlsl2Z{knJF?bKZoOje1Gm@KsU++S_>Ftmo6k^-Z;T@wSPyB?Z}lMzyFKP{JKX11gLsZUz&-mp~aniU%)Z&xhuU z9scQ?ZjOhZPw?6o-pk8Acoox&_kwcXOM4%2US4WNn9r(cUf^DyF4woyt;7reLG)_l3!z6ev`9KKuUnQ?B#&I1UL+OCqa#f(l8O-Wa>knGhGO3SvzM5s4jaIl_AmcR zK6>3XS?vgB89nf>>(E}p@8e00xc266r z^-ePbeW`9r?&R62y>E$DW|me)kStFNt;CxqOe|?MaAi2BMANh!SBry-9PndAM7CFWT6B^cD=+zic#@mLu0oX$rco>g=JVsbk<7T+sc8WmXYp)N~L-(X7r2MmE{Oaa(gAaTsarPd=W%Tzg;u2 ztnl(3FQR%bX82ldV@B-o)ny&ah^YKntxnI#S-Yd~%xP)o;b);MT+`oI%tSnTJ}X-z zBop0imMdpsM4!v@J`G83JCmiVnTT~I8T8JPw39?~AfTeYB0c?YAX9F5#iM z-)XsvIK``M68xnye`~}A--IQv_<^ADXRFBY1%EC5qLfj;2BQ21<)$dUxm-v2n2GB4 z%EiQQO1ajnl*@_VAQB`$j@Rga5X~x1l2k_hhKlT)NQD$eq}{(%q#FaBG;N=)ePKl= zk@#yY={l__-4IucB174%Xw2=QVfiuA>_F94Ggp*ZqtwQH(psKBv3-kag{Un>cqbaH zGYN_D;$_=U&luUt6E|G8(u_v+Ek#f#vhUy4#>Pnv(t(bq@80b{6NpO>kpwiY$>m^HVAS4g1QvI< zjEW6?%bP9%C$MGj#O}}72eurLzL0!Bs~EAJGYdOE z3#iL<9f_IjG1&ctN8B(e%CajZ+iIjVzYz9C3Q_eY$4_5dwy}qz8Yz8kXt|?qgAN{V z+OYA4C}1qpwdeED(cu@>ywFEpMEm%NLMv37cuQ>exuPtw^w7js?7jcW!z$hY0a^GY z`?Z;3Rp|GO?f$Uc4Q7XwwH-?wnhb7x#t$U->$kX$vi)1U@7GWMzWZCe-zXUHrbmBu z=oCI383=zy4T2)2tjMR|T{o}DQFql)?jfJ3S(k3aS+NK31!!WJx3?V(3#l`Hw zv0BI{5W-?|rG&6}dlm?bzr;aUyzIWAAWnsCzX`=Jw(Y-zp&OLX*iDE{f7r)^g>)3{ zWa3mzWV34<4aF{638{Z4U>BXpe++K&k@`I6u= zRF*F(8Rs^0rTszj95=Gth`)spck1Gf}~_1R}AzM-994DKeYLV1Nen@pKvgL za2&p1i81V!CfNjHt*bg?{iMs~YYvp^3&^AcDZNc*)@jyqv^ImkD!S~aAB`!X{ z@?Lo!?NR6Srh{BZIxjl3+g#prC>=CjbCDi%_VBT8<>G3q<|VMQep7MoK(cI!`@h8I zD!bpG?DH4y@5jWB)uoabP=3?O>1EpYSMsI1-EamW2_>Ki#=W)5i5R!9YM2B2qa1|6 zViTaR8RKeVIx{@UAX3$BgU%>jtk@eT4u}zhm#VVsR4ITQN8_094f2w1sK-%pJlKz$ ziE=(I$Vm$RR!R#kn%}((zXq{=Y&j+Kn;A$)GdF8OR0t=D1Wcj{^vr8ToGvaaaaGMe zNNCL)0SV@E1>y(By08*2=aunY$v6_iuRo#OFjgZRGlL zl00{+aFf1E*iL!J%LrW0ZCzYO9f^2ZzdhJ?g8b;9(y9H{NxtI+P4CIs`O%YSrx&L$ zzB_txe0p;6{N>51sGr5i;+{rL5fd)f&f*?ED-dMF8amvgPQGZV9Ie;W`&aAb$NLw{ zH}yVmxt_8a_%+T%exrkBZ1N&#iM4*XM_4(@HmY{;po3NwJ9yB398I-@2OXjY+rb0f z4t@^X!2_`k<1@Eaj&BZR(KR0^IrzMrteTNj%g)%@B7Iu7ew+%{ffL&K9Zz9I{NEal zv8SmY8HI?Wu)wh~hY&MdP!Pf`+d`reULvDDg~(D4_WmVAnF}Yzk9H9#LH{&<&QudA zU3jV5N-x1mh33{sxq*BPe5=~-jsa~miw_O845$s{W8js%ZlFCLWfzW^7R%JM@ZwUR2puXr7zm zgAMz6QO$iJ_^v4E5RE@NYWtce6zyy;BUCn)?S+K$kI>0lZ4p;vtjcYN%HBwjtm;wx zM?|AWQ4#Y{Uk{D?c4!+%>di(ZQZ98I`Ke1K5HvxzhjiJ1_DDiB1nud&)wVr?;K_tC z!t79>kdJcqDi%CA>+AR z-ma#X+iJ#Mr$tBk6OMGw>;Di%%3Gd7EkAK|R1xY&)P<=E$bQm@IYeonolN+p5EH2-14vR#By9)w5(y?n9KPsuMo4kbjV~0kv zwWkFk`QXOGg9$=axXup}M!|!s7jIYv)Ds2|qFwJepi%OmCk9QKATn8qAwZcf{CK#G z3-xF=TUVP6Yw&O1z0L`nLH%LiGpJq!j0QC`ayZSxQaP|1L|~9B!Hz~vp%)YwTW>*v zte2VJ8ij6wZ0&5^CgED}FrbT4;anDNz)#my+zTcEiGMi=ion6Z*8F%_`tYRUVt&Hu z2b2^iLycqUc$sAsO2*A#l0_Hn`bwx0)nb9T;1a6HF1!RA%#TmGrb}j=3hX)(RDnl5 z18$X_=s|F->|A8PwXif7iEqJxR;bk(2!(=e)Sx(&a}_7RqY%4<@#9jKwMN`7Y8&Ku zJc>Z53fGx&DgEQR{7LeOSpzX{9zaC|zGU5)KCcuNB&N= z{R&+3E7e~(d**ZX<@&qjW-DgwG1HaiCM2b2{<%XnMJyb5SKB-n9|H8ZiILEHI-B2Z z_8}qOGp&Spn|KMGX!z3DUs;yzkY3_kd{0@mD}5>1HtaM@p_k&l$#YsS z(e|d!Q8~9%%%Gh-<+S&_8);%_@7qokHP^}rwcBZW+n18GXs4jcR5*iU~@V4B-u)gpE?O>;dBK&M2!V*O4K^me6)`Zf-6^M~4 zIdp-ZKQ$9?rRC2Sy%1Yqb*1#PD3`A}RjTisVb_<|UAxM5cF8*etR%$8Kc%YsmcqIC zKDu`&tZr_w44=2(P*OKt-gOJMC3@g?5&2Xx&%llERB!sR@Rrf6g zw63dLYb?W^t}E5|$8_gP+c@sMcF9q|oO)=hJ(eo&na@-Wms}yF1cZL~756Lww00{# z9g^8jx8=%vW>|QfHjZ70i|Vl=WgyD8LTIb+PYM#!f)WA-?D5M&Dqf31uAD!`1nc@_ zPB-zA5t;wsAN&kyD0^dOko1(jahD-&C5D$GQ&$sVw$kh3${ow63{91(X3 zXGhZB)?G&EjkS=xMapzbmiO~Tk(mvwvBW4{Pm??GC^YdPAgb;^nTO3fK=2WoazG*& z4Q(1qFcP#wBNz=jaW@#0W-ytAWErFiriTQG1S7lM-UdUn3lfqG&}8_%O^VEdjH!q| zV;Pc`h%vnBDT>dR?C0)daKq&%f*pq>CxQ)p7N402w)a5N5^cN{nUe?-8w1qJ;WoO1 zwDJQ*acL5bY$-%k2{0BRhu5J_eX)&x#N?$)da;lcnDOEwF(KUrZZ zUm4>dXfBEjf&`u8McAp_M|mZ~mh)0C8fS>Llyt=x4#M%dD!ETfI;9YUPgup74o(by zXfpbwB-QcAhj=D(6bB*oV;1<7=J11i=}#IKLUC_CmKqqbwjZa=MGcstJC32VpVrJv z4Lo%AbDp`V0dr2n4}<0+&oy+)G17gHoRY*zOHAaxi3%+JbSg9ER3-*W4q7zvWvM~q zutSnrPDZ93ha^4&={O;nYmlhm-}u9g#hhq-7{?gLcy`9U33{1u;1v<~e9I*thN z_@GW7{)&$rT8H)loiGG=d=sr(|k)AOc?hIH)vImWCX5=Gd zJoD3Gu8|&!8Y|r;9_AV*j4e(j$!DF^Lrv=GCHa_=dLBtScqE-LQr5q`pTJ6s-?0{w z;^b+^d^RTB$9Tw&?~ona8Thyk*)bjPcuwXlkL1%QaYs(xtfz}j{mbq1 zY0dA)_M2--i5q5{T7rgI;4^0;hFN}($q6Pg2Yfx6uGiE1ucd!p-7MMi@|SPEnEd&h z&W*fns`0p<1+0H03hlbW|E>$WJw%8s^S6j_4%9F-B#5RTfsL7tjJ0t&(9%f+D6Iq| zQl$_OFY%EQC%2^d2SSzw#W_F$ZmKQ+6F1S?IpdclFIfvyR3U{g>?2JFQviMV{b5MP zX|Mwo8PqTW6`CTTA%^DDJTB$zY`DBj7rSPal^1X8Qs7oHF8BGYmcw*$S!MoC zvD6JF&si$&-cCMJjU9o>4#6~5xzy76`8u&S{*VR?Eu4>v`&ZeN?Q9nm^@^q1t6b(h) z!P?u`VH&g(dStfb9=siTko%S!+3(sR@O<356OZL9*OK^B(=Zj=_- z3fJQAE7GQY7~GwiM);s#P(c%oN%AnNHOU@kW0|>oUauY!JA5(0U^|;18)T<0o{>V) zvNQ_r)e0CG-|~hZD|buM@OirQ$_qDg&6dbE<9z!kKi5q`*v$QCZM`vKZ5Np}7cAB7 zDh}|wx5&@McP-ey8{c=4KXD6K&N8QK$vsA92`NLGAvKGb#6i-qh-uD{a^<0L&q%9% zt6_M9-BOXSfWuU}+HA~LHe9&dIe}g$cPp`Oq;Lv-KH#vQt%vsZ1YfJSy9{Lk)Y2}Q zSLuHcpQHzOpS&#eO4QCe_^S^(y2kTY7Ju|>%cp=OddHACHfiZRGM;7|`3w=uK?oltjyVV?8KRqb zy2lgf{1hoojg-FmlLCM|)WE67%_E4Rq8!OW!>PjvXT>M zgp$KvRzk3WFE?Q^p)XsDh~O8=uqB7TPz>Z5Xxb1Mc5I6eg4su;mVYQ#dk|v`um?T{DKvO1W>nUS!W{Qa2pCf1o-W-7P;YXTlcZ(t5pGVK;T0WKMV{$ z6gN4b@BrE$`t{0THk+XBzLng!`fi&)U=unl`s~|dQQ*(GeOy@xG{3Z16z6{kU{-8% z_#6I5i$_aUwo(ntQt5zZ6A@V&fh!WB!DLmN;d{gwq=Gnx8H#+`{jD1}4&Q0oFA|PJ zT!N_!!&`D+A8Z@QkQ;-DeuSxGY9FyhX^6SEXBo zaY#m3l@76}s!2c$k}9`?Ku@E^os5`T38fn#T4dBUKEP>@fBUKK?kA*rlFL{b`Q-Ol!-npnDPge(10x3m2P4@*iGsrzRH%qTS@nOW3l^rWh$ z3#m5+el)Kyq`+p8`~={5mX3oYkc7+G#ZwUeCQE5kZO=c-i=SU68+Mt(CgJV`t^cEg zei=n1yRpPJvc8`j^sBMI?{{_I@5uUo^`R4dWBU-G<_9KvR+x&0^ZNs7lYkiedp7p> zWc?o>^xF-8@0WGwmxS`aKalq=82R5f@~7kf{Fei17le@iFHHWw5X#_}19?YUOs*?nSL>O*LeTT z-LD<|#;0daeB-t=Kb?8z%ok_gH}kidhs}KIY+)JGQ49;e*c{Em!Ytjr8=LO?2GcGL zy8Y!{`^&p72=k$<$o?sQWln);?Y{l(vi<3@uY2Fuy$5g5V7pt<&@X+pU;1j@uRnEk z{M3>0Q`i1a9T`7$m4E8%{@nfcbC)mPwYP=u9ogRZ>EvCdu5qrAs8CX@f+!;x8Zv6# zdpX`BeC~<)+dJSl?s}@f)uV0vb_v$KH|zcamHWl`?I(cdpMZXU0@|yG*Z6G%kuKs{lZEn51Q(+GpXp%Rnnd<^2Nm*%F=lIjTK_e+(d+zJWdlQ1JJt zW9S?FV*mwznYwvk{VU@0)XnqhGXSIf3_yT|#+IZ?#fO&(^pcmFm=AW3%+I%z6OpD5 zHRjLOPac@mqiC!jBokf+C6dArLg0cdx8~-KSgl$8!sRx^5|hPjo!2 zv#cRE??bghF5D--XP^3deezrNsV~#_Zkm-3p)cxE?t@~SX3W_vbTeNO1^K>zQExc( z7+<)<1CbbXqd{AhjVZq_sr{u5BXkh1`ue~q4uGx0@?!ZS$Sv^mg~S*1{=ivlk32&5 zcC+5vxielK*vsz}TkFN8li^oB2?*{{k;N%H{O6j=Mox@&K{GVopTe%xVCn2?6SVM$ zPaMz$p_pN(knxo*lnAJ>j0lHORN0s^=buFv>d8oPYv>TUcrl511X*~6q~IY}m$+{x zDNTsmd&P$$0`KnyT6*-T;#;JMuO+GNY4@SYIZx4TwrPK}`oFl-`0%HWZ23Q|-JNJ1 znahJ8YFshuJ2kyoJk%*X(fK=c$vY95JNr%BiOSh2Az^3q**ebrmEh0#K&H8XPxv@^ zjKA>`wDOd zMVRKFP>?|Fbx_ch=1X8G7|d-jvSrQuS>qS_Eq7zQ%nd`kDae+ZYF(znQcyjsU0JE7 zV!;r%w={pW_q-V9SzOkl|K4V73Ii!pHoKuhrB)`&OkpZCg;HH*C(;9?J_3uDQAY4? zw)5|=bY1=1#p#QqC(lkVo}9ipx~LgHeZeLw-!;SpJ>RV7)5Y~owKFmx=RnS z$>+)4)m60yzb5JG>3sf+?b{=^o@zyy&#K^_kUVi2YuseviT9*&L(bEzof)sz^V>Ny zc2DIiR|t8s^wcuw@2Sc5cYTaz-WG6Q7-O3YUHfc0)C=vGe@&EeLl3AbQKRXQanlp1 zD%PGNzmD^6y6G&eqbq`*?$|!9K`A!J9Gmd=WbWY{h|TZ1Ciri>D z&b3QT?DLX^%=5#MX;1t6E&H#{hdVhtZ{UN|7vCMdI6ghOc>eO_RJ5=M2Q2FGEDni2 zSTaeHVwq^5gxB<(ukuwOmiv^J?>Ti1+tRw@GLpX}32( z|E>4g)1mGS34G0{M|DsM{LrXJbzUVORrN;?+Jc{VJ8Acp;=t>V!Y#==fdhv>>ZgOx za628XhvRRF&sBR%tsms#2%<*yM_sic3RHj8tZgy-2Y!DP-Ih+4#~QZ=K){M{AmE=Rr1Hf7sN^!olaAFQL1tT4|Pu zd7zY43oACsEZrK51IcW(KFn`;J#iJQ^H^^qgKO=HgBWb%xLfI=JT_DE56% zz8w;Kw02kI6?s#Tede>NKzl|FJ8#&LHP5Ea2>^L_bpEqz&KB6Tb9YgM+|(^9T4LJ% zHAq%+T}?_#vqi`U+JuMu_ua8b-}XIP>39ncr4wBgC)9S+>jf>m4okG`cnc2Mi7twe zo$7(nsG{b(Ma*VU{gh@45?++bX&!2Xj6gM0n%%pMtZsI?p4lCAv?wi2ND{SmQmSBs zHPHu3q{`CJQFn)Xlj~WJx%jYt8I$pfrz_lif1<6pUpCWiy$U+vgwR=Zx$=Gmfu1cY zfQI9@(|oz|!2B{!pC~9_7fR9KJ}*yl`I;%E`X0FY-asWg&dhWfKX-bannR3b$4MB1#~L}LH`OG81_7dFm&gkQ1+it zEHax?uTr$yk}-==Z(YBORd8eGn?Z_!W5JZF4nyrA~f)ngn>UMEK zAD$2TJeG2_({=%t2-<|*k0ns|0V*N<(x8?a$LYFwU|w)P9B>M*#&Mef@&fvip?Yrx3vL=)&(muM zRk}-fn3a$(YZ)0xvKG?)3cC(UUV^<4s#LeP{#@TZBfo&A-lt$b8vzT`+_S)1OgWnC(KkbDS^mIiong>DT>qal1rgzgg>ng-~mp)?x8*KFuwph0P{1YC3I zWa#BZX*AGWYm|C@(WfhD+HwP2K?AKJp*6^_o&guO;C%_%l`{}Iq1Vk=$#Y&cL!V&* z@FJuT>19VfpRRTIbgjduYaK>@t;0x<=EH}i{|}gO_{euye6J_@W6$y1Wbpsm&WV4{ z@-V*aj_2!#^S_*Y9naj?KgKAxGzF56%Po5&w5;$@YM$pR7f*k!{zQ z=YTw7m*`H*E$C=GI5dSHi?`AIAWlR<%!!_UJ*S}%LU=GIp={bb-cwLEjvmelD7Su& z=JeALz{RI?PjTm-hB*l0QRFe6cp65jKb>_-J?peT1uyD+6Yc3HyQehN$tHk;)Z;SH z80I|DGz<&Fo@5$^r<^C4a2yQw+0VhxEqyw~GMYmy8IG`svntXt2jx72a&SRCpT z-ofnBe_u4ySQI#^-CL26Aj+s=lGM~Xxu2cZD>AVR#~`8*Ro0l^HA>Y}bHnsbk?CL{ z5%vr)B+rP*ZHnkqgS9SVDF=%*Baqub0B2GeLFg@%7_x!q)DVFJ+}}Mc!=NyLC2dSKyNx_BJO) zx=inW|4lzMj~}z%{?PsKm7+LZwS)G82wt53A--QDRwn+2|IxlttiC9q4WptoV#X@M z`%M<%Dct==9w=#hk%EtHRG28rfnrsaIcRwlpi74|`iTlwRTt*0NQ25=2)JMh28k#9 zbT?mDOgd+`)9Xsc5E9`7uwer-089B`0Kb zdok@4k>SB6%k;6lhys;tGt_1bgTNz8;}Brv>dXfc!F4rYh(KgPU=V_+R3XQMJ~(L? z1@zeDSq!-2Ah286LYF>2`CVa_cGgwQ!^RtK8xQ)0wX>FfLPgP<%(hY{S+^$ID(h}x zmaI8K&|S61QpG$xG>f|Rqj}AWFIF2r-AzHZ^=vBSq4%U)-K6AmdC5b3KBz0*Slq5E zF+%Ayx0I+P+z|#Qv&cCWeWWIc9%ZDaFcnQi(^DjZsPD-^Kv6G*Se;xcXw8}s*mh@D z!|HJ>h|Pz~4Ul##Z|6x!ZiDa;WQQOli0a-@h61OU?dkZzQfU(<>UBSe65Z~Fziz|wW>2n#Fk>z6tQMTX#Du z(giJx&VwX%DuU@z#)c$?@!!2Hqdh{8G#)Vtf68Wy4tEBJ%!)Nz2RH;@ezjg+&2Q>< zpDizcq{f(`#$lWpDv83Hp^Br!n=MT26LW@0vL22Esx+4|Gkb8wza^V?yBx-RXiw)^ zr}T?4l-kpQuBnJ?Be-2FKR?on#zWzub-awnMJ-z7n!MroDBOt^BXx9&!b!pU5LTKl z%5c2YPaK8t6LC}22$YANT4Y-merhMu`Mq$A2}eL>;-lYJsh{@tureTy8VixRW*0e3 z26l$VePB70z-1W-%LJQcpp*nY!_rkGgl0*?i!ec5T^%LM4NNtrtlMuL43qgQ7auin(wee&w*i;JV1o8@JbN%-_`amoHW`TQVg zR94?_sx`}vjK9;JU9o}{KPx*-Pt%+E^@4rKh5Ew$^ZQM$DZS*+FYAfgfI{-$pQFa_ zbv1=Xu%Wnh5xN2DetEf`U(XlQn=e{{G*WH<=ou$wz$E|ax~c%h14w>e-7eSns7BA& zCa31EC-B8`JHMLqe~0Qfg@X4_hyo_+djG(qXo{&ZEK}vreBHxJ6s1KiCrq1480vus zd2ho@FtEPxL09RxuK#X&`QwHlY+yF3hYQRSo-lz~VQke_ZwTqr-spxv;x zST-RF4Off4g!~N`N*ch0RG~pGk@8I+I}OTeXg)O!ti*-(Gc66C#j~ctED;y|@Y7(} z^G*(O33)7hL6BCPcd}wjcMr&#w$l|)DJN^g&QuSjETeMQ51;bRl;+MRWUyY>wki^I zum-Xgz>hJ(8K`N{R3aLG1UCnSU#!jhzGBmv-;0aOo9W{Eg2BB1`@iz<-@f?%nElLe z#$TQLj3`U#=Kq{~>=W-a(1f5EISsuY_s&J=;zFhYC$dGCw(e_4@Sq=*{WL z!Q?;QF#NBPA6ppfrMdodR@LHWk?YwXCiN_uY~NRt<)Z%Y^hdTdw%trt%Vunv&D&;j zwO-yfML+!b`^EIO+N`FR?0)KcvoM|g;Xi7**tG_=eDyQhVTqV|`S4@Vg5zy1%hJJ{ z&axu#rn4A&wP|wu4Jrp}+}VQ+AHq8lb}y{D9DGjK9i&0LLsfGKyOcGHcg4qounV__ z@lGKf%RqvziE8J9b8T6mT@{wA-r(8{ofh9uU4=v9`aWVJ*X^`8K4K{^DSi*ikl&Qe z4U~y*A@8{7h51d>qGEj5+e)Tv-fR(ki@T1;&`tKo;g?Q|e+5T+U5XjA2o( z!kJVW$-*WxW-j)WEk$qkG3>CSoQSY{NVs~zR=K*lC|XeCK;fCC2v>V60pYOKS=*EtW25V59#gTgz@=T3I% zHrYJM@VrsG7e|;c3Uq=Gf? zE>?JT&%zYnpkYX}Ww%NRJj&k92%UBDF-tJah;>0pj8I;x7p?Nq3PfJbDV zc0aT^sVZ6`N-00~B~{R&E35nr9fEeXjVi}!(s8NfQE6=D(zQH!!cX+poVdgDve^?0qEQL z^|H&+J->T*JKwS_-Sg99f=niR<9bGuz2s-^%qDxq5gmYbGO>>|En$Wngh|KFuIB5_ z_GCT%nVm?h<#W4gKfuuyVb>w>uOAs@a(tx2q-Y0Hsow0U5x9e?MyIa0WaoGplgi@i z$~i|u&KbKp0TNxjoqEn0JL;=(NGef=#3Ql9Q3yXeJ{d3qCB-S7vMuGDv5&~7hPCk+ zOvJfjqZV74%%<`&b#B_j1CNczT|KE)6PHlxjnSS^_RmW~#L3Ya0#+R1+{HKixnsk+fjhN)2a*wsci@3!^mgC@97qNhEO9#7d;{Kr2Q3Z# z)p~#y;LbCXje#Ph?B5^}PoV$Essw+6r0Xi=5Hc{Tfi1v$0kSj9b}`w`FuMhdLRgNM zx2xr%T5O-!W$ISaVHLea4NK8qy8#rv^uEr8>2%n#iMn#<8@8rH8qV-&@{fo(D<&V@f|gdM`#*R8T~AipZKG$ zw&_a;u^2u0K><^kX{a^3!N-Tv~f{pDTzOP7s<{|0NKR1~slzz%aS65}nnvM9`* zMD`xuW$$4c+rz)V(r4=58kK(a?C8zYm#?2+9KASs{qpSOg55;-xgXm&TFlnV`Ru#t zdiL{lU2*8<>2iHL-M(5g4XN$M=1?@+03W=~q@0dSP^!p3s$2JjptF=JCUkHxd4QUwh!9=V>)% zW8GXfd8lzI-fiOAH`W&E*-UTiz1RAO%XgRS^bJim zch}dok*H?<+Y6ok;8yFQdwu;*hsONPyq+$uWyD@3u6Y|lTvLx3^X=W!yPF%&Sk%V! zcKS@uy;RBhColE#>Z*1iFA(IYt=6<0FE{hLq0ugK^MxEz7W8Uj+v@>>R%wQ?6%`^9Qh}kK%X3n%7JpF8S8b#LYh*<&DQM7bt)n2GK zOU)mknqE*?v>&$YgcXm;`wJr{aMKc!8yH3ikS!QNm?wWQs6{oSFyFAXei|;zFrI}x zLmi!om^8XxuvE_TiQ$?s&nu{VMA}lA1|;T!?Ui`)e6hW9lbBPMN;?+7YHzMUW2*EY zl#M!3DSS3trO1!SLOxO?7ONp_*ss_+oSgWUxJMGmh`ME`sQit5kqNI(lr5-J)jm9l z(Ds(^nXRwY&9|qOcIRy^=G$c3E1H{YWZ7oe{biM%G@@y_xN?O+8wjwPp3vOOs0|Dh zCya$B(ZZ zm_lmKpRPUNRZEgNli*tXm9t}If*Gx-Z;kGqb&a{G8CYxnYet<{6w(nSlJ1&J`^FEH zA*(#e7&mJq5=e5><@rdn7ngQ6j)kT1$+_yI8G%^-Fo<+S<0){o|GV2^STt^A&`>m% zG6WDEPML;7JBJ_`g+|cg0)3N-`GJ@if{gVLOJ&Pp54CpxmJ>Ja@nMEi4IWG0Lnt{R zl1vv!ewcCOafFdSMUfqAw$A0JDDtN$vWuKgQRJ4MPf_GwT@*QNy$LFvD|#FnJkAt5 zP7NKCM~>qI$A!d=Q^LjtMU4jw8t*q|OdO{iGGd&G^u5H3Gx0J&wD?o7ID4@8Q>^$? ztoT!`xZGIrAfe(XF0;$K;$_*Wh%{uC#6J{jV~I)9(y#Gm5CpW?(=LzNOHE;>s5 zy4oynK2&=M7TbEp$Bb<)M2C)T4L*nnvV*z(1d_#WCW2(!%{?7xakE?>ZMW0Q_qVlK zZ(}&&@#3h*xtp=XxKaaKAjdnKAjppI*~cfM5^XTXp*k@ZfF?9!Cn_jH;~_FSP-AVk z^}cXX8=3*83f|b6LdS3tl_EnZ2dx1_5gnfd1_|s~iAV}8*!3e@m}g){1`PTP%vrV& zPzWCdM}myY=`pdMd|`z4f_iXUvM;FHYupJDZ{$MqFo17(ltoFa3Z!GKL_$_1kOyjo z!Brxsjx~h=R$(YL3_rCDbr4LN70YGS?H`6CSTk)ghi#Y)6&f z&X8wcQssDONFXWU77OxZ!*%db4mo-g57-c5G%;zkd&gknV3#70mI1((ec>r&{`oMd zNk(!9!A3IDp8)~+m4F`74y7yE?I{L>Le#}vU&4pSL^8u5zYgR>9n|j1dG%LORvU0p z)>MNOTx5JuNW8nmYDd5xKDF^FTXc#ONyb-b=>*_U z-=%PMp~hh+7b=NzZ=s5#b8Ib4?AN7*h_VIcp(@SUK&FgW>>n4Cq%e7_EnEryF<;D< zKYMJ<&rPAU=see*pi`u6kUsfFF($QLE4==9&epDDFVIq9Phx+r6uZ$Ehy;!kwAQDfkAwcUnMeD)k=6T7n3iNikg?w0PR+P-45 z_dqolVn+MLDE6(Qf)`_mCbBWeDHhz%N>h+6n@xp$tndZkz_u*3w$V>8FIiJ8s<=qD zPDr6d?OZfne%D+hhkwA%(C7p#a}vlW17Vq9o(z&-r->YM`Aq_mmoENh&S!R!C&>m83q**2vXs4h>Lq# z%qY;CH6}am5kQeIi^9Ksk=uy&Ch0LHNLX$($tKsqZRgLX*RR&qrdn*9d=%Ex z(eo1uY{=HO0S(y-`j8=8y)gkp4jz8HA5_Rjk=>*;OX&8+&E1Qy}UntX;M6(VW`x@+YsK}Q`!JB2wsRAe7&`@1Nh z$e~k?c^m{2*}H&HB2Sk-kjPqH!-!~v_}dVG2uB)$*yG_LwD8^N(7@P`L$EzGv^P-5 zO!S@Zx<9y(LupAf2ki^YCIke`9h&gdq`o%@p!r)f-=yp@t%=@zM>!fCwgEdW`xZtHjUYe&@vYVJ?g^%$~Cv$yM|{TmeKgE@2t(>MM2^wqg? z8)+c2Vp>#`qgZ=b`p?0jP6SHLAK(hsREUQS^iB-7^lKyDT_@)Ljlum65=bBr)ak4G zcRb+JPktUU8;f$#TmII>AZThzGOBnLGP+t&sUBh7lpT<+69_HQD>02R z8p;74X$F8CFlyUJqa5AvkN`u`-Dd)TqUj+4dK|qM3GV27tE8kJ#UR=$>-VWxNQkft z1K~@|bhjHhVB3}(ZPND>Q3w;fDH%Vi#8+2wUkdwo`@2}-#2fw>^a(LwnGoGT;~WA- z#fe;zNgntKc+9h9e!twX9wCo;s0;~H`CM)FmpHc@e~k-F2G=%_H@ZC#J!~dM)(w?O z!;gc2&oNVPu1-|rw-T^}| z-E?D&;tm{Hsr`PKcIue*WfaNp^ns9jpG&>YwGs%JO;>sChZvwuZ_+SKIH*l;2Ef|D zW?`^RE2^SxDLjY3Z7w1rq?87@d4yLI;%3OL6vz!EOfweVWduR4R)6eK@()lpS!q_40Pb za-SPLs+;eT$FG`Kzj-|QQwMK$@~q!{Woe1;liHS=zd~9v_AS2=Sfu`Y-;%-0c3uC& zZ0ZY3Lm+t)D9he{&0bFa4>&rH9^F)%P3?ccFRz=UZ)=;pfIUttJo8nMB&FR)D@5rh zg#2W+H>&SfYU)m<6`1mCr2a}1x*vx*woSn77_3!4-OWEtZ>q)CgtDRV1;KQW4>0J# z0$_$dw$0GV|Nd{2^%^!ES$ltKJaMyk$RT)anJX=0>P&bH%mj^2r`o%y)3(o#O`Ytn z_>*?7k2M|BHaTW&g-##r!IjTQF6TqQwyYQ?gaTZ_r-u~8=EK&2u4ww*eZD{k=!^zY zAnB380)_%rl_DCDluW09AcUe0tu2OPDgZ8s(tTC&q}p7r=c{eA{Ynm{K+Wm_6{yT- z?yw3}Wlu2*G37y$tchMw;pT>d?tVO3fjn3|+=u$>r9MvKLMZWyME61@A$mib@NZY)u0)$ zT|XD(cak>lbmcV4o%cf`op8(gYhFFht3?q_CkylHU6$z5Au%ZliRt(AYd14`M&o z8b$=c?dQ!!l^i7VeU(-2(9W$h--w$Zcu|IViAp(m;0E8XI$}4|t}%Y{dC8i3Q6{ELElrh`Tltgkf>88$=`+ z7Jp)hoRk>ya5*V;iJ@~WEqe~2J9cbgM}Wk(DXbE-ZwWkkq%T;p)mx)Js_tbgnOu`T z$v|A2%=g6|ve3c^9cZ8-1Ue9)x%-M&pYOz#(@hLKc!h8|%Q}B$zd^ZmcEl_GS9`Bd z>qdyMs`yj9ZFlMXrTDA65lHN)+B<>xpHOg7+h4X7^jzwqF01W-E)K@4=9v-lij5-#hY=z>l`V{8TpgXpN16{ag_;jBvF5|i z!h_9+BRa}wqklgq`ao(@0_BmnbjL@{$-?D$vM?cZ+SoasHcUL7Hc%Wxn?1Nr9W_po zoE~5=Npd=_NuQ5^r_Nl)^w2wX@I8e#1!$ZMLmT$q1oOCVu5VR-N)2EoB2xnnE#BNA zRdT?gHHeMqqSFam)5!dQ!}tV&Lqvu^ps-R?1P)O-0$A~qCJC5=E4*Eu& z#&9^oJch%EkjQX2>P&{i@uxBzKGX^W`3#4#QToFy84U^K z43g83KwpNe29TPEb1%TByopbF69eZ>fFGZJFj*9blxY;YS6)^g1?|_XBXciQ#g0zI z$dh}a6NgO1$eeo-s#VIcXTPdfJ7JEGB(l=M_w;Hf&b^oOeo7kolr-`wY2=|MjU?TS z0GcJ+1qoIg#tGqt;ZlG5?zN+Z&*D;FTFgmopEgy+8zRqzQ98op#V8d%3(t{J>W@5M zM(3rpn68+$&T2M}d*VV>0T{qy1EN~&?Xn7+HI!ats;KF*k8j_=HwEbKtG!XY+L zoX*!tz#2Sy?x_<6r-2>0kTiS8SP%_r!GfP9i!};5^Aboi5b1y!W-N-t%3ui>cRa*O z=2OF_MA%kDimy?NEo){|nUEoeYUcojpzcBd3vjfkpr9PYA#3O8z#EbMA@< zT!+cN3*%zai&j_!6L^!)>*}gnSBuMv@*1D6Q7d%NmB0c9U4{Mo*BvPbh))YmyJ~SR zwI77LiAw&;{R;=Z26 z8;%r8ln-nnCQ^(<{;plJMS8ii4A~c*yBG2oouyfY_@Z-Hnth3}uS($SYQ*A`9@?3Y zIK|$EA#SoJG#GlB!&&V+3Gu5WAyYY~sf6TnLQ^TDayXrI4CZDU-*(<-?7uf1?Fv4C zvuLgtu`Z%*zd-<^vSigx4rpF3Ip*Ymd3)%Jtg|Bb=lPdWyG3`W0 zdWC7TZ;|mY`!Yc#8&@BAnqY zIRL%Ty`g_~eBh%AeHr~Qf(9mq<7Ij8J%PLNgK1HBp1`$74YHMR--&m80?t$qaKVZ3 z1Ya*gbgzhZIY|7yAU3J{O3=VkjvGN@yLG`;0k?rTyAOu3P&a{42s#bkLf!(BG&F>; z*9dO_v5LB&`#)SXrrKuw#rfJT7kMwZaBFl{2q*sb1=~20Lp$Uo4gmR((@YKpm2jcO zkT+QjbUnpjcTjj%!DKY%S8@LYcxy!Tg%KpOQ<%$tt|7)%WA(ysiHN!$BK}^8ERaXo zJq>pGd7u#I9SsgB01c5y*FCc%8As1gC{v5f)~%?BSrm(im^H_UhJaiYar3K589EV3 zdM=kY%XQyq)7(XC4RFwhX)xUvpVz+2vD)i-|NUZYr}*w>)oS}*Ohur};49Zdgn~B0 z#{II=lL`qzL%g#Ld|%5lMmzi9^>v*h-}y!)9HfG#g6nM(I0bd)wtG>a6x59ikg|4b z2c!5d5HwFGXXi&xo}FHtzWDCw#qsIM#q*aZr=q@-#?M^S^Ju-E-oIKeKiWKrdlc{K82^gpr6e5oAU{G6CvzKj?5E=X5_1t0Y&Nc9r<%z$U;y zZ05gI^%nngsa?ywx3@8yZl?!w3r-;)_{Kn0-gf7&!a1PYnt&!SS1g!os_lrvTYcn_ zSeta56=89T#8^S`7ME^lqw*M>-cn)>w5%s5!7n7W$Nz%QDnU@aP6AsUWTsrjy%BM0XE z^V7pi)&z+vq^`cMK6Gw<*RtRD>_wI4uE%sq?S{wDkmg>ydfemfS^6*Z{$?{l+hr)5 zi)a|wFn7>mpUZOngvsN@`5(f&YK;$n)r%VCFGcdM5Ep&v6=wtTD>{QJpAPhFFZrhQ z+46GAz7EuW(kE%3X*8*AIF0x2ou^TJUt3Uvkb}w9&2qY(d~7$N{Lg#T=JVr@)$2E% z_d8Y*yVV3}F@B2Jd;-k^1Ay9&0!^7qo2_YZgK8F5wv37V2W(kAghWX!X%p)gV?n!F zNP6`~@}JUd@=NGrEuD|?dsqt%KOFQ^*iXZKO~XCyuGOkIblX?63;%`=5LeoUmWBxG zEiMgJX`5aY4TJ4|`E2O6zRI8U``(ZBDwu7%Yq!Z^`(B@IFKYw*u`T+s-T2g+2?NL?^hCTcH4HHJKnZX$hNnwGoHf`R{HmN3<9PpBpZf5 z8?~KR)%w-^V|5dq@oRfLkfrgcbbY&?&(7z+R2R5o8KL1RO$cFUK>QIaWeJ?Dw4v*g zp7EXGLweS<>f~!SV7=Md70On(9b3I>Kjzk6#Yql$_@t8@n#6a&7{qz2{k(&JPxf1- ziES~X0cR_0P5Yc#tt;~L6jZh>>appodnSgOGXm1O`4B@{e7dV-y!vEUO=upH!t)R! z9$}$E4vJWY{=ja-Y<1hQ(W~}0%-XB_c#1A)@LY;Ee}G!bNtA>WBo@2i0I%XKVKjmT zlay#XX|OD-6)hIfl7v~v=@1)zqCIy1j%`lk7ZdyJ_p)iJ%2N3)jSeP?-bA6Y2Xq@R zS+YPWv^5PObWM`W08j+|m=L^Y3?AY3m=M@p#<6{6*!*-i1Tl-XI&4Dg&Ez-&6fn-Y zPW_;^K?(X3xcq-*8xi&x>PUaEM=a2j=zxH}1m}thbp3?l-@TSm#s|{L$r~w1r;jpb z;G*W?oInXa7J_U+U(s_MeNoqxp)N9m_fj^e40gFpziFU&jp2Nx1Z^yyOj(hesO!&c zJ8991SO!O$A}Lswoee2w=sW4rA%sM?@T_dK`+*a z5%c05$6g$!%HQ>t;Nmc~Gq-{!TpXr$)}pn^q`E%YD-dC9SkKt@tS0xRa0Z_7lWTaJ`j{SuEAPhGADkd2?k zQ|0R0jvLspMtz@U6s7qLi2jQVhsVvbL88dnJO-OJ4s#ORHoYvrAS}F#+~=nWK%p@I)qRsTz!|v% zltXPXOH#N8@bYd;>;lLw0zQEJ+V2F&r3dl?Ul(Me2j2aw@-m2t+y85W zVCVwc15g`+T>zkAs}G=*HJpHW&I7#wI~g&uO7;Vs5-iLS&_vgJ0+Ew!?@jv{IVO1l zQOi-F12A9AjxH~&8zzgo^RBt))$MY9&+mI~yaL`_BUWHI-)2iEwYSsiBVZI75yWIda<-QBa8s|5YK&p>yFk2^h{DU&*g0Gf+mB5rm8 z)#kuvKR?&34+Uyb%FV&IOv4L*Q0XLGZ zW2-v2rX#ESqxr(7L7rM*EH%Ol9CLt`zp*$L;_w#uQq*ks>b$7<3%cM&-2uzR#c$nr zp!H2f`{`%x_m(Mbzb3ddG!Yj^&M^AQ@Z=3H!#C(ehYEX36cpM32yh=`3-Xh_t+_*V zp|oM5Y*1@yfik_dlvtNeTl(!fDD|;iwu4qZbe6)CyQ`~e&8u_9zg;iyR!z<9qt0V3*05q29i-sT!nBhp5u@PRQlG?7$O zBqgpEGDixFsJZ1_P%O<$=-A>Ae#t+a2!xZ@PqBx6#~u*YlQ!z$>JSHlJ2fgj(vX+H z9MOfm6sJcN0_iI#5_vdaQVBH~jSSk~P7i zN(PF{&sBHPU0iB<_=PkMV~`KIio{lOU{ooj z_~ND=PA44<^ddyM9wfZgF2wwm_{*2>two}ep{D$|7yOfZt7WmUTrq><)Uxt==F2L zJVaD~0Q7~b=f}fP&5R2q!?LtD7+o@e5NkO*!umx0)k#IWpgpiu}oOt?FP z7AF*{v+H$8!Vudr+{wz&zn2DLr;f^yXd`Zt;fqG%l1MTFjBy}>i6j7qHA4vUW1YCx z3;;C4@C2fw5roqZXbOHBH;#pYs@PE|2x&!MO`dN^Q*G$Njhhn3Az&)6mhk?Qe ztuwUHJg#dT5RDwYbP#`dqI1Cg!*h`y7>K6%p+^f`OFKd z>mK46VSYk*kR!$q8Gq!X+vbW|;?FiN((edGXr%iAy6!^ReenwNPeTV(a*U`V@k$fN;c6m+S-6Hq7S2L5 zwZDKCjzsGh7T-^2)%tupy{?|#Os_Xgl;WRMAOGMF+hS6w25Y#OD~?q)<@gh?W)%LXSmB;UFy0Qb4G)no+AKA{NwF zd@NTThEc{MUw3WnX{&R)PWTz)C2OWcmEjmVujFe`knsZUl;nvHgc%>=_yDqVButGR z2Z9*EUI@<;C)f)o1hIm6x*vM9z%cq@)itAv4F+Tf<~x2`$DnZo@9D>BK1k4sp1A{=B`82cmP-ae$&vD@_4 zwE!(zzj&0S{U-)6S?0cZbKr)=6&1yMaNqe-$}|Y-{q}q;tteKFZe1C)ojHne7=LdJ;op;yd&$~bR<&q6zHizGy=z@%x%oSFfr)w~ zrFT!?kToaj5fjW!MM8cA?&+p-j5ORg^dgoL`SM<6>eEwW-WTk6W}2z+Tl<6*Al##` z1|grR-bjeP0@Z6)|DeaZ4Xb}3S^du)R^M?azB0m=Z&Ax-%sR^L`0%=5?_V8LxPPUL zS%>m=e!$o|LXdIGOLVjmCMj`2qKP3|m!@LFg_1Cfj0~#ujXnIQax<<-pGy1F&h&QM z0Lcb>X>7|f@S?4jh0YUT5s*H~VEO=jaf6A%EHepeHlt}jZq(KkgM>oH7Jd^ zO&jGFT>VOeDu$sqfw6iLxB>afG7OW6u5%eaXRlAxxtd6M)%Nrb(ym zy$poLaNsdBOR3V#EVYp#XO=N+be}#6mJB%7fjj4~EK=qZ2i!W-O`OOtpx8IBxpGjt zenN8{dc~p4EJ-IPZ@x%6eUw=sE^0m{d^oE|CVa$x=p45@OYCI$54}M7DeZ0^f?o^} z1;R)Sq+_6T7XvRy$!xKJ51*1)dcTjq?f!<&m_i%q_FFW@oBnGws=v~Gjz;+z><-v= zi0;fcU3c0huIDweFyjPdGefE9Yv)y$qKFC#%h-8?_;&(19?)P zIQNGq>B&xQOImtU`}1ecgr>ICzEXhN{tqUt?tBz+uLT9oCL&j;BG^BSC+ZZc#Tyu1x08i z5!L_wr=sP4iLl$y67E1#JOAN8o>BhJ*~Mk5GZb9}59lx*IsVK2k{Rg1YT%R}w17V0h(>h2P{NBdNfoGPS* zdQqLhmUg?H9o06jo-N<&T0|5ZKHiSD-Qz#HH+#IyzP5V2cUvr?8{4IPd$^_W>Bnug zV1=vZAE*uDQe3>0Rc_X{7G3=(XWr+VbV#C-;Jray(gx8YkAk*`op5T6bl=x%n7&qx5x48M_d+fGceJ9ZQi@A3#od*ByV}|%{;n4^YU3KkyFwfd_^)lUylA<$&kEb_ zGHmqhc6wcbUtlM^pU>V2aN^Tm*u8gl*B#dhP$wUII|*v1>Hrt0m^HPUt2#w8n*1bQ zIERXGtWH`I>i^wnhw4%(K*?ZJE7JC?CUv^FY{vR^J*k$9v{Q`jp=TL?<*tWdw|S*sAjtEbNJ_K=P_H;F%_$%2}2qeLA_f-iU*! zj`~d8uI95%xn2)n*;nRNe-AN5ZI#(JrKag;xN?%0<4jjhdehH%g;Do#&U!_kbfP_&)vZzkouksX zQ@ShecC{UDa@M0$2v;)v2o>5tEh`2XbCk;5M7L*~wBP%aO^RdE9c+?+h0Zm(mvTX~ zt4vFPecL5yap@uY{1cf9C}Wi6929T>s(-?xXoj7%J-}Hgx!<6JI)=KzZAC<~(&+MR zKryG9{N9F47tJvu`}jJJ6SP9cHCEX&$@7 z0%XG~;}EqBsAK{mneoR2%1DvMhYv5hjAU3H#a6{sZ7jt=@M2@m+ufhK3mgg{q(cQC zBortXUjByvA>OpB8-FGKQr^8(jvwfQ8-u!)2(>9l8`76H?1JS{&@|uS2F3ps1Ba}t z7>#yhL#hg2Ro^jWg0JwH6#}TTqEnHO)cMcT)#dx?d?6anb1+2j#f?|#rGv05z4B;r zEP#;`FfE-d>;3U5}$nNA{35F{&rIulvO?xG^EP|2NOY3 z47(HL)y;H~Cnrg3*#`7z#gGV(R%?XNj>*A(F&&K_XZ-t!4gQv0`2J+R-Aq=jD*uh4 zEa-~0IF6S$%XJhegFiB^%5fHmkn z1$e~9co3lrgd}Cd69{P}LJ$xXjUPIIrt&~|fouY@qXf2fD-s@XFN5R91r+lv-mAkE z=J%(`OJOMASF7Yik`RZ7l@Hv-cfBAoO6&`5jE_R>^lQTKdHaCuz|0V>oR%H}In5ZH zfFU1G?yjz?H9Lm3uBCIlyscgS+37#uP-cm^`hnmBS9t`E;HthScU(+aFL~~q>7&_f zU2Qg#cTH{aS8)CV1{q^lP)HX%2KHc?gpBddq|DpDE<_KWO7$fBz9#(3zj{1aMK(KK zR8kg3&EZb)Ddk?Y-R)!ogAf4s@Oq2HVgeqm^3RM=l)&Ag1uj4kfWQr$t(X7;ow!4h z1U#X11C)d<1dUH=AcIHRwJ-lfwgyqQ)-QLZLM?x_fi#f9&mqfum9N%n>>DCYgQd$p z=EZZ9*qL-IoYE~6k_|@WY;@HgOBLzi6U-bX#!;MIB9Q_2zz`rS*@?`8wPdH70DTFi zanCS}YCx^|7gh+So5$IJ7sV#?y`Z%B%Zt9CmiP!5CSdDO79OK5n7o?$W1F4PtWpBF zVgGJ(GJ4A|QZnSB#3M6=B2;*!foL52lEA!&jW`^`A1~+v`)#5w)@=*RV6cwFi?@RS z6EEHd;Sw+2roa*}-j<9?ym&hRD3KkL_ykGV#@1JY9FS-f$~z^<;0V@TC>qgqp8`hI zjRas3p@JrZB6Kpzh9(aX0SwJ(aEM0K4;hAN87votXeoTKAVfbshr%H09#j2fHYzz0 z2pSTH#UE&B&WS$26n+99#t1%0t2!n2U~CpXK@Wk@L$CxD7C#{mfyje6ezBcy?>01N zCgc_YP(gm}2NC4b<2oCmQNFh`5i%XNz2ECZZl^rh`&#K)% ziw<-8WZ-HM?t?iNow9tcsPy~RZi;vPu%JDx1onM@GEPsGbQgzwa~P4VMVv<-MA(s+(Hd4PTouxNPkMa00Dm{T`vU>OP$;D^a*$ z$4XRJg2_JrO0Baq8wv5N91J*LM|xZ?dAUb9Fih&`2zJkW9s2{M_7)5ej!3M5?i`Xp znt@1h^zdU*nAhi$FmtrjnHp&$5Z;$sg?V9GBjnzgS6ygbGkbS9hr}^Z=}ucd;&Qli z`KV2I^nz$BF&;&S1 zyLbG0>3!|+bvh7V9+jTjdt2VEFRSP;T8DI|9b%*Hto>eE`|yvS_1$IVO#af^1zl(Q z*s}Y(Hj^v%zuI9yk6)q=^UfG{-#I+aU);CCS*eEPT}wGO7-g!q{!4^M2+S8_E~AqC z%!bT8nx$bd$?{44N%aO=KEtPC?cjPe-}LZgW~)6h&i$%Y#p+J9_o78o=fDm zQQhN;y=*pY#Jar-!$Lf}w6d@def!eZQ-1ZFMQj)4xDTM$x*Ky843j8) zMLLwxTetHc_;K;}QBO4ne%!o$Zq>izC{czK@f|Ju2E=410I}jHS^IWrzCdMf8$_|7 zf*3pts<&Tc3!=!jr{rZP=EINeUbG_``N3?=Az!)En%d*#-6957>mSovIGp3(O;+r` zn~qb|?M%B)K0RX75xWGfCpv0=b*Iq<6ep8Yq;qxkP9i+DYlh)Z0 zLu1A0@>t-Y(Z<=~uT;5CCPGg-d+Y=VgN(DVlapXT(Pagxp+&GSESd(Z3d9ddT;1!HR{JZL9KkqDbz zbpV)+Xl4atZAc=i=3*M^hM$bZL2oWOvy0QYI=kj}tLk3aHU-&5=}m=1D9b~4nfRNB z=m!MCIXL}<#0`(cdCem=9B1zk3o1D@hys|)Nnjp`E+@qlU|kS>dq(W|$~6MOu30OG z$LsvtsTj}>yGbhxxf9zKao>OQ$B?)kmCzKfXuvx+jxym(;po7-hO6_tcWtgUovWZL}u`E>JRd)TJvbZ1WJZ>`F6P_Ekwwi`k|SoeydB;P-G$k*0Zx6eLjlffO{Q zd3qQMN^tFDYvl0q^4~4f+p~VRA@3}*`Ek~DF3fTBESF_@YVu0L>qx(}C!;z$E>15gN5?k5~ZfFMd+%*Yjn7e*2yfwzf)GI0I!T6a{BX0x;NIgqv2U#9xVK9)D%8f+Z){V&B2keq929&`o%@R3Dy@1-B^*$=-QunK*j z9bJmU5+}U?e+lk3MBYjMk##f*@{1%9)&KpcGWGltVRwMJuZ9fh{D%X1n)^FvcXlLP z*P(X)uLD`t{hj|(cm4~l>!E8Uoy*a+?B7%OQb}_$V!EVuDPm|yb0J(k4(2)-o`CNM zde7ivy(ZMFKsE=!FyLVue~bMuYs25&9Qm=`zIXQ_bXOt#(*E)bdix&9yFy&(w!K?Z zq%C!4>Ve;W3EMuOe%w|IlI?TblD2(re|B%5+fw`5KDYf#0Nc;=+4j8=YItAGuitNt zpJ&yoE$rD&H_h(a*86QVZ+O>r(7$Qg-nCs|H`+Z%?Y|;6+I=Ja5TQ2OeMNJD(;9Mb zv~@P5jdmq|unvO|_CZ(j56$0flg*_pz2QHwS4|rSZBso-9ofo;I8L|$`*671kl{$$ zhg%1$pnbR`qS`$FgO9mBkNu+I%JEoKh~68k)O;rt%`hN-dW1?oZmSScbi(yppEG`X znu3iMuRQVz-oER~Ot*dSTK4Z_doiVL-($L@-oD4skhXny^|-e?;rD~>HwL6#W5j}z zZ98wQ17X{F%Q8~dc3xO!URf zD>o0x6>k0`&c@biJU6&G?rx*Jwas~78^uj+L3gwbemmPf?qzEp>U1gH<=RcWom*hHu*39cYIo)L%7`JJV)L5d_ti z?M&k)M-zIZv(rpaUkb7dJBziD+SaG?4w~IsFM9iqmX$V*)*$`eS+rVeSy#Coq=nd+ zi@s8;e@8@D^ak~<6zZ_B-iQewfQ=dlha+(^g9kb+tR12r|AL>N)wu&(6KaeOTKhFZ z-x)gqyRpjxAwr9CPvhK}yaSWx6kcyHHvTnx4@$Q&%!r-5v_&iG5sQ?xw5iM3L0jT; z$1-M(-)S>W3gp?AIJ1rt;R6;rd+<=2R$$N4vZs|c`h*reYsbcf0ejciM5rE22a*C` z-*T_E{-A}^+N+`JVBh+>3e}^E>S`;R5;09#l>_3pE)v4m@uWztXMHayJZlJzg$%hl zQfy>voBWYLR*(e(n+nlUO^B|40OqhiWejZZ5qD%5wb+FjW>chmywVLZ){8TI62x$* zRoK92jpPW`>Rk8nS)KK)`-Go^#Rcj^;F9~5Mf8)2u3H%*xxvc#L|^0kqz2uqMFhFk zDlA~FH9|X)lzl}sI;eW(m}G~(e3SAZRUcwDsl&E85M2)IPrVD1nW-5ed&#dL$v5)} z*i7zmGM#~&*KS6^fDSUTNvqf9IqA)jO|af(zcM$_ts(dHu#}Hx!5VEPPRQvGr{zrh?k6Y zeGbfRls*Jt244Xp@25~Hljj@+DY_{Hga3#N8Gw3Bd{A?=lgflh(7u=%wLnZLy%L*N zMnl7TWTptR`eY_b8?PUs;MiBzVQ8kB4ISHSo-K@9(IwYv?fcV0bxlf3qfPCeI$<`I zp0w0hfA4$FhgI{rYzOTX94j6J&Crrg~Q)S)?a8E#o%`e{vK zX|QSQTN4AcH>5&*)^Zy9VQ){uH>`yq-_72l?wGlo#Wv_}3R!7R?`R);SN-h@|u85Ag;9z{Nea<{RiH3nSnlI?;Y^6XbPRP^8Ig zKX=LUGVt1_%uByP1i?^;l&r76YdbUXCefqu!rCp|p`|OJlfLb?gV|pN> zLueYJP9Y@C2t{RSjvlCc6#KJ*-urXXSt){?N3-LUgAn}#OjEgW(nNAv%JoUFHBOiO z-StRCxdlxPJduJ0%gHI%M4ob%#+GE=_ee##1rs3Ba~L3yj|Oe4+Z8*(Gx_?P&$=@@ z$Ey{y8ec0mA2V&O^ z2+fVAlyvqA4P5B5Xf=S#?(I-nC^32l4$Ipz)*m z?Rw2$iNAbzQ=_h<4#0-f1+7RT2S}_y!2#~QVJ<9>g82Hba8}&$b_j7*)jOyY?w$tk zoTdT306{tsFpJpHP}tjQy{$fS@b|1%k99rCj+eK$)5YxcpKlsej5m}Djk!AlP%?J~ zKVasrzfb7NO__UJd^DS_tIb9P1H@k`7fp8$25x4FV)6HZMEAN~&u3N0x9}9{>~vwt zcQpLMK9<*TCH>m;x9j>1L56%|>n{_D7kQNmF)0F3Bwv>>poAj9k1ctcF<>T2p$8&P zA*2!xQwk0hI7o#-QeJ^~2gHO;h_boZLtSn4$65nP2n&WqwpmfK&ws&v{*Uc(9`oY) zX>4q)OrLd_gYR;W$jtUZ5;UMqB^n+{O0CE_d&j9=l=xZhsdx zUcBjs5e=@8N>5>r24`{XFalG7Hp*wQ0_$?YYIP|rb7*MLg@x5 z6J`L6&v+n%M%oV=F=#m~7%=Ea94B7TPr$+8g1XCOca}*#D_B58QJJnvcUq=zBtI)9A7Mfvm)&J}}9Hy!&=A@Y1 z;JE~Fs#=4GGKoe^5oz`_Ws?Yu%CKRUN54)i4D~ek$2S|2R9TAZ1VPhXa zvM^pw(ro@sQ}*fnrrrXI8m#o>Qfh*s$|03&DIHI@w|6%;ua~z-*fi({McRv%WL9?? z<7f!eEqdqc7zood((cI?0%5v40w7F8#~ujN*@6mT(up+$!o(9uGZ4`bX3$ua1Yvq4 zTndEgCsTftWP$xm$>nR_lxW_Voss76^S{) zAXDJP9|p`(>_s-52DSVJ;xqwE>iBUQ)vWUZ`q1IP5<;;ld}Y0*-FFj@+Z$`v#bD2( z@6HWBAQtWv&xr`Ta7oC9UHGJm!Y-N?&hOr>tIhImeOW!5-dF2Q`o+_5yBbgd7jh#M zaGiZ6hr!g?Hjz!~BPO!#)0^q_W-@L5{d~Il@uE}ah!iH|rR=x!)wAkDb(45~GqSgL z(@oWUey)*8bkZBLw;R@p_;w+C5GU$-;qR1zkaDJkz;=@8`nM{BJA>iAWKY~qAruQ- z*t87(Jp!t*sZWd#+4YOJFI~%6su~SRxVU*P42_&e)!80IK8q;JvRT?{S?GMC7(0nt-3lU(7b-Q_ z`9igcEc8F?%& zJ>xNkB@Q@kH^lk7-n#djKYgPoZ|AZ>GM;@w7#4%tWRwNM$ZIaIBmL55r*vzb$W3Yg zZa-6~tt;XTpZcpPE8B8jP9042WA|*{|`t!*blf!R13sCpTf8WHwJ#l=_Hrv7ZtouyhGYAXr9{q4$YQl-CA3H-|l#+tm zoif6G33Uv1#+WE2yS8L0B9S6}YV`k(1%=u<_G3^}kCe(5s7G#0hIeXZ(Fp*MoCvN$ z(Ho%aFgc{7G_Z_HLuOh*6_WCy({!#(-M|Gyvfav@MO^Kp)L>Wqs7+AvCk({_!NP=M zOqAwKwN=R&I#KLn2}=GF2TWcYP>l5hCRL?JsuaUWj85^kkr0cJ zHUSD1(QOvADS{3HRLR+Ij1CFcd>oTvT{VE!lm%6T; zq#1Z1FJ_<=NoGyCay;4@HaCL9O2j$b=A)fy^JQlFkPCn_eMjx?Al$G?ikOE3V~a`6 zfu!v+2k9wlz0z3n(NwMC9r6PG8+PJTE$IhryF53R+eQG|s_og1&NVOH;H_GAJOHji z_r5?}l@OM_2VEUfy+PtnG^bYCmKr6{E#?>1v|dZL zF`Ofo`wWnJBiWrafz7vEhjzxyQ$TXjPCpOKw{1JR0{0~)CEBSP)t6~Ue<$fd|CSHf zt{b=jm|i!2>fb5HOwJ9G{+C zJb!s|Dprc<6(Q>Bv=E*@XcL*#xlqes5|TRSPd9t^!M`>wLr7?L#jn=OkM}Q@Z|W`W zay?zotIgLqliq`nmAZ)xsWhffd7s9!M6}e9J|CU|87C z4I6qOSy=OJ+m3EwKZh*rf!ND(E7C6XwcTh(p}9Q!;PWoQTeiMZso8WpJ&?=rp*ZM< zL`@HG{e2b425pdWbevl__%M5fm5w>R4v-LT*A;Lg`g}TU?+Xe=8bT{190}2N-c3}O ziI*lZCMd@%J?^VzA-SFP{^h~2FK8x21CRA4NEtfmjGSu>Bm;ChF;4HMCbh}dvQz%t1DiUD_16^^;NeRMfi>gYa_}sgVR=XTUUxbwmb~h zbBoj)uHZ4nZXLeTWjUF28qw_?oKf%a?LvqOJr#Qu)ZWrBBwmsshP+Ci8$^^{Musax zc>4htTL^&?T?!J}eYR^qBIzNz*u&cUuOi+bQ%9_mW%TB~85g~Dh0!KV*Kmme4XwIM z+q z3IGjjzlyTTex#K~|5M9kw}%sawtqw9wW~KT+ACt%MKLitp$uBKGzD)Sf*y$M?GrXQ zA-9eQ)vGOZdKS=vD>xV$8Ve-1)81%u4bLuu+?WWRN^Y?8gk;znPm^>62iDRgOsLxJ zyTqrP0&?Pn`j#h809gmV1d8U$nNh>dhw2O!< za(IQuZ53Le53Rn0;Ge%w1OkQ_j6{%dATr6p#DVBe1RbNOEE0$ex>8t7|AD|VVLP%R zT=>N=5cLXORmYEnwPs%a+B_Z+qL!D!P{xlf#rZ<46AV}+a3UXiAm-#mTW`rePUPjt z1`wb`@$awn`TVy=sb4)idh_(<>*p6wzd!!&{OqXFZX8^&ykQDHUoOPo>#Am*bt#&n z#SDDC!N7s9779J^H8MH~0l|**0!mCX8(AVN675g2yj50W2p_gBXFb&>BC%q679VsIG9zDunnDR9BjP z2CA=`pI63Z^VLu(;ZhiKKiPBfxlvvrJd+LsL}8~YIU42d7>$|uM}Y*F8j#>j2-Scb zkYH6Y^kQ*`-!>C00JPc*Yy}xUQ4PGGIq&DOI%340RDvbijvexkgSyaL2?+0!#>|Fz z1#VRkuva$Vi|`9t(t0SqpVj{&%FN|&pm)Qq>6ix|BNnd0xdS8XlriPX7b&4C!TD#^ zBYexYUkr@q+8l-7_ADMg;0hIFxSUUFZg37G^MA`RXc(MhJEB}5-Z2~S^|TiFCO?J; zcjkfc;7VZ#9^A%w0X!=|h2VEEeFy5qzMZ%8qW?OV@(=-LYNykWd+1c*^yzYaJiT4j zYAbyNeSl6+s#&A1v-6wj<&R{DsJqki_tSOPrE_$CUW=;91o@(1MpVpIWG#}Vgniz&3 zWucMz(N-V?KS~Y8kJ`i@#;0Edts^C`lc8hQ*EL2@YBoFHeXzmcUR}LiLeSUw2wA92 zKqApP*{5Wr?TAY(%C03sCQ^M!Aae7WgCFkYEMM%y(r-8pZyRLV$VYB+bH_b$(@z`q zz*Adr&_j1iQI`gI57zIYK>qlOY5;Y=*Y4eVJy*9oI%pKf<2R%RaZql_!-(PNJLLAW zoXW3lS#9?z%BsIYr{?WjI;cD8JxC<54YD+&6+@Ax>?SPjYHA-D%_7k&yin_ z$}FeMDUZq~r^zD^%pl)q?s#z4_`dVSN1iD@q8xDxsmH1z@>s}_{O_iUk_65h$&D`# zpH@wg-J3m?IuDWAVZt;08Vn3=X zl2N$&>2CgEdQ&a75V(UuH!1U{BT+}1L1AtGNi&vy*ln2faRQ(%%0XonV=%QI3zCIw zd(5p+HtZ)due-#I?&c22p``8DPaJbr70(hMll#kP#T74;sK-r)sRD1G_qzDf1&W2 zjb73IL%M;%H8kV6fWbXW^8tmHe#0Rx+Yrz~hPlbj4IbvEpB6^MQ#(E^@zcc%6HLmU zXZMhrvWME7JdBh*c@Z4s+65BXDvTF(>w?X{XSF|Fx)3BZBsOQ4_`m?&`Tgd$x~&OY zuFqG~%SuM%lE64i!y5W#DdmRSES1KCuh|*c6QE`x=s;eh+jp5WsYEY3rAI6{WaY#1 zA_D%gc45`a0D#BZxVfQscjkt0Y;_g*gG6LOAPtJFR58cGFj#pPg}c}#S_shMB(VS4 zVu(<1i73tClC~-_1mRIhI?Tb=k>BgJN;(ZypeKkLH=w654H*caXM9k=UVQp?hUawV zeTz=0_l{e{9*n!*8R5=dmj(^#l+%bz;V1iXv4FilU#^1ER>J&aWi6!giY@F|++YXu zdrnMwwPvbN+m}t=oD`!UPdbWG-t8KDtB=P?#;{UI{)s`_fiN>+uoZji>9JhjGZ8$Q zZ#U4radKuzc>C|9yK>+XY3*NjnAVw;&EjhRuYUHCqzV?;;&MW^gSFxwRe`iX`-~RFPcC}noi|zB;zDY-8oA#%*Ew9!; zT)w-kM|ts~T5p;YprXd+0z<#l#`EQ@y6GF5Z0@eFYZF(^`nQ^pY~QPPv|7*h*VpgP zW;KEH?LD5j*VBday>XSe=4}LVO}(0=v+do}yPF%&Skz0w?ey8QwuwwU%F~haPhRTf z)m81)ULeR(Tdiq1UT)@fL#H3A1pz%j8OOvOk_ z=%i}fcBZlG%NllS2br$EylQuLh8@yd)-1@*W>}R(+=!l<6x`POf$WX zn6p3~We)AEa|`OtQu7C>W_SXkx%m5w5TqRf-6FPs3CV^)hyFZ68v$V{hGr|y?7~EG zCnXkoNTnMhs&qpC2zkL>M{bRkyL@R_W|!e9LBJ@|CSTV9;#^*txz-;46F)< zyQhpB-Wn&(Rsii~g*D*8`;e^|&Qc%|4qqs~CGNNcGNSJ6DJthf=XI*uhlBREx9axX zT1?uWTgzx$b89(cQ*JG(?#Mk2YWr||Y0sA1UeVlYBg;0r=P#@5s}W7h#RpBRv~QqN zGb(*svxgC#Q72t@x_8z!j6`HQZtBET zW=-x)+{R3LE|821f3S*?sGFOXxU5_DXl8@9aoN<6Q?45%PvePE3wz_KAq${)U*o~? zijc-rf)#$s!y*;BSP}yjSjrG#ig3!bD1~zff@2g2T3jK4WMY0GCWb!y-!R9>#DCC? zBXb|HNe!JPOV8rhTZFR}y4R@Wgs$}HauH<8f4j%TgN_c*S>vW0UoEcK|C+J3;AFF-4FCmRg%68I6ynwxb^h_LGNJc2gWib zd!qjmAE}g$lwtZ2%{~GevIZRWhUNHTt%uG`v6Hj&qbJW!FHT>4cl6@;^yK3C%ac=K zh2ssb`{7zwX%Q4eP?RtL}%Ze^?);E%mS=O`@=#j@IkxeZArOc>iMgrr!H4 z*L6$P=4;ikebedUPv%Urbr^Ok*7lgE=2RhA1jrK z+4wuWB6J>tWdrNy0IXQ^0yjv^)hlR8GJGF!n~ktEW;JGafW~6a4TtPrp<(3wX4^m| zjDEyU<12^QCx$}FJB{!I!M1IO*cD8|Z!j}ffAS=`z6W&TmZUr+DR4<7WJ+*LqKPDZ z%}K#;vAJp?nQD9a9w~NH6joo_pu}`6Z5IMFx}=3SI=jwTY2@6jjOV7CZ6x;_g`cRn zg%LgveV<(TenwXw0&J^YZY^mL+I=Bp8JC?6(2=BC!LmjEEyWBq=!rP6@$; zo_ec+#L9tQP*=0*UTSbVa9GHs5=V~_?g?(k8OBlC35w!`rJUHdyDjMnVHZgRWD)O9 z@!SD!ML+-j75zc|1@H+|viLUGy5(d(RP-~{p?s+3=wjeDF7|vBAEF8a!ZphS{PY=N z6oG8{3D5D8o;CaY(Yl&Fg-)txAWP3+fo0t#=K;kMKc|rtYoWTBu+xQ|q8EJ$cvyDU z;WCdN1Crah#Tt5K6`mxnw+RPTEi=+-4I_@H!rjN!Zu zbw)i0tu!aov6PMIP&yIVFE1@aohlErZ3En2DrM`#ON7%y804s})B4ArvPEn?AI1S& zc^9M~er?Oxb`33M;9Cf>cP^&tiCv2}1)j+y7)C|LLmbDH9@ojtPz;RKNe3&e#NaV| z6sQ&6MG`<2#6<$wl;Mjn5DA{+UN!|GKIyew-P2*i%#ah<8a8Qbz;^+;lltWKEGnJPTo4OO8vtLK_P_}@FNv`Oj>Vsh#d!$x(d83Cocl6Na zj|TD<<&YlQJyJyXL@uc*s3LvR!}9V#I- zXiR#`(+A7Lj-f?i5R*w93^AElkqC;&bS*GXAXmwTTqYSflr`YZ8V5qr>vrauCf zii{{M>~xO8unw0veI=q%5$70sXHxJHA6IuaXvNz-=BSUO5de*$5_B*`gC&z}Xwtx( zfT1Z4;c<$(DA>nGsq#L`^dis|rTSy7feZkKU$d!E4M&eyKi@S{6!=G867wJ>d1;u6_hC$2-{E%NM1Mtu`0%39O%V%{J@81?gg}=4`Bd|K_)wexxCm0dt!Vt zRxb?n;5}i02yg)>2P5pv~FX@8$0^7%ym?dG%`z5uLbPclQ?@Y@G!=>b6VX6GfKhmfNp< zj}vH!5@|Q?MguN`GyB8t58=dnyVzZ+t?~d+rVoHJr@Qf2FB=>_y zb$@Y?`zxmDKz^^7;{!Up$(QT;ma*}>x2@ro&(Nnhv?bn4y9wUyvz7z=R^0LLwo#uF zYQ~0l=*>C~fb>NHSR<0>U^v4 zMmh^4eFe<0Jy^24Djns0BRPnd44y&0VhphiNR>JkmZCIhqXY16Iq3TODaBNcD?$ue`!`W4T{O1FhjSZP;DBrCjl%ZjL+0WLI5KQ&C) zcYwvZB#BeNf++;#fdNw}qJaIJ{g-zYhrXxxew52wAjZ@p8`13;vYKu)=s`+(H(~f3 zfMa3$4vK%EI0Bi$PIG%219I9nxn+Ty>K;&rE7e0r#->Xy+W)MSR(3dYdHDr&EvdO< z;I)n4MR&?#EEQE*P}VuARIgJ3=xprhD&i-5gTiT?PZ zVn3`i(Pb2i*Jup|Bqen^MRuD^-=Z6VMcpgYmmXWiT0}QnHl!|dpS8? z3t^z5GS92q<@)}~biJNeYpTGE(kK|4QA%LKGfIWAMQC*5_ZXy6NU^znN0*n?X2ZW~ zxLIHFKc7!GKSm?%)|n`GHQQ`yy7JqznybIxRd?0X>FxaH{%kR;KE~ak=kKcKil!_7 zF(Gc6)ffd~SMn0IR6;#jyOO@}kk*xd1qWh0B%goi)q1B-DCIK{aye}_DDCMAwSyH} zY1^y=YNqeL2KHttLO@F+`V;@D3e7M9KSoD=bejh)DFLw`tvOrx2WlR3gM(TRhz2DH zB{(4DASP0b1Yse!WQ&Uo=`t)TI0O)PE*q$bEduHz8GQx*p$w@3dX7$HQ;Ok8v%RRV zXDA%04P+T3-E>RQBXBW54U1ll5024TmLYO51g=!5Q2`i&8lz{3zu3!NCvgO$1Hwym zC~Mh9v6dtOENC8#>Z>x~Qb`@8Qaiy0WHi}QgsLbA$rG@mpo}7H<)!1HN3P^Gm%e7M zpqDV-FOtLmoi^L#tKt{NM1$P7U9ryPNb z`?8YPU>&w4$s%k4eAZ@aa6ZYxdja_hWO2TLKFI=psO5q`WRbss>=d#PU_hT_vA}?I zo?Jn}ZUXK!vlA6Mlv-0K_oo0OyeL4w(u5cfEx|GDp{WTRYIGbm1G@5!zWqM~*|Q4%GRlxOH^gy4xZ`QEchuXk*%G2RNO+^Miyi+-zmexP|IU0B*^9vL!^i;@FGQHIP1jFK06NHjWF9(+zTCT8vfL9p$315pX| zD03o#p7eNr$5&!hzoREHw$GpR2tR+)t8OmwQ(~G=Je>H z{&p5B!n}PS%a~HpzQ395C9KQ4nQzU5JE2LkfmV;fx}fC zbl??xQ3wKtTBwZIsv0142h>sXc|d_2lu|$dXu8Ja`D3T^K)?Vu26>SH_sSIm0ASX_@%#P4Q1dt4 zKm~aA6k<~N$aOSDNGHtSU=^_^Qra~elcZoQs^o4u$dJ=Jw~D}Y%E6+tFK+iiQ7-t~ zdG#~B@2$29I^Aj!jJK`U7@M1IP`^k2TBXIkDecSh+e@$5|6Y*ZpQdILwU2TXfu^IU z%k}Nl!1b=0Us*@4TJ=DFzYv3v@!q)pwz|w0)YYrNbirJV+_%#8_tK@pE{*E#S`EZp z&&G##*9|e|;Uh;5Mxn53`AYCenl;Ie&U;gY%9@J$UyuakGaH(yRo@8ip5gg8fJuq zd4uocF?81QpU?5i)E^H_2?wfXBMh;)AqwU14O~pWc;HK_(KC5P&E0Het z;%z$C47aPH&2S+%-VE2-7iJ4nmSGBTjL2Zao{yB-16gFr)bo;^@{4G>%Ns`?}Z!XaMX7;M? zdcK`6YXxAp+1@bb>c2X#@vLTQU61SW^0s!uX2OH}jNtZ?n9hx)qL@b9ZeU!S`%CSK zq4q%NG^}90=3X{9Lp_a_%|F<;2W{{Pwy8&ts(-BK3}L9}!s4=O-BtYU$KW$vUmq{; z7Fu3S(C!{=^kll73dh>x#&HqtI#Km5ZcE!vqEdOwI@$HT;d4@=G$OK|YDxhC+p}BZ z$c&w!K^Zb}q(M0}38eb6Y@(WOfpH}pCyzX%^L3~g%d9H#nLi{-Q4q|KIAqN=EX+Jw zzt8=Q}R43GFqWgA4#R=iv1 zP<*qZob9F(ak@&1(V$FdiJ}9O%Mmx!sYx+qu|uC&Qx<=z$vITq>=}7NuN}(0KFa6I zq6`{6WW`si-f`%hgp4^XN!zE;EEj^kT3LWsyUA#;`H?eW`o){S?f&lH^F^+E-3~P} zF=YU0D(un#V}V<}2|e_{sU`v*ykK4^>Y!(WcpyH%25_b~XN%R{mJHkr?N)>JLaVz0 zz0lUibH*@&v%P?np>*00Jk&-FY@x{_V+Um0gNovbOntFG(RN`jcm(iBTEcFpA6t38 zs@9$8MZexBA7QIdQidW-lGxee+neRP=}m~($O-H6Er~9!vYnt*RC1?lXkX5yQ9F;m z^{uS5db&D*{lVk0!weY`FBiRro2bwl5$RI14kU*6T!o7+dl=3 zJ=}<@0G5tOV>hu&AYIfZm;!$QAY3WZA~hwjKpmYafv2>H3v4; zIF~@gT{MpR>}ncU^FvGP#IaE0q~%`f{nB#PXBOAh{4mmLw5s2mAeBho%pi28FV0j% zsyrZ%V()~WC1Nv%nh{M|uKm2)9_&KDGYn%99d}nMNX%x4r$=lJ20sAVbWV1Rjt}S{ zM;$W|zNbTt88{i__@a&OhZ`r4-IoPj@~z+V^((8JJG$TOc-;t#8#z%BksjR8V2*ts zD^>i>EN4jpk9Pb~ec>0iF?;q06e@SS528m`8PT14W6j%fmH~;A_o;#w>8JLdxNg7K zk<0(q-Yb!RL&YhN(?%$iGU9^;_|?b$>CS+V6>BIuq^~}>FMY;^nvmD)b+_>$q~~_T ziF@-nvedjuv(9*ONRm%r=*iZbGYx~{zJ2s0vR=aD;`aL+lCj@c6sx^s15LL%NS-GMnr zbtRNVCB%TR8F-Wn6%2B$`Cao>byIhH zzMWq4lT(LGKI~iLO(Ju*CGT5&K3)IFzEiKhr^!NYy56-ENS99O-R~fZ&ava;Nbh;%U1HiIP~FU+op6*Rhm0;5On zhDQ24+;v~a7_GKGG>kZ>Dp8yYzxkr~=6QV7PLdVGhvdy;_1*})Z4+o|C4d%lsL2Ad zhM;WD7bH+za8;>E?=X4%r7(ACyx!9O4od5EpuMCg^X;bhlL9K$%)eQ#US6@6LE+Mn zlpLG0maRW2I4hnpI)bJjNZKj-@w^(vsdIo5q{ljEck(q>#W z26nn$Pw&6Jx>-(Z)B2Zh>Iu~R`_G3L?WeIHwZ9znulkK8ytmdnY$|ru|MZ3S!mbqM0cu;?j#}I2`Sx0imAJs@UCM_|LIHfr$h56SzLFL zyo`4H=K5A3nIRpb z2C=ksU>mxS^Cgz10VLDamFHXuTvdfP34|2_aw14d6mK-(i4$~5XGmm=r;gXy(0vx;eL=?1VFHfz%?;Bo=BIOg)h3ZKt{PTIaH&=jl(i&se7HR)TpPVy0(*8eny z3$_0{@1~tnoqnf9g|Y-~2jZ|5*BW2ztG>p4|Kjy&t^H@mZ%$9R;+{J|5M2Q$l3KaI z6T}>rS40yg0y?s7Z}djZ@wV_?4}J)MbF|$~FW=u*>=SJy$W7lM1lja&5z9zlcuycr zXC-<{Y=+_Nc6wbMG0E_c9Z#mszn@PxKX%uJ1b>hL`N^Y3pL!CbzJB7+cv*KZyB{R3 zJlIPwiJc;q9+T1-*qIzjWjhLX3N@jjB6&!)A7Y^^MN4!Q#--Zn%~b<-!x4*3Pzm#(EMRZZJu>1-UU)B8a7ptXsQ z+zm=SJT@93CLXuf*Y>uOr9!aOH}F`lO1~vEXC5)?CUt<^Fv{{Kz}b=r$bzgTQAB{H zx%=O9Zm40utSFl;LDZam^mtrv8I8@0yhDjg-gB66PEPPQF-;TcPRMg?`&0_>e#YyX z10oNDH3j(=?01A$!HVrQ=*tMOEgkIL;YqD3x6kLHGKG{VG2C zfY_C@E_R}$es`_*u`~MYOZMIEl&*uK$y^lOKVvuELZUy0H1tTWYT0H>P1!ftO(An@ z9nMearrPW{NCN2_X;3_+ZJ~vf>Wv#>-gQE2rUhoDy=2z3DW0~=?8$thOt}O5{P&Zm z)~E^9nxG>2SvUU=V0+{zwJ%+hDOIK4^2)P=c(dCyjoj05=@D#jgFDT#sST!rU?Xem zbI)5?)s{dT*ZcwFb+g@4r@Opn=M5n%3s6MV7+Ao{3KVm@-K`{ssxQDF0Ax!o>r zpH&~K8-6K%5=FZfMaY6zg@hp*ElnD@4;2Fo zZ-j6lu~4H%skVv|W{Rc-1J1;2Ln@F}CR_ASS($vMf^n2w4Tj$NaXDLvd7#hq!fT(^ z0RmoRg!z*9Z=tv#(T1@sAknt(;q@(V1%PPXCs-r>CWO^wZPu z{<2G=NtQg9Yq=yHo(Mf%pS5mR>kri|K2<)v&udu%sFWE+GCN&RJ;>N{vy=Gh-zxp? zbTTNQNAFlCRL%lEdI?UNjzsXIkH~2J5l4PJ0O@N#5P?jVb_NJCg2f?JDhCJ|sx2cy zA-yBWfF`AoeaZ3dOlrT-&CUDunB-*=b_1eU?cI+m%YsrQ7=2S zt-FpqK^O1{i1zH{!dgVex57O@@vfb+HUOnSTE7Cs_S#DTy#%(cz(ro<-~@cA*4yf% zqx;+htd^TO8?!g-y9N7{*^~KJrzS4}b7o7~gvKc$Jps$r^m4wve?GrlFK?%-Gk~77 zS>RjASVpF6o=6RlRWT{;-f1aood2YT{83xapW<9+C3Qb;JYBSY}np zcC-Vh6e9_!x`s?j+CMun4=u2r1v(S|?4-}YuPf#|ir`kio+A-%OvY8zJrr6VZIDu_ zKDbnvJl@E=J86`)U7w#br9#b`+Q43Td)x0xCC-$cs-G{Zc+Hhud5>EB%CdQu*tGAj z{XE<1)&j6LyO$B}_Vp6ulBanX62JOC$pI=+untf}tdl}g$ zKF_Pg=5r-S{U^rx!`-grY(!kR zaA@oTP3_Ux=t^gR1(FaDz(Qb39n^@PW(Rgun0dAc%nzN!nQKj4-fs3NEr}T1XD(ptiX(^)Hc;UzaQvNP$C1*)jmzYpRZRZ-#t#X$`1SgMv)G0;#96fsee%KU{OwOD8GqvS_q97RDXo-Wl~fMSUq! z!YlMYKt$OC4ZODXy>v;o2RHBU&2|@r$OE8gi7VxWAP9nUWnmk2^ez$DCvY?fEQl32 z)VjBvJl?I#Yski-h-w|>H|-b`2-J9GfZ<+%8X(8~ogl^K=lkSEcgqol(NnBajvJ1` zp56#fQCpTKb@EUbYA+? zdFfB*r9YjQ{&ZgY(|PH=pO?<5gq!Vjv7I;e^GUr7&FVeiljX-}^V_*tkv<*R{&Zmb z(}C@x4{UQOIA-$BH_>w){DvK?v{u4S1%H;_VazFC7s-G%Pdy$E%b7jt2gX5G+y}?2 zkE@$`t+ad67ftAwQPqhSUC+ehtE;(^9z;?thwZ`jH??6AjD}b3=*G450BEg`Zd=JB z@a_o$r|X|SUH|my`lnCVKmB^He;WLNywZE} z|VXk z^yX&y^T{1Mqgo58CgEyYd)!~i&FOK}i06xd{2NoX;k|tN*cjQGIL<`!4QoZdTj1 z=RS?5_^z$hpYewTyR(Q}sfCfk4lgc>+X7sg6jv|HXX0IC#u_f7&&0b(3p@4iB{lvt z@s6egPtc{vGsDTbFvc>gN{*9q0ZK8F6LPL0YfjiOdwbAYZDD;8Cudkec1)(JkR?M4 zp=>q%&w+)&yDa`I61TxEUi|QKmjV?p+m7)YaJ5ec(}q~C<_UXg4#vVDssOkgTq@98lQaqjRdH!R!qQO zE8_lwNc!Jsz^i~<q1;{Xs#Oc_`-NaD1#)&;soFd#0s6Pon>zxS+t;U%-uH|7Pj_90fWR3B z>RY+%2D(K&W8ZJ(+h*D)ci+w8268=6-yqky`<^ds*Wp|c^zGcO2wc$iq{et;qq5UX zj1to^C-}}b@1a-_FiCg5ISjRg;Uu$c%oOJwkK9tf%*8YOhqsu3$U2 z_90_q32Rb#9pW3at&3&Ec84eyW+N#q4(22=J_crKHZcB0F|VtACVp--ou12n)bsiO`GAr_^6wu(F zM)|pG7Xrrbz}-qn)DCDsiPb?J>|Hvxdp)gtun>tTRTWvNjqYP^nEOPKdu4AI!uwnK zsGFt1eeiAWbAj-F%$S=Mr2zl_$6Md216+rXwO&o)cyHq@&2qbsA#?BYL=aN2S7*|2 zG(K2%f_tMlOlE?GhO{uZO$G90Bn-*MkeLWW@|7rX?fjubo@>lJB*l zFOVwAj(Utx2v?dxAB%nwd`0^_mR=!L0agt zSx}J9_%m5loIt*PK>TLOT!Gx~E>8t`*(c7pTvR>N1uEoDrO|f%dV}g~gD7SHtk;!a zT8Mxg4>c>uMu53}SL=B@ckO*eQ|_spoHRr-V-%GhK4FL^Er7L@o+9Ks2P!70c$7&C zw1o}g2PF*w6WydfECC6IuHxEKCtDg_@&t_L5ikL1Z9!B8x8<-4`g!17DPQnRib(ge zPs!v|ujk7T)ysGPw_bxc!=-tdod%?MnUz0_PVX|?dKjr)AYa8DR5q!M|40lIO1&;` zoA2vLHY2vBUchparTcrsPij5+^Py8o7R!d|dR@DjuGEAp*S!em^Iz=Cdu=vZqq8UX z^&C{&#H`ogqb1O!Cd{y5*@?mFe^rFB(`BP1hx82YbbjfQIRJeOEKi)o0TC2x(1?;Z zAX35-H>{+^Cv5;t{wFq7BX#hI(lmT5WE$=q=^2Ot9!Y8jI4DJ@Wk3}7fhzuCy2M2l z@##sv<=STZ7@cigUdStljZv{WYpaZ(E2RQk36%!+Fq+Th_0Rn=k7nPXt(U04YhQtf zT%`sE3oF`<+b|(Tp#QXZ6*R2*LWx6=KV%4T2!8T~4sp~!+^`{HnF(u9nDdw~7&KOK zpySos<_~4f&>Wh*M4TKON4jW}cXvAeNYhrTvXyFRn+9G${m~L_kyqX>TB2%8a!@0A zU=+#a2xx$h8s$hw#3W-D{-|M&lzXS8UG_w3kQTXe5f_SEAusd9gH{9K@um($VDYdb zal-EwbxCLKm#bvVx@+PqB1HH57xj)o2XtM&3j#{(h>USN0rlE7S!r)J7c#H<%L99P443)%gZ99amGrB^mh}4pSZb%NGF~Ju8D8S^ zBpqGqWGFlJuRx6*WbPmUETA64v!Ld(03xu+OvTSU=lp`wD={e<4GkzFWfJ9?v3{XQ z<(WL>>Vttvy?8VXi4HI7yGX+&q>()M97kRPVYOMT?Vavse*fb2X>C2vj^CV~aKm>V zxw{QENYUG9+e`*0W^6CujA$QOwPmk4{$4wmgrZW_oze(Ku&kV$GuNV3^)x2PVrdBC zA2S*teMRamAa6yg6~FnH8hIF*Dk?+!NKx@EtP+K7dP>SCf@;SXwgToAJQi=Aea{PQ zqWR*;-@bdz>Rz#byKX@7b>m)81ZGh$X>WMOO$=VqHdCvJWIj^JdcK?qve>_($>Pn_ zWS!lzNiyG_)Yf6XXo@A#*BZ_x{})lR&P2-BA^3cOT|IX`?d{uX^l#UyVgEZV@s!O%2d6&ofeOYS%gWm5(-Ulvv#f``nz%ELjvOe+t) z4PO^S7avPsPV5AeAS`(8`9&8?T*`ox_FoGr6vq9@nrPXeeX z>2uVBJx`nsl=G&$1R!zCKZdz0>#A>rvY&TB_K)jA|mrhn^mZw$$9h9 z@0s#-<=549-E6IuM4=LAA6kIKS=JpEaaP^e@m42M?z0)~x2|XMU#WNSWAgDf4b5F_ zV1N$m|0;)aS+157v{YoW(?!%H!<>~}$CC7>?sF%4#(oOdGnmfT5wNgNcib8u00DbC zGF=)>$8NaS-GYLb5{fkd+6^F(W*}l=+_14I2)y-4cvEeacTv{TFK?wnqbza*(Kr!; zJ6;5FK(Do4er9;dnhQ}SEBQ5P7~&ffiy)m9e$0!L;#8=~Nrz6kyYmAi9?7R6QF)1@ zMxF9fn}#q2)3#?^Nwt#Q*F>?$;P55s0TRU`w|hFigUfa{4!5F*9fb?oC6smYO!;=~lG?fE9$}{JYQ{#z6I56e_ z`OG%k4#1plr^(<8A!(b-TE3U>6|(3_bK7{!Q%g-0tu{yN_4NLtB+{5=R>&%Zw9WdG z&5q2Z#p#+LP5%-lEom;}(Ft+0yt!jC3^RwX=>QQNpmk zc;U+urwtpcXuy_-D0x^XAuN9wBq=_HSZfZQMVvB7M2W;M(lZQej&x$rU={>Q2Mt8g zNyR#~EzDYNqq7mA-1Ip%8*wh;=yPu-Vg{B^)Kw1|O3;@|L@+_E!mNST$RLb2@O;03 zr#3J!!>~6Ov-So1g?>rF zHEWSsnj9>9AKo_(lfbX_ot99pD@MLF{+whFnarP)k9;ZpeySfrRzJyxJ?J7-JzSi> zE@~AXd0Q#+iCUs^Mdmw_)gugzhi5>K3cd&ci5ga@L4q3cX9M_h9)Qpu^E^aaNRG9T zatuOy%u^95CkWgjwV-Y&!ehC*k$qYmH#A|ZY~4scST=4{4+qmtdT0pM4dHfvpz|N9 zO^7%GVj7j?1dwm5?Hj@FS#44;tKm{XY+VN=h1i<-EIK{J*5aO$D#RKbLop5jxa2Lj zEhy(uJkcSz>dx9E-Iu!TEXUL$j?Fp7BTDm#;&pbi!XkGbGUH=-)`nZa2N~0&8D^sB zo}DRtoG(!^azy;lN-&bxpI7%b)%F-PYiU;2KWcEzdKfKD4u&H7v~n0c(Mm-cv}MG@LtpWm=psC|6a$h%U~ecTASD3^86!?u|4`u2fL{^Agk zv=nx7obIr$wnWD*&T9Uqi|xE_TNE4c)@r!xpewB5CgQzqTZ`p-+ct_1!Y-f@igq@8 zd39CqEs1VpXvQFfjO%K7Th&TdPs-|}M9RQq)RU}Qf2d~q;f-`Mf)Gj<7LtPu2#>98 z;)iOztv)`vySl2@vPAHZOsiHqQ_uPwYGCYlutM~8+JV|hL)O2I1B6&jndO}(06N&n zK6hhkk>3PuBQDN_lHCz)BP;a6XeXH|w?|tV4up+phMDYkX&X}^S4}4=Mh@5rtpp>1 zjU2<&14gawm39b*RYv1LZIvDX>Ke(Cd*|lxTXVILxCGY{Kc_&onp>!`J#hS5EPE20 z{Yr?z9C+E9p|0A%Ts$N|Gpl&sO1qGdtYXQ+sv8-+EmWl5 zL2MiNoOeJE%gV5~Ll4Va&U>TroD2r+dT)A8FEC7!XU-dzwT%$y+4ioh%}rIE(7nLd z-W@v~e2sJtiiEHGJ+OjXcR!2!h`@a$uK~RhwfY@eOO^PWy;t==7Ek9LscSv2p=)3= z?oKq!$~c7L?kTuv?ET)*06&@>{w1QRP64Fn(d54)5+FUng#?sPB8@Cmp?vRipcsYG zXFzbms2d-ZFq+!e_0mB^q7VFm&7m^>Y?XJ8X6fKtfa9Rz#DFa{0AXrH1knP7gkiHb z!s0<$vqkik9Ern51i*S2$TQG6AXop`js$B3Mx@7T&MoFA)h43OLxXks(P+5Y!Jr(g zA`XM$nBAwL0)PtSLv8XCKO|0*pPPKh42t$&N3NaK+Ux_aurG6TIE8O1EeoKqF9zaT zWXJF&`}(P(Qh3RcT<2ISLwwfdbiJw0r?nGZJzHKjO$p~T%`XMp)g4f+H>? z1gVk2nXCE7>gJy!=}G(f2jk~W(-6veN!f(SE;Vc>ATZ?- z7aKMu+0BN$N_=qMN8b-ReLtY-`=O=phdlK0Uk^+pi0~GhlFT>cRcJjy=hPr{`QUyK z4uwUiiB23bIpl5`F@1@S7Mhy<1-Z?jwebtRYsD>EyBTS>9{C(A_c|8nL17lfvRtKh zCE?}8Um`TxT5;*!58YR0gas82RX0dD_lZJI3M0|M&~7C);+x$XX1wWEk4Sgv<$6}F zk82Ndc}wjvDNQ?^CZ!zSZ&Ir5`EZbpENhP7`{}G^?{zJ|SJRtnyRA+awWMpk+w^ZP ztlvkrR)6%Uda*oPd=PrPL7Y$t{YExdIB_>9@)S&5AMI@Hz6^ov&77>>UHk7QEA=d{qQ3$jRCH(UWJV7pE`2J9=?^dUEmn<;kh2PiQ6LA6ZMib18J*CXgjf3@=%* zw3^GvUaglO?_VrgKFxAHUC*n{*Wu>ioBr-+eMWr_&HV#)?tc!={R4IG>t&Q_ejq*; z#`Uxvgl`TEa++`I)jO=urS^0y0MweX3*vRHZZ}J+a|!A*gwCil$ch;yn2<==$U#`T z(V+m3+_tAs{79E7gFxg7k+khWU?zQW2AoKhNzfgLJ9#Q=yKnqO>3#7I?@7HR9YeNe zT{QBwEe4hirCP_1+E@;@S|Y0LE5p>8zoPApc%tQd>|M_|9FCFc4T+>YiWy0?s2RVUIH72fEvfGz*>rbvMsn?*-~JS; zfIX+4yS z(<~F3Mc1A>=&V^)8scb;I6jP)kEohREgzM9cx{xXeIJAGUGnQ~U&>kq>c!`14j2{z zs`|V7`zUBLuKVT#&LLfTT9~t;NlE}2yfP4Gxi&$VxqoG(vQ{#f+Wds=9&+^x33wx; zA{pK;=@o-*Jdr>VcmsBWdWr$jjLkmkfgP^t$=Zr!7HO+Ksz?@P7E(!c4qUA_Pp;a2 ze0=%S;^ty`dHT249F75`SjQ=Vq=`8MkSzO)qe6)B*}`4Am$$=MSja5${Tu&amnqtz z{rK`S{R}Ekp{?Nf>Ps**Hy3A{<#j9cSGQLyags&eiC47RF1NdywRH^pX}P&t+_pV3 zdkcQ|hiQdbJ>+az{{79xdb3%I0bY&w7gy~Zezn}T?AR*$qP_@g{50->GOkoM*xexA zZCvPVrFOeZr-saJELOu~!E_TFtHE@y1v=f(*IC{Qd^Y1UC&^2J7L0i){1wGQ`LLW8 zDqGB^Bt$k!P#I(Mkyr|kCxyb|ob0YXG-iBk<#7ZA<^Dn=OLuXhSx5om=WW-yC7iqs z>*c5`%Sc4PvBPTKZ7$YZjrPv~omObN& zY6VI=hDgoL5i(hlt)xnROwwAlU5mig`c2K=)Zi;(lp&2U6`zc2m(#)~9c`=6XunqI zqocwM8w}0&GQF!8^y!`V7*1&}ynROFovg%M)zleC=Ex!9nB~1^u$KqJjG#C~5GQoh zPYjreo)r|sTH*x+l(eqIJoF@mW@E_oRc1k&r~ka`U{PjB6BO%(G(j3FqzSU@AJPQG z1hx66iwmKhw8K>A?ce$1nL(m&Cd%|3g4 zb^Bp41qSIpn+!>^&lUqcqR&X36+c4D9+(Y2fecXA&4Z3`0J?(F)>vcD0EcasH~7#n zsB!b4eW&w4J~kFt(;;9(JfW|PAYfDa;W9c40yYW`LBMWBR0tU6^gzJbY|4Uwy#$pp zwj2Tu@pzIDu*u0DDzzm*_G(Q+P3>$waOxDs0LD3OJ#nQSrLCxtB*CaiTd~4wwDlMW z>lm(Y3U&hW2+|AW5oWK^mUDM4A&yaZIiVfKW@VG-u-S!G8lyRFMVC&}7)9EO6;`9I zkHHci^*tHOJ;Ct=(hIK>%w7o{M;4$O=s2t<1@bl6&xMY25K|8w=b(-Y9gom51$0~r zfDGI^KW923zkf=r9LZ;E1*pYlnq;Wyh1yo8@iYSZjw$20=(}IBpBDO#Dz^iq?tIdy zx-S>@Nx|fX3MOH4_zuJ1QO!mlDrkSw1p0DepJXm`{gr+QYYZmh`1#|&=qN@U-){^h zKu%F4-EW3))`9?xYUGr=B*I#G9cI<61wr&dCx&HCuGXiNF|q}5_p7yUlocZ*gGKZ3>CR>+%|uK@Zt zoEF+qxix;Z#TlR5jtVtlPtFw&K|bqAW;g@vz0j{pE+r1u*Aw{N@~7q1>`MHrTot~_ z;pS`Ef3{g&FE*d@=p%2hxPVosol=9ACWiA*>(%A#SHXn0FP0y7)>YLyeSUR(raIC(;sRX^S_dOV~D|&rrELfVhUYMI*AD+y@|+?h05G zGol)iBAlqIuPO>$=PJnWYH=;1TI=h6YxbV=Yc|uZY%bWGFmkGtfN=0G+S=Y7VxTK z^=yW35bw&z*k(D0r)=-u-dYrt5`lB#>1J`gd~4sR+&}O1H$X@QBJAxD@L6AoJET|Z zo4?#GH=j;#7H`$vOUy)cFRrM zg^xE>r*4}EvQ}!8nhD~rKwG^CHZeh)q+B*==jtvVbc(9yVezbim7FYgZHdkTrxzJr zEzG1Pdiw!2PVc+70EHqRx zlXM&hlg~OS@G*rAp2K%DK|Ng6GrUpf-YDHymMni_jwVC5?32S+vOruz>yxA3WIm|y z^r^uc^ssM4Sy1;|Vna0D?^QNFj1H{k`Wha@2bPYpi#(aAom+L-n?(c3(E_sp?=%XD z;5EI#R3JK9APrPbXmXlLKeJB~V)Of11C!$VL&kEt_wUK_{pzNI-)|^4}7Ft_!&J_2M1*46kQt@eL+apC%oTLG1+$#j(x|7#DWF@4AyaDvMvRLuCj|ca*L@4 z!a8%a68x&`Nkj}mr!hjV4CGXWSsCbKgjR#p+;>pbC(6QAWr>fGpviXmzW(<3MqABiNA(X^(@%CB>8n z4O+ZZM!lpKmNamef+87RQ4~FXylzL8IH6^6)kB?am7-vEcy?cMjmYvq&BTE7KnV%h z6s^Dm1+K`A+dryBBQCSTS$>M@Vi*nwBFL!tDgSY5Wq7w-dtA5a8h=}|kyx^#)6XH02L&ge-9KU6C!Y32k zF-ZUrNBl@JiuI3@@XETeqx&c-15eN&T{$^?>@KvJsna4tL!c;nj*rm>Cu%@?Xc%4p zFd+g`wTMD|XjGk|Bqh)+sK?X}-wLoIF{&%V)FQA>2P3}TEN-@Ko@-I`UyffsuME}& zY9@kpffDk-x)v)IH4{Yex++ikxMT&Z8gGfCb z+R$Yk1cFD()G8)2TZ}@-+$FFjP2F^iV3$@t3gl%newsP;Kiu>keN^! zN4St40H4O-Qj)@03YUcULQ}w!5zyK|KO~~Hksf70YbE?U3O+0ANsKW)XuVy8s??Xg*H|8<)ccp9wFcrKT>yAO7y{h7F-LfTpI{f!*3 z)o9!9mNyrxE0?;FX**xEYtXVA25QxtZCcZ(og@G1t|#piY~>gs7t#{?+pOV4(Gc)M zhG+G*r>nWzfLRNpkli`ecxD>d@{Z4m#y?qfUUXzPz5x$TNybNA;~$Q|dxDIL#xqt* zPcybeIVl;tzeKMjv_+oHCo)u=>IE?g@%ue`+YMcmPoAAWe)8Svo6{HHJbrO}dh+J^ z%ac=?pMBv?efoKsBv#T-8lpafBuJtMXU^lzX7TB4v;O$$#rkz?6|6Ul&1$**V|<1E z(=h5TaH+vS-4xc=>8`93UsrioRdWTM51uD;1)UEkGB_*f9IT)ZgDdD<+Bd!6Q}g&w zbKgM!&35&#<^16w?E-78zl_VpZZU@?pyPb*8~zVtEA8ArJRb&E+PP=+n37!qR;EJ- zmFYBRv070`hvFA3$86qhlwjTkyp9Lkw{{*ZAq=UxFJy7)YlAi3ebAr1Dh=6-I7qXnz%d)X;0zVRp^?K64)dRcr>)@rTO>T{!!f=;?oBuCq17rB5*ZIcA#gbFhtkojZS0u)QhL{ zZA8uvx)GTZ;e51u%C#OygiNrk^tcy}vit@&<#st>4}uYo zD%F0Y02LKtDPOk({i6&flRrP1KYw0b?mn2WJ}g)7KkUqR*Q=WjnzG(5K7zNA(2kFd zAVr7Gd};(O`gcc3qX^RPdvcnAEd50h)d2FqS4mt0$fSnfXdbG+GJXeeqww12wBRFKdo z_2!d$BUhyUZT~}lQOiUBN&b@Gw4Cn04!<$*NJ~$d81yX(B+6vA!HrZLNUAid6&fXw z3Wx7Q&qCybWT5*2ta;W4z3RYig_(Qu6cf)cR@?1*BaG4)KUChEht^5lqle}VTdqk( z9sZs@U$Z84MjA?FjYnBD#WDcR=k z?TZo;g`k|bA256sQ!LE<;EN*0UWX-F?wBeHtBd7uI9+a4 z6yataI#PZiFkn(+^9&xKrCQh+t<5^P3ihPuLn&@+3>M$K%*A41;Sto;sVo6s1$q5Q zYA(xiF;gE=rA%hQK?B^LD&lGIbBfreO`!2HOA=Gg1%TO)tODw^>tv8>0GNcLj${BZmKZx4c_EU0koOK0Uj+TzPQ+O3K1N^X<15Y(!slr^wqh6TMOM&?NVtlX6GK%>*p!Z`ga|5Q zY$2W!;qmm)6o-@3!cs8uf`_PvW$@UCsbb{+#S&BiHgRQGoM1aoOS@A{4Il-dUFjs-f2({gWs6I;~m4MCA7lQ{yRGJfJ&X0y?H-A zoZl`lR*NfnNYnGh?di>K^Qjym!OOKE5<>8R`L-e6^J{vMQ>r?Q1FiKEvAfRp9IL1bf?8 zw5u=%s|s7(o~(w2%fYM!o0~#XA$xPJZX%;6WOjR**@XzG3Fw*nln4Nox^w>zS+fn< z5WO!ukuY~iI-*?s z!y9R{DjD8?m%r4J&z%&N#-visoZuG8Kg4%SJb#`JeiN2!%XYmMk{B?yr)JL_Nz|Ztl!ONug!wRtWjx= z!qgPXxC9Ovj{y{v*Z^fsMoLvLtZ2lgT2d8W00Qb#Iu#}OdJMMhn8GoLO_RCDhUK`wro zwS;@nPdtc-9}_i}I77MD`ny!kM}kQU;(wz0^R(bmOTAFXiNlvF7ziqEG9(DRQd^}4 zQ7<=2so$!Uel3*wRhMP}s$)k1m4k7_gI_3$_6&t;Q=Xw;y2qw02M!y4CBejJtJ~#O zJJQcTEH0Ou^WEb8(%P8xp!h8HU>z2M984PqlY?0gXV+4!8GC`pgGBlCSZ^jHlD_Py zZ_gaoH4eA`ZN;xQf!qGvJZ*3Mu-xpHAM4Qfe0_O$H3TbOcfU&c(U0tl4~tFww$0W| zDL#CjE=hZ3ZFcLv&9K9h99^Fuj}t-=y%{j5IxhV4g&98)-^ak zsa}W3v<`mG@I}O=NLYj?1lUC?a_ufk#o=(fa0v#;%gELQ=sAHvo{q=`q|^FhLfCYS z!xPyMM<6q}F^;yZkG4UM(46k2uQ>r-fe_;-685O@`vTaL(1u=F2sc716lz5wfZKhB zBbB9Q1J1;9Ha8U%xx`V1zQ9zEWQJN~YR|+O=1AtzbqI|`3OhmzV+|`M$$UP%HC$aB zTa5H&846pMIBsmVF12NdZ8B|>+|Fs+Cg|=?J5kp1nN}FKc;%EJSB`LVrO*y1N)V6Z z?q=OTGAX!c(NhCOhw{qo3DQm=celDc1+CG~2bDyjRGSyHcj4XqQuGE0(rkSePG znNn7-pZr4Y)D=H;9+&P-`^Q`jL68Nl5(ZPZU;ijR&i)%6UtfQHwcKu70~r7Kz8hT| zZyzIbVd!xrR5!*SWO_OzE&qA9`e|{syxF<%KjPitpE8xUVN1i{NDs~7qFJePAAzBU zUV@-T)sZo(X8-d)UGcslB$EGE7hu`bj_Hy|zAm*?1jhwbjs1Ra(1U`_;Oar{LP!VR zMW#IOjC&PAbgMYU#!f5}QxzbOx-n`OnGTi5Nibn=@LVGwY|j`4**17DCPlc&1dXLD z61C2_cG?FAp=ZZ^bl_62d$_&Z4FoVBPly-o9#M#=dk}Q|d9xjk(=XJ7eH~Yb6BI)Q zp_tN-dvalk<0%I>R_?zsDEMyiX?^EJ1YC7*O%iHRfaiI;*bY7V&En>=%-xt1kO3)> z2a^?0kh2_PzQ3_ufBi^kh7qB^xINUMy@uzI2UsFZPB_8RH|@Qj@=mh!N*BL4Pdm}l zR{?seWw65N$(Ekn_UV=!>`Oc0l0sNH!*d;dbiPl>$rs}4L>zn(5=qXzJs)`)qCe=( zqgkk9`}ZO(>h*=G>$YtqGgWXk6$(0ZFj%Xh=DKcbZFm}B(he!Zk%quW}7UmTg0{^lK z#CeG7!m2sW}Y;hAd)AlApO<_L=mLtjIffaDD zz7J1hrr-s^Nb{Mx{cWa?FE2MDBI6SNvUi@yr)(2U|Ac5!+YPt+ye{ukn-;~FTgh4D z?eXGP43AgKR@{6l-5k_ElvPT?bfwM!qpKUc=R=2HcYA!I3~5MA%LM%K5l%={?ga2m zE{d$ncMRZ_MqLB}B9fd1XgMLbK{@O59SCt^IXjEVsX*$f>ADv@JfEhc!B4Cqsj^l~ z>fPTe`;k>Z{WkUoC`A`w?$g7|iB}c2V=B6^(E5(DKoJIMv=lLd<5ktf&qD&P8j_Ay znhXr%gMk%YuSjTR#JwWrtSCH{&ijtXoAM_oZzr4?Dy>5~Hy=n(*w+HIU^8KpYMR5AJ z*KCM%xEcqJ4kwRc(c#>O1Vl$$vL_TeOqb6n>xZa^xo^9V4CpFFc36*b(;$D{7{5A? zVauywCqi-E8IDgCdtM4L_kGt4eMq@u5sOi$z{9bj7fX=^3`fU%RO%!_!m;WwJeX8{ z3=EDGVj;ntj81}qQ^;iNntT8_v1=xU{zh3n8R(ZnX}V>)%rA-!m8;M-git@ ziszBQ)SxsP30v)#6@4+Nj90COoD%h0% z7{o2Qx*Am_I9Oa1+o)PWz@e*od?K)lc=26Ef{?KiJ_)6X@AD0bdY%gye1-M789u6}4o zzUZGVh6uSLGUn(JWCDFs)<17Oe9bQNcztzu zeKQnG=__>F^k)aW_(Am5cjj@Seoh5TY8lryxHDwGD4vaN!Iw)wQE4mN@i4JgwiE?g znE`yyuoFj16vwH#xT&W1bn5eJ77o1(U|)Ro9~p9Kr^zDnA&G#&?w;3=SebN?s^Qsq$b{ zLgh5oDJ`UqP%R3zH#aeBO0}ZA_YE->GA;b;gm_;LcbuR$*yA(AMEDv0RD!jAM#}vQ7fF6iFToouo64 z&`BrCq8mC1*mxwmhfdNNx!uELEuYn49Iut+BPDc1u~T_8QY$!~N29&iIh{r6{fUv6 z^1=5x+h*}qly?G(PyZ$d;al2WrR;<5lAR!LRbuU2p2}+NX|QWmPruc{_f;DGq3^;X z^Or8oQf~rj(uFE8Mp39BT0*IwhrUZ4I7C$6t3keXtAB{zNEuq2sBqLba@cpS%UR?t z@PwEosBnlP7co{~k$*TqVM24eCM(FMfI`eOOmA|kTR6ifTT(rO1>{v<?|9<$y;^SXu6ByZz0>!k zm9JlY36gCWt(mms9~QcY1ZcwmA5C zz4`I|W_@@2?B=KSMaP+K-;D*#AzF9Xh1#=Od5{|v_Io{*8e>|4pfq$aH{L-Ga*CnVs1d2(V;Tl`kpQEs+>3>@A15SOi>JnN~1d#V$;Wiz{eEtxnI6mMiP!s6W(j31zjM z(}S2s0L9CdI2KC%iu-N=zqfJUEh_av7Sn$a?#PHEvfOu;?OYqjIXK1a(i}<4G}sZ; zj$ro%4i%c`oIz#URH02(S*pZR1C|Oe)Ng&7tkhF+wY1_!?Y!kabr*MuQZcP9-Z{su z!NH>v81H1d7f8Anb~QY*k*7ENfmBie+M&d;8t&#VDowas5_H?>sh$^}h7MzGtc-0DZ0UW)? zZ~1D>aKeu0qRVo^PLaOjiPHzYMH8TJ94Bn58@9gJHP!c7?CR_f<#=wN$nm0o|H6L% zZU6pT`~9IhFr%)>=&BU{&f#LTDvYTiB@RTZDuTZdt2)s=XciIn1{N>?oZxHId^a0*%7#_X13Ca=2FjhS9%ms*s%&mJ^Vf+_m2?turb z_60zl1}60`sb-b>z{c}-;R{}&b1Srp-UDCOIk-i=|Dn8B@XHJM&D@vJB#-RrO-Ls=no@iXbgt{Gj02 zF{*kpURB5ARdrIYs%~v)t5DD2VkoJKrUu?q-@!@${>1SZaO3{yRwM3>MbT|UT$_fH zw+NMQ2uj%gv!BgANn3mNxsj*dww;kT>6GsOsJa1%mADaceg$P44%;l0(7bPvDmmV_QfS;CzaEFk}a(!XTo81nVdnf|g?_ zG1rT%T;E!`62O4uTu-uc9cSe_A>~31=b8caIpOoA!SekXYjv?zw+=tH>ZT=Qt8UhV z#8%N}OydkQmo)Mn8mpVzyW!}i;i(n?oI=$zWlYFG&b?E0El)f&$=WwnZ&!=0!>YYg zwK2~0QqRa#Ic~t+W^uE&UT=xcz>mK^1f!&mW)?(5y__++NMTKv8{mVmZv5JCdt+!$_T8ot6Lu*Uf znupfL2;}Jq2DFyY7eTak?Ar;$9M;zo?(IUtD1pzEh|JN2;td%Rw~f&mYc)s~tD0rX z*|Y}QGMd;_Gn;C(RapJzKSx$3a{KXREzSTeU&{fsxcV%3;w-de24HJ+y!mdfw(&?& zHD|L98zVOssu>g?h7NOuS!*`xwbFBZZITKs(1+p;84|bc&>2I`$haAdu%=e=6(ZFo zIk>Q%VDlALAg-dXumZJgzCs#p_rX^<#r-k|o!#8*Q`;3dXnv^mjhok)`3wzYUU^nYhyxpJqg->+Pq<7Z=N`uBi3RK$*DOit~)Ja5awWHJtoG z#QPe~eMk=2XiN6Aza>nUI{z4-U1&~YpV{WZzCnj*_16{|EZ7Lxo@ zvFb3_6sh`{cPdhd<)GqZbdrxMg-o`t$@f$xcFm-mRZ&)Jf0ZG1#`juLC_Ud?`0!w_ zwC^NYyd7<_wiP0AUkj&)2aSYMw+e#pK)&85J7I)w*;-5ZNV8Vv1~a(gKzDy~L?%iEQwQ?q-$ zx+1zwRHjk^?j#-U@G|7!S%*s`x*_B{m`|)o{ ziGdf6l%YTNHkEv&VHSs!DKG<}7?Rpl4l!^+lHuO-qLT4WF9RlDub(fk*PBlx0hCsC zRG`wzmI+u|rQ8GH(rwW`0L-8nWRW-)mf0VX^>Xvgdb@jkdAV6`x3HYgSmyXxX3{Vr zr{sh;9U|z$gaht$s!xDDadI-@PrEQ03|iDN9B^omZ1%2Xheu;wcnC15+XYjHOHqms z6gEZM5`a%Vi=-O=697@27AY>?TS(O-j7ES~?V1a)K&RU(L9G=@9u0b}*oI0_EP>+B zkSwW~umHYifb4$YF~>x9dY=A_3X@SRSVA%P117V2F%>RD1_2p1dvf>g-Et#xe%Ya8 z#lRRS5W&B|*Eq}t5+4?tWfH!(s5?N0ciUW-#1cZAi~hBZAWm_GQlx(TG*0?Q0UigF*ugx77HP(c91-fN+LSxPoAAW ze)8Svo6{HHJbrO}dh+J^%ac<%=L@EH)}zOVXIxjVUyr|}`X6sLi%(~p^~X;y*00-@ zd%am~R?F=liSznTdN9bb>#03cy<~AIw6mt_mK!-O(LE-FiFxqS}kO;+kiO3Kf z#lUJvo=glsHTgCnnA9QcTu+#w5QDRcf`iIzM<63F;U{`R2MLF>odS0bgzJpFguj9U zXVByf1%iU?49UA=D0F6CV$TL4m!k|4hPF&AMz_iqp35v61MG>d*BijSd?xoRbvb%u zb8|KuM#Zo!1tIRFHA*fbvqVT7SuJ>xZ&(2hX*GsKIgVXMKn+y7jG}UkIa2?9hmz%D z!kQ_1=09Chj|U$2^#V2AP`tG=T{YAfQ&-a?d;Lo9y$Ix0`p*!~D_`iKUNeP$ft~$e ztY?aH{YnuuXaSNYFdE3Q!TJ4SFs@!GFgz53fSfv_C-}evAYyKVAnci$Uk`(fTUlqe z;-m7XE1j_YJU$E1DFN4n)pdQEp z4ng^VoECp%rMQKlf|j7jsAWJ;a1xig(Nrj8&avhD7oB z%JOAsmdngfQlZo>cc2C3?oWpS_Bnm9&O)(WocI zp=J&lE>|NDIrSWmJoIt7A!F2h_C|V_`iwksajfXZG**ng_%b^RY38*_8o3Za=rz8%ibAK4{Z(2)kGD<6_%otaN}$7o@ZhDF1=(jA^X z&A@9)C@1P3A<{#1c%=F}Qhm1F1IMmGdZxy2v4GQu3x`eAm1~bN+@lLq*^XVu=}GYK z9iRz>o%P3)Jwl_G?2Yz)w9dx&2F{(L~|degXzF&Sn4kv+Sa zwv5R>5+{fD4imqO2Gu|MS_3<&rk2Q)X*0Ew*MI+y{Uo36tGc%tgBWO-Mr5ZStnN0Ip|NXme&^f_%!6RTK`1VMRM9 z9ihazm{&pj6M?P(Az2(NhP1+LoEVN}b8kZ66++s1Cw|fvby7U4$Z({xRG?alD-iDp zWhE_Swoff%W@Xk2q(YHt(rXG+645YAPq|SDH~A;svOyakYKb95$@b$zW~o56J3inV zM?3Fl7#|>O1yViZ!&z)eL|fy-E`*(YbCrkW+v`7pd^1b8gqek~1Kj9R#*1p3RnRb4 zi__)!bvY3=km_=($}#CE4U+_-Z3Cwu_7j}~=|P#%1pBSsPB20=Xpe~vs)b{>DdP;9 zVvf<}SXNb$d|b0nhwnoc!r^1~O1&N8L&Yx;KC1Kv9X~4HU;(0zPB-K-UhCLXP__I8 z4&X7X25&sEsaVzaYgN3xI?L4V@FaUJN`{Hik2PEsR@5mCr4{@FSm#C44{!Y4AtOLz-{9UH?hZcSe7B5OmAv zbcf@QF=*b4BSupY+_-vv_ja?~uJ1M%B8q#t*>0X7T_6P|wMtjPd2dS2$z`^h4u}Gb3fs$p#J*(?tPG zvU}J_sY(LfqrdmOYzCfET@G+^fvpGWP6lI^{+LwM*G6X7j&}+}9SI=dD#3N& zt2&JjMb3f%k0#_LFc>uv_kc~)xiOm)mmJl}wn(5k4s;IbKmbK>wyzf-zNQVU0%(j9 zIHY#;iTftVjBM1O7!oqGcWg0BgYAvpv5MeqUt;fo<$%g;j1+CX z)nK(*w04b9wV&GAL0{TZhGN~^yH?GcLqKA;FiKu z=R*g(cn)#wpR9TaD`5rDyK6@S=7;-Log8nE?ZZ5Q9*Ph1cV-m6A&-7cF7j)q5Ip!k zaF%iT9m82NHR~A$8a_YB(x#~L;L+@L+aEcozHa+TN7LgZ!@h*lA-4LX1$^L->A>{0o4gQk2$z9UOW zN8@|!sc9XGk9Py>G58^!>EHYSe0S~U-Pr`nr|sQ=!=ZdnQ%UtTb~BaGQ@)QWT>HO; zySKtw^yAi6bn?BiAdKhz?W(mcyJ;PPkJvEjTbjIv(7kX8OLcPa^7g;2@8%iy*4xnG z_vlIa(>)wNyQ_`9sOCH-9fuEHPg-(NA#+%I^1=1P@JT2kJ&g|D~aFaTtQ`;!l=iD|DJ)k+cjXVeF z?6&FOuhZM0CfQL_=mJ+yqK9HUhj^Gk@69G+6DGqo@t^NQ_dXN$TC022!64X!H`75(L)vEM)Ev_YeTU+p4v>D>j%uV~ zCtB16mpUj1Dem6kj(VN33jLFJ_G0t&zTJn8HB=4i&-bD4%^i%cq!rx4W<3f1P;1CA zxrv#`spd9jqL0aq9Hr*7JDJm+9Jzh{aPLF+`-as`>3ebp-xo>T)rh8X>fW9_n~9%7%ePn-G?4^rlgb;caLzohT{$ooAmp5AG$kiVt!m_jG_Kq zBbDXXb)BAc|L))zX7%n4rTTrlLy`wn&+d@pApN?K`h9zK2U>jg<2P#=k|8pQ+xND! zcjDio%e7`1F)&4r!_0V@`aa|2*qU+JFy4mh{uygqb^naDxf<5Chb`9KJZ;o;{k-+s z6nEI$GDkO*rRZvv=i~;(23_2CH8maFIm<@Y(+}RzoU7|zCpp&Zy44dL>UDV$**_j7 zVXR%`AwtI4OWr?|+fm+4rny=WKJPRy3joma*604uTvzg({~mIRRw4$+zkgMlrrRH~ zae7XFi@K-%gif{G;*@s@g;CsPs6hGQ1S@z5KlD%qt67J#v))ViVehYZnsoqy7q+Cl zXM6392C9kqdEfnB0xcZ9rAnBEt|cjI01Okh5Q}0`Du!1S)5aEB5v1h42UZ~J-IOCU zYSngd8~r<#`k?mvV|HV9fQQcnJ^b(vX*2a-`X7|Q4|BXGM1gRg3Sbj4e!NKTxG*|y z0tW>c?p-Z^_>T+lnfLS(5M224fdd)j-m3!#!1#@as~AJw6Ra|%IsMyfZ|(=Qi&tN- zpD(Z1n@^$;ru$c6k=Qk?@cV;ce2SC&aDr1X()V{aDXU-e zt~*j+t$+S*dGmhv;muezcAWZVxqAO$mvnQhd;+q@y)R^Cy?&F^M!ZJP-6CC$#-*`r zHG1wL>1sSRZjeo{G5ubdH^!^dhz~gY8*4J?RMwDf+%asY1%s`@#-C1a50wTPJXUIT z53SMXR+>|J9j(zzNq5qkLdAKN5&3}>i!1`9WB8GxJlEDDMf-2BH4?j**yguC^)6dK zAz2(VRR64-ZG&u_kYf_#-bB2TKGJ~D85VC-5)nuQ=>?@QJ2%14P2mT;Esj`>6K-W` zX}1fhLq3qkP6G@{O>F|mG&BMh#Mun(T(R|!%=>uVB`4l&J5Sqcrx@gryYIq0a$y1y4&k(jUXHL4(9XKV7E;ZomXBDg(G zJXA4U_#30){y3N-pQA38Xo4Ime!njFg({3=fgxs=Ye^Z_l3^Crz5Ewd%`@%*4ygEt z@B1+oR+#|4lj$7&uup2g##}OpUIsJ653({>rRg&`?_qlLDq;8vBg$BjL6*~uJBAAe zh|z;%UNt-;qNyTbIyhw2qr3&#h^Spq3D8+ukZE9KU1RKw<7h!~v~gzhC>KPu3Szp? z7>=sYwZ``7b8a_=33|s2?!KUJAC`tF_x@pBtbYTsP80Ufpji&bOXDMd-+PEPG3mR( zSoRVp?|b4ok2-a$)9B|>C!VUnbTV|*nQa4;vklZo`JwLv zwcB+78xNi7N#A+sH9aP|0TDJ-4T*X?5W||v=Z%Q?@>yjkBB&;5j~yH^Y&?vKBitZCerErQmvF_oQyd)p6)SP|J90=*W=;d_Pmup@B%jeFVsXE3<( zInPNO_@Hw|i-$yL8P=7&kxxG5`}tJsnU0KR+1*#*l`x6V)%Gneux_5yV<*0Q&Kzf+ z?Q=SjvwzO=VG>-mD#zt&(@MMJ_4W1Q=JLf4JPun=;fUMTlk!2-dF#ozPamj$&c2~Ww^VX&lX@qSD-FXooj%Gt+u*5h_c1Qsm z0z7GLm5r=8#pmVizre>#|CfKLga&t_FU(sB?hy-D>i3I9+T=pwEUZif#!19+Fuw#O zr}n_apmINNdvH`v(R4XTf<;xvBbc=aTMV}6WDq&D_COIuI$ln<2V||+9wDd0E$JkA zFHH#@A`&0<$ys+|5N0MX{^qNU1}%AcUXI1pA*=>2SBKJaj4pw$JtK9dEK#5pN$`*o zcXPWQhBXLesJ8VAT2*W+wuGl6R5YbvVmK9890#CCz0t=)S!uuEIVa12vr43jvQvobW;Uv31XDJRIW=ofKIS@*Ov&ORZ> zb#7N;9n_(K58O=j+R^#OwC|?nIls{Gxxa);CKA7rx zCr!^UaIQ;Bd?TAqgiDf!2{~mEmJ%a^E=;memRR*6$c01>6@Q5o<^f|kJ0=U6NgC{~z6heCxx4t$|f!>5y?Bs8jrp~h&O1f#sMU%pkdll~+m zs)wM)?I^L5`kF*sz6s~rwCTiAHX?Z?kcuXkY9LmTnp3csShsOuS>ush59J!K4P5wF zI>q-rY>luK5KHn(-?U<)5^tpNvvx`AY=_=h;10-|V!M;Xnh zsznBH7R#q3o<%-MQE6}Q-o0CH3J-neAOW1BQWn)CpFl8OrDLIqB-A`7nn*(0!O_Jb zPu3V~+(Boj1%si%#>cczX{N}Dc$z{u(JP<`0yYyu^i>%K4}&DoVM9+bUciup>6uU= zg;d6F;(!Nxn61!3J1I_{LjdWoesY7cx?Nz#`zZ$XFn#Z33Bw zR>6X*woAi?wpwyuPK&1Y?lZjBr_MBV($`gdaBxjBYeK*^ z>E?rd=~PZK`q4J%KA%Zl8k=b;BZv_>i8H7Z6#Co%Pokx8cyXSN2HGdIUmK|n-43RQ zAG}9F^PV=%cfd4zXB)jyBQ|w-K)1>#^W0^-+Y1XajeviX1DqrN1!IVbF;~8`)+y3* z95~;@egY@?;Y875r0>O};Se%Ub3lH+q>}iI?~NGW`M}|8_LkUR4<+ANNKe@_O%ARU*x}|IPe>>MbM{yxYHEB$JEnr|Sc?oZ4W@cF{Zu`jGF z9Uw*z?)}0_1X&dc(}5zZ9`m5i40O~k=<|h@{WF@sqh#}kGpanhJkZexPeXMQ^e3U> zu8i~@AY2z#I>pAfcu+2^bg~?d$HqtgRQ919&V`kilALibtW>rB8(&z7m{<4w!b;WY z4H$IpS9M{fJw(R6uo9Wi=xd%`A^O6~j0%SS@Dxni?os!`N(Ske^-Sf$%3-|k|H4XZ zT8(sJrK_>&aeW^ztW;c{15xLGRX4oZqV8ZWtaOD)Y=2kf3o9c8mC0Dfja$>duoC0s zL|m@{@($s`N)PELgUARiNkE)LX;x|bgO~bjH7TcGSm_8na$AP$VXPu*v}?*2R{EwV z>B7pe=`pPfE0KoEn(ACwNzhdO%`dF zFnAIdRwB+7EglZ}!pdQIB@{$(VNCeK%8<5iae?<-zG3VT4&gJ#nSEiUlSp4!iTf}U zT(!?v7n}9<;#L;R>#(&754dfuln=jOxzq^yZ3(t-7%xX!T zmf({Fm$b-C30&Pj)3JJJk?dR4A zl;YSG5%_X9ky{}=GNKL=Ygd*AGCIuXLuGjhtBKI^Qp$(c66m_`m@VIJ4N%af<;3L8 zNC<1~I~gd~F*s(R)1{=R{PG3by$cZ&j8FpB-|C6qw&1a<_<=gfjMa8WfF)B#(0YQI0zN@(ogC`uLQXdw5*c-f++V1Il;#d@-i1D@xUX=g@26~ z=K(@;0gx#0F(%+a06NA8I1UWhm^7e~2xLIfIx=8!I6%ey0VqZRCi1N53P1!4Ayt3} z7RnfahR*;)J}huA0R_%bERQ0Q5r`F3Ne({@t6NcrL%l%=76_#p4(RCC2YIlD>_U1( zR1qVMmez}h3Sv@aSQHI|^4PSqJnShSbD9FyM8}vIu%*{)d1PP>jL9lIfHheu>6nw1 z@i4I`w-I}d`oXD6fum*$k*X4Vg8pgVp;C^ z4oQ~OkRM+qVWbPMl#Y1W`Mt(Q$0ZJIZVZ-#6a(iPgNq=Ax}|F13N?zy8dJv4479^4 z&YJI}XdSBvS0%-YbZ(-`Jod(>A6+oQXWOVTst>Q(4xNe)P@YOI^|tJX(apX!vOz7{I`174p?iE z=qE<2&!0bVdhzl3`RS|I27zq{?mo5U{?GqFa==@x;YUX>vF663)GAfu;`OPNq{{G? zpq07p@Kn|@95{DdaWS9$0%=yafV%`Jr><4oFFdT2wKT(Q*|oaY&$I8=?^hS6o6UNI zOBOUV0sZ-BbHMI=GaZsQnCHOG{1SG3fMZSu#zBM85gw3&u_#+Uq zPAm;&Fy(ABfq>i_ImB2qi{K>t4Cq8bbCJN?A+=zz&Ke$03`+gr0t(-In6KmK^ch`4 zedO{_JV&mM8gzxE%fpmm0#xE43_utrLuxThbk>oE31|qrmBu$r5Z&yN%fEh@I3~&- zhl#R?{MZg*fDG4hs!SsdjqpvQxi&T5ps=;4M;626b7a}0e8VB*h+9;v;d8N?#m7B@ zRgH_vCq_?QtmS9fN%}b~i*%c(pu< zjwtaw-qTzu=a@P=gL!r-5EfX?wxyAj+15XkGTW*O*GZ{HA9!5wPCt=1I`lb(yPn1I z?i7h^YB0V(2s+@M#17S5j5VA<4$& zEa_FblG}$sT6Z<(Rz-788gT&(yBhkYG;j$^&~fA5zG#hW=T+tw2z$D?a)^AC zhgB55y#XtlD@dSl`e!|Qym-fYbsF@TOr#;_G9Yt})`KHtOZk2F>~8Z1O1(5s6!S0)%7<6~i#d*~Sx=G!t@;c9OBu}dL!`S5)mK+_wJUXm|#=%JZHzrg$(Bi?LR(lZ9@YTjxG z{T(F4))7XL2Rc4t+y5ePYjz2GNThmR)MKhhl&j->sw(6I&(=hvg8~~8osOh=MDCv6 z-CXQM>o?1mN|FD?4}W9ui{J&@-Vr=i#7BZ>Iv`Jpw*mX`mq=;kAtg5>yp@$q<3Pd`gjDq{D35 zl>KowB1;|0&xFXDqk@#e+BRXwT9F}$&?KL@6P`GXxQnME0>t3sYas^1P7pgD!%kr# zHbbXpk_ZhB$q zc9_b=^{v3GyIyIl(YV5+?$a-hX8$#S7XxG3FONJW^=pnQsr!{#l3WE;QT@-9vik1% zg+fHSz8dm49N2BzKV+saU>3AW0Lh52e-s~Q|Bd$I*I!>Px7$`}#6Q08I&&knR&(q* ziI@MpTm7`STHfqj^a8`S7>7&|1f^E=BhZ!Vo9d_|qod@md2g?Xm9`^^;GnSW1sU7J&&dH2-$7SzOET7xARl zf$03s+H!j)D%ob9Y({HGyFP9fwcBwjD#>pLd8KDOwoS>u21r8vRY|S}$S~*Y-y0x( zoUi|AfZWhuhk4$>Der#&djqGd`~4pcoN6HQ+?X4UGgknpJ&f?i80{cMKRz2hQ1v%G zt{P*EnMc*NqoUEngASZq3!3#J3n;hONL%foMWx%tU{E+#EL%i+&RS1NW(PZRI9WCB~saVY5(&e&xWN72(~DJDs4;P zkgW=Ve|HJ|djf%f*988(4uSu03H(O_f&b71{)3soCwgHSD1<9al*A!%OQX(MhseJp zM3OpsNDPSN?&>FciFJr1b@q@L5Xs%$=hiwuQ0grB@r`Ll4&j(u>0cPcCM097hAK0p=DMLW!}O)3vF6q!aFpsES{c4tm6xdT*k zW;O#!rm#g2Hz+s*)yxVg(Nw`8QNiJ}N&j*9Ex&7oqW?bpHoyPf`u=xxyQMbPjl};@g#k;sPoQ5|DgJJ! z_`99rA9jj=pd{Hgnq;2&R&f!i-jbF2jY^}e5}82$lwYB4)F%LM&;vM?4yg~!6&t=~@j1=ocsv>C~MB-JE zEQb`eij%*m*j0p>0Rs|t|GD@R-SvCYeyzD5Sk>MDI^bQM?aM|{K@V+0+l#)=3Ufk> z_l()3y})R}Soo8_BL6<%On^&Ev|T&4Z$yNCchRz+5gDM@YjCNH=kqZm{w5ue*0>lw>=Upx$xT=-Ff$_8$}JD)O!C*{<~IXM~E zzL&g{VMaJ2pKv~+Oe@Bp%2tEOvwk{as}JR3t2SYGr@-V%laKZP; zVAyOnB%TENACN+vJ^-v53ha&cbE!XolNf&A04H^&egYyblk^sNwx?SFHJYmWRYOv4 zNR6l>9vo6KQc>Z!!gBc7u$JiZEIsvG7=|lRYNHs0H8T&=ATP#;k8dFBK%WZj&Lmuejf+MzM~K0iz^7oGd!$?5CIZ%+UA`t*emo4w{21x79x*m-dr zAvJi(4*r2Bi=iHPu0z5)ye$Yg_r^GpAE(Q|uljPKj!e8~XY%_P;ro(>M0mOF9pg!; zgRgiDYY0{sLl``nEnIVKg_)rb8E{frkSg8Q|2&>>hNf(pUUaWn{~J}eZ- zqI^H-kHhhhb)>hs7GDlPJFKTw!m|@vTC8VMV*x;pR!tf&*w`6%LyK}}$C zj$?~?6LJ{4l*KO<@PHws-ztDnKdoy80u)Zjil1^?QE90OuV87~@VSc*y|T!AjxA$LT5gxc&571~|v5 zY6ZV#y61}q(heI^snd=d!p#ldU^}A*TC|wi%jLm!r6kk{rYohXJa{ff!Gwe6Y`h4K zp|cZ_%rIZ(DO?QjZ+7>9M7l^;Lr|6#IZrx+=c%pCJa*-HZH_?M=B(9t1 zu;Ou1`u7->>(XpjK9x})50q7jorlE)>zSa{Fb+>;N1uO=YD(Gkpaa`_4A5sUZpK7?_c z6n>e+>#9KNp&|2FcbB^@ILWEu!r-K@+?_$AX2MPl&q)B}8xr<(M?xLcI-rK+VAoNt z=6)d9+4m(-;nQM18jY+2q6RNbz)f_KI$;y}A>W#SF(3eB;oQoGv&2+6`|k1Ur!QYU zfAiO8FTVQn&9~pYqQF@vU!DB+%cskmi{<&<+w0X%5YuKY$Fn>ITY#1)RT$CoWI7y3 z%in-KVOk!7<}M=s^J29-UtTY6Kdd*)9~M`4%k8k;H23y|zNtd`8Zxke>G#v!*#3{NSb=0Yp*)!Q>o zu-8DnDBBxvcTk~F?>zB*$N)pVRe0rI0vzfs+_ja$l~n*l{SD7B>(vz0);%&@z1#8R z!&5OjVo4%~XP=%&I;3pb^G)@+Tpjxnqa3GRf(H@0+ zrk|@pC2jAXw}_6!=Xn7?hM_ifnjh`TH_ZvTjWe&ImdM50Fv#ngxwxZ~s8b{8v zmsH>V=hI_w%Q$57`b^fU9>tism+DfanUD9wr|4H<`^4Vw=pGK#jF7cr-y{*C62wN~I{M zLncua(ipk?z@DD;ID!NHZh3-n|8B2b#vHt@*8Au7`-ijD?eeM>h{x;e+tt-_bG*LU zZPr)X2mScf^Um$tms#ZdO{vrN2&d$I5cU(N6m>w}zGCe;)~26EPOd$T8XCfrCzsr zZXZV-GWiXt)6v<^o1(rABW~k5bP{`HDsG+(vJEL25#EG`7&%0X%p!t_UFwZ^Swo)@ zlS`_e06V4iULk(BSK`^RzP+}l5Em?^-FIodgB7MAg_R=p4eS^Y4S;=NtZ$nXVP$i(m43*EL?e}LqJnl={b^yv}ar`9ce zgbpO$%QqUcYFyT*o?`o76p{fVCSJ~G>u_v{T1sPmI9n>ida~1jwU$qdo1MbZxFNKm z^f+QRBuxg$hMWhDhrw1%1^yan0`WMjOB~%&scRn>vbt(8{hh8Kcq##2~3mhL#~v9`abafDvEvcf+*dB*@Y<+kv0O-#6~MS zjufQqkYFPx?8|?|Lq#BIb!q8TOjr^Uj73>vv52fdJQjV~jxmcGo@g+Y6q3aikR?`~ z{&oA8N^MGZnal3Z{~(1f@$u4VY#@G#DS9c@;u3k%0f)4(ptfA_B%c3ZE!P#Hih(P1 zWWr!%84&S$d9z(_&X?D#fz-?M+r?(P+I^}X@Ixknie?as%0xQ|B{QNSZ58_fLuieh z7Fa@{**c=)a&_J2>F)c>JzjzI7?u8Oxmgz;9Fbn>`_209792ENt5VFo6i@L5O}9(Vx{CZQR;BtlN}pdu8J8-d>e)9B?&3gpB~cQm83F z6-ixM3A~*^(?$b-C(zbP;BjWl4jWvKzo`v14=Wcio`9V+KJc8P`7r_0>B{Ee1J^)% zk;fAcFJua!4fHAW3;YhfVX0M@=z%d*hIaFJkio&aXgD|ACdy1h%F|GCsMn_CgW6+C zKB%KrN7V@&PDR~`otB5nzglkBcbkjaTWzgsV(7Y+JP|>+avyNapxcsZK;af$Hr&13 zUTjvkJ27ZE&}XCYx2slS-n=h8co{EzAr7HBy;`;cN&w2mh5KOYp7KJd8gjX@nXc1G zhBcaV`WtL-W3@gTv~~tZECmPb>{J?;3nfvOPIUxG7_UAN_O%NMM_d*$x&*illF8OJ zY|v}0Yo-jZx~!fmgo;vn0_7HjN=oqJbu(A|AG*>0Lg z*;xmtp;E?7{Pb$^e*2|3s?>SjiBIPJJcVdjn4s?#pVoJwNq^NPFeoY{h$3kM&jw6# zo;X`~)k%OXTKgWp>idp`pzN!jn6`s=L$OgKQorvEzP4jy%q&Gop`ginTYMMtI(j^pjNSC2% zL%x%ehO~MN;wajJK4seknWbtQUb!-HP{k27je_P{nc9Z91yyU4ELThiOF}a%^n@v8 z`Jw&i8)iPD0yR7dcS;ngQ@5U>jg85Nc<7ru$mD8B$b5!x z-<_hmKeV;A28SkzBT(6{NXskh&;^FOsUU|Mhhre9SU0gT+nWuXc>9r>k^@Nb5<#Ep zCBTZedIG=_CZ~QVvY&Msp)hhX>DU%M6yHSeWi!XQ4t2E$xHnuCR0d*IjZtqVsurH= z>(nst#WF!k05B5S>{E&j5Tj0|DFb8vE|_X)Ymnk+*31R>o0)4A<*qZBqr3OaC}N}* zok3v|R3QjmqLYh`0hvb$iuATqR&Mkk|ALUy=LwSk5yIq7*>YEaX+<|iq-jN1)>m@| zj_4g*%rNZ;Bv*%RM`!~xjGI95G~rz8K_s?-9|^uS<({FzjtA<-w7NoYm!>oxKFDjY zVd~~Q244H@-=V8Q$j|oo=0}f+ND%tGP&L~mf7^0MgraF~1SpE5UsUII@ z#6v^)Cj;J@f^U`tjuCOQ(Qz^=F19Be>=1FU>Em3GLg#Ca3?rN$YiAN8*eR%Pbl8aS zLxJ5}3tlKEsXlyAP9rxwa6jOH$c!HABvMBPjE4X)Tm1Lb!bhaEJZco{x=aiHAT0J- zni(R}XBg=-`X0GHHMWe_v$hkh>r!j_Y$N)0_vtTp%gv`(%WXR?D@JMIwZ#l>JXfOq zjTdsj=D4>()3DBQ^1>&jcncA->sJ0PZ1nW(EeAXNX|=xjZv8%dUfh#*0DSeOr{7oG z*E0SJMtBLgVd8dJAy(X&w2ZjaThVSO<}72+vW_e(ML|?wHK5l(#97C}W?-d>p7c>@ znmeFW(a=V%gt12s2~z?^Qi$f3No+tRQ5a1bxAgLVsxYRH zV5J7NWDoPVNXH{IQKl8GRN3k`v6eFd}P$NFFSXt5Ck{T>&FYD-i!@Kh^U6eY_d+KP$uc;6pN-Z%kthD%-U#40bmVE z$wjLnS1UNt@PR<}sriRdo{Q~#x!txMC@xe!Ter%>tK~oMR-5jszlyH5aIGn&W^0lVO$4V#85E=*>kOU^D#LFRAOi~eW=vb00WYgzqzv$)x=S^~qKx@c*l=LCgs z;fn+hqNlu;!spBD_2!czukb+Jo4f0mZ~t$rr?{8gahyG@Pm3sZ>l8|3>>b$7)i_g$~!V+IfN+W7@ zI-74Lv6rXpV~O_5RDCTm!nMz3NJ4hHV5>L~=;&H$p)S?ClNSycx_cw|u>5%KZK?vU74KBk#ab%AR_6~X79*y=+sM0xkjNda0n zc~8YwpGuJ=QG`s|_J1;-{tTZQ$B0OZ8%=sWWL$GLCs$>R9CUlu#I1yuYqH89^R4f+ zjZ)lvC|GHcnGkwjH&?>Zb))jZ^u&QN2BPjA1P2PMZ;iuF4h>s(W=`7%nY?K2i8odz z6$jPIOnXCJ?OC!P=yh9gI0>nT#{*$&H)Wr2Z0)v<2h4_AGD&nc>Fk-1m>LQGR3dH) z2&bb7)Pp%aO2^@2ox_qPbLsA72O~3iXf(1uBB?+~F2h`unT|m!*fAGy1d7X^U^2x4 z2CNJ+vj{L7%ys0#6&V*+Qf4q za5W$|>?-&XPV~hG11T9J^cKJPERTRFxR!q9S%8o{_$=j;t@3VQfX33U*DB~ZZt&}H zFV^yKe&XnUA0^EP;e~ftcGy{tb9*i1Q zm~}!m4n8=-B=t!@$2vumODZ_m{vQEM%(|q?*JDL+VIR0SesG<)ULuU>&7TJ;dW$=J zcrnzpNkNTXLi0BNt1#s583G)X;3(X(Z*4{7KT4n=hS8iwAd-{1GuMyCDZ}%r6`N3h7iRyn?TrM}y*Ozx!%W)!seHBJ=d|$>?0N+>6 zAtU#JHcbSw_fhCGoM8qp3cKCh}Tzpt;G6eJD+NO-3G!O6E$+%ivt^U=W zu`U>GkbmobXFWuqKrVN!THNf8*LOF-eJ~2woH2VWiRtX6*{%8sBhuMPDg%>6=zo|eVw5|C~QD^QV}#ZLmo zzY-yd{T9>&`h$*F(lU|t$T?&BLbH~Ftf!xuX6;$hKCgCU#)m!NzH8iaC9b~x?P8D= zOsB`EbAx=-t0j5ogXDc^O5VAWybnW?caBTmhq&aOOI@>{;%X88(;P5RU5NJ();maI zBc+IPs&b{QU(`f4sqhH!A_pst^a>)M&!tKh^pp0b20CK0PSh~X&!xa1EOUcQiMFLr z*)~RI8Lc&Ey^u2&O(pRNJs|EGJ(3wlp;>!$&oD8Zy!_&FJKl1nup_jv(R%XOTw+Y` zh1T-pZ8I{otuhN3yO-@nuiPdi^zM*abgIr8mbA6?YqOiTVRd^9EiYp%(G{OZZePr1 zU^H&0c@J<@f2bL%;H^8y5$+#`+`$RskX=6!X7%>w!6*x=KY)XrtM_mfr^Ad5KTcEk6NPV zeelJ_^{rS5yD{9>tOE!hb)SB5H2bf?>K}O9etG06skehvN!_o^lB5-)it2x+l+_yq zzfhqM;)l-TaA3D-|Cp;`0kWV~g4hf3^^fA??7z{D{rc;x<#s#!+Vk;!*O?nHKau%4 zaM%5o$!k+HQso>{MtV)t_J@;4BsFH{;ekZ}l?kl*|L++)R*S`%4=JHM_QB1}WTvpTwOY)6E zay(LK7?T2#&OUtFt}Yf=C(EB!7l6Xe`a;Ay-Ml}&dEZvV7l=f!&?|h2ArVXeFpyb$0!=)wb!8`*6@Crc3WCVhZcPiF(qmj9+~@TWz1NTWk8gyu>5o z^WSy1Pw%Wtr-w2cSR6H`BBjsiX)|Ifk_KPGWJ-vsNFl+6ppr=nZ&pnx&Tu}~>ZAm} zX)fs%x;58tTF{vj@|&h~g!YYuZXC`M@bT{1^^4@L=yKttVb`|vnUa>i#=1f}-jX44 z+Z>&dbvtAFB;j)oB-9;8r&Btt%sH?xvbmiD`)Ws-bD)gsJv#>yC7y!Q!y=^`LcZ$^ zKrMu7ZSKohsMB`!WorV{+RnEF(BTdshhUlLKN?*|+F@6XLq-#Lw$^2+4c@(Cx%ONL z2$R#2`oKjVf;8mKR~D^xH(rG*^KQBdWeVdQv@#BHvsI)$d){ajqHbP#$FO*A?Hc;X zFQzRp#dg@QX1Dh1ey0u-fi?E$pe${CoCf)vmNsbX(|6W{M-eSu(T?5!Gb_9K92{b$g|)Q+Ja>iZ9@yJ-c}9b zo*}}fl8Qy(l9NlY$StaFAbk2T$qa_Cxq1$(Rqn`4U%MXpdvP{H#`@Gk=qam0jqv$k zy(zKV;epE)Ha`xz^}^-Hp`R;EK9$=06CxjtJZD&@Mv6d3Wh|!Xk8sEyN%ze?Sua7c zo)-R|6T9nKIb}-pBNkDMDLt|bbbKTptH;&CT zr!0(1fl5ha6|*`U4yCeuN&u*zrBi`C!xU;U5fX0%YISl!Gss+t@?#;w=01_zi8sob z5N*P42c*cr8gUt$M2zT>uOsT z*MEEBs!`S987;Y_w#2#X|8}w2trl0lZU3}&_rN##!<9m9&j+svoAhB9IoXpp?Av`} z?$~#~Mz-wtV@7YHZ-3=%ba(4b-RaIbn2NA5v&)Z=F1NO>2m2RpW4GZmxtt$q)<-v& zSKv~ut>lqwB)sOdNS_F8;WtDi?%Ot1!Z17)5c{GRO-dL5C=auIkW+xSsUTB-37TL^ z4WP*>-48Z7Ny&hdlk*@!C#)6w0G?db$)U`9QJ~24YI(cf$h-AKD~0r055L|7E>Q90 zZrSwx&5t+hpKoXpumaQm{qM+_c2C2qzWI+#FTL3968B#W3leE#^^vhMKiDv zV1K%~joEf`IB#(Lg}#;neb`_R3Y$E@52+>y`uVCQ1AlG-KJc%Qp?LscggllmU;qN+ z-7rls5M%H306`CxdNn9oc&K-|N)-cSt=_h|UbK`frBXXkT9e8%{oaOUp=>9N8J%2= z9FVyd*y$A(RRB-7wj}fpVLu!2$xd2D0F<3pHXxKl*(AYGTi+xFx+RL+P`q3x-NM9} zkZf&eRSS6ax1qO=ce*NFvpI066_f;)T2-8WRaB-`UJ?`xdS5}oa6rVNV4eC4H~Uy; zw<5#8_?%MiFHKpx$?)(0=4v%kZqSR8jMb>0S<-qkq+j|Mk21?6o}PqaB7a3EM#)foT`^L*+`K5;v5OI1ZV` z=7b6et||MV4Bk%F1!WU?k33L#(YL&|bhwje1bp zNMwqnJ(*pmdSsq;65gD1ofb)$a&0;><3#eXoEcGD8kp~!o=MAoYG>gq=_AOn*-Ry! z!m%RpMXaK86jYYs)PsG_>>6bwth!^AjZ$W}Xqc|gUQw%+F(!#_Ht$hkI~YjsPW7%qQeuD4+o9g=oG6^WguAt{vOg?7LQ zTW=ZctbD2naIqx<_s&$0KfuAp;a}UId(Aw`BpoL=%gDpQ%`!4@Zuw_LC!ZcJR3D!? zz$8g++E#RVI=erBzLja;K0bT)=Ir&Ww*6;MU%UZ>;COL$^>%UbqZmF938wVZtHt~6 zfNs7MznHExGoI{$UxS#exln_U#K~~AzUZ#1tU*fRDMi=I?RN2gdAz=?(nG0!{O=Z@ zmYcJ7wO)Ok0y)on?$jV95eL8he!JX=^OM9<`hXTfU8d$^~nx2 z);(@rPd2JUfoEN_xH0(+(kMPOkR?fe_~5XNrO5Tjhv!06BBlD~gVlK)^zrIrUiv|H zym@nRwYYiz=1m{R3Euzt#rMbJwa6ikFW<-aryV+b3cp1nFfe*F6MWIp@lYXQi0{1c+PU0U0pm&=y-VuiT;&8!{8v)zZ~ zY<<)IzxYusSE`!X?Yirz&IZ`d-fh;`UDBU^{I$U7x3`OnWvixbcgw})Z+_YGg*x8I zvbUe3R9Pd$=TF#Jc48&q?537Z7gs0CPp{k z(pCFt2tt(r1g`J{sbcnD`X4F}RL*2h@Jgl9s*p?rx&0r+=m9=%8!V}{J(sjWH;BzU zGnw*aZqr5KbYd|yT^|&a4{y)dJ@SDb2)X4W9Y^1O`~7Zpwf%1Kc6r6O>((d}bB!4Z z2+lAg{eii^Y}zMqafm^ZeRxy%enK~f4D>VxZCv+-SiErG<+@a?g0YcIDEe!(FprA_ zD;zpS+D`Hjh#;H=Tu8+<1El2ftsJ)u^KxoPrOm)8VUrkb!$b~99|Dy_YC)>b%1-Y= zT;zdH5oVOatb=GkTMT7DA{fZ1f;KSF#egV8shA{&fP)6;DR7g$m}3w@`?;4Rv`8NK zF>yfDt5ewY8^R%Mpl9sNpKs#;kW%>&D!qpTtm$q?TgR>idbPqG9BjN9;Y2o?F)C7W z>=H?je%5+h`K24oh>XFb5C-EgGZA%h4o>5QU!20dIE<5$3dkS_za1VjgEeA*G08Yd zz90v^1;xBg!@KuNXGpz3!+oNAQhJiUS=?M+CEah~K2h;voH))IULSIWc)BA&swvu4l_oh>?<=RKol81L-n*J>n1YT8*&4sDVMcm8GC< z2=BR2Np8aG;gsBzav_%_x<-I7CCO|^W>l^YDV;N3P!x3hQ(JoBx5pbXNQ%jUBb}pM zh#^-sv(*0O=gTqJF2`UTt|J}aqqLnPXIM<^o(z80vVyWO^ez>C5?LsqER3{^;;3Mm znHf5H8dyX>R>#twQ;=dfD5`+F4%4G3FWOCsaIZLHV|nv_xlvJjBA}4@h>BoEUIf^e zfeHls@*g4|9B9j)BKHU#72Me8&uMS=15fc84&9UJ7qT98D$TP?b$bO5Rf#7DSWkPBtMpb zP*jxZSjmqqd-lwXq5eQnllSHU>Qb#Y;SA3|fjHa~2^WU&gbQE|LR?FJplEF@#*mQY zJ&k3LH)6zGr03?zN5djLAC6-2EYfplk$&h~r04D;?Up(Ri}XX^B0ZO8crTQdHrI+= zI0V%l7!P4BV9B;p8y8Dq%ec2vW6+_s!ZqDa@6-#{c5jtxc%ik)r5~hXy)-Ml{CUDn zc$9^#s1q8gjOs;s3<_Dfm}DqQfZ>yiNb%Du%O;&(MF+XYJ<*EN9hNjVgFbB09`7I{ zhv+G@i0bWmZm&5?7j)O2Xk)A_ZENg8M(Z9=$E0)#=#2Vw|HWRg2gt=Suj4JSva}7c z3mHigoEhpvGPY#`285mi=|%6s>|x1Y%f^JvFnBSJp8wA@{<-5OMQwb9^}=jsjJ_@Z z^=T~A@7U2@hxzAXQH0IIRvxi$%r0iEDQM}^$#c-e*9emkW)QQ`C}987(B#KB^Y9{( zhsgLzvZWrOebLQD%$SdKeF&DC}!&7=xCIR>eS8W}wVJ8}t){;W*Xr&}5k@u!1Y>}=N;6G4^pGRuoM2_!3 zCvcnrCaUk^_7?tb0PGqq-@{e{BFub$b`)Yf z|2U;K?x;9sz0cvD&9wx6ePLzXFOO_&NAbvdpF8Fu<}(a^@G`Sp#}FP4-myO9(rp;X z1L5#((as%{Xz(tVUL}18Qss-BGl=+h&9F-58i!AttNq*+jz_p~v^K;LBw^?zBga2- zgo!C|y3*i@u!Rs#mo0HZv^ZGr5he}>h8xKGku$wjIv2P)LZ>TAl7$=|xpUFn{$$hu zUn!yoM8w$YWSd5TElV}Vb-feBjc03r&)Y^Ja+XEl7#p8@LI~%KQ$56Z!JIo8jDlG= zBk)r^yf80SXWJ6sQp^$6&q^@@oikDFV(B~-L&;^af+xa#sHw*8JfG-@Zqf_MoZ`#s z@frkc9?r?4r=3ve%b!}^X!l77ohPdui1@uW6MT_Us^A44KzyweY`;ht0)C*a9k<|B zUuJPIWzMzV7M-=O{SH(^*io5y?ROwI<8I29+>tj^PUhC{09`2oW?eo#XSK=v^0v%^Ut2s6<*kLC&Zm+W5#2yqCu@p>uu+W>>i>e)ZGhQ8S_toc{*bn(8_A2XP+P&<# zOPwuEnCo-aGboiZ?wt28PRL_RHvU`at@>);NpDq`c|(10w5E+Z@#KymkT+>Gh$rB`%s{HFtAv6`zG`}5!9nF=Wvg!Jx=~|ZWVJb> z_`}w@NgN|&ottL8EvK*?H6E+wd~pj!>z*AHp4quFxY*dkw<@68|}J%|nS zLT49A@g}Di8T1O1s7yB#L6PNNT8o!;BAwv4N{Dl^hhx?Sl&=@>tKC1T%Z^+>sS`dR z2Fcj@4)L&Yqz#j}ds0(0#j7XByLmEN({AxzolQO~3gi%*z=PqQZB6GQO>s@p1?#r$ zeU>AP<26n4E=}2|jqY6Io9Kl`cL#_#Y5CSj?&aRP2`8Ta8^fKO#taWg)q)#0VHNQU zH=Qck&+pZ1w!riRj5q7n+6Z%E;xGJwff%1flzUa8b;$u;y*4#F;uYl_)Bz6OXe%OA zQh2DV8wqF18{~9W-L-Q=-qY4leWB>YkBj~mN(tE;iQmXb*sht-F)`iJa)7l zw=yOFaih*G4c=;-E2|1Fwe^w4Al=Fx>`@svN!L2U*vUE7aT;HOxtXNEPT)RUye)@u zovls#YbDzTvbB(lQY@2-{R%QuO*(ryEA{X}y(3X6lJ-<~nW|BF)(LoX;&tjKVcxar z#IzI1YnUk)6>Eyj(IZV}k_eX;DKXk&AaSd~F0=b%`kiWlMo#i4s7#+Pq!E`E9cj8F!LT5xP zS4}ny1T}=BSMGY%{HTM`3|e7xF@o_w)eC(Gm8(y$e##<;^>g^z{Z!<3Du$$1jvQkw zQ!n(*?l^<9eix#4R#(2(7XtgveD^#Dd8;oas~SsI!=k|VOzUk{RuVg<9%p3bze`y6 zH1R57b7&C#b{FgGc0u26pD(Z1n@_Kn?^o-a7e8=#?eLNvpB00eA}+VPk%-VU(RmbOmzNx_s!Sp-mk1fmMD!y^ zkEC`0JzwrVtS`GrhZjEpB8E@BBQoMc(PODG#+CLm>5guUP6wA?8qIH!&D;Jqx}E_dgHSfH&~P>jU+t5b{fM|IW$Of%G&lR<*f8UrO>yfHep7~DE*rN$f^ zqBGo}ZUM7pE#VpuBZoN7)GVS_H(AR9p>6I;Lg=rh(>|w|3N2JaAGUK?&3sMGQvp(V zFk~~>pbHD4(doNm!s3||TlUmMfku5@Sc)t2lf;iH^V3+0C(|j~Gn#BJBB>igO7lut zKT5`^SgHpz56S{GQfza?H9Ankq9W=XQA1NPXOdPsF~k|@coKHjZzPxtRi{1;c%zPH zwiau7FthmrSlB#@}SNMn3H}N-yLus6!Ol&fVT!=b38FIur z1zU2mb(6s@j2T->m;{_a6Qx=Td_wBaQV42HV)?AtT z^1+vTz7RM2Z()Wyk?47xZa95m*FwPq@ii$mMq5SM!j zxF8Isq~d{Fu-+xjw=%E=sg{Jb_{d0xTHJzSNK0V{lmRUfa#_2K5oU>Z*R)XeXR>(mkES?5U z1!Td<^Qq_Eh;D_v`0owF<*D-VO#BX&oW1S-BNcV?nFjphtzx126sICpDw=R zC%9V@!s~^Uf^qu0gf0DjhH>ccR~auJWv)T-CiE%WHpncsfu_)utco?E6=&ffc;B!i zPL&BB0e7n00(SI?O7GzVP`#Xsp;WzS7zw57WT;X&$Hb?CNA(?Q&*O`W<#sD8kdN4#*}d*7VyOpf&*gSEN_)h%(ERpLWM2PR zAxx$47wqoF>U<-WZd_ycopJ0ID9vQOc{mp+&EgytXtRg7`8xwPbLPyC$whwc6ylmZ zXrU0yYDW%6kcs+~v^D{e3Xzb`pCWuI!nX;*NDk8`f)-(Por4*lzf6!$%o@`7XJ+Z_ z+zryw#Cv2u6yTOLqn-XWWRM4d=>k|=a{@$YO81zemvjag>>eXKcY_kU$66j}=b6Fo zF$-XY`EUWqhvr%3#}Oo()n!X9u7(48bhb3OFR1t(KB{LbE5qSW`khV(R~mgv6zE3mU?*d-9nOt% zinkUreZZ74N=SfWQHL2Et$`c%j~V6`M^+qR7JSTrw&-oz5tTPyLKO4JqQMv@Sv1(% z5f`j!_KpX=bi1&xxKCt${q~zzNRBw7*Ej~lBP2;rAA$bjosKV`G*?`;zYYBndLu$coos|`G z3`#aW?$Qd56N&iQF=J>`vcwb#6sU2GFF-YwxR>PL8$6Pn(=nFe%?EU zRhcJ&2BCT#X=We|!V2SW&;$=LL1|Te-;Sx2cq%Wp>uSz~foB(X!AD3Hk0c9a4Bp7k+a~Vewh3ZZxZv~Wblkwn2|~+AMjoH^uC>X;2e$QlPkdjE zEh&LSV5f>Nm9c>(kcd#!pqP4742oZfXj=sdQAJMMpU~s2)$aAGo_?17J8@8ET3-Hp zzKN$#3Cy%Um41N{0BoW@xqhKr=IZG~`ll-CSmFgK^SZSea zH9bH^aX(N}vJ=#LM=B}m*@PvPZ<0eMw`ZrEM-0I2a!8VX&zvtZCwi3qZ7buJHy5A8 z8DixzM`n4>ne_1EgJ7hQnf7pkj2yc6bdWrx!iPTTRDA@WIZ@4zzz3h`^G}fu^0|iN z80=I_uG`fEyk`rk_4U?xKW@AGa|fRzt!Hfa6Sor4`dj4vHYdg-qunbf26N8e;T@`f3D3TRht-0{A-esIk^q3K74dxYO>~(J8ieY)geO|XFa$C2h!V= z)bk;j$0w=huB3h#kkoUj#P+jQExqmhv_{o$wyS?F=MRVQGDM2Ic`g^b#T@4FNo+3_ z=x{=5!34T5zeATtsC&u6MiWXEBJ(}D4Vu(?pwKMSor;P?eI1M;aILFq@)wPy8)^I` zq%SiD;+B5DOmO*`P(+`@w21`sVRW6?B8Rr{x`HVlHDVQU<0T@7F#l8e3Va>!V;#b<;PbyY6ukyDF_chrJL9F}f1vvaiq@6ByOn)1g5e@gdA! zB%hePSaD;`U5q8{Q#WYBqZWM0h|00;9)-H7o3#Psj&IURV{DdmxgchCao!Hv*Pb&mB!$N>Ax+eX-i_d-$wvduB&_CRt8ZYVjzCRqDbQvPnjyT0np|ooiUV{H=R!z^cRe2dEv;>l+v-qsNR*3D14WC^J4%5Jp3q92ep!skk)G~3K9ba`rODD zMTo5`N|NjmfgMKWHEZA%l*o5gHEw810??1%*iSzdzR!vXR9}`fc;*K2M$Lj@YK)_r zA)@lZB1O9=9%Cd@9t^?KMjbrBR|AMQMC~5R0QU zQXf<#rA_(1Vkr$e=CgNK>%}n1F4gB_!OO+X?&;#9T_`dRf$|i4wYa{`k3#endw$g} zX^PaGVll6#`!K|@Vcc!}Y{&8n7B&t`k(7WdjfYnW5ntA@vESrHeOZONGn^XvWfg?R zeqjZp*OoeI?ZAbCmZya-1jxwYm7xu0gfE0SIIRE%n|0F(VL&K5!3BVl&R+RI3R=Lj z_Q4Biq1Bou1eM#OUVNoAMC35&?~15JHjtMN@rEo-XadLw8v=`CJ=Ve}DOeGAvj!5# zZ1KGqbuT8N0`gu=Q!)A;rC^fyI}W(Z8A$qB`({j!0JU{BTqCQAiQ-y8GAbHUF75>` ziZ6@T-&`Nxm z6PlQaK%sdL5RdY;W54JWN>w1V8_OkR;3fX)&Fm-z9kQQPGFpCrw`|oh{o(D^@`uIM z-SX*rbG`68Q*%jq(vG>WzSONh{n!eQ+>1DeCn$k!(2NZ$Gr8ILyA;XWwYzcnkc@hH zhGY192_ohj{}K5^M1W=xGxJmxK+r-}hmZb_6oJER49v{|-3TNybw@EEN9&L&!gD?* zPYtZ|&?(D>aFLmkbID4;m&~jXVzLUY#uo^k=Dol!s z?CaHy{wM(=^=a|Z{uF@}jKUhbY;Z&uEV;2ON&;uBM!D~DK^UuGtT*YQNmgMVXay_W zAD(2Uc9D|;E~KI*0aEh#R*s5Hsr{Ll}$#%8Y-EXgHJS zxEvu64KoO$jRN?sdUS9yTk>WdM03;PFoVU;Kt>hIoPjO|3p`52Xjb>QQ7wj4u$Je# zrYgQJWSFO+1!h_%sU?!-b~@vwG(;^qC{x;aua>T6(ZRrFqx=dgH%Kp-*0Nmwoq8K$sygpfn;tc2J{xN`Kq*w{vgc zmE7We&xmGV2;I2!4JF@~EJM>fUcJ&G$;0m}9y36L)y2H}p3Ih2%E7oK+mu39F{|_K zR3ghKWvzNysy+65^VNrFlkXCjf;jOqX-mG!RH*^Mn^(aav!ULtx{(*EZlbrS7Es-< zGd{BAqNRj$oaR2I&}{lF%wRxR4sb#Oo|-6@uaDiO@Blwa{7?Zujis;wouY$q*=IWI zq43Pf+exmpj8b-tdFyqM z`@13$4eO8Cd9rH9%guZ4?KYuGyzm&7m4{TKdTgjjh7Ok~1lp;vfSAq*=}H5JK1 zi}2uC<;=}Owc;c)bw@eEMe2}A;#?jkPiB8goX&$nzWmMT769)a63-eDZ$+1|Z9|`- z5}p*Ado@rcw7wLO1n&kegsBdB_0Xm|^l~9jRO$`_e=6ECl8-_;@?&gRsTV`_;iRAz zkP9jiREzr#Ey-o1|2A}HB7DTaN28&Y_H|HjB;3k%X1M>!1C(YnGNy#93^U#x5+Qa( z0U#d_OJJb0yX^=2(>IHo%d24zMKy3JSTzkY3Ko$CBn3-6cz7w+x+#H9L0ZFlzdWP7 z7=OYa(y1q<*ihesW@rf!0h0OiSelcI4>OAOch-z8$Cn~xkx?fKnORs=xL~yfHI7p; zc5^v;6=@U+)8ZHy%t%+-AecV>73-#HqhbW=`S2}%qeLV3*6-f68g{MH)xJ8yF(o+GB2bu~#AYBhyuU0xKBw;o z>@5SXB0Cu!hy}PvUu+!r0M(@78ePUgFR%amjd!OQ$N;yC zMeHis^hWbQTbDyK8rUN1dtYN?(wJ_Eg8o8Y7TKY2C}2aDcwi<{T*&;ii>F$jI-ke* z%w$TI?dc&VlZ{N4r=PQvG&~^>+qFZ=otRh}remCwGHJ_8m5ITOv#1`Vn~!cS{(z{6 z(>^3_sn;1R(cep_U<)vTOKgSAdSqm-WS%;cu7-80D@n1s0OPrA(^5j}S*E3waoMFo zI`-{Smf|U5ZE68RNhl{L}4OHI>JuUlmSjD8jSpJk&C|D=@ z@A?Hyp=2;fqdP3oX3b@r(Jm$zv1_Yzf5*&F)Fz?kbC<$Y(?i?4cQ@h|3eDS-#cq)h z8!wYTVlpkif6+=a+p;9;6_S)WG7Q}Q`qk|ATo9yScwbIZf@^(k9WJp#fR(VO>a|WaRDoc#04y) z-~w78Cl|n2zRYhoEFfWoUk>dw3gB;F`$kZk-#$Ee&s!`&3S%GTlFdwApWf?Ehu3PTWF}Jwr}wSXt(6-37}ubR z^s-nR(Tw8E8MMGkD4^nkg#qT`eX6(=C~N45`9oT@#0p#8wN*-OAm#fPuTEPP_u295 z)0191J?}EmbW7(^TH~W=A^3XN7lLVEWhG+TOj(IgZzwDYtk5YXQP$3~^4zt9g+4~o zU{Mt5ggmHxfjFR=)~UlD2a~BoJeWH=oP)W&LpPkuH%tR(V@HQ%FmGh|QR>aC(im1h z<_{rv9rDQBc2PAL7EH)Ib<5WY9*8v$l0Xw-2%8Jyhb{qD5Qh`m8Pig5BiTJ8EQ9JC_FL|&4syP;$c|$FYQDge<3%8a2Z>3hA&Cb9O z&b9cgDk63tR%L?qXJ+@?fCWstC!?(vrD~EETheiS=8PW8q|&0G{!R(+ z@|C+`BC;M%Y~Mu2DSJ>-_n*xUOWY|@$SFM-g@vqDt8i$g4m*gD)E=WW zj|*AGC{9Wq-cSIq*HZZvCh);Is0g(KJO^Q=JAGWT}C z+S>tR&k>4!5~Mp4jk`>)7-aJpb;!at15ciFGe^PAJvoDwMZVtOru7QelL5p(Os**8BA~NJ^<+k9yJEP z@{DyjGkjl)4R>Sud4*k;1KKV=X3#s;`JKK&z$w5C#U! zAO?t0KrQNl#4OTv3GEwFi^l1!;c3sS!5GJy=$4PYcxQ|T`a<}~<@am`#?!DM24U}{ z)ln{1vuv2$U5sjh<)EfiOc)L$PT-t}q`DwF4~?9FdYGa~24dMNJImG?dky!MVsC1fxsEE5761tWPE5Y4*8$KX}er{!tL2`rOpWdEiAA-@djTmMb{6kp9@ zIk#6zS&i{h5dt(2namg)8Lp1(&M~-GBZ|#Mw> zFUZ!*R6zyGGo*+!oX_maXfU7K^BMlCXE#@^v{47tT&*vDv^-dSfqZVPP=!IqRw!eN zt1DE_p*p`JZJK~PEJWeloYn2rcT>yzowo(9A@{)mA>UK#p9!|Ai8VUU(-LMnJ#Dc! zCQL}m49)h~gh`0`a0nz(w-iQ;3xLynosPZ5A zo}HKVgKJHIEG(7A0mVqGbqP$Cpbi{9a28o-2GA_r?HPC%BbN;}RNlvlJY_bpC?RpH zCrU#K4i!@_>L5rVK9De_7$fDCUtIz8oZ(IecCvEjHOiEZ_pkAA<~*(jmf-p=*}6w-cLoqoI6YWVkrxDb1Dd-Y$euzzKZ@4mGh8eG{C$^c0 zKVsRQ4<1ywNFZc^z(K;wMMycs8Jh?w`5Ymu)m7rA)q{sIM@kZY>j)##gSbx8B8knsm+rTMFkoD%N(%<|sKIt)IUPDy*F^m{ zNLMBX1-B(g7uBofyX9tibFuv4@pnI*vIhhEDhfGR&r8~JJj`c={3?=J6$GqE zHzO=argD<_peGucF5>nUz>J8)L6IB>nhPrm1sEMg1G!IN9a!ZM1WtaExrQ~RPYF6a z9c|;_v%!dZup1V)oM*g?oQWo)Q!f>93u;1HP@C#+j2>oC4CNmM9rH3i9VY8JB@1MZ zI5x@-A!0_t1SHJJHwo0pplD7Vb`DTe0Mf)}jGX3|#)~)A@90qvkt3SC;;><#4E(UT zTyD;Hi}&)_kL~cM?1zFXLr}crpOA~U&#tfUc8j-Him6-DwM0HJ%LK<>cb6C0{hWS{ zkw~j~(-?dLp~Fs78nk&?u$wij{NGApHmjnLxXFdptSTaK8dhc9aN;}(mh-658=qrD znU?cd^COoQN1Eh3U}ojgkrVVKC#MedTDjBqp)Gvo0H*N>pSdG^u$18#W|tHY%8ZDo zxgnk&2E-Fuc9jTxol|ruQMaXI+qP}nwr$(Cos*o{II(TpwryLTzi;;#-4FLZ)TsSl zRlC;ObIosBIKzD~UIIy`MC*b}7$^ABXt-(s$)OfDV{+5YYKojhvPMewucV(rA~Y^u zRS}6<>}=O~Qd^C1B6wj^*>&1-x#G7~)T>#~VGAWVN30RxNKf%?Q!Vi5P>`;;?KgZU^r}hk;Y)9HcUDhyu1Y-Q7x^yw{TL-0* zOD$P!XIuENN)nI8ZIe}-a`x?b^_3nAc~vB+C}%s;;8`>p9FK9pk?B;>JJ5tqhFEeY z``F=axPpAiEpH5J(!lb;;;kQn^vV;(^nj;}xOU zrk#)w?o8s5EY(8!$C+16d^H`G=1dRP1TH16G31;={FL}5sn)IY@<(+ta9CSBgM|@1 zL)3r_i*_iy@eDIw@1JdJfGy%bs?RA;1eaw`wCghzO~SQ=q1YjZUE&~FdmFiA@35>r zA-VB$cBfGZ1Zo;R((nKja%8#L2tM*muQda{P2k)NEHF>#@M6@S6sHX6EHFLraK&^_ z8R(*EIgK4f!+79=odOG^x>m-ZkOz5DKXP%K-y&;f;3||d>|{jJ&q&5-!&Uehx%Y8B zQh7>vmqk=~-29)$-mD>nuQ`f?2`U3!H{SVi4&{fgqmpS zFW9D?x-JktH*p;rhJMoNUEX^}RVnBpvIQRCN-AurTkiX`Xk~#mFbOmrTT5~6*1wFH272rCA#OEHc(;2n5j)tn2;_K#1kaWw1PNx5)(k8h5!3V}8+;I@D|_b!F2v2H zEQO^V#BLCUGrx!q+@@VvsdeB)cEY95YV<~csE!HmO@ub9nQJYHcQv;MQev|W_(%ty zQ1Sx9+`-t81V$hR7v%Va(jz>iyy?mQo$r2VEPU@w_O;X|x38}ib z@@fRJeK7}52BnGX_0^q{ z+)YgZr{c5&7dTecc!-iX5=3fxkqego&eW zw3fEm2eZMczo$oLS&zzj=!20s_YLTDlR%HQL|7p-j{vVJ1;hEZ0OKQ?qB5hvHwPpM zCCZqG@#=CwKfr?|IG=bF)L{!L?vj{B*yI@<$e4;cN;k6DGf%hr#2pKLE?-4C8cy^C zCCbysrw9mvUSk-BX5m+VoKnK@Otiy(1^qsvfXa9MHJ^ACb6D z6*9LF3_3?>wZhISUgVJToQA_n_nrfBBisPpsehY~Imu2@7m=d&=!4*#UIo%Ru-3s{ zM_;b*?zV&uvT*3b1?Y~4dR>C4S!d}_R9=B9G)!i=5cLWrl!!p^Mb0Dvn<~GnVmJ-6 z3JT@<_)hi}PTX5sE~cu-8E@+^Ic7Qnx``zW zjeM5E;x*G&KC7?_sp@Kq&CZHm{v(6dB*sXlary1v0L$S9lwj!Oh&7`J###PpT13|y zNh74jhTDIhZ7aSRxF2OWcy2OfD6d#aFK~&*u|U(J1rU_v`3R6NvXq;6pSqzK2$*~n z$-G^$*AS7CuIuyDuu(fo6#A`!D)89J{)vwACWBlGgJBbT24Rj%ATt~y| zOHg!7(NroaQaq8YbCD?`H%L~Jr0z~m8ry`q!4;;93Y3*g#AXOK#dz$W7Um ziIc6Ck%@aX7G+vm|CY$K`dQHxugEajfSp?1i zkal1^8)cEmIX#fJyfjhU>llhEib(8~pF8PPx+L%X15+|4LBuAzVt}cI3u$?96EUe1 zi}(IH-23kuNDC*~=$%w4M`(~pZ7K@|CgLM6Yd+O_cL^IK(L*|I8kt_MTMUVYj#&Jo zQa_5~{7B!EvdRKbBfl;%pASAjvk8}=?m2Y(%iNNd3G1qcq&wBEdsJVOBG8~muYw}n zP_MhukkSi7fmL#wC1M0|43La-`Ti!s@BH^Y!Trt!1mU50TvAcc2aFstdx|Yi4J7Au z?4O=Zdnf#Y{Rr92%9FvUSuB#Vr~N{5anO}WwEVOeA>Lv=82_XU1LwCclzaq!sT3){ zC!!%?2*@p{M?;)#IVPKgN<}FtVa*F+iuYQi1~KFD|Rc)-D?F^4bB$1dbBmEM-ZS@a(XHxW@j$IC-bjs zp-D>jP5XyFbI*rPN%Hun`VTg=GrpKPOgRbXHYNM#PL@lUeRz);wlQ~5M0!(*ORd5% z(Q&Rq#@VeJ4dB=%;;!ROJZ3gmICRS`t(aOl-4iI;TYWR45y)D)A|Pgjk`|(bi=+CC zsD%Aew;|+c4Xn@)kw~Kph({W5#q?yDN)gT)AjYr-pkh0Kp289NSW3}>c@0b=YoViI z1=B@aC_zPFy)?emF+$~RL&<{{2qt16McCh?Xde<5Q5ux{E!KHZ!cxS=AoUYSF^ZG?pmYTN)&TPwu9OhuteuxTfIEv*ncJ;@vhCjkHzDj?ypzz;}Q+Ek;e5Dmir)1og~yJ zMgJVUpEN2Mm*$Ld@P3I6J+5KRCd_(Vi2!)@|9sZ@KhN8qgycQ1bLiXIW>J-(QALKr zA5bDz)7?l1ua(WZ5NRy^$aU)Ws@g5od(R%wuu$N_{6SQ5F%bWe&k!iR)h+5(Mpdum~J3|-vb*&ls=;qNT^^f#{)+kvN2jU*bk{=Jv9s>g|T|z6E zDLg(VyC_2d*6Sk5hT6s0y0`yXs<+0fB(8E<$ZQ3+?>m}06J4icr*a%ugf)f^6KRthc?+)fRj+bge5!Jg_YijIk=Z1k0(jYDY1% z+avwBoC{dcYVrRt*G0}sJZ-}o&awh(kUa@&D6Tt>J86vX7RUCX0dBtpTs8n+l&y(s z0Y|uXgCK{v4LJPZyp^8ywZ!1X>%N$MsEB*#D@899mnil4Cq9MBa=~~bHM7Q+T_}k%eT28tFZwgKAR?tmnDL%`wCS2 z`+r-V*xAg$)esItZSs!woHs<{E;=mU8LB zs#bm!YT4{Kc8cO0f}-L($J2mf|EKuG;^c4{j@K4du`ByTx)c;)p!6N1Tmt}A+vZP2 z#tOUwkn3^yvVhqNr0PDIb7dZ>UHe4{eP~(Mp_tm*@}6Kkbp!Iz22VFqb^=vaHP29H z38rB4+{#-c(xxaAy?@dDc}HqE)RgXIwkUSc>*s4$WPAQ87EtaQgl2efEZ#zxfjCc~ zt)7CF)|@S;cL6EH{4WoSBhj|n(k#53lak1MOLMr{`7rxU7s&*R*cb0Wmtz!;;(ip- z_daPqwc<+(D;r)7t^w+TR*V4RBFXt5g&nS83CQykIZ&?c0|VLY;vhRQWUF=849wFoXr`kjy?T!>CFN|2IKSS8&aMw8fJ z`P(8#NgugD0XTCA2|THg+6hGXm{wihoW|O(5I!-Inwt4LBOF{5kFKt6kB-itL*o{` z(9>lGof5lzC^8}D%o7nZAqLG+%E_hNUV^8qzE-$&wX`e zRKcgXulQbn_;nGti^zDVut+jXx>FSJ~r2Xj8_exMqG9HCNq9Ti=F3A`iB2||sNQGF}fV_XC;YcxA zDGwzgNs`jga4)Pl?`@@2M}d-aVUXMvnvXCRBa%0W-ijzJA0g{iK*~~P_)j9f1)RiQ z8!-%T8Yktjo*dYE*Dv`MkSfZ2$eh>6aO!bBPM7QGO41at~`!M>B~-&20>9@q+=2 zJG=%i^T}+__1r4Bna+h0RSS$x<+!s16H130*OA?#= zncsUPcfZ-DWuHl1x%dzL(to>(ZL5z^Ta9E(9TKYG14;STS$|tNcpCU>mDuXKkgBsI ze+HCz)2!uP{ccM(($7Kd5~Hz@5&Li0<2xqycTVihJ9W%dk%`KR{$KdnSQXhmr!G+f z20D1>Bt#voNSQ6gu#G?5CQb>q0b@yPToQT6IoS$CR*+Rd>G3g>s0j_LdB=k=9}jRKTn#3B&e2kvg2u!wQ6?Ost&|4Pa1VTG%24LNrXkAi`y;4hD-(bW^vI&}QU{RC%!#|zos$!q5QJi0ry=-nJKJvJCWZ5p)f)jF;ZL;grbI<4?3m#d}a zZ6(6aH>p{9b`o8}0#IsRS|Nb_3zVL|6wo&pmb^Y3Ak|@VI7GP|h`x=Y!a>oXv%VeS zIf3_;a>E@R!A$Lgx-$!f*E%B!;^R8XU2cV4RSxYT902G7($+NemAhE`zQZ#-*1g4hOTW~-4$28HYLcguXfTlvHJ{pZQ&?S6 z2y`(Yb!a7SjVL?t*)510SQ5xH{euUljZe?j53ZZjAb&-OcTrgM+1gk4%mqUWpdMRu z34d2Mz-gCIYvud84eu{dSz-GWnf0OpL9^&Cz~(C#Lolv+P2xLhA?eVU{FK%=U!H@0 z0)fI*dkOJx^#I3CC>nc67P>QwsI;XNNBMn9ANku735i zeQvGt?bp_=*X(@yIk4~4hS_#>b+}1avo6`LwF3fKs`%F2@#kKZnowkEKg?U6l9j5b zQ(Gt7p058(x8lCy>0@bVV#A#>bwzY$bg?(D zZ0LAuO9%Xj`c-YTL$}tEyjrwvOaN8AudC~mk8hjLoZQ3Hl9dkRN=v6|1)cAN=Fqsm zo-SRF^~!_9(%<7ZqX)mW?1JX-6#8mAej2?R{cR3s>yUA7!iNE?w}&gQ15}14svGo_ zse{ZVx2}y!`>uD9Y|^Jfg{NO#y~PMxv!gbrn{Sw<%#q69=llJ2%ALH1257kKbBuBP z4eM_WJze#+NOo0M!<)-;HGKsw*R8cmbsQ@Xy2O`TOZ%#uN(jBvLHTFN(Z8e5HG%$i z)9-`KiII*cS80g6{PF&J%}#X1kU*;o)$S{n*e3)o&e%554pL<#^?{ilhDenu@LP z-vJBz&rC$>p9`}l?e?aXiqDVCrH*F2NJI$Zx5I_0f^4VkwQWpARPAloJJS`X&g*xZ z9pwqZ-1zPLgNmiAF{qZLL*+UrK)u}sUeAs7|pkbr73soO{FTOw=1It-Em}mF?R(g4{ zdX3ugo^|CT{pSm8ql$Qix0`3pH~inr-v6e;H)I@NzY0xT-LgjIO+I?c>h2keY7*!N zFZ`+^b6LuAX-V2Js~RXGt(2!eu=h!Ywe$tb=Eh-58ur?G-czPV;lLwOKx!g%fj|y7 zd;PJEB@SM!#08fG_M8QfTx~-y7R=e@^l=t(PQwl|TgnRt>xyf32S=c%kHJr&5I)#m z=$2=czxOm2uuPj0tg^$g)}Dci#-Lp=&#Ge+PSQ?BL$d@EUT2 z(zv%2Z3eY_ZPlTK7YhJo&ES*-#~#CL)kASeK@RlmHvydngKBS#F-1Mkiwhm9la-GL z&Ss#Wv0)hg-&v>OXho!uk-?|uZ3S6?P2e^upaLvrX}z@AY%v)K&)OR>fTD0;g3wVQ zDGc>QK#0&0$1SWHR?uC@xQilYr2o-beH^$Rzwkw11m_@AEM!mHDz zlg0_qTD7sZv+HLx#tnCCdD}koaxP48&&C`l>N#2Zp-xoLQ)A__?DpF`Z};DHIWO?t zo&FIgxRcoA%nUxAZNUIMb*?!W zy&{2__;}WwFk)>7@ z4i2q2<52!~88R#m|EAdDTarWpBQ$5VuML8!6xC8)`Iz-0CX%hMigvo1#WfqMA-b-c z^pVx6aZ*6%>#E_+F?FO-*?u$tK8R?U84KOHrE{*UX^N^?E?9%dL^VPS*X-LmJ2zbk zN0rYHJ7e=lvmo|uK)64zrVmbQm*i1haRcV*7g>_=Vc4U}(5nEabxCP=U)+sJFoU5m zZv&+_lIoe33%xjFGsZRo2x=VIIx;m?IYE~*5BrST+4R048up()n4$^KX**;;!wa}p z_5sY1H9AOaQEm$_d)Z4*R7g0%g}tXB2hu)VV^w2SZpV$;c?R^!V z|07t)%j^%LT0>7eV6-yc-Ij{V4m`TFfo+s{W}}WXrd5|)I9#^2w}t~(u}g*)o+Ezx zPC7VThW2-q>&V3^q_vB#m|sp!8{wMQh)?C-)?zW<(CO@@y5b%9x=cj#?s^Cj?zyep zzoeJ{wG_U<_aOvAARFC*I_iZ;TWBJc6~xh9LwZJ>9d1iN2H9PYQM14lO4tY;Xq09NGQm&wLRIrQ0nM?H*nt!}mg+#FFgcK` z%$4c@@tv8#VKRzwZUTblWd)+fjH8loQ>L>^4649|XBjE*wf&79r)5u|PS@3-(SYmO zbW#W-Tv9#JU=fNPWD&~3{%b#10Jc0tUB$mmB9sgij${1~Esk5L z$Y|e(G^WF&xNy8p>DV!*Lqf8&5j)&D!<@k)c@Up@Jb4^C&Dx?xQDurPh(TQoJGNEB z30shEOH4y$h;95-N9iFyUVO14OD{F6_IA>5tS1hPu{NPy^ zVN%Om{8ob*rYH(^ylOstWx8@Q{7t@U!}-~6fyRyMcGMEqx3%bmZ9_~Y8z!oU7PjA1 zB~$vQEpOENnLSt~Q&!~ST7^&F@rP;^m39r`LL(M0H}&gZ9iMJL(;L@2v1`}-CQTpk zZ&%;JEnEH=4O;`pxs74LyuxF&`1kFyD?@Q}Zf%~FRYwDHC5LVkS#}kwiK^?Lz}**A z$6Ak9OGK|Ica{C=r<9FS9l4s=BL&j&54xgG$HiOxkDLo9GP%sY)BpeCCoKJyzSl+G z^cL?kBFko1)*26OSKjQZ^M#Csy}>)F&AY!#GJ9)jJK15Qo;`6B@AB)~rtwMrWFzBz zhVk+fh8&Yk`MqOxJspFxX5;BZmie;cfm!xO^Woo|c7K1TDs~kSE?hGWs2F1N203Bd zI$Bb~(O4ZjV>|Ug=6XYBUnU>U`3*j0&Z`Iihos95zP9aJQKXi;=_(%)z+f-IyXQy}32AhINvl%qtB30O< z#N^e*x`J|C-L_ip3C1UBW1ZLNuHc+*RB4@wIBy|a>~{EFODE0Su=D+#Xi|OJ3B3)N;ct zBg^Ai$h$EAoh#5dr#L9JjUq33LTvlzkQr7#6-!@>a}b@&;jA912=Hm7!gaY4Ft#L3 zT)YWuIQfMAcbu5!Jr-Oo<@v8715!7bm2d2IqYyQC|#4DrQWog{ubv`=p&e z3zZ9S!Cd7zbzlhL_^SS_IyoMZOC?=~=c^3Cf%{&8A9%Er^ABOx2Rvj*K&eb4%@;1Y zX@s4Kb43jX;dX#v8G{EOyjwhONXaGM3LBdb857O~gS>yAY0k54((?g*-V?MOkHp0fDnw_BVvm=ZxniXdI9K=W^>s~KAJgpjp>l)vMr@+M3=TwmNhgw zs=3BQV7NvW(?4VQI*yfNI_t_6gc)kNjU$}crpcH2eVmV+;P&lHbBjtb2n`SLK9I0| zfXiORtVjtI^b;X8(IL-S==yI;6N_)K?*9kK5C`t!Ys!mAzc{nQ7am3S4I@VDh^;7f!xM@f<^_s ztRTEk`Sq+WNc0rFO?&?t^(<)HS`>1`IG}Tw&%(|+3cP;RtbPfO=#QwXRzU7O%4_$| zp|8Lej@YtVloEjyopT=vX){MSpaV}8$DfU@ikI9U&JWLq)-GG|Pq&sfYuEv|BPIXu zTjTg~9Qzbn!x_8ns-864)QPq5t!uZBC;#sgv$t;4s!aKwx4Qu|--hjPvo6n{T>dTH zuh!PLnX9XNqmSGww}#E@?}v8ZJ41Khr(Cg2`U&!V22{_cYrR$VieUC*`ac)Wt z|5g-iwVmO8d2f{h5j~03BB9)zxua{-_uJw1?{k~G$?x?Nbu24+wERqClBYVcM5b)T&RCttD^o;%lUi52P{Kv=49tp&Oe$zo%uUwD~k zvF6{w)+bkx>juthCGKV_!Lm#W-Q1v9K6)IkX$Q@Bu;xW{&b_SPi4gZ%g~h+w%TN9K z?nkvdCOY@gG~&}l@)Xb3MFcOU!18^!SUYY=ya|2rr$OHLm!Ee@H*z~!-LJ=Y(FY4j z>@)f~S>sPBmX=eV@0JId-yE3PSO3?n>E-FWq4gvb`)Pb1^;(i2{B0@EC>NENwX7HS&5-$UKQiqlSKKS>R0noLope033 zmIe5oS=CCpzvlqV(f(@i_FrC2r)6w<#L+adF^7dcPv4?6X{BTwYZP!vriJ$j2Z;vp zBOJ_M*4RTm>$Ytz};_5TIoXQ8=Q*pI& zo1u%*V8T+AoQS6CsS2A$i>9M|%Frd3mh@Sr??FgLiUl1ZK%1vb49H*TDo${0xYdOt zmc#c=vI5b@Hi0;0TESS`As;5E$jq>m zRymwuCGd-me9$EES~eLO9%f1syxu7${c4=JLMcrv2A&)15pkHbr((RkG(nd$jGF22 za?F~mG8mR7D;?T3L$9sJ*RpnV-Oe@#Mj#B|-zFK&q1v~QScaduP-k!+;vq%IVT`Ha z4Hgw(E-V}Q9^!6rv`WHW6U*&dlCyay1c6>W8*o_uW;06X8_bkUWL(?tXljR*WxEli zT0gzt!$Ui!MX_8|)iPPX;gmGeXlh&yHdJ9?ejg-(#O(7wNw~DWP@C<%QP;<^+e?X0 zJf)slmDedvf%53px4phEY*Zl4Ad>3R+qq{xO?|LmOdUB98#%@hOB3x9+fFtXO?@0F z&6tUN6wcnfEQ!$p1@4#ko^d+*`*H}DxhW8-eJ4#G5d*~Zm#L+M)HR5 zdG_(ydD;`JyYU~uHPwVyGf&s|Qnz#HnI>0q8o4DvH_e@_fB%hCri^>1190@mG zBowa`TD{G5EXhY#m~L1vOA+~TmdMss0uKl(d;#S>bGY*#@|m3Zan9fSaQrKIam2BF ztL)z8xJ^{w-VbkXjrc^QlTmGgF!Bn47BA|rR$k}R(8*UKN7xHBwE7_zEK7eY(j*x9 zdH9+3K2js(v?G^_v z$bBEpPBjtvo{BI2#vhrnLqifxwh2l{=M(}(KH=du4Z4d$@{J6Lrw|9kV5@zywqGMD zxI?7tw@a#J>Cpf{8po|cqwUkINh80>3g49G4P4mFBbSk=1%h~-zuXs0sVf$yrRsWI zoxFAbu4aRq{&go0A67*;($Zpt_cfQMsxLyGP622~n3ySE+m=>Kdi-|p)%EshMafox zPhVZVO-JX)qj`x|;_tn6m3THmxkG_m3ckgOEb$Xi`2;=Z8*lTG#!k z$LGU86}`he)qZs9qGg^~-nzOUHntn2$duY8G`n!_UqH%0?1b~1!Z9K-&|Q4Wg`i--ADa5pn@ zt;x;32pB(w%dyrr1>(qUI3WJPyCYfCW(rzDQiC^QIJa4CN35J}NhOv8*xcN^=hcHk zdY>4+KGZN^%J;!lL8Hx@=bw8;8`+Vvz-?*ZQ6XKD#kmxPbN8|(y5QKfR-W4XBVTk! z;PVK&?Ww{_OFOC{DIE78XFFb2wScg|1SHFlNwTq~KXF9ododrmO)1_iwMfmUFvqBh zmDjG)@fg%CRJ`S%*nTg2K?S1+KMIHPYtKtBH01c%@rll{f`+$O7jKA0zJK~u7}>vI z7t8PqNH06&PM3q{O&`UGE)q6t8wr?`YKeI-se5n!VMpE;$mkD}R=Ay>Zhr5t}Cp zAx(80$Kn!j)8_ahp-b_MHzwS-LoCW*bW6LpMEL4q{R}Z69szyR{X}QSd`MGySm-f3 za$pfH75@tnG^#IC#{@^tm#+rFF!OsRR6R}dUJUVe0-?sUW$bbE1};*~vLr~FpWQpn z`z1n&MIJauk)8aR+qW3v8%z_6z-Mi)>|?j5t43qL+37qJw&?xf?|J>!=tSdOHzbEk z{(mUW(n$z?{}aXe=<2^H&Q1@%6lV_e_f%iVE?uNN5EPQMrwey?c66ejnozt4>4noE z?GCvay=**wKVL7V+^_p4fF7>z$fkVV>HlDyn}G+RT;4J@xrenoJUF#?8h_~hP^=5e z&D=V!y(*M5n;U+&WY^Tk5`2GO;sOM_UysyUIjv{gFZ!8YyPG7oPo)iyPZrWQMB|$h z04eB5=(&^>{g0J2nzumrB0o9Y>vyS9%4!lOE-_xg1W|iq)Yji-4*xWn*z4%W%3B3u zhhEr15v`r`F}Ylmw9FXSDM`1#q==IpQh(bfmC#GavfGhQK8xb^2@|C`a>;A|#P}-6 zH%iuf%)$TTd0=H6I45u^Oc!-2RUO69_5L?_=YtXMRY$^N1i%(2Al45Fma8g}3$^AJ zr2u-cegL$Buel`7DRF5jH23mr(Y!w;WK~l&3V<%mU`zA_0CJQ)hI@=qm5!B&fTNEK zh_8#NLVjgLd%^)Ez-+`5L6Eo;goVi`a3l>z>t|BZ2_+TnVerLK${22u`?rQOXAnx2 z5A_6$ileJ=+^koKJ=+LI#@y%k3U5^lV9$>+S>AzbdweZ1@jSy(K(JTmUWzIPJGnV! zS%;KVg`!|o=RHu6I3bC9R-adxF}nrHohJv@W#`@5?b+g01MPhWTtm;Mf_xnbdqnVN zC=80TE?25y{CpMyn}`OckyV-9>Twqgq{;Ca^``B7(TXx=*UO*{8F{Z8kcd|-Q|t1g z->Ove5HA2?Iv~-C0|R|x?8}8DNB%33LMh%BQF>7 zRjvgV85En?5O0dp5X?h_r~xI2Kmgg={P!y2rr>d!=KU3=QLSFl8awWp0X}iIBf0p@l{d|7yOB5oQb3Gi1 zQ>+1MVPo9P1KYyjdDT53Mp`K+LI#n4S~J)0vkRou>fAsfM-YZ_=uC)7aGUgJ}G4Q2rpLQE8p%Xik%Neu-4?AbmtWyzusfZ(z9f2} zH%`$}|I+d@B4(Y9C2P)=*3zYEj4=y%VtH?4EG*=zM_V`9fEnFk+(L>K8B>g7Rt6%G zNtP2Yszjr&d#Fz2>4YVdkU2=L{ulmQ_*#}09#2pIOMXiE%@>LilQkj19a0jjzZyGD zei)Hf(+~~DTr|)*%^k3ei!^O4JRN!;_Vj6B%Gj0Cc3Oe;bon_mqB6h;~4dn${}3;!%K>JUF|UY9cz&fa+5y z>Ssbxo`q7(6UN<=<<_=KHl|pDcYu)`T^&w1nB51!Ie)=`G?-_K$2V%5ZRnUtX`>|6 znvuVP(YF_1^?VW`SJIzJTADI?IP2^nCa%b#0I=RcQ^LzLco7MHjFq#!YjDK0DOuvN zM4&S@;4(-vw4X@8QQ)8>y}!j)ut8|As~{|7<0^!&9WznDQ#&9mi71AFh|TR<05K=P zcC8%LDM2ShXA+5p%qO0o>%24!Iw>>PwL-Haw0cgSeRGpK6~ zKiOEUb#;Gr4qErf9>!&4iK0FbH`j@YR)(A$Ygktoc2cY-^(^~urMz9w@HDm~I#k*U z4tCkCf*m*}P9o?9BW%%KwgsEM|Xzc(A~Gx$GOQ)6du zcNOO5H5*H>Q*RCaS>KjvU#SyULuO031Ep{()BJ}-Ut+0#IunSl>Cit8Dm63JalOa^ z#<633*!`FpORZNT3(w+D+#-m5Ik&U7zLW#Ll~SJzr0_p=QSe3r8m@K9&vTrf|4os4(T&aj^WeHeS#?tIxUmP4A2qcSm1AG=u+L$MRX+Y(E+YEq8m}xId zpHyb?7FfAqLUHBUu#w1`AS=lYSlBd<8A{FJV-p8~6r}A3&6GxQI(ULis)Ogl9=Lbk z1AVayhTAApUTr%9Tm14aIRE&xf`_^0RT9E$Sk<=6h;&IJ%mlM)XZ z5$-oDvkS+kN~vP$FLL_*dN2sw&|Kxf6JTD)u>xNp2TpQ@9O%C#*Wn*amuQ`9DS3~P zuVXb@iG@2h;a%OFs^(eG@B>av_9>H9>yc=t95YnctPJmMbse}xz}fQ}x`##cpVka1 zTHT>?Luf7IBQWoWm?z!T4?Mek;g5wall?(>VE1#{VpjNWnc?d|4P=QE@Ktv{ZJk=z zhgb>%&%z2SP?|sdQPdLCWVkVV*)+OHujAbM?a8~c9^(Ov?@f%>W(^ldP0&-C@8#~H zh*&wlG4y6|^T&zRMje||TS`CF8VnRGyRn3GF(wI&b0z`AYW1II2)O7`7dLDZ%Xn-X ztSp*-Ays`nfn=v~3fT-Uqr}xYDM!TFdoJ?{7-vWw6_t%*J$YZQJHt9KbzeUSWsSLn z%gBGhvZY(y#O{~(Mz=9MY|#!!ohInU z*aj^&OZ|oLH9%qNET}Xi$eQ3OGEhUV!HR?QI`q>W?0VMA|9CwS)fAlp9~{qfHm)f+ zGqpjiY~>r2BBB0;2CG)(n9YBNZha8A!c4ryyzS(Ki$kzQ@9{u(yHBimh8yZA&lkUu z?R|WSKOU($3W-M+kRLP^9pCJr+&dUt5f|Q^=tNya@bWPgI~A`)b$Wwyh)Rx6<1GF) zSsYGh7vLPRl_KmaDTsXqZ zN8a@ekfo>othbi0>Sw=dZGJ0<2H$2=oWb9|dl`6p7fO_BkvF`+q#Al@#sMyK9T5YQ?XYm9S(KjG1 z4VJKjg~U$UT`Vm?7O<8a76bIvhQ**dZ)~qR$2+z+6TnLlZvwWBO)#-pZQa^y7)^#f z0Tgx^S2%ANmWj$*S$IL!9pITp;Jdn7ROgq>_YyfF?MO}u03ju{_gHr+0AxtE662py z^V7j7XnQ@w^P)djG$QlVF4P+-=w9Y>p2#w##9Ek-Qv`c`gv<(;BbZgnEt_DPZ$jU| zwhHSBR*|1F9MoK*WyMT_W*Dz|P#B@8ySsVFFN1kWA%#J5kC=kw2XlTzO8^2L%P^&> z>aLCOYr}=O=j643|F(rJK!3G0BNT@FWUdC*GS0qBfkpcMHUl>@Kx}T%*yZeaMppzp z(y)r?kcYwAn0*Dt#$MmX72JWejLbzP-i*WoG3$e}V&7o2_9)LzU$>lQS2;%FmZ>YQ ziI}`*DfcwZ-iQOo(AWXh`B&{e$CiS|d>?3i70;^HvKf8%VZSB;a7O!2?8wXWOki;< z@CUGdl5%lqGsn2hBv|YmrmJmrtH$+v5Rw{QjM**lwK2%o0kcNav#n|a4Bc&&@%lS5 zh2vm;K$Y>XGMulaOr)i6iZWx8RV+yo!%B|Ye{l{WM5u7%d>V|f_8H5L(FiVQ4*~2< zAp`v+2KD*avB9YFmB^^_lh)EtFMI50hDPbNOyPG*LusvQxiO56dWnx=j^dFKgK^^+M7$VUe^s0$r+!Am+Ni86lm)n;4;G;%ZKub$c6!9!OBT z;8NxeCj3SgpA3YtGT*cVRJG5OQr2PrRa_hbxu-<0@ygJ3)^%leW?LF#k zn=7}r!(os7_RH=qSC^eUJ-Rl{(ue{>P4u{wSg=+?^SlIu41{ZNwhdg{Azk{bF$tgs z|E8Qex;J!2$$0*gvl>z&>1J8|pV2~c644#<<0_2ejV#0WD4%Ix|4%BYaH zZ;xr0tUOLQAX5siHCJMRq@_HAiFq$9WBr2-kua=O_pjsp?0FV&^sxGeWqux~_SGz_ zr0S_(|17@=>?yRs2R~pP^+``(p5k?KI_bJUQ7~f}Z+yoKEvjB`Q+zVg=69oD#67M7 zL{boTACJt{*x7pvR|8H2?ffT$l`AUPg@q~8>Rm<^uwN(BQ% zAqX@o5LJSLpV!}a&0`QMM4=DP2tYgdolds9fAstqkcv=79{hP1A!r5BDZvZU=dNj; zkGN;34f^+1CEdj6!z&QBxKzSKbg_VF$%X91i)Sc2lJMBFc@JM6Q_v40CfQ| z_Sm@I2Z&pLF^J6u2wRmBouzj@3qnP&4V-=afKpv%j+VF zpSEN=W;}$~uzQWmJn?Wzj;9BTQ@!WY#5W`#cG@&y#7H=pfecvPFoKN64#3Wr>aQmeU$-;JIEf%yzq{zZc0HvPQFyTmC2QLj#u3(W3n#iXh5FyhngZJ&|LUE*1S{3+mF z91_6;F);zEH{Idy%ZXL`a7!ZI)|Qts`X}y?!`1AnWWW_cRV5J*vdjpy(-v+x-!A3^ zFJVLOymy15UK+f4hHc{N-pswTRku@Dw@Rz5-L_&EK6K#Xj(E$%i)lO7oL^#bVGw4DPA_4{ zti#UVZo=-lDMzL?o>B*ap_#D_#!WAZjlKMAY=jAXM3_Yq^ZTkIg#hWk)zvDTL?}HT9r+1jLl&?2xa9iV^KTKh>ozAs*0K1jLPPRZt7!8t^cm+x8VsZ%oD4 zzTDR9mmGEnjh2FCTODN-f*0Xnf+;7EmduavG0K5SMHUmoD8$7`W3bdJ&z~c6u33lJ z3BL~!*>j^5ukeRd@-l?gZia>{%5>DF3?ppPZFDu%uD|=>NhU~&zHH;Wv$gBBR%44G z(c2dumNdyU7UXd-<^}=c+}C}z)4zV*Rasxg8N(8t50^nfX`^GOiXKhfjCdim4EIAl z%03Nujsq7s0ikz$*r+)&l;w{tX1@P2#e=_5Aa9rz(0n1pF$Ps$FSc1I>%dpmu{nq; z3?eLWFkN3nM1fx@@*i6~uiSn}sVD*#@=SIQ1g2#e9FU}0seeFVADEn}J_j-QjbgSS zViOt7qPLh*8gC*e!4p0Yz8Q+aaOx%K%n^wmcCvMXRki5t9DQbRh`Xj}iWQLN!!+)V z#LlE-x41>~xL)8cs>P%TV?iYe<@6sI1HL~P! zW4{>?SE3_F?y}(l~VYp;U+sVJ~ z%-Re%{0-3H=6@lbUHUl|&iX65ey_bT6gP9u;N!Xo?f7-bn66OKTd_6hIH{n!s=@d4 z1B!ug8@De^si0bhGIB?p^t0tbcrgA;tXmjw1;iJC#z|}oug~Sr4Lf43yBPlzRc-)4 z+c$vIU!0A%Hz+G1@f?!`{sEXv3XtV-QscA+$Rg#g6lwSzw#gNcFhSygkwb|d$}A)W zF?)JlqtIuQ8|=q<*ia&G#c|YS?4BYoE^A280;?%!tu{;o0IVuZ}nzgt%pq6 zX9tg6#h=!pMywlpgjO;poj+6F&;{qJ`tYxop>lH6j*5c+lHikYcnu_y(e|yRlbPv( zpy-Q2mf(YLd9P#cTvARZp-GyYFGFXt1>JA5cDlOsu2$ilmxtcJIJjWfd6sqJSRnvOOrhtJdhX!S-NItrdOC$|-B5^m-VV6~=w4%9)$ ztLlbvuVT3X1ZnvKmq5l+)?R>PBE_2L1!xKDZVrkGgeAd7VL!U2OT(hwXfoa7Sk&(3 z?M#-H{_B{upp(vfn)%+t&AQ-e(ocqz$0KSsRf-=WL{EvL83O|IX&;BP2OJ-$u+2_m<|^w+RfFr04b_QbIwBIGR-I=^o~Ef z=(9lKl|6cpE83A4Voi0$CU4w;#kgQOeMIW7_+mQ#Ml^ePA0ulx@Km_APn_#+u9g=_ zQB`JZNOhna{e+q7%Pi)px8S|ZQa?*-tN&SJB{o0fs^lX=AH@{O{m;yERDadmrcsQ5 zu*nw5Czy>DS7nBV73Wkqi!f6|1&G-itY9xQHq4?i?B&dH6klCwhSnou-%-r0sRYuv zwoaA!8Bk49oCh3c zw9kxuLCNsj5t0aR0=2mwRk|fJv2Q3DVP!~?5}O;Tu~*sS(-=UNuc=2Kax8~PO!5BU z@m9LJl#rp4rBF)hB56DqxX!gU5K=UyWPj_3A)|`qzakp1&e7Sn0C12R-P^y#>z{MmkbZ*Iw&e$Wg1NA=^Z|FwH}c* zQP+A@^P#b18YhX&diEq{$%2vgAC7k8Q)F$-$MGm@?%`v4Ja;*-3EvB{ zV3FZdVnMQQpo{X}i9fKD@zTJAK!uiMSgChrrM|;Qhay^T|MsMuq^Il6^}>Qq-*xXC zCiqC|i)iWj{zi6RIa#M4cdZEe>I9}-cJC0f(z=FztlahL_Pgaz?ZRhwO|1&M+rqzF zd|Ga{=2cZ3gYSINit8TvR%g}Dw%t2ty!(0@DMAcGu8Fa_60%S|yY44>6oMjJnqJ=S z+KCmv8;C~P_uKZLK}57NyZu>9Mx1|GY}z(Fhi4IQ^*hQHW}t|c6{jCBuG&@RCx27` z^3ccZKkt@z%cqO$)zznG?fn0kd4MYY5a`>#7&Wdkw+jclyPbjSJKglv&1$z=T=j1? z|APauPn;_g>3UwJgIv2+uu+Slem^W$4P3WCzHTXKh80AA>4kSQ2yuXPD=FJRfvdj* zq1c!b66}KQyF+AAJTy9 zZ~!*;c%=FU9Hq#5k%9ZWdX}xa5(@p=Eyjhd@M0lS-%kJRc-jJeG4%A)$20Ni8e-_t zvoNU|OzR7_q@T}8bzmx7=#i4aQwPssz*@jmtp-Y|B%Wb9TIf;YE@Oj$U|2JnL`!iA*O=NO%>#!t%A(83i8lWLFR)B^3YU4=1K*5 zh^ZiRQw4b#RzbWQ)R9q%ZcBGn5j?N6UEUamb9+=4Z&kN70K<7*q{<}t)PqE1C_e@e zo$4=-=|mIqj=OxDh%X!^>}fB0h)ST6P*IY*gaU)@GVqf8OiRU>VhN>Yl;$CEOSjI* z%x)>MgR1Hv&f{$EGaRWbyu_Z$MI@s0s+m8mHBqwrlr7mZ3oqHv^$ItrxNxb92WqIq zB3NU{$V=p7xXcb@n(J+pP>{SO6=voo_FS#^8E7kEb7Y@X>`;`Mc&UFaHIlf6Fz75% zn){S3$ubKs#ozau63yID`c#zWE@4Y@pMiOVKpie_!G(Kr^;Y!3*SV)ETDbx;w`)SdO5YxY>lFf)rL`Z#bb7Id_30ra?j9XV@-}0$iUt z!)Xs^r{MaUX)MKo0Nb33Yi=-u(B6y!SR*YxW)ELnrCmWh)X!mhS_OUs22olj+b~Jr!X8aP*MoET)a#ZRIe}J~NI6ij>K`Ex zUjZh0WI%^yc)t#afj@sYn7yBSTiE+~Fhsp6fc@t`I-s|(yx)6s#{0Q59sGssQRGd7 zYD4}GaTOhZ2N+5~t>9=M?3oq{9R^PiKk!+?fBl#Khx`ISw*ISrq4G*hOJ?qWVO#ta ziqt2Rzf|P4hHzx`_3%QbFtC$84Sc1}B2d_bY`*-7k)t4iKBfF6i;<>x|Ed3>DuAY~ ztOUHmD)JZM+b&lii1W!Ya2^ZP|zR)FXwsmrVj=l-3Jqr`}ZKL<5UtiLp&c zHQ_*ZZ%}VuNxo=Zt0YRWZm2GQ7_Lh-H3~OWpFh6V&!vpO+2WF*_`ym_249`lB}KZ% zhYJ?N>asK;gf&_v7M$wvG0L%U)G38yc+hEThx?GBlmj~Y#|H=zCVeOXl-7%GoCVLm z8B3&kcF7=um$WBFo@63&KVM$2H=kZD|9Q9CEU#O+uw^~S!&3)(h=(WbgWwjLVAjLg zP!ns$KDO6LH6ut`_>y7=Jeu9=UrDj!f$|@V5om_dwbSlKzK_I7nVH*;I9^|^H$aLQ_l*-_>BOj_QPA{Ys^R>x@igc5lL|EIh0=+FtiW z76@V|+ue>#h&~X^rd@0v)RAa7R@em2v4A;GfAMfPc=Ai2N8FQcJ&ECow;_Ota)8YF z-P_G_yT038EWczrLIxIz9U=q2hcPfG`QhMR80q^vN(K@VRQy50-cumTmz@^p2TY4jWghtvZaG^LA;@08rf@wY1ve$?n?J z=!`PX8cnZ#S&o4$rJ2l*Odvc4&XgOSVJbQ)#RSw3_A7TVro|&J5H5SdEv%GItOW+s zkPxaqNaN-0;-7cRs)4F(%j`5!4Fye+2ny|%VL3zfYRn69gxeGZJL2qcVUKVg2!Iew z{1hnUr*^Qk#(itnuh!ra$h+CqScKUV@K;xFVtVUb{i_K%GC$(u`oh0ks* z`;+B|#ZRmCrp-KCqhI_du|&%2xZ16A3W7<+eSz$9@6ap;Tkz&KUN&TbF@e6KCM<h?O9vBp#F_rM3K*fnzMX2i;QK3-?u8Iwf(gH?=D2?932Z>_x zW+dFmBb-LTkq8TT0hB~m4-Owq@~tp^QhyhxqfKl~HCkOej7O>j`1=AIS!6G;^)On( zxK*B#Qf}B*fW`cLr66PBUisfgw!r%K&FPEo%B&}+uOGiT{oCu)7ef5^YVzGpTZks69b|>MmW6`&5nSY~zM0n0eq5IR4kd*IVv;^Bg3PESa=?XhEW$KoJ;8!1J(h~W# z`F?IE)2CYGQD#i34?4-4u5R#RZhvijH>M$GXt-ZUCRg7jDHa#r8Heb)b)Z6VETdzy4_TyRI3uocgk|diKmtApy}2c zZIt_#nSOYYoGNFl+vQa&Y@V!c7MoAcM5o;>u8tQMAC_(J>^AGGZ@+oP>R2Jwh&oqD zIVo!=sh~r1vQQhfM@I{ZMBh^Mq~-lrU(PO9+r`_frIDE_B2_*?iGX`eN_{3+qZ&_B z)BGhwmM0|6_M1?9KV_08`%j2O_}pIyv78 zwJ#>+Um+5$eJm%4M9f+*2&M~?Ps|pqxC$& zhkGTP?!$MnNP#nwCk2&Hb^R!5i*}ALB}Xkde18hQ)bt5`-JIY{slimE)fEGH&8N`x z6-6XO_1blZeI;`C%g3WV@J9TSnjLg+kQtY7kK);8^;6rdlf`ZUPiWvdR1Ym22aB+j zByb4J$Os0tMApZGJZ;z~_Jff$*H@a}>hI@Q>z%lkpdA6-J*eskdCX!dK4{KgZ4;&` z5r@H>ANZJ$v*1+)$9Fo8f>+|jO#+pYa1t~>hKrQ5G93qr6UV{)LY#xt1JlDbJiMJ2 zju9ZzFG8rokI)!@cG1K@;Wdzp&=6-wD$vTvW-;DxEJ#EJ!YUyR6)0sv5~y??5^^xi z_>oY8kYuO~76eziEO3CZb{;+$5R~OIeYjIopaBM!8f_j83Xo5t0VJ|yBLG8{3J4e` zbKnUt&CGZJ*66VP?_-m@-xp2VAK4$Xn@O<2U+$K7%RgVO-!87&lGdBm?vn){JYWhy z3D$&S3Beo`Od(jnp#_@68nX|OK}sP4fj)O3l4vPPXty1N zQVN2Y?QEQOr$HSN_7f6iLm#o8r%cCWC?ry;4-%meL4iiX^9Oz3jori?N&}GF)FpVW(>LN3=1vLkuNm;57AE~idg+7Vfl?iwZCj*TZ*4y%G zp);9AqsW?Q|G+xKp&4-{AlUyYA9i`vfoNN%@TB%_=BSjKc zC5M^)rVNErW7m-ggkrx&3JStVuwaN84LjqVv_4!Yqvd%Z5JE-{uejhHoP*QEaun;P z2iyS4I%%9IyW^C13B{7wWniZKFP78+aXPL*iqmT6X~}kqsnG(I_B5&udgGLqKwZXk zuYzm!H6$S{lBH~jRW=C~v8ZgC*ia@f1(Sr7Y()!2nCwJJQqWh39Xk|FP#d-Cq_3;D zLEUT&D9h9ovT-X+;W&JdO0Jasm;Q(R;;u`5BImtGZw|G&u{?lmL!YN&UOCJ+xKs5^ zHzxv#Vm&*;A@(>yN3?4Na4iZir^vD`DyJ{Oq=ywh>$n~V%ZAQL*wNHwJpZt`TyBon z8?`eE90T|2Ie&msxIRBd70yQnufoL~B&ro{(!SxYFo8go--3i-e-!V|D65jjtu+H` zi8Ya&v<#eyk&!SJ^1_8;1O(9@5<%q9p-5>ypop`3@(`pH!udOt0dq?1$7zC5(O%Ff z)&B7*3bE&=mwH#BC}2ukP%drh<3OO zeFcmo+|)Su5oZ+%6?wh9*{(My%k9Nxbt_K9R{%&6_JNgZ!5mnUFrtCwI2`c8L;YTG z3XB$?d$&*fdUe(Ih!8L0*>%5kAc-&H&dS?z;bmLh_2Me|cwfByr|Zr2!kWtOx_5Ef z`n)Yk-`_~4CKE+RPA^y2Ei1%*69D5$t*#&4ZJodWU0Y{J0^Xje`ugap+SRpVeRa9q zW(P5eCp3b--!9(wfVdcecjA|^V=lXO``Dn@Po8F&L?D=|88@|gaRAcD{%Sza>8~Ao8^vWRE{Ka1>}>|x=aEsmxz0ngfp^qu3pzx&6Ak0p^LG=Gf22tZAm^!-!lj}AlXbQHXm?4ONz}0 zDfZBkV)H?YJ@iPixm2_IIi}XqKh0sk{${)S*K+=Fm|d2HGt*u!c8j@@QcAb^(0y*2 zj@5I;aW#kkL;UC5Skfw5y#yKVDKYx{@%j1btJk2ic3AB`wYB}v|IE-3 z;cW^n&)dRw{8B^b|10@~!m7HTx|>$~_xPZ)SfR0~;5U2`P@+Q0OsiK9WaWhK>Zn9BW**@unGv{S|=By8)Od8X+Hhe>Je`wdcOXc(~Ak( z%Oix9vl$!-gK83VA*Qcj8AE4Knw)Vn7>k5KBh!izqq2=VT!v=w>i>KL#nEjZ*}UtY zBU^jj`w;oQ*O`+Mn>g>fgl&ua46N?-kYdE=IY(=WdunlBm-)jvN#XW#bJAAkyQWey zNjJ4^l@;t?u+_)3+){(f-tAy7HKpn3qG=?5ey>_9aKwf}3{XSk780GP=KK%ZifMj+ zg4ucaE`4Pv^`GP~wKqeWByw{`{|nn~VXFt~Y8d0KA_c16k|6L(r5bcCnMD1T-{qp( ze;h^>De8csTMfSN@#qrV|Eh&bg|kZhu2WD%qUSVJpWhuCt#)LzA#EVre} z-gH-FQV$`@sxFZ)_yZe(o;VNRU`+_=aJRHDM0AAqtsp5L5aKxwbT0}{{2rq@>|GCm z@eVeaK}VE%+DeXB-CYYJD6s&e^qai62+tbvp|$64-alVoBFBwy^~X1UnFxw#JN)$H z#Z^0ue_E!}m$bjGf9&0Q1yLh?mkcyS7P#)YH4jZ#UG$M1`L!qcC-FVYAqY6^qn^tWan?*ITVHQ z^~w~Ml>MAT)*~Y`e@pCh$n2;BkCvEzBAG&8@B%B0Ky1-)j1E+tC5$#Vn;3LRVfB2= z(a!9fTus3#7y}vVz@q@?XU?#K>HwctS}xkNWan<>UC~%2RG%g5PG>$s>iBgzDC6+z z9_HR-+n_0S>RQT6xSk~KA&nZiR2O=R!O}9416Q7p2NfQ}RP)$ms8v}@N+Wer+>0T1OQ6U?YmQDO)m36pndCA_^(7CFPqQ_7RO;QB@q2kGoB2KCGvP49 zzJ%w?>-FZ7xQ%wTSza%1cH76yhZqLxK@Tqsq<;`}2}iRZj)R!elsz6&7$A%SBw4EU z>{h?X+}&JNbjEs`5-9Vo`^?+K&pbOTY}*|#DxNy&_Zxk-I0-*byEg; zq;sEb7^;$buwJm^IL}l!$=4k6e)F&Go-AXImZ~% zSLDM7$BYF)em6TX;n+ex#u+WEk2OK4Da*tY88eNUp;|g16j=1x4>1fhJ9v0ugk6%n zHitNTtHZUp#*G=h;J_TUMo?t>hm{Y+ig=Y&u17aouf_ApkKg{TI8F&FZJ+=DYRcvTd(m zcTWKq2otKq24F&IBj8IY>j42Tk!I`%bO{mVy;;xA)S<|7c)PcwYKf5#zu=^VC)(`x z-3{`!6bZ@--DJ8k!y7M-wzTnbfD9Og2T1U94p0;sk6~eu0uY5OLck$H#SvgASb_-( z@v$`p5TX;v(-GM~P*Pt^2?UC8c>niU#0d;vx=LCa#=Cqq+#G;np<>e4%J8b=6S;&= zM01K>#f#*{yeJcz5$_6CM*w8PU0aBARV9uc->OP&A+D85+axh9TUE@viZv`7(+UfV zppk>maIuA;9vFm`phraEt195t2ytB=xi1UxviCm-Ko=u>4IcPGu3~g+=8L6Dx2nNp zO?&Xbs`z!O1pOzy)GRBP6Ilx}*@vpdI))Zc44Cno$&XR6|DO;qY8`)gUJ@gy8syHa5HMKe@Ma zlR)D;m zx?{l{8~^*rUZ1}067!j&AY|LQU@=$ z`O8nR4wa62AMm6U=L4Se(0mW?-g;UQFnsDeA8_7=t#&I<=P49pa)_WUic@{2DoGHK zm+#*8NIg%@vUwB&wtdpV*xZ~|0lR0GH8!_pYSVKToZQ?ux6$oR^F{cETj*=HC&D|n zgK{O=58A@i1wwyg z1oXCobkI-%=%=a7RM2B8zTij<;-k<;8qye4){Igz?fdS3q?B}9ogE0o zIUmFUeUMg1ln%!UAb>)Hvf;wh7oETM$?5CIBFX6su^64xu)^)_Vt4W3&uy9y9RS-M zd+_|^ZyZRWuWSb=^d*d;guZ-xL)UuM+(*_t2PMDg<4mgTNAJ&)c)9szz1@i*{N;9g zEJTJNcD8D%-WFGUr|z4iKmA4RJ+u}=tyz!^A}3ibfm*TmU(YniOXAOQyIQg*RvT^4o_ zC^oq`As}yE6y(Cs;!^mh4q5!rPaQf-VV@MLMh1PHK&t|w@`awg6>*k}K9s7HM@nmo zo42{zEy37~Dyp!IY@HLDh|n6t4Xlc$SS2frVt{4XUehzXiY%_1_2sg=C!sL5AfxKr z#iy(F;_|rE=F6BxvTAh{T2ZSLC!ehPoNo6GUDUwd0=p*x9~+CSPO5DK8t;5PmnNe{ zWUl4tF&eq-MX#w?Y9*2l#C+S3U>1&T5t59-eb|8qXabtH$O|=XfrtiEInKTzu?U13 zGV<6?CaGsYd;n@qsX~ac0O>`j1@pKp3r2DSx4Lm$wk+B($C|YyG@0OYrTdu$ z)HHENvTk!Nvnn=iF)>vw*<$J#?bk`0u7_vL4y%Ky7i#^_()Fqsx_Y@1k7=tG7zu@@ z^B}Sjs!EjjbVHhKAB)@Oge&!UechV5mwXnoRj|iKwo=ioWGmDD&K*L@0Xoe`8PKlZ zd~)9Wi)5j-mYHFZeQHEe`uD#YQ4l?f+(WtNLxCCPRN?K$3{%P}+;2?bmC?*8J1=Tb z6|pSo=nw)?rA#h0s$$#@n^k);s$71yy7Ax4$sA{xFrOIACX|@J&kZ>eC+1U2%%@7k z{9|s2usAXQYKi$5_o2nXG0txV*cH*0TZe}{mH;0?wX6X?3VAF70zIQ0Z$PmI>^J-; z0JM7ir&fWecl}jlB}%;XinOi~LVHKN>guCP`cVbpeo}8fsW<;pZ~jHU#)^d%2Cb== zSLwwOv%x-LFaKo)juP#Z*Q={8zVk1~FQ4-nDX>(Jg#we%%oCX7khWK&)bG`@g0$d! z@glo+-Tk`l*drK5X2sas0+Yxr93M9s#*kU8-x5Nqp_xHOM$`t%XHbR#f`e2<=rkAU`XG*YFyb+d@d4fU1PO1#b4zx7QxTNgn3W_Nib#WfU-C^xjH})e zkm%3Di}%`*zUoNEq?;MDC<_^vZdOLfDrR+|ff;A{^sG#brL8sh1Duah(V)0%&Ehzt zjSMZr%>qh|R8QMpX(=-I2r!DBFeGp3hM8*^q22+_Zi%`zk!>x6-7GdKD@m2CQ&t*T z>{Jp(dp1^W0WwBtqak7p{i3$P>0gzytj^dXH!aiClJtEx^QAO64aqtb4?8Kv+$`mi z(F`7&6W6He8`dB!{~-JMk6zfU8`SxU&@SKd+>OtYM!xc z6(2NqvFgaiu9?|q>=rOC&)5x+Rm^GzV>it5X&SpWOQ+>m^-vhO(*}+1~KR%D5%|78lFr2p#YIc9Li7|ruf_ek&Q`l6#&BGsP9Xmx83SC?-0xM zwwuL=z3oVKbZ@(n+3Ri3XI!SY-A`6At2w;wL6%4DSdTLfYfBwRt5H*$$I$E;K1VAT zNi`j7}UmmKj)@j0YtduWlW{NrAF0l^<220|_ zr`9&o;bGcOYBsC!wYJEV`OOK4XcdLcnJ-i9nJ+QznrzT~Nwa9u*;i`P zxP+B6oYkm7`Ce?*z}8eYYrZT{(7&u@*c1~rifL0!Wd-BLN7E#oRB5{%y}Id0TOQ5& z$2EMuWVU<|aXBs1r(hqX)laVBWOib{d6dCKqm`9?M_b34B%UN?T4c!4ACX$=_E}sV zuHzLl8y|NIxy(v69M4;czFg~aUi{D*k9`?T7NlE;-->k8k}XL$>p@zRXfyV0QMyF= ztjZ@Xf4};2_Tln+_0`Gw-R!2& zf)%J`vk7UmP17z+ISWUwc_Z0^*77!n6&MhD*_L2bkRHA@X!n#%gLGi31z5~HqjmL; zchyg_&MPue;s81`1uL1ofoMLH~1o%NS0rujDs@)@s_T8*8fAK#MKB%6!YlEjSAj}NkQJIA z!>P(ynGR0HiQ`~?Aq++8feh>^)FO7k39XC_d*J=V0xeY_tP+S+fl?N@h)UNqHW4E_ zc-m1-gN`#wHs_4#s@V>*Z50qZL*ugbEL)p0btY3cvUMO^(=qiKQ*Wsa3kFxTEG&?) zMotU>G&*`f0?oG)_%jEAN^8AUX^jCgq&44)wC0GP8zafALX8Pnft3!v(?o;O21?5MGT-)0bsY(qPkSYn?a8x-C(_jSD@54}((;cITc=Y(SK51Ov7kJwjbh-Rk^HhfG?)>m; z`{3}Q?#7@a$F|eFz}^vqX2P<%EBqB$-l30xgg3)bqaA!>6k5kn_U z9baXGX^gukzY)0oL+wqwkG@4k&ey3d4W!W|&E#;t%%-gxtLO-)} zMlLXyb;5)2awt>?#16NB{}sl?lKUS+vn! z<^nFiXu^DtzkyrhIi^b5OLAPwSxyIXIoHH?k39_mlg}ikkKpZFL7g`*BgmHj z;D)r{_6|$0ZS3TBqeYuM^SqPGU*D-L5k>|ewbVe*LYHs>WwRFfah|#ZzlRI1!;DN7 zZg3}f_ki;yE66j}Cy(65C3PK_Q?(kca-K!wI|`+)nKXKbYK z=JGPuwq*H_yT`OAb8X16lC@RgSXll?7QmdMbS&PJK0v%M|U^j{IO-)Ps zGA4RHBc+V;e9mOd@Bkn4w7(N#H0=R8kpXUu?9xUzH1VWa+xQfA_-3}LYV~KUiK5Ku zbU|4)DQHKtf-f!GLM4q|JNE>5<}or+CfEeBwzDCIfYIy-EXrEmRNLxir*eyWWUXQm zi`h!Uvze_dhi5gr?C;fXwwS?IlkXap_u$!LyE#{XWkiOO#b0c9MT*y#Ei_|b+w|o2 z(B-t^Nev`vuWLcqqr?q=a3`gD6qjM=4^^zK>c-mnPNx80XW05~pMwW>g8$bk7`OW& zLOjdg&I#K78DdJX{t1Ti1e=Qh&@!GO2H;9^W+(u_-f5>E0&2T&?m?M^S=UJ$=KD+~ z*nie(Fedwhz6-Ojld6%WGnHWf?Vw=;_j#JCn9*&9)T-}{S&QHm{N|IEjbjv_K$6JdwKzRB9J6K?Df;P zRdmL_85tSvTLi6jgLDXoCB6U<<%v2DiYl`Im$CIXe%J4uHvC5J^|c=z3FJhtCxIm0 zpgRAw+^}MsH06`!b!AXbq72s=J-7V!)0ge4yLYp?*{&M4lP_aSr2MYhuCMO88^uH^ z>q|P{ZHQ4F=9An3*!Omg;g?@w9a4S1!%Q;O^BMk&W zi&~5|B-v=75!^{Hw22H3GB>0OxslA_pdF zAv~w8N@FsuZ$6&2B$Z(V<2$(<;2ZXiI{fJT`c}7-$)oo3?;bDyIDj;R z;F~Xx%+d_0s~kot?W-}rOS`FY^T(0hY+iPd74v+8=Ifu-$Hjkvg8c5gt7^Mdw=IJo zKW?hVvfVsFL~DW7lpDCEi9edf8bbbSL8Am8>&YwAuNz1uLcZl0k*T zMi`WmWr{%=56&P%DzX22`5?vuCYqIH05LArAEw#FHq=OB{T&?kb1{BAizCLmw!?mI zjk~m_A?Dt`kRe70bb7MdwN19z^>6V*c8L5LQ8drTtMyOI ztK+NNPs?mc^vYBTxGm8X#ZtX^t?!$R&#$%^-!A`gS7q>rf{p4~T`xaYU5W@nMC{G( z9}E4+#XVY`Q1`0A!$V%Tmuy;NnS0mfkixu3#2Y(f+M%b{W~U#&8y&5-d)=63=p(h+ zUB>T58`XA$MIt+}P9{F4qdbWEr{>;x#0MsV;ywgX7WxC`hcKXgQN|-dVdf-+pNR^w zT3~)#MG@J~Yr`ncWV@8gS$l=6(k4`k-Zn$Isu+tm=4GnZEWp@GIwl_@QC>^juu62I z{amyv!1OpLx}2M{C6j&Yt_io0aupd?pjd~ZR=UQVAFkz)xT)Wmv0TmmJT5nm^di|> zfrL3Wk~ch?nago~+%JJR*FsS1?Qr#m#7*VKjOD8Ka$LJ%m2*QW?e$)`N=EXgQfB57 z`^l-5gt%u0B*u0+z^x+Ur76HzA&*S~PDQ*oT)t-M!*LDfjQ!{2Vl1gB_flv#vwK%s ze1iB%6Dz5kqLQi!PX>8W?4=!R?ONHwEKG31gCPv8!GaYG{J??=O1tSuD>BJh$FNHe z-({yQrS41j!*=GqHZJQnUxA^Zp+HrA+Jy72|XfVDvEGMKM)p~gC^ zOEbREDXe8nm&WPJG0sbYj%2lT={qJCzAH1*;iIyog0dD>mQ#}e3*rk4I%1r{vK%cg zXZenlr087VQ8LIZ$6L~|k>?I^1e9Zf1?t4|dn83stH)FyW|hPo?a)A^-R;=WO>nxO zHtXnWJ(hIxq4m6X#mKqeeKMpE-cSBbgd^V1eW>1euqLx{$@|>#u;DJBs_@B&Mk4)> zpkour-bn0ZeZzBVwomljCVD*UzPp z99La5|ExC6IC;9hzFyv32<%8e%XYyKG+_V+LG$fxgEh*L5$Cf~37)R+ZgQ@0X&i;*K|-}9tucjJ;o7ObS58NzcB{k&ONg$Ae@g*K2tw4Di~&Um5&#?$A{hWe z@a#4OA|%8Z@Po;kfY_4(55Dl{1a(k?RRL#%VnFmZBcNVeXtm&XfkY__r9iejr zhjSxC%e+}YG5%i+D)b1Rg&5J)Lu%!@7_%1R`GcX-kA{iPR`g-E&GZf9R`$~3?wZz@ zct8EHh2CWt<*o~mMZkhuP7wRTX))j#Lim|@S0T2hQ!#d>EK+|L?T*<(-PfoM_NOBD<*u*11cr#M5`98xLtd^*Jn&?yi4BO;yQC7h7S`$m;^gWvw91l1pW2 zwaM?)rLmUCp8xf|)HaqdCDL#QbHo_(U;*_OJh(BkUn)p>P%aj{Vs7X5U0d0B1r zudMit;o+M3 z%C`Qop2is~@nIG;(GX@pF%g3yz~vB_f`I6gF$M;+l8q&ULGW5?wwMGa^TrT;V(N<| zjU1M}m7!?^y8t2MnyBMxtMUvhyVrr7-6<+%cS+wW>!2nsvri5Edt_QCrdkd&Zl-V8 zx3U*R1<0XV3MGJv#+t-Pn@FMvB^fP?GL+<85`|#%x$ir5EseTYc*4@g{W{TJ6;6aj z(DQr_Ho;jz%nPe<=FBde{c_k%(@jzRPMY?Y{$|etT?)5h6Tk)uaa#42*>FQFQzFk_ z(Nfe;TwY7Q@nFU4YWwN^a{KpfQJ{jL0)P}m>M%e-WZv@;6*P0k;_KsPeRtb7=wCGg z0e$-);@jU?o_&K(Z4)(4cOU81HgPD;-)ftQ7<- zcC?&0t@lOQ*^(rY2vawBt|XavpI&&JD`Q!+YZ91|@lNc8 z%FnW3hjMDONGFzDl~$VtOIW4tnTF(dVVhK+XP8NnWsxFh8FEOc+oRq&hJwNsvPOY3 z3?-VQge^Mr^9w^lR+kp_;~7>PjJt^X#Of}hA!89EuIKqhuVdU0>rU@5!>d)|KD4^c zIGOEMT9mqR>c`qE`Mwy&Uwqm17OCZ!rB-TaMfm7wKkEs|L^leCg( zf}C}IpzU()q|yw^TS}!l&b5`I`J2>OYL^*=gNr}u7PGIsNspXtgR^Ks(~PGmV{Nk- z^*b-)%xj6^K1lCFe|IF_uxMT*3A8&l)E%&5{a(Yg6(!rt5@?FCm}o{g-%~Ccq}s_Y zQ*2=`X6{a6?M4~9IkxURP2D(4x3rt>wgoNQsSVp~Bdn}hE5hD{My&|H#Z21!WYK;#Xqnnk%%1&f&K{IG zJ6CJAfH5m?%T8v>zG_U?X}q^RCB9MH=Sa3}`vMN=f^}A9=4Pw+tQ|$*KY(SRZ=U)2`iypAEJyV?$O&t)NfRR4-Iz}Q{bA2Su(myhW z`$#m(dUu#eHsObIxORM+=w*y~m|4ljDqz;5EhS{zyEUA|z#oWanWbZU7BlsQ8J*DR z7v{W}`A_jV&+EwDi^#cfL3mkF3_Y-KD2FF;dg|T>VBjfVG1LH2>+^yRQf@Sdn-(?j zamaw|3q9pPf5`<45?jd zxD~L=+j;FL0mO8jV|QkO5~bhRwylnB+qP|+9oy>IwrxA<*tYGYCwK1sG;7U=Q|tVK zb81&TwYN;@pvWLYJLQxwu;Fo3|DgcGFj5*R{R!x+biw*pWY6h0x*SPd_iY}A;vpHF z2hxD9k>MZS0=m1r$!*3z1M!o5h!{vLc|6<1BgaD)QJ6cT^{G2ti}z@jhCdhmc}LVU zP5_Qc!#JeV<|^ zWQx1JJ|eyY?|wd9wmR>iXcJx1rQ-MBzlU@v%&S3zWnNPSwifm>mi1h-FrdU5>4{nw z7@@yr=tuNd2ZuAr?MQ6nsW#ZADx8C-rI->3i)pM`NV~AI{~k};YF}+v06Bod7uVH2 za!H#@@P)&fRN>v!dj&Y+YiEAe&k%aS{W|$_bAQEB;WBDb zm^hD)oATf=)hYJZ_L{g^OX27M5E z%QLx@tZ_9q>%fB0Tvd(jOsm`BSY8Xo#vmJwKZrDAlo8#FXcj+=H?)mMMdH8XVR63iR-R<{q**-&n2)5cD$DVogr#18Ggr4H!Wm>1<8v8>&3+OI4=(8qN zZU75mswVgG6)}#NG8TMt2_H^e>&dNpg*vY!WTfKj!tKf0wJ0yvewxvUtX<Fm7H)pU4Y4uPG1wmCT;1;lVYki zy~l84LNETKbp%mfgMeY(P@)>!cuML;$@N+%`FpT3`~9nlF+zAEroqr8KR{a!DhymlV+TobZLR*adcvxiEIc}+%?-zOHU z75Pwko8x)%!>w*+b%HAuXLmVwg!P0^Xn|Of`^}a`ZTqJptcKO^Zlf7|1AFE#ba&`_ z0G`*F(%&oTky?Ai> zRehhKTue{5j9qEho9rd^n`zgu9*5Dv_Ssms7N==D$jrM)tJ=G`whMTI)n}Yq2fEcX zA@&gUQS!-kNkCDyab_AWPO`Cq^647Nx`w8K2cChs5#Fh@v{+&Y)fCVo^DwGMi*rFi zuJ&}VgFJEN-1^43%?vMvFweHNF{1GRvELVo75JshA!54i&DB(4daxf_7UYj;GhH8J zNFPRjUzlt7x%^^LE;5#x2#vw6s|efjk!{}@H3}yA0<=7fG1#iezU$thAlO{6@Lx2^ zl^Nyzk2LzU0P5EL*zfHb>%gM2bD{E|V5a{1Wx+}YX+c^nc=-ABT~0QS_XXc z=mDIj#3=3=q>oc+saVs;;n(~z&41^Dj@WTB3?>2DtB{g$!2)d%{x+CEIJ_T25)oSi zn8t6y`9dRe_wH;XgV51=`9_AqrmZ|~`Z7rZ7@R$4lUKBKx((k@IYcJ3KGmy**SZAb zMSl{xLd!pjdj+HF=akNHqp-!&r{3nyf#m3=;0_f$ zo&7C$PYdSM7Q#7Ts|?aLpz{oXP(hD1ew7d@jbycfii|YWgNgMQ+yNyfxMU#(U1^)a zxBSlF&aKPiGL1}u@8#yTUtD@CU0AABy?f;jL#GDJjz7o>f#xU=<%jLQEv2i%<_zM4 z-|1C_`TH5z=E&N7{wJ@I3_1lKg4H;)6?riVWvili63H?>8@9e;M!|8M#Tr!5i z-r?F?E=-PTqtpg8(Ur$!eY3oF+;xA zNv4`+$}LCXSv7+=7=JVne62R#8w5r7TrcWPpGC zDo$mTRgM;OWH43lO9(;{mS+mG%H@cXUJVdgRo0;n5@lTxJg(FS;FKfREO8l&+vxWq z4R5^!dVYS;(fO*+sr6mbLbEc1zjn0eZ~EK)tH(^bU>?10{Ms-=Q^a4Y|E>MLqHz9F z{TCeXZSS;b^Xf|q(>!a9B5h!5;EjZlEakE}R{ zufYI%v==NihnKt%aNaPC>g*_#me12)0%DJgwIHxD#DGIHzGj0UxQ3I0>DLadeHKD( zLTX=OYDONA>9HDm+LXuuClVTj=6{s{Gbq7Cg3u`8^arMp!IQJ-VIFzpT7;rF-MHsx zX?;k8<{1KFJi`5XFh?W1>FbUi>0Tb>Usts*;{cKmg;-aOlEUHY$u|eB1KgiwAv*1n z*HESz3t3`ZC=Eld6yRdvN53o;6W>}JyVL9OaQ(CvM=y`h$Ds^XXH*Ri&0k}O&v$B4 z#)%kJPi(PU(w&=XyZ@nyFuw>KBJE3n$H-tYbM4By??OE*87o;g4rU zA*F<2lYlMzXj%z|zAdEFXN8sSMF#}{N8t|<{|OKtV!MB!1PC9Y5Gf!K*$jk801A^Z zk$QP7jf^ddNtOtZ!k}erRxjBUeFBk_XA>($X>@O}_~RXZZfHWMnQ5+NjDH4YwU}oZ z`_W{z`?Mx??=^pVTlgdWS-jGuQ{-fYf3fbZCirj$K{5w|zK!I<#_O#K&IAf+R9>qd^MZ z+Tr2&L9FXWEwFNP<8Rs~6$y>Z5?X%yr7AMVYt++^$0M)0ok~Q2C+6)l!a|Xa2E_SK z0i2Sl+fFSq5Vh9|Wnz5-_=eB?5^1N1?$JEiD9-vO_S2pcMg( z4w@*4oh()W$bSHbAhkMXad_0Y4jCZOe$~RpQN$5^U3^gsi(;IiitGtOsCFCK5c0!& zO>jm3_KuUZ0S>Ec<_d!;H>S2gc3(eHbl@?erlG1|vH`S31uzp%N}NnpApvIK0|xS| zCKsc8RXtAN#exAC^Uv1?o(L!=X*<_=(Y50(H!{t?%`4z|dSmc- zJX-U6&4s8I$#Yy135$>$V<-eN5UOw4?#Ce64Ji=fB=f-&0NU`*%m_rsSOat~X50w6 z+38m&`RUnbp*itllpt!Rm%{zUG!R-T2DPLfs)72Ph!+PLF zUE@!Sb^v9K6tL#{r?P}{RciYwtB-+_H*s=ZAxf=D{CN!X<2EtPK5qFe#2_X8bOs`R-(!~lG zlK7@|=4Za!CNX)2z(MW>E6G51_`!hnOCzj*q3^I8UA5 zHf$E8U5Qk(l@-MaDVWR(#c@F@9xIF&`J3$VDRG7Ynn{f;Y5P({{)GZUg@nmKm{j2T zJi7Y&^!9Y$A2l77GK5Ds^%7`lkg?@}h_x~3_!q=Gv^MMyaZNx^o#^jOvpa;Rf6T%q z>E3l2dv^B*aPMYm+B@VMH^n(RbH!*XTa%N4I#W_hezYjN7~N_- zk_o%8av5-c1w;)5WLq4R_c92Rgy4t)TMii}H2`>;W}#^Oh#hw63lqw*7SqB0-rN2 zReFNB!W<72^`l6*i8IQ-97+^#-)~`0lY&VK4-LOR!32S1pyK5)HHAbv^nJ>MZl!`x zHOLMe5>uk#NHyEx?R!xag1!pH(Z#RcySxk4kKe`nW28Y6){FiC@;F%gdkzE0;gPz$ zOMuAa?np&|6O4mM+{|Fn#}RdY5ehM+(%Jwa2BW|0>>;R^J%I25;PqeD0V`58MS0Sj zhM-)=oGyUNR8a?@Or>O~3rKBP7)0apyf6BZ!nA3E!_(U;U+XS8j1|V{r-&*y5BQ0? zm2$}|KaKNHK75+H`oH_Ox403SOKa9sp~mQCkL8Rw%X7l`&Pp@}6xz*D+GBc0FV;A{ zKF(gP?K-K9aa#k9Fl(~oY>8XZVVG8TPFG8Y=wX3?{b3&``r1DPmBUhBy{$Q6RW}ur z!xgngk{cal`Y$?|H{ScrZlM3-CdVlfqBh&hAay1xvOlTk| z3|378G8JKmPv4a_#xHVzc5gNuZLetnn75^`VwE{aLKf!ySKX!u5{$EWe83 zJFn9LJlX;wjq!UDdhAyZrse!BG#4z5OV+nlbQt)3Tz7x3GP~5@>>9Q zFC?f-^17FguILfG8`f=A&8ycz57yMyL3y@Q6Ky0$sx9DDc!9zL zv`BAx5n_R$LPrd+DM1p69kH@la54fS`{vSZ_DX(mj|s0L~=+XfD= zdv>V>pBS*l_Ro?d1kkOBr~5Pq9v;5@wLZ)9q(NEDdAbtmMJpps5z%)Y*{w)5LVu~p z<{K*`Y(e6+OCU0x4)x;*BpQB#BmKiA%(9JWL+d<6G+QW*3bt+`8Ttz!9<;u;r)o$? zIqk-fjzTQsLs+N?!x%m!f%iokARKKH?w1n87Y&NpH;B&cpqVy^-gFo;^e2p^uj(jD z2UcHzjNjg(KmNj{EHGH~s>NB**elcU)mA!vj#vhbJxjC=mF*8z4*awdo$Z;N^@>*q z_ePPZS&(q6*+TV#NPxy>s>_#nwTtRspVHq*5M9&AD?S@DBTn33O`9qhv%hQX+=hK_ z_~1699~K&9Ir%S$xVHPXE_VtZ)&_hyN|&DQpBKCqR674jch*0^8;C6LMHW7L7k@M1 z9(yk8_5LD7n%rT?~O1E;mzz1m6Oc z87JgEM7z}yENGEVdxSwIfb&SD*$#n_8HD=OXeh_LA^xZBG+1QTGOh{br95~Gfil9Al!qWzsEoU1KaD3)(NE(EB>B^L!jiXBt1>_j%AzWbI=*qK`XAjj z&zRKX4IbvL^j|l)|B{K;_%_)!>K9$gH#XkFFm73S3&rrIkzhwV1H{)DX41Qf^W2xz z>|G+3iVuM}ty7%@RnZd`127UtX{3V$p6zkx(E$-KmSzfQlt z1|4LBwjjL-)RyS!c%QCia`fCkl4Ng7_jKW_Bo=Qp;L3FgPFgII7pE!Z-FiyGcy)ig z<18;(*HvEt`%PufmM%8AOv1RIyCNvov~JLHJH=Lw?lC)~bPC#AhBANIw6;xbamp|@2lyZ5=}HshATRh|<2w+R1&4sZ>j z12=(TQbp`TKU9KkgMWD3090QkWf0#towL&A=Fg!(a&aa1O~Qe(y%{QZTgWVk;!u^y zGNHM|Rv9uII6M7#785$}<5oCEnE2T0pQ0YG7fKs-1sJ&U4qLOW6C7}E4Z3joUy1#T zfLL!_pFy@6r%eZ6#1Aa!{$ z+(ZZjTQCgeM5sl{4)|*pb@NgWu#K-}~Z z_A)DtZkH=9lq21QZBUe@%mKh3BDm6uoVT+h`y9`EI z`jK_S(^u7{uH`5BV52-bRGCDCX#o=~DN?+O07!5moa6w?Q*g?VKnJJcY((2pGu4`i z;66Mtm}v&+xYQS(J^bV)MMqH?zG$uJaaG;usbcF#8S8Zt-u{>j_9@p~HMlW8ZA(9S z?62P}Q}J6ih{r0$%F1a{dZd?8`6Q7vR|w=*%0RX7@qutHq8d>oHvFI46&&GP zHmPp-2(Dt*&&#I)lRMSW3jCGYEiKnTjbAepq_icGy~jVgSalh+>c6^p;D5R}tFOQr*#KF6sSkI_23)Q~7cCj5) z=Iv`Vy`N{F3r-IZAwxZU-<6SXUVa57du}E<**%{d5C3qJg_r)g%-2Mt02OqaP5)(i zr^}l6P`U6eV~c!EzkUZ=958Be^JJGB#F4JCWs<>#Okuobg1QEZ1pmM+yuI1oCwv8` z<^x@QeZvhWSEf|FV+Arp9!`Vm3?{>Aa;6OeR0k9(o}%on{__8HhU2FaJB;C`nsI{T zKqv5qkL6HPo{ihm`DZ`->O4mDRr<35M&dbrSbecZEK_}o*i?*yClSW;=4zUv%~;)fqeG6XBP|E-jZ{ts;V$F!hk z@&1|n@L+VAsLM0h(NdxdN!;8j=7w@PgWhYq31`_j|9y1p{Nza0webN2Szu7LL{N-7 zaSM6k_~XE#A%!So8#3gb!VDsE8MyUR16;oez7C8TTTYT%>K`N6nU*^2q{y&)S53`I zCjI;|lnRqUp}_b+D0H&*Z*K?#KcTx?-FJ)_B}C<+7nI>oFwGMIy$SBY)Sj z`ieW=ca498J*3z!5)|SPCdsY%)c7s;kWPlm2ve79-fw|XEbjw0rcqp@pT-e9%iu-l z#MY33$sQ%}n+$K{`7F|8(ZZJa57Q!a;@&N25t@A05+QRKobkSjt z5XzQUCHzuLa?}a=Hx&+27IxJy3apA4ue2-cMdr$394O|7^Lc~Y-35vwXs{-1@FWG>-%(OO(@h7fkM3>7F9&HCAubC;2{)dvW^5=8KRU=rT52<+%|ANY;i)?CtNZn; z-Tx5eJlRpkK)=NsQixw)JJxPu=WZ&vR@v3u*(`G{`#j+QJ`xRkfUBcp%RwKO=<(V0 zk(_uQmL_2{YCQv`8T2h%8bq_Ld%#6=jCzb*6WH~6rF^)j>@l$(R1=Gpjw?yyn2xE# z3O%nu;x>R{X{)4fK1axl_ghFRR_1L+{WG%uT%{o!N3x+>IIhECneLlP%~x3MZS85l zi2fU@Dpq|@ULuiUA2~Iy3KumNFoep>&u!}?>|BsF-^k8G8foIrWox&%UPBhpo z#9>NR=~>;XielKE8}}W%lpCF21y<_?j0i-K{o>i6IbCyV_37NCscjX_2Tp4 zWyJXXEv>h7=0#HF<*{_j8S|l;YE_eLuF-s%&)KN5qZ`l0f{mo|c9mu@)eSW1R#R%g?w+z%sxB5sx=BtA5vGJ+*CKk-LY;!dmzdDBR2-|2&(Gh}jm7-k3EgM4I=>4z_901rXt$4wUa={-=0KM6Mpu9 zq+ki(IN7jMnk(}bjonLtu0O#XAn|R9JYZQ20k4V(x>58~LEq~G8Vwvj(AxVFU_@qR zppABuDgeny8TAMRbA2U|IpoWIXAI&sGSyP@h<$VXXKpzY*@!a?$gw~|bM3v9Su$Y|_OEEG)H!=~DC=Q6Q;$orYadYNNsUrw+oOqWL-$&6cApHuT{ z?k8fS7Vi8M)o8~Gs4gmoZy-4P2*4sg8BAqhCCv*4&|dHyJ~~EXrNHara;w=Roc043 zii!-9dYM{6^ghcXmGJcs_+nS+Hp&9B;xPU_z6Tlr% z1|ApZprjc=77z)1A-40iHaDN=^Y!$k`T0n*+8@XMqNii8_Jwq?e9}e@SP7;D218Qj zNuWRp_>afo^&>&jr0f}t4}yPwEjXiUAKh`j2{B&vmW%k)7NmVOFt1z?V0BUAUMA4M z1{gA{{{TcKPxeQ_w*Ooh^VRi}TKH#_ax5CJ{FEkK>L5AOCPSjy8gL7RpK&pO8O(kY ztH`Bka*Gc(D}!PkCphVH|D}Qv;6P7@WEn_pNAw{XkYPL(3+5(TB_Ep1s#OjHrdjW| z+{a16l`J21S&N!0mn8qbf4EH^_NRj19dK5^;)?H^bGW>id;l|Fs`yMfiV8>Tk(#Q1 z{@aKb$|%9JEkkMdk&yze*;4~3;~s#^RF!Qn^7Vdy+M*P{FxT&j+L2VtAyNR&UGOrM`A-txYrcfC<(KZmq2{rhym52Dem#hImZ5 z!P4=K{4+#<^THa!K8m)1egR`wT4dM!6nq)KpULUaCF#7qf~5LI^kH1-fugBgt^Fr9tDc5r`zzmLQ9C>>0X;EI_RzPzA-f4-0OJO}rv^(kv>q$e~H?Ify_$+UgRI zp2P?_$)G-=Kr>h!4K#jio2q!MZ@+p`426@`L@pE6e{8Yxffy0PlK!acjlAD<&fN?1 z5+Bkv@u=P5ihwHIcP=UlA&L|faiw9j$pV`;-sYKQisekR4=U}UR$|;V?$PM|YIC}_ zGC8}|$y``DsvVvsjLKzItKM2$k&DCY#Rk@VFm3jBv~(}stoS%zMucs%2D^5C_I_=) zVvD{SOYd|Ju6z;e%%S_Welb#FcT;ioZnw~VMf2eg#?juy3Sp?O{wl4G6TNPF)hon^QyXYJWYbM33KevkevlImK4 zr7@J4YAUwwlzK!rtHg&2<#aFBIPaiXx3wN z+)?ynh~<%k2z=z?4iJi8WAj?%D$!`P^p1_=W8IG322PzH59rpYh!`O6dwYs;;h57uJUBe zZTTIXzVYjU!<%*?*G>=CpEUltd_x_G6a{acTY_f35#RHiUk!YxldqriAI%SAR~#P4 z`z-PM31MYL>wecQ+MvW+Uq%H|u>d?`0w}8Bq(!y3DkHwP( zSjW=fBC6?N`x!+u-WQhFUN0TP2dKp?7w;Q#1k<3jl2f1PRp@lJZ76A<6d3>50pBn2 zi`^$CN?>>0&9Yd0-FB_`A=W)gNQz5o^yKIG#kPXLu4YA+xuzoO2UDSkP2CMf>;j$b z3zE7048tgpUpB3EeCII7{Cp@%cpQX?D$XpXrebI6_3a=RHOiSY_}tX+DH3DVThci6 zM|R_o1@{wZVKN>f%Y#If#Fc<-=o>^1Hxl3wlsbh92mYhlZ#FTEMvNV??b7>)_NA!L z+)bHqxRS1OZ}nr_R9ba+Pm5SH)5|y{5$8j>^(hP@kOx+D?r@M?rE$Vvv3QLJOfuzI z8$2!Yz$u4Yh~^7@6{CQ4M5I%I;Yta+!f>k6(gMzVAP2)BsR0i(8>^#9WI@c3#0a^$ zf@jY)AflyULK0j2z5n@lFaVZ!?kPzAVP2c>mJ8z9cWyvRKq+TaS5GbTuA`rrGEzEN zL}7D?@iZdyMIiwt51&~;R;R{e6sOId&nK}>Sb-mRYnKl_CowADhv|Tp??^<`fViaB z+?Z4#6MRI4iETd#dXE_L3{z%^I>u(1MsD=6^c7_v3fh#(W?0wNQncp0r3jKeE(4q4A$ z{TogYdwh>B^p?Z;u-1W|v!oHu{8Wl4TTy$;5G!VvZwMT;jiAg)SKj$v;gHep!; z1xuxx^B@Zkh>U5+zxYsPTl4~;aA*jYtRci4p!8c#htSt@BFGd>i6Cz)$i%mtK5TF9 zZ_-5$$;zuFgn|TI$@Swp0Q|!kENKACm?1%Wf=n`m%bd8`+z@jg{N)%d5|T6!{%Zo3 zXN(f)V>mC9u~?lr^@%Wm54F%~F03*d0pyd?(+66NVZrJTH(xPsP|^S)F)l{1keR2C zlqEyaArTpKkZ?mB`rdS}J`oZ;DO1=2mxTf;47wtC)<=m|0Wl*0yA1TRJj7eummA>@jGkbPhdu7M%v~$MuWK@o@b<5oAR>SW z@J96QM!g40h-O{vFG&*NmtxdJ2cjBoCWRh2yvsQte8B+AH=D)9CFP<1Eh;2HN~-Um zHhqjv2#oFh>);Ck8K`1LNC+`O)R5?Z<6vdU?P@91SOEe7Dg09)6CR#6keVUA0C@l6 zxpU94{aB*$O6@F)1d`EgG4_qYMZn@@q=?A-ln9Y<;|C({^C&6#A%#q%n1KACnJ9=pb;cqVfCan27|0{A z$3b8a8GE*1T9RPX2xm2@0D?KnSabg4D>Qq+?%S>oATQ4M876YWniokC0-x@85Fyvle8$4L>SJL%dDO^Y;{t(f zQR}e6f2J(4}Bzm>nRKZf1hq zgh?H9p{g>qVi$WorMp&CI<7SKBydfu#EN`F3h`lkghoEFP&WElm~uJwN(@;%rA!RC zNwt~-4p@rZJzA7;rbLg@K}w57>EKc!rF$O$DZ@zo4&*hv8A?z}{WLXO7!m=>dlbv1 zavCahSQ#$zoG`;QG=MmO2(%AL#HLCk2V-fv-FwppJ#i29G!J7&9lPEEnE+mDkGTiK zWWW$a8w_WhOXODROJ5j%w}T%8!UAfM7q2GdMs?IP!C?FY*@+vkaPH>Q=re>;r^+&k zeI7i$fp)WsOFV6p6a`9Yf~i_~ATxpUYSNaRoMlXdd)xR)DD8+XU#Za+T(J=S%)=?P zN}ABd(=&0JS>pjKo=xU~bAnj_>k(n+^znzg9WndiZZ%W?!`;fx|8Te3@ml(B`k~;4 zYoY(eZV~>A-7+rBU7U!lX9Q6&2qsOJ0~?h9p&ezK{k9`NgYo4mjdwIdhe|g;b`K3O zBj;y8nKtw#5X-<1#OFRNh>kxfey_=H1ltu$E(*@-K#2B;#(wCPR&SEh4eH$BhD<2mQg2n`DvE* ze;aVquRB^0y8uYVAT}cefGF^&u|nb_Jb;)Ra_JDdUOz%4pN;4k6f`&LfMG};gsX^+ z2I9=WARDVC=#IlU9>VyIa1P%lJoFCV=XD%}A3)1D1=Jh|i%L4JM&%%pA&=D-K8m)Y z@~>NpAPDcPWUjD#Pn_4V01t(c)aX5|kF>B|k%OwOz+hKuIKDXDK$`JXsfDL{0-0f9 zZju}%gOGV;0qF9CdLK1{<82>7K;FUoYr%!a_*S_U9C}Z_vQi9L{>D!$yH$P8M?35fgea)Xv$BU7N-X4q&3G&b)7!^?yI01DeGCagIH1*1_%dhZVBxZpemigbW29BKQ ztlLkC-doXk4iUY2TRQao(wnZvJVkWiasy+b-6QXdEhhaey4lteur>lT6%<27azNAj z9j3{^5kSiYtAM-~j~3uvZJ7WzT=lAcqri&9HTwCXaYQ}2M(_mU1uwa>MnXGe;cOr< z5mrC)mIm?V;k!S)%Va2psQ6N_Mle^zDJTrnH<@9T?VP-%n0|s6O0? zALu1mkYvd^_;zaR(%0%l9zlNp-^;K|Zso^an6!j=8!Hi`LQe#>x{-6<5Pc<*%)8>z5}CAoGMoSb`^Jbed_cG zpi^-Wa~T=Rb@u)|yBdTDMl$gbO>oGX|6oZD1;?Nb>xivFUyY{fh4GWwMes>!+6g2w zi7jQ4*~I4C5?RFs@Zr}!f@y~%z0-6$l-HmUf}_FIlcp!NB<|tcW#>D6{Y#{@jz=S> zDwO{Y9!7^XS1CiK3%2HFHd>O4Tth8B*z{CbH4#~9{b8 zyN-^v>>p^J#kAM@+^uVac9y^V&vCo$&f!g>X}nWEgjgy7zn^l?pAcHl_Blw4!GjxE z<(PwV^zf#_jI`owA0gR1g+|jN?$=bpy2|fH?_1cZhLBZHeczfIIrUyOAs@0VBf`Uo zl3_iFOjDW&bQL^QQk-OiCjq$%)YCxGtkQTRx0Qx5;4z5Ym_9o#IYBlB;%xxqsw7Ki zfoy7YT@ee0@8ebz#LnFi-yf1&jm`6Uv{{o-;v{@wbQ35k36_ZQB8U>4MSfQ!eeNGK zJbIR>U^1~ka}qQHfjryv?+(3?#Uzl?PGw90K{brAV0j7?Ra}$o_!k*UwuFTs0dvh! zP;$zf*98z+Sv73^;wL|gc0G8b7)?{rf|@&+wm}FZ;fLNCq0+#?o~ zyL0`f&)Mv+DKLX-WZ$}_cU(}l>O}~!f{v^k7>4Fofx@mSm+D#}Jg@@#Z~}2#)J2aK zn#b>homogx2EIR$-;?I%XUX_{yNX)nB)@XlShtErsuZCsc|Ql{5?ZgKu0UPSyQDgl z3S7PBQ+d?RTfG0OR#?QX((>o9_!296X`50vo;D?OUGPRIO+9*i_`Nam#xg`EVo9WR z>&uh}bgY1neAvw`ADrU##tc@qgk}YNxepfNk4E4Kl{IR2Z;aJ;8rix`+*MxlJ*~!7 z*=H*oSa=pLmPA->DIoCyiH~>K&)4~>J9|G6(M$ZLh7>u^59~%1-KR_X|6JDOWQ-Kg z*QDdyV{1h{s}R+tB0VT?Ez=aT?hQDI6f$}hq%ef|2N8lF}Za= zCSyqHmn^WeAOP*9$DriN;-b!p{V~;g&GXj}2l7+8vqeK6pLTm=D1%D4v?=^?0mA16 zzKj))zo0rr7sGr67v*GzbX6if#c3<~QHPcOPZ4#;TN?q;jGl`YVZWHk=HL>3!QD@H zW7egvJXpkZUddptt2CTBLprr3EvyLdmfijf{^2M6Y?Y+}+WEajeF9h5U89ZJ%l41T zlXi9lezE0+jL^G9ExLwz_3Dp(dIF~@pOZ+N#v`vm+N?yW!)F)DifK+-Z6PfU zCW)sqH*=#41i>;W&8jgAEtaoNscLrDESoMp!8vPx1z!tqyLGF04e3VDHO=<(`r6LR zso!EhsoYz7{2 z^0ZLET&_({gRoa1?q=?7Hl{ZewQ-t48R*sgFS775{RRvw9}QZv71>#J#u$aqVA3T6 zkZ;pKT@V*jA{CNN7Jn&_z{PxFvce1l06AA+#DF6_zm_Bk;=4xiv-rPaalj+{m-27c z>K3|yJMc(7>?+;q;BQM?g60Wk{ih|&Dkxovf7-tZ(37@KzA1)g>cTM--S!kS6goTR zMO@gALS>I0F)9V6LnYGd6|*GZC{Rb|x{#6gDg2T54~W}@bpdLAl~(x+*D@%7!30Iy=ZZi*wCaw z)8Z)m4#qLyFymR|rK<*fjb_GN;?^(q)l4U0PZSYI8N0}^@-zcPMh&%Cl0<2E>O_T| zU>TQMrlu59YuuU@XN%&|8}Skl+JWfEp6|kI8N2oC%_{y%3mNi}XI4 z`emghd=cJp3aLu4HLt_^F_v;^#Q2y5tkvv{H*Zm&!^ok7hH?eVXo6G3z7hGkqcXdt1FAgXJ9vtfX&0E2M2KCAABaf zUroCcaBBEDn@$}_BB?V$iB=phbO;O(p^3JVKf{GY)6z(93JDlhq{03Ci%v`sdKqtG zY+MysvUIJ{?hFn^jK~y0ZU#uU*ajJ-D)+iXs1a!&KtI>zxGAv$UD<-QxJtSjl^dz| z0bL_#IS+lB(RV5RMkk$IWbCb?bIUEE_$b%%{WQ^wWq@0&Jo-Zv>nha1Ut6KyF{s8| z@9?F-EFfN*onpri>++!B7-i!y|8U(+*=*X3$K=ZIH1cAbTk}!F+jGOE%j?2-AQzLb zzo4?&}kZY%kxv zbsfRkPtv0!VEBNToQd%IEcC9YeU8g`#|CqPs?@zGFDV-uCx1K_u6g93_?1pGg15o8 zl>eL}#r{h2s4Q2d$CW&#&`{|OJxwLHO7ckCMoBQ+xTLJVyM6@qpa}ix&mQ)wdnVMh zZ2dMfd6ZD2W-5IQf9~{ju^5!6Tuw6}_YhojiZ08|-X;&6-(@1Q74%e9s}9(9pafVq zv;gh3exYJ8c&&1UFwS-$bd*k55x;i@+t0vB;YpCLGZ`+EOIndnAM0Vduafl+^bJp$ zod-uV>i(-g8w}!@7l&F0ghE;wt~I{E)zf-*7Z zOgl@%Cy+U0sn+a}0)fsVc+fZT)~-F)2pja;HHW29tje1%T7S#f(~w`BNgZMh{uhmD2EMwMKI(m{4< z5J9ES{n>J`=!YGi({JLO^F8wu$UJ#}^7te7@BAj8Wx415dHgO$?x32iBl!BFCvsUz zc4hG_It(nhWedcT^56A@Zd@BCxyOzf_bUMzuJNkF>C6K&2$q6)MB-c4 zMAK*I00Cb2m?%44 zpnTvzOdQiP6pSjS)9Da!qSW59-z%2|h6wie3^Px61vZgzK8pPGthXoEXU(F#=K8gx zR16h5zft&{LoWi4Y%9Xhwd+QH;Aq+^IjO2@Oj>wT6IYNnAogL zMg@L?ZM#MvuiuCqlK~&)B{?${xtCiNopzrp`P4q?HIrcuOxqMN?lwWGW{xry%RiYz zn;)~l2C>}bO3-Q}uurMi{nuMw=~tOmGO^yE6QKcVELrpmg0t_O$IyCG_WrNtgP?7b z%)lJ44vJ?%`vzI=-8t{@5cElm#HMq$H~Pb0j9Nq^n)@tzbGk-F6u9Iy*8Vq4j-RAT zbjY##r2SYz$2kgBMl26^a=)i#nP$nY%!Z z6T=(ScEXuQZKeh1R81S4ktK6#CzKi0?7uT*nXOu~Z8mN=1gxy<1bP@}$;3PdY#>(E z45aT`@H2?}!$LV`in>h8qG(p=N8CbX&w-?KK#d4SjIPN!%Tw`X5df!Ud(T>)wA)3|GhM#yCS?~d zwwAQcD>19$()RcFT$&!!%KYck`?ag+M9Vvg0QpzbC;+{azDmVAqw^f?$~Bh9Yt zbJm!5J00q^5A%B6bpuU`!?c=Y}?TndoL){5KX)fOHcvUEBQiB2xe-(OHq_|!H zGnnrO@MeVP-EZoek1{kZ9ikEBa*17k&OP~7L$?Cn+JlKXW*b`=v~3J-NsmAinE_sS zk-pZpj23~}{#$Tp;afF*JIbJLvL&r0uX<<@oH0KwE12p@4Sq`;Z_6ZNLU_VUBCAeo zH3{KMJ@tv2SW5EK3YVzyJHC-kjR;Ou=C<+es14pVZl_N1IGkF{zY1|_uke&*K?Ff} zUQg{E9J*{e>KmmO7rAQeF~w~?oNt7^u4rT-VU~HCJ$qudd1SaIh!CoozN0RAU4ISV z4zuig>)P_E{U-E0ZL@RDRvML8%kI&# z!A>e%uky2{E~s4YkXjvPdHhEk`JAUoSFy2Gx}fXo+|z+AsXbHB20Xi>ei5UXnBV&j ze4rzv_kRGgKuy1VL0@2AlmXcAHP#=DCxc(F(fjI(}MselORcaEf-S?v>MAQK`MJ`SP@*}zzZ92;bN~$ zra%|NQ%o}0$eq0oAA1Cwy-x{$gy21>n+%LY-!yrkBlX#!PXp6NPaAl(dtWTDDAnXv zo0Q#N1@EUywc%CX1RD&XPosxXHg~GYO)(H-a7WwQ5ripgn;}PzsqMFlC{l>_rZ8|w zc0?AA_~+_IjjigU$$q`Ox!5Wc^7&ui=Wpl2N_L<^EEx?CVz~|n5+rJ{7Z?!Z2aAh3 z{j|KOHm5uPHmvRVMdr>=U%{!KHLKmS~v-?hr7+BN((=~uuP7kCq7pcmMy<(Ktc z%fbr$l5uz+%)qni=hb<2d~va<94AuGfc`eLLJ?{>33 zZ(iFnm`nmA14HHW7>M1-aJ~F|TK(g$nGY-TcFyUVU~5u0T472FJliaPv1-4_VIX!F z2Li8WMRHyklbyL^A7DCgiA>yU)#*MM7&>hk>G|Hj$ zUGeUS98FhY;yZw(!s#8cS((8-lmowzYn^CT4oIoxsdq zpk6)IY6q>;(d+e)H9b6Og)0r^Ybp;GH;EAJ*)t>tzGcA|g`Lw7hErsrzW&ml<1q=? zt4ePn!LM###AC0JX)36e8gwOF;{jayMAxz{%ByKxSfSd!br)c~1_jn_3|;JIQhM1d zsCY%0E$Xf|W9p~d(J7)(&0af8U1K+qzX}f5!p+mv!z-rLJPItqdHoSyyfY?MAfK9C zq2kIl-(X4DO=lPwtY#b1cTF~C7u^~bTGz@&d!UrUp$E9g^P)ORup}M5QG&<3D2*77 z4k9umW6PLl2gGH^7T9T}`0LZSa%?4>lDC~HXGJu)(=CUqsdmX>;Aj`+f_*h@N;DB< zdj%8Q9W9t#i;cZJDFNfzj?hH!BLs|c#pasDn9HWb99;zEU(5ZB>{2ie$* z&T78X>0r2`OAmg7f`~9f-!8`a>M$@YW$jG;Yl^I8ih|kOPrb~1n@-Em`{3m;NjPsI z27SY%%j&)F8x36B>&An=>3sG|dZ1yAPF7fz(D1POZ|Re&k;AED!XH%nBu5)WHW2*7 zieZQ-FfJw`qChSZ7%Y$-Gr+BKR15&WK$cHGmqSNu_*KsJxkt&6>qF1waMVQOBNy0) z4QwQsjnV_G05*4oH2hS{YrXk3D}W6v*$H67l6^x4uwl9O75;_sgW+dS+W5n^?{uMv zg`%63R?laUENk!4e=+dn~S&W)s2Tb z+`0+y(|)|Nl#H5A`)PHKdpY`tE)vbwvln}bPYgEKXq5iR+6I((Z^gD%Yu=Uz9!>IS zICSB#xb6Plx;q_;)>8vxTc@fS?P=&?_!;5CC)#q!rio*d9?dt}=9rRZ!q%lk+1l+n z%C}@aZJMKeC#h#Mo~q9i*R!P=S@@AMCnsog1wW0haHai)5wzie7L0jv^ z+R%{xHll4`h@;V#P7vMK4%$9)H!xn8Olh>ZHe4%*hM}r}az*-xyA{Su)r!J|&tM zTV9Gh5)#DLqWfhKlAyD2-7kZX1f5mxR15|e%6csub4#N)w;e&NT|fPivDzKK!cz_w zF=*yA7P#nrkNtE3-u0;0zeXzWjz@b09C^ClD9ur_M}XReQuppXUk5^|yM12XHZF2K z>~igM1C4Vxm(LY6_>PbviRJQWS>q)8eoSoj7~XAP(C^P;DtDPJy48N(PJdjUbKYn_ zFz9PjuB`!S-Ef_}Vjcqpm91;2isnSYu8>iW0_^Jog?7#3rq=8?&G&72YR|2~I86E3UIj+S)M-`6?6c8oQxvl>`|MEdeVFPA{eZWYd*ljwu^4*M z)HjLJW5roTj>E-WPO>+5ZwF!7MHCu0-r|-t&486}c(gcqtfK~=WJcIAE5{DC0~YHM z6@1f&M|j1QuHZd6CITK;tgeZeLXqQc=%Qe8Q&g7SRS_#Lvcf}`1&b?OVavYcwXSV^ z@+)iPGb?KrH$`RRTi3RmBP;B;u3239lQv2O2V;a14~)nU4VGtUl0!DKI4p3)#w??P zi=VLJ8~^l>RoU zoB&*iIK8zfev3z6Zu~Y64j*{^-~?$0ssuM}WSqF6A5+bN{ARjIP&tTfumH*x+C;%D zH+rLle7VROF@hT&B=`jty(GWpL?FqpIX4tPkOsY6jZnpDdn;d8*XzxfcTFvu5qw?U z?5rEsx&lS_T%rU++c43L-^A_AM9Vqg&6-r5=5bvc%3xyX%b{WvHa>8GktQTlju^?G~W6n8lmTHK(hSCx|53cUt;B8M)V#$eQJ=FW30)73U z@1F_R?XWLr399{qQ6xC+geVE3p@d^iCStpIM9M_<5RO}k;`+XavS1Tz>Dyj{p(0b= zW1=G#;7doaCJ35ngj=`oFo0`onjL!%M>nZ`O#teWKhg5>kzBwaR?&l^~E? zRl-C!O~iq%5e0Hhgp!vU%>NDov=eZ>Kx8kHbPVZZI4AQ9g-_?i@`-qb4*CR7qDpi2 z37vd6(#ktB1O(Uwtp{#=?8hHiEO>1WoZva=4!X$b-N9y&ks8j>nAZ7}W|5H-&wW2n z&l6btU=C3s?pO!LS)Q5dI+WHxAF7s`R1 zJVLa>VL4Fj;{)#d86|;cJG@g%IF0%nKF5S^@7L}W4?BPOXEu15Z1)f2s?R&?W^iDHr2aVt9E&e8Rr||dGP~9!fnbJ32 z;k`8unUL$mNgnAjadIE9qr|VtJp3aLUlFK7i{v}Nk`xs0L+c5Ew^y}L3JG}ImuIk7 z=YZKBIR=IelaGY1-9l)@I!n+wKsCvxSks8X(xIlAGaBuSdIX{80zbn%&H-`F$J~&v zTM%k%!S36IM!77(sT$BHqB)ML-g!^YDOa`!o3ybM;{v}VPgl*jBySun#%JqxyuL9dZe_E34-H&pjH?{j zieOP_B#J>+^jMrTVC4#VesC4Q;i);o#+!Z2DTr|&!wimKXL`USPZ?Uz{OWuZ!U7MP*5WlL_%$P34oo` zhlEj3VfKn6pu+qLqn|r2PAFh&<%wWXLtBjt#OW|ncvY2&kWx#v!^cOh`9Rr_=)OLE0dKM5%6z-s~L`oWhB{Cik{z_M3 zFW@V|QfHO@$G_{r)~qD9)y?kZGjHQ^4(@4@Sl!&-?M|1?2&)=~svoukDKQe;)%EFa zx!F183zK+$bKw&ZB(Z69c(pmb`{{bMv#V2tgk2pm61qnL?IBG9Xb&+G7n?>;ZJx*93=`U}hH~_v>Wheq(2aj9<5FEsv>W!)gdk zgsg~J>BFV_3*b=FaGBn!H;^)1BDTooWeArKEoj4uhjNQ~csMJbIQI^J4R!dwonb^9 zxA^K8!vWLIh#pTea6f>z=UT&j;Ld*AJDQBKZlpB&P?ruF?xUpO&k%c{CV&d^nDDiN zBf=1AS64XMJ%XOf=ri~qtQ;Nz_cg>ErcL@X(C?ZwtX#m{G$WAO>5BosX$AldArS!q z-NoFWwbRACUT*&0g%e0b0>I^ZTd|---vqW`L3s|x^^fwur!7|yH~g(u=Cf=2Vcxc@ zczE?+7PtC+j!!!F!VvX{Zoe{wSKE>_+)cWowNYjM_A9ud;rB_~tzZJ!h>hA_1s4r% zt0G7h*iMC1IVv_jy33Do@;luN=nkLKx09ZjZB<4WN4Hh=)w8!%X^|M8<+fFUy~o*3 zl|Nphwo!#y${bdXnCB!_vUyRW@l@n2=i$qZ@4ux7vcHsFjVuV zbw&f|w5kpIY-Kh|!L`+-hIWeHASEyfM7KXz>ppUYyjTpqXD*wiDE%k7NeZOH+06s@ zo7_!Nvh2ujf|BJgcheJ>n_0TQVShKU?5Nbq@WMbX^;S;x*wa3JAQf*- zX7VJl9SV{hx(x~wGYjwhP;GYA=aWi+?Fz8ftPd2Td+)z6Y8l5A-O@oHPVdmfJi) zB$~I$a1kHW;KCg4NG=9!X!Y8!yNp#oW8|`)FD{y=d^G z`(+08b_&}F=Ixt~g5QEMKe zg4^>@YPLlWW!_hiP=Kv~J%6=6U#eu;M={f6MzkQ84BT5^tT)%owgWc*beIH{u<6Y| z+-UI^tMmHuvRU5t07<~$?c1R?T4V$XC}^Rpb3N4E*f`!YP!EhGfC_Mr3M9w_77&u5 z;g<$3z{E&+fgsKX7{D?xh#_CZX&?iGNufp&02)}WGEb-hk#jR-Uujif=<{rLl@h5v1eLHUIe)x><$^Kf0y0fuC z5$#ts+2>qN(3Y>mUBlxBY@<5Rf?Obzqv^tF65vdhie*f95uhfAq;H3Ml zEoUxDe7Z6C2a{NDZZ!<>qDyS<&h1xQdO2BeHHXjV!vve#htt<2kHSs8SP-M6z!r1C zVTG?+U^PQnu3SZf7BL7BCo-+FK^Ai*p%=Ew0rQVa2QGg9Y6lkSOf9xJp6WqF9u>NHl-sWrs6v<9wLp)S)QZeqVnLe8g8O= z3*``AS=pmnMqL%%#Fe1}^Q>L|QX40H#qmSPRBNSTFoDx0%wg_8=1`E$!zwJ#jnL6+UZ$gJ>q@M z>I_qy_A)-`aq{{}3(XkyZK@jsJ$8QJi;g_vI=C(auCBb(X~u^hU?!cM$uWdPNY{rl zYa;8DU=f@3$v>$l+^>;Sdw2sPDmbl^$aY&@|8(`GYyk@_P4!~0jRr6;2ZrijqjHH2IimY3 zCsjt+QDCsJlvqOO5lt2kK4P#z@2q4M1O^AlH9$gm0H0maCd&;Gh-$7G1_=bjKC>_Z zn%mK-!wM8&&4iPO3WOV^pBK^k5tAjx`L)8E=m>P} zwCHC6%uFcmTwty8(%cIX3&?xxU{FV?4|BdgN4@_I--ioNn*FV~SRaYP;sqPVlH8PN zJc7li0#7P$4hWAx@Lc4bv06?j+*63qvx7e-0Z0@#J}?Bz5nD7$BiB@S2w>Nto)m>% zzpt8tuCCfGNZf)avV6FGR$HBrFfA=h+e_PW2CU@c^)BUvpo-P1amTUvA6X}8PW z`KPDro84x8)#{xjK;3^blz-t(xqgjnPztfQG1+Mti84@Qy1#PNM*?O{62&3oFcUn) zm?{SZjKxHsfETlwm29kBv^b`vW(XG3GM^b%Ofnk@6?3Mb$&uo4Yj`Ty*y91|XGR-& zxm1JsMHN9x8RJ(TD5Z$<0X(v;WMI@JW=#_I$P7t~dQLkR@gDu30TScm~cVx2GK& zx^KvE5j}f3!MeqcHZ;3m?e<3Vu)w~9)K+IPE?6}huXdW!D5n>0ZOS?NI6+Jm1QO&N zB#3IC&;*cjgdj$YI6sgiUheQfVWrG^?85;AkKmyXnrY*7hhZR0&P=Dk%o7W@!*GgF zStSn&995Xep@61p!jIJ(S_D2sum5bN^bYkiwHHcikT*!FS8irH@q_q~F%O@@C!rEk zj^N`kDWycS58q>I(HZ(la5>M+M?x~nJ8dtpq@Vt%J*r9{Y{fMmcxA7(7{^oCUTCQ>QlFeObuC!9w~*@c=Xg6)t+V{k&4p8+ zB}a9=Q)@CF?^3rc491P>MtUVQGkf8&Gp+?#CaGZxF!HDy?u%0Az)>$zIi=A>-jANnm&G`KNRvgjj zTC~g|W8?CwNcqDYG_8l+TG5zhx^0RZW_9_~#R7I{;?ZI(>-Ii-&Yi`pKAp>Y32p!~ z%!B?IuHlU?+MeY#zvjE1?QzMZi!ysv-0@u^?P&>oA~(J5qEB!Jj;bWhw_(s`9>Yai z{XlUN9y#tIR2 zv;mdn8&=2xRl?!L9RzB#*Wd$+w-8*3<;6D>4TCXv`%c!T!;9*6_vz`?^7^(v-C{1B zZL~zI&9l|^e7U(uKRk=g+1vHimyhe4*Xs*4ZQhQ*h*QPJL`^q;vAVh{#M{%mt1CrC zTORtCNGJzE^+ls3cQ2Ob)#9@M3zx-^xRFFVc~zUISL^e?|FYUv#rsm*lb@`XTc;z- zNayluy`-k`f%;RWgqN)tn)RJfZ{<^0BiT?i(^5aZYSy)V#iydKwC|6ri`^$zzlu-~ zt$wld_KF4bxC*-lRQQ-0QKB`jU5zlFQM1*yE*#VJYN$38l2M0VAJnGyaOyG++1ek& zKw5i%)%eJR@+v9S-f#g@8eO?YI{27t=z_J`8)E~W=;a3|RYvGjVC}$nMQ>mPB^~%vW=31Aj zaKUtT#FSMr%owji zmWdNlEhC>|0&e;e}aW z(@r$1YrJ+-yJnY@%lQnk<{CL}3GG{#tYtYkIm~Z5pRq{q5?doRDzZ;-cv$^+28V$s zhv2BZIU9zt3pu$FfDF7jq4cz17}?Tsz%(EkD<}nfZjn^{xD|>AdwqyKgW7VQPz}cw zB=uY(sZyd*g!+o1O#Qls0vA}Ndr+8c>8(O8#k;Az#Y!Kwz5U3CwNiRA5ZfA3u~7l8 zubb80YTGo_RaG{;6(@uQx8fPTVTHEh`42C!m8{DQu6D)w3weOyoLSepA`70DMysk- z=}%U>?J#L}BdJZWJ;QZAP(;&4|CY}iG%0AAd|F;KeSC~Mj1>l78(y!p2sBL{cNR;K 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 zಽ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%0ASS;wsc~F? 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≧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

rdTyeQ4Dwc3m{4>Tug;8SdqUa#$mFSb0NlHmI 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�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
CZ)X*dRQCLBMN(KBhhG<-igvUt z2Zh~TTcB$PlI`3xx!XQVKJimY8^*$qhk(Df+LSKHnS0-T3&Pd0-*#vwz zcnj~ltOtd7+J(2HiQ57xaJuvejUZOc9y`f68TlcYQ3<%{AAk=NkxADm(Epuf8O4O1SXTTd)ctT1rUV_Et)eI35z+I#>~`m09;!9BanW?mePz zyf}cTg0?p#TR(yjDJU0>2(zmVnTIi^oLa^bI;!P+RaM223<_)2D4Dqs4K2||?vL0T zT?f6S#!ar$Bm5#7hq&B3@nu3kxL_tlS@p-;U$Qp+JGZz@stU1o0JY0r=YmG%aY*?-m>IVN+w`pH@GyA?=#K}>=P~O zN`1+ZK><}>6Qqj_w~x{{_~yxb2Vef>hT`dN(u>nCW`g%eCuw&lX@`)(WpbRwX(}_L zJOlrbmEtl4Q|8d6vMQ&RNLGm~Tgq9`LVShA1E~3ZbkS5UB4l$wpZ*@uo#iT0iT?$# zf~lMC-ObR822orWYADOCN>1wH{7+|mQcXL0Jh=D%;1;2ECg*tZXAiAH9|Qju51b`4 z*Qy@4;8G!Ev6K8k^E89tG!#JSP$PlavT>0evU2(bpU8bNQ58oKP3Dx{u5s~)kOD7# zlqgn*F=0}|R4joe(NWE}H-x^I$|PRB+`eb>^Vi5E9vQ^LVGu%|$Lye;?m3a_51S{A zgXLLr4*XGiEy)B$hgHj^;K&swJ>ppqfLSNUT$U~rV5(;QjQ910(s5{K;*q*nMrNIq z;bu{JPhZbisw8r#%KTqf>QKr1aw5W=B>yKrGZ@#ejx4V(>N$#!s?e)`e1IbtHNcS} zFRjyvCm)LkJo%`f^RM&mV1W;e6uvI+2P;ekkKA5xd*(NcrR7%7P9b>l;v!-ndGX?T z@jbBN%;Ci*r=ULa)<@pD1m1d24Zn}Pb*{Yi9>0q{a@R-hx-#7Lo?6`($6fo8PftH1 z?R&{(AFT-rC!V+2R^*WO60%(ui=ScdUpG^^SN^(>OyyB6eqM760p8&f<{uPYoR8xA56Icn%okW8hzcwUGlnNB51}bRndpEg$jcoJUm#FV*Op1)vAiR*H*MvZ1>dntIx&w|d$p_m z9$$NcUKly-pPrv|x;v{>OX$s>%_p`Xxox$)(;Bf|4WcCRVyG;d_`N9XlixE*w<)6! z3B;4EP$#Mxg+9SgKbt*>F4^#%nyyW$X~gOoEglJmB_b;9HjRYU_^Y7OoYvi z?DCaj;)509@2af%Hnymtb{B zXm)M50->pwtd-)FJJ(2hT3xYuk>6~1SxMoW`%+ELfTVUX91qBi=ttw^Jn@l4>`7B9 zkVt0WB0|YDT_(9Kx+GyS0kxaQ=SQ9TN#pdqO+H#K@#K=^zWKJa7S>9M{oLy_Bk~Wu z(Fm47CL-FFOoDiEXE7>C36>{?&6}CbZJ0j=t|O4LDEa*|s(jmdGE1wdHGo?X9jD=X zsFJP*k=?5|0M!X>RpMXk~;(D-&$)Y`eB5b5|-=nvE(rcT}Cq!KU|>+uNHpjw-Y585>veP9-0*E!(VylF$Z zRG3Gf|IbD#(Ph~>3_`+R?!12ty1 z!7ZPo3NYS^Bv`eb^B>~EwIPUdWA=ZxDIAv10`og^aCB2iVrzcJ{+hqJ5nw&UfYr{4 zsv)N8A?ekrM(#F}EUo*a0 z;;KXQ>wDQ-n(Do z!g+uG6Z0GmU*`0A(fs#?_q0Z$?cqYZ*k|r_ZOg%Rw@qPowlU%B2InS+a{FXr|Gas6 z+H)|`r{(KW$jD(3G>wo-mLFp_>BHN9lJgfddOPJRg z$~N}Dl?4hf`QArg+6;AJTJ@M&hY%k8U4xIyWnB-o?%O)P;~D1(EN2=2KXC=!`mD^X zP|B0dS*jW!n+t5F;w^>JUw{|MbGbivIwL4-H$s_Ta&M1t2y$C!v8Bf_juB%k`|iO4a_0FHrCM@iUAsWs*-YPue*-hewOP3kS zb|xfM9L6n+)jCC-_D|M;DBC%;1ul~p6(OA{RJ8w`NF(KjKwZECo}r^nV=o=gw z{AjAFbnKFNri@5vol<2WZ1p2|?lAAicLK@shijgyH4l02K9qXGDGD;fsZMb8du_}N z-rYJ0+l-<`rb+3tnd7!6H01&zf`P#Z;Zwk4k23w1<&aLgg7;VMC1)pqeATm9VI-Lw zwUrbGGy@&@!zo$-%&-G-w^LJl6+yTpWv?v zlYL20{@EY%#~Tc{{+WLLzgH`-$AJ2H?SJH&3bqPkzBD*4+?P1ZzDP~hkbNaHAX!4+ z-`U`-;|bZOFyPq0<=t~{x*@=e9cp~RJLWjVWKP*{aSPw)+FyW@!k5#NiJe-MuO8q| z(5A(7C@@!NuO+VawYBBj~HWYrJE&@!S>b`lAC&(pswu$cFU$dvDLt#~S^Bh&u z2{{rloZp_lrij46nS+30QxHs3b;vTWs*O95A2iX2`Z9+Uv6jO_4gQe2fsIyAQI&CE zd2dxLla<>ZC6<$!OkR0UNDY~T^!C!bnk>4j3UgU3@w695K>vcyb&MJmy!BSwr@Vy^ zm-{*0^$~)XPLSfA8zmHL%Ua9;hToQHl!h$AM$i6y!3i#Kml#ucM2pT;(azV$My?}i4T`=O-1zj20CiXHY>^ha+un>y0^^lPpVEa(8HPDKQ6|M zy9U#D79Y7yIba|Il345(0i}D5*=ub_-#}7*0CfCRHC+TrY zJd+ThEtx!2)r56Q9|lu3D8cNFYgl{!1Ez+pr9XsS2eqe?h|g@Ira zzl8C#1)%QdJ%NYfixZG@daaM>Iu~(T5+1he zF`Ww0BZO0QvLgh$%jvt)lm9t;i>X_Q44XQo5pW@bOEK~x9@ zCA41!hvC&2Ps{3|7si((h(Nkg#uEl9?v>}!EOm5rNLEP2Vj|E#*hG)l-A9VluKOCP zD8qPNUpxq(&lTeG%bi8Jj)wyxtacg~lBn&~#1WU%a(uq%jAGsMjjhuq0M~UX)t<<> z$?cK_JMUI0z+M~It2w(`k{z2^vT)^@9x_kE=He5QA3^}VaLQ5P(jQP=zDI=!ok&P! zfrx=tQ1WhC8^Jv>VQ)S(qwXs?S7gqQb{fh1Mxibku)<4nN*4q*|3KwY_>0{ z7`z?0CqpGxk7UT#{B6m1WB!(RmHP|WOU`v};;GXjYv#rgdENX}npFcsK=!(+Qtr!= zQ3|oxQ>L{x?%pvg86jMJ__H$Tm2wXNDbomtibPwsg6BnVHO-u zk0w;<$2$V^WIUm>-FT$JI7@I89-Nn%^nh9@D~W%Q>R_#MZQL@yva*KnW&(P}8i-+6 zBn$1b=6)(mThEPDTWHeVg?~})AEn$)tf%(yboI&x|K?O;!22pbSH)a6JLFr<(&PG@ z&_Z|KzAnI9`O_(Ow+0klr!2tntEtXcLs|ro!l;J(Gco=)drC*PC6;7v9Ey)C6=CPL@leW-k*hMTLiwi(#9_7AI8Eu%j_|VnhEW&70mJ} zrW3k`$dDLxUdc6^F^u8{H`(dS??_B_qxS_A+oYgBAc|E4Jiws^F-EdkJ*yHX&E!b{`)ybn9CV3oDaGp`L08bbMmpn*kIwr zoh0zvR(725+E5ls_L{4r1x(Ch$TPUahoabB3#|cCo0ItL<29Y^G1^q^PAnnALhv%r zAw(vQLNu}}RkAR8Hcc||AK#rcD0D~p3=3M`#A%)TMyA=>Ar49Y+Y&Qwsn}*kiYD$E zUPWztnvgJShV{uwc-ckDD;D^4bx?ZfVvXTg*Y!FZQI*6Ny~U*D{*nZhR`Gp{+$J0E z4oU2dpkBi(J6#nrdJ^IdFcwKh7*)k3bW#+aw2>^M9qax+w~B#ny(82LrAI(WEzi#F5GV%9r6;ZYHK-i5mT`bj!(&SL>f)a-CBke zQ8oJy=IDHyLa%3{op2SjeLV9uR)UCxD$MN)WwHWWh5>J0prV;;LPl6I(v6#phCQu) z>*(nZW-tNC-6zq~CjV&Kad6XbNuCgs(NGx|WgKKBW?`R?^I& zM7jSGzu!v$?gxHl;GE(H;lG+uU>6zk$+ciV6?sqHc!8Dwm2tGDtLv{T41jlHjb`GW zWhB8SH4M~~P}Q_5NaHN%l&>CbM2q~a!%aQR2@)R$d=wJe)u3@9TlKO^|dI+QVz%#`hK( zvff*A7Jp7=<$wY(dY~@ zSP2=f?Zw^BZL3{~H0n4R4lFd4Frq&$nEEB|eW(B31$_*0|4aC2S$;`e@mA;G5A!p` zWE@?sQFjvW%;Bi=LrFudELRA)U2$NLrn$Y5#2nPk(5J;NyW+nZL)K{1{}IUxfCyIl z!|cV>NtE8=EP#`~q@C@hh^bwRD8-1~{}9(da~EPft!F)UU+>Jp z{ZjX(%v|J^jgOYuL4etqS%sYz4$4L!qKaiMh#gWnth8RzrCeZ!wdr^w&7U-!CNYQV zNRsR)zAU5YrkRZ3TH{??H=kX4>&K_0_dsFn%x#L3Kc8Ii7&(m~ua8K(OaALLYwjbH z0c!LA;<-;XuX<#^EyG{V`W6pnA*L<3AE*COJ?wiHt=V_;JaFu09+@&$*Is&&>s43k zTj1UtcdcNJSSB;{+!J!ZyyiJ3w^3rf}=t@y)(N7*VCAk7JSwNHmOox>{g|prW zZdh{V9MWm%F%d)-d@H$lGXCbZtc9VMmE01uIX!<>rY_Wklgc*xIc2u#h_hDbxr!0v zfWwNPCKeQ)*_vTrkHOm%B#neB+ew8NVHc8mii0>9H?J=qO4VF)+l@!ck)JQ9khsbw zQl-am(M^{mZ>~pUY@=T^qwk;-X^Y)$L&q_^{DE>{7f|NMAAY<(`F+IZQc?iFcizy{ z2WQL`x;O__tIOCQR6I8*p@ER#V^2+Wg3Q50O`2Vs-YJ4+!|!%?2eYhJ7d}2%kz>6T zL!ZIxw$Y9wh6$zv-Ht;yr`&VNqj$fElKR)6wV?z|%+MGwqA6DG%Ghot!A91Vv}RB> z9k-Qf@id~tYKddFBFfErGf?)x0swQ->2ps|2)HI#=8a4FGVHo~U}b{}`B@!AXhEkT zeWkelxbFgGe8QvW9_>v@Wa2!h8)f3vZw%RzO0dv^hG8nwh~CD$!ZfvA4tb8-r308G z_Is{*%)IHdBW>wW$MK4m#;_MF1fopz20xz7N37HXVMt&RYuv>G4W0pM_tVi zbG!w$y%zB6tY}O&T8JA4QO*?$+quEnXnf9`Cb5`GR^{cj=JYKwgaplcK2wR0GY%mb z0Tl1oZRxW1Vbbdu-8$QS+TCF3uLpH-jp`OL;ufC1#~Su2?)O$(tq&8D zIUFJ7AvJda!R?q~uFw&uAA}n-?{ahr;ZB5Ci5&fbY06*S*?ugWF3jnZm({-*xw}eB zx1DP;CCDlWc|;7aSX3kC0|L%f?k@p02G+u>arHHZfnHFBmN;YWb;MJoWMUDqrg#`w(f_q!jt6fG;m-OJG3Ylga5I(}=1jpD z`Y-TbUQ63Y%}B>JLB#^>tcDKIBBYNSx6*pZGA3*RtH}>nkFP>zTpK%-2D$kjQ*a-xr`PQXtmD<5>N%ebgV8m)sf&xk zjSo>_%^naKd<-TRmN7}T_%>m^O3A^3=4eGE0^82sM{2oeZIQm@d|n?+!!X#Vx$a{? zEhn$6EHH!gEiK1#jC`#Gv$UOlcGmjqOfakrhD&)g`n*MI0b8|~)8#fcN=cznNu@xJA%o7g^%@#nvzYrgKZvr8guAHUzKN1Ye%Sr8WOb_(-3wL(em08KIY+9}) zT2d<5yi^AYrg)`U77aJK!?1#IM@VDkR5$@NEL{OEn6Ds8U`X!yt%-CIp-a4j@AjD7 z?G*b4&2nf8j@4!CB&aw$Gg1CxYqyG9-P#ZRdLIhKY`aN5i8JDDNjZ@Xz z*>q|zbOt7A>nUKM%k0O^qJ0E8+V!v{YHyT``(BJ{HX=I zWuI@_75li=f0}QJMoF1}B)gU{EmQ@I9G40TKh16ryu6;97BpZJ zXJuEJ8k!AwoGDBvVnm!wY$9eF3fGcFjX-tHqR|`ejSBDS_WA+}=mG2KqkKYQ~qk~LVoC=;JbOt`v}ps?u5W`?!kX?+%?L zQ>!zA_|gr0QYhNS3T|Y4M4?s+8SuGta5qjW*8dI{f*~zE0QnQMH3l$e5z#Eh z;9~ZAJc7Ws&c}Y|$#6z(93}b3K8os#w!S>OPf1DghV@X%0bp2Gk_TO0vEZ;g@ULw< z?{3;$zqvxtIKIBkFaGDnA@sKl+Q+hQzdp-R9J#5+gTA11*a0145CZB6prQP(-dyASTZQq z#^`6<2H*AD&SMoO`33z^%N||xFizm`F2&i*hzTgl>NSY5>%R<l+;xg@1&#&c=85bR{tIf`S`V#WY%u>wHZ64>9e_f z(Kkzjx=ZFvrTR_#@0%9X!P%lR!!GkMs{?bi2AxlI!Bu?}q)%iq4V%y~F3e_qgxxv( z&+*b~y~y!Jn+U(gdc`0(VdIRod(nU?iv)xUC+iMfOj;^p-o%Y=g{MIF>n|Z+w%2vz z6!v|2EzmNv)UYhD7@5I#cKz-S$CW3At?=106-GJFR-Ce7ryCyVZt2S?4L!!)PAk#b zzGW4mz=A>N!k^#WFmuIUPTpH+66}gWxNvPH#hn;o zJO^zs^z_T8kT_*k%V2j*?{==MbKk6v?VzgECy6YTwW4ew;)y=qXW$dq;mabHi>Xb@ z_I%moxNs@X@K*zi#87pKQkmP+yT4A3t3))5qS%f?Vb0kZYv6qur2(l-)`vlWOdP^v z=?o~p(F4e-{L^)Z%fVHU0}-cudvxOa92f$bM&caaWiupPcJpiTu<0S5Afw{leNp2^ z_Xx!Hx=kJN_BZFf5)V9vQ?RR^F?D6=xPo|+14^`as}D#V15rrrcP-%KjUreYbu+UI zO#WaOvPD4A9~xY85>db|Jh;Z>692dMCb{4gzGC}O4q<&18F9iO(mT)b6#wN!XFwP% zQwOYU%H|w)|Fpzmj&6m z+zJ?XTUKVEh_hN{AjV|qP?DgTl}^)BD`B=%>7mPly1v)|_n?F@QVe*f=LFO^77jMl zf@5ga4??MEW$lI=#J9EBW{_$gMjVP3pWR?qKxtOQm_e-m0K3%s&x`##^N zQG*)|8MN#bS$DL^>=o&Ft~tfS|M%C6-+W<|F)v`EbETEy9eT4rc>3~t%)dFN5)|%h zADnmz8V)PYaL&YO>uf2Zv;5}U!L(0Q9{VxnIl{ZjY0l2~SFRD3A!bG!(-(hC)3KJ@ z+4YNVoOgM{S*W2!B|Xyu8{fV_$vhn?a=M3tlBQi=GBa6$Y~6&q7+bRC!N{P*`!&-O zXhnN&-JpS~Iprqyc80xBp8cskS z10P{@(of#9P8qTghdMk+YsbDYJe2NWVvB29o$m`;Y)B4#)?Dpo8l;F0cg4({f_=|d z9i6x7w&~+YQTxv#!r*yYCpllK8PKbd9R&o7v-&4{bY>;ZDOvZF&9`ACMODzld}bpb z3`1RS7Wr;n<2{8)X&#_3>;B&Mo$0f7-A6T7&NZ18KGdFhQR>TJS^qy3`bXUL`NX`5 zX{)o4SN%&w5?5~j?Guw9E}TpyzXDxD9Z{7vE0Wx_*((r?PlH*K57H$$Y&_=*T;yWV zVepCtkr7en%Lu-D1e3;|No)(zeQj?w@Rz{)|2<1PjETlMB6^K!(4{KyuIJ+tr9+JU zIPv%ie6^oaEIaOYh8plOywUM=fUL$iFp^eg%rHpPO4kbHO$0VVy`fmUs|C# zNUkU}^jN`qF5J@#@o_g3C^QB(qC-{GrC1kKBPfyRru_QroPHuYAt9&5*P(%f+U2Eo z=?~wYIfd@4NQMGVg!o)EgFFJ-Wh4I)Ae2FGY^ArhmbYcBiEYN(6t928l8&`6M>j+6 zQZXHO$7t|O_YsCeJLawF^->mJ1nUH;B20EuDVolG{8W3~BG-##$#bj^u?Fr!v>|`; zA{nudZo%Gm7&5ATcvRrj_+#6)^ZoSNK5xzbg5H-RUUoFDqQ7NZZkBDz_$H?|)x+s- zozT}#%Rl{%Sv}ly{lU-k9HH#{@;7F}DUKT_^!OdWGBKS4B)#|q$%3QB#8%28Ou0Qi z%asJ#YlUwpvEIH*H2{E3bQjER<%R9_eL_tt;d#F#ArVB7NsxS`$M&1{7b%RmoW4KV zR;F=e(HtWdE(lHMP!ZR1;(9aeHsEO=YL7#9*|%(>&tgRG*CJ>l#50T*2_}wjP-Yrb zDKj$fBGExhLt)fr)}SYWT&DM|ieLis+%CRHtGSxI^ev{snF|LO12=_2h6}4Dci|Vo z6DJ-+jJn`Qku;FnTK9k2AR)6+m|L8P!WNYvFLV&q9ufat@;vaspHECQuAH{wIGUP< z>Zl1)=Z@H*K6FtJrp!9F_?KpX;yS9;#*;)v48X%q5$mAlxXc(2cP5%x?Wipsb9@l2 zTlnEHWX*34=n^bf%`nURWxN3AN zo6U7-6`)+n6vxGphp_w`Lb=7*aS0DgL>eXbb~+;220D=3Wgy7ouM+ zzA!Z37mxf?ExvR~Lz>)qiR#(YJGlrVCc1v=AY#3^e|_gY7p4&Mwnzt*A;4--o)zwT*vN?UWt}0GixVL)8Wwzs`YjEef~(`|;B} zq?wXOT9)(?J$}*vM6R)wL6VcIxX`w>VF7Z3j6{v+=PsBPGJTx9w!z8Wr4oa*EiX-Z zx{hfP8+8x|`)^l@bF!ZkL{ms>(RR0QW0hg9tZ?#q-W0aFIU~*p6s@O84*SL=hKh(0GDZ!cr0@(WOTP4OPW0l2J!scaEjsP8hBKkoF@~wQs4*hh8U` zS-w6Ii}DZ&Td&{z*af=2|6l@tqvS0S!a1^I_n-FZ!0&nBT)7{fRs2`<;0o{?BKvgi)E41pl=P zZU16d++pNX)TU3aHZ~ux*Knc5jsVYM!)yI_lK}8PIQzH)q=2rq zFI@BS($WS)w||+NJ83PmM@K{eI846C08V3{HawrJ&Qr?sf523qH7mUCs+*s76)dVd zCl({4Gs@MhDRKX1fWL%&vmn)HfO(+)fu|XX2SC`J0uXkCuKg$MP6K@g2)lh$9uu=3 zNO-qUL5!S>TZz)}p&nVtC?3M1K~G4nab{&z>pb9JhKaivH=K!>J&kEWTTzQfUu8Sg zfOZ{g+K5W(cg~ky1o0U88N|s0dpLc_uT7f}LbJanbXx<`-3xZQJypF68qQ1+$9rxLM`1o)pvFruVO(shauQ#DdBK&8!&rnJ$yw`qIGG=q+%x+)j&Y!;t0LGj z|GaN$n>h!PYL_cYR}{PPE3Jj@qhMeC`QI%3bAfF?N5oo*bm{`*n`M_Cv)4!*jp|DO ztNe*@I~AC5S-cJ|`+d@uo7b02JY%%6bDJYpN{?}#wA>dhP(E~*RxoL1N4ve{>1OcWI3$|h%UP8^L_x%LWepQjTXs;2p%#O~x*p2#9_$tO=Ie}z zVRMYaN^ycab|`^)h{4VQq?wEE?@NmRS43^%h;U-eAk)?PEbYUE)5? zFX118UizEAdv0DH$2%EUQZ?61j*9u29-8M#>+uQy6u)0?^SnGp46?7zD!wlRZU}Nb zG*3F#Tl{P;6Yq7~t6P|S$eb#s`rns=^>j6;%{C#ZZYvtVOOO6|63cXL> zdXE0&7%~lFy9~XzH7oG+X0M?dY?6jbOdKI+-qm1P`O(esOkh}tT_cvR-C$;#=^lNl zdSZ_(!)nVyv_&xI|DRqncgk$@T2k>k5_}b2M!fHLh-Eo!r#(e)v~-DIG3+o-`i~Rn z7vlv!p5e3Ovk@kSsHH~|_?491CS}LPESVm}m0E=+{Nd~kU&7V!6`-bCAA6!o1+(L+h1HKK|qMH?6!P&*WzV^mAs;5 zb{%nA0U%26dlwKk=8XE?E@+i*v9CNlofRn~6iXt;{Rw;{!e=A+Vx@SPRU+%Q#$!u0 zj%|SON!JX6M7J#fiJBON!i}Nx&ZTv(n_5Iy(~{1Vc0~6EwSk(T0pcS>%lO_DNzq!% zGXj|h@bXqMWKq@B!PUbt)xQL=k@cfMhkrsY$%qn(2)~U$4<+c^)h-#+S)8$B68*B5 z)b`aGvB)8=B>hcVnW)03F0Kp{24E{XcI|wp`}CF4!*q!-30dgtwL1&EIAbiA?l{h* zV)&2rI4Y2L`-V`UuDB(qIg|Tu=Y#7#j7J5S7!QV_>dlFl^$- zLY);KlyZK&(!Sfgb^%etW+NzToj_+Ux4SW&c4{{7gIlK=yRb}J5r+*X94g2pY$+y# zRRNC&KKY-bibiyBrz@7o2~O|?@!$Y3qRN+XEF<5E=E{9c*>rqp`R+_s-8@u@7^N2G zc`;OL#0~LFLkXwf%v{~Li9;g!gy}W5J@uZobzIDkr1FYd$j2QvOTff*^3^D9Zt+CCUD2CCw+<42kAx4Wf!7`M4Y}{!J>4inP6MF&F^lZrDKr>@kJgy&%%QT?E7qsjF{W!0v zk|#h%0GlkZM3C@!x4alpn}(d`IExW5=cIYeqGmF@il)HK#7EjY6)AL!Q5zIPB;Whd zOSl!8G#Ww#?DT55|8fZY8GzLPBPp2KJm}Hqt{eBV_f64b(;FZVj4*56SF{5emoW1s z@#6O%D!T|+fCE?1BSGQiLK4*tQyERNyxbDo(#0?J6b)?_x**-j5Z-*Hay4|#y^Rv8 zSt&fR5MvTha+DVD9yOenP05^yscjU%f`KW#O*=l((eupSBhkCyfFf?s3J>vJ<~YBJ zhZ2Z5p7}{T;)B?SqVu#sz(lw`I%zx%kEk%0rA2(|h%N4TGfD*MV;pzOf1}XI&8BlL zX?nh>G_n6n*`5yPu@Sa-j%^-tk8IZ`!+p3)-0~!TQ;GJaTl3|vWZn{$u&G`Q0Jr&Cs?|IhEiQCi}_3lFX z69z}Kw3@140rgsyVr11T_4@7%hi>fFvH&-O*+iRaT>(X2mGaA~_e`tCS5zEJJ1tez z#ln|1*{uQ!bxM|x&2Wv8|3wLTE+fO=>MvN|C7hT>f#4CD7;LAj1`T3T8j=PD`n;=_ zwgv~u2k?gsD$2~uZMBR739gPNGyS|TbE9`wl?~pF z%Q@S{w`Y~n9qZeNUnxc(-mT{70jDLI?=qmRp*aa?PuG@>Fh(S&HN4JXJG_*Pj0+9uW*ecVI-X>|VF1&lKXoDRW;#4-5@kC4CabeBq-Dlz)xkQSn~KFfwD zVYEJ3ATKYPUuWKKt2^V2!0G*6M#p7zKgV}8mk-M6?GP~fsOP_x=>4&A@2)TKeS%L& zHf!L_?xVy^prlyG2;@=VFZPdGWFwD?c82;hTHs!hL`4~biH|Id)}}}2CaXWZRGp61 z?p&pF&bKT06!~-oTJ@tJ+|y-|axqIun)7!)Vq8F*UMHRGV^PJnbnPR5y(2~~4@M5{ zsZ6*l#IGo(d!w*~pbdo8AScL)b->>96rQ$Rpa~}kIM?By9j!Hk9MWwIy`fcdz-9md^yl5VZK)PMXm zz0`HZ;o1%Y;>B7KEk-8ZbyM>D!Yg+Qtw6fPZ4oo+q$35MlprD5=9y)*KZ(g*c>|w6 z0!D_%y~+BJ1eN178c7F*WKO_Ui}cAO2QHPTpHi(8sws%s4+Y$ajd#F#MP6Qa@h%AC z@J&41?ihxXETR6N{=lTxRt_Z8_J70^xkoa2mipXaX0?NkQ$NFcetrLl!y+9Y$pc9C@s#%D#gWL*6FOzZd zyddlJFz%)`#RLlW?|ykmfEn)oemp`rd4+hMCI=L~rl5>;{S>94OG*>5q#jUL=DpS& zBYWIYrmF{Y!9H`~uC8%Jk$PQHMKGMG^81_`yl?w*N;Jff?wt|DxPrBAe2gmoAtmmt zd$b<;y0$VS6>HBSo*1D5pO{X$Z)y8H5fwUZWYP3~A8t)%@ek~1mQ^v_G_!le?bvIN zKV4%HW}_4v>a0b-F)>C08VvZRnGsV5XK4S?Y|CMtHD@-ugnZk4UZ7X^j6{w>vG@}X z{F1z3bJRoVN3VV)2EE85^f9u*^kasV));f8 zkna-gd%?SL;BEmo(*w*drTW?X+L072n(8z>0uf*WxGrLI%c5?`twev96`?d$JiZ#gGA-LzsY|LR(z7T3Q%a&| zJn(u)P5g5Ia2RqkF?e$T3TU<8=DwEMb&Y6CQU1a3IoHQQ=d-+ zYvEdPF6iUdb+zw1ZHuIdHyLjt^7UaEw8u3(mu+bG*0vN+BYptm$drZ!V*I2~Jl-qa z!;1tRQZZ60Yi^=Np%2P@%&qByT0k}?0E6r`Fyp_YPo+GY^MlI`ot<+7+mrkLSMvm( zg#-DeutNbwKH>okm+{JQk7j|U(dig%**rD?cfR8otVjJoUiA_VxsTR~^ohghQo8pR*y? zxv&sAn4$zZd-fgHud>~4b-kMtCzhflhTUo%U6w$`@1#vSpbVM-W{q^p(%MX6kH3USzq+<1o)_+X4nQ=u^4+;7Dl2Zbi2=AEK_lJ2qxu#&UD=lie zB2e%BrJl`Z?u*Ym6B&NGAs!lYZIk41C=XJW*0d|`@-}ckSZY=@ef`=}j+y7G?E76ACJ(7lT9Qk^b40sJ}kWj^hVmOMb znNXN>OPi^TE=)bC0>Dx1GK-BV9P~i>&)POe?Y~#B| zq~SMA!IfS|a1K&TIcW`xfUvE=%Zp_7b%)C2rDOQn!mi9~`s1JsfQz6A$9dnz5VYZP zFgO2vc|GLg8TvLlFziEoJPG^Eop@}2eD6K@KH|;^mJxoK2CRj0WC_Z(czH1OyX`KD z@#^O;LG}5W_D)W4l3;U;LhxoNpaxBZn@^^N`I^`NN_T?Ke2uPxpW8(UGG9=P4>x~K zG}l@uC>M%3;nc=-R@h6pJBy_Q9s?p%u6OU<*jvSP*@m%?azWxY5>914K;qv7m{Fq@ z9`*Mr*@<@fP54{mz)OM9_-Bu|;IB!yJHrrZ-xlv4uD;FHQP5&97qph;Dr2bFV6sDu zO-i>M$9?Y(gIj^Gh zVPSQW9gWgqbqcdmHe<41cUDRoXcuu^;=pe+16vZn*Mxf8kT^=0e|Jk5myh^Fo}H-q zN2Fq-V9&!|!9wRDxwOPir`c~4!Oh%e#-U<9YC&UkW9R-BoKONq-9TN~U~e+0ZX=>?05r8KIm#X^CwtD7lQqp~xYJYQAc#uS8U-W^7M zC}!ti3_>662|JY@673C(dR8$5=nRtjfI&fInA2AOYe92HS4#9dvL{R(Urfda*4jpC zM7N#PM(qw`RO^bVCycyl-oO(b?GYnA7UQWWZ0Xjfr8{i8V*}h9)?@ff*$38C;iT!M zd@IOHtVqB^jwdi5SPgx2dNOacQHh)oJVD*^H5<{Xx>LviXxK##rSkDH5os0)cP!BJ zIgwrpC>Qh)fusE|PsB6W>X;XD3i<*92DMqeJ2}ljif7pQvQpe(TYU+~xOqO^CDIv9 z93EW;K39A&zi~ur`La<&^P(8AJJ-r$5PLVGGw4|QsS9XdY$G>rc9U^k)_!b?N(15a zTrS+qL}CcGJ5I19k`^myT~^TQbpH^a`YTj7%-bas#oiScP@PFfIOoE2UsaTpb9`S_ zqEz;|$4DX1>}{8*up8@#Lb!%Ip6vEMZ64GgYlMyN0A4TJRJh*tDWa~FR799)-e_;x9L z*HngW0Km`l*?mc015%FloPk#Sa5C zGINOLyNsndycJh8uI0iAkgoki#1nMy6-k@UiU1Q#R!$O^6Z61E4geT^B7=F>t_R$Q zP2V~9M8&m3bmEt22E2Y*MO((HZ$?%A%Lr!NQ9<4Ch}no|_2~Pd6;CnTT)E!c>j>EW z3n@vy5W((tIl{fl#brF4&-7h@FYn>p*bjTii^{lp=@7uIcd2FtMv(qOia(&Tr$X_y@eJKInd=8ktx`339`9h{-RZ(;9h3V zHPWH(;J`=~O;HU@1A5 zEkvR)+cYWuUf(qywTyxsgw(x@1_J|;YBNdrfTOiJpr^5!4Q zEKudf7KL@a4mo%^hIH7Z1DOJ~=kNCSqR01ERJxKkPz_s_q#!Kj0?+T`t67Th8~OcD zKKjAP`Or)|Y${MNzMz0>z~cKqBjPbDx<&u6bip-bJ+fhtuO<<#Gep5S?=|<1h(Tq3 zHa&gANbtk&xI}9FCK$LJsWH0g{J-|u*AMOItSu7bk@G3r5^=Bl0y0qC=Jl{%+J0b9 z5{I)e2b5hMoh+EOO(cAf1BfvDd%e3kvDaOu!Sw$$mL{mFPgn7kFN%H@&+k+FZsuF{ zU>7ufd|cnAYqoWOo}qfFK-cdoboPn!8m|Oglgz4QV8fjdQf%Li`8!P35SR-bgZ|R# znqrqAF8VFbO(pixgVEUUaE&;I*eG@p&nN_LSdJj_IP zX**U>LqvOh#mqWzzHgK@ke5GiejXg>Kk+L#{u==cj2p+;COs73fBZLY-~-j{Uyu4< zORUz+;s>Ol+KvJpAZIrsJVDi^!mP}E0$C6pBL}s81;v-Qr)YC`vQ)B7h#N~&x487A~AAKNe z=TH-Y4lUv@rdC^kf?!uNXf95v92kDk5eX8)az!V~Za_VuhzFX*TwN9apgBwnBTmke z{!Lz9Ppf@|W!hYXjI@*-OQ};ZwK8lKo2QhsrdkHfMY}OI5vb;hz#&BoVJ+UZwdRF0 zG+)p8ULha+4U*Qyn4KsP^iVW|8=u3ARxi!z(b1tr!+nFuGj&mIRYwVVlC-87lG?Zs z$R~XLN2!BPHfujqh2ZC6#c_8$*z+;uN1OV1b$A-3Gz^_P6*%60V&;neaC1=0LB&dR z9s^TN;B8%fULfUGHe%d6&&>gXoq+Gxv)t)9fB)vlN2+k%+wJq8fU3BYHXR37UBcc9 zc`B&KB2&4gmlgLi8ic2*qC>t{pO!+9l4}PM;R4J&83jLwnUY$nr8{)zKepdb z`(pQ917~fWpSDW`6|1zs_eEdyOQ$Qx1gdx^;vc+&2i+Tk&e0xWAWV!p#&CV@wSitV zY_DV0XzN)5~r%x z_L~;SlwSK6_NjKDUA(a%rTB^FaJ@!z+4O*pYcspmR6K__TMrDXpL?cyM+Ba^0*JG3b^b!sGe7Wl*4bMDf5V|?Vdulwg8|6D$V$rx*{=IoYFsdKQc!eFH`<|vv zks`=-i~J*X{-t{Mnds10B;~uB2M{&yd_);I`hT~gfm6N@Hz@sxqulPuvMwcBW&;ccsI+m9PWCj>Z26jd)Uw=YGjWA!IVI1(g{-;M5 zYIwzOURq-)z_2oik~R#M&lBiV9>myr3D^U|ii%0@A=FG+NWrx^a6-Kplfo0@_Kmyz}L1bcAk}nPl-X z&ll2)kJgEL_{lNP+va&^sx-AZ#`IxxQuFcM)2MzpB+B_x(H!JrsD3g6WdHJQ7UXEw zG5>p!sdLX(hf6cT zHeW78V+|I9L&dl;pJiR7_$N}}Bud~8RETe$(#OIkJxbtz-_cB`B1Lx>njx|LWcfcs zSO_V@+Vci~e*tDtax9`V&(PM5>X)79@5aTr(LEtRR=lN0mzMhinRiT{d!~v+UfN<- z7m^BC8)lUXr=o;~!GGg`UGOk5g6ijd@+kvYIezF@B8vB6c#}J^{Au*=WK_S&nmu)! zRymY2@v+Pjz?O|W3z$s8OR;>cYcjx1jHlyF^OlHHY%gVqMiWEaQ=84MIH#hnN8t20VLAMi;0~5e5i<-=y zy{cz!T0Z8F9zM%>vmSxL{@Q%{n;fb7)O5X10^P`fi+>X<1Ce-NsJBg<+wNBr$m9A! zqD+fn9x)0lnmlIn$_4Z{GGjw0R8BaO9{XaKuMd(;3m#{|{I1 z99`KH{ENo6ZQHi(%*3{B+s?!~u_m@Xv29~wOq{&)y}$d`z3=^V);@bzcUN`q-s@B7 zDja3n$dru;jb902K9L#|qJ6EZ>BmhXwZ(Llg@ME1^ws>COSoFJqNsFnwG4!uz~8h% z$`_dGVhJ&Ux~uLMKN`{9unO{XOD^9oglK4~P`iTI`(cty_mrnDh7Msdc; zwz3N)!y{1PLo0cUnzEqzU;HG6xc1uMc~LHnE_1Mf{pOX!^9b!*!3Yu~@!I1e9#iI( z81r!*3=upMwZ)B-FdfDjrD)RZmyI;{D4YTlazr7?8Kr6?4T$0?5)Bm_O!P6wP=;KY zzljzBWPRP4O2mQdMx8ziv2s8ai=(c`C-fplm5~*Wox18dFH7DNkD#AMLDrb;;yF2W z5RVjq5EE|7+62(@V6doc7yA7#CMA<;gPKN=ph?tyxq@lqCc|CAq7uikj2KIXR+1l- z9eKh|#@tY*)XG(ygQ@ArwD>DIcp9hw(8l1w9KoJvTLU{0pEzV_nQHZ=Qx1 z!7mrmZe{3r0WwV<-ca$RynQ!NC{<&7335>kUdel%GErGf+Xpy>6)-=7bdYB#k?V#ZT-ih@=U0T zG)GN3#B0goU-ueAF_*kj+0S+g_QU?^%ZQ&5!8w%p`o4T!s%Wl~@3Kwt+jc5#;1@9- z8^?sb>m>*p@vi{HqD%FwiRmvjS_~%$Z}UOXT*!I#4T@4em*F!`g71c#LI9~ zzJ~z=fwCsBxm7L}HMB>`@>Y4|zXBd>@^P0_aK7Wod8J~#J9o(`LChOJ$@$xxg8k-u z(JJrqN<;ja-wb6D?xql5J3}5K*@xAkLeYu^ny_=taE?17A zIf%n4N2Cqw&-1zGH{>JUmn2EY<7k*DEg+F2JbNgq5x`$e$iIu%dlmMq)>-f~MIY%sD?HF`BPfaGA5Ez>}9ShyKkIg!3rUfJWOARpHht25%e z+>#3@Zs!82d_qxg~^uMA97d(-F-6yMYS4VG<>-@mZiR^#{mfI!`vQtYmUzg_0n>Hw;iNIZVYw zKdKl>+8J$C25#!g0k@}2tYeMS5jUWWP>ai^I%z{aamhv<&M78=ivfR1VJ_JKluylh+ilR;sMD&T@DbR_vSx9oRiEJsuWYGF zH*SDBNh!t^#FPMaC26`pX*ysUaXz;sB{BZ3e3&EE@Lw!wj7J9CDFvYbG*CLE4BZ$H z-tzxASJlYcPla%v@7-DAm6e7wRW*#f{NXyvD@#cXHl0g>wG!*$XOWkxp_nk-Fe@v! zr_V!8TM$DnNL{JX%uTLx0F#lKssS=cc|t*(VX!#|C(eU$r8&(@U5SdON#1KkZCwUr z5YUyCiXn_P?3&VeI${A_U>CNYLCP##plICPY`}M7{fw`~m|u1Z^NMxbR z!#cxLNiCI4h4UnqE37dQpO*VwzEq_j^(YSyQ^PbHK z1uNU;h--?=38DO~ES(_gYtRYB2%;76eVNi6O98HTE#D8PAIiWzFjiY~O2Ju=JtI2- z?F)PkCsMaklTUFLt7M;%pXzp550onn^B=H{TzGfLqR;={9MqNnvpIl5{mu!+Fmv zrdrx<5R&NgR>6MZ`58)y2;nip8+EjJ&)Xm6K2G()jz30mX>ddA<;@ zj|SSiSGPEmrG5W%hKO?8_!f_yCx2}gc*)ln-z_9s@R7I-E{D^-F`xN+4q>-G7CB=ZfeP>4Q~Ql<&JoY zFd?hQ{QcVP-b(ZW3Ze-;*IZDmq7=}*{%D&v@e-BiR*0`F?ApPS@0S>zsbk z=kKQcq3*2^-Pv%@I42nsA1X6l;_a<&fd3p(^Q-=IukZ^(i;+FsB~r=-jr-=d72ru2 z;V{qcai!WJYjVZV$+MQaSr8LO^yp*lrNpsG z`v5Q_@Sk9Dj)Ed}A~L26<^c;Cy@)kJzQ%>ip@D_9@AzfS$oB$IhAVuZ`;QQ{`e`&F zj_IX?Z?aK!tXvdnsbL=2CcdI#2uh+Dl)$oNemF0`c+o0d8Prad6KpeQxu|G&mNh!7 zA`(-_B=UOUp@@{!BPcbZBU7?ONd=PBYd7;Ao@q@zKPu%&OR2gAil8Ho!Q_0hBp{E` zd|K0HsOmyVakYu*EF5jYzq3wI#JDdD4W(2g*H0U;c=rA;j5Q!Udr>y|gyP5Xm5PX< zXxRNi9DWU#2RnL!nkXCA;cdWjR{2CoC1NFHX8^JYu6f`qk|uFM1auNh@c2pPyUCp3 z2q8d0sGrrgfLr2rta**`b(|Nh!#;^VETbYMT_4odp5q~N)q77-FKU5h1<&~1*$;S0 z+qlC`tzr9Fp3m;^&V|i&T66bf+FB&m+JhC%P(^D;$;C*EF-`|jpsPwa|FN{MV#4iR z(f2nG;x3y&iFo|=y%iLOJ##VNJikg&!Gq%$X#fs;HoE0y88x_;fzm>zv5buXZbS-3 z*O;Urr4a*ZJ{*RMVA@v+B5*&K5xR|(3=l69DACG{O^(@9%vI;cya8kV;=n^&R zxLbvs0~vi@*tj#h{rFhtC8U+Psv&`_=f?X-L{%TFRs!k}(_y_q3p! zs@LzDOeiW)+ZR$~MVFn)pFgTapKtBy|4YBcpNk*};@SQUz>I3gvUOfyp3t1vB(i5S zcb6!`n^YDZ){DGxW{?A_sw2N%ihwrL^fw)U=mB9;3_q5X%v+Y!Y^wQO10TWZFKA)N z6jib43Y(4%;+4AR?Vcx_3Rd5`yEMpnDXeFyE;@LHkxCIf>r`h2N`ko*IBh6iz>o-$ zO}^fzxA|I*?iu-d_x9hvD6Hf1a7B_XUWsg(`?E@WaFRdUdZ@?rw{b`BRSo^3%}hRG z#Jo_EW>lcaKStjK;%X3XC_Mxug=xb=eeK_pFB2+BZeMx9^gKWkN8Lkjsl$VWL%}IA zpuU#9CuHO{XFELAK14wF_QLYd@WFc+?!iZxl6ai;u6^Dtz^4SfX0~2Wr#WNXu1tBcBz9l zEfqFNj*v);mn@Q|d^=F$uHiu^LN=9Xq;0Xse2?EQ!y=C(gY^j5{N!MLW^Pgqzv+g( zVmRf}230*mxenrd34ONg&y0o5S&)D>M+R0X8=BCP%hsz2z4n=yTTTdJny{!1-vJjR zW#mlRae!=PnLOd*sj>{Bg`cy<^bN?ji$x0-=Z4iTl z0Ex9gGU8xPG6_tC0<0@(v&8N?oaHgj0|TUaNnbE@mfzu(_zKjl`ps=OKY&@#LuOYa zdcF!BR#rOEwG8lIJS{fdsOYDmS?H-(Q=#Q(B)h)a!_;D}tY}JkTlz&BeHg>=lQFQHrW6(1Vh`Uh|PFWHD)w z4fX2w7Oq*E%9(669Y^RQdfQ%MHV*UGGZHNTqZJ=cUexo_)Un8aO#uJGIFmnCGp-|A z*jN@s_`S@(nPP;5a9OV7i6Ynsdu#EoyxFYr)nsEL0REM?Qj@L0fV8jU5iOlKh?h^_xA}4K8p@va=L*Tvoa}H8WU$(c{63l1_R7AhR758OGLN zTcZ6fh=bYzdBq4$l9r~S9bl|Ko68gOK3EA5eTx$}D9*xEI_ipLQKNvs4nFFT8u{3M zLD|5eDnoAPdq|m#pMFDo0@Tk9u0m8<8&))*?peEAFTdxofS&gFz0U!WqX9h7^EUL` zo;H2|af{e}1Z&Gh#Kx)6#i7>`cNc5aClxD3vmF;YeK5d7vpJOVV~e!W#d14GH2xGN zM|H8o*D%TR?n{5(kWXLF(@(1Pf@J@Dbc@>a{#M$iI%@pRGOV}*?PH0|!a z{15b2(pP3MWng2_?|p6!4y4yAkL}~KQ|zwN2^;6lcfK=GV()!%kp0x5#oBR!c*ssW zuu4Tglc7As&5$s#Ja4iZ;BNdKYxx;GO2?7&4QHe+KchE#PGpp0x|SkWYE8ttgjuWL zs)9}EiFoaD;Ban_f$u4CO%sXjMm$D1l3X~`Uc8X(jB%KN_M&OCrFzcu!+T2=jB_H6 zpN^0*CXrvxNGjP``Z!iXbBvIZMQsyE?p(OjUJP+-i|?r+1WvA;n#f;ut)k|; zg{p``_g_=?ssvzNP{5b7bZN2J`tW;ZuE5lP*FV=O2;q9*688RSNO1@LbkXh!3J)rRyNPa@lPm2 z0&?$bG)VZbD>Oo^MhP*+@BxEgmuO-R|C@p?icf;`OuJH?1xNv~dfRSdVURPMi7^Ha zi3p&VZl-bNV+Jga5pqWTCYT2(ToIy9+r|QI3OWk%!2YAp{Vk6d@*tu4u4!oHBs9}` zVQWxHtBkaGu4(8a%*P1RV=l^u6w&_sGL!;4$^4D8DCzs&2$T(Te;Os{0H)Mx)$jy3 zR_P^dDTcjO)F@%PpT&~!RcY2<$5%FLR?R``u{dDuRV}+KfoV`e2TEx zf45}`{Cr9%vDsW^+!^e^USA=AQnDr)GX{Ot2HnzgQA0XV{;i-o zdW^ue!vqtUG#t;go+^r=_F};rlI@>k1yk+CxhuZEoTWLRP&fLLd2xZPhjlIi*Xi2K z=~Qbn`0K=u`)cM~TiPUh>;I=Wtfv*Hc`hz^u>~6~$a33XE^Y)4SboZ4?k$44%rOI1 z1HH*tn@~f;DR=sI$}_0MU7`RL7t_|e^j-|RF{RB!*rJtImZUlUc{AL0R=3J<<`#gw zlQ{LTFS;%qcg|X}tcvhV0j`^HB9TR$2>G1rO;_mNz;rAs2N7qq(rY8eH=qx%RvNsf z!3ojdl;J<^N8XPaS^dS*guY6(VYvM|BF47J!~xaOe`#tv#YBVAu54bV1y3XXaeUtC zwu97$RaJg!#4f563qZB$zN|1U+9jQkqPUZ7g;I?-5G%HTIIt>tYmEBhwoskCR%u@$ z)dQFakMOZA-`TXz+u&$HY^ivD)WPtuuK1bn!@HSGQ7IiNK8ie~d-Yp*$pQ99P_$ia z?O(iqRBQ1CI}x5|_Qd)_uC3Q#31_}OY*eZzsMe@RAbb9<{oXB+@-knP#P__P97ZjjyrLDFl#NJ!#AlSA1-F@N_f zzAm9NIJ-{*tkv^*{h%MwJ|rROkR;*JiqmK4_FzbTui%X6ELTEK>wF2yZbOM#9QF4Kq2>OpDB}dD0V(n1PrxY zw(4?zsFd5}v=*91O^%Gmi`91LvO$7{y(q&Lvi1D^`*#y^Mj|tMD_WG{t#Ahuv|kE^ zS3GgW7#f&%@BuQ_$qTR&YgreydD@f|V9mzTf770j zJcV})RTH2BsU;9lR#T|s^`qLS{;p;f6D%5#dTS5d`mvRB45$vwE9kXS=#Ym^uKsic zJz}6&)z>3Oa+ALE`sn@6kPd|u@E~A#gU-mCK~{awP{@m4)QlL&sOFaw%6ux>$)g{u zKiZUrV^98I{};Lh@^ZEF99+K=P+*;EET%K&*oCjy{1s{Jm(;l9v&`taPWIXnK!-Bk zEm#_o_Kr^nQ(*+-1||XFr-=H+Y;hTa3<9$A z3<|1ST2~6?Q?2}&0)kbR0(%A3?&?Z2O+;+!*(kg&8KZ`x7?`4+cznK&fR6)R!*fW!v3?%d<7LJ(t-`Eg(NnTuY^=i!aLtVT^K>~4@1XF559>-QzLPY{NxQQZYJ;7@@CRoweVo@jRAuZ== zkQ%?p?1h!uAg0S+VcAt|DASrbR*X{NEn9X58HGD$CIVUIGo=a=@5#7@3&-dwg^ZjT zu@bt%N(p;w{9U$|R~G#FnZN$k-_qFFW~1pU|1zl{a^ zA>wC4?xW`Y^adY_&rj#Fncqw!6zZOQD?S5uYj1*IsQv8o^x%6*2Vks@HD4VZ zJ%PMb82)?2h2H!a}0PW_7@X zrKw$&MEvK5XX40?j9(out1EC0Fk`VAPd$~>cxvp(O#64#B6&Oh>e_G3^s<`wp|F5P3vs{DT8ukr{lZv^F3VarAP zFi=-B@6`z;;3m@buVkdj@FPY14lZ(X7e8Bb;#^6$6Cp*t9-Tu0fhNqC_x-OF*(rao|TxH`X|5~|j z3o6Bkcj`k8`12Hre3~MoxeEM=Y=ua!|Bt7)W&ESYLZv2hFZHg#PQ~httX^SWUshAP zZ8u1E-vRs2?=K{Ibc_gZP${m$nVZn8kvQ{y?7{lD?qojxG(R9^h{KDA+g=xE$6IJgJh9=29b`*tqUUcUVb>dFqe*xb{NAn|wIzA6a3gaB^&iz)lH#5K9K}T@Uj} zCrk{*BIyRxev%Wgu9|_FJp!$4aX7qS#+TfXM$&W}E`_F*Cy0n(6=tQP7s;k&16C!W z7+W553E;p=zDk4lIv2aBP8T7HRuO*&sOoktnTF+8`rO93UNXW!R<*=Gnp|Q5*8=iyK(V;w9FK(I&M|B?T@A@h( zDyn;ETH__8FH*^&uook*?o9c{&HFAk>udTHD0U8=6Bc@{X?F_gl(!b)+;I_Zq*EKL zN$G$d^yJY|c`MiDc=U~+-pn}Ibxg$;3ivg+>ksWfbUEioRS^tApS3)eQ=5VUGq)mc z-=FbMUX=9#aVTZMmzO!%{~*z||BxujBr>SXEB0R-u#6OkVhAvaglPzs_607^2AF8w z?MADKG)qKbe|uaC*d_TP)kmm_xe33a+d%0oo}Y5iBER&e71lXkO3)r`EZ=9&kGrVy zi>emzX3HFN2YLT=MY~lf?m!%Kd>P~3TX=Bwo#}BMMlMl3##Cls1oqqVFo_;VAAsgh zW@$ndR?TLOiBCgdw|H9_auBbm^Tc&&@R~ z;2w*v8iRet;jKJ_;RP1z(Sx$;ZmMDfnZ=_G{=%1+V9Iu0K~2E0c`0QI=*V#s-lG{E zyJobL6b@!QT-3~jV?^8kXVTR1w@E34Xra8EEJM?#iDB*KRx;8RN|)XVobo3K!d!Qs zFNe{`|M+A|!UuzKVj9T#&qa)pplf9wt0t03{{0R82Qs(Wa|5ng`zf?YH568puY$M_$vJPEmhaItfEiT4Ad zN^&5oBvi7B3x|HEuZKEs|C~(Rucr3kX;~dmn`4XO6`9u^hj@&+SL;g0eT_jc-7pU3}SJ`q?E*{8+r74B? z5f|ZwwekdQg@zc;CkynU670hB!+J^KMJsbSD9Dj+;G_+) zeUW5XRY`N6C)CzL2Y*;Obf;P!G1xYwO)+0X;rKt7?2bvonmL0J?uT%)cJ;2G#b%@% zJ6ULqv$GFfsd)+qo zYa{NHp^6Q#vB7_kC9j9rb7l8`kE&S|d+%gP(uDnB`OZ$=_tnC^0pd!O|8V735UiDx zK?W!5Bc+MNIYfwxmCGtTCDk)9s#IIz>H zE(ZCp|B~S0jvjK{&!LHY4Qt%|$fiQFZTsW8lkoF-Thm}Dut6rb@qHRW3acTz-)oLA z>xR5yc{0YD(BMB!l-&tnvBG}Nu5TQzLtC>_3`cwHULmW(IRpw2TNN}9a7<`Ft$=`o zw#M}V@Fa2VzNO`TbU~i?6klP&6jE)YC{0!scsGT#&uSlZ`^;&VI836qR6t{8>xq&y z+3f>7_-~Y`wr55B+lf6bKXZbysvCu1H%b~Mp5-FRCG0a1y$Kg^UW>bfEYvJk-JiHg z+KTXW!zdPpo)SX3Wfc0UN@)qXVn>~lj>bv|n(3&5+$Jyf{^bt6Kmw4h&7X>gb_ zy9R2vb0MKEx)^S924mNPajDH@z=B^fOl1YkYiVEk>M3CB_^83G4b;6oKUn|dgbF-M0E|q$ zxOLzu-nfUd-=f<8z2S+=fljG z1`j_5CIBWYw=42%U8LfG*`bbco9p8oaX1+CJU~2w+Yq-}dSSfp9pNBT??P!zhZ*Oe zPFId_h$oeec|ZPwF3Dm1vT#P(Gc)k4J@Q9!Fu$^#p22YtzjqS(UZ|^|t-XTGVP~un z=-2Y-_v2ltnH$RdSUEMq$#NoXAQ9ZQB=sk}|Ji=+h%ol|hE5S-sAB+x2?sC&BL#0} zHheh>!A9hi2c+DXS%H3Ulx8Wq1tRKo?-xs5=(6r?Q0hAOD5IZE3~|3PKJ!A%%kv*C zW_MH^`rE&$ph!cbgFTnJp<13kZT2CE0 z^?+1E-TmXy*JiiX=Uvj>r6dS*Lp|rPYkGV8_y2NYqKoV#`)01Yy03oh>g%ooUGvhZ zonzz?8Y-^xA8-{SQBNkQaoBrXMbsgma=9zVI>6&BR+`hW_FSARFXgl@bVP#F@ z;*S4V=1-btO{ag-{NIQ%TmF4T{I=&snTvqKA2sv->~~2(#inCFoNF7r#Kx|1IErMA z0Z1M=(z{UR)|3{MA4!~%toW}9Qd}VfnI1*Q+9F-7A9=jSy6TIL{+VZk6|ee)tOA{} zeXV7-0&77HDq6@%v@u)Jj_{M3f0oPn;^+rz95r;oLIVb3F6B9)_E?zh>>uhFBXKQA z?`a}nHg)lmWXSMnkhW_Sm*=7hI}d)0QVF@`{=)ROr6r0_(n@tcs+UQ4<0j*U_}nNj zlngye z11_*A^R-!LZj^X>50aaqaCo*@(5=$7uKVZ(wkQ%|PxG9q(bTe`lI=(s{|b?x+5>$wL&kWZuQ9bw%<4i{oy#TPTR zSd$83(?TJZ4ijEAwDO&<-^Fv{PCkwQ$G&ORHawMs-i-R&3P+japyM`6fk@fVO4QBd z$mcB2`RBiv<7sy6&T#!aQWf8sH~ULI+oA2uh)9AhHBT|$!}5X;4I?k>3nr`Bl7NjU zI##05K?@wq6hX7{jLCYLl`12CKFqpbqLwGIUCQNH}?@ogDG(x2SGy zrB=KrHyA|21j$~J{$X$`1Rs>jLW*!UhOR)Sl8VXr&&5WaQEtr!VTU2)F_sVZSPy)g2AZ)VLj@%PT zfn>wKU=aVTHqLy}6!k_=HtH2NMd~`59#8*Mwv3s~cjVmr<;>~4=L)cm~J_pOfKPdhTcVRtECae1Q>ZL~-#bi+p_kvq2 zF96e=yk=H_L>Hm!Zd~22w|5A_WfZ)&ku+^8gG%_H>76;q6VRH(g6FUYtjq0nO)e3R za2gq7z6{$()vUP0B3Kiy#p9!EW%lFg;4IOLrPUA^^>>bfMbztqZ#12;!$k3g3C1L= zhD)T7-1;23&&hGHWOViz62I*o4BZB}ZT9_DSG`c{^djB(P~_(J_c}Pa+L5e1a1BZ` zl5WE)Q7u#?nR&si( z{KoyqL~B1il_)l>F>6Ul@KhPAUY}G`^BfKcHv#o(!Ut>b8=KM&*|cu_UV`XdV+x^4HUE22)Q~muhkKEZ>iMab3Z> z1&N)?I)qX+sQJEH{H1qA{haIQmT9rTX{ov690Xf=f&8&-69EUKw?zli5Nps16?@Dd zo=T#_Q;n(e=GdyN909+#2=s$sswmH0i<|DR$#47HzCJe-%_~w@jtp`cL7T3V|3oyN zYNt}yy`GG`rB~(K?-O?XdKh0QXre1~IxYm`!KgyVVH2rj?U{EfL$q9c)c_Cdxl&TG z1pp7Hc?3K-d6p}d-Mc4^6mvs`&OGrOpK3s@tyIW#b*+P#2ADhfh$J6s19FL@m*)~` zMBh@a{o?BsWvUEMZV4X}L0Z8P;pi@)Wl(7=GJLBAhThbbKMsm3dSPr>*Plg>pQ}VD z0T(wwD~P3;rZgG)5HQcdA(6lz`lf8F#reI|2=(KLVp4i}rGI%$0s4KvkWYHLp;k!R z0C(4o?%5Wox^VUh33 zCF@}RA#V)93)*>UJA^ z+@i}1-t?B1eUYt-$I%or|U;lj;bLgplwNYm7U8X7$VZfuYF4DhdO#aBch!~{dT30ZX_x(B}H{$tG< z+vF1a6(VwBR;7c41CL7r>msGdSZo>t!Z`Uij88ePO!RUxNDsSCjldT|b zWD`t~&;ce0CJG|D!epI9r{*f+Pr~G)%7Nz3Umm?|eYleyL}Hc+ z+=sxhwl45N(lw@RzJsEVW=_A;#Fu3NB7*RALE(KUvii5;64b)=pH9$~FalIjX;W7T zPd2f6>PL%!VXarxy&9cXMDO3*9lbJ+o0+5ek;6J$$+D$r5)9l$YGgQI#$d5Czttly zsaywz+h;rovwCC_VH86jb!FsnEUOQ5IzjaB_Eq!#pkr>`hYF9MRd>Wu;T}(&T`qy2 zrxD50iM@@m6c~Ca=GS5^g_(iJNXxOotGc!OhdGw>5IWi%?s-re{5d}o>@A(!;js_w zO~StI_?kVE0MmNJ&dXwHz|1uiah82~NR-E3(8aOo#{zM~RkDj|bG{dR?3o{O;u5BW zrb%*LpkeC79ygU?*|=dJR&L}@%{{&#Dl`%uQjA3~nBuI z>>M!S=!5n2qnvGcAfdmFnGl@btll-9C~+0Tg-JZv+yTr`P1vipj+w~<~^o){{f?vUS(gcxz z1*Mw*R^S0w{`SD`kPHark3m>G;vB@NjW&DHmrV>dvznxfw{VGyJg`0?@7V5)f+9fn z+x|xq1qGW@Z^Wj^FC~g$!Gy`}ELSKW>8-zu9iurG8|`Q^l`u^={hv zm-ON}g!TGeX-R8|Q=^Anvrks#37)ayFNJNEwhcn#zshy`;9PuCdJ1VV_vn7~jH=|$ zLA9Xq7nIBE)UX|Ug`}mwbY8Q_flKlg@q1J9m5zFHrBB!Xq|07+_$4~MY5Fcyl1X1&gGc=zPv~sSp)aup={=i)pE$?5!^b9%6cK7t`eFz(_vUcXn&_C2 z?=gdrj9SjFWKmM{?T9O(Q*Vh%775^FYHtv0mD$lvsba-A?O}!gr64&%*ocvXIhynL zcc#q#or=G$Wn>{n3s%fbPu3MbJG)mS!3C3=*t9AuS$8yVMHCXcm-LF$?r{NqjHM8D zbll+7uh-Ahwxb^fvBPvFN@w+`Vs?m(r1XSEbaPofHGt#P(-L+gCGJXq-`(Y)=P|r( z2+Uxv@HGrR8wz?&cTdYxS#`3QccDA-_oP;F+qRo3_NfR0%jHTbUXsolQPplTsm5h( z$kFk`TnomrAiqa-bSM-N<28*_ zX%-+oe=tWwr!R1HXn5}JznQkACIppa*?7)_c1vCTjziK^*^WWx=cv*}H7lt?I3TDl z&l~O2&tMx%XQoaGk-MfX;^E&fsD2k6jEDXt;T(z(X0w5V<$Sof=)RkmpW8(G75RoS z_wuaC%7GLyg+m2P(oDsrvII));#Q#msi+|8J>*6l&3G=xe??H}FjUx}C%#2oG>Q~! zcW^~@HgI7DFQoWZoHfd1cizY9jDO1ToEm@p!3#QyCMc@lUscYOaV*Y%1;bhFFIbP1 z5ObFEx0w7F23nP1mnNt%Urq)Y#@%I_Y@gt)wGQ}rCWxVJ6o>EOF0?Nn`Vm5y5c%2-%v~Mp!`Uw_yC0~s^(Dl@f^Lov^7Sarm{`xK2vTs_@4UR%%$zGe03_V zTnP4~H5t@IM#j$fwwcSnO{O?V)3fp(e`h8+Irldq0Hng|*E z9MpG=oas^4E#ozkI&s7d(Ey{MQ|66OkJ{RQe_cgZun>1UD)C{c$}j z%y?)G{-uXg_9Ptm1*-uV`IZp;ar*sm75E+cL9KHa`28H{RA+}~!G4%ytT^2le_Qtb z`Jjy5N(Av8T>bre`poGpH{+0jSWbXk{t_?kX_C&Jt$CY5W&nGw7NPBNWn7anKt;-# zXJ&~lqn_8^Rc@SKg`93?sO{EXAFy+k6pZM&bZw7+uQP+ohFC`kUw16{OH1!*)S^{C zk@k2!zOkv);+BAVAUh|Hmo05E9K3^NiPC|$v-&T3H=Vlhi(E8HJhWYb$4)`CT)?JcEYJlo0#7r05<-C<;(WNVOYzGSyVmvU^PC zh@8;7aAuJX%yIM~P{qU}D3KDxx;y2btKJZ|h=07_07D*r=uQ^WCgojPAScll+kb>a z9pHQ7@fVQV+WwM`ZXrtaGZRx^sxw?gud)8qd^VXcl2EYj^bZ>w!K%PP-wxmcyr_M^ z;g0?v+qcOmEFbmz^$o2`6BFi`Z;@`sDZ!IglG>`U&uHD7ZCK?-+zO03X6|V`1LLAU zQ%YHt_uMSR5F@^G6+>Mmy;9=X@g~gT1sFpIrsi>8Z!!l~$vDS?mbQg`i8Fcp-;7bs zh`syj&I$My&mD?mxbyCm72J*|Bk=1iK9P`bef=Pyxc2L@t*q=A8!0p! z3XYEBM_^1~(&v`iQV3=-Ohi0tR3!9IPu?%?^kS*zjvuKL(noWh6Q(B{kMl|);$FK4 z{3s3U*wDd$;3S#4#AVojNOmCjAS);#qtRtZ)@o7%0D!Pvy5*B+UP4UQLfV|KBW_v!G5HllmGCdsQA_tOy5`T((Myhj=1N8u%ixd1)-GzCTjF(~ZSC3%~ejmq+6mmXZW; zI!gby_T?SObB4^BrV_I>*Y5!t1}|a`+PI!XxRg&Y>C!t$I~I&E#Z(_)kX^UGtvmU+ z$NO6T`LGfas6+MP`Z=p_Dkl8h9s&OuwJNW>%+(#=aLHSp?!fGr)WoWn>m2`{Kzs-N z0V7m*&E>FqT2A0R#RcMd*@*49D%)ZP#@ES(>jC}HHGkC0pR=0~fPe6dJnAAylMVOD z(H2&@(ZZf zmUFxPWCI4V`uZqe1mZoyYXZ`I-s{Z6Zn*i^XsR_dT?c9sxx?mE}t;5M%xs@T) z{cb#_5lvQdm2mR+133;~``J@O(&D-xmEB^{I5Ij+x)UrowLAfWXptHDThBFQOah^P zAMH9&rb0`am)c{0&hM{HHo6Qj0Ua;HmzQQ1L^%F3c2WY+b>t!{DK6GDk+ltegvM*H z3l(!j0l0_){B90(O|rs2erT^yCzhq2-HNb~zu2j-_jtmM^$feQ6|FXhWD(=76vVye zi+K~w&osnU2)GwV-b3?N=4DdchOvczUba)oah6Dy@`1+KuwBQ&;0@FL*mETS8>21Ivp{iulB zH`D3?ct%X>Xy`H0v-pj!WWM0?X2pn;R6Kj$_(ldLAW{~};;b-^a*V4N8*T)FR$vV` zheOcVSj6_KUxNVqSo8H&qwLDw$VQ1wNL?oV8kSsnt^hx*Ad^=e1Wx4ji-q){Ik_k6 znTV_b1qN@`Z_5DzS&04Pk)QpO#W`bmqSS(qO}v_4VygWwCRuTn5?qDQZCnV_l02!% zwJI7pgJ4GSTyAG3fFhc>;U=V1MUL8;!LO-=(2ojww`KZOiQI48|Nw?gD%u$ zIia~XUIgIWQ0q5S?sBnpaq|zQGki26uQ5fIAm%%IwIWo!Dn&#k8cVXED>Od_swzp4 ze1XHuU)P;)x+R`v_H)F_V-gsQNLFt1t5#j*Cc`5=pN(GhbbM+ED{=!8+X?2@8W?AK zLK1E-f$ukgG?D1<{E`jcn(%qH2{kVUc^8`KZtw2Z^&TVKHQmm_dk_5selRqjFjXTaUEtzJb30F-a((Rh9 z3HqubNuhL1Dopt&r~upD&MfI=Vfcby6(%hqNXkn4?ieYnT;}nhkB*F3NnLJtf&`&? zLnP3(Ra@WUHt-Ja=u7Z14570?8oB9p==Mj~U*r}VcF?axf95H*IjSIy|AE@xLU^_ps;|1oi|1WkPl)pNSvWeRfqvVuJX{}rb1sGT`Vyd{vcZMJ zJXRn&vMP~K=l_<>&)S8Qu32P36*7?3b1Mbq&xPl!06Bpg6!IESJtw{@%uH7ppGv?G z_u9n`yN#XUAO)bST;}1WTPMGafU=8&_lhXWGv6u$nW%hHN~7H`CobX2a`D2Szlj9u z#hN|gy_@7Uyl-+!S&0atVS#R0@MVlXD(ZPPF|Gxa+hlG#>{ae0i z0i9L|x-GjtBmw@OBX8TO$8ncG1@ESK&Plnm3QOv=cAN zqS6hgUBHGFMRuelG9k8z**7zf19{N69Fg&I@M8xP&b%64yYQ__?fiN))a$COI531M zMomOZ%9TU{98g2#D->+dp)>|`#;C2)VqanC$B*TtgF3gwEv?-jGsrwaQ#q@m>`eL>d>SbKTs zIeP<9{+Cl~>z74=Fx#bQq|F=4qfl&6?mIe!M+^ur8-^Sgo*J)*`(>v1Mn` z-wEQ9Q_xYb;o_i)Ad(vwmNx!j3z`7TltG&!@*C!)@^D#&5ZnM)SqSb;>CabVE><4~ zr3p!n^Hs@3`ea;3=VxUnSgxv&jaRgb=Hjh*3c;w8@oc*Kv{U@q$>FF~I~cvlSL~Ii z72qV}sq1*19xn#=F`4?uv_0F=`6E7{{_t$mt-8Y&*cLYr2L}CXWHMjK0#ded}#ik->kq8 z)9ZCyXb)U&c*#M~*S6J5(fG-mSPj=mclsy(flnHc({)&;yqa4O@j$<}P+buQeXvg4 z?TdUfu|~jOB_|@m>^FntfWzu>&BP@xOYY1pUm7C04(qaDq(anXijckV#x&I$|B+nZ zc2V}XL-vaLernM<$Q^{oE(Ly<)DmF@46>ao(=t(jY+s!H$iKOQ5xXh@_Iyl(=+zXc zSG&9L&vGLl|BCx&90q()z*39;h*@y}?Eku&l1*`dnyjS@FrRMAFnD%{ZJ{*YpIOl0 zb0~G#L37ORTGIrY>Y>-Zf!Oguiq3ul{^udkL=aEmPk`og5Um~jht;aFu=zl~`a%Cj z09T3!7hf-w z|JrmA^21f-I#Z`k$(;GujYjp$+y>=F6Ctf|6z5a~SlKGhKBlURs%aBO!pv>$}2mGzHJao;q=$Gb3Jpk&^c>#i7UYY^TKK#qd%G862X1(({sOHq} zF}l>A-&@skUxO15d^HoKnFo8Mvb02w7@&Q&t4N4qOR~gToR{CC zTT;dWK2cTCO^tpuD^As+sLpm(t)Av%m{+eWGo4Gaq6hQvMw-TCQ5S60EaFDmuMK)8 zd8OkZTGcYGAtA0N+;fe*Q$^JjsGHQ=GBd(F)?%j-yFM1u@`tDhy0MZCnO%dp^N|2= z2VSzWw3vpRbe@?|MzXT}IZRf z??bs}*t4uS?O0WfD17c^Iwyh{E2M9SUT{Z#-Gm!0{JT9#B*JHR1en~}*&yuvkf1{O zh1CPHd&Sw>Z@kVWOzy7h^qvZ167$Tj|BqsV@qHUcZa|U!@Db8Tbv6Mj4_H ztN>cV!iR;G58w~S*FJMIt`Cbg&JqAg6|qswV^wWJG9k9fqoHEU@UkHbhpZ+wFB+*T zM0L@kfx?$s@&jmWCVZ`}9ql%#{X|7WY3;f$Q2`bBK}nvO3WRgUo0bZKAt(3B5~}tb zF>uyDr?-6)KK=#2<-Et!F?-;Y>06Y(Ht;BJnn4$(e8WftQ_vDs@h zbMXQf{0W`>mlZ`1^ak^07Pq50Ft6v&SmOcRrmKRyz211BjcaYaTSfIi80YhV0q(i< z7DG;7?+dBIcMl}xZm`N9$se@d-Ks=5B|;cV6u`738o?#%&=>G}9W1$0J+NBJl*Kj3D;W>EF5j(Oh4 zu(geF@dnwk_#pz1v14-l^@KZ|ivDGbLc0gPs5xt-)$??;Ka{eF7&L>vJ6*|C$`y}5 z9l8ydOqHjH5yWgtWp$!2-+SCV9wWzLb{-IzZ#8=mZSE!BsY((1l}NZo2_F+N+Y;ry z%0sP&SSNeINwFz?5dkO{pOAeYLFmdY!RN^>Rc(((iR6ekf1q@gk#QYAwwk{H2VQH@ zNV4iJg0X@}BmfTu*wQM>SrZgAh%5<0lJbU&jz1|Yy@D|{zWtK+f4UHokN_SJpd)+gumk~V{IwaR#$t${_O{wPhI53htQ&r2W7;JNrQ=eD-s zKazHK2ILS*5o}?fAEdrEKYq55MC(VeBQUl3-~geCrO`pFo9ZXZb5#W9wShQ234q=k)n|L=g>Pfu{Jn?>bYNjY5DqPiT6;b(0^nwt43eAspaY8QCAh{tZ>D`1SMQ>oTig%T z+>>6rT(K&G0H9T!Y(7*cD)S8AVQ9-Zw@L&Oqq2Xy z)=%x!X?BlXp_b+5V2$tbxA!i9Sps&7h-T{c1SWbLuG43N<0nY7fO<7vBPIPbeH=jZ zHJa37cL*x6zj~wb+hBC6xrO0668^@b#Ttx2<3Z3z&BBGUSYY0_r;Q9+EIqqHLnUFu zazV^qF^{0Z5XmszOOy`O6i3JFjdd$j|@m3ZZC8qVdKkXd`&2PV&m17>Em{e9+MifP^F|H(r8VAE%_CG@D@poiZC zZu4!hfa`bpQaY4woNrP0B(@lM6iK>?;6T8m@!l9F*pS^Lhf@NR7_lo0S_j!qM?w_w zF&53x6oJ!>QQBSKA_X*XY7OW0gK#FXS3iQ@yxY7p_?tu>8SPhreKq2CMdDW%VNXT$6bWi`NqsQ$m(?W~Z*keVD z-n9y4e|v$!LiEm$HsaRg5iJy{cd3jDJr2V4VSY5U;jy-vyLR5md+5v*1-E__2RQyM zg$!MJ8nEa#Ak^E{wPuw^1fr9Ftex%-x%e$<+{c!WF21j*+v%2K59+3?vh@fh15EF1 zuCZ_rn$W>rdOkBL;RHl3iA4VGzY}--`&u^NNc)RQ`WAI9O@)^z(pe|e212b>)KQKQt z%%MP74&=7`%Oa1V816(6n!|+oMrqm~NX20h)=%#5 zIn7baubJQeM?;t?W3pMhfNz^!jr(eJ>q;)zT6?*b;5HA}*9+f!+%_Qwa$g%2kB&#r zXX1d8BK3Cs)q$jCic;3<60IWz<#HA;n0!ZHm-dR)+hZ}!+WNtjM#GhP0jv9zYe~snE5feTudXnzI~;=0C$po>EqM9*4Qc!Zig`V z9J5xekol(TjU4C&V$Ve@t^rWKLy$$RN~)!OTI;8rol~CuC2X0zqk!a5faLb|0URPb z+?p^x2ahVS>ssypGyX-2Trs|_3UW(8H)PUH6Jae758>C04r{I}gq{UkBu={owhY~a zUpjNqk9ggPl=XvA4%bMFOi`s44Xus)wtmHXsy98%ei+NHC7`AzsHwmhU;5GuyUNjD zK1CB+5ev^iS-o{OStqCpXhY^9PZz`Dy`tL%iI_INh@+IcURQxCb@ItkN~I5(t0CSS zfP6{_gpmlt+B~9>h<7-2yEUA=LQtqmBW1^AVu6nL_ua;yi6{-U-d3H9_FqV5YU`byW0 z-?+2BvU%-XIgx@=Mr0QSzPDN=%pmpO3@!+C!Pr9bxgf>DXahP^JwavxYvy7Dqx6!Q zN^3Ox4_FYJ*WLqMnWGU1TwNjx#w9R-^4@x zDUl~s4k+5heZXwP(r7o*C`orAL22J1t;n7DrmWKVL9PGqKN!@fW$$d$cs;g>i+~4& zY`dBMnIJ0+g_%TJQXhI>mb))dIdJf2c3G|A|7u3^S#oA`FWa~<$KCT^K5p((M#X6?z$L9(h9`ZtlA&w5jFX zgM}!1>o+MYWKiAYfkr}bDS|)9_?+-TqLbFM%V`4fzYT#oNhy^#K5jzc?3i&0p!k7v z_1ccH?z-&iKW5JDS^UfXQ$?Y_ep)wh<6RUW__fIkU_06N6suW@ip)ZjuT;|F$`g#l zNwNj8Br&5k6;v%Cs3J%d-{KX8Ky4BAJ(% zjWLsCGtoEgziiPwIlxbKz;!2VAi2QPd1qG92K z&H?r4W)t_rI&0ok2;APiIng~8o@y{MlVFWWt^f6k?%D2uU0@x*AekWJ1y#VU=Du$4 z$^N$i{Y6o}cMLBCpu_|fV6_mL4)8CZ$?3xEbpnms#g}zgKGeWvlmq?1_g$?$5}kOq z8mpU{;!7Ux5fYXk?c1UP=S+Mr`%c7&$R?eGFDuVNMf<_?r=yXGP+eh4|CM9k_p!7}UBEKt{^L%tS zBScQ^(2PzfQr)_&vr_v_Y!H=A;qnV)FY(}im&(dNXFI47H?PBgya;OsjHA?Rhihqx z_xvIN^fzi+iEra{-4s0zb8;MJ?MhtO+kSs4VB>|qomqj-V<#wTc8AO)B?mU@Jn08! zq6yFqX<{usa&(G72P4naU#UL3r*dbq-8F27Gut(>Pr3{o0)IHv_yu5Dob6w^$ zG2ysB*~v2b&S?y`T2#ZE$&m8|%0Y?d{6r^Wy)G&$r>8MsMG`jK{lWVGR+Y>Oj}wij z66PArCCx-N=^!zwl(tV;8yfenaBXs2ZFk}mDzb8i{5PTq;5alX@I0gK6E#=jaZg8Ov3Wwsk z2Gs{JlYvJyz!7Jw9&p5^wHSrXH)JgDj{d(*B1Gy78HuJGs1DZEsFr&VMTugMcPQ_q z)$6X_j=i=sZ;LQH8VVQFNL8U>0ObJQ!PoKM5z>i#8vo92&7>ZYoZ&;-{@|l{n zYuY{Q?-Sa4+|-M{c<^_UBg?c;j40RFN|_`ZMqB;i`bdw~TMbF7KT(r0Oz?0SBce$?R@) z9m7bZbW>ittVK0GDZmidFwWF|GiM0F@AlmRNMiZKEiNDkcq2s1KX63vNM9&r232J< zVCfzG7ihaj7iu6RFcC#q4HXS6mr|DvEYIS$B@<8>!>~c$aLrasKzd1^93K-3CE_5H@e3u0{oMs`3>%!?G?+IY^2fOzsD&NTE`d;~rjY8gY8$b38 zL;k-4bt9)&O@x1HIw0-(x$Efs{K8ep*=l%4C1Y=D?TTz~Nv&@c5%b?Yg3V|a*icDU z6B#iDTZzOTYc8x!I5Rjs$3im_@o@&t&MB#(SO7iMEvv?B8@H7jTU|r2w(Oj{jd^8& zwEy_c-rT2f&3V6Vnv>(t6a0R^{mb9!UGCH6e{PeYZ0V=0Ci)blx=w=%3l)LRz+Dm( zM5dp*Ilv-#p|y9bE6y=TMeP~^erci!!!B1x;vL3X4O{8rC90`txlv%Lp^ihySIXxz43pPRO?$hBsfWT|AZ4u3Z9&vL0KWd$0Hm-Sa3d4ey;3^< zOxV$MZ~}wih2D#7=bpM4i`D<-?b{fxjxb7%nz+zcZ`jRpW`pmu~k{VNB;_;(8J4Raq?3l?T_7@so-dPkwk!AKH>Xek!COg%#1 zU@l_;i$m?p8gfbHP*c1WGQ+$b6CuMcf1(+$IdY0JqD_5?G}3kM=hh{ZzKcs!3>VF4 zA8=nX0)*W74dC*A4p01N2=XxwKVXKS9TG7j_ifH-qU7y1DbScoJY>_4k%uJZ*nOPY zi|K}kcyVxH6D~(SEY^lV4V3S26hJtjXrE$cUp@5!l~ac(@crzhakyu)wd#@`%D9LySPX4myH&rf^M z?K@nLcBAih@e@*2gx5AN7iQHDxjCSTi-h%-7;GpGK>D_qq)DIW_`m2f{m{zK))fGN zRPq@)_&X9dYBux-``G8T5-T^fbfKWV@F=38waj_}7CS6c5 zI}OW>D9yq>`Y`v7s~c&HEP6$8%MCjv`!AA#1i5r%kC{cg zRJQ&HP-bM55WxY8TnZFX62YC>(85Yyoc$Cg4rvpi>Y&boHsb!~oW;aXe{j7s`5s(z zN&qpUfdFq;lX{fpQ)!IVy{6_AjwX6Hp)xGs@I)-10AuPnKA5+Q1GHTn15SR+dZFrkO6zc#dv*q-%e9>QL zMLc|4ybfITF0Q*|^anu|;r<7u+SdvjlRlua%OHX!=?2WVGu0-qy2?+jW%L zf9&p3V_~3P#ddOIqnic&wmnWHmF1FXs#EG(^-*aDe^MBtVpjL}e{ouwFJWIAy2Wc?G%Wd7|HD!~CK1|bvTn{1Lb1~)n6XUkAQbbq2rkFMa88~EFwF!3d)x7>pbbMrVse)oxt?CBPZ6|5M}3gN#P+?ijREE4`@Dp53Q)2}urloria z8LTWI#t5c}UT=FE{3!um++K^=~SNjbkm#>xX z*5c8*x=P5Kn3mi>vR(WESfSFoVZV{*119=d4vrzl5e%Vu+W0TGY7#h<$ zJAZr=gp7RH(xcMOcf26z;o{+vG=cPW+*Mf8fvFzKuDsKE;E`YzK~M?RG@!Zpkl^RFbQ4HAaJh=md(tFp@m2|{7`VySgSS@t4XK={V*!$G=)Wimj=%^Wrp zWNt3mtjtq!YZgk&0Y&ADp{2ko*{obdCB9`c(cN&1zh_*OpEMQJSLQF48V8qOHU)fB zeG*@C*pCZH|JxjRF`dmyG6XO!V+7395 zx-G<9>wC4x%c>tWe+{G7y?Y>}tuVC`Kn=!}%UV0({^3%3O_7w6FX8s_^~9y)vUs-Q zRmJ%e1UEP`wRUK!y8LZIC-xa30!^%S1EZrPtb6t$YxW`Hxgf3#ex=lSF%MkJsYE(O z7F41k3hwT2c?hy>Yh2HBuoTDol$?tS0-C!BPZ1ROjjd(w#9j&NKDBQ#bzbnj7x{&P zUMV`k%^96@99f%X@ZyWE%%PPP=s#rvtBMs3l7r z%9~4FCJdZ+!#$C-R|mxo6X4*9a%`S&S=vEEprxp$;fEj!7r~K#^DI6dWRvzO5y5#p zFA5;8C*cdPm+h2CAz`Eg8yaL9X2utTqBJ3hxUIS5~|}O||{2)o~1qGX6?Xj1in}Li(&QO`e?Y z@THPD)f?m#YY!t7lAaVvf1&8|PdHDSz3x&HU{UJrnZ3|lN;`w(3+4&%reU)-S8Ph5 zn7#pu{W8WD4glPnp(4PC%FA9om05tM%r9t65^betvpb~pA^kTwUHvr$z#@LLtc?Zt zDo)ovt*f781CuO`1(e?antjt~-4Ca|$6_8S{F_Y=*Mkc{pCQB#8lAbf zYP(DE@4mC7i+;8!TikEc0!9YjNlW+xtO+T`BE+|+_lxdt%Jpx6(vQr{w$lv{LhUT( zmF_r<``SsSVN^f0`kHT=n$}tmPW4|%x~V>dyDR~5d;IsCR^)qw|FhAWhqG3J3+Wi~ zk#GKfM$YHgO#!}F%{Ny##8>#28;3A}&a&64J1hg=flzBw4bCHvmvnj$hj~It*LL2p zCn9RKMp{RL-vC!3#MtcaG~n|Vp;;@&6{Gu#Ms$5B1xl-y(O_-(B!_q@yok4IpIEq1 z%5!pa2$|HmeYg&Q+!h{3>=xuPM}2(v0?gwPUZNoej{?FMCoo3A0H$~HFu}I~HLo4Qg zFo}YWOIT*?f#tBh!oAP+?9AQxuM+X(va!s-d#|C$aciBj7N)S|zzlgAVCAI2??sIv zh}IMg2;D}@y3!}{s3Fi2COEd`E zM_(Q;ao>px&)R}qB$51M1+p*Ovk%w#yCur^^hZ%kGAetB0zS{W5900F1bm>&GxQ^| zk_vG_d6!Un(03%%L1%aWDBl<<5FH`DW5{D2?$gK7cS&{8Y(zeM&=#dZ+!mp9*$1-K zZnJR)_L96shaNCa`6~?adogSO{x8XYr$Y0V=JmLHU_m(fJd%|DX7Rq1_*8vK) zJ-at6oWto1?|lx(tAg~sM@W-s6s`d(1I%717aEb|#4T>|ORSv9W*o_>nCdj;CK&Ar z)`(ou<^=1(ku4HU2n=0Eyqaso+Rbqg{>t&Y6{Ql?za^j5ss;tqX~*^9fZ~*)XB39q zgBPtg`T9RjTtv`H(ispnlxS%%DVN+hHciKPW3a-g)q90Vf>speRvK-Hz{*(e%FA$H0q&q=oK`rBKWSoNTF~4WQ(i^?tw*|IS;?1- zLZzN|kO^=o-kM{ta_)DK)c;Oa|f)nqR0F*X7J~&wuiz#rv>s7bgCgmQ~&4O4ya$NV;*X9>~~p-&&(Ky%N=*{0&Fdd zp)UKVbRg|u5EdP>Zvh#cslijkN0X#}pkgtXG6+dx?)?tE%@Sy0tsSy2aag@RrkR& zk*#(un6NA){Kd2qBZGEJy4#Cxdcyn=GVsIliuQ$wN8mL&aJyDh+|9}BqBMc;dqZHMo(0dE#NQ^m~ItsRVvWK)0g$x%o~Dr4KBTB5AEefi(od`+0aY?3<&ql-aoAwmdK5IYMl zNWP=#k#i|c=lK5A;h7i|1Pnpi8&6qE(j-M!^#_(#e#LKnk9&e$mkax}eyN7FrwI3- z1plb1J*_)uTj&^DLM4DkJ@ko~o5G-6vnN*6bi`yMv_MXEJPZ37kcBoCWq~6GqVw$^ zI&}F^VoDruwRq#`*x0dg@TfzD{`7Du2!T)n=m+w2nWgl`N+0fDxSR;vd^>^faY&QN z;YrSc_j=pdbWS_saWu%j&QwZ26@>J@Lg>a6Eg>Qi#>c#+x_PUsb(u9T109663whsRWX0Kp-d+MQmoE6c@8{{*Ls3Iwh28akr4xYqnkb zUzN?|OAm{aa%`NQv1g*C9TSv9$c0*OT;@s{D3%#;eWabIuwXQ0m0CA-=a zKU<_aN(zhN0;0c({ba{-9+ILxINOL8*2^7#DTYxY(OKAKqK<Prl(%nT!UzkQ7Aule)5E3g=``?h&YwkrsOg}K%4i~F?LJA7NIQHim z%Gm`dt?h!b)OmM>9i?`t!>%&K!(p=RJ?O2gb_y5EPwDC}?ogkTKeKCX<5*8CwvV8& zvv{trgj2vhu|5Rq5PYSS3U)!g~yN-2(;l#dd)?xiSyS~ zFxF`6eEJ6f)p&7kmmoT|j#l*q*@(e=tRG{xiYRjLl14tkBJkUWqlC5-MFN6e!%V`k z0%uC;C!a)8pwa?MU85xzh7!y6DJh_ICkQRMH6x85l6*)TP9f;z!ZqtG`HF`$yE+i7_y3EAxwQHJv8B)t zc<=tRrC^655&eXpUk4=CNhDX{PGV7(wdrX_g6L0ZBfv>qd|`-0QTKsgrs}HV^g8ALgruw6C-*FxP}nGUNAswASpZTDTnL+RU=ON&6oe**!|I#`54wnf|m)w<~2f#nNzkQEjiN%k|_7wJv)N-TigsQ$o}^ z6M_HJqOMV67Z31f&(C=0Bu+on|5CJ zHRHr)QhWa^e}1TjfVi85zjyG<`{pH!L38%lDm_xL!s;pC>3=ki0Hz}8505<>XDh?g zN!OG2oZoYUfZH!ZE=RkC05c+>rS&5aYmCJqwmyYD_3EHRLoPI?!|Eki<@KYFuhFsn*ojW_c>ULo18%z{C_5;67QL2+~Un zFm#8Lut%1Un@(pN)$cq8bP4Nl1wdpUf{PJ68RK4(duZq7mCfduV7BeS4T9452t^4K zQ{J60)tS;;Qx=~HPzo$b6%_3K00L`(wYHT48d7U-b8MdxR1!PVK z%htnx4YM}$C`Z}x04sDqGsn zP|c3%$kAr5lasEgb<0BcK*#4t!Q9AmKN4($F`nF;Bh1J`rO1TmLaI!OW;f%`94Fga zN|8plW@deJik1R(u;Kd#>#F=UqjO}`!4OHfEq_;rv84b+sXt?dM>mDompRW=|DI^# zCueUY&zhrUYuZsYMl>I-3on!envnV#Y*-PU<`C>=nm%EI&5uc)*5pAe!>qw;JK*FX zx9+{{ulzUhE~WB0ZQZULe&KxPNgatWB=(&bD3WBhZ$_?Im#UH5I%at9uhMyFX$HFG z9Runf%GaEqcDo_B0J=if40j=}TbrPsF7tb{o1lNGvUD34KzOx%E5=o#%$fO-@g?YI0&0 z=>c`S1GB9=`kFp-VkMx2_yC{tfNpzTZhpgmT1TqdZ_Cs}EpL9AeZ!?CTB(ix#HE^Y zzq9DM{ce8DkM!-(%O1i20NCBD*J4St55LY<^a;=h-;fzVosOAJTUIN+B|oj~F7K6g zWEo%l`lbP_CJK;uo4|wPxIaD%OgmSuf1crPtV1YYH7FbTB=4Vh>b??#HQFUyZ~}_* z#tMC!d$6q~Q1!i(AcK2J5+VtH^n45Gb!IOMcAtV61|bX_(~qu7vm28pf%6Xx*lOeBsB-X3b9;+ zdX5nA8>Rvu(XALSng1NG`mrV2*?>CrLNg;Hs6jIH|KoTC@ZGK|$iz7=`wWR77p2MC z<-1rZi(+OH4dj=TwpE8pEJ^0>CGw#2i4Wvfuc79-XgFhaheTxp09s3cVpghee=x|G zdlrG;hANdyE{B1dhHzEh%(edDLUsmM zicz+mEbc~k7Jh||6Gu!~Au1qjS58C*@k1qPU;npHL17DD9^;2&YB$-NH)_E8N2kBg z{3fOJvgT0Al0Vo!dzdRLB`l$xXg&~N4Eq#Mk~|s9zU{Y5jI6YY)Cp@ggK{~2pXL2$ zGiUN8ZT*f?n{BA(Ru+@{0?k6oQ(@K7_7uvY9WIq>=Qv_YJuvEmp7!u=$@S#&i$#p# z)RAy3YQi*_AbG9cB>wP&;J*g0ARR#4R-4u@)$Nx91F`$dfr*d!Zt~mFyp@{__N)ET zhy{3CG*w!e<*VJd@*A={xhyb+g|dz)X>M$l&GO)Ut=j(Hw9l!pfp4=K^%V`Ui(bcx z-dT>rXypT%8vIEF0l2XJFFG9E{@qIG4YFGpUZ(4-(_^ROPa&EX`-vdkt#+O6LXn#kjS2&bzqt-IswKIEMF#6 zJs?7jK#esVL#JkeI0hOo94?N;8Oo2GynFu)JhVS4imwwrV#iK}BTTb~Qe#BZ6oTM@ z2*CXY{`B5Pe5#v4VkiB0x+4ZNWE7YOV9F}MB`<+Wpe3BR2uI3jDd=Q4gKqkay13Nj zb*hnXHPAgWe<;?0-wkyDqmzF__{)A*&ByN~n%nI@3NQ9o-z)Qctj^~rI0Madg=Kgb-(&Pc9!YDCN?&t!N;l#1f+E33|m2PjatSSf3qV) zzC%B&oq=F=0YZhwI_H=KMYAPZ)PKCjfAseYxrbB7X@1`0Bodiue$9f+2!M8Qn{<|h z)UVsNVDOz2gjn`Upn_gdY^DgYYFPLTOuSw!L{8jsZ`Ojg=%!-O;U8NPkC)rXY-La$ zf0(5FFNaaf>ZmQ$E@?fqzVtF$P0Tga9e!|B?Ob62r5Y|l7@&(~B4nVJs^PM_g;QQU z##>M9nse^|&u*lX8-&Z<6*7_JRTim`cKicgsK3zb@oNjMd0C|bL@A8J7DnCES%Oggo-we5v311^St5Zz+{%fc$4`=biqin3!1FDL%!@Y38?H=ISlMjfjX^j$29B}0V_cUHlcaDC zRopv#*`TYV1QQ3D z!E&VA?Rxo4<}0uXu^)AAaNN*S1#AU!dh*l1H~8;iiYIt$=cRk9a46JcB7-+kVPC|y ztnxVhffyw{ilc)LVoQk>;$);5*^F4Qye4BVnI%<+vQ#w%;i!Ng9NJfuL~%sZSEO>H zDRI(GhhDPxt?vnp@<5;Fs&a@2=S$Qv-8fxjgr%9bNQ!c1Q7 zk;T#E6SUWUqhZ!tU>oaOf%8exHszW_5l69~A*ca4bjb_!hf8hl0TRT{!;}gyU9Gh$ z{My$aG;JrwLt_VgZXQWXhn)ot`j6#_`hQ|FhZ-?KF0MJ=8a_$a$a*ZG(b)O277YSF zKM#JcdVga2X8A~DkZ&UaV*Z;D_8h@9^%9^$mRjV z?yXVA-ZE)BKA>D{`LWBJvT~3=DVF}`-g~EfC{|v8DIAkTG&58hmC02roB~B2e(t*b&!V)Vu!0D zp{Z4d1o?~5@ z*~n;_e6c>&+i|P?ujL_pxqmR|Hu`fwa1cd!B(t`>lYT@}W_t40E9>)CE8^d>{5p}r z+>e3Ww#<&ZIh^n?GGloG_&8#-IUhq=$WGMnSgs*T1Jp{JvH`N|7;4HW8boJz3*&LZ zaU>RuXN0Y#806~M+bTwuPiMnIc;*y-(s0y&mAm8fEk(f~hQn1J?9IfCHlU7av12ql zvNsT5T55Ta4;aOnktH3f5i=rPcx(4QI7P$d7D($^kL05+`>ZnmBW+oK3;f!SbQ(GX zJvX)sU;fXK*fo6|6-n39#4mh63x_>i=|y-*DiBeH6hav9YSE0JLH^Ad8F$n5rN_G? z@Osln$E0zO8eDo`3JiKVl2H3mf<^S)-oob5zn@D}7Ezr#r2-_|;LBjz7m(&BC`ZRA zB4UG(eZ+)$CQIK#NrglUvl5bZ^5>Mq;PLGbafv^nZ=Z=$HQSp(BI+rg((cOp#s$wk zd_eo!>hNCD!Np_i4RuW_ zIae2W@4z>bU=hsdoy@B+#~Xqd&H7+wR!5ZQEAIwrzB5+ji1%I<}pYwf4T}p7*Mk zda60+7~l81|I()r&T#X4-GUD=N{@)p4{+HP!(yuph^Epi!6v~VRP^jlxV0*OCfw5E ze)R_aOyC+NIPaVGU8+a7J`k|#blygKLXz1))!ZU?SwjC}IIb5LHS`4C*nj>{T08*o z*68Ox_YGPnJOoAI!7?>E@*xG_el@#Z0bgUBPxGkOq;;vbWh z4_`>(ysrLDxN|WK6VSlWG#g;&;XAPk*RF!8O-|gs2Eg*7iBeKx5q$BG-mNmjLS`~# z1UA{_JP-7D(#grY!>i?eD51kDWWFR9o%1TQY~|S6X1MRSV1=Jo&4?TpS-qQHQ9mMP z1p=QDY9$Ztv2p*i^DiA@QkOvl^*NTiKBU>;#2q`@OP3aK&KquB4+E)`W8sb+ASqvE zMTmw1I}o7)`_4~;>4uFvyvA12cY|xVB#XxBryPFa0fAnU!KnmpO3yUJLi9d&AffK4T*vv9e4=5TY_QxX|f{9B1VtOeUYdG4|{vV{DXUbQk4Z!aCkT>qw zo9lLA3q3M-V;Dqf7(R|ElDkp>NC%cdbyxUPTFUPF=SLcO$FNzRQGl(tm!Vx{(-~tC zZjB_HVC(8XDI%QhpA=EuUQd5|@m?r7&}U=Uw)_?4C{erxCI8Qq4UG5|&`^N;k{@%` zyng7+2;KU|cSqGXYsYR6JIg`~)7fbWM#?}H9FoDFV-+ljp}O!WHn?uWDnT5QxNk{g zk=GF%M$fgYK~;Ts@8h8XxY5o;w4bwhl08AJt&W;7KqtI!L0}5JIPcpIbuOiG4jjuT z?M!+fpY3X6vzh(-Uq?03xb#Fm$y8hWa_HjM1UCtYT zSR#X;D3;F@`PLq4EN8?=$b_NL+($%U#DCL7c|U0)ga4+9j)S!XX0JlF0>lp}{9cln z1@c_Wdds06X#Q}30Bt=T&+t&)mQn%`)`1nfsN4dFezHVh0*R7-)sPZ*^x!MMmJrKI zg~QU0pr8tv540s9k5`X_&^ebyaNLKaEKb}}1J9Qq0lk#826Z07C;CT&^3Ll1S-~tm zfz8`P_K>LtKdA&RH*ER9{|KlJLOjFE4$06_}g*{Zr~0@rX$PaektWv2&L*MbA#v)}fzP16f!_=Dpx7XGh)5>OBGS5{(z z!`xREm|Du+PI9y++b0K9GUY)p6&BvaoBdC)Xvkl=WmkFDKdDc|_UB>4+Qe^i;D?P5 z4pWpap)VZl6Y-1QinBSzWq)CmAnLCyy!yg`Z}Jg?u+v_u3{TXD9R&;3Ie%qlvE-*6 zfgQ9jG_}9CM`L1s^gi}aKIC%7(THD59TYV+G5Cbql1bgQ!J%UUICJE}#Mkgg%Dvo2 z4b2|f8b^g_tc!Z-;P@)=9{9H}u;gNcqsNDm~AA=dQLP{Tz`du0;APr6*_eId;P=*SS>>S;2>;VcYINz*Mb?(JD zf34L>eNpP^`KYtPUwcoTRs01sNjal7vu8LRzJ`?cIo3giWPo5>Of6lq7yh|2;iUA z5=bnyLFs0%DB0|e;Tt1xI6DLRU8Ik`0bbL!^F`s?H9BjILBw`{ST$NJ-c~7I%UJ|VO8$uszCv$wbrDwe{W;v zm^%mGZ3YSL4CCqSsO#Ww*eC?B5QDMB{8qN51MMM&B~FowK_*0!l?RJ9(VPKEke6?z zP2WKGdshcNA+lceWGm2rvOaW@2s*90YDTwUhO~(ZC;Wj7)5{y&3U=s#MVS-c-Yg4X z(W(0<1d#5uoA8)|EUE*2rr>eZMu?Q(rUW}hkmFB6i+R`!UNYU3o9dtJxw?*3KP^2Jt5EhS_>p9F~=n>fm-p^P%4dw zf*6i(F?9Zmd+LJM2b2VtU7U6L;L92y5i>&wOY)*V3K;zuVT(~G^vKgOUpA7+EL_gT z-x$+99GtCrB2|MPI{i-o>BZR{vBb}(0gy~GIoAybo%7Yq)*^N;sh_c;eO}e>N#uhf z@Yf*jFig_@qkbnV@sSmbhn^!aDCC$+|%-Sxeb$MOA2dJNQ? z<#OGe6~=Soc`3`9o))>`4fl}=DMm{*(I!f_kwHuWEl=2s$n_f7zWF0Q5w^PmresJK zy)(MOTn=^NP6Ywn3V52M)DNDxLK;ocq~yxOVzN^U{v#~=A`)#KLIDWIi#Iq5)g<-$ zQia88u&RU-@b$GGrJbJ~!XvoBJ}v?+S%8YRLYqJbXICPcH@jVMimq^%y-+=VOd}G& z7=0?hM5;+=K%uU>OFtPhjx?Kq@prb8;qET?XPsOQzG{Q0Ldg02~pDY4|6@T z8-EAdagkZ1u=i>uD)RiJ&j!^3K`^NEnNP;i(X0BOlWB$$vx$S7=M00idK_%31M+N~ zUzW}=((I*i4K{E%G0+)upPxj)Cn1;v;SCLiWc&!U$=!P^_vY*LK8 zE9r7bVfae?8@7CS^0@(v`^n|~ByL5-%Zb%X{>(1JO4qYM0ahJDl3GxdWBwQ(lY@-$A6`{72GqxQorM6eR-8BzCy+qitvp#os6|mZrK^2x1jU zvGSI|w!n(Z9iAcq|LTU20PBgm+27*hg7^9S0((!80~tgT{j$ELBE|jLZ)jd{P$~wE zKbJ#IABEK(Io%^)9Aj;r-esD`Kd;EJdjC+P1qwZxrjFBMNS75jR%O@=2ev|OnB(DK z#p@)(zH&$j?B5~zjnC<$BkcHb_zB4}BSRp=BNjT&e|ia`w^;$E~tfdUsXHCFMBLQ;?tgRbV_s%CUzL(#{h$=Ey-6##=IM4HQ!92T`CDB z37Y7{UqF%?9q%@My&tc~?*3nvSn@bG#{-Nt->>)bH($fw`Ql&C{)tyn|KHU1xA*u5 zK|9N@Th1Tw-G}z|aqrFMz>xSp8t7fUX)4U;Cl=uQO|CjeU>UD!&Le_F*KC1YywU15 zopKDq8YcIWpWv_w2q0c4a!|&)(0H=9?AL~L1?6g$Qs)Y~E_j2@4($V!Z5rarBKfLi zIgpjgw|NN{0T#-s-4sNeK0NqaPkZ2hDBWvg2a%9wBK(oUPSGple!D}i_`ok%bR#5M z18iH0{HE&^W3~mYiaCbY9l;f1lrss+tI-Y5H>!nO&{Z>VU3{(_h`@qji8AtYKaf@d z&4IDJ5t*m4sW^QixKHsdmaFNDy#F*qMbDz=(Np3H}@$tCB z5*0zot@f36HIPxo;$ciwOkQOH1U*8z|chVil_CY!;?x3tI}_GV`K<5e^1T$q-y$mz1Uu>*6V3;@)wEYIVjidRWZu7%V40<+m4IW>`Lqc zk)25#3Abv+r zriN@LE%rBze5isWVXyO#mEPo=UE#8@0$(IObsUnxkuc9P!)?EB z>>85G_I9XW)Eg9}hL4bl+VAeVpvhN-Cd6?fcTggCHt$rKwNF1DGW7>L{&Rh^MMsx; zgML!Rtdd>u$mrPIb`CCXbZ%{79_ArLGCkj!T6X&liJjCXzj9+FG2M@VpIZWR1LxQ0 z6^-TCVU%-w0xsMI&f;iBNH-Ho6dOf^y5cf3%e{PDsX#Z6kOWqgv7pCjL0(vgeUw9r zjH8;Xi#%`k=t&D_tHu~YmV&LCQ-q{wS~@TqN-bSHab{Zbwv3#1-^sLar(tZnjl@fHee(r_6f(?Z7D0yc30G4tp zxi3LW-WJU^aweCkc#+P0<-KrTb3du9Jgjjbo?CDIMd~82Zo4-w;XEihru`q0kpyYe zK_iy^k>+}7X&h=tc)_2T3*g1^eMLyWhc*_$)Q;^JLQw=OE5kN?y znv8ABEO1T1GwR&i;{{nt1(u*Uw6>-$2eYE>-Et5TG}-UwwAdLYxd!R#T+TdtMs^I$ z7);*186W4bgZN?hR1HzKep> zcJ1&ad=1<1o$FytBb;sQy-&H1?uxGHd(Zwj2A_lv46eDZ2s~wkuKrJ^#U{htKh`7- zAPeT6j8!|hPo0mk(bgnoPnRE3oOR#j_iA91o@H>!F}TH=L51o}DgOJ0KhIMI*Jf@q=E3{)DLO&$E9YX$sLkSk~FS z$3DbD|H{r=(rk^TO8q0TE{%pa%(r024?p)kGuhr;1;IFPgAmEE{E=yDPzB36DD zrPcMCG4gUGH^z@#A9Aq}rh;M9yI4ZfsTc}m97OMvS*sAzItLu}F)Dzb3$3q5EB<@3 zMSt)R0LE{C7#X%Pk{f{}PLWuK2~Kx`ar^OAIM*b=&eGD9s25+HGZo{^ti;gp$c?t1 z=vwC-f}0YOLm*qOxg=Uwu@+MCY`m0P!ph=TE2?WI2oD(gM<_l#BOUM;REHmm z^UQpB_XykHRyKc{FB3;YL6!A^l1Rt5%(GO3C>GVSnd(#E&_eokmR^%AqLD7uF63%} zJN}yZZw`Eh*9=Xa)UJCMlE+xZW?gE~a{JznA&uCcmJyA>B6(PajqcP70>gtXKE%zLQjo`@tVP0#keL4%L-!93kcBfotGa2?m4F;g3z!g9SZbc z+>%o=jKnC&JC1;ib8T!YM(mdQRX<;Md)wf+5OU;hXFGFSiFs#?p~k?@OLjq&Miqn_84#jE-=7&Vz$rnHgqR7IUmVC5$LVeLLqG zrcX;{fZu^7Eyq`plwYJ_o?V^)C^#};L8O7oq^n=HnqV2q zJS2c$am+qQxwFu3SyFKc$GDZ)IL+XZN4B&3^vN#+L9EEp;3YBVD0boHv4nw)fQ%)- z%}*zS5gM7H(7o&>xc%C!Eo=UHkV{qy65y9KDMraER3KN-_fMF<%czE1Sga~%_RmfZ zhv34-D{QOB@0c)%AH}mdAuf?V8NBvWKO2thuKzf@Yk*Sxzob_eQaSYoZCwC__hWVM z5B+XO;^t0hNrJI0L$q@-EX&cI8xW5*qhOu#A^!0GR-~(sBqg4t~W%~X91g<1sG=tom z)wyZ+>J76RtLk8=UyHs0bF+8%an@~faUR`Gs!Kb3SVut7x}Bd8!s@c!9^LN~2NVa_bwJWJ8cErg_y7R)bL ziDPFOtxC-5qxDlhX{)&Cb5L}E&%y3iXcAM9YiGZ~7{Lu#Yab=mduZpE4Z;Dx0U!IF z=HQVTG-=QkoNJ@b=XaeY&vGWU>Y&&8nG`%;oSkDh1EX#??-}tMJ_1Fh9tuL00}0{^ z-hn1u-^~lefCAYBd|hQogCbB7v0dgjTRiH+oxk7(h||BLey;ytJ=#`b<%`8sQ|hgi z17~6WqW2}p;*f6?3r4fSt7?ZiAoVnNcwb3fJ)4(qX@q%sBa(aX9#*PWM0x7AtY)&g zc#0BK`Z{w!NM@?uaa;2Aah{Vs6U1tG;Y5Wx-;4>Rch+Q3Mi$_zEa*Fxq7LQh`1DoC z<%5=hAq(Y70!$qb^cVXK);2m5+luT^Y;aV3YE*K%cO0QSk0guuY>>Xt>{eG+d=xU$5S%AZv6 zxCkk$SO(t0(bB|@g3-GZCOxTXq&QisN2WBTJTj|_MUpRBx@PF+B`Dj^%0y%Xr z0mgF#R@BijlL#o6*vRr`!)LRAKK}1!jt+`n5SW2r74@H7|B>_c?SiGpeqcD%qX z6Fj(nJS54F9ZEQbeg|87mw5;>%cLJEctVPGl=BkqeSHoZtl(J{g;BjoR;AHqa$7P* zX9}Hy7@n$=hw&tWnSIpXN-eS*=YXB}78i7~x49NxSF4*$eZ$q>Z#v{z+(3 zs~3C;jUMZ3aeMe@f%o@Dx68#)K#wmFnC8W9KZk*mSa6s?OFp)9fn!J649yS{PK=Sw zgZCP)>8codOC323V>ONVAUs%%`n?o|g=MAtrU1{YC*CV+Ye84tKWcZfh+b+G{<N+ zFKy^-mrzx*jyT$EurlaTXsm71-UET(P0H98W{^H;d7v#YQL_u|6nh;J@<-tO=3el* z%|WUPM$HN*>OGtz|zS|rbr}F}XX-}`a=xKxct+z7w3c@n!;x3u)-VQNTBg;6&v z0az~=iCVv!q0!kePV#;4BtpKkX!V#k3xJ9L7($szaLIqH{8nTY#UGL=+}<+E?__1=DmV9y@Oe$ey&&A;FhOJ~g@}jo zr&%itI)z2+@>$^@#XlOO?jv*92XZa<(!GnsK=vFZPXdYxyyq+R4i{ogCUQO1c>2rP`^rT5`W z`moTH_=n_!{{D5yNAxPxQx-CrWZi-YsmT&AryJ6%OlbtJ?ysuua5|21fhHFNelT?< z&h8#OKk6SQVN?Iu;!HqH98css5UdWU#4j9o_Aw@8%4=2CDmOE0VKBVT{=9`EqESf-lRI~gx) zJHPMZ@WPxqDl;LGzK`e>2|_BbZQJ=-K3$tfSQ;P6^owhcpngO4mwxgI6Oem52gNRo zhn=*wA$JQlx-PAe&{u#WPLm^O`8v_i#&#SYH%u&h-)Px)bX@*W`+O*>uF3Dodj%r% zkqa4FjB_ADd5YG~I%g!0y?cEsG>C+1;lc)}D-)i^zmW!mzh=ZBcBgHLHWsBv%W@5)8rhPZ|l(&=%uBsDc zyJeH#Z42mb*`)cp5_%S$_*L9GpwA-Bg_!s#T|#-HBvpq?1Q-Tri)HM)H%Glmo*BfX z%R^tmJ#q^FS5C$9WQ;hwMC@==@BDeidt6VjBI5k`dJ2A$AoenGMM{5_#4!}bOLgOU z;s#s4vf#mdX>q8D*|Hz!GTENPxDdji3`{O5q}c~08{uaMHoP3*Z~xT7ev@Zeb3F&Q zPGd##NI==zy*?PXRlpumC7#D}jf@(9S?z#cETE(`?0 zS?gM^kGYPjW+w|ng(U#ri#Ir-G=EHo@7N@NDJ(w%G~mCWjke}c_aRyCk(o=;#6CC8M{$p~&BvZo@ECY^` zc^?2BFmjIy5yA|e2f&z~w9;)T`?V)+gzzk4Fdk|&U9JTOdL_Am+SaL>kCh^iuHCYK zog{ae)F06&1QNcyQ%0bYx=$1E4;BDjEf>zsCQMo;r)lGs(QS}tSX%m6yUXq5I9J9b z{S}ARoLy9wUBi#aCF_O1Cno-_mKoWnHLPxLgcsj|eV-XOGGvU>U=i`$7 zgL_ACuOzsb&)GHl@AYr=sBZn`@x3T*8uwyIS0|?5y}C_09Y z#qUi+R7I!Rt}ow^HR_Rl_oTIrdSLl{MsP?uxKKU#Eq4Ge<;mIg;=X<;*|Oaj?R zv1uTa_?C*i2=qNNc9<4BnCUPCt|{(1T6=ptL}QIzpWLot@Vx7MhvS@ef%3` zIaMrj$qNuPZ8XtSK)bizXh|qjyUL95pxf(SOb@O;7svt6-ERDuKDqu&9mc#lYu`kC z5gsut+dER^!uau4M108ji(dpGctp&eDkQeHB)>GOyEU|-Jznl@k4AqWAS{C0J1 z*l^~%CRrfquy4Y)@S{xs9Z4_*qVVT08wx|A61rg%ke_T*&1}4Cs ze8Dv99isI7|6ObsMTCO9j}H0*ma5|ONx{jYL@r`4bmzw?30IZ;45)C4!V{M3byWq( zYb7443mB^~J3nlrxx!&vuNVH-8(IC981weO=i3;pX$gyzz`{Ho9Q<9k*fnSxCgO|} zNE$7($4kGjUtZ@-b!9i-ZS*IpGN?e-x1Z+i9RjS$ZX`@`A3mPH@4qe{&iD-{K~edM zEQJ6sq)Obt<(!Qm5(cn7REFLDbRi_|S3=`a+FqCe@)O@g{lrO1_1~ zlCu#saJo#Q>;V;GzY010W!hj!hm!b~c&j*Yy+_R3){Qbh`7HnRX#A1pA1HZ#(ol;F zv1}!MW-gyHP=uuEbaBmQ}|K9RTM#Ce!Dnn~128+gAwKB~e9+2og^ddzEC&l3(G z?2LU?tZC$}<1&{l);xOPgnYhbQa9oa9|ydd$+vh&=m~yrPeC^@1!KpwJccIt^uR|S zzzY92b4bDD-K1X_7W!4GFTHI{THjZKHczv{6FSF%87s#@$jy1XKaq!q}{j+A?~RXzOHz` zCN&VdAq)@n^3Y$}pNJINEK8$#knwH|KR8LLtMhQOR*JAFh1siwWxVXOVLKG#SI`=H zFTOcz#0LLH)V=&Viz22qXd0S3`xZi0UOAR1%AUfvxXF!t_M)x-Z}3!y*w`Sxp!a1& z)4kBO441(3cf_tIC#7eV50(`*0J>5hhEwKWrQG6rF&_l?nF7A;d2rRHwzT{7w6j5RFbfdrkC|B*11@hXhsWajGPc2R#Wwb`G&|1HljA?FjVNhO69% z!Lup*F#dnH6>2`~1ks+!32n+Z;|)Kz`KzAc*9fgTo#l&a!mW!bb+H+F9;*Iw5~Z0L zq00+A3W$F>c-p zh3LJUVH>WV^k)DqQ4XBWakI<5T%4%vH43l(4pfQ#IPat!ToNj%N=ysT31Oe2vQ!hr zG6M#)82sDS8$1`PN#N@_ffFmH1T5WV3M_&O@c6O6xE109*&R^<)M7Q{PVHVC`WPE2j1diVFzt*}z$3-WcI9uKz71?F|U931kbF zuDMZy(T!A9R)MP|@s3^XUYW&=)yt;oO>9*}?yTv#+v;!_S>qW(S|;1K}yW;Q8qY{VQt)k7v$m z_4fTGlrsHQMtaN}MNpnElP+l$#>tm4Sg$#kkd@ci1tv#kw!IHbbB{N>Ip-f~ExzXg zw(Vt@!+i~2sP+pJ14#u294`f^6HLA}_2qU&N`KT|x`QeRWN@wXHp;mxR)NB))9L(Nkgme7@Jl#q$FaGYo!Wl6s2sEHi80!f8C&x zSSALz4~`>(TCRpRqO$qhBDhLRMP*-@Xk@{wO==)w-3sg!vnroNs!P|J%}m&&KgMuUsiMY4Kae{^wAi0cp* zXPj4oJ^b&28)|B#BSe+EFPuxdA1={TW*lPj1Zwmf-Yx#;w_UJZPU!5}xWE+2f8!2% z&JXcg{r7`%e{-zvbZU<}-1Mm42)XBztg7P2R8#b66ntYK@yiu!jF6G7itdrVAen9|7d>^)Nt$_v zCcafVETMymC?Bl2MEFSUJ6dztJN}!wt+hkDI|uVMT<6?*nEB@`r5nFZ02vbAWppgK za0<5TDp(w3s*Z-Mqx|#FBYu1b7HB&Ns_0#strz^uLUX%-Pw+|fHEF8hzqLr2Ke1a$ zN&Uvkh7D?r;oydY> zddvQDGQHbCI@6{@u6Rgk(;u^hEKbI9#G$E?e~2(p*ERSY{$C1awGemF%Mh5nZbVd& zH;Oj&rsB1JF-d(^o2dl$!ARBF3;@eTE^awN7={*GIYijE{GIGFDvKmgc#;bzjo>S& zP=mo1Lo|Zw%1j8te5nQtXx++Jt>#bXlz^tzjpeIUA-;iLMR$}+`nRm4Il9HAxGP1& zydm_Uo3V=4={UrJBC78lzkl92Ki70!0H8P!0J%FA zZoubeh-<+u{ODKoeme+j$}+T2MeJRT?D6*xf@{1!#tw(PGmThJufQ=Nki5gSm?{|h!i%h&nK{qQMD zVHyNVBM{=wbD;`m=Mut9h3VD8qP7Jxt?U#9wxj6~w;zv}%NRrkb58|7%`8=Y zypZzJ?Sl`EUV^%M?)n?(hy8#a+dVJ485Ix%2BX{=-!PRy9opp>tA~5>@7t(=t#)}( zlSeKHwz-I-0}i`B?mbC|(I9(>X;5!Np52_5ns?uFZ5ZF#|m?Uw@#XER5`VRul)PWnI*;HFT8fL)T3@irD% zk>UA9IuGZH%jn8c2gS!hqp8tRcFV5?mVp2U5T`tekBSo^wTi>e&CNbA8*ONX>G&)O zT%0?ud*&}zudhhcSQ7GxW5%OoCLFn;rQg>pTr%tNWJ~GOggI#r8fU@EJ6lJaEC6xL zlHp)tKBGMCFZr@9%sr=s%!-ZAV}$SAg2M?5f;Q5^dv8xda88=aMR?TS!+UHlBEcA! zOXMc>kP)|-d!HQmBuJPrKu9;jltN ze@*Wnn*_0lY9jUI{@s`$oEiE74h3B^O=XAqG}2KmCcoL0z!n2acSqF#l4|5g5rr3t z=%iay;@jttcahuQ%wIGHG&)-i2K+(@{aLr(rAiq={g>amEypB1omxg_@l3K^z~e>* z3Uu8gPk+VoO#Tb5Y90!|uUG)`6@z(ERP8D~#6_KXcCIAA+$VB>1vRc=|I2iSvh3;a zN{?;UTcm_dmsqP?AP0xgMj1D=mM?_O7=+@#pc&{;h-xQEXqW@Z$Z_P>=JJkGJp(+! z1}k%(6~hmOfSIYktN$y1&I4xE2khI!CkkW6(|Xa@R`@q|*I63I4e}_AT8@BN#_(QCPuYj9O-XNP2||r5CL+g zkzoul_PQXWiEke&0MiPT+_ZSzp7ciHm$d=mK6QM!b;rS1L^A0?y>gsEFsN}3OhQ;E zkT?qH0U!2f2s^AOvJu_n1A9oA7|`w$c;>kgV_tq_{;qE+mrw4!jinU^b|9a2H^BYj>vmr7ryt&hPdR9zEE-3+z;vAH;aH8O@9CAr(yy zd&=i2iD#sag|KSbocECoX1DL>&WQQR{=Jmr6MFH>x9yb?>sR#g&-yCc3r|fw=<=ZP z+-7yI=zJD8IunJowjQxYAr1uTMHK!{W;f5Gm+yfh;0Yf*81YTna_s$A>s3oC+avJh z?|gIJzs75Mxo(laef>RP1a^X>e|5o80EYW=8C`|e4j|tl2174rqDyuH=s>>97!J}n z5Y$rk(qHM`zj*w+PrCU(MM7^-5H7f&MK`Q8DTkbs6r~hq{vz?akMB%g%g6Q8pUzae z;?1qD5?3|Cjt?o+9!AW!ez>!nXNWPcTF9{1RmztkL$P{xr|b|^le(U^@Z-6g{|YF& zQo%BQQ7Oh92W9>JB^6|0Wu@awI89N%s6{hIlVh0?g5^Syer4R;!+nKO48Dh}xD)g0 zZEg9-$GrJEbf|ACC#4V9n~e1__1w^5sQhSeGQ&Q*D@$) zTpD@1ONMu^+oc6FndFdloDxySbrNih#g^@4-WaK<44mvu7Y~@sDVzIM72ZFTPJ0`a z8b%u|RCAUWuaIVQtV!g?&BlE3#1NUMzsz1a;xf6zJaH_~Qs^HR!DkKd zj$Al%Qy^usQ0lj1?D?Vad?Yw2v5fxNTguVOZ30u8_xCziqQWo)K8G5%#p zwNO5N0u3%VeaSp{6>?S?*6@7+N}vD2gRCLIM%yT%5WD*aUBJ<#^JA%j!|QI*Ktd%R zx9fk|6i%waFQOfV@n+VcuH;4Im-b*JbN9&r?PAz554b+=#}hM!gt=bK;1DJJ)lvf%|Fi)?+m-1tn!)Lq&e+wY%AhgATfUgdo=xEna&t4);h)if zZ8l6Af~@j;=(@FpMwY_m4&}UkHj7!qmD1+7Xeu85P8p5M(pxucG?L3LCvx`wIX>Yt3m^ie}@(y~~i56+Ix7-9PHWckSl0=}@eO;*Unp9=VWYSKqQh)=i$HjwzJddDpb^Ra~)dk!}T30}xNMOjU&`=-x z5j2=8dijv4+p*S(;t@H+F4cRp3}ZrqZ`Tl7mH01{|K`WY^KfHP>1A0Df@GGg`nf%_ zDX1#m)tK9KJ#DaU{J8?=O!tS-4M*+;wD*2VyWD2HEVFS4Xu~jZ&FvKGsnh|ZEgcM) z{nNyzFG?9?lC4WwUy<;RGbIWHCxdb_|ABG9T%K$_&Wnvt?>~jI^JR>vuO)<8dFl|y z-0YOm*Qo50Z!q1ZV_nuQ57pFfcOmwJv6iw$V*{x^{{x$iEAqQ14g-?Xe+9P@M#zWw z^J%1E%}Pzr3u+QE!l?LRVd(|4HLQ>P03qP&lU|P7#!d*n6@=ZkBjYHof;hro#h%$t zyPhVp6w;^9Sx@MR18|3?Ye2A&_7BPo>(SF55`c3+5y_Ru{ZE7LGZD-GUHJ?ha`h%l zmbIOm)V2J4O~Ock404XDo4X5oi(^f6uPJxRephraPE}bfz@8PRr~zJI^!WC$;1Aw0 z!0{)VAIYEc$w0jy$MI3~h}*;tSuC4=b=KBwq`@@%`wnx4pSnVgmF7rS0e?Dzi6@0d z9c^jgYVl4l%{Vd3R3NlK6J0^6tJk*I<7LKYvGV1RfXcI;H ziSBZ|BMc7;gTsh`JN5v#;Ow^-3qpL%w!guZ*YFotq7hhrqvU)3@8Y)k)FaODVUc`$rFu) zj0+!j78Qt#?8r3n-AmDZMj_hU*xuLDg>jh?iBW+=6=8uF;}&+R7_#2<#a>UjNmwNcNkDVM}{viMH_Mh4y!JHzUK{MX6`ob%W?k!m83c5a%A1b=cLEq?rY@?H4gWo)6E z;pc+!)3S5BoxH=Ns~On+`sIVM!5?}94lMWWR^RAa?wQ@Z<=R8X#@S|^`mh;qTnk!j z^!P7hv5A`h5%AS+BMB3gE&64-k>lYw^7WDg3x(z(4Kr zy5Rv|103+0lGZfYv8@=xhcC z1usWTdo|oQMg|LhGCSLq?P3>wCMQ2)m#>1-DaamVXD%u?Iza@b)b`tDL21(c{6RzM zobz8kPGV9%0j1&R`N#fD^6uVXG}WfF3{Twmr&GyW`@@+wnQFZt8I^j3-}DgRIh@EA zJy9RdIW>Rf;=IPr>mqohPFE=l9yK;#XTt;k9RY-6HQvGEXc&VD5$laDgO#_iuL?>zHen@Y_yWTC_+<`XH2>Hg-VQWqe^5W*YEgLuH=#lKod#J6 z?qMZ)GTTW2!upVZC92qqF@#U$oH1wI=B6o)h#6h`$w)v}f+C5-=FwAzwyfkT6eMzz z-p+eWz>B-X42egXKB7iy6?KHlL9L8dv3o+TterR1st~n`Qa^dr%26R0-L#`K^V1i9 zPV(3ZCynED%piDxuHI~)o+3BGSD5D+I0SqbfE*gU?HcwoX!*0YTh7|R-OEaKq6pwE z>TZz@-rR9A1r2Y4>X4g_a#(_y-wlq{3cf)P^r zTMSU_7|H07YocgIkA6!f5e>dUD;LVhd(z4!#=ylz$q}k$3#Lj0`FsdjeUE*AMTm&y zl8aTQtiilmMS}|)r!Er-afOP8AQL?Ti@)F_TF`4-=995_TcD@I4Z*6xjZwW0O2cQd zTCTy-ANetN>q@;|gF$-xI2661PnClJn7ZCZ$N!m}iFv%_pF*zT$4#V=; z7n<;X+p*i`v+cn8yYSSJZXcF4yc=5c;-r;A!@jo$-0@p@bmWfu#uo~MzVDAN6)XV? zKa&6ggA)Po!fs*P$CbI+pq^lesQt!vD8D1h;mV(F0A;vkz!!uK^eP3zx{Eo$!JrWJ zIQaC%zaQ+g2bkwkUwjGq_NxJ~9(HT{3hQ23;DM)L#DE9_U_Dp>3oDxemoI{aGmudD z+83kD%v3Q1`Hcr`rz{})Vl>=H4j*A$2d@-_N0)%elSa~oA`~s;bXFf+B4ZkBO53Oj zCK6hyJFuN>hCV}HAP6(%NHsb7sYJ|G6!{daQ`+86G3UCo_RuacSni$W)-v*^?Io6K zucM-fcIWcCBWiTBCM)G7DVli2zdvvOld2`(;Y^WfA@K9kd=1y$TBZl}%|Gp*w-)@< zGU1==e=>v)22WJo-_sW_230^p$RzR2kd1!+aSdPhBYrFM-8uRU(5wE4KkP^F+2vYw zNlH4pQ&+%El6Acab}FGDi`ZhUJqG(ybwZy7!{(H&7~u539081I?uUqSjZX+B8+dvOSNb*P%qXu9`w(V($*Ef4ttCh-Q>D2I%wRR!C zAKg9-G_o0S=@C{gAaIA(zYW)UG&d{V`%*%W)v6Me1oENACXIjo`Q4v?!WX%#{|UI} zf5ETLE4cUK&p*HSVYCHLpP$9Lo8(O4lW>rwMLP;{nWeoz2_F2^9rSPgvXgG_qgGpo za0z(5(ii3EIrdON;hNY!lL4;a=W^V49@atM+eWVdaOqW z4}`~li16Ujq^Onz*X95U;40xgE<&27tf+*4xPPk+XZ^cA_@#PpaEv%bQzLznET}T0 z*!q{%a%ybGaJ+2KvB6udF(mq3`&aYU^oyFWFV1*%yqlI~=-!4*B6xCu&hix|5XeIf z@R;$FTzv|!jv57im&Wq;&DK}uVhS5xoF%_1Jn<#(XQ=?D_owY2?(902LTkNEuf=>> zW#ug?^s!F-+U{Juze?|b&4Y2?xHk;CqQn}@@I3qz>=zrfKn?uhu+TRXf%&?i+%%xd1*oPSk1VA2qcKl)&3L$A+uOE0d<&lz zi#^8&@~d&LZ(Q@+*o8m9w9H>VPIfW%v%IIhrf!zBA*g2xl6my5k#5P_w0G`ZM*4 z(Tap-BO;50Un3CnfU6OIMe2w=VONc46X~Y8!!ZJTqn?;dZ!{WflkTklNt@qyXOsT# z^YH}!H0x{AN+!e!0kgl+nal@vakM4S+ms=;yMgw59}XnE?cZy|X@4}Fk^~4Dy?Xi+ zDZPh8kmZn{n#5K+VI2q=rRzzbjK#)rOV|FBuW7XZUE$Yg|9QaGX#cxt|4G2cwg2QD z6>0y4NixBz3Y?IiwBBqqsq=(nG1xwwkVSl`X|J~%L<3SXH@v;LG>)}n8#Y=qiqOzM zMw72&at--lM5|d0>}(?${s)&gZR_LAXWt z?-Qgrc2du=UjZZ%5W?o*4wjK<;r1GpFr0QeSE4C1>#+5_=PqvbjsC-n<88XjCBOu! zRWdZnP1GMCT4m{Nc&jLRIA;Q;Z~%ZLFgYqZ6QE$Fe7&G7-F=2dN6z;71*+=)WLP|E z%h|dMqlIPrN$XMf;8Y|NTyk5Ef6E3K8oImmZvxA`Iol1)q{Vj!w}HL2p3ERq4R-{L za^4g{9KV%x2Kp5sE;8}3eYAu?k4(I1#KWz(DITLs!`qlPZt{CHXcbN|-x;j|r$D2d z0!`96 zC{6GbQ=G~T-u@$gDfa2n69dtRqRK{8JdhnEQL!WyZ|Jd5QboZn9t>gY zdem$i)^qw$htVWB>LYHz!0Q9a% zc3{Id7wS?NxgR6P4%o7{30(at*O7I+wM(7`AV)C1Pf*eYk=uiql5Yd8p31UqkFHWkN-b(iXk@Z{xuepmeyB2!nj=em4e&^xoGi)Z)yz2HVr~wrQ=odCRj>FW-@`B6Mrua-13mSyl6eXZ2-_L^Vu%9$7eQ>aU$Q@KvoK| zDGM@AR5>%1?OECeJ+t=7$7qn&yFdB#5xahY%TMRo0kbZK|lI z+Vqjy^}wc^<8Bb!kFJgRXrZdr1pvAgV(0h_ICiDAHI13(O;wcXjYEGI+ z8Rp_)u+z>D2=E*l&^)9eb*%Xl6b0baw=yFB$*Z8e5=7Zh0f6X2>ak z+_QOSNVUG2o0paz3~Io*I1PZ0Hc)7ycqy~6Q|CFGwz)BN3wkV3OucjZ?p##46?;a| zf8;UN2{E2(gLgf-TM7( zrD~;q=aZ#Bdu=!x<r*P@&Ae(i2HN)ad}7+zWrtXQ(h`}~;Of`PMQJNn)m z?sHr**=dXvZ$Xq`gS12_@Hw%zD5)lgW{9d1)@ws|0|y?Q9R*?P$IljMFJUwO1fB z3g#K-af*d`Bc76t8*wYO#k7^u*)?Z5?_P zB#S9xy7m55QwX84dxKI*yNKvbN*YB%mwJg7RATEp*iI$zv*5JdjhR(DMs5wbv$q06 zjocLzu!h#As7VMXz~Vbl0avuvt^E9(h(NH8#0i5 z`2H88++a^O!1CLH*iPxN-90Qu>WRFhsktZ@)Hy(#xf&+;7=wId#-}8^%;q5?! zpHBUNTRI$*LdC~L6IEA+2e{gT1Oo&h!K9QWh^d+yf!+PR?NYyYmRrl%rQ9pA)bUAS z1`O0pPl~n}y)8&*W?rf~H-?5`BQ`4rIR2X?!Qz|CNID`n6(dfcBx~X6!%Z<_Gk@;n zBKC6aWtgaPeR0Yu{PjjU8D-fis#JnsupxTD36S>-06psvy#Y?7&Vvo6-52a=F%RPV|`9{gRB zbc5T=Qoy6FB?z?!B|ItX4pa?i34@&!an^!$s+V^U!ye9Nu0z3OLgTDlDE;tW5*O!-^iBmhA z1wm)J(1QxcOd+>v>q%dk)*E)PZe9qN;ja(cgN7y)J&4&OKeD_H>N((;>yVwTb(zln!x8&YXgF+98yKsk;;Ax-6#141K44r!o z&x>YFns5>DXOx1$01VnCAbi*G){edOa9bGgo4@IrX@fscStZ(l4?^^{0&wgYAxYgx zcQ6?JMr>yq-w&+js0D4os(uy5+50O_Qc`5hkxwv6DKIz~pdcH!Xur?2$q<0$^L+Yw z*!wsc4f}s+w***DT5!s?-(8tVNn*V{LmVPfM4z_yQiqhLTV8tue$`=v$VUU<*K}Yr zVesLGi~AgTZ}#E^ECP=Ir9?~Cl2C;rG~kpvO_^9uD%!!LHz>yo@=q}Qg?WXXm5I~B zsJe8f*4BCgN`Wlbo)nHliTaD0QN=G7)7i+vE8ao*cou;$jyUdJw5LKsG@Sv)9Ha2$ zZFkm%3`h>63}h3;zG*M4Ev&2x8X6}9f&i@GVg^BeJS0JI6eNtZl!3YXz{3ejg3;_d zO}oA6_I{an$Kyf2hkuM603QK?5rX4N{xH{FKIGR&N*zP}?Z@N=0 zy58;ev;mr|3GO)}6sJtD-Afc}^Sf?;FsE1-n4|ATWVFCfB6ZEBuz4K~L~(=2YIYI(IF?H;9LbP~Q`6Etu27zM5@Z zNJ)@yLY%dLo%pL1xrg^xOYBS`LdlN|?dZw@Wo+lNWhA^0uArKvqT@?k`_4PNRIYsI z0*@J2Ns+$!v#fb5;xTHS>x*l?DN@!pMoa9sV3kazN=p%w@XyPIex^M)PKU(VF|Ihog z)2sjVQld;8Eu;<1A#w1Q44_5MDFisf3+Cq54l_t;{Pua2#)RyhCw&35V_;w7 zVYPq4!IOSp`&ZpH^+yZaFsX2jQV^h6T^ioPHP^tN4IF%jMwkG|*ZiGs>tWcx8%^%#H-k~{mkK-} z5?bW>`6b6t$ZzqIb~#tkoOD0WXOnKPKm0HsjvhZL&&!`uD@oI3!u!&_veDu!de z7li>C|8u?E-%A)M+yIy)_@nR`BP+l}o~?zEh(*Of(g$X$Yb-W5+ovbPC401q@56Dl zwXrat-k_}uKT2ONU6{ZB6;7JKo;H7l(EYwLHacuy*!pT(7D^A(#RG*)CWO<|G-l65 z2xlBpi1}#j459>ygsdVYkR8!``N9J|z!Dl6=2m05QWrYcGA_bN&(lS8b4^|M`{ggz1_x|?xY76^iG$q7{f!cCs z7)zKP>=(OSzT^4DdBrY?g;Empn75H-FybwyR>x#X*$hwcQ#DxPN(CSLXbk>4`#itz z_a>wJ?l@+@)D5C*Ugv=dL3G=njtAYIcCQU*G@NR8an#iA*w=WIev!LT%>WU0JVxWV z8EzT6Uqz(0euqf~`#yjOa%|&!VX<@uQ`!Uz1-2MbPy!XNTAe;8I~O`~R)Fs}EyMK< z=LmP;=%mk&lpE95-z8-{ZOvUzJkHt^=MfMEU~C8yg*IPC{2B!FI% z-0|_D`|sDwk2twFre$raYAau=m@22A zBek#+tGki9mLyo_9o3bhNtoVJz{{1sC4$}nElPoF;J>Gm!qhb2z#MwVPOGQ7aW*fJ z7mb_xO;!^y@@%2`M3!BlA!fE?x6NnUfq7sddZg!HXRXFUwjpc@CN9)2xJoOPNpe?e zrLIc&1^IP8JeS9_;Q&;)Z+PX<=RyB0@ASxPc5}V2AGFcEHpAwBCAz09sIvzlHsFXi zEDNa+F>og@)d=#LHl1pN0qzOX8x3cZ(SR3Q;6JE+>JA>_eMJ;N-B~9k(Upg~mEpa_ zP!|1^Aw*v|uI{zz$4X6lSs3#htZ>;w_rAp0BK)aN7|*)XUlf8dFjqbBmcRL;2axhp%#sZ?0u(M1qesov3?V~ZfE+fegEo*o|%qqPPjpkwH6iLyWZi*(av zJUPv78Q+Y>7FB|S>xM;FkR`EMCqP&Fx1MFLZ%ynu@(^tK!5GxCHj3m@vEd*i2Kvat zA`1X1a|45uevlQzf-LNabu1)z6Jikk=VohKn|?UM1uWpWNa;DrU)X_cgRqtaO;2WY zw2%#JQjk;xxj+Kb$mLgBR)Ab$H+zR%5|WA_7xkPlmXPkc_A-I%Q-1NH46egsEDoZf ztzIA-Bgeo_@61PCjz`p;Wv8!@xM0$w3B8Kj6?Dq4925!8PG>1dRfFuN`U-&L9_ZJ< zIqniu+W*Jizb!Y8WQn5S`}qo5w^>cq9;r&V(50)U%_tIzU?)W~NlKZKU2Qaogd}v3 z1QP%iq1?93=6UA4pZ}O&IDfLgWc&)a1MUvT9i&(fSs?;&IM&VAeW}f&a-~YRpIwtF z5lA)wy@4{Sum}YDsO?qn4+zVpCFJ#r>qG-Jj%sE1;O|hA!+vKdf0$Hev$a9Bwg|yY zfAiti-)#Ly%k}M$9dSAd^FSf(v(VQSk!&?({6izSNoJ@?Ge|9|!;l`S3A}wrD)LC< zKF&-=0RHw090(2~oYotl9P067Nc*z z2OhPc3-rc?6kxxlYF3C=4uf7eLaunva*3oE6d%Y>(s}_eT!-&&1~nxW^Bky&rKU&Q z`VNOyaXr6Eq$>IQc7VDrFBALk=^a&fW&`V!Y z#5?kv7aG*a1^)y3>;Z(~+OO7f1GphPwY2SG!bc0+o0~5Fl4r0**w`J>Fs2I!t_|>M zE}^;{juQ;h2cn-g*{T|-o8go?W| z@)0U_ZrEdc{1x>Rc(}#A1SY-TVm%vSKdB>mHOlts#dWqDXzN956$RIJpypE-JE?l3 zro#>?mYm(ejw%#6!qIMW#E|N%yX|s0A$SN&dPNua1vS^IhJ^yuC@QQo;U-UT82}Pa z@eJgXMka++*NZ0vD3rUZ>qnEKuV~8I+0`ex2$VGIW)>U+GuC#k#e@|@iP@s+ry^6( zQVcK4TXBaR1EmT0W?)+`Qg;vAO*$~yT-coH*iXPT3o996enR+-OXL?ib_Fm+zz)wJ z`7O-%HiIVRx_BdK68&qbP3VYOZQHn=LCMbZq$X@FeXvpPZOGH*DwG>CITbX*DAx)>uU|Vm zC*7Mt`JRaEz2?z8&Sgf9nxyC%pZ2`U2Cfw^xwe7g)IUgNQ_^nq^pzkdO02XlDw(-DC-3>Dtw-9IqgGw?;Qa6at#%K zmAx!}r`{XN@)I8wpezVFCo=awLKTg-SIUPn?PY|n(?Gdb8-`c@59fiYe&hC zrYAUo_Q%s;>|K}=1zRY>NkIOk(bQ9|$rRb>Q~f4kN+`^FxKs`rRVBiu4qF{N&&M!q z1yT7@_S~HUAtZ_A6bT{fOjO6ufMgLT*6_dAnPiX^#*#jeMZ#D&O1T5+O9@bJl20U< zI>)CT73V6E$YQmEA-&f#q6jAQ?uG(6m(C@cx2KfN`)O zQoF{?`nlDAA%DMp`)v8R6$%fdXhujbHc$B$GR9R82Mf|!z7Y5eJJwfVcBKUnCcI5b zLd_-^D<{-40Je$#u4%)@6Qc^Syf{c2KYVNLpW#_O^bg*;D%A;- zSx}NqDhf{IHa|s+2Ga(^i^nIIH)rxHzNBf);X?n6&R`BNiK;YZEyo=fKow8A${<+c zO4fLI`!Jaf44^sOKHS{_-S^h`(thj>$Fr{S*y|YJ|L)ok{b~!l(;z4P4Ahd4vt8TI zj=MS_he3|IM|XwD!7UAY>&@0bpa!8v-C?^z)YvPgbh{{|^zNYr-&mZu=*J%X@-`ZM z4N-EgZiFpDNo<|4NIrT+fe>%Ifql+$q9i)TK?5!L3i-9&>400Bf*UNxG3d?^cGAz( z5v&x!4|gpMhH_~FI+%(|HG(SgGse~Ithv}qKb@yUY~@l7J_5GV5B4b$TRC)v{lgV= zf?!moAHWx1NPbGCLR5{%R1*-yp8?0GCzt2Ry&px#hAnDemXczbjK|`rA1C>e>`EDV z;Z)@f__AAj4c#ac_9GuQ3jnV+OhSg21IkPFl!z#u^gEhbKdfc8ZOI>%Fbq+$TMo{6 z!+x40LCi2NEMVfe&H4-8){!(%N1F?v#q9bVx`VsLF^H<7(l z=p(s~Or(gVJ(@%h3|L^UZc#N%0SVQ`M>FI_j7fNb^Qw_8g?Fe?t$T`JyL#4o;#!XaO>7tV0uo=;%v; zAa_rG04Bulb&LLrOea^qh_(p5y#AyLx4=SnSvxn{6iV43H>}!blUQg3jHd9OC|W%; zr6}RIgss_xmqmI`^V{(2B1{#5$%ruRayC`XXQYusMk2^iuFqxAiW@5u{phaU>(7P* z=J(NA+?8cs3fn&rY&)<>d2ag0Fw9iw*>vljL(7_Ywb9{3m8x=ogk56Cu=q$hN5&;{pkXNu}x+P8hw<9HTeynZZTT5B&B zF3MK|*icp%a<^v?U`zXD4OAN-xFQ-lFG|~vLMZ;q!6Vp<_PyoT;AKOtQnAW|+Az&L$S%kE_Fw}4>`tcAe)ZfFA+wRdSw)kpbdcd8ioBV_rF zjZweNPJAxkr%)hjl2WNMp@wTcN*2g`fPyb0C*(6K&w}sV8SqMSYSO}1x3?~^2)yTa z2KrIWkDYDC9IY;MoU}Z9WiL%PbOnhNq53gUkBf)Sc?;~CsE&o4I=Sr`p)29-TW7Vv zadt6eGCLA9Rt_j0M)yb1-+~BSl1su9c<@LOIMP)IA^VDsB;VF=LW%Y z5!e`5EA7(deR8w26)O_c=1U%gb(9i`S#A$WCr9)vYx%wIQR@3P{7H zWqLlG1kw6^Yi+I8v$?VX0mpNxets|>jM?XLd-SE(;U?eC&5ikFFKxe6zndIXBrtw* zB{L3bRc<_N%}>g(mdM2wQu`*1dl)+UV|&_rj1B1xMz)ZLpG=Qs zPwPi~Z|K-Ux>B9=y?I(KwFdle6n9-B1L2g4O7fykYIm zmjEKhuTx_@0C4#_n|vK~zKn;1-fvu9=uzv{0TRxBtP&0KoN zKKK=N#d`|#*};cf?i!qr?=A0rJ%^*G>_4nU1**CXS2#EM=28_dDsQHrFn0J@GXR>rU3u36<_Oy+h)6A6WVBmd;>);_w zT3oHVP!!K{jc5<>eA}KdVOUrn-Z#eho{xlMc?YoF#Ia@(4^ua>e>nbtZOZk`1nsFv zqBA|$K(3rxf-;hU*5q|8{Fb_5&#32Ar$g>$toteY9S@5)}s=n@Zg3W>@q3+ z1;p7X0+|RK{8pGe0CNOLxcyK6dVO|!^>Zy3EP^|m z*GW|IY8Q{0H(D3oP!FGCbaw(r8k`inv`ipLXpN`UqFngdIQ6dp)lA{k>&{UYIQ=(}pRNtltdZ`a1ZcP>2y>hX&*-RVgYir;m`E9qZ=rTtd4_v&4Z|Ld@znU0)q~m2 z*?ey?WAY^u4yz5N1PTbLax1VVq`p|r3c9!E+yU;jHm(Dcwilt`%ZyCYjXcO-URgki z^YF~m@RR>6ATPGXI)~nAd-78>+L?wH{sQj~HneeJn{WHg%DJl;eICiSZ%igezmJ3R zo#9|Q9`@5dW<0k057DsxksJ!2jp4m99kUG?{!%|n+*~FMR;!pLn1p_w+yiU<$zhWz z6RDDGLXYkub)2k8H9xAxNS zt?7>oSRaL;RvXn!P4C;_5h#i$my+g4(}*GBq1=mdWQZ;bww}ceWIzw&Pl*%BJwSW- zJO0i1Va>M?@chsB;6F=dAE3MZQR``&isaxoLq@4zz?@tqj5=+KfFZ#X z7|8N1&$E_GyaE(FuCwIGI!$yd49alJS}-D8cGJA<%)1 z0an~sT^5X*@MBvu~^FP(Ylb>08?qPRUCO+{j=J9Df`R%NJy%{xZ3&sxM~2Y{>{bgU2UVR|=1T2Jg_| zjd=YG9{x3L=Yz2$s5LOmUW&9LiLD`L)R(TR z1tuhHH1k>2gj*b$4Uv-)ZPD9ZN~=ykg^5%au#Mka#6Y%I@Y-Tu4@-&xByMMix2540#_C2jkdOrk9nzg0>2Jwi zi#!0eku9^u^^(3_r5&QlF0TBYivtdRioVtE_qEHR-7lpS+Q%6(v z+X(PqNO(4d;1d#E3S}OWCZ)`GLYk)UoAXz+U`U+LsBeVHIFQ@ZX}j~~-WW`04}*t^ z(G8DjTGzUL+L#rMan(Eu8<*0$+Ae(?V5g=ufmRLWeR1KpExMbX-p^V59fJVZ0?3(mvF3?Cy(xxbYJ^0Tz$T;qHX?dh@ z{fX(vE~=jgYftc3_k!OLhzWVs+Y;d9LOZKtr*$xqEP}6E!mP=1KIkRT=7cUg;+KW6Fk4icivAV)iBT--iOho8%jh(IFTmy1(37dz9haABtIjxQa z-q(%eLvd#=kHIQHXF8_NJxHDOS_@yJ?l_EgA~eY*@)zF~h1m)1(gA6F;UIWZ+c=Ed z4#)TH>FmyEqj46UVShMg&*Iy@G2my+1PUWw1E_cFg|WuXT%w`#`1Y6%6imy?cCcx| zh$C`O2Lk#QzAa-xlrUD^2oAcsJdq3Zf;p%G+>?M&S|ufK0UfRpQajghSC@FmE9{rG z<02n7P1DBAi@o|$4)+S&K#Cq6zi)w1AcqQG6m6_6-T>J70^W@g+b|8fixW){Bmnte zoHnYUm>U}TXj|XmKtfzb_@@{D@4-(|P9*6we72;{^98rv7QFL~{32>RkEP-_`VhTZ zO&9sJbkd|&BuR8KncJS{xLL_0`gr+N;^8;)t;-2{jIFtU)@?9x0BgKSMv*#*`yCj( zefYW{P8L8;`@SP>iru)%J6*lhpM~?rBO* zKM!+A_erhO#Xv5qt-^;xz&-Txdgcm1B*Z~E-6%6!d3E<@f!;grSd>aX+@NpLz903C z3D@aO@*uu-b`P7Av9~+Yg#LDa^rbzU4riU=qcMif%CMZ3c7*Y`mM~P>3iJqbxp_6G z&JfMd3I9;#b|>v|I1p`5(4rE5EJL{3~y8p8)WB#OS^tgK$m9d9#3E zv#2t6eXVG_Tt{g3C@KUBMg^UjDTIgEUxwrftF%qW50RQtX=Ee#^x#~%qhF45XTyjG zB9yebUtvZBjai}(BYW*QtBtd^LNoWf<1%5;J{j*uub#ke9rzO0hV!Hm-eVv;D#}YJ z!+Wel`Qf?6doZzo)@&`TjsFU0z*^7kCF7}884g|e%mhD@-FS$tQvN9zd!>Zk756nn z^a^kQi8(10A_sasC*l4egqJD`r+nk3N_uNWE?)%kAGuhG#Cb9amE5tSv=kh9p=|V@ z?5>7TZ`>pNsagIwnH7hQuUp&nI!mCPh2_}X&pLkLN`1mzV>E>wx7!m*MSZaULL7oo z-7@+T7D#1!pik=eKt~Dv?9*vE@zeC?iNxK5urx!{z-C*%^+3WMS`MGe;~|9hhYy3U zn);pXdf`pM*Cg!08%^ce5^w$o?WO3ns~#kqYr4$&QYrP0Wi@F#VPP?XznyVCC#zzq8>|P4=?h zto8D}1^cuvB90(t!z0((Sgvnd9tElFA`3wvA|@I;H9a_Kd+V-oo;I_Gw{M>iK*MT55$n@VwaSUYEOV2)3h#Tio2a7d)>CW)JJGFlGerY3O%kygIQQ3RVvc&b0_ zpvcxl9L#~~ff?l1t7X5urX8(VkKp3BdXQYjORjQ?pAM31ZxyAArIt6c+>!kw>@TP* zuTZ9Sb6HV{#p9FHPbHLxunNOKTEm^9rWOJho;KhJg+tp= z`6Wq?;aXVG_#~jdjRU>SZ6AZAZhBpXP+N>q$YAPBz-hN6D1)W>*PqH64U$9fui;<@ z&XvUbwc7XH*$Rl4#ViaB%*YXs{aUI!gnli#6K(J~dxqM=)Asq=UP%T#wrUZzMa zO2k>%EG+3xk>eVkhJn{Q`Gk#T&ZE2o%9V+JRewXwQsF7G-5D7r@!dyen;#v#rfDtk$x#?qTfqfsatLO2_ z*;PqnuJcf_z_u1{Kd`5TS0%|`TtRSp;>F!r@aq6f$otR$P^LXDA1-0j0V5lYc-#h$ zk?g^w+gbfU1%;!cIVb4)!5J>JZXhtl z=bxSB()o`2^Pvu9kp4My4jY*Wd25H+HdyKp%XN+!WiEh+*^CBDmnRqU^4NlHd?7`o z7Xwt3K)W+2Op0x?DbP(SUTj{eK-MH~A$nndoqN;!##f+(iH=M%Cgf6hJ3EpA_xOuI zhPP}8lTWe?Uu66L3;L}$#0__Hv3pf)brTUCgnB+zRIOBO3(EYRr&1CT zq6OGtn>y>U2#Agh&q5ir;x^WNJXC1<=6gt{Pg{HGAA=W@+mSVnwqd)Wiq;J2bakTW z9egbZB+BTG+&T)BO@66x#+eGA4?0|xy~k|-pD{Lx;kS6m8bM3 zcvAIkdtxxnTU+q0^*2sG{d8G!>{ugr5chbF_o)AlQbmCY4a_racn5Q2Oz0HxArl0i z17FJgh+iRp`S!{ZX98)W-GSM&VP}2R%K+^J`WV0tzQbHwE9c-co}WAl%uybIS`mGT`a|TcoR5DE` z?a2mAF>sW5aVII^x^KJ_rjO?Bk_|H1$s@}}WIv|gRJY+4P2@ejIxUA8^QbnJ7V|y! zj9*5>@pSgfY|?21Ir@1PxXGf4CA5+1FOxaS*iMpLBYY$#5K%F}9c`aWCLF2Q!1ClvHc{ASJe>ovjls)!{r~rch%Pi$iUQVZ(rD-!Sc|p^9~+%%d+?d7 z&x`U?dgdYR!{JeCqU=$1y;t(>iAu^MvP2FgCAyoE8Be+MomEnj+KB5Aq^NFmFSHcY zB?+T_<_2WObWn<2Yqq8W@ST*Cp@HxFVfTRTCSsd9`_E2p%27z)EElYFjJ({iGXwgQ zIK73D(#<2fr3dd2wG9;y=8-&8;(UV08)YL3q_;Js9V6NrVDp<3by>P7MHVBo?fb6% zwDqmA^8}y@HW|*#k=`Lmm5t5MkygH%5KU`yJ-2ScB3I_eG%qM5jH^ZHnduzn0)&zK zNW31cK_B;g2W1K)k{3_(jyBHb1C?l7yeKs2oNxYTnC-jde;RHKICOXfxhN$QhE2hj zWPd2I#CcdlkOefw6o+AVtNI?+vAg8qP&W@=U!9jzUSBS0`Zy{GOrUwof8W5cr{~P= zkmw-o3J5hMXW?V=*&FPJ%L$tAE-4H>YD2Gjd$K)`rehR*nB&*RrcpLB?&}mI}i(yq8 zaTA&txiE{%ezT^|##uTq?+;8Tax@a7oW1~QTp7Zt6PO-7&sse#-?I;%h%ZyVyCeQi ziNiy6V?$gXB0NB zSFpWyz|*cpl2_LjpB`(AbM6~~q2@(cVg0TS_yP=giAYVwyYRc0D5_A(r@mPAR_XGC zS-^!AqJ!qma+gG{-CnyyJ>84R?e`JTvdt9V-mm)kS!3QA+`6z z^M)zs3HY%Aw9>RGMnHXM*oa>|Eb^?4iD=<6-Wbw1&dM?9@-R>(=RM?!SS2@oKM;wL zE4V3Xh}zFQB!fIJb7MZ)OWS|vg6Pp&si|wOJ!tXYS=QpooPWC`!PhX4gL3tY_(e4C znxfAk4$am^djp__BZ4cZMO99MBQ2Sss>{^SVseSshT{iP$c86Ns6}&&a&k$kI@edj z7(J6{&#}uU6}DhSm8Kz)2IeJpP0BEVBi+2`)I;xCt6GRN?OHwV$v*f&rIou5K-!bPQ(UUB`dpyn40^#nk;YxgHc-Dj6YeQ{7ha z?FtgjtKlta#cJhA@`#%z)81&*mo|A`qOU-}yEEs$~^HA@t?0)u@v0Nqya!zWzv#y0e+_tI>Hty2s~nd-Me%kzFR# z5`>S7ai2=Og(_K`3hQT@o233`nV=demxzD3AeXs1H6y*1+45nFDxlnw7&=`x;QXe= zzC!%UJy9j&7bwC+JMyH8N8f&OP4_+AIN&i(*$~~pP1L|Q*r{bL%7c1>L&f>rq0BI; zyEEAN`IW>6Bslysv_X?XX59V?RO5CBHMkk#zH{xt*V&gIu9Y^%lZg0i0H`E+>otI? z(;rTZ$+X$vDy8RKCUD*NCX?pENm6NA1Dtw;DS(jCK?19>@RB$=D}>kNr``zs(L-gQ z4TO-y!mJuX?e^_$BAU0I!FC>)OM&FY8N-MuId#+ zt=;brf0^A6k#vIasegb(w2mC`p4^`R|0nbC&?&m?dV!NibdmM*!2hYLKk18C_8QGb z3}Wk?dfnb^mNrh`4%~N<-&iHu+}M$Va@66{chKvwejIPQ*IVPP0kk^(Ba$>9U)iHm zMQ8&}_`eN_;{y9126Ew-hfOlc0rs|>rL zt2SINcJtkMIGE1v+8wRCN8{doZwfnTO^2glfB5;U&QoDG%HH(LtTTKVOm!ZkO}f%O z^=OQz#;-sJ89ht^dk;{*qzO1>_2AJpM&NBzs1@VB8~P9ZGVV={)K7JW_oFrt*u#6E>~V7gI1fszE5dZeR*v zN)eSCqn@Z!<8C7K;#5&B(lCUU$fMGCWl(qlib=IuldxP)Lx!DVTiL7j1IJevrVJY6pfMl!e3O_wa%kEBPs~V+2D&C}-EQz>_%DFhHR+HUf1>m==$;Nz`eW3yQFbz5>~UwT;i#+CsH> z9cQ%yl;fdZ=;BhTuJ{RBFcrL*YF3grh@{i*)J{=s-ZYBq8LhJvB7%8YBnvY`8D?|q zsBoSbbk!XLF|HW;8|@&4#vigdV5TO1VU_OELcu-yPb3n7&}3vdU&>Tq>KpsX!t$lC zt30=XC=_vq?Pu57ZoJqm3Ei97jlICD+_qu`+@!~0RM53S#y9{{y<*@4-t=^I_hXpj3}!Bf+R@c=Fe7lzq{;p4TV ze&jm71)Ep4(ZuBAldE$@m>~)4k=0@dk6dp6t_Q=}Xgr((2>{UA?sSaFL>IfU=Z1s+ z*CybWSi=C55+$=3m_9kGDw_nrDvR|R3t7&0c6@SiaigAGQt>%hMz0N3;Qwyi{(Nr? zB7+o};!2yV%VlfpI6$IViX!Lbk=Q!9Bb#Mr14b&>qvnd%6I^R%`hfk1^;gu-Jf}t; z9}s`qJZf%II>LdPOQPmi%YJ#yYhdmKIXB7~d?4pW31_plalTvbvGaWFe|K=!N`pwZ zNez7tq}wn_+;G}$QitvX?KVs7hDmgB4dSAC8bp(-VGg9+FfqJSwERgCf;rG~5wxtD z8M~1aYRpM0xJS!T+5}eOP6cUnc{dmwx;J6Wt=VSo<)=n9|J+B$u8W4}&guy~=MFb? zFaLS+Um0dPar+nSq7%G_ZaL{Dgp@{^9e@oEX2*wNgVO^WNY%VXWoGOl8z|L0Iv!G~ z=P7P#vZ9ywI0{fEMp9>Zf7=@vV^~V`lVOaS&}b>nT}>*z|7hH0`o1}Tg}YX$w%1NhuW(vZbNJlLeh2qJ=A!jDoP2EvciIw6ElvSf|k9?b8h zwarH|o>sT$D1e)V>_m4S;Rud_B=@i^BW%w1gf>SVvttIhKdUw%qxh;yLN%ILE^+LY5}Lus;{n8kr6^=R@C zXHG?|<%9qZ#G08{57A(0yz0YiqpEn4z+!~tr!*oUUWtT%WZcG_qT(#ROkM!jE+ej}OTqifqclflzWb$=K0 z3}QU+(Utfe%Cl*v9kGL4kS6dX8>?F#g9vG~{@~CK#)hh5phJX6BSHjNtDNkaysQ<7 ze?aO05GHIIDxiyyrxNaK{t=MfE+7MibZvt(#x|IUjDw@36)tkGaGktDGH0D$CaqFG zca@XkQy6!xo!91J#~9rqWQd}<)J3-~sAVJ{fAGwj3pp3Fq0|RyD!kJ<2Yy)sT!;gcXJZJfarWYpO1m8k&hX#%aY zwAW1I^~uBSs6Cm?y2hk4?u}58B+%u?#%K69Y`hM?Ik!qvpKi8En`82fIBk1EMR|_xOeV=N z0um=n+e=An5+_w4O(ey^g6q-3U|46CH8N5AY5|(PBn)*32U88&`!;J`rBbkV2Jh6VRoghG63Tg@gm7E7xjIEPVRzl}hz4XHk@rB{b z;rPBiojnY?#$9h>9?NI!>NdlJc35UvZ!%H29^)I1sf7d;JbH~jOs^s0 zL>q}sO(XlhGul%)zYe>D+tX>g^94ClBoosjkDbk646!{HKHq?-ZG<&S&VbuHn`>ch z{MRTed>lzya#q*gkqa;}*K>RMaS5j6M5S7f-pb{R_DO5+!U5YgM$<2|$pvim6Q3O2PHAY&YZA=?rD4Ev&_iBtXp&XwNYT zDQ=Kvxv?2i065Tn&87Fo(sHqSJvAm%l9d}T1`|EN=JD!1(HY*4+CZNlj`Z%o9RhGp z((H`d2pJw>HpM!h<@=(*CuqSe;RTcdSc<-L(}e^)!4#FH#6}XD6nU&DdBiTmPvF!; z#8UPNTGtVAbT}gpXT;8nB*_^e_bMOGh)T~0xm&c+=2dzzzC+0(J8@|c-veR~#wXI-k%@@5VY{K8 z(+pvHb#*2$kUCIip#n7`Deo=sm6MWXOGc(ARwHQd^5jz8XJ4nsM&Fs6%durHq|G*h zJId~Fkh)P!f&3MDlUKy7?m!a^#2o6i7n(J6&AGWTpX{aWzc+%euCGpO?*x>D-$>l8 zb{xn2l~a3Z^;Te2WPC&RY0tr-<;9(W!JWu+FTOKy0R}e{55MU4ke=*@oRUCNHK+=- zaM=N{gDQ!U*MeynM)N)w)-%}tqV@F7cG6S3>Y0{$1)jP`u(g%#^We>#pucbs50I8v zDQY>9+d53pXZo<=HJ+faif@G#!UNt0^g^(SjkAV5vm~7gL(t0m6y|n=hu_@pPiU;T zDLmJp^3tMt&gM`(0ACgezgI|$L6$YgJt0ZpPJGC(2qD+L?;`e5-GDwLjK#?BW%`|m zdsKCXU}+ohSm0gH;*EuGL^X(Ig&3RYntfiHFDP^UMy?PGPkJU9U!aP-SfM8;dKuWJ zOA|6ph+@NZm+!QT`PA}4xnupX=38V~t-#+bS)iS3%KV}-05YgIftU;0bn|srB#JpU za9eNi^SJjLj(!fuU4xVU_{nysV@xKfET7R_*idHyuL{b-L@%qIS}zh>W9+K=mM6h2 z4L=kS$qdhl7}>G0{4_)-B(@LMWf70cxcPLJzX|9^rtqR9zJkhkUygq;){5GVL0591 z{b-*j#S^(?!iadY3FKdlny$4XnL(q}<@HsjCrgxh!z_6RnEw{o-{_@+-<#0?ZNUf= zF`23D%CfDe%kt$hmE0M5!EK%#Sv}v zo{{6(@FRa6u9xpDN~lPgjvr{WmZXVQy~UI=(p-8D7jS02p!P_{ryE5zEeqJ_T7CP; zHQo1cNg$*VY;|sA!OI=9!TIL^?1TSUVZ?1z}Gpavap22LkX&5k0Pw zCA^I_x1VhbP9$wTIVe*YFmE6msfM-0AD;HSsqgp?5P^6`?&p9cTPIl*$t#%3F_F=4 zO7o&5E@~>tE-7?(hCD-QuBZ<>Nb`d<&!K~T5YaC8Y8*uSu84L``rSP_PjcV@pe$Azi`11?$$9V~HIjqnb>^Fn>`;qY6b16Q}J`NFZVzlf01?ov`5 z*ZRcthvho;@%@;aMUMNI02!bzBCA#g#Qa6!8${b*Z{XIb?Qp6)8gMb_-Qun-NUx;;Qy$J7B$TR?1uhWvi73&W}5{& z+Kb9;i+=3bn6`TZ**EtFcf+QnvJrgWoLwa4My14eY7pe%G?Z1dv#h3Q(^D1b4{TRs zobmEh;<|0G-z&z9Jo1>anUdCV3|3(eUR)x!1bbV&^G$cakso%|a9s8x>fD4vm=TD* zqyA9UK&b(;MDCqA+oSp_)11qVFm^uEizk@ z(o&5?jvByapy`kdUY5X^giaHN#*Yb&gGYswUt=GF@Z``eS2>&<9ECUJ)WDjP`rN4H z%t(DgAX`pb^G~(urkpNvQ~PkbRCBu2zzW&24EKx?!qetZX>>SkQm~k$FVV#Ear8Xc zEzaot4oKluZ)>PmXE5tK-OSnw6-3$;lo9~gG@9>Vt}K9|h4q7JhZ~0q5<*}F{N?Pi z{HK4tK0CeoyC(uxQ_jmnh1GtYmzkKE?CQYN3Z8aY#5Iz$Lj~YaoVF*9N=VY)+_g78 z_(-4@v@oS1Ki>d(^?30j;$XchGAsyac;U%LZR5R`i3TU&#o4aUXfgzH=mdGjNBnQL9vqmm2DA(nI^s9WiXSrducyMHqe9Y>eC^3 zwHF6j7Cuf9S!xpN7RsjWu3<&vbBq5rUG~-2aQOw`PNR_ln5BDg6;Nq z%W%59me*D6NpmTN$V7dN{`BJiowk;++^+4-O*b+jUDDqEKzDiQu9>wBrr%mxfEuXs z4`~PBWaYRPZVTdncM3KNj*5_gDGiI^!*uj8o%IG_cX#cM(ZskW!2loL^rF3M(L>pW zIc-_;?l}AU!VQJX?d6`nBPRA=%vey#udPUT>}usbcu_5hWCk;Y&7Z5CYJTn!Vdh z;~2cT!PoI~Po4L1EF+J&0}h6|rd_Bb4fw#V-0Fe9f35zt$2@HCe5 z`lqoVx1iaI-hiwb(zF4S5dU)5UU@JSevIJ^p91O=Yz2${Zjm48z?X$JcU(l>kUQVN z>4GY&Y_{57)O=qbW>D2#y$YM9f^02FT$pUWe_J4hmBbB(<_0_4CgWpGR5I-)k6 zUCh?Petx!G2$o#~Pa+F3iKsF#72^xq-KGi={*gygcaeV*2m~uy(a?H)b}vk}CVyjF zl25e8Za;CZ^&W7U#IbzftrYf7GwVgGP*;+eM_Q$@qehUj*5{zi=^sWnpDr60?%$8Y zXjeqeft3n5dk+0^_o6`}5)9Gia-vP$k@yJ_4`cA=h&wpCORXpPoEJ&b+3u&HoFAIv z7QsLVYAsu?Uo^AvZS!O~twcr*Gm8nO6a5H(hW^Cl>+jrJpntluOuZf5s~rV70Hp{P$KF9-xKPOZkvosd-;KnIGV&>H9fa`O84 z56g9qkb6gmRH75_JMGc*VQgSwGHCZ_V*}941mGBv3#JpKR|m4?J>w8UQe~Jti7?yN z8e&IYXx1cFVK|0G3Qjo9KJ3{>%^;2WT$!n5xjaydidr-SM3q;%1jJIeV5^W=1zXXi zSURj{=c#i5aDRMqb*-qZ=CZ;=;?c|ths85X%ZDJO|3tNHz@m=VZ@>{4Xa*l6L&zKD zj-}#Rgr)(fx5F}c8z^M4)mR%L;MXHkkc+7DNr7=BLI<2{E#G0;BU5<^Nrg)=hzSTY z3+C7r&`7TsXJ;AloX;V^d`38TEC3}eNwb%>|4!hEOVq*w3lyBfE%|WKgX38tAZu5y zug(<1U9xDl;NL&ZroDS(HXMQfqxO#|o#g}2@SYIxb`5J_NVQ7C>a!042U!5z00db~TI2QK)B%=J~+PQyW>sQEHa^2KN4DjbPZN zyuu6682zB=|>tUfdHK`|j>wq7h}W%(|h zOZxYqBvRcH165nLJQXDOpdOi;uXRK=u@@G0i!_{w z$iq^daCVp>Kiv92a-mNSn~}KOMF@upV6RPB>TS)pXh$pXw|8{lq@Cj=MMISXCq+4F zWqGfKaFI87Jn&G%d5C0V0WP_|kq6bQC(+guP^lw%5sH_jYDUCP$jFnE7R(1?qU=Gh z5;9hU(gcam1C{c#5k~ESRoWy1kVn(2>O7MU>sh5=g#=)7W5UU-$&Kmy_T1i>J{}w% z+jAqRK{Mi1)rke$x)p>s9M8^+wc@Ftw;2luVr^7~ponNnGjvs=gaMk*-%5t_5ou_} zPsw1(EZs0=NR;+El03rJKL}W%HeA!*SzYYCKpNQj)bc!QxkTXVIxEv&4_*7k2Fm%> z`IX$vm35v<^^QPQPxTb5vNO%B7!S`835e?}h~aRq$ZRflM}aI`S*s^NRUv-ayJTtx z@4A{AlZnyqW7V@eyl?jgv*Eb+8T?-ZR8Jv3y4J>j?JUjJ23J!e3Xz*{sVF46wwf}c zckcy7bdAyU%dFFH-;d&r)|y2LBWL;kf^9KG1nRbk+C;!CtHwWb<6fYCH0*!!-ngK9MrA~ZE^@#RTDvY-(H|z z+(oom2yf$tq8;bWf=yo;Z9wg%(8j&+1!^)7KC%}Sq0uF_k>oL4vy`FsSfr(lU~Mg; z2=3l5dJuNxZ5Ao?ofmsPWbFmDmqD8jxP{e3z}>nR6wn`j2LB#5-c0B?OUJ!kf(r}* z$UCj1B7o@HY8r^%y%%KA8TNR(0^e}roDS2ih92_f|R%~J3hHlwYRGyy+Q&1 zcx7K!MrIq~2wx?yhsuNW;Oio%FZ1G*W#y6rri$_xVKRX2Q+#X&fO6<}07|y&%N|n2 zQEkRSb6t@8KC-k{JlEbQCk+kf_8RY|!4Z_cGeJ>5mb4dd=6Y@|5NQ$;)$?*&n?uA6rEu|4QCBL!WYec?K9&NqAg z@`!3I1Iw%+*S=u+glv%b1A9Rfqw(-@_)~B2c?MLdsqt&GZLe5mO+Xg~dHjVhNC^Fi z9@z`pK;^PKWSQg2J$nP-$LJRY`Tt{!CsPG?`~FY_u(L)`yJ)yh5$O8^>jfE8!?lIN z^pGlU3W@_rU!rM?L?7D=Dq*aWf$;U#>4yes9~MNuWn?jT7@v`_9ml#yJH|> z!vU&(TH+Z908G_-y{;CEC2+qj&BLS~RC=c)ZD|}j-g_`mGkh5E8Jf0S1h3$*_cz=6 zKC)cshNiCQu#1B94vBbWMJt^Ru&{nmfUO+QZ+Z61+J3g@CIIA3mJ%DRty)?|Ev{ z=}jiXaWYGh8xI^+J4bnQ+w&Z^84NWc?G&%CP8B_f@uy6 zYxA(?$B;Q{J&fDQ2{YJP?vV8U7vI7mSj358&*A9jEG&R`C_6%4HcWT<&Kh$8SolW5 zXw9t`)Fuo!D6^vN`+%0=vt!F#MCYU6TNm&~RF%mo|E$0e0th}f0Vc)VUMis^zc1w= zvH;C&Pya?xv|{E*p%gut8iP)+&(xcKB#I_Pq^4={To3XnT*E|DeWE|H-}pUJq1<`~ zr`?ki4BL4I6dBZ+gmpYm=KNcT;bt*S?SqQL@!XJMR8y-wFnz*x# zRPiran$@Q2&CTr|D>D4%U3=w0HSyTPz1XlP2P}&JZjm3jA?flKZd8ISFn@<-ZTXzl!1}$-nrZK@(2|R`Y><4+~S{?Fx ztB-z%`}qqJP1c*`zQ^0(E_emt&T&_!AIM64j~5lG++9%`Kp7L!dxI}DUDtdk9ij;_ zg(voKeBYkV9tK_Gt~W5cb&Dh7Te?>DVXkAmaIC;oKJcDYDf9-ThbbQ3d)Mw5@wxY9 zjwXOS5Dvk^!!ZDHo58?4cyPWG!%H;WQ2u$NajcgD8XOQGV26p+^y&1eP%M$DWLyXH zfM0o?EFy0;#R_KVB1fh*fFtBl&;8(tvWLY~nwg-O0%Bv+55liJ z;YU8XcshlEqbTRT4Z(K(&0=SfV_4Tt+Bb?IZo|cVE=edRR^4QJmV2ZjvR`tSxounl#y9=bLFS+_Uow8z~@kN|A`)eL&e#5?Ao7z>4u z<#ugvZn}KO(^!T|Y#MF30yTxhsR1mga0>1=3+|)Ev0J1iFA~^s(%Mz&9(>pEVVZ2N zAEbM>7=^tC+kZCaR->44XI-uzTF&nnksUlu2Q9nFayW&sNI5t)w7ngVybw)k72Dpn z<<-Wm0|)k?0gAuE_>O0tAc_#@IO=vyRdj7J#6Y>!pVmgPh&z2bkKe<#%65cdE z-QIk@8Q;tv?)pRU_o&_Z>HJKPay1ttYHveFyu7s&Bs6`49=#F zkn{YEh77Y31VgMdydMn*@B|z)6T6S(w|(Yr3v*=zx88EM0$8u%a90eBRjs8w?%G`9 zSohfSoaGy&*>i=@PgS%NTZ=2tiCxvmYb`OwMIg3WF`7&U_WRfj5%Nn?5t8At_pNQqR_}<3Q>RsnT|2AlX{C92lfo3{tdl#(CL-0&a=3B|Lg)NdZ&Q9yx-*65L^>^#tcQqz~ACSbzO) zFZ|a%Jhig*#W^tLfhilnl&_Zk^6Kv)S7vKP)M&2MaC~R*k$ya;hgbmw?w1sUc(Kw{ zoT2a(Y(X?Pm&$~m0GTL%5k&R*YP^7e;w)WCLu6c@+m>siqd}=g1 zei(i!!}&MoE2G$w`#m~^PO~+tY9iTdgwhU&kLKYM1!0P#g4BmIX9B8x9$TBGIY-5- zL6jI@CNp8fG$x!Dj$m9v|-l@ieJ_(3Kts1 zbuna^0Pe?dj|1S55qPK-&+L?mvNn)C4w0rNvd6&%UK+t4Vnj_O_z&tm+f$eJ=^@T^ zV6w(A*}l4{Pxmlz)NmJd7A6k)FDD}(+|FgO7~3oD=96yYSwIg@7EBdJ{iCb}{_1AC z#Uky_!rpx)dd31zZVz^y2#t&$>l zO_!h4Qz{SKR4+F%YThEZb9wHpeb}fFmT%w|GvWE=VT76lIHG+~FufoOaB;I`*lzDb zbI_;rDmh4p)@i*?8T2lu^$bOdG6WTrq#(36xEt0D64aa(|5pqW1G-&_)y+0?4IQ&kMh1;nTYttf7;>-w3fRV3 zTYrHigvx%fDQFhgn&Fio&oN;>v$b)M9Rz8b_H4D+fZx~icwgs`HkqEQ5GL(=9PL!y zP)ub;WQD@3))UsBpkwi~>ufh(`0U_O_zv04g7@4z3mf;ss?Cad9S|8m98vuJ}5&|2$y+yeRC2x!ggy;)IHz?N2s0&C}lZ_ixqawv~s<%5& z;7|c)sVDmw!42i9bVrdM@P*n%HEUYiwf*~6qH0Y8eSlN90!h^iftC1V zdKO*g3$P@Eqy-B9rTGp_PEkp1%)Uh3QD8P3hVLs{&V%n-JL_ZnW$n1I{|2QNPZy1^ z=9>j@X|1U#eFWPxKoJE02_%ne0j8iNU%d)gk&`t7gA*yyrG{fua$xlH>6J`t!~ zxmiN6=CR0+gM4|CbkrgpR4M2^GGBzF^XRq8>01QXnn`(V47$b`raBboj7p$bvAvs{ zXvNFc4POG)yMFugWOi1$$1edmxYu2R@<|d{3wEP$;b^C?&l1rKm|cI7O#OJM0Q09s+cN?_#x zNO2dvqX2qQE9GVBJekX5O8>{-tapG5{A(Cl1ixaZ3$k`_FyY_+v9R9);@B>24@M3D zx&Fs?3IDsa;eR*(u5d)l{cM8kY>;dt#W*z1{_(dBeD&Y(4ockzxh>F)*cbl|!{KiL zN)?@2y!fd3B){zqV7F7G*N4=Fz7!573=J`9 zQ{hTHCk3C9Isv!Lho;WrjR{@T=D)198&*+P>$?*Isu`-SWUEwmeBfXq!vdU%Tk(7%g(D~EC zh6xkZ`mI=!{9(CHNm8WZ=D6uNUsrEiu&e27Z#l(;mg*+mnm~bL_k*KITwpTy38$&G z$x@gK)7)e)IDUaY5eLZG^_8Rr5C&{`ZwAcyt)+zuYtWOYtOv#PS}XI1z1prqC&25w z2g_b?P!Iq2v$eKd7#{36s}*?88@bNLa(!R~z_beVBsCksdK3iAr`MP2sR{pUNiQ0h zlHdXG1T-E;1)JOmM$B6Vzk6yUAd(az zzg&Iljurya>8hE)4WP=JRYCQgYk5A!Z{WUG5I^?~k&&KLB! zvMBfC(KLU`~nwx84uCDAKK;)Zq z*YP|d;+pdL!EuBjAn9));pwbLSu70+b2fJMgL90qEl@N$2A^+TC|#HD!DH5sxwY{z zVdF<&m#W_o63w|CCA4U_-MH^tHArPZNSl191XyQr>IMb1- zYx>4FBd~c3k~m>3wqpOU&HAxS1fe5P?wQ z7D>u2?!AxT(F80KOq(R4gMaqA4%<& z@QzwkR1F;lfnsT`U;I}kOU6K?j{~l^ONq$}G@W#8zE54$wLH*`GwXxOHHl9Ers`fv zya}vjpAvH3cC&F@KMYmDQN6!!t*zC1HdprYJ=$^&NWPyRj0XeF`+b-iOc(0b+}xN? z_R{uCJpt6vB6H))qpe7JV zLNnQh5D0t_;xP2X=JWC@H`4C+hrck}nMC)~@~j5n?plVsd}(g9&6pZjy~(IO?R=Tt zwkI)k)d!lugJRBKp*e9QtLuonf#4JLBfbNZfp7B_heNybC4h$U>(m$z0NH$D2%O@M!Oz`0`1=SYe;s<)@mGa2XkcD*nmCz?y|*ayF&kkFF_=-+l=&pz4% z6&z;X`+EKg7P0@Z7G*~e67Yr8aB!$A#8BR5JJej$%{NEY9J-?IsBlDT^l@tfzU1AJ z%{0x2qS%w(#Vhq1LOi+d2TF0ag@@Q;!6;0vHK<}gf`T#m?bEmOOw(p$Ug7{#@`pYtBz8mTwI^>(LY^o=pT z=cD0S-Y0c8@odcQ+P(gaV`5;<_xi9A!Osu9F;?K1N}~P5Gd|N#PfkC{rFJD}ddWv| zHXR`~%IiZUagk|xc{91m7$^d1k|JX#)Hi zR@4kV2wX=6#~v_P56{TudXw&R>BDE5sdun=`kg=!?B8 zJ;3JqKg4u*Cw9jp>=4vF5C%gShp6rciRy}weF*D*5JVs1x_gRfH}*5o zT|ddXE69rRJ&{Bgnt_@_QbOGb*x#%K zO8p7g>CWi5^MI z9uFL7M&DfA$c;j!yLsVQ9%pi;@~msP)%gSFNMuM>F)>XsFs-uj5ecXyaq6oZS?kk) zojB+flTVV6_yKtJ_*9f0!VUG!fJu1d`WPs5^UOhtS1n&jPk|eGicp2P;h}DO8Lh4Y z@_Z;BnG7HJt#crZAxh`ClV#ZZS!%*al)l>VtOypDf#<>ya(vnfT2mFlsLhEECL#~d z5=YomMUFRH?-gRq^Uby2dICzrH^@Q@3jo8#5n7Y1C?wV`Z^qFe5-1zcz{nAl$ zFs74q6F_%*a&jr@$(J5{Wp-Ot_|Z3NG(wUH_VlUqIO|s5%g$Yz^@IC&7i zaKynji`1!858&s}e^M*tk#Tr>a$YptJzc;<<1B=TM}{PbxQT|T=_@h~!V_>|Z-6wg zhe7XdIKH3V_J^IHDsZ7Bq9*8qdwy}Ih=3E2!u?~V2Kmf|BZ&#RpP2kN5!HdUao@sLFZd0S z8bL}U#27%BC?f}i)b(RQZ2}MwXoE+7XL3WPnCQ+Ua(XU7n zP9Ddh7Rt1ew1T86SH4iasVRx*N3!Mk1phd zJSB#j2OIMh%-BD{K_|X3a_|Ya-w?`_C@3XUCg9cCblmRr2A^kxA$AS62VYUXI%eug zlc+WXmvYu>B`%m6Kz84oOqvZViS=Crta^hffD%wlVP!$1VJ1;d zDumhOr`~ARZr|QE6he|h-Krrp9rxOU&wZnjQ2Hcu%2x>`cJv62lm%6TV`J2BH%gTw zkh{3Ks2_5;vB3S1)(IHnIH_Ol8;-#LPrm|0bjHK`_9#-D*$6n@$atzkIKhrK z{dUK=HwIH4SWP;mPft%y>VegnBnZ$DQmSVjA4@>-m`Qcx_>we@q-lI;^t&LZns4?M zhEo5G$pywkQIHj!M}JA|1d>7#u)#u9;4?Kx@Dwmb)j~GPwwhZS$C-73UQ9weJH@n z5NEBb9=wGPut2IvYZ=%Y89}-@cmY>rh?s7lcnb6e<)9EW_coN@^q+A+@<01X(JtR?KUhvWAZBbY4L1<57#v`fxlzFRRVcp4FVCX8|f(X=v1)POUXoT!>lHipk3y(_#0Qo$f?F^v>y+ovF3;wQPdF_C0o z1w~x=L!iJ$#?2?0?TIq{;sTyU-=ALmzlV#ZgpFd*W{@hTFZ2TGg;nx3HkBwK8v*Z- zph4dfC4Wa&gC^F^#U$9F!@DS*Z&}NE^kK^xeIF1shfHoUPIBrgT z2_ilkneR)-TukggELM7oZvA5WZQpn8r>$?X_v4*WRQ|~*PhFC=%a#4s)?iRB<$W8v1rXe`Vjwt}a8vR;!2g4d4 z(=-$(nL!1hSkb;{cTlVNh-RQPX5c17kZ`Pr%P<7X%;+v>#J7f14MkU=Yd0|ee)!fJ z`fMZtBaty38l!o=aLx0;1s>(A1}H!B8P9x?9OwJ-naWPKuY}Y-M9ChZN(wiGFEEV4 zM(orJjmE={(R~=V`@)sjI2QP{FSd`f7MLBgBcZeAvXFf}3?3#%w=of>khmJ6fbBVf z&6kd6dH%;DGCXPg4ZO)*j$D{^V!v6PEvhX*$BR5kUzVVtS~4=>Tzpdl5)>NVK2HmC z2^DJ}1#``7>&FQ9%TE`j_Fh)EUek9qDI2lv0JDUlfiiu?=|cl@E@Z!jX&HcPj5+{n z;NG#dS(@(=&eVU9<<=A}S}-FwLHOx^Dnh-&&zvSz=8hmrH&KSUpG}j=h%Ho$NU3o; zelS=TWlE9RHWTbJe32U8<|j$9OPUCtMOy7^2hzB$es!awK&ky4;5*U|Nu3@OJQYoa z$=rv6(`V~%yue8H>#LJg=6BxgO2lehr>Y9@mbr6A1M#-$zOT)dJ)gkR2zV@C%GxEi zd8x$6H*SfzI1}8J)!PJ%UA_+5_q`6xMx9D}zky2~VC40FGnylQ=((b9Gpq3aAKJ`T zpDTWOEjuO-eP%^Ze7ruhY!`)#lM*942_0mcAJs|tfM!H=LM^65Kd(lU+vcNF<0G1c zQdkfyKU|eCP32QO7| zl=|jIp^x=e>!VKO<4#0dKF4@k&SKvtIjzLEGzmS2uK0-{I|1g;v z<5|1YG5W^1jZ1EV2Me9JmB??B(JckAm1N~(m_2=ba&~c=6y;<l119b$0Y;V_?A4 z=+J$R`bH81$65m_S@Oxyx%!qTIdL=`H4$e_5J%<>bMO+&b&)sF3HxR0#50*_NJ6-g zxl=E6Sb0mjM50P+lTZRtNs{a-v;{>TtSW%CP0yMm(Up-dB?!%k9@s%+R17DNb9 zRRpkiNC?D|1DZz>NdptIQG}@0rZj?RI`>886N0;PI=ZZEC}VU<4jLS6+8KU|X7V%! z#q1e_(5oD)D=Itu=%{5=x*CJl`i&M&wAMNcSO%lSxVs<>xC6!6%7atOU*~5ciUc<` zvn@z;%3u$md{cgRQ9=QTu8(eeXe721X;NfgNG^7_&96N-Wk_pZ; z0B6n)la<1p+b^=B6PNY-xxZ{p*94jc87{U?AObqa*~2AKsmM4WKI?}y-}+X|vsc@t zZ>}vsgUffkVv4srTR+?7U|?w++<@ZTF>zXKfth0B7aXf6Q=rpD z;?TjU(wl6t+cUHzUsZM9m;{6M3)>(|4EZ_k+MT9UJ4zt7BZ5~bJKny1wtS(?!n%N$ zU25no9W*mJKDoG*O^hJmBX?#I`keDovu_>)hPUPq*oJGeKG2=uw} zy2M&W1y9U~-3Xi;1*WqL8I7P>&)ZdK`^O;`I_NVuU6LLsI|6`deKD&^O`M^7; zcV^%{I*;@p-Uh&oK4AS0le%j=*iZYv|1TMlfbRmIP(Rv2k$H738>Fo0kbipj%dJRGcSxb#F0J*8|60ybr5HF{I}}(3k{03R z;-0jHasm-nreVUlDND3clHbFbENZoBhfNj@I7I9hNtd$^WWS_@+4;q_Bz|`=W^#f# zv}^#7CDE)8VcGDoYN(l`fzS+%;V(~=BN$SKBhfQ?d%UMEC5GIHgUzt}+4FWiFFUfF z=Qso)SC-TirJ3-Ph`1()WV}3TU#L6UqDjr?^ML>A`b^%4{@@L$9aA6OHIRmwKe(Sj z2UG{AL0V<-gLn{9^4UjmCv=?E#$H-olrm~9GWYioti-znl!owbxdc>SdUkeRp|&SI z`Mbs)(B3-3`%$mTh8!Z;c(nHT>|B|F?`6r$j%YrjqVJGng*#XSBW;`tr33x0gl-RAIf6~x{=tBOq^^%C|qbL=f)ndZJCWtx|p;YKB&dwaf zKf)8^R4e!$Jd)vvHQg5&3vsqDudQcTZMuGMEpSI^QWXWOocvc8-Qfo(l}G1a2+O0k z9zMX#mbZQKtlzhAE*88C7lW0oChLHk)NS2vpPzMQ1oucmQli7IiNr&Pe@j)SMS7UI z7GMH6IH*LJ(HSct$jE|EXhH9IX+K-@_c?kx*ig&E&DqNxIg<%!^VMSGI7_)6NJFQD z3`XE)F7l=T>v!m@pkkB=PCZC_+s(#tedOMNWsorTjmjHK_A_e%5S&3k-fX}J$e?C> zv z7AxgGbGsJY#ykDm%*ShF9mYIAxw@2;!nK!6cr>kS-^Xq}T*Ql547EH6hu!AUaUer2 zEkCF*Ej08x>J7yf&)QVC{U`J@1rJV zse?d8$0j#}Ce1AR26_(AJ}7KD=KM9gCL>tuBZ^KD7?{o!nodu47FJmd%k5D%^Oe6= zCF2SKc@UP>!#wh*7X5P16a+>&@y1EE0CpFOOetq%6r0lZj_tMW+vc(xlqvuPUS7>h zds=eO2njwMm#Tko!HjdZ`ojZ@hXK+}FMMs-?$(2++16dN!9e80=RTNCJ!B1v_>#z| za9sPvUIWf}56{YSyL_ZUk379P3wq>`NUd%}^a??%It~2P182G{9X^h)J8STb%j1)? z>l;Z5gGNrfXvtufoa&~a5+*Ulohv>_5#c5!3Zk^OcIQiw+-CebHO7N>zyEbM`8w!) z84m}&-;6FybE_3;D-(+CHFQ2+AD^C_ok$`<3M8>h1V~|jYzz`m7a{=??v3&1YTKsE z(18Ge@F2-O4I~r?D)Rkaekx3J*6bDJ>uHuHgVx=!UQxaqeXxq)H7zAMi(F!K(NrK%Y>vN4Yasjml!Nz@rZuz6|%Xgp# zGKt?3l0`EzTa6)~qPR^87z5nWvX<5g=0}F!z^ts-yy%$78J1b65-s)-&pja=Hta9y z>H_xh2o%F8@HOjK^=E8dB#gdb=?@m1u?JoSN&ga1XxN5+P|bzX;;i+YjYh;EB(WC5 zURqqIgv2mniFRdd>(%sC&|qB6nu{GfOLby_Uo2Q!@Ceqio%JwtN@&8W$FJxI9CNz3 zk>&K^Zx8QHPlxAc6}o>UUrByIAF3>w=Wfs8NR8OeUkp@S_-KqLaFpV3U{s)!r6GXp zn;WGoCNlw`Fv^d)1$&G!0bls9fDGgGqc3;mw3jG= zbCYeBr2W{KY~htErLh7b;O~@)nuExk^Wt01i z8CL>Qr6uQ3ro;bnu>b6un^$}8#rKLZAiqp>NOmoQRwSdR;*YfNyT77Ub#4@_U(j6o zBLoF-+(-Lnz)l4cI7qLS-4jAaMRg}J7CPHAfg4%&&&`bNVs%6Dwl{zc(0?+%R-P2g zfni6IKqX2vUmt}&%+5DmNV?)jRO#fvXm$l9rf|7RCb(W-RUZe|gM*?j$kRVG$(i0> zzEVv3z{}~Fzo8N(S@hz9j%R++h8)w_cRHzdpt%w*J92Ip@ug9AP3UrN6x_r6-@c74IN^`Za$C^7!o(;{_er-PCdf13!I5>~+PJpk;&T14v0nYC zqK6X|HVGQ>_)N-WJ@$)(zWCZR=gTKQRLE#XTXra+>jgCq^WI zv8)?!z#+U1$)p1i=@2&&qu~<<%A``BivJY%v*DM8?ZHZJ5&lq^C#bXn_yY=+Av+rL z*n$m0=H@5s-D|HGPWVvvH+3`u#hC2Rs^08LHfgc&OxaRE{P5m17)S(F{+0u3 z2&Rk@b6R7%IB}T@XTnDo-~3J?#0pfGn&nzVk=Pm?i!4O;*saKYCU+%Wmm2&`!44<= z6pMm2N_A8_vtFrQmW%hFmRoLKO{IA_{5zT+GP)iW9UnRU?QrFmI>uA_7(M*aKKnCtP|WMj>3@HKxRq~)3=8ei(zd42{5H|i%TF%QGuT=-rJ z=9RU20`v!td`sNu|K8jfYd>4b;SvqX2~!^;c@*X9wgNCQAA?{eQMp1`c}zsBB1i$^ z45qM(vrks`dh3ahSvfrC4(bHtgXzf{7)4k? zCmCIi6DvSUORBW)fTT2~g2m&OZqXZB3k!hTr4Bpq6*lTV5=eVZRC7 zP?zlNuPu^4BHJM#Ah^Q&hA#2sI7`c1M@T8dW&tI|cFM8pEqK%U8DdTR&pge@BqT(2 z#=iaJ7GAh7TJ(5>e?^D>`T4cvl#-W|Y zufW8*V{nU=8dL5Aq8@ygp!}F_Z-Q={z`O39#dc}+763=~vu(NImW^MhoH45V5ISta z)GIr(eSRn+1k`ZX?)7KG0rUIte$?wjXZg<$y)id-xdkW8 zLcd)@h~@g^MqXD7iA96S;&tgVNOg@#XWSc2hvV7p!`+=RMjV6?OT;A%#gJEOdo$B= zZ_+O6L`@J3ySk7y2vrr}Jy|w{mlhZX!`Wy&oEn`epwM=wV@xL8d~jfJyIS}!2~Fz# zH3dm>QJVru&em@_o^oulDX2I&2hV zF@kVGehgh16g z2LUgn%YMT!plASBEC=LIMxrE4*JuFvu9JGZ6-U7N;TKR~y#PdTlUI=-Mh#D(XK?Vs zki+pCI1FJ=y8G?Yw>@(OK64D1G3Y!fxlRCuPAsw(J$MOcGO0gtjZ*+MEKBBF7sk=S zB2OCtdUng;_l4!cUys+0>HFsV6?rd-Gw?vlD)xKJln442YIXL z>hpFzN3Ln&u8VE1Wj>=5-!<2s4ex{sGkQ9^@M~ z0>7vB?QG9C$v#DLgYBHj6{~8|an$uIcJ%VQnE2ocg@-rkZa$6(%_T^mwogCG;}j_v|F^jAFb*DTDn?u@|u`>W#xoe)Qk z=TERGkkA?d_}p3hCirS-L{L+i(hSBLUZn>%^doo{$^ayM1j5pWcM_RriBZoM7=>vb zNT$#|q>cwBz98cBeP^%s4X|V4pP5Km>S@ zSHYHqhx}?b^s@MPJXv#0mCLKM%1K&5uIWSvtm1NfYYs`93ZEymUOjLf(cQG?a|>ws z(3>syWXKE}$!f7y>XGXbgNCRstQshUJkkYa;4EdlK|^Co>Ch{8lQa&!kZGEP;yMEy zDlf$O`L*P9DX1Cd5#Np=D{N!)v5mkXI=9*oOPq7U)+i=#P_^rd(aojdNMQjv1j}; z8jh#4UwYFov(E5g5LmgvTmk7r0-r+Mj_&j(li@hk`sA4i%CPL#K?x*b|q;mt)PKtJqH|9X9Pdi8ft%sXS#1Gpeb>mz;# z34E09QC7$ZzBF6vyJxNddwSTz;ox*s2V8K2ulIt`!ScQJ1Xy(u#6z9{#&Mbhttm?K z+8%*_&6nE+^1Xsrg@KbL_|ye`0di73K~L(MIx$77)z2L_7o|mTCl9xyHqh56U)o)0 z+kbgz|6=qG9xEj}K9v>`PC!R~#})O?!y14_Ij?SR5@)DohAL`kgU*3jdwgF%amP>a zXH-=6`_|f8t!Hy(FW*UM6|({JeLp`K4+i^1(4GvxstI^3?I@SvF+W!@M=lDXhMpbh z%YhYsIJDXdUy{8*E3Z!jKv>sf&KWY9K2oGEJ${4bl%L_fbbFx+0T6>*gD7u_Xzr+$ z7dY=RJHUnmKs-gmrs0aN1HEWKd>QMPgqN#sjcfua7NPYZm?4K5GKd~R#R9OcWxuRj z2zZ;|T|lpfFJrSWsO`7`0tU;9@2~d!RbRg3GY(9lp$es42ocsG<*!5lg#b|lg1Cq} zkc@!KaMvW1NW-Fn&~XeQEc*ONk_61S@$FS29n{G7l7Q_VvHikcgwEAw@qZ1>tZ*|I zz|eKEaijQ)_Y`V1)5;UrQ-4eC4(pZRJ5&yu7* zJ~dZ098qr!@{mK#VTLt_x|}nx0i*-IQc74^QrXZ%M4f0yH&h5;y0Oi0@MYU8(#3i+P3tYg-eI(1RG{fB~KD*9#Gk7ej?2KFV z_yzty%91@kIlI15b`1~j&01MWV^$F8VJ|ZXZwsItWm@t;|4evUuz4?3+DLR#_hvR` zfWC<@fed`{*ux$SZVHfDDHHMN5@jS_-y}AuD?q_X6SS%kKoNSDR8dSRhr6&trH$%W zJQ(p|h%fdc0F~Hp*!bLRfD8st+t{|p;TmB$7D?-%u?yaM3++7=Ju+sq*DyI59b7d6 z71dLr5I0i|f-hLc9IU`R67ygZrUc!=K2)*a!B|WItX;7j9k=dKJ`cr@W;(`c=wL^tup^l{w#E-@ zzV)HT5|;NCH1AuobZ~Bj*HOdVlk>AHNzQ~!LlmzRt5@JJ?|^of0*DA~i7m6E6djhQ z(#l$LLxv%F$^_0rn&B4)v=2CBM2D1EtphH6}Rwfoxi}4x<$X=SUg3tUg25pku zEl>cm%QlF!0+XOd_ToUZBRrPIKhlHR!`fVqtqnN5t+kKyO$&FH$ls&#oMa42eF)Eq z21F4IB}3gB;SZ?WjiL*~{BinPd@8-c)EE!i{n^+Ujg5&hn35qcwR>0;fIqlfl4tv zkwTqAl6N%7P?DVUwR$CFP}_MM3fG6BhF$mFJVp|?&<9m}co^)Zb0;G#JoMMZ2k+4X z2lGHd5SfH4-Yw0STN@2+75-jT(Rd6@urmdc!&)$+cNYqv9$6G@hXD`sYi+>Uz<*5a zKXe(2-d?Ce>VXBTR!0S3C_=g9p`)WohIW>Q+E|oPCeji4tv|i{W%m+N3U_HSb)`kp z1^S>8RMw8O+Sp6W?Ko?&SEjvab`?Tz@w$~%IQG8RH^$%}gXwtKryeR4G()1XLiJP$ zs5yTT9&Fz6AC~Jp+5XD(z9qESh&`LPPgz-%NE$fbkvX#=5c1QZbm`iu5E30Ui0%xd zd)w~(#FAmPBq)c`Ms`oiqKfF_WmZ2$-^J<9@r_jF;7bQ@q{v2Z)Nw}fhm~*{9oJI? zf8yPnixOy#Et7|*vH@u1f$Aa3 zzC8w0(Zzb8dgodef~F)5Jb)&=v3e-Nx5l8y{#XyxsJk-4;gaM(Ao?vE&14JZsAvtQ z<816M7W{J4@Co*o(#H-)#5|CHS>PyleDeJ;@6pp?N?@*Z5#`Fq8}72EI>bFwl#7sC z6d!hx_vpF{vlFov#Nxkb0WJDiDY~O_>jI$0H!3s6!h>kHOzmI%0g=zcb)tR&EGRFO)vAVvWJOJ*&CU*>p2|HcW^ zr&qGMcZ49h+yC_9|2?!?vxWV_`XwMutlzih5=xTd)jir&AH)2MWp3z^{h#0`8x~*v z*I&bMBmI!?z(%7aLGPp2{$HhU6B2N+O&JElTiFsa`Z2HIOS#fAwz>;OCfS)0iTVej14u^(+ini*?gV~JB$Lx-%3;+6Zu5#9nr*6CPt}(>Nv;kfn>6f4Bkh_ zff8ixlOIpcu5RR`w|(WT5q_zlCPj2nRFOh_M5Np#2pSYjsqhsx?w9lq6hgdM%Ll8` zM)j~KdvM0`dh}O%wswYJjIlA8;(^<`LEZw9w=#d=e=+Vpl&XDlae5+eXq~F?hv8@p zjtF7*?G?(4LKg!Tm28Zn2~z`wdw4nnF4($|K$h>!oB;=GoA{v;)#$0cr1~5K(H_mF zy?&^m0v3YM4yv`W(0#9367E)FYH7NIo_mRXq`W#CPLhOUjN?BS;6};?Iwx^ZR2WPT z9?{O5i#<_1qyClNYdS>5Ee5qsJHE?`#b$uhLBqm3EKzUwk;UJ#HQQ#JD z^x#iCwpUP_JPsxt0qEkNkSE~>{ujLn>4x%qUYErS!j;RaZkj1~c~mF?fJx`&%TI~| zZ3d<(v=#z)@J5R`XVz9a6tIA=7AgX=leGI5kX=A;Q366q+3;>Ge6SYBoh(2FGkzsi zR8$vh54wHgJ_P?94|`qk+qnBndu+^ZAMWmqF}85XGm|>r8p#=DPt> zA$4r%g==Sh3{{aM{?$G7snqi={~(R~*saWii-Aig`q3r5+0I}#txSLZszxsPJ4nS; zAzN~9O8At#0~St4aIo(N50qZMAHg6|%qv#Xc9=la)&uGY(9W=C65l}?TvDx6vRAM& z4hkiSLuU_#68h$YOe#Yr^;R?iI*|j#x8{^cg}y(pJSt=})k`CmJ?hn3fmD)Yhu0{T z3Q$W0jD(>vwtnB*uC)Tv$YW5({>);E4bswzOIn&Ih*2RT6TV1w84)4Oy^XAffh1o} zc0Gu4;iKotgj5awB>FM_J7j&2W4vnV5$6&?GL$3))JTR!B*@t7`Et9k#7_6ja)gms z$df~oylvlW3C`ajtD83!o^5NnXnB?&coSi!5Lze}|NUtOPi$gn!X0uyRBwETI+Y|o zUK`m|rcxn~Kq?fm6wR%sZ|d{@!)niF#CQ03Mug6*aNGh!UE_XZVaf3`aS_+%s*u-i z>=^~eJQev!m|w0O8ZO@6RZ($t1@<)!rQ=BC8WFUl7i#SaW$xT4+>1fAqcGD*wYS(^ znC(2ZZmIJwy&J1PuZfxms6*`|m#SMtkMe?MEsx)fAE7xeiem>nhus|J`kk7TjBnj* zLCqHqT|-UiHP@#6hZkbgCjknP9uD@opz@GOk2%6vhKuVYxuGNM&T)Y?!xv;|--{@V z`!HP9C%ilIbr!idnnd?k{=ywelL^dtXlW#U8Qlk_)uc2&+1;|Qi{DqshZSrPkWDL3 z&xi&OqtyI;fT-eRI(UpRK@LMUrhV@s&6R;?}}Fv zOeycE6H`$S|LN650UmxVQ>oac=U8}xvGot&aDg{JZkOM{O6^haD9CDwE;v{GA! zqxR1a#_X;OlUZ06fPIT_v&*olO%7o(Knr%PV;j52_<2DcBU^lwz1|FU$Rz%AaZ=>|p)B^qbz zd-lSjCQy`kf(rG5oOCdS6uk;cW>r05?Cj>I22v|WeOLWyr{H)mK%|S0_X-d7UwVV{ zGv-`pTplT&|LJ~u&<%2v6c8Z#3H0d&NGkH^o_9~raIqPS*upYI;09riM-)#85fDA_ zhOX^ebN{^CIz4N_LU$Yp5FZHOYh82Rh*LoA@XCJ*v_`{8@7LC|y@cAFH+Sug57>4$ z*csjWESltI_=El7)j9!1P^{&$_qRi*?~ShvTy?egIgo8{Qa zCMsvePE1CAM2ow@Kc+@!YOr=<-RQe2Ra-~g2ngS&LEuKP*cY&&5#CRVJdtq$6bTSl~I^UiXN;!r-mFv|rXR^RO0X zBd*D_>ywJHRYa6Q;e*tS^pVm0 zB7tF~I_KN#h3nXhFQ&WrZn{=9?Skx#p7(lpb1j<4BLHUj8Ir6gpf8k) zo`qw1)d-eoK(wUP=qx#<5=u+eVu7X#w0RPrb%AjlQKX(x>Qx|3pMxg}LJ2r16iMokYsbf^8UF=;ulaLNFG!AGS9n>IMc-xePYvBC7r~kI*{=U-HSs|4=;>a;h5|F3~HIj+!*ujc%_KGygm;UKrug^}e{?1t> z5uF_@8u^8_Y&h*bZQ?R*??&{-Bz6C8+`czBb^j>wnMwP8)Hk}b-aYsw<{N6RX%VtO z0g>(l3&0P-7Hvpq87qu~BZ-*44}-38*BcmJhPs&7)nW$Ok-9|TqtW83@O9}PV8sFN zHE5zW1~{sKw1eH^sAQ`qFK>Of7yj!}>(#PfUVTzjgvO&T&3B+tEbNuF_E0AeG5b-_ zBpy>qUZoU_j5|`#&1GG5n4ufvfez(#s7*sfs5;s{%KP5vzCA+I+xy1U2o#rmoi2zs z7iI)60gbd)_GV>nF#75t=T9F`SKlLYj`=`pBx~!3Ifv63pjANVdTG5`b&2VOF(n7O zPD$5j&fAmiBX8>zlNR&`LHHFg>AxoCM^sH3;i=b(Mjt$t{Gqq zg6X-4WYpH1+5*sCMAyeE&|Y0K3rhf@6^=S&UJ>Q(t6!BkEr7Pi{WdC+!1Z=4;m_{+g?zpsLP>Yyk zGc0mvS-XYS>c&1jIln2rs6|V2yPx)_;5wXA4%N1>GKkB%;wZG<4%x-iZCwOVuGG1= zeDDiIFSs1EtotBBM<{SG1X$N-k_?K%Fcd+%BW6m?gZMa9w)@$q&c^(GYjwcl07mV_ z!nHi__~iWjOdd}a;AbdUMS`lNTUiBBv^l2m17hqC%XKIo6g{Fir|dKQJ>$6*Ekkej z`@>FqYS0MU1Ttkmf<3gQOcpjSm{`$qmsb_uE&AzKr-%p=bxOLQF(}m4qf8I)@#>9@}7& zskMji3$<@9`@IoTSRYeRP&eafJ1?Yz)&c%{oeM9nE(%D^DkdQDTW{PM4rY({LuA$l z^AQ+{R&)~;)SUx7NmTylcNov++uWe`QlY#EUwLc$0itoKy=X`thWu}~J9pO6o^|Y4 z3XS_B8uP~4Y?rhhoY?~AO0-UkY3!1;0o_~c?*wplbJCb_X?lv?o4OSNS{f7CtR5{( zAoMX#;2e5dG8sg=Y1g&;A#D7=fKXW3G$?@H^~aCd+sc`}SpJNea`R4pq`PJ$nb|0~85$-rUZ zkpU2s>G+|8>`n6dym8YT+zo52M?(JPXD3(VG(|N@%X5H4j3u zmSpmQ`j&KS>Q0!Dte8vA2}gYki=f~`Y^9XmtJ1>=#DmSyHBN!BmerE($D-YA)(C750z#u_21EKCvoSJ|)b%Y~r*v6V$8)S8X*9LDy@l|AQ6@T<( z!Ug%)fBhc}X8uJw`?Z`rbe*xINv}A;8EiF>=0##(@wpaoaT3!~x6a;W` zITDED0DK7iAOFrV9w-PK`$i{dG7bakX+UtT7yE!w%E$hZXr(j-cuy9cFF=M+J6k`r zP*Eq1S!ZlOdvr2tk0&tWYS8TsKC|O7NOf19A?R%2uO__FDd>Q02=`S!uYnL zlv*_b0M3=CxfMnLM|n;{4c;Ywv`oyKdiHw**q4gk>#HQ>6>#VxMMiD|Nz9)h?F$D0 zyfD%hivu7fmG%8=IsPT{i;glp9i3jJwE`TFb2?*kbMri&c?W_KJ-P#&@Z)1+GJF_! z_%Dz}W|BwJtyvi#nX{zH@8;5Ta6L~rP8pFgGgO(;t}~W)1bLrf*aW@8^PIUINEtq$ zQc)ZwL1JHD$x}v)JF*X4f8hGMxt^$ZLblIcRzmrnzNE2?A0GDd245fKu#Zn5J{&dW z9yN;G^AB>=R6%nGLB|TZD@9FA6P!u#ZDONT;!W!ICjT+)4W|3&Mda75CAc?9UV z4G&(#yO=5K6?3{!t=m~IgR6MXL#>dVJFAtm27m>UM-0_l2S^-82-+jriHmBOVekqA z0e>ONvsgRpWBX<8xIl6-3G!K^AV*XH!+$z1Y(C@K)*DznsABQJJEBRSu-=d4bi#iY zo2l{kt+QI(+Uv#CURoITKX-=r8FMrwt0BYzu-BIVSPOEQIq=8d1wS3(L41kN`>z})Jk`1uU<8;Y zULw`fbg~d?WI-&+yyK<)Y|Y>2=;>fX07O8hl$ueb2cr3Ev2mQG7(iiWUBGrDa5E=` z6+nb8?Ld5DfvE{sZ@WQ?`-^LCUhTPuWH0PjzV)q8oA)Y*9XQ1nmb(FamjMiLFM);b zw>s-3v>Q;lApn!J^*x}cqnd{neqRf|FsL!8{G;E%b{v3FDIXR6)#!yS{Kl3yccQv~ zzBEU%+{&EcC|-^?Ld_^TjeZjMWVP40}k0sjy);1Qhm~ z_WFS#gj$&*;f}Yt!9}cP8if+D)?*Lyuo!fa8OTDUdO#5R($dQ^(U?pj!x}B#5u@VX zlXv7($0RJPlTu$sigK`ctT^}P>Qqv3S#^S3p5!L;~A>%snJ0g<14KrA}bMzjYh5>iYt05 z;c(C_o6USaXs%DAbSIax{x2V^oFz5bJ|%T*E5er@#@uq{MJE<{M*_<73h&sBZ0vav zzn^}8I7OUFDQ7g#| zA$O)H@F&avZduX(rwkFC284k+?|JrH`3Yq*fYj>!9gTa#ac>$uz;ZU06q4K9w~6Jm z(KQN??6js@k|DIqvrm#LxV<7YB{UZ3cRlauCTv5jejYwW8D<~Pq-q|-J>%lxiy7%1dacs z3rFW)a%)B}mK-ON(m_4Pe9%j}j@HRqJfS6qbMXR|#efT*?6pZ78VX5?k?SJ$NC_#%WAOfbNB3VZTmn>|CZcHQ|`4q!#1&^l+Prd09G70Dj&p z3~-bl$VmaN(~I+@7EuY{Dz)KX0qy$A>9v=c=>qM9Ig^`03Ks=&4&!u>%{-GTBpF}{ z9|;r>A{JfCbGGh0nB#_uF1(F3x1ViRUdBG98At%)s~}Z^K>`a}6$*G{rB?^3#M?2* zBhuG{x~_J;CxQV$=F@3X*GgT;=%1#}ll6|qvbjw9Wov1BRMV9*0@sj@_CclL6!J|z za!XJ@yuGx27y*h5TV!jtycTzJz3L^TEQFS%V>`n12c(pUlzO}wz551uGxX0kU1x^2 zdM>*?XK1+K_(PFd8^PRX2GZGm9MbhZT!w-S4jXVGLezRd5jkYy@Dp_hRAc+4z?Y;-D!+o!Ag7=T9JS`Xem16cDX%J+Bu*9=gk+m(>Z`u; z<0fEg3y747CLhxZ38QaC+auh{Oms~)_%Men6RC%+nhmzGaK3xI`=MejS@iwE!KG{f zmzgF>4hm@|0)4rhx4RJmm#oKfdj5$s|Y~-U}+;Td|a2Q4nH2GWEoH;IadpyNv%xpTbW)zKFg;1 zuil%CfP#d~2j~F7s$h4EA`7>I)uQ!UN$q8|lh8hDz1B{aYlY02i8-jM(0X2o zs-aM-f@PYt0sdz0Z=F?L=rS_{{HgQ^E?d}w=2XCQVKJ#R=UGO5rx zvar0lYd^&-)l^ycR8Y4tFk4tDX(0o()u}1#K7!IuXUZW-sS$UmZivCT2`<6AZcU{O zLK%FhU?|Q%c(*7dQ3x&baXnM`^I^5Yoz|4#usY$ccFkCVkt=1Vo);tX zC9Bn|Vgk8VPkMQbBzHj1ln@E)0sP{4{s_}`-YGolW%+Ejs|!W5I}cf+yK`y7nPt0lB4z{!UB z4PiwRQ>F<&;oVuzD|%9aW9tRxWn;e_{Otw&y4o&%d$VL_s6T!ik;olZnIhT%+)O~* zAvCF*X=Sf_WMU(;?>2ll3^3IWd!8Q>$D|ASp#X9YDm)58ZZO|kJQH}mT|I%j0FIyD zeLQ0B6}&h|+W-D)xt4MT@Y$pjFIgx)Ian~Mm}v&@zk(&gKVkIu6&DKlPGiU+QzOb^ z#Zpr!!`y7}$!G!AJrGJ0Lc@rLM#J6!kXa#<@``4mgH2nUUZ9x_T#S$?&*R8!kW(A- zyB=jLM`e1wL8QIWYIPtVRct>g{lEvswqWo_2w&oV-bLM(QC6D-VM#xp9ak6S`d_WE z|FA&>9cnyiUWJ}rJED9Q_U(%6sbVX_70L^;$UcaPw#Wd|KrO#+DLd>^u-==rY`uXP z&M;*{G8HC1$!UAnV>9jb!gcJ$7t>vQH(d+Yl0lOZs0-s^ubVSQleGNt6Z+*CmJlX2 z`Ng*;cef$$1ZOCIX$wE-r2stqUvdCvC+Z4!Z4R6^#hhMWCplDgDJE68i5?#kGHW?c z|832Ew&bYIf6T0FdGm<@bM8a3ix4&>FaDR3 z6Apz?%6D*SuKscDMI}@=DQadaDwj#(B)*C!>F(-_Yt-<*O(6z0w*|_9Mv8_Mh|Fmz zX}p0S+77f8WvC#*V<$VCpu3JgnhsS##b6Ixb`WoJyCi9lJi4BFn0#yNk+=i7AcR|h zJ)sYyYb|Wlg+}sD;dS(KqIvJrd4+T%_Sg%#XFQd zPtJC|2$KxBFK+~u)LsPD45c+KTQ%EZQuH_PXDyXnITr$iad+fb(DmNHx(bx#GI)VsC3SW>BST6g)HR4AF=#Ke~>)1GuGJxO&k z%%G_rr$2?+valgjnEd)@Y&*d2cqlCvoJ@a#hm6v!(FeT+jy=nb>tuLXpFj%PYtJ{~ zV8m$qSs{R;!H%;;){;Ge!zAh7nEHj>`(SdO<}1gR=Pci>)NhtOSF*D|731Tnm-2RU z0`5nL4NkfKL9Y31M<~8D?Z;X9#wY-%5_42@sS&XeL;cOMAb#DQN`j z2M>3N;9h&|VhsK{1qWTX3l6hMbrY(TP}#!(h3GT)GbT|0U=C#udhJ|(v)#F~4rjaF zJ#@ZIdhML~!pgPzlj5qRcB#6xm%sJKo#9~ict1p07-Wyt7EG%Fg@B|{pqiao4xI^DTK5?kKd{iPTE28&QB5K3x59TU@mNF-R zy*nkm0Qp+31p^t3oUH%*Kdfs-n}t5E!dECnH>#UbIj_V^lvnbp{4U0SrM$1~;?FV; z9IdtM^%(H#7321xJquxqtkaVFH|0FwLfD?@iLeQA0)2+h(r~mGn@mG87VK&IrO7 z&$hK(MB6ROLn8R0Ffr#lt_rbQR%AjSjDiG%lIsL~?Xi$Lokxk#*#)Jhpie!-MfAke z$2FBDM=O&#NnpAnEfK%Gx{)^`QYNGm{o7MO6_cL?sN6*!rbqGO^ByU$ zK&#L{&{LU*u`^AMkjWK47Kok;f9V>Jy^ay>QOubhGBL_juq4nQcL<1ykh_J4T4D)- zsHmTUGF+E~aQL(2UEx}9-{{Q&rlLQgHRjH01!Pf`hpT|-C7A^U5Pb)K-_KiXD?_E= zmc}zcXLx@P?7P{|55~iR5B7!+GWG}2;DfN0fB=cy#YEaqHZQsAa^AEhWS5#t0@qGD zK4E&>>=lDZQj5h&#R&{TZx1jU{i#6=B5xI+mqDiBApju>7Wu1D7O{SqbAS0x`!R&H z&-Sc2Vt;$It?$9_!E6Owj?Y{pM5x_wl+IjbzVW9SbcYddAp9)uhmy-Tbxp$G{O{@bj^H%*TZ8ydJ~OsC{3la9 z3S+?A;00)#x6J#ZEGXT}fd_N(UT?ZL-|DE+WGLAHn@=}eSv{c z{5eTWN;gY$ohPiFlHx^ha$$0_|8-APIlCs;N~;t=9)=LG7h;J zBvp)|v2ZL*TS%;O8-7NuF1%whz|LHoE+P@|*D?OHg>PYqEqobAaOos`3c9P6K(0^Z zQ=9jOKweER2U*~=*;y~&TmE;ag^0o{l2)ikWETX=^+|cbztZR>k5zRLE_sNhyr5Yl ziRB<@3Z$L#0!_W)Wa~bg(nN#k_2f`%bN!>>TOP)D?Y+!I_%I&Q>yz?=N|RU9wHC&k zwe}_0i{GIgT=J}yxp{TmxS43Zg@c~=KZJCBQeFtD2n6!3wiwn5_Owmt`e>t*@NH4C zDceXjqI2@4JvO>C-duo=FP9V2>Kx@7VU4m9G&?n9OXHMNUfbJPbDwL9Blx|7 zma!@TL0_!11^@yEuEGQ8NGVYy7jdjW!qjLkJsi)B;f9F=IVIqnd;4V#j>|Qx3gIQCu`Bx|Wr z_gE2nYIMyeXsW&8jOG{BqO8VXqNT1jUc*e5X@wD(V$CMVwSoyOnRDZg=puMGzG@S= zmkYAj!oMQ8(1a0ftv!||luK!kt(H?XsIr}^)Yt`}M(G{;tpeF(kX#_{n? zGgy;#{aeRpbbS^atV$oF#Dhv-f|ORS+Jqypa4D?>?*x#5wGMsEKM#J*30lF5#5Z$% zaxI;J8u7_QWhlr#`Xhd|p;brvv5NDL53l*uB%I`+`U z>0XiCw0+b;3W-pLXy`U;f@ZCPX3`lO#()dtfISs1W6*#K_Txh;&Ms!ui?UQIDX$k% zX&OS@73xa>)JJPStV1tr;et8UKO`#-7RHvPnJKtlU9n(w$;sOLn!q zj?6_%H^quI9U1&t!AvI0d1B}tpbFBgc5FxbOlWrNQFTy6v4VR_)=rX0t-`0f>lZz91zaTgXxM{nZZ2YWV5za26LX9Ru*rT+-&OLtof-y|CQnJFLjryuN$( z++4P>o(yp-(3|T9BxQqBc?+O2*?_48l+UiapZ10Qv5&MLmo&>`J9s6m@Wp74B9Au) zb@FaJsZiHC5;948O&$87p^`+*H(LCN%3xpw-hQ@;d=qc4Zond-O1jqMfROWKy`us? z*ZO^HyVlBD`(A5ld-N2LVr$Jx?ZB@<{0wBz5V{_WI&4heezKR?#b8CI4-$-^n_Jw? z^-A@cJ?x0%v7?i)z{J`#Q3YnT^XpI=iYVUGF3M(S&f=pbH#P>koL2 zJXoxAO*r2<&VT>pMmxu^S3lJ`3gJ|voC_V|O#divW^;i?p<+#XlEPzO(r_$CMUtck zhI06!aA=C`V#z1B3UCocRMMa-=P@H5-dqga{_WqQn+rVD-@~TEJl>(zNKn}fu-7|T z{Nq_?D%8|IRl6oFRt1wioTV*4ME0z-wNPPon4qm;j)acZq74&nW!Bdr$-c^?Ga}uP zi-;}$wDkWD4-4c@{?m*9_oMJfQal2Gg>pam9g{Nrxnk8?1gqe{Rc1OJ4%`|Lbg;J- zB>Qp2Zc)Ij%E-=dQ5W{bitF0L*rh9!kp-mwAjXd)yQRE*pi<8Gq-EcwAB+hjO=51^RscoiHA~KjdvlZXhzM3-PY7itXeQ<*#@2l6LVPXXTd$7i z1Iu)?DKS-m{W|CQ85oV|>mDg)tR2Fzvl8krz4=Ze7!9lE&uZ8c2-+G;t zyAE%RNFD3^YElF$BVHbsoWKVYU$oa~$7K?1uHIFFcL^ZJd_0%x=7n!c$S zC`I=+CMP>PH%M)iA`iuem?CHSZIQE&D?-nL`~q{6q9%lUrtESM@)};A#D_9g1g_nc zCrXz)0cqY82tq|v^}M?Iv?s=W^b4th5590u4gBaAV>|ZhMiD{&SVq1SKnFv=SipwT z%nP%4gTmyhep3d4hvF#2=@Vx1{-^C?o3D9J{pIEYshM=wQ2eTNO8qv09YHpcqsHd?#gefVb5X=w^lZh9b0j*$Qt)3TnR{_G zNKU++M?*F>My?()MKh6h&SAD`aX5in`|F420QAq zQ)K6oeAM1>khOXhEd#(Y0-(4Xj*Z^u0llr_{Pe(sQ){6XAdD(g(F2cv(>pb1vfwJF znSJZUoLw3o;?PO{xjjo)ND3=)teHQ)#4X31z=;Ka(byrURB!}I%BkX>Ug_B#WJ>R< z?}vvf{}~9p%1#@(KKmnSjfr5EL`&fjV&dCcE;PtR?R&*o5c)3#9FW1xg9PimS?+JQ*1rHvC^Ha%S)&#pHynTc+!p@6p5n^oowN4TpM)Qfs0gh1I0!uY541%#=MD zsH5L>jJ|nktzZ1tWCbb?i~4d3B)r>OBlLh*70AGSs(6(6J$`_whThBfhbz}8qZC)OiLjUnEg5U?1g z&kSsRYTOC2y9))2uUQ%q9LH2Ey&%wZ|FNHjg z`g*)EILt_#GUN8(vr)&#??S`Ftl##5q8o4D9@eYey)c+HSjAphPO=+{J^yVV&D|it z>z*-19yok}+EnJlvsb6Gi+p4j3My35Z>eikgQv=_QVm|jdY^$^DN zK)SlQ+z(Gvu1Yn-_mhbE8B-zQkfN5>57ceEAs<3qprK({;k&!+lF_mY2+q{+efno5-DiUSTiqF zHu&E@_0RRzw=is=X*Y=947Cc}V)(><7NDAlh*9W(zC&RGu35&BYU_myGqzXEd!2#l)M2tdkC>xzb zpUBRfWM+>ISE&;QF8I^8qCik~F^N60`%n;4g3|qxlM=#ssv4$s0_DSMJ2HR>f73eJ z;}4c`tjFGhhTY)!xbRYGBYoNPT{QHiD4RyK_VK`3TgNBo=jRdzo=RMTc%TVho~#x4 z1O?Yvry$B>(_4~kc5H2y=DTWr?nXfe2(Lk|NIk@0tN!%l>P%hKBq)-}sqlqev$h^g z+6n7C<>Tn+{2w|GXl#u7?XT>BI_R6J8Kgu;LuyaT+vG*`chlqT^C0JDLsDtT;p~w? zX);H;fO7BQQh^Yc5;$|4sKLpuQTK;EE)zLk?~E)rR+zNaAb_ZIV|h_UowsKWHR>!L z_y&PQkt8M;ERm7)(G|v(GUnUcO^V1b-!I+VFn? zBLYSPtoGRJ8pD|}=nT6!SpL(OaS#ue-rqHZ_ebuXjN0P~ylc?y4L&oXPPp=P+#XEs zj4^j# zV118@1n>u=0n2X@X}{6ljYwC=rc2mz>>CDI2H(@%+CrwU1abWp&9gy*_Y+9aNp3BOA0f{o+Ue;Q|D06 zZ@PQve3|sx%#yKd=pEl-4Pw$_W|))02IQ<9WCeWeDtc23IJ&$f*+U^X=Qj z@+D9W*9*6u>VA!em_@S0F1nx#6$v2;>*ic#rTG-D=O~M^w9mXgg-f|mm>mY$R|stS z|60VENxRU>6c8VPmGdi+SI7xBhe=`bfIZP{a^@gY*B=J(DFrRsK-TY;L~^1Go;hk0 zU5Mm2++5tq3#gQRj2DhYZE@k?o~XfgCKO%5>pWu}iLAF`YZxMX32GPwzw6g90)Xu0>`)#ziB#@8_SGe>k7RQ%E& zL&N$WMkPAKLFZvSHU_bt%0EM~c!y#mz4Zd-f)sNW#d_}j&b`R`!S|WNBncirKbx`b z_^M~*C>oL`$P|JGHE{9}^JxQ!`Sjv6u?bZ^D55U^*3yC%28>s#2;#6wh({dQBl&9ax{FT^=cWbYquRm~6a=+?C2D8_RB1a_ll&AK@ z)&^&Jw?s9Z$ChU=to8gouzgr~N3J#n?qg%p>l%a3*Cs$-?q=15e0yn|9y97re7PyG zZ})rcNt&9|@*po6P7s`s2}3lrNsH@~pb3wBJ0|>xGxRw`71E`H^Afv?EWS8QAaJH3b0y{T1`=GGR56Ed=rMGH~fu=X8!cz z|2@P3MM2Ov6OQU&(#x1WCmu6aL7a^PoUFI7cGC z*M5ME#>1)6N!72Q9G4S-vi#^k)QExoWcyhXlF}bAM_Eo7Bz`>0m%dO0?=$=5#730PcRZqbh9Qi3JK#`~}K^O~A-^ij$w6O!mLPZ9kD3x^<2yFPjoL_tt zRw-ntJ*JGytG@y^rX}m(fqzS1tqlK1wJ_r9%evz{)zbK-1(%c-O;afDc6@SiofzQZ zB6QMp%7;n&bEF1kGVVm`P(&w};KA->8Y^H4Q+PQVkHsq`bdJ{t+S^^PZ_L0sY>W)> zpF#XZVFj{G5lSg*BI?qky|5f$>pj~`t8aTg#0Gdj;t$C+UM1ozLwqmi!&ih787OYZ zYa-GD=C^TGOVYi|_N~~nN#6YiZ|{JA&4)DeF`~qgc{^w~EpQ*W7G_D-#wkfLxb&Pt zs=Ly23VHCrDF;poIb{vbl3H1XC@R9M!mlr3>0X5lD+`?oOfbDR=mwe_HBa|;9@gAKUS=YkK{DHr~2ur&k~DguE1Bj(fcK3Xp!8d%67TX+g@!{p5&@ZL*-**GJF_!j02e$NI(?z z2RhF{=hV_UQB+1`uyo?|9rws`mOu#E*HfJX}4?o zW;{Nnd$YJAB1>E&Axj`7S=DrAoSw)d)9KHQ(Zl2m^WhVXvqP7eMqBSSM5`xdr^tP~ z$WS3}BtmuaM?7{o`*N_~760^Lnd@a-FiQ6Hk6hwTdXiFVzCNDHSOf zO{Kx5T3a`~!Y}$aOd)>*^iv-z78#LEW<`{;&a)8nn$SOOzLONsf6K;Qcs~z=-raC~ zKbsoA8hz&2Nrhr^i~+hqpO}9sx~oF=lW&nP?Jhc+C0(1vYr$}X{S5vocV$eu6EM^g zAwdW{8LHb^M+Q7tF)2@7bL~O@5ZUQJ*OJ^+Om^mCVZ*qFxm>=3jf;twwrC}(1fgb= z_yoxzXd08#ws4mhNmgMh4~s~=b0=+9J*K3SmPHoiyF0_^-nKhGiS^Jl{3BSiGkh3K z4T+AMX6?=pXaq3C*6xD?3LGY5q90^juifbweHyh3`;^~4^!i7P6jy_W)Ux2 zszwo6&s+drp6U+(D96{U==X2HZVUoXZ&)Y-Wp$W|@aHhG3q@?4we=TRB3DF;8+722 zehTPmrg0hcKA57GWA@tfVN6@niKy@Sm+R1~Ay;_?zT|A8Ecdb=>yWQEBE(WWZWuInBP&u&Z5Q;ok+UsE-< zi;xz`1Z{+Jc0HYhDSHNU%l`}1UWR+Dlg1`GCf zY0+J^-4D-X?GMi?W>pp3Xu=M#z*naCt!U_xR)l=KN|%hm*Ipx_x}=&zwJ@OsR=1lTZ5Mf60XpifP)f|1{F z*g=NVXOeCzKwv5lakUYZ^E6j4UhlCk8CzH!RV%?Rw~KRvT)uF<;Eu*V85x~FSwacw zL=Q(!h$pUpY{QPJXh?`8^%=ts-Ik|%Lg@+$!%r$FQ0y)?PW41?4htnKF}D)oTd%is z*zX%1nf?(#u|ePp=aA?fl;QmanXJ)`>dvjnHyS`FB;J6Q3%5)3iHxEkvI@ySM1A`t z*;hcNZh70MmF>g106>dafo~&??f{&yyO-s*^KIF+!V1tOWm8F}YG4xm4o4hqTnAR(ktsa_aIzEVj{pqA zhJP?g18Q`0x^N1j4_*uBEY$=&dH&1VDGPqY<(Xs5N-P9YCG z=LnYlIdl9^a5%e`@7mTI5Ta;=pFn&RtkAH-ji45gS*M9E#7;(+bn(a`9Mexm4-|9R zoN+FDziA`JS%`k5BPRxfCeO=*8x$r9@E7VD<%Z#RIA$saIR38|sWN6*3A6Ly>Jg%> zkB|3%jvmkSIo*c*V#m(&Gq5<3>83ne@qKx`gz)HueOkiuI8Gg^!bcVPcGq0LpjlRD zNv$E!oe`N8HjJT1{V!jJePcH1{bod@829+jj9`;OE2+UiJuu199D@Swg?6{{S}*n+5OZ*t zgtq~3q`;L}0$OW&p0k1$;|MC}rDX=gd z0UpB#YN;N12oK)yfY5$MebeoD_bY@v@0fbepe_wtNpwPQ+8w?HolZWi4n+-81i06B zR?7QE5$6_Pi_=H7;gMSImHA@|zZR2(L9kFC6^4hvc~WUhE;97CtC02h6D90!nUVd) zNNMb$b8+%1tr)G0+y9Ipb}YivUvlw1TG#fHuyPd2gM*N0jF1SO{O8JXvzdIVGF@9# z0*4czNp)MS>8-T+LPGVbqUD0RR<#CHV4^%exxTuRYpxMK2=+k{`3BbXa84pX2ayr* z#}Y7U^n;|+TQ_lrdVgo+>Z!uygi-W8Eq6=PxzF2k(|&X zwOk}8kpC_rxp|z-2-Tzp)q=3snhcr5D9{fcfaB@O*{&Bs(0%!iPFDy&`(^8FJ=j(N zI)7ldz-8d_CO%tk(pbxR`fqDq$?PbJ)_Qi8)I(U*YbHEe+e`ap4G-6_aj zcP6W=#N_POG@63FW;BH%dVO@?HPZIk)u)8scO~M7;HHJUEF|R;u>JWtorBRfGD^uJ zX#)Zc>X%r_S2d0h07}`oSp5Lklh$`!03bQx-M;%_hO^@yA@Db9s}m&L(9cmaQqE=z zY!{OlDFh|3vcvKq841p?zqSaqM;}IEU>>`!1q3t%AJg?ae2mCsD7%5e%g%M@4^5kl z42M;_mRU)kKDh))81c6U5+G3--Zu%bUE7f0c0mHjwtA2NB})L({`T_fI-wmP+Hk5t z(lBe|-tx`m5GkPXDsuHL@0 zS~T<6Gk&S5lwQb=AGcRfX2yvzVj-G9ZH&<11~5n17J_TSp&%PtY#hANLjo7GgEQZ@4Xt*K3B_Hf1j0+b4^d2r1C~i`?Gq7@jx*S#<+KK}sF}fuPQZ&@DlE@MJ;Yv@ksYESR^P5(p zRgVWi^+(E)#H(C_NrkEp^_CRREl;{ppo63_VX9R^gjm5R@af5wx=#Rm`ts^oF-HQ| zfG3ABQzs}H{XZ#8uq*n1)Aec<9zLXct>E#4mL1o!C%y~gN8C%t){E_|fBG`ctZOS* zJ%;(d$0rw;i8cA~#)u0YW-%a#ES%K|mj%boljVQ6g7DWua2DcoFkTd{c;f%r5^UnQ zbxI4r^+|)IuaFu=(yE8-zJ+SxsXx#Ijt2}pkq`d+ zs~sej39$(e7$6p0JG)?(D3T=gVujbq(-;t~!S)1{sEIk`cKV)x@PC0?f?NLKA=bvA zGwenuYaYq(?;5)I4@c8pr`@03^@qQp`-7PyN6}lQQ_+PB2XlDi#Vd-YhbZPFSgi@2 z4>8G*`MoDM=LzMaIO&H?@CuVI$>|qw1sEUm+q*}DXA=g~A5piuP*DRrv(`WaO;8Mi za4YzOQPSkM=#;Dm*}*7jl=@;3z_KLSn_FCs3?z{cyZq}QzA6ci3-pB_%ca0; zd~DFK0M4*RWEYnFM<~LOZZWJA3&bX+82-Bu`oe7F0B}3RI7g6eNNzaY=q+cHClx>H zV};HZFBK=z6md>{6=7n>zE4JT`yl`&`dTdlu=2xqFAv@VNWOOZq?M}Y*K+MpSos#t zj6nlWbO|KYxwVzW43{QaPT#I-a#Y#$xl> z28%;i`UG8U;fp-U#&&@|g_MneyUMXkGXAP!dzQ4BeI$vsZmUOuciwSbr0SQeT)~0L7VV?Mk0rKK402nXsX;pZ*XTg z=sb+a#vtmC-TVxB;STwvd+P;^{1zj9)-4kvC$zbK=U!y}V5f0XiyAzBel`n!tzz7I z5*89eGeuxQ4I6Dd2-^Lh)=$c(7iUSW>2m@Rm9dlN)Qpi|1Zm?!b`sW1A6JX-gxIt1 z9Ex2Fs3cGrKD`Hh5<;Q8U3AH5+R zy6{~mfq=`2HKKDh3v<{RgU(n9XR%J3zkatD{%aveVl}-p6rZb1e~)3%y&0# zf4(;c(^=OTOnTF=v-|ca(g=4iMd`_nVkkm-5pdR>wa4T3*Gdng^I9Qzb8&KBIRvw` z{bS8jWqJzW@Ad>RxG?WlH=&PhN-TP2Y)pE9*E(M-tC*GG@9OGPk;(+XAMWnTp|5-~ zQWFydUjYun)0;vBvMwNz21fjxvU7H2!dSu@Hh{eelBL)mlXH_JIY_*_6Nj`g6wbP^ zsnPKHyo*zbg7*opvM*-6)OYRvg!cGHP%Mh&;r~*zed0qB)=zw{e)gxXg|o9y$~l7h zJV&bWi=yZv|DHedBP9z8vepJ?$vIhw6_py${EPMs(mKA-jLx#ufacz_4{#38Jg7b= zS>Q)xH37I^E*+>ij+lj&hqNm{lmI7dlw?or}H9Qg-NDXWA9h$j!$ zhDIQll|h@r(WsLWwHFeZ3nTzAD`Q2uoRIo}j%Sta1*kc>eVLS9rYpD4qjEbJl4?y_ zLJ5GF43kbZa<4EG8YV2Y??-*;QGXarXQzT$$ECU>^V*%UA;>9X1v#W)gfCBnm4zvr z_vZVP)dx&zy5%xzrt}!b9dJ|^C4Z8s9|cgdpb92Gk!kz%tA!}~N+dUvJjRi#AaPM4 z{z}v)p$9*+J)O2YU(grFWCf}fb%?LblmM(V><`DXWrR<3jnVYWY%(oq^ZK?#i&?%bI8pfcd$wZx19Nf z*+pG6k`!S0xHM9RyDtNgd||gyaTv-qUtr34*IIkF|9)?7@J!(2lgm%13E9Geh=**s zz%Z8Gpb-fP1$hdBO%YiyLvH-@pMU=6KbO|C5B@v1?B)Ob=RW}i=KoV5B>va`T-ob8 z9z19!Gb{w3{ZF*5|MkEA*FXR1LSg~`2iN=OKPxuCl=PB56J-zRrC1rFM=)4mBv1_A zSp6gu9z;pb>LT^d?3%r~^qg=|a%2)mm8W8c^Q}H_gVIGDG0<|>>oZl3urtgpwtR)Z zhhqhCbq*Y4Vll0f)U}g);W7)^Pi{ub#IyHmE-ZKAJ3z?b`e)Sn7Nawe(aO7$1@)0k zQmb?3=y35kuVtpTWRF2jS#p;Nz4}C`!#$$xHEehlqKf@h2Q_7S;iO3%wLtmwMmD`F z5z1rBvlrHS{@z~NFcK93cl2^Y;2zJosTS_Oy#z#fd~$JmmgLCCw<^5&y*{KM@E@Z+ zj!1)2VOW165f>4;O3J3qkPh$xp(rOuO*zoRId?KSKrW{{8Z##$d??h(TOFi9-MJcd z=Ov*o7Ki*$sFOz}G*NekRd`Q^J9=IJ{LR2~A=cwjDY1TeR$zwxP9i?H+I5kD_={#D z{^Fw}KE1y%g4pW>#9ucP@z)<6@d?dulM#Pofk(>%XCqiMYd3J8lFPP zts|#{x}mOb??U!)pZ0`;3`RE6^g60 zFgaqHmf>!}P|1tVRnSDFvtGUjm_+gc#T6kpB9`H!gyBBX4sokAuGwM29nsG3;U|ap z{1w*3n7$3<_m|k`0Ug!jS~IGno>6R$I7r~yHFv2x^ld0PDch1i*is7>=H+M!c z#Y2uq#^}LdFW+nscU0yv6d&Rc!A3xHT6glaM=5+k>z8D#a1`t@->osJE-gMR*Os4HY2iq#Z{`lM*4kmT`g3iu971@DM?@PJDwHyUrfC~#L6lB&ZtBmfi zJ6?2Fj|=9LB8;4#IB)yI&QG(c@vG4n^%N2jXV$*foI(SSW;jjETFemQW_VSIu<%j~ zU24%6nzcc^$S!7CAf7=2YxsfhAEs^iR?@Ayw&)AjG!m-L%4Rrux;RQZI7T~l3!Glb zy&fgqoydcuvB5l6r*U$6agmVDP=`w-gm|*fhxZg3vfq&=n`FyyrMD+hJ-Z6Bs#ty@ zxp{nYd2y+ApifB*kF|M0d?|9%T#3jPoOF~)zi!lfXc6i@?yS{oYFmcTBeVSm!u zLoBJ&^mY+TWohs=q-o&4u``7_dZ5X6nb@m0iYsu2Su60tOW!`;EX_4EH^2`>-6R8G zp5yij|L&4alwf*FOqC;A+Z|Bl9>&J3+nfByuqWzoP^J|xcxydu3zYQ4{Ea99pirU) z5eNVn8)_p44+@P|mQ&LhWL#V+WT*%kaG)}cF3c{@&SF|P`0*rA`?k-|_K#u;qstXK+MVjvlAu>xb0KWN5pCIRLQS`KN zzT?(_^+7DD?MgWi%T8x?fsEF80p+2f8n5p7o&xTE*zMi*j4@Z6kIrMIg{=uUdhA#~ z%(=e|VlVN5#9eoV^_6>P0fR7Z-}d|v24Hjl3`Q0w-z%7ED0|lUv02)4Tl-zY`}v4v z#e+(Tw**i}LfuYUZ^_;vhEp_oR>^K?=x|g`^5R_9uDe)yAyYmR9L!R;ZVB>7MA?{p zcoGfiOLR4omV&~b!9Y#C)i>Mvjvr;Cl{Li!&Wnr(5dTMi*lABuOpu8O;7%No*$#Q5 zFsSb@nwts#0j^o=xxFN(dOafcT;}p`M2?=WdpXt<1|ZEC58D0Ny>UMrf1Q1454wHg zLm}f#!EfX4FKuAJ-#*;k0rrQ;4o02w9_qbt;)EzKY25EVp**XTn~Z*m_4_?^GB2B` z6N<;O5_P8G$Q%({-2G`HW91CgYDn-o#GKrHxU-nc+B!JU?$+-uw1x)^%{gE)ae=gk?|z+Vy1w~TWqyAn)Yl0(xs3st>c+uNR}V-u5uxLs~dxB&xFYySDfHIK6r86LUCOf&qMX01-^h*pLxt3 z5n@bJ+@Q1tH6UFZ{Uvpp&qIGniD?HqESwIDfOc)Pm^x{)Fj<&5B;i1R1<1h!DAz`J zNmKL6mw^ZRt4jVgiU#i}4SqULI*0G{Xs`iUO~ejWxN{t0;rsIS<$u z1RZWF_G!&bRAl0H!MKUdM-kvgrTHAi5ywUlcM)#^=pgQ{llUsjAk@j1HfnJ^M%A{Q zvN`+dOLW@Seq<+vgDp=IizCa2>E5V9P(uc);28dm>hw>puFeuN{Uqu*y9}p+vlk>v zcdh}!9P01|q4KpyVLfs*d`cW7pQLDzt6nwlV|zRdnLODbpQ%O zr251DO^h-SOVW?JH%H-;6SN}jP6Xa3=nk*CoedC)fFiPj*rurE%BZvMtUVsLzcxWm ztwINC8+O_aXhzYBYX50Q2$f`_Q4K2#)6-Pe0@s8fSL@?C#W~3$yu3P-i}P}d?oCg7 z9t7K%K+;qz-u#Yq6M`+a5YWSpTTFxBIML?#I!cn_-T`#8u*m?S9m|}*(g;ShSA7Bd z*gOUs$(}kN&NRRg4w(lQwWIUquKmQ|GmaIy9Aa$Jd^z~L(+M7bblt8K#dS>Pqcf_{=W9pn~XaW7q{xE?j-IQm(?2c4~}kQ59Vt&ikBaa zhj+a`G~v6($N>Klc<#$?1NCSxENA38&-T)S6bdm&tqRFCQSt`a9ln>NVnKxKggY4U zljJoXPYp2N1IX>AWqLkpoG0D8Y~PAK)3%&%@b(V)*L=9KT-4V$l0SvVBE6&C096fM zYdQ4Zx|l1;2b`L@j6oLWB2T4fF8bhsxem-lnG2|E>pHoMs5RH;XQ|X08FytPNKvQ~ zf$<(tq;IXw_1roQVwJHgY_L*ag&?k|y1<=kh*v@2mc?!LY7!Dv3&zD&N(+?)6{RLj zo~O#4E0}T01~xgeetu{VroG>A(4}kir|sE&dz9hOH10=V+LPWy_;|+CvmPJlb;7)q z)b?7PM<+*4-gW~$`ql!yl{d;W1ktABhk9nxQHR!*qUU%`n1XT``Zr+r0BdQjthEn4 z9AQFuOo5@LPf02U8^pkT1G%O%8;*=IWnaWckE0ufb|^cLyT}v(&+?~n@UtjysNqL4 zC6hBnmiY%H6C!TgkEa>P#6UVNc$O!V;O8AA6KsY;GD$k`vznn=hpgTqsXS(N(f9M# zT>JJPh;Hu9jR=*ITXq_)1!kz!g4TUXT??^NU=DGOSlOFAFZ0!#KY}YA!r(lg@CC2iYFOL$+gXaBhKv6 z0QWte_NaZ^>-VN#bwADYTCN2M1&$tkdS^fK?b~O|=kvJGXT`r)^G>XHkgzeL#1>&3 zLUnd5!9b!v$ERc#!O*%%4s|g>S@D%*IlN<}ul%3`!S4*gC)GtXU5CMsm(ub?!jKVz zFM&VRcXNrk=8wqDhNwXGz*{@RTS?)>o#L&6yTCMsxuPZB2kvS%chT6>`AveWI+m^% zrskm!wLM6OfIzn}l^OigUcrzLgsJ1cx1L>R6*UlVQ6Hj?vs_wpNJV!KoiCGK8!ark zhKIZ-tP}Z0)w1GSBbZB(iV6{kKR=G%+NyOHV{5&z+^I7GCi2pn;2&YYQPHD7=FLr9 zH*o4E-YN3!O4=}$Qe1Wa(4Y2bk>nT##mBSha5m`;KKHr)+OTN7&XOBCE4&;{lPYqLVbSelJ8ydRB?$pq?H zcfDUBG{K`GyfD2;_$dLCyZ&lv4gZT(_P|N8_!Gl_c8}s+A zMZnVypw=~gGfu&}H%pF)3ySxs?RS7SaCQ#I)7iZ-ZTDxx+y5{+Q=CbHf0=?^K>(RRX1}yW zrp7z^EA)nwhw)vz6J4V&oENUG1qhvjhXC66lSOhh>b?py1fe#O8M_f~Y)?iI8-U{m z#_U8jNte5mZ-fzd&2l%N)o)~87c6>ty;c9O2gz;+T>V$x@d7Sm~z2$#*h<)538X-NIn<+r-@Nca8(=J5ECpRY-NdYnG z(-cI1MqN{$kkxbg-oo)5t^(|$<0YCb0HBDr+Uk(sTXf=p`R{*GbSNOr2=0Ii z2G8uX*_YvDO0z@Z*c38_waA(zi5`ffcj*0sH`f&7yeKehO!jFB>DsT3=M!sq6BKdMnmk=+zl`H?}#Xq<6pcwgrccXOF_ z8gCHA5cy8pOZ#OFt5=AlCVcU|F=>ZB6ZL&!V{?C+-G(^GXj9aHgF^gkMv;TZE0rsIbWQe%)Wf%7i)26w|6IUfC2{Oty8T=y4J#; zgS!^(<gJr`S(9fsW=bjQP9mlJ{9mBba41Gyzn<`BbaRwTer zxJR&R!N-|s^{k;M(OTsNj(EBF zYa0Mgd?ZhUqm)xgz8QjXYQ=$)?t0(79476>vYoC;xp zGmlX!6vr-t-|K=7vH!JzlhsqD;1jeW!zttq^}quA#kD|@#hIE$#v*kwE@HW#Ym=}T zPOkO))^@GMlkKle?_1H(;sRwSwRktYSJMUL2#gC&s$d={N`izdV#&e2p&l-=*S2q) z%f9*UY&8!S?vWzp2VODc5Bi3@kRkv2um6LA)4%9?a=y;+lb>LMpM#w7OgGQSySv6{`UNnGG3fOA;`dAIq;{fQ&zc60QTm6nc3MI2Nj&OT?*8SSzz!)mi*_ z5x?p9PqlYx*#m2g*4d`Tc$gUdJ7kNjDX6aAqOj94AJ? zx=khF{9>X2DhA-$JvtU9c!+K*pO(3#ncNi2t#)j2zaF2QUd!~Gu%%RZe^yFnN8gzw z`W!TG;)2fN_k|f`98TNoh3nXhFQ&WrZn_qB0pKS?XB3;3l;#11=cjkn_tkWlHhBNs zTt-`Bp$<~QWkowkad-JqXEA})EZ9gDM*xH}Rh}TdtRNl(E5-Qh`bO5MbO-orGIuR& zE#?xMtCw(33NB(-ioQpEL)E+j5#0@N( z)cey6=KRjS08!F6AgOXc1l6RiXWLpXJXQ9K$|%>xDWID9Yqa_&{OIqV%~r!%$2NYa zz1l2Mb3s%QM=Rx8fl7rnYtmIPSgs1^lmv}+Iz4}Bk2+u4y#c2XS2}qsk+>6d;lc@A zvRd9iHC>NpM6y4W9B~n)>*kY4q7{!LGoO!7Za!Ve+gM^St7o2{9N}zBW;7DXv&=rC zJX&B(PKAd-*SPBqj0(r02!U9qG$5ep_a@VN0w6+&u(;M125P$EHNd0%M8$ADTO_k? znXYTThjc61R=V`SqHSo+Qh|IDBYFMfP3#`;_~h*DQc|#rOQ)>Wzpu#M|M(mDBP@9n zESDauuzMTOAD)(0n3f%C5|Ju>eGLe9bYNPz#InXwtL6oK$I2$nnt$I~E*h%By^wFj z97)taL+@ALg0=%KoHcBQj3?40ydVZwHYGg8{S_sNYfxUDLbp4*zMi*jB!i? zSK9?CBdcopEDK>uEm6COzKHL*i1RMN^OqMhRt{Gar`7l-fE0@;##eY@7IpOQI zL9G}mTgfRTER8GpBoe+O4u5nODILGDM-J!B;k?nNudppFqBMy=M?z_ZwNB;>tYfbU zT!<9@>RZ?x42?a5ojP+H<{StpBW=nD=dBHA=E;~8vA{Ffje`0W9}5Mz2299p%_2q5 z{=-5vCmEM?2WOjz?Qn!coK@~c%qh5PdSX0j4p`7pJF@-xD*}$By;nBigllI2QOnNe zc%`g?UJmxfC||%ZuA;THu57e6{%Z(%N!D&Q$cJm!0C@|K{q@eQ!OS_dbKL6?UYBks@Q-MHZI9$FA0|n zX5n02NR)+hw=eo3wA?{GMw2SSO$? zsZ(j;vo(mkyR&~-i!o_}kSlP*^ror}p0zeMV}Rco4yNN_zW@@`lq{TySD0|&R&5M$ zN8{nh7*Bh~q-6N2`&i|JvU=^~mHES7ZC7IpSiK%f_$RlcUX@9SCDNzk!CcJ;(x^Zi z=R27Z`Q52N66Atp()jHZkc6(9C)@vSd)6`ZZ8+L%M5Zy}2GYmgb^}}aSPT9u?@jMp z&{$V-58Gu|AA4(Oef)>zHUMw7=pKYKnRX-SM=V?&SvN-{4bqeWrzxR27 zDp%?G$6AQE_h0eC8YNZYyrrl~lu<-0RwU_dCs$Xpaj*<&rGzh-; zWZZ{`Mzca04;%T`1)i0?>056W5QV2#r;_6<1P;Bs1kiAeH~iQe16zWdEgk2M+Q=;M zxFSdCKo!ZhF_J>ss^Uxuii;GM7pzU;IgJsY{ z!R$iVZ4ssG+c-}@v$4{o1hrr)K+WgZ0_9}t z#G_?rUYS{=E9r2ZG}0&odJPiQo1+&sAb}=Y4D%G)Nn1|wXHXBZallrswI$l zr8FZ5fsikN%(5)wGS{NNxO!4TE6O%{NxT;&|9i#FD8)ca(SI^C=*sUtso=D;;v->a zhd@mNd=8PCf&h64)f5WOL#*ZytI0z*hhR-@a6d$A>Vy3uT(fiGnzKW^<`A!eWDo{y zlDPN~uql}n0S@Hp>xYQVA!2ig*zk;V2-(CX`5|U=wlhJSGhx)`tPv52v*yNa&cuP6 zroioEhi(UfX+GwI?j7{+j2!XC)uRY&f&n-!-dr9#+(*;O!2W~;{ zN>Al4j_2Q7tNG@AV*g=94`=>r`Mt!Xw7*^3zek5i$0KAM1K>d$0Gz0EQ;7NEkSy9% zk&=Xmeh~tNU$Fsl<;!q_+y$M{*V&}^n^A_IgA_idYh$7Hw5oMKsEw-x$p&{?*D_0R zPqVTNI`KAx-fHs86`Lw*aDGfXPa-?zILjw!2~ls;`RN_9k7Z zK|tNVq@g%)52-_CQ%}CsApyn?2}J3jpCf@t3jISGQ5p>7NFx$p;E+sIAr^~ECdz*H z98!v^ODR$kLp?5`uJPFGh@v-@O@&i{WUnGQs_$e+;c593;_O~h++AbvOeGE(HT({l z3yCFM>V&1-PCo7=x~?->W}IA)+fRbm+F-O zl}-4k?nsN^fifK01*c(Fo!X>JgC8f&sg#pPYwgBOx+%2Ne2N63BoVM1dbUKv>00n* z@90A_>oM#iR9iVcIg#{aZZDTDZ~L^eeW-8Doz)7+a}T?lfgr`agnr~q*g>t2y1Z<}XKB>oVZ7i7Jv<)Dm zp3M2T;4t}axmIiAI&U@_A1NtVVM=L^klQ~Ps_9v1OxT>Rn}Sq>w*n-Ud|pT(C--Kr zosxh@n42u>WSD4LsUc?d^a~JiwW(@`{~OV zEGM~Ab~aZ8LLbl|5Ku_M=Zow0Na&FLs-I?%&Pi<^{5I|f><`@^8-fF5C?d3>8J8*) zq*0MkgdEcK%LwErf~`=l{{Pwg*X72MYhe)mKTpBfj&O9(C$@DfU2KOVD2l4$*AgX@ zRJGgo4h2L)5_XXQn*ggyJ#iwwzvrC!KQC~eU|wO~WIxHt8-Pq8Z%AB8!V&HgfkYy) z*2#Z7$WJS z(*e@p!nXVX^}73QV{h!vi?wus+=on5qyrw41N`^L!Q|a#TT6# z%sxqsy&mX{g6rvu9O#WuIYqdty%51)qp3GGgsSu5+=SvXK-D0demF%_m-ADs(& z#HJY~e2!f~;)=6CQ@n%o)t}7sp)Up*g)p(MgTrd=$bMEuajeD7)SB89~{(C}V;uI4fln zKyfzdUSV-RSloWC|9FLEiQaU0bxVsAbbXPpU|9x+Ri>_G^ybgQ!7tdl3STY`@?pn4 z^~U4guhrRE6PO4gfRG`M(@GT3V4Ds0H_vtt2KTaE2BXWg^O8InGGEd|@SuEr)C^}r z@n`49nJHdI?dbDPqPjZIn*a^-Hi2MY9A9HV2=)dvOqRbt!bLOy8>$}EwPJ(Q)H`|( zL6d!qE}sJsc~A)^>&D^f<+;EEQV0&?u=*qf)4_`zut?c|VjIxt^5fW>vE{znKP_M~ z3R6-@U$#1`6FK?1#e`lb--2GF$c2E@chLco3Wk~V?jCO8+5b42J{=W%@F$bEi$Z;U z2s%9#IKm2#b_!9s@u?{>B1zmd%(rLkQN;3up74Pb{o=SdRVX2jAk_hX($~lygPwvO z4xB;{FLlVffgG}Mz&l<5itr8iSQW+C6Id95uS6kd0-<2aerL1-fQ2HfDxyWVu#>wiKW(YF#wlCNM+^u%MwBxi;D{L|=j-KYlJP@KP$8PzzI zDNIw^c9d&;O>F|&#fhZZpMiQq6iDomdl=u}3~yl~4FJIa{D+Wh?4G0apA6)|`1`IW z$w{|}G?*{Bf1Ex%CO@W5%E(vPxqixcxY`lQNPkJ4WTBF`$|MWM=)@3428$Cezm_sP zaY$$~?l%bVswxpp-H#-SBMr>0+mGZ+hNEUNYL)2KaKhLDMlJl3I?19?=R-pobqM&B z6j+xkbaZ(9K@g^8q6#rz`S-`(Xgd67Z#ujmfg|d6+Iza|J#6pZIX3vb8u5Cj@&uXU zb#V9asW%x;b_$!4kE+umrE(Z$z#$d`1m+2NEW)zC#3=jXEf(H4=z?(kPO#qCfBx&- z`5J+I104nc;{SI4x>>;gE*$vZ)!#&s5n+oPoYXc35L-@vBKGU?_j-PNf80| zZYP6i7;ouXPCyq7r9;8k)sWsoC@hS7hmN9U0nfUj03{rbFcOH`WFNzq8gYXtDmk5r>r&Fz3TYGxyq@fqgV073@9CN z1&y0=?<3+_K+&2Er@uxb72SQUgvcH?6u8bfx=g0%sNCtvH90Lc6x)(x<)Y^~ab66Y zC?w!VNDYvC^isunOD?>-Gb|u|Q~=UcnZwgN5`s$esK6w7+xvAeo+NPFlDrr?Vd#h3+1-1u6{ht%&8v^=~(cd{3TW z8h<}jjNRZT^mwHN2#_$Fd28Hl$s@Ly^>VYY=!j2=1`XufE)t@;zVkbn1uO8F zmxc9uz~mx{XSuq)@BjQX9sFZ(%ab74DIwiBbZv+XO)&CyyWqW0f9Ft@xDsGxXWaNU zY9o(v!1)va1Yba*;Rl89f`uvGyJ&65z>5vgoj!fL)5o{#CDIQU`63PrBCkSGjFlbz zY;?D?ac87!BIKZKuNDrPeb_RO!8MqdxwycICwMi+6jvKroFC>)Ac0*6`> z9>de_kS0O}YMCB~R5m3!vH0SAzHdRbU+^HmZvF?zHeWcdxvXs}6z6UK<_N6^>2^1` zt2Jl$6wsf>KPZA^xk5Tku$a&gb>2jfKsmi|C|sT`fj9R6aOVyxB-nX=*9K(<9bjQ2 zs3G}3KFT^|$H2utpxf{-bij2VFp#4?)eHmH`Gv^;u1$a0JC_0)^ZcN5w1q8|FUN~o-Frtvyj*lX|X^hhkLv9W11_Tor1 zzq__!4Qbf(4cFXQci(5vvo+vh?pLsS$8!PT@E{v?Ld2swzyA0C`oH^s1<3r{6#yyt z2mcu3AD#H|hypT)bILRHMFOHG_QO#2WbbPHdA~v!^rLTx#3J$Sq)dxTV8mbuV-8U@ z5oE>9R>HYHB0D`l%GS`4^zK7Ho=%UCQ>K1!@i4MCZ(d%U@3a8H9@{xHQ38327 z#Ps0Dwuh+uY1ZyX2=5y8PQc&jqzvA>OKY_Prv(&g!)qP?oAdkc*xp$iNt~U15XXq_ zG)d$WfgotWnNCb1Nh1OOBNMg))ganrz$~*qDg5v_QxQ32opHPV%3Aw2X14kj>;aIU zy^TAMTHyc{$3j2B?s?sK8y{Ri^>0ZJ+0cAS%%=9zTfawV=<|O8VYwEiaGVIrK0KC| z5;HHk#|Tuz}dJ}*nUZIF13UclVx1lDt1Of8I=I=NJ(E;67% zQUbGumxy|z?4&LrytU`dyKmNd{>@t3-De;`0HHq`Kr}l5mL4A332znXkd4HBqNhHN zt_L^6(V+I~lEJq|~;7h^sB@Ihh2PI;9g<5@A=eQRo~Wc;!^sZ6Z7)JSEuQCK3Ti_}g*@qPB3 z`hd6|iXVNkbQJx?v;&*2iBd`iOWkpUFtWf$dHCYU1`(yb5X!l>T_4Crch>6q-L;m^ zEP}akgn+_0U53yCGr|?cTqJn_B^{7>3vMBR>t9E`yJ0_(gIgP7PCkhGiDp9#Y$6Y+ zUxpbnq`{~e+ziHJ98=H`+^Do?21KHO3DXbX_bo!iYk-DKN~=KZ<)Mlr_7cEM9JjC>wy0pGeHqSU-XddTE#>Z(gLEt9EP>$m~ffziYD^WB* z#eHfZDEBLAfH`|6J}ktg}xl0Nn(nPLSLenJ^F&o8qQ7D z#C;$m(Nsh;@BNd&c4y8)xCH+FgrPl4UXe*o5xot!ui07Ep6~}2Uq^`q>x0uA^ovahQFR<5;5dN@wXdgvqQpjMU4vwf(|gjU>b1hRqgh6rNN$*j4SF44kVNrqw7c z6e(on-z}BnqFMVR5)^Rpi3yHS1QNsPnLNiFFPzO<`}x!OY2~d03#ZaN0So{M8z->w z??E9sL+ zZRgy^ZHF{bMAJ_Lnh^Hkl+uKxGq9W{bUMejG+~jxm6bOv%HGyf58vuWnfs1(5;t;j zbeJh_MC3)I<3+9qlm2-4Foh+t9&c_2a zWYq`Y05`_=3g|RZ_>puJFB(Z7$wcs~%|`{WqX>~jUzfp0b-%KH+t>s|*Ae8dt-y+3 z4{(EIGu^>_AC^e~jz%<6M(V1s@XNU>H7YCa2H&C1a0kTh#XU;IOk+$wB#EauM8rnV z;YVnGm@Qg_W{ZP=Jlv0`Pj`c9@Am2b>VHB99pZfW$`mXI;;bpix;)M64CXr#apvtW zs9aV2+Q0Yj?^u7Lcw7=``1Im%OSoe22R#!N70zsUT*E%PshO0Fihr2)sBz@Yu4Y7P^Q=~!+-u0;06YLPKVRTUJP^3pw%vZ zU7dK!d#2TZr{c;0r{#V@0oXb*l(*bm6EL*R&1hpxh;w%ui-{5x;v-hoZMIq*Ay1VA z-w@=n=``6wWD-s6%9K&igbZD=%VL9e>O{LDE4@i*FBa#8hFHYucj(FE1|T+XD$3R( zw(!l2YF9^&$`I3lt-qqNBu4k&|Nh|zce8wWvwQ%(fB!phmgwK56}&w=?*Fm0zW=}e z{qKeS68u12wHD5+8(x2L7GS!G^Sk{MdgsCEzyH045d86=L*2v0pu<}~{`=oQ)=6i1 z^FW$@Zls!@)_!grH{sma4)c+5Tii;|jU+4Kw7-ow3+Y!|C+fGu2vq{=YdTqodm(W+ zG=K+ehYf2R2mv4I*(rf}u1-?e4l`NGnNawkR+5@xzOWnuCJt*5aRow%B>kWFrbvQZuSxxDXcKP8_AefY38pRFK!cu9x zP(DEyuVf@i4Uj{z-{`+maOE_OO{U|=KJt4amYQ~M4@WomHFGcYUp^29FeZ}2yW%uN zn8g@#mme@YgU+bn4R?C{QJGqrL0EK9Mkt;MwjZG^j8N=F6Iq zdr(pA3l2gotR8n=>~G^b;FI}Ve;RFBh6j=+K`%I5nocAyYLnwd9mKW9?e8;t1>?@) zYoj-!Tn5xDrTC3qS8(3ST3bsSyhC;*nM7Hk93RXQXWsJJajg)Z{C$U4b_3pY<)E^o z!h1-(L_|@8lN!gdYC+9JVWFUw22%_a1OgzX&KGv|Ac)e~w4h+_>=OebOzCE+1ivMu zjoSJf>g_1Q%5Yqm@H1U%fF&r#cn^Km92QHef zMTbl@UY=!@XU>b0Y66^0K{qNC>4oq`?lA;jRT^GAoHEi23TT{MKTU3j{lO$r z5;X%(U^~&@?X`!U1ZlsU5bgh?BU&)=(B-!D?h}!aG)+Jsf*8W8{OyTA9@g=GQnBNm z2dTJl$NA-<6j&vMHZ}nOBOp6NN)dG)pR#RBG{1Unqs;gjw6|EZVDa8L>VVDDL7S%u zUn_{yn~F-8BWW2;2&cY(Ik|@QC(>89A{T~xuGB3vqoe1V7Mcsl?2?H^N#!S>Jd~WR z8^@q`50B23jk(hy>*9m@ZuszYJNP`fotT}{94B~Q`7;9rrXdwY{2)lFvdDAS1lwj< z#ST^gt1}VPj$oC!j&U**D`?M*JW|xLX9gcvn@l4` z)A8}SKuQ($yVWRS~XxyVI*Wt%UOwq4^RIyq5ytw&w!qAk~?&>CyG zp2X$Ls<7>+fbpsajMu#Y#l-+ss3yKIQ0!c2c zQ4@~M4rl;6MhFWVPaU0oJUY8NI_n*sJxy+I?|U3EENW8q@#5;Dck%Q%0vEV47#TVE zaCQ0da(wyph-Q3x==Fa-sW^R032KARv3@Y4W|_QM;BbYJACN4mN<#bryfPX5zLCaw zW)9;mLx-wpaT+L0sYnTlCVTE0$kopaZ}!FSY+zt-sL#Mz;a7D&U5`6U@S>{RRB2F> zz=Xro!wYGkE*q3Uz9BngVs?_)Dd4!U-MRA}#R!1U_3b%W0NOWT5(KP%bf<%D<~X3i zuh3MUhF|SgFSw+z^5h*VJy&%#BkBIsI{ovUPE|#{sE&MbglYk9QsLa)IIjVveMs#D zf{dlzNr9lhs!9i%HhQG~p*BUOHU#x;7^)9ZB`w>3d=LNxQjIspp+;=jg|3 zb4{~AO&}3-p!Qx7)G)0z3v5x+FoKytY{f96@{6;dh%4_K>B{xZ>-Yd*K$jq)@;^8~ z**_h0jt)Af;J;@Foip(7@dxmS9n5~Js&Iiej0D9Da>K}oQLfO-%3zVqXEcK`)-Kqx zl>%w6ZUGeoxzgO%FV{9)<9h@jL(wfgQQYI9dk70%^Fi8MEIR(?8BiV!ivgO@(sJjd zBOeNghy!7w`Anj3ppLb$;XCZ__G|;)7G)Bg5*(`b0H41A$dDHAeQU9Jwtz|H~1RL9`*9-cwAR3bkR1*o7e&IeE(rWH}rJ z!I;Zgs>-BMQ8ds!49GeBeoQb~;(k&=uBh=9gb(}^$ee3CSUdJtz-V9A-m=4CE(MD= zAMGH5%_sCdqtE{^mT$PT?IR=Q17d~i8R)=ag|n{9+O3Jj!IyyrvP_Y=RbmDg4_arZ z#gZYKuO-A76fG(8NKy34{I+^#I;w*VY3_L@D%2MeBRxKcUQKl=L5eljrmwMro%YkG zhJ(MLCe9A0{q@NwfKGlj9EEQn?;BSj&JoxTxLUigj{qVMT{;ecVM^2#izLr=jL1jlHK| zFlJ}$Bf9dErU0K$W)cYU^rS?fXWvtC9TmQCqiah_$T+!db=AmAHBuq;ym+q6Y;@&; z1I82Cjt;02w+UdO^AAkSSe8)nFqrx7yt*Fr)kav=_C#bgIKjgaEX~$XUrV$B^yYII z(N~lSAf9gDEdUfG_WGa^LS+@Z=QWKZ@dE{!NCee7@fzc|rEDa;5mj2+b?8jUI1BJz zH^{86z)AsGADmh1R~35K*W4hvPyJLCW_)HW9R5^c61@ia1SYV2pNgW?k|l_6jy1`k08<38 zF3Qp(rBOQ848@n;q&A8OAbQ`r-FZj8FjULT&pDn|7BU-+g+(RO7052ij^|y_^ zv1hO*npj}OLvwm%tpF%0P;0?h3frW2&;klpsMV~-Sglr1ostXBj?{$;RI(c$H;Z~+ zWVJ=6s(tnP{lV>E+?x*XN0bglbfxRT=V5;k*?aoE2XuElc)0ET3jOC#v6Nq~ikThW zmr^-g6W%5fzX=#k{tc`$0q*0+&@ev2Fpj^yIZTzidWQ#3i!YRV}$um1l}GF{%Tg44QIGU@nBvFAbqDnCYWwnC>jN zkiyJ!;YNg2y&`a3J>J|5#w5yAKwebvX_JI!3cAu*c_ZjT4k&H=5W|k_zR5#xJb}Ay zGQ1v)`oC6IjadU!9_dX3Kqc_{L1o$BEaLz%k7-px1&2Am8(1X7?MdK#@mm>OH3w|x zC(`}v8FurrVmo^Tf#VNn;Y82xLD^;YvL0lom!f2#;fwAub$5@hLvAwqObH#ZqJiUz zkHeS-13?ms;JwJZI=v_T1DHb)R`!cqF&ET-HCrQPE(-3vfONMVeHPo~=uyoRdH}76 zBQ#)H$yeK30^#{RCFt;9^^pw6Up-wrmir3$3T!VN(@_xDfG{^Xk%KZ1K{pE(7e|LG z!%`vgXOvhI9*t=cly0*n@*>9J@mT5Odvv9v8t+5YLLv?hgXk06q@+wMLSe!dP+DJa z+Adh}Hq1zVwIjElC?h!xQKV6WWPD|G>w_teI9eoK1hm@u;R#=;shK!ObkDyEm> zNQ1Yin&kq$j@HKfTeI7YWYJ-l8I3>;YG`FWY4nX0dhIn#3>BhCAS@G6_Wa5+)HI+H zXlF_W#pOqG*9Ccil)A`((yDPQIe4-DetPC+NgzavBFWtK2_OuFUJ##zt`Lp3QZHsa zl4J*zRzr*Xl~)^QF^5%${X8+=TC`2g_yLV!KLD3 zg?^%NScnr<$O$$4kFUXBLd%)BBj{mdWFZsWS>GSlutK!+6}K8MC@0kISnIV#^}N(s zDsfSPSx%0h0!9WeRb(^5&iRGdjLH4v6|q!OdACt$RB|Y1?3?9BUc3-`^a)Hiw)!}@ zzZ*=)zmg21(PY{i!DjZfjoYSFWFZy&%lXeDYmsa5;y4j9gHM@xi1sQkt?xskOw+X1 z1ajKLbO1fTJi}l5WmBTzWoiUh;Y*}y0X?dkx+(^|OE2g=8eegq1$uAj)KR8e@J3f$ zLO=)jX$GsGg&{tomFXDm>7E5i@UILTBphB@B1XJiy=_4cEwuuv-V%znSfr+Jmf7O! zad>?`o>yXQy-(NHjOlzzFr+gu;eGhXS$z%E zAJIK^0wd5%8`I`Iuxkc=)s7!I=)r=*?1UKlg0vaPodYib@Nzd%8cLYj0GTn+l)^*_ z$IjB_vu2bq5U3p`0d8eV7)Czmq|6+cgRn zisu(qLopWWcrgWWxI7XEsm!cU5=_S_=mS5j++R1?PtW9sph2)HRGOdF#fcDlJ`P5M z@vvX7hkyxeJUsqzsjBeAL^Z<6qmHN=t0-9ki zflj^^iV@%k$CDf?0!^KP_2ycIn=TekwOywMA=G(9V6EUP?wUB;Aha|QJjFj*hFb-fM>BtWvP=Vwg- zp`ir>2cEhKxZq2rI!ZYx$W3(AT-~qs8i4Me)R#LxJr*QoVz|gr&(Gq<6wbanM z5DL^+XAX6q3sEjMjZi$gFqgc)0$0MP?cczY$A9%VtG}HbgQvm2-6QZX7*hjuP@BM* z5u8ZP;MCw^St6RaR*sm2gEVF)7aY?3&|cWfG&e*qp_GuCU@|2xXi?n={$fp(;o<0d z@DHpAKMqIJqq8&%N(_Pfhr@uVQKS3OplWS81w!I9Ih7Z*P40m#Ak5@Z={O=1W1QZN zg`%|ZbPgy+A~A+QRKh9r!op~NIqYIPW&`0Dg+-l6o6yE%^9FouADsnj%k^J?Fh?B( z=W^|od7#)sF`B&AgOLXlsRWf9CcFyW(P2A2LWCP+6bp zBLg*E1Mej;!T|8$n_SQBIfMKTArxD}x5RRnKxQ0Ay=Rq1J|hV~v-pEDysZSg`zOZjAtVyk|s zGhL*WK*RXUCSa^BW!KOhBeVi(Zx@TP=VWORpVe@~;c*p;+&RjN%BK~brzhthT9MBH zXsyIo9jse{uW(?u@}3^~?V-5Wkh-o4bhWZxGj~fX>gn{syR(Gj}UY_<)Y2@>CGwalU|~#*pKLm zTFd_kA#J4U?5Z{*kld~umtTYkLp6uErkr^nWi&NVR&WR;U|ne-8edY`q-Qd}s%(Z{Uy8b`X*GA~^) zBZJn1w50p1|2gPSt5SXpx2`nNKHt^_dlsJQuYj(SMF*1I++3L zlLeq+!v)pBEI}Q_87a0zwL~B!g4|VR6o+wV>9`xeBjh5DAi`QqXII0Ku!KE9UzH{^ zJy7kGsVt8wu&0Kb5@cj8NE*q>a*GRI3uSk?BkyPwkXCqYLw64Tt6%bZ9zK;Qsv@s? z&Ah853yx@I`0fTgd2;+jn|4YsH?D^Wb$0C)Y@X`rc--l1+MF6-vlC;*qR}U`!%A?# zhZA?_R$!4vxySM}(r~1KNMx;FVRn(Xd3}TAKJ(nbB1$%Z6wq}-A@#S7y?zH+@;h_X zW%L=K#(MU?*5m|^pd`xpIKPlqAS&o&dj=d}9tEH--qF5*Ky+R=-o^(PkSiG4HWsm< z&$4SG6C;~g=c{9}vb@rmiUfG&sIvRN>d^E4IVcRNx0TKEz;vaP(Hja3xzcatazcVB zKfecMJ6`mU6it_l`N2|xx25bYCzOi{PFL89SVNNdJfDLJ{X8k%x-XFAb_)tuwz=H} zY>N~c$SDn*+=w$Mc!xBV`GC!Xk)?b^0N%k5_y<&%PY(W`QSkz1VRvw<=olyNVCk@3 zLJ5v8J-qxNs&>--LP7B0Az7~y%UZYf-#>uDNHTZEo_&n?no_g2UOa>Jc zfe`35eRLe&IWwR}S*yW6rp5|PYNqaz{M|h~7q+<(DJS8xkr*3Z*aCqy4T(8Tpa>jd z36+h3A(P-KA!&o@a2O2l4undmfidq)xP^YV*WQ6pu?Ruk2jBn~#x{_(-cyKR?rt$w z5IR)t##$tPUW=?5{cf!(DaXfgq?fnW3M^A_- zD^QX6K&3t%fmCI*=75U8z%K>}2kcg6y$$y(Yvu&+;irUthH#(j4yNT{ncQk(BAAXJ z2Q}go%Y+D((uQTvOqa2oj3x};g0@d4aw`mofw?JsgK9)7lj;2!UZ{UdP#~1HEHeTj zWIX~fCILh?&*Y&up1{pA8D0-Y{a-0-a~;qLYxAEAdz8Tg%-<|yS3X;&KMsBK&0?-J z!_XP@)C?(U=dvQZ7#x2HJC>CnFd_QxdTg=DGY45+>t!T6Wnoo|4_b1+xu``+{xfg+ z?6^q#L8LEMQ{jtXb|YU^rS8T>BWl?*LSZqW?lnSdqb86ldQW%&S4cKH1HMuy}^Q^m{Ny!^`yKUWG4_x^(GL z)l{*PfH7w6y0w48@#Xs;3e#Bg|-X7PB1LJ-n-OAR6tzBRY;I5lJ4 zis{wk@b>y?GW_RYQjd0;hRBv^r~=WMluIrmN+ms2Ean{@o?J*mR(DOzlYs(?c!Cg> z44o^MITVAsnpFtFp$ZW(Ym$%z(T=pC5JFMx$;;VoLJG+IZv0A(a9l9%q2wPh*U*a4w$6%Cn4A=;szHSs;T%M_1 zNd=)`0tj+2q5=Q+(LeSK==&+@$VpHO7>0P~!U8P^fntbftsfGtj8hV2DI^>dvTCG& zGqqjc;|P1b@m(GvM>6f6@-i7jnp5RKv`Y9^uu=p&#h8kBvJ|dc#~qIa?D4o%7q0@N z#*SXayfwLdr-RYtek|^QhiJG0r>_b+TjKgH=3@hNUo);0jV%BZ3D5RT4-N9u0(p3LuRK0b@`|6R8*W)D=zq~RZUy3J}lm4 z6)K0~Q(>3(m+D&^sRiTZ#&4qbA^rMtWne*=K`!-IH0Pemy+Uv_N8%MMG1h%$1DX*S z(`vq%HQy3Khouwm>He3)q&ZALx=spqf)TYSy}J{2SdY#ty8^X2j0f>T#rF)k| zcryg*9bI)etS{A4P_roL=)+~^Oc0onlrs-0BR7F>Z0VsIjv^{tsD1e0&WY&cvFS4a zzCc002j6zz$uxnp00YB$JV+08Ki={gOiNUiF`0`?K{4w#+F!Lfe?^16 z9s@h(nKiqwq;RR&x(;)*ES`ezxPD-{Gdoq{y08=q? zn!Uwmi1G~6#}IE(HSoh7NI;eP6N|NADrRNeNQY;qM}p2CG11Wvz|Pa=B!#pQ+y{j# z%T2ynD>PyJ#;{7P%sTc!kIZix`|ze@eKk! zI;sxOE-wW@@2%kaQB5nqV=a6y6J)K$f(EMEb_=Fa4?^Gz?SLtiC48!hYxvnW&zEre zs2^2g`T-H_Foub+jb6gN!(tgP*!A2lY#c^jZZpqS=q*>!1CXQzWhq;F5YYqB064UO z^nxvJkQ@3shI_$;bicug>Pa` zNxZo?c^LGkPow+Mpt2_I*^s9)pcf2lh(zaw7N!&Pvvx5jH9xV3f&UD8V@k>454(Su zg5S5SnJh1=k%)`Ud}&D+6RY1P%_blf6Or3O??SW16yCvCJ4?&|f_TBRQ)-2(jO1~w zvW6O>Ps^NH0-hj$!G;$!ZNy&?K_WDDen3T~9Y3rYiV<{&@RRBFn6bS>^&8oO9d~Yj z?~vK4Msq3SXG%_dSbHmb9XN3>O8F3`RZeOoTudK!h>d((zVFQ(*3yMw@y9=093P$k zB}5|2w-Gy5%f#umYmAeA09n9~b#9Yd!$*Zit|lBWyB9pF!z!B-JE|+zHbcXVdAokq z=k$5Nlzl!-)_l%)euzMfXAFD%#b9Qym(zxVHRl%Nw% zSy%PB;VqvU;hM@Q^T`c+HijoJHKeAlZ5$X@6Pv(Ik5TDt1LzFrC~n}0eFmzC_k!Zu zVk`C!*eDK8WN^lSGthJG9}9G$+YXABDJE)RvDy>0sA2AXrlrrUOggX{j zu@T-bKVCvi{5u#XA!R09bmn9#+&SxIF4u$WVZS#WTo-8~;sW;Tmn$Ii(mA%qiDJo# z!VLJs^V1IkPeqRGceb}g6gy{y!Fk^Ee*w{<+=M0J7atv-h{%vpb`yF>o6vp5CV)&_0hO*$#`x&0x~cxT_*(tDr%NnIiGk2qZ4FpgMZwx zjJ$=T0;1lY(h65m>eGSpQt>nEc(I>lNc)m5@EowZLK%~$zdGw zp!dLt=_vd-md;@pOQ?RoLuc$kr-6p}$_>9`wTyl3j;E~*aF zwQ?6V-85w9?-~6>I>_m%s#hHgrZt8sjOCk$Dsf0qj^}oM0Q9xCSKb<4e|}HJdkU+U zhOwT)0VLjP|#g+$UAG;?~Hg*x`(@j0Y*8j+#(&uAZIORKyMOS%ns7-w^Gm@$_!aM zlvDm&BYug=tn}|Ypn`|YwC1QY8J`BdwU%AVz3n?n?z67MejcSM(5~aT5 z$e~QAIrmJW3|8v+PZnhyeJ16wG)6MP4`Rt8aS{WFPsfjgM37sF;sxhh(g&>gyLn?Z z#11PYY?2_)UdYnpXs8zNKk>fM=pGE7-LELT^*oTF?90q_U=QR;E2yS%m)#M=q61G@mEq| zWwAE(d9(Ne{(=8H`soOt=x7lVafYFq)Qaob&+vcc?P=D*6Yp#IzgQ!CL7sAwc{K~S z8n}qU!D^E4kI#<eV#fTv4 z7#z@=xFXs`2b`)4+wue2^MV)UqnxRvRvRV};?Lq13ziR2eEm0(P){9?bg}@c2 zWzc$lk3|}12}z>^IT6~Q2T{moQW5$xL_>S-eC;{&Pu6<=&03S1(x@2`mF%lGluk;8 z*`Dc879RK!{bQ*wDkDSHj|oW!e;D{$@}Zj4i1Kw~*3lAPlJLaLNlkdMtY1D|3FzCH z-l8+ApvqG%J?5ZCybdfz_2zRhz27}NIgvP-Q&h*wVpr)2Z%D^fj^rj8ofhhuVUeMf zv{(gvmdKKnWNx4=KTcqv^yE|T8vGy$a=q*8@nACH8Z*k!mw5h=-tFyuA7w(T)>JvAx%=&VKgi9Orb5RA1rAV6QIHCk| z%0-__gF$1Q6a)f2ORizjV5pe#=C(guJFCE3ldol2-Nn(7Joha>@0j$*!-whpIJ%MA zn^ZZb|Y zl~%=^SFYN?r8o(qAn zf|sDssoTmY8gC8^I?WKA;_J2b9>?}QllhtSdmhtHd`hfTaBi@XLlr0F9Cw*->Y@)` z*zRlaCgo^6KYct!l_IR7!)@HY9agsK}EjRXdIYUX!W!fyamWGUIsLgb1Gu`URbW^EE zZMIvR?Y8ULZZfg3&3LOZsY->IHtVgK2x>Fm+RV4q)LVWUwApWM_S=qRzbRz?HUqBB zfYYLrHVdxJf~%4E+Dy1M6Rr_7*=EBfl;}1at{5t6GveBexXO$*ZB|^H6<0m=wV83- ze`a;t?6|Gs__)*3;nCTlSbvu`&>;pBKgsBlZ^M$o$F;Xv33Cb(V^~)$N}7opC;6g) z4q`-0g*X(pqKH|NMzZc4{5Nab28W(%Kz=>lfUbt4>u~3i9aCBFK*=81$8KXqZPH}d zG58D~Jqdug??)5S7t8N3CL#JAY%!Mq?B1UoVYx+dKl6kIFqwJFrRU00W3N0Q2zgw^ zFdg_)a_%gO_XNn(NDVDHUoXKY3rpQg%uDiZhp@#nPK1QQoWLGVXWhn6WQ`fa#}9G8 zr=o4$O?W7-h#jeeU+9ONa^byFm#Zb|B=lG*4#Do64?CbVckBfYP>rcQmlXIMb_d6h zfPK2*EcHU9F+w5Ho<5H6A0O(I5ETTYI4UA@nP|@m9M;7UmsV!DkQ<7qCsm??iI%^63-azzN$*YcI~xkrbm(uC;zpWBoS`7{XV zz(fQIsYsPCjIj~P@nR}C6;VNSx-o>1HxG$g0yhmwbiXlKNHjExNM5+?ajuuej>9Zl^c^3RS>x+f>sjOFu)_nv;BQ$uaHcIUW=E8Qbd9@+d*pot@RFG zt%fO#*9t*8cThHhzrm?##LV~N!7@eg+rTyt)((nH@&DYhzuG`>pF7JiPlfi5uxpE8 z5l2Wv5I);*R;&nRzomU5jW#czMQSIBCGs94%L{kcJe@So@ z4)_|q{%X$%l7@LH3H`uJmj`+b?_jW~c0w$kazFE7B{&dANfn0!CigWH9#pBXtVv)i zF%g+hKB#In16HmSA1 z1j0Qcxy$SYO4HJOo66c!q9G-!({N5SQU&CijacK{+U$-xnjLYJ&dXzo{=diQX+Uc# zo{8X0lxSH>goOmJ!^!`=AC9IpU@8Yncm^IFo(h663#Otb7vk58ickba#Ij%Ap8Tjp zfA%^tZHfLpryarDomCDQYx5T3@!JnO6s#-l{aPlQfeI!f?vO+2Rq0%BDnh_^$m6RHLhqIQMy=<+S z-gR0KFl0?!0H7tr`=hqcCnwf^CMZj&LD9C?gcP=-i!q-z_NR$4_5JyJ7}FEc-Fpv@ zFFuH6LzuCYDttjr#T3y(fJd;=FN}W~gKWB;e%8C>9vU8Tp&%@S8edNj4FS-EuSI zIgn_ji!JZlondEJ+O?a3@a{M5PJlaCGJ9gK-OfXne)9h0BJ;sO+dK9mA6ZTfZBBBV zlU#|jLAD#)yyP}7vdv4bvK5zPAGW#4?H+7%laotpbCcWLjK9XR)FEKEdVo*<~{0fsY*BAXI7lU)P1BxN}52oS^t zq*62s%LmnqW~d?IPep#>q|j!OUu~J8EpeF>mpG-ge&T{Fz%DSGw0Bgc&=qCnV?rvE zIef~j#qFZUxTjpB2vZSwBqB^%!`_0pT_NcSMlePFozf9-c(4ZQ3N-LI@EIFV9@7o(VAPd4_lm!fL^`MI&rW$Vz$av+sb3Zx>Q$aM;l=Mfi zQ8ki5iZz57PQ8~u+j0C(!2lMQfBeJ6@zMET#PMJ?Zu4WY{jnL_ycPf3P26r`#U>Ve z?(5sct(sM{n$%@dk zs8Al~Y*R4O*qVHN1o_abfd4D2Qi28;kY^~MPNw6>K8lJ$L6%4+#X>6yrW%fJ?rRo3 z(0}K``@{OV5>+3%&Ay0Lzu;4^kFxMneE|lCKYwbigbyvfg=hy)_Vx zscgiO>W{|OWM!$ra%;dPSX)u$;1bi4>WxEpZhyz6^`Lkp2zKu!vZ=zHJa&e(FGI&j z)!;-?Es&k6%U-5Iq+8MlpRnZHQ~n%x6Q27kk_+0wFZ4r(yYODA%e4ZJH9aHH38KJz zN%KX1({*H!!hk?EW@qJ=vQz>@wmA@Zqy_s5+*$=wS;q%YuPgQqq^M0~m_m>hxDEzs zqASY26=mONNIQmxt%bF!6^>q5Kk`h}@g$Z6@z|ff^VJfvqcgxZi|CY$b0MWTG0dOA zvHzv>&6xw~(bJO4*Vz?L$VQ-rUK))toqqH3@=g%|`j<`gk7G~ZBaAX_{q zIj~=vq=&3V)tDaQ)isYGnqo*L$*3R4_m2;?SydG(h{BjNROz{bVkO0>D_X_=h3X~x zX9J!*IewzM0Bma3dBkG5E;2I2y$BFfq`0DiBP~UZHaU#}e>=uiD)65L^CSMKt2JN~-o{_N z;{`_{#L2??y%`Eqh5iEsJnYBeUPqgTb-AR+9g8M7CNtDb1PwXNV^V=9IYkLg*&|wR znbZc!>6(ew6M7Tr3k5i8RQx*OWX#W~6BBl+IP>n|@$rSc5)R@9i9qqdS;W=O;jx?u z6`c-mhog^A;6H<2NK>7t1x0e${lgUezKysL717EGiO+&vmA@o?|RdxyZh_m&2TWL z%HfoUBzsBxh`4p#U;hLypfZfHPWA&SKNp@?7&~_eIhkIMgY#jfJM=E-J+Qw=#qC%D zgY_P+m)InA=gnbs|2j5J0T^MgqI3vT0y8xdE{65I`Mx)E*ywB?ZZTam{<@UYS!3-Q z;GqR4@IE{T{k zUpGM4x`&tNM}jzFB08aQ86gHOR@MT*Z2pc~30Si)iTb)#HB{t%I-Qk_03c8XipXJZ zP&Yv_C=d{&Mk}Mx?J7&P5dSGJqZ^OcNa{udQNA_}Dta=+{_uR10gBlo4Iyc1yU>~| za_l*-AQM115?Dg1aAa|HgT}znh!-ZqvSigHmX5peJ3_*(2Zz+@DNfzyK`U=BRtcuU zViQtiHl!mf1C&}@vSMh3GOx}+`lDIoCOUUCfY(Il`^BNc?~(?Wpaoy5U19}o8_keZ zRwKtENv43_jz;V_TZ7dCzc`&d(d=GJ@?CW)FaF(jq~SGVz#xs2xI?;9j?!<+kltjK zb!AWxjH*PcjB~aPYQ&_Oxh2S6Q=v*|l~G~aucrKdHTy@Lltv}4VWe0&r;O8dFq+(t zx!qEqDD9T%T#M)5>(;dj45@mom4qRtr)@SYshZmE6sBr)1`}*jeqaiT^*}>eih`pR zW`zcI{M5QRwY-m}_B*a4mQ@W|{ky8T z@bwE8sz@I_Z?OPp1duy#9{Zmr!=7;ng>=?^45p9+WEG3HnsF6$14mQPaEkq~F%yZ^ z#_uHS#?ce1QPp(_QG%J+nbhY;B;du5aBWM}ad;qnqIk^29)~_)D=_K+doVcH8wCCM zk}i=)4-^DSDS69?nkMD?*#+UBzisS|J%e#RV*e_s?vT&L6j?zrUXDU+pam2i7NlY) z<^e*gnSsm@-kW+~Y`1%Oc5*2VnMpj5H_lQbK4;R6>Dl zI2tbU&ew6J(xBy05s2;5L050{3QTa`P?0CTE1gpx2fy&toH zX%6Pd(i)FBm6N_4%mMB4e*Dy%PJ8`NcLSy&bYoB`S!3g{sB+|&gT?E?!}Jp%^}(n= zylpr(HP+fNtezgKn)Z}~)#2#jaoP}UCIeIr_9|1mW1EP=3Ic2P21U}Fwe<@BoxEAF zamE-R7SV^Ig%4FTgkV8FC%^(p{F03#a6#%7nHM^ZY}a~TAUz{;Etf-{H{e`FIGTLw zUBhZ0V`!XYamN&fY6t_$xbFJst{$^9>C<>W0@r)P(R5P1y;;hkx5Lt0%2A|e7|N?F z>y|`#Nxnx_8=*k8x}tgsatu8u-6C00C7GZkJE;WjdPA!-=E-6Ivant?p^S!_!*k{> zpB)!R$tM$!xGN+jXq47bc3fPsrbde9Z)x3&DeU-)gB}PAQ93ja4CWn75i{HQNDEuTo0>z`hn`JxhH z6Tz*XojCb*ayPgmZjH%9uRo}C=ZS!^&08%~*lCdgx1x8j5x1v@(op<1;#Qx2vtgkP zxz#1oHs&@DAXlk78KQ2v&z7GWskGWRFz{BBlJ_U_R)(wGdQ29h4LsxoX(e&3RJpl^ z7&@p>5RnBd>(-dPc|JfIuC2O+&%hW8>?(t{wUre(&kMVQ1=BF{!S5^_KOoXBtffXpHuAtYG42d_o7yg(QoZ=oyd6i(D$-5)Z#il4hO3uUD@sNZHbxGK4AX!3N`HHZRwsK%p ziWdg)g_wZKDH1ldASm zo7aL%tH$Sr;3~ePskFxrR8ilB$Nn@%RjI8TQ0o4v=|vyM8Z+0e>qYKHQiF3inAGZM z)?*+K-Lpv_>!QqBATh=QvLDnwfxf9=AT2QB2}WQ z_`nP`kn0NUe7GM^!#c6)9bIi`ry5FoDhCO)z-t>Ww_u*2nl|b86y%PlBSYhOPy~@w zs~7w}3X)g{LWQCIu=q2$Y`ZgiE^V6xW;#-jJ2o;kSR2w4=HPUsy+KcxC$sV)b<1OZGf(3Y> z9v8EM#`jPU)!+5|#CZ#WU0d0;L8QAcDrs1zHL3+~EDt2+Aw}+e*umyR5QsPxB(Rf5 zqf~YBo0pWXPrW2}y^5N*F%b6fgh+y*nRUTMJ$nRQdaA8HO#!bx6RL&xG(&3+GPn%8 zZ@rB=gnVo#t95g>ys@E-Ggo&71drL;Sz%rH^88p?@rQbVe0bEI(}7-6YGX$x8`8^X zI=qEtNA4e{!@J%s)z0TYJ^5+^M31?NBctMo79Nzbj4&YO9TA)bm2+sBA{-xn@(+pJ zg?LX!OAfpDgw})Z!dc?r3cRdNKQt@cq8o6}{+KZZk-&@kjOuadzgcTQ-gn^b2!R5zG1@59c;1$neCmziX1Ke*Mnz}(kK^%R zG)-=ZzeApKV=bM<`_P>`<>e6m#=OY>&Zfzse>ULpljFE_eibn}I+zfoEfk9hIehY@ z5gs*$q{S_W3jw5U&ECQqw^WJSB1nAWIsie~AZy^ZNw0)3q<03*K>gjUUEDsG7fSQd z4p`=vp3p&&x4J{QAvAiA9%p#XG1gjPuu~KTy<#2LbtTue!9C&$f0`O3z)qNA=&HozU4} zt!>;fR@5U_bVf_=)2Fk|d~!VOr#PnkQ|i+WphuM6N^G=>d9OEj>GjI;L)KfoXr$}i1t}hK_Gozt_PF; zc=#{{S3-Yo?*Vyy$AgF4-mi&{t_Q+mlXId@cxz%<1)u;o#`bDqy+;;2>8Qrr_2j(p z{8(HV+lUw5uPkuV5)fTSkh``5D_+6iA5%oox`UIP(Y#%$n%J2sMHN2FNloG;B4woj{B86!9Yj!_Fx3GbJ@FP`fQ1Jt0gR`o zDhoJJeziz8R+1?(9|>5~$_9Fb8+6f|F)IZhgHs?nBnP5%9S-X}!eN~oyeHsxAugV| z^ECp=2Ihi+N&fBrb+dr~T{!T+tG^|;1F2sBsdpWAqmO9*uYX#>Xa0mAl}~WpoA#bQ zj(ZQEq?7y!FXm5Rsda3rwHE+b*>ilXqFp7fRxUb960<~yN8-AmHZj~nQGH@_?gpn( za5z!h^BT0vTEf9tXjIxZTzn2o!Zrs`DdwEQME-{XKY&+9XCvUv=wNnGdZ+_)MC>0U zZX-I(GYBk1txeiYp%!ZK94U_L2bMdtQ(0a`Dox1%pVEYox^@Y+U#K#ZnXQ7uOaau9 zStTZr;%I@lsOq$ex=Y;BD+^N*d5&1>US*kzO36{rMVOXsN^@pYuVR77-l#H{R%H>@ zf+5Ewnlm_J63>Xs^3iVy>8oHbqmm07`y7=s*CZwYem@wGdbeTRc#UF%8bp+-M~^Bw z_QYbDBfI9<#>ZrHs|FRoF1hp^MbqVv8%s_Us;xkWI1zZtVIx0(^SpEds0RWdF2RS> z!QYTm(r(_^KZ0eiIZ#e#!Q#DxRBJ1$XBTp;&p>5nT;~~r8K7NuVZ(*l-|g83;{!x$qNvpk1#l5aticsx%yf1He6udK3|nZqy!24`IX}^=&^tL3}=a>W!{%2k;A- z3%IxeZ>pRStve7c1=ltrvNl2%#>9)MIQ()tt{T`nz#Ha6w(CPSJ6U{qxD1(+HeDbgiMM43VX7DpiTFXunQx7Au(y)cMhTnMOq zt0Au3TsUsD3%0|99q$D;6f;_s)*fR#XVQ5oA4(1ACw@A(*97r!Jm;TD7mv6@m1N!rOVEZ`Pn)tX$*kavq69jYU@FE#gNkG?xqgb8gW)V2xZWve)MtVY^ z)(tm76h#BzCOP{M7pPeb!e3b9VH{)e;zA(%XyfPbKRf@=|J4y5q=)4mqy(T~H{?4w z<9X^mD47i=2&m8!l9(-Um}S3Z=k>`Q$6!r=pG)Z|W&^&5?Y=Jf_nQ}TL_g$^1n1eb9_Vq20@rAgs{yXH2B(El$gn(FwZUn8>eBLsu;f*U z<$j8$Wchb=Eq|~>ej|Wh43dcydt zBx7wSP$Icq=>jrNhTj<&0bLE9igg@T znvG)fx~;0}6U&xCAu&P5aZa4M_AyX`2Zkn>h=OYrm5EB-tE+TT1jsfxqI#IaKQze} z4lM|10#Z#AXkBHa5|B-&QKk5V3s8`#gk&h-08SwFPN{YLeP=oKwSGm5!_ib{Hf4fv=DO?93-23 zCzEjfs4t?kaDw+PTAWQ~-}dR-oj$%@m767v-KfmMsj5PcUYUi@!@)0Yt%X8S6xCZe z6<5O8r+N!HNURs`RCSqjZH7O$`Tp6kDTw@-#?C2N zg5r;VxHvvK|BJu1wJHPz2&-~5r&dMnvXQv#gD}y-?fO7{@@?!S(+?2`2huZ8DCSYh z)#4pFTp`Mx*NwOF!3Cr&`Cxx9Y@P`uDmB4gpqh%*1JPQYXY|QZLwN_$(O+3-uI!Z< zwz^t^i2C-tVuDCXXhzk9cy)ZQ2={))t`Xruq2~?Xojf)PN$rpqT;N1uGRpFLQFxOP zszP>HAcA}-Dr?-pTHAmOZ~;)t%mk+awNu&P0$7%u6)ptlc4vm~vC~sURN1n`Y5FK2 zQ#_wjs*!#uF1%akXzfI;<)s%0*@)ELS$^Cuu$apH#0PftS-_1H+41B=~F1w+M~Wg zU`Kyw(PzYOiVuSlv9-!~?KZ_ciN2dFzi>9Waj;WrrtZ>N-FovY$MU;}M~7zuR}zGp z_3V3#O<>0cXL1ZiGZa=0hp6-X0~p;*pTX=JN+diU6v=#d6fjRu&vbfJuv+BLpTB>evxRVneQQvVH{_#H>M6>H6bn2L@stxZBk_Cs;C&o1NH&}n zj#3ceW$@kfZYP5Ti_b$&zuRlCV$1^q1j_|`=ki=yHwur-8F-)GBumGQr>*$YE!Xiq zu+r800MQy`Am`Z=tI4u@(QHvvRq75el8WDkAi1_2{#u$yn*d>zRax}uOzQ0TF}3fk z?!_^(PX~!wM@B!e@MDF&H_vg5O5}oR*cCzTtfHP z{&Roboq6t8@C)!}06cQ9^Xq^Aum8LMSHQ>rb_HMw{=q-S_(vyx1`&MB(-BM)+iB$m zFwoapa6);admUa-53wL*UQ}o9p`8~RE0WcpZU#LR-K!4dHK&G2@LqqX@Wsk@&u0use5C7bh5gxkBm2E;lcjdyRs)u-wG)8P7JxI)IJEr06jetbO`H;?XB z4JLDNXCsH?miMYj@b1Z4> z)9{7Q0B_)kP;cPx0Q{o|Le84?k~WvsW+Iv+DV#74bZXhLdtODJ`^(j(-O`9G=ndA3cM#9 zuR&v!(67QXHfNKS3OOE=CD*w}iXVgCtbM(v<#Ndffy@<%Hsm`gZ7ckNV6 za2WxRv9Ii-Zk>d|ayRxFPNcfc`F?aHK6?(H^p#YjIQpJXM#{&|>F=vGq zLpbiD7bJ$M%Jy3lZEm|KBnF_$_*(`5TW?5V=o4F_OGMvJh^;XURi!`5fZ+~!MIrzy z)zC5kxKpNM*K;SfwS9eM>(Q(4;B^oQB|9i0ToF zUFzN4LiP$&ufY?PFIcQsj0(z6);&Bul<2cUzZ!rc$tsJ!8y^-={rlVd@zc%ieQydr zcQU=dqdt^5dzc4?BhGNL8~BFXK0t-Hq&#xzYA#wMGio*j-*Z*nl&aOv4~E4mA<9Fz07^HNegBPbXM#BJ5{!}sd4|Mk^)NDd|^m0TSJ9O@e=n6J*aGX zDeBLD4#R{X!Zy~H`-<>~Oa64$_6qDi+YR8ZiTeaGFsa4a3(f}teZpiPpbt9B&9dWe zLbFr23Y`6ff!4tk+?gS!(fRh~pq_XFu+1!&ftv5Y-kO$c%j zIh1-A7wtnN?62&Z^WspI1bHnAQ?x)}5_3S=AetA(R=A`^I1$^Pnl0{r7!qoh2P#W6 zlnBcg!bEICVOgtyYC>q(<{G^v`Rf5*6pjmlB(pQcdGpa#J-g}b@~l|fG)}L07~l7S zLJ~H$`+NWXj;Dc^W1>zvq?%x71#m9bcAXKXHxOvBS}MV%;4kx`sg1N#yH z-VN@o)e4|OXxGzyM*P-349xq*c3$5CU;IttQL>qfvrh8gkT1>)RbS*y`|Ip^2G$X# zWF)8L+}5a*Uk=~f-U9jMoTqhH#%IG8O zTUQWyRLn#V5J^+f4gn%G&geqI+?XRP>3A2-OYfUI>TONPNYw%nPX{dqNWFMw8cNjV zCV=U4W-w(ns_X=qe#s0bgY4m&!9@NN)N&L^Y5$S4u%lqwnsvrRjzB#sqzE)jwuK&D zauYO)AxvhKLb1MN;uPyXdFfL;bKPbQlskp9S0+p!Hp-Gz3BwdaXhz-ABUJi{qEaH^ zlvr>h6Gxge|5iD)8nr$kU^67lq@_Ct%uk zD5!~o)h&q9ojD7Ir* zE~;_0cH<5cRGSFE9-eI&U6n9Sn6_3|We(OLW^w>_dUz(z%25Ig=f)NVv?vF$vvGar z)ddtB7a#}|6@PGkvVTGWF=RzqI0|0eI`r#gB`+geV-}Q(_HW9UeO+4MdpA2EyF5$!V;_-VQbyT^3dGT$GPVHKK&25aM zgn78>nXgZ$XuR`o8z$kCwcOtKd&prMu5s{rFpA_o3>R?F07$Jo7lqEw!eC4vmwS&9 z08xW05TIpt*Wh$^vHXRlin;gA#Xz1{6;_yq(!^Q(TSIAT-p~M23m3T;WEOu1szM~^ zW`tzkEI&GGpH7dDQ*0evjM}dGo0k{odn)$|$4f*rOioU1tek*Zu0)-@xB6 zGv5i`yGtCB4M{(|*73hNzyH3l8wY&(1}`4?R?Waap!VSX-NXF|=2%UB8UFL1w}U6} zD`E+>ypSIG&%wAx%dQxmVs~{p=rpiu6pBs-ny#9NBe5=74vwCijiV|PSG92@FENz| zM zaNg1`zVXMar{OiA=i&5MQO;!owFhF6gzmAEV+Y4#BQ$VQVxvbFMPbY-f596)26vk_m7Luw)rx1W@F*f7{sU^u<^_k1e)= z*ImCpTd*`#tkQtD0fOq)FD0UVF^1*506RPv`7haRgoexV>+u#E_eLKFPs8cs)2KHd z-$%jiQKy;lLFXgF*cC&%&k*pq*cD)Ai+7x}YA1;<;gMU2S4*SC?oUA|S zT|vn(whTt(A%fi&rOHbL9I7odA_j5Qm0cl*+aatJByOh7=~QicP?2}wH#P#_q(Iu` z@u33I*t43s#aQCa=;yWlYAu&kj(sw*T>GJ9!8E$<6(?Zkoth{Llc6v2f@6|3U9r?w z%cq9rIPqG3Wf#5Od?%(uMOEyU4x2`Yu)*bSlA@xi-&T-fzCZ#iJg`wX$3+(iw@C0l zNJ-xH;;dm2z4fGTsz`bt3jz&D49N{5j55SVuMUkdr{)zBL6hM^B4pkwD;sFpU$vl;Hoz8`Z-C~N1aT(rHwuQ> z_@)m-#`;zu4AHzP$dR`-174KxMl;7H9A8vkc%m5Fzr&8X^u_AS*y{%RXaS8I9FrGr zXv$j>q>iD+Txtr1y=RA4o@k-1hZkdP)Z3Hhwz%qwZIQq9BGkoVUBMCS;ukedd%_p4 z2OoQPcfEoOjc{?3Ow27R>rXoC9;UL%;qjg=*N62grn7x=<@XEb+`c5&A`sJNz%^@E zsA~m?x5Vz%43O6e&U=W;XOEI+&d&~&EmTZeyixHo+~;8zuvPE|kYu|vCvvYwK@#FR zw8=bNHt{yJ@N;?>1V9MTrI{rxcuhHX=lE&j@Qn)ga6a$=2Fv(w-ZwY01=-8LO&*5h z?&l7cL%?s?Rc*6$InBoKWPaD(EbX;3dkGC8L&zXjfK;PWy(2uLLm5a=Bf4rTnQ2ki z>EV$)8dR&9?|L$Cky(OKfCq(*=EcsBl^H@0^KMt=~E z=H$KM;k_f?0}P|t3*^^bdl9uKWtzayic!U_+O+n`E||OJqK9syg}g$D?tAF&x)U7O z*gZTuJrRWVi0aCuXNgXW^sT1XlgSRmdUraz#iMZLyWYbCY}`}drq_nw9@*Iy>_OV| zB{x%$&fdirp_|%8!7QT2v=|5UXtN`HVXa@oSZ7Jo-yxKK9@gH>_I-ebfo-+P5Xi4zKH33i@e{muFq>ioLR1!e z*xClC2TV6f7}zCCkljY_N1=9v9fX%LB}WM)(S8TpeL$&Xp)EC49$W?fX zM>^Z+=qMK=%`Dr;S!u#nC>@bWqAD4_t;eEP@Kb+kQFk=Hj8c7^6^e+tDE=VO3#8k} zSRati+I@CVRhaJK;qkd5o}FU~0HXFJ0N>8MBeDi?@9N|(L?;!~b#Lz3K1r-a>9g@M zcRiT&$HRvyP>Cml>C$E?dWr~P5E9B4!Eu`j6_sHZZm$7 z@Dd#+9VJfN3wxPPq+XGEqVKiVYwJCGis{^Wd9k4rP_Ic~{;jSeG2CVG=mj0l#yH^28v6m1r(3bTN9Tx9A;T_9%B9tKAov!?|6DTBd+Dl-(HZ(45jR zoPj+mu8>v%&LH~@ya4E@?k3C`qHzduN>0rzrDGPh@23kWNDPb*4Ev3(g&fnOXlTNy z$PV)xhWFDCmv!-G&g_}0r(_ZGKHX2IPxqtSU!NZC?{AT$r|tfz5*Kyt!P;5m-QyHh z%xE4~P7V*nI|QaR61Id2b;aU3`;Aw_(KYnHJw9ARRP=6et%%VzT_OZ#$AXW^volEU zuqH*MR}=1zrr>}jB!moE&F?ah5s4I8kDq8)v|^%&-HAN``PrS4xZ4wmvLc6^zk7Io zawx9v3AY##%LHe}znuSMN){Gz6wtO9{8HnT-jG2ijC^++6tsEGES8B&Kmwq87_XEE z5e0eA-a3BJhn+OCTP~UMU{386l;qT4cT3t?Fnn50Dp8Jic7h?qGF%ea69=+Eph(J! zUpu_HH#8~)-@I&b4=Bu$WXn|$qJgzg5-8xTOL(CVsquz` zn6Lyn`p{=5sGZL02}YL^rGBZz3T$b6TP;yc=!mY>(V+a%QG1utEOxci%(hoRtm<&n zOA0j*%cxM$nYRSYKT7b|i*be|dxcXDG)Bc49rcIb#ioDVSZ8uHGInbw+W9b{U78va z1o62p5dl2eg7gB^^^fUzZ{ zx^eXPkDez;zN5s;C~1%BEt<3Ige#RE(PThfJCD4+*gZ!kO}NSs{E%5+kY~@cp_=#% znPM4H$2e{e*w8!Y_|0>YNI|<|FJpI!AQ+YGq{I^?Z668x(9;J*&Jvwi@TtTpg_&_A zNQ9Vtb-n^U+!%wX#8Ta86zvc}21-#oB>V1wdur=<$eG9mRmcue89cWMP6DS*b#SWN zyOkYe0zXQ1Ad|Wh8woOj8NE7?)tj%75nz{RqIihv05%yjx`5qO8kl1dx0zzm1)3ZhHG=tN@l@9(Z)5kAs5k$sYm zjEq;IrZ?&_aa^A=^}c|Jz>MU|BUKEzu&hmZ6X%cDWET|C5;&Ezmk@Q_h2z?ft^=#| zp&B=l_ceWscD;)7zGXyfSTV9$M_&ev9LxI4neJ}M*VAzi0k)7@Y+Wn?!4#8V4S)nMF zkIN4~5608MKRA^Ek^`rM$z*VQ+nb^$?f0YUm|IXl`qqL!`Fb5O10AQ2i}f*&FAhAtgki3+f&oC=cg z(BJK~cOV(2Tg(zEAZ77G&cbTl6-k7|b%`YTR#lu8q?SfSb^AlPafP($Yr{OI;6!ATJ4uPXAoaS?HJWR&I_U|8?BcmsYkiiNfMoF~~H>w#U$EuW| zvVe*Zlzw+ga1KzFcjM%;H|O=u_5+q>h0Dd23LAx%_-$lBXyM+#qQ5-7Q~AL})VUOhh`mm^hO}oD&3(%Dl&dvztA}niX1~ z$|hdp>`q!-(WoLXoEVZOC^P{Cx!4b7=>p4|%Daw26=Quzp^+Fb!6y5{hE(CcZ;C_( zO=t@(;SYH)NmXIF4FywqQEXxyuZ=A=MXUVT)q{kZNNQJxOq}NaPBy9gb6X(V=wzYa z6SGTAd^pzmJ$**)aS~L2~<&K)P9^XM{xC>7ml_-TQ~6LAe@VzZ5Ol{`-)C zJ~nRVABtQS&6{WnY@4!ZJ4=?f&aSk!7X2(h)$<4rL>}Yjapx^|2t&#E>54krB{e_2 zn0f0}>A*(mcoE5+qpc?{X>>_w*{Goe1N#pao0W!5JPi9YSqe!7n-jGd`Aw=;!QN$B zoNK?(fk~5=$7Mfby8;u9K}Y=NIfUC_LkPIb-~?3nefP+d_3Anub$RvKcH#1KZtNUQ z-~yYpnHfA@^wjGz;^7%09Z=FdxR5%y`U5+%Lea=C2*vNUL+>v^cGDucrHR9#q3?FR z0g^%mRb)ruB4^W6+;s*nYadu=WpKkwUR8Y;yHsJf7S=Wd)VTp=rf#8A*=YkTqv;>% zia357D89dOm#f&CwmqV(_}B3pHZ4<0W$eSdw0*;!nFRF>DEQNQrcVUm(Y{`D-0IrL z<>aONF-Dz>)KmK@`q<4(V$dI(?pLR}fs-I>y)MI+UDF*MRy}?Va4SQFpd1rW^BVcF zXG(u2Bke;ZCuHk{WEzabZ5eT5!dqh+g3P>Pd9$+M+dK5a!2dDKfrJKh{DCCX&?Kj| zHB$9inm!%PuXu)C!JRr!UZ8}6C9eoY zE>Nfy?`%L_@$(`vgYV=CSL?0~uGjQ|7yUH7rVzsNQiyU4Ncw}C8V#$}m)^{51 z=@~OE`He6#>Tx6N)Ot7Hfo$JxbmQg!t`M8Q6foPkUg2<(>ioh%Iy)--HmdfFBER}b zAj1d~1-cf|GRnfs!+X)3X}g%&m-zMtwB(EuyqFXowTG>ygmD=jJ+t*fz>fB2NxffdBN2) z?H)#m(n38|tt+b-XSjq5TdFg#xHX4d*YN#Vw|JnSYXhu@u-?qxq5+qi+C7R8Zi(LXRL9NTFgbc!ykTVPF7v3v5l^3%0s z-TK*;zCey4^mM4WCO3AO-*19CfwE5Y61i4uscYs*M)Rj4i`TIR(&0g}+L9G;G$j?& z4tZ^gkJph0gX5ZrsnJ~$UkXF6^MAF7rnpoxyK#m?PzehcRM{5N9W)jduv`lksC*%# z)4-E%Ts1gh~K(*+<_RFLM17})iOosxRd%Fwi!klfYmAB!S;29=~< z(f?JmS{IU9P10&t(T!aq-V}6^rYm=Z+2RFRe3hG`CR^s;eW_6#$+b8#%NLA&30`Zl z2OSK0CdowRhM;ocFyiL(Rx>|8*tXN=kuWHU)UEb46=7!+r$b3^bN#5c)}z#JdeP9E z)l4#8l4CZpyM`M`!*FS33Eq5jXiV~1l41=Ua}5D$BcY}hVX6x~>QO`8YynqEr|YH> z%94dUE>u++CyWZ`w|7SfOOpX%v5HIr-*R6H! zkL_@^x3y&wibkyTPN44&ZS^Yo6`5EuFe7R>tH%WLpy^3R0C;}=(+Ycm^y&%Z%)qA5 zX;w;n>=S8G*#C~}WGDd~tPzem-kh`j?XDzS^*`TuJIKSI%3}c#soA#%0Uun%+@A=H z2<#-2PY~A5I_RbDn)Q;q2TH4!S+sF`lf!6Oz5;2D*jP>>G;fH=35Xgk*<_RNBE&XhC<8WJCmhXlR0~PzO`4@DL7mTpGoYIz(_$1p1S{5zfNG z+ei_oUa*RSyC@&z2M}k|br$?m_}9yk3zs_@^!FQTk-B(eSVgu(NeF1bw^jE?JHM@7c9dyj0t-H`tl(f{V%~d_QDHAGI|rIH5b$W~-2n0s6k>A5 z^6AWz$-5D6>k}KKkc|WY)u6Wi*Ft;p=gY$XvAcEUc6+Gl5plgL8OAJ%Qq4i1;;we@ z`fXW@^Y=@<0Xt|eW)5`rWjpnsN5A!^e)~T&?eQa3=bqxq5Q08hW!HY3kx}wDkReU0 zTbn9w=P?7%$Lq)Zu9)cvVyJg+_TFtZ5G7QcSv@Y^v_bOwP`TNPQb~$B4j=;CP!%jf zO`mIKf>KSgXkt^uo3_NOQNKmdtI)O<6GdCYn@6IKIXPw`9lqY{-3vb<1mqwJ0?Gzf)1S5DEyDl2k#Hf4Cu?3cWu%$_DZTacu)7*R@qzP(?Z>_hiGS>j z!k1HOlc|idk4y%6&{+Qo=U(x&?HRKP?W6o6)V4)K`aHXTc{x|MclP1& z4>zJG96nMy1n$aYuo9!8$dtn9sX8jcn#<;Sk;2%15OuO)sz}+#%j}LsIumz&(cvWZ z`#$|AX80t)c?+f-D)Bciqb;=WUrE^CBN^S>WAJJ)@BnDsNK9{co!m!G?HlqQrM`o3 z5v+KyWtd0ciHrX=OSl<(^3^;B`2aaQb%5}2?B_FSF?(Op7;#%?QX=5o*94Zo^X_iw z48uH4@)BqRCR;5w-Ts#x%eGZR#4Iw<Y8xf!6|+XRxjFGQDK(`Dp0=tE2YielHjW3)ew zwEh&(`)xC_j+d@xN`upGLYT3womF|RAYBnDe-Zeiu{I(Jflm_m{*&sir*Ng@ z{a$7GKK}BHBN0xOwwUt<7DvZL{p&k=4DBEm*b=&qJ7Wag0|ed2;^7~COP`J5^};Vg zqrGV`H3UUz@dQ&}D3}lcq~{zOh#oOz~&E?ijNOJ0K{W=we76QD_W0dWcqm6fzj=3zhM{1+N4Qyy{=K zpk4onvd8z1xrxN*R9qt>3qj7pPDT0Nqt-mHHUetk9s{tHbCK=kUTtl!eZ1R#_|g0N zK8fbc>2eBSX4z(e2Vx}B$HVORGAq_!=!FDbV??cZ zBd?Bc=>0(^yAj5_H|~quNDmMOr(lB>_=bfC?#8GKdczSSe*A9+XKfS8)Wf{E*EfzE zU7dIeq^r@orHu<|%~RM?+}b15#*q-|ynPDyQ%?|tD%TiNE0E(_*98d6Sol#7_Jxgr z4t83UI>JBu7l#kFD*3!{f-nD}Y}d6R%h>}!5#;Ob93ttfRh8#FJv?deB$A`lB#9b8 zBSEXh4A|zacL~Fmh7~oEq$)Q{s(K`4F&g))rQqjo-d$;#%JN9TK}pi-ZGRQY#HRkJ z1L_nJOQ_;B1~1E_^O0@v#iC#O{4x+LS25ykU@iD^pwX5`kTOMc(&*j5!(O%D#z$sT zl7H`j94XNy*NgKj4ezTZ5h7L7*DH{stZC}`2e;EfVO6XDC*%_POm=2{bzC>j9(92k?0fVplms%@-0XoOscaJ_TnxsU8x!o~6{ zGZ;S57q3R1wn1zy`1su%tu|k;P5R6j4H`L8%?;-!}bPCNe7U zMg(*aiENO(QGyjNAK+q}s{1gZyo3WBOxjTL%_zo-u#w_>GpUTZMY7bCD+@tX!~apq z1rLFs(@6?kfQ;U<53n{xOup`x8{#*RLOe;G?!O6GJYEd;E(Svv*Zx~EpQKqHSuP(a zZxl@z&3O>&k|yf08iz@AdkA~70&=So@!T{Z^$}iFg@0pBqG3)JFf}ySBq0`h-g(BtIETGK}@JdqWfnr<$CV~+>vLSt+6$G%>~ydkdC_z$#H z+Ow^?q|}8cX&EYA9|cnF7=hKbGWiaN9yus9%K$J%TG-DQ)cF2sMvbsK@eUSUJ5p_) z?Pslbs6QnijB-Ggb!3&+8Hzw{6LxEhBvCm)EF6yG48dy~y}1Wu*iPW4t)e!VKG4!zf}#tQyEWZ=csr0VD3FLA z^k@7^9icJRG9e^X(3NdL@uWzzqi@Xu4RB)l`F(C;!YD7|J6HSsaAm2|@r&149?$b? zT82Wi^B>h}87z5&W8uaS1x#uq9}P0yaJu37Fmnlv-UA}tq|IqmpfVjws)ji;gJEip zCTUTUXo&a~J9wS4^lJLep~=X?wF&>#+WH+AoDSx)=D=6L2Dk;;EV7z!=H=o=wE2Kv z=~N{EwySk8f9>+J`#Mri!j>x>tWQFK8v(82XM*mFF)v=gZpbF&P+O(_20FQu#s*te za~Wpy=iFpe<#%rEP<$QPukgw|(>#cgN7AL~))=SD-&AxlO>`+|t(xfgNvL!y1PJNo z()|9`^AKFyi-&HpZ)gR_(yEBb_~mP8LJq1eIW();DXV{|Kr^~jcTbFeECQRfh8iz< zO=l5jz}G~XR;A=p=ec;kSAk4izXr1ewyyyhO+^weWRT{603JaAQYGyo&f41tJe!Lv z03Lm(DXccO%D`dWRo)erAYtwyA|Y=?yDgyB3OFl<*8h&djNbwN_BLs?rV7 zD;YcjTFs&uJ~VOGc?vy4P_hzvI=w?wjGs-OOdYN?t&(Xq?aFZ|bO9&%W^e(r=PR~S zVOgO%=OWl*uT@BX4D~$ByrwXc&>w==&&&y}1NMcAAdaXX7Auk1IfFMx5o9UWrYyOwIfvkTCE~5oe*}90bG@eiZ9Xy@(6ui zFi30+PC0t<`y+Xg{DS_998i>Z4qhIVk%GN}H;hmA-(`K^0jl7dZyf(BP=6TuLI`|o z9-obawqZpQfeEX?36$p{xbO2lf*|b!i?XfC!Bg_Rx}7oL+YZptTsbbdvb}ZGw9^yFIHs#RoK!p(t%7h=fQ#cr<-Rb#6kuWmo)+TMqyJEUdAkAE*IP^mNbW|Nmw8WuxH*K7e8_D0CbHba^&`muOfSNS#E{ z*?*@cpj644?{Uq~M~V`SwXEs>9JWcuEP&}YC+k3EhQ)C;PYwsN29T1_a~MVCWM$xv z)&uW`-b3^U#}Xi?XjU^EwYIfn8m`%+1FagBAYQ%?E|fq(cB0_j%_00^ys91U@IR#{ z+4muz&!$P~&v{Az+Kyo4yh0h;g-nN1Nwi%^UN#P**$U(t(0bbj(rF>w%d;hnbP2{CEQNPVAmco@i7Tsa08GO;|$^|Jh0C%Lv>G&Ub3c7I44 zMn{Lw(Ibf9x=`6HI7HtVBgm9KWHSKtdvCyPsNe5nj|Sec;@R;IVyt*RwNp#zF^shW zlY+0L>|*o=@7D&IggHt_;6v(=zxm6;#|PB*lFGL7iCH*hm zrA+?6f8WBQ4vQZ9-XbJg=JLc+QpyQ4#AC#S%Ef(IwG^R|4-}mFFu>^@*)>Z%jGWSO z@nE84lVMQ7TVQas9L46KJ&t_fftaG~0A3)|&|+aTysP5KnR7@Om8>| zA#}u|p&so*TGyT_3&Bqepl%I`Cco;ZXb8Y748X|Oo! z3NE;=C`C@xj~Pr~{?K2`>sscs(W6CeN=-0Nx1Be^4yUA5+nTQ!=_$a2ZqZPS4NUAD zY{|T%><+XOM@KSDyS0M06dkuSjO=#7mo+tWtKe&qh_zMx(iGQnV=4?Hcx+ zeO-y5S|>}2V1y&Ik4)GIp=cdVv5+Du$>omVT>eha>2lV7pK%L*Xy^e?97ho{Qt~k- zxIDslKtlnl`!hNFHlYWFTSfG#+t|U*DKG*-e7NFk6JRx{E~X^miYNLH_y#SgHpMV0 zFbewv51@l42dnbvol1|c*;R3MbJ6Rx@5uO<(xv`EVdQK&HcG{27AjP=5TECr`S#7^ zngfa6sBe`dSX=nt5MdTE5TBbFJiqCvj27{}6GWcIQob^VjBrfd0!GM0i;+qg>-kP6 z`?c3NVvO-7WGqb66^)+5uEkR`$?SK{O5L_D2OoW`zjtDY@z8Jm*Yx~3*}^6a@0Sre zBGb$GeKSqWfUE0MWl0*xQ$)nDI_gK&MyUWynjgb!S>&?KPSsYQtQjFRw|_VMZt4n1 zvg2X$8}8Qi|9$#>?|%1vWS#cu0uw|0+aoakDnb+iTpf0Lpvy>>%NH~J+vpj7X)Pbet(YhH**N=UMjv6A?e?8QT z^Vm#R@~t2jl3C+S6wx#@3#+XS<9EBItyul^P!TtI-R=C}dTV)Ue+KZ!}s>a}mlGGS#E0=}hE4G)LweBQtIyqs=?CSEgC#U;*Uub;2}yK`uFdo^UA@ zS#F9?q7AVk_Q(HFL-Ge781b(NyOS!z(6#zS9@VzuU|L=yQWVGb6BjhGVusEy=%@~`;O1utVk>0})+tD3#4OoznDT^$%lR3d z$>1xcI+_J3LMb0(eihdUKAkJc?EGJ%uxvm;Hw!=$* z3N3+j>@p5v;N>?AqB5PbqWETBK$9P6)_*-dh!Xg4S2pP>bveIxY^f>kU*98MgkTG+ zou=$~e}6&TInT--vI{Tg{ZWMzbbF8!F529%p=Gm3unU#^3AK3E*Ekr`JFxyGdE>goM8{CMy8Zh)x}VgB^qKRPl(^iN=~2^@xa0A~&12R2vEYsQRG z)z31pW;Mxe&s5?f!38_^3_6vwZ!t5eWPwO6J*Co1WiHq5^cT_^kJG{Mg?CfDf?)Vo z{ul24AJ+dURIj6MfgGZ*mn^FWu1$_PyX+vosBQs9?s7{5Kn=e7U38^?QxE7WOM}## z=4BCjBz2Y1*T^x zf`#*A{>Zi5!t9*2IDC*pojK~O+Mv*s#Jam0Z`|S6 z?BSO+|FbOzj(#Mo2({}VHw$Mg>LOE_=nzh*YXO<8(L3_XA3@au1FfZbB;2S;NM>*j zi85#Re1_3E*&aN28XPFHS7f*Dp_1(INnxNAV1OrJ!SMaodIthNt^(u9M~JGvnL4Nc z12)f6NHQt!p=V5LXVDOqy)vclLBT>)(ax=|2yC4c8U`7Yg$3Gad!eKum~$S@Xb9LQu0Z!gMnR|@|8cX$6egh(L@R-ii88BjG)Ftb%umHZ zVi_01a;zfFlW(p3#`pZlE`ua>ux|Hyh)KQ0JWQu^vfpipKgxgmEM{86_RQ?@L zSu4XJOdR2`m(S!<1_D6G*6W2N6}+D;l2*hJrmB436BOx>fGXjue2cR8>e~^J8^~=3-wcAe|F3KTxGh02p7OF}*zzx) z3b!0ipjZujd4w1o0-=LSUktxipvF32$#`GpeoK>_*^BzIQWhfvRc3OGOJyQQ zu>0ntmB5d~(09JN$JyP98p$*mhw8Vqq&2!t;x%X3eYaz~+8h3*eM6VyBkl>5t3iSO zuA4zSB{u;4tr28vd_i-A6UZONH<%kX6P$48Vd%rB-Zr0@2|29pL-$Fw{`JK(s29tc zjkKMudp&@o$_j2=geieC;D<~pvn)b2zXL7^WeY2395$l%9$uv}AfiP? z_pi_q$f3P7 zAB@Z1x+YRiOmAm#wSmEdHD+_tqWf51P=8CZJkh-X0jD-rGw#rQC|eOvR^PlInU%r< zQ6SB6A0#B`QaDYmUDUF8aM(ZvepE=*+)b@HXc%+}9ZKJ&+Amz*PXT$2;QW9p~ zcn(6CqI4e5YOA>O`$`HrCbg?w&lV!EhMUXW66D%J=0Ucplo5-qrty6_GGa%E`CQCv zwMId+GyFPmfUgOGB}ynAZ87QB3PO-KRjxA=k^|g&idz#sm3ggIZUXitncXl-iJ#DH^3PEl^lg?Txbx}Wp6XXp6qn8;7kp5DJJJru~O;UYxLxo#Z zEOdJFgU;*UJ9VsKOE#LDOV0Pm&0LJVA)?;n%4VH#r!$1dI+40I&rQF#!nf^Mw;wsx z+|}-3L1N?|QDSlVevVG=0Nl3)CWAGm6*Zi&ene9UY8e-221Zb*l0W|*mDR#< z5Jp->q(ObpGVN|cnH4MOb3A?NRy7|sMctBBaf7pcEsure`mAs;#>B%ACV;TzWJx%hik$9n-2opP^k3%@hT=HDw0z0b9Rz_3~}@OV#Zum+S9ORYi)*k#NzUN8Zs` zBnvyFR(fh9)v$oOUx0{2u7EG7M6RID+ELZOa@XBb*AV1Ic*+ZZ6=MHk4McTjDAhv^ zA(QA~@~LFKwMmZ`mZ|(8`D3JbW}(J~_fK8!`L)x&GfX!icTffqj4h?eO5gjXAFxjlrb z3eqXT`12qFE&B3JBX=_whh;r-)7n7HLGT8|48=<;~>2y?AZ@px` zUBrBC{y3qM0pWM(_dO!UnE0vR{ZRFwed_Fa!FT{y^HgxfIp^;6{XX{J#jcFP(u|_Z zvanAta?yXLhCRZKNU#4S=*3alRt8^-WeH*b`fDkAdpZ_S)5b%O++nXLe$;e?|7^b}0P!RL%9R8)_k>nIj8G9ITj`XVMw)F?@wQ*2TN6x_X$0wJc@N{;A z4v0ZWb{?o;S<}DXmb)-IACIXGucm!t7XcmuX9biDxi@pOWjH#sjL|f0(@wuxkXjdHdRH{@{6r@4(cMcC_lr-jorPdZn3lnWz zQ&{6sLf9vZwxY**prn`YEcQdP9fr*$wr6zU!iKDICY@D6jIjrug*_APkN+g+Pg|wq zCB30fiW^^S4kjD>LFTo(*M$u&p|~vc`MtHYva4DWQg*2zdlqc&nSg^V%T&%30cbo! z`S4(@eNab7ONI_$D6w*rC@xwcn4MQ_NpxV&f|7#LTPw|GRvFq$mEiitkLt5F1mA)F zVT)l@lwQxwbDX=j4DRY9ojdJmp*2tsG)B_sSVF)qkTu8v51+$RuH9TYp^A3?m?p6# zYC&CL9HnKuv&6o^Gz-e&#{qW{2TTCHeRn&8yG(QI7jO!Er&fo00S@;#XD z?>OH9@R`L|K-rOnIRCDxLLpV9whXYLD#xto28fBS_Rmgw75z8(rdmhEht}Zw zV7(hlnX{Cu16Qn33~*)e%`eN zw~hra^@pBSJ8WWSvL#f13TbHXOsOwa0wjYLGyTn4~4Vyeq${1*<)>& z8~?l4Axy6*QSK-&>L6zZ8g*r+odu%9yV1&Ls3C+pubX^cV&x#AO$WWJBFcTOOs-3= z5jAup9pbV>*JWG3lBTzA4wI(Og<>7RTuJyBv>TT8P8W>!5D00c`_~tVB3up!H3W%+ zm9dIv$H{OUVz+3b2{Bc(C@c^-`+=A!g8))yXLZq(z$u+Xc) z%#Q)${hbd!=Uk!XmEX2d9u8crMqIT78aHrR4Pdm?RtA}Sa`P^OobU4bwt9M3Y^V2c z5Wf71_3yB~h_Eb$kcW8|7{vC3Ov4J(jcg+blm(o;7!KV)s-$=t$yO3%7hRc8m=$$D z7*r1`!U6eQf_VC)Zl^)9b5LiSh0z>s1+O-AUk)I3I*TLsR^T!Rg>aN;2dyrD>29|# zH@6oEa!22`Q>a}W46MMb+k|^FyPzUa!kM6sgI!z#iXr5r88|YoG<$``fWN+ze(UAT zMK3)`8MK-PW++tKlg$~HN|YkU6yu%8MGsU;IPM+e4R)L`M}Pi0A@nG~9eF>RQ193{ z{{j1em*r|K6+EYYz5~Ok0nyqFSOif8@f5Gsel~xIr+P=isk=U@(q8}v5zE_SUQxLIj}b;P ztMliIQj4bw-n7a()89t}?OG?^kkF{%4_E^POqA#dn~8UIqjK&kTtaOE%kBM%8KZCK zUzepWoEO>Q&gL$J{I~1vFy3D@$ZazV5&R^>cMFaLx{&4i($yu0ao2R&>S+%v>@X1v zqZC23d@Y}pF3i1WEPO2*Hwl!5_Q zX!IU`4oGIhh$emUY5f=*q#{O`I0#d3v`?bE;iwEOvrw{P3g3OqjK>f&Ojkl?Q0kPl zWCZ7w&#D-lc6-VlN#sP)L7hzpC^DN!E*Wjw;EqYppS6X1vuWku+5ykVb{AnSkh<)9 z%~#kQ`8o9Y8&pgUNE@z~^q; zRgQHq>kz>Seb;rIFsAanNsp?VvjM|^Yx^O zF02VN8s-iRO*gRn@uW5+XCmnemHW}JmbiZ3S_z<{_#E5_YJ3+xe|}A&4i#jB4Ey=t zIKSPL<*54PXC-eF@90w0{w$CR^~fCcRQw|b!DTKx+DQ6K`sF|@C_jW_gK4QOx|W(-Cdh-Xdv;<%oQ+5_RlL-z!KydHukkbs!Rz%? z;%w}tOoFgRVr4tq&DLC;>JCWoR*ck|2wvNP)5v@@n%yx!JGT%LjIN{~Rfbe)I>wzG zGU{v8kQe|dZ+(gewS3x>4z855@Z%NiP|fNWL&jD>a~E#o##c~LZ1?dghQwRIe={KJ zklpR~MMy!E1#-VRz*EA46A9R_%<6}%6Z&w6?5PjhUAs5eYa~@jna88L`H7ncd*BM^ zgpiwbN$Y8YXnK(FPi=A%mFX8t%bGM2HMdXxcuZ{2jL~jUHQ4|N8 zP!;$k2T1+A;s1ij#j1afR=X!H3(4OGGQ4$05}BHpK$&X+eJQAX*C@ z=U@lu4VrFZzSl$~%m$CJOY{~9J$#_ZxlFe=QY_xiC;U4%K(Rkk$bon6&8We_uqX!S59G#uDf?N`z_E=rlU(p1n^`;o9C z>qC(QAwW;Usf^SG!lsq1!DN5!mtq7YGY}&rp(B~*;$eW>6qj3rfI)ciLGL<&%Q*ow zvM(KBWYNCUm+rJT`)spY_*Ty#E#XAnJy+*3m3*Tw%=C+6l^#3)c~LgmIEpD5KSnk8 zRF{xpDo(?_?_il;hGhOuf@_?f3t}^6i7*cQ$>It_C05JwY#v1vCQ{(D|HT0<;;lff znCRq(-b#EqeUi0m8}t48hV51Y(%z6ChFXi4YXAu#29}^CQj{A6d#!(m*wDe*ebMBp zA$XM(C0VFpZ`QFyj7yS_7O>T@?WkZ~qr!ij+6eIBMVysm0RKfGY8`CX-1k8vI79?< zwF~ry2jt~&Z*S;rlbE#M7GL)_?J-Y)Ode9J>Bj}ke)^d;ArFVSX0g`#`ns@VAy(yw zcra~BzH#v-@E0-V0z20B@3t`bm~i=k7S3eLdj6LEwB2W-XsQTmEAm-OC73tv#Zb(Z zb}v?de=fK9V_XB-Iid>@ifLzy;?$1E`jKAyXVf1C(LMZ^s)dnx{>1<*J(i6lAr&g? zszb0Lp`_*&8)Pt2&HMmYpJtgR7@F_$wbPlueS(f{|JsTai?Fr9&6!bLUTsEk;!Zbv z7pzyr%vT^}`KkQDe2G_e4QAh@F-^F9QjhKLu*stF+nYNs#-#0UiRPT^+CNfl>Zs>9 zeKoRHdz_pc9)r#))fZAeZMT$8bTqz%W0@vV`M2NAZ1T+wNK^rV!Ynl?8kFtYbc_^U zbEum?&}MbL&`<7asCx`0A4e=Qx>ltQ_HwO;EwIo{`n2DoWCI8szf!=OT6|{`55SM+ z?C^4y2Ya5KTXSdl?wuoB1+%o2ebT83P;Jd*k2BZ;7u!>ZGmq|}5a+BOt-#Dpvec9j z0F0qogbTa9q}h!qAro&gKGSQ>LvDQsl$ zp4GsP{z4TIE9V);W(=$A)3mgOHwR@b;7(;AKX<(~#{iMQ%os#L*m7hMO+-FfpbU!$ zsBopQpvV`eRZx+|;IGt`?gQ-3XtKwjlX7Nj+0PM7`w3D!DUTKEX?z|iUnjN*I0VrU z&qdo374+<={@H68>}>^H4F{&MpH_%b2Pa(>{b&=jhIj;u?hTDps@xi*j8yx6Iuy8F z_Lga**H$A7dT9fyEqib4#h?wOqOv@-HIk)JcHY2H-=-6SUM5+ z*`UPhQPsQR?KwC*A&8#XV$GTXSgV@dIP9z~25x&<3WPW%y%GP2iguadw44YYX^Y;_ zinRvLeT&`D6{Gcc=<|SYA70o8k`-Urvrw-K-bz>ydrUcSL5DC^kt|guLrHj_YJQgP zTuY}*Q<|F+D|ypp+WwO=?ce3>(-gIs&Fs2|iTde(%qp)NZ?Q%rLF~qr=u<^zqsax& zOh={5zo1swBF!rzEv|g*vkK;JK6=9t=KE(abK=M^Jj>G*f9}3c@r`JUQtochnY)(u zO_l6B3-KXiE(1V6T5b1zyR@!1xaouPJ2hD*T8gFgK_fw_apnL7_!GjLigm6?o=n>H z%@qk?4lupHXL#yp_dKeN zpISh+xnxr}KWmumW)Y|Q=}gtgcQ(V?+;%fGVZG_Mf8tCRjOa?=3m-GpPAEa0a-N(5 z)VcUZZ-TWio1Zm;+h7Kg9+CBjDAK6&vOs?nlvSiEW# zZlmIs^depU{r<1isWb`upaQitiru%z)B*!bznmJ;d z!u*;PM|QvI(>y}DgWI2~{7B}vv86R1(wvlXtpA2nTU+V{CKNP&qi15rpfXKXhDCYs zQUydHe{OnSDQN{zVsr|Xh%IM?*Td;)pb{s60GBXW58!M>vzS$cF)pQPm&KZTzgDCK z|I62!8J-GJ-Q_W0r-UJPKn#~Bsmr})@j7zBpSO6} z&c+ZY&7Rtu{B+UV&KhXv^l4r2#>+Dy{nfZBf_lKJjR2zh@N-RnCgJMU$b7?E8D=U} z_@$q)@)Uu7P#;(_GB4}1Q>?@h&-w1IF1&cqW!b*&?ctu~LYG%NUNqHe;2WDmjzG=F zxQ6Ad;`4k&3)o#W$nK88p0-7t;~tO>L$bT0t%?F&Wfa8f1YOPBJ8Z`5>iVP2_Ul$1 z&`a#;0&rfm$1b#YfrkL~t$cpAV;+h+d$a}w;$c5)6U?|)6eF=KBj)aZ*r_Ej zKj9A5l@zGl;sLh9c%v`OkwdCxp1_!2^Jo$055`u1IwN{}JbVL*#}Dd{`L|eBc1e$c zC$b9|c|5uY)oYWKY~Vp?(N%}^$93J@J*XpDCI>s=i15eORR`Ky%#2Y$RTb{7HH>2(6A$C`6p?G)iQ%fLCwqrQ;(qKnG-7?dPXjC zN=3G^LDepPohB7JKET;G+W7;fqJ~H;hkfJu+T$be_OpZIiuR|!-{@I!_5X2SY{P#l zwnpD|{2(&$bGA;6t}`Ex9Gqceciu+YUcd9IqAU|c^vTvRi1is2TX_xfBAEGU+EM4T z*PqD00MeSU$G)?4TiEJAsj=W5h%N?_#lmP&WrlC)!4-yIa%8ni({@YDR@Y}}0AN$G zTZgARPM?eaZ@!rnxti0p4b(%@Xlg6DhJb3;4p`f0AcYc|j4qj53wj|`E+b+$*vAWV zBUt^C29IGmDv27UpVl7n6fq9aQNKnJdc|4Bxg4ET$m^Rq?&8S1$?;coM{sUz8^)tUq~dx&DmE@NHYoJ?iPEU_pYLJH2Zf z{}b6c?bx~a&2uBu245C5*^!n)F-{p^V=E#hAy6X??J0l5LsqVY-t+)Q#ldI>CdQjD z+6i?|z3H=Z&9MD8>a}Ch)h2OD{Qc0(SZvPu&88SfCbV#Z0KqJnx;;Ra&HXYMTA8=& z@l#?z|M2li<6nRj^I{K#DDd_A@BJUL-Cwp^(7@g2vKd5^j}VT}z%3SmzyJMn{Uz`Z zqhsGqZLj9+CQbmP5$IOf$7t1+;+?P-C&?YE#lQZm9K*H~unhYETA1iju37nm2X?zd z{%-f6c11e?bOMcn7I4!IG7PhfN|ZNifVlJ{K-FdnKY&=;8CbcsEjGuTMx z`ZZ&SKJ@tdIq+b-c1)e5H`hYGJg7Y8gr{@%pg8W|Umwi;M<@gtZ4$rqErrEl6~3zd2n zl)p^tXhxEdyKc-t@uxlASHem^FLe|sd^$3Uy4aPE&vqKjzd3PqoOS8JY~EIK7(rB^ zDVrcc7RtQ^=F7#yhx(dAOBdQ=a&NgvgP8v2bHe+Z-&YlPWQ`E(iK>vq^vIYkSdb+XwXhhE zy8KplQ&J(CSSe3tgR=d9n0m)3OS&d%@Rn`cwr$(C?e21Q+32!u+v>7yb=h6EYwq)Y z^R1b`cja9xPv*%J5j%G5J)?mFHp}dgXw4MGr&UUJ#TYAdCw$KR%eI&$j;C81SB;YQ zzu#DqaVbtTC2UOxeH4SLu%;7{4<%(9G2D_3#G1%&+DTF?qn>ZCcAuI_G^HaMD)*IBEL9ors!%qj5Pbn&$ z0)edLdAua!zt{n%CGxQ-7hs))AW4CC@qzb~W$${zyMz9SxWZQWr{xQX%NTg_#K~Jp zu|cY9+K1{IRx${9_X`;0xu9hXl5tpc0TK-SORAJ|3emj%k*8q&YR2C)E%PrnyFZ2< zU$|VP5|Y)Rrly8x7hJg37A1r)V3cEdPxB)g@?4^ane0Hvm?U70uX6Ob^6CWq8$J94 z2<0hTj+H5mRb2=za`K`eM0)52$qH1GN5iZ1h=Gnn#|-37N)?>sYI1PO_=#$zL&1~L zat)r!3GBG}7+1wc6cFDV8MyMWRA*lib;CU0kD!#4pwmMJYK15c?>6iv=?~NTG_(%M zlMubX&X`W>GmPPh>DOMpHqK;@V<3zJi=3Qz|BVMUH}{t5HtcQ|-;!ybKx~|#YgjCN zTdw}27tkJs`Dt2S02TY@HduqH(c>!GG#v#WxXFVX)|GTylQuQv%SY)1-LoC5^!lmh zDzqC^Tr_YH5*4G``cjj3JkomYuwpaBB2LBK(w1*fTlR@CuYkGTlnz(um;M|Ko9L(wnv~?%T#JUr(MqnnQ zPZitT2TlHdfBja^Zqv|-_t4CS$>zdwv5a6|l-x_t8mR~_9Z)&JnS*N11kD8VN9jHD zkdCI<$bh~_#0%#S?C|eOC}S{-sBfbL)jpV~x?waICz1lpiBB)US~`WD*5RZF$S{F; ztjPTs*%{zhjZZ02nvHzu6m~c*Eh_pk990eCnnsiPCKMYq_V40P_0pkfkaPBg5_x3)-@n?SfZ_>VV z%E7vst*1UKI2ormNN`(FN&{w3#`r{#VGutnkZ2qyP@-RYp5I#mR$6i1q`|#jttbGFmD9ji%`6#u)*;u4U}$jEZ@T@n-(H8^>

d|E+Sfcp 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πOGKPjq0p8D6U<{5%6Be-nmfZDJQ^$ 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

e$_Gku99jrq1q>7~F2n+#|FUn~+v|9(C2t^@ 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%0A>IV(Ll8JFl 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

BsDT`Z2a6!{5{* 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 z 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 z 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

YJpR^h6(y8W#v(6qw=xFCqT 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 VcpjdI=i#~A^S_ +

code or terminal output + +```cpp +int main() +{ + return 0; +} +``` + + diff --git a/local/recipes/libs/vulkan-headers/source/.github/dependabot.yml b/local/recipes/libs/vulkan-headers/source/.github/dependabot.yml new file mode 100644 index 0000000000..b25b0ebdc6 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/.github/dependabot.yml @@ -0,0 +1,12 @@ +# ~~~ +# Copyright 2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# ~~~ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 3 diff --git a/local/recipes/libs/vulkan-headers/source/.github/pull_request_template.md b/local/recipes/libs/vulkan-headers/source/.github/pull_request_template.md new file mode 100644 index 0000000000..8090943bf9 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/.github/pull_request_template.md @@ -0,0 +1,18 @@ + diff --git a/local/recipes/libs/vulkan-headers/source/.github/workflows/ci.yml b/local/recipes/libs/vulkan-headers/source/.github/workflows/ci.yml new file mode 100644 index 0000000000..ff6c659e7c --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/.github/workflows/ci.yml @@ -0,0 +1,132 @@ +# Copyright 2022-2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +name: ci + +on: + push: + pull_request: + +env: + CMAKE_GENERATOR: Ninja + +permissions: + contents: read + +jobs: + cmake-unix: + runs-on: ${{ matrix.os }} + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + strategy: + matrix: + os: [ ubuntu-latest, macos-latest ] + cmake-version: [ '3.22.1', 'latest'] + steps: + - uses: actions/checkout@v4 + - uses: lukka/get-cmake@latest + with: + cmakeVersion: ${{ matrix.cmake-version }} + - uses: ilammy/msvc-dev-cmd@v1 + - run: cmake -S . -B build -D VULKAN_HEADERS_ENABLE_TESTS=ON -D VULKAN_HEADERS_ENABLE_INSTALL=ON + - run: cmake --build ./build + - run: cmake --install build/ --prefix build/install + - run: ctest --output-on-failure + working-directory: build + + cmake-windows: + runs-on: windows-latest + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + strategy: + matrix: + cmake-version: [ '3.22.1', 'latest'] + steps: + - uses: actions/checkout@v4 + - uses: lukka/get-cmake@latest + with: + cmakeVersion: ${{ matrix.cmake-version }} + - uses: ilammy/msvc-dev-cmd@v1 + - run: cmake -S . -B build -D VULKAN_HEADERS_ENABLE_TESTS=ON -D VULKAN_HEADERS_ENABLE_INSTALL=ON + - run: cmake --build ./build + - run: cmake --install build/ --prefix build/install + - run: ctest --output-on-failure + working-directory: build + + windows_clang: + runs-on: windows-2022 + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + strategy: + matrix: + compiler: [ clang, clang-cl ] + steps: + - uses: actions/checkout@v4 + - uses: ilammy/msvc-dev-cmd@v1 + - run: | + cmake -S . -B build ` + -D CMAKE_C_COMPILER=${{matrix.compiler}} ` + -D CMAKE_CXX_COMPILER=${{matrix.compiler}} ` + -D CMAKE_BUILD_TYPE=Release ` + -D VULKAN_HEADERS_ENABLE_TESTS=ON ` + -D VULKAN_HEADERS_ENABLE_INSTALL=ON ` + - run: cmake --build ./build + - run: cmake --install build/ --prefix build/install + - run: ctest --output-on-failure + working-directory: build + + cmake-unix-modules: + runs-on: ${{ matrix.os }} + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + strategy: + matrix: + os: [ ubuntu-latest ] + cmake-version: [ 'latest' ] + compiler: [ clang++-18 ] + steps: + - uses: actions/checkout@v4 + - uses: lukka/get-cmake@latest + with: + cmakeVersion: ${{ matrix.cmake-version }} + - uses: ilammy/msvc-dev-cmd@v1 + - run: | + cmake -S . -B build \ + -D VULKAN_HEADERS_ENABLE_TESTS=ON \ + -D VULKAN_HEADERS_ENABLE_INSTALL=ON \ + -D VULKAN_HEADERS_ENABLE_MODULE=ON \ + -D VULKAN_HEADERS_ENABLE_MODULE_STD=OFF \ + -D CMAKE_CXX_COMPILER=${{ matrix.compiler }} \ + - run: cmake --build ./build + - run: cmake --install build/ --prefix build/install + - run: CXX=${{ matrix.compiler }} ctest --output-on-failure + working-directory: build + + cmake-windows-modules: + runs-on: ${{ matrix.os }} + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + strategy: + matrix: + os: [ windows-latest ] + cmake-version: [ 'latest' ] + steps: + - uses: actions/checkout@v4 + - uses: lukka/get-cmake@latest + with: + cmakeVersion: ${{ matrix.cmake-version }} + - uses: ilammy/msvc-dev-cmd@v1 + - run: | + cmake -S . -B build ` + -D VULKAN_HEADERS_ENABLE_TESTS=ON ` + -D VULKAN_HEADERS_ENABLE_INSTALL=ON ` + -D VULKAN_HEADERS_ENABLE_MODULE=ON ` + -D VULKAN_HEADERS_ENABLE_MODULE_STD=OFF ` + - run: cmake --build ./build + - run: cmake --install build/ --prefix build/install + - run: ctest --output-on-failure + working-directory: build + + reuse: + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + steps: + - uses: actions/checkout@v4 + - name: REUSE Compliance Check + uses: fsfe/reuse-action@v5 diff --git a/local/recipes/libs/vulkan-headers/source/.gitignore b/local/recipes/libs/vulkan-headers/source/.gitignore new file mode 100644 index 0000000000..9dc6d8dcab --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/.gitignore @@ -0,0 +1,16 @@ +# ~~~ +# Copyright 2018-2023 The Khronos Group Inc. +# Copyright 2018-2023 Valve Corporation +# Copyright 2018-2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# ~~~ + +# Python cache +__pycache__ +*.pyc +build +cmake-build-*/ +.idea/ +.vscode/ +**/.*.swp diff --git a/local/recipes/libs/vulkan-headers/source/.reuse/dep5 b/local/recipes/libs/vulkan-headers/source/.reuse/dep5 new file mode 100644 index 0000000000..d6ce00b460 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/.reuse/dep5 @@ -0,0 +1,15 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Vulkan-Headers +Source: https://github.com/KhronosGroup/Vulkan-Headers + +Files: registry/profiles/VP_KHR_roadmap.json +Copyright: 2022-2024 The Khronos Group Inc. +License: Apache-2.0 + +Files: registry/validusage.json +Copyright: 2018-2024 The Khronos Group Inc. +License: Apache-2.0 + +Files: .github/ISSUE_TEMPLATE/bug_report.md .github/pull_request_template.md +Copyright: 2022-2024 The Khronos Group Inc. +License: Apache-2.0 diff --git a/local/recipes/libs/vulkan-headers/source/BUILD.gn b/local/recipes/libs/vulkan-headers/source/BUILD.gn new file mode 100644 index 0000000000..07aa5ad9a5 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/BUILD.gn @@ -0,0 +1,76 @@ +# Copyright 2018-2023 The ANGLE Project Authors. +# Copyright 2019-2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +import("//build_overrides/vulkan_headers.gni") + +config("vulkan_headers_config") { + include_dirs = [ "include" ] + defines = [] + + if (is_win) { + defines += [ "VK_USE_PLATFORM_WIN32_KHR" ] + } + if (defined(vulkan_use_x11) && vulkan_use_x11) { + defines += [ + "VK_USE_PLATFORM_XCB_KHR", + "VK_USE_PLATFORM_XLIB_KHR", + ] + } + if (defined(vulkan_use_wayland) && vulkan_use_wayland) { + defines += [ "VK_USE_PLATFORM_WAYLAND_KHR" ] + if (defined(vulkan_wayland_include_dirs)) { + include_dirs += vulkan_wayland_include_dirs + } + } + if (is_android) { + defines += [ "VK_USE_PLATFORM_ANDROID_KHR" ] + } + if (is_fuchsia) { + defines += [ "VK_USE_PLATFORM_FUCHSIA" ] + } + if (is_apple) { + defines += [ "VK_USE_PLATFORM_METAL_EXT" ] + } + if (is_mac) { + defines += [ "VK_USE_PLATFORM_MACOS_MVK" ] + } + if (is_ios) { + defines += [ "VK_USE_PLATFORM_IOS_MVK" ] + } + if (defined(is_ggp) && is_ggp) { + defines += [ "VK_USE_PLATFORM_GGP" ] + } + if (is_clang) { + cflags = [ + "-Wno-redundant-parens", + ] + } +} + +# Vulkan headers only, no compiled sources. +source_set("vulkan_headers") { + sources = [ + "include/vulkan/vk_icd.h", + "include/vulkan/vk_layer.h", + "include/vulkan/vk_platform.h", + "include/vulkan/vulkan.h", + "include/vulkan/vulkan.hpp", + "include/vulkan/vulkan_core.h", + "include/vulkan/vulkan_screen.h", + "include/vk_video/vulkan_video_codec_av1std_decode.h", + "include/vk_video/vulkan_video_codec_av1std_encode.h", + "include/vk_video/vulkan_video_codec_av1std.h", + "include/vk_video/vulkan_video_codec_h264std_decode.h", + "include/vk_video/vulkan_video_codec_h264std_encode.h", + "include/vk_video/vulkan_video_codec_h264std.h", + "include/vk_video/vulkan_video_codec_h265std_decode.h", + "include/vk_video/vulkan_video_codec_h265std_encode.h", + "include/vk_video/vulkan_video_codec_h265std.h", + "include/vk_video/vulkan_video_codec_vp9std_decode.h", + "include/vk_video/vulkan_video_codec_vp9std.h", + "include/vk_video/vulkan_video_codecs_common.h", + ] + public_configs = [ ":vulkan_headers_config" ] +} diff --git a/local/recipes/libs/vulkan-headers/source/BUILD.md b/local/recipes/libs/vulkan-headers/source/BUILD.md new file mode 100644 index 0000000000..a9ccd98fed --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/BUILD.md @@ -0,0 +1,46 @@ + + +# Build Instructions + +Instructions for building this repository. + +```bash +git clone https://github.com/KhronosGroup/Vulkan-Headers.git + +cd Vulkan-Headers/ + +# Configure the project +cmake -S . -B build/ + +# Because Vulkan-Headers is header only we don't need to build anything. +# Users can install it where they need to. +cmake --install build --prefix build/install +``` + +See the official [CMake documentation](https://cmake.org/cmake/help/latest/index.html) for more information. + +## Installed Files + +The `install` target installs the following files under the directory +indicated by *install_dir*: + +- *install_dir*`/include/vulkan` : The header files found in the + `include/vulkan` directory of this repository +- *install_dir*`/share/cmake/VulkanHeaders`: The CMake config files needed + for find_package support +- *install_dir*`/share/vulkan/registry` : The registry files found in the + `registry` directory of this repository + +## Usage in CMake + +```cmake +find_package(VulkanHeaders REQUIRED CONFIG) + +target_link_libraries(foobar PRIVATE Vulkan::Headers) + +message(STATUS "Vulkan Headers Version: ${VulkanHeaders_VERSION}") +``` diff --git a/local/recipes/libs/vulkan-headers/source/CMakeLists.txt b/local/recipes/libs/vulkan-headers/source/CMakeLists.txt new file mode 100644 index 0000000000..c19bea3eab --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/CMakeLists.txt @@ -0,0 +1,140 @@ +# ~~~ +# Copyright 2018-2023 The Khronos Group Inc. +# Copyright 2018-2023 Valve Corporation +# Copyright 2018-2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# ~~~ +cmake_minimum_required(VERSION 3.22.1) + +# NOTE: Parsing the version like this is suboptimal but neccessary due to our release process: +# https://github.com/KhronosGroup/Vulkan-Headers/pull/346 +# +# As shown a more robust approach would be just to add basic test code to check the project version. +function(vlk_get_header_version) + set(vulkan_core_header_file "${CMAKE_CURRENT_SOURCE_DIR}/include/vulkan/vulkan_core.h") + if (NOT EXISTS ${vulkan_core_header_file}) + message(FATAL_ERROR "Couldn't find vulkan_core.h!") + endif() + + file(READ ${vulkan_core_header_file} ver) + + if (ver MATCHES "#define[ ]+VK_HEADER_VERSION_COMPLETE[ ]+VK_MAKE_API_VERSION\\([ ]*[0-9]+,[ ]*([0-9]+),[ ]*([0-9]+),[ ]*VK_HEADER_VERSION[ ]*\\)") + set(MAJOR_VERSION "${CMAKE_MATCH_1}") + set(MINOR_VERSION "${CMAKE_MATCH_2}") + else() + message(FATAL_ERROR "Couldn't get major/minor version") + endif() + + if (ver MATCHES "#define[ ]+VK_HEADER_VERSION[ ]+([0-9]+)") + set(PATCH_VERSION "${CMAKE_MATCH_1}") + else() + message(FATAL_ERROR "Couldn't get the patch version") + endif() + + set(VK_VERSION_STRING "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}" PARENT_SCOPE) +endfunction() +vlk_get_header_version() + +project(VULKAN_HEADERS LANGUAGES C CXX VERSION ${VK_VERSION_STRING}) + +# options for Vulkan-Headers and the Vulkan-Hpp C++20 module +option(VULKAN_HEADERS_ENABLE_TESTS "Test Vulkan-Headers" ${PROJECT_IS_TOP_LEVEL}) +option(VULKAN_HEADERS_ENABLE_INSTALL "Install Vulkan-Headers" ${PROJECT_IS_TOP_LEVEL}) +option(VULKAN_HEADERS_ENABLE_MODULE "Enables building of the Vulkan C++20 module; requires minimum CMake version 3.28" OFF) +option(VULKAN_HEADERS_ENABLE_MODULE_STD "Enables building of the Vulkan C++20 module with import std; requires minimum CMake version 3.30" OFF) + +# set up Vulkan-Headers +add_library(Vulkan-Headers INTERFACE) +add_library(Vulkan::Headers ALIAS Vulkan-Headers) +target_include_directories(Vulkan-Headers INTERFACE $) + +if (VULKAN_HEADERS_ENABLE_MODULE) + # check for compiler support + if ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND (MSVC_VERSION GREATER_EQUAL "1941")) OR + # clang-cl doesn't currently support modules + (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" + AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "16.0" + AND (NOT CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "MSVC") + AND (NOT CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS STREQUAL CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS-NOTFOUND)) OR + (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0") + ) + # check for CMake support + if(VULKAN_HEADERS_ENABLE_MODULE_STD AND CMAKE_VERSION VERSION_LESS "3.30") + message(FATAL_ERROR "Vulkan-Hpp: C++20 module with import std requires CMake 3.30 or later") + elseif (CMAKE_VERSION VERSION_LESS "3.28") + message(FATAL_ERROR "Vulkan-Hpp: C++20 module requires CMake 3.28 or later") + endif() + + # set up Vulkan-HppModule + add_library(Vulkan-HppModule OBJECT) + add_library(Vulkan::HppModule ALIAS Vulkan-HppModule) + target_sources(Vulkan-HppModule + PUBLIC + FILE_SET module + TYPE CXX_MODULES + FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/vulkan/vulkan.cppm") + if (VULKAN_HEADERS_ENABLE_MODULE_STD) + target_compile_features(Vulkan-HppModule + PRIVATE cxx_std_23 + INTERFACE cxx_std_20) # only C++20 is required to consume this module + set_target_properties(Vulkan-HppModule PROPERTIES CXX_MODULE_STD ON) + else() + target_compile_features(Vulkan-HppModule PUBLIC cxx_std_20) + endif() + target_link_libraries(Vulkan-HppModule PUBLIC Vulkan::Headers) + + # Clang 16's module support can be broken with extensions enabled + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "16.0") + set_target_properties(Vulkan-HppModule PROPERTIES CXX_EXTENSIONS OFF) + endif() + + # set up fallback targets to notify about name deprecation + add_library(Vulkan-Module INTERFACE) + add_library(Vulkan::Module ALIAS Vulkan-Module) + target_link_libraries(Vulkan-Module INTERFACE Vulkan::HppModule) + set_target_properties(Vulkan-Module PROPERTIES + DEPRECATION "The Vulkan-Module and Vulkan::Module targets have been deprecated by the Vulkan-HppModule and Vulkan::HppModule targets respectively and will be removed at a future date.") + else() + message(FATAL_ERROR "Vulkan-Hpp: C++20 module support is requested but was disabled due to lacking compiler support on this platform") + endif() +endif() + +if (VULKAN_HEADERS_ENABLE_TESTS) + enable_testing() # This is only effective in the top level CMakeLists.txt file. + add_subdirectory(tests) +endif() + +if (VULKAN_HEADERS_ENABLE_INSTALL) + include(GNUInstallDirs) + include(CMakePackageConfigHelpers) + + install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/vk_video" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/vulkan" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + # Preserve source permissions https://github.com/KhronosGroup/Vulkan-Headers/issues/336 + install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/registry" DESTINATION "${CMAKE_INSTALL_DATADIR}/vulkan" USE_SOURCE_PERMISSIONS) + + + set_target_properties(Vulkan-Headers PROPERTIES EXPORT_NAME "Headers") + install(TARGETS Vulkan-Headers + EXPORT VulkanHeadersConfig + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + if (VULKAN_HEADERS_ENABLE_MODULE) + set_target_properties(Vulkan-HppModule PROPERTIES EXPORT_NAME "HppModule") + install(TARGETS Vulkan-HppModule + EXPORT VulkanHeadersConfig + FILE_SET module DESTINATION ".") + install(EXPORT VulkanHeadersConfig + NAMESPACE "Vulkan::" + DESTINATION "share/cmake/VulkanHeaders" + CXX_MODULES_DIRECTORY ".") + else() + install(EXPORT VulkanHeadersConfig + NAMESPACE "Vulkan::" + DESTINATION "share/cmake/VulkanHeaders") + endif() + + set(version_config "${CMAKE_CURRENT_BINARY_DIR}/generated/VulkanHeadersConfigVersion.cmake") + write_basic_package_version_file("${version_config}" COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT) + install(FILES "${version_config}" DESTINATION "share/cmake/VulkanHeaders") +endif() diff --git a/local/recipes/libs/vulkan-headers/source/CODE_OF_CONDUCT.adoc b/local/recipes/libs/vulkan-headers/source/CODE_OF_CONDUCT.adoc new file mode 100644 index 0000000000..bd635bb915 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/CODE_OF_CONDUCT.adoc @@ -0,0 +1,10 @@ +// Copyright 2018-2023 The Khronos Group Inc. +// SPDX-License-Identifier: MIT + += Code of Conduct + +A reminder that this repository is managed by the Khronos Group. +Interactions here should follow the +https://www.khronos.org/about/code-of-conduct[Khronos Code of Conduct], +which prohibits aggressive or derogatory language. Please keep the +discussion friendly and civil. diff --git a/local/recipes/libs/vulkan-headers/source/CONTRIBUTING.md b/local/recipes/libs/vulkan-headers/source/CONTRIBUTING.md new file mode 100644 index 0000000000..584f75e3d5 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/CONTRIBUTING.md @@ -0,0 +1,40 @@ + + +# CONTRIBUTING + +Please note when contributing what files this repository actually is responsible for. + +The majority for the Vulkan headers come from [Vulkan-Docs](https://github.com/KhronosGroup/Vulkan-Docs) or [Vulkan-Hpp](https://github.com/KhronosGroup/Vulkan-Hpp) + +### This repository (https://github.com/KhronosGroup/Vulkan-Headers) + +* BUILD.gn +* BUILD.md +* CMakeLists.txt +* tests/* +* CODE_OF_CONDUCT.md +* LICENSE.txt +* README.md +* Non-API headers + * include/vulkan/vk_icd.h + * include/vulkan/vk_layer.h + +### Specification repository (https://github.com/KhronosGroup/Vulkan-Docs) + +* registry/*.py +* registry/spec_tools/*.py +* registry/profiles/*.json +* All files under include/vulkan/ which are *not* listed explicitly as originating from another repository. + +### Vulkan C++ Binding Repository (https://github.com/KhronosGroup/Vulkan-Hpp) + +As of the Vulkan-Docs 1.2.182 spec update, the Vulkan-Hpp headers have been +split into multiple files. All of those files are now included in this +repository. + +* include/vulkan/*.hpp +* include/vulkan/*.cppm diff --git a/local/recipes/libs/vulkan-headers/source/LICENSE.md b/local/recipes/libs/vulkan-headers/source/LICENSE.md new file mode 100644 index 0000000000..d6a0648b65 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/LICENSE.md @@ -0,0 +1,18 @@ +Copyright 2015-2023 The Khronos Group Inc. + +Files in this repository fall under one of these licenses: + +- `Apache-2.0` +- `MIT` + +Note: With the exception of `parse_dependency.py` the files using `MIT` license +also fall under `Apache-2.0`. Example: + +``` +SPDX-License-Identifier: Apache-2.0 OR MIT +``` + +Full license text of these licenses is available at: + + * Apache-2.0: https://opensource.org/licenses/Apache-2.0 + * MIT: https://opensource.org/licenses/MIT diff --git a/local/recipes/libs/vulkan-headers/source/LICENSES/Apache-2.0.txt b/local/recipes/libs/vulkan-headers/source/LICENSES/Apache-2.0.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/LICENSES/Apache-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/local/recipes/libs/vulkan-headers/source/LICENSES/MIT.txt b/local/recipes/libs/vulkan-headers/source/LICENSES/MIT.txt new file mode 100644 index 0000000000..8495fe9e90 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/LICENSES/MIT.txt @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2015-2023 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/local/recipes/libs/vulkan-headers/source/Makefile.release b/local/recipes/libs/vulkan-headers/source/Makefile.release new file mode 100644 index 0000000000..9e26897ebd --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/Makefile.release @@ -0,0 +1,110 @@ +# Copyright 2024 The Khronos Group Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Makefile.release - update external files generated in Vulkan spec +# repository when a public specification update is done. + +# Needed to get the right version of test, apparently +SHELL = /bin/bash + +REVISION = 999 + +# Location of other repository clones +GIT = .. +SPEC = $(GIT)/Vulkan-Docs +HPP = $(GIT)/Vulkan-Hpp +REGISTRY = $(GIT)/registry/vulkan + +update: version-check create-branch update-files push-branch + +# Working branch for the update, and a test if it exists +BRANCH = update-$(REVISION) + +# Switch to new branch which will contain the update +create-branch: version-check + git switch -q main + git pull -q + # If branch already exists, do nothing + @if test `git branch -l $(BRANCH) | wc -l` == 1 ; then \ + echo "Branch $(BRANCH) already exists" ; \ + git switch $(BRANCH) ; \ + else \ + echo "Creating branch $(BRANCH)" ; \ + git switch -c $(BRANCH) ; \ + fi + +# Update headers and scripts in the new branch +update-files: remove-files update-headers update-scripts + +# Vulkan SC Vulkan-Hpp headers not published in the Vulkan-Headers repository +SCHPPFILES = \ + include/vulkan/vulkansc.hpp \ + include/vulkan/vulkansc.cppm \ + include/vulkan/vulkansc_*.hpp + +update-headers: + if test ! -d $(SPEC)/gen/include/ ; then \ + echo "No C header file source directory $(SPEC)/gen/include" ; \ + exit 1 ; \ + fi + if test ! -d $(HPP)/vulkan ; then \ + echo "No C++ header file source directory $(HPP)/vulkan" ; \ + exit 1 ; \ + fi + cp -r $(SPEC)/gen/include/* include/ + cp -r $(HPP)/vulkan/* include/vulkan/ + rm -f $(SCHPPFILES) + +# Top-level scripts / XML to install +SCRIPTS = \ + $(SPEC)/scripts/base_generator.py \ + $(SPEC)/scripts/cgenerator.py \ + $(SPEC)/scripts/generator.py \ + $(SPEC)/scripts/parse_dependency.py \ + $(SPEC)/scripts/reg.py \ + $(SPEC)/scripts/stripAPI.py \ + $(SPEC)/scripts/apiconventions.py \ + $(SPEC)/scripts/vkconventions.py \ + $(SPEC)/scripts/vulkan_object.py \ + $(SPEC)/xml/vk.xml \ + $(SPEC)/xml/video.xml \ + $(REGISTRY)/specs/latest/validation/validusage.json + +# Scripts in registry/spec_tools to install +SCRIPT_TOOLS = \ + $(SPEC)/scripts/spec_tools/conventions.py \ + $(SPEC)/scripts/spec_tools/util.py + +# Profiles to install +PROFILES = \ + $(wildcard $(SPEC)/xml/profiles/*) + +update-scripts: + cp $(SCRIPTS) registry/ + cp $(PROFILES) registry/profiles/ + cp $(SCRIPT_TOOLS) registry/spec_tools/ + +# To ensure updates are caught, old versions of installed files are +# removed. + +# Files in include/ to keep +HEADERS_KEEP = \ + include/vulkan/vk_icd.h \ + include/vulkan/vk_layer.h + +remove-files: + rm -rf $(filter-out $(HEADERS_KEEP), $(wildcard include/vulkan/*)) + rm -rf include/vk_video + rm -rf registry + mkdir include/vk_video registry registry/profiles registry/spec_tools + +# Once the branch is updated, push it to upstream +# This does not actually push it for safety reasons +push-branch: + @echo Verify that all new files are 'git add'ed and obsolete files removed, then: + @echo git commit -m \"Update for Vulkan-Docs 1.3.$(REVISION)\" + @echo git push --set-upstream origin $(BRANCH) + @echo git switch main + +version-check: + @if test $(REVISION) = 999 ; then echo "Must specify explicit REVISION= in make invocation" ; exit 1 ; fi diff --git a/local/recipes/libs/vulkan-headers/source/README.md b/local/recipes/libs/vulkan-headers/source/README.md new file mode 100644 index 0000000000..d2d74ed306 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/README.md @@ -0,0 +1,52 @@ + + +# Vulkan-Headers + +Vulkan header files and API registry + +This repository contains Vulkan header files, include files for C and C++, +and related scripts and tests. + +Most of the files in this repository are sourced from, or generated from, +other repositories as described in [CONTRIBUTING.md](CONTRIBUTING.md). +Vulkan-Headers exists as a staging area for these files, most of which are +then consumed by downstream repositories used to build SDK components such +as the Vulkan Validation Layers and Conformance Test Suite. + +Developers normally obtain headers from the official +[Vulkan-SDK](https://www.lunarg.com/vulkan-sdk/). +They can also use headers from, or packaged from, this repository. + +In most cases, developers should only need the headers, not the scripts and +other material in this repository. +If you need to run the scripts, please use them from their canonical source +in the [Vulkan Specification +repository](https://github.com/KhronosGroup/Vulkan-Docs). + +## Contributing + +See the [CONTRIBUTING.md](CONTRIBUTING.md) + +## Building + +See [BUILD.md](BUILD.md) + +## SDK Support + +Vulkan-Headers are shipped as part of the official [Vulkan-SDK](https://www.lunarg.com/vulkan-sdk/) + +## C/C++ Package Manager Support + +`Vulkan-Headers` are also supported by both [conan](https://conan.io/) & [vcpkg](https://learn.microsoft.com/en-us/vcpkg/). + +## Version Tagging Scheme + +Updates to this repository which correspond to a new Vulkan specification release are tagged using the following format: `v<`_`version`_`>` (e.g., `v1.3.266`). + +**Note**: Marked version releases have undergone thorough testing but do not imply the same quality level as SDK tags. SDK tags follow the `vulkan-sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `vulkan-sdk-1.3.266.0`). + +This scheme was adopted following the `1.3.266` Vulkan specification release. diff --git a/local/recipes/libs/vulkan-headers/source/SECURITY.md b/local/recipes/libs/vulkan-headers/source/SECURITY.md new file mode 100644 index 0000000000..4453379226 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/SECURITY.md @@ -0,0 +1,11 @@ + + +# Security Policy + +To report a security issue, please disclose it at [security advisory](https://github.com/KhronosGroup/Vulkan-Headers/security/advisories/new). + +This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure. diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std.h new file mode 100644 index 0000000000..347e0d2ae5 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std.h @@ -0,0 +1,394 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_av1std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_AV1_NUM_REF_FRAMES 8 +#define STD_VIDEO_AV1_REFS_PER_FRAME 7 +#define STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME 8 +#define STD_VIDEO_AV1_MAX_TILE_COLS 64 +#define STD_VIDEO_AV1_MAX_TILE_ROWS 64 +#define STD_VIDEO_AV1_MAX_SEGMENTS 8 +#define STD_VIDEO_AV1_SEG_LVL_MAX 8 +#define STD_VIDEO_AV1_PRIMARY_REF_NONE 7 +#define STD_VIDEO_AV1_SELECT_INTEGER_MV 2 +#define STD_VIDEO_AV1_SELECT_SCREEN_CONTENT_TOOLS 2 +#define STD_VIDEO_AV1_SKIP_MODE_FRAMES 2 +#define STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS 4 +#define STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS 2 +#define STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS 8 +#define STD_VIDEO_AV1_MAX_NUM_PLANES 3 +#define STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS 6 +#define STD_VIDEO_AV1_MAX_NUM_Y_POINTS 14 +#define STD_VIDEO_AV1_MAX_NUM_CB_POINTS 10 +#define STD_VIDEO_AV1_MAX_NUM_CR_POINTS 10 +#define STD_VIDEO_AV1_MAX_NUM_POS_LUMA 24 +#define STD_VIDEO_AV1_MAX_NUM_POS_CHROMA 25 + +typedef enum StdVideoAV1Profile { + STD_VIDEO_AV1_PROFILE_MAIN = 0, + STD_VIDEO_AV1_PROFILE_HIGH = 1, + STD_VIDEO_AV1_PROFILE_PROFESSIONAL = 2, + STD_VIDEO_AV1_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1Profile; + +typedef enum StdVideoAV1Level { + STD_VIDEO_AV1_LEVEL_2_0 = 0, + STD_VIDEO_AV1_LEVEL_2_1 = 1, + STD_VIDEO_AV1_LEVEL_2_2 = 2, + STD_VIDEO_AV1_LEVEL_2_3 = 3, + STD_VIDEO_AV1_LEVEL_3_0 = 4, + STD_VIDEO_AV1_LEVEL_3_1 = 5, + STD_VIDEO_AV1_LEVEL_3_2 = 6, + STD_VIDEO_AV1_LEVEL_3_3 = 7, + STD_VIDEO_AV1_LEVEL_4_0 = 8, + STD_VIDEO_AV1_LEVEL_4_1 = 9, + STD_VIDEO_AV1_LEVEL_4_2 = 10, + STD_VIDEO_AV1_LEVEL_4_3 = 11, + STD_VIDEO_AV1_LEVEL_5_0 = 12, + STD_VIDEO_AV1_LEVEL_5_1 = 13, + STD_VIDEO_AV1_LEVEL_5_2 = 14, + STD_VIDEO_AV1_LEVEL_5_3 = 15, + STD_VIDEO_AV1_LEVEL_6_0 = 16, + STD_VIDEO_AV1_LEVEL_6_1 = 17, + STD_VIDEO_AV1_LEVEL_6_2 = 18, + STD_VIDEO_AV1_LEVEL_6_3 = 19, + STD_VIDEO_AV1_LEVEL_7_0 = 20, + STD_VIDEO_AV1_LEVEL_7_1 = 21, + STD_VIDEO_AV1_LEVEL_7_2 = 22, + STD_VIDEO_AV1_LEVEL_7_3 = 23, + STD_VIDEO_AV1_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1Level; + +typedef enum StdVideoAV1FrameType { + STD_VIDEO_AV1_FRAME_TYPE_KEY = 0, + STD_VIDEO_AV1_FRAME_TYPE_INTER = 1, + STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY = 2, + STD_VIDEO_AV1_FRAME_TYPE_SWITCH = 3, + STD_VIDEO_AV1_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1FrameType; + +typedef enum StdVideoAV1ReferenceName { + STD_VIDEO_AV1_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_AV1_REFERENCE_NAME_LAST2_FRAME = 2, + STD_VIDEO_AV1_REFERENCE_NAME_LAST3_FRAME = 3, + STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME = 4, + STD_VIDEO_AV1_REFERENCE_NAME_BWDREF_FRAME = 5, + STD_VIDEO_AV1_REFERENCE_NAME_ALTREF2_FRAME = 6, + STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME = 7, + STD_VIDEO_AV1_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ReferenceName; + +typedef enum StdVideoAV1InterpolationFilter { + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_AV1_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_AV1_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_AV1_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1InterpolationFilter; + +typedef enum StdVideoAV1TxMode { + STD_VIDEO_AV1_TX_MODE_ONLY_4X4 = 0, + STD_VIDEO_AV1_TX_MODE_LARGEST = 1, + STD_VIDEO_AV1_TX_MODE_SELECT = 2, + STD_VIDEO_AV1_TX_MODE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_TX_MODE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1TxMode; + +typedef enum StdVideoAV1FrameRestorationType { + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_NONE = 0, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_WIENER = 1, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SGRPROJ = 2, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SWITCHABLE = 3, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1FrameRestorationType; + +typedef enum StdVideoAV1ColorPrimaries { + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_709 = 1, + STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED = 2, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_M = 4, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_B_G = 5, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_601 = 6, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_240 = 7, + STD_VIDEO_AV1_COLOR_PRIMARIES_GENERIC_FILM = 8, + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_2020 = 9, + STD_VIDEO_AV1_COLOR_PRIMARIES_XYZ = 10, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_431 = 11, + STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432 = 12, + STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213 = 22, + STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID = 0x7FFFFFFF, + // STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED is a deprecated alias + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED, + STD_VIDEO_AV1_COLOR_PRIMARIES_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ColorPrimaries; + +typedef enum StdVideoAV1TransferCharacteristics { + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_0 = 0, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_709 = 1, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_UNSPECIFIED = 2, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_3 = 3, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_M = 4, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_B_G = 5, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_601 = 6, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_240 = 7, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LINEAR = 8, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100 = 9, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100_SQRT10 = 10, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_IEC_61966 = 11, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_1361 = 12, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SRGB = 13, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_10_BIT = 14, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_12_BIT = 15, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_2084 = 16, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_428 = 17, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_HLG = 18, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1TransferCharacteristics; + +typedef enum StdVideoAV1MatrixCoefficients { + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_IDENTITY = 0, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_709 = 1, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_UNSPECIFIED = 2, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_RESERVED_3 = 3, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_FCC = 4, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_470_B_G = 5, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_601 = 6, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_240 = 7, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_YCGCO = 8, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_NCL = 9, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_CL = 10, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_2085 = 11, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_NCL = 12, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_CL = 13, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_ICTCP = 14, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_MATRIX_COEFFICIENTS_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1MatrixCoefficients; + +typedef enum StdVideoAV1ChromaSamplePosition { + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_UNKNOWN = 0, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_VERTICAL = 1, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_COLOCATED = 2, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED = 3, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID = 0x7FFFFFFF, + STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_MAX_ENUM = 0x7FFFFFFF +} StdVideoAV1ChromaSamplePosition; +typedef struct StdVideoAV1ColorConfigFlags { + uint32_t mono_chrome : 1; + uint32_t color_range : 1; + uint32_t separate_uv_delta_q : 1; + uint32_t color_description_present_flag : 1; + uint32_t reserved : 28; +} StdVideoAV1ColorConfigFlags; + +typedef struct StdVideoAV1ColorConfig { + StdVideoAV1ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoAV1ColorPrimaries color_primaries; + StdVideoAV1TransferCharacteristics transfer_characteristics; + StdVideoAV1MatrixCoefficients matrix_coefficients; + StdVideoAV1ChromaSamplePosition chroma_sample_position; +} StdVideoAV1ColorConfig; + +typedef struct StdVideoAV1TimingInfoFlags { + uint32_t equal_picture_interval : 1; + uint32_t reserved : 31; +} StdVideoAV1TimingInfoFlags; + +typedef struct StdVideoAV1TimingInfo { + StdVideoAV1TimingInfoFlags flags; + uint32_t num_units_in_display_tick; + uint32_t time_scale; + uint32_t num_ticks_per_picture_minus_1; +} StdVideoAV1TimingInfo; + +typedef struct StdVideoAV1LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoAV1LoopFilterFlags; + +typedef struct StdVideoAV1LoopFilter { + StdVideoAV1LoopFilterFlags flags; + uint8_t loop_filter_level[STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS]; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoAV1LoopFilter; + +typedef struct StdVideoAV1QuantizationFlags { + uint32_t using_qmatrix : 1; + uint32_t diff_uv_delta : 1; + uint32_t reserved : 30; +} StdVideoAV1QuantizationFlags; + +typedef struct StdVideoAV1Quantization { + StdVideoAV1QuantizationFlags flags; + uint8_t base_q_idx; + int8_t DeltaQYDc; + int8_t DeltaQUDc; + int8_t DeltaQUAc; + int8_t DeltaQVDc; + int8_t DeltaQVAc; + uint8_t qm_y; + uint8_t qm_u; + uint8_t qm_v; +} StdVideoAV1Quantization; + +typedef struct StdVideoAV1Segmentation { + uint8_t FeatureEnabled[STD_VIDEO_AV1_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_AV1_MAX_SEGMENTS][STD_VIDEO_AV1_SEG_LVL_MAX]; +} StdVideoAV1Segmentation; + +typedef struct StdVideoAV1TileInfoFlags { + uint32_t uniform_tile_spacing_flag : 1; + uint32_t reserved : 31; +} StdVideoAV1TileInfoFlags; + +typedef struct StdVideoAV1TileInfo { + StdVideoAV1TileInfoFlags flags; + uint8_t TileCols; + uint8_t TileRows; + uint16_t context_update_tile_id; + uint8_t tile_size_bytes_minus_1; + uint8_t reserved1[7]; + const uint16_t* pMiColStarts; + const uint16_t* pMiRowStarts; + const uint16_t* pWidthInSbsMinus1; + const uint16_t* pHeightInSbsMinus1; +} StdVideoAV1TileInfo; + +typedef struct StdVideoAV1CDEF { + uint8_t cdef_damping_minus_3; + uint8_t cdef_bits; + uint8_t cdef_y_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_y_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_uv_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; + uint8_t cdef_uv_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS]; +} StdVideoAV1CDEF; + +typedef struct StdVideoAV1LoopRestoration { + StdVideoAV1FrameRestorationType FrameRestorationType[STD_VIDEO_AV1_MAX_NUM_PLANES]; + uint16_t LoopRestorationSize[STD_VIDEO_AV1_MAX_NUM_PLANES]; +} StdVideoAV1LoopRestoration; + +typedef struct StdVideoAV1GlobalMotion { + uint8_t GmType[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int32_t gm_params[STD_VIDEO_AV1_NUM_REF_FRAMES][STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS]; +} StdVideoAV1GlobalMotion; + +typedef struct StdVideoAV1FilmGrainFlags { + uint32_t chroma_scaling_from_luma : 1; + uint32_t overlap_flag : 1; + uint32_t clip_to_restricted_range : 1; + uint32_t update_grain : 1; + uint32_t reserved : 28; +} StdVideoAV1FilmGrainFlags; + +typedef struct StdVideoAV1FilmGrain { + StdVideoAV1FilmGrainFlags flags; + uint8_t grain_scaling_minus_8; + uint8_t ar_coeff_lag; + uint8_t ar_coeff_shift_minus_6; + uint8_t grain_scale_shift; + uint16_t grain_seed; + uint8_t film_grain_params_ref_idx; + uint8_t num_y_points; + uint8_t point_y_value[STD_VIDEO_AV1_MAX_NUM_Y_POINTS]; + uint8_t point_y_scaling[STD_VIDEO_AV1_MAX_NUM_Y_POINTS]; + uint8_t num_cb_points; + uint8_t point_cb_value[STD_VIDEO_AV1_MAX_NUM_CB_POINTS]; + uint8_t point_cb_scaling[STD_VIDEO_AV1_MAX_NUM_CB_POINTS]; + uint8_t num_cr_points; + uint8_t point_cr_value[STD_VIDEO_AV1_MAX_NUM_CR_POINTS]; + uint8_t point_cr_scaling[STD_VIDEO_AV1_MAX_NUM_CR_POINTS]; + int8_t ar_coeffs_y_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_LUMA]; + int8_t ar_coeffs_cb_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA]; + int8_t ar_coeffs_cr_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA]; + uint8_t cb_mult; + uint8_t cb_luma_mult; + uint16_t cb_offset; + uint8_t cr_mult; + uint8_t cr_luma_mult; + uint16_t cr_offset; +} StdVideoAV1FilmGrain; + +typedef struct StdVideoAV1SequenceHeaderFlags { + uint32_t still_picture : 1; + uint32_t reduced_still_picture_header : 1; + uint32_t use_128x128_superblock : 1; + uint32_t enable_filter_intra : 1; + uint32_t enable_intra_edge_filter : 1; + uint32_t enable_interintra_compound : 1; + uint32_t enable_masked_compound : 1; + uint32_t enable_warped_motion : 1; + uint32_t enable_dual_filter : 1; + uint32_t enable_order_hint : 1; + uint32_t enable_jnt_comp : 1; + uint32_t enable_ref_frame_mvs : 1; + uint32_t frame_id_numbers_present_flag : 1; + uint32_t enable_superres : 1; + uint32_t enable_cdef : 1; + uint32_t enable_restoration : 1; + uint32_t film_grain_params_present : 1; + uint32_t timing_info_present_flag : 1; + uint32_t initial_display_delay_present_flag : 1; + uint32_t reserved : 13; +} StdVideoAV1SequenceHeaderFlags; + +typedef struct StdVideoAV1SequenceHeader { + StdVideoAV1SequenceHeaderFlags flags; + StdVideoAV1Profile seq_profile; + uint8_t frame_width_bits_minus_1; + uint8_t frame_height_bits_minus_1; + uint16_t max_frame_width_minus_1; + uint16_t max_frame_height_minus_1; + uint8_t delta_frame_id_length_minus_2; + uint8_t additional_frame_id_length_minus_1; + uint8_t order_hint_bits_minus_1; + uint8_t seq_force_integer_mv; + uint8_t seq_force_screen_content_tools; + uint8_t reserved1[5]; + const StdVideoAV1ColorConfig* pColorConfig; + const StdVideoAV1TimingInfo* pTimingInfo; +} StdVideoAV1SequenceHeader; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_decode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_decode.h new file mode 100644 index 0000000000..522628e86d --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_decode.h @@ -0,0 +1,109 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_av1std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_decode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_decode" +typedef struct StdVideoDecodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t reference_select : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t apply_grain : 1; + uint32_t reserved : 3; +} StdVideoDecodeAV1PictureInfoFlags; + +typedef struct StdVideoDecodeAV1PictureInfo { + StdVideoDecodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t current_frame_id; + uint8_t OrderHint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t reserved1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t SkipModeFrame[STD_VIDEO_AV1_SKIP_MODE_FRAMES]; + uint8_t coded_denom; + uint8_t reserved2[3]; + uint8_t OrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES]; + uint32_t expectedFrameId[STD_VIDEO_AV1_NUM_REF_FRAMES]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoAV1FilmGrain* pFilmGrain; +} StdVideoDecodeAV1PictureInfo; + +typedef struct StdVideoDecodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoDecodeAV1ReferenceInfoFlags; + +typedef struct StdVideoDecodeAV1ReferenceInfo { + StdVideoDecodeAV1ReferenceInfoFlags flags; + uint8_t frame_type; + uint8_t RefFrameSignBias; + uint8_t OrderHint; + uint8_t SavedOrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES]; +} StdVideoDecodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_encode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_encode.h new file mode 100644 index 0000000000..ca5f6f474e --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_av1std_encode.h @@ -0,0 +1,143 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_av1std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_encode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_encode" +typedef struct StdVideoEncodeAV1DecoderModelInfo { + uint8_t buffer_delay_length_minus_1; + uint8_t buffer_removal_time_length_minus_1; + uint8_t frame_presentation_time_length_minus_1; + uint8_t reserved1; + uint32_t num_units_in_decoding_tick; +} StdVideoEncodeAV1DecoderModelInfo; + +typedef struct StdVideoEncodeAV1ExtensionHeader { + uint8_t temporal_id; + uint8_t spatial_id; +} StdVideoEncodeAV1ExtensionHeader; + +typedef struct StdVideoEncodeAV1OperatingPointInfoFlags { + uint32_t decoder_model_present_for_this_op : 1; + uint32_t low_delay_mode_flag : 1; + uint32_t initial_display_delay_present_for_this_op : 1; + uint32_t reserved : 29; +} StdVideoEncodeAV1OperatingPointInfoFlags; + +typedef struct StdVideoEncodeAV1OperatingPointInfo { + StdVideoEncodeAV1OperatingPointInfoFlags flags; + uint16_t operating_point_idc; + uint8_t seq_level_idx; + uint8_t seq_tier; + uint32_t decoder_buffer_delay; + uint32_t encoder_buffer_delay; + uint8_t initial_display_delay_minus_1; +} StdVideoEncodeAV1OperatingPointInfo; + +typedef struct StdVideoEncodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t show_frame : 1; + uint32_t showable_frame : 1; + uint32_t reserved : 3; +} StdVideoEncodeAV1PictureInfoFlags; + +typedef struct StdVideoEncodeAV1PictureInfo { + StdVideoEncodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t frame_presentation_time; + uint32_t current_frame_id; + uint8_t order_hint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t coded_denom; + uint16_t render_width_minus_1; + uint16_t render_height_minus_1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t ref_order_hint[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int8_t ref_frame_idx[STD_VIDEO_AV1_REFS_PER_FRAME]; + uint8_t reserved1[3]; + uint32_t delta_frame_id_minus_1[STD_VIDEO_AV1_REFS_PER_FRAME]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; + const uint32_t* pBufferRemovalTimes; +} StdVideoEncodeAV1PictureInfo; + +typedef struct StdVideoEncodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoEncodeAV1ReferenceInfoFlags; + +typedef struct StdVideoEncodeAV1ReferenceInfo { + StdVideoEncodeAV1ReferenceInfoFlags flags; + uint32_t RefFrameId; + StdVideoAV1FrameType frame_type; + uint8_t OrderHint; + uint8_t reserved1[3]; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; +} StdVideoEncodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std.h new file mode 100644 index 0000000000..6fd381066f --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std.h @@ -0,0 +1,312 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_H_ +#define VULKAN_VIDEO_CODEC_H264STD_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_h264std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32 +#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6 +#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16 +#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 6 +#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64 +#define STD_VIDEO_H264_MAX_NUM_LIST_REF 32 +#define STD_VIDEO_H264_MAX_CHROMA_PLANES 2 +#define STD_VIDEO_H264_NO_REFERENCE_PICTURE 0xFF + +typedef enum StdVideoH264ChromaFormatIdc { + STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_420 = 1, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_422 = 2, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_444 = 3, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ChromaFormatIdc; + +typedef enum StdVideoH264ProfileIdc { + STD_VIDEO_H264_PROFILE_IDC_BASELINE = 66, + STD_VIDEO_H264_PROFILE_IDC_MAIN = 77, + STD_VIDEO_H264_PROFILE_IDC_HIGH = 100, + STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE = 244, + STD_VIDEO_H264_PROFILE_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ProfileIdc; + +typedef enum StdVideoH264LevelIdc { + STD_VIDEO_H264_LEVEL_IDC_1_0 = 0, + STD_VIDEO_H264_LEVEL_IDC_1_1 = 1, + STD_VIDEO_H264_LEVEL_IDC_1_2 = 2, + STD_VIDEO_H264_LEVEL_IDC_1_3 = 3, + STD_VIDEO_H264_LEVEL_IDC_2_0 = 4, + STD_VIDEO_H264_LEVEL_IDC_2_1 = 5, + STD_VIDEO_H264_LEVEL_IDC_2_2 = 6, + STD_VIDEO_H264_LEVEL_IDC_3_0 = 7, + STD_VIDEO_H264_LEVEL_IDC_3_1 = 8, + STD_VIDEO_H264_LEVEL_IDC_3_2 = 9, + STD_VIDEO_H264_LEVEL_IDC_4_0 = 10, + STD_VIDEO_H264_LEVEL_IDC_4_1 = 11, + STD_VIDEO_H264_LEVEL_IDC_4_2 = 12, + STD_VIDEO_H264_LEVEL_IDC_5_0 = 13, + STD_VIDEO_H264_LEVEL_IDC_5_1 = 14, + STD_VIDEO_H264_LEVEL_IDC_5_2 = 15, + STD_VIDEO_H264_LEVEL_IDC_6_0 = 16, + STD_VIDEO_H264_LEVEL_IDC_6_1 = 17, + STD_VIDEO_H264_LEVEL_IDC_6_2 = 18, + STD_VIDEO_H264_LEVEL_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_LEVEL_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264LevelIdc; + +typedef enum StdVideoH264PocType { + STD_VIDEO_H264_POC_TYPE_0 = 0, + STD_VIDEO_H264_POC_TYPE_1 = 1, + STD_VIDEO_H264_POC_TYPE_2 = 2, + STD_VIDEO_H264_POC_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_POC_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264PocType; + +typedef enum StdVideoH264AspectRatioIdc { + STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED = 0, + STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE = 1, + STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11 = 2, + STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11 = 3, + STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11 = 4, + STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33 = 5, + STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11 = 6, + STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11 = 7, + STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11 = 8, + STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33 = 9, + STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11 = 10, + STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11 = 11, + STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33 = 12, + STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99 = 13, + STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3 = 14, + STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2 = 15, + STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1 = 16, + STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, + STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264AspectRatioIdc; + +typedef enum StdVideoH264WeightedBipredIdc { + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT = 0, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT = 1, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT = 2, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264WeightedBipredIdc; + +typedef enum StdVideoH264ModificationOfPicNumsIdc { + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT = 0, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD = 1, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM = 2, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END = 3, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264ModificationOfPicNumsIdc; + +typedef enum StdVideoH264MemMgmtControlOp { + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END = 0, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM = 1, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM = 2, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM = 3, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX = 4, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL = 5, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM = 6, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264MemMgmtControlOp; + +typedef enum StdVideoH264CabacInitIdc { + STD_VIDEO_H264_CABAC_INIT_IDC_0 = 0, + STD_VIDEO_H264_CABAC_INIT_IDC_1 = 1, + STD_VIDEO_H264_CABAC_INIT_IDC_2 = 2, + STD_VIDEO_H264_CABAC_INIT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_CABAC_INIT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264CabacInitIdc; + +typedef enum StdVideoH264DisableDeblockingFilterIdc { + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED = 0, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED = 1, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL = 2, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264DisableDeblockingFilterIdc; + +typedef enum StdVideoH264SliceType { + STD_VIDEO_H264_SLICE_TYPE_P = 0, + STD_VIDEO_H264_SLICE_TYPE_B = 1, + STD_VIDEO_H264_SLICE_TYPE_I = 2, + STD_VIDEO_H264_SLICE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264SliceType; + +typedef enum StdVideoH264PictureType { + STD_VIDEO_H264_PICTURE_TYPE_P = 0, + STD_VIDEO_H264_PICTURE_TYPE_B = 1, + STD_VIDEO_H264_PICTURE_TYPE_I = 2, + STD_VIDEO_H264_PICTURE_TYPE_IDR = 5, + STD_VIDEO_H264_PICTURE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264PictureType; + +typedef enum StdVideoH264NonVclNaluType { + STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS = 0, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS = 1, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD = 2, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX = 3, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE = 4, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM = 5, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED = 6, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H264_NON_VCL_NALU_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH264NonVclNaluType; +typedef struct StdVideoH264SpsVuiFlags { + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t color_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t timing_info_present_flag : 1; + uint32_t fixed_frame_rate_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; +} StdVideoH264SpsVuiFlags; + +typedef struct StdVideoH264HrdParameters { + uint8_t cpb_cnt_minus1; + uint8_t bit_rate_scale; + uint8_t cpb_size_scale; + uint8_t reserved1; + uint32_t bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint8_t cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]; + uint32_t initial_cpb_removal_delay_length_minus1; + uint32_t cpb_removal_delay_length_minus1; + uint32_t dpb_output_delay_length_minus1; + uint32_t time_offset_length; +} StdVideoH264HrdParameters; + +typedef struct StdVideoH264SequenceParameterSetVui { + StdVideoH264SpsVuiFlags flags; + StdVideoH264AspectRatioIdc aspect_ratio_idc; + uint16_t sar_width; + uint16_t sar_height; + uint8_t video_format; + uint8_t colour_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coefficients; + uint32_t num_units_in_tick; + uint32_t time_scale; + uint8_t max_num_reorder_frames; + uint8_t max_dec_frame_buffering; + uint8_t chroma_sample_loc_type_top_field; + uint8_t chroma_sample_loc_type_bottom_field; + uint32_t reserved1; + const StdVideoH264HrdParameters* pHrdParameters; +} StdVideoH264SequenceParameterSetVui; + +typedef struct StdVideoH264SpsFlags { + uint32_t constraint_set0_flag : 1; + uint32_t constraint_set1_flag : 1; + uint32_t constraint_set2_flag : 1; + uint32_t constraint_set3_flag : 1; + uint32_t constraint_set4_flag : 1; + uint32_t constraint_set5_flag : 1; + uint32_t direct_8x8_inference_flag : 1; + uint32_t mb_adaptive_frame_field_flag : 1; + uint32_t frame_mbs_only_flag : 1; + uint32_t delta_pic_order_always_zero_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t gaps_in_frame_num_value_allowed_flag : 1; + uint32_t qpprime_y_zero_transform_bypass_flag : 1; + uint32_t frame_cropping_flag : 1; + uint32_t seq_scaling_matrix_present_flag : 1; + uint32_t vui_parameters_present_flag : 1; +} StdVideoH264SpsFlags; + +typedef struct StdVideoH264ScalingLists { + uint16_t scaling_list_present_mask; + uint16_t use_default_scaling_matrix_mask; + uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS]; + uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS]; +} StdVideoH264ScalingLists; + +typedef struct StdVideoH264SequenceParameterSet { + StdVideoH264SpsFlags flags; + StdVideoH264ProfileIdc profile_idc; + StdVideoH264LevelIdc level_idc; + StdVideoH264ChromaFormatIdc chroma_format_idc; + uint8_t seq_parameter_set_id; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t log2_max_frame_num_minus4; + StdVideoH264PocType pic_order_cnt_type; + int32_t offset_for_non_ref_pic; + int32_t offset_for_top_to_bottom_field; + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t num_ref_frames_in_pic_order_cnt_cycle; + uint8_t max_num_ref_frames; + uint8_t reserved1; + uint32_t pic_width_in_mbs_minus1; + uint32_t pic_height_in_map_units_minus1; + uint32_t frame_crop_left_offset; + uint32_t frame_crop_right_offset; + uint32_t frame_crop_top_offset; + uint32_t frame_crop_bottom_offset; + uint32_t reserved2; + const int32_t* pOffsetForRefFrame; + const StdVideoH264ScalingLists* pScalingLists; + const StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui; +} StdVideoH264SequenceParameterSet; + +typedef struct StdVideoH264PpsFlags { + uint32_t transform_8x8_mode_flag : 1; + uint32_t redundant_pic_cnt_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t bottom_field_pic_order_in_frame_present_flag : 1; + uint32_t entropy_coding_mode_flag : 1; + uint32_t pic_scaling_matrix_present_flag : 1; +} StdVideoH264PpsFlags; + +typedef struct StdVideoH264PictureParameterSet { + StdVideoH264PpsFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + StdVideoH264WeightedBipredIdc weighted_bipred_idc; + int8_t pic_init_qp_minus26; + int8_t pic_init_qs_minus26; + int8_t chroma_qp_index_offset; + int8_t second_chroma_qp_index_offset; + const StdVideoH264ScalingLists* pScalingLists; +} StdVideoH264PictureParameterSet; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_decode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_decode.h new file mode 100644 index 0000000000..d6a90b4981 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_decode.h @@ -0,0 +1,77 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_h264std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std_decode 1 +#include "vulkan_video_codec_h264std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_decode" +#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2 + +typedef enum StdVideoDecodeH264FieldOrderCount { + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM = 1, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID = 0x7FFFFFFF, + STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_MAX_ENUM = 0x7FFFFFFF +} StdVideoDecodeH264FieldOrderCount; +typedef struct StdVideoDecodeH264PictureInfoFlags { + uint32_t field_pic_flag : 1; + uint32_t is_intra : 1; + uint32_t IdrPicFlag : 1; + uint32_t bottom_field_flag : 1; + uint32_t is_reference : 1; + uint32_t complementary_field_pair : 1; +} StdVideoDecodeH264PictureInfoFlags; + +typedef struct StdVideoDecodeH264PictureInfo { + StdVideoDecodeH264PictureInfoFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint8_t reserved1; + uint8_t reserved2; + uint16_t frame_num; + uint16_t idr_pic_id; + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; +} StdVideoDecodeH264PictureInfo; + +typedef struct StdVideoDecodeH264ReferenceInfoFlags { + uint32_t top_field_flag : 1; + uint32_t bottom_field_flag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t is_non_existing : 1; +} StdVideoDecodeH264ReferenceInfoFlags; + +typedef struct StdVideoDecodeH264ReferenceInfo { + StdVideoDecodeH264ReferenceInfoFlags flags; + uint16_t FrameNum; + uint16_t reserved; + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]; +} StdVideoDecodeH264ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_encode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_encode.h new file mode 100644 index 0000000000..410b1b2549 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h264std_encode.h @@ -0,0 +1,147 @@ +#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_h264std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h264std_encode 1 +#include "vulkan_video_codec_h264std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264_encode" +typedef struct StdVideoEncodeH264WeightTableFlags { + uint32_t luma_weight_l0_flag; + uint32_t chroma_weight_l0_flag; + uint32_t luma_weight_l1_flag; + uint32_t chroma_weight_l1_flag; +} StdVideoEncodeH264WeightTableFlags; + +typedef struct StdVideoEncodeH264WeightTable { + StdVideoEncodeH264WeightTableFlags flags; + uint8_t luma_log2_weight_denom; + uint8_t chroma_log2_weight_denom; + int8_t luma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t luma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t chroma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t chroma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t luma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t luma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + int8_t chroma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; + int8_t chroma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES]; +} StdVideoEncodeH264WeightTable; + +typedef struct StdVideoEncodeH264SliceHeaderFlags { + uint32_t direct_spatial_mv_pred_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t reserved : 30; +} StdVideoEncodeH264SliceHeaderFlags; + +typedef struct StdVideoEncodeH264PictureInfoFlags { + uint32_t IdrPicFlag : 1; + uint32_t is_reference : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t long_term_reference_flag : 1; + uint32_t adaptive_ref_pic_marking_mode_flag : 1; + uint32_t reserved : 27; +} StdVideoEncodeH264PictureInfoFlags; + +typedef struct StdVideoEncodeH264ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t reserved : 31; +} StdVideoEncodeH264ReferenceInfoFlags; + +typedef struct StdVideoEncodeH264ReferenceListsInfoFlags { + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; +} StdVideoEncodeH264ReferenceListsInfoFlags; + +typedef struct StdVideoEncodeH264RefListModEntry { + StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc; + uint16_t abs_diff_pic_num_minus1; + uint16_t long_term_pic_num; +} StdVideoEncodeH264RefListModEntry; + +typedef struct StdVideoEncodeH264RefPicMarkingEntry { + StdVideoH264MemMgmtControlOp memory_management_control_operation; + uint16_t difference_of_pic_nums_minus1; + uint16_t long_term_pic_num; + uint16_t long_term_frame_idx; + uint16_t max_long_term_frame_idx_plus1; +} StdVideoEncodeH264RefPicMarkingEntry; + +typedef struct StdVideoEncodeH264ReferenceListsInfo { + StdVideoEncodeH264ReferenceListsInfoFlags flags; + uint8_t num_ref_idx_l0_active_minus1; + uint8_t num_ref_idx_l1_active_minus1; + uint8_t RefPicList0[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + uint8_t RefPicList1[STD_VIDEO_H264_MAX_NUM_LIST_REF]; + uint8_t refList0ModOpCount; + uint8_t refList1ModOpCount; + uint8_t refPicMarkingOpCount; + uint8_t reserved1[7]; + const StdVideoEncodeH264RefListModEntry* pRefList0ModOperations; + const StdVideoEncodeH264RefListModEntry* pRefList1ModOperations; + const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations; +} StdVideoEncodeH264ReferenceListsInfo; + +typedef struct StdVideoEncodeH264PictureInfo { + StdVideoEncodeH264PictureInfoFlags flags; + uint8_t seq_parameter_set_id; + uint8_t pic_parameter_set_id; + uint16_t idr_pic_id; + StdVideoH264PictureType primary_pic_type; + uint32_t frame_num; + int32_t PicOrderCnt; + uint8_t temporal_id; + uint8_t reserved1[3]; + const StdVideoEncodeH264ReferenceListsInfo* pRefLists; +} StdVideoEncodeH264PictureInfo; + +typedef struct StdVideoEncodeH264ReferenceInfo { + StdVideoEncodeH264ReferenceInfoFlags flags; + StdVideoH264PictureType primary_pic_type; + uint32_t FrameNum; + int32_t PicOrderCnt; + uint16_t long_term_pic_num; + uint16_t long_term_frame_idx; + uint8_t temporal_id; +} StdVideoEncodeH264ReferenceInfo; + +typedef struct StdVideoEncodeH264SliceHeader { + StdVideoEncodeH264SliceHeaderFlags flags; + uint32_t first_mb_in_slice; + StdVideoH264SliceType slice_type; + int8_t slice_alpha_c0_offset_div2; + int8_t slice_beta_offset_div2; + int8_t slice_qp_delta; + uint8_t reserved1; + StdVideoH264CabacInitIdc cabac_init_idc; + StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc; + const StdVideoEncodeH264WeightTable* pWeightTable; +} StdVideoEncodeH264SliceHeader; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std.h new file mode 100644 index 0000000000..3eecd60111 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std.h @@ -0,0 +1,446 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_H_ +#define VULKAN_VIDEO_CODEC_H265STD_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_h265std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32 +#define STD_VIDEO_H265_SUBLAYERS_LIST_SIZE 7 +#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6 +#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16 +#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6 +#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64 +#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6 +#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64 +#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2 +#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64 +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6 +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19 +#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21 +#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3 +#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128 +#define STD_VIDEO_H265_MAX_NUM_LIST_REF 15 +#define STD_VIDEO_H265_MAX_CHROMA_PLANES 2 +#define STD_VIDEO_H265_MAX_SHORT_TERM_REF_PIC_SETS 64 +#define STD_VIDEO_H265_MAX_DPB_SIZE 16 +#define STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS 32 +#define STD_VIDEO_H265_MAX_LONG_TERM_PICS 16 +#define STD_VIDEO_H265_MAX_DELTA_POC 48 +#define STD_VIDEO_H265_NO_REFERENCE_PICTURE 0xFF + +typedef enum StdVideoH265ChromaFormatIdc { + STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_420 = 1, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_422 = 2, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_444 = 3, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265ChromaFormatIdc; + +typedef enum StdVideoH265ProfileIdc { + STD_VIDEO_H265_PROFILE_IDC_MAIN = 1, + STD_VIDEO_H265_PROFILE_IDC_MAIN_10 = 2, + STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE = 3, + STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS = 4, + STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS = 9, + STD_VIDEO_H265_PROFILE_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265ProfileIdc; + +typedef enum StdVideoH265LevelIdc { + STD_VIDEO_H265_LEVEL_IDC_1_0 = 0, + STD_VIDEO_H265_LEVEL_IDC_2_0 = 1, + STD_VIDEO_H265_LEVEL_IDC_2_1 = 2, + STD_VIDEO_H265_LEVEL_IDC_3_0 = 3, + STD_VIDEO_H265_LEVEL_IDC_3_1 = 4, + STD_VIDEO_H265_LEVEL_IDC_4_0 = 5, + STD_VIDEO_H265_LEVEL_IDC_4_1 = 6, + STD_VIDEO_H265_LEVEL_IDC_5_0 = 7, + STD_VIDEO_H265_LEVEL_IDC_5_1 = 8, + STD_VIDEO_H265_LEVEL_IDC_5_2 = 9, + STD_VIDEO_H265_LEVEL_IDC_6_0 = 10, + STD_VIDEO_H265_LEVEL_IDC_6_1 = 11, + STD_VIDEO_H265_LEVEL_IDC_6_2 = 12, + STD_VIDEO_H265_LEVEL_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_LEVEL_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265LevelIdc; + +typedef enum StdVideoH265SliceType { + STD_VIDEO_H265_SLICE_TYPE_B = 0, + STD_VIDEO_H265_SLICE_TYPE_P = 1, + STD_VIDEO_H265_SLICE_TYPE_I = 2, + STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265SliceType; + +typedef enum StdVideoH265PictureType { + STD_VIDEO_H265_PICTURE_TYPE_P = 0, + STD_VIDEO_H265_PICTURE_TYPE_B = 1, + STD_VIDEO_H265_PICTURE_TYPE_I = 2, + STD_VIDEO_H265_PICTURE_TYPE_IDR = 3, + STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265PictureType; + +typedef enum StdVideoH265AspectRatioIdc { + STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED = 0, + STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE = 1, + STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11 = 2, + STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11 = 3, + STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11 = 4, + STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33 = 5, + STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11 = 6, + STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11 = 7, + STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11 = 8, + STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33 = 9, + STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11 = 10, + STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11 = 11, + STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33 = 12, + STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99 = 13, + STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3 = 14, + STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2 = 15, + STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1 = 16, + STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR = 255, + STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF, + STD_VIDEO_H265_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF +} StdVideoH265AspectRatioIdc; +typedef struct StdVideoH265DecPicBufMgr { + uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint8_t max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint8_t max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; +} StdVideoH265DecPicBufMgr; + +typedef struct StdVideoH265SubLayerHrdParameters { + uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE]; + uint32_t cbr_flag; +} StdVideoH265SubLayerHrdParameters; + +typedef struct StdVideoH265HrdFlags { + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; + uint32_t sub_pic_hrd_params_present_flag : 1; + uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1; + uint32_t fixed_pic_rate_general_flag : 8; + uint32_t fixed_pic_rate_within_cvs_flag : 8; + uint32_t low_delay_hrd_flag : 8; +} StdVideoH265HrdFlags; + +typedef struct StdVideoH265HrdParameters { + StdVideoH265HrdFlags flags; + uint8_t tick_divisor_minus2; + uint8_t du_cpb_removal_delay_increment_length_minus1; + uint8_t dpb_output_delay_du_length_minus1; + uint8_t bit_rate_scale; + uint8_t cpb_size_scale; + uint8_t cpb_size_du_scale; + uint8_t initial_cpb_removal_delay_length_minus1; + uint8_t au_cpb_removal_delay_length_minus1; + uint8_t dpb_output_delay_length_minus1; + uint8_t cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint16_t elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]; + uint16_t reserved[3]; + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal; + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl; +} StdVideoH265HrdParameters; + +typedef struct StdVideoH265VpsFlags { + uint32_t vps_temporal_id_nesting_flag : 1; + uint32_t vps_sub_layer_ordering_info_present_flag : 1; + uint32_t vps_timing_info_present_flag : 1; + uint32_t vps_poc_proportional_to_timing_flag : 1; +} StdVideoH265VpsFlags; + +typedef struct StdVideoH265ProfileTierLevelFlags { + uint32_t general_tier_flag : 1; + uint32_t general_progressive_source_flag : 1; + uint32_t general_interlaced_source_flag : 1; + uint32_t general_non_packed_constraint_flag : 1; + uint32_t general_frame_only_constraint_flag : 1; +} StdVideoH265ProfileTierLevelFlags; + +typedef struct StdVideoH265ProfileTierLevel { + StdVideoH265ProfileTierLevelFlags flags; + StdVideoH265ProfileIdc general_profile_idc; + StdVideoH265LevelIdc general_level_idc; +} StdVideoH265ProfileTierLevel; + +typedef struct StdVideoH265VideoParameterSet { + StdVideoH265VpsFlags flags; + uint8_t vps_video_parameter_set_id; + uint8_t vps_max_sub_layers_minus1; + uint8_t reserved1; + uint8_t reserved2; + uint32_t vps_num_units_in_tick; + uint32_t vps_time_scale; + uint32_t vps_num_ticks_poc_diff_one_minus1; + uint32_t reserved3; + const StdVideoH265DecPicBufMgr* pDecPicBufMgr; + const StdVideoH265HrdParameters* pHrdParameters; + const StdVideoH265ProfileTierLevel* pProfileTierLevel; +} StdVideoH265VideoParameterSet; + +typedef struct StdVideoH265ScalingLists { + uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS]; + uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS]; + uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS]; + uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS]; + uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS]; + uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS]; +} StdVideoH265ScalingLists; + +typedef struct StdVideoH265SpsVuiFlags { + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t colour_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t neutral_chroma_indication_flag : 1; + uint32_t field_seq_flag : 1; + uint32_t frame_field_info_present_flag : 1; + uint32_t default_display_window_flag : 1; + uint32_t vui_timing_info_present_flag : 1; + uint32_t vui_poc_proportional_to_timing_flag : 1; + uint32_t vui_hrd_parameters_present_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t tiles_fixed_structure_flag : 1; + uint32_t motion_vectors_over_pic_boundaries_flag : 1; + uint32_t restricted_ref_pic_lists_flag : 1; +} StdVideoH265SpsVuiFlags; + +typedef struct StdVideoH265SequenceParameterSetVui { + StdVideoH265SpsVuiFlags flags; + StdVideoH265AspectRatioIdc aspect_ratio_idc; + uint16_t sar_width; + uint16_t sar_height; + uint8_t video_format; + uint8_t colour_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coeffs; + uint8_t chroma_sample_loc_type_top_field; + uint8_t chroma_sample_loc_type_bottom_field; + uint8_t reserved1; + uint8_t reserved2; + uint16_t def_disp_win_left_offset; + uint16_t def_disp_win_right_offset; + uint16_t def_disp_win_top_offset; + uint16_t def_disp_win_bottom_offset; + uint32_t vui_num_units_in_tick; + uint32_t vui_time_scale; + uint32_t vui_num_ticks_poc_diff_one_minus1; + uint16_t min_spatial_segmentation_idc; + uint16_t reserved3; + uint8_t max_bytes_per_pic_denom; + uint8_t max_bits_per_min_cu_denom; + uint8_t log2_max_mv_length_horizontal; + uint8_t log2_max_mv_length_vertical; + const StdVideoH265HrdParameters* pHrdParameters; +} StdVideoH265SequenceParameterSetVui; + +typedef struct StdVideoH265PredictorPaletteEntries { + uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE]; +} StdVideoH265PredictorPaletteEntries; + +typedef struct StdVideoH265SpsFlags { + uint32_t sps_temporal_id_nesting_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t conformance_window_flag : 1; + uint32_t sps_sub_layer_ordering_info_present_flag : 1; + uint32_t scaling_list_enabled_flag : 1; + uint32_t sps_scaling_list_data_present_flag : 1; + uint32_t amp_enabled_flag : 1; + uint32_t sample_adaptive_offset_enabled_flag : 1; + uint32_t pcm_enabled_flag : 1; + uint32_t pcm_loop_filter_disabled_flag : 1; + uint32_t long_term_ref_pics_present_flag : 1; + uint32_t sps_temporal_mvp_enabled_flag : 1; + uint32_t strong_intra_smoothing_enabled_flag : 1; + uint32_t vui_parameters_present_flag : 1; + uint32_t sps_extension_present_flag : 1; + uint32_t sps_range_extension_flag : 1; + uint32_t transform_skip_rotation_enabled_flag : 1; + uint32_t transform_skip_context_enabled_flag : 1; + uint32_t implicit_rdpcm_enabled_flag : 1; + uint32_t explicit_rdpcm_enabled_flag : 1; + uint32_t extended_precision_processing_flag : 1; + uint32_t intra_smoothing_disabled_flag : 1; + uint32_t high_precision_offsets_enabled_flag : 1; + uint32_t persistent_rice_adaptation_enabled_flag : 1; + uint32_t cabac_bypass_alignment_enabled_flag : 1; + uint32_t sps_scc_extension_flag : 1; + uint32_t sps_curr_pic_ref_enabled_flag : 1; + uint32_t palette_mode_enabled_flag : 1; + uint32_t sps_palette_predictor_initializers_present_flag : 1; + uint32_t intra_boundary_filtering_disabled_flag : 1; +} StdVideoH265SpsFlags; + +typedef struct StdVideoH265ShortTermRefPicSetFlags { + uint32_t inter_ref_pic_set_prediction_flag : 1; + uint32_t delta_rps_sign : 1; +} StdVideoH265ShortTermRefPicSetFlags; + +typedef struct StdVideoH265ShortTermRefPicSet { + StdVideoH265ShortTermRefPicSetFlags flags; + uint32_t delta_idx_minus1; + uint16_t use_delta_flag; + uint16_t abs_delta_rps_minus1; + uint16_t used_by_curr_pic_flag; + uint16_t used_by_curr_pic_s0_flag; + uint16_t used_by_curr_pic_s1_flag; + uint16_t reserved1; + uint8_t reserved2; + uint8_t reserved3; + uint8_t num_negative_pics; + uint8_t num_positive_pics; + uint16_t delta_poc_s0_minus1[STD_VIDEO_H265_MAX_DPB_SIZE]; + uint16_t delta_poc_s1_minus1[STD_VIDEO_H265_MAX_DPB_SIZE]; +} StdVideoH265ShortTermRefPicSet; + +typedef struct StdVideoH265LongTermRefPicsSps { + uint32_t used_by_curr_pic_lt_sps_flag; + uint32_t lt_ref_pic_poc_lsb_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS]; +} StdVideoH265LongTermRefPicsSps; + +typedef struct StdVideoH265SequenceParameterSet { + StdVideoH265SpsFlags flags; + StdVideoH265ChromaFormatIdc chroma_format_idc; + uint32_t pic_width_in_luma_samples; + uint32_t pic_height_in_luma_samples; + uint8_t sps_video_parameter_set_id; + uint8_t sps_max_sub_layers_minus1; + uint8_t sps_seq_parameter_set_id; + uint8_t bit_depth_luma_minus8; + uint8_t bit_depth_chroma_minus8; + uint8_t log2_max_pic_order_cnt_lsb_minus4; + uint8_t log2_min_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_luma_coding_block_size; + uint8_t log2_min_luma_transform_block_size_minus2; + uint8_t log2_diff_max_min_luma_transform_block_size; + uint8_t max_transform_hierarchy_depth_inter; + uint8_t max_transform_hierarchy_depth_intra; + uint8_t num_short_term_ref_pic_sets; + uint8_t num_long_term_ref_pics_sps; + uint8_t pcm_sample_bit_depth_luma_minus1; + uint8_t pcm_sample_bit_depth_chroma_minus1; + uint8_t log2_min_pcm_luma_coding_block_size_minus3; + uint8_t log2_diff_max_min_pcm_luma_coding_block_size; + uint8_t reserved1; + uint8_t reserved2; + uint8_t palette_max_size; + uint8_t delta_palette_max_predictor_size; + uint8_t motion_vector_resolution_control_idc; + uint8_t sps_num_palette_predictor_initializers_minus1; + uint32_t conf_win_left_offset; + uint32_t conf_win_right_offset; + uint32_t conf_win_top_offset; + uint32_t conf_win_bottom_offset; + const StdVideoH265ProfileTierLevel* pProfileTierLevel; + const StdVideoH265DecPicBufMgr* pDecPicBufMgr; + const StdVideoH265ScalingLists* pScalingLists; + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSet; + const StdVideoH265LongTermRefPicsSps* pLongTermRefPicsSps; + const StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui; + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; +} StdVideoH265SequenceParameterSet; + +typedef struct StdVideoH265PpsFlags { + uint32_t dependent_slice_segments_enabled_flag : 1; + uint32_t output_flag_present_flag : 1; + uint32_t sign_data_hiding_enabled_flag : 1; + uint32_t cabac_init_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t transform_skip_enabled_flag : 1; + uint32_t cu_qp_delta_enabled_flag : 1; + uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t weighted_bipred_flag : 1; + uint32_t transquant_bypass_enabled_flag : 1; + uint32_t tiles_enabled_flag : 1; + uint32_t entropy_coding_sync_enabled_flag : 1; + uint32_t uniform_spacing_flag : 1; + uint32_t loop_filter_across_tiles_enabled_flag : 1; + uint32_t pps_loop_filter_across_slices_enabled_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t deblocking_filter_override_enabled_flag : 1; + uint32_t pps_deblocking_filter_disabled_flag : 1; + uint32_t pps_scaling_list_data_present_flag : 1; + uint32_t lists_modification_present_flag : 1; + uint32_t slice_segment_header_extension_present_flag : 1; + uint32_t pps_extension_present_flag : 1; + uint32_t cross_component_prediction_enabled_flag : 1; + uint32_t chroma_qp_offset_list_enabled_flag : 1; + uint32_t pps_curr_pic_ref_enabled_flag : 1; + uint32_t residual_adaptive_colour_transform_enabled_flag : 1; + uint32_t pps_slice_act_qp_offsets_present_flag : 1; + uint32_t pps_palette_predictor_initializers_present_flag : 1; + uint32_t monochrome_palette_flag : 1; + uint32_t pps_range_extension_flag : 1; +} StdVideoH265PpsFlags; + +typedef struct StdVideoH265PictureParameterSet { + StdVideoH265PpsFlags flags; + uint8_t pps_pic_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t sps_video_parameter_set_id; + uint8_t num_extra_slice_header_bits; + uint8_t num_ref_idx_l0_default_active_minus1; + uint8_t num_ref_idx_l1_default_active_minus1; + int8_t init_qp_minus26; + uint8_t diff_cu_qp_delta_depth; + int8_t pps_cb_qp_offset; + int8_t pps_cr_qp_offset; + int8_t pps_beta_offset_div2; + int8_t pps_tc_offset_div2; + uint8_t log2_parallel_merge_level_minus2; + uint8_t log2_max_transform_skip_block_size_minus2; + uint8_t diff_cu_chroma_qp_offset_depth; + uint8_t chroma_qp_offset_list_len_minus1; + int8_t cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; + int8_t cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE]; + uint8_t log2_sao_offset_scale_luma; + uint8_t log2_sao_offset_scale_chroma; + int8_t pps_act_y_qp_offset_plus5; + int8_t pps_act_cb_qp_offset_plus5; + int8_t pps_act_cr_qp_offset_plus3; + uint8_t pps_num_palette_predictor_initializers; + uint8_t luma_bit_depth_entry_minus8; + uint8_t chroma_bit_depth_entry_minus8; + uint8_t num_tile_columns_minus1; + uint8_t num_tile_rows_minus1; + uint8_t reserved1; + uint8_t reserved2; + uint16_t column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE]; + uint16_t row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE]; + uint32_t reserved3; + const StdVideoH265ScalingLists* pScalingLists; + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; +} StdVideoH265PictureParameterSet; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_decode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_decode.h new file mode 100644 index 0000000000..a9e1a09645 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_decode.h @@ -0,0 +1,67 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_h265std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std_decode 1 +#include "vulkan_video_codec_h265std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_decode" +#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8 +typedef struct StdVideoDecodeH265PictureInfoFlags { + uint32_t IrapPicFlag : 1; + uint32_t IdrPicFlag : 1; + uint32_t IsReference : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; +} StdVideoDecodeH265PictureInfoFlags; + +typedef struct StdVideoDecodeH265PictureInfo { + StdVideoDecodeH265PictureInfoFlags flags; + uint8_t sps_video_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t pps_pic_parameter_set_id; + uint8_t NumDeltaPocsOfRefRpsIdx; + int32_t PicOrderCntVal; + uint16_t NumBitsForSTRefPicSetInSlice; + uint16_t reserved; + uint8_t RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; + uint8_t RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; + uint8_t RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]; +} StdVideoDecodeH265PictureInfo; + +typedef struct StdVideoDecodeH265ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; +} StdVideoDecodeH265ReferenceInfoFlags; + +typedef struct StdVideoDecodeH265ReferenceInfo { + StdVideoDecodeH265ReferenceInfoFlags flags; + int32_t PicOrderCntVal; +} StdVideoDecodeH265ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_encode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_encode.h new file mode 100644 index 0000000000..fe2f28d57f --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_h265std_encode.h @@ -0,0 +1,157 @@ +#ifndef VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_h265std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_h265std_encode 1 +#include "vulkan_video_codec_h265std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265_encode" +typedef struct StdVideoEncodeH265WeightTableFlags { + uint16_t luma_weight_l0_flag; + uint16_t chroma_weight_l0_flag; + uint16_t luma_weight_l1_flag; + uint16_t chroma_weight_l1_flag; +} StdVideoEncodeH265WeightTableFlags; + +typedef struct StdVideoEncodeH265WeightTable { + StdVideoEncodeH265WeightTableFlags flags; + uint8_t luma_log2_weight_denom; + int8_t delta_chroma_log2_weight_denom; + int8_t delta_luma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t luma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t delta_chroma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_chroma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_luma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t luma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + int8_t delta_chroma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; + int8_t delta_chroma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES]; +} StdVideoEncodeH265WeightTable; + +typedef struct StdVideoEncodeH265SliceSegmentHeaderFlags { + uint32_t first_slice_segment_in_pic_flag : 1; + uint32_t dependent_slice_segment_flag : 1; + uint32_t slice_sao_luma_flag : 1; + uint32_t slice_sao_chroma_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t mvd_l1_zero_flag : 1; + uint32_t cabac_init_flag : 1; + uint32_t cu_chroma_qp_offset_enabled_flag : 1; + uint32_t deblocking_filter_override_flag : 1; + uint32_t slice_deblocking_filter_disabled_flag : 1; + uint32_t collocated_from_l0_flag : 1; + uint32_t slice_loop_filter_across_slices_enabled_flag : 1; + uint32_t reserved : 20; +} StdVideoEncodeH265SliceSegmentHeaderFlags; + +typedef struct StdVideoEncodeH265SliceSegmentHeader { + StdVideoEncodeH265SliceSegmentHeaderFlags flags; + StdVideoH265SliceType slice_type; + uint32_t slice_segment_address; + uint8_t collocated_ref_idx; + uint8_t MaxNumMergeCand; + int8_t slice_cb_qp_offset; + int8_t slice_cr_qp_offset; + int8_t slice_beta_offset_div2; + int8_t slice_tc_offset_div2; + int8_t slice_act_y_qp_offset; + int8_t slice_act_cb_qp_offset; + int8_t slice_act_cr_qp_offset; + int8_t slice_qp_delta; + uint16_t reserved1; + const StdVideoEncodeH265WeightTable* pWeightTable; +} StdVideoEncodeH265SliceSegmentHeader; + +typedef struct StdVideoEncodeH265ReferenceListsInfoFlags { + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; +} StdVideoEncodeH265ReferenceListsInfoFlags; + +typedef struct StdVideoEncodeH265ReferenceListsInfo { + StdVideoEncodeH265ReferenceListsInfoFlags flags; + uint8_t num_ref_idx_l0_active_minus1; + uint8_t num_ref_idx_l1_active_minus1; + uint8_t RefPicList0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t RefPicList1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t list_entry_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]; + uint8_t list_entry_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF]; +} StdVideoEncodeH265ReferenceListsInfo; + +typedef struct StdVideoEncodeH265PictureInfoFlags { + uint32_t is_reference : 1; + uint32_t IrapPicFlag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t discardable_flag : 1; + uint32_t cross_layer_bla_flag : 1; + uint32_t pic_output_flag : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; + uint32_t slice_temporal_mvp_enabled_flag : 1; + uint32_t reserved : 23; +} StdVideoEncodeH265PictureInfoFlags; + +typedef struct StdVideoEncodeH265LongTermRefPics { + uint8_t num_long_term_sps; + uint8_t num_long_term_pics; + uint8_t lt_idx_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS]; + uint8_t poc_lsb_lt[STD_VIDEO_H265_MAX_LONG_TERM_PICS]; + uint16_t used_by_curr_pic_lt_flag; + uint8_t delta_poc_msb_present_flag[STD_VIDEO_H265_MAX_DELTA_POC]; + uint8_t delta_poc_msb_cycle_lt[STD_VIDEO_H265_MAX_DELTA_POC]; +} StdVideoEncodeH265LongTermRefPics; + +typedef struct StdVideoEncodeH265PictureInfo { + StdVideoEncodeH265PictureInfoFlags flags; + StdVideoH265PictureType pic_type; + uint8_t sps_video_parameter_set_id; + uint8_t pps_seq_parameter_set_id; + uint8_t pps_pic_parameter_set_id; + uint8_t short_term_ref_pic_set_idx; + int32_t PicOrderCntVal; + uint8_t TemporalId; + uint8_t reserved1[7]; + const StdVideoEncodeH265ReferenceListsInfo* pRefLists; + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSet; + const StdVideoEncodeH265LongTermRefPics* pLongTermRefPics; +} StdVideoEncodeH265PictureInfo; + +typedef struct StdVideoEncodeH265ReferenceInfoFlags { + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; + uint32_t reserved : 30; +} StdVideoEncodeH265ReferenceInfoFlags; + +typedef struct StdVideoEncodeH265ReferenceInfo { + StdVideoEncodeH265ReferenceInfoFlags flags; + StdVideoH265PictureType pic_type; + int32_t PicOrderCntVal; + uint8_t TemporalId; +} StdVideoEncodeH265ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std.h new file mode 100644 index 0000000000..61743cd954 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std.h @@ -0,0 +1,151 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_vp9std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_VP9_NUM_REF_FRAMES 8 +#define STD_VIDEO_VP9_REFS_PER_FRAME 3 +#define STD_VIDEO_VP9_MAX_REF_FRAMES 4 +#define STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS 2 +#define STD_VIDEO_VP9_MAX_SEGMENTS 8 +#define STD_VIDEO_VP9_SEG_LVL_MAX 4 +#define STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS 7 +#define STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB 3 + +typedef enum StdVideoVP9Profile { + STD_VIDEO_VP9_PROFILE_0 = 0, + STD_VIDEO_VP9_PROFILE_1 = 1, + STD_VIDEO_VP9_PROFILE_2 = 2, + STD_VIDEO_VP9_PROFILE_3 = 3, + STD_VIDEO_VP9_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Profile; + +typedef enum StdVideoVP9Level { + STD_VIDEO_VP9_LEVEL_1_0 = 0, + STD_VIDEO_VP9_LEVEL_1_1 = 1, + STD_VIDEO_VP9_LEVEL_2_0 = 2, + STD_VIDEO_VP9_LEVEL_2_1 = 3, + STD_VIDEO_VP9_LEVEL_3_0 = 4, + STD_VIDEO_VP9_LEVEL_3_1 = 5, + STD_VIDEO_VP9_LEVEL_4_0 = 6, + STD_VIDEO_VP9_LEVEL_4_1 = 7, + STD_VIDEO_VP9_LEVEL_5_0 = 8, + STD_VIDEO_VP9_LEVEL_5_1 = 9, + STD_VIDEO_VP9_LEVEL_5_2 = 10, + STD_VIDEO_VP9_LEVEL_6_0 = 11, + STD_VIDEO_VP9_LEVEL_6_1 = 12, + STD_VIDEO_VP9_LEVEL_6_2 = 13, + STD_VIDEO_VP9_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Level; + +typedef enum StdVideoVP9FrameType { + STD_VIDEO_VP9_FRAME_TYPE_KEY = 0, + STD_VIDEO_VP9_FRAME_TYPE_NON_KEY = 1, + STD_VIDEO_VP9_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9FrameType; + +typedef enum StdVideoVP9ReferenceName { + STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME = 2, + STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME = 3, + STD_VIDEO_VP9_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ReferenceName; + +typedef enum StdVideoVP9InterpolationFilter { + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9InterpolationFilter; + +typedef enum StdVideoVP9ColorSpace { + STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN = 0, + STD_VIDEO_VP9_COLOR_SPACE_BT_601 = 1, + STD_VIDEO_VP9_COLOR_SPACE_BT_709 = 2, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170 = 3, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240 = 4, + STD_VIDEO_VP9_COLOR_SPACE_BT_2020 = 5, + STD_VIDEO_VP9_COLOR_SPACE_RESERVED = 6, + STD_VIDEO_VP9_COLOR_SPACE_RGB = 7, + STD_VIDEO_VP9_COLOR_SPACE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_COLOR_SPACE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ColorSpace; +typedef struct StdVideoVP9ColorConfigFlags { + uint32_t color_range : 1; + uint32_t reserved : 31; +} StdVideoVP9ColorConfigFlags; + +typedef struct StdVideoVP9ColorConfig { + StdVideoVP9ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoVP9ColorSpace color_space; +} StdVideoVP9ColorConfig; + +typedef struct StdVideoVP9LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoVP9LoopFilterFlags; + +typedef struct StdVideoVP9LoopFilter { + StdVideoVP9LoopFilterFlags flags; + uint8_t loop_filter_level; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_VP9_MAX_REF_FRAMES]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoVP9LoopFilter; + +typedef struct StdVideoVP9SegmentationFlags { + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t segmentation_abs_or_delta_update : 1; + uint32_t reserved : 28; +} StdVideoVP9SegmentationFlags; + +typedef struct StdVideoVP9Segmentation { + StdVideoVP9SegmentationFlags flags; + uint8_t segmentation_tree_probs[STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS]; + uint8_t segmentation_pred_prob[STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB]; + uint8_t FeatureEnabled[STD_VIDEO_VP9_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_VP9_MAX_SEGMENTS][STD_VIDEO_VP9_SEG_LVL_MAX]; +} StdVideoVP9Segmentation; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std_decode.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std_decode.h new file mode 100644 index 0000000000..42b9bd3fb9 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codec_vp9std_decode.h @@ -0,0 +1,68 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codec_vp9std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std_decode 1 +#include "vulkan_video_codec_vp9std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_vp9_decode" +typedef struct StdVideoDecodeVP9PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t intra_only : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t refresh_frame_context : 1; + uint32_t frame_parallel_decoding_mode : 1; + uint32_t segmentation_enabled : 1; + uint32_t show_frame : 1; + uint32_t UsePrevFrameMvs : 1; + uint32_t reserved : 24; +} StdVideoDecodeVP9PictureInfoFlags; + +typedef struct StdVideoDecodeVP9PictureInfo { + StdVideoDecodeVP9PictureInfoFlags flags; + StdVideoVP9Profile profile; + StdVideoVP9FrameType frame_type; + uint8_t frame_context_idx; + uint8_t reset_frame_context; + uint8_t refresh_frame_flags; + uint8_t ref_frame_sign_bias_mask; + StdVideoVP9InterpolationFilter interpolation_filter; + uint8_t base_q_idx; + int8_t delta_q_y_dc; + int8_t delta_q_uv_dc; + int8_t delta_q_uv_ac; + uint8_t tile_cols_log2; + uint8_t tile_rows_log2; + uint16_t reserved1[3]; + const StdVideoVP9ColorConfig* pColorConfig; + const StdVideoVP9LoopFilter* pLoopFilter; + const StdVideoVP9Segmentation* pSegmentation; +} StdVideoDecodeVP9PictureInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codecs_common.h b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codecs_common.h new file mode 100644 index 0000000000..a5f0f3d940 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vk_video/vulkan_video_codecs_common.h @@ -0,0 +1,36 @@ +#ifndef VULKAN_VIDEO_CODECS_COMMON_H_ +#define VULKAN_VIDEO_CODECS_COMMON_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// vulkan_video_codecs_common is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codecs_common 1 +#if !defined(VK_NO_STDINT_H) + #include +#endif + +#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_icd.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_icd.h new file mode 100644 index 0000000000..59204a3419 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_icd.h @@ -0,0 +1,244 @@ +/* + * Copyright 2015-2023 The Khronos Group Inc. + * Copyright 2015-2023 Valve Corporation + * Copyright 2015-2023 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +#pragma once + +#include "vulkan.h" +#include + +// Loader-ICD version negotiation API. Versions add the following features: +// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr +// or vk_icdNegotiateLoaderICDInterfaceVersion. +// Version 1 - Add support for vk_icdGetInstanceProcAddr. +// Version 2 - Add Loader/ICD Interface version negotiation +// via vk_icdNegotiateLoaderICDInterfaceVersion. +// Version 3 - Add ICD creation/destruction of KHR_surface objects. +// Version 4 - Add unknown physical device extension querying via +// vk_icdGetPhysicalDeviceProcAddr. +// Version 5 - Tells ICDs that the loader is now paying attention to the +// application version of Vulkan passed into the ApplicationInfo +// structure during vkCreateInstance. This will tell the ICD +// that if the loader is older, it should automatically fail a +// call for any API version > 1.0. Otherwise, the loader will +// manually determine if it can support the expected version. +// Version 6 - Add support for vk_icdEnumerateAdapterPhysicalDevices. +// Version 7 - If an ICD supports any of the following functions, they must be +// queryable with vk_icdGetInstanceProcAddr: +// vk_icdNegotiateLoaderICDInterfaceVersion +// vk_icdGetPhysicalDeviceProcAddr +// vk_icdEnumerateAdapterPhysicalDevices (Windows only) +// In addition, these functions no longer need to be exported directly. +// This version allows drivers provided through the extension +// VK_LUNARG_direct_driver_loading be able to support the entire +// Driver-Loader interface. + +#define CURRENT_LOADER_ICD_INTERFACE_VERSION 7 +#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0 +#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4 + +// Old typedefs that don't follow a proper naming convention but are preserved for compatibility +typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion); +// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this +// file directly, it won't be found. +#ifndef PFN_GetPhysicalDeviceProcAddr +typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName); +#endif + +// Typedefs for loader/ICD interface +typedef VkResult (VKAPI_PTR *PFN_vk_icdNegotiateLoaderICDInterfaceVersion)(uint32_t* pVersion); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetInstanceProcAddr)(VkInstance instance, const char* pName); +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); +#if defined(VK_USE_PLATFORM_WIN32_KHR) +typedef VkResult (VKAPI_PTR *PFN_vk_icdEnumerateAdapterPhysicalDevices)(VkInstance instance, LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +#endif + +// Prototypes for loader/ICD interface +#if !defined(VK_NO_PROTOTYPES) +#ifdef __cplusplus +extern "C" { +#endif + VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pVersion); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char* pName); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); +#endif +#ifdef __cplusplus +} +#endif +#endif + +/* + * The ICD must reserve space for a pointer for the loader's dispatch + * table, at the start of . + * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro. + */ + +#define ICD_LOADER_MAGIC 0x01CDC0DE + +typedef union { + uintptr_t loaderMagic; + void *loaderData; +} VK_LOADER_DATA; + +static inline void set_loader_magic_value(void *pNewObject) { + VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; + loader_info->loaderMagic = ICD_LOADER_MAGIC; +} + +static inline bool valid_loader_magic_value(void *pNewObject) { + const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; + return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC; +} + +/* + * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that + * contains the platform-specific connection and surface information. + */ +typedef enum { + VK_ICD_WSI_PLATFORM_MIR, + VK_ICD_WSI_PLATFORM_WAYLAND, + VK_ICD_WSI_PLATFORM_WIN32, + VK_ICD_WSI_PLATFORM_XCB, + VK_ICD_WSI_PLATFORM_XLIB, + VK_ICD_WSI_PLATFORM_ANDROID, + VK_ICD_WSI_PLATFORM_MACOS, + VK_ICD_WSI_PLATFORM_IOS, + VK_ICD_WSI_PLATFORM_DISPLAY, + VK_ICD_WSI_PLATFORM_HEADLESS, + VK_ICD_WSI_PLATFORM_METAL, + VK_ICD_WSI_PLATFORM_DIRECTFB, + VK_ICD_WSI_PLATFORM_VI, + VK_ICD_WSI_PLATFORM_GGP, + VK_ICD_WSI_PLATFORM_SCREEN, + VK_ICD_WSI_PLATFORM_FUCHSIA, +} VkIcdWsiPlatform; + +typedef struct { + VkIcdWsiPlatform platform; +} VkIcdSurfaceBase; + +#ifdef VK_USE_PLATFORM_MIR_KHR +typedef struct { + VkIcdSurfaceBase base; + MirConnection *connection; + MirSurface *mirSurface; +} VkIcdSurfaceMir; +#endif // VK_USE_PLATFORM_MIR_KHR + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +typedef struct { + VkIcdSurfaceBase base; + struct wl_display *display; + struct wl_surface *surface; +} VkIcdSurfaceWayland; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#ifdef VK_USE_PLATFORM_WIN32_KHR +typedef struct { + VkIcdSurfaceBase base; + HINSTANCE hinstance; + HWND hwnd; +} VkIcdSurfaceWin32; +#endif // VK_USE_PLATFORM_WIN32_KHR + +#ifdef VK_USE_PLATFORM_XCB_KHR +typedef struct { + VkIcdSurfaceBase base; + xcb_connection_t *connection; + xcb_window_t window; +} VkIcdSurfaceXcb; +#endif // VK_USE_PLATFORM_XCB_KHR + +#ifdef VK_USE_PLATFORM_XLIB_KHR +typedef struct { + VkIcdSurfaceBase base; + Display *dpy; + Window window; +} VkIcdSurfaceXlib; +#endif // VK_USE_PLATFORM_XLIB_KHR + +#ifdef VK_USE_PLATFORM_DIRECTFB_EXT +typedef struct { + VkIcdSurfaceBase base; + IDirectFB *dfb; + IDirectFBSurface *surface; +} VkIcdSurfaceDirectFB; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +typedef struct { + VkIcdSurfaceBase base; + struct ANativeWindow *window; +} VkIcdSurfaceAndroid; +#endif // VK_USE_PLATFORM_ANDROID_KHR + +#ifdef VK_USE_PLATFORM_MACOS_MVK +typedef struct { + VkIcdSurfaceBase base; + const void *pView; +} VkIcdSurfaceMacOS; +#endif // VK_USE_PLATFORM_MACOS_MVK + +#ifdef VK_USE_PLATFORM_IOS_MVK +typedef struct { + VkIcdSurfaceBase base; + const void *pView; +} VkIcdSurfaceIOS; +#endif // VK_USE_PLATFORM_IOS_MVK + +#ifdef VK_USE_PLATFORM_GGP +typedef struct { + VkIcdSurfaceBase base; + GgpStreamDescriptor streamDescriptor; +} VkIcdSurfaceGgp; +#endif // VK_USE_PLATFORM_GGP + +typedef struct { + VkIcdSurfaceBase base; + VkDisplayModeKHR displayMode; + uint32_t planeIndex; + uint32_t planeStackIndex; + VkSurfaceTransformFlagBitsKHR transform; + float globalAlpha; + VkDisplayPlaneAlphaFlagBitsKHR alphaMode; + VkExtent2D imageExtent; +} VkIcdSurfaceDisplay; + +typedef struct { + VkIcdSurfaceBase base; +} VkIcdSurfaceHeadless; + +#ifdef VK_USE_PLATFORM_METAL_EXT +typedef struct { + VkIcdSurfaceBase base; + const CAMetalLayer *pLayer; +} VkIcdSurfaceMetal; +#endif // VK_USE_PLATFORM_METAL_EXT + +#ifdef VK_USE_PLATFORM_VI_NN +typedef struct { + VkIcdSurfaceBase base; + void *window; +} VkIcdSurfaceVi; +#endif // VK_USE_PLATFORM_VI_NN + +#ifdef VK_USE_PLATFORM_SCREEN_QNX +typedef struct { + VkIcdSurfaceBase base; + struct _screen_context *context; + struct _screen_window *window; +} VkIcdSurfaceScreen; +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#ifdef VK_USE_PLATFORM_FUCHSIA +typedef struct { + VkIcdSurfaceBase base; +} VkIcdSurfaceImagePipe; +#endif // VK_USE_PLATFORM_FUCHSIA diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_layer.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_layer.h new file mode 100644 index 0000000000..19d88fce4b --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_layer.h @@ -0,0 +1,189 @@ +/* + * Copyright 2015-2023 The Khronos Group Inc. + * Copyright 2015-2023 Valve Corporation + * Copyright 2015-2023 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +#pragma once + +/* Need to define dispatch table + * Core struct can then have ptr to dispatch table at the top + * Along with object ptrs for current and next OBJ + */ + +#include "vulkan_core.h" + +#define MAX_NUM_UNKNOWN_EXTS 250 + + // Loader-Layer version negotiation API. Versions add the following features: + // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr + // or vk_icdNegotiateLoaderLayerInterfaceVersion. + // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and + // vk_icdNegotiateLoaderLayerInterfaceVersion. +#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2 +#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1 + +#define VK_CURRENT_CHAIN_VERSION 1 + +// Typedef for use in the interfaces below +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); + +// Version negotiation values +typedef enum VkNegotiateLayerStructType { + LAYER_NEGOTIATE_UNINTIALIZED = 0, + LAYER_NEGOTIATE_INTERFACE_STRUCT = 1, +} VkNegotiateLayerStructType; + +// Version negotiation structures +typedef struct VkNegotiateLayerInterface { + VkNegotiateLayerStructType sType; + void *pNext; + uint32_t loaderLayerInterfaceVersion; + PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr; + PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr; +} VkNegotiateLayerInterface; + +// Version negotiation functions +typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct); + +// Function prototype for unknown physical device extension command +typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device); + +// ------------------------------------------------------------------------------------------------ +// CreateInstance and CreateDevice support structures + +/* Sub type of structure for instance and device loader ext of CreateInfo. + * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO + * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO + * then VkLayerFunction indicates struct type pointed to by pNext + */ +typedef enum VkLayerFunction_ { + VK_LAYER_LINK_INFO = 0, + VK_LOADER_DATA_CALLBACK = 1, + VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2, + VK_LOADER_FEATURES = 3, +} VkLayerFunction; + +typedef struct VkLayerInstanceLink_ { + struct VkLayerInstanceLink_ *pNext; + PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; + PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr; +} VkLayerInstanceLink; + +/* + * When creating the device chain the loader needs to pass + * down information about it's device structure needed at + * the end of the chain. Passing the data via the + * VkLayerDeviceInfo avoids issues with finding the + * exact instance being used. + */ +typedef struct VkLayerDeviceInfo_ { + void *device_info; + PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; +} VkLayerDeviceInfo; + +typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance, + void *object); +typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device, + void *object); +typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA); +typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction); + +typedef enum VkLoaderFeastureFlagBits { + VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING = 0x00000001, +} VkLoaderFlagBits; +typedef VkFlags VkLoaderFeatureFlags; + +typedef struct { + VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO + const void *pNext; + VkLayerFunction function; + union { + VkLayerInstanceLink *pLayerInfo; + PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData; + struct { + PFN_vkLayerCreateDevice pfnLayerCreateDevice; + PFN_vkLayerDestroyDevice pfnLayerDestroyDevice; + } layerDevice; + VkLoaderFeatureFlags loaderFeatures; + } u; +} VkLayerInstanceCreateInfo; + +typedef struct VkLayerDeviceLink_ { + struct VkLayerDeviceLink_ *pNext; + PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr; +} VkLayerDeviceLink; + +typedef struct { + VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO + const void *pNext; + VkLayerFunction function; + union { + VkLayerDeviceLink *pLayerInfo; + PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData; + } u; +} VkLayerDeviceCreateInfo; + +#ifdef __cplusplus +extern "C" { +#endif + +VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct); + +typedef enum VkChainType { + VK_CHAIN_TYPE_UNKNOWN = 0, + VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1, + VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2, + VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3, +} VkChainType; + +typedef struct VkChainHeader { + VkChainType type; + uint32_t version; + uint32_t size; +} VkChainHeader; + +typedef struct VkEnumerateInstanceExtensionPropertiesChain { + VkChainHeader header; + VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *, + VkExtensionProperties *); + const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink; + +#if defined(__cplusplus) + inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const { + return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties); + } +#endif +} VkEnumerateInstanceExtensionPropertiesChain; + +typedef struct VkEnumerateInstanceLayerPropertiesChain { + VkChainHeader header; + VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *); + const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink; + +#if defined(__cplusplus) + inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const { + return pfnNextLayer(pNextLink, pPropertyCount, pProperties); + } +#endif +} VkEnumerateInstanceLayerPropertiesChain; + +typedef struct VkEnumerateInstanceVersionChain { + VkChainHeader header; + VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *); + const struct VkEnumerateInstanceVersionChain *pNextLink; + +#if defined(__cplusplus) + inline VkResult CallDown(uint32_t *pApiVersion) const { + return pfnNextLayer(pNextLink, pApiVersion); + } +#endif +} VkEnumerateInstanceVersionChain; + +#ifdef __cplusplus +} +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_platform.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_platform.h new file mode 100644 index 0000000000..18e5ca34ce --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vk_platform.h @@ -0,0 +1,84 @@ +// +// File: vk_platform.h +// +/* +** Copyright 2014-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + + +#ifndef VK_PLATFORM_H_ +#define VK_PLATFORM_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/* +*************************************************************************************************** +* Platform-specific directives and type declarations +*************************************************************************************************** +*/ + +/* Platform-specific calling convention macros. + * + * Platforms should define these so that Vulkan clients call Vulkan commands + * with the same calling conventions that the Vulkan implementation expects. + * + * VKAPI_ATTR - Placed before the return type in function declarations. + * Useful for C++11 and GCC/Clang-style function attribute syntax. + * VKAPI_CALL - Placed after the return type in function declarations. + * Useful for MSVC-style calling convention syntax. + * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. + * + * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); + * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); + */ +#if defined(_WIN32) + // On Windows, Vulkan commands use the stdcall convention + #define VKAPI_ATTR + #define VKAPI_CALL __stdcall + #define VKAPI_PTR VKAPI_CALL +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 + #error "Vulkan is not supported for the 'armeabi' NDK ABI" +#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) + // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" + // calling convention, i.e. float parameters are passed in registers. This + // is true even if the rest of the application passes floats on the stack, + // as it does by default when compiling for the armeabi-v7a NDK ABI. + #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) + #define VKAPI_CALL + #define VKAPI_PTR VKAPI_ATTR +#else + // On other platforms, use the default calling convention + #define VKAPI_ATTR + #define VKAPI_CALL + #define VKAPI_PTR +#endif + +#if !defined(VK_NO_STDDEF_H) + #include +#endif // !defined(VK_NO_STDDEF_H) + +#if !defined(VK_NO_STDINT_H) + #if defined(_MSC_VER) && (_MSC_VER < 1600) + typedef signed __int8 int8_t; + typedef unsigned __int8 uint8_t; + typedef signed __int16 int16_t; + typedef unsigned __int16 uint16_t; + typedef signed __int32 int32_t; + typedef unsigned __int32 uint32_t; + typedef signed __int64 int64_t; + typedef unsigned __int64 uint64_t; + #else + #include + #endif +#endif // !defined(VK_NO_STDINT_H) + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.cppm b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.cppm new file mode 100644 index 0000000000..901e52a06d --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.cppm @@ -0,0 +1,10250 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +// Note: This module is still in an experimental state. +// Any feedback is welcome on https://github.com/KhronosGroup/Vulkan-Hpp/issues. + +module; + +#include + +#if defined( __cpp_lib_modules ) && !defined( VULKAN_HPP_ENABLE_STD_MODULE ) +# define VULKAN_HPP_ENABLE_STD_MODULE +#endif + +#include +#include +#include +#include +#include +#include +#ifndef VULKAN_HPP_NO_TO_STRING +# include +#endif + +export module vulkan_hpp; + +export namespace VULKAN_HPP_NAMESPACE +{ + //===================================== + //=== HARDCODED TYPEs AND FUNCTIONs === + //===================================== + using VULKAN_HPP_NAMESPACE::ArrayWrapper1D; + using VULKAN_HPP_NAMESPACE::ArrayWrapper2D; + using VULKAN_HPP_NAMESPACE::Flags; + using VULKAN_HPP_NAMESPACE::FlagTraits; + + namespace detail + { + using VULKAN_HPP_NAMESPACE::detail::DispatchLoaderBase; + using VULKAN_HPP_NAMESPACE::detail::DispatchLoaderDynamic; +#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER ) +# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 + using VULKAN_HPP_NAMESPACE::detail::defaultDispatchLoaderDynamic; +# endif +#endif +#if !defined( VK_NO_PROTOTYPES ) + using VULKAN_HPP_NAMESPACE::detail::DispatchLoaderStatic; + using VULKAN_HPP_NAMESPACE::detail::getDispatchLoaderStatic; +#endif /*VK_NO_PROTOTYPES*/ + } // namespace detail + + using VULKAN_HPP_NAMESPACE::operator&; + using VULKAN_HPP_NAMESPACE::operator|; + using VULKAN_HPP_NAMESPACE::operator^; + using VULKAN_HPP_NAMESPACE::operator~; + using VULKAN_HPP_DEFAULT_DISPATCHER_TYPE; + +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + using VULKAN_HPP_NAMESPACE::ArrayProxy; + using VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries; + using VULKAN_HPP_NAMESPACE::Optional; + using VULKAN_HPP_NAMESPACE::StridedArrayProxy; + using VULKAN_HPP_NAMESPACE::StructureChain; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + namespace detail + { + using VULKAN_HPP_NAMESPACE::detail::ObjectDestroy; + using VULKAN_HPP_NAMESPACE::detail::ObjectDestroyShared; + using VULKAN_HPP_NAMESPACE::detail::ObjectFree; + using VULKAN_HPP_NAMESPACE::detail::ObjectFreeShared; + using VULKAN_HPP_NAMESPACE::detail::ObjectRelease; + using VULKAN_HPP_NAMESPACE::detail::ObjectReleaseShared; + using VULKAN_HPP_NAMESPACE::detail::PoolFree; + using VULKAN_HPP_NAMESPACE::detail::PoolFreeShared; + } // namespace detail + + using VULKAN_HPP_NAMESPACE::SharedHandle; + using VULKAN_HPP_NAMESPACE::UniqueHandle; +#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ + + using VULKAN_HPP_NAMESPACE::exchange; + + //================== + //=== BASE TYPEs === + //================== + using VULKAN_HPP_NAMESPACE::Bool32; + using VULKAN_HPP_NAMESPACE::DeviceAddress; + using VULKAN_HPP_NAMESPACE::DeviceSize; + using VULKAN_HPP_NAMESPACE::RemoteAddressNV; + using VULKAN_HPP_NAMESPACE::SampleMask; + + //============= + //=== ENUMs === + //============= + using VULKAN_HPP_NAMESPACE::CppType; + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::AccessFlagBits; + using VULKAN_HPP_NAMESPACE::AccessFlags; + using VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlagBits; + using VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags; + using VULKAN_HPP_NAMESPACE::AttachmentLoadOp; + using VULKAN_HPP_NAMESPACE::AttachmentStoreOp; + using VULKAN_HPP_NAMESPACE::BlendFactor; + using VULKAN_HPP_NAMESPACE::BlendOp; + using VULKAN_HPP_NAMESPACE::BorderColor; + using VULKAN_HPP_NAMESPACE::BufferCreateFlagBits; + using VULKAN_HPP_NAMESPACE::BufferCreateFlags; + using VULKAN_HPP_NAMESPACE::BufferUsageFlagBits; + using VULKAN_HPP_NAMESPACE::BufferUsageFlags; + using VULKAN_HPP_NAMESPACE::BufferViewCreateFlagBits; + using VULKAN_HPP_NAMESPACE::BufferViewCreateFlags; + using VULKAN_HPP_NAMESPACE::ColorComponentFlagBits; + using VULKAN_HPP_NAMESPACE::ColorComponentFlags; + using VULKAN_HPP_NAMESPACE::CommandBufferLevel; + using VULKAN_HPP_NAMESPACE::CommandBufferResetFlagBits; + using VULKAN_HPP_NAMESPACE::CommandBufferResetFlags; + using VULKAN_HPP_NAMESPACE::CommandBufferUsageFlagBits; + using VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags; + using VULKAN_HPP_NAMESPACE::CommandPoolCreateFlagBits; + using VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags; + using VULKAN_HPP_NAMESPACE::CommandPoolResetFlagBits; + using VULKAN_HPP_NAMESPACE::CommandPoolResetFlags; + using VULKAN_HPP_NAMESPACE::CompareOp; + using VULKAN_HPP_NAMESPACE::ComponentSwizzle; + using VULKAN_HPP_NAMESPACE::CullModeFlagBits; + using VULKAN_HPP_NAMESPACE::CullModeFlags; + using VULKAN_HPP_NAMESPACE::DependencyFlagBits; + using VULKAN_HPP_NAMESPACE::DependencyFlags; + using VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlagBits; + using VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags; + using VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlagBits; + using VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlagBits; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags; + using VULKAN_HPP_NAMESPACE::DescriptorType; + using VULKAN_HPP_NAMESPACE::DeviceCreateFlagBits; + using VULKAN_HPP_NAMESPACE::DeviceCreateFlags; + using VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlagBits; + using VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags; + using VULKAN_HPP_NAMESPACE::DynamicState; + using VULKAN_HPP_NAMESPACE::EventCreateFlagBits; + using VULKAN_HPP_NAMESPACE::EventCreateFlags; + using VULKAN_HPP_NAMESPACE::FenceCreateFlagBits; + using VULKAN_HPP_NAMESPACE::FenceCreateFlags; + using VULKAN_HPP_NAMESPACE::Filter; + using VULKAN_HPP_NAMESPACE::Format; + using VULKAN_HPP_NAMESPACE::FormatFeatureFlagBits; + using VULKAN_HPP_NAMESPACE::FormatFeatureFlags; + using VULKAN_HPP_NAMESPACE::FramebufferCreateFlagBits; + using VULKAN_HPP_NAMESPACE::FramebufferCreateFlags; + using VULKAN_HPP_NAMESPACE::FrontFace; + using VULKAN_HPP_NAMESPACE::ImageAspectFlagBits; + using VULKAN_HPP_NAMESPACE::ImageAspectFlags; + using VULKAN_HPP_NAMESPACE::ImageCreateFlagBits; + using VULKAN_HPP_NAMESPACE::ImageCreateFlags; + using VULKAN_HPP_NAMESPACE::ImageLayout; + using VULKAN_HPP_NAMESPACE::ImageTiling; + using VULKAN_HPP_NAMESPACE::ImageType; + using VULKAN_HPP_NAMESPACE::ImageUsageFlagBits; + using VULKAN_HPP_NAMESPACE::ImageUsageFlags; + using VULKAN_HPP_NAMESPACE::ImageViewCreateFlagBits; + using VULKAN_HPP_NAMESPACE::ImageViewCreateFlags; + using VULKAN_HPP_NAMESPACE::ImageViewType; + using VULKAN_HPP_NAMESPACE::IndexType; + using VULKAN_HPP_NAMESPACE::InstanceCreateFlagBits; + using VULKAN_HPP_NAMESPACE::InstanceCreateFlags; + using VULKAN_HPP_NAMESPACE::InternalAllocationType; + using VULKAN_HPP_NAMESPACE::LogicOp; + using VULKAN_HPP_NAMESPACE::MemoryHeapFlagBits; + using VULKAN_HPP_NAMESPACE::MemoryHeapFlags; + using VULKAN_HPP_NAMESPACE::MemoryMapFlagBits; + using VULKAN_HPP_NAMESPACE::MemoryMapFlags; + using VULKAN_HPP_NAMESPACE::MemoryPropertyFlagBits; + using VULKAN_HPP_NAMESPACE::MemoryPropertyFlags; + using VULKAN_HPP_NAMESPACE::ObjectType; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceType; + using VULKAN_HPP_NAMESPACE::PipelineBindPoint; + using VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion; + using VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineStageFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineStageFlags; + using VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags; + using VULKAN_HPP_NAMESPACE::PolygonMode; + using VULKAN_HPP_NAMESPACE::PrimitiveTopology; + using VULKAN_HPP_NAMESPACE::QueryControlFlagBits; + using VULKAN_HPP_NAMESPACE::QueryControlFlags; + using VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlagBits; + using VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags; + using VULKAN_HPP_NAMESPACE::QueryPoolCreateFlagBits; + using VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags; + using VULKAN_HPP_NAMESPACE::QueryResultFlagBits; + using VULKAN_HPP_NAMESPACE::QueryResultFlags; + using VULKAN_HPP_NAMESPACE::QueryType; + using VULKAN_HPP_NAMESPACE::QueueFlagBits; + using VULKAN_HPP_NAMESPACE::QueueFlags; + using VULKAN_HPP_NAMESPACE::RenderPassCreateFlagBits; + using VULKAN_HPP_NAMESPACE::RenderPassCreateFlags; + using VULKAN_HPP_NAMESPACE::Result; + using VULKAN_HPP_NAMESPACE::SampleCountFlagBits; + using VULKAN_HPP_NAMESPACE::SampleCountFlags; + using VULKAN_HPP_NAMESPACE::SamplerAddressMode; + using VULKAN_HPP_NAMESPACE::SamplerCreateFlagBits; + using VULKAN_HPP_NAMESPACE::SamplerCreateFlags; + using VULKAN_HPP_NAMESPACE::SamplerMipmapMode; + using VULKAN_HPP_NAMESPACE::SemaphoreCreateFlagBits; + using VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags; + using VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlagBits; + using VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags; + using VULKAN_HPP_NAMESPACE::ShaderStageFlagBits; + using VULKAN_HPP_NAMESPACE::ShaderStageFlags; + using VULKAN_HPP_NAMESPACE::SharingMode; + using VULKAN_HPP_NAMESPACE::SparseImageFormatFlagBits; + using VULKAN_HPP_NAMESPACE::SparseImageFormatFlags; + using VULKAN_HPP_NAMESPACE::SparseMemoryBindFlagBits; + using VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags; + using VULKAN_HPP_NAMESPACE::StencilFaceFlagBits; + using VULKAN_HPP_NAMESPACE::StencilFaceFlags; + using VULKAN_HPP_NAMESPACE::StencilOp; + using VULKAN_HPP_NAMESPACE::StructureType; + using VULKAN_HPP_NAMESPACE::SubpassContents; + using VULKAN_HPP_NAMESPACE::SubpassDescriptionFlagBits; + using VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags; + using VULKAN_HPP_NAMESPACE::SystemAllocationScope; + using VULKAN_HPP_NAMESPACE::VendorId; + using VULKAN_HPP_NAMESPACE::VertexInputRate; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_NAMESPACE::ChromaLocation; + using VULKAN_HPP_NAMESPACE::ChromaLocationKHR; + using VULKAN_HPP_NAMESPACE::CommandPoolTrimFlagBits; + using VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags; + using VULKAN_HPP_NAMESPACE::CommandPoolTrimFlagsKHR; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlagBits; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlagsKHR; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateTypeKHR; + using VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlagBits; + using VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags; + using VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlagsKHR; + using VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits; + using VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags; + using VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagsKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagBits; + using VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags; + using VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits; + using VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags; + using VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsKHR; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlagBits; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlagsKHR; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagsKHR; + using VULKAN_HPP_NAMESPACE::FenceImportFlagBits; + using VULKAN_HPP_NAMESPACE::FenceImportFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::FenceImportFlags; + using VULKAN_HPP_NAMESPACE::FenceImportFlagsKHR; + using VULKAN_HPP_NAMESPACE::MemoryAllocateFlagBits; + using VULKAN_HPP_NAMESPACE::MemoryAllocateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::MemoryAllocateFlags; + using VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsKHR; + using VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlagBits; + using VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags; + using VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlagsKHR; + using VULKAN_HPP_NAMESPACE::PointClippingBehavior; + using VULKAN_HPP_NAMESPACE::PointClippingBehaviorKHR; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversionKHR; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrRange; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrRangeKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreImportFlagBits; + using VULKAN_HPP_NAMESPACE::SemaphoreImportFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreImportFlags; + using VULKAN_HPP_NAMESPACE::SemaphoreImportFlagsKHR; + using VULKAN_HPP_NAMESPACE::SubgroupFeatureFlagBits; + using VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags; + using VULKAN_HPP_NAMESPACE::TessellationDomainOrigin; + using VULKAN_HPP_NAMESPACE::TessellationDomainOriginKHR; + + //=== VK_VERSION_1_2 === + using VULKAN_HPP_NAMESPACE::DescriptorBindingFlagBits; + using VULKAN_HPP_NAMESPACE::DescriptorBindingFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DescriptorBindingFlags; + using VULKAN_HPP_NAMESPACE::DescriptorBindingFlagsEXT; + using VULKAN_HPP_NAMESPACE::DriverId; + using VULKAN_HPP_NAMESPACE::DriverIdKHR; + using VULKAN_HPP_NAMESPACE::ResolveModeFlagBits; + using VULKAN_HPP_NAMESPACE::ResolveModeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::ResolveModeFlags; + using VULKAN_HPP_NAMESPACE::ResolveModeFlagsKHR; + using VULKAN_HPP_NAMESPACE::SamplerReductionMode; + using VULKAN_HPP_NAMESPACE::SamplerReductionModeEXT; + using VULKAN_HPP_NAMESPACE::SemaphoreType; + using VULKAN_HPP_NAMESPACE::SemaphoreTypeKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreWaitFlagBits; + using VULKAN_HPP_NAMESPACE::SemaphoreWaitFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags; + using VULKAN_HPP_NAMESPACE::SemaphoreWaitFlagsKHR; + using VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence; + using VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependenceKHR; + + //=== VK_VERSION_1_3 === + using VULKAN_HPP_NAMESPACE::AccessFlagBits2; + using VULKAN_HPP_NAMESPACE::AccessFlagBits2KHR; + using VULKAN_HPP_NAMESPACE::AccessFlags2; + using VULKAN_HPP_NAMESPACE::AccessFlags2KHR; + using VULKAN_HPP_NAMESPACE::FormatFeatureFlagBits2; + using VULKAN_HPP_NAMESPACE::FormatFeatureFlagBits2KHR; + using VULKAN_HPP_NAMESPACE::FormatFeatureFlags2; + using VULKAN_HPP_NAMESPACE::FormatFeatureFlags2KHR; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlagBits; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlagsEXT; + using VULKAN_HPP_NAMESPACE::PipelineStageFlagBits2; + using VULKAN_HPP_NAMESPACE::PipelineStageFlagBits2KHR; + using VULKAN_HPP_NAMESPACE::PipelineStageFlags2; + using VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR; + using VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlagBits; + using VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags; + using VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlagsEXT; + using VULKAN_HPP_NAMESPACE::RenderingFlagBits; + using VULKAN_HPP_NAMESPACE::RenderingFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::RenderingFlags; + using VULKAN_HPP_NAMESPACE::RenderingFlagsKHR; + using VULKAN_HPP_NAMESPACE::SubmitFlagBits; + using VULKAN_HPP_NAMESPACE::SubmitFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::SubmitFlags; + using VULKAN_HPP_NAMESPACE::SubmitFlagsKHR; + using VULKAN_HPP_NAMESPACE::ToolPurposeFlagBits; + using VULKAN_HPP_NAMESPACE::ToolPurposeFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ToolPurposeFlags; + using VULKAN_HPP_NAMESPACE::ToolPurposeFlagsEXT; + + //=== VK_VERSION_1_4 === + using VULKAN_HPP_NAMESPACE::BufferUsageFlagBits2; + using VULKAN_HPP_NAMESPACE::BufferUsageFlagBits2KHR; + using VULKAN_HPP_NAMESPACE::BufferUsageFlags2; + using VULKAN_HPP_NAMESPACE::BufferUsageFlags2KHR; + using VULKAN_HPP_NAMESPACE::HostImageCopyFlagBits; + using VULKAN_HPP_NAMESPACE::HostImageCopyFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::HostImageCopyFlags; + using VULKAN_HPP_NAMESPACE::HostImageCopyFlagsEXT; + using VULKAN_HPP_NAMESPACE::LineRasterizationMode; + using VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT; + using VULKAN_HPP_NAMESPACE::LineRasterizationModeKHR; + using VULKAN_HPP_NAMESPACE::MemoryUnmapFlagBits; + using VULKAN_HPP_NAMESPACE::MemoryUnmapFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::MemoryUnmapFlags; + using VULKAN_HPP_NAMESPACE::MemoryUnmapFlagsKHR; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlagBits2; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlagBits2KHR; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlags2; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlags2KHR; + using VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior; + using VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehaviorEXT; + using VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior; + using VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehaviorEXT; + using VULKAN_HPP_NAMESPACE::QueueGlobalPriority; + using VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT; + using VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR; + + //=== VK_KHR_surface === + using VULKAN_HPP_NAMESPACE::ColorSpaceKHR; + using VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR; + using VULKAN_HPP_NAMESPACE::PresentModeKHR; + using VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR; + using VULKAN_HPP_NAMESPACE::SwapchainCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR; + + //=== VK_KHR_display === + using VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR; + using VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR; + using VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + using VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + using VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + using VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + using VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + using VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::DebugReportFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT; + using VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT; + + //=== VK_AMD_rasterization_order === + using VULKAN_HPP_NAMESPACE::RasterizationOrderAMD; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_NAMESPACE::QueryResultStatusKHR; + using VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoCapabilityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoCodingControlFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEndCodingFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateFlagsKHR; + + //=== VK_KHR_video_decode_queue === + using VULKAN_HPP_NAMESPACE::VideoDecodeCapabilityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeCapabilityFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeUsageFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeUsageFlagsKHR; + + //=== VK_EXT_transform_feedback === + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT; + + //=== VK_KHR_video_encode_h264 === + using VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264StdFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264StdFlagsKHR; + + //=== VK_KHR_video_encode_h265 === + using VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265StdFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265StdFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265TransformBlockSizeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265TransformBlockSizeFlagsKHR; + + //=== VK_KHR_video_decode_h264 === + using VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsKHR; + + //=== VK_AMD_shader_info === + using VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + using VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagBitsGGP; + using VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + using VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagBitsNV; + using VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsNV; + using VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBitsNV; + using VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV; + + //=== VK_EXT_validation_flags === + using VULKAN_HPP_NAMESPACE::ValidationCheckEXT; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + using VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagBitsNN; + using VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_conditional_rendering === + using VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT; + + //=== VK_EXT_display_surface_counter === + using VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT; + + //=== VK_EXT_display_control === + using VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT; + using VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT; + using VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT; + + //=== VK_NV_viewport_swizzle === + using VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagBitsNV; + using VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV; + using VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV; + + //=== VK_EXT_discard_rectangles === + using VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT; + using VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT; + + //=== VK_EXT_conservative_rasterization === + using VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT; + + //=== VK_EXT_depth_clip_enable === + using VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT; + + //=== VK_KHR_performance_query === + using VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagsKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + using VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagBitsMVK; + using VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + using VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagBitsMVK; + using VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT; + + //=== VK_EXT_blend_operation_advanced === + using VULKAN_HPP_NAMESPACE::BlendOverlapEXT; + + //=== VK_NV_fragment_coverage_to_color === + using VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagBitsNV; + using VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV; + using VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagBitsNV; + using VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR; + using VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV; + using VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR; + using VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR; + using VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeNV; + using VULKAN_HPP_NAMESPACE::GeometryFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::GeometryFlagBitsNV; + using VULKAN_HPP_NAMESPACE::GeometryFlagsKHR; + using VULKAN_HPP_NAMESPACE::GeometryFlagsNV; + using VULKAN_HPP_NAMESPACE::GeometryInstanceFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::GeometryInstanceFlagBitsNV; + using VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR; + using VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsNV; + using VULKAN_HPP_NAMESPACE::GeometryTypeKHR; + using VULKAN_HPP_NAMESPACE::GeometryTypeNV; + + //=== VK_KHR_ray_tracing_pipeline === + using VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR; + using VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeNV; + using VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR; + + //=== VK_NV_framebuffer_mixed_samples === + using VULKAN_HPP_NAMESPACE::CoverageModulationModeNV; + using VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagBitsNV; + using VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT; + using VULKAN_HPP_NAMESPACE::ValidationCacheHeaderVersionEXT; + + //=== VK_NV_shading_rate_image === + using VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV; + using VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV; + + //=== VK_AMD_pipeline_compiler_control === + using VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagBitsAMD; + using VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD; + + //=== VK_AMD_memory_overallocation_behavior === + using VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL; + using VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + using VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagBitsFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + using VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + using VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR; + + //=== VK_AMD_shader_core_properties2 === + using VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagBitsAMD; + using VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD; + + //=== VK_EXT_validation_features === + using VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT; + using VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT; + + //=== VK_NV_coverage_reduction_mode === + using VULKAN_HPP_NAMESPACE::CoverageReductionModeNV; + using VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagBitsNV; + using VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV; + + //=== VK_EXT_provoking_vertex === + using VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + using VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + using VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT; + + //=== VK_KHR_pipeline_executable_properties === + using VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagBitsNV; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV; + using VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV; + using VULKAN_HPP_NAMESPACE::IndirectStateFlagBitsNV; + using VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV; + + //=== VK_EXT_depth_bias_control === + using VULKAN_HPP_NAMESPACE::DepthBiasRepresentationEXT; + + //=== VK_EXT_device_memory_report === + using VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT; + using VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT; + + //=== VK_KHR_video_encode_queue === + using VULKAN_HPP_NAMESPACE::VideoEncodeCapabilityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeCapabilityFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeContentFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeContentFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeTuningModeKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeUsageFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeUsageFlagsKHR; + + //=== VK_NV_device_diagnostics_config === + using VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagBitsNV; + using VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV; + + //=== VK_QCOM_tile_shading === + using VULKAN_HPP_NAMESPACE::TileShadingRenderPassFlagBitsQCOM; + using VULKAN_HPP_NAMESPACE::TileShadingRenderPassFlagsQCOM; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + using VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagsEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_graphics_pipeline_library === + using VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT; + + //=== VK_NV_fragment_shading_rate_enums === + using VULKAN_HPP_NAMESPACE::FragmentShadingRateNV; + using VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV; + + //=== VK_NV_ray_tracing_motion_blur === + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagBitsNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagBitsNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV; + + //=== VK_EXT_image_compression_control === + using VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT; + using VULKAN_HPP_NAMESPACE::ImageCompressionFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT; + + //=== VK_EXT_device_fault === + using VULKAN_HPP_NAMESPACE::DeviceFaultAddressTypeEXT; + using VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionEXT; + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + using VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_device_address_binding_report === + using VULKAN_HPP_NAMESPACE::DeviceAddressBindingFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::DeviceAddressBindingFlagsEXT; + using VULKAN_HPP_NAMESPACE::DeviceAddressBindingTypeEXT; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagBitsFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagBitsFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_frame_boundary === + using VULKAN_HPP_NAMESPACE::FrameBoundaryFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::FrameBoundaryFlagsEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + using VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagBitsQNX; + using VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_NAMESPACE::BuildMicromapFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::BuildMicromapFlagsEXT; + using VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT; + using VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT; + using VULKAN_HPP_NAMESPACE::MicromapCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::MicromapCreateFlagsEXT; + using VULKAN_HPP_NAMESPACE::MicromapTypeEXT; + using VULKAN_HPP_NAMESPACE::OpacityMicromapFormatEXT; + using VULKAN_HPP_NAMESPACE::OpacityMicromapSpecialIndexEXT; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + using VULKAN_HPP_NAMESPACE::DisplacementMicromapFormatNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_ARM_scheduling_controls === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFlagBitsARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFlagsARM; + + //=== VK_NV_memory_decompression === + using VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagBitsNV; + using VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagsNV; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + using VULKAN_HPP_NAMESPACE::RayTracingLssIndexingModeNV; + using VULKAN_HPP_NAMESPACE::RayTracingLssPrimitiveEndCapsModeNV; + + //=== VK_EXT_subpass_merge_feedback === + using VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT; + + //=== VK_LUNARG_direct_driver_loading === + using VULKAN_HPP_NAMESPACE::DirectDriverLoadingFlagBitsLUNARG; + using VULKAN_HPP_NAMESPACE::DirectDriverLoadingFlagsLUNARG; + using VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG; + + //=== VK_ARM_tensors === + using VULKAN_HPP_NAMESPACE::TensorCreateFlagBitsARM; + using VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM; + using VULKAN_HPP_NAMESPACE::TensorTilingARM; + using VULKAN_HPP_NAMESPACE::TensorUsageFlagBitsARM; + using VULKAN_HPP_NAMESPACE::TensorUsageFlagsARM; + using VULKAN_HPP_NAMESPACE::TensorViewCreateFlagBitsARM; + using VULKAN_HPP_NAMESPACE::TensorViewCreateFlagsARM; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_NAMESPACE::OpticalFlowExecuteFlagBitsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowExecuteFlagsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagBitsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowPerformanceLevelNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowSessionBindingPointNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateFlagBitsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateFlagsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowUsageFlagBitsNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowUsageFlagsNV; + + //=== VK_AMD_anti_lag === + using VULKAN_HPP_NAMESPACE::AntiLagModeAMD; + using VULKAN_HPP_NAMESPACE::AntiLagStageAMD; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT; + using VULKAN_HPP_NAMESPACE::ShaderCreateFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::ShaderCreateFlagsEXT; + + //=== VK_KHR_surface_maintenance1 === + using VULKAN_HPP_NAMESPACE::PresentGravityFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PresentGravityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::PresentGravityFlagsEXT; + using VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR; + using VULKAN_HPP_NAMESPACE::PresentScalingFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::PresentScalingFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::PresentScalingFlagsEXT; + using VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR; + + //=== VK_NV_ray_tracing_invocation_reorder === + using VULKAN_HPP_NAMESPACE::RayTracingInvocationReorderModeNV; + + //=== VK_NV_cooperative_vector === + using VULKAN_HPP_NAMESPACE::ComponentTypeKHR; + using VULKAN_HPP_NAMESPACE::ComponentTypeNV; + using VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV; + + //=== VK_EXT_layer_settings === + using VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT; + + //=== VK_NV_low_latency2 === + using VULKAN_HPP_NAMESPACE::LatencyMarkerNV; + using VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeNV; + + //=== VK_KHR_cooperative_matrix === + using VULKAN_HPP_NAMESPACE::ScopeKHR; + using VULKAN_HPP_NAMESPACE::ScopeNV; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchFlagBitsARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchFlagsARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointTypeARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateFlagBitsARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateFlagsARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM; + + //=== VK_KHR_video_encode_av1 === + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilityFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilityFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1PredictionModeKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlGroupKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1StdFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1StdFlagsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1SuperblockSizeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1SuperblockSizeFlagsKHR; + + //=== VK_QCOM_image_processing2 === + using VULKAN_HPP_NAMESPACE::BlockMatchWindowCompareModeQCOM; + + //=== VK_QCOM_filter_cubic_weights === + using VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM; + + //=== VK_MSFT_layered_driver === + using VULKAN_HPP_NAMESPACE::LayeredDriverUnderlyingApiMSFT; + + //=== VK_KHR_calibrated_timestamps === + using VULKAN_HPP_NAMESPACE::TimeDomainEXT; + using VULKAN_HPP_NAMESPACE::TimeDomainKHR; + + //=== VK_NV_display_stereo === + using VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoTypeNV; + + //=== VK_KHR_video_encode_intra_refresh === + using VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagBitsKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagsKHR; + + //=== VK_KHR_maintenance7 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiKHR; + + //=== VK_NV_cluster_acceleration_structure === + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureAddressResolutionFlagBitsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureAddressResolutionFlagsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagBitsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryFlagBitsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryFlagsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureIndexFormatFlagBitsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureIndexFormatFlagsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpModeNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpTypeNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTypeNV; + + //=== VK_NV_partitioned_acceleration_structure === + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstanceFlagBitsNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstanceFlagsNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureOpTypeNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagsEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagBitsEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT; + + //=== VK_KHR_maintenance8 === + using VULKAN_HPP_NAMESPACE::AccessFlagBits3KHR; + using VULKAN_HPP_NAMESPACE::AccessFlags3KHR; + + //=== VK_EXT_depth_clamp_control === + using VULKAN_HPP_NAMESPACE::DepthClampModeEXT; + + //=== VK_KHR_maintenance9 === + using VULKAN_HPP_NAMESPACE::DefaultVertexAttributeValueKHR; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + using VULKAN_HPP_NAMESPACE::SurfaceCreateFlagBitsOHOS; + using VULKAN_HPP_NAMESPACE::SurfaceCreateFlagsOHOS; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //========================= + //=== Index Type Traits === + //========================= + using VULKAN_HPP_NAMESPACE::IndexTypeValue; + + //====================== + //=== ENUM to_string === + //====================== +#if !defined( VULKAN_HPP_NO_TO_STRING ) + using VULKAN_HPP_NAMESPACE::to_string; + using VULKAN_HPP_NAMESPACE::toHexString; +#endif /*VULKAN_HPP_NO_TO_STRING*/ + + //============================= + //=== EXCEPTIONs AND ERRORs === + //============================= +#if !defined( VULKAN_HPP_NO_EXCEPTIONS ) + using VULKAN_HPP_NAMESPACE::DeviceLostError; + using VULKAN_HPP_NAMESPACE::Error; + using VULKAN_HPP_NAMESPACE::errorCategory; + using VULKAN_HPP_NAMESPACE::ErrorCategoryImpl; + using VULKAN_HPP_NAMESPACE::ExtensionNotPresentError; + using VULKAN_HPP_NAMESPACE::FeatureNotPresentError; + using VULKAN_HPP_NAMESPACE::FormatNotSupportedError; + using VULKAN_HPP_NAMESPACE::FragmentationError; + using VULKAN_HPP_NAMESPACE::FragmentedPoolError; + using VULKAN_HPP_NAMESPACE::ImageUsageNotSupportedKHRError; + using VULKAN_HPP_NAMESPACE::IncompatibleDisplayKHRError; + using VULKAN_HPP_NAMESPACE::IncompatibleDriverError; + using VULKAN_HPP_NAMESPACE::InitializationFailedError; + using VULKAN_HPP_NAMESPACE::InvalidDrmFormatModifierPlaneLayoutEXTError; + using VULKAN_HPP_NAMESPACE::InvalidExternalHandleError; + using VULKAN_HPP_NAMESPACE::InvalidOpaqueCaptureAddressError; + using VULKAN_HPP_NAMESPACE::InvalidShaderNVError; + using VULKAN_HPP_NAMESPACE::LayerNotPresentError; + using VULKAN_HPP_NAMESPACE::LogicError; + using VULKAN_HPP_NAMESPACE::make_error_code; + using VULKAN_HPP_NAMESPACE::make_error_condition; + using VULKAN_HPP_NAMESPACE::MemoryMapFailedError; + using VULKAN_HPP_NAMESPACE::NativeWindowInUseKHRError; + using VULKAN_HPP_NAMESPACE::NotPermittedError; + using VULKAN_HPP_NAMESPACE::OutOfDateKHRError; + using VULKAN_HPP_NAMESPACE::OutOfDeviceMemoryError; + using VULKAN_HPP_NAMESPACE::OutOfHostMemoryError; + using VULKAN_HPP_NAMESPACE::OutOfPoolMemoryError; + using VULKAN_HPP_NAMESPACE::SurfaceLostKHRError; + using VULKAN_HPP_NAMESPACE::SystemError; + using VULKAN_HPP_NAMESPACE::TooManyObjectsError; + using VULKAN_HPP_NAMESPACE::UnknownError; + using VULKAN_HPP_NAMESPACE::ValidationFailedEXTError; + using VULKAN_HPP_NAMESPACE::VideoPictureLayoutNotSupportedKHRError; + using VULKAN_HPP_NAMESPACE::VideoProfileCodecNotSupportedKHRError; + using VULKAN_HPP_NAMESPACE::VideoProfileFormatNotSupportedKHRError; + using VULKAN_HPP_NAMESPACE::VideoProfileOperationNotSupportedKHRError; + using VULKAN_HPP_NAMESPACE::VideoStdVersionNotSupportedKHRError; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + using VULKAN_HPP_NAMESPACE::FullScreenExclusiveModeLostEXTError; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + using VULKAN_HPP_NAMESPACE::CompressionExhaustedEXTError; + using VULKAN_HPP_NAMESPACE::InvalidVideoStdParametersKHRError; + using VULKAN_HPP_NAMESPACE::NotEnoughSpaceKHRError; +#endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + using VULKAN_HPP_NAMESPACE::ResultValue; + using VULKAN_HPP_NAMESPACE::ResultValueType; + + //=========================== + //=== CONSTEXPR CONSTANTs === + //=========================== + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::AttachmentUnused; + using VULKAN_HPP_NAMESPACE::False; + using VULKAN_HPP_NAMESPACE::LodClampNone; + using VULKAN_HPP_NAMESPACE::MaxDescriptionSize; + using VULKAN_HPP_NAMESPACE::MaxExtensionNameSize; + using VULKAN_HPP_NAMESPACE::MaxMemoryHeaps; + using VULKAN_HPP_NAMESPACE::MaxMemoryTypes; + using VULKAN_HPP_NAMESPACE::MaxPhysicalDeviceNameSize; + using VULKAN_HPP_NAMESPACE::QueueFamilyIgnored; + using VULKAN_HPP_NAMESPACE::RemainingArrayLayers; + using VULKAN_HPP_NAMESPACE::RemainingMipLevels; + using VULKAN_HPP_NAMESPACE::SubpassExternal; + using VULKAN_HPP_NAMESPACE::True; + using VULKAN_HPP_NAMESPACE::UuidSize; + using VULKAN_HPP_NAMESPACE::WholeSize; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_NAMESPACE::LuidSize; + using VULKAN_HPP_NAMESPACE::MaxDeviceGroupSize; + using VULKAN_HPP_NAMESPACE::QueueFamilyExternal; + + //=== VK_VERSION_1_2 === + using VULKAN_HPP_NAMESPACE::MaxDriverInfoSize; + using VULKAN_HPP_NAMESPACE::MaxDriverNameSize; + + //=== VK_VERSION_1_4 === + using VULKAN_HPP_NAMESPACE::MaxGlobalPrioritySize; + + //=== VK_KHR_surface === + using VULKAN_HPP_NAMESPACE::KHRSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSurfaceSpecVersion; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_NAMESPACE::KHRSwapchainExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSwapchainSpecVersion; + + //=== VK_KHR_display === + using VULKAN_HPP_NAMESPACE::KHRDisplayExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDisplaySpecVersion; + + //=== VK_KHR_display_swapchain === + using VULKAN_HPP_NAMESPACE::KHRDisplaySwapchainExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDisplaySwapchainSpecVersion; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + using VULKAN_HPP_NAMESPACE::KHRXlibSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRXlibSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + using VULKAN_HPP_NAMESPACE::KHRXcbSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRXcbSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + using VULKAN_HPP_NAMESPACE::KHRWaylandSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRWaylandSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + using VULKAN_HPP_NAMESPACE::KHRAndroidSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRAndroidSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + using VULKAN_HPP_NAMESPACE::KHRWin32SurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRWin32SurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::EXTDebugReportExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDebugReportSpecVersion; + + //=== VK_NV_glsl_shader === + using VULKAN_HPP_NAMESPACE::NVGlslShaderExtensionName; + using VULKAN_HPP_NAMESPACE::NVGlslShaderSpecVersion; + + //=== VK_EXT_depth_range_unrestricted === + using VULKAN_HPP_NAMESPACE::EXTDepthRangeUnrestrictedExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDepthRangeUnrestrictedSpecVersion; + + //=== VK_KHR_sampler_mirror_clamp_to_edge === + using VULKAN_HPP_NAMESPACE::KHRSamplerMirrorClampToEdgeExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSamplerMirrorClampToEdgeSpecVersion; + + //=== VK_IMG_filter_cubic === + using VULKAN_HPP_NAMESPACE::IMGFilterCubicExtensionName; + using VULKAN_HPP_NAMESPACE::IMGFilterCubicSpecVersion; + + //=== VK_AMD_rasterization_order === + using VULKAN_HPP_NAMESPACE::AMDRasterizationOrderExtensionName; + using VULKAN_HPP_NAMESPACE::AMDRasterizationOrderSpecVersion; + + //=== VK_AMD_shader_trinary_minmax === + using VULKAN_HPP_NAMESPACE::AMDShaderTrinaryMinmaxExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderTrinaryMinmaxSpecVersion; + + //=== VK_AMD_shader_explicit_vertex_parameter === + using VULKAN_HPP_NAMESPACE::AMDShaderExplicitVertexParameterExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderExplicitVertexParameterSpecVersion; + + //=== VK_EXT_debug_marker === + using VULKAN_HPP_NAMESPACE::EXTDebugMarkerExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDebugMarkerSpecVersion; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_NAMESPACE::KHRVideoQueueExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoQueueSpecVersion; + + //=== VK_KHR_video_decode_queue === + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeQueueExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeQueueSpecVersion; + + //=== VK_AMD_gcn_shader === + using VULKAN_HPP_NAMESPACE::AMDGcnShaderExtensionName; + using VULKAN_HPP_NAMESPACE::AMDGcnShaderSpecVersion; + + //=== VK_NV_dedicated_allocation === + using VULKAN_HPP_NAMESPACE::NVDedicatedAllocationExtensionName; + using VULKAN_HPP_NAMESPACE::NVDedicatedAllocationSpecVersion; + + //=== VK_EXT_transform_feedback === + using VULKAN_HPP_NAMESPACE::EXTTransformFeedbackExtensionName; + using VULKAN_HPP_NAMESPACE::EXTTransformFeedbackSpecVersion; + + //=== VK_NVX_binary_import === + using VULKAN_HPP_NAMESPACE::NVXBinaryImportExtensionName; + using VULKAN_HPP_NAMESPACE::NVXBinaryImportSpecVersion; + + //=== VK_NVX_image_view_handle === + using VULKAN_HPP_NAMESPACE::NVXImageViewHandleExtensionName; + using VULKAN_HPP_NAMESPACE::NVXImageViewHandleSpecVersion; + + //=== VK_AMD_draw_indirect_count === + using VULKAN_HPP_NAMESPACE::AMDDrawIndirectCountExtensionName; + using VULKAN_HPP_NAMESPACE::AMDDrawIndirectCountSpecVersion; + + //=== VK_AMD_negative_viewport_height === + using VULKAN_HPP_NAMESPACE::AMDNegativeViewportHeightExtensionName; + using VULKAN_HPP_NAMESPACE::AMDNegativeViewportHeightSpecVersion; + + //=== VK_AMD_gpu_shader_half_float === + using VULKAN_HPP_NAMESPACE::AMDGpuShaderHalfFloatExtensionName; + using VULKAN_HPP_NAMESPACE::AMDGpuShaderHalfFloatSpecVersion; + + //=== VK_AMD_shader_ballot === + using VULKAN_HPP_NAMESPACE::AMDShaderBallotExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderBallotSpecVersion; + + //=== VK_KHR_video_encode_h264 === + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeH264ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeH264SpecVersion; + + //=== VK_KHR_video_encode_h265 === + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeH265ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeH265SpecVersion; + + //=== VK_KHR_video_decode_h264 === + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeH264ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeH264SpecVersion; + + //=== VK_AMD_texture_gather_bias_lod === + using VULKAN_HPP_NAMESPACE::AMDTextureGatherBiasLodExtensionName; + using VULKAN_HPP_NAMESPACE::AMDTextureGatherBiasLodSpecVersion; + + //=== VK_AMD_shader_info === + using VULKAN_HPP_NAMESPACE::AMDShaderInfoExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderInfoSpecVersion; + + //=== VK_KHR_dynamic_rendering === + using VULKAN_HPP_NAMESPACE::KHRDynamicRenderingExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDynamicRenderingSpecVersion; + + //=== VK_AMD_shader_image_load_store_lod === + using VULKAN_HPP_NAMESPACE::AMDShaderImageLoadStoreLodExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderImageLoadStoreLodSpecVersion; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + using VULKAN_HPP_NAMESPACE::GGPStreamDescriptorSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::GGPStreamDescriptorSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_corner_sampled_image === + using VULKAN_HPP_NAMESPACE::NVCornerSampledImageExtensionName; + using VULKAN_HPP_NAMESPACE::NVCornerSampledImageSpecVersion; + + //=== VK_KHR_multiview === + using VULKAN_HPP_NAMESPACE::KHRMultiviewExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMultiviewSpecVersion; + + //=== VK_IMG_format_pvrtc === + using VULKAN_HPP_NAMESPACE::IMGFormatPvrtcExtensionName; + using VULKAN_HPP_NAMESPACE::IMGFormatPvrtcSpecVersion; + + //=== VK_NV_external_memory_capabilities === + using VULKAN_HPP_NAMESPACE::NVExternalMemoryCapabilitiesExtensionName; + using VULKAN_HPP_NAMESPACE::NVExternalMemoryCapabilitiesSpecVersion; + + //=== VK_NV_external_memory === + using VULKAN_HPP_NAMESPACE::NVExternalMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::NVExternalMemorySpecVersion; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + using VULKAN_HPP_NAMESPACE::NVExternalMemoryWin32ExtensionName; + using VULKAN_HPP_NAMESPACE::NVExternalMemoryWin32SpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_win32_keyed_mutex === + using VULKAN_HPP_NAMESPACE::NVWin32KeyedMutexExtensionName; + using VULKAN_HPP_NAMESPACE::NVWin32KeyedMutexSpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + using VULKAN_HPP_NAMESPACE::KHRGetPhysicalDeviceProperties2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRGetPhysicalDeviceProperties2SpecVersion; + + //=== VK_KHR_device_group === + using VULKAN_HPP_NAMESPACE::KHRDeviceGroupExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDeviceGroupSpecVersion; + + //=== VK_EXT_validation_flags === + using VULKAN_HPP_NAMESPACE::EXTValidationFlagsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTValidationFlagsSpecVersion; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + using VULKAN_HPP_NAMESPACE::NNViSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::NNViSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_shader_draw_parameters === + using VULKAN_HPP_NAMESPACE::KHRShaderDrawParametersExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderDrawParametersSpecVersion; + + //=== VK_EXT_shader_subgroup_ballot === + using VULKAN_HPP_NAMESPACE::EXTShaderSubgroupBallotExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderSubgroupBallotSpecVersion; + + //=== VK_EXT_shader_subgroup_vote === + using VULKAN_HPP_NAMESPACE::EXTShaderSubgroupVoteExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderSubgroupVoteSpecVersion; + + //=== VK_EXT_texture_compression_astc_hdr === + using VULKAN_HPP_NAMESPACE::EXTTextureCompressionAstcHdrExtensionName; + using VULKAN_HPP_NAMESPACE::EXTTextureCompressionAstcHdrSpecVersion; + + //=== VK_EXT_astc_decode_mode === + using VULKAN_HPP_NAMESPACE::EXTAstcDecodeModeExtensionName; + using VULKAN_HPP_NAMESPACE::EXTAstcDecodeModeSpecVersion; + + //=== VK_EXT_pipeline_robustness === + using VULKAN_HPP_NAMESPACE::EXTPipelineRobustnessExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPipelineRobustnessSpecVersion; + + //=== VK_KHR_maintenance1 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance1SpecVersion; + + //=== VK_KHR_device_group_creation === + using VULKAN_HPP_NAMESPACE::KHRDeviceGroupCreationExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDeviceGroupCreationSpecVersion; + using VULKAN_HPP_NAMESPACE::MaxDeviceGroupSizeKHR; + + //=== VK_KHR_external_memory_capabilities === + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryCapabilitiesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryCapabilitiesSpecVersion; + using VULKAN_HPP_NAMESPACE::LuidSizeKHR; + + //=== VK_KHR_external_memory === + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalMemorySpecVersion; + using VULKAN_HPP_NAMESPACE::QueueFamilyExternalKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryWin32ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryWin32SpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryFdExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalMemoryFdSpecVersion; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_keyed_mutex === + using VULKAN_HPP_NAMESPACE::KHRWin32KeyedMutexExtensionName; + using VULKAN_HPP_NAMESPACE::KHRWin32KeyedMutexSpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_capabilities === + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreCapabilitiesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreCapabilitiesSpecVersion; + + //=== VK_KHR_external_semaphore === + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreSpecVersion; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreWin32ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreWin32SpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreFdExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalSemaphoreFdSpecVersion; + + //=== VK_KHR_push_descriptor === + using VULKAN_HPP_NAMESPACE::KHRPushDescriptorExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPushDescriptorSpecVersion; + + //=== VK_EXT_conditional_rendering === + using VULKAN_HPP_NAMESPACE::EXTConditionalRenderingExtensionName; + using VULKAN_HPP_NAMESPACE::EXTConditionalRenderingSpecVersion; + + //=== VK_KHR_shader_float16_int8 === + using VULKAN_HPP_NAMESPACE::KHRShaderFloat16Int8ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderFloat16Int8SpecVersion; + + //=== VK_KHR_16bit_storage === + using VULKAN_HPP_NAMESPACE::KHR16BitStorageExtensionName; + using VULKAN_HPP_NAMESPACE::KHR16BitStorageSpecVersion; + + //=== VK_KHR_incremental_present === + using VULKAN_HPP_NAMESPACE::KHRIncrementalPresentExtensionName; + using VULKAN_HPP_NAMESPACE::KHRIncrementalPresentSpecVersion; + + //=== VK_KHR_descriptor_update_template === + using VULKAN_HPP_NAMESPACE::KHRDescriptorUpdateTemplateExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDescriptorUpdateTemplateSpecVersion; + + //=== VK_NV_clip_space_w_scaling === + using VULKAN_HPP_NAMESPACE::NVClipSpaceWScalingExtensionName; + using VULKAN_HPP_NAMESPACE::NVClipSpaceWScalingSpecVersion; + + //=== VK_EXT_direct_mode_display === + using VULKAN_HPP_NAMESPACE::EXTDirectModeDisplayExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDirectModeDisplaySpecVersion; + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + using VULKAN_HPP_NAMESPACE::EXTAcquireXlibDisplayExtensionName; + using VULKAN_HPP_NAMESPACE::EXTAcquireXlibDisplaySpecVersion; +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + using VULKAN_HPP_NAMESPACE::EXTDisplaySurfaceCounterExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDisplaySurfaceCounterSpecVersion; + + //=== VK_EXT_display_control === + using VULKAN_HPP_NAMESPACE::EXTDisplayControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDisplayControlSpecVersion; + + //=== VK_GOOGLE_display_timing === + using VULKAN_HPP_NAMESPACE::GOOGLEDisplayTimingExtensionName; + using VULKAN_HPP_NAMESPACE::GOOGLEDisplayTimingSpecVersion; + + //=== VK_NV_sample_mask_override_coverage === + using VULKAN_HPP_NAMESPACE::NVSampleMaskOverrideCoverageExtensionName; + using VULKAN_HPP_NAMESPACE::NVSampleMaskOverrideCoverageSpecVersion; + + //=== VK_NV_geometry_shader_passthrough === + using VULKAN_HPP_NAMESPACE::NVGeometryShaderPassthroughExtensionName; + using VULKAN_HPP_NAMESPACE::NVGeometryShaderPassthroughSpecVersion; + + //=== VK_NV_viewport_array2 === + using VULKAN_HPP_NAMESPACE::NVViewportArray2ExtensionName; + using VULKAN_HPP_NAMESPACE::NVViewportArray2SpecVersion; + + //=== VK_NVX_multiview_per_view_attributes === + using VULKAN_HPP_NAMESPACE::NVXMultiviewPerViewAttributesExtensionName; + using VULKAN_HPP_NAMESPACE::NVXMultiviewPerViewAttributesSpecVersion; + + //=== VK_NV_viewport_swizzle === + using VULKAN_HPP_NAMESPACE::NVViewportSwizzleExtensionName; + using VULKAN_HPP_NAMESPACE::NVViewportSwizzleSpecVersion; + + //=== VK_EXT_discard_rectangles === + using VULKAN_HPP_NAMESPACE::EXTDiscardRectanglesExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDiscardRectanglesSpecVersion; + + //=== VK_EXT_conservative_rasterization === + using VULKAN_HPP_NAMESPACE::EXTConservativeRasterizationExtensionName; + using VULKAN_HPP_NAMESPACE::EXTConservativeRasterizationSpecVersion; + + //=== VK_EXT_depth_clip_enable === + using VULKAN_HPP_NAMESPACE::EXTDepthClipEnableExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDepthClipEnableSpecVersion; + + //=== VK_EXT_swapchain_colorspace === + using VULKAN_HPP_NAMESPACE::EXTSwapchainColorSpaceExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSwapchainColorSpaceSpecVersion; + + //=== VK_EXT_hdr_metadata === + using VULKAN_HPP_NAMESPACE::EXTHdrMetadataExtensionName; + using VULKAN_HPP_NAMESPACE::EXTHdrMetadataSpecVersion; + + //=== VK_KHR_imageless_framebuffer === + using VULKAN_HPP_NAMESPACE::KHRImagelessFramebufferExtensionName; + using VULKAN_HPP_NAMESPACE::KHRImagelessFramebufferSpecVersion; + + //=== VK_KHR_create_renderpass2 === + using VULKAN_HPP_NAMESPACE::KHRCreateRenderpass2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRCreateRenderpass2SpecVersion; + + //=== VK_IMG_relaxed_line_rasterization === + using VULKAN_HPP_NAMESPACE::IMGRelaxedLineRasterizationExtensionName; + using VULKAN_HPP_NAMESPACE::IMGRelaxedLineRasterizationSpecVersion; + + //=== VK_KHR_shared_presentable_image === + using VULKAN_HPP_NAMESPACE::KHRSharedPresentableImageExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSharedPresentableImageSpecVersion; + + //=== VK_KHR_external_fence_capabilities === + using VULKAN_HPP_NAMESPACE::KHRExternalFenceCapabilitiesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalFenceCapabilitiesSpecVersion; + + //=== VK_KHR_external_fence === + using VULKAN_HPP_NAMESPACE::KHRExternalFenceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalFenceSpecVersion; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + using VULKAN_HPP_NAMESPACE::KHRExternalFenceWin32ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalFenceWin32SpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + using VULKAN_HPP_NAMESPACE::KHRExternalFenceFdExtensionName; + using VULKAN_HPP_NAMESPACE::KHRExternalFenceFdSpecVersion; + + //=== VK_KHR_performance_query === + using VULKAN_HPP_NAMESPACE::KHRPerformanceQueryExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPerformanceQuerySpecVersion; + + //=== VK_KHR_maintenance2 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance2SpecVersion; + + //=== VK_KHR_get_surface_capabilities2 === + using VULKAN_HPP_NAMESPACE::KHRGetSurfaceCapabilities2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRGetSurfaceCapabilities2SpecVersion; + + //=== VK_KHR_variable_pointers === + using VULKAN_HPP_NAMESPACE::KHRVariablePointersExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVariablePointersSpecVersion; + + //=== VK_KHR_get_display_properties2 === + using VULKAN_HPP_NAMESPACE::KHRGetDisplayProperties2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRGetDisplayProperties2SpecVersion; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + using VULKAN_HPP_NAMESPACE::MVKIosSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::MVKIosSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + using VULKAN_HPP_NAMESPACE::MVKMacosSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::MVKMacosSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_external_memory_dma_buf === + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryDmaBufExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryDmaBufSpecVersion; + + //=== VK_EXT_queue_family_foreign === + using VULKAN_HPP_NAMESPACE::EXTQueueFamilyForeignExtensionName; + using VULKAN_HPP_NAMESPACE::EXTQueueFamilyForeignSpecVersion; + using VULKAN_HPP_NAMESPACE::QueueFamilyForeignEXT; + + //=== VK_KHR_dedicated_allocation === + using VULKAN_HPP_NAMESPACE::KHRDedicatedAllocationExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDedicatedAllocationSpecVersion; + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::EXTDebugUtilsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDebugUtilsSpecVersion; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + using VULKAN_HPP_NAMESPACE::ANDROIDExternalMemoryAndroidHardwareBufferExtensionName; + using VULKAN_HPP_NAMESPACE::ANDROIDExternalMemoryAndroidHardwareBufferSpecVersion; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_EXT_sampler_filter_minmax === + using VULKAN_HPP_NAMESPACE::EXTSamplerFilterMinmaxExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSamplerFilterMinmaxSpecVersion; + + //=== VK_KHR_storage_buffer_storage_class === + using VULKAN_HPP_NAMESPACE::KHRStorageBufferStorageClassExtensionName; + using VULKAN_HPP_NAMESPACE::KHRStorageBufferStorageClassSpecVersion; + + //=== VK_AMD_gpu_shader_int16 === + using VULKAN_HPP_NAMESPACE::AMDGpuShaderInt16ExtensionName; + using VULKAN_HPP_NAMESPACE::AMDGpuShaderInt16SpecVersion; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + using VULKAN_HPP_NAMESPACE::AMDXShaderEnqueueExtensionName; + using VULKAN_HPP_NAMESPACE::AMDXShaderEnqueueSpecVersion; + using VULKAN_HPP_NAMESPACE::ShaderIndexUnusedAMDX; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_mixed_attachment_samples === + using VULKAN_HPP_NAMESPACE::AMDMixedAttachmentSamplesExtensionName; + using VULKAN_HPP_NAMESPACE::AMDMixedAttachmentSamplesSpecVersion; + + //=== VK_AMD_shader_fragment_mask === + using VULKAN_HPP_NAMESPACE::AMDShaderFragmentMaskExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderFragmentMaskSpecVersion; + + //=== VK_EXT_inline_uniform_block === + using VULKAN_HPP_NAMESPACE::EXTInlineUniformBlockExtensionName; + using VULKAN_HPP_NAMESPACE::EXTInlineUniformBlockSpecVersion; + + //=== VK_EXT_shader_stencil_export === + using VULKAN_HPP_NAMESPACE::EXTShaderStencilExportExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderStencilExportSpecVersion; + + //=== VK_KHR_shader_bfloat16 === + using VULKAN_HPP_NAMESPACE::KHRShaderBfloat16ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderBfloat16SpecVersion; + + //=== VK_EXT_sample_locations === + using VULKAN_HPP_NAMESPACE::EXTSampleLocationsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSampleLocationsSpecVersion; + + //=== VK_KHR_relaxed_block_layout === + using VULKAN_HPP_NAMESPACE::KHRRelaxedBlockLayoutExtensionName; + using VULKAN_HPP_NAMESPACE::KHRRelaxedBlockLayoutSpecVersion; + + //=== VK_KHR_get_memory_requirements2 === + using VULKAN_HPP_NAMESPACE::KHRGetMemoryRequirements2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRGetMemoryRequirements2SpecVersion; + + //=== VK_KHR_image_format_list === + using VULKAN_HPP_NAMESPACE::KHRImageFormatListExtensionName; + using VULKAN_HPP_NAMESPACE::KHRImageFormatListSpecVersion; + + //=== VK_EXT_blend_operation_advanced === + using VULKAN_HPP_NAMESPACE::EXTBlendOperationAdvancedExtensionName; + using VULKAN_HPP_NAMESPACE::EXTBlendOperationAdvancedSpecVersion; + + //=== VK_NV_fragment_coverage_to_color === + using VULKAN_HPP_NAMESPACE::NVFragmentCoverageToColorExtensionName; + using VULKAN_HPP_NAMESPACE::NVFragmentCoverageToColorSpecVersion; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_NAMESPACE::KHRAccelerationStructureExtensionName; + using VULKAN_HPP_NAMESPACE::KHRAccelerationStructureSpecVersion; + + //=== VK_KHR_ray_tracing_pipeline === + using VULKAN_HPP_NAMESPACE::KHRRayTracingPipelineExtensionName; + using VULKAN_HPP_NAMESPACE::KHRRayTracingPipelineSpecVersion; + using VULKAN_HPP_NAMESPACE::ShaderUnusedKHR; + + //=== VK_KHR_ray_query === + using VULKAN_HPP_NAMESPACE::KHRRayQueryExtensionName; + using VULKAN_HPP_NAMESPACE::KHRRayQuerySpecVersion; + + //=== VK_NV_framebuffer_mixed_samples === + using VULKAN_HPP_NAMESPACE::NVFramebufferMixedSamplesExtensionName; + using VULKAN_HPP_NAMESPACE::NVFramebufferMixedSamplesSpecVersion; + + //=== VK_NV_fill_rectangle === + using VULKAN_HPP_NAMESPACE::NVFillRectangleExtensionName; + using VULKAN_HPP_NAMESPACE::NVFillRectangleSpecVersion; + + //=== VK_NV_shader_sm_builtins === + using VULKAN_HPP_NAMESPACE::NVShaderSmBuiltinsExtensionName; + using VULKAN_HPP_NAMESPACE::NVShaderSmBuiltinsSpecVersion; + + //=== VK_EXT_post_depth_coverage === + using VULKAN_HPP_NAMESPACE::EXTPostDepthCoverageExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPostDepthCoverageSpecVersion; + + //=== VK_KHR_sampler_ycbcr_conversion === + using VULKAN_HPP_NAMESPACE::KHRSamplerYcbcrConversionExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSamplerYcbcrConversionSpecVersion; + + //=== VK_KHR_bind_memory2 === + using VULKAN_HPP_NAMESPACE::KHRBindMemory2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRBindMemory2SpecVersion; + + //=== VK_EXT_image_drm_format_modifier === + using VULKAN_HPP_NAMESPACE::EXTImageDrmFormatModifierExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImageDrmFormatModifierSpecVersion; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_NAMESPACE::EXTValidationCacheExtensionName; + using VULKAN_HPP_NAMESPACE::EXTValidationCacheSpecVersion; + + //=== VK_EXT_descriptor_indexing === + using VULKAN_HPP_NAMESPACE::EXTDescriptorIndexingExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDescriptorIndexingSpecVersion; + + //=== VK_EXT_shader_viewport_index_layer === + using VULKAN_HPP_NAMESPACE::EXTShaderViewportIndexLayerExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderViewportIndexLayerSpecVersion; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_portability_subset === + using VULKAN_HPP_NAMESPACE::KHRPortabilitySubsetExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPortabilitySubsetSpecVersion; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NV_shading_rate_image === + using VULKAN_HPP_NAMESPACE::NVShadingRateImageExtensionName; + using VULKAN_HPP_NAMESPACE::NVShadingRateImageSpecVersion; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_NAMESPACE::NVRayTracingExtensionName; + using VULKAN_HPP_NAMESPACE::NVRayTracingSpecVersion; + using VULKAN_HPP_NAMESPACE::ShaderUnusedNV; + + //=== VK_NV_representative_fragment_test === + using VULKAN_HPP_NAMESPACE::NVRepresentativeFragmentTestExtensionName; + using VULKAN_HPP_NAMESPACE::NVRepresentativeFragmentTestSpecVersion; + + //=== VK_KHR_maintenance3 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance3ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance3SpecVersion; + + //=== VK_KHR_draw_indirect_count === + using VULKAN_HPP_NAMESPACE::KHRDrawIndirectCountExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDrawIndirectCountSpecVersion; + + //=== VK_EXT_filter_cubic === + using VULKAN_HPP_NAMESPACE::EXTFilterCubicExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFilterCubicSpecVersion; + + //=== VK_QCOM_render_pass_shader_resolve === + using VULKAN_HPP_NAMESPACE::QCOMRenderPassShaderResolveExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMRenderPassShaderResolveSpecVersion; + + //=== VK_EXT_global_priority === + using VULKAN_HPP_NAMESPACE::EXTGlobalPriorityExtensionName; + using VULKAN_HPP_NAMESPACE::EXTGlobalPrioritySpecVersion; + + //=== VK_KHR_shader_subgroup_extended_types === + using VULKAN_HPP_NAMESPACE::KHRShaderSubgroupExtendedTypesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderSubgroupExtendedTypesSpecVersion; + + //=== VK_KHR_8bit_storage === + using VULKAN_HPP_NAMESPACE::KHR8BitStorageExtensionName; + using VULKAN_HPP_NAMESPACE::KHR8BitStorageSpecVersion; + + //=== VK_EXT_external_memory_host === + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryHostExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryHostSpecVersion; + + //=== VK_AMD_buffer_marker === + using VULKAN_HPP_NAMESPACE::AMDBufferMarkerExtensionName; + using VULKAN_HPP_NAMESPACE::AMDBufferMarkerSpecVersion; + + //=== VK_KHR_shader_atomic_int64 === + using VULKAN_HPP_NAMESPACE::KHRShaderAtomicInt64ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderAtomicInt64SpecVersion; + + //=== VK_KHR_shader_clock === + using VULKAN_HPP_NAMESPACE::KHRShaderClockExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderClockSpecVersion; + + //=== VK_AMD_pipeline_compiler_control === + using VULKAN_HPP_NAMESPACE::AMDPipelineCompilerControlExtensionName; + using VULKAN_HPP_NAMESPACE::AMDPipelineCompilerControlSpecVersion; + + //=== VK_EXT_calibrated_timestamps === + using VULKAN_HPP_NAMESPACE::EXTCalibratedTimestampsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTCalibratedTimestampsSpecVersion; + + //=== VK_AMD_shader_core_properties === + using VULKAN_HPP_NAMESPACE::AMDShaderCorePropertiesExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderCorePropertiesSpecVersion; + + //=== VK_KHR_video_decode_h265 === + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeH265ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeH265SpecVersion; + + //=== VK_KHR_global_priority === + using VULKAN_HPP_NAMESPACE::KHRGlobalPriorityExtensionName; + using VULKAN_HPP_NAMESPACE::KHRGlobalPrioritySpecVersion; + using VULKAN_HPP_NAMESPACE::MaxGlobalPrioritySizeKHR; + + //=== VK_AMD_memory_overallocation_behavior === + using VULKAN_HPP_NAMESPACE::AMDMemoryOverallocationBehaviorExtensionName; + using VULKAN_HPP_NAMESPACE::AMDMemoryOverallocationBehaviorSpecVersion; + + //=== VK_EXT_vertex_attribute_divisor === + using VULKAN_HPP_NAMESPACE::EXTVertexAttributeDivisorExtensionName; + using VULKAN_HPP_NAMESPACE::EXTVertexAttributeDivisorSpecVersion; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_frame_token === + using VULKAN_HPP_NAMESPACE::GGPFrameTokenExtensionName; + using VULKAN_HPP_NAMESPACE::GGPFrameTokenSpecVersion; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_EXT_pipeline_creation_feedback === + using VULKAN_HPP_NAMESPACE::EXTPipelineCreationFeedbackExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPipelineCreationFeedbackSpecVersion; + + //=== VK_KHR_driver_properties === + using VULKAN_HPP_NAMESPACE::KHRDriverPropertiesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDriverPropertiesSpecVersion; + using VULKAN_HPP_NAMESPACE::MaxDriverInfoSizeKHR; + using VULKAN_HPP_NAMESPACE::MaxDriverNameSizeKHR; + + //=== VK_KHR_shader_float_controls === + using VULKAN_HPP_NAMESPACE::KHRShaderFloatControlsExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderFloatControlsSpecVersion; + + //=== VK_NV_shader_subgroup_partitioned === + using VULKAN_HPP_NAMESPACE::NVShaderSubgroupPartitionedExtensionName; + using VULKAN_HPP_NAMESPACE::NVShaderSubgroupPartitionedSpecVersion; + + //=== VK_KHR_depth_stencil_resolve === + using VULKAN_HPP_NAMESPACE::KHRDepthStencilResolveExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDepthStencilResolveSpecVersion; + + //=== VK_KHR_swapchain_mutable_format === + using VULKAN_HPP_NAMESPACE::KHRSwapchainMutableFormatExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSwapchainMutableFormatSpecVersion; + + //=== VK_NV_compute_shader_derivatives === + using VULKAN_HPP_NAMESPACE::NVComputeShaderDerivativesExtensionName; + using VULKAN_HPP_NAMESPACE::NVComputeShaderDerivativesSpecVersion; + + //=== VK_NV_mesh_shader === + using VULKAN_HPP_NAMESPACE::NVMeshShaderExtensionName; + using VULKAN_HPP_NAMESPACE::NVMeshShaderSpecVersion; + + //=== VK_NV_fragment_shader_barycentric === + using VULKAN_HPP_NAMESPACE::NVFragmentShaderBarycentricExtensionName; + using VULKAN_HPP_NAMESPACE::NVFragmentShaderBarycentricSpecVersion; + + //=== VK_NV_shader_image_footprint === + using VULKAN_HPP_NAMESPACE::NVShaderImageFootprintExtensionName; + using VULKAN_HPP_NAMESPACE::NVShaderImageFootprintSpecVersion; + + //=== VK_NV_scissor_exclusive === + using VULKAN_HPP_NAMESPACE::NVScissorExclusiveExtensionName; + using VULKAN_HPP_NAMESPACE::NVScissorExclusiveSpecVersion; + + //=== VK_NV_device_diagnostic_checkpoints === + using VULKAN_HPP_NAMESPACE::NVDeviceDiagnosticCheckpointsExtensionName; + using VULKAN_HPP_NAMESPACE::NVDeviceDiagnosticCheckpointsSpecVersion; + + //=== VK_KHR_timeline_semaphore === + using VULKAN_HPP_NAMESPACE::KHRTimelineSemaphoreExtensionName; + using VULKAN_HPP_NAMESPACE::KHRTimelineSemaphoreSpecVersion; + + //=== VK_INTEL_shader_integer_functions2 === + using VULKAN_HPP_NAMESPACE::INTELShaderIntegerFunctions2ExtensionName; + using VULKAN_HPP_NAMESPACE::INTELShaderIntegerFunctions2SpecVersion; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_NAMESPACE::INTELPerformanceQueryExtensionName; + using VULKAN_HPP_NAMESPACE::INTELPerformanceQuerySpecVersion; + + //=== VK_KHR_vulkan_memory_model === + using VULKAN_HPP_NAMESPACE::KHRVulkanMemoryModelExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVulkanMemoryModelSpecVersion; + + //=== VK_EXT_pci_bus_info === + using VULKAN_HPP_NAMESPACE::EXTPciBusInfoExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPciBusInfoSpecVersion; + + //=== VK_AMD_display_native_hdr === + using VULKAN_HPP_NAMESPACE::AMDDisplayNativeHdrExtensionName; + using VULKAN_HPP_NAMESPACE::AMDDisplayNativeHdrSpecVersion; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + using VULKAN_HPP_NAMESPACE::FUCHSIAImagepipeSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::FUCHSIAImagepipeSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_KHR_shader_terminate_invocation === + using VULKAN_HPP_NAMESPACE::KHRShaderTerminateInvocationExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderTerminateInvocationSpecVersion; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + using VULKAN_HPP_NAMESPACE::EXTMetalSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMetalSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map === + using VULKAN_HPP_NAMESPACE::EXTFragmentDensityMapExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFragmentDensityMapSpecVersion; + + //=== VK_EXT_scalar_block_layout === + using VULKAN_HPP_NAMESPACE::EXTScalarBlockLayoutExtensionName; + using VULKAN_HPP_NAMESPACE::EXTScalarBlockLayoutSpecVersion; + + //=== VK_GOOGLE_hlsl_functionality1 === + using VULKAN_HPP_NAMESPACE::GOOGLEHlslFunctionality1ExtensionName; + using VULKAN_HPP_NAMESPACE::GOOGLEHlslFunctionality1SpecVersion; + + //=== VK_GOOGLE_decorate_string === + using VULKAN_HPP_NAMESPACE::GOOGLEDecorateStringExtensionName; + using VULKAN_HPP_NAMESPACE::GOOGLEDecorateStringSpecVersion; + + //=== VK_EXT_subgroup_size_control === + using VULKAN_HPP_NAMESPACE::EXTSubgroupSizeControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSubgroupSizeControlSpecVersion; + + //=== VK_KHR_fragment_shading_rate === + using VULKAN_HPP_NAMESPACE::KHRFragmentShadingRateExtensionName; + using VULKAN_HPP_NAMESPACE::KHRFragmentShadingRateSpecVersion; + + //=== VK_AMD_shader_core_properties2 === + using VULKAN_HPP_NAMESPACE::AMDShaderCoreProperties2ExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderCoreProperties2SpecVersion; + + //=== VK_AMD_device_coherent_memory === + using VULKAN_HPP_NAMESPACE::AMDDeviceCoherentMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::AMDDeviceCoherentMemorySpecVersion; + + //=== VK_KHR_dynamic_rendering_local_read === + using VULKAN_HPP_NAMESPACE::KHRDynamicRenderingLocalReadExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDynamicRenderingLocalReadSpecVersion; + + //=== VK_EXT_shader_image_atomic_int64 === + using VULKAN_HPP_NAMESPACE::EXTShaderImageAtomicInt64ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderImageAtomicInt64SpecVersion; + + //=== VK_KHR_shader_quad_control === + using VULKAN_HPP_NAMESPACE::KHRShaderQuadControlExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderQuadControlSpecVersion; + + //=== VK_KHR_spirv_1_4 === + using VULKAN_HPP_NAMESPACE::KHRSpirv14ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSpirv14SpecVersion; + + //=== VK_EXT_memory_budget === + using VULKAN_HPP_NAMESPACE::EXTMemoryBudgetExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMemoryBudgetSpecVersion; + + //=== VK_EXT_memory_priority === + using VULKAN_HPP_NAMESPACE::EXTMemoryPriorityExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMemoryPrioritySpecVersion; + + //=== VK_KHR_surface_protected_capabilities === + using VULKAN_HPP_NAMESPACE::KHRSurfaceProtectedCapabilitiesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSurfaceProtectedCapabilitiesSpecVersion; + + //=== VK_NV_dedicated_allocation_image_aliasing === + using VULKAN_HPP_NAMESPACE::NVDedicatedAllocationImageAliasingExtensionName; + using VULKAN_HPP_NAMESPACE::NVDedicatedAllocationImageAliasingSpecVersion; + + //=== VK_KHR_separate_depth_stencil_layouts === + using VULKAN_HPP_NAMESPACE::KHRSeparateDepthStencilLayoutsExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSeparateDepthStencilLayoutsSpecVersion; + + //=== VK_EXT_buffer_device_address === + using VULKAN_HPP_NAMESPACE::EXTBufferDeviceAddressExtensionName; + using VULKAN_HPP_NAMESPACE::EXTBufferDeviceAddressSpecVersion; + + //=== VK_EXT_tooling_info === + using VULKAN_HPP_NAMESPACE::EXTToolingInfoExtensionName; + using VULKAN_HPP_NAMESPACE::EXTToolingInfoSpecVersion; + + //=== VK_EXT_separate_stencil_usage === + using VULKAN_HPP_NAMESPACE::EXTSeparateStencilUsageExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSeparateStencilUsageSpecVersion; + + //=== VK_EXT_validation_features === + using VULKAN_HPP_NAMESPACE::EXTValidationFeaturesExtensionName; + using VULKAN_HPP_NAMESPACE::EXTValidationFeaturesSpecVersion; + + //=== VK_KHR_present_wait === + using VULKAN_HPP_NAMESPACE::KHRPresentWaitExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPresentWaitSpecVersion; + + //=== VK_NV_cooperative_matrix === + using VULKAN_HPP_NAMESPACE::NVCooperativeMatrixExtensionName; + using VULKAN_HPP_NAMESPACE::NVCooperativeMatrixSpecVersion; + + //=== VK_NV_coverage_reduction_mode === + using VULKAN_HPP_NAMESPACE::NVCoverageReductionModeExtensionName; + using VULKAN_HPP_NAMESPACE::NVCoverageReductionModeSpecVersion; + + //=== VK_EXT_fragment_shader_interlock === + using VULKAN_HPP_NAMESPACE::EXTFragmentShaderInterlockExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFragmentShaderInterlockSpecVersion; + + //=== VK_EXT_ycbcr_image_arrays === + using VULKAN_HPP_NAMESPACE::EXTYcbcrImageArraysExtensionName; + using VULKAN_HPP_NAMESPACE::EXTYcbcrImageArraysSpecVersion; + + //=== VK_KHR_uniform_buffer_standard_layout === + using VULKAN_HPP_NAMESPACE::KHRUniformBufferStandardLayoutExtensionName; + using VULKAN_HPP_NAMESPACE::KHRUniformBufferStandardLayoutSpecVersion; + + //=== VK_EXT_provoking_vertex === + using VULKAN_HPP_NAMESPACE::EXTProvokingVertexExtensionName; + using VULKAN_HPP_NAMESPACE::EXTProvokingVertexSpecVersion; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + using VULKAN_HPP_NAMESPACE::EXTFullScreenExclusiveExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFullScreenExclusiveSpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + using VULKAN_HPP_NAMESPACE::EXTHeadlessSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::EXTHeadlessSurfaceSpecVersion; + + //=== VK_KHR_buffer_device_address === + using VULKAN_HPP_NAMESPACE::KHRBufferDeviceAddressExtensionName; + using VULKAN_HPP_NAMESPACE::KHRBufferDeviceAddressSpecVersion; + + //=== VK_EXT_line_rasterization === + using VULKAN_HPP_NAMESPACE::EXTLineRasterizationExtensionName; + using VULKAN_HPP_NAMESPACE::EXTLineRasterizationSpecVersion; + + //=== VK_EXT_shader_atomic_float === + using VULKAN_HPP_NAMESPACE::EXTShaderAtomicFloatExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderAtomicFloatSpecVersion; + + //=== VK_EXT_host_query_reset === + using VULKAN_HPP_NAMESPACE::EXTHostQueryResetExtensionName; + using VULKAN_HPP_NAMESPACE::EXTHostQueryResetSpecVersion; + + //=== VK_EXT_index_type_uint8 === + using VULKAN_HPP_NAMESPACE::EXTIndexTypeUint8ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTIndexTypeUint8SpecVersion; + + //=== VK_EXT_extended_dynamic_state === + using VULKAN_HPP_NAMESPACE::EXTExtendedDynamicStateExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExtendedDynamicStateSpecVersion; + + //=== VK_KHR_deferred_host_operations === + using VULKAN_HPP_NAMESPACE::KHRDeferredHostOperationsExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDeferredHostOperationsSpecVersion; + + //=== VK_KHR_pipeline_executable_properties === + using VULKAN_HPP_NAMESPACE::KHRPipelineExecutablePropertiesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPipelineExecutablePropertiesSpecVersion; + + //=== VK_EXT_host_image_copy === + using VULKAN_HPP_NAMESPACE::EXTHostImageCopyExtensionName; + using VULKAN_HPP_NAMESPACE::EXTHostImageCopySpecVersion; + + //=== VK_KHR_map_memory2 === + using VULKAN_HPP_NAMESPACE::KHRMapMemory2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMapMemory2SpecVersion; + + //=== VK_EXT_map_memory_placed === + using VULKAN_HPP_NAMESPACE::EXTMapMemoryPlacedExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMapMemoryPlacedSpecVersion; + + //=== VK_EXT_shader_atomic_float2 === + using VULKAN_HPP_NAMESPACE::EXTShaderAtomicFloat2ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderAtomicFloat2SpecVersion; + + //=== VK_EXT_surface_maintenance1 === + using VULKAN_HPP_NAMESPACE::EXTSurfaceMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSurfaceMaintenance1SpecVersion; + + //=== VK_EXT_swapchain_maintenance1 === + using VULKAN_HPP_NAMESPACE::EXTSwapchainMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSwapchainMaintenance1SpecVersion; + + //=== VK_EXT_shader_demote_to_helper_invocation === + using VULKAN_HPP_NAMESPACE::EXTShaderDemoteToHelperInvocationExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderDemoteToHelperInvocationSpecVersion; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_NAMESPACE::NVDeviceGeneratedCommandsExtensionName; + using VULKAN_HPP_NAMESPACE::NVDeviceGeneratedCommandsSpecVersion; + + //=== VK_NV_inherited_viewport_scissor === + using VULKAN_HPP_NAMESPACE::NVInheritedViewportScissorExtensionName; + using VULKAN_HPP_NAMESPACE::NVInheritedViewportScissorSpecVersion; + + //=== VK_KHR_shader_integer_dot_product === + using VULKAN_HPP_NAMESPACE::KHRShaderIntegerDotProductExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderIntegerDotProductSpecVersion; + + //=== VK_EXT_texel_buffer_alignment === + using VULKAN_HPP_NAMESPACE::EXTTexelBufferAlignmentExtensionName; + using VULKAN_HPP_NAMESPACE::EXTTexelBufferAlignmentSpecVersion; + + //=== VK_QCOM_render_pass_transform === + using VULKAN_HPP_NAMESPACE::QCOMRenderPassTransformExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMRenderPassTransformSpecVersion; + + //=== VK_EXT_depth_bias_control === + using VULKAN_HPP_NAMESPACE::EXTDepthBiasControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDepthBiasControlSpecVersion; + + //=== VK_EXT_device_memory_report === + using VULKAN_HPP_NAMESPACE::EXTDeviceMemoryReportExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDeviceMemoryReportSpecVersion; + + //=== VK_EXT_acquire_drm_display === + using VULKAN_HPP_NAMESPACE::EXTAcquireDrmDisplayExtensionName; + using VULKAN_HPP_NAMESPACE::EXTAcquireDrmDisplaySpecVersion; + + //=== VK_EXT_robustness2 === + using VULKAN_HPP_NAMESPACE::EXTRobustness2ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTRobustness2SpecVersion; + + //=== VK_EXT_custom_border_color === + using VULKAN_HPP_NAMESPACE::EXTCustomBorderColorExtensionName; + using VULKAN_HPP_NAMESPACE::EXTCustomBorderColorSpecVersion; + + //=== VK_GOOGLE_user_type === + using VULKAN_HPP_NAMESPACE::GOOGLEUserTypeExtensionName; + using VULKAN_HPP_NAMESPACE::GOOGLEUserTypeSpecVersion; + + //=== VK_KHR_pipeline_library === + using VULKAN_HPP_NAMESPACE::KHRPipelineLibraryExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPipelineLibrarySpecVersion; + + //=== VK_NV_present_barrier === + using VULKAN_HPP_NAMESPACE::NVPresentBarrierExtensionName; + using VULKAN_HPP_NAMESPACE::NVPresentBarrierSpecVersion; + + //=== VK_KHR_shader_non_semantic_info === + using VULKAN_HPP_NAMESPACE::KHRShaderNonSemanticInfoExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderNonSemanticInfoSpecVersion; + + //=== VK_KHR_present_id === + using VULKAN_HPP_NAMESPACE::KHRPresentIdExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPresentIdSpecVersion; + + //=== VK_EXT_private_data === + using VULKAN_HPP_NAMESPACE::EXTPrivateDataExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPrivateDataSpecVersion; + + //=== VK_EXT_pipeline_creation_cache_control === + using VULKAN_HPP_NAMESPACE::EXTPipelineCreationCacheControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPipelineCreationCacheControlSpecVersion; + + //=== VK_KHR_video_encode_queue === + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeQueueExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeQueueSpecVersion; + + //=== VK_NV_device_diagnostics_config === + using VULKAN_HPP_NAMESPACE::NVDeviceDiagnosticsConfigExtensionName; + using VULKAN_HPP_NAMESPACE::NVDeviceDiagnosticsConfigSpecVersion; + + //=== VK_QCOM_render_pass_store_ops === + using VULKAN_HPP_NAMESPACE::QCOMRenderPassStoreOpsExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMRenderPassStoreOpsSpecVersion; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + using VULKAN_HPP_NAMESPACE::NVCudaKernelLaunchExtensionName; + using VULKAN_HPP_NAMESPACE::NVCudaKernelLaunchSpecVersion; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + using VULKAN_HPP_NAMESPACE::QCOMTileShadingExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMTileShadingSpecVersion; + + //=== VK_NV_low_latency === + using VULKAN_HPP_NAMESPACE::NVLowLatencyExtensionName; + using VULKAN_HPP_NAMESPACE::NVLowLatencySpecVersion; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + using VULKAN_HPP_NAMESPACE::EXTMetalObjectsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMetalObjectsSpecVersion; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + using VULKAN_HPP_NAMESPACE::KHRSynchronization2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSynchronization2SpecVersion; + + //=== VK_EXT_descriptor_buffer === + using VULKAN_HPP_NAMESPACE::EXTDescriptorBufferExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDescriptorBufferSpecVersion; + + //=== VK_EXT_graphics_pipeline_library === + using VULKAN_HPP_NAMESPACE::EXTGraphicsPipelineLibraryExtensionName; + using VULKAN_HPP_NAMESPACE::EXTGraphicsPipelineLibrarySpecVersion; + + //=== VK_AMD_shader_early_and_late_fragment_tests === + using VULKAN_HPP_NAMESPACE::AMDShaderEarlyAndLateFragmentTestsExtensionName; + using VULKAN_HPP_NAMESPACE::AMDShaderEarlyAndLateFragmentTestsSpecVersion; + + //=== VK_KHR_fragment_shader_barycentric === + using VULKAN_HPP_NAMESPACE::KHRFragmentShaderBarycentricExtensionName; + using VULKAN_HPP_NAMESPACE::KHRFragmentShaderBarycentricSpecVersion; + + //=== VK_KHR_shader_subgroup_uniform_control_flow === + using VULKAN_HPP_NAMESPACE::KHRShaderSubgroupUniformControlFlowExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderSubgroupUniformControlFlowSpecVersion; + + //=== VK_KHR_zero_initialize_workgroup_memory === + using VULKAN_HPP_NAMESPACE::KHRZeroInitializeWorkgroupMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::KHRZeroInitializeWorkgroupMemorySpecVersion; + + //=== VK_NV_fragment_shading_rate_enums === + using VULKAN_HPP_NAMESPACE::NVFragmentShadingRateEnumsExtensionName; + using VULKAN_HPP_NAMESPACE::NVFragmentShadingRateEnumsSpecVersion; + + //=== VK_NV_ray_tracing_motion_blur === + using VULKAN_HPP_NAMESPACE::NVRayTracingMotionBlurExtensionName; + using VULKAN_HPP_NAMESPACE::NVRayTracingMotionBlurSpecVersion; + + //=== VK_EXT_mesh_shader === + using VULKAN_HPP_NAMESPACE::EXTMeshShaderExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMeshShaderSpecVersion; + + //=== VK_EXT_ycbcr_2plane_444_formats === + using VULKAN_HPP_NAMESPACE::EXTYcbcr2Plane444FormatsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTYcbcr2Plane444FormatsSpecVersion; + + //=== VK_EXT_fragment_density_map2 === + using VULKAN_HPP_NAMESPACE::EXTFragmentDensityMap2ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFragmentDensityMap2SpecVersion; + + //=== VK_QCOM_rotated_copy_commands === + using VULKAN_HPP_NAMESPACE::QCOMRotatedCopyCommandsExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMRotatedCopyCommandsSpecVersion; + + //=== VK_EXT_image_robustness === + using VULKAN_HPP_NAMESPACE::EXTImageRobustnessExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImageRobustnessSpecVersion; + + //=== VK_KHR_workgroup_memory_explicit_layout === + using VULKAN_HPP_NAMESPACE::KHRWorkgroupMemoryExplicitLayoutExtensionName; + using VULKAN_HPP_NAMESPACE::KHRWorkgroupMemoryExplicitLayoutSpecVersion; + + //=== VK_KHR_copy_commands2 === + using VULKAN_HPP_NAMESPACE::KHRCopyCommands2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRCopyCommands2SpecVersion; + + //=== VK_EXT_image_compression_control === + using VULKAN_HPP_NAMESPACE::EXTImageCompressionControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImageCompressionControlSpecVersion; + + //=== VK_EXT_attachment_feedback_loop_layout === + using VULKAN_HPP_NAMESPACE::EXTAttachmentFeedbackLoopLayoutExtensionName; + using VULKAN_HPP_NAMESPACE::EXTAttachmentFeedbackLoopLayoutSpecVersion; + + //=== VK_EXT_4444_formats === + using VULKAN_HPP_NAMESPACE::EXT4444FormatsExtensionName; + using VULKAN_HPP_NAMESPACE::EXT4444FormatsSpecVersion; + + //=== VK_EXT_device_fault === + using VULKAN_HPP_NAMESPACE::EXTDeviceFaultExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDeviceFaultSpecVersion; + + //=== VK_ARM_rasterization_order_attachment_access === + using VULKAN_HPP_NAMESPACE::ARMRasterizationOrderAttachmentAccessExtensionName; + using VULKAN_HPP_NAMESPACE::ARMRasterizationOrderAttachmentAccessSpecVersion; + + //=== VK_EXT_rgba10x6_formats === + using VULKAN_HPP_NAMESPACE::EXTRgba10X6FormatsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTRgba10X6FormatsSpecVersion; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + using VULKAN_HPP_NAMESPACE::NVAcquireWinrtDisplayExtensionName; + using VULKAN_HPP_NAMESPACE::NVAcquireWinrtDisplaySpecVersion; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + using VULKAN_HPP_NAMESPACE::EXTDirectfbSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDirectfbSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_VALVE_mutable_descriptor_type === + using VULKAN_HPP_NAMESPACE::VALVEMutableDescriptorTypeExtensionName; + using VULKAN_HPP_NAMESPACE::VALVEMutableDescriptorTypeSpecVersion; + + //=== VK_EXT_vertex_input_dynamic_state === + using VULKAN_HPP_NAMESPACE::EXTVertexInputDynamicStateExtensionName; + using VULKAN_HPP_NAMESPACE::EXTVertexInputDynamicStateSpecVersion; + + //=== VK_EXT_physical_device_drm === + using VULKAN_HPP_NAMESPACE::EXTPhysicalDeviceDrmExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPhysicalDeviceDrmSpecVersion; + + //=== VK_EXT_device_address_binding_report === + using VULKAN_HPP_NAMESPACE::EXTDeviceAddressBindingReportExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDeviceAddressBindingReportSpecVersion; + + //=== VK_EXT_depth_clip_control === + using VULKAN_HPP_NAMESPACE::EXTDepthClipControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDepthClipControlSpecVersion; + + //=== VK_EXT_primitive_topology_list_restart === + using VULKAN_HPP_NAMESPACE::EXTPrimitiveTopologyListRestartExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPrimitiveTopologyListRestartSpecVersion; + + //=== VK_KHR_format_feature_flags2 === + using VULKAN_HPP_NAMESPACE::KHRFormatFeatureFlags2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRFormatFeatureFlags2SpecVersion; + + //=== VK_EXT_present_mode_fifo_latest_ready === + using VULKAN_HPP_NAMESPACE::EXTPresentModeFifoLatestReadyExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPresentModeFifoLatestReadySpecVersion; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + using VULKAN_HPP_NAMESPACE::FUCHSIAExternalMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::FUCHSIAExternalMemorySpecVersion; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + using VULKAN_HPP_NAMESPACE::FUCHSIAExternalSemaphoreExtensionName; + using VULKAN_HPP_NAMESPACE::FUCHSIAExternalSemaphoreSpecVersion; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_NAMESPACE::FUCHSIABufferCollectionExtensionName; + using VULKAN_HPP_NAMESPACE::FUCHSIABufferCollectionSpecVersion; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + using VULKAN_HPP_NAMESPACE::HUAWEISubpassShadingExtensionName; + using VULKAN_HPP_NAMESPACE::HUAWEISubpassShadingSpecVersion; + + //=== VK_HUAWEI_invocation_mask === + using VULKAN_HPP_NAMESPACE::HUAWEIInvocationMaskExtensionName; + using VULKAN_HPP_NAMESPACE::HUAWEIInvocationMaskSpecVersion; + + //=== VK_NV_external_memory_rdma === + using VULKAN_HPP_NAMESPACE::NVExternalMemoryRdmaExtensionName; + using VULKAN_HPP_NAMESPACE::NVExternalMemoryRdmaSpecVersion; + + //=== VK_EXT_pipeline_properties === + using VULKAN_HPP_NAMESPACE::EXTPipelinePropertiesExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPipelinePropertiesSpecVersion; + + //=== VK_EXT_frame_boundary === + using VULKAN_HPP_NAMESPACE::EXTFrameBoundaryExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFrameBoundarySpecVersion; + + //=== VK_EXT_multisampled_render_to_single_sampled === + using VULKAN_HPP_NAMESPACE::EXTMultisampledRenderToSingleSampledExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMultisampledRenderToSingleSampledSpecVersion; + + //=== VK_EXT_extended_dynamic_state2 === + using VULKAN_HPP_NAMESPACE::EXTExtendedDynamicState2ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExtendedDynamicState2SpecVersion; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + using VULKAN_HPP_NAMESPACE::QNXScreenSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::QNXScreenSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + using VULKAN_HPP_NAMESPACE::EXTColorWriteEnableExtensionName; + using VULKAN_HPP_NAMESPACE::EXTColorWriteEnableSpecVersion; + + //=== VK_EXT_primitives_generated_query === + using VULKAN_HPP_NAMESPACE::EXTPrimitivesGeneratedQueryExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPrimitivesGeneratedQuerySpecVersion; + + //=== VK_KHR_ray_tracing_maintenance1 === + using VULKAN_HPP_NAMESPACE::KHRRayTracingMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRRayTracingMaintenance1SpecVersion; + + //=== VK_EXT_global_priority_query === + using VULKAN_HPP_NAMESPACE::EXTGlobalPriorityQueryExtensionName; + using VULKAN_HPP_NAMESPACE::EXTGlobalPriorityQuerySpecVersion; + using VULKAN_HPP_NAMESPACE::MaxGlobalPrioritySizeEXT; + + //=== VK_EXT_image_view_min_lod === + using VULKAN_HPP_NAMESPACE::EXTImageViewMinLodExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImageViewMinLodSpecVersion; + + //=== VK_EXT_multi_draw === + using VULKAN_HPP_NAMESPACE::EXTMultiDrawExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMultiDrawSpecVersion; + + //=== VK_EXT_image_2d_view_of_3d === + using VULKAN_HPP_NAMESPACE::EXTImage2DViewOf3DExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImage2DViewOf3DSpecVersion; + + //=== VK_KHR_portability_enumeration === + using VULKAN_HPP_NAMESPACE::KHRPortabilityEnumerationExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPortabilityEnumerationSpecVersion; + + //=== VK_EXT_shader_tile_image === + using VULKAN_HPP_NAMESPACE::EXTShaderTileImageExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderTileImageSpecVersion; + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_NAMESPACE::EXTOpacityMicromapExtensionName; + using VULKAN_HPP_NAMESPACE::EXTOpacityMicromapSpecVersion; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + using VULKAN_HPP_NAMESPACE::NVDisplacementMicromapExtensionName; + using VULKAN_HPP_NAMESPACE::NVDisplacementMicromapSpecVersion; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_load_store_op_none === + using VULKAN_HPP_NAMESPACE::EXTLoadStoreOpNoneExtensionName; + using VULKAN_HPP_NAMESPACE::EXTLoadStoreOpNoneSpecVersion; + + //=== VK_HUAWEI_cluster_culling_shader === + using VULKAN_HPP_NAMESPACE::HUAWEIClusterCullingShaderExtensionName; + using VULKAN_HPP_NAMESPACE::HUAWEIClusterCullingShaderSpecVersion; + + //=== VK_EXT_border_color_swizzle === + using VULKAN_HPP_NAMESPACE::EXTBorderColorSwizzleExtensionName; + using VULKAN_HPP_NAMESPACE::EXTBorderColorSwizzleSpecVersion; + + //=== VK_EXT_pageable_device_local_memory === + using VULKAN_HPP_NAMESPACE::EXTPageableDeviceLocalMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPageableDeviceLocalMemorySpecVersion; + + //=== VK_KHR_maintenance4 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance4ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance4SpecVersion; + + //=== VK_ARM_shader_core_properties === + using VULKAN_HPP_NAMESPACE::ARMShaderCorePropertiesExtensionName; + using VULKAN_HPP_NAMESPACE::ARMShaderCorePropertiesSpecVersion; + + //=== VK_KHR_shader_subgroup_rotate === + using VULKAN_HPP_NAMESPACE::KHRShaderSubgroupRotateExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderSubgroupRotateSpecVersion; + + //=== VK_ARM_scheduling_controls === + using VULKAN_HPP_NAMESPACE::ARMSchedulingControlsExtensionName; + using VULKAN_HPP_NAMESPACE::ARMSchedulingControlsSpecVersion; + + //=== VK_EXT_image_sliced_view_of_3d === + using VULKAN_HPP_NAMESPACE::EXTImageSlicedViewOf3DExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImageSlicedViewOf3DSpecVersion; + using VULKAN_HPP_NAMESPACE::Remaining3DSlicesEXT; + + //=== VK_VALVE_descriptor_set_host_mapping === + using VULKAN_HPP_NAMESPACE::VALVEDescriptorSetHostMappingExtensionName; + using VULKAN_HPP_NAMESPACE::VALVEDescriptorSetHostMappingSpecVersion; + + //=== VK_EXT_depth_clamp_zero_one === + using VULKAN_HPP_NAMESPACE::EXTDepthClampZeroOneExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDepthClampZeroOneSpecVersion; + + //=== VK_EXT_non_seamless_cube_map === + using VULKAN_HPP_NAMESPACE::EXTNonSeamlessCubeMapExtensionName; + using VULKAN_HPP_NAMESPACE::EXTNonSeamlessCubeMapSpecVersion; + + //=== VK_ARM_render_pass_striped === + using VULKAN_HPP_NAMESPACE::ARMRenderPassStripedExtensionName; + using VULKAN_HPP_NAMESPACE::ARMRenderPassStripedSpecVersion; + + //=== VK_QCOM_fragment_density_map_offset === + using VULKAN_HPP_NAMESPACE::QCOMFragmentDensityMapOffsetExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMFragmentDensityMapOffsetSpecVersion; + + //=== VK_NV_copy_memory_indirect === + using VULKAN_HPP_NAMESPACE::NVCopyMemoryIndirectExtensionName; + using VULKAN_HPP_NAMESPACE::NVCopyMemoryIndirectSpecVersion; + + //=== VK_NV_memory_decompression === + using VULKAN_HPP_NAMESPACE::NVMemoryDecompressionExtensionName; + using VULKAN_HPP_NAMESPACE::NVMemoryDecompressionSpecVersion; + + //=== VK_NV_device_generated_commands_compute === + using VULKAN_HPP_NAMESPACE::NVDeviceGeneratedCommandsComputeExtensionName; + using VULKAN_HPP_NAMESPACE::NVDeviceGeneratedCommandsComputeSpecVersion; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + using VULKAN_HPP_NAMESPACE::NVRayTracingLinearSweptSpheresExtensionName; + using VULKAN_HPP_NAMESPACE::NVRayTracingLinearSweptSpheresSpecVersion; + + //=== VK_NV_linear_color_attachment === + using VULKAN_HPP_NAMESPACE::NVLinearColorAttachmentExtensionName; + using VULKAN_HPP_NAMESPACE::NVLinearColorAttachmentSpecVersion; + + //=== VK_GOOGLE_surfaceless_query === + using VULKAN_HPP_NAMESPACE::GOOGLESurfacelessQueryExtensionName; + using VULKAN_HPP_NAMESPACE::GOOGLESurfacelessQuerySpecVersion; + + //=== VK_KHR_shader_maximal_reconvergence === + using VULKAN_HPP_NAMESPACE::KHRShaderMaximalReconvergenceExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderMaximalReconvergenceSpecVersion; + + //=== VK_EXT_image_compression_control_swapchain === + using VULKAN_HPP_NAMESPACE::EXTImageCompressionControlSwapchainExtensionName; + using VULKAN_HPP_NAMESPACE::EXTImageCompressionControlSwapchainSpecVersion; + + //=== VK_QCOM_image_processing === + using VULKAN_HPP_NAMESPACE::QCOMImageProcessingExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMImageProcessingSpecVersion; + + //=== VK_EXT_nested_command_buffer === + using VULKAN_HPP_NAMESPACE::EXTNestedCommandBufferExtensionName; + using VULKAN_HPP_NAMESPACE::EXTNestedCommandBufferSpecVersion; + + //=== VK_EXT_external_memory_acquire_unmodified === + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryAcquireUnmodifiedExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryAcquireUnmodifiedSpecVersion; + + //=== VK_EXT_extended_dynamic_state3 === + using VULKAN_HPP_NAMESPACE::EXTExtendedDynamicState3ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExtendedDynamicState3SpecVersion; + + //=== VK_EXT_subpass_merge_feedback === + using VULKAN_HPP_NAMESPACE::EXTSubpassMergeFeedbackExtensionName; + using VULKAN_HPP_NAMESPACE::EXTSubpassMergeFeedbackSpecVersion; + + //=== VK_LUNARG_direct_driver_loading === + using VULKAN_HPP_NAMESPACE::LUNARGDirectDriverLoadingExtensionName; + using VULKAN_HPP_NAMESPACE::LUNARGDirectDriverLoadingSpecVersion; + + //=== VK_ARM_tensors === + using VULKAN_HPP_NAMESPACE::ARMTensorsExtensionName; + using VULKAN_HPP_NAMESPACE::ARMTensorsSpecVersion; + + //=== VK_EXT_shader_module_identifier === + using VULKAN_HPP_NAMESPACE::EXTShaderModuleIdentifierExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderModuleIdentifierSpecVersion; + using VULKAN_HPP_NAMESPACE::MaxShaderModuleIdentifierSizeEXT; + + //=== VK_EXT_rasterization_order_attachment_access === + using VULKAN_HPP_NAMESPACE::EXTRasterizationOrderAttachmentAccessExtensionName; + using VULKAN_HPP_NAMESPACE::EXTRasterizationOrderAttachmentAccessSpecVersion; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_NAMESPACE::NVOpticalFlowExtensionName; + using VULKAN_HPP_NAMESPACE::NVOpticalFlowSpecVersion; + + //=== VK_EXT_legacy_dithering === + using VULKAN_HPP_NAMESPACE::EXTLegacyDitheringExtensionName; + using VULKAN_HPP_NAMESPACE::EXTLegacyDitheringSpecVersion; + + //=== VK_EXT_pipeline_protected_access === + using VULKAN_HPP_NAMESPACE::EXTPipelineProtectedAccessExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPipelineProtectedAccessSpecVersion; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_format_resolve === + using VULKAN_HPP_NAMESPACE::ANDROIDExternalFormatResolveExtensionName; + using VULKAN_HPP_NAMESPACE::ANDROIDExternalFormatResolveSpecVersion; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_KHR_maintenance5 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance5ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance5SpecVersion; + + //=== VK_AMD_anti_lag === + using VULKAN_HPP_NAMESPACE::AMDAntiLagExtensionName; + using VULKAN_HPP_NAMESPACE::AMDAntiLagSpecVersion; + + //=== VK_KHR_present_id2 === + using VULKAN_HPP_NAMESPACE::KHRPresentId2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPresentId2SpecVersion; + + //=== VK_KHR_present_wait2 === + using VULKAN_HPP_NAMESPACE::KHRPresentWait2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPresentWait2SpecVersion; + + //=== VK_KHR_ray_tracing_position_fetch === + using VULKAN_HPP_NAMESPACE::KHRRayTracingPositionFetchExtensionName; + using VULKAN_HPP_NAMESPACE::KHRRayTracingPositionFetchSpecVersion; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_NAMESPACE::EXTShaderObjectExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderObjectSpecVersion; + + //=== VK_KHR_pipeline_binary === + using VULKAN_HPP_NAMESPACE::KHRPipelineBinaryExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPipelineBinarySpecVersion; + using VULKAN_HPP_NAMESPACE::MaxPipelineBinaryKeySizeKHR; + + //=== VK_QCOM_tile_properties === + using VULKAN_HPP_NAMESPACE::QCOMTilePropertiesExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMTilePropertiesSpecVersion; + + //=== VK_SEC_amigo_profiling === + using VULKAN_HPP_NAMESPACE::SECAmigoProfilingExtensionName; + using VULKAN_HPP_NAMESPACE::SECAmigoProfilingSpecVersion; + + //=== VK_KHR_surface_maintenance1 === + using VULKAN_HPP_NAMESPACE::KHRSurfaceMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSurfaceMaintenance1SpecVersion; + + //=== VK_KHR_swapchain_maintenance1 === + using VULKAN_HPP_NAMESPACE::KHRSwapchainMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRSwapchainMaintenance1SpecVersion; + + //=== VK_QCOM_multiview_per_view_viewports === + using VULKAN_HPP_NAMESPACE::QCOMMultiviewPerViewViewportsExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMMultiviewPerViewViewportsSpecVersion; + + //=== VK_NV_ray_tracing_invocation_reorder === + using VULKAN_HPP_NAMESPACE::NVRayTracingInvocationReorderExtensionName; + using VULKAN_HPP_NAMESPACE::NVRayTracingInvocationReorderSpecVersion; + + //=== VK_NV_cooperative_vector === + using VULKAN_HPP_NAMESPACE::NVCooperativeVectorExtensionName; + using VULKAN_HPP_NAMESPACE::NVCooperativeVectorSpecVersion; + + //=== VK_NV_extended_sparse_address_space === + using VULKAN_HPP_NAMESPACE::NVExtendedSparseAddressSpaceExtensionName; + using VULKAN_HPP_NAMESPACE::NVExtendedSparseAddressSpaceSpecVersion; + + //=== VK_EXT_mutable_descriptor_type === + using VULKAN_HPP_NAMESPACE::EXTMutableDescriptorTypeExtensionName; + using VULKAN_HPP_NAMESPACE::EXTMutableDescriptorTypeSpecVersion; + + //=== VK_EXT_legacy_vertex_attributes === + using VULKAN_HPP_NAMESPACE::EXTLegacyVertexAttributesExtensionName; + using VULKAN_HPP_NAMESPACE::EXTLegacyVertexAttributesSpecVersion; + + //=== VK_EXT_layer_settings === + using VULKAN_HPP_NAMESPACE::EXTLayerSettingsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTLayerSettingsSpecVersion; + + //=== VK_ARM_shader_core_builtins === + using VULKAN_HPP_NAMESPACE::ARMShaderCoreBuiltinsExtensionName; + using VULKAN_HPP_NAMESPACE::ARMShaderCoreBuiltinsSpecVersion; + + //=== VK_EXT_pipeline_library_group_handles === + using VULKAN_HPP_NAMESPACE::EXTPipelineLibraryGroupHandlesExtensionName; + using VULKAN_HPP_NAMESPACE::EXTPipelineLibraryGroupHandlesSpecVersion; + + //=== VK_EXT_dynamic_rendering_unused_attachments === + using VULKAN_HPP_NAMESPACE::EXTDynamicRenderingUnusedAttachmentsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDynamicRenderingUnusedAttachmentsSpecVersion; + + //=== VK_NV_low_latency2 === + using VULKAN_HPP_NAMESPACE::NVLowLatency2ExtensionName; + using VULKAN_HPP_NAMESPACE::NVLowLatency2SpecVersion; + + //=== VK_KHR_cooperative_matrix === + using VULKAN_HPP_NAMESPACE::KHRCooperativeMatrixExtensionName; + using VULKAN_HPP_NAMESPACE::KHRCooperativeMatrixSpecVersion; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_NAMESPACE::ARMDataGraphExtensionName; + using VULKAN_HPP_NAMESPACE::ARMDataGraphSpecVersion; + using VULKAN_HPP_NAMESPACE::MaxPhysicalDeviceDataGraphOperationSetNameSizeARM; + + //=== VK_QCOM_multiview_per_view_render_areas === + using VULKAN_HPP_NAMESPACE::QCOMMultiviewPerViewRenderAreasExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMMultiviewPerViewRenderAreasSpecVersion; + + //=== VK_KHR_compute_shader_derivatives === + using VULKAN_HPP_NAMESPACE::KHRComputeShaderDerivativesExtensionName; + using VULKAN_HPP_NAMESPACE::KHRComputeShaderDerivativesSpecVersion; + + //=== VK_KHR_video_decode_av1 === + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeAv1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeAv1SpecVersion; + using VULKAN_HPP_NAMESPACE::MaxVideoAv1ReferencesPerFrameKHR; + + //=== VK_KHR_video_encode_av1 === + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeAv1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeAv1SpecVersion; + + //=== VK_KHR_video_decode_vp9 === + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeVp9ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoDecodeVp9SpecVersion; + using VULKAN_HPP_NAMESPACE::MaxVideoVp9ReferencesPerFrameKHR; + + //=== VK_KHR_video_maintenance1 === + using VULKAN_HPP_NAMESPACE::KHRVideoMaintenance1ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoMaintenance1SpecVersion; + + //=== VK_NV_per_stage_descriptor_set === + using VULKAN_HPP_NAMESPACE::NVPerStageDescriptorSetExtensionName; + using VULKAN_HPP_NAMESPACE::NVPerStageDescriptorSetSpecVersion; + + //=== VK_QCOM_image_processing2 === + using VULKAN_HPP_NAMESPACE::QCOMImageProcessing2ExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMImageProcessing2SpecVersion; + + //=== VK_QCOM_filter_cubic_weights === + using VULKAN_HPP_NAMESPACE::QCOMFilterCubicWeightsExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMFilterCubicWeightsSpecVersion; + + //=== VK_QCOM_ycbcr_degamma === + using VULKAN_HPP_NAMESPACE::QCOMYcbcrDegammaExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMYcbcrDegammaSpecVersion; + + //=== VK_QCOM_filter_cubic_clamp === + using VULKAN_HPP_NAMESPACE::QCOMFilterCubicClampExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMFilterCubicClampSpecVersion; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + using VULKAN_HPP_NAMESPACE::EXTAttachmentFeedbackLoopDynamicStateExtensionName; + using VULKAN_HPP_NAMESPACE::EXTAttachmentFeedbackLoopDynamicStateSpecVersion; + + //=== VK_KHR_vertex_attribute_divisor === + using VULKAN_HPP_NAMESPACE::KHRVertexAttributeDivisorExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVertexAttributeDivisorSpecVersion; + + //=== VK_KHR_load_store_op_none === + using VULKAN_HPP_NAMESPACE::KHRLoadStoreOpNoneExtensionName; + using VULKAN_HPP_NAMESPACE::KHRLoadStoreOpNoneSpecVersion; + + //=== VK_KHR_unified_image_layouts === + using VULKAN_HPP_NAMESPACE::KHRUnifiedImageLayoutsExtensionName; + using VULKAN_HPP_NAMESPACE::KHRUnifiedImageLayoutsSpecVersion; + + //=== VK_KHR_shader_float_controls2 === + using VULKAN_HPP_NAMESPACE::KHRShaderFloatControls2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderFloatControls2SpecVersion; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + using VULKAN_HPP_NAMESPACE::QNXExternalMemoryScreenBufferExtensionName; + using VULKAN_HPP_NAMESPACE::QNXExternalMemoryScreenBufferSpecVersion; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_MSFT_layered_driver === + using VULKAN_HPP_NAMESPACE::MSFTLayeredDriverExtensionName; + using VULKAN_HPP_NAMESPACE::MSFTLayeredDriverSpecVersion; + + //=== VK_KHR_index_type_uint8 === + using VULKAN_HPP_NAMESPACE::KHRIndexTypeUint8ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRIndexTypeUint8SpecVersion; + + //=== VK_KHR_line_rasterization === + using VULKAN_HPP_NAMESPACE::KHRLineRasterizationExtensionName; + using VULKAN_HPP_NAMESPACE::KHRLineRasterizationSpecVersion; + + //=== VK_KHR_calibrated_timestamps === + using VULKAN_HPP_NAMESPACE::KHRCalibratedTimestampsExtensionName; + using VULKAN_HPP_NAMESPACE::KHRCalibratedTimestampsSpecVersion; + + //=== VK_KHR_shader_expect_assume === + using VULKAN_HPP_NAMESPACE::KHRShaderExpectAssumeExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderExpectAssumeSpecVersion; + + //=== VK_KHR_maintenance6 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance6ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance6SpecVersion; + + //=== VK_NV_descriptor_pool_overallocation === + using VULKAN_HPP_NAMESPACE::NVDescriptorPoolOverallocationExtensionName; + using VULKAN_HPP_NAMESPACE::NVDescriptorPoolOverallocationSpecVersion; + + //=== VK_QCOM_tile_memory_heap === + using VULKAN_HPP_NAMESPACE::QCOMTileMemoryHeapExtensionName; + using VULKAN_HPP_NAMESPACE::QCOMTileMemoryHeapSpecVersion; + + //=== VK_NV_display_stereo === + using VULKAN_HPP_NAMESPACE::NVDisplayStereoExtensionName; + using VULKAN_HPP_NAMESPACE::NVDisplayStereoSpecVersion; + + //=== VK_KHR_video_encode_intra_refresh === + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeIntraRefreshExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeIntraRefreshSpecVersion; + + //=== VK_KHR_video_encode_quantization_map === + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeQuantizationMapExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoEncodeQuantizationMapSpecVersion; + + //=== VK_NV_raw_access_chains === + using VULKAN_HPP_NAMESPACE::NVRawAccessChainsExtensionName; + using VULKAN_HPP_NAMESPACE::NVRawAccessChainsSpecVersion; + + //=== VK_NV_external_compute_queue === + using VULKAN_HPP_NAMESPACE::NVExternalComputeQueueExtensionName; + using VULKAN_HPP_NAMESPACE::NVExternalComputeQueueSpecVersion; + + //=== VK_KHR_shader_relaxed_extended_instruction === + using VULKAN_HPP_NAMESPACE::KHRShaderRelaxedExtendedInstructionExtensionName; + using VULKAN_HPP_NAMESPACE::KHRShaderRelaxedExtendedInstructionSpecVersion; + + //=== VK_NV_command_buffer_inheritance === + using VULKAN_HPP_NAMESPACE::NVCommandBufferInheritanceExtensionName; + using VULKAN_HPP_NAMESPACE::NVCommandBufferInheritanceSpecVersion; + + //=== VK_KHR_maintenance7 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance7ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance7SpecVersion; + + //=== VK_NV_shader_atomic_float16_vector === + using VULKAN_HPP_NAMESPACE::NVShaderAtomicFloat16VectorExtensionName; + using VULKAN_HPP_NAMESPACE::NVShaderAtomicFloat16VectorSpecVersion; + + //=== VK_EXT_shader_replicated_composites === + using VULKAN_HPP_NAMESPACE::EXTShaderReplicatedCompositesExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderReplicatedCompositesSpecVersion; + + //=== VK_EXT_shader_float8 === + using VULKAN_HPP_NAMESPACE::EXTShaderFloat8ExtensionName; + using VULKAN_HPP_NAMESPACE::EXTShaderFloat8SpecVersion; + + //=== VK_NV_ray_tracing_validation === + using VULKAN_HPP_NAMESPACE::NVRayTracingValidationExtensionName; + using VULKAN_HPP_NAMESPACE::NVRayTracingValidationSpecVersion; + + //=== VK_NV_cluster_acceleration_structure === + using VULKAN_HPP_NAMESPACE::NVClusterAccelerationStructureExtensionName; + using VULKAN_HPP_NAMESPACE::NVClusterAccelerationStructureSpecVersion; + + //=== VK_NV_partitioned_acceleration_structure === + using VULKAN_HPP_NAMESPACE::NVPartitionedAccelerationStructureExtensionName; + using VULKAN_HPP_NAMESPACE::NVPartitionedAccelerationStructureSpecVersion; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructurePartitionIndexGlobalNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_NAMESPACE::EXTDeviceGeneratedCommandsExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDeviceGeneratedCommandsSpecVersion; + + //=== VK_KHR_maintenance8 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance8ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance8SpecVersion; + + //=== VK_MESA_image_alignment_control === + using VULKAN_HPP_NAMESPACE::MESAImageAlignmentControlExtensionName; + using VULKAN_HPP_NAMESPACE::MESAImageAlignmentControlSpecVersion; + + //=== VK_EXT_depth_clamp_control === + using VULKAN_HPP_NAMESPACE::EXTDepthClampControlExtensionName; + using VULKAN_HPP_NAMESPACE::EXTDepthClampControlSpecVersion; + + //=== VK_KHR_maintenance9 === + using VULKAN_HPP_NAMESPACE::KHRMaintenance9ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRMaintenance9SpecVersion; + + //=== VK_KHR_video_maintenance2 === + using VULKAN_HPP_NAMESPACE::KHRVideoMaintenance2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRVideoMaintenance2SpecVersion; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + using VULKAN_HPP_NAMESPACE::OHOSSurfaceExtensionName; + using VULKAN_HPP_NAMESPACE::OHOSSurfaceSpecVersion; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_HUAWEI_hdr_vivid === + using VULKAN_HPP_NAMESPACE::HUAWEIHdrVividExtensionName; + using VULKAN_HPP_NAMESPACE::HUAWEIHdrVividSpecVersion; + + //=== VK_NV_cooperative_matrix2 === + using VULKAN_HPP_NAMESPACE::NVCooperativeMatrix2ExtensionName; + using VULKAN_HPP_NAMESPACE::NVCooperativeMatrix2SpecVersion; + + //=== VK_ARM_pipeline_opacity_micromap === + using VULKAN_HPP_NAMESPACE::ARMPipelineOpacityMicromapExtensionName; + using VULKAN_HPP_NAMESPACE::ARMPipelineOpacityMicromapSpecVersion; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryMetalExtensionName; + using VULKAN_HPP_NAMESPACE::EXTExternalMemoryMetalSpecVersion; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_depth_clamp_zero_one === + using VULKAN_HPP_NAMESPACE::KHRDepthClampZeroOneExtensionName; + using VULKAN_HPP_NAMESPACE::KHRDepthClampZeroOneSpecVersion; + + //=== VK_EXT_vertex_attribute_robustness === + using VULKAN_HPP_NAMESPACE::EXTVertexAttributeRobustnessExtensionName; + using VULKAN_HPP_NAMESPACE::EXTVertexAttributeRobustnessSpecVersion; + + //=== VK_ARM_format_pack === + using VULKAN_HPP_NAMESPACE::ARMFormatPackExtensionName; + using VULKAN_HPP_NAMESPACE::ARMFormatPackSpecVersion; + + //=== VK_VALVE_fragment_density_map_layered === + using VULKAN_HPP_NAMESPACE::VALVEFragmentDensityMapLayeredExtensionName; + using VULKAN_HPP_NAMESPACE::VALVEFragmentDensityMapLayeredSpecVersion; + + //=== VK_KHR_robustness2 === + using VULKAN_HPP_NAMESPACE::KHRRobustness2ExtensionName; + using VULKAN_HPP_NAMESPACE::KHRRobustness2SpecVersion; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_present_metering === + using VULKAN_HPP_NAMESPACE::NVPresentMeteringExtensionName; + using VULKAN_HPP_NAMESPACE::NVPresentMeteringSpecVersion; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_fragment_density_map_offset === + using VULKAN_HPP_NAMESPACE::EXTFragmentDensityMapOffsetExtensionName; + using VULKAN_HPP_NAMESPACE::EXTFragmentDensityMapOffsetSpecVersion; + + //=== VK_EXT_zero_initialize_device_memory === + using VULKAN_HPP_NAMESPACE::EXTZeroInitializeDeviceMemoryExtensionName; + using VULKAN_HPP_NAMESPACE::EXTZeroInitializeDeviceMemorySpecVersion; + + //=== VK_KHR_present_mode_fifo_latest_ready === + using VULKAN_HPP_NAMESPACE::KHRPresentModeFifoLatestReadyExtensionName; + using VULKAN_HPP_NAMESPACE::KHRPresentModeFifoLatestReadySpecVersion; + + //=== VK_SEC_pipeline_cache_incremental_mode === + using VULKAN_HPP_NAMESPACE::SECPipelineCacheIncrementalModeExtensionName; + using VULKAN_HPP_NAMESPACE::SECPipelineCacheIncrementalModeSpecVersion; + + //======================== + //=== CONSTEXPR VALUEs === + //======================== + using VULKAN_HPP_NAMESPACE::HeaderVersion; + using VULKAN_HPP_NAMESPACE::Use64BitPtrDefines; + + //========================= + //=== CONSTEXPR CALLEEs === + //========================= + using VULKAN_HPP_NAMESPACE::apiVersionMajor; + using VULKAN_HPP_NAMESPACE::apiVersionMinor; + using VULKAN_HPP_NAMESPACE::apiVersionPatch; + using VULKAN_HPP_NAMESPACE::apiVersionVariant; + using VULKAN_HPP_NAMESPACE::makeApiVersion; + using VULKAN_HPP_NAMESPACE::makeVersion; + using VULKAN_HPP_NAMESPACE::versionMajor; + using VULKAN_HPP_NAMESPACE::versionMinor; + using VULKAN_HPP_NAMESPACE::versionPatch; + + //========================== + //=== CONSTEXPR CALLERs === + //========================== + using VULKAN_HPP_NAMESPACE::ApiVersion; + using VULKAN_HPP_NAMESPACE::ApiVersion10; + using VULKAN_HPP_NAMESPACE::ApiVersion11; + using VULKAN_HPP_NAMESPACE::ApiVersion12; + using VULKAN_HPP_NAMESPACE::ApiVersion13; + using VULKAN_HPP_NAMESPACE::ApiVersion14; + using VULKAN_HPP_NAMESPACE::HeaderVersionComplete; + + //==================== + //=== FUNCPOINTERs === + //==================== + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::PFN_AllocationFunction; + using VULKAN_HPP_NAMESPACE::PFN_FreeFunction; + using VULKAN_HPP_NAMESPACE::PFN_InternalAllocationNotification; + using VULKAN_HPP_NAMESPACE::PFN_InternalFreeNotification; + using VULKAN_HPP_NAMESPACE::PFN_ReallocationFunction; + using VULKAN_HPP_NAMESPACE::PFN_VoidFunction; + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::PFN_DebugReportCallbackEXT; + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::PFN_DebugUtilsMessengerCallbackEXT; + + //=== VK_EXT_device_memory_report === + using VULKAN_HPP_NAMESPACE::PFN_DeviceMemoryReportCallbackEXT; + + //=== VK_LUNARG_direct_driver_loading === + using VULKAN_HPP_NAMESPACE::PFN_GetInstanceProcAddrLUNARG; + + //=============== + //=== STRUCTs === + //=============== + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::AllocationCallbacks; + using VULKAN_HPP_NAMESPACE::ApplicationInfo; + using VULKAN_HPP_NAMESPACE::AttachmentDescription; + using VULKAN_HPP_NAMESPACE::AttachmentReference; + using VULKAN_HPP_NAMESPACE::BaseInStructure; + using VULKAN_HPP_NAMESPACE::BaseOutStructure; + using VULKAN_HPP_NAMESPACE::BindSparseInfo; + using VULKAN_HPP_NAMESPACE::BufferCopy; + using VULKAN_HPP_NAMESPACE::BufferCreateInfo; + using VULKAN_HPP_NAMESPACE::BufferImageCopy; + using VULKAN_HPP_NAMESPACE::BufferMemoryBarrier; + using VULKAN_HPP_NAMESPACE::BufferViewCreateInfo; + using VULKAN_HPP_NAMESPACE::ClearAttachment; + using VULKAN_HPP_NAMESPACE::ClearColorValue; + using VULKAN_HPP_NAMESPACE::ClearDepthStencilValue; + using VULKAN_HPP_NAMESPACE::ClearRect; + using VULKAN_HPP_NAMESPACE::ClearValue; + using VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo; + using VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo; + using VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo; + using VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo; + using VULKAN_HPP_NAMESPACE::ComponentMapping; + using VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo; + using VULKAN_HPP_NAMESPACE::CopyDescriptorSet; + using VULKAN_HPP_NAMESPACE::DescriptorBufferInfo; + using VULKAN_HPP_NAMESPACE::DescriptorImageInfo; + using VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo; + using VULKAN_HPP_NAMESPACE::DescriptorPoolSize; + using VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo; + using VULKAN_HPP_NAMESPACE::DeviceCreateInfo; + using VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo; + using VULKAN_HPP_NAMESPACE::DispatchIndirectCommand; + using VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand; + using VULKAN_HPP_NAMESPACE::DrawIndirectCommand; + using VULKAN_HPP_NAMESPACE::EventCreateInfo; + using VULKAN_HPP_NAMESPACE::ExtensionProperties; + using VULKAN_HPP_NAMESPACE::Extent2D; + using VULKAN_HPP_NAMESPACE::Extent3D; + using VULKAN_HPP_NAMESPACE::FenceCreateInfo; + using VULKAN_HPP_NAMESPACE::FormatProperties; + using VULKAN_HPP_NAMESPACE::FramebufferCreateInfo; + using VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo; + using VULKAN_HPP_NAMESPACE::ImageBlit; + using VULKAN_HPP_NAMESPACE::ImageCopy; + using VULKAN_HPP_NAMESPACE::ImageCreateInfo; + using VULKAN_HPP_NAMESPACE::ImageFormatProperties; + using VULKAN_HPP_NAMESPACE::ImageMemoryBarrier; + using VULKAN_HPP_NAMESPACE::ImageResolve; + using VULKAN_HPP_NAMESPACE::ImageSubresource; + using VULKAN_HPP_NAMESPACE::ImageSubresourceLayers; + using VULKAN_HPP_NAMESPACE::ImageSubresourceRange; + using VULKAN_HPP_NAMESPACE::ImageViewCreateInfo; + using VULKAN_HPP_NAMESPACE::InstanceCreateInfo; + using VULKAN_HPP_NAMESPACE::LayerProperties; + using VULKAN_HPP_NAMESPACE::MappedMemoryRange; + using VULKAN_HPP_NAMESPACE::MemoryAllocateInfo; + using VULKAN_HPP_NAMESPACE::MemoryBarrier; + using VULKAN_HPP_NAMESPACE::MemoryHeap; + using VULKAN_HPP_NAMESPACE::MemoryRequirements; + using VULKAN_HPP_NAMESPACE::MemoryType; + using VULKAN_HPP_NAMESPACE::Offset2D; + using VULKAN_HPP_NAMESPACE::Offset3D; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties; + using VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne; + using VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState; + using VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PushConstantRange; + using VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo; + using VULKAN_HPP_NAMESPACE::QueueFamilyProperties; + using VULKAN_HPP_NAMESPACE::Rect2D; + using VULKAN_HPP_NAMESPACE::RenderPassBeginInfo; + using VULKAN_HPP_NAMESPACE::RenderPassCreateInfo; + using VULKAN_HPP_NAMESPACE::SamplerCreateInfo; + using VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo; + using VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo; + using VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo; + using VULKAN_HPP_NAMESPACE::SparseImageFormatProperties; + using VULKAN_HPP_NAMESPACE::SparseImageMemoryBind; + using VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo; + using VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements; + using VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo; + using VULKAN_HPP_NAMESPACE::SparseMemoryBind; + using VULKAN_HPP_NAMESPACE::SpecializationInfo; + using VULKAN_HPP_NAMESPACE::SpecializationMapEntry; + using VULKAN_HPP_NAMESPACE::StencilOpState; + using VULKAN_HPP_NAMESPACE::SubmitInfo; + using VULKAN_HPP_NAMESPACE::SubpassDependency; + using VULKAN_HPP_NAMESPACE::SubpassDescription; + using VULKAN_HPP_NAMESPACE::SubresourceLayout; + using VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription; + using VULKAN_HPP_NAMESPACE::VertexInputBindingDescription; + using VULKAN_HPP_NAMESPACE::Viewport; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSet; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo; + using VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfoKHR; + using VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo; + using VULKAN_HPP_NAMESPACE::BindBufferMemoryInfoKHR; + using VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo; + using VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfoKHR; + using VULKAN_HPP_NAMESPACE::BindImageMemoryInfo; + using VULKAN_HPP_NAMESPACE::BindImageMemoryInfoKHR; + using VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo; + using VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfoKHR; + using VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2; + using VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2KHR; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupportKHR; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry; + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntryKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo; + using VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo; + using VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo; + using VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo; + using VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo; + using VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceQueueInfo2; + using VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo; + using VULKAN_HPP_NAMESPACE::ExportFenceCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo; + using VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoKHR; + using VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo; + using VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ExternalBufferProperties; + using VULKAN_HPP_NAMESPACE::ExternalBufferPropertiesKHR; + using VULKAN_HPP_NAMESPACE::ExternalFenceProperties; + using VULKAN_HPP_NAMESPACE::ExternalFencePropertiesKHR; + using VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties; + using VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo; + using VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo; + using VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ExternalMemoryProperties; + using VULKAN_HPP_NAMESPACE::ExternalMemoryPropertiesKHR; + using VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties; + using VULKAN_HPP_NAMESPACE::ExternalSemaphorePropertiesKHR; + using VULKAN_HPP_NAMESPACE::FormatProperties2; + using VULKAN_HPP_NAMESPACE::FormatProperties2KHR; + using VULKAN_HPP_NAMESPACE::ImageFormatProperties2; + using VULKAN_HPP_NAMESPACE::ImageFormatProperties2KHR; + using VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2; + using VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2KHR; + using VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo; + using VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfoKHR; + using VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2; + using VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2KHR; + using VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo; + using VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference; + using VULKAN_HPP_NAMESPACE::InputAttachmentAspectReferenceKHR; + using VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo; + using VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfoKHR; + using VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo; + using VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfoKHR; + using VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements; + using VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirementsKHR; + using VULKAN_HPP_NAMESPACE::MemoryRequirements2; + using VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceIDPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3PropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParameterFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointerFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointerFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo; + using VULKAN_HPP_NAMESPACE::QueueFamilyProperties2; + using VULKAN_HPP_NAMESPACE::QueueFamilyProperties2KHR; + using VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo; + using VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo; + using VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatPropertiesKHR; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfoKHR; + using VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2; + using VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2KHR; + using VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2; + using VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2KHR; + + //=== VK_VERSION_1_2 === + using VULKAN_HPP_NAMESPACE::AttachmentDescription2; + using VULKAN_HPP_NAMESPACE::AttachmentDescription2KHR; + using VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout; + using VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayoutKHR; + using VULKAN_HPP_NAMESPACE::AttachmentReference2; + using VULKAN_HPP_NAMESPACE::AttachmentReference2KHR; + using VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout; + using VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayoutKHR; + using VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo; + using VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfoEXT; + using VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfoKHR; + using VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo; + using VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ConformanceVersion; + using VULKAN_HPP_NAMESPACE::ConformanceVersionKHR; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo; + using VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfoEXT; + using VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport; + using VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupportEXT; + using VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo; + using VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfoKHR; + using VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo; + using VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfoKHR; + using VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo; + using VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo; + using VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo; + using VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo; + using VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolvePropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFloat16Int8FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphorePropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeaturesKHR; + using VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo; + using VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfoKHR; + using VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2; + using VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2KHR; + using VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo; + using VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo; + using VULKAN_HPP_NAMESPACE::SemaphoreSignalInfoKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo; + using VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo; + using VULKAN_HPP_NAMESPACE::SemaphoreWaitInfoKHR; + using VULKAN_HPP_NAMESPACE::SubpassBeginInfo; + using VULKAN_HPP_NAMESPACE::SubpassBeginInfoKHR; + using VULKAN_HPP_NAMESPACE::SubpassDependency2; + using VULKAN_HPP_NAMESPACE::SubpassDependency2KHR; + using VULKAN_HPP_NAMESPACE::SubpassDescription2; + using VULKAN_HPP_NAMESPACE::SubpassDescription2KHR; + using VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve; + using VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolveKHR; + using VULKAN_HPP_NAMESPACE::SubpassEndInfo; + using VULKAN_HPP_NAMESPACE::SubpassEndInfoKHR; + using VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo; + using VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfoKHR; + + //=== VK_VERSION_1_3 === + using VULKAN_HPP_NAMESPACE::BlitImageInfo2; + using VULKAN_HPP_NAMESPACE::BlitImageInfo2KHR; + using VULKAN_HPP_NAMESPACE::BufferCopy2; + using VULKAN_HPP_NAMESPACE::BufferCopy2KHR; + using VULKAN_HPP_NAMESPACE::BufferImageCopy2; + using VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR; + using VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2; + using VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR; + using VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo; + using VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfoKHR; + using VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo; + using VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR; + using VULKAN_HPP_NAMESPACE::CopyBufferInfo2; + using VULKAN_HPP_NAMESPACE::CopyBufferInfo2KHR; + using VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2; + using VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2KHR; + using VULKAN_HPP_NAMESPACE::CopyImageInfo2; + using VULKAN_HPP_NAMESPACE::CopyImageInfo2KHR; + using VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2; + using VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2KHR; + using VULKAN_HPP_NAMESPACE::DependencyInfo; + using VULKAN_HPP_NAMESPACE::DependencyInfoKHR; + using VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo; + using VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements; + using VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirementsKHR; + using VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements; + using VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirementsKHR; + using VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo; + using VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::FormatProperties3; + using VULKAN_HPP_NAMESPACE::FormatProperties3KHR; + using VULKAN_HPP_NAMESPACE::ImageBlit2; + using VULKAN_HPP_NAMESPACE::ImageBlit2KHR; + using VULKAN_HPP_NAMESPACE::ImageCopy2; + using VULKAN_HPP_NAMESPACE::ImageCopy2KHR; + using VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2; + using VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR; + using VULKAN_HPP_NAMESPACE::ImageResolve2; + using VULKAN_HPP_NAMESPACE::ImageResolve2KHR; + using VULKAN_HPP_NAMESPACE::MemoryBarrier2; + using VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4PropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedback; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT; + using VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo; + using VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo; + using VULKAN_HPP_NAMESPACE::RenderingAttachmentInfoKHR; + using VULKAN_HPP_NAMESPACE::RenderingInfo; + using VULKAN_HPP_NAMESPACE::RenderingInfoKHR; + using VULKAN_HPP_NAMESPACE::ResolveImageInfo2; + using VULKAN_HPP_NAMESPACE::ResolveImageInfo2KHR; + using VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo; + using VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR; + using VULKAN_HPP_NAMESPACE::ShaderRequiredSubgroupSizeCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::SubmitInfo2; + using VULKAN_HPP_NAMESPACE::SubmitInfo2KHR; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlockEXT; + + //=== VK_VERSION_1_4 === + using VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo; + using VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfoKHR; + using VULKAN_HPP_NAMESPACE::BindMemoryStatus; + using VULKAN_HPP_NAMESPACE::BindMemoryStatusKHR; + using VULKAN_HPP_NAMESPACE::BufferUsageFlags2CreateInfo; + using VULKAN_HPP_NAMESPACE::BufferUsageFlags2CreateInfoKHR; + using VULKAN_HPP_NAMESPACE::CopyImageToImageInfo; + using VULKAN_HPP_NAMESPACE::CopyImageToImageInfoEXT; + using VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo; + using VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfoEXT; + using VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo; + using VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfoEXT; + using VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo; + using VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfo; + using VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::HostImageCopyDevicePerformanceQuery; + using VULKAN_HPP_NAMESPACE::HostImageCopyDevicePerformanceQueryEXT; + using VULKAN_HPP_NAMESPACE::HostImageLayoutTransitionInfo; + using VULKAN_HPP_NAMESPACE::HostImageLayoutTransitionInfoEXT; + using VULKAN_HPP_NAMESPACE::ImageSubresource2; + using VULKAN_HPP_NAMESPACE::ImageSubresource2EXT; + using VULKAN_HPP_NAMESPACE::ImageSubresource2KHR; + using VULKAN_HPP_NAMESPACE::ImageToMemoryCopy; + using VULKAN_HPP_NAMESPACE::ImageToMemoryCopyEXT; + using VULKAN_HPP_NAMESPACE::MemoryMapInfo; + using VULKAN_HPP_NAMESPACE::MemoryMapInfoKHR; + using VULKAN_HPP_NAMESPACE::MemoryToImageCopy; + using VULKAN_HPP_NAMESPACE::MemoryToImageCopyEXT; + using VULKAN_HPP_NAMESPACE::MemoryUnmapInfo; + using VULKAN_HPP_NAMESPACE::MemoryUnmapInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingLocalReadFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5PropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6Properties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6PropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineProtectedAccessFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineProtectedAccessFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderExpectAssumeFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderExpectAssumeFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloatControls2Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloatControls2FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupRotateFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupRotateFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeatures; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorProperties; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan14Features; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan14Properties; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlags2CreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineCreateFlags2CreateInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineRobustnessCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineRobustnessCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfo; + using VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::PushConstantsInfo; + using VULKAN_HPP_NAMESPACE::PushConstantsInfoKHR; + using VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo; + using VULKAN_HPP_NAMESPACE::PushDescriptorSetInfoKHR; + using VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo; + using VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfoKHR; + using VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityProperties; + using VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesEXT; + using VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR; + using VULKAN_HPP_NAMESPACE::RenderingAreaInfo; + using VULKAN_HPP_NAMESPACE::RenderingAreaInfoKHR; + using VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo; + using VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfoKHR; + using VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo; + using VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfoKHR; + using VULKAN_HPP_NAMESPACE::SubresourceHostMemcpySize; + using VULKAN_HPP_NAMESPACE::SubresourceHostMemcpySizeEXT; + using VULKAN_HPP_NAMESPACE::SubresourceLayout2; + using VULKAN_HPP_NAMESPACE::SubresourceLayout2EXT; + using VULKAN_HPP_NAMESPACE::SubresourceLayout2KHR; + using VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescription; + using VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT; + using VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionKHR; + + //=== VK_KHR_surface === + using VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::SurfaceFormatKHR; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR; + using VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::PresentInfoKHR; + using VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR; + + //=== VK_KHR_display === + using VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR; + using VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR; + using VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR; + using VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR; + using VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR; + + //=== VK_KHR_display_swapchain === + using VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + using VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + using VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + using VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + using VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + using VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT; + + //=== VK_AMD_rasterization_order === + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD; + + //=== VK_EXT_debug_marker === + using VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT; + using VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT; + using VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_NAMESPACE::BindVideoSessionMemoryInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR; + using VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusPropertiesKHR; + using VULKAN_HPP_NAMESPACE::QueueFamilyVideoPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoProfileListInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionMemoryRequirementsKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR; + + //=== VK_KHR_video_decode_queue === + using VULKAN_HPP_NAMESPACE::VideoDecodeCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeUsageInfoKHR; + + //=== VK_NV_dedicated_allocation === + using VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV; + using VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV; + using VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV; + + //=== VK_EXT_transform_feedback === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT; + + //=== VK_NVX_binary_import === + using VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX; + using VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX; + using VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX; + using VULKAN_HPP_NAMESPACE::CuModuleTexturingModeCreateInfoNVX; + + //=== VK_NVX_image_view_handle === + using VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX; + using VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX; + + //=== VK_KHR_video_encode_h264 === + using VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264GopRemainingFrameInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264QualityLevelPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersFeedbackInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersGetInfoKHR; + + //=== VK_KHR_video_encode_h265 === + using VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265GopRemainingFrameInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265QualityLevelPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersFeedbackInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersGetInfoKHR; + + //=== VK_KHR_video_decode_h264 === + using VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoKHR; + + //=== VK_AMD_texture_gather_bias_lod === + using VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD; + + //=== VK_AMD_shader_info === + using VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD; + using VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + using VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_corner_sampled_image === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV; + + //=== VK_NV_external_memory_capabilities === + using VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV; + + //=== VK_NV_external_memory === + using VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV; + using VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + using VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV; + using VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_win32_keyed_mutex === + using VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_validation_flags === + using VULKAN_HPP_NAMESPACE::ValidationFlagsEXT; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + using VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_astc_decode_mode === + using VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + using VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + using VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR; + using VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR; + using VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_keyed_mutex === + using VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + using VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR; + using VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + using VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR; + using VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR; + + //=== VK_EXT_conditional_rendering === + using VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT; + using VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT; + + //=== VK_KHR_incremental_present === + using VULKAN_HPP_NAMESPACE::PresentRegionKHR; + using VULKAN_HPP_NAMESPACE::PresentRegionsKHR; + using VULKAN_HPP_NAMESPACE::RectLayerKHR; + + //=== VK_NV_clip_space_w_scaling === + using VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV; + using VULKAN_HPP_NAMESPACE::ViewportWScalingNV; + + //=== VK_EXT_display_surface_counter === + using VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT; + + //=== VK_EXT_display_control === + using VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT; + using VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT; + using VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT; + using VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT; + + //=== VK_GOOGLE_display_timing === + using VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE; + using VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE; + using VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE; + using VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE; + + //=== VK_NVX_multiview_per_view_attributes === + using VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + + //=== VK_NV_viewport_swizzle === + using VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV; + using VULKAN_HPP_NAMESPACE::ViewportSwizzleNV; + + //=== VK_EXT_discard_rectangles === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT; + + //=== VK_EXT_conservative_rasterization === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT; + + //=== VK_EXT_depth_clip_enable === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT; + + //=== VK_EXT_hdr_metadata === + using VULKAN_HPP_NAMESPACE::HdrMetadataEXT; + using VULKAN_HPP_NAMESPACE::XYColorEXT; + + //=== VK_IMG_relaxed_line_rasterization === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + + //=== VK_KHR_shared_presentable_image === + using VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + using VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR; + using VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + using VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR; + using VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR; + + //=== VK_KHR_performance_query === + using VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterKHR; + using VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR; + using VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR; + using VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR; + + //=== VK_KHR_get_surface_capabilities2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR; + using VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR; + using VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR; + + //=== VK_KHR_get_display_properties2 === + using VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR; + using VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR; + using VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR; + using VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR; + using VULKAN_HPP_NAMESPACE::DisplayProperties2KHR; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + using VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + using VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT; + using VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + using VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID; + using VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID; + using VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID; + using VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID; + using VULKAN_HPP_NAMESPACE::ExternalFormatANDROID; + using VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID; + using VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + using VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX; + using VULKAN_HPP_NAMESPACE::DispatchGraphCountInfoAMDX; + using VULKAN_HPP_NAMESPACE::DispatchGraphInfoAMDX; + using VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineCreateInfoAMDX; + using VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineScratchSizeAMDX; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEnqueueFeaturesAMDX; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEnqueuePropertiesAMDX; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageNodeCreateInfoAMDX; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_mixed_attachment_samples === + using VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD; + using VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoNV; + + //=== VK_KHR_shader_bfloat16 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderBfloat16FeaturesKHR; + + //=== VK_EXT_sample_locations === + using VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT; + using VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT; + using VULKAN_HPP_NAMESPACE::SampleLocationEXT; + using VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT; + using VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT; + + //=== VK_EXT_blend_operation_advanced === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT; + + //=== VK_NV_fragment_coverage_to_color === + using VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_NAMESPACE::AabbPositionsKHR; + using VULKAN_HPP_NAMESPACE::AabbPositionsNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR; + using VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR; + using VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR; + using VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR; + using VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR; + using VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR; + using VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR; + using VULKAN_HPP_NAMESPACE::TransformMatrixKHR; + using VULKAN_HPP_NAMESPACE::TransformMatrixNV; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR; + + //=== VK_KHR_ray_tracing_pipeline === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR; + using VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR; + using VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR; + + //=== VK_KHR_ray_query === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR; + + //=== VK_NV_framebuffer_mixed_samples === + using VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV; + + //=== VK_NV_shader_sm_builtins === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV; + + //=== VK_EXT_image_drm_format_modifier === + using VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT; + using VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT; + using VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT; + using VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT; + using VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_portability_subset === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NV_shading_rate_image === + using VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV; + using VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV; + using VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV; + using VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV; + using VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV; + using VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV; + using VULKAN_HPP_NAMESPACE::GeometryAABBNV; + using VULKAN_HPP_NAMESPACE::GeometryDataNV; + using VULKAN_HPP_NAMESPACE::GeometryNV; + using VULKAN_HPP_NAMESPACE::GeometryTrianglesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV; + using VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV; + using VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV; + + //=== VK_NV_representative_fragment_test === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV; + using VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV; + + //=== VK_EXT_filter_cubic === + using VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT; + + //=== VK_EXT_external_memory_host === + using VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT; + using VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT; + + //=== VK_KHR_shader_clock === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR; + + //=== VK_AMD_pipeline_compiler_control === + using VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD; + + //=== VK_AMD_shader_core_properties === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD; + + //=== VK_KHR_video_decode_h265 === + using VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoKHR; + + //=== VK_AMD_memory_overallocation_behavior === + using VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD; + + //=== VK_EXT_vertex_attribute_divisor === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_frame_token === + using VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_mesh_shader === + using VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV; + + //=== VK_NV_shader_image_footprint === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV; + + //=== VK_NV_scissor_exclusive === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV; + using VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV; + + //=== VK_NV_device_diagnostic_checkpoints === + using VULKAN_HPP_NAMESPACE::CheckpointData2NV; + using VULKAN_HPP_NAMESPACE::CheckpointDataNV; + using VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV; + using VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV; + + //=== VK_INTEL_shader_integer_functions2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL; + using VULKAN_HPP_NAMESPACE::PerformanceValueINTEL; + using VULKAN_HPP_NAMESPACE::QueryPoolCreateInfoINTEL; + using VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL; + + //=== VK_EXT_pci_bus_info === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT; + + //=== VK_AMD_display_native_hdr === + using VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD; + using VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + using VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + using VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT; + using VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT; + + //=== VK_KHR_fragment_shading_rate === + using VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR; + using VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR; + + //=== VK_AMD_shader_core_properties2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD; + + //=== VK_AMD_device_coherent_memory === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD; + + //=== VK_EXT_shader_image_atomic_int64 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + + //=== VK_KHR_shader_quad_control === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderQuadControlFeaturesKHR; + + //=== VK_EXT_memory_budget === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT; + + //=== VK_EXT_memory_priority === + using VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT; + + //=== VK_KHR_surface_protected_capabilities === + using VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR; + + //=== VK_NV_dedicated_allocation_image_aliasing === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + + //=== VK_EXT_buffer_device_address === + using VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferAddressFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT; + + //=== VK_EXT_validation_features === + using VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT; + + //=== VK_KHR_present_wait === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR; + + //=== VK_NV_cooperative_matrix === + using VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV; + + //=== VK_NV_coverage_reduction_mode === + using VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV; + using VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV; + + //=== VK_EXT_fragment_shader_interlock === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT; + + //=== VK_EXT_ycbcr_image_arrays === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT; + + //=== VK_EXT_provoking_vertex === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + using VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT; + using VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT; + using VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + using VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT; + + //=== VK_EXT_shader_atomic_float === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT; + + //=== VK_EXT_extended_dynamic_state === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT; + + //=== VK_KHR_pipeline_executable_properties === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR; + using VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR; + using VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR; + using VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR; + using VULKAN_HPP_NAMESPACE::PipelineInfoEXT; + using VULKAN_HPP_NAMESPACE::PipelineInfoKHR; + + //=== VK_EXT_map_memory_placed === + using VULKAN_HPP_NAMESPACE::MemoryMapPlacedInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMapMemoryPlacedFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMapMemoryPlacedPropertiesEXT; + + //=== VK_EXT_shader_atomic_float2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV; + using VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV; + using VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV; + using VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV; + using VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + using VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV; + + //=== VK_NV_inherited_viewport_scissor === + using VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV; + + //=== VK_EXT_texel_buffer_alignment === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT; + + //=== VK_QCOM_render_pass_transform === + using VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM; + using VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM; + + //=== VK_EXT_depth_bias_control === + using VULKAN_HPP_NAMESPACE::DepthBiasInfoEXT; + using VULKAN_HPP_NAMESPACE::DepthBiasRepresentationInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthBiasControlFeaturesEXT; + + //=== VK_EXT_device_memory_report === + using VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT; + + //=== VK_EXT_custom_border_color === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT; + using VULKAN_HPP_NAMESPACE::SamplerCustomBorderColorCreateInfoEXT; + + //=== VK_KHR_pipeline_library === + using VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR; + + //=== VK_NV_present_barrier === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentBarrierFeaturesNV; + using VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentBarrierNV; + using VULKAN_HPP_NAMESPACE::SwapchainPresentBarrierCreateInfoNV; + + //=== VK_KHR_present_id === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PresentIdKHR; + + //=== VK_KHR_video_encode_queue === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR; + using VULKAN_HPP_NAMESPACE::QueryPoolVideoEncodeFeedbackCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersFeedbackInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeUsageInfoKHR; + + //=== VK_NV_device_diagnostics_config === + using VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + using VULKAN_HPP_NAMESPACE::CudaFunctionCreateInfoNV; + using VULKAN_HPP_NAMESPACE::CudaLaunchInfoNV; + using VULKAN_HPP_NAMESPACE::CudaModuleCreateInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCudaKernelLaunchFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCudaKernelLaunchPropertiesNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + using VULKAN_HPP_NAMESPACE::DispatchTileInfoQCOM; + using VULKAN_HPP_NAMESPACE::PerTileBeginInfoQCOM; + using VULKAN_HPP_NAMESPACE::PerTileEndInfoQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTileShadingFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTileShadingPropertiesQCOM; + using VULKAN_HPP_NAMESPACE::RenderPassTileShadingCreateInfoQCOM; + + //=== VK_NV_low_latency === + using VULKAN_HPP_NAMESPACE::QueryLowLatencySupportNV; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + using VULKAN_HPP_NAMESPACE::ExportMetalBufferInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalCommandQueueInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalDeviceInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalIOSurfaceInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalObjectCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalSharedEventInfoEXT; + using VULKAN_HPP_NAMESPACE::ExportMetalTextureInfoEXT; + using VULKAN_HPP_NAMESPACE::ImportMetalBufferInfoEXT; + using VULKAN_HPP_NAMESPACE::ImportMetalIOSurfaceInfoEXT; + using VULKAN_HPP_NAMESPACE::ImportMetalSharedEventInfoEXT; + using VULKAN_HPP_NAMESPACE::ImportMetalTextureInfoEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_descriptor_buffer === + using VULKAN_HPP_NAMESPACE::AccelerationStructureCaptureDescriptorDataInfoEXT; + using VULKAN_HPP_NAMESPACE::BufferCaptureDescriptorDataInfoEXT; + using VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT; + using VULKAN_HPP_NAMESPACE::DescriptorBufferBindingInfoEXT; + using VULKAN_HPP_NAMESPACE::DescriptorBufferBindingPushDescriptorBufferHandleEXT; + using VULKAN_HPP_NAMESPACE::DescriptorDataEXT; + using VULKAN_HPP_NAMESPACE::DescriptorGetInfoEXT; + using VULKAN_HPP_NAMESPACE::ImageCaptureDescriptorDataInfoEXT; + using VULKAN_HPP_NAMESPACE::ImageViewCaptureDescriptorDataInfoEXT; + using VULKAN_HPP_NAMESPACE::OpaqueCaptureDescriptorDataCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferPropertiesEXT; + using VULKAN_HPP_NAMESPACE::SamplerCaptureDescriptorDataInfoEXT; + + //=== VK_EXT_graphics_pipeline_library === + using VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + + //=== VK_AMD_shader_early_and_late_fragment_tests === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + + //=== VK_KHR_fragment_shader_barycentric === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + + //=== VK_KHR_shader_subgroup_uniform_control_flow === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + + //=== VK_NV_fragment_shading_rate_enums === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + using VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV; + + //=== VK_NV_ray_tracing_motion_blur === + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryMotionTrianglesDataNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV; + using VULKAN_HPP_NAMESPACE::SRTDataNV; + + //=== VK_EXT_mesh_shader === + using VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesEXT; + + //=== VK_EXT_ycbcr_2plane_444_formats === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + + //=== VK_EXT_fragment_density_map2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT; + + //=== VK_QCOM_rotated_copy_commands === + using VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM; + + //=== VK_KHR_workgroup_memory_explicit_layout === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + + //=== VK_EXT_image_compression_control === + using VULKAN_HPP_NAMESPACE::ImageCompressionControlEXT; + using VULKAN_HPP_NAMESPACE::ImageCompressionPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlFeaturesEXT; + + //=== VK_EXT_attachment_feedback_loop_layout === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + + //=== VK_EXT_4444_formats === + using VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT; + + //=== VK_EXT_device_fault === + using VULKAN_HPP_NAMESPACE::DeviceFaultAddressInfoEXT; + using VULKAN_HPP_NAMESPACE::DeviceFaultCountsEXT; + using VULKAN_HPP_NAMESPACE::DeviceFaultInfoEXT; + using VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionOneEXT; + using VULKAN_HPP_NAMESPACE::DeviceFaultVendorInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFaultFeaturesEXT; + + //=== VK_EXT_rgba10x6_formats === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT; + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + using VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT; + using VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT; + using VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT; + + //=== VK_EXT_physical_device_drm === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT; + + //=== VK_EXT_device_address_binding_report === + using VULKAN_HPP_NAMESPACE::DeviceAddressBindingCallbackDataEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAddressBindingReportFeaturesEXT; + + //=== VK_EXT_depth_clip_control === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT; + + //=== VK_EXT_primitive_topology_list_restart === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + using VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + using VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA; + using VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA; + using VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA; + using VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI; + using VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI; + + //=== VK_HUAWEI_invocation_mask === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI; + + //=== VK_NV_external_memory_rdma === + using VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV; + + //=== VK_EXT_pipeline_properties === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelinePropertiesFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PipelinePropertiesIdentifierEXT; + + //=== VK_EXT_frame_boundary === + using VULKAN_HPP_NAMESPACE::FrameBoundaryEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFrameBoundaryFeaturesEXT; + + //=== VK_EXT_multisampled_render_to_single_sampled === + using VULKAN_HPP_NAMESPACE::MultisampledRenderToSingleSampledInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + using VULKAN_HPP_NAMESPACE::SubpassResolvePerformanceQueryEXT; + + //=== VK_EXT_extended_dynamic_state2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + using VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT; + + //=== VK_EXT_primitives_generated_query === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + + //=== VK_KHR_ray_tracing_maintenance1 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMaintenance1FeaturesKHR; + using VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommand2KHR; + + //=== VK_EXT_image_view_min_lod === + using VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT; + + //=== VK_EXT_multi_draw === + using VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT; + using VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT; + + //=== VK_EXT_image_2d_view_of_3d === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImage2DViewOf3DFeaturesEXT; + + //=== VK_EXT_shader_tile_image === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTileImageFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTileImagePropertiesEXT; + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_NAMESPACE::AccelerationStructureTrianglesOpacityMicromapEXT; + using VULKAN_HPP_NAMESPACE::CopyMemoryToMicromapInfoEXT; + using VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT; + using VULKAN_HPP_NAMESPACE::CopyMicromapToMemoryInfoEXT; + using VULKAN_HPP_NAMESPACE::MicromapBuildInfoEXT; + using VULKAN_HPP_NAMESPACE::MicromapBuildSizesInfoEXT; + using VULKAN_HPP_NAMESPACE::MicromapCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::MicromapTriangleEXT; + using VULKAN_HPP_NAMESPACE::MicromapUsageEXT; + using VULKAN_HPP_NAMESPACE::MicromapVersionInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceOpacityMicromapFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceOpacityMicromapPropertiesEXT; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + using VULKAN_HPP_NAMESPACE::AccelerationStructureTrianglesDisplacementMicromapNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDisplacementMicromapFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDisplacementMicromapPropertiesNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_HUAWEI_cluster_culling_shader === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + + //=== VK_EXT_border_color_swizzle === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT; + using VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT; + + //=== VK_EXT_pageable_device_local_memory === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + + //=== VK_ARM_shader_core_properties === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesARM; + + //=== VK_ARM_scheduling_controls === + using VULKAN_HPP_NAMESPACE::DeviceQueueShaderCoreControlCreateInfoARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsPropertiesARM; + + //=== VK_EXT_image_sliced_view_of_3d === + using VULKAN_HPP_NAMESPACE::ImageViewSlicedCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + + //=== VK_VALVE_descriptor_set_host_mapping === + using VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + + //=== VK_EXT_non_seamless_cube_map === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + + //=== VK_ARM_render_pass_striped === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRenderPassStripedFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRenderPassStripedPropertiesARM; + using VULKAN_HPP_NAMESPACE::RenderPassStripeBeginInfoARM; + using VULKAN_HPP_NAMESPACE::RenderPassStripeInfoARM; + using VULKAN_HPP_NAMESPACE::RenderPassStripeSubmitInfoARM; + + //=== VK_NV_copy_memory_indirect === + using VULKAN_HPP_NAMESPACE::CopyMemoryIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::CopyMemoryToImageIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCopyMemoryIndirectFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCopyMemoryIndirectPropertiesNV; + + //=== VK_NV_memory_decompression === + using VULKAN_HPP_NAMESPACE::DecompressMemoryRegionNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryDecompressionFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryDecompressionPropertiesNV; + + //=== VK_NV_device_generated_commands_compute === + using VULKAN_HPP_NAMESPACE::BindPipelineIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::ComputePipelineIndirectBufferInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + using VULKAN_HPP_NAMESPACE::PipelineIndirectDeviceAddressInfoNV; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryLinearSweptSpheresDataNV; + using VULKAN_HPP_NAMESPACE::AccelerationStructureGeometrySpheresDataNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + + //=== VK_NV_linear_color_attachment === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV; + + //=== VK_KHR_shader_maximal_reconvergence === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + + //=== VK_EXT_image_compression_control_swapchain === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + + //=== VK_QCOM_image_processing === + using VULKAN_HPP_NAMESPACE::ImageViewSampleWeightCreateInfoQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingPropertiesQCOM; + + //=== VK_EXT_nested_command_buffer === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceNestedCommandBufferFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceNestedCommandBufferPropertiesEXT; + + //=== VK_EXT_external_memory_acquire_unmodified === + using VULKAN_HPP_NAMESPACE::ExternalMemoryAcquireUnmodifiedEXT; + + //=== VK_EXT_extended_dynamic_state3 === + using VULKAN_HPP_NAMESPACE::ColorBlendAdvancedEXT; + using VULKAN_HPP_NAMESPACE::ColorBlendEquationEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState3FeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState3PropertiesEXT; + + //=== VK_EXT_subpass_merge_feedback === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + using VULKAN_HPP_NAMESPACE::RenderPassCreationControlEXT; + using VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT; + + //=== VK_LUNARG_direct_driver_loading === + using VULKAN_HPP_NAMESPACE::DirectDriverLoadingInfoLUNARG; + using VULKAN_HPP_NAMESPACE::DirectDriverLoadingListLUNARG; + + //=== VK_ARM_tensors === + using VULKAN_HPP_NAMESPACE::BindTensorMemoryInfoARM; + using VULKAN_HPP_NAMESPACE::CopyTensorInfoARM; + using VULKAN_HPP_NAMESPACE::DescriptorGetTensorInfoARM; + using VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM; + using VULKAN_HPP_NAMESPACE::ExternalMemoryTensorCreateInfoARM; + using VULKAN_HPP_NAMESPACE::ExternalTensorPropertiesARM; + using VULKAN_HPP_NAMESPACE::FrameBoundaryTensorsARM; + using VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfoTensorARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferTensorFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferTensorPropertiesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalTensorInfoARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTensorFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTensorPropertiesARM; + using VULKAN_HPP_NAMESPACE::TensorCaptureDescriptorDataInfoARM; + using VULKAN_HPP_NAMESPACE::TensorCopyARM; + using VULKAN_HPP_NAMESPACE::TensorCreateInfoARM; + using VULKAN_HPP_NAMESPACE::TensorDependencyInfoARM; + using VULKAN_HPP_NAMESPACE::TensorDescriptionARM; + using VULKAN_HPP_NAMESPACE::TensorFormatPropertiesARM; + using VULKAN_HPP_NAMESPACE::TensorMemoryBarrierARM; + using VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM; + using VULKAN_HPP_NAMESPACE::TensorViewCaptureDescriptorDataInfoARM; + using VULKAN_HPP_NAMESPACE::TensorViewCreateInfoARM; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSetTensorARM; + + //=== VK_EXT_shader_module_identifier === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PipelineShaderStageModuleIdentifierCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT; + + //=== VK_EXT_rasterization_order_attachment_access === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_NAMESPACE::OpticalFlowExecuteInfoNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatInfoNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatPropertiesNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateInfoNV; + using VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreatePrivateDataInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceOpticalFlowFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceOpticalFlowPropertiesNV; + + //=== VK_EXT_legacy_dithering === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyDitheringFeaturesEXT; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_format_resolve === + using VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatResolvePropertiesANDROID; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFormatResolveFeaturesANDROID; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFormatResolvePropertiesANDROID; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_AMD_anti_lag === + using VULKAN_HPP_NAMESPACE::AntiLagDataAMD; + using VULKAN_HPP_NAMESPACE::AntiLagPresentationInfoAMD; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAntiLagFeaturesAMD; + + //=== VK_KHR_present_id2 === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentId2FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PresentId2KHR; + using VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentId2KHR; + + //=== VK_KHR_present_wait2 === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWait2FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PresentWait2InfoKHR; + using VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentWait2KHR; + + //=== VK_KHR_ray_tracing_position_fetch === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPositionFetchFeaturesKHR; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderObjectFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderObjectPropertiesEXT; + using VULKAN_HPP_NAMESPACE::ShaderCreateInfoEXT; + + //=== VK_KHR_pipeline_binary === + using VULKAN_HPP_NAMESPACE::DevicePipelineBinaryInternalCacheControlKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineBinaryFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineBinaryPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryDataInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryDataKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryHandlesInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryInfoKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR; + using VULKAN_HPP_NAMESPACE::PipelineBinaryKeysAndDataKHR; + using VULKAN_HPP_NAMESPACE::PipelineCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::ReleaseCapturedPipelineDataInfoKHR; + + //=== VK_QCOM_tile_properties === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTilePropertiesFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::TilePropertiesQCOM; + + //=== VK_SEC_amigo_profiling === + using VULKAN_HPP_NAMESPACE::AmigoProfilingSubmitInfoSEC; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAmigoProfilingFeaturesSEC; + + //=== VK_KHR_surface_maintenance1 === + using VULKAN_HPP_NAMESPACE::SurfacePresentModeCompatibilityEXT; + using VULKAN_HPP_NAMESPACE::SurfacePresentModeCompatibilityKHR; + using VULKAN_HPP_NAMESPACE::SurfacePresentModeEXT; + using VULKAN_HPP_NAMESPACE::SurfacePresentModeKHR; + using VULKAN_HPP_NAMESPACE::SurfacePresentScalingCapabilitiesEXT; + using VULKAN_HPP_NAMESPACE::SurfacePresentScalingCapabilitiesKHR; + + //=== VK_KHR_swapchain_maintenance1 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSwapchainMaintenance1FeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceSwapchainMaintenance1FeaturesKHR; + using VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoEXT; + using VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR; + using VULKAN_HPP_NAMESPACE::SwapchainPresentFenceInfoEXT; + using VULKAN_HPP_NAMESPACE::SwapchainPresentFenceInfoKHR; + using VULKAN_HPP_NAMESPACE::SwapchainPresentModeInfoEXT; + using VULKAN_HPP_NAMESPACE::SwapchainPresentModeInfoKHR; + using VULKAN_HPP_NAMESPACE::SwapchainPresentModesCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::SwapchainPresentModesCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::SwapchainPresentScalingCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::SwapchainPresentScalingCreateInfoKHR; + + //=== VK_QCOM_multiview_per_view_viewports === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + + //=== VK_NV_ray_tracing_invocation_reorder === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingInvocationReorderFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingInvocationReorderPropertiesNV; + + //=== VK_NV_cooperative_vector === + using VULKAN_HPP_NAMESPACE::ConvertCooperativeVectorMatrixInfoNV; + using VULKAN_HPP_NAMESPACE::CooperativeVectorPropertiesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeVectorFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeVectorPropertiesNV; + + //=== VK_NV_extended_sparse_address_space === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + + //=== VK_EXT_mutable_descriptor_type === + using VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE; + using VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListEXT; + using VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE; + + //=== VK_EXT_legacy_vertex_attributes === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyVertexAttributesFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyVertexAttributesPropertiesEXT; + + //=== VK_EXT_layer_settings === + using VULKAN_HPP_NAMESPACE::LayerSettingEXT; + using VULKAN_HPP_NAMESPACE::LayerSettingsCreateInfoEXT; + + //=== VK_ARM_shader_core_builtins === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreBuiltinsFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreBuiltinsPropertiesARM; + + //=== VK_EXT_pipeline_library_group_handles === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + + //=== VK_EXT_dynamic_rendering_unused_attachments === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + + //=== VK_NV_low_latency2 === + using VULKAN_HPP_NAMESPACE::GetLatencyMarkerInfoNV; + using VULKAN_HPP_NAMESPACE::LatencySleepInfoNV; + using VULKAN_HPP_NAMESPACE::LatencySleepModeInfoNV; + using VULKAN_HPP_NAMESPACE::LatencySubmissionPresentIdNV; + using VULKAN_HPP_NAMESPACE::LatencySurfaceCapabilitiesNV; + using VULKAN_HPP_NAMESPACE::LatencyTimingsFrameReportNV; + using VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeInfoNV; + using VULKAN_HPP_NAMESPACE::SetLatencyMarkerInfoNV; + using VULKAN_HPP_NAMESPACE::SwapchainLatencyCreateInfoNV; + + //=== VK_KHR_cooperative_matrix === + using VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesKHR; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_NAMESPACE::BindDataGraphPipelineSessionMemoryInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineCompilerControlCreateInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineCreateInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineIdentifierCreateInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyQueryResultARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineResourceInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementsInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphPipelineShaderModuleCreateInfoARM; + using VULKAN_HPP_NAMESPACE::DataGraphProcessingEngineCreateInfoARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphFeaturesARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationSupportARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + using VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphProcessingEnginePropertiesARM; + using VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphPropertiesARM; + + //=== VK_QCOM_multiview_per_view_render_areas === + using VULKAN_HPP_NAMESPACE::MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + + //=== VK_KHR_compute_shader_derivatives === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesPropertiesKHR; + + //=== VK_KHR_video_decode_av1 === + using VULKAN_HPP_NAMESPACE::VideoDecodeAV1CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeAV1DpbSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeAV1PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeAV1ProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeAV1SessionParametersCreateInfoKHR; + + //=== VK_KHR_video_encode_av1 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeAV1FeaturesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1DpbSlotInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1FrameSizeKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1GopRemainingFrameInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1ProfileInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1QualityLevelPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlLayerInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1SessionCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1SessionParametersCreateInfoKHR; + + //=== VK_KHR_video_decode_vp9 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoDecodeVP9FeaturesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeVP9CapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeVP9PictureInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeVP9ProfileInfoKHR; + + //=== VK_KHR_video_maintenance1 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoMaintenance1FeaturesKHR; + using VULKAN_HPP_NAMESPACE::VideoInlineQueryInfoKHR; + + //=== VK_NV_per_stage_descriptor_set === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePerStageDescriptorSetFeaturesNV; + + //=== VK_QCOM_image_processing2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessing2FeaturesQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessing2PropertiesQCOM; + using VULKAN_HPP_NAMESPACE::SamplerBlockMatchWindowCreateInfoQCOM; + + //=== VK_QCOM_filter_cubic_weights === + using VULKAN_HPP_NAMESPACE::BlitImageCubicWeightsInfoQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCubicWeightsFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::SamplerCubicWeightsCreateInfoQCOM; + + //=== VK_QCOM_ycbcr_degamma === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrDegammaFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + + //=== VK_QCOM_filter_cubic_clamp === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCubicClampFeaturesQCOM; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + + //=== VK_KHR_unified_image_layouts === + using VULKAN_HPP_NAMESPACE::AttachmentFeedbackLoopInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + using VULKAN_HPP_NAMESPACE::ExternalFormatQNX; + using VULKAN_HPP_NAMESPACE::ImportScreenBufferInfoQNX; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + using VULKAN_HPP_NAMESPACE::ScreenBufferFormatPropertiesQNX; + using VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_MSFT_layered_driver === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredDriverPropertiesMSFT; + + //=== VK_KHR_calibrated_timestamps === + using VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT; + using VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR; + + //=== VK_KHR_maintenance6 === + using VULKAN_HPP_NAMESPACE::BindDescriptorBufferEmbeddedSamplersInfoEXT; + using VULKAN_HPP_NAMESPACE::SetDescriptorBufferOffsetsInfoEXT; + + //=== VK_NV_descriptor_pool_overallocation === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + + //=== VK_QCOM_tile_memory_heap === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTileMemoryHeapFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceTileMemoryHeapPropertiesQCOM; + using VULKAN_HPP_NAMESPACE::TileMemoryBindInfoQCOM; + using VULKAN_HPP_NAMESPACE::TileMemoryRequirementsQCOM; + using VULKAN_HPP_NAMESPACE::TileMemorySizeInfoQCOM; + + //=== VK_NV_display_stereo === + using VULKAN_HPP_NAMESPACE::DisplayModeStereoPropertiesNV; + using VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoCreateInfoNV; + + //=== VK_KHR_video_encode_intra_refresh === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeSessionIntraRefreshCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoReferenceIntraRefreshInfoKHR; + + //=== VK_KHR_video_encode_quantization_map === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeAV1QuantizationMapCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH264QuantizationMapCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeH265QuantizationMapCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapCapabilitiesKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoFormatAV1QuantizationMapPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoFormatH265QuantizationMapPropertiesKHR; + using VULKAN_HPP_NAMESPACE::VideoFormatQuantizationMapPropertiesKHR; + + //=== VK_NV_raw_access_chains === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRawAccessChainsFeaturesNV; + + //=== VK_NV_external_compute_queue === + using VULKAN_HPP_NAMESPACE::ExternalComputeQueueCreateInfoNV; + using VULKAN_HPP_NAMESPACE::ExternalComputeQueueDataParamsNV; + using VULKAN_HPP_NAMESPACE::ExternalComputeQueueDeviceCreateInfoNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalComputeQueuePropertiesNV; + + //=== VK_KHR_shader_relaxed_extended_instruction === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + + //=== VK_NV_command_buffer_inheritance === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCommandBufferInheritanceFeaturesNV; + + //=== VK_KHR_maintenance7 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesListKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiVulkanPropertiesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance7FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance7PropertiesKHR; + + //=== VK_NV_shader_atomic_float16_vector === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + + //=== VK_EXT_shader_replicated_composites === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + + //=== VK_EXT_shader_float8 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat8FeaturesEXT; + + //=== VK_NV_ray_tracing_validation === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingValidationFeaturesNV; + + //=== VK_NV_cluster_acceleration_structure === + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildTriangleClusterInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClustersBottomLevelInputNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureCommandsInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGetTemplateIndicesInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInstantiateClusterInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInfoNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInputNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpInputNV; + using VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTriangleClusterInputNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterAccelerationStructureFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterAccelerationStructurePropertiesNV; + using VULKAN_HPP_NAMESPACE::RayTracingPipelineClusterAccelerationStructureCreateInfoNV; + using VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV; + + //=== VK_NV_partitioned_acceleration_structure === + using VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureIndirectCommandNV; + using VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureInfoNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureFlagsNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureUpdateInstanceDataNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureWriteInstanceDataNV; + using VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureWritePartitionTranslationDataNV; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePartitionedAccelerationStructureFeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePartitionedAccelerationStructurePropertiesNV; + using VULKAN_HPP_NAMESPACE::WriteDescriptorSetPartitionedAccelerationStructureNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandEXT; + using VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandEXT; + using VULKAN_HPP_NAMESPACE::DrawIndirectCountIndirectCommandEXT; + using VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT; + using VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT; + using VULKAN_HPP_NAMESPACE::GeneratedCommandsPipelineInfoEXT; + using VULKAN_HPP_NAMESPACE::GeneratedCommandsShaderInfoEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsExecutionSetTokenEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsIndexBufferTokenEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsPushConstantTokenEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsTokenDataEXT; + using VULKAN_HPP_NAMESPACE::IndirectCommandsVertexBufferTokenEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetCreateInfoEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetPipelineInfoEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderInfoEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderLayoutInfoEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + using VULKAN_HPP_NAMESPACE::WriteIndirectExecutionSetPipelineEXT; + using VULKAN_HPP_NAMESPACE::WriteIndirectExecutionSetShaderEXT; + + //=== VK_KHR_maintenance8 === + using VULKAN_HPP_NAMESPACE::MemoryBarrierAccessFlags3KHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance8FeaturesKHR; + + //=== VK_MESA_image_alignment_control === + using VULKAN_HPP_NAMESPACE::ImageAlignmentControlCreateInfoMESA; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageAlignmentControlFeaturesMESA; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceImageAlignmentControlPropertiesMESA; + + //=== VK_EXT_depth_clamp_control === + using VULKAN_HPP_NAMESPACE::DepthClampRangeEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampControlFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PipelineViewportDepthClampControlCreateInfoEXT; + + //=== VK_KHR_maintenance9 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance9FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance9PropertiesKHR; + using VULKAN_HPP_NAMESPACE::QueueFamilyOwnershipTransferPropertiesKHR; + + //=== VK_KHR_video_maintenance2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoMaintenance2FeaturesKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeAV1InlineSessionParametersInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH264InlineSessionParametersInfoKHR; + using VULKAN_HPP_NAMESPACE::VideoDecodeH265InlineSessionParametersInfoKHR; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + using VULKAN_HPP_NAMESPACE::OHSurfaceCreateInfoOHOS; + using VULKAN_HPP_NAMESPACE::SurfaceCreateInfoOHOS; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_HUAWEI_hdr_vivid === + using VULKAN_HPP_NAMESPACE::HdrVividDynamicMetadataHUAWEI; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceHdrVividFeaturesHUAWEI; + + //=== VK_NV_cooperative_matrix2 === + using VULKAN_HPP_NAMESPACE::CooperativeMatrixFlexibleDimensionsPropertiesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrix2FeaturesNV; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrix2PropertiesNV; + + //=== VK_ARM_pipeline_opacity_micromap === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineOpacityMicromapFeaturesARM; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + using VULKAN_HPP_NAMESPACE::ImportMemoryMetalHandleInfoEXT; + using VULKAN_HPP_NAMESPACE::MemoryGetMetalHandleInfoEXT; + using VULKAN_HPP_NAMESPACE::MemoryMetalHandlePropertiesEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_depth_clamp_zero_one === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampZeroOneFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampZeroOneFeaturesKHR; + + //=== VK_EXT_vertex_attribute_robustness === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + + //=== VK_ARM_format_pack === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFormatPackFeaturesARM; + + //=== VK_VALVE_fragment_density_map_layered === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + using VULKAN_HPP_NAMESPACE::PipelineFragmentDensityMapLayeredCreateInfoVALVE; + + //=== VK_KHR_robustness2 === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesKHR; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesKHR; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_present_metering === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentMeteringFeaturesNV; + using VULKAN_HPP_NAMESPACE::SetPresentConfigNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_fragment_density_map_offset === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; + using VULKAN_HPP_NAMESPACE::RenderingEndInfoEXT; + using VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapOffsetEndInfoEXT; + using VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM; + + //=== VK_EXT_zero_initialize_device_memory === + using VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + + //=== VK_KHR_present_mode_fifo_latest_ready === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentModeFifoLatestReadyFeaturesEXT; + using VULKAN_HPP_NAMESPACE::PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + + //=== VK_SEC_pipeline_cache_incremental_mode === + using VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + + //=============== + //=== HANDLEs === + //=============== + + using VULKAN_HPP_NAMESPACE::isVulkanHandleType; + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::Buffer; + using VULKAN_HPP_NAMESPACE::BufferView; + using VULKAN_HPP_NAMESPACE::CommandBuffer; + using VULKAN_HPP_NAMESPACE::CommandPool; + using VULKAN_HPP_NAMESPACE::DescriptorPool; + using VULKAN_HPP_NAMESPACE::DescriptorSet; + using VULKAN_HPP_NAMESPACE::DescriptorSetLayout; + using VULKAN_HPP_NAMESPACE::Device; + using VULKAN_HPP_NAMESPACE::DeviceMemory; + using VULKAN_HPP_NAMESPACE::Event; + using VULKAN_HPP_NAMESPACE::Fence; + using VULKAN_HPP_NAMESPACE::Framebuffer; + using VULKAN_HPP_NAMESPACE::Image; + using VULKAN_HPP_NAMESPACE::ImageView; + using VULKAN_HPP_NAMESPACE::Instance; + using VULKAN_HPP_NAMESPACE::PhysicalDevice; + using VULKAN_HPP_NAMESPACE::Pipeline; + using VULKAN_HPP_NAMESPACE::PipelineCache; + using VULKAN_HPP_NAMESPACE::PipelineLayout; + using VULKAN_HPP_NAMESPACE::QueryPool; + using VULKAN_HPP_NAMESPACE::Queue; + using VULKAN_HPP_NAMESPACE::RenderPass; + using VULKAN_HPP_NAMESPACE::Sampler; + using VULKAN_HPP_NAMESPACE::Semaphore; + using VULKAN_HPP_NAMESPACE::ShaderModule; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate; + using VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion; + + //=== VK_VERSION_1_3 === + using VULKAN_HPP_NAMESPACE::PrivateDataSlot; + + //=== VK_KHR_surface === + using VULKAN_HPP_NAMESPACE::SurfaceKHR; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_NAMESPACE::SwapchainKHR; + + //=== VK_KHR_display === + using VULKAN_HPP_NAMESPACE::DisplayKHR; + using VULKAN_HPP_NAMESPACE::DisplayModeKHR; + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_NAMESPACE::VideoSessionKHR; + using VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR; + + //=== VK_NVX_binary_import === + using VULKAN_HPP_NAMESPACE::CuFunctionNVX; + using VULKAN_HPP_NAMESPACE::CuModuleNVX; + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_NAMESPACE::AccelerationStructureKHR; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_NAMESPACE::ValidationCacheEXT; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_NAMESPACE::AccelerationStructureNV; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL; + + //=== VK_KHR_deferred_host_operations === + using VULKAN_HPP_NAMESPACE::DeferredOperationKHR; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + using VULKAN_HPP_NAMESPACE::CudaFunctionNV; + using VULKAN_HPP_NAMESPACE::CudaModuleNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_NAMESPACE::MicromapEXT; + + //=== VK_ARM_tensors === + using VULKAN_HPP_NAMESPACE::TensorARM; + using VULKAN_HPP_NAMESPACE::TensorViewARM; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_NAMESPACE::ShaderEXT; + + //=== VK_KHR_pipeline_binary === + using VULKAN_HPP_NAMESPACE::PipelineBinaryKHR; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM; + + //=== VK_NV_external_compute_queue === + using VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT; + using VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT; + + //====================== + //=== UNIQUE HANDLEs === + //====================== + +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::UniqueBuffer; + using VULKAN_HPP_NAMESPACE::UniqueBufferView; + using VULKAN_HPP_NAMESPACE::UniqueCommandBuffer; + using VULKAN_HPP_NAMESPACE::UniqueCommandPool; + using VULKAN_HPP_NAMESPACE::UniqueDescriptorPool; + using VULKAN_HPP_NAMESPACE::UniqueDescriptorSet; + using VULKAN_HPP_NAMESPACE::UniqueDescriptorSetLayout; + using VULKAN_HPP_NAMESPACE::UniqueDevice; + using VULKAN_HPP_NAMESPACE::UniqueDeviceMemory; + using VULKAN_HPP_NAMESPACE::UniqueEvent; + using VULKAN_HPP_NAMESPACE::UniqueFence; + using VULKAN_HPP_NAMESPACE::UniqueFramebuffer; + using VULKAN_HPP_NAMESPACE::UniqueImage; + using VULKAN_HPP_NAMESPACE::UniqueImageView; + using VULKAN_HPP_NAMESPACE::UniqueInstance; + using VULKAN_HPP_NAMESPACE::UniquePipeline; + using VULKAN_HPP_NAMESPACE::UniquePipelineCache; + using VULKAN_HPP_NAMESPACE::UniquePipelineLayout; + using VULKAN_HPP_NAMESPACE::UniqueQueryPool; + using VULKAN_HPP_NAMESPACE::UniqueRenderPass; + using VULKAN_HPP_NAMESPACE::UniqueSampler; + using VULKAN_HPP_NAMESPACE::UniqueSemaphore; + using VULKAN_HPP_NAMESPACE::UniqueShaderModule; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_NAMESPACE::UniqueDescriptorUpdateTemplate; + using VULKAN_HPP_NAMESPACE::UniqueSamplerYcbcrConversion; + + //=== VK_VERSION_1_3 === + using VULKAN_HPP_NAMESPACE::UniquePrivateDataSlot; + + //=== VK_KHR_surface === + using VULKAN_HPP_NAMESPACE::UniqueSurfaceKHR; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_NAMESPACE::UniqueSwapchainKHR; + + //=== VK_KHR_display === + using VULKAN_HPP_NAMESPACE::UniqueDisplayKHR; + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::UniqueDebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_NAMESPACE::UniqueVideoSessionKHR; + using VULKAN_HPP_NAMESPACE::UniqueVideoSessionParametersKHR; + + //=== VK_NVX_binary_import === + using VULKAN_HPP_NAMESPACE::UniqueCuFunctionNVX; + using VULKAN_HPP_NAMESPACE::UniqueCuModuleNVX; + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::UniqueDebugUtilsMessengerEXT; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_NAMESPACE::UniqueAccelerationStructureKHR; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_NAMESPACE::UniqueValidationCacheEXT; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_NAMESPACE::UniqueAccelerationStructureNV; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_NAMESPACE::UniquePerformanceConfigurationINTEL; + + //=== VK_KHR_deferred_host_operations === + using VULKAN_HPP_NAMESPACE::UniqueDeferredOperationKHR; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_NAMESPACE::UniqueIndirectCommandsLayoutNV; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + using VULKAN_HPP_NAMESPACE::UniqueCudaFunctionNV; + using VULKAN_HPP_NAMESPACE::UniqueCudaModuleNV; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_NAMESPACE::UniqueBufferCollectionFUCHSIA; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_NAMESPACE::UniqueMicromapEXT; + + //=== VK_ARM_tensors === + using VULKAN_HPP_NAMESPACE::UniqueTensorARM; + using VULKAN_HPP_NAMESPACE::UniqueTensorViewARM; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_NAMESPACE::UniqueOpticalFlowSessionNV; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_NAMESPACE::UniqueShaderEXT; + + //=== VK_KHR_pipeline_binary === + using VULKAN_HPP_NAMESPACE::UniquePipelineBinaryKHR; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_NAMESPACE::UniqueDataGraphPipelineSessionARM; + + //=== VK_NV_external_compute_queue === + using VULKAN_HPP_NAMESPACE::UniqueExternalComputeQueueNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_NAMESPACE::UniqueHandleTraits; + using VULKAN_HPP_NAMESPACE::UniqueIndirectCommandsLayoutEXT; + using VULKAN_HPP_NAMESPACE::UniqueIndirectExecutionSetEXT; +#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ + + //====================== + //=== SHARED HANDLEs === + //====================== + +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_NAMESPACE::SharedBuffer; + using VULKAN_HPP_NAMESPACE::SharedBufferView; + using VULKAN_HPP_NAMESPACE::SharedCommandBuffer; + using VULKAN_HPP_NAMESPACE::SharedCommandPool; + using VULKAN_HPP_NAMESPACE::SharedDescriptorPool; + using VULKAN_HPP_NAMESPACE::SharedDescriptorSet; + using VULKAN_HPP_NAMESPACE::SharedDescriptorSetLayout; + using VULKAN_HPP_NAMESPACE::SharedDevice; + using VULKAN_HPP_NAMESPACE::SharedDeviceMemory; + using VULKAN_HPP_NAMESPACE::SharedEvent; + using VULKAN_HPP_NAMESPACE::SharedFence; + using VULKAN_HPP_NAMESPACE::SharedFramebuffer; + using VULKAN_HPP_NAMESPACE::SharedImage; + using VULKAN_HPP_NAMESPACE::SharedImageView; + using VULKAN_HPP_NAMESPACE::SharedInstance; + using VULKAN_HPP_NAMESPACE::SharedPhysicalDevice; + using VULKAN_HPP_NAMESPACE::SharedPipeline; + using VULKAN_HPP_NAMESPACE::SharedPipelineCache; + using VULKAN_HPP_NAMESPACE::SharedPipelineLayout; + using VULKAN_HPP_NAMESPACE::SharedQueryPool; + using VULKAN_HPP_NAMESPACE::SharedQueue; + using VULKAN_HPP_NAMESPACE::SharedRenderPass; + using VULKAN_HPP_NAMESPACE::SharedSampler; + using VULKAN_HPP_NAMESPACE::SharedSemaphore; + using VULKAN_HPP_NAMESPACE::SharedShaderModule; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_NAMESPACE::SharedDescriptorUpdateTemplate; + using VULKAN_HPP_NAMESPACE::SharedSamplerYcbcrConversion; + + //=== VK_VERSION_1_3 === + using VULKAN_HPP_NAMESPACE::SharedPrivateDataSlot; + + //=== VK_KHR_surface === + using VULKAN_HPP_NAMESPACE::SharedSurfaceKHR; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_NAMESPACE::SharedSwapchainKHR; + + //=== VK_KHR_display === + using VULKAN_HPP_NAMESPACE::SharedDisplayKHR; + using VULKAN_HPP_NAMESPACE::SharedDisplayModeKHR; + + //=== VK_EXT_debug_report === + using VULKAN_HPP_NAMESPACE::SharedDebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_NAMESPACE::SharedVideoSessionKHR; + using VULKAN_HPP_NAMESPACE::SharedVideoSessionParametersKHR; + + //=== VK_NVX_binary_import === + using VULKAN_HPP_NAMESPACE::SharedCuFunctionNVX; + using VULKAN_HPP_NAMESPACE::SharedCuModuleNVX; + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_NAMESPACE::SharedDebugUtilsMessengerEXT; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_NAMESPACE::SharedAccelerationStructureKHR; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_NAMESPACE::SharedValidationCacheEXT; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_NAMESPACE::SharedAccelerationStructureNV; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_NAMESPACE::SharedPerformanceConfigurationINTEL; + + //=== VK_KHR_deferred_host_operations === + using VULKAN_HPP_NAMESPACE::SharedDeferredOperationKHR; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_NAMESPACE::SharedIndirectCommandsLayoutNV; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + using VULKAN_HPP_NAMESPACE::SharedCudaFunctionNV; + using VULKAN_HPP_NAMESPACE::SharedCudaModuleNV; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_NAMESPACE::SharedBufferCollectionFUCHSIA; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_NAMESPACE::SharedMicromapEXT; + + //=== VK_ARM_tensors === + using VULKAN_HPP_NAMESPACE::SharedTensorARM; + using VULKAN_HPP_NAMESPACE::SharedTensorViewARM; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_NAMESPACE::SharedOpticalFlowSessionNV; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_NAMESPACE::SharedShaderEXT; + + //=== VK_KHR_pipeline_binary === + using VULKAN_HPP_NAMESPACE::SharedPipelineBinaryKHR; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_NAMESPACE::SharedDataGraphPipelineSessionARM; + + //=== VK_NV_external_compute_queue === + using VULKAN_HPP_NAMESPACE::SharedExternalComputeQueueNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_NAMESPACE::SharedHandleTraits; + using VULKAN_HPP_NAMESPACE::SharedIndirectCommandsLayoutEXT; + using VULKAN_HPP_NAMESPACE::SharedIndirectExecutionSetEXT; +#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ + + //=========================== + //=== COMMAND Definitions === + //=========================== + using VULKAN_HPP_NAMESPACE::createInstance; + using VULKAN_HPP_NAMESPACE::enumerateInstanceExtensionProperties; + using VULKAN_HPP_NAMESPACE::enumerateInstanceLayerProperties; + using VULKAN_HPP_NAMESPACE::enumerateInstanceVersion; + +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + using VULKAN_HPP_NAMESPACE::createInstanceUnique; +#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ + +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + using VULKAN_HPP_NAMESPACE::StructExtends; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + namespace detail + { + using VULKAN_HPP_NAMESPACE::detail::DynamicLoader; + } // namespace detail +#endif /*VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL*/ + + //===================== + //=== Format Traits === + //===================== + using VULKAN_HPP_NAMESPACE::blockExtent; + using VULKAN_HPP_NAMESPACE::blockSize; + using VULKAN_HPP_NAMESPACE::compatibilityClass; + using VULKAN_HPP_NAMESPACE::componentBits; + using VULKAN_HPP_NAMESPACE::componentCount; + using VULKAN_HPP_NAMESPACE::componentName; + using VULKAN_HPP_NAMESPACE::componentNumericFormat; + using VULKAN_HPP_NAMESPACE::componentPlaneIndex; + using VULKAN_HPP_NAMESPACE::componentsAreCompressed; + using VULKAN_HPP_NAMESPACE::compressionScheme; + using VULKAN_HPP_NAMESPACE::getDepthFormats; + using VULKAN_HPP_NAMESPACE::getDepthStencilFormats; + using VULKAN_HPP_NAMESPACE::getStencilFormats; + using VULKAN_HPP_NAMESPACE::hasDepthComponent; + using VULKAN_HPP_NAMESPACE::hasStencilComponent; + using VULKAN_HPP_NAMESPACE::isCompressed; + using VULKAN_HPP_NAMESPACE::packed; + using VULKAN_HPP_NAMESPACE::planeCompatibleFormat; + using VULKAN_HPP_NAMESPACE::planeCount; + using VULKAN_HPP_NAMESPACE::planeHeightDivisor; + using VULKAN_HPP_NAMESPACE::planeWidthDivisor; + using VULKAN_HPP_NAMESPACE::texelsPerBlock; + + //====================================== + //=== Extension inspection functions === + //====================================== + using VULKAN_HPP_NAMESPACE::getDeprecatedExtensions; + using VULKAN_HPP_NAMESPACE::getDeviceExtensions; + using VULKAN_HPP_NAMESPACE::getExtensionDepends; + using VULKAN_HPP_NAMESPACE::getExtensionDeprecatedBy; + using VULKAN_HPP_NAMESPACE::getExtensionObsoletedBy; + using VULKAN_HPP_NAMESPACE::getExtensionPromotedTo; + using VULKAN_HPP_NAMESPACE::getInstanceExtensions; + using VULKAN_HPP_NAMESPACE::getObsoletedExtensions; + using VULKAN_HPP_NAMESPACE::getPromotedExtensions; + using VULKAN_HPP_NAMESPACE::isDeprecatedExtension; + using VULKAN_HPP_NAMESPACE::isDeviceExtension; + using VULKAN_HPP_NAMESPACE::isInstanceExtension; + using VULKAN_HPP_NAMESPACE::isObsoletedExtension; + using VULKAN_HPP_NAMESPACE::isPromotedExtension; + +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + namespace VULKAN_HPP_RAII_NAMESPACE + { + //====================== + //=== RAII HARDCODED === + //====================== + + using VULKAN_HPP_RAII_NAMESPACE::Context; + + namespace detail + { + using VULKAN_HPP_RAII_NAMESPACE::detail::ContextDispatcher; + using VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher; + using VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher; + } // namespace detail + + //==================== + //=== RAII HANDLEs === + //==================== + + //=== VK_VERSION_1_0 === + using VULKAN_HPP_RAII_NAMESPACE::Buffer; + using VULKAN_HPP_RAII_NAMESPACE::BufferView; + using VULKAN_HPP_RAII_NAMESPACE::CommandBuffer; + using VULKAN_HPP_RAII_NAMESPACE::CommandBuffers; + using VULKAN_HPP_RAII_NAMESPACE::CommandPool; + using VULKAN_HPP_RAII_NAMESPACE::DescriptorPool; + using VULKAN_HPP_RAII_NAMESPACE::DescriptorSet; + using VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout; + using VULKAN_HPP_RAII_NAMESPACE::DescriptorSets; + using VULKAN_HPP_RAII_NAMESPACE::Device; + using VULKAN_HPP_RAII_NAMESPACE::DeviceMemory; + using VULKAN_HPP_RAII_NAMESPACE::Event; + using VULKAN_HPP_RAII_NAMESPACE::Fence; + using VULKAN_HPP_RAII_NAMESPACE::Framebuffer; + using VULKAN_HPP_RAII_NAMESPACE::Image; + using VULKAN_HPP_RAII_NAMESPACE::ImageView; + using VULKAN_HPP_RAII_NAMESPACE::Instance; + using VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice; + using VULKAN_HPP_RAII_NAMESPACE::PhysicalDevices; + using VULKAN_HPP_RAII_NAMESPACE::Pipeline; + using VULKAN_HPP_RAII_NAMESPACE::PipelineCache; + using VULKAN_HPP_RAII_NAMESPACE::PipelineLayout; + using VULKAN_HPP_RAII_NAMESPACE::Pipelines; + using VULKAN_HPP_RAII_NAMESPACE::QueryPool; + using VULKAN_HPP_RAII_NAMESPACE::Queue; + using VULKAN_HPP_RAII_NAMESPACE::RenderPass; + using VULKAN_HPP_RAII_NAMESPACE::Sampler; + using VULKAN_HPP_RAII_NAMESPACE::Semaphore; + using VULKAN_HPP_RAII_NAMESPACE::ShaderModule; + + //=== VK_VERSION_1_1 === + using VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate; + using VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion; + + //=== VK_VERSION_1_3 === + using VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot; + + //=== VK_KHR_surface === + using VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR; + + //=== VK_KHR_swapchain === + using VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR; + using VULKAN_HPP_RAII_NAMESPACE::SwapchainKHRs; + + //=== VK_KHR_display === + using VULKAN_HPP_RAII_NAMESPACE::DisplayKHR; + using VULKAN_HPP_RAII_NAMESPACE::DisplayKHRs; + using VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR; + + //=== VK_EXT_debug_report === + using VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + using VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR; + using VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR; + + //=== VK_NVX_binary_import === + using VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX; + using VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX; + + //=== VK_EXT_debug_utils === + using VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT; + + //=== VK_KHR_acceleration_structure === + using VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR; + + //=== VK_EXT_validation_cache === + using VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT; + + //=== VK_NV_ray_tracing === + using VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV; + + //=== VK_INTEL_performance_query === + using VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL; + + //=== VK_KHR_deferred_host_operations === + using VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR; + + //=== VK_NV_device_generated_commands === + using VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + using VULKAN_HPP_RAII_NAMESPACE::CudaFunctionNV; + using VULKAN_HPP_RAII_NAMESPACE::CudaModuleNV; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + using VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + using VULKAN_HPP_RAII_NAMESPACE::MicromapEXT; + + //=== VK_ARM_tensors === + using VULKAN_HPP_RAII_NAMESPACE::TensorARM; + using VULKAN_HPP_RAII_NAMESPACE::TensorViewARM; + + //=== VK_NV_optical_flow === + using VULKAN_HPP_RAII_NAMESPACE::OpticalFlowSessionNV; + + //=== VK_EXT_shader_object === + using VULKAN_HPP_RAII_NAMESPACE::ShaderEXT; + using VULKAN_HPP_RAII_NAMESPACE::ShaderEXTs; + + //=== VK_KHR_pipeline_binary === + using VULKAN_HPP_RAII_NAMESPACE::PipelineBinaryKHR; + using VULKAN_HPP_RAII_NAMESPACE::PipelineBinaryKHRs; + + //=== VK_ARM_data_graph === + using VULKAN_HPP_RAII_NAMESPACE::DataGraphPipelineSessionARM; + + //=== VK_NV_external_compute_queue === + using VULKAN_HPP_RAII_NAMESPACE::ExternalComputeQueueNV; + + //=== VK_EXT_device_generated_commands === + using VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutEXT; + using VULKAN_HPP_RAII_NAMESPACE::IndirectExecutionSetEXT; + + } // namespace VULKAN_HPP_RAII_NAMESPACE +#endif +} // namespace VULKAN_HPP_NAMESPACE + +export namespace std +{ + + //======================================= + //=== HASH specialization for Flags types === + //======================================= + + template + struct hash>; + + //======================================== + //=== HASH specializations for handles === + //======================================== + + //=== VK_VERSION_1_0 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_VERSION_1_1 === + template <> + struct hash; + template <> + struct hash; + + //=== VK_VERSION_1_3 === + template <> + struct hash; + + //=== VK_KHR_surface === + template <> + struct hash; + + //=== VK_KHR_swapchain === + template <> + struct hash; + + //=== VK_KHR_display === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_debug_report === + template <> + struct hash; + + //=== VK_KHR_video_queue === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NVX_binary_import === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_debug_utils === + template <> + struct hash; + + //=== VK_KHR_acceleration_structure === + template <> + struct hash; + + //=== VK_EXT_validation_cache === + template <> + struct hash; + + //=== VK_NV_ray_tracing === + template <> + struct hash; + + //=== VK_INTEL_performance_query === + template <> + struct hash; + + //=== VK_KHR_deferred_host_operations === + template <> + struct hash; + + //=== VK_NV_device_generated_commands === + template <> + struct hash; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + template <> + struct hash; + template <> + struct hash; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + template <> + struct hash; + + //=== VK_ARM_tensors === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_optical_flow === + template <> + struct hash; + + //=== VK_EXT_shader_object === + template <> + struct hash; + + //=== VK_KHR_pipeline_binary === + template <> + struct hash; + + //=== VK_ARM_data_graph === + template <> + struct hash; + + //=== VK_NV_external_compute_queue === + template <> + struct hash; + + //=== VK_EXT_device_generated_commands === + template <> + struct hash; + template <> + struct hash; + + //======================================== + //=== HASH specializations for structs === + //======================================== + + //=== VK_VERSION_1_0 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_VERSION_1_1 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_VERSION_1_2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_VERSION_1_3 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_VERSION_1_4 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_surface === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_swapchain === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_display === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_display_swapchain === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + template <> + struct hash; + + //=== VK_AMD_rasterization_order === + template <> + struct hash; + + //=== VK_EXT_debug_marker === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_queue === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_decode_queue === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_dedicated_allocation === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_transform_feedback === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NVX_binary_import === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NVX_image_view_handle === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_encode_h264 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_encode_h265 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_decode_h264 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_AMD_texture_gather_bias_lod === + template <> + struct hash; + + //=== VK_AMD_shader_info === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_corner_sampled_image === + template <> + struct hash; + + //=== VK_NV_external_memory_capabilities === + template <> + struct hash; + + //=== VK_NV_external_memory === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_win32_keyed_mutex === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_device_group === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_validation_flags === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_astc_decode_mode === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_keyed_mutex === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_conditional_rendering === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_incremental_present === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_clip_space_w_scaling === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_display_surface_counter === + template <> + struct hash; + + //=== VK_EXT_display_control === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_GOOGLE_display_timing === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NVX_multiview_per_view_attributes === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_viewport_swizzle === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_discard_rectangles === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_conservative_rasterization === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_depth_clip_enable === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_hdr_metadata === + template <> + struct hash; + template <> + struct hash; + + //=== VK_IMG_relaxed_line_rasterization === + template <> + struct hash; + + //=== VK_KHR_shared_presentable_image === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_performance_query === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_get_surface_capabilities2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_get_display_properties2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_mixed_attachment_samples === + template <> + struct hash; + + //=== VK_KHR_shader_bfloat16 === + template <> + struct hash; + + //=== VK_EXT_sample_locations === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_blend_operation_advanced === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_fragment_coverage_to_color === + template <> + struct hash; + + //=== VK_KHR_acceleration_structure === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_ray_tracing_pipeline === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_ray_query === + template <> + struct hash; + + //=== VK_NV_framebuffer_mixed_samples === + template <> + struct hash; + + //=== VK_NV_shader_sm_builtins === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_image_drm_format_modifier === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_validation_cache === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_portability_subset === + template <> + struct hash; + template <> + struct hash; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NV_shading_rate_image === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_ray_tracing === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_representative_fragment_test === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_filter_cubic === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_external_memory_host === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_shader_clock === + template <> + struct hash; + + //=== VK_AMD_pipeline_compiler_control === + template <> + struct hash; + + //=== VK_AMD_shader_core_properties === + template <> + struct hash; + + //=== VK_KHR_video_decode_h265 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_AMD_memory_overallocation_behavior === + template <> + struct hash; + + //=== VK_EXT_vertex_attribute_divisor === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_frame_token === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_mesh_shader === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_shader_image_footprint === + template <> + struct hash; + + //=== VK_NV_scissor_exclusive === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_device_diagnostic_checkpoints === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_INTEL_shader_integer_functions2 === + template <> + struct hash; + + //=== VK_INTEL_performance_query === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_pci_bus_info === + template <> + struct hash; + + //=== VK_AMD_display_native_hdr === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_fragment_shading_rate === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_AMD_shader_core_properties2 === + template <> + struct hash; + + //=== VK_AMD_device_coherent_memory === + template <> + struct hash; + + //=== VK_EXT_shader_image_atomic_int64 === + template <> + struct hash; + + //=== VK_KHR_shader_quad_control === + template <> + struct hash; + + //=== VK_EXT_memory_budget === + template <> + struct hash; + + //=== VK_EXT_memory_priority === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_surface_protected_capabilities === + template <> + struct hash; + + //=== VK_NV_dedicated_allocation_image_aliasing === + template <> + struct hash; + + //=== VK_EXT_buffer_device_address === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_validation_features === + template <> + struct hash; + + //=== VK_KHR_present_wait === + template <> + struct hash; + + //=== VK_NV_cooperative_matrix === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_coverage_reduction_mode === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_fragment_shader_interlock === + template <> + struct hash; + + //=== VK_EXT_ycbcr_image_arrays === + template <> + struct hash; + + //=== VK_EXT_provoking_vertex === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + template <> + struct hash; + + //=== VK_EXT_shader_atomic_float === + template <> + struct hash; + + //=== VK_EXT_extended_dynamic_state === + template <> + struct hash; + + //=== VK_KHR_pipeline_executable_properties === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_map_memory_placed === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_shader_atomic_float2 === + template <> + struct hash; + + //=== VK_NV_device_generated_commands === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_inherited_viewport_scissor === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_texel_buffer_alignment === + template <> + struct hash; + + //=== VK_QCOM_render_pass_transform === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_depth_bias_control === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_device_memory_report === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_custom_border_color === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_pipeline_library === + template <> + struct hash; + + //=== VK_NV_present_barrier === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_present_id === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_encode_queue === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_device_diagnostics_config === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_low_latency === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_descriptor_buffer === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_graphics_pipeline_library === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_AMD_shader_early_and_late_fragment_tests === + template <> + struct hash; + + //=== VK_KHR_fragment_shader_barycentric === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_shader_subgroup_uniform_control_flow === + template <> + struct hash; + + //=== VK_NV_fragment_shading_rate_enums === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_ray_tracing_motion_blur === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_mesh_shader === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_ycbcr_2plane_444_formats === + template <> + struct hash; + + //=== VK_EXT_fragment_density_map2 === + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_rotated_copy_commands === + template <> + struct hash; + + //=== VK_KHR_workgroup_memory_explicit_layout === + template <> + struct hash; + + //=== VK_EXT_image_compression_control === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_attachment_feedback_loop_layout === + template <> + struct hash; + + //=== VK_EXT_4444_formats === + template <> + struct hash; + + //=== VK_EXT_device_fault === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_rgba10x6_formats === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_physical_device_drm === + template <> + struct hash; + + //=== VK_EXT_device_address_binding_report === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_depth_clip_control === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_primitive_topology_list_restart === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_HUAWEI_invocation_mask === + template <> + struct hash; + + //=== VK_NV_external_memory_rdma === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_pipeline_properties === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_frame_boundary === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_multisampled_render_to_single_sampled === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_extended_dynamic_state2 === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_primitives_generated_query === + template <> + struct hash; + + //=== VK_KHR_ray_tracing_maintenance1 === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_image_view_min_lod === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_multi_draw === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_image_2d_view_of_3d === + template <> + struct hash; + + //=== VK_EXT_shader_tile_image === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_opacity_micromap === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_HUAWEI_cluster_culling_shader === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_border_color_swizzle === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_pageable_device_local_memory === + template <> + struct hash; + + //=== VK_ARM_shader_core_properties === + template <> + struct hash; + + //=== VK_ARM_scheduling_controls === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_image_sliced_view_of_3d === + template <> + struct hash; + template <> + struct hash; + + //=== VK_VALVE_descriptor_set_host_mapping === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_non_seamless_cube_map === + template <> + struct hash; + + //=== VK_ARM_render_pass_striped === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_copy_memory_indirect === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_memory_decompression === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_device_generated_commands_compute === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_linear_color_attachment === + template <> + struct hash; + + //=== VK_KHR_shader_maximal_reconvergence === + template <> + struct hash; + + //=== VK_EXT_image_compression_control_swapchain === + template <> + struct hash; + + //=== VK_QCOM_image_processing === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_nested_command_buffer === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_external_memory_acquire_unmodified === + template <> + struct hash; + + //=== VK_EXT_extended_dynamic_state3 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_subpass_merge_feedback === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_LUNARG_direct_driver_loading === + template <> + struct hash; + template <> + struct hash; + + //=== VK_ARM_tensors === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_shader_module_identifier === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_rasterization_order_attachment_access === + template <> + struct hash; + + //=== VK_NV_optical_flow === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_legacy_dithering === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_format_resolve === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_AMD_anti_lag === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_present_id2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_present_wait2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_ray_tracing_position_fetch === + template <> + struct hash; + + //=== VK_EXT_shader_object === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_pipeline_binary === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_tile_properties === + template <> + struct hash; + template <> + struct hash; + + //=== VK_SEC_amigo_profiling === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_surface_maintenance1 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_swapchain_maintenance1 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_multiview_per_view_viewports === + template <> + struct hash; + + //=== VK_NV_ray_tracing_invocation_reorder === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_cooperative_vector === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_extended_sparse_address_space === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_mutable_descriptor_type === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_legacy_vertex_attributes === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_layer_settings === + template <> + struct hash; + template <> + struct hash; + + //=== VK_ARM_shader_core_builtins === + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_pipeline_library_group_handles === + template <> + struct hash; + + //=== VK_EXT_dynamic_rendering_unused_attachments === + template <> + struct hash; + + //=== VK_NV_low_latency2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_cooperative_matrix === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_ARM_data_graph === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_multiview_per_view_render_areas === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_compute_shader_derivatives === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_decode_av1 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_encode_av1 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_decode_vp9 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_maintenance1 === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_per_stage_descriptor_set === + template <> + struct hash; + + //=== VK_QCOM_image_processing2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_filter_cubic_weights === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_ycbcr_degamma === + template <> + struct hash; + template <> + struct hash; + + //=== VK_QCOM_filter_cubic_clamp === + template <> + struct hash; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + template <> + struct hash; + + //=== VK_KHR_unified_image_layouts === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_MSFT_layered_driver === + template <> + struct hash; + + //=== VK_KHR_calibrated_timestamps === + template <> + struct hash; + + //=== VK_KHR_maintenance6 === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_descriptor_pool_overallocation === + template <> + struct hash; + + //=== VK_QCOM_tile_memory_heap === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_display_stereo === + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_encode_intra_refresh === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_encode_quantization_map === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_raw_access_chains === + template <> + struct hash; + + //=== VK_NV_external_compute_queue === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_shader_relaxed_extended_instruction === + template <> + struct hash; + + //=== VK_NV_command_buffer_inheritance === + template <> + struct hash; + + //=== VK_KHR_maintenance7 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_shader_atomic_float16_vector === + template <> + struct hash; + + //=== VK_EXT_shader_replicated_composites === + template <> + struct hash; + + //=== VK_EXT_shader_float8 === + template <> + struct hash; + + //=== VK_NV_ray_tracing_validation === + template <> + struct hash; + + //=== VK_NV_cluster_acceleration_structure === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_partitioned_acceleration_structure === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_device_generated_commands === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_maintenance8 === + template <> + struct hash; + template <> + struct hash; + + //=== VK_MESA_image_alignment_control === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_depth_clamp_control === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_maintenance9 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_video_maintenance2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + template <> + struct hash; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_HUAWEI_hdr_vivid === + template <> + struct hash; + template <> + struct hash; + + //=== VK_NV_cooperative_matrix2 === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_ARM_pipeline_opacity_micromap === + template <> + struct hash; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_depth_clamp_zero_one === + template <> + struct hash; + + //=== VK_EXT_vertex_attribute_robustness === + template <> + struct hash; + + //=== VK_ARM_format_pack === + template <> + struct hash; + + //=== VK_VALVE_fragment_density_map_layered === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_KHR_robustness2 === + template <> + struct hash; + template <> + struct hash; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_present_metering === + template <> + struct hash; + template <> + struct hash; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_fragment_density_map_offset === + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + template <> + struct hash; + + //=== VK_EXT_zero_initialize_device_memory === + template <> + struct hash; + + //=== VK_KHR_present_mode_fifo_latest_ready === + template <> + struct hash; + + //=== VK_SEC_pipeline_cache_incremental_mode === + template <> + struct hash; + + //================================================================= + //=== Required exports for VULKAN_HPP_NAMESPACE::StructureChain === + //================================================================= + +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + using std::tuple_element; + using std::tuple_size; +#endif +} // namespace std + +// This VkFlags type is used as part of a bitfield in some structure. +// As it can't be mimicked by vk-data types, we need to export just that!! +export using ::VkGeometryInstanceFlagsKHR; + +//================== +//=== PFN TYPEs === +//================== + +//=== VK_VERSION_1_0 === +export using ::PFN_vkCreateInstance; +export using ::PFN_vkDestroyInstance; +export using ::PFN_vkEnumeratePhysicalDevices; +export using ::PFN_vkGetPhysicalDeviceFeatures; +export using ::PFN_vkGetPhysicalDeviceFormatProperties; +export using ::PFN_vkGetPhysicalDeviceImageFormatProperties; +export using ::PFN_vkGetPhysicalDeviceProperties; +export using ::PFN_vkGetPhysicalDeviceQueueFamilyProperties; +export using ::PFN_vkGetPhysicalDeviceMemoryProperties; +export using ::PFN_vkGetInstanceProcAddr; +export using ::PFN_vkGetDeviceProcAddr; +export using ::PFN_vkCreateDevice; +export using ::PFN_vkDestroyDevice; +export using ::PFN_vkEnumerateInstanceExtensionProperties; +export using ::PFN_vkEnumerateDeviceExtensionProperties; +export using ::PFN_vkEnumerateInstanceLayerProperties; +export using ::PFN_vkEnumerateDeviceLayerProperties; +export using ::PFN_vkGetDeviceQueue; +export using ::PFN_vkQueueSubmit; +export using ::PFN_vkQueueWaitIdle; +export using ::PFN_vkDeviceWaitIdle; +export using ::PFN_vkAllocateMemory; +export using ::PFN_vkFreeMemory; +export using ::PFN_vkMapMemory; +export using ::PFN_vkUnmapMemory; +export using ::PFN_vkFlushMappedMemoryRanges; +export using ::PFN_vkInvalidateMappedMemoryRanges; +export using ::PFN_vkGetDeviceMemoryCommitment; +export using ::PFN_vkBindBufferMemory; +export using ::PFN_vkBindImageMemory; +export using ::PFN_vkGetBufferMemoryRequirements; +export using ::PFN_vkGetImageMemoryRequirements; +export using ::PFN_vkGetImageSparseMemoryRequirements; +export using ::PFN_vkGetPhysicalDeviceSparseImageFormatProperties; +export using ::PFN_vkQueueBindSparse; +export using ::PFN_vkCreateFence; +export using ::PFN_vkDestroyFence; +export using ::PFN_vkResetFences; +export using ::PFN_vkGetFenceStatus; +export using ::PFN_vkWaitForFences; +export using ::PFN_vkCreateSemaphore; +export using ::PFN_vkDestroySemaphore; +export using ::PFN_vkCreateEvent; +export using ::PFN_vkDestroyEvent; +export using ::PFN_vkGetEventStatus; +export using ::PFN_vkSetEvent; +export using ::PFN_vkResetEvent; +export using ::PFN_vkCreateQueryPool; +export using ::PFN_vkDestroyQueryPool; +export using ::PFN_vkGetQueryPoolResults; +export using ::PFN_vkCreateBuffer; +export using ::PFN_vkDestroyBuffer; +export using ::PFN_vkCreateBufferView; +export using ::PFN_vkDestroyBufferView; +export using ::PFN_vkCreateImage; +export using ::PFN_vkDestroyImage; +export using ::PFN_vkGetImageSubresourceLayout; +export using ::PFN_vkCreateImageView; +export using ::PFN_vkDestroyImageView; +export using ::PFN_vkCreateShaderModule; +export using ::PFN_vkDestroyShaderModule; +export using ::PFN_vkCreatePipelineCache; +export using ::PFN_vkDestroyPipelineCache; +export using ::PFN_vkGetPipelineCacheData; +export using ::PFN_vkMergePipelineCaches; +export using ::PFN_vkCreateGraphicsPipelines; +export using ::PFN_vkCreateComputePipelines; +export using ::PFN_vkDestroyPipeline; +export using ::PFN_vkCreatePipelineLayout; +export using ::PFN_vkDestroyPipelineLayout; +export using ::PFN_vkCreateSampler; +export using ::PFN_vkDestroySampler; +export using ::PFN_vkCreateDescriptorSetLayout; +export using ::PFN_vkDestroyDescriptorSetLayout; +export using ::PFN_vkCreateDescriptorPool; +export using ::PFN_vkDestroyDescriptorPool; +export using ::PFN_vkResetDescriptorPool; +export using ::PFN_vkAllocateDescriptorSets; +export using ::PFN_vkFreeDescriptorSets; +export using ::PFN_vkUpdateDescriptorSets; +export using ::PFN_vkCreateFramebuffer; +export using ::PFN_vkDestroyFramebuffer; +export using ::PFN_vkCreateRenderPass; +export using ::PFN_vkDestroyRenderPass; +export using ::PFN_vkGetRenderAreaGranularity; +export using ::PFN_vkCreateCommandPool; +export using ::PFN_vkDestroyCommandPool; +export using ::PFN_vkResetCommandPool; +export using ::PFN_vkAllocateCommandBuffers; +export using ::PFN_vkFreeCommandBuffers; +export using ::PFN_vkBeginCommandBuffer; +export using ::PFN_vkEndCommandBuffer; +export using ::PFN_vkResetCommandBuffer; +export using ::PFN_vkCmdBindPipeline; +export using ::PFN_vkCmdSetViewport; +export using ::PFN_vkCmdSetScissor; +export using ::PFN_vkCmdSetLineWidth; +export using ::PFN_vkCmdSetDepthBias; +export using ::PFN_vkCmdSetBlendConstants; +export using ::PFN_vkCmdSetDepthBounds; +export using ::PFN_vkCmdSetStencilCompareMask; +export using ::PFN_vkCmdSetStencilWriteMask; +export using ::PFN_vkCmdSetStencilReference; +export using ::PFN_vkCmdBindDescriptorSets; +export using ::PFN_vkCmdBindIndexBuffer; +export using ::PFN_vkCmdBindVertexBuffers; +export using ::PFN_vkCmdDraw; +export using ::PFN_vkCmdDrawIndexed; +export using ::PFN_vkCmdDrawIndirect; +export using ::PFN_vkCmdDrawIndexedIndirect; +export using ::PFN_vkCmdDispatch; +export using ::PFN_vkCmdDispatchIndirect; +export using ::PFN_vkCmdCopyBuffer; +export using ::PFN_vkCmdCopyImage; +export using ::PFN_vkCmdBlitImage; +export using ::PFN_vkCmdCopyBufferToImage; +export using ::PFN_vkCmdCopyImageToBuffer; +export using ::PFN_vkCmdUpdateBuffer; +export using ::PFN_vkCmdFillBuffer; +export using ::PFN_vkCmdClearColorImage; +export using ::PFN_vkCmdClearDepthStencilImage; +export using ::PFN_vkCmdClearAttachments; +export using ::PFN_vkCmdResolveImage; +export using ::PFN_vkCmdSetEvent; +export using ::PFN_vkCmdResetEvent; +export using ::PFN_vkCmdWaitEvents; +export using ::PFN_vkCmdPipelineBarrier; +export using ::PFN_vkCmdBeginQuery; +export using ::PFN_vkCmdEndQuery; +export using ::PFN_vkCmdResetQueryPool; +export using ::PFN_vkCmdWriteTimestamp; +export using ::PFN_vkCmdCopyQueryPoolResults; +export using ::PFN_vkCmdPushConstants; +export using ::PFN_vkCmdBeginRenderPass; +export using ::PFN_vkCmdNextSubpass; +export using ::PFN_vkCmdEndRenderPass; +export using ::PFN_vkCmdExecuteCommands; + +//=== VK_VERSION_1_1 === +export using ::PFN_vkEnumerateInstanceVersion; +export using ::PFN_vkBindBufferMemory2; +export using ::PFN_vkBindImageMemory2; +export using ::PFN_vkGetDeviceGroupPeerMemoryFeatures; +export using ::PFN_vkCmdSetDeviceMask; +export using ::PFN_vkCmdDispatchBase; +export using ::PFN_vkEnumeratePhysicalDeviceGroups; +export using ::PFN_vkGetImageMemoryRequirements2; +export using ::PFN_vkGetBufferMemoryRequirements2; +export using ::PFN_vkGetImageSparseMemoryRequirements2; +export using ::PFN_vkGetPhysicalDeviceFeatures2; +export using ::PFN_vkGetPhysicalDeviceProperties2; +export using ::PFN_vkGetPhysicalDeviceFormatProperties2; +export using ::PFN_vkGetPhysicalDeviceImageFormatProperties2; +export using ::PFN_vkGetPhysicalDeviceQueueFamilyProperties2; +export using ::PFN_vkGetPhysicalDeviceMemoryProperties2; +export using ::PFN_vkGetPhysicalDeviceSparseImageFormatProperties2; +export using ::PFN_vkTrimCommandPool; +export using ::PFN_vkGetDeviceQueue2; +export using ::PFN_vkCreateSamplerYcbcrConversion; +export using ::PFN_vkDestroySamplerYcbcrConversion; +export using ::PFN_vkCreateDescriptorUpdateTemplate; +export using ::PFN_vkDestroyDescriptorUpdateTemplate; +export using ::PFN_vkUpdateDescriptorSetWithTemplate; +export using ::PFN_vkGetPhysicalDeviceExternalBufferProperties; +export using ::PFN_vkGetPhysicalDeviceExternalFenceProperties; +export using ::PFN_vkGetPhysicalDeviceExternalSemaphoreProperties; +export using ::PFN_vkGetDescriptorSetLayoutSupport; + +//=== VK_VERSION_1_2 === +export using ::PFN_vkCmdDrawIndirectCount; +export using ::PFN_vkCmdDrawIndexedIndirectCount; +export using ::PFN_vkCreateRenderPass2; +export using ::PFN_vkCmdBeginRenderPass2; +export using ::PFN_vkCmdNextSubpass2; +export using ::PFN_vkCmdEndRenderPass2; +export using ::PFN_vkResetQueryPool; +export using ::PFN_vkGetSemaphoreCounterValue; +export using ::PFN_vkWaitSemaphores; +export using ::PFN_vkSignalSemaphore; +export using ::PFN_vkGetBufferDeviceAddress; +export using ::PFN_vkGetBufferOpaqueCaptureAddress; +export using ::PFN_vkGetDeviceMemoryOpaqueCaptureAddress; + +//=== VK_VERSION_1_3 === +export using ::PFN_vkGetPhysicalDeviceToolProperties; +export using ::PFN_vkCreatePrivateDataSlot; +export using ::PFN_vkDestroyPrivateDataSlot; +export using ::PFN_vkSetPrivateData; +export using ::PFN_vkGetPrivateData; +export using ::PFN_vkCmdSetEvent2; +export using ::PFN_vkCmdResetEvent2; +export using ::PFN_vkCmdWaitEvents2; +export using ::PFN_vkCmdPipelineBarrier2; +export using ::PFN_vkCmdWriteTimestamp2; +export using ::PFN_vkQueueSubmit2; +export using ::PFN_vkCmdCopyBuffer2; +export using ::PFN_vkCmdCopyImage2; +export using ::PFN_vkCmdCopyBufferToImage2; +export using ::PFN_vkCmdCopyImageToBuffer2; +export using ::PFN_vkCmdBlitImage2; +export using ::PFN_vkCmdResolveImage2; +export using ::PFN_vkCmdBeginRendering; +export using ::PFN_vkCmdEndRendering; +export using ::PFN_vkCmdSetCullMode; +export using ::PFN_vkCmdSetFrontFace; +export using ::PFN_vkCmdSetPrimitiveTopology; +export using ::PFN_vkCmdSetViewportWithCount; +export using ::PFN_vkCmdSetScissorWithCount; +export using ::PFN_vkCmdBindVertexBuffers2; +export using ::PFN_vkCmdSetDepthTestEnable; +export using ::PFN_vkCmdSetDepthWriteEnable; +export using ::PFN_vkCmdSetDepthCompareOp; +export using ::PFN_vkCmdSetDepthBoundsTestEnable; +export using ::PFN_vkCmdSetStencilTestEnable; +export using ::PFN_vkCmdSetStencilOp; +export using ::PFN_vkCmdSetRasterizerDiscardEnable; +export using ::PFN_vkCmdSetDepthBiasEnable; +export using ::PFN_vkCmdSetPrimitiveRestartEnable; +export using ::PFN_vkGetDeviceBufferMemoryRequirements; +export using ::PFN_vkGetDeviceImageMemoryRequirements; +export using ::PFN_vkGetDeviceImageSparseMemoryRequirements; + +//=== VK_VERSION_1_4 === +export using ::PFN_vkCmdSetLineStipple; +export using ::PFN_vkMapMemory2; +export using ::PFN_vkUnmapMemory2; +export using ::PFN_vkCmdBindIndexBuffer2; +export using ::PFN_vkGetRenderingAreaGranularity; +export using ::PFN_vkGetDeviceImageSubresourceLayout; +export using ::PFN_vkGetImageSubresourceLayout2; +export using ::PFN_vkCmdPushDescriptorSet; +export using ::PFN_vkCmdPushDescriptorSetWithTemplate; +export using ::PFN_vkCmdSetRenderingAttachmentLocations; +export using ::PFN_vkCmdSetRenderingInputAttachmentIndices; +export using ::PFN_vkCmdBindDescriptorSets2; +export using ::PFN_vkCmdPushConstants2; +export using ::PFN_vkCmdPushDescriptorSet2; +export using ::PFN_vkCmdPushDescriptorSetWithTemplate2; +export using ::PFN_vkCopyMemoryToImage; +export using ::PFN_vkCopyImageToMemory; +export using ::PFN_vkCopyImageToImage; +export using ::PFN_vkTransitionImageLayout; + +//=== VK_KHR_surface === +export using ::PFN_vkDestroySurfaceKHR; +export using ::PFN_vkGetPhysicalDeviceSurfaceSupportKHR; +export using ::PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR; +export using ::PFN_vkGetPhysicalDeviceSurfaceFormatsKHR; +export using ::PFN_vkGetPhysicalDeviceSurfacePresentModesKHR; + +//=== VK_KHR_swapchain === +export using ::PFN_vkCreateSwapchainKHR; +export using ::PFN_vkDestroySwapchainKHR; +export using ::PFN_vkGetSwapchainImagesKHR; +export using ::PFN_vkAcquireNextImageKHR; +export using ::PFN_vkQueuePresentKHR; +export using ::PFN_vkGetDeviceGroupPresentCapabilitiesKHR; +export using ::PFN_vkGetDeviceGroupSurfacePresentModesKHR; +export using ::PFN_vkGetPhysicalDevicePresentRectanglesKHR; +export using ::PFN_vkAcquireNextImage2KHR; + +//=== VK_KHR_display === +export using ::PFN_vkGetPhysicalDeviceDisplayPropertiesKHR; +export using ::PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR; +export using ::PFN_vkGetDisplayPlaneSupportedDisplaysKHR; +export using ::PFN_vkGetDisplayModePropertiesKHR; +export using ::PFN_vkCreateDisplayModeKHR; +export using ::PFN_vkGetDisplayPlaneCapabilitiesKHR; +export using ::PFN_vkCreateDisplayPlaneSurfaceKHR; + +//=== VK_KHR_display_swapchain === +export using ::PFN_vkCreateSharedSwapchainsKHR; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) +//=== VK_KHR_xlib_surface === +export using ::PFN_vkCreateXlibSurfaceKHR; +export using ::PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) +//=== VK_KHR_xcb_surface === +export using ::PFN_vkCreateXcbSurfaceKHR; +export using ::PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) +//=== VK_KHR_wayland_surface === +export using ::PFN_vkCreateWaylandSurfaceKHR; +export using ::PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) +//=== VK_KHR_android_surface === +export using ::PFN_vkCreateAndroidSurfaceKHR; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_win32_surface === +export using ::PFN_vkCreateWin32SurfaceKHR; +export using ::PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_EXT_debug_report === +export using ::PFN_vkCreateDebugReportCallbackEXT; +export using ::PFN_vkDestroyDebugReportCallbackEXT; +export using ::PFN_vkDebugReportMessageEXT; + +//=== VK_EXT_debug_marker === +export using ::PFN_vkDebugMarkerSetObjectTagEXT; +export using ::PFN_vkDebugMarkerSetObjectNameEXT; +export using ::PFN_vkCmdDebugMarkerBeginEXT; +export using ::PFN_vkCmdDebugMarkerEndEXT; +export using ::PFN_vkCmdDebugMarkerInsertEXT; + +//=== VK_KHR_video_queue === +export using ::PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR; +export using ::PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR; +export using ::PFN_vkCreateVideoSessionKHR; +export using ::PFN_vkDestroyVideoSessionKHR; +export using ::PFN_vkGetVideoSessionMemoryRequirementsKHR; +export using ::PFN_vkBindVideoSessionMemoryKHR; +export using ::PFN_vkCreateVideoSessionParametersKHR; +export using ::PFN_vkUpdateVideoSessionParametersKHR; +export using ::PFN_vkDestroyVideoSessionParametersKHR; +export using ::PFN_vkCmdBeginVideoCodingKHR; +export using ::PFN_vkCmdEndVideoCodingKHR; +export using ::PFN_vkCmdControlVideoCodingKHR; + +//=== VK_KHR_video_decode_queue === +export using ::PFN_vkCmdDecodeVideoKHR; + +//=== VK_EXT_transform_feedback === +export using ::PFN_vkCmdBindTransformFeedbackBuffersEXT; +export using ::PFN_vkCmdBeginTransformFeedbackEXT; +export using ::PFN_vkCmdEndTransformFeedbackEXT; +export using ::PFN_vkCmdBeginQueryIndexedEXT; +export using ::PFN_vkCmdEndQueryIndexedEXT; +export using ::PFN_vkCmdDrawIndirectByteCountEXT; + +//=== VK_NVX_binary_import === +export using ::PFN_vkCreateCuModuleNVX; +export using ::PFN_vkCreateCuFunctionNVX; +export using ::PFN_vkDestroyCuModuleNVX; +export using ::PFN_vkDestroyCuFunctionNVX; +export using ::PFN_vkCmdCuLaunchKernelNVX; + +//=== VK_NVX_image_view_handle === +export using ::PFN_vkGetImageViewHandleNVX; +export using ::PFN_vkGetImageViewHandle64NVX; +export using ::PFN_vkGetImageViewAddressNVX; + +//=== VK_AMD_draw_indirect_count === +export using ::PFN_vkCmdDrawIndirectCountAMD; +export using ::PFN_vkCmdDrawIndexedIndirectCountAMD; + +//=== VK_AMD_shader_info === +export using ::PFN_vkGetShaderInfoAMD; + +//=== VK_KHR_dynamic_rendering === +export using ::PFN_vkCmdBeginRenderingKHR; +export using ::PFN_vkCmdEndRenderingKHR; + +#if defined( VK_USE_PLATFORM_GGP ) +//=== VK_GGP_stream_descriptor_surface === +export using ::PFN_vkCreateStreamDescriptorSurfaceGGP; +#endif /*VK_USE_PLATFORM_GGP*/ + +//=== VK_NV_external_memory_capabilities === +export using ::PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_NV_external_memory_win32 === +export using ::PFN_vkGetMemoryWin32HandleNV; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_get_physical_device_properties2 === +export using ::PFN_vkGetPhysicalDeviceFeatures2KHR; +export using ::PFN_vkGetPhysicalDeviceProperties2KHR; +export using ::PFN_vkGetPhysicalDeviceFormatProperties2KHR; +export using ::PFN_vkGetPhysicalDeviceImageFormatProperties2KHR; +export using ::PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR; +export using ::PFN_vkGetPhysicalDeviceMemoryProperties2KHR; +export using ::PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR; + +//=== VK_KHR_device_group === +export using ::PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR; +export using ::PFN_vkCmdSetDeviceMaskKHR; +export using ::PFN_vkCmdDispatchBaseKHR; + +#if defined( VK_USE_PLATFORM_VI_NN ) +//=== VK_NN_vi_surface === +export using ::PFN_vkCreateViSurfaceNN; +#endif /*VK_USE_PLATFORM_VI_NN*/ + +//=== VK_KHR_maintenance1 === +export using ::PFN_vkTrimCommandPoolKHR; + +//=== VK_KHR_device_group_creation === +export using ::PFN_vkEnumeratePhysicalDeviceGroupsKHR; + +//=== VK_KHR_external_memory_capabilities === +export using ::PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_external_memory_win32 === +export using ::PFN_vkGetMemoryWin32HandleKHR; +export using ::PFN_vkGetMemoryWin32HandlePropertiesKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_external_memory_fd === +export using ::PFN_vkGetMemoryFdKHR; +export using ::PFN_vkGetMemoryFdPropertiesKHR; + +//=== VK_KHR_external_semaphore_capabilities === +export using ::PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_external_semaphore_win32 === +export using ::PFN_vkImportSemaphoreWin32HandleKHR; +export using ::PFN_vkGetSemaphoreWin32HandleKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_external_semaphore_fd === +export using ::PFN_vkImportSemaphoreFdKHR; +export using ::PFN_vkGetSemaphoreFdKHR; + +//=== VK_KHR_push_descriptor === +export using ::PFN_vkCmdPushDescriptorSetKHR; +export using ::PFN_vkCmdPushDescriptorSetWithTemplateKHR; + +//=== VK_EXT_conditional_rendering === +export using ::PFN_vkCmdBeginConditionalRenderingEXT; +export using ::PFN_vkCmdEndConditionalRenderingEXT; + +//=== VK_KHR_descriptor_update_template === +export using ::PFN_vkCreateDescriptorUpdateTemplateKHR; +export using ::PFN_vkDestroyDescriptorUpdateTemplateKHR; +export using ::PFN_vkUpdateDescriptorSetWithTemplateKHR; + +//=== VK_NV_clip_space_w_scaling === +export using ::PFN_vkCmdSetViewportWScalingNV; + +//=== VK_EXT_direct_mode_display === +export using ::PFN_vkReleaseDisplayEXT; + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) +//=== VK_EXT_acquire_xlib_display === +export using ::PFN_vkAcquireXlibDisplayEXT; +export using ::PFN_vkGetRandROutputDisplayEXT; +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + +//=== VK_EXT_display_surface_counter === +export using ::PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT; + +//=== VK_EXT_display_control === +export using ::PFN_vkDisplayPowerControlEXT; +export using ::PFN_vkRegisterDeviceEventEXT; +export using ::PFN_vkRegisterDisplayEventEXT; +export using ::PFN_vkGetSwapchainCounterEXT; + +//=== VK_GOOGLE_display_timing === +export using ::PFN_vkGetRefreshCycleDurationGOOGLE; +export using ::PFN_vkGetPastPresentationTimingGOOGLE; + +//=== VK_EXT_discard_rectangles === +export using ::PFN_vkCmdSetDiscardRectangleEXT; +export using ::PFN_vkCmdSetDiscardRectangleEnableEXT; +export using ::PFN_vkCmdSetDiscardRectangleModeEXT; + +//=== VK_EXT_hdr_metadata === +export using ::PFN_vkSetHdrMetadataEXT; + +//=== VK_KHR_create_renderpass2 === +export using ::PFN_vkCreateRenderPass2KHR; +export using ::PFN_vkCmdBeginRenderPass2KHR; +export using ::PFN_vkCmdNextSubpass2KHR; +export using ::PFN_vkCmdEndRenderPass2KHR; + +//=== VK_KHR_shared_presentable_image === +export using ::PFN_vkGetSwapchainStatusKHR; + +//=== VK_KHR_external_fence_capabilities === +export using ::PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_external_fence_win32 === +export using ::PFN_vkImportFenceWin32HandleKHR; +export using ::PFN_vkGetFenceWin32HandleKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_external_fence_fd === +export using ::PFN_vkImportFenceFdKHR; +export using ::PFN_vkGetFenceFdKHR; + +//=== VK_KHR_performance_query === +export using ::PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; +export using ::PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; +export using ::PFN_vkAcquireProfilingLockKHR; +export using ::PFN_vkReleaseProfilingLockKHR; + +//=== VK_KHR_get_surface_capabilities2 === +export using ::PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR; +export using ::PFN_vkGetPhysicalDeviceSurfaceFormats2KHR; + +//=== VK_KHR_get_display_properties2 === +export using ::PFN_vkGetPhysicalDeviceDisplayProperties2KHR; +export using ::PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR; +export using ::PFN_vkGetDisplayModeProperties2KHR; +export using ::PFN_vkGetDisplayPlaneCapabilities2KHR; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) +//=== VK_MVK_ios_surface === +export using ::PFN_vkCreateIOSSurfaceMVK; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) +//=== VK_MVK_macos_surface === +export using ::PFN_vkCreateMacOSSurfaceMVK; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + +//=== VK_EXT_debug_utils === +export using ::PFN_vkSetDebugUtilsObjectNameEXT; +export using ::PFN_vkSetDebugUtilsObjectTagEXT; +export using ::PFN_vkQueueBeginDebugUtilsLabelEXT; +export using ::PFN_vkQueueEndDebugUtilsLabelEXT; +export using ::PFN_vkQueueInsertDebugUtilsLabelEXT; +export using ::PFN_vkCmdBeginDebugUtilsLabelEXT; +export using ::PFN_vkCmdEndDebugUtilsLabelEXT; +export using ::PFN_vkCmdInsertDebugUtilsLabelEXT; +export using ::PFN_vkCreateDebugUtilsMessengerEXT; +export using ::PFN_vkDestroyDebugUtilsMessengerEXT; +export using ::PFN_vkSubmitDebugUtilsMessageEXT; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) +//=== VK_ANDROID_external_memory_android_hardware_buffer === +export using ::PFN_vkGetAndroidHardwareBufferPropertiesANDROID; +export using ::PFN_vkGetMemoryAndroidHardwareBufferANDROID; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_AMDX_shader_enqueue === +export using ::PFN_vkCreateExecutionGraphPipelinesAMDX; +export using ::PFN_vkGetExecutionGraphPipelineScratchSizeAMDX; +export using ::PFN_vkGetExecutionGraphPipelineNodeIndexAMDX; +export using ::PFN_vkCmdInitializeGraphScratchMemoryAMDX; +export using ::PFN_vkCmdDispatchGraphAMDX; +export using ::PFN_vkCmdDispatchGraphIndirectAMDX; +export using ::PFN_vkCmdDispatchGraphIndirectCountAMDX; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_EXT_sample_locations === +export using ::PFN_vkCmdSetSampleLocationsEXT; +export using ::PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT; + +//=== VK_KHR_get_memory_requirements2 === +export using ::PFN_vkGetImageMemoryRequirements2KHR; +export using ::PFN_vkGetBufferMemoryRequirements2KHR; +export using ::PFN_vkGetImageSparseMemoryRequirements2KHR; + +//=== VK_KHR_acceleration_structure === +export using ::PFN_vkCreateAccelerationStructureKHR; +export using ::PFN_vkDestroyAccelerationStructureKHR; +export using ::PFN_vkCmdBuildAccelerationStructuresKHR; +export using ::PFN_vkCmdBuildAccelerationStructuresIndirectKHR; +export using ::PFN_vkBuildAccelerationStructuresKHR; +export using ::PFN_vkCopyAccelerationStructureKHR; +export using ::PFN_vkCopyAccelerationStructureToMemoryKHR; +export using ::PFN_vkCopyMemoryToAccelerationStructureKHR; +export using ::PFN_vkWriteAccelerationStructuresPropertiesKHR; +export using ::PFN_vkCmdCopyAccelerationStructureKHR; +export using ::PFN_vkCmdCopyAccelerationStructureToMemoryKHR; +export using ::PFN_vkCmdCopyMemoryToAccelerationStructureKHR; +export using ::PFN_vkGetAccelerationStructureDeviceAddressKHR; +export using ::PFN_vkCmdWriteAccelerationStructuresPropertiesKHR; +export using ::PFN_vkGetDeviceAccelerationStructureCompatibilityKHR; +export using ::PFN_vkGetAccelerationStructureBuildSizesKHR; + +//=== VK_KHR_ray_tracing_pipeline === +export using ::PFN_vkCmdTraceRaysKHR; +export using ::PFN_vkCreateRayTracingPipelinesKHR; +export using ::PFN_vkGetRayTracingShaderGroupHandlesKHR; +export using ::PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; +export using ::PFN_vkCmdTraceRaysIndirectKHR; +export using ::PFN_vkGetRayTracingShaderGroupStackSizeKHR; +export using ::PFN_vkCmdSetRayTracingPipelineStackSizeKHR; + +//=== VK_KHR_sampler_ycbcr_conversion === +export using ::PFN_vkCreateSamplerYcbcrConversionKHR; +export using ::PFN_vkDestroySamplerYcbcrConversionKHR; + +//=== VK_KHR_bind_memory2 === +export using ::PFN_vkBindBufferMemory2KHR; +export using ::PFN_vkBindImageMemory2KHR; + +//=== VK_EXT_image_drm_format_modifier === +export using ::PFN_vkGetImageDrmFormatModifierPropertiesEXT; + +//=== VK_EXT_validation_cache === +export using ::PFN_vkCreateValidationCacheEXT; +export using ::PFN_vkDestroyValidationCacheEXT; +export using ::PFN_vkMergeValidationCachesEXT; +export using ::PFN_vkGetValidationCacheDataEXT; + +//=== VK_NV_shading_rate_image === +export using ::PFN_vkCmdBindShadingRateImageNV; +export using ::PFN_vkCmdSetViewportShadingRatePaletteNV; +export using ::PFN_vkCmdSetCoarseSampleOrderNV; + +//=== VK_NV_ray_tracing === +export using ::PFN_vkCreateAccelerationStructureNV; +export using ::PFN_vkDestroyAccelerationStructureNV; +export using ::PFN_vkGetAccelerationStructureMemoryRequirementsNV; +export using ::PFN_vkBindAccelerationStructureMemoryNV; +export using ::PFN_vkCmdBuildAccelerationStructureNV; +export using ::PFN_vkCmdCopyAccelerationStructureNV; +export using ::PFN_vkCmdTraceRaysNV; +export using ::PFN_vkCreateRayTracingPipelinesNV; +export using ::PFN_vkGetRayTracingShaderGroupHandlesNV; +export using ::PFN_vkGetAccelerationStructureHandleNV; +export using ::PFN_vkCmdWriteAccelerationStructuresPropertiesNV; +export using ::PFN_vkCompileDeferredNV; + +//=== VK_KHR_maintenance3 === +export using ::PFN_vkGetDescriptorSetLayoutSupportKHR; + +//=== VK_KHR_draw_indirect_count === +export using ::PFN_vkCmdDrawIndirectCountKHR; +export using ::PFN_vkCmdDrawIndexedIndirectCountKHR; + +//=== VK_EXT_external_memory_host === +export using ::PFN_vkGetMemoryHostPointerPropertiesEXT; + +//=== VK_AMD_buffer_marker === +export using ::PFN_vkCmdWriteBufferMarkerAMD; +export using ::PFN_vkCmdWriteBufferMarker2AMD; + +//=== VK_EXT_calibrated_timestamps === +export using ::PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; +export using ::PFN_vkGetCalibratedTimestampsEXT; + +//=== VK_NV_mesh_shader === +export using ::PFN_vkCmdDrawMeshTasksNV; +export using ::PFN_vkCmdDrawMeshTasksIndirectNV; +export using ::PFN_vkCmdDrawMeshTasksIndirectCountNV; + +//=== VK_NV_scissor_exclusive === +export using ::PFN_vkCmdSetExclusiveScissorEnableNV; +export using ::PFN_vkCmdSetExclusiveScissorNV; + +//=== VK_NV_device_diagnostic_checkpoints === +export using ::PFN_vkCmdSetCheckpointNV; +export using ::PFN_vkGetQueueCheckpointDataNV; +export using ::PFN_vkGetQueueCheckpointData2NV; + +//=== VK_KHR_timeline_semaphore === +export using ::PFN_vkGetSemaphoreCounterValueKHR; +export using ::PFN_vkWaitSemaphoresKHR; +export using ::PFN_vkSignalSemaphoreKHR; + +//=== VK_INTEL_performance_query === +export using ::PFN_vkInitializePerformanceApiINTEL; +export using ::PFN_vkUninitializePerformanceApiINTEL; +export using ::PFN_vkCmdSetPerformanceMarkerINTEL; +export using ::PFN_vkCmdSetPerformanceStreamMarkerINTEL; +export using ::PFN_vkCmdSetPerformanceOverrideINTEL; +export using ::PFN_vkAcquirePerformanceConfigurationINTEL; +export using ::PFN_vkReleasePerformanceConfigurationINTEL; +export using ::PFN_vkQueueSetPerformanceConfigurationINTEL; +export using ::PFN_vkGetPerformanceParameterINTEL; + +//=== VK_AMD_display_native_hdr === +export using ::PFN_vkSetLocalDimmingAMD; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_imagepipe_surface === +export using ::PFN_vkCreateImagePipeSurfaceFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) +//=== VK_EXT_metal_surface === +export using ::PFN_vkCreateMetalSurfaceEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +//=== VK_KHR_fragment_shading_rate === +export using ::PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR; +export using ::PFN_vkCmdSetFragmentShadingRateKHR; + +//=== VK_KHR_dynamic_rendering_local_read === +export using ::PFN_vkCmdSetRenderingAttachmentLocationsKHR; +export using ::PFN_vkCmdSetRenderingInputAttachmentIndicesKHR; + +//=== VK_EXT_buffer_device_address === +export using ::PFN_vkGetBufferDeviceAddressEXT; + +//=== VK_EXT_tooling_info === +export using ::PFN_vkGetPhysicalDeviceToolPropertiesEXT; + +//=== VK_KHR_present_wait === +export using ::PFN_vkWaitForPresentKHR; + +//=== VK_NV_cooperative_matrix === +export using ::PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; + +//=== VK_NV_coverage_reduction_mode === +export using ::PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_EXT_full_screen_exclusive === +export using ::PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT; +export using ::PFN_vkAcquireFullScreenExclusiveModeEXT; +export using ::PFN_vkReleaseFullScreenExclusiveModeEXT; +export using ::PFN_vkGetDeviceGroupSurfacePresentModes2EXT; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_EXT_headless_surface === +export using ::PFN_vkCreateHeadlessSurfaceEXT; + +//=== VK_KHR_buffer_device_address === +export using ::PFN_vkGetBufferDeviceAddressKHR; +export using ::PFN_vkGetBufferOpaqueCaptureAddressKHR; +export using ::PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR; + +//=== VK_EXT_line_rasterization === +export using ::PFN_vkCmdSetLineStippleEXT; + +//=== VK_EXT_host_query_reset === +export using ::PFN_vkResetQueryPoolEXT; + +//=== VK_EXT_extended_dynamic_state === +export using ::PFN_vkCmdSetCullModeEXT; +export using ::PFN_vkCmdSetFrontFaceEXT; +export using ::PFN_vkCmdSetPrimitiveTopologyEXT; +export using ::PFN_vkCmdSetViewportWithCountEXT; +export using ::PFN_vkCmdSetScissorWithCountEXT; +export using ::PFN_vkCmdBindVertexBuffers2EXT; +export using ::PFN_vkCmdSetDepthTestEnableEXT; +export using ::PFN_vkCmdSetDepthWriteEnableEXT; +export using ::PFN_vkCmdSetDepthCompareOpEXT; +export using ::PFN_vkCmdSetDepthBoundsTestEnableEXT; +export using ::PFN_vkCmdSetStencilTestEnableEXT; +export using ::PFN_vkCmdSetStencilOpEXT; + +//=== VK_KHR_deferred_host_operations === +export using ::PFN_vkCreateDeferredOperationKHR; +export using ::PFN_vkDestroyDeferredOperationKHR; +export using ::PFN_vkGetDeferredOperationMaxConcurrencyKHR; +export using ::PFN_vkGetDeferredOperationResultKHR; +export using ::PFN_vkDeferredOperationJoinKHR; + +//=== VK_KHR_pipeline_executable_properties === +export using ::PFN_vkGetPipelineExecutablePropertiesKHR; +export using ::PFN_vkGetPipelineExecutableStatisticsKHR; +export using ::PFN_vkGetPipelineExecutableInternalRepresentationsKHR; + +//=== VK_EXT_host_image_copy === +export using ::PFN_vkCopyMemoryToImageEXT; +export using ::PFN_vkCopyImageToMemoryEXT; +export using ::PFN_vkCopyImageToImageEXT; +export using ::PFN_vkTransitionImageLayoutEXT; +export using ::PFN_vkGetImageSubresourceLayout2EXT; + +//=== VK_KHR_map_memory2 === +export using ::PFN_vkMapMemory2KHR; +export using ::PFN_vkUnmapMemory2KHR; + +//=== VK_EXT_swapchain_maintenance1 === +export using ::PFN_vkReleaseSwapchainImagesEXT; + +//=== VK_NV_device_generated_commands === +export using ::PFN_vkGetGeneratedCommandsMemoryRequirementsNV; +export using ::PFN_vkCmdPreprocessGeneratedCommandsNV; +export using ::PFN_vkCmdExecuteGeneratedCommandsNV; +export using ::PFN_vkCmdBindPipelineShaderGroupNV; +export using ::PFN_vkCreateIndirectCommandsLayoutNV; +export using ::PFN_vkDestroyIndirectCommandsLayoutNV; + +//=== VK_EXT_depth_bias_control === +export using ::PFN_vkCmdSetDepthBias2EXT; + +//=== VK_EXT_acquire_drm_display === +export using ::PFN_vkAcquireDrmDisplayEXT; +export using ::PFN_vkGetDrmDisplayEXT; + +//=== VK_EXT_private_data === +export using ::PFN_vkCreatePrivateDataSlotEXT; +export using ::PFN_vkDestroyPrivateDataSlotEXT; +export using ::PFN_vkSetPrivateDataEXT; +export using ::PFN_vkGetPrivateDataEXT; + +//=== VK_KHR_video_encode_queue === +export using ::PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR; +export using ::PFN_vkGetEncodedVideoSessionParametersKHR; +export using ::PFN_vkCmdEncodeVideoKHR; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_NV_cuda_kernel_launch === +export using ::PFN_vkCreateCudaModuleNV; +export using ::PFN_vkGetCudaModuleCacheNV; +export using ::PFN_vkCreateCudaFunctionNV; +export using ::PFN_vkDestroyCudaModuleNV; +export using ::PFN_vkDestroyCudaFunctionNV; +export using ::PFN_vkCmdCudaLaunchKernelNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_QCOM_tile_shading === +export using ::PFN_vkCmdDispatchTileQCOM; +export using ::PFN_vkCmdBeginPerTileExecutionQCOM; +export using ::PFN_vkCmdEndPerTileExecutionQCOM; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) +//=== VK_EXT_metal_objects === +export using ::PFN_vkExportMetalObjectsEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +//=== VK_KHR_synchronization2 === +export using ::PFN_vkCmdSetEvent2KHR; +export using ::PFN_vkCmdResetEvent2KHR; +export using ::PFN_vkCmdWaitEvents2KHR; +export using ::PFN_vkCmdPipelineBarrier2KHR; +export using ::PFN_vkCmdWriteTimestamp2KHR; +export using ::PFN_vkQueueSubmit2KHR; + +//=== VK_EXT_descriptor_buffer === +export using ::PFN_vkGetDescriptorSetLayoutSizeEXT; +export using ::PFN_vkGetDescriptorSetLayoutBindingOffsetEXT; +export using ::PFN_vkGetDescriptorEXT; +export using ::PFN_vkCmdBindDescriptorBuffersEXT; +export using ::PFN_vkCmdSetDescriptorBufferOffsetsEXT; +export using ::PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT; +export using ::PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT; +export using ::PFN_vkGetImageOpaqueCaptureDescriptorDataEXT; +export using ::PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT; +export using ::PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT; +export using ::PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT; + +//=== VK_NV_fragment_shading_rate_enums === +export using ::PFN_vkCmdSetFragmentShadingRateEnumNV; + +//=== VK_EXT_mesh_shader === +export using ::PFN_vkCmdDrawMeshTasksEXT; +export using ::PFN_vkCmdDrawMeshTasksIndirectEXT; +export using ::PFN_vkCmdDrawMeshTasksIndirectCountEXT; + +//=== VK_KHR_copy_commands2 === +export using ::PFN_vkCmdCopyBuffer2KHR; +export using ::PFN_vkCmdCopyImage2KHR; +export using ::PFN_vkCmdCopyBufferToImage2KHR; +export using ::PFN_vkCmdCopyImageToBuffer2KHR; +export using ::PFN_vkCmdBlitImage2KHR; +export using ::PFN_vkCmdResolveImage2KHR; + +//=== VK_EXT_device_fault === +export using ::PFN_vkGetDeviceFaultInfoEXT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_NV_acquire_winrt_display === +export using ::PFN_vkAcquireWinrtDisplayNV; +export using ::PFN_vkGetWinrtDisplayNV; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) +//=== VK_EXT_directfb_surface === +export using ::PFN_vkCreateDirectFBSurfaceEXT; +export using ::PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +//=== VK_EXT_vertex_input_dynamic_state === +export using ::PFN_vkCmdSetVertexInputEXT; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_external_memory === +export using ::PFN_vkGetMemoryZirconHandleFUCHSIA; +export using ::PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_external_semaphore === +export using ::PFN_vkImportSemaphoreZirconHandleFUCHSIA; +export using ::PFN_vkGetSemaphoreZirconHandleFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_buffer_collection === +export using ::PFN_vkCreateBufferCollectionFUCHSIA; +export using ::PFN_vkSetBufferCollectionImageConstraintsFUCHSIA; +export using ::PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA; +export using ::PFN_vkDestroyBufferCollectionFUCHSIA; +export using ::PFN_vkGetBufferCollectionPropertiesFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +//=== VK_HUAWEI_subpass_shading === +export using ::PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; +export using ::PFN_vkCmdSubpassShadingHUAWEI; + +//=== VK_HUAWEI_invocation_mask === +export using ::PFN_vkCmdBindInvocationMaskHUAWEI; + +//=== VK_NV_external_memory_rdma === +export using ::PFN_vkGetMemoryRemoteAddressNV; + +//=== VK_EXT_pipeline_properties === +export using ::PFN_vkGetPipelinePropertiesEXT; + +//=== VK_EXT_extended_dynamic_state2 === +export using ::PFN_vkCmdSetPatchControlPointsEXT; +export using ::PFN_vkCmdSetRasterizerDiscardEnableEXT; +export using ::PFN_vkCmdSetDepthBiasEnableEXT; +export using ::PFN_vkCmdSetLogicOpEXT; +export using ::PFN_vkCmdSetPrimitiveRestartEnableEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) +//=== VK_QNX_screen_surface === +export using ::PFN_vkCreateScreenSurfaceQNX; +export using ::PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +//=== VK_EXT_color_write_enable === +export using ::PFN_vkCmdSetColorWriteEnableEXT; + +//=== VK_KHR_ray_tracing_maintenance1 === +export using ::PFN_vkCmdTraceRaysIndirect2KHR; + +//=== VK_EXT_multi_draw === +export using ::PFN_vkCmdDrawMultiEXT; +export using ::PFN_vkCmdDrawMultiIndexedEXT; + +//=== VK_EXT_opacity_micromap === +export using ::PFN_vkCreateMicromapEXT; +export using ::PFN_vkDestroyMicromapEXT; +export using ::PFN_vkCmdBuildMicromapsEXT; +export using ::PFN_vkBuildMicromapsEXT; +export using ::PFN_vkCopyMicromapEXT; +export using ::PFN_vkCopyMicromapToMemoryEXT; +export using ::PFN_vkCopyMemoryToMicromapEXT; +export using ::PFN_vkWriteMicromapsPropertiesEXT; +export using ::PFN_vkCmdCopyMicromapEXT; +export using ::PFN_vkCmdCopyMicromapToMemoryEXT; +export using ::PFN_vkCmdCopyMemoryToMicromapEXT; +export using ::PFN_vkCmdWriteMicromapsPropertiesEXT; +export using ::PFN_vkGetDeviceMicromapCompatibilityEXT; +export using ::PFN_vkGetMicromapBuildSizesEXT; + +//=== VK_HUAWEI_cluster_culling_shader === +export using ::PFN_vkCmdDrawClusterHUAWEI; +export using ::PFN_vkCmdDrawClusterIndirectHUAWEI; + +//=== VK_EXT_pageable_device_local_memory === +export using ::PFN_vkSetDeviceMemoryPriorityEXT; + +//=== VK_KHR_maintenance4 === +export using ::PFN_vkGetDeviceBufferMemoryRequirementsKHR; +export using ::PFN_vkGetDeviceImageMemoryRequirementsKHR; +export using ::PFN_vkGetDeviceImageSparseMemoryRequirementsKHR; + +//=== VK_VALVE_descriptor_set_host_mapping === +export using ::PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE; +export using ::PFN_vkGetDescriptorSetHostMappingVALVE; + +//=== VK_NV_copy_memory_indirect === +export using ::PFN_vkCmdCopyMemoryIndirectNV; +export using ::PFN_vkCmdCopyMemoryToImageIndirectNV; + +//=== VK_NV_memory_decompression === +export using ::PFN_vkCmdDecompressMemoryNV; +export using ::PFN_vkCmdDecompressMemoryIndirectCountNV; + +//=== VK_NV_device_generated_commands_compute === +export using ::PFN_vkGetPipelineIndirectMemoryRequirementsNV; +export using ::PFN_vkCmdUpdatePipelineIndirectBufferNV; +export using ::PFN_vkGetPipelineIndirectDeviceAddressNV; + +//=== VK_EXT_extended_dynamic_state3 === +export using ::PFN_vkCmdSetDepthClampEnableEXT; +export using ::PFN_vkCmdSetPolygonModeEXT; +export using ::PFN_vkCmdSetRasterizationSamplesEXT; +export using ::PFN_vkCmdSetSampleMaskEXT; +export using ::PFN_vkCmdSetAlphaToCoverageEnableEXT; +export using ::PFN_vkCmdSetAlphaToOneEnableEXT; +export using ::PFN_vkCmdSetLogicOpEnableEXT; +export using ::PFN_vkCmdSetColorBlendEnableEXT; +export using ::PFN_vkCmdSetColorBlendEquationEXT; +export using ::PFN_vkCmdSetColorWriteMaskEXT; +export using ::PFN_vkCmdSetTessellationDomainOriginEXT; +export using ::PFN_vkCmdSetRasterizationStreamEXT; +export using ::PFN_vkCmdSetConservativeRasterizationModeEXT; +export using ::PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT; +export using ::PFN_vkCmdSetDepthClipEnableEXT; +export using ::PFN_vkCmdSetSampleLocationsEnableEXT; +export using ::PFN_vkCmdSetColorBlendAdvancedEXT; +export using ::PFN_vkCmdSetProvokingVertexModeEXT; +export using ::PFN_vkCmdSetLineRasterizationModeEXT; +export using ::PFN_vkCmdSetLineStippleEnableEXT; +export using ::PFN_vkCmdSetDepthClipNegativeOneToOneEXT; +export using ::PFN_vkCmdSetViewportWScalingEnableNV; +export using ::PFN_vkCmdSetViewportSwizzleNV; +export using ::PFN_vkCmdSetCoverageToColorEnableNV; +export using ::PFN_vkCmdSetCoverageToColorLocationNV; +export using ::PFN_vkCmdSetCoverageModulationModeNV; +export using ::PFN_vkCmdSetCoverageModulationTableEnableNV; +export using ::PFN_vkCmdSetCoverageModulationTableNV; +export using ::PFN_vkCmdSetShadingRateImageEnableNV; +export using ::PFN_vkCmdSetRepresentativeFragmentTestEnableNV; +export using ::PFN_vkCmdSetCoverageReductionModeNV; + +//=== VK_ARM_tensors === +export using ::PFN_vkCreateTensorARM; +export using ::PFN_vkDestroyTensorARM; +export using ::PFN_vkCreateTensorViewARM; +export using ::PFN_vkDestroyTensorViewARM; +export using ::PFN_vkGetTensorMemoryRequirementsARM; +export using ::PFN_vkBindTensorMemoryARM; +export using ::PFN_vkGetDeviceTensorMemoryRequirementsARM; +export using ::PFN_vkCmdCopyTensorARM; +export using ::PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM; +export using ::PFN_vkGetTensorOpaqueCaptureDescriptorDataARM; +export using ::PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM; + +//=== VK_EXT_shader_module_identifier === +export using ::PFN_vkGetShaderModuleIdentifierEXT; +export using ::PFN_vkGetShaderModuleCreateInfoIdentifierEXT; + +//=== VK_NV_optical_flow === +export using ::PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV; +export using ::PFN_vkCreateOpticalFlowSessionNV; +export using ::PFN_vkDestroyOpticalFlowSessionNV; +export using ::PFN_vkBindOpticalFlowSessionImageNV; +export using ::PFN_vkCmdOpticalFlowExecuteNV; + +//=== VK_KHR_maintenance5 === +export using ::PFN_vkCmdBindIndexBuffer2KHR; +export using ::PFN_vkGetRenderingAreaGranularityKHR; +export using ::PFN_vkGetDeviceImageSubresourceLayoutKHR; +export using ::PFN_vkGetImageSubresourceLayout2KHR; + +//=== VK_AMD_anti_lag === +export using ::PFN_vkAntiLagUpdateAMD; + +//=== VK_KHR_present_wait2 === +export using ::PFN_vkWaitForPresent2KHR; + +//=== VK_EXT_shader_object === +export using ::PFN_vkCreateShadersEXT; +export using ::PFN_vkDestroyShaderEXT; +export using ::PFN_vkGetShaderBinaryDataEXT; +export using ::PFN_vkCmdBindShadersEXT; +export using ::PFN_vkCmdSetDepthClampRangeEXT; + +//=== VK_KHR_pipeline_binary === +export using ::PFN_vkCreatePipelineBinariesKHR; +export using ::PFN_vkDestroyPipelineBinaryKHR; +export using ::PFN_vkGetPipelineKeyKHR; +export using ::PFN_vkGetPipelineBinaryDataKHR; +export using ::PFN_vkReleaseCapturedPipelineDataKHR; + +//=== VK_QCOM_tile_properties === +export using ::PFN_vkGetFramebufferTilePropertiesQCOM; +export using ::PFN_vkGetDynamicRenderingTilePropertiesQCOM; + +//=== VK_KHR_swapchain_maintenance1 === +export using ::PFN_vkReleaseSwapchainImagesKHR; + +//=== VK_NV_cooperative_vector === +export using ::PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV; +export using ::PFN_vkConvertCooperativeVectorMatrixNV; +export using ::PFN_vkCmdConvertCooperativeVectorMatrixNV; + +//=== VK_NV_low_latency2 === +export using ::PFN_vkSetLatencySleepModeNV; +export using ::PFN_vkLatencySleepNV; +export using ::PFN_vkSetLatencyMarkerNV; +export using ::PFN_vkGetLatencyTimingsNV; +export using ::PFN_vkQueueNotifyOutOfBandNV; + +//=== VK_KHR_cooperative_matrix === +export using ::PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR; + +//=== VK_ARM_data_graph === +export using ::PFN_vkCreateDataGraphPipelinesARM; +export using ::PFN_vkCreateDataGraphPipelineSessionARM; +export using ::PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM; +export using ::PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM; +export using ::PFN_vkBindDataGraphPipelineSessionMemoryARM; +export using ::PFN_vkDestroyDataGraphPipelineSessionARM; +export using ::PFN_vkCmdDispatchDataGraphARM; +export using ::PFN_vkGetDataGraphPipelineAvailablePropertiesARM; +export using ::PFN_vkGetDataGraphPipelinePropertiesARM; +export using ::PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM; +export using ::PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM; + +//=== VK_EXT_attachment_feedback_loop_dynamic_state === +export using ::PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) +//=== VK_QNX_external_memory_screen_buffer === +export using ::PFN_vkGetScreenBufferPropertiesQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +//=== VK_KHR_line_rasterization === +export using ::PFN_vkCmdSetLineStippleKHR; + +//=== VK_KHR_calibrated_timestamps === +export using ::PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR; +export using ::PFN_vkGetCalibratedTimestampsKHR; + +//=== VK_KHR_maintenance6 === +export using ::PFN_vkCmdBindDescriptorSets2KHR; +export using ::PFN_vkCmdPushConstants2KHR; +export using ::PFN_vkCmdPushDescriptorSet2KHR; +export using ::PFN_vkCmdPushDescriptorSetWithTemplate2KHR; +export using ::PFN_vkCmdSetDescriptorBufferOffsets2EXT; +export using ::PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT; + +//=== VK_QCOM_tile_memory_heap === +export using ::PFN_vkCmdBindTileMemoryQCOM; + +//=== VK_NV_external_compute_queue === +export using ::PFN_vkCreateExternalComputeQueueNV; +export using ::PFN_vkDestroyExternalComputeQueueNV; +export using ::PFN_vkGetExternalComputeQueueDataNV; + +//=== VK_NV_cluster_acceleration_structure === +export using ::PFN_vkGetClusterAccelerationStructureBuildSizesNV; +export using ::PFN_vkCmdBuildClusterAccelerationStructureIndirectNV; + +//=== VK_NV_partitioned_acceleration_structure === +export using ::PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV; +export using ::PFN_vkCmdBuildPartitionedAccelerationStructuresNV; + +//=== VK_EXT_device_generated_commands === +export using ::PFN_vkGetGeneratedCommandsMemoryRequirementsEXT; +export using ::PFN_vkCmdPreprocessGeneratedCommandsEXT; +export using ::PFN_vkCmdExecuteGeneratedCommandsEXT; +export using ::PFN_vkCreateIndirectCommandsLayoutEXT; +export using ::PFN_vkDestroyIndirectCommandsLayoutEXT; +export using ::PFN_vkCreateIndirectExecutionSetEXT; +export using ::PFN_vkDestroyIndirectExecutionSetEXT; +export using ::PFN_vkUpdateIndirectExecutionSetPipelineEXT; +export using ::PFN_vkUpdateIndirectExecutionSetShaderEXT; + +#if defined( VK_USE_PLATFORM_OHOS ) +//=== VK_OHOS_surface === +export using ::PFN_vkCreateSurfaceOHOS; +#endif /*VK_USE_PLATFORM_OHOS*/ + +//=== VK_NV_cooperative_matrix2 === +export using ::PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) +//=== VK_EXT_external_memory_metal === +export using ::PFN_vkGetMemoryMetalHandleEXT; +export using ::PFN_vkGetMemoryMetalHandlePropertiesEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +//=== VK_EXT_fragment_density_map_offset === +export using ::PFN_vkCmdEndRendering2EXT; diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.h new file mode 100644 index 0000000000..9457a520d8 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.h @@ -0,0 +1,103 @@ +#ifndef VULKAN_H_ +#define VULKAN_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +#include "vk_platform.h" +#include "vulkan_core.h" + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +#include "vulkan_android.h" +#endif + +#ifdef VK_USE_PLATFORM_FUCHSIA +#include +#include "vulkan_fuchsia.h" +#endif + +#ifdef VK_USE_PLATFORM_IOS_MVK +#include "vulkan_ios.h" +#endif + + +#ifdef VK_USE_PLATFORM_MACOS_MVK +#include "vulkan_macos.h" +#endif + +#ifdef VK_USE_PLATFORM_METAL_EXT +#include "vulkan_metal.h" +#endif + +#ifdef VK_USE_PLATFORM_VI_NN +#include "vulkan_vi.h" +#endif + + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +#include "vulkan_wayland.h" +#endif + + +#ifdef VK_USE_PLATFORM_WIN32_KHR +#include +#include "vulkan_win32.h" +#endif + + +#ifdef VK_USE_PLATFORM_XCB_KHR +#include +#include "vulkan_xcb.h" +#endif + + +#ifdef VK_USE_PLATFORM_XLIB_KHR +#include +#include "vulkan_xlib.h" +#endif + + +#ifdef VK_USE_PLATFORM_DIRECTFB_EXT +#include +#include "vulkan_directfb.h" +#endif + + +#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT +#include +#include +#include "vulkan_xlib_xrandr.h" +#endif + + +#ifdef VK_USE_PLATFORM_GGP +#include +#include "vulkan_ggp.h" +#endif + + +#ifdef VK_USE_PLATFORM_SCREEN_QNX +#include +#include "vulkan_screen.h" +#endif + + +#ifdef VK_USE_PLATFORM_SCI +#include +#include +#include "vulkan_sci.h" +#endif + + +#ifdef VK_ENABLE_BETA_EXTENSIONS +#include "vulkan_beta.h" +#endif + +#ifdef VK_USE_PLATFORM_OHOS +#include "vulkan_ohos.h" +#endif + +#endif // VULKAN_H_ diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.hpp new file mode 100644 index 0000000000..ad99c72def --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan.hpp @@ -0,0 +1,23460 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_HPP +#define VULKAN_HPP + +#include + +#if defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) +# include +# include +import VULKAN_HPP_STD_MODULE; +#else +# include +# include // ArrayWrapperND +# include +# include // strnlen +# include // std::string +# include // std::exchange +# if 17 <= VULKAN_HPP_CPP_VERSION +# include +# endif +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) +# include // std::tie +# include // std::vector +# endif +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) +# include +# endif +# if !defined( VULKAN_HPP_NO_EXCEPTIONS ) +# include // std::is_error_code_enum +# endif +# if defined( VULKAN_HPP_SUPPORT_SPAN ) +# include +# endif +#endif +#include + +#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL == 1 +# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) +# include +# elif defined( _WIN32 ) && !defined( VULKAN_HPP_NO_WIN32_PROTOTYPES ) +using HINSTANCE = struct HINSTANCE__ *; +# if defined( _WIN64 ) +using FARPROC = int64_t( __stdcall * )(); +# else +using FARPROC = int( __stdcall * )(); +# endif +extern "C" __declspec( dllimport ) HINSTANCE __stdcall LoadLibraryA( char const * lpLibFileName ); +extern "C" __declspec( dllimport ) int __stdcall FreeLibrary( HINSTANCE hLibModule ); +extern "C" __declspec( dllimport ) FARPROC __stdcall GetProcAddress( HINSTANCE hModule, const char * lpProcName ); +# endif +#endif + +static_assert( VK_HEADER_VERSION == 321, "Wrong VK_HEADER_VERSION!" ); + +// includes through some other header +// this results in major(x) being resolved to gnu_dev_major(x) +// which is an expression in a constructor initializer list. +#if defined( major ) +# undef major +#endif +#if defined( minor ) +# undef minor +#endif + +// Windows defines MemoryBarrier which is deprecated and collides +// with the VULKAN_HPP_NAMESPACE::MemoryBarrier struct. +#if defined( MemoryBarrier ) +# undef MemoryBarrier +#endif + +// XLib.h defines True/False, which collides with our VULKAN_HPP_NAMESPACE::True/VULKAN_HPP_NAMESPACE::False +// -> undef them and provide some namepace-secure constexpr +#if defined( True ) +# undef True +constexpr int True = 1; +#endif +#if defined( False ) +# undef False +constexpr int False = 0; +#endif + +namespace VULKAN_HPP_NAMESPACE +{ + template + class ArrayWrapper1D : public std::array + { + public: + VULKAN_HPP_CONSTEXPR ArrayWrapper1D() VULKAN_HPP_NOEXCEPT : std::array() {} + + VULKAN_HPP_CONSTEXPR ArrayWrapper1D( std::array const & data ) VULKAN_HPP_NOEXCEPT : std::array( data ) {} + + template ::value, int>::type = 0> + VULKAN_HPP_CONSTEXPR_14 ArrayWrapper1D( std::string const & data ) VULKAN_HPP_NOEXCEPT + { + copy( data.data(), data.length() ); + } + +#if 17 <= VULKAN_HPP_CPP_VERSION + template ::value, int>::type = 0> + VULKAN_HPP_CONSTEXPR_14 ArrayWrapper1D( std::string_view data ) VULKAN_HPP_NOEXCEPT + { + copy( data.data(), data.length() ); + } +#endif + +#if ( VK_USE_64_BIT_PTR_DEFINES == 0 ) + // on 32 bit compiles, needs overloads on index type int to resolve ambiguities + VULKAN_HPP_CONSTEXPR T const & operator[]( int index ) const VULKAN_HPP_NOEXCEPT + { + return std::array::operator[]( index ); + } + + T & operator[]( int index ) VULKAN_HPP_NOEXCEPT + { + return std::array::operator[]( index ); + } +#endif + + operator T const *() const VULKAN_HPP_NOEXCEPT + { + return this->data(); + } + + operator T *() VULKAN_HPP_NOEXCEPT + { + return this->data(); + } + + template ::value, int>::type = 0> + operator std::string() const + { + return std::string( this->data(), strnlen( this->data(), N ) ); + } + +#if 17 <= VULKAN_HPP_CPP_VERSION + template ::value, int>::type = 0> + operator std::string_view() const + { + return std::string_view( this->data(), strnlen( this->data(), N ) ); + } +#endif + + private: + VULKAN_HPP_CONSTEXPR_14 void copy( char const * data, size_t len ) VULKAN_HPP_NOEXCEPT + { + size_t n = ( std::min )( N - 1, len ); + for ( size_t i = 0; i < n; ++i ) + { + ( *this )[i] = data[i]; + } + ( *this )[n] = 0; + } + }; + +// relational operators between ArrayWrapper1D of chars with potentially different sizes +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + template + std::strong_ordering operator<=>( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + int result = strcmp( lhs.data(), rhs.data() ); + return ( result < 0 ) ? std::strong_ordering::less : ( ( result > 0 ) ? std::strong_ordering::greater : std::strong_ordering::equal ); + } +#else + template + bool operator<( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return strcmp( lhs.data(), rhs.data() ) < 0; + } + + template + bool operator<=( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return strcmp( lhs.data(), rhs.data() ) <= 0; + } + + template + bool operator>( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return strcmp( lhs.data(), rhs.data() ) > 0; + } + + template + bool operator>=( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return strcmp( lhs.data(), rhs.data() ) >= 0; + } +#endif + + template + bool operator==( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return strcmp( lhs.data(), rhs.data() ) == 0; + } + + template + bool operator!=( ArrayWrapper1D const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return strcmp( lhs.data(), rhs.data() ) != 0; + } + +// specialization of relational operators between std::string and arrays of chars +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + template + std::strong_ordering operator<=>( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs <=> rhs.data(); + } +#else + template + bool operator<( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs < rhs.data(); + } + + template + bool operator<=( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs <= rhs.data(); + } + + template + bool operator>( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs > rhs.data(); + } + + template + bool operator>=( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs >= rhs.data(); + } +#endif + + template + bool operator==( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs == rhs.data(); + } + + template + bool operator!=( std::string const & lhs, ArrayWrapper1D const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs != rhs.data(); + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + template + std::strong_ordering operator<=>( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() <=> rhs; + } +#else + template + bool operator<( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() < rhs; + } + + template + bool operator<=( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() <= rhs; + } + + template + bool operator>( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() > rhs; + } + + template + bool operator>=( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() >= rhs; + } +#endif + + template + bool operator==( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() == rhs; + } + + template + bool operator!=( ArrayWrapper1D const & lhs, std::string const & rhs ) VULKAN_HPP_NOEXCEPT + { + return lhs.data() != rhs; + } + + template + class ArrayWrapper2D : public std::array, N> + { + public: + VULKAN_HPP_CONSTEXPR ArrayWrapper2D() VULKAN_HPP_NOEXCEPT : std::array, N>() {} + + VULKAN_HPP_CONSTEXPR ArrayWrapper2D( std::array, N> const & data ) VULKAN_HPP_NOEXCEPT + : std::array, N>( *reinterpret_cast, N> const *>( &data ) ) + { + } + }; + +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + class ArrayProxy + { + public: + VULKAN_HPP_CONSTEXPR ArrayProxy() VULKAN_HPP_NOEXCEPT + : m_count( 0 ) + , m_ptr( nullptr ) + { + } + + VULKAN_HPP_CONSTEXPR ArrayProxy( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + : m_count( 0 ) + , m_ptr( nullptr ) + { + } + + ArrayProxy( T const & value ) VULKAN_HPP_NOEXCEPT + : m_count( 1 ) + , m_ptr( &value ) + { + } + + ArrayProxy( uint32_t count, T const * ptr ) VULKAN_HPP_NOEXCEPT + : m_count( count ) + , m_ptr( ptr ) + { + } + + template + ArrayProxy( T const ( &ptr )[C] ) VULKAN_HPP_NOEXCEPT + : m_count( C ) + , m_ptr( ptr ) + { + } + +# if __GNUC__ >= 9 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Winit-list-lifetime" +# endif + + ArrayProxy( std::initializer_list const & list ) VULKAN_HPP_NOEXCEPT + : m_count( static_cast( list.size() ) ) + , m_ptr( list.begin() ) + { + } + + template ::value, int>::type = 0> + ArrayProxy( std::initializer_list::type> const & list ) VULKAN_HPP_NOEXCEPT + : m_count( static_cast( list.size() ) ) + , m_ptr( list.begin() ) + { + } + +# if __GNUC__ >= 9 +# pragma GCC diagnostic pop +# endif + + // Any type with a .data() return type implicitly convertible to T*, and a .size() return type implicitly + // convertible to size_t. The const version can capture temporaries, with lifetime ending at end of statement. + template ().data() ), T *>::value && + std::is_convertible().size() ), std::size_t>::value>::type * = nullptr> + ArrayProxy( V const & v ) VULKAN_HPP_NOEXCEPT + : m_count( static_cast( v.size() ) ) + , m_ptr( v.data() ) + { + } + + const T * begin() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + const T * end() const VULKAN_HPP_NOEXCEPT + { + return m_ptr + m_count; + } + + const T & front() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_count && m_ptr ); + return *m_ptr; + } + + const T & back() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_count && m_ptr ); + return *( m_ptr + m_count - 1 ); + } + + bool empty() const VULKAN_HPP_NOEXCEPT + { + return ( m_count == 0 ); + } + + uint32_t size() const VULKAN_HPP_NOEXCEPT + { + return m_count; + } + + T const * data() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + private: + uint32_t m_count; + T const * m_ptr; + }; + + template + class ArrayProxyNoTemporaries + { + public: + VULKAN_HPP_CONSTEXPR ArrayProxyNoTemporaries() VULKAN_HPP_NOEXCEPT + : m_count( 0 ) + , m_ptr( nullptr ) + { + } + + VULKAN_HPP_CONSTEXPR ArrayProxyNoTemporaries( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + : m_count( 0 ) + , m_ptr( nullptr ) + { + } + + template ::value && std::is_lvalue_reference::value, int>::type = 0> + ArrayProxyNoTemporaries( B && value ) VULKAN_HPP_NOEXCEPT + : m_count( 1 ) + , m_ptr( &value ) + { + } + + ArrayProxyNoTemporaries( uint32_t count, T * ptr ) VULKAN_HPP_NOEXCEPT + : m_count( count ) + , m_ptr( ptr ) + { + } + + template + ArrayProxyNoTemporaries( T ( &ptr )[C] ) VULKAN_HPP_NOEXCEPT + : m_count( C ) + , m_ptr( ptr ) + { + } + + template + ArrayProxyNoTemporaries( T ( &&ptr )[C] ) = delete; + + // Any l-value reference with a .data() return type implicitly convertible to T*, and a .size() return type implicitly convertible to size_t. + template ().begin() ), T *>::value && + std::is_convertible().data() ), T *>::value && + std::is_convertible().size() ), std::size_t>::value && std::is_lvalue_reference::value, + int>::type = 0> + ArrayProxyNoTemporaries( V && v ) VULKAN_HPP_NOEXCEPT + : m_count( static_cast( v.size() ) ) + , m_ptr( v.data() ) + { + } + + // Any l-value reference with a .begin() return type implicitly convertible to T*, and a .size() return type implicitly convertible to size_t. + template ().begin() ), T *>::value && + std::is_convertible().size() ), std::size_t>::value && std::is_lvalue_reference::value, + int>::type = 0> + ArrayProxyNoTemporaries( V && v ) VULKAN_HPP_NOEXCEPT + : m_count( static_cast( v.size() ) ) + , m_ptr( v.begin() ) + { + } + + const T * begin() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + const T * end() const VULKAN_HPP_NOEXCEPT + { + return m_ptr + m_count; + } + + const T & front() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_count && m_ptr ); + return *m_ptr; + } + + const T & back() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_count && m_ptr ); + return *( m_ptr + m_count - 1 ); + } + + bool empty() const VULKAN_HPP_NOEXCEPT + { + return ( m_count == 0 ); + } + + uint32_t size() const VULKAN_HPP_NOEXCEPT + { + return m_count; + } + + T * data() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + private: + uint32_t m_count; + T * m_ptr; + }; + + template + class StridedArrayProxy : protected ArrayProxy + { + public: + using ArrayProxy::ArrayProxy; + + StridedArrayProxy( uint32_t count, T const * ptr, uint32_t stride ) VULKAN_HPP_NOEXCEPT + : ArrayProxy( count, ptr ) + , m_stride( stride ) + { + VULKAN_HPP_ASSERT( sizeof( T ) <= stride ); + } + + using ArrayProxy::begin; + + const T * end() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( static_cast( begin() ) + size() * m_stride ); + } + + using ArrayProxy::front; + + const T & back() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( begin() && size() ); + return *reinterpret_cast( static_cast( begin() ) + ( size() - 1 ) * m_stride ); + } + + using ArrayProxy::empty; + using ArrayProxy::size; + using ArrayProxy::data; + + uint32_t stride() const + { + return m_stride; + } + + private: + uint32_t m_stride = sizeof( T ); + }; + + template + class Optional + { + public: + Optional( RefType & reference ) VULKAN_HPP_NOEXCEPT + { + m_ptr = &reference; + } + + Optional( RefType * ptr ) VULKAN_HPP_NOEXCEPT + { + m_ptr = ptr; + } + + Optional( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_ptr = nullptr; + } + + operator RefType *() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + RefType const * operator->() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + RefType const * get() const VULKAN_HPP_NOEXCEPT + { + return m_ptr; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return !!m_ptr; + } + + private: + RefType * m_ptr; + }; + + template + struct StructExtends + { + enum + { + value = false + }; + }; + + template + struct IsPartOfStructureChain + { + static const bool valid = false; + }; + + template + struct IsPartOfStructureChain + { + static const bool valid = std::is_same::value || IsPartOfStructureChain::valid; + }; + + template + struct StructureChainContains + { + static const bool value = std::is_same>::type>::value || + StructureChainContains::value; + }; + + template + struct StructureChainContains<0, T, ChainElements...> + { + static const bool value = std::is_same>::type>::value; + }; + + template + struct StructureChainValidation + { + using TestType = typename std::tuple_element>::type; + static const bool valid = StructExtends>::type>::value && + ( TestType::allowDuplicate || !StructureChainContains::value ) && + StructureChainValidation::valid; + }; + + template + struct StructureChainValidation<0, ChainElements...> + { + static const bool valid = true; + }; + + template + class StructureChain : public std::tuple + { + // Note: StructureChain has no move constructor or move assignment operator, as it is not supposed to contain movable containers. + // In order to get a copy-operation on a move-operations, those functions are neither deleted nor defaulted. + public: + StructureChain() VULKAN_HPP_NOEXCEPT + { + static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); + link(); + } + + StructureChain( StructureChain const & rhs ) VULKAN_HPP_NOEXCEPT : std::tuple( rhs ) + { + static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); + link( &std::get<0>( *this ), + &std::get<0>( rhs ), + reinterpret_cast( &std::get<0>( *this ) ), + reinterpret_cast( &std::get<0>( rhs ) ) ); + } + + StructureChain( ChainElements const &... elems ) VULKAN_HPP_NOEXCEPT : std::tuple( elems... ) + { + static_assert( StructureChainValidation::valid, "The structure chain is not valid!" ); + link(); + } + + StructureChain & operator=( StructureChain const & rhs ) VULKAN_HPP_NOEXCEPT + { + std::tuple::operator=( rhs ); + link( &std::get<0>( *this ), + &std::get<0>( rhs ), + reinterpret_cast( &std::get<0>( *this ) ), + reinterpret_cast( &std::get<0>( rhs ) ) ); + return *this; + } + + template >::type, size_t Which = 0> + T & get() VULKAN_HPP_NOEXCEPT + { + return std::get::value>( static_cast &>( *this ) ); + } + + template >::type, size_t Which = 0> + T const & get() const VULKAN_HPP_NOEXCEPT + { + return std::get::value>( static_cast const &>( *this ) ); + } + + template + std::tuple get() VULKAN_HPP_NOEXCEPT + { + return std::tie( get(), get(), get()... ); + } + + template + std::tuple get() const VULKAN_HPP_NOEXCEPT + { + return std::tie( get(), get(), get()... ); + } + + // assign a complete structure to the StructureChain without modifying the chaining + template >::type, size_t Which = 0> + StructureChain & assign( const T & rhs ) VULKAN_HPP_NOEXCEPT + { + T & lhs = get(); + auto pNext = lhs.pNext; + lhs = rhs; + lhs.pNext = pNext; + return *this; + } + + template + typename std::enable_if>::type>::value && ( Which == 0 ), bool>::type + isLinked() const VULKAN_HPP_NOEXCEPT + { + return true; + } + + template + typename std::enable_if>::type>::value || ( Which != 0 ), bool>::type + isLinked() const VULKAN_HPP_NOEXCEPT + { + static_assert( IsPartOfStructureChain::valid, "Can't unlink Structure that's not part of this StructureChain!" ); + return isLinked( reinterpret_cast( &get() ) ); + } + + template + typename std::enable_if>::type>::value || ( Which != 0 ), void>::type + relink() VULKAN_HPP_NOEXCEPT + { + static_assert( IsPartOfStructureChain::valid, "Can't relink Structure that's not part of this StructureChain!" ); + auto pNext = reinterpret_cast( &get() ); + VULKAN_HPP_ASSERT( !isLinked( pNext ) ); + auto & headElement = std::get<0>( static_cast &>( *this ) ); + pNext->pNext = reinterpret_cast( headElement.pNext ); + headElement.pNext = pNext; + } + + template + typename std::enable_if>::type>::value || ( Which != 0 ), void>::type + unlink() VULKAN_HPP_NOEXCEPT + { + static_assert( IsPartOfStructureChain::valid, "Can't unlink Structure that's not part of this StructureChain!" ); + unlink( reinterpret_cast( &get() ) ); + } + + private: + template + struct ChainElementIndex : ChainElementIndex + { + }; + + template + struct ChainElementIndex::value, void>::type, First, Types...> + : ChainElementIndex + { + }; + + template + struct ChainElementIndex::value, void>::type, First, Types...> + : ChainElementIndex + { + }; + + template + struct ChainElementIndex::value, void>::type, First, Types...> + : std::integral_constant + { + }; + + bool isLinked( VkBaseInStructure const * pNext ) const VULKAN_HPP_NOEXCEPT + { + VkBaseInStructure const * elementPtr = + reinterpret_cast( &std::get<0>( static_cast const &>( *this ) ) ); + while ( elementPtr ) + { + if ( elementPtr->pNext == pNext ) + { + return true; + } + elementPtr = elementPtr->pNext; + } + return false; + } + + template + typename std::enable_if::type link() VULKAN_HPP_NOEXCEPT + { + auto & x = std::get( static_cast &>( *this ) ); + x.pNext = &std::get( static_cast &>( *this ) ); + link(); + } + + template + typename std::enable_if::type link() VULKAN_HPP_NOEXCEPT + { + } + + void link( void * dstBase, void const * srcBase, VkBaseOutStructure * dst, VkBaseInStructure const * src ) + { + while ( src->pNext ) + { + std::ptrdiff_t offset = reinterpret_cast( src->pNext ) - reinterpret_cast( srcBase ); + dst->pNext = reinterpret_cast( reinterpret_cast( dstBase ) + offset ); + dst = dst->pNext; + src = src->pNext; + } + dst->pNext = nullptr; + } + + void unlink( VkBaseOutStructure const * pNext ) VULKAN_HPP_NOEXCEPT + { + VkBaseOutStructure * elementPtr = reinterpret_cast( &std::get<0>( static_cast &>( *this ) ) ); + while ( elementPtr && ( elementPtr->pNext != pNext ) ) + { + elementPtr = elementPtr->pNext; + } + if ( elementPtr ) + { + elementPtr->pNext = pNext->pNext; + } + else + { + VULKAN_HPP_ASSERT( false ); // fires, if the ClassType member has already been unlinked ! + } + } + }; + + // interupt the VULKAN_HPP_NAMESPACE for a moment to add specializations of std::tuple_size and std::tuple_element for the StructureChain! +} + +namespace std +{ + template + struct tuple_size> + { + static constexpr size_t value = std::tuple_size>::value; + }; + + template + struct tuple_element> + { + using type = typename std::tuple_element>::type; + }; +} // namespace std + +namespace VULKAN_HPP_NAMESPACE +{ + +# if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + template + class UniqueHandleTraits; + + template + class UniqueHandle : public UniqueHandleTraits::deleter + { + private: + using Deleter = typename UniqueHandleTraits::deleter; + + public: + using element_type = Type; + + UniqueHandle() : Deleter(), m_value() {} + + explicit UniqueHandle( Type const & value, Deleter const & deleter = Deleter() ) VULKAN_HPP_NOEXCEPT + : Deleter( deleter ) + , m_value( value ) + { + } + + UniqueHandle( UniqueHandle const & ) = delete; + + UniqueHandle( UniqueHandle && other ) VULKAN_HPP_NOEXCEPT + : Deleter( std::move( static_cast( other ) ) ) + , m_value( other.release() ) + { + } + + ~UniqueHandle() VULKAN_HPP_NOEXCEPT + { + if ( m_value ) + { + this->destroy( m_value ); + } + } + + UniqueHandle & operator=( UniqueHandle const & ) = delete; + + UniqueHandle & operator=( UniqueHandle && other ) VULKAN_HPP_NOEXCEPT + { + reset( other.release() ); + *static_cast( this ) = std::move( static_cast( other ) ); + return *this; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_value.operator bool(); + } + +# if defined( VULKAN_HPP_SMART_HANDLE_IMPLICIT_CAST ) + operator Type() const VULKAN_HPP_NOEXCEPT + { + return m_value; + } +# endif + + Type const * operator->() const VULKAN_HPP_NOEXCEPT + { + return &m_value; + } + + Type * operator->() VULKAN_HPP_NOEXCEPT + { + return &m_value; + } + + Type const & operator*() const VULKAN_HPP_NOEXCEPT + { + return m_value; + } + + Type & operator*() VULKAN_HPP_NOEXCEPT + { + return m_value; + } + + const Type & get() const VULKAN_HPP_NOEXCEPT + { + return m_value; + } + + Type & get() VULKAN_HPP_NOEXCEPT + { + return m_value; + } + + void reset( Type const & value = Type() ) VULKAN_HPP_NOEXCEPT + { + if ( m_value != value ) + { + if ( m_value ) + { + this->destroy( m_value ); + } + m_value = value; + } + } + + Type release() VULKAN_HPP_NOEXCEPT + { + Type value = m_value; + m_value = nullptr; + return value; + } + + void swap( UniqueHandle & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_value, rhs.m_value ); + std::swap( static_cast( *this ), static_cast( rhs ) ); + } + + private: + Type m_value; + }; + + template + VULKAN_HPP_INLINE std::vector uniqueToRaw( std::vector const & handles ) + { + std::vector newBuffer( handles.size() ); + std::transform( handles.begin(), handles.end(), newBuffer.begin(), []( UniqueType const & handle ) { return handle.get(); } ); + return newBuffer; + } + + template + VULKAN_HPP_INLINE void swap( UniqueHandle & lhs, UniqueHandle & rhs ) VULKAN_HPP_NOEXCEPT + { + lhs.swap( rhs ); + } +# endif +#endif // VULKAN_HPP_DISABLE_ENHANCED_MODE + + namespace detail + { + class DispatchLoaderBase + { + public: + DispatchLoaderBase() = default; + DispatchLoaderBase( std::nullptr_t ) +#if !defined( NDEBUG ) + : m_valid( false ) +#endif + { + } + +#if !defined( NDEBUG ) + size_t getVkHeaderVersion() const + { + VULKAN_HPP_ASSERT( m_valid ); + return vkHeaderVersion; + } + + private: + size_t vkHeaderVersion = VK_HEADER_VERSION; + bool m_valid = true; +#endif + }; + +#if !defined( VK_NO_PROTOTYPES ) || ( defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC ) && ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 0 ) ) + class DispatchLoaderStatic : public DispatchLoaderBase + { + public: + //=== VK_VERSION_1_0 === + + VkResult + vkCreateInstance( const VkInstanceCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkInstance * pInstance ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateInstance( pCreateInfo, pAllocator, pInstance ); + } + + void vkDestroyInstance( VkInstance instance, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyInstance( instance, pAllocator ); + } + + VkResult vkEnumeratePhysicalDevices( VkInstance instance, uint32_t * pPhysicalDeviceCount, VkPhysicalDevice * pPhysicalDevices ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumeratePhysicalDevices( instance, pPhysicalDeviceCount, pPhysicalDevices ); + } + + void vkGetPhysicalDeviceFeatures( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures * pFeatures ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFeatures( physicalDevice, pFeatures ); + } + + void vkGetPhysicalDeviceFormatProperties( VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties * pFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFormatProperties( physicalDevice, format, pFormatProperties ); + } + + VkResult vkGetPhysicalDeviceImageFormatProperties( VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkImageFormatProperties * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceImageFormatProperties( physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties ); + } + + void vkGetPhysicalDeviceProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceProperties( physicalDevice, pProperties ); + } + + void vkGetPhysicalDeviceQueueFamilyProperties( VkPhysicalDevice physicalDevice, + uint32_t * pQueueFamilyPropertyCount, + VkQueueFamilyProperties * pQueueFamilyProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceQueueFamilyProperties( physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties ); + } + + void vkGetPhysicalDeviceMemoryProperties( VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties * pMemoryProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceMemoryProperties( physicalDevice, pMemoryProperties ); + } + + PFN_vkVoidFunction vkGetInstanceProcAddr( VkInstance instance, const char * pName ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetInstanceProcAddr( instance, pName ); + } + + PFN_vkVoidFunction vkGetDeviceProcAddr( VkDevice device, const char * pName ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceProcAddr( device, pName ); + } + + VkResult vkCreateDevice( VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDevice * pDevice ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDevice( physicalDevice, pCreateInfo, pAllocator, pDevice ); + } + + void vkDestroyDevice( VkDevice device, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDevice( device, pAllocator ); + } + + VkResult vkEnumerateInstanceExtensionProperties( const char * pLayerName, + uint32_t * pPropertyCount, + VkExtensionProperties * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, pProperties ); + } + + VkResult vkEnumerateDeviceExtensionProperties( VkPhysicalDevice physicalDevice, + const char * pLayerName, + uint32_t * pPropertyCount, + VkExtensionProperties * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumerateDeviceExtensionProperties( physicalDevice, pLayerName, pPropertyCount, pProperties ); + } + + VkResult vkEnumerateInstanceLayerProperties( uint32_t * pPropertyCount, VkLayerProperties * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumerateInstanceLayerProperties( pPropertyCount, pProperties ); + } + + VkResult vkEnumerateDeviceLayerProperties( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkLayerProperties * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumerateDeviceLayerProperties( physicalDevice, pPropertyCount, pProperties ); + } + + void vkGetDeviceQueue( VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue * pQueue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceQueue( device, queueFamilyIndex, queueIndex, pQueue ); + } + + VkResult vkQueueSubmit( VkQueue queue, uint32_t submitCount, const VkSubmitInfo * pSubmits, VkFence fence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueSubmit( queue, submitCount, pSubmits, fence ); + } + + VkResult vkQueueWaitIdle( VkQueue queue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueWaitIdle( queue ); + } + + VkResult vkDeviceWaitIdle( VkDevice device ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDeviceWaitIdle( device ); + } + + VkResult vkAllocateMemory( VkDevice device, + const VkMemoryAllocateInfo * pAllocateInfo, + const VkAllocationCallbacks * pAllocator, + VkDeviceMemory * pMemory ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAllocateMemory( device, pAllocateInfo, pAllocator, pMemory ); + } + + void vkFreeMemory( VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkFreeMemory( device, memory, pAllocator ); + } + + VkResult vkMapMemory( VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void ** ppData ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkMapMemory( device, memory, offset, size, flags, ppData ); + } + + void vkUnmapMemory( VkDevice device, VkDeviceMemory memory ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUnmapMemory( device, memory ); + } + + VkResult vkFlushMappedMemoryRanges( VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange * pMemoryRanges ) const VULKAN_HPP_NOEXCEPT + { + return ::vkFlushMappedMemoryRanges( device, memoryRangeCount, pMemoryRanges ); + } + + VkResult vkInvalidateMappedMemoryRanges( VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange * pMemoryRanges ) const VULKAN_HPP_NOEXCEPT + { + return ::vkInvalidateMappedMemoryRanges( device, memoryRangeCount, pMemoryRanges ); + } + + void vkGetDeviceMemoryCommitment( VkDevice device, VkDeviceMemory memory, VkDeviceSize * pCommittedMemoryInBytes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceMemoryCommitment( device, memory, pCommittedMemoryInBytes ); + } + + VkResult vkBindBufferMemory( VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindBufferMemory( device, buffer, memory, memoryOffset ); + } + + VkResult vkBindImageMemory( VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindImageMemory( device, image, memory, memoryOffset ); + } + + void vkGetBufferMemoryRequirements( VkDevice device, VkBuffer buffer, VkMemoryRequirements * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferMemoryRequirements( device, buffer, pMemoryRequirements ); + } + + void vkGetImageMemoryRequirements( VkDevice device, VkImage image, VkMemoryRequirements * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageMemoryRequirements( device, image, pMemoryRequirements ); + } + + void vkGetImageSparseMemoryRequirements( VkDevice device, + VkImage image, + uint32_t * pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSparseMemoryRequirements( device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); + } + + void vkGetPhysicalDeviceSparseImageFormatProperties( VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkSampleCountFlagBits samples, + VkImageUsageFlags usage, + VkImageTiling tiling, + uint32_t * pPropertyCount, + VkSparseImageFormatProperties * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSparseImageFormatProperties( physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties ); + } + + VkResult vkQueueBindSparse( VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo * pBindInfo, VkFence fence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueBindSparse( queue, bindInfoCount, pBindInfo, fence ); + } + + VkResult vkCreateFence( VkDevice device, + const VkFenceCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkFence * pFence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateFence( device, pCreateInfo, pAllocator, pFence ); + } + + void vkDestroyFence( VkDevice device, VkFence fence, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyFence( device, fence, pAllocator ); + } + + VkResult vkResetFences( VkDevice device, uint32_t fenceCount, const VkFence * pFences ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetFences( device, fenceCount, pFences ); + } + + VkResult vkGetFenceStatus( VkDevice device, VkFence fence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetFenceStatus( device, fence ); + } + + VkResult vkWaitForFences( VkDevice device, uint32_t fenceCount, const VkFence * pFences, VkBool32 waitAll, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWaitForFences( device, fenceCount, pFences, waitAll, timeout ); + } + + VkResult vkCreateSemaphore( VkDevice device, + const VkSemaphoreCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSemaphore * pSemaphore ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSemaphore( device, pCreateInfo, pAllocator, pSemaphore ); + } + + void vkDestroySemaphore( VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroySemaphore( device, semaphore, pAllocator ); + } + + VkResult vkCreateEvent( VkDevice device, + const VkEventCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkEvent * pEvent ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateEvent( device, pCreateInfo, pAllocator, pEvent ); + } + + void vkDestroyEvent( VkDevice device, VkEvent event, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyEvent( device, event, pAllocator ); + } + + VkResult vkGetEventStatus( VkDevice device, VkEvent event ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetEventStatus( device, event ); + } + + VkResult vkSetEvent( VkDevice device, VkEvent event ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetEvent( device, event ); + } + + VkResult vkResetEvent( VkDevice device, VkEvent event ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetEvent( device, event ); + } + + VkResult vkCreateQueryPool( VkDevice device, + const VkQueryPoolCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkQueryPool * pQueryPool ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateQueryPool( device, pCreateInfo, pAllocator, pQueryPool ); + } + + void vkDestroyQueryPool( VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyQueryPool( device, queryPool, pAllocator ); + } + + VkResult vkGetQueryPoolResults( VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + void * pData, + VkDeviceSize stride, + VkQueryResultFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetQueryPoolResults( device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags ); + } + + VkResult vkCreateBuffer( VkDevice device, + const VkBufferCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkBuffer * pBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateBuffer( device, pCreateInfo, pAllocator, pBuffer ); + } + + void vkDestroyBuffer( VkDevice device, VkBuffer buffer, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyBuffer( device, buffer, pAllocator ); + } + + VkResult vkCreateBufferView( VkDevice device, + const VkBufferViewCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkBufferView * pView ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateBufferView( device, pCreateInfo, pAllocator, pView ); + } + + void vkDestroyBufferView( VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyBufferView( device, bufferView, pAllocator ); + } + + VkResult vkCreateImage( VkDevice device, + const VkImageCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkImage * pImage ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateImage( device, pCreateInfo, pAllocator, pImage ); + } + + void vkDestroyImage( VkDevice device, VkImage image, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyImage( device, image, pAllocator ); + } + + void vkGetImageSubresourceLayout( VkDevice device, + VkImage image, + const VkImageSubresource * pSubresource, + VkSubresourceLayout * pLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSubresourceLayout( device, image, pSubresource, pLayout ); + } + + VkResult vkCreateImageView( VkDevice device, + const VkImageViewCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkImageView * pView ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateImageView( device, pCreateInfo, pAllocator, pView ); + } + + void vkDestroyImageView( VkDevice device, VkImageView imageView, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyImageView( device, imageView, pAllocator ); + } + + VkResult vkCreateShaderModule( VkDevice device, + const VkShaderModuleCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkShaderModule * pShaderModule ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateShaderModule( device, pCreateInfo, pAllocator, pShaderModule ); + } + + void vkDestroyShaderModule( VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyShaderModule( device, shaderModule, pAllocator ); + } + + VkResult vkCreatePipelineCache( VkDevice device, + const VkPipelineCacheCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkPipelineCache * pPipelineCache ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreatePipelineCache( device, pCreateInfo, pAllocator, pPipelineCache ); + } + + void vkDestroyPipelineCache( VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyPipelineCache( device, pipelineCache, pAllocator ); + } + + VkResult vkGetPipelineCacheData( VkDevice device, VkPipelineCache pipelineCache, size_t * pDataSize, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineCacheData( device, pipelineCache, pDataSize, pData ); + } + + VkResult + vkMergePipelineCaches( VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache * pSrcCaches ) const VULKAN_HPP_NOEXCEPT + { + return ::vkMergePipelineCaches( device, dstCache, srcCacheCount, pSrcCaches ); + } + + VkResult vkCreateGraphicsPipelines( VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkGraphicsPipelineCreateInfo * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateGraphicsPipelines( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); + } + + VkResult vkCreateComputePipelines( VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkComputePipelineCreateInfo * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateComputePipelines( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); + } + + void vkDestroyPipeline( VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyPipeline( device, pipeline, pAllocator ); + } + + VkResult vkCreatePipelineLayout( VkDevice device, + const VkPipelineLayoutCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkPipelineLayout * pPipelineLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreatePipelineLayout( device, pCreateInfo, pAllocator, pPipelineLayout ); + } + + void vkDestroyPipelineLayout( VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyPipelineLayout( device, pipelineLayout, pAllocator ); + } + + VkResult vkCreateSampler( VkDevice device, + const VkSamplerCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSampler * pSampler ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSampler( device, pCreateInfo, pAllocator, pSampler ); + } + + void vkDestroySampler( VkDevice device, VkSampler sampler, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroySampler( device, sampler, pAllocator ); + } + + VkResult vkCreateDescriptorSetLayout( VkDevice device, + const VkDescriptorSetLayoutCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDescriptorSetLayout * pSetLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDescriptorSetLayout( device, pCreateInfo, pAllocator, pSetLayout ); + } + + void vkDestroyDescriptorSetLayout( VkDevice device, + VkDescriptorSetLayout descriptorSetLayout, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDescriptorSetLayout( device, descriptorSetLayout, pAllocator ); + } + + VkResult vkCreateDescriptorPool( VkDevice device, + const VkDescriptorPoolCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDescriptorPool * pDescriptorPool ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDescriptorPool( device, pCreateInfo, pAllocator, pDescriptorPool ); + } + + void vkDestroyDescriptorPool( VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDescriptorPool( device, descriptorPool, pAllocator ); + } + + VkResult vkResetDescriptorPool( VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetDescriptorPool( device, descriptorPool, flags ); + } + + VkResult vkAllocateDescriptorSets( VkDevice device, + const VkDescriptorSetAllocateInfo * pAllocateInfo, + VkDescriptorSet * pDescriptorSets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAllocateDescriptorSets( device, pAllocateInfo, pDescriptorSets ); + } + + VkResult vkFreeDescriptorSets( VkDevice device, + VkDescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const VkDescriptorSet * pDescriptorSets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkFreeDescriptorSets( device, descriptorPool, descriptorSetCount, pDescriptorSets ); + } + + void vkUpdateDescriptorSets( VkDevice device, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet * pDescriptorWrites, + uint32_t descriptorCopyCount, + const VkCopyDescriptorSet * pDescriptorCopies ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUpdateDescriptorSets( device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies ); + } + + VkResult vkCreateFramebuffer( VkDevice device, + const VkFramebufferCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkFramebuffer * pFramebuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateFramebuffer( device, pCreateInfo, pAllocator, pFramebuffer ); + } + + void vkDestroyFramebuffer( VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyFramebuffer( device, framebuffer, pAllocator ); + } + + VkResult vkCreateRenderPass( VkDevice device, + const VkRenderPassCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkRenderPass * pRenderPass ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateRenderPass( device, pCreateInfo, pAllocator, pRenderPass ); + } + + void vkDestroyRenderPass( VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyRenderPass( device, renderPass, pAllocator ); + } + + void vkGetRenderAreaGranularity( VkDevice device, VkRenderPass renderPass, VkExtent2D * pGranularity ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRenderAreaGranularity( device, renderPass, pGranularity ); + } + + VkResult vkCreateCommandPool( VkDevice device, + const VkCommandPoolCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkCommandPool * pCommandPool ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateCommandPool( device, pCreateInfo, pAllocator, pCommandPool ); + } + + void vkDestroyCommandPool( VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyCommandPool( device, commandPool, pAllocator ); + } + + VkResult vkResetCommandPool( VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetCommandPool( device, commandPool, flags ); + } + + VkResult vkAllocateCommandBuffers( VkDevice device, + const VkCommandBufferAllocateInfo * pAllocateInfo, + VkCommandBuffer * pCommandBuffers ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAllocateCommandBuffers( device, pAllocateInfo, pCommandBuffers ); + } + + void vkFreeCommandBuffers( VkDevice device, + VkCommandPool commandPool, + uint32_t commandBufferCount, + const VkCommandBuffer * pCommandBuffers ) const VULKAN_HPP_NOEXCEPT + { + return ::vkFreeCommandBuffers( device, commandPool, commandBufferCount, pCommandBuffers ); + } + + VkResult vkBeginCommandBuffer( VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo * pBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBeginCommandBuffer( commandBuffer, pBeginInfo ); + } + + VkResult vkEndCommandBuffer( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEndCommandBuffer( commandBuffer ); + } + + VkResult vkResetCommandBuffer( VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetCommandBuffer( commandBuffer, flags ); + } + + void vkCmdBindPipeline( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindPipeline( commandBuffer, pipelineBindPoint, pipeline ); + } + + void vkCmdSetViewport( VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewport( commandBuffer, firstViewport, viewportCount, pViewports ); + } + + void vkCmdSetScissor( VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetScissor( commandBuffer, firstScissor, scissorCount, pScissors ); + } + + void vkCmdSetLineWidth( VkCommandBuffer commandBuffer, float lineWidth ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLineWidth( commandBuffer, lineWidth ); + } + + void vkCmdSetDepthBias( VkCommandBuffer commandBuffer, + float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBias( commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); + } + + void vkCmdSetBlendConstants( VkCommandBuffer commandBuffer, const float blendConstants[4] ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetBlendConstants( commandBuffer, blendConstants ); + } + + void vkCmdSetDepthBounds( VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBounds( commandBuffer, minDepthBounds, maxDepthBounds ); + } + + void vkCmdSetStencilCompareMask( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilCompareMask( commandBuffer, faceMask, compareMask ); + } + + void vkCmdSetStencilWriteMask( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilWriteMask( commandBuffer, faceMask, writeMask ); + } + + void vkCmdSetStencilReference( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilReference( commandBuffer, faceMask, reference ); + } + + void vkCmdBindDescriptorSets( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + const VkDescriptorSet * pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t * pDynamicOffsets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindDescriptorSets( + commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets ); + } + + void vkCmdBindIndexBuffer( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindIndexBuffer( commandBuffer, buffer, offset, indexType ); + } + + void vkCmdBindVertexBuffers( VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer * pBuffers, + const VkDeviceSize * pOffsets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindVertexBuffers( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets ); + } + + void vkCmdDraw( VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDraw( commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance ); + } + + void vkCmdDrawIndexed( VkCommandBuffer commandBuffer, + uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndexed( commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); + } + + void + vkCmdDrawIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndirect( commandBuffer, buffer, offset, drawCount, stride ); + } + + void vkCmdDrawIndexedIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndexedIndirect( commandBuffer, buffer, offset, drawCount, stride ); + } + + void vkCmdDispatch( VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatch( commandBuffer, groupCountX, groupCountY, groupCountZ ); + } + + void vkCmdDispatchIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchIndirect( commandBuffer, buffer, offset ); + } + + void vkCmdCopyBuffer( VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy * pRegions ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyBuffer( commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions ); + } + + void vkCmdCopyImage( VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageCopy * pRegions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); + } + + void vkCmdBlitImage( VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageBlit * pRegions, + VkFilter filter ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBlitImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter ); + } + + void vkCmdCopyBufferToImage( VkCommandBuffer commandBuffer, + VkBuffer srcBuffer, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkBufferImageCopy * pRegions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyBufferToImage( commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions ); + } + + void vkCmdCopyImageToBuffer( VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkBuffer dstBuffer, + uint32_t regionCount, + const VkBufferImageCopy * pRegions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyImageToBuffer( commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions ); + } + + void vkCmdUpdateBuffer( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void * pData ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdUpdateBuffer( commandBuffer, dstBuffer, dstOffset, dataSize, pData ); + } + + void + vkCmdFillBuffer( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdFillBuffer( commandBuffer, dstBuffer, dstOffset, size, data ); + } + + void vkCmdClearColorImage( VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearColorValue * pColor, + uint32_t rangeCount, + const VkImageSubresourceRange * pRanges ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdClearColorImage( commandBuffer, image, imageLayout, pColor, rangeCount, pRanges ); + } + + void vkCmdClearDepthStencilImage( VkCommandBuffer commandBuffer, + VkImage image, + VkImageLayout imageLayout, + const VkClearDepthStencilValue * pDepthStencil, + uint32_t rangeCount, + const VkImageSubresourceRange * pRanges ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdClearDepthStencilImage( commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges ); + } + + void vkCmdClearAttachments( VkCommandBuffer commandBuffer, + uint32_t attachmentCount, + const VkClearAttachment * pAttachments, + uint32_t rectCount, + const VkClearRect * pRects ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdClearAttachments( commandBuffer, attachmentCount, pAttachments, rectCount, pRects ); + } + + void vkCmdResolveImage( VkCommandBuffer commandBuffer, + VkImage srcImage, + VkImageLayout srcImageLayout, + VkImage dstImage, + VkImageLayout dstImageLayout, + uint32_t regionCount, + const VkImageResolve * pRegions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResolveImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); + } + + void vkCmdSetEvent( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetEvent( commandBuffer, event, stageMask ); + } + + void vkCmdResetEvent( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResetEvent( commandBuffer, event, stageMask ); + } + + void 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 ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWaitEvents( commandBuffer, + eventCount, + pEvents, + srcStageMask, + dstStageMask, + memoryBarrierCount, + pMemoryBarriers, + bufferMemoryBarrierCount, + pBufferMemoryBarriers, + imageMemoryBarrierCount, + pImageMemoryBarriers ); + } + + void 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 ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPipelineBarrier( commandBuffer, + srcStageMask, + dstStageMask, + dependencyFlags, + memoryBarrierCount, + pMemoryBarriers, + bufferMemoryBarrierCount, + pBufferMemoryBarriers, + imageMemoryBarrierCount, + pImageMemoryBarriers ); + } + + void vkCmdBeginQuery( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginQuery( commandBuffer, queryPool, query, flags ); + } + + void vkCmdEndQuery( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndQuery( commandBuffer, queryPool, query ); + } + + void vkCmdResetQueryPool( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResetQueryPool( commandBuffer, queryPool, firstQuery, queryCount ); + } + + void vkCmdWriteTimestamp( VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, + uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteTimestamp( commandBuffer, pipelineStage, queryPool, query ); + } + + void vkCmdCopyQueryPoolResults( VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + VkDeviceSize stride, + VkQueryResultFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyQueryPoolResults( commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags ); + } + + void vkCmdPushConstants( VkCommandBuffer commandBuffer, + VkPipelineLayout layout, + VkShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void * pValues ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushConstants( commandBuffer, layout, stageFlags, offset, size, pValues ); + } + + void vkCmdBeginRenderPass( VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo * pRenderPassBegin, + VkSubpassContents contents ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginRenderPass( commandBuffer, pRenderPassBegin, contents ); + } + + void vkCmdNextSubpass( VkCommandBuffer commandBuffer, VkSubpassContents contents ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdNextSubpass( commandBuffer, contents ); + } + + void vkCmdEndRenderPass( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndRenderPass( commandBuffer ); + } + + void vkCmdExecuteCommands( VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer * pCommandBuffers ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdExecuteCommands( commandBuffer, commandBufferCount, pCommandBuffers ); + } + + //=== VK_VERSION_1_1 === + + VkResult vkEnumerateInstanceVersion( uint32_t * pApiVersion ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumerateInstanceVersion( pApiVersion ); + } + + VkResult vkBindBufferMemory2( VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindBufferMemory2( device, bindInfoCount, pBindInfos ); + } + + VkResult vkBindImageMemory2( VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindImageMemory2( device, bindInfoCount, pBindInfos ); + } + + void vkGetDeviceGroupPeerMemoryFeatures( VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags * pPeerMemoryFeatures ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceGroupPeerMemoryFeatures( device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures ); + } + + void vkCmdSetDeviceMask( VkCommandBuffer commandBuffer, uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDeviceMask( commandBuffer, deviceMask ); + } + + void vkCmdDispatchBase( VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchBase( commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); + } + + VkResult vkEnumeratePhysicalDeviceGroups( VkInstance instance, + uint32_t * pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumeratePhysicalDeviceGroups( instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties ); + } + + void vkGetImageMemoryRequirements2( VkDevice device, + const VkImageMemoryRequirementsInfo2 * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageMemoryRequirements2( device, pInfo, pMemoryRequirements ); + } + + void vkGetBufferMemoryRequirements2( VkDevice device, + const VkBufferMemoryRequirementsInfo2 * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferMemoryRequirements2( device, pInfo, pMemoryRequirements ); + } + + void vkGetImageSparseMemoryRequirements2( VkDevice device, + const VkImageSparseMemoryRequirementsInfo2 * pInfo, + uint32_t * pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSparseMemoryRequirements2( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); + } + + void vkGetPhysicalDeviceFeatures2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 * pFeatures ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFeatures2( physicalDevice, pFeatures ); + } + + void vkGetPhysicalDeviceProperties2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceProperties2( physicalDevice, pProperties ); + } + + void vkGetPhysicalDeviceFormatProperties2( VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2 * pFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFormatProperties2( physicalDevice, format, pFormatProperties ); + } + + VkResult vkGetPhysicalDeviceImageFormatProperties2( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + VkImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceImageFormatProperties2( physicalDevice, pImageFormatInfo, pImageFormatProperties ); + } + + void vkGetPhysicalDeviceQueueFamilyProperties2( VkPhysicalDevice physicalDevice, + uint32_t * pQueueFamilyPropertyCount, + VkQueueFamilyProperties2 * pQueueFamilyProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceQueueFamilyProperties2( physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties ); + } + + void vkGetPhysicalDeviceMemoryProperties2( VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2 * pMemoryProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceMemoryProperties2( physicalDevice, pMemoryProperties ); + } + + void vkGetPhysicalDeviceSparseImageFormatProperties2( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, + uint32_t * pPropertyCount, + VkSparseImageFormatProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSparseImageFormatProperties2( physicalDevice, pFormatInfo, pPropertyCount, pProperties ); + } + + void vkTrimCommandPool( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkTrimCommandPool( device, commandPool, flags ); + } + + void vkGetDeviceQueue2( VkDevice device, const VkDeviceQueueInfo2 * pQueueInfo, VkQueue * pQueue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceQueue2( device, pQueueInfo, pQueue ); + } + + VkResult vkCreateSamplerYcbcrConversion( VkDevice device, + const VkSamplerYcbcrConversionCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSamplerYcbcrConversion * pYcbcrConversion ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSamplerYcbcrConversion( device, pCreateInfo, pAllocator, pYcbcrConversion ); + } + + void vkDestroySamplerYcbcrConversion( VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroySamplerYcbcrConversion( device, ycbcrConversion, pAllocator ); + } + + VkResult vkCreateDescriptorUpdateTemplate( VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDescriptorUpdateTemplate( device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate ); + } + + void vkDestroyDescriptorUpdateTemplate( VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDescriptorUpdateTemplate( device, descriptorUpdateTemplate, pAllocator ); + } + + void vkUpdateDescriptorSetWithTemplate( VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUpdateDescriptorSetWithTemplate( device, descriptorSet, descriptorUpdateTemplate, pData ); + } + + void vkGetPhysicalDeviceExternalBufferProperties( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo, + VkExternalBufferProperties * pExternalBufferProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalBufferProperties( physicalDevice, pExternalBufferInfo, pExternalBufferProperties ); + } + + void vkGetPhysicalDeviceExternalFenceProperties( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo, + VkExternalFenceProperties * pExternalFenceProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalFenceProperties( physicalDevice, pExternalFenceInfo, pExternalFenceProperties ); + } + + void vkGetPhysicalDeviceExternalSemaphoreProperties( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, + VkExternalSemaphoreProperties * pExternalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalSemaphoreProperties( physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties ); + } + + void vkGetDescriptorSetLayoutSupport( VkDevice device, + const VkDescriptorSetLayoutCreateInfo * pCreateInfo, + VkDescriptorSetLayoutSupport * pSupport ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorSetLayoutSupport( device, pCreateInfo, pSupport ); + } + + //=== VK_VERSION_1_2 === + + void vkCmdDrawIndirectCount( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndirectCount( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + void vkCmdDrawIndexedIndirectCount( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndexedIndirectCount( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + VkResult vkCreateRenderPass2( VkDevice device, + const VkRenderPassCreateInfo2 * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkRenderPass * pRenderPass ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateRenderPass2( device, pCreateInfo, pAllocator, pRenderPass ); + } + + void vkCmdBeginRenderPass2( VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo * pRenderPassBegin, + const VkSubpassBeginInfo * pSubpassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginRenderPass2( commandBuffer, pRenderPassBegin, pSubpassBeginInfo ); + } + + void vkCmdNextSubpass2( VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo * pSubpassBeginInfo, + const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdNextSubpass2( commandBuffer, pSubpassBeginInfo, pSubpassEndInfo ); + } + + void vkCmdEndRenderPass2( VkCommandBuffer commandBuffer, const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndRenderPass2( commandBuffer, pSubpassEndInfo ); + } + + void vkResetQueryPool( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetQueryPool( device, queryPool, firstQuery, queryCount ); + } + + VkResult vkGetSemaphoreCounterValue( VkDevice device, VkSemaphore semaphore, uint64_t * pValue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSemaphoreCounterValue( device, semaphore, pValue ); + } + + VkResult vkWaitSemaphores( VkDevice device, const VkSemaphoreWaitInfo * pWaitInfo, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWaitSemaphores( device, pWaitInfo, timeout ); + } + + VkResult vkSignalSemaphore( VkDevice device, const VkSemaphoreSignalInfo * pSignalInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSignalSemaphore( device, pSignalInfo ); + } + + VkDeviceAddress vkGetBufferDeviceAddress( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferDeviceAddress( device, pInfo ); + } + + uint64_t vkGetBufferOpaqueCaptureAddress( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferOpaqueCaptureAddress( device, pInfo ); + } + + uint64_t vkGetDeviceMemoryOpaqueCaptureAddress( VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceMemoryOpaqueCaptureAddress( device, pInfo ); + } + + //=== VK_VERSION_1_3 === + + VkResult vkGetPhysicalDeviceToolProperties( VkPhysicalDevice physicalDevice, + uint32_t * pToolCount, + VkPhysicalDeviceToolProperties * pToolProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceToolProperties( physicalDevice, pToolCount, pToolProperties ); + } + + VkResult vkCreatePrivateDataSlot( VkDevice device, + const VkPrivateDataSlotCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkPrivateDataSlot * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreatePrivateDataSlot( device, pCreateInfo, pAllocator, pPrivateDataSlot ); + } + + void vkDestroyPrivateDataSlot( VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyPrivateDataSlot( device, privateDataSlot, pAllocator ); + } + + VkResult vkSetPrivateData( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkSetPrivateData( device, objectType, objectHandle, privateDataSlot, data ); + } + + void vkGetPrivateData( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t * pData ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkGetPrivateData( device, objectType, objectHandle, privateDataSlot, pData ); + } + + void vkCmdSetEvent2( VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetEvent2( commandBuffer, event, pDependencyInfo ); + } + + void vkCmdResetEvent2( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResetEvent2( commandBuffer, event, stageMask ); + } + + void vkCmdWaitEvents2( VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent * pEvents, + const VkDependencyInfo * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWaitEvents2( commandBuffer, eventCount, pEvents, pDependencyInfos ); + } + + void vkCmdPipelineBarrier2( VkCommandBuffer commandBuffer, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPipelineBarrier2( commandBuffer, pDependencyInfo ); + } + + void vkCmdWriteTimestamp2( VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteTimestamp2( commandBuffer, stage, queryPool, query ); + } + + VkResult vkQueueSubmit2( VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 * pSubmits, VkFence fence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueSubmit2( queue, submitCount, pSubmits, fence ); + } + + void vkCmdCopyBuffer2( VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyBuffer2( commandBuffer, pCopyBufferInfo ); + } + + void vkCmdCopyImage2( VkCommandBuffer commandBuffer, const VkCopyImageInfo2 * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyImage2( commandBuffer, pCopyImageInfo ); + } + + void vkCmdCopyBufferToImage2( VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyBufferToImage2( commandBuffer, pCopyBufferToImageInfo ); + } + + void vkCmdCopyImageToBuffer2( VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyImageToBuffer2( commandBuffer, pCopyImageToBufferInfo ); + } + + void vkCmdBlitImage2( VkCommandBuffer commandBuffer, const VkBlitImageInfo2 * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBlitImage2( commandBuffer, pBlitImageInfo ); + } + + void vkCmdResolveImage2( VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResolveImage2( commandBuffer, pResolveImageInfo ); + } + + void vkCmdBeginRendering( VkCommandBuffer commandBuffer, const VkRenderingInfo * pRenderingInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginRendering( commandBuffer, pRenderingInfo ); + } + + void vkCmdEndRendering( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndRendering( commandBuffer ); + } + + void vkCmdSetCullMode( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCullMode( commandBuffer, cullMode ); + } + + void vkCmdSetFrontFace( VkCommandBuffer commandBuffer, VkFrontFace frontFace ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetFrontFace( commandBuffer, frontFace ); + } + + void vkCmdSetPrimitiveTopology( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPrimitiveTopology( commandBuffer, primitiveTopology ); + } + + void vkCmdSetViewportWithCount( VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewportWithCount( commandBuffer, viewportCount, pViewports ); + } + + void vkCmdSetScissorWithCount( VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetScissorWithCount( commandBuffer, scissorCount, pScissors ); + } + + void vkCmdBindVertexBuffers2( VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer * pBuffers, + const VkDeviceSize * pOffsets, + const VkDeviceSize * pSizes, + const VkDeviceSize * pStrides ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindVertexBuffers2( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides ); + } + + void vkCmdSetDepthTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthTestEnable( commandBuffer, depthTestEnable ); + } + + void vkCmdSetDepthWriteEnable( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthWriteEnable( commandBuffer, depthWriteEnable ); + } + + void vkCmdSetDepthCompareOp( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthCompareOp( commandBuffer, depthCompareOp ); + } + + void vkCmdSetDepthBoundsTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBoundsTestEnable( commandBuffer, depthBoundsTestEnable ); + } + + void vkCmdSetStencilTestEnable( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilTestEnable( commandBuffer, stencilTestEnable ); + } + + void vkCmdSetStencilOp( VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilOp( commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp ); + } + + void vkCmdSetRasterizerDiscardEnable( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRasterizerDiscardEnable( commandBuffer, rasterizerDiscardEnable ); + } + + void vkCmdSetDepthBiasEnable( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBiasEnable( commandBuffer, depthBiasEnable ); + } + + void vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPrimitiveRestartEnable( commandBuffer, primitiveRestartEnable ); + } + + void vkGetDeviceBufferMemoryRequirements( VkDevice device, + const VkDeviceBufferMemoryRequirements * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceBufferMemoryRequirements( device, pInfo, pMemoryRequirements ); + } + + void vkGetDeviceImageMemoryRequirements( VkDevice device, + const VkDeviceImageMemoryRequirements * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceImageMemoryRequirements( device, pInfo, pMemoryRequirements ); + } + + void vkGetDeviceImageSparseMemoryRequirements( VkDevice device, + const VkDeviceImageMemoryRequirements * pInfo, + uint32_t * pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceImageSparseMemoryRequirements( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); + } + + //=== VK_VERSION_1_4 === + + void vkCmdSetLineStipple( VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLineStipple( commandBuffer, lineStippleFactor, lineStipplePattern ); + } + + VkResult vkMapMemory2( VkDevice device, const VkMemoryMapInfo * pMemoryMapInfo, void ** ppData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkMapMemory2( device, pMemoryMapInfo, ppData ); + } + + VkResult vkUnmapMemory2( VkDevice device, const VkMemoryUnmapInfo * pMemoryUnmapInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUnmapMemory2( device, pMemoryUnmapInfo ); + } + + void vkCmdBindIndexBuffer2( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindIndexBuffer2( commandBuffer, buffer, offset, size, indexType ); + } + + void vkGetRenderingAreaGranularity( VkDevice device, const VkRenderingAreaInfo * pRenderingAreaInfo, VkExtent2D * pGranularity ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRenderingAreaGranularity( device, pRenderingAreaInfo, pGranularity ); + } + + void vkGetDeviceImageSubresourceLayout( VkDevice device, + const VkDeviceImageSubresourceInfo * pInfo, + VkSubresourceLayout2 * pLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceImageSubresourceLayout( device, pInfo, pLayout ); + } + + void vkGetImageSubresourceLayout2( VkDevice device, + VkImage image, + const VkImageSubresource2 * pSubresource, + VkSubresourceLayout2 * pLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSubresourceLayout2( device, image, pSubresource, pLayout ); + } + + void vkCmdPushDescriptorSet( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet * pDescriptorWrites ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSet( commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites ); + } + + void vkCmdPushDescriptorSetWithTemplate( VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSetWithTemplate( commandBuffer, descriptorUpdateTemplate, layout, set, pData ); + } + + void vkCmdSetRenderingAttachmentLocations( VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo * pLocationInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRenderingAttachmentLocations( commandBuffer, pLocationInfo ); + } + + void vkCmdSetRenderingInputAttachmentIndices( VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRenderingInputAttachmentIndices( commandBuffer, pInputAttachmentIndexInfo ); + } + + void vkCmdBindDescriptorSets2( VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo * pBindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindDescriptorSets2( commandBuffer, pBindDescriptorSetsInfo ); + } + + void vkCmdPushConstants2( VkCommandBuffer commandBuffer, const VkPushConstantsInfo * pPushConstantsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushConstants2( commandBuffer, pPushConstantsInfo ); + } + + void vkCmdPushDescriptorSet2( VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo * pPushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSet2( commandBuffer, pPushDescriptorSetInfo ); + } + + void vkCmdPushDescriptorSetWithTemplate2( VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSetWithTemplate2( commandBuffer, pPushDescriptorSetWithTemplateInfo ); + } + + VkResult vkCopyMemoryToImage( VkDevice device, const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyMemoryToImage( device, pCopyMemoryToImageInfo ); + } + + VkResult vkCopyImageToMemory( VkDevice device, const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyImageToMemory( device, pCopyImageToMemoryInfo ); + } + + VkResult vkCopyImageToImage( VkDevice device, const VkCopyImageToImageInfo * pCopyImageToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyImageToImage( device, pCopyImageToImageInfo ); + } + + VkResult + vkTransitionImageLayout( VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo * pTransitions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkTransitionImageLayout( device, transitionCount, pTransitions ); + } + + //=== VK_KHR_surface === + + void vkDestroySurfaceKHR( VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroySurfaceKHR( instance, surface, pAllocator ); + } + + VkResult vkGetPhysicalDeviceSurfaceSupportKHR( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32 * pSupported ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfaceSupportKHR( physicalDevice, queueFamilyIndex, surface, pSupported ); + } + + VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR( VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfaceCapabilitiesKHR( physicalDevice, surface, pSurfaceCapabilities ); + } + + VkResult vkGetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t * pSurfaceFormatCount, + VkSurfaceFormatKHR * pSurfaceFormats ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfaceFormatsKHR( physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats ); + } + + VkResult vkGetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t * pPresentModeCount, + VkPresentModeKHR * pPresentModes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfacePresentModesKHR( physicalDevice, surface, pPresentModeCount, pPresentModes ); + } + + //=== VK_KHR_swapchain === + + VkResult vkCreateSwapchainKHR( VkDevice device, + const VkSwapchainCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSwapchainKHR * pSwapchain ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSwapchainKHR( device, pCreateInfo, pAllocator, pSwapchain ); + } + + void vkDestroySwapchainKHR( VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroySwapchainKHR( device, swapchain, pAllocator ); + } + + VkResult vkGetSwapchainImagesKHR( VkDevice device, + VkSwapchainKHR swapchain, + uint32_t * pSwapchainImageCount, + VkImage * pSwapchainImages ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSwapchainImagesKHR( device, swapchain, pSwapchainImageCount, pSwapchainImages ); + } + + VkResult vkAcquireNextImageKHR( + VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t * pImageIndex ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireNextImageKHR( device, swapchain, timeout, semaphore, fence, pImageIndex ); + } + + VkResult vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR * pPresentInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueuePresentKHR( queue, pPresentInfo ); + } + + VkResult vkGetDeviceGroupPresentCapabilitiesKHR( VkDevice device, + VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceGroupPresentCapabilitiesKHR( device, pDeviceGroupPresentCapabilities ); + } + + VkResult + vkGetDeviceGroupSurfacePresentModesKHR( VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR * pModes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceGroupSurfacePresentModesKHR( device, surface, pModes ); + } + + VkResult vkGetPhysicalDevicePresentRectanglesKHR( VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t * pRectCount, + VkRect2D * pRects ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDevicePresentRectanglesKHR( physicalDevice, surface, pRectCount, pRects ); + } + + VkResult vkAcquireNextImage2KHR( VkDevice device, const VkAcquireNextImageInfoKHR * pAcquireInfo, uint32_t * pImageIndex ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireNextImage2KHR( device, pAcquireInfo, pImageIndex ); + } + + //=== VK_KHR_display === + + VkResult vkGetPhysicalDeviceDisplayPropertiesKHR( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkDisplayPropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceDisplayPropertiesKHR( physicalDevice, pPropertyCount, pProperties ); + } + + VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkDisplayPlanePropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceDisplayPlanePropertiesKHR( physicalDevice, pPropertyCount, pProperties ); + } + + VkResult vkGetDisplayPlaneSupportedDisplaysKHR( VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t * pDisplayCount, + VkDisplayKHR * pDisplays ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDisplayPlaneSupportedDisplaysKHR( physicalDevice, planeIndex, pDisplayCount, pDisplays ); + } + + VkResult vkGetDisplayModePropertiesKHR( VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t * pPropertyCount, + VkDisplayModePropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDisplayModePropertiesKHR( physicalDevice, display, pPropertyCount, pProperties ); + } + + VkResult vkCreateDisplayModeKHR( VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDisplayModeKHR * pMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDisplayModeKHR( physicalDevice, display, pCreateInfo, pAllocator, pMode ); + } + + VkResult vkGetDisplayPlaneCapabilitiesKHR( VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDisplayPlaneCapabilitiesKHR( physicalDevice, mode, planeIndex, pCapabilities ); + } + + VkResult vkCreateDisplayPlaneSurfaceKHR( VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDisplayPlaneSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); + } + + //=== VK_KHR_display_swapchain === + + VkResult vkCreateSharedSwapchainsKHR( VkDevice device, + uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkSwapchainKHR * pSwapchains ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSharedSwapchainsKHR( device, swapchainCount, pCreateInfos, pAllocator, pSwapchains ); + } + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + VkResult vkCreateXlibSurfaceKHR( VkInstance instance, + const VkXlibSurfaceCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateXlibSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); + } + + VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display * dpy, + VisualID visualID ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceXlibPresentationSupportKHR( physicalDevice, queueFamilyIndex, dpy, visualID ); + } +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + VkResult vkCreateXcbSurfaceKHR( VkInstance instance, + const VkXcbSurfaceCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateXcbSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); + } + + VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t * connection, + xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceXcbPresentationSupportKHR( physicalDevice, queueFamilyIndex, connection, visual_id ); + } +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + VkResult vkCreateWaylandSurfaceKHR( VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateWaylandSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); + } + + VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display * display ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceWaylandPresentationSupportKHR( physicalDevice, queueFamilyIndex, display ); + } +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + VkResult vkCreateAndroidSurfaceKHR( VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateAndroidSurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + VkResult vkCreateWin32SurfaceKHR( VkInstance instance, + const VkWin32SurfaceCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateWin32SurfaceKHR( instance, pCreateInfo, pAllocator, pSurface ); + } + + VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceWin32PresentationSupportKHR( physicalDevice, queueFamilyIndex ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + VkResult vkCreateDebugReportCallbackEXT( VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDebugReportCallbackEXT * pCallback ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDebugReportCallbackEXT( instance, pCreateInfo, pAllocator, pCallback ); + } + + void vkDestroyDebugReportCallbackEXT( VkInstance instance, + VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDebugReportCallbackEXT( instance, callback, pAllocator ); + } + + void vkDebugReportMessageEXT( VkInstance instance, + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char * pLayerPrefix, + const char * pMessage ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDebugReportMessageEXT( instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage ); + } + + //=== VK_EXT_debug_marker === + + VkResult vkDebugMarkerSetObjectTagEXT( VkDevice device, const VkDebugMarkerObjectTagInfoEXT * pTagInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDebugMarkerSetObjectTagEXT( device, pTagInfo ); + } + + VkResult vkDebugMarkerSetObjectNameEXT( VkDevice device, const VkDebugMarkerObjectNameInfoEXT * pNameInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDebugMarkerSetObjectNameEXT( device, pNameInfo ); + } + + void vkCmdDebugMarkerBeginEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDebugMarkerBeginEXT( commandBuffer, pMarkerInfo ); + } + + void vkCmdDebugMarkerEndEXT( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDebugMarkerEndEXT( commandBuffer ); + } + + void vkCmdDebugMarkerInsertEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDebugMarkerInsertEXT( commandBuffer, pMarkerInfo ); + } + + //=== VK_KHR_video_queue === + + VkResult vkGetPhysicalDeviceVideoCapabilitiesKHR( VkPhysicalDevice physicalDevice, + const VkVideoProfileInfoKHR * pVideoProfile, + VkVideoCapabilitiesKHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceVideoCapabilitiesKHR( physicalDevice, pVideoProfile, pCapabilities ); + } + + VkResult vkGetPhysicalDeviceVideoFormatPropertiesKHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, + uint32_t * pVideoFormatPropertyCount, + VkVideoFormatPropertiesKHR * pVideoFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceVideoFormatPropertiesKHR( physicalDevice, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties ); + } + + VkResult vkCreateVideoSessionKHR( VkDevice device, + const VkVideoSessionCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkVideoSessionKHR * pVideoSession ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateVideoSessionKHR( device, pCreateInfo, pAllocator, pVideoSession ); + } + + void vkDestroyVideoSessionKHR( VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyVideoSessionKHR( device, videoSession, pAllocator ); + } + + VkResult vkGetVideoSessionMemoryRequirementsKHR( VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t * pMemoryRequirementsCount, + VkVideoSessionMemoryRequirementsKHR * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetVideoSessionMemoryRequirementsKHR( device, videoSession, pMemoryRequirementsCount, pMemoryRequirements ); + } + + VkResult vkBindVideoSessionMemoryKHR( VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const VkBindVideoSessionMemoryInfoKHR * pBindSessionMemoryInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindVideoSessionMemoryKHR( device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos ); + } + + VkResult vkCreateVideoSessionParametersKHR( VkDevice device, + const VkVideoSessionParametersCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkVideoSessionParametersKHR * pVideoSessionParameters ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateVideoSessionParametersKHR( device, pCreateInfo, pAllocator, pVideoSessionParameters ); + } + + VkResult vkUpdateVideoSessionParametersKHR( VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkVideoSessionParametersUpdateInfoKHR * pUpdateInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUpdateVideoSessionParametersKHR( device, videoSessionParameters, pUpdateInfo ); + } + + void vkDestroyVideoSessionParametersKHR( VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyVideoSessionParametersKHR( device, videoSessionParameters, pAllocator ); + } + + void vkCmdBeginVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR * pBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginVideoCodingKHR( commandBuffer, pBeginInfo ); + } + + void vkCmdEndVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR * pEndCodingInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndVideoCodingKHR( commandBuffer, pEndCodingInfo ); + } + + void vkCmdControlVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR * pCodingControlInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdControlVideoCodingKHR( commandBuffer, pCodingControlInfo ); + } + + //=== VK_KHR_video_decode_queue === + + void vkCmdDecodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR * pDecodeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDecodeVideoKHR( commandBuffer, pDecodeInfo ); + } + + //=== VK_EXT_transform_feedback === + + void vkCmdBindTransformFeedbackBuffersEXT( VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer * pBuffers, + const VkDeviceSize * pOffsets, + const VkDeviceSize * pSizes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindTransformFeedbackBuffersEXT( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes ); + } + + void vkCmdBeginTransformFeedbackEXT( VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer * pCounterBuffers, + const VkDeviceSize * pCounterBufferOffsets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginTransformFeedbackEXT( commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets ); + } + + void vkCmdEndTransformFeedbackEXT( VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer * pCounterBuffers, + const VkDeviceSize * pCounterBufferOffsets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndTransformFeedbackEXT( commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets ); + } + + void vkCmdBeginQueryIndexedEXT( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginQueryIndexedEXT( commandBuffer, queryPool, query, flags, index ); + } + + void vkCmdEndQueryIndexedEXT( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndQueryIndexedEXT( commandBuffer, queryPool, query, index ); + } + + void vkCmdDrawIndirectByteCountEXT( VkCommandBuffer commandBuffer, + uint32_t instanceCount, + uint32_t firstInstance, + VkBuffer counterBuffer, + VkDeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndirectByteCountEXT( commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride ); + } + + //=== VK_NVX_binary_import === + + VkResult vkCreateCuModuleNVX( VkDevice device, + const VkCuModuleCreateInfoNVX * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkCuModuleNVX * pModule ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateCuModuleNVX( device, pCreateInfo, pAllocator, pModule ); + } + + VkResult vkCreateCuFunctionNVX( VkDevice device, + const VkCuFunctionCreateInfoNVX * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkCuFunctionNVX * pFunction ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateCuFunctionNVX( device, pCreateInfo, pAllocator, pFunction ); + } + + void vkDestroyCuModuleNVX( VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyCuModuleNVX( device, module, pAllocator ); + } + + void vkDestroyCuFunctionNVX( VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyCuFunctionNVX( device, function, pAllocator ); + } + + void vkCmdCuLaunchKernelNVX( VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX * pLaunchInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCuLaunchKernelNVX( commandBuffer, pLaunchInfo ); + } + + //=== VK_NVX_image_view_handle === + + uint32_t vkGetImageViewHandleNVX( VkDevice device, const VkImageViewHandleInfoNVX * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageViewHandleNVX( device, pInfo ); + } + + uint64_t vkGetImageViewHandle64NVX( VkDevice device, const VkImageViewHandleInfoNVX * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageViewHandle64NVX( device, pInfo ); + } + + VkResult vkGetImageViewAddressNVX( VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageViewAddressNVX( device, imageView, pProperties ); + } + + //=== VK_AMD_draw_indirect_count === + + void vkCmdDrawIndirectCountAMD( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndirectCountAMD( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + void vkCmdDrawIndexedIndirectCountAMD( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndexedIndirectCountAMD( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + //=== VK_AMD_shader_info === + + VkResult vkGetShaderInfoAMD( VkDevice device, + VkPipeline pipeline, + VkShaderStageFlagBits shaderStage, + VkShaderInfoTypeAMD infoType, + size_t * pInfoSize, + void * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetShaderInfoAMD( device, pipeline, shaderStage, infoType, pInfoSize, pInfo ); + } + + //=== VK_KHR_dynamic_rendering === + + void vkCmdBeginRenderingKHR( VkCommandBuffer commandBuffer, const VkRenderingInfo * pRenderingInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginRenderingKHR( commandBuffer, pRenderingInfo ); + } + + void vkCmdEndRenderingKHR( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndRenderingKHR( commandBuffer ); + } + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + VkResult vkCreateStreamDescriptorSurfaceGGP( VkInstance instance, + const VkStreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateStreamDescriptorSurfaceGGP( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + + VkResult + vkGetPhysicalDeviceExternalImageFormatPropertiesNV( VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV * pExternalImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalImageFormatPropertiesNV( + physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties ); + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + + VkResult vkGetMemoryWin32HandleNV( VkDevice device, + VkDeviceMemory memory, + VkExternalMemoryHandleTypeFlagsNV handleType, + HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryWin32HandleNV( device, memory, handleType, pHandle ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + + void vkGetPhysicalDeviceFeatures2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 * pFeatures ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFeatures2KHR( physicalDevice, pFeatures ); + } + + void vkGetPhysicalDeviceProperties2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceProperties2KHR( physicalDevice, pProperties ); + } + + void vkGetPhysicalDeviceFormatProperties2KHR( VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2 * pFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFormatProperties2KHR( physicalDevice, format, pFormatProperties ); + } + + VkResult vkGetPhysicalDeviceImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + VkImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceImageFormatProperties2KHR( physicalDevice, pImageFormatInfo, pImageFormatProperties ); + } + + void vkGetPhysicalDeviceQueueFamilyProperties2KHR( VkPhysicalDevice physicalDevice, + uint32_t * pQueueFamilyPropertyCount, + VkQueueFamilyProperties2 * pQueueFamilyProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceQueueFamilyProperties2KHR( physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties ); + } + + void vkGetPhysicalDeviceMemoryProperties2KHR( VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2 * pMemoryProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceMemoryProperties2KHR( physicalDevice, pMemoryProperties ); + } + + void vkGetPhysicalDeviceSparseImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, + uint32_t * pPropertyCount, + VkSparseImageFormatProperties2 * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSparseImageFormatProperties2KHR( physicalDevice, pFormatInfo, pPropertyCount, pProperties ); + } + + //=== VK_KHR_device_group === + + void vkGetDeviceGroupPeerMemoryFeaturesKHR( VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags * pPeerMemoryFeatures ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceGroupPeerMemoryFeaturesKHR( device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures ); + } + + void vkCmdSetDeviceMaskKHR( VkCommandBuffer commandBuffer, uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDeviceMaskKHR( commandBuffer, deviceMask ); + } + + void vkCmdDispatchBaseKHR( VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchBaseKHR( commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); + } + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + VkResult vkCreateViSurfaceNN( VkInstance instance, + const VkViSurfaceCreateInfoNN * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateViSurfaceNN( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_maintenance1 === + + void vkTrimCommandPoolKHR( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT + { + return ::vkTrimCommandPoolKHR( device, commandPool, flags ); + } + + //=== VK_KHR_device_group_creation === + + VkResult vkEnumeratePhysicalDeviceGroupsKHR( VkInstance instance, + uint32_t * pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumeratePhysicalDeviceGroupsKHR( instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties ); + } + + //=== VK_KHR_external_memory_capabilities === + + void vkGetPhysicalDeviceExternalBufferPropertiesKHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo, + VkExternalBufferProperties * pExternalBufferProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalBufferPropertiesKHR( physicalDevice, pExternalBufferInfo, pExternalBufferProperties ); + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + + VkResult + vkGetMemoryWin32HandleKHR( VkDevice device, const VkMemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryWin32HandleKHR( device, pGetWin32HandleInfo, pHandle ); + } + + VkResult vkGetMemoryWin32HandlePropertiesKHR( VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + VkMemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryWin32HandlePropertiesKHR( device, handleType, handle, pMemoryWin32HandleProperties ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + + VkResult vkGetMemoryFdKHR( VkDevice device, const VkMemoryGetFdInfoKHR * pGetFdInfo, int * pFd ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryFdKHR( device, pGetFdInfo, pFd ); + } + + VkResult vkGetMemoryFdPropertiesKHR( VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + int fd, + VkMemoryFdPropertiesKHR * pMemoryFdProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryFdPropertiesKHR( device, handleType, fd, pMemoryFdProperties ); + } + + //=== VK_KHR_external_semaphore_capabilities === + + void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, + VkExternalSemaphoreProperties * pExternalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties ); + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + + VkResult vkImportSemaphoreWin32HandleKHR( VkDevice device, + const VkImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkImportSemaphoreWin32HandleKHR( device, pImportSemaphoreWin32HandleInfo ); + } + + VkResult vkGetSemaphoreWin32HandleKHR( VkDevice device, + const VkSemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSemaphoreWin32HandleKHR( device, pGetWin32HandleInfo, pHandle ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + + VkResult vkImportSemaphoreFdKHR( VkDevice device, const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkImportSemaphoreFdKHR( device, pImportSemaphoreFdInfo ); + } + + VkResult vkGetSemaphoreFdKHR( VkDevice device, const VkSemaphoreGetFdInfoKHR * pGetFdInfo, int * pFd ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSemaphoreFdKHR( device, pGetFdInfo, pFd ); + } + + //=== VK_KHR_push_descriptor === + + void vkCmdPushDescriptorSetKHR( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet * pDescriptorWrites ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSetKHR( commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites ); + } + + void vkCmdPushDescriptorSetWithTemplateKHR( VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSetWithTemplateKHR( commandBuffer, descriptorUpdateTemplate, layout, set, pData ); + } + + //=== VK_EXT_conditional_rendering === + + void vkCmdBeginConditionalRenderingEXT( VkCommandBuffer commandBuffer, + const VkConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginConditionalRenderingEXT( commandBuffer, pConditionalRenderingBegin ); + } + + void vkCmdEndConditionalRenderingEXT( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndConditionalRenderingEXT( commandBuffer ); + } + + //=== VK_KHR_descriptor_update_template === + + VkResult vkCreateDescriptorUpdateTemplateKHR( VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDescriptorUpdateTemplateKHR( device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate ); + } + + void vkDestroyDescriptorUpdateTemplateKHR( VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDescriptorUpdateTemplateKHR( device, descriptorUpdateTemplate, pAllocator ); + } + + void vkUpdateDescriptorSetWithTemplateKHR( VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUpdateDescriptorSetWithTemplateKHR( device, descriptorSet, descriptorUpdateTemplate, pData ); + } + + //=== VK_NV_clip_space_w_scaling === + + void vkCmdSetViewportWScalingNV( VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportWScalingNV * pViewportWScalings ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewportWScalingNV( commandBuffer, firstViewport, viewportCount, pViewportWScalings ); + } + + //=== VK_EXT_direct_mode_display === + + VkResult vkReleaseDisplayEXT( VkPhysicalDevice physicalDevice, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleaseDisplayEXT( physicalDevice, display ); + } + +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + + VkResult vkAcquireXlibDisplayEXT( VkPhysicalDevice physicalDevice, Display * dpy, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireXlibDisplayEXT( physicalDevice, dpy, display ); + } + + VkResult + vkGetRandROutputDisplayEXT( VkPhysicalDevice physicalDevice, Display * dpy, RROutput rrOutput, VkDisplayKHR * pDisplay ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRandROutputDisplayEXT( physicalDevice, dpy, rrOutput, pDisplay ); + } +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + + VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT( VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfaceCapabilities2EXT( physicalDevice, surface, pSurfaceCapabilities ); + } + + //=== VK_EXT_display_control === + + VkResult vkDisplayPowerControlEXT( VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT * pDisplayPowerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDisplayPowerControlEXT( device, display, pDisplayPowerInfo ); + } + + VkResult vkRegisterDeviceEventEXT( VkDevice device, + const VkDeviceEventInfoEXT * pDeviceEventInfo, + const VkAllocationCallbacks * pAllocator, + VkFence * pFence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkRegisterDeviceEventEXT( device, pDeviceEventInfo, pAllocator, pFence ); + } + + VkResult vkRegisterDisplayEventEXT( VkDevice device, + VkDisplayKHR display, + const VkDisplayEventInfoEXT * pDisplayEventInfo, + const VkAllocationCallbacks * pAllocator, + VkFence * pFence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkRegisterDisplayEventEXT( device, display, pDisplayEventInfo, pAllocator, pFence ); + } + + VkResult vkGetSwapchainCounterEXT( VkDevice device, + VkSwapchainKHR swapchain, + VkSurfaceCounterFlagBitsEXT counter, + uint64_t * pCounterValue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSwapchainCounterEXT( device, swapchain, counter, pCounterValue ); + } + + //=== VK_GOOGLE_display_timing === + + VkResult vkGetRefreshCycleDurationGOOGLE( VkDevice device, + VkSwapchainKHR swapchain, + VkRefreshCycleDurationGOOGLE * pDisplayTimingProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRefreshCycleDurationGOOGLE( device, swapchain, pDisplayTimingProperties ); + } + + VkResult vkGetPastPresentationTimingGOOGLE( VkDevice device, + VkSwapchainKHR swapchain, + uint32_t * pPresentationTimingCount, + VkPastPresentationTimingGOOGLE * pPresentationTimings ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPastPresentationTimingGOOGLE( device, swapchain, pPresentationTimingCount, pPresentationTimings ); + } + + //=== VK_EXT_discard_rectangles === + + void vkCmdSetDiscardRectangleEXT( VkCommandBuffer commandBuffer, + uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const VkRect2D * pDiscardRectangles ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDiscardRectangleEXT( commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles ); + } + + void vkCmdSetDiscardRectangleEnableEXT( VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDiscardRectangleEnableEXT( commandBuffer, discardRectangleEnable ); + } + + void vkCmdSetDiscardRectangleModeEXT( VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDiscardRectangleModeEXT( commandBuffer, discardRectangleMode ); + } + + //=== VK_EXT_hdr_metadata === + + void vkSetHdrMetadataEXT( VkDevice device, + uint32_t swapchainCount, + const VkSwapchainKHR * pSwapchains, + const VkHdrMetadataEXT * pMetadata ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetHdrMetadataEXT( device, swapchainCount, pSwapchains, pMetadata ); + } + + //=== VK_KHR_create_renderpass2 === + + VkResult vkCreateRenderPass2KHR( VkDevice device, + const VkRenderPassCreateInfo2 * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkRenderPass * pRenderPass ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateRenderPass2KHR( device, pCreateInfo, pAllocator, pRenderPass ); + } + + void vkCmdBeginRenderPass2KHR( VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo * pRenderPassBegin, + const VkSubpassBeginInfo * pSubpassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginRenderPass2KHR( commandBuffer, pRenderPassBegin, pSubpassBeginInfo ); + } + + void vkCmdNextSubpass2KHR( VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo * pSubpassBeginInfo, + const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdNextSubpass2KHR( commandBuffer, pSubpassBeginInfo, pSubpassEndInfo ); + } + + void vkCmdEndRenderPass2KHR( VkCommandBuffer commandBuffer, const VkSubpassEndInfo * pSubpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndRenderPass2KHR( commandBuffer, pSubpassEndInfo ); + } + + //=== VK_KHR_shared_presentable_image === + + VkResult vkGetSwapchainStatusKHR( VkDevice device, VkSwapchainKHR swapchain ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSwapchainStatusKHR( device, swapchain ); + } + + //=== VK_KHR_external_fence_capabilities === + + void vkGetPhysicalDeviceExternalFencePropertiesKHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo, + VkExternalFenceProperties * pExternalFenceProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalFencePropertiesKHR( physicalDevice, pExternalFenceInfo, pExternalFenceProperties ); + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + + VkResult vkImportFenceWin32HandleKHR( VkDevice device, const VkImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkImportFenceWin32HandleKHR( device, pImportFenceWin32HandleInfo ); + } + + VkResult vkGetFenceWin32HandleKHR( VkDevice device, const VkFenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, HANDLE * pHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetFenceWin32HandleKHR( device, pGetWin32HandleInfo, pHandle ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + + VkResult vkImportFenceFdKHR( VkDevice device, const VkImportFenceFdInfoKHR * pImportFenceFdInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkImportFenceFdKHR( device, pImportFenceFdInfo ); + } + + VkResult vkGetFenceFdKHR( VkDevice device, const VkFenceGetFdInfoKHR * pGetFdInfo, int * pFd ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetFenceFdKHR( device, pGetFdInfo, pFd ); + } + + //=== VK_KHR_performance_query === + + VkResult + vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t * pCounterCount, + VkPerformanceCounterKHR * pCounters, + VkPerformanceCounterDescriptionKHR * pCounterDescriptions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + physicalDevice, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions ); + } + + void vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( VkPhysicalDevice physicalDevice, + const VkQueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, + uint32_t * pNumPasses ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( physicalDevice, pPerformanceQueryCreateInfo, pNumPasses ); + } + + VkResult vkAcquireProfilingLockKHR( VkDevice device, const VkAcquireProfilingLockInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireProfilingLockKHR( device, pInfo ); + } + + void vkReleaseProfilingLockKHR( VkDevice device ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleaseProfilingLockKHR( device ); + } + + //=== VK_KHR_get_surface_capabilities2 === + + VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + VkSurfaceCapabilities2KHR * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfaceCapabilities2KHR( physicalDevice, pSurfaceInfo, pSurfaceCapabilities ); + } + + VkResult vkGetPhysicalDeviceSurfaceFormats2KHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + uint32_t * pSurfaceFormatCount, + VkSurfaceFormat2KHR * pSurfaceFormats ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfaceFormats2KHR( physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats ); + } + + //=== VK_KHR_get_display_properties2 === + + VkResult vkGetPhysicalDeviceDisplayProperties2KHR( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkDisplayProperties2KHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceDisplayProperties2KHR( physicalDevice, pPropertyCount, pProperties ); + } + + VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkDisplayPlaneProperties2KHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceDisplayPlaneProperties2KHR( physicalDevice, pPropertyCount, pProperties ); + } + + VkResult vkGetDisplayModeProperties2KHR( VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t * pPropertyCount, + VkDisplayModeProperties2KHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDisplayModeProperties2KHR( physicalDevice, display, pPropertyCount, pProperties ); + } + + VkResult vkGetDisplayPlaneCapabilities2KHR( VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR * pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDisplayPlaneCapabilities2KHR( physicalDevice, pDisplayPlaneInfo, pCapabilities ); + } + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + VkResult vkCreateIOSSurfaceMVK( VkInstance instance, + const VkIOSSurfaceCreateInfoMVK * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateIOSSurfaceMVK( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + VkResult vkCreateMacOSSurfaceMVK( VkInstance instance, + const VkMacOSSurfaceCreateInfoMVK * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateMacOSSurfaceMVK( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + VkResult vkSetDebugUtilsObjectNameEXT( VkDevice device, const VkDebugUtilsObjectNameInfoEXT * pNameInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetDebugUtilsObjectNameEXT( device, pNameInfo ); + } + + VkResult vkSetDebugUtilsObjectTagEXT( VkDevice device, const VkDebugUtilsObjectTagInfoEXT * pTagInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetDebugUtilsObjectTagEXT( device, pTagInfo ); + } + + void vkQueueBeginDebugUtilsLabelEXT( VkQueue queue, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueBeginDebugUtilsLabelEXT( queue, pLabelInfo ); + } + + void vkQueueEndDebugUtilsLabelEXT( VkQueue queue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueEndDebugUtilsLabelEXT( queue ); + } + + void vkQueueInsertDebugUtilsLabelEXT( VkQueue queue, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueInsertDebugUtilsLabelEXT( queue, pLabelInfo ); + } + + void vkCmdBeginDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginDebugUtilsLabelEXT( commandBuffer, pLabelInfo ); + } + + void vkCmdEndDebugUtilsLabelEXT( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndDebugUtilsLabelEXT( commandBuffer ); + } + + void vkCmdInsertDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT * pLabelInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdInsertDebugUtilsLabelEXT( commandBuffer, pLabelInfo ); + } + + VkResult vkCreateDebugUtilsMessengerEXT( VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDebugUtilsMessengerEXT * pMessenger ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDebugUtilsMessengerEXT( instance, pCreateInfo, pAllocator, pMessenger ); + } + + void vkDestroyDebugUtilsMessengerEXT( VkInstance instance, + VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDebugUtilsMessengerEXT( instance, messenger, pAllocator ); + } + + void vkSubmitDebugUtilsMessageEXT( VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSubmitDebugUtilsMessageEXT( instance, messageSeverity, messageTypes, pCallbackData ); + } + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + + VkResult vkGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, + const struct AHardwareBuffer * buffer, + VkAndroidHardwareBufferPropertiesANDROID * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetAndroidHardwareBufferPropertiesANDROID( device, buffer, pProperties ); + } + + VkResult vkGetMemoryAndroidHardwareBufferANDROID( VkDevice device, + const VkMemoryGetAndroidHardwareBufferInfoANDROID * pInfo, + struct AHardwareBuffer ** pBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryAndroidHardwareBufferANDROID( device, pInfo, pBuffer ); + } +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + VkResult vkCreateExecutionGraphPipelinesAMDX( VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkExecutionGraphPipelineCreateInfoAMDX * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateExecutionGraphPipelinesAMDX( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); + } + + VkResult vkGetExecutionGraphPipelineScratchSizeAMDX( VkDevice device, + VkPipeline executionGraph, + VkExecutionGraphPipelineScratchSizeAMDX * pSizeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetExecutionGraphPipelineScratchSizeAMDX( device, executionGraph, pSizeInfo ); + } + + VkResult vkGetExecutionGraphPipelineNodeIndexAMDX( VkDevice device, + VkPipeline executionGraph, + const VkPipelineShaderStageNodeCreateInfoAMDX * pNodeInfo, + uint32_t * pNodeIndex ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetExecutionGraphPipelineNodeIndexAMDX( device, executionGraph, pNodeInfo, pNodeIndex ); + } + + void vkCmdInitializeGraphScratchMemoryAMDX( VkCommandBuffer commandBuffer, + VkPipeline executionGraph, + VkDeviceAddress scratch, + VkDeviceSize scratchSize ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdInitializeGraphScratchMemoryAMDX( commandBuffer, executionGraph, scratch, scratchSize ); + } + + void vkCmdDispatchGraphAMDX( VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX * pCountInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchGraphAMDX( commandBuffer, scratch, scratchSize, pCountInfo ); + } + + void vkCmdDispatchGraphIndirectAMDX( VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX * pCountInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchGraphIndirectAMDX( commandBuffer, scratch, scratchSize, pCountInfo ); + } + + void vkCmdDispatchGraphIndirectCountAMDX( VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + VkDeviceAddress countInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchGraphIndirectCountAMDX( commandBuffer, scratch, scratchSize, countInfo ); + } +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + + void vkCmdSetSampleLocationsEXT( VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT * pSampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetSampleLocationsEXT( commandBuffer, pSampleLocationsInfo ); + } + + void vkGetPhysicalDeviceMultisamplePropertiesEXT( VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT * pMultisampleProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceMultisamplePropertiesEXT( physicalDevice, samples, pMultisampleProperties ); + } + + //=== VK_KHR_get_memory_requirements2 === + + void vkGetImageMemoryRequirements2KHR( VkDevice device, + const VkImageMemoryRequirementsInfo2 * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageMemoryRequirements2KHR( device, pInfo, pMemoryRequirements ); + } + + void vkGetBufferMemoryRequirements2KHR( VkDevice device, + const VkBufferMemoryRequirementsInfo2 * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferMemoryRequirements2KHR( device, pInfo, pMemoryRequirements ); + } + + void vkGetImageSparseMemoryRequirements2KHR( VkDevice device, + const VkImageSparseMemoryRequirementsInfo2 * pInfo, + uint32_t * pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSparseMemoryRequirements2KHR( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); + } + + //=== VK_KHR_acceleration_structure === + + VkResult vkCreateAccelerationStructureKHR( VkDevice device, + const VkAccelerationStructureCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkAccelerationStructureKHR * pAccelerationStructure ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateAccelerationStructureKHR( device, pCreateInfo, pAllocator, pAccelerationStructure ); + } + + void vkDestroyAccelerationStructureKHR( VkDevice device, + VkAccelerationStructureKHR accelerationStructure, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyAccelerationStructureKHR( device, accelerationStructure, pAllocator ); + } + + void vkCmdBuildAccelerationStructuresKHR( VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, + const VkAccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBuildAccelerationStructuresKHR( commandBuffer, infoCount, pInfos, ppBuildRangeInfos ); + } + + void vkCmdBuildAccelerationStructuresIndirectKHR( VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, + const VkDeviceAddress * pIndirectDeviceAddresses, + const uint32_t * pIndirectStrides, + const uint32_t * const * ppMaxPrimitiveCounts ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBuildAccelerationStructuresIndirectKHR( + commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts ); + } + + VkResult vkBuildAccelerationStructuresKHR( VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR * pInfos, + const VkAccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBuildAccelerationStructuresKHR( device, deferredOperation, infoCount, pInfos, ppBuildRangeInfos ); + } + + VkResult vkCopyAccelerationStructureKHR( VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyAccelerationStructureKHR( device, deferredOperation, pInfo ); + } + + VkResult vkCopyAccelerationStructureToMemoryKHR( VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyAccelerationStructureToMemoryKHR( device, deferredOperation, pInfo ); + } + + VkResult vkCopyMemoryToAccelerationStructureKHR( VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyMemoryToAccelerationStructureKHR( device, deferredOperation, pInfo ); + } + + VkResult vkWriteAccelerationStructuresPropertiesKHR( VkDevice device, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR * pAccelerationStructures, + VkQueryType queryType, + size_t dataSize, + void * pData, + size_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWriteAccelerationStructuresPropertiesKHR( device, accelerationStructureCount, pAccelerationStructures, queryType, dataSize, pData, stride ); + } + + void vkCmdCopyAccelerationStructureKHR( VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyAccelerationStructureKHR( commandBuffer, pInfo ); + } + + void vkCmdCopyAccelerationStructureToMemoryKHR( VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureToMemoryInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyAccelerationStructureToMemoryKHR( commandBuffer, pInfo ); + } + + void vkCmdCopyMemoryToAccelerationStructureKHR( VkCommandBuffer commandBuffer, + const VkCopyMemoryToAccelerationStructureInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyMemoryToAccelerationStructureKHR( commandBuffer, pInfo ); + } + + VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR( VkDevice device, + const VkAccelerationStructureDeviceAddressInfoKHR * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetAccelerationStructureDeviceAddressKHR( device, pInfo ); + } + + void vkCmdWriteAccelerationStructuresPropertiesKHR( VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR * pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteAccelerationStructuresPropertiesKHR( + commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery ); + } + + void vkGetDeviceAccelerationStructureCompatibilityKHR( VkDevice device, + const VkAccelerationStructureVersionInfoKHR * pVersionInfo, + VkAccelerationStructureCompatibilityKHR * pCompatibility ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceAccelerationStructureCompatibilityKHR( device, pVersionInfo, pCompatibility ); + } + + void vkGetAccelerationStructureBuildSizesKHR( VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkAccelerationStructureBuildGeometryInfoKHR * pBuildInfo, + const uint32_t * pMaxPrimitiveCounts, + VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetAccelerationStructureBuildSizesKHR( device, buildType, pBuildInfo, pMaxPrimitiveCounts, pSizeInfo ); + } + + //=== VK_KHR_ray_tracing_pipeline === + + void vkCmdTraceRaysKHR( VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR * pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR * pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR * pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdTraceRaysKHR( + commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth ); + } + + VkResult vkCreateRayTracingPipelinesKHR( VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoKHR * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateRayTracingPipelinesKHR( device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); + } + + VkResult vkGetRayTracingShaderGroupHandlesKHR( + VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRayTracingShaderGroupHandlesKHR( device, pipeline, firstGroup, groupCount, dataSize, pData ); + } + + VkResult vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( device, pipeline, firstGroup, groupCount, dataSize, pData ); + } + + void vkCmdTraceRaysIndirectKHR( VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR * pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR * pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR * pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdTraceRaysIndirectKHR( + commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress ); + } + + VkDeviceSize vkGetRayTracingShaderGroupStackSizeKHR( VkDevice device, + VkPipeline pipeline, + uint32_t group, + VkShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRayTracingShaderGroupStackSizeKHR( device, pipeline, group, groupShader ); + } + + void vkCmdSetRayTracingPipelineStackSizeKHR( VkCommandBuffer commandBuffer, uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRayTracingPipelineStackSizeKHR( commandBuffer, pipelineStackSize ); + } + + //=== VK_KHR_sampler_ycbcr_conversion === + + VkResult vkCreateSamplerYcbcrConversionKHR( VkDevice device, + const VkSamplerYcbcrConversionCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSamplerYcbcrConversion * pYcbcrConversion ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSamplerYcbcrConversionKHR( device, pCreateInfo, pAllocator, pYcbcrConversion ); + } + + void vkDestroySamplerYcbcrConversionKHR( VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroySamplerYcbcrConversionKHR( device, ycbcrConversion, pAllocator ); + } + + //=== VK_KHR_bind_memory2 === + + VkResult vkBindBufferMemory2KHR( VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindBufferMemory2KHR( device, bindInfoCount, pBindInfos ); + } + + VkResult vkBindImageMemory2KHR( VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindImageMemory2KHR( device, bindInfoCount, pBindInfos ); + } + + //=== VK_EXT_image_drm_format_modifier === + + VkResult vkGetImageDrmFormatModifierPropertiesEXT( VkDevice device, + VkImage image, + VkImageDrmFormatModifierPropertiesEXT * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageDrmFormatModifierPropertiesEXT( device, image, pProperties ); + } + + //=== VK_EXT_validation_cache === + + VkResult vkCreateValidationCacheEXT( VkDevice device, + const VkValidationCacheCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkValidationCacheEXT * pValidationCache ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateValidationCacheEXT( device, pCreateInfo, pAllocator, pValidationCache ); + } + + void + vkDestroyValidationCacheEXT( VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyValidationCacheEXT( device, validationCache, pAllocator ); + } + + VkResult vkMergeValidationCachesEXT( VkDevice device, + VkValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const VkValidationCacheEXT * pSrcCaches ) const VULKAN_HPP_NOEXCEPT + { + return ::vkMergeValidationCachesEXT( device, dstCache, srcCacheCount, pSrcCaches ); + } + + VkResult vkGetValidationCacheDataEXT( VkDevice device, VkValidationCacheEXT validationCache, size_t * pDataSize, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetValidationCacheDataEXT( device, validationCache, pDataSize, pData ); + } + + //=== VK_NV_shading_rate_image === + + void vkCmdBindShadingRateImageNV( VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindShadingRateImageNV( commandBuffer, imageView, imageLayout ); + } + + void vkCmdSetViewportShadingRatePaletteNV( VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkShadingRatePaletteNV * pShadingRatePalettes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewportShadingRatePaletteNV( commandBuffer, firstViewport, viewportCount, pShadingRatePalettes ); + } + + void vkCmdSetCoarseSampleOrderNV( VkCommandBuffer commandBuffer, + VkCoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const VkCoarseSampleOrderCustomNV * pCustomSampleOrders ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoarseSampleOrderNV( commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders ); + } + + //=== VK_NV_ray_tracing === + + VkResult vkCreateAccelerationStructureNV( VkDevice device, + const VkAccelerationStructureCreateInfoNV * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkAccelerationStructureNV * pAccelerationStructure ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateAccelerationStructureNV( device, pCreateInfo, pAllocator, pAccelerationStructure ); + } + + void vkDestroyAccelerationStructureNV( VkDevice device, + VkAccelerationStructureNV accelerationStructure, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyAccelerationStructureNV( device, accelerationStructure, pAllocator ); + } + + void vkGetAccelerationStructureMemoryRequirementsNV( VkDevice device, + const VkAccelerationStructureMemoryRequirementsInfoNV * pInfo, + VkMemoryRequirements2KHR * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetAccelerationStructureMemoryRequirementsNV( device, pInfo, pMemoryRequirements ); + } + + VkResult vkBindAccelerationStructureMemoryNV( VkDevice device, + uint32_t bindInfoCount, + const VkBindAccelerationStructureMemoryInfoNV * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindAccelerationStructureMemoryNV( device, bindInfoCount, pBindInfos ); + } + + void vkCmdBuildAccelerationStructureNV( VkCommandBuffer commandBuffer, + const VkAccelerationStructureInfoNV * pInfo, + VkBuffer instanceData, + VkDeviceSize instanceOffset, + VkBool32 update, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkBuffer scratch, + VkDeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBuildAccelerationStructureNV( commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset ); + } + + void vkCmdCopyAccelerationStructureNV( VkCommandBuffer commandBuffer, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkCopyAccelerationStructureModeKHR mode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyAccelerationStructureNV( commandBuffer, dst, src, mode ); + } + + void vkCmdTraceRaysNV( VkCommandBuffer commandBuffer, + VkBuffer raygenShaderBindingTableBuffer, + VkDeviceSize raygenShaderBindingOffset, + VkBuffer missShaderBindingTableBuffer, + VkDeviceSize missShaderBindingOffset, + VkDeviceSize missShaderBindingStride, + VkBuffer hitShaderBindingTableBuffer, + VkDeviceSize hitShaderBindingOffset, + VkDeviceSize hitShaderBindingStride, + VkBuffer callableShaderBindingTableBuffer, + VkDeviceSize callableShaderBindingOffset, + VkDeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdTraceRaysNV( commandBuffer, + raygenShaderBindingTableBuffer, + raygenShaderBindingOffset, + missShaderBindingTableBuffer, + missShaderBindingOffset, + missShaderBindingStride, + hitShaderBindingTableBuffer, + hitShaderBindingOffset, + hitShaderBindingStride, + callableShaderBindingTableBuffer, + callableShaderBindingOffset, + callableShaderBindingStride, + width, + height, + depth ); + } + + VkResult vkCreateRayTracingPipelinesNV( VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoNV * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateRayTracingPipelinesNV( device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); + } + + VkResult vkGetRayTracingShaderGroupHandlesNV( + VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRayTracingShaderGroupHandlesNV( device, pipeline, firstGroup, groupCount, dataSize, pData ); + } + + VkResult vkGetAccelerationStructureHandleNV( VkDevice device, + VkAccelerationStructureNV accelerationStructure, + size_t dataSize, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetAccelerationStructureHandleNV( device, accelerationStructure, dataSize, pData ); + } + + void vkCmdWriteAccelerationStructuresPropertiesNV( VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureNV * pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteAccelerationStructuresPropertiesNV( + commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery ); + } + + VkResult vkCompileDeferredNV( VkDevice device, VkPipeline pipeline, uint32_t shader ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCompileDeferredNV( device, pipeline, shader ); + } + + //=== VK_KHR_maintenance3 === + + void vkGetDescriptorSetLayoutSupportKHR( VkDevice device, + const VkDescriptorSetLayoutCreateInfo * pCreateInfo, + VkDescriptorSetLayoutSupport * pSupport ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorSetLayoutSupportKHR( device, pCreateInfo, pSupport ); + } + + //=== VK_KHR_draw_indirect_count === + + void vkCmdDrawIndirectCountKHR( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndirectCountKHR( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + void vkCmdDrawIndexedIndirectCountKHR( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawIndexedIndirectCountKHR( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + //=== VK_EXT_external_memory_host === + + VkResult vkGetMemoryHostPointerPropertiesEXT( VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void * pHostPointer, + VkMemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryHostPointerPropertiesEXT( device, handleType, pHostPointer, pMemoryHostPointerProperties ); + } + + //=== VK_AMD_buffer_marker === + + void vkCmdWriteBufferMarkerAMD( VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteBufferMarkerAMD( commandBuffer, pipelineStage, dstBuffer, dstOffset, marker ); + } + + void vkCmdWriteBufferMarker2AMD( + VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteBufferMarker2AMD( commandBuffer, stage, dstBuffer, dstOffset, marker ); + } + + //=== VK_EXT_calibrated_timestamps === + + VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( VkPhysicalDevice physicalDevice, + uint32_t * pTimeDomainCount, + VkTimeDomainKHR * pTimeDomains ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( physicalDevice, pTimeDomainCount, pTimeDomains ); + } + + VkResult vkGetCalibratedTimestampsEXT( VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR * pTimestampInfos, + uint64_t * pTimestamps, + uint64_t * pMaxDeviation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetCalibratedTimestampsEXT( device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation ); + } + + //=== VK_NV_mesh_shader === + + void vkCmdDrawMeshTasksNV( VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMeshTasksNV( commandBuffer, taskCount, firstTask ); + } + + void vkCmdDrawMeshTasksIndirectNV( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMeshTasksIndirectNV( commandBuffer, buffer, offset, drawCount, stride ); + } + + void vkCmdDrawMeshTasksIndirectCountNV( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMeshTasksIndirectCountNV( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + //=== VK_NV_scissor_exclusive === + + void vkCmdSetExclusiveScissorEnableNV( VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkBool32 * pExclusiveScissorEnables ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetExclusiveScissorEnableNV( commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables ); + } + + void vkCmdSetExclusiveScissorNV( VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkRect2D * pExclusiveScissors ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetExclusiveScissorNV( commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors ); + } + + //=== VK_NV_device_diagnostic_checkpoints === + + void vkCmdSetCheckpointNV( VkCommandBuffer commandBuffer, const void * pCheckpointMarker ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCheckpointNV( commandBuffer, pCheckpointMarker ); + } + + void vkGetQueueCheckpointDataNV( VkQueue queue, uint32_t * pCheckpointDataCount, VkCheckpointDataNV * pCheckpointData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetQueueCheckpointDataNV( queue, pCheckpointDataCount, pCheckpointData ); + } + + void vkGetQueueCheckpointData2NV( VkQueue queue, uint32_t * pCheckpointDataCount, VkCheckpointData2NV * pCheckpointData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetQueueCheckpointData2NV( queue, pCheckpointDataCount, pCheckpointData ); + } + + //=== VK_KHR_timeline_semaphore === + + VkResult vkGetSemaphoreCounterValueKHR( VkDevice device, VkSemaphore semaphore, uint64_t * pValue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSemaphoreCounterValueKHR( device, semaphore, pValue ); + } + + VkResult vkWaitSemaphoresKHR( VkDevice device, const VkSemaphoreWaitInfo * pWaitInfo, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWaitSemaphoresKHR( device, pWaitInfo, timeout ); + } + + VkResult vkSignalSemaphoreKHR( VkDevice device, const VkSemaphoreSignalInfo * pSignalInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSignalSemaphoreKHR( device, pSignalInfo ); + } + + //=== VK_INTEL_performance_query === + + VkResult vkInitializePerformanceApiINTEL( VkDevice device, const VkInitializePerformanceApiInfoINTEL * pInitializeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkInitializePerformanceApiINTEL( device, pInitializeInfo ); + } + + void vkUninitializePerformanceApiINTEL( VkDevice device ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUninitializePerformanceApiINTEL( device ); + } + + VkResult vkCmdSetPerformanceMarkerINTEL( VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPerformanceMarkerINTEL( commandBuffer, pMarkerInfo ); + } + + VkResult vkCmdSetPerformanceStreamMarkerINTEL( VkCommandBuffer commandBuffer, + const VkPerformanceStreamMarkerInfoINTEL * pMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPerformanceStreamMarkerINTEL( commandBuffer, pMarkerInfo ); + } + + VkResult vkCmdSetPerformanceOverrideINTEL( VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL * pOverrideInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPerformanceOverrideINTEL( commandBuffer, pOverrideInfo ); + } + + VkResult vkAcquirePerformanceConfigurationINTEL( VkDevice device, + const VkPerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, + VkPerformanceConfigurationINTEL * pConfiguration ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquirePerformanceConfigurationINTEL( device, pAcquireInfo, pConfiguration ); + } + + VkResult vkReleasePerformanceConfigurationINTEL( VkDevice device, VkPerformanceConfigurationINTEL configuration ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleasePerformanceConfigurationINTEL( device, configuration ); + } + + VkResult vkQueueSetPerformanceConfigurationINTEL( VkQueue queue, VkPerformanceConfigurationINTEL configuration ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueSetPerformanceConfigurationINTEL( queue, configuration ); + } + + VkResult + vkGetPerformanceParameterINTEL( VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL * pValue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPerformanceParameterINTEL( device, parameter, pValue ); + } + + //=== VK_AMD_display_native_hdr === + + void vkSetLocalDimmingAMD( VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetLocalDimmingAMD( device, swapChain, localDimmingEnable ); + } + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + VkResult vkCreateImagePipeSurfaceFUCHSIA( VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateImagePipeSurfaceFUCHSIA( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + VkResult vkCreateMetalSurfaceEXT( VkInstance instance, + const VkMetalSurfaceCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateMetalSurfaceEXT( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + + VkResult vkGetPhysicalDeviceFragmentShadingRatesKHR( VkPhysicalDevice physicalDevice, + uint32_t * pFragmentShadingRateCount, + VkPhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceFragmentShadingRatesKHR( physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates ); + } + + void vkCmdSetFragmentShadingRateKHR( VkCommandBuffer commandBuffer, + const VkExtent2D * pFragmentSize, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetFragmentShadingRateKHR( commandBuffer, pFragmentSize, combinerOps ); + } + + //=== VK_KHR_dynamic_rendering_local_read === + + void vkCmdSetRenderingAttachmentLocationsKHR( VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo * pLocationInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRenderingAttachmentLocationsKHR( commandBuffer, pLocationInfo ); + } + + void vkCmdSetRenderingInputAttachmentIndicesKHR( VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRenderingInputAttachmentIndicesKHR( commandBuffer, pInputAttachmentIndexInfo ); + } + + //=== VK_EXT_buffer_device_address === + + VkDeviceAddress vkGetBufferDeviceAddressEXT( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferDeviceAddressEXT( device, pInfo ); + } + + //=== VK_EXT_tooling_info === + + VkResult vkGetPhysicalDeviceToolPropertiesEXT( VkPhysicalDevice physicalDevice, + uint32_t * pToolCount, + VkPhysicalDeviceToolProperties * pToolProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceToolPropertiesEXT( physicalDevice, pToolCount, pToolProperties ); + } + + //=== VK_KHR_present_wait === + + VkResult vkWaitForPresentKHR( VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWaitForPresentKHR( device, swapchain, presentId, timeout ); + } + + //=== VK_NV_cooperative_matrix === + + VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkCooperativeMatrixPropertiesNV * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( physicalDevice, pPropertyCount, pProperties ); + } + + //=== VK_NV_coverage_reduction_mode === + + VkResult vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + VkPhysicalDevice physicalDevice, uint32_t * pCombinationCount, VkFramebufferMixedSamplesCombinationNV * pCombinations ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( physicalDevice, pCombinationCount, pCombinations ); + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + VkResult vkGetPhysicalDeviceSurfacePresentModes2EXT( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + uint32_t * pPresentModeCount, + VkPresentModeKHR * pPresentModes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceSurfacePresentModes2EXT( physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes ); + } + + VkResult vkAcquireFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireFullScreenExclusiveModeEXT( device, swapchain ); + } + + VkResult vkReleaseFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleaseFullScreenExclusiveModeEXT( device, swapchain ); + } + + VkResult vkGetDeviceGroupSurfacePresentModes2EXT( VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR * pModes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceGroupSurfacePresentModes2EXT( device, pSurfaceInfo, pModes ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + + VkResult vkCreateHeadlessSurfaceEXT( VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateHeadlessSurfaceEXT( instance, pCreateInfo, pAllocator, pSurface ); + } + + //=== VK_KHR_buffer_device_address === + + VkDeviceAddress vkGetBufferDeviceAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferDeviceAddressKHR( device, pInfo ); + } + + uint64_t vkGetBufferOpaqueCaptureAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferOpaqueCaptureAddressKHR( device, pInfo ); + } + + uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR( VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceMemoryOpaqueCaptureAddressKHR( device, pInfo ); + } + + //=== VK_EXT_line_rasterization === + + void vkCmdSetLineStippleEXT( VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLineStippleEXT( commandBuffer, lineStippleFactor, lineStipplePattern ); + } + + //=== VK_EXT_host_query_reset === + + void vkResetQueryPoolEXT( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT + { + return ::vkResetQueryPoolEXT( device, queryPool, firstQuery, queryCount ); + } + + //=== VK_EXT_extended_dynamic_state === + + void vkCmdSetCullModeEXT( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCullModeEXT( commandBuffer, cullMode ); + } + + void vkCmdSetFrontFaceEXT( VkCommandBuffer commandBuffer, VkFrontFace frontFace ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetFrontFaceEXT( commandBuffer, frontFace ); + } + + void vkCmdSetPrimitiveTopologyEXT( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPrimitiveTopologyEXT( commandBuffer, primitiveTopology ); + } + + void vkCmdSetViewportWithCountEXT( VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewportWithCountEXT( commandBuffer, viewportCount, pViewports ); + } + + void vkCmdSetScissorWithCountEXT( VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetScissorWithCountEXT( commandBuffer, scissorCount, pScissors ); + } + + void vkCmdBindVertexBuffers2EXT( VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer * pBuffers, + const VkDeviceSize * pOffsets, + const VkDeviceSize * pSizes, + const VkDeviceSize * pStrides ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindVertexBuffers2EXT( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides ); + } + + void vkCmdSetDepthTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthTestEnableEXT( commandBuffer, depthTestEnable ); + } + + void vkCmdSetDepthWriteEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthWriteEnableEXT( commandBuffer, depthWriteEnable ); + } + + void vkCmdSetDepthCompareOpEXT( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthCompareOpEXT( commandBuffer, depthCompareOp ); + } + + void vkCmdSetDepthBoundsTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBoundsTestEnableEXT( commandBuffer, depthBoundsTestEnable ); + } + + void vkCmdSetStencilTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilTestEnableEXT( commandBuffer, stencilTestEnable ); + } + + void vkCmdSetStencilOpEXT( VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetStencilOpEXT( commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp ); + } + + //=== VK_KHR_deferred_host_operations === + + VkResult vkCreateDeferredOperationKHR( VkDevice device, + const VkAllocationCallbacks * pAllocator, + VkDeferredOperationKHR * pDeferredOperation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDeferredOperationKHR( device, pAllocator, pDeferredOperation ); + } + + void + vkDestroyDeferredOperationKHR( VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDeferredOperationKHR( device, operation, pAllocator ); + } + + uint32_t vkGetDeferredOperationMaxConcurrencyKHR( VkDevice device, VkDeferredOperationKHR operation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeferredOperationMaxConcurrencyKHR( device, operation ); + } + + VkResult vkGetDeferredOperationResultKHR( VkDevice device, VkDeferredOperationKHR operation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeferredOperationResultKHR( device, operation ); + } + + VkResult vkDeferredOperationJoinKHR( VkDevice device, VkDeferredOperationKHR operation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDeferredOperationJoinKHR( device, operation ); + } + + //=== VK_KHR_pipeline_executable_properties === + + VkResult vkGetPipelineExecutablePropertiesKHR( VkDevice device, + const VkPipelineInfoKHR * pPipelineInfo, + uint32_t * pExecutableCount, + VkPipelineExecutablePropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineExecutablePropertiesKHR( device, pPipelineInfo, pExecutableCount, pProperties ); + } + + VkResult vkGetPipelineExecutableStatisticsKHR( VkDevice device, + const VkPipelineExecutableInfoKHR * pExecutableInfo, + uint32_t * pStatisticCount, + VkPipelineExecutableStatisticKHR * pStatistics ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineExecutableStatisticsKHR( device, pExecutableInfo, pStatisticCount, pStatistics ); + } + + VkResult + vkGetPipelineExecutableInternalRepresentationsKHR( VkDevice device, + const VkPipelineExecutableInfoKHR * pExecutableInfo, + uint32_t * pInternalRepresentationCount, + VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineExecutableInternalRepresentationsKHR( device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations ); + } + + //=== VK_EXT_host_image_copy === + + VkResult vkCopyMemoryToImageEXT( VkDevice device, const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyMemoryToImageEXT( device, pCopyMemoryToImageInfo ); + } + + VkResult vkCopyImageToMemoryEXT( VkDevice device, const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyImageToMemoryEXT( device, pCopyImageToMemoryInfo ); + } + + VkResult vkCopyImageToImageEXT( VkDevice device, const VkCopyImageToImageInfo * pCopyImageToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyImageToImageEXT( device, pCopyImageToImageInfo ); + } + + VkResult + vkTransitionImageLayoutEXT( VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo * pTransitions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkTransitionImageLayoutEXT( device, transitionCount, pTransitions ); + } + + void vkGetImageSubresourceLayout2EXT( VkDevice device, + VkImage image, + const VkImageSubresource2 * pSubresource, + VkSubresourceLayout2 * pLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSubresourceLayout2EXT( device, image, pSubresource, pLayout ); + } + + //=== VK_KHR_map_memory2 === + + VkResult vkMapMemory2KHR( VkDevice device, const VkMemoryMapInfo * pMemoryMapInfo, void ** ppData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkMapMemory2KHR( device, pMemoryMapInfo, ppData ); + } + + VkResult vkUnmapMemory2KHR( VkDevice device, const VkMemoryUnmapInfo * pMemoryUnmapInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUnmapMemory2KHR( device, pMemoryUnmapInfo ); + } + + //=== VK_EXT_swapchain_maintenance1 === + + VkResult vkReleaseSwapchainImagesEXT( VkDevice device, const VkReleaseSwapchainImagesInfoKHR * pReleaseInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleaseSwapchainImagesEXT( device, pReleaseInfo ); + } + + //=== VK_NV_device_generated_commands === + + void vkGetGeneratedCommandsMemoryRequirementsNV( VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoNV * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetGeneratedCommandsMemoryRequirementsNV( device, pInfo, pMemoryRequirements ); + } + + void vkCmdPreprocessGeneratedCommandsNV( VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoNV * pGeneratedCommandsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPreprocessGeneratedCommandsNV( commandBuffer, pGeneratedCommandsInfo ); + } + + void vkCmdExecuteGeneratedCommandsNV( VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoNV * pGeneratedCommandsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdExecuteGeneratedCommandsNV( commandBuffer, isPreprocessed, pGeneratedCommandsInfo ); + } + + void vkCmdBindPipelineShaderGroupNV( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline, + uint32_t groupIndex ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindPipelineShaderGroupNV( commandBuffer, pipelineBindPoint, pipeline, groupIndex ); + } + + VkResult vkCreateIndirectCommandsLayoutNV( VkDevice device, + const VkIndirectCommandsLayoutCreateInfoNV * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkIndirectCommandsLayoutNV * pIndirectCommandsLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateIndirectCommandsLayoutNV( device, pCreateInfo, pAllocator, pIndirectCommandsLayout ); + } + + void vkDestroyIndirectCommandsLayoutNV( VkDevice device, + VkIndirectCommandsLayoutNV indirectCommandsLayout, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyIndirectCommandsLayoutNV( device, indirectCommandsLayout, pAllocator ); + } + + //=== VK_EXT_depth_bias_control === + + void vkCmdSetDepthBias2EXT( VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT * pDepthBiasInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBias2EXT( commandBuffer, pDepthBiasInfo ); + } + + //=== VK_EXT_acquire_drm_display === + + VkResult vkAcquireDrmDisplayEXT( VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireDrmDisplayEXT( physicalDevice, drmFd, display ); + } + + VkResult vkGetDrmDisplayEXT( VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR * display ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDrmDisplayEXT( physicalDevice, drmFd, connectorId, display ); + } + + //=== VK_EXT_private_data === + + VkResult vkCreatePrivateDataSlotEXT( VkDevice device, + const VkPrivateDataSlotCreateInfo * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkPrivateDataSlot * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreatePrivateDataSlotEXT( device, pCreateInfo, pAllocator, pPrivateDataSlot ); + } + + void vkDestroyPrivateDataSlotEXT( VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyPrivateDataSlotEXT( device, privateDataSlot, pAllocator ); + } + + VkResult vkSetPrivateDataEXT( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkSetPrivateDataEXT( device, objectType, objectHandle, privateDataSlot, data ); + } + + void vkGetPrivateDataEXT( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t * pData ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkGetPrivateDataEXT( device, objectType, objectHandle, privateDataSlot, pData ); + } + + //=== VK_KHR_video_encode_queue === + + VkResult + vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR * pQualityLevelInfo, + VkVideoEncodeQualityLevelPropertiesKHR * pQualityLevelProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( physicalDevice, pQualityLevelInfo, pQualityLevelProperties ); + } + + VkResult vkGetEncodedVideoSessionParametersKHR( VkDevice device, + const VkVideoEncodeSessionParametersGetInfoKHR * pVideoSessionParametersInfo, + VkVideoEncodeSessionParametersFeedbackInfoKHR * pFeedbackInfo, + size_t * pDataSize, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetEncodedVideoSessionParametersKHR( device, pVideoSessionParametersInfo, pFeedbackInfo, pDataSize, pData ); + } + + void vkCmdEncodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR * pEncodeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEncodeVideoKHR( commandBuffer, pEncodeInfo ); + } + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + VkResult vkCreateCudaModuleNV( VkDevice device, + const VkCudaModuleCreateInfoNV * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkCudaModuleNV * pModule ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateCudaModuleNV( device, pCreateInfo, pAllocator, pModule ); + } + + VkResult vkGetCudaModuleCacheNV( VkDevice device, VkCudaModuleNV module, size_t * pCacheSize, void * pCacheData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetCudaModuleCacheNV( device, module, pCacheSize, pCacheData ); + } + + VkResult vkCreateCudaFunctionNV( VkDevice device, + const VkCudaFunctionCreateInfoNV * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkCudaFunctionNV * pFunction ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateCudaFunctionNV( device, pCreateInfo, pAllocator, pFunction ); + } + + void vkDestroyCudaModuleNV( VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyCudaModuleNV( device, module, pAllocator ); + } + + void vkDestroyCudaFunctionNV( VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyCudaFunctionNV( device, function, pAllocator ); + } + + void vkCmdCudaLaunchKernelNV( VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV * pLaunchInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCudaLaunchKernelNV( commandBuffer, pLaunchInfo ); + } +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + + void vkCmdDispatchTileQCOM( VkCommandBuffer commandBuffer, const VkDispatchTileInfoQCOM * pDispatchTileInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchTileQCOM( commandBuffer, pDispatchTileInfo ); + } + + void vkCmdBeginPerTileExecutionQCOM( VkCommandBuffer commandBuffer, const VkPerTileBeginInfoQCOM * pPerTileBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBeginPerTileExecutionQCOM( commandBuffer, pPerTileBeginInfo ); + } + + void vkCmdEndPerTileExecutionQCOM( VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM * pPerTileEndInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndPerTileExecutionQCOM( commandBuffer, pPerTileEndInfo ); + } + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + void vkExportMetalObjectsEXT( VkDevice device, VkExportMetalObjectsInfoEXT * pMetalObjectsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkExportMetalObjectsEXT( device, pMetalObjectsInfo ); + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + + void vkCmdSetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetEvent2KHR( commandBuffer, event, pDependencyInfo ); + } + + void vkCmdResetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResetEvent2KHR( commandBuffer, event, stageMask ); + } + + void vkCmdWaitEvents2KHR( VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent * pEvents, + const VkDependencyInfo * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWaitEvents2KHR( commandBuffer, eventCount, pEvents, pDependencyInfos ); + } + + void vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer, const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPipelineBarrier2KHR( commandBuffer, pDependencyInfo ); + } + + void + vkCmdWriteTimestamp2KHR( VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteTimestamp2KHR( commandBuffer, stage, queryPool, query ); + } + + VkResult vkQueueSubmit2KHR( VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 * pSubmits, VkFence fence ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueSubmit2KHR( queue, submitCount, pSubmits, fence ); + } + + //=== VK_EXT_descriptor_buffer === + + void vkGetDescriptorSetLayoutSizeEXT( VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize * pLayoutSizeInBytes ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorSetLayoutSizeEXT( device, layout, pLayoutSizeInBytes ); + } + + void vkGetDescriptorSetLayoutBindingOffsetEXT( VkDevice device, + VkDescriptorSetLayout layout, + uint32_t binding, + VkDeviceSize * pOffset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorSetLayoutBindingOffsetEXT( device, layout, binding, pOffset ); + } + + void vkGetDescriptorEXT( VkDevice device, const VkDescriptorGetInfoEXT * pDescriptorInfo, size_t dataSize, void * pDescriptor ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorEXT( device, pDescriptorInfo, dataSize, pDescriptor ); + } + + void vkCmdBindDescriptorBuffersEXT( VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT * pBindingInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindDescriptorBuffersEXT( commandBuffer, bufferCount, pBindingInfos ); + } + + void vkCmdSetDescriptorBufferOffsetsEXT( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t * pBufferIndices, + const VkDeviceSize * pOffsets ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDescriptorBufferOffsetsEXT( commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets ); + } + + void vkCmdBindDescriptorBufferEmbeddedSamplersEXT( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindDescriptorBufferEmbeddedSamplersEXT( commandBuffer, pipelineBindPoint, layout, set ); + } + + VkResult + vkGetBufferOpaqueCaptureDescriptorDataEXT( VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT * pInfo, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferOpaqueCaptureDescriptorDataEXT( device, pInfo, pData ); + } + + VkResult + vkGetImageOpaqueCaptureDescriptorDataEXT( VkDevice device, const VkImageCaptureDescriptorDataInfoEXT * pInfo, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageOpaqueCaptureDescriptorDataEXT( device, pInfo, pData ); + } + + VkResult vkGetImageViewOpaqueCaptureDescriptorDataEXT( VkDevice device, + const VkImageViewCaptureDescriptorDataInfoEXT * pInfo, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageViewOpaqueCaptureDescriptorDataEXT( device, pInfo, pData ); + } + + VkResult vkGetSamplerOpaqueCaptureDescriptorDataEXT( VkDevice device, + const VkSamplerCaptureDescriptorDataInfoEXT * pInfo, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSamplerOpaqueCaptureDescriptorDataEXT( device, pInfo, pData ); + } + + VkResult vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( VkDevice device, + const VkAccelerationStructureCaptureDescriptorDataInfoEXT * pInfo, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( device, pInfo, pData ); + } + + //=== VK_NV_fragment_shading_rate_enums === + + void vkCmdSetFragmentShadingRateEnumNV( VkCommandBuffer commandBuffer, + VkFragmentShadingRateNV shadingRate, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetFragmentShadingRateEnumNV( commandBuffer, shadingRate, combinerOps ); + } + + //=== VK_EXT_mesh_shader === + + void vkCmdDrawMeshTasksEXT( VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMeshTasksEXT( commandBuffer, groupCountX, groupCountY, groupCountZ ); + } + + void vkCmdDrawMeshTasksIndirectEXT( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMeshTasksIndirectEXT( commandBuffer, buffer, offset, drawCount, stride ); + } + + void vkCmdDrawMeshTasksIndirectCountEXT( VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMeshTasksIndirectCountEXT( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); + } + + //=== VK_KHR_copy_commands2 === + + void vkCmdCopyBuffer2KHR( VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyBuffer2KHR( commandBuffer, pCopyBufferInfo ); + } + + void vkCmdCopyImage2KHR( VkCommandBuffer commandBuffer, const VkCopyImageInfo2 * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyImage2KHR( commandBuffer, pCopyImageInfo ); + } + + void vkCmdCopyBufferToImage2KHR( VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyBufferToImage2KHR( commandBuffer, pCopyBufferToImageInfo ); + } + + void vkCmdCopyImageToBuffer2KHR( VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyImageToBuffer2KHR( commandBuffer, pCopyImageToBufferInfo ); + } + + void vkCmdBlitImage2KHR( VkCommandBuffer commandBuffer, const VkBlitImageInfo2 * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBlitImage2KHR( commandBuffer, pBlitImageInfo ); + } + + void vkCmdResolveImage2KHR( VkCommandBuffer commandBuffer, const VkResolveImageInfo2 * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdResolveImage2KHR( commandBuffer, pResolveImageInfo ); + } + + //=== VK_EXT_device_fault === + + VkResult vkGetDeviceFaultInfoEXT( VkDevice device, VkDeviceFaultCountsEXT * pFaultCounts, VkDeviceFaultInfoEXT * pFaultInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceFaultInfoEXT( device, pFaultCounts, pFaultInfo ); + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + + VkResult vkAcquireWinrtDisplayNV( VkPhysicalDevice physicalDevice, VkDisplayKHR display ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAcquireWinrtDisplayNV( physicalDevice, display ); + } + + VkResult vkGetWinrtDisplayNV( VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR * pDisplay ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetWinrtDisplayNV( physicalDevice, deviceRelativeId, pDisplay ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + VkResult vkCreateDirectFBSurfaceEXT( VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDirectFBSurfaceEXT( instance, pCreateInfo, pAllocator, pSurface ); + } + + VkBool32 vkGetPhysicalDeviceDirectFBPresentationSupportEXT( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + IDirectFB * dfb ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceDirectFBPresentationSupportEXT( physicalDevice, queueFamilyIndex, dfb ); + } +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + + void vkCmdSetVertexInputEXT( VkCommandBuffer commandBuffer, + uint32_t vertexBindingDescriptionCount, + const VkVertexInputBindingDescription2EXT * pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VkVertexInputAttributeDescription2EXT * pVertexAttributeDescriptions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetVertexInputEXT( + commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions ); + } + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + + VkResult vkGetMemoryZirconHandleFUCHSIA( VkDevice device, + const VkMemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, + zx_handle_t * pZirconHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryZirconHandleFUCHSIA( device, pGetZirconHandleInfo, pZirconHandle ); + } + + VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA( VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + VkMemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryZirconHandlePropertiesFUCHSIA( device, handleType, zirconHandle, pMemoryZirconHandleProperties ); + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + + VkResult + vkImportSemaphoreZirconHandleFUCHSIA( VkDevice device, + const VkImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkImportSemaphoreZirconHandleFUCHSIA( device, pImportSemaphoreZirconHandleInfo ); + } + + VkResult vkGetSemaphoreZirconHandleFUCHSIA( VkDevice device, + const VkSemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, + zx_handle_t * pZirconHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetSemaphoreZirconHandleFUCHSIA( device, pGetZirconHandleInfo, pZirconHandle ); + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + VkResult vkCreateBufferCollectionFUCHSIA( VkDevice device, + const VkBufferCollectionCreateInfoFUCHSIA * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkBufferCollectionFUCHSIA * pCollection ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateBufferCollectionFUCHSIA( device, pCreateInfo, pAllocator, pCollection ); + } + + VkResult vkSetBufferCollectionImageConstraintsFUCHSIA( VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkImageConstraintsInfoFUCHSIA * pImageConstraintsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetBufferCollectionImageConstraintsFUCHSIA( device, collection, pImageConstraintsInfo ); + } + + VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA( VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkBufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetBufferCollectionBufferConstraintsFUCHSIA( device, collection, pBufferConstraintsInfo ); + } + + void vkDestroyBufferCollectionFUCHSIA( VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyBufferCollectionFUCHSIA( device, collection, pAllocator ); + } + + VkResult vkGetBufferCollectionPropertiesFUCHSIA( VkDevice device, + VkBufferCollectionFUCHSIA collection, + VkBufferCollectionPropertiesFUCHSIA * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetBufferCollectionPropertiesFUCHSIA( device, collection, pProperties ); + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + + VkResult + vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( VkDevice device, VkRenderPass renderpass, VkExtent2D * pMaxWorkgroupSize ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( device, renderpass, pMaxWorkgroupSize ); + } + + void vkCmdSubpassShadingHUAWEI( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSubpassShadingHUAWEI( commandBuffer ); + } + + //=== VK_HUAWEI_invocation_mask === + + void vkCmdBindInvocationMaskHUAWEI( VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindInvocationMaskHUAWEI( commandBuffer, imageView, imageLayout ); + } + + //=== VK_NV_external_memory_rdma === + + VkResult vkGetMemoryRemoteAddressNV( VkDevice device, + const VkMemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV * pAddress ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryRemoteAddressNV( device, pMemoryGetRemoteAddressInfo, pAddress ); + } + + //=== VK_EXT_pipeline_properties === + + VkResult vkGetPipelinePropertiesEXT( VkDevice device, + const VkPipelineInfoEXT * pPipelineInfo, + VkBaseOutStructure * pPipelineProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelinePropertiesEXT( device, pPipelineInfo, pPipelineProperties ); + } + + //=== VK_EXT_extended_dynamic_state2 === + + void vkCmdSetPatchControlPointsEXT( VkCommandBuffer commandBuffer, uint32_t patchControlPoints ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPatchControlPointsEXT( commandBuffer, patchControlPoints ); + } + + void vkCmdSetRasterizerDiscardEnableEXT( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRasterizerDiscardEnableEXT( commandBuffer, rasterizerDiscardEnable ); + } + + void vkCmdSetDepthBiasEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthBiasEnableEXT( commandBuffer, depthBiasEnable ); + } + + void vkCmdSetLogicOpEXT( VkCommandBuffer commandBuffer, VkLogicOp logicOp ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLogicOpEXT( commandBuffer, logicOp ); + } + + void vkCmdSetPrimitiveRestartEnableEXT( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPrimitiveRestartEnableEXT( commandBuffer, primitiveRestartEnable ); + } + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + VkResult vkCreateScreenSurfaceQNX( VkInstance instance, + const VkScreenSurfaceCreateInfoQNX * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateScreenSurfaceQNX( instance, pCreateInfo, pAllocator, pSurface ); + } + + VkBool32 vkGetPhysicalDeviceScreenPresentationSupportQNX( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct _screen_window * window ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceScreenPresentationSupportQNX( physicalDevice, queueFamilyIndex, window ); + } +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + + void vkCmdSetColorWriteEnableEXT( VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32 * pColorWriteEnables ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetColorWriteEnableEXT( commandBuffer, attachmentCount, pColorWriteEnables ); + } + + //=== VK_KHR_ray_tracing_maintenance1 === + + void vkCmdTraceRaysIndirect2KHR( VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdTraceRaysIndirect2KHR( commandBuffer, indirectDeviceAddress ); + } + + //=== VK_EXT_multi_draw === + + void vkCmdDrawMultiEXT( VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawInfoEXT * pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMultiEXT( commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride ); + } + + void vkCmdDrawMultiIndexedEXT( VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawIndexedInfoEXT * pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t * pVertexOffset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawMultiIndexedEXT( commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset ); + } + + //=== VK_EXT_opacity_micromap === + + VkResult vkCreateMicromapEXT( VkDevice device, + const VkMicromapCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkMicromapEXT * pMicromap ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateMicromapEXT( device, pCreateInfo, pAllocator, pMicromap ); + } + + void vkDestroyMicromapEXT( VkDevice device, VkMicromapEXT micromap, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyMicromapEXT( device, micromap, pAllocator ); + } + + void vkCmdBuildMicromapsEXT( VkCommandBuffer commandBuffer, uint32_t infoCount, const VkMicromapBuildInfoEXT * pInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBuildMicromapsEXT( commandBuffer, infoCount, pInfos ); + } + + VkResult vkBuildMicromapsEXT( VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkMicromapBuildInfoEXT * pInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBuildMicromapsEXT( device, deferredOperation, infoCount, pInfos ); + } + + VkResult vkCopyMicromapEXT( VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapInfoEXT * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyMicromapEXT( device, deferredOperation, pInfo ); + } + + VkResult vkCopyMicromapToMemoryEXT( VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapToMemoryInfoEXT * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyMicromapToMemoryEXT( device, deferredOperation, pInfo ); + } + + VkResult vkCopyMemoryToMicromapEXT( VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToMicromapInfoEXT * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCopyMemoryToMicromapEXT( device, deferredOperation, pInfo ); + } + + VkResult vkWriteMicromapsPropertiesEXT( VkDevice device, + uint32_t micromapCount, + const VkMicromapEXT * pMicromaps, + VkQueryType queryType, + size_t dataSize, + void * pData, + size_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWriteMicromapsPropertiesEXT( device, micromapCount, pMicromaps, queryType, dataSize, pData, stride ); + } + + void vkCmdCopyMicromapEXT( VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyMicromapEXT( commandBuffer, pInfo ); + } + + void vkCmdCopyMicromapToMemoryEXT( VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyMicromapToMemoryEXT( commandBuffer, pInfo ); + } + + void vkCmdCopyMemoryToMicromapEXT( VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyMemoryToMicromapEXT( commandBuffer, pInfo ); + } + + void vkCmdWriteMicromapsPropertiesEXT( VkCommandBuffer commandBuffer, + uint32_t micromapCount, + const VkMicromapEXT * pMicromaps, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdWriteMicromapsPropertiesEXT( commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery ); + } + + void vkGetDeviceMicromapCompatibilityEXT( VkDevice device, + const VkMicromapVersionInfoEXT * pVersionInfo, + VkAccelerationStructureCompatibilityKHR * pCompatibility ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceMicromapCompatibilityEXT( device, pVersionInfo, pCompatibility ); + } + + void vkGetMicromapBuildSizesEXT( VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkMicromapBuildInfoEXT * pBuildInfo, + VkMicromapBuildSizesInfoEXT * pSizeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMicromapBuildSizesEXT( device, buildType, pBuildInfo, pSizeInfo ); + } + + //=== VK_HUAWEI_cluster_culling_shader === + + void vkCmdDrawClusterHUAWEI( VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawClusterHUAWEI( commandBuffer, groupCountX, groupCountY, groupCountZ ); + } + + void vkCmdDrawClusterIndirectHUAWEI( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDrawClusterIndirectHUAWEI( commandBuffer, buffer, offset ); + } + + //=== VK_EXT_pageable_device_local_memory === + + void vkSetDeviceMemoryPriorityEXT( VkDevice device, VkDeviceMemory memory, float priority ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetDeviceMemoryPriorityEXT( device, memory, priority ); + } + + //=== VK_KHR_maintenance4 === + + void vkGetDeviceBufferMemoryRequirementsKHR( VkDevice device, + const VkDeviceBufferMemoryRequirements * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceBufferMemoryRequirementsKHR( device, pInfo, pMemoryRequirements ); + } + + void vkGetDeviceImageMemoryRequirementsKHR( VkDevice device, + const VkDeviceImageMemoryRequirements * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceImageMemoryRequirementsKHR( device, pInfo, pMemoryRequirements ); + } + + void vkGetDeviceImageSparseMemoryRequirementsKHR( VkDevice device, + const VkDeviceImageMemoryRequirements * pInfo, + uint32_t * pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceImageSparseMemoryRequirementsKHR( device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); + } + + //=== VK_VALVE_descriptor_set_host_mapping === + + void vkGetDescriptorSetLayoutHostMappingInfoVALVE( VkDevice device, + const VkDescriptorSetBindingReferenceVALVE * pBindingReference, + VkDescriptorSetLayoutHostMappingInfoVALVE * pHostMapping ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorSetLayoutHostMappingInfoVALVE( device, pBindingReference, pHostMapping ); + } + + void vkGetDescriptorSetHostMappingVALVE( VkDevice device, VkDescriptorSet descriptorSet, void ** ppData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDescriptorSetHostMappingVALVE( device, descriptorSet, ppData ); + } + + //=== VK_NV_copy_memory_indirect === + + void vkCmdCopyMemoryIndirectNV( VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyMemoryIndirectNV( commandBuffer, copyBufferAddress, copyCount, stride ); + } + + void vkCmdCopyMemoryToImageIndirectNV( VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + VkImage dstImage, + VkImageLayout dstImageLayout, + const VkImageSubresourceLayers * pImageSubresources ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyMemoryToImageIndirectNV( commandBuffer, copyBufferAddress, copyCount, stride, dstImage, dstImageLayout, pImageSubresources ); + } + + //=== VK_NV_memory_decompression === + + void vkCmdDecompressMemoryNV( VkCommandBuffer commandBuffer, + uint32_t decompressRegionCount, + const VkDecompressMemoryRegionNV * pDecompressMemoryRegions ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDecompressMemoryNV( commandBuffer, decompressRegionCount, pDecompressMemoryRegions ); + } + + void vkCmdDecompressMemoryIndirectCountNV( VkCommandBuffer commandBuffer, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDecompressMemoryIndirectCountNV( commandBuffer, indirectCommandsAddress, indirectCommandsCountAddress, stride ); + } + + //=== VK_NV_device_generated_commands_compute === + + void vkGetPipelineIndirectMemoryRequirementsNV( VkDevice device, + const VkComputePipelineCreateInfo * pCreateInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineIndirectMemoryRequirementsNV( device, pCreateInfo, pMemoryRequirements ); + } + + void vkCmdUpdatePipelineIndirectBufferNV( VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdUpdatePipelineIndirectBufferNV( commandBuffer, pipelineBindPoint, pipeline ); + } + + VkDeviceAddress vkGetPipelineIndirectDeviceAddressNV( VkDevice device, const VkPipelineIndirectDeviceAddressInfoNV * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineIndirectDeviceAddressNV( device, pInfo ); + } + + //=== VK_EXT_extended_dynamic_state3 === + + void vkCmdSetDepthClampEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthClampEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthClampEnableEXT( commandBuffer, depthClampEnable ); + } + + void vkCmdSetPolygonModeEXT( VkCommandBuffer commandBuffer, VkPolygonMode polygonMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetPolygonModeEXT( commandBuffer, polygonMode ); + } + + void vkCmdSetRasterizationSamplesEXT( VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRasterizationSamplesEXT( commandBuffer, rasterizationSamples ); + } + + void vkCmdSetSampleMaskEXT( VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask * pSampleMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetSampleMaskEXT( commandBuffer, samples, pSampleMask ); + } + + void vkCmdSetAlphaToCoverageEnableEXT( VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetAlphaToCoverageEnableEXT( commandBuffer, alphaToCoverageEnable ); + } + + void vkCmdSetAlphaToOneEnableEXT( VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetAlphaToOneEnableEXT( commandBuffer, alphaToOneEnable ); + } + + void vkCmdSetLogicOpEnableEXT( VkCommandBuffer commandBuffer, VkBool32 logicOpEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLogicOpEnableEXT( commandBuffer, logicOpEnable ); + } + + void vkCmdSetColorBlendEnableEXT( VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkBool32 * pColorBlendEnables ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetColorBlendEnableEXT( commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables ); + } + + void vkCmdSetColorBlendEquationEXT( VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendEquationEXT * pColorBlendEquations ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetColorBlendEquationEXT( commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations ); + } + + void vkCmdSetColorWriteMaskEXT( VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorComponentFlags * pColorWriteMasks ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetColorWriteMaskEXT( commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks ); + } + + void vkCmdSetTessellationDomainOriginEXT( VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetTessellationDomainOriginEXT( commandBuffer, domainOrigin ); + } + + void vkCmdSetRasterizationStreamEXT( VkCommandBuffer commandBuffer, uint32_t rasterizationStream ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRasterizationStreamEXT( commandBuffer, rasterizationStream ); + } + + void vkCmdSetConservativeRasterizationModeEXT( VkCommandBuffer commandBuffer, + VkConservativeRasterizationModeEXT conservativeRasterizationMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetConservativeRasterizationModeEXT( commandBuffer, conservativeRasterizationMode ); + } + + void vkCmdSetExtraPrimitiveOverestimationSizeEXT( VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetExtraPrimitiveOverestimationSizeEXT( commandBuffer, extraPrimitiveOverestimationSize ); + } + + void vkCmdSetDepthClipEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthClipEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthClipEnableEXT( commandBuffer, depthClipEnable ); + } + + void vkCmdSetSampleLocationsEnableEXT( VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetSampleLocationsEnableEXT( commandBuffer, sampleLocationsEnable ); + } + + void vkCmdSetColorBlendAdvancedEXT( VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendAdvancedEXT * pColorBlendAdvanced ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetColorBlendAdvancedEXT( commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced ); + } + + void vkCmdSetProvokingVertexModeEXT( VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetProvokingVertexModeEXT( commandBuffer, provokingVertexMode ); + } + + void vkCmdSetLineRasterizationModeEXT( VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLineRasterizationModeEXT( commandBuffer, lineRasterizationMode ); + } + + void vkCmdSetLineStippleEnableEXT( VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLineStippleEnableEXT( commandBuffer, stippledLineEnable ); + } + + void vkCmdSetDepthClipNegativeOneToOneEXT( VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthClipNegativeOneToOneEXT( commandBuffer, negativeOneToOne ); + } + + void vkCmdSetViewportWScalingEnableNV( VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewportWScalingEnableNV( commandBuffer, viewportWScalingEnable ); + } + + void vkCmdSetViewportSwizzleNV( VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportSwizzleNV * pViewportSwizzles ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetViewportSwizzleNV( commandBuffer, firstViewport, viewportCount, pViewportSwizzles ); + } + + void vkCmdSetCoverageToColorEnableNV( VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoverageToColorEnableNV( commandBuffer, coverageToColorEnable ); + } + + void vkCmdSetCoverageToColorLocationNV( VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoverageToColorLocationNV( commandBuffer, coverageToColorLocation ); + } + + void vkCmdSetCoverageModulationModeNV( VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoverageModulationModeNV( commandBuffer, coverageModulationMode ); + } + + void vkCmdSetCoverageModulationTableEnableNV( VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoverageModulationTableEnableNV( commandBuffer, coverageModulationTableEnable ); + } + + void vkCmdSetCoverageModulationTableNV( VkCommandBuffer commandBuffer, + uint32_t coverageModulationTableCount, + const float * pCoverageModulationTable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoverageModulationTableNV( commandBuffer, coverageModulationTableCount, pCoverageModulationTable ); + } + + void vkCmdSetShadingRateImageEnableNV( VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetShadingRateImageEnableNV( commandBuffer, shadingRateImageEnable ); + } + + void vkCmdSetRepresentativeFragmentTestEnableNV( VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetRepresentativeFragmentTestEnableNV( commandBuffer, representativeFragmentTestEnable ); + } + + void vkCmdSetCoverageReductionModeNV( VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetCoverageReductionModeNV( commandBuffer, coverageReductionMode ); + } + + //=== VK_ARM_tensors === + + VkResult vkCreateTensorARM( VkDevice device, + const VkTensorCreateInfoARM * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkTensorARM * pTensor ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateTensorARM( device, pCreateInfo, pAllocator, pTensor ); + } + + void vkDestroyTensorARM( VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyTensorARM( device, tensor, pAllocator ); + } + + VkResult vkCreateTensorViewARM( VkDevice device, + const VkTensorViewCreateInfoARM * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkTensorViewARM * pView ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateTensorViewARM( device, pCreateInfo, pAllocator, pView ); + } + + void vkDestroyTensorViewARM( VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyTensorViewARM( device, tensorView, pAllocator ); + } + + void vkGetTensorMemoryRequirementsARM( VkDevice device, + const VkTensorMemoryRequirementsInfoARM * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetTensorMemoryRequirementsARM( device, pInfo, pMemoryRequirements ); + } + + VkResult vkBindTensorMemoryARM( VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindTensorMemoryARM( device, bindInfoCount, pBindInfos ); + } + + void vkGetDeviceTensorMemoryRequirementsARM( VkDevice device, + const VkDeviceTensorMemoryRequirementsARM * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceTensorMemoryRequirementsARM( device, pInfo, pMemoryRequirements ); + } + + void vkCmdCopyTensorARM( VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM * pCopyTensorInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdCopyTensorARM( commandBuffer, pCopyTensorInfo ); + } + + void vkGetPhysicalDeviceExternalTensorPropertiesARM( VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalTensorInfoARM * pExternalTensorInfo, + VkExternalTensorPropertiesARM * pExternalTensorProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceExternalTensorPropertiesARM( physicalDevice, pExternalTensorInfo, pExternalTensorProperties ); + } + + VkResult + vkGetTensorOpaqueCaptureDescriptorDataARM( VkDevice device, const VkTensorCaptureDescriptorDataInfoARM * pInfo, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetTensorOpaqueCaptureDescriptorDataARM( device, pInfo, pData ); + } + + VkResult vkGetTensorViewOpaqueCaptureDescriptorDataARM( VkDevice device, + const VkTensorViewCaptureDescriptorDataInfoARM * pInfo, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetTensorViewOpaqueCaptureDescriptorDataARM( device, pInfo, pData ); + } + + //=== VK_EXT_shader_module_identifier === + + void vkGetShaderModuleIdentifierEXT( VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT * pIdentifier ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetShaderModuleIdentifierEXT( device, shaderModule, pIdentifier ); + } + + void vkGetShaderModuleCreateInfoIdentifierEXT( VkDevice device, + const VkShaderModuleCreateInfo * pCreateInfo, + VkShaderModuleIdentifierEXT * pIdentifier ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetShaderModuleCreateInfoIdentifierEXT( device, pCreateInfo, pIdentifier ); + } + + //=== VK_NV_optical_flow === + + VkResult vkGetPhysicalDeviceOpticalFlowImageFormatsNV( VkPhysicalDevice physicalDevice, + const VkOpticalFlowImageFormatInfoNV * pOpticalFlowImageFormatInfo, + uint32_t * pFormatCount, + VkOpticalFlowImageFormatPropertiesNV * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceOpticalFlowImageFormatsNV( physicalDevice, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties ); + } + + VkResult vkCreateOpticalFlowSessionNV( VkDevice device, + const VkOpticalFlowSessionCreateInfoNV * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkOpticalFlowSessionNV * pSession ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateOpticalFlowSessionNV( device, pCreateInfo, pAllocator, pSession ); + } + + void vkDestroyOpticalFlowSessionNV( VkDevice device, VkOpticalFlowSessionNV session, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyOpticalFlowSessionNV( device, session, pAllocator ); + } + + VkResult vkBindOpticalFlowSessionImageNV( VkDevice device, + VkOpticalFlowSessionNV session, + VkOpticalFlowSessionBindingPointNV bindingPoint, + VkImageView view, + VkImageLayout layout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindOpticalFlowSessionImageNV( device, session, bindingPoint, view, layout ); + } + + void vkCmdOpticalFlowExecuteNV( VkCommandBuffer commandBuffer, + VkOpticalFlowSessionNV session, + const VkOpticalFlowExecuteInfoNV * pExecuteInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdOpticalFlowExecuteNV( commandBuffer, session, pExecuteInfo ); + } + + //=== VK_KHR_maintenance5 === + + void vkCmdBindIndexBuffer2KHR( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindIndexBuffer2KHR( commandBuffer, buffer, offset, size, indexType ); + } + + void + vkGetRenderingAreaGranularityKHR( VkDevice device, const VkRenderingAreaInfo * pRenderingAreaInfo, VkExtent2D * pGranularity ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetRenderingAreaGranularityKHR( device, pRenderingAreaInfo, pGranularity ); + } + + void vkGetDeviceImageSubresourceLayoutKHR( VkDevice device, + const VkDeviceImageSubresourceInfo * pInfo, + VkSubresourceLayout2 * pLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDeviceImageSubresourceLayoutKHR( device, pInfo, pLayout ); + } + + void vkGetImageSubresourceLayout2KHR( VkDevice device, + VkImage image, + const VkImageSubresource2 * pSubresource, + VkSubresourceLayout2 * pLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetImageSubresourceLayout2KHR( device, image, pSubresource, pLayout ); + } + + //=== VK_AMD_anti_lag === + + void vkAntiLagUpdateAMD( VkDevice device, const VkAntiLagDataAMD * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkAntiLagUpdateAMD( device, pData ); + } + + //=== VK_KHR_present_wait2 === + + VkResult vkWaitForPresent2KHR( VkDevice device, VkSwapchainKHR swapchain, const VkPresentWait2InfoKHR * pPresentWait2Info ) const VULKAN_HPP_NOEXCEPT + { + return ::vkWaitForPresent2KHR( device, swapchain, pPresentWait2Info ); + } + + //=== VK_EXT_shader_object === + + VkResult vkCreateShadersEXT( VkDevice device, + uint32_t createInfoCount, + const VkShaderCreateInfoEXT * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkShaderEXT * pShaders ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateShadersEXT( device, createInfoCount, pCreateInfos, pAllocator, pShaders ); + } + + void vkDestroyShaderEXT( VkDevice device, VkShaderEXT shader, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyShaderEXT( device, shader, pAllocator ); + } + + VkResult vkGetShaderBinaryDataEXT( VkDevice device, VkShaderEXT shader, size_t * pDataSize, void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetShaderBinaryDataEXT( device, shader, pDataSize, pData ); + } + + void vkCmdBindShadersEXT( VkCommandBuffer commandBuffer, + uint32_t stageCount, + const VkShaderStageFlagBits * pStages, + const VkShaderEXT * pShaders ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindShadersEXT( commandBuffer, stageCount, pStages, pShaders ); + } + + void vkCmdSetDepthClampRangeEXT( VkCommandBuffer commandBuffer, + VkDepthClampModeEXT depthClampMode, + const VkDepthClampRangeEXT * pDepthClampRange ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDepthClampRangeEXT( commandBuffer, depthClampMode, pDepthClampRange ); + } + + //=== VK_KHR_pipeline_binary === + + VkResult vkCreatePipelineBinariesKHR( VkDevice device, + const VkPipelineBinaryCreateInfoKHR * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkPipelineBinaryHandlesInfoKHR * pBinaries ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreatePipelineBinariesKHR( device, pCreateInfo, pAllocator, pBinaries ); + } + + void vkDestroyPipelineBinaryKHR( VkDevice device, VkPipelineBinaryKHR pipelineBinary, const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyPipelineBinaryKHR( device, pipelineBinary, pAllocator ); + } + + VkResult vkGetPipelineKeyKHR( VkDevice device, + const VkPipelineCreateInfoKHR * pPipelineCreateInfo, + VkPipelineBinaryKeyKHR * pPipelineKey ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineKeyKHR( device, pPipelineCreateInfo, pPipelineKey ); + } + + VkResult vkGetPipelineBinaryDataKHR( VkDevice device, + const VkPipelineBinaryDataInfoKHR * pInfo, + VkPipelineBinaryKeyKHR * pPipelineBinaryKey, + size_t * pPipelineBinaryDataSize, + void * pPipelineBinaryData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPipelineBinaryDataKHR( device, pInfo, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData ); + } + + VkResult vkReleaseCapturedPipelineDataKHR( VkDevice device, + const VkReleaseCapturedPipelineDataInfoKHR * pInfo, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleaseCapturedPipelineDataKHR( device, pInfo, pAllocator ); + } + + //=== VK_QCOM_tile_properties === + + VkResult vkGetFramebufferTilePropertiesQCOM( VkDevice device, + VkFramebuffer framebuffer, + uint32_t * pPropertiesCount, + VkTilePropertiesQCOM * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetFramebufferTilePropertiesQCOM( device, framebuffer, pPropertiesCount, pProperties ); + } + + VkResult vkGetDynamicRenderingTilePropertiesQCOM( VkDevice device, + const VkRenderingInfo * pRenderingInfo, + VkTilePropertiesQCOM * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDynamicRenderingTilePropertiesQCOM( device, pRenderingInfo, pProperties ); + } + + //=== VK_KHR_swapchain_maintenance1 === + + VkResult vkReleaseSwapchainImagesKHR( VkDevice device, const VkReleaseSwapchainImagesInfoKHR * pReleaseInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkReleaseSwapchainImagesKHR( device, pReleaseInfo ); + } + + //=== VK_NV_cooperative_vector === + + VkResult vkGetPhysicalDeviceCooperativeVectorPropertiesNV( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkCooperativeVectorPropertiesNV * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceCooperativeVectorPropertiesNV( physicalDevice, pPropertyCount, pProperties ); + } + + VkResult vkConvertCooperativeVectorMatrixNV( VkDevice device, const VkConvertCooperativeVectorMatrixInfoNV * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkConvertCooperativeVectorMatrixNV( device, pInfo ); + } + + void vkCmdConvertCooperativeVectorMatrixNV( VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkConvertCooperativeVectorMatrixInfoNV * pInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdConvertCooperativeVectorMatrixNV( commandBuffer, infoCount, pInfos ); + } + + //=== VK_NV_low_latency2 === + + VkResult vkSetLatencySleepModeNV( VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepModeInfoNV * pSleepModeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetLatencySleepModeNV( device, swapchain, pSleepModeInfo ); + } + + VkResult vkLatencySleepNV( VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepInfoNV * pSleepInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkLatencySleepNV( device, swapchain, pSleepInfo ); + } + + void vkSetLatencyMarkerNV( VkDevice device, VkSwapchainKHR swapchain, const VkSetLatencyMarkerInfoNV * pLatencyMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkSetLatencyMarkerNV( device, swapchain, pLatencyMarkerInfo ); + } + + void vkGetLatencyTimingsNV( VkDevice device, VkSwapchainKHR swapchain, VkGetLatencyMarkerInfoNV * pLatencyMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetLatencyTimingsNV( device, swapchain, pLatencyMarkerInfo ); + } + + void vkQueueNotifyOutOfBandNV( VkQueue queue, const VkOutOfBandQueueTypeInfoNV * pQueueTypeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkQueueNotifyOutOfBandNV( queue, pQueueTypeInfo ); + } + + //=== VK_KHR_cooperative_matrix === + + VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( VkPhysicalDevice physicalDevice, + uint32_t * pPropertyCount, + VkCooperativeMatrixPropertiesKHR * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( physicalDevice, pPropertyCount, pProperties ); + } + + //=== VK_ARM_data_graph === + + VkResult vkCreateDataGraphPipelinesARM( VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkDataGraphPipelineCreateInfoARM * pCreateInfos, + const VkAllocationCallbacks * pAllocator, + VkPipeline * pPipelines ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDataGraphPipelinesARM( device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); + } + + VkResult vkCreateDataGraphPipelineSessionARM( VkDevice device, + const VkDataGraphPipelineSessionCreateInfoARM * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkDataGraphPipelineSessionARM * pSession ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateDataGraphPipelineSessionARM( device, pCreateInfo, pAllocator, pSession ); + } + + VkResult vkGetDataGraphPipelineSessionBindPointRequirementsARM( VkDevice device, + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM * pInfo, + uint32_t * pBindPointRequirementCount, + VkDataGraphPipelineSessionBindPointRequirementARM * pBindPointRequirements ) const + VULKAN_HPP_NOEXCEPT + { + return ::vkGetDataGraphPipelineSessionBindPointRequirementsARM( device, pInfo, pBindPointRequirementCount, pBindPointRequirements ); + } + + void vkGetDataGraphPipelineSessionMemoryRequirementsARM( VkDevice device, + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDataGraphPipelineSessionMemoryRequirementsARM( device, pInfo, pMemoryRequirements ); + } + + VkResult vkBindDataGraphPipelineSessionMemoryARM( VkDevice device, + uint32_t bindInfoCount, + const VkBindDataGraphPipelineSessionMemoryInfoARM * pBindInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkBindDataGraphPipelineSessionMemoryARM( device, bindInfoCount, pBindInfos ); + } + + void vkDestroyDataGraphPipelineSessionARM( VkDevice device, + VkDataGraphPipelineSessionARM session, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyDataGraphPipelineSessionARM( device, session, pAllocator ); + } + + void vkCmdDispatchDataGraphARM( VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM * pInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdDispatchDataGraphARM( commandBuffer, session, pInfo ); + } + + VkResult vkGetDataGraphPipelineAvailablePropertiesARM( VkDevice device, + const VkDataGraphPipelineInfoARM * pPipelineInfo, + uint32_t * pPropertiesCount, + VkDataGraphPipelinePropertyARM * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDataGraphPipelineAvailablePropertiesARM( device, pPipelineInfo, pPropertiesCount, pProperties ); + } + + VkResult vkGetDataGraphPipelinePropertiesARM( VkDevice device, + const VkDataGraphPipelineInfoARM * pPipelineInfo, + uint32_t propertiesCount, + VkDataGraphPipelinePropertyQueryResultARM * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetDataGraphPipelinePropertiesARM( device, pPipelineInfo, propertiesCount, pProperties ); + } + + VkResult + vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t * pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM * pQueueFamilyDataGraphProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + physicalDevice, queueFamilyIndex, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties ); + } + + void vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM * pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM * pQueueFamilyDataGraphProcessingEngineProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + physicalDevice, pQueueFamilyDataGraphProcessingEngineInfo, pQueueFamilyDataGraphProcessingEngineProperties ); + } + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + + void vkCmdSetAttachmentFeedbackLoopEnableEXT( VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetAttachmentFeedbackLoopEnableEXT( commandBuffer, aspectMask ); + } + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + + VkResult vkGetScreenBufferPropertiesQNX( VkDevice device, + const struct _screen_buffer * buffer, + VkScreenBufferPropertiesQNX * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetScreenBufferPropertiesQNX( device, buffer, pProperties ); + } +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + + void vkCmdSetLineStippleKHR( VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetLineStippleKHR( commandBuffer, lineStippleFactor, lineStipplePattern ); + } + + //=== VK_KHR_calibrated_timestamps === + + VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( VkPhysicalDevice physicalDevice, + uint32_t * pTimeDomainCount, + VkTimeDomainKHR * pTimeDomains ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( physicalDevice, pTimeDomainCount, pTimeDomains ); + } + + VkResult vkGetCalibratedTimestampsKHR( VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR * pTimestampInfos, + uint64_t * pTimestamps, + uint64_t * pMaxDeviation ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetCalibratedTimestampsKHR( device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation ); + } + + //=== VK_KHR_maintenance6 === + + void vkCmdBindDescriptorSets2KHR( VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo * pBindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindDescriptorSets2KHR( commandBuffer, pBindDescriptorSetsInfo ); + } + + void vkCmdPushConstants2KHR( VkCommandBuffer commandBuffer, const VkPushConstantsInfo * pPushConstantsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushConstants2KHR( commandBuffer, pPushConstantsInfo ); + } + + void vkCmdPushDescriptorSet2KHR( VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo * pPushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSet2KHR( commandBuffer, pPushDescriptorSetInfo ); + } + + void vkCmdPushDescriptorSetWithTemplate2KHR( VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPushDescriptorSetWithTemplate2KHR( commandBuffer, pPushDescriptorSetWithTemplateInfo ); + } + + void vkCmdSetDescriptorBufferOffsets2EXT( VkCommandBuffer commandBuffer, + const VkSetDescriptorBufferOffsetsInfoEXT * pSetDescriptorBufferOffsetsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdSetDescriptorBufferOffsets2EXT( commandBuffer, pSetDescriptorBufferOffsetsInfo ); + } + + void vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + VkCommandBuffer commandBuffer, + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT * pBindDescriptorBufferEmbeddedSamplersInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo ); + } + + //=== VK_QCOM_tile_memory_heap === + + void vkCmdBindTileMemoryQCOM( VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM * pTileMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBindTileMemoryQCOM( commandBuffer, pTileMemoryBindInfo ); + } + + //=== VK_NV_external_compute_queue === + + VkResult vkCreateExternalComputeQueueNV( VkDevice device, + const VkExternalComputeQueueCreateInfoNV * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkExternalComputeQueueNV * pExternalQueue ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateExternalComputeQueueNV( device, pCreateInfo, pAllocator, pExternalQueue ); + } + + void vkDestroyExternalComputeQueueNV( VkDevice device, + VkExternalComputeQueueNV externalQueue, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyExternalComputeQueueNV( device, externalQueue, pAllocator ); + } + + void vkGetExternalComputeQueueDataNV( VkExternalComputeQueueNV externalQueue, + VkExternalComputeQueueDataParamsNV * params, + void * pData ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetExternalComputeQueueDataNV( externalQueue, params, pData ); + } + + //=== VK_NV_cluster_acceleration_structure === + + void vkGetClusterAccelerationStructureBuildSizesNV( VkDevice device, + const VkClusterAccelerationStructureInputInfoNV * pInfo, + VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetClusterAccelerationStructureBuildSizesNV( device, pInfo, pSizeInfo ); + } + + void vkCmdBuildClusterAccelerationStructureIndirectNV( VkCommandBuffer commandBuffer, + const VkClusterAccelerationStructureCommandsInfoNV * pCommandInfos ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBuildClusterAccelerationStructureIndirectNV( commandBuffer, pCommandInfos ); + } + + //=== VK_NV_partitioned_acceleration_structure === + + void vkGetPartitionedAccelerationStructuresBuildSizesNV( VkDevice device, + const VkPartitionedAccelerationStructureInstancesInputNV * pInfo, + VkAccelerationStructureBuildSizesInfoKHR * pSizeInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPartitionedAccelerationStructuresBuildSizesNV( device, pInfo, pSizeInfo ); + } + + void vkCmdBuildPartitionedAccelerationStructuresNV( VkCommandBuffer commandBuffer, + const VkBuildPartitionedAccelerationStructureInfoNV * pBuildInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdBuildPartitionedAccelerationStructuresNV( commandBuffer, pBuildInfo ); + } + + //=== VK_EXT_device_generated_commands === + + void vkGetGeneratedCommandsMemoryRequirementsEXT( VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoEXT * pInfo, + VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetGeneratedCommandsMemoryRequirementsEXT( device, pInfo, pMemoryRequirements ); + } + + void vkCmdPreprocessGeneratedCommandsEXT( VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoEXT * pGeneratedCommandsInfo, + VkCommandBuffer stateCommandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdPreprocessGeneratedCommandsEXT( commandBuffer, pGeneratedCommandsInfo, stateCommandBuffer ); + } + + void vkCmdExecuteGeneratedCommandsEXT( VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoEXT * pGeneratedCommandsInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdExecuteGeneratedCommandsEXT( commandBuffer, isPreprocessed, pGeneratedCommandsInfo ); + } + + VkResult vkCreateIndirectCommandsLayoutEXT( VkDevice device, + const VkIndirectCommandsLayoutCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkIndirectCommandsLayoutEXT * pIndirectCommandsLayout ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateIndirectCommandsLayoutEXT( device, pCreateInfo, pAllocator, pIndirectCommandsLayout ); + } + + void vkDestroyIndirectCommandsLayoutEXT( VkDevice device, + VkIndirectCommandsLayoutEXT indirectCommandsLayout, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyIndirectCommandsLayoutEXT( device, indirectCommandsLayout, pAllocator ); + } + + VkResult vkCreateIndirectExecutionSetEXT( VkDevice device, + const VkIndirectExecutionSetCreateInfoEXT * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkIndirectExecutionSetEXT * pIndirectExecutionSet ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateIndirectExecutionSetEXT( device, pCreateInfo, pAllocator, pIndirectExecutionSet ); + } + + void vkDestroyIndirectExecutionSetEXT( VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT + { + return ::vkDestroyIndirectExecutionSetEXT( device, indirectExecutionSet, pAllocator ); + } + + void vkUpdateIndirectExecutionSetPipelineEXT( VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetPipelineEXT * pExecutionSetWrites ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUpdateIndirectExecutionSetPipelineEXT( device, indirectExecutionSet, executionSetWriteCount, pExecutionSetWrites ); + } + + void vkUpdateIndirectExecutionSetShaderEXT( VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetShaderEXT * pExecutionSetWrites ) const VULKAN_HPP_NOEXCEPT + { + return ::vkUpdateIndirectExecutionSetShaderEXT( device, indirectExecutionSet, executionSetWriteCount, pExecutionSetWrites ); + } + +# if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + VkResult vkCreateSurfaceOHOS( VkInstance instance, + const VkSurfaceCreateInfoOHOS * pCreateInfo, + const VkAllocationCallbacks * pAllocator, + VkSurfaceKHR * pSurface ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCreateSurfaceOHOS( instance, pCreateInfo, pAllocator, pSurface ); + } +# endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + + VkResult vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkCooperativeMatrixFlexibleDimensionsPropertiesNV * pProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( physicalDevice, pPropertyCount, pProperties ); + } + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + + VkResult + vkGetMemoryMetalHandleEXT( VkDevice device, const VkMemoryGetMetalHandleInfoEXT * pGetMetalHandleInfo, void ** pHandle ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryMetalHandleEXT( device, pGetMetalHandleInfo, pHandle ); + } + + VkResult vkGetMemoryMetalHandlePropertiesEXT( VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void * pHandle, + VkMemoryMetalHandlePropertiesEXT * pMemoryMetalHandleProperties ) const VULKAN_HPP_NOEXCEPT + { + return ::vkGetMemoryMetalHandlePropertiesEXT( device, handleType, pHandle, pMemoryMetalHandleProperties ); + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + + void vkCmdEndRendering2EXT( VkCommandBuffer commandBuffer, const VkRenderingEndInfoEXT * pRenderingEndInfo ) const VULKAN_HPP_NOEXCEPT + { + return ::vkCmdEndRendering2EXT( commandBuffer, pRenderingEndInfo ); + } + }; + + inline DispatchLoaderStatic & getDispatchLoaderStatic() + { + static DispatchLoaderStatic dls; + return dls; + } +#endif + + } // namespace detail +#if ( 14 <= VULKAN_HPP_CPP_VERSION ) + using std::exchange; +#else + template + VULKAN_HPP_CONSTEXPR_14 VULKAN_HPP_INLINE T exchange( T & obj, U && newValue ) + { + T oldValue = std::move( obj ); + obj = std::forward( newValue ); + return oldValue; + } +#endif + +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + struct AllocationCallbacks; + + namespace detail + { + template + class ObjectDestroy + { + public: + ObjectDestroy() = default; + + ObjectDestroy( OwnerType owner, + Optional allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT + : m_owner( owner ) + , m_allocationCallbacks( allocationCallbacks ) + , m_dispatch( &dispatch ) + { + } + + OwnerType getOwner() const VULKAN_HPP_NOEXCEPT + { + return m_owner; + } + + Optional getAllocator() const VULKAN_HPP_NOEXCEPT + { + return m_allocationCallbacks; + } + + Dispatch const & getDispatch() const VULKAN_HPP_NOEXCEPT + { + return *m_dispatch; + } + + protected: + template + void destroy( T t ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_owner && m_dispatch ); + m_owner.destroy( t, m_allocationCallbacks, *m_dispatch ); + } + + private: + OwnerType m_owner = {}; + Optional m_allocationCallbacks = nullptr; + Dispatch const * m_dispatch = nullptr; + }; + + class NoParent; + + template + class ObjectDestroy + { + public: + ObjectDestroy() = default; + + ObjectDestroy( Optional allocationCallbacks, + Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT + : m_allocationCallbacks( allocationCallbacks ) + , m_dispatch( &dispatch ) + { + } + + Optional getAllocator() const VULKAN_HPP_NOEXCEPT + { + return m_allocationCallbacks; + } + + Dispatch const & getDispatch() const VULKAN_HPP_NOEXCEPT + { + return *m_dispatch; + } + + protected: + template + void destroy( T t ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_dispatch ); + t.destroy( m_allocationCallbacks, *m_dispatch ); + } + + private: + Optional m_allocationCallbacks = nullptr; + Dispatch const * m_dispatch = nullptr; + }; + + template + class ObjectFree + { + public: + ObjectFree() = default; + + ObjectFree( OwnerType owner, + Optional allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT + : m_owner( owner ) + , m_allocationCallbacks( allocationCallbacks ) + , m_dispatch( &dispatch ) + { + } + + OwnerType getOwner() const VULKAN_HPP_NOEXCEPT + { + return m_owner; + } + + Optional getAllocator() const VULKAN_HPP_NOEXCEPT + { + return m_allocationCallbacks; + } + + Dispatch const & getDispatch() const VULKAN_HPP_NOEXCEPT + { + return *m_dispatch; + } + + protected: + template + void destroy( T t ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_owner && m_dispatch ); + ( m_owner.free )( t, m_allocationCallbacks, *m_dispatch ); + } + + private: + OwnerType m_owner = {}; + Optional m_allocationCallbacks = nullptr; + Dispatch const * m_dispatch = nullptr; + }; + + template + class ObjectRelease + { + public: + ObjectRelease() = default; + + ObjectRelease( OwnerType owner, Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT + : m_owner( owner ) + , m_dispatch( &dispatch ) + { + } + + OwnerType getOwner() const VULKAN_HPP_NOEXCEPT + { + return m_owner; + } + + Dispatch const & getDispatch() const VULKAN_HPP_NOEXCEPT + { + return *m_dispatch; + } + + protected: + template + void destroy( T t ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_owner && m_dispatch ); + m_owner.release( t, *m_dispatch ); + } + + private: + OwnerType m_owner = {}; + Dispatch const * m_dispatch = nullptr; + }; + + template + class PoolFree + { + public: + PoolFree() = default; + + PoolFree( OwnerType owner, PoolType pool, Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT + : m_owner( owner ) + , m_pool( pool ) + , m_dispatch( &dispatch ) + { + } + + OwnerType getOwner() const VULKAN_HPP_NOEXCEPT + { + return m_owner; + } + + PoolType getPool() const VULKAN_HPP_NOEXCEPT + { + return m_pool; + } + + Dispatch const & getDispatch() const VULKAN_HPP_NOEXCEPT + { + return *m_dispatch; + } + + protected: + template + void destroy( T t ) VULKAN_HPP_NOEXCEPT + { + ( m_owner.free )( m_pool, t, *m_dispatch ); + } + + private: + OwnerType m_owner = OwnerType(); + PoolType m_pool = PoolType(); + Dispatch const * m_dispatch = nullptr; + }; + + } // namespace detail +#endif // !VULKAN_HPP_NO_SMART_HANDLE + + //================== + //=== BASE TYPEs === + //================== + + using Bool32 = uint32_t; + using DeviceAddress = uint64_t; + using DeviceSize = uint64_t; + using RemoteAddressNV = void *; + using SampleMask = uint32_t; + + template + struct CppType + { + }; +} // namespace VULKAN_HPP_NAMESPACE + +#include +#if !defined( VULKAN_HPP_NO_TO_STRING ) +# include +#endif + +#ifndef VULKAN_HPP_NO_EXCEPTIONS +namespace std +{ + template <> + struct is_error_code_enum : public true_type + { + }; +} // namespace std +#endif + +namespace VULKAN_HPP_NAMESPACE +{ +#ifndef VULKAN_HPP_NO_EXCEPTIONS + class ErrorCategoryImpl : public std::error_category + { + public: + virtual const char * name() const VULKAN_HPP_NOEXCEPT override + { + return VULKAN_HPP_NAMESPACE_STRING "::Result"; + } + + virtual std::string message( int ev ) const override + { +# if defined( VULKAN_HPP_NO_TO_STRING ) + return std::to_string( ev ); +# else + return to_string( static_cast( ev ) ); +# endif + } + }; + + class Error + { + public: + Error() VULKAN_HPP_NOEXCEPT = default; + Error( const Error & ) VULKAN_HPP_NOEXCEPT = default; + virtual ~Error() VULKAN_HPP_NOEXCEPT = default; + + virtual const char * what() const VULKAN_HPP_NOEXCEPT = 0; + }; + + class LogicError + : public Error + , public std::logic_error + { + public: + explicit LogicError( const std::string & what ) : Error(), std::logic_error( what ) {} + + explicit LogicError( char const * what ) : Error(), std::logic_error( what ) {} + + virtual const char * what() const VULKAN_HPP_NOEXCEPT + { + return std::logic_error::what(); + } + }; + + class SystemError + : public Error + , public std::system_error + { + public: + SystemError( std::error_code ec ) : Error(), std::system_error( ec ) {} + + SystemError( std::error_code ec, std::string const & what ) : Error(), std::system_error( ec, what ) {} + + SystemError( std::error_code ec, char const * what ) : Error(), std::system_error( ec, what ) {} + + SystemError( int ev, std::error_category const & ecat ) : Error(), std::system_error( ev, ecat ) {} + + SystemError( int ev, std::error_category const & ecat, std::string const & what ) : Error(), std::system_error( ev, ecat, what ) {} + + SystemError( int ev, std::error_category const & ecat, char const * what ) : Error(), std::system_error( ev, ecat, what ) {} + + virtual const char * what() const VULKAN_HPP_NOEXCEPT + { + return std::system_error::what(); + } + }; + + VULKAN_HPP_INLINE const std::error_category & errorCategory() VULKAN_HPP_NOEXCEPT + { + static ErrorCategoryImpl instance; + return instance; + } + + VULKAN_HPP_INLINE std::error_code make_error_code( Result e ) VULKAN_HPP_NOEXCEPT + { + return std::error_code( static_cast( e ), errorCategory() ); + } + + VULKAN_HPP_INLINE std::error_condition make_error_condition( Result e ) VULKAN_HPP_NOEXCEPT + { + return std::error_condition( static_cast( e ), errorCategory() ); + } + + class OutOfHostMemoryError : public SystemError + { + public: + OutOfHostMemoryError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfHostMemory ), message ) {} + + OutOfHostMemoryError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfHostMemory ), message ) {} + }; + + class OutOfDeviceMemoryError : public SystemError + { + public: + OutOfDeviceMemoryError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfDeviceMemory ), message ) {} + + OutOfDeviceMemoryError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfDeviceMemory ), message ) {} + }; + + class InitializationFailedError : public SystemError + { + public: + InitializationFailedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInitializationFailed ), message ) {} + + InitializationFailedError( char const * message ) : SystemError( make_error_code( Result::eErrorInitializationFailed ), message ) {} + }; + + class DeviceLostError : public SystemError + { + public: + DeviceLostError( std::string const & message ) : SystemError( make_error_code( Result::eErrorDeviceLost ), message ) {} + + DeviceLostError( char const * message ) : SystemError( make_error_code( Result::eErrorDeviceLost ), message ) {} + }; + + class MemoryMapFailedError : public SystemError + { + public: + MemoryMapFailedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorMemoryMapFailed ), message ) {} + + MemoryMapFailedError( char const * message ) : SystemError( make_error_code( Result::eErrorMemoryMapFailed ), message ) {} + }; + + class LayerNotPresentError : public SystemError + { + public: + LayerNotPresentError( std::string const & message ) : SystemError( make_error_code( Result::eErrorLayerNotPresent ), message ) {} + + LayerNotPresentError( char const * message ) : SystemError( make_error_code( Result::eErrorLayerNotPresent ), message ) {} + }; + + class ExtensionNotPresentError : public SystemError + { + public: + ExtensionNotPresentError( std::string const & message ) : SystemError( make_error_code( Result::eErrorExtensionNotPresent ), message ) {} + + ExtensionNotPresentError( char const * message ) : SystemError( make_error_code( Result::eErrorExtensionNotPresent ), message ) {} + }; + + class FeatureNotPresentError : public SystemError + { + public: + FeatureNotPresentError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFeatureNotPresent ), message ) {} + + FeatureNotPresentError( char const * message ) : SystemError( make_error_code( Result::eErrorFeatureNotPresent ), message ) {} + }; + + class IncompatibleDriverError : public SystemError + { + public: + IncompatibleDriverError( std::string const & message ) : SystemError( make_error_code( Result::eErrorIncompatibleDriver ), message ) {} + + IncompatibleDriverError( char const * message ) : SystemError( make_error_code( Result::eErrorIncompatibleDriver ), message ) {} + }; + + class TooManyObjectsError : public SystemError + { + public: + TooManyObjectsError( std::string const & message ) : SystemError( make_error_code( Result::eErrorTooManyObjects ), message ) {} + + TooManyObjectsError( char const * message ) : SystemError( make_error_code( Result::eErrorTooManyObjects ), message ) {} + }; + + class FormatNotSupportedError : public SystemError + { + public: + FormatNotSupportedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFormatNotSupported ), message ) {} + + FormatNotSupportedError( char const * message ) : SystemError( make_error_code( Result::eErrorFormatNotSupported ), message ) {} + }; + + class FragmentedPoolError : public SystemError + { + public: + FragmentedPoolError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFragmentedPool ), message ) {} + + FragmentedPoolError( char const * message ) : SystemError( make_error_code( Result::eErrorFragmentedPool ), message ) {} + }; + + class UnknownError : public SystemError + { + public: + UnknownError( std::string const & message ) : SystemError( make_error_code( Result::eErrorUnknown ), message ) {} + + UnknownError( char const * message ) : SystemError( make_error_code( Result::eErrorUnknown ), message ) {} + }; + + class OutOfPoolMemoryError : public SystemError + { + public: + OutOfPoolMemoryError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfPoolMemory ), message ) {} + + OutOfPoolMemoryError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfPoolMemory ), message ) {} + }; + + class InvalidExternalHandleError : public SystemError + { + public: + InvalidExternalHandleError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidExternalHandle ), message ) {} + + InvalidExternalHandleError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidExternalHandle ), message ) {} + }; + + class FragmentationError : public SystemError + { + public: + FragmentationError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFragmentation ), message ) {} + + FragmentationError( char const * message ) : SystemError( make_error_code( Result::eErrorFragmentation ), message ) {} + }; + + class InvalidOpaqueCaptureAddressError : public SystemError + { + public: + InvalidOpaqueCaptureAddressError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidOpaqueCaptureAddress ), message ) {} + + InvalidOpaqueCaptureAddressError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidOpaqueCaptureAddress ), message ) {} + }; + + class NotPermittedError : public SystemError + { + public: + NotPermittedError( std::string const & message ) : SystemError( make_error_code( Result::eErrorNotPermitted ), message ) {} + + NotPermittedError( char const * message ) : SystemError( make_error_code( Result::eErrorNotPermitted ), message ) {} + }; + + class SurfaceLostKHRError : public SystemError + { + public: + SurfaceLostKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorSurfaceLostKHR ), message ) {} + + SurfaceLostKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorSurfaceLostKHR ), message ) {} + }; + + class NativeWindowInUseKHRError : public SystemError + { + public: + NativeWindowInUseKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorNativeWindowInUseKHR ), message ) {} + + NativeWindowInUseKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorNativeWindowInUseKHR ), message ) {} + }; + + class OutOfDateKHRError : public SystemError + { + public: + OutOfDateKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorOutOfDateKHR ), message ) {} + + OutOfDateKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorOutOfDateKHR ), message ) {} + }; + + class IncompatibleDisplayKHRError : public SystemError + { + public: + IncompatibleDisplayKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorIncompatibleDisplayKHR ), message ) {} + + IncompatibleDisplayKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorIncompatibleDisplayKHR ), message ) {} + }; + + class ValidationFailedEXTError : public SystemError + { + public: + ValidationFailedEXTError( std::string const & message ) : SystemError( make_error_code( Result::eErrorValidationFailedEXT ), message ) {} + + ValidationFailedEXTError( char const * message ) : SystemError( make_error_code( Result::eErrorValidationFailedEXT ), message ) {} + }; + + class InvalidShaderNVError : public SystemError + { + public: + InvalidShaderNVError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidShaderNV ), message ) {} + + InvalidShaderNVError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidShaderNV ), message ) {} + }; + + class ImageUsageNotSupportedKHRError : public SystemError + { + public: + ImageUsageNotSupportedKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorImageUsageNotSupportedKHR ), message ) {} + + ImageUsageNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorImageUsageNotSupportedKHR ), message ) {} + }; + + class VideoPictureLayoutNotSupportedKHRError : public SystemError + { + public: + VideoPictureLayoutNotSupportedKHRError( std::string const & message ) + : SystemError( make_error_code( Result::eErrorVideoPictureLayoutNotSupportedKHR ), message ) + { + } + + VideoPictureLayoutNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoPictureLayoutNotSupportedKHR ), message ) + { + } + }; + + class VideoProfileOperationNotSupportedKHRError : public SystemError + { + public: + VideoProfileOperationNotSupportedKHRError( std::string const & message ) + : SystemError( make_error_code( Result::eErrorVideoProfileOperationNotSupportedKHR ), message ) + { + } + + VideoProfileOperationNotSupportedKHRError( char const * message ) + : SystemError( make_error_code( Result::eErrorVideoProfileOperationNotSupportedKHR ), message ) + { + } + }; + + class VideoProfileFormatNotSupportedKHRError : public SystemError + { + public: + VideoProfileFormatNotSupportedKHRError( std::string const & message ) + : SystemError( make_error_code( Result::eErrorVideoProfileFormatNotSupportedKHR ), message ) + { + } + + VideoProfileFormatNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoProfileFormatNotSupportedKHR ), message ) + { + } + }; + + class VideoProfileCodecNotSupportedKHRError : public SystemError + { + public: + VideoProfileCodecNotSupportedKHRError( std::string const & message ) + : SystemError( make_error_code( Result::eErrorVideoProfileCodecNotSupportedKHR ), message ) + { + } + + VideoProfileCodecNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoProfileCodecNotSupportedKHR ), message ) {} + }; + + class VideoStdVersionNotSupportedKHRError : public SystemError + { + public: + VideoStdVersionNotSupportedKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorVideoStdVersionNotSupportedKHR ), message ) + { + } + + VideoStdVersionNotSupportedKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorVideoStdVersionNotSupportedKHR ), message ) {} + }; + + class InvalidDrmFormatModifierPlaneLayoutEXTError : public SystemError + { + public: + InvalidDrmFormatModifierPlaneLayoutEXTError( std::string const & message ) + : SystemError( make_error_code( Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT ), message ) + { + } + + InvalidDrmFormatModifierPlaneLayoutEXTError( char const * message ) + : SystemError( make_error_code( Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT ), message ) + { + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + class FullScreenExclusiveModeLostEXTError : public SystemError + { + public: + FullScreenExclusiveModeLostEXTError( std::string const & message ) : SystemError( make_error_code( Result::eErrorFullScreenExclusiveModeLostEXT ), message ) + { + } + + FullScreenExclusiveModeLostEXTError( char const * message ) : SystemError( make_error_code( Result::eErrorFullScreenExclusiveModeLostEXT ), message ) {} + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + class InvalidVideoStdParametersKHRError : public SystemError + { + public: + InvalidVideoStdParametersKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorInvalidVideoStdParametersKHR ), message ) {} + + InvalidVideoStdParametersKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorInvalidVideoStdParametersKHR ), message ) {} + }; + + class CompressionExhaustedEXTError : public SystemError + { + public: + CompressionExhaustedEXTError( std::string const & message ) : SystemError( make_error_code( Result::eErrorCompressionExhaustedEXT ), message ) {} + + CompressionExhaustedEXTError( char const * message ) : SystemError( make_error_code( Result::eErrorCompressionExhaustedEXT ), message ) {} + }; + + class NotEnoughSpaceKHRError : public SystemError + { + public: + NotEnoughSpaceKHRError( std::string const & message ) : SystemError( make_error_code( Result::eErrorNotEnoughSpaceKHR ), message ) {} + + NotEnoughSpaceKHRError( char const * message ) : SystemError( make_error_code( Result::eErrorNotEnoughSpaceKHR ), message ) {} + }; + + namespace detail + { + [[noreturn]] VULKAN_HPP_INLINE void throwResultException( Result result, char const * message ) + { + switch ( result ) + { + case Result::eErrorOutOfHostMemory : throw OutOfHostMemoryError( message ); + case Result::eErrorOutOfDeviceMemory : throw OutOfDeviceMemoryError( message ); + case Result::eErrorInitializationFailed : throw InitializationFailedError( message ); + case Result::eErrorDeviceLost : throw DeviceLostError( message ); + case Result::eErrorMemoryMapFailed : throw MemoryMapFailedError( message ); + case Result::eErrorLayerNotPresent : throw LayerNotPresentError( message ); + case Result::eErrorExtensionNotPresent : throw ExtensionNotPresentError( message ); + case Result::eErrorFeatureNotPresent : throw FeatureNotPresentError( message ); + case Result::eErrorIncompatibleDriver : throw IncompatibleDriverError( message ); + case Result::eErrorTooManyObjects : throw TooManyObjectsError( message ); + case Result::eErrorFormatNotSupported : throw FormatNotSupportedError( message ); + case Result::eErrorFragmentedPool : throw FragmentedPoolError( message ); + case Result::eErrorUnknown : throw UnknownError( message ); + case Result::eErrorOutOfPoolMemory : throw OutOfPoolMemoryError( message ); + case Result::eErrorInvalidExternalHandle : throw InvalidExternalHandleError( message ); + case Result::eErrorFragmentation : throw FragmentationError( message ); + case Result::eErrorInvalidOpaqueCaptureAddress : throw InvalidOpaqueCaptureAddressError( message ); + case Result::eErrorNotPermitted : throw NotPermittedError( message ); + case Result::eErrorSurfaceLostKHR : throw SurfaceLostKHRError( message ); + case Result::eErrorNativeWindowInUseKHR : throw NativeWindowInUseKHRError( message ); + case Result::eErrorOutOfDateKHR : throw OutOfDateKHRError( message ); + case Result::eErrorIncompatibleDisplayKHR : throw IncompatibleDisplayKHRError( message ); + case Result::eErrorValidationFailedEXT : throw ValidationFailedEXTError( message ); + case Result::eErrorInvalidShaderNV : throw InvalidShaderNVError( message ); + case Result::eErrorImageUsageNotSupportedKHR : throw ImageUsageNotSupportedKHRError( message ); + case Result::eErrorVideoPictureLayoutNotSupportedKHR : throw VideoPictureLayoutNotSupportedKHRError( message ); + case Result::eErrorVideoProfileOperationNotSupportedKHR : throw VideoProfileOperationNotSupportedKHRError( message ); + case Result::eErrorVideoProfileFormatNotSupportedKHR : throw VideoProfileFormatNotSupportedKHRError( message ); + case Result::eErrorVideoProfileCodecNotSupportedKHR : throw VideoProfileCodecNotSupportedKHRError( message ); + case Result::eErrorVideoStdVersionNotSupportedKHR : throw VideoStdVersionNotSupportedKHRError( message ); + case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT: throw InvalidDrmFormatModifierPlaneLayoutEXTError( message ); +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + case Result::eErrorFullScreenExclusiveModeLostEXT: throw FullScreenExclusiveModeLostEXTError( message ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case Result::eErrorInvalidVideoStdParametersKHR: throw InvalidVideoStdParametersKHRError( message ); + case Result::eErrorCompressionExhaustedEXT : throw CompressionExhaustedEXTError( message ); + case Result::eErrorNotEnoughSpaceKHR : throw NotEnoughSpaceKHRError( message ); + default : throw SystemError( make_error_code( result ), message ); + } + } + } // namespace detail +#endif + + template + struct ResultValue + { +#ifdef VULKAN_HPP_HAS_NOEXCEPT + ResultValue( Result r, T & v ) VULKAN_HPP_NOEXCEPT( VULKAN_HPP_NOEXCEPT( T( v ) ) ) +#else + ResultValue( Result r, T & v ) +#endif + : result( r ), value( v ) + { + } + +#ifdef VULKAN_HPP_HAS_NOEXCEPT + ResultValue( Result r, T && v ) VULKAN_HPP_NOEXCEPT( VULKAN_HPP_NOEXCEPT( T( std::move( v ) ) ) ) +#else + ResultValue( Result r, T && v ) +#endif + : result( r ), value( std::move( v ) ) + { + } + + Result result; + T value; + + operator std::tuple() VULKAN_HPP_NOEXCEPT + { + return std::tuple( result, value ); + } + }; + +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + template + struct ResultValue> + { +# ifdef VULKAN_HPP_HAS_NOEXCEPT + ResultValue( Result r, UniqueHandle && v ) VULKAN_HPP_NOEXCEPT +# else + ResultValue( Result r, UniqueHandle && v ) +# endif + : result( r ) + , value( std::move( v ) ) + { + } + + VULKAN_HPP_DEPRECATED( + "asTuple() on an l-value is deprecated, as it implicitly moves the UniqueHandle out of the ResultValue. Use asTuple() on an r-value instead, requiring to explicitly move the UniqueHandle." ) + + std::tuple> asTuple() & + { + return std::make_tuple( result, std::move( value ) ); + } + + std::tuple> asTuple() && + { + return std::make_tuple( result, std::move( value ) ); + } + + Result result; + UniqueHandle value; + }; + + template + struct ResultValue>> + { +# ifdef VULKAN_HPP_HAS_NOEXCEPT + ResultValue( Result r, std::vector> && v ) VULKAN_HPP_NOEXCEPT +# else + ResultValue( Result r, std::vector> && v ) +# endif + : result( r ) + , value( std::move( v ) ) + { + } + + VULKAN_HPP_DEPRECATED( + "asTuple() on an l-value is deprecated, as it implicitly moves the UniqueHandle out of the ResultValue. Use asTuple() on an r-value instead, requiring to explicitly move the UniqueHandle." ) + + std::tuple>> asTuple() & + { + return std::make_tuple( result, std::move( value ) ); + } + + std::tuple>> asTuple() && + { + return std::make_tuple( result, std::move( value ) ); + } + + Result result; + std::vector> value; + }; +#endif + + template + struct ResultValueType + { +#ifdef VULKAN_HPP_NO_EXCEPTIONS + using type = ResultValue; +#else + using type = T; +#endif + }; + + template <> + struct ResultValueType + { +#ifdef VULKAN_HPP_NO_EXCEPTIONS + using type = Result; +#else + using type = void; +#endif + }; + + namespace detail + { + template + void ignore( T const & ) VULKAN_HPP_NOEXCEPT + { + } + + VULKAN_HPP_INLINE typename ResultValueType::type createResultValueType( Result result ) + { +#if defined( VULKAN_HPP_NO_EXCEPTIONS ) + return result; +#else + ignore( result ); +#endif + } + + template + VULKAN_HPP_INLINE typename ResultValueType::type createResultValueType( Result result, T & data ) + { +#if defined( VULKAN_HPP_NO_EXCEPTIONS ) + return ResultValue( result, data ); +#else + ignore( result ); + return data; +#endif + } + + template + VULKAN_HPP_INLINE typename ResultValueType::type createResultValueType( Result result, T && data ) + { +#if defined( VULKAN_HPP_NO_EXCEPTIONS ) + return ResultValue( result, std::move( data ) ); +#else + ignore( result ); + return std::move( data ); +#endif + } + } // namespace detail + + namespace detail + { + VULKAN_HPP_INLINE void resultCheck( Result result, char const * message ) + { +#ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( result ); // just in case VULKAN_HPP_ASSERT_ON_RESULT is empty + ignore( message ); + VULKAN_HPP_ASSERT_ON_RESULT( result == Result::eSuccess ); +#else + if ( result != Result::eSuccess ) + { + throwResultException( result, message ); + } +#endif + } + + VULKAN_HPP_INLINE void resultCheck( Result result, char const * message, std::initializer_list successCodes ) + { +#ifdef VULKAN_HPP_NO_EXCEPTIONS + ignore( result ); // just in case VULKAN_HPP_ASSERT_ON_RESULT is empty + ignore( message ); + ignore( successCodes ); // just in case VULKAN_HPP_ASSERT_ON_RESULT is empty + VULKAN_HPP_ASSERT_ON_RESULT( std::find( successCodes.begin(), successCodes.end(), result ) != successCodes.end() ); +#else + if ( std::find( successCodes.begin(), successCodes.end(), result ) == successCodes.end() ) + { + throwResultException( result, message ); + } +#endif + } + } // namespace detail + + //=========================== + //=== CONSTEXPR CONSTANTs === + //=========================== + + //=== VK_VERSION_1_0 === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t AttachmentUnused = VK_ATTACHMENT_UNUSED; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t False = VK_FALSE; + VULKAN_HPP_CONSTEXPR_INLINE float LodClampNone = VK_LOD_CLAMP_NONE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t QueueFamilyIgnored = VK_QUEUE_FAMILY_IGNORED; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t RemainingArrayLayers = VK_REMAINING_ARRAY_LAYERS; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t RemainingMipLevels = VK_REMAINING_MIP_LEVELS; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t SubpassExternal = VK_SUBPASS_EXTERNAL; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t True = VK_TRUE; + VULKAN_HPP_CONSTEXPR_INLINE uint64_t WholeSize = VK_WHOLE_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxMemoryTypes = VK_MAX_MEMORY_TYPES; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxPhysicalDeviceNameSize = VK_MAX_PHYSICAL_DEVICE_NAME_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t UuidSize = VK_UUID_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxExtensionNameSize = VK_MAX_EXTENSION_NAME_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDescriptionSize = VK_MAX_DESCRIPTION_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxMemoryHeaps = VK_MAX_MEMORY_HEAPS; + + //=== VK_VERSION_1_1 === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDeviceGroupSize = VK_MAX_DEVICE_GROUP_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t LuidSize = VK_LUID_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t QueueFamilyExternal = VK_QUEUE_FAMILY_EXTERNAL; + + //=== VK_VERSION_1_2 === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDriverNameSize = VK_MAX_DRIVER_NAME_SIZE; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDriverInfoSize = VK_MAX_DRIVER_INFO_SIZE; + + //=== VK_VERSION_1_4 === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxGlobalPrioritySize = VK_MAX_GLOBAL_PRIORITY_SIZE; + + //=== VK_KHR_device_group_creation === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDeviceGroupSizeKHR = VK_MAX_DEVICE_GROUP_SIZE_KHR; + + //=== VK_KHR_external_memory_capabilities === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t LuidSizeKHR = VK_LUID_SIZE_KHR; + + //=== VK_KHR_external_memory === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t QueueFamilyExternalKHR = VK_QUEUE_FAMILY_EXTERNAL_KHR; + + //=== VK_EXT_queue_family_foreign === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t QueueFamilyForeignEXT = VK_QUEUE_FAMILY_FOREIGN_EXT; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t ShaderIndexUnusedAMDX = VK_SHADER_INDEX_UNUSED_AMDX; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_KHR_ray_tracing_pipeline === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t ShaderUnusedKHR = VK_SHADER_UNUSED_KHR; + + //=== VK_NV_ray_tracing === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t ShaderUnusedNV = VK_SHADER_UNUSED_NV; + + //=== VK_KHR_global_priority === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxGlobalPrioritySizeKHR = VK_MAX_GLOBAL_PRIORITY_SIZE_KHR; + + //=== VK_KHR_driver_properties === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDriverNameSizeKHR = VK_MAX_DRIVER_NAME_SIZE_KHR; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxDriverInfoSizeKHR = VK_MAX_DRIVER_INFO_SIZE_KHR; + + //=== VK_EXT_global_priority_query === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxGlobalPrioritySizeEXT = VK_MAX_GLOBAL_PRIORITY_SIZE_EXT; + + //=== VK_EXT_image_sliced_view_of_3d === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t Remaining3DSlicesEXT = VK_REMAINING_3D_SLICES_EXT; + + //=== VK_EXT_shader_module_identifier === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxShaderModuleIdentifierSizeEXT = VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT; + + //=== VK_KHR_pipeline_binary === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxPipelineBinaryKeySizeKHR = VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR; + + //=== VK_ARM_data_graph === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxPhysicalDeviceDataGraphOperationSetNameSizeARM = VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM; + + //=== VK_KHR_video_decode_av1 === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxVideoAv1ReferencesPerFrameKHR = VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR; + + //=== VK_KHR_video_decode_vp9 === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t MaxVideoVp9ReferencesPerFrameKHR = VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR; + + //=== VK_NV_partitioned_acceleration_structure === + VULKAN_HPP_CONSTEXPR_INLINE uint32_t PartitionedAccelerationStructurePartitionIndexGlobalNV = VK_PARTITIONED_ACCELERATION_STRUCTURE_PARTITION_INDEX_GLOBAL_NV; + + //======================== + //=== CONSTEXPR VALUEs === + //======================== + VULKAN_HPP_CONSTEXPR_INLINE uint32_t HeaderVersion = VK_HEADER_VERSION; + VULKAN_HPP_CONSTEXPR_INLINE uint32_t Use64BitPtrDefines = VK_USE_64_BIT_PTR_DEFINES; + + //========================= + //=== CONSTEXPR CALLEEs === + //========================= + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t apiVersionMajor( T const version ) + { + return ( ( (uint32_t)( version ) >> 22U ) & 0x7FU ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t apiVersionMinor( T const version ) + { + return ( ( (uint32_t)( version ) >> 12U ) & 0x3FFU ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t apiVersionPatch( T const version ) + { + return ( (uint32_t)( version ) & 0xFFFU ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t apiVersionVariant( T const version ) + { + return ( (uint32_t)( version ) >> 29U ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t makeApiVersion( T const variant, T const major, T const minor, T const patch ) + { + return ( ( ( (uint32_t)( variant ) ) << 29U ) | ( ( (uint32_t)( major ) ) << 22U ) | ( ( (uint32_t)( minor ) ) << 12U ) | ( (uint32_t)( patch ) ) ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t makeVersion( T const major, T const minor, T const patch ) + { + return ( ( ( (uint32_t)( major ) ) << 22U ) | ( ( (uint32_t)( minor ) ) << 12U ) | ( (uint32_t)( patch ) ) ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t versionMajor( T const version ) + { + return ( (uint32_t)( version ) >> 22U ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t versionMinor( T const version ) + { + return ( ( (uint32_t)( version ) >> 12U ) & 0x3FFU ); + } + + template ::value>::type> + VULKAN_HPP_CONSTEXPR uint32_t versionPatch( T const version ) + { + return ( (uint32_t)( version ) & 0xFFFU ); + } + + //========================= + //=== CONSTEXPR CALLERs === + //========================= + VULKAN_HPP_CONSTEXPR_INLINE auto ApiVersion = makeApiVersion( 0, 1, 0, 0 ); + VULKAN_HPP_CONSTEXPR_INLINE auto ApiVersion10 = makeApiVersion( 0, 1, 0, 0 ); + VULKAN_HPP_CONSTEXPR_INLINE auto ApiVersion11 = makeApiVersion( 0, 1, 1, 0 ); + VULKAN_HPP_CONSTEXPR_INLINE auto ApiVersion12 = makeApiVersion( 0, 1, 2, 0 ); + VULKAN_HPP_CONSTEXPR_INLINE auto ApiVersion13 = makeApiVersion( 0, 1, 3, 0 ); + VULKAN_HPP_CONSTEXPR_INLINE auto ApiVersion14 = makeApiVersion( 0, 1, 4, 0 ); + VULKAN_HPP_CONSTEXPR_INLINE auto HeaderVersionComplete = makeApiVersion( 0, 1, 4, VK_HEADER_VERSION ); + + //================================= + //=== CONSTEXPR EXTENSION NAMEs === + //================================= + + //=== VK_KHR_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSurfaceExtensionName = VK_KHR_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSurfaceSpecVersion = VK_KHR_SURFACE_SPEC_VERSION; + + //=== VK_KHR_swapchain === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSwapchainExtensionName = VK_KHR_SWAPCHAIN_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSwapchainSpecVersion = VK_KHR_SWAPCHAIN_SPEC_VERSION; + + //=== VK_KHR_display === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDisplayExtensionName = VK_KHR_DISPLAY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDisplaySpecVersion = VK_KHR_DISPLAY_SPEC_VERSION; + + //=== VK_KHR_display_swapchain === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDisplaySwapchainExtensionName = VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDisplaySwapchainSpecVersion = VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRXlibSurfaceExtensionName = VK_KHR_XLIB_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRXlibSurfaceSpecVersion = VK_KHR_XLIB_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRXcbSurfaceExtensionName = VK_KHR_XCB_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRXcbSurfaceSpecVersion = VK_KHR_XCB_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWaylandSurfaceExtensionName = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWaylandSurfaceSpecVersion = VK_KHR_WAYLAND_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRAndroidSurfaceExtensionName = VK_KHR_ANDROID_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRAndroidSurfaceSpecVersion = VK_KHR_ANDROID_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWin32SurfaceExtensionName = VK_KHR_WIN32_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWin32SurfaceSpecVersion = VK_KHR_WIN32_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + VULKAN_HPP_DEPRECATED( "The VK_EXT_debug_report extension has been deprecated by VK_EXT_debug_utils." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDebugReportExtensionName = VK_EXT_DEBUG_REPORT_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_EXT_debug_report extension has been deprecated by VK_EXT_debug_utils." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDebugReportSpecVersion = VK_EXT_DEBUG_REPORT_SPEC_VERSION; + + //=== VK_NV_glsl_shader === + VULKAN_HPP_DEPRECATED( "The VK_NV_glsl_shader extension has been deprecated." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVGlslShaderExtensionName = VK_NV_GLSL_SHADER_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_glsl_shader extension has been deprecated." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVGlslShaderSpecVersion = VK_NV_GLSL_SHADER_SPEC_VERSION; + + //=== VK_EXT_depth_range_unrestricted === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthRangeUnrestrictedExtensionName = VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthRangeUnrestrictedSpecVersion = VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION; + + //=== VK_KHR_sampler_mirror_clamp_to_edge === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSamplerMirrorClampToEdgeExtensionName = VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSamplerMirrorClampToEdgeSpecVersion = VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION; + + //=== VK_IMG_filter_cubic === + VULKAN_HPP_CONSTEXPR_INLINE auto IMGFilterCubicExtensionName = VK_IMG_FILTER_CUBIC_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto IMGFilterCubicSpecVersion = VK_IMG_FILTER_CUBIC_SPEC_VERSION; + + //=== VK_AMD_rasterization_order === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDRasterizationOrderExtensionName = VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDRasterizationOrderSpecVersion = VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION; + + //=== VK_AMD_shader_trinary_minmax === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderTrinaryMinmaxExtensionName = VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderTrinaryMinmaxSpecVersion = VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION; + + //=== VK_AMD_shader_explicit_vertex_parameter === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderExplicitVertexParameterExtensionName = VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderExplicitVertexParameterSpecVersion = VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION; + + //=== VK_EXT_debug_marker === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDebugMarkerExtensionName = VK_EXT_DEBUG_MARKER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDebugMarkerSpecVersion = VK_EXT_DEBUG_MARKER_SPEC_VERSION; + + //=== VK_KHR_video_queue === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoQueueExtensionName = VK_KHR_VIDEO_QUEUE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoQueueSpecVersion = VK_KHR_VIDEO_QUEUE_SPEC_VERSION; + + //=== VK_KHR_video_decode_queue === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeQueueExtensionName = VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeQueueSpecVersion = VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION; + + //=== VK_AMD_gcn_shader === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDGcnShaderExtensionName = VK_AMD_GCN_SHADER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDGcnShaderSpecVersion = VK_AMD_GCN_SHADER_SPEC_VERSION; + + //=== VK_NV_dedicated_allocation === + VULKAN_HPP_DEPRECATED( "The VK_NV_dedicated_allocation extension has been deprecated by VK_KHR_dedicated_allocation." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVDedicatedAllocationExtensionName = VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_dedicated_allocation extension has been deprecated by VK_KHR_dedicated_allocation." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVDedicatedAllocationSpecVersion = VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION; + + //=== VK_EXT_transform_feedback === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTTransformFeedbackExtensionName = VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTTransformFeedbackSpecVersion = VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION; + + //=== VK_NVX_binary_import === + VULKAN_HPP_CONSTEXPR_INLINE auto NVXBinaryImportExtensionName = VK_NVX_BINARY_IMPORT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVXBinaryImportSpecVersion = VK_NVX_BINARY_IMPORT_SPEC_VERSION; + + //=== VK_NVX_image_view_handle === + VULKAN_HPP_CONSTEXPR_INLINE auto NVXImageViewHandleExtensionName = VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVXImageViewHandleSpecVersion = VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION; + + //=== VK_AMD_draw_indirect_count === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDDrawIndirectCountExtensionName = VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDDrawIndirectCountSpecVersion = VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION; + + //=== VK_AMD_negative_viewport_height === + VULKAN_HPP_DEPRECATED( "The VK_AMD_negative_viewport_height extension has been obsoleted by VK_KHR_maintenance1." ) + VULKAN_HPP_CONSTEXPR_INLINE auto AMDNegativeViewportHeightExtensionName = VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_AMD_negative_viewport_height extension has been obsoleted by VK_KHR_maintenance1." ) + VULKAN_HPP_CONSTEXPR_INLINE auto AMDNegativeViewportHeightSpecVersion = VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION; + + //=== VK_AMD_gpu_shader_half_float === + VULKAN_HPP_DEPRECATED( "The VK_AMD_gpu_shader_half_float extension has been deprecated by VK_KHR_shader_float16_int8." ) + VULKAN_HPP_CONSTEXPR_INLINE auto AMDGpuShaderHalfFloatExtensionName = VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_AMD_gpu_shader_half_float extension has been deprecated by VK_KHR_shader_float16_int8." ) + VULKAN_HPP_CONSTEXPR_INLINE auto AMDGpuShaderHalfFloatSpecVersion = VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION; + + //=== VK_AMD_shader_ballot === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderBallotExtensionName = VK_AMD_SHADER_BALLOT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderBallotSpecVersion = VK_AMD_SHADER_BALLOT_SPEC_VERSION; + + //=== VK_KHR_video_encode_h264 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeH264ExtensionName = VK_KHR_VIDEO_ENCODE_H264_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeH264SpecVersion = VK_KHR_VIDEO_ENCODE_H264_SPEC_VERSION; + + //=== VK_KHR_video_encode_h265 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeH265ExtensionName = VK_KHR_VIDEO_ENCODE_H265_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeH265SpecVersion = VK_KHR_VIDEO_ENCODE_H265_SPEC_VERSION; + + //=== VK_KHR_video_decode_h264 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeH264ExtensionName = VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeH264SpecVersion = VK_KHR_VIDEO_DECODE_H264_SPEC_VERSION; + + //=== VK_AMD_texture_gather_bias_lod === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDTextureGatherBiasLodExtensionName = VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDTextureGatherBiasLodSpecVersion = VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION; + + //=== VK_AMD_shader_info === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderInfoExtensionName = VK_AMD_SHADER_INFO_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderInfoSpecVersion = VK_AMD_SHADER_INFO_SPEC_VERSION; + + //=== VK_KHR_dynamic_rendering === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDynamicRenderingExtensionName = VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDynamicRenderingSpecVersion = VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION; + + //=== VK_AMD_shader_image_load_store_lod === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderImageLoadStoreLodExtensionName = VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderImageLoadStoreLodSpecVersion = VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto GGPStreamDescriptorSurfaceExtensionName = VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GGPStreamDescriptorSurfaceSpecVersion = VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_corner_sampled_image === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCornerSampledImageExtensionName = VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCornerSampledImageSpecVersion = VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION; + + //=== VK_KHR_multiview === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMultiviewExtensionName = VK_KHR_MULTIVIEW_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMultiviewSpecVersion = VK_KHR_MULTIVIEW_SPEC_VERSION; + + //=== VK_IMG_format_pvrtc === + VULKAN_HPP_DEPRECATED( "The VK_IMG_format_pvrtc extension has been deprecated." ) + VULKAN_HPP_CONSTEXPR_INLINE auto IMGFormatPvrtcExtensionName = VK_IMG_FORMAT_PVRTC_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_IMG_format_pvrtc extension has been deprecated." ) + VULKAN_HPP_CONSTEXPR_INLINE auto IMGFormatPvrtcSpecVersion = VK_IMG_FORMAT_PVRTC_SPEC_VERSION; + + //=== VK_NV_external_memory_capabilities === + VULKAN_HPP_DEPRECATED( "The VK_NV_external_memory_capabilities extension has been deprecated by VK_KHR_external_memory_capabilities." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryCapabilitiesExtensionName = VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_external_memory_capabilities extension has been deprecated by VK_KHR_external_memory_capabilities." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryCapabilitiesSpecVersion = VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION; + + //=== VK_NV_external_memory === + VULKAN_HPP_DEPRECATED( "The VK_NV_external_memory extension has been deprecated by VK_KHR_external_memory." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryExtensionName = VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_external_memory extension has been deprecated by VK_KHR_external_memory." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemorySpecVersion = VK_NV_EXTERNAL_MEMORY_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + VULKAN_HPP_DEPRECATED( "The VK_NV_external_memory_win32 extension has been deprecated by VK_KHR_external_memory_win32." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryWin32ExtensionName = VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_external_memory_win32 extension has been deprecated by VK_KHR_external_memory_win32." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryWin32SpecVersion = VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_win32_keyed_mutex === + VULKAN_HPP_CONSTEXPR_INLINE auto NVWin32KeyedMutexExtensionName = VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVWin32KeyedMutexSpecVersion = VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetPhysicalDeviceProperties2ExtensionName = VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetPhysicalDeviceProperties2SpecVersion = VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION; + + //=== VK_KHR_device_group === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDeviceGroupExtensionName = VK_KHR_DEVICE_GROUP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDeviceGroupSpecVersion = VK_KHR_DEVICE_GROUP_SPEC_VERSION; + + //=== VK_EXT_validation_flags === + VULKAN_HPP_DEPRECATED( "The VK_EXT_validation_flags extension has been deprecated by VK_EXT_layer_settings." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTValidationFlagsExtensionName = VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_EXT_validation_flags extension has been deprecated by VK_EXT_layer_settings." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTValidationFlagsSpecVersion = VK_EXT_VALIDATION_FLAGS_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto NNViSurfaceExtensionName = VK_NN_VI_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NNViSurfaceSpecVersion = VK_NN_VI_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_shader_draw_parameters === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderDrawParametersExtensionName = VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderDrawParametersSpecVersion = VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION; + + //=== VK_EXT_shader_subgroup_ballot === + VULKAN_HPP_DEPRECATED( "The VK_EXT_shader_subgroup_ballot extension has been deprecated by VK_VERSION_1_2." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderSubgroupBallotExtensionName = VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_EXT_shader_subgroup_ballot extension has been deprecated by VK_VERSION_1_2." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderSubgroupBallotSpecVersion = VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION; + + //=== VK_EXT_shader_subgroup_vote === + VULKAN_HPP_DEPRECATED( "The VK_EXT_shader_subgroup_vote extension has been deprecated by VK_VERSION_1_1." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderSubgroupVoteExtensionName = VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_EXT_shader_subgroup_vote extension has been deprecated by VK_VERSION_1_1." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderSubgroupVoteSpecVersion = VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION; + + //=== VK_EXT_texture_compression_astc_hdr === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTTextureCompressionAstcHdrExtensionName = VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTTextureCompressionAstcHdrSpecVersion = VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION; + + //=== VK_EXT_astc_decode_mode === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAstcDecodeModeExtensionName = VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAstcDecodeModeSpecVersion = VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION; + + //=== VK_EXT_pipeline_robustness === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineRobustnessExtensionName = VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineRobustnessSpecVersion = VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION; + + //=== VK_KHR_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance1ExtensionName = VK_KHR_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance1SpecVersion = VK_KHR_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_KHR_device_group_creation === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDeviceGroupCreationExtensionName = VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDeviceGroupCreationSpecVersion = VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION; + + //=== VK_KHR_external_memory_capabilities === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryCapabilitiesExtensionName = VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryCapabilitiesSpecVersion = VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION; + + //=== VK_KHR_external_memory === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryExtensionName = VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemorySpecVersion = VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryWin32ExtensionName = VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryWin32SpecVersion = VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryFdExtensionName = VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalMemoryFdSpecVersion = VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_keyed_mutex === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWin32KeyedMutexExtensionName = VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWin32KeyedMutexSpecVersion = VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_capabilities === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreCapabilitiesExtensionName = VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreCapabilitiesSpecVersion = VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION; + + //=== VK_KHR_external_semaphore === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreExtensionName = VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreSpecVersion = VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreWin32ExtensionName = VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreWin32SpecVersion = VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreFdExtensionName = VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalSemaphoreFdSpecVersion = VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION; + + //=== VK_KHR_push_descriptor === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPushDescriptorExtensionName = VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPushDescriptorSpecVersion = VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION; + + //=== VK_EXT_conditional_rendering === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTConditionalRenderingExtensionName = VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTConditionalRenderingSpecVersion = VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION; + + //=== VK_KHR_shader_float16_int8 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderFloat16Int8ExtensionName = VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderFloat16Int8SpecVersion = VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION; + + //=== VK_KHR_16bit_storage === + VULKAN_HPP_CONSTEXPR_INLINE auto KHR16BitStorageExtensionName = VK_KHR_16BIT_STORAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHR16BitStorageSpecVersion = VK_KHR_16BIT_STORAGE_SPEC_VERSION; + + //=== VK_KHR_incremental_present === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRIncrementalPresentExtensionName = VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRIncrementalPresentSpecVersion = VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION; + + //=== VK_KHR_descriptor_update_template === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDescriptorUpdateTemplateExtensionName = VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDescriptorUpdateTemplateSpecVersion = VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION; + + //=== VK_NV_clip_space_w_scaling === + VULKAN_HPP_CONSTEXPR_INLINE auto NVClipSpaceWScalingExtensionName = VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVClipSpaceWScalingSpecVersion = VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION; + + //=== VK_EXT_direct_mode_display === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDirectModeDisplayExtensionName = VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDirectModeDisplaySpecVersion = VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAcquireXlibDisplayExtensionName = VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAcquireXlibDisplaySpecVersion = VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDisplaySurfaceCounterExtensionName = VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDisplaySurfaceCounterSpecVersion = VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION; + + //=== VK_EXT_display_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDisplayControlExtensionName = VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDisplayControlSpecVersion = VK_EXT_DISPLAY_CONTROL_SPEC_VERSION; + + //=== VK_GOOGLE_display_timing === + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEDisplayTimingExtensionName = VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEDisplayTimingSpecVersion = VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION; + + //=== VK_NV_sample_mask_override_coverage === + VULKAN_HPP_CONSTEXPR_INLINE auto NVSampleMaskOverrideCoverageExtensionName = VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVSampleMaskOverrideCoverageSpecVersion = VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION; + + //=== VK_NV_geometry_shader_passthrough === + VULKAN_HPP_CONSTEXPR_INLINE auto NVGeometryShaderPassthroughExtensionName = VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVGeometryShaderPassthroughSpecVersion = VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION; + + //=== VK_NV_viewport_array2 === + VULKAN_HPP_CONSTEXPR_INLINE auto NVViewportArray2ExtensionName = VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVViewportArray2SpecVersion = VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION; + + //=== VK_NVX_multiview_per_view_attributes === + VULKAN_HPP_CONSTEXPR_INLINE auto NVXMultiviewPerViewAttributesExtensionName = VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVXMultiviewPerViewAttributesSpecVersion = VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION; + + //=== VK_NV_viewport_swizzle === + VULKAN_HPP_CONSTEXPR_INLINE auto NVViewportSwizzleExtensionName = VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVViewportSwizzleSpecVersion = VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION; + + //=== VK_EXT_discard_rectangles === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDiscardRectanglesExtensionName = VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDiscardRectanglesSpecVersion = VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION; + + //=== VK_EXT_conservative_rasterization === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTConservativeRasterizationExtensionName = VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTConservativeRasterizationSpecVersion = VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION; + + //=== VK_EXT_depth_clip_enable === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClipEnableExtensionName = VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClipEnableSpecVersion = VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION; + + //=== VK_EXT_swapchain_colorspace === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSwapchainColorSpaceExtensionName = VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSwapchainColorSpaceSpecVersion = VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION; + + //=== VK_EXT_hdr_metadata === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHdrMetadataExtensionName = VK_EXT_HDR_METADATA_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHdrMetadataSpecVersion = VK_EXT_HDR_METADATA_SPEC_VERSION; + + //=== VK_KHR_imageless_framebuffer === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRImagelessFramebufferExtensionName = VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRImagelessFramebufferSpecVersion = VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION; + + //=== VK_KHR_create_renderpass2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCreateRenderpass2ExtensionName = VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCreateRenderpass2SpecVersion = VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION; + + //=== VK_IMG_relaxed_line_rasterization === + VULKAN_HPP_CONSTEXPR_INLINE auto IMGRelaxedLineRasterizationExtensionName = VK_IMG_RELAXED_LINE_RASTERIZATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto IMGRelaxedLineRasterizationSpecVersion = VK_IMG_RELAXED_LINE_RASTERIZATION_SPEC_VERSION; + + //=== VK_KHR_shared_presentable_image === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSharedPresentableImageExtensionName = VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSharedPresentableImageSpecVersion = VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION; + + //=== VK_KHR_external_fence_capabilities === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceCapabilitiesExtensionName = VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceCapabilitiesSpecVersion = VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION; + + //=== VK_KHR_external_fence === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceExtensionName = VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceSpecVersion = VK_KHR_EXTERNAL_FENCE_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceWin32ExtensionName = VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceWin32SpecVersion = VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceFdExtensionName = VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRExternalFenceFdSpecVersion = VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION; + + //=== VK_KHR_performance_query === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPerformanceQueryExtensionName = VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPerformanceQuerySpecVersion = VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION; + + //=== VK_KHR_maintenance2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance2ExtensionName = VK_KHR_MAINTENANCE_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance2SpecVersion = VK_KHR_MAINTENANCE_2_SPEC_VERSION; + + //=== VK_KHR_get_surface_capabilities2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetSurfaceCapabilities2ExtensionName = VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetSurfaceCapabilities2SpecVersion = VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION; + + //=== VK_KHR_variable_pointers === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVariablePointersExtensionName = VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVariablePointersSpecVersion = VK_KHR_VARIABLE_POINTERS_SPEC_VERSION; + + //=== VK_KHR_get_display_properties2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetDisplayProperties2ExtensionName = VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetDisplayProperties2SpecVersion = VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + VULKAN_HPP_DEPRECATED( "The VK_MVK_ios_surface extension has been deprecated by VK_EXT_metal_surface." ) + VULKAN_HPP_CONSTEXPR_INLINE auto MVKIosSurfaceExtensionName = VK_MVK_IOS_SURFACE_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_MVK_ios_surface extension has been deprecated by VK_EXT_metal_surface." ) + VULKAN_HPP_CONSTEXPR_INLINE auto MVKIosSurfaceSpecVersion = VK_MVK_IOS_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + VULKAN_HPP_DEPRECATED( "The VK_MVK_macos_surface extension has been deprecated by VK_EXT_metal_surface." ) + VULKAN_HPP_CONSTEXPR_INLINE auto MVKMacosSurfaceExtensionName = VK_MVK_MACOS_SURFACE_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_MVK_macos_surface extension has been deprecated by VK_EXT_metal_surface." ) + VULKAN_HPP_CONSTEXPR_INLINE auto MVKMacosSurfaceSpecVersion = VK_MVK_MACOS_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_external_memory_dma_buf === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryDmaBufExtensionName = VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryDmaBufSpecVersion = VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION; + + //=== VK_EXT_queue_family_foreign === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTQueueFamilyForeignExtensionName = VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTQueueFamilyForeignSpecVersion = VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION; + + //=== VK_KHR_dedicated_allocation === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDedicatedAllocationExtensionName = VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDedicatedAllocationSpecVersion = VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION; + + //=== VK_EXT_debug_utils === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDebugUtilsExtensionName = VK_EXT_DEBUG_UTILS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDebugUtilsSpecVersion = VK_EXT_DEBUG_UTILS_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + VULKAN_HPP_CONSTEXPR_INLINE auto ANDROIDExternalMemoryAndroidHardwareBufferExtensionName = VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ANDROIDExternalMemoryAndroidHardwareBufferSpecVersion = VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_EXT_sampler_filter_minmax === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSamplerFilterMinmaxExtensionName = VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSamplerFilterMinmaxSpecVersion = VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION; + + //=== VK_KHR_storage_buffer_storage_class === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRStorageBufferStorageClassExtensionName = VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRStorageBufferStorageClassSpecVersion = VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION; + + //=== VK_AMD_gpu_shader_int16 === + VULKAN_HPP_DEPRECATED( "The VK_AMD_gpu_shader_int16 extension has been deprecated by VK_KHR_shader_float16_int8." ) + VULKAN_HPP_CONSTEXPR_INLINE auto AMDGpuShaderInt16ExtensionName = VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_AMD_gpu_shader_int16 extension has been deprecated by VK_KHR_shader_float16_int8." ) + VULKAN_HPP_CONSTEXPR_INLINE auto AMDGpuShaderInt16SpecVersion = VK_AMD_GPU_SHADER_INT16_SPEC_VERSION; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDXShaderEnqueueExtensionName = VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDXShaderEnqueueSpecVersion = VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_mixed_attachment_samples === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDMixedAttachmentSamplesExtensionName = VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDMixedAttachmentSamplesSpecVersion = VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION; + + //=== VK_AMD_shader_fragment_mask === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderFragmentMaskExtensionName = VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderFragmentMaskSpecVersion = VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION; + + //=== VK_EXT_inline_uniform_block === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTInlineUniformBlockExtensionName = VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTInlineUniformBlockSpecVersion = VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION; + + //=== VK_EXT_shader_stencil_export === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderStencilExportExtensionName = VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderStencilExportSpecVersion = VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION; + + //=== VK_KHR_shader_bfloat16 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderBfloat16ExtensionName = VK_KHR_SHADER_BFLOAT16_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderBfloat16SpecVersion = VK_KHR_SHADER_BFLOAT16_SPEC_VERSION; + + //=== VK_EXT_sample_locations === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSampleLocationsExtensionName = VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSampleLocationsSpecVersion = VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION; + + //=== VK_KHR_relaxed_block_layout === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRelaxedBlockLayoutExtensionName = VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRelaxedBlockLayoutSpecVersion = VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION; + + //=== VK_KHR_get_memory_requirements2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetMemoryRequirements2ExtensionName = VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGetMemoryRequirements2SpecVersion = VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION; + + //=== VK_KHR_image_format_list === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRImageFormatListExtensionName = VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRImageFormatListSpecVersion = VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION; + + //=== VK_EXT_blend_operation_advanced === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTBlendOperationAdvancedExtensionName = VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTBlendOperationAdvancedSpecVersion = VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION; + + //=== VK_NV_fragment_coverage_to_color === + VULKAN_HPP_CONSTEXPR_INLINE auto NVFragmentCoverageToColorExtensionName = VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVFragmentCoverageToColorSpecVersion = VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION; + + //=== VK_KHR_acceleration_structure === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRAccelerationStructureExtensionName = VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRAccelerationStructureSpecVersion = VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION; + + //=== VK_KHR_ray_tracing_pipeline === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayTracingPipelineExtensionName = VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayTracingPipelineSpecVersion = VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION; + + //=== VK_KHR_ray_query === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayQueryExtensionName = VK_KHR_RAY_QUERY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayQuerySpecVersion = VK_KHR_RAY_QUERY_SPEC_VERSION; + + //=== VK_NV_framebuffer_mixed_samples === + VULKAN_HPP_CONSTEXPR_INLINE auto NVFramebufferMixedSamplesExtensionName = VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVFramebufferMixedSamplesSpecVersion = VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION; + + //=== VK_NV_fill_rectangle === + VULKAN_HPP_CONSTEXPR_INLINE auto NVFillRectangleExtensionName = VK_NV_FILL_RECTANGLE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVFillRectangleSpecVersion = VK_NV_FILL_RECTANGLE_SPEC_VERSION; + + //=== VK_NV_shader_sm_builtins === + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderSmBuiltinsExtensionName = VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderSmBuiltinsSpecVersion = VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION; + + //=== VK_EXT_post_depth_coverage === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPostDepthCoverageExtensionName = VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPostDepthCoverageSpecVersion = VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION; + + //=== VK_KHR_sampler_ycbcr_conversion === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSamplerYcbcrConversionExtensionName = VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSamplerYcbcrConversionSpecVersion = VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION; + + //=== VK_KHR_bind_memory2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRBindMemory2ExtensionName = VK_KHR_BIND_MEMORY_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRBindMemory2SpecVersion = VK_KHR_BIND_MEMORY_2_SPEC_VERSION; + + //=== VK_EXT_image_drm_format_modifier === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageDrmFormatModifierExtensionName = VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageDrmFormatModifierSpecVersion = VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION; + + //=== VK_EXT_validation_cache === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTValidationCacheExtensionName = VK_EXT_VALIDATION_CACHE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTValidationCacheSpecVersion = VK_EXT_VALIDATION_CACHE_SPEC_VERSION; + + //=== VK_EXT_descriptor_indexing === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDescriptorIndexingExtensionName = VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDescriptorIndexingSpecVersion = VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION; + + //=== VK_EXT_shader_viewport_index_layer === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderViewportIndexLayerExtensionName = VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderViewportIndexLayerSpecVersion = VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_portability_subset === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPortabilitySubsetExtensionName = VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPortabilitySubsetSpecVersion = VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NV_shading_rate_image === + VULKAN_HPP_CONSTEXPR_INLINE auto NVShadingRateImageExtensionName = VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVShadingRateImageSpecVersion = VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION; + + //=== VK_NV_ray_tracing === + VULKAN_HPP_DEPRECATED( "The VK_NV_ray_tracing extension has been deprecated by VK_KHR_ray_tracing_pipeline." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingExtensionName = VK_NV_RAY_TRACING_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_ray_tracing extension has been deprecated by VK_KHR_ray_tracing_pipeline." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingSpecVersion = VK_NV_RAY_TRACING_SPEC_VERSION; + + //=== VK_NV_representative_fragment_test === + VULKAN_HPP_CONSTEXPR_INLINE auto NVRepresentativeFragmentTestExtensionName = VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVRepresentativeFragmentTestSpecVersion = VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION; + + //=== VK_KHR_maintenance3 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance3ExtensionName = VK_KHR_MAINTENANCE_3_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance3SpecVersion = VK_KHR_MAINTENANCE_3_SPEC_VERSION; + + //=== VK_KHR_draw_indirect_count === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDrawIndirectCountExtensionName = VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDrawIndirectCountSpecVersion = VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION; + + //=== VK_EXT_filter_cubic === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFilterCubicExtensionName = VK_EXT_FILTER_CUBIC_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFilterCubicSpecVersion = VK_EXT_FILTER_CUBIC_SPEC_VERSION; + + //=== VK_QCOM_render_pass_shader_resolve === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRenderPassShaderResolveExtensionName = VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRenderPassShaderResolveSpecVersion = VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION; + + //=== VK_EXT_global_priority === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTGlobalPriorityExtensionName = VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTGlobalPrioritySpecVersion = VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION; + + //=== VK_KHR_shader_subgroup_extended_types === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderSubgroupExtendedTypesExtensionName = VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderSubgroupExtendedTypesSpecVersion = VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION; + + //=== VK_KHR_8bit_storage === + VULKAN_HPP_CONSTEXPR_INLINE auto KHR8BitStorageExtensionName = VK_KHR_8BIT_STORAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHR8BitStorageSpecVersion = VK_KHR_8BIT_STORAGE_SPEC_VERSION; + + //=== VK_EXT_external_memory_host === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryHostExtensionName = VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryHostSpecVersion = VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION; + + //=== VK_AMD_buffer_marker === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDBufferMarkerExtensionName = VK_AMD_BUFFER_MARKER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDBufferMarkerSpecVersion = VK_AMD_BUFFER_MARKER_SPEC_VERSION; + + //=== VK_KHR_shader_atomic_int64 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderAtomicInt64ExtensionName = VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderAtomicInt64SpecVersion = VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION; + + //=== VK_KHR_shader_clock === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderClockExtensionName = VK_KHR_SHADER_CLOCK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderClockSpecVersion = VK_KHR_SHADER_CLOCK_SPEC_VERSION; + + //=== VK_AMD_pipeline_compiler_control === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDPipelineCompilerControlExtensionName = VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDPipelineCompilerControlSpecVersion = VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION; + + //=== VK_EXT_calibrated_timestamps === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTCalibratedTimestampsExtensionName = VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTCalibratedTimestampsSpecVersion = VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION; + + //=== VK_AMD_shader_core_properties === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderCorePropertiesExtensionName = VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderCorePropertiesSpecVersion = VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION; + + //=== VK_KHR_video_decode_h265 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeH265ExtensionName = VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeH265SpecVersion = VK_KHR_VIDEO_DECODE_H265_SPEC_VERSION; + + //=== VK_KHR_global_priority === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGlobalPriorityExtensionName = VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRGlobalPrioritySpecVersion = VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION; + + //=== VK_AMD_memory_overallocation_behavior === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDMemoryOverallocationBehaviorExtensionName = VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDMemoryOverallocationBehaviorSpecVersion = VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION; + + //=== VK_EXT_vertex_attribute_divisor === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTVertexAttributeDivisorExtensionName = VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTVertexAttributeDivisorSpecVersion = VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_frame_token === + VULKAN_HPP_CONSTEXPR_INLINE auto GGPFrameTokenExtensionName = VK_GGP_FRAME_TOKEN_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GGPFrameTokenSpecVersion = VK_GGP_FRAME_TOKEN_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_EXT_pipeline_creation_feedback === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineCreationFeedbackExtensionName = VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineCreationFeedbackSpecVersion = VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION; + + //=== VK_KHR_driver_properties === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDriverPropertiesExtensionName = VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDriverPropertiesSpecVersion = VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION; + + //=== VK_KHR_shader_float_controls === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderFloatControlsExtensionName = VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderFloatControlsSpecVersion = VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION; + + //=== VK_NV_shader_subgroup_partitioned === + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderSubgroupPartitionedExtensionName = VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderSubgroupPartitionedSpecVersion = VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION; + + //=== VK_KHR_depth_stencil_resolve === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDepthStencilResolveExtensionName = VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDepthStencilResolveSpecVersion = VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION; + + //=== VK_KHR_swapchain_mutable_format === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSwapchainMutableFormatExtensionName = VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSwapchainMutableFormatSpecVersion = VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION; + + //=== VK_NV_compute_shader_derivatives === + VULKAN_HPP_CONSTEXPR_INLINE auto NVComputeShaderDerivativesExtensionName = VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVComputeShaderDerivativesSpecVersion = VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION; + + //=== VK_NV_mesh_shader === + VULKAN_HPP_CONSTEXPR_INLINE auto NVMeshShaderExtensionName = VK_NV_MESH_SHADER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVMeshShaderSpecVersion = VK_NV_MESH_SHADER_SPEC_VERSION; + + //=== VK_NV_fragment_shader_barycentric === + VULKAN_HPP_CONSTEXPR_INLINE auto NVFragmentShaderBarycentricExtensionName = VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVFragmentShaderBarycentricSpecVersion = VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION; + + //=== VK_NV_shader_image_footprint === + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderImageFootprintExtensionName = VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderImageFootprintSpecVersion = VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION; + + //=== VK_NV_scissor_exclusive === + VULKAN_HPP_CONSTEXPR_INLINE auto NVScissorExclusiveExtensionName = VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVScissorExclusiveSpecVersion = VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION; + + //=== VK_NV_device_diagnostic_checkpoints === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceDiagnosticCheckpointsExtensionName = VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceDiagnosticCheckpointsSpecVersion = VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION; + + //=== VK_KHR_timeline_semaphore === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRTimelineSemaphoreExtensionName = VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRTimelineSemaphoreSpecVersion = VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION; + + //=== VK_INTEL_shader_integer_functions2 === + VULKAN_HPP_CONSTEXPR_INLINE auto INTELShaderIntegerFunctions2ExtensionName = VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto INTELShaderIntegerFunctions2SpecVersion = VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION; + + //=== VK_INTEL_performance_query === + VULKAN_HPP_CONSTEXPR_INLINE auto INTELPerformanceQueryExtensionName = VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto INTELPerformanceQuerySpecVersion = VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION; + + //=== VK_KHR_vulkan_memory_model === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVulkanMemoryModelExtensionName = VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVulkanMemoryModelSpecVersion = VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION; + + //=== VK_EXT_pci_bus_info === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPciBusInfoExtensionName = VK_EXT_PCI_BUS_INFO_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPciBusInfoSpecVersion = VK_EXT_PCI_BUS_INFO_SPEC_VERSION; + + //=== VK_AMD_display_native_hdr === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDDisplayNativeHdrExtensionName = VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDDisplayNativeHdrSpecVersion = VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIAImagepipeSurfaceExtensionName = VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIAImagepipeSurfaceSpecVersion = VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_KHR_shader_terminate_invocation === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderTerminateInvocationExtensionName = VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderTerminateInvocationSpecVersion = VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMetalSurfaceExtensionName = VK_EXT_METAL_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMetalSurfaceSpecVersion = VK_EXT_METAL_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentDensityMapExtensionName = VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentDensityMapSpecVersion = VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION; + + //=== VK_EXT_scalar_block_layout === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTScalarBlockLayoutExtensionName = VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTScalarBlockLayoutSpecVersion = VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION; + + //=== VK_GOOGLE_hlsl_functionality1 === + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEHlslFunctionality1ExtensionName = VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEHlslFunctionality1SpecVersion = VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION; + + //=== VK_GOOGLE_decorate_string === + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEDecorateStringExtensionName = VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEDecorateStringSpecVersion = VK_GOOGLE_DECORATE_STRING_SPEC_VERSION; + + //=== VK_EXT_subgroup_size_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSubgroupSizeControlExtensionName = VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSubgroupSizeControlSpecVersion = VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION; + + //=== VK_KHR_fragment_shading_rate === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRFragmentShadingRateExtensionName = VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRFragmentShadingRateSpecVersion = VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION; + + //=== VK_AMD_shader_core_properties2 === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderCoreProperties2ExtensionName = VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderCoreProperties2SpecVersion = VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION; + + //=== VK_AMD_device_coherent_memory === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDDeviceCoherentMemoryExtensionName = VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDDeviceCoherentMemorySpecVersion = VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION; + + //=== VK_KHR_dynamic_rendering_local_read === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDynamicRenderingLocalReadExtensionName = VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDynamicRenderingLocalReadSpecVersion = VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION; + + //=== VK_EXT_shader_image_atomic_int64 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderImageAtomicInt64ExtensionName = VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderImageAtomicInt64SpecVersion = VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION; + + //=== VK_KHR_shader_quad_control === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderQuadControlExtensionName = VK_KHR_SHADER_QUAD_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderQuadControlSpecVersion = VK_KHR_SHADER_QUAD_CONTROL_SPEC_VERSION; + + //=== VK_KHR_spirv_1_4 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSpirv14ExtensionName = VK_KHR_SPIRV_1_4_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSpirv14SpecVersion = VK_KHR_SPIRV_1_4_SPEC_VERSION; + + //=== VK_EXT_memory_budget === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMemoryBudgetExtensionName = VK_EXT_MEMORY_BUDGET_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMemoryBudgetSpecVersion = VK_EXT_MEMORY_BUDGET_SPEC_VERSION; + + //=== VK_EXT_memory_priority === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMemoryPriorityExtensionName = VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMemoryPrioritySpecVersion = VK_EXT_MEMORY_PRIORITY_SPEC_VERSION; + + //=== VK_KHR_surface_protected_capabilities === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSurfaceProtectedCapabilitiesExtensionName = VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSurfaceProtectedCapabilitiesSpecVersion = VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION; + + //=== VK_NV_dedicated_allocation_image_aliasing === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDedicatedAllocationImageAliasingExtensionName = VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDedicatedAllocationImageAliasingSpecVersion = VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION; + + //=== VK_KHR_separate_depth_stencil_layouts === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSeparateDepthStencilLayoutsExtensionName = VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSeparateDepthStencilLayoutsSpecVersion = VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION; + + //=== VK_EXT_buffer_device_address === + VULKAN_HPP_DEPRECATED( "The VK_EXT_buffer_device_address extension has been deprecated by VK_KHR_buffer_device_address." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTBufferDeviceAddressExtensionName = VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_EXT_buffer_device_address extension has been deprecated by VK_KHR_buffer_device_address." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTBufferDeviceAddressSpecVersion = VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION; + + //=== VK_EXT_tooling_info === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTToolingInfoExtensionName = VK_EXT_TOOLING_INFO_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTToolingInfoSpecVersion = VK_EXT_TOOLING_INFO_SPEC_VERSION; + + //=== VK_EXT_separate_stencil_usage === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSeparateStencilUsageExtensionName = VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSeparateStencilUsageSpecVersion = VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION; + + //=== VK_EXT_validation_features === + VULKAN_HPP_DEPRECATED( "The VK_EXT_validation_features extension has been deprecated by VK_EXT_layer_settings." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTValidationFeaturesExtensionName = VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_EXT_validation_features extension has been deprecated by VK_EXT_layer_settings." ) + VULKAN_HPP_CONSTEXPR_INLINE auto EXTValidationFeaturesSpecVersion = VK_EXT_VALIDATION_FEATURES_SPEC_VERSION; + + //=== VK_KHR_present_wait === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentWaitExtensionName = VK_KHR_PRESENT_WAIT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentWaitSpecVersion = VK_KHR_PRESENT_WAIT_SPEC_VERSION; + + //=== VK_NV_cooperative_matrix === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCooperativeMatrixExtensionName = VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCooperativeMatrixSpecVersion = VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION; + + //=== VK_NV_coverage_reduction_mode === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCoverageReductionModeExtensionName = VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCoverageReductionModeSpecVersion = VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION; + + //=== VK_EXT_fragment_shader_interlock === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentShaderInterlockExtensionName = VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentShaderInterlockSpecVersion = VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION; + + //=== VK_EXT_ycbcr_image_arrays === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTYcbcrImageArraysExtensionName = VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTYcbcrImageArraysSpecVersion = VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION; + + //=== VK_KHR_uniform_buffer_standard_layout === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRUniformBufferStandardLayoutExtensionName = VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRUniformBufferStandardLayoutSpecVersion = VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION; + + //=== VK_EXT_provoking_vertex === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTProvokingVertexExtensionName = VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTProvokingVertexSpecVersion = VK_EXT_PROVOKING_VERTEX_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFullScreenExclusiveExtensionName = VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFullScreenExclusiveSpecVersion = VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHeadlessSurfaceExtensionName = VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHeadlessSurfaceSpecVersion = VK_EXT_HEADLESS_SURFACE_SPEC_VERSION; + + //=== VK_KHR_buffer_device_address === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRBufferDeviceAddressExtensionName = VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRBufferDeviceAddressSpecVersion = VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION; + + //=== VK_EXT_line_rasterization === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLineRasterizationExtensionName = VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLineRasterizationSpecVersion = VK_EXT_LINE_RASTERIZATION_SPEC_VERSION; + + //=== VK_EXT_shader_atomic_float === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderAtomicFloatExtensionName = VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderAtomicFloatSpecVersion = VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION; + + //=== VK_EXT_host_query_reset === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHostQueryResetExtensionName = VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHostQueryResetSpecVersion = VK_EXT_HOST_QUERY_RESET_SPEC_VERSION; + + //=== VK_EXT_index_type_uint8 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTIndexTypeUint8ExtensionName = VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTIndexTypeUint8SpecVersion = VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION; + + //=== VK_EXT_extended_dynamic_state === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExtendedDynamicStateExtensionName = VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExtendedDynamicStateSpecVersion = VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION; + + //=== VK_KHR_deferred_host_operations === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDeferredHostOperationsExtensionName = VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDeferredHostOperationsSpecVersion = VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION; + + //=== VK_KHR_pipeline_executable_properties === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPipelineExecutablePropertiesExtensionName = VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPipelineExecutablePropertiesSpecVersion = VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION; + + //=== VK_EXT_host_image_copy === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHostImageCopyExtensionName = VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTHostImageCopySpecVersion = VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION; + + //=== VK_KHR_map_memory2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMapMemory2ExtensionName = VK_KHR_MAP_MEMORY_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMapMemory2SpecVersion = VK_KHR_MAP_MEMORY_2_SPEC_VERSION; + + //=== VK_EXT_map_memory_placed === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMapMemoryPlacedExtensionName = VK_EXT_MAP_MEMORY_PLACED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMapMemoryPlacedSpecVersion = VK_EXT_MAP_MEMORY_PLACED_SPEC_VERSION; + + //=== VK_EXT_shader_atomic_float2 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderAtomicFloat2ExtensionName = VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderAtomicFloat2SpecVersion = VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION; + + //=== VK_EXT_surface_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSurfaceMaintenance1ExtensionName = VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSurfaceMaintenance1SpecVersion = VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_EXT_swapchain_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSwapchainMaintenance1ExtensionName = VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSwapchainMaintenance1SpecVersion = VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_EXT_shader_demote_to_helper_invocation === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderDemoteToHelperInvocationExtensionName = VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderDemoteToHelperInvocationSpecVersion = VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION; + + //=== VK_NV_device_generated_commands === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceGeneratedCommandsExtensionName = VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceGeneratedCommandsSpecVersion = VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION; + + //=== VK_NV_inherited_viewport_scissor === + VULKAN_HPP_CONSTEXPR_INLINE auto NVInheritedViewportScissorExtensionName = VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVInheritedViewportScissorSpecVersion = VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION; + + //=== VK_KHR_shader_integer_dot_product === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderIntegerDotProductExtensionName = VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderIntegerDotProductSpecVersion = VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION; + + //=== VK_EXT_texel_buffer_alignment === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTTexelBufferAlignmentExtensionName = VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTTexelBufferAlignmentSpecVersion = VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION; + + //=== VK_QCOM_render_pass_transform === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRenderPassTransformExtensionName = VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRenderPassTransformSpecVersion = VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION; + + //=== VK_EXT_depth_bias_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthBiasControlExtensionName = VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthBiasControlSpecVersion = VK_EXT_DEPTH_BIAS_CONTROL_SPEC_VERSION; + + //=== VK_EXT_device_memory_report === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceMemoryReportExtensionName = VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceMemoryReportSpecVersion = VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION; + + //=== VK_EXT_acquire_drm_display === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAcquireDrmDisplayExtensionName = VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAcquireDrmDisplaySpecVersion = VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION; + + //=== VK_EXT_robustness2 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTRobustness2ExtensionName = VK_EXT_ROBUSTNESS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTRobustness2SpecVersion = VK_EXT_ROBUSTNESS_2_SPEC_VERSION; + + //=== VK_EXT_custom_border_color === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTCustomBorderColorExtensionName = VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTCustomBorderColorSpecVersion = VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION; + + //=== VK_GOOGLE_user_type === + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEUserTypeExtensionName = VK_GOOGLE_USER_TYPE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLEUserTypeSpecVersion = VK_GOOGLE_USER_TYPE_SPEC_VERSION; + + //=== VK_KHR_pipeline_library === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPipelineLibraryExtensionName = VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPipelineLibrarySpecVersion = VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION; + + //=== VK_NV_present_barrier === + VULKAN_HPP_CONSTEXPR_INLINE auto NVPresentBarrierExtensionName = VK_NV_PRESENT_BARRIER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVPresentBarrierSpecVersion = VK_NV_PRESENT_BARRIER_SPEC_VERSION; + + //=== VK_KHR_shader_non_semantic_info === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderNonSemanticInfoExtensionName = VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderNonSemanticInfoSpecVersion = VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION; + + //=== VK_KHR_present_id === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentIdExtensionName = VK_KHR_PRESENT_ID_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentIdSpecVersion = VK_KHR_PRESENT_ID_SPEC_VERSION; + + //=== VK_EXT_private_data === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPrivateDataExtensionName = VK_EXT_PRIVATE_DATA_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPrivateDataSpecVersion = VK_EXT_PRIVATE_DATA_SPEC_VERSION; + + //=== VK_EXT_pipeline_creation_cache_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineCreationCacheControlExtensionName = VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineCreationCacheControlSpecVersion = VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION; + + //=== VK_KHR_video_encode_queue === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeQueueExtensionName = VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeQueueSpecVersion = VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION; + + //=== VK_NV_device_diagnostics_config === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceDiagnosticsConfigExtensionName = VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceDiagnosticsConfigSpecVersion = VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION; + + //=== VK_QCOM_render_pass_store_ops === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRenderPassStoreOpsExtensionName = VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRenderPassStoreOpsSpecVersion = VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCudaKernelLaunchExtensionName = VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCudaKernelLaunchSpecVersion = VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMTileShadingExtensionName = VK_QCOM_TILE_SHADING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMTileShadingSpecVersion = VK_QCOM_TILE_SHADING_SPEC_VERSION; + + //=== VK_NV_low_latency === + VULKAN_HPP_CONSTEXPR_INLINE auto NVLowLatencyExtensionName = VK_NV_LOW_LATENCY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVLowLatencySpecVersion = VK_NV_LOW_LATENCY_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMetalObjectsExtensionName = VK_EXT_METAL_OBJECTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMetalObjectsSpecVersion = VK_EXT_METAL_OBJECTS_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSynchronization2ExtensionName = VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSynchronization2SpecVersion = VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION; + + //=== VK_EXT_descriptor_buffer === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDescriptorBufferExtensionName = VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDescriptorBufferSpecVersion = VK_EXT_DESCRIPTOR_BUFFER_SPEC_VERSION; + + //=== VK_EXT_graphics_pipeline_library === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTGraphicsPipelineLibraryExtensionName = VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTGraphicsPipelineLibrarySpecVersion = VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION; + + //=== VK_AMD_shader_early_and_late_fragment_tests === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderEarlyAndLateFragmentTestsExtensionName = VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDShaderEarlyAndLateFragmentTestsSpecVersion = VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION; + + //=== VK_KHR_fragment_shader_barycentric === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRFragmentShaderBarycentricExtensionName = VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRFragmentShaderBarycentricSpecVersion = VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION; + + //=== VK_KHR_shader_subgroup_uniform_control_flow === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderSubgroupUniformControlFlowExtensionName = VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderSubgroupUniformControlFlowSpecVersion = VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION; + + //=== VK_KHR_zero_initialize_workgroup_memory === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRZeroInitializeWorkgroupMemoryExtensionName = VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRZeroInitializeWorkgroupMemorySpecVersion = VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION; + + //=== VK_NV_fragment_shading_rate_enums === + VULKAN_HPP_CONSTEXPR_INLINE auto NVFragmentShadingRateEnumsExtensionName = VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVFragmentShadingRateEnumsSpecVersion = VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION; + + //=== VK_NV_ray_tracing_motion_blur === + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingMotionBlurExtensionName = VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingMotionBlurSpecVersion = VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION; + + //=== VK_EXT_mesh_shader === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMeshShaderExtensionName = VK_EXT_MESH_SHADER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMeshShaderSpecVersion = VK_EXT_MESH_SHADER_SPEC_VERSION; + + //=== VK_EXT_ycbcr_2plane_444_formats === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTYcbcr2Plane444FormatsExtensionName = VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTYcbcr2Plane444FormatsSpecVersion = VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION; + + //=== VK_EXT_fragment_density_map2 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentDensityMap2ExtensionName = VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentDensityMap2SpecVersion = VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION; + + //=== VK_QCOM_rotated_copy_commands === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRotatedCopyCommandsExtensionName = VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMRotatedCopyCommandsSpecVersion = VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION; + + //=== VK_EXT_image_robustness === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageRobustnessExtensionName = VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageRobustnessSpecVersion = VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION; + + //=== VK_KHR_workgroup_memory_explicit_layout === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWorkgroupMemoryExplicitLayoutExtensionName = VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRWorkgroupMemoryExplicitLayoutSpecVersion = VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION; + + //=== VK_KHR_copy_commands2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCopyCommands2ExtensionName = VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCopyCommands2SpecVersion = VK_KHR_COPY_COMMANDS_2_SPEC_VERSION; + + //=== VK_EXT_image_compression_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageCompressionControlExtensionName = VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageCompressionControlSpecVersion = VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION; + + //=== VK_EXT_attachment_feedback_loop_layout === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAttachmentFeedbackLoopLayoutExtensionName = VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAttachmentFeedbackLoopLayoutSpecVersion = VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION; + + //=== VK_EXT_4444_formats === + VULKAN_HPP_CONSTEXPR_INLINE auto EXT4444FormatsExtensionName = VK_EXT_4444_FORMATS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXT4444FormatsSpecVersion = VK_EXT_4444_FORMATS_SPEC_VERSION; + + //=== VK_EXT_device_fault === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceFaultExtensionName = VK_EXT_DEVICE_FAULT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceFaultSpecVersion = VK_EXT_DEVICE_FAULT_SPEC_VERSION; + + //=== VK_ARM_rasterization_order_attachment_access === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMRasterizationOrderAttachmentAccessExtensionName = VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMRasterizationOrderAttachmentAccessSpecVersion = VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION; + + //=== VK_EXT_rgba10x6_formats === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTRgba10X6FormatsExtensionName = VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTRgba10X6FormatsSpecVersion = VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + VULKAN_HPP_CONSTEXPR_INLINE auto NVAcquireWinrtDisplayExtensionName = VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVAcquireWinrtDisplaySpecVersion = VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDirectfbSurfaceExtensionName = VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDirectfbSurfaceSpecVersion = VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_VALVE_mutable_descriptor_type === + VULKAN_HPP_CONSTEXPR_INLINE auto VALVEMutableDescriptorTypeExtensionName = VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto VALVEMutableDescriptorTypeSpecVersion = VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION; + + //=== VK_EXT_vertex_input_dynamic_state === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTVertexInputDynamicStateExtensionName = VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTVertexInputDynamicStateSpecVersion = VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION; + + //=== VK_EXT_physical_device_drm === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPhysicalDeviceDrmExtensionName = VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPhysicalDeviceDrmSpecVersion = VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION; + + //=== VK_EXT_device_address_binding_report === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceAddressBindingReportExtensionName = VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceAddressBindingReportSpecVersion = VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_SPEC_VERSION; + + //=== VK_EXT_depth_clip_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClipControlExtensionName = VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClipControlSpecVersion = VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION; + + //=== VK_EXT_primitive_topology_list_restart === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPrimitiveTopologyListRestartExtensionName = VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPrimitiveTopologyListRestartSpecVersion = VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION; + + //=== VK_KHR_format_feature_flags2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRFormatFeatureFlags2ExtensionName = VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRFormatFeatureFlags2SpecVersion = VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION; + + //=== VK_EXT_present_mode_fifo_latest_ready === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPresentModeFifoLatestReadyExtensionName = VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPresentModeFifoLatestReadySpecVersion = VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIAExternalMemoryExtensionName = VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIAExternalMemorySpecVersion = VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIAExternalSemaphoreExtensionName = VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIAExternalSemaphoreSpecVersion = VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIABufferCollectionExtensionName = VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto FUCHSIABufferCollectionSpecVersion = VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEISubpassShadingExtensionName = VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEISubpassShadingSpecVersion = VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION; + + //=== VK_HUAWEI_invocation_mask === + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEIInvocationMaskExtensionName = VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEIInvocationMaskSpecVersion = VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION; + + //=== VK_NV_external_memory_rdma === + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryRdmaExtensionName = VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalMemoryRdmaSpecVersion = VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION; + + //=== VK_EXT_pipeline_properties === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelinePropertiesExtensionName = VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelinePropertiesSpecVersion = VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION; + + //=== VK_EXT_frame_boundary === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFrameBoundaryExtensionName = VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFrameBoundarySpecVersion = VK_EXT_FRAME_BOUNDARY_SPEC_VERSION; + + //=== VK_EXT_multisampled_render_to_single_sampled === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMultisampledRenderToSingleSampledExtensionName = VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMultisampledRenderToSingleSampledSpecVersion = VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION; + + //=== VK_EXT_extended_dynamic_state2 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExtendedDynamicState2ExtensionName = VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExtendedDynamicState2SpecVersion = VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto QNXScreenSurfaceExtensionName = VK_QNX_SCREEN_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QNXScreenSurfaceSpecVersion = VK_QNX_SCREEN_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTColorWriteEnableExtensionName = VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTColorWriteEnableSpecVersion = VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION; + + //=== VK_EXT_primitives_generated_query === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPrimitivesGeneratedQueryExtensionName = VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPrimitivesGeneratedQuerySpecVersion = VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION; + + //=== VK_KHR_ray_tracing_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayTracingMaintenance1ExtensionName = VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayTracingMaintenance1SpecVersion = VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_EXT_global_priority_query === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTGlobalPriorityQueryExtensionName = VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTGlobalPriorityQuerySpecVersion = VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION; + + //=== VK_EXT_image_view_min_lod === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageViewMinLodExtensionName = VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageViewMinLodSpecVersion = VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION; + + //=== VK_EXT_multi_draw === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMultiDrawExtensionName = VK_EXT_MULTI_DRAW_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMultiDrawSpecVersion = VK_EXT_MULTI_DRAW_SPEC_VERSION; + + //=== VK_EXT_image_2d_view_of_3d === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImage2DViewOf3DExtensionName = VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImage2DViewOf3DSpecVersion = VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION; + + //=== VK_KHR_portability_enumeration === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPortabilityEnumerationExtensionName = VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPortabilityEnumerationSpecVersion = VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION; + + //=== VK_EXT_shader_tile_image === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderTileImageExtensionName = VK_EXT_SHADER_TILE_IMAGE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderTileImageSpecVersion = VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION; + + //=== VK_EXT_opacity_micromap === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTOpacityMicromapExtensionName = VK_EXT_OPACITY_MICROMAP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTOpacityMicromapSpecVersion = VK_EXT_OPACITY_MICROMAP_SPEC_VERSION; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + VULKAN_HPP_DEPRECATED( "The VK_NV_displacement_micromap extension has been deprecated by VK_NV_cluster_acceleration_structure." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVDisplacementMicromapExtensionName = VK_NV_DISPLACEMENT_MICROMAP_EXTENSION_NAME; + VULKAN_HPP_DEPRECATED( "The VK_NV_displacement_micromap extension has been deprecated by VK_NV_cluster_acceleration_structure." ) + VULKAN_HPP_CONSTEXPR_INLINE auto NVDisplacementMicromapSpecVersion = VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_load_store_op_none === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLoadStoreOpNoneExtensionName = VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLoadStoreOpNoneSpecVersion = VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION; + + //=== VK_HUAWEI_cluster_culling_shader === + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEIClusterCullingShaderExtensionName = VK_HUAWEI_CLUSTER_CULLING_SHADER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEIClusterCullingShaderSpecVersion = VK_HUAWEI_CLUSTER_CULLING_SHADER_SPEC_VERSION; + + //=== VK_EXT_border_color_swizzle === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTBorderColorSwizzleExtensionName = VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTBorderColorSwizzleSpecVersion = VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION; + + //=== VK_EXT_pageable_device_local_memory === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPageableDeviceLocalMemoryExtensionName = VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPageableDeviceLocalMemorySpecVersion = VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION; + + //=== VK_KHR_maintenance4 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance4ExtensionName = VK_KHR_MAINTENANCE_4_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance4SpecVersion = VK_KHR_MAINTENANCE_4_SPEC_VERSION; + + //=== VK_ARM_shader_core_properties === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMShaderCorePropertiesExtensionName = VK_ARM_SHADER_CORE_PROPERTIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMShaderCorePropertiesSpecVersion = VK_ARM_SHADER_CORE_PROPERTIES_SPEC_VERSION; + + //=== VK_KHR_shader_subgroup_rotate === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderSubgroupRotateExtensionName = VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderSubgroupRotateSpecVersion = VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION; + + //=== VK_ARM_scheduling_controls === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMSchedulingControlsExtensionName = VK_ARM_SCHEDULING_CONTROLS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMSchedulingControlsSpecVersion = VK_ARM_SCHEDULING_CONTROLS_SPEC_VERSION; + + //=== VK_EXT_image_sliced_view_of_3d === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageSlicedViewOf3DExtensionName = VK_EXT_IMAGE_SLICED_VIEW_OF_3D_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageSlicedViewOf3DSpecVersion = VK_EXT_IMAGE_SLICED_VIEW_OF_3D_SPEC_VERSION; + + //=== VK_VALVE_descriptor_set_host_mapping === + VULKAN_HPP_CONSTEXPR_INLINE auto VALVEDescriptorSetHostMappingExtensionName = VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto VALVEDescriptorSetHostMappingSpecVersion = VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION; + + //=== VK_EXT_depth_clamp_zero_one === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClampZeroOneExtensionName = VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClampZeroOneSpecVersion = VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION; + + //=== VK_EXT_non_seamless_cube_map === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTNonSeamlessCubeMapExtensionName = VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTNonSeamlessCubeMapSpecVersion = VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION; + + //=== VK_ARM_render_pass_striped === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMRenderPassStripedExtensionName = VK_ARM_RENDER_PASS_STRIPED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMRenderPassStripedSpecVersion = VK_ARM_RENDER_PASS_STRIPED_SPEC_VERSION; + + //=== VK_QCOM_fragment_density_map_offset === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMFragmentDensityMapOffsetExtensionName = VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMFragmentDensityMapOffsetSpecVersion = VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION; + + //=== VK_NV_copy_memory_indirect === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCopyMemoryIndirectExtensionName = VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCopyMemoryIndirectSpecVersion = VK_NV_COPY_MEMORY_INDIRECT_SPEC_VERSION; + + //=== VK_NV_memory_decompression === + VULKAN_HPP_CONSTEXPR_INLINE auto NVMemoryDecompressionExtensionName = VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVMemoryDecompressionSpecVersion = VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION; + + //=== VK_NV_device_generated_commands_compute === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceGeneratedCommandsComputeExtensionName = VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDeviceGeneratedCommandsComputeSpecVersion = VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingLinearSweptSpheresExtensionName = VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingLinearSweptSpheresSpecVersion = VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_SPEC_VERSION; + + //=== VK_NV_linear_color_attachment === + VULKAN_HPP_CONSTEXPR_INLINE auto NVLinearColorAttachmentExtensionName = VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVLinearColorAttachmentSpecVersion = VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION; + + //=== VK_GOOGLE_surfaceless_query === + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLESurfacelessQueryExtensionName = VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto GOOGLESurfacelessQuerySpecVersion = VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION; + + //=== VK_KHR_shader_maximal_reconvergence === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderMaximalReconvergenceExtensionName = VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderMaximalReconvergenceSpecVersion = VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_SPEC_VERSION; + + //=== VK_EXT_image_compression_control_swapchain === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageCompressionControlSwapchainExtensionName = VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTImageCompressionControlSwapchainSpecVersion = VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION; + + //=== VK_QCOM_image_processing === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMImageProcessingExtensionName = VK_QCOM_IMAGE_PROCESSING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMImageProcessingSpecVersion = VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION; + + //=== VK_EXT_nested_command_buffer === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTNestedCommandBufferExtensionName = VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTNestedCommandBufferSpecVersion = VK_EXT_NESTED_COMMAND_BUFFER_SPEC_VERSION; + + //=== VK_EXT_external_memory_acquire_unmodified === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryAcquireUnmodifiedExtensionName = VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryAcquireUnmodifiedSpecVersion = VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_SPEC_VERSION; + + //=== VK_EXT_extended_dynamic_state3 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExtendedDynamicState3ExtensionName = VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExtendedDynamicState3SpecVersion = VK_EXT_EXTENDED_DYNAMIC_STATE_3_SPEC_VERSION; + + //=== VK_EXT_subpass_merge_feedback === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSubpassMergeFeedbackExtensionName = VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTSubpassMergeFeedbackSpecVersion = VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION; + + //=== VK_LUNARG_direct_driver_loading === + VULKAN_HPP_CONSTEXPR_INLINE auto LUNARGDirectDriverLoadingExtensionName = VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto LUNARGDirectDriverLoadingSpecVersion = VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION; + + //=== VK_ARM_tensors === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMTensorsExtensionName = VK_ARM_TENSORS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMTensorsSpecVersion = VK_ARM_TENSORS_SPEC_VERSION; + + //=== VK_EXT_shader_module_identifier === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderModuleIdentifierExtensionName = VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderModuleIdentifierSpecVersion = VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION; + + //=== VK_EXT_rasterization_order_attachment_access === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTRasterizationOrderAttachmentAccessExtensionName = VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTRasterizationOrderAttachmentAccessSpecVersion = VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION; + + //=== VK_NV_optical_flow === + VULKAN_HPP_CONSTEXPR_INLINE auto NVOpticalFlowExtensionName = VK_NV_OPTICAL_FLOW_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVOpticalFlowSpecVersion = VK_NV_OPTICAL_FLOW_SPEC_VERSION; + + //=== VK_EXT_legacy_dithering === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLegacyDitheringExtensionName = VK_EXT_LEGACY_DITHERING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLegacyDitheringSpecVersion = VK_EXT_LEGACY_DITHERING_SPEC_VERSION; + + //=== VK_EXT_pipeline_protected_access === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineProtectedAccessExtensionName = VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineProtectedAccessSpecVersion = VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_format_resolve === + VULKAN_HPP_CONSTEXPR_INLINE auto ANDROIDExternalFormatResolveExtensionName = VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ANDROIDExternalFormatResolveSpecVersion = VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_KHR_maintenance5 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance5ExtensionName = VK_KHR_MAINTENANCE_5_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance5SpecVersion = VK_KHR_MAINTENANCE_5_SPEC_VERSION; + + //=== VK_AMD_anti_lag === + VULKAN_HPP_CONSTEXPR_INLINE auto AMDAntiLagExtensionName = VK_AMD_ANTI_LAG_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto AMDAntiLagSpecVersion = VK_AMD_ANTI_LAG_SPEC_VERSION; + + //=== VK_KHR_present_id2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentId2ExtensionName = VK_KHR_PRESENT_ID_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentId2SpecVersion = VK_KHR_PRESENT_ID_2_SPEC_VERSION; + + //=== VK_KHR_present_wait2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentWait2ExtensionName = VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentWait2SpecVersion = VK_KHR_PRESENT_WAIT_2_SPEC_VERSION; + + //=== VK_KHR_ray_tracing_position_fetch === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayTracingPositionFetchExtensionName = VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRayTracingPositionFetchSpecVersion = VK_KHR_RAY_TRACING_POSITION_FETCH_SPEC_VERSION; + + //=== VK_EXT_shader_object === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderObjectExtensionName = VK_EXT_SHADER_OBJECT_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderObjectSpecVersion = VK_EXT_SHADER_OBJECT_SPEC_VERSION; + + //=== VK_KHR_pipeline_binary === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPipelineBinaryExtensionName = VK_KHR_PIPELINE_BINARY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPipelineBinarySpecVersion = VK_KHR_PIPELINE_BINARY_SPEC_VERSION; + + //=== VK_QCOM_tile_properties === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMTilePropertiesExtensionName = VK_QCOM_TILE_PROPERTIES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMTilePropertiesSpecVersion = VK_QCOM_TILE_PROPERTIES_SPEC_VERSION; + + //=== VK_SEC_amigo_profiling === + VULKAN_HPP_CONSTEXPR_INLINE auto SECAmigoProfilingExtensionName = VK_SEC_AMIGO_PROFILING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto SECAmigoProfilingSpecVersion = VK_SEC_AMIGO_PROFILING_SPEC_VERSION; + + //=== VK_KHR_surface_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSurfaceMaintenance1ExtensionName = VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSurfaceMaintenance1SpecVersion = VK_KHR_SURFACE_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_KHR_swapchain_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSwapchainMaintenance1ExtensionName = VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRSwapchainMaintenance1SpecVersion = VK_KHR_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_QCOM_multiview_per_view_viewports === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMMultiviewPerViewViewportsExtensionName = VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMMultiviewPerViewViewportsSpecVersion = VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_SPEC_VERSION; + + //=== VK_NV_ray_tracing_invocation_reorder === + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingInvocationReorderExtensionName = VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingInvocationReorderSpecVersion = VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION; + + //=== VK_NV_cooperative_vector === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCooperativeVectorExtensionName = VK_NV_COOPERATIVE_VECTOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCooperativeVectorSpecVersion = VK_NV_COOPERATIVE_VECTOR_SPEC_VERSION; + + //=== VK_NV_extended_sparse_address_space === + VULKAN_HPP_CONSTEXPR_INLINE auto NVExtendedSparseAddressSpaceExtensionName = VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVExtendedSparseAddressSpaceSpecVersion = VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION; + + //=== VK_EXT_mutable_descriptor_type === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMutableDescriptorTypeExtensionName = VK_EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTMutableDescriptorTypeSpecVersion = VK_EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION; + + //=== VK_EXT_legacy_vertex_attributes === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLegacyVertexAttributesExtensionName = VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLegacyVertexAttributesSpecVersion = VK_EXT_LEGACY_VERTEX_ATTRIBUTES_SPEC_VERSION; + + //=== VK_EXT_layer_settings === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLayerSettingsExtensionName = VK_EXT_LAYER_SETTINGS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTLayerSettingsSpecVersion = VK_EXT_LAYER_SETTINGS_SPEC_VERSION; + + //=== VK_ARM_shader_core_builtins === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMShaderCoreBuiltinsExtensionName = VK_ARM_SHADER_CORE_BUILTINS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMShaderCoreBuiltinsSpecVersion = VK_ARM_SHADER_CORE_BUILTINS_SPEC_VERSION; + + //=== VK_EXT_pipeline_library_group_handles === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineLibraryGroupHandlesExtensionName = VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTPipelineLibraryGroupHandlesSpecVersion = VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_SPEC_VERSION; + + //=== VK_EXT_dynamic_rendering_unused_attachments === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDynamicRenderingUnusedAttachmentsExtensionName = VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDynamicRenderingUnusedAttachmentsSpecVersion = VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_SPEC_VERSION; + + //=== VK_NV_low_latency2 === + VULKAN_HPP_CONSTEXPR_INLINE auto NVLowLatency2ExtensionName = VK_NV_LOW_LATENCY_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVLowLatency2SpecVersion = VK_NV_LOW_LATENCY_2_SPEC_VERSION; + + //=== VK_KHR_cooperative_matrix === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCooperativeMatrixExtensionName = VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCooperativeMatrixSpecVersion = VK_KHR_COOPERATIVE_MATRIX_SPEC_VERSION; + + //=== VK_ARM_data_graph === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMDataGraphExtensionName = VK_ARM_DATA_GRAPH_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMDataGraphSpecVersion = VK_ARM_DATA_GRAPH_SPEC_VERSION; + + //=== VK_QCOM_multiview_per_view_render_areas === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMMultiviewPerViewRenderAreasExtensionName = VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMMultiviewPerViewRenderAreasSpecVersion = VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_SPEC_VERSION; + + //=== VK_KHR_compute_shader_derivatives === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRComputeShaderDerivativesExtensionName = VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRComputeShaderDerivativesSpecVersion = VK_KHR_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION; + + //=== VK_KHR_video_decode_av1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeAv1ExtensionName = VK_KHR_VIDEO_DECODE_AV1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeAv1SpecVersion = VK_KHR_VIDEO_DECODE_AV1_SPEC_VERSION; + + //=== VK_KHR_video_encode_av1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeAv1ExtensionName = VK_KHR_VIDEO_ENCODE_AV1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeAv1SpecVersion = VK_KHR_VIDEO_ENCODE_AV1_SPEC_VERSION; + + //=== VK_KHR_video_decode_vp9 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeVp9ExtensionName = VK_KHR_VIDEO_DECODE_VP9_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoDecodeVp9SpecVersion = VK_KHR_VIDEO_DECODE_VP9_SPEC_VERSION; + + //=== VK_KHR_video_maintenance1 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoMaintenance1ExtensionName = VK_KHR_VIDEO_MAINTENANCE_1_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoMaintenance1SpecVersion = VK_KHR_VIDEO_MAINTENANCE_1_SPEC_VERSION; + + //=== VK_NV_per_stage_descriptor_set === + VULKAN_HPP_CONSTEXPR_INLINE auto NVPerStageDescriptorSetExtensionName = VK_NV_PER_STAGE_DESCRIPTOR_SET_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVPerStageDescriptorSetSpecVersion = VK_NV_PER_STAGE_DESCRIPTOR_SET_SPEC_VERSION; + + //=== VK_QCOM_image_processing2 === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMImageProcessing2ExtensionName = VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMImageProcessing2SpecVersion = VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION; + + //=== VK_QCOM_filter_cubic_weights === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMFilterCubicWeightsExtensionName = VK_QCOM_FILTER_CUBIC_WEIGHTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMFilterCubicWeightsSpecVersion = VK_QCOM_FILTER_CUBIC_WEIGHTS_SPEC_VERSION; + + //=== VK_QCOM_ycbcr_degamma === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMYcbcrDegammaExtensionName = VK_QCOM_YCBCR_DEGAMMA_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMYcbcrDegammaSpecVersion = VK_QCOM_YCBCR_DEGAMMA_SPEC_VERSION; + + //=== VK_QCOM_filter_cubic_clamp === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMFilterCubicClampExtensionName = VK_QCOM_FILTER_CUBIC_CLAMP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMFilterCubicClampSpecVersion = VK_QCOM_FILTER_CUBIC_CLAMP_SPEC_VERSION; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAttachmentFeedbackLoopDynamicStateExtensionName = VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTAttachmentFeedbackLoopDynamicStateSpecVersion = VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_SPEC_VERSION; + + //=== VK_KHR_vertex_attribute_divisor === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVertexAttributeDivisorExtensionName = VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVertexAttributeDivisorSpecVersion = VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION; + + //=== VK_KHR_load_store_op_none === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRLoadStoreOpNoneExtensionName = VK_KHR_LOAD_STORE_OP_NONE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRLoadStoreOpNoneSpecVersion = VK_KHR_LOAD_STORE_OP_NONE_SPEC_VERSION; + + //=== VK_KHR_unified_image_layouts === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRUnifiedImageLayoutsExtensionName = VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRUnifiedImageLayoutsSpecVersion = VK_KHR_UNIFIED_IMAGE_LAYOUTS_SPEC_VERSION; + + //=== VK_KHR_shader_float_controls2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderFloatControls2ExtensionName = VK_KHR_SHADER_FLOAT_CONTROLS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderFloatControls2SpecVersion = VK_KHR_SHADER_FLOAT_CONTROLS_2_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + VULKAN_HPP_CONSTEXPR_INLINE auto QNXExternalMemoryScreenBufferExtensionName = VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QNXExternalMemoryScreenBufferSpecVersion = VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_MSFT_layered_driver === + VULKAN_HPP_CONSTEXPR_INLINE auto MSFTLayeredDriverExtensionName = VK_MSFT_LAYERED_DRIVER_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto MSFTLayeredDriverSpecVersion = VK_MSFT_LAYERED_DRIVER_SPEC_VERSION; + + //=== VK_KHR_index_type_uint8 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRIndexTypeUint8ExtensionName = VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRIndexTypeUint8SpecVersion = VK_KHR_INDEX_TYPE_UINT8_SPEC_VERSION; + + //=== VK_KHR_line_rasterization === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRLineRasterizationExtensionName = VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRLineRasterizationSpecVersion = VK_KHR_LINE_RASTERIZATION_SPEC_VERSION; + + //=== VK_KHR_calibrated_timestamps === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCalibratedTimestampsExtensionName = VK_KHR_CALIBRATED_TIMESTAMPS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRCalibratedTimestampsSpecVersion = VK_KHR_CALIBRATED_TIMESTAMPS_SPEC_VERSION; + + //=== VK_KHR_shader_expect_assume === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderExpectAssumeExtensionName = VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderExpectAssumeSpecVersion = VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION; + + //=== VK_KHR_maintenance6 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance6ExtensionName = VK_KHR_MAINTENANCE_6_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance6SpecVersion = VK_KHR_MAINTENANCE_6_SPEC_VERSION; + + //=== VK_NV_descriptor_pool_overallocation === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDescriptorPoolOverallocationExtensionName = VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDescriptorPoolOverallocationSpecVersion = VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_SPEC_VERSION; + + //=== VK_QCOM_tile_memory_heap === + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMTileMemoryHeapExtensionName = VK_QCOM_TILE_MEMORY_HEAP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto QCOMTileMemoryHeapSpecVersion = VK_QCOM_TILE_MEMORY_HEAP_SPEC_VERSION; + + //=== VK_NV_display_stereo === + VULKAN_HPP_CONSTEXPR_INLINE auto NVDisplayStereoExtensionName = VK_NV_DISPLAY_STEREO_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVDisplayStereoSpecVersion = VK_NV_DISPLAY_STEREO_SPEC_VERSION; + + //=== VK_KHR_video_encode_intra_refresh === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeIntraRefreshExtensionName = VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeIntraRefreshSpecVersion = VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_SPEC_VERSION; + + //=== VK_KHR_video_encode_quantization_map === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeQuantizationMapExtensionName = VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoEncodeQuantizationMapSpecVersion = VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_SPEC_VERSION; + + //=== VK_NV_raw_access_chains === + VULKAN_HPP_CONSTEXPR_INLINE auto NVRawAccessChainsExtensionName = VK_NV_RAW_ACCESS_CHAINS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVRawAccessChainsSpecVersion = VK_NV_RAW_ACCESS_CHAINS_SPEC_VERSION; + + //=== VK_NV_external_compute_queue === + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalComputeQueueExtensionName = VK_NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVExternalComputeQueueSpecVersion = VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION; + + //=== VK_KHR_shader_relaxed_extended_instruction === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderRelaxedExtendedInstructionExtensionName = VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRShaderRelaxedExtendedInstructionSpecVersion = VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION; + + //=== VK_NV_command_buffer_inheritance === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCommandBufferInheritanceExtensionName = VK_NV_COMMAND_BUFFER_INHERITANCE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCommandBufferInheritanceSpecVersion = VK_NV_COMMAND_BUFFER_INHERITANCE_SPEC_VERSION; + + //=== VK_KHR_maintenance7 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance7ExtensionName = VK_KHR_MAINTENANCE_7_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance7SpecVersion = VK_KHR_MAINTENANCE_7_SPEC_VERSION; + + //=== VK_NV_shader_atomic_float16_vector === + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderAtomicFloat16VectorExtensionName = VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVShaderAtomicFloat16VectorSpecVersion = VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_SPEC_VERSION; + + //=== VK_EXT_shader_replicated_composites === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderReplicatedCompositesExtensionName = VK_EXT_SHADER_REPLICATED_COMPOSITES_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderReplicatedCompositesSpecVersion = VK_EXT_SHADER_REPLICATED_COMPOSITES_SPEC_VERSION; + + //=== VK_EXT_shader_float8 === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderFloat8ExtensionName = VK_EXT_SHADER_FLOAT8_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTShaderFloat8SpecVersion = VK_EXT_SHADER_FLOAT8_SPEC_VERSION; + + //=== VK_NV_ray_tracing_validation === + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingValidationExtensionName = VK_NV_RAY_TRACING_VALIDATION_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVRayTracingValidationSpecVersion = VK_NV_RAY_TRACING_VALIDATION_SPEC_VERSION; + + //=== VK_NV_cluster_acceleration_structure === + VULKAN_HPP_CONSTEXPR_INLINE auto NVClusterAccelerationStructureExtensionName = VK_NV_CLUSTER_ACCELERATION_STRUCTURE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVClusterAccelerationStructureSpecVersion = VK_NV_CLUSTER_ACCELERATION_STRUCTURE_SPEC_VERSION; + + //=== VK_NV_partitioned_acceleration_structure === + VULKAN_HPP_CONSTEXPR_INLINE auto NVPartitionedAccelerationStructureExtensionName = VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVPartitionedAccelerationStructureSpecVersion = VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_SPEC_VERSION; + + //=== VK_EXT_device_generated_commands === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceGeneratedCommandsExtensionName = VK_EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDeviceGeneratedCommandsSpecVersion = VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION; + + //=== VK_KHR_maintenance8 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance8ExtensionName = VK_KHR_MAINTENANCE_8_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance8SpecVersion = VK_KHR_MAINTENANCE_8_SPEC_VERSION; + + //=== VK_MESA_image_alignment_control === + VULKAN_HPP_CONSTEXPR_INLINE auto MESAImageAlignmentControlExtensionName = VK_MESA_IMAGE_ALIGNMENT_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto MESAImageAlignmentControlSpecVersion = VK_MESA_IMAGE_ALIGNMENT_CONTROL_SPEC_VERSION; + + //=== VK_EXT_depth_clamp_control === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClampControlExtensionName = VK_EXT_DEPTH_CLAMP_CONTROL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTDepthClampControlSpecVersion = VK_EXT_DEPTH_CLAMP_CONTROL_SPEC_VERSION; + + //=== VK_KHR_maintenance9 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance9ExtensionName = VK_KHR_MAINTENANCE_9_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRMaintenance9SpecVersion = VK_KHR_MAINTENANCE_9_SPEC_VERSION; + + //=== VK_KHR_video_maintenance2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoMaintenance2ExtensionName = VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRVideoMaintenance2SpecVersion = VK_KHR_VIDEO_MAINTENANCE_2_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + VULKAN_HPP_CONSTEXPR_INLINE auto OHOSSurfaceExtensionName = VK_OHOS_SURFACE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto OHOSSurfaceSpecVersion = VK_OHOS_SURFACE_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_HUAWEI_hdr_vivid === + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEIHdrVividExtensionName = VK_HUAWEI_HDR_VIVID_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto HUAWEIHdrVividSpecVersion = VK_HUAWEI_HDR_VIVID_SPEC_VERSION; + + //=== VK_NV_cooperative_matrix2 === + VULKAN_HPP_CONSTEXPR_INLINE auto NVCooperativeMatrix2ExtensionName = VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVCooperativeMatrix2SpecVersion = VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION; + + //=== VK_ARM_pipeline_opacity_micromap === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMPipelineOpacityMicromapExtensionName = VK_ARM_PIPELINE_OPACITY_MICROMAP_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMPipelineOpacityMicromapSpecVersion = VK_ARM_PIPELINE_OPACITY_MICROMAP_SPEC_VERSION; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryMetalExtensionName = VK_EXT_EXTERNAL_MEMORY_METAL_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTExternalMemoryMetalSpecVersion = VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_depth_clamp_zero_one === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDepthClampZeroOneExtensionName = VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRDepthClampZeroOneSpecVersion = VK_KHR_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION; + + //=== VK_EXT_vertex_attribute_robustness === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTVertexAttributeRobustnessExtensionName = VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTVertexAttributeRobustnessSpecVersion = VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION; + + //=== VK_ARM_format_pack === + VULKAN_HPP_CONSTEXPR_INLINE auto ARMFormatPackExtensionName = VK_ARM_FORMAT_PACK_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto ARMFormatPackSpecVersion = VK_ARM_FORMAT_PACK_SPEC_VERSION; + + //=== VK_VALVE_fragment_density_map_layered === + VULKAN_HPP_CONSTEXPR_INLINE auto VALVEFragmentDensityMapLayeredExtensionName = VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto VALVEFragmentDensityMapLayeredSpecVersion = VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_SPEC_VERSION; + + //=== VK_KHR_robustness2 === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRobustness2ExtensionName = VK_KHR_ROBUSTNESS_2_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRRobustness2SpecVersion = VK_KHR_ROBUSTNESS_2_SPEC_VERSION; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_present_metering === + VULKAN_HPP_CONSTEXPR_INLINE auto NVPresentMeteringExtensionName = VK_NV_PRESENT_METERING_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto NVPresentMeteringSpecVersion = VK_NV_PRESENT_METERING_SPEC_VERSION; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_fragment_density_map_offset === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentDensityMapOffsetExtensionName = VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTFragmentDensityMapOffsetSpecVersion = VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION; + + //=== VK_EXT_zero_initialize_device_memory === + VULKAN_HPP_CONSTEXPR_INLINE auto EXTZeroInitializeDeviceMemoryExtensionName = VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto EXTZeroInitializeDeviceMemorySpecVersion = VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_SPEC_VERSION; + + //=== VK_KHR_present_mode_fifo_latest_ready === + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentModeFifoLatestReadyExtensionName = VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto KHRPresentModeFifoLatestReadySpecVersion = VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION; + + //=== VK_SEC_pipeline_cache_incremental_mode === + VULKAN_HPP_CONSTEXPR_INLINE auto SECPipelineCacheIncrementalModeExtensionName = VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_EXTENSION_NAME; + VULKAN_HPP_CONSTEXPR_INLINE auto SECPipelineCacheIncrementalModeSpecVersion = VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_SPEC_VERSION; + +} // namespace VULKAN_HPP_NAMESPACE + +// clang-format off +#include +#include +#include +// clang-format on + +namespace VULKAN_HPP_NAMESPACE +{ +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + + //======================= + //=== STRUCTS EXTENDS === + //======================= + + //=== VK_VERSION_1_0 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_VERSION_1_1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_VERSION_1_2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_VERSION_1_3 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_VERSION_1_4 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_swapchain === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_display_swapchain === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_debug_report === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_rasterization_order === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_queue === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_decode_queue === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_dedicated_allocation === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_transform_feedback === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NVX_binary_import === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_encode_h264 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_encode_h265 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_decode_h264 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_texture_gather_bias_lod === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_corner_sampled_image === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_external_memory === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_win32_keyed_mutex === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_validation_flags === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_astc_decode_mode === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_keyed_mutex === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_conditional_rendering === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_incremental_present === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_clip_space_w_scaling === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_display_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_GOOGLE_display_timing === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NVX_multiview_per_view_attributes === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_viewport_swizzle === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_discard_rectangles === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_conservative_rasterization === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_depth_clip_enable === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_IMG_relaxed_line_rasterization === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shared_presentable_image === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_performance_query === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_debug_utils === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_mixed_attachment_samples === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shader_bfloat16 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_sample_locations === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_blend_operation_advanced === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_fragment_coverage_to_color === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_acceleration_structure === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_ray_tracing_pipeline === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_ray_query === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_framebuffer_mixed_samples === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_shader_sm_builtins === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_image_drm_format_modifier === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_validation_cache === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_portability_subset === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NV_shading_rate_image === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_ray_tracing === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_representative_fragment_test === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_filter_cubic === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_external_memory_host === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shader_clock === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_pipeline_compiler_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_shader_core_properties === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_decode_h265 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_memory_overallocation_behavior === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_vertex_attribute_divisor === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_frame_token === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_mesh_shader === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_shader_image_footprint === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_scissor_exclusive === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_device_diagnostic_checkpoints === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_INTEL_shader_integer_functions2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_INTEL_performance_query === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_pci_bus_info === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_display_native_hdr === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_fragment_density_map === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_fragment_shading_rate === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_shader_core_properties2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_device_coherent_memory === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_image_atomic_int64 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shader_quad_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_memory_budget === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_memory_priority === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_surface_protected_capabilities === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_dedicated_allocation_image_aliasing === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_buffer_device_address === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_validation_features === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_present_wait === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_cooperative_matrix === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_coverage_reduction_mode === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_fragment_shader_interlock === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_ycbcr_image_arrays === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_provoking_vertex === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_shader_atomic_float === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_extended_dynamic_state === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_pipeline_executable_properties === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_map_memory_placed === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_atomic_float2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_device_generated_commands === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_inherited_viewport_scissor === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_texel_buffer_alignment === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_render_pass_transform === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_depth_bias_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_device_memory_report === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_custom_border_color === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_pipeline_library === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_present_barrier === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_present_id === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_encode_queue === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_device_diagnostics_config === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_low_latency === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_descriptor_buffer === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_graphics_pipeline_library === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_AMD_shader_early_and_late_fragment_tests === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_fragment_shader_barycentric === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shader_subgroup_uniform_control_flow === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_fragment_shading_rate_enums === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_ray_tracing_motion_blur === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_mesh_shader === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_ycbcr_2plane_444_formats === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_fragment_density_map2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_rotated_copy_commands === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_workgroup_memory_explicit_layout === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_image_compression_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_attachment_feedback_loop_layout === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_4444_formats === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_device_fault === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_rgba10x6_formats === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_vertex_input_dynamic_state === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_physical_device_drm === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_device_address_binding_report === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_depth_clip_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_primitive_topology_list_restart === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_HUAWEI_invocation_mask === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_external_memory_rdma === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_pipeline_properties === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_frame_boundary === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_multisampled_render_to_single_sampled === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_extended_dynamic_state2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_color_write_enable === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_primitives_generated_query === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_ray_tracing_maintenance1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_image_view_min_lod === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_multi_draw === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_image_2d_view_of_3d === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_tile_image === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_opacity_micromap === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_HUAWEI_cluster_culling_shader === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_border_color_swizzle === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_pageable_device_local_memory === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_shader_core_properties === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_scheduling_controls === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_image_sliced_view_of_3d === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_VALVE_descriptor_set_host_mapping === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_non_seamless_cube_map === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_render_pass_striped === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_copy_memory_indirect === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_memory_decompression === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_device_generated_commands_compute === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_linear_color_attachment === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shader_maximal_reconvergence === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_image_compression_control_swapchain === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_image_processing === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_nested_command_buffer === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_external_memory_acquire_unmodified === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_extended_dynamic_state3 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_subpass_merge_feedback === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_LUNARG_direct_driver_loading === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_tensors === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_module_identifier === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_rasterization_order_attachment_access === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_optical_flow === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_legacy_dithering === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_format_resolve === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_AMD_anti_lag === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_present_id2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_present_wait2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_ray_tracing_position_fetch === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_object === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_pipeline_binary === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_tile_properties === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_SEC_amigo_profiling === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_surface_maintenance1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_swapchain_maintenance1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_multiview_per_view_viewports === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_ray_tracing_invocation_reorder === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_cooperative_vector === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_extended_sparse_address_space === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_mutable_descriptor_type === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_legacy_vertex_attributes === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_layer_settings === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_shader_core_builtins === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_pipeline_library_group_handles === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_dynamic_rendering_unused_attachments === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_low_latency2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_cooperative_matrix === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_data_graph === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_multiview_per_view_render_areas === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_compute_shader_derivatives === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_decode_av1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_encode_av1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_decode_vp9 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_maintenance1 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_per_stage_descriptor_set === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_image_processing2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_filter_cubic_weights === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_ycbcr_degamma === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_filter_cubic_clamp === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_unified_image_layouts === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_MSFT_layered_driver === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_descriptor_pool_overallocation === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_QCOM_tile_memory_heap === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_display_stereo === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_encode_intra_refresh === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_encode_quantization_map === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_raw_access_chains === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_external_compute_queue === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_shader_relaxed_extended_instruction === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_command_buffer_inheritance === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_maintenance7 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_shader_atomic_float16_vector === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_replicated_composites === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_shader_float8 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_ray_tracing_validation === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_cluster_acceleration_structure === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_partitioned_acceleration_structure === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_device_generated_commands === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_maintenance8 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_MESA_image_alignment_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_depth_clamp_control === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_maintenance9 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_video_maintenance2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_HUAWEI_hdr_vivid === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_NV_cooperative_matrix2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_pipeline_opacity_micromap === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_depth_clamp_zero_one === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_vertex_attribute_robustness === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_ARM_format_pack === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_VALVE_fragment_density_map_layered === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_robustness2 === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_present_metering === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_fragment_density_map_offset === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_EXT_zero_initialize_device_memory === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_KHR_present_mode_fifo_latest_ready === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + //=== VK_SEC_pipeline_cache_incremental_mode === + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + + template <> + struct StructExtends + { + enum + { + value = true + }; + }; + +#endif // VULKAN_HPP_DISABLE_ENHANCED_MODE + + namespace detail + { +#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + class DynamicLoader + { + public: +# ifdef VULKAN_HPP_NO_EXCEPTIONS + DynamicLoader( std::string const & vulkanLibraryName = {} ) VULKAN_HPP_NOEXCEPT +# else + DynamicLoader( std::string const & vulkanLibraryName = {} ) +# endif + { + if ( !vulkanLibraryName.empty() ) + { +# if defined( _WIN32 ) + m_library = ::LoadLibraryA( vulkanLibraryName.c_str() ); +# elif defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) + m_library = dlopen( vulkanLibraryName.c_str(), RTLD_NOW | RTLD_LOCAL ); +# else +# error unsupported platform +# endif + } + else + { +# if defined( _WIN32 ) + m_library = ::LoadLibraryA( "vulkan-1.dll" ); +# elif defined( __APPLE__ ) + m_library = dlopen( "libvulkan.dylib", RTLD_NOW | RTLD_LOCAL ); + if ( !m_library ) + { + m_library = dlopen( "libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL ); + } + if ( !m_library ) + { + m_library = dlopen( "libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL ); + } + // Add support for using Vulkan and MoltenVK in a Framework. App store rules for iOS + // strictly enforce no .dylib's. If they aren't found it just falls through + if ( !m_library ) + { + m_library = dlopen( "vulkan.framework/vulkan", RTLD_NOW | RTLD_LOCAL ); + } + if ( !m_library ) + { + m_library = dlopen( "MoltenVK.framework/MoltenVK", RTLD_NOW | RTLD_LOCAL ); + } + // modern versions of macOS don't search /usr/local/lib automatically contrary to what man dlopen says + // Vulkan SDK uses this as the system-wide installation location, so we're going to fallback to this if all else fails + if ( !m_library && ( getenv( "DYLD_FALLBACK_LIBRARY_PATH" ) == NULL ) ) + { + m_library = dlopen( "/usr/local/lib/libvulkan.dylib", RTLD_NOW | RTLD_LOCAL ); + } +# elif defined( __unix__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) + m_library = dlopen( "libvulkan.so", RTLD_NOW | RTLD_LOCAL ); + if ( !m_library ) + { + m_library = dlopen( "libvulkan.so.1", RTLD_NOW | RTLD_LOCAL ); + } +# else +# error unsupported platform +# endif + } + +# ifndef VULKAN_HPP_NO_EXCEPTIONS + if ( !m_library ) + { + // NOTE there should be an InitializationFailedError, but msvc insists on the symbol does not exist within the scope of this function. + throw std::runtime_error( "Failed to load vulkan library!" ); + } +# endif + } + + DynamicLoader( DynamicLoader const & ) = delete; + + DynamicLoader( DynamicLoader && other ) VULKAN_HPP_NOEXCEPT : m_library( other.m_library ) + { + other.m_library = nullptr; + } + + DynamicLoader & operator=( DynamicLoader const & ) = delete; + + DynamicLoader & operator=( DynamicLoader && other ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_library, other.m_library ); + return *this; + } + + ~DynamicLoader() VULKAN_HPP_NOEXCEPT + { + if ( m_library ) + { +# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) + dlclose( m_library ); +# elif defined( _WIN32 ) + ::FreeLibrary( m_library ); +# else +# error unsupported platform +# endif + } + } + + template + T getProcAddress( const char * function ) const VULKAN_HPP_NOEXCEPT + { +# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) + return (T)dlsym( m_library, function ); +# elif defined( _WIN32 ) + return ( T )::GetProcAddress( m_library, function ); +# else +# error unsupported platform +# endif + } + + bool success() const VULKAN_HPP_NOEXCEPT + { + return m_library != nullptr; + } + + private: +# if defined( __unix__ ) || defined( __APPLE__ ) || defined( __QNX__ ) || defined( __Fuchsia__ ) + void * m_library; +# elif defined( _WIN32 ) + ::HINSTANCE m_library; +# else +# error unsupported platform +# endif + }; +#endif + + using PFN_dummy = void ( * )(); + + class DispatchLoaderDynamic : public DispatchLoaderBase + { + public: + //=== VK_VERSION_1_0 === + PFN_vkCreateInstance vkCreateInstance = 0; + PFN_vkDestroyInstance vkDestroyInstance = 0; + PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; + PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; + PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; + PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; + PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; + PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; + PFN_vkCreateDevice vkCreateDevice = 0; + PFN_vkDestroyDevice vkDestroyDevice = 0; + PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = 0; + PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; + PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = 0; + PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; + PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; + PFN_vkQueueSubmit vkQueueSubmit = 0; + PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; + PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; + PFN_vkAllocateMemory vkAllocateMemory = 0; + PFN_vkFreeMemory vkFreeMemory = 0; + PFN_vkMapMemory vkMapMemory = 0; + PFN_vkUnmapMemory vkUnmapMemory = 0; + PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; + PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; + PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; + PFN_vkBindBufferMemory vkBindBufferMemory = 0; + PFN_vkBindImageMemory vkBindImageMemory = 0; + PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; + PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; + PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = 0; + PFN_vkQueueBindSparse vkQueueBindSparse = 0; + PFN_vkCreateFence vkCreateFence = 0; + PFN_vkDestroyFence vkDestroyFence = 0; + PFN_vkResetFences vkResetFences = 0; + PFN_vkGetFenceStatus vkGetFenceStatus = 0; + PFN_vkWaitForFences vkWaitForFences = 0; + PFN_vkCreateSemaphore vkCreateSemaphore = 0; + PFN_vkDestroySemaphore vkDestroySemaphore = 0; + PFN_vkCreateEvent vkCreateEvent = 0; + PFN_vkDestroyEvent vkDestroyEvent = 0; + PFN_vkGetEventStatus vkGetEventStatus = 0; + PFN_vkSetEvent vkSetEvent = 0; + PFN_vkResetEvent vkResetEvent = 0; + PFN_vkCreateQueryPool vkCreateQueryPool = 0; + PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; + PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; + PFN_vkCreateBuffer vkCreateBuffer = 0; + PFN_vkDestroyBuffer vkDestroyBuffer = 0; + PFN_vkCreateBufferView vkCreateBufferView = 0; + PFN_vkDestroyBufferView vkDestroyBufferView = 0; + PFN_vkCreateImage vkCreateImage = 0; + PFN_vkDestroyImage vkDestroyImage = 0; + PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; + PFN_vkCreateImageView vkCreateImageView = 0; + PFN_vkDestroyImageView vkDestroyImageView = 0; + PFN_vkCreateShaderModule vkCreateShaderModule = 0; + PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; + PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; + PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; + PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; + PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; + PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines = 0; + PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; + PFN_vkDestroyPipeline vkDestroyPipeline = 0; + PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; + PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; + PFN_vkCreateSampler vkCreateSampler = 0; + PFN_vkDestroySampler vkDestroySampler = 0; + PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; + PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; + PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; + PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; + PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; + PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; + PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; + PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; + PFN_vkCreateFramebuffer vkCreateFramebuffer = 0; + PFN_vkDestroyFramebuffer vkDestroyFramebuffer = 0; + PFN_vkCreateRenderPass vkCreateRenderPass = 0; + PFN_vkDestroyRenderPass vkDestroyRenderPass = 0; + PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity = 0; + PFN_vkCreateCommandPool vkCreateCommandPool = 0; + PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; + PFN_vkResetCommandPool vkResetCommandPool = 0; + PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; + PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; + PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; + PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; + PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; + PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; + PFN_vkCmdSetViewport vkCmdSetViewport = 0; + PFN_vkCmdSetScissor vkCmdSetScissor = 0; + PFN_vkCmdSetLineWidth vkCmdSetLineWidth = 0; + PFN_vkCmdSetDepthBias vkCmdSetDepthBias = 0; + PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants = 0; + PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds = 0; + PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = 0; + PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = 0; + PFN_vkCmdSetStencilReference vkCmdSetStencilReference = 0; + PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; + PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; + PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers = 0; + PFN_vkCmdDraw vkCmdDraw = 0; + PFN_vkCmdDrawIndexed vkCmdDrawIndexed = 0; + PFN_vkCmdDrawIndirect vkCmdDrawIndirect = 0; + PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect = 0; + PFN_vkCmdDispatch vkCmdDispatch = 0; + PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; + PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; + PFN_vkCmdCopyImage vkCmdCopyImage = 0; + PFN_vkCmdBlitImage vkCmdBlitImage = 0; + PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; + PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; + PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; + PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; + PFN_vkCmdClearColorImage vkCmdClearColorImage = 0; + PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage = 0; + PFN_vkCmdClearAttachments vkCmdClearAttachments = 0; + PFN_vkCmdResolveImage vkCmdResolveImage = 0; + PFN_vkCmdSetEvent vkCmdSetEvent = 0; + PFN_vkCmdResetEvent vkCmdResetEvent = 0; + PFN_vkCmdWaitEvents vkCmdWaitEvents = 0; + PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; + PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; + PFN_vkCmdEndQuery vkCmdEndQuery = 0; + PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; + PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; + PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; + PFN_vkCmdPushConstants vkCmdPushConstants = 0; + PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass = 0; + PFN_vkCmdNextSubpass vkCmdNextSubpass = 0; + PFN_vkCmdEndRenderPass vkCmdEndRenderPass = 0; + PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; + + //=== VK_VERSION_1_1 === + PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = 0; + PFN_vkBindBufferMemory2 vkBindBufferMemory2 = 0; + PFN_vkBindImageMemory2 vkBindImageMemory2 = 0; + PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures = 0; + PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask = 0; + PFN_vkCmdDispatchBase vkCmdDispatchBase = 0; + PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = 0; + PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2 = 0; + PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2 = 0; + PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2 = 0; + PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = 0; + PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = 0; + PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = 0; + PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = 0; + PFN_vkTrimCommandPool vkTrimCommandPool = 0; + PFN_vkGetDeviceQueue2 vkGetDeviceQueue2 = 0; + PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion = 0; + PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion = 0; + PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate = 0; + PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate = 0; + PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate = 0; + PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = 0; + PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0; + PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport = 0; + + //=== VK_VERSION_1_2 === + PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount = 0; + PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount = 0; + PFN_vkCreateRenderPass2 vkCreateRenderPass2 = 0; + PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2 = 0; + PFN_vkCmdNextSubpass2 vkCmdNextSubpass2 = 0; + PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2 = 0; + PFN_vkResetQueryPool vkResetQueryPool = 0; + PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue = 0; + PFN_vkWaitSemaphores vkWaitSemaphores = 0; + PFN_vkSignalSemaphore vkSignalSemaphore = 0; + PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = 0; + PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0; + PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0; + + //=== VK_VERSION_1_3 === + PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties = 0; + PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot = 0; + PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot = 0; + PFN_vkSetPrivateData vkSetPrivateData = 0; + PFN_vkGetPrivateData vkGetPrivateData = 0; + PFN_vkCmdSetEvent2 vkCmdSetEvent2 = 0; + PFN_vkCmdResetEvent2 vkCmdResetEvent2 = 0; + PFN_vkCmdWaitEvents2 vkCmdWaitEvents2 = 0; + PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = 0; + PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2 = 0; + PFN_vkQueueSubmit2 vkQueueSubmit2 = 0; + PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2 = 0; + PFN_vkCmdCopyImage2 vkCmdCopyImage2 = 0; + PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2 = 0; + PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2 = 0; + PFN_vkCmdBlitImage2 vkCmdBlitImage2 = 0; + PFN_vkCmdResolveImage2 vkCmdResolveImage2 = 0; + PFN_vkCmdBeginRendering vkCmdBeginRendering = 0; + PFN_vkCmdEndRendering vkCmdEndRendering = 0; + PFN_vkCmdSetCullMode vkCmdSetCullMode = 0; + PFN_vkCmdSetFrontFace vkCmdSetFrontFace = 0; + PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology = 0; + PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount = 0; + PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount = 0; + PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2 = 0; + PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable = 0; + PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable = 0; + PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp = 0; + PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable = 0; + PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable = 0; + PFN_vkCmdSetStencilOp vkCmdSetStencilOp = 0; + PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable = 0; + PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable = 0; + PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable = 0; + PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements = 0; + PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements = 0; + PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements = 0; + + //=== VK_VERSION_1_4 === + PFN_vkCmdSetLineStipple vkCmdSetLineStipple = 0; + PFN_vkMapMemory2 vkMapMemory2 = 0; + PFN_vkUnmapMemory2 vkUnmapMemory2 = 0; + PFN_vkCmdBindIndexBuffer2 vkCmdBindIndexBuffer2 = 0; + PFN_vkGetRenderingAreaGranularity vkGetRenderingAreaGranularity = 0; + PFN_vkGetDeviceImageSubresourceLayout vkGetDeviceImageSubresourceLayout = 0; + PFN_vkGetImageSubresourceLayout2 vkGetImageSubresourceLayout2 = 0; + PFN_vkCmdPushDescriptorSet vkCmdPushDescriptorSet = 0; + PFN_vkCmdPushDescriptorSetWithTemplate vkCmdPushDescriptorSetWithTemplate = 0; + PFN_vkCmdSetRenderingAttachmentLocations vkCmdSetRenderingAttachmentLocations = 0; + PFN_vkCmdSetRenderingInputAttachmentIndices vkCmdSetRenderingInputAttachmentIndices = 0; + PFN_vkCmdBindDescriptorSets2 vkCmdBindDescriptorSets2 = 0; + PFN_vkCmdPushConstants2 vkCmdPushConstants2 = 0; + PFN_vkCmdPushDescriptorSet2 vkCmdPushDescriptorSet2 = 0; + PFN_vkCmdPushDescriptorSetWithTemplate2 vkCmdPushDescriptorSetWithTemplate2 = 0; + PFN_vkCopyMemoryToImage vkCopyMemoryToImage = 0; + PFN_vkCopyImageToMemory vkCopyImageToMemory = 0; + PFN_vkCopyImageToImage vkCopyImageToImage = 0; + PFN_vkTransitionImageLayout vkTransitionImageLayout = 0; + + //=== VK_KHR_surface === + PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = 0; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = 0; + + //=== VK_KHR_swapchain === + PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = 0; + PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = 0; + PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = 0; + PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR = 0; + PFN_vkQueuePresentKHR vkQueuePresentKHR = 0; + PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR = 0; + PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR = 0; + PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = 0; + PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR = 0; + + //=== VK_KHR_display === + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = 0; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 0; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = 0; + PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = 0; + PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = 0; + PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = 0; + PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = 0; + + //=== VK_KHR_display_swapchain === + PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR = 0; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = 0; + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = 0; +#else + PFN_dummy vkCreateXlibSurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceXlibPresentationSupportKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = 0; + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = 0; +#else + PFN_dummy vkCreateXcbSurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceXcbPresentationSupportKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = 0; + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = 0; +#else + PFN_dummy vkCreateWaylandSurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceWaylandPresentationSupportKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0; +#else + PFN_dummy vkCreateAndroidSurfaceKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = 0; + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = 0; +#else + PFN_dummy vkCreateWin32SurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceWin32PresentationSupportKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = 0; + PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = 0; + PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = 0; + + //=== VK_EXT_debug_marker === + PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT = 0; + PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT = 0; + PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT = 0; + PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT = 0; + PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT = 0; + + //=== VK_KHR_video_queue === + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR = 0; + PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR = 0; + PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR = 0; + PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR = 0; + PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR = 0; + PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR = 0; + PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR = 0; + PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR = 0; + PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR = 0; + PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR = 0; + PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR = 0; + PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR = 0; + + //=== VK_KHR_video_decode_queue === + PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR = 0; + + //=== VK_EXT_transform_feedback === + PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT = 0; + PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT = 0; + PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT = 0; + PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT = 0; + PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT = 0; + PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT = 0; + + //=== VK_NVX_binary_import === + PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX = 0; + PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX = 0; + PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX = 0; + PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX = 0; + PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX = 0; + + //=== VK_NVX_image_view_handle === + PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX = 0; + PFN_vkGetImageViewHandle64NVX vkGetImageViewHandle64NVX = 0; + PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX = 0; + + //=== VK_AMD_draw_indirect_count === + PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD = 0; + PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD = 0; + + //=== VK_AMD_shader_info === + PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0; + + //=== VK_KHR_dynamic_rendering === + PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = 0; + PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR = 0; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0; +#else + PFN_dummy vkCreateStreamDescriptorSurfaceGGP_placeholder = 0; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 0; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV = 0; +#else + PFN_dummy vkGetMemoryWin32HandleNV_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; + PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; + PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; + PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; + + //=== VK_KHR_device_group === + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR = 0; + PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR = 0; + PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR = 0; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN = 0; +#else + PFN_dummy vkCreateViSurfaceNN_placeholder = 0; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_maintenance1 === + PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR = 0; + + //=== VK_KHR_device_group_creation === + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = 0; + + //=== VK_KHR_external_memory_capabilities === + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR = 0; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = 0; + PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = 0; +#else + PFN_dummy vkGetMemoryWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetMemoryWin32HandlePropertiesKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = 0; + PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR = 0; + + //=== VK_KHR_external_semaphore_capabilities === + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 0; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = 0; + PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = 0; +#else + PFN_dummy vkImportSemaphoreWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetSemaphoreWin32HandleKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR = 0; + PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = 0; + + //=== VK_KHR_push_descriptor === + PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR = 0; + PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR = 0; + + //=== VK_EXT_conditional_rendering === + PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT = 0; + PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT = 0; + + //=== VK_KHR_descriptor_update_template === + PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR = 0; + PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR = 0; + PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR = 0; + + //=== VK_NV_clip_space_w_scaling === + PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV = 0; + + //=== VK_EXT_direct_mode_display === + PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT = 0; + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT = 0; + PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT = 0; +#else + PFN_dummy vkAcquireXlibDisplayEXT_placeholder = 0; + PFN_dummy vkGetRandROutputDisplayEXT_placeholder = 0; +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT = 0; + + //=== VK_EXT_display_control === + PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT = 0; + PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT = 0; + PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT = 0; + PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT = 0; + + //=== VK_GOOGLE_display_timing === + PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE = 0; + PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE = 0; + + //=== VK_EXT_discard_rectangles === + PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT = 0; + PFN_vkCmdSetDiscardRectangleEnableEXT vkCmdSetDiscardRectangleEnableEXT = 0; + PFN_vkCmdSetDiscardRectangleModeEXT vkCmdSetDiscardRectangleModeEXT = 0; + + //=== VK_EXT_hdr_metadata === + PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT = 0; + + //=== VK_KHR_create_renderpass2 === + PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR = 0; + PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR = 0; + PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR = 0; + PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR = 0; + + //=== VK_KHR_shared_presentable_image === + PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = 0; + + //=== VK_KHR_external_fence_capabilities === + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR = 0; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR = 0; + PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR = 0; +#else + PFN_dummy vkImportFenceWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetFenceWin32HandleKHR_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0; + PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0; + + //=== VK_KHR_performance_query === + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = 0; + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 0; + PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0; + PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0; + + //=== VK_KHR_get_surface_capabilities2 === + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = 0; + + //=== VK_KHR_get_display_properties2 === + PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = 0; + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 0; + PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = 0; + PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = 0; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = 0; +#else + PFN_dummy vkCreateIOSSurfaceMVK_placeholder = 0; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0; +#else + PFN_dummy vkCreateMacOSSurfaceMVK_placeholder = 0; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0; + PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT = 0; + PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT = 0; + PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT = 0; + PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT = 0; + PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT = 0; + PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT = 0; + PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT = 0; + PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = 0; + PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = 0; + PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT = 0; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID = 0; + PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID = 0; +#else + PFN_dummy vkGetAndroidHardwareBufferPropertiesANDROID_placeholder = 0; + PFN_dummy vkGetMemoryAndroidHardwareBufferANDROID_placeholder = 0; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + PFN_vkCreateExecutionGraphPipelinesAMDX vkCreateExecutionGraphPipelinesAMDX = 0; + PFN_vkGetExecutionGraphPipelineScratchSizeAMDX vkGetExecutionGraphPipelineScratchSizeAMDX = 0; + PFN_vkGetExecutionGraphPipelineNodeIndexAMDX vkGetExecutionGraphPipelineNodeIndexAMDX = 0; + PFN_vkCmdInitializeGraphScratchMemoryAMDX vkCmdInitializeGraphScratchMemoryAMDX = 0; + PFN_vkCmdDispatchGraphAMDX vkCmdDispatchGraphAMDX = 0; + PFN_vkCmdDispatchGraphIndirectAMDX vkCmdDispatchGraphIndirectAMDX = 0; + PFN_vkCmdDispatchGraphIndirectCountAMDX vkCmdDispatchGraphIndirectCountAMDX = 0; +#else + PFN_dummy vkCreateExecutionGraphPipelinesAMDX_placeholder = 0; + PFN_dummy vkGetExecutionGraphPipelineScratchSizeAMDX_placeholder = 0; + PFN_dummy vkGetExecutionGraphPipelineNodeIndexAMDX_placeholder = 0; + PFN_dummy vkCmdInitializeGraphScratchMemoryAMDX_placeholder = 0; + PFN_dummy vkCmdDispatchGraphAMDX_placeholder = 0; + PFN_dummy vkCmdDispatchGraphIndirectAMDX_placeholder = 0; + PFN_dummy vkCmdDispatchGraphIndirectCountAMDX_placeholder = 0; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT = 0; + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT = 0; + + //=== VK_KHR_get_memory_requirements2 === + PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR = 0; + PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR = 0; + PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR = 0; + + //=== VK_KHR_acceleration_structure === + PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR = 0; + PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR = 0; + PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR = 0; + PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR = 0; + PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR = 0; + PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR = 0; + PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR = 0; + PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR = 0; + PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR = 0; + PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR = 0; + PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR = 0; + PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR = 0; + PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR = 0; + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR = 0; + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR = 0; + PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR = 0; + + //=== VK_KHR_ray_tracing_pipeline === + PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR = 0; + PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR = 0; + PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR = 0; + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = 0; + PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR = 0; + PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR = 0; + PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR = 0; + + //=== VK_KHR_sampler_ycbcr_conversion === + PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR = 0; + PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR = 0; + + //=== VK_KHR_bind_memory2 === + PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR = 0; + PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR = 0; + + //=== VK_EXT_image_drm_format_modifier === + PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT = 0; + + //=== VK_EXT_validation_cache === + PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT = 0; + PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT = 0; + PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT = 0; + PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT = 0; + + //=== VK_NV_shading_rate_image === + PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV = 0; + PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV = 0; + PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0; + + //=== VK_NV_ray_tracing === + PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV = 0; + PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV = 0; + PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV = 0; + PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV = 0; + PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV = 0; + PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV = 0; + PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV = 0; + PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV = 0; + PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV = 0; + PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV = 0; + PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV = 0; + PFN_vkCompileDeferredNV vkCompileDeferredNV = 0; + + //=== VK_KHR_maintenance3 === + PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0; + + //=== VK_KHR_draw_indirect_count === + PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0; + PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0; + + //=== VK_EXT_external_memory_host === + PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT = 0; + + //=== VK_AMD_buffer_marker === + PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0; + PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD = 0; + + //=== VK_EXT_calibrated_timestamps === + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = 0; + PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT = 0; + + //=== VK_NV_mesh_shader === + PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV = 0; + PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV = 0; + PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV = 0; + + //=== VK_NV_scissor_exclusive === + PFN_vkCmdSetExclusiveScissorEnableNV vkCmdSetExclusiveScissorEnableNV = 0; + PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV = 0; + + //=== VK_NV_device_diagnostic_checkpoints === + PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV = 0; + PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV = 0; + PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV = 0; + + //=== VK_KHR_timeline_semaphore === + PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR = 0; + PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR = 0; + PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR = 0; + + //=== VK_INTEL_performance_query === + PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL = 0; + PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL = 0; + PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL = 0; + PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL = 0; + PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL = 0; + PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL = 0; + PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL = 0; + PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL = 0; + PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL = 0; + + //=== VK_AMD_display_native_hdr === + PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD = 0; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = 0; +#else + PFN_dummy vkCreateImagePipeSurfaceFUCHSIA_placeholder = 0; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = 0; +#else + PFN_dummy vkCreateMetalSurfaceEXT_placeholder = 0; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR = 0; + PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR = 0; + + //=== VK_KHR_dynamic_rendering_local_read === + PFN_vkCmdSetRenderingAttachmentLocationsKHR vkCmdSetRenderingAttachmentLocationsKHR = 0; + PFN_vkCmdSetRenderingInputAttachmentIndicesKHR vkCmdSetRenderingInputAttachmentIndicesKHR = 0; + + //=== VK_EXT_buffer_device_address === + PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT = 0; + + //=== VK_EXT_tooling_info === + PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT = 0; + + //=== VK_KHR_present_wait === + PFN_vkWaitForPresentKHR vkWaitForPresentKHR = 0; + + //=== VK_NV_cooperative_matrix === + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0; + + //=== VK_NV_coverage_reduction_mode === + PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = 0; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT = 0; + PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT = 0; + PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT = 0; + PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT = 0; +#else + PFN_dummy vkGetPhysicalDeviceSurfacePresentModes2EXT_placeholder = 0; + PFN_dummy vkAcquireFullScreenExclusiveModeEXT_placeholder = 0; + PFN_dummy vkReleaseFullScreenExclusiveModeEXT_placeholder = 0; + PFN_dummy vkGetDeviceGroupSurfacePresentModes2EXT_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = 0; + + //=== VK_KHR_buffer_device_address === + PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR = 0; + PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR = 0; + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR = 0; + + //=== VK_EXT_line_rasterization === + PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT = 0; + + //=== VK_EXT_host_query_reset === + PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT = 0; + + //=== VK_EXT_extended_dynamic_state === + PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT = 0; + PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT = 0; + PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT = 0; + PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT = 0; + PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT = 0; + PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT = 0; + PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT = 0; + PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT = 0; + PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT = 0; + PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT = 0; + PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = 0; + PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = 0; + + //=== VK_KHR_deferred_host_operations === + PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR = 0; + PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR = 0; + PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR = 0; + PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR = 0; + PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR = 0; + + //=== VK_KHR_pipeline_executable_properties === + PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR = 0; + PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR = 0; + PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR = 0; + + //=== VK_EXT_host_image_copy === + PFN_vkCopyMemoryToImageEXT vkCopyMemoryToImageEXT = 0; + PFN_vkCopyImageToMemoryEXT vkCopyImageToMemoryEXT = 0; + PFN_vkCopyImageToImageEXT vkCopyImageToImageEXT = 0; + PFN_vkTransitionImageLayoutEXT vkTransitionImageLayoutEXT = 0; + PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT = 0; + + //=== VK_KHR_map_memory2 === + PFN_vkMapMemory2KHR vkMapMemory2KHR = 0; + PFN_vkUnmapMemory2KHR vkUnmapMemory2KHR = 0; + + //=== VK_EXT_swapchain_maintenance1 === + PFN_vkReleaseSwapchainImagesEXT vkReleaseSwapchainImagesEXT = 0; + + //=== VK_NV_device_generated_commands === + PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV = 0; + PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV = 0; + PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV = 0; + PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV = 0; + PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV = 0; + PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV = 0; + + //=== VK_EXT_depth_bias_control === + PFN_vkCmdSetDepthBias2EXT vkCmdSetDepthBias2EXT = 0; + + //=== VK_EXT_acquire_drm_display === + PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT = 0; + PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0; + + //=== VK_EXT_private_data === + PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0; + PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0; + PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT = 0; + PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT = 0; + + //=== VK_KHR_video_encode_queue === + PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = 0; + PFN_vkGetEncodedVideoSessionParametersKHR vkGetEncodedVideoSessionParametersKHR = 0; + PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR = 0; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + PFN_vkCreateCudaModuleNV vkCreateCudaModuleNV = 0; + PFN_vkGetCudaModuleCacheNV vkGetCudaModuleCacheNV = 0; + PFN_vkCreateCudaFunctionNV vkCreateCudaFunctionNV = 0; + PFN_vkDestroyCudaModuleNV vkDestroyCudaModuleNV = 0; + PFN_vkDestroyCudaFunctionNV vkDestroyCudaFunctionNV = 0; + PFN_vkCmdCudaLaunchKernelNV vkCmdCudaLaunchKernelNV = 0; +#else + PFN_dummy vkCreateCudaModuleNV_placeholder = 0; + PFN_dummy vkGetCudaModuleCacheNV_placeholder = 0; + PFN_dummy vkCreateCudaFunctionNV_placeholder = 0; + PFN_dummy vkDestroyCudaModuleNV_placeholder = 0; + PFN_dummy vkDestroyCudaFunctionNV_placeholder = 0; + PFN_dummy vkCmdCudaLaunchKernelNV_placeholder = 0; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + PFN_vkCmdDispatchTileQCOM vkCmdDispatchTileQCOM = 0; + PFN_vkCmdBeginPerTileExecutionQCOM vkCmdBeginPerTileExecutionQCOM = 0; + PFN_vkCmdEndPerTileExecutionQCOM vkCmdEndPerTileExecutionQCOM = 0; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT = 0; +#else + PFN_dummy vkExportMetalObjectsEXT_placeholder = 0; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR = 0; + PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR = 0; + PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR = 0; + PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = 0; + PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR = 0; + PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = 0; + + //=== VK_EXT_descriptor_buffer === + PFN_vkGetDescriptorSetLayoutSizeEXT vkGetDescriptorSetLayoutSizeEXT = 0; + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT vkGetDescriptorSetLayoutBindingOffsetEXT = 0; + PFN_vkGetDescriptorEXT vkGetDescriptorEXT = 0; + PFN_vkCmdBindDescriptorBuffersEXT vkCmdBindDescriptorBuffersEXT = 0; + PFN_vkCmdSetDescriptorBufferOffsetsEXT vkCmdSetDescriptorBufferOffsetsEXT = 0; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT vkCmdBindDescriptorBufferEmbeddedSamplersEXT = 0; + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT vkGetBufferOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT vkGetImageOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT vkGetImageViewOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT vkGetSamplerOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = 0; + + //=== VK_NV_fragment_shading_rate_enums === + PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV = 0; + + //=== VK_EXT_mesh_shader === + PFN_vkCmdDrawMeshTasksEXT vkCmdDrawMeshTasksEXT = 0; + PFN_vkCmdDrawMeshTasksIndirectEXT vkCmdDrawMeshTasksIndirectEXT = 0; + PFN_vkCmdDrawMeshTasksIndirectCountEXT vkCmdDrawMeshTasksIndirectCountEXT = 0; + + //=== VK_KHR_copy_commands2 === + PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR = 0; + PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR = 0; + PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR = 0; + PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR = 0; + PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR = 0; + PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR = 0; + + //=== VK_EXT_device_fault === + PFN_vkGetDeviceFaultInfoEXT vkGetDeviceFaultInfoEXT = 0; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV = 0; + PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV = 0; +#else + PFN_dummy vkAcquireWinrtDisplayNV_placeholder = 0; + PFN_dummy vkGetWinrtDisplayNV_placeholder = 0; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = 0; + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = 0; +#else + PFN_dummy vkCreateDirectFBSurfaceEXT_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceDirectFBPresentationSupportEXT_placeholder = 0; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0; + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0; +#else + PFN_dummy vkGetMemoryZirconHandleFUCHSIA_placeholder = 0; + PFN_dummy vkGetMemoryZirconHandlePropertiesFUCHSIA_placeholder = 0; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA = 0; + PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = 0; +#else + PFN_dummy vkImportSemaphoreZirconHandleFUCHSIA_placeholder = 0; + PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA = 0; + PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA = 0; + PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0; + PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA = 0; + PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA = 0; +#else + PFN_dummy vkCreateBufferCollectionFUCHSIA_placeholder = 0; + PFN_dummy vkSetBufferCollectionImageConstraintsFUCHSIA_placeholder = 0; + PFN_dummy vkSetBufferCollectionBufferConstraintsFUCHSIA_placeholder = 0; + PFN_dummy vkDestroyBufferCollectionFUCHSIA_placeholder = 0; + PFN_dummy vkGetBufferCollectionPropertiesFUCHSIA_placeholder = 0; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0; + PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0; + + //=== VK_HUAWEI_invocation_mask === + PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI = 0; + + //=== VK_NV_external_memory_rdma === + PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV = 0; + + //=== VK_EXT_pipeline_properties === + PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT = 0; + + //=== VK_EXT_extended_dynamic_state2 === + PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT = 0; + PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT = 0; + PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT = 0; + PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT = 0; + PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT = 0; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = 0; + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = 0; +#else + PFN_dummy vkCreateScreenSurfaceQNX_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceScreenPresentationSupportQNX_placeholder = 0; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT = 0; + + //=== VK_KHR_ray_tracing_maintenance1 === + PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR = 0; + + //=== VK_EXT_multi_draw === + PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0; + PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0; + + //=== VK_EXT_opacity_micromap === + PFN_vkCreateMicromapEXT vkCreateMicromapEXT = 0; + PFN_vkDestroyMicromapEXT vkDestroyMicromapEXT = 0; + PFN_vkCmdBuildMicromapsEXT vkCmdBuildMicromapsEXT = 0; + PFN_vkBuildMicromapsEXT vkBuildMicromapsEXT = 0; + PFN_vkCopyMicromapEXT vkCopyMicromapEXT = 0; + PFN_vkCopyMicromapToMemoryEXT vkCopyMicromapToMemoryEXT = 0; + PFN_vkCopyMemoryToMicromapEXT vkCopyMemoryToMicromapEXT = 0; + PFN_vkWriteMicromapsPropertiesEXT vkWriteMicromapsPropertiesEXT = 0; + PFN_vkCmdCopyMicromapEXT vkCmdCopyMicromapEXT = 0; + PFN_vkCmdCopyMicromapToMemoryEXT vkCmdCopyMicromapToMemoryEXT = 0; + PFN_vkCmdCopyMemoryToMicromapEXT vkCmdCopyMemoryToMicromapEXT = 0; + PFN_vkCmdWriteMicromapsPropertiesEXT vkCmdWriteMicromapsPropertiesEXT = 0; + PFN_vkGetDeviceMicromapCompatibilityEXT vkGetDeviceMicromapCompatibilityEXT = 0; + PFN_vkGetMicromapBuildSizesEXT vkGetMicromapBuildSizesEXT = 0; + + //=== VK_HUAWEI_cluster_culling_shader === + PFN_vkCmdDrawClusterHUAWEI vkCmdDrawClusterHUAWEI = 0; + PFN_vkCmdDrawClusterIndirectHUAWEI vkCmdDrawClusterIndirectHUAWEI = 0; + + //=== VK_EXT_pageable_device_local_memory === + PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT = 0; + + //=== VK_KHR_maintenance4 === + PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR = 0; + PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR = 0; + PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR = 0; + + //=== VK_VALVE_descriptor_set_host_mapping === + PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE = 0; + PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE = 0; + + //=== VK_NV_copy_memory_indirect === + PFN_vkCmdCopyMemoryIndirectNV vkCmdCopyMemoryIndirectNV = 0; + PFN_vkCmdCopyMemoryToImageIndirectNV vkCmdCopyMemoryToImageIndirectNV = 0; + + //=== VK_NV_memory_decompression === + PFN_vkCmdDecompressMemoryNV vkCmdDecompressMemoryNV = 0; + PFN_vkCmdDecompressMemoryIndirectCountNV vkCmdDecompressMemoryIndirectCountNV = 0; + + //=== VK_NV_device_generated_commands_compute === + PFN_vkGetPipelineIndirectMemoryRequirementsNV vkGetPipelineIndirectMemoryRequirementsNV = 0; + PFN_vkCmdUpdatePipelineIndirectBufferNV vkCmdUpdatePipelineIndirectBufferNV = 0; + PFN_vkGetPipelineIndirectDeviceAddressNV vkGetPipelineIndirectDeviceAddressNV = 0; + + //=== VK_EXT_extended_dynamic_state3 === + PFN_vkCmdSetDepthClampEnableEXT vkCmdSetDepthClampEnableEXT = 0; + PFN_vkCmdSetPolygonModeEXT vkCmdSetPolygonModeEXT = 0; + PFN_vkCmdSetRasterizationSamplesEXT vkCmdSetRasterizationSamplesEXT = 0; + PFN_vkCmdSetSampleMaskEXT vkCmdSetSampleMaskEXT = 0; + PFN_vkCmdSetAlphaToCoverageEnableEXT vkCmdSetAlphaToCoverageEnableEXT = 0; + PFN_vkCmdSetAlphaToOneEnableEXT vkCmdSetAlphaToOneEnableEXT = 0; + PFN_vkCmdSetLogicOpEnableEXT vkCmdSetLogicOpEnableEXT = 0; + PFN_vkCmdSetColorBlendEnableEXT vkCmdSetColorBlendEnableEXT = 0; + PFN_vkCmdSetColorBlendEquationEXT vkCmdSetColorBlendEquationEXT = 0; + PFN_vkCmdSetColorWriteMaskEXT vkCmdSetColorWriteMaskEXT = 0; + PFN_vkCmdSetTessellationDomainOriginEXT vkCmdSetTessellationDomainOriginEXT = 0; + PFN_vkCmdSetRasterizationStreamEXT vkCmdSetRasterizationStreamEXT = 0; + PFN_vkCmdSetConservativeRasterizationModeEXT vkCmdSetConservativeRasterizationModeEXT = 0; + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT vkCmdSetExtraPrimitiveOverestimationSizeEXT = 0; + PFN_vkCmdSetDepthClipEnableEXT vkCmdSetDepthClipEnableEXT = 0; + PFN_vkCmdSetSampleLocationsEnableEXT vkCmdSetSampleLocationsEnableEXT = 0; + PFN_vkCmdSetColorBlendAdvancedEXT vkCmdSetColorBlendAdvancedEXT = 0; + PFN_vkCmdSetProvokingVertexModeEXT vkCmdSetProvokingVertexModeEXT = 0; + PFN_vkCmdSetLineRasterizationModeEXT vkCmdSetLineRasterizationModeEXT = 0; + PFN_vkCmdSetLineStippleEnableEXT vkCmdSetLineStippleEnableEXT = 0; + PFN_vkCmdSetDepthClipNegativeOneToOneEXT vkCmdSetDepthClipNegativeOneToOneEXT = 0; + PFN_vkCmdSetViewportWScalingEnableNV vkCmdSetViewportWScalingEnableNV = 0; + PFN_vkCmdSetViewportSwizzleNV vkCmdSetViewportSwizzleNV = 0; + PFN_vkCmdSetCoverageToColorEnableNV vkCmdSetCoverageToColorEnableNV = 0; + PFN_vkCmdSetCoverageToColorLocationNV vkCmdSetCoverageToColorLocationNV = 0; + PFN_vkCmdSetCoverageModulationModeNV vkCmdSetCoverageModulationModeNV = 0; + PFN_vkCmdSetCoverageModulationTableEnableNV vkCmdSetCoverageModulationTableEnableNV = 0; + PFN_vkCmdSetCoverageModulationTableNV vkCmdSetCoverageModulationTableNV = 0; + PFN_vkCmdSetShadingRateImageEnableNV vkCmdSetShadingRateImageEnableNV = 0; + PFN_vkCmdSetRepresentativeFragmentTestEnableNV vkCmdSetRepresentativeFragmentTestEnableNV = 0; + PFN_vkCmdSetCoverageReductionModeNV vkCmdSetCoverageReductionModeNV = 0; + + //=== VK_ARM_tensors === + PFN_vkCreateTensorARM vkCreateTensorARM = 0; + PFN_vkDestroyTensorARM vkDestroyTensorARM = 0; + PFN_vkCreateTensorViewARM vkCreateTensorViewARM = 0; + PFN_vkDestroyTensorViewARM vkDestroyTensorViewARM = 0; + PFN_vkGetTensorMemoryRequirementsARM vkGetTensorMemoryRequirementsARM = 0; + PFN_vkBindTensorMemoryARM vkBindTensorMemoryARM = 0; + PFN_vkGetDeviceTensorMemoryRequirementsARM vkGetDeviceTensorMemoryRequirementsARM = 0; + PFN_vkCmdCopyTensorARM vkCmdCopyTensorARM = 0; + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM vkGetPhysicalDeviceExternalTensorPropertiesARM = 0; + PFN_vkGetTensorOpaqueCaptureDescriptorDataARM vkGetTensorOpaqueCaptureDescriptorDataARM = 0; + PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM vkGetTensorViewOpaqueCaptureDescriptorDataARM = 0; + + //=== VK_EXT_shader_module_identifier === + PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT = 0; + PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT = 0; + + //=== VK_NV_optical_flow === + PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV vkGetPhysicalDeviceOpticalFlowImageFormatsNV = 0; + PFN_vkCreateOpticalFlowSessionNV vkCreateOpticalFlowSessionNV = 0; + PFN_vkDestroyOpticalFlowSessionNV vkDestroyOpticalFlowSessionNV = 0; + PFN_vkBindOpticalFlowSessionImageNV vkBindOpticalFlowSessionImageNV = 0; + PFN_vkCmdOpticalFlowExecuteNV vkCmdOpticalFlowExecuteNV = 0; + + //=== VK_KHR_maintenance5 === + PFN_vkCmdBindIndexBuffer2KHR vkCmdBindIndexBuffer2KHR = 0; + PFN_vkGetRenderingAreaGranularityKHR vkGetRenderingAreaGranularityKHR = 0; + PFN_vkGetDeviceImageSubresourceLayoutKHR vkGetDeviceImageSubresourceLayoutKHR = 0; + PFN_vkGetImageSubresourceLayout2KHR vkGetImageSubresourceLayout2KHR = 0; + + //=== VK_AMD_anti_lag === + PFN_vkAntiLagUpdateAMD vkAntiLagUpdateAMD = 0; + + //=== VK_KHR_present_wait2 === + PFN_vkWaitForPresent2KHR vkWaitForPresent2KHR = 0; + + //=== VK_EXT_shader_object === + PFN_vkCreateShadersEXT vkCreateShadersEXT = 0; + PFN_vkDestroyShaderEXT vkDestroyShaderEXT = 0; + PFN_vkGetShaderBinaryDataEXT vkGetShaderBinaryDataEXT = 0; + PFN_vkCmdBindShadersEXT vkCmdBindShadersEXT = 0; + PFN_vkCmdSetDepthClampRangeEXT vkCmdSetDepthClampRangeEXT = 0; + + //=== VK_KHR_pipeline_binary === + PFN_vkCreatePipelineBinariesKHR vkCreatePipelineBinariesKHR = 0; + PFN_vkDestroyPipelineBinaryKHR vkDestroyPipelineBinaryKHR = 0; + PFN_vkGetPipelineKeyKHR vkGetPipelineKeyKHR = 0; + PFN_vkGetPipelineBinaryDataKHR vkGetPipelineBinaryDataKHR = 0; + PFN_vkReleaseCapturedPipelineDataKHR vkReleaseCapturedPipelineDataKHR = 0; + + //=== VK_QCOM_tile_properties === + PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM = 0; + PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM = 0; + + //=== VK_KHR_swapchain_maintenance1 === + PFN_vkReleaseSwapchainImagesKHR vkReleaseSwapchainImagesKHR = 0; + + //=== VK_NV_cooperative_vector === + PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV vkGetPhysicalDeviceCooperativeVectorPropertiesNV = 0; + PFN_vkConvertCooperativeVectorMatrixNV vkConvertCooperativeVectorMatrixNV = 0; + PFN_vkCmdConvertCooperativeVectorMatrixNV vkCmdConvertCooperativeVectorMatrixNV = 0; + + //=== VK_NV_low_latency2 === + PFN_vkSetLatencySleepModeNV vkSetLatencySleepModeNV = 0; + PFN_vkLatencySleepNV vkLatencySleepNV = 0; + PFN_vkSetLatencyMarkerNV vkSetLatencyMarkerNV = 0; + PFN_vkGetLatencyTimingsNV vkGetLatencyTimingsNV = 0; + PFN_vkQueueNotifyOutOfBandNV vkQueueNotifyOutOfBandNV = 0; + + //=== VK_KHR_cooperative_matrix === + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = 0; + + //=== VK_ARM_data_graph === + PFN_vkCreateDataGraphPipelinesARM vkCreateDataGraphPipelinesARM = 0; + PFN_vkCreateDataGraphPipelineSessionARM vkCreateDataGraphPipelineSessionARM = 0; + PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM vkGetDataGraphPipelineSessionBindPointRequirementsARM = 0; + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM vkGetDataGraphPipelineSessionMemoryRequirementsARM = 0; + PFN_vkBindDataGraphPipelineSessionMemoryARM vkBindDataGraphPipelineSessionMemoryARM = 0; + PFN_vkDestroyDataGraphPipelineSessionARM vkDestroyDataGraphPipelineSessionARM = 0; + PFN_vkCmdDispatchDataGraphARM vkCmdDispatchDataGraphARM = 0; + PFN_vkGetDataGraphPipelineAvailablePropertiesARM vkGetDataGraphPipelineAvailablePropertiesARM = 0; + PFN_vkGetDataGraphPipelinePropertiesARM vkGetDataGraphPipelinePropertiesARM = 0; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = 0; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = 0; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT vkCmdSetAttachmentFeedbackLoopEnableEXT = 0; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + PFN_vkGetScreenBufferPropertiesQNX vkGetScreenBufferPropertiesQNX = 0; +#else + PFN_dummy vkGetScreenBufferPropertiesQNX_placeholder = 0; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + PFN_vkCmdSetLineStippleKHR vkCmdSetLineStippleKHR = 0; + + //=== VK_KHR_calibrated_timestamps === + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = 0; + PFN_vkGetCalibratedTimestampsKHR vkGetCalibratedTimestampsKHR = 0; + + //=== VK_KHR_maintenance6 === + PFN_vkCmdBindDescriptorSets2KHR vkCmdBindDescriptorSets2KHR = 0; + PFN_vkCmdPushConstants2KHR vkCmdPushConstants2KHR = 0; + PFN_vkCmdPushDescriptorSet2KHR vkCmdPushDescriptorSet2KHR = 0; + PFN_vkCmdPushDescriptorSetWithTemplate2KHR vkCmdPushDescriptorSetWithTemplate2KHR = 0; + PFN_vkCmdSetDescriptorBufferOffsets2EXT vkCmdSetDescriptorBufferOffsets2EXT = 0; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = 0; + + //=== VK_QCOM_tile_memory_heap === + PFN_vkCmdBindTileMemoryQCOM vkCmdBindTileMemoryQCOM = 0; + + //=== VK_NV_external_compute_queue === + PFN_vkCreateExternalComputeQueueNV vkCreateExternalComputeQueueNV = 0; + PFN_vkDestroyExternalComputeQueueNV vkDestroyExternalComputeQueueNV = 0; + PFN_vkGetExternalComputeQueueDataNV vkGetExternalComputeQueueDataNV = 0; + + //=== VK_NV_cluster_acceleration_structure === + PFN_vkGetClusterAccelerationStructureBuildSizesNV vkGetClusterAccelerationStructureBuildSizesNV = 0; + PFN_vkCmdBuildClusterAccelerationStructureIndirectNV vkCmdBuildClusterAccelerationStructureIndirectNV = 0; + + //=== VK_NV_partitioned_acceleration_structure === + PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV vkGetPartitionedAccelerationStructuresBuildSizesNV = 0; + PFN_vkCmdBuildPartitionedAccelerationStructuresNV vkCmdBuildPartitionedAccelerationStructuresNV = 0; + + //=== VK_EXT_device_generated_commands === + PFN_vkGetGeneratedCommandsMemoryRequirementsEXT vkGetGeneratedCommandsMemoryRequirementsEXT = 0; + PFN_vkCmdPreprocessGeneratedCommandsEXT vkCmdPreprocessGeneratedCommandsEXT = 0; + PFN_vkCmdExecuteGeneratedCommandsEXT vkCmdExecuteGeneratedCommandsEXT = 0; + PFN_vkCreateIndirectCommandsLayoutEXT vkCreateIndirectCommandsLayoutEXT = 0; + PFN_vkDestroyIndirectCommandsLayoutEXT vkDestroyIndirectCommandsLayoutEXT = 0; + PFN_vkCreateIndirectExecutionSetEXT vkCreateIndirectExecutionSetEXT = 0; + PFN_vkDestroyIndirectExecutionSetEXT vkDestroyIndirectExecutionSetEXT = 0; + PFN_vkUpdateIndirectExecutionSetPipelineEXT vkUpdateIndirectExecutionSetPipelineEXT = 0; + PFN_vkUpdateIndirectExecutionSetShaderEXT vkUpdateIndirectExecutionSetShaderEXT = 0; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + PFN_vkCreateSurfaceOHOS vkCreateSurfaceOHOS = 0; +#else + PFN_dummy vkCreateSurfaceOHOS_placeholder = 0; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = 0; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + PFN_vkGetMemoryMetalHandleEXT vkGetMemoryMetalHandleEXT = 0; + PFN_vkGetMemoryMetalHandlePropertiesEXT vkGetMemoryMetalHandlePropertiesEXT = 0; +#else + PFN_dummy vkGetMemoryMetalHandleEXT_placeholder = 0; + PFN_dummy vkGetMemoryMetalHandlePropertiesEXT_placeholder = 0; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + PFN_vkCmdEndRendering2EXT vkCmdEndRendering2EXT = 0; + + public: + DispatchLoaderDynamic() VULKAN_HPP_NOEXCEPT = default; + DispatchLoaderDynamic( DispatchLoaderDynamic const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DispatchLoaderDynamic( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) VULKAN_HPP_NOEXCEPT + { + init( getInstanceProcAddr ); + } + + // This interface does not require a linked vulkan library. + DispatchLoaderDynamic( VkInstance instance, + PFN_vkGetInstanceProcAddr getInstanceProcAddr, + VkDevice device = {}, + PFN_vkGetDeviceProcAddr getDeviceProcAddr = nullptr ) VULKAN_HPP_NOEXCEPT + { + init( instance, getInstanceProcAddr, device, getDeviceProcAddr ); + } + + template + void init() + { + static DynamicLoader dl; + init( dl ); + } + + template + void init( DynamicLoader const & dl ) VULKAN_HPP_NOEXCEPT + { + PFN_vkGetInstanceProcAddr getInstanceProcAddr = dl.template getProcAddress( "vkGetInstanceProcAddr" ); + init( getInstanceProcAddr ); + } + + void init( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getInstanceProcAddr ); + + vkGetInstanceProcAddr = getInstanceProcAddr; + + //=== VK_VERSION_1_0 === + vkCreateInstance = PFN_vkCreateInstance( vkGetInstanceProcAddr( NULL, "vkCreateInstance" ) ); + vkEnumerateInstanceExtensionProperties = + PFN_vkEnumerateInstanceExtensionProperties( vkGetInstanceProcAddr( NULL, "vkEnumerateInstanceExtensionProperties" ) ); + vkEnumerateInstanceLayerProperties = PFN_vkEnumerateInstanceLayerProperties( vkGetInstanceProcAddr( NULL, "vkEnumerateInstanceLayerProperties" ) ); + + //=== VK_VERSION_1_1 === + vkEnumerateInstanceVersion = PFN_vkEnumerateInstanceVersion( vkGetInstanceProcAddr( NULL, "vkEnumerateInstanceVersion" ) ); + } + + // This interface does not require a linked vulkan library. + void init( VkInstance instance, + PFN_vkGetInstanceProcAddr getInstanceProcAddr, + VkDevice device = {}, + PFN_vkGetDeviceProcAddr /*getDeviceProcAddr*/ = nullptr ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( instance && getInstanceProcAddr ); + vkGetInstanceProcAddr = getInstanceProcAddr; + init( Instance( instance ) ); + if ( device ) + { + init( Device( device ) ); + } + } + + void init( Instance instanceCpp ) VULKAN_HPP_NOEXCEPT + { + VkInstance instance = static_cast( instanceCpp ); + + //=== VK_VERSION_1_0 === + vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) ); + vkEnumeratePhysicalDevices = PFN_vkEnumeratePhysicalDevices( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" ) ); + vkGetPhysicalDeviceFeatures = PFN_vkGetPhysicalDeviceFeatures( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" ) ); + vkGetPhysicalDeviceFormatProperties = + PFN_vkGetPhysicalDeviceFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" ) ); + vkGetPhysicalDeviceImageFormatProperties = + PFN_vkGetPhysicalDeviceImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" ) ); + vkGetPhysicalDeviceProperties = PFN_vkGetPhysicalDeviceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" ) ); + vkGetPhysicalDeviceQueueFamilyProperties = + PFN_vkGetPhysicalDeviceQueueFamilyProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) ); + vkGetPhysicalDeviceMemoryProperties = + PFN_vkGetPhysicalDeviceMemoryProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) ); + vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) ); + vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) ); + vkDestroyDevice = PFN_vkDestroyDevice( vkGetInstanceProcAddr( instance, "vkDestroyDevice" ) ); + vkEnumerateDeviceExtensionProperties = + PFN_vkEnumerateDeviceExtensionProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) ); + vkEnumerateDeviceLayerProperties = PFN_vkEnumerateDeviceLayerProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceLayerProperties" ) ); + vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetInstanceProcAddr( instance, "vkGetDeviceQueue" ) ); + vkQueueSubmit = PFN_vkQueueSubmit( vkGetInstanceProcAddr( instance, "vkQueueSubmit" ) ); + vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetInstanceProcAddr( instance, "vkQueueWaitIdle" ) ); + vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetInstanceProcAddr( instance, "vkDeviceWaitIdle" ) ); + vkAllocateMemory = PFN_vkAllocateMemory( vkGetInstanceProcAddr( instance, "vkAllocateMemory" ) ); + vkFreeMemory = PFN_vkFreeMemory( vkGetInstanceProcAddr( instance, "vkFreeMemory" ) ); + vkMapMemory = PFN_vkMapMemory( vkGetInstanceProcAddr( instance, "vkMapMemory" ) ); + vkUnmapMemory = PFN_vkUnmapMemory( vkGetInstanceProcAddr( instance, "vkUnmapMemory" ) ); + vkFlushMappedMemoryRanges = PFN_vkFlushMappedMemoryRanges( vkGetInstanceProcAddr( instance, "vkFlushMappedMemoryRanges" ) ); + vkInvalidateMappedMemoryRanges = PFN_vkInvalidateMappedMemoryRanges( vkGetInstanceProcAddr( instance, "vkInvalidateMappedMemoryRanges" ) ); + vkGetDeviceMemoryCommitment = PFN_vkGetDeviceMemoryCommitment( vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryCommitment" ) ); + vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetInstanceProcAddr( instance, "vkBindBufferMemory" ) ); + vkBindImageMemory = PFN_vkBindImageMemory( vkGetInstanceProcAddr( instance, "vkBindImageMemory" ) ); + vkGetBufferMemoryRequirements = PFN_vkGetBufferMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements" ) ); + vkGetImageMemoryRequirements = PFN_vkGetImageMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements" ) ); + vkGetImageSparseMemoryRequirements = PFN_vkGetImageSparseMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements" ) ); + vkGetPhysicalDeviceSparseImageFormatProperties = + PFN_vkGetPhysicalDeviceSparseImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" ) ); + vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetInstanceProcAddr( instance, "vkQueueBindSparse" ) ); + vkCreateFence = PFN_vkCreateFence( vkGetInstanceProcAddr( instance, "vkCreateFence" ) ); + vkDestroyFence = PFN_vkDestroyFence( vkGetInstanceProcAddr( instance, "vkDestroyFence" ) ); + vkResetFences = PFN_vkResetFences( vkGetInstanceProcAddr( instance, "vkResetFences" ) ); + vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetInstanceProcAddr( instance, "vkGetFenceStatus" ) ); + vkWaitForFences = PFN_vkWaitForFences( vkGetInstanceProcAddr( instance, "vkWaitForFences" ) ); + vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetInstanceProcAddr( instance, "vkCreateSemaphore" ) ); + vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetInstanceProcAddr( instance, "vkDestroySemaphore" ) ); + vkCreateEvent = PFN_vkCreateEvent( vkGetInstanceProcAddr( instance, "vkCreateEvent" ) ); + vkDestroyEvent = PFN_vkDestroyEvent( vkGetInstanceProcAddr( instance, "vkDestroyEvent" ) ); + vkGetEventStatus = PFN_vkGetEventStatus( vkGetInstanceProcAddr( instance, "vkGetEventStatus" ) ); + vkSetEvent = PFN_vkSetEvent( vkGetInstanceProcAddr( instance, "vkSetEvent" ) ); + vkResetEvent = PFN_vkResetEvent( vkGetInstanceProcAddr( instance, "vkResetEvent" ) ); + vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetInstanceProcAddr( instance, "vkCreateQueryPool" ) ); + vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetInstanceProcAddr( instance, "vkDestroyQueryPool" ) ); + vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetInstanceProcAddr( instance, "vkGetQueryPoolResults" ) ); + vkCreateBuffer = PFN_vkCreateBuffer( vkGetInstanceProcAddr( instance, "vkCreateBuffer" ) ); + vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetInstanceProcAddr( instance, "vkDestroyBuffer" ) ); + vkCreateBufferView = PFN_vkCreateBufferView( vkGetInstanceProcAddr( instance, "vkCreateBufferView" ) ); + vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetInstanceProcAddr( instance, "vkDestroyBufferView" ) ); + vkCreateImage = PFN_vkCreateImage( vkGetInstanceProcAddr( instance, "vkCreateImage" ) ); + vkDestroyImage = PFN_vkDestroyImage( vkGetInstanceProcAddr( instance, "vkDestroyImage" ) ); + vkGetImageSubresourceLayout = PFN_vkGetImageSubresourceLayout( vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout" ) ); + vkCreateImageView = PFN_vkCreateImageView( vkGetInstanceProcAddr( instance, "vkCreateImageView" ) ); + vkDestroyImageView = PFN_vkDestroyImageView( vkGetInstanceProcAddr( instance, "vkDestroyImageView" ) ); + vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetInstanceProcAddr( instance, "vkCreateShaderModule" ) ); + vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetInstanceProcAddr( instance, "vkDestroyShaderModule" ) ); + vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetInstanceProcAddr( instance, "vkCreatePipelineCache" ) ); + vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetInstanceProcAddr( instance, "vkDestroyPipelineCache" ) ); + vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetInstanceProcAddr( instance, "vkGetPipelineCacheData" ) ); + vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetInstanceProcAddr( instance, "vkMergePipelineCaches" ) ); + vkCreateGraphicsPipelines = PFN_vkCreateGraphicsPipelines( vkGetInstanceProcAddr( instance, "vkCreateGraphicsPipelines" ) ); + vkCreateComputePipelines = PFN_vkCreateComputePipelines( vkGetInstanceProcAddr( instance, "vkCreateComputePipelines" ) ); + vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetInstanceProcAddr( instance, "vkDestroyPipeline" ) ); + vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetInstanceProcAddr( instance, "vkCreatePipelineLayout" ) ); + vkDestroyPipelineLayout = PFN_vkDestroyPipelineLayout( vkGetInstanceProcAddr( instance, "vkDestroyPipelineLayout" ) ); + vkCreateSampler = PFN_vkCreateSampler( vkGetInstanceProcAddr( instance, "vkCreateSampler" ) ); + vkDestroySampler = PFN_vkDestroySampler( vkGetInstanceProcAddr( instance, "vkDestroySampler" ) ); + vkCreateDescriptorSetLayout = PFN_vkCreateDescriptorSetLayout( vkGetInstanceProcAddr( instance, "vkCreateDescriptorSetLayout" ) ); + vkDestroyDescriptorSetLayout = PFN_vkDestroyDescriptorSetLayout( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorSetLayout" ) ); + vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetInstanceProcAddr( instance, "vkCreateDescriptorPool" ) ); + vkDestroyDescriptorPool = PFN_vkDestroyDescriptorPool( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorPool" ) ); + vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetInstanceProcAddr( instance, "vkResetDescriptorPool" ) ); + vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetInstanceProcAddr( instance, "vkAllocateDescriptorSets" ) ); + vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetInstanceProcAddr( instance, "vkFreeDescriptorSets" ) ); + vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSets" ) ); + vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetInstanceProcAddr( instance, "vkCreateFramebuffer" ) ); + vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetInstanceProcAddr( instance, "vkDestroyFramebuffer" ) ); + vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetInstanceProcAddr( instance, "vkCreateRenderPass" ) ); + vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetInstanceProcAddr( instance, "vkDestroyRenderPass" ) ); + vkGetRenderAreaGranularity = PFN_vkGetRenderAreaGranularity( vkGetInstanceProcAddr( instance, "vkGetRenderAreaGranularity" ) ); + vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetInstanceProcAddr( instance, "vkCreateCommandPool" ) ); + vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetInstanceProcAddr( instance, "vkDestroyCommandPool" ) ); + vkResetCommandPool = PFN_vkResetCommandPool( vkGetInstanceProcAddr( instance, "vkResetCommandPool" ) ); + vkAllocateCommandBuffers = PFN_vkAllocateCommandBuffers( vkGetInstanceProcAddr( instance, "vkAllocateCommandBuffers" ) ); + vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetInstanceProcAddr( instance, "vkFreeCommandBuffers" ) ); + vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetInstanceProcAddr( instance, "vkBeginCommandBuffer" ) ); + vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetInstanceProcAddr( instance, "vkEndCommandBuffer" ) ); + vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetInstanceProcAddr( instance, "vkResetCommandBuffer" ) ); + vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetInstanceProcAddr( instance, "vkCmdBindPipeline" ) ); + vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetInstanceProcAddr( instance, "vkCmdSetViewport" ) ); + vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetInstanceProcAddr( instance, "vkCmdSetScissor" ) ); + vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetInstanceProcAddr( instance, "vkCmdSetLineWidth" ) ); + vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBias" ) ); + vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetInstanceProcAddr( instance, "vkCmdSetBlendConstants" ) ); + vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBounds" ) ); + vkCmdSetStencilCompareMask = PFN_vkCmdSetStencilCompareMask( vkGetInstanceProcAddr( instance, "vkCmdSetStencilCompareMask" ) ); + vkCmdSetStencilWriteMask = PFN_vkCmdSetStencilWriteMask( vkGetInstanceProcAddr( instance, "vkCmdSetStencilWriteMask" ) ); + vkCmdSetStencilReference = PFN_vkCmdSetStencilReference( vkGetInstanceProcAddr( instance, "vkCmdSetStencilReference" ) ); + vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorSets" ) ); + vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetInstanceProcAddr( instance, "vkCmdBindIndexBuffer" ) ); + vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers" ) ); + vkCmdDraw = PFN_vkCmdDraw( vkGetInstanceProcAddr( instance, "vkCmdDraw" ) ); + vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexed" ) ); + vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirect" ) ); + vkCmdDrawIndexedIndirect = PFN_vkCmdDrawIndexedIndirect( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirect" ) ); + vkCmdDispatch = PFN_vkCmdDispatch( vkGetInstanceProcAddr( instance, "vkCmdDispatch" ) ); + vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetInstanceProcAddr( instance, "vkCmdDispatchIndirect" ) ); + vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer" ) ); + vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetInstanceProcAddr( instance, "vkCmdCopyImage" ) ); + vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetInstanceProcAddr( instance, "vkCmdBlitImage" ) ); + vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage" ) ); + vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer" ) ); + vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetInstanceProcAddr( instance, "vkCmdUpdateBuffer" ) ); + vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetInstanceProcAddr( instance, "vkCmdFillBuffer" ) ); + vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetInstanceProcAddr( instance, "vkCmdClearColorImage" ) ); + vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetInstanceProcAddr( instance, "vkCmdClearDepthStencilImage" ) ); + vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetInstanceProcAddr( instance, "vkCmdClearAttachments" ) ); + vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetInstanceProcAddr( instance, "vkCmdResolveImage" ) ); + vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetInstanceProcAddr( instance, "vkCmdSetEvent" ) ); + vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetInstanceProcAddr( instance, "vkCmdResetEvent" ) ); + vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents" ) ); + vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier" ) ); + vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetInstanceProcAddr( instance, "vkCmdBeginQuery" ) ); + vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetInstanceProcAddr( instance, "vkCmdEndQuery" ) ); + vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetInstanceProcAddr( instance, "vkCmdResetQueryPool" ) ); + vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp" ) ); + vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetInstanceProcAddr( instance, "vkCmdCopyQueryPoolResults" ) ); + vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetInstanceProcAddr( instance, "vkCmdPushConstants" ) ); + vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass" ) ); + vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetInstanceProcAddr( instance, "vkCmdNextSubpass" ) ); + vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass" ) ); + vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetInstanceProcAddr( instance, "vkCmdExecuteCommands" ) ); + + //=== VK_VERSION_1_1 === + vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetInstanceProcAddr( instance, "vkBindBufferMemory2" ) ); + vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetInstanceProcAddr( instance, "vkBindImageMemory2" ) ); + vkGetDeviceGroupPeerMemoryFeatures = PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPeerMemoryFeatures" ) ); + vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetInstanceProcAddr( instance, "vkCmdSetDeviceMask" ) ); + vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetInstanceProcAddr( instance, "vkCmdDispatchBase" ) ); + vkEnumeratePhysicalDeviceGroups = PFN_vkEnumeratePhysicalDeviceGroups( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroups" ) ); + vkGetImageMemoryRequirements2 = PFN_vkGetImageMemoryRequirements2( vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements2" ) ); + vkGetBufferMemoryRequirements2 = PFN_vkGetBufferMemoryRequirements2( vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements2" ) ); + vkGetImageSparseMemoryRequirements2 = + PFN_vkGetImageSparseMemoryRequirements2( vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements2" ) ); + vkGetPhysicalDeviceFeatures2 = PFN_vkGetPhysicalDeviceFeatures2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2" ) ); + vkGetPhysicalDeviceProperties2 = PFN_vkGetPhysicalDeviceProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2" ) ); + vkGetPhysicalDeviceFormatProperties2 = + PFN_vkGetPhysicalDeviceFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2" ) ); + vkGetPhysicalDeviceImageFormatProperties2 = + PFN_vkGetPhysicalDeviceImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2" ) ); + vkGetPhysicalDeviceQueueFamilyProperties2 = + PFN_vkGetPhysicalDeviceQueueFamilyProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2" ) ); + vkGetPhysicalDeviceMemoryProperties2 = + PFN_vkGetPhysicalDeviceMemoryProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2" ) ); + vkGetPhysicalDeviceSparseImageFormatProperties2 = + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2" ) ); + vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetInstanceProcAddr( instance, "vkTrimCommandPool" ) ); + vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetInstanceProcAddr( instance, "vkGetDeviceQueue2" ) ); + vkCreateSamplerYcbcrConversion = PFN_vkCreateSamplerYcbcrConversion( vkGetInstanceProcAddr( instance, "vkCreateSamplerYcbcrConversion" ) ); + vkDestroySamplerYcbcrConversion = PFN_vkDestroySamplerYcbcrConversion( vkGetInstanceProcAddr( instance, "vkDestroySamplerYcbcrConversion" ) ); + vkCreateDescriptorUpdateTemplate = PFN_vkCreateDescriptorUpdateTemplate( vkGetInstanceProcAddr( instance, "vkCreateDescriptorUpdateTemplate" ) ); + vkDestroyDescriptorUpdateTemplate = PFN_vkDestroyDescriptorUpdateTemplate( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorUpdateTemplate" ) ); + vkUpdateDescriptorSetWithTemplate = PFN_vkUpdateDescriptorSetWithTemplate( vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSetWithTemplate" ) ); + vkGetPhysicalDeviceExternalBufferProperties = + PFN_vkGetPhysicalDeviceExternalBufferProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferProperties" ) ); + vkGetPhysicalDeviceExternalFenceProperties = + PFN_vkGetPhysicalDeviceExternalFenceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFenceProperties" ) ); + vkGetPhysicalDeviceExternalSemaphoreProperties = + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) ); + vkGetDescriptorSetLayoutSupport = PFN_vkGetDescriptorSetLayoutSupport( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutSupport" ) ); + + //=== VK_VERSION_1_2 === + vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCount" ) ); + vkCmdDrawIndexedIndirectCount = PFN_vkCmdDrawIndexedIndirectCount( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCount" ) ); + vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetInstanceProcAddr( instance, "vkCreateRenderPass2" ) ); + vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass2" ) ); + vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetInstanceProcAddr( instance, "vkCmdNextSubpass2" ) ); + vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass2" ) ); + vkResetQueryPool = PFN_vkResetQueryPool( vkGetInstanceProcAddr( instance, "vkResetQueryPool" ) ); + vkGetSemaphoreCounterValue = PFN_vkGetSemaphoreCounterValue( vkGetInstanceProcAddr( instance, "vkGetSemaphoreCounterValue" ) ); + vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetInstanceProcAddr( instance, "vkWaitSemaphores" ) ); + vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetInstanceProcAddr( instance, "vkSignalSemaphore" ) ); + vkGetBufferDeviceAddress = PFN_vkGetBufferDeviceAddress( vkGetInstanceProcAddr( instance, "vkGetBufferDeviceAddress" ) ); + vkGetBufferOpaqueCaptureAddress = PFN_vkGetBufferOpaqueCaptureAddress( vkGetInstanceProcAddr( instance, "vkGetBufferOpaqueCaptureAddress" ) ); + vkGetDeviceMemoryOpaqueCaptureAddress = + PFN_vkGetDeviceMemoryOpaqueCaptureAddress( vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); + + //=== VK_VERSION_1_3 === + vkGetPhysicalDeviceToolProperties = PFN_vkGetPhysicalDeviceToolProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolProperties" ) ); + vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetInstanceProcAddr( instance, "vkCreatePrivateDataSlot" ) ); + vkDestroyPrivateDataSlot = PFN_vkDestroyPrivateDataSlot( vkGetInstanceProcAddr( instance, "vkDestroyPrivateDataSlot" ) ); + vkSetPrivateData = PFN_vkSetPrivateData( vkGetInstanceProcAddr( instance, "vkSetPrivateData" ) ); + vkGetPrivateData = PFN_vkGetPrivateData( vkGetInstanceProcAddr( instance, "vkGetPrivateData" ) ); + vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2" ) ); + vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetInstanceProcAddr( instance, "vkCmdResetEvent2" ) ); + vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents2" ) ); + vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier2" ) ); + vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp2" ) ); + vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetInstanceProcAddr( instance, "vkQueueSubmit2" ) ); + vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer2" ) ); + vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2" ) ); + vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage2" ) ); + vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer2" ) ); + vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2" ) ); + vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetInstanceProcAddr( instance, "vkCmdResolveImage2" ) ); + vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetInstanceProcAddr( instance, "vkCmdBeginRendering" ) ); + vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetInstanceProcAddr( instance, "vkCmdEndRendering" ) ); + vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetInstanceProcAddr( instance, "vkCmdSetCullMode" ) ); + vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetInstanceProcAddr( instance, "vkCmdSetFrontFace" ) ); + vkCmdSetPrimitiveTopology = PFN_vkCmdSetPrimitiveTopology( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveTopology" ) ); + vkCmdSetViewportWithCount = PFN_vkCmdSetViewportWithCount( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWithCount" ) ); + vkCmdSetScissorWithCount = PFN_vkCmdSetScissorWithCount( vkGetInstanceProcAddr( instance, "vkCmdSetScissorWithCount" ) ); + vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers2" ) ); + vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthTestEnable" ) ); + vkCmdSetDepthWriteEnable = PFN_vkCmdSetDepthWriteEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthWriteEnable" ) ); + vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetInstanceProcAddr( instance, "vkCmdSetDepthCompareOp" ) ); + vkCmdSetDepthBoundsTestEnable = PFN_vkCmdSetDepthBoundsTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBoundsTestEnable" ) ); + vkCmdSetStencilTestEnable = PFN_vkCmdSetStencilTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetStencilTestEnable" ) ); + vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetInstanceProcAddr( instance, "vkCmdSetStencilOp" ) ); + vkCmdSetRasterizerDiscardEnable = PFN_vkCmdSetRasterizerDiscardEnable( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizerDiscardEnable" ) ); + vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBiasEnable" ) ); + vkCmdSetPrimitiveRestartEnable = PFN_vkCmdSetPrimitiveRestartEnable( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveRestartEnable" ) ); + vkGetDeviceBufferMemoryRequirements = + PFN_vkGetDeviceBufferMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetDeviceBufferMemoryRequirements" ) ); + vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetDeviceImageMemoryRequirements" ) ); + vkGetDeviceImageSparseMemoryRequirements = + PFN_vkGetDeviceImageSparseMemoryRequirements( vkGetInstanceProcAddr( instance, "vkGetDeviceImageSparseMemoryRequirements" ) ); + + //=== VK_VERSION_1_4 === + vkCmdSetLineStipple = PFN_vkCmdSetLineStipple( vkGetInstanceProcAddr( instance, "vkCmdSetLineStipple" ) ); + vkMapMemory2 = PFN_vkMapMemory2( vkGetInstanceProcAddr( instance, "vkMapMemory2" ) ); + vkUnmapMemory2 = PFN_vkUnmapMemory2( vkGetInstanceProcAddr( instance, "vkUnmapMemory2" ) ); + vkCmdBindIndexBuffer2 = PFN_vkCmdBindIndexBuffer2( vkGetInstanceProcAddr( instance, "vkCmdBindIndexBuffer2" ) ); + vkGetRenderingAreaGranularity = PFN_vkGetRenderingAreaGranularity( vkGetInstanceProcAddr( instance, "vkGetRenderingAreaGranularity" ) ); + vkGetDeviceImageSubresourceLayout = PFN_vkGetDeviceImageSubresourceLayout( vkGetInstanceProcAddr( instance, "vkGetDeviceImageSubresourceLayout" ) ); + vkGetImageSubresourceLayout2 = PFN_vkGetImageSubresourceLayout2( vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout2" ) ); + vkCmdPushDescriptorSet = PFN_vkCmdPushDescriptorSet( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSet" ) ); + vkCmdPushDescriptorSetWithTemplate = PFN_vkCmdPushDescriptorSetWithTemplate( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetWithTemplate" ) ); + vkCmdSetRenderingAttachmentLocations = + PFN_vkCmdSetRenderingAttachmentLocations( vkGetInstanceProcAddr( instance, "vkCmdSetRenderingAttachmentLocations" ) ); + vkCmdSetRenderingInputAttachmentIndices = + PFN_vkCmdSetRenderingInputAttachmentIndices( vkGetInstanceProcAddr( instance, "vkCmdSetRenderingInputAttachmentIndices" ) ); + vkCmdBindDescriptorSets2 = PFN_vkCmdBindDescriptorSets2( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorSets2" ) ); + vkCmdPushConstants2 = PFN_vkCmdPushConstants2( vkGetInstanceProcAddr( instance, "vkCmdPushConstants2" ) ); + vkCmdPushDescriptorSet2 = PFN_vkCmdPushDescriptorSet2( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSet2" ) ); + vkCmdPushDescriptorSetWithTemplate2 = + PFN_vkCmdPushDescriptorSetWithTemplate2( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetWithTemplate2" ) ); + vkCopyMemoryToImage = PFN_vkCopyMemoryToImage( vkGetInstanceProcAddr( instance, "vkCopyMemoryToImage" ) ); + vkCopyImageToMemory = PFN_vkCopyImageToMemory( vkGetInstanceProcAddr( instance, "vkCopyImageToMemory" ) ); + vkCopyImageToImage = PFN_vkCopyImageToImage( vkGetInstanceProcAddr( instance, "vkCopyImageToImage" ) ); + vkTransitionImageLayout = PFN_vkTransitionImageLayout( vkGetInstanceProcAddr( instance, "vkTransitionImageLayout" ) ); + + //=== VK_KHR_surface === + vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) ); + vkGetPhysicalDeviceSurfaceSupportKHR = + PFN_vkGetPhysicalDeviceSurfaceSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceSupportKHR" ) ); + vkGetPhysicalDeviceSurfaceCapabilitiesKHR = + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ) ); + vkGetPhysicalDeviceSurfaceFormatsKHR = + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" ) ); + vkGetPhysicalDeviceSurfacePresentModesKHR = + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" ) ); + + //=== VK_KHR_swapchain === + vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetInstanceProcAddr( instance, "vkCreateSwapchainKHR" ) ); + vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetInstanceProcAddr( instance, "vkDestroySwapchainKHR" ) ); + vkGetSwapchainImagesKHR = PFN_vkGetSwapchainImagesKHR( vkGetInstanceProcAddr( instance, "vkGetSwapchainImagesKHR" ) ); + vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetInstanceProcAddr( instance, "vkAcquireNextImageKHR" ) ); + vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetInstanceProcAddr( instance, "vkQueuePresentKHR" ) ); + vkGetDeviceGroupPresentCapabilitiesKHR = + PFN_vkGetDeviceGroupPresentCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); + vkGetDeviceGroupSurfacePresentModesKHR = + PFN_vkGetDeviceGroupSurfacePresentModesKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); + vkGetPhysicalDevicePresentRectanglesKHR = + PFN_vkGetPhysicalDevicePresentRectanglesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHR" ) ); + vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetInstanceProcAddr( instance, "vkAcquireNextImage2KHR" ) ); + + //=== VK_KHR_display === + vkGetPhysicalDeviceDisplayPropertiesKHR = + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPropertiesKHR" ) ); + vkGetPhysicalDeviceDisplayPlanePropertiesKHR = + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" ) ); + vkGetDisplayPlaneSupportedDisplaysKHR = + PFN_vkGetDisplayPlaneSupportedDisplaysKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" ) ); + vkGetDisplayModePropertiesKHR = PFN_vkGetDisplayModePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" ) ); + vkCreateDisplayModeKHR = PFN_vkCreateDisplayModeKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" ) ); + vkGetDisplayPlaneCapabilitiesKHR = PFN_vkGetDisplayPlaneCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" ) ); + vkCreateDisplayPlaneSurfaceKHR = PFN_vkCreateDisplayPlaneSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" ) ); + + //=== VK_KHR_display_swapchain === + vkCreateSharedSwapchainsKHR = PFN_vkCreateSharedSwapchainsKHR( vkGetInstanceProcAddr( instance, "vkCreateSharedSwapchainsKHR" ) ); + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + vkCreateXlibSurfaceKHR = PFN_vkCreateXlibSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" ) ); + vkGetPhysicalDeviceXlibPresentationSupportKHR = + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" ) ); +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + vkCreateXcbSurfaceKHR = PFN_vkCreateXcbSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" ) ); + vkGetPhysicalDeviceXcbPresentationSupportKHR = + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" ) ); +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + vkCreateWaylandSurfaceKHR = PFN_vkCreateWaylandSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" ) ); + vkGetPhysicalDeviceWaylandPresentationSupportKHR = + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" ) ); +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + vkCreateAndroidSurfaceKHR = PFN_vkCreateAndroidSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" ) ); +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + vkCreateWin32SurfaceKHR = PFN_vkCreateWin32SurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" ) ); + vkGetPhysicalDeviceWin32PresentationSupportKHR = + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + vkCreateDebugReportCallbackEXT = PFN_vkCreateDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" ) ); + vkDestroyDebugReportCallbackEXT = PFN_vkDestroyDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" ) ); + vkDebugReportMessageEXT = PFN_vkDebugReportMessageEXT( vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" ) ); + + //=== VK_EXT_debug_marker === + vkDebugMarkerSetObjectTagEXT = PFN_vkDebugMarkerSetObjectTagEXT( vkGetInstanceProcAddr( instance, "vkDebugMarkerSetObjectTagEXT" ) ); + vkDebugMarkerSetObjectNameEXT = PFN_vkDebugMarkerSetObjectNameEXT( vkGetInstanceProcAddr( instance, "vkDebugMarkerSetObjectNameEXT" ) ); + vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerBeginEXT" ) ); + vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerEndEXT" ) ); + vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerInsertEXT" ) ); + + //=== VK_KHR_video_queue === + vkGetPhysicalDeviceVideoCapabilitiesKHR = + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR" ) ); + vkGetPhysicalDeviceVideoFormatPropertiesKHR = + PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR" ) ); + vkCreateVideoSessionKHR = PFN_vkCreateVideoSessionKHR( vkGetInstanceProcAddr( instance, "vkCreateVideoSessionKHR" ) ); + vkDestroyVideoSessionKHR = PFN_vkDestroyVideoSessionKHR( vkGetInstanceProcAddr( instance, "vkDestroyVideoSessionKHR" ) ); + vkGetVideoSessionMemoryRequirementsKHR = + PFN_vkGetVideoSessionMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetVideoSessionMemoryRequirementsKHR" ) ); + vkBindVideoSessionMemoryKHR = PFN_vkBindVideoSessionMemoryKHR( vkGetInstanceProcAddr( instance, "vkBindVideoSessionMemoryKHR" ) ); + vkCreateVideoSessionParametersKHR = PFN_vkCreateVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkCreateVideoSessionParametersKHR" ) ); + vkUpdateVideoSessionParametersKHR = PFN_vkUpdateVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkUpdateVideoSessionParametersKHR" ) ); + vkDestroyVideoSessionParametersKHR = PFN_vkDestroyVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkDestroyVideoSessionParametersKHR" ) ); + vkCmdBeginVideoCodingKHR = PFN_vkCmdBeginVideoCodingKHR( vkGetInstanceProcAddr( instance, "vkCmdBeginVideoCodingKHR" ) ); + vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetInstanceProcAddr( instance, "vkCmdEndVideoCodingKHR" ) ); + vkCmdControlVideoCodingKHR = PFN_vkCmdControlVideoCodingKHR( vkGetInstanceProcAddr( instance, "vkCmdControlVideoCodingKHR" ) ); + + //=== VK_KHR_video_decode_queue === + vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetInstanceProcAddr( instance, "vkCmdDecodeVideoKHR" ) ); + + //=== VK_EXT_transform_feedback === + vkCmdBindTransformFeedbackBuffersEXT = + PFN_vkCmdBindTransformFeedbackBuffersEXT( vkGetInstanceProcAddr( instance, "vkCmdBindTransformFeedbackBuffersEXT" ) ); + vkCmdBeginTransformFeedbackEXT = PFN_vkCmdBeginTransformFeedbackEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginTransformFeedbackEXT" ) ); + vkCmdEndTransformFeedbackEXT = PFN_vkCmdEndTransformFeedbackEXT( vkGetInstanceProcAddr( instance, "vkCmdEndTransformFeedbackEXT" ) ); + vkCmdBeginQueryIndexedEXT = PFN_vkCmdBeginQueryIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginQueryIndexedEXT" ) ); + vkCmdEndQueryIndexedEXT = PFN_vkCmdEndQueryIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdEndQueryIndexedEXT" ) ); + vkCmdDrawIndirectByteCountEXT = PFN_vkCmdDrawIndirectByteCountEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectByteCountEXT" ) ); + + //=== VK_NVX_binary_import === + vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetInstanceProcAddr( instance, "vkCreateCuModuleNVX" ) ); + vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetInstanceProcAddr( instance, "vkCreateCuFunctionNVX" ) ); + vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetInstanceProcAddr( instance, "vkDestroyCuModuleNVX" ) ); + vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetInstanceProcAddr( instance, "vkDestroyCuFunctionNVX" ) ); + vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetInstanceProcAddr( instance, "vkCmdCuLaunchKernelNVX" ) ); + + //=== VK_NVX_image_view_handle === + vkGetImageViewHandleNVX = PFN_vkGetImageViewHandleNVX( vkGetInstanceProcAddr( instance, "vkGetImageViewHandleNVX" ) ); + vkGetImageViewHandle64NVX = PFN_vkGetImageViewHandle64NVX( vkGetInstanceProcAddr( instance, "vkGetImageViewHandle64NVX" ) ); + vkGetImageViewAddressNVX = PFN_vkGetImageViewAddressNVX( vkGetInstanceProcAddr( instance, "vkGetImageViewAddressNVX" ) ); + + //=== VK_AMD_draw_indirect_count === + vkCmdDrawIndirectCountAMD = PFN_vkCmdDrawIndirectCountAMD( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCountAMD" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; + vkCmdDrawIndexedIndirectCountAMD = PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCountAMD" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; + + //=== VK_AMD_shader_info === + vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetInstanceProcAddr( instance, "vkGetShaderInfoAMD" ) ); + + //=== VK_KHR_dynamic_rendering === + vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderingKHR" ) ); + if ( !vkCmdBeginRendering ) + vkCmdBeginRendering = vkCmdBeginRenderingKHR; + vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetInstanceProcAddr( instance, "vkCmdEndRenderingKHR" ) ); + if ( !vkCmdEndRendering ) + vkCmdEndRendering = vkCmdEndRenderingKHR; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + vkCreateStreamDescriptorSurfaceGGP = PFN_vkCreateStreamDescriptorSurfaceGGP( vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" ) ); +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + vkGetPhysicalDeviceExternalImageFormatPropertiesNV = + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" ) ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + vkGetMemoryWin32HandleNV = PFN_vkGetMemoryWin32HandleNV( vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleNV" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + vkGetPhysicalDeviceFeatures2KHR = PFN_vkGetPhysicalDeviceFeatures2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2KHR" ) ); + if ( !vkGetPhysicalDeviceFeatures2 ) + vkGetPhysicalDeviceFeatures2 = vkGetPhysicalDeviceFeatures2KHR; + vkGetPhysicalDeviceProperties2KHR = PFN_vkGetPhysicalDeviceProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceProperties2 ) + vkGetPhysicalDeviceProperties2 = vkGetPhysicalDeviceProperties2KHR; + vkGetPhysicalDeviceFormatProperties2KHR = + PFN_vkGetPhysicalDeviceFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceFormatProperties2 ) + vkGetPhysicalDeviceFormatProperties2 = vkGetPhysicalDeviceFormatProperties2KHR; + vkGetPhysicalDeviceImageFormatProperties2KHR = + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceImageFormatProperties2 ) + vkGetPhysicalDeviceImageFormatProperties2 = vkGetPhysicalDeviceImageFormatProperties2KHR; + vkGetPhysicalDeviceQueueFamilyProperties2KHR = + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceQueueFamilyProperties2 ) + vkGetPhysicalDeviceQueueFamilyProperties2 = vkGetPhysicalDeviceQueueFamilyProperties2KHR; + vkGetPhysicalDeviceMemoryProperties2KHR = + PFN_vkGetPhysicalDeviceMemoryProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceMemoryProperties2 ) + vkGetPhysicalDeviceMemoryProperties2 = vkGetPhysicalDeviceMemoryProperties2KHR; + vkGetPhysicalDeviceSparseImageFormatProperties2KHR = + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceSparseImageFormatProperties2 ) + vkGetPhysicalDeviceSparseImageFormatProperties2 = vkGetPhysicalDeviceSparseImageFormatProperties2KHR; + + //=== VK_KHR_device_group === + vkGetDeviceGroupPeerMemoryFeaturesKHR = + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); + if ( !vkGetDeviceGroupPeerMemoryFeatures ) + vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; + vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetInstanceProcAddr( instance, "vkCmdSetDeviceMaskKHR" ) ); + if ( !vkCmdSetDeviceMask ) + vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; + vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetInstanceProcAddr( instance, "vkCmdDispatchBaseKHR" ) ); + if ( !vkCmdDispatchBase ) + vkCmdDispatchBase = vkCmdDispatchBaseKHR; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + vkCreateViSurfaceNN = PFN_vkCreateViSurfaceNN( vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" ) ); +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_maintenance1 === + vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetInstanceProcAddr( instance, "vkTrimCommandPoolKHR" ) ); + if ( !vkTrimCommandPool ) + vkTrimCommandPool = vkTrimCommandPoolKHR; + + //=== VK_KHR_device_group_creation === + vkEnumeratePhysicalDeviceGroupsKHR = PFN_vkEnumeratePhysicalDeviceGroupsKHR( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroupsKHR" ) ); + if ( !vkEnumeratePhysicalDeviceGroups ) + vkEnumeratePhysicalDeviceGroups = vkEnumeratePhysicalDeviceGroupsKHR; + + //=== VK_KHR_external_memory_capabilities === + vkGetPhysicalDeviceExternalBufferPropertiesKHR = + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalBufferProperties ) + vkGetPhysicalDeviceExternalBufferProperties = vkGetPhysicalDeviceExternalBufferPropertiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + vkGetMemoryWin32HandleKHR = PFN_vkGetMemoryWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleKHR" ) ); + vkGetMemoryWin32HandlePropertiesKHR = + PFN_vkGetMemoryWin32HandlePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandlePropertiesKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryFdKHR" ) ); + vkGetMemoryFdPropertiesKHR = PFN_vkGetMemoryFdPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetMemoryFdPropertiesKHR" ) ); + + //=== VK_KHR_external_semaphore_capabilities === + vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalSemaphoreProperties ) + vkGetPhysicalDeviceExternalSemaphoreProperties = vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + vkImportSemaphoreWin32HandleKHR = PFN_vkImportSemaphoreWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkImportSemaphoreWin32HandleKHR" ) ); + vkGetSemaphoreWin32HandleKHR = PFN_vkGetSemaphoreWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkGetSemaphoreWin32HandleKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetInstanceProcAddr( instance, "vkImportSemaphoreFdKHR" ) ); + vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetInstanceProcAddr( instance, "vkGetSemaphoreFdKHR" ) ); + + //=== VK_KHR_push_descriptor === + vkCmdPushDescriptorSetKHR = PFN_vkCmdPushDescriptorSetKHR( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetKHR" ) ); + if ( !vkCmdPushDescriptorSet ) + vkCmdPushDescriptorSet = vkCmdPushDescriptorSetKHR; + vkCmdPushDescriptorSetWithTemplateKHR = + PFN_vkCmdPushDescriptorSetWithTemplateKHR( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); + if ( !vkCmdPushDescriptorSetWithTemplate ) + vkCmdPushDescriptorSetWithTemplate = vkCmdPushDescriptorSetWithTemplateKHR; + + //=== VK_EXT_conditional_rendering === + vkCmdBeginConditionalRenderingEXT = PFN_vkCmdBeginConditionalRenderingEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginConditionalRenderingEXT" ) ); + vkCmdEndConditionalRenderingEXT = PFN_vkCmdEndConditionalRenderingEXT( vkGetInstanceProcAddr( instance, "vkCmdEndConditionalRenderingEXT" ) ); + + //=== VK_KHR_descriptor_update_template === + vkCreateDescriptorUpdateTemplateKHR = + PFN_vkCreateDescriptorUpdateTemplateKHR( vkGetInstanceProcAddr( instance, "vkCreateDescriptorUpdateTemplateKHR" ) ); + if ( !vkCreateDescriptorUpdateTemplate ) + vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; + vkDestroyDescriptorUpdateTemplateKHR = + PFN_vkDestroyDescriptorUpdateTemplateKHR( vkGetInstanceProcAddr( instance, "vkDestroyDescriptorUpdateTemplateKHR" ) ); + if ( !vkDestroyDescriptorUpdateTemplate ) + vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; + vkUpdateDescriptorSetWithTemplateKHR = + PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSetWithTemplateKHR" ) ); + if ( !vkUpdateDescriptorSetWithTemplate ) + vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; + + //=== VK_NV_clip_space_w_scaling === + vkCmdSetViewportWScalingNV = PFN_vkCmdSetViewportWScalingNV( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWScalingNV" ) ); + + //=== VK_EXT_direct_mode_display === + vkReleaseDisplayEXT = PFN_vkReleaseDisplayEXT( vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" ) ); + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + vkAcquireXlibDisplayEXT = PFN_vkAcquireXlibDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" ) ); + vkGetRandROutputDisplayEXT = PFN_vkGetRandROutputDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" ) ); +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + vkGetPhysicalDeviceSurfaceCapabilities2EXT = + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" ) ); + + //=== VK_EXT_display_control === + vkDisplayPowerControlEXT = PFN_vkDisplayPowerControlEXT( vkGetInstanceProcAddr( instance, "vkDisplayPowerControlEXT" ) ); + vkRegisterDeviceEventEXT = PFN_vkRegisterDeviceEventEXT( vkGetInstanceProcAddr( instance, "vkRegisterDeviceEventEXT" ) ); + vkRegisterDisplayEventEXT = PFN_vkRegisterDisplayEventEXT( vkGetInstanceProcAddr( instance, "vkRegisterDisplayEventEXT" ) ); + vkGetSwapchainCounterEXT = PFN_vkGetSwapchainCounterEXT( vkGetInstanceProcAddr( instance, "vkGetSwapchainCounterEXT" ) ); + + //=== VK_GOOGLE_display_timing === + vkGetRefreshCycleDurationGOOGLE = PFN_vkGetRefreshCycleDurationGOOGLE( vkGetInstanceProcAddr( instance, "vkGetRefreshCycleDurationGOOGLE" ) ); + vkGetPastPresentationTimingGOOGLE = PFN_vkGetPastPresentationTimingGOOGLE( vkGetInstanceProcAddr( instance, "vkGetPastPresentationTimingGOOGLE" ) ); + + //=== VK_EXT_discard_rectangles === + vkCmdSetDiscardRectangleEXT = PFN_vkCmdSetDiscardRectangleEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDiscardRectangleEXT" ) ); + vkCmdSetDiscardRectangleEnableEXT = PFN_vkCmdSetDiscardRectangleEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDiscardRectangleEnableEXT" ) ); + vkCmdSetDiscardRectangleModeEXT = PFN_vkCmdSetDiscardRectangleModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDiscardRectangleModeEXT" ) ); + + //=== VK_EXT_hdr_metadata === + vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetInstanceProcAddr( instance, "vkSetHdrMetadataEXT" ) ); + + //=== VK_KHR_create_renderpass2 === + vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetInstanceProcAddr( instance, "vkCreateRenderPass2KHR" ) ); + if ( !vkCreateRenderPass2 ) + vkCreateRenderPass2 = vkCreateRenderPass2KHR; + vkCmdBeginRenderPass2KHR = PFN_vkCmdBeginRenderPass2KHR( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass2KHR" ) ); + if ( !vkCmdBeginRenderPass2 ) + vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; + vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetInstanceProcAddr( instance, "vkCmdNextSubpass2KHR" ) ); + if ( !vkCmdNextSubpass2 ) + vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; + vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass2KHR" ) ); + if ( !vkCmdEndRenderPass2 ) + vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; + + //=== VK_KHR_shared_presentable_image === + vkGetSwapchainStatusKHR = PFN_vkGetSwapchainStatusKHR( vkGetInstanceProcAddr( instance, "vkGetSwapchainStatusKHR" ) ); + + //=== VK_KHR_external_fence_capabilities === + vkGetPhysicalDeviceExternalFencePropertiesKHR = + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalFenceProperties ) + vkGetPhysicalDeviceExternalFenceProperties = vkGetPhysicalDeviceExternalFencePropertiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + vkImportFenceWin32HandleKHR = PFN_vkImportFenceWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkImportFenceWin32HandleKHR" ) ); + vkGetFenceWin32HandleKHR = PFN_vkGetFenceWin32HandleKHR( vkGetInstanceProcAddr( instance, "vkGetFenceWin32HandleKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetInstanceProcAddr( instance, "vkImportFenceFdKHR" ) ); + vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetInstanceProcAddr( instance, "vkGetFenceFdKHR" ) ); + + //=== VK_KHR_performance_query === + vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR" ) ); + vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR" ) ); + vkAcquireProfilingLockKHR = PFN_vkAcquireProfilingLockKHR( vkGetInstanceProcAddr( instance, "vkAcquireProfilingLockKHR" ) ); + vkReleaseProfilingLockKHR = PFN_vkReleaseProfilingLockKHR( vkGetInstanceProcAddr( instance, "vkReleaseProfilingLockKHR" ) ); + + //=== VK_KHR_get_surface_capabilities2 === + vkGetPhysicalDeviceSurfaceCapabilities2KHR = + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR" ) ); + vkGetPhysicalDeviceSurfaceFormats2KHR = + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormats2KHR" ) ); + + //=== VK_KHR_get_display_properties2 === + vkGetPhysicalDeviceDisplayProperties2KHR = + PFN_vkGetPhysicalDeviceDisplayProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayProperties2KHR" ) ); + vkGetPhysicalDeviceDisplayPlaneProperties2KHR = + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" ) ); + vkGetDisplayModeProperties2KHR = PFN_vkGetDisplayModeProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModeProperties2KHR" ) ); + vkGetDisplayPlaneCapabilities2KHR = PFN_vkGetDisplayPlaneCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilities2KHR" ) ); + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + vkCreateIOSSurfaceMVK = PFN_vkCreateIOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" ) ); +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + vkCreateMacOSSurfaceMVK = PFN_vkCreateMacOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" ) ); +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT( vkGetInstanceProcAddr( instance, "vkSetDebugUtilsObjectNameEXT" ) ); + vkSetDebugUtilsObjectTagEXT = PFN_vkSetDebugUtilsObjectTagEXT( vkGetInstanceProcAddr( instance, "vkSetDebugUtilsObjectTagEXT" ) ); + vkQueueBeginDebugUtilsLabelEXT = PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkQueueBeginDebugUtilsLabelEXT" ) ); + vkQueueEndDebugUtilsLabelEXT = PFN_vkQueueEndDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkQueueEndDebugUtilsLabelEXT" ) ); + vkQueueInsertDebugUtilsLabelEXT = PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkQueueInsertDebugUtilsLabelEXT" ) ); + vkCmdBeginDebugUtilsLabelEXT = PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkCmdBeginDebugUtilsLabelEXT" ) ); + vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkCmdEndDebugUtilsLabelEXT" ) ); + vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetInstanceProcAddr( instance, "vkCmdInsertDebugUtilsLabelEXT" ) ); + vkCreateDebugUtilsMessengerEXT = PFN_vkCreateDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugUtilsMessengerEXT" ) ); + vkDestroyDebugUtilsMessengerEXT = PFN_vkDestroyDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugUtilsMessengerEXT" ) ); + vkSubmitDebugUtilsMessageEXT = PFN_vkSubmitDebugUtilsMessageEXT( vkGetInstanceProcAddr( instance, "vkSubmitDebugUtilsMessageEXT" ) ); + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + vkGetAndroidHardwareBufferPropertiesANDROID = + PFN_vkGetAndroidHardwareBufferPropertiesANDROID( vkGetInstanceProcAddr( instance, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); + vkGetMemoryAndroidHardwareBufferANDROID = + PFN_vkGetMemoryAndroidHardwareBufferANDROID( vkGetInstanceProcAddr( instance, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + vkCreateExecutionGraphPipelinesAMDX = + PFN_vkCreateExecutionGraphPipelinesAMDX( vkGetInstanceProcAddr( instance, "vkCreateExecutionGraphPipelinesAMDX" ) ); + vkGetExecutionGraphPipelineScratchSizeAMDX = + PFN_vkGetExecutionGraphPipelineScratchSizeAMDX( vkGetInstanceProcAddr( instance, "vkGetExecutionGraphPipelineScratchSizeAMDX" ) ); + vkGetExecutionGraphPipelineNodeIndexAMDX = + PFN_vkGetExecutionGraphPipelineNodeIndexAMDX( vkGetInstanceProcAddr( instance, "vkGetExecutionGraphPipelineNodeIndexAMDX" ) ); + vkCmdInitializeGraphScratchMemoryAMDX = + PFN_vkCmdInitializeGraphScratchMemoryAMDX( vkGetInstanceProcAddr( instance, "vkCmdInitializeGraphScratchMemoryAMDX" ) ); + vkCmdDispatchGraphAMDX = PFN_vkCmdDispatchGraphAMDX( vkGetInstanceProcAddr( instance, "vkCmdDispatchGraphAMDX" ) ); + vkCmdDispatchGraphIndirectAMDX = PFN_vkCmdDispatchGraphIndirectAMDX( vkGetInstanceProcAddr( instance, "vkCmdDispatchGraphIndirectAMDX" ) ); + vkCmdDispatchGraphIndirectCountAMDX = + PFN_vkCmdDispatchGraphIndirectCountAMDX( vkGetInstanceProcAddr( instance, "vkCmdDispatchGraphIndirectCountAMDX" ) ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + vkCmdSetSampleLocationsEXT = PFN_vkCmdSetSampleLocationsEXT( vkGetInstanceProcAddr( instance, "vkCmdSetSampleLocationsEXT" ) ); + vkGetPhysicalDeviceMultisamplePropertiesEXT = + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" ) ); + + //=== VK_KHR_get_memory_requirements2 === + vkGetImageMemoryRequirements2KHR = PFN_vkGetImageMemoryRequirements2KHR( vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements2KHR" ) ); + if ( !vkGetImageMemoryRequirements2 ) + vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; + vkGetBufferMemoryRequirements2KHR = PFN_vkGetBufferMemoryRequirements2KHR( vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements2KHR" ) ); + if ( !vkGetBufferMemoryRequirements2 ) + vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; + vkGetImageSparseMemoryRequirements2KHR = + PFN_vkGetImageSparseMemoryRequirements2KHR( vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements2KHR" ) ); + if ( !vkGetImageSparseMemoryRequirements2 ) + vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; + + //=== VK_KHR_acceleration_structure === + vkCreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCreateAccelerationStructureKHR" ) ); + vkDestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkDestroyAccelerationStructureKHR" ) ); + vkCmdBuildAccelerationStructuresKHR = + PFN_vkCmdBuildAccelerationStructuresKHR( vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructuresKHR" ) ); + vkCmdBuildAccelerationStructuresIndirectKHR = + PFN_vkCmdBuildAccelerationStructuresIndirectKHR( vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); + vkBuildAccelerationStructuresKHR = PFN_vkBuildAccelerationStructuresKHR( vkGetInstanceProcAddr( instance, "vkBuildAccelerationStructuresKHR" ) ); + vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCopyAccelerationStructureKHR" ) ); + vkCopyAccelerationStructureToMemoryKHR = + PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetInstanceProcAddr( instance, "vkCopyAccelerationStructureToMemoryKHR" ) ); + vkCopyMemoryToAccelerationStructureKHR = + PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCopyMemoryToAccelerationStructureKHR" ) ); + vkWriteAccelerationStructuresPropertiesKHR = + PFN_vkWriteAccelerationStructuresPropertiesKHR( vkGetInstanceProcAddr( instance, "vkWriteAccelerationStructuresPropertiesKHR" ) ); + vkCmdCopyAccelerationStructureKHR = PFN_vkCmdCopyAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureKHR" ) ); + vkCmdCopyAccelerationStructureToMemoryKHR = + PFN_vkCmdCopyAccelerationStructureToMemoryKHR( vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); + vkCmdCopyMemoryToAccelerationStructureKHR = + PFN_vkCmdCopyMemoryToAccelerationStructureKHR( vkGetInstanceProcAddr( instance, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); + vkGetAccelerationStructureDeviceAddressKHR = + PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureDeviceAddressKHR" ) ); + vkCmdWriteAccelerationStructuresPropertiesKHR = + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( vkGetInstanceProcAddr( instance, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); + vkGetDeviceAccelerationStructureCompatibilityKHR = + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); + vkGetAccelerationStructureBuildSizesKHR = + PFN_vkGetAccelerationStructureBuildSizesKHR( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureBuildSizesKHR" ) ); + + //=== VK_KHR_ray_tracing_pipeline === + vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysKHR" ) ); + vkCreateRayTracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR( vkGetInstanceProcAddr( instance, "vkCreateRayTracingPipelinesKHR" ) ); + vkGetRayTracingShaderGroupHandlesKHR = + PFN_vkGetRayTracingShaderGroupHandlesKHR( vkGetInstanceProcAddr( instance, "vkGetRayTracingShaderGroupHandlesKHR" ) ); + vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkGetInstanceProcAddr( instance, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); + vkCmdTraceRaysIndirectKHR = PFN_vkCmdTraceRaysIndirectKHR( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysIndirectKHR" ) ); + vkGetRayTracingShaderGroupStackSizeKHR = + PFN_vkGetRayTracingShaderGroupStackSizeKHR( vkGetInstanceProcAddr( instance, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); + vkCmdSetRayTracingPipelineStackSizeKHR = + PFN_vkCmdSetRayTracingPipelineStackSizeKHR( vkGetInstanceProcAddr( instance, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); + + //=== VK_KHR_sampler_ycbcr_conversion === + vkCreateSamplerYcbcrConversionKHR = PFN_vkCreateSamplerYcbcrConversionKHR( vkGetInstanceProcAddr( instance, "vkCreateSamplerYcbcrConversionKHR" ) ); + if ( !vkCreateSamplerYcbcrConversion ) + vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; + vkDestroySamplerYcbcrConversionKHR = PFN_vkDestroySamplerYcbcrConversionKHR( vkGetInstanceProcAddr( instance, "vkDestroySamplerYcbcrConversionKHR" ) ); + if ( !vkDestroySamplerYcbcrConversion ) + vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; + + //=== VK_KHR_bind_memory2 === + vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetInstanceProcAddr( instance, "vkBindBufferMemory2KHR" ) ); + if ( !vkBindBufferMemory2 ) + vkBindBufferMemory2 = vkBindBufferMemory2KHR; + vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetInstanceProcAddr( instance, "vkBindImageMemory2KHR" ) ); + if ( !vkBindImageMemory2 ) + vkBindImageMemory2 = vkBindImageMemory2KHR; + + //=== VK_EXT_image_drm_format_modifier === + vkGetImageDrmFormatModifierPropertiesEXT = + PFN_vkGetImageDrmFormatModifierPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); + + //=== VK_EXT_validation_cache === + vkCreateValidationCacheEXT = PFN_vkCreateValidationCacheEXT( vkGetInstanceProcAddr( instance, "vkCreateValidationCacheEXT" ) ); + vkDestroyValidationCacheEXT = PFN_vkDestroyValidationCacheEXT( vkGetInstanceProcAddr( instance, "vkDestroyValidationCacheEXT" ) ); + vkMergeValidationCachesEXT = PFN_vkMergeValidationCachesEXT( vkGetInstanceProcAddr( instance, "vkMergeValidationCachesEXT" ) ); + vkGetValidationCacheDataEXT = PFN_vkGetValidationCacheDataEXT( vkGetInstanceProcAddr( instance, "vkGetValidationCacheDataEXT" ) ); + + //=== VK_NV_shading_rate_image === + vkCmdBindShadingRateImageNV = PFN_vkCmdBindShadingRateImageNV( vkGetInstanceProcAddr( instance, "vkCmdBindShadingRateImageNV" ) ); + vkCmdSetViewportShadingRatePaletteNV = + PFN_vkCmdSetViewportShadingRatePaletteNV( vkGetInstanceProcAddr( instance, "vkCmdSetViewportShadingRatePaletteNV" ) ); + vkCmdSetCoarseSampleOrderNV = PFN_vkCmdSetCoarseSampleOrderNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoarseSampleOrderNV" ) ); + + //=== VK_NV_ray_tracing === + vkCreateAccelerationStructureNV = PFN_vkCreateAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkCreateAccelerationStructureNV" ) ); + vkDestroyAccelerationStructureNV = PFN_vkDestroyAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkDestroyAccelerationStructureNV" ) ); + vkGetAccelerationStructureMemoryRequirementsNV = + PFN_vkGetAccelerationStructureMemoryRequirementsNV( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); + vkBindAccelerationStructureMemoryNV = + PFN_vkBindAccelerationStructureMemoryNV( vkGetInstanceProcAddr( instance, "vkBindAccelerationStructureMemoryNV" ) ); + vkCmdBuildAccelerationStructureNV = PFN_vkCmdBuildAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructureNV" ) ); + vkCmdCopyAccelerationStructureNV = PFN_vkCmdCopyAccelerationStructureNV( vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureNV" ) ); + vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysNV" ) ); + vkCreateRayTracingPipelinesNV = PFN_vkCreateRayTracingPipelinesNV( vkGetInstanceProcAddr( instance, "vkCreateRayTracingPipelinesNV" ) ); + vkGetRayTracingShaderGroupHandlesNV = + PFN_vkGetRayTracingShaderGroupHandlesNV( vkGetInstanceProcAddr( instance, "vkGetRayTracingShaderGroupHandlesNV" ) ); + if ( !vkGetRayTracingShaderGroupHandlesKHR ) + vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; + vkGetAccelerationStructureHandleNV = PFN_vkGetAccelerationStructureHandleNV( vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureHandleNV" ) ); + vkCmdWriteAccelerationStructuresPropertiesNV = + PFN_vkCmdWriteAccelerationStructuresPropertiesNV( vkGetInstanceProcAddr( instance, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); + vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetInstanceProcAddr( instance, "vkCompileDeferredNV" ) ); + + //=== VK_KHR_maintenance3 === + vkGetDescriptorSetLayoutSupportKHR = PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutSupportKHR" ) ); + if ( !vkGetDescriptorSetLayoutSupport ) + vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; + + //=== VK_KHR_draw_indirect_count === + vkCmdDrawIndirectCountKHR = PFN_vkCmdDrawIndirectCountKHR( vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCountKHR" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; + vkCmdDrawIndexedIndirectCountKHR = PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCountKHR" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; + + //=== VK_EXT_external_memory_host === + vkGetMemoryHostPointerPropertiesEXT = + PFN_vkGetMemoryHostPointerPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetMemoryHostPointerPropertiesEXT" ) ); + + //=== VK_AMD_buffer_marker === + vkCmdWriteBufferMarkerAMD = PFN_vkCmdWriteBufferMarkerAMD( vkGetInstanceProcAddr( instance, "vkCmdWriteBufferMarkerAMD" ) ); + vkCmdWriteBufferMarker2AMD = PFN_vkCmdWriteBufferMarker2AMD( vkGetInstanceProcAddr( instance, "vkCmdWriteBufferMarker2AMD" ) ); + + //=== VK_EXT_calibrated_timestamps === + vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" ) ); + if ( !vkGetPhysicalDeviceCalibrateableTimeDomainsKHR ) + vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; + vkGetCalibratedTimestampsEXT = PFN_vkGetCalibratedTimestampsEXT( vkGetInstanceProcAddr( instance, "vkGetCalibratedTimestampsEXT" ) ); + if ( !vkGetCalibratedTimestampsKHR ) + vkGetCalibratedTimestampsKHR = vkGetCalibratedTimestampsEXT; + + //=== VK_NV_mesh_shader === + vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksNV" ) ); + vkCmdDrawMeshTasksIndirectNV = PFN_vkCmdDrawMeshTasksIndirectNV( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksIndirectNV" ) ); + vkCmdDrawMeshTasksIndirectCountNV = PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksIndirectCountNV" ) ); + + //=== VK_NV_scissor_exclusive === + vkCmdSetExclusiveScissorEnableNV = PFN_vkCmdSetExclusiveScissorEnableNV( vkGetInstanceProcAddr( instance, "vkCmdSetExclusiveScissorEnableNV" ) ); + vkCmdSetExclusiveScissorNV = PFN_vkCmdSetExclusiveScissorNV( vkGetInstanceProcAddr( instance, "vkCmdSetExclusiveScissorNV" ) ); + + //=== VK_NV_device_diagnostic_checkpoints === + vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetInstanceProcAddr( instance, "vkCmdSetCheckpointNV" ) ); + vkGetQueueCheckpointDataNV = PFN_vkGetQueueCheckpointDataNV( vkGetInstanceProcAddr( instance, "vkGetQueueCheckpointDataNV" ) ); + vkGetQueueCheckpointData2NV = PFN_vkGetQueueCheckpointData2NV( vkGetInstanceProcAddr( instance, "vkGetQueueCheckpointData2NV" ) ); + + //=== VK_KHR_timeline_semaphore === + vkGetSemaphoreCounterValueKHR = PFN_vkGetSemaphoreCounterValueKHR( vkGetInstanceProcAddr( instance, "vkGetSemaphoreCounterValueKHR" ) ); + if ( !vkGetSemaphoreCounterValue ) + vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; + vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetInstanceProcAddr( instance, "vkWaitSemaphoresKHR" ) ); + if ( !vkWaitSemaphores ) + vkWaitSemaphores = vkWaitSemaphoresKHR; + vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetInstanceProcAddr( instance, "vkSignalSemaphoreKHR" ) ); + if ( !vkSignalSemaphore ) + vkSignalSemaphore = vkSignalSemaphoreKHR; + + //=== VK_INTEL_performance_query === + vkInitializePerformanceApiINTEL = PFN_vkInitializePerformanceApiINTEL( vkGetInstanceProcAddr( instance, "vkInitializePerformanceApiINTEL" ) ); + vkUninitializePerformanceApiINTEL = PFN_vkUninitializePerformanceApiINTEL( vkGetInstanceProcAddr( instance, "vkUninitializePerformanceApiINTEL" ) ); + vkCmdSetPerformanceMarkerINTEL = PFN_vkCmdSetPerformanceMarkerINTEL( vkGetInstanceProcAddr( instance, "vkCmdSetPerformanceMarkerINTEL" ) ); + vkCmdSetPerformanceStreamMarkerINTEL = + PFN_vkCmdSetPerformanceStreamMarkerINTEL( vkGetInstanceProcAddr( instance, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); + vkCmdSetPerformanceOverrideINTEL = PFN_vkCmdSetPerformanceOverrideINTEL( vkGetInstanceProcAddr( instance, "vkCmdSetPerformanceOverrideINTEL" ) ); + vkAcquirePerformanceConfigurationINTEL = + PFN_vkAcquirePerformanceConfigurationINTEL( vkGetInstanceProcAddr( instance, "vkAcquirePerformanceConfigurationINTEL" ) ); + vkReleasePerformanceConfigurationINTEL = + PFN_vkReleasePerformanceConfigurationINTEL( vkGetInstanceProcAddr( instance, "vkReleasePerformanceConfigurationINTEL" ) ); + vkQueueSetPerformanceConfigurationINTEL = + PFN_vkQueueSetPerformanceConfigurationINTEL( vkGetInstanceProcAddr( instance, "vkQueueSetPerformanceConfigurationINTEL" ) ); + vkGetPerformanceParameterINTEL = PFN_vkGetPerformanceParameterINTEL( vkGetInstanceProcAddr( instance, "vkGetPerformanceParameterINTEL" ) ); + + //=== VK_AMD_display_native_hdr === + vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetInstanceProcAddr( instance, "vkSetLocalDimmingAMD" ) ); + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + vkCreateImagePipeSurfaceFUCHSIA = PFN_vkCreateImagePipeSurfaceFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + vkCreateMetalSurfaceEXT = PFN_vkCreateMetalSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" ) ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + vkGetPhysicalDeviceFragmentShadingRatesKHR = + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR" ) ); + vkCmdSetFragmentShadingRateKHR = PFN_vkCmdSetFragmentShadingRateKHR( vkGetInstanceProcAddr( instance, "vkCmdSetFragmentShadingRateKHR" ) ); + + //=== VK_KHR_dynamic_rendering_local_read === + vkCmdSetRenderingAttachmentLocationsKHR = + PFN_vkCmdSetRenderingAttachmentLocationsKHR( vkGetInstanceProcAddr( instance, "vkCmdSetRenderingAttachmentLocationsKHR" ) ); + if ( !vkCmdSetRenderingAttachmentLocations ) + vkCmdSetRenderingAttachmentLocations = vkCmdSetRenderingAttachmentLocationsKHR; + vkCmdSetRenderingInputAttachmentIndicesKHR = + PFN_vkCmdSetRenderingInputAttachmentIndicesKHR( vkGetInstanceProcAddr( instance, "vkCmdSetRenderingInputAttachmentIndicesKHR" ) ); + if ( !vkCmdSetRenderingInputAttachmentIndices ) + vkCmdSetRenderingInputAttachmentIndices = vkCmdSetRenderingInputAttachmentIndicesKHR; + + //=== VK_EXT_buffer_device_address === + vkGetBufferDeviceAddressEXT = PFN_vkGetBufferDeviceAddressEXT( vkGetInstanceProcAddr( instance, "vkGetBufferDeviceAddressEXT" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; + + //=== VK_EXT_tooling_info === + vkGetPhysicalDeviceToolPropertiesEXT = + PFN_vkGetPhysicalDeviceToolPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) ); + if ( !vkGetPhysicalDeviceToolProperties ) + vkGetPhysicalDeviceToolProperties = vkGetPhysicalDeviceToolPropertiesEXT; + + //=== VK_KHR_present_wait === + vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetInstanceProcAddr( instance, "vkWaitForPresentKHR" ) ); + + //=== VK_NV_cooperative_matrix === + vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV" ) ); + + //=== VK_NV_coverage_reduction_mode === + vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV" ) ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + vkGetPhysicalDeviceSurfacePresentModes2EXT = + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" ) ); + vkAcquireFullScreenExclusiveModeEXT = + PFN_vkAcquireFullScreenExclusiveModeEXT( vkGetInstanceProcAddr( instance, "vkAcquireFullScreenExclusiveModeEXT" ) ); + vkReleaseFullScreenExclusiveModeEXT = + PFN_vkReleaseFullScreenExclusiveModeEXT( vkGetInstanceProcAddr( instance, "vkReleaseFullScreenExclusiveModeEXT" ) ); + vkGetDeviceGroupSurfacePresentModes2EXT = + PFN_vkGetDeviceGroupSurfacePresentModes2EXT( vkGetInstanceProcAddr( instance, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + vkCreateHeadlessSurfaceEXT = PFN_vkCreateHeadlessSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateHeadlessSurfaceEXT" ) ); + + //=== VK_KHR_buffer_device_address === + vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetInstanceProcAddr( instance, "vkGetBufferDeviceAddressKHR" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; + vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetInstanceProcAddr( instance, "vkGetBufferOpaqueCaptureAddressKHR" ) ); + if ( !vkGetBufferOpaqueCaptureAddress ) + vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; + vkGetDeviceMemoryOpaqueCaptureAddressKHR = + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); + if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) + vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; + + //=== VK_EXT_line_rasterization === + vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLineStippleEXT" ) ); + if ( !vkCmdSetLineStipple ) + vkCmdSetLineStipple = vkCmdSetLineStippleEXT; + + //=== VK_EXT_host_query_reset === + vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetInstanceProcAddr( instance, "vkResetQueryPoolEXT" ) ); + if ( !vkResetQueryPool ) + vkResetQueryPool = vkResetQueryPoolEXT; + + //=== VK_EXT_extended_dynamic_state === + vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetCullModeEXT" ) ); + if ( !vkCmdSetCullMode ) + vkCmdSetCullMode = vkCmdSetCullModeEXT; + vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetInstanceProcAddr( instance, "vkCmdSetFrontFaceEXT" ) ); + if ( !vkCmdSetFrontFace ) + vkCmdSetFrontFace = vkCmdSetFrontFaceEXT; + vkCmdSetPrimitiveTopologyEXT = PFN_vkCmdSetPrimitiveTopologyEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveTopologyEXT" ) ); + if ( !vkCmdSetPrimitiveTopology ) + vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT; + vkCmdSetViewportWithCountEXT = PFN_vkCmdSetViewportWithCountEXT( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWithCountEXT" ) ); + if ( !vkCmdSetViewportWithCount ) + vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT; + vkCmdSetScissorWithCountEXT = PFN_vkCmdSetScissorWithCountEXT( vkGetInstanceProcAddr( instance, "vkCmdSetScissorWithCountEXT" ) ); + if ( !vkCmdSetScissorWithCount ) + vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT; + vkCmdBindVertexBuffers2EXT = PFN_vkCmdBindVertexBuffers2EXT( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers2EXT" ) ); + if ( !vkCmdBindVertexBuffers2 ) + vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT; + vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthTestEnableEXT" ) ); + if ( !vkCmdSetDepthTestEnable ) + vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT; + vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthWriteEnableEXT" ) ); + if ( !vkCmdSetDepthWriteEnable ) + vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT; + vkCmdSetDepthCompareOpEXT = PFN_vkCmdSetDepthCompareOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthCompareOpEXT" ) ); + if ( !vkCmdSetDepthCompareOp ) + vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT; + vkCmdSetDepthBoundsTestEnableEXT = PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBoundsTestEnableEXT" ) ); + if ( !vkCmdSetDepthBoundsTestEnable ) + vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT; + vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetStencilTestEnableEXT" ) ); + if ( !vkCmdSetStencilTestEnable ) + vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; + vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetStencilOpEXT" ) ); + if ( !vkCmdSetStencilOp ) + vkCmdSetStencilOp = vkCmdSetStencilOpEXT; + + //=== VK_KHR_deferred_host_operations === + vkCreateDeferredOperationKHR = PFN_vkCreateDeferredOperationKHR( vkGetInstanceProcAddr( instance, "vkCreateDeferredOperationKHR" ) ); + vkDestroyDeferredOperationKHR = PFN_vkDestroyDeferredOperationKHR( vkGetInstanceProcAddr( instance, "vkDestroyDeferredOperationKHR" ) ); + vkGetDeferredOperationMaxConcurrencyKHR = + PFN_vkGetDeferredOperationMaxConcurrencyKHR( vkGetInstanceProcAddr( instance, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); + vkGetDeferredOperationResultKHR = PFN_vkGetDeferredOperationResultKHR( vkGetInstanceProcAddr( instance, "vkGetDeferredOperationResultKHR" ) ); + vkDeferredOperationJoinKHR = PFN_vkDeferredOperationJoinKHR( vkGetInstanceProcAddr( instance, "vkDeferredOperationJoinKHR" ) ); + + //=== VK_KHR_pipeline_executable_properties === + vkGetPipelineExecutablePropertiesKHR = + PFN_vkGetPipelineExecutablePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineExecutablePropertiesKHR" ) ); + vkGetPipelineExecutableStatisticsKHR = + PFN_vkGetPipelineExecutableStatisticsKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineExecutableStatisticsKHR" ) ); + vkGetPipelineExecutableInternalRepresentationsKHR = + PFN_vkGetPipelineExecutableInternalRepresentationsKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); + + //=== VK_EXT_host_image_copy === + vkCopyMemoryToImageEXT = PFN_vkCopyMemoryToImageEXT( vkGetInstanceProcAddr( instance, "vkCopyMemoryToImageEXT" ) ); + if ( !vkCopyMemoryToImage ) + vkCopyMemoryToImage = vkCopyMemoryToImageEXT; + vkCopyImageToMemoryEXT = PFN_vkCopyImageToMemoryEXT( vkGetInstanceProcAddr( instance, "vkCopyImageToMemoryEXT" ) ); + if ( !vkCopyImageToMemory ) + vkCopyImageToMemory = vkCopyImageToMemoryEXT; + vkCopyImageToImageEXT = PFN_vkCopyImageToImageEXT( vkGetInstanceProcAddr( instance, "vkCopyImageToImageEXT" ) ); + if ( !vkCopyImageToImage ) + vkCopyImageToImage = vkCopyImageToImageEXT; + vkTransitionImageLayoutEXT = PFN_vkTransitionImageLayoutEXT( vkGetInstanceProcAddr( instance, "vkTransitionImageLayoutEXT" ) ); + if ( !vkTransitionImageLayout ) + vkTransitionImageLayout = vkTransitionImageLayoutEXT; + vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2EXT( vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout2EXT" ) ); + if ( !vkGetImageSubresourceLayout2 ) + vkGetImageSubresourceLayout2 = vkGetImageSubresourceLayout2EXT; + + //=== VK_KHR_map_memory2 === + vkMapMemory2KHR = PFN_vkMapMemory2KHR( vkGetInstanceProcAddr( instance, "vkMapMemory2KHR" ) ); + if ( !vkMapMemory2 ) + vkMapMemory2 = vkMapMemory2KHR; + vkUnmapMemory2KHR = PFN_vkUnmapMemory2KHR( vkGetInstanceProcAddr( instance, "vkUnmapMemory2KHR" ) ); + if ( !vkUnmapMemory2 ) + vkUnmapMemory2 = vkUnmapMemory2KHR; + + //=== VK_EXT_swapchain_maintenance1 === + vkReleaseSwapchainImagesEXT = PFN_vkReleaseSwapchainImagesEXT( vkGetInstanceProcAddr( instance, "vkReleaseSwapchainImagesEXT" ) ); + if ( !vkReleaseSwapchainImagesKHR ) + vkReleaseSwapchainImagesKHR = vkReleaseSwapchainImagesEXT; + + //=== VK_NV_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsNV = + PFN_vkGetGeneratedCommandsMemoryRequirementsNV( vkGetInstanceProcAddr( instance, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); + vkCmdPreprocessGeneratedCommandsNV = PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetInstanceProcAddr( instance, "vkCmdPreprocessGeneratedCommandsNV" ) ); + vkCmdExecuteGeneratedCommandsNV = PFN_vkCmdExecuteGeneratedCommandsNV( vkGetInstanceProcAddr( instance, "vkCmdExecuteGeneratedCommandsNV" ) ); + vkCmdBindPipelineShaderGroupNV = PFN_vkCmdBindPipelineShaderGroupNV( vkGetInstanceProcAddr( instance, "vkCmdBindPipelineShaderGroupNV" ) ); + vkCreateIndirectCommandsLayoutNV = PFN_vkCreateIndirectCommandsLayoutNV( vkGetInstanceProcAddr( instance, "vkCreateIndirectCommandsLayoutNV" ) ); + vkDestroyIndirectCommandsLayoutNV = PFN_vkDestroyIndirectCommandsLayoutNV( vkGetInstanceProcAddr( instance, "vkDestroyIndirectCommandsLayoutNV" ) ); + + //=== VK_EXT_depth_bias_control === + vkCmdSetDepthBias2EXT = PFN_vkCmdSetDepthBias2EXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBias2EXT" ) ); + + //=== VK_EXT_acquire_drm_display === + vkAcquireDrmDisplayEXT = PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) ); + vkGetDrmDisplayEXT = PFN_vkGetDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetDrmDisplayEXT" ) ); + + //=== VK_EXT_private_data === + vkCreatePrivateDataSlotEXT = PFN_vkCreatePrivateDataSlotEXT( vkGetInstanceProcAddr( instance, "vkCreatePrivateDataSlotEXT" ) ); + if ( !vkCreatePrivateDataSlot ) + vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT; + vkDestroyPrivateDataSlotEXT = PFN_vkDestroyPrivateDataSlotEXT( vkGetInstanceProcAddr( instance, "vkDestroyPrivateDataSlotEXT" ) ); + if ( !vkDestroyPrivateDataSlot ) + vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT; + vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetInstanceProcAddr( instance, "vkSetPrivateDataEXT" ) ); + if ( !vkSetPrivateData ) + vkSetPrivateData = vkSetPrivateDataEXT; + vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetInstanceProcAddr( instance, "vkGetPrivateDataEXT" ) ); + if ( !vkGetPrivateData ) + vkGetPrivateData = vkGetPrivateDataEXT; + + //=== VK_KHR_video_encode_queue === + vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR" ) ); + vkGetEncodedVideoSessionParametersKHR = + PFN_vkGetEncodedVideoSessionParametersKHR( vkGetInstanceProcAddr( instance, "vkGetEncodedVideoSessionParametersKHR" ) ); + vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetInstanceProcAddr( instance, "vkCmdEncodeVideoKHR" ) ); + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + vkCreateCudaModuleNV = PFN_vkCreateCudaModuleNV( vkGetInstanceProcAddr( instance, "vkCreateCudaModuleNV" ) ); + vkGetCudaModuleCacheNV = PFN_vkGetCudaModuleCacheNV( vkGetInstanceProcAddr( instance, "vkGetCudaModuleCacheNV" ) ); + vkCreateCudaFunctionNV = PFN_vkCreateCudaFunctionNV( vkGetInstanceProcAddr( instance, "vkCreateCudaFunctionNV" ) ); + vkDestroyCudaModuleNV = PFN_vkDestroyCudaModuleNV( vkGetInstanceProcAddr( instance, "vkDestroyCudaModuleNV" ) ); + vkDestroyCudaFunctionNV = PFN_vkDestroyCudaFunctionNV( vkGetInstanceProcAddr( instance, "vkDestroyCudaFunctionNV" ) ); + vkCmdCudaLaunchKernelNV = PFN_vkCmdCudaLaunchKernelNV( vkGetInstanceProcAddr( instance, "vkCmdCudaLaunchKernelNV" ) ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + vkCmdDispatchTileQCOM = PFN_vkCmdDispatchTileQCOM( vkGetInstanceProcAddr( instance, "vkCmdDispatchTileQCOM" ) ); + vkCmdBeginPerTileExecutionQCOM = PFN_vkCmdBeginPerTileExecutionQCOM( vkGetInstanceProcAddr( instance, "vkCmdBeginPerTileExecutionQCOM" ) ); + vkCmdEndPerTileExecutionQCOM = PFN_vkCmdEndPerTileExecutionQCOM( vkGetInstanceProcAddr( instance, "vkCmdEndPerTileExecutionQCOM" ) ); + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + vkExportMetalObjectsEXT = PFN_vkExportMetalObjectsEXT( vkGetInstanceProcAddr( instance, "vkExportMetalObjectsEXT" ) ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2KHR" ) ); + if ( !vkCmdSetEvent2 ) + vkCmdSetEvent2 = vkCmdSetEvent2KHR; + vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdResetEvent2KHR" ) ); + if ( !vkCmdResetEvent2 ) + vkCmdResetEvent2 = vkCmdResetEvent2KHR; + vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents2KHR" ) ); + if ( !vkCmdWaitEvents2 ) + vkCmdWaitEvents2 = vkCmdWaitEvents2KHR; + vkCmdPipelineBarrier2KHR = PFN_vkCmdPipelineBarrier2KHR( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier2KHR" ) ); + if ( !vkCmdPipelineBarrier2 ) + vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; + vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp2KHR" ) ); + if ( !vkCmdWriteTimestamp2 ) + vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR; + vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetInstanceProcAddr( instance, "vkQueueSubmit2KHR" ) ); + if ( !vkQueueSubmit2 ) + vkQueueSubmit2 = vkQueueSubmit2KHR; + + //=== VK_EXT_descriptor_buffer === + vkGetDescriptorSetLayoutSizeEXT = PFN_vkGetDescriptorSetLayoutSizeEXT( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutSizeEXT" ) ); + vkGetDescriptorSetLayoutBindingOffsetEXT = + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutBindingOffsetEXT" ) ); + vkGetDescriptorEXT = PFN_vkGetDescriptorEXT( vkGetInstanceProcAddr( instance, "vkGetDescriptorEXT" ) ); + vkCmdBindDescriptorBuffersEXT = PFN_vkCmdBindDescriptorBuffersEXT( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorBuffersEXT" ) ); + vkCmdSetDescriptorBufferOffsetsEXT = PFN_vkCmdSetDescriptorBufferOffsetsEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDescriptorBufferOffsetsEXT" ) ); + vkCmdBindDescriptorBufferEmbeddedSamplersEXT = + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT" ) ); + vkGetBufferOpaqueCaptureDescriptorDataEXT = + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT( vkGetInstanceProcAddr( instance, "vkGetBufferOpaqueCaptureDescriptorDataEXT" ) ); + vkGetImageOpaqueCaptureDescriptorDataEXT = + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT( vkGetInstanceProcAddr( instance, "vkGetImageOpaqueCaptureDescriptorDataEXT" ) ); + vkGetImageViewOpaqueCaptureDescriptorDataEXT = + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT( vkGetInstanceProcAddr( instance, "vkGetImageViewOpaqueCaptureDescriptorDataEXT" ) ); + vkGetSamplerOpaqueCaptureDescriptorDataEXT = + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT( vkGetInstanceProcAddr( instance, "vkGetSamplerOpaqueCaptureDescriptorDataEXT" ) ); + vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT" ) ); + + //=== VK_NV_fragment_shading_rate_enums === + vkCmdSetFragmentShadingRateEnumNV = PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetInstanceProcAddr( instance, "vkCmdSetFragmentShadingRateEnumNV" ) ); + + //=== VK_EXT_mesh_shader === + vkCmdDrawMeshTasksEXT = PFN_vkCmdDrawMeshTasksEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksEXT" ) ); + vkCmdDrawMeshTasksIndirectEXT = PFN_vkCmdDrawMeshTasksIndirectEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksIndirectEXT" ) ); + vkCmdDrawMeshTasksIndirectCountEXT = PFN_vkCmdDrawMeshTasksIndirectCountEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMeshTasksIndirectCountEXT" ) ); + + //=== VK_KHR_copy_commands2 === + vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer2KHR" ) ); + if ( !vkCmdCopyBuffer2 ) + vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR; + vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2KHR" ) ); + if ( !vkCmdCopyImage2 ) + vkCmdCopyImage2 = vkCmdCopyImage2KHR; + vkCmdCopyBufferToImage2KHR = PFN_vkCmdCopyBufferToImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage2KHR" ) ); + if ( !vkCmdCopyBufferToImage2 ) + vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR; + vkCmdCopyImageToBuffer2KHR = PFN_vkCmdCopyImageToBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer2KHR" ) ); + if ( !vkCmdCopyImageToBuffer2 ) + vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR; + vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2KHR" ) ); + if ( !vkCmdBlitImage2 ) + vkCmdBlitImage2 = vkCmdBlitImage2KHR; + vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdResolveImage2KHR" ) ); + if ( !vkCmdResolveImage2 ) + vkCmdResolveImage2 = vkCmdResolveImage2KHR; + + //=== VK_EXT_device_fault === + vkGetDeviceFaultInfoEXT = PFN_vkGetDeviceFaultInfoEXT( vkGetInstanceProcAddr( instance, "vkGetDeviceFaultInfoEXT" ) ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + vkAcquireWinrtDisplayNV = PFN_vkAcquireWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkAcquireWinrtDisplayNV" ) ); + vkGetWinrtDisplayNV = PFN_vkGetWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkGetWinrtDisplayNV" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + vkCreateDirectFBSurfaceEXT = PFN_vkCreateDirectFBSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" ) ); + vkGetPhysicalDeviceDirectFBPresentationSupportEXT = + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" ) ); +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetInstanceProcAddr( instance, "vkCmdSetVertexInputEXT" ) ); + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + vkGetMemoryZirconHandleFUCHSIA = PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetMemoryZirconHandleFUCHSIA" ) ); + vkGetMemoryZirconHandlePropertiesFUCHSIA = + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + vkImportSemaphoreZirconHandleFUCHSIA = + PFN_vkImportSemaphoreZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); + vkGetSemaphoreZirconHandleFUCHSIA = PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + vkCreateBufferCollectionFUCHSIA = PFN_vkCreateBufferCollectionFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateBufferCollectionFUCHSIA" ) ); + vkSetBufferCollectionImageConstraintsFUCHSIA = + PFN_vkSetBufferCollectionImageConstraintsFUCHSIA( vkGetInstanceProcAddr( instance, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) ); + vkSetBufferCollectionBufferConstraintsFUCHSIA = + PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA( vkGetInstanceProcAddr( instance, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) ); + vkDestroyBufferCollectionFUCHSIA = PFN_vkDestroyBufferCollectionFUCHSIA( vkGetInstanceProcAddr( instance, "vkDestroyBufferCollectionFUCHSIA" ) ); + vkGetBufferCollectionPropertiesFUCHSIA = + PFN_vkGetBufferCollectionPropertiesFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetBufferCollectionPropertiesFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( vkGetInstanceProcAddr( instance, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); + vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetInstanceProcAddr( instance, "vkCmdSubpassShadingHUAWEI" ) ); + + //=== VK_HUAWEI_invocation_mask === + vkCmdBindInvocationMaskHUAWEI = PFN_vkCmdBindInvocationMaskHUAWEI( vkGetInstanceProcAddr( instance, "vkCmdBindInvocationMaskHUAWEI" ) ); + + //=== VK_NV_external_memory_rdma === + vkGetMemoryRemoteAddressNV = PFN_vkGetMemoryRemoteAddressNV( vkGetInstanceProcAddr( instance, "vkGetMemoryRemoteAddressNV" ) ); + + //=== VK_EXT_pipeline_properties === + vkGetPipelinePropertiesEXT = PFN_vkGetPipelinePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPipelinePropertiesEXT" ) ); + + //=== VK_EXT_extended_dynamic_state2 === + vkCmdSetPatchControlPointsEXT = PFN_vkCmdSetPatchControlPointsEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPatchControlPointsEXT" ) ); + vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizerDiscardEnableEXT" ) ); + if ( !vkCmdSetRasterizerDiscardEnable ) + vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT; + vkCmdSetDepthBiasEnableEXT = PFN_vkCmdSetDepthBiasEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBiasEnableEXT" ) ); + if ( !vkCmdSetDepthBiasEnable ) + vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT; + vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLogicOpEXT" ) ); + vkCmdSetPrimitiveRestartEnableEXT = PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveRestartEnableEXT" ) ); + if ( !vkCmdSetPrimitiveRestartEnable ) + vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + vkCreateScreenSurfaceQNX = PFN_vkCreateScreenSurfaceQNX( vkGetInstanceProcAddr( instance, "vkCreateScreenSurfaceQNX" ) ); + vkGetPhysicalDeviceScreenPresentationSupportQNX = + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX" ) ); +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + vkCmdSetColorWriteEnableEXT = PFN_vkCmdSetColorWriteEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetColorWriteEnableEXT" ) ); + + //=== VK_KHR_ray_tracing_maintenance1 === + vkCmdTraceRaysIndirect2KHR = PFN_vkCmdTraceRaysIndirect2KHR( vkGetInstanceProcAddr( instance, "vkCmdTraceRaysIndirect2KHR" ) ); + + //=== VK_EXT_multi_draw === + vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMultiEXT" ) ); + vkCmdDrawMultiIndexedEXT = PFN_vkCmdDrawMultiIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMultiIndexedEXT" ) ); + + //=== VK_EXT_opacity_micromap === + vkCreateMicromapEXT = PFN_vkCreateMicromapEXT( vkGetInstanceProcAddr( instance, "vkCreateMicromapEXT" ) ); + vkDestroyMicromapEXT = PFN_vkDestroyMicromapEXT( vkGetInstanceProcAddr( instance, "vkDestroyMicromapEXT" ) ); + vkCmdBuildMicromapsEXT = PFN_vkCmdBuildMicromapsEXT( vkGetInstanceProcAddr( instance, "vkCmdBuildMicromapsEXT" ) ); + vkBuildMicromapsEXT = PFN_vkBuildMicromapsEXT( vkGetInstanceProcAddr( instance, "vkBuildMicromapsEXT" ) ); + vkCopyMicromapEXT = PFN_vkCopyMicromapEXT( vkGetInstanceProcAddr( instance, "vkCopyMicromapEXT" ) ); + vkCopyMicromapToMemoryEXT = PFN_vkCopyMicromapToMemoryEXT( vkGetInstanceProcAddr( instance, "vkCopyMicromapToMemoryEXT" ) ); + vkCopyMemoryToMicromapEXT = PFN_vkCopyMemoryToMicromapEXT( vkGetInstanceProcAddr( instance, "vkCopyMemoryToMicromapEXT" ) ); + vkWriteMicromapsPropertiesEXT = PFN_vkWriteMicromapsPropertiesEXT( vkGetInstanceProcAddr( instance, "vkWriteMicromapsPropertiesEXT" ) ); + vkCmdCopyMicromapEXT = PFN_vkCmdCopyMicromapEXT( vkGetInstanceProcAddr( instance, "vkCmdCopyMicromapEXT" ) ); + vkCmdCopyMicromapToMemoryEXT = PFN_vkCmdCopyMicromapToMemoryEXT( vkGetInstanceProcAddr( instance, "vkCmdCopyMicromapToMemoryEXT" ) ); + vkCmdCopyMemoryToMicromapEXT = PFN_vkCmdCopyMemoryToMicromapEXT( vkGetInstanceProcAddr( instance, "vkCmdCopyMemoryToMicromapEXT" ) ); + vkCmdWriteMicromapsPropertiesEXT = PFN_vkCmdWriteMicromapsPropertiesEXT( vkGetInstanceProcAddr( instance, "vkCmdWriteMicromapsPropertiesEXT" ) ); + vkGetDeviceMicromapCompatibilityEXT = + PFN_vkGetDeviceMicromapCompatibilityEXT( vkGetInstanceProcAddr( instance, "vkGetDeviceMicromapCompatibilityEXT" ) ); + vkGetMicromapBuildSizesEXT = PFN_vkGetMicromapBuildSizesEXT( vkGetInstanceProcAddr( instance, "vkGetMicromapBuildSizesEXT" ) ); + + //=== VK_HUAWEI_cluster_culling_shader === + vkCmdDrawClusterHUAWEI = PFN_vkCmdDrawClusterHUAWEI( vkGetInstanceProcAddr( instance, "vkCmdDrawClusterHUAWEI" ) ); + vkCmdDrawClusterIndirectHUAWEI = PFN_vkCmdDrawClusterIndirectHUAWEI( vkGetInstanceProcAddr( instance, "vkCmdDrawClusterIndirectHUAWEI" ) ); + + //=== VK_EXT_pageable_device_local_memory === + vkSetDeviceMemoryPriorityEXT = PFN_vkSetDeviceMemoryPriorityEXT( vkGetInstanceProcAddr( instance, "vkSetDeviceMemoryPriorityEXT" ) ); + + //=== VK_KHR_maintenance4 === + vkGetDeviceBufferMemoryRequirementsKHR = + PFN_vkGetDeviceBufferMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceBufferMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceBufferMemoryRequirements ) + vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR; + vkGetDeviceImageMemoryRequirementsKHR = + PFN_vkGetDeviceImageMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceImageMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceImageMemoryRequirements ) + vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR; + vkGetDeviceImageSparseMemoryRequirementsKHR = + PFN_vkGetDeviceImageSparseMemoryRequirementsKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceImageSparseMemoryRequirements ) + vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR; + + //=== VK_VALVE_descriptor_set_host_mapping === + vkGetDescriptorSetLayoutHostMappingInfoVALVE = + PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetLayoutHostMappingInfoVALVE" ) ); + vkGetDescriptorSetHostMappingVALVE = PFN_vkGetDescriptorSetHostMappingVALVE( vkGetInstanceProcAddr( instance, "vkGetDescriptorSetHostMappingVALVE" ) ); + + //=== VK_NV_copy_memory_indirect === + vkCmdCopyMemoryIndirectNV = PFN_vkCmdCopyMemoryIndirectNV( vkGetInstanceProcAddr( instance, "vkCmdCopyMemoryIndirectNV" ) ); + vkCmdCopyMemoryToImageIndirectNV = PFN_vkCmdCopyMemoryToImageIndirectNV( vkGetInstanceProcAddr( instance, "vkCmdCopyMemoryToImageIndirectNV" ) ); + + //=== VK_NV_memory_decompression === + vkCmdDecompressMemoryNV = PFN_vkCmdDecompressMemoryNV( vkGetInstanceProcAddr( instance, "vkCmdDecompressMemoryNV" ) ); + vkCmdDecompressMemoryIndirectCountNV = + PFN_vkCmdDecompressMemoryIndirectCountNV( vkGetInstanceProcAddr( instance, "vkCmdDecompressMemoryIndirectCountNV" ) ); + + //=== VK_NV_device_generated_commands_compute === + vkGetPipelineIndirectMemoryRequirementsNV = + PFN_vkGetPipelineIndirectMemoryRequirementsNV( vkGetInstanceProcAddr( instance, "vkGetPipelineIndirectMemoryRequirementsNV" ) ); + vkCmdUpdatePipelineIndirectBufferNV = + PFN_vkCmdUpdatePipelineIndirectBufferNV( vkGetInstanceProcAddr( instance, "vkCmdUpdatePipelineIndirectBufferNV" ) ); + vkGetPipelineIndirectDeviceAddressNV = + PFN_vkGetPipelineIndirectDeviceAddressNV( vkGetInstanceProcAddr( instance, "vkGetPipelineIndirectDeviceAddressNV" ) ); + + //=== VK_EXT_extended_dynamic_state3 === + vkCmdSetDepthClampEnableEXT = PFN_vkCmdSetDepthClampEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthClampEnableEXT" ) ); + vkCmdSetPolygonModeEXT = PFN_vkCmdSetPolygonModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPolygonModeEXT" ) ); + vkCmdSetRasterizationSamplesEXT = PFN_vkCmdSetRasterizationSamplesEXT( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizationSamplesEXT" ) ); + vkCmdSetSampleMaskEXT = PFN_vkCmdSetSampleMaskEXT( vkGetInstanceProcAddr( instance, "vkCmdSetSampleMaskEXT" ) ); + vkCmdSetAlphaToCoverageEnableEXT = PFN_vkCmdSetAlphaToCoverageEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetAlphaToCoverageEnableEXT" ) ); + vkCmdSetAlphaToOneEnableEXT = PFN_vkCmdSetAlphaToOneEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetAlphaToOneEnableEXT" ) ); + vkCmdSetLogicOpEnableEXT = PFN_vkCmdSetLogicOpEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLogicOpEnableEXT" ) ); + vkCmdSetColorBlendEnableEXT = PFN_vkCmdSetColorBlendEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetColorBlendEnableEXT" ) ); + vkCmdSetColorBlendEquationEXT = PFN_vkCmdSetColorBlendEquationEXT( vkGetInstanceProcAddr( instance, "vkCmdSetColorBlendEquationEXT" ) ); + vkCmdSetColorWriteMaskEXT = PFN_vkCmdSetColorWriteMaskEXT( vkGetInstanceProcAddr( instance, "vkCmdSetColorWriteMaskEXT" ) ); + vkCmdSetTessellationDomainOriginEXT = + PFN_vkCmdSetTessellationDomainOriginEXT( vkGetInstanceProcAddr( instance, "vkCmdSetTessellationDomainOriginEXT" ) ); + vkCmdSetRasterizationStreamEXT = PFN_vkCmdSetRasterizationStreamEXT( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizationStreamEXT" ) ); + vkCmdSetConservativeRasterizationModeEXT = + PFN_vkCmdSetConservativeRasterizationModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetConservativeRasterizationModeEXT" ) ); + vkCmdSetExtraPrimitiveOverestimationSizeEXT = + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetExtraPrimitiveOverestimationSizeEXT" ) ); + vkCmdSetDepthClipEnableEXT = PFN_vkCmdSetDepthClipEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthClipEnableEXT" ) ); + vkCmdSetSampleLocationsEnableEXT = PFN_vkCmdSetSampleLocationsEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetSampleLocationsEnableEXT" ) ); + vkCmdSetColorBlendAdvancedEXT = PFN_vkCmdSetColorBlendAdvancedEXT( vkGetInstanceProcAddr( instance, "vkCmdSetColorBlendAdvancedEXT" ) ); + vkCmdSetProvokingVertexModeEXT = PFN_vkCmdSetProvokingVertexModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetProvokingVertexModeEXT" ) ); + vkCmdSetLineRasterizationModeEXT = PFN_vkCmdSetLineRasterizationModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLineRasterizationModeEXT" ) ); + vkCmdSetLineStippleEnableEXT = PFN_vkCmdSetLineStippleEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLineStippleEnableEXT" ) ); + vkCmdSetDepthClipNegativeOneToOneEXT = + PFN_vkCmdSetDepthClipNegativeOneToOneEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthClipNegativeOneToOneEXT" ) ); + vkCmdSetViewportWScalingEnableNV = PFN_vkCmdSetViewportWScalingEnableNV( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWScalingEnableNV" ) ); + vkCmdSetViewportSwizzleNV = PFN_vkCmdSetViewportSwizzleNV( vkGetInstanceProcAddr( instance, "vkCmdSetViewportSwizzleNV" ) ); + vkCmdSetCoverageToColorEnableNV = PFN_vkCmdSetCoverageToColorEnableNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoverageToColorEnableNV" ) ); + vkCmdSetCoverageToColorLocationNV = PFN_vkCmdSetCoverageToColorLocationNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoverageToColorLocationNV" ) ); + vkCmdSetCoverageModulationModeNV = PFN_vkCmdSetCoverageModulationModeNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoverageModulationModeNV" ) ); + vkCmdSetCoverageModulationTableEnableNV = + PFN_vkCmdSetCoverageModulationTableEnableNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoverageModulationTableEnableNV" ) ); + vkCmdSetCoverageModulationTableNV = PFN_vkCmdSetCoverageModulationTableNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoverageModulationTableNV" ) ); + vkCmdSetShadingRateImageEnableNV = PFN_vkCmdSetShadingRateImageEnableNV( vkGetInstanceProcAddr( instance, "vkCmdSetShadingRateImageEnableNV" ) ); + vkCmdSetRepresentativeFragmentTestEnableNV = + PFN_vkCmdSetRepresentativeFragmentTestEnableNV( vkGetInstanceProcAddr( instance, "vkCmdSetRepresentativeFragmentTestEnableNV" ) ); + vkCmdSetCoverageReductionModeNV = PFN_vkCmdSetCoverageReductionModeNV( vkGetInstanceProcAddr( instance, "vkCmdSetCoverageReductionModeNV" ) ); + + //=== VK_ARM_tensors === + vkCreateTensorARM = PFN_vkCreateTensorARM( vkGetInstanceProcAddr( instance, "vkCreateTensorARM" ) ); + vkDestroyTensorARM = PFN_vkDestroyTensorARM( vkGetInstanceProcAddr( instance, "vkDestroyTensorARM" ) ); + vkCreateTensorViewARM = PFN_vkCreateTensorViewARM( vkGetInstanceProcAddr( instance, "vkCreateTensorViewARM" ) ); + vkDestroyTensorViewARM = PFN_vkDestroyTensorViewARM( vkGetInstanceProcAddr( instance, "vkDestroyTensorViewARM" ) ); + vkGetTensorMemoryRequirementsARM = PFN_vkGetTensorMemoryRequirementsARM( vkGetInstanceProcAddr( instance, "vkGetTensorMemoryRequirementsARM" ) ); + vkBindTensorMemoryARM = PFN_vkBindTensorMemoryARM( vkGetInstanceProcAddr( instance, "vkBindTensorMemoryARM" ) ); + vkGetDeviceTensorMemoryRequirementsARM = + PFN_vkGetDeviceTensorMemoryRequirementsARM( vkGetInstanceProcAddr( instance, "vkGetDeviceTensorMemoryRequirementsARM" ) ); + vkCmdCopyTensorARM = PFN_vkCmdCopyTensorARM( vkGetInstanceProcAddr( instance, "vkCmdCopyTensorARM" ) ); + vkGetPhysicalDeviceExternalTensorPropertiesARM = + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalTensorPropertiesARM" ) ); + vkGetTensorOpaqueCaptureDescriptorDataARM = + PFN_vkGetTensorOpaqueCaptureDescriptorDataARM( vkGetInstanceProcAddr( instance, "vkGetTensorOpaqueCaptureDescriptorDataARM" ) ); + vkGetTensorViewOpaqueCaptureDescriptorDataARM = + PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM( vkGetInstanceProcAddr( instance, "vkGetTensorViewOpaqueCaptureDescriptorDataARM" ) ); + + //=== VK_EXT_shader_module_identifier === + vkGetShaderModuleIdentifierEXT = PFN_vkGetShaderModuleIdentifierEXT( vkGetInstanceProcAddr( instance, "vkGetShaderModuleIdentifierEXT" ) ); + vkGetShaderModuleCreateInfoIdentifierEXT = + PFN_vkGetShaderModuleCreateInfoIdentifierEXT( vkGetInstanceProcAddr( instance, "vkGetShaderModuleCreateInfoIdentifierEXT" ) ); + + //=== VK_NV_optical_flow === + vkGetPhysicalDeviceOpticalFlowImageFormatsNV = + PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV" ) ); + vkCreateOpticalFlowSessionNV = PFN_vkCreateOpticalFlowSessionNV( vkGetInstanceProcAddr( instance, "vkCreateOpticalFlowSessionNV" ) ); + vkDestroyOpticalFlowSessionNV = PFN_vkDestroyOpticalFlowSessionNV( vkGetInstanceProcAddr( instance, "vkDestroyOpticalFlowSessionNV" ) ); + vkBindOpticalFlowSessionImageNV = PFN_vkBindOpticalFlowSessionImageNV( vkGetInstanceProcAddr( instance, "vkBindOpticalFlowSessionImageNV" ) ); + vkCmdOpticalFlowExecuteNV = PFN_vkCmdOpticalFlowExecuteNV( vkGetInstanceProcAddr( instance, "vkCmdOpticalFlowExecuteNV" ) ); + + //=== VK_KHR_maintenance5 === + vkCmdBindIndexBuffer2KHR = PFN_vkCmdBindIndexBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdBindIndexBuffer2KHR" ) ); + if ( !vkCmdBindIndexBuffer2 ) + vkCmdBindIndexBuffer2 = vkCmdBindIndexBuffer2KHR; + vkGetRenderingAreaGranularityKHR = PFN_vkGetRenderingAreaGranularityKHR( vkGetInstanceProcAddr( instance, "vkGetRenderingAreaGranularityKHR" ) ); + if ( !vkGetRenderingAreaGranularity ) + vkGetRenderingAreaGranularity = vkGetRenderingAreaGranularityKHR; + vkGetDeviceImageSubresourceLayoutKHR = + PFN_vkGetDeviceImageSubresourceLayoutKHR( vkGetInstanceProcAddr( instance, "vkGetDeviceImageSubresourceLayoutKHR" ) ); + if ( !vkGetDeviceImageSubresourceLayout ) + vkGetDeviceImageSubresourceLayout = vkGetDeviceImageSubresourceLayoutKHR; + vkGetImageSubresourceLayout2KHR = PFN_vkGetImageSubresourceLayout2KHR( vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout2KHR" ) ); + if ( !vkGetImageSubresourceLayout2 ) + vkGetImageSubresourceLayout2 = vkGetImageSubresourceLayout2KHR; + + //=== VK_AMD_anti_lag === + vkAntiLagUpdateAMD = PFN_vkAntiLagUpdateAMD( vkGetInstanceProcAddr( instance, "vkAntiLagUpdateAMD" ) ); + + //=== VK_KHR_present_wait2 === + vkWaitForPresent2KHR = PFN_vkWaitForPresent2KHR( vkGetInstanceProcAddr( instance, "vkWaitForPresent2KHR" ) ); + + //=== VK_EXT_shader_object === + vkCreateShadersEXT = PFN_vkCreateShadersEXT( vkGetInstanceProcAddr( instance, "vkCreateShadersEXT" ) ); + vkDestroyShaderEXT = PFN_vkDestroyShaderEXT( vkGetInstanceProcAddr( instance, "vkDestroyShaderEXT" ) ); + vkGetShaderBinaryDataEXT = PFN_vkGetShaderBinaryDataEXT( vkGetInstanceProcAddr( instance, "vkGetShaderBinaryDataEXT" ) ); + vkCmdBindShadersEXT = PFN_vkCmdBindShadersEXT( vkGetInstanceProcAddr( instance, "vkCmdBindShadersEXT" ) ); + vkCmdSetDepthClampRangeEXT = PFN_vkCmdSetDepthClampRangeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthClampRangeEXT" ) ); + + //=== VK_KHR_pipeline_binary === + vkCreatePipelineBinariesKHR = PFN_vkCreatePipelineBinariesKHR( vkGetInstanceProcAddr( instance, "vkCreatePipelineBinariesKHR" ) ); + vkDestroyPipelineBinaryKHR = PFN_vkDestroyPipelineBinaryKHR( vkGetInstanceProcAddr( instance, "vkDestroyPipelineBinaryKHR" ) ); + vkGetPipelineKeyKHR = PFN_vkGetPipelineKeyKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineKeyKHR" ) ); + vkGetPipelineBinaryDataKHR = PFN_vkGetPipelineBinaryDataKHR( vkGetInstanceProcAddr( instance, "vkGetPipelineBinaryDataKHR" ) ); + vkReleaseCapturedPipelineDataKHR = PFN_vkReleaseCapturedPipelineDataKHR( vkGetInstanceProcAddr( instance, "vkReleaseCapturedPipelineDataKHR" ) ); + + //=== VK_QCOM_tile_properties === + vkGetFramebufferTilePropertiesQCOM = PFN_vkGetFramebufferTilePropertiesQCOM( vkGetInstanceProcAddr( instance, "vkGetFramebufferTilePropertiesQCOM" ) ); + vkGetDynamicRenderingTilePropertiesQCOM = + PFN_vkGetDynamicRenderingTilePropertiesQCOM( vkGetInstanceProcAddr( instance, "vkGetDynamicRenderingTilePropertiesQCOM" ) ); + + //=== VK_KHR_swapchain_maintenance1 === + vkReleaseSwapchainImagesKHR = PFN_vkReleaseSwapchainImagesKHR( vkGetInstanceProcAddr( instance, "vkReleaseSwapchainImagesKHR" ) ); + + //=== VK_NV_cooperative_vector === + vkGetPhysicalDeviceCooperativeVectorPropertiesNV = + PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV" ) ); + vkConvertCooperativeVectorMatrixNV = PFN_vkConvertCooperativeVectorMatrixNV( vkGetInstanceProcAddr( instance, "vkConvertCooperativeVectorMatrixNV" ) ); + vkCmdConvertCooperativeVectorMatrixNV = + PFN_vkCmdConvertCooperativeVectorMatrixNV( vkGetInstanceProcAddr( instance, "vkCmdConvertCooperativeVectorMatrixNV" ) ); + + //=== VK_NV_low_latency2 === + vkSetLatencySleepModeNV = PFN_vkSetLatencySleepModeNV( vkGetInstanceProcAddr( instance, "vkSetLatencySleepModeNV" ) ); + vkLatencySleepNV = PFN_vkLatencySleepNV( vkGetInstanceProcAddr( instance, "vkLatencySleepNV" ) ); + vkSetLatencyMarkerNV = PFN_vkSetLatencyMarkerNV( vkGetInstanceProcAddr( instance, "vkSetLatencyMarkerNV" ) ); + vkGetLatencyTimingsNV = PFN_vkGetLatencyTimingsNV( vkGetInstanceProcAddr( instance, "vkGetLatencyTimingsNV" ) ); + vkQueueNotifyOutOfBandNV = PFN_vkQueueNotifyOutOfBandNV( vkGetInstanceProcAddr( instance, "vkQueueNotifyOutOfBandNV" ) ); + + //=== VK_KHR_cooperative_matrix === + vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR" ) ); + + //=== VK_ARM_data_graph === + vkCreateDataGraphPipelinesARM = PFN_vkCreateDataGraphPipelinesARM( vkGetInstanceProcAddr( instance, "vkCreateDataGraphPipelinesARM" ) ); + vkCreateDataGraphPipelineSessionARM = + PFN_vkCreateDataGraphPipelineSessionARM( vkGetInstanceProcAddr( instance, "vkCreateDataGraphPipelineSessionARM" ) ); + vkGetDataGraphPipelineSessionBindPointRequirementsARM = PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM( + vkGetInstanceProcAddr( instance, "vkGetDataGraphPipelineSessionBindPointRequirementsARM" ) ); + vkGetDataGraphPipelineSessionMemoryRequirementsARM = + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM( vkGetInstanceProcAddr( instance, "vkGetDataGraphPipelineSessionMemoryRequirementsARM" ) ); + vkBindDataGraphPipelineSessionMemoryARM = + PFN_vkBindDataGraphPipelineSessionMemoryARM( vkGetInstanceProcAddr( instance, "vkBindDataGraphPipelineSessionMemoryARM" ) ); + vkDestroyDataGraphPipelineSessionARM = + PFN_vkDestroyDataGraphPipelineSessionARM( vkGetInstanceProcAddr( instance, "vkDestroyDataGraphPipelineSessionARM" ) ); + vkCmdDispatchDataGraphARM = PFN_vkCmdDispatchDataGraphARM( vkGetInstanceProcAddr( instance, "vkCmdDispatchDataGraphARM" ) ); + vkGetDataGraphPipelineAvailablePropertiesARM = + PFN_vkGetDataGraphPipelineAvailablePropertiesARM( vkGetInstanceProcAddr( instance, "vkGetDataGraphPipelineAvailablePropertiesARM" ) ); + vkGetDataGraphPipelinePropertiesARM = + PFN_vkGetDataGraphPipelinePropertiesARM( vkGetInstanceProcAddr( instance, "vkGetDataGraphPipelinePropertiesARM" ) ); + vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM" ) ); + vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM" ) ); + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + vkCmdSetAttachmentFeedbackLoopEnableEXT = + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetAttachmentFeedbackLoopEnableEXT" ) ); + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + vkGetScreenBufferPropertiesQNX = PFN_vkGetScreenBufferPropertiesQNX( vkGetInstanceProcAddr( instance, "vkGetScreenBufferPropertiesQNX" ) ); +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + vkCmdSetLineStippleKHR = PFN_vkCmdSetLineStippleKHR( vkGetInstanceProcAddr( instance, "vkCmdSetLineStippleKHR" ) ); + if ( !vkCmdSetLineStipple ) + vkCmdSetLineStipple = vkCmdSetLineStippleKHR; + + //=== VK_KHR_calibrated_timestamps === + vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR" ) ); + vkGetCalibratedTimestampsKHR = PFN_vkGetCalibratedTimestampsKHR( vkGetInstanceProcAddr( instance, "vkGetCalibratedTimestampsKHR" ) ); + + //=== VK_KHR_maintenance6 === + vkCmdBindDescriptorSets2KHR = PFN_vkCmdBindDescriptorSets2KHR( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorSets2KHR" ) ); + if ( !vkCmdBindDescriptorSets2 ) + vkCmdBindDescriptorSets2 = vkCmdBindDescriptorSets2KHR; + vkCmdPushConstants2KHR = PFN_vkCmdPushConstants2KHR( vkGetInstanceProcAddr( instance, "vkCmdPushConstants2KHR" ) ); + if ( !vkCmdPushConstants2 ) + vkCmdPushConstants2 = vkCmdPushConstants2KHR; + vkCmdPushDescriptorSet2KHR = PFN_vkCmdPushDescriptorSet2KHR( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSet2KHR" ) ); + if ( !vkCmdPushDescriptorSet2 ) + vkCmdPushDescriptorSet2 = vkCmdPushDescriptorSet2KHR; + vkCmdPushDescriptorSetWithTemplate2KHR = + PFN_vkCmdPushDescriptorSetWithTemplate2KHR( vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetWithTemplate2KHR" ) ); + if ( !vkCmdPushDescriptorSetWithTemplate2 ) + vkCmdPushDescriptorSetWithTemplate2 = vkCmdPushDescriptorSetWithTemplate2KHR; + vkCmdSetDescriptorBufferOffsets2EXT = + PFN_vkCmdSetDescriptorBufferOffsets2EXT( vkGetInstanceProcAddr( instance, "vkCmdSetDescriptorBufferOffsets2EXT" ) ); + vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = + PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT" ) ); + + //=== VK_QCOM_tile_memory_heap === + vkCmdBindTileMemoryQCOM = PFN_vkCmdBindTileMemoryQCOM( vkGetInstanceProcAddr( instance, "vkCmdBindTileMemoryQCOM" ) ); + + //=== VK_NV_external_compute_queue === + vkCreateExternalComputeQueueNV = PFN_vkCreateExternalComputeQueueNV( vkGetInstanceProcAddr( instance, "vkCreateExternalComputeQueueNV" ) ); + vkDestroyExternalComputeQueueNV = PFN_vkDestroyExternalComputeQueueNV( vkGetInstanceProcAddr( instance, "vkDestroyExternalComputeQueueNV" ) ); + vkGetExternalComputeQueueDataNV = PFN_vkGetExternalComputeQueueDataNV( vkGetInstanceProcAddr( instance, "vkGetExternalComputeQueueDataNV" ) ); + + //=== VK_NV_cluster_acceleration_structure === + vkGetClusterAccelerationStructureBuildSizesNV = + PFN_vkGetClusterAccelerationStructureBuildSizesNV( vkGetInstanceProcAddr( instance, "vkGetClusterAccelerationStructureBuildSizesNV" ) ); + vkCmdBuildClusterAccelerationStructureIndirectNV = + PFN_vkCmdBuildClusterAccelerationStructureIndirectNV( vkGetInstanceProcAddr( instance, "vkCmdBuildClusterAccelerationStructureIndirectNV" ) ); + + //=== VK_NV_partitioned_acceleration_structure === + vkGetPartitionedAccelerationStructuresBuildSizesNV = + PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV( vkGetInstanceProcAddr( instance, "vkGetPartitionedAccelerationStructuresBuildSizesNV" ) ); + vkCmdBuildPartitionedAccelerationStructuresNV = + PFN_vkCmdBuildPartitionedAccelerationStructuresNV( vkGetInstanceProcAddr( instance, "vkCmdBuildPartitionedAccelerationStructuresNV" ) ); + + //=== VK_EXT_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsEXT = + PFN_vkGetGeneratedCommandsMemoryRequirementsEXT( vkGetInstanceProcAddr( instance, "vkGetGeneratedCommandsMemoryRequirementsEXT" ) ); + vkCmdPreprocessGeneratedCommandsEXT = + PFN_vkCmdPreprocessGeneratedCommandsEXT( vkGetInstanceProcAddr( instance, "vkCmdPreprocessGeneratedCommandsEXT" ) ); + vkCmdExecuteGeneratedCommandsEXT = PFN_vkCmdExecuteGeneratedCommandsEXT( vkGetInstanceProcAddr( instance, "vkCmdExecuteGeneratedCommandsEXT" ) ); + vkCreateIndirectCommandsLayoutEXT = PFN_vkCreateIndirectCommandsLayoutEXT( vkGetInstanceProcAddr( instance, "vkCreateIndirectCommandsLayoutEXT" ) ); + vkDestroyIndirectCommandsLayoutEXT = PFN_vkDestroyIndirectCommandsLayoutEXT( vkGetInstanceProcAddr( instance, "vkDestroyIndirectCommandsLayoutEXT" ) ); + vkCreateIndirectExecutionSetEXT = PFN_vkCreateIndirectExecutionSetEXT( vkGetInstanceProcAddr( instance, "vkCreateIndirectExecutionSetEXT" ) ); + vkDestroyIndirectExecutionSetEXT = PFN_vkDestroyIndirectExecutionSetEXT( vkGetInstanceProcAddr( instance, "vkDestroyIndirectExecutionSetEXT" ) ); + vkUpdateIndirectExecutionSetPipelineEXT = + PFN_vkUpdateIndirectExecutionSetPipelineEXT( vkGetInstanceProcAddr( instance, "vkUpdateIndirectExecutionSetPipelineEXT" ) ); + vkUpdateIndirectExecutionSetShaderEXT = + PFN_vkUpdateIndirectExecutionSetShaderEXT( vkGetInstanceProcAddr( instance, "vkUpdateIndirectExecutionSetShaderEXT" ) ); + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + vkCreateSurfaceOHOS = PFN_vkCreateSurfaceOHOS( vkGetInstanceProcAddr( instance, "vkCreateSurfaceOHOS" ) ); +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV" ) ); + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + vkGetMemoryMetalHandleEXT = PFN_vkGetMemoryMetalHandleEXT( vkGetInstanceProcAddr( instance, "vkGetMemoryMetalHandleEXT" ) ); + vkGetMemoryMetalHandlePropertiesEXT = + PFN_vkGetMemoryMetalHandlePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetMemoryMetalHandlePropertiesEXT" ) ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + vkCmdEndRendering2EXT = PFN_vkCmdEndRendering2EXT( vkGetInstanceProcAddr( instance, "vkCmdEndRendering2EXT" ) ); + } + + void init( Device deviceCpp ) VULKAN_HPP_NOEXCEPT + { + VkDevice device = static_cast( deviceCpp ); + + //=== VK_VERSION_1_0 === + vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) ); + vkDestroyDevice = PFN_vkDestroyDevice( vkGetDeviceProcAddr( device, "vkDestroyDevice" ) ); + vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetDeviceProcAddr( device, "vkGetDeviceQueue" ) ); + vkQueueSubmit = PFN_vkQueueSubmit( vkGetDeviceProcAddr( device, "vkQueueSubmit" ) ); + vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetDeviceProcAddr( device, "vkQueueWaitIdle" ) ); + vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" ) ); + vkAllocateMemory = PFN_vkAllocateMemory( vkGetDeviceProcAddr( device, "vkAllocateMemory" ) ); + vkFreeMemory = PFN_vkFreeMemory( vkGetDeviceProcAddr( device, "vkFreeMemory" ) ); + vkMapMemory = PFN_vkMapMemory( vkGetDeviceProcAddr( device, "vkMapMemory" ) ); + vkUnmapMemory = PFN_vkUnmapMemory( vkGetDeviceProcAddr( device, "vkUnmapMemory" ) ); + vkFlushMappedMemoryRanges = PFN_vkFlushMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" ) ); + vkInvalidateMappedMemoryRanges = PFN_vkInvalidateMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" ) ); + vkGetDeviceMemoryCommitment = PFN_vkGetDeviceMemoryCommitment( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" ) ); + vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetDeviceProcAddr( device, "vkBindBufferMemory" ) ); + vkBindImageMemory = PFN_vkBindImageMemory( vkGetDeviceProcAddr( device, "vkBindImageMemory" ) ); + vkGetBufferMemoryRequirements = PFN_vkGetBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" ) ); + vkGetImageMemoryRequirements = PFN_vkGetImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" ) ); + vkGetImageSparseMemoryRequirements = PFN_vkGetImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" ) ); + vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetDeviceProcAddr( device, "vkQueueBindSparse" ) ); + vkCreateFence = PFN_vkCreateFence( vkGetDeviceProcAddr( device, "vkCreateFence" ) ); + vkDestroyFence = PFN_vkDestroyFence( vkGetDeviceProcAddr( device, "vkDestroyFence" ) ); + vkResetFences = PFN_vkResetFences( vkGetDeviceProcAddr( device, "vkResetFences" ) ); + vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetDeviceProcAddr( device, "vkGetFenceStatus" ) ); + vkWaitForFences = PFN_vkWaitForFences( vkGetDeviceProcAddr( device, "vkWaitForFences" ) ); + vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetDeviceProcAddr( device, "vkCreateSemaphore" ) ); + vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetDeviceProcAddr( device, "vkDestroySemaphore" ) ); + vkCreateEvent = PFN_vkCreateEvent( vkGetDeviceProcAddr( device, "vkCreateEvent" ) ); + vkDestroyEvent = PFN_vkDestroyEvent( vkGetDeviceProcAddr( device, "vkDestroyEvent" ) ); + vkGetEventStatus = PFN_vkGetEventStatus( vkGetDeviceProcAddr( device, "vkGetEventStatus" ) ); + vkSetEvent = PFN_vkSetEvent( vkGetDeviceProcAddr( device, "vkSetEvent" ) ); + vkResetEvent = PFN_vkResetEvent( vkGetDeviceProcAddr( device, "vkResetEvent" ) ); + vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetDeviceProcAddr( device, "vkCreateQueryPool" ) ); + vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetDeviceProcAddr( device, "vkDestroyQueryPool" ) ); + vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" ) ); + vkCreateBuffer = PFN_vkCreateBuffer( vkGetDeviceProcAddr( device, "vkCreateBuffer" ) ); + vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetDeviceProcAddr( device, "vkDestroyBuffer" ) ); + vkCreateBufferView = PFN_vkCreateBufferView( vkGetDeviceProcAddr( device, "vkCreateBufferView" ) ); + vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetDeviceProcAddr( device, "vkDestroyBufferView" ) ); + vkCreateImage = PFN_vkCreateImage( vkGetDeviceProcAddr( device, "vkCreateImage" ) ); + vkDestroyImage = PFN_vkDestroyImage( vkGetDeviceProcAddr( device, "vkDestroyImage" ) ); + vkGetImageSubresourceLayout = PFN_vkGetImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" ) ); + vkCreateImageView = PFN_vkCreateImageView( vkGetDeviceProcAddr( device, "vkCreateImageView" ) ); + vkDestroyImageView = PFN_vkDestroyImageView( vkGetDeviceProcAddr( device, "vkDestroyImageView" ) ); + vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetDeviceProcAddr( device, "vkCreateShaderModule" ) ); + vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetDeviceProcAddr( device, "vkDestroyShaderModule" ) ); + vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetDeviceProcAddr( device, "vkCreatePipelineCache" ) ); + vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" ) ); + vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" ) ); + vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetDeviceProcAddr( device, "vkMergePipelineCaches" ) ); + vkCreateGraphicsPipelines = PFN_vkCreateGraphicsPipelines( vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" ) ); + vkCreateComputePipelines = PFN_vkCreateComputePipelines( vkGetDeviceProcAddr( device, "vkCreateComputePipelines" ) ); + vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetDeviceProcAddr( device, "vkDestroyPipeline" ) ); + vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" ) ); + vkDestroyPipelineLayout = PFN_vkDestroyPipelineLayout( vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" ) ); + vkCreateSampler = PFN_vkCreateSampler( vkGetDeviceProcAddr( device, "vkCreateSampler" ) ); + vkDestroySampler = PFN_vkDestroySampler( vkGetDeviceProcAddr( device, "vkDestroySampler" ) ); + vkCreateDescriptorSetLayout = PFN_vkCreateDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" ) ); + vkDestroyDescriptorSetLayout = PFN_vkDestroyDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" ) ); + vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" ) ); + vkDestroyDescriptorPool = PFN_vkDestroyDescriptorPool( vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" ) ); + vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetDeviceProcAddr( device, "vkResetDescriptorPool" ) ); + vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" ) ); + vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" ) ); + vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" ) ); + vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetDeviceProcAddr( device, "vkCreateFramebuffer" ) ); + vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" ) ); + vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetDeviceProcAddr( device, "vkCreateRenderPass" ) ); + vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetDeviceProcAddr( device, "vkDestroyRenderPass" ) ); + vkGetRenderAreaGranularity = PFN_vkGetRenderAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" ) ); + vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetDeviceProcAddr( device, "vkCreateCommandPool" ) ); + vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetDeviceProcAddr( device, "vkDestroyCommandPool" ) ); + vkResetCommandPool = PFN_vkResetCommandPool( vkGetDeviceProcAddr( device, "vkResetCommandPool" ) ); + vkAllocateCommandBuffers = PFN_vkAllocateCommandBuffers( vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" ) ); + vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" ) ); + vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" ) ); + vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetDeviceProcAddr( device, "vkEndCommandBuffer" ) ); + vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetDeviceProcAddr( device, "vkResetCommandBuffer" ) ); + vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetDeviceProcAddr( device, "vkCmdBindPipeline" ) ); + vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetDeviceProcAddr( device, "vkCmdSetViewport" ) ); + vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetDeviceProcAddr( device, "vkCmdSetScissor" ) ); + vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" ) ); + vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" ) ); + vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" ) ); + vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" ) ); + vkCmdSetStencilCompareMask = PFN_vkCmdSetStencilCompareMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" ) ); + vkCmdSetStencilWriteMask = PFN_vkCmdSetStencilWriteMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" ) ); + vkCmdSetStencilReference = PFN_vkCmdSetStencilReference( vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" ) ); + vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" ) ); + vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" ) ); + vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" ) ); + vkCmdDraw = PFN_vkCmdDraw( vkGetDeviceProcAddr( device, "vkCmdDraw" ) ); + vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" ) ); + vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" ) ); + vkCmdDrawIndexedIndirect = PFN_vkCmdDrawIndexedIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" ) ); + vkCmdDispatch = PFN_vkCmdDispatch( vkGetDeviceProcAddr( device, "vkCmdDispatch" ) ); + vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" ) ); + vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" ) ); + vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetDeviceProcAddr( device, "vkCmdCopyImage" ) ); + vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetDeviceProcAddr( device, "vkCmdBlitImage" ) ); + vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" ) ); + vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" ) ); + vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" ) ); + vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetDeviceProcAddr( device, "vkCmdFillBuffer" ) ); + vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetDeviceProcAddr( device, "vkCmdClearColorImage" ) ); + vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" ) ); + vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetDeviceProcAddr( device, "vkCmdClearAttachments" ) ); + vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetDeviceProcAddr( device, "vkCmdResolveImage" ) ); + vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetDeviceProcAddr( device, "vkCmdSetEvent" ) ); + vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetDeviceProcAddr( device, "vkCmdResetEvent" ) ); + vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetDeviceProcAddr( device, "vkCmdWaitEvents" ) ); + vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" ) ); + vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetDeviceProcAddr( device, "vkCmdBeginQuery" ) ); + vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetDeviceProcAddr( device, "vkCmdEndQuery" ) ); + vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" ) ); + vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" ) ); + vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" ) ); + vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetDeviceProcAddr( device, "vkCmdPushConstants" ) ); + vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" ) ); + vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetDeviceProcAddr( device, "vkCmdNextSubpass" ) ); + vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" ) ); + vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" ) ); + + //=== VK_VERSION_1_1 === + vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetDeviceProcAddr( device, "vkBindBufferMemory2" ) ); + vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetDeviceProcAddr( device, "vkBindImageMemory2" ) ); + vkGetDeviceGroupPeerMemoryFeatures = PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" ) ); + vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" ) ); + vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetDeviceProcAddr( device, "vkCmdDispatchBase" ) ); + vkGetImageMemoryRequirements2 = PFN_vkGetImageMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" ) ); + vkGetBufferMemoryRequirements2 = PFN_vkGetBufferMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" ) ); + vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" ) ); + vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetDeviceProcAddr( device, "vkTrimCommandPool" ) ); + vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" ) ); + vkCreateSamplerYcbcrConversion = PFN_vkCreateSamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" ) ); + vkDestroySamplerYcbcrConversion = PFN_vkDestroySamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" ) ); + vkCreateDescriptorUpdateTemplate = PFN_vkCreateDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" ) ); + vkDestroyDescriptorUpdateTemplate = PFN_vkDestroyDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" ) ); + vkUpdateDescriptorSetWithTemplate = PFN_vkUpdateDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" ) ); + vkGetDescriptorSetLayoutSupport = PFN_vkGetDescriptorSetLayoutSupport( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" ) ); + + //=== VK_VERSION_1_2 === + vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCount" ) ); + vkCmdDrawIndexedIndirectCount = PFN_vkCmdDrawIndexedIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCount" ) ); + vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetDeviceProcAddr( device, "vkCreateRenderPass2" ) ); + vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2" ) ); + vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2" ) ); + vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2" ) ); + vkResetQueryPool = PFN_vkResetQueryPool( vkGetDeviceProcAddr( device, "vkResetQueryPool" ) ); + vkGetSemaphoreCounterValue = PFN_vkGetSemaphoreCounterValue( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValue" ) ); + vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetDeviceProcAddr( device, "vkWaitSemaphores" ) ); + vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetDeviceProcAddr( device, "vkSignalSemaphore" ) ); + vkGetBufferDeviceAddress = PFN_vkGetBufferDeviceAddress( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddress" ) ); + vkGetBufferOpaqueCaptureAddress = PFN_vkGetBufferOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddress" ) ); + vkGetDeviceMemoryOpaqueCaptureAddress = + PFN_vkGetDeviceMemoryOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); + + //=== VK_VERSION_1_3 === + vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlot" ) ); + vkDestroyPrivateDataSlot = PFN_vkDestroyPrivateDataSlot( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlot" ) ); + vkSetPrivateData = PFN_vkSetPrivateData( vkGetDeviceProcAddr( device, "vkSetPrivateData" ) ); + vkGetPrivateData = PFN_vkGetPrivateData( vkGetDeviceProcAddr( device, "vkGetPrivateData" ) ); + vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetDeviceProcAddr( device, "vkCmdSetEvent2" ) ); + vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetDeviceProcAddr( device, "vkCmdResetEvent2" ) ); + vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2" ) ); + vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2" ) ); + vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2" ) ); + vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetDeviceProcAddr( device, "vkQueueSubmit2" ) ); + vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2" ) ); + vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetDeviceProcAddr( device, "vkCmdCopyImage2" ) ); + vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2" ) ); + vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2" ) ); + vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetDeviceProcAddr( device, "vkCmdBlitImage2" ) ); + vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetDeviceProcAddr( device, "vkCmdResolveImage2" ) ); + vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetDeviceProcAddr( device, "vkCmdBeginRendering" ) ); + vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetDeviceProcAddr( device, "vkCmdEndRendering" ) ); + vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetDeviceProcAddr( device, "vkCmdSetCullMode" ) ); + vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetDeviceProcAddr( device, "vkCmdSetFrontFace" ) ); + vkCmdSetPrimitiveTopology = PFN_vkCmdSetPrimitiveTopology( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopology" ) ); + vkCmdSetViewportWithCount = PFN_vkCmdSetViewportWithCount( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCount" ) ); + vkCmdSetScissorWithCount = PFN_vkCmdSetScissorWithCount( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCount" ) ); + vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2" ) ); + vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnable" ) ); + vkCmdSetDepthWriteEnable = PFN_vkCmdSetDepthWriteEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnable" ) ); + vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOp" ) ); + vkCmdSetDepthBoundsTestEnable = PFN_vkCmdSetDepthBoundsTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnable" ) ); + vkCmdSetStencilTestEnable = PFN_vkCmdSetStencilTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnable" ) ); + vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetDeviceProcAddr( device, "vkCmdSetStencilOp" ) ); + vkCmdSetRasterizerDiscardEnable = PFN_vkCmdSetRasterizerDiscardEnable( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnable" ) ); + vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnable" ) ); + vkCmdSetPrimitiveRestartEnable = PFN_vkCmdSetPrimitiveRestartEnable( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnable" ) ); + vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirements" ) ); + vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirements" ) ); + vkGetDeviceImageSparseMemoryRequirements = + PFN_vkGetDeviceImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirements" ) ); + + //=== VK_VERSION_1_4 === + vkCmdSetLineStipple = PFN_vkCmdSetLineStipple( vkGetDeviceProcAddr( device, "vkCmdSetLineStipple" ) ); + vkMapMemory2 = PFN_vkMapMemory2( vkGetDeviceProcAddr( device, "vkMapMemory2" ) ); + vkUnmapMemory2 = PFN_vkUnmapMemory2( vkGetDeviceProcAddr( device, "vkUnmapMemory2" ) ); + vkCmdBindIndexBuffer2 = PFN_vkCmdBindIndexBuffer2( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer2" ) ); + vkGetRenderingAreaGranularity = PFN_vkGetRenderingAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderingAreaGranularity" ) ); + vkGetDeviceImageSubresourceLayout = PFN_vkGetDeviceImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetDeviceImageSubresourceLayout" ) ); + vkGetImageSubresourceLayout2 = PFN_vkGetImageSubresourceLayout2( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2" ) ); + vkCmdPushDescriptorSet = PFN_vkCmdPushDescriptorSet( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSet" ) ); + vkCmdPushDescriptorSetWithTemplate = PFN_vkCmdPushDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplate" ) ); + vkCmdSetRenderingAttachmentLocations = + PFN_vkCmdSetRenderingAttachmentLocations( vkGetDeviceProcAddr( device, "vkCmdSetRenderingAttachmentLocations" ) ); + vkCmdSetRenderingInputAttachmentIndices = + PFN_vkCmdSetRenderingInputAttachmentIndices( vkGetDeviceProcAddr( device, "vkCmdSetRenderingInputAttachmentIndices" ) ); + vkCmdBindDescriptorSets2 = PFN_vkCmdBindDescriptorSets2( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets2" ) ); + vkCmdPushConstants2 = PFN_vkCmdPushConstants2( vkGetDeviceProcAddr( device, "vkCmdPushConstants2" ) ); + vkCmdPushDescriptorSet2 = PFN_vkCmdPushDescriptorSet2( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSet2" ) ); + vkCmdPushDescriptorSetWithTemplate2 = PFN_vkCmdPushDescriptorSetWithTemplate2( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplate2" ) ); + vkCopyMemoryToImage = PFN_vkCopyMemoryToImage( vkGetDeviceProcAddr( device, "vkCopyMemoryToImage" ) ); + vkCopyImageToMemory = PFN_vkCopyImageToMemory( vkGetDeviceProcAddr( device, "vkCopyImageToMemory" ) ); + vkCopyImageToImage = PFN_vkCopyImageToImage( vkGetDeviceProcAddr( device, "vkCopyImageToImage" ) ); + vkTransitionImageLayout = PFN_vkTransitionImageLayout( vkGetDeviceProcAddr( device, "vkTransitionImageLayout" ) ); + + //=== VK_KHR_swapchain === + vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) ); + vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) ); + vkGetSwapchainImagesKHR = PFN_vkGetSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" ) ); + vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" ) ); + vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) ); + vkGetDeviceGroupPresentCapabilitiesKHR = + PFN_vkGetDeviceGroupPresentCapabilitiesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); + vkGetDeviceGroupSurfacePresentModesKHR = + PFN_vkGetDeviceGroupSurfacePresentModesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); + vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" ) ); + + //=== VK_KHR_display_swapchain === + vkCreateSharedSwapchainsKHR = PFN_vkCreateSharedSwapchainsKHR( vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" ) ); + + //=== VK_EXT_debug_marker === + vkDebugMarkerSetObjectTagEXT = PFN_vkDebugMarkerSetObjectTagEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" ) ); + vkDebugMarkerSetObjectNameEXT = PFN_vkDebugMarkerSetObjectNameEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" ) ); + vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" ) ); + vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" ) ); + vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" ) ); + + //=== VK_KHR_video_queue === + vkCreateVideoSessionKHR = PFN_vkCreateVideoSessionKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionKHR" ) ); + vkDestroyVideoSessionKHR = PFN_vkDestroyVideoSessionKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionKHR" ) ); + vkGetVideoSessionMemoryRequirementsKHR = + PFN_vkGetVideoSessionMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetVideoSessionMemoryRequirementsKHR" ) ); + vkBindVideoSessionMemoryKHR = PFN_vkBindVideoSessionMemoryKHR( vkGetDeviceProcAddr( device, "vkBindVideoSessionMemoryKHR" ) ); + vkCreateVideoSessionParametersKHR = PFN_vkCreateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionParametersKHR" ) ); + vkUpdateVideoSessionParametersKHR = PFN_vkUpdateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkUpdateVideoSessionParametersKHR" ) ); + vkDestroyVideoSessionParametersKHR = PFN_vkDestroyVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionParametersKHR" ) ); + vkCmdBeginVideoCodingKHR = PFN_vkCmdBeginVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginVideoCodingKHR" ) ); + vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdEndVideoCodingKHR" ) ); + vkCmdControlVideoCodingKHR = PFN_vkCmdControlVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdControlVideoCodingKHR" ) ); + + //=== VK_KHR_video_decode_queue === + vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdDecodeVideoKHR" ) ); + + //=== VK_EXT_transform_feedback === + vkCmdBindTransformFeedbackBuffersEXT = + PFN_vkCmdBindTransformFeedbackBuffersEXT( vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" ) ); + vkCmdBeginTransformFeedbackEXT = PFN_vkCmdBeginTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" ) ); + vkCmdEndTransformFeedbackEXT = PFN_vkCmdEndTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" ) ); + vkCmdBeginQueryIndexedEXT = PFN_vkCmdBeginQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" ) ); + vkCmdEndQueryIndexedEXT = PFN_vkCmdEndQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" ) ); + vkCmdDrawIndirectByteCountEXT = PFN_vkCmdDrawIndirectByteCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" ) ); + + //=== VK_NVX_binary_import === + vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetDeviceProcAddr( device, "vkCreateCuModuleNVX" ) ); + vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetDeviceProcAddr( device, "vkCreateCuFunctionNVX" ) ); + vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetDeviceProcAddr( device, "vkDestroyCuModuleNVX" ) ); + vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetDeviceProcAddr( device, "vkDestroyCuFunctionNVX" ) ); + vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetDeviceProcAddr( device, "vkCmdCuLaunchKernelNVX" ) ); + + //=== VK_NVX_image_view_handle === + vkGetImageViewHandleNVX = PFN_vkGetImageViewHandleNVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" ) ); + vkGetImageViewHandle64NVX = PFN_vkGetImageViewHandle64NVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandle64NVX" ) ); + vkGetImageViewAddressNVX = PFN_vkGetImageViewAddressNVX( vkGetDeviceProcAddr( device, "vkGetImageViewAddressNVX" ) ); + + //=== VK_AMD_draw_indirect_count === + vkCmdDrawIndirectCountAMD = PFN_vkCmdDrawIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; + vkCmdDrawIndexedIndirectCountAMD = PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; + + //=== VK_AMD_shader_info === + vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) ); + + //=== VK_KHR_dynamic_rendering === + vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderingKHR" ) ); + if ( !vkCmdBeginRendering ) + vkCmdBeginRendering = vkCmdBeginRenderingKHR; + vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderingKHR" ) ); + if ( !vkCmdEndRendering ) + vkCmdEndRendering = vkCmdEndRenderingKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + vkGetMemoryWin32HandleNV = PFN_vkGetMemoryWin32HandleNV( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_device_group === + vkGetDeviceGroupPeerMemoryFeaturesKHR = + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); + if ( !vkGetDeviceGroupPeerMemoryFeatures ) + vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; + vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHR" ) ); + if ( !vkCmdSetDeviceMask ) + vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; + vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHR" ) ); + if ( !vkCmdDispatchBase ) + vkCmdDispatchBase = vkCmdDispatchBaseKHR; + + //=== VK_KHR_maintenance1 === + vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" ) ); + if ( !vkTrimCommandPool ) + vkTrimCommandPool = vkTrimCommandPoolKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + vkGetMemoryWin32HandleKHR = PFN_vkGetMemoryWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" ) ); + vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" ) ); + vkGetMemoryFdPropertiesKHR = PFN_vkGetMemoryFdPropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" ) ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + vkImportSemaphoreWin32HandleKHR = PFN_vkImportSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" ) ); + vkGetSemaphoreWin32HandleKHR = PFN_vkGetSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" ) ); + vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" ) ); + + //=== VK_KHR_push_descriptor === + vkCmdPushDescriptorSetKHR = PFN_vkCmdPushDescriptorSetKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" ) ); + if ( !vkCmdPushDescriptorSet ) + vkCmdPushDescriptorSet = vkCmdPushDescriptorSetKHR; + vkCmdPushDescriptorSetWithTemplateKHR = + PFN_vkCmdPushDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); + if ( !vkCmdPushDescriptorSetWithTemplate ) + vkCmdPushDescriptorSetWithTemplate = vkCmdPushDescriptorSetWithTemplateKHR; + + //=== VK_EXT_conditional_rendering === + vkCmdBeginConditionalRenderingEXT = PFN_vkCmdBeginConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" ) ); + vkCmdEndConditionalRenderingEXT = PFN_vkCmdEndConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" ) ); + + //=== VK_KHR_descriptor_update_template === + vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" ) ); + if ( !vkCreateDescriptorUpdateTemplate ) + vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; + vkDestroyDescriptorUpdateTemplateKHR = + PFN_vkDestroyDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" ) ); + if ( !vkDestroyDescriptorUpdateTemplate ) + vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; + vkUpdateDescriptorSetWithTemplateKHR = + PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" ) ); + if ( !vkUpdateDescriptorSetWithTemplate ) + vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; + + //=== VK_NV_clip_space_w_scaling === + vkCmdSetViewportWScalingNV = PFN_vkCmdSetViewportWScalingNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" ) ); + + //=== VK_EXT_display_control === + vkDisplayPowerControlEXT = PFN_vkDisplayPowerControlEXT( vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" ) ); + vkRegisterDeviceEventEXT = PFN_vkRegisterDeviceEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" ) ); + vkRegisterDisplayEventEXT = PFN_vkRegisterDisplayEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" ) ); + vkGetSwapchainCounterEXT = PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) ); + + //=== VK_GOOGLE_display_timing === + vkGetRefreshCycleDurationGOOGLE = PFN_vkGetRefreshCycleDurationGOOGLE( vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" ) ); + vkGetPastPresentationTimingGOOGLE = PFN_vkGetPastPresentationTimingGOOGLE( vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" ) ); + + //=== VK_EXT_discard_rectangles === + vkCmdSetDiscardRectangleEXT = PFN_vkCmdSetDiscardRectangleEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" ) ); + vkCmdSetDiscardRectangleEnableEXT = PFN_vkCmdSetDiscardRectangleEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEnableEXT" ) ); + vkCmdSetDiscardRectangleModeEXT = PFN_vkCmdSetDiscardRectangleModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleModeEXT" ) ); + + //=== VK_EXT_hdr_metadata === + vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" ) ); + + //=== VK_KHR_create_renderpass2 === + vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) ); + if ( !vkCreateRenderPass2 ) + vkCreateRenderPass2 = vkCreateRenderPass2KHR; + vkCmdBeginRenderPass2KHR = PFN_vkCmdBeginRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" ) ); + if ( !vkCmdBeginRenderPass2 ) + vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; + vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" ) ); + if ( !vkCmdNextSubpass2 ) + vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; + vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" ) ); + if ( !vkCmdEndRenderPass2 ) + vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; + + //=== VK_KHR_shared_presentable_image === + vkGetSwapchainStatusKHR = PFN_vkGetSwapchainStatusKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" ) ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + vkImportFenceWin32HandleKHR = PFN_vkImportFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" ) ); + vkGetFenceWin32HandleKHR = PFN_vkGetFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) ); + vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) ); + + //=== VK_KHR_performance_query === + vkAcquireProfilingLockKHR = PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) ); + vkReleaseProfilingLockKHR = PFN_vkReleaseProfilingLockKHR( vkGetDeviceProcAddr( device, "vkReleaseProfilingLockKHR" ) ); + + //=== VK_EXT_debug_utils === + vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" ) ); + vkSetDebugUtilsObjectTagEXT = PFN_vkSetDebugUtilsObjectTagEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" ) ); + vkQueueBeginDebugUtilsLabelEXT = PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" ) ); + vkQueueEndDebugUtilsLabelEXT = PFN_vkQueueEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" ) ); + vkQueueInsertDebugUtilsLabelEXT = PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" ) ); + vkCmdBeginDebugUtilsLabelEXT = PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" ) ); + vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdEndDebugUtilsLabelEXT" ) ); + vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdInsertDebugUtilsLabelEXT" ) ); + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + vkGetAndroidHardwareBufferPropertiesANDROID = + PFN_vkGetAndroidHardwareBufferPropertiesANDROID( vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); + vkGetMemoryAndroidHardwareBufferANDROID = + PFN_vkGetMemoryAndroidHardwareBufferANDROID( vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + vkCreateExecutionGraphPipelinesAMDX = PFN_vkCreateExecutionGraphPipelinesAMDX( vkGetDeviceProcAddr( device, "vkCreateExecutionGraphPipelinesAMDX" ) ); + vkGetExecutionGraphPipelineScratchSizeAMDX = + PFN_vkGetExecutionGraphPipelineScratchSizeAMDX( vkGetDeviceProcAddr( device, "vkGetExecutionGraphPipelineScratchSizeAMDX" ) ); + vkGetExecutionGraphPipelineNodeIndexAMDX = + PFN_vkGetExecutionGraphPipelineNodeIndexAMDX( vkGetDeviceProcAddr( device, "vkGetExecutionGraphPipelineNodeIndexAMDX" ) ); + vkCmdInitializeGraphScratchMemoryAMDX = + PFN_vkCmdInitializeGraphScratchMemoryAMDX( vkGetDeviceProcAddr( device, "vkCmdInitializeGraphScratchMemoryAMDX" ) ); + vkCmdDispatchGraphAMDX = PFN_vkCmdDispatchGraphAMDX( vkGetDeviceProcAddr( device, "vkCmdDispatchGraphAMDX" ) ); + vkCmdDispatchGraphIndirectAMDX = PFN_vkCmdDispatchGraphIndirectAMDX( vkGetDeviceProcAddr( device, "vkCmdDispatchGraphIndirectAMDX" ) ); + vkCmdDispatchGraphIndirectCountAMDX = PFN_vkCmdDispatchGraphIndirectCountAMDX( vkGetDeviceProcAddr( device, "vkCmdDispatchGraphIndirectCountAMDX" ) ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + vkCmdSetSampleLocationsEXT = PFN_vkCmdSetSampleLocationsEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" ) ); + + //=== VK_KHR_get_memory_requirements2 === + vkGetImageMemoryRequirements2KHR = PFN_vkGetImageMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" ) ); + if ( !vkGetImageMemoryRequirements2 ) + vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; + vkGetBufferMemoryRequirements2KHR = PFN_vkGetBufferMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" ) ); + if ( !vkGetBufferMemoryRequirements2 ) + vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; + vkGetImageSparseMemoryRequirements2KHR = + PFN_vkGetImageSparseMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" ) ); + if ( !vkGetImageSparseMemoryRequirements2 ) + vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; + + //=== VK_KHR_acceleration_structure === + vkCreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" ) ); + vkDestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureKHR" ) ); + vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresKHR" ) ); + vkCmdBuildAccelerationStructuresIndirectKHR = + PFN_vkCmdBuildAccelerationStructuresIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); + vkBuildAccelerationStructuresKHR = PFN_vkBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkBuildAccelerationStructuresKHR" ) ); + vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" ) ); + vkCopyAccelerationStructureToMemoryKHR = + PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" ) ); + vkCopyMemoryToAccelerationStructureKHR = + PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" ) ); + vkWriteAccelerationStructuresPropertiesKHR = + PFN_vkWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" ) ); + vkCmdCopyAccelerationStructureKHR = PFN_vkCmdCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" ) ); + vkCmdCopyAccelerationStructureToMemoryKHR = + PFN_vkCmdCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); + vkCmdCopyMemoryToAccelerationStructureKHR = + PFN_vkCmdCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); + vkGetAccelerationStructureDeviceAddressKHR = + PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" ) ); + vkCmdWriteAccelerationStructuresPropertiesKHR = + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); + vkGetDeviceAccelerationStructureCompatibilityKHR = + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); + vkGetAccelerationStructureBuildSizesKHR = + PFN_vkGetAccelerationStructureBuildSizesKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureBuildSizesKHR" ) ); + + //=== VK_KHR_ray_tracing_pipeline === + vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) ); + vkCreateRayTracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" ) ); + vkGetRayTracingShaderGroupHandlesKHR = + PFN_vkGetRayTracingShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesKHR" ) ); + vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); + vkCmdTraceRaysIndirectKHR = PFN_vkCmdTraceRaysIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" ) ); + vkGetRayTracingShaderGroupStackSizeKHR = + PFN_vkGetRayTracingShaderGroupStackSizeKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); + vkCmdSetRayTracingPipelineStackSizeKHR = + PFN_vkCmdSetRayTracingPipelineStackSizeKHR( vkGetDeviceProcAddr( device, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); + + //=== VK_KHR_sampler_ycbcr_conversion === + vkCreateSamplerYcbcrConversionKHR = PFN_vkCreateSamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" ) ); + if ( !vkCreateSamplerYcbcrConversion ) + vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; + vkDestroySamplerYcbcrConversionKHR = PFN_vkDestroySamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" ) ); + if ( !vkDestroySamplerYcbcrConversion ) + vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; + + //=== VK_KHR_bind_memory2 === + vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" ) ); + if ( !vkBindBufferMemory2 ) + vkBindBufferMemory2 = vkBindBufferMemory2KHR; + vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" ) ); + if ( !vkBindImageMemory2 ) + vkBindImageMemory2 = vkBindImageMemory2KHR; + + //=== VK_EXT_image_drm_format_modifier === + vkGetImageDrmFormatModifierPropertiesEXT = + PFN_vkGetImageDrmFormatModifierPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); + + //=== VK_EXT_validation_cache === + vkCreateValidationCacheEXT = PFN_vkCreateValidationCacheEXT( vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" ) ); + vkDestroyValidationCacheEXT = PFN_vkDestroyValidationCacheEXT( vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" ) ); + vkMergeValidationCachesEXT = PFN_vkMergeValidationCachesEXT( vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" ) ); + vkGetValidationCacheDataEXT = PFN_vkGetValidationCacheDataEXT( vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" ) ); + + //=== VK_NV_shading_rate_image === + vkCmdBindShadingRateImageNV = PFN_vkCmdBindShadingRateImageNV( vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" ) ); + vkCmdSetViewportShadingRatePaletteNV = + PFN_vkCmdSetViewportShadingRatePaletteNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" ) ); + vkCmdSetCoarseSampleOrderNV = PFN_vkCmdSetCoarseSampleOrderNV( vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" ) ); + + //=== VK_NV_ray_tracing === + vkCreateAccelerationStructureNV = PFN_vkCreateAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" ) ); + vkDestroyAccelerationStructureNV = PFN_vkDestroyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" ) ); + vkGetAccelerationStructureMemoryRequirementsNV = + PFN_vkGetAccelerationStructureMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); + vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" ) ); + vkCmdBuildAccelerationStructureNV = PFN_vkCmdBuildAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" ) ); + vkCmdCopyAccelerationStructureNV = PFN_vkCmdCopyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" ) ); + vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" ) ); + vkCreateRayTracingPipelinesNV = PFN_vkCreateRayTracingPipelinesNV( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" ) ); + vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" ) ); + if ( !vkGetRayTracingShaderGroupHandlesKHR ) + vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; + vkGetAccelerationStructureHandleNV = PFN_vkGetAccelerationStructureHandleNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" ) ); + vkCmdWriteAccelerationStructuresPropertiesNV = + PFN_vkCmdWriteAccelerationStructuresPropertiesNV( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); + vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetDeviceProcAddr( device, "vkCompileDeferredNV" ) ); + + //=== VK_KHR_maintenance3 === + vkGetDescriptorSetLayoutSupportKHR = PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupportKHR" ) ); + if ( !vkGetDescriptorSetLayoutSupport ) + vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; + + //=== VK_KHR_draw_indirect_count === + vkCmdDrawIndirectCountKHR = PFN_vkCmdDrawIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; + vkCmdDrawIndexedIndirectCountKHR = PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; + + //=== VK_EXT_external_memory_host === + vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" ) ); + + //=== VK_AMD_buffer_marker === + vkCmdWriteBufferMarkerAMD = PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) ); + vkCmdWriteBufferMarker2AMD = PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) ); + + //=== VK_EXT_calibrated_timestamps === + vkGetCalibratedTimestampsEXT = PFN_vkGetCalibratedTimestampsEXT( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" ) ); + if ( !vkGetCalibratedTimestampsKHR ) + vkGetCalibratedTimestampsKHR = vkGetCalibratedTimestampsEXT; + + //=== VK_NV_mesh_shader === + vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" ) ); + vkCmdDrawMeshTasksIndirectNV = PFN_vkCmdDrawMeshTasksIndirectNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" ) ); + vkCmdDrawMeshTasksIndirectCountNV = PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" ) ); + + //=== VK_NV_scissor_exclusive === + vkCmdSetExclusiveScissorEnableNV = PFN_vkCmdSetExclusiveScissorEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorEnableNV" ) ); + vkCmdSetExclusiveScissorNV = PFN_vkCmdSetExclusiveScissorNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" ) ); + + //=== VK_NV_device_diagnostic_checkpoints === + vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" ) ); + vkGetQueueCheckpointDataNV = PFN_vkGetQueueCheckpointDataNV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" ) ); + vkGetQueueCheckpointData2NV = PFN_vkGetQueueCheckpointData2NV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointData2NV" ) ); + + //=== VK_KHR_timeline_semaphore === + vkGetSemaphoreCounterValueKHR = PFN_vkGetSemaphoreCounterValueKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValueKHR" ) ); + if ( !vkGetSemaphoreCounterValue ) + vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; + vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetDeviceProcAddr( device, "vkWaitSemaphoresKHR" ) ); + if ( !vkWaitSemaphores ) + vkWaitSemaphores = vkWaitSemaphoresKHR; + vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetDeviceProcAddr( device, "vkSignalSemaphoreKHR" ) ); + if ( !vkSignalSemaphore ) + vkSignalSemaphore = vkSignalSemaphoreKHR; + + //=== VK_INTEL_performance_query === + vkInitializePerformanceApiINTEL = PFN_vkInitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" ) ); + vkUninitializePerformanceApiINTEL = PFN_vkUninitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" ) ); + vkCmdSetPerformanceMarkerINTEL = PFN_vkCmdSetPerformanceMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" ) ); + vkCmdSetPerformanceStreamMarkerINTEL = + PFN_vkCmdSetPerformanceStreamMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); + vkCmdSetPerformanceOverrideINTEL = PFN_vkCmdSetPerformanceOverrideINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" ) ); + vkAcquirePerformanceConfigurationINTEL = + PFN_vkAcquirePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" ) ); + vkReleasePerformanceConfigurationINTEL = + PFN_vkReleasePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" ) ); + vkQueueSetPerformanceConfigurationINTEL = + PFN_vkQueueSetPerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" ) ); + vkGetPerformanceParameterINTEL = PFN_vkGetPerformanceParameterINTEL( vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" ) ); + + //=== VK_AMD_display_native_hdr === + vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" ) ); + + //=== VK_KHR_fragment_shading_rate === + vkCmdSetFragmentShadingRateKHR = PFN_vkCmdSetFragmentShadingRateKHR( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateKHR" ) ); + + //=== VK_KHR_dynamic_rendering_local_read === + vkCmdSetRenderingAttachmentLocationsKHR = + PFN_vkCmdSetRenderingAttachmentLocationsKHR( vkGetDeviceProcAddr( device, "vkCmdSetRenderingAttachmentLocationsKHR" ) ); + if ( !vkCmdSetRenderingAttachmentLocations ) + vkCmdSetRenderingAttachmentLocations = vkCmdSetRenderingAttachmentLocationsKHR; + vkCmdSetRenderingInputAttachmentIndicesKHR = + PFN_vkCmdSetRenderingInputAttachmentIndicesKHR( vkGetDeviceProcAddr( device, "vkCmdSetRenderingInputAttachmentIndicesKHR" ) ); + if ( !vkCmdSetRenderingInputAttachmentIndices ) + vkCmdSetRenderingInputAttachmentIndices = vkCmdSetRenderingInputAttachmentIndicesKHR; + + //=== VK_EXT_buffer_device_address === + vkGetBufferDeviceAddressEXT = PFN_vkGetBufferDeviceAddressEXT( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; + + //=== VK_KHR_present_wait === + vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetDeviceProcAddr( device, "vkWaitForPresentKHR" ) ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" ) ); + vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" ) ); + vkGetDeviceGroupSurfacePresentModes2EXT = + PFN_vkGetDeviceGroupSurfacePresentModes2EXT( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_buffer_device_address === + vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressKHR" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; + vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddressKHR" ) ); + if ( !vkGetBufferOpaqueCaptureAddress ) + vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; + vkGetDeviceMemoryOpaqueCaptureAddressKHR = + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); + if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) + vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; + + //=== VK_EXT_line_rasterization === + vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEXT" ) ); + if ( !vkCmdSetLineStipple ) + vkCmdSetLineStipple = vkCmdSetLineStippleEXT; + + //=== VK_EXT_host_query_reset === + vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" ) ); + if ( !vkResetQueryPool ) + vkResetQueryPool = vkResetQueryPoolEXT; + + //=== VK_EXT_extended_dynamic_state === + vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) ); + if ( !vkCmdSetCullMode ) + vkCmdSetCullMode = vkCmdSetCullModeEXT; + vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) ); + if ( !vkCmdSetFrontFace ) + vkCmdSetFrontFace = vkCmdSetFrontFaceEXT; + vkCmdSetPrimitiveTopologyEXT = PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) ); + if ( !vkCmdSetPrimitiveTopology ) + vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT; + vkCmdSetViewportWithCountEXT = PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) ); + if ( !vkCmdSetViewportWithCount ) + vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT; + vkCmdSetScissorWithCountEXT = PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) ); + if ( !vkCmdSetScissorWithCount ) + vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT; + vkCmdBindVertexBuffers2EXT = PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) ); + if ( !vkCmdBindVertexBuffers2 ) + vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT; + vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) ); + if ( !vkCmdSetDepthTestEnable ) + vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT; + vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) ); + if ( !vkCmdSetDepthWriteEnable ) + vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT; + vkCmdSetDepthCompareOpEXT = PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) ); + if ( !vkCmdSetDepthCompareOp ) + vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT; + vkCmdSetDepthBoundsTestEnableEXT = PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) ); + if ( !vkCmdSetDepthBoundsTestEnable ) + vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT; + vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) ); + if ( !vkCmdSetStencilTestEnable ) + vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; + vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) ); + if ( !vkCmdSetStencilOp ) + vkCmdSetStencilOp = vkCmdSetStencilOpEXT; + + //=== VK_KHR_deferred_host_operations === + vkCreateDeferredOperationKHR = PFN_vkCreateDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" ) ); + vkDestroyDeferredOperationKHR = PFN_vkDestroyDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" ) ); + vkGetDeferredOperationMaxConcurrencyKHR = + PFN_vkGetDeferredOperationMaxConcurrencyKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); + vkGetDeferredOperationResultKHR = PFN_vkGetDeferredOperationResultKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" ) ); + vkDeferredOperationJoinKHR = PFN_vkDeferredOperationJoinKHR( vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" ) ); + + //=== VK_KHR_pipeline_executable_properties === + vkGetPipelineExecutablePropertiesKHR = + PFN_vkGetPipelineExecutablePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutablePropertiesKHR" ) ); + vkGetPipelineExecutableStatisticsKHR = + PFN_vkGetPipelineExecutableStatisticsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableStatisticsKHR" ) ); + vkGetPipelineExecutableInternalRepresentationsKHR = + PFN_vkGetPipelineExecutableInternalRepresentationsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); + + //=== VK_EXT_host_image_copy === + vkCopyMemoryToImageEXT = PFN_vkCopyMemoryToImageEXT( vkGetDeviceProcAddr( device, "vkCopyMemoryToImageEXT" ) ); + if ( !vkCopyMemoryToImage ) + vkCopyMemoryToImage = vkCopyMemoryToImageEXT; + vkCopyImageToMemoryEXT = PFN_vkCopyImageToMemoryEXT( vkGetDeviceProcAddr( device, "vkCopyImageToMemoryEXT" ) ); + if ( !vkCopyImageToMemory ) + vkCopyImageToMemory = vkCopyImageToMemoryEXT; + vkCopyImageToImageEXT = PFN_vkCopyImageToImageEXT( vkGetDeviceProcAddr( device, "vkCopyImageToImageEXT" ) ); + if ( !vkCopyImageToImage ) + vkCopyImageToImage = vkCopyImageToImageEXT; + vkTransitionImageLayoutEXT = PFN_vkTransitionImageLayoutEXT( vkGetDeviceProcAddr( device, "vkTransitionImageLayoutEXT" ) ); + if ( !vkTransitionImageLayout ) + vkTransitionImageLayout = vkTransitionImageLayoutEXT; + vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2EXT( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2EXT" ) ); + if ( !vkGetImageSubresourceLayout2 ) + vkGetImageSubresourceLayout2 = vkGetImageSubresourceLayout2EXT; + + //=== VK_KHR_map_memory2 === + vkMapMemory2KHR = PFN_vkMapMemory2KHR( vkGetDeviceProcAddr( device, "vkMapMemory2KHR" ) ); + if ( !vkMapMemory2 ) + vkMapMemory2 = vkMapMemory2KHR; + vkUnmapMemory2KHR = PFN_vkUnmapMemory2KHR( vkGetDeviceProcAddr( device, "vkUnmapMemory2KHR" ) ); + if ( !vkUnmapMemory2 ) + vkUnmapMemory2 = vkUnmapMemory2KHR; + + //=== VK_EXT_swapchain_maintenance1 === + vkReleaseSwapchainImagesEXT = PFN_vkReleaseSwapchainImagesEXT( vkGetDeviceProcAddr( device, "vkReleaseSwapchainImagesEXT" ) ); + if ( !vkReleaseSwapchainImagesKHR ) + vkReleaseSwapchainImagesKHR = vkReleaseSwapchainImagesEXT; + + //=== VK_NV_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsNV = + PFN_vkGetGeneratedCommandsMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); + vkCmdPreprocessGeneratedCommandsNV = PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsNV" ) ); + vkCmdExecuteGeneratedCommandsNV = PFN_vkCmdExecuteGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsNV" ) ); + vkCmdBindPipelineShaderGroupNV = PFN_vkCmdBindPipelineShaderGroupNV( vkGetDeviceProcAddr( device, "vkCmdBindPipelineShaderGroupNV" ) ); + vkCreateIndirectCommandsLayoutNV = PFN_vkCreateIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNV" ) ); + vkDestroyIndirectCommandsLayoutNV = PFN_vkDestroyIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNV" ) ); + + //=== VK_EXT_depth_bias_control === + vkCmdSetDepthBias2EXT = PFN_vkCmdSetDepthBias2EXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias2EXT" ) ); + + //=== VK_EXT_private_data === + vkCreatePrivateDataSlotEXT = PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) ); + if ( !vkCreatePrivateDataSlot ) + vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT; + vkDestroyPrivateDataSlotEXT = PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) ); + if ( !vkDestroyPrivateDataSlot ) + vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT; + vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) ); + if ( !vkSetPrivateData ) + vkSetPrivateData = vkSetPrivateDataEXT; + vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) ); + if ( !vkGetPrivateData ) + vkGetPrivateData = vkGetPrivateDataEXT; + + //=== VK_KHR_video_encode_queue === + vkGetEncodedVideoSessionParametersKHR = + PFN_vkGetEncodedVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkGetEncodedVideoSessionParametersKHR" ) ); + vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdEncodeVideoKHR" ) ); + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + vkCreateCudaModuleNV = PFN_vkCreateCudaModuleNV( vkGetDeviceProcAddr( device, "vkCreateCudaModuleNV" ) ); + vkGetCudaModuleCacheNV = PFN_vkGetCudaModuleCacheNV( vkGetDeviceProcAddr( device, "vkGetCudaModuleCacheNV" ) ); + vkCreateCudaFunctionNV = PFN_vkCreateCudaFunctionNV( vkGetDeviceProcAddr( device, "vkCreateCudaFunctionNV" ) ); + vkDestroyCudaModuleNV = PFN_vkDestroyCudaModuleNV( vkGetDeviceProcAddr( device, "vkDestroyCudaModuleNV" ) ); + vkDestroyCudaFunctionNV = PFN_vkDestroyCudaFunctionNV( vkGetDeviceProcAddr( device, "vkDestroyCudaFunctionNV" ) ); + vkCmdCudaLaunchKernelNV = PFN_vkCmdCudaLaunchKernelNV( vkGetDeviceProcAddr( device, "vkCmdCudaLaunchKernelNV" ) ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + vkCmdDispatchTileQCOM = PFN_vkCmdDispatchTileQCOM( vkGetDeviceProcAddr( device, "vkCmdDispatchTileQCOM" ) ); + vkCmdBeginPerTileExecutionQCOM = PFN_vkCmdBeginPerTileExecutionQCOM( vkGetDeviceProcAddr( device, "vkCmdBeginPerTileExecutionQCOM" ) ); + vkCmdEndPerTileExecutionQCOM = PFN_vkCmdEndPerTileExecutionQCOM( vkGetDeviceProcAddr( device, "vkCmdEndPerTileExecutionQCOM" ) ); + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + vkExportMetalObjectsEXT = PFN_vkExportMetalObjectsEXT( vkGetDeviceProcAddr( device, "vkExportMetalObjectsEXT" ) ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) ); + if ( !vkCmdSetEvent2 ) + vkCmdSetEvent2 = vkCmdSetEvent2KHR; + vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) ); + if ( !vkCmdResetEvent2 ) + vkCmdResetEvent2 = vkCmdResetEvent2KHR; + vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) ); + if ( !vkCmdWaitEvents2 ) + vkCmdWaitEvents2 = vkCmdWaitEvents2KHR; + vkCmdPipelineBarrier2KHR = PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) ); + if ( !vkCmdPipelineBarrier2 ) + vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; + vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) ); + if ( !vkCmdWriteTimestamp2 ) + vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR; + vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) ); + if ( !vkQueueSubmit2 ) + vkQueueSubmit2 = vkQueueSubmit2KHR; + + //=== VK_EXT_descriptor_buffer === + vkGetDescriptorSetLayoutSizeEXT = PFN_vkGetDescriptorSetLayoutSizeEXT( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSizeEXT" ) ); + vkGetDescriptorSetLayoutBindingOffsetEXT = + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutBindingOffsetEXT" ) ); + vkGetDescriptorEXT = PFN_vkGetDescriptorEXT( vkGetDeviceProcAddr( device, "vkGetDescriptorEXT" ) ); + vkCmdBindDescriptorBuffersEXT = PFN_vkCmdBindDescriptorBuffersEXT( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorBuffersEXT" ) ); + vkCmdSetDescriptorBufferOffsetsEXT = PFN_vkCmdSetDescriptorBufferOffsetsEXT( vkGetDeviceProcAddr( device, "vkCmdSetDescriptorBufferOffsetsEXT" ) ); + vkCmdBindDescriptorBufferEmbeddedSamplersEXT = + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT" ) ); + vkGetBufferOpaqueCaptureDescriptorDataEXT = + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureDescriptorDataEXT" ) ); + vkGetImageOpaqueCaptureDescriptorDataEXT = + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetImageOpaqueCaptureDescriptorDataEXT" ) ); + vkGetImageViewOpaqueCaptureDescriptorDataEXT = + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetImageViewOpaqueCaptureDescriptorDataEXT" ) ); + vkGetSamplerOpaqueCaptureDescriptorDataEXT = + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetSamplerOpaqueCaptureDescriptorDataEXT" ) ); + vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + vkGetDeviceProcAddr( device, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT" ) ); + + //=== VK_NV_fragment_shading_rate_enums === + vkCmdSetFragmentShadingRateEnumNV = PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateEnumNV" ) ); + + //=== VK_EXT_mesh_shader === + vkCmdDrawMeshTasksEXT = PFN_vkCmdDrawMeshTasksEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksEXT" ) ); + vkCmdDrawMeshTasksIndirectEXT = PFN_vkCmdDrawMeshTasksIndirectEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectEXT" ) ); + vkCmdDrawMeshTasksIndirectCountEXT = PFN_vkCmdDrawMeshTasksIndirectCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountEXT" ) ); + + //=== VK_KHR_copy_commands2 === + vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) ); + if ( !vkCmdCopyBuffer2 ) + vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR; + vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) ); + if ( !vkCmdCopyImage2 ) + vkCmdCopyImage2 = vkCmdCopyImage2KHR; + vkCmdCopyBufferToImage2KHR = PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) ); + if ( !vkCmdCopyBufferToImage2 ) + vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR; + vkCmdCopyImageToBuffer2KHR = PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) ); + if ( !vkCmdCopyImageToBuffer2 ) + vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR; + vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) ); + if ( !vkCmdBlitImage2 ) + vkCmdBlitImage2 = vkCmdBlitImage2KHR; + vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) ); + if ( !vkCmdResolveImage2 ) + vkCmdResolveImage2 = vkCmdResolveImage2KHR; + + //=== VK_EXT_device_fault === + vkGetDeviceFaultInfoEXT = PFN_vkGetDeviceFaultInfoEXT( vkGetDeviceProcAddr( device, "vkGetDeviceFaultInfoEXT" ) ); + + //=== VK_EXT_vertex_input_dynamic_state === + vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetDeviceProcAddr( device, "vkCmdSetVertexInputEXT" ) ); + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + vkGetMemoryZirconHandleFUCHSIA = PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) ); + vkGetMemoryZirconHandlePropertiesFUCHSIA = + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + vkImportSemaphoreZirconHandleFUCHSIA = + PFN_vkImportSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); + vkGetSemaphoreZirconHandleFUCHSIA = PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + vkCreateBufferCollectionFUCHSIA = PFN_vkCreateBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkCreateBufferCollectionFUCHSIA" ) ); + vkSetBufferCollectionImageConstraintsFUCHSIA = + PFN_vkSetBufferCollectionImageConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) ); + vkSetBufferCollectionBufferConstraintsFUCHSIA = + PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) ); + vkDestroyBufferCollectionFUCHSIA = PFN_vkDestroyBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkDestroyBufferCollectionFUCHSIA" ) ); + vkGetBufferCollectionPropertiesFUCHSIA = + PFN_vkGetBufferCollectionPropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetBufferCollectionPropertiesFUCHSIA" ) ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); + vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetDeviceProcAddr( device, "vkCmdSubpassShadingHUAWEI" ) ); + + //=== VK_HUAWEI_invocation_mask === + vkCmdBindInvocationMaskHUAWEI = PFN_vkCmdBindInvocationMaskHUAWEI( vkGetDeviceProcAddr( device, "vkCmdBindInvocationMaskHUAWEI" ) ); + + //=== VK_NV_external_memory_rdma === + vkGetMemoryRemoteAddressNV = PFN_vkGetMemoryRemoteAddressNV( vkGetDeviceProcAddr( device, "vkGetMemoryRemoteAddressNV" ) ); + + //=== VK_EXT_pipeline_properties === + vkGetPipelinePropertiesEXT = PFN_vkGetPipelinePropertiesEXT( vkGetDeviceProcAddr( device, "vkGetPipelinePropertiesEXT" ) ); + + //=== VK_EXT_extended_dynamic_state2 === + vkCmdSetPatchControlPointsEXT = PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) ); + vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) ); + if ( !vkCmdSetRasterizerDiscardEnable ) + vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT; + vkCmdSetDepthBiasEnableEXT = PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) ); + if ( !vkCmdSetDepthBiasEnable ) + vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT; + vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) ); + vkCmdSetPrimitiveRestartEnableEXT = PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) ); + if ( !vkCmdSetPrimitiveRestartEnable ) + vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT; + + //=== VK_EXT_color_write_enable === + vkCmdSetColorWriteEnableEXT = PFN_vkCmdSetColorWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteEnableEXT" ) ); + + //=== VK_KHR_ray_tracing_maintenance1 === + vkCmdTraceRaysIndirect2KHR = PFN_vkCmdTraceRaysIndirect2KHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirect2KHR" ) ); + + //=== VK_EXT_multi_draw === + vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) ); + vkCmdDrawMultiIndexedEXT = PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) ); + + //=== VK_EXT_opacity_micromap === + vkCreateMicromapEXT = PFN_vkCreateMicromapEXT( vkGetDeviceProcAddr( device, "vkCreateMicromapEXT" ) ); + vkDestroyMicromapEXT = PFN_vkDestroyMicromapEXT( vkGetDeviceProcAddr( device, "vkDestroyMicromapEXT" ) ); + vkCmdBuildMicromapsEXT = PFN_vkCmdBuildMicromapsEXT( vkGetDeviceProcAddr( device, "vkCmdBuildMicromapsEXT" ) ); + vkBuildMicromapsEXT = PFN_vkBuildMicromapsEXT( vkGetDeviceProcAddr( device, "vkBuildMicromapsEXT" ) ); + vkCopyMicromapEXT = PFN_vkCopyMicromapEXT( vkGetDeviceProcAddr( device, "vkCopyMicromapEXT" ) ); + vkCopyMicromapToMemoryEXT = PFN_vkCopyMicromapToMemoryEXT( vkGetDeviceProcAddr( device, "vkCopyMicromapToMemoryEXT" ) ); + vkCopyMemoryToMicromapEXT = PFN_vkCopyMemoryToMicromapEXT( vkGetDeviceProcAddr( device, "vkCopyMemoryToMicromapEXT" ) ); + vkWriteMicromapsPropertiesEXT = PFN_vkWriteMicromapsPropertiesEXT( vkGetDeviceProcAddr( device, "vkWriteMicromapsPropertiesEXT" ) ); + vkCmdCopyMicromapEXT = PFN_vkCmdCopyMicromapEXT( vkGetDeviceProcAddr( device, "vkCmdCopyMicromapEXT" ) ); + vkCmdCopyMicromapToMemoryEXT = PFN_vkCmdCopyMicromapToMemoryEXT( vkGetDeviceProcAddr( device, "vkCmdCopyMicromapToMemoryEXT" ) ); + vkCmdCopyMemoryToMicromapEXT = PFN_vkCmdCopyMemoryToMicromapEXT( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToMicromapEXT" ) ); + vkCmdWriteMicromapsPropertiesEXT = PFN_vkCmdWriteMicromapsPropertiesEXT( vkGetDeviceProcAddr( device, "vkCmdWriteMicromapsPropertiesEXT" ) ); + vkGetDeviceMicromapCompatibilityEXT = PFN_vkGetDeviceMicromapCompatibilityEXT( vkGetDeviceProcAddr( device, "vkGetDeviceMicromapCompatibilityEXT" ) ); + vkGetMicromapBuildSizesEXT = PFN_vkGetMicromapBuildSizesEXT( vkGetDeviceProcAddr( device, "vkGetMicromapBuildSizesEXT" ) ); + + //=== VK_HUAWEI_cluster_culling_shader === + vkCmdDrawClusterHUAWEI = PFN_vkCmdDrawClusterHUAWEI( vkGetDeviceProcAddr( device, "vkCmdDrawClusterHUAWEI" ) ); + vkCmdDrawClusterIndirectHUAWEI = PFN_vkCmdDrawClusterIndirectHUAWEI( vkGetDeviceProcAddr( device, "vkCmdDrawClusterIndirectHUAWEI" ) ); + + //=== VK_EXT_pageable_device_local_memory === + vkSetDeviceMemoryPriorityEXT = PFN_vkSetDeviceMemoryPriorityEXT( vkGetDeviceProcAddr( device, "vkSetDeviceMemoryPriorityEXT" ) ); + + //=== VK_KHR_maintenance4 === + vkGetDeviceBufferMemoryRequirementsKHR = + PFN_vkGetDeviceBufferMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceBufferMemoryRequirements ) + vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR; + vkGetDeviceImageMemoryRequirementsKHR = + PFN_vkGetDeviceImageMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceImageMemoryRequirements ) + vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR; + vkGetDeviceImageSparseMemoryRequirementsKHR = + PFN_vkGetDeviceImageSparseMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceImageSparseMemoryRequirements ) + vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR; + + //=== VK_VALVE_descriptor_set_host_mapping === + vkGetDescriptorSetLayoutHostMappingInfoVALVE = + PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutHostMappingInfoVALVE" ) ); + vkGetDescriptorSetHostMappingVALVE = PFN_vkGetDescriptorSetHostMappingVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetHostMappingVALVE" ) ); + + //=== VK_NV_copy_memory_indirect === + vkCmdCopyMemoryIndirectNV = PFN_vkCmdCopyMemoryIndirectNV( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryIndirectNV" ) ); + vkCmdCopyMemoryToImageIndirectNV = PFN_vkCmdCopyMemoryToImageIndirectNV( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToImageIndirectNV" ) ); + + //=== VK_NV_memory_decompression === + vkCmdDecompressMemoryNV = PFN_vkCmdDecompressMemoryNV( vkGetDeviceProcAddr( device, "vkCmdDecompressMemoryNV" ) ); + vkCmdDecompressMemoryIndirectCountNV = + PFN_vkCmdDecompressMemoryIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDecompressMemoryIndirectCountNV" ) ); + + //=== VK_NV_device_generated_commands_compute === + vkGetPipelineIndirectMemoryRequirementsNV = + PFN_vkGetPipelineIndirectMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetPipelineIndirectMemoryRequirementsNV" ) ); + vkCmdUpdatePipelineIndirectBufferNV = PFN_vkCmdUpdatePipelineIndirectBufferNV( vkGetDeviceProcAddr( device, "vkCmdUpdatePipelineIndirectBufferNV" ) ); + vkGetPipelineIndirectDeviceAddressNV = + PFN_vkGetPipelineIndirectDeviceAddressNV( vkGetDeviceProcAddr( device, "vkGetPipelineIndirectDeviceAddressNV" ) ); + + //=== VK_EXT_extended_dynamic_state3 === + vkCmdSetDepthClampEnableEXT = PFN_vkCmdSetDepthClampEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClampEnableEXT" ) ); + vkCmdSetPolygonModeEXT = PFN_vkCmdSetPolygonModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetPolygonModeEXT" ) ); + vkCmdSetRasterizationSamplesEXT = PFN_vkCmdSetRasterizationSamplesEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizationSamplesEXT" ) ); + vkCmdSetSampleMaskEXT = PFN_vkCmdSetSampleMaskEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleMaskEXT" ) ); + vkCmdSetAlphaToCoverageEnableEXT = PFN_vkCmdSetAlphaToCoverageEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetAlphaToCoverageEnableEXT" ) ); + vkCmdSetAlphaToOneEnableEXT = PFN_vkCmdSetAlphaToOneEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetAlphaToOneEnableEXT" ) ); + vkCmdSetLogicOpEnableEXT = PFN_vkCmdSetLogicOpEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEnableEXT" ) ); + vkCmdSetColorBlendEnableEXT = PFN_vkCmdSetColorBlendEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorBlendEnableEXT" ) ); + vkCmdSetColorBlendEquationEXT = PFN_vkCmdSetColorBlendEquationEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorBlendEquationEXT" ) ); + vkCmdSetColorWriteMaskEXT = PFN_vkCmdSetColorWriteMaskEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteMaskEXT" ) ); + vkCmdSetTessellationDomainOriginEXT = PFN_vkCmdSetTessellationDomainOriginEXT( vkGetDeviceProcAddr( device, "vkCmdSetTessellationDomainOriginEXT" ) ); + vkCmdSetRasterizationStreamEXT = PFN_vkCmdSetRasterizationStreamEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizationStreamEXT" ) ); + vkCmdSetConservativeRasterizationModeEXT = + PFN_vkCmdSetConservativeRasterizationModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetConservativeRasterizationModeEXT" ) ); + vkCmdSetExtraPrimitiveOverestimationSizeEXT = + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT( vkGetDeviceProcAddr( device, "vkCmdSetExtraPrimitiveOverestimationSizeEXT" ) ); + vkCmdSetDepthClipEnableEXT = PFN_vkCmdSetDepthClipEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClipEnableEXT" ) ); + vkCmdSetSampleLocationsEnableEXT = PFN_vkCmdSetSampleLocationsEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEnableEXT" ) ); + vkCmdSetColorBlendAdvancedEXT = PFN_vkCmdSetColorBlendAdvancedEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorBlendAdvancedEXT" ) ); + vkCmdSetProvokingVertexModeEXT = PFN_vkCmdSetProvokingVertexModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetProvokingVertexModeEXT" ) ); + vkCmdSetLineRasterizationModeEXT = PFN_vkCmdSetLineRasterizationModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineRasterizationModeEXT" ) ); + vkCmdSetLineStippleEnableEXT = PFN_vkCmdSetLineStippleEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEnableEXT" ) ); + vkCmdSetDepthClipNegativeOneToOneEXT = + PFN_vkCmdSetDepthClipNegativeOneToOneEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClipNegativeOneToOneEXT" ) ); + vkCmdSetViewportWScalingEnableNV = PFN_vkCmdSetViewportWScalingEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingEnableNV" ) ); + vkCmdSetViewportSwizzleNV = PFN_vkCmdSetViewportSwizzleNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportSwizzleNV" ) ); + vkCmdSetCoverageToColorEnableNV = PFN_vkCmdSetCoverageToColorEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageToColorEnableNV" ) ); + vkCmdSetCoverageToColorLocationNV = PFN_vkCmdSetCoverageToColorLocationNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageToColorLocationNV" ) ); + vkCmdSetCoverageModulationModeNV = PFN_vkCmdSetCoverageModulationModeNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageModulationModeNV" ) ); + vkCmdSetCoverageModulationTableEnableNV = + PFN_vkCmdSetCoverageModulationTableEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageModulationTableEnableNV" ) ); + vkCmdSetCoverageModulationTableNV = PFN_vkCmdSetCoverageModulationTableNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageModulationTableNV" ) ); + vkCmdSetShadingRateImageEnableNV = PFN_vkCmdSetShadingRateImageEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetShadingRateImageEnableNV" ) ); + vkCmdSetRepresentativeFragmentTestEnableNV = + PFN_vkCmdSetRepresentativeFragmentTestEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetRepresentativeFragmentTestEnableNV" ) ); + vkCmdSetCoverageReductionModeNV = PFN_vkCmdSetCoverageReductionModeNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageReductionModeNV" ) ); + + //=== VK_ARM_tensors === + vkCreateTensorARM = PFN_vkCreateTensorARM( vkGetDeviceProcAddr( device, "vkCreateTensorARM" ) ); + vkDestroyTensorARM = PFN_vkDestroyTensorARM( vkGetDeviceProcAddr( device, "vkDestroyTensorARM" ) ); + vkCreateTensorViewARM = PFN_vkCreateTensorViewARM( vkGetDeviceProcAddr( device, "vkCreateTensorViewARM" ) ); + vkDestroyTensorViewARM = PFN_vkDestroyTensorViewARM( vkGetDeviceProcAddr( device, "vkDestroyTensorViewARM" ) ); + vkGetTensorMemoryRequirementsARM = PFN_vkGetTensorMemoryRequirementsARM( vkGetDeviceProcAddr( device, "vkGetTensorMemoryRequirementsARM" ) ); + vkBindTensorMemoryARM = PFN_vkBindTensorMemoryARM( vkGetDeviceProcAddr( device, "vkBindTensorMemoryARM" ) ); + vkGetDeviceTensorMemoryRequirementsARM = + PFN_vkGetDeviceTensorMemoryRequirementsARM( vkGetDeviceProcAddr( device, "vkGetDeviceTensorMemoryRequirementsARM" ) ); + vkCmdCopyTensorARM = PFN_vkCmdCopyTensorARM( vkGetDeviceProcAddr( device, "vkCmdCopyTensorARM" ) ); + vkGetTensorOpaqueCaptureDescriptorDataARM = + PFN_vkGetTensorOpaqueCaptureDescriptorDataARM( vkGetDeviceProcAddr( device, "vkGetTensorOpaqueCaptureDescriptorDataARM" ) ); + vkGetTensorViewOpaqueCaptureDescriptorDataARM = + PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM( vkGetDeviceProcAddr( device, "vkGetTensorViewOpaqueCaptureDescriptorDataARM" ) ); + + //=== VK_EXT_shader_module_identifier === + vkGetShaderModuleIdentifierEXT = PFN_vkGetShaderModuleIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleIdentifierEXT" ) ); + vkGetShaderModuleCreateInfoIdentifierEXT = + PFN_vkGetShaderModuleCreateInfoIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleCreateInfoIdentifierEXT" ) ); + + //=== VK_NV_optical_flow === + vkCreateOpticalFlowSessionNV = PFN_vkCreateOpticalFlowSessionNV( vkGetDeviceProcAddr( device, "vkCreateOpticalFlowSessionNV" ) ); + vkDestroyOpticalFlowSessionNV = PFN_vkDestroyOpticalFlowSessionNV( vkGetDeviceProcAddr( device, "vkDestroyOpticalFlowSessionNV" ) ); + vkBindOpticalFlowSessionImageNV = PFN_vkBindOpticalFlowSessionImageNV( vkGetDeviceProcAddr( device, "vkBindOpticalFlowSessionImageNV" ) ); + vkCmdOpticalFlowExecuteNV = PFN_vkCmdOpticalFlowExecuteNV( vkGetDeviceProcAddr( device, "vkCmdOpticalFlowExecuteNV" ) ); + + //=== VK_KHR_maintenance5 === + vkCmdBindIndexBuffer2KHR = PFN_vkCmdBindIndexBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer2KHR" ) ); + if ( !vkCmdBindIndexBuffer2 ) + vkCmdBindIndexBuffer2 = vkCmdBindIndexBuffer2KHR; + vkGetRenderingAreaGranularityKHR = PFN_vkGetRenderingAreaGranularityKHR( vkGetDeviceProcAddr( device, "vkGetRenderingAreaGranularityKHR" ) ); + if ( !vkGetRenderingAreaGranularity ) + vkGetRenderingAreaGranularity = vkGetRenderingAreaGranularityKHR; + vkGetDeviceImageSubresourceLayoutKHR = + PFN_vkGetDeviceImageSubresourceLayoutKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageSubresourceLayoutKHR" ) ); + if ( !vkGetDeviceImageSubresourceLayout ) + vkGetDeviceImageSubresourceLayout = vkGetDeviceImageSubresourceLayoutKHR; + vkGetImageSubresourceLayout2KHR = PFN_vkGetImageSubresourceLayout2KHR( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2KHR" ) ); + if ( !vkGetImageSubresourceLayout2 ) + vkGetImageSubresourceLayout2 = vkGetImageSubresourceLayout2KHR; + + //=== VK_AMD_anti_lag === + vkAntiLagUpdateAMD = PFN_vkAntiLagUpdateAMD( vkGetDeviceProcAddr( device, "vkAntiLagUpdateAMD" ) ); + + //=== VK_KHR_present_wait2 === + vkWaitForPresent2KHR = PFN_vkWaitForPresent2KHR( vkGetDeviceProcAddr( device, "vkWaitForPresent2KHR" ) ); + + //=== VK_EXT_shader_object === + vkCreateShadersEXT = PFN_vkCreateShadersEXT( vkGetDeviceProcAddr( device, "vkCreateShadersEXT" ) ); + vkDestroyShaderEXT = PFN_vkDestroyShaderEXT( vkGetDeviceProcAddr( device, "vkDestroyShaderEXT" ) ); + vkGetShaderBinaryDataEXT = PFN_vkGetShaderBinaryDataEXT( vkGetDeviceProcAddr( device, "vkGetShaderBinaryDataEXT" ) ); + vkCmdBindShadersEXT = PFN_vkCmdBindShadersEXT( vkGetDeviceProcAddr( device, "vkCmdBindShadersEXT" ) ); + vkCmdSetDepthClampRangeEXT = PFN_vkCmdSetDepthClampRangeEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClampRangeEXT" ) ); + + //=== VK_KHR_pipeline_binary === + vkCreatePipelineBinariesKHR = PFN_vkCreatePipelineBinariesKHR( vkGetDeviceProcAddr( device, "vkCreatePipelineBinariesKHR" ) ); + vkDestroyPipelineBinaryKHR = PFN_vkDestroyPipelineBinaryKHR( vkGetDeviceProcAddr( device, "vkDestroyPipelineBinaryKHR" ) ); + vkGetPipelineKeyKHR = PFN_vkGetPipelineKeyKHR( vkGetDeviceProcAddr( device, "vkGetPipelineKeyKHR" ) ); + vkGetPipelineBinaryDataKHR = PFN_vkGetPipelineBinaryDataKHR( vkGetDeviceProcAddr( device, "vkGetPipelineBinaryDataKHR" ) ); + vkReleaseCapturedPipelineDataKHR = PFN_vkReleaseCapturedPipelineDataKHR( vkGetDeviceProcAddr( device, "vkReleaseCapturedPipelineDataKHR" ) ); + + //=== VK_QCOM_tile_properties === + vkGetFramebufferTilePropertiesQCOM = PFN_vkGetFramebufferTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetFramebufferTilePropertiesQCOM" ) ); + vkGetDynamicRenderingTilePropertiesQCOM = + PFN_vkGetDynamicRenderingTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetDynamicRenderingTilePropertiesQCOM" ) ); + + //=== VK_KHR_swapchain_maintenance1 === + vkReleaseSwapchainImagesKHR = PFN_vkReleaseSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkReleaseSwapchainImagesKHR" ) ); + + //=== VK_NV_cooperative_vector === + vkConvertCooperativeVectorMatrixNV = PFN_vkConvertCooperativeVectorMatrixNV( vkGetDeviceProcAddr( device, "vkConvertCooperativeVectorMatrixNV" ) ); + vkCmdConvertCooperativeVectorMatrixNV = + PFN_vkCmdConvertCooperativeVectorMatrixNV( vkGetDeviceProcAddr( device, "vkCmdConvertCooperativeVectorMatrixNV" ) ); + + //=== VK_NV_low_latency2 === + vkSetLatencySleepModeNV = PFN_vkSetLatencySleepModeNV( vkGetDeviceProcAddr( device, "vkSetLatencySleepModeNV" ) ); + vkLatencySleepNV = PFN_vkLatencySleepNV( vkGetDeviceProcAddr( device, "vkLatencySleepNV" ) ); + vkSetLatencyMarkerNV = PFN_vkSetLatencyMarkerNV( vkGetDeviceProcAddr( device, "vkSetLatencyMarkerNV" ) ); + vkGetLatencyTimingsNV = PFN_vkGetLatencyTimingsNV( vkGetDeviceProcAddr( device, "vkGetLatencyTimingsNV" ) ); + vkQueueNotifyOutOfBandNV = PFN_vkQueueNotifyOutOfBandNV( vkGetDeviceProcAddr( device, "vkQueueNotifyOutOfBandNV" ) ); + + //=== VK_ARM_data_graph === + vkCreateDataGraphPipelinesARM = PFN_vkCreateDataGraphPipelinesARM( vkGetDeviceProcAddr( device, "vkCreateDataGraphPipelinesARM" ) ); + vkCreateDataGraphPipelineSessionARM = PFN_vkCreateDataGraphPipelineSessionARM( vkGetDeviceProcAddr( device, "vkCreateDataGraphPipelineSessionARM" ) ); + vkGetDataGraphPipelineSessionBindPointRequirementsARM = + PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelineSessionBindPointRequirementsARM" ) ); + vkGetDataGraphPipelineSessionMemoryRequirementsARM = + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelineSessionMemoryRequirementsARM" ) ); + vkBindDataGraphPipelineSessionMemoryARM = + PFN_vkBindDataGraphPipelineSessionMemoryARM( vkGetDeviceProcAddr( device, "vkBindDataGraphPipelineSessionMemoryARM" ) ); + vkDestroyDataGraphPipelineSessionARM = + PFN_vkDestroyDataGraphPipelineSessionARM( vkGetDeviceProcAddr( device, "vkDestroyDataGraphPipelineSessionARM" ) ); + vkCmdDispatchDataGraphARM = PFN_vkCmdDispatchDataGraphARM( vkGetDeviceProcAddr( device, "vkCmdDispatchDataGraphARM" ) ); + vkGetDataGraphPipelineAvailablePropertiesARM = + PFN_vkGetDataGraphPipelineAvailablePropertiesARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelineAvailablePropertiesARM" ) ); + vkGetDataGraphPipelinePropertiesARM = PFN_vkGetDataGraphPipelinePropertiesARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelinePropertiesARM" ) ); + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + vkCmdSetAttachmentFeedbackLoopEnableEXT = + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetAttachmentFeedbackLoopEnableEXT" ) ); + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + vkGetScreenBufferPropertiesQNX = PFN_vkGetScreenBufferPropertiesQNX( vkGetDeviceProcAddr( device, "vkGetScreenBufferPropertiesQNX" ) ); +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + vkCmdSetLineStippleKHR = PFN_vkCmdSetLineStippleKHR( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleKHR" ) ); + if ( !vkCmdSetLineStipple ) + vkCmdSetLineStipple = vkCmdSetLineStippleKHR; + + //=== VK_KHR_calibrated_timestamps === + vkGetCalibratedTimestampsKHR = PFN_vkGetCalibratedTimestampsKHR( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsKHR" ) ); + + //=== VK_KHR_maintenance6 === + vkCmdBindDescriptorSets2KHR = PFN_vkCmdBindDescriptorSets2KHR( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets2KHR" ) ); + if ( !vkCmdBindDescriptorSets2 ) + vkCmdBindDescriptorSets2 = vkCmdBindDescriptorSets2KHR; + vkCmdPushConstants2KHR = PFN_vkCmdPushConstants2KHR( vkGetDeviceProcAddr( device, "vkCmdPushConstants2KHR" ) ); + if ( !vkCmdPushConstants2 ) + vkCmdPushConstants2 = vkCmdPushConstants2KHR; + vkCmdPushDescriptorSet2KHR = PFN_vkCmdPushDescriptorSet2KHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSet2KHR" ) ); + if ( !vkCmdPushDescriptorSet2 ) + vkCmdPushDescriptorSet2 = vkCmdPushDescriptorSet2KHR; + vkCmdPushDescriptorSetWithTemplate2KHR = + PFN_vkCmdPushDescriptorSetWithTemplate2KHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplate2KHR" ) ); + if ( !vkCmdPushDescriptorSetWithTemplate2 ) + vkCmdPushDescriptorSetWithTemplate2 = vkCmdPushDescriptorSetWithTemplate2KHR; + vkCmdSetDescriptorBufferOffsets2EXT = PFN_vkCmdSetDescriptorBufferOffsets2EXT( vkGetDeviceProcAddr( device, "vkCmdSetDescriptorBufferOffsets2EXT" ) ); + vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = + PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT" ) ); + + //=== VK_QCOM_tile_memory_heap === + vkCmdBindTileMemoryQCOM = PFN_vkCmdBindTileMemoryQCOM( vkGetDeviceProcAddr( device, "vkCmdBindTileMemoryQCOM" ) ); + + //=== VK_NV_external_compute_queue === + vkCreateExternalComputeQueueNV = PFN_vkCreateExternalComputeQueueNV( vkGetDeviceProcAddr( device, "vkCreateExternalComputeQueueNV" ) ); + vkDestroyExternalComputeQueueNV = PFN_vkDestroyExternalComputeQueueNV( vkGetDeviceProcAddr( device, "vkDestroyExternalComputeQueueNV" ) ); + vkGetExternalComputeQueueDataNV = PFN_vkGetExternalComputeQueueDataNV( vkGetDeviceProcAddr( device, "vkGetExternalComputeQueueDataNV" ) ); + + //=== VK_NV_cluster_acceleration_structure === + vkGetClusterAccelerationStructureBuildSizesNV = + PFN_vkGetClusterAccelerationStructureBuildSizesNV( vkGetDeviceProcAddr( device, "vkGetClusterAccelerationStructureBuildSizesNV" ) ); + vkCmdBuildClusterAccelerationStructureIndirectNV = + PFN_vkCmdBuildClusterAccelerationStructureIndirectNV( vkGetDeviceProcAddr( device, "vkCmdBuildClusterAccelerationStructureIndirectNV" ) ); + + //=== VK_NV_partitioned_acceleration_structure === + vkGetPartitionedAccelerationStructuresBuildSizesNV = + PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV( vkGetDeviceProcAddr( device, "vkGetPartitionedAccelerationStructuresBuildSizesNV" ) ); + vkCmdBuildPartitionedAccelerationStructuresNV = + PFN_vkCmdBuildPartitionedAccelerationStructuresNV( vkGetDeviceProcAddr( device, "vkCmdBuildPartitionedAccelerationStructuresNV" ) ); + + //=== VK_EXT_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsEXT = + PFN_vkGetGeneratedCommandsMemoryRequirementsEXT( vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsEXT" ) ); + vkCmdPreprocessGeneratedCommandsEXT = PFN_vkCmdPreprocessGeneratedCommandsEXT( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsEXT" ) ); + vkCmdExecuteGeneratedCommandsEXT = PFN_vkCmdExecuteGeneratedCommandsEXT( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsEXT" ) ); + vkCreateIndirectCommandsLayoutEXT = PFN_vkCreateIndirectCommandsLayoutEXT( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutEXT" ) ); + vkDestroyIndirectCommandsLayoutEXT = PFN_vkDestroyIndirectCommandsLayoutEXT( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutEXT" ) ); + vkCreateIndirectExecutionSetEXT = PFN_vkCreateIndirectExecutionSetEXT( vkGetDeviceProcAddr( device, "vkCreateIndirectExecutionSetEXT" ) ); + vkDestroyIndirectExecutionSetEXT = PFN_vkDestroyIndirectExecutionSetEXT( vkGetDeviceProcAddr( device, "vkDestroyIndirectExecutionSetEXT" ) ); + vkUpdateIndirectExecutionSetPipelineEXT = + PFN_vkUpdateIndirectExecutionSetPipelineEXT( vkGetDeviceProcAddr( device, "vkUpdateIndirectExecutionSetPipelineEXT" ) ); + vkUpdateIndirectExecutionSetShaderEXT = + PFN_vkUpdateIndirectExecutionSetShaderEXT( vkGetDeviceProcAddr( device, "vkUpdateIndirectExecutionSetShaderEXT" ) ); + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + vkGetMemoryMetalHandleEXT = PFN_vkGetMemoryMetalHandleEXT( vkGetDeviceProcAddr( device, "vkGetMemoryMetalHandleEXT" ) ); + vkGetMemoryMetalHandlePropertiesEXT = PFN_vkGetMemoryMetalHandlePropertiesEXT( vkGetDeviceProcAddr( device, "vkGetMemoryMetalHandlePropertiesEXT" ) ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + vkCmdEndRendering2EXT = PFN_vkCmdEndRendering2EXT( vkGetDeviceProcAddr( device, "vkCmdEndRendering2EXT" ) ); + } + + template + void init( Instance const & instance, Device const & device, DynamicLoader const & dl ) VULKAN_HPP_NOEXCEPT + { + PFN_vkGetInstanceProcAddr getInstanceProcAddr = dl.template getProcAddress( "vkGetInstanceProcAddr" ); + PFN_vkGetDeviceProcAddr getDeviceProcAddr = dl.template getProcAddress( "vkGetDeviceProcAddr" ); + init( static_cast( instance ), getInstanceProcAddr, static_cast( device ), device ? getDeviceProcAddr : nullptr ); + } + + template + void init( Instance const & instance, Device const & device ) VULKAN_HPP_NOEXCEPT + { + static DynamicLoader dl; + init( instance, device, dl ); + } + }; + } // namespace detail +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_android.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_android.h new file mode 100644 index 0000000000..9b1e493b40 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_android.h @@ -0,0 +1,159 @@ +#ifndef VULKAN_ANDROID_H_ +#define VULKAN_ANDROID_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_KHR_android_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_android_surface 1 +struct ANativeWindow; +#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 +#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface" +typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; +typedef struct VkAndroidSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkAndroidSurfaceCreateFlagsKHR flags; + struct ANativeWindow* window; +} VkAndroidSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( + VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_ANDROID_external_memory_android_hardware_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_ANDROID_external_memory_android_hardware_buffer 1 +struct AHardwareBuffer; +#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 5 +#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer" +typedef struct VkAndroidHardwareBufferUsageANDROID { + VkStructureType sType; + void* pNext; + uint64_t androidHardwareBufferUsage; +} VkAndroidHardwareBufferUsageANDROID; + +typedef struct VkAndroidHardwareBufferPropertiesANDROID { + VkStructureType sType; + void* pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkAndroidHardwareBufferPropertiesANDROID; + +typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkAndroidHardwareBufferFormatPropertiesANDROID; + +typedef struct VkImportAndroidHardwareBufferInfoANDROID { + VkStructureType sType; + const void* pNext; + struct AHardwareBuffer* buffer; +} VkImportAndroidHardwareBufferInfoANDROID; + +typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkMemoryGetAndroidHardwareBufferInfoANDROID; + +typedef struct VkExternalFormatANDROID { + VkStructureType sType; + void* pNext; + uint64_t externalFormat; +} VkExternalFormatANDROID; + +typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + VkFormatFeatureFlags2 formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkAndroidHardwareBufferFormatProperties2ANDROID; + +typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( + VkDevice device, + const struct AHardwareBuffer* buffer, + VkAndroidHardwareBufferPropertiesANDROID* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( + VkDevice device, + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, + struct AHardwareBuffer** pBuffer); +#endif +#endif + + +// VK_ANDROID_external_format_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_ANDROID_external_format_resolve 1 +#define VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION 1 +#define VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME "VK_ANDROID_external_format_resolve" +typedef struct VkPhysicalDeviceExternalFormatResolveFeaturesANDROID { + VkStructureType sType; + void* pNext; + VkBool32 externalFormatResolve; +} VkPhysicalDeviceExternalFormatResolveFeaturesANDROID; + +typedef struct VkPhysicalDeviceExternalFormatResolvePropertiesANDROID { + VkStructureType sType; + void* pNext; + VkBool32 nullColorAttachmentWithExternalFormatResolve; + VkChromaLocation externalFormatResolveChromaOffsetX; + VkChromaLocation externalFormatResolveChromaOffsetY; +} VkPhysicalDeviceExternalFormatResolvePropertiesANDROID; + +typedef struct VkAndroidHardwareBufferFormatResolvePropertiesANDROID { + VkStructureType sType; + void* pNext; + VkFormat colorAttachmentFormat; +} VkAndroidHardwareBufferFormatResolvePropertiesANDROID; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_beta.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_beta.h new file mode 100644 index 0000000000..ed6fd949f1 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_beta.h @@ -0,0 +1,344 @@ +#ifndef VULKAN_BETA_H_ +#define VULKAN_BETA_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_KHR_portability_subset is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_portability_subset 1 +#define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1 +#define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset" +typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 constantAlphaColorBlendFactors; + VkBool32 events; + VkBool32 imageViewFormatReinterpretation; + VkBool32 imageViewFormatSwizzle; + VkBool32 imageView2DOn3DImage; + VkBool32 multisampleArrayImage; + VkBool32 mutableComparisonSamplers; + VkBool32 pointPolygons; + VkBool32 samplerMipLodBias; + VkBool32 separateStencilMaskRef; + VkBool32 shaderSampleRateInterpolationFunctions; + VkBool32 tessellationIsolines; + VkBool32 tessellationPointMode; + VkBool32 triangleFans; + VkBool32 vertexAttributeAccessBeyondStride; +} VkPhysicalDevicePortabilitySubsetFeaturesKHR; + +typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t minVertexInputBindingStrideAlignment; +} VkPhysicalDevicePortabilitySubsetPropertiesKHR; + + + +// VK_AMDX_shader_enqueue is a preprocessor guard. Do not pass it to API calls. +#define VK_AMDX_shader_enqueue 1 +#define VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION 2 +#define VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME "VK_AMDX_shader_enqueue" +#define VK_SHADER_INDEX_UNUSED_AMDX (~0U) +typedef struct VkPhysicalDeviceShaderEnqueueFeaturesAMDX { + VkStructureType sType; + void* pNext; + VkBool32 shaderEnqueue; + VkBool32 shaderMeshEnqueue; +} VkPhysicalDeviceShaderEnqueueFeaturesAMDX; + +typedef struct VkPhysicalDeviceShaderEnqueuePropertiesAMDX { + VkStructureType sType; + void* pNext; + uint32_t maxExecutionGraphDepth; + uint32_t maxExecutionGraphShaderOutputNodes; + uint32_t maxExecutionGraphShaderPayloadSize; + uint32_t maxExecutionGraphShaderPayloadCount; + uint32_t executionGraphDispatchAddressAlignment; + uint32_t maxExecutionGraphWorkgroupCount[3]; + uint32_t maxExecutionGraphWorkgroups; +} VkPhysicalDeviceShaderEnqueuePropertiesAMDX; + +typedef struct VkExecutionGraphPipelineScratchSizeAMDX { + VkStructureType sType; + void* pNext; + VkDeviceSize minSize; + VkDeviceSize maxSize; + VkDeviceSize sizeGranularity; +} VkExecutionGraphPipelineScratchSizeAMDX; + +typedef struct VkExecutionGraphPipelineCreateInfoAMDX { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkExecutionGraphPipelineCreateInfoAMDX; + +typedef union VkDeviceOrHostAddressConstAMDX { + VkDeviceAddress deviceAddress; + const void* hostAddress; +} VkDeviceOrHostAddressConstAMDX; + +typedef struct VkDispatchGraphInfoAMDX { + uint32_t nodeIndex; + uint32_t payloadCount; + VkDeviceOrHostAddressConstAMDX payloads; + uint64_t payloadStride; +} VkDispatchGraphInfoAMDX; + +typedef struct VkDispatchGraphCountInfoAMDX { + uint32_t count; + VkDeviceOrHostAddressConstAMDX infos; + uint64_t stride; +} VkDispatchGraphCountInfoAMDX; + +typedef struct VkPipelineShaderStageNodeCreateInfoAMDX { + VkStructureType sType; + const void* pNext; + const char* pName; + uint32_t index; +} VkPipelineShaderStageNodeCreateInfoAMDX; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateExecutionGraphPipelinesAMDX)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)(VkDevice device, VkPipeline executionGraph, VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)(VkDevice device, VkPipeline executionGraph, const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo, uint32_t* pNodeIndex); +typedef void (VKAPI_PTR *PFN_vkCmdInitializeGraphScratchMemoryAMDX)(VkCommandBuffer commandBuffer, VkPipeline executionGraph, VkDeviceAddress scratch, VkDeviceSize scratchSize); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, const VkDispatchGraphCountInfoAMDX* pCountInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, const VkDispatchGraphCountInfoAMDX* pCountInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchGraphIndirectCountAMDX)(VkCommandBuffer commandBuffer, VkDeviceAddress scratch, VkDeviceSize scratchSize, VkDeviceAddress countInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateExecutionGraphPipelinesAMDX( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineScratchSizeAMDX( + VkDevice device, + VkPipeline executionGraph, + VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetExecutionGraphPipelineNodeIndexAMDX( + VkDevice device, + VkPipeline executionGraph, + const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo, + uint32_t* pNodeIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdInitializeGraphScratchMemoryAMDX( + VkCommandBuffer commandBuffer, + VkPipeline executionGraph, + VkDeviceAddress scratch, + VkDeviceSize scratchSize); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX* pCountInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX* pCountInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + VkDeviceAddress countInfo); +#endif +#endif + + +// VK_NV_cuda_kernel_launch is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cuda_kernel_launch 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) +#define VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION 2 +#define VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME "VK_NV_cuda_kernel_launch" +typedef struct VkCudaModuleCreateInfoNV { + VkStructureType sType; + const void* pNext; + size_t dataSize; + const void* pData; +} VkCudaModuleCreateInfoNV; + +typedef struct VkCudaFunctionCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkCudaModuleNV module; + const char* pName; +} VkCudaFunctionCreateInfoNV; + +typedef struct VkCudaLaunchInfoNV { + VkStructureType sType; + const void* pNext; + VkCudaFunctionNV function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void* const * pParams; + size_t extraCount; + const void* const * pExtras; +} VkCudaLaunchInfoNV; + +typedef struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cudaKernelLaunchFeatures; +} VkPhysicalDeviceCudaKernelLaunchFeaturesNV; + +typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t computeCapabilityMinor; + uint32_t computeCapabilityMajor; +} VkPhysicalDeviceCudaKernelLaunchPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaModuleNV)(VkDevice device, const VkCudaModuleCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaModuleNV* pModule); +typedef VkResult (VKAPI_PTR *PFN_vkGetCudaModuleCacheNV)(VkDevice device, VkCudaModuleNV module, size_t* pCacheSize, void* pCacheData); +typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaFunctionNV)(VkDevice device, const VkCudaFunctionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaFunctionNV* pFunction); +typedef void (VKAPI_PTR *PFN_vkDestroyCudaModuleNV)(VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDestroyCudaFunctionNV)(VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdCudaLaunchKernelNV)(VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV* pLaunchInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaModuleNV( + VkDevice device, + const VkCudaModuleCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaModuleNV* pModule); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetCudaModuleCacheNV( + VkDevice device, + VkCudaModuleNV module, + size_t* pCacheSize, + void* pCacheData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaFunctionNV( + VkDevice device, + const VkCudaFunctionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaFunctionNV* pFunction); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCudaModuleNV( + VkDevice device, + VkCudaModuleNV module, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCudaFunctionNV( + VkDevice device, + VkCudaFunctionNV function, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCudaLaunchKernelNV( + VkCommandBuffer commandBuffer, + const VkCudaLaunchInfoNV* pLaunchInfo); +#endif +#endif + + +// VK_NV_displacement_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_displacement_micromap 1 +#define VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION 2 +#define VK_NV_DISPLACEMENT_MICROMAP_EXTENSION_NAME "VK_NV_displacement_micromap" + +typedef enum VkDisplacementMicromapFormatNV { + VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV = 1, + VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV = 2, + VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV = 3, + VK_DISPLACEMENT_MICROMAP_FORMAT_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplacementMicromapFormatNV; +typedef struct VkPhysicalDeviceDisplacementMicromapFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 displacementMicromap; +} VkPhysicalDeviceDisplacementMicromapFeaturesNV; + +typedef struct VkPhysicalDeviceDisplacementMicromapPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxDisplacementMicromapSubdivisionLevel; +} VkPhysicalDeviceDisplacementMicromapPropertiesNV; + +typedef struct VkAccelerationStructureTrianglesDisplacementMicromapNV { + VkStructureType sType; + void* pNext; + VkFormat displacementBiasAndScaleFormat; + VkFormat displacementVectorFormat; + VkDeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer; + VkDeviceSize displacementBiasAndScaleStride; + VkDeviceOrHostAddressConstKHR displacementVectorBuffer; + VkDeviceSize displacementVectorStride; + VkDeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags; + VkDeviceSize displacedMicromapPrimitiveFlagsStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexBuffer; + VkDeviceSize indexStride; + uint32_t baseTriangle; + uint32_t usageCountsCount; + const VkMicromapUsageEXT* pUsageCounts; + const VkMicromapUsageEXT* const* ppUsageCounts; + VkMicromapEXT micromap; +} VkAccelerationStructureTrianglesDisplacementMicromapNV; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_core.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_core.h new file mode 100644 index 0000000000..b79b76f754 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_core.h @@ -0,0 +1,24051 @@ +#ifndef VULKAN_CORE_H_ +#define VULKAN_CORE_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_VERSION_1_0 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_0 1 +#include "vk_platform.h" + +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + + +#ifndef VK_USE_64_BIT_PTR_DEFINES + #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64) + #define VK_USE_64_BIT_PTR_DEFINES 1 + #else + #define VK_USE_64_BIT_PTR_DEFINES 0 + #endif +#endif + + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) + #define VK_NULL_HANDLE nullptr + #else + #define VK_NULL_HANDLE ((void*)0) + #endif + #else + #define VK_NULL_HANDLE 0ULL + #endif +#endif +#ifndef VK_NULL_HANDLE + #define VK_NULL_HANDLE 0 +#endif + + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #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_API_VERSION(variant, major, minor, patch) \ + ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + + +//#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 + +// Vulkan 1.0 version number +#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 + +// Version of this file +#define VK_HEADER_VERSION 321 + +// Complete version of this file +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) + + +#define VK_MAKE_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + + +#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) + + +#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) + + +#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) + +#define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) +#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU) +#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) +#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) +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 0U +#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 1U +#define VK_WHOLE_SIZE (~0ULL) +#define VK_MAX_MEMORY_TYPES 32U +#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256U +#define VK_UUID_SIZE 16U +#define VK_MAX_EXTENSION_NAME_SIZE 256U +#define VK_MAX_DESCRIPTION_SIZE 256U +#define VK_MAX_MEMORY_HEAPS 16U + +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_PIPELINE_COMPILE_REQUIRED = 1000297000, + VK_ERROR_NOT_PERMITTED = -1000174001, + 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_VALIDATION_FAILED_EXT = -1000011001, + VK_ERROR_INVALID_SHADER_NV = -1000012000, + VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR = -1000023000, + VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR = -1000023001, + VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR = -1000023002, + VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR = -1000023003, + VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000023004, + VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000023005, + VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000, + VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000, + VK_THREAD_IDLE_KHR = 1000268000, + VK_THREAD_DONE_KHR = 1000268001, + VK_OPERATION_DEFERRED_KHR = 1000268002, + VK_OPERATION_NOT_DEFERRED_KHR = 1000268003, + VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR = -1000299000, + VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000, + VK_INCOMPATIBLE_SHADER_BINARY_EXT = 1000482000, + VK_PIPELINE_BINARY_MISSING_KHR = 1000483000, + VK_ERROR_NOT_ENOUGH_SPACE_KHR = -1000483000, + VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY, + VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE, + VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, + VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED, + VK_ERROR_NOT_PERMITTED_KHR = VK_ERROR_NOT_PERMITTED, + VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + VK_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, + VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, + // VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT is a deprecated alias + VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT = VK_INCOMPATIBLE_SHADER_BINARY_EXT, + 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_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000, + 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_1_3_FEATURES = 53, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES = 54, + VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO = 1000192000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES = 1000215000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES = 1000245000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES = 1000276000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES = 1000295000, + VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO = 1000295001, + VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO = 1000295002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES = 1000297000, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_2 = 1000314000, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2 = 1000314001, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 = 1000314002, + VK_STRUCTURE_TYPE_DEPENDENCY_INFO = 1000314003, + VK_STRUCTURE_TYPE_SUBMIT_INFO_2 = 1000314004, + VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO = 1000314005, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO = 1000314006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES = 1000314007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES = 1000325000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES = 1000335000, + VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 = 1000337000, + VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2 = 1000337001, + VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2 = 1000337002, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2 = 1000337003, + VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2 = 1000337004, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2 = 1000337005, + VK_STRUCTURE_TYPE_BUFFER_COPY_2 = 1000337006, + VK_STRUCTURE_TYPE_IMAGE_COPY_2 = 1000337007, + VK_STRUCTURE_TYPE_IMAGE_BLIT_2 = 1000337008, + VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2 = 1000337009, + VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2 = 1000337010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES = 1000225000, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO = 1000225001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES = 1000225002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES = 1000138000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES = 1000138001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK = 1000138002, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO = 1000138003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES = 1000066000, + VK_STRUCTURE_TYPE_RENDERING_INFO = 1000044000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO = 1000044001, + VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO = 1000044002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES = 1000044003, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO = 1000044004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES = 1000280000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES = 1000280001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES = 1000281001, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 = 1000360000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES = 1000413000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES = 1000413001, + VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS = 1000413002, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS = 1000413003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES = 55, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES = 56, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO = 1000174000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES = 1000388000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES = 1000388001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES = 1000416000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES = 1000528000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES = 1000544000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES = 1000259000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO = 1000259001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES = 1000259002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES = 1000525000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO = 1000190001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES = 1000190002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES = 1000265000, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO = 1000271000, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO = 1000271001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES = 1000470000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES = 1000470001, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO = 1000470003, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO = 1000470004, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2 = 1000338002, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2 = 1000338003, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO = 1000470005, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO = 1000470006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES = 1000080000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES = 1000232000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO = 1000232001, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO = 1000232002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES = 1000545000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES = 1000545001, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS = 1000545002, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO = 1000545003, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO = 1000545004, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO = 1000545005, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO = 1000545006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES = 1000466000, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO = 1000068000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES = 1000068001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES = 1000068002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES = 1000270000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES = 1000270001, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY = 1000270002, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY = 1000270003, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO = 1000270004, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO = 1000270005, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO = 1000270006, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO = 1000270007, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE = 1000270008, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY = 1000270009, + 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_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, + VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, + VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, + VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, + VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, + VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, + VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, + VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR = 1000023000, + VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001, + VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR = 1000023002, + VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR = 1000023003, + VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR = 1000023004, + VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005, + VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006, + VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007, + VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008, + VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009, + VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010, + VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR = 1000023011, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR = 1000023012, + VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR = 1000023013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR = 1000023016, + VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR = 1000024001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR = 1000024002, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001, + VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002, + VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX = 1000029000, + VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX = 1000029001, + VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX = 1000029002, + VK_STRUCTURE_TYPE_CU_MODULE_TEXTURING_MODE_CREATE_INFO_NVX = 1000029004, + VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_KHR = 1000038000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000038001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR = 1000038002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_KHR = 1000038003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR = 1000038004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_KHR = 1000038005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR = 1000038006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_KHR = 1000038007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR = 1000038008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR = 1000038009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_KHR = 1000038010, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_KHR = 1000038011, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR = 1000038012, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000038013, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR = 1000039000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000039001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR = 1000039002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR = 1000039003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR = 1000039004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR = 1000039005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR = 1000039006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR = 1000039007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR = 1000039009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR = 1000039010, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR = 1000039011, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR = 1000039012, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR = 1000039013, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000039014, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR = 1000040000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR = 1000040001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR = 1000040003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000040004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR = 1000040005, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR = 1000040006, + VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000, + VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001, + VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000, + VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000, + VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, + 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_WIN32_HANDLE_INFO_KHR = 1000073000, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, + VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, + VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003, + 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_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001, + VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001, + VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002, + VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000, + 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_PRESENT_TIMES_INFO_GOOGLE = 1000092000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000, + VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = 1000044009, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000, + 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_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG = 1000110000, + VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000, + VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000, + VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001, + VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002, + VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000, + VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = 1000116000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = 1000116001, + VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = 1000116002, + VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = 1000116003, + VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = 1000116004, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = 1000116005, + VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = 1000116006, + 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_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, + VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, + VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000, + VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001, + VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002, + VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003, + VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002, + VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003, + VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID = 1000129006, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX = 1000134000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX = 1000134001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX = 1000134002, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX = 1000134003, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX = 1000134004, +#endif + VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR = 1000141000, + 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_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010, + VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001, + 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_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT = 1000158006, + VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000, + VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001, +#endif + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001, + VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003, + VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004, + VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005, + VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009, + VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000, + VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001, + 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_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_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR = 1000187000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000187001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR = 1000187002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR = 1000187003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR = 1000187004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR = 1000187005, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, + VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002, + VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008, + VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000, + VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = 1000210000, + VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001, + VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002, + VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003, + VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004, + VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000, + VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000, + VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001, + VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000, + VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002, + VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = 1000044007, + 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_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR = 1000235000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000, + VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001, + VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002, + VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = 1000248000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000, + VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001, + VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002, + 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_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT = 1000254000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT = 1000254001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT = 1000254002, + VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002, + VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001, + VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, + VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004, + VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT = 1000272000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT = 1000272001, + VK_STRUCTURE_TYPE_MEMORY_MAP_PLACED_INFO_EXT = 1000272002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = 1000273000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000, + VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = 1000277003, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = 1000277004, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000, + VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT = 1000283000, + VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT = 1000283001, + VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT = 1000283002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000, + VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002, + 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_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV = 1000292000, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV = 1000292001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV = 1000292002, + VK_STRUCTURE_TYPE_PRESENT_ID_KHR = 1000294000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR = 1000294001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR = 1000299002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR = 1000299003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR = 1000299004, + VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR = 1000299005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR = 1000299006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR = 1000299007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR = 1000299008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR = 1000299009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000299010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000, + VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV = 1000307000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV = 1000307001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV = 1000307002, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV = 1000307003, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV = 1000307004, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM = 1000309000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM = 1000309001, + VK_STRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM = 1000309002, + VK_STRUCTURE_TYPE_PER_TILE_BEGIN_INFO_QCOM = 1000309003, + VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM = 1000309004, + VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM = 1000309005, + VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV = 1000310000, + VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT = 1000311000, + VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT = 1000311001, + VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT = 1000311002, + VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT = 1000311003, + VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT = 1000311004, + VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT = 1000311005, + VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT = 1000311006, + VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT = 1000311007, + VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT = 1000311008, + VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT = 1000311009, + VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311010, + VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT = 1000311011, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT = 1000316000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT = 1000316001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT = 1000316002, + VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT = 1000316003, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT = 1000316004, + VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316005, + VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316006, + VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316007, + VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316008, + VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT = 1000316010, + VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT = 1000316011, + VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT = 1000316012, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT = 1000316009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT = 1000320000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT = 1000320001, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT = 1000320002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD = 1000321000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR = 1000203000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR = 1000322000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV = 1000327000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV = 1000327001, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV = 1000327002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT = 1000328000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT = 1000328001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001, + VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT = 1000338000, + VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT = 1000338001, + VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT = 1000338004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT = 1000339000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT = 1000341000, + VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT = 1000341001, + VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT = 1000341002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000, + VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000, + VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001, + VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = 1000353000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT = 1000354000, + VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT = 1000354001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT = 1000355000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT = 1000355001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 1000356000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000, + VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001, + VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002, + VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000, + VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1000366000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1000366001, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1000366002, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1000366003, + VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1000366004, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1000366005, + VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA = 1000366006, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA = 1000366007, + VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA = 1000366008, + VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA = 1000366009, + VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI = 1000369000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI = 1000369001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI = 1000369002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI = 1000370000, + VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV = 1000371000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV = 1000371001, + VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT = 1000372000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT = 1000372001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT = 1000375000, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT = 1000375001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT = 1000376000, + VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT = 1000376001, + VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT = 1000376002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000, + VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT = 1000382000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR = 1000386000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = 1000392001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT = 1000393000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT = 1000395000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT = 1000395001, + VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT = 1000396000, + VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT = 1000396001, + VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT = 1000396002, + VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT = 1000396003, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT = 1000396004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT = 1000396005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT = 1000396006, + VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT = 1000396007, + VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT = 1000396008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT = 1000396009, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV = 1000397000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV = 1000397001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV = 1000397002, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI = 1000404000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI = 1000404001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_VRS_FEATURES_HUAWEI = 1000404002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT = 1000411000, + VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM = 1000415000, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM = 1000417000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM = 1000417001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM = 1000417002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT = 1000418000, + VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT = 1000418001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = 1000420000, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE = 1000420001, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = 1000420002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT = 1000422000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM = 1000424000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM = 1000424001, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM = 1000424002, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM = 1000424003, + VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM = 1000424004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV = 1000426000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV = 1000426001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV = 1000427000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV = 1000427001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV = 1000428000, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV = 1000428001, + VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV = 1000428002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV = 1000429008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_LINEAR_SWEPT_SPHERES_DATA_NV = 1000429009, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_SPHERES_DATA_NV = 1000429010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR = 1000434000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM = 1000440000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM = 1000440001, + VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM = 1000440002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT = 1000451000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT = 1000451001, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT = 1000453000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT = 1000455000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT = 1000455001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT = 1000458000, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT = 1000458001, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000458002, + VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT = 1000458003, + VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG = 1000459000, + VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG = 1000459001, + VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM = 1000460000, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM = 1000460001, + VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM = 1000460002, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM = 1000460003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM = 1000460004, + VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM = 1000460005, + VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM = 1000460006, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM = 1000460007, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM = 1000460008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM = 1000460009, + VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM = 1000460010, + VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM = 1000460011, + VK_STRUCTURE_TYPE_TENSOR_COPY_ARM = 1000460012, + VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM = 1000460013, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM = 1000460014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM = 1000460015, + VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM = 1000460016, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM = 1000460017, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM = 1000460018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_PROPERTIES_ARM = 1000460019, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_TENSOR_INFO_ARM = 1000460020, + VK_STRUCTURE_TYPE_TENSOR_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460021, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460022, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM = 1000460023, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT = 1000462000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT = 1000462001, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT = 1000462002, + VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT = 1000462003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT = 1000342000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV = 1000464000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV = 1000464001, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV = 1000464002, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV = 1000464003, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV = 1000464004, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV = 1000464005, + VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV = 1000464010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT = 1000465000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID = 1000468000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468001, + VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD = 1000476000, + VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD = 1000476001, + VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD = 1000476002, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR = 1000479000, + VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR = 1000479001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR = 1000479002, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR = 1000480000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR = 1000480001, + VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR = 1000480002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR = 1000481000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT = 1000482000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT = 1000482001, + VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT = 1000482002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR = 1000483000, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_CREATE_INFO_KHR = 1000483001, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_INFO_KHR = 1000483002, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_KEY_KHR = 1000483003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_PROPERTIES_KHR = 1000483004, + VK_STRUCTURE_TYPE_RELEASE_CAPTURED_PIPELINE_DATA_INFO_KHR = 1000483005, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_DATA_INFO_KHR = 1000483006, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_INFO_KHR = 1000483007, + VK_STRUCTURE_TYPE_DEVICE_PIPELINE_BINARY_INTERNAL_CACHE_CONTROL_KHR = 1000483008, + VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR = 1000483009, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM = 1000484000, + VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM = 1000484001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC = 1000485000, + VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC = 1000485001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR = 1000274000, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR = 1000274001, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR = 1000274002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR = 1000275000, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR = 1000275001, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR = 1000275002, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR = 1000275003, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR = 1000275004, + VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR = 1000275005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM = 1000488000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV = 1000490000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV = 1000490001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV = 1000491000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491001, + VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491002, + VK_STRUCTURE_TYPE_CONVERT_COOPERATIVE_VECTOR_MATRIX_INFO_NV = 1000491004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV = 1000492000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV = 1000492001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT = 1000351000, + VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT = 1000351002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT = 1000495000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT = 1000495001, + VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT = 1000496000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM = 1000497000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM = 1000497001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT = 1000498000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT = 1000499000, + VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV = 1000505000, + VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV = 1000505001, + VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV = 1000505002, + VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV = 1000505003, + VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV = 1000505004, + VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV = 1000505005, + VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV = 1000505006, + VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV = 1000505007, + VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV = 1000505008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR = 1000506000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR = 1000506001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR = 1000506002, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM = 1000507000, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM = 1000507001, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM = 1000507002, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM = 1000507003, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM = 1000507004, + VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM = 1000507005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM = 1000507006, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM = 1000507007, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM = 1000507008, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM = 1000507009, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM = 1000507010, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM = 1000507011, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM = 1000507012, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM = 1000507013, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM = 1000507014, + VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM = 1000507016, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM = 1000507017, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM = 1000507018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM = 1000507019, + VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM = 1000507015, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM = 1000510000, + VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM = 1000510001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR = 1000201000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR = 1000511000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR = 1000512000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR = 1000512001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR = 1000512003, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000512004, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR = 1000512005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR = 1000513000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000513001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR = 1000513002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR = 1000513003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR = 1000513004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PROFILE_INFO_KHR = 1000513005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR = 1000513006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR = 1000513007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUALITY_LEVEL_PROPERTIES_KHR = 1000513008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_CREATE_INFO_KHR = 1000513009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR = 1000513010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR = 1000514000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_CAPABILITIES_KHR = 1000514001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PICTURE_INFO_KHR = 1000514002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PROFILE_INFO_KHR = 1000514003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR = 1000515000, + VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR = 1000515001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV = 1000516000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM = 1000518000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM = 1000518001, + VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM = 1000518002, + VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM = 1000519000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM = 1000519001, + VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM = 1000519002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM = 1000520000, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM = 1000520001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM = 1000521000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT = 1000524000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR = 1000527000, + VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT = 1000527001, + VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX = 1000529000, + VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX = 1000529001, + VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX = 1000529002, + VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX = 1000529003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX = 1000529004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT = 1000530000, + VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR = 1000184000, + VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT = 1000545007, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT = 1000545008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV = 1000546000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM = 1000547000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_PROPERTIES_QCOM = 1000547001, + VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM = 1000547002, + VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM = 1000547003, + VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM = 1000547004, + VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV = 1000551000, + VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV = 1000551001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR = 1000552000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR = 1000552001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR = 1000552002, + VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR = 1000552003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR = 1000552004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553000, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR = 1000553002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000553005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR = 1000553009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553004, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_H265_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553007, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_AV1_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV = 1000555000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV = 1000556000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV = 1000556001, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV = 1000556002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV = 1000556003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR = 1000558000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV = 1000559000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR = 1000562000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR = 1000562001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR = 1000562002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR = 1000562003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR = 1000562004, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV = 1000563000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT = 1000564000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT = 1000567000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV = 1000568000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV = 1000569000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000569001, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV = 1000569002, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_TRIANGLE_CLUSTER_INPUT_NV = 1000569003, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_MOVE_OBJECTS_INPUT_NV = 1000569004, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV = 1000569005, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV = 1000569006, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CLUSTER_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000569007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV = 1000570000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000570001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570002, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCES_INPUT_NV = 1000570003, + VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV = 1000570004, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_FLAGS_NV = 1000570005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT = 1000572000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT = 1000572001, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT = 1000572002, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT = 1000572003, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT = 1000572004, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT = 1000572006, + VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT = 1000572007, + VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT = 1000572008, + VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT = 1000572009, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT = 1000572010, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT = 1000572011, + VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT = 1000572012, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT = 1000572013, + VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT = 1000572014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR = 1000574000, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR = 1000574002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA = 1000575000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA = 1000575001, + VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA = 1000575002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT = 1000582000, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT = 1000582001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR = 1000584000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR = 1000584001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR = 1000584002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR = 1000586000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586003, + VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS = 1000587000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI = 1000590000, + VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI = 1000590001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV = 1000593000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV = 1000593001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV = 1000593002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM = 1000596000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT = 1000602000, + VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT = 1000602001, + VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT = 1000602002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR = 1000421000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT = 1000608000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM = 1000609000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE = 1000611000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE = 1000611001, + VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE = 1000611002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR = 1000286000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR = 1000286001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV = 1000613000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV = 1000613001, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT = 1000425000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT = 1000425001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT = 1000425002, + VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT = 1000619003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT = 1000620000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR = 1000361000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC = 1000637000, + 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_DEBUG_REPORT_CREATE_INFO_EXT is a deprecated alias + VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, + VK_STRUCTURE_TYPE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INFO, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO, + VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, + VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, + VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, + VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, + // VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT is a deprecated alias + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, + VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, + VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, + VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, + VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, + VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, + VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, + VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, + VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, + VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, + VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, + VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, + VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, + VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, + VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, + VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, + VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, + VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, + VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, + VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, + VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, + VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, + // VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL is a deprecated alias + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, + VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, + VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES, + VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, + VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, + VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, + VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR, + VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR, + VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR, + VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT = VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, + VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, + VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, + VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, + VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, + VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, + VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2, + VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2, + VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2, + VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, + VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, + VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, + VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT, + VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR, + VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, + VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT, + VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_AREA_INFO, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS_KHR = VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO, + VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkStructureType; + +typedef enum VkPipelineCacheHeaderVersion { + VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1, + VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCacheHeaderVersion; + +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_READ_ONLY_OPTIMAL = 1000314000, + VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL = 1000314001, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ = 1000232000, + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, + VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000, + VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001, + VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002, + VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, + VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000, + VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = 1000164003, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002, + VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT = 1000339000, + VK_IMAGE_LAYOUT_TENSOR_ALIASING_ARM = 1000460000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR = 1000553000, + VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT = 1000620000, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR = VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ, + VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, + VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, + 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_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000, + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT = 1000295000, + 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_DEBUG_REPORT_CALLBACK_EXT = 1000011000, + VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000, + VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001, + VK_OBJECT_TYPE_CU_MODULE_NVX = 1000029000, + VK_OBJECT_TYPE_CU_FUNCTION_NVX = 1000029001, + VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, + VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000, + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, + VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000, + VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_OBJECT_TYPE_CUDA_MODULE_NV = 1000307000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_OBJECT_TYPE_CUDA_FUNCTION_NV = 1000307001, +#endif + VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000, + VK_OBJECT_TYPE_MICROMAP_EXT = 1000396000, + VK_OBJECT_TYPE_TENSOR_ARM = 1000460000, + VK_OBJECT_TYPE_TENSOR_VIEW_ARM = 1000460001, + VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV = 1000464000, + VK_OBJECT_TYPE_SHADER_EXT = 1000482000, + VK_OBJECT_TYPE_PIPELINE_BINARY_KHR = 1000483000, + VK_OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM = 1000507000, + VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV = 1000556000, + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT = 1000572000, + VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT = 1000572001, + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, + VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkObjectType; + +typedef enum VkVendorId { + VK_VENDOR_ID_KHRONOS = 0x10000, + 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_MOBILEYE = 0x10007, + VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF +} VkVendorId; + +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_G8_B8R8_2PLANE_444_UNORM = 1000330000, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 = 1000330001, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 = 1000330002, + VK_FORMAT_G16_B16R16_2PLANE_444_UNORM = 1000330003, + VK_FORMAT_A4R4G4B4_UNORM_PACK16 = 1000340000, + VK_FORMAT_A4B4G4R4_UNORM_PACK16 = 1000340001, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK = 1000066000, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK = 1000066001, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK = 1000066002, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK = 1000066003, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK = 1000066004, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK = 1000066005, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK = 1000066006, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK = 1000066007, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK = 1000066008, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK = 1000066009, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK = 1000066010, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013, + VK_FORMAT_A1B5G5R5_UNORM_PACK16 = 1000470000, + VK_FORMAT_A8_UNORM = 1000470001, + VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, + VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, + VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, + VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003, + VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004, + VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, + VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, + VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, + VK_FORMAT_R8_BOOL_ARM = 1000460000, + VK_FORMAT_R16G16_SFIXED5_NV = 1000464000, + VK_FORMAT_R10X6_UINT_PACK16_ARM = 1000609000, + VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM = 1000609001, + VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM = 1000609002, + VK_FORMAT_R12X4_UINT_PACK16_ARM = 1000609003, + VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM = 1000609004, + VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM = 1000609005, + VK_FORMAT_R14X2_UINT_PACK16_ARM = 1000609006, + VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM = 1000609007, + VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM = 1000609008, + VK_FORMAT_R14X2_UNORM_PACK16_ARM = 1000609009, + VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM = 1000609010, + VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM = 1000609011, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM = 1000609012, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM = 1000609013, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, + VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM, + VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, + VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, + VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, + VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM, + VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, + VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, + VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, + VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16, + VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16, + // VK_FORMAT_R16G16_S10_5_NV is a deprecated alias + VK_FORMAT_R16G16_S10_5_NV = VK_FORMAT_R16G16_SFIXED5_NV, + VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR = VK_FORMAT_A1B5G5R5_UNORM_PACK16, + VK_FORMAT_A8_UNORM_KHR = VK_FORMAT_A8_UNORM, + 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_RESULT_STATUS_ONLY_KHR = 1000023000, + VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004, + VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000, + VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000, + VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR = 1000299000, + VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT = 1000328000, + VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT = 1000382000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR = 1000386000, + VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR = 1000386001, + VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT = 1000396000, + VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT = 1000396001, + 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_CULL_MODE = 1000267000, + VK_DYNAMIC_STATE_FRONT_FACE = 1000267001, + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY = 1000267002, + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT = 1000267003, + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT = 1000267004, + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE = 1000267005, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE = 1000267006, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE = 1000267007, + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP = 1000267008, + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE = 1000267009, + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE = 1000267010, + VK_DYNAMIC_STATE_STENCIL_OP = 1000267011, + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001, + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002, + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004, + VK_DYNAMIC_STATE_LINE_STIPPLE = 1000259000, + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT = 1000099001, + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT = 1000099002, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, + VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000, + VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004, + VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006, + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV = 1000205000, + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001, + VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000, + VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000, + VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000, + VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003, + VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000, + VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT = 1000455003, + VK_DYNAMIC_STATE_POLYGON_MODE_EXT = 1000455004, + VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT = 1000455005, + VK_DYNAMIC_STATE_SAMPLE_MASK_EXT = 1000455006, + VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT = 1000455007, + VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT = 1000455008, + VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT = 1000455009, + VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT = 1000455010, + VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT = 1000455011, + VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT = 1000455012, + VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT = 1000455002, + VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT = 1000455013, + VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT = 1000455014, + VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT = 1000455015, + VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT = 1000455016, + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT = 1000455017, + VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT = 1000455018, + VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT = 1000455019, + VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT = 1000455020, + VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT = 1000455021, + VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT = 1000455022, + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV = 1000455023, + VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV = 1000455024, + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV = 1000455025, + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV = 1000455026, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV = 1000455027, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV = 1000455028, + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV = 1000455029, + VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV = 1000455030, + VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV = 1000455031, + VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV = 1000455032, + VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT = 1000524000, + VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT = 1000582000, + VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = VK_DYNAMIC_STATE_LINE_STIPPLE, + VK_DYNAMIC_STATE_CULL_MODE_EXT = VK_DYNAMIC_STATE_CULL_MODE, + VK_DYNAMIC_STATE_FRONT_FACE_EXT = VK_DYNAMIC_STATE_FRONT_FACE, + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, + VK_DYNAMIC_STATE_STENCIL_OP_EXT = VK_DYNAMIC_STATE_STENCIL_OP, + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, + VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = VK_DYNAMIC_STATE_LINE_STIPPLE, + 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_FILL_RECTANGLE_NV = 1000153000, + 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_EXT = 1000015000, + VK_FILTER_CUBIC_IMG = VK_FILTER_CUBIC_EXT, + 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_MIRROR_CLAMP_TO_EDGE_KHR is a deprecated alias + VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, + 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_INLINE_UNIFORM_BLOCK = 1000138000, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, + VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, + VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM = 1000440000, + VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM = 1000440001, + VK_DESCRIPTOR_TYPE_TENSOR_ARM = 1000460000, + VK_DESCRIPTOR_TYPE_MUTABLE_EXT = 1000351000, + VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570000, + VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, + VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = VK_DESCRIPTOR_TYPE_MUTABLE_EXT, + 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_NONE = 1000400000, + VK_ATTACHMENT_LOAD_OP_NONE_EXT = VK_ATTACHMENT_LOAD_OP_NONE, + VK_ATTACHMENT_LOAD_OP_NONE_KHR = VK_ATTACHMENT_LOAD_OP_NONE, + 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_NONE = 1000301000, + VK_ATTACHMENT_STORE_OP_NONE_KHR = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_NONE_EXT = VK_ATTACHMENT_STORE_OP_NONE, + VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF +} VkAttachmentStoreOp; + +typedef enum VkPipelineBindPoint { + VK_PIPELINE_BIND_POINT_GRAPHICS = 0, + VK_PIPELINE_BIND_POINT_COMPUTE = 1, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX = 1000134000, +#endif + VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000, + VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI = 1000369003, + VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM = 1000507000, + VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, + 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 = 1000265000, + VK_INDEX_TYPE_NONE_KHR = 1000165000, + VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR, + VK_INDEX_TYPE_UINT8_EXT = VK_INDEX_TYPE_UINT8, + VK_INDEX_TYPE_UINT8_KHR = VK_INDEX_TYPE_UINT8, + 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_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR = 1000451000, + VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT = VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR, + 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_NONE = 0, + VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000, + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000, + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000, + VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000, + VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000, + VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000, + VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = 0x00020000, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = 0x00040000, + VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT, + VK_ACCESS_NONE_KHR = VK_ACCESS_NONE, + 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_NONE = 0, + 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_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT, + VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT, + VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT, + VK_IMAGE_ASPECT_NONE_KHR = VK_IMAGE_ASPECT_NONE, + 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_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000, + VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000, + VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000, + VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000, + VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000, + VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000, + VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT, + VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, + VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, + VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, + VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT, + VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, + 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_CORNER_SAMPLED_BIT_NV = 0x00002000, + VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000, + VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000, + VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00010000, + VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT = 0x00040000, + VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = 0x00020000, + VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 0x00100000, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT = 0x00008000, + VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, + VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, + VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, + VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, + VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT, + VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, + 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_HOST_TRANSFER_BIT = 0x00400000, + VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400, + VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800, + VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000, + VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200, + VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00000100, + VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000, + VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000, + VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000, + VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x00080000, + VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000, + VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM = 0x00100000, + VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM = 0x00200000, + VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARM = 0x00800000, + VK_IMAGE_USAGE_TILE_MEMORY_BIT_QCOM = 0x08000000, + VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x02000000, + VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x04000000, + VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT = VK_IMAGE_USAGE_HOST_TRANSFER_BIT, + VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageUsageFlagBits; +typedef VkFlags VkImageUsageFlags; + +typedef enum VkInstanceCreateFlagBits { + VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR = 0x00000001, + VK_INSTANCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkInstanceCreateFlagBits; +typedef VkFlags VkInstanceCreateFlags; + +typedef enum VkMemoryHeapFlagBits { + VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, + VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002, + VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM = 0x00000008, + VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, + 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_DEVICE_COHERENT_BIT_AMD = 0x00000040, + VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 0x00000080, + VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV = 0x00000100, + 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_VIDEO_DECODE_BIT_KHR = 0x00000020, + VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040, + VK_QUEUE_OPTICAL_FLOW_BIT_NV = 0x00000100, + VK_QUEUE_DATA_GRAPH_BIT_ARM = 0x00000400, + 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_NONE = 0, + VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000, + VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 0x00200000, + VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000, + VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000, + VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT = 0x00080000, + VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT = 0x00100000, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = 0x00020000, + VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, + VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT, + VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT, + VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE, + VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineStageFlagBits; +typedef VkFlags VkPipelineStageFlags; + +typedef enum VkMemoryMapFlagBits { + VK_MEMORY_MAP_PLACED_BIT_EXT = 0x00000001, + VK_MEMORY_MAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryMapFlagBits; +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 enum VkEventCreateFlagBits { + VK_EVENT_CREATE_DEVICE_ONLY_BIT = 0x00000001, + VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT, + VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkEventCreateFlagBits; +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_TASK_SHADER_INVOCATIONS_BIT_EXT = 0x00000800, + VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT = 0x00001000, + VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI = 0x00002000, + VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPipelineStatisticFlagBits; +typedef VkFlags VkQueryPipelineStatisticFlags; + +typedef enum VkQueryPoolCreateFlagBits { + VK_QUERY_POOL_CREATE_RESET_BIT_KHR = 0x00000001, + VK_QUERY_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPoolCreateFlagBits; +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_WITH_STATUS_BIT_KHR = 0x00000010, + 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_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000020, + VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 0x00000040, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + 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_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000, + VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000, + VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800, + VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000, + VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 0x02000000, +#endif + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000, + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000, + VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400, + VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000, + VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000, + VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000, + VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000, + VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000, + VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000, + VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT = 0x01000000, + VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM = 0x08000000, + VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkBufferUsageFlagBits; +typedef VkFlags VkBufferUsageFlags; +typedef VkFlags VkBufferViewCreateFlags; + +typedef enum VkImageViewCreateFlagBits { + VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 0x00000001, + VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000004, + VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT = 0x00000002, + VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkImageViewCreateFlagBits; +typedef VkFlags VkImageViewCreateFlags; +typedef VkFlags VkShaderModuleCreateFlags; + +typedef enum VkPipelineCacheCreateFlagBits { + VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, + VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR = 0x00000008, + VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_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_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100, + VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT = 0x08000000, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT = 0x40000000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000, + VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000, + VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000, + VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000, + VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020, + VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000, + VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000, + VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040, + VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080, + VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00040000, + VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 0x00000800, + VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000, + VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000, + VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400, + VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000, + VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000, + VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000, + VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000, +#endif + // VK_PIPELINE_CREATE_DISPATCH_BASE is a deprecated alias + VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, + VK_PIPELINE_CREATE_DISPATCH_BASE_BIT_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + // VK_PIPELINE_CREATE_DISPATCH_BASE_KHR is a deprecated alias + VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + // VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT is a deprecated alias + VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + // VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR is a deprecated alias + VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, + VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT = VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT = VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_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 = 0x00000001, + VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT = 0x00000002, + VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT, + VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, + 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_RAYGEN_BIT_KHR = 0x00000100, + VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, + VK_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, + VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, + VK_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, + VK_SHADER_STAGE_TASK_BIT_EXT = 0x00000040, + VK_SHADER_STAGE_MESH_BIT_EXT = 0x00000080, + VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI = 0x00004000, + VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI = 0x00080000, + VK_SHADER_STAGE_RAYGEN_BIT_NV = VK_SHADER_STAGE_RAYGEN_BIT_KHR, + VK_SHADER_STAGE_ANY_HIT_BIT_NV = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, + VK_SHADER_STAGE_MISS_BIT_NV = VK_SHADER_STAGE_MISS_BIT_KHR, + VK_SHADER_STAGE_INTERSECTION_BIT_NV = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, + VK_SHADER_STAGE_CALLABLE_BIT_NV = VK_SHADER_STAGE_CALLABLE_BIT_KHR, + VK_SHADER_STAGE_TASK_BIT_NV = VK_SHADER_STAGE_TASK_BIT_EXT, + VK_SHADER_STAGE_MESH_BIT_NV = VK_SHADER_STAGE_MESH_BIT_EXT, + 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 enum VkPipelineDepthStencilStateCreateFlagBits { + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000001, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000002, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, + VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineDepthStencilStateCreateFlagBits; +typedef VkFlags VkPipelineDepthStencilStateCreateFlags; + +typedef enum VkPipelineColorBlendStateCreateFlagBits { + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT = 0x00000001, + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT, + VK_PIPELINE_COLOR_BLEND_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineColorBlendStateCreateFlagBits; +typedef VkFlags VkPipelineColorBlendStateCreateFlags; +typedef VkFlags VkPipelineDynamicStateCreateFlags; + +typedef enum VkPipelineLayoutCreateFlagBits { + VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT = 0x00000002, + VK_PIPELINE_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineLayoutCreateFlagBits; +typedef VkFlags VkPipelineLayoutCreateFlags; +typedef VkFlags VkShaderStageFlags; + +typedef enum VkSamplerCreateFlagBits { + VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001, + VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002, + VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008, + VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT = 0x00000004, + VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM = 0x00000010, + 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_HOST_ONLY_BIT_EXT = 0x00000004, + VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV = 0x00000008, + VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV = 0x00000010, + VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT, + 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_PUSH_DESCRIPTOR_BIT = 0x00000001, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00000010, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x00000020, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00000080, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT = 0x00000004, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV = 0x00000040, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT, + 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_FEEDBACK_LOOP_BIT_EXT = 0x00000008, + VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR = 0x00000020, + VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR = 0x00000040, + VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT, + VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT, + VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDependencyFlagBits; +typedef VkFlags VkDependencyFlags; + +typedef enum VkFramebufferCreateFlagBits { + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001, + VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, + VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFramebufferCreateFlagBits; +typedef VkFlags VkFramebufferCreateFlags; + +typedef enum VkRenderPassCreateFlagBits { + VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = 0x00000002, + VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 0x00000004, + VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkRenderPassCreateFlagBits; +typedef VkFlags VkRenderPassCreateFlags; + +typedef enum VkSubpassDescriptionFlagBits { + VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001, + VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002, + VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 0x00000004, + VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 0x00000008, + VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM = 0x00000100, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT = 0x00000010, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000020, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000040, + VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x00000080, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, + VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, + 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 is a deprecated alias + 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 struct VkPipelineCacheHeaderVersionOne { + uint32_t headerSize; + VkPipelineCacheHeaderVersion headerVersion; + uint32_t vendorID; + uint32_t deviceID; + uint8_t pipelineCacheUUID[VK_UUID_SIZE]; +} VkPipelineCacheHeaderVersionOne; + +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; + // enabledLayerCount is deprecated and should not be used + uint32_t enabledLayerCount; + // ppEnabledLayerNames is deprecated and should not be used + 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 VkShaderModuleCreateInfo { + VkStructureType sType; + const void* pNext; + VkShaderModuleCreateFlags flags; + size_t codeSize; + const uint32_t* pCode; +} VkShaderModuleCreateInfo; + +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 void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); +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 void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator); +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_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule); +typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, 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_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches); +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 void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); +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 void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); +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 void VKAPI_CALL vkFreeMemory( + VkDevice device, + VkDeviceMemory memory, + const VkAllocationCallbacks* pAllocator); + +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 void VKAPI_CALL vkDestroyQueryPool( + VkDevice device, + VkQueryPool queryPool, + const VkAllocationCallbacks* pAllocator); + +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 vkCreateShaderModule( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkShaderModule* pShaderModule); + +VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( + VkDevice device, + VkShaderModule shaderModule, + 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 vkGetPipelineCacheData( + VkDevice device, + VkPipelineCache pipelineCache, + size_t* pDataSize, + void* pData); + +VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches( + VkDevice device, + VkPipelineCache dstCache, + uint32_t srcCacheCount, + const VkPipelineCache* pSrcCaches); + +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 void VKAPI_CALL vkDestroyDescriptorPool( + VkDevice device, + VkDescriptorPool descriptorPool, + const VkAllocationCallbacks* pAllocator); + +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 void VKAPI_CALL vkDestroyCommandPool( + VkDevice device, + VkCommandPool commandPool, + const VkAllocationCallbacks* pAllocator); + +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 + + +// VK_VERSION_1_1 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_1 1 +// Vulkan 1.1 version number +#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0 + +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) +#define VK_MAX_DEVICE_GROUP_SIZE 32U +#define VK_LUID_SIZE 8U +#define VK_QUEUE_FAMILY_EXTERNAL (~1U) + +typedef enum VkPointClippingBehavior { + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1, + VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, + VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY, + 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_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, + VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT, + 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_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020, + 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_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, + 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_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN, + VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT, + VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF +} VkChromaLocation; + +typedef enum VkDescriptorUpdateTemplateType { + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS = 1, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorUpdateTemplateType; + +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_ROTATE_BIT = 0x00000200, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT = 0x00000400, + VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100, + VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_BIT, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT, + 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_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, + VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, + VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, + VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT, + 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_ZERO_INITIALIZE_BIT_EXT = 0x00000008, + VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, + VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryAllocateFlagBits; +typedef VkFlags VkMemoryAllocateFlags; +typedef VkFlags VkCommandPoolTrimFlags; +typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; + +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_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400, + 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_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX = 0x00004000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT = 0x00010000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT = 0x00020000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT = 0x00040000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, + 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_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT, + 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_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, + 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_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT, + 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_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT, + VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkFenceImportFlagBits; +typedef VkFlags VkFenceImportFlags; + +typedef enum VkSemaphoreImportFlagBits { + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001, + VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, + 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_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_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_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, + VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT, + 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 VkDescriptorUpdateTemplateEntry { + uint32_t dstBinding; + uint32_t dstArrayElement; + uint32_t descriptorCount; + VkDescriptorType descriptorType; + size_t offset; + size_t stride; +} VkDescriptorUpdateTemplateEntry; + +typedef struct VkDescriptorUpdateTemplateCreateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorUpdateTemplateCreateFlags flags; + uint32_t descriptorUpdateEntryCount; + const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntries; + VkDescriptorUpdateTemplateType templateType; + VkDescriptorSetLayout descriptorSetLayout; + VkPipelineBindPoint pipelineBindPoint; + VkPipelineLayout pipelineLayout; + uint32_t set; +} VkDescriptorUpdateTemplateCreateInfo; + +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_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); +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 VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); +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 vkTrimCommandPool( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags); + +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 VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); + +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate( + VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void* pData); + +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 + + +// VK_VERSION_1_2 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_2 1 +// Vulkan 1.2 version number +#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0 + +#define VK_MAX_DRIVER_NAME_SIZE 256U +#define VK_MAX_DRIVER_INFO_SIZE 256U + +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_COREAVI_PROPRIETARY = 15, + VK_DRIVER_ID_JUICE_PROPRIETARY = 16, + VK_DRIVER_ID_VERISILICON_PROPRIETARY = 17, + VK_DRIVER_ID_MESA_TURNIP = 18, + VK_DRIVER_ID_MESA_V3DV = 19, + VK_DRIVER_ID_MESA_PANVK = 20, + VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21, + VK_DRIVER_ID_MESA_VENUS = 22, + VK_DRIVER_ID_MESA_DOZEN = 23, + VK_DRIVER_ID_MESA_NVK = 24, + VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA = 25, + VK_DRIVER_ID_MESA_HONEYKRISP = 26, + VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN = 27, + VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY, + VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE, + VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV, + VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = VK_DRIVER_ID_NVIDIA_PROPRIETARY, + VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, + VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, + VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, + VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, + VK_DRIVER_ID_ARM_PROPRIETARY_KHR = VK_DRIVER_ID_ARM_PROPRIETARY, + VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, + VK_DRIVER_ID_GGP_PROPRIETARY_KHR = VK_DRIVER_ID_GGP_PROPRIETARY, + VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY, + 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_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, + VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, + 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_WEIGHTED_AVERAGE_RANGECLAMP_QCOM = 1000521000, + VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, + VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VK_SAMPLER_REDUCTION_MODE_MIN, + VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VK_SAMPLER_REDUCTION_MODE_MAX, + VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkSamplerReductionMode; + +typedef enum VkSemaphoreType { + VK_SEMAPHORE_TYPE_BINARY = 0, + VK_SEMAPHORE_TYPE_TIMELINE = 1, + VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY, + VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE, + 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_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID = 0x00000010, + VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE, + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, + VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT, + VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT, + VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT, + // VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID is a deprecated alias + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID = VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, + 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_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, + VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, + VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, + VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkDescriptorBindingFlagBits; +typedef VkFlags VkDescriptorBindingFlags; + +typedef enum VkSemaphoreWaitFlagBits { + VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001, + VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT, + 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 + + +// VK_VERSION_1_3 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_3 1 +// Vulkan 1.3 version number +#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0 + +typedef uint64_t VkFlags64; +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot) + +typedef enum VkPipelineCreationFeedbackFlagBits { + VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT = 0x00000001, + VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT = 0x00000002, + VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT = 0x00000004, + VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT, + VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT, + VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT, + VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkPipelineCreationFeedbackFlagBits; +typedef VkFlags VkPipelineCreationFeedbackFlags; + +typedef enum VkToolPurposeFlagBits { + VK_TOOL_PURPOSE_VALIDATION_BIT = 0x00000001, + VK_TOOL_PURPOSE_PROFILING_BIT = 0x00000002, + VK_TOOL_PURPOSE_TRACING_BIT = 0x00000004, + VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT = 0x00000008, + VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT = 0x00000010, + VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020, + VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040, + VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = VK_TOOL_PURPOSE_VALIDATION_BIT, + VK_TOOL_PURPOSE_PROFILING_BIT_EXT = VK_TOOL_PURPOSE_PROFILING_BIT, + VK_TOOL_PURPOSE_TRACING_BIT_EXT = VK_TOOL_PURPOSE_TRACING_BIT, + VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT, + VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT, + VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkToolPurposeFlagBits; +typedef VkFlags VkToolPurposeFlags; +typedef VkFlags VkPrivateDataSlotCreateFlags; +typedef VkFlags64 VkPipelineStageFlags2; + +// Flag bits for VkPipelineStageFlagBits2 +typedef VkFlags64 VkPipelineStageFlagBits2; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE = 0ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 0x00000001ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 0x00000002ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT = 0x00000004ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT = 0x00000008ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT = 0x00000040ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT = 0x00000080ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT = 0x00000100ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT = 0x00000200ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT = 0x00000800ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT = 0x00002000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT = 0x00004000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT = 0x00008000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT = 0x00010000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT = 0x100000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT = 0x200000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT = 0x400000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT = 0x800000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT = 0x1000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT = 0x2000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT = 0x4000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT = 0x00020000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT = 0x00080000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT = 0x00100000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI = 0x8000000000ULL; +// VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI is a deprecated alias +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR = 0x10000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT = 0x40000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI = 0x20000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV = 0x20000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV = 0x100000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM = 0x40000000000ULL; + +typedef VkFlags64 VkAccessFlags2; + +// Flag bits for VkAccessFlagBits2 +typedef VkFlags64 VkAccessFlagBits2; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE = 0ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT = 0x00000001ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT = 0x00000002ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT = 0x00000008ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT = 0x00000010ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT = 0x00000020ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT = 0x00000040ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT = 0x00000080ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT = 0x00000800ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT = 0x00001000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT = 0x00002000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT = 0x00004000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT = 0x00008000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT = 0x00010000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT = 0x100000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT = 0x200000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT = 0x400000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM = 0x8000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM = 0x10000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_EXT = 0x00020000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_EXT = 0x00040000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT = 0x20000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR = 0x10000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MICROMAP_READ_BIT_EXT = 0x100000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT = 0x200000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV = 0x40000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV = 0x80000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM = 0x800000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM = 0x1000000000000ULL; + + +typedef enum VkSubmitFlagBits { + VK_SUBMIT_PROTECTED_BIT = 0x00000001, + VK_SUBMIT_PROTECTED_BIT_KHR = VK_SUBMIT_PROTECTED_BIT, + VK_SUBMIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkSubmitFlagBits; +typedef VkFlags VkSubmitFlags; + +typedef enum VkRenderingFlagBits { + VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT = 0x00000001, + VK_RENDERING_SUSPENDING_BIT = 0x00000002, + VK_RENDERING_RESUMING_BIT = 0x00000004, + VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x00000008, + VK_RENDERING_CONTENTS_INLINE_BIT_KHR = 0x00000010, + VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 0x00000020, + VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT, + VK_RENDERING_SUSPENDING_BIT_KHR = VK_RENDERING_SUSPENDING_BIT, + VK_RENDERING_RESUMING_BIT_KHR = VK_RENDERING_RESUMING_BIT, + VK_RENDERING_CONTENTS_INLINE_BIT_EXT = VK_RENDERING_CONTENTS_INLINE_BIT_KHR, + VK_RENDERING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkRenderingFlagBits; +typedef VkFlags VkRenderingFlags; +typedef VkFlags64 VkFormatFeatureFlags2; + +// Flag bits for VkFormatFeatureFlagBits2 +typedef VkFlags64 VkFormatFeatureFlagBits2; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 0x00000001ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 0x00000002ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000010ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 0x00000040ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 0x00000080ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 0x00000400ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 0x00000800ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 0x00004000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 0x00008000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 0x00400000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 0x00800000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 0x80000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 0x100000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 0x200000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT = 0x400000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT = 0x400000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV = 0x8000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 0x4000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM = 0x400000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM = 0x800000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM = 0x1000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM = 0x2000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM = 0x8000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM = 0x80000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV = 0x10000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV = 0x20000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV = 0x40000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM = 0x1000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x2000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x4000000000000ULL; + +typedef struct VkPhysicalDeviceVulkan13Features { + VkStructureType sType; + void* pNext; + VkBool32 robustImageAccess; + VkBool32 inlineUniformBlock; + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; + VkBool32 pipelineCreationCacheControl; + VkBool32 privateData; + VkBool32 shaderDemoteToHelperInvocation; + VkBool32 shaderTerminateInvocation; + VkBool32 subgroupSizeControl; + VkBool32 computeFullSubgroups; + VkBool32 synchronization2; + VkBool32 textureCompressionASTC_HDR; + VkBool32 shaderZeroInitializeWorkgroupMemory; + VkBool32 dynamicRendering; + VkBool32 shaderIntegerDotProduct; + VkBool32 maintenance4; +} VkPhysicalDeviceVulkan13Features; + +typedef struct VkPhysicalDeviceVulkan13Properties { + VkStructureType sType; + void* pNext; + uint32_t minSubgroupSize; + uint32_t maxSubgroupSize; + uint32_t maxComputeWorkgroupSubgroups; + VkShaderStageFlags requiredSubgroupSizeStages; + uint32_t maxInlineUniformBlockSize; + uint32_t maxPerStageDescriptorInlineUniformBlocks; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; + uint32_t maxDescriptorSetInlineUniformBlocks; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; + uint32_t maxInlineUniformTotalSize; + VkBool32 integerDotProduct8BitUnsignedAccelerated; + VkBool32 integerDotProduct8BitSignedAccelerated; + VkBool32 integerDotProduct8BitMixedSignednessAccelerated; + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProduct16BitUnsignedAccelerated; + VkBool32 integerDotProduct16BitSignedAccelerated; + VkBool32 integerDotProduct16BitMixedSignednessAccelerated; + VkBool32 integerDotProduct32BitUnsignedAccelerated; + VkBool32 integerDotProduct32BitSignedAccelerated; + VkBool32 integerDotProduct32BitMixedSignednessAccelerated; + VkBool32 integerDotProduct64BitUnsignedAccelerated; + VkBool32 integerDotProduct64BitSignedAccelerated; + VkBool32 integerDotProduct64BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; + VkDeviceSize storageTexelBufferOffsetAlignmentBytes; + VkBool32 storageTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize maxBufferSize; +} VkPhysicalDeviceVulkan13Properties; + +typedef struct VkPipelineCreationFeedback { + VkPipelineCreationFeedbackFlags flags; + uint64_t duration; +} VkPipelineCreationFeedback; + +typedef struct VkPipelineCreationFeedbackCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreationFeedback* pPipelineCreationFeedback; + uint32_t pipelineStageCreationFeedbackCount; + VkPipelineCreationFeedback* pPipelineStageCreationFeedbacks; +} VkPipelineCreationFeedbackCreateInfo; + +typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderTerminateInvocation; +} VkPhysicalDeviceShaderTerminateInvocationFeatures; + +typedef struct VkPhysicalDeviceToolProperties { + VkStructureType sType; + void* pNext; + char name[VK_MAX_EXTENSION_NAME_SIZE]; + char version[VK_MAX_EXTENSION_NAME_SIZE]; + VkToolPurposeFlags purposes; + char description[VK_MAX_DESCRIPTION_SIZE]; + char layer[VK_MAX_EXTENSION_NAME_SIZE]; +} VkPhysicalDeviceToolProperties; + +typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderDemoteToHelperInvocation; +} VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; + +typedef struct VkPhysicalDevicePrivateDataFeatures { + VkStructureType sType; + void* pNext; + VkBool32 privateData; +} VkPhysicalDevicePrivateDataFeatures; + +typedef struct VkDevicePrivateDataCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t privateDataSlotRequestCount; +} VkDevicePrivateDataCreateInfo; + +typedef struct VkPrivateDataSlotCreateInfo { + VkStructureType sType; + const void* pNext; + VkPrivateDataSlotCreateFlags flags; +} VkPrivateDataSlotCreateInfo; + +typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineCreationCacheControl; +} VkPhysicalDevicePipelineCreationCacheControlFeatures; + +typedef struct VkMemoryBarrier2 { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; +} VkMemoryBarrier2; + +typedef struct VkBufferMemoryBarrier2 { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; +} VkBufferMemoryBarrier2; + +typedef struct VkImageMemoryBarrier2 { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + VkImageLayout oldLayout; + VkImageLayout newLayout; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkImage image; + VkImageSubresourceRange subresourceRange; +} VkImageMemoryBarrier2; + +typedef struct VkDependencyInfo { + VkStructureType sType; + const void* pNext; + VkDependencyFlags dependencyFlags; + uint32_t memoryBarrierCount; + const VkMemoryBarrier2* pMemoryBarriers; + uint32_t bufferMemoryBarrierCount; + const VkBufferMemoryBarrier2* pBufferMemoryBarriers; + uint32_t imageMemoryBarrierCount; + const VkImageMemoryBarrier2* pImageMemoryBarriers; +} VkDependencyInfo; + +typedef struct VkSemaphoreSubmitInfo { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + uint64_t value; + VkPipelineStageFlags2 stageMask; + uint32_t deviceIndex; +} VkSemaphoreSubmitInfo; + +typedef struct VkCommandBufferSubmitInfo { + VkStructureType sType; + const void* pNext; + VkCommandBuffer commandBuffer; + uint32_t deviceMask; +} VkCommandBufferSubmitInfo; + +typedef struct VkSubmitInfo2 { + VkStructureType sType; + const void* pNext; + VkSubmitFlags flags; + uint32_t waitSemaphoreInfoCount; + const VkSemaphoreSubmitInfo* pWaitSemaphoreInfos; + uint32_t commandBufferInfoCount; + const VkCommandBufferSubmitInfo* pCommandBufferInfos; + uint32_t signalSemaphoreInfoCount; + const VkSemaphoreSubmitInfo* pSignalSemaphoreInfos; +} VkSubmitInfo2; + +typedef struct VkPhysicalDeviceSynchronization2Features { + VkStructureType sType; + void* pNext; + VkBool32 synchronization2; +} VkPhysicalDeviceSynchronization2Features; + +typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderZeroInitializeWorkgroupMemory; +} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + +typedef struct VkPhysicalDeviceImageRobustnessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 robustImageAccess; +} VkPhysicalDeviceImageRobustnessFeatures; + +typedef struct VkBufferCopy2 { + VkStructureType sType; + const void* pNext; + VkDeviceSize srcOffset; + VkDeviceSize dstOffset; + VkDeviceSize size; +} VkBufferCopy2; + +typedef struct VkCopyBufferInfo2 { + VkStructureType sType; + const void* pNext; + VkBuffer srcBuffer; + VkBuffer dstBuffer; + uint32_t regionCount; + const VkBufferCopy2* pRegions; +} VkCopyBufferInfo2; + +typedef struct VkImageCopy2 { + VkStructureType sType; + const void* pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageCopy2; + +typedef struct VkCopyImageInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2* pRegions; +} VkCopyImageInfo2; + +typedef struct VkBufferImageCopy2 { + VkStructureType sType; + const void* pNext; + VkDeviceSize bufferOffset; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkBufferImageCopy2; + +typedef struct VkCopyBufferToImageInfo2 { + VkStructureType sType; + const void* pNext; + VkBuffer srcBuffer; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkBufferImageCopy2* pRegions; +} VkCopyBufferToImageInfo2; + +typedef struct VkCopyImageToBufferInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkBuffer dstBuffer; + uint32_t regionCount; + const VkBufferImageCopy2* pRegions; +} VkCopyImageToBufferInfo2; + +typedef struct VkImageBlit2 { + VkStructureType sType; + const void* pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffsets[2]; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffsets[2]; +} VkImageBlit2; + +typedef struct VkBlitImageInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageBlit2* pRegions; + VkFilter filter; +} VkBlitImageInfo2; + +typedef struct VkImageResolve2 { + VkStructureType sType; + const void* pNext; + VkImageSubresourceLayers srcSubresource; + VkOffset3D srcOffset; + VkImageSubresourceLayers dstSubresource; + VkOffset3D dstOffset; + VkExtent3D extent; +} VkImageResolve2; + +typedef struct VkResolveImageInfo2 { + VkStructureType sType; + const void* pNext; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageResolve2* pRegions; +} VkResolveImageInfo2; + +typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures { + VkStructureType sType; + void* pNext; + VkBool32 subgroupSizeControl; + VkBool32 computeFullSubgroups; +} VkPhysicalDeviceSubgroupSizeControlFeatures; + +typedef struct VkPhysicalDeviceSubgroupSizeControlProperties { + VkStructureType sType; + void* pNext; + uint32_t minSubgroupSize; + uint32_t maxSubgroupSize; + uint32_t maxComputeWorkgroupSubgroups; + VkShaderStageFlags requiredSubgroupSizeStages; +} VkPhysicalDeviceSubgroupSizeControlProperties; + +typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo { + VkStructureType sType; + void* pNext; + uint32_t requiredSubgroupSize; +} VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; + +typedef struct VkPhysicalDeviceInlineUniformBlockFeatures { + VkStructureType sType; + void* pNext; + VkBool32 inlineUniformBlock; + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; +} VkPhysicalDeviceInlineUniformBlockFeatures; + +typedef struct VkPhysicalDeviceInlineUniformBlockProperties { + VkStructureType sType; + void* pNext; + uint32_t maxInlineUniformBlockSize; + uint32_t maxPerStageDescriptorInlineUniformBlocks; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; + uint32_t maxDescriptorSetInlineUniformBlocks; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; +} VkPhysicalDeviceInlineUniformBlockProperties; + +typedef struct VkWriteDescriptorSetInlineUniformBlock { + VkStructureType sType; + const void* pNext; + uint32_t dataSize; + const void* pData; +} VkWriteDescriptorSetInlineUniformBlock; + +typedef struct VkDescriptorPoolInlineUniformBlockCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t maxInlineUniformBlockBindings; +} VkDescriptorPoolInlineUniformBlockCreateInfo; + +typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures { + VkStructureType sType; + void* pNext; + VkBool32 textureCompressionASTC_HDR; +} VkPhysicalDeviceTextureCompressionASTCHDRFeatures; + +typedef struct VkRenderingAttachmentInfo { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkImageLayout imageLayout; + VkResolveModeFlagBits resolveMode; + VkImageView resolveImageView; + VkImageLayout resolveImageLayout; + VkAttachmentLoadOp loadOp; + VkAttachmentStoreOp storeOp; + VkClearValue clearValue; +} VkRenderingAttachmentInfo; + +typedef struct VkRenderingInfo { + VkStructureType sType; + const void* pNext; + VkRenderingFlags flags; + VkRect2D renderArea; + uint32_t layerCount; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkRenderingAttachmentInfo* pColorAttachments; + const VkRenderingAttachmentInfo* pDepthAttachment; + const VkRenderingAttachmentInfo* pStencilAttachment; +} VkRenderingInfo; + +typedef struct VkPipelineRenderingCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkPipelineRenderingCreateInfo; + +typedef struct VkPhysicalDeviceDynamicRenderingFeatures { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRendering; +} VkPhysicalDeviceDynamicRenderingFeatures; + +typedef struct VkCommandBufferInheritanceRenderingInfo { + VkStructureType sType; + const void* pNext; + VkRenderingFlags flags; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; + VkSampleCountFlagBits rasterizationSamples; +} VkCommandBufferInheritanceRenderingInfo; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderIntegerDotProduct; +} VkPhysicalDeviceShaderIntegerDotProductFeatures; + +typedef struct VkPhysicalDeviceShaderIntegerDotProductProperties { + VkStructureType sType; + void* pNext; + VkBool32 integerDotProduct8BitUnsignedAccelerated; + VkBool32 integerDotProduct8BitSignedAccelerated; + VkBool32 integerDotProduct8BitMixedSignednessAccelerated; + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated; + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProduct16BitUnsignedAccelerated; + VkBool32 integerDotProduct16BitSignedAccelerated; + VkBool32 integerDotProduct16BitMixedSignednessAccelerated; + VkBool32 integerDotProduct32BitUnsignedAccelerated; + VkBool32 integerDotProduct32BitSignedAccelerated; + VkBool32 integerDotProduct32BitMixedSignednessAccelerated; + VkBool32 integerDotProduct64BitUnsignedAccelerated; + VkBool32 integerDotProduct64BitSignedAccelerated; + VkBool32 integerDotProduct64BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated; + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated; +} VkPhysicalDeviceShaderIntegerDotProductProperties; + +typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties { + VkStructureType sType; + void* pNext; + VkDeviceSize storageTexelBufferOffsetAlignmentBytes; + VkBool32 storageTexelBufferOffsetSingleTexelAlignment; + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; +} VkPhysicalDeviceTexelBufferAlignmentProperties; + +typedef struct VkFormatProperties3 { + VkStructureType sType; + void* pNext; + VkFormatFeatureFlags2 linearTilingFeatures; + VkFormatFeatureFlags2 optimalTilingFeatures; + VkFormatFeatureFlags2 bufferFeatures; +} VkFormatProperties3; + +typedef struct VkPhysicalDeviceMaintenance4Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance4; +} VkPhysicalDeviceMaintenance4Features; + +typedef struct VkPhysicalDeviceMaintenance4Properties { + VkStructureType sType; + void* pNext; + VkDeviceSize maxBufferSize; +} VkPhysicalDeviceMaintenance4Properties; + +typedef struct VkDeviceBufferMemoryRequirements { + VkStructureType sType; + const void* pNext; + const VkBufferCreateInfo* pCreateInfo; +} VkDeviceBufferMemoryRequirements; + +typedef struct VkDeviceImageMemoryRequirements { + VkStructureType sType; + const void* pNext; + const VkImageCreateInfo* pCreateInfo; + VkImageAspectFlagBits planeAspect; +} VkDeviceImageMemoryRequirements; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolProperties)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlot)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); +typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlot)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +typedef void (VKAPI_PTR *PFN_vkGetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); +typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); +typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginRendering)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRendering)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdSetCullMode)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFace)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopology)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCount)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); +typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCount)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); +typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2)(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_vkCmdSetDepthTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnable)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOp)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnable)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOp)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnable)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnable)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); +typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirements)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot( + VkDevice device, + const VkPrivateDataSlotCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPrivateDataSlot* pPrivateDataSlot); + +VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot( + VkDevice device, + VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data); + +VKAPI_ATTR void VKAPI_CALL vkGetPrivateData( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask); + +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos); + +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2( + VkCommandBuffer commandBuffer, + const VkDependencyInfo* pDependencyInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query); + +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2( + VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2( + VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering( + VkCommandBuffer commandBuffer); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2( + 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 vkCmdSetDepthTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthWriteEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp( + VkCommandBuffer commandBuffer, + VkCompareOp depthCompareOp); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable( + VkCommandBuffer commandBuffer, + VkBool32 stencilTestEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable( + VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable( + VkCommandBuffer commandBuffer, + VkBool32 depthBiasEnable); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable( + VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements( + VkDevice device, + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +#endif + + +// VK_VERSION_1_4 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_4 1 +// Vulkan 1.4 version number +#define VK_API_VERSION_1_4 VK_MAKE_API_VERSION(0, 1, 4, 0)// Patch version should always be set to 0 + +#define VK_MAX_GLOBAL_PRIORITY_SIZE 16U + +typedef enum VkPipelineRobustnessBufferBehavior { + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessBufferBehavior; + +typedef enum VkPipelineRobustnessImageBehavior { + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessImageBehavior; + +typedef enum VkQueueGlobalPriority { + VK_QUEUE_GLOBAL_PRIORITY_LOW = 128, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM = 256, + VK_QUEUE_GLOBAL_PRIORITY_HIGH = 512, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME = 1024, + VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM = 0x7FFFFFFF +} VkQueueGlobalPriority; + +typedef enum VkLineRasterizationMode { + VK_LINE_RASTERIZATION_MODE_DEFAULT = 0, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR = 1, + VK_LINE_RASTERIZATION_MODE_BRESENHAM = 2, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH = 3, + VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkLineRasterizationMode; + +typedef enum VkMemoryUnmapFlagBits { + VK_MEMORY_UNMAP_RESERVE_BIT_EXT = 0x00000001, + VK_MEMORY_UNMAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryUnmapFlagBits; +typedef VkFlags VkMemoryUnmapFlags; +typedef VkFlags64 VkPipelineCreateFlags2; + +// Flag bits for VkPipelineCreateFlagBits2 +typedef VkFlags64 VkPipelineCreateFlagBits2; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT = 0x00000001ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT = 0x00000002ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT = 0x00000004ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT = 0x00000010ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT = 0x08000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT = 0x40000000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX = 0x100000000ULL; +#endif +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR = 0x00001000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_SPHERES_AND_LINEAR_SWEPT_SPHERES_BIT_NV = 0x200000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x400000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR = 0x00000001ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR = 0x00000002ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR = 0x00000004ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 0x00000008ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR = 0x00000010ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV = 0x00000020ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR = 0x00000040ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR = 0x00000100ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR = 0x00000200ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR = 0x00000800ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV = 0x00040000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT = 0x08000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT = 0x40000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM = 0x2000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 0x80000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT = 0x4000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE = 0x10000000000ULL; + +typedef VkFlags64 VkBufferUsageFlags2; + +// Flag bits for VkBufferUsageFlagBits2 +typedef VkFlags64 VkBufferUsageFlagBits2; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT = 0x00000001ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT = 0x00000002ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000008ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT = 0x00000010ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT = 0x00000020ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT = 0x00000040ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT = 0x00000080ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT = 0x00000100ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT = 0x00020000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 0x02000000ULL; +#endif +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR = 0x00000001ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR = 0x00000002ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000004ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR = 0x00000010ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR = 0x00000020ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR = 0x00000040ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR = 0x00000080ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = 0x00000100ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV = 0x00000400ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR = 0x00004000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR = 0x00020000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = 0x01000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM = 0x20000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM = 0x08000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT = 0x80000000ULL; + + +typedef enum VkHostImageCopyFlagBits { + VK_HOST_IMAGE_COPY_MEMCPY_BIT = 0x00000001, + // VK_HOST_IMAGE_COPY_MEMCPY is a deprecated alias + VK_HOST_IMAGE_COPY_MEMCPY = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_MEMCPY_BIT_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + // VK_HOST_IMAGE_COPY_MEMCPY_EXT is a deprecated alias + VK_HOST_IMAGE_COPY_MEMCPY_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkHostImageCopyFlagBits; +typedef VkFlags VkHostImageCopyFlags; +typedef struct VkPhysicalDeviceVulkan14Features { + VkStructureType sType; + void* pNext; + VkBool32 globalPriorityQuery; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; + VkBool32 shaderFloatControls2; + VkBool32 shaderExpectAssume; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; + VkBool32 indexTypeUint8; + VkBool32 dynamicRenderingLocalRead; + VkBool32 maintenance5; + VkBool32 maintenance6; + VkBool32 pipelineProtectedAccess; + VkBool32 pipelineRobustness; + VkBool32 hostImageCopy; + VkBool32 pushDescriptor; +} VkPhysicalDeviceVulkan14Features; + +typedef struct VkPhysicalDeviceVulkan14Properties { + VkStructureType sType; + void* pNext; + uint32_t lineSubPixelPrecisionBits; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; + uint32_t maxPushDescriptors; + VkBool32 dynamicRenderingLocalReadDepthStencilAttachments; + VkBool32 dynamicRenderingLocalReadMultisampledAttachments; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; + uint32_t copySrcLayoutCount; + VkImageLayout* pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout* pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceVulkan14Properties; + +typedef struct VkDeviceQueueGlobalPriorityCreateInfo { + VkStructureType sType; + const void* pNext; + VkQueueGlobalPriority globalPriority; +} VkDeviceQueueGlobalPriorityCreateInfo; + +typedef struct VkPhysicalDeviceGlobalPriorityQueryFeatures { + VkStructureType sType; + void* pNext; + VkBool32 globalPriorityQuery; +} VkPhysicalDeviceGlobalPriorityQueryFeatures; + +typedef struct VkQueueFamilyGlobalPriorityProperties { + VkStructureType sType; + void* pNext; + uint32_t priorityCount; + VkQueueGlobalPriority priorities[VK_MAX_GLOBAL_PRIORITY_SIZE]; +} VkQueueFamilyGlobalPriorityProperties; + +typedef struct VkPhysicalDeviceShaderSubgroupRotateFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; +} VkPhysicalDeviceShaderSubgroupRotateFeatures; + +typedef struct VkPhysicalDeviceShaderFloatControls2Features { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloatControls2; +} VkPhysicalDeviceShaderFloatControls2Features; + +typedef struct VkPhysicalDeviceShaderExpectAssumeFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderExpectAssume; +} VkPhysicalDeviceShaderExpectAssumeFeatures; + +typedef struct VkPhysicalDeviceLineRasterizationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; +} VkPhysicalDeviceLineRasterizationFeatures; + +typedef struct VkPhysicalDeviceLineRasterizationProperties { + VkStructureType sType; + void* pNext; + uint32_t lineSubPixelPrecisionBits; +} VkPhysicalDeviceLineRasterizationProperties; + +typedef struct VkPipelineRasterizationLineStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkLineRasterizationMode lineRasterizationMode; + VkBool32 stippledLineEnable; + uint32_t lineStippleFactor; + uint16_t lineStipplePattern; +} VkPipelineRasterizationLineStateCreateInfo; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorProperties { + VkStructureType sType; + void* pNext; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; +} VkPhysicalDeviceVertexAttributeDivisorProperties; + +typedef struct VkVertexInputBindingDivisorDescription { + uint32_t binding; + uint32_t divisor; +} VkVertexInputBindingDivisorDescription; + +typedef struct VkPipelineVertexInputDivisorStateCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t vertexBindingDivisorCount; + const VkVertexInputBindingDivisorDescription* pVertexBindingDivisors; +} VkPipelineVertexInputDivisorStateCreateInfo; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorFeatures { + VkStructureType sType; + void* pNext; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; +} VkPhysicalDeviceVertexAttributeDivisorFeatures; + +typedef struct VkPhysicalDeviceIndexTypeUint8Features { + VkStructureType sType; + void* pNext; + VkBool32 indexTypeUint8; +} VkPhysicalDeviceIndexTypeUint8Features; + +typedef struct VkMemoryMapInfo { + VkStructureType sType; + const void* pNext; + VkMemoryMapFlags flags; + VkDeviceMemory memory; + VkDeviceSize offset; + VkDeviceSize size; +} VkMemoryMapInfo; + +typedef struct VkMemoryUnmapInfo { + VkStructureType sType; + const void* pNext; + VkMemoryUnmapFlags flags; + VkDeviceMemory memory; +} VkMemoryUnmapInfo; + +typedef struct VkPhysicalDeviceMaintenance5Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance5; +} VkPhysicalDeviceMaintenance5Features; + +typedef struct VkPhysicalDeviceMaintenance5Properties { + VkStructureType sType; + void* pNext; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; +} VkPhysicalDeviceMaintenance5Properties; + +typedef struct VkRenderingAreaInfo { + VkStructureType sType; + const void* pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkRenderingAreaInfo; + +typedef struct VkImageSubresource2 { + VkStructureType sType; + void* pNext; + VkImageSubresource imageSubresource; +} VkImageSubresource2; + +typedef struct VkDeviceImageSubresourceInfo { + VkStructureType sType; + const void* pNext; + const VkImageCreateInfo* pCreateInfo; + const VkImageSubresource2* pSubresource; +} VkDeviceImageSubresourceInfo; + +typedef struct VkSubresourceLayout2 { + VkStructureType sType; + void* pNext; + VkSubresourceLayout subresourceLayout; +} VkSubresourceLayout2; + +typedef struct VkPipelineCreateFlags2CreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags2 flags; +} VkPipelineCreateFlags2CreateInfo; + +typedef struct VkBufferUsageFlags2CreateInfo { + VkStructureType sType; + const void* pNext; + VkBufferUsageFlags2 usage; +} VkBufferUsageFlags2CreateInfo; + +typedef struct VkPhysicalDevicePushDescriptorProperties { + VkStructureType sType; + void* pNext; + uint32_t maxPushDescriptors; +} VkPhysicalDevicePushDescriptorProperties; + +typedef struct VkPhysicalDeviceDynamicRenderingLocalReadFeatures { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRenderingLocalRead; +} VkPhysicalDeviceDynamicRenderingLocalReadFeatures; + +typedef struct VkRenderingAttachmentLocationInfo { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const uint32_t* pColorAttachmentLocations; +} VkRenderingAttachmentLocationInfo; + +typedef struct VkRenderingInputAttachmentIndexInfo { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const uint32_t* pColorAttachmentInputIndices; + const uint32_t* pDepthInputAttachmentIndex; + const uint32_t* pStencilInputAttachmentIndex; +} VkRenderingInputAttachmentIndexInfo; + +typedef struct VkPhysicalDeviceMaintenance6Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance6; +} VkPhysicalDeviceMaintenance6Features; + +typedef struct VkPhysicalDeviceMaintenance6Properties { + VkStructureType sType; + void* pNext; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; +} VkPhysicalDeviceMaintenance6Properties; + +typedef struct VkBindMemoryStatus { + VkStructureType sType; + const void* pNext; + VkResult* pResult; +} VkBindMemoryStatus; + +typedef struct VkBindDescriptorSetsInfo { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t descriptorSetCount; + const VkDescriptorSet* pDescriptorSets; + uint32_t dynamicOffsetCount; + const uint32_t* pDynamicOffsets; +} VkBindDescriptorSetsInfo; + +typedef struct VkPushConstantsInfo { + VkStructureType sType; + const void* pNext; + VkPipelineLayout layout; + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; + const void* pValues; +} VkPushConstantsInfo; + +typedef struct VkPushDescriptorSetInfo { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; + uint32_t descriptorWriteCount; + const VkWriteDescriptorSet* pDescriptorWrites; +} VkPushDescriptorSetInfo; + +typedef struct VkPushDescriptorSetWithTemplateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorUpdateTemplate descriptorUpdateTemplate; + VkPipelineLayout layout; + uint32_t set; + const void* pData; +} VkPushDescriptorSetWithTemplateInfo; + +typedef struct VkPhysicalDevicePipelineProtectedAccessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineProtectedAccess; +} VkPhysicalDevicePipelineProtectedAccessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineRobustness; +} VkPhysicalDevicePipelineRobustnessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessProperties { + VkStructureType sType; + void* pNext; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; +} VkPhysicalDevicePipelineRobustnessProperties; + +typedef struct VkPipelineRobustnessCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineRobustnessBufferBehavior storageBuffers; + VkPipelineRobustnessBufferBehavior uniformBuffers; + VkPipelineRobustnessBufferBehavior vertexInputs; + VkPipelineRobustnessImageBehavior images; +} VkPipelineRobustnessCreateInfo; + +typedef struct VkPhysicalDeviceHostImageCopyFeatures { + VkStructureType sType; + void* pNext; + VkBool32 hostImageCopy; +} VkPhysicalDeviceHostImageCopyFeatures; + +typedef struct VkPhysicalDeviceHostImageCopyProperties { + VkStructureType sType; + void* pNext; + uint32_t copySrcLayoutCount; + VkImageLayout* pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout* pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceHostImageCopyProperties; + +typedef struct VkMemoryToImageCopy { + VkStructureType sType; + const void* pNext; + const void* pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkMemoryToImageCopy; + +typedef struct VkImageToMemoryCopy { + VkStructureType sType; + const void* pNext; + void* pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkImageToMemoryCopy; + +typedef struct VkCopyMemoryToImageInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkMemoryToImageCopy* pRegions; +} VkCopyMemoryToImageInfo; + +typedef struct VkCopyImageToMemoryInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + uint32_t regionCount; + const VkImageToMemoryCopy* pRegions; +} VkCopyImageToMemoryInfo; + +typedef struct VkCopyImageToImageInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2* pRegions; +} VkCopyImageToImageInfo; + +typedef struct VkHostImageLayoutTransitionInfo { + VkStructureType sType; + const void* pNext; + VkImage image; + VkImageLayout oldLayout; + VkImageLayout newLayout; + VkImageSubresourceRange subresourceRange; +} VkHostImageLayoutTransitionInfo; + +typedef struct VkSubresourceHostMemcpySize { + VkStructureType sType; + void* pNext; + VkDeviceSize size; +} VkSubresourceHostMemcpySize; + +typedef struct VkHostImageCopyDevicePerformanceQuery { + VkStructureType sType; + void* pNext; + VkBool32 optimalDeviceAccess; + VkBool32 identicalMemoryLayout; +} VkHostImageCopyDevicePerformanceQuery; + +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStipple)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2)(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2)(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer2)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularity)(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayout)(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocations)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndices)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImage)(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemory)(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImage)(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayout)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); + +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData); + +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); + +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate( + VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( + VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2( + VkCommandBuffer commandBuffer, + const VkPushConstantsInfo* pPushConstantsInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions); +#endif + + +// VK_KHR_surface is a preprocessor guard. Do not pass it to API calls. +#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_FIFO_LATEST_READY_KHR = 1000361000, + VK_PRESENT_MODE_FIFO_LATEST_READY_EXT = VK_PRESENT_MODE_FIFO_LATEST_READY_KHR, + 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 is deprecated, but no reason was given in the API XML + 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_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, + // VK_COLORSPACE_SRGB_NONLINEAR_KHR is a deprecated alias + VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + // VK_COLOR_SPACE_DCI_P3_LINEAR_EXT is a deprecated alias + 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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( + VkInstance instance, + VkSurfaceKHR surface, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + VkSurfaceKHR surface, + VkBool32* pSupported); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); +#endif +#endif + + +// VK_KHR_swapchain is a preprocessor guard. Do not pass it to API calls. +#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_PRESENT_ID_2_BIT_KHR = 0x00000040, + VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR = 0x00000080, + VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR = 0x00000008, + VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT = VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR, + 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; + 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 void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator); +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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( + VkDevice device, + const VkSwapchainCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchain); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( + VkDevice device, + VkSwapchainKHR swapchain, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pSwapchainImageCount, + VkImage* pSwapchainImages); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint64_t timeout, + VkSemaphore semaphore, + VkFence fence, + uint32_t* pImageIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( + VkQueue queue, + const VkPresentInfoKHR* pPresentInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( + VkDevice device, + VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( + VkDevice device, + VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR* pModes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pRectCount, + VkRect2D* pRects); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( + VkDevice device, + const VkAcquireNextImageInfoKHR* pAcquireInfo, + uint32_t* pImageIndex); +#endif +#endif + + +// VK_KHR_display is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( + VkPhysicalDevice physicalDevice, + uint32_t planeIndex, + uint32_t* pDisplayCount, + VkDisplayKHR* pDisplays); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDisplayModeKHR* pMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( + VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_KHR_display_swapchain is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchains); +#endif +#endif + + +// VK_KHR_sampler_mirror_clamp_to_edge is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_sampler_mirror_clamp_to_edge 1 +#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3 +#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge" + + +// VK_KHR_video_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_queue 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) +#define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 8 +#define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue" + +typedef enum VkQueryResultStatusKHR { + VK_QUERY_RESULT_STATUS_ERROR_KHR = -1, + VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0, + VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1, + VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR = -1000299000, + VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkQueryResultStatusKHR; + +typedef enum VkVideoCodecOperationFlagBitsKHR { + VK_VIDEO_CODEC_OPERATION_NONE_KHR = 0, + VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR = 0x00010000, + VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR = 0x00020000, + VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR = 0x00000001, + VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR = 0x00000002, + VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR = 0x00000004, + VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR = 0x00040000, + VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR = 0x00000008, + VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCodecOperationFlagBitsKHR; +typedef VkFlags VkVideoCodecOperationFlagsKHR; + +typedef enum VkVideoChromaSubsamplingFlagBitsKHR { + VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR = 0, + VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001, + VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002, + VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004, + VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008, + VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoChromaSubsamplingFlagBitsKHR; +typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; + +typedef enum VkVideoComponentBitDepthFlagBitsKHR { + VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0, + VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001, + VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004, + VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010, + VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoComponentBitDepthFlagBitsKHR; +typedef VkFlags VkVideoComponentBitDepthFlagsKHR; + +typedef enum VkVideoCapabilityFlagBitsKHR { + VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR = 0x00000001, + VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002, + VK_VIDEO_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCapabilityFlagBitsKHR; +typedef VkFlags VkVideoCapabilityFlagsKHR; + +typedef enum VkVideoSessionCreateFlagBitsKHR { + VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR = 0x00000002, + VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR = 0x00000004, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000008, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x00000010, + VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR = 0x00000020, + VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionCreateFlagBitsKHR; +typedef VkFlags VkVideoSessionCreateFlagsKHR; + +typedef enum VkVideoSessionParametersCreateFlagBitsKHR { + VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR = 0x00000001, + VK_VIDEO_SESSION_PARAMETERS_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionParametersCreateFlagBitsKHR; +typedef VkFlags VkVideoSessionParametersCreateFlagsKHR; +typedef VkFlags VkVideoBeginCodingFlagsKHR; +typedef VkFlags VkVideoEndCodingFlagsKHR; + +typedef enum VkVideoCodingControlFlagBitsKHR { + VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001, + VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR = 0x00000002, + VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR = 0x00000004, + VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoCodingControlFlagBitsKHR; +typedef VkFlags VkVideoCodingControlFlagsKHR; +typedef struct VkQueueFamilyQueryResultStatusPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 queryResultStatusSupport; +} VkQueueFamilyQueryResultStatusPropertiesKHR; + +typedef struct VkQueueFamilyVideoPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoCodecOperationFlagsKHR videoCodecOperations; +} VkQueueFamilyVideoPropertiesKHR; + +typedef struct VkVideoProfileInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoCodecOperationFlagBitsKHR videoCodecOperation; + VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; + VkVideoComponentBitDepthFlagsKHR lumaBitDepth; + VkVideoComponentBitDepthFlagsKHR chromaBitDepth; +} VkVideoProfileInfoKHR; + +typedef struct VkVideoProfileListInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t profileCount; + const VkVideoProfileInfoKHR* pProfiles; +} VkVideoProfileListInfoKHR; + +typedef struct VkVideoCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoCapabilityFlagsKHR flags; + VkDeviceSize minBitstreamBufferOffsetAlignment; + VkDeviceSize minBitstreamBufferSizeAlignment; + VkExtent2D pictureAccessGranularity; + VkExtent2D minCodedExtent; + VkExtent2D maxCodedExtent; + uint32_t maxDpbSlots; + uint32_t maxActiveReferencePictures; + VkExtensionProperties stdHeaderVersion; +} VkVideoCapabilitiesKHR; + +typedef struct VkPhysicalDeviceVideoFormatInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageUsageFlags imageUsage; +} VkPhysicalDeviceVideoFormatInfoKHR; + +typedef struct VkVideoFormatPropertiesKHR { + VkStructureType sType; + void* pNext; + VkFormat format; + VkComponentMapping componentMapping; + VkImageCreateFlags imageCreateFlags; + VkImageType imageType; + VkImageTiling imageTiling; + VkImageUsageFlags imageUsageFlags; +} VkVideoFormatPropertiesKHR; + +typedef struct VkVideoPictureResourceInfoKHR { + VkStructureType sType; + const void* pNext; + VkOffset2D codedOffset; + VkExtent2D codedExtent; + uint32_t baseArrayLayer; + VkImageView imageViewBinding; +} VkVideoPictureResourceInfoKHR; + +typedef struct VkVideoReferenceSlotInfoKHR { + VkStructureType sType; + const void* pNext; + int32_t slotIndex; + const VkVideoPictureResourceInfoKHR* pPictureResource; +} VkVideoReferenceSlotInfoKHR; + +typedef struct VkVideoSessionMemoryRequirementsKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryBindIndex; + VkMemoryRequirements memoryRequirements; +} VkVideoSessionMemoryRequirementsKHR; + +typedef struct VkBindVideoSessionMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t memoryBindIndex; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + VkDeviceSize memorySize; +} VkBindVideoSessionMemoryInfoKHR; + +typedef struct VkVideoSessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + VkVideoSessionCreateFlagsKHR flags; + const VkVideoProfileInfoKHR* pVideoProfile; + VkFormat pictureFormat; + VkExtent2D maxCodedExtent; + VkFormat referencePictureFormat; + uint32_t maxDpbSlots; + uint32_t maxActiveReferencePictures; + const VkExtensionProperties* pStdHeaderVersion; +} VkVideoSessionCreateInfoKHR; + +typedef struct VkVideoSessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoSessionParametersCreateFlagsKHR flags; + VkVideoSessionParametersKHR videoSessionParametersTemplate; + VkVideoSessionKHR videoSession; +} VkVideoSessionParametersCreateInfoKHR; + +typedef struct VkVideoSessionParametersUpdateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t updateSequenceCount; +} VkVideoSessionParametersUpdateInfoKHR; + +typedef struct VkVideoBeginCodingInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoBeginCodingFlagsKHR flags; + VkVideoSessionKHR videoSession; + VkVideoSessionParametersKHR videoSessionParameters; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR* pReferenceSlots; +} VkVideoBeginCodingInfoKHR; + +typedef struct VkVideoEndCodingInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEndCodingFlagsKHR flags; +} VkVideoEndCodingInfoKHR; + +typedef struct VkVideoCodingControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoCodingControlFlagsKHR flags; +} VkVideoCodingControlInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileInfoKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession); +typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pMemoryRequirementsCount, VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t bindSessionMemoryInfoCount, const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos); +typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters); +typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); +typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo); +typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + const VkVideoProfileInfoKHR* pVideoProfile, + VkVideoCapabilitiesKHR* pCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, + uint32_t* pVideoFormatPropertyCount, + VkVideoFormatPropertiesKHR* pVideoFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( + VkDevice device, + const VkVideoSessionCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionKHR* pVideoSession); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t* pMemoryRequirementsCount, + VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( + VkDevice device, + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionParametersKHR* pVideoSessionParameters); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoBeginCodingInfoKHR* pBeginInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoEndCodingInfoKHR* pEndCodingInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoCodingControlInfoKHR* pCodingControlInfo); +#endif +#endif + + +// VK_KHR_video_decode_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_queue 1 +#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 8 +#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue" + +typedef enum VkVideoDecodeCapabilityFlagBitsKHR { + VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR = 0x00000001, + VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR = 0x00000002, + VK_VIDEO_DECODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeCapabilityFlagBitsKHR; +typedef VkFlags VkVideoDecodeCapabilityFlagsKHR; + +typedef enum VkVideoDecodeUsageFlagBitsKHR { + VK_VIDEO_DECODE_USAGE_DEFAULT_KHR = 0, + VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR = 0x00000001, + VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR = 0x00000002, + VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR = 0x00000004, + VK_VIDEO_DECODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeUsageFlagBitsKHR; +typedef VkFlags VkVideoDecodeUsageFlagsKHR; +typedef VkFlags VkVideoDecodeFlagsKHR; +typedef struct VkVideoDecodeCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoDecodeCapabilityFlagsKHR flags; +} VkVideoDecodeCapabilitiesKHR; + +typedef struct VkVideoDecodeUsageInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoDecodeUsageFlagsKHR videoUsageHints; +} VkVideoDecodeUsageInfoKHR; + +typedef struct VkVideoDecodeInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoDecodeFlagsKHR flags; + VkBuffer srcBuffer; + VkDeviceSize srcBufferOffset; + VkDeviceSize srcBufferRange; + VkVideoPictureResourceInfoKHR dstPictureResource; + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR* pReferenceSlots; +} VkVideoDecodeInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pDecodeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoDecodeInfoKHR* pDecodeInfo); +#endif +#endif + + +// VK_KHR_video_encode_h264 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_h264 1 +#include "vk_video/vulkan_video_codec_h264std.h" +#include "vk_video/vulkan_video_codec_h264std_encode.h" +#define VK_KHR_VIDEO_ENCODE_H264_SPEC_VERSION 14 +#define VK_KHR_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_KHR_video_encode_h264" + +typedef enum VkVideoEncodeH264CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H264_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H264_CAPABILITY_MB_QP_DIFF_WRAPAROUND_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeH264CapabilityFlagsKHR; + +typedef enum VkVideoEncodeH264StdFlagBitsKHR { + VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR = 0x00000800, + VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR = 0x00001000, + VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR = 0x00002000, + VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR = 0x00004000, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR = 0x00008000, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR = 0x00010000, + VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR = 0x00020000, + VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR = 0x00080000, + VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR = 0x00100000, + VK_VIDEO_ENCODE_H264_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeH264StdFlagsKHR; + +typedef enum VkVideoEncodeH264RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H264_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH264RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeH264RateControlFlagsKHR; +typedef struct VkVideoEncodeH264CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH264CapabilityFlagsKHR flags; + StdVideoH264LevelIdc maxLevelIdc; + uint32_t maxSliceCount; + uint32_t maxPPictureL0ReferenceCount; + uint32_t maxBPictureL0ReferenceCount; + uint32_t maxL1ReferenceCount; + uint32_t maxTemporalLayerCount; + VkBool32 expectDyadicTemporalLayerPattern; + int32_t minQp; + int32_t maxQp; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeH264CapabilitiesKHR; + +typedef struct VkVideoEncodeH264QpKHR { + int32_t qpI; + int32_t qpP; + int32_t qpB; +} VkVideoEncodeH264QpKHR; + +typedef struct VkVideoEncodeH264QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH264RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredIdrPeriod; + uint32_t preferredConsecutiveBFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeH264QpKHR preferredConstantQp; + uint32_t preferredMaxL0ReferenceCount; + uint32_t preferredMaxL1ReferenceCount; + VkBool32 preferredStdEntropyCodingModeFlag; +} VkVideoEncodeH264QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeH264SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevelIdc; + StdVideoH264LevelIdc maxLevelIdc; +} VkVideoEncodeH264SessionCreateInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdSPSCount; + const StdVideoH264SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH264PictureParameterSet* pStdPPSs; +} VkVideoEncodeH264SessionParametersAddInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoEncodeH264SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoEncodeH264SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersGetInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 writeStdSPS; + VkBool32 writeStdPPS; + uint32_t stdSPSId; + uint32_t stdPPSId; +} VkVideoEncodeH264SessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeH264SessionParametersFeedbackInfoKHR { + VkStructureType sType; + void* pNext; + VkBool32 hasStdSPSOverrides; + VkBool32 hasStdPPSOverrides; +} VkVideoEncodeH264SessionParametersFeedbackInfoKHR; + +typedef struct VkVideoEncodeH264NaluSliceInfoKHR { + VkStructureType sType; + const void* pNext; + int32_t constantQp; + const StdVideoEncodeH264SliceHeader* pStdSliceHeader; +} VkVideoEncodeH264NaluSliceInfoKHR; + +typedef struct VkVideoEncodeH264PictureInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t naluSliceEntryCount; + const VkVideoEncodeH264NaluSliceInfoKHR* pNaluSliceEntries; + const StdVideoEncodeH264PictureInfo* pStdPictureInfo; + VkBool32 generatePrefixNalu; +} VkVideoEncodeH264PictureInfoKHR; + +typedef struct VkVideoEncodeH264DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeH264ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeH264DpbSlotInfoKHR; + +typedef struct VkVideoEncodeH264ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH264ProfileIdc stdProfileIdc; +} VkVideoEncodeH264ProfileInfoKHR; + +typedef struct VkVideoEncodeH264RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeH264RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t idrPeriod; + uint32_t consecutiveBFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeH264RateControlInfoKHR; + +typedef struct VkVideoEncodeH264FrameSizeKHR { + uint32_t frameISize; + uint32_t framePSize; + uint32_t frameBSize; +} VkVideoEncodeH264FrameSizeKHR; + +typedef struct VkVideoEncodeH264RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQp; + VkVideoEncodeH264QpKHR minQp; + VkBool32 useMaxQp; + VkVideoEncodeH264QpKHR maxQp; + VkBool32 useMaxFrameSize; + VkVideoEncodeH264FrameSizeKHR maxFrameSize; +} VkVideoEncodeH264RateControlLayerInfoKHR; + +typedef struct VkVideoEncodeH264GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingI; + uint32_t gopRemainingP; + uint32_t gopRemainingB; +} VkVideoEncodeH264GopRemainingFrameInfoKHR; + + + +// VK_KHR_video_encode_h265 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_h265 1 +#include "vk_video/vulkan_video_codec_h265std.h" +#include "vk_video/vulkan_video_codec_h265std_encode.h" +#define VK_KHR_VIDEO_ENCODE_H265_SPEC_VERSION 14 +#define VK_KHR_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_KHR_video_encode_h265" + +typedef enum VkVideoEncodeH265CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR = 0x00000800, + VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265CapabilityFlagsKHR; + +typedef enum VkVideoEncodeH265StdFlagBitsKHR { + VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR = 0x00000040, + VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR = 0x00000080, + VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR = 0x00000400, + VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR = 0x00000800, + VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR = 0x00001000, + VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR = 0x00002000, + VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR = 0x00004000, + VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR = 0x00008000, + VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR = 0x00010000, + VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR = 0x00020000, + VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR = 0x00040000, + VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR = 0x00080000, + VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR = 0x00100000, + VK_VIDEO_ENCODE_H265_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265StdFlagsKHR; + +typedef enum VkVideoEncodeH265CtbSizeFlagBitsKHR { + VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265CtbSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265CtbSizeFlagsKHR; + +typedef enum VkVideoEncodeH265TransformBlockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265TransformBlockSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsKHR; + +typedef enum VkVideoEncodeH265RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_H265_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeH265RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeH265RateControlFlagsKHR; +typedef struct VkVideoEncodeH265CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265CapabilityFlagsKHR flags; + StdVideoH265LevelIdc maxLevelIdc; + uint32_t maxSliceSegmentCount; + VkExtent2D maxTiles; + VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes; + VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes; + uint32_t maxPPictureL0ReferenceCount; + uint32_t maxBPictureL0ReferenceCount; + uint32_t maxL1ReferenceCount; + uint32_t maxSubLayerCount; + VkBool32 expectDyadicTemporalSubLayerPattern; + int32_t minQp; + int32_t maxQp; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeH265CapabilitiesKHR; + +typedef struct VkVideoEncodeH265SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevelIdc; + StdVideoH265LevelIdc maxLevelIdc; +} VkVideoEncodeH265SessionCreateInfoKHR; + +typedef struct VkVideoEncodeH265QpKHR { + int32_t qpI; + int32_t qpP; + int32_t qpB; +} VkVideoEncodeH265QpKHR; + +typedef struct VkVideoEncodeH265QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredIdrPeriod; + uint32_t preferredConsecutiveBFrameCount; + uint32_t preferredSubLayerCount; + VkVideoEncodeH265QpKHR preferredConstantQp; + uint32_t preferredMaxL0ReferenceCount; + uint32_t preferredMaxL1ReferenceCount; +} VkVideoEncodeH265QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeH265SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdVPSCount; + const StdVideoH265VideoParameterSet* pStdVPSs; + uint32_t stdSPSCount; + const StdVideoH265SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH265PictureParameterSet* pStdPPSs; +} VkVideoEncodeH265SessionParametersAddInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdVPSCount; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoEncodeH265SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoEncodeH265SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersGetInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 writeStdVPS; + VkBool32 writeStdSPS; + VkBool32 writeStdPPS; + uint32_t stdVPSId; + uint32_t stdSPSId; + uint32_t stdPPSId; +} VkVideoEncodeH265SessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeH265SessionParametersFeedbackInfoKHR { + VkStructureType sType; + void* pNext; + VkBool32 hasStdVPSOverrides; + VkBool32 hasStdSPSOverrides; + VkBool32 hasStdPPSOverrides; +} VkVideoEncodeH265SessionParametersFeedbackInfoKHR; + +typedef struct VkVideoEncodeH265NaluSliceSegmentInfoKHR { + VkStructureType sType; + const void* pNext; + int32_t constantQp; + const StdVideoEncodeH265SliceSegmentHeader* pStdSliceSegmentHeader; +} VkVideoEncodeH265NaluSliceSegmentInfoKHR; + +typedef struct VkVideoEncodeH265PictureInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t naluSliceSegmentEntryCount; + const VkVideoEncodeH265NaluSliceSegmentInfoKHR* pNaluSliceSegmentEntries; + const StdVideoEncodeH265PictureInfo* pStdPictureInfo; +} VkVideoEncodeH265PictureInfoKHR; + +typedef struct VkVideoEncodeH265DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeH265ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeH265DpbSlotInfoKHR; + +typedef struct VkVideoEncodeH265ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH265ProfileIdc stdProfileIdc; +} VkVideoEncodeH265ProfileInfoKHR; + +typedef struct VkVideoEncodeH265RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeH265RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t idrPeriod; + uint32_t consecutiveBFrameCount; + uint32_t subLayerCount; +} VkVideoEncodeH265RateControlInfoKHR; + +typedef struct VkVideoEncodeH265FrameSizeKHR { + uint32_t frameISize; + uint32_t framePSize; + uint32_t frameBSize; +} VkVideoEncodeH265FrameSizeKHR; + +typedef struct VkVideoEncodeH265RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQp; + VkVideoEncodeH265QpKHR minQp; + VkBool32 useMaxQp; + VkVideoEncodeH265QpKHR maxQp; + VkBool32 useMaxFrameSize; + VkVideoEncodeH265FrameSizeKHR maxFrameSize; +} VkVideoEncodeH265RateControlLayerInfoKHR; + +typedef struct VkVideoEncodeH265GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingI; + uint32_t gopRemainingP; + uint32_t gopRemainingB; +} VkVideoEncodeH265GopRemainingFrameInfoKHR; + + + +// VK_KHR_video_decode_h264 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_h264 1 +#include "vk_video/vulkan_video_codec_h264std_decode.h" +#define VK_KHR_VIDEO_DECODE_H264_SPEC_VERSION 9 +#define VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME "VK_KHR_video_decode_h264" + +typedef enum VkVideoDecodeH264PictureLayoutFlagBitsKHR { + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR = 0, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR = 0x00000001, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR = 0x00000002, + VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoDecodeH264PictureLayoutFlagBitsKHR; +typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsKHR; +typedef struct VkVideoDecodeH264ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH264ProfileIdc stdProfileIdc; + VkVideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout; +} VkVideoDecodeH264ProfileInfoKHR; + +typedef struct VkVideoDecodeH264CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoH264LevelIdc maxLevelIdc; + VkOffset2D fieldOffsetGranularity; +} VkVideoDecodeH264CapabilitiesKHR; + +typedef struct VkVideoDecodeH264SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdSPSCount; + const StdVideoH264SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH264PictureParameterSet* pStdPPSs; +} VkVideoDecodeH264SessionParametersAddInfoKHR; + +typedef struct VkVideoDecodeH264SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoDecodeH264SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoDecodeH264SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeH264PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH264PictureInfo* pStdPictureInfo; + uint32_t sliceCount; + const uint32_t* pSliceOffsets; +} VkVideoDecodeH264PictureInfoKHR; + +typedef struct VkVideoDecodeH264DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH264ReferenceInfo* pStdReferenceInfo; +} VkVideoDecodeH264DpbSlotInfoKHR; + + + +// VK_KHR_dynamic_rendering is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_dynamic_rendering 1 +#define VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION 1 +#define VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME "VK_KHR_dynamic_rendering" +typedef VkRenderingFlags VkRenderingFlagsKHR; + +typedef VkRenderingFlagBits VkRenderingFlagBitsKHR; + +typedef VkRenderingInfo VkRenderingInfoKHR; + +typedef VkRenderingAttachmentInfo VkRenderingAttachmentInfoKHR; + +typedef VkPipelineRenderingCreateInfo VkPipelineRenderingCreateInfoKHR; + +typedef VkPhysicalDeviceDynamicRenderingFeatures VkPhysicalDeviceDynamicRenderingFeaturesKHR; + +typedef VkCommandBufferInheritanceRenderingInfo VkCommandBufferInheritanceRenderingInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderingKHR)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRenderingKHR)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR( + VkCommandBuffer commandBuffer); +#endif +#endif + + +// VK_KHR_multiview is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_multiview 1 +#define VK_KHR_MULTIVIEW_SPEC_VERSION 1 +#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview" +typedef VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR; + +typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR; + +typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR; + + + +// VK_KHR_get_physical_device_properties2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_get_physical_device_properties2 1 +#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2 +#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2" +typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR; + +typedef VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR; + +typedef VkFormatProperties2 VkFormatProperties2KHR; + +typedef VkImageFormatProperties2 VkImageFormatProperties2KHR; + +typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR; + +typedef VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR; + +typedef VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR; + +typedef VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR; + +typedef VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties); +#endif +#endif + + +// VK_KHR_device_group is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_device_group 1 +#define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4 +#define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group" +typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR; + +typedef VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR; + +typedef VkMemoryAllocateFlags VkMemoryAllocateFlagsKHR; + +typedef VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR; + +typedef VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR; + +typedef VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR; + +typedef VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR; + +typedef VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR; + +typedef VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR; + +typedef VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR; + +typedef VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); +typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( + VkCommandBuffer commandBuffer, + uint32_t deviceMask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( + VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); +#endif +#endif + + +// VK_KHR_shader_draw_parameters is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_draw_parameters 1 +#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1 +#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters" + + +// VK_KHR_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance1 1 +#define VK_KHR_MAINTENANCE_1_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_maintenance1" +// VK_KHR_MAINTENANCE1_SPEC_VERSION is a deprecated alias +#define VK_KHR_MAINTENANCE1_SPEC_VERSION VK_KHR_MAINTENANCE_1_SPEC_VERSION +// VK_KHR_MAINTENANCE1_EXTENSION_NAME is a deprecated alias +#define VK_KHR_MAINTENANCE1_EXTENSION_NAME VK_KHR_MAINTENANCE_1_EXTENSION_NAME +typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR; + +typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags); +#endif +#endif + + +// VK_KHR_device_group_creation is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_device_group_creation 1 +#define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1 +#define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation" +#define VK_MAX_DEVICE_GROUP_SIZE_KHR VK_MAX_DEVICE_GROUP_SIZE +typedef VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR; + +typedef VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( + VkInstance instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); +#endif +#endif + + +// VK_KHR_external_memory_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory_capabilities 1 +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities" +#define VK_LUID_SIZE_KHR VK_LUID_SIZE +typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR; + +typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR; + +typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR; + +typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR; + +typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR; + +typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR; + +typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR; + +typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR; + +typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR; + +typedef VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties); +#endif +#endif + + +// VK_KHR_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory 1 +#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory" +#define VK_QUEUE_FAMILY_EXTERNAL_KHR VK_QUEUE_FAMILY_EXTERNAL +typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR; + +typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR; + +typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR; + + + +// VK_KHR_external_memory_fd is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( + VkDevice device, + const VkMemoryGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + int fd, + VkMemoryFdPropertiesKHR* pMemoryFdProperties); +#endif +#endif + + +// VK_KHR_external_semaphore_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore_capabilities 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities" +typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR; + +typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR; + +typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR; + +typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR; + +typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR; + +typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +#endif +#endif + + +// VK_KHR_external_semaphore is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore" +typedef VkSemaphoreImportFlags VkSemaphoreImportFlagsKHR; + +typedef VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR; + +typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR; + + + +// VK_KHR_external_semaphore_fd is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( + VkDevice device, + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( + VkDevice device, + const VkSemaphoreGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif +#endif + + +// VK_KHR_push_descriptor is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_push_descriptor 1 +#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2 +#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" +typedef VkPhysicalDevicePushDescriptorProperties VkPhysicalDevicePushDescriptorPropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR( + VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData); +#endif +#endif + + +// VK_KHR_shader_float16_int8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_float16_int8 1 +#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8" +typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR; + +typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR; + + + +// VK_KHR_16bit_storage is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_16bit_storage 1 +#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" +typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR; + + + +// VK_KHR_incremental_present is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_incremental_present 1 +#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2 +#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; + + + +// VK_KHR_descriptor_update_template is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_descriptor_update_template 1 +typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR; + +#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1 +#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template" +typedef VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR; + +typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR; + +typedef VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR; + +typedef VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR( + VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void* pData); +#endif +#endif + + +// VK_KHR_imageless_framebuffer is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_imageless_framebuffer 1 +#define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1 +#define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer" +typedef VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR; + +typedef VkFramebufferAttachmentsCreateInfo VkFramebufferAttachmentsCreateInfoKHR; + +typedef VkFramebufferAttachmentImageInfo VkFramebufferAttachmentImageInfoKHR; + +typedef VkRenderPassAttachmentBeginInfo VkRenderPassAttachmentBeginInfoKHR; + + + +// VK_KHR_create_renderpass2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_create_renderpass2 1 +#define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1 +#define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2" +typedef VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR; + +typedef VkAttachmentDescription2 VkAttachmentDescription2KHR; + +typedef VkAttachmentReference2 VkAttachmentReference2KHR; + +typedef VkSubpassDescription2 VkSubpassDescription2KHR; + +typedef VkSubpassDependency2 VkSubpassDependency2KHR; + +typedef VkSubpassBeginInfo VkSubpassBeginInfoKHR; + +typedef VkSubpassEndInfo VkSubpassEndInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); +typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( + VkDevice device, + const VkRenderPassCreateInfo2* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + const VkSubpassBeginInfo* pSubpassBeginInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo* pSubpassBeginInfo, + const VkSubpassEndInfo* pSubpassEndInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo); +#endif +#endif + + +// VK_KHR_shared_presentable_image is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( + VkDevice device, + VkSwapchainKHR swapchain); +#endif +#endif + + +// VK_KHR_external_fence_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence_capabilities 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities" +typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR; + +typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR; + +typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR; + +typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR; + +typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR; + +typedef VkExternalFenceProperties VkExternalFencePropertiesKHR; + +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties); +#endif +#endif + + +// VK_KHR_external_fence is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence 1 +#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence" +typedef VkFenceImportFlags VkFenceImportFlagsKHR; + +typedef VkFenceImportFlagBits VkFenceImportFlagBitsKHR; + +typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR; + + + +// VK_KHR_external_fence_fd is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( + VkDevice device, + const VkImportFenceFdInfoKHR* pImportFenceFdInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( + VkDevice device, + const VkFenceGetFdInfoKHR* pGetFdInfo, + int* pFd); +#endif +#endif + + +// VK_KHR_performance_query is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_performance_query 1 +#define VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION 1 +#define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query" + +typedef enum VkPerformanceCounterUnitKHR { + VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0, + VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1, + VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2, + VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3, + VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4, + VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5, + VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6, + VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7, + VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8, + VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9, + VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10, + VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterUnitKHR; + +typedef enum VkPerformanceCounterScopeKHR { + VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0, + VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1, + VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2, + // VK_QUERY_SCOPE_COMMAND_BUFFER_KHR is a deprecated alias + VK_QUERY_SCOPE_COMMAND_BUFFER_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, + // VK_QUERY_SCOPE_RENDER_PASS_KHR is a deprecated alias + VK_QUERY_SCOPE_RENDER_PASS_KHR = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, + // VK_QUERY_SCOPE_COMMAND_KHR is a deprecated alias + VK_QUERY_SCOPE_COMMAND_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, + VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterScopeKHR; + +typedef enum VkPerformanceCounterStorageKHR { + VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0, + VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1, + VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2, + VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3, + VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4, + VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5, + VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterStorageKHR; + +typedef enum VkPerformanceCounterDescriptionFlagBitsKHR { + VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR = 0x00000001, + VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR = 0x00000002, + // VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR is a deprecated alias + VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, + // VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR is a deprecated alias + VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR, + VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPerformanceCounterDescriptionFlagBitsKHR; +typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; + +typedef enum VkAcquireProfilingLockFlagBitsKHR { + VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAcquireProfilingLockFlagBitsKHR; +typedef VkFlags VkAcquireProfilingLockFlagsKHR; +typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 performanceCounterQueryPools; + VkBool32 performanceCounterMultipleQueryPools; +} VkPhysicalDevicePerformanceQueryFeaturesKHR; + +typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 allowCommandBufferQueryCopies; +} VkPhysicalDevicePerformanceQueryPropertiesKHR; + +typedef struct VkPerformanceCounterKHR { + VkStructureType sType; + void* pNext; + VkPerformanceCounterUnitKHR unit; + VkPerformanceCounterScopeKHR scope; + VkPerformanceCounterStorageKHR storage; + uint8_t uuid[VK_UUID_SIZE]; +} VkPerformanceCounterKHR; + +typedef struct VkPerformanceCounterDescriptionKHR { + VkStructureType sType; + void* pNext; + VkPerformanceCounterDescriptionFlagsKHR flags; + char name[VK_MAX_DESCRIPTION_SIZE]; + char category[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; +} VkPerformanceCounterDescriptionKHR; + +typedef struct VkQueryPoolPerformanceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + uint32_t counterIndexCount; + const uint32_t* pCounterIndices; +} VkQueryPoolPerformanceCreateInfoKHR; + +typedef union VkPerformanceCounterResultKHR { + int32_t int32; + int64_t int64; + uint32_t uint32; + uint64_t uint64; + float float32; + double float64; +} VkPerformanceCounterResultKHR; + +typedef struct VkAcquireProfilingLockInfoKHR { + VkStructureType sType; + const void* pNext; + VkAcquireProfilingLockFlagsKHR flags; + uint64_t timeout; +} VkAcquireProfilingLockInfoKHR; + +typedef struct VkPerformanceQuerySubmitInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t counterPassIndex; +} VkPerformanceQuerySubmitInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterKHR* pCounters, VkPerformanceCounterDescriptionKHR* pCounterDescriptions); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)(VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, uint32_t* pNumPasses); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireProfilingLockKHR)(VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkReleaseProfilingLockKHR)(VkDevice device); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterKHR* pCounters, + VkPerformanceCounterDescriptionKHR* pCounterDescriptions); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + VkPhysicalDevice physicalDevice, + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, + uint32_t* pNumPasses); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( + VkDevice device, + const VkAcquireProfilingLockInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( + VkDevice device); +#endif +#endif + + +// VK_KHR_maintenance2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance2 1 +#define VK_KHR_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_maintenance2" +// VK_KHR_MAINTENANCE2_SPEC_VERSION is a deprecated alias +#define VK_KHR_MAINTENANCE2_SPEC_VERSION VK_KHR_MAINTENANCE_2_SPEC_VERSION +// VK_KHR_MAINTENANCE2_EXTENSION_NAME is a deprecated alias +#define VK_KHR_MAINTENANCE2_EXTENSION_NAME VK_KHR_MAINTENANCE_2_EXTENSION_NAME +typedef VkPointClippingBehavior VkPointClippingBehaviorKHR; + +typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR; + +typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR; + +typedef VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR; + +typedef VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR; + +typedef VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR; + +typedef VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR; + + + +// VK_KHR_get_surface_capabilities2 is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats); +#endif +#endif + + +// VK_KHR_variable_pointers is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_variable_pointers 1 +#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1 +#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers" +typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR; + +typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR; + + + +// VK_KHR_get_display_properties2 is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayProperties2KHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlaneProperties2KHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display, + uint32_t* pPropertyCount, + VkDisplayModeProperties2KHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR* pCapabilities); +#endif +#endif + + +// VK_KHR_dedicated_allocation is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_dedicated_allocation 1 +#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 +#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" +typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR; + +typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR; + + + +// VK_KHR_storage_buffer_storage_class is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_storage_buffer_storage_class 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1 +#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" + + +// VK_KHR_shader_bfloat16 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_bfloat16 1 +#define VK_KHR_SHADER_BFLOAT16_SPEC_VERSION 1 +#define VK_KHR_SHADER_BFLOAT16_EXTENSION_NAME "VK_KHR_shader_bfloat16" +typedef struct VkPhysicalDeviceShaderBfloat16FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderBFloat16Type; + VkBool32 shaderBFloat16DotProduct; + VkBool32 shaderBFloat16CooperativeMatrix; +} VkPhysicalDeviceShaderBfloat16FeaturesKHR; + + + +// VK_KHR_relaxed_block_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_relaxed_block_layout 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout" + + +// VK_KHR_get_memory_requirements2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_get_memory_requirements2 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 +#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" +typedef VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR; + +typedef VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR; + +typedef VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR; + +typedef VkMemoryRequirements2 VkMemoryRequirements2KHR; + +typedef VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR; + +typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +#endif +#endif + + +// VK_KHR_image_format_list is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_image_format_list 1 +#define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1 +#define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list" +typedef VkImageFormatListCreateInfo VkImageFormatListCreateInfoKHR; + + + +// VK_KHR_sampler_ycbcr_conversion is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_sampler_ycbcr_conversion 1 +typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR; + +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14 +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" +typedef VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR; + +typedef VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR; + +typedef VkChromaLocation VkChromaLocationKHR; + +typedef VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR; + +typedef VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR; + +typedef VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR; + +typedef VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR; + +typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR; + +typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); +typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( + VkDevice device, + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSamplerYcbcrConversion* pYcbcrConversion); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( + VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks* pAllocator); +#endif +#endif + + +// VK_KHR_bind_memory2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_bind_memory2 1 +#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2" +typedef VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR; + +typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); +typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfo* pBindInfos); +#endif +#endif + + +// VK_KHR_maintenance3 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance3 1 +#define VK_KHR_MAINTENANCE_3_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_3_EXTENSION_NAME "VK_KHR_maintenance3" +// VK_KHR_MAINTENANCE3_SPEC_VERSION is a deprecated alias +#define VK_KHR_MAINTENANCE3_SPEC_VERSION VK_KHR_MAINTENANCE_3_SPEC_VERSION +// VK_KHR_MAINTENANCE3_EXTENSION_NAME is a deprecated alias +#define VK_KHR_MAINTENANCE3_EXTENSION_NAME VK_KHR_MAINTENANCE_3_EXTENSION_NAME +typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR; + +typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR; + +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport); +#endif +#endif + + +// VK_KHR_draw_indirect_count is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_draw_indirect_count 1 +#define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1 +#define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count" +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + + +// VK_KHR_shader_subgroup_extended_types is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_subgroup_extended_types 1 +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1 +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types" +typedef VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR; + + + +// VK_KHR_8bit_storage is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_8bit_storage 1 +#define VK_KHR_8BIT_STORAGE_SPEC_VERSION 1 +#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage" +typedef VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR; + + + +// VK_KHR_shader_atomic_int64 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_atomic_int64 1 +#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1 +#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64" +typedef VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR; + + + +// VK_KHR_shader_clock is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_KHR_video_decode_h265 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_h265 1 +#include "vk_video/vulkan_video_codec_h265std_decode.h" +#define VK_KHR_VIDEO_DECODE_H265_SPEC_VERSION 8 +#define VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME "VK_KHR_video_decode_h265" +typedef struct VkVideoDecodeH265ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoH265ProfileIdc stdProfileIdc; +} VkVideoDecodeH265ProfileInfoKHR; + +typedef struct VkVideoDecodeH265CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoH265LevelIdc maxLevelIdc; +} VkVideoDecodeH265CapabilitiesKHR; + +typedef struct VkVideoDecodeH265SessionParametersAddInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t stdVPSCount; + const StdVideoH265VideoParameterSet* pStdVPSs; + uint32_t stdSPSCount; + const StdVideoH265SequenceParameterSet* pStdSPSs; + uint32_t stdPPSCount; + const StdVideoH265PictureParameterSet* pStdPPSs; +} VkVideoDecodeH265SessionParametersAddInfoKHR; + +typedef struct VkVideoDecodeH265SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxStdVPSCount; + uint32_t maxStdSPSCount; + uint32_t maxStdPPSCount; + const VkVideoDecodeH265SessionParametersAddInfoKHR* pParametersAddInfo; +} VkVideoDecodeH265SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeH265PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH265PictureInfo* pStdPictureInfo; + uint32_t sliceSegmentCount; + const uint32_t* pSliceSegmentOffsets; +} VkVideoDecodeH265PictureInfoKHR; + +typedef struct VkVideoDecodeH265DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeH265ReferenceInfo* pStdReferenceInfo; +} VkVideoDecodeH265DpbSlotInfoKHR; + + + +// VK_KHR_global_priority is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_global_priority 1 +#define VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION 1 +#define VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME "VK_KHR_global_priority" +#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR VK_MAX_GLOBAL_PRIORITY_SIZE +typedef VkQueueGlobalPriority VkQueueGlobalPriorityKHR; + +typedef VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoKHR; + +typedef VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; + +typedef VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesKHR; + + + +// VK_KHR_driver_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_driver_properties 1 +#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1 +#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties" +#define VK_MAX_DRIVER_NAME_SIZE_KHR VK_MAX_DRIVER_NAME_SIZE +#define VK_MAX_DRIVER_INFO_SIZE_KHR VK_MAX_DRIVER_INFO_SIZE +typedef VkDriverId VkDriverIdKHR; + +typedef VkConformanceVersion VkConformanceVersionKHR; + +typedef VkPhysicalDeviceDriverProperties VkPhysicalDeviceDriverPropertiesKHR; + + + +// VK_KHR_shader_float_controls is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_float_controls 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4 +#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls" +typedef VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR; + +typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR; + + + +// VK_KHR_depth_stencil_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_depth_stencil_resolve 1 +#define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1 +#define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve" +typedef VkResolveModeFlagBits VkResolveModeFlagBitsKHR; + +typedef VkResolveModeFlags VkResolveModeFlagsKHR; + +typedef VkSubpassDescriptionDepthStencilResolve VkSubpassDescriptionDepthStencilResolveKHR; + +typedef VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR; + + + +// VK_KHR_swapchain_mutable_format is a preprocessor guard. Do not pass it to API calls. +#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" + + +// VK_KHR_timeline_semaphore is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_timeline_semaphore 1 +#define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2 +#define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore" +typedef VkSemaphoreType VkSemaphoreTypeKHR; + +typedef VkSemaphoreWaitFlagBits VkSemaphoreWaitFlagBitsKHR; + +typedef VkSemaphoreWaitFlags VkSemaphoreWaitFlagsKHR; + +typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR; + +typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR; + +typedef VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR; + +typedef VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR; + +typedef VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR; + +typedef VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); +typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); +typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( + VkDevice device, + VkSemaphore semaphore, + uint64_t* pValue); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( + VkDevice device, + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( + VkDevice device, + const VkSemaphoreSignalInfo* pSignalInfo); +#endif +#endif + + +// VK_KHR_vulkan_memory_model is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_vulkan_memory_model 1 +#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3 +#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model" +typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR; + + + +// VK_KHR_shader_terminate_invocation is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceShaderTerminateInvocationFeatures VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR; + + + +// VK_KHR_fragment_shading_rate is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_fragment_shading_rate 1 +#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 2 +#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 struct VkRenderingFragmentShadingRateAttachmentInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkImageLayout imageLayout; + VkExtent2D shadingRateAttachmentTexelSize; +} VkRenderingFragmentShadingRateAttachmentInfoKHR; + +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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pFragmentShadingRateCount, + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( + VkCommandBuffer commandBuffer, + const VkExtent2D* pFragmentSize, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); +#endif +#endif + + +// VK_KHR_dynamic_rendering_local_read is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_dynamic_rendering_local_read 1 +#define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION 1 +#define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME "VK_KHR_dynamic_rendering_local_read" +typedef VkPhysicalDeviceDynamicRenderingLocalReadFeatures VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR; + +typedef VkRenderingAttachmentLocationInfo VkRenderingAttachmentLocationInfoKHR; + +typedef VkRenderingInputAttachmentIndexInfo VkRenderingInputAttachmentIndexInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocationsKHR)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); +#endif +#endif + + +// VK_KHR_shader_quad_control is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_quad_control 1 +#define VK_KHR_SHADER_QUAD_CONTROL_SPEC_VERSION 1 +#define VK_KHR_SHADER_QUAD_CONTROL_EXTENSION_NAME "VK_KHR_shader_quad_control" +typedef struct VkPhysicalDeviceShaderQuadControlFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderQuadControl; +} VkPhysicalDeviceShaderQuadControlFeaturesKHR; + + + +// VK_KHR_spirv_1_4 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_spirv_1_4 1 +#define VK_KHR_SPIRV_1_4_SPEC_VERSION 1 +#define VK_KHR_SPIRV_1_4_EXTENSION_NAME "VK_KHR_spirv_1_4" + + +// VK_KHR_surface_protected_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_surface_protected_capabilities 1 +#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1 +#define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities" +typedef struct VkSurfaceProtectedCapabilitiesKHR { + VkStructureType sType; + const void* pNext; + VkBool32 supportsProtected; +} VkSurfaceProtectedCapabilitiesKHR; + + + +// VK_KHR_separate_depth_stencil_layouts is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_separate_depth_stencil_layouts 1 +#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "VK_KHR_separate_depth_stencil_layouts" +typedef VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR; + +typedef VkAttachmentReferenceStencilLayout VkAttachmentReferenceStencilLayoutKHR; + +typedef VkAttachmentDescriptionStencilLayout VkAttachmentDescriptionStencilLayoutKHR; + + + +// VK_KHR_present_wait is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_wait 1 +#define VK_KHR_PRESENT_WAIT_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_EXTENSION_NAME "VK_KHR_present_wait" +typedef struct VkPhysicalDevicePresentWaitFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait; +} VkPhysicalDevicePresentWaitFeaturesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresentKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t presentId, uint64_t timeout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresentKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint64_t presentId, + uint64_t timeout); +#endif +#endif + + +// VK_KHR_uniform_buffer_standard_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_uniform_buffer_standard_layout 1 +#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout" +typedef VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR; + + + +// VK_KHR_buffer_device_address is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_buffer_device_address 1 +#define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1 +#define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address" +typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR; + +typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR; + +typedef VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR; + +typedef VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR; + +typedef VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR; + +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( + VkDevice device, + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); +#endif +#endif + + +// VK_KHR_deferred_host_operations is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_deferred_host_operations 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) +#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4 +#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations" +typedef VkResult (VKAPI_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation); +typedef void (VKAPI_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator); +typedef uint32_t (VKAPI_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef VkResult (VKAPI_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation); +typedef VkResult (VKAPI_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( + VkDevice device, + const VkAllocationCallbacks* pAllocator, + VkDeferredOperationKHR* pDeferredOperation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( + VkDevice device, + VkDeferredOperationKHR operation, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( + VkDevice device, + VkDeferredOperationKHR operation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( + VkDevice device, + VkDeferredOperationKHR operation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( + VkDevice device, + VkDeferredOperationKHR operation); +#endif +#endif + + +// VK_KHR_pipeline_executable_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_pipeline_executable_properties 1 +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties" + +typedef enum VkPipelineExecutableStatisticFormatKHR { + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3, + VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPipelineExecutableStatisticFormatKHR; +typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineExecutableInfo; +} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + +typedef struct VkPipelineInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipeline pipeline; +} VkPipelineInfoKHR; + +typedef struct VkPipelineExecutablePropertiesKHR { + VkStructureType sType; + void* pNext; + VkShaderStageFlags stages; + char name[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; + uint32_t subgroupSize; +} VkPipelineExecutablePropertiesKHR; + +typedef struct VkPipelineExecutableInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipeline pipeline; + uint32_t executableIndex; +} VkPipelineExecutableInfoKHR; + +typedef union VkPipelineExecutableStatisticValueKHR { + VkBool32 b32; + int64_t i64; + uint64_t u64; + double f64; +} VkPipelineExecutableStatisticValueKHR; + +typedef struct VkPipelineExecutableStatisticKHR { + VkStructureType sType; + void* pNext; + char name[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; + VkPipelineExecutableStatisticFormatKHR format; + VkPipelineExecutableStatisticValueKHR value; +} VkPipelineExecutableStatisticKHR; + +typedef struct VkPipelineExecutableInternalRepresentationKHR { + VkStructureType sType; + void* pNext; + char name[VK_MAX_DESCRIPTION_SIZE]; + char description[VK_MAX_DESCRIPTION_SIZE]; + VkBool32 isText; + size_t dataSize; + void* pData; +} VkPipelineExecutableInternalRepresentationKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( + VkDevice device, + const VkPipelineInfoKHR* pPipelineInfo, + uint32_t* pExecutableCount, + VkPipelineExecutablePropertiesKHR* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( + VkDevice device, + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pStatisticCount, + VkPipelineExecutableStatisticKHR* pStatistics); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR( + VkDevice device, + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pInternalRepresentationCount, + VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); +#endif +#endif + + +// VK_KHR_map_memory2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_map_memory2 1 +#define VK_KHR_MAP_MEMORY_2_SPEC_VERSION 1 +#define VK_KHR_MAP_MEMORY_2_EXTENSION_NAME "VK_KHR_map_memory2" +typedef VkMemoryUnmapFlagBits VkMemoryUnmapFlagBitsKHR; + +typedef VkMemoryUnmapFlags VkMemoryUnmapFlagsKHR; + +typedef VkMemoryMapInfo VkMemoryMapInfoKHR; + +typedef VkMemoryUnmapInfo VkMemoryUnmapInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2KHR)(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2KHR)(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo); +#endif +#endif + + +// VK_KHR_shader_integer_dot_product is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_integer_dot_product 1 +#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1 +#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product" +typedef VkPhysicalDeviceShaderIntegerDotProductFeatures VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR; + +typedef VkPhysicalDeviceShaderIntegerDotProductProperties VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR; + + + +// VK_KHR_pipeline_library is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_pipeline_library 1 +#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library" +typedef struct VkPipelineLibraryCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t libraryCount; + const VkPipeline* pLibraries; +} VkPipelineLibraryCreateInfoKHR; + + + +// VK_KHR_shader_non_semantic_info is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_non_semantic_info 1 +#define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1 +#define VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME "VK_KHR_shader_non_semantic_info" + + +// VK_KHR_present_id is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_id 1 +#define VK_KHR_PRESENT_ID_SPEC_VERSION 1 +#define VK_KHR_PRESENT_ID_EXTENSION_NAME "VK_KHR_present_id" +typedef struct VkPresentIdKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const uint64_t* pPresentIds; +} VkPresentIdKHR; + +typedef struct VkPhysicalDevicePresentIdFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId; +} VkPhysicalDevicePresentIdFeaturesKHR; + + + +// VK_KHR_video_encode_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_queue 1 +#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 12 +#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue" + +typedef enum VkVideoEncodeTuningModeKHR { + VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR = 1, + VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR = 2, + VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR = 3, + VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR = 4, + VK_VIDEO_ENCODE_TUNING_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeTuningModeKHR; + +typedef enum VkVideoEncodeFlagBitsKHR { + VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFlagBitsKHR; +typedef VkFlags VkVideoEncodeFlagsKHR; + +typedef enum VkVideoEncodeCapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeCapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; + +typedef enum VkVideoEncodeRateControlModeFlagBitsKHR { + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeRateControlModeFlagBitsKHR; +typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; + +typedef enum VkVideoEncodeFeedbackFlagBitsKHR { + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_FEEDBACK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFeedbackFlagBitsKHR; +typedef VkFlags VkVideoEncodeFeedbackFlagsKHR; + +typedef enum VkVideoEncodeUsageFlagBitsKHR { + VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_USAGE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeUsageFlagBitsKHR; +typedef VkFlags VkVideoEncodeUsageFlagsKHR; + +typedef enum VkVideoEncodeContentFlagBitsKHR { + VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR = 0, + VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_CONTENT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeContentFlagBitsKHR; +typedef VkFlags VkVideoEncodeContentFlagsKHR; +typedef VkFlags VkVideoEncodeRateControlFlagsKHR; +typedef struct VkVideoEncodeInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeFlagsKHR flags; + VkBuffer dstBuffer; + VkDeviceSize dstBufferOffset; + VkDeviceSize dstBufferRange; + VkVideoPictureResourceInfoKHR srcPictureResource; + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot; + uint32_t referenceSlotCount; + const VkVideoReferenceSlotInfoKHR* pReferenceSlots; + uint32_t precedingExternallyEncodedBytes; +} VkVideoEncodeInfoKHR; + +typedef struct VkVideoEncodeCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeCapabilityFlagsKHR flags; + VkVideoEncodeRateControlModeFlagsKHR rateControlModes; + uint32_t maxRateControlLayers; + uint64_t maxBitrate; + uint32_t maxQualityLevels; + VkExtent2D encodeInputPictureGranularity; + VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags; +} VkVideoEncodeCapabilitiesKHR; + +typedef struct VkQueryPoolVideoEncodeFeedbackCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeFeedbackFlagsKHR encodeFeedbackFlags; +} VkQueryPoolVideoEncodeFeedbackCreateInfoKHR; + +typedef struct VkVideoEncodeUsageInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeUsageFlagsKHR videoUsageHints; + VkVideoEncodeContentFlagsKHR videoContentHints; + VkVideoEncodeTuningModeKHR tuningMode; +} VkVideoEncodeUsageInfoKHR; + +typedef struct VkVideoEncodeRateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + uint64_t averageBitrate; + uint64_t maxBitrate; + uint32_t frameRateNumerator; + uint32_t frameRateDenominator; +} VkVideoEncodeRateControlLayerInfoKHR; + +typedef struct VkVideoEncodeRateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeRateControlFlagsKHR flags; + VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode; + uint32_t layerCount; + const VkVideoEncodeRateControlLayerInfoKHR* pLayers; + uint32_t virtualBufferSizeInMs; + uint32_t initialVirtualBufferSizeInMs; +} VkVideoEncodeRateControlInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR { + VkStructureType sType; + const void* pNext; + const VkVideoProfileInfoKHR* pVideoProfile; + uint32_t qualityLevel; +} VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR; + +typedef struct VkVideoEncodeQualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode; + uint32_t preferredRateControlLayerCount; +} VkVideoEncodeQualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeQualityLevelInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t qualityLevel; +} VkVideoEncodeQualityLevelInfoKHR; + +typedef struct VkVideoEncodeSessionParametersGetInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoSessionParametersKHR videoSessionParameters; +} VkVideoEncodeSessionParametersGetInfoKHR; + +typedef struct VkVideoEncodeSessionParametersFeedbackInfoKHR { + VkStructureType sType; + void* pNext; + VkBool32 hasOverrides; +} VkVideoEncodeSessionParametersFeedbackInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetEncodedVideoSessionParametersKHR)(VkDevice device, const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, size_t* pDataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetEncodedVideoSessionParametersKHR( + VkDevice device, + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, + VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, + size_t* pDataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoEncodeInfoKHR* pEncodeInfo); +#endif +#endif + + +// VK_KHR_synchronization2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_synchronization2 1 +#define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1 +#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2" +typedef VkPipelineStageFlags2 VkPipelineStageFlags2KHR; + +typedef VkPipelineStageFlagBits2 VkPipelineStageFlagBits2KHR; + +typedef VkAccessFlags2 VkAccessFlags2KHR; + +typedef VkAccessFlagBits2 VkAccessFlagBits2KHR; + +typedef VkSubmitFlagBits VkSubmitFlagBitsKHR; + +typedef VkSubmitFlags VkSubmitFlagsKHR; + +typedef VkMemoryBarrier2 VkMemoryBarrier2KHR; + +typedef VkBufferMemoryBarrier2 VkBufferMemoryBarrier2KHR; + +typedef VkImageMemoryBarrier2 VkImageMemoryBarrier2KHR; + +typedef VkDependencyInfo VkDependencyInfoKHR; + +typedef VkSubmitInfo2 VkSubmitInfo2KHR; + +typedef VkSemaphoreSubmitInfo VkSemaphoreSubmitInfoKHR; + +typedef VkCommandBufferSubmitInfo VkCommandBufferSubmitInfoKHR; + +typedef VkPhysicalDeviceSynchronization2Features VkPhysicalDeviceSynchronization2FeaturesKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask); +typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos); +typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( + VkCommandBuffer commandBuffer, + const VkDependencyInfo* pDependencyInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence); +#endif +#endif + + +// VK_KHR_fragment_shader_barycentric is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_fragment_shader_barycentric 1 +#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 +#define VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_KHR_fragment_shader_barycentric" +typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 fragmentShaderBarycentric; +} VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + +typedef struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 triStripVertexOrderIndependentOfProvokingVertex; +} VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + + + +// VK_KHR_shader_subgroup_uniform_control_flow is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_subgroup_uniform_control_flow 1 +#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION 1 +#define VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME "VK_KHR_shader_subgroup_uniform_control_flow" +typedef struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupUniformControlFlow; +} VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + + + +// VK_KHR_zero_initialize_workgroup_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_zero_initialize_workgroup_memory 1 +#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1 +#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory" +typedef VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR; + + + +// VK_KHR_workgroup_memory_explicit_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_workgroup_memory_explicit_layout 1 +#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1 +#define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout" +typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 workgroupMemoryExplicitLayout; + VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout; + VkBool32 workgroupMemoryExplicitLayout8BitAccess; + VkBool32 workgroupMemoryExplicitLayout16BitAccess; +} VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + + + +// VK_KHR_copy_commands2 is a preprocessor guard. Do not pass it to API calls. +#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 VkCopyBufferInfo2 VkCopyBufferInfo2KHR; + +typedef VkCopyImageInfo2 VkCopyImageInfo2KHR; + +typedef VkCopyBufferToImageInfo2 VkCopyBufferToImageInfo2KHR; + +typedef VkCopyImageToBufferInfo2 VkCopyImageToBufferInfo2KHR; + +typedef VkBlitImageInfo2 VkBlitImageInfo2KHR; + +typedef VkResolveImageInfo2 VkResolveImageInfo2KHR; + +typedef VkBufferCopy2 VkBufferCopy2KHR; + +typedef VkImageCopy2 VkImageCopy2KHR; + +typedef VkImageBlit2 VkImageBlit2KHR; + +typedef VkBufferImageCopy2 VkBufferImageCopy2KHR; + +typedef VkImageResolve2 VkImageResolve2KHR; + +typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo); +typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo); +#endif +#endif + + +// VK_KHR_format_feature_flags2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_format_feature_flags2 1 +#define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 2 +#define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2" +typedef VkFormatFeatureFlags2 VkFormatFeatureFlags2KHR; + +typedef VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2KHR; + +typedef VkFormatProperties3 VkFormatProperties3KHR; + + + +// VK_KHR_ray_tracing_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_tracing_maintenance1 1 +#define VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_ray_tracing_maintenance1" +typedef struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingMaintenance1; + VkBool32 rayTracingPipelineTraceRaysIndirect2; +} VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; + +typedef struct VkTraceRaysIndirectCommand2KHR { + VkDeviceAddress raygenShaderRecordAddress; + VkDeviceSize raygenShaderRecordSize; + VkDeviceAddress missShaderBindingTableAddress; + VkDeviceSize missShaderBindingTableSize; + VkDeviceSize missShaderBindingTableStride; + VkDeviceAddress hitShaderBindingTableAddress; + VkDeviceSize hitShaderBindingTableSize; + VkDeviceSize hitShaderBindingTableStride; + VkDeviceAddress callableShaderBindingTableAddress; + VkDeviceSize callableShaderBindingTableSize; + VkDeviceSize callableShaderBindingTableStride; + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommand2KHR; + +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirect2KHR)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirect2KHR( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectDeviceAddress); +#endif +#endif + + +// VK_KHR_portability_enumeration is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_portability_enumeration 1 +#define VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION 1 +#define VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME "VK_KHR_portability_enumeration" + + +// VK_KHR_maintenance4 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance4 1 +#define VK_KHR_MAINTENANCE_4_SPEC_VERSION 2 +#define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4" +typedef VkPhysicalDeviceMaintenance4Features VkPhysicalDeviceMaintenance4FeaturesKHR; + +typedef VkPhysicalDeviceMaintenance4Properties VkPhysicalDeviceMaintenance4PropertiesKHR; + +typedef VkDeviceBufferMemoryRequirements VkDeviceBufferMemoryRequirementsKHR; + +typedef VkDeviceImageMemoryRequirements VkDeviceImageMemoryRequirementsKHR; + +typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirementsKHR)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR( + VkDevice device, + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); +#endif +#endif + + +// VK_KHR_shader_subgroup_rotate is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_subgroup_rotate 1 +#define VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION 2 +#define VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME "VK_KHR_shader_subgroup_rotate" +typedef VkPhysicalDeviceShaderSubgroupRotateFeatures VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR; + + + +// VK_KHR_shader_maximal_reconvergence is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_maximal_reconvergence 1 +#define VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_SPEC_VERSION 1 +#define VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_EXTENSION_NAME "VK_KHR_shader_maximal_reconvergence" +typedef struct VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderMaximalReconvergence; +} VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + + + +// VK_KHR_maintenance5 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance5 1 +#define VK_KHR_MAINTENANCE_5_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_5_EXTENSION_NAME "VK_KHR_maintenance5" +typedef VkPipelineCreateFlags2 VkPipelineCreateFlags2KHR; + +typedef VkPipelineCreateFlagBits2 VkPipelineCreateFlagBits2KHR; + +typedef VkBufferUsageFlags2 VkBufferUsageFlags2KHR; + +typedef VkBufferUsageFlagBits2 VkBufferUsageFlagBits2KHR; + +typedef VkPhysicalDeviceMaintenance5Features VkPhysicalDeviceMaintenance5FeaturesKHR; + +typedef VkPhysicalDeviceMaintenance5Properties VkPhysicalDeviceMaintenance5PropertiesKHR; + +typedef VkRenderingAreaInfo VkRenderingAreaInfoKHR; + +typedef VkDeviceImageSubresourceInfo VkDeviceImageSubresourceInfoKHR; + +typedef VkImageSubresource2 VkImageSubresource2KHR; + +typedef VkSubresourceLayout2 VkSubresourceLayout2KHR; + +typedef VkPipelineCreateFlags2CreateInfo VkPipelineCreateFlags2CreateInfoKHR; + +typedef VkBufferUsageFlags2CreateInfo VkBufferUsageFlags2CreateInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer2KHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularityKHR)(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayoutKHR)(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2KHR)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); +#endif +#endif + + +// VK_KHR_present_id2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_id2 1 +#define VK_KHR_PRESENT_ID_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_ID_2_EXTENSION_NAME "VK_KHR_present_id2" +typedef struct VkSurfaceCapabilitiesPresentId2KHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId2Supported; +} VkSurfaceCapabilitiesPresentId2KHR; + +typedef struct VkPresentId2KHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const uint64_t* pPresentIds; +} VkPresentId2KHR; + +typedef struct VkPhysicalDevicePresentId2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId2; +} VkPhysicalDevicePresentId2FeaturesKHR; + + + +// VK_KHR_present_wait2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_wait2 1 +#define VK_KHR_PRESENT_WAIT_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME "VK_KHR_present_wait2" +typedef struct VkSurfaceCapabilitiesPresentWait2KHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait2Supported; +} VkSurfaceCapabilitiesPresentWait2KHR; + +typedef struct VkPhysicalDevicePresentWait2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait2; +} VkPhysicalDevicePresentWait2FeaturesKHR; + +typedef struct VkPresentWait2InfoKHR { + VkStructureType sType; + const void* pNext; + uint64_t presentId; + uint64_t timeout; +} VkPresentWait2InfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresent2KHR)(VkDevice device, VkSwapchainKHR swapchain, const VkPresentWait2InfoKHR* pPresentWait2Info); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresent2KHR( + VkDevice device, + VkSwapchainKHR swapchain, + const VkPresentWait2InfoKHR* pPresentWait2Info); +#endif +#endif + + +// VK_KHR_ray_tracing_position_fetch is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_tracing_position_fetch 1 +#define VK_KHR_RAY_TRACING_POSITION_FETCH_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME "VK_KHR_ray_tracing_position_fetch" +typedef struct VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingPositionFetch; +} VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR; + + + +// VK_KHR_pipeline_binary is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_pipeline_binary 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineBinaryKHR) +#define VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR 32U +#define VK_KHR_PIPELINE_BINARY_SPEC_VERSION 1 +#define VK_KHR_PIPELINE_BINARY_EXTENSION_NAME "VK_KHR_pipeline_binary" +typedef struct VkPhysicalDevicePipelineBinaryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineBinaries; +} VkPhysicalDevicePipelineBinaryFeaturesKHR; + +typedef struct VkPhysicalDevicePipelineBinaryPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 pipelineBinaryInternalCache; + VkBool32 pipelineBinaryInternalCacheControl; + VkBool32 pipelineBinaryPrefersInternalCache; + VkBool32 pipelineBinaryPrecompiledInternalCache; + VkBool32 pipelineBinaryCompressedData; +} VkPhysicalDevicePipelineBinaryPropertiesKHR; + +typedef struct VkDevicePipelineBinaryInternalCacheControlKHR { + VkStructureType sType; + const void* pNext; + VkBool32 disableInternalCache; +} VkDevicePipelineBinaryInternalCacheControlKHR; + +typedef struct VkPipelineBinaryKeyKHR { + VkStructureType sType; + void* pNext; + uint32_t keySize; + uint8_t key[VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR]; +} VkPipelineBinaryKeyKHR; + +typedef struct VkPipelineBinaryDataKHR { + size_t dataSize; + void* pData; +} VkPipelineBinaryDataKHR; + +typedef struct VkPipelineBinaryKeysAndDataKHR { + uint32_t binaryCount; + const VkPipelineBinaryKeyKHR* pPipelineBinaryKeys; + const VkPipelineBinaryDataKHR* pPipelineBinaryData; +} VkPipelineBinaryKeysAndDataKHR; + +typedef struct VkPipelineCreateInfoKHR { + VkStructureType sType; + void* pNext; +} VkPipelineCreateInfoKHR; + +typedef struct VkPipelineBinaryCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const VkPipelineBinaryKeysAndDataKHR* pKeysAndDataInfo; + VkPipeline pipeline; + const VkPipelineCreateInfoKHR* pPipelineCreateInfo; +} VkPipelineBinaryCreateInfoKHR; + +typedef struct VkPipelineBinaryInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t binaryCount; + const VkPipelineBinaryKHR* pPipelineBinaries; +} VkPipelineBinaryInfoKHR; + +typedef struct VkReleaseCapturedPipelineDataInfoKHR { + VkStructureType sType; + void* pNext; + VkPipeline pipeline; +} VkReleaseCapturedPipelineDataInfoKHR; + +typedef struct VkPipelineBinaryDataInfoKHR { + VkStructureType sType; + void* pNext; + VkPipelineBinaryKHR pipelineBinary; +} VkPipelineBinaryDataInfoKHR; + +typedef struct VkPipelineBinaryHandlesInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t pipelineBinaryCount; + VkPipelineBinaryKHR* pPipelineBinaries; +} VkPipelineBinaryHandlesInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineBinariesKHR)(VkDevice device, const VkPipelineBinaryCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineBinaryHandlesInfoKHR* pBinaries); +typedef void (VKAPI_PTR *PFN_vkDestroyPipelineBinaryKHR)(VkDevice device, VkPipelineBinaryKHR pipelineBinary, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineKeyKHR)(VkDevice device, const VkPipelineCreateInfoKHR* pPipelineCreateInfo, VkPipelineBinaryKeyKHR* pPipelineKey); +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineBinaryDataKHR)(VkDevice device, const VkPipelineBinaryDataInfoKHR* pInfo, VkPipelineBinaryKeyKHR* pPipelineBinaryKey, size_t* pPipelineBinaryDataSize, void* pPipelineBinaryData); +typedef VkResult (VKAPI_PTR *PFN_vkReleaseCapturedPipelineDataKHR)(VkDevice device, const VkReleaseCapturedPipelineDataInfoKHR* pInfo, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineBinariesKHR( + VkDevice device, + const VkPipelineBinaryCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPipelineBinaryHandlesInfoKHR* pBinaries); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineBinaryKHR( + VkDevice device, + VkPipelineBinaryKHR pipelineBinary, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineKeyKHR( + VkDevice device, + const VkPipelineCreateInfoKHR* pPipelineCreateInfo, + VkPipelineBinaryKeyKHR* pPipelineKey); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineBinaryDataKHR( + VkDevice device, + const VkPipelineBinaryDataInfoKHR* pInfo, + VkPipelineBinaryKeyKHR* pPipelineBinaryKey, + size_t* pPipelineBinaryDataSize, + void* pPipelineBinaryData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseCapturedPipelineDataKHR( + VkDevice device, + const VkReleaseCapturedPipelineDataInfoKHR* pInfo, + const VkAllocationCallbacks* pAllocator); +#endif +#endif + + +// VK_KHR_surface_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_surface_maintenance1 1 +#define VK_KHR_SURFACE_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_surface_maintenance1" + +typedef enum VkPresentScalingFlagBitsKHR { + VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR = 0x00000001, + VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR = 0x00000002, + VK_PRESENT_SCALING_STRETCH_BIT_KHR = 0x00000004, + VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT = VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR, + VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT = VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR, + VK_PRESENT_SCALING_STRETCH_BIT_EXT = VK_PRESENT_SCALING_STRETCH_BIT_KHR, + VK_PRESENT_SCALING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentScalingFlagBitsKHR; +typedef VkFlags VkPresentScalingFlagsKHR; + +typedef enum VkPresentGravityFlagBitsKHR { + VK_PRESENT_GRAVITY_MIN_BIT_KHR = 0x00000001, + VK_PRESENT_GRAVITY_MAX_BIT_KHR = 0x00000002, + VK_PRESENT_GRAVITY_CENTERED_BIT_KHR = 0x00000004, + VK_PRESENT_GRAVITY_MIN_BIT_EXT = VK_PRESENT_GRAVITY_MIN_BIT_KHR, + VK_PRESENT_GRAVITY_MAX_BIT_EXT = VK_PRESENT_GRAVITY_MAX_BIT_KHR, + VK_PRESENT_GRAVITY_CENTERED_BIT_EXT = VK_PRESENT_GRAVITY_CENTERED_BIT_KHR, + VK_PRESENT_GRAVITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentGravityFlagBitsKHR; +typedef VkFlags VkPresentGravityFlagsKHR; +typedef struct VkSurfacePresentModeKHR { + VkStructureType sType; + void* pNext; + VkPresentModeKHR presentMode; +} VkSurfacePresentModeKHR; + +typedef struct VkSurfacePresentScalingCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkPresentScalingFlagsKHR supportedPresentScaling; + VkPresentGravityFlagsKHR supportedPresentGravityX; + VkPresentGravityFlagsKHR supportedPresentGravityY; + VkExtent2D minScaledImageExtent; + VkExtent2D maxScaledImageExtent; +} VkSurfacePresentScalingCapabilitiesKHR; + +typedef struct VkSurfacePresentModeCompatibilityKHR { + VkStructureType sType; + void* pNext; + uint32_t presentModeCount; + VkPresentModeKHR* pPresentModes; +} VkSurfacePresentModeCompatibilityKHR; + + + +// VK_KHR_swapchain_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_swapchain_maintenance1 1 +#define VK_KHR_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_swapchain_maintenance1" +typedef struct VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 swapchainMaintenance1; +} VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR; + +typedef struct VkSwapchainPresentFenceInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkFence* pFences; +} VkSwapchainPresentFenceInfoKHR; + +typedef struct VkSwapchainPresentModesCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t presentModeCount; + const VkPresentModeKHR* pPresentModes; +} VkSwapchainPresentModesCreateInfoKHR; + +typedef struct VkSwapchainPresentModeInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentModeKHR* pPresentModes; +} VkSwapchainPresentModeInfoKHR; + +typedef struct VkSwapchainPresentScalingCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkPresentScalingFlagsKHR scalingBehavior; + VkPresentGravityFlagsKHR presentGravityX; + VkPresentGravityFlagsKHR presentGravityY; +} VkSwapchainPresentScalingCreateInfoKHR; + +typedef struct VkReleaseSwapchainImagesInfoKHR { + VkStructureType sType; + const void* pNext; + VkSwapchainKHR swapchain; + uint32_t imageIndexCount; + const uint32_t* pImageIndices; +} VkReleaseSwapchainImagesInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkReleaseSwapchainImagesKHR)(VkDevice device, const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesKHR( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); +#endif +#endif + + +// VK_KHR_cooperative_matrix is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_cooperative_matrix 1 +#define VK_KHR_COOPERATIVE_MATRIX_SPEC_VERSION 2 +#define VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_KHR_cooperative_matrix" + +typedef enum VkComponentTypeKHR { + VK_COMPONENT_TYPE_FLOAT16_KHR = 0, + VK_COMPONENT_TYPE_FLOAT32_KHR = 1, + VK_COMPONENT_TYPE_FLOAT64_KHR = 2, + VK_COMPONENT_TYPE_SINT8_KHR = 3, + VK_COMPONENT_TYPE_SINT16_KHR = 4, + VK_COMPONENT_TYPE_SINT32_KHR = 5, + VK_COMPONENT_TYPE_SINT64_KHR = 6, + VK_COMPONENT_TYPE_UINT8_KHR = 7, + VK_COMPONENT_TYPE_UINT16_KHR = 8, + VK_COMPONENT_TYPE_UINT32_KHR = 9, + VK_COMPONENT_TYPE_UINT64_KHR = 10, + VK_COMPONENT_TYPE_BFLOAT16_KHR = 1000141000, + VK_COMPONENT_TYPE_SINT8_PACKED_NV = 1000491000, + VK_COMPONENT_TYPE_UINT8_PACKED_NV = 1000491001, + VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT = 1000491002, + VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT = 1000491003, + VK_COMPONENT_TYPE_FLOAT16_NV = VK_COMPONENT_TYPE_FLOAT16_KHR, + VK_COMPONENT_TYPE_FLOAT32_NV = VK_COMPONENT_TYPE_FLOAT32_KHR, + VK_COMPONENT_TYPE_FLOAT64_NV = VK_COMPONENT_TYPE_FLOAT64_KHR, + VK_COMPONENT_TYPE_SINT8_NV = VK_COMPONENT_TYPE_SINT8_KHR, + VK_COMPONENT_TYPE_SINT16_NV = VK_COMPONENT_TYPE_SINT16_KHR, + VK_COMPONENT_TYPE_SINT32_NV = VK_COMPONENT_TYPE_SINT32_KHR, + VK_COMPONENT_TYPE_SINT64_NV = VK_COMPONENT_TYPE_SINT64_KHR, + VK_COMPONENT_TYPE_UINT8_NV = VK_COMPONENT_TYPE_UINT8_KHR, + VK_COMPONENT_TYPE_UINT16_NV = VK_COMPONENT_TYPE_UINT16_KHR, + VK_COMPONENT_TYPE_UINT32_NV = VK_COMPONENT_TYPE_UINT32_KHR, + VK_COMPONENT_TYPE_UINT64_NV = VK_COMPONENT_TYPE_UINT64_KHR, + VK_COMPONENT_TYPE_FLOAT_E4M3_NV = VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT, + VK_COMPONENT_TYPE_FLOAT_E5M2_NV = VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT, + VK_COMPONENT_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkComponentTypeKHR; + +typedef enum VkScopeKHR { + VK_SCOPE_DEVICE_KHR = 1, + VK_SCOPE_WORKGROUP_KHR = 2, + VK_SCOPE_SUBGROUP_KHR = 3, + VK_SCOPE_QUEUE_FAMILY_KHR = 5, + VK_SCOPE_DEVICE_NV = VK_SCOPE_DEVICE_KHR, + VK_SCOPE_WORKGROUP_NV = VK_SCOPE_WORKGROUP_KHR, + VK_SCOPE_SUBGROUP_NV = VK_SCOPE_SUBGROUP_KHR, + VK_SCOPE_QUEUE_FAMILY_NV = VK_SCOPE_QUEUE_FAMILY_KHR, + VK_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkScopeKHR; +typedef struct VkCooperativeMatrixPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t MSize; + uint32_t NSize; + uint32_t KSize; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; +} VkCooperativeMatrixPropertiesKHR; + +typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrix; + VkBool32 cooperativeMatrixRobustBufferAccess; +} VkPhysicalDeviceCooperativeMatrixFeaturesKHR; + +typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesKHR { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeMatrixSupportedStages; +} VkPhysicalDeviceCooperativeMatrixPropertiesKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesKHR* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesKHR* pProperties); +#endif +#endif + + +// VK_KHR_compute_shader_derivatives is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_compute_shader_derivatives 1 +#define VK_KHR_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 +#define VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_KHR_compute_shader_derivatives" +typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 computeDerivativeGroupQuads; + VkBool32 computeDerivativeGroupLinear; +} VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR; + +typedef struct VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 meshAndTaskShaderDerivatives; +} VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR; + + + +// VK_KHR_video_decode_av1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_av1 1 +#include "vk_video/vulkan_video_codec_av1std.h" +#include "vk_video/vulkan_video_codec_av1std_decode.h" +#define VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR 7U +#define VK_KHR_VIDEO_DECODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_AV1_EXTENSION_NAME "VK_KHR_video_decode_av1" +typedef struct VkVideoDecodeAV1ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoAV1Profile stdProfile; + VkBool32 filmGrainSupport; +} VkVideoDecodeAV1ProfileInfoKHR; + +typedef struct VkVideoDecodeAV1CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoAV1Level maxLevel; +} VkVideoDecodeAV1CapabilitiesKHR; + +typedef struct VkVideoDecodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; +} VkVideoDecodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoDecodeAV1PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeAV1PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR]; + uint32_t frameHeaderOffset; + uint32_t tileCount; + const uint32_t* pTileOffsets; + const uint32_t* pTileSizes; +} VkVideoDecodeAV1PictureInfoKHR; + +typedef struct VkVideoDecodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeAV1ReferenceInfo* pStdReferenceInfo; +} VkVideoDecodeAV1DpbSlotInfoKHR; + + + +// VK_KHR_video_encode_av1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_av1 1 +#include "vk_video/vulkan_video_codec_av1std_encode.h" +#define VK_KHR_VIDEO_ENCODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_AV1_EXTENSION_NAME "VK_KHR_video_encode_av1" + +typedef enum VkVideoEncodeAV1PredictionModeKHR { + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR = 0, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR = 1, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR = 2, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR = 3, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1PredictionModeKHR; + +typedef enum VkVideoEncodeAV1RateControlGroupKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_INTRA_KHR = 0, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_PREDICTIVE_KHR = 1, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_BIPREDICTIVE_KHR = 2, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlGroupKHR; + +typedef enum VkVideoEncodeAV1CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_CAPABILITY_GENERATE_OBU_EXTENSION_HEADER_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_CAPABILITY_PRIMARY_REFERENCE_CDF_ONLY_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_CAPABILITY_MOTION_VECTOR_SCALING_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_AV1_CAPABILITY_COMPOUND_PREDICTION_INTRA_REFRESH_BIT_KHR = 0x00000020, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1CapabilityFlagsKHR; + +typedef enum VkVideoEncodeAV1StdFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_STD_UNIFORM_TILE_SPACING_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_STD_SKIP_MODE_PRESENT_UNSET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_STD_PRIMARY_REF_FRAME_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_STD_DELTA_Q_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1StdFlagsKHR; + +typedef enum VkVideoEncodeAV1SuperblockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_64_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_128_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1SuperblockSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1SuperblockSizeFlagsKHR; + +typedef enum VkVideoEncodeAV1RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1RateControlFlagsKHR; +typedef struct VkPhysicalDeviceVideoEncodeAV1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeAV1; +} VkPhysicalDeviceVideoEncodeAV1FeaturesKHR; + +typedef struct VkVideoEncodeAV1CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1CapabilityFlagsKHR flags; + StdVideoAV1Level maxLevel; + VkExtent2D codedPictureAlignment; + VkExtent2D maxTiles; + VkExtent2D minTileSize; + VkExtent2D maxTileSize; + VkVideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes; + uint32_t maxSingleReferenceCount; + uint32_t singleReferenceNameMask; + uint32_t maxUnidirectionalCompoundReferenceCount; + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t unidirectionalCompoundReferenceNameMask; + uint32_t maxBidirectionalCompoundReferenceCount; + uint32_t maxBidirectionalCompoundGroup1ReferenceCount; + uint32_t maxBidirectionalCompoundGroup2ReferenceCount; + uint32_t bidirectionalCompoundReferenceNameMask; + uint32_t maxTemporalLayerCount; + uint32_t maxSpatialLayerCount; + uint32_t maxOperatingPoints; + uint32_t minQIndex; + uint32_t maxQIndex; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeAV1StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeAV1CapabilitiesKHR; + +typedef struct VkVideoEncodeAV1QIndexKHR { + uint32_t intraQIndex; + uint32_t predictiveQIndex; + uint32_t bipredictiveQIndex; +} VkVideoEncodeAV1QIndexKHR; + +typedef struct VkVideoEncodeAV1QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredKeyFramePeriod; + uint32_t preferredConsecutiveBipredictiveFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeAV1QIndexKHR preferredConstantQIndex; + uint32_t preferredMaxSingleReferenceCount; + uint32_t preferredSingleReferenceNameMask; + uint32_t preferredMaxUnidirectionalCompoundReferenceCount; + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredUnidirectionalCompoundReferenceNameMask; + uint32_t preferredMaxBidirectionalCompoundReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount; + uint32_t preferredBidirectionalCompoundReferenceNameMask; +} VkVideoEncodeAV1QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeAV1SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevel; + StdVideoAV1Level maxLevel; +} VkVideoEncodeAV1SessionCreateInfoKHR; + +typedef struct VkVideoEncodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; + const StdVideoEncodeAV1DecoderModelInfo* pStdDecoderModelInfo; + uint32_t stdOperatingPointCount; + const StdVideoEncodeAV1OperatingPointInfo* pStdOperatingPoints; +} VkVideoEncodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeAV1PictureInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeAV1PredictionModeKHR predictionMode; + VkVideoEncodeAV1RateControlGroupKHR rateControlGroup; + uint32_t constantQIndex; + const StdVideoEncodeAV1PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR]; + VkBool32 primaryReferenceCdfOnly; + VkBool32 generateObuExtensionHeader; +} VkVideoEncodeAV1PictureInfoKHR; + +typedef struct VkVideoEncodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeAV1ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeAV1DpbSlotInfoKHR; + +typedef struct VkVideoEncodeAV1ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoAV1Profile stdProfile; +} VkVideoEncodeAV1ProfileInfoKHR; + +typedef struct VkVideoEncodeAV1FrameSizeKHR { + uint32_t intraFrameSize; + uint32_t predictiveFrameSize; + uint32_t bipredictiveFrameSize; +} VkVideoEncodeAV1FrameSizeKHR; + +typedef struct VkVideoEncodeAV1GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingIntra; + uint32_t gopRemainingPredictive; + uint32_t gopRemainingBipredictive; +} VkVideoEncodeAV1GopRemainingFrameInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeAV1RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t keyFramePeriod; + uint32_t consecutiveBipredictiveFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeAV1RateControlInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQIndex; + VkVideoEncodeAV1QIndexKHR minQIndex; + VkBool32 useMaxQIndex; + VkVideoEncodeAV1QIndexKHR maxQIndex; + VkBool32 useMaxFrameSize; + VkVideoEncodeAV1FrameSizeKHR maxFrameSize; +} VkVideoEncodeAV1RateControlLayerInfoKHR; + + + +// VK_KHR_video_decode_vp9 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_vp9 1 +#include "vk_video/vulkan_video_codec_vp9std.h" +#include "vk_video/vulkan_video_codec_vp9std_decode.h" +#define VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR 3U +#define VK_KHR_VIDEO_DECODE_VP9_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_VP9_EXTENSION_NAME "VK_KHR_video_decode_vp9" +typedef struct VkPhysicalDeviceVideoDecodeVP9FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoDecodeVP9; +} VkPhysicalDeviceVideoDecodeVP9FeaturesKHR; + +typedef struct VkVideoDecodeVP9ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoVP9Profile stdProfile; +} VkVideoDecodeVP9ProfileInfoKHR; + +typedef struct VkVideoDecodeVP9CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoVP9Level maxLevel; +} VkVideoDecodeVP9CapabilitiesKHR; + +typedef struct VkVideoDecodeVP9PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeVP9PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR]; + uint32_t uncompressedHeaderOffset; + uint32_t compressedHeaderOffset; + uint32_t tilesOffset; +} VkVideoDecodeVP9PictureInfoKHR; + + + +// VK_KHR_video_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_maintenance1 1 +#define VK_KHR_VIDEO_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_video_maintenance1" +typedef struct VkPhysicalDeviceVideoMaintenance1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoMaintenance1; +} VkPhysicalDeviceVideoMaintenance1FeaturesKHR; + +typedef struct VkVideoInlineQueryInfoKHR { + VkStructureType sType; + const void* pNext; + VkQueryPool queryPool; + uint32_t firstQuery; + uint32_t queryCount; +} VkVideoInlineQueryInfoKHR; + + + +// VK_KHR_vertex_attribute_divisor is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_vertex_attribute_divisor 1 +#define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 1 +#define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_KHR_vertex_attribute_divisor" +typedef VkPhysicalDeviceVertexAttributeDivisorProperties VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR; + +typedef VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionKHR; + +typedef VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoKHR; + +typedef VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR; + + + +// VK_KHR_load_store_op_none is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_load_store_op_none 1 +#define VK_KHR_LOAD_STORE_OP_NONE_SPEC_VERSION 1 +#define VK_KHR_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_KHR_load_store_op_none" + + +// VK_KHR_unified_image_layouts is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_unified_image_layouts 1 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME "VK_KHR_unified_image_layouts" +typedef struct VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 unifiedImageLayouts; + VkBool32 unifiedImageLayoutsVideo; +} VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + +typedef struct VkAttachmentFeedbackLoopInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 feedbackLoopEnable; +} VkAttachmentFeedbackLoopInfoEXT; + + + +// VK_KHR_shader_float_controls2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_float_controls2 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_2_SPEC_VERSION 1 +#define VK_KHR_SHADER_FLOAT_CONTROLS_2_EXTENSION_NAME "VK_KHR_shader_float_controls2" +typedef VkPhysicalDeviceShaderFloatControls2Features VkPhysicalDeviceShaderFloatControls2FeaturesKHR; + + + +// VK_KHR_index_type_uint8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_index_type_uint8 1 +#define VK_KHR_INDEX_TYPE_UINT8_SPEC_VERSION 1 +#define VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_KHR_index_type_uint8" +typedef VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesKHR; + + + +// VK_KHR_line_rasterization is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_line_rasterization 1 +#define VK_KHR_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME "VK_KHR_line_rasterization" +typedef VkLineRasterizationMode VkLineRasterizationModeKHR; + +typedef VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesKHR; + +typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesKHR; + +typedef VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleKHR)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleKHR( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); +#endif +#endif + + +// VK_KHR_calibrated_timestamps is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_calibrated_timestamps 1 +#define VK_KHR_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1 +#define VK_KHR_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_KHR_calibrated_timestamps" + +typedef enum VkTimeDomainKHR { + VK_TIME_DOMAIN_DEVICE_KHR = 0, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR = 1, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR = 2, + VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR = 3, + VK_TIME_DOMAIN_DEVICE_EXT = VK_TIME_DOMAIN_DEVICE_KHR, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR, + VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR, + VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR, + VK_TIME_DOMAIN_MAX_ENUM_KHR = 0x7FFFFFFF +} VkTimeDomainKHR; +typedef struct VkCalibratedTimestampInfoKHR { + VkStructureType sType; + const void* pNext; + VkTimeDomainKHR timeDomain; +} VkCalibratedTimestampInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains); +typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsKHR)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsKHR( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation); +#endif +#endif + + +// VK_KHR_shader_expect_assume is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_expect_assume 1 +#define VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION 1 +#define VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME "VK_KHR_shader_expect_assume" +typedef VkPhysicalDeviceShaderExpectAssumeFeatures VkPhysicalDeviceShaderExpectAssumeFeaturesKHR; + + + +// VK_KHR_maintenance6 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance6 1 +#define VK_KHR_MAINTENANCE_6_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_6_EXTENSION_NAME "VK_KHR_maintenance6" +typedef VkPhysicalDeviceMaintenance6Features VkPhysicalDeviceMaintenance6FeaturesKHR; + +typedef VkPhysicalDeviceMaintenance6Properties VkPhysicalDeviceMaintenance6PropertiesKHR; + +typedef VkBindMemoryStatus VkBindMemoryStatusKHR; + +typedef VkBindDescriptorSetsInfo VkBindDescriptorSetsInfoKHR; + +typedef VkPushConstantsInfo VkPushConstantsInfoKHR; + +typedef VkPushDescriptorSetInfo VkPushDescriptorSetInfoKHR; + +typedef VkPushDescriptorSetWithTemplateInfo VkPushDescriptorSetWithTemplateInfoKHR; + +typedef struct VkSetDescriptorBufferOffsetsInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t setCount; + const uint32_t* pBufferIndices; + const VkDeviceSize* pOffsets; +} VkSetDescriptorBufferOffsetsInfoEXT; + +typedef struct VkBindDescriptorBufferEmbeddedSamplersInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; +} VkBindDescriptorBufferEmbeddedSamplersInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2KHR)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2KHR)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetDescriptorBufferOffsets2EXT)(VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT)(VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2KHR( + VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2KHR( + VkCommandBuffer commandBuffer, + const VkPushConstantsInfo* pPushConstantsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2KHR( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT( + VkCommandBuffer commandBuffer, + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + VkCommandBuffer commandBuffer, + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); +#endif +#endif + + +// VK_KHR_video_encode_intra_refresh is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_intra_refresh 1 +#define VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_EXTENSION_NAME "VK_KHR_video_encode_intra_refresh" + +typedef enum VkVideoEncodeIntraRefreshModeFlagBitsKHR { + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR = 0, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeIntraRefreshModeFlagBitsKHR; +typedef VkFlags VkVideoEncodeIntraRefreshModeFlagsKHR; +typedef struct VkVideoEncodeIntraRefreshCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes; + uint32_t maxIntraRefreshCycleDuration; + uint32_t maxIntraRefreshActiveReferencePictures; + VkBool32 partitionIndependentIntraRefreshRegions; + VkBool32 nonRectangularIntraRefreshRegions; +} VkVideoEncodeIntraRefreshCapabilitiesKHR; + +typedef struct VkVideoEncodeSessionIntraRefreshCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode; +} VkVideoEncodeSessionIntraRefreshCreateInfoKHR; + +typedef struct VkVideoEncodeIntraRefreshInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t intraRefreshCycleDuration; + uint32_t intraRefreshIndex; +} VkVideoEncodeIntraRefreshInfoKHR; + +typedef struct VkVideoReferenceIntraRefreshInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t dirtyIntraRefreshRegions; +} VkVideoReferenceIntraRefreshInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeIntraRefresh; +} VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + + + +// VK_KHR_video_encode_quantization_map is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_quantization_map 1 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_SPEC_VERSION 2 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_EXTENSION_NAME "VK_KHR_video_encode_quantization_map" +typedef struct VkVideoEncodeQuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D maxQuantizationMapExtent; +} VkVideoEncodeQuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatQuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoFormatQuantizationMapPropertiesKHR; + +typedef struct VkVideoEncodeQuantizationMapInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageView quantizationMap; + VkExtent2D quantizationMapExtent; +} VkVideoEncodeQuantizationMapInfoKHR; + +typedef struct VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeQuantizationMap; +} VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + +typedef struct VkVideoEncodeH264QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH264QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoEncodeH265QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH265QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatH265QuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes; +} VkVideoFormatH265QuantizationMapPropertiesKHR; + +typedef struct VkVideoEncodeAV1QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQIndexDelta; + int32_t maxQIndexDelta; +} VkVideoEncodeAV1QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatAV1QuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes; +} VkVideoFormatAV1QuantizationMapPropertiesKHR; + + + +// VK_KHR_shader_relaxed_extended_instruction is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_relaxed_extended_instruction 1 +#define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION 1 +#define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME "VK_KHR_shader_relaxed_extended_instruction" +typedef struct VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderRelaxedExtendedInstruction; +} VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + + + +// VK_KHR_maintenance7 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance7 1 +#define VK_KHR_MAINTENANCE_7_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_7_EXTENSION_NAME "VK_KHR_maintenance7" + +typedef enum VkPhysicalDeviceLayeredApiKHR { + VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR = 0, + VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR = 1, + VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR = 2, + VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR = 3, + VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR = 4, + VK_PHYSICAL_DEVICE_LAYERED_API_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPhysicalDeviceLayeredApiKHR; +typedef struct VkPhysicalDeviceMaintenance7FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance7; +} VkPhysicalDeviceMaintenance7FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance7PropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 robustFragmentShadingRateAttachmentAccess; + VkBool32 separateDepthStencilAttachmentAccess; + uint32_t maxDescriptorSetTotalUniformBuffersDynamic; + uint32_t maxDescriptorSetTotalStorageBuffersDynamic; + uint32_t maxDescriptorSetTotalBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic; + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic; +} VkPhysicalDeviceMaintenance7PropertiesKHR; + +typedef struct VkPhysicalDeviceLayeredApiPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t vendorID; + uint32_t deviceID; + VkPhysicalDeviceLayeredApiKHR layeredAPI; + char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; +} VkPhysicalDeviceLayeredApiPropertiesKHR; + +typedef struct VkPhysicalDeviceLayeredApiPropertiesListKHR { + VkStructureType sType; + void* pNext; + uint32_t layeredApiCount; + VkPhysicalDeviceLayeredApiPropertiesKHR* pLayeredApis; +} VkPhysicalDeviceLayeredApiPropertiesListKHR; + +typedef struct VkPhysicalDeviceLayeredApiVulkanPropertiesKHR { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceProperties2 properties; +} VkPhysicalDeviceLayeredApiVulkanPropertiesKHR; + + + +// VK_KHR_maintenance8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance8 1 +#define VK_KHR_MAINTENANCE_8_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_8_EXTENSION_NAME "VK_KHR_maintenance8" +typedef VkFlags64 VkAccessFlags3KHR; + +// Flag bits for VkAccessFlagBits3KHR +typedef VkFlags64 VkAccessFlagBits3KHR; +static const VkAccessFlagBits3KHR VK_ACCESS_3_NONE_KHR = 0ULL; + +typedef struct VkPhysicalDeviceMaintenance8FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance8; +} VkPhysicalDeviceMaintenance8FeaturesKHR; + +typedef struct VkMemoryBarrierAccessFlags3KHR { + VkStructureType sType; + const void* pNext; + VkAccessFlags3KHR srcAccessMask3; + VkAccessFlags3KHR dstAccessMask3; +} VkMemoryBarrierAccessFlags3KHR; + + + +// VK_KHR_maintenance9 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance9 1 +#define VK_KHR_MAINTENANCE_9_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_9_EXTENSION_NAME "VK_KHR_maintenance9" + +typedef enum VkDefaultVertexAttributeValueKHR { + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR = 0, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR = 1, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDefaultVertexAttributeValueKHR; +typedef struct VkPhysicalDeviceMaintenance9FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance9; +} VkPhysicalDeviceMaintenance9FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance9PropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 image2DViewOf3DSparse; + VkDefaultVertexAttributeValueKHR defaultVertexAttributeValue; +} VkPhysicalDeviceMaintenance9PropertiesKHR; + +typedef struct VkQueueFamilyOwnershipTransferPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t optimalImageTransferToQueueFamilies; +} VkQueueFamilyOwnershipTransferPropertiesKHR; + + + +// VK_KHR_video_maintenance2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_maintenance2 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_video_maintenance2" +typedef struct VkPhysicalDeviceVideoMaintenance2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoMaintenance2; +} VkPhysicalDeviceVideoMaintenance2FeaturesKHR; + +typedef struct VkVideoDecodeH264InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoH264SequenceParameterSet* pStdSPS; + const StdVideoH264PictureParameterSet* pStdPPS; +} VkVideoDecodeH264InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeH265InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoH265VideoParameterSet* pStdVPS; + const StdVideoH265SequenceParameterSet* pStdSPS; + const StdVideoH265PictureParameterSet* pStdPPS; +} VkVideoDecodeH265InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeAV1InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; +} VkVideoDecodeAV1InlineSessionParametersInfoKHR; + + + +// VK_KHR_depth_clamp_zero_one is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_depth_clamp_zero_one 1 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_KHR_depth_clamp_zero_one" +typedef struct VkPhysicalDeviceDepthClampZeroOneFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 depthClampZeroOne; +} VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; + + + +// VK_KHR_robustness2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_robustness2 1 +#define VK_KHR_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_KHR_ROBUSTNESS_2_EXTENSION_NAME "VK_KHR_robustness2" +typedef struct VkPhysicalDeviceRobustness2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 robustBufferAccess2; + VkBool32 robustImageAccess2; + VkBool32 nullDescriptor; +} VkPhysicalDeviceRobustness2FeaturesKHR; + +typedef struct VkPhysicalDeviceRobustness2PropertiesKHR { + VkStructureType sType; + void* pNext; + VkDeviceSize robustStorageBufferAccessSizeAlignment; + VkDeviceSize robustUniformBufferAccessSizeAlignment; +} VkPhysicalDeviceRobustness2PropertiesKHR; + + + +// VK_KHR_present_mode_fifo_latest_ready is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_mode_fifo_latest_ready 1 +#define VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION 1 +#define VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME "VK_KHR_present_mode_fifo_latest_ready" +typedef struct VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentModeFifoLatestReady; +} VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + + + +// VK_EXT_debug_report is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_debug_report 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) +#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 10 +#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report" + +typedef enum VkDebugReportObjectTypeEXT { + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0, + VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1, + VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3, + VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4, + VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6, + VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10, + VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11, + VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13, + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14, + VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17, + VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18, + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23, + VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, + VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, + VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28, + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29, + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30, + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000, + VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT = 1000029000, + VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT = 1000029001, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000, + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000, + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT = 1000307000, + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT = 1000307001, + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT = 1000366000, + // VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT is a deprecated alias + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, + // VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT is a deprecated alias + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugReportObjectTypeEXT; + +typedef enum VkDebugReportFlagBitsEXT { + VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001, + VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002, + VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004, + VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008, + VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010, + VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugReportFlagBitsEXT; +typedef VkFlags VkDebugReportFlagsEXT; +typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage, + void* pUserData); + +typedef struct VkDebugReportCallbackCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportFlagsEXT flags; + PFN_vkDebugReportCallbackEXT pfnCallback; + void* pUserData; +} VkDebugReportCallbackCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); +typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( + VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugReportCallbackEXT* pCallback); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( + VkInstance instance, + VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( + VkInstance instance, + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage); +#endif +#endif + + +// VK_NV_glsl_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_glsl_shader 1 +#define VK_NV_GLSL_SHADER_SPEC_VERSION 1 +#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" + + +// VK_EXT_depth_range_unrestricted is a preprocessor guard. Do not pass it to API calls. +#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" + + +// VK_IMG_filter_cubic is a preprocessor guard. Do not pass it to API calls. +#define VK_IMG_filter_cubic 1 +#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 +#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" + + +// VK_AMD_rasterization_order is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_rasterization_order 1 +#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 +#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order" + +typedef enum VkRasterizationOrderAMD { + VK_RASTERIZATION_ORDER_STRICT_AMD = 0, + VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, + VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF +} VkRasterizationOrderAMD; +typedef struct VkPipelineRasterizationStateRasterizationOrderAMD { + VkStructureType sType; + const void* pNext; + VkRasterizationOrderAMD rasterizationOrder; +} VkPipelineRasterizationStateRasterizationOrderAMD; + + + +// VK_AMD_shader_trinary_minmax is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_trinary_minmax 1 +#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1 +#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax" + + +// VK_AMD_shader_explicit_vertex_parameter is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_explicit_vertex_parameter 1 +#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1 +#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter" + + +// VK_EXT_debug_marker is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_debug_marker 1 +#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4 +#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker" +typedef struct VkDebugMarkerObjectNameInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + const char* pObjectName; +} VkDebugMarkerObjectNameInfoEXT; + +typedef struct VkDebugMarkerObjectTagInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkDebugMarkerObjectTagInfoEXT; + +typedef struct VkDebugMarkerMarkerInfoEXT { + VkStructureType sType; + const void* pNext; + const char* pMarkerName; + float color[4]; +} VkDebugMarkerMarkerInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo); +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( + VkDevice device, + const VkDebugMarkerObjectTagInfoEXT* pTagInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( + VkDevice device, + const VkDebugMarkerObjectNameInfoEXT* pNameInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( + VkCommandBuffer commandBuffer); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +#endif +#endif + + +// VK_AMD_gcn_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_gcn_shader 1 +#define VK_AMD_GCN_SHADER_SPEC_VERSION 1 +#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader" + + +// VK_NV_dedicated_allocation is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_dedicated_allocation 1 +#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1 +#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation" +typedef struct VkDedicatedAllocationImageCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 dedicatedAllocation; +} VkDedicatedAllocationImageCreateInfoNV; + +typedef struct VkDedicatedAllocationBufferCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 dedicatedAllocation; +} VkDedicatedAllocationBufferCreateInfoNV; + +typedef struct VkDedicatedAllocationMemoryAllocateInfoNV { + VkStructureType sType; + const void* pNext; + VkImage image; + VkBuffer buffer; +} VkDedicatedAllocationMemoryAllocateInfoNV; + + + +// VK_EXT_transform_feedback is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_transform_feedback 1 +#define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1 +#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback" +typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; +typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 transformFeedback; + VkBool32 geometryStreams; +} VkPhysicalDeviceTransformFeedbackFeaturesEXT; + +typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxTransformFeedbackStreams; + uint32_t maxTransformFeedbackBuffers; + VkDeviceSize maxTransformFeedbackBufferSize; + uint32_t maxTransformFeedbackStreamDataSize; + uint32_t maxTransformFeedbackBufferDataSize; + uint32_t maxTransformFeedbackBufferDataStride; + VkBool32 transformFeedbackQueries; + VkBool32 transformFeedbackStreamsLinesTriangles; + VkBool32 transformFeedbackRasterizationStreamSelect; + VkBool32 transformFeedbackDraw; +} VkPhysicalDeviceTransformFeedbackPropertiesEXT; + +typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipelineRasterizationStateStreamCreateFlagsEXT flags; + uint32_t rasterizationStream; +} VkPipelineRasterizationStateStreamCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes); +typedef void (VKAPI_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); +typedef void (VKAPI_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags, + uint32_t index); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + uint32_t index); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( + VkCommandBuffer commandBuffer, + uint32_t instanceCount, + uint32_t firstInstance, + VkBuffer counterBuffer, + VkDeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride); +#endif +#endif + + +// VK_NVX_binary_import is a preprocessor guard. Do not pass it to API calls. +#define VK_NVX_binary_import 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) +#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 2 +#define VK_NVX_BINARY_IMPORT_EXTENSION_NAME "VK_NVX_binary_import" +typedef struct VkCuModuleCreateInfoNVX { + VkStructureType sType; + const void* pNext; + size_t dataSize; + const void* pData; +} VkCuModuleCreateInfoNVX; + +typedef struct VkCuModuleTexturingModeCreateInfoNVX { + VkStructureType sType; + const void* pNext; + VkBool32 use64bitTexturing; +} VkCuModuleTexturingModeCreateInfoNVX; + +typedef struct VkCuFunctionCreateInfoNVX { + VkStructureType sType; + const void* pNext; + VkCuModuleNVX module; + const char* pName; +} VkCuFunctionCreateInfoNVX; + +typedef struct VkCuLaunchInfoNVX { + VkStructureType sType; + const void* pNext; + VkCuFunctionNVX function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void* const * pParams; + size_t extraCount; + const void* const * pExtras; +} VkCuLaunchInfoNVX; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateCuModuleNVX)(VkDevice device, const VkCuModuleCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuModuleNVX* pModule); +typedef VkResult (VKAPI_PTR *PFN_vkCreateCuFunctionNVX)(VkDevice device, const VkCuFunctionCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCuFunctionNVX* pFunction); +typedef void (VKAPI_PTR *PFN_vkDestroyCuModuleNVX)(VkDevice device, VkCuModuleNVX module, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDestroyCuFunctionNVX)(VkDevice device, VkCuFunctionNVX function, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdCuLaunchKernelNVX)(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX* pLaunchInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuModuleNVX( + VkDevice device, + const VkCuModuleCreateInfoNVX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCuModuleNVX* pModule); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCuFunctionNVX( + VkDevice device, + const VkCuFunctionCreateInfoNVX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCuFunctionNVX* pFunction); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCuModuleNVX( + VkDevice device, + VkCuModuleNVX module, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyCuFunctionNVX( + VkDevice device, + VkCuFunctionNVX function, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCuLaunchKernelNVX( + VkCommandBuffer commandBuffer, + const VkCuLaunchInfoNVX* pLaunchInfo); +#endif +#endif + + +// VK_NVX_image_view_handle is a preprocessor guard. Do not pass it to API calls. +#define VK_NVX_image_view_handle 1 +#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 3 +#define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle" +typedef struct VkImageViewHandleInfoNVX { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkDescriptorType descriptorType; + VkSampler sampler; +} VkImageViewHandleInfoNVX; + +typedef struct VkImageViewAddressPropertiesNVX { + VkStructureType sType; + void* pNext; + VkDeviceAddress deviceAddress; + VkDeviceSize size; +} VkImageViewAddressPropertiesNVX; + +typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetImageViewHandle64NVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR uint64_t VKAPI_CALL vkGetImageViewHandle64NVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( + VkDevice device, + VkImageView imageView, + VkImageViewAddressPropertiesNVX* pProperties); +#endif +#endif + + +// VK_AMD_draw_indirect_count is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_draw_indirect_count 1 +#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2 +#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count" +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + + +// VK_AMD_negative_viewport_height is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_negative_viewport_height 1 +#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1 +#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height" + + +// VK_AMD_gpu_shader_half_float is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_gpu_shader_half_float 1 +#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2 +#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float" + + +// VK_AMD_shader_ballot is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_ballot 1 +#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1 +#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot" + + +// VK_AMD_texture_gather_bias_lod is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_texture_gather_bias_lod 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1 +#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod" +typedef struct VkTextureLODGatherFormatPropertiesAMD { + VkStructureType sType; + void* pNext; + VkBool32 supportsTextureGatherLODBiasAMD; +} VkTextureLODGatherFormatPropertiesAMD; + + + +// VK_AMD_shader_info is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_info 1 +#define VK_AMD_SHADER_INFO_SPEC_VERSION 1 +#define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info" + +typedef enum VkShaderInfoTypeAMD { + VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0, + VK_SHADER_INFO_TYPE_BINARY_AMD = 1, + VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2, + VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkShaderInfoTypeAMD; +typedef struct VkShaderResourceUsageAMD { + uint32_t numUsedVgprs; + uint32_t numUsedSgprs; + uint32_t ldsSizePerLocalWorkGroup; + size_t ldsUsageSizeInBytes; + size_t scratchMemUsageInBytes; +} VkShaderResourceUsageAMD; + +typedef struct VkShaderStatisticsInfoAMD { + VkShaderStageFlags shaderStageMask; + VkShaderResourceUsageAMD resourceUsage; + uint32_t numPhysicalVgprs; + uint32_t numPhysicalSgprs; + uint32_t numAvailableVgprs; + uint32_t numAvailableSgprs; + uint32_t computeWorkGroupSize[3]; +} VkShaderStatisticsInfoAMD; + +typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( + VkDevice device, + VkPipeline pipeline, + VkShaderStageFlagBits shaderStage, + VkShaderInfoTypeAMD infoType, + size_t* pInfoSize, + void* pInfo); +#endif +#endif + + +// VK_AMD_shader_image_load_store_lod is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_image_load_store_lod 1 +#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1 +#define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod" + + +// VK_NV_corner_sampled_image is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_corner_sampled_image 1 +#define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2 +#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image" +typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cornerSampledImage; +} VkPhysicalDeviceCornerSampledImageFeaturesNV; + + + +// VK_IMG_format_pvrtc is a preprocessor guard. Do not pass it to API calls. +#define VK_IMG_format_pvrtc 1 +#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1 +#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc" + + +// VK_NV_external_memory_capabilities is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory_capabilities 1 +#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities" + +typedef enum VkExternalMemoryHandleTypeFlagBitsNV { + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkExternalMemoryHandleTypeFlagBitsNV; +typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; + +typedef enum VkExternalMemoryFeatureFlagBitsNV { + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001, + VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002, + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004, + VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkExternalMemoryFeatureFlagBitsNV; +typedef VkFlags VkExternalMemoryFeatureFlagsNV; +typedef struct VkExternalImageFormatPropertiesNV { + VkImageFormatProperties imageFormatProperties; + VkExternalMemoryFeatureFlagsNV externalMemoryFeatures; + VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes; + VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes; +} VkExternalImageFormatPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); +#endif +#endif + + +// VK_NV_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory 1 +#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory" +typedef struct VkExternalMemoryImageCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsNV handleTypes; +} VkExternalMemoryImageCreateInfoNV; + +typedef struct VkExportMemoryAllocateInfoNV { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsNV handleTypes; +} VkExportMemoryAllocateInfoNV; + + + +// VK_EXT_validation_flags is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_validation_flags 1 +#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 3 +#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags" + +typedef enum VkValidationCheckEXT { + VK_VALIDATION_CHECK_ALL_EXT = 0, + VK_VALIDATION_CHECK_SHADERS_EXT = 1, + VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCheckEXT; +typedef struct VkValidationFlagsEXT { + VkStructureType sType; + const void* pNext; + uint32_t disabledValidationCheckCount; + const VkValidationCheckEXT* pDisabledValidationChecks; +} VkValidationFlagsEXT; + + + +// VK_EXT_shader_subgroup_ballot is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_subgroup_ballot 1 +#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot" + + +// VK_EXT_shader_subgroup_vote is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_subgroup_vote 1 +#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1 +#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote" + + +// VK_EXT_texture_compression_astc_hdr is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceTextureCompressionASTCHDRFeatures VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT; + + + +// VK_EXT_astc_decode_mode is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_pipeline_robustness is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_robustness 1 +#define VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_pipeline_robustness" +typedef VkPipelineRobustnessBufferBehavior VkPipelineRobustnessBufferBehaviorEXT; + +typedef VkPipelineRobustnessImageBehavior VkPipelineRobustnessImageBehaviorEXT; + +typedef VkPhysicalDevicePipelineRobustnessFeatures VkPhysicalDevicePipelineRobustnessFeaturesEXT; + +typedef VkPhysicalDevicePipelineRobustnessProperties VkPhysicalDevicePipelineRobustnessPropertiesEXT; + +typedef VkPipelineRobustnessCreateInfo VkPipelineRobustnessCreateInfoEXT; + + + +// VK_EXT_conditional_rendering is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_conditional_rendering 1 +#define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2 +#define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering" + +typedef enum VkConditionalRenderingFlagBitsEXT { + VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 0x00000001, + VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkConditionalRenderingFlagBitsEXT; +typedef VkFlags VkConditionalRenderingFlagsEXT; +typedef struct VkConditionalRenderingBeginInfoEXT { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; + VkDeviceSize offset; + VkConditionalRenderingFlagsEXT flags; +} VkConditionalRenderingBeginInfoEXT; + +typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 conditionalRendering; + VkBool32 inheritedConditionalRendering; +} VkPhysicalDeviceConditionalRenderingFeaturesEXT; + +typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 conditionalRenderingEnable; +} VkCommandBufferInheritanceConditionalRenderingInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); +typedef void (VKAPI_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( + VkCommandBuffer commandBuffer, + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( + VkCommandBuffer commandBuffer); +#endif +#endif + + +// VK_NV_clip_space_w_scaling is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_clip_space_w_scaling 1 +#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1 +#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling" +typedef struct VkViewportWScalingNV { + float xcoeff; + float ycoeff; +} VkViewportWScalingNV; + +typedef struct VkPipelineViewportWScalingStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 viewportWScalingEnable; + uint32_t viewportCount; + const VkViewportWScalingNV* pViewportWScalings; +} VkPipelineViewportWScalingStateCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportWScalingNV* pViewportWScalings); +#endif +#endif + + +// VK_EXT_direct_mode_display is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display); +#endif +#endif + + +// VK_EXT_display_surface_counter is a preprocessor guard. Do not pass it to API calls. +#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 is a deprecated alias + 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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT* pSurfaceCapabilities); +#endif +#endif + + +// VK_EXT_display_control is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayPowerInfoEXT* pDisplayPowerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( + VkDevice device, + const VkDeviceEventInfoEXT* pDeviceEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayEventInfoEXT* pDisplayEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSurfaceCounterFlagBitsEXT counter, + uint64_t* pCounterValue); +#endif +#endif + + +// VK_GOOGLE_display_timing is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_display_timing 1 +#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1 +#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing" +typedef struct VkRefreshCycleDurationGOOGLE { + uint64_t refreshDuration; +} VkRefreshCycleDurationGOOGLE; + +typedef struct VkPastPresentationTimingGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; + uint64_t actualPresentTime; + uint64_t earliestPresentTime; + uint64_t presentMargin; +} VkPastPresentationTimingGOOGLE; + +typedef struct VkPresentTimeGOOGLE { + uint32_t presentID; + uint64_t desiredPresentTime; +} VkPresentTimeGOOGLE; + +typedef struct VkPresentTimesInfoGOOGLE { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const VkPresentTimeGOOGLE* pTimes; +} VkPresentTimesInfoGOOGLE; + +typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pPresentationTimingCount, + VkPastPresentationTimingGOOGLE* pPresentationTimings); +#endif +#endif + + +// VK_NV_sample_mask_override_coverage is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_sample_mask_override_coverage 1 +#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1 +#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage" + + +// VK_NV_geometry_shader_passthrough is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_geometry_shader_passthrough 1 +#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1 +#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough" + + +// VK_NV_viewport_array2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_viewport_array2 1 +#define VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION 1 +#define VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME "VK_NV_viewport_array2" +// VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION is a deprecated alias +#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION +// VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME is a deprecated alias +#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME + + +// VK_NVX_multiview_per_view_attributes is a preprocessor guard. Do not pass it to API calls. +#define VK_NVX_multiview_per_view_attributes 1 +#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1 +#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes" +typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX { + VkStructureType sType; + void* pNext; + VkBool32 perViewPositionAllComponents; +} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + +typedef struct VkMultiviewPerViewAttributesInfoNVX { + VkStructureType sType; + const void* pNext; + VkBool32 perViewAttributes; + VkBool32 perViewAttributesPositionXOnly; +} VkMultiviewPerViewAttributesInfoNVX; + + + +// VK_NV_viewport_swizzle is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_viewport_swizzle 1 +#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1 +#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle" + +typedef enum VkViewportCoordinateSwizzleNV { + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5, + VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6, + VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7, + VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF +} VkViewportCoordinateSwizzleNV; +typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; +typedef struct VkViewportSwizzleNV { + VkViewportCoordinateSwizzleNV x; + VkViewportCoordinateSwizzleNV y; + VkViewportCoordinateSwizzleNV z; + VkViewportCoordinateSwizzleNV w; +} VkViewportSwizzleNV; + +typedef struct VkPipelineViewportSwizzleStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineViewportSwizzleStateCreateFlagsNV flags; + uint32_t viewportCount; + const VkViewportSwizzleNV* pViewportSwizzles; +} VkPipelineViewportSwizzleStateCreateInfoNV; + + + +// VK_EXT_discard_rectangles is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_discard_rectangles 1 +#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 2 +#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); +typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleModeEXT)(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( + VkCommandBuffer commandBuffer, + uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const VkRect2D* pDiscardRectangles); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 discardRectangleEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleModeEXT( + VkCommandBuffer commandBuffer, + VkDiscardRectangleModeEXT discardRectangleMode); +#endif +#endif + + +// VK_EXT_conservative_rasterization is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_depth_clip_enable is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_swapchain_colorspace is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_swapchain_colorspace 1 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 5 +#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace" + + +// VK_EXT_hdr_metadata is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_hdr_metadata 1 +#define VK_EXT_HDR_METADATA_SPEC_VERSION 3 +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainKHR* pSwapchains, + const VkHdrMetadataEXT* pMetadata); +#endif +#endif + + +// VK_IMG_relaxed_line_rasterization is a preprocessor guard. Do not pass it to API calls. +#define VK_IMG_relaxed_line_rasterization 1 +#define VK_IMG_RELAXED_LINE_RASTERIZATION_SPEC_VERSION 1 +#define VK_IMG_RELAXED_LINE_RASTERIZATION_EXTENSION_NAME "VK_IMG_relaxed_line_rasterization" +typedef struct VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG { + VkStructureType sType; + void* pNext; + VkBool32 relaxedLineRasterization; +} VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + + + +// VK_EXT_external_memory_dma_buf is a preprocessor guard. Do not pass it to API calls. +#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" + + +// VK_EXT_queue_family_foreign is a preprocessor guard. Do not pass it to API calls. +#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 (~2U) + + +// VK_EXT_debug_utils is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_debug_utils 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) +#define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2 +#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils" +typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; + +typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT { + VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugUtilsMessageSeverityFlagBitsEXT; + +typedef enum VkDebugUtilsMessageTypeFlagBitsEXT { + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001, + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002, + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004, + VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT = 0x00000008, + VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDebugUtilsMessageTypeFlagBitsEXT; +typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; +typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; +typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; +typedef struct VkDebugUtilsLabelEXT { + VkStructureType sType; + const void* pNext; + const char* pLabelName; + float color[4]; +} VkDebugUtilsLabelEXT; + +typedef struct VkDebugUtilsObjectNameInfoEXT { + VkStructureType sType; + const void* pNext; + VkObjectType objectType; + uint64_t objectHandle; + const char* pObjectName; +} VkDebugUtilsObjectNameInfoEXT; + +typedef struct VkDebugUtilsMessengerCallbackDataEXT { + VkStructureType sType; + const void* pNext; + VkDebugUtilsMessengerCallbackDataFlagsEXT flags; + const char* pMessageIdName; + int32_t messageIdNumber; + const char* pMessage; + uint32_t queueLabelCount; + const VkDebugUtilsLabelEXT* pQueueLabels; + uint32_t cmdBufLabelCount; + const VkDebugUtilsLabelEXT* pCmdBufLabels; + uint32_t objectCount; + const VkDebugUtilsObjectNameInfoEXT* pObjects; +} VkDebugUtilsMessengerCallbackDataEXT; + +typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)( + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData); + +typedef struct VkDebugUtilsMessengerCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugUtilsMessengerCreateFlagsEXT flags; + VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; + VkDebugUtilsMessageTypeFlagsEXT messageType; + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback; + void* pUserData; +} VkDebugUtilsMessengerCreateInfoEXT; + +typedef struct VkDebugUtilsObjectTagInfoEXT { + VkStructureType sType; + const void* pNext; + VkObjectType objectType; + uint64_t objectHandle; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkDebugUtilsObjectTagInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo); +typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo); +typedef void (VKAPI_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef void (VKAPI_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue); +typedef void (VKAPI_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger); +typedef void (VKAPI_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( + VkDevice device, + const VkDebugUtilsObjectNameInfoEXT* pNameInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( + VkDevice device, + const VkDebugUtilsObjectTagInfoEXT* pTagInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( + VkQueue queue); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( + VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugUtilsMessengerEXT* pMessenger); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( + VkInstance instance, + VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( + VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); +#endif +#endif + + +// VK_EXT_sampler_filter_minmax is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_sampler_filter_minmax 1 +#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2 +#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax" +typedef VkSamplerReductionMode VkSamplerReductionModeEXT; + +typedef VkSamplerReductionModeCreateInfo VkSamplerReductionModeCreateInfoEXT; + +typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT; + + + +// VK_AMD_gpu_shader_int16 is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_gpu_shader_int16 1 +#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2 +#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16" + + +// VK_AMD_mixed_attachment_samples is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_mixed_attachment_samples 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1 +#define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples" +typedef struct VkAttachmentSampleCountInfoAMD { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const VkSampleCountFlagBits* pColorAttachmentSamples; + VkSampleCountFlagBits depthStencilAttachmentSamples; +} VkAttachmentSampleCountInfoAMD; + + + +// VK_AMD_shader_fragment_mask is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_fragment_mask 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1 +#define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask" + + +// VK_EXT_inline_uniform_block is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_inline_uniform_block 1 +#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1 +#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block" +typedef VkPhysicalDeviceInlineUniformBlockFeatures VkPhysicalDeviceInlineUniformBlockFeaturesEXT; + +typedef VkPhysicalDeviceInlineUniformBlockProperties VkPhysicalDeviceInlineUniformBlockPropertiesEXT; + +typedef VkWriteDescriptorSetInlineUniformBlock VkWriteDescriptorSetInlineUniformBlockEXT; + +typedef VkDescriptorPoolInlineUniformBlockCreateInfo VkDescriptorPoolInlineUniformBlockCreateInfoEXT; + + + +// VK_EXT_shader_stencil_export is a preprocessor guard. Do not pass it to API calls. +#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" + + +// VK_EXT_sample_locations is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( + VkCommandBuffer commandBuffer, + const VkSampleLocationsInfoEXT* pSampleLocationsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( + VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT* pMultisampleProperties); +#endif +#endif + + +// VK_EXT_blend_operation_advanced is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_NV_fragment_coverage_to_color is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fragment_coverage_to_color 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color" +typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; +typedef struct VkPipelineCoverageToColorStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageToColorStateCreateFlagsNV flags; + VkBool32 coverageToColorEnable; + uint32_t coverageToColorLocation; +} VkPipelineCoverageToColorStateCreateInfoNV; + + + +// VK_NV_framebuffer_mixed_samples is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_framebuffer_mixed_samples 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1 +#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples" + +typedef enum VkCoverageModulationModeNV { + VK_COVERAGE_MODULATION_MODE_NONE_NV = 0, + VK_COVERAGE_MODULATION_MODE_RGB_NV = 1, + VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2, + VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3, + VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageModulationModeNV; +typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; +typedef struct VkPipelineCoverageModulationStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageModulationStateCreateFlagsNV flags; + VkCoverageModulationModeNV coverageModulationMode; + VkBool32 coverageModulationTableEnable; + uint32_t coverageModulationTableCount; + const float* pCoverageModulationTable; +} VkPipelineCoverageModulationStateCreateInfoNV; + +typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV; + + + +// VK_NV_fill_rectangle is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fill_rectangle 1 +#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1 +#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle" + + +// VK_NV_shader_sm_builtins is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_sm_builtins 1 +#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1 +#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins" +typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t shaderSMCount; + uint32_t shaderWarpsPerSM; +} VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; + +typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shaderSMBuiltins; +} VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; + + + +// VK_EXT_post_depth_coverage is a preprocessor guard. Do not pass it to API calls. +#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" + + +// VK_EXT_image_drm_format_modifier is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_drm_format_modifier 1 +#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 2 +#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 struct VkDrmFormatModifierProperties2EXT { + uint64_t drmFormatModifier; + uint32_t drmFormatModifierPlaneCount; + VkFormatFeatureFlags2 drmFormatModifierTilingFeatures; +} VkDrmFormatModifierProperties2EXT; + +typedef struct VkDrmFormatModifierPropertiesList2EXT { + VkStructureType sType; + void* pNext; + uint32_t drmFormatModifierCount; + VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties; +} VkDrmFormatModifierPropertiesList2EXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( + VkDevice device, + VkImage image, + VkImageDrmFormatModifierPropertiesEXT* pProperties); +#endif +#endif + + +// VK_EXT_validation_cache is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_validation_cache 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) +#define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1 +#define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache" + +typedef enum VkValidationCacheHeaderVersionEXT { + VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1, + VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationCacheHeaderVersionEXT; +typedef VkFlags VkValidationCacheCreateFlagsEXT; +typedef struct VkValidationCacheCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkValidationCacheCreateFlagsEXT flags; + size_t initialDataSize; + const void* pInitialData; +} VkValidationCacheCreateInfoEXT; + +typedef struct VkShaderModuleValidationCacheCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkValidationCacheEXT validationCache; +} VkShaderModuleValidationCacheCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache); +typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches); +typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( + VkDevice device, + const VkValidationCacheCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkValidationCacheEXT* pValidationCache); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( + VkDevice device, + VkValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const VkValidationCacheEXT* pSrcCaches); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + size_t* pDataSize, + void* pData); +#endif +#endif + + +// VK_EXT_descriptor_indexing is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_descriptor_indexing 1 +#define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 +#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" +typedef VkDescriptorBindingFlagBits VkDescriptorBindingFlagBitsEXT; + +typedef VkDescriptorBindingFlags VkDescriptorBindingFlagsEXT; + +typedef VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT; + +typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT; + +typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT; + +typedef VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT; + +typedef VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT; + + + +// VK_EXT_shader_viewport_index_layer is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_viewport_index_layer 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 +#define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" + + +// VK_NV_shading_rate_image is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shading_rate_image 1 +#define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3 +#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image" + +typedef enum VkShadingRatePaletteEntryNV { + VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0, + VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1, + VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2, + VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3, + VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10, + VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11, + VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF +} VkShadingRatePaletteEntryNV; + +typedef enum VkCoarseSampleOrderTypeNV { + VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0, + VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1, + VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2, + VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3, + VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoarseSampleOrderTypeNV; +typedef struct VkShadingRatePaletteNV { + uint32_t shadingRatePaletteEntryCount; + const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries; +} VkShadingRatePaletteNV; + +typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 shadingRateImageEnable; + uint32_t viewportCount; + const VkShadingRatePaletteNV* pShadingRatePalettes; +} VkPipelineViewportShadingRateImageStateCreateInfoNV; + +typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shadingRateImage; + VkBool32 shadingRateCoarseSampleOrder; +} VkPhysicalDeviceShadingRateImageFeaturesNV; + +typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV { + VkStructureType sType; + void* pNext; + VkExtent2D shadingRateTexelSize; + uint32_t shadingRatePaletteSize; + uint32_t shadingRateMaxCoarseSamples; +} VkPhysicalDeviceShadingRateImagePropertiesNV; + +typedef struct VkCoarseSampleLocationNV { + uint32_t pixelX; + uint32_t pixelY; + uint32_t sample; +} VkCoarseSampleLocationNV; + +typedef struct VkCoarseSampleOrderCustomNV { + VkShadingRatePaletteEntryNV shadingRate; + uint32_t sampleCount; + uint32_t sampleLocationCount; + const VkCoarseSampleLocationNV* pSampleLocations; +} VkCoarseSampleOrderCustomNV; + +typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkCoarseSampleOrderTypeNV sampleOrderType; + uint32_t customSampleOrderCount; + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders; +} VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkShadingRatePaletteNV* pShadingRatePalettes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( + VkCommandBuffer commandBuffer, + VkCoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); +#endif +#endif + + +// VK_NV_ray_tracing is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) +#define VK_NV_RAY_TRACING_SPEC_VERSION 3 +#define VK_NV_RAY_TRACING_EXTENSION_NAME "VK_NV_ray_tracing" +#define VK_SHADER_UNUSED_KHR (~0U) +#define VK_SHADER_UNUSED_NV VK_SHADER_UNUSED_KHR + +typedef enum VkRayTracingShaderGroupTypeKHR { + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2, + VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, + VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkRayTracingShaderGroupTypeKHR; +typedef VkRayTracingShaderGroupTypeKHR VkRayTracingShaderGroupTypeNV; + + +typedef enum VkGeometryTypeKHR { + VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, + VK_GEOMETRY_TYPE_AABBS_KHR = 1, + VK_GEOMETRY_TYPE_INSTANCES_KHR = 2, + VK_GEOMETRY_TYPE_SPHERES_NV = 1000429004, + VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV = 1000429005, + VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR, + VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR, + VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryTypeKHR; +typedef VkGeometryTypeKHR VkGeometryTypeNV; + + +typedef enum VkAccelerationStructureTypeKHR { + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1, + VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2, + VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, + VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, + VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureTypeKHR; +typedef VkAccelerationStructureTypeKHR VkAccelerationStructureTypeNV; + + +typedef enum VkCopyAccelerationStructureModeKHR { + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1, + VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2, + VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3, + VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, + VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, + VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkCopyAccelerationStructureModeKHR; +typedef VkCopyAccelerationStructureModeKHR VkCopyAccelerationStructureModeNV; + + +typedef enum VkAccelerationStructureMemoryRequirementsTypeNV { + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2, + VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkAccelerationStructureMemoryRequirementsTypeNV; + +typedef enum VkGeometryFlagBitsKHR { + VK_GEOMETRY_OPAQUE_BIT_KHR = 0x00000001, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 0x00000002, + VK_GEOMETRY_OPAQUE_BIT_NV = VK_GEOMETRY_OPAQUE_BIT_KHR, + VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR, + VK_GEOMETRY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryFlagBitsKHR; +typedef VkFlags VkGeometryFlagsKHR; +typedef VkGeometryFlagsKHR VkGeometryFlagsNV; + +typedef VkGeometryFlagBitsKHR VkGeometryFlagBitsNV; + + +typedef enum VkGeometryInstanceFlagBitsKHR { + VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 0x00000001, + VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR = 0x00000002, + VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 0x00000004, + VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 0x00000008, + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT = 0x00000010, + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 0x00000020, + VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, + VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, + VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, + VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, + // VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT is a deprecated alias + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT = VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT, + // VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT is a deprecated alias + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT = VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkGeometryInstanceFlagBitsKHR; +typedef VkFlags VkGeometryInstanceFlagsKHR; +typedef VkGeometryInstanceFlagsKHR VkGeometryInstanceFlagsNV; + +typedef VkGeometryInstanceFlagBitsKHR VkGeometryInstanceFlagBitsNV; + + +typedef enum VkBuildAccelerationStructureFlagBitsKHR { + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 0x00000001, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 0x00000002, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 0x00000004, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 0x00000008, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 0x00000010, + VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = 0x00000020, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT = 0x00000040, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 0x00000080, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT = 0x00000100, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV = 0x00000200, +#endif + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR = 0x00000800, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT, +#ifdef VK_ENABLE_BETA_EXTENSIONS + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV, +#endif + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR, + VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkBuildAccelerationStructureFlagBitsKHR; +typedef VkFlags VkBuildAccelerationStructureFlagsKHR; +typedef VkBuildAccelerationStructureFlagsKHR VkBuildAccelerationStructureFlagsNV; + +typedef VkBuildAccelerationStructureFlagBitsKHR VkBuildAccelerationStructureFlagBitsNV; + +typedef struct VkRayTracingShaderGroupCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; +} VkRayTracingShaderGroupCreateInfoNV; + +typedef struct VkRayTracingPipelineCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoNV* pGroups; + uint32_t maxRecursionDepth; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoNV; + +typedef struct VkGeometryTrianglesNV { + VkStructureType sType; + const void* pNext; + VkBuffer vertexData; + VkDeviceSize vertexOffset; + uint32_t vertexCount; + VkDeviceSize vertexStride; + VkFormat vertexFormat; + VkBuffer indexData; + VkDeviceSize indexOffset; + uint32_t indexCount; + VkIndexType indexType; + VkBuffer transformData; + VkDeviceSize transformOffset; +} VkGeometryTrianglesNV; + +typedef struct VkGeometryAABBNV { + VkStructureType sType; + const void* pNext; + VkBuffer aabbData; + uint32_t numAABBs; + uint32_t stride; + VkDeviceSize offset; +} VkGeometryAABBNV; + +typedef struct VkGeometryDataNV { + VkGeometryTrianglesNV triangles; + VkGeometryAABBNV aabbs; +} VkGeometryDataNV; + +typedef struct VkGeometryNV { + VkStructureType sType; + const void* pNext; + VkGeometryTypeKHR geometryType; + VkGeometryDataNV geometry; + VkGeometryFlagsKHR flags; +} VkGeometryNV; + +typedef struct VkAccelerationStructureInfoNV { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureTypeNV type; + VkBuildAccelerationStructureFlagsNV flags; + uint32_t instanceCount; + uint32_t geometryCount; + const VkGeometryNV* pGeometries; +} VkAccelerationStructureInfoNV; + +typedef struct VkAccelerationStructureCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceSize compactedSize; + VkAccelerationStructureInfoNV info; +} VkAccelerationStructureCreateInfoNV; + +typedef struct VkBindAccelerationStructureMemoryInfoNV { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureNV accelerationStructure; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; + uint32_t deviceIndexCount; + const uint32_t* pDeviceIndices; +} VkBindAccelerationStructureMemoryInfoNV; + +typedef struct VkWriteDescriptorSetAccelerationStructureNV { + VkStructureType sType; + const void* pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureNV* pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureNV; + +typedef struct VkAccelerationStructureMemoryRequirementsInfoNV { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureMemoryRequirementsTypeNV type; + VkAccelerationStructureNV accelerationStructure; +} VkAccelerationStructureMemoryRequirementsInfoNV; + +typedef struct VkPhysicalDeviceRayTracingPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxTriangleCount; + uint32_t maxDescriptorSetAccelerationStructures; +} VkPhysicalDeviceRayTracingPropertiesNV; + +typedef struct VkTransformMatrixKHR { + float matrix[3][4]; +} VkTransformMatrixKHR; + +typedef VkTransformMatrixKHR VkTransformMatrixNV; + +typedef struct VkAabbPositionsKHR { + float minX; + float minY; + float minZ; + float maxX; + float maxY; + float maxZ; +} VkAabbPositionsKHR; + +typedef VkAabbPositionsKHR VkAabbPositionsNV; + +typedef struct VkAccelerationStructureInstanceKHR { + VkTransformMatrixKHR transform; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureInstanceKHR; + +typedef VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure); +typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset); +typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode); +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); +typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef VkResult (VKAPI_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( + VkDevice device, + const VkAccelerationStructureCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureNV* pAccelerationStructure); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( + VkDevice device, + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2KHR* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( + VkDevice device, + uint32_t bindInfoCount, + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( + VkCommandBuffer commandBuffer, + const VkAccelerationStructureInfoNV* pInfo, + VkBuffer instanceData, + VkDeviceSize instanceOffset, + VkBool32 update, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkBuffer scratch, + VkDeviceSize scratchOffset); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( + VkCommandBuffer commandBuffer, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkCopyAccelerationStructureModeKHR mode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( + VkCommandBuffer commandBuffer, + VkBuffer raygenShaderBindingTableBuffer, + VkDeviceSize raygenShaderBindingOffset, + VkBuffer missShaderBindingTableBuffer, + VkDeviceSize missShaderBindingOffset, + VkDeviceSize missShaderBindingStride, + VkBuffer hitShaderBindingTableBuffer, + VkDeviceSize hitShaderBindingOffset, + VkDeviceSize hitShaderBindingStride, + VkBuffer callableShaderBindingTableBuffer, + VkDeviceSize callableShaderBindingOffset, + VkDeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesNV( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoNV* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( + VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureNV* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( + VkDevice device, + VkPipeline pipeline, + uint32_t shader); +#endif +#endif + + +// VK_NV_representative_fragment_test is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_representative_fragment_test 1 +#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2 +#define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test" +typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 representativeFragmentTest; +} VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; + +typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 representativeFragmentTestEnable; +} VkPipelineRepresentativeFragmentTestStateCreateInfoNV; + + + +// VK_EXT_filter_cubic is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_QCOM_render_pass_shader_resolve is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_render_pass_shader_resolve 1 +#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION 4 +#define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME "VK_QCOM_render_pass_shader_resolve" + + +// VK_EXT_global_priority is a preprocessor guard. Do not pass it to API calls. +#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 VkQueueGlobalPriority VkQueueGlobalPriorityEXT; + +typedef VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoEXT; + + + +// VK_EXT_external_memory_host is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHostPointer, + VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); +#endif +#endif + + +// VK_AMD_buffer_marker is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_buffer_marker 1 +#define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1 +#define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker" +typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); +typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker); +#endif +#endif + + +// VK_AMD_pipeline_compiler_control is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_pipeline_compiler_control 1 +#define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1 +#define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control" + +typedef enum VkPipelineCompilerControlFlagBitsAMD { + VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF +} VkPipelineCompilerControlFlagBitsAMD; +typedef VkFlags VkPipelineCompilerControlFlagsAMD; +typedef struct VkPipelineCompilerControlCreateInfoAMD { + VkStructureType sType; + const void* pNext; + VkPipelineCompilerControlFlagsAMD compilerControlFlags; +} VkPipelineCompilerControlCreateInfoAMD; + + + +// VK_EXT_calibrated_timestamps is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_calibrated_timestamps 1 +#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2 +#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps" +typedef VkTimeDomainKHR VkTimeDomainEXT; + +typedef VkCalibratedTimestampInfoKHR VkCalibratedTimestampInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainKHR* pTimeDomains); +typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoKHR* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation); +#endif +#endif + + +// VK_AMD_shader_core_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_core_properties 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2 +#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties" +typedef struct VkPhysicalDeviceShaderCorePropertiesAMD { + VkStructureType sType; + void* pNext; + uint32_t shaderEngineCount; + uint32_t shaderArraysPerEngineCount; + uint32_t computeUnitsPerShaderArray; + uint32_t simdPerComputeUnit; + uint32_t wavefrontsPerSimd; + uint32_t wavefrontSize; + uint32_t sgprsPerSimd; + uint32_t minSgprAllocation; + uint32_t maxSgprAllocation; + uint32_t sgprAllocationGranularity; + uint32_t vgprsPerSimd; + uint32_t minVgprAllocation; + uint32_t maxVgprAllocation; + uint32_t vgprAllocationGranularity; +} VkPhysicalDeviceShaderCorePropertiesAMD; + + + +// VK_AMD_memory_overallocation_behavior is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_memory_overallocation_behavior 1 +#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1 +#define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior" + +typedef enum VkMemoryOverallocationBehaviorAMD { + VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2, + VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF +} VkMemoryOverallocationBehaviorAMD; +typedef struct VkDeviceMemoryOverallocationCreateInfoAMD { + VkStructureType sType; + const void* pNext; + VkMemoryOverallocationBehaviorAMD overallocationBehavior; +} VkDeviceMemoryOverallocationCreateInfoAMD; + + + +// VK_EXT_vertex_attribute_divisor is a preprocessor guard. Do not pass it to API calls. +#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 VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionEXT; + +typedef VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoEXT; + +typedef VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; + + + +// VK_EXT_pipeline_creation_feedback is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_creation_feedback 1 +#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback" +typedef VkPipelineCreationFeedbackFlagBits VkPipelineCreationFeedbackFlagBitsEXT; + +typedef VkPipelineCreationFeedbackFlags VkPipelineCreationFeedbackFlagsEXT; + +typedef VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedbackCreateInfoEXT; + +typedef VkPipelineCreationFeedback VkPipelineCreationFeedbackEXT; + + + +// VK_NV_shader_subgroup_partitioned is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_subgroup_partitioned 1 +#define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1 +#define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned" + + +// VK_NV_compute_shader_derivatives is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_compute_shader_derivatives 1 +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives" +typedef VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR VkPhysicalDeviceComputeShaderDerivativesFeaturesNV; + + + +// VK_NV_mesh_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_mesh_shader 1 +#define VK_NV_MESH_SHADER_SPEC_VERSION 1 +#define VK_NV_MESH_SHADER_EXTENSION_NAME "VK_NV_mesh_shader" +typedef struct VkPhysicalDeviceMeshShaderFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 taskShader; + VkBool32 meshShader; +} VkPhysicalDeviceMeshShaderFeaturesNV; + +typedef struct VkPhysicalDeviceMeshShaderPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxDrawMeshTasksCount; + uint32_t maxTaskWorkGroupInvocations; + uint32_t maxTaskWorkGroupSize[3]; + uint32_t maxTaskTotalMemorySize; + uint32_t maxTaskOutputCount; + uint32_t maxMeshWorkGroupInvocations; + uint32_t maxMeshWorkGroupSize[3]; + uint32_t maxMeshTotalMemorySize; + uint32_t maxMeshOutputVertices; + uint32_t maxMeshOutputPrimitives; + uint32_t maxMeshMultiviewViewCount; + uint32_t meshOutputPerVertexGranularity; + uint32_t meshOutputPerPrimitiveGranularity; +} VkPhysicalDeviceMeshShaderPropertiesNV; + +typedef struct VkDrawMeshTasksIndirectCommandNV { + uint32_t taskCount; + uint32_t firstTask; +} VkDrawMeshTasksIndirectCommandNV; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( + VkCommandBuffer commandBuffer, + uint32_t taskCount, + uint32_t firstTask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + + +// VK_NV_fragment_shader_barycentric is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fragment_shader_barycentric 1 +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric" +typedef VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV; + + + +// VK_NV_shader_image_footprint is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_image_footprint 1 +#define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2 +#define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint" +typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 imageFootprint; +} VkPhysicalDeviceShaderImageFootprintFeaturesNV; + + + +// VK_NV_scissor_exclusive is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_scissor_exclusive 1 +#define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 2 +#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive" +typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t exclusiveScissorCount; + const VkRect2D* pExclusiveScissors; +} VkPipelineViewportExclusiveScissorStateCreateInfoNV; + +typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 exclusiveScissor; +} VkPhysicalDeviceExclusiveScissorFeaturesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorEnableNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkBool32* pExclusiveScissorEnables); +typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorEnableNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkBool32* pExclusiveScissorEnables); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkRect2D* pExclusiveScissors); +#endif +#endif + + +// VK_NV_device_diagnostic_checkpoints is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_diagnostic_checkpoints 1 +#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2 +#define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints" +typedef struct VkQueueFamilyCheckpointPropertiesNV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlags checkpointExecutionStageMask; +} VkQueueFamilyCheckpointPropertiesNV; + +typedef struct VkCheckpointDataNV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlagBits stage; + void* pCheckpointMarker; +} VkCheckpointDataNV; + +typedef struct VkQueueFamilyCheckpointProperties2NV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlags2 checkpointExecutionStageMask; +} VkQueueFamilyCheckpointProperties2NV; + +typedef struct VkCheckpointData2NV { + VkStructureType sType; + void* pNext; + VkPipelineStageFlags2 stage; + void* pCheckpointMarker; +} VkCheckpointData2NV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void* pCheckpointMarker); +typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData); +typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( + VkCommandBuffer commandBuffer, + const void* pCheckpointMarker); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointDataNV* pCheckpointData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointData2NV* pCheckpointData); +#endif +#endif + + +// VK_INTEL_shader_integer_functions2 is a preprocessor guard. Do not pass it to API calls. +#define VK_INTEL_shader_integer_functions2 1 +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1 +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2" +typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL { + VkStructureType sType; + void* pNext; + VkBool32 shaderIntegerFunctions2; +} VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + + + +// VK_INTEL_performance_query is a preprocessor guard. Do not pass it to API calls. +#define VK_INTEL_performance_query 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) +#define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 2 +#define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query" + +typedef enum VkPerformanceConfigurationTypeINTEL { + VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0, + VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceConfigurationTypeINTEL; + +typedef enum VkQueryPoolSamplingModeINTEL { + VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0, + VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkQueryPoolSamplingModeINTEL; + +typedef enum VkPerformanceOverrideTypeINTEL { + VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0, + VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1, + VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceOverrideTypeINTEL; + +typedef enum VkPerformanceParameterTypeINTEL { + VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0, + VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1, + VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceParameterTypeINTEL; + +typedef enum VkPerformanceValueTypeINTEL { + VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0, + VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1, + VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2, + VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3, + VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4, + VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF +} VkPerformanceValueTypeINTEL; +typedef union VkPerformanceValueDataINTEL { + uint32_t value32; + uint64_t value64; + float valueFloat; + VkBool32 valueBool; + const char* valueString; +} VkPerformanceValueDataINTEL; + +typedef struct VkPerformanceValueINTEL { + VkPerformanceValueTypeINTEL type; + VkPerformanceValueDataINTEL data; +} VkPerformanceValueINTEL; + +typedef struct VkInitializePerformanceApiInfoINTEL { + VkStructureType sType; + const void* pNext; + void* pUserData; +} VkInitializePerformanceApiInfoINTEL; + +typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL { + VkStructureType sType; + const void* pNext; + VkQueryPoolSamplingModeINTEL performanceCountersSampling; +} VkQueryPoolPerformanceQueryCreateInfoINTEL; + +typedef VkQueryPoolPerformanceQueryCreateInfoINTEL VkQueryPoolCreateInfoINTEL; + +typedef struct VkPerformanceMarkerInfoINTEL { + VkStructureType sType; + const void* pNext; + uint64_t marker; +} VkPerformanceMarkerInfoINTEL; + +typedef struct VkPerformanceStreamMarkerInfoINTEL { + VkStructureType sType; + const void* pNext; + uint32_t marker; +} VkPerformanceStreamMarkerInfoINTEL; + +typedef struct VkPerformanceOverrideInfoINTEL { + VkStructureType sType; + const void* pNext; + VkPerformanceOverrideTypeINTEL type; + VkBool32 enable; + uint64_t parameter; +} VkPerformanceOverrideInfoINTEL; + +typedef struct VkPerformanceConfigurationAcquireInfoINTEL { + VkStructureType sType; + const void* pNext; + VkPerformanceConfigurationTypeINTEL type; +} VkPerformanceConfigurationAcquireInfoINTEL; + +typedef VkResult (VKAPI_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); +typedef void (VKAPI_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device); +typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo); +typedef VkResult (VKAPI_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration); +typedef VkResult (VKAPI_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration); +typedef VkResult (VKAPI_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration); +typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( + VkDevice device, + const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( + VkDevice device); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceMarkerInfoINTEL* pMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceOverrideInfoINTEL* pOverrideInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( + VkDevice device, + const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, + VkPerformanceConfigurationINTEL* pConfiguration); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( + VkDevice device, + VkPerformanceConfigurationINTEL configuration); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( + VkQueue queue, + VkPerformanceConfigurationINTEL configuration); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( + VkDevice device, + VkPerformanceParameterTypeINTEL parameter, + VkPerformanceValueINTEL* pValue); +#endif +#endif + + +// VK_EXT_pci_bus_info is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_AMD_display_native_hdr is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_display_native_hdr 1 +#define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1 +#define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr" +typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD { + VkStructureType sType; + void* pNext; + VkBool32 localDimmingSupport; +} VkDisplayNativeHdrSurfaceCapabilitiesAMD; + +typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD { + VkStructureType sType; + const void* pNext; + VkBool32 localDimmingEnable; +} VkSwapchainDisplayNativeHdrCreateInfoAMD; + +typedef void (VKAPI_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( + VkDevice device, + VkSwapchainKHR swapChain, + VkBool32 localDimmingEnable); +#endif +#endif + + +// VK_EXT_fragment_density_map is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 2 +#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map" +typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMap; + VkBool32 fragmentDensityMapDynamic; + VkBool32 fragmentDensityMapNonSubsampledImages; +} VkPhysicalDeviceFragmentDensityMapFeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT { + VkStructureType sType; + void* pNext; + VkExtent2D minFragmentDensityTexelSize; + VkExtent2D maxFragmentDensityTexelSize; + VkBool32 fragmentDensityInvocations; +} VkPhysicalDeviceFragmentDensityMapPropertiesEXT; + +typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkAttachmentReference fragmentDensityMapAttachment; +} VkRenderPassFragmentDensityMapCreateInfoEXT; + +typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT { + VkStructureType sType; + const void* pNext; + VkImageView imageView; + VkImageLayout imageLayout; +} VkRenderingFragmentDensityMapAttachmentInfoEXT; + + + +// VK_EXT_scalar_block_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_scalar_block_layout 1 +#define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1 +#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout" +typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT; + + + +// VK_GOOGLE_hlsl_functionality1 is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_hlsl_functionality1 1 +#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION 1 +#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1" +// VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION is a deprecated alias +#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION +// VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME is a deprecated alias +#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME + + +// VK_GOOGLE_decorate_string is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_decorate_string 1 +#define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1 +#define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string" + + +// VK_EXT_subgroup_size_control is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceSubgroupSizeControlFeatures VkPhysicalDeviceSubgroupSizeControlFeaturesEXT; + +typedef VkPhysicalDeviceSubgroupSizeControlProperties VkPhysicalDeviceSubgroupSizeControlPropertiesEXT; + +typedef VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT; + + + +// VK_AMD_shader_core_properties2 is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_core_properties2 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1 +#define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2" + +typedef enum VkShaderCorePropertiesFlagBitsAMD { + VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF +} VkShaderCorePropertiesFlagBitsAMD; +typedef VkFlags VkShaderCorePropertiesFlagsAMD; +typedef struct VkPhysicalDeviceShaderCoreProperties2AMD { + VkStructureType sType; + void* pNext; + VkShaderCorePropertiesFlagsAMD shaderCoreFeatures; + uint32_t activeComputeUnitCount; +} VkPhysicalDeviceShaderCoreProperties2AMD; + + + +// VK_AMD_device_coherent_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_device_coherent_memory 1 +#define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1 +#define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory" +typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD { + VkStructureType sType; + void* pNext; + VkBool32 deviceCoherentMemory; +} VkPhysicalDeviceCoherentMemoryFeaturesAMD; + + + +// VK_EXT_shader_image_atomic_int64 is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_memory_budget is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_memory_priority is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_memory_priority 1 +#define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1 +#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority" +typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 memoryPriority; +} VkPhysicalDeviceMemoryPriorityFeaturesEXT; + +typedef struct VkMemoryPriorityAllocateInfoEXT { + VkStructureType sType; + const void* pNext; + float priority; +} VkMemoryPriorityAllocateInfoEXT; + + + +// VK_NV_dedicated_allocation_image_aliasing is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_dedicated_allocation_image_aliasing 1 +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1 +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing" +typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 dedicatedAllocationImageAliasing; +} VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + + + +// VK_EXT_buffer_device_address is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_buffer_device_address 1 +#define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2 +#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address" +typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 bufferDeviceAddress; + VkBool32 bufferDeviceAddressCaptureReplay; + VkBool32 bufferDeviceAddressMultiDevice; +} VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; + +typedef VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT; + +typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoEXT; + +typedef struct VkBufferDeviceAddressCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceAddress deviceAddress; +} VkBufferDeviceAddressCreateInfoEXT; + +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo); +#endif +#endif + + +// VK_EXT_tooling_info is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_tooling_info 1 +#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1 +#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info" +typedef VkToolPurposeFlagBits VkToolPurposeFlagBitsEXT; + +typedef VkToolPurposeFlags VkToolPurposeFlagsEXT; + +typedef VkPhysicalDeviceToolProperties VkPhysicalDeviceToolPropertiesEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties); +#endif +#endif + + +// VK_EXT_separate_stencil_usage is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_separate_stencil_usage 1 +#define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1 +#define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage" +typedef VkImageStencilUsageCreateInfo VkImageStencilUsageCreateInfoEXT; + + + +// VK_EXT_validation_features is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_validation_features 1 +#define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 6 +#define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features" + +typedef enum VkValidationFeatureEnableEXT { + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0, + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1, + VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2, + VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3, + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4, + VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationFeatureEnableEXT; + +typedef enum VkValidationFeatureDisableEXT { + VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0, + VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1, + VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2, + VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3, + VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4, + VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5, + VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6, + VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT = 7, + VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkValidationFeatureDisableEXT; +typedef struct VkValidationFeaturesEXT { + VkStructureType sType; + const void* pNext; + uint32_t enabledValidationFeatureCount; + const VkValidationFeatureEnableEXT* pEnabledValidationFeatures; + uint32_t disabledValidationFeatureCount; + const VkValidationFeatureDisableEXT* pDisabledValidationFeatures; +} VkValidationFeaturesEXT; + + + +// VK_NV_cooperative_matrix is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_matrix 1 +#define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix" +typedef VkComponentTypeKHR VkComponentTypeNV; + +typedef VkScopeKHR VkScopeNV; + +typedef struct VkCooperativeMatrixPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t MSize; + uint32_t NSize; + uint32_t KSize; + VkComponentTypeNV AType; + VkComponentTypeNV BType; + VkComponentTypeNV CType; + VkComponentTypeNV DType; + VkScopeNV scope; +} VkCooperativeMatrixPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrix; + VkBool32 cooperativeMatrixRobustBufferAccess; +} VkPhysicalDeviceCooperativeMatrixFeaturesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeMatrixSupportedStages; +} VkPhysicalDeviceCooperativeMatrixPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesNV* pProperties); +#endif +#endif + + +// VK_NV_coverage_reduction_mode is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_coverage_reduction_mode 1 +#define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1 +#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode" + +typedef enum VkCoverageReductionModeNV { + VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0, + VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1, + VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkCoverageReductionModeNV; +typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; +typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 coverageReductionMode; +} VkPhysicalDeviceCoverageReductionModeFeaturesNV; + +typedef struct VkPipelineCoverageReductionStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineCoverageReductionStateCreateFlagsNV flags; + VkCoverageReductionModeNV coverageReductionMode; +} VkPipelineCoverageReductionStateCreateInfoNV; + +typedef struct VkFramebufferMixedSamplesCombinationNV { + VkStructureType sType; + void* pNext; + VkCoverageReductionModeNV coverageReductionMode; + VkSampleCountFlagBits rasterizationSamples; + VkSampleCountFlags depthStencilSamples; + VkSampleCountFlags colorSamples; +} VkFramebufferMixedSamplesCombinationNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + VkPhysicalDevice physicalDevice, + uint32_t* pCombinationCount, + VkFramebufferMixedSamplesCombinationNV* pCombinations); +#endif +#endif + + +// VK_EXT_fragment_shader_interlock is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_ycbcr_image_arrays is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_provoking_vertex is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_provoking_vertex 1 +#define VK_EXT_PROVOKING_VERTEX_SPEC_VERSION 1 +#define VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME "VK_EXT_provoking_vertex" + +typedef enum VkProvokingVertexModeEXT { + VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT = 0, + VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT = 1, + VK_PROVOKING_VERTEX_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkProvokingVertexModeEXT; +typedef struct VkPhysicalDeviceProvokingVertexFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 provokingVertexLast; + VkBool32 transformFeedbackPreservesProvokingVertex; +} VkPhysicalDeviceProvokingVertexFeaturesEXT; + +typedef struct VkPhysicalDeviceProvokingVertexPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 provokingVertexModePerPipeline; + VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex; +} VkPhysicalDeviceProvokingVertexPropertiesEXT; + +typedef struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkProvokingVertexModeEXT provokingVertexMode; +} VkPipelineRasterizationProvokingVertexStateCreateInfoEXT; + + + +// VK_EXT_headless_surface is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( + VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_EXT_line_rasterization is a preprocessor guard. Do not pass it to API calls. +#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 VkLineRasterizationMode VkLineRasterizationModeEXT; + +typedef VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesEXT; + +typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesEXT; + +typedef VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); +#endif +#endif + + +// VK_EXT_shader_atomic_float is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_host_query_reset is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_host_query_reset 1 +#define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1 +#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset" +typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount); +#endif +#endif + + +// VK_EXT_index_type_uint8 is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesEXT; + + + +// VK_EXT_extended_dynamic_state is a preprocessor guard. Do not pass it to API calls. +#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 +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +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); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthWriteEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( + VkCommandBuffer commandBuffer, + VkCompareOp depthCompareOp); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stencilTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp); +#endif +#endif + + +// VK_EXT_host_image_copy is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_host_image_copy 1 +#define VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION 1 +#define VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME "VK_EXT_host_image_copy" +typedef VkHostImageCopyFlagBits VkHostImageCopyFlagBitsEXT; + +typedef VkHostImageCopyFlags VkHostImageCopyFlagsEXT; + +typedef VkPhysicalDeviceHostImageCopyFeatures VkPhysicalDeviceHostImageCopyFeaturesEXT; + +typedef VkPhysicalDeviceHostImageCopyProperties VkPhysicalDeviceHostImageCopyPropertiesEXT; + +typedef VkMemoryToImageCopy VkMemoryToImageCopyEXT; + +typedef VkImageToMemoryCopy VkImageToMemoryCopyEXT; + +typedef VkCopyMemoryToImageInfo VkCopyMemoryToImageInfoEXT; + +typedef VkCopyImageToMemoryInfo VkCopyImageToMemoryInfoEXT; + +typedef VkCopyImageToImageInfo VkCopyImageToImageInfoEXT; + +typedef VkHostImageLayoutTransitionInfo VkHostImageLayoutTransitionInfoEXT; + +typedef VkSubresourceHostMemcpySize VkSubresourceHostMemcpySizeEXT; + +typedef VkHostImageCopyDevicePerformanceQuery VkHostImageCopyDevicePerformanceQueryEXT; + +typedef VkSubresourceLayout2 VkSubresourceLayout2EXT; + +typedef VkImageSubresource2 VkImageSubresource2EXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImageEXT)(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemoryEXT)(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImageEXT)(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayoutEXT)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); +#endif +#endif + + +// VK_EXT_map_memory_placed is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_map_memory_placed 1 +#define VK_EXT_MAP_MEMORY_PLACED_SPEC_VERSION 1 +#define VK_EXT_MAP_MEMORY_PLACED_EXTENSION_NAME "VK_EXT_map_memory_placed" +typedef struct VkPhysicalDeviceMapMemoryPlacedFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 memoryMapPlaced; + VkBool32 memoryMapRangePlaced; + VkBool32 memoryUnmapReserve; +} VkPhysicalDeviceMapMemoryPlacedFeaturesEXT; + +typedef struct VkPhysicalDeviceMapMemoryPlacedPropertiesEXT { + VkStructureType sType; + void* pNext; + VkDeviceSize minPlacedMemoryMapAlignment; +} VkPhysicalDeviceMapMemoryPlacedPropertiesEXT; + +typedef struct VkMemoryMapPlacedInfoEXT { + VkStructureType sType; + const void* pNext; + void* pPlacedAddress; +} VkMemoryMapPlacedInfoEXT; + + + +// VK_EXT_shader_atomic_float2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_atomic_float2 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION 1 +#define VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME "VK_EXT_shader_atomic_float2" +typedef struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderBufferFloat16Atomics; + VkBool32 shaderBufferFloat16AtomicAdd; + VkBool32 shaderBufferFloat16AtomicMinMax; + VkBool32 shaderBufferFloat32AtomicMinMax; + VkBool32 shaderBufferFloat64AtomicMinMax; + VkBool32 shaderSharedFloat16Atomics; + VkBool32 shaderSharedFloat16AtomicAdd; + VkBool32 shaderSharedFloat16AtomicMinMax; + VkBool32 shaderSharedFloat32AtomicMinMax; + VkBool32 shaderSharedFloat64AtomicMinMax; + VkBool32 shaderImageFloat32AtomicMinMax; + VkBool32 sparseImageFloat32AtomicMinMax; +} VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT; + + + +// VK_EXT_surface_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_surface_maintenance1 1 +#define VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME "VK_EXT_surface_maintenance1" +typedef VkPresentScalingFlagBitsKHR VkPresentScalingFlagBitsEXT; + +typedef VkPresentScalingFlagsKHR VkPresentScalingFlagsEXT; + +typedef VkPresentGravityFlagBitsKHR VkPresentGravityFlagBitsEXT; + +typedef VkPresentGravityFlagsKHR VkPresentGravityFlagsEXT; + +typedef VkSurfacePresentModeKHR VkSurfacePresentModeEXT; + +typedef VkSurfacePresentScalingCapabilitiesKHR VkSurfacePresentScalingCapabilitiesEXT; + +typedef VkSurfacePresentModeCompatibilityKHR VkSurfacePresentModeCompatibilityEXT; + + + +// VK_EXT_swapchain_maintenance1 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_swapchain_maintenance1 1 +#define VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION 1 +#define VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME "VK_EXT_swapchain_maintenance1" +typedef VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT; + +typedef VkSwapchainPresentFenceInfoKHR VkSwapchainPresentFenceInfoEXT; + +typedef VkSwapchainPresentModesCreateInfoKHR VkSwapchainPresentModesCreateInfoEXT; + +typedef VkSwapchainPresentModeInfoKHR VkSwapchainPresentModeInfoEXT; + +typedef VkSwapchainPresentScalingCreateInfoKHR VkSwapchainPresentScalingCreateInfoEXT; + +typedef VkReleaseSwapchainImagesInfoKHR VkReleaseSwapchainImagesInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkReleaseSwapchainImagesEXT)(VkDevice device, const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo); +#endif +#endif + + +// VK_EXT_shader_demote_to_helper_invocation is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; + + + +// VK_NV_device_generated_commands is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_generated_commands 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) +#define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 +#define VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NV_device_generated_commands" + +typedef enum VkIndirectCommandsTokenTypeNV { + VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV = 1000428003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV = 1000428004, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectCommandsTokenTypeNV; + +typedef enum VkIndirectStateFlagBitsNV { + VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 0x00000001, + VK_INDIRECT_STATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectStateFlagBitsNV; +typedef VkFlags VkIndirectStateFlagsNV; + +typedef enum VkIndirectCommandsLayoutUsageFlagBitsNV { + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 0x00000001, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 0x00000002, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 0x00000004, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkIndirectCommandsLayoutUsageFlagBitsNV; +typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxGraphicsShaderGroupCount; + uint32_t maxIndirectSequenceCount; + uint32_t maxIndirectCommandsTokenCount; + uint32_t maxIndirectCommandsStreamCount; + uint32_t maxIndirectCommandsTokenOffset; + uint32_t maxIndirectCommandsStreamStride; + uint32_t minSequencesCountBufferOffsetAlignment; + uint32_t minSequencesIndexBufferOffsetAlignment; + uint32_t minIndirectCommandsBufferOffsetAlignment; +} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 deviceGeneratedCommands; +} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + +typedef struct VkGraphicsShaderGroupCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + const VkPipelineVertexInputStateCreateInfo* pVertexInputState; + const VkPipelineTessellationStateCreateInfo* pTessellationState; +} VkGraphicsShaderGroupCreateInfoNV; + +typedef struct VkGraphicsPipelineShaderGroupsCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t groupCount; + const VkGraphicsShaderGroupCreateInfoNV* pGroups; + uint32_t pipelineCount; + const VkPipeline* pPipelines; +} VkGraphicsPipelineShaderGroupsCreateInfoNV; + +typedef struct VkBindShaderGroupIndirectCommandNV { + uint32_t groupIndex; +} VkBindShaderGroupIndirectCommandNV; + +typedef struct VkBindIndexBufferIndirectCommandNV { + VkDeviceAddress bufferAddress; + uint32_t size; + VkIndexType indexType; +} VkBindIndexBufferIndirectCommandNV; + +typedef struct VkBindVertexBufferIndirectCommandNV { + VkDeviceAddress bufferAddress; + uint32_t size; + uint32_t stride; +} VkBindVertexBufferIndirectCommandNV; + +typedef struct VkSetStateFlagsIndirectCommandNV { + uint32_t data; +} VkSetStateFlagsIndirectCommandNV; + +typedef struct VkIndirectCommandsStreamNV { + VkBuffer buffer; + VkDeviceSize offset; +} VkIndirectCommandsStreamNV; + +typedef struct VkIndirectCommandsLayoutTokenNV { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsTokenTypeNV tokenType; + uint32_t stream; + uint32_t offset; + uint32_t vertexBindingUnit; + VkBool32 vertexDynamicStride; + VkPipelineLayout pushconstantPipelineLayout; + VkShaderStageFlags pushconstantShaderStageFlags; + uint32_t pushconstantOffset; + uint32_t pushconstantSize; + VkIndirectStateFlagsNV indirectStateFlags; + uint32_t indexTypeCount; + const VkIndexType* pIndexTypes; + const uint32_t* pIndexTypeValues; +} VkIndirectCommandsLayoutTokenNV; + +typedef struct VkIndirectCommandsLayoutCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsLayoutUsageFlagsNV flags; + VkPipelineBindPoint pipelineBindPoint; + uint32_t tokenCount; + const VkIndirectCommandsLayoutTokenNV* pTokens; + uint32_t streamCount; + const uint32_t* pStreamStrides; +} VkIndirectCommandsLayoutCreateInfoNV; + +typedef struct VkGeneratedCommandsInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; + VkIndirectCommandsLayoutNV indirectCommandsLayout; + uint32_t streamCount; + const VkIndirectCommandsStreamNV* pStreams; + uint32_t sequencesCount; + VkBuffer preprocessBuffer; + VkDeviceSize preprocessOffset; + VkDeviceSize preprocessSize; + VkBuffer sequencesCountBuffer; + VkDeviceSize sequencesCountOffset; + VkBuffer sequencesIndexBuffer; + VkDeviceSize sequencesIndexOffset; +} VkGeneratedCommandsInfoNV; + +typedef struct VkGeneratedCommandsMemoryRequirementsInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; + VkIndirectCommandsLayoutNV indirectCommandsLayout; + uint32_t maxSequencesCount; +} VkGeneratedCommandsMemoryRequirementsInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsNV)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsNV)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsNV)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindPipelineShaderGroupNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex); +typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNV)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); +typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNV)(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( + VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( + VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( + VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline, + uint32_t groupIndex); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( + VkDevice device, + VkIndirectCommandsLayoutNV indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator); +#endif +#endif + + +// VK_NV_inherited_viewport_scissor is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_inherited_viewport_scissor 1 +#define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1 +#define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor" +typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 inheritedViewportScissor2D; +} VkPhysicalDeviceInheritedViewportScissorFeaturesNV; + +typedef struct VkCommandBufferInheritanceViewportScissorInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 viewportScissor2D; + uint32_t viewportDepthCount; + const VkViewport* pViewportDepths; +} VkCommandBufferInheritanceViewportScissorInfoNV; + + + +// VK_EXT_texel_buffer_alignment is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceTexelBufferAlignmentProperties VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT; + + + +// VK_QCOM_render_pass_transform is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_render_pass_transform 1 +#define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 5 +#define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform" +typedef struct VkRenderPassTransformBeginInfoQCOM { + VkStructureType sType; + const void* pNext; + VkSurfaceTransformFlagBitsKHR transform; +} VkRenderPassTransformBeginInfoQCOM; + +typedef struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM { + VkStructureType sType; + const void* pNext; + VkSurfaceTransformFlagBitsKHR transform; + VkRect2D renderArea; +} VkCommandBufferInheritanceRenderPassTransformInfoQCOM; + + + +// VK_EXT_depth_bias_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_bias_control 1 +#define VK_EXT_DEPTH_BIAS_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME "VK_EXT_depth_bias_control" + +typedef enum VkDepthBiasRepresentationEXT { + VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT = 0, + VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT = 1, + VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT = 2, + VK_DEPTH_BIAS_REPRESENTATION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDepthBiasRepresentationEXT; +typedef struct VkPhysicalDeviceDepthBiasControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthBiasControl; + VkBool32 leastRepresentableValueForceUnormRepresentation; + VkBool32 floatRepresentation; + VkBool32 depthBiasExact; +} VkPhysicalDeviceDepthBiasControlFeaturesEXT; + +typedef struct VkDepthBiasInfoEXT { + VkStructureType sType; + const void* pNext; + float depthBiasConstantFactor; + float depthBiasClamp; + float depthBiasSlopeFactor; +} VkDepthBiasInfoEXT; + +typedef struct VkDepthBiasRepresentationInfoEXT { + VkStructureType sType; + const void* pNext; + VkDepthBiasRepresentationEXT depthBiasRepresentation; + VkBool32 depthBiasExact; +} VkDepthBiasRepresentationInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias2EXT)(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT* pDepthBiasInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias2EXT( + VkCommandBuffer commandBuffer, + const VkDepthBiasInfoEXT* pDepthBiasInfo); +#endif +#endif + + +// VK_EXT_device_memory_report is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_memory_report 1 +#define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2 +#define VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME "VK_EXT_device_memory_report" + +typedef enum VkDeviceMemoryReportEventTypeEXT { + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = 0, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = 1, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = 2, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = 3, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = 4, + VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceMemoryReportEventTypeEXT; +typedef VkFlags VkDeviceMemoryReportFlagsEXT; +typedef struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 deviceMemoryReport; +} VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; + +typedef struct VkDeviceMemoryReportCallbackDataEXT { + VkStructureType sType; + void* pNext; + VkDeviceMemoryReportFlagsEXT flags; + VkDeviceMemoryReportEventTypeEXT type; + uint64_t memoryObjectId; + VkDeviceSize size; + VkObjectType objectType; + uint64_t objectHandle; + uint32_t heapIndex; +} VkDeviceMemoryReportCallbackDataEXT; + +typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)( + const VkDeviceMemoryReportCallbackDataEXT* pCallbackData, + void* pUserData); + +typedef struct VkDeviceDeviceMemoryReportCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemoryReportFlagsEXT flags; + PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback; + void* pUserData; +} VkDeviceDeviceMemoryReportCreateInfoEXT; + + + +// VK_EXT_acquire_drm_display is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_acquire_drm_display 1 +#define VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION 1 +#define VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_drm_display" +typedef VkResult (VKAPI_PTR *PFN_vkAcquireDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, VkDisplayKHR display); +typedef VkResult (VKAPI_PTR *PFN_vkGetDrmDisplayEXT)(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, VkDisplayKHR* display); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + VkDisplayKHR display); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + uint32_t connectorId, + VkDisplayKHR* display); +#endif +#endif + + +// VK_EXT_robustness2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_robustness2 1 +#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2" +typedef VkPhysicalDeviceRobustness2FeaturesKHR VkPhysicalDeviceRobustness2FeaturesEXT; + +typedef VkPhysicalDeviceRobustness2PropertiesKHR VkPhysicalDeviceRobustness2PropertiesEXT; + + + +// VK_EXT_custom_border_color is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_GOOGLE_user_type is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_user_type 1 +#define VK_GOOGLE_USER_TYPE_SPEC_VERSION 1 +#define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type" + + +// VK_NV_present_barrier is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_present_barrier 1 +#define VK_NV_PRESENT_BARRIER_SPEC_VERSION 1 +#define VK_NV_PRESENT_BARRIER_EXTENSION_NAME "VK_NV_present_barrier" +typedef struct VkPhysicalDevicePresentBarrierFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 presentBarrier; +} VkPhysicalDevicePresentBarrierFeaturesNV; + +typedef struct VkSurfaceCapabilitiesPresentBarrierNV { + VkStructureType sType; + void* pNext; + VkBool32 presentBarrierSupported; +} VkSurfaceCapabilitiesPresentBarrierNV; + +typedef struct VkSwapchainPresentBarrierCreateInfoNV { + VkStructureType sType; + void* pNext; + VkBool32 presentBarrierEnable; +} VkSwapchainPresentBarrierCreateInfoNV; + + + +// VK_EXT_private_data is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_private_data 1 +typedef VkPrivateDataSlot VkPrivateDataSlotEXT; + +#define VK_EXT_PRIVATE_DATA_SPEC_VERSION 1 +#define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data" +typedef VkPrivateDataSlotCreateFlags VkPrivateDataSlotCreateFlagsEXT; + +typedef VkPhysicalDevicePrivateDataFeatures VkPhysicalDevicePrivateDataFeaturesEXT; + +typedef VkDevicePrivateDataCreateInfo VkDevicePrivateDataCreateInfoEXT; + +typedef VkPrivateDataSlotCreateInfo VkPrivateDataSlotCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot); +typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data); +typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( + VkDevice device, + const VkPrivateDataSlotCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPrivateDataSlot* pPrivateDataSlot); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( + VkDevice device, + VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData); +#endif +#endif + + +// VK_EXT_pipeline_creation_cache_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_creation_cache_control 1 +#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3 +#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control" +typedef VkPhysicalDevicePipelineCreationCacheControlFeatures VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT; + + + +// VK_NV_device_diagnostics_config is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_diagnostics_config 1 +#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 2 +#define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config" + +typedef enum VkDeviceDiagnosticsConfigFlagBitsNV { + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 0x00000001, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 0x00000002, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 0x00000004, + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV = 0x00000008, + VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkDeviceDiagnosticsConfigFlagBitsNV; +typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; +typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 diagnosticsConfig; +} VkPhysicalDeviceDiagnosticsConfigFeaturesNV; + +typedef struct VkDeviceDiagnosticsConfigCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceDiagnosticsConfigFlagsNV flags; +} VkDeviceDiagnosticsConfigCreateInfoNV; + + + +// VK_QCOM_render_pass_store_ops is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_render_pass_store_ops 1 +#define VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION 2 +#define VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME "VK_QCOM_render_pass_store_ops" + + +// VK_QCOM_tile_shading is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_shading 1 +#define VK_QCOM_TILE_SHADING_SPEC_VERSION 1 +#define VK_QCOM_TILE_SHADING_EXTENSION_NAME "VK_QCOM_tile_shading" + +typedef enum VkTileShadingRenderPassFlagBitsQCOM { + VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM = 0x00000001, + VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM = 0x00000002, + VK_TILE_SHADING_RENDER_PASS_FLAG_BITS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkTileShadingRenderPassFlagBitsQCOM; +typedef VkFlags VkTileShadingRenderPassFlagsQCOM; +typedef struct VkPhysicalDeviceTileShadingFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileShading; + VkBool32 tileShadingFragmentStage; + VkBool32 tileShadingColorAttachments; + VkBool32 tileShadingDepthAttachments; + VkBool32 tileShadingStencilAttachments; + VkBool32 tileShadingInputAttachments; + VkBool32 tileShadingSampledAttachments; + VkBool32 tileShadingPerTileDraw; + VkBool32 tileShadingPerTileDispatch; + VkBool32 tileShadingDispatchTile; + VkBool32 tileShadingApron; + VkBool32 tileShadingAnisotropicApron; + VkBool32 tileShadingAtomicOps; + VkBool32 tileShadingImageProcessing; +} VkPhysicalDeviceTileShadingFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileShadingPropertiesQCOM { + VkStructureType sType; + void* pNext; + uint32_t maxApronSize; + VkBool32 preferNonCoherent; + VkExtent2D tileGranularity; + VkExtent2D maxTileShadingRate; +} VkPhysicalDeviceTileShadingPropertiesQCOM; + +typedef struct VkRenderPassTileShadingCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkTileShadingRenderPassFlagsQCOM flags; + VkExtent2D tileApronSize; +} VkRenderPassTileShadingCreateInfoQCOM; + +typedef struct VkPerTileBeginInfoQCOM { + VkStructureType sType; + const void* pNext; +} VkPerTileBeginInfoQCOM; + +typedef struct VkPerTileEndInfoQCOM { + VkStructureType sType; + const void* pNext; +} VkPerTileEndInfoQCOM; + +typedef struct VkDispatchTileInfoQCOM { + VkStructureType sType; + const void* pNext; +} VkDispatchTileInfoQCOM; + +typedef void (VKAPI_PTR *PFN_vkCmdDispatchTileQCOM)(VkCommandBuffer commandBuffer, const VkDispatchTileInfoQCOM* pDispatchTileInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileBeginInfoQCOM* pPerTileBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM* pPerTileEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM( + VkCommandBuffer commandBuffer, + const VkDispatchTileInfoQCOM* pDispatchTileInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileEndInfoQCOM* pPerTileEndInfo); +#endif +#endif + + +// VK_NV_low_latency is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_low_latency 1 +#define VK_NV_LOW_LATENCY_SPEC_VERSION 1 +#define VK_NV_LOW_LATENCY_EXTENSION_NAME "VK_NV_low_latency" +typedef struct VkQueryLowLatencySupportNV { + VkStructureType sType; + const void* pNext; + void* pQueriedLowLatencyData; +} VkQueryLowLatencySupportNV; + + + +// VK_EXT_descriptor_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_descriptor_buffer 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) +#define VK_EXT_DESCRIPTOR_BUFFER_SPEC_VERSION 1 +#define VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME "VK_EXT_descriptor_buffer" +typedef struct VkPhysicalDeviceDescriptorBufferPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 combinedImageSamplerDescriptorSingleArray; + VkBool32 bufferlessPushDescriptors; + VkBool32 allowSamplerImageViewPostSubmitCreation; + VkDeviceSize descriptorBufferOffsetAlignment; + uint32_t maxDescriptorBufferBindings; + uint32_t maxResourceDescriptorBufferBindings; + uint32_t maxSamplerDescriptorBufferBindings; + uint32_t maxEmbeddedImmutableSamplerBindings; + uint32_t maxEmbeddedImmutableSamplers; + size_t bufferCaptureReplayDescriptorDataSize; + size_t imageCaptureReplayDescriptorDataSize; + size_t imageViewCaptureReplayDescriptorDataSize; + size_t samplerCaptureReplayDescriptorDataSize; + size_t accelerationStructureCaptureReplayDescriptorDataSize; + size_t samplerDescriptorSize; + size_t combinedImageSamplerDescriptorSize; + size_t sampledImageDescriptorSize; + size_t storageImageDescriptorSize; + size_t uniformTexelBufferDescriptorSize; + size_t robustUniformTexelBufferDescriptorSize; + size_t storageTexelBufferDescriptorSize; + size_t robustStorageTexelBufferDescriptorSize; + size_t uniformBufferDescriptorSize; + size_t robustUniformBufferDescriptorSize; + size_t storageBufferDescriptorSize; + size_t robustStorageBufferDescriptorSize; + size_t inputAttachmentDescriptorSize; + size_t accelerationStructureDescriptorSize; + VkDeviceSize maxSamplerDescriptorBufferRange; + VkDeviceSize maxResourceDescriptorBufferRange; + VkDeviceSize samplerDescriptorBufferAddressSpaceSize; + VkDeviceSize resourceDescriptorBufferAddressSpaceSize; + VkDeviceSize descriptorBufferAddressSpaceSize; +} VkPhysicalDeviceDescriptorBufferPropertiesEXT; + +typedef struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT { + VkStructureType sType; + void* pNext; + size_t combinedImageSamplerDensityMapDescriptorSize; +} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + +typedef struct VkPhysicalDeviceDescriptorBufferFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 descriptorBuffer; + VkBool32 descriptorBufferCaptureReplay; + VkBool32 descriptorBufferImageLayoutIgnored; + VkBool32 descriptorBufferPushDescriptors; +} VkPhysicalDeviceDescriptorBufferFeaturesEXT; + +typedef struct VkDescriptorAddressInfoEXT { + VkStructureType sType; + void* pNext; + VkDeviceAddress address; + VkDeviceSize range; + VkFormat format; +} VkDescriptorAddressInfoEXT; + +typedef struct VkDescriptorBufferBindingInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceAddress address; + VkBufferUsageFlags usage; +} VkDescriptorBufferBindingInfoEXT; + +typedef struct VkDescriptorBufferBindingPushDescriptorBufferHandleEXT { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkDescriptorBufferBindingPushDescriptorBufferHandleEXT; + +typedef union VkDescriptorDataEXT { + const VkSampler* pSampler; + const VkDescriptorImageInfo* pCombinedImageSampler; + const VkDescriptorImageInfo* pInputAttachmentImage; + const VkDescriptorImageInfo* pSampledImage; + const VkDescriptorImageInfo* pStorageImage; + const VkDescriptorAddressInfoEXT* pUniformTexelBuffer; + const VkDescriptorAddressInfoEXT* pStorageTexelBuffer; + const VkDescriptorAddressInfoEXT* pUniformBuffer; + const VkDescriptorAddressInfoEXT* pStorageBuffer; + VkDeviceAddress accelerationStructure; +} VkDescriptorDataEXT; + +typedef struct VkDescriptorGetInfoEXT { + VkStructureType sType; + const void* pNext; + VkDescriptorType type; + VkDescriptorDataEXT data; +} VkDescriptorGetInfoEXT; + +typedef struct VkBufferCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkBuffer buffer; +} VkBufferCaptureDescriptorDataInfoEXT; + +typedef struct VkImageCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkImage image; +} VkImageCaptureDescriptorDataInfoEXT; + +typedef struct VkImageViewCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkImageView imageView; +} VkImageViewCaptureDescriptorDataInfoEXT; + +typedef struct VkSamplerCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkSampler sampler; +} VkSamplerCaptureDescriptorDataInfoEXT; + +typedef struct VkOpaqueCaptureDescriptorDataCreateInfoEXT { + VkStructureType sType; + const void* pNext; + const void* opaqueCaptureDescriptorData; +} VkOpaqueCaptureDescriptorDataCreateInfoEXT; + +typedef struct VkAccelerationStructureCaptureDescriptorDataInfoEXT { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR accelerationStructure; + VkAccelerationStructureNV accelerationStructureNV; +} VkAccelerationStructureCaptureDescriptorDataInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSizeEXT)(VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize* pLayoutSizeInBytes); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutBindingOffsetEXT)(VkDevice device, VkDescriptorSetLayout layout, uint32_t binding, VkDeviceSize* pOffset); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorEXT)(VkDevice device, const VkDescriptorGetInfoEXT* pDescriptorInfo, size_t dataSize, void* pDescriptor); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT* pBindingInfos); +typedef void (VKAPI_PTR *PFN_vkCmdSetDescriptorBufferOffsetsEXT)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const uint32_t* pBufferIndices, const VkDeviceSize* pOffsets); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set); +typedef VkResult (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkImageCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT)(VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSizeEXT( + VkDevice device, + VkDescriptorSetLayout layout, + VkDeviceSize* pLayoutSizeInBytes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutBindingOffsetEXT( + VkDevice device, + VkDescriptorSetLayout layout, + uint32_t binding, + VkDeviceSize* pOffset); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorEXT( + VkDevice device, + const VkDescriptorGetInfoEXT* pDescriptorInfo, + size_t dataSize, + void* pDescriptor); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsetsEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkBufferCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkImageCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSamplerOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, + void* pData); +#endif +#endif + + +// VK_EXT_graphics_pipeline_library is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_graphics_pipeline_library 1 +#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION 1 +#define VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME "VK_EXT_graphics_pipeline_library" + +typedef enum VkGraphicsPipelineLibraryFlagBitsEXT { + VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT = 0x00000001, + VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT = 0x00000002, + VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT = 0x00000004, + VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT = 0x00000008, + VK_GRAPHICS_PIPELINE_LIBRARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkGraphicsPipelineLibraryFlagBitsEXT; +typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT; +typedef struct VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 graphicsPipelineLibrary; +} VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + +typedef struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 graphicsPipelineLibraryFastLinking; + VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration; +} VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + +typedef struct VkGraphicsPipelineLibraryCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkGraphicsPipelineLibraryFlagsEXT flags; +} VkGraphicsPipelineLibraryCreateInfoEXT; + + + +// VK_AMD_shader_early_and_late_fragment_tests is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_shader_early_and_late_fragment_tests 1 +#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION 1 +#define VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_EXTENSION_NAME "VK_AMD_shader_early_and_late_fragment_tests" +typedef struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD { + VkStructureType sType; + void* pNext; + VkBool32 shaderEarlyAndLateFragmentTests; +} VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + + + +// VK_NV_fragment_shading_rate_enums is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_fragment_shading_rate_enums 1 +#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1 +#define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums" + +typedef enum VkFragmentShadingRateTypeNV { + VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = 0, + VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = 1, + VK_FRAGMENT_SHADING_RATE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkFragmentShadingRateTypeNV; + +typedef enum VkFragmentShadingRateNV { + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 1, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 4, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 5, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 6, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 9, + VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 10, + VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 11, + VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 12, + VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 13, + VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 14, + VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = 15, + VK_FRAGMENT_SHADING_RATE_MAX_ENUM_NV = 0x7FFFFFFF +} VkFragmentShadingRateNV; +typedef struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 fragmentShadingRateEnums; + VkBool32 supersampleFragmentShadingRates; + VkBool32 noInvocationFragmentShadingRates; +} VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + +typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV { + VkStructureType sType; + void* pNext; + VkSampleCountFlagBits maxFragmentShadingRateInvocationCount; +} VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + +typedef struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkFragmentShadingRateTypeNV shadingRateType; + VkFragmentShadingRateNV shadingRate; + VkFragmentShadingRateCombinerOpKHR combinerOps[2]; +} VkPipelineFragmentShadingRateEnumStateCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateEnumNV)(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( + VkCommandBuffer commandBuffer, + VkFragmentShadingRateNV shadingRate, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); +#endif +#endif + + +// VK_NV_ray_tracing_motion_blur is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_motion_blur 1 +#define VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_MOTION_BLUR_EXTENSION_NAME "VK_NV_ray_tracing_motion_blur" + +typedef enum VkAccelerationStructureMotionInstanceTypeNV { + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV = 0, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV = 1, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV = 2, + VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkAccelerationStructureMotionInstanceTypeNV; +typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV; +typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV; +typedef union VkDeviceOrHostAddressConstKHR { + VkDeviceAddress deviceAddress; + const void* hostAddress; +} VkDeviceOrHostAddressConstKHR; + +typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR vertexData; +} VkAccelerationStructureGeometryMotionTrianglesDataNV; + +typedef struct VkAccelerationStructureMotionInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t maxInstances; + VkAccelerationStructureMotionInfoFlagsNV flags; +} VkAccelerationStructureMotionInfoNV; + +typedef struct VkAccelerationStructureMatrixMotionInstanceNV { + VkTransformMatrixKHR transformT0; + VkTransformMatrixKHR transformT1; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureMatrixMotionInstanceNV; + +typedef struct VkSRTDataNV { + float sx; + float a; + float b; + float pvx; + float sy; + float c; + float pvy; + float sz; + float pvz; + float qx; + float qy; + float qz; + float qw; + float tx; + float ty; + float tz; +} VkSRTDataNV; + +typedef struct VkAccelerationStructureSRTMotionInstanceNV { + VkSRTDataNV transformT0; + VkSRTDataNV transformT1; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; + uint64_t accelerationStructureReference; +} VkAccelerationStructureSRTMotionInstanceNV; + +typedef union VkAccelerationStructureMotionInstanceDataNV { + VkAccelerationStructureInstanceKHR staticInstance; + VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; + VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance; +} VkAccelerationStructureMotionInstanceDataNV; + +typedef struct VkAccelerationStructureMotionInstanceNV { + VkAccelerationStructureMotionInstanceTypeNV type; + VkAccelerationStructureMotionInstanceFlagsNV flags; + VkAccelerationStructureMotionInstanceDataNV data; +} VkAccelerationStructureMotionInstanceNV; + +typedef struct VkPhysicalDeviceRayTracingMotionBlurFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingMotionBlur; + VkBool32 rayTracingMotionBlurPipelineTraceRaysIndirect; +} VkPhysicalDeviceRayTracingMotionBlurFeaturesNV; + + + +// VK_EXT_ycbcr_2plane_444_formats is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_ycbcr_2plane_444_formats 1 +#define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1 +#define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats" +typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 ycbcr2plane444Formats; +} VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + + + +// VK_EXT_fragment_density_map2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map2 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2" +typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMapDeferred; +} VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; + +typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 subsampledLoads; + VkBool32 subsampledCoarseReconstructionEarlyAccess; + uint32_t maxSubsampledArrayLayers; + uint32_t maxDescriptorSetSubsampledSamplers; +} VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; + + + +// VK_QCOM_rotated_copy_commands is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_rotated_copy_commands 1 +#define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 2 +#define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands" +typedef struct VkCopyCommandTransformInfoQCOM { + VkStructureType sType; + const void* pNext; + VkSurfaceTransformFlagBitsKHR transform; +} VkCopyCommandTransformInfoQCOM; + + + +// VK_EXT_image_robustness is a preprocessor guard. Do not pass it to API calls. +#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 VkPhysicalDeviceImageRobustnessFeatures VkPhysicalDeviceImageRobustnessFeaturesEXT; + + + +// VK_EXT_image_compression_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_compression_control 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME "VK_EXT_image_compression_control" + +typedef enum VkImageCompressionFlagBitsEXT { + VK_IMAGE_COMPRESSION_DEFAULT_EXT = 0, + VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x00000001, + VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = 0x00000002, + VK_IMAGE_COMPRESSION_DISABLED_EXT = 0x00000004, + VK_IMAGE_COMPRESSION_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkImageCompressionFlagBitsEXT; +typedef VkFlags VkImageCompressionFlagsEXT; + +typedef enum VkImageCompressionFixedRateFlagBitsEXT { + VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT = 0, + VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT = 0x00000001, + VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT = 0x00000002, + VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT = 0x00000004, + VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT = 0x00000008, + VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT = 0x00000010, + VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT = 0x00000020, + VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT = 0x00000040, + VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT = 0x00000080, + VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT = 0x00000100, + VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = 0x00000200, + VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = 0x00000400, + VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = 0x00000800, + VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = 0x00001000, + VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = 0x00002000, + VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = 0x00004000, + VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = 0x00008000, + VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = 0x00010000, + VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = 0x00020000, + VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = 0x00040000, + VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = 0x00080000, + VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = 0x00100000, + VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = 0x00200000, + VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = 0x00400000, + VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = 0x00800000, + VK_IMAGE_COMPRESSION_FIXED_RATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkImageCompressionFixedRateFlagBitsEXT; +typedef VkFlags VkImageCompressionFixedRateFlagsEXT; +typedef struct VkPhysicalDeviceImageCompressionControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 imageCompressionControl; +} VkPhysicalDeviceImageCompressionControlFeaturesEXT; + +typedef struct VkImageCompressionControlEXT { + VkStructureType sType; + const void* pNext; + VkImageCompressionFlagsEXT flags; + uint32_t compressionControlPlaneCount; + VkImageCompressionFixedRateFlagsEXT* pFixedRateFlags; +} VkImageCompressionControlEXT; + +typedef struct VkImageCompressionPropertiesEXT { + VkStructureType sType; + void* pNext; + VkImageCompressionFlagsEXT imageCompressionFlags; + VkImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags; +} VkImageCompressionPropertiesEXT; + + + +// VK_EXT_attachment_feedback_loop_layout is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_attachment_feedback_loop_layout 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION 2 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_layout" +typedef struct VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 attachmentFeedbackLoopLayout; +} VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + + + +// VK_EXT_4444_formats is a preprocessor guard. Do not pass it to API calls. +#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; + + + +// VK_EXT_device_fault is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_fault 1 +#define VK_EXT_DEVICE_FAULT_SPEC_VERSION 2 +#define VK_EXT_DEVICE_FAULT_EXTENSION_NAME "VK_EXT_device_fault" + +typedef enum VkDeviceFaultAddressTypeEXT { + VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT = 0, + VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT = 1, + VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT = 2, + VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT = 3, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT = 4, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT = 5, + VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT = 6, + VK_DEVICE_FAULT_ADDRESS_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceFaultAddressTypeEXT; + +typedef enum VkDeviceFaultVendorBinaryHeaderVersionEXT { + VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT = 1, + VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceFaultVendorBinaryHeaderVersionEXT; +typedef struct VkPhysicalDeviceFaultFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 deviceFault; + VkBool32 deviceFaultVendorBinary; +} VkPhysicalDeviceFaultFeaturesEXT; + +typedef struct VkDeviceFaultCountsEXT { + VkStructureType sType; + void* pNext; + uint32_t addressInfoCount; + uint32_t vendorInfoCount; + VkDeviceSize vendorBinarySize; +} VkDeviceFaultCountsEXT; + +typedef struct VkDeviceFaultAddressInfoEXT { + VkDeviceFaultAddressTypeEXT addressType; + VkDeviceAddress reportedAddress; + VkDeviceSize addressPrecision; +} VkDeviceFaultAddressInfoEXT; + +typedef struct VkDeviceFaultVendorInfoEXT { + char description[VK_MAX_DESCRIPTION_SIZE]; + uint64_t vendorFaultCode; + uint64_t vendorFaultData; +} VkDeviceFaultVendorInfoEXT; + +typedef struct VkDeviceFaultInfoEXT { + VkStructureType sType; + void* pNext; + char description[VK_MAX_DESCRIPTION_SIZE]; + VkDeviceFaultAddressInfoEXT* pAddressInfos; + VkDeviceFaultVendorInfoEXT* pVendorInfos; + void* pVendorBinaryData; +} VkDeviceFaultInfoEXT; + +typedef struct VkDeviceFaultVendorBinaryHeaderVersionOneEXT { + uint32_t headerSize; + VkDeviceFaultVendorBinaryHeaderVersionEXT headerVersion; + uint32_t vendorID; + uint32_t deviceID; + uint32_t driverVersion; + uint8_t pipelineCacheUUID[VK_UUID_SIZE]; + uint32_t applicationNameOffset; + uint32_t applicationVersion; + uint32_t engineNameOffset; + uint32_t engineVersion; + uint32_t apiVersion; +} VkDeviceFaultVendorBinaryHeaderVersionOneEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceFaultInfoEXT)(VkDevice device, VkDeviceFaultCountsEXT* pFaultCounts, VkDeviceFaultInfoEXT* pFaultInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceFaultInfoEXT( + VkDevice device, + VkDeviceFaultCountsEXT* pFaultCounts, + VkDeviceFaultInfoEXT* pFaultInfo); +#endif +#endif + + +// VK_ARM_rasterization_order_attachment_access is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_rasterization_order_attachment_access 1 +#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 +#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_ARM_rasterization_order_attachment_access" +typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 rasterizationOrderColorAttachmentAccess; + VkBool32 rasterizationOrderDepthAttachmentAccess; + VkBool32 rasterizationOrderStencilAttachmentAccess; +} VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + +typedef VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM; + + + +// VK_EXT_rgba10x6_formats is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_rgba10x6_formats 1 +#define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1 +#define VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME "VK_EXT_rgba10x6_formats" +typedef struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 formatRgba10x6WithoutYCbCrSampler; +} VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT; + + + +// VK_VALVE_mutable_descriptor_type is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_mutable_descriptor_type 1 +#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 +#define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_VALVE_mutable_descriptor_type" +typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 mutableDescriptorType; +} VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT; + +typedef VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE; + +typedef struct VkMutableDescriptorTypeListEXT { + uint32_t descriptorTypeCount; + const VkDescriptorType* pDescriptorTypes; +} VkMutableDescriptorTypeListEXT; + +typedef VkMutableDescriptorTypeListEXT VkMutableDescriptorTypeListVALVE; + +typedef struct VkMutableDescriptorTypeCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t mutableDescriptorTypeListCount; + const VkMutableDescriptorTypeListEXT* pMutableDescriptorTypeLists; +} VkMutableDescriptorTypeCreateInfoEXT; + +typedef VkMutableDescriptorTypeCreateInfoEXT VkMutableDescriptorTypeCreateInfoVALVE; + + + +// VK_EXT_vertex_input_dynamic_state is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_vertex_input_dynamic_state 1 +#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2 +#define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state" +typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 vertexInputDynamicState; +} VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; + +typedef struct VkVertexInputBindingDescription2EXT { + VkStructureType sType; + void* pNext; + uint32_t binding; + uint32_t stride; + VkVertexInputRate inputRate; + uint32_t divisor; +} VkVertexInputBindingDescription2EXT; + +typedef struct VkVertexInputAttributeDescription2EXT { + VkStructureType sType; + void* pNext; + uint32_t location; + uint32_t binding; + VkFormat format; + uint32_t offset; +} VkVertexInputAttributeDescription2EXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( + VkCommandBuffer commandBuffer, + uint32_t vertexBindingDescriptionCount, + const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); +#endif +#endif + + +// VK_EXT_physical_device_drm is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_physical_device_drm 1 +#define VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION 1 +#define VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME "VK_EXT_physical_device_drm" +typedef struct VkPhysicalDeviceDrmPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 hasPrimary; + VkBool32 hasRender; + int64_t primaryMajor; + int64_t primaryMinor; + int64_t renderMajor; + int64_t renderMinor; +} VkPhysicalDeviceDrmPropertiesEXT; + + + +// VK_EXT_device_address_binding_report is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_address_binding_report 1 +#define VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_SPEC_VERSION 1 +#define VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_EXTENSION_NAME "VK_EXT_device_address_binding_report" + +typedef enum VkDeviceAddressBindingTypeEXT { + VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT = 0, + VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT = 1, + VK_DEVICE_ADDRESS_BINDING_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceAddressBindingTypeEXT; + +typedef enum VkDeviceAddressBindingFlagBitsEXT { + VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT = 0x00000001, + VK_DEVICE_ADDRESS_BINDING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDeviceAddressBindingFlagBitsEXT; +typedef VkFlags VkDeviceAddressBindingFlagsEXT; +typedef struct VkPhysicalDeviceAddressBindingReportFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 reportAddressBinding; +} VkPhysicalDeviceAddressBindingReportFeaturesEXT; + +typedef struct VkDeviceAddressBindingCallbackDataEXT { + VkStructureType sType; + void* pNext; + VkDeviceAddressBindingFlagsEXT flags; + VkDeviceAddress baseAddress; + VkDeviceSize size; + VkDeviceAddressBindingTypeEXT bindingType; +} VkDeviceAddressBindingCallbackDataEXT; + + + +// VK_EXT_depth_clip_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clip_control 1 +#define VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clip_control" +typedef struct VkPhysicalDeviceDepthClipControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthClipControl; +} VkPhysicalDeviceDepthClipControlFeaturesEXT; + +typedef struct VkPipelineViewportDepthClipControlCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 negativeOneToOne; +} VkPipelineViewportDepthClipControlCreateInfoEXT; + + + +// VK_EXT_primitive_topology_list_restart is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_primitive_topology_list_restart 1 +#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION 1 +#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME "VK_EXT_primitive_topology_list_restart" +typedef struct VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 primitiveTopologyListRestart; + VkBool32 primitiveTopologyPatchListRestart; +} VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + + + +// VK_EXT_present_mode_fifo_latest_ready is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_present_mode_fifo_latest_ready 1 +#define VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION 1 +#define VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME "VK_EXT_present_mode_fifo_latest_ready" +typedef VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR VkPhysicalDevicePresentModeFifoLatestReadyFeaturesEXT; + + + +// VK_HUAWEI_subpass_shading is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_subpass_shading 1 +#define VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION 3 +#define VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME "VK_HUAWEI_subpass_shading" +typedef struct VkSubpassShadingPipelineCreateInfoHUAWEI { + VkStructureType sType; + void* pNext; + VkRenderPass renderPass; + uint32_t subpass; +} VkSubpassShadingPipelineCreateInfoHUAWEI; + +typedef struct VkPhysicalDeviceSubpassShadingFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 subpassShading; +} VkPhysicalDeviceSubpassShadingFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI { + VkStructureType sType; + void* pNext; + uint32_t maxSubpassShadingWorkgroupSizeAspectRatio; +} VkPhysicalDeviceSubpassShadingPropertiesHUAWEI; + +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)(VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize); +typedef void (VKAPI_PTR *PFN_vkCmdSubpassShadingHUAWEI)(VkCommandBuffer commandBuffer); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + VkDevice device, + VkRenderPass renderpass, + VkExtent2D* pMaxWorkgroupSize); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSubpassShadingHUAWEI( + VkCommandBuffer commandBuffer); +#endif +#endif + + +// VK_HUAWEI_invocation_mask is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_invocation_mask 1 +#define VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION 1 +#define VK_HUAWEI_INVOCATION_MASK_EXTENSION_NAME "VK_HUAWEI_invocation_mask" +typedef struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 invocationMask; +} VkPhysicalDeviceInvocationMaskFeaturesHUAWEI; + +typedef void (VKAPI_PTR *PFN_vkCmdBindInvocationMaskHUAWEI)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindInvocationMaskHUAWEI( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout); +#endif +#endif + + +// VK_NV_external_memory_rdma is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory_rdma 1 +typedef void* VkRemoteAddressNV; +#define VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME "VK_NV_external_memory_rdma" +typedef struct VkMemoryGetRemoteAddressInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetRemoteAddressInfoNV; + +typedef struct VkPhysicalDeviceExternalMemoryRDMAFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 externalMemoryRDMA; +} VkPhysicalDeviceExternalMemoryRDMAFeaturesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryRemoteAddressNV)(VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryRemoteAddressNV( + VkDevice device, + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV* pAddress); +#endif +#endif + + +// VK_EXT_pipeline_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_properties 1 +#define VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_PROPERTIES_EXTENSION_NAME "VK_EXT_pipeline_properties" +typedef VkPipelineInfoKHR VkPipelineInfoEXT; + +typedef struct VkPipelinePropertiesIdentifierEXT { + VkStructureType sType; + void* pNext; + uint8_t pipelineIdentifier[VK_UUID_SIZE]; +} VkPipelinePropertiesIdentifierEXT; + +typedef struct VkPhysicalDevicePipelinePropertiesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 pipelinePropertiesIdentifier; +} VkPhysicalDevicePipelinePropertiesFeaturesEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice device, const VkPipelineInfoEXT* pPipelineInfo, VkBaseOutStructure* pPipelineProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelinePropertiesEXT( + VkDevice device, + const VkPipelineInfoEXT* pPipelineInfo, + VkBaseOutStructure* pPipelineProperties); +#endif +#endif + + +// VK_EXT_frame_boundary is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_frame_boundary 1 +#define VK_EXT_FRAME_BOUNDARY_SPEC_VERSION 1 +#define VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME "VK_EXT_frame_boundary" + +typedef enum VkFrameBoundaryFlagBitsEXT { + VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT = 0x00000001, + VK_FRAME_BOUNDARY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkFrameBoundaryFlagBitsEXT; +typedef VkFlags VkFrameBoundaryFlagsEXT; +typedef struct VkPhysicalDeviceFrameBoundaryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 frameBoundary; +} VkPhysicalDeviceFrameBoundaryFeaturesEXT; + +typedef struct VkFrameBoundaryEXT { + VkStructureType sType; + const void* pNext; + VkFrameBoundaryFlagsEXT flags; + uint64_t frameID; + uint32_t imageCount; + const VkImage* pImages; + uint32_t bufferCount; + const VkBuffer* pBuffers; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkFrameBoundaryEXT; + + + +// VK_EXT_multisampled_render_to_single_sampled is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_multisampled_render_to_single_sampled 1 +#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION 1 +#define VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME "VK_EXT_multisampled_render_to_single_sampled" +typedef struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 multisampledRenderToSingleSampled; +} VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + +typedef struct VkSubpassResolvePerformanceQueryEXT { + VkStructureType sType; + void* pNext; + VkBool32 optimal; +} VkSubpassResolvePerformanceQueryEXT; + +typedef struct VkMultisampledRenderToSingleSampledInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 multisampledRenderToSingleSampledEnable; + VkSampleCountFlagBits rasterizationSamples; +} VkMultisampledRenderToSingleSampledInfoEXT; + + + +// VK_EXT_extended_dynamic_state2 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_extended_dynamic_state2 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2" +typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 extendedDynamicState2; + VkBool32 extendedDynamicState2LogicOp; + VkBool32 extendedDynamicState2PatchControlPoints; +} VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp); +typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( + VkCommandBuffer commandBuffer, + uint32_t patchControlPoints); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBiasEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( + VkCommandBuffer commandBuffer, + VkLogicOp logicOp); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable); +#endif +#endif + + +// VK_EXT_color_write_enable is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_color_write_enable 1 +#define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1 +#define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable" +typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 colorWriteEnable; +} VkPhysicalDeviceColorWriteEnableFeaturesEXT; + +typedef struct VkPipelineColorWriteCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t attachmentCount; + const VkBool32* pColorWriteEnables; +} VkPipelineColorWriteCreateInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteEnableEXT( + VkCommandBuffer commandBuffer, + uint32_t attachmentCount, + const VkBool32* pColorWriteEnables); +#endif +#endif + + +// VK_EXT_primitives_generated_query is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_primitives_generated_query 1 +#define VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION 1 +#define VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME "VK_EXT_primitives_generated_query" +typedef struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 primitivesGeneratedQuery; + VkBool32 primitivesGeneratedQueryWithRasterizerDiscard; + VkBool32 primitivesGeneratedQueryWithNonZeroStreams; +} VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + + + +// VK_EXT_global_priority_query is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_global_priority_query 1 +#define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1 +#define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query" +#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT VK_MAX_GLOBAL_PRIORITY_SIZE +typedef VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT; + +typedef VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesEXT; + + + +// VK_EXT_image_view_min_lod is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_view_min_lod 1 +#define VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION 1 +#define VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME "VK_EXT_image_view_min_lod" +typedef struct VkPhysicalDeviceImageViewMinLodFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 minLod; +} VkPhysicalDeviceImageViewMinLodFeaturesEXT; + +typedef struct VkImageViewMinLodCreateInfoEXT { + VkStructureType sType; + const void* pNext; + float minLod; +} VkImageViewMinLodCreateInfoEXT; + + + +// VK_EXT_multi_draw is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_multi_draw 1 +#define VK_EXT_MULTI_DRAW_SPEC_VERSION 1 +#define VK_EXT_MULTI_DRAW_EXTENSION_NAME "VK_EXT_multi_draw" +typedef struct VkPhysicalDeviceMultiDrawFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 multiDraw; +} VkPhysicalDeviceMultiDrawFeaturesEXT; + +typedef struct VkPhysicalDeviceMultiDrawPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxMultiDrawCount; +} VkPhysicalDeviceMultiDrawPropertiesEXT; + +typedef struct VkMultiDrawInfoEXT { + uint32_t firstVertex; + uint32_t vertexCount; +} VkMultiDrawInfoEXT; + +typedef struct VkMultiDrawIndexedInfoEXT { + uint32_t firstIndex; + uint32_t indexCount; + int32_t vertexOffset; +} VkMultiDrawIndexedInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMultiIndexedEXT)(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawInfoEXT* pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawIndexedInfoEXT* pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t* pVertexOffset); +#endif +#endif + + +// VK_EXT_image_2d_view_of_3d is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_2d_view_of_3d 1 +#define VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION 1 +#define VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_2d_view_of_3d" +typedef struct VkPhysicalDeviceImage2DViewOf3DFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 image2DViewOf3D; + VkBool32 sampler2DViewOf3D; +} VkPhysicalDeviceImage2DViewOf3DFeaturesEXT; + + + +// VK_EXT_shader_tile_image is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_tile_image 1 +#define VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION 1 +#define VK_EXT_SHADER_TILE_IMAGE_EXTENSION_NAME "VK_EXT_shader_tile_image" +typedef struct VkPhysicalDeviceShaderTileImageFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderTileImageColorReadAccess; + VkBool32 shaderTileImageDepthReadAccess; + VkBool32 shaderTileImageStencilReadAccess; +} VkPhysicalDeviceShaderTileImageFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderTileImagePropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderTileImageCoherentReadAccelerated; + VkBool32 shaderTileImageReadSampleFromPixelRateInvocation; + VkBool32 shaderTileImageReadFromHelperInvocation; +} VkPhysicalDeviceShaderTileImagePropertiesEXT; + + + +// VK_EXT_opacity_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_opacity_micromap 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkMicromapEXT) +#define VK_EXT_OPACITY_MICROMAP_SPEC_VERSION 2 +#define VK_EXT_OPACITY_MICROMAP_EXTENSION_NAME "VK_EXT_opacity_micromap" + +typedef enum VkMicromapTypeEXT { + VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT = 0, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV = 1000397000, +#endif + VK_MICROMAP_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkMicromapTypeEXT; + +typedef enum VkBuildMicromapModeEXT { + VK_BUILD_MICROMAP_MODE_BUILD_EXT = 0, + VK_BUILD_MICROMAP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBuildMicromapModeEXT; + +typedef enum VkCopyMicromapModeEXT { + VK_COPY_MICROMAP_MODE_CLONE_EXT = 0, + VK_COPY_MICROMAP_MODE_SERIALIZE_EXT = 1, + VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT = 2, + VK_COPY_MICROMAP_MODE_COMPACT_EXT = 3, + VK_COPY_MICROMAP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkCopyMicromapModeEXT; + +typedef enum VkOpacityMicromapFormatEXT { + VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT = 1, + VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT = 2, + VK_OPACITY_MICROMAP_FORMAT_MAX_ENUM_EXT = 0x7FFFFFFF +} VkOpacityMicromapFormatEXT; + +typedef enum VkOpacityMicromapSpecialIndexEXT { + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT = -1, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT = -2, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT = -3, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT = -4, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_CLUSTER_GEOMETRY_DISABLE_OPACITY_MICROMAP_NV = -5, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_MAX_ENUM_EXT = 0x7FFFFFFF +} VkOpacityMicromapSpecialIndexEXT; + +typedef enum VkAccelerationStructureCompatibilityKHR { + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1, + VK_ACCELERATION_STRUCTURE_COMPATIBILITY_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureCompatibilityKHR; + +typedef enum VkAccelerationStructureBuildTypeKHR { + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2, + VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureBuildTypeKHR; + +typedef enum VkBuildMicromapFlagBitsEXT { + VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT = 0x00000001, + VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT = 0x00000002, + VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT = 0x00000004, + VK_BUILD_MICROMAP_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkBuildMicromapFlagBitsEXT; +typedef VkFlags VkBuildMicromapFlagsEXT; + +typedef enum VkMicromapCreateFlagBitsEXT { + VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = 0x00000001, + VK_MICROMAP_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkMicromapCreateFlagBitsEXT; +typedef VkFlags VkMicromapCreateFlagsEXT; +typedef struct VkMicromapUsageEXT { + uint32_t count; + uint32_t subdivisionLevel; + uint32_t format; +} VkMicromapUsageEXT; + +typedef union VkDeviceOrHostAddressKHR { + VkDeviceAddress deviceAddress; + void* hostAddress; +} VkDeviceOrHostAddressKHR; + +typedef struct VkMicromapBuildInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapTypeEXT type; + VkBuildMicromapFlagsEXT flags; + VkBuildMicromapModeEXT mode; + VkMicromapEXT dstMicromap; + uint32_t usageCountsCount; + const VkMicromapUsageEXT* pUsageCounts; + const VkMicromapUsageEXT* const* ppUsageCounts; + VkDeviceOrHostAddressConstKHR data; + VkDeviceOrHostAddressKHR scratchData; + VkDeviceOrHostAddressConstKHR triangleArray; + VkDeviceSize triangleArrayStride; +} VkMicromapBuildInfoEXT; + +typedef struct VkMicromapCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapCreateFlagsEXT createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkMicromapTypeEXT type; + VkDeviceAddress deviceAddress; +} VkMicromapCreateInfoEXT; + +typedef struct VkPhysicalDeviceOpacityMicromapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 micromap; + VkBool32 micromapCaptureReplay; + VkBool32 micromapHostCommands; +} VkPhysicalDeviceOpacityMicromapFeaturesEXT; + +typedef struct VkPhysicalDeviceOpacityMicromapPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxOpacity2StateSubdivisionLevel; + uint32_t maxOpacity4StateSubdivisionLevel; +} VkPhysicalDeviceOpacityMicromapPropertiesEXT; + +typedef struct VkMicromapVersionInfoEXT { + VkStructureType sType; + const void* pNext; + const uint8_t* pVersionData; +} VkMicromapVersionInfoEXT; + +typedef struct VkCopyMicromapToMemoryInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapEXT src; + VkDeviceOrHostAddressKHR dst; + VkCopyMicromapModeEXT mode; +} VkCopyMicromapToMemoryInfoEXT; + +typedef struct VkCopyMemoryToMicromapInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR src; + VkMicromapEXT dst; + VkCopyMicromapModeEXT mode; +} VkCopyMemoryToMicromapInfoEXT; + +typedef struct VkCopyMicromapInfoEXT { + VkStructureType sType; + const void* pNext; + VkMicromapEXT src; + VkMicromapEXT dst; + VkCopyMicromapModeEXT mode; +} VkCopyMicromapInfoEXT; + +typedef struct VkMicromapBuildSizesInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceSize micromapSize; + VkDeviceSize buildScratchSize; + VkBool32 discardable; +} VkMicromapBuildSizesInfoEXT; + +typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT { + VkStructureType sType; + void* pNext; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexBuffer; + VkDeviceSize indexStride; + uint32_t baseTriangle; + uint32_t usageCountsCount; + const VkMicromapUsageEXT* pUsageCounts; + const VkMicromapUsageEXT* const* ppUsageCounts; + VkMicromapEXT micromap; +} VkAccelerationStructureTrianglesOpacityMicromapEXT; + +typedef struct VkMicromapTriangleEXT { + uint32_t dataOffset; + uint16_t subdivisionLevel; + uint16_t format; +} VkMicromapTriangleEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateMicromapEXT)(VkDevice device, const VkMicromapCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkMicromapEXT* pMicromap); +typedef void (VKAPI_PTR *PFN_vkDestroyMicromapEXT)(VkDevice device, VkMicromapEXT micromap, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdBuildMicromapsEXT)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos); +typedef VkResult (VKAPI_PTR *PFN_vkBuildMicromapsEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMicromapEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapInfoEXT* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMicromapToMemoryEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMicromapToMemoryInfoEXT* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToMicromapEXT)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToMicromapInfoEXT* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkWriteMicromapsPropertiesEXT)(VkDevice device, uint32_t micromapCount, const VkMicromapEXT* pMicromaps, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMicromapEXT)(VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMicromapToMemoryEXT)(VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToMicromapEXT)(VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteMicromapsPropertiesEXT)(VkCommandBuffer commandBuffer, uint32_t micromapCount, const VkMicromapEXT* pMicromaps, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (VKAPI_PTR *PFN_vkGetDeviceMicromapCompatibilityEXT)(VkDevice device, const VkMicromapVersionInfoEXT* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); +typedef void (VKAPI_PTR *PFN_vkGetMicromapBuildSizesEXT)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkMicromapBuildInfoEXT* pBuildInfo, VkMicromapBuildSizesInfoEXT* pSizeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMicromapEXT( + VkDevice device, + const VkMicromapCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkMicromapEXT* pMicromap); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyMicromapEXT( + VkDevice device, + VkMicromapEXT micromap, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildMicromapsEXT( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBuildMicromapsEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMicromapToMemoryEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapToMemoryInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWriteMicromapsPropertiesEXT( + VkDevice device, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMicromapToMemoryEXT( + VkCommandBuffer commandBuffer, + const VkCopyMicromapToMemoryInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToMicromapInfoEXT* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteMicromapsPropertiesEXT( + VkCommandBuffer commandBuffer, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceMicromapCompatibilityEXT( + VkDevice device, + const VkMicromapVersionInfoEXT* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetMicromapBuildSizesEXT( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkMicromapBuildInfoEXT* pBuildInfo, + VkMicromapBuildSizesInfoEXT* pSizeInfo); +#endif +#endif + + +// VK_EXT_load_store_op_none is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_load_store_op_none 1 +#define VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION 1 +#define VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_EXT_load_store_op_none" + + +// VK_HUAWEI_cluster_culling_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_cluster_culling_shader 1 +#define VK_HUAWEI_CLUSTER_CULLING_SHADER_SPEC_VERSION 3 +#define VK_HUAWEI_CLUSTER_CULLING_SHADER_EXTENSION_NAME "VK_HUAWEI_cluster_culling_shader" +typedef struct VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 clustercullingShader; + VkBool32 multiviewClusterCullingShader; +} VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + +typedef struct VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI { + VkStructureType sType; + void* pNext; + uint32_t maxWorkGroupCount[3]; + uint32_t maxWorkGroupSize[3]; + uint32_t maxOutputClusterCount; + VkDeviceSize indirectBufferOffsetAlignment; +} VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + +typedef struct VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 clusterShadingRate; +} VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawClusterHUAWEI)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (VKAPI_PTR *PFN_vkCmdDrawClusterIndirectHUAWEI)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterHUAWEI( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawClusterIndirectHUAWEI( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset); +#endif +#endif + + +// VK_EXT_border_color_swizzle is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_border_color_swizzle 1 +#define VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION 1 +#define VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME "VK_EXT_border_color_swizzle" +typedef struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 borderColorSwizzle; + VkBool32 borderColorSwizzleFromImage; +} VkPhysicalDeviceBorderColorSwizzleFeaturesEXT; + +typedef struct VkSamplerBorderColorComponentMappingCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkComponentMapping components; + VkBool32 srgb; +} VkSamplerBorderColorComponentMappingCreateInfoEXT; + + + +// VK_EXT_pageable_device_local_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pageable_device_local_memory 1 +#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION 1 +#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME "VK_EXT_pageable_device_local_memory" +typedef struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 pageableDeviceLocalMemory; +} VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkSetDeviceMemoryPriorityEXT)(VkDevice device, VkDeviceMemory memory, float priority); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT( + VkDevice device, + VkDeviceMemory memory, + float priority); +#endif +#endif + + +// VK_ARM_shader_core_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_shader_core_properties 1 +#define VK_ARM_SHADER_CORE_PROPERTIES_SPEC_VERSION 1 +#define VK_ARM_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_ARM_shader_core_properties" +typedef struct VkPhysicalDeviceShaderCorePropertiesARM { + VkStructureType sType; + void* pNext; + uint32_t pixelRate; + uint32_t texelRate; + uint32_t fmaRate; +} VkPhysicalDeviceShaderCorePropertiesARM; + + + +// VK_ARM_scheduling_controls is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_scheduling_controls 1 +#define VK_ARM_SCHEDULING_CONTROLS_SPEC_VERSION 1 +#define VK_ARM_SCHEDULING_CONTROLS_EXTENSION_NAME "VK_ARM_scheduling_controls" +typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagsARM; + +// Flag bits for VkPhysicalDeviceSchedulingControlsFlagBitsARM +typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagBitsARM; +static const VkPhysicalDeviceSchedulingControlsFlagBitsARM VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM = 0x00000001ULL; + +typedef struct VkDeviceQueueShaderCoreControlCreateInfoARM { + VkStructureType sType; + void* pNext; + uint32_t shaderCoreCount; +} VkDeviceQueueShaderCoreControlCreateInfoARM; + +typedef struct VkPhysicalDeviceSchedulingControlsFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 schedulingControls; +} VkPhysicalDeviceSchedulingControlsFeaturesARM; + +typedef struct VkPhysicalDeviceSchedulingControlsPropertiesARM { + VkStructureType sType; + void* pNext; + VkPhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags; +} VkPhysicalDeviceSchedulingControlsPropertiesARM; + + + +// VK_EXT_image_sliced_view_of_3d is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_sliced_view_of_3d 1 +#define VK_EXT_IMAGE_SLICED_VIEW_OF_3D_SPEC_VERSION 1 +#define VK_EXT_IMAGE_SLICED_VIEW_OF_3D_EXTENSION_NAME "VK_EXT_image_sliced_view_of_3d" +#define VK_REMAINING_3D_SLICES_EXT (~0U) +typedef struct VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 imageSlicedViewOf3D; +} VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + +typedef struct VkImageViewSlicedCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t sliceOffset; + uint32_t sliceCount; +} VkImageViewSlicedCreateInfoEXT; + + + +// VK_VALVE_descriptor_set_host_mapping is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_descriptor_set_host_mapping 1 +#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION 1 +#define VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_EXTENSION_NAME "VK_VALVE_descriptor_set_host_mapping" +typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE { + VkStructureType sType; + void* pNext; + VkBool32 descriptorSetHostMapping; +} VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + +typedef struct VkDescriptorSetBindingReferenceVALVE { + VkStructureType sType; + const void* pNext; + VkDescriptorSetLayout descriptorSetLayout; + uint32_t binding; +} VkDescriptorSetBindingReferenceVALVE; + +typedef struct VkDescriptorSetLayoutHostMappingInfoVALVE { + VkStructureType sType; + void* pNext; + size_t descriptorOffset; + uint32_t descriptorSize; +} VkDescriptorSetLayoutHostMappingInfoVALVE; + +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)(VkDevice device, const VkDescriptorSetBindingReferenceVALVE* pBindingReference, VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping); +typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetHostMappingVALVE)(VkDevice device, VkDescriptorSet descriptorSet, void** ppData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutHostMappingInfoVALVE( + VkDevice device, + const VkDescriptorSetBindingReferenceVALVE* pBindingReference, + VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( + VkDevice device, + VkDescriptorSet descriptorSet, + void** ppData); +#endif +#endif + + +// VK_EXT_depth_clamp_zero_one is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clamp_zero_one 1 +#define VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_EXT_depth_clamp_zero_one" +typedef VkPhysicalDeviceDepthClampZeroOneFeaturesKHR VkPhysicalDeviceDepthClampZeroOneFeaturesEXT; + + + +// VK_EXT_non_seamless_cube_map is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_non_seamless_cube_map 1 +#define VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION 1 +#define VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME "VK_EXT_non_seamless_cube_map" +typedef struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 nonSeamlessCubeMap; +} VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + + + +// VK_ARM_render_pass_striped is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_render_pass_striped 1 +#define VK_ARM_RENDER_PASS_STRIPED_SPEC_VERSION 1 +#define VK_ARM_RENDER_PASS_STRIPED_EXTENSION_NAME "VK_ARM_render_pass_striped" +typedef struct VkPhysicalDeviceRenderPassStripedFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 renderPassStriped; +} VkPhysicalDeviceRenderPassStripedFeaturesARM; + +typedef struct VkPhysicalDeviceRenderPassStripedPropertiesARM { + VkStructureType sType; + void* pNext; + VkExtent2D renderPassStripeGranularity; + uint32_t maxRenderPassStripes; +} VkPhysicalDeviceRenderPassStripedPropertiesARM; + +typedef struct VkRenderPassStripeInfoARM { + VkStructureType sType; + const void* pNext; + VkRect2D stripeArea; +} VkRenderPassStripeInfoARM; + +typedef struct VkRenderPassStripeBeginInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t stripeInfoCount; + const VkRenderPassStripeInfoARM* pStripeInfos; +} VkRenderPassStripeBeginInfoARM; + +typedef struct VkRenderPassStripeSubmitInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t stripeSemaphoreInfoCount; + const VkSemaphoreSubmitInfo* pStripeSemaphoreInfos; +} VkRenderPassStripeSubmitInfoARM; + + + +// VK_QCOM_fragment_density_map_offset is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_fragment_density_map_offset 1 +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 3 +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset" +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMapOffset; +} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + +typedef VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT { + VkStructureType sType; + void* pNext; + VkExtent2D fragmentDensityOffsetGranularity; +} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + +typedef VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; + +typedef struct VkRenderPassFragmentDensityMapOffsetEndInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t fragmentDensityOffsetCount; + const VkOffset2D* pFragmentDensityOffsets; +} VkRenderPassFragmentDensityMapOffsetEndInfoEXT; + +typedef VkRenderPassFragmentDensityMapOffsetEndInfoEXT VkSubpassFragmentDensityMapOffsetEndInfoQCOM; + + + +// VK_NV_copy_memory_indirect is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_copy_memory_indirect 1 +#define VK_NV_COPY_MEMORY_INDIRECT_SPEC_VERSION 1 +#define VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME "VK_NV_copy_memory_indirect" +typedef struct VkCopyMemoryIndirectCommandNV { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize size; +} VkCopyMemoryIndirectCommandNV; + +typedef struct VkCopyMemoryToImageIndirectCommandNV { + VkDeviceAddress srcAddress; + uint32_t bufferRowLength; + uint32_t bufferImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkCopyMemoryToImageIndirectCommandNV; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 indirectCopy; +} VkPhysicalDeviceCopyMemoryIndirectFeaturesNV; + +typedef struct VkPhysicalDeviceCopyMemoryIndirectPropertiesNV { + VkStructureType sType; + void* pNext; + VkQueueFlags supportedQueues; +} VkPhysicalDeviceCopyMemoryIndirectPropertiesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryIndirectNV)(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToImageIndirectNV)(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride, VkImage dstImage, VkImageLayout dstImageLayout, const VkImageSubresourceLayers* pImageSubresources); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryIndirectNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToImageIndirectNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + VkImage dstImage, + VkImageLayout dstImageLayout, + const VkImageSubresourceLayers* pImageSubresources); +#endif +#endif + + +// VK_NV_memory_decompression is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_memory_decompression 1 +#define VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION 1 +#define VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME "VK_NV_memory_decompression" + +// Flag bits for VkMemoryDecompressionMethodFlagBitsNV +typedef VkFlags64 VkMemoryDecompressionMethodFlagBitsNV; +static const VkMemoryDecompressionMethodFlagBitsNV VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV = 0x00000001ULL; + +typedef VkFlags64 VkMemoryDecompressionMethodFlagsNV; +typedef struct VkDecompressMemoryRegionNV { + VkDeviceAddress srcAddress; + VkDeviceAddress dstAddress; + VkDeviceSize compressedSize; + VkDeviceSize decompressedSize; + VkMemoryDecompressionMethodFlagsNV decompressionMethod; +} VkDecompressMemoryRegionNV; + +typedef struct VkPhysicalDeviceMemoryDecompressionFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 memoryDecompression; +} VkPhysicalDeviceMemoryDecompressionFeaturesNV; + +typedef struct VkPhysicalDeviceMemoryDecompressionPropertiesNV { + VkStructureType sType; + void* pNext; + VkMemoryDecompressionMethodFlagsNV decompressionMethods; + uint64_t maxDecompressionIndirectCount; +} VkPhysicalDeviceMemoryDecompressionPropertiesNV; + +typedef void (VKAPI_PTR *PFN_vkCmdDecompressMemoryNV)(VkCommandBuffer commandBuffer, uint32_t decompressRegionCount, const VkDecompressMemoryRegionNV* pDecompressMemoryRegions); +typedef void (VKAPI_PTR *PFN_vkCmdDecompressMemoryIndirectCountNV)(VkCommandBuffer commandBuffer, VkDeviceAddress indirectCommandsAddress, VkDeviceAddress indirectCommandsCountAddress, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryNV( + VkCommandBuffer commandBuffer, + uint32_t decompressRegionCount, + const VkDecompressMemoryRegionNV* pDecompressMemoryRegions); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDecompressMemoryIndirectCountNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t stride); +#endif +#endif + + +// VK_NV_device_generated_commands_compute is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_device_generated_commands_compute 1 +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION 2 +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME "VK_NV_device_generated_commands_compute" +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 deviceGeneratedCompute; + VkBool32 deviceGeneratedComputePipelines; + VkBool32 deviceGeneratedComputeCaptureReplay; +} VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + +typedef struct VkComputePipelineIndirectBufferInfoNV { + VkStructureType sType; + const void* pNext; + VkDeviceAddress deviceAddress; + VkDeviceSize size; + VkDeviceAddress pipelineDeviceAddressCaptureReplay; +} VkComputePipelineIndirectBufferInfoNV; + +typedef struct VkPipelineIndirectDeviceAddressInfoNV { + VkStructureType sType; + const void* pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline pipeline; +} VkPipelineIndirectDeviceAddressInfoNV; + +typedef struct VkBindPipelineIndirectCommandNV { + VkDeviceAddress pipelineAddress; +} VkBindPipelineIndirectCommandNV; + +typedef void (VKAPI_PTR *PFN_vkGetPipelineIndirectMemoryRequirementsNV)(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdUpdatePipelineIndirectBufferNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetPipelineIndirectDeviceAddressNV)(VkDevice device, const VkPipelineIndirectDeviceAddressInfoNV* pInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPipelineIndirectMemoryRequirementsNV( + VkDevice device, + const VkComputePipelineCreateInfo* pCreateInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdUpdatePipelineIndirectBufferNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV( + VkDevice device, + const VkPipelineIndirectDeviceAddressInfoNV* pInfo); +#endif +#endif + + +// VK_NV_ray_tracing_linear_swept_spheres is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_linear_swept_spheres 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_EXTENSION_NAME "VK_NV_ray_tracing_linear_swept_spheres" + +typedef enum VkRayTracingLssIndexingModeNV { + VK_RAY_TRACING_LSS_INDEXING_MODE_LIST_NV = 0, + VK_RAY_TRACING_LSS_INDEXING_MODE_SUCCESSIVE_NV = 1, + VK_RAY_TRACING_LSS_INDEXING_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssIndexingModeNV; + +typedef enum VkRayTracingLssPrimitiveEndCapsModeNV { + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_NONE_NV = 0, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_CHAINED_NV = 1, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssPrimitiveEndCapsModeNV; +typedef struct VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 spheres; + VkBool32 linearSweptSpheres; +} VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + +typedef struct VkAccelerationStructureGeometryLinearSweptSpheresDataNV { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; + VkRayTracingLssIndexingModeNV indexingMode; + VkRayTracingLssPrimitiveEndCapsModeNV endCapsMode; +} VkAccelerationStructureGeometryLinearSweptSpheresDataNV; + +typedef struct VkAccelerationStructureGeometrySpheresDataNV { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; +} VkAccelerationStructureGeometrySpheresDataNV; + + + +// VK_NV_linear_color_attachment is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_linear_color_attachment 1 +#define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1 +#define VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME "VK_NV_linear_color_attachment" +typedef struct VkPhysicalDeviceLinearColorAttachmentFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 linearColorAttachment; +} VkPhysicalDeviceLinearColorAttachmentFeaturesNV; + + + +// VK_GOOGLE_surfaceless_query is a preprocessor guard. Do not pass it to API calls. +#define VK_GOOGLE_surfaceless_query 1 +#define VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION 2 +#define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query" + + +// VK_EXT_image_compression_control_swapchain is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_image_compression_control_swapchain 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1 +#define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME "VK_EXT_image_compression_control_swapchain" +typedef struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 imageCompressionControlSwapchain; +} VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + + + +// VK_QCOM_image_processing is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_image_processing 1 +#define VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION 1 +#define VK_QCOM_IMAGE_PROCESSING_EXTENSION_NAME "VK_QCOM_image_processing" +typedef struct VkImageViewSampleWeightCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkOffset2D filterCenter; + VkExtent2D filterSize; + uint32_t numPhases; +} VkImageViewSampleWeightCreateInfoQCOM; + +typedef struct VkPhysicalDeviceImageProcessingFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 textureSampleWeighted; + VkBool32 textureBoxFilter; + VkBool32 textureBlockMatch; +} VkPhysicalDeviceImageProcessingFeaturesQCOM; + +typedef struct VkPhysicalDeviceImageProcessingPropertiesQCOM { + VkStructureType sType; + void* pNext; + uint32_t maxWeightFilterPhases; + VkExtent2D maxWeightFilterDimension; + VkExtent2D maxBlockMatchRegion; + VkExtent2D maxBoxFilterBlockSize; +} VkPhysicalDeviceImageProcessingPropertiesQCOM; + + + +// VK_EXT_nested_command_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_nested_command_buffer 1 +#define VK_EXT_NESTED_COMMAND_BUFFER_SPEC_VERSION 1 +#define VK_EXT_NESTED_COMMAND_BUFFER_EXTENSION_NAME "VK_EXT_nested_command_buffer" +typedef struct VkPhysicalDeviceNestedCommandBufferFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 nestedCommandBuffer; + VkBool32 nestedCommandBufferRendering; + VkBool32 nestedCommandBufferSimultaneousUse; +} VkPhysicalDeviceNestedCommandBufferFeaturesEXT; + +typedef struct VkPhysicalDeviceNestedCommandBufferPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxCommandBufferNestingLevel; +} VkPhysicalDeviceNestedCommandBufferPropertiesEXT; + + + +// VK_EXT_external_memory_acquire_unmodified is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_acquire_unmodified 1 +#define VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME "VK_EXT_external_memory_acquire_unmodified" +typedef struct VkExternalMemoryAcquireUnmodifiedEXT { + VkStructureType sType; + const void* pNext; + VkBool32 acquireUnmodifiedMemory; +} VkExternalMemoryAcquireUnmodifiedEXT; + + + +// VK_EXT_extended_dynamic_state3 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_extended_dynamic_state3 1 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_3_SPEC_VERSION 2 +#define VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME "VK_EXT_extended_dynamic_state3" +typedef struct VkPhysicalDeviceExtendedDynamicState3FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 extendedDynamicState3TessellationDomainOrigin; + VkBool32 extendedDynamicState3DepthClampEnable; + VkBool32 extendedDynamicState3PolygonMode; + VkBool32 extendedDynamicState3RasterizationSamples; + VkBool32 extendedDynamicState3SampleMask; + VkBool32 extendedDynamicState3AlphaToCoverageEnable; + VkBool32 extendedDynamicState3AlphaToOneEnable; + VkBool32 extendedDynamicState3LogicOpEnable; + VkBool32 extendedDynamicState3ColorBlendEnable; + VkBool32 extendedDynamicState3ColorBlendEquation; + VkBool32 extendedDynamicState3ColorWriteMask; + VkBool32 extendedDynamicState3RasterizationStream; + VkBool32 extendedDynamicState3ConservativeRasterizationMode; + VkBool32 extendedDynamicState3ExtraPrimitiveOverestimationSize; + VkBool32 extendedDynamicState3DepthClipEnable; + VkBool32 extendedDynamicState3SampleLocationsEnable; + VkBool32 extendedDynamicState3ColorBlendAdvanced; + VkBool32 extendedDynamicState3ProvokingVertexMode; + VkBool32 extendedDynamicState3LineRasterizationMode; + VkBool32 extendedDynamicState3LineStippleEnable; + VkBool32 extendedDynamicState3DepthClipNegativeOneToOne; + VkBool32 extendedDynamicState3ViewportWScalingEnable; + VkBool32 extendedDynamicState3ViewportSwizzle; + VkBool32 extendedDynamicState3CoverageToColorEnable; + VkBool32 extendedDynamicState3CoverageToColorLocation; + VkBool32 extendedDynamicState3CoverageModulationMode; + VkBool32 extendedDynamicState3CoverageModulationTableEnable; + VkBool32 extendedDynamicState3CoverageModulationTable; + VkBool32 extendedDynamicState3CoverageReductionMode; + VkBool32 extendedDynamicState3RepresentativeFragmentTestEnable; + VkBool32 extendedDynamicState3ShadingRateImageEnable; +} VkPhysicalDeviceExtendedDynamicState3FeaturesEXT; + +typedef struct VkPhysicalDeviceExtendedDynamicState3PropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 dynamicPrimitiveTopologyUnrestricted; +} VkPhysicalDeviceExtendedDynamicState3PropertiesEXT; + +typedef struct VkColorBlendEquationEXT { + VkBlendFactor srcColorBlendFactor; + VkBlendFactor dstColorBlendFactor; + VkBlendOp colorBlendOp; + VkBlendFactor srcAlphaBlendFactor; + VkBlendFactor dstAlphaBlendFactor; + VkBlendOp alphaBlendOp; +} VkColorBlendEquationEXT; + +typedef struct VkColorBlendAdvancedEXT { + VkBlendOp advancedBlendOp; + VkBool32 srcPremultiplied; + VkBool32 dstPremultiplied; + VkBlendOverlapEXT blendOverlap; + VkBool32 clampResults; +} VkColorBlendAdvancedEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClampEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetPolygonModeEXT)(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizationSamplesEXT)(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples); +typedef void (VKAPI_PTR *PFN_vkCmdSetSampleMaskEXT)(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples, const VkSampleMask* pSampleMask); +typedef void (VKAPI_PTR *PFN_vkCmdSetAlphaToCoverageEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetAlphaToOneEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorBlendEnableEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorBlendEquationEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorWriteMaskEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks); +typedef void (VKAPI_PTR *PFN_vkCmdSetTessellationDomainOriginEXT)(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin); +typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizationStreamEXT)(VkCommandBuffer commandBuffer, uint32_t rasterizationStream); +typedef void (VKAPI_PTR *PFN_vkCmdSetConservativeRasterizationModeEXT)(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClipEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetColorBlendAdvancedEXT)(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced); +typedef void (VKAPI_PTR *PFN_vkCmdSetProvokingVertexModeEXT)(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetLineRasterizationModeEXT)(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClipNegativeOneToOneEXT)(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingEnableNV)(VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetViewportSwizzleNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportSwizzleNV* pViewportSwizzles); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageToColorEnableNV)(VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageToColorLocationNV)(VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageModulationModeNV)(VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageModulationTableEnableNV)(VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageModulationTableNV)(VkCommandBuffer commandBuffer, uint32_t coverageModulationTableCount, const float* pCoverageModulationTable); +typedef void (VKAPI_PTR *PFN_vkCmdSetShadingRateImageEnableNV)(VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetRepresentativeFragmentTestEnableNV)(VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable); +typedef void (VKAPI_PTR *PFN_vkCmdSetCoverageReductionModeNV)(VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClampEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetPolygonModeEXT( + VkCommandBuffer commandBuffer, + VkPolygonMode polygonMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationSamplesEXT( + VkCommandBuffer commandBuffer, + VkSampleCountFlagBits rasterizationSamples); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleMaskEXT( + VkCommandBuffer commandBuffer, + VkSampleCountFlagBits samples, + const VkSampleMask* pSampleMask); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToCoverageEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToCoverageEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetAlphaToOneEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToOneEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 logicOpEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEnableEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkBool32* pColorBlendEnables); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendEquationEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendEquationEXT* pColorBlendEquations); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteMaskEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorComponentFlags* pColorWriteMasks); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetTessellationDomainOriginEXT( + VkCommandBuffer commandBuffer, + VkTessellationDomainOrigin domainOrigin); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizationStreamEXT( + VkCommandBuffer commandBuffer, + uint32_t rasterizationStream); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetConservativeRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkConservativeRasterizationModeEXT conservativeRasterizationMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetExtraPrimitiveOverestimationSizeEXT( + VkCommandBuffer commandBuffer, + float extraPrimitiveOverestimationSize); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClipEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 sampleLocationsEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetColorBlendAdvancedEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendAdvancedEXT* pColorBlendAdvanced); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetProvokingVertexModeEXT( + VkCommandBuffer commandBuffer, + VkProvokingVertexModeEXT provokingVertexMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkLineRasterizationModeEXT lineRasterizationMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stippledLineEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClipNegativeOneToOneEXT( + VkCommandBuffer commandBuffer, + VkBool32 negativeOneToOne); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 viewportWScalingEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportSwizzleNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportSwizzleNV* pViewportSwizzles); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 coverageToColorEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageToColorLocationNV( + VkCommandBuffer commandBuffer, + uint32_t coverageToColorLocation); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationModeNV( + VkCommandBuffer commandBuffer, + VkCoverageModulationModeNV coverageModulationMode); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 coverageModulationTableEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageModulationTableNV( + VkCommandBuffer commandBuffer, + uint32_t coverageModulationTableCount, + const float* pCoverageModulationTable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetShadingRateImageEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 shadingRateImageEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRepresentativeFragmentTestEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 representativeFragmentTestEnable); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetCoverageReductionModeNV( + VkCommandBuffer commandBuffer, + VkCoverageReductionModeNV coverageReductionMode); +#endif +#endif + + +// VK_EXT_subpass_merge_feedback is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_subpass_merge_feedback 1 +#define VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION 2 +#define VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME "VK_EXT_subpass_merge_feedback" + +typedef enum VkSubpassMergeStatusEXT { + VK_SUBPASS_MERGE_STATUS_MERGED_EXT = 0, + VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT = 1, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT = 2, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT = 3, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT = 4, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT = 5, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT = 6, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT = 7, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT = 8, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT = 9, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT = 10, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT = 11, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT = 12, + VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT = 13, + VK_SUBPASS_MERGE_STATUS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkSubpassMergeStatusEXT; +typedef struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 subpassMergeFeedback; +} VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + +typedef struct VkRenderPassCreationControlEXT { + VkStructureType sType; + const void* pNext; + VkBool32 disallowMerging; +} VkRenderPassCreationControlEXT; + +typedef struct VkRenderPassCreationFeedbackInfoEXT { + uint32_t postMergeSubpassCount; +} VkRenderPassCreationFeedbackInfoEXT; + +typedef struct VkRenderPassCreationFeedbackCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkRenderPassCreationFeedbackInfoEXT* pRenderPassFeedback; +} VkRenderPassCreationFeedbackCreateInfoEXT; + +typedef struct VkRenderPassSubpassFeedbackInfoEXT { + VkSubpassMergeStatusEXT subpassMergeStatus; + char description[VK_MAX_DESCRIPTION_SIZE]; + uint32_t postMergeIndex; +} VkRenderPassSubpassFeedbackInfoEXT; + +typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkRenderPassSubpassFeedbackInfoEXT* pSubpassFeedback; +} VkRenderPassSubpassFeedbackCreateInfoEXT; + + + +// VK_LUNARG_direct_driver_loading is a preprocessor guard. Do not pass it to API calls. +#define VK_LUNARG_direct_driver_loading 1 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION 1 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME "VK_LUNARG_direct_driver_loading" + +typedef enum VkDirectDriverLoadingModeLUNARG { + VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = 0, + VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = 1, + VK_DIRECT_DRIVER_LOADING_MODE_MAX_ENUM_LUNARG = 0x7FFFFFFF +} VkDirectDriverLoadingModeLUNARG; +typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddrLUNARG)( + VkInstance instance, const char* pName); + +typedef struct VkDirectDriverLoadingInfoLUNARG { + VkStructureType sType; + void* pNext; + VkDirectDriverLoadingFlagsLUNARG flags; + PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr; +} VkDirectDriverLoadingInfoLUNARG; + +typedef struct VkDirectDriverLoadingListLUNARG { + VkStructureType sType; + const void* pNext; + VkDirectDriverLoadingModeLUNARG mode; + uint32_t driverCount; + const VkDirectDriverLoadingInfoLUNARG* pDrivers; +} VkDirectDriverLoadingListLUNARG; + + + +// VK_ARM_tensors is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_tensors 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorARM) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorViewARM) +#define VK_ARM_TENSORS_SPEC_VERSION 1 +#define VK_ARM_TENSORS_EXTENSION_NAME "VK_ARM_tensors" + +typedef enum VkTensorTilingARM { + VK_TENSOR_TILING_OPTIMAL_ARM = 0, + VK_TENSOR_TILING_LINEAR_ARM = 1, + VK_TENSOR_TILING_MAX_ENUM_ARM = 0x7FFFFFFF +} VkTensorTilingARM; +typedef VkFlags64 VkTensorCreateFlagsARM; + +// Flag bits for VkTensorCreateFlagBitsARM +typedef VkFlags64 VkTensorCreateFlagBitsARM; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM = 0x00000001ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_PROTECTED_BIT_ARM = 0x00000002ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 0x00000004ULL; + +typedef VkFlags64 VkTensorViewCreateFlagsARM; + +// Flag bits for VkTensorViewCreateFlagBitsARM +typedef VkFlags64 VkTensorViewCreateFlagBitsARM; +static const VkTensorViewCreateFlagBitsARM VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 0x00000001ULL; + +typedef VkFlags64 VkTensorUsageFlagsARM; + +// Flag bits for VkTensorUsageFlagBitsARM +typedef VkFlags64 VkTensorUsageFlagBitsARM; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_SHADER_BIT_ARM = 0x00000002ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARM = 0x00000004ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARM = 0x00000008ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM = 0x00000010ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM = 0x00000020ULL; + +typedef struct VkTensorDescriptionARM { + VkStructureType sType; + const void* pNext; + VkTensorTilingARM tiling; + VkFormat format; + uint32_t dimensionCount; + const int64_t* pDimensions; + const int64_t* pStrides; + VkTensorUsageFlagsARM usage; +} VkTensorDescriptionARM; + +typedef struct VkTensorCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM* pDescription; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; +} VkTensorCreateInfoARM; + +typedef struct VkTensorViewCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewCreateFlagsARM flags; + VkTensorARM tensor; + VkFormat format; +} VkTensorViewCreateInfoARM; + +typedef struct VkTensorMemoryRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkTensorMemoryRequirementsInfoARM; + +typedef struct VkBindTensorMemoryInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindTensorMemoryInfoARM; + +typedef struct VkWriteDescriptorSetTensorARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorViewCount; + const VkTensorViewARM* pTensorViews; +} VkWriteDescriptorSetTensorARM; + +typedef struct VkTensorFormatPropertiesARM { + VkStructureType sType; + const void* pNext; + VkFormatFeatureFlags2 optimalTilingTensorFeatures; + VkFormatFeatureFlags2 linearTilingTensorFeatures; +} VkTensorFormatPropertiesARM; + +typedef struct VkPhysicalDeviceTensorPropertiesARM { + VkStructureType sType; + void* pNext; + uint32_t maxTensorDimensionCount; + uint64_t maxTensorElements; + uint64_t maxPerDimensionTensorElements; + int64_t maxTensorStride; + uint64_t maxTensorSize; + uint32_t maxTensorShaderAccessArrayLength; + uint32_t maxTensorShaderAccessSize; + uint32_t maxDescriptorSetStorageTensors; + uint32_t maxPerStageDescriptorSetStorageTensors; + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors; + VkBool32 shaderStorageTensorArrayNonUniformIndexingNative; + VkShaderStageFlags shaderTensorSupportedStages; +} VkPhysicalDeviceTensorPropertiesARM; + +typedef struct VkTensorMemoryBarrierARM { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkTensorARM tensor; +} VkTensorMemoryBarrierARM; + +typedef struct VkTensorDependencyInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorMemoryBarrierCount; + const VkTensorMemoryBarrierARM* pTensorMemoryBarriers; +} VkTensorDependencyInfoARM; + +typedef struct VkPhysicalDeviceTensorFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 tensorNonPacked; + VkBool32 shaderTensorAccess; + VkBool32 shaderStorageTensorArrayDynamicIndexing; + VkBool32 shaderStorageTensorArrayNonUniformIndexing; + VkBool32 descriptorBindingStorageTensorUpdateAfterBind; + VkBool32 tensors; +} VkPhysicalDeviceTensorFeaturesARM; + +typedef struct VkDeviceTensorMemoryRequirementsARM { + VkStructureType sType; + const void* pNext; + const VkTensorCreateInfoARM* pCreateInfo; +} VkDeviceTensorMemoryRequirementsARM; + +typedef struct VkTensorCopyARM { + VkStructureType sType; + const void* pNext; + uint32_t dimensionCount; + const uint64_t* pSrcOffset; + const uint64_t* pDstOffset; + const uint64_t* pExtent; +} VkTensorCopyARM; + +typedef struct VkCopyTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM srcTensor; + VkTensorARM dstTensor; + uint32_t regionCount; + const VkTensorCopyARM* pRegions; +} VkCopyTensorInfoARM; + +typedef struct VkMemoryDedicatedAllocateInfoTensorARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkMemoryDedicatedAllocateInfoTensorARM; + +typedef struct VkPhysicalDeviceExternalTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM* pDescription; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalTensorInfoARM; + +typedef struct VkExternalTensorPropertiesARM { + VkStructureType sType; + const void* pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalTensorPropertiesARM; + +typedef struct VkExternalMemoryTensorCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryTensorCreateInfoARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 descriptorBufferTensorDescriptors; +} VkPhysicalDeviceDescriptorBufferTensorFeaturesARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorPropertiesARM { + VkStructureType sType; + void* pNext; + size_t tensorCaptureReplayDescriptorDataSize; + size_t tensorViewCaptureReplayDescriptorDataSize; + size_t tensorDescriptorSize; +} VkPhysicalDeviceDescriptorBufferTensorPropertiesARM; + +typedef struct VkDescriptorGetTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewARM tensorView; +} VkDescriptorGetTensorInfoARM; + +typedef struct VkTensorCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkTensorCaptureDescriptorDataInfoARM; + +typedef struct VkTensorViewCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewARM tensorView; +} VkTensorViewCaptureDescriptorDataInfoARM; + +typedef struct VkFrameBoundaryTensorsARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorCount; + const VkTensorARM* pTensors; +} VkFrameBoundaryTensorsARM; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateTensorARM)(VkDevice device, const VkTensorCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorARM* pTensor); +typedef void (VKAPI_PTR *PFN_vkDestroyTensorARM)(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateTensorViewARM)(VkDevice device, const VkTensorViewCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorViewARM* pView); +typedef void (VKAPI_PTR *PFN_vkDestroyTensorViewARM)(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetTensorMemoryRequirementsARM)(VkDevice device, const VkTensorMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindTensorMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkGetDeviceTensorMemoryRequirementsARM)(VkDevice device, const VkDeviceTensorMemoryRequirementsARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdCopyTensorARM)(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM* pCopyTensorInfo); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, VkExternalTensorPropertiesARM* pExternalTensorProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorCaptureDescriptorDataInfoARM* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateTensorARM( + VkDevice device, + const VkTensorCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorARM* pTensor); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyTensorARM( + VkDevice device, + VkTensorARM tensor, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateTensorViewARM( + VkDevice device, + const VkTensorViewCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorViewARM* pView); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyTensorViewARM( + VkDevice device, + VkTensorViewARM tensorView, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetTensorMemoryRequirementsARM( + VkDevice device, + const VkTensorMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindTensorMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindTensorMemoryInfoARM* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceTensorMemoryRequirementsARM( + VkDevice device, + const VkDeviceTensorMemoryRequirementsARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyTensorARM( + VkCommandBuffer commandBuffer, + const VkCopyTensorInfoARM* pCopyTensorInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalTensorPropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, + VkExternalTensorPropertiesARM* pExternalTensorProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorCaptureDescriptorDataInfoARM* pInfo, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorViewOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, + void* pData); +#endif +#endif + + +// VK_EXT_shader_module_identifier is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_module_identifier 1 +#define VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT 32U +#define VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION 1 +#define VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME "VK_EXT_shader_module_identifier" +typedef struct VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderModuleIdentifier; +} VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT { + VkStructureType sType; + void* pNext; + uint8_t shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE]; +} VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT; + +typedef struct VkPipelineShaderStageModuleIdentifierCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t identifierSize; + const uint8_t* pIdentifier; +} VkPipelineShaderStageModuleIdentifierCreateInfoEXT; + +typedef struct VkShaderModuleIdentifierEXT { + VkStructureType sType; + void* pNext; + uint32_t identifierSize; + uint8_t identifier[VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT]; +} VkShaderModuleIdentifierEXT; + +typedef void (VKAPI_PTR *PFN_vkGetShaderModuleIdentifierEXT)(VkDevice device, VkShaderModule shaderModule, VkShaderModuleIdentifierEXT* pIdentifier); +typedef void (VKAPI_PTR *PFN_vkGetShaderModuleCreateInfoIdentifierEXT)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModuleIdentifierEXT* pIdentifier); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleIdentifierEXT( + VkDevice device, + VkShaderModule shaderModule, + VkShaderModuleIdentifierEXT* pIdentifier); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetShaderModuleCreateInfoIdentifierEXT( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + VkShaderModuleIdentifierEXT* pIdentifier); +#endif +#endif + + +// VK_EXT_rasterization_order_attachment_access is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_rasterization_order_attachment_access 1 +#define VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1 +#define VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_EXT_rasterization_order_attachment_access" + + +// VK_NV_optical_flow is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_optical_flow 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkOpticalFlowSessionNV) +#define VK_NV_OPTICAL_FLOW_SPEC_VERSION 1 +#define VK_NV_OPTICAL_FLOW_EXTENSION_NAME "VK_NV_optical_flow" + +typedef enum VkOpticalFlowPerformanceLevelNV { + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV = 1, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV = 2, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV = 3, + VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowPerformanceLevelNV; + +typedef enum VkOpticalFlowSessionBindingPointNV { + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV = 1, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV = 2, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV = 3, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV = 4, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV = 5, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV = 6, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV = 7, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV = 8, + VK_OPTICAL_FLOW_SESSION_BINDING_POINT_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowSessionBindingPointNV; + +typedef enum VkOpticalFlowGridSizeFlagBitsNV { + VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV = 0x00000002, + VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV = 0x00000004, + VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV = 0x00000008, + VK_OPTICAL_FLOW_GRID_SIZE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowGridSizeFlagBitsNV; +typedef VkFlags VkOpticalFlowGridSizeFlagsNV; + +typedef enum VkOpticalFlowUsageFlagBitsNV { + VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV = 0, + VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV = 0x00000002, + VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV = 0x00000004, + VK_OPTICAL_FLOW_USAGE_COST_BIT_NV = 0x00000008, + VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV = 0x00000010, + VK_OPTICAL_FLOW_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowUsageFlagBitsNV; +typedef VkFlags VkOpticalFlowUsageFlagsNV; + +typedef enum VkOpticalFlowSessionCreateFlagBitsNV { + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV = 0x00000002, + VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV = 0x00000004, + VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV = 0x00000008, + VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV = 0x00000010, + VK_OPTICAL_FLOW_SESSION_CREATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowSessionCreateFlagBitsNV; +typedef VkFlags VkOpticalFlowSessionCreateFlagsNV; + +typedef enum VkOpticalFlowExecuteFlagBitsNV { + VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV = 0x00000001, + VK_OPTICAL_FLOW_EXECUTE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkOpticalFlowExecuteFlagBitsNV; +typedef VkFlags VkOpticalFlowExecuteFlagsNV; +typedef struct VkPhysicalDeviceOpticalFlowFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 opticalFlow; +} VkPhysicalDeviceOpticalFlowFeaturesNV; + +typedef struct VkPhysicalDeviceOpticalFlowPropertiesNV { + VkStructureType sType; + void* pNext; + VkOpticalFlowGridSizeFlagsNV supportedOutputGridSizes; + VkOpticalFlowGridSizeFlagsNV supportedHintGridSizes; + VkBool32 hintSupported; + VkBool32 costSupported; + VkBool32 bidirectionalFlowSupported; + VkBool32 globalFlowSupported; + uint32_t minWidth; + uint32_t minHeight; + uint32_t maxWidth; + uint32_t maxHeight; + uint32_t maxNumRegionsOfInterest; +} VkPhysicalDeviceOpticalFlowPropertiesNV; + +typedef struct VkOpticalFlowImageFormatInfoNV { + VkStructureType sType; + const void* pNext; + VkOpticalFlowUsageFlagsNV usage; +} VkOpticalFlowImageFormatInfoNV; + +typedef struct VkOpticalFlowImageFormatPropertiesNV { + VkStructureType sType; + const void* pNext; + VkFormat format; +} VkOpticalFlowImageFormatPropertiesNV; + +typedef struct VkOpticalFlowSessionCreateInfoNV { + VkStructureType sType; + void* pNext; + uint32_t width; + uint32_t height; + VkFormat imageFormat; + VkFormat flowVectorFormat; + VkFormat costFormat; + VkOpticalFlowGridSizeFlagsNV outputGridSize; + VkOpticalFlowGridSizeFlagsNV hintGridSize; + VkOpticalFlowPerformanceLevelNV performanceLevel; + VkOpticalFlowSessionCreateFlagsNV flags; +} VkOpticalFlowSessionCreateInfoNV; + +typedef struct VkOpticalFlowSessionCreatePrivateDataInfoNV { + VkStructureType sType; + void* pNext; + uint32_t id; + uint32_t size; + const void* pPrivateData; +} VkOpticalFlowSessionCreatePrivateDataInfoNV; + +typedef struct VkOpticalFlowExecuteInfoNV { + VkStructureType sType; + void* pNext; + VkOpticalFlowExecuteFlagsNV flags; + uint32_t regionCount; + const VkRect2D* pRegions; +} VkOpticalFlowExecuteInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV)(VkPhysicalDevice physicalDevice, const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, uint32_t* pFormatCount, VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties); +typedef VkResult (VKAPI_PTR *PFN_vkCreateOpticalFlowSessionNV)(VkDevice device, const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkOpticalFlowSessionNV* pSession); +typedef void (VKAPI_PTR *PFN_vkDestroyOpticalFlowSessionNV)(VkDevice device, VkOpticalFlowSessionNV session, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkBindOpticalFlowSessionImageNV)(VkDevice device, VkOpticalFlowSessionNV session, VkOpticalFlowSessionBindingPointNV bindingPoint, VkImageView view, VkImageLayout layout); +typedef void (VKAPI_PTR *PFN_vkCmdOpticalFlowExecuteNV)(VkCommandBuffer commandBuffer, VkOpticalFlowSessionNV session, const VkOpticalFlowExecuteInfoNV* pExecuteInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + VkPhysicalDevice physicalDevice, + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, + uint32_t* pFormatCount, + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateOpticalFlowSessionNV( + VkDevice device, + const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkOpticalFlowSessionNV* pSession); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyOpticalFlowSessionNV( + VkDevice device, + VkOpticalFlowSessionNV session, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindOpticalFlowSessionImageNV( + VkDevice device, + VkOpticalFlowSessionNV session, + VkOpticalFlowSessionBindingPointNV bindingPoint, + VkImageView view, + VkImageLayout layout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdOpticalFlowExecuteNV( + VkCommandBuffer commandBuffer, + VkOpticalFlowSessionNV session, + const VkOpticalFlowExecuteInfoNV* pExecuteInfo); +#endif +#endif + + +// VK_EXT_legacy_dithering is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_legacy_dithering 1 +#define VK_EXT_LEGACY_DITHERING_SPEC_VERSION 2 +#define VK_EXT_LEGACY_DITHERING_EXTENSION_NAME "VK_EXT_legacy_dithering" +typedef struct VkPhysicalDeviceLegacyDitheringFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 legacyDithering; +} VkPhysicalDeviceLegacyDitheringFeaturesEXT; + + + +// VK_EXT_pipeline_protected_access is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_protected_access 1 +#define VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME "VK_EXT_pipeline_protected_access" +typedef VkPhysicalDevicePipelineProtectedAccessFeatures VkPhysicalDevicePipelineProtectedAccessFeaturesEXT; + + + +// VK_AMD_anti_lag is a preprocessor guard. Do not pass it to API calls. +#define VK_AMD_anti_lag 1 +#define VK_AMD_ANTI_LAG_SPEC_VERSION 1 +#define VK_AMD_ANTI_LAG_EXTENSION_NAME "VK_AMD_anti_lag" + +typedef enum VkAntiLagModeAMD { + VK_ANTI_LAG_MODE_DRIVER_CONTROL_AMD = 0, + VK_ANTI_LAG_MODE_ON_AMD = 1, + VK_ANTI_LAG_MODE_OFF_AMD = 2, + VK_ANTI_LAG_MODE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkAntiLagModeAMD; + +typedef enum VkAntiLagStageAMD { + VK_ANTI_LAG_STAGE_INPUT_AMD = 0, + VK_ANTI_LAG_STAGE_PRESENT_AMD = 1, + VK_ANTI_LAG_STAGE_MAX_ENUM_AMD = 0x7FFFFFFF +} VkAntiLagStageAMD; +typedef struct VkPhysicalDeviceAntiLagFeaturesAMD { + VkStructureType sType; + void* pNext; + VkBool32 antiLag; +} VkPhysicalDeviceAntiLagFeaturesAMD; + +typedef struct VkAntiLagPresentationInfoAMD { + VkStructureType sType; + void* pNext; + VkAntiLagStageAMD stage; + uint64_t frameIndex; +} VkAntiLagPresentationInfoAMD; + +typedef struct VkAntiLagDataAMD { + VkStructureType sType; + const void* pNext; + VkAntiLagModeAMD mode; + uint32_t maxFPS; + const VkAntiLagPresentationInfoAMD* pPresentationInfo; +} VkAntiLagDataAMD; + +typedef void (VKAPI_PTR *PFN_vkAntiLagUpdateAMD)(VkDevice device, const VkAntiLagDataAMD* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkAntiLagUpdateAMD( + VkDevice device, + const VkAntiLagDataAMD* pData); +#endif +#endif + + +// VK_EXT_shader_object is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_object 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderEXT) +#define VK_EXT_SHADER_OBJECT_SPEC_VERSION 1 +#define VK_EXT_SHADER_OBJECT_EXTENSION_NAME "VK_EXT_shader_object" + +typedef enum VkShaderCodeTypeEXT { + VK_SHADER_CODE_TYPE_BINARY_EXT = 0, + VK_SHADER_CODE_TYPE_SPIRV_EXT = 1, + VK_SHADER_CODE_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkShaderCodeTypeEXT; + +typedef enum VkDepthClampModeEXT { + VK_DEPTH_CLAMP_MODE_VIEWPORT_RANGE_EXT = 0, + VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT = 1, + VK_DEPTH_CLAMP_MODE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkDepthClampModeEXT; + +typedef enum VkShaderCreateFlagBitsEXT { + VK_SHADER_CREATE_LINK_STAGE_BIT_EXT = 0x00000001, + VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000002, + VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000004, + VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT = 0x00000008, + VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT = 0x00000010, + VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT = 0x00000020, + VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00000040, + VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT = 0x00000080, + VK_SHADER_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkShaderCreateFlagBitsEXT; +typedef VkFlags VkShaderCreateFlagsEXT; +typedef struct VkPhysicalDeviceShaderObjectFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderObject; +} VkPhysicalDeviceShaderObjectFeaturesEXT; + +typedef struct VkPhysicalDeviceShaderObjectPropertiesEXT { + VkStructureType sType; + void* pNext; + uint8_t shaderBinaryUUID[VK_UUID_SIZE]; + uint32_t shaderBinaryVersion; +} VkPhysicalDeviceShaderObjectPropertiesEXT; + +typedef struct VkShaderCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderCreateFlagsEXT flags; + VkShaderStageFlagBits stage; + VkShaderStageFlags nextStage; + VkShaderCodeTypeEXT codeType; + size_t codeSize; + const void* pCode; + const char* pName; + uint32_t setLayoutCount; + const VkDescriptorSetLayout* pSetLayouts; + uint32_t pushConstantRangeCount; + const VkPushConstantRange* pPushConstantRanges; + const VkSpecializationInfo* pSpecializationInfo; +} VkShaderCreateInfoEXT; + +typedef VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkShaderRequiredSubgroupSizeCreateInfoEXT; + +typedef struct VkDepthClampRangeEXT { + float minDepthClamp; + float maxDepthClamp; +} VkDepthClampRangeEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateShadersEXT)(VkDevice device, uint32_t createInfoCount, const VkShaderCreateInfoEXT* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkShaderEXT* pShaders); +typedef void (VKAPI_PTR *PFN_vkDestroyShaderEXT)(VkDevice device, VkShaderEXT shader, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetShaderBinaryDataEXT)(VkDevice device, VkShaderEXT shader, size_t* pDataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdBindShadersEXT)(VkCommandBuffer commandBuffer, uint32_t stageCount, const VkShaderStageFlagBits* pStages, const VkShaderEXT* pShaders); +typedef void (VKAPI_PTR *PFN_vkCmdSetDepthClampRangeEXT)(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateShadersEXT( + VkDevice device, + uint32_t createInfoCount, + const VkShaderCreateInfoEXT* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkShaderEXT* pShaders); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyShaderEXT( + VkDevice device, + VkShaderEXT shader, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderBinaryDataEXT( + VkDevice device, + VkShaderEXT shader, + size_t* pDataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindShadersEXT( + VkCommandBuffer commandBuffer, + uint32_t stageCount, + const VkShaderStageFlagBits* pStages, + const VkShaderEXT* pShaders); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthClampRangeEXT( + VkCommandBuffer commandBuffer, + VkDepthClampModeEXT depthClampMode, + const VkDepthClampRangeEXT* pDepthClampRange); +#endif +#endif + + +// VK_QCOM_tile_properties is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_properties 1 +#define VK_QCOM_TILE_PROPERTIES_SPEC_VERSION 1 +#define VK_QCOM_TILE_PROPERTIES_EXTENSION_NAME "VK_QCOM_tile_properties" +typedef struct VkPhysicalDeviceTilePropertiesFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileProperties; +} VkPhysicalDeviceTilePropertiesFeaturesQCOM; + +typedef struct VkTilePropertiesQCOM { + VkStructureType sType; + void* pNext; + VkExtent3D tileSize; + VkExtent2D apronSize; + VkOffset2D origin; +} VkTilePropertiesQCOM; + +typedef VkResult (VKAPI_PTR *PFN_vkGetFramebufferTilePropertiesQCOM)(VkDevice device, VkFramebuffer framebuffer, uint32_t* pPropertiesCount, VkTilePropertiesQCOM* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDynamicRenderingTilePropertiesQCOM)(VkDevice device, const VkRenderingInfo* pRenderingInfo, VkTilePropertiesQCOM* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetFramebufferTilePropertiesQCOM( + VkDevice device, + VkFramebuffer framebuffer, + uint32_t* pPropertiesCount, + VkTilePropertiesQCOM* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDynamicRenderingTilePropertiesQCOM( + VkDevice device, + const VkRenderingInfo* pRenderingInfo, + VkTilePropertiesQCOM* pProperties); +#endif +#endif + + +// VK_SEC_amigo_profiling is a preprocessor guard. Do not pass it to API calls. +#define VK_SEC_amigo_profiling 1 +#define VK_SEC_AMIGO_PROFILING_SPEC_VERSION 1 +#define VK_SEC_AMIGO_PROFILING_EXTENSION_NAME "VK_SEC_amigo_profiling" +typedef struct VkPhysicalDeviceAmigoProfilingFeaturesSEC { + VkStructureType sType; + void* pNext; + VkBool32 amigoProfiling; +} VkPhysicalDeviceAmigoProfilingFeaturesSEC; + +typedef struct VkAmigoProfilingSubmitInfoSEC { + VkStructureType sType; + const void* pNext; + uint64_t firstDrawTimestamp; + uint64_t swapBufferTimestamp; +} VkAmigoProfilingSubmitInfoSEC; + + + +// VK_QCOM_multiview_per_view_viewports is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_multiview_per_view_viewports 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_SPEC_VERSION 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME "VK_QCOM_multiview_per_view_viewports" +typedef struct VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 multiviewPerViewViewports; +} VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + + + +// VK_NV_ray_tracing_invocation_reorder is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_invocation_reorder 1 +#define VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME "VK_NV_ray_tracing_invocation_reorder" + +typedef enum VkRayTracingInvocationReorderModeNV { + VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV = 0, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV = 1, + VK_RAY_TRACING_INVOCATION_REORDER_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingInvocationReorderModeNV; +typedef struct VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV { + VkStructureType sType; + void* pNext; + VkRayTracingInvocationReorderModeNV rayTracingInvocationReorderReorderingHint; +} VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV; + +typedef struct VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingInvocationReorder; +} VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV; + + + +// VK_NV_cooperative_vector is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_vector 1 +#define VK_NV_COOPERATIVE_VECTOR_SPEC_VERSION 4 +#define VK_NV_COOPERATIVE_VECTOR_EXTENSION_NAME "VK_NV_cooperative_vector" + +typedef enum VkCooperativeVectorMatrixLayoutNV { + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_ROW_MAJOR_NV = 0, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_COLUMN_MAJOR_NV = 1, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV = 2, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV = 3, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_MAX_ENUM_NV = 0x7FFFFFFF +} VkCooperativeVectorMatrixLayoutNV; +typedef struct VkPhysicalDeviceCooperativeVectorPropertiesNV { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeVectorSupportedStages; + VkBool32 cooperativeVectorTrainingFloat16Accumulation; + VkBool32 cooperativeVectorTrainingFloat32Accumulation; + uint32_t maxCooperativeVectorComponents; +} VkPhysicalDeviceCooperativeVectorPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeVectorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeVector; + VkBool32 cooperativeVectorTraining; +} VkPhysicalDeviceCooperativeVectorFeaturesNV; + +typedef struct VkCooperativeVectorPropertiesNV { + VkStructureType sType; + void* pNext; + VkComponentTypeKHR inputType; + VkComponentTypeKHR inputInterpretation; + VkComponentTypeKHR matrixInterpretation; + VkComponentTypeKHR biasInterpretation; + VkComponentTypeKHR resultType; + VkBool32 transpose; +} VkCooperativeVectorPropertiesNV; + +typedef struct VkConvertCooperativeVectorMatrixInfoNV { + VkStructureType sType; + const void* pNext; + size_t srcSize; + VkDeviceOrHostAddressConstKHR srcData; + size_t* pDstSize; + VkDeviceOrHostAddressKHR dstData; + VkComponentTypeKHR srcComponentType; + VkComponentTypeKHR dstComponentType; + uint32_t numRows; + uint32_t numColumns; + VkCooperativeVectorMatrixLayoutNV srcLayout; + size_t srcStride; + VkCooperativeVectorMatrixLayoutNV dstLayout; + size_t dstStride; +} VkConvertCooperativeVectorMatrixInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeVectorPropertiesNV* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkConvertCooperativeVectorMatrixNV)(VkDevice device, const VkConvertCooperativeVectorMatrixInfoNV* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdConvertCooperativeVectorMatrixNV)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV* pInfos); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeVectorPropertiesNV* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkConvertCooperativeVectorMatrixNV( + VkDevice device, + const VkConvertCooperativeVectorMatrixInfoNV* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdConvertCooperativeVectorMatrixNV( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkConvertCooperativeVectorMatrixInfoNV* pInfos); +#endif +#endif + + +// VK_NV_extended_sparse_address_space is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_extended_sparse_address_space 1 +#define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION 1 +#define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_EXTENSION_NAME "VK_NV_extended_sparse_address_space" +typedef struct VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 extendedSparseAddressSpace; +} VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + +typedef struct VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV { + VkStructureType sType; + void* pNext; + VkDeviceSize extendedSparseAddressSpaceSize; + VkImageUsageFlags extendedSparseImageUsageFlags; + VkBufferUsageFlags extendedSparseBufferUsageFlags; +} VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + + + +// VK_EXT_mutable_descriptor_type is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_mutable_descriptor_type 1 +#define VK_EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 +#define VK_EXT_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_EXT_mutable_descriptor_type" + + +// VK_EXT_legacy_vertex_attributes is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_legacy_vertex_attributes 1 +#define VK_EXT_LEGACY_VERTEX_ATTRIBUTES_SPEC_VERSION 1 +#define VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME "VK_EXT_legacy_vertex_attributes" +typedef struct VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 legacyVertexAttributes; +} VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; + +typedef struct VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT { + VkStructureType sType; + void* pNext; + VkBool32 nativeUnalignedPerformance; +} VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; + + + +// VK_EXT_layer_settings is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_layer_settings 1 +#define VK_EXT_LAYER_SETTINGS_SPEC_VERSION 2 +#define VK_EXT_LAYER_SETTINGS_EXTENSION_NAME "VK_EXT_layer_settings" + +typedef enum VkLayerSettingTypeEXT { + VK_LAYER_SETTING_TYPE_BOOL32_EXT = 0, + VK_LAYER_SETTING_TYPE_INT32_EXT = 1, + VK_LAYER_SETTING_TYPE_INT64_EXT = 2, + VK_LAYER_SETTING_TYPE_UINT32_EXT = 3, + VK_LAYER_SETTING_TYPE_UINT64_EXT = 4, + VK_LAYER_SETTING_TYPE_FLOAT32_EXT = 5, + VK_LAYER_SETTING_TYPE_FLOAT64_EXT = 6, + VK_LAYER_SETTING_TYPE_STRING_EXT = 7, + VK_LAYER_SETTING_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkLayerSettingTypeEXT; +typedef struct VkLayerSettingEXT { + const char* pLayerName; + const char* pSettingName; + VkLayerSettingTypeEXT type; + uint32_t valueCount; + const void* pValues; +} VkLayerSettingEXT; + +typedef struct VkLayerSettingsCreateInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t settingCount; + const VkLayerSettingEXT* pSettings; +} VkLayerSettingsCreateInfoEXT; + + + +// VK_ARM_shader_core_builtins is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_shader_core_builtins 1 +#define VK_ARM_SHADER_CORE_BUILTINS_SPEC_VERSION 2 +#define VK_ARM_SHADER_CORE_BUILTINS_EXTENSION_NAME "VK_ARM_shader_core_builtins" +typedef struct VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 shaderCoreBuiltins; +} VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; + +typedef struct VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM { + VkStructureType sType; + void* pNext; + uint64_t shaderCoreMask; + uint32_t shaderCoreCount; + uint32_t shaderWarpsPerCore; +} VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; + + + +// VK_EXT_pipeline_library_group_handles is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_pipeline_library_group_handles 1 +#define VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_SPEC_VERSION 1 +#define VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_EXTENSION_NAME "VK_EXT_pipeline_library_group_handles" +typedef struct VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 pipelineLibraryGroupHandles; +} VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + + + +// VK_EXT_dynamic_rendering_unused_attachments is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_dynamic_rendering_unused_attachments 1 +#define VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_SPEC_VERSION 1 +#define VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_EXTENSION_NAME "VK_EXT_dynamic_rendering_unused_attachments" +typedef struct VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRenderingUnusedAttachments; +} VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + + + +// VK_NV_low_latency2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_low_latency2 1 +#define VK_NV_LOW_LATENCY_2_SPEC_VERSION 2 +#define VK_NV_LOW_LATENCY_2_EXTENSION_NAME "VK_NV_low_latency2" + +typedef enum VkLatencyMarkerNV { + VK_LATENCY_MARKER_SIMULATION_START_NV = 0, + VK_LATENCY_MARKER_SIMULATION_END_NV = 1, + VK_LATENCY_MARKER_RENDERSUBMIT_START_NV = 2, + VK_LATENCY_MARKER_RENDERSUBMIT_END_NV = 3, + VK_LATENCY_MARKER_PRESENT_START_NV = 4, + VK_LATENCY_MARKER_PRESENT_END_NV = 5, + VK_LATENCY_MARKER_INPUT_SAMPLE_NV = 6, + VK_LATENCY_MARKER_TRIGGER_FLASH_NV = 7, + VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_START_NV = 8, + VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_END_NV = 9, + VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_START_NV = 10, + VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_END_NV = 11, + VK_LATENCY_MARKER_MAX_ENUM_NV = 0x7FFFFFFF +} VkLatencyMarkerNV; + +typedef enum VkOutOfBandQueueTypeNV { + VK_OUT_OF_BAND_QUEUE_TYPE_RENDER_NV = 0, + VK_OUT_OF_BAND_QUEUE_TYPE_PRESENT_NV = 1, + VK_OUT_OF_BAND_QUEUE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkOutOfBandQueueTypeNV; +typedef struct VkLatencySleepModeInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 lowLatencyMode; + VkBool32 lowLatencyBoost; + uint32_t minimumIntervalUs; +} VkLatencySleepModeInfoNV; + +typedef struct VkLatencySleepInfoNV { + VkStructureType sType; + const void* pNext; + VkSemaphore signalSemaphore; + uint64_t value; +} VkLatencySleepInfoNV; + +typedef struct VkSetLatencyMarkerInfoNV { + VkStructureType sType; + const void* pNext; + uint64_t presentID; + VkLatencyMarkerNV marker; +} VkSetLatencyMarkerInfoNV; + +typedef struct VkLatencyTimingsFrameReportNV { + VkStructureType sType; + const void* pNext; + uint64_t presentID; + uint64_t inputSampleTimeUs; + uint64_t simStartTimeUs; + uint64_t simEndTimeUs; + uint64_t renderSubmitStartTimeUs; + uint64_t renderSubmitEndTimeUs; + uint64_t presentStartTimeUs; + uint64_t presentEndTimeUs; + uint64_t driverStartTimeUs; + uint64_t driverEndTimeUs; + uint64_t osRenderQueueStartTimeUs; + uint64_t osRenderQueueEndTimeUs; + uint64_t gpuRenderStartTimeUs; + uint64_t gpuRenderEndTimeUs; +} VkLatencyTimingsFrameReportNV; + +typedef struct VkGetLatencyMarkerInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t timingCount; + VkLatencyTimingsFrameReportNV* pTimings; +} VkGetLatencyMarkerInfoNV; + +typedef struct VkLatencySubmissionPresentIdNV { + VkStructureType sType; + const void* pNext; + uint64_t presentID; +} VkLatencySubmissionPresentIdNV; + +typedef struct VkSwapchainLatencyCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkBool32 latencyModeEnable; +} VkSwapchainLatencyCreateInfoNV; + +typedef struct VkOutOfBandQueueTypeInfoNV { + VkStructureType sType; + const void* pNext; + VkOutOfBandQueueTypeNV queueType; +} VkOutOfBandQueueTypeInfoNV; + +typedef struct VkLatencySurfaceCapabilitiesNV { + VkStructureType sType; + const void* pNext; + uint32_t presentModeCount; + VkPresentModeKHR* pPresentModes; +} VkLatencySurfaceCapabilitiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkSetLatencySleepModeNV)(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepModeInfoNV* pSleepModeInfo); +typedef VkResult (VKAPI_PTR *PFN_vkLatencySleepNV)(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepInfoNV* pSleepInfo); +typedef void (VKAPI_PTR *PFN_vkSetLatencyMarkerNV)(VkDevice device, VkSwapchainKHR swapchain, const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkGetLatencyTimingsNV)(VkDevice device, VkSwapchainKHR swapchain, VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkQueueNotifyOutOfBandNV)(VkQueue queue, const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetLatencySleepModeNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepModeInfoNV* pSleepModeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkLatencySleepNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepInfoNV* pSleepInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkSetLatencyMarkerNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetLatencyTimingsNV( + VkDevice device, + VkSwapchainKHR swapchain, + VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkQueueNotifyOutOfBandNV( + VkQueue queue, + const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo); +#endif +#endif + + +// VK_ARM_data_graph is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_data_graph 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM) +#define VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM 128U +#define VK_ARM_DATA_GRAPH_SPEC_VERSION 1 +#define VK_ARM_DATA_GRAPH_EXTENSION_NAME "VK_ARM_data_graph" + +typedef enum VkDataGraphPipelineSessionBindPointARM { + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM = 0, + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelineSessionBindPointARM; + +typedef enum VkDataGraphPipelineSessionBindPointTypeARM { + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM = 0, + VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelineSessionBindPointTypeARM; + +typedef enum VkDataGraphPipelinePropertyARM { + VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM = 0, + VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM = 1, + VK_DATA_GRAPH_PIPELINE_PROPERTY_MAX_ENUM_ARM = 0x7FFFFFFF +} VkDataGraphPipelinePropertyARM; + +typedef enum VkPhysicalDeviceDataGraphProcessingEngineTypeARM { + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM = 0, + VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkPhysicalDeviceDataGraphProcessingEngineTypeARM; + +typedef enum VkPhysicalDeviceDataGraphOperationTypeARM { + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM = 0, + VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_MAX_ENUM_ARM = 0x7FFFFFFF +} VkPhysicalDeviceDataGraphOperationTypeARM; +typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagsARM; + +// Flag bits for VkDataGraphPipelineSessionCreateFlagBitsARM +typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagBitsARM; +static const VkDataGraphPipelineSessionCreateFlagBitsARM VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM = 0x00000001ULL; + +typedef VkFlags64 VkDataGraphPipelineDispatchFlagsARM; + +// Flag bits for VkDataGraphPipelineDispatchFlagBitsARM +typedef VkFlags64 VkDataGraphPipelineDispatchFlagBitsARM; + +typedef struct VkPhysicalDeviceDataGraphFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 dataGraph; + VkBool32 dataGraphUpdateAfterBind; + VkBool32 dataGraphSpecializationConstants; + VkBool32 dataGraphDescriptorBuffer; + VkBool32 dataGraphShaderModule; +} VkPhysicalDeviceDataGraphFeaturesARM; + +typedef struct VkDataGraphPipelineConstantARM { + VkStructureType sType; + const void* pNext; + uint32_t id; + const void* pConstantData; +} VkDataGraphPipelineConstantARM; + +typedef struct VkDataGraphPipelineResourceInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t descriptorSet; + uint32_t binding; + uint32_t arrayElement; +} VkDataGraphPipelineResourceInfoARM; + +typedef struct VkDataGraphPipelineCompilerControlCreateInfoARM { + VkStructureType sType; + const void* pNext; + const char* pVendorOptions; +} VkDataGraphPipelineCompilerControlCreateInfoARM; + +typedef struct VkDataGraphPipelineCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags2KHR flags; + VkPipelineLayout layout; + uint32_t resourceInfoCount; + const VkDataGraphPipelineResourceInfoARM* pResourceInfos; +} VkDataGraphPipelineCreateInfoARM; + +typedef struct VkDataGraphPipelineShaderModuleCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkShaderModule module; + const char* pName; + const VkSpecializationInfo* pSpecializationInfo; + uint32_t constantCount; + const VkDataGraphPipelineConstantARM* pConstants; +} VkDataGraphPipelineShaderModuleCreateInfoARM; + +typedef struct VkDataGraphPipelineSessionCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionCreateFlagsARM flags; + VkPipeline dataGraphPipeline; +} VkDataGraphPipelineSessionCreateInfoARM; + +typedef struct VkDataGraphPipelineSessionBindPointRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionARM session; +} VkDataGraphPipelineSessionBindPointRequirementsInfoARM; + +typedef struct VkDataGraphPipelineSessionBindPointRequirementARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionBindPointARM bindPoint; + VkDataGraphPipelineSessionBindPointTypeARM bindPointType; + uint32_t numObjects; +} VkDataGraphPipelineSessionBindPointRequirementARM; + +typedef struct VkDataGraphPipelineSessionMemoryRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionARM session; + VkDataGraphPipelineSessionBindPointARM bindPoint; + uint32_t objectIndex; +} VkDataGraphPipelineSessionMemoryRequirementsInfoARM; + +typedef struct VkBindDataGraphPipelineSessionMemoryInfoARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelineSessionARM session; + VkDataGraphPipelineSessionBindPointARM bindPoint; + uint32_t objectIndex; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindDataGraphPipelineSessionMemoryInfoARM; + +typedef struct VkDataGraphPipelineInfoARM { + VkStructureType sType; + const void* pNext; + VkPipeline dataGraphPipeline; +} VkDataGraphPipelineInfoARM; + +typedef struct VkDataGraphPipelinePropertyQueryResultARM { + VkStructureType sType; + const void* pNext; + VkDataGraphPipelinePropertyARM property; + VkBool32 isText; + size_t dataSize; + void* pData; +} VkDataGraphPipelinePropertyQueryResultARM; + +typedef struct VkDataGraphPipelineIdentifierCreateInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t identifierSize; + const uint8_t* pIdentifier; +} VkDataGraphPipelineIdentifierCreateInfoARM; + +typedef struct VkDataGraphPipelineDispatchInfoARM { + VkStructureType sType; + void* pNext; + VkDataGraphPipelineDispatchFlagsARM flags; +} VkDataGraphPipelineDispatchInfoARM; + +typedef struct VkPhysicalDeviceDataGraphProcessingEngineARM { + VkPhysicalDeviceDataGraphProcessingEngineTypeARM type; + VkBool32 isForeign; +} VkPhysicalDeviceDataGraphProcessingEngineARM; + +typedef struct VkPhysicalDeviceDataGraphOperationSupportARM { + VkPhysicalDeviceDataGraphOperationTypeARM operationType; + char name[VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM]; + uint32_t version; +} VkPhysicalDeviceDataGraphOperationSupportARM; + +typedef struct VkQueueFamilyDataGraphPropertiesARM { + VkStructureType sType; + const void* pNext; + VkPhysicalDeviceDataGraphProcessingEngineARM engine; + VkPhysicalDeviceDataGraphOperationSupportARM operation; +} VkQueueFamilyDataGraphPropertiesARM; + +typedef struct VkDataGraphProcessingEngineCreateInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t processingEngineCount; + VkPhysicalDeviceDataGraphProcessingEngineARM* pProcessingEngines; +} VkDataGraphProcessingEngineCreateInfoARM; + +typedef struct VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + VkPhysicalDeviceDataGraphProcessingEngineTypeARM engineType; +} VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + +typedef struct VkQueueFamilyDataGraphProcessingEnginePropertiesARM { + VkStructureType sType; + const void* pNext; + VkExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes; + VkExternalMemoryHandleTypeFlags foreignMemoryHandleTypes; +} VkQueueFamilyDataGraphProcessingEnginePropertiesARM; + +typedef struct VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t dimension; + uint32_t zeroCount; + uint32_t groupSize; +} VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDataGraphPipelinesARM)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkDataGraphPipelineCreateInfoARM* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDataGraphPipelineSessionARM)(VkDevice device, const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDataGraphPipelineSessionARM* pSession); +typedef VkResult (VKAPI_PTR *PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM)(VkDevice device, const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, uint32_t* pBindPointRequirementCount, VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements); +typedef void (VKAPI_PTR *PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM)(VkDevice device, const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindDataGraphPipelineSessionMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkDestroyDataGraphPipelineSessionARM)(VkDevice device, VkDataGraphPipelineSessionARM session, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchDataGraphARM)(VkCommandBuffer commandBuffer, VkDataGraphPipelineSessionARM session, const VkDataGraphPipelineDispatchInfoARM* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetDataGraphPipelineAvailablePropertiesARM)(VkDevice device, const VkDataGraphPipelineInfoARM* pPipelineInfo, uint32_t* pPropertiesCount, VkDataGraphPipelinePropertyARM* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetDataGraphPipelinePropertiesARM)(VkDevice device, const VkDataGraphPipelineInfoARM* pPipelineInfo, uint32_t propertiesCount, VkDataGraphPipelinePropertyQueryResultARM* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pQueueFamilyDataGraphPropertyCount, VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelinesARM( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkDataGraphPipelineCreateInfoARM* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDataGraphPipelineSessionARM( + VkDevice device, + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDataGraphPipelineSessionARM* pSession); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineSessionBindPointRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, + uint32_t* pBindPointRequirementCount, + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDataGraphPipelineSessionMemoryRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBindDataGraphPipelineSessionMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyDataGraphPipelineSessionARM( + VkDevice device, + VkDataGraphPipelineSessionARM session, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchDataGraphARM( + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelineAvailablePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t* pPropertiesCount, + VkDataGraphPipelinePropertyARM* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDataGraphPipelinePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t propertiesCount, + VkDataGraphPipelinePropertyQueryResultARM* pProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties); +#endif +#endif + + +// VK_QCOM_multiview_per_view_render_areas is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_multiview_per_view_render_areas 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_SPEC_VERSION 1 +#define VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_EXTENSION_NAME "VK_QCOM_multiview_per_view_render_areas" +typedef struct VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 multiviewPerViewRenderAreas; +} VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + +typedef struct VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM { + VkStructureType sType; + const void* pNext; + uint32_t perViewRenderAreaCount; + const VkRect2D* pPerViewRenderAreas; +} VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + + + +// VK_NV_per_stage_descriptor_set is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_per_stage_descriptor_set 1 +#define VK_NV_PER_STAGE_DESCRIPTOR_SET_SPEC_VERSION 1 +#define VK_NV_PER_STAGE_DESCRIPTOR_SET_EXTENSION_NAME "VK_NV_per_stage_descriptor_set" +typedef struct VkPhysicalDevicePerStageDescriptorSetFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 perStageDescriptorSet; + VkBool32 dynamicPipelineLayout; +} VkPhysicalDevicePerStageDescriptorSetFeaturesNV; + + + +// VK_QCOM_image_processing2 is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_image_processing2 1 +#define VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION 1 +#define VK_QCOM_IMAGE_PROCESSING_2_EXTENSION_NAME "VK_QCOM_image_processing2" + +typedef enum VkBlockMatchWindowCompareModeQCOM { + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM = 0, + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM = 1, + VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkBlockMatchWindowCompareModeQCOM; +typedef struct VkPhysicalDeviceImageProcessing2FeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 textureBlockMatch2; +} VkPhysicalDeviceImageProcessing2FeaturesQCOM; + +typedef struct VkPhysicalDeviceImageProcessing2PropertiesQCOM { + VkStructureType sType; + void* pNext; + VkExtent2D maxBlockMatchWindow; +} VkPhysicalDeviceImageProcessing2PropertiesQCOM; + +typedef struct VkSamplerBlockMatchWindowCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkExtent2D windowExtent; + VkBlockMatchWindowCompareModeQCOM windowCompareMode; +} VkSamplerBlockMatchWindowCreateInfoQCOM; + + + +// VK_QCOM_filter_cubic_weights is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_filter_cubic_weights 1 +#define VK_QCOM_FILTER_CUBIC_WEIGHTS_SPEC_VERSION 1 +#define VK_QCOM_FILTER_CUBIC_WEIGHTS_EXTENSION_NAME "VK_QCOM_filter_cubic_weights" + +typedef enum VkCubicFilterWeightsQCOM { + VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM = 0, + VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM = 1, + VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM = 2, + VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM = 3, + VK_CUBIC_FILTER_WEIGHTS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkCubicFilterWeightsQCOM; +typedef struct VkPhysicalDeviceCubicWeightsFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 selectableCubicWeights; +} VkPhysicalDeviceCubicWeightsFeaturesQCOM; + +typedef struct VkSamplerCubicWeightsCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkCubicFilterWeightsQCOM cubicWeights; +} VkSamplerCubicWeightsCreateInfoQCOM; + +typedef struct VkBlitImageCubicWeightsInfoQCOM { + VkStructureType sType; + const void* pNext; + VkCubicFilterWeightsQCOM cubicWeights; +} VkBlitImageCubicWeightsInfoQCOM; + + + +// VK_QCOM_ycbcr_degamma is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_ycbcr_degamma 1 +#define VK_QCOM_YCBCR_DEGAMMA_SPEC_VERSION 1 +#define VK_QCOM_YCBCR_DEGAMMA_EXTENSION_NAME "VK_QCOM_ycbcr_degamma" +typedef struct VkPhysicalDeviceYcbcrDegammaFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 ycbcrDegamma; +} VkPhysicalDeviceYcbcrDegammaFeaturesQCOM; + +typedef struct VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM { + VkStructureType sType; + void* pNext; + VkBool32 enableYDegamma; + VkBool32 enableCbCrDegamma; +} VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + + + +// VK_QCOM_filter_cubic_clamp is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_filter_cubic_clamp 1 +#define VK_QCOM_FILTER_CUBIC_CLAMP_SPEC_VERSION 1 +#define VK_QCOM_FILTER_CUBIC_CLAMP_EXTENSION_NAME "VK_QCOM_filter_cubic_clamp" +typedef struct VkPhysicalDeviceCubicClampFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 cubicRangeClamp; +} VkPhysicalDeviceCubicClampFeaturesQCOM; + + + +// VK_EXT_attachment_feedback_loop_dynamic_state is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_attachment_feedback_loop_dynamic_state 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_SPEC_VERSION 1 +#define VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_attachment_feedback_loop_dynamic_state" +typedef struct VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 attachmentFeedbackLoopDynamicState; +} VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetAttachmentFeedbackLoopEnableEXT( + VkCommandBuffer commandBuffer, + VkImageAspectFlags aspectMask); +#endif +#endif + + +// VK_MSFT_layered_driver is a preprocessor guard. Do not pass it to API calls. +#define VK_MSFT_layered_driver 1 +#define VK_MSFT_LAYERED_DRIVER_SPEC_VERSION 1 +#define VK_MSFT_LAYERED_DRIVER_EXTENSION_NAME "VK_MSFT_layered_driver" + +typedef enum VkLayeredDriverUnderlyingApiMSFT { + VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT = 0, + VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT = 1, + VK_LAYERED_DRIVER_UNDERLYING_API_MAX_ENUM_MSFT = 0x7FFFFFFF +} VkLayeredDriverUnderlyingApiMSFT; +typedef struct VkPhysicalDeviceLayeredDriverPropertiesMSFT { + VkStructureType sType; + void* pNext; + VkLayeredDriverUnderlyingApiMSFT underlyingAPI; +} VkPhysicalDeviceLayeredDriverPropertiesMSFT; + + + +// VK_NV_descriptor_pool_overallocation is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_descriptor_pool_overallocation 1 +#define VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_SPEC_VERSION 1 +#define VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME "VK_NV_descriptor_pool_overallocation" +typedef struct VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 descriptorPoolOverallocation; +} VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + + + +// VK_QCOM_tile_memory_heap is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_memory_heap 1 +#define VK_QCOM_TILE_MEMORY_HEAP_SPEC_VERSION 1 +#define VK_QCOM_TILE_MEMORY_HEAP_EXTENSION_NAME "VK_QCOM_tile_memory_heap" +typedef struct VkPhysicalDeviceTileMemoryHeapFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileMemoryHeap; +} VkPhysicalDeviceTileMemoryHeapFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileMemoryHeapPropertiesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 queueSubmitBoundary; + VkBool32 tileBufferTransfers; +} VkPhysicalDeviceTileMemoryHeapPropertiesQCOM; + +typedef struct VkTileMemoryRequirementsQCOM { + VkStructureType sType; + void* pNext; + VkDeviceSize size; + VkDeviceSize alignment; +} VkTileMemoryRequirementsQCOM; + +typedef struct VkTileMemoryBindInfoQCOM { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkTileMemoryBindInfoQCOM; + +typedef struct VkTileMemorySizeInfoQCOM { + VkStructureType sType; + const void* pNext; + VkDeviceSize size; +} VkTileMemorySizeInfoQCOM; + +typedef void (VKAPI_PTR *PFN_vkCmdBindTileMemoryQCOM)(VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( + VkCommandBuffer commandBuffer, + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); +#endif +#endif + + +// VK_NV_display_stereo is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_display_stereo 1 +#define VK_NV_DISPLAY_STEREO_SPEC_VERSION 1 +#define VK_NV_DISPLAY_STEREO_EXTENSION_NAME "VK_NV_display_stereo" + +typedef enum VkDisplaySurfaceStereoTypeNV { + VK_DISPLAY_SURFACE_STEREO_TYPE_NONE_NV = 0, + VK_DISPLAY_SURFACE_STEREO_TYPE_ONBOARD_DIN_NV = 1, + VK_DISPLAY_SURFACE_STEREO_TYPE_HDMI_3D_NV = 2, + VK_DISPLAY_SURFACE_STEREO_TYPE_INBAND_DISPLAYPORT_NV = 3, + VK_DISPLAY_SURFACE_STEREO_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplaySurfaceStereoTypeNV; +typedef struct VkDisplaySurfaceStereoCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDisplaySurfaceStereoTypeNV stereoType; +} VkDisplaySurfaceStereoCreateInfoNV; + +typedef struct VkDisplayModeStereoPropertiesNV { + VkStructureType sType; + const void* pNext; + VkBool32 hdmi3DSupported; +} VkDisplayModeStereoPropertiesNV; + + + +// VK_NV_raw_access_chains is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_raw_access_chains 1 +#define VK_NV_RAW_ACCESS_CHAINS_SPEC_VERSION 1 +#define VK_NV_RAW_ACCESS_CHAINS_EXTENSION_NAME "VK_NV_raw_access_chains" +typedef struct VkPhysicalDeviceRawAccessChainsFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shaderRawAccessChains; +} VkPhysicalDeviceRawAccessChainsFeaturesNV; + + + +// VK_NV_external_compute_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_compute_queue 1 +VK_DEFINE_HANDLE(VkExternalComputeQueueNV) +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME "VK_NV_external_compute_queue" +typedef struct VkExternalComputeQueueDeviceCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t reservedExternalQueues; +} VkExternalComputeQueueDeviceCreateInfoNV; + +typedef struct VkExternalComputeQueueCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkQueue preferredQueue; +} VkExternalComputeQueueCreateInfoNV; + +typedef struct VkExternalComputeQueueDataParamsNV { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndex; +} VkExternalComputeQueueDataParamsNV; + +typedef struct VkPhysicalDeviceExternalComputeQueuePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t externalDataSize; + uint32_t maxExternalQueues; +} VkPhysicalDeviceExternalComputeQueuePropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateExternalComputeQueueNV)(VkDevice device, const VkExternalComputeQueueCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkExternalComputeQueueNV* pExternalQueue); +typedef void (VKAPI_PTR *PFN_vkDestroyExternalComputeQueueNV)(VkDevice device, VkExternalComputeQueueNV externalQueue, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetExternalComputeQueueDataNV)(VkExternalComputeQueueNV externalQueue, VkExternalComputeQueueDataParamsNV* params, void* pData); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateExternalComputeQueueNV( + VkDevice device, + const VkExternalComputeQueueCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkExternalComputeQueueNV* pExternalQueue); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyExternalComputeQueueNV( + VkDevice device, + VkExternalComputeQueueNV externalQueue, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetExternalComputeQueueDataNV( + VkExternalComputeQueueNV externalQueue, + VkExternalComputeQueueDataParamsNV* params, + void* pData); +#endif +#endif + + +// VK_NV_command_buffer_inheritance is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_command_buffer_inheritance 1 +#define VK_NV_COMMAND_BUFFER_INHERITANCE_SPEC_VERSION 1 +#define VK_NV_COMMAND_BUFFER_INHERITANCE_EXTENSION_NAME "VK_NV_command_buffer_inheritance" +typedef struct VkPhysicalDeviceCommandBufferInheritanceFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 commandBufferInheritance; +} VkPhysicalDeviceCommandBufferInheritanceFeaturesNV; + + + +// VK_NV_shader_atomic_float16_vector is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_shader_atomic_float16_vector 1 +#define VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_SPEC_VERSION 1 +#define VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_EXTENSION_NAME "VK_NV_shader_atomic_float16_vector" +typedef struct VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloat16VectorAtomics; +} VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + + + +// VK_EXT_shader_replicated_composites is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_replicated_composites 1 +#define VK_EXT_SHADER_REPLICATED_COMPOSITES_SPEC_VERSION 1 +#define VK_EXT_SHADER_REPLICATED_COMPOSITES_EXTENSION_NAME "VK_EXT_shader_replicated_composites" +typedef struct VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderReplicatedComposites; +} VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + + + +// VK_EXT_shader_float8 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_float8 1 +#define VK_EXT_SHADER_FLOAT8_SPEC_VERSION 1 +#define VK_EXT_SHADER_FLOAT8_EXTENSION_NAME "VK_EXT_shader_float8" +typedef struct VkPhysicalDeviceShaderFloat8FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloat8; + VkBool32 shaderFloat8CooperativeMatrix; +} VkPhysicalDeviceShaderFloat8FeaturesEXT; + + + +// VK_NV_ray_tracing_validation is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_validation 1 +#define VK_NV_RAY_TRACING_VALIDATION_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_VALIDATION_EXTENSION_NAME "VK_NV_ray_tracing_validation" +typedef struct VkPhysicalDeviceRayTracingValidationFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingValidation; +} VkPhysicalDeviceRayTracingValidationFeaturesNV; + + + +// VK_NV_cluster_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cluster_acceleration_structure 1 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_SPEC_VERSION 3 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_cluster_acceleration_structure" + +typedef enum VkClusterAccelerationStructureTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_CLUSTERS_BOTTOM_LEVEL_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_TEMPLATE_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureTypeNV; + +typedef enum VkClusterAccelerationStructureOpTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV = 3, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_GET_CLUSTER_TEMPLATE_INDICES_NV = 5, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpTypeNV; + +typedef enum VkClusterAccelerationStructureOpModeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_COMPUTE_SIZES_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpModeNV; + +typedef enum VkClusterAccelerationStructureAddressResolutionFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_NONE_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_IMPLICIT_DATA_BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SCRATCH_DATA_BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_ADDRESS_ARRAY_BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_SIZES_ARRAY_BIT_NV = 0x00000008, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_ARRAY_BIT_NV = 0x00000010, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_COUNT_BIT_NV = 0x00000020, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureAddressResolutionFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureAddressResolutionFlagsNV; + +typedef enum VkClusterAccelerationStructureClusterFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_ALLOW_DISABLE_OPACITY_MICROMAPS_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureClusterFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureClusterFlagsNV; + +typedef enum VkClusterAccelerationStructureGeometryFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_CULL_DISABLE_BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_NO_DUPLICATE_ANYHIT_INVOCATION_BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_OPAQUE_BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureGeometryFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureGeometryFlagsNV; + +typedef enum VkClusterAccelerationStructureIndexFormatFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_8BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_16BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_32BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureIndexFormatFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureIndexFormatFlagsNV; +typedef struct VkPhysicalDeviceClusterAccelerationStructureFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 clusterAccelerationStructure; +} VkPhysicalDeviceClusterAccelerationStructureFeaturesNV; + +typedef struct VkPhysicalDeviceClusterAccelerationStructurePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxVerticesPerCluster; + uint32_t maxTrianglesPerCluster; + uint32_t clusterScratchByteAlignment; + uint32_t clusterByteAlignment; + uint32_t clusterTemplateByteAlignment; + uint32_t clusterBottomLevelByteAlignment; + uint32_t clusterTemplateBoundsByteAlignment; + uint32_t maxClusterGeometryIndex; +} VkPhysicalDeviceClusterAccelerationStructurePropertiesNV; + +typedef struct VkClusterAccelerationStructureClustersBottomLevelInputNV { + VkStructureType sType; + void* pNext; + uint32_t maxTotalClusterCount; + uint32_t maxClusterCountPerAccelerationStructure; +} VkClusterAccelerationStructureClustersBottomLevelInputNV; + +typedef struct VkClusterAccelerationStructureTriangleClusterInputNV { + VkStructureType sType; + void* pNext; + VkFormat vertexFormat; + uint32_t maxGeometryIndexValue; + uint32_t maxClusterUniqueGeometryCount; + uint32_t maxClusterTriangleCount; + uint32_t maxClusterVertexCount; + uint32_t maxTotalTriangleCount; + uint32_t maxTotalVertexCount; + uint32_t minPositionTruncateBitCount; +} VkClusterAccelerationStructureTriangleClusterInputNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInputNV { + VkStructureType sType; + void* pNext; + VkClusterAccelerationStructureTypeNV type; + VkBool32 noMoveOverlap; + VkDeviceSize maxMovedBytes; +} VkClusterAccelerationStructureMoveObjectsInputNV; + +typedef union VkClusterAccelerationStructureOpInputNV { + VkClusterAccelerationStructureClustersBottomLevelInputNV* pClustersBottomLevel; + VkClusterAccelerationStructureTriangleClusterInputNV* pTriangleClusters; + VkClusterAccelerationStructureMoveObjectsInputNV* pMoveObjects; +} VkClusterAccelerationStructureOpInputNV; + +typedef struct VkClusterAccelerationStructureInputInfoNV { + VkStructureType sType; + void* pNext; + uint32_t maxAccelerationStructureCount; + VkBuildAccelerationStructureFlagsKHR flags; + VkClusterAccelerationStructureOpTypeNV opType; + VkClusterAccelerationStructureOpModeNV opMode; + VkClusterAccelerationStructureOpInputNV opInput; +} VkClusterAccelerationStructureInputInfoNV; + +typedef struct VkStridedDeviceAddressRegionKHR { + VkDeviceAddress deviceAddress; + VkDeviceSize stride; + VkDeviceSize size; +} VkStridedDeviceAddressRegionKHR; + +typedef struct VkClusterAccelerationStructureCommandsInfoNV { + VkStructureType sType; + void* pNext; + VkClusterAccelerationStructureInputInfoNV input; + VkDeviceAddress dstImplicitData; + VkDeviceAddress scratchData; + VkStridedDeviceAddressRegionKHR dstAddressesArray; + VkStridedDeviceAddressRegionKHR dstSizesArray; + VkStridedDeviceAddressRegionKHR srcInfosArray; + VkDeviceAddress srcInfosCount; + VkClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags; +} VkClusterAccelerationStructureCommandsInfoNV; + +typedef struct VkStridedDeviceAddressNV { + VkDeviceAddress startAddress; + VkDeviceSize strideInBytes; +} VkStridedDeviceAddressNV; + +typedef struct VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV { + uint32_t geometryIndex:24; + uint32_t reserved:5; + uint32_t geometryFlags:3; +} VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInfoNV { + VkDeviceAddress srcAccelerationStructure; +} VkClusterAccelerationStructureMoveObjectsInfoNV; + +typedef struct VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV { + uint32_t clusterReferencesCount; + uint32_t clusterReferencesStride; + VkDeviceAddress clusterReferences; +} VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount:9; + uint32_t vertexCount:9; + uint32_t positionTruncateBitCount:6; + uint32_t indexType:4; + uint32_t opacityMicromapIndexType:4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; +} VkClusterAccelerationStructureBuildTriangleClusterInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount:9; + uint32_t vertexCount:9; + uint32_t positionTruncateBitCount:6; + uint32_t indexType:4; + uint32_t opacityMicromapIndexType:4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; + VkDeviceAddress instantiationBoundingBoxLimit; +} VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + +typedef struct VkClusterAccelerationStructureInstantiateClusterInfoNV { + uint32_t clusterIdOffset; + uint32_t geometryIndexOffset:24; + uint32_t reserved:8; + VkDeviceAddress clusterTemplateAddress; + VkStridedDeviceAddressNV vertexBuffer; +} VkClusterAccelerationStructureInstantiateClusterInfoNV; + +typedef struct VkClusterAccelerationStructureGetTemplateIndicesInfoNV { + VkDeviceAddress clusterTemplateAddress; +} VkClusterAccelerationStructureGetTemplateIndicesInfoNV; + +typedef struct VkAccelerationStructureBuildSizesInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceSize accelerationStructureSize; + VkDeviceSize updateScratchSize; + VkDeviceSize buildScratchSize; +} VkAccelerationStructureBuildSizesInfoKHR; + +typedef struct VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV { + VkStructureType sType; + void* pNext; + VkBool32 allowClusterAccelerationStructure; +} VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetClusterAccelerationStructureBuildSizesNV)(VkDevice device, const VkClusterAccelerationStructureInputInfoNV* pInfo, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBuildClusterAccelerationStructureIndirectNV)(VkCommandBuffer commandBuffer, const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetClusterAccelerationStructureBuildSizesNV( + VkDevice device, + const VkClusterAccelerationStructureInputInfoNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildClusterAccelerationStructureIndirectNV( + VkCommandBuffer commandBuffer, + const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos); +#endif +#endif + + +// VK_NV_partitioned_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_partitioned_acceleration_structure 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_SPEC_VERSION 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_partitioned_acceleration_structure" +#define VK_PARTITIONED_ACCELERATION_STRUCTURE_PARTITION_INDEX_GLOBAL_NV (~0U) + +typedef enum VkPartitionedAccelerationStructureOpTypeNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_INSTANCE_NV = 0, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_UPDATE_INSTANCE_NV = 1, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_PARTITION_TRANSLATION_NV = 2, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureOpTypeNV; + +typedef enum VkPartitionedAccelerationStructureInstanceFlagBitsNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FACING_CULL_DISABLE_BIT_NV = 0x00000001, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FLIP_FACING_BIT_NV = 0x00000002, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_OPAQUE_BIT_NV = 0x00000004, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_NO_OPAQUE_BIT_NV = 0x00000008, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV = 0x00000010, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureInstanceFlagBitsNV; +typedef VkFlags VkPartitionedAccelerationStructureInstanceFlagsNV; +typedef struct VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 partitionedAccelerationStructure; +} VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV; + +typedef struct VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxPartitionCount; +} VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV; + +typedef struct VkPartitionedAccelerationStructureFlagsNV { + VkStructureType sType; + void* pNext; + VkBool32 enablePartitionTranslation; +} VkPartitionedAccelerationStructureFlagsNV; + +typedef struct VkBuildPartitionedAccelerationStructureIndirectCommandNV { + VkPartitionedAccelerationStructureOpTypeNV opType; + uint32_t argCount; + VkStridedDeviceAddressNV argData; +} VkBuildPartitionedAccelerationStructureIndirectCommandNV; + +typedef struct VkPartitionedAccelerationStructureWriteInstanceDataNV { + VkTransformMatrixKHR transform; + float explicitAABB[6]; + uint32_t instanceID; + uint32_t instanceMask; + uint32_t instanceContributionToHitGroupIndex; + VkPartitionedAccelerationStructureInstanceFlagsNV instanceFlags; + uint32_t instanceIndex; + uint32_t partitionIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureWriteInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureUpdateInstanceDataNV { + uint32_t instanceIndex; + uint32_t instanceContributionToHitGroupIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureUpdateInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureWritePartitionTranslationDataNV { + uint32_t partitionIndex; + float partitionTranslation[3]; +} VkPartitionedAccelerationStructureWritePartitionTranslationDataNV; + +typedef struct VkWriteDescriptorSetPartitionedAccelerationStructureNV { + VkStructureType sType; + void* pNext; + uint32_t accelerationStructureCount; + const VkDeviceAddress* pAccelerationStructures; +} VkWriteDescriptorSetPartitionedAccelerationStructureNV; + +typedef struct VkPartitionedAccelerationStructureInstancesInputNV { + VkStructureType sType; + void* pNext; + VkBuildAccelerationStructureFlagsKHR flags; + uint32_t instanceCount; + uint32_t maxInstancePerPartitionCount; + uint32_t partitionCount; + uint32_t maxInstanceInGlobalPartitionCount; +} VkPartitionedAccelerationStructureInstancesInputNV; + +typedef struct VkBuildPartitionedAccelerationStructureInfoNV { + VkStructureType sType; + void* pNext; + VkPartitionedAccelerationStructureInstancesInputNV input; + VkDeviceAddress srcAccelerationStructureData; + VkDeviceAddress dstAccelerationStructureData; + VkDeviceAddress scratchData; + VkDeviceAddress srcInfos; + VkDeviceAddress srcInfosCount; +} VkBuildPartitionedAccelerationStructureInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV)(VkDevice device, const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBuildPartitionedAccelerationStructuresNV)(VkCommandBuffer commandBuffer, const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPartitionedAccelerationStructuresBuildSizesNV( + VkDevice device, + const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildPartitionedAccelerationStructuresNV( + VkCommandBuffer commandBuffer, + const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo); +#endif +#endif + + +// VK_EXT_device_generated_commands is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_device_generated_commands 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectExecutionSetEXT) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutEXT) +#define VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1 +#define VK_EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_EXT_device_generated_commands" + +typedef enum VkIndirectExecutionSetInfoTypeEXT { + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT = 0, + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT = 1, + VK_INDIRECT_EXECUTION_SET_INFO_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectExecutionSetInfoTypeEXT; + +typedef enum VkIndirectCommandsTokenTypeEXT { + VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT = 0, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT = 1, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT = 2, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT = 3, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT = 4, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT = 5, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT = 6, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT = 7, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT = 8, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT = 9, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT = 1000202002, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT = 1000202003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT = 1000328001, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT = 1000386004, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsTokenTypeEXT; + +typedef enum VkIndirectCommandsInputModeFlagBitsEXT { + VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT = 0x00000001, + VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT = 0x00000002, + VK_INDIRECT_COMMANDS_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsInputModeFlagBitsEXT; +typedef VkFlags VkIndirectCommandsInputModeFlagsEXT; + +typedef enum VkIndirectCommandsLayoutUsageFlagBitsEXT { + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT = 0x00000001, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT = 0x00000002, + VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkIndirectCommandsLayoutUsageFlagBitsEXT; +typedef VkFlags VkIndirectCommandsLayoutUsageFlagsEXT; +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 deviceGeneratedCommands; + VkBool32 dynamicGeneratedPipelineLayout; +} VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + +typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxIndirectPipelineCount; + uint32_t maxIndirectShaderObjectCount; + uint32_t maxIndirectSequenceCount; + uint32_t maxIndirectCommandsTokenCount; + uint32_t maxIndirectCommandsTokenOffset; + uint32_t maxIndirectCommandsIndirectStride; + VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes; + VkShaderStageFlags supportedIndirectCommandsShaderStages; + VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding; + VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding; + VkBool32 deviceGeneratedCommandsTransformFeedback; + VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount; +} VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + +typedef struct VkGeneratedCommandsMemoryRequirementsInfoEXT { + VkStructureType sType; + const void* pNext; + VkIndirectExecutionSetEXT indirectExecutionSet; + VkIndirectCommandsLayoutEXT indirectCommandsLayout; + uint32_t maxSequenceCount; + uint32_t maxDrawCount; +} VkGeneratedCommandsMemoryRequirementsInfoEXT; + +typedef struct VkIndirectExecutionSetPipelineInfoEXT { + VkStructureType sType; + const void* pNext; + VkPipeline initialPipeline; + uint32_t maxPipelineCount; +} VkIndirectExecutionSetPipelineInfoEXT; + +typedef struct VkIndirectExecutionSetShaderLayoutInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t setLayoutCount; + const VkDescriptorSetLayout* pSetLayouts; +} VkIndirectExecutionSetShaderLayoutInfoEXT; + +typedef struct VkIndirectExecutionSetShaderInfoEXT { + VkStructureType sType; + const void* pNext; + uint32_t shaderCount; + const VkShaderEXT* pInitialShaders; + const VkIndirectExecutionSetShaderLayoutInfoEXT* pSetLayoutInfos; + uint32_t maxShaderCount; + uint32_t pushConstantRangeCount; + const VkPushConstantRange* pPushConstantRanges; +} VkIndirectExecutionSetShaderInfoEXT; + +typedef union VkIndirectExecutionSetInfoEXT { + const VkIndirectExecutionSetPipelineInfoEXT* pPipelineInfo; + const VkIndirectExecutionSetShaderInfoEXT* pShaderInfo; +} VkIndirectExecutionSetInfoEXT; + +typedef struct VkIndirectExecutionSetCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkIndirectExecutionSetInfoTypeEXT type; + VkIndirectExecutionSetInfoEXT info; +} VkIndirectExecutionSetCreateInfoEXT; + +typedef struct VkGeneratedCommandsInfoEXT { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags shaderStages; + VkIndirectExecutionSetEXT indirectExecutionSet; + VkIndirectCommandsLayoutEXT indirectCommandsLayout; + VkDeviceAddress indirectAddress; + VkDeviceSize indirectAddressSize; + VkDeviceAddress preprocessAddress; + VkDeviceSize preprocessSize; + uint32_t maxSequenceCount; + VkDeviceAddress sequenceCountAddress; + uint32_t maxDrawCount; +} VkGeneratedCommandsInfoEXT; + +typedef struct VkWriteIndirectExecutionSetPipelineEXT { + VkStructureType sType; + const void* pNext; + uint32_t index; + VkPipeline pipeline; +} VkWriteIndirectExecutionSetPipelineEXT; + +typedef struct VkIndirectCommandsPushConstantTokenEXT { + VkPushConstantRange updateRange; +} VkIndirectCommandsPushConstantTokenEXT; + +typedef struct VkIndirectCommandsVertexBufferTokenEXT { + uint32_t vertexBindingUnit; +} VkIndirectCommandsVertexBufferTokenEXT; + +typedef struct VkIndirectCommandsIndexBufferTokenEXT { + VkIndirectCommandsInputModeFlagBitsEXT mode; +} VkIndirectCommandsIndexBufferTokenEXT; + +typedef struct VkIndirectCommandsExecutionSetTokenEXT { + VkIndirectExecutionSetInfoTypeEXT type; + VkShaderStageFlags shaderStages; +} VkIndirectCommandsExecutionSetTokenEXT; + +typedef union VkIndirectCommandsTokenDataEXT { + const VkIndirectCommandsPushConstantTokenEXT* pPushConstant; + const VkIndirectCommandsVertexBufferTokenEXT* pVertexBuffer; + const VkIndirectCommandsIndexBufferTokenEXT* pIndexBuffer; + const VkIndirectCommandsExecutionSetTokenEXT* pExecutionSet; +} VkIndirectCommandsTokenDataEXT; + +typedef struct VkIndirectCommandsLayoutTokenEXT { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsTokenTypeEXT type; + VkIndirectCommandsTokenDataEXT data; + uint32_t offset; +} VkIndirectCommandsLayoutTokenEXT; + +typedef struct VkIndirectCommandsLayoutCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkIndirectCommandsLayoutUsageFlagsEXT flags; + VkShaderStageFlags shaderStages; + uint32_t indirectStride; + VkPipelineLayout pipelineLayout; + uint32_t tokenCount; + const VkIndirectCommandsLayoutTokenEXT* pTokens; +} VkIndirectCommandsLayoutCreateInfoEXT; + +typedef struct VkDrawIndirectCountIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t stride; + uint32_t commandCount; +} VkDrawIndirectCountIndirectCommandEXT; + +typedef struct VkBindVertexBufferIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t size; + uint32_t stride; +} VkBindVertexBufferIndirectCommandEXT; + +typedef struct VkBindIndexBufferIndirectCommandEXT { + VkDeviceAddress bufferAddress; + uint32_t size; + VkIndexType indexType; +} VkBindIndexBufferIndirectCommandEXT; + +typedef struct VkGeneratedCommandsPipelineInfoEXT { + VkStructureType sType; + void* pNext; + VkPipeline pipeline; +} VkGeneratedCommandsPipelineInfoEXT; + +typedef struct VkGeneratedCommandsShaderInfoEXT { + VkStructureType sType; + void* pNext; + uint32_t shaderCount; + const VkShaderEXT* pShaders; +} VkGeneratedCommandsShaderInfoEXT; + +typedef struct VkWriteIndirectExecutionSetShaderEXT { + VkStructureType sType; + const void* pNext; + uint32_t index; + VkShaderEXT shader; +} VkWriteIndirectExecutionSetShaderEXT; + +typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsEXT)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsEXT)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsEXT)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutEXT)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout); +typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutEXT)(VkDevice device, VkIndirectCommandsLayoutEXT indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectExecutionSetEXT)(VkDevice device, const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectExecutionSetEXT* pIndirectExecutionSet); +typedef void (VKAPI_PTR *PFN_vkDestroyIndirectExecutionSetEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkUpdateIndirectExecutionSetPipelineEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, uint32_t executionSetWriteCount, const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites); +typedef void (VKAPI_PTR *PFN_vkUpdateIndirectExecutionSetShaderEXT)(VkDevice device, VkIndirectExecutionSetEXT indirectExecutionSet, uint32_t executionSetWriteCount, const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsEXT( + VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo, + VkMemoryRequirements2* pMemoryRequirements); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsEXT( + VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, + VkCommandBuffer stateCommandBuffer); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsEXT( + VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutEXT( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutEXT( + VkDevice device, + VkIndirectCommandsLayoutEXT indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectExecutionSetEXT( + VkDevice device, + const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectExecutionSetEXT* pIndirectExecutionSet); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectExecutionSetEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUpdateIndirectExecutionSetPipelineEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkUpdateIndirectExecutionSetShaderEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites); +#endif +#endif + + +// VK_MESA_image_alignment_control is a preprocessor guard. Do not pass it to API calls. +#define VK_MESA_image_alignment_control 1 +#define VK_MESA_IMAGE_ALIGNMENT_CONTROL_SPEC_VERSION 1 +#define VK_MESA_IMAGE_ALIGNMENT_CONTROL_EXTENSION_NAME "VK_MESA_image_alignment_control" +typedef struct VkPhysicalDeviceImageAlignmentControlFeaturesMESA { + VkStructureType sType; + void* pNext; + VkBool32 imageAlignmentControl; +} VkPhysicalDeviceImageAlignmentControlFeaturesMESA; + +typedef struct VkPhysicalDeviceImageAlignmentControlPropertiesMESA { + VkStructureType sType; + void* pNext; + uint32_t supportedImageAlignmentMask; +} VkPhysicalDeviceImageAlignmentControlPropertiesMESA; + +typedef struct VkImageAlignmentControlCreateInfoMESA { + VkStructureType sType; + const void* pNext; + uint32_t maximumRequestedAlignment; +} VkImageAlignmentControlCreateInfoMESA; + + + +// VK_EXT_depth_clamp_control is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_depth_clamp_control 1 +#define VK_EXT_DEPTH_CLAMP_CONTROL_SPEC_VERSION 1 +#define VK_EXT_DEPTH_CLAMP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clamp_control" +typedef struct VkPhysicalDeviceDepthClampControlFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 depthClampControl; +} VkPhysicalDeviceDepthClampControlFeaturesEXT; + +typedef struct VkPipelineViewportDepthClampControlCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDepthClampModeEXT depthClampMode; + const VkDepthClampRangeEXT* pDepthClampRange; +} VkPipelineViewportDepthClampControlCreateInfoEXT; + + + +// VK_HUAWEI_hdr_vivid is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_hdr_vivid 1 +#define VK_HUAWEI_HDR_VIVID_SPEC_VERSION 1 +#define VK_HUAWEI_HDR_VIVID_EXTENSION_NAME "VK_HUAWEI_hdr_vivid" +typedef struct VkPhysicalDeviceHdrVividFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 hdrVivid; +} VkPhysicalDeviceHdrVividFeaturesHUAWEI; + +typedef struct VkHdrVividDynamicMetadataHUAWEI { + VkStructureType sType; + const void* pNext; + size_t dynamicMetadataSize; + const void* pDynamicMetadata; +} VkHdrVividDynamicMetadataHUAWEI; + + + +// VK_NV_cooperative_matrix2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_matrix2 1 +#define VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME "VK_NV_cooperative_matrix2" +typedef struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t MGranularity; + uint32_t NGranularity; + uint32_t KGranularity; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; + uint32_t workgroupInvocations; +} VkCooperativeMatrixFlexibleDimensionsPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrixWorkgroupScope; + VkBool32 cooperativeMatrixFlexibleDimensions; + VkBool32 cooperativeMatrixReductions; + VkBool32 cooperativeMatrixConversions; + VkBool32 cooperativeMatrixPerElementOperations; + VkBool32 cooperativeMatrixTensorAddressing; + VkBool32 cooperativeMatrixBlockLoads; +} VkPhysicalDeviceCooperativeMatrix2FeaturesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize; + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension; + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory; +} VkPhysicalDeviceCooperativeMatrix2PropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties); +#endif +#endif + + +// VK_ARM_pipeline_opacity_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_pipeline_opacity_micromap 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_SPEC_VERSION 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_EXTENSION_NAME "VK_ARM_pipeline_opacity_micromap" +typedef struct VkPhysicalDevicePipelineOpacityMicromapFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 pipelineOpacityMicromap; +} VkPhysicalDevicePipelineOpacityMicromapFeaturesARM; + + + +// VK_EXT_vertex_attribute_robustness is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_vertex_attribute_robustness 1 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_vertex_attribute_robustness" +typedef struct VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 vertexAttributeRobustness; +} VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + + + +// VK_ARM_format_pack is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_format_pack 1 +#define VK_ARM_FORMAT_PACK_SPEC_VERSION 1 +#define VK_ARM_FORMAT_PACK_EXTENSION_NAME "VK_ARM_format_pack" +typedef struct VkPhysicalDeviceFormatPackFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 formatPack; +} VkPhysicalDeviceFormatPackFeaturesARM; + + + +// VK_VALVE_fragment_density_map_layered is a preprocessor guard. Do not pass it to API calls. +#define VK_VALVE_fragment_density_map_layered 1 +#define VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_SPEC_VERSION 1 +#define VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_EXTENSION_NAME "VK_VALVE_fragment_density_map_layered" +typedef struct VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE { + VkStructureType sType; + void* pNext; + VkBool32 fragmentDensityMapLayered; +} VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + +typedef struct VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE { + VkStructureType sType; + void* pNext; + uint32_t maxFragmentDensityMapLayers; +} VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + +typedef struct VkPipelineFragmentDensityMapLayeredCreateInfoVALVE { + VkStructureType sType; + const void* pNext; + uint32_t maxFragmentDensityMapLayers; +} VkPipelineFragmentDensityMapLayeredCreateInfoVALVE; + + + +// VK_NV_present_metering is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_present_metering 1 +#define VK_NV_PRESENT_METERING_SPEC_VERSION 1 +#define VK_NV_PRESENT_METERING_EXTENSION_NAME "VK_NV_present_metering" +typedef struct VkSetPresentConfigNV { + VkStructureType sType; + const void* pNext; + uint32_t numFramesPerBatch; + uint32_t presentConfigFeedback; +} VkSetPresentConfigNV; + +typedef struct VkPhysicalDevicePresentMeteringFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 presentMetering; +} VkPhysicalDevicePresentMeteringFeaturesNV; + + + +// VK_EXT_fragment_density_map_offset is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map_offset 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_EXT_fragment_density_map_offset" +typedef struct VkRenderingEndInfoEXT { + VkStructureType sType; + const void* pNext; +} VkRenderingEndInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdEndRendering2EXT)(VkCommandBuffer commandBuffer, const VkRenderingEndInfoEXT* pRenderingEndInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT( + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoEXT* pRenderingEndInfo); +#endif +#endif + + +// VK_EXT_zero_initialize_device_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_zero_initialize_device_memory 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_SPEC_VERSION 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME "VK_EXT_zero_initialize_device_memory" +typedef struct VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 zeroInitializeDeviceMemory; +} VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + + + +// VK_SEC_pipeline_cache_incremental_mode is a preprocessor guard. Do not pass it to API calls. +#define VK_SEC_pipeline_cache_incremental_mode 1 +#define VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_SPEC_VERSION 1 +#define VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_EXTENSION_NAME "VK_SEC_pipeline_cache_incremental_mode" +typedef struct VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC { + VkStructureType sType; + void* pNext; + VkBool32 pipelineCacheIncrementalMode; +} VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + + + +// VK_KHR_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_acceleration_structure 1 +#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13 +#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure" + +typedef enum VkBuildAccelerationStructureModeKHR { + VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1, + VK_BUILD_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkBuildAccelerationStructureModeKHR; + +typedef enum VkAccelerationStructureCreateFlagBitsKHR { + VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 0x00000001, + VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008, + VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV = 0x00000004, + VK_ACCELERATION_STRUCTURE_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkAccelerationStructureCreateFlagBitsKHR; +typedef VkFlags VkAccelerationStructureCreateFlagsKHR; +typedef struct VkAccelerationStructureBuildRangeInfoKHR { + uint32_t primitiveCount; + uint32_t primitiveOffset; + uint32_t firstVertex; + uint32_t transformOffset; +} VkAccelerationStructureBuildRangeInfoKHR; + +typedef struct VkAccelerationStructureGeometryTrianglesDataKHR { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + uint32_t maxVertex; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceOrHostAddressConstKHR transformData; +} VkAccelerationStructureGeometryTrianglesDataKHR; + +typedef struct VkAccelerationStructureGeometryAabbsDataKHR { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR data; + VkDeviceSize stride; +} VkAccelerationStructureGeometryAabbsDataKHR; + +typedef struct VkAccelerationStructureGeometryInstancesDataKHR { + VkStructureType sType; + const void* pNext; + VkBool32 arrayOfPointers; + VkDeviceOrHostAddressConstKHR data; +} VkAccelerationStructureGeometryInstancesDataKHR; + +typedef union VkAccelerationStructureGeometryDataKHR { + VkAccelerationStructureGeometryTrianglesDataKHR triangles; + VkAccelerationStructureGeometryAabbsDataKHR aabbs; + VkAccelerationStructureGeometryInstancesDataKHR instances; +} VkAccelerationStructureGeometryDataKHR; + +typedef struct VkAccelerationStructureGeometryKHR { + VkStructureType sType; + const void* pNext; + VkGeometryTypeKHR geometryType; + VkAccelerationStructureGeometryDataKHR geometry; + VkGeometryFlagsKHR flags; +} VkAccelerationStructureGeometryKHR; + +typedef struct VkAccelerationStructureBuildGeometryInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureTypeKHR type; + VkBuildAccelerationStructureFlagsKHR flags; + VkBuildAccelerationStructureModeKHR mode; + VkAccelerationStructureKHR srcAccelerationStructure; + VkAccelerationStructureKHR dstAccelerationStructure; + uint32_t geometryCount; + const VkAccelerationStructureGeometryKHR* pGeometries; + const VkAccelerationStructureGeometryKHR* const* ppGeometries; + VkDeviceOrHostAddressKHR scratchData; +} VkAccelerationStructureBuildGeometryInfoKHR; + +typedef struct VkAccelerationStructureCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureCreateFlagsKHR createFlags; + VkBuffer buffer; + VkDeviceSize offset; + VkDeviceSize size; + VkAccelerationStructureTypeKHR type; + VkDeviceAddress deviceAddress; +} VkAccelerationStructureCreateInfoKHR; + +typedef struct VkWriteDescriptorSetAccelerationStructureKHR { + VkStructureType sType; + const void* pNext; + uint32_t accelerationStructureCount; + const VkAccelerationStructureKHR* pAccelerationStructures; +} VkWriteDescriptorSetAccelerationStructureKHR; + +typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 accelerationStructure; + VkBool32 accelerationStructureCaptureReplay; + VkBool32 accelerationStructureIndirectBuild; + VkBool32 accelerationStructureHostCommands; + VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind; +} VkPhysicalDeviceAccelerationStructureFeaturesKHR; + +typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR { + VkStructureType sType; + void* pNext; + uint64_t maxGeometryCount; + uint64_t maxInstanceCount; + uint64_t maxPrimitiveCount; + uint32_t maxPerStageDescriptorAccelerationStructures; + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures; + uint32_t maxDescriptorSetAccelerationStructures; + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures; + uint32_t minAccelerationStructureScratchOffsetAlignment; +} VkPhysicalDeviceAccelerationStructurePropertiesKHR; + +typedef struct VkAccelerationStructureDeviceAddressInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR accelerationStructure; +} VkAccelerationStructureDeviceAddressInfoKHR; + +typedef struct VkAccelerationStructureVersionInfoKHR { + VkStructureType sType; + const void* pNext; + const uint8_t* pVersionData; +} VkAccelerationStructureVersionInfoKHR; + +typedef struct VkCopyAccelerationStructureToMemoryInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR src; + VkDeviceOrHostAddressKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureToMemoryInfoKHR; + +typedef struct VkCopyMemoryToAccelerationStructureInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceOrHostAddressConstKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyMemoryToAccelerationStructureInfoKHR; + +typedef struct VkCopyAccelerationStructureInfoKHR { + VkStructureType sType; + const void* pNext; + VkAccelerationStructureKHR src; + VkAccelerationStructureKHR dst; + VkCopyAccelerationStructureModeKHR mode; +} VkCopyAccelerationStructureInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure); +typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress* pIndirectDeviceAddresses, const uint32_t* pIndirectStrides, const uint32_t* const* ppMaxPrimitiveCounts); +typedef VkResult (VKAPI_PTR *PFN_vkBuildAccelerationStructuresKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +typedef VkResult (VKAPI_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); +typedef void (VKAPI_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionInfoKHR* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); +typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureBuildSizesKHR)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR( + VkDevice device, + const VkAccelerationStructureCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureKHR* pAccelerationStructure); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureKHR( + VkDevice device, + VkAccelerationStructureKHR accelerationStructure, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresKHR( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresIndirectKHR( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkDeviceAddress* pIndirectDeviceAddresses, + const uint32_t* pIndirectStrides, + const uint32_t* const* ppMaxPrimitiveCounts); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkBuildAccelerationStructuresKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureToMemoryKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToAccelerationStructureKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWriteAccelerationStructuresPropertiesKHR( + VkDevice device, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR* pAccelerationStructures, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureKHR( + VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureToMemoryKHR( + VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToAccelerationStructureKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetAccelerationStructureDeviceAddressKHR( + VkDevice device, + const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesKHR( + VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetDeviceAccelerationStructureCompatibilityKHR( + VkDevice device, + const VkAccelerationStructureVersionInfoKHR* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureBuildSizesKHR( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, + const uint32_t* pMaxPrimitiveCounts, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +#endif +#endif + + +// VK_KHR_ray_tracing_pipeline is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_tracing_pipeline 1 +#define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1 +#define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline" + +typedef enum VkShaderGroupShaderKHR { + VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0, + VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1, + VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2, + VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3, + VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR = 0x7FFFFFFF +} VkShaderGroupShaderKHR; +typedef struct VkRayTracingShaderGroupCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkRayTracingShaderGroupTypeKHR type; + uint32_t generalShader; + uint32_t closestHitShader; + uint32_t anyHitShader; + uint32_t intersectionShader; + const void* pShaderGroupCaptureReplayHandle; +} VkRayTracingShaderGroupCreateInfoKHR; + +typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t maxPipelineRayPayloadSize; + uint32_t maxPipelineRayHitAttributeSize; +} VkRayTracingPipelineInterfaceCreateInfoKHR; + +typedef struct VkRayTracingPipelineCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags flags; + uint32_t stageCount; + const VkPipelineShaderStageCreateInfo* pStages; + uint32_t groupCount; + const VkRayTracingShaderGroupCreateInfoKHR* pGroups; + uint32_t maxPipelineRayRecursionDepth; + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; + const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface; + const VkPipelineDynamicStateCreateInfo* pDynamicState; + VkPipelineLayout layout; + VkPipeline basePipelineHandle; + int32_t basePipelineIndex; +} VkRayTracingPipelineCreateInfoKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayTracingPipeline; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay; + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed; + VkBool32 rayTracingPipelineTraceRaysIndirect; + VkBool32 rayTraversalPrimitiveCulling; +} VkPhysicalDeviceRayTracingPipelineFeaturesKHR; + +typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t shaderGroupHandleSize; + uint32_t maxRayRecursionDepth; + uint32_t maxShaderGroupStride; + uint32_t shaderGroupBaseAlignment; + uint32_t shaderGroupHandleCaptureReplaySize; + uint32_t maxRayDispatchInvocationCount; + uint32_t shaderGroupHandleAlignment; + uint32_t maxRayHitAttributeSize; +} VkPhysicalDeviceRayTracingPipelinePropertiesKHR; + +typedef struct VkTraceRaysIndirectCommandKHR { + uint32_t width; + uint32_t height; + uint32_t depth; +} VkTraceRaysIndirectCommandKHR; + +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); +typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); +typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress); +typedef VkDeviceSize (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupStackSizeKHR)(VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader); +typedef void (VKAPI_PTR *PFN_vkCmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysKHR( + VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirectKHR( + VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkDeviceSize VKAPI_CALL vkGetRayTracingShaderGroupStackSizeKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t group, + VkShaderGroupShaderKHR groupShader); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetRayTracingPipelineStackSizeKHR( + VkCommandBuffer commandBuffer, + uint32_t pipelineStackSize); +#endif +#endif + + +// VK_KHR_ray_query is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_ray_query 1 +#define VK_KHR_RAY_QUERY_SPEC_VERSION 1 +#define VK_KHR_RAY_QUERY_EXTENSION_NAME "VK_KHR_ray_query" +typedef struct VkPhysicalDeviceRayQueryFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 rayQuery; +} VkPhysicalDeviceRayQueryFeaturesKHR; + + + +// VK_EXT_mesh_shader is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_mesh_shader 1 +#define VK_EXT_MESH_SHADER_SPEC_VERSION 1 +#define VK_EXT_MESH_SHADER_EXTENSION_NAME "VK_EXT_mesh_shader" +typedef struct VkPhysicalDeviceMeshShaderFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 taskShader; + VkBool32 meshShader; + VkBool32 multiviewMeshShader; + VkBool32 primitiveFragmentShadingRateMeshShader; + VkBool32 meshShaderQueries; +} VkPhysicalDeviceMeshShaderFeaturesEXT; + +typedef struct VkPhysicalDeviceMeshShaderPropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t maxTaskWorkGroupTotalCount; + uint32_t maxTaskWorkGroupCount[3]; + uint32_t maxTaskWorkGroupInvocations; + uint32_t maxTaskWorkGroupSize[3]; + uint32_t maxTaskPayloadSize; + uint32_t maxTaskSharedMemorySize; + uint32_t maxTaskPayloadAndSharedMemorySize; + uint32_t maxMeshWorkGroupTotalCount; + uint32_t maxMeshWorkGroupCount[3]; + uint32_t maxMeshWorkGroupInvocations; + uint32_t maxMeshWorkGroupSize[3]; + uint32_t maxMeshSharedMemorySize; + uint32_t maxMeshPayloadAndSharedMemorySize; + uint32_t maxMeshOutputMemorySize; + uint32_t maxMeshPayloadAndOutputMemorySize; + uint32_t maxMeshOutputComponents; + uint32_t maxMeshOutputVertices; + uint32_t maxMeshOutputPrimitives; + uint32_t maxMeshOutputLayers; + uint32_t maxMeshMultiviewViewCount; + uint32_t meshOutputPerVertexGranularity; + uint32_t meshOutputPerPrimitiveGranularity; + uint32_t maxPreferredTaskWorkGroupInvocations; + uint32_t maxPreferredMeshWorkGroupInvocations; + VkBool32 prefersLocalInvocationVertexOutput; + VkBool32 prefersLocalInvocationPrimitiveOutput; + VkBool32 prefersCompactVertexOutput; + VkBool32 prefersCompactPrimitiveOutput; +} VkPhysicalDeviceMeshShaderPropertiesEXT; + +typedef struct VkDrawMeshTasksIndirectCommandEXT { + uint32_t groupCountX; + uint32_t groupCountY; + uint32_t groupCountZ; +} VkDrawMeshTasksIndirectCommandEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksEXT)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectEXT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); +typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountEXT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksEXT( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectEXT( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountEXT( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_directfb.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_directfb.h new file mode 100644 index 0000000000..bb1567692e --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_directfb.h @@ -0,0 +1,59 @@ +#ifndef VULKAN_DIRECTFB_H_ +#define VULKAN_DIRECTFB_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_EXT_directfb_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_directfb_surface 1 +#define VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION 1 +#define VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME "VK_EXT_directfb_surface" +typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; +typedef struct VkDirectFBSurfaceCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkDirectFBSurfaceCreateFlagsEXT flags; + IDirectFB* dfb; + IDirectFBSurface* surface; +} VkDirectFBSurfaceCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( + VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + IDirectFB* dfb); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_enums.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_enums.hpp new file mode 100644 index 0000000000..14f0f65db3 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_enums.hpp @@ -0,0 +1,9328 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_ENUMS_HPP +#define VULKAN_ENUMS_HPP + +// include-what-you-use: make sure, vulkan.hpp is used by code-completers +// IWYU pragma: private; include "vulkan.hpp" + +#include // for std::underlying_type + +namespace VULKAN_HPP_NAMESPACE +{ + template + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = false; + }; + + template + class Flags + { + public: + using BitsType = BitType; + using MaskType = typename std::underlying_type::type; + + // constructors + VULKAN_HPP_CONSTEXPR Flags() VULKAN_HPP_NOEXCEPT : m_mask( 0 ) {} + + VULKAN_HPP_CONSTEXPR Flags( BitType bit ) VULKAN_HPP_NOEXCEPT : m_mask( static_cast( bit ) ) {} + + VULKAN_HPP_CONSTEXPR Flags( Flags const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VULKAN_HPP_CONSTEXPR explicit Flags( MaskType flags ) VULKAN_HPP_NOEXCEPT : m_mask( flags ) {} + + // relational operators +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Flags const & ) const = default; +#else + VULKAN_HPP_CONSTEXPR bool operator<( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return m_mask < rhs.m_mask; + } + + VULKAN_HPP_CONSTEXPR bool operator<=( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return m_mask <= rhs.m_mask; + } + + VULKAN_HPP_CONSTEXPR bool operator>( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return m_mask > rhs.m_mask; + } + + VULKAN_HPP_CONSTEXPR bool operator>=( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return m_mask >= rhs.m_mask; + } + + VULKAN_HPP_CONSTEXPR bool operator==( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return m_mask == rhs.m_mask; + } + + VULKAN_HPP_CONSTEXPR bool operator!=( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return m_mask != rhs.m_mask; + } +#endif + + // logical operator + VULKAN_HPP_CONSTEXPR bool operator!() const VULKAN_HPP_NOEXCEPT + { + return !m_mask; + } + + // bitwise operators + VULKAN_HPP_CONSTEXPR Flags operator&( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return Flags( m_mask & rhs.m_mask ); + } + + VULKAN_HPP_CONSTEXPR Flags operator|( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return Flags( m_mask | rhs.m_mask ); + } + + VULKAN_HPP_CONSTEXPR Flags operator^( Flags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return Flags( m_mask ^ rhs.m_mask ); + } + + VULKAN_HPP_CONSTEXPR Flags operator~() const VULKAN_HPP_NOEXCEPT + { + return Flags( m_mask ^ FlagTraits::allFlags.m_mask ); + } + + // assignment operators + VULKAN_HPP_CONSTEXPR_14 Flags & operator=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VULKAN_HPP_CONSTEXPR_14 Flags & operator|=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT + { + m_mask |= rhs.m_mask; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Flags & operator&=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT + { + m_mask &= rhs.m_mask; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Flags & operator^=( Flags const & rhs ) VULKAN_HPP_NOEXCEPT + { + m_mask ^= rhs.m_mask; + return *this; + } + + // cast operators + explicit VULKAN_HPP_CONSTEXPR operator bool() const VULKAN_HPP_NOEXCEPT + { + return !!m_mask; + } + + explicit VULKAN_HPP_CONSTEXPR operator MaskType() const VULKAN_HPP_NOEXCEPT + { + return m_mask; + } + +#if defined( VULKAN_HPP_FLAGS_MASK_TYPE_AS_PUBLIC ) + public: +#else + private: +#endif + MaskType m_mask; + }; + +#if !defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + // relational operators only needed for pre C++20 + template + VULKAN_HPP_CONSTEXPR bool operator<( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator>( bit ); + } + + template + VULKAN_HPP_CONSTEXPR bool operator<=( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator>=( bit ); + } + + template + VULKAN_HPP_CONSTEXPR bool operator>( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator<( bit ); + } + + template + VULKAN_HPP_CONSTEXPR bool operator>=( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator<=( bit ); + } + + template + VULKAN_HPP_CONSTEXPR bool operator==( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator==( bit ); + } + + template + VULKAN_HPP_CONSTEXPR bool operator!=( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator!=( bit ); + } +#endif + + // bitwise operators + template + VULKAN_HPP_CONSTEXPR Flags operator&( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator&( bit ); + } + + template + VULKAN_HPP_CONSTEXPR Flags operator|( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator|( bit ); + } + + template + VULKAN_HPP_CONSTEXPR Flags operator^( BitType bit, Flags const & flags ) VULKAN_HPP_NOEXCEPT + { + return flags.operator^( bit ); + } + + // bitwise operators on BitType + template ::isBitmask, bool>::type = true> + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR Flags operator&( BitType lhs, BitType rhs ) VULKAN_HPP_NOEXCEPT + { + return Flags( lhs ) & rhs; + } + + template ::isBitmask, bool>::type = true> + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR Flags operator|( BitType lhs, BitType rhs ) VULKAN_HPP_NOEXCEPT + { + return Flags( lhs ) | rhs; + } + + template ::isBitmask, bool>::type = true> + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR Flags operator^( BitType lhs, BitType rhs ) VULKAN_HPP_NOEXCEPT + { + return Flags( lhs ) ^ rhs; + } + + template ::isBitmask, bool>::type = true> + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR Flags operator~( BitType bit ) VULKAN_HPP_NOEXCEPT + { + return ~( Flags( bit ) ); + } + + //============= + //=== ENUMs === + //============= + + //=== VK_VERSION_1_0 === + + // wrapper class for enum VkResult, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkResult.html + enum class Result + { + eSuccess = VK_SUCCESS, + eNotReady = VK_NOT_READY, + eTimeout = VK_TIMEOUT, + eEventSet = VK_EVENT_SET, + eEventReset = VK_EVENT_RESET, + eIncomplete = VK_INCOMPLETE, + eErrorOutOfHostMemory = VK_ERROR_OUT_OF_HOST_MEMORY, + eErrorOutOfDeviceMemory = VK_ERROR_OUT_OF_DEVICE_MEMORY, + eErrorInitializationFailed = VK_ERROR_INITIALIZATION_FAILED, + eErrorDeviceLost = VK_ERROR_DEVICE_LOST, + eErrorMemoryMapFailed = VK_ERROR_MEMORY_MAP_FAILED, + eErrorLayerNotPresent = VK_ERROR_LAYER_NOT_PRESENT, + eErrorExtensionNotPresent = VK_ERROR_EXTENSION_NOT_PRESENT, + eErrorFeatureNotPresent = VK_ERROR_FEATURE_NOT_PRESENT, + eErrorIncompatibleDriver = VK_ERROR_INCOMPATIBLE_DRIVER, + eErrorTooManyObjects = VK_ERROR_TOO_MANY_OBJECTS, + eErrorFormatNotSupported = VK_ERROR_FORMAT_NOT_SUPPORTED, + eErrorFragmentedPool = VK_ERROR_FRAGMENTED_POOL, + eErrorUnknown = VK_ERROR_UNKNOWN, + eErrorOutOfPoolMemory = VK_ERROR_OUT_OF_POOL_MEMORY, + eErrorOutOfPoolMemoryKHR = VK_ERROR_OUT_OF_POOL_MEMORY_KHR, + eErrorInvalidExternalHandle = VK_ERROR_INVALID_EXTERNAL_HANDLE, + eErrorInvalidExternalHandleKHR = VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR, + eErrorFragmentation = VK_ERROR_FRAGMENTATION, + eErrorFragmentationEXT = VK_ERROR_FRAGMENTATION_EXT, + eErrorInvalidOpaqueCaptureAddress = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, + eErrorInvalidDeviceAddressEXT = VK_ERROR_INVALID_DEVICE_ADDRESS_EXT, + eErrorInvalidOpaqueCaptureAddressKHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR, + ePipelineCompileRequired = VK_PIPELINE_COMPILE_REQUIRED, + ePipelineCompileRequiredEXT = VK_PIPELINE_COMPILE_REQUIRED_EXT, + eErrorPipelineCompileRequiredEXT = VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT, + eErrorNotPermitted = VK_ERROR_NOT_PERMITTED, + eErrorNotPermittedEXT = VK_ERROR_NOT_PERMITTED_EXT, + eErrorNotPermittedKHR = VK_ERROR_NOT_PERMITTED_KHR, + eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR, + eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, + eSuboptimalKHR = VK_SUBOPTIMAL_KHR, + eErrorOutOfDateKHR = VK_ERROR_OUT_OF_DATE_KHR, + eErrorIncompatibleDisplayKHR = VK_ERROR_INCOMPATIBLE_DISPLAY_KHR, + eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT, + eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV, + eErrorImageUsageNotSupportedKHR = VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR, + eErrorVideoPictureLayoutNotSupportedKHR = VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR, + eErrorVideoProfileOperationNotSupportedKHR = VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR, + eErrorVideoProfileFormatNotSupportedKHR = VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR, + eErrorVideoProfileCodecNotSupportedKHR = VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR, + eErrorVideoStdVersionNotSupportedKHR = VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR, + eErrorInvalidDrmFormatModifierPlaneLayoutEXT = VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eErrorFullScreenExclusiveModeLostEXT = VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eThreadIdleKHR = VK_THREAD_IDLE_KHR, + eThreadDoneKHR = VK_THREAD_DONE_KHR, + eOperationDeferredKHR = VK_OPERATION_DEFERRED_KHR, + eOperationNotDeferredKHR = VK_OPERATION_NOT_DEFERRED_KHR, + eErrorInvalidVideoStdParametersKHR = VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR, + eErrorCompressionExhaustedEXT = VK_ERROR_COMPRESSION_EXHAUSTED_EXT, + eIncompatibleShaderBinaryEXT = VK_INCOMPATIBLE_SHADER_BINARY_EXT, + eErrorIncompatibleShaderBinaryEXT = VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT, + ePipelineBinaryMissingKHR = VK_PIPELINE_BINARY_MISSING_KHR, + eErrorNotEnoughSpaceKHR = VK_ERROR_NOT_ENOUGH_SPACE_KHR + }; + + // wrapper class for enum VkStructureType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkStructureType.html + enum class StructureType + { + eApplicationInfo = VK_STRUCTURE_TYPE_APPLICATION_INFO, + eInstanceCreateInfo = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + eDeviceQueueCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, + eDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, + eSubmitInfo = VK_STRUCTURE_TYPE_SUBMIT_INFO, + eMemoryAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, + eMappedMemoryRange = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, + eBindSparseInfo = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO, + eFenceCreateInfo = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, + eSemaphoreCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, + eEventCreateInfo = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO, + eQueryPoolCreateInfo = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, + eBufferCreateInfo = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, + eBufferViewCreateInfo = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO, + eImageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, + eImageViewCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + eShaderModuleCreateInfo = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, + ePipelineCacheCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, + ePipelineShaderStageCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + ePipelineVertexInputStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, + ePipelineInputAssemblyStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, + ePipelineTessellationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO, + ePipelineViewportStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, + ePipelineRasterizationStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, + ePipelineMultisampleStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, + ePipelineDepthStencilStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, + ePipelineColorBlendStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, + ePipelineDynamicStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, + eGraphicsPipelineCreateInfo = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, + eComputePipelineCreateInfo = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, + ePipelineLayoutCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, + eSamplerCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, + eDescriptorSetLayoutCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, + eDescriptorPoolCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, + eDescriptorSetAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, + eWriteDescriptorSet = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + eCopyDescriptorSet = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET, + eFramebufferCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, + eRenderPassCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, + eCommandPoolCreateInfo = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, + eCommandBufferAllocateInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, + eCommandBufferInheritanceInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO, + eCommandBufferBeginInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, + eRenderPassBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, + eBufferMemoryBarrier = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + eImageMemoryBarrier = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, + eMemoryBarrier = VK_STRUCTURE_TYPE_MEMORY_BARRIER, + eLoaderInstanceCreateInfo = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO, + eLoaderDeviceCreateInfo = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, + ePhysicalDeviceSubgroupProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES, + eBindBufferMemoryInfo = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, + eBindBufferMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR, + eBindImageMemoryInfo = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, + eBindImageMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR, + ePhysicalDevice16BitStorageFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, + ePhysicalDevice16BitStorageFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, + eMemoryDedicatedRequirements = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, + eMemoryDedicatedRequirementsKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR, + eMemoryDedicatedAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, + eMemoryDedicatedAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR, + eMemoryAllocateFlagsInfo = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, + eMemoryAllocateFlagsInfoKHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR, + eDeviceGroupRenderPassBeginInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, + eDeviceGroupRenderPassBeginInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR, + eDeviceGroupCommandBufferBeginInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, + eDeviceGroupCommandBufferBeginInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR, + eDeviceGroupSubmitInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, + eDeviceGroupSubmitInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR, + eDeviceGroupBindSparseInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, + eDeviceGroupBindSparseInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR, + eBindBufferMemoryDeviceGroupInfo = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, + eBindBufferMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR, + eBindImageMemoryDeviceGroupInfo = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, + eBindImageMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR, + ePhysicalDeviceGroupProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, + ePhysicalDeviceGroupPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR, + eDeviceGroupDeviceCreateInfo = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, + eDeviceGroupDeviceCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR, + eBufferMemoryRequirementsInfo2 = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, + eBufferMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR, + eImageMemoryRequirementsInfo2 = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, + eImageMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR, + eImageSparseMemoryRequirementsInfo2 = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, + eImageSparseMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR, + eMemoryRequirements2 = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, + eMemoryRequirements2KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR, + eSparseImageMemoryRequirements2 = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, + eSparseImageMemoryRequirements2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR, + ePhysicalDeviceFeatures2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, + ePhysicalDeviceFeatures2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, + ePhysicalDeviceProperties2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, + ePhysicalDeviceProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, + eFormatProperties2 = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, + eFormatProperties2KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR, + eImageFormatProperties2 = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, + eImageFormatProperties2KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR, + ePhysicalDeviceImageFormatInfo2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, + ePhysicalDeviceImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR, + eQueueFamilyProperties2 = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, + eQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR, + ePhysicalDeviceMemoryProperties2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, + ePhysicalDeviceMemoryProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR, + eSparseImageFormatProperties2 = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, + eSparseImageFormatProperties2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR, + ePhysicalDeviceSparseImageFormatInfo2 = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, + ePhysicalDeviceSparseImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR, + ePhysicalDevicePointClippingProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, + ePhysicalDevicePointClippingPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR, + eRenderPassInputAttachmentAspectCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, + eRenderPassInputAttachmentAspectCreateInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR, + eImageViewUsageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, + eImageViewUsageCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR, + ePipelineTessellationDomainOriginStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, + ePipelineTessellationDomainOriginStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR, + eRenderPassMultiviewCreateInfo = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, + eRenderPassMultiviewCreateInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR, + ePhysicalDeviceMultiviewFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, + ePhysicalDeviceMultiviewFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, + ePhysicalDeviceMultiviewProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, + ePhysicalDeviceMultiviewPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR, + ePhysicalDeviceVariablePointersFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, + ePhysicalDeviceVariablePointerFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES, + ePhysicalDeviceVariablePointersFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, + ePhysicalDeviceVariablePointerFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR, + eProtectedSubmitInfo = VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO, + ePhysicalDeviceProtectedMemoryFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, + ePhysicalDeviceProtectedMemoryProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES, + eDeviceQueueInfo2 = VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2, + eSamplerYcbcrConversionCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, + eSamplerYcbcrConversionCreateInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR, + eSamplerYcbcrConversionInfo = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, + eSamplerYcbcrConversionInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR, + eBindImagePlaneMemoryInfo = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, + eBindImagePlaneMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR, + eImagePlaneMemoryRequirementsInfo = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, + eImagePlaneMemoryRequirementsInfoKHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR, + ePhysicalDeviceSamplerYcbcrConversionFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, + ePhysicalDeviceSamplerYcbcrConversionFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR, + eSamplerYcbcrConversionImageFormatProperties = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, + eSamplerYcbcrConversionImageFormatPropertiesKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR, + eDescriptorUpdateTemplateCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, + eDescriptorUpdateTemplateCreateInfoKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR, + ePhysicalDeviceExternalImageFormatInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, + ePhysicalDeviceExternalImageFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR, + eExternalImageFormatProperties = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, + eExternalImageFormatPropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR, + ePhysicalDeviceExternalBufferInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, + ePhysicalDeviceExternalBufferInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR, + eExternalBufferProperties = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, + eExternalBufferPropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR, + ePhysicalDeviceIdProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, + ePhysicalDeviceIdPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR, + eExternalMemoryBufferCreateInfo = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, + eExternalMemoryBufferCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR, + eExternalMemoryImageCreateInfo = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, + eExternalMemoryImageCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR, + eExportMemoryAllocateInfo = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, + eExportMemoryAllocateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR, + ePhysicalDeviceExternalFenceInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, + ePhysicalDeviceExternalFenceInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR, + eExternalFenceProperties = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, + eExternalFencePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR, + eExportFenceCreateInfo = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, + eExportFenceCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR, + eExportSemaphoreCreateInfo = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, + eExportSemaphoreCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR, + ePhysicalDeviceExternalSemaphoreInfo = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, + ePhysicalDeviceExternalSemaphoreInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR, + eExternalSemaphoreProperties = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, + eExternalSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR, + ePhysicalDeviceMaintenance3Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, + ePhysicalDeviceMaintenance3PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR, + eDescriptorSetLayoutSupport = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, + eDescriptorSetLayoutSupportKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR, + ePhysicalDeviceShaderDrawParametersFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, + ePhysicalDeviceShaderDrawParameterFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES, + ePhysicalDeviceVulkan11Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, + ePhysicalDeviceVulkan11Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, + ePhysicalDeviceVulkan12Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, + ePhysicalDeviceVulkan12Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, + eImageFormatListCreateInfo = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, + eImageFormatListCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR, + eAttachmentDescription2 = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, + eAttachmentDescription2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR, + eAttachmentReference2 = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, + eAttachmentReference2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR, + eSubpassDescription2 = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, + eSubpassDescription2KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR, + eSubpassDependency2 = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, + eSubpassDependency2KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR, + eRenderPassCreateInfo2 = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, + eRenderPassCreateInfo2KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR, + eSubpassBeginInfo = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, + eSubpassBeginInfoKHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR, + eSubpassEndInfo = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, + eSubpassEndInfoKHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR, + ePhysicalDevice8BitStorageFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, + ePhysicalDevice8BitStorageFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, + ePhysicalDeviceDriverProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, + ePhysicalDeviceDriverPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR, + ePhysicalDeviceShaderAtomicInt64Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, + ePhysicalDeviceShaderAtomicInt64FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, + ePhysicalDeviceShaderFloat16Int8Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, + ePhysicalDeviceShaderFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, + ePhysicalDeviceFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, + ePhysicalDeviceFloatControlsProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, + ePhysicalDeviceFloatControlsPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR, + eDescriptorSetLayoutBindingFlagsCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, + eDescriptorSetLayoutBindingFlagsCreateInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT, + ePhysicalDeviceDescriptorIndexingFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, + ePhysicalDeviceDescriptorIndexingFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, + ePhysicalDeviceDescriptorIndexingProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, + ePhysicalDeviceDescriptorIndexingPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, + eDescriptorSetVariableDescriptorCountAllocateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, + eDescriptorSetVariableDescriptorCountAllocateInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT, + eDescriptorSetVariableDescriptorCountLayoutSupport = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, + eDescriptorSetVariableDescriptorCountLayoutSupportEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT, + ePhysicalDeviceDepthStencilResolveProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, + ePhysicalDeviceDepthStencilResolvePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, + eSubpassDescriptionDepthStencilResolve = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, + eSubpassDescriptionDepthStencilResolveKHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR, + ePhysicalDeviceScalarBlockLayoutFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, + ePhysicalDeviceScalarBlockLayoutFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, + eImageStencilUsageCreateInfo = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, + eImageStencilUsageCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT, + ePhysicalDeviceSamplerFilterMinmaxProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, + ePhysicalDeviceSamplerFilterMinmaxPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT, + eSamplerReductionModeCreateInfo = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, + eSamplerReductionModeCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT, + ePhysicalDeviceVulkanMemoryModelFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, + ePhysicalDeviceVulkanMemoryModelFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR, + ePhysicalDeviceImagelessFramebufferFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, + ePhysicalDeviceImagelessFramebufferFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, + eFramebufferAttachmentsCreateInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, + eFramebufferAttachmentsCreateInfoKHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR, + eFramebufferAttachmentImageInfo = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, + eFramebufferAttachmentImageInfoKHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR, + eRenderPassAttachmentBeginInfo = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, + eRenderPassAttachmentBeginInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR, + ePhysicalDeviceUniformBufferStandardLayoutFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, + ePhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, + ePhysicalDeviceShaderSubgroupExtendedTypesFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, + ePhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR, + ePhysicalDeviceSeparateDepthStencilLayoutsFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, + ePhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, + eAttachmentReferenceStencilLayout = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, + eAttachmentReferenceStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR, + eAttachmentDescriptionStencilLayout = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, + eAttachmentDescriptionStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR, + ePhysicalDeviceHostQueryResetFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, + ePhysicalDeviceHostQueryResetFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, + ePhysicalDeviceTimelineSemaphoreFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, + ePhysicalDeviceTimelineSemaphoreFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, + ePhysicalDeviceTimelineSemaphoreProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, + ePhysicalDeviceTimelineSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR, + eSemaphoreTypeCreateInfo = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, + eSemaphoreTypeCreateInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR, + eTimelineSemaphoreSubmitInfo = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, + eTimelineSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR, + eSemaphoreWaitInfo = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, + eSemaphoreWaitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR, + eSemaphoreSignalInfo = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, + eSemaphoreSignalInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR, + ePhysicalDeviceBufferDeviceAddressFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, + ePhysicalDeviceBufferDeviceAddressFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR, + eBufferDeviceAddressInfo = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, + eBufferDeviceAddressInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT, + eBufferDeviceAddressInfoKHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR, + eBufferOpaqueCaptureAddressCreateInfo = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, + eBufferOpaqueCaptureAddressCreateInfoKHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR, + eMemoryOpaqueCaptureAddressAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, + eMemoryOpaqueCaptureAddressAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR, + eDeviceMemoryOpaqueCaptureAddressInfo = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, + eDeviceMemoryOpaqueCaptureAddressInfoKHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR, + ePhysicalDeviceVulkan13Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, + ePhysicalDeviceVulkan13Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES, + ePipelineCreationFeedbackCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, + ePipelineCreationFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT, + ePhysicalDeviceShaderTerminateInvocationFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, + ePhysicalDeviceShaderTerminateInvocationFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR, + ePhysicalDeviceToolProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES, + ePhysicalDeviceToolPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT, + ePhysicalDeviceShaderDemoteToHelperInvocationFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, + ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, + ePhysicalDevicePrivateDataFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, + ePhysicalDevicePrivateDataFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, + eDevicePrivateDataCreateInfo = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, + eDevicePrivateDataCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT, + ePrivateDataSlotCreateInfo = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, + ePrivateDataSlotCreateInfoEXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT, + ePhysicalDevicePipelineCreationCacheControlFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, + ePhysicalDevicePipelineCreationCacheControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT, + eMemoryBarrier2 = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2, + eMemoryBarrier2KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, + eBufferMemoryBarrier2 = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2, + eBufferMemoryBarrier2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR, + eImageMemoryBarrier2 = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, + eImageMemoryBarrier2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR, + eDependencyInfo = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, + eDependencyInfoKHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR, + eSubmitInfo2 = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, + eSubmitInfo2KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR, + eSemaphoreSubmitInfo = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, + eSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR, + eCommandBufferSubmitInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, + eCommandBufferSubmitInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR, + ePhysicalDeviceSynchronization2Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, + ePhysicalDeviceSynchronization2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR, + ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, + ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR, + ePhysicalDeviceImageRobustnessFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, + ePhysicalDeviceImageRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT, + eCopyBufferInfo2 = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2, + eCopyBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR, + eCopyImageInfo2 = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2, + eCopyImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR, + eCopyBufferToImageInfo2 = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, + eCopyBufferToImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR, + eCopyImageToBufferInfo2 = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2, + eCopyImageToBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR, + eBlitImageInfo2 = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2, + eBlitImageInfo2KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR, + eResolveImageInfo2 = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2, + eResolveImageInfo2KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR, + eBufferCopy2 = VK_STRUCTURE_TYPE_BUFFER_COPY_2, + eBufferCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR, + eImageCopy2 = VK_STRUCTURE_TYPE_IMAGE_COPY_2, + eImageCopy2KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR, + eImageBlit2 = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, + eImageBlit2KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR, + eBufferImageCopy2 = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, + eBufferImageCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR, + eImageResolve2 = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, + eImageResolve2KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR, + ePhysicalDeviceSubgroupSizeControlProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, + ePhysicalDeviceSubgroupSizeControlPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, + ePipelineShaderStageRequiredSubgroupSizeCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT, + eShaderRequiredSubgroupSizeCreateInfoEXT = VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT, + ePhysicalDeviceSubgroupSizeControlFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, + ePhysicalDeviceSubgroupSizeControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, + ePhysicalDeviceInlineUniformBlockFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, + ePhysicalDeviceInlineUniformBlockFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, + ePhysicalDeviceInlineUniformBlockProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, + ePhysicalDeviceInlineUniformBlockPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, + eWriteDescriptorSetInlineUniformBlock = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK, + eWriteDescriptorSetInlineUniformBlockEXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT, + eDescriptorPoolInlineUniformBlockCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO, + eDescriptorPoolInlineUniformBlockCreateInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT, + ePhysicalDeviceTextureCompressionAstcHdrFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, + ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, + eRenderingInfo = VK_STRUCTURE_TYPE_RENDERING_INFO, + eRenderingInfoKHR = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR, + eRenderingAttachmentInfo = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + eRenderingAttachmentInfoKHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR, + ePipelineRenderingCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, + ePipelineRenderingCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR, + ePhysicalDeviceDynamicRenderingFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, + ePhysicalDeviceDynamicRenderingFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR, + eCommandBufferInheritanceRenderingInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO, + eCommandBufferInheritanceRenderingInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR, + ePhysicalDeviceShaderIntegerDotProductFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, + ePhysicalDeviceShaderIntegerDotProductFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR, + ePhysicalDeviceShaderIntegerDotProductProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, + ePhysicalDeviceShaderIntegerDotProductPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR, + ePhysicalDeviceTexelBufferAlignmentProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, + ePhysicalDeviceTexelBufferAlignmentPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, + eFormatProperties3 = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, + eFormatProperties3KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, + ePhysicalDeviceMaintenance4Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, + ePhysicalDeviceMaintenance4FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR, + ePhysicalDeviceMaintenance4Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, + ePhysicalDeviceMaintenance4PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR, + eDeviceBufferMemoryRequirements = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, + eDeviceBufferMemoryRequirementsKHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR, + eDeviceImageMemoryRequirements = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, + eDeviceImageMemoryRequirementsKHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR, + ePhysicalDeviceVulkan14Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES, + ePhysicalDeviceVulkan14Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES, + eDeviceQueueGlobalPriorityCreateInfo = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + eDeviceQueueGlobalPriorityCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, + eDeviceQueueGlobalPriorityCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR, + ePhysicalDeviceGlobalPriorityQueryFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + ePhysicalDeviceGlobalPriorityQueryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR, + ePhysicalDeviceGlobalPriorityQueryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT, + eQueueFamilyGlobalPriorityProperties = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + eQueueFamilyGlobalPriorityPropertiesKHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR, + eQueueFamilyGlobalPriorityPropertiesEXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT, + ePhysicalDeviceShaderSubgroupRotateFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, + ePhysicalDeviceShaderSubgroupRotateFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR, + ePhysicalDeviceShaderFloatControls2Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, + ePhysicalDeviceShaderFloatControls2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR, + ePhysicalDeviceShaderExpectAssumeFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, + ePhysicalDeviceShaderExpectAssumeFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR, + ePhysicalDeviceLineRasterizationFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + ePhysicalDeviceLineRasterizationFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, + ePhysicalDeviceLineRasterizationFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR, + ePipelineRasterizationLineStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + ePipelineRasterizationLineStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT, + ePipelineRasterizationLineStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR, + ePhysicalDeviceLineRasterizationProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + ePhysicalDeviceLineRasterizationPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, + ePhysicalDeviceLineRasterizationPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR, + ePhysicalDeviceVertexAttributeDivisorProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES, + ePhysicalDeviceVertexAttributeDivisorPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR, + ePipelineVertexInputDivisorStateCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + ePipelineVertexInputDivisorStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT, + ePipelineVertexInputDivisorStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR, + ePhysicalDeviceVertexAttributeDivisorFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + ePhysicalDeviceVertexAttributeDivisorFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, + ePhysicalDeviceVertexAttributeDivisorFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, + ePhysicalDeviceIndexTypeUint8Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + ePhysicalDeviceIndexTypeUint8FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, + ePhysicalDeviceIndexTypeUint8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR, + eMemoryMapInfo = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO, + eMemoryMapInfoKHR = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR, + eMemoryUnmapInfo = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO, + eMemoryUnmapInfoKHR = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR, + ePhysicalDeviceMaintenance5Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, + ePhysicalDeviceMaintenance5FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR, + ePhysicalDeviceMaintenance5Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES, + ePhysicalDeviceMaintenance5PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR, + eRenderingAreaInfo = VK_STRUCTURE_TYPE_RENDERING_AREA_INFO, + eRenderingAreaInfoKHR = VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR, + eDeviceImageSubresourceInfo = VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO, + eDeviceImageSubresourceInfoKHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR, + eSubresourceLayout2 = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + eSubresourceLayout2EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT, + eSubresourceLayout2KHR = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR, + eImageSubresource2 = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + eImageSubresource2EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT, + eImageSubresource2KHR = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR, + ePipelineCreateFlags2CreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + ePipelineCreateFlags2CreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR, + eBufferUsageFlags2CreateInfo = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, + eBufferUsageFlags2CreateInfoKHR = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR, + ePhysicalDevicePushDescriptorProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES, + ePhysicalDevicePushDescriptorPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR, + ePhysicalDeviceDynamicRenderingLocalReadFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, + ePhysicalDeviceDynamicRenderingLocalReadFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR, + eRenderingAttachmentLocationInfo = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO, + eRenderingAttachmentLocationInfoKHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO_KHR, + eRenderingInputAttachmentIndexInfo = VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO, + eRenderingInputAttachmentIndexInfoKHR = VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR, + ePhysicalDeviceMaintenance6Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, + ePhysicalDeviceMaintenance6FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR, + ePhysicalDeviceMaintenance6Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES, + ePhysicalDeviceMaintenance6PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR, + eBindMemoryStatus = VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS, + eBindMemoryStatusKHR = VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS_KHR, + eBindDescriptorSetsInfo = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO, + eBindDescriptorSetsInfoKHR = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR, + ePushConstantsInfo = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO, + ePushConstantsInfoKHR = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR, + ePushDescriptorSetInfo = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO, + ePushDescriptorSetInfoKHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO_KHR, + ePushDescriptorSetWithTemplateInfo = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO, + ePushDescriptorSetWithTemplateInfoKHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR, + ePhysicalDevicePipelineProtectedAccessFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, + ePhysicalDevicePipelineProtectedAccessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT, + ePipelineRobustnessCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO, + ePipelineRobustnessCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT, + ePhysicalDevicePipelineRobustnessFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, + ePhysicalDevicePipelineRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT, + ePhysicalDevicePipelineRobustnessProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES, + ePhysicalDevicePipelineRobustnessPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT, + ePhysicalDeviceHostImageCopyFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, + ePhysicalDeviceHostImageCopyFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT, + ePhysicalDeviceHostImageCopyProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + ePhysicalDeviceHostImageCopyPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT, + eMemoryToImageCopy = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY, + eMemoryToImageCopyEXT = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT, + eImageToMemoryCopy = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY, + eImageToMemoryCopyEXT = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT, + eCopyImageToMemoryInfo = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO, + eCopyImageToMemoryInfoEXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT, + eCopyMemoryToImageInfo = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO, + eCopyMemoryToImageInfoEXT = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT, + eHostImageLayoutTransitionInfo = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO, + eHostImageLayoutTransitionInfoEXT = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT, + eCopyImageToImageInfo = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO, + eCopyImageToImageInfoEXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT, + eSubresourceHostMemcpySize = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE, + eSubresourceHostMemcpySizeEXT = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT, + eHostImageCopyDevicePerformanceQuery = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY, + eHostImageCopyDevicePerformanceQueryEXT = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT, + eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, + ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, + eDeviceGroupPresentCapabilitiesKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR, + eImageSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR, + eBindImageMemorySwapchainInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR, + eAcquireNextImageInfoKHR = VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR, + eDeviceGroupPresentInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR, + eDeviceGroupSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR, + eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR, + eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR, + eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR, +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR, +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ +#if defined( VK_USE_PLATFORM_XCB_KHR ) + eXcbSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR, +#endif /*VK_USE_PLATFORM_XCB_KHR*/ +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + eWaylandSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + eAndroidSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eWin32SurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eDebugReportCallbackCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, + eDebugReportCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT, + ePipelineRasterizationStateRasterizationOrderAMD = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD, + eDebugMarkerObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, + eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT, + eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, + eVideoProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR, + eVideoCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR, + eVideoPictureResourceInfoKHR = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR, + eVideoSessionMemoryRequirementsKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR, + eBindVideoSessionMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR, + eVideoSessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR, + eVideoSessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoSessionParametersUpdateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR, + eVideoBeginCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR, + eVideoEndCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR, + eVideoCodingControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR, + eVideoReferenceSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR, + eQueueFamilyVideoPropertiesKHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR, + eVideoProfileListInfoKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR, + ePhysicalDeviceVideoFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR, + eVideoFormatPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR, + eQueueFamilyQueryResultStatusPropertiesKHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR, + eVideoDecodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR, + eVideoDecodeCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR, + eVideoDecodeUsageInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR, + eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV, + eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV, + eDedicatedAllocationMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV, + ePhysicalDeviceTransformFeedbackFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, + ePhysicalDeviceTransformFeedbackPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT, + ePipelineRasterizationStateStreamCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT, + eCuModuleCreateInfoNVX = VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX, + eCuFunctionCreateInfoNVX = VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX, + eCuLaunchInfoNVX = VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX, + eCuModuleTexturingModeCreateInfoNVX = VK_STRUCTURE_TYPE_CU_MODULE_TEXTURING_MODE_CREATE_INFO_NVX, + eImageViewHandleInfoNVX = VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX, + eImageViewAddressPropertiesNVX = VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX, + eVideoEncodeH264CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_KHR, + eVideoEncodeH264SessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoEncodeH264SessionParametersAddInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR, + eVideoEncodeH264PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_KHR, + eVideoEncodeH264DpbSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR, + eVideoEncodeH264NaluSliceInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_KHR, + eVideoEncodeH264GopRemainingFrameInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR, + eVideoEncodeH264ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_KHR, + eVideoEncodeH264RateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR, + eVideoEncodeH264RateControlLayerInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR, + eVideoEncodeH264SessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_KHR, + eVideoEncodeH264QualityLevelPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_KHR, + eVideoEncodeH264SessionParametersGetInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR, + eVideoEncodeH264SessionParametersFeedbackInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_KHR, + eVideoEncodeH265CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR, + eVideoEncodeH265SessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoEncodeH265SessionParametersAddInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR, + eVideoEncodeH265PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR, + eVideoEncodeH265DpbSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR, + eVideoEncodeH265NaluSliceSegmentInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR, + eVideoEncodeH265GopRemainingFrameInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR, + eVideoEncodeH265ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR, + eVideoEncodeH265RateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR, + eVideoEncodeH265RateControlLayerInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR, + eVideoEncodeH265SessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR, + eVideoEncodeH265QualityLevelPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR, + eVideoEncodeH265SessionParametersGetInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR, + eVideoEncodeH265SessionParametersFeedbackInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR, + eVideoDecodeH264CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR, + eVideoDecodeH264PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR, + eVideoDecodeH264ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR, + eVideoDecodeH264SessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoDecodeH264SessionParametersAddInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR, + eVideoDecodeH264DpbSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR, + eTextureLodGatherFormatPropertiesAMD = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, +#if defined( VK_USE_PLATFORM_GGP ) + eStreamDescriptorSurfaceCreateInfoGGP = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP, +#endif /*VK_USE_PLATFORM_GGP*/ + ePhysicalDeviceCornerSampledImageFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, + eExternalMemoryImageCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV, + eExportMemoryAllocateInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eImportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV, + eExportMemoryWin32HandleInfoNV = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV, + eWin32KeyedMutexAcquireReleaseInfoNV = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eValidationFlagsEXT = VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT, +#if defined( VK_USE_PLATFORM_VI_NN ) + eViSurfaceCreateInfoNN = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN, +#endif /*VK_USE_PLATFORM_VI_NN*/ + eImageViewAstcDecodeModeEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, + ePhysicalDeviceAstcDecodeFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eImportMemoryWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR, + eExportMemoryWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR, + eMemoryWin32HandlePropertiesKHR = VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR, + eMemoryGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eImportMemoryFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR, + eMemoryFdPropertiesKHR = VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR, + eMemoryGetFdInfoKHR = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eWin32KeyedMutexAcquireReleaseInfoKHR = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR, + eImportSemaphoreWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR, + eExportSemaphoreWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR, + eD3D12FenceSubmitInfoKHR = VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR, + eSemaphoreGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eImportSemaphoreFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR, + eSemaphoreGetFdInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR, + eCommandBufferInheritanceConditionalRenderingInfoEXT = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT, + ePhysicalDeviceConditionalRenderingFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, + eConditionalRenderingBeginInfoEXT = VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT, + ePresentRegionsKHR = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR, + ePipelineViewportWScalingStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV, + eSurfaceCapabilities2EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, + eDisplayPowerInfoEXT = VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT, + eDeviceEventInfoEXT = VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT, + eDisplayEventInfoEXT = VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT, + eSwapchainCounterCreateInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT, + ePresentTimesInfoGOOGLE = VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE, + ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX, + eMultiviewPerViewAttributesInfoNVX = VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX, + ePipelineViewportSwizzleStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV, + ePhysicalDeviceDiscardRectanglePropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, + ePipelineDiscardRectangleStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT, + ePhysicalDeviceConservativeRasterizationPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT, + ePipelineRasterizationConservativeStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT, + ePhysicalDeviceDepthClipEnableFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, + ePipelineRasterizationDepthClipStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT, + eHdrMetadataEXT = VK_STRUCTURE_TYPE_HDR_METADATA_EXT, + ePhysicalDeviceRelaxedLineRasterizationFeaturesIMG = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, + eSharedPresentSurfaceCapabilitiesKHR = VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eImportFenceWin32HandleInfoKHR = VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR, + eExportFenceWin32HandleInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR, + eFenceGetWin32HandleInfoKHR = VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eImportFenceFdInfoKHR = VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR, + eFenceGetFdInfoKHR = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR, + ePhysicalDevicePerformanceQueryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, + ePhysicalDevicePerformanceQueryPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR, + eQueryPoolPerformanceCreateInfoKHR = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR, + ePerformanceQuerySubmitInfoKHR = VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR, + eAcquireProfilingLockInfoKHR = VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR, + ePerformanceCounterKHR = VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR, + ePerformanceCounterDescriptionKHR = VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR, + ePhysicalDeviceSurfaceInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, + eSurfaceCapabilities2KHR = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR, + eSurfaceFormat2KHR = VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR, + eDisplayProperties2KHR = VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR, + eDisplayPlaneProperties2KHR = VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR, + eDisplayModeProperties2KHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR, + eDisplayPlaneInfo2KHR = VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR, + eDisplayPlaneCapabilities2KHR = VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR, +#if defined( VK_USE_PLATFORM_IOS_MVK ) + eIosSurfaceCreateInfoMVK = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK, +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + eMacosSurfaceCreateInfoMVK = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK, +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + eDebugUtilsObjectNameInfoEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, + eDebugUtilsObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT, + eDebugUtilsLabelEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, + eDebugUtilsMessengerCallbackDataEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, + eDebugUtilsMessengerCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + eAndroidHardwareBufferUsageANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID, + eAndroidHardwareBufferPropertiesANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID, + eAndroidHardwareBufferFormatPropertiesANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID, + eImportAndroidHardwareBufferInfoANDROID = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, + eMemoryGetAndroidHardwareBufferInfoANDROID = VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, + eExternalFormatANDROID = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID, + eAndroidHardwareBufferFormatProperties2ANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + ePhysicalDeviceShaderEnqueueFeaturesAMDX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX, + ePhysicalDeviceShaderEnqueuePropertiesAMDX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX, + eExecutionGraphPipelineScratchSizeAMDX = VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX, + eExecutionGraphPipelineCreateInfoAMDX = VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX, + ePipelineShaderStageNodeCreateInfoAMDX = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + eAttachmentSampleCountInfoAMD = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD, + eAttachmentSampleCountInfoNV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV, + ePhysicalDeviceShaderBfloat16FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR, + eSampleLocationsInfoEXT = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT, + eRenderPassSampleLocationsBeginInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT, + ePipelineSampleLocationsStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT, + ePhysicalDeviceSampleLocationsPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT, + eMultisamplePropertiesEXT = VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT, + ePhysicalDeviceBlendOperationAdvancedFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, + ePhysicalDeviceBlendOperationAdvancedPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT, + ePipelineColorBlendAdvancedStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT, + ePipelineCoverageToColorStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV, + eWriteDescriptorSetAccelerationStructureKHR = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR, + eAccelerationStructureBuildGeometryInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR, + eAccelerationStructureDeviceAddressInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR, + eAccelerationStructureGeometryAabbsDataKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR, + eAccelerationStructureGeometryInstancesDataKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR, + eAccelerationStructureGeometryTrianglesDataKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR, + eAccelerationStructureGeometryKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR, + eAccelerationStructureVersionInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR, + eCopyAccelerationStructureInfoKHR = VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR, + eCopyAccelerationStructureToMemoryInfoKHR = VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR, + eCopyMemoryToAccelerationStructureInfoKHR = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR, + ePhysicalDeviceAccelerationStructureFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, + ePhysicalDeviceAccelerationStructurePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR, + eAccelerationStructureCreateInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR, + eAccelerationStructureBuildSizesInfoKHR = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR, + ePhysicalDeviceRayTracingPipelineFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, + ePhysicalDeviceRayTracingPipelinePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR, + eRayTracingPipelineCreateInfoKHR = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR, + eRayTracingShaderGroupCreateInfoKHR = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR, + eRayTracingPipelineInterfaceCreateInfoKHR = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR, + ePhysicalDeviceRayQueryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, + ePipelineCoverageModulationStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV, + ePhysicalDeviceShaderSmBuiltinsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, + ePhysicalDeviceShaderSmBuiltinsPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV, + eDrmFormatModifierPropertiesListEXT = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT, + ePhysicalDeviceImageDrmFormatModifierInfoEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT, + eImageDrmFormatModifierListCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT, + eImageDrmFormatModifierExplicitCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT, + eImageDrmFormatModifierPropertiesEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT, + eDrmFormatModifierPropertiesList2EXT = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT, + eValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT, + eShaderModuleValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + ePhysicalDevicePortabilitySubsetFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, + ePhysicalDevicePortabilitySubsetPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + ePipelineViewportShadingRateImageStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV, + ePhysicalDeviceShadingRateImageFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, + ePhysicalDeviceShadingRateImagePropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV, + ePipelineViewportCoarseSampleOrderStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV, + eRayTracingPipelineCreateInfoNV = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV, + eAccelerationStructureCreateInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV, + eGeometryNV = VK_STRUCTURE_TYPE_GEOMETRY_NV, + eGeometryTrianglesNV = VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV, + eGeometryAabbNV = VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV, + eBindAccelerationStructureMemoryInfoNV = VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV, + eWriteDescriptorSetAccelerationStructureNV = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV, + eAccelerationStructureMemoryRequirementsInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV, + ePhysicalDeviceRayTracingPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV, + eRayTracingShaderGroupCreateInfoNV = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV, + eAccelerationStructureInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV, + ePhysicalDeviceRepresentativeFragmentTestFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, + ePipelineRepresentativeFragmentTestStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV, + ePhysicalDeviceImageViewImageFormatInfoEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT, + eFilterCubicImageViewImageFormatPropertiesEXT = VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT, + eImportMemoryHostPointerInfoEXT = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT, + eMemoryHostPointerPropertiesEXT = VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT, + ePhysicalDeviceExternalMemoryHostPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT, + ePhysicalDeviceShaderClockFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, + ePipelineCompilerControlCreateInfoAMD = VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD, + ePhysicalDeviceShaderCorePropertiesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, + eVideoDecodeH265CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR, + eVideoDecodeH265SessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoDecodeH265SessionParametersAddInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR, + eVideoDecodeH265ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR, + eVideoDecodeH265PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR, + eVideoDecodeH265DpbSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR, + eDeviceMemoryOverallocationCreateInfoAMD = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD, + ePhysicalDeviceVertexAttributeDivisorPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, +#if defined( VK_USE_PLATFORM_GGP ) + ePresentFrameTokenGGP = VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP, +#endif /*VK_USE_PLATFORM_GGP*/ + ePhysicalDeviceMeshShaderFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, + ePhysicalDeviceMeshShaderPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV, + ePhysicalDeviceShaderImageFootprintFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, + ePipelineViewportExclusiveScissorStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV, + ePhysicalDeviceExclusiveScissorFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, + eCheckpointDataNV = VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV, + eQueueFamilyCheckpointPropertiesNV = VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV, + eQueueFamilyCheckpointProperties2NV = VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV, + eCheckpointData2NV = VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV, + ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, + eQueryPoolPerformanceQueryCreateInfoINTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, + eQueryPoolCreateInfoINTEL = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL, + eInitializePerformanceApiInfoINTEL = VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL, + ePerformanceMarkerInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL, + ePerformanceStreamMarkerInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL, + ePerformanceOverrideInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL, + ePerformanceConfigurationAcquireInfoINTEL = VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL, + ePhysicalDevicePciBusInfoPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT, + eDisplayNativeHdrSurfaceCapabilitiesAMD = VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD, + eSwapchainDisplayNativeHdrCreateInfoAMD = VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD, +#if defined( VK_USE_PLATFORM_FUCHSIA ) + eImagepipeSurfaceCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA, +#endif /*VK_USE_PLATFORM_FUCHSIA*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + eMetalSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT, +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + ePhysicalDeviceFragmentDensityMapFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, + ePhysicalDeviceFragmentDensityMapPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT, + eRenderPassFragmentDensityMapCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT, + eRenderingFragmentDensityMapAttachmentInfoEXT = VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT, + eFragmentShadingRateAttachmentInfoKHR = VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, + ePipelineFragmentShadingRateStateCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR, + ePhysicalDeviceFragmentShadingRatePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR, + ePhysicalDeviceFragmentShadingRateFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, + ePhysicalDeviceFragmentShadingRateKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR, + eRenderingFragmentShadingRateAttachmentInfoKHR = VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR, + ePhysicalDeviceShaderCoreProperties2AMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD, + ePhysicalDeviceCoherentMemoryFeaturesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, + ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, + ePhysicalDeviceShaderQuadControlFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR, + ePhysicalDeviceMemoryBudgetPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT, + ePhysicalDeviceMemoryPriorityFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, + eMemoryPriorityAllocateInfoEXT = VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT, + eSurfaceProtectedCapabilitiesKHR = VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR, + ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, + ePhysicalDeviceBufferDeviceAddressFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, + ePhysicalDeviceBufferAddressFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT, + eBufferDeviceAddressCreateInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT, + eValidationFeaturesEXT = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT, + ePhysicalDevicePresentWaitFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, + ePhysicalDeviceCooperativeMatrixFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, + eCooperativeMatrixPropertiesNV = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV, + ePhysicalDeviceCooperativeMatrixPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV, + ePhysicalDeviceCoverageReductionModeFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, + ePipelineCoverageReductionStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV, + eFramebufferMixedSamplesCombinationNV = VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV, + ePhysicalDeviceFragmentShaderInterlockFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, + ePhysicalDeviceYcbcrImageArraysFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, + ePhysicalDeviceProvokingVertexFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, + ePipelineRasterizationProvokingVertexStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT, + ePhysicalDeviceProvokingVertexPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + eSurfaceFullScreenExclusiveInfoEXT = VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT, + eSurfaceCapabilitiesFullScreenExclusiveEXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT, + eSurfaceFullScreenExclusiveWin32InfoEXT = VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + eHeadlessSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT, + ePhysicalDeviceShaderAtomicFloatFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, + ePhysicalDeviceExtendedDynamicStateFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, + ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, + ePipelineInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, + ePipelineInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT, + ePipelineExecutablePropertiesKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR, + ePipelineExecutableInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR, + ePipelineExecutableStatisticKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR, + ePipelineExecutableInternalRepresentationKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR, + ePhysicalDeviceMapMemoryPlacedFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT, + ePhysicalDeviceMapMemoryPlacedPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT, + eMemoryMapPlacedInfoEXT = VK_STRUCTURE_TYPE_MEMORY_MAP_PLACED_INFO_EXT, + ePhysicalDeviceShaderAtomicFloat2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, + ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV, + eGraphicsShaderGroupCreateInfoNV = VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV, + eGraphicsPipelineShaderGroupsCreateInfoNV = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV, + eIndirectCommandsLayoutTokenNV = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV, + eIndirectCommandsLayoutCreateInfoNV = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV, + eGeneratedCommandsInfoNV = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV, + eGeneratedCommandsMemoryRequirementsInfoNV = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV, + ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, + ePhysicalDeviceInheritedViewportScissorFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, + eCommandBufferInheritanceViewportScissorInfoNV = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV, + ePhysicalDeviceTexelBufferAlignmentFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, + eCommandBufferInheritanceRenderPassTransformInfoQCOM = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM, + eRenderPassTransformBeginInfoQCOM = VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM, + ePhysicalDeviceDepthBiasControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT, + eDepthBiasInfoEXT = VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT, + eDepthBiasRepresentationInfoEXT = VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT, + ePhysicalDeviceDeviceMemoryReportFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, + eDeviceDeviceMemoryReportCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT, + eDeviceMemoryReportCallbackDataEXT = VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT, + eSamplerCustomBorderColorCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT, + ePhysicalDeviceCustomBorderColorPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT, + ePhysicalDeviceCustomBorderColorFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, + ePipelineLibraryCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR, + ePhysicalDevicePresentBarrierFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV, + eSurfaceCapabilitiesPresentBarrierNV = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV, + eSwapchainPresentBarrierCreateInfoNV = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV, + ePresentIdKHR = VK_STRUCTURE_TYPE_PRESENT_ID_KHR, + ePhysicalDevicePresentIdFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, + eVideoEncodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR, + eVideoEncodeRateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR, + eVideoEncodeRateControlLayerInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR, + eVideoEncodeCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR, + eVideoEncodeUsageInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR, + eQueryPoolVideoEncodeFeedbackCreateInfoKHR = VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR, + ePhysicalDeviceVideoEncodeQualityLevelInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR, + eVideoEncodeQualityLevelPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR, + eVideoEncodeQualityLevelInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR, + eVideoEncodeSessionParametersGetInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR, + eVideoEncodeSessionParametersFeedbackInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR, + ePhysicalDeviceDiagnosticsConfigFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, + eDeviceDiagnosticsConfigCreateInfoNV = VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eCudaModuleCreateInfoNV = VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV, + eCudaFunctionCreateInfoNV = VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV, + eCudaLaunchInfoNV = VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV, + ePhysicalDeviceCudaKernelLaunchFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV, + ePhysicalDeviceCudaKernelLaunchPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + ePhysicalDeviceTileShadingFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM, + ePhysicalDeviceTileShadingPropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM, + eRenderPassTileShadingCreateInfoQCOM = VK_STRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM, + ePerTileBeginInfoQCOM = VK_STRUCTURE_TYPE_PER_TILE_BEGIN_INFO_QCOM, + ePerTileEndInfoQCOM = VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM, + eDispatchTileInfoQCOM = VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM, + eQueryLowLatencySupportNV = VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV, +#if defined( VK_USE_PLATFORM_METAL_EXT ) + eExportMetalObjectCreateInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT, + eExportMetalObjectsInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT, + eExportMetalDeviceInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT, + eExportMetalCommandQueueInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT, + eExportMetalBufferInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT, + eImportMetalBufferInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT, + eExportMetalTextureInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT, + eImportMetalTextureInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT, + eExportMetalIoSurfaceInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT, + eImportMetalIoSurfaceInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT, + eExportMetalSharedEventInfoEXT = VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT, + eImportMetalSharedEventInfoEXT = VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT, +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + ePhysicalDeviceDescriptorBufferPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT, + ePhysicalDeviceDescriptorBufferDensityMapPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT, + ePhysicalDeviceDescriptorBufferFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT, + eDescriptorAddressInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT, + eDescriptorGetInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT, + eBufferCaptureDescriptorDataInfoEXT = VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT, + eImageCaptureDescriptorDataInfoEXT = VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT, + eImageViewCaptureDescriptorDataInfoEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT, + eSamplerCaptureDescriptorDataInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT, + eOpaqueCaptureDescriptorDataCreateInfoEXT = VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT, + eDescriptorBufferBindingInfoEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, + eDescriptorBufferBindingPushDescriptorBufferHandleEXT = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT, + eAccelerationStructureCaptureDescriptorDataInfoEXT = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT, + ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, + ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT, + eGraphicsPipelineLibraryCreateInfoEXT = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT, + ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD, + ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, + ePhysicalDeviceFragmentShaderBarycentricFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, + ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR, + ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, + ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV, + ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, + ePipelineFragmentShadingRateEnumStateCreateInfoNV = VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV, + eAccelerationStructureGeometryMotionTrianglesDataNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV, + ePhysicalDeviceRayTracingMotionBlurFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, + eAccelerationStructureMotionInfoNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV, + ePhysicalDeviceMeshShaderFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT, + ePhysicalDeviceMeshShaderPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT, + ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, + ePhysicalDeviceFragmentDensityMap2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, + ePhysicalDeviceFragmentDensityMap2PropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT, + eCopyCommandTransformInfoQCOM = VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM, + ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, + ePhysicalDeviceImageCompressionControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, + eImageCompressionControlEXT = VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT, + eImageCompressionPropertiesEXT = VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT, + ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, + ePhysicalDevice4444FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, + ePhysicalDeviceFaultFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT, + eDeviceFaultCountsEXT = VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT, + eDeviceFaultInfoEXT = VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT, + ePhysicalDeviceRgba10X6FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + eDirectfbSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT, +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + ePhysicalDeviceVertexInputDynamicStateFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, + eVertexInputBindingDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT, + eVertexInputAttributeDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT, + ePhysicalDeviceDrmPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT, + ePhysicalDeviceAddressBindingReportFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT, + eDeviceAddressBindingCallbackDataEXT = VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT, + ePhysicalDeviceDepthClipControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, + ePipelineViewportDepthClipControlCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT, + ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, +#if defined( VK_USE_PLATFORM_FUCHSIA ) + eImportMemoryZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA, + eMemoryZirconHandlePropertiesFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA, + eMemoryGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA, + eImportSemaphoreZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA, + eSemaphoreGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA, + eBufferCollectionCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA, + eImportMemoryBufferCollectionFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA, + eBufferCollectionImageCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA, + eBufferCollectionPropertiesFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA, + eBufferConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA, + eBufferCollectionBufferCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA, + eImageConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA, + eImageFormatConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA, + eSysmemColorSpaceFUCHSIA = VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA, + eBufferCollectionConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA, +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + eSubpassShadingPipelineCreateInfoHUAWEI = VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI, + ePhysicalDeviceSubpassShadingFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI, + ePhysicalDeviceSubpassShadingPropertiesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI, + ePhysicalDeviceInvocationMaskFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, + eMemoryGetRemoteAddressInfoNV = VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV, + ePhysicalDeviceExternalMemoryRdmaFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV, + ePipelinePropertiesIdentifierEXT = VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT, + ePhysicalDevicePipelinePropertiesFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT, + ePhysicalDeviceFrameBoundaryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT, + eFrameBoundaryEXT = VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT, + ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT, + eSubpassResolvePerformanceQueryEXT = VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT, + eMultisampledRenderToSingleSampledInfoEXT = VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT, + ePhysicalDeviceExtendedDynamicState2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + eScreenSurfaceCreateInfoQNX = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX, +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + ePhysicalDeviceColorWriteEnableFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, + ePipelineColorWriteCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT, + ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, + ePhysicalDeviceRayTracingMaintenance1FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, + ePhysicalDeviceImageViewMinLodFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, + eImageViewMinLodCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT, + ePhysicalDeviceMultiDrawFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, + ePhysicalDeviceMultiDrawPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT, + ePhysicalDeviceImage2DViewOf3DFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, + ePhysicalDeviceShaderTileImageFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT, + ePhysicalDeviceShaderTileImagePropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT, + eMicromapBuildInfoEXT = VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT, + eMicromapVersionInfoEXT = VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT, + eCopyMicromapInfoEXT = VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT, + eCopyMicromapToMemoryInfoEXT = VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT, + eCopyMemoryToMicromapInfoEXT = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT, + ePhysicalDeviceOpacityMicromapFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT, + ePhysicalDeviceOpacityMicromapPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT, + eMicromapCreateInfoEXT = VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT, + eMicromapBuildSizesInfoEXT = VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT, + eAccelerationStructureTrianglesOpacityMicromapEXT = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + ePhysicalDeviceDisplacementMicromapFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV, + ePhysicalDeviceDisplacementMicromapPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV, + eAccelerationStructureTrianglesDisplacementMicromapNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + ePhysicalDeviceClusterCullingShaderFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI, + ePhysicalDeviceClusterCullingShaderPropertiesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI, + ePhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_VRS_FEATURES_HUAWEI, + ePhysicalDeviceBorderColorSwizzleFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, + eSamplerBorderColorComponentMappingCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT, + ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, + ePhysicalDeviceShaderCorePropertiesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM, + eDeviceQueueShaderCoreControlCreateInfoARM = VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM, + ePhysicalDeviceSchedulingControlsFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM, + ePhysicalDeviceSchedulingControlsPropertiesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM, + ePhysicalDeviceImageSlicedViewOf3DFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT, + eImageViewSlicedCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT, + ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE, + eDescriptorSetBindingReferenceVALVE = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE, + eDescriptorSetLayoutHostMappingInfoVALVE = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE, + ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, + ePhysicalDeviceRenderPassStripedFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM, + ePhysicalDeviceRenderPassStripedPropertiesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM, + eRenderPassStripeBeginInfoARM = VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM, + eRenderPassStripeInfoARM = VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM, + eRenderPassStripeSubmitInfoARM = VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM, + ePhysicalDeviceCopyMemoryIndirectFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV, + ePhysicalDeviceCopyMemoryIndirectPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV, + ePhysicalDeviceMemoryDecompressionFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV, + ePhysicalDeviceMemoryDecompressionPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV, + ePhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV, + eComputePipelineIndirectBufferInfoNV = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV, + ePipelineIndirectDeviceAddressInfoNV = VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV, + ePhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV, + eAccelerationStructureGeometryLinearSweptSpheresDataNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_LINEAR_SWEPT_SPHERES_DATA_NV, + eAccelerationStructureGeometrySpheresDataNV = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_SPHERES_DATA_NV, + ePhysicalDeviceLinearColorAttachmentFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV, + ePhysicalDeviceShaderMaximalReconvergenceFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR, + ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, + ePhysicalDeviceImageProcessingFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM, + ePhysicalDeviceImageProcessingPropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM, + eImageViewSampleWeightCreateInfoQCOM = VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM, + ePhysicalDeviceNestedCommandBufferFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT, + ePhysicalDeviceNestedCommandBufferPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT, + eExternalMemoryAcquireUnmodifiedEXT = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT, + ePhysicalDeviceExtendedDynamicState3FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT, + ePhysicalDeviceExtendedDynamicState3PropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT, + ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT, + eRenderPassCreationControlEXT = VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT, + eRenderPassCreationFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT, + eRenderPassSubpassFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT, + eDirectDriverLoadingInfoLUNARG = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG, + eDirectDriverLoadingListLUNARG = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG, + eTensorCreateInfoARM = VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM, + eTensorViewCreateInfoARM = VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM, + eBindTensorMemoryInfoARM = VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM, + eWriteDescriptorSetTensorARM = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM, + ePhysicalDeviceTensorPropertiesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM, + eTensorFormatPropertiesARM = VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM, + eTensorDescriptionARM = VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM, + eTensorMemoryRequirementsInfoARM = VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM, + eTensorMemoryBarrierARM = VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM, + ePhysicalDeviceTensorFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM, + eDeviceTensorMemoryRequirementsARM = VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM, + eCopyTensorInfoARM = VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM, + eTensorCopyARM = VK_STRUCTURE_TYPE_TENSOR_COPY_ARM, + eTensorDependencyInfoARM = VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM, + eMemoryDedicatedAllocateInfoTensorARM = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM, + ePhysicalDeviceExternalTensorInfoARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM, + eExternalTensorPropertiesARM = VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM, + eExternalMemoryTensorCreateInfoARM = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM, + ePhysicalDeviceDescriptorBufferTensorFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM, + ePhysicalDeviceDescriptorBufferTensorPropertiesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_PROPERTIES_ARM, + eDescriptorGetTensorInfoARM = VK_STRUCTURE_TYPE_DESCRIPTOR_GET_TENSOR_INFO_ARM, + eTensorCaptureDescriptorDataInfoARM = VK_STRUCTURE_TYPE_TENSOR_CAPTURE_DESCRIPTOR_DATA_INFO_ARM, + eTensorViewCaptureDescriptorDataInfoARM = VK_STRUCTURE_TYPE_TENSOR_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_ARM, + eFrameBoundaryTensorsARM = VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM, + ePhysicalDeviceShaderModuleIdentifierFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT, + ePhysicalDeviceShaderModuleIdentifierPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT, + ePipelineShaderStageModuleIdentifierCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT, + eShaderModuleIdentifierEXT = VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT, + ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, + ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM, + ePhysicalDeviceOpticalFlowFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV, + ePhysicalDeviceOpticalFlowPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV, + eOpticalFlowImageFormatInfoNV = VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV, + eOpticalFlowImageFormatPropertiesNV = VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV, + eOpticalFlowSessionCreateInfoNV = VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV, + eOpticalFlowExecuteInfoNV = VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV, + eOpticalFlowSessionCreatePrivateDataInfoNV = VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV, + ePhysicalDeviceLegacyDitheringFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT, +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + ePhysicalDeviceExternalFormatResolveFeaturesANDROID = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID, + ePhysicalDeviceExternalFormatResolvePropertiesANDROID = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID, + eAndroidHardwareBufferFormatResolvePropertiesANDROID = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + ePhysicalDeviceAntiLagFeaturesAMD = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD, + eAntiLagDataAMD = VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD, + eAntiLagPresentationInfoAMD = VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD, + eSurfaceCapabilitiesPresentId2KHR = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR, + ePresentId2KHR = VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR, + ePhysicalDevicePresentId2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR, + eSurfaceCapabilitiesPresentWait2KHR = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR, + ePhysicalDevicePresentWait2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR, + ePresentWait2InfoKHR = VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR, + ePhysicalDeviceRayTracingPositionFetchFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR, + ePhysicalDeviceShaderObjectFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT, + ePhysicalDeviceShaderObjectPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT, + eShaderCreateInfoEXT = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, + ePhysicalDevicePipelineBinaryFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR, + ePipelineBinaryCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_BINARY_CREATE_INFO_KHR, + ePipelineBinaryInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_BINARY_INFO_KHR, + ePipelineBinaryKeyKHR = VK_STRUCTURE_TYPE_PIPELINE_BINARY_KEY_KHR, + ePhysicalDevicePipelineBinaryPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_PROPERTIES_KHR, + eReleaseCapturedPipelineDataInfoKHR = VK_STRUCTURE_TYPE_RELEASE_CAPTURED_PIPELINE_DATA_INFO_KHR, + ePipelineBinaryDataInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_BINARY_DATA_INFO_KHR, + ePipelineCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_CREATE_INFO_KHR, + eDevicePipelineBinaryInternalCacheControlKHR = VK_STRUCTURE_TYPE_DEVICE_PIPELINE_BINARY_INTERNAL_CACHE_CONTROL_KHR, + ePipelineBinaryHandlesInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR, + ePhysicalDeviceTilePropertiesFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM, + eTilePropertiesQCOM = VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM, + ePhysicalDeviceAmigoProfilingFeaturesSEC = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC, + eAmigoProfilingSubmitInfoSEC = VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC, + eSurfacePresentModeKHR = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR, + eSurfacePresentModeEXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT, + eSurfacePresentScalingCapabilitiesKHR = VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR, + eSurfacePresentScalingCapabilitiesEXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT, + eSurfacePresentModeCompatibilityKHR = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR, + eSurfacePresentModeCompatibilityEXT = VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT, + ePhysicalDeviceSwapchainMaintenance1FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR, + ePhysicalDeviceSwapchainMaintenance1FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT, + eSwapchainPresentFenceInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR, + eSwapchainPresentFenceInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT, + eSwapchainPresentModesCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR, + eSwapchainPresentModesCreateInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT, + eSwapchainPresentModeInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR, + eSwapchainPresentModeInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT, + eSwapchainPresentScalingCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR, + eSwapchainPresentScalingCreateInfoEXT = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT, + eReleaseSwapchainImagesInfoKHR = VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR, + eReleaseSwapchainImagesInfoEXT = VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT, + ePhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM, + ePhysicalDeviceRayTracingInvocationReorderFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV, + ePhysicalDeviceRayTracingInvocationReorderPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV, + ePhysicalDeviceCooperativeVectorFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV, + ePhysicalDeviceCooperativeVectorPropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV, + eCooperativeVectorPropertiesNV = VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV, + eConvertCooperativeVectorMatrixInfoNV = VK_STRUCTURE_TYPE_CONVERT_COOPERATIVE_VECTOR_MATRIX_INFO_NV, + ePhysicalDeviceExtendedSparseAddressSpaceFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV, + ePhysicalDeviceExtendedSparseAddressSpacePropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV, + ePhysicalDeviceMutableDescriptorTypeFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, + ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, + eMutableDescriptorTypeCreateInfoEXT = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT, + eMutableDescriptorTypeCreateInfoVALVE = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE, + ePhysicalDeviceLegacyVertexAttributesFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT, + ePhysicalDeviceLegacyVertexAttributesPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT, + eLayerSettingsCreateInfoEXT = VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT, + ePhysicalDeviceShaderCoreBuiltinsFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM, + ePhysicalDeviceShaderCoreBuiltinsPropertiesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM, + ePhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT, + ePhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT, + eLatencySleepModeInfoNV = VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV, + eLatencySleepInfoNV = VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV, + eSetLatencyMarkerInfoNV = VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV, + eGetLatencyMarkerInfoNV = VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV, + eLatencyTimingsFrameReportNV = VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV, + eLatencySubmissionPresentIdNV = VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV, + eOutOfBandQueueTypeInfoNV = VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV, + eSwapchainLatencyCreateInfoNV = VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV, + eLatencySurfaceCapabilitiesNV = VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV, + ePhysicalDeviceCooperativeMatrixFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR, + eCooperativeMatrixPropertiesKHR = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR, + ePhysicalDeviceCooperativeMatrixPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR, + eDataGraphPipelineCreateInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM, + eDataGraphPipelineSessionCreateInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM, + eDataGraphPipelineResourceInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM, + eDataGraphPipelineConstantARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM, + eDataGraphPipelineSessionMemoryRequirementsInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM, + eBindDataGraphPipelineSessionMemoryInfoARM = VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM, + ePhysicalDeviceDataGraphFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM, + eDataGraphPipelineShaderModuleCreateInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM, + eDataGraphPipelinePropertyQueryResultARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM, + eDataGraphPipelineInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM, + eDataGraphPipelineCompilerControlCreateInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM, + eDataGraphPipelineSessionBindPointRequirementsInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM, + eDataGraphPipelineSessionBindPointRequirementARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM, + eDataGraphPipelineIdentifierCreateInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM, + eDataGraphPipelineDispatchInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM, + eDataGraphProcessingEngineCreateInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM, + eQueueFamilyDataGraphProcessingEnginePropertiesARM = VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM, + eQueueFamilyDataGraphPropertiesARM = VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM, + ePhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM, + eDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM = VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM, + ePhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM, + eMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM = VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM, + ePhysicalDeviceComputeShaderDerivativesFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR, + ePhysicalDeviceComputeShaderDerivativesFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, + ePhysicalDeviceComputeShaderDerivativesPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR, + eVideoDecodeAv1CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR, + eVideoDecodeAv1PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR, + eVideoDecodeAv1ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR, + eVideoDecodeAv1SessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoDecodeAv1DpbSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR, + eVideoEncodeAv1CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR, + eVideoEncodeAv1SessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR, + eVideoEncodeAv1PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR, + eVideoEncodeAv1DpbSlotInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR, + ePhysicalDeviceVideoEncodeAv1FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR, + eVideoEncodeAv1ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PROFILE_INFO_KHR, + eVideoEncodeAv1RateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR, + eVideoEncodeAv1RateControlLayerInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR, + eVideoEncodeAv1QualityLevelPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUALITY_LEVEL_PROPERTIES_KHR, + eVideoEncodeAv1SessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_CREATE_INFO_KHR, + eVideoEncodeAv1GopRemainingFrameInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR, + ePhysicalDeviceVideoDecodeVp9FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR, + eVideoDecodeVp9CapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_CAPABILITIES_KHR, + eVideoDecodeVp9PictureInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PICTURE_INFO_KHR, + eVideoDecodeVp9ProfileInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PROFILE_INFO_KHR, + ePhysicalDeviceVideoMaintenance1FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR, + eVideoInlineQueryInfoKHR = VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR, + ePhysicalDevicePerStageDescriptorSetFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV, + ePhysicalDeviceImageProcessing2FeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM, + ePhysicalDeviceImageProcessing2PropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM, + eSamplerBlockMatchWindowCreateInfoQCOM = VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM, + eSamplerCubicWeightsCreateInfoQCOM = VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM, + ePhysicalDeviceCubicWeightsFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM, + eBlitImageCubicWeightsInfoQCOM = VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM, + ePhysicalDeviceYcbcrDegammaFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM, + eSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM, + ePhysicalDeviceCubicClampFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM, + ePhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT, + ePhysicalDeviceUnifiedImageLayoutsFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR, + eAttachmentFeedbackLoopInfoEXT = VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT, +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + eScreenBufferPropertiesQNX = VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX, + eScreenBufferFormatPropertiesQNX = VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX, + eImportScreenBufferInfoQNX = VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX, + eExternalFormatQNX = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX, + ePhysicalDeviceExternalMemoryScreenBufferFeaturesQNX = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX, +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + ePhysicalDeviceLayeredDriverPropertiesMSFT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT, + eCalibratedTimestampInfoKHR = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR, + eCalibratedTimestampInfoEXT = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT, + eSetDescriptorBufferOffsetsInfoEXT = VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT, + eBindDescriptorBufferEmbeddedSamplersInfoEXT = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT, + ePhysicalDeviceDescriptorPoolOverallocationFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV, + ePhysicalDeviceTileMemoryHeapFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM, + ePhysicalDeviceTileMemoryHeapPropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_PROPERTIES_QCOM, + eTileMemoryRequirementsQCOM = VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM, + eTileMemoryBindInfoQCOM = VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM, + eTileMemorySizeInfoQCOM = VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM, + eDisplaySurfaceStereoCreateInfoNV = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV, + eDisplayModeStereoPropertiesNV = VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV, + eVideoEncodeIntraRefreshCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR, + eVideoEncodeSessionIntraRefreshCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR, + eVideoEncodeIntraRefreshInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR, + eVideoReferenceIntraRefreshInfoKHR = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR, + ePhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR, + eVideoEncodeQuantizationMapCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_CAPABILITIES_KHR, + eVideoFormatQuantizationMapPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_QUANTIZATION_MAP_PROPERTIES_KHR, + eVideoEncodeQuantizationMapInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR, + eVideoEncodeQuantizationMapSessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_SESSION_PARAMETERS_CREATE_INFO_KHR, + ePhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR, + eVideoEncodeH264QuantizationMapCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUANTIZATION_MAP_CAPABILITIES_KHR, + eVideoEncodeH265QuantizationMapCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR, + eVideoFormatH265QuantizationMapPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_H265_QUANTIZATION_MAP_PROPERTIES_KHR, + eVideoEncodeAv1QuantizationMapCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUANTIZATION_MAP_CAPABILITIES_KHR, + eVideoFormatAv1QuantizationMapPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_AV1_QUANTIZATION_MAP_PROPERTIES_KHR, + ePhysicalDeviceRawAccessChainsFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV, + eExternalComputeQueueDeviceCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV, + eExternalComputeQueueCreateInfoNV = VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV, + eExternalComputeQueueDataParamsNV = VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV, + ePhysicalDeviceExternalComputeQueuePropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV, + ePhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, + ePhysicalDeviceCommandBufferInheritanceFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV, + ePhysicalDeviceMaintenance7FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR, + ePhysicalDeviceMaintenance7PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR, + ePhysicalDeviceLayeredApiPropertiesListKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR, + ePhysicalDeviceLayeredApiPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR, + ePhysicalDeviceLayeredApiVulkanPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR, + ePhysicalDeviceShaderAtomicFloat16VectorFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV, + ePhysicalDeviceShaderReplicatedCompositesFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT, + ePhysicalDeviceShaderFloat8FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT, + ePhysicalDeviceRayTracingValidationFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV, + ePhysicalDeviceClusterAccelerationStructureFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV, + ePhysicalDeviceClusterAccelerationStructurePropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_PROPERTIES_NV, + eClusterAccelerationStructureClustersBottomLevelInputNV = VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV, + eClusterAccelerationStructureTriangleClusterInputNV = VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_TRIANGLE_CLUSTER_INPUT_NV, + eClusterAccelerationStructureMoveObjectsInputNV = VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_MOVE_OBJECTS_INPUT_NV, + eClusterAccelerationStructureInputInfoNV = VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV, + eClusterAccelerationStructureCommandsInfoNV = VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV, + eRayTracingPipelineClusterAccelerationStructureCreateInfoNV = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CLUSTER_ACCELERATION_STRUCTURE_CREATE_INFO_NV, + ePhysicalDevicePartitionedAccelerationStructureFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV, + ePhysicalDevicePartitionedAccelerationStructurePropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_PROPERTIES_NV, + eWriteDescriptorSetPartitionedAccelerationStructureNV = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_PARTITIONED_ACCELERATION_STRUCTURE_NV, + ePartitionedAccelerationStructureInstancesInputNV = VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCES_INPUT_NV, + eBuildPartitionedAccelerationStructureInfoNV = VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV, + ePartitionedAccelerationStructureFlagsNV = VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_FLAGS_NV, + ePhysicalDeviceDeviceGeneratedCommandsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT, + ePhysicalDeviceDeviceGeneratedCommandsPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT, + eGeneratedCommandsMemoryRequirementsInfoEXT = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT, + eIndirectExecutionSetCreateInfoEXT = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT, + eGeneratedCommandsInfoEXT = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT, + eIndirectCommandsLayoutCreateInfoEXT = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT, + eIndirectCommandsLayoutTokenEXT = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT, + eWriteIndirectExecutionSetPipelineEXT = VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT, + eWriteIndirectExecutionSetShaderEXT = VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT, + eIndirectExecutionSetPipelineInfoEXT = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT, + eIndirectExecutionSetShaderInfoEXT = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT, + eIndirectExecutionSetShaderLayoutInfoEXT = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT, + eGeneratedCommandsPipelineInfoEXT = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT, + eGeneratedCommandsShaderInfoEXT = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT, + ePhysicalDeviceMaintenance8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR, + eMemoryBarrierAccessFlags3KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR, + ePhysicalDeviceImageAlignmentControlFeaturesMESA = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA, + ePhysicalDeviceImageAlignmentControlPropertiesMESA = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA, + eImageAlignmentControlCreateInfoMESA = VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA, + ePhysicalDeviceDepthClampControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT, + ePipelineViewportDepthClampControlCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT, + ePhysicalDeviceMaintenance9FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR, + ePhysicalDeviceMaintenance9PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR, + eQueueFamilyOwnershipTransferPropertiesKHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR, + ePhysicalDeviceVideoMaintenance2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR, + eVideoDecodeH264InlineSessionParametersInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR, + eVideoDecodeH265InlineSessionParametersInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR, + eVideoDecodeAv1InlineSessionParametersInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR, +#if defined( VK_USE_PLATFORM_OHOS ) + eOhSurfaceCreateInfoOHOS = VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS, +#endif /*VK_USE_PLATFORM_OHOS*/ + ePhysicalDeviceHdrVividFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI, + eHdrVividDynamicMetadataHUAWEI = VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI, + ePhysicalDeviceCooperativeMatrix2FeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV, + eCooperativeMatrixFlexibleDimensionsPropertiesNV = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV, + ePhysicalDeviceCooperativeMatrix2PropertiesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV, + ePhysicalDevicePipelineOpacityMicromapFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM, +#if defined( VK_USE_PLATFORM_METAL_EXT ) + eImportMemoryMetalHandleInfoEXT = VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT, + eMemoryMetalHandlePropertiesEXT = VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT, + eMemoryGetMetalHandleInfoEXT = VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT, +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + ePhysicalDeviceDepthClampZeroOneFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR, + ePhysicalDeviceDepthClampZeroOneFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT, + ePhysicalDeviceVertexAttributeRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT, + ePhysicalDeviceFormatPackFeaturesARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM, + ePhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE, + ePhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE, + ePipelineFragmentDensityMapLayeredCreateInfoVALVE = VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE, + ePhysicalDeviceRobustness2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR, + ePhysicalDeviceRobustness2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, + ePhysicalDeviceRobustness2PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR, + ePhysicalDeviceRobustness2PropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eSetPresentConfigNV = VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV, + ePhysicalDevicePresentMeteringFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + ePhysicalDeviceFragmentDensityMapOffsetFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT, + ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM, + ePhysicalDeviceFragmentDensityMapOffsetPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT, + ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM, + eRenderPassFragmentDensityMapOffsetEndInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT, + eSubpassFragmentDensityMapOffsetEndInfoQCOM = VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM, + eRenderingEndInfoEXT = VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT, + ePhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT, + ePhysicalDevicePresentModeFifoLatestReadyFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR, + ePhysicalDevicePresentModeFifoLatestReadyFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_EXT, + ePhysicalDevicePipelineCacheIncrementalModeFeaturesSEC = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC + }; + + // wrapper class for enum VkPipelineCacheHeaderVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCacheHeaderVersion.html + enum class PipelineCacheHeaderVersion + { + eOne = VK_PIPELINE_CACHE_HEADER_VERSION_ONE + }; + + // wrapper class for enum VkObjectType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkObjectType.html + enum class ObjectType + { + eUnknown = VK_OBJECT_TYPE_UNKNOWN, + eInstance = VK_OBJECT_TYPE_INSTANCE, + ePhysicalDevice = VK_OBJECT_TYPE_PHYSICAL_DEVICE, + eDevice = VK_OBJECT_TYPE_DEVICE, + eQueue = VK_OBJECT_TYPE_QUEUE, + eSemaphore = VK_OBJECT_TYPE_SEMAPHORE, + eCommandBuffer = VK_OBJECT_TYPE_COMMAND_BUFFER, + eFence = VK_OBJECT_TYPE_FENCE, + eDeviceMemory = VK_OBJECT_TYPE_DEVICE_MEMORY, + eBuffer = VK_OBJECT_TYPE_BUFFER, + eImage = VK_OBJECT_TYPE_IMAGE, + eEvent = VK_OBJECT_TYPE_EVENT, + eQueryPool = VK_OBJECT_TYPE_QUERY_POOL, + eBufferView = VK_OBJECT_TYPE_BUFFER_VIEW, + eImageView = VK_OBJECT_TYPE_IMAGE_VIEW, + eShaderModule = VK_OBJECT_TYPE_SHADER_MODULE, + ePipelineCache = VK_OBJECT_TYPE_PIPELINE_CACHE, + ePipelineLayout = VK_OBJECT_TYPE_PIPELINE_LAYOUT, + eRenderPass = VK_OBJECT_TYPE_RENDER_PASS, + ePipeline = VK_OBJECT_TYPE_PIPELINE, + eDescriptorSetLayout = VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, + eSampler = VK_OBJECT_TYPE_SAMPLER, + eDescriptorPool = VK_OBJECT_TYPE_DESCRIPTOR_POOL, + eDescriptorSet = VK_OBJECT_TYPE_DESCRIPTOR_SET, + eFramebuffer = VK_OBJECT_TYPE_FRAMEBUFFER, + eCommandPool = VK_OBJECT_TYPE_COMMAND_POOL, + eSamplerYcbcrConversion = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, + eSamplerYcbcrConversionKHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR, + eDescriptorUpdateTemplate = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, + eDescriptorUpdateTemplateKHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR, + ePrivateDataSlot = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, + ePrivateDataSlotEXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT, + eSurfaceKHR = VK_OBJECT_TYPE_SURFACE_KHR, + eSwapchainKHR = VK_OBJECT_TYPE_SWAPCHAIN_KHR, + eDisplayKHR = VK_OBJECT_TYPE_DISPLAY_KHR, + eDisplayModeKHR = VK_OBJECT_TYPE_DISPLAY_MODE_KHR, + eDebugReportCallbackEXT = VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT, + eVideoSessionKHR = VK_OBJECT_TYPE_VIDEO_SESSION_KHR, + eVideoSessionParametersKHR = VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR, + eCuModuleNVX = VK_OBJECT_TYPE_CU_MODULE_NVX, + eCuFunctionNVX = VK_OBJECT_TYPE_CU_FUNCTION_NVX, + eDebugUtilsMessengerEXT = VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, + eAccelerationStructureKHR = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR, + eValidationCacheEXT = VK_OBJECT_TYPE_VALIDATION_CACHE_EXT, + eAccelerationStructureNV = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV, + ePerformanceConfigurationINTEL = VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL, + eDeferredOperationKHR = VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR, + eIndirectCommandsLayoutNV = VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eCudaModuleNV = VK_OBJECT_TYPE_CUDA_MODULE_NV, + eCudaFunctionNV = VK_OBJECT_TYPE_CUDA_FUNCTION_NV, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ +#if defined( VK_USE_PLATFORM_FUCHSIA ) + eBufferCollectionFUCHSIA = VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA, +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + eMicromapEXT = VK_OBJECT_TYPE_MICROMAP_EXT, + eTensorARM = VK_OBJECT_TYPE_TENSOR_ARM, + eTensorViewARM = VK_OBJECT_TYPE_TENSOR_VIEW_ARM, + eOpticalFlowSessionNV = VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV, + eShaderEXT = VK_OBJECT_TYPE_SHADER_EXT, + ePipelineBinaryKHR = VK_OBJECT_TYPE_PIPELINE_BINARY_KHR, + eDataGraphPipelineSessionARM = VK_OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM, + eExternalComputeQueueNV = VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV, + eIndirectCommandsLayoutEXT = VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT, + eIndirectExecutionSetEXT = VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT + }; + + // wrapper class for enum VkVendorId, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVendorId.html + enum class VendorId + { + eKhronos = VK_VENDOR_ID_KHRONOS, + eVIV = VK_VENDOR_ID_VIV, + eVSI = VK_VENDOR_ID_VSI, + eKazan = VK_VENDOR_ID_KAZAN, + eCodeplay = VK_VENDOR_ID_CODEPLAY, + eMESA = VK_VENDOR_ID_MESA, + ePocl = VK_VENDOR_ID_POCL, + eMobileye = VK_VENDOR_ID_MOBILEYE + }; + + // wrapper class for enum VkFormat, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormat.html + enum class Format + { + eUndefined = VK_FORMAT_UNDEFINED, + eR4G4UnormPack8 = VK_FORMAT_R4G4_UNORM_PACK8, + eR4G4B4A4UnormPack16 = VK_FORMAT_R4G4B4A4_UNORM_PACK16, + eB4G4R4A4UnormPack16 = VK_FORMAT_B4G4R4A4_UNORM_PACK16, + eR5G6B5UnormPack16 = VK_FORMAT_R5G6B5_UNORM_PACK16, + eB5G6R5UnormPack16 = VK_FORMAT_B5G6R5_UNORM_PACK16, + eR5G5B5A1UnormPack16 = VK_FORMAT_R5G5B5A1_UNORM_PACK16, + eB5G5R5A1UnormPack16 = VK_FORMAT_B5G5R5A1_UNORM_PACK16, + eA1R5G5B5UnormPack16 = VK_FORMAT_A1R5G5B5_UNORM_PACK16, + eR8Unorm = VK_FORMAT_R8_UNORM, + eR8Snorm = VK_FORMAT_R8_SNORM, + eR8Uscaled = VK_FORMAT_R8_USCALED, + eR8Sscaled = VK_FORMAT_R8_SSCALED, + eR8Uint = VK_FORMAT_R8_UINT, + eR8Sint = VK_FORMAT_R8_SINT, + eR8Srgb = VK_FORMAT_R8_SRGB, + eR8G8Unorm = VK_FORMAT_R8G8_UNORM, + eR8G8Snorm = VK_FORMAT_R8G8_SNORM, + eR8G8Uscaled = VK_FORMAT_R8G8_USCALED, + eR8G8Sscaled = VK_FORMAT_R8G8_SSCALED, + eR8G8Uint = VK_FORMAT_R8G8_UINT, + eR8G8Sint = VK_FORMAT_R8G8_SINT, + eR8G8Srgb = VK_FORMAT_R8G8_SRGB, + eR8G8B8Unorm = VK_FORMAT_R8G8B8_UNORM, + eR8G8B8Snorm = VK_FORMAT_R8G8B8_SNORM, + eR8G8B8Uscaled = VK_FORMAT_R8G8B8_USCALED, + eR8G8B8Sscaled = VK_FORMAT_R8G8B8_SSCALED, + eR8G8B8Uint = VK_FORMAT_R8G8B8_UINT, + eR8G8B8Sint = VK_FORMAT_R8G8B8_SINT, + eR8G8B8Srgb = VK_FORMAT_R8G8B8_SRGB, + eB8G8R8Unorm = VK_FORMAT_B8G8R8_UNORM, + eB8G8R8Snorm = VK_FORMAT_B8G8R8_SNORM, + eB8G8R8Uscaled = VK_FORMAT_B8G8R8_USCALED, + eB8G8R8Sscaled = VK_FORMAT_B8G8R8_SSCALED, + eB8G8R8Uint = VK_FORMAT_B8G8R8_UINT, + eB8G8R8Sint = VK_FORMAT_B8G8R8_SINT, + eB8G8R8Srgb = VK_FORMAT_B8G8R8_SRGB, + eR8G8B8A8Unorm = VK_FORMAT_R8G8B8A8_UNORM, + eR8G8B8A8Snorm = VK_FORMAT_R8G8B8A8_SNORM, + eR8G8B8A8Uscaled = VK_FORMAT_R8G8B8A8_USCALED, + eR8G8B8A8Sscaled = VK_FORMAT_R8G8B8A8_SSCALED, + eR8G8B8A8Uint = VK_FORMAT_R8G8B8A8_UINT, + eR8G8B8A8Sint = VK_FORMAT_R8G8B8A8_SINT, + eR8G8B8A8Srgb = VK_FORMAT_R8G8B8A8_SRGB, + eB8G8R8A8Unorm = VK_FORMAT_B8G8R8A8_UNORM, + eB8G8R8A8Snorm = VK_FORMAT_B8G8R8A8_SNORM, + eB8G8R8A8Uscaled = VK_FORMAT_B8G8R8A8_USCALED, + eB8G8R8A8Sscaled = VK_FORMAT_B8G8R8A8_SSCALED, + eB8G8R8A8Uint = VK_FORMAT_B8G8R8A8_UINT, + eB8G8R8A8Sint = VK_FORMAT_B8G8R8A8_SINT, + eB8G8R8A8Srgb = VK_FORMAT_B8G8R8A8_SRGB, + eA8B8G8R8UnormPack32 = VK_FORMAT_A8B8G8R8_UNORM_PACK32, + eA8B8G8R8SnormPack32 = VK_FORMAT_A8B8G8R8_SNORM_PACK32, + eA8B8G8R8UscaledPack32 = VK_FORMAT_A8B8G8R8_USCALED_PACK32, + eA8B8G8R8SscaledPack32 = VK_FORMAT_A8B8G8R8_SSCALED_PACK32, + eA8B8G8R8UintPack32 = VK_FORMAT_A8B8G8R8_UINT_PACK32, + eA8B8G8R8SintPack32 = VK_FORMAT_A8B8G8R8_SINT_PACK32, + eA8B8G8R8SrgbPack32 = VK_FORMAT_A8B8G8R8_SRGB_PACK32, + eA2R10G10B10UnormPack32 = VK_FORMAT_A2R10G10B10_UNORM_PACK32, + eA2R10G10B10SnormPack32 = VK_FORMAT_A2R10G10B10_SNORM_PACK32, + eA2R10G10B10UscaledPack32 = VK_FORMAT_A2R10G10B10_USCALED_PACK32, + eA2R10G10B10SscaledPack32 = VK_FORMAT_A2R10G10B10_SSCALED_PACK32, + eA2R10G10B10UintPack32 = VK_FORMAT_A2R10G10B10_UINT_PACK32, + eA2R10G10B10SintPack32 = VK_FORMAT_A2R10G10B10_SINT_PACK32, + eA2B10G10R10UnormPack32 = VK_FORMAT_A2B10G10R10_UNORM_PACK32, + eA2B10G10R10SnormPack32 = VK_FORMAT_A2B10G10R10_SNORM_PACK32, + eA2B10G10R10UscaledPack32 = VK_FORMAT_A2B10G10R10_USCALED_PACK32, + eA2B10G10R10SscaledPack32 = VK_FORMAT_A2B10G10R10_SSCALED_PACK32, + eA2B10G10R10UintPack32 = VK_FORMAT_A2B10G10R10_UINT_PACK32, + eA2B10G10R10SintPack32 = VK_FORMAT_A2B10G10R10_SINT_PACK32, + eR16Unorm = VK_FORMAT_R16_UNORM, + eR16Snorm = VK_FORMAT_R16_SNORM, + eR16Uscaled = VK_FORMAT_R16_USCALED, + eR16Sscaled = VK_FORMAT_R16_SSCALED, + eR16Uint = VK_FORMAT_R16_UINT, + eR16Sint = VK_FORMAT_R16_SINT, + eR16Sfloat = VK_FORMAT_R16_SFLOAT, + eR16G16Unorm = VK_FORMAT_R16G16_UNORM, + eR16G16Snorm = VK_FORMAT_R16G16_SNORM, + eR16G16Uscaled = VK_FORMAT_R16G16_USCALED, + eR16G16Sscaled = VK_FORMAT_R16G16_SSCALED, + eR16G16Uint = VK_FORMAT_R16G16_UINT, + eR16G16Sint = VK_FORMAT_R16G16_SINT, + eR16G16Sfloat = VK_FORMAT_R16G16_SFLOAT, + eR16G16B16Unorm = VK_FORMAT_R16G16B16_UNORM, + eR16G16B16Snorm = VK_FORMAT_R16G16B16_SNORM, + eR16G16B16Uscaled = VK_FORMAT_R16G16B16_USCALED, + eR16G16B16Sscaled = VK_FORMAT_R16G16B16_SSCALED, + eR16G16B16Uint = VK_FORMAT_R16G16B16_UINT, + eR16G16B16Sint = VK_FORMAT_R16G16B16_SINT, + eR16G16B16Sfloat = VK_FORMAT_R16G16B16_SFLOAT, + eR16G16B16A16Unorm = VK_FORMAT_R16G16B16A16_UNORM, + eR16G16B16A16Snorm = VK_FORMAT_R16G16B16A16_SNORM, + eR16G16B16A16Uscaled = VK_FORMAT_R16G16B16A16_USCALED, + eR16G16B16A16Sscaled = VK_FORMAT_R16G16B16A16_SSCALED, + eR16G16B16A16Uint = VK_FORMAT_R16G16B16A16_UINT, + eR16G16B16A16Sint = VK_FORMAT_R16G16B16A16_SINT, + eR16G16B16A16Sfloat = VK_FORMAT_R16G16B16A16_SFLOAT, + eR32Uint = VK_FORMAT_R32_UINT, + eR32Sint = VK_FORMAT_R32_SINT, + eR32Sfloat = VK_FORMAT_R32_SFLOAT, + eR32G32Uint = VK_FORMAT_R32G32_UINT, + eR32G32Sint = VK_FORMAT_R32G32_SINT, + eR32G32Sfloat = VK_FORMAT_R32G32_SFLOAT, + eR32G32B32Uint = VK_FORMAT_R32G32B32_UINT, + eR32G32B32Sint = VK_FORMAT_R32G32B32_SINT, + eR32G32B32Sfloat = VK_FORMAT_R32G32B32_SFLOAT, + eR32G32B32A32Uint = VK_FORMAT_R32G32B32A32_UINT, + eR32G32B32A32Sint = VK_FORMAT_R32G32B32A32_SINT, + eR32G32B32A32Sfloat = VK_FORMAT_R32G32B32A32_SFLOAT, + eR64Uint = VK_FORMAT_R64_UINT, + eR64Sint = VK_FORMAT_R64_SINT, + eR64Sfloat = VK_FORMAT_R64_SFLOAT, + eR64G64Uint = VK_FORMAT_R64G64_UINT, + eR64G64Sint = VK_FORMAT_R64G64_SINT, + eR64G64Sfloat = VK_FORMAT_R64G64_SFLOAT, + eR64G64B64Uint = VK_FORMAT_R64G64B64_UINT, + eR64G64B64Sint = VK_FORMAT_R64G64B64_SINT, + eR64G64B64Sfloat = VK_FORMAT_R64G64B64_SFLOAT, + eR64G64B64A64Uint = VK_FORMAT_R64G64B64A64_UINT, + eR64G64B64A64Sint = VK_FORMAT_R64G64B64A64_SINT, + eR64G64B64A64Sfloat = VK_FORMAT_R64G64B64A64_SFLOAT, + eB10G11R11UfloatPack32 = VK_FORMAT_B10G11R11_UFLOAT_PACK32, + eE5B9G9R9UfloatPack32 = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, + eD16Unorm = VK_FORMAT_D16_UNORM, + eX8D24UnormPack32 = VK_FORMAT_X8_D24_UNORM_PACK32, + eD32Sfloat = VK_FORMAT_D32_SFLOAT, + eS8Uint = VK_FORMAT_S8_UINT, + eD16UnormS8Uint = VK_FORMAT_D16_UNORM_S8_UINT, + eD24UnormS8Uint = VK_FORMAT_D24_UNORM_S8_UINT, + eD32SfloatS8Uint = VK_FORMAT_D32_SFLOAT_S8_UINT, + eBc1RgbUnormBlock = VK_FORMAT_BC1_RGB_UNORM_BLOCK, + eBc1RgbSrgbBlock = VK_FORMAT_BC1_RGB_SRGB_BLOCK, + eBc1RgbaUnormBlock = VK_FORMAT_BC1_RGBA_UNORM_BLOCK, + eBc1RgbaSrgbBlock = VK_FORMAT_BC1_RGBA_SRGB_BLOCK, + eBc2UnormBlock = VK_FORMAT_BC2_UNORM_BLOCK, + eBc2SrgbBlock = VK_FORMAT_BC2_SRGB_BLOCK, + eBc3UnormBlock = VK_FORMAT_BC3_UNORM_BLOCK, + eBc3SrgbBlock = VK_FORMAT_BC3_SRGB_BLOCK, + eBc4UnormBlock = VK_FORMAT_BC4_UNORM_BLOCK, + eBc4SnormBlock = VK_FORMAT_BC4_SNORM_BLOCK, + eBc5UnormBlock = VK_FORMAT_BC5_UNORM_BLOCK, + eBc5SnormBlock = VK_FORMAT_BC5_SNORM_BLOCK, + eBc6HUfloatBlock = VK_FORMAT_BC6H_UFLOAT_BLOCK, + eBc6HSfloatBlock = VK_FORMAT_BC6H_SFLOAT_BLOCK, + eBc7UnormBlock = VK_FORMAT_BC7_UNORM_BLOCK, + eBc7SrgbBlock = VK_FORMAT_BC7_SRGB_BLOCK, + eEtc2R8G8B8UnormBlock = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, + eEtc2R8G8B8SrgbBlock = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, + eEtc2R8G8B8A1UnormBlock = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, + eEtc2R8G8B8A1SrgbBlock = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, + eEtc2R8G8B8A8UnormBlock = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, + eEtc2R8G8B8A8SrgbBlock = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, + eEacR11UnormBlock = VK_FORMAT_EAC_R11_UNORM_BLOCK, + eEacR11SnormBlock = VK_FORMAT_EAC_R11_SNORM_BLOCK, + eEacR11G11UnormBlock = VK_FORMAT_EAC_R11G11_UNORM_BLOCK, + eEacR11G11SnormBlock = VK_FORMAT_EAC_R11G11_SNORM_BLOCK, + eAstc4x4UnormBlock = VK_FORMAT_ASTC_4x4_UNORM_BLOCK, + eAstc4x4SrgbBlock = VK_FORMAT_ASTC_4x4_SRGB_BLOCK, + eAstc5x4UnormBlock = VK_FORMAT_ASTC_5x4_UNORM_BLOCK, + eAstc5x4SrgbBlock = VK_FORMAT_ASTC_5x4_SRGB_BLOCK, + eAstc5x5UnormBlock = VK_FORMAT_ASTC_5x5_UNORM_BLOCK, + eAstc5x5SrgbBlock = VK_FORMAT_ASTC_5x5_SRGB_BLOCK, + eAstc6x5UnormBlock = VK_FORMAT_ASTC_6x5_UNORM_BLOCK, + eAstc6x5SrgbBlock = VK_FORMAT_ASTC_6x5_SRGB_BLOCK, + eAstc6x6UnormBlock = VK_FORMAT_ASTC_6x6_UNORM_BLOCK, + eAstc6x6SrgbBlock = VK_FORMAT_ASTC_6x6_SRGB_BLOCK, + eAstc8x5UnormBlock = VK_FORMAT_ASTC_8x5_UNORM_BLOCK, + eAstc8x5SrgbBlock = VK_FORMAT_ASTC_8x5_SRGB_BLOCK, + eAstc8x6UnormBlock = VK_FORMAT_ASTC_8x6_UNORM_BLOCK, + eAstc8x6SrgbBlock = VK_FORMAT_ASTC_8x6_SRGB_BLOCK, + eAstc8x8UnormBlock = VK_FORMAT_ASTC_8x8_UNORM_BLOCK, + eAstc8x8SrgbBlock = VK_FORMAT_ASTC_8x8_SRGB_BLOCK, + eAstc10x5UnormBlock = VK_FORMAT_ASTC_10x5_UNORM_BLOCK, + eAstc10x5SrgbBlock = VK_FORMAT_ASTC_10x5_SRGB_BLOCK, + eAstc10x6UnormBlock = VK_FORMAT_ASTC_10x6_UNORM_BLOCK, + eAstc10x6SrgbBlock = VK_FORMAT_ASTC_10x6_SRGB_BLOCK, + eAstc10x8UnormBlock = VK_FORMAT_ASTC_10x8_UNORM_BLOCK, + eAstc10x8SrgbBlock = VK_FORMAT_ASTC_10x8_SRGB_BLOCK, + eAstc10x10UnormBlock = VK_FORMAT_ASTC_10x10_UNORM_BLOCK, + eAstc10x10SrgbBlock = VK_FORMAT_ASTC_10x10_SRGB_BLOCK, + eAstc12x10UnormBlock = VK_FORMAT_ASTC_12x10_UNORM_BLOCK, + eAstc12x10SrgbBlock = VK_FORMAT_ASTC_12x10_SRGB_BLOCK, + eAstc12x12UnormBlock = VK_FORMAT_ASTC_12x12_UNORM_BLOCK, + eAstc12x12SrgbBlock = VK_FORMAT_ASTC_12x12_SRGB_BLOCK, + eG8B8G8R8422Unorm = VK_FORMAT_G8B8G8R8_422_UNORM, + eG8B8G8R8422UnormKHR = VK_FORMAT_G8B8G8R8_422_UNORM_KHR, + eB8G8R8G8422Unorm = VK_FORMAT_B8G8R8G8_422_UNORM, + eB8G8R8G8422UnormKHR = VK_FORMAT_B8G8R8G8_422_UNORM_KHR, + eG8B8R83Plane420Unorm = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, + eG8B8R83Plane420UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR, + eG8B8R82Plane420Unorm = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, + eG8B8R82Plane420UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR, + eG8B8R83Plane422Unorm = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, + eG8B8R83Plane422UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR, + eG8B8R82Plane422Unorm = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, + eG8B8R82Plane422UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR, + eG8B8R83Plane444Unorm = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, + eG8B8R83Plane444UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR, + eR10X6UnormPack16 = VK_FORMAT_R10X6_UNORM_PACK16, + eR10X6UnormPack16KHR = VK_FORMAT_R10X6_UNORM_PACK16_KHR, + eR10X6G10X6Unorm2Pack16 = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, + eR10X6G10X6Unorm2Pack16KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR, + eR10X6G10X6B10X6A10X6Unorm4Pack16 = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, + eR10X6G10X6B10X6A10X6Unorm4Pack16KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR, + eG10X6B10X6G10X6R10X6422Unorm4Pack16 = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, + eG10X6B10X6G10X6R10X6422Unorm4Pack16KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR, + eB10X6G10X6R10X6G10X6422Unorm4Pack16 = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, + eB10X6G10X6R10X6G10X6422Unorm4Pack16KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR, + eG10X6B10X6R10X63Plane420Unorm3Pack16 = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, + eG10X6B10X6R10X63Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR, + eG10X6B10X6R10X62Plane420Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, + eG10X6B10X6R10X62Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR, + eG10X6B10X6R10X63Plane422Unorm3Pack16 = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, + eG10X6B10X6R10X63Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR, + eG10X6B10X6R10X62Plane422Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, + eG10X6B10X6R10X62Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR, + eG10X6B10X6R10X63Plane444Unorm3Pack16 = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, + eG10X6B10X6R10X63Plane444Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR, + eR12X4UnormPack16 = VK_FORMAT_R12X4_UNORM_PACK16, + eR12X4UnormPack16KHR = VK_FORMAT_R12X4_UNORM_PACK16_KHR, + eR12X4G12X4Unorm2Pack16 = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, + eR12X4G12X4Unorm2Pack16KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR, + eR12X4G12X4B12X4A12X4Unorm4Pack16 = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, + eR12X4G12X4B12X4A12X4Unorm4Pack16KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR, + eG12X4B12X4G12X4R12X4422Unorm4Pack16 = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, + eG12X4B12X4G12X4R12X4422Unorm4Pack16KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR, + eB12X4G12X4R12X4G12X4422Unorm4Pack16 = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, + eB12X4G12X4R12X4G12X4422Unorm4Pack16KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR, + eG12X4B12X4R12X43Plane420Unorm3Pack16 = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, + eG12X4B12X4R12X43Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR, + eG12X4B12X4R12X42Plane420Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, + eG12X4B12X4R12X42Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR, + eG12X4B12X4R12X43Plane422Unorm3Pack16 = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, + eG12X4B12X4R12X43Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR, + eG12X4B12X4R12X42Plane422Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, + eG12X4B12X4R12X42Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR, + eG12X4B12X4R12X43Plane444Unorm3Pack16 = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, + eG12X4B12X4R12X43Plane444Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR, + eG16B16G16R16422Unorm = VK_FORMAT_G16B16G16R16_422_UNORM, + eG16B16G16R16422UnormKHR = VK_FORMAT_G16B16G16R16_422_UNORM_KHR, + eB16G16R16G16422Unorm = VK_FORMAT_B16G16R16G16_422_UNORM, + eB16G16R16G16422UnormKHR = VK_FORMAT_B16G16R16G16_422_UNORM_KHR, + eG16B16R163Plane420Unorm = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, + eG16B16R163Plane420UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR, + eG16B16R162Plane420Unorm = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, + eG16B16R162Plane420UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR, + eG16B16R163Plane422Unorm = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, + eG16B16R163Plane422UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR, + eG16B16R162Plane422Unorm = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, + eG16B16R162Plane422UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR, + eG16B16R163Plane444Unorm = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, + eG16B16R163Plane444UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR, + eG8B8R82Plane444Unorm = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, + eG8B8R82Plane444UnormEXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT, + eG10X6B10X6R10X62Plane444Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, + eG10X6B10X6R10X62Plane444Unorm3Pack16EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT, + eG12X4B12X4R12X42Plane444Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, + eG12X4B12X4R12X42Plane444Unorm3Pack16EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT, + eG16B16R162Plane444Unorm = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, + eG16B16R162Plane444UnormEXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT, + eA4R4G4B4UnormPack16 = VK_FORMAT_A4R4G4B4_UNORM_PACK16, + eA4R4G4B4UnormPack16EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, + eA4B4G4R4UnormPack16 = VK_FORMAT_A4B4G4R4_UNORM_PACK16, + eA4B4G4R4UnormPack16EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, + eAstc4x4SfloatBlock = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, + eAstc4x4SfloatBlockEXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, + eAstc5x4SfloatBlock = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, + eAstc5x4SfloatBlockEXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, + eAstc5x5SfloatBlock = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, + eAstc5x5SfloatBlockEXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, + eAstc6x5SfloatBlock = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, + eAstc6x5SfloatBlockEXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, + eAstc6x6SfloatBlock = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, + eAstc6x6SfloatBlockEXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, + eAstc8x5SfloatBlock = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, + eAstc8x5SfloatBlockEXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, + eAstc8x6SfloatBlock = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, + eAstc8x6SfloatBlockEXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, + eAstc8x8SfloatBlock = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, + eAstc8x8SfloatBlockEXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, + eAstc10x5SfloatBlock = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, + eAstc10x5SfloatBlockEXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, + eAstc10x6SfloatBlock = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, + eAstc10x6SfloatBlockEXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, + eAstc10x8SfloatBlock = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, + eAstc10x8SfloatBlockEXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, + eAstc10x10SfloatBlock = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, + eAstc10x10SfloatBlockEXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, + eAstc12x10SfloatBlock = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, + eAstc12x10SfloatBlockEXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, + eAstc12x12SfloatBlock = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, + eAstc12x12SfloatBlockEXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, + eA1B5G5R5UnormPack16 = VK_FORMAT_A1B5G5R5_UNORM_PACK16, + eA1B5G5R5UnormPack16KHR = VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR, + eA8Unorm = VK_FORMAT_A8_UNORM, + eA8UnormKHR = VK_FORMAT_A8_UNORM_KHR, + ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, + ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, + ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, + ePvrtc24BppUnormBlockIMG = VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, + ePvrtc12BppSrgbBlockIMG = VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, + ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, + ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, + ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG, + eR8BoolARM = VK_FORMAT_R8_BOOL_ARM, + eR16G16Sfixed5NV = VK_FORMAT_R16G16_SFIXED5_NV, + eR16G16S105NV = VK_FORMAT_R16G16_S10_5_NV, + eR10X6UintPack16ARM = VK_FORMAT_R10X6_UINT_PACK16_ARM, + eR10X6G10X6Uint2Pack16ARM = VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM, + eR10X6G10X6B10X6A10X6Uint4Pack16ARM = VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM, + eR12X4UintPack16ARM = VK_FORMAT_R12X4_UINT_PACK16_ARM, + eR12X4G12X4Uint2Pack16ARM = VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM, + eR12X4G12X4B12X4A12X4Uint4Pack16ARM = VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM, + eR14X2UintPack16ARM = VK_FORMAT_R14X2_UINT_PACK16_ARM, + eR14X2G14X2Uint2Pack16ARM = VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM, + eR14X2G14X2B14X2A14X2Uint4Pack16ARM = VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM, + eR14X2UnormPack16ARM = VK_FORMAT_R14X2_UNORM_PACK16_ARM, + eR14X2G14X2Unorm2Pack16ARM = VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM, + eR14X2G14X2B14X2A14X2Unorm4Pack16ARM = VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM, + eG14X2B14X2R14X22Plane420Unorm3Pack16ARM = VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM, + eG14X2B14X2R14X22Plane422Unorm3Pack16ARM = VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM + }; + + // wrapper class for enum VkFormatFeatureFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatFeatureFlagBits.html + enum class FormatFeatureFlagBits : VkFormatFeatureFlags + { + eSampledImage = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, + eStorageImage = VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, + eStorageImageAtomic = VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT, + eUniformTexelBuffer = VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT, + eStorageTexelBuffer = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT, + eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT, + eVertexBuffer = VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT, + eColorAttachment = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, + eColorAttachmentBlend = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, + eDepthStencilAttachment = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, + eBlitSrc = VK_FORMAT_FEATURE_BLIT_SRC_BIT, + eBlitDst = VK_FORMAT_FEATURE_BLIT_DST_BIT, + eSampledImageFilterLinear = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, + eTransferSrc = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, + eTransferSrcKHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR, + eTransferDst = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, + eTransferDstKHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR, + eMidpointChromaSamples = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, + eMidpointChromaSamplesKHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR, + eSampledImageYcbcrConversionLinearFilter = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, + eSampledImageYcbcrConversionLinearFilterKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR, + eSampledImageYcbcrConversionSeparateReconstructionFilter = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, + eSampledImageYcbcrConversionSeparateReconstructionFilterKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR, + eSampledImageYcbcrConversionChromaReconstructionExplicit = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, + eSampledImageYcbcrConversionChromaReconstructionExplicitKHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR, + eSampledImageYcbcrConversionChromaReconstructionExplicitForceable = + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, + eSampledImageYcbcrConversionChromaReconstructionExplicitForceableKHR = + VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR, + eDisjoint = VK_FORMAT_FEATURE_DISJOINT_BIT, + eDisjointKHR = VK_FORMAT_FEATURE_DISJOINT_BIT_KHR, + eCositedChromaSamples = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, + eCositedChromaSamplesKHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR, + eSampledImageFilterMinmax = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, + eSampledImageFilterMinmaxEXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT, + eVideoDecodeOutputKHR = VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR, + eVideoDecodeDpbKHR = VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR, + eAccelerationStructureVertexBufferKHR = VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR, + eSampledImageFilterCubicEXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT, + eSampledImageFilterCubicIMG = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG, + eFragmentDensityMapEXT = VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT, + eFragmentShadingRateAttachmentKHR = VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eVideoEncodeInputKHR = VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR, + eVideoEncodeDpbKHR = VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR + }; + + // wrapper using for bitmask VkFormatFeatureFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatFeatureFlags.html + using FormatFeatureFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkFormatFeatureFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR FormatFeatureFlags allFlags = + FormatFeatureFlagBits::eSampledImage | FormatFeatureFlagBits::eStorageImage | FormatFeatureFlagBits::eStorageImageAtomic | + FormatFeatureFlagBits::eUniformTexelBuffer | FormatFeatureFlagBits::eStorageTexelBuffer | FormatFeatureFlagBits::eStorageTexelBufferAtomic | + FormatFeatureFlagBits::eVertexBuffer | FormatFeatureFlagBits::eColorAttachment | FormatFeatureFlagBits::eColorAttachmentBlend | + FormatFeatureFlagBits::eDepthStencilAttachment | FormatFeatureFlagBits::eBlitSrc | FormatFeatureFlagBits::eBlitDst | + FormatFeatureFlagBits::eSampledImageFilterLinear | FormatFeatureFlagBits::eTransferSrc | FormatFeatureFlagBits::eTransferDst | + FormatFeatureFlagBits::eMidpointChromaSamples | FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilter | + FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilter | + FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicit | + FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable | FormatFeatureFlagBits::eDisjoint | + FormatFeatureFlagBits::eCositedChromaSamples | FormatFeatureFlagBits::eSampledImageFilterMinmax | FormatFeatureFlagBits::eVideoDecodeOutputKHR | + FormatFeatureFlagBits::eVideoDecodeDpbKHR | FormatFeatureFlagBits::eAccelerationStructureVertexBufferKHR | + FormatFeatureFlagBits::eSampledImageFilterCubicEXT | FormatFeatureFlagBits::eFragmentDensityMapEXT | + FormatFeatureFlagBits::eFragmentShadingRateAttachmentKHR | FormatFeatureFlagBits::eVideoEncodeInputKHR | FormatFeatureFlagBits::eVideoEncodeDpbKHR; + }; + + // wrapper class for enum VkImageCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCreateFlagBits.html + enum class ImageCreateFlagBits : VkImageCreateFlags + { + eSparseBinding = VK_IMAGE_CREATE_SPARSE_BINDING_BIT, + eSparseResidency = VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, + eSparseAliased = VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, + eMutableFormat = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, + eCubeCompatible = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, + eAlias = VK_IMAGE_CREATE_ALIAS_BIT, + eAliasKHR = VK_IMAGE_CREATE_ALIAS_BIT_KHR, + eSplitInstanceBindRegions = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, + eSplitInstanceBindRegionsKHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR, + e2DArrayCompatible = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, + e2DArrayCompatibleKHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR, + eBlockTexelViewCompatible = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, + eBlockTexelViewCompatibleKHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR, + eExtendedUsage = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, + eExtendedUsageKHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR, + eProtected = VK_IMAGE_CREATE_PROTECTED_BIT, + eDisjoint = VK_IMAGE_CREATE_DISJOINT_BIT, + eDisjointKHR = VK_IMAGE_CREATE_DISJOINT_BIT_KHR, + eCornerSampledNV = VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, + eSampleLocationsCompatibleDepthEXT = VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT, + eSubsampledEXT = VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT, + eDescriptorBufferCaptureReplayEXT = VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, + eMultisampledRenderToSingleSampledEXT = VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT, + e2DViewCompatibleEXT = VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT, + eVideoProfileIndependentKHR = VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, + eFragmentDensityMapOffsetEXT = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, + eFragmentDensityMapOffsetQCOM = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM + }; + + // wrapper using for bitmask VkImageCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCreateFlags.html + using ImageCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageCreateFlags allFlags = + ImageCreateFlagBits::eSparseBinding | ImageCreateFlagBits::eSparseResidency | ImageCreateFlagBits::eSparseAliased | ImageCreateFlagBits::eMutableFormat | + ImageCreateFlagBits::eCubeCompatible | ImageCreateFlagBits::eAlias | ImageCreateFlagBits::eSplitInstanceBindRegions | + ImageCreateFlagBits::e2DArrayCompatible | ImageCreateFlagBits::eBlockTexelViewCompatible | ImageCreateFlagBits::eExtendedUsage | + ImageCreateFlagBits::eProtected | ImageCreateFlagBits::eDisjoint | ImageCreateFlagBits::eCornerSampledNV | + ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT | ImageCreateFlagBits::eSubsampledEXT | ImageCreateFlagBits::eDescriptorBufferCaptureReplayEXT | + ImageCreateFlagBits::eMultisampledRenderToSingleSampledEXT | ImageCreateFlagBits::e2DViewCompatibleEXT | + ImageCreateFlagBits::eVideoProfileIndependentKHR | ImageCreateFlagBits::eFragmentDensityMapOffsetEXT; + }; + + // wrapper class for enum VkImageTiling, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageTiling.html + enum class ImageTiling + { + eOptimal = VK_IMAGE_TILING_OPTIMAL, + eLinear = VK_IMAGE_TILING_LINEAR, + eDrmFormatModifierEXT = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT + }; + + // wrapper class for enum VkImageType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageType.html + enum class ImageType + { + e1D = VK_IMAGE_TYPE_1D, + e2D = VK_IMAGE_TYPE_2D, + e3D = VK_IMAGE_TYPE_3D + }; + + // wrapper class for enum VkImageUsageFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageUsageFlagBits.html + enum class ImageUsageFlagBits : VkImageUsageFlags + { + eTransferSrc = VK_IMAGE_USAGE_TRANSFER_SRC_BIT, + eTransferDst = VK_IMAGE_USAGE_TRANSFER_DST_BIT, + eSampled = VK_IMAGE_USAGE_SAMPLED_BIT, + eStorage = VK_IMAGE_USAGE_STORAGE_BIT, + eColorAttachment = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, + eDepthStencilAttachment = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + eTransientAttachment = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, + eInputAttachment = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, + eHostTransfer = VK_IMAGE_USAGE_HOST_TRANSFER_BIT, + eHostTransferEXT = VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT, + eVideoDecodeDstKHR = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, + eVideoDecodeSrcKHR = VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, + eVideoDecodeDpbKHR = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, + eFragmentDensityMapEXT = VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, + eFragmentShadingRateAttachmentKHR = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eShadingRateImageNV = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, + eVideoEncodeDstKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR, + eVideoEncodeSrcKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, + eVideoEncodeDpbKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, + eAttachmentFeedbackLoopEXT = VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, + eInvocationMaskHUAWEI = VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI, + eSampleWeightQCOM = VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM, + eSampleBlockMatchQCOM = VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM, + eTensorAliasingARM = VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARM, + eTileMemoryQCOM = VK_IMAGE_USAGE_TILE_MEMORY_BIT_QCOM, + eVideoEncodeQuantizationDeltaMapKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, + eVideoEncodeEmphasisMapKHR = VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR + }; + + // wrapper using for bitmask VkImageUsageFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageUsageFlags.html + using ImageUsageFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageUsageFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageUsageFlags allFlags = + ImageUsageFlagBits::eTransferSrc | ImageUsageFlagBits::eTransferDst | ImageUsageFlagBits::eSampled | ImageUsageFlagBits::eStorage | + ImageUsageFlagBits::eColorAttachment | ImageUsageFlagBits::eDepthStencilAttachment | ImageUsageFlagBits::eTransientAttachment | + ImageUsageFlagBits::eInputAttachment | ImageUsageFlagBits::eHostTransfer | ImageUsageFlagBits::eVideoDecodeDstKHR | + ImageUsageFlagBits::eVideoDecodeSrcKHR | ImageUsageFlagBits::eVideoDecodeDpbKHR | ImageUsageFlagBits::eFragmentDensityMapEXT | + ImageUsageFlagBits::eFragmentShadingRateAttachmentKHR | ImageUsageFlagBits::eVideoEncodeDstKHR | ImageUsageFlagBits::eVideoEncodeSrcKHR | + ImageUsageFlagBits::eVideoEncodeDpbKHR | ImageUsageFlagBits::eAttachmentFeedbackLoopEXT | ImageUsageFlagBits::eInvocationMaskHUAWEI | + ImageUsageFlagBits::eSampleWeightQCOM | ImageUsageFlagBits::eSampleBlockMatchQCOM | ImageUsageFlagBits::eTensorAliasingARM | + ImageUsageFlagBits::eTileMemoryQCOM | ImageUsageFlagBits::eVideoEncodeQuantizationDeltaMapKHR | ImageUsageFlagBits::eVideoEncodeEmphasisMapKHR; + }; + + // wrapper class for enum VkInstanceCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkInstanceCreateFlagBits.html + enum class InstanceCreateFlagBits : VkInstanceCreateFlags + { + eEnumeratePortabilityKHR = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR + }; + + // wrapper using for bitmask VkInstanceCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkInstanceCreateFlags.html + using InstanceCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkInstanceCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR InstanceCreateFlags allFlags = InstanceCreateFlagBits::eEnumeratePortabilityKHR; + }; + + // wrapper class for enum VkInternalAllocationType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkInternalAllocationType.html + enum class InternalAllocationType + { + eExecutable = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + }; + + // wrapper class for enum VkMemoryHeapFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryHeapFlagBits.html + enum class MemoryHeapFlagBits : VkMemoryHeapFlags + { + eDeviceLocal = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT, + eMultiInstance = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, + eMultiInstanceKHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR, + eTileMemoryQCOM = VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM + }; + + // wrapper using for bitmask VkMemoryHeapFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryHeapFlags.html + using MemoryHeapFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkMemoryHeapFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MemoryHeapFlags allFlags = + MemoryHeapFlagBits::eDeviceLocal | MemoryHeapFlagBits::eMultiInstance | MemoryHeapFlagBits::eTileMemoryQCOM; + }; + + // wrapper class for enum VkMemoryPropertyFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryPropertyFlagBits.html + enum class MemoryPropertyFlagBits : VkMemoryPropertyFlags + { + eDeviceLocal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, + eHostVisible = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, + eHostCoherent = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, + eHostCached = VK_MEMORY_PROPERTY_HOST_CACHED_BIT, + eLazilyAllocated = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT, + eProtected = VK_MEMORY_PROPERTY_PROTECTED_BIT, + eDeviceCoherentAMD = VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD, + eDeviceUncachedAMD = VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD, + eRdmaCapableNV = VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV + }; + + // wrapper using for bitmask VkMemoryPropertyFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryPropertyFlags.html + using MemoryPropertyFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkMemoryPropertyFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MemoryPropertyFlags allFlags = + MemoryPropertyFlagBits::eDeviceLocal | MemoryPropertyFlagBits::eHostVisible | MemoryPropertyFlagBits::eHostCoherent | + MemoryPropertyFlagBits::eHostCached | MemoryPropertyFlagBits::eLazilyAllocated | MemoryPropertyFlagBits::eProtected | + MemoryPropertyFlagBits::eDeviceCoherentAMD | MemoryPropertyFlagBits::eDeviceUncachedAMD | MemoryPropertyFlagBits::eRdmaCapableNV; + }; + + // wrapper class for enum VkPhysicalDeviceType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceType.html + enum class PhysicalDeviceType + { + eOther = VK_PHYSICAL_DEVICE_TYPE_OTHER, + eIntegratedGpu = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + eDiscreteGpu = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + eVirtualGpu = VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, + eCpu = VK_PHYSICAL_DEVICE_TYPE_CPU + }; + + // wrapper class for enum VkQueueFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFlagBits.html + enum class QueueFlagBits : VkQueueFlags + { + eGraphics = VK_QUEUE_GRAPHICS_BIT, + eCompute = VK_QUEUE_COMPUTE_BIT, + eTransfer = VK_QUEUE_TRANSFER_BIT, + eSparseBinding = VK_QUEUE_SPARSE_BINDING_BIT, + eProtected = VK_QUEUE_PROTECTED_BIT, + eVideoDecodeKHR = VK_QUEUE_VIDEO_DECODE_BIT_KHR, + eVideoEncodeKHR = VK_QUEUE_VIDEO_ENCODE_BIT_KHR, + eOpticalFlowNV = VK_QUEUE_OPTICAL_FLOW_BIT_NV, + eDataGraphARM = VK_QUEUE_DATA_GRAPH_BIT_ARM + }; + + // wrapper using for bitmask VkQueueFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFlags.html + using QueueFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkQueueFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR QueueFlags allFlags = QueueFlagBits::eGraphics | QueueFlagBits::eCompute | QueueFlagBits::eTransfer | + QueueFlagBits::eSparseBinding | QueueFlagBits::eProtected | QueueFlagBits::eVideoDecodeKHR | + QueueFlagBits::eVideoEncodeKHR | QueueFlagBits::eOpticalFlowNV | QueueFlagBits::eDataGraphARM; + }; + + // wrapper class for enum VkSampleCountFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSampleCountFlagBits.html + enum class SampleCountFlagBits : VkSampleCountFlags + { + e1 = VK_SAMPLE_COUNT_1_BIT, + e2 = VK_SAMPLE_COUNT_2_BIT, + e4 = VK_SAMPLE_COUNT_4_BIT, + e8 = VK_SAMPLE_COUNT_8_BIT, + e16 = VK_SAMPLE_COUNT_16_BIT, + e32 = VK_SAMPLE_COUNT_32_BIT, + e64 = VK_SAMPLE_COUNT_64_BIT + }; + + // wrapper using for bitmask VkSampleCountFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSampleCountFlags.html + using SampleCountFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSampleCountFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SampleCountFlags allFlags = SampleCountFlagBits::e1 | SampleCountFlagBits::e2 | SampleCountFlagBits::e4 | + SampleCountFlagBits::e8 | SampleCountFlagBits::e16 | SampleCountFlagBits::e32 | + SampleCountFlagBits::e64; + }; + + // wrapper class for enum VkSystemAllocationScope, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSystemAllocationScope.html + enum class SystemAllocationScope + { + eCommand = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND, + eObject = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT, + eCache = VK_SYSTEM_ALLOCATION_SCOPE_CACHE, + eDevice = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE, + eInstance = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE + }; + + enum class DeviceCreateFlagBits : VkDeviceCreateFlags + { + }; + + // wrapper using for bitmask VkDeviceCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceCreateFlags.html + using DeviceCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DeviceCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkDeviceQueueCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceQueueCreateFlagBits.html + enum class DeviceQueueCreateFlagBits : VkDeviceQueueCreateFlags + { + eProtected = VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT + }; + + // wrapper using for bitmask VkDeviceQueueCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceQueueCreateFlags.html + using DeviceQueueCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDeviceQueueCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DeviceQueueCreateFlags allFlags = DeviceQueueCreateFlagBits::eProtected; + }; + + // wrapper class for enum VkPipelineStageFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineStageFlagBits.html + enum class PipelineStageFlagBits : VkPipelineStageFlags + { + eTopOfPipe = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, + eDrawIndirect = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, + eVertexInput = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, + eVertexShader = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, + eTessellationControlShader = VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT, + eTessellationEvaluationShader = VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT, + eGeometryShader = VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT, + eFragmentShader = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + eEarlyFragmentTests = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, + eLateFragmentTests = VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, + eColorAttachmentOutput = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + eComputeShader = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + eTransfer = VK_PIPELINE_STAGE_TRANSFER_BIT, + eBottomOfPipe = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, + eHost = VK_PIPELINE_STAGE_HOST_BIT, + eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, + eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + eNone = VK_PIPELINE_STAGE_NONE, + eNoneKHR = VK_PIPELINE_STAGE_NONE_KHR, + eTransformFeedbackEXT = VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT, + eConditionalRenderingEXT = VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, + eAccelerationStructureBuildKHR = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV, + eRayTracingShaderKHR = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, + eRayTracingShaderNV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV, + eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT, + eFragmentShadingRateAttachmentKHR = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eShadingRateImageNV = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, + eTaskShaderEXT = VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT, + eTaskShaderNV = VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV, + eMeshShaderEXT = VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT, + eMeshShaderNV = VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV, + eCommandPreprocessEXT = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT, + eCommandPreprocessNV = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV + }; + + // wrapper using for bitmask VkPipelineStageFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineStageFlags.html + using PipelineStageFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineStageFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineStageFlags allFlags = + PipelineStageFlagBits::eTopOfPipe | PipelineStageFlagBits::eDrawIndirect | PipelineStageFlagBits::eVertexInput | PipelineStageFlagBits::eVertexShader | + PipelineStageFlagBits::eTessellationControlShader | PipelineStageFlagBits::eTessellationEvaluationShader | PipelineStageFlagBits::eGeometryShader | + PipelineStageFlagBits::eFragmentShader | PipelineStageFlagBits::eEarlyFragmentTests | PipelineStageFlagBits::eLateFragmentTests | + PipelineStageFlagBits::eColorAttachmentOutput | PipelineStageFlagBits::eComputeShader | PipelineStageFlagBits::eTransfer | + PipelineStageFlagBits::eBottomOfPipe | PipelineStageFlagBits::eHost | PipelineStageFlagBits::eAllGraphics | PipelineStageFlagBits::eAllCommands | + PipelineStageFlagBits::eNone | PipelineStageFlagBits::eTransformFeedbackEXT | PipelineStageFlagBits::eConditionalRenderingEXT | + PipelineStageFlagBits::eAccelerationStructureBuildKHR | PipelineStageFlagBits::eRayTracingShaderKHR | PipelineStageFlagBits::eFragmentDensityProcessEXT | + PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR | PipelineStageFlagBits::eTaskShaderEXT | PipelineStageFlagBits::eMeshShaderEXT | + PipelineStageFlagBits::eCommandPreprocessEXT; + }; + + // wrapper class for enum VkMemoryMapFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryMapFlagBits.html + enum class MemoryMapFlagBits : VkMemoryMapFlags + { + ePlacedEXT = VK_MEMORY_MAP_PLACED_BIT_EXT + }; + + // wrapper using for bitmask VkMemoryMapFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryMapFlags.html + using MemoryMapFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkMemoryMapFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MemoryMapFlags allFlags = MemoryMapFlagBits::ePlacedEXT; + }; + + // wrapper class for enum VkImageAspectFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageAspectFlagBits.html + enum class ImageAspectFlagBits : VkImageAspectFlags + { + eColor = VK_IMAGE_ASPECT_COLOR_BIT, + eDepth = VK_IMAGE_ASPECT_DEPTH_BIT, + eStencil = VK_IMAGE_ASPECT_STENCIL_BIT, + eMetadata = VK_IMAGE_ASPECT_METADATA_BIT, + ePlane0 = VK_IMAGE_ASPECT_PLANE_0_BIT, + ePlane0KHR = VK_IMAGE_ASPECT_PLANE_0_BIT_KHR, + ePlane1 = VK_IMAGE_ASPECT_PLANE_1_BIT, + ePlane1KHR = VK_IMAGE_ASPECT_PLANE_1_BIT_KHR, + ePlane2 = VK_IMAGE_ASPECT_PLANE_2_BIT, + ePlane2KHR = VK_IMAGE_ASPECT_PLANE_2_BIT_KHR, + eNone = VK_IMAGE_ASPECT_NONE, + eNoneKHR = VK_IMAGE_ASPECT_NONE_KHR, + eMemoryPlane0EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT, + eMemoryPlane1EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT, + eMemoryPlane2EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT, + eMemoryPlane3EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT + }; + + // wrapper using for bitmask VkImageAspectFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageAspectFlags.html + using ImageAspectFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageAspectFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageAspectFlags allFlags = ImageAspectFlagBits::eColor | ImageAspectFlagBits::eDepth | ImageAspectFlagBits::eStencil | + ImageAspectFlagBits::eMetadata | ImageAspectFlagBits::ePlane0 | + ImageAspectFlagBits::ePlane1 | ImageAspectFlagBits::ePlane2 | ImageAspectFlagBits::eNone | + ImageAspectFlagBits::eMemoryPlane0EXT | ImageAspectFlagBits::eMemoryPlane1EXT | + ImageAspectFlagBits::eMemoryPlane2EXT | ImageAspectFlagBits::eMemoryPlane3EXT; + }; + + // wrapper class for enum VkSparseImageFormatFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageFormatFlagBits.html + enum class SparseImageFormatFlagBits : VkSparseImageFormatFlags + { + eSingleMiptail = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT, + eAlignedMipSize = VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT, + eNonstandardBlockSize = VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT + }; + + // wrapper using for bitmask VkSparseImageFormatFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageFormatFlags.html + using SparseImageFormatFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSparseImageFormatFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SparseImageFormatFlags allFlags = + SparseImageFormatFlagBits::eSingleMiptail | SparseImageFormatFlagBits::eAlignedMipSize | SparseImageFormatFlagBits::eNonstandardBlockSize; + }; + + // wrapper class for enum VkSparseMemoryBindFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseMemoryBindFlagBits.html + enum class SparseMemoryBindFlagBits : VkSparseMemoryBindFlags + { + eMetadata = VK_SPARSE_MEMORY_BIND_METADATA_BIT + }; + + // wrapper using for bitmask VkSparseMemoryBindFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseMemoryBindFlags.html + using SparseMemoryBindFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSparseMemoryBindFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SparseMemoryBindFlags allFlags = SparseMemoryBindFlagBits::eMetadata; + }; + + // wrapper class for enum VkFenceCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceCreateFlagBits.html + enum class FenceCreateFlagBits : VkFenceCreateFlags + { + eSignaled = VK_FENCE_CREATE_SIGNALED_BIT + }; + + // wrapper using for bitmask VkFenceCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceCreateFlags.html + using FenceCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkFenceCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR FenceCreateFlags allFlags = FenceCreateFlagBits::eSignaled; + }; + + enum class SemaphoreCreateFlagBits : VkSemaphoreCreateFlags + { + }; + + // wrapper using for bitmask VkSemaphoreCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreCreateFlags.html + using SemaphoreCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SemaphoreCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkEventCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkEventCreateFlagBits.html + enum class EventCreateFlagBits : VkEventCreateFlags + { + eDeviceOnly = VK_EVENT_CREATE_DEVICE_ONLY_BIT, + eDeviceOnlyKHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR + }; + + // wrapper using for bitmask VkEventCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkEventCreateFlags.html + using EventCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkEventCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR EventCreateFlags allFlags = EventCreateFlagBits::eDeviceOnly; + }; + + // wrapper class for enum VkQueryPipelineStatisticFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPipelineStatisticFlagBits.html + enum class QueryPipelineStatisticFlagBits : VkQueryPipelineStatisticFlags + { + eInputAssemblyVertices = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, + eInputAssemblyPrimitives = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, + eVertexShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, + eGeometryShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, + eGeometryShaderPrimitives = VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, + eClippingInvocations = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, + eClippingPrimitives = VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, + eFragmentShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT, + eTessellationControlShaderPatches = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, + eTessellationEvaluationShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT, + eComputeShaderInvocations = VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT, + eTaskShaderInvocationsEXT = VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT, + eMeshShaderInvocationsEXT = VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT, + eClusterCullingShaderInvocationsHUAWEI = VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI + }; + + // wrapper using for bitmask VkQueryPipelineStatisticFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPipelineStatisticFlags.html + using QueryPipelineStatisticFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkQueryPipelineStatisticFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR QueryPipelineStatisticFlags allFlags = + QueryPipelineStatisticFlagBits::eInputAssemblyVertices | QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives | + QueryPipelineStatisticFlagBits::eVertexShaderInvocations | QueryPipelineStatisticFlagBits::eGeometryShaderInvocations | + QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives | QueryPipelineStatisticFlagBits::eClippingInvocations | + QueryPipelineStatisticFlagBits::eClippingPrimitives | QueryPipelineStatisticFlagBits::eFragmentShaderInvocations | + QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches | QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations | + QueryPipelineStatisticFlagBits::eComputeShaderInvocations | QueryPipelineStatisticFlagBits::eTaskShaderInvocationsEXT | + QueryPipelineStatisticFlagBits::eMeshShaderInvocationsEXT | QueryPipelineStatisticFlagBits::eClusterCullingShaderInvocationsHUAWEI; + }; + + // wrapper class for enum VkQueryPoolCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolCreateFlagBits.html + enum class QueryPoolCreateFlagBits : VkQueryPoolCreateFlags + { + eResetKHR = VK_QUERY_POOL_CREATE_RESET_BIT_KHR + }; + + // wrapper using for bitmask VkQueryPoolCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolCreateFlags.html + using QueryPoolCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkQueryPoolCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR QueryPoolCreateFlags allFlags = QueryPoolCreateFlagBits::eResetKHR; + }; + + // wrapper class for enum VkQueryResultFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryResultFlagBits.html + enum class QueryResultFlagBits : VkQueryResultFlags + { + e64 = VK_QUERY_RESULT_64_BIT, + eWait = VK_QUERY_RESULT_WAIT_BIT, + eWithAvailability = VK_QUERY_RESULT_WITH_AVAILABILITY_BIT, + ePartial = VK_QUERY_RESULT_PARTIAL_BIT, + eWithStatusKHR = VK_QUERY_RESULT_WITH_STATUS_BIT_KHR + }; + + // wrapper using for bitmask VkQueryResultFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryResultFlags.html + using QueryResultFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkQueryResultFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR QueryResultFlags allFlags = QueryResultFlagBits::e64 | QueryResultFlagBits::eWait | + QueryResultFlagBits::eWithAvailability | QueryResultFlagBits::ePartial | + QueryResultFlagBits::eWithStatusKHR; + }; + + // wrapper class for enum VkQueryType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryType.html + enum class QueryType + { + eOcclusion = VK_QUERY_TYPE_OCCLUSION, + ePipelineStatistics = VK_QUERY_TYPE_PIPELINE_STATISTICS, + eTimestamp = VK_QUERY_TYPE_TIMESTAMP, + eResultStatusOnlyKHR = VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, + eTransformFeedbackStreamEXT = VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT, + ePerformanceQueryKHR = VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, + eAccelerationStructureCompactedSizeKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, + eAccelerationStructureSerializationSizeKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, + eAccelerationStructureCompactedSizeNV = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV, + ePerformanceQueryINTEL = VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL, + eVideoEncodeFeedbackKHR = VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, + eMeshPrimitivesGeneratedEXT = VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT, + ePrimitivesGeneratedEXT = VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, + eAccelerationStructureSerializationBottomLevelPointersKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, + eAccelerationStructureSizeKHR = VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, + eMicromapSerializationSizeEXT = VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT, + eMicromapCompactedSizeEXT = VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT + }; + + // wrapper class for enum VkBufferCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCreateFlagBits.html + enum class BufferCreateFlagBits : VkBufferCreateFlags + { + eSparseBinding = VK_BUFFER_CREATE_SPARSE_BINDING_BIT, + eSparseResidency = VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, + eSparseAliased = VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, + eProtected = VK_BUFFER_CREATE_PROTECTED_BIT, + eDeviceAddressCaptureReplay = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + eDeviceAddressCaptureReplayEXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT, + eDeviceAddressCaptureReplayKHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, + eDescriptorBufferCaptureReplayEXT = VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, + eVideoProfileIndependentKHR = VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR + }; + + // wrapper using for bitmask VkBufferCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCreateFlags.html + using BufferCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkBufferCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR BufferCreateFlags allFlags = + BufferCreateFlagBits::eSparseBinding | BufferCreateFlagBits::eSparseResidency | BufferCreateFlagBits::eSparseAliased | BufferCreateFlagBits::eProtected | + BufferCreateFlagBits::eDeviceAddressCaptureReplay | BufferCreateFlagBits::eDescriptorBufferCaptureReplayEXT | + BufferCreateFlagBits::eVideoProfileIndependentKHR; + }; + + // wrapper class for enum VkBufferUsageFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferUsageFlagBits.html + enum class BufferUsageFlagBits : VkBufferUsageFlags + { + eTransferSrc = VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + eTransferDst = VK_BUFFER_USAGE_TRANSFER_DST_BIT, + eUniformTexelBuffer = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, + eStorageTexelBuffer = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, + eUniformBuffer = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + eStorageBuffer = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, + eIndexBuffer = VK_BUFFER_USAGE_INDEX_BUFFER_BIT, + eVertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, + eIndirectBuffer = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, + eShaderDeviceAddress = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, + eShaderDeviceAddressEXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT, + eShaderDeviceAddressKHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR, + eVideoDecodeSrcKHR = VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR, + eVideoDecodeDstKHR = VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, + eTransformFeedbackBufferEXT = VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, + eTransformFeedbackCounterBufferEXT = VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT, + eConditionalRenderingEXT = VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eExecutionGraphScratchAMDX = VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + eAccelerationStructureBuildInputReadOnlyKHR = VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, + eAccelerationStructureStorageKHR = VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR, + eShaderBindingTableKHR = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, + eRayTracingNV = VK_BUFFER_USAGE_RAY_TRACING_BIT_NV, + eVideoEncodeDstKHR = VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, + eVideoEncodeSrcKHR = VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, + eSamplerDescriptorBufferEXT = VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, + eResourceDescriptorBufferEXT = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, + ePushDescriptorsDescriptorBufferEXT = VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, + eMicromapBuildInputReadOnlyEXT = VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT, + eMicromapStorageEXT = VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT, + eTileMemoryQCOM = VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM + }; + + // wrapper using for bitmask VkBufferUsageFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferUsageFlags.html + using BufferUsageFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkBufferUsageFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR BufferUsageFlags allFlags = + BufferUsageFlagBits::eTransferSrc | BufferUsageFlagBits::eTransferDst | BufferUsageFlagBits::eUniformTexelBuffer | + BufferUsageFlagBits::eStorageTexelBuffer | BufferUsageFlagBits::eUniformBuffer | BufferUsageFlagBits::eStorageBuffer | BufferUsageFlagBits::eIndexBuffer | + BufferUsageFlagBits::eVertexBuffer | BufferUsageFlagBits::eIndirectBuffer | BufferUsageFlagBits::eShaderDeviceAddress | + BufferUsageFlagBits::eVideoDecodeSrcKHR | BufferUsageFlagBits::eVideoDecodeDstKHR | BufferUsageFlagBits::eTransformFeedbackBufferEXT | + BufferUsageFlagBits::eTransformFeedbackCounterBufferEXT | BufferUsageFlagBits::eConditionalRenderingEXT +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + | BufferUsageFlagBits::eExecutionGraphScratchAMDX +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + | BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR | BufferUsageFlagBits::eAccelerationStructureStorageKHR | + BufferUsageFlagBits::eShaderBindingTableKHR | BufferUsageFlagBits::eVideoEncodeDstKHR | BufferUsageFlagBits::eVideoEncodeSrcKHR | + BufferUsageFlagBits::eSamplerDescriptorBufferEXT | BufferUsageFlagBits::eResourceDescriptorBufferEXT | + BufferUsageFlagBits::ePushDescriptorsDescriptorBufferEXT | BufferUsageFlagBits::eMicromapBuildInputReadOnlyEXT | + BufferUsageFlagBits::eMicromapStorageEXT | BufferUsageFlagBits::eTileMemoryQCOM; + }; + + // wrapper class for enum VkSharingMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSharingMode.html + enum class SharingMode + { + eExclusive = VK_SHARING_MODE_EXCLUSIVE, + eConcurrent = VK_SHARING_MODE_CONCURRENT + }; + + enum class BufferViewCreateFlagBits : VkBufferViewCreateFlags + { + }; + + // wrapper using for bitmask VkBufferViewCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferViewCreateFlags.html + using BufferViewCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR BufferViewCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageLayout.html + enum class ImageLayout + { + eUndefined = VK_IMAGE_LAYOUT_UNDEFINED, + eGeneral = VK_IMAGE_LAYOUT_GENERAL, + eColorAttachmentOptimal = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + eDepthStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, + eDepthStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, + eShaderReadOnlyOptimal = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, + eTransferSrcOptimal = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + eTransferDstOptimal = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + ePreinitialized = VK_IMAGE_LAYOUT_PREINITIALIZED, + eDepthReadOnlyStencilAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, + eDepthReadOnlyStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR, + eDepthAttachmentStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, + eDepthAttachmentStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR, + eDepthAttachmentOptimal = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, + eDepthAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR, + eDepthReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, + eDepthReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR, + eStencilAttachmentOptimal = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, + eStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR, + eStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, + eStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR, + eReadOnlyOptimal = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, + eReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR, + eAttachmentOptimal = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, + eAttachmentOptimalKHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR, + eRenderingLocalRead = VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ, + eRenderingLocalReadKHR = VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR, + ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, + eVideoDecodeDstKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR, + eVideoDecodeSrcKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR, + eVideoDecodeDpbKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR, + eSharedPresentKHR = VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, + eFragmentDensityMapOptimalEXT = VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT, + eFragmentShadingRateAttachmentOptimalKHR = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, + eShadingRateOptimalNV = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV, + eVideoEncodeDstKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR, + eVideoEncodeSrcKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR, + eVideoEncodeDpbKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR, + eAttachmentFeedbackLoopOptimalEXT = VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT, + eTensorAliasingARM = VK_IMAGE_LAYOUT_TENSOR_ALIASING_ARM, + eVideoEncodeQuantizationMapKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR, + eZeroInitializedEXT = VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT + }; + + // wrapper class for enum VkComponentSwizzle, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkComponentSwizzle.html + enum class ComponentSwizzle + { + eIdentity = VK_COMPONENT_SWIZZLE_IDENTITY, + eZero = VK_COMPONENT_SWIZZLE_ZERO, + eOne = VK_COMPONENT_SWIZZLE_ONE, + eR = VK_COMPONENT_SWIZZLE_R, + eG = VK_COMPONENT_SWIZZLE_G, + eB = VK_COMPONENT_SWIZZLE_B, + eA = VK_COMPONENT_SWIZZLE_A + }; + + // wrapper class for enum VkImageViewCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewCreateFlagBits.html + enum class ImageViewCreateFlagBits : VkImageViewCreateFlags + { + eFragmentDensityMapDynamicEXT = VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT, + eDescriptorBufferCaptureReplayEXT = VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, + eFragmentDensityMapDeferredEXT = VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT + }; + + // wrapper using for bitmask VkImageViewCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewCreateFlags.html + using ImageViewCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageViewCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageViewCreateFlags allFlags = ImageViewCreateFlagBits::eFragmentDensityMapDynamicEXT | + ImageViewCreateFlagBits::eDescriptorBufferCaptureReplayEXT | + ImageViewCreateFlagBits::eFragmentDensityMapDeferredEXT; + }; + + // wrapper class for enum VkImageViewType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewType.html + enum class ImageViewType + { + e1D = VK_IMAGE_VIEW_TYPE_1D, + e2D = VK_IMAGE_VIEW_TYPE_2D, + e3D = VK_IMAGE_VIEW_TYPE_3D, + eCube = VK_IMAGE_VIEW_TYPE_CUBE, + e1DArray = VK_IMAGE_VIEW_TYPE_1D_ARRAY, + e2DArray = VK_IMAGE_VIEW_TYPE_2D_ARRAY, + eCubeArray = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY + }; + + enum class ShaderModuleCreateFlagBits : VkShaderModuleCreateFlags + { + }; + + // wrapper using for bitmask VkShaderModuleCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderModuleCreateFlags.html + using ShaderModuleCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ShaderModuleCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkPipelineCacheCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCacheCreateFlagBits.html + enum class PipelineCacheCreateFlagBits : VkPipelineCacheCreateFlags + { + eExternallySynchronized = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, + eExternallySynchronizedEXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT, + eInternallySynchronizedMergeKHR = VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR + }; + + // wrapper using for bitmask VkPipelineCacheCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCacheCreateFlags.html + using PipelineCacheCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineCacheCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCacheCreateFlags allFlags = + PipelineCacheCreateFlagBits::eExternallySynchronized | PipelineCacheCreateFlagBits::eInternallySynchronizedMergeKHR; + }; + + // wrapper class for enum VkBlendFactor, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBlendFactor.html + enum class BlendFactor + { + eZero = VK_BLEND_FACTOR_ZERO, + eOne = VK_BLEND_FACTOR_ONE, + eSrcColor = VK_BLEND_FACTOR_SRC_COLOR, + eOneMinusSrcColor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR, + eDstColor = VK_BLEND_FACTOR_DST_COLOR, + eOneMinusDstColor = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR, + eSrcAlpha = VK_BLEND_FACTOR_SRC_ALPHA, + eOneMinusSrcAlpha = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, + eDstAlpha = VK_BLEND_FACTOR_DST_ALPHA, + eOneMinusDstAlpha = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, + eConstantColor = VK_BLEND_FACTOR_CONSTANT_COLOR, + eOneMinusConstantColor = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, + eConstantAlpha = VK_BLEND_FACTOR_CONSTANT_ALPHA, + eOneMinusConstantAlpha = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, + eSrcAlphaSaturate = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE, + eSrc1Color = VK_BLEND_FACTOR_SRC1_COLOR, + eOneMinusSrc1Color = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, + eSrc1Alpha = VK_BLEND_FACTOR_SRC1_ALPHA, + eOneMinusSrc1Alpha = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA + }; + + // wrapper class for enum VkBlendOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBlendOp.html + enum class BlendOp + { + eAdd = VK_BLEND_OP_ADD, + eSubtract = VK_BLEND_OP_SUBTRACT, + eReverseSubtract = VK_BLEND_OP_REVERSE_SUBTRACT, + eMin = VK_BLEND_OP_MIN, + eMax = VK_BLEND_OP_MAX, + eZeroEXT = VK_BLEND_OP_ZERO_EXT, + eSrcEXT = VK_BLEND_OP_SRC_EXT, + eDstEXT = VK_BLEND_OP_DST_EXT, + eSrcOverEXT = VK_BLEND_OP_SRC_OVER_EXT, + eDstOverEXT = VK_BLEND_OP_DST_OVER_EXT, + eSrcInEXT = VK_BLEND_OP_SRC_IN_EXT, + eDstInEXT = VK_BLEND_OP_DST_IN_EXT, + eSrcOutEXT = VK_BLEND_OP_SRC_OUT_EXT, + eDstOutEXT = VK_BLEND_OP_DST_OUT_EXT, + eSrcAtopEXT = VK_BLEND_OP_SRC_ATOP_EXT, + eDstAtopEXT = VK_BLEND_OP_DST_ATOP_EXT, + eXorEXT = VK_BLEND_OP_XOR_EXT, + eMultiplyEXT = VK_BLEND_OP_MULTIPLY_EXT, + eScreenEXT = VK_BLEND_OP_SCREEN_EXT, + eOverlayEXT = VK_BLEND_OP_OVERLAY_EXT, + eDarkenEXT = VK_BLEND_OP_DARKEN_EXT, + eLightenEXT = VK_BLEND_OP_LIGHTEN_EXT, + eColordodgeEXT = VK_BLEND_OP_COLORDODGE_EXT, + eColorburnEXT = VK_BLEND_OP_COLORBURN_EXT, + eHardlightEXT = VK_BLEND_OP_HARDLIGHT_EXT, + eSoftlightEXT = VK_BLEND_OP_SOFTLIGHT_EXT, + eDifferenceEXT = VK_BLEND_OP_DIFFERENCE_EXT, + eExclusionEXT = VK_BLEND_OP_EXCLUSION_EXT, + eInvertEXT = VK_BLEND_OP_INVERT_EXT, + eInvertRgbEXT = VK_BLEND_OP_INVERT_RGB_EXT, + eLineardodgeEXT = VK_BLEND_OP_LINEARDODGE_EXT, + eLinearburnEXT = VK_BLEND_OP_LINEARBURN_EXT, + eVividlightEXT = VK_BLEND_OP_VIVIDLIGHT_EXT, + eLinearlightEXT = VK_BLEND_OP_LINEARLIGHT_EXT, + ePinlightEXT = VK_BLEND_OP_PINLIGHT_EXT, + eHardmixEXT = VK_BLEND_OP_HARDMIX_EXT, + eHslHueEXT = VK_BLEND_OP_HSL_HUE_EXT, + eHslSaturationEXT = VK_BLEND_OP_HSL_SATURATION_EXT, + eHslColorEXT = VK_BLEND_OP_HSL_COLOR_EXT, + eHslLuminosityEXT = VK_BLEND_OP_HSL_LUMINOSITY_EXT, + ePlusEXT = VK_BLEND_OP_PLUS_EXT, + ePlusClampedEXT = VK_BLEND_OP_PLUS_CLAMPED_EXT, + ePlusClampedAlphaEXT = VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT, + ePlusDarkerEXT = VK_BLEND_OP_PLUS_DARKER_EXT, + eMinusEXT = VK_BLEND_OP_MINUS_EXT, + eMinusClampedEXT = VK_BLEND_OP_MINUS_CLAMPED_EXT, + eContrastEXT = VK_BLEND_OP_CONTRAST_EXT, + eInvertOvgEXT = VK_BLEND_OP_INVERT_OVG_EXT, + eRedEXT = VK_BLEND_OP_RED_EXT, + eGreenEXT = VK_BLEND_OP_GREEN_EXT, + eBlueEXT = VK_BLEND_OP_BLUE_EXT + }; + + // wrapper class for enum VkColorComponentFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkColorComponentFlagBits.html + enum class ColorComponentFlagBits : VkColorComponentFlags + { + eR = VK_COLOR_COMPONENT_R_BIT, + eG = VK_COLOR_COMPONENT_G_BIT, + eB = VK_COLOR_COMPONENT_B_BIT, + eA = VK_COLOR_COMPONENT_A_BIT + }; + + // wrapper using for bitmask VkColorComponentFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkColorComponentFlags.html + using ColorComponentFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkColorComponentFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ColorComponentFlags allFlags = + ColorComponentFlagBits::eR | ColorComponentFlagBits::eG | ColorComponentFlagBits::eB | ColorComponentFlagBits::eA; + }; + + // wrapper class for enum VkCompareOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCompareOp.html + enum class CompareOp + { + eNever = VK_COMPARE_OP_NEVER, + eLess = VK_COMPARE_OP_LESS, + eEqual = VK_COMPARE_OP_EQUAL, + eLessOrEqual = VK_COMPARE_OP_LESS_OR_EQUAL, + eGreater = VK_COMPARE_OP_GREATER, + eNotEqual = VK_COMPARE_OP_NOT_EQUAL, + eGreaterOrEqual = VK_COMPARE_OP_GREATER_OR_EQUAL, + eAlways = VK_COMPARE_OP_ALWAYS + }; + + // wrapper class for enum VkCullModeFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCullModeFlagBits.html + enum class CullModeFlagBits : VkCullModeFlags + { + eNone = VK_CULL_MODE_NONE, + eFront = VK_CULL_MODE_FRONT_BIT, + eBack = VK_CULL_MODE_BACK_BIT, + eFrontAndBack = VK_CULL_MODE_FRONT_AND_BACK + }; + + // wrapper using for bitmask VkCullModeFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCullModeFlags.html + using CullModeFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkCullModeFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CullModeFlags allFlags = + CullModeFlagBits::eNone | CullModeFlagBits::eFront | CullModeFlagBits::eBack | CullModeFlagBits::eFrontAndBack; + }; + + // wrapper class for enum VkDynamicState, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDynamicState.html + enum class DynamicState + { + eViewport = VK_DYNAMIC_STATE_VIEWPORT, + eScissor = VK_DYNAMIC_STATE_SCISSOR, + eLineWidth = VK_DYNAMIC_STATE_LINE_WIDTH, + eDepthBias = VK_DYNAMIC_STATE_DEPTH_BIAS, + eBlendConstants = VK_DYNAMIC_STATE_BLEND_CONSTANTS, + eDepthBounds = VK_DYNAMIC_STATE_DEPTH_BOUNDS, + eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK, + eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK, + eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE, + eCullMode = VK_DYNAMIC_STATE_CULL_MODE, + eCullModeEXT = VK_DYNAMIC_STATE_CULL_MODE_EXT, + eFrontFace = VK_DYNAMIC_STATE_FRONT_FACE, + eFrontFaceEXT = VK_DYNAMIC_STATE_FRONT_FACE_EXT, + ePrimitiveTopology = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, + ePrimitiveTopologyEXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT, + eViewportWithCount = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, + eViewportWithCountEXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT, + eScissorWithCount = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, + eScissorWithCountEXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT, + eVertexInputBindingStride = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, + eVertexInputBindingStrideEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT, + eDepthTestEnable = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, + eDepthTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT, + eDepthWriteEnable = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, + eDepthWriteEnableEXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT, + eDepthCompareOp = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, + eDepthCompareOpEXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT, + eDepthBoundsTestEnable = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, + eDepthBoundsTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT, + eStencilTestEnable = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, + eStencilTestEnableEXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT, + eStencilOp = VK_DYNAMIC_STATE_STENCIL_OP, + eStencilOpEXT = VK_DYNAMIC_STATE_STENCIL_OP_EXT, + eRasterizerDiscardEnable = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, + eRasterizerDiscardEnableEXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT, + eDepthBiasEnable = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, + eDepthBiasEnableEXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT, + ePrimitiveRestartEnable = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, + ePrimitiveRestartEnableEXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT, + eLineStipple = VK_DYNAMIC_STATE_LINE_STIPPLE, + eLineStippleEXT = VK_DYNAMIC_STATE_LINE_STIPPLE_EXT, + eLineStippleKHR = VK_DYNAMIC_STATE_LINE_STIPPLE_KHR, + eViewportWScalingNV = VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, + eDiscardRectangleEXT = VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, + eDiscardRectangleEnableEXT = VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT, + eDiscardRectangleModeEXT = VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT, + eSampleLocationsEXT = VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, + eRayTracingPipelineStackSizeKHR = VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR, + eViewportShadingRatePaletteNV = VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, + eViewportCoarseSampleOrderNV = VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV, + eExclusiveScissorEnableNV = VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV, + eExclusiveScissorNV = VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, + eFragmentShadingRateKHR = VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, + eVertexInputEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_EXT, + ePatchControlPointsEXT = VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT, + eLogicOpEXT = VK_DYNAMIC_STATE_LOGIC_OP_EXT, + eColorWriteEnableEXT = VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT, + eDepthClampEnableEXT = VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT, + ePolygonModeEXT = VK_DYNAMIC_STATE_POLYGON_MODE_EXT, + eRasterizationSamplesEXT = VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, + eSampleMaskEXT = VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, + eAlphaToCoverageEnableEXT = VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT, + eAlphaToOneEnableEXT = VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT, + eLogicOpEnableEXT = VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT, + eColorBlendEnableEXT = VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT, + eColorBlendEquationEXT = VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, + eColorWriteMaskEXT = VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, + eTessellationDomainOriginEXT = VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT, + eRasterizationStreamEXT = VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT, + eConservativeRasterizationModeEXT = VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT, + eExtraPrimitiveOverestimationSizeEXT = VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT, + eDepthClipEnableEXT = VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT, + eSampleLocationsEnableEXT = VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT, + eColorBlendAdvancedEXT = VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, + eProvokingVertexModeEXT = VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT, + eLineRasterizationModeEXT = VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT, + eLineStippleEnableEXT = VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT, + eDepthClipNegativeOneToOneEXT = VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT, + eViewportWScalingEnableNV = VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV, + eViewportSwizzleNV = VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV, + eCoverageToColorEnableNV = VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV, + eCoverageToColorLocationNV = VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV, + eCoverageModulationModeNV = VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV, + eCoverageModulationTableEnableNV = VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV, + eCoverageModulationTableNV = VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV, + eShadingRateImageEnableNV = VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV, + eRepresentativeFragmentTestEnableNV = VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV, + eCoverageReductionModeNV = VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV, + eAttachmentFeedbackLoopEnableEXT = VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT, + eDepthClampRangeEXT = VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT + }; + + // wrapper class for enum VkFrontFace, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFrontFace.html + enum class FrontFace + { + eCounterClockwise = VK_FRONT_FACE_COUNTER_CLOCKWISE, + eClockwise = VK_FRONT_FACE_CLOCKWISE + }; + + // wrapper class for enum VkLogicOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLogicOp.html + enum class LogicOp + { + eClear = VK_LOGIC_OP_CLEAR, + eAnd = VK_LOGIC_OP_AND, + eAndReverse = VK_LOGIC_OP_AND_REVERSE, + eCopy = VK_LOGIC_OP_COPY, + eAndInverted = VK_LOGIC_OP_AND_INVERTED, + eNoOp = VK_LOGIC_OP_NO_OP, + eXor = VK_LOGIC_OP_XOR, + eOr = VK_LOGIC_OP_OR, + eNor = VK_LOGIC_OP_NOR, + eEquivalent = VK_LOGIC_OP_EQUIVALENT, + eInvert = VK_LOGIC_OP_INVERT, + eOrReverse = VK_LOGIC_OP_OR_REVERSE, + eCopyInverted = VK_LOGIC_OP_COPY_INVERTED, + eOrInverted = VK_LOGIC_OP_OR_INVERTED, + eNand = VK_LOGIC_OP_NAND, + eSet = VK_LOGIC_OP_SET + }; + + // wrapper class for enum VkPipelineCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreateFlagBits.html + enum class PipelineCreateFlagBits : VkPipelineCreateFlags + { + eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT, + eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT, + eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT, + eViewIndexFromDeviceIndex = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, + eViewIndexFromDeviceIndexKHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR, + eDispatchBase = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + eDispatchBaseKHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT_KHR, + eFailOnPipelineCompileRequired = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, + eFailOnPipelineCompileRequiredEXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT, + eEarlyReturnOnFailure = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, + eEarlyReturnOnFailureEXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT, + eNoProtectedAccess = VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, + eNoProtectedAccessEXT = VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, + eProtectedAccessOnly = VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT, + eProtectedAccessOnlyEXT = VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, + eRayTracingNoNullAnyHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, + eRayTracingNoNullClosestHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, + eRayTracingNoNullMissShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, + eRayTracingNoNullIntersectionShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, + eRayTracingSkipTrianglesKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, + eRayTracingSkipAabbsKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR, + eRayTracingShaderGroupHandleCaptureReplayKHR = VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR, + eDeferCompileNV = VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV, + eRenderingFragmentDensityMapAttachmentEXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + eVkPipelineRasterizationStateCreateFragmentDensityMapAttachmentEXT = VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + eRenderingFragmentShadingRateAttachmentKHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eVkPipelineRasterizationStateCreateFragmentShadingRateAttachmentKHR = VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eCaptureStatisticsKHR = VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR, + eCaptureInternalRepresentationsKHR = VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, + eIndirectBindableNV = VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, + eLibraryKHR = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, + eDescriptorBufferEXT = VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, + eRetainLinkTimeOptimizationInfoEXT = VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, + eLinkTimeOptimizationEXT = VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, + eRayTracingAllowMotionNV = VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV, + eColorAttachmentFeedbackLoopEXT = VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, + eDepthStencilAttachmentFeedbackLoopEXT = VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, + eRayTracingOpacityMicromapEXT = VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eRayTracingDisplacementMicromapNV = VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + }; + + // wrapper using for bitmask VkPipelineCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreateFlags.html + using PipelineCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCreateFlags allFlags = + PipelineCreateFlagBits::eDisableOptimization | PipelineCreateFlagBits::eAllowDerivatives | PipelineCreateFlagBits::eDerivative | + PipelineCreateFlagBits::eViewIndexFromDeviceIndex | PipelineCreateFlagBits::eDispatchBase | PipelineCreateFlagBits::eFailOnPipelineCompileRequired | + PipelineCreateFlagBits::eEarlyReturnOnFailure | PipelineCreateFlagBits::eNoProtectedAccess | PipelineCreateFlagBits::eProtectedAccessOnly | + PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR | PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR | + PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR | PipelineCreateFlagBits::eRayTracingNoNullIntersectionShadersKHR | + PipelineCreateFlagBits::eRayTracingSkipTrianglesKHR | PipelineCreateFlagBits::eRayTracingSkipAabbsKHR | + PipelineCreateFlagBits::eRayTracingShaderGroupHandleCaptureReplayKHR | PipelineCreateFlagBits::eDeferCompileNV | + PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT | PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR | + PipelineCreateFlagBits::eCaptureStatisticsKHR | PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR | PipelineCreateFlagBits::eIndirectBindableNV | + PipelineCreateFlagBits::eLibraryKHR | PipelineCreateFlagBits::eDescriptorBufferEXT | PipelineCreateFlagBits::eRetainLinkTimeOptimizationInfoEXT | + PipelineCreateFlagBits::eLinkTimeOptimizationEXT | PipelineCreateFlagBits::eRayTracingAllowMotionNV | + PipelineCreateFlagBits::eColorAttachmentFeedbackLoopEXT | PipelineCreateFlagBits::eDepthStencilAttachmentFeedbackLoopEXT | + PipelineCreateFlagBits::eRayTracingOpacityMicromapEXT +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + | PipelineCreateFlagBits::eRayTracingDisplacementMicromapNV +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + ; + }; + + // wrapper class for enum VkPipelineShaderStageCreateFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageCreateFlagBits.html + enum class PipelineShaderStageCreateFlagBits : VkPipelineShaderStageCreateFlags + { + eAllowVaryingSubgroupSize = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT, + eAllowVaryingSubgroupSizeEXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, + eRequireFullSubgroups = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, + eRequireFullSubgroupsEXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT + }; + + // wrapper using for bitmask VkPipelineShaderStageCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageCreateFlags.html + using PipelineShaderStageCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineShaderStageCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineShaderStageCreateFlags allFlags = + PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize | PipelineShaderStageCreateFlagBits::eRequireFullSubgroups; + }; + + // wrapper class for enum VkPolygonMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPolygonMode.html + enum class PolygonMode + { + eFill = VK_POLYGON_MODE_FILL, + eLine = VK_POLYGON_MODE_LINE, + ePoint = VK_POLYGON_MODE_POINT, + eFillRectangleNV = VK_POLYGON_MODE_FILL_RECTANGLE_NV + }; + + // wrapper class for enum VkPrimitiveTopology, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPrimitiveTopology.html + enum class PrimitiveTopology + { + ePointList = VK_PRIMITIVE_TOPOLOGY_POINT_LIST, + eLineList = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, + eLineStrip = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, + eTriangleList = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, + eTriangleStrip = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, + eTriangleFan = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, + eLineListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, + eLineStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, + eTriangleListWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, + eTriangleStripWithAdjacency = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, + ePatchList = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST + }; + + // wrapper class for enum VkShaderStageFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderStageFlagBits.html + enum class ShaderStageFlagBits : VkShaderStageFlags + { + eVertex = VK_SHADER_STAGE_VERTEX_BIT, + eTessellationControl = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, + eTessellationEvaluation = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, + eGeometry = VK_SHADER_STAGE_GEOMETRY_BIT, + eFragment = VK_SHADER_STAGE_FRAGMENT_BIT, + eCompute = VK_SHADER_STAGE_COMPUTE_BIT, + eAllGraphics = VK_SHADER_STAGE_ALL_GRAPHICS, + eAll = VK_SHADER_STAGE_ALL, + eRaygenKHR = VK_SHADER_STAGE_RAYGEN_BIT_KHR, + eRaygenNV = VK_SHADER_STAGE_RAYGEN_BIT_NV, + eAnyHitKHR = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, + eAnyHitNV = VK_SHADER_STAGE_ANY_HIT_BIT_NV, + eClosestHitKHR = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, + eClosestHitNV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV, + eMissKHR = VK_SHADER_STAGE_MISS_BIT_KHR, + eMissNV = VK_SHADER_STAGE_MISS_BIT_NV, + eIntersectionKHR = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, + eIntersectionNV = VK_SHADER_STAGE_INTERSECTION_BIT_NV, + eCallableKHR = VK_SHADER_STAGE_CALLABLE_BIT_KHR, + eCallableNV = VK_SHADER_STAGE_CALLABLE_BIT_NV, + eTaskEXT = VK_SHADER_STAGE_TASK_BIT_EXT, + eTaskNV = VK_SHADER_STAGE_TASK_BIT_NV, + eMeshEXT = VK_SHADER_STAGE_MESH_BIT_EXT, + eMeshNV = VK_SHADER_STAGE_MESH_BIT_NV, + eSubpassShadingHUAWEI = VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI, + eClusterCullingHUAWEI = VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI + }; + + // wrapper using for bitmask VkShaderStageFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderStageFlags.html + using ShaderStageFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkShaderStageFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ShaderStageFlags allFlags = + ShaderStageFlagBits::eVertex | ShaderStageFlagBits::eTessellationControl | ShaderStageFlagBits::eTessellationEvaluation | ShaderStageFlagBits::eGeometry | + ShaderStageFlagBits::eFragment | ShaderStageFlagBits::eCompute | ShaderStageFlagBits::eAllGraphics | ShaderStageFlagBits::eAll | + ShaderStageFlagBits::eRaygenKHR | ShaderStageFlagBits::eAnyHitKHR | ShaderStageFlagBits::eClosestHitKHR | ShaderStageFlagBits::eMissKHR | + ShaderStageFlagBits::eIntersectionKHR | ShaderStageFlagBits::eCallableKHR | ShaderStageFlagBits::eTaskEXT | ShaderStageFlagBits::eMeshEXT | + ShaderStageFlagBits::eSubpassShadingHUAWEI | ShaderStageFlagBits::eClusterCullingHUAWEI; + }; + + // wrapper class for enum VkStencilOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkStencilOp.html + enum class StencilOp + { + eKeep = VK_STENCIL_OP_KEEP, + eZero = VK_STENCIL_OP_ZERO, + eReplace = VK_STENCIL_OP_REPLACE, + eIncrementAndClamp = VK_STENCIL_OP_INCREMENT_AND_CLAMP, + eDecrementAndClamp = VK_STENCIL_OP_DECREMENT_AND_CLAMP, + eInvert = VK_STENCIL_OP_INVERT, + eIncrementAndWrap = VK_STENCIL_OP_INCREMENT_AND_WRAP, + eDecrementAndWrap = VK_STENCIL_OP_DECREMENT_AND_WRAP + }; + + // wrapper class for enum VkVertexInputRate, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVertexInputRate.html + enum class VertexInputRate + { + eVertex = VK_VERTEX_INPUT_RATE_VERTEX, + eInstance = VK_VERTEX_INPUT_RATE_INSTANCE + }; + + // wrapper class for enum VkPipelineColorBlendStateCreateFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineColorBlendStateCreateFlagBits.html + enum class PipelineColorBlendStateCreateFlagBits : VkPipelineColorBlendStateCreateFlags + { + eRasterizationOrderAttachmentAccessEXT = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT, + eRasterizationOrderAttachmentAccessARM = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM + }; + + // wrapper using for bitmask VkPipelineColorBlendStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineColorBlendStateCreateFlags.html + using PipelineColorBlendStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineColorBlendStateCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineColorBlendStateCreateFlags allFlags = + PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessEXT; + }; + + // wrapper class for enum VkPipelineDepthStencilStateCreateFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDepthStencilStateCreateFlagBits.html + enum class PipelineDepthStencilStateCreateFlagBits : VkPipelineDepthStencilStateCreateFlags + { + eRasterizationOrderAttachmentDepthAccessEXT = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, + eRasterizationOrderAttachmentDepthAccessARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM, + eRasterizationOrderAttachmentStencilAccessEXT = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, + eRasterizationOrderAttachmentStencilAccessARM = VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM + }; + + // wrapper using for bitmask VkPipelineDepthStencilStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDepthStencilStateCreateFlags.html + using PipelineDepthStencilStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineDepthStencilStateCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineDepthStencilStateCreateFlags allFlags = + PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessEXT | + PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessEXT; + }; + + enum class PipelineDynamicStateCreateFlagBits : VkPipelineDynamicStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineDynamicStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDynamicStateCreateFlags.html + using PipelineDynamicStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineDynamicStateCreateFlags allFlags = {}; + }; + + enum class PipelineInputAssemblyStateCreateFlagBits : VkPipelineInputAssemblyStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineInputAssemblyStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineInputAssemblyStateCreateFlags.html + using PipelineInputAssemblyStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineInputAssemblyStateCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkPipelineLayoutCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineLayoutCreateFlagBits.html + enum class PipelineLayoutCreateFlagBits : VkPipelineLayoutCreateFlags + { + eIndependentSetsEXT = VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT + }; + + // wrapper using for bitmask VkPipelineLayoutCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineLayoutCreateFlags.html + using PipelineLayoutCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineLayoutCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineLayoutCreateFlags allFlags = PipelineLayoutCreateFlagBits::eIndependentSetsEXT; + }; + + enum class PipelineMultisampleStateCreateFlagBits : VkPipelineMultisampleStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineMultisampleStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineMultisampleStateCreateFlags.html + using PipelineMultisampleStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineMultisampleStateCreateFlags allFlags = {}; + }; + + enum class PipelineRasterizationStateCreateFlagBits : VkPipelineRasterizationStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineRasterizationStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationStateCreateFlags.html + using PipelineRasterizationStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineRasterizationStateCreateFlags allFlags = {}; + }; + + enum class PipelineTessellationStateCreateFlagBits : VkPipelineTessellationStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineTessellationStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineTessellationStateCreateFlags.html + using PipelineTessellationStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineTessellationStateCreateFlags allFlags = {}; + }; + + enum class PipelineVertexInputStateCreateFlagBits : VkPipelineVertexInputStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineVertexInputStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineVertexInputStateCreateFlags.html + using PipelineVertexInputStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineVertexInputStateCreateFlags allFlags = {}; + }; + + enum class PipelineViewportStateCreateFlagBits : VkPipelineViewportStateCreateFlags + { + }; + + // wrapper using for bitmask VkPipelineViewportStateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportStateCreateFlags.html + using PipelineViewportStateCreateFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineViewportStateCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkBorderColor, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBorderColor.html + enum class BorderColor + { + eFloatTransparentBlack = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK, + eIntTransparentBlack = VK_BORDER_COLOR_INT_TRANSPARENT_BLACK, + eFloatOpaqueBlack = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, + eIntOpaqueBlack = VK_BORDER_COLOR_INT_OPAQUE_BLACK, + eFloatOpaqueWhite = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE, + eIntOpaqueWhite = VK_BORDER_COLOR_INT_OPAQUE_WHITE, + eFloatCustomEXT = VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, + eIntCustomEXT = VK_BORDER_COLOR_INT_CUSTOM_EXT + }; + + // wrapper class for enum VkFilter, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFilter.html + enum class Filter + { + eNearest = VK_FILTER_NEAREST, + eLinear = VK_FILTER_LINEAR, + eCubicEXT = VK_FILTER_CUBIC_EXT, + eCubicIMG = VK_FILTER_CUBIC_IMG + }; + + // wrapper class for enum VkSamplerAddressMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerAddressMode.html + enum class SamplerAddressMode + { + eRepeat = VK_SAMPLER_ADDRESS_MODE_REPEAT, + eMirroredRepeat = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, + eClampToEdge = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, + eClampToBorder = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, + eMirrorClampToEdge = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, + eMirrorClampToEdgeKHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR + }; + + // wrapper class for enum VkSamplerCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerCreateFlagBits.html + enum class SamplerCreateFlagBits : VkSamplerCreateFlags + { + eSubsampledEXT = VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, + eSubsampledCoarseReconstructionEXT = VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT, + eDescriptorBufferCaptureReplayEXT = VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, + eNonSeamlessCubeMapEXT = VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT, + eImageProcessingQCOM = VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM + }; + + // wrapper using for bitmask VkSamplerCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerCreateFlags.html + using SamplerCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSamplerCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SamplerCreateFlags allFlags = + SamplerCreateFlagBits::eSubsampledEXT | SamplerCreateFlagBits::eSubsampledCoarseReconstructionEXT | + SamplerCreateFlagBits::eDescriptorBufferCaptureReplayEXT | SamplerCreateFlagBits::eNonSeamlessCubeMapEXT | SamplerCreateFlagBits::eImageProcessingQCOM; + }; + + // wrapper class for enum VkSamplerMipmapMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerMipmapMode.html + enum class SamplerMipmapMode + { + eNearest = VK_SAMPLER_MIPMAP_MODE_NEAREST, + eLinear = VK_SAMPLER_MIPMAP_MODE_LINEAR + }; + + // wrapper class for enum VkDescriptorPoolCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPoolCreateFlagBits.html + enum class DescriptorPoolCreateFlagBits : VkDescriptorPoolCreateFlags + { + eFreeDescriptorSet = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + eUpdateAfterBind = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, + eUpdateAfterBindEXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT, + eHostOnlyEXT = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT, + eHostOnlyVALVE = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE, + eAllowOverallocationSetsNV = VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV, + eAllowOverallocationPoolsNV = VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV + }; + + // wrapper using for bitmask VkDescriptorPoolCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPoolCreateFlags.html + using DescriptorPoolCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDescriptorPoolCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DescriptorPoolCreateFlags allFlags = + DescriptorPoolCreateFlagBits::eFreeDescriptorSet | DescriptorPoolCreateFlagBits::eUpdateAfterBind | DescriptorPoolCreateFlagBits::eHostOnlyEXT | + DescriptorPoolCreateFlagBits::eAllowOverallocationSetsNV | DescriptorPoolCreateFlagBits::eAllowOverallocationPoolsNV; + }; + + // wrapper class for enum VkDescriptorSetLayoutCreateFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutCreateFlagBits.html + enum class DescriptorSetLayoutCreateFlagBits : VkDescriptorSetLayoutCreateFlags + { + eUpdateAfterBindPool = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, + eUpdateAfterBindPoolEXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT, + ePushDescriptor = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, + ePushDescriptorKHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, + eDescriptorBufferEXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, + eEmbeddedImmutableSamplersEXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT, + eIndirectBindableNV = VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV, + eHostOnlyPoolEXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT, + eHostOnlyPoolVALVE = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE, + ePerStageNV = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV + }; + + // wrapper using for bitmask VkDescriptorSetLayoutCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutCreateFlags.html + using DescriptorSetLayoutCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDescriptorSetLayoutCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DescriptorSetLayoutCreateFlags allFlags = + DescriptorSetLayoutCreateFlagBits::eUpdateAfterBindPool | DescriptorSetLayoutCreateFlagBits::ePushDescriptor | + DescriptorSetLayoutCreateFlagBits::eDescriptorBufferEXT | DescriptorSetLayoutCreateFlagBits::eEmbeddedImmutableSamplersEXT | + DescriptorSetLayoutCreateFlagBits::eIndirectBindableNV | DescriptorSetLayoutCreateFlagBits::eHostOnlyPoolEXT | + DescriptorSetLayoutCreateFlagBits::ePerStageNV; + }; + + // wrapper class for enum VkDescriptorType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorType.html + enum class DescriptorType + { + eSampler = VK_DESCRIPTOR_TYPE_SAMPLER, + eCombinedImageSampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + eSampledImage = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, + eStorageImage = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, + eUniformTexelBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, + eStorageTexelBuffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, + eUniformBuffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + eStorageBuffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, + eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, + eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, + eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, + eInlineUniformBlock = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, + eInlineUniformBlockEXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, + eAccelerationStructureKHR = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, + eAccelerationStructureNV = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, + eSampleWeightImageQCOM = VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, + eBlockMatchImageQCOM = VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, + eTensorARM = VK_DESCRIPTOR_TYPE_TENSOR_ARM, + eMutableEXT = VK_DESCRIPTOR_TYPE_MUTABLE_EXT, + eMutableVALVE = VK_DESCRIPTOR_TYPE_MUTABLE_VALVE, + ePartitionedAccelerationStructureNV = VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV + }; + + enum class DescriptorPoolResetFlagBits : VkDescriptorPoolResetFlags + { + }; + + // wrapper using for bitmask VkDescriptorPoolResetFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPoolResetFlags.html + using DescriptorPoolResetFlags = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DescriptorPoolResetFlags allFlags = {}; + }; + + // wrapper class for enum VkAccessFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccessFlagBits.html + enum class AccessFlagBits : VkAccessFlags + { + eIndirectCommandRead = VK_ACCESS_INDIRECT_COMMAND_READ_BIT, + eIndexRead = VK_ACCESS_INDEX_READ_BIT, + eVertexAttributeRead = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, + eUniformRead = VK_ACCESS_UNIFORM_READ_BIT, + eInputAttachmentRead = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, + eShaderRead = VK_ACCESS_SHADER_READ_BIT, + eShaderWrite = VK_ACCESS_SHADER_WRITE_BIT, + eColorAttachmentRead = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, + eColorAttachmentWrite = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, + eDepthStencilAttachmentRead = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, + eDepthStencilAttachmentWrite = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, + eTransferRead = VK_ACCESS_TRANSFER_READ_BIT, + eTransferWrite = VK_ACCESS_TRANSFER_WRITE_BIT, + eHostRead = VK_ACCESS_HOST_READ_BIT, + eHostWrite = VK_ACCESS_HOST_WRITE_BIT, + eMemoryRead = VK_ACCESS_MEMORY_READ_BIT, + eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT, + eNone = VK_ACCESS_NONE, + eNoneKHR = VK_ACCESS_NONE_KHR, + eTransformFeedbackWriteEXT = VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, + eTransformFeedbackCounterReadEXT = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, + eTransformFeedbackCounterWriteEXT = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, + eConditionalRenderingReadEXT = VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT, + eColorAttachmentReadNoncoherentEXT = VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, + eAccelerationStructureReadKHR = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, + eAccelerationStructureReadNV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV, + eAccelerationStructureWriteKHR = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, + eAccelerationStructureWriteNV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV, + eFragmentDensityMapReadEXT = VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, + eFragmentShadingRateAttachmentReadKHR = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, + eShadingRateImageReadNV = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV, + eCommandPreprocessReadEXT = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT, + eCommandPreprocessReadNV = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV, + eCommandPreprocessWriteEXT = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT, + eCommandPreprocessWriteNV = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV + }; + + // wrapper using for bitmask VkAccessFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccessFlags.html + using AccessFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkAccessFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AccessFlags allFlags = + AccessFlagBits::eIndirectCommandRead | AccessFlagBits::eIndexRead | AccessFlagBits::eVertexAttributeRead | AccessFlagBits::eUniformRead | + AccessFlagBits::eInputAttachmentRead | AccessFlagBits::eShaderRead | AccessFlagBits::eShaderWrite | AccessFlagBits::eColorAttachmentRead | + AccessFlagBits::eColorAttachmentWrite | AccessFlagBits::eDepthStencilAttachmentRead | AccessFlagBits::eDepthStencilAttachmentWrite | + AccessFlagBits::eTransferRead | AccessFlagBits::eTransferWrite | AccessFlagBits::eHostRead | AccessFlagBits::eHostWrite | AccessFlagBits::eMemoryRead | + AccessFlagBits::eMemoryWrite | AccessFlagBits::eNone | AccessFlagBits::eTransformFeedbackWriteEXT | AccessFlagBits::eTransformFeedbackCounterReadEXT | + AccessFlagBits::eTransformFeedbackCounterWriteEXT | AccessFlagBits::eConditionalRenderingReadEXT | AccessFlagBits::eColorAttachmentReadNoncoherentEXT | + AccessFlagBits::eAccelerationStructureReadKHR | AccessFlagBits::eAccelerationStructureWriteKHR | AccessFlagBits::eFragmentDensityMapReadEXT | + AccessFlagBits::eFragmentShadingRateAttachmentReadKHR | AccessFlagBits::eCommandPreprocessReadEXT | AccessFlagBits::eCommandPreprocessWriteEXT; + }; + + // wrapper class for enum VkAttachmentDescriptionFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentDescriptionFlagBits.html + enum class AttachmentDescriptionFlagBits : VkAttachmentDescriptionFlags + { + eMayAlias = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT + }; + + // wrapper using for bitmask VkAttachmentDescriptionFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentDescriptionFlags.html + using AttachmentDescriptionFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkAttachmentDescriptionFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AttachmentDescriptionFlags allFlags = AttachmentDescriptionFlagBits::eMayAlias; + }; + + // wrapper class for enum VkAttachmentLoadOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentLoadOp.html + enum class AttachmentLoadOp + { + eLoad = VK_ATTACHMENT_LOAD_OP_LOAD, + eClear = VK_ATTACHMENT_LOAD_OP_CLEAR, + eDontCare = VK_ATTACHMENT_LOAD_OP_DONT_CARE, + eNone = VK_ATTACHMENT_LOAD_OP_NONE, + eNoneEXT = VK_ATTACHMENT_LOAD_OP_NONE_EXT, + eNoneKHR = VK_ATTACHMENT_LOAD_OP_NONE_KHR + }; + + // wrapper class for enum VkAttachmentStoreOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentStoreOp.html + enum class AttachmentStoreOp + { + eStore = VK_ATTACHMENT_STORE_OP_STORE, + eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE, + eNone = VK_ATTACHMENT_STORE_OP_NONE, + eNoneKHR = VK_ATTACHMENT_STORE_OP_NONE_KHR, + eNoneQCOM = VK_ATTACHMENT_STORE_OP_NONE_QCOM, + eNoneEXT = VK_ATTACHMENT_STORE_OP_NONE_EXT + }; + + // wrapper class for enum VkDependencyFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDependencyFlagBits.html + enum class DependencyFlagBits : VkDependencyFlags + { + eByRegion = VK_DEPENDENCY_BY_REGION_BIT, + eDeviceGroup = VK_DEPENDENCY_DEVICE_GROUP_BIT, + eDeviceGroupKHR = VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR, + eViewLocal = VK_DEPENDENCY_VIEW_LOCAL_BIT, + eViewLocalKHR = VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR, + eFeedbackLoopEXT = VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT, + eQueueFamilyOwnershipTransferUseAllStagesKHR = VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR, + eAsymmetricEventKHR = VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR + }; + + // wrapper using for bitmask VkDependencyFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDependencyFlags.html + using DependencyFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDependencyFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DependencyFlags allFlags = + DependencyFlagBits::eByRegion | DependencyFlagBits::eDeviceGroup | DependencyFlagBits::eViewLocal | DependencyFlagBits::eFeedbackLoopEXT | + DependencyFlagBits::eQueueFamilyOwnershipTransferUseAllStagesKHR | DependencyFlagBits::eAsymmetricEventKHR; + }; + + // wrapper class for enum VkFramebufferCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebufferCreateFlagBits.html + enum class FramebufferCreateFlagBits : VkFramebufferCreateFlags + { + eImageless = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, + eImagelessKHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR + }; + + // wrapper using for bitmask VkFramebufferCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebufferCreateFlags.html + using FramebufferCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkFramebufferCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR FramebufferCreateFlags allFlags = FramebufferCreateFlagBits::eImageless; + }; + + // wrapper class for enum VkPipelineBindPoint, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBindPoint.html + enum class PipelineBindPoint + { + eGraphics = VK_PIPELINE_BIND_POINT_GRAPHICS, + eCompute = VK_PIPELINE_BIND_POINT_COMPUTE, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eExecutionGraphAMDX = VK_PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + eRayTracingKHR = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, + eRayTracingNV = VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, + eSubpassShadingHUAWEI = VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, + eDataGraphARM = VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM + }; + + // wrapper class for enum VkRenderPassCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreateFlagBits.html + enum class RenderPassCreateFlagBits : VkRenderPassCreateFlags + { + eTransformQCOM = VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM, + ePerLayerFragmentDensityVALVE = VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE + }; + + // wrapper using for bitmask VkRenderPassCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreateFlags.html + using RenderPassCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkRenderPassCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR RenderPassCreateFlags allFlags = + RenderPassCreateFlagBits::eTransformQCOM | RenderPassCreateFlagBits::ePerLayerFragmentDensityVALVE; + }; + + // wrapper class for enum VkSubpassDescriptionFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDescriptionFlagBits.html + enum class SubpassDescriptionFlagBits : VkSubpassDescriptionFlags + { + ePerViewAttributesNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX, + ePerViewPositionXOnlyNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, + eFragmentRegionQCOM = VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, + eShaderResolveQCOM = VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, + eTileShadingApronQCOM = VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM, + eRasterizationOrderAttachmentColorAccessEXT = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT, + eRasterizationOrderAttachmentColorAccessARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM, + eRasterizationOrderAttachmentDepthAccessEXT = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, + eRasterizationOrderAttachmentDepthAccessARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM, + eRasterizationOrderAttachmentStencilAccessEXT = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, + eRasterizationOrderAttachmentStencilAccessARM = VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM, + eEnableLegacyDitheringEXT = VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT + }; + + // wrapper using for bitmask VkSubpassDescriptionFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDescriptionFlags.html + using SubpassDescriptionFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSubpassDescriptionFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SubpassDescriptionFlags allFlags = + SubpassDescriptionFlagBits::ePerViewAttributesNVX | SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX | + SubpassDescriptionFlagBits::eFragmentRegionQCOM | SubpassDescriptionFlagBits::eShaderResolveQCOM | SubpassDescriptionFlagBits::eTileShadingApronQCOM | + SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessEXT | SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessEXT | + SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessEXT | SubpassDescriptionFlagBits::eEnableLegacyDitheringEXT; + }; + + // wrapper class for enum VkCommandPoolCreateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPoolCreateFlagBits.html + enum class CommandPoolCreateFlagBits : VkCommandPoolCreateFlags + { + eTransient = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT, + eResetCommandBuffer = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, + eProtected = VK_COMMAND_POOL_CREATE_PROTECTED_BIT + }; + + // wrapper using for bitmask VkCommandPoolCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPoolCreateFlags.html + using CommandPoolCreateFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkCommandPoolCreateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CommandPoolCreateFlags allFlags = + CommandPoolCreateFlagBits::eTransient | CommandPoolCreateFlagBits::eResetCommandBuffer | CommandPoolCreateFlagBits::eProtected; + }; + + // wrapper class for enum VkCommandPoolResetFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPoolResetFlagBits.html + enum class CommandPoolResetFlagBits : VkCommandPoolResetFlags + { + eReleaseResources = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT + }; + + // wrapper using for bitmask VkCommandPoolResetFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPoolResetFlags.html + using CommandPoolResetFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkCommandPoolResetFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CommandPoolResetFlags allFlags = CommandPoolResetFlagBits::eReleaseResources; + }; + + // wrapper class for enum VkCommandBufferLevel, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferLevel.html + enum class CommandBufferLevel + { + ePrimary = VK_COMMAND_BUFFER_LEVEL_PRIMARY, + eSecondary = VK_COMMAND_BUFFER_LEVEL_SECONDARY + }; + + // wrapper class for enum VkCommandBufferResetFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferResetFlagBits.html + enum class CommandBufferResetFlagBits : VkCommandBufferResetFlags + { + eReleaseResources = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT + }; + + // wrapper using for bitmask VkCommandBufferResetFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferResetFlags.html + using CommandBufferResetFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkCommandBufferResetFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CommandBufferResetFlags allFlags = CommandBufferResetFlagBits::eReleaseResources; + }; + + // wrapper class for enum VkCommandBufferUsageFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferUsageFlagBits.html + enum class CommandBufferUsageFlagBits : VkCommandBufferUsageFlags + { + eOneTimeSubmit = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, + eRenderPassContinue = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, + eSimultaneousUse = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT + }; + + // wrapper using for bitmask VkCommandBufferUsageFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferUsageFlags.html + using CommandBufferUsageFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkCommandBufferUsageFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CommandBufferUsageFlags allFlags = + CommandBufferUsageFlagBits::eOneTimeSubmit | CommandBufferUsageFlagBits::eRenderPassContinue | CommandBufferUsageFlagBits::eSimultaneousUse; + }; + + // wrapper class for enum VkQueryControlFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryControlFlagBits.html + enum class QueryControlFlagBits : VkQueryControlFlags + { + ePrecise = VK_QUERY_CONTROL_PRECISE_BIT + }; + + // wrapper using for bitmask VkQueryControlFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryControlFlags.html + using QueryControlFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkQueryControlFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR QueryControlFlags allFlags = QueryControlFlagBits::ePrecise; + }; + + // wrapper class for enum VkIndexType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndexType.html + enum class IndexType + { + eUint16 = VK_INDEX_TYPE_UINT16, + eUint32 = VK_INDEX_TYPE_UINT32, + eUint8 = VK_INDEX_TYPE_UINT8, + eUint8EXT = VK_INDEX_TYPE_UINT8_EXT, + eUint8KHR = VK_INDEX_TYPE_UINT8_KHR, + eNoneKHR = VK_INDEX_TYPE_NONE_KHR, + eNoneNV = VK_INDEX_TYPE_NONE_NV + }; + + //========================= + //=== Index Type Traits === + //========================= + + template + struct IndexTypeValue + { + }; + + template <> + struct IndexTypeValue + { + static VULKAN_HPP_CONST_OR_CONSTEXPR IndexType value = IndexType::eUint16; + }; + + template <> + struct CppType + { + using Type = uint16_t; + }; + + template <> + struct IndexTypeValue + { + static VULKAN_HPP_CONST_OR_CONSTEXPR IndexType value = IndexType::eUint32; + }; + + template <> + struct CppType + { + using Type = uint32_t; + }; + + template <> + struct IndexTypeValue + { + static VULKAN_HPP_CONST_OR_CONSTEXPR IndexType value = IndexType::eUint8; + }; + + template <> + struct CppType + { + using Type = uint8_t; + }; + + // wrapper class for enum VkStencilFaceFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkStencilFaceFlagBits.html + enum class StencilFaceFlagBits : VkStencilFaceFlags + { + eFront = VK_STENCIL_FACE_FRONT_BIT, + eBack = VK_STENCIL_FACE_BACK_BIT, + eFrontAndBack = VK_STENCIL_FACE_FRONT_AND_BACK, + eVkStencilFrontAndBack = VK_STENCIL_FRONT_AND_BACK + }; + + // wrapper using for bitmask VkStencilFaceFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkStencilFaceFlags.html + using StencilFaceFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkStencilFaceFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StencilFaceFlags allFlags = + StencilFaceFlagBits::eFront | StencilFaceFlagBits::eBack | StencilFaceFlagBits::eFrontAndBack; + }; + + // wrapper class for enum VkSubpassContents, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassContents.html + enum class SubpassContents + { + eInline = VK_SUBPASS_CONTENTS_INLINE, + eSecondaryCommandBuffers = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, + eInlineAndSecondaryCommandBuffersKHR = VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR, + eInlineAndSecondaryCommandBuffersEXT = VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT + }; + + //=== VK_VERSION_1_1 === + + // wrapper class for enum VkSubgroupFeatureFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubgroupFeatureFlagBits.html + enum class SubgroupFeatureFlagBits : VkSubgroupFeatureFlags + { + eBasic = VK_SUBGROUP_FEATURE_BASIC_BIT, + eVote = VK_SUBGROUP_FEATURE_VOTE_BIT, + eArithmetic = VK_SUBGROUP_FEATURE_ARITHMETIC_BIT, + eBallot = VK_SUBGROUP_FEATURE_BALLOT_BIT, + eShuffle = VK_SUBGROUP_FEATURE_SHUFFLE_BIT, + eShuffleRelative = VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT, + eClustered = VK_SUBGROUP_FEATURE_CLUSTERED_BIT, + eQuad = VK_SUBGROUP_FEATURE_QUAD_BIT, + eRotate = VK_SUBGROUP_FEATURE_ROTATE_BIT, + eRotateKHR = VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR, + eRotateClustered = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT, + eRotateClusteredKHR = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR, + ePartitionedNV = VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV + }; + + // wrapper using for bitmask VkSubgroupFeatureFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubgroupFeatureFlags.html + using SubgroupFeatureFlags = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSubgroupFeatureFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SubgroupFeatureFlags allFlags = + SubgroupFeatureFlagBits::eBasic | SubgroupFeatureFlagBits::eVote | SubgroupFeatureFlagBits::eArithmetic | SubgroupFeatureFlagBits::eBallot | + SubgroupFeatureFlagBits::eShuffle | SubgroupFeatureFlagBits::eShuffleRelative | SubgroupFeatureFlagBits::eClustered | SubgroupFeatureFlagBits::eQuad | + SubgroupFeatureFlagBits::eRotate | SubgroupFeatureFlagBits::eRotateClustered | SubgroupFeatureFlagBits::ePartitionedNV; + }; + + // wrapper class for enum VkPeerMemoryFeatureFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPeerMemoryFeatureFlagBits.html + enum class PeerMemoryFeatureFlagBits : VkPeerMemoryFeatureFlags + { + eCopySrc = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, + eCopyDst = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, + eGenericSrc = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, + eGenericDst = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT + }; + + using PeerMemoryFeatureFlagBitsKHR = PeerMemoryFeatureFlagBits; + + // wrapper using for bitmask VkPeerMemoryFeatureFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPeerMemoryFeatureFlags.html + using PeerMemoryFeatureFlags = Flags; + using PeerMemoryFeatureFlagsKHR = PeerMemoryFeatureFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkPeerMemoryFeatureFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PeerMemoryFeatureFlags allFlags = PeerMemoryFeatureFlagBits::eCopySrc | PeerMemoryFeatureFlagBits::eCopyDst | + PeerMemoryFeatureFlagBits::eGenericSrc | PeerMemoryFeatureFlagBits::eGenericDst; + }; + + // wrapper class for enum VkMemoryAllocateFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryAllocateFlagBits.html + enum class MemoryAllocateFlagBits : VkMemoryAllocateFlags + { + eDeviceMask = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, + eDeviceAddress = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, + eDeviceAddressCaptureReplay = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, + eZeroInitializeEXT = VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT + }; + + using MemoryAllocateFlagBitsKHR = MemoryAllocateFlagBits; + + // wrapper using for bitmask VkMemoryAllocateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryAllocateFlags.html + using MemoryAllocateFlags = Flags; + using MemoryAllocateFlagsKHR = MemoryAllocateFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkMemoryAllocateFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MemoryAllocateFlags allFlags = MemoryAllocateFlagBits::eDeviceMask | MemoryAllocateFlagBits::eDeviceAddress | + MemoryAllocateFlagBits::eDeviceAddressCaptureReplay | + MemoryAllocateFlagBits::eZeroInitializeEXT; + }; + + enum class CommandPoolTrimFlagBits : VkCommandPoolTrimFlags + { + }; + + // wrapper using for bitmask VkCommandPoolTrimFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPoolTrimFlags.html + using CommandPoolTrimFlags = Flags; + using CommandPoolTrimFlagsKHR = CommandPoolTrimFlags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CommandPoolTrimFlags allFlags = {}; + }; + + // wrapper class for enum VkPointClippingBehavior, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPointClippingBehavior.html + enum class PointClippingBehavior + { + eAllClipPlanes = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, + eUserClipPlanesOnly = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY + }; + + using PointClippingBehaviorKHR = PointClippingBehavior; + + // wrapper class for enum VkTessellationDomainOrigin, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTessellationDomainOrigin.html + enum class TessellationDomainOrigin + { + eUpperLeft = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, + eLowerLeft = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT + }; + + using TessellationDomainOriginKHR = TessellationDomainOrigin; + + // wrapper class for enum VkSamplerYcbcrModelConversion, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrModelConversion.html + enum class SamplerYcbcrModelConversion + { + eRgbIdentity = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, + eYcbcrIdentity = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, + eYcbcr709 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, + eYcbcr601 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, + eYcbcr2020 = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 + }; + + using SamplerYcbcrModelConversionKHR = SamplerYcbcrModelConversion; + + // wrapper class for enum VkSamplerYcbcrRange, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrRange.html + enum class SamplerYcbcrRange + { + eItuFull = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, + eItuNarrow = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW + }; + + using SamplerYcbcrRangeKHR = SamplerYcbcrRange; + + // wrapper class for enum VkChromaLocation, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkChromaLocation.html + enum class ChromaLocation + { + eCositedEven = VK_CHROMA_LOCATION_COSITED_EVEN, + eMidpoint = VK_CHROMA_LOCATION_MIDPOINT + }; + + using ChromaLocationKHR = ChromaLocation; + + // wrapper class for enum VkDescriptorUpdateTemplateType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorUpdateTemplateType.html + enum class DescriptorUpdateTemplateType + { + eDescriptorSet = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, + ePushDescriptors = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS + }; + + using DescriptorUpdateTemplateTypeKHR = DescriptorUpdateTemplateType; + + enum class DescriptorUpdateTemplateCreateFlagBits : VkDescriptorUpdateTemplateCreateFlags + { + }; + + // wrapper using for bitmask VkDescriptorUpdateTemplateCreateFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorUpdateTemplateCreateFlags.html + using DescriptorUpdateTemplateCreateFlags = Flags; + using DescriptorUpdateTemplateCreateFlagsKHR = DescriptorUpdateTemplateCreateFlags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DescriptorUpdateTemplateCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkExternalMemoryHandleTypeFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryHandleTypeFlagBits.html + enum class ExternalMemoryHandleTypeFlagBits : VkExternalMemoryHandleTypeFlags + { + eOpaqueFd = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, + eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, + eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + eD3D11Texture = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, + eD3D11TextureKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, + eD3D12Heap = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, + eD3D12Resource = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, + eDmaBufEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + eAndroidHardwareBufferANDROID = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + eHostAllocationEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, + eHostMappedForeignMemoryEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT, +#if defined( VK_USE_PLATFORM_FUCHSIA ) + eZirconVmoFUCHSIA = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + eRdmaAddressNV = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV, +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + eScreenBufferQNX = VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX, +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + eMtlbufferEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT, + eMtltextureEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT, + eMtlheapEXT = VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + }; + + using ExternalMemoryHandleTypeFlagBitsKHR = ExternalMemoryHandleTypeFlagBits; + + // wrapper using for bitmask VkExternalMemoryHandleTypeFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryHandleTypeFlags.html + using ExternalMemoryHandleTypeFlags = Flags; + using ExternalMemoryHandleTypeFlagsKHR = ExternalMemoryHandleTypeFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalMemoryHandleTypeFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalMemoryHandleTypeFlags allFlags = + ExternalMemoryHandleTypeFlagBits::eOpaqueFd | ExternalMemoryHandleTypeFlagBits::eOpaqueWin32 | ExternalMemoryHandleTypeFlagBits::eOpaqueWin32Kmt | + ExternalMemoryHandleTypeFlagBits::eD3D11Texture | ExternalMemoryHandleTypeFlagBits::eD3D11TextureKmt | ExternalMemoryHandleTypeFlagBits::eD3D12Heap | + ExternalMemoryHandleTypeFlagBits::eD3D12Resource | ExternalMemoryHandleTypeFlagBits::eDmaBufEXT +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + | ExternalMemoryHandleTypeFlagBits::eAndroidHardwareBufferANDROID +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + | ExternalMemoryHandleTypeFlagBits::eHostAllocationEXT | ExternalMemoryHandleTypeFlagBits::eHostMappedForeignMemoryEXT +#if defined( VK_USE_PLATFORM_FUCHSIA ) + | ExternalMemoryHandleTypeFlagBits::eZirconVmoFUCHSIA +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + | ExternalMemoryHandleTypeFlagBits::eRdmaAddressNV +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + | ExternalMemoryHandleTypeFlagBits::eScreenBufferQNX +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + | ExternalMemoryHandleTypeFlagBits::eMtlbufferEXT | ExternalMemoryHandleTypeFlagBits::eMtltextureEXT | ExternalMemoryHandleTypeFlagBits::eMtlheapEXT +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + ; + }; + + // wrapper class for enum VkExternalMemoryFeatureFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryFeatureFlagBits.html + enum class ExternalMemoryFeatureFlagBits : VkExternalMemoryFeatureFlags + { + eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, + eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, + eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT + }; + + using ExternalMemoryFeatureFlagBitsKHR = ExternalMemoryFeatureFlagBits; + + // wrapper using for bitmask VkExternalMemoryFeatureFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryFeatureFlags.html + using ExternalMemoryFeatureFlags = Flags; + using ExternalMemoryFeatureFlagsKHR = ExternalMemoryFeatureFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalMemoryFeatureFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalMemoryFeatureFlags allFlags = + ExternalMemoryFeatureFlagBits::eDedicatedOnly | ExternalMemoryFeatureFlagBits::eExportable | ExternalMemoryFeatureFlagBits::eImportable; + }; + + // wrapper class for enum VkExternalFenceHandleTypeFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFenceHandleTypeFlagBits.html + enum class ExternalFenceHandleTypeFlagBits : VkExternalFenceHandleTypeFlags + { + eOpaqueFd = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, + eOpaqueWin32 = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + eOpaqueWin32Kmt = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + eSyncFd = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT + }; + + using ExternalFenceHandleTypeFlagBitsKHR = ExternalFenceHandleTypeFlagBits; + + // wrapper using for bitmask VkExternalFenceHandleTypeFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFenceHandleTypeFlags.html + using ExternalFenceHandleTypeFlags = Flags; + using ExternalFenceHandleTypeFlagsKHR = ExternalFenceHandleTypeFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalFenceHandleTypeFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalFenceHandleTypeFlags allFlags = + ExternalFenceHandleTypeFlagBits::eOpaqueFd | ExternalFenceHandleTypeFlagBits::eOpaqueWin32 | ExternalFenceHandleTypeFlagBits::eOpaqueWin32Kmt | + ExternalFenceHandleTypeFlagBits::eSyncFd; + }; + + // wrapper class for enum VkExternalFenceFeatureFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFenceFeatureFlagBits.html + enum class ExternalFenceFeatureFlagBits : VkExternalFenceFeatureFlags + { + eExportable = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, + eImportable = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT + }; + + using ExternalFenceFeatureFlagBitsKHR = ExternalFenceFeatureFlagBits; + + // wrapper using for bitmask VkExternalFenceFeatureFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFenceFeatureFlags.html + using ExternalFenceFeatureFlags = Flags; + using ExternalFenceFeatureFlagsKHR = ExternalFenceFeatureFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalFenceFeatureFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalFenceFeatureFlags allFlags = + ExternalFenceFeatureFlagBits::eExportable | ExternalFenceFeatureFlagBits::eImportable; + }; + + // wrapper class for enum VkFenceImportFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceImportFlagBits.html + enum class FenceImportFlagBits : VkFenceImportFlags + { + eTemporary = VK_FENCE_IMPORT_TEMPORARY_BIT + }; + + using FenceImportFlagBitsKHR = FenceImportFlagBits; + + // wrapper using for bitmask VkFenceImportFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceImportFlags.html + using FenceImportFlags = Flags; + using FenceImportFlagsKHR = FenceImportFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkFenceImportFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR FenceImportFlags allFlags = FenceImportFlagBits::eTemporary; + }; + + // wrapper class for enum VkSemaphoreImportFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreImportFlagBits.html + enum class SemaphoreImportFlagBits : VkSemaphoreImportFlags + { + eTemporary = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT + }; + + using SemaphoreImportFlagBitsKHR = SemaphoreImportFlagBits; + + // wrapper using for bitmask VkSemaphoreImportFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreImportFlags.html + using SemaphoreImportFlags = Flags; + using SemaphoreImportFlagsKHR = SemaphoreImportFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkSemaphoreImportFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SemaphoreImportFlags allFlags = SemaphoreImportFlagBits::eTemporary; + }; + + // wrapper class for enum VkExternalSemaphoreHandleTypeFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalSemaphoreHandleTypeFlagBits.html + enum class ExternalSemaphoreHandleTypeFlagBits : VkExternalSemaphoreHandleTypeFlags + { + eOpaqueFd = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, + eOpaqueWin32 = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, + eOpaqueWin32Kmt = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, + eD3D12Fence = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, + eD3D11Fence = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT, + eSyncFd = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, +#if defined( VK_USE_PLATFORM_FUCHSIA ) + eZirconEventFUCHSIA = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + }; + + using ExternalSemaphoreHandleTypeFlagBitsKHR = ExternalSemaphoreHandleTypeFlagBits; + + // wrapper using for bitmask VkExternalSemaphoreHandleTypeFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalSemaphoreHandleTypeFlags.html + using ExternalSemaphoreHandleTypeFlags = Flags; + using ExternalSemaphoreHandleTypeFlagsKHR = ExternalSemaphoreHandleTypeFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalSemaphoreHandleTypeFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalSemaphoreHandleTypeFlags allFlags = + ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd | ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32 | + ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32Kmt | ExternalSemaphoreHandleTypeFlagBits::eD3D12Fence | ExternalSemaphoreHandleTypeFlagBits::eSyncFd +#if defined( VK_USE_PLATFORM_FUCHSIA ) + | ExternalSemaphoreHandleTypeFlagBits::eZirconEventFUCHSIA +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + ; + }; + + // wrapper class for enum VkExternalSemaphoreFeatureFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalSemaphoreFeatureFlagBits.html + enum class ExternalSemaphoreFeatureFlagBits : VkExternalSemaphoreFeatureFlags + { + eExportable = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, + eImportable = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT + }; + + using ExternalSemaphoreFeatureFlagBitsKHR = ExternalSemaphoreFeatureFlagBits; + + // wrapper using for bitmask VkExternalSemaphoreFeatureFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalSemaphoreFeatureFlags.html + using ExternalSemaphoreFeatureFlags = Flags; + using ExternalSemaphoreFeatureFlagsKHR = ExternalSemaphoreFeatureFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalSemaphoreFeatureFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalSemaphoreFeatureFlags allFlags = + ExternalSemaphoreFeatureFlagBits::eExportable | ExternalSemaphoreFeatureFlagBits::eImportable; + }; + + //=== VK_VERSION_1_2 === + + // wrapper class for enum VkDriverId, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDriverId.html + enum class DriverId + { + eAmdProprietary = VK_DRIVER_ID_AMD_PROPRIETARY, + eAmdOpenSource = VK_DRIVER_ID_AMD_OPEN_SOURCE, + eMesaRadv = VK_DRIVER_ID_MESA_RADV, + eNvidiaProprietary = VK_DRIVER_ID_NVIDIA_PROPRIETARY, + eIntelProprietaryWindows = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, + eIntelOpenSourceMESA = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, + eImaginationProprietary = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, + eQualcommProprietary = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, + eArmProprietary = VK_DRIVER_ID_ARM_PROPRIETARY, + eGoogleSwiftshader = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, + eGgpProprietary = VK_DRIVER_ID_GGP_PROPRIETARY, + eBroadcomProprietary = VK_DRIVER_ID_BROADCOM_PROPRIETARY, + eMesaLlvmpipe = VK_DRIVER_ID_MESA_LLVMPIPE, + eMoltenvk = VK_DRIVER_ID_MOLTENVK, + eCoreaviProprietary = VK_DRIVER_ID_COREAVI_PROPRIETARY, + eJuiceProprietary = VK_DRIVER_ID_JUICE_PROPRIETARY, + eVerisiliconProprietary = VK_DRIVER_ID_VERISILICON_PROPRIETARY, + eMesaTurnip = VK_DRIVER_ID_MESA_TURNIP, + eMesaV3Dv = VK_DRIVER_ID_MESA_V3DV, + eMesaPanvk = VK_DRIVER_ID_MESA_PANVK, + eSamsungProprietary = VK_DRIVER_ID_SAMSUNG_PROPRIETARY, + eMesaVenus = VK_DRIVER_ID_MESA_VENUS, + eMesaDozen = VK_DRIVER_ID_MESA_DOZEN, + eMesaNvk = VK_DRIVER_ID_MESA_NVK, + eImaginationOpenSourceMESA = VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA, + eMesaHoneykrisp = VK_DRIVER_ID_MESA_HONEYKRISP, + eVulkanScEmulationOnVulkan = VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN + }; + + using DriverIdKHR = DriverId; + + // wrapper class for enum VkShaderFloatControlsIndependence, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderFloatControlsIndependence.html + enum class ShaderFloatControlsIndependence + { + e32BitOnly = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, + eAll = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, + eNone = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE + }; + + using ShaderFloatControlsIndependenceKHR = ShaderFloatControlsIndependence; + + // wrapper class for enum VkDescriptorBindingFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorBindingFlagBits.html + enum class DescriptorBindingFlagBits : VkDescriptorBindingFlags + { + eUpdateAfterBind = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, + eUpdateUnusedWhilePending = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, + ePartiallyBound = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, + eVariableDescriptorCount = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT + }; + + using DescriptorBindingFlagBitsEXT = DescriptorBindingFlagBits; + + // wrapper using for bitmask VkDescriptorBindingFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorBindingFlags.html + using DescriptorBindingFlags = Flags; + using DescriptorBindingFlagsEXT = DescriptorBindingFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkDescriptorBindingFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DescriptorBindingFlags allFlags = + DescriptorBindingFlagBits::eUpdateAfterBind | DescriptorBindingFlagBits::eUpdateUnusedWhilePending | DescriptorBindingFlagBits::ePartiallyBound | + DescriptorBindingFlagBits::eVariableDescriptorCount; + }; + + // wrapper class for enum VkResolveModeFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkResolveModeFlagBits.html + enum class ResolveModeFlagBits : VkResolveModeFlags + { + eNone = VK_RESOLVE_MODE_NONE, + eSampleZero = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, + eAverage = VK_RESOLVE_MODE_AVERAGE_BIT, + eMin = VK_RESOLVE_MODE_MIN_BIT, + eMax = VK_RESOLVE_MODE_MAX_BIT, +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + eExternalFormatDownsampleANDROID = VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + }; + + using ResolveModeFlagBitsKHR = ResolveModeFlagBits; + + // wrapper using for bitmask VkResolveModeFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkResolveModeFlags.html + using ResolveModeFlags = Flags; + using ResolveModeFlagsKHR = ResolveModeFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkResolveModeFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ResolveModeFlags allFlags = ResolveModeFlagBits::eNone | ResolveModeFlagBits::eSampleZero | + ResolveModeFlagBits::eAverage | ResolveModeFlagBits::eMin | ResolveModeFlagBits::eMax +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + | ResolveModeFlagBits::eExternalFormatDownsampleANDROID +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + ; + }; + + // wrapper class for enum VkSamplerReductionMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerReductionMode.html + enum class SamplerReductionMode + { + eWeightedAverage = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, + eMin = VK_SAMPLER_REDUCTION_MODE_MIN, + eMax = VK_SAMPLER_REDUCTION_MODE_MAX, + eWeightedAverageRangeclampQCOM = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM + }; + + using SamplerReductionModeEXT = SamplerReductionMode; + + // wrapper class for enum VkSemaphoreType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreType.html + enum class SemaphoreType + { + eBinary = VK_SEMAPHORE_TYPE_BINARY, + eTimeline = VK_SEMAPHORE_TYPE_TIMELINE + }; + + using SemaphoreTypeKHR = SemaphoreType; + + // wrapper class for enum VkSemaphoreWaitFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreWaitFlagBits.html + enum class SemaphoreWaitFlagBits : VkSemaphoreWaitFlags + { + eAny = VK_SEMAPHORE_WAIT_ANY_BIT + }; + + using SemaphoreWaitFlagBitsKHR = SemaphoreWaitFlagBits; + + // wrapper using for bitmask VkSemaphoreWaitFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreWaitFlags.html + using SemaphoreWaitFlags = Flags; + using SemaphoreWaitFlagsKHR = SemaphoreWaitFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkSemaphoreWaitFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SemaphoreWaitFlags allFlags = SemaphoreWaitFlagBits::eAny; + }; + + //=== VK_VERSION_1_3 === + + // wrapper class for enum VkPipelineCreationFeedbackFlagBits, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreationFeedbackFlagBits.html + enum class PipelineCreationFeedbackFlagBits : VkPipelineCreationFeedbackFlags + { + eValid = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT, + eApplicationPipelineCacheHit = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT, + eBasePipelineAcceleration = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT + }; + + using PipelineCreationFeedbackFlagBitsEXT = PipelineCreationFeedbackFlagBits; + + // wrapper using for bitmask VkPipelineCreationFeedbackFlags, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreationFeedbackFlags.html + using PipelineCreationFeedbackFlags = Flags; + using PipelineCreationFeedbackFlagsEXT = PipelineCreationFeedbackFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineCreationFeedbackFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCreationFeedbackFlags allFlags = PipelineCreationFeedbackFlagBits::eValid | + PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit | + PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration; + }; + + // wrapper class for enum VkToolPurposeFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkToolPurposeFlagBits.html + enum class ToolPurposeFlagBits : VkToolPurposeFlags + { + eValidation = VK_TOOL_PURPOSE_VALIDATION_BIT, + eProfiling = VK_TOOL_PURPOSE_PROFILING_BIT, + eTracing = VK_TOOL_PURPOSE_TRACING_BIT, + eAdditionalFeatures = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT, + eModifyingFeatures = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT, + eDebugReportingEXT = VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT, + eDebugMarkersEXT = VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT + }; + + using ToolPurposeFlagBitsEXT = ToolPurposeFlagBits; + + // wrapper using for bitmask VkToolPurposeFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkToolPurposeFlags.html + using ToolPurposeFlags = Flags; + using ToolPurposeFlagsEXT = ToolPurposeFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkToolPurposeFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ToolPurposeFlags allFlags = + ToolPurposeFlagBits::eValidation | ToolPurposeFlagBits::eProfiling | ToolPurposeFlagBits::eTracing | ToolPurposeFlagBits::eAdditionalFeatures | + ToolPurposeFlagBits::eModifyingFeatures | ToolPurposeFlagBits::eDebugReportingEXT | ToolPurposeFlagBits::eDebugMarkersEXT; + }; + + enum class PrivateDataSlotCreateFlagBits : VkPrivateDataSlotCreateFlags + { + }; + + using PrivateDataSlotCreateFlagBitsEXT = PrivateDataSlotCreateFlagBits; + + // wrapper using for bitmask VkPrivateDataSlotCreateFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPrivateDataSlotCreateFlags.html + using PrivateDataSlotCreateFlags = Flags; + using PrivateDataSlotCreateFlagsEXT = PrivateDataSlotCreateFlags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PrivateDataSlotCreateFlags allFlags = {}; + }; + + // wrapper class for enum VkPipelineStageFlagBits2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineStageFlagBits2.html + enum class PipelineStageFlagBits2 : VkPipelineStageFlags2 + { + eNone = VK_PIPELINE_STAGE_2_NONE, + eTopOfPipe = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT, + eDrawIndirect = VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, + eVertexInput = VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, + eVertexShader = VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT, + eTessellationControlShader = VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT, + eTessellationEvaluationShader = VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT, + eGeometryShader = VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT, + eFragmentShader = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, + eEarlyFragmentTests = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, + eLateFragmentTests = VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, + eColorAttachmentOutput = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT, + eComputeShader = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, + eAllTransfer = VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, + eTransfer = VK_PIPELINE_STAGE_2_TRANSFER_BIT, + eBottomOfPipe = VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT, + eHost = VK_PIPELINE_STAGE_2_HOST_BIT, + eAllGraphics = VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, + eAllCommands = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, + eCopy = VK_PIPELINE_STAGE_2_COPY_BIT, + eResolve = VK_PIPELINE_STAGE_2_RESOLVE_BIT, + eBlit = VK_PIPELINE_STAGE_2_BLIT_BIT, + eClear = VK_PIPELINE_STAGE_2_CLEAR_BIT, + eIndexInput = VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, + eVertexAttributeInput = VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, + ePreRasterizationShaders = VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT, + eVideoDecodeKHR = VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR, + eVideoEncodeKHR = VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR, + eTransformFeedbackEXT = VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, + eConditionalRenderingEXT = VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, + eCommandPreprocessEXT = VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT, + eCommandPreprocessNV = VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV, + eFragmentShadingRateAttachmentKHR = VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eShadingRateImageNV = VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, + eAccelerationStructureBuildKHR = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, + eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV, + eRayTracingShaderKHR = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR, + eRayTracingShaderNV = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV, + eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, + eTaskShaderEXT = VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT, + eTaskShaderNV = VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV, + eMeshShaderEXT = VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT, + eMeshShaderNV = VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV, + eSubpassShaderHUAWEI = VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, + eSubpassShadingHUAWEI = VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI, + eInvocationMaskHUAWEI = VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI, + eAccelerationStructureCopyKHR = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, + eMicromapBuildEXT = VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, + eClusterCullingShaderHUAWEI = VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI, + eOpticalFlowNV = VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV, + eConvertCooperativeVectorMatrixNV = VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, + eDataGraphARM = VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM + }; + + using PipelineStageFlagBits2KHR = PipelineStageFlagBits2; + + // wrapper using for bitmask VkPipelineStageFlags2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineStageFlags2.html + using PipelineStageFlags2 = Flags; + using PipelineStageFlags2KHR = PipelineStageFlags2; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineStageFlagBits2; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineStageFlags2 allFlags = + PipelineStageFlagBits2::eNone | PipelineStageFlagBits2::eTopOfPipe | PipelineStageFlagBits2::eDrawIndirect | PipelineStageFlagBits2::eVertexInput | + PipelineStageFlagBits2::eVertexShader | PipelineStageFlagBits2::eTessellationControlShader | PipelineStageFlagBits2::eTessellationEvaluationShader | + PipelineStageFlagBits2::eGeometryShader | PipelineStageFlagBits2::eFragmentShader | PipelineStageFlagBits2::eEarlyFragmentTests | + PipelineStageFlagBits2::eLateFragmentTests | PipelineStageFlagBits2::eColorAttachmentOutput | PipelineStageFlagBits2::eComputeShader | + PipelineStageFlagBits2::eAllTransfer | PipelineStageFlagBits2::eBottomOfPipe | PipelineStageFlagBits2::eHost | PipelineStageFlagBits2::eAllGraphics | + PipelineStageFlagBits2::eAllCommands | PipelineStageFlagBits2::eCopy | PipelineStageFlagBits2::eResolve | PipelineStageFlagBits2::eBlit | + PipelineStageFlagBits2::eClear | PipelineStageFlagBits2::eIndexInput | PipelineStageFlagBits2::eVertexAttributeInput | + PipelineStageFlagBits2::ePreRasterizationShaders | PipelineStageFlagBits2::eVideoDecodeKHR | PipelineStageFlagBits2::eVideoEncodeKHR | + PipelineStageFlagBits2::eTransformFeedbackEXT | PipelineStageFlagBits2::eConditionalRenderingEXT | PipelineStageFlagBits2::eCommandPreprocessEXT | + PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR | PipelineStageFlagBits2::eAccelerationStructureBuildKHR | + PipelineStageFlagBits2::eRayTracingShaderKHR | PipelineStageFlagBits2::eFragmentDensityProcessEXT | PipelineStageFlagBits2::eTaskShaderEXT | + PipelineStageFlagBits2::eMeshShaderEXT | PipelineStageFlagBits2::eSubpassShaderHUAWEI | PipelineStageFlagBits2::eInvocationMaskHUAWEI | + PipelineStageFlagBits2::eAccelerationStructureCopyKHR | PipelineStageFlagBits2::eMicromapBuildEXT | PipelineStageFlagBits2::eClusterCullingShaderHUAWEI | + PipelineStageFlagBits2::eOpticalFlowNV | PipelineStageFlagBits2::eConvertCooperativeVectorMatrixNV | PipelineStageFlagBits2::eDataGraphARM; + }; + + // wrapper class for enum VkAccessFlagBits2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccessFlagBits2.html + enum class AccessFlagBits2 : VkAccessFlags2 + { + eNone = VK_ACCESS_2_NONE, + eIndirectCommandRead = VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, + eIndexRead = VK_ACCESS_2_INDEX_READ_BIT, + eVertexAttributeRead = VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, + eUniformRead = VK_ACCESS_2_UNIFORM_READ_BIT, + eInputAttachmentRead = VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, + eShaderRead = VK_ACCESS_2_SHADER_READ_BIT, + eShaderWrite = VK_ACCESS_2_SHADER_WRITE_BIT, + eColorAttachmentRead = VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, + eColorAttachmentWrite = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, + eDepthStencilAttachmentRead = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, + eDepthStencilAttachmentWrite = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, + eTransferRead = VK_ACCESS_2_TRANSFER_READ_BIT, + eTransferWrite = VK_ACCESS_2_TRANSFER_WRITE_BIT, + eHostRead = VK_ACCESS_2_HOST_READ_BIT, + eHostWrite = VK_ACCESS_2_HOST_WRITE_BIT, + eMemoryRead = VK_ACCESS_2_MEMORY_READ_BIT, + eMemoryWrite = VK_ACCESS_2_MEMORY_WRITE_BIT, + eShaderSampledRead = VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, + eShaderStorageRead = VK_ACCESS_2_SHADER_STORAGE_READ_BIT, + eShaderStorageWrite = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, + eVideoDecodeReadKHR = VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, + eVideoDecodeWriteKHR = VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, + eVideoEncodeReadKHR = VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, + eVideoEncodeWriteKHR = VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, + eShaderTileAttachmentReadQCOM = VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, + eShaderTileAttachmentWriteQCOM = VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, + eTransformFeedbackWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, + eTransformFeedbackCounterReadEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, + eTransformFeedbackCounterWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, + eConditionalRenderingReadEXT = VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, + eCommandPreprocessReadEXT = VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_EXT, + eCommandPreprocessReadNV = VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, + eCommandPreprocessWriteEXT = VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_EXT, + eCommandPreprocessWriteNV = VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, + eFragmentShadingRateAttachmentReadKHR = VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, + eShadingRateImageReadNV = VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, + eAccelerationStructureReadKHR = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, + eAccelerationStructureReadNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV, + eAccelerationStructureWriteKHR = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, + eAccelerationStructureWriteNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV, + eFragmentDensityMapReadEXT = VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, + eColorAttachmentReadNoncoherentEXT = VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, + eDescriptorBufferReadEXT = VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, + eInvocationMaskReadHUAWEI = VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, + eShaderBindingTableReadKHR = VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, + eMicromapReadEXT = VK_ACCESS_2_MICROMAP_READ_BIT_EXT, + eMicromapWriteEXT = VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, + eOpticalFlowReadNV = VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, + eOpticalFlowWriteNV = VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, + eDataGraphReadARM = VK_ACCESS_2_DATA_GRAPH_READ_BIT_ARM, + eDataGraphWriteARM = VK_ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM + }; + + using AccessFlagBits2KHR = AccessFlagBits2; + + // wrapper using for bitmask VkAccessFlags2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccessFlags2.html + using AccessFlags2 = Flags; + using AccessFlags2KHR = AccessFlags2; + + template <> + struct FlagTraits + { + using WrappedType = VkAccessFlagBits2; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AccessFlags2 allFlags = + AccessFlagBits2::eNone | AccessFlagBits2::eIndirectCommandRead | AccessFlagBits2::eIndexRead | AccessFlagBits2::eVertexAttributeRead | + AccessFlagBits2::eUniformRead | AccessFlagBits2::eInputAttachmentRead | AccessFlagBits2::eShaderRead | AccessFlagBits2::eShaderWrite | + AccessFlagBits2::eColorAttachmentRead | AccessFlagBits2::eColorAttachmentWrite | AccessFlagBits2::eDepthStencilAttachmentRead | + AccessFlagBits2::eDepthStencilAttachmentWrite | AccessFlagBits2::eTransferRead | AccessFlagBits2::eTransferWrite | AccessFlagBits2::eHostRead | + AccessFlagBits2::eHostWrite | AccessFlagBits2::eMemoryRead | AccessFlagBits2::eMemoryWrite | AccessFlagBits2::eShaderSampledRead | + AccessFlagBits2::eShaderStorageRead | AccessFlagBits2::eShaderStorageWrite | AccessFlagBits2::eVideoDecodeReadKHR | + AccessFlagBits2::eVideoDecodeWriteKHR | AccessFlagBits2::eVideoEncodeReadKHR | AccessFlagBits2::eVideoEncodeWriteKHR | + AccessFlagBits2::eShaderTileAttachmentReadQCOM | AccessFlagBits2::eShaderTileAttachmentWriteQCOM | AccessFlagBits2::eTransformFeedbackWriteEXT | + AccessFlagBits2::eTransformFeedbackCounterReadEXT | AccessFlagBits2::eTransformFeedbackCounterWriteEXT | AccessFlagBits2::eConditionalRenderingReadEXT | + AccessFlagBits2::eCommandPreprocessReadEXT | AccessFlagBits2::eCommandPreprocessWriteEXT | AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR | + AccessFlagBits2::eAccelerationStructureReadKHR | AccessFlagBits2::eAccelerationStructureWriteKHR | AccessFlagBits2::eFragmentDensityMapReadEXT | + AccessFlagBits2::eColorAttachmentReadNoncoherentEXT | AccessFlagBits2::eDescriptorBufferReadEXT | AccessFlagBits2::eInvocationMaskReadHUAWEI | + AccessFlagBits2::eShaderBindingTableReadKHR | AccessFlagBits2::eMicromapReadEXT | AccessFlagBits2::eMicromapWriteEXT | + AccessFlagBits2::eOpticalFlowReadNV | AccessFlagBits2::eOpticalFlowWriteNV | AccessFlagBits2::eDataGraphReadARM | AccessFlagBits2::eDataGraphWriteARM; + }; + + // wrapper class for enum VkSubmitFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubmitFlagBits.html + enum class SubmitFlagBits : VkSubmitFlags + { + eProtected = VK_SUBMIT_PROTECTED_BIT + }; + + using SubmitFlagBitsKHR = SubmitFlagBits; + + // wrapper using for bitmask VkSubmitFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubmitFlags.html + using SubmitFlags = Flags; + using SubmitFlagsKHR = SubmitFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkSubmitFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SubmitFlags allFlags = SubmitFlagBits::eProtected; + }; + + // wrapper class for enum VkRenderingFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingFlagBits.html + enum class RenderingFlagBits : VkRenderingFlags + { + eContentsSecondaryCommandBuffers = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT, + eSuspending = VK_RENDERING_SUSPENDING_BIT, + eResuming = VK_RENDERING_RESUMING_BIT, + eEnableLegacyDitheringEXT = VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT, + eContentsInlineKHR = VK_RENDERING_CONTENTS_INLINE_BIT_KHR, + eContentsInlineEXT = VK_RENDERING_CONTENTS_INLINE_BIT_EXT, + ePerLayerFragmentDensityVALVE = VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE + }; + + using RenderingFlagBitsKHR = RenderingFlagBits; + + // wrapper using for bitmask VkRenderingFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingFlags.html + using RenderingFlags = Flags; + using RenderingFlagsKHR = RenderingFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkRenderingFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR RenderingFlags allFlags = RenderingFlagBits::eContentsSecondaryCommandBuffers | RenderingFlagBits::eSuspending | + RenderingFlagBits::eResuming | RenderingFlagBits::eEnableLegacyDitheringEXT | + RenderingFlagBits::eContentsInlineKHR | RenderingFlagBits::ePerLayerFragmentDensityVALVE; + }; + + // wrapper class for enum VkFormatFeatureFlagBits2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatFeatureFlagBits2.html + enum class FormatFeatureFlagBits2 : VkFormatFeatureFlags2 + { + eSampledImage = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT, + eStorageImage = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT, + eStorageImageAtomic = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT, + eUniformTexelBuffer = VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT, + eStorageTexelBuffer = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT, + eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT, + eVertexBuffer = VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT, + eColorAttachment = VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT, + eColorAttachmentBlend = VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT, + eDepthStencilAttachment = VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT, + eBlitSrc = VK_FORMAT_FEATURE_2_BLIT_SRC_BIT, + eBlitDst = VK_FORMAT_FEATURE_2_BLIT_DST_BIT, + eSampledImageFilterLinear = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT, + eTransferSrc = VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT, + eTransferDst = VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT, + eSampledImageFilterMinmax = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT, + eMidpointChromaSamples = VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT, + eSampledImageYcbcrConversionLinearFilter = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, + eSampledImageYcbcrConversionSeparateReconstructionFilter = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, + eSampledImageYcbcrConversionChromaReconstructionExplicit = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, + eSampledImageYcbcrConversionChromaReconstructionExplicitForceable = + VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, + eDisjoint = VK_FORMAT_FEATURE_2_DISJOINT_BIT, + eCositedChromaSamples = VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT, + eStorageReadWithoutFormat = VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT, + eStorageWriteWithoutFormat = VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT, + eSampledImageDepthComparison = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT, + eSampledImageFilterCubic = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT, + eSampledImageFilterCubicEXT = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT, + eHostImageTransfer = VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT, + eHostImageTransferEXT = VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT, + eVideoDecodeOutputKHR = VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR, + eVideoDecodeDpbKHR = VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR, + eAccelerationStructureVertexBufferKHR = VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR, + eFragmentDensityMapEXT = VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT, + eFragmentShadingRateAttachmentKHR = VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eVideoEncodeInputKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR, + eVideoEncodeDpbKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR, + eAccelerationStructureRadiusBufferNV = VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV, + eLinearColorAttachmentNV = VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV, + eWeightImageQCOM = VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM, + eWeightSampledImageQCOM = VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM, + eBlockMatchingQCOM = VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM, + eBoxFilterSampledQCOM = VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM, + eTensorShaderARM = VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM, + eTensorImageAliasingARM = VK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM, + eOpticalFlowImageNV = VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV, + eOpticalFlowVectorNV = VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV, + eOpticalFlowCostNV = VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV, + eTensorDataGraphARM = VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM, + eVideoEncodeQuantizationDeltaMapKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, + eVideoEncodeEmphasisMapKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR + }; + + using FormatFeatureFlagBits2KHR = FormatFeatureFlagBits2; + + // wrapper using for bitmask VkFormatFeatureFlags2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatFeatureFlags2.html + using FormatFeatureFlags2 = Flags; + using FormatFeatureFlags2KHR = FormatFeatureFlags2; + + template <> + struct FlagTraits + { + using WrappedType = VkFormatFeatureFlagBits2; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR FormatFeatureFlags2 allFlags = + FormatFeatureFlagBits2::eSampledImage | FormatFeatureFlagBits2::eStorageImage | FormatFeatureFlagBits2::eStorageImageAtomic | + FormatFeatureFlagBits2::eUniformTexelBuffer | FormatFeatureFlagBits2::eStorageTexelBuffer | FormatFeatureFlagBits2::eStorageTexelBufferAtomic | + FormatFeatureFlagBits2::eVertexBuffer | FormatFeatureFlagBits2::eColorAttachment | FormatFeatureFlagBits2::eColorAttachmentBlend | + FormatFeatureFlagBits2::eDepthStencilAttachment | FormatFeatureFlagBits2::eBlitSrc | FormatFeatureFlagBits2::eBlitDst | + FormatFeatureFlagBits2::eSampledImageFilterLinear | FormatFeatureFlagBits2::eTransferSrc | FormatFeatureFlagBits2::eTransferDst | + FormatFeatureFlagBits2::eSampledImageFilterMinmax | FormatFeatureFlagBits2::eMidpointChromaSamples | + FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter | FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter | + FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit | + FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable | FormatFeatureFlagBits2::eDisjoint | + FormatFeatureFlagBits2::eCositedChromaSamples | FormatFeatureFlagBits2::eStorageReadWithoutFormat | FormatFeatureFlagBits2::eStorageWriteWithoutFormat | + FormatFeatureFlagBits2::eSampledImageDepthComparison | FormatFeatureFlagBits2::eSampledImageFilterCubic | FormatFeatureFlagBits2::eHostImageTransfer | + FormatFeatureFlagBits2::eVideoDecodeOutputKHR | FormatFeatureFlagBits2::eVideoDecodeDpbKHR | + FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR | FormatFeatureFlagBits2::eFragmentDensityMapEXT | + FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR | FormatFeatureFlagBits2::eVideoEncodeInputKHR | FormatFeatureFlagBits2::eVideoEncodeDpbKHR | + FormatFeatureFlagBits2::eAccelerationStructureRadiusBufferNV | FormatFeatureFlagBits2::eLinearColorAttachmentNV | + FormatFeatureFlagBits2::eWeightImageQCOM | FormatFeatureFlagBits2::eWeightSampledImageQCOM | FormatFeatureFlagBits2::eBlockMatchingQCOM | + FormatFeatureFlagBits2::eBoxFilterSampledQCOM | FormatFeatureFlagBits2::eTensorShaderARM | FormatFeatureFlagBits2::eTensorImageAliasingARM | + FormatFeatureFlagBits2::eOpticalFlowImageNV | FormatFeatureFlagBits2::eOpticalFlowVectorNV | FormatFeatureFlagBits2::eOpticalFlowCostNV | + FormatFeatureFlagBits2::eTensorDataGraphARM | FormatFeatureFlagBits2::eVideoEncodeQuantizationDeltaMapKHR | + FormatFeatureFlagBits2::eVideoEncodeEmphasisMapKHR; + }; + + //=== VK_VERSION_1_4 === + + // wrapper class for enum VkQueueGlobalPriority, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueGlobalPriority.html + enum class QueueGlobalPriority + { + eLow = VK_QUEUE_GLOBAL_PRIORITY_LOW, + eLowKHR = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR, + eMedium = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + eMediumKHR = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR, + eHigh = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + eHighKHR = VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR, + eRealtime = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + eRealtimeKHR = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR + }; + + using QueueGlobalPriorityEXT = QueueGlobalPriority; + using QueueGlobalPriorityKHR = QueueGlobalPriority; + + // wrapper class for enum VkLineRasterizationMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLineRasterizationMode.html + enum class LineRasterizationMode + { + eDefault = VK_LINE_RASTERIZATION_MODE_DEFAULT, + eDefaultKHR = VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR, + eRectangular = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + eRectangularKHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR, + eBresenham = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + eBresenhamKHR = VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR, + eRectangularSmooth = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + eRectangularSmoothKHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR + }; + + using LineRasterizationModeEXT = LineRasterizationMode; + using LineRasterizationModeKHR = LineRasterizationMode; + + // wrapper class for enum VkMemoryUnmapFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryUnmapFlagBits.html + enum class MemoryUnmapFlagBits : VkMemoryUnmapFlags + { + eReserveEXT = VK_MEMORY_UNMAP_RESERVE_BIT_EXT + }; + + using MemoryUnmapFlagBitsKHR = MemoryUnmapFlagBits; + + // wrapper using for bitmask VkMemoryUnmapFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryUnmapFlags.html + using MemoryUnmapFlags = Flags; + using MemoryUnmapFlagsKHR = MemoryUnmapFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkMemoryUnmapFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MemoryUnmapFlags allFlags = MemoryUnmapFlagBits::eReserveEXT; + }; + + // wrapper class for enum VkPipelineCreateFlagBits2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreateFlagBits2.html + enum class PipelineCreateFlagBits2 : VkPipelineCreateFlags2 + { + eDisableOptimization = VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT, + eAllowDerivatives = VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT, + eDerivative = VK_PIPELINE_CREATE_2_DERIVATIVE_BIT, + eViewIndexFromDeviceIndex = VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, + eDispatchBase = VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT, + eFailOnPipelineCompileRequired = VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, + eEarlyReturnOnFailure = VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT, + eNoProtectedAccess = VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT, + eNoProtectedAccessEXT = VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT, + eProtectedAccessOnly = VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT, + eProtectedAccessOnlyEXT = VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eExecutionGraphAMDX = VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + eRayTracingAllowSpheresAndLinearSweptSpheresNV = VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_SPHERES_AND_LINEAR_SWEPT_SPHERES_BIT_NV, + eEnableLegacyDitheringEXT = VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, + eDeferCompileNV = VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV, + eCaptureStatisticsKHR = VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR, + eCaptureInternalRepresentationsKHR = VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, + eLinkTimeOptimizationEXT = VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT, + eRetainLinkTimeOptimizationInfoEXT = VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, + eLibraryKHR = VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR, + eRayTracingSkipTrianglesKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, + eRayTracingSkipBuiltInPrimitives = VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR, + eRayTracingSkipAabbsKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR, + eRayTracingNoNullAnyHitShadersKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, + eRayTracingNoNullClosestHitShadersKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, + eRayTracingNoNullMissShadersKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, + eRayTracingNoNullIntersectionShadersKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, + eRayTracingShaderGroupHandleCaptureReplayKHR = VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR, + eIndirectBindableNV = VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV, + eRayTracingAllowMotionNV = VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV, + eRenderingFragmentShadingRateAttachmentKHR = VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + eRenderingFragmentDensityMapAttachmentEXT = VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + eRayTracingOpacityMicromapEXT = VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT, + eColorAttachmentFeedbackLoopEXT = VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, + eDepthStencilAttachmentFeedbackLoopEXT = VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, + eRayTracingDisplacementMicromapNV = VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV, + eDescriptorBufferEXT = VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT, + eDisallowOpacityMicromapARM = VK_PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM, + eCaptureDataKHR = VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR, + eIndirectBindableEXT = VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT, + ePerLayerFragmentDensityVALVE = VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE + }; + + using PipelineCreateFlagBits2KHR = PipelineCreateFlagBits2; + + // wrapper using for bitmask VkPipelineCreateFlags2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreateFlags2.html + using PipelineCreateFlags2 = Flags; + using PipelineCreateFlags2KHR = PipelineCreateFlags2; + + template <> + struct FlagTraits + { + using WrappedType = VkPipelineCreateFlagBits2; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCreateFlags2 allFlags = + PipelineCreateFlagBits2::eDisableOptimization | PipelineCreateFlagBits2::eAllowDerivatives | PipelineCreateFlagBits2::eDerivative | + PipelineCreateFlagBits2::eViewIndexFromDeviceIndex | PipelineCreateFlagBits2::eDispatchBase | PipelineCreateFlagBits2::eFailOnPipelineCompileRequired | + PipelineCreateFlagBits2::eEarlyReturnOnFailure | PipelineCreateFlagBits2::eNoProtectedAccess | PipelineCreateFlagBits2::eProtectedAccessOnly +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + | PipelineCreateFlagBits2::eExecutionGraphAMDX +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + | PipelineCreateFlagBits2::eRayTracingAllowSpheresAndLinearSweptSpheresNV | PipelineCreateFlagBits2::eEnableLegacyDitheringEXT | + PipelineCreateFlagBits2::eDeferCompileNV | PipelineCreateFlagBits2::eCaptureStatisticsKHR | PipelineCreateFlagBits2::eCaptureInternalRepresentationsKHR | + PipelineCreateFlagBits2::eLinkTimeOptimizationEXT | PipelineCreateFlagBits2::eRetainLinkTimeOptimizationInfoEXT | PipelineCreateFlagBits2::eLibraryKHR | + PipelineCreateFlagBits2::eRayTracingSkipTrianglesKHR | PipelineCreateFlagBits2::eRayTracingSkipAabbsKHR | + PipelineCreateFlagBits2::eRayTracingNoNullAnyHitShadersKHR | PipelineCreateFlagBits2::eRayTracingNoNullClosestHitShadersKHR | + PipelineCreateFlagBits2::eRayTracingNoNullMissShadersKHR | PipelineCreateFlagBits2::eRayTracingNoNullIntersectionShadersKHR | + PipelineCreateFlagBits2::eRayTracingShaderGroupHandleCaptureReplayKHR | PipelineCreateFlagBits2::eIndirectBindableNV | + PipelineCreateFlagBits2::eRayTracingAllowMotionNV | PipelineCreateFlagBits2::eRenderingFragmentShadingRateAttachmentKHR | + PipelineCreateFlagBits2::eRenderingFragmentDensityMapAttachmentEXT | PipelineCreateFlagBits2::eRayTracingOpacityMicromapEXT | + PipelineCreateFlagBits2::eColorAttachmentFeedbackLoopEXT | PipelineCreateFlagBits2::eDepthStencilAttachmentFeedbackLoopEXT | + PipelineCreateFlagBits2::eRayTracingDisplacementMicromapNV | PipelineCreateFlagBits2::eDescriptorBufferEXT | + PipelineCreateFlagBits2::eDisallowOpacityMicromapARM | PipelineCreateFlagBits2::eCaptureDataKHR | PipelineCreateFlagBits2::eIndirectBindableEXT | + PipelineCreateFlagBits2::ePerLayerFragmentDensityVALVE; + }; + + // wrapper class for enum VkBufferUsageFlagBits2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferUsageFlagBits2.html + enum class BufferUsageFlagBits2 : VkBufferUsageFlags2 + { + eTransferSrc = VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT, + eTransferDst = VK_BUFFER_USAGE_2_TRANSFER_DST_BIT, + eUniformTexelBuffer = VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT, + eStorageTexelBuffer = VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT, + eUniformBuffer = VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT, + eStorageBuffer = VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT, + eIndexBuffer = VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT, + eVertexBuffer = VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT, + eIndirectBuffer = VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT, + eShaderDeviceAddress = VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eExecutionGraphScratchAMDX = VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + eConditionalRenderingEXT = VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT, + eShaderBindingTableKHR = VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR, + eRayTracingNV = VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV, + eTransformFeedbackBufferEXT = VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, + eTransformFeedbackCounterBufferEXT = VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT, + eVideoDecodeSrcKHR = VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR, + eVideoDecodeDstKHR = VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR, + eVideoEncodeDstKHR = VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR, + eVideoEncodeSrcKHR = VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR, + eAccelerationStructureBuildInputReadOnlyKHR = VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, + eAccelerationStructureStorageKHR = VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR, + eSamplerDescriptorBufferEXT = VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, + eResourceDescriptorBufferEXT = VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, + ePushDescriptorsDescriptorBufferEXT = VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, + eMicromapBuildInputReadOnlyEXT = VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT, + eMicromapStorageEXT = VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT, + eDataGraphForeignDescriptorARM = VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM, + eTileMemoryQCOM = VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM, + ePreprocessBufferEXT = VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT + }; + + using BufferUsageFlagBits2KHR = BufferUsageFlagBits2; + + // wrapper using for bitmask VkBufferUsageFlags2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferUsageFlags2.html + using BufferUsageFlags2 = Flags; + using BufferUsageFlags2KHR = BufferUsageFlags2; + + template <> + struct FlagTraits + { + using WrappedType = VkBufferUsageFlagBits2; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR BufferUsageFlags2 allFlags = + BufferUsageFlagBits2::eTransferSrc | BufferUsageFlagBits2::eTransferDst | BufferUsageFlagBits2::eUniformTexelBuffer | + BufferUsageFlagBits2::eStorageTexelBuffer | BufferUsageFlagBits2::eUniformBuffer | BufferUsageFlagBits2::eStorageBuffer | + BufferUsageFlagBits2::eIndexBuffer | BufferUsageFlagBits2::eVertexBuffer | BufferUsageFlagBits2::eIndirectBuffer | + BufferUsageFlagBits2::eShaderDeviceAddress +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + | BufferUsageFlagBits2::eExecutionGraphScratchAMDX +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + | BufferUsageFlagBits2::eConditionalRenderingEXT | BufferUsageFlagBits2::eShaderBindingTableKHR | BufferUsageFlagBits2::eTransformFeedbackBufferEXT | + BufferUsageFlagBits2::eTransformFeedbackCounterBufferEXT | BufferUsageFlagBits2::eVideoDecodeSrcKHR | BufferUsageFlagBits2::eVideoDecodeDstKHR | + BufferUsageFlagBits2::eVideoEncodeDstKHR | BufferUsageFlagBits2::eVideoEncodeSrcKHR | BufferUsageFlagBits2::eAccelerationStructureBuildInputReadOnlyKHR | + BufferUsageFlagBits2::eAccelerationStructureStorageKHR | BufferUsageFlagBits2::eSamplerDescriptorBufferEXT | + BufferUsageFlagBits2::eResourceDescriptorBufferEXT | BufferUsageFlagBits2::ePushDescriptorsDescriptorBufferEXT | + BufferUsageFlagBits2::eMicromapBuildInputReadOnlyEXT | BufferUsageFlagBits2::eMicromapStorageEXT | BufferUsageFlagBits2::eDataGraphForeignDescriptorARM | + BufferUsageFlagBits2::eTileMemoryQCOM | BufferUsageFlagBits2::ePreprocessBufferEXT; + }; + + // wrapper class for enum VkPipelineRobustnessBufferBehavior, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRobustnessBufferBehavior.html + enum class PipelineRobustnessBufferBehavior + { + eDeviceDefault = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT, + eDisabled = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + eRobustBufferAccess = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS, + eRobustBufferAccess2 = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 + }; + + using PipelineRobustnessBufferBehaviorEXT = PipelineRobustnessBufferBehavior; + + // wrapper class for enum VkPipelineRobustnessImageBehavior, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRobustnessImageBehavior.html + enum class PipelineRobustnessImageBehavior + { + eDeviceDefault = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT, + eDisabled = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED, + eRobustImageAccess = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS, + eRobustImageAccess2 = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2 + }; + + using PipelineRobustnessImageBehaviorEXT = PipelineRobustnessImageBehavior; + + // wrapper class for enum VkHostImageCopyFlagBits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkHostImageCopyFlagBits.html + enum class HostImageCopyFlagBits : VkHostImageCopyFlags + { + eMemcpy = VK_HOST_IMAGE_COPY_MEMCPY_BIT + }; + + using HostImageCopyFlagBitsEXT = HostImageCopyFlagBits; + + // wrapper using for bitmask VkHostImageCopyFlags, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkHostImageCopyFlags.html + using HostImageCopyFlags = Flags; + using HostImageCopyFlagsEXT = HostImageCopyFlags; + + template <> + struct FlagTraits + { + using WrappedType = VkHostImageCopyFlagBits; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR HostImageCopyFlags allFlags = HostImageCopyFlagBits::eMemcpy; + }; + + //=== VK_KHR_surface === + + // wrapper class for enum VkSurfaceTransformFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceTransformFlagBitsKHR.html + enum class SurfaceTransformFlagBitsKHR : VkSurfaceTransformFlagsKHR + { + eIdentity = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, + eRotate90 = VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, + eRotate180 = VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, + eRotate270 = VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, + eHorizontalMirror = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR, + eHorizontalMirrorRotate90 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR, + eHorizontalMirrorRotate180 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR, + eHorizontalMirrorRotate270 = VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR, + eInherit = VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR + }; + + // wrapper using for bitmask VkSurfaceTransformFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceTransformFlagsKHR.html + using SurfaceTransformFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSurfaceTransformFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SurfaceTransformFlagsKHR allFlags = + SurfaceTransformFlagBitsKHR::eIdentity | SurfaceTransformFlagBitsKHR::eRotate90 | SurfaceTransformFlagBitsKHR::eRotate180 | + SurfaceTransformFlagBitsKHR::eRotate270 | SurfaceTransformFlagBitsKHR::eHorizontalMirror | SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90 | + SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180 | SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270 | SurfaceTransformFlagBitsKHR::eInherit; + }; + + // wrapper class for enum VkPresentModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentModeKHR.html + enum class PresentModeKHR + { + eImmediate = VK_PRESENT_MODE_IMMEDIATE_KHR, + eMailbox = VK_PRESENT_MODE_MAILBOX_KHR, + eFifo = VK_PRESENT_MODE_FIFO_KHR, + eFifoRelaxed = VK_PRESENT_MODE_FIFO_RELAXED_KHR, + eSharedDemandRefresh = VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, + eSharedContinuousRefresh = VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, + eFifoLatestReady = VK_PRESENT_MODE_FIFO_LATEST_READY_KHR, + eFifoLatestReadyEXT = VK_PRESENT_MODE_FIFO_LATEST_READY_EXT + }; + + // wrapper class for enum VkColorSpaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkColorSpaceKHR.html + enum class ColorSpaceKHR + { + eSrgbNonlinear = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + eVkColorspaceSrgbNonlinear = VK_COLORSPACE_SRGB_NONLINEAR_KHR, + eDisplayP3NonlinearEXT = VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT, + eExtendedSrgbLinearEXT = VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT, + eDisplayP3LinearEXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, + eDciP3LinearEXT = VK_COLOR_SPACE_DCI_P3_LINEAR_EXT, + eDciP3NonlinearEXT = VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT, + eBt709LinearEXT = VK_COLOR_SPACE_BT709_LINEAR_EXT, + eBt709NonlinearEXT = VK_COLOR_SPACE_BT709_NONLINEAR_EXT, + eBt2020LinearEXT = VK_COLOR_SPACE_BT2020_LINEAR_EXT, + eHdr10St2084EXT = VK_COLOR_SPACE_HDR10_ST2084_EXT, + eDolbyvisionEXT VULKAN_HPP_DEPRECATED_17( "eDolbyvisionEXT is deprecated, but no reason was given in the API XML" ) = VK_COLOR_SPACE_DOLBYVISION_EXT, + eHdr10HlgEXT = VK_COLOR_SPACE_HDR10_HLG_EXT, + eAdobergbLinearEXT = VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT, + eAdobergbNonlinearEXT = VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT, + ePassThroughEXT = VK_COLOR_SPACE_PASS_THROUGH_EXT, + eExtendedSrgbNonlinearEXT = VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT, + eDisplayNativeAMD = VK_COLOR_SPACE_DISPLAY_NATIVE_AMD + }; + + // wrapper class for enum VkCompositeAlphaFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCompositeAlphaFlagBitsKHR.html + enum class CompositeAlphaFlagBitsKHR : VkCompositeAlphaFlagsKHR + { + eOpaque = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, + ePreMultiplied = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR, + ePostMultiplied = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR, + eInherit = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR + }; + + // wrapper using for bitmask VkCompositeAlphaFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCompositeAlphaFlagsKHR.html + using CompositeAlphaFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkCompositeAlphaFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR CompositeAlphaFlagsKHR allFlags = CompositeAlphaFlagBitsKHR::eOpaque | CompositeAlphaFlagBitsKHR::ePreMultiplied | + CompositeAlphaFlagBitsKHR::ePostMultiplied | CompositeAlphaFlagBitsKHR::eInherit; + }; + + //=== VK_KHR_swapchain === + + // wrapper class for enum VkSwapchainCreateFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainCreateFlagBitsKHR.html + enum class SwapchainCreateFlagBitsKHR : VkSwapchainCreateFlagsKHR + { + eSplitInstanceBindRegions = VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR, + eProtected = VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR, + eMutableFormat = VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR, + ePresentId2 = VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR, + ePresentWait2 = VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR, + eDeferredMemoryAllocation = VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR, + eDeferredMemoryAllocationEXT = VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT + }; + + // wrapper using for bitmask VkSwapchainCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainCreateFlagsKHR.html + using SwapchainCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSwapchainCreateFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SwapchainCreateFlagsKHR allFlags = + SwapchainCreateFlagBitsKHR::eSplitInstanceBindRegions | SwapchainCreateFlagBitsKHR::eProtected | SwapchainCreateFlagBitsKHR::eMutableFormat | + SwapchainCreateFlagBitsKHR::ePresentId2 | SwapchainCreateFlagBitsKHR::ePresentWait2 | SwapchainCreateFlagBitsKHR::eDeferredMemoryAllocation; + }; + + // wrapper class for enum VkDeviceGroupPresentModeFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupPresentModeFlagBitsKHR.html + enum class DeviceGroupPresentModeFlagBitsKHR : VkDeviceGroupPresentModeFlagsKHR + { + eLocal = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, + eRemote = VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, + eSum = VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, + eLocalMultiDevice = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR + }; + + // wrapper using for bitmask VkDeviceGroupPresentModeFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupPresentModeFlagsKHR.html + using DeviceGroupPresentModeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDeviceGroupPresentModeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DeviceGroupPresentModeFlagsKHR allFlags = + DeviceGroupPresentModeFlagBitsKHR::eLocal | DeviceGroupPresentModeFlagBitsKHR::eRemote | DeviceGroupPresentModeFlagBitsKHR::eSum | + DeviceGroupPresentModeFlagBitsKHR::eLocalMultiDevice; + }; + + //=== VK_KHR_display === + + // wrapper class for enum VkDisplayPlaneAlphaFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlaneAlphaFlagBitsKHR.html + enum class DisplayPlaneAlphaFlagBitsKHR : VkDisplayPlaneAlphaFlagsKHR + { + eOpaque = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR, + eGlobal = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR, + ePerPixel = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR, + ePerPixelPremultiplied = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR + }; + + // wrapper using for bitmask VkDisplayPlaneAlphaFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlaneAlphaFlagsKHR.html + using DisplayPlaneAlphaFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDisplayPlaneAlphaFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DisplayPlaneAlphaFlagsKHR allFlags = DisplayPlaneAlphaFlagBitsKHR::eOpaque | DisplayPlaneAlphaFlagBitsKHR::eGlobal | + DisplayPlaneAlphaFlagBitsKHR::ePerPixel | + DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied; + }; + + enum class DisplayModeCreateFlagBitsKHR : VkDisplayModeCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkDisplayModeCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeCreateFlagsKHR.html + using DisplayModeCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DisplayModeCreateFlagsKHR allFlags = {}; + }; + + enum class DisplaySurfaceCreateFlagBitsKHR : VkDisplaySurfaceCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkDisplaySurfaceCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplaySurfaceCreateFlagsKHR.html + using DisplaySurfaceCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DisplaySurfaceCreateFlagsKHR allFlags = {}; + }; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + enum class XlibSurfaceCreateFlagBitsKHR : VkXlibSurfaceCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkXlibSurfaceCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkXlibSurfaceCreateFlagsKHR.html + using XlibSurfaceCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR XlibSurfaceCreateFlagsKHR allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + enum class XcbSurfaceCreateFlagBitsKHR : VkXcbSurfaceCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkXcbSurfaceCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkXcbSurfaceCreateFlagsKHR.html + using XcbSurfaceCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR XcbSurfaceCreateFlagsKHR allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + enum class WaylandSurfaceCreateFlagBitsKHR : VkWaylandSurfaceCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkWaylandSurfaceCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkWaylandSurfaceCreateFlagsKHR.html + using WaylandSurfaceCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR WaylandSurfaceCreateFlagsKHR allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + enum class AndroidSurfaceCreateFlagBitsKHR : VkAndroidSurfaceCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkAndroidSurfaceCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidSurfaceCreateFlagsKHR.html + using AndroidSurfaceCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AndroidSurfaceCreateFlagsKHR allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + enum class Win32SurfaceCreateFlagBitsKHR : VkWin32SurfaceCreateFlagsKHR + { + }; + + // wrapper using for bitmask VkWin32SurfaceCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkWin32SurfaceCreateFlagsKHR.html + using Win32SurfaceCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR Win32SurfaceCreateFlagsKHR allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + // wrapper class for enum VkDebugReportFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugReportFlagBitsEXT.html + enum class DebugReportFlagBitsEXT : VkDebugReportFlagsEXT + { + eInformation = VK_DEBUG_REPORT_INFORMATION_BIT_EXT, + eWarning = VK_DEBUG_REPORT_WARNING_BIT_EXT, + ePerformanceWarning = VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT, + eError = VK_DEBUG_REPORT_ERROR_BIT_EXT, + eDebug = VK_DEBUG_REPORT_DEBUG_BIT_EXT + }; + + // wrapper using for bitmask VkDebugReportFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugReportFlagsEXT.html + using DebugReportFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDebugReportFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportFlagsEXT allFlags = DebugReportFlagBitsEXT::eInformation | DebugReportFlagBitsEXT::eWarning | + DebugReportFlagBitsEXT::ePerformanceWarning | DebugReportFlagBitsEXT::eError | + DebugReportFlagBitsEXT::eDebug; + }; + + // wrapper class for enum VkDebugReportObjectTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugReportObjectTypeEXT.html + enum class DebugReportObjectTypeEXT + { + eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, + eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, + ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, + eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, + eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, + eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, + eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, + eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, + eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, + eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, + eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, + eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, + eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, + eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, + eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, + ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, + ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, + eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, + ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, + eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, + eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, + eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, + eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, + eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, + eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, + eSurfaceKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, + eSwapchainKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, + eDebugReportCallbackEXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, + eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT, + eDisplayKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, + eDisplayModeKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, + eValidationCacheEXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, + eValidationCache = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT, + eSamplerYcbcrConversion = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, + eSamplerYcbcrConversionKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT, + eDescriptorUpdateTemplate = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, + eDescriptorUpdateTemplateKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT, + eCuModuleNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT, + eCuFunctionNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT, + eAccelerationStructureKHR = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT, + eAccelerationStructureNV = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eCudaModuleNV = VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT, + eCudaFunctionNV = VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ +#if defined( VK_USE_PLATFORM_FUCHSIA ) + eBufferCollectionFUCHSIA = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + }; + + //=== VK_AMD_rasterization_order === + + // wrapper class for enum VkRasterizationOrderAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRasterizationOrderAMD.html + enum class RasterizationOrderAMD + { + eStrict = VK_RASTERIZATION_ORDER_STRICT_AMD, + eRelaxed = VK_RASTERIZATION_ORDER_RELAXED_AMD + }; + + //=== VK_KHR_video_queue === + + // wrapper class for enum VkVideoCodecOperationFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCodecOperationFlagBitsKHR.html + enum class VideoCodecOperationFlagBitsKHR : VkVideoCodecOperationFlagsKHR + { + eNone = VK_VIDEO_CODEC_OPERATION_NONE_KHR, + eEncodeH264 = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, + eEncodeH265 = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, + eDecodeH264 = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, + eDecodeH265 = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, + eDecodeAv1 = VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, + eEncodeAv1 = VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, + eDecodeVp9 = VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR + }; + + // wrapper using for bitmask VkVideoCodecOperationFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCodecOperationFlagsKHR.html + using VideoCodecOperationFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoCodecOperationFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoCodecOperationFlagsKHR allFlags = + VideoCodecOperationFlagBitsKHR::eNone | VideoCodecOperationFlagBitsKHR::eEncodeH264 | VideoCodecOperationFlagBitsKHR::eEncodeH265 | + VideoCodecOperationFlagBitsKHR::eDecodeH264 | VideoCodecOperationFlagBitsKHR::eDecodeH265 | VideoCodecOperationFlagBitsKHR::eDecodeAv1 | + VideoCodecOperationFlagBitsKHR::eEncodeAv1 | VideoCodecOperationFlagBitsKHR::eDecodeVp9; + }; + + // wrapper class for enum VkVideoChromaSubsamplingFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoChromaSubsamplingFlagBitsKHR.html + enum class VideoChromaSubsamplingFlagBitsKHR : VkVideoChromaSubsamplingFlagsKHR + { + eInvalid = VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR, + eMonochrome = VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR, + e420 = VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, + e422 = VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR, + e444 = VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR + }; + + // wrapper using for bitmask VkVideoChromaSubsamplingFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoChromaSubsamplingFlagsKHR.html + using VideoChromaSubsamplingFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoChromaSubsamplingFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoChromaSubsamplingFlagsKHR allFlags = + VideoChromaSubsamplingFlagBitsKHR::eInvalid | VideoChromaSubsamplingFlagBitsKHR::eMonochrome | VideoChromaSubsamplingFlagBitsKHR::e420 | + VideoChromaSubsamplingFlagBitsKHR::e422 | VideoChromaSubsamplingFlagBitsKHR::e444; + }; + + // wrapper class for enum VkVideoComponentBitDepthFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoComponentBitDepthFlagBitsKHR.html + enum class VideoComponentBitDepthFlagBitsKHR : VkVideoComponentBitDepthFlagsKHR + { + eInvalid = VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR, + e8 = VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, + e10 = VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR, + e12 = VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR + }; + + // wrapper using for bitmask VkVideoComponentBitDepthFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoComponentBitDepthFlagsKHR.html + using VideoComponentBitDepthFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoComponentBitDepthFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoComponentBitDepthFlagsKHR allFlags = + VideoComponentBitDepthFlagBitsKHR::eInvalid | VideoComponentBitDepthFlagBitsKHR::e8 | VideoComponentBitDepthFlagBitsKHR::e10 | + VideoComponentBitDepthFlagBitsKHR::e12; + }; + + // wrapper class for enum VkVideoCapabilityFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCapabilityFlagBitsKHR.html + enum class VideoCapabilityFlagBitsKHR : VkVideoCapabilityFlagsKHR + { + eProtectedContent = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR, + eSeparateReferenceImages = VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR + }; + + // wrapper using for bitmask VkVideoCapabilityFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCapabilityFlagsKHR.html + using VideoCapabilityFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoCapabilityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoCapabilityFlagsKHR allFlags = + VideoCapabilityFlagBitsKHR::eProtectedContent | VideoCapabilityFlagBitsKHR::eSeparateReferenceImages; + }; + + // wrapper class for enum VkVideoSessionCreateFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionCreateFlagBitsKHR.html + enum class VideoSessionCreateFlagBitsKHR : VkVideoSessionCreateFlagsKHR + { + eProtectedContent = VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR, + eAllowEncodeParameterOptimizations = VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR, + eInlineQueries = VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, + eAllowEncodeQuantizationDeltaMap = VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, + eAllowEncodeEmphasisMap = VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR, + eInlineSessionParameters = VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR + }; + + // wrapper using for bitmask VkVideoSessionCreateFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionCreateFlagsKHR.html + using VideoSessionCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoSessionCreateFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoSessionCreateFlagsKHR allFlags = + VideoSessionCreateFlagBitsKHR::eProtectedContent | VideoSessionCreateFlagBitsKHR::eAllowEncodeParameterOptimizations | + VideoSessionCreateFlagBitsKHR::eInlineQueries | VideoSessionCreateFlagBitsKHR::eAllowEncodeQuantizationDeltaMap | + VideoSessionCreateFlagBitsKHR::eAllowEncodeEmphasisMap | VideoSessionCreateFlagBitsKHR::eInlineSessionParameters; + }; + + // wrapper class for enum VkVideoCodingControlFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCodingControlFlagBitsKHR.html + enum class VideoCodingControlFlagBitsKHR : VkVideoCodingControlFlagsKHR + { + eReset = VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR, + eEncodeRateControl = VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR, + eEncodeQualityLevel = VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR + }; + + // wrapper using for bitmask VkVideoCodingControlFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCodingControlFlagsKHR.html + using VideoCodingControlFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoCodingControlFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoCodingControlFlagsKHR allFlags = + VideoCodingControlFlagBitsKHR::eReset | VideoCodingControlFlagBitsKHR::eEncodeRateControl | VideoCodingControlFlagBitsKHR::eEncodeQualityLevel; + }; + + // wrapper class for enum VkQueryResultStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryResultStatusKHR.html + enum class QueryResultStatusKHR + { + eError = VK_QUERY_RESULT_STATUS_ERROR_KHR, + eNotReady = VK_QUERY_RESULT_STATUS_NOT_READY_KHR, + eComplete = VK_QUERY_RESULT_STATUS_COMPLETE_KHR, + eInsufficientBitstreamBufferRange = VK_QUERY_RESULT_STATUS_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_KHR + }; + + // wrapper class for enum VkVideoSessionParametersCreateFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionParametersCreateFlagBitsKHR.html + enum class VideoSessionParametersCreateFlagBitsKHR : VkVideoSessionParametersCreateFlagsKHR + { + eQuantizationMapCompatible = VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR + }; + + // wrapper using for bitmask VkVideoSessionParametersCreateFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionParametersCreateFlagsKHR.html + using VideoSessionParametersCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoSessionParametersCreateFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoSessionParametersCreateFlagsKHR allFlags = VideoSessionParametersCreateFlagBitsKHR::eQuantizationMapCompatible; + }; + + enum class VideoBeginCodingFlagBitsKHR : VkVideoBeginCodingFlagsKHR + { + }; + + // wrapper using for bitmask VkVideoBeginCodingFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoBeginCodingFlagsKHR.html + using VideoBeginCodingFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoBeginCodingFlagsKHR allFlags = {}; + }; + + enum class VideoEndCodingFlagBitsKHR : VkVideoEndCodingFlagsKHR + { + }; + + // wrapper using for bitmask VkVideoEndCodingFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEndCodingFlagsKHR.html + using VideoEndCodingFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEndCodingFlagsKHR allFlags = {}; + }; + + //=== VK_KHR_video_decode_queue === + + // wrapper class for enum VkVideoDecodeCapabilityFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeCapabilityFlagBitsKHR.html + enum class VideoDecodeCapabilityFlagBitsKHR : VkVideoDecodeCapabilityFlagsKHR + { + eDpbAndOutputCoincide = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR, + eDpbAndOutputDistinct = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR + }; + + // wrapper using for bitmask VkVideoDecodeCapabilityFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeCapabilityFlagsKHR.html + using VideoDecodeCapabilityFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoDecodeCapabilityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoDecodeCapabilityFlagsKHR allFlags = + VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputCoincide | VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputDistinct; + }; + + // wrapper class for enum VkVideoDecodeUsageFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeUsageFlagBitsKHR.html + enum class VideoDecodeUsageFlagBitsKHR : VkVideoDecodeUsageFlagsKHR + { + eDefault = VK_VIDEO_DECODE_USAGE_DEFAULT_KHR, + eTranscoding = VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR, + eOffline = VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR, + eStreaming = VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR + }; + + // wrapper using for bitmask VkVideoDecodeUsageFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeUsageFlagsKHR.html + using VideoDecodeUsageFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoDecodeUsageFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoDecodeUsageFlagsKHR allFlags = VideoDecodeUsageFlagBitsKHR::eDefault | VideoDecodeUsageFlagBitsKHR::eTranscoding | + VideoDecodeUsageFlagBitsKHR::eOffline | VideoDecodeUsageFlagBitsKHR::eStreaming; + }; + + enum class VideoDecodeFlagBitsKHR : VkVideoDecodeFlagsKHR + { + }; + + // wrapper using for bitmask VkVideoDecodeFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeFlagsKHR.html + using VideoDecodeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoDecodeFlagsKHR allFlags = {}; + }; + + //=== VK_EXT_transform_feedback === + + enum class PipelineRasterizationStateStreamCreateFlagBitsEXT : VkPipelineRasterizationStateStreamCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkPipelineRasterizationStateStreamCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationStateStreamCreateFlagsEXT.html + using PipelineRasterizationStateStreamCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineRasterizationStateStreamCreateFlagsEXT allFlags = {}; + }; + + //=== VK_KHR_video_encode_h264 === + + // wrapper class for enum VkVideoEncodeH264CapabilityFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264CapabilityFlagBitsKHR.html + enum class VideoEncodeH264CapabilityFlagBitsKHR : VkVideoEncodeH264CapabilityFlagsKHR + { + eHrdCompliance = VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR, + ePredictionWeightTableGenerated = VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR, + eRowUnalignedSlice = VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR, + eDifferentSliceType = VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR, + eBFrameInL0List = VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR, + eBFrameInL1List = VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR, + ePerPictureTypeMinMaxQp = VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR, + ePerSliceConstantQp = VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR, + eGeneratePrefixNalu = VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR, + eBPictureIntraRefresh = VK_VIDEO_ENCODE_H264_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR, + eMbQpDiffWraparound = VK_VIDEO_ENCODE_H264_CAPABILITY_MB_QP_DIFF_WRAPAROUND_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH264CapabilityFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264CapabilityFlagsKHR.html + using VideoEncodeH264CapabilityFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH264CapabilityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH264CapabilityFlagsKHR allFlags = + VideoEncodeH264CapabilityFlagBitsKHR::eHrdCompliance | VideoEncodeH264CapabilityFlagBitsKHR::ePredictionWeightTableGenerated | + VideoEncodeH264CapabilityFlagBitsKHR::eRowUnalignedSlice | VideoEncodeH264CapabilityFlagBitsKHR::eDifferentSliceType | + VideoEncodeH264CapabilityFlagBitsKHR::eBFrameInL0List | VideoEncodeH264CapabilityFlagBitsKHR::eBFrameInL1List | + VideoEncodeH264CapabilityFlagBitsKHR::ePerPictureTypeMinMaxQp | VideoEncodeH264CapabilityFlagBitsKHR::ePerSliceConstantQp | + VideoEncodeH264CapabilityFlagBitsKHR::eGeneratePrefixNalu | VideoEncodeH264CapabilityFlagBitsKHR::eBPictureIntraRefresh | + VideoEncodeH264CapabilityFlagBitsKHR::eMbQpDiffWraparound; + }; + + // wrapper class for enum VkVideoEncodeH264StdFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264StdFlagBitsKHR.html + enum class VideoEncodeH264StdFlagBitsKHR : VkVideoEncodeH264StdFlagsKHR + { + eSeparateColorPlaneFlagSet = VK_VIDEO_ENCODE_H264_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR, + eQpprimeYZeroTransformBypassFlagSet = VK_VIDEO_ENCODE_H264_STD_QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG_SET_BIT_KHR, + eScalingMatrixPresentFlagSet = VK_VIDEO_ENCODE_H264_STD_SCALING_MATRIX_PRESENT_FLAG_SET_BIT_KHR, + eChromaQpIndexOffset = VK_VIDEO_ENCODE_H264_STD_CHROMA_QP_INDEX_OFFSET_BIT_KHR, + eSecondChromaQpIndexOffset = VK_VIDEO_ENCODE_H264_STD_SECOND_CHROMA_QP_INDEX_OFFSET_BIT_KHR, + ePicInitQpMinus26 = VK_VIDEO_ENCODE_H264_STD_PIC_INIT_QP_MINUS26_BIT_KHR, + eWeightedPredFlagSet = VK_VIDEO_ENCODE_H264_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR, + eWeightedBipredIdcExplicit = VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_EXPLICIT_BIT_KHR, + eWeightedBipredIdcImplicit = VK_VIDEO_ENCODE_H264_STD_WEIGHTED_BIPRED_IDC_IMPLICIT_BIT_KHR, + eTransform8X8ModeFlagSet = VK_VIDEO_ENCODE_H264_STD_TRANSFORM_8X8_MODE_FLAG_SET_BIT_KHR, + eDirectSpatialMvPredFlagUnset = VK_VIDEO_ENCODE_H264_STD_DIRECT_SPATIAL_MV_PRED_FLAG_UNSET_BIT_KHR, + eEntropyCodingModeFlagUnset = VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_UNSET_BIT_KHR, + eEntropyCodingModeFlagSet = VK_VIDEO_ENCODE_H264_STD_ENTROPY_CODING_MODE_FLAG_SET_BIT_KHR, + eDirect8X8InferenceFlagUnset = VK_VIDEO_ENCODE_H264_STD_DIRECT_8X8_INFERENCE_FLAG_UNSET_BIT_KHR, + eConstrainedIntraPredFlagSet = VK_VIDEO_ENCODE_H264_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR, + eDeblockingFilterDisabled = VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_DISABLED_BIT_KHR, + eDeblockingFilterEnabled = VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_ENABLED_BIT_KHR, + eDeblockingFilterPartial = VK_VIDEO_ENCODE_H264_STD_DEBLOCKING_FILTER_PARTIAL_BIT_KHR, + eSliceQpDelta = VK_VIDEO_ENCODE_H264_STD_SLICE_QP_DELTA_BIT_KHR, + eDifferentSliceQpDelta = VK_VIDEO_ENCODE_H264_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH264StdFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264StdFlagsKHR.html + using VideoEncodeH264StdFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH264StdFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH264StdFlagsKHR allFlags = + VideoEncodeH264StdFlagBitsKHR::eSeparateColorPlaneFlagSet | VideoEncodeH264StdFlagBitsKHR::eQpprimeYZeroTransformBypassFlagSet | + VideoEncodeH264StdFlagBitsKHR::eScalingMatrixPresentFlagSet | VideoEncodeH264StdFlagBitsKHR::eChromaQpIndexOffset | + VideoEncodeH264StdFlagBitsKHR::eSecondChromaQpIndexOffset | VideoEncodeH264StdFlagBitsKHR::ePicInitQpMinus26 | + VideoEncodeH264StdFlagBitsKHR::eWeightedPredFlagSet | VideoEncodeH264StdFlagBitsKHR::eWeightedBipredIdcExplicit | + VideoEncodeH264StdFlagBitsKHR::eWeightedBipredIdcImplicit | VideoEncodeH264StdFlagBitsKHR::eTransform8X8ModeFlagSet | + VideoEncodeH264StdFlagBitsKHR::eDirectSpatialMvPredFlagUnset | VideoEncodeH264StdFlagBitsKHR::eEntropyCodingModeFlagUnset | + VideoEncodeH264StdFlagBitsKHR::eEntropyCodingModeFlagSet | VideoEncodeH264StdFlagBitsKHR::eDirect8X8InferenceFlagUnset | + VideoEncodeH264StdFlagBitsKHR::eConstrainedIntraPredFlagSet | VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterDisabled | + VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterEnabled | VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterPartial | + VideoEncodeH264StdFlagBitsKHR::eSliceQpDelta | VideoEncodeH264StdFlagBitsKHR::eDifferentSliceQpDelta; + }; + + // wrapper class for enum VkVideoEncodeH264RateControlFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264RateControlFlagBitsKHR.html + enum class VideoEncodeH264RateControlFlagBitsKHR : VkVideoEncodeH264RateControlFlagsKHR + { + eAttemptHrdCompliance = VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR, + eRegularGop = VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_KHR, + eReferencePatternFlat = VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR, + eReferencePatternDyadic = VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR, + eTemporalLayerPatternDyadic = VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH264RateControlFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264RateControlFlagsKHR.html + using VideoEncodeH264RateControlFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH264RateControlFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH264RateControlFlagsKHR allFlags = + VideoEncodeH264RateControlFlagBitsKHR::eAttemptHrdCompliance | VideoEncodeH264RateControlFlagBitsKHR::eRegularGop | + VideoEncodeH264RateControlFlagBitsKHR::eReferencePatternFlat | VideoEncodeH264RateControlFlagBitsKHR::eReferencePatternDyadic | + VideoEncodeH264RateControlFlagBitsKHR::eTemporalLayerPatternDyadic; + }; + + //=== VK_KHR_video_encode_h265 === + + // wrapper class for enum VkVideoEncodeH265CapabilityFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265CapabilityFlagBitsKHR.html + enum class VideoEncodeH265CapabilityFlagBitsKHR : VkVideoEncodeH265CapabilityFlagsKHR + { + eHrdCompliance = VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR, + ePredictionWeightTableGenerated = VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR, + eRowUnalignedSliceSegment = VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR, + eDifferentSliceSegmentType = VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR, + eBFrameInL0List = VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR, + eBFrameInL1List = VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR, + ePerPictureTypeMinMaxQp = VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR, + ePerSliceSegmentConstantQp = VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR, + eMultipleTilesPerSliceSegment = VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR, + eMultipleSliceSegmentsPerTile = VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR, + eBPictureIntraRefresh = VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR, + eCuQpDiffWraparound = VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH265CapabilityFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265CapabilityFlagsKHR.html + using VideoEncodeH265CapabilityFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH265CapabilityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH265CapabilityFlagsKHR allFlags = + VideoEncodeH265CapabilityFlagBitsKHR::eHrdCompliance | VideoEncodeH265CapabilityFlagBitsKHR::ePredictionWeightTableGenerated | + VideoEncodeH265CapabilityFlagBitsKHR::eRowUnalignedSliceSegment | VideoEncodeH265CapabilityFlagBitsKHR::eDifferentSliceSegmentType | + VideoEncodeH265CapabilityFlagBitsKHR::eBFrameInL0List | VideoEncodeH265CapabilityFlagBitsKHR::eBFrameInL1List | + VideoEncodeH265CapabilityFlagBitsKHR::ePerPictureTypeMinMaxQp | VideoEncodeH265CapabilityFlagBitsKHR::ePerSliceSegmentConstantQp | + VideoEncodeH265CapabilityFlagBitsKHR::eMultipleTilesPerSliceSegment | VideoEncodeH265CapabilityFlagBitsKHR::eMultipleSliceSegmentsPerTile | + VideoEncodeH265CapabilityFlagBitsKHR::eBPictureIntraRefresh | VideoEncodeH265CapabilityFlagBitsKHR::eCuQpDiffWraparound; + }; + + // wrapper class for enum VkVideoEncodeH265StdFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265StdFlagBitsKHR.html + enum class VideoEncodeH265StdFlagBitsKHR : VkVideoEncodeH265StdFlagsKHR + { + eSeparateColorPlaneFlagSet = VK_VIDEO_ENCODE_H265_STD_SEPARATE_COLOR_PLANE_FLAG_SET_BIT_KHR, + eSampleAdaptiveOffsetEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_SAMPLE_ADAPTIVE_OFFSET_ENABLED_FLAG_SET_BIT_KHR, + eScalingListDataPresentFlagSet = VK_VIDEO_ENCODE_H265_STD_SCALING_LIST_DATA_PRESENT_FLAG_SET_BIT_KHR, + ePcmEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_PCM_ENABLED_FLAG_SET_BIT_KHR, + eSpsTemporalMvpEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_SPS_TEMPORAL_MVP_ENABLED_FLAG_SET_BIT_KHR, + eInitQpMinus26 = VK_VIDEO_ENCODE_H265_STD_INIT_QP_MINUS26_BIT_KHR, + eWeightedPredFlagSet = VK_VIDEO_ENCODE_H265_STD_WEIGHTED_PRED_FLAG_SET_BIT_KHR, + eWeightedBipredFlagSet = VK_VIDEO_ENCODE_H265_STD_WEIGHTED_BIPRED_FLAG_SET_BIT_KHR, + eLog2ParallelMergeLevelMinus2 = VK_VIDEO_ENCODE_H265_STD_LOG2_PARALLEL_MERGE_LEVEL_MINUS2_BIT_KHR, + eSignDataHidingEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_SIGN_DATA_HIDING_ENABLED_FLAG_SET_BIT_KHR, + eTransformSkipEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_SET_BIT_KHR, + eTransformSkipEnabledFlagUnset = VK_VIDEO_ENCODE_H265_STD_TRANSFORM_SKIP_ENABLED_FLAG_UNSET_BIT_KHR, + ePpsSliceChromaQpOffsetsPresentFlagSet = VK_VIDEO_ENCODE_H265_STD_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT_FLAG_SET_BIT_KHR, + eTransquantBypassEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_TRANSQUANT_BYPASS_ENABLED_FLAG_SET_BIT_KHR, + eConstrainedIntraPredFlagSet = VK_VIDEO_ENCODE_H265_STD_CONSTRAINED_INTRA_PRED_FLAG_SET_BIT_KHR, + eEntropyCodingSyncEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_ENTROPY_CODING_SYNC_ENABLED_FLAG_SET_BIT_KHR, + eDeblockingFilterOverrideEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_DEBLOCKING_FILTER_OVERRIDE_ENABLED_FLAG_SET_BIT_KHR, + eDependentSliceSegmentsEnabledFlagSet = VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENTS_ENABLED_FLAG_SET_BIT_KHR, + eDependentSliceSegmentFlagSet = VK_VIDEO_ENCODE_H265_STD_DEPENDENT_SLICE_SEGMENT_FLAG_SET_BIT_KHR, + eSliceQpDelta = VK_VIDEO_ENCODE_H265_STD_SLICE_QP_DELTA_BIT_KHR, + eDifferentSliceQpDelta = VK_VIDEO_ENCODE_H265_STD_DIFFERENT_SLICE_QP_DELTA_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH265StdFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265StdFlagsKHR.html + using VideoEncodeH265StdFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH265StdFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH265StdFlagsKHR allFlags = + VideoEncodeH265StdFlagBitsKHR::eSeparateColorPlaneFlagSet | VideoEncodeH265StdFlagBitsKHR::eSampleAdaptiveOffsetEnabledFlagSet | + VideoEncodeH265StdFlagBitsKHR::eScalingListDataPresentFlagSet | VideoEncodeH265StdFlagBitsKHR::ePcmEnabledFlagSet | + VideoEncodeH265StdFlagBitsKHR::eSpsTemporalMvpEnabledFlagSet | VideoEncodeH265StdFlagBitsKHR::eInitQpMinus26 | + VideoEncodeH265StdFlagBitsKHR::eWeightedPredFlagSet | VideoEncodeH265StdFlagBitsKHR::eWeightedBipredFlagSet | + VideoEncodeH265StdFlagBitsKHR::eLog2ParallelMergeLevelMinus2 | VideoEncodeH265StdFlagBitsKHR::eSignDataHidingEnabledFlagSet | + VideoEncodeH265StdFlagBitsKHR::eTransformSkipEnabledFlagSet | VideoEncodeH265StdFlagBitsKHR::eTransformSkipEnabledFlagUnset | + VideoEncodeH265StdFlagBitsKHR::ePpsSliceChromaQpOffsetsPresentFlagSet | VideoEncodeH265StdFlagBitsKHR::eTransquantBypassEnabledFlagSet | + VideoEncodeH265StdFlagBitsKHR::eConstrainedIntraPredFlagSet | VideoEncodeH265StdFlagBitsKHR::eEntropyCodingSyncEnabledFlagSet | + VideoEncodeH265StdFlagBitsKHR::eDeblockingFilterOverrideEnabledFlagSet | VideoEncodeH265StdFlagBitsKHR::eDependentSliceSegmentsEnabledFlagSet | + VideoEncodeH265StdFlagBitsKHR::eDependentSliceSegmentFlagSet | VideoEncodeH265StdFlagBitsKHR::eSliceQpDelta | + VideoEncodeH265StdFlagBitsKHR::eDifferentSliceQpDelta; + }; + + // wrapper class for enum VkVideoEncodeH265CtbSizeFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265CtbSizeFlagBitsKHR.html + enum class VideoEncodeH265CtbSizeFlagBitsKHR : VkVideoEncodeH265CtbSizeFlagsKHR + { + e16 = VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_KHR, + e32 = VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_KHR, + e64 = VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH265CtbSizeFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265CtbSizeFlagsKHR.html + using VideoEncodeH265CtbSizeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH265CtbSizeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH265CtbSizeFlagsKHR allFlags = + VideoEncodeH265CtbSizeFlagBitsKHR::e16 | VideoEncodeH265CtbSizeFlagBitsKHR::e32 | VideoEncodeH265CtbSizeFlagBitsKHR::e64; + }; + + // wrapper class for enum VkVideoEncodeH265TransformBlockSizeFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265TransformBlockSizeFlagBitsKHR.html + enum class VideoEncodeH265TransformBlockSizeFlagBitsKHR : VkVideoEncodeH265TransformBlockSizeFlagsKHR + { + e4 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_KHR, + e8 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_KHR, + e16 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_KHR, + e32 = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH265TransformBlockSizeFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265TransformBlockSizeFlagsKHR.html + using VideoEncodeH265TransformBlockSizeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH265TransformBlockSizeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH265TransformBlockSizeFlagsKHR allFlags = + VideoEncodeH265TransformBlockSizeFlagBitsKHR::e4 | VideoEncodeH265TransformBlockSizeFlagBitsKHR::e8 | VideoEncodeH265TransformBlockSizeFlagBitsKHR::e16 | + VideoEncodeH265TransformBlockSizeFlagBitsKHR::e32; + }; + + // wrapper class for enum VkVideoEncodeH265RateControlFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265RateControlFlagBitsKHR.html + enum class VideoEncodeH265RateControlFlagBitsKHR : VkVideoEncodeH265RateControlFlagsKHR + { + eAttemptHrdCompliance = VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR, + eRegularGop = VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR, + eReferencePatternFlat = VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR, + eReferencePatternDyadic = VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR, + eTemporalSubLayerPatternDyadic = VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeH265RateControlFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265RateControlFlagsKHR.html + using VideoEncodeH265RateControlFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeH265RateControlFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeH265RateControlFlagsKHR allFlags = + VideoEncodeH265RateControlFlagBitsKHR::eAttemptHrdCompliance | VideoEncodeH265RateControlFlagBitsKHR::eRegularGop | + VideoEncodeH265RateControlFlagBitsKHR::eReferencePatternFlat | VideoEncodeH265RateControlFlagBitsKHR::eReferencePatternDyadic | + VideoEncodeH265RateControlFlagBitsKHR::eTemporalSubLayerPatternDyadic; + }; + + //=== VK_KHR_video_decode_h264 === + + // wrapper class for enum VkVideoDecodeH264PictureLayoutFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264PictureLayoutFlagBitsKHR.html + enum class VideoDecodeH264PictureLayoutFlagBitsKHR : VkVideoDecodeH264PictureLayoutFlagsKHR + { + eProgressive = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR, + eInterlacedInterleavedLines = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR, + eInterlacedSeparatePlanes = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR + }; + + // wrapper using for bitmask VkVideoDecodeH264PictureLayoutFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264PictureLayoutFlagsKHR.html + using VideoDecodeH264PictureLayoutFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoDecodeH264PictureLayoutFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoDecodeH264PictureLayoutFlagsKHR allFlags = VideoDecodeH264PictureLayoutFlagBitsKHR::eProgressive | + VideoDecodeH264PictureLayoutFlagBitsKHR::eInterlacedInterleavedLines | + VideoDecodeH264PictureLayoutFlagBitsKHR::eInterlacedSeparatePlanes; + }; + + //=== VK_AMD_shader_info === + + // wrapper class for enum VkShaderInfoTypeAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderInfoTypeAMD.html + enum class ShaderInfoTypeAMD + { + eStatistics = VK_SHADER_INFO_TYPE_STATISTICS_AMD, + eBinary = VK_SHADER_INFO_TYPE_BINARY_AMD, + eDisassembly = VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD + }; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + enum class StreamDescriptorSurfaceCreateFlagBitsGGP : VkStreamDescriptorSurfaceCreateFlagsGGP + { + }; + + // wrapper using for bitmask VkStreamDescriptorSurfaceCreateFlagsGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkStreamDescriptorSurfaceCreateFlagsGGP.html + using StreamDescriptorSurfaceCreateFlagsGGP = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StreamDescriptorSurfaceCreateFlagsGGP allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + + // wrapper class for enum VkExternalMemoryHandleTypeFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryHandleTypeFlagBitsNV.html + enum class ExternalMemoryHandleTypeFlagBitsNV : VkExternalMemoryHandleTypeFlagsNV + { + eOpaqueWin32 = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV, + eOpaqueWin32Kmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV, + eD3D11Image = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV, + eD3D11ImageKmt = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV + }; + + // wrapper using for bitmask VkExternalMemoryHandleTypeFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryHandleTypeFlagsNV.html + using ExternalMemoryHandleTypeFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalMemoryHandleTypeFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalMemoryHandleTypeFlagsNV allFlags = + ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32 | ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt | ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image | + ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt; + }; + + // wrapper class for enum VkExternalMemoryFeatureFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryFeatureFlagBitsNV.html + enum class ExternalMemoryFeatureFlagBitsNV : VkExternalMemoryFeatureFlagsNV + { + eDedicatedOnly = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV, + eExportable = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV, + eImportable = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV + }; + + // wrapper using for bitmask VkExternalMemoryFeatureFlagsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryFeatureFlagsNV.html + using ExternalMemoryFeatureFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkExternalMemoryFeatureFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExternalMemoryFeatureFlagsNV allFlags = + ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly | ExternalMemoryFeatureFlagBitsNV::eExportable | ExternalMemoryFeatureFlagBitsNV::eImportable; + }; + + //=== VK_EXT_validation_flags === + + // wrapper class for enum VkValidationCheckEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationCheckEXT.html + enum class ValidationCheckEXT + { + eAll = VK_VALIDATION_CHECK_ALL_EXT, + eShaders = VK_VALIDATION_CHECK_SHADERS_EXT + }; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + enum class ViSurfaceCreateFlagBitsNN : VkViSurfaceCreateFlagsNN + { + }; + + // wrapper using for bitmask VkViSurfaceCreateFlagsNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkViSurfaceCreateFlagsNN.html + using ViSurfaceCreateFlagsNN = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ViSurfaceCreateFlagsNN allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_conditional_rendering === + + // wrapper class for enum VkConditionalRenderingFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkConditionalRenderingFlagBitsEXT.html + enum class ConditionalRenderingFlagBitsEXT : VkConditionalRenderingFlagsEXT + { + eInverted = VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT + }; + + // wrapper using for bitmask VkConditionalRenderingFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkConditionalRenderingFlagsEXT.html + using ConditionalRenderingFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkConditionalRenderingFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ConditionalRenderingFlagsEXT allFlags = ConditionalRenderingFlagBitsEXT::eInverted; + }; + + //=== VK_EXT_display_surface_counter === + + // wrapper class for enum VkSurfaceCounterFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCounterFlagBitsEXT.html + enum class SurfaceCounterFlagBitsEXT : VkSurfaceCounterFlagsEXT + { + eVblank = VK_SURFACE_COUNTER_VBLANK_BIT_EXT + }; + + // wrapper using for bitmask VkSurfaceCounterFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCounterFlagsEXT.html + using SurfaceCounterFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkSurfaceCounterFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SurfaceCounterFlagsEXT allFlags = SurfaceCounterFlagBitsEXT::eVblank; + }; + + //=== VK_EXT_display_control === + + // wrapper class for enum VkDisplayPowerStateEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPowerStateEXT.html + enum class DisplayPowerStateEXT + { + eOff = VK_DISPLAY_POWER_STATE_OFF_EXT, + eSuspend = VK_DISPLAY_POWER_STATE_SUSPEND_EXT, + eOn = VK_DISPLAY_POWER_STATE_ON_EXT + }; + + // wrapper class for enum VkDeviceEventTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceEventTypeEXT.html + enum class DeviceEventTypeEXT + { + eDisplayHotplug = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT + }; + + // wrapper class for enum VkDisplayEventTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayEventTypeEXT.html + enum class DisplayEventTypeEXT + { + eFirstPixelOut = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT + }; + + //=== VK_NV_viewport_swizzle === + + // wrapper class for enum VkViewportCoordinateSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkViewportCoordinateSwizzleNV.html + enum class ViewportCoordinateSwizzleNV + { + ePositiveX = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV, + eNegativeX = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV, + ePositiveY = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV, + eNegativeY = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV, + ePositiveZ = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV, + eNegativeZ = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV, + ePositiveW = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV, + eNegativeW = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV + }; + + enum class PipelineViewportSwizzleStateCreateFlagBitsNV : VkPipelineViewportSwizzleStateCreateFlagsNV + { + }; + + // wrapper using for bitmask VkPipelineViewportSwizzleStateCreateFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportSwizzleStateCreateFlagsNV.html + using PipelineViewportSwizzleStateCreateFlagsNV = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineViewportSwizzleStateCreateFlagsNV allFlags = {}; + }; + + //=== VK_EXT_discard_rectangles === + + // wrapper class for enum VkDiscardRectangleModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDiscardRectangleModeEXT.html + enum class DiscardRectangleModeEXT + { + eInclusive = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT, + eExclusive = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT + }; + + enum class PipelineDiscardRectangleStateCreateFlagBitsEXT : VkPipelineDiscardRectangleStateCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkPipelineDiscardRectangleStateCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDiscardRectangleStateCreateFlagsEXT.html + using PipelineDiscardRectangleStateCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineDiscardRectangleStateCreateFlagsEXT allFlags = {}; + }; + + //=== VK_EXT_conservative_rasterization === + + // wrapper class for enum VkConservativeRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkConservativeRasterizationModeEXT.html + enum class ConservativeRasterizationModeEXT + { + eDisabled = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, + eOverestimate = VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, + eUnderestimate = VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT + }; + + enum class PipelineRasterizationConservativeStateCreateFlagBitsEXT : VkPipelineRasterizationConservativeStateCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkPipelineRasterizationConservativeStateCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationConservativeStateCreateFlagsEXT.html + using PipelineRasterizationConservativeStateCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineRasterizationConservativeStateCreateFlagsEXT allFlags = {}; + }; + + //=== VK_EXT_depth_clip_enable === + + enum class PipelineRasterizationDepthClipStateCreateFlagBitsEXT : VkPipelineRasterizationDepthClipStateCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkPipelineRasterizationDepthClipStateCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationDepthClipStateCreateFlagsEXT.html + using PipelineRasterizationDepthClipStateCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineRasterizationDepthClipStateCreateFlagsEXT allFlags = {}; + }; + + //=== VK_KHR_performance_query === + + // wrapper class for enum VkPerformanceCounterDescriptionFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterDescriptionFlagBitsKHR.html + enum class PerformanceCounterDescriptionFlagBitsKHR : VkPerformanceCounterDescriptionFlagsKHR + { + ePerformanceImpacting = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, + eConcurrentlyImpacted = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR + }; + + // wrapper using for bitmask VkPerformanceCounterDescriptionFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterDescriptionFlagsKHR.html + using PerformanceCounterDescriptionFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPerformanceCounterDescriptionFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PerformanceCounterDescriptionFlagsKHR allFlags = + PerformanceCounterDescriptionFlagBitsKHR::ePerformanceImpacting | PerformanceCounterDescriptionFlagBitsKHR::eConcurrentlyImpacted; + }; + + // wrapper class for enum VkPerformanceCounterScopeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterScopeKHR.html + enum class PerformanceCounterScopeKHR + { + eCommandBuffer = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, + eVkQueryScopeCommandBuffer = VK_QUERY_SCOPE_COMMAND_BUFFER_KHR, + eRenderPass = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, + eVkQueryScopeRenderPass = VK_QUERY_SCOPE_RENDER_PASS_KHR, + eCommand = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, + eVkQueryScopeCommand = VK_QUERY_SCOPE_COMMAND_KHR + }; + + // wrapper class for enum VkPerformanceCounterStorageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterStorageKHR.html + enum class PerformanceCounterStorageKHR + { + eInt32 = VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR, + eInt64 = VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR, + eUint32 = VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR, + eUint64 = VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR, + eFloat32 = VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR, + eFloat64 = VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR + }; + + // wrapper class for enum VkPerformanceCounterUnitKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterUnitKHR.html + enum class PerformanceCounterUnitKHR + { + eGeneric = VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR, + ePercentage = VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR, + eNanoseconds = VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR, + eBytes = VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR, + eBytesPerSecond = VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR, + eKelvin = VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR, + eWatts = VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR, + eVolts = VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR, + eAmps = VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR, + eHertz = VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR, + eCycles = VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR + }; + + enum class AcquireProfilingLockFlagBitsKHR : VkAcquireProfilingLockFlagsKHR + { + }; + + // wrapper using for bitmask VkAcquireProfilingLockFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAcquireProfilingLockFlagsKHR.html + using AcquireProfilingLockFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AcquireProfilingLockFlagsKHR allFlags = {}; + }; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + enum class IOSSurfaceCreateFlagBitsMVK : VkIOSSurfaceCreateFlagsMVK + { + }; + + // wrapper using for bitmask VkIOSSurfaceCreateFlagsMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIOSSurfaceCreateFlagsMVK.html + using IOSSurfaceCreateFlagsMVK = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR IOSSurfaceCreateFlagsMVK allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + enum class MacOSSurfaceCreateFlagBitsMVK : VkMacOSSurfaceCreateFlagsMVK + { + }; + + // wrapper using for bitmask VkMacOSSurfaceCreateFlagsMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMacOSSurfaceCreateFlagsMVK.html + using MacOSSurfaceCreateFlagsMVK = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MacOSSurfaceCreateFlagsMVK allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + // wrapper class for enum VkDebugUtilsMessageSeverityFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessageSeverityFlagBitsEXT.html + enum class DebugUtilsMessageSeverityFlagBitsEXT : VkDebugUtilsMessageSeverityFlagsEXT + { + eVerbose = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, + eInfo = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, + eWarning = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, + eError = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT + }; + + // wrapper using for bitmask VkDebugUtilsMessageSeverityFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessageSeverityFlagsEXT.html + using DebugUtilsMessageSeverityFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDebugUtilsMessageSeverityFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT allFlags = + DebugUtilsMessageSeverityFlagBitsEXT::eVerbose | DebugUtilsMessageSeverityFlagBitsEXT::eInfo | DebugUtilsMessageSeverityFlagBitsEXT::eWarning | + DebugUtilsMessageSeverityFlagBitsEXT::eError; + }; + + // wrapper class for enum VkDebugUtilsMessageTypeFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessageTypeFlagBitsEXT.html + enum class DebugUtilsMessageTypeFlagBitsEXT : VkDebugUtilsMessageTypeFlagsEXT + { + eGeneral = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + eValidation = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + ePerformance = VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, + eDeviceAddressBinding = VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT + }; + + // wrapper using for bitmask VkDebugUtilsMessageTypeFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessageTypeFlagsEXT.html + using DebugUtilsMessageTypeFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDebugUtilsMessageTypeFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugUtilsMessageTypeFlagsEXT allFlags = + DebugUtilsMessageTypeFlagBitsEXT::eGeneral | DebugUtilsMessageTypeFlagBitsEXT::eValidation | DebugUtilsMessageTypeFlagBitsEXT::ePerformance | + DebugUtilsMessageTypeFlagBitsEXT::eDeviceAddressBinding; + }; + + enum class DebugUtilsMessengerCallbackDataFlagBitsEXT : VkDebugUtilsMessengerCallbackDataFlagsEXT + { + }; + + // wrapper using for bitmask VkDebugUtilsMessengerCallbackDataFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessengerCallbackDataFlagsEXT.html + using DebugUtilsMessengerCallbackDataFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugUtilsMessengerCallbackDataFlagsEXT allFlags = {}; + }; + + enum class DebugUtilsMessengerCreateFlagBitsEXT : VkDebugUtilsMessengerCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkDebugUtilsMessengerCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessengerCreateFlagsEXT.html + using DebugUtilsMessengerCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugUtilsMessengerCreateFlagsEXT allFlags = {}; + }; + + //=== VK_EXT_blend_operation_advanced === + + // wrapper class for enum VkBlendOverlapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBlendOverlapEXT.html + enum class BlendOverlapEXT + { + eUncorrelated = VK_BLEND_OVERLAP_UNCORRELATED_EXT, + eDisjoint = VK_BLEND_OVERLAP_DISJOINT_EXT, + eConjoint = VK_BLEND_OVERLAP_CONJOINT_EXT + }; + + //=== VK_NV_fragment_coverage_to_color === + + enum class PipelineCoverageToColorStateCreateFlagBitsNV : VkPipelineCoverageToColorStateCreateFlagsNV + { + }; + + // wrapper using for bitmask VkPipelineCoverageToColorStateCreateFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCoverageToColorStateCreateFlagsNV.html + using PipelineCoverageToColorStateCreateFlagsNV = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCoverageToColorStateCreateFlagsNV allFlags = {}; + }; + + //=== VK_KHR_acceleration_structure === + + // wrapper class for enum VkAccelerationStructureTypeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureTypeKHR.html + enum class AccelerationStructureTypeKHR + { + eTopLevel = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, + eBottomLevel = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, + eGeneric = VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR + }; + + using AccelerationStructureTypeNV = AccelerationStructureTypeKHR; + + // wrapper class for enum VkAccelerationStructureBuildTypeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureBuildTypeKHR.html + enum class AccelerationStructureBuildTypeKHR + { + eHost = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR, + eDevice = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, + eHostOrDevice = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR + }; + + // wrapper class for enum VkGeometryFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryFlagBitsKHR.html + enum class GeometryFlagBitsKHR : VkGeometryFlagsKHR + { + eOpaque = VK_GEOMETRY_OPAQUE_BIT_KHR, + eNoDuplicateAnyHitInvocation = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR + }; + + using GeometryFlagBitsNV = GeometryFlagBitsKHR; + + // wrapper using for bitmask VkGeometryFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryFlagsKHR.html + using GeometryFlagsKHR = Flags; + using GeometryFlagsNV = GeometryFlagsKHR; + + template <> + struct FlagTraits + { + using WrappedType = VkGeometryFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR GeometryFlagsKHR allFlags = GeometryFlagBitsKHR::eOpaque | GeometryFlagBitsKHR::eNoDuplicateAnyHitInvocation; + }; + + // wrapper class for enum VkGeometryInstanceFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryInstanceFlagBitsKHR.html + enum class GeometryInstanceFlagBitsKHR : VkGeometryInstanceFlagsKHR + { + eTriangleFacingCullDisable = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, + eTriangleCullDisable = VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV, + eTriangleFlipFacing = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, + eTriangleFrontCounterclockwise = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, + eForceOpaque = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, + eForceNoOpaque = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, + eForceOpacityMicromap2StateEXT = VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT, + eDisableOpacityMicromapsEXT = VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT + }; + + using GeometryInstanceFlagBitsNV = GeometryInstanceFlagBitsKHR; + + // wrapper using for bitmask VkGeometryInstanceFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryInstanceFlagsKHR.html + using GeometryInstanceFlagsKHR = Flags; + using GeometryInstanceFlagsNV = GeometryInstanceFlagsKHR; + + template <> + struct FlagTraits + { + using WrappedType = VkGeometryInstanceFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR GeometryInstanceFlagsKHR allFlags = + GeometryInstanceFlagBitsKHR::eTriangleFacingCullDisable | GeometryInstanceFlagBitsKHR::eTriangleFlipFacing | GeometryInstanceFlagBitsKHR::eForceOpaque | + GeometryInstanceFlagBitsKHR::eForceNoOpaque | GeometryInstanceFlagBitsKHR::eForceOpacityMicromap2StateEXT | + GeometryInstanceFlagBitsKHR::eDisableOpacityMicromapsEXT; + }; + + // wrapper class for enum VkBuildAccelerationStructureFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildAccelerationStructureFlagBitsKHR.html + enum class BuildAccelerationStructureFlagBitsKHR : VkBuildAccelerationStructureFlagsKHR + { + eAllowUpdate = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, + eAllowCompaction = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, + ePreferFastTrace = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, + ePreferFastBuild = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, + eLowMemory = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, + eMotionNV = VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV, + eAllowOpacityMicromapUpdateEXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT, + eAllowDisableOpacityMicromapsEXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + eAllowOpacityMicromapDataUpdateEXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eAllowDisplacementMicromapUpdateNV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV, + eAllowDisplacementMicromapUpdate = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + eAllowDataAccess = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR + }; + + using BuildAccelerationStructureFlagBitsNV = BuildAccelerationStructureFlagBitsKHR; + + // wrapper using for bitmask VkBuildAccelerationStructureFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildAccelerationStructureFlagsKHR.html + using BuildAccelerationStructureFlagsKHR = Flags; + using BuildAccelerationStructureFlagsNV = BuildAccelerationStructureFlagsKHR; + + template <> + struct FlagTraits + { + using WrappedType = VkBuildAccelerationStructureFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR BuildAccelerationStructureFlagsKHR allFlags = + BuildAccelerationStructureFlagBitsKHR::eAllowUpdate | BuildAccelerationStructureFlagBitsKHR::eAllowCompaction | + BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace | BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild | + BuildAccelerationStructureFlagBitsKHR::eLowMemory | BuildAccelerationStructureFlagBitsKHR::eMotionNV | + BuildAccelerationStructureFlagBitsKHR::eAllowOpacityMicromapUpdateEXT | BuildAccelerationStructureFlagBitsKHR::eAllowDisableOpacityMicromapsEXT | + BuildAccelerationStructureFlagBitsKHR::eAllowOpacityMicromapDataUpdateEXT +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + | BuildAccelerationStructureFlagBitsKHR::eAllowDisplacementMicromapUpdateNV +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + | BuildAccelerationStructureFlagBitsKHR::eAllowDataAccess; + }; + + // wrapper class for enum VkCopyAccelerationStructureModeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyAccelerationStructureModeKHR.html + enum class CopyAccelerationStructureModeKHR + { + eClone = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, + eCompact = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, + eSerialize = VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR, + eDeserialize = VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR + }; + + using CopyAccelerationStructureModeNV = CopyAccelerationStructureModeKHR; + + // wrapper class for enum VkGeometryTypeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryTypeKHR.html + enum class GeometryTypeKHR + { + eTriangles = VK_GEOMETRY_TYPE_TRIANGLES_KHR, + eAabbs = VK_GEOMETRY_TYPE_AABBS_KHR, + eInstances = VK_GEOMETRY_TYPE_INSTANCES_KHR, + eSpheresNV = VK_GEOMETRY_TYPE_SPHERES_NV, + eLinearSweptSpheresNV = VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV + }; + + using GeometryTypeNV = GeometryTypeKHR; + + // wrapper class for enum VkAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureCompatibilityKHR.html + enum class AccelerationStructureCompatibilityKHR + { + eCompatible = VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR, + eIncompatible = VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR + }; + + // wrapper class for enum VkAccelerationStructureCreateFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureCreateFlagBitsKHR.html + enum class AccelerationStructureCreateFlagBitsKHR : VkAccelerationStructureCreateFlagsKHR + { + eDeviceAddressCaptureReplay = VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, + eDescriptorBufferCaptureReplayEXT = VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, + eMotionNV = VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV + }; + + // wrapper using for bitmask VkAccelerationStructureCreateFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureCreateFlagsKHR.html + using AccelerationStructureCreateFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkAccelerationStructureCreateFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AccelerationStructureCreateFlagsKHR allFlags = + AccelerationStructureCreateFlagBitsKHR::eDeviceAddressCaptureReplay | AccelerationStructureCreateFlagBitsKHR::eDescriptorBufferCaptureReplayEXT | + AccelerationStructureCreateFlagBitsKHR::eMotionNV; + }; + + // wrapper class for enum VkBuildAccelerationStructureModeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildAccelerationStructureModeKHR.html + enum class BuildAccelerationStructureModeKHR + { + eBuild = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, + eUpdate = VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR + }; + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper class for enum VkRayTracingShaderGroupTypeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingShaderGroupTypeKHR.html + enum class RayTracingShaderGroupTypeKHR + { + eGeneral = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, + eTrianglesHitGroup = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, + eProceduralHitGroup = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR + }; + + using RayTracingShaderGroupTypeNV = RayTracingShaderGroupTypeKHR; + + // wrapper class for enum VkShaderGroupShaderKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderGroupShaderKHR.html + enum class ShaderGroupShaderKHR + { + eGeneral = VK_SHADER_GROUP_SHADER_GENERAL_KHR, + eClosestHit = VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR, + eAnyHit = VK_SHADER_GROUP_SHADER_ANY_HIT_KHR, + eIntersection = VK_SHADER_GROUP_SHADER_INTERSECTION_KHR + }; + + //=== VK_NV_framebuffer_mixed_samples === + + // wrapper class for enum VkCoverageModulationModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCoverageModulationModeNV.html + enum class CoverageModulationModeNV + { + eNone = VK_COVERAGE_MODULATION_MODE_NONE_NV, + eRgb = VK_COVERAGE_MODULATION_MODE_RGB_NV, + eAlpha = VK_COVERAGE_MODULATION_MODE_ALPHA_NV, + eRgba = VK_COVERAGE_MODULATION_MODE_RGBA_NV + }; + + enum class PipelineCoverageModulationStateCreateFlagBitsNV : VkPipelineCoverageModulationStateCreateFlagsNV + { + }; + + // wrapper using for bitmask VkPipelineCoverageModulationStateCreateFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCoverageModulationStateCreateFlagsNV.html + using PipelineCoverageModulationStateCreateFlagsNV = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCoverageModulationStateCreateFlagsNV allFlags = {}; + }; + + //=== VK_EXT_validation_cache === + + // wrapper class for enum VkValidationCacheHeaderVersionEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationCacheHeaderVersionEXT.html + enum class ValidationCacheHeaderVersionEXT + { + eOne = VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT + }; + + enum class ValidationCacheCreateFlagBitsEXT : VkValidationCacheCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkValidationCacheCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationCacheCreateFlagsEXT.html + using ValidationCacheCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ValidationCacheCreateFlagsEXT allFlags = {}; + }; + + //=== VK_NV_shading_rate_image === + + // wrapper class for enum VkShadingRatePaletteEntryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShadingRatePaletteEntryNV.html + enum class ShadingRatePaletteEntryNV + { + eNoInvocations = VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV, + e16InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV, + e8InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV, + e4InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV, + e2InvocationsPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV, + e1InvocationPerPixel = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV, + e1InvocationPer2X1Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV, + e1InvocationPer1X2Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV, + e1InvocationPer2X2Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV, + e1InvocationPer4X2Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV, + e1InvocationPer2X4Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV, + e1InvocationPer4X4Pixels = VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV + }; + + // wrapper class for enum VkCoarseSampleOrderTypeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCoarseSampleOrderTypeNV.html + enum class CoarseSampleOrderTypeNV + { + eDefault = VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV, + eCustom = VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, + ePixelMajor = VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV, + eSampleMajor = VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV + }; + + //=== VK_NV_ray_tracing === + + // wrapper class for enum VkAccelerationStructureMemoryRequirementsTypeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMemoryRequirementsTypeNV.html + enum class AccelerationStructureMemoryRequirementsTypeNV + { + eObject = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV, + eBuildScratch = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV, + eUpdateScratch = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV + }; + + //=== VK_AMD_pipeline_compiler_control === + + enum class PipelineCompilerControlFlagBitsAMD : VkPipelineCompilerControlFlagsAMD + { + }; + + // wrapper using for bitmask VkPipelineCompilerControlFlagsAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCompilerControlFlagsAMD.html + using PipelineCompilerControlFlagsAMD = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCompilerControlFlagsAMD allFlags = {}; + }; + + //=== VK_AMD_memory_overallocation_behavior === + + // wrapper class for enum VkMemoryOverallocationBehaviorAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryOverallocationBehaviorAMD.html + enum class MemoryOverallocationBehaviorAMD + { + eDefault = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD, + eAllowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD, + eDisallowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD + }; + + //=== VK_INTEL_performance_query === + + // wrapper class for enum VkPerformanceConfigurationTypeINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceConfigurationTypeINTEL.html + enum class PerformanceConfigurationTypeINTEL + { + eCommandQueueMetricsDiscoveryActivated = VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL + }; + + // wrapper class for enum VkQueryPoolSamplingModeINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolSamplingModeINTEL.html + enum class QueryPoolSamplingModeINTEL + { + eManual = VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL + }; + + // wrapper class for enum VkPerformanceOverrideTypeINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceOverrideTypeINTEL.html + enum class PerformanceOverrideTypeINTEL + { + eNullHardware = VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL, + eFlushGpuCaches = VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL + }; + + // wrapper class for enum VkPerformanceParameterTypeINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceParameterTypeINTEL.html + enum class PerformanceParameterTypeINTEL + { + eHwCountersSupported = VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL, + eStreamMarkerValidBits = VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL + }; + + // wrapper class for enum VkPerformanceValueTypeINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceValueTypeINTEL.html + enum class PerformanceValueTypeINTEL + { + eUint32 = VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL, + eUint64 = VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL, + eFloat = VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL, + eBool = VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL, + eString = VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL + }; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + enum class ImagePipeSurfaceCreateFlagBitsFUCHSIA : VkImagePipeSurfaceCreateFlagsFUCHSIA + { + }; + + // wrapper using for bitmask VkImagePipeSurfaceCreateFlagsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImagePipeSurfaceCreateFlagsFUCHSIA.html + using ImagePipeSurfaceCreateFlagsFUCHSIA = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImagePipeSurfaceCreateFlagsFUCHSIA allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + enum class MetalSurfaceCreateFlagBitsEXT : VkMetalSurfaceCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkMetalSurfaceCreateFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMetalSurfaceCreateFlagsEXT.html + using MetalSurfaceCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MetalSurfaceCreateFlagsEXT allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + + // wrapper class for enum VkFragmentShadingRateCombinerOpKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkFragmentShadingRateCombinerOpKHR.html + enum class FragmentShadingRateCombinerOpKHR + { + eKeep = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR, + eReplace = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR, + eMin = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR, + eMax = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR, + eMul = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR + }; + + //=== VK_AMD_shader_core_properties2 === + + enum class ShaderCorePropertiesFlagBitsAMD : VkShaderCorePropertiesFlagsAMD + { + }; + + // wrapper using for bitmask VkShaderCorePropertiesFlagsAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderCorePropertiesFlagsAMD.html + using ShaderCorePropertiesFlagsAMD = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ShaderCorePropertiesFlagsAMD allFlags = {}; + }; + + //=== VK_EXT_validation_features === + + // wrapper class for enum VkValidationFeatureEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationFeatureEnableEXT.html + enum class ValidationFeatureEnableEXT + { + eGpuAssisted = VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, + eGpuAssistedReserveBindingSlot = VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, + eBestPractices = VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT, + eDebugPrintf = VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, + eSynchronizationValidation = VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT + }; + + // wrapper class for enum VkValidationFeatureDisableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationFeatureDisableEXT.html + enum class ValidationFeatureDisableEXT + { + eAll = VK_VALIDATION_FEATURE_DISABLE_ALL_EXT, + eShaders = VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT, + eThreadSafety = VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT, + eApiParameters = VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT, + eObjectLifetimes = VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT, + eCoreChecks = VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT, + eUniqueHandles = VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT, + eShaderValidationCache = VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT + }; + + //=== VK_NV_coverage_reduction_mode === + + // wrapper class for enum VkCoverageReductionModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCoverageReductionModeNV.html + enum class CoverageReductionModeNV + { + eMerge = VK_COVERAGE_REDUCTION_MODE_MERGE_NV, + eTruncate = VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV + }; + + enum class PipelineCoverageReductionStateCreateFlagBitsNV : VkPipelineCoverageReductionStateCreateFlagsNV + { + }; + + // wrapper using for bitmask VkPipelineCoverageReductionStateCreateFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCoverageReductionStateCreateFlagsNV.html + using PipelineCoverageReductionStateCreateFlagsNV = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PipelineCoverageReductionStateCreateFlagsNV allFlags = {}; + }; + + //=== VK_EXT_provoking_vertex === + + // wrapper class for enum VkProvokingVertexModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkProvokingVertexModeEXT.html + enum class ProvokingVertexModeEXT + { + eFirstVertex = VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, + eLastVertex = VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper class for enum VkFullScreenExclusiveEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFullScreenExclusiveEXT.html + enum class FullScreenExclusiveEXT + { + eDefault = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT, + eAllowed = VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT, + eDisallowed = VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT, + eApplicationControlled = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT + }; + +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + + enum class HeadlessSurfaceCreateFlagBitsEXT : VkHeadlessSurfaceCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkHeadlessSurfaceCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkHeadlessSurfaceCreateFlagsEXT.html + using HeadlessSurfaceCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR HeadlessSurfaceCreateFlagsEXT allFlags = {}; + }; + + //=== VK_KHR_pipeline_executable_properties === + + // wrapper class for enum VkPipelineExecutableStatisticFormatKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineExecutableStatisticFormatKHR.html + enum class PipelineExecutableStatisticFormatKHR + { + eBool32 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR, + eInt64 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR, + eUint64 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR, + eFloat64 = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR + }; + + //=== VK_NV_device_generated_commands === + + // wrapper class for enum VkIndirectStateFlagBitsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectStateFlagBitsNV.html + enum class IndirectStateFlagBitsNV : VkIndirectStateFlagsNV + { + eFlagFrontface = VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV + }; + + // wrapper using for bitmask VkIndirectStateFlagsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectStateFlagsNV.html + using IndirectStateFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkIndirectStateFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR IndirectStateFlagsNV allFlags = IndirectStateFlagBitsNV::eFlagFrontface; + }; + + // wrapper class for enum VkIndirectCommandsTokenTypeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsTokenTypeNV.html + enum class IndirectCommandsTokenTypeNV + { + eShaderGroup = VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, + eStateFlags = VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV, + eIndexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV, + eVertexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV, + ePushConstant = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, + eDrawIndexed = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV, + eDraw = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV, + eDrawTasks = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV, + eDrawMeshTasks = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV, + ePipeline = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV, + eDispatch = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV + }; + + // wrapper class for enum VkIndirectCommandsLayoutUsageFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutUsageFlagBitsNV.html + enum class IndirectCommandsLayoutUsageFlagBitsNV : VkIndirectCommandsLayoutUsageFlagsNV + { + eExplicitPreprocess = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV, + eIndexedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV, + eUnorderedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV + }; + + // wrapper using for bitmask VkIndirectCommandsLayoutUsageFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutUsageFlagsNV.html + using IndirectCommandsLayoutUsageFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkIndirectCommandsLayoutUsageFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV allFlags = IndirectCommandsLayoutUsageFlagBitsNV::eExplicitPreprocess | + IndirectCommandsLayoutUsageFlagBitsNV::eIndexedSequences | + IndirectCommandsLayoutUsageFlagBitsNV::eUnorderedSequences; + }; + + //=== VK_EXT_depth_bias_control === + + // wrapper class for enum VkDepthBiasRepresentationEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDepthBiasRepresentationEXT.html + enum class DepthBiasRepresentationEXT + { + eLeastRepresentableValueFormat = VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT, + eLeastRepresentableValueForceUnorm = VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT, + eFloat = VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT + }; + + //=== VK_EXT_device_memory_report === + + // wrapper class for enum VkDeviceMemoryReportEventTypeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemoryReportEventTypeEXT.html + enum class DeviceMemoryReportEventTypeEXT + { + eAllocate = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT, + eFree = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT, + eImport = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT, + eUnimport = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT, + eAllocationFailed = VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT + }; + + enum class DeviceMemoryReportFlagBitsEXT : VkDeviceMemoryReportFlagsEXT + { + }; + + // wrapper using for bitmask VkDeviceMemoryReportFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemoryReportFlagsEXT.html + using DeviceMemoryReportFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DeviceMemoryReportFlagsEXT allFlags = {}; + }; + + //=== VK_KHR_video_encode_queue === + + // wrapper class for enum VkVideoEncodeCapabilityFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeCapabilityFlagBitsKHR.html + enum class VideoEncodeCapabilityFlagBitsKHR : VkVideoEncodeCapabilityFlagsKHR + { + ePrecedingExternallyEncodedBytes = VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR, + eInsufficientBitstreamBufferRangeDetection = VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR, + eQuantizationDeltaMap = VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR, + eEmphasisMap = VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeCapabilityFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeCapabilityFlagsKHR.html + using VideoEncodeCapabilityFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeCapabilityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeCapabilityFlagsKHR allFlags = + VideoEncodeCapabilityFlagBitsKHR::ePrecedingExternallyEncodedBytes | VideoEncodeCapabilityFlagBitsKHR::eInsufficientBitstreamBufferRangeDetection | + VideoEncodeCapabilityFlagBitsKHR::eQuantizationDeltaMap | VideoEncodeCapabilityFlagBitsKHR::eEmphasisMap; + }; + + // wrapper class for enum VkVideoEncodeFeedbackFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeFeedbackFlagBitsKHR.html + enum class VideoEncodeFeedbackFlagBitsKHR : VkVideoEncodeFeedbackFlagsKHR + { + eBitstreamBufferOffset = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR, + eBitstreamBytesWritten = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR, + eBitstreamHasOverrides = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeFeedbackFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeFeedbackFlagsKHR.html + using VideoEncodeFeedbackFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeFeedbackFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeFeedbackFlagsKHR allFlags = VideoEncodeFeedbackFlagBitsKHR::eBitstreamBufferOffset | + VideoEncodeFeedbackFlagBitsKHR::eBitstreamBytesWritten | + VideoEncodeFeedbackFlagBitsKHR::eBitstreamHasOverrides; + }; + + // wrapper class for enum VkVideoEncodeUsageFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeUsageFlagBitsKHR.html + enum class VideoEncodeUsageFlagBitsKHR : VkVideoEncodeUsageFlagsKHR + { + eDefault = VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR, + eTranscoding = VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR, + eStreaming = VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR, + eRecording = VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR, + eConferencing = VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeUsageFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeUsageFlagsKHR.html + using VideoEncodeUsageFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeUsageFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeUsageFlagsKHR allFlags = VideoEncodeUsageFlagBitsKHR::eDefault | VideoEncodeUsageFlagBitsKHR::eTranscoding | + VideoEncodeUsageFlagBitsKHR::eStreaming | VideoEncodeUsageFlagBitsKHR::eRecording | + VideoEncodeUsageFlagBitsKHR::eConferencing; + }; + + // wrapper class for enum VkVideoEncodeContentFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeContentFlagBitsKHR.html + enum class VideoEncodeContentFlagBitsKHR : VkVideoEncodeContentFlagsKHR + { + eDefault = VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR, + eCamera = VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR, + eDesktop = VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR, + eRendered = VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeContentFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeContentFlagsKHR.html + using VideoEncodeContentFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeContentFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeContentFlagsKHR allFlags = + VideoEncodeContentFlagBitsKHR::eDefault | VideoEncodeContentFlagBitsKHR::eCamera | VideoEncodeContentFlagBitsKHR::eDesktop | + VideoEncodeContentFlagBitsKHR::eRendered; + }; + + // wrapper class for enum VkVideoEncodeTuningModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeTuningModeKHR.html + enum class VideoEncodeTuningModeKHR + { + eDefault = VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR, + eHighQuality = VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR, + eLowLatency = VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR, + eUltraLowLatency = VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR, + eLossless = VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR + }; + + // wrapper class for enum VkVideoEncodeRateControlModeFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeRateControlModeFlagBitsKHR.html + enum class VideoEncodeRateControlModeFlagBitsKHR : VkVideoEncodeRateControlModeFlagsKHR + { + eDefault = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR, + eDisabled = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, + eCbr = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR, + eVbr = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeRateControlModeFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeRateControlModeFlagsKHR.html + using VideoEncodeRateControlModeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeRateControlModeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeRateControlModeFlagsKHR allFlags = + VideoEncodeRateControlModeFlagBitsKHR::eDefault | VideoEncodeRateControlModeFlagBitsKHR::eDisabled | VideoEncodeRateControlModeFlagBitsKHR::eCbr | + VideoEncodeRateControlModeFlagBitsKHR::eVbr; + }; + + // wrapper class for enum VkVideoEncodeFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeFlagBitsKHR.html + enum class VideoEncodeFlagBitsKHR : VkVideoEncodeFlagsKHR + { + eIntraRefresh = VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, + eWithQuantizationDeltaMap = VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR, + eWithEmphasisMap = VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeFlagsKHR.html + using VideoEncodeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeFlagsKHR allFlags = + VideoEncodeFlagBitsKHR::eIntraRefresh | VideoEncodeFlagBitsKHR::eWithQuantizationDeltaMap | VideoEncodeFlagBitsKHR::eWithEmphasisMap; + }; + + enum class VideoEncodeRateControlFlagBitsKHR : VkVideoEncodeRateControlFlagsKHR + { + }; + + // wrapper using for bitmask VkVideoEncodeRateControlFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeRateControlFlagsKHR.html + using VideoEncodeRateControlFlagsKHR = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeRateControlFlagsKHR allFlags = {}; + }; + + //=== VK_NV_device_diagnostics_config === + + // wrapper class for enum VkDeviceDiagnosticsConfigFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceDiagnosticsConfigFlagBitsNV.html + enum class DeviceDiagnosticsConfigFlagBitsNV : VkDeviceDiagnosticsConfigFlagsNV + { + eEnableShaderDebugInfo = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV, + eEnableResourceTracking = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV, + eEnableAutomaticCheckpoints = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV, + eEnableShaderErrorReporting = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV + }; + + // wrapper using for bitmask VkDeviceDiagnosticsConfigFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceDiagnosticsConfigFlagsNV.html + using DeviceDiagnosticsConfigFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDeviceDiagnosticsConfigFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DeviceDiagnosticsConfigFlagsNV allFlags = + DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderDebugInfo | DeviceDiagnosticsConfigFlagBitsNV::eEnableResourceTracking | + DeviceDiagnosticsConfigFlagBitsNV::eEnableAutomaticCheckpoints | DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderErrorReporting; + }; + + //=== VK_QCOM_tile_shading === + + // wrapper class for enum VkTileShadingRenderPassFlagBitsQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkTileShadingRenderPassFlagBitsQCOM.html + enum class TileShadingRenderPassFlagBitsQCOM : VkTileShadingRenderPassFlagsQCOM + { + eEnable = VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM, + ePerTileExecution = VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM + }; + + // wrapper using for bitmask VkTileShadingRenderPassFlagsQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkTileShadingRenderPassFlagsQCOM.html + using TileShadingRenderPassFlagsQCOM = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkTileShadingRenderPassFlagBitsQCOM; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR TileShadingRenderPassFlagsQCOM allFlags = + TileShadingRenderPassFlagBitsQCOM::eEnable | TileShadingRenderPassFlagBitsQCOM::ePerTileExecution; + }; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + // wrapper class for enum VkExportMetalObjectTypeFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalObjectTypeFlagBitsEXT.html + enum class ExportMetalObjectTypeFlagBitsEXT : VkExportMetalObjectTypeFlagsEXT + { + eMetalDevice = VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT, + eMetalCommandQueue = VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT, + eMetalBuffer = VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT, + eMetalTexture = VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT, + eMetalIosurface = VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT, + eMetalSharedEvent = VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT + }; + + // wrapper using for bitmask VkExportMetalObjectTypeFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalObjectTypeFlagsEXT.html + using ExportMetalObjectTypeFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkExportMetalObjectTypeFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ExportMetalObjectTypeFlagsEXT allFlags = + ExportMetalObjectTypeFlagBitsEXT::eMetalDevice | ExportMetalObjectTypeFlagBitsEXT::eMetalCommandQueue | ExportMetalObjectTypeFlagBitsEXT::eMetalBuffer | + ExportMetalObjectTypeFlagBitsEXT::eMetalTexture | ExportMetalObjectTypeFlagBitsEXT::eMetalIosurface | ExportMetalObjectTypeFlagBitsEXT::eMetalSharedEvent; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_graphics_pipeline_library === + + // wrapper class for enum VkGraphicsPipelineLibraryFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGraphicsPipelineLibraryFlagBitsEXT.html + enum class GraphicsPipelineLibraryFlagBitsEXT : VkGraphicsPipelineLibraryFlagsEXT + { + eVertexInputInterface = VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT, + ePreRasterizationShaders = VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, + eFragmentShader = VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, + eFragmentOutputInterface = VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT + }; + + // wrapper using for bitmask VkGraphicsPipelineLibraryFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGraphicsPipelineLibraryFlagsEXT.html + using GraphicsPipelineLibraryFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkGraphicsPipelineLibraryFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR GraphicsPipelineLibraryFlagsEXT allFlags = + GraphicsPipelineLibraryFlagBitsEXT::eVertexInputInterface | GraphicsPipelineLibraryFlagBitsEXT::ePreRasterizationShaders | + GraphicsPipelineLibraryFlagBitsEXT::eFragmentShader | GraphicsPipelineLibraryFlagBitsEXT::eFragmentOutputInterface; + }; + + //=== VK_NV_fragment_shading_rate_enums === + + // wrapper class for enum VkFragmentShadingRateNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFragmentShadingRateNV.html + enum class FragmentShadingRateNV + { + e1InvocationPerPixel = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, + e1InvocationPer1X2Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV, + e1InvocationPer2X1Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV, + e1InvocationPer2X2Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV, + e1InvocationPer2X4Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV, + e1InvocationPer4X2Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV, + e1InvocationPer4X4Pixels = VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV, + e2InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV, + e4InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV, + e8InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, + e16InvocationsPerPixel = VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV, + eNoInvocations = VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV + }; + + // wrapper class for enum VkFragmentShadingRateTypeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFragmentShadingRateTypeNV.html + enum class FragmentShadingRateTypeNV + { + eFragmentSize = VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV, + eEnums = VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV + }; + + //=== VK_NV_ray_tracing_motion_blur === + + // wrapper class for enum VkAccelerationStructureMotionInstanceTypeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMotionInstanceTypeNV.html + enum class AccelerationStructureMotionInstanceTypeNV + { + eStatic = VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV, + eMatrixMotion = VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, + eSrtMotion = VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV + }; + + enum class AccelerationStructureMotionInfoFlagBitsNV : VkAccelerationStructureMotionInfoFlagsNV + { + }; + + // wrapper using for bitmask VkAccelerationStructureMotionInfoFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMotionInfoFlagsNV.html + using AccelerationStructureMotionInfoFlagsNV = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AccelerationStructureMotionInfoFlagsNV allFlags = {}; + }; + + enum class AccelerationStructureMotionInstanceFlagBitsNV : VkAccelerationStructureMotionInstanceFlagsNV + { + }; + + // wrapper using for bitmask VkAccelerationStructureMotionInstanceFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMotionInstanceFlagsNV.html + using AccelerationStructureMotionInstanceFlagsNV = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AccelerationStructureMotionInstanceFlagsNV allFlags = {}; + }; + + //=== VK_EXT_image_compression_control === + + // wrapper class for enum VkImageCompressionFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCompressionFlagBitsEXT.html + enum class ImageCompressionFlagBitsEXT : VkImageCompressionFlagsEXT + { + eDefault = VK_IMAGE_COMPRESSION_DEFAULT_EXT, + eFixedRateDefault = VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT, + eFixedRateExplicit = VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, + eDisabled = VK_IMAGE_COMPRESSION_DISABLED_EXT + }; + + // wrapper using for bitmask VkImageCompressionFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCompressionFlagsEXT.html + using ImageCompressionFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageCompressionFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageCompressionFlagsEXT allFlags = + ImageCompressionFlagBitsEXT::eDefault | ImageCompressionFlagBitsEXT::eFixedRateDefault | ImageCompressionFlagBitsEXT::eFixedRateExplicit | + ImageCompressionFlagBitsEXT::eDisabled; + }; + + // wrapper class for enum VkImageCompressionFixedRateFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCompressionFixedRateFlagBitsEXT.html + enum class ImageCompressionFixedRateFlagBitsEXT : VkImageCompressionFixedRateFlagsEXT + { + eNone = VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT, + e1Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT, + e2Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT, + e3Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT, + e4Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT, + e5Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT, + e6Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT, + e7Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT, + e8Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT, + e9Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT, + e10Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT, + e11Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT, + e12Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT, + e13Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT, + e14Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT, + e15Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT, + e16Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT, + e17Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT, + e18Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT, + e19Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT, + e20Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT, + e21Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT, + e22Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT, + e23Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT, + e24Bpc = VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT + }; + + // wrapper using for bitmask VkImageCompressionFixedRateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCompressionFixedRateFlagsEXT.html + using ImageCompressionFixedRateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageCompressionFixedRateFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageCompressionFixedRateFlagsEXT allFlags = + ImageCompressionFixedRateFlagBitsEXT::eNone | ImageCompressionFixedRateFlagBitsEXT::e1Bpc | ImageCompressionFixedRateFlagBitsEXT::e2Bpc | + ImageCompressionFixedRateFlagBitsEXT::e3Bpc | ImageCompressionFixedRateFlagBitsEXT::e4Bpc | ImageCompressionFixedRateFlagBitsEXT::e5Bpc | + ImageCompressionFixedRateFlagBitsEXT::e6Bpc | ImageCompressionFixedRateFlagBitsEXT::e7Bpc | ImageCompressionFixedRateFlagBitsEXT::e8Bpc | + ImageCompressionFixedRateFlagBitsEXT::e9Bpc | ImageCompressionFixedRateFlagBitsEXT::e10Bpc | ImageCompressionFixedRateFlagBitsEXT::e11Bpc | + ImageCompressionFixedRateFlagBitsEXT::e12Bpc | ImageCompressionFixedRateFlagBitsEXT::e13Bpc | ImageCompressionFixedRateFlagBitsEXT::e14Bpc | + ImageCompressionFixedRateFlagBitsEXT::e15Bpc | ImageCompressionFixedRateFlagBitsEXT::e16Bpc | ImageCompressionFixedRateFlagBitsEXT::e17Bpc | + ImageCompressionFixedRateFlagBitsEXT::e18Bpc | ImageCompressionFixedRateFlagBitsEXT::e19Bpc | ImageCompressionFixedRateFlagBitsEXT::e20Bpc | + ImageCompressionFixedRateFlagBitsEXT::e21Bpc | ImageCompressionFixedRateFlagBitsEXT::e22Bpc | ImageCompressionFixedRateFlagBitsEXT::e23Bpc | + ImageCompressionFixedRateFlagBitsEXT::e24Bpc; + }; + + //=== VK_EXT_device_fault === + + // wrapper class for enum VkDeviceFaultAddressTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultAddressTypeEXT.html + enum class DeviceFaultAddressTypeEXT + { + eNone = VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT, + eReadInvalid = VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT, + eWriteInvalid = VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT, + eExecuteInvalid = VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT, + eInstructionPointerUnknown = VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT, + eInstructionPointerInvalid = VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT, + eInstructionPointerFault = VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT + }; + + // wrapper class for enum VkDeviceFaultVendorBinaryHeaderVersionEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultVendorBinaryHeaderVersionEXT.html + enum class DeviceFaultVendorBinaryHeaderVersionEXT + { + eOne = VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT + }; + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + enum class DirectFBSurfaceCreateFlagBitsEXT : VkDirectFBSurfaceCreateFlagsEXT + { + }; + + // wrapper using for bitmask VkDirectFBSurfaceCreateFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDirectFBSurfaceCreateFlagsEXT.html + using DirectFBSurfaceCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DirectFBSurfaceCreateFlagsEXT allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_device_address_binding_report === + + // wrapper class for enum VkDeviceAddressBindingFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceAddressBindingFlagBitsEXT.html + enum class DeviceAddressBindingFlagBitsEXT : VkDeviceAddressBindingFlagsEXT + { + eInternalObject = VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT + }; + + // wrapper using for bitmask VkDeviceAddressBindingFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceAddressBindingFlagsEXT.html + using DeviceAddressBindingFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDeviceAddressBindingFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DeviceAddressBindingFlagsEXT allFlags = DeviceAddressBindingFlagBitsEXT::eInternalObject; + }; + + // wrapper class for enum VkDeviceAddressBindingTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceAddressBindingTypeEXT.html + enum class DeviceAddressBindingTypeEXT + { + eBind = VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT, + eUnbind = VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT + }; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + // wrapper class for enum VkImageConstraintsInfoFlagBitsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageConstraintsInfoFlagBitsFUCHSIA.html + enum class ImageConstraintsInfoFlagBitsFUCHSIA : VkImageConstraintsInfoFlagsFUCHSIA + { + eCpuReadRarely = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA, + eCpuReadOften = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA, + eCpuWriteRarely = VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA, + eCpuWriteOften = VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA, + eProtectedOptional = VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA + }; + + // wrapper using for bitmask VkImageConstraintsInfoFlagsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageConstraintsInfoFlagsFUCHSIA.html + using ImageConstraintsInfoFlagsFUCHSIA = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkImageConstraintsInfoFlagBitsFUCHSIA; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA allFlags = + ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely | ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften | + ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely | ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften | + ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional; + }; + + enum class ImageFormatConstraintsFlagBitsFUCHSIA : VkImageFormatConstraintsFlagsFUCHSIA + { + }; + + // wrapper using for bitmask VkImageFormatConstraintsFlagsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageFormatConstraintsFlagsFUCHSIA.html + using ImageFormatConstraintsFlagsFUCHSIA = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ImageFormatConstraintsFlagsFUCHSIA allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_frame_boundary === + + // wrapper class for enum VkFrameBoundaryFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFrameBoundaryFlagBitsEXT.html + enum class FrameBoundaryFlagBitsEXT : VkFrameBoundaryFlagsEXT + { + eFrameEnd = VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT + }; + + // wrapper using for bitmask VkFrameBoundaryFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFrameBoundaryFlagsEXT.html + using FrameBoundaryFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkFrameBoundaryFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR FrameBoundaryFlagsEXT allFlags = FrameBoundaryFlagBitsEXT::eFrameEnd; + }; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + enum class ScreenSurfaceCreateFlagBitsQNX : VkScreenSurfaceCreateFlagsQNX + { + }; + + // wrapper using for bitmask VkScreenSurfaceCreateFlagsQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkScreenSurfaceCreateFlagsQNX.html + using ScreenSurfaceCreateFlagsQNX = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ScreenSurfaceCreateFlagsQNX allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_opacity_micromap === + + // wrapper class for enum VkMicromapTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapTypeEXT.html + enum class MicromapTypeEXT + { + eOpacityMicromap = VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + eDisplacementMicromapNV = VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + }; + + // wrapper class for enum VkBuildMicromapFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildMicromapFlagBitsEXT.html + enum class BuildMicromapFlagBitsEXT : VkBuildMicromapFlagsEXT + { + ePreferFastTrace = VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT, + ePreferFastBuild = VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT, + eAllowCompaction = VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT + }; + + // wrapper using for bitmask VkBuildMicromapFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildMicromapFlagsEXT.html + using BuildMicromapFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkBuildMicromapFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR BuildMicromapFlagsEXT allFlags = + BuildMicromapFlagBitsEXT::ePreferFastTrace | BuildMicromapFlagBitsEXT::ePreferFastBuild | BuildMicromapFlagBitsEXT::eAllowCompaction; + }; + + // wrapper class for enum VkCopyMicromapModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMicromapModeEXT.html + enum class CopyMicromapModeEXT + { + eClone = VK_COPY_MICROMAP_MODE_CLONE_EXT, + eSerialize = VK_COPY_MICROMAP_MODE_SERIALIZE_EXT, + eDeserialize = VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT, + eCompact = VK_COPY_MICROMAP_MODE_COMPACT_EXT + }; + + // wrapper class for enum VkMicromapCreateFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapCreateFlagBitsEXT.html + enum class MicromapCreateFlagBitsEXT : VkMicromapCreateFlagsEXT + { + eDeviceAddressCaptureReplay = VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT + }; + + // wrapper using for bitmask VkMicromapCreateFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapCreateFlagsEXT.html + using MicromapCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkMicromapCreateFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MicromapCreateFlagsEXT allFlags = MicromapCreateFlagBitsEXT::eDeviceAddressCaptureReplay; + }; + + // wrapper class for enum VkBuildMicromapModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildMicromapModeEXT.html + enum class BuildMicromapModeEXT + { + eBuild = VK_BUILD_MICROMAP_MODE_BUILD_EXT + }; + + // wrapper class for enum VkOpacityMicromapFormatEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpacityMicromapFormatEXT.html + enum class OpacityMicromapFormatEXT + { + e2State = VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT, + e4State = VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT + }; + + // wrapper class for enum VkOpacityMicromapSpecialIndexEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpacityMicromapSpecialIndexEXT.html + enum class OpacityMicromapSpecialIndexEXT + { + eFullyTransparent = VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT_EXT, + eFullyOpaque = VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT, + eFullyUnknownTransparent = VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT, + eFullyUnknownOpaque = VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT, + eClusterGeometryDisableOpacityMicromapNV = VK_OPACITY_MICROMAP_SPECIAL_INDEX_CLUSTER_GEOMETRY_DISABLE_OPACITY_MICROMAP_NV + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + + // wrapper class for enum VkDisplacementMicromapFormatNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplacementMicromapFormatNV.html + enum class DisplacementMicromapFormatNV + { + e64Triangles64Bytes = VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV, + e256Triangles128Bytes = VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV, + e1024Triangles128Bytes = VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV + }; + +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_ARM_scheduling_controls === + + // wrapper class for enum VkPhysicalDeviceSchedulingControlsFlagBitsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSchedulingControlsFlagBitsARM.html + enum class PhysicalDeviceSchedulingControlsFlagBitsARM : VkPhysicalDeviceSchedulingControlsFlagsARM + { + eShaderCoreCount = VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM + }; + + // wrapper using for bitmask VkPhysicalDeviceSchedulingControlsFlagsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSchedulingControlsFlagsARM.html + using PhysicalDeviceSchedulingControlsFlagsARM = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPhysicalDeviceSchedulingControlsFlagBitsARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PhysicalDeviceSchedulingControlsFlagsARM allFlags = PhysicalDeviceSchedulingControlsFlagBitsARM::eShaderCoreCount; + }; + + //=== VK_NV_memory_decompression === + + // wrapper class for enum VkMemoryDecompressionMethodFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryDecompressionMethodFlagBitsNV.html + enum class MemoryDecompressionMethodFlagBitsNV : VkMemoryDecompressionMethodFlagsNV + { + eGdeflate10 = VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV + }; + + // wrapper using for bitmask VkMemoryDecompressionMethodFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryDecompressionMethodFlagsNV.html + using MemoryDecompressionMethodFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkMemoryDecompressionMethodFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR MemoryDecompressionMethodFlagsNV allFlags = MemoryDecompressionMethodFlagBitsNV::eGdeflate10; + }; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + + // wrapper class for enum VkRayTracingLssIndexingModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingLssIndexingModeNV.html + enum class RayTracingLssIndexingModeNV + { + eList = VK_RAY_TRACING_LSS_INDEXING_MODE_LIST_NV, + eSuccessive = VK_RAY_TRACING_LSS_INDEXING_MODE_SUCCESSIVE_NV + }; + + // wrapper class for enum VkRayTracingLssPrimitiveEndCapsModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingLssPrimitiveEndCapsModeNV.html + enum class RayTracingLssPrimitiveEndCapsModeNV + { + eNone = VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_NONE_NV, + eChained = VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_CHAINED_NV + }; + + //=== VK_EXT_subpass_merge_feedback === + + // wrapper class for enum VkSubpassMergeStatusEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassMergeStatusEXT.html + enum class SubpassMergeStatusEXT + { + eMerged = VK_SUBPASS_MERGE_STATUS_MERGED_EXT, + eDisallowed = VK_SUBPASS_MERGE_STATUS_DISALLOWED_EXT, + eNotMergedSideEffects = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SIDE_EFFECTS_EXT, + eNotMergedSamplesMismatch = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SAMPLES_MISMATCH_EXT, + eNotMergedViewsMismatch = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_VIEWS_MISMATCH_EXT, + eNotMergedAliasing = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_ALIASING_EXT, + eNotMergedDependencies = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPENDENCIES_EXT, + eNotMergedIncompatibleInputAttachment = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INCOMPATIBLE_INPUT_ATTACHMENT_EXT, + eNotMergedTooManyAttachments = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_TOO_MANY_ATTACHMENTS_EXT, + eNotMergedInsufficientStorage = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_INSUFFICIENT_STORAGE_EXT, + eNotMergedDepthStencilCount = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_DEPTH_STENCIL_COUNT_EXT, + eNotMergedResolveAttachmentReuse = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_RESOLVE_ATTACHMENT_REUSE_EXT, + eNotMergedSingleSubpass = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_SINGLE_SUBPASS_EXT, + eNotMergedUnspecified = VK_SUBPASS_MERGE_STATUS_NOT_MERGED_UNSPECIFIED_EXT + }; + + //=== VK_LUNARG_direct_driver_loading === + + // wrapper class for enum VkDirectDriverLoadingModeLUNARG, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDirectDriverLoadingModeLUNARG.html + enum class DirectDriverLoadingModeLUNARG + { + eExclusive = VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG, + eInclusive = VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG + }; + + enum class DirectDriverLoadingFlagBitsLUNARG : VkDirectDriverLoadingFlagsLUNARG + { + }; + + // wrapper using for bitmask VkDirectDriverLoadingFlagsLUNARG, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDirectDriverLoadingFlagsLUNARG.html + using DirectDriverLoadingFlagsLUNARG = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DirectDriverLoadingFlagsLUNARG allFlags = {}; + }; + + //=== VK_ARM_tensors === + + // wrapper class for enum VkTensorCreateFlagBitsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorCreateFlagBitsARM.html + enum class TensorCreateFlagBitsARM : VkTensorCreateFlagsARM + { + eMutableFormat = VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM, + eProtected = VK_TENSOR_CREATE_PROTECTED_BIT_ARM, + eDescriptorBufferCaptureReplay = VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM + }; + + // wrapper using for bitmask VkTensorCreateFlagsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorCreateFlagsARM.html + using TensorCreateFlagsARM = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkTensorCreateFlagBitsARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR TensorCreateFlagsARM allFlags = + TensorCreateFlagBitsARM::eMutableFormat | TensorCreateFlagBitsARM::eProtected | TensorCreateFlagBitsARM::eDescriptorBufferCaptureReplay; + }; + + // wrapper class for enum VkTensorViewCreateFlagBitsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorViewCreateFlagBitsARM.html + enum class TensorViewCreateFlagBitsARM : VkTensorViewCreateFlagsARM + { + eDescriptorBufferCaptureReplay = VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM + }; + + // wrapper using for bitmask VkTensorViewCreateFlagsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorViewCreateFlagsARM.html + using TensorViewCreateFlagsARM = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkTensorViewCreateFlagBitsARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR TensorViewCreateFlagsARM allFlags = TensorViewCreateFlagBitsARM::eDescriptorBufferCaptureReplay; + }; + + // wrapper class for enum VkTensorUsageFlagBitsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorUsageFlagBitsARM.html + enum class TensorUsageFlagBitsARM : VkTensorUsageFlagsARM + { + eShader = VK_TENSOR_USAGE_SHADER_BIT_ARM, + eTransferSrc = VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARM, + eTransferDst = VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARM, + eImageAliasing = VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM, + eDataGraph = VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM + }; + + // wrapper using for bitmask VkTensorUsageFlagsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorUsageFlagsARM.html + using TensorUsageFlagsARM = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkTensorUsageFlagBitsARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR TensorUsageFlagsARM allFlags = TensorUsageFlagBitsARM::eShader | TensorUsageFlagBitsARM::eTransferSrc | + TensorUsageFlagBitsARM::eTransferDst | TensorUsageFlagBitsARM::eImageAliasing | + TensorUsageFlagBitsARM::eDataGraph; + }; + + // wrapper class for enum VkTensorTilingARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorTilingARM.html + enum class TensorTilingARM + { + eOptimal = VK_TENSOR_TILING_OPTIMAL_ARM, + eLinear = VK_TENSOR_TILING_LINEAR_ARM + }; + + //=== VK_NV_optical_flow === + + // wrapper class for enum VkOpticalFlowUsageFlagBitsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowUsageFlagBitsNV.html + enum class OpticalFlowUsageFlagBitsNV : VkOpticalFlowUsageFlagsNV + { + eUnknown = VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV, + eInput = VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV, + eOutput = VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV, + eHint = VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV, + eCost = VK_OPTICAL_FLOW_USAGE_COST_BIT_NV, + eGlobalFlow = VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV + }; + + // wrapper using for bitmask VkOpticalFlowUsageFlagsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowUsageFlagsNV.html + using OpticalFlowUsageFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkOpticalFlowUsageFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR OpticalFlowUsageFlagsNV allFlags = OpticalFlowUsageFlagBitsNV::eUnknown | OpticalFlowUsageFlagBitsNV::eInput | + OpticalFlowUsageFlagBitsNV::eOutput | OpticalFlowUsageFlagBitsNV::eHint | + OpticalFlowUsageFlagBitsNV::eCost | OpticalFlowUsageFlagBitsNV::eGlobalFlow; + }; + + // wrapper class for enum VkOpticalFlowGridSizeFlagBitsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowGridSizeFlagBitsNV.html + enum class OpticalFlowGridSizeFlagBitsNV : VkOpticalFlowGridSizeFlagsNV + { + eUnknown = VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV, + e1X1 = VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV, + e2X2 = VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV, + e4X4 = VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV, + e8X8 = VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV + }; + + // wrapper using for bitmask VkOpticalFlowGridSizeFlagsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowGridSizeFlagsNV.html + using OpticalFlowGridSizeFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkOpticalFlowGridSizeFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR OpticalFlowGridSizeFlagsNV allFlags = OpticalFlowGridSizeFlagBitsNV::eUnknown | OpticalFlowGridSizeFlagBitsNV::e1X1 | + OpticalFlowGridSizeFlagBitsNV::e2X2 | OpticalFlowGridSizeFlagBitsNV::e4X4 | + OpticalFlowGridSizeFlagBitsNV::e8X8; + }; + + // wrapper class for enum VkOpticalFlowPerformanceLevelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowPerformanceLevelNV.html + enum class OpticalFlowPerformanceLevelNV + { + eUnknown = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV, + eSlow = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV, + eMedium = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV, + eFast = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV + }; + + // wrapper class for enum VkOpticalFlowSessionBindingPointNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionBindingPointNV.html + enum class OpticalFlowSessionBindingPointNV + { + eUnknown = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV, + eInput = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV, + eReference = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV, + eHint = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV, + eFlowVector = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV, + eBackwardFlowVector = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV, + eCost = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV, + eBackwardCost = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV, + eGlobalFlow = VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV + }; + + // wrapper class for enum VkOpticalFlowSessionCreateFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionCreateFlagBitsNV.html + enum class OpticalFlowSessionCreateFlagBitsNV : VkOpticalFlowSessionCreateFlagsNV + { + eEnableHint = VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV, + eEnableCost = VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV, + eEnableGlobalFlow = VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV, + eAllowRegions = VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV, + eBothDirections = VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV + }; + + // wrapper using for bitmask VkOpticalFlowSessionCreateFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionCreateFlagsNV.html + using OpticalFlowSessionCreateFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkOpticalFlowSessionCreateFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR OpticalFlowSessionCreateFlagsNV allFlags = + OpticalFlowSessionCreateFlagBitsNV::eEnableHint | OpticalFlowSessionCreateFlagBitsNV::eEnableCost | + OpticalFlowSessionCreateFlagBitsNV::eEnableGlobalFlow | OpticalFlowSessionCreateFlagBitsNV::eAllowRegions | + OpticalFlowSessionCreateFlagBitsNV::eBothDirections; + }; + + // wrapper class for enum VkOpticalFlowExecuteFlagBitsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowExecuteFlagBitsNV.html + enum class OpticalFlowExecuteFlagBitsNV : VkOpticalFlowExecuteFlagsNV + { + eDisableTemporalHints = VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV + }; + + // wrapper using for bitmask VkOpticalFlowExecuteFlagsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowExecuteFlagsNV.html + using OpticalFlowExecuteFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkOpticalFlowExecuteFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR OpticalFlowExecuteFlagsNV allFlags = OpticalFlowExecuteFlagBitsNV::eDisableTemporalHints; + }; + + //=== VK_AMD_anti_lag === + + // wrapper class for enum VkAntiLagModeAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAntiLagModeAMD.html + enum class AntiLagModeAMD + { + eDriverControl = VK_ANTI_LAG_MODE_DRIVER_CONTROL_AMD, + eOn = VK_ANTI_LAG_MODE_ON_AMD, + eOff = VK_ANTI_LAG_MODE_OFF_AMD + }; + + // wrapper class for enum VkAntiLagStageAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAntiLagStageAMD.html + enum class AntiLagStageAMD + { + eInput = VK_ANTI_LAG_STAGE_INPUT_AMD, + ePresent = VK_ANTI_LAG_STAGE_PRESENT_AMD + }; + + //=== VK_EXT_shader_object === + + // wrapper class for enum VkShaderCreateFlagBitsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderCreateFlagBitsEXT.html + enum class ShaderCreateFlagBitsEXT : VkShaderCreateFlagsEXT + { + eLinkStage = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, + eAllowVaryingSubgroupSize = VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, + eRequireFullSubgroups = VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, + eNoTaskShader = VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT, + eDispatchBase = VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT, + eFragmentShadingRateAttachment = VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT, + eFragmentDensityMapAttachment = VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, + eIndirectBindable = VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT + }; + + // wrapper using for bitmask VkShaderCreateFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderCreateFlagsEXT.html + using ShaderCreateFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkShaderCreateFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ShaderCreateFlagsEXT allFlags = + ShaderCreateFlagBitsEXT::eLinkStage | ShaderCreateFlagBitsEXT::eAllowVaryingSubgroupSize | ShaderCreateFlagBitsEXT::eRequireFullSubgroups | + ShaderCreateFlagBitsEXT::eNoTaskShader | ShaderCreateFlagBitsEXT::eDispatchBase | ShaderCreateFlagBitsEXT::eFragmentShadingRateAttachment | + ShaderCreateFlagBitsEXT::eFragmentDensityMapAttachment | ShaderCreateFlagBitsEXT::eIndirectBindable; + }; + + // wrapper class for enum VkShaderCodeTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderCodeTypeEXT.html + enum class ShaderCodeTypeEXT + { + eBinary = VK_SHADER_CODE_TYPE_BINARY_EXT, + eSpirv = VK_SHADER_CODE_TYPE_SPIRV_EXT + }; + + //=== VK_KHR_surface_maintenance1 === + + // wrapper class for enum VkPresentScalingFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentScalingFlagBitsKHR.html + enum class PresentScalingFlagBitsKHR : VkPresentScalingFlagsKHR + { + eOneToOne = VK_PRESENT_SCALING_ONE_TO_ONE_BIT_KHR, + eAspectRatioStretch = VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_KHR, + eStretch = VK_PRESENT_SCALING_STRETCH_BIT_KHR + }; + + using PresentScalingFlagBitsEXT = PresentScalingFlagBitsKHR; + + // wrapper using for bitmask VkPresentScalingFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentScalingFlagsKHR.html + using PresentScalingFlagsKHR = Flags; + using PresentScalingFlagsEXT = PresentScalingFlagsKHR; + + template <> + struct FlagTraits + { + using WrappedType = VkPresentScalingFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PresentScalingFlagsKHR allFlags = + PresentScalingFlagBitsKHR::eOneToOne | PresentScalingFlagBitsKHR::eAspectRatioStretch | PresentScalingFlagBitsKHR::eStretch; + }; + + // wrapper class for enum VkPresentGravityFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentGravityFlagBitsKHR.html + enum class PresentGravityFlagBitsKHR : VkPresentGravityFlagsKHR + { + eMin = VK_PRESENT_GRAVITY_MIN_BIT_KHR, + eMax = VK_PRESENT_GRAVITY_MAX_BIT_KHR, + eCentered = VK_PRESENT_GRAVITY_CENTERED_BIT_KHR + }; + + using PresentGravityFlagBitsEXT = PresentGravityFlagBitsKHR; + + // wrapper using for bitmask VkPresentGravityFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentGravityFlagsKHR.html + using PresentGravityFlagsKHR = Flags; + using PresentGravityFlagsEXT = PresentGravityFlagsKHR; + + template <> + struct FlagTraits + { + using WrappedType = VkPresentGravityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PresentGravityFlagsKHR allFlags = + PresentGravityFlagBitsKHR::eMin | PresentGravityFlagBitsKHR::eMax | PresentGravityFlagBitsKHR::eCentered; + }; + + //=== VK_NV_ray_tracing_invocation_reorder === + + // wrapper class for enum VkRayTracingInvocationReorderModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingInvocationReorderModeNV.html + enum class RayTracingInvocationReorderModeNV + { + eNone = VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV, + eReorder = VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV + }; + + //=== VK_NV_cooperative_vector === + + // wrapper class for enum VkCooperativeVectorMatrixLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCooperativeVectorMatrixLayoutNV.html + enum class CooperativeVectorMatrixLayoutNV + { + eRowMajor = VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_ROW_MAJOR_NV, + eColumnMajor = VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_COLUMN_MAJOR_NV, + eInferencingOptimal = VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV, + eTrainingOptimal = VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV + }; + + // wrapper class for enum VkComponentTypeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkComponentTypeKHR.html + enum class ComponentTypeKHR + { + eFloat16 = VK_COMPONENT_TYPE_FLOAT16_KHR, + eFloat32 = VK_COMPONENT_TYPE_FLOAT32_KHR, + eFloat64 = VK_COMPONENT_TYPE_FLOAT64_KHR, + eSint8 = VK_COMPONENT_TYPE_SINT8_KHR, + eSint16 = VK_COMPONENT_TYPE_SINT16_KHR, + eSint32 = VK_COMPONENT_TYPE_SINT32_KHR, + eSint64 = VK_COMPONENT_TYPE_SINT64_KHR, + eUint8 = VK_COMPONENT_TYPE_UINT8_KHR, + eUint16 = VK_COMPONENT_TYPE_UINT16_KHR, + eUint32 = VK_COMPONENT_TYPE_UINT32_KHR, + eUint64 = VK_COMPONENT_TYPE_UINT64_KHR, + eBfloat16 = VK_COMPONENT_TYPE_BFLOAT16_KHR, + eSint8PackedNV = VK_COMPONENT_TYPE_SINT8_PACKED_NV, + eUint8PackedNV = VK_COMPONENT_TYPE_UINT8_PACKED_NV, + eFloat8E4M3EXT = VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT, + eFloatE4M3 = VK_COMPONENT_TYPE_FLOAT_E4M3_NV, + eFloat8E5M2EXT = VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT, + eFloatE5M2 = VK_COMPONENT_TYPE_FLOAT_E5M2_NV + }; + + using ComponentTypeNV = ComponentTypeKHR; + + //=== VK_EXT_layer_settings === + + // wrapper class for enum VkLayerSettingTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLayerSettingTypeEXT.html + enum class LayerSettingTypeEXT + { + eBool32 = VK_LAYER_SETTING_TYPE_BOOL32_EXT, + eInt32 = VK_LAYER_SETTING_TYPE_INT32_EXT, + eInt64 = VK_LAYER_SETTING_TYPE_INT64_EXT, + eUint32 = VK_LAYER_SETTING_TYPE_UINT32_EXT, + eUint64 = VK_LAYER_SETTING_TYPE_UINT64_EXT, + eFloat32 = VK_LAYER_SETTING_TYPE_FLOAT32_EXT, + eFloat64 = VK_LAYER_SETTING_TYPE_FLOAT64_EXT, + eString = VK_LAYER_SETTING_TYPE_STRING_EXT + }; + + //================================= + //=== Layer Setting Type Traits === + //================================= + + template <> + struct CppType + { + using Type = Bool32; + }; + + template <> + struct CppType + { + using Type = int32_t; + }; + + template <> + struct CppType + { + using Type = int64_t; + }; + + template <> + struct CppType + { + using Type = uint32_t; + }; + + template <> + struct CppType + { + using Type = uint64_t; + }; + + template <> + struct CppType + { + using Type = float; + }; + + template <> + struct CppType + { + using Type = double; + }; + + template <> + struct CppType + { + using Type = char *; + }; + + template + bool isSameType( LayerSettingTypeEXT layerSettingType ) + { + switch ( layerSettingType ) + { + case LayerSettingTypeEXT::eBool32 : return std::is_same::value; + case LayerSettingTypeEXT::eInt32 : return std::is_same::value; + case LayerSettingTypeEXT::eInt64 : return std::is_same::value; + case LayerSettingTypeEXT::eUint32 : return std::is_same::value; + case LayerSettingTypeEXT::eUint64 : return std::is_same::value; + case LayerSettingTypeEXT::eFloat32: return std::is_same::value; + case LayerSettingTypeEXT::eFloat64: return std::is_same::value; + case LayerSettingTypeEXT::eString : return std::is_same::value; + default : return false; + } + } + + //=== VK_NV_low_latency2 === + + // wrapper class for enum VkLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLatencyMarkerNV.html + enum class LatencyMarkerNV + { + eSimulationStart = VK_LATENCY_MARKER_SIMULATION_START_NV, + eSimulationEnd = VK_LATENCY_MARKER_SIMULATION_END_NV, + eRendersubmitStart = VK_LATENCY_MARKER_RENDERSUBMIT_START_NV, + eRendersubmitEnd = VK_LATENCY_MARKER_RENDERSUBMIT_END_NV, + ePresentStart = VK_LATENCY_MARKER_PRESENT_START_NV, + ePresentEnd = VK_LATENCY_MARKER_PRESENT_END_NV, + eInputSample = VK_LATENCY_MARKER_INPUT_SAMPLE_NV, + eTriggerFlash = VK_LATENCY_MARKER_TRIGGER_FLASH_NV, + eOutOfBandRendersubmitStart = VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_START_NV, + eOutOfBandRendersubmitEnd = VK_LATENCY_MARKER_OUT_OF_BAND_RENDERSUBMIT_END_NV, + eOutOfBandPresentStart = VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_START_NV, + eOutOfBandPresentEnd = VK_LATENCY_MARKER_OUT_OF_BAND_PRESENT_END_NV + }; + + // wrapper class for enum VkOutOfBandQueueTypeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOutOfBandQueueTypeNV.html + enum class OutOfBandQueueTypeNV + { + eRender = VK_OUT_OF_BAND_QUEUE_TYPE_RENDER_NV, + ePresent = VK_OUT_OF_BAND_QUEUE_TYPE_PRESENT_NV + }; + + //=== VK_KHR_cooperative_matrix === + + // wrapper class for enum VkScopeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkScopeKHR.html + enum class ScopeKHR + { + eDevice = VK_SCOPE_DEVICE_KHR, + eWorkgroup = VK_SCOPE_WORKGROUP_KHR, + eSubgroup = VK_SCOPE_SUBGROUP_KHR, + eQueueFamily = VK_SCOPE_QUEUE_FAMILY_KHR + }; + + using ScopeNV = ScopeKHR; + + //=== VK_ARM_data_graph === + + // wrapper class for enum VkDataGraphPipelineSessionBindPointARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionBindPointARM.html + enum class DataGraphPipelineSessionBindPointARM + { + eTransient = VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM + }; + + // wrapper class for enum VkDataGraphPipelineSessionBindPointTypeARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionBindPointTypeARM.html + enum class DataGraphPipelineSessionBindPointTypeARM + { + eMemory = VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM + }; + + // wrapper class for enum VkDataGraphPipelineSessionCreateFlagBitsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionCreateFlagBitsARM.html + enum class DataGraphPipelineSessionCreateFlagBitsARM : VkDataGraphPipelineSessionCreateFlagsARM + { + eProtected = VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM + }; + + // wrapper using for bitmask VkDataGraphPipelineSessionCreateFlagsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionCreateFlagsARM.html + using DataGraphPipelineSessionCreateFlagsARM = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkDataGraphPipelineSessionCreateFlagBitsARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DataGraphPipelineSessionCreateFlagsARM allFlags = DataGraphPipelineSessionCreateFlagBitsARM::eProtected; + }; + + // wrapper class for enum VkDataGraphPipelinePropertyARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelinePropertyARM.html + enum class DataGraphPipelinePropertyARM + { + eCreationLog = VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM, + eIdentifier = VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM + }; + + enum class DataGraphPipelineDispatchFlagBitsARM : VkDataGraphPipelineDispatchFlagsARM + { + }; + + // wrapper using for bitmask VkDataGraphPipelineDispatchFlagsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineDispatchFlagsARM.html + using DataGraphPipelineDispatchFlagsARM = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR DataGraphPipelineDispatchFlagsARM allFlags = {}; + }; + + // wrapper class for enum VkPhysicalDeviceDataGraphProcessingEngineTypeARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDataGraphProcessingEngineTypeARM.html + enum class PhysicalDeviceDataGraphProcessingEngineTypeARM + { + eDefault = VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM + }; + + // wrapper class for enum VkPhysicalDeviceDataGraphOperationTypeARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDataGraphOperationTypeARM.html + enum class PhysicalDeviceDataGraphOperationTypeARM + { + eSpirvExtendedInstructionSet = VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM + }; + + //=== VK_KHR_video_encode_av1 === + + // wrapper class for enum VkVideoEncodeAV1PredictionModeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1PredictionModeKHR.html + enum class VideoEncodeAV1PredictionModeKHR + { + eIntraOnly = VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR, + eSingleReference = VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR, + eUnidirectionalCompound = VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR, + eBidirectionalCompound = VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR + }; + + // wrapper class for enum VkVideoEncodeAV1RateControlGroupKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1RateControlGroupKHR.html + enum class VideoEncodeAV1RateControlGroupKHR + { + eIntra = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_INTRA_KHR, + ePredictive = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_PREDICTIVE_KHR, + eBipredictive = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_BIPREDICTIVE_KHR + }; + + // wrapper class for enum VkVideoEncodeAV1CapabilityFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1CapabilityFlagBitsKHR.html + enum class VideoEncodeAV1CapabilityFlagBitsKHR : VkVideoEncodeAV1CapabilityFlagsKHR + { + ePerRateControlGroupMinMaxQIndex = VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR, + eGenerateObuExtensionHeader = VK_VIDEO_ENCODE_AV1_CAPABILITY_GENERATE_OBU_EXTENSION_HEADER_BIT_KHR, + ePrimaryReferenceCdfOnly = VK_VIDEO_ENCODE_AV1_CAPABILITY_PRIMARY_REFERENCE_CDF_ONLY_BIT_KHR, + eFrameSizeOverride = VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR, + eMotionVectorScaling = VK_VIDEO_ENCODE_AV1_CAPABILITY_MOTION_VECTOR_SCALING_BIT_KHR, + eCompoundPredictionIntraRefresh = VK_VIDEO_ENCODE_AV1_CAPABILITY_COMPOUND_PREDICTION_INTRA_REFRESH_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeAV1CapabilityFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1CapabilityFlagsKHR.html + using VideoEncodeAV1CapabilityFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeAV1CapabilityFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeAV1CapabilityFlagsKHR allFlags = + VideoEncodeAV1CapabilityFlagBitsKHR::ePerRateControlGroupMinMaxQIndex | VideoEncodeAV1CapabilityFlagBitsKHR::eGenerateObuExtensionHeader | + VideoEncodeAV1CapabilityFlagBitsKHR::ePrimaryReferenceCdfOnly | VideoEncodeAV1CapabilityFlagBitsKHR::eFrameSizeOverride | + VideoEncodeAV1CapabilityFlagBitsKHR::eMotionVectorScaling | VideoEncodeAV1CapabilityFlagBitsKHR::eCompoundPredictionIntraRefresh; + }; + + // wrapper class for enum VkVideoEncodeAV1StdFlagBitsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1StdFlagBitsKHR.html + enum class VideoEncodeAV1StdFlagBitsKHR : VkVideoEncodeAV1StdFlagsKHR + { + eUniformTileSpacingFlagSet = VK_VIDEO_ENCODE_AV1_STD_UNIFORM_TILE_SPACING_FLAG_SET_BIT_KHR, + eSkipModePresentUnset = VK_VIDEO_ENCODE_AV1_STD_SKIP_MODE_PRESENT_UNSET_BIT_KHR, + ePrimaryRefFrame = VK_VIDEO_ENCODE_AV1_STD_PRIMARY_REF_FRAME_BIT_KHR, + eDeltaQ = VK_VIDEO_ENCODE_AV1_STD_DELTA_Q_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeAV1StdFlagsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1StdFlagsKHR.html + using VideoEncodeAV1StdFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeAV1StdFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeAV1StdFlagsKHR allFlags = + VideoEncodeAV1StdFlagBitsKHR::eUniformTileSpacingFlagSet | VideoEncodeAV1StdFlagBitsKHR::eSkipModePresentUnset | + VideoEncodeAV1StdFlagBitsKHR::ePrimaryRefFrame | VideoEncodeAV1StdFlagBitsKHR::eDeltaQ; + }; + + // wrapper class for enum VkVideoEncodeAV1SuperblockSizeFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1SuperblockSizeFlagBitsKHR.html + enum class VideoEncodeAV1SuperblockSizeFlagBitsKHR : VkVideoEncodeAV1SuperblockSizeFlagsKHR + { + e64 = VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_64_BIT_KHR, + e128 = VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_128_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeAV1SuperblockSizeFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1SuperblockSizeFlagsKHR.html + using VideoEncodeAV1SuperblockSizeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeAV1SuperblockSizeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeAV1SuperblockSizeFlagsKHR allFlags = + VideoEncodeAV1SuperblockSizeFlagBitsKHR::e64 | VideoEncodeAV1SuperblockSizeFlagBitsKHR::e128; + }; + + // wrapper class for enum VkVideoEncodeAV1RateControlFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1RateControlFlagBitsKHR.html + enum class VideoEncodeAV1RateControlFlagBitsKHR : VkVideoEncodeAV1RateControlFlagsKHR + { + eRegularGop = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR, + eTemporalLayerPatternDyadic = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR, + eReferencePatternFlat = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR, + eReferencePatternDyadic = VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeAV1RateControlFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1RateControlFlagsKHR.html + using VideoEncodeAV1RateControlFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeAV1RateControlFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeAV1RateControlFlagsKHR allFlags = + VideoEncodeAV1RateControlFlagBitsKHR::eRegularGop | VideoEncodeAV1RateControlFlagBitsKHR::eTemporalLayerPatternDyadic | + VideoEncodeAV1RateControlFlagBitsKHR::eReferencePatternFlat | VideoEncodeAV1RateControlFlagBitsKHR::eReferencePatternDyadic; + }; + + //=== VK_QCOM_image_processing2 === + + // wrapper class for enum VkBlockMatchWindowCompareModeQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBlockMatchWindowCompareModeQCOM.html + enum class BlockMatchWindowCompareModeQCOM + { + eMin = VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MIN_QCOM, + eMax = VK_BLOCK_MATCH_WINDOW_COMPARE_MODE_MAX_QCOM + }; + + //=== VK_QCOM_filter_cubic_weights === + + // wrapper class for enum VkCubicFilterWeightsQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCubicFilterWeightsQCOM.html + enum class CubicFilterWeightsQCOM + { + eCatmullRom = VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM, + eZeroTangentCardinal = VK_CUBIC_FILTER_WEIGHTS_ZERO_TANGENT_CARDINAL_QCOM, + eBSpline = VK_CUBIC_FILTER_WEIGHTS_B_SPLINE_QCOM, + eMitchellNetravali = VK_CUBIC_FILTER_WEIGHTS_MITCHELL_NETRAVALI_QCOM + }; + + //=== VK_MSFT_layered_driver === + + // wrapper class for enum VkLayeredDriverUnderlyingApiMSFT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkLayeredDriverUnderlyingApiMSFT.html + enum class LayeredDriverUnderlyingApiMSFT + { + eNone = VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT, + eD3D12 = VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT + }; + + //=== VK_KHR_calibrated_timestamps === + + // wrapper class for enum VkTimeDomainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTimeDomainKHR.html + enum class TimeDomainKHR + { + eDevice = VK_TIME_DOMAIN_DEVICE_KHR, + eClockMonotonic = VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR, + eClockMonotonicRaw = VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR, + eQueryPerformanceCounter = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_KHR + }; + + using TimeDomainEXT = TimeDomainKHR; + + //=== VK_NV_display_stereo === + + // wrapper class for enum VkDisplaySurfaceStereoTypeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplaySurfaceStereoTypeNV.html + enum class DisplaySurfaceStereoTypeNV + { + eNone = VK_DISPLAY_SURFACE_STEREO_TYPE_NONE_NV, + eOnboardDin = VK_DISPLAY_SURFACE_STEREO_TYPE_ONBOARD_DIN_NV, + eHdmi3D = VK_DISPLAY_SURFACE_STEREO_TYPE_HDMI_3D_NV, + eInbandDisplayport = VK_DISPLAY_SURFACE_STEREO_TYPE_INBAND_DISPLAYPORT_NV + }; + + //=== VK_KHR_video_encode_intra_refresh === + + // wrapper class for enum VkVideoEncodeIntraRefreshModeFlagBitsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeIntraRefreshModeFlagBitsKHR.html + enum class VideoEncodeIntraRefreshModeFlagBitsKHR : VkVideoEncodeIntraRefreshModeFlagsKHR + { + eNone = VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR, + ePerPicturePartition = VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, + eBlockBased = VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_BASED_BIT_KHR, + eBlockRowBased = VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_ROW_BASED_BIT_KHR, + eBlockColumnBased = VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_BLOCK_COLUMN_BASED_BIT_KHR + }; + + // wrapper using for bitmask VkVideoEncodeIntraRefreshModeFlagsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeIntraRefreshModeFlagsKHR.html + using VideoEncodeIntraRefreshModeFlagsKHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkVideoEncodeIntraRefreshModeFlagBitsKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR VideoEncodeIntraRefreshModeFlagsKHR allFlags = + VideoEncodeIntraRefreshModeFlagBitsKHR::eNone | VideoEncodeIntraRefreshModeFlagBitsKHR::ePerPicturePartition | + VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockBased | VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockRowBased | + VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockColumnBased; + }; + + //=== VK_KHR_maintenance7 === + + // wrapper class for enum VkPhysicalDeviceLayeredApiKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLayeredApiKHR.html + enum class PhysicalDeviceLayeredApiKHR + { + eVulkan = VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR, + eD3D12 = VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR, + eMetal = VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR, + eOpengl = VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR, + eOpengles = VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR + }; + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper class for enum VkClusterAccelerationStructureClusterFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureClusterFlagBitsNV.html + enum class ClusterAccelerationStructureClusterFlagBitsNV : VkClusterAccelerationStructureClusterFlagsNV + { + eAllowDisableOpacityMicromaps = VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_ALLOW_DISABLE_OPACITY_MICROMAPS_NV + }; + + // wrapper using for bitmask VkClusterAccelerationStructureClusterFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureClusterFlagsNV.html + using ClusterAccelerationStructureClusterFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkClusterAccelerationStructureClusterFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ClusterAccelerationStructureClusterFlagsNV allFlags = + ClusterAccelerationStructureClusterFlagBitsNV::eAllowDisableOpacityMicromaps; + }; + + // wrapper class for enum VkClusterAccelerationStructureGeometryFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureGeometryFlagBitsNV.html + enum class ClusterAccelerationStructureGeometryFlagBitsNV : VkClusterAccelerationStructureGeometryFlagsNV + { + eCullDisable = VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_CULL_DISABLE_BIT_NV, + eNoDuplicateAnyhitInvocation = VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_NO_DUPLICATE_ANYHIT_INVOCATION_BIT_NV, + eOpaque = VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_OPAQUE_BIT_NV + }; + + // wrapper using for bitmask VkClusterAccelerationStructureGeometryFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureGeometryFlagsNV.html + using ClusterAccelerationStructureGeometryFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkClusterAccelerationStructureGeometryFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ClusterAccelerationStructureGeometryFlagsNV allFlags = + ClusterAccelerationStructureGeometryFlagBitsNV::eCullDisable | ClusterAccelerationStructureGeometryFlagBitsNV::eNoDuplicateAnyhitInvocation | + ClusterAccelerationStructureGeometryFlagBitsNV::eOpaque; + }; + + // wrapper class for enum VkClusterAccelerationStructureAddressResolutionFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureAddressResolutionFlagBitsNV.html + enum class ClusterAccelerationStructureAddressResolutionFlagBitsNV : VkClusterAccelerationStructureAddressResolutionFlagsNV + { + eNone = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_NONE_NV, + eIndirectedDstImplicitData = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_IMPLICIT_DATA_BIT_NV, + eIndirectedScratchData = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SCRATCH_DATA_BIT_NV, + eIndirectedDstAddressArray = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_ADDRESS_ARRAY_BIT_NV, + eIndirectedDstSizesArray = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_SIZES_ARRAY_BIT_NV, + eIndirectedSrcInfosArray = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_ARRAY_BIT_NV, + eIndirectedSrcInfosCount = VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_COUNT_BIT_NV + }; + + // wrapper using for bitmask VkClusterAccelerationStructureAddressResolutionFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureAddressResolutionFlagsNV.html + using ClusterAccelerationStructureAddressResolutionFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkClusterAccelerationStructureAddressResolutionFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ClusterAccelerationStructureAddressResolutionFlagsNV allFlags = + ClusterAccelerationStructureAddressResolutionFlagBitsNV::eNone | ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstImplicitData | + ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedScratchData | + ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstAddressArray | + ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstSizesArray | + ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedSrcInfosArray | + ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedSrcInfosCount; + }; + + // wrapper class for enum VkClusterAccelerationStructureIndexFormatFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureIndexFormatFlagBitsNV.html + enum class ClusterAccelerationStructureIndexFormatFlagBitsNV : VkClusterAccelerationStructureIndexFormatFlagsNV + { + e8 = VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_8BIT_NV, + e16 = VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_16BIT_NV, + e32 = VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_32BIT_NV + }; + + // wrapper using for bitmask VkClusterAccelerationStructureIndexFormatFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureIndexFormatFlagsNV.html + using ClusterAccelerationStructureIndexFormatFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkClusterAccelerationStructureIndexFormatFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR ClusterAccelerationStructureIndexFormatFlagsNV allFlags = ClusterAccelerationStructureIndexFormatFlagBitsNV::e8 | + ClusterAccelerationStructureIndexFormatFlagBitsNV::e16 | + ClusterAccelerationStructureIndexFormatFlagBitsNV::e32; + }; + + // wrapper class for enum VkClusterAccelerationStructureTypeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureTypeNV.html + enum class ClusterAccelerationStructureTypeNV + { + eClustersBottomLevel = VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_CLUSTERS_BOTTOM_LEVEL_NV, + eTriangleCluster = VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_NV, + eTriangleClusterTemplate = VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_TEMPLATE_NV + }; + + // wrapper class for enum VkClusterAccelerationStructureOpTypeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureOpTypeNV.html + enum class ClusterAccelerationStructureOpTypeNV + { + eMoveObjects = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV, + eBuildClustersBottomLevel = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV, + eBuildTriangleCluster = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV, + eBuildTriangleClusterTemplate = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV, + eInstantiateTriangleCluster = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV, + eGetClusterTemplateIndices = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_GET_CLUSTER_TEMPLATE_INDICES_NV + }; + + // wrapper class for enum VkClusterAccelerationStructureOpModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureOpModeNV.html + enum class ClusterAccelerationStructureOpModeNV + { + eImplicitDestinations = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV, + eExplicitDestinations = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV, + eComputeSizes = VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_COMPUTE_SIZES_NV + }; + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper class for enum VkPartitionedAccelerationStructureOpTypeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureOpTypeNV.html + enum class PartitionedAccelerationStructureOpTypeNV + { + eWriteInstance = VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_INSTANCE_NV, + eUpdateInstance = VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_UPDATE_INSTANCE_NV, + eWritePartitionTranslation = VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_PARTITION_TRANSLATION_NV + }; + + // wrapper class for enum VkPartitionedAccelerationStructureInstanceFlagBitsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureInstanceFlagBitsNV.html + enum class PartitionedAccelerationStructureInstanceFlagBitsNV : VkPartitionedAccelerationStructureInstanceFlagsNV + { + eFlagTriangleFacingCullDisable = VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FACING_CULL_DISABLE_BIT_NV, + eFlagTriangleFlipFacing = VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FLIP_FACING_BIT_NV, + eFlagForceOpaque = VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_OPAQUE_BIT_NV, + eFlagForceNoOpaque = VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_NO_OPAQUE_BIT_NV, + eFlagEnableExplicitBoundingBox = VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV + }; + + // wrapper using for bitmask VkPartitionedAccelerationStructureInstanceFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureInstanceFlagsNV.html + using PartitionedAccelerationStructureInstanceFlagsNV = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkPartitionedAccelerationStructureInstanceFlagBitsNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR PartitionedAccelerationStructureInstanceFlagsNV allFlags = + PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagTriangleFacingCullDisable | + PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagTriangleFlipFacing | PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagForceOpaque | + PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagForceNoOpaque | + PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagEnableExplicitBoundingBox; + }; + + //=== VK_EXT_device_generated_commands === + + // wrapper class for enum VkIndirectCommandsTokenTypeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsTokenTypeEXT.html + enum class IndirectCommandsTokenTypeEXT + { + eExecutionSet = VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT, + ePushConstant = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, + eSequenceIndex = VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, + eIndexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT, + eVertexBuffer = VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT, + eDrawIndexed = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT, + eDraw = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT, + eDrawIndexedCount = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT, + eDrawCount = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT, + eDispatch = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT, + eDrawMeshTasksNV = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT, + eDrawMeshTasksCountNV = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT, + eDrawMeshTasks = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT, + eDrawMeshTasksCount = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT, + eTraceRays2 = VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT + }; + + // wrapper class for enum VkIndirectExecutionSetInfoTypeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetInfoTypeEXT.html + enum class IndirectExecutionSetInfoTypeEXT + { + ePipelines = VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT, + eShaderObjects = VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT + }; + + // wrapper class for enum VkIndirectCommandsLayoutUsageFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutUsageFlagBitsEXT.html + enum class IndirectCommandsLayoutUsageFlagBitsEXT : VkIndirectCommandsLayoutUsageFlagsEXT + { + eExplicitPreprocess = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT, + eUnorderedSequences = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT + }; + + // wrapper using for bitmask VkIndirectCommandsLayoutUsageFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutUsageFlagsEXT.html + using IndirectCommandsLayoutUsageFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkIndirectCommandsLayoutUsageFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR IndirectCommandsLayoutUsageFlagsEXT allFlags = + IndirectCommandsLayoutUsageFlagBitsEXT::eExplicitPreprocess | IndirectCommandsLayoutUsageFlagBitsEXT::eUnorderedSequences; + }; + + // wrapper class for enum VkIndirectCommandsInputModeFlagBitsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsInputModeFlagBitsEXT.html + enum class IndirectCommandsInputModeFlagBitsEXT : VkIndirectCommandsInputModeFlagsEXT + { + eVulkanIndexBuffer = VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT, + eDxgiIndexBuffer = VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT + }; + + // wrapper using for bitmask VkIndirectCommandsInputModeFlagsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsInputModeFlagsEXT.html + using IndirectCommandsInputModeFlagsEXT = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkIndirectCommandsInputModeFlagBitsEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR IndirectCommandsInputModeFlagsEXT allFlags = + IndirectCommandsInputModeFlagBitsEXT::eVulkanIndexBuffer | IndirectCommandsInputModeFlagBitsEXT::eDxgiIndexBuffer; + }; + + //=== VK_KHR_maintenance8 === + + // wrapper class for enum VkAccessFlagBits3KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccessFlagBits3KHR.html + enum class AccessFlagBits3KHR : VkAccessFlags3KHR + { + eNone = VK_ACCESS_3_NONE_KHR + }; + + // wrapper using for bitmask VkAccessFlags3KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccessFlags3KHR.html + using AccessFlags3KHR = Flags; + + template <> + struct FlagTraits + { + using WrappedType = VkAccessFlagBits3KHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR AccessFlags3KHR allFlags = AccessFlagBits3KHR::eNone; + }; + + //=== VK_EXT_depth_clamp_control === + + // wrapper class for enum VkDepthClampModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDepthClampModeEXT.html + enum class DepthClampModeEXT + { + eViewportRange = VK_DEPTH_CLAMP_MODE_VIEWPORT_RANGE_EXT, + eUserDefinedRange = VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT + }; + + //=== VK_KHR_maintenance9 === + + // wrapper class for enum VkDefaultVertexAttributeValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDefaultVertexAttributeValueKHR.html + enum class DefaultVertexAttributeValueKHR + { + eZeroZeroZeroZero = VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR, + eZeroZeroZeroOne = VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR + }; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + enum class SurfaceCreateFlagBitsOHOS : VkSurfaceCreateFlagsOHOS + { + }; + + // wrapper using for bitmask VkSurfaceCreateFlagsOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCreateFlagsOHOS.html + using SurfaceCreateFlagsOHOS = Flags; + + template <> + struct FlagTraits + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool isBitmask = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR SurfaceCreateFlagsOHOS allFlags = {}; + }; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=========================================================== + //=== Mapping from ObjectType to DebugReportObjectTypeEXT === + //=========================================================== + + VULKAN_HPP_INLINE DebugReportObjectTypeEXT debugReportObjectType( ObjectType objectType ) + { + switch ( objectType ) + { + //=== VK_VERSION_1_0 === + case ObjectType::eInstance : return DebugReportObjectTypeEXT::eInstance; + case ObjectType::ePhysicalDevice : return DebugReportObjectTypeEXT::ePhysicalDevice; + case ObjectType::eDevice : return DebugReportObjectTypeEXT::eDevice; + case ObjectType::eQueue : return DebugReportObjectTypeEXT::eQueue; + case ObjectType::eDeviceMemory : return DebugReportObjectTypeEXT::eDeviceMemory; + case ObjectType::eFence : return DebugReportObjectTypeEXT::eFence; + case ObjectType::eSemaphore : return DebugReportObjectTypeEXT::eSemaphore; + case ObjectType::eEvent : return DebugReportObjectTypeEXT::eEvent; + case ObjectType::eQueryPool : return DebugReportObjectTypeEXT::eQueryPool; + case ObjectType::eBuffer : return DebugReportObjectTypeEXT::eBuffer; + case ObjectType::eBufferView : return DebugReportObjectTypeEXT::eBufferView; + case ObjectType::eImage : return DebugReportObjectTypeEXT::eImage; + case ObjectType::eImageView : return DebugReportObjectTypeEXT::eImageView; + case ObjectType::eShaderModule : return DebugReportObjectTypeEXT::eShaderModule; + case ObjectType::ePipelineCache : return DebugReportObjectTypeEXT::ePipelineCache; + case ObjectType::ePipeline : return DebugReportObjectTypeEXT::ePipeline; + case ObjectType::ePipelineLayout : return DebugReportObjectTypeEXT::ePipelineLayout; + case ObjectType::eSampler : return DebugReportObjectTypeEXT::eSampler; + case ObjectType::eDescriptorPool : return DebugReportObjectTypeEXT::eDescriptorPool; + case ObjectType::eDescriptorSet : return DebugReportObjectTypeEXT::eDescriptorSet; + case ObjectType::eDescriptorSetLayout: return DebugReportObjectTypeEXT::eDescriptorSetLayout; + case ObjectType::eFramebuffer : return DebugReportObjectTypeEXT::eFramebuffer; + case ObjectType::eRenderPass : return DebugReportObjectTypeEXT::eRenderPass; + case ObjectType::eCommandPool : return DebugReportObjectTypeEXT::eCommandPool; + case ObjectType::eCommandBuffer: + return DebugReportObjectTypeEXT::eCommandBuffer; + + //=== VK_VERSION_1_1 === + case ObjectType::eSamplerYcbcrConversion: return DebugReportObjectTypeEXT::eSamplerYcbcrConversion; + case ObjectType::eDescriptorUpdateTemplate: + return DebugReportObjectTypeEXT::eDescriptorUpdateTemplate; + + //=== VK_VERSION_1_3 === + case ObjectType::ePrivateDataSlot: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_KHR_surface === + case ObjectType::eSurfaceKHR: + return DebugReportObjectTypeEXT::eSurfaceKHR; + + //=== VK_KHR_swapchain === + case ObjectType::eSwapchainKHR: + return DebugReportObjectTypeEXT::eSwapchainKHR; + + //=== VK_KHR_display === + case ObjectType::eDisplayKHR: return DebugReportObjectTypeEXT::eDisplayKHR; + case ObjectType::eDisplayModeKHR: + return DebugReportObjectTypeEXT::eDisplayModeKHR; + + //=== VK_EXT_debug_report === + case ObjectType::eDebugReportCallbackEXT: + return DebugReportObjectTypeEXT::eDebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + case ObjectType::eVideoSessionKHR: return DebugReportObjectTypeEXT::eUnknown; + case ObjectType::eVideoSessionParametersKHR: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_NVX_binary_import === + case ObjectType::eCuModuleNVX: return DebugReportObjectTypeEXT::eCuModuleNVX; + case ObjectType::eCuFunctionNVX: + return DebugReportObjectTypeEXT::eCuFunctionNVX; + + //=== VK_EXT_debug_utils === + case ObjectType::eDebugUtilsMessengerEXT: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_KHR_acceleration_structure === + case ObjectType::eAccelerationStructureKHR: + return DebugReportObjectTypeEXT::eAccelerationStructureKHR; + + //=== VK_EXT_validation_cache === + case ObjectType::eValidationCacheEXT: + return DebugReportObjectTypeEXT::eValidationCacheEXT; + + //=== VK_NV_ray_tracing === + case ObjectType::eAccelerationStructureNV: + return DebugReportObjectTypeEXT::eAccelerationStructureNV; + + //=== VK_INTEL_performance_query === + case ObjectType::ePerformanceConfigurationINTEL: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_KHR_deferred_host_operations === + case ObjectType::eDeferredOperationKHR: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_NV_device_generated_commands === + case ObjectType::eIndirectCommandsLayoutNV: return DebugReportObjectTypeEXT::eUnknown; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + case ObjectType::eCudaModuleNV : return DebugReportObjectTypeEXT::eCudaModuleNV; + case ObjectType::eCudaFunctionNV: return DebugReportObjectTypeEXT::eCudaFunctionNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + case ObjectType::eBufferCollectionFUCHSIA: return DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + case ObjectType::eMicromapEXT: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_ARM_tensors === + case ObjectType::eTensorARM: return DebugReportObjectTypeEXT::eUnknown; + case ObjectType::eTensorViewARM: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_NV_optical_flow === + case ObjectType::eOpticalFlowSessionNV: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_EXT_shader_object === + case ObjectType::eShaderEXT: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_KHR_pipeline_binary === + case ObjectType::ePipelineBinaryKHR: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_ARM_data_graph === + case ObjectType::eDataGraphPipelineSessionARM: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_NV_external_compute_queue === + case ObjectType::eExternalComputeQueueNV: + return DebugReportObjectTypeEXT::eUnknown; + + //=== VK_EXT_device_generated_commands === + case ObjectType::eIndirectCommandsLayoutEXT: return DebugReportObjectTypeEXT::eUnknown; + case ObjectType::eIndirectExecutionSetEXT : return DebugReportObjectTypeEXT::eUnknown; + + default: VULKAN_HPP_ASSERT( false && "unknown ObjectType" ); return DebugReportObjectTypeEXT::eUnknown; + } + } + +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_extension_inspection.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_extension_inspection.hpp new file mode 100644 index 0000000000..a7d08da1ec --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_extension_inspection.hpp @@ -0,0 +1,3768 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_EXTENSION_INSPECTION_HPP +#define VULKAN_EXTENSION_INSPECTION_HPP + +#if defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) +import VULKAN_HPP_STD_MODULE; +#else +# include +# include +# include +# include +# include +#endif + +namespace VULKAN_HPP_NAMESPACE +{ + //====================================== + //=== Extension inspection functions === + //====================================== + + std::set const & getDeviceExtensions(); + std::set const & getInstanceExtensions(); + std::map const & getDeprecatedExtensions(); + std::map>> const & getExtensionDepends( std::string const & extension ); + std::pair> const &> getExtensionDepends( std::string const & version, std::string const & extension ); + std::map const & getObsoletedExtensions(); + std::map const & getPromotedExtensions(); + VULKAN_HPP_CONSTEXPR_20 std::string getExtensionDeprecatedBy( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 std::string getExtensionObsoletedBy( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 std::string getExtensionPromotedTo( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 bool isDeprecatedExtension( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 bool isDeviceExtension( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 bool isInstanceExtension( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 bool isObsoletedExtension( std::string const & extension ); + VULKAN_HPP_CONSTEXPR_20 bool isPromotedExtension( std::string const & extension ); + + //===================================================== + //=== Extension inspection function implementations === + //===================================================== + + VULKAN_HPP_INLINE std::map const & getDeprecatedExtensions() + { + static const std::map deprecatedExtensions = { { "VK_EXT_debug_report", "VK_EXT_debug_utils" }, + { "VK_NV_glsl_shader", "" }, + { "VK_NV_dedicated_allocation", "VK_KHR_dedicated_allocation" }, + { "VK_AMD_gpu_shader_half_float", "VK_KHR_shader_float16_int8" }, + { "VK_IMG_format_pvrtc", "" }, + { "VK_NV_external_memory_capabilities", "VK_KHR_external_memory_capabilities" }, + { "VK_NV_external_memory", "VK_KHR_external_memory" }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_NV_external_memory_win32", "VK_KHR_external_memory_win32" }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_EXT_validation_flags", "VK_EXT_layer_settings" }, + { "VK_EXT_shader_subgroup_ballot", "VK_VERSION_1_2" }, + { "VK_EXT_shader_subgroup_vote", "VK_VERSION_1_1" }, +#if defined( VK_USE_PLATFORM_IOS_MVK ) + { "VK_MVK_ios_surface", "VK_EXT_metal_surface" }, +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + { "VK_MVK_macos_surface", "VK_EXT_metal_surface" }, +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + { "VK_AMD_gpu_shader_int16", "VK_KHR_shader_float16_int8" }, + { "VK_NV_ray_tracing", "VK_KHR_ray_tracing_pipeline" }, + { "VK_EXT_buffer_device_address", "VK_KHR_buffer_device_address" }, + { "VK_EXT_validation_features", "VK_EXT_layer_settings" }, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + { "VK_NV_displacement_micromap", "VK_NV_cluster_acceleration_structure" } +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + }; + return deprecatedExtensions; + } + + VULKAN_HPP_INLINE std::set const & getDeviceExtensions() + { + static const std::set deviceExtensions = { "VK_KHR_swapchain", + "VK_KHR_display_swapchain", + "VK_NV_glsl_shader", + "VK_EXT_depth_range_unrestricted", + "VK_KHR_sampler_mirror_clamp_to_edge", + "VK_IMG_filter_cubic", + "VK_AMD_rasterization_order", + "VK_AMD_shader_trinary_minmax", + "VK_AMD_shader_explicit_vertex_parameter", + "VK_EXT_debug_marker", + "VK_KHR_video_queue", + "VK_KHR_video_decode_queue", + "VK_AMD_gcn_shader", + "VK_NV_dedicated_allocation", + "VK_EXT_transform_feedback", + "VK_NVX_binary_import", + "VK_NVX_image_view_handle", + "VK_AMD_draw_indirect_count", + "VK_AMD_negative_viewport_height", + "VK_AMD_gpu_shader_half_float", + "VK_AMD_shader_ballot", + "VK_KHR_video_encode_h264", + "VK_KHR_video_encode_h265", + "VK_KHR_video_decode_h264", + "VK_AMD_texture_gather_bias_lod", + "VK_AMD_shader_info", + "VK_KHR_dynamic_rendering", + "VK_AMD_shader_image_load_store_lod", + "VK_NV_corner_sampled_image", + "VK_KHR_multiview", + "VK_IMG_format_pvrtc", + "VK_NV_external_memory", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_NV_external_memory_win32", + "VK_NV_win32_keyed_mutex", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_KHR_device_group", + "VK_KHR_shader_draw_parameters", + "VK_EXT_shader_subgroup_ballot", + "VK_EXT_shader_subgroup_vote", + "VK_EXT_texture_compression_astc_hdr", + "VK_EXT_astc_decode_mode", + "VK_EXT_pipeline_robustness", + "VK_KHR_maintenance1", + "VK_KHR_external_memory", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_KHR_external_memory_win32", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_KHR_external_memory_fd", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_KHR_win32_keyed_mutex", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_KHR_external_semaphore", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_KHR_external_semaphore_win32", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_KHR_external_semaphore_fd", + "VK_KHR_push_descriptor", + "VK_EXT_conditional_rendering", + "VK_KHR_shader_float16_int8", + "VK_KHR_16bit_storage", + "VK_KHR_incremental_present", + "VK_KHR_descriptor_update_template", + "VK_NV_clip_space_w_scaling", + "VK_EXT_display_control", + "VK_GOOGLE_display_timing", + "VK_NV_sample_mask_override_coverage", + "VK_NV_geometry_shader_passthrough", + "VK_NV_viewport_array2", + "VK_NVX_multiview_per_view_attributes", + "VK_NV_viewport_swizzle", + "VK_EXT_discard_rectangles", + "VK_EXT_conservative_rasterization", + "VK_EXT_depth_clip_enable", + "VK_EXT_hdr_metadata", + "VK_KHR_imageless_framebuffer", + "VK_KHR_create_renderpass2", + "VK_IMG_relaxed_line_rasterization", + "VK_KHR_shared_presentable_image", + "VK_KHR_external_fence", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_KHR_external_fence_win32", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_KHR_external_fence_fd", + "VK_KHR_performance_query", + "VK_KHR_maintenance2", + "VK_KHR_variable_pointers", + "VK_EXT_external_memory_dma_buf", + "VK_EXT_queue_family_foreign", + "VK_KHR_dedicated_allocation", +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + "VK_ANDROID_external_memory_android_hardware_buffer", +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + "VK_EXT_sampler_filter_minmax", + "VK_KHR_storage_buffer_storage_class", + "VK_AMD_gpu_shader_int16", +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + "VK_AMDX_shader_enqueue", +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + "VK_AMD_mixed_attachment_samples", + "VK_AMD_shader_fragment_mask", + "VK_EXT_inline_uniform_block", + "VK_EXT_shader_stencil_export", + "VK_KHR_shader_bfloat16", + "VK_EXT_sample_locations", + "VK_KHR_relaxed_block_layout", + "VK_KHR_get_memory_requirements2", + "VK_KHR_image_format_list", + "VK_EXT_blend_operation_advanced", + "VK_NV_fragment_coverage_to_color", + "VK_KHR_acceleration_structure", + "VK_KHR_ray_tracing_pipeline", + "VK_KHR_ray_query", + "VK_NV_framebuffer_mixed_samples", + "VK_NV_fill_rectangle", + "VK_NV_shader_sm_builtins", + "VK_EXT_post_depth_coverage", + "VK_KHR_sampler_ycbcr_conversion", + "VK_KHR_bind_memory2", + "VK_EXT_image_drm_format_modifier", + "VK_EXT_validation_cache", + "VK_EXT_descriptor_indexing", + "VK_EXT_shader_viewport_index_layer", +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + "VK_KHR_portability_subset", +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + "VK_NV_shading_rate_image", + "VK_NV_ray_tracing", + "VK_NV_representative_fragment_test", + "VK_KHR_maintenance3", + "VK_KHR_draw_indirect_count", + "VK_EXT_filter_cubic", + "VK_QCOM_render_pass_shader_resolve", + "VK_EXT_global_priority", + "VK_KHR_shader_subgroup_extended_types", + "VK_KHR_8bit_storage", + "VK_EXT_external_memory_host", + "VK_AMD_buffer_marker", + "VK_KHR_shader_atomic_int64", + "VK_KHR_shader_clock", + "VK_AMD_pipeline_compiler_control", + "VK_EXT_calibrated_timestamps", + "VK_AMD_shader_core_properties", + "VK_KHR_video_decode_h265", + "VK_KHR_global_priority", + "VK_AMD_memory_overallocation_behavior", + "VK_EXT_vertex_attribute_divisor", +#if defined( VK_USE_PLATFORM_GGP ) + "VK_GGP_frame_token", +#endif /*VK_USE_PLATFORM_GGP*/ + "VK_EXT_pipeline_creation_feedback", + "VK_KHR_driver_properties", + "VK_KHR_shader_float_controls", + "VK_NV_shader_subgroup_partitioned", + "VK_KHR_depth_stencil_resolve", + "VK_KHR_swapchain_mutable_format", + "VK_NV_compute_shader_derivatives", + "VK_NV_mesh_shader", + "VK_NV_fragment_shader_barycentric", + "VK_NV_shader_image_footprint", + "VK_NV_scissor_exclusive", + "VK_NV_device_diagnostic_checkpoints", + "VK_KHR_timeline_semaphore", + "VK_INTEL_shader_integer_functions2", + "VK_INTEL_performance_query", + "VK_KHR_vulkan_memory_model", + "VK_EXT_pci_bus_info", + "VK_AMD_display_native_hdr", + "VK_KHR_shader_terminate_invocation", + "VK_EXT_fragment_density_map", + "VK_EXT_scalar_block_layout", + "VK_GOOGLE_hlsl_functionality1", + "VK_GOOGLE_decorate_string", + "VK_EXT_subgroup_size_control", + "VK_KHR_fragment_shading_rate", + "VK_AMD_shader_core_properties2", + "VK_AMD_device_coherent_memory", + "VK_KHR_dynamic_rendering_local_read", + "VK_EXT_shader_image_atomic_int64", + "VK_KHR_shader_quad_control", + "VK_KHR_spirv_1_4", + "VK_EXT_memory_budget", + "VK_EXT_memory_priority", + "VK_NV_dedicated_allocation_image_aliasing", + "VK_KHR_separate_depth_stencil_layouts", + "VK_EXT_buffer_device_address", + "VK_EXT_tooling_info", + "VK_EXT_separate_stencil_usage", + "VK_KHR_present_wait", + "VK_NV_cooperative_matrix", + "VK_NV_coverage_reduction_mode", + "VK_EXT_fragment_shader_interlock", + "VK_EXT_ycbcr_image_arrays", + "VK_KHR_uniform_buffer_standard_layout", + "VK_EXT_provoking_vertex", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_EXT_full_screen_exclusive", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_KHR_buffer_device_address", + "VK_EXT_line_rasterization", + "VK_EXT_shader_atomic_float", + "VK_EXT_host_query_reset", + "VK_EXT_index_type_uint8", + "VK_EXT_extended_dynamic_state", + "VK_KHR_deferred_host_operations", + "VK_KHR_pipeline_executable_properties", + "VK_EXT_host_image_copy", + "VK_KHR_map_memory2", + "VK_EXT_map_memory_placed", + "VK_EXT_shader_atomic_float2", + "VK_EXT_swapchain_maintenance1", + "VK_EXT_shader_demote_to_helper_invocation", + "VK_NV_device_generated_commands", + "VK_NV_inherited_viewport_scissor", + "VK_KHR_shader_integer_dot_product", + "VK_EXT_texel_buffer_alignment", + "VK_QCOM_render_pass_transform", + "VK_EXT_depth_bias_control", + "VK_EXT_device_memory_report", + "VK_EXT_robustness2", + "VK_EXT_custom_border_color", + "VK_GOOGLE_user_type", + "VK_KHR_pipeline_library", + "VK_NV_present_barrier", + "VK_KHR_shader_non_semantic_info", + "VK_KHR_present_id", + "VK_EXT_private_data", + "VK_EXT_pipeline_creation_cache_control", + "VK_KHR_video_encode_queue", + "VK_NV_device_diagnostics_config", + "VK_QCOM_render_pass_store_ops", +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + "VK_NV_cuda_kernel_launch", +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + "VK_QCOM_tile_shading", + "VK_NV_low_latency", +#if defined( VK_USE_PLATFORM_METAL_EXT ) + "VK_EXT_metal_objects", +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + "VK_KHR_synchronization2", + "VK_EXT_descriptor_buffer", + "VK_EXT_graphics_pipeline_library", + "VK_AMD_shader_early_and_late_fragment_tests", + "VK_KHR_fragment_shader_barycentric", + "VK_KHR_shader_subgroup_uniform_control_flow", + "VK_KHR_zero_initialize_workgroup_memory", + "VK_NV_fragment_shading_rate_enums", + "VK_NV_ray_tracing_motion_blur", + "VK_EXT_mesh_shader", + "VK_EXT_ycbcr_2plane_444_formats", + "VK_EXT_fragment_density_map2", + "VK_QCOM_rotated_copy_commands", + "VK_EXT_image_robustness", + "VK_KHR_workgroup_memory_explicit_layout", + "VK_KHR_copy_commands2", + "VK_EXT_image_compression_control", + "VK_EXT_attachment_feedback_loop_layout", + "VK_EXT_4444_formats", + "VK_EXT_device_fault", + "VK_ARM_rasterization_order_attachment_access", + "VK_EXT_rgba10x6_formats", +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_NV_acquire_winrt_display", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_VALVE_mutable_descriptor_type", + "VK_EXT_vertex_input_dynamic_state", + "VK_EXT_physical_device_drm", + "VK_EXT_device_address_binding_report", + "VK_EXT_depth_clip_control", + "VK_EXT_primitive_topology_list_restart", + "VK_KHR_format_feature_flags2", + "VK_EXT_present_mode_fifo_latest_ready", +#if defined( VK_USE_PLATFORM_FUCHSIA ) + "VK_FUCHSIA_external_memory", + "VK_FUCHSIA_external_semaphore", + "VK_FUCHSIA_buffer_collection", +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + "VK_HUAWEI_subpass_shading", + "VK_HUAWEI_invocation_mask", + "VK_NV_external_memory_rdma", + "VK_EXT_pipeline_properties", + "VK_EXT_frame_boundary", + "VK_EXT_multisampled_render_to_single_sampled", + "VK_EXT_extended_dynamic_state2", + "VK_EXT_color_write_enable", + "VK_EXT_primitives_generated_query", + "VK_KHR_ray_tracing_maintenance1", + "VK_EXT_global_priority_query", + "VK_EXT_image_view_min_lod", + "VK_EXT_multi_draw", + "VK_EXT_image_2d_view_of_3d", + "VK_EXT_shader_tile_image", + "VK_EXT_opacity_micromap", +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + "VK_NV_displacement_micromap", +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + "VK_EXT_load_store_op_none", + "VK_HUAWEI_cluster_culling_shader", + "VK_EXT_border_color_swizzle", + "VK_EXT_pageable_device_local_memory", + "VK_KHR_maintenance4", + "VK_ARM_shader_core_properties", + "VK_KHR_shader_subgroup_rotate", + "VK_ARM_scheduling_controls", + "VK_EXT_image_sliced_view_of_3d", + "VK_VALVE_descriptor_set_host_mapping", + "VK_EXT_depth_clamp_zero_one", + "VK_EXT_non_seamless_cube_map", + "VK_ARM_render_pass_striped", + "VK_QCOM_fragment_density_map_offset", + "VK_NV_copy_memory_indirect", + "VK_NV_memory_decompression", + "VK_NV_device_generated_commands_compute", + "VK_NV_ray_tracing_linear_swept_spheres", + "VK_NV_linear_color_attachment", + "VK_KHR_shader_maximal_reconvergence", + "VK_EXT_image_compression_control_swapchain", + "VK_QCOM_image_processing", + "VK_EXT_nested_command_buffer", + "VK_EXT_external_memory_acquire_unmodified", + "VK_EXT_extended_dynamic_state3", + "VK_EXT_subpass_merge_feedback", + "VK_ARM_tensors", + "VK_EXT_shader_module_identifier", + "VK_EXT_rasterization_order_attachment_access", + "VK_NV_optical_flow", + "VK_EXT_legacy_dithering", + "VK_EXT_pipeline_protected_access", +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + "VK_ANDROID_external_format_resolve", +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + "VK_KHR_maintenance5", + "VK_AMD_anti_lag", + "VK_KHR_present_id2", + "VK_KHR_present_wait2", + "VK_KHR_ray_tracing_position_fetch", + "VK_EXT_shader_object", + "VK_KHR_pipeline_binary", + "VK_QCOM_tile_properties", + "VK_SEC_amigo_profiling", + "VK_KHR_swapchain_maintenance1", + "VK_QCOM_multiview_per_view_viewports", + "VK_NV_ray_tracing_invocation_reorder", + "VK_NV_cooperative_vector", + "VK_NV_extended_sparse_address_space", + "VK_EXT_mutable_descriptor_type", + "VK_EXT_legacy_vertex_attributes", + "VK_ARM_shader_core_builtins", + "VK_EXT_pipeline_library_group_handles", + "VK_EXT_dynamic_rendering_unused_attachments", + "VK_NV_low_latency2", + "VK_KHR_cooperative_matrix", + "VK_ARM_data_graph", + "VK_QCOM_multiview_per_view_render_areas", + "VK_KHR_compute_shader_derivatives", + "VK_KHR_video_decode_av1", + "VK_KHR_video_encode_av1", + "VK_KHR_video_decode_vp9", + "VK_KHR_video_maintenance1", + "VK_NV_per_stage_descriptor_set", + "VK_QCOM_image_processing2", + "VK_QCOM_filter_cubic_weights", + "VK_QCOM_ycbcr_degamma", + "VK_QCOM_filter_cubic_clamp", + "VK_EXT_attachment_feedback_loop_dynamic_state", + "VK_KHR_vertex_attribute_divisor", + "VK_KHR_load_store_op_none", + "VK_KHR_unified_image_layouts", + "VK_KHR_shader_float_controls2", +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + "VK_QNX_external_memory_screen_buffer", +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + "VK_MSFT_layered_driver", + "VK_KHR_index_type_uint8", + "VK_KHR_line_rasterization", + "VK_KHR_calibrated_timestamps", + "VK_KHR_shader_expect_assume", + "VK_KHR_maintenance6", + "VK_NV_descriptor_pool_overallocation", + "VK_QCOM_tile_memory_heap", + "VK_KHR_video_encode_intra_refresh", + "VK_KHR_video_encode_quantization_map", + "VK_NV_raw_access_chains", + "VK_NV_external_compute_queue", + "VK_KHR_shader_relaxed_extended_instruction", + "VK_NV_command_buffer_inheritance", + "VK_KHR_maintenance7", + "VK_NV_shader_atomic_float16_vector", + "VK_EXT_shader_replicated_composites", + "VK_EXT_shader_float8", + "VK_NV_ray_tracing_validation", + "VK_NV_cluster_acceleration_structure", + "VK_NV_partitioned_acceleration_structure", + "VK_EXT_device_generated_commands", + "VK_KHR_maintenance8", + "VK_MESA_image_alignment_control", + "VK_EXT_depth_clamp_control", + "VK_KHR_maintenance9", + "VK_KHR_video_maintenance2", + "VK_HUAWEI_hdr_vivid", + "VK_NV_cooperative_matrix2", + "VK_ARM_pipeline_opacity_micromap", +#if defined( VK_USE_PLATFORM_METAL_EXT ) + "VK_EXT_external_memory_metal", +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + "VK_KHR_depth_clamp_zero_one", + "VK_EXT_vertex_attribute_robustness", + "VK_ARM_format_pack", + "VK_VALVE_fragment_density_map_layered", + "VK_KHR_robustness2", +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + "VK_NV_present_metering", +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + "VK_EXT_fragment_density_map_offset", + "VK_EXT_zero_initialize_device_memory", + "VK_KHR_present_mode_fifo_latest_ready", + "VK_SEC_pipeline_cache_incremental_mode" }; + return deviceExtensions; + } + + VULKAN_HPP_INLINE std::set const & getInstanceExtensions() + { + static const std::set instanceExtensions = { "VK_KHR_surface", + "VK_KHR_display", +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + "VK_KHR_xlib_surface", +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ +#if defined( VK_USE_PLATFORM_XCB_KHR ) + "VK_KHR_xcb_surface", +#endif /*VK_USE_PLATFORM_XCB_KHR*/ +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + "VK_KHR_wayland_surface", +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + "VK_KHR_android_surface", +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + "VK_KHR_win32_surface", +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + "VK_EXT_debug_report", +#if defined( VK_USE_PLATFORM_GGP ) + "VK_GGP_stream_descriptor_surface", +#endif /*VK_USE_PLATFORM_GGP*/ + "VK_NV_external_memory_capabilities", + "VK_KHR_get_physical_device_properties2", + "VK_EXT_validation_flags", +#if defined( VK_USE_PLATFORM_VI_NN ) + "VK_NN_vi_surface", +#endif /*VK_USE_PLATFORM_VI_NN*/ + "VK_KHR_device_group_creation", + "VK_KHR_external_memory_capabilities", + "VK_KHR_external_semaphore_capabilities", + "VK_EXT_direct_mode_display", +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + "VK_EXT_acquire_xlib_display", +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + "VK_EXT_display_surface_counter", + "VK_EXT_swapchain_colorspace", + "VK_KHR_external_fence_capabilities", + "VK_KHR_get_surface_capabilities2", + "VK_KHR_get_display_properties2", +#if defined( VK_USE_PLATFORM_IOS_MVK ) + "VK_MVK_ios_surface", +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + "VK_MVK_macos_surface", +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + "VK_EXT_debug_utils", +#if defined( VK_USE_PLATFORM_FUCHSIA ) + "VK_FUCHSIA_imagepipe_surface", +#endif /*VK_USE_PLATFORM_FUCHSIA*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + "VK_EXT_metal_surface", +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + "VK_KHR_surface_protected_capabilities", + "VK_EXT_validation_features", + "VK_EXT_headless_surface", + "VK_EXT_surface_maintenance1", + "VK_EXT_acquire_drm_display", +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + "VK_EXT_directfb_surface", +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + "VK_QNX_screen_surface", +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + "VK_KHR_portability_enumeration", + "VK_GOOGLE_surfaceless_query", + "VK_LUNARG_direct_driver_loading", + "VK_KHR_surface_maintenance1", + "VK_EXT_layer_settings", + "VK_NV_display_stereo", +#if defined( VK_USE_PLATFORM_OHOS ) + "VK_OHOS_surface" +#endif /*VK_USE_PLATFORM_OHOS*/ + }; + return instanceExtensions; + } + + VULKAN_HPP_INLINE std::map>> const & getExtensionDepends( std::string const & extension ) + { + static const std::map>> noDependencies; + static const std::map>>> dependencies = { + { "VK_KHR_swapchain", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, + { "VK_KHR_display", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, + { "VK_KHR_display_swapchain", + { { "VK_VERSION_1_0", + { { + "VK_KHR_display", + "VK_KHR_swapchain", + } } } } }, +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + { "VK_KHR_xlib_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ +#if defined( VK_USE_PLATFORM_XCB_KHR ) + { "VK_KHR_xcb_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_XCB_KHR*/ +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + { "VK_KHR_wayland_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + { "VK_KHR_android_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_KHR_win32_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_EXT_debug_marker", + { { "VK_VERSION_1_0", + { { + "VK_EXT_debug_report", + } } } } }, + { "VK_KHR_video_queue", + { { "VK_VERSION_1_1", + { { + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_KHR_video_decode_queue", + { { "VK_VERSION_1_0", + { { + "VK_KHR_synchronization2", + "VK_KHR_video_queue", + } } }, + { "VK_VERSION_1_3", + { { + "VK_KHR_video_queue", + } } } } }, + { "VK_EXT_transform_feedback", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_video_encode_h264", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_encode_queue", + } } } } }, + { "VK_KHR_video_encode_h265", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_encode_queue", + } } } } }, + { "VK_KHR_video_decode_h264", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_decode_queue", + } } } } }, + { "VK_AMD_texture_gather_bias_lod", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_dynamic_rendering", + { { "VK_VERSION_1_0", + { { + "VK_KHR_depth_stencil_resolve", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_depth_stencil_resolve", + } } }, + { "VK_VERSION_1_2", { {} } } } }, +#if defined( VK_USE_PLATFORM_GGP ) + { "VK_GGP_stream_descriptor_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_GGP*/ + { "VK_NV_corner_sampled_image", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_multiview", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_external_memory", + { { "VK_VERSION_1_0", + { { + "VK_NV_external_memory_capabilities", + } } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_NV_external_memory_win32", + { { "VK_VERSION_1_0", + { { + "VK_NV_external_memory", + } } } } }, + { "VK_NV_win32_keyed_mutex", + { { "VK_VERSION_1_0", + { { + "VK_NV_external_memory_win32", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_KHR_device_group", + { { "VK_VERSION_1_0", + { { + "VK_KHR_device_group_creation", + } } } } }, +#if defined( VK_USE_PLATFORM_VI_NN ) + { "VK_NN_vi_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_VI_NN*/ + { "VK_EXT_texture_compression_astc_hdr", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_astc_decode_mode", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_pipeline_robustness", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_external_memory_capabilities", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_external_memory", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory_capabilities", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_KHR_external_memory_win32", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_KHR_external_memory_fd", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_KHR_win32_keyed_mutex", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory_win32", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_KHR_external_semaphore_capabilities", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_external_semaphore", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_semaphore_capabilities", + } } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_KHR_external_semaphore_win32", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_semaphore", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_KHR_external_semaphore_fd", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_semaphore", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_push_descriptor", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_conditional_rendering", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_float16_int8", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_16bit_storage", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_storage_buffer_storage_class", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_incremental_present", + { { "VK_VERSION_1_0", + { { + "VK_KHR_swapchain", + } } } } }, + { "VK_EXT_direct_mode_display", + { { "VK_VERSION_1_0", + { { + "VK_KHR_display", + } } } } }, +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + { "VK_EXT_acquire_xlib_display", + { { "VK_VERSION_1_0", + { { + "VK_EXT_direct_mode_display", + } } } } }, +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + { "VK_EXT_display_surface_counter", + { { "VK_VERSION_1_0", + { { + "VK_KHR_display", + } } } } }, + { "VK_EXT_display_control", + { { "VK_VERSION_1_0", + { { + "VK_EXT_display_surface_counter", + "VK_KHR_swapchain", + } } } } }, + { "VK_GOOGLE_display_timing", + { { "VK_VERSION_1_0", + { { + "VK_KHR_swapchain", + } } } } }, + { "VK_NVX_multiview_per_view_attributes", + { { "VK_VERSION_1_0", + { { + "VK_KHR_multiview", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_discard_rectangles", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_conservative_rasterization", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_depth_clip_enable", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_swapchain_colorspace", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, + { "VK_EXT_hdr_metadata", + { { "VK_VERSION_1_0", + { { + "VK_KHR_swapchain", + } } } } }, + { "VK_KHR_imageless_framebuffer", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_image_format_list", + "VK_KHR_maintenance2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_image_format_list", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_KHR_create_renderpass2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_maintenance2", + "VK_KHR_multiview", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_IMG_relaxed_line_rasterization", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shared_presentable_image", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_get_surface_capabilities2", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_swapchain", + } } } } }, + { "VK_KHR_external_fence_capabilities", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_external_fence", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_fence_capabilities", + } } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_KHR_external_fence_win32", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_fence", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_KHR_external_fence_fd", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_fence", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_performance_query", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_get_surface_capabilities2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, + { "VK_KHR_variable_pointers", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_storage_buffer_storage_class", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_get_display_properties2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_display", + } } } } }, +#if defined( VK_USE_PLATFORM_IOS_MVK ) + { "VK_MVK_ios_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + { "VK_MVK_macos_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + { "VK_EXT_external_memory_dma_buf", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory_fd", + } } } } }, + { "VK_EXT_queue_family_foreign", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_dedicated_allocation", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_memory_requirements2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + { "VK_ANDROID_external_memory_android_hardware_buffer", + { { "VK_VERSION_1_0", + { { + "VK_EXT_queue_family_foreign", + "VK_KHR_dedicated_allocation", + "VK_KHR_external_memory", + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_queue_family_foreign", + } } } } }, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + { "VK_EXT_sampler_filter_minmax", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + { "VK_AMDX_shader_enqueue", + { { "VK_VERSION_1_0", + { { + "VK_EXT_extended_dynamic_state", + "VK_KHR_maintenance5", + "VK_KHR_pipeline_library", + "VK_KHR_spirv_1_4", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", + { { + "VK_KHR_maintenance5", + "VK_KHR_pipeline_library", + } } } } }, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + { "VK_EXT_inline_uniform_block", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_maintenance1", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_bfloat16", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_sample_locations", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_blend_operation_advanced", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_acceleration_structure", + { { "VK_VERSION_1_1", + { { + "VK_EXT_descriptor_indexing", + "VK_KHR_buffer_device_address", + "VK_KHR_deferred_host_operations", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_deferred_host_operations", + } } } } }, + { "VK_KHR_ray_tracing_pipeline", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + "VK_KHR_spirv_1_4", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_acceleration_structure", + } } } } }, + { "VK_KHR_ray_query", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + "VK_KHR_spirv_1_4", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_acceleration_structure", + } } } } }, + { "VK_NV_shader_sm_builtins", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_sampler_ycbcr_conversion", + { { "VK_VERSION_1_0", + { { + "VK_KHR_bind_memory2", + "VK_KHR_get_memory_requirements2", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_maintenance1", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_image_drm_format_modifier", + { { "VK_VERSION_1_0", + { { + "VK_KHR_bind_memory2", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_image_format_list", + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_image_format_list", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_EXT_descriptor_indexing", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_maintenance3", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + { "VK_KHR_portability_subset", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + { "VK_NV_shading_rate_image", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_ray_tracing", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_memory_requirements2", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_representative_fragment_test", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_maintenance3", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_subgroup_extended_types", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_8bit_storage", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_storage_buffer_storage_class", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_external_memory_host", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_atomic_int64", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_clock", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_calibrated_timestamps", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_AMD_shader_core_properties", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_video_decode_h265", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_decode_queue", + } } } } }, + { "VK_KHR_global_priority", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_vertex_attribute_divisor", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_GGP ) + { "VK_GGP_frame_token", + { { "VK_VERSION_1_0", + { { + "VK_GGP_stream_descriptor_surface", + "VK_KHR_swapchain", + } } } } }, +#endif /*VK_USE_PLATFORM_GGP*/ + { "VK_KHR_driver_properties", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_float_controls", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_shader_subgroup_partitioned", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_depth_stencil_resolve", + { { "VK_VERSION_1_0", + { { + "VK_KHR_create_renderpass2", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_KHR_swapchain_mutable_format", + { { "VK_VERSION_1_0", + { { + "VK_KHR_image_format_list", + "VK_KHR_maintenance2", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_image_format_list", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_swapchain", + } } } } }, + { "VK_NV_compute_shader_derivatives", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_mesh_shader", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_fragment_shader_barycentric", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_shader_image_footprint", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_scissor_exclusive", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_device_diagnostic_checkpoints", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_timeline_semaphore", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_INTEL_shader_integer_functions2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_vulkan_memory_model", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_pci_bus_info", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_AMD_display_native_hdr", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_get_surface_capabilities2", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_swapchain", + } } } } }, +#if defined( VK_USE_PLATFORM_FUCHSIA ) + { "VK_FUCHSIA_imagepipe_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + { "VK_KHR_shader_terminate_invocation", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_METAL_EXT ) + { "VK_EXT_metal_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + { "VK_EXT_fragment_density_map", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_scalar_block_layout", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_subgroup_size_control", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_fragment_shading_rate", + { { "VK_VERSION_1_0", + { { + "VK_KHR_create_renderpass2", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_create_renderpass2", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_AMD_shader_core_properties2", + { { "VK_VERSION_1_0", + { { + "VK_AMD_shader_core_properties", + } } } } }, + { "VK_AMD_device_coherent_memory", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_dynamic_rendering_local_read", + { { "VK_VERSION_1_0", + { { + "VK_KHR_dynamic_rendering", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_shader_image_atomic_int64", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_quad_control", + { { "VK_VERSION_1_1", + { { + "VK_KHR_shader_maximal_reconvergence", + "VK_KHR_vulkan_memory_model", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_shader_maximal_reconvergence", + } } } } }, + { "VK_KHR_spirv_1_4", + { { "VK_VERSION_1_1", + { { + "VK_KHR_shader_float_controls", + } } } } }, + { "VK_EXT_memory_budget", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_memory_priority", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_surface_protected_capabilities", + { { "VK_VERSION_1_1", + { { + "VK_KHR_get_surface_capabilities2", + } } } } }, + { "VK_NV_dedicated_allocation_image_aliasing", + { { "VK_VERSION_1_0", + { { + "VK_KHR_dedicated_allocation", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_separate_depth_stencil_layouts", + { { "VK_VERSION_1_0", + { { + "VK_KHR_create_renderpass2", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_create_renderpass2", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_EXT_buffer_device_address", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_present_wait", + { { "VK_VERSION_1_0", + { { + "VK_KHR_present_id", + "VK_KHR_swapchain", + } } } } }, + { "VK_NV_cooperative_matrix", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_coverage_reduction_mode", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_NV_framebuffer_mixed_samples", + } } }, + { "VK_VERSION_1_1", + { { + "VK_NV_framebuffer_mixed_samples", + } } } } }, + { "VK_EXT_fragment_shader_interlock", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_ycbcr_image_arrays", + { { "VK_VERSION_1_0", + { { + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_uniform_buffer_standard_layout", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_provoking_vertex", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_EXT_full_screen_exclusive", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_get_surface_capabilities2", + "VK_KHR_surface", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_surface", + "VK_KHR_swapchain", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_EXT_headless_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, + { "VK_KHR_buffer_device_address", + { { "VK_VERSION_1_0", + { { + "VK_KHR_device_group", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_line_rasterization", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_shader_atomic_float", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_host_query_reset", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_index_type_uint8", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_extended_dynamic_state", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_pipeline_executable_properties", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_host_image_copy", + { { "VK_VERSION_1_0", + { { + "VK_KHR_copy_commands2", + "VK_KHR_format_feature_flags2", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_copy_commands2", + "VK_KHR_format_feature_flags2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_map_memory_placed", + { { "VK_VERSION_1_0", + { { + "VK_KHR_map_memory2", + } } }, + { "VK_VERSION_1_4", { {} } } } }, + { "VK_EXT_shader_atomic_float2", + { { "VK_VERSION_1_0", + { { + "VK_EXT_shader_atomic_float", + } } } } }, + { "VK_EXT_surface_maintenance1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_surface", + } } } } }, + { "VK_EXT_swapchain_maintenance1", + { { "VK_VERSION_1_0", + { { + "VK_EXT_surface_maintenance1", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_surface_maintenance1", + "VK_KHR_swapchain", + } } } } }, + { "VK_EXT_shader_demote_to_helper_invocation", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_device_generated_commands", + { { "VK_VERSION_1_1", + { { + "VK_KHR_buffer_device_address", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_NV_inherited_viewport_scissor", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_integer_dot_product", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_texel_buffer_alignment", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_depth_bias_control", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_device_memory_report", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_acquire_drm_display", + { { "VK_VERSION_1_0", + { { + "VK_EXT_direct_mode_display", + } } } } }, + { "VK_EXT_robustness2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_custom_border_color", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_present_barrier", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_get_surface_capabilities2", + "VK_KHR_surface", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_surface", + "VK_KHR_swapchain", + } } } } }, + { "VK_KHR_present_id", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_private_data", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_pipeline_creation_cache_control", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_video_encode_queue", + { { "VK_VERSION_1_0", + { { + "VK_KHR_synchronization2", + "VK_KHR_video_queue", + } } }, + { "VK_VERSION_1_3", + { { + "VK_KHR_video_queue", + } } } } }, + { "VK_NV_device_diagnostics_config", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_QCOM_tile_shading", + { { "VK_VERSION_1_0", + { { + "VK_QCOM_tile_properties", + }, + { + "VK_KHR_get_physical_device_properties2", + } } } } }, + { "VK_KHR_synchronization2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_descriptor_buffer", + { { "VK_VERSION_1_0", + { { + "VK_EXT_descriptor_indexing", + "VK_KHR_buffer_device_address", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_descriptor_indexing", + "VK_KHR_buffer_device_address", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_graphics_pipeline_library", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_pipeline_library", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_pipeline_library", + } } } } }, + { "VK_AMD_shader_early_and_late_fragment_tests", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_fragment_shader_barycentric", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_subgroup_uniform_control_flow", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_zero_initialize_workgroup_memory", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_fragment_shading_rate_enums", + { { "VK_VERSION_1_0", + { { + "VK_KHR_fragment_shading_rate", + } } } } }, + { "VK_NV_ray_tracing_motion_blur", + { { "VK_VERSION_1_0", + { { + "VK_KHR_ray_tracing_pipeline", + } } } } }, + { "VK_EXT_mesh_shader", + { { "VK_VERSION_1_0", + { { + "VK_KHR_spirv_1_4", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_EXT_ycbcr_2plane_444_formats", + { { "VK_VERSION_1_0", + { { + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_fragment_density_map2", + { { "VK_VERSION_1_0", + { { + "VK_EXT_fragment_density_map", + } } } } }, + { "VK_QCOM_rotated_copy_commands", + { { "VK_VERSION_1_0", + { { + "VK_KHR_copy_commands2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_image_robustness", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_workgroup_memory_explicit_layout", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_copy_commands2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_image_compression_control", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_attachment_feedback_loop_layout", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_4444_formats", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_device_fault", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_ARM_rasterization_order_attachment_access", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_rgba10x6_formats", + { { "VK_VERSION_1_0", + { { + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_NV_acquire_winrt_display", + { { "VK_VERSION_1_0", + { { + "VK_EXT_direct_mode_display", + } } } } }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + { "VK_EXT_directfb_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + { "VK_VALVE_mutable_descriptor_type", + { { "VK_VERSION_1_0", + { { + "VK_KHR_maintenance3", + } } } } }, + { "VK_EXT_vertex_input_dynamic_state", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_physical_device_drm", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_device_address_binding_report", + { { "VK_VERSION_1_0", + { { + "VK_EXT_debug_utils", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_debug_utils", + } } } } }, + { "VK_EXT_depth_clip_control", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_primitive_topology_list_restart", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_format_feature_flags2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_present_mode_fifo_latest_ready", + { { "VK_VERSION_1_0", + { { + "VK_KHR_swapchain", + } } } } }, +#if defined( VK_USE_PLATFORM_FUCHSIA ) + { "VK_FUCHSIA_external_memory", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + "VK_KHR_external_memory_capabilities", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_FUCHSIA_external_semaphore", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_semaphore", + "VK_KHR_external_semaphore_capabilities", + } } } } }, + { "VK_FUCHSIA_buffer_collection", + { { "VK_VERSION_1_0", + { { + "VK_FUCHSIA_external_memory", + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", + { { + "VK_FUCHSIA_external_memory", + } } } } }, +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + { "VK_HUAWEI_subpass_shading", + { { "VK_VERSION_1_0", + { { + "VK_KHR_create_renderpass2", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_HUAWEI_invocation_mask", + { { "VK_VERSION_1_0", + { { + "VK_KHR_ray_tracing_pipeline", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", + { { + "VK_KHR_ray_tracing_pipeline", + } } } } }, + { "VK_NV_external_memory_rdma", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_pipeline_properties", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_multisampled_render_to_single_sampled", + { { "VK_VERSION_1_0", + { { + "VK_KHR_create_renderpass2", + "VK_KHR_depth_stencil_resolve", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_EXT_extended_dynamic_state2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + { "VK_QNX_screen_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + { "VK_EXT_color_write_enable", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_primitives_generated_query", + { { "VK_VERSION_1_0", + { { + "VK_EXT_transform_feedback", + } } } } }, + { "VK_KHR_ray_tracing_maintenance1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + } } } } }, + { "VK_EXT_global_priority_query", + { { "VK_VERSION_1_0", + { { + "VK_EXT_global_priority", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_global_priority", + } } } } }, + { "VK_EXT_image_view_min_lod", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_multi_draw", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_image_2d_view_of_3d", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_maintenance1", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_shader_tile_image", { { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_opacity_micromap", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", + { { + "VK_KHR_acceleration_structure", + } } } } }, +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + { "VK_NV_displacement_micromap", + { { "VK_VERSION_1_0", + { { + "VK_EXT_opacity_micromap", + } } } } }, +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + { "VK_HUAWEI_cluster_culling_shader", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_border_color_swizzle", + { { "VK_VERSION_1_0", + { { + "VK_EXT_custom_border_color", + } } } } }, + { "VK_EXT_pageable_device_local_memory", + { { "VK_VERSION_1_0", + { { + "VK_EXT_memory_priority", + } } } } }, + { "VK_KHR_maintenance4", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_ARM_shader_core_properties", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_ARM_scheduling_controls", + { { "VK_VERSION_1_0", + { { + "VK_ARM_shader_core_builtins", + } } } } }, + { "VK_EXT_image_sliced_view_of_3d", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_maintenance1", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_VALVE_descriptor_set_host_mapping", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_depth_clamp_zero_one", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_non_seamless_cube_map", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_ARM_render_pass_striped", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_QCOM_fragment_density_map_offset", + { { "VK_VERSION_1_0", + { { + "VK_EXT_fragment_density_map", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_fragment_density_map", + } } } } }, + { "VK_NV_copy_memory_indirect", + { { "VK_VERSION_1_0", + { { + "VK_KHR_buffer_device_address", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_buffer_device_address", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_NV_memory_decompression", + { { "VK_VERSION_1_0", + { { + "VK_KHR_buffer_device_address", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_buffer_device_address", + } } }, + { "VK_VERSION_1_2", { {} } } } }, + { "VK_NV_device_generated_commands_compute", + { { "VK_VERSION_1_0", + { { + "VK_NV_device_generated_commands", + } } } } }, + { "VK_NV_ray_tracing_linear_swept_spheres", + { { "VK_VERSION_1_0", + { { + "VK_KHR_ray_tracing_pipeline", + } } } } }, + { "VK_NV_linear_color_attachment", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_GOOGLE_surfaceless_query", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, + { "VK_KHR_shader_maximal_reconvergence", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_image_compression_control_swapchain", + { { "VK_VERSION_1_0", + { { + "VK_EXT_image_compression_control", + } } } } }, + { "VK_QCOM_image_processing", + { { "VK_VERSION_1_0", + { { + "VK_KHR_format_feature_flags2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_nested_command_buffer", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_external_memory_acquire_unmodified", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_extended_dynamic_state3", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_subpass_merge_feedback", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_ARM_tensors", { { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_shader_module_identifier", + { { "VK_VERSION_1_0", + { { + "VK_EXT_pipeline_creation_cache_control", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_pipeline_creation_cache_control", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_rasterization_order_attachment_access", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_optical_flow", + { { "VK_VERSION_1_0", + { { + "VK_KHR_format_feature_flags2", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_format_feature_flags2", + "VK_KHR_synchronization2", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_EXT_legacy_dithering", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_pipeline_protected_access", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + { "VK_ANDROID_external_format_resolve", + { { "VK_VERSION_1_0", + { { + "VK_ANDROID_external_memory_android_hardware_buffer", + } } } } }, +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + { "VK_KHR_maintenance5", + { { "VK_VERSION_1_1", + { { + "VK_KHR_dynamic_rendering", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_KHR_present_id2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_surface", + "VK_KHR_swapchain", + } } } } }, + { "VK_KHR_present_wait2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_surface_capabilities2", + "VK_KHR_present_id2", + "VK_KHR_surface", + "VK_KHR_swapchain", + } } } } }, + { "VK_KHR_ray_tracing_position_fetch", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + } } } } }, + { "VK_EXT_shader_object", + { { "VK_VERSION_1_0", + { { + "VK_KHR_dynamic_rendering", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_dynamic_rendering", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_KHR_pipeline_binary", + { { "VK_VERSION_1_0", + { { + "VK_KHR_maintenance5", + } } }, + { "VK_VERSION_1_4", { {} } } } }, + { "VK_QCOM_tile_properties", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_SEC_amigo_profiling", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_surface_maintenance1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + }, + { + "VK_KHR_get_surface_capabilities2", + } } } } }, + { "VK_KHR_swapchain_maintenance1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_swapchain", + }, + { + "VK_KHR_surface_maintenance1", + }, + { + "VK_KHR_get_physical_device_properties2", + } } } } }, + { "VK_QCOM_multiview_per_view_viewports", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_ray_tracing_invocation_reorder", + { { "VK_VERSION_1_0", + { { + "VK_KHR_ray_tracing_pipeline", + } } } } }, + { "VK_EXT_mutable_descriptor_type", + { { "VK_VERSION_1_0", + { { + "VK_KHR_maintenance3", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_legacy_vertex_attributes", + { { "VK_VERSION_1_0", + { { + "VK_EXT_vertex_input_dynamic_state", + } } } } }, + { "VK_ARM_shader_core_builtins", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_pipeline_library_group_handles", + { { "VK_VERSION_1_0", + { { + "VK_KHR_pipeline_library", + "VK_KHR_ray_tracing_pipeline", + } } } } }, + { "VK_EXT_dynamic_rendering_unused_attachments", + { { "VK_VERSION_1_0", + { { + "VK_KHR_dynamic_rendering", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_KHR_dynamic_rendering", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_NV_low_latency2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_present_id", + "VK_KHR_timeline_semaphore", + }, + { + "VK_KHR_present_id2", + "VK_KHR_timeline_semaphore", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_present_id", + }, + { + "VK_KHR_present_id2", + } } } } }, + { "VK_KHR_cooperative_matrix", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_ARM_data_graph", + { { "VK_VERSION_1_3", + { { + "VK_KHR_deferred_host_operations", + "VK_KHR_maintenance5", + } } } } }, + { "VK_KHR_compute_shader_derivatives", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_video_decode_av1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_decode_queue", + } } } } }, + { "VK_KHR_video_encode_av1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_encode_queue", + } } } } }, + { "VK_KHR_video_decode_vp9", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_decode_queue", + } } } } }, + { "VK_KHR_video_maintenance1", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_queue", + } } } } }, + { "VK_NV_per_stage_descriptor_set", + { { "VK_VERSION_1_0", + { { + "VK_KHR_maintenance6", + } } }, + { "VK_VERSION_1_4", { {} } } } }, + { "VK_QCOM_image_processing2", + { { "VK_VERSION_1_0", + { { + "VK_QCOM_image_processing", + } } } } }, + { "VK_QCOM_filter_cubic_weights", + { { "VK_VERSION_1_0", + { { + "VK_EXT_filter_cubic", + } } } } }, + { "VK_QCOM_filter_cubic_clamp", + { { "VK_VERSION_1_0", + { { + "VK_EXT_filter_cubic", + "VK_EXT_sampler_filter_minmax", + } } }, + { "VK_VERSION_1_2", + { { + "VK_EXT_filter_cubic", + } } } } }, + { "VK_EXT_attachment_feedback_loop_dynamic_state", + { { "VK_VERSION_1_0", + { { + "VK_EXT_attachment_feedback_loop_layout", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_attachment_feedback_loop_layout", + } } } } }, + { "VK_KHR_vertex_attribute_divisor", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_float_controls2", + { { "VK_VERSION_1_1", + { { + "VK_KHR_shader_float_controls", + } } } } }, +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + { "VK_QNX_external_memory_screen_buffer", + { { "VK_VERSION_1_0", + { { + "VK_EXT_queue_family_foreign", + "VK_KHR_dedicated_allocation", + "VK_KHR_external_memory", + "VK_KHR_sampler_ycbcr_conversion", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_queue_family_foreign", + } } } } }, +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + { "VK_MSFT_layered_driver", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_index_type_uint8", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_line_rasterization", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_calibrated_timestamps", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_shader_expect_assume", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_maintenance6", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_descriptor_pool_overallocation", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_QCOM_tile_memory_heap", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_memory_requirements2", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_display_stereo", + { { "VK_VERSION_1_0", + { { + "VK_KHR_display", + "VK_KHR_get_display_properties2", + } } } } }, + { "VK_KHR_video_encode_intra_refresh", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_encode_queue", + } } } } }, + { "VK_KHR_video_encode_quantization_map", + { { "VK_VERSION_1_0", + { { + "VK_KHR_format_feature_flags2", + "VK_KHR_video_encode_queue", + } } }, + { "VK_VERSION_1_3", + { { + "VK_KHR_video_encode_queue", + } } } } }, + { "VK_KHR_maintenance7", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_NV_cluster_acceleration_structure", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + } } } } }, + { "VK_NV_partitioned_acceleration_structure", + { { "VK_VERSION_1_0", + { { + "VK_KHR_acceleration_structure", + } } } } }, + { "VK_EXT_device_generated_commands", + { { "VK_VERSION_1_0", + { { + "VK_KHR_buffer_device_address", + "VK_KHR_maintenance5", + } } }, + { "VK_VERSION_1_2", + { { + "VK_KHR_maintenance5", + } } }, + { "VK_VERSION_1_3", { {} } } } }, + { "VK_KHR_maintenance8", { { "VK_VERSION_1_1", { {} } } } }, + { "VK_MESA_image_alignment_control", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_depth_clamp_control", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_maintenance9", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_video_maintenance2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_video_queue", + } } } } }, +#if defined( VK_USE_PLATFORM_OHOS ) + { "VK_OHOS_surface", + { { "VK_VERSION_1_0", + { { + "VK_KHR_surface", + } } } } }, +#endif /*VK_USE_PLATFORM_OHOS*/ + { "VK_HUAWEI_hdr_vivid", + { { "VK_VERSION_1_0", + { { + "VK_EXT_hdr_metadata", + "VK_KHR_get_physical_device_properties2", + "VK_KHR_swapchain", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_hdr_metadata", + "VK_KHR_swapchain", + } } } } }, + { "VK_NV_cooperative_matrix2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_cooperative_matrix", + } } } } }, + { "VK_ARM_pipeline_opacity_micromap", + { { "VK_VERSION_1_0", + { { + "VK_EXT_opacity_micromap", + } } } } }, +#if defined( VK_USE_PLATFORM_METAL_EXT ) + { "VK_EXT_external_memory_metal", + { { "VK_VERSION_1_0", + { { + "VK_KHR_external_memory", + } } }, + { "VK_VERSION_1_1", { {} } } } }, +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + { "VK_KHR_depth_clamp_zero_one", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_vertex_attribute_robustness", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_VALVE_fragment_density_map_layered", + { { "VK_VERSION_1_0", + { { + "VK_EXT_fragment_density_map", + "VK_KHR_maintenance5", + } } }, + { "VK_VERSION_1_4", + { { + "VK_EXT_fragment_density_map", + } } } } }, + { "VK_KHR_robustness2", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_EXT_fragment_density_map_offset", + { { "VK_VERSION_1_0", + { { + "VK_EXT_fragment_density_map", + "VK_KHR_create_renderpass2", + "VK_KHR_dynamic_rendering", + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", + { { + "VK_EXT_fragment_density_map", + "VK_KHR_create_renderpass2", + "VK_KHR_dynamic_rendering", + } } }, + { "VK_VERSION_1_2", + { { + "VK_EXT_fragment_density_map", + "VK_KHR_dynamic_rendering", + } } }, + { "VK_VERSION_1_3", + { { + "VK_EXT_fragment_density_map", + } } } } }, + { "VK_EXT_zero_initialize_device_memory", + { { "VK_VERSION_1_0", + { { + "VK_KHR_get_physical_device_properties2", + } } }, + { "VK_VERSION_1_1", { {} } } } }, + { "VK_KHR_present_mode_fifo_latest_ready", + { { "VK_VERSION_1_0", + { { + "VK_KHR_swapchain", + } } } } } + }; + auto depIt = dependencies.find( extension ); + return ( depIt != dependencies.end() ) ? depIt->second : noDependencies; + } + + VULKAN_HPP_INLINE std::pair> const &> getExtensionDepends( std::string const & version, + std::string const & extension ) + { +#if !defined( NDEBUG ) + static std::set versions = { "VK_VERSION_1_0", "VK_VERSION_1_1", "VK_VERSION_1_2", "VK_VERSION_1_3", "VK_VERSION_1_4" }; + assert( versions.find( version ) != versions.end() ); +#endif + static std::vector> noDependencies; + + std::map>> const & dependencies = getExtensionDepends( extension ); + if ( dependencies.empty() ) + { + return { true, noDependencies }; + } + auto depIt = dependencies.lower_bound( version ); + if ( ( depIt == dependencies.end() ) || ( depIt->first != version ) ) + { + depIt = std::prev( depIt ); + } + if ( depIt == dependencies.end() ) + { + return { false, noDependencies }; + } + else + { + return { true, depIt->second }; + } + } + + VULKAN_HPP_INLINE std::map const & getObsoletedExtensions() + { + static const std::map obsoletedExtensions = { { "VK_AMD_negative_viewport_height", "VK_KHR_maintenance1" } }; + return obsoletedExtensions; + } + + VULKAN_HPP_INLINE std::map const & getPromotedExtensions() + { + static const std::map promotedExtensions = { { "VK_KHR_sampler_mirror_clamp_to_edge", "VK_VERSION_1_2" }, + { "VK_EXT_debug_marker", "VK_EXT_debug_utils" }, + { "VK_AMD_draw_indirect_count", "VK_KHR_draw_indirect_count" }, + { "VK_KHR_dynamic_rendering", "VK_VERSION_1_3" }, + { "VK_KHR_multiview", "VK_VERSION_1_1" }, +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + { "VK_NV_win32_keyed_mutex", "VK_KHR_win32_keyed_mutex" }, +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + { "VK_KHR_get_physical_device_properties2", "VK_VERSION_1_1" }, + { "VK_KHR_device_group", "VK_VERSION_1_1" }, + { "VK_KHR_shader_draw_parameters", "VK_VERSION_1_1" }, + { "VK_EXT_texture_compression_astc_hdr", "VK_VERSION_1_3" }, + { "VK_EXT_pipeline_robustness", "VK_VERSION_1_4" }, + { "VK_KHR_maintenance1", "VK_VERSION_1_1" }, + { "VK_KHR_device_group_creation", "VK_VERSION_1_1" }, + { "VK_KHR_external_memory_capabilities", "VK_VERSION_1_1" }, + { "VK_KHR_external_memory", "VK_VERSION_1_1" }, + { "VK_KHR_external_semaphore_capabilities", "VK_VERSION_1_1" }, + { "VK_KHR_external_semaphore", "VK_VERSION_1_1" }, + { "VK_KHR_push_descriptor", "VK_VERSION_1_4" }, + { "VK_KHR_shader_float16_int8", "VK_VERSION_1_2" }, + { "VK_KHR_16bit_storage", "VK_VERSION_1_1" }, + { "VK_KHR_descriptor_update_template", "VK_VERSION_1_1" }, + { "VK_KHR_imageless_framebuffer", "VK_VERSION_1_2" }, + { "VK_KHR_create_renderpass2", "VK_VERSION_1_2" }, + { "VK_KHR_external_fence_capabilities", "VK_VERSION_1_1" }, + { "VK_KHR_external_fence", "VK_VERSION_1_1" }, + { "VK_KHR_maintenance2", "VK_VERSION_1_1" }, + { "VK_KHR_variable_pointers", "VK_VERSION_1_1" }, + { "VK_KHR_dedicated_allocation", "VK_VERSION_1_1" }, + { "VK_EXT_sampler_filter_minmax", "VK_VERSION_1_2" }, + { "VK_KHR_storage_buffer_storage_class", "VK_VERSION_1_1" }, + { "VK_EXT_inline_uniform_block", "VK_VERSION_1_3" }, + { "VK_KHR_relaxed_block_layout", "VK_VERSION_1_1" }, + { "VK_KHR_get_memory_requirements2", "VK_VERSION_1_1" }, + { "VK_KHR_image_format_list", "VK_VERSION_1_2" }, + { "VK_KHR_sampler_ycbcr_conversion", "VK_VERSION_1_1" }, + { "VK_KHR_bind_memory2", "VK_VERSION_1_1" }, + { "VK_EXT_descriptor_indexing", "VK_VERSION_1_2" }, + { "VK_EXT_shader_viewport_index_layer", "VK_VERSION_1_2" }, + { "VK_KHR_maintenance3", "VK_VERSION_1_1" }, + { "VK_KHR_draw_indirect_count", "VK_VERSION_1_2" }, + { "VK_EXT_global_priority", "VK_KHR_global_priority" }, + { "VK_KHR_shader_subgroup_extended_types", "VK_VERSION_1_2" }, + { "VK_KHR_8bit_storage", "VK_VERSION_1_2" }, + { "VK_KHR_shader_atomic_int64", "VK_VERSION_1_2" }, + { "VK_EXT_calibrated_timestamps", "VK_KHR_calibrated_timestamps" }, + { "VK_KHR_global_priority", "VK_VERSION_1_4" }, + { "VK_EXT_vertex_attribute_divisor", "VK_KHR_vertex_attribute_divisor" }, + { "VK_EXT_pipeline_creation_feedback", "VK_VERSION_1_3" }, + { "VK_KHR_driver_properties", "VK_VERSION_1_2" }, + { "VK_KHR_shader_float_controls", "VK_VERSION_1_2" }, + { "VK_KHR_depth_stencil_resolve", "VK_VERSION_1_2" }, + { "VK_NV_compute_shader_derivatives", "VK_KHR_compute_shader_derivatives" }, + { "VK_NV_fragment_shader_barycentric", "VK_KHR_fragment_shader_barycentric" }, + { "VK_KHR_timeline_semaphore", "VK_VERSION_1_2" }, + { "VK_KHR_vulkan_memory_model", "VK_VERSION_1_2" }, + { "VK_KHR_shader_terminate_invocation", "VK_VERSION_1_3" }, + { "VK_EXT_scalar_block_layout", "VK_VERSION_1_2" }, + { "VK_EXT_subgroup_size_control", "VK_VERSION_1_3" }, + { "VK_KHR_dynamic_rendering_local_read", "VK_VERSION_1_4" }, + { "VK_KHR_spirv_1_4", "VK_VERSION_1_2" }, + { "VK_KHR_separate_depth_stencil_layouts", "VK_VERSION_1_2" }, + { "VK_EXT_tooling_info", "VK_VERSION_1_3" }, + { "VK_EXT_separate_stencil_usage", "VK_VERSION_1_2" }, + { "VK_KHR_uniform_buffer_standard_layout", "VK_VERSION_1_2" }, + { "VK_KHR_buffer_device_address", "VK_VERSION_1_2" }, + { "VK_EXT_line_rasterization", "VK_KHR_line_rasterization" }, + { "VK_EXT_host_query_reset", "VK_VERSION_1_2" }, + { "VK_EXT_index_type_uint8", "VK_KHR_index_type_uint8" }, + { "VK_EXT_extended_dynamic_state", "VK_VERSION_1_3" }, + { "VK_EXT_host_image_copy", "VK_VERSION_1_4" }, + { "VK_KHR_map_memory2", "VK_VERSION_1_4" }, + { "VK_EXT_surface_maintenance1", "VK_KHR_surface_maintenance1" }, + { "VK_EXT_swapchain_maintenance1", "VK_KHR_swapchain_maintenance1" }, + { "VK_EXT_shader_demote_to_helper_invocation", "VK_VERSION_1_3" }, + { "VK_KHR_shader_integer_dot_product", "VK_VERSION_1_3" }, + { "VK_EXT_texel_buffer_alignment", "VK_VERSION_1_3" }, + { "VK_EXT_robustness2", "VK_KHR_robustness2" }, + { "VK_KHR_shader_non_semantic_info", "VK_VERSION_1_3" }, + { "VK_EXT_private_data", "VK_VERSION_1_3" }, + { "VK_EXT_pipeline_creation_cache_control", "VK_VERSION_1_3" }, + { "VK_KHR_synchronization2", "VK_VERSION_1_3" }, + { "VK_KHR_zero_initialize_workgroup_memory", "VK_VERSION_1_3" }, + { "VK_EXT_ycbcr_2plane_444_formats", "VK_VERSION_1_3" }, + { "VK_EXT_image_robustness", "VK_VERSION_1_3" }, + { "VK_KHR_copy_commands2", "VK_VERSION_1_3" }, + { "VK_EXT_4444_formats", "VK_VERSION_1_3" }, + { "VK_ARM_rasterization_order_attachment_access", + "VK_EXT_rasterization_order_attachment_access" }, + { "VK_VALVE_mutable_descriptor_type", "VK_EXT_mutable_descriptor_type" }, + { "VK_KHR_format_feature_flags2", "VK_VERSION_1_3" }, + { "VK_EXT_present_mode_fifo_latest_ready", "VK_KHR_present_mode_fifo_latest_ready" }, + { "VK_EXT_extended_dynamic_state2", "VK_VERSION_1_3" }, + { "VK_EXT_global_priority_query", "VK_KHR_global_priority" }, + { "VK_EXT_load_store_op_none", "VK_KHR_load_store_op_none" }, + { "VK_KHR_maintenance4", "VK_VERSION_1_3" }, + { "VK_KHR_shader_subgroup_rotate", "VK_VERSION_1_4" }, + { "VK_EXT_depth_clamp_zero_one", "VK_KHR_depth_clamp_zero_one" }, + { "VK_QCOM_fragment_density_map_offset", "VK_EXT_fragment_density_map_offset" }, + { "VK_EXT_pipeline_protected_access", "VK_VERSION_1_4" }, + { "VK_KHR_maintenance5", "VK_VERSION_1_4" }, + { "VK_KHR_vertex_attribute_divisor", "VK_VERSION_1_4" }, + { "VK_KHR_load_store_op_none", "VK_VERSION_1_4" }, + { "VK_KHR_shader_float_controls2", "VK_VERSION_1_4" }, + { "VK_KHR_index_type_uint8", "VK_VERSION_1_4" }, + { "VK_KHR_line_rasterization", "VK_VERSION_1_4" }, + { "VK_KHR_shader_expect_assume", "VK_VERSION_1_4" }, + { "VK_KHR_maintenance6", "VK_VERSION_1_4" }, + { "VK_EXT_vertex_attribute_robustness", "VK_KHR_maintenance9" } }; + return promotedExtensions; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string getExtensionDeprecatedBy( std::string const & extension ) + { + if ( extension == "VK_EXT_debug_report" ) + { + return "VK_EXT_debug_utils"; + } + if ( extension == "VK_NV_glsl_shader" ) + { + return ""; + } + if ( extension == "VK_NV_dedicated_allocation" ) + { + return "VK_KHR_dedicated_allocation"; + } + if ( extension == "VK_AMD_gpu_shader_half_float" ) + { + return "VK_KHR_shader_float16_int8"; + } + if ( extension == "VK_IMG_format_pvrtc" ) + { + return ""; + } + if ( extension == "VK_NV_external_memory_capabilities" ) + { + return "VK_KHR_external_memory_capabilities"; + } + if ( extension == "VK_NV_external_memory" ) + { + return "VK_KHR_external_memory"; + } +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + if ( extension == "VK_NV_external_memory_win32" ) + { + return "VK_KHR_external_memory_win32"; + } +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + if ( extension == "VK_EXT_validation_flags" ) + { + return "VK_EXT_layer_settings"; + } + if ( extension == "VK_EXT_shader_subgroup_ballot" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_shader_subgroup_vote" ) + { + return "VK_VERSION_1_1"; + } +#if defined( VK_USE_PLATFORM_IOS_MVK ) + if ( extension == "VK_MVK_ios_surface" ) + { + return "VK_EXT_metal_surface"; + } +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + if ( extension == "VK_MVK_macos_surface" ) + { + return "VK_EXT_metal_surface"; + } +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + if ( extension == "VK_AMD_gpu_shader_int16" ) + { + return "VK_KHR_shader_float16_int8"; + } + if ( extension == "VK_NV_ray_tracing" ) + { + return "VK_KHR_ray_tracing_pipeline"; + } + if ( extension == "VK_EXT_buffer_device_address" ) + { + return "VK_KHR_buffer_device_address"; + } + if ( extension == "VK_EXT_validation_features" ) + { + return "VK_EXT_layer_settings"; + } +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + if ( extension == "VK_NV_displacement_micromap" ) + { + return "VK_NV_cluster_acceleration_structure"; + } +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + return ""; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string getExtensionObsoletedBy( std::string const & extension ) + { + if ( extension == "VK_AMD_negative_viewport_height" ) + { + return "VK_KHR_maintenance1"; + } + return ""; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string getExtensionPromotedTo( std::string const & extension ) + { + if ( extension == "VK_KHR_sampler_mirror_clamp_to_edge" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_debug_marker" ) + { + return "VK_EXT_debug_utils"; + } + if ( extension == "VK_AMD_draw_indirect_count" ) + { + return "VK_KHR_draw_indirect_count"; + } + if ( extension == "VK_KHR_dynamic_rendering" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_multiview" ) + { + return "VK_VERSION_1_1"; + } +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + if ( extension == "VK_NV_win32_keyed_mutex" ) + { + return "VK_KHR_win32_keyed_mutex"; + } +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + if ( extension == "VK_KHR_get_physical_device_properties2" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_device_group" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_shader_draw_parameters" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_EXT_texture_compression_astc_hdr" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_pipeline_robustness" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_maintenance1" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_device_group_creation" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_external_memory_capabilities" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_external_memory" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_external_semaphore_capabilities" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_external_semaphore" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_push_descriptor" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_shader_float16_int8" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_16bit_storage" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_descriptor_update_template" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_imageless_framebuffer" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_create_renderpass2" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_external_fence_capabilities" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_external_fence" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_maintenance2" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_variable_pointers" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_dedicated_allocation" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_EXT_sampler_filter_minmax" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_storage_buffer_storage_class" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_EXT_inline_uniform_block" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_relaxed_block_layout" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_get_memory_requirements2" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_image_format_list" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_sampler_ycbcr_conversion" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_bind_memory2" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_EXT_descriptor_indexing" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_shader_viewport_index_layer" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_maintenance3" ) + { + return "VK_VERSION_1_1"; + } + if ( extension == "VK_KHR_draw_indirect_count" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_global_priority" ) + { + return "VK_KHR_global_priority"; + } + if ( extension == "VK_KHR_shader_subgroup_extended_types" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_8bit_storage" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_shader_atomic_int64" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_calibrated_timestamps" ) + { + return "VK_KHR_calibrated_timestamps"; + } + if ( extension == "VK_KHR_global_priority" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_EXT_vertex_attribute_divisor" ) + { + return "VK_KHR_vertex_attribute_divisor"; + } + if ( extension == "VK_EXT_pipeline_creation_feedback" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_driver_properties" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_shader_float_controls" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_depth_stencil_resolve" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_NV_compute_shader_derivatives" ) + { + return "VK_KHR_compute_shader_derivatives"; + } + if ( extension == "VK_NV_fragment_shader_barycentric" ) + { + return "VK_KHR_fragment_shader_barycentric"; + } + if ( extension == "VK_KHR_timeline_semaphore" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_vulkan_memory_model" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_shader_terminate_invocation" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_scalar_block_layout" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_subgroup_size_control" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_dynamic_rendering_local_read" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_spirv_1_4" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_separate_depth_stencil_layouts" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_tooling_info" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_separate_stencil_usage" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_uniform_buffer_standard_layout" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_KHR_buffer_device_address" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_line_rasterization" ) + { + return "VK_KHR_line_rasterization"; + } + if ( extension == "VK_EXT_host_query_reset" ) + { + return "VK_VERSION_1_2"; + } + if ( extension == "VK_EXT_index_type_uint8" ) + { + return "VK_KHR_index_type_uint8"; + } + if ( extension == "VK_EXT_extended_dynamic_state" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_host_image_copy" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_map_memory2" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_EXT_surface_maintenance1" ) + { + return "VK_KHR_surface_maintenance1"; + } + if ( extension == "VK_EXT_swapchain_maintenance1" ) + { + return "VK_KHR_swapchain_maintenance1"; + } + if ( extension == "VK_EXT_shader_demote_to_helper_invocation" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_shader_integer_dot_product" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_texel_buffer_alignment" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_robustness2" ) + { + return "VK_KHR_robustness2"; + } + if ( extension == "VK_KHR_shader_non_semantic_info" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_private_data" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_pipeline_creation_cache_control" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_synchronization2" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_zero_initialize_workgroup_memory" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_ycbcr_2plane_444_formats" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_image_robustness" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_copy_commands2" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_4444_formats" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_ARM_rasterization_order_attachment_access" ) + { + return "VK_EXT_rasterization_order_attachment_access"; + } + if ( extension == "VK_VALVE_mutable_descriptor_type" ) + { + return "VK_EXT_mutable_descriptor_type"; + } + if ( extension == "VK_KHR_format_feature_flags2" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_present_mode_fifo_latest_ready" ) + { + return "VK_KHR_present_mode_fifo_latest_ready"; + } + if ( extension == "VK_EXT_extended_dynamic_state2" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_EXT_global_priority_query" ) + { + return "VK_KHR_global_priority"; + } + if ( extension == "VK_EXT_load_store_op_none" ) + { + return "VK_KHR_load_store_op_none"; + } + if ( extension == "VK_KHR_maintenance4" ) + { + return "VK_VERSION_1_3"; + } + if ( extension == "VK_KHR_shader_subgroup_rotate" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_EXT_depth_clamp_zero_one" ) + { + return "VK_KHR_depth_clamp_zero_one"; + } + if ( extension == "VK_QCOM_fragment_density_map_offset" ) + { + return "VK_EXT_fragment_density_map_offset"; + } + if ( extension == "VK_EXT_pipeline_protected_access" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_maintenance5" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_vertex_attribute_divisor" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_load_store_op_none" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_shader_float_controls2" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_index_type_uint8" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_line_rasterization" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_shader_expect_assume" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_KHR_maintenance6" ) + { + return "VK_VERSION_1_4"; + } + if ( extension == "VK_EXT_vertex_attribute_robustness" ) + { + return "VK_KHR_maintenance9"; + } + return ""; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 bool isDeprecatedExtension( std::string const & extension ) + { + return ( extension == "VK_EXT_debug_report" ) || ( extension == "VK_NV_glsl_shader" ) || ( extension == "VK_NV_dedicated_allocation" ) || + ( extension == "VK_AMD_gpu_shader_half_float" ) || ( extension == "VK_IMG_format_pvrtc" ) || ( extension == "VK_NV_external_memory_capabilities" ) || + ( extension == "VK_NV_external_memory" ) || +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + ( extension == "VK_NV_external_memory_win32" ) || +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + ( extension == "VK_EXT_validation_flags" ) || ( extension == "VK_EXT_shader_subgroup_ballot" ) || ( extension == "VK_EXT_shader_subgroup_vote" ) || +#if defined( VK_USE_PLATFORM_IOS_MVK ) + ( extension == "VK_MVK_ios_surface" ) || +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + ( extension == "VK_MVK_macos_surface" ) || +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + ( extension == "VK_AMD_gpu_shader_int16" ) || ( extension == "VK_NV_ray_tracing" ) || ( extension == "VK_EXT_buffer_device_address" ) || + ( extension == "VK_EXT_validation_features" ) || +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + ( extension == "VK_NV_displacement_micromap" ) || +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + false; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 bool isDeviceExtension( std::string const & extension ) + { + return ( extension == "VK_KHR_swapchain" ) || ( extension == "VK_KHR_display_swapchain" ) || ( extension == "VK_NV_glsl_shader" ) || + ( extension == "VK_EXT_depth_range_unrestricted" ) || ( extension == "VK_KHR_sampler_mirror_clamp_to_edge" ) || + ( extension == "VK_IMG_filter_cubic" ) || ( extension == "VK_AMD_rasterization_order" ) || ( extension == "VK_AMD_shader_trinary_minmax" ) || + ( extension == "VK_AMD_shader_explicit_vertex_parameter" ) || ( extension == "VK_EXT_debug_marker" ) || ( extension == "VK_KHR_video_queue" ) || + ( extension == "VK_KHR_video_decode_queue" ) || ( extension == "VK_AMD_gcn_shader" ) || ( extension == "VK_NV_dedicated_allocation" ) || + ( extension == "VK_EXT_transform_feedback" ) || ( extension == "VK_NVX_binary_import" ) || ( extension == "VK_NVX_image_view_handle" ) || + ( extension == "VK_AMD_draw_indirect_count" ) || ( extension == "VK_AMD_negative_viewport_height" ) || + ( extension == "VK_AMD_gpu_shader_half_float" ) || ( extension == "VK_AMD_shader_ballot" ) || ( extension == "VK_KHR_video_encode_h264" ) || + ( extension == "VK_KHR_video_encode_h265" ) || ( extension == "VK_KHR_video_decode_h264" ) || ( extension == "VK_AMD_texture_gather_bias_lod" ) || + ( extension == "VK_AMD_shader_info" ) || ( extension == "VK_KHR_dynamic_rendering" ) || ( extension == "VK_AMD_shader_image_load_store_lod" ) || + ( extension == "VK_NV_corner_sampled_image" ) || ( extension == "VK_KHR_multiview" ) || ( extension == "VK_IMG_format_pvrtc" ) || + ( extension == "VK_NV_external_memory" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_NV_external_memory_win32" ) || ( extension == "VK_NV_win32_keyed_mutex" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_KHR_device_group" ) || ( extension == "VK_KHR_shader_draw_parameters" ) || ( extension == "VK_EXT_shader_subgroup_ballot" ) || + ( extension == "VK_EXT_shader_subgroup_vote" ) || ( extension == "VK_EXT_texture_compression_astc_hdr" ) || + ( extension == "VK_EXT_astc_decode_mode" ) || ( extension == "VK_EXT_pipeline_robustness" ) || ( extension == "VK_KHR_maintenance1" ) || + ( extension == "VK_KHR_external_memory" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_KHR_external_memory_win32" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_KHR_external_memory_fd" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_KHR_win32_keyed_mutex" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_KHR_external_semaphore" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_KHR_external_semaphore_win32" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_KHR_external_semaphore_fd" ) || ( extension == "VK_KHR_push_descriptor" ) || ( extension == "VK_EXT_conditional_rendering" ) || + ( extension == "VK_KHR_shader_float16_int8" ) || ( extension == "VK_KHR_16bit_storage" ) || ( extension == "VK_KHR_incremental_present" ) || + ( extension == "VK_KHR_descriptor_update_template" ) || ( extension == "VK_NV_clip_space_w_scaling" ) || ( extension == "VK_EXT_display_control" ) || + ( extension == "VK_GOOGLE_display_timing" ) || ( extension == "VK_NV_sample_mask_override_coverage" ) || + ( extension == "VK_NV_geometry_shader_passthrough" ) || ( extension == "VK_NV_viewport_array2" ) || + ( extension == "VK_NVX_multiview_per_view_attributes" ) || ( extension == "VK_NV_viewport_swizzle" ) || + ( extension == "VK_EXT_discard_rectangles" ) || ( extension == "VK_EXT_conservative_rasterization" ) || + ( extension == "VK_EXT_depth_clip_enable" ) || ( extension == "VK_EXT_hdr_metadata" ) || ( extension == "VK_KHR_imageless_framebuffer" ) || + ( extension == "VK_KHR_create_renderpass2" ) || ( extension == "VK_IMG_relaxed_line_rasterization" ) || + ( extension == "VK_KHR_shared_presentable_image" ) || ( extension == "VK_KHR_external_fence" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_KHR_external_fence_win32" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_KHR_external_fence_fd" ) || ( extension == "VK_KHR_performance_query" ) || ( extension == "VK_KHR_maintenance2" ) || + ( extension == "VK_KHR_variable_pointers" ) || ( extension == "VK_EXT_external_memory_dma_buf" ) || ( extension == "VK_EXT_queue_family_foreign" ) || + ( extension == "VK_KHR_dedicated_allocation" ) +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + || ( extension == "VK_ANDROID_external_memory_android_hardware_buffer" ) +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + || ( extension == "VK_EXT_sampler_filter_minmax" ) || ( extension == "VK_KHR_storage_buffer_storage_class" ) || + ( extension == "VK_AMD_gpu_shader_int16" ) +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + || ( extension == "VK_AMDX_shader_enqueue" ) +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + || ( extension == "VK_AMD_mixed_attachment_samples" ) || ( extension == "VK_AMD_shader_fragment_mask" ) || + ( extension == "VK_EXT_inline_uniform_block" ) || ( extension == "VK_EXT_shader_stencil_export" ) || ( extension == "VK_KHR_shader_bfloat16" ) || + ( extension == "VK_EXT_sample_locations" ) || ( extension == "VK_KHR_relaxed_block_layout" ) || ( extension == "VK_KHR_get_memory_requirements2" ) || + ( extension == "VK_KHR_image_format_list" ) || ( extension == "VK_EXT_blend_operation_advanced" ) || + ( extension == "VK_NV_fragment_coverage_to_color" ) || ( extension == "VK_KHR_acceleration_structure" ) || + ( extension == "VK_KHR_ray_tracing_pipeline" ) || ( extension == "VK_KHR_ray_query" ) || ( extension == "VK_NV_framebuffer_mixed_samples" ) || + ( extension == "VK_NV_fill_rectangle" ) || ( extension == "VK_NV_shader_sm_builtins" ) || ( extension == "VK_EXT_post_depth_coverage" ) || + ( extension == "VK_KHR_sampler_ycbcr_conversion" ) || ( extension == "VK_KHR_bind_memory2" ) || + ( extension == "VK_EXT_image_drm_format_modifier" ) || ( extension == "VK_EXT_validation_cache" ) || ( extension == "VK_EXT_descriptor_indexing" ) || + ( extension == "VK_EXT_shader_viewport_index_layer" ) +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + || ( extension == "VK_KHR_portability_subset" ) +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + || ( extension == "VK_NV_shading_rate_image" ) || ( extension == "VK_NV_ray_tracing" ) || ( extension == "VK_NV_representative_fragment_test" ) || + ( extension == "VK_KHR_maintenance3" ) || ( extension == "VK_KHR_draw_indirect_count" ) || ( extension == "VK_EXT_filter_cubic" ) || + ( extension == "VK_QCOM_render_pass_shader_resolve" ) || ( extension == "VK_EXT_global_priority" ) || + ( extension == "VK_KHR_shader_subgroup_extended_types" ) || ( extension == "VK_KHR_8bit_storage" ) || + ( extension == "VK_EXT_external_memory_host" ) || ( extension == "VK_AMD_buffer_marker" ) || ( extension == "VK_KHR_shader_atomic_int64" ) || + ( extension == "VK_KHR_shader_clock" ) || ( extension == "VK_AMD_pipeline_compiler_control" ) || ( extension == "VK_EXT_calibrated_timestamps" ) || + ( extension == "VK_AMD_shader_core_properties" ) || ( extension == "VK_KHR_video_decode_h265" ) || ( extension == "VK_KHR_global_priority" ) || + ( extension == "VK_AMD_memory_overallocation_behavior" ) || ( extension == "VK_EXT_vertex_attribute_divisor" ) +#if defined( VK_USE_PLATFORM_GGP ) + || ( extension == "VK_GGP_frame_token" ) +#endif /*VK_USE_PLATFORM_GGP*/ + || ( extension == "VK_EXT_pipeline_creation_feedback" ) || ( extension == "VK_KHR_driver_properties" ) || + ( extension == "VK_KHR_shader_float_controls" ) || ( extension == "VK_NV_shader_subgroup_partitioned" ) || + ( extension == "VK_KHR_depth_stencil_resolve" ) || ( extension == "VK_KHR_swapchain_mutable_format" ) || + ( extension == "VK_NV_compute_shader_derivatives" ) || ( extension == "VK_NV_mesh_shader" ) || + ( extension == "VK_NV_fragment_shader_barycentric" ) || ( extension == "VK_NV_shader_image_footprint" ) || + ( extension == "VK_NV_scissor_exclusive" ) || ( extension == "VK_NV_device_diagnostic_checkpoints" ) || + ( extension == "VK_KHR_timeline_semaphore" ) || ( extension == "VK_INTEL_shader_integer_functions2" ) || + ( extension == "VK_INTEL_performance_query" ) || ( extension == "VK_KHR_vulkan_memory_model" ) || ( extension == "VK_EXT_pci_bus_info" ) || + ( extension == "VK_AMD_display_native_hdr" ) || ( extension == "VK_KHR_shader_terminate_invocation" ) || + ( extension == "VK_EXT_fragment_density_map" ) || ( extension == "VK_EXT_scalar_block_layout" ) || + ( extension == "VK_GOOGLE_hlsl_functionality1" ) || ( extension == "VK_GOOGLE_decorate_string" ) || + ( extension == "VK_EXT_subgroup_size_control" ) || ( extension == "VK_KHR_fragment_shading_rate" ) || + ( extension == "VK_AMD_shader_core_properties2" ) || ( extension == "VK_AMD_device_coherent_memory" ) || + ( extension == "VK_KHR_dynamic_rendering_local_read" ) || ( extension == "VK_EXT_shader_image_atomic_int64" ) || + ( extension == "VK_KHR_shader_quad_control" ) || ( extension == "VK_KHR_spirv_1_4" ) || ( extension == "VK_EXT_memory_budget" ) || + ( extension == "VK_EXT_memory_priority" ) || ( extension == "VK_NV_dedicated_allocation_image_aliasing" ) || + ( extension == "VK_KHR_separate_depth_stencil_layouts" ) || ( extension == "VK_EXT_buffer_device_address" ) || + ( extension == "VK_EXT_tooling_info" ) || ( extension == "VK_EXT_separate_stencil_usage" ) || ( extension == "VK_KHR_present_wait" ) || + ( extension == "VK_NV_cooperative_matrix" ) || ( extension == "VK_NV_coverage_reduction_mode" ) || + ( extension == "VK_EXT_fragment_shader_interlock" ) || ( extension == "VK_EXT_ycbcr_image_arrays" ) || + ( extension == "VK_KHR_uniform_buffer_standard_layout" ) || ( extension == "VK_EXT_provoking_vertex" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_EXT_full_screen_exclusive" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_KHR_buffer_device_address" ) || ( extension == "VK_EXT_line_rasterization" ) || ( extension == "VK_EXT_shader_atomic_float" ) || + ( extension == "VK_EXT_host_query_reset" ) || ( extension == "VK_EXT_index_type_uint8" ) || ( extension == "VK_EXT_extended_dynamic_state" ) || + ( extension == "VK_KHR_deferred_host_operations" ) || ( extension == "VK_KHR_pipeline_executable_properties" ) || + ( extension == "VK_EXT_host_image_copy" ) || ( extension == "VK_KHR_map_memory2" ) || ( extension == "VK_EXT_map_memory_placed" ) || + ( extension == "VK_EXT_shader_atomic_float2" ) || ( extension == "VK_EXT_swapchain_maintenance1" ) || + ( extension == "VK_EXT_shader_demote_to_helper_invocation" ) || ( extension == "VK_NV_device_generated_commands" ) || + ( extension == "VK_NV_inherited_viewport_scissor" ) || ( extension == "VK_KHR_shader_integer_dot_product" ) || + ( extension == "VK_EXT_texel_buffer_alignment" ) || ( extension == "VK_QCOM_render_pass_transform" ) || + ( extension == "VK_EXT_depth_bias_control" ) || ( extension == "VK_EXT_device_memory_report" ) || ( extension == "VK_EXT_robustness2" ) || + ( extension == "VK_EXT_custom_border_color" ) || ( extension == "VK_GOOGLE_user_type" ) || ( extension == "VK_KHR_pipeline_library" ) || + ( extension == "VK_NV_present_barrier" ) || ( extension == "VK_KHR_shader_non_semantic_info" ) || ( extension == "VK_KHR_present_id" ) || + ( extension == "VK_EXT_private_data" ) || ( extension == "VK_EXT_pipeline_creation_cache_control" ) || + ( extension == "VK_KHR_video_encode_queue" ) || ( extension == "VK_NV_device_diagnostics_config" ) || + ( extension == "VK_QCOM_render_pass_store_ops" ) +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + || ( extension == "VK_NV_cuda_kernel_launch" ) +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + || ( extension == "VK_QCOM_tile_shading" ) || ( extension == "VK_NV_low_latency" ) +#if defined( VK_USE_PLATFORM_METAL_EXT ) + || ( extension == "VK_EXT_metal_objects" ) +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + || ( extension == "VK_KHR_synchronization2" ) || ( extension == "VK_EXT_descriptor_buffer" ) || ( extension == "VK_EXT_graphics_pipeline_library" ) || + ( extension == "VK_AMD_shader_early_and_late_fragment_tests" ) || ( extension == "VK_KHR_fragment_shader_barycentric" ) || + ( extension == "VK_KHR_shader_subgroup_uniform_control_flow" ) || ( extension == "VK_KHR_zero_initialize_workgroup_memory" ) || + ( extension == "VK_NV_fragment_shading_rate_enums" ) || ( extension == "VK_NV_ray_tracing_motion_blur" ) || ( extension == "VK_EXT_mesh_shader" ) || + ( extension == "VK_EXT_ycbcr_2plane_444_formats" ) || ( extension == "VK_EXT_fragment_density_map2" ) || + ( extension == "VK_QCOM_rotated_copy_commands" ) || ( extension == "VK_EXT_image_robustness" ) || + ( extension == "VK_KHR_workgroup_memory_explicit_layout" ) || ( extension == "VK_KHR_copy_commands2" ) || + ( extension == "VK_EXT_image_compression_control" ) || ( extension == "VK_EXT_attachment_feedback_loop_layout" ) || + ( extension == "VK_EXT_4444_formats" ) || ( extension == "VK_EXT_device_fault" ) || + ( extension == "VK_ARM_rasterization_order_attachment_access" ) || ( extension == "VK_EXT_rgba10x6_formats" ) +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_NV_acquire_winrt_display" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_VALVE_mutable_descriptor_type" ) || ( extension == "VK_EXT_vertex_input_dynamic_state" ) || + ( extension == "VK_EXT_physical_device_drm" ) || ( extension == "VK_EXT_device_address_binding_report" ) || + ( extension == "VK_EXT_depth_clip_control" ) || ( extension == "VK_EXT_primitive_topology_list_restart" ) || + ( extension == "VK_KHR_format_feature_flags2" ) || ( extension == "VK_EXT_present_mode_fifo_latest_ready" ) +#if defined( VK_USE_PLATFORM_FUCHSIA ) + || ( extension == "VK_FUCHSIA_external_memory" ) || ( extension == "VK_FUCHSIA_external_semaphore" ) || ( extension == "VK_FUCHSIA_buffer_collection" ) +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + || ( extension == "VK_HUAWEI_subpass_shading" ) || ( extension == "VK_HUAWEI_invocation_mask" ) || ( extension == "VK_NV_external_memory_rdma" ) || + ( extension == "VK_EXT_pipeline_properties" ) || ( extension == "VK_EXT_frame_boundary" ) || + ( extension == "VK_EXT_multisampled_render_to_single_sampled" ) || ( extension == "VK_EXT_extended_dynamic_state2" ) || + ( extension == "VK_EXT_color_write_enable" ) || ( extension == "VK_EXT_primitives_generated_query" ) || + ( extension == "VK_KHR_ray_tracing_maintenance1" ) || ( extension == "VK_EXT_global_priority_query" ) || + ( extension == "VK_EXT_image_view_min_lod" ) || ( extension == "VK_EXT_multi_draw" ) || ( extension == "VK_EXT_image_2d_view_of_3d" ) || + ( extension == "VK_EXT_shader_tile_image" ) || ( extension == "VK_EXT_opacity_micromap" ) +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + || ( extension == "VK_NV_displacement_micromap" ) +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + || ( extension == "VK_EXT_load_store_op_none" ) || ( extension == "VK_HUAWEI_cluster_culling_shader" ) || + ( extension == "VK_EXT_border_color_swizzle" ) || ( extension == "VK_EXT_pageable_device_local_memory" ) || ( extension == "VK_KHR_maintenance4" ) || + ( extension == "VK_ARM_shader_core_properties" ) || ( extension == "VK_KHR_shader_subgroup_rotate" ) || + ( extension == "VK_ARM_scheduling_controls" ) || ( extension == "VK_EXT_image_sliced_view_of_3d" ) || + ( extension == "VK_VALVE_descriptor_set_host_mapping" ) || ( extension == "VK_EXT_depth_clamp_zero_one" ) || + ( extension == "VK_EXT_non_seamless_cube_map" ) || ( extension == "VK_ARM_render_pass_striped" ) || + ( extension == "VK_QCOM_fragment_density_map_offset" ) || ( extension == "VK_NV_copy_memory_indirect" ) || + ( extension == "VK_NV_memory_decompression" ) || ( extension == "VK_NV_device_generated_commands_compute" ) || + ( extension == "VK_NV_ray_tracing_linear_swept_spheres" ) || ( extension == "VK_NV_linear_color_attachment" ) || + ( extension == "VK_KHR_shader_maximal_reconvergence" ) || ( extension == "VK_EXT_image_compression_control_swapchain" ) || + ( extension == "VK_QCOM_image_processing" ) || ( extension == "VK_EXT_nested_command_buffer" ) || + ( extension == "VK_EXT_external_memory_acquire_unmodified" ) || ( extension == "VK_EXT_extended_dynamic_state3" ) || + ( extension == "VK_EXT_subpass_merge_feedback" ) || ( extension == "VK_ARM_tensors" ) || ( extension == "VK_EXT_shader_module_identifier" ) || + ( extension == "VK_EXT_rasterization_order_attachment_access" ) || ( extension == "VK_NV_optical_flow" ) || + ( extension == "VK_EXT_legacy_dithering" ) || ( extension == "VK_EXT_pipeline_protected_access" ) +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + || ( extension == "VK_ANDROID_external_format_resolve" ) +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + || ( extension == "VK_KHR_maintenance5" ) || ( extension == "VK_AMD_anti_lag" ) || ( extension == "VK_KHR_present_id2" ) || + ( extension == "VK_KHR_present_wait2" ) || ( extension == "VK_KHR_ray_tracing_position_fetch" ) || ( extension == "VK_EXT_shader_object" ) || + ( extension == "VK_KHR_pipeline_binary" ) || ( extension == "VK_QCOM_tile_properties" ) || ( extension == "VK_SEC_amigo_profiling" ) || + ( extension == "VK_KHR_swapchain_maintenance1" ) || ( extension == "VK_QCOM_multiview_per_view_viewports" ) || + ( extension == "VK_NV_ray_tracing_invocation_reorder" ) || ( extension == "VK_NV_cooperative_vector" ) || + ( extension == "VK_NV_extended_sparse_address_space" ) || ( extension == "VK_EXT_mutable_descriptor_type" ) || + ( extension == "VK_EXT_legacy_vertex_attributes" ) || ( extension == "VK_ARM_shader_core_builtins" ) || + ( extension == "VK_EXT_pipeline_library_group_handles" ) || ( extension == "VK_EXT_dynamic_rendering_unused_attachments" ) || + ( extension == "VK_NV_low_latency2" ) || ( extension == "VK_KHR_cooperative_matrix" ) || ( extension == "VK_ARM_data_graph" ) || + ( extension == "VK_QCOM_multiview_per_view_render_areas" ) || ( extension == "VK_KHR_compute_shader_derivatives" ) || + ( extension == "VK_KHR_video_decode_av1" ) || ( extension == "VK_KHR_video_encode_av1" ) || ( extension == "VK_KHR_video_decode_vp9" ) || + ( extension == "VK_KHR_video_maintenance1" ) || ( extension == "VK_NV_per_stage_descriptor_set" ) || ( extension == "VK_QCOM_image_processing2" ) || + ( extension == "VK_QCOM_filter_cubic_weights" ) || ( extension == "VK_QCOM_ycbcr_degamma" ) || ( extension == "VK_QCOM_filter_cubic_clamp" ) || + ( extension == "VK_EXT_attachment_feedback_loop_dynamic_state" ) || ( extension == "VK_KHR_vertex_attribute_divisor" ) || + ( extension == "VK_KHR_load_store_op_none" ) || ( extension == "VK_KHR_unified_image_layouts" ) || ( extension == "VK_KHR_shader_float_controls2" ) +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + || ( extension == "VK_QNX_external_memory_screen_buffer" ) +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + || ( extension == "VK_MSFT_layered_driver" ) || ( extension == "VK_KHR_index_type_uint8" ) || ( extension == "VK_KHR_line_rasterization" ) || + ( extension == "VK_KHR_calibrated_timestamps" ) || ( extension == "VK_KHR_shader_expect_assume" ) || ( extension == "VK_KHR_maintenance6" ) || + ( extension == "VK_NV_descriptor_pool_overallocation" ) || ( extension == "VK_QCOM_tile_memory_heap" ) || + ( extension == "VK_KHR_video_encode_intra_refresh" ) || ( extension == "VK_KHR_video_encode_quantization_map" ) || + ( extension == "VK_NV_raw_access_chains" ) || ( extension == "VK_NV_external_compute_queue" ) || + ( extension == "VK_KHR_shader_relaxed_extended_instruction" ) || ( extension == "VK_NV_command_buffer_inheritance" ) || + ( extension == "VK_KHR_maintenance7" ) || ( extension == "VK_NV_shader_atomic_float16_vector" ) || + ( extension == "VK_EXT_shader_replicated_composites" ) || ( extension == "VK_EXT_shader_float8" ) || + ( extension == "VK_NV_ray_tracing_validation" ) || ( extension == "VK_NV_cluster_acceleration_structure" ) || + ( extension == "VK_NV_partitioned_acceleration_structure" ) || ( extension == "VK_EXT_device_generated_commands" ) || + ( extension == "VK_KHR_maintenance8" ) || ( extension == "VK_MESA_image_alignment_control" ) || ( extension == "VK_EXT_depth_clamp_control" ) || + ( extension == "VK_KHR_maintenance9" ) || ( extension == "VK_KHR_video_maintenance2" ) || ( extension == "VK_HUAWEI_hdr_vivid" ) || + ( extension == "VK_NV_cooperative_matrix2" ) || ( extension == "VK_ARM_pipeline_opacity_micromap" ) +#if defined( VK_USE_PLATFORM_METAL_EXT ) + || ( extension == "VK_EXT_external_memory_metal" ) +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + || ( extension == "VK_KHR_depth_clamp_zero_one" ) || ( extension == "VK_EXT_vertex_attribute_robustness" ) || ( extension == "VK_ARM_format_pack" ) || + ( extension == "VK_VALVE_fragment_density_map_layered" ) || ( extension == "VK_KHR_robustness2" ) +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + || ( extension == "VK_NV_present_metering" ) +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + || ( extension == "VK_EXT_fragment_density_map_offset" ) || ( extension == "VK_EXT_zero_initialize_device_memory" ) || + ( extension == "VK_KHR_present_mode_fifo_latest_ready" ) || ( extension == "VK_SEC_pipeline_cache_incremental_mode" ); + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 bool isInstanceExtension( std::string const & extension ) + { + return ( extension == "VK_KHR_surface" ) || ( extension == "VK_KHR_display" ) +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + || ( extension == "VK_KHR_xlib_surface" ) +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ +#if defined( VK_USE_PLATFORM_XCB_KHR ) + || ( extension == "VK_KHR_xcb_surface" ) +#endif /*VK_USE_PLATFORM_XCB_KHR*/ +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + || ( extension == "VK_KHR_wayland_surface" ) +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + || ( extension == "VK_KHR_android_surface" ) +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + || ( extension == "VK_KHR_win32_surface" ) +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + || ( extension == "VK_EXT_debug_report" ) +#if defined( VK_USE_PLATFORM_GGP ) + || ( extension == "VK_GGP_stream_descriptor_surface" ) +#endif /*VK_USE_PLATFORM_GGP*/ + || ( extension == "VK_NV_external_memory_capabilities" ) || ( extension == "VK_KHR_get_physical_device_properties2" ) || + ( extension == "VK_EXT_validation_flags" ) +#if defined( VK_USE_PLATFORM_VI_NN ) + || ( extension == "VK_NN_vi_surface" ) +#endif /*VK_USE_PLATFORM_VI_NN*/ + || ( extension == "VK_KHR_device_group_creation" ) || ( extension == "VK_KHR_external_memory_capabilities" ) || + ( extension == "VK_KHR_external_semaphore_capabilities" ) || ( extension == "VK_EXT_direct_mode_display" ) +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + || ( extension == "VK_EXT_acquire_xlib_display" ) +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + || ( extension == "VK_EXT_display_surface_counter" ) || ( extension == "VK_EXT_swapchain_colorspace" ) || + ( extension == "VK_KHR_external_fence_capabilities" ) || ( extension == "VK_KHR_get_surface_capabilities2" ) || + ( extension == "VK_KHR_get_display_properties2" ) +#if defined( VK_USE_PLATFORM_IOS_MVK ) + || ( extension == "VK_MVK_ios_surface" ) +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + || ( extension == "VK_MVK_macos_surface" ) +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + || ( extension == "VK_EXT_debug_utils" ) +#if defined( VK_USE_PLATFORM_FUCHSIA ) + || ( extension == "VK_FUCHSIA_imagepipe_surface" ) +#endif /*VK_USE_PLATFORM_FUCHSIA*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + || ( extension == "VK_EXT_metal_surface" ) +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + || ( extension == "VK_KHR_surface_protected_capabilities" ) || ( extension == "VK_EXT_validation_features" ) || + ( extension == "VK_EXT_headless_surface" ) || ( extension == "VK_EXT_surface_maintenance1" ) || ( extension == "VK_EXT_acquire_drm_display" ) +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + || ( extension == "VK_EXT_directfb_surface" ) +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + || ( extension == "VK_QNX_screen_surface" ) +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + || ( extension == "VK_KHR_portability_enumeration" ) || ( extension == "VK_GOOGLE_surfaceless_query" ) || + ( extension == "VK_LUNARG_direct_driver_loading" ) || ( extension == "VK_KHR_surface_maintenance1" ) || ( extension == "VK_EXT_layer_settings" ) || + ( extension == "VK_NV_display_stereo" ) +#if defined( VK_USE_PLATFORM_OHOS ) + || ( extension == "VK_OHOS_surface" ) +#endif /*VK_USE_PLATFORM_OHOS*/ + ; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 bool isObsoletedExtension( std::string const & extension ) + { + return ( extension == "VK_AMD_negative_viewport_height" ); + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 bool isPromotedExtension( std::string const & extension ) + { + return ( extension == "VK_KHR_sampler_mirror_clamp_to_edge" ) || ( extension == "VK_EXT_debug_marker" ) || ( extension == "VK_AMD_draw_indirect_count" ) || + ( extension == "VK_KHR_dynamic_rendering" ) || ( extension == "VK_KHR_multiview" ) || +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + ( extension == "VK_NV_win32_keyed_mutex" ) || +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + ( extension == "VK_KHR_get_physical_device_properties2" ) || ( extension == "VK_KHR_device_group" ) || + ( extension == "VK_KHR_shader_draw_parameters" ) || ( extension == "VK_EXT_texture_compression_astc_hdr" ) || + ( extension == "VK_EXT_pipeline_robustness" ) || ( extension == "VK_KHR_maintenance1" ) || ( extension == "VK_KHR_device_group_creation" ) || + ( extension == "VK_KHR_external_memory_capabilities" ) || ( extension == "VK_KHR_external_memory" ) || + ( extension == "VK_KHR_external_semaphore_capabilities" ) || ( extension == "VK_KHR_external_semaphore" ) || + ( extension == "VK_KHR_push_descriptor" ) || ( extension == "VK_KHR_shader_float16_int8" ) || ( extension == "VK_KHR_16bit_storage" ) || + ( extension == "VK_KHR_descriptor_update_template" ) || ( extension == "VK_KHR_imageless_framebuffer" ) || + ( extension == "VK_KHR_create_renderpass2" ) || ( extension == "VK_KHR_external_fence_capabilities" ) || ( extension == "VK_KHR_external_fence" ) || + ( extension == "VK_KHR_maintenance2" ) || ( extension == "VK_KHR_variable_pointers" ) || ( extension == "VK_KHR_dedicated_allocation" ) || + ( extension == "VK_EXT_sampler_filter_minmax" ) || ( extension == "VK_KHR_storage_buffer_storage_class" ) || + ( extension == "VK_EXT_inline_uniform_block" ) || ( extension == "VK_KHR_relaxed_block_layout" ) || + ( extension == "VK_KHR_get_memory_requirements2" ) || ( extension == "VK_KHR_image_format_list" ) || + ( extension == "VK_KHR_sampler_ycbcr_conversion" ) || ( extension == "VK_KHR_bind_memory2" ) || ( extension == "VK_EXT_descriptor_indexing" ) || + ( extension == "VK_EXT_shader_viewport_index_layer" ) || ( extension == "VK_KHR_maintenance3" ) || ( extension == "VK_KHR_draw_indirect_count" ) || + ( extension == "VK_EXT_global_priority" ) || ( extension == "VK_KHR_shader_subgroup_extended_types" ) || ( extension == "VK_KHR_8bit_storage" ) || + ( extension == "VK_KHR_shader_atomic_int64" ) || ( extension == "VK_EXT_calibrated_timestamps" ) || ( extension == "VK_KHR_global_priority" ) || + ( extension == "VK_EXT_vertex_attribute_divisor" ) || ( extension == "VK_EXT_pipeline_creation_feedback" ) || + ( extension == "VK_KHR_driver_properties" ) || ( extension == "VK_KHR_shader_float_controls" ) || ( extension == "VK_KHR_depth_stencil_resolve" ) || + ( extension == "VK_NV_compute_shader_derivatives" ) || ( extension == "VK_NV_fragment_shader_barycentric" ) || + ( extension == "VK_KHR_timeline_semaphore" ) || ( extension == "VK_KHR_vulkan_memory_model" ) || + ( extension == "VK_KHR_shader_terminate_invocation" ) || ( extension == "VK_EXT_scalar_block_layout" ) || + ( extension == "VK_EXT_subgroup_size_control" ) || ( extension == "VK_KHR_dynamic_rendering_local_read" ) || ( extension == "VK_KHR_spirv_1_4" ) || + ( extension == "VK_KHR_separate_depth_stencil_layouts" ) || ( extension == "VK_EXT_tooling_info" ) || + ( extension == "VK_EXT_separate_stencil_usage" ) || ( extension == "VK_KHR_uniform_buffer_standard_layout" ) || + ( extension == "VK_KHR_buffer_device_address" ) || ( extension == "VK_EXT_line_rasterization" ) || ( extension == "VK_EXT_host_query_reset" ) || + ( extension == "VK_EXT_index_type_uint8" ) || ( extension == "VK_EXT_extended_dynamic_state" ) || ( extension == "VK_EXT_host_image_copy" ) || + ( extension == "VK_KHR_map_memory2" ) || ( extension == "VK_EXT_surface_maintenance1" ) || ( extension == "VK_EXT_swapchain_maintenance1" ) || + ( extension == "VK_EXT_shader_demote_to_helper_invocation" ) || ( extension == "VK_KHR_shader_integer_dot_product" ) || + ( extension == "VK_EXT_texel_buffer_alignment" ) || ( extension == "VK_EXT_robustness2" ) || ( extension == "VK_KHR_shader_non_semantic_info" ) || + ( extension == "VK_EXT_private_data" ) || ( extension == "VK_EXT_pipeline_creation_cache_control" ) || ( extension == "VK_KHR_synchronization2" ) || + ( extension == "VK_KHR_zero_initialize_workgroup_memory" ) || ( extension == "VK_EXT_ycbcr_2plane_444_formats" ) || + ( extension == "VK_EXT_image_robustness" ) || ( extension == "VK_KHR_copy_commands2" ) || ( extension == "VK_EXT_4444_formats" ) || + ( extension == "VK_ARM_rasterization_order_attachment_access" ) || ( extension == "VK_VALVE_mutable_descriptor_type" ) || + ( extension == "VK_KHR_format_feature_flags2" ) || ( extension == "VK_EXT_present_mode_fifo_latest_ready" ) || + ( extension == "VK_EXT_extended_dynamic_state2" ) || ( extension == "VK_EXT_global_priority_query" ) || + ( extension == "VK_EXT_load_store_op_none" ) || ( extension == "VK_KHR_maintenance4" ) || ( extension == "VK_KHR_shader_subgroup_rotate" ) || + ( extension == "VK_EXT_depth_clamp_zero_one" ) || ( extension == "VK_QCOM_fragment_density_map_offset" ) || + ( extension == "VK_EXT_pipeline_protected_access" ) || ( extension == "VK_KHR_maintenance5" ) || + ( extension == "VK_KHR_vertex_attribute_divisor" ) || ( extension == "VK_KHR_load_store_op_none" ) || + ( extension == "VK_KHR_shader_float_controls2" ) || ( extension == "VK_KHR_index_type_uint8" ) || ( extension == "VK_KHR_line_rasterization" ) || + ( extension == "VK_KHR_shader_expect_assume" ) || ( extension == "VK_KHR_maintenance6" ) || ( extension == "VK_EXT_vertex_attribute_robustness" ); + } +} // namespace VULKAN_HPP_NAMESPACE + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_format_traits.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_format_traits.hpp new file mode 100644 index 0000000000..5e5741703e --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_format_traits.hpp @@ -0,0 +1,9646 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_FORMAT_TRAITS_HPP +#define VULKAN_FORMAT_TRAITS_HPP + +#include + +namespace VULKAN_HPP_NAMESPACE +{ + //===================== + //=== Format Traits === + //===================== + + //=== Function Declarations === + + // The three-dimensional extent of a texel block. + VULKAN_HPP_CONSTEXPR_14 std::array blockExtent( Format format ); + + // The texel block size in bytes. + VULKAN_HPP_CONSTEXPR_14 uint8_t blockSize( Format format ); + + // The class of the format (can't be just named "class"!) + VULKAN_HPP_CONSTEXPR_14 char const * compatibilityClass( Format format ); + + // The number of bits in this component, if not compressed, otherwise 0. + VULKAN_HPP_CONSTEXPR_14 uint8_t componentBits( Format format, uint8_t component ); + + // The number of components of this format. + VULKAN_HPP_CONSTEXPR_14 uint8_t componentCount( Format format ); + + // The name of the component + VULKAN_HPP_CONSTEXPR_14 char const * componentName( Format format, uint8_t component ); + + // The numeric format of the component + VULKAN_HPP_CONSTEXPR_14 char const * componentNumericFormat( Format format, uint8_t component ); + + // The plane this component lies in. + VULKAN_HPP_CONSTEXPR_14 uint8_t componentPlaneIndex( Format format, uint8_t component ); + + // True, if the components of this format are compressed, otherwise false. + VULKAN_HPP_CONSTEXPR_14 bool componentsAreCompressed( Format format ); + + // A textual description of the compression scheme, or an empty string if it is not compressed + VULKAN_HPP_CONSTEXPR_14 char const * compressionScheme( Format format ); + + // Get all formats + std::vector const & getAllFormats(); + + // Get all color with a color component + std::vector const & getColorFormats(); + + // Get all formats with a depth component + std::vector const & getDepthFormats(); + + // Get all formats with a depth and a stencil component + std::vector const & getDepthStencilFormats(); + + // Get all formats with a stencil component + std::vector const & getStencilFormats(); + + // True, if this format has an alpha component + VULKAN_HPP_CONSTEXPR_14 bool hasAlphaComponent( Format format ); + + // True, if this format has a blue component + VULKAN_HPP_CONSTEXPR_14 bool hasBlueComponent( Format format ); + + // True, if this format has a depth component + VULKAN_HPP_CONSTEXPR_14 bool hasDepthComponent( Format format ); + + // True, if this format has a green component + VULKAN_HPP_CONSTEXPR_14 bool hasGreenComponent( Format format ); + + // True, if this format has a red component + VULKAN_HPP_CONSTEXPR_14 bool hasRedComponent( Format format ); + + // True, if this format has a stencil component + VULKAN_HPP_CONSTEXPR_14 bool hasStencilComponent( Format format ); + + // True, if the format is a color + VULKAN_HPP_CONSTEXPR_14 bool isColor( Format format ); + + // True, if this format is a compressed one. + VULKAN_HPP_CONSTEXPR_14 bool isCompressed( Format format ); + + // The number of bits into which the format is packed. A single image element in this format can be stored in the same space as a scalar type of this bit + // width. + VULKAN_HPP_CONSTEXPR_14 uint8_t packed( Format format ); + + // The single-plane format that this plane is compatible with. + VULKAN_HPP_CONSTEXPR_14 Format planeCompatibleFormat( Format format, uint8_t plane ); + + // The number of image planes of this format. + VULKAN_HPP_CONSTEXPR_14 uint8_t planeCount( Format format ); + + // The relative height of this plane. A value of k means that this plane is 1/k the height of the overall format. + VULKAN_HPP_CONSTEXPR_14 uint8_t planeHeightDivisor( Format format, uint8_t plane ); + + // The relative width of this plane. A value of k means that this plane is 1/k the width of the overall format. + VULKAN_HPP_CONSTEXPR_14 uint8_t planeWidthDivisor( Format format, uint8_t plane ); + + // The number of texels in a texel block. + VULKAN_HPP_CONSTEXPR_14 uint8_t texelsPerBlock( Format format ); + + //=== Function Definitions === + + // The three-dimensional extent of a texel block. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 std::array blockExtent( Format format ) + { + switch ( format ) + { + case Format::eBc1RgbUnormBlock : return { { 4, 4, 1 } }; + case Format::eBc1RgbSrgbBlock : return { { 4, 4, 1 } }; + case Format::eBc1RgbaUnormBlock : return { { 4, 4, 1 } }; + case Format::eBc1RgbaSrgbBlock : return { { 4, 4, 1 } }; + case Format::eBc2UnormBlock : return { { 4, 4, 1 } }; + case Format::eBc2SrgbBlock : return { { 4, 4, 1 } }; + case Format::eBc3UnormBlock : return { { 4, 4, 1 } }; + case Format::eBc3SrgbBlock : return { { 4, 4, 1 } }; + case Format::eBc4UnormBlock : return { { 4, 4, 1 } }; + case Format::eBc4SnormBlock : return { { 4, 4, 1 } }; + case Format::eBc5UnormBlock : return { { 4, 4, 1 } }; + case Format::eBc5SnormBlock : return { { 4, 4, 1 } }; + case Format::eBc6HUfloatBlock : return { { 4, 4, 1 } }; + case Format::eBc6HSfloatBlock : return { { 4, 4, 1 } }; + case Format::eBc7UnormBlock : return { { 4, 4, 1 } }; + case Format::eBc7SrgbBlock : return { { 4, 4, 1 } }; + case Format::eEtc2R8G8B8UnormBlock : return { { 4, 4, 1 } }; + case Format::eEtc2R8G8B8SrgbBlock : return { { 4, 4, 1 } }; + case Format::eEtc2R8G8B8A1UnormBlock : return { { 4, 4, 1 } }; + case Format::eEtc2R8G8B8A1SrgbBlock : return { { 4, 4, 1 } }; + case Format::eEtc2R8G8B8A8UnormBlock : return { { 4, 4, 1 } }; + case Format::eEtc2R8G8B8A8SrgbBlock : return { { 4, 4, 1 } }; + case Format::eEacR11UnormBlock : return { { 4, 4, 1 } }; + case Format::eEacR11SnormBlock : return { { 4, 4, 1 } }; + case Format::eEacR11G11UnormBlock : return { { 4, 4, 1 } }; + case Format::eEacR11G11SnormBlock : return { { 4, 4, 1 } }; + case Format::eAstc4x4UnormBlock : return { { 4, 4, 1 } }; + case Format::eAstc4x4SrgbBlock : return { { 4, 4, 1 } }; + case Format::eAstc5x4UnormBlock : return { { 5, 4, 1 } }; + case Format::eAstc5x4SrgbBlock : return { { 5, 4, 1 } }; + case Format::eAstc5x5UnormBlock : return { { 5, 5, 1 } }; + case Format::eAstc5x5SrgbBlock : return { { 5, 5, 1 } }; + case Format::eAstc6x5UnormBlock : return { { 6, 5, 1 } }; + case Format::eAstc6x5SrgbBlock : return { { 6, 5, 1 } }; + case Format::eAstc6x6UnormBlock : return { { 6, 6, 1 } }; + case Format::eAstc6x6SrgbBlock : return { { 6, 6, 1 } }; + case Format::eAstc8x5UnormBlock : return { { 8, 5, 1 } }; + case Format::eAstc8x5SrgbBlock : return { { 8, 5, 1 } }; + case Format::eAstc8x6UnormBlock : return { { 8, 6, 1 } }; + case Format::eAstc8x6SrgbBlock : return { { 8, 6, 1 } }; + case Format::eAstc8x8UnormBlock : return { { 8, 8, 1 } }; + case Format::eAstc8x8SrgbBlock : return { { 8, 8, 1 } }; + case Format::eAstc10x5UnormBlock : return { { 10, 5, 1 } }; + case Format::eAstc10x5SrgbBlock : return { { 10, 5, 1 } }; + case Format::eAstc10x6UnormBlock : return { { 10, 6, 1 } }; + case Format::eAstc10x6SrgbBlock : return { { 10, 6, 1 } }; + case Format::eAstc10x8UnormBlock : return { { 10, 8, 1 } }; + case Format::eAstc10x8SrgbBlock : return { { 10, 8, 1 } }; + case Format::eAstc10x10UnormBlock : return { { 10, 10, 1 } }; + case Format::eAstc10x10SrgbBlock : return { { 10, 10, 1 } }; + case Format::eAstc12x10UnormBlock : return { { 12, 10, 1 } }; + case Format::eAstc12x10SrgbBlock : return { { 12, 10, 1 } }; + case Format::eAstc12x12UnormBlock : return { { 12, 12, 1 } }; + case Format::eAstc12x12SrgbBlock : return { { 12, 12, 1 } }; + case Format::eG8B8G8R8422Unorm : return { { 2, 1, 1 } }; + case Format::eB8G8R8G8422Unorm : return { { 2, 1, 1 } }; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return { { 2, 1, 1 } }; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return { { 2, 1, 1 } }; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return { { 2, 1, 1 } }; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return { { 2, 1, 1 } }; + case Format::eG16B16G16R16422Unorm : return { { 2, 1, 1 } }; + case Format::eB16G16R16G16422Unorm : return { { 2, 1, 1 } }; + case Format::eAstc4x4SfloatBlock : return { { 4, 4, 1 } }; + case Format::eAstc5x4SfloatBlock : return { { 5, 4, 1 } }; + case Format::eAstc5x5SfloatBlock : return { { 5, 5, 1 } }; + case Format::eAstc6x5SfloatBlock : return { { 6, 5, 1 } }; + case Format::eAstc6x6SfloatBlock : return { { 6, 6, 1 } }; + case Format::eAstc8x5SfloatBlock : return { { 8, 5, 1 } }; + case Format::eAstc8x6SfloatBlock : return { { 8, 6, 1 } }; + case Format::eAstc8x8SfloatBlock : return { { 8, 8, 1 } }; + case Format::eAstc10x5SfloatBlock : return { { 10, 5, 1 } }; + case Format::eAstc10x6SfloatBlock : return { { 10, 6, 1 } }; + case Format::eAstc10x8SfloatBlock : return { { 10, 8, 1 } }; + case Format::eAstc10x10SfloatBlock : return { { 10, 10, 1 } }; + case Format::eAstc12x10SfloatBlock : return { { 12, 10, 1 } }; + case Format::eAstc12x12SfloatBlock : return { { 12, 12, 1 } }; + case Format::ePvrtc12BppUnormBlockIMG : return { { 8, 4, 1 } }; + case Format::ePvrtc14BppUnormBlockIMG : return { { 4, 4, 1 } }; + case Format::ePvrtc22BppUnormBlockIMG : return { { 8, 4, 1 } }; + case Format::ePvrtc24BppUnormBlockIMG : return { { 4, 4, 1 } }; + case Format::ePvrtc12BppSrgbBlockIMG : return { { 8, 4, 1 } }; + case Format::ePvrtc14BppSrgbBlockIMG : return { { 4, 4, 1 } }; + case Format::ePvrtc22BppSrgbBlockIMG : return { { 8, 4, 1 } }; + case Format::ePvrtc24BppSrgbBlockIMG : return { { 4, 4, 1 } }; + + default: return { { 1, 1, 1 } }; + } + } + + // The texel block size in bytes. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t blockSize( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8 : return 1; + case Format::eR4G4B4A4UnormPack16 : return 2; + case Format::eB4G4R4A4UnormPack16 : return 2; + case Format::eR5G6B5UnormPack16 : return 2; + case Format::eB5G6R5UnormPack16 : return 2; + case Format::eR5G5B5A1UnormPack16 : return 2; + case Format::eB5G5R5A1UnormPack16 : return 2; + case Format::eA1R5G5B5UnormPack16 : return 2; + case Format::eR8Unorm : return 1; + case Format::eR8Snorm : return 1; + case Format::eR8Uscaled : return 1; + case Format::eR8Sscaled : return 1; + case Format::eR8Uint : return 1; + case Format::eR8Sint : return 1; + case Format::eR8Srgb : return 1; + case Format::eR8G8Unorm : return 2; + case Format::eR8G8Snorm : return 2; + case Format::eR8G8Uscaled : return 2; + case Format::eR8G8Sscaled : return 2; + case Format::eR8G8Uint : return 2; + case Format::eR8G8Sint : return 2; + case Format::eR8G8Srgb : return 2; + case Format::eR8G8B8Unorm : return 3; + case Format::eR8G8B8Snorm : return 3; + case Format::eR8G8B8Uscaled : return 3; + case Format::eR8G8B8Sscaled : return 3; + case Format::eR8G8B8Uint : return 3; + case Format::eR8G8B8Sint : return 3; + case Format::eR8G8B8Srgb : return 3; + case Format::eB8G8R8Unorm : return 3; + case Format::eB8G8R8Snorm : return 3; + case Format::eB8G8R8Uscaled : return 3; + case Format::eB8G8R8Sscaled : return 3; + case Format::eB8G8R8Uint : return 3; + case Format::eB8G8R8Sint : return 3; + case Format::eB8G8R8Srgb : return 3; + case Format::eR8G8B8A8Unorm : return 4; + case Format::eR8G8B8A8Snorm : return 4; + case Format::eR8G8B8A8Uscaled : return 4; + case Format::eR8G8B8A8Sscaled : return 4; + case Format::eR8G8B8A8Uint : return 4; + case Format::eR8G8B8A8Sint : return 4; + case Format::eR8G8B8A8Srgb : return 4; + case Format::eB8G8R8A8Unorm : return 4; + case Format::eB8G8R8A8Snorm : return 4; + case Format::eB8G8R8A8Uscaled : return 4; + case Format::eB8G8R8A8Sscaled : return 4; + case Format::eB8G8R8A8Uint : return 4; + case Format::eB8G8R8A8Sint : return 4; + case Format::eB8G8R8A8Srgb : return 4; + case Format::eA8B8G8R8UnormPack32 : return 4; + case Format::eA8B8G8R8SnormPack32 : return 4; + case Format::eA8B8G8R8UscaledPack32 : return 4; + case Format::eA8B8G8R8SscaledPack32 : return 4; + case Format::eA8B8G8R8UintPack32 : return 4; + case Format::eA8B8G8R8SintPack32 : return 4; + case Format::eA8B8G8R8SrgbPack32 : return 4; + case Format::eA2R10G10B10UnormPack32 : return 4; + case Format::eA2R10G10B10SnormPack32 : return 4; + case Format::eA2R10G10B10UscaledPack32 : return 4; + case Format::eA2R10G10B10SscaledPack32 : return 4; + case Format::eA2R10G10B10UintPack32 : return 4; + case Format::eA2R10G10B10SintPack32 : return 4; + case Format::eA2B10G10R10UnormPack32 : return 4; + case Format::eA2B10G10R10SnormPack32 : return 4; + case Format::eA2B10G10R10UscaledPack32 : return 4; + case Format::eA2B10G10R10SscaledPack32 : return 4; + case Format::eA2B10G10R10UintPack32 : return 4; + case Format::eA2B10G10R10SintPack32 : return 4; + case Format::eR16Unorm : return 2; + case Format::eR16Snorm : return 2; + case Format::eR16Uscaled : return 2; + case Format::eR16Sscaled : return 2; + case Format::eR16Uint : return 2; + case Format::eR16Sint : return 2; + case Format::eR16Sfloat : return 2; + case Format::eR16G16Unorm : return 4; + case Format::eR16G16Snorm : return 4; + case Format::eR16G16Uscaled : return 4; + case Format::eR16G16Sscaled : return 4; + case Format::eR16G16Uint : return 4; + case Format::eR16G16Sint : return 4; + case Format::eR16G16Sfloat : return 4; + case Format::eR16G16B16Unorm : return 6; + case Format::eR16G16B16Snorm : return 6; + case Format::eR16G16B16Uscaled : return 6; + case Format::eR16G16B16Sscaled : return 6; + case Format::eR16G16B16Uint : return 6; + case Format::eR16G16B16Sint : return 6; + case Format::eR16G16B16Sfloat : return 6; + case Format::eR16G16B16A16Unorm : return 8; + case Format::eR16G16B16A16Snorm : return 8; + case Format::eR16G16B16A16Uscaled : return 8; + case Format::eR16G16B16A16Sscaled : return 8; + case Format::eR16G16B16A16Uint : return 8; + case Format::eR16G16B16A16Sint : return 8; + case Format::eR16G16B16A16Sfloat : return 8; + case Format::eR32Uint : return 4; + case Format::eR32Sint : return 4; + case Format::eR32Sfloat : return 4; + case Format::eR32G32Uint : return 8; + case Format::eR32G32Sint : return 8; + case Format::eR32G32Sfloat : return 8; + case Format::eR32G32B32Uint : return 12; + case Format::eR32G32B32Sint : return 12; + case Format::eR32G32B32Sfloat : return 12; + case Format::eR32G32B32A32Uint : return 16; + case Format::eR32G32B32A32Sint : return 16; + case Format::eR32G32B32A32Sfloat : return 16; + case Format::eR64Uint : return 8; + case Format::eR64Sint : return 8; + case Format::eR64Sfloat : return 8; + case Format::eR64G64Uint : return 16; + case Format::eR64G64Sint : return 16; + case Format::eR64G64Sfloat : return 16; + case Format::eR64G64B64Uint : return 24; + case Format::eR64G64B64Sint : return 24; + case Format::eR64G64B64Sfloat : return 24; + case Format::eR64G64B64A64Uint : return 32; + case Format::eR64G64B64A64Sint : return 32; + case Format::eR64G64B64A64Sfloat : return 32; + case Format::eB10G11R11UfloatPack32 : return 4; + case Format::eE5B9G9R9UfloatPack32 : return 4; + case Format::eD16Unorm : return 2; + case Format::eX8D24UnormPack32 : return 4; + case Format::eD32Sfloat : return 4; + case Format::eS8Uint : return 1; + case Format::eD16UnormS8Uint : return 3; + case Format::eD24UnormS8Uint : return 4; + case Format::eD32SfloatS8Uint : return 5; + case Format::eBc1RgbUnormBlock : return 8; + case Format::eBc1RgbSrgbBlock : return 8; + case Format::eBc1RgbaUnormBlock : return 8; + case Format::eBc1RgbaSrgbBlock : return 8; + case Format::eBc2UnormBlock : return 16; + case Format::eBc2SrgbBlock : return 16; + case Format::eBc3UnormBlock : return 16; + case Format::eBc3SrgbBlock : return 16; + case Format::eBc4UnormBlock : return 8; + case Format::eBc4SnormBlock : return 8; + case Format::eBc5UnormBlock : return 16; + case Format::eBc5SnormBlock : return 16; + case Format::eBc6HUfloatBlock : return 16; + case Format::eBc6HSfloatBlock : return 16; + case Format::eBc7UnormBlock : return 16; + case Format::eBc7SrgbBlock : return 16; + case Format::eEtc2R8G8B8UnormBlock : return 8; + case Format::eEtc2R8G8B8SrgbBlock : return 8; + case Format::eEtc2R8G8B8A1UnormBlock : return 8; + case Format::eEtc2R8G8B8A1SrgbBlock : return 8; + case Format::eEtc2R8G8B8A8UnormBlock : return 16; + case Format::eEtc2R8G8B8A8SrgbBlock : return 16; + case Format::eEacR11UnormBlock : return 8; + case Format::eEacR11SnormBlock : return 8; + case Format::eEacR11G11UnormBlock : return 16; + case Format::eEacR11G11SnormBlock : return 16; + case Format::eAstc4x4UnormBlock : return 16; + case Format::eAstc4x4SrgbBlock : return 16; + case Format::eAstc5x4UnormBlock : return 16; + case Format::eAstc5x4SrgbBlock : return 16; + case Format::eAstc5x5UnormBlock : return 16; + case Format::eAstc5x5SrgbBlock : return 16; + case Format::eAstc6x5UnormBlock : return 16; + case Format::eAstc6x5SrgbBlock : return 16; + case Format::eAstc6x6UnormBlock : return 16; + case Format::eAstc6x6SrgbBlock : return 16; + case Format::eAstc8x5UnormBlock : return 16; + case Format::eAstc8x5SrgbBlock : return 16; + case Format::eAstc8x6UnormBlock : return 16; + case Format::eAstc8x6SrgbBlock : return 16; + case Format::eAstc8x8UnormBlock : return 16; + case Format::eAstc8x8SrgbBlock : return 16; + case Format::eAstc10x5UnormBlock : return 16; + case Format::eAstc10x5SrgbBlock : return 16; + case Format::eAstc10x6UnormBlock : return 16; + case Format::eAstc10x6SrgbBlock : return 16; + case Format::eAstc10x8UnormBlock : return 16; + case Format::eAstc10x8SrgbBlock : return 16; + case Format::eAstc10x10UnormBlock : return 16; + case Format::eAstc10x10SrgbBlock : return 16; + case Format::eAstc12x10UnormBlock : return 16; + case Format::eAstc12x10SrgbBlock : return 16; + case Format::eAstc12x12UnormBlock : return 16; + case Format::eAstc12x12SrgbBlock : return 16; + case Format::eG8B8G8R8422Unorm : return 4; + case Format::eB8G8R8G8422Unorm : return 4; + case Format::eG8B8R83Plane420Unorm : return 3; + case Format::eG8B8R82Plane420Unorm : return 3; + case Format::eG8B8R83Plane422Unorm : return 3; + case Format::eG8B8R82Plane422Unorm : return 3; + case Format::eG8B8R83Plane444Unorm : return 3; + case Format::eR10X6UnormPack16 : return 2; + case Format::eR10X6G10X6Unorm2Pack16 : return 4; + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16 : return 8; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16 : return 8; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16 : return 8; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return 6; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return 6; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return 6; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return 6; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return 6; + case Format::eR12X4UnormPack16 : return 2; + case Format::eR12X4G12X4Unorm2Pack16 : return 4; + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16 : return 8; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16 : return 8; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16 : return 8; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return 6; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return 6; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return 6; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return 6; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return 6; + case Format::eG16B16G16R16422Unorm : return 8; + case Format::eB16G16R16G16422Unorm : return 8; + case Format::eG16B16R163Plane420Unorm : return 6; + case Format::eG16B16R162Plane420Unorm : return 6; + case Format::eG16B16R163Plane422Unorm : return 6; + case Format::eG16B16R162Plane422Unorm : return 6; + case Format::eG16B16R163Plane444Unorm : return 6; + case Format::eG8B8R82Plane444Unorm : return 3; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return 6; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return 6; + case Format::eG16B16R162Plane444Unorm : return 6; + case Format::eA4R4G4B4UnormPack16 : return 2; + case Format::eA4B4G4R4UnormPack16 : return 2; + case Format::eAstc4x4SfloatBlock : return 16; + case Format::eAstc5x4SfloatBlock : return 16; + case Format::eAstc5x5SfloatBlock : return 16; + case Format::eAstc6x5SfloatBlock : return 16; + case Format::eAstc6x6SfloatBlock : return 16; + case Format::eAstc8x5SfloatBlock : return 16; + case Format::eAstc8x6SfloatBlock : return 16; + case Format::eAstc8x8SfloatBlock : return 16; + case Format::eAstc10x5SfloatBlock : return 16; + case Format::eAstc10x6SfloatBlock : return 16; + case Format::eAstc10x8SfloatBlock : return 16; + case Format::eAstc10x10SfloatBlock : return 16; + case Format::eAstc12x10SfloatBlock : return 16; + case Format::eAstc12x12SfloatBlock : return 16; + case Format::eA1B5G5R5UnormPack16 : return 2; + case Format::eA8Unorm : return 1; + case Format::ePvrtc12BppUnormBlockIMG : return 8; + case Format::ePvrtc14BppUnormBlockIMG : return 8; + case Format::ePvrtc22BppUnormBlockIMG : return 8; + case Format::ePvrtc24BppUnormBlockIMG : return 8; + case Format::ePvrtc12BppSrgbBlockIMG : return 8; + case Format::ePvrtc14BppSrgbBlockIMG : return 8; + case Format::ePvrtc22BppSrgbBlockIMG : return 8; + case Format::ePvrtc24BppSrgbBlockIMG : return 8; + case Format::eR8BoolARM : return 1; + case Format::eR16G16Sfixed5NV : return 4; + case Format::eR10X6UintPack16ARM : return 2; + case Format::eR10X6G10X6Uint2Pack16ARM : return 4; + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM : return 8; + case Format::eR12X4UintPack16ARM : return 2; + case Format::eR12X4G12X4Uint2Pack16ARM : return 4; + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM : return 8; + case Format::eR14X2UintPack16ARM : return 2; + case Format::eR14X2G14X2Uint2Pack16ARM : return 4; + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM : return 8; + case Format::eR14X2UnormPack16ARM : return 2; + case Format::eR14X2G14X2Unorm2Pack16ARM : return 4; + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM : return 8; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return 6; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return 6; + + default: VULKAN_HPP_ASSERT( false ); return 0; + } + } + + // The class of the format (can't be just named "class"!) + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * compatibilityClass( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8 : return "8-bit"; + case Format::eR4G4B4A4UnormPack16 : return "16-bit"; + case Format::eB4G4R4A4UnormPack16 : return "16-bit"; + case Format::eR5G6B5UnormPack16 : return "16-bit"; + case Format::eB5G6R5UnormPack16 : return "16-bit"; + case Format::eR5G5B5A1UnormPack16 : return "16-bit"; + case Format::eB5G5R5A1UnormPack16 : return "16-bit"; + case Format::eA1R5G5B5UnormPack16 : return "16-bit"; + case Format::eR8Unorm : return "8-bit"; + case Format::eR8Snorm : return "8-bit"; + case Format::eR8Uscaled : return "8-bit"; + case Format::eR8Sscaled : return "8-bit"; + case Format::eR8Uint : return "8-bit"; + case Format::eR8Sint : return "8-bit"; + case Format::eR8Srgb : return "8-bit"; + case Format::eR8G8Unorm : return "16-bit"; + case Format::eR8G8Snorm : return "16-bit"; + case Format::eR8G8Uscaled : return "16-bit"; + case Format::eR8G8Sscaled : return "16-bit"; + case Format::eR8G8Uint : return "16-bit"; + case Format::eR8G8Sint : return "16-bit"; + case Format::eR8G8Srgb : return "16-bit"; + case Format::eR8G8B8Unorm : return "24-bit"; + case Format::eR8G8B8Snorm : return "24-bit"; + case Format::eR8G8B8Uscaled : return "24-bit"; + case Format::eR8G8B8Sscaled : return "24-bit"; + case Format::eR8G8B8Uint : return "24-bit"; + case Format::eR8G8B8Sint : return "24-bit"; + case Format::eR8G8B8Srgb : return "24-bit"; + case Format::eB8G8R8Unorm : return "24-bit"; + case Format::eB8G8R8Snorm : return "24-bit"; + case Format::eB8G8R8Uscaled : return "24-bit"; + case Format::eB8G8R8Sscaled : return "24-bit"; + case Format::eB8G8R8Uint : return "24-bit"; + case Format::eB8G8R8Sint : return "24-bit"; + case Format::eB8G8R8Srgb : return "24-bit"; + case Format::eR8G8B8A8Unorm : return "32-bit"; + case Format::eR8G8B8A8Snorm : return "32-bit"; + case Format::eR8G8B8A8Uscaled : return "32-bit"; + case Format::eR8G8B8A8Sscaled : return "32-bit"; + case Format::eR8G8B8A8Uint : return "32-bit"; + case Format::eR8G8B8A8Sint : return "32-bit"; + case Format::eR8G8B8A8Srgb : return "32-bit"; + case Format::eB8G8R8A8Unorm : return "32-bit"; + case Format::eB8G8R8A8Snorm : return "32-bit"; + case Format::eB8G8R8A8Uscaled : return "32-bit"; + case Format::eB8G8R8A8Sscaled : return "32-bit"; + case Format::eB8G8R8A8Uint : return "32-bit"; + case Format::eB8G8R8A8Sint : return "32-bit"; + case Format::eB8G8R8A8Srgb : return "32-bit"; + case Format::eA8B8G8R8UnormPack32 : return "32-bit"; + case Format::eA8B8G8R8SnormPack32 : return "32-bit"; + case Format::eA8B8G8R8UscaledPack32 : return "32-bit"; + case Format::eA8B8G8R8SscaledPack32 : return "32-bit"; + case Format::eA8B8G8R8UintPack32 : return "32-bit"; + case Format::eA8B8G8R8SintPack32 : return "32-bit"; + case Format::eA8B8G8R8SrgbPack32 : return "32-bit"; + case Format::eA2R10G10B10UnormPack32 : return "32-bit"; + case Format::eA2R10G10B10SnormPack32 : return "32-bit"; + case Format::eA2R10G10B10UscaledPack32 : return "32-bit"; + case Format::eA2R10G10B10SscaledPack32 : return "32-bit"; + case Format::eA2R10G10B10UintPack32 : return "32-bit"; + case Format::eA2R10G10B10SintPack32 : return "32-bit"; + case Format::eA2B10G10R10UnormPack32 : return "32-bit"; + case Format::eA2B10G10R10SnormPack32 : return "32-bit"; + case Format::eA2B10G10R10UscaledPack32 : return "32-bit"; + case Format::eA2B10G10R10SscaledPack32 : return "32-bit"; + case Format::eA2B10G10R10UintPack32 : return "32-bit"; + case Format::eA2B10G10R10SintPack32 : return "32-bit"; + case Format::eR16Unorm : return "16-bit"; + case Format::eR16Snorm : return "16-bit"; + case Format::eR16Uscaled : return "16-bit"; + case Format::eR16Sscaled : return "16-bit"; + case Format::eR16Uint : return "16-bit"; + case Format::eR16Sint : return "16-bit"; + case Format::eR16Sfloat : return "16-bit"; + case Format::eR16G16Unorm : return "32-bit"; + case Format::eR16G16Snorm : return "32-bit"; + case Format::eR16G16Uscaled : return "32-bit"; + case Format::eR16G16Sscaled : return "32-bit"; + case Format::eR16G16Uint : return "32-bit"; + case Format::eR16G16Sint : return "32-bit"; + case Format::eR16G16Sfloat : return "32-bit"; + case Format::eR16G16B16Unorm : return "48-bit"; + case Format::eR16G16B16Snorm : return "48-bit"; + case Format::eR16G16B16Uscaled : return "48-bit"; + case Format::eR16G16B16Sscaled : return "48-bit"; + case Format::eR16G16B16Uint : return "48-bit"; + case Format::eR16G16B16Sint : return "48-bit"; + case Format::eR16G16B16Sfloat : return "48-bit"; + case Format::eR16G16B16A16Unorm : return "64-bit"; + case Format::eR16G16B16A16Snorm : return "64-bit"; + case Format::eR16G16B16A16Uscaled : return "64-bit"; + case Format::eR16G16B16A16Sscaled : return "64-bit"; + case Format::eR16G16B16A16Uint : return "64-bit"; + case Format::eR16G16B16A16Sint : return "64-bit"; + case Format::eR16G16B16A16Sfloat : return "64-bit"; + case Format::eR32Uint : return "32-bit"; + case Format::eR32Sint : return "32-bit"; + case Format::eR32Sfloat : return "32-bit"; + case Format::eR32G32Uint : return "64-bit"; + case Format::eR32G32Sint : return "64-bit"; + case Format::eR32G32Sfloat : return "64-bit"; + case Format::eR32G32B32Uint : return "96-bit"; + case Format::eR32G32B32Sint : return "96-bit"; + case Format::eR32G32B32Sfloat : return "96-bit"; + case Format::eR32G32B32A32Uint : return "128-bit"; + case Format::eR32G32B32A32Sint : return "128-bit"; + case Format::eR32G32B32A32Sfloat : return "128-bit"; + case Format::eR64Uint : return "64-bit"; + case Format::eR64Sint : return "64-bit"; + case Format::eR64Sfloat : return "64-bit"; + case Format::eR64G64Uint : return "128-bit"; + case Format::eR64G64Sint : return "128-bit"; + case Format::eR64G64Sfloat : return "128-bit"; + case Format::eR64G64B64Uint : return "192-bit"; + case Format::eR64G64B64Sint : return "192-bit"; + case Format::eR64G64B64Sfloat : return "192-bit"; + case Format::eR64G64B64A64Uint : return "256-bit"; + case Format::eR64G64B64A64Sint : return "256-bit"; + case Format::eR64G64B64A64Sfloat : return "256-bit"; + case Format::eB10G11R11UfloatPack32 : return "32-bit"; + case Format::eE5B9G9R9UfloatPack32 : return "32-bit"; + case Format::eD16Unorm : return "D16"; + case Format::eX8D24UnormPack32 : return "D24"; + case Format::eD32Sfloat : return "D32"; + case Format::eS8Uint : return "S8"; + case Format::eD16UnormS8Uint : return "D16S8"; + case Format::eD24UnormS8Uint : return "D24S8"; + case Format::eD32SfloatS8Uint : return "D32S8"; + case Format::eBc1RgbUnormBlock : return "BC1_RGB"; + case Format::eBc1RgbSrgbBlock : return "BC1_RGB"; + case Format::eBc1RgbaUnormBlock : return "BC1_RGBA"; + case Format::eBc1RgbaSrgbBlock : return "BC1_RGBA"; + case Format::eBc2UnormBlock : return "BC2"; + case Format::eBc2SrgbBlock : return "BC2"; + case Format::eBc3UnormBlock : return "BC3"; + case Format::eBc3SrgbBlock : return "BC3"; + case Format::eBc4UnormBlock : return "BC4"; + case Format::eBc4SnormBlock : return "BC4"; + case Format::eBc5UnormBlock : return "BC5"; + case Format::eBc5SnormBlock : return "BC5"; + case Format::eBc6HUfloatBlock : return "BC6H"; + case Format::eBc6HSfloatBlock : return "BC6H"; + case Format::eBc7UnormBlock : return "BC7"; + case Format::eBc7SrgbBlock : return "BC7"; + case Format::eEtc2R8G8B8UnormBlock : return "ETC2_RGB"; + case Format::eEtc2R8G8B8SrgbBlock : return "ETC2_RGB"; + case Format::eEtc2R8G8B8A1UnormBlock : return "ETC2_RGBA"; + case Format::eEtc2R8G8B8A1SrgbBlock : return "ETC2_RGBA"; + case Format::eEtc2R8G8B8A8UnormBlock : return "ETC2_EAC_RGBA"; + case Format::eEtc2R8G8B8A8SrgbBlock : return "ETC2_EAC_RGBA"; + case Format::eEacR11UnormBlock : return "EAC_R"; + case Format::eEacR11SnormBlock : return "EAC_R"; + case Format::eEacR11G11UnormBlock : return "EAC_RG"; + case Format::eEacR11G11SnormBlock : return "EAC_RG"; + case Format::eAstc4x4UnormBlock : return "ASTC_4x4"; + case Format::eAstc4x4SrgbBlock : return "ASTC_4x4"; + case Format::eAstc5x4UnormBlock : return "ASTC_5x4"; + case Format::eAstc5x4SrgbBlock : return "ASTC_5x4"; + case Format::eAstc5x5UnormBlock : return "ASTC_5x5"; + case Format::eAstc5x5SrgbBlock : return "ASTC_5x5"; + case Format::eAstc6x5UnormBlock : return "ASTC_6x5"; + case Format::eAstc6x5SrgbBlock : return "ASTC_6x5"; + case Format::eAstc6x6UnormBlock : return "ASTC_6x6"; + case Format::eAstc6x6SrgbBlock : return "ASTC_6x6"; + case Format::eAstc8x5UnormBlock : return "ASTC_8x5"; + case Format::eAstc8x5SrgbBlock : return "ASTC_8x5"; + case Format::eAstc8x6UnormBlock : return "ASTC_8x6"; + case Format::eAstc8x6SrgbBlock : return "ASTC_8x6"; + case Format::eAstc8x8UnormBlock : return "ASTC_8x8"; + case Format::eAstc8x8SrgbBlock : return "ASTC_8x8"; + case Format::eAstc10x5UnormBlock : return "ASTC_10x5"; + case Format::eAstc10x5SrgbBlock : return "ASTC_10x5"; + case Format::eAstc10x6UnormBlock : return "ASTC_10x6"; + case Format::eAstc10x6SrgbBlock : return "ASTC_10x6"; + case Format::eAstc10x8UnormBlock : return "ASTC_10x8"; + case Format::eAstc10x8SrgbBlock : return "ASTC_10x8"; + case Format::eAstc10x10UnormBlock : return "ASTC_10x10"; + case Format::eAstc10x10SrgbBlock : return "ASTC_10x10"; + case Format::eAstc12x10UnormBlock : return "ASTC_12x10"; + case Format::eAstc12x10SrgbBlock : return "ASTC_12x10"; + case Format::eAstc12x12UnormBlock : return "ASTC_12x12"; + case Format::eAstc12x12SrgbBlock : return "ASTC_12x12"; + case Format::eG8B8G8R8422Unorm : return "32-bit G8B8G8R8"; + case Format::eB8G8R8G8422Unorm : return "32-bit B8G8R8G8"; + case Format::eG8B8R83Plane420Unorm : return "8-bit 3-plane 420"; + case Format::eG8B8R82Plane420Unorm : return "8-bit 2-plane 420"; + case Format::eG8B8R83Plane422Unorm : return "8-bit 3-plane 422"; + case Format::eG8B8R82Plane422Unorm : return "8-bit 2-plane 422"; + case Format::eG8B8R83Plane444Unorm : return "8-bit 3-plane 444"; + case Format::eR10X6UnormPack16 : return "16-bit"; + case Format::eR10X6G10X6Unorm2Pack16 : return "32-bit"; + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16 : return "64-bit R10G10B10A10"; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16 : return "64-bit G10B10G10R10"; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16 : return "64-bit B10G10R10G10"; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return "10-bit 3-plane 420"; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return "10-bit 2-plane 420"; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return "10-bit 3-plane 422"; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return "10-bit 2-plane 422"; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return "10-bit 3-plane 444"; + case Format::eR12X4UnormPack16 : return "16-bit"; + case Format::eR12X4G12X4Unorm2Pack16 : return "32-bit"; + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16 : return "64-bit R12G12B12A12"; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16 : return "64-bit G12B12G12R12"; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16 : return "64-bit B12G12R12G12"; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return "12-bit 3-plane 420"; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return "12-bit 2-plane 420"; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return "12-bit 3-plane 422"; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return "12-bit 2-plane 422"; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return "12-bit 3-plane 444"; + case Format::eG16B16G16R16422Unorm : return "64-bit G16B16G16R16"; + case Format::eB16G16R16G16422Unorm : return "64-bit B16G16R16G16"; + case Format::eG16B16R163Plane420Unorm : return "16-bit 3-plane 420"; + case Format::eG16B16R162Plane420Unorm : return "16-bit 2-plane 420"; + case Format::eG16B16R163Plane422Unorm : return "16-bit 3-plane 422"; + case Format::eG16B16R162Plane422Unorm : return "16-bit 2-plane 422"; + case Format::eG16B16R163Plane444Unorm : return "16-bit 3-plane 444"; + case Format::eG8B8R82Plane444Unorm : return "8-bit 2-plane 444"; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return "10-bit 2-plane 444"; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return "12-bit 2-plane 444"; + case Format::eG16B16R162Plane444Unorm : return "16-bit 2-plane 444"; + case Format::eA4R4G4B4UnormPack16 : return "16-bit"; + case Format::eA4B4G4R4UnormPack16 : return "16-bit"; + case Format::eAstc4x4SfloatBlock : return "ASTC_4x4"; + case Format::eAstc5x4SfloatBlock : return "ASTC_5x4"; + case Format::eAstc5x5SfloatBlock : return "ASTC_5x5"; + case Format::eAstc6x5SfloatBlock : return "ASTC_6x5"; + case Format::eAstc6x6SfloatBlock : return "ASTC_6x6"; + case Format::eAstc8x5SfloatBlock : return "ASTC_8x5"; + case Format::eAstc8x6SfloatBlock : return "ASTC_8x6"; + case Format::eAstc8x8SfloatBlock : return "ASTC_8x8"; + case Format::eAstc10x5SfloatBlock : return "ASTC_10x5"; + case Format::eAstc10x6SfloatBlock : return "ASTC_10x6"; + case Format::eAstc10x8SfloatBlock : return "ASTC_10x8"; + case Format::eAstc10x10SfloatBlock : return "ASTC_10x10"; + case Format::eAstc12x10SfloatBlock : return "ASTC_12x10"; + case Format::eAstc12x12SfloatBlock : return "ASTC_12x12"; + case Format::eA1B5G5R5UnormPack16 : return "16-bit"; + case Format::eA8Unorm : return "8-bit alpha"; + case Format::ePvrtc12BppUnormBlockIMG : return "PVRTC1_2BPP"; + case Format::ePvrtc14BppUnormBlockIMG : return "PVRTC1_4BPP"; + case Format::ePvrtc22BppUnormBlockIMG : return "PVRTC2_2BPP"; + case Format::ePvrtc24BppUnormBlockIMG : return "PVRTC2_4BPP"; + case Format::ePvrtc12BppSrgbBlockIMG : return "PVRTC1_2BPP"; + case Format::ePvrtc14BppSrgbBlockIMG : return "PVRTC1_4BPP"; + case Format::ePvrtc22BppSrgbBlockIMG : return "PVRTC2_2BPP"; + case Format::ePvrtc24BppSrgbBlockIMG : return "PVRTC2_4BPP"; + case Format::eR8BoolARM : return "8-bit"; + case Format::eR16G16Sfixed5NV : return "32-bit"; + case Format::eR10X6UintPack16ARM : return "16-bit"; + case Format::eR10X6G10X6Uint2Pack16ARM : return "32-bit"; + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM : return "64-bit R10G10B10A10"; + case Format::eR12X4UintPack16ARM : return "16-bit"; + case Format::eR12X4G12X4Uint2Pack16ARM : return "32-bit"; + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM : return "64-bit R12G12B12A12"; + case Format::eR14X2UintPack16ARM : return "16-bit"; + case Format::eR14X2G14X2Uint2Pack16ARM : return "32-bit"; + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM : return "64-bit R14G14B14A14"; + case Format::eR14X2UnormPack16ARM : return "16-bit"; + case Format::eR14X2G14X2Unorm2Pack16ARM : return "32-bit"; + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM : return "64-bit R14G14B14A14"; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return "14-bit 2-plane 420"; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return "14-bit 2-plane 422"; + + default: VULKAN_HPP_ASSERT( false ); return ""; + } + } + + // The number of bits in this component, if not compressed, otherwise 0. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentBits( Format format, uint8_t component ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8: + switch ( component ) + { + case 0 : return 4; + case 1 : return 4; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR4G4B4A4UnormPack16: + switch ( component ) + { + case 0 : return 4; + case 1 : return 4; + case 2 : return 4; + case 3 : return 4; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB4G4R4A4UnormPack16: + switch ( component ) + { + case 0 : return 4; + case 1 : return 4; + case 2 : return 4; + case 3 : return 4; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR5G6B5UnormPack16: + switch ( component ) + { + case 0 : return 5; + case 1 : return 6; + case 2 : return 5; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB5G6R5UnormPack16: + switch ( component ) + { + case 0 : return 5; + case 1 : return 6; + case 2 : return 5; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR5G5B5A1UnormPack16: + switch ( component ) + { + case 0 : return 5; + case 1 : return 5; + case 2 : return 5; + case 3 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB5G5R5A1UnormPack16: + switch ( component ) + { + case 0 : return 5; + case 1 : return 5; + case 2 : return 5; + case 3 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA1R5G5B5UnormPack16: + switch ( component ) + { + case 0 : return 1; + case 1 : return 5; + case 2 : return 5; + case 3 : return 5; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Unorm: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Snorm: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Uscaled: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Sscaled: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Uint: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Sint: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8Srgb: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Snorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Uscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Sscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Uint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Sint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8Srgb: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Snorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Uscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Sscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Uint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Sint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8Srgb: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Snorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Uscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Sscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Uint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Sint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8Srgb: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Snorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Uscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Sscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Uint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Sint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8G8B8A8Srgb: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Snorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Uscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Sscaled: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Uint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Sint: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8A8Srgb: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8UnormPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8SnormPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8UscaledPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8SscaledPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8UintPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8SintPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8B8G8R8SrgbPack32: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2R10G10B10UnormPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2R10G10B10SnormPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2R10G10B10UscaledPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2R10G10B10SscaledPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2R10G10B10UintPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2R10G10B10SintPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2B10G10R10UnormPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2B10G10R10SnormPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2B10G10R10UscaledPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2B10G10R10SscaledPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2B10G10R10UintPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA2B10G10R10SintPack32: + switch ( component ) + { + case 0 : return 2; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Unorm: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Snorm: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Uscaled: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Sscaled: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Uint: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Sint: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16Sfloat: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Snorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Uscaled: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Sscaled: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Uint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Sint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Sfloat: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Snorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Uscaled: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Sscaled: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Uint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Sint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16Sfloat: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Snorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Uscaled: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Sscaled: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Uint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Sint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16B16A16Sfloat: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32Uint: + switch ( component ) + { + case 0 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32Sint: + switch ( component ) + { + case 0 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32Sfloat: + switch ( component ) + { + case 0 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32Uint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32Sint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32Sfloat: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32B32Uint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + case 2 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32B32Sint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + case 2 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32B32Sfloat: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + case 2 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32B32A32Uint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + case 2 : return 32; + case 3 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32B32A32Sint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + case 2 : return 32; + case 3 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR32G32B32A32Sfloat: + switch ( component ) + { + case 0 : return 32; + case 1 : return 32; + case 2 : return 32; + case 3 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64Uint: + switch ( component ) + { + case 0 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64Sint: + switch ( component ) + { + case 0 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64Sfloat: + switch ( component ) + { + case 0 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64Uint: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64Sint: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64Sfloat: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64B64Uint: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + case 2 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64B64Sint: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + case 2 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64B64Sfloat: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + case 2 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64B64A64Uint: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + case 2 : return 64; + case 3 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64B64A64Sint: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + case 2 : return 64; + case 3 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR64G64B64A64Sfloat: + switch ( component ) + { + case 0 : return 64; + case 1 : return 64; + case 2 : return 64; + case 3 : return 64; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB10G11R11UfloatPack32: + switch ( component ) + { + case 0 : return 10; + case 1 : return 11; + case 2 : return 11; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eE5B9G9R9UfloatPack32: + switch ( component ) + { + case 0 : return 9; + case 1 : return 9; + case 2 : return 9; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eD16Unorm: + switch ( component ) + { + case 0 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eX8D24UnormPack32: + switch ( component ) + { + case 0 : return 24; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eD32Sfloat: + switch ( component ) + { + case 0 : return 32; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eS8Uint: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eD16UnormS8Uint: + switch ( component ) + { + case 0 : return 16; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eD24UnormS8Uint: + switch ( component ) + { + case 0 : return 24; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eD32SfloatS8Uint: + switch ( component ) + { + case 0 : return 32; + case 1 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eEacR11UnormBlock: + switch ( component ) + { + case 0 : return 11; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eEacR11SnormBlock: + switch ( component ) + { + case 0 : return 11; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eEacR11G11UnormBlock: + switch ( component ) + { + case 0 : return 11; + case 1 : return 11; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eEacR11G11SnormBlock: + switch ( component ) + { + case 0 : return 11; + case 1 : return 11; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8G8R8422Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB8G8R8G8422Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + case 3 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R83Plane420Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R82Plane420Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R83Plane422Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R82Plane422Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R83Plane444Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR10X6UnormPack16: + switch ( component ) + { + case 0 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR10X6G10X6Unorm2Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR12X4UnormPack16: + switch ( component ) + { + case 0 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR12X4G12X4Unorm2Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + case 3 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + case 3 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + case 3 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16G16R16422Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eB16G16R16G16422Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + case 3 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R163Plane420Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R162Plane420Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R163Plane422Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R162Plane422Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R163Plane444Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R82Plane444Unorm: + switch ( component ) + { + case 0 : return 8; + case 1 : return 8; + case 2 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R162Plane444Unorm: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + case 2 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA4R4G4B4UnormPack16: + switch ( component ) + { + case 0 : return 4; + case 1 : return 4; + case 2 : return 4; + case 3 : return 4; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA4B4G4R4UnormPack16: + switch ( component ) + { + case 0 : return 4; + case 1 : return 4; + case 2 : return 4; + case 3 : return 4; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA1B5G5R5UnormPack16: + switch ( component ) + { + case 0 : return 1; + case 1 : return 5; + case 2 : return 5; + case 3 : return 5; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eA8Unorm: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR8BoolARM: + switch ( component ) + { + case 0 : return 8; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR16G16Sfixed5NV: + switch ( component ) + { + case 0 : return 16; + case 1 : return 16; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR10X6UintPack16ARM: + switch ( component ) + { + case 0 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR10X6G10X6Uint2Pack16ARM: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + switch ( component ) + { + case 0 : return 10; + case 1 : return 10; + case 2 : return 10; + case 3 : return 10; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR12X4UintPack16ARM: + switch ( component ) + { + case 0 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR12X4G12X4Uint2Pack16ARM: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + switch ( component ) + { + case 0 : return 12; + case 1 : return 12; + case 2 : return 12; + case 3 : return 12; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR14X2UintPack16ARM: + switch ( component ) + { + case 0 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR14X2G14X2Uint2Pack16ARM: + switch ( component ) + { + case 0 : return 14; + case 1 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + switch ( component ) + { + case 0 : return 14; + case 1 : return 14; + case 2 : return 14; + case 3 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR14X2UnormPack16ARM: + switch ( component ) + { + case 0 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR14X2G14X2Unorm2Pack16ARM: + switch ( component ) + { + case 0 : return 14; + case 1 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: + switch ( component ) + { + case 0 : return 14; + case 1 : return 14; + case 2 : return 14; + case 3 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return 14; + case 1 : return 14; + case 2 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return 14; + case 1 : return 14; + case 2 : return 14; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + + default: return 0; + } + } + + // The number of components of this format. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentCount( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8 : return 2; + case Format::eR4G4B4A4UnormPack16 : return 4; + case Format::eB4G4R4A4UnormPack16 : return 4; + case Format::eR5G6B5UnormPack16 : return 3; + case Format::eB5G6R5UnormPack16 : return 3; + case Format::eR5G5B5A1UnormPack16 : return 4; + case Format::eB5G5R5A1UnormPack16 : return 4; + case Format::eA1R5G5B5UnormPack16 : return 4; + case Format::eR8Unorm : return 1; + case Format::eR8Snorm : return 1; + case Format::eR8Uscaled : return 1; + case Format::eR8Sscaled : return 1; + case Format::eR8Uint : return 1; + case Format::eR8Sint : return 1; + case Format::eR8Srgb : return 1; + case Format::eR8G8Unorm : return 2; + case Format::eR8G8Snorm : return 2; + case Format::eR8G8Uscaled : return 2; + case Format::eR8G8Sscaled : return 2; + case Format::eR8G8Uint : return 2; + case Format::eR8G8Sint : return 2; + case Format::eR8G8Srgb : return 2; + case Format::eR8G8B8Unorm : return 3; + case Format::eR8G8B8Snorm : return 3; + case Format::eR8G8B8Uscaled : return 3; + case Format::eR8G8B8Sscaled : return 3; + case Format::eR8G8B8Uint : return 3; + case Format::eR8G8B8Sint : return 3; + case Format::eR8G8B8Srgb : return 3; + case Format::eB8G8R8Unorm : return 3; + case Format::eB8G8R8Snorm : return 3; + case Format::eB8G8R8Uscaled : return 3; + case Format::eB8G8R8Sscaled : return 3; + case Format::eB8G8R8Uint : return 3; + case Format::eB8G8R8Sint : return 3; + case Format::eB8G8R8Srgb : return 3; + case Format::eR8G8B8A8Unorm : return 4; + case Format::eR8G8B8A8Snorm : return 4; + case Format::eR8G8B8A8Uscaled : return 4; + case Format::eR8G8B8A8Sscaled : return 4; + case Format::eR8G8B8A8Uint : return 4; + case Format::eR8G8B8A8Sint : return 4; + case Format::eR8G8B8A8Srgb : return 4; + case Format::eB8G8R8A8Unorm : return 4; + case Format::eB8G8R8A8Snorm : return 4; + case Format::eB8G8R8A8Uscaled : return 4; + case Format::eB8G8R8A8Sscaled : return 4; + case Format::eB8G8R8A8Uint : return 4; + case Format::eB8G8R8A8Sint : return 4; + case Format::eB8G8R8A8Srgb : return 4; + case Format::eA8B8G8R8UnormPack32 : return 4; + case Format::eA8B8G8R8SnormPack32 : return 4; + case Format::eA8B8G8R8UscaledPack32 : return 4; + case Format::eA8B8G8R8SscaledPack32 : return 4; + case Format::eA8B8G8R8UintPack32 : return 4; + case Format::eA8B8G8R8SintPack32 : return 4; + case Format::eA8B8G8R8SrgbPack32 : return 4; + case Format::eA2R10G10B10UnormPack32 : return 4; + case Format::eA2R10G10B10SnormPack32 : return 4; + case Format::eA2R10G10B10UscaledPack32 : return 4; + case Format::eA2R10G10B10SscaledPack32 : return 4; + case Format::eA2R10G10B10UintPack32 : return 4; + case Format::eA2R10G10B10SintPack32 : return 4; + case Format::eA2B10G10R10UnormPack32 : return 4; + case Format::eA2B10G10R10SnormPack32 : return 4; + case Format::eA2B10G10R10UscaledPack32 : return 4; + case Format::eA2B10G10R10SscaledPack32 : return 4; + case Format::eA2B10G10R10UintPack32 : return 4; + case Format::eA2B10G10R10SintPack32 : return 4; + case Format::eR16Unorm : return 1; + case Format::eR16Snorm : return 1; + case Format::eR16Uscaled : return 1; + case Format::eR16Sscaled : return 1; + case Format::eR16Uint : return 1; + case Format::eR16Sint : return 1; + case Format::eR16Sfloat : return 1; + case Format::eR16G16Unorm : return 2; + case Format::eR16G16Snorm : return 2; + case Format::eR16G16Uscaled : return 2; + case Format::eR16G16Sscaled : return 2; + case Format::eR16G16Uint : return 2; + case Format::eR16G16Sint : return 2; + case Format::eR16G16Sfloat : return 2; + case Format::eR16G16B16Unorm : return 3; + case Format::eR16G16B16Snorm : return 3; + case Format::eR16G16B16Uscaled : return 3; + case Format::eR16G16B16Sscaled : return 3; + case Format::eR16G16B16Uint : return 3; + case Format::eR16G16B16Sint : return 3; + case Format::eR16G16B16Sfloat : return 3; + case Format::eR16G16B16A16Unorm : return 4; + case Format::eR16G16B16A16Snorm : return 4; + case Format::eR16G16B16A16Uscaled : return 4; + case Format::eR16G16B16A16Sscaled : return 4; + case Format::eR16G16B16A16Uint : return 4; + case Format::eR16G16B16A16Sint : return 4; + case Format::eR16G16B16A16Sfloat : return 4; + case Format::eR32Uint : return 1; + case Format::eR32Sint : return 1; + case Format::eR32Sfloat : return 1; + case Format::eR32G32Uint : return 2; + case Format::eR32G32Sint : return 2; + case Format::eR32G32Sfloat : return 2; + case Format::eR32G32B32Uint : return 3; + case Format::eR32G32B32Sint : return 3; + case Format::eR32G32B32Sfloat : return 3; + case Format::eR32G32B32A32Uint : return 4; + case Format::eR32G32B32A32Sint : return 4; + case Format::eR32G32B32A32Sfloat : return 4; + case Format::eR64Uint : return 1; + case Format::eR64Sint : return 1; + case Format::eR64Sfloat : return 1; + case Format::eR64G64Uint : return 2; + case Format::eR64G64Sint : return 2; + case Format::eR64G64Sfloat : return 2; + case Format::eR64G64B64Uint : return 3; + case Format::eR64G64B64Sint : return 3; + case Format::eR64G64B64Sfloat : return 3; + case Format::eR64G64B64A64Uint : return 4; + case Format::eR64G64B64A64Sint : return 4; + case Format::eR64G64B64A64Sfloat : return 4; + case Format::eB10G11R11UfloatPack32 : return 3; + case Format::eE5B9G9R9UfloatPack32 : return 3; + case Format::eD16Unorm : return 1; + case Format::eX8D24UnormPack32 : return 1; + case Format::eD32Sfloat : return 1; + case Format::eS8Uint : return 1; + case Format::eD16UnormS8Uint : return 2; + case Format::eD24UnormS8Uint : return 2; + case Format::eD32SfloatS8Uint : return 2; + case Format::eBc1RgbUnormBlock : return 3; + case Format::eBc1RgbSrgbBlock : return 3; + case Format::eBc1RgbaUnormBlock : return 4; + case Format::eBc1RgbaSrgbBlock : return 4; + case Format::eBc2UnormBlock : return 4; + case Format::eBc2SrgbBlock : return 4; + case Format::eBc3UnormBlock : return 4; + case Format::eBc3SrgbBlock : return 4; + case Format::eBc4UnormBlock : return 1; + case Format::eBc4SnormBlock : return 1; + case Format::eBc5UnormBlock : return 2; + case Format::eBc5SnormBlock : return 2; + case Format::eBc6HUfloatBlock : return 3; + case Format::eBc6HSfloatBlock : return 3; + case Format::eBc7UnormBlock : return 4; + case Format::eBc7SrgbBlock : return 4; + case Format::eEtc2R8G8B8UnormBlock : return 3; + case Format::eEtc2R8G8B8SrgbBlock : return 3; + case Format::eEtc2R8G8B8A1UnormBlock : return 4; + case Format::eEtc2R8G8B8A1SrgbBlock : return 4; + case Format::eEtc2R8G8B8A8UnormBlock : return 4; + case Format::eEtc2R8G8B8A8SrgbBlock : return 4; + case Format::eEacR11UnormBlock : return 1; + case Format::eEacR11SnormBlock : return 1; + case Format::eEacR11G11UnormBlock : return 2; + case Format::eEacR11G11SnormBlock : return 2; + case Format::eAstc4x4UnormBlock : return 4; + case Format::eAstc4x4SrgbBlock : return 4; + case Format::eAstc5x4UnormBlock : return 4; + case Format::eAstc5x4SrgbBlock : return 4; + case Format::eAstc5x5UnormBlock : return 4; + case Format::eAstc5x5SrgbBlock : return 4; + case Format::eAstc6x5UnormBlock : return 4; + case Format::eAstc6x5SrgbBlock : return 4; + case Format::eAstc6x6UnormBlock : return 4; + case Format::eAstc6x6SrgbBlock : return 4; + case Format::eAstc8x5UnormBlock : return 4; + case Format::eAstc8x5SrgbBlock : return 4; + case Format::eAstc8x6UnormBlock : return 4; + case Format::eAstc8x6SrgbBlock : return 4; + case Format::eAstc8x8UnormBlock : return 4; + case Format::eAstc8x8SrgbBlock : return 4; + case Format::eAstc10x5UnormBlock : return 4; + case Format::eAstc10x5SrgbBlock : return 4; + case Format::eAstc10x6UnormBlock : return 4; + case Format::eAstc10x6SrgbBlock : return 4; + case Format::eAstc10x8UnormBlock : return 4; + case Format::eAstc10x8SrgbBlock : return 4; + case Format::eAstc10x10UnormBlock : return 4; + case Format::eAstc10x10SrgbBlock : return 4; + case Format::eAstc12x10UnormBlock : return 4; + case Format::eAstc12x10SrgbBlock : return 4; + case Format::eAstc12x12UnormBlock : return 4; + case Format::eAstc12x12SrgbBlock : return 4; + case Format::eG8B8G8R8422Unorm : return 4; + case Format::eB8G8R8G8422Unorm : return 4; + case Format::eG8B8R83Plane420Unorm : return 3; + case Format::eG8B8R82Plane420Unorm : return 3; + case Format::eG8B8R83Plane422Unorm : return 3; + case Format::eG8B8R82Plane422Unorm : return 3; + case Format::eG8B8R83Plane444Unorm : return 3; + case Format::eR10X6UnormPack16 : return 1; + case Format::eR10X6G10X6Unorm2Pack16 : return 2; + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16 : return 4; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16 : return 4; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16 : return 4; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return 3; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return 3; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return 3; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return 3; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return 3; + case Format::eR12X4UnormPack16 : return 1; + case Format::eR12X4G12X4Unorm2Pack16 : return 2; + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16 : return 4; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16 : return 4; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16 : return 4; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return 3; + case Format::eG16B16G16R16422Unorm : return 4; + case Format::eB16G16R16G16422Unorm : return 4; + case Format::eG16B16R163Plane420Unorm : return 3; + case Format::eG16B16R162Plane420Unorm : return 3; + case Format::eG16B16R163Plane422Unorm : return 3; + case Format::eG16B16R162Plane422Unorm : return 3; + case Format::eG16B16R163Plane444Unorm : return 3; + case Format::eG8B8R82Plane444Unorm : return 3; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return 3; + case Format::eG16B16R162Plane444Unorm : return 3; + case Format::eA4R4G4B4UnormPack16 : return 4; + case Format::eA4B4G4R4UnormPack16 : return 4; + case Format::eAstc4x4SfloatBlock : return 4; + case Format::eAstc5x4SfloatBlock : return 4; + case Format::eAstc5x5SfloatBlock : return 4; + case Format::eAstc6x5SfloatBlock : return 4; + case Format::eAstc6x6SfloatBlock : return 4; + case Format::eAstc8x5SfloatBlock : return 4; + case Format::eAstc8x6SfloatBlock : return 4; + case Format::eAstc8x8SfloatBlock : return 4; + case Format::eAstc10x5SfloatBlock : return 4; + case Format::eAstc10x6SfloatBlock : return 4; + case Format::eAstc10x8SfloatBlock : return 4; + case Format::eAstc10x10SfloatBlock : return 4; + case Format::eAstc12x10SfloatBlock : return 4; + case Format::eAstc12x12SfloatBlock : return 4; + case Format::eA1B5G5R5UnormPack16 : return 4; + case Format::eA8Unorm : return 1; + case Format::ePvrtc12BppUnormBlockIMG : return 4; + case Format::ePvrtc14BppUnormBlockIMG : return 4; + case Format::ePvrtc22BppUnormBlockIMG : return 4; + case Format::ePvrtc24BppUnormBlockIMG : return 4; + case Format::ePvrtc12BppSrgbBlockIMG : return 4; + case Format::ePvrtc14BppSrgbBlockIMG : return 4; + case Format::ePvrtc22BppSrgbBlockIMG : return 4; + case Format::ePvrtc24BppSrgbBlockIMG : return 4; + case Format::eR8BoolARM : return 1; + case Format::eR16G16Sfixed5NV : return 2; + case Format::eR10X6UintPack16ARM : return 1; + case Format::eR10X6G10X6Uint2Pack16ARM : return 2; + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM : return 4; + case Format::eR12X4UintPack16ARM : return 1; + case Format::eR12X4G12X4Uint2Pack16ARM : return 2; + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM : return 4; + case Format::eR14X2UintPack16ARM : return 1; + case Format::eR14X2G14X2Uint2Pack16ARM : return 2; + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM : return 4; + case Format::eR14X2UnormPack16ARM : return 1; + case Format::eR14X2G14X2Unorm2Pack16ARM : return 2; + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM : return 4; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return 3; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return 3; + + default: return 0; + } + } + + // The name of the component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * componentName( Format format, uint8_t component ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR4G4B4A4UnormPack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB4G4R4A4UnormPack16: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR5G6B5UnormPack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB5G6R5UnormPack16: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR5G5B5A1UnormPack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB5G5R5A1UnormPack16: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA1R5G5B5UnormPack16: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Unorm: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Snorm: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Uscaled: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Sscaled: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Uint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Sint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Srgb: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Unorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Snorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Uscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Sscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Srgb: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Unorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Snorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Uscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Sscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Srgb: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Unorm: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Snorm: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Uscaled: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Sscaled: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Uint: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Sint: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Srgb: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Unorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Snorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Uscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Sscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Srgb: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Unorm: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Snorm: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Uscaled: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Sscaled: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Uint: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Sint: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Srgb: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8UnormPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SnormPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8UscaledPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SscaledPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8UintPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SintPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SrgbPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10UnormPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10SnormPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10UscaledPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10SscaledPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10UintPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10SintPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10UnormPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10SnormPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10UscaledPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10SscaledPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10UintPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10SintPack32: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Unorm: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Snorm: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Uscaled: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Sscaled: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Uint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Sint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Sfloat: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Unorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Snorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Uscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Unorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Snorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Uscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Sscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Unorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Snorm: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Uscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Sscaled: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32Uint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32Sint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32Sfloat: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32A32Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32A32Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32A32Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64Uint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64Sint: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64Sfloat: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64A64Uint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64A64Sint: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64A64Sfloat: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB10G11R11UfloatPack32: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eE5B9G9R9UfloatPack32: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD16Unorm: + switch ( component ) + { + case 0 : return "D"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eX8D24UnormPack32: + switch ( component ) + { + case 0 : return "D"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD32Sfloat: + switch ( component ) + { + case 0 : return "D"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eS8Uint: + switch ( component ) + { + case 0 : return "S"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD16UnormS8Uint: + switch ( component ) + { + case 0 : return "D"; + case 1 : return "S"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD24UnormS8Uint: + switch ( component ) + { + case 0 : return "D"; + case 1 : return "S"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD32SfloatS8Uint: + switch ( component ) + { + case 0 : return "D"; + case 1 : return "S"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbUnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbSrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbaUnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbaSrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc2UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc2SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc3UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc3SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc4UnormBlock: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc4SnormBlock: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc5UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc5SnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc6HUfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc6HSfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc7UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc7SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A1UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A1SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A8UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A8SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11UnormBlock: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11SnormBlock: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11G11UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11G11SnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc4x4UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc4x4SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x4UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x4SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x5UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x5SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x5UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x5SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x6UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x6SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x5UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x5SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x6UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x6SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x8UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x8SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x5UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x5SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x6UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x6SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x8UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x8SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x10UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x10SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x10UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x10SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x12UnormBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x12SrgbBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8G8R8422Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8G8422Unorm: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R83Plane420Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R82Plane420Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R83Plane422Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R82Plane422Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R83Plane444Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6UnormPack16: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6Unorm2Pack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4UnormPack16: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4Unorm2Pack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16G16R16422Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB16G16R16G16422Unorm: + switch ( component ) + { + case 0 : return "B"; + case 1 : return "G"; + case 2 : return "R"; + case 3 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R163Plane420Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R162Plane420Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R163Plane422Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R162Plane422Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R163Plane444Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R82Plane444Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R162Plane444Unorm: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA4R4G4B4UnormPack16: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "R"; + case 2 : return "G"; + case 3 : return "B"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA4B4G4R4UnormPack16: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc4x4SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x4SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x5SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x5SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x6SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x5SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x6SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x8SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x5SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x6SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x8SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x10SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x10SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x12SfloatBlock: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA1B5G5R5UnormPack16: + switch ( component ) + { + case 0 : return "A"; + case 1 : return "B"; + case 2 : return "G"; + case 3 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8Unorm: + switch ( component ) + { + case 0 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc12BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc14BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc22BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc24BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc12BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc14BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc22BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc24BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8BoolARM: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sfixed5NV: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6UintPack16ARM: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6Uint2Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4UintPack16ARM: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4Uint2Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2UintPack16ARM: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2Uint2Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2UnormPack16ARM: + switch ( component ) + { + case 0 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2Unorm2Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: + switch ( component ) + { + case 0 : return "R"; + case 1 : return "G"; + case 2 : return "B"; + case 3 : return "A"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return "G"; + case 1 : return "B"; + case 2 : return "R"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + + default: return ""; + } + } + + // The numeric format of the component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * componentNumericFormat( Format format, uint8_t component ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR4G4B4A4UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB4G4R4A4UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR5G6B5UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB5G6R5UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR5G5B5A1UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB5G5R5A1UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA1R5G5B5UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Uint: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Sint: + switch ( component ) + { + case 0 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8Srgb: + switch ( component ) + { + case 0 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8Srgb: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8Srgb: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8Srgb: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + case 3 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + case 3 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + case 3 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8G8B8A8Srgb: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + case 3 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + case 3 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + case 3 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8A8Srgb: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8UnormPack32: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SnormPack32: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + case 3 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8UscaledPack32: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + case 3 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SscaledPack32: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + case 3 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8UintPack32: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SintPack32: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8B8G8R8SrgbPack32: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10UnormPack32: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10SnormPack32: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + case 3 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10UscaledPack32: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + case 3 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10SscaledPack32: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + case 3 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10UintPack32: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2R10G10B10SintPack32: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10UnormPack32: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10SnormPack32: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + case 3 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10UscaledPack32: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + case 3 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10SscaledPack32: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + case 3 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10UintPack32: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA2B10G10R10SintPack32: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Uint: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Sint: + switch ( component ) + { + case 0 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Snorm: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + case 2 : return "SNORM"; + case 3 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Uscaled: + switch ( component ) + { + case 0 : return "USCALED"; + case 1 : return "USCALED"; + case 2 : return "USCALED"; + case 3 : return "USCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Sscaled: + switch ( component ) + { + case 0 : return "SSCALED"; + case 1 : return "SSCALED"; + case 2 : return "SSCALED"; + case 3 : return "SSCALED"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16B16A16Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32Uint: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32Sint: + switch ( component ) + { + case 0 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32A32Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32A32Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR32G32B32A32Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64Uint: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64Sint: + switch ( component ) + { + case 0 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64A64Uint: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64A64Sint: + switch ( component ) + { + case 0 : return "SINT"; + case 1 : return "SINT"; + case 2 : return "SINT"; + case 3 : return "SINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR64G64B64A64Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB10G11R11UfloatPack32: + switch ( component ) + { + case 0 : return "UFLOAT"; + case 1 : return "UFLOAT"; + case 2 : return "UFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eE5B9G9R9UfloatPack32: + switch ( component ) + { + case 0 : return "UFLOAT"; + case 1 : return "UFLOAT"; + case 2 : return "UFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD16Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eX8D24UnormPack32: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD32Sfloat: + switch ( component ) + { + case 0 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eS8Uint: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD16UnormS8Uint: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD24UnormS8Uint: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eD32SfloatS8Uint: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbUnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbSrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbaUnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc1RgbaSrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc2UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc2SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc3UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc3SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc4UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc4SnormBlock: + switch ( component ) + { + case 0 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc5UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc5SnormBlock: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc6HUfloatBlock: + switch ( component ) + { + case 0 : return "UFLOAT"; + case 1 : return "UFLOAT"; + case 2 : return "UFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc6HSfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc7UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eBc7SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A1UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A1SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A8UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEtc2R8G8B8A8SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11SnormBlock: + switch ( component ) + { + case 0 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11G11UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eEacR11G11SnormBlock: + switch ( component ) + { + case 0 : return "SNORM"; + case 1 : return "SNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc4x4UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc4x4SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x4UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x4SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x5UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x5SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x5UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x5SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x6UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x6SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x5UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x5SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x6UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x6SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x8UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x8SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x5UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x5SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x6UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x6SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x8UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x8SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x10UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x10SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x10UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x10SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x12UnormBlock: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x12SrgbBlock: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8G8R8422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB8G8R8G8422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R83Plane420Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R82Plane420Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R83Plane422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R82Plane422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R83Plane444Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6Unorm2Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4Unorm2Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16G16R16422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eB16G16R16G16422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R163Plane420Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R162Plane420Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R163Plane422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R162Plane422Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R163Plane444Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG8B8R82Plane444Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG16B16R162Plane444Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA4R4G4B4UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA4B4G4R4UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc4x4SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x4SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc5x5SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x5SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc6x6SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x5SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x6SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc8x8SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x5SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x6SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x8SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc10x10SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x10SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eAstc12x12SfloatBlock: + switch ( component ) + { + case 0 : return "SFLOAT"; + case 1 : return "SFLOAT"; + case 2 : return "SFLOAT"; + case 3 : return "SFLOAT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA1B5G5R5UnormPack16: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eA8Unorm: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc12BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc14BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc22BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc24BppUnormBlockIMG: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc12BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc14BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc22BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::ePvrtc24BppSrgbBlockIMG: + switch ( component ) + { + case 0 : return "SRGB"; + case 1 : return "SRGB"; + case 2 : return "SRGB"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR8BoolARM: + switch ( component ) + { + case 0 : return "BOOL"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR16G16Sfixed5NV: + switch ( component ) + { + case 0 : return "SFIXED5"; + case 1 : return "SFIXED5"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6UintPack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6Uint2Pack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4UintPack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4Uint2Pack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2UintPack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2Uint2Pack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + switch ( component ) + { + case 0 : return "UINT"; + case 1 : return "UINT"; + case 2 : return "UINT"; + case 3 : return "UINT"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2UnormPack16ARM: + switch ( component ) + { + case 0 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2Unorm2Pack16ARM: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + case 3 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return "UNORM"; + case 1 : return "UNORM"; + case 2 : return "UNORM"; + default: VULKAN_HPP_ASSERT( false ); return ""; + } + + default: return ""; + } + } + + // The plane this component lies in. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentPlaneIndex( Format format, uint8_t component ) + { + switch ( format ) + { + case Format::eG8B8R83Plane420Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R82Plane420Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R83Plane422Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R82Plane422Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R83Plane444Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R163Plane420Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R162Plane420Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R163Plane422Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R162Plane422Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R163Plane444Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG8B8R82Plane444Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG16B16R162Plane444Unorm: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( component ) + { + case 0 : return 0; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 0; + } + + default: return 0; + } + } + + // True, if the components of this format are compressed, otherwise false. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool componentsAreCompressed( Format format ) + { + switch ( format ) + { + case Format::eBc1RgbUnormBlock: + case Format::eBc1RgbSrgbBlock: + case Format::eBc1RgbaUnormBlock: + case Format::eBc1RgbaSrgbBlock: + case Format::eBc2UnormBlock: + case Format::eBc2SrgbBlock: + case Format::eBc3UnormBlock: + case Format::eBc3SrgbBlock: + case Format::eBc4UnormBlock: + case Format::eBc4SnormBlock: + case Format::eBc5UnormBlock: + case Format::eBc5SnormBlock: + case Format::eBc6HUfloatBlock: + case Format::eBc6HSfloatBlock: + case Format::eBc7UnormBlock: + case Format::eBc7SrgbBlock: + case Format::eEtc2R8G8B8UnormBlock: + case Format::eEtc2R8G8B8SrgbBlock: + case Format::eEtc2R8G8B8A1UnormBlock: + case Format::eEtc2R8G8B8A1SrgbBlock: + case Format::eEtc2R8G8B8A8UnormBlock: + case Format::eEtc2R8G8B8A8SrgbBlock: + case Format::eAstc4x4UnormBlock: + case Format::eAstc4x4SrgbBlock: + case Format::eAstc5x4UnormBlock: + case Format::eAstc5x4SrgbBlock: + case Format::eAstc5x5UnormBlock: + case Format::eAstc5x5SrgbBlock: + case Format::eAstc6x5UnormBlock: + case Format::eAstc6x5SrgbBlock: + case Format::eAstc6x6UnormBlock: + case Format::eAstc6x6SrgbBlock: + case Format::eAstc8x5UnormBlock: + case Format::eAstc8x5SrgbBlock: + case Format::eAstc8x6UnormBlock: + case Format::eAstc8x6SrgbBlock: + case Format::eAstc8x8UnormBlock: + case Format::eAstc8x8SrgbBlock: + case Format::eAstc10x5UnormBlock: + case Format::eAstc10x5SrgbBlock: + case Format::eAstc10x6UnormBlock: + case Format::eAstc10x6SrgbBlock: + case Format::eAstc10x8UnormBlock: + case Format::eAstc10x8SrgbBlock: + case Format::eAstc10x10UnormBlock: + case Format::eAstc10x10SrgbBlock: + case Format::eAstc12x10UnormBlock: + case Format::eAstc12x10SrgbBlock: + case Format::eAstc12x12UnormBlock: + case Format::eAstc12x12SrgbBlock: + case Format::eAstc4x4SfloatBlock: + case Format::eAstc5x4SfloatBlock: + case Format::eAstc5x5SfloatBlock: + case Format::eAstc6x5SfloatBlock: + case Format::eAstc6x6SfloatBlock: + case Format::eAstc8x5SfloatBlock: + case Format::eAstc8x6SfloatBlock: + case Format::eAstc8x8SfloatBlock: + case Format::eAstc10x5SfloatBlock: + case Format::eAstc10x6SfloatBlock: + case Format::eAstc10x8SfloatBlock: + case Format::eAstc10x10SfloatBlock: + case Format::eAstc12x10SfloatBlock: + case Format::eAstc12x12SfloatBlock: + case Format::ePvrtc12BppUnormBlockIMG: + case Format::ePvrtc14BppUnormBlockIMG: + case Format::ePvrtc22BppUnormBlockIMG: + case Format::ePvrtc24BppUnormBlockIMG: + case Format::ePvrtc12BppSrgbBlockIMG: + case Format::ePvrtc14BppSrgbBlockIMG: + case Format::ePvrtc22BppSrgbBlockIMG: + case Format::ePvrtc24BppSrgbBlockIMG : return true; + default : return false; + } + } + + // A textual description of the compression scheme, or an empty string if it is not compressed + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * compressionScheme( Format format ) + { + switch ( format ) + { + case Format::eBc1RgbUnormBlock : return "BC"; + case Format::eBc1RgbSrgbBlock : return "BC"; + case Format::eBc1RgbaUnormBlock : return "BC"; + case Format::eBc1RgbaSrgbBlock : return "BC"; + case Format::eBc2UnormBlock : return "BC"; + case Format::eBc2SrgbBlock : return "BC"; + case Format::eBc3UnormBlock : return "BC"; + case Format::eBc3SrgbBlock : return "BC"; + case Format::eBc4UnormBlock : return "BC"; + case Format::eBc4SnormBlock : return "BC"; + case Format::eBc5UnormBlock : return "BC"; + case Format::eBc5SnormBlock : return "BC"; + case Format::eBc6HUfloatBlock : return "BC"; + case Format::eBc6HSfloatBlock : return "BC"; + case Format::eBc7UnormBlock : return "BC"; + case Format::eBc7SrgbBlock : return "BC"; + case Format::eEtc2R8G8B8UnormBlock : return "ETC2"; + case Format::eEtc2R8G8B8SrgbBlock : return "ETC2"; + case Format::eEtc2R8G8B8A1UnormBlock : return "ETC2"; + case Format::eEtc2R8G8B8A1SrgbBlock : return "ETC2"; + case Format::eEtc2R8G8B8A8UnormBlock : return "ETC2"; + case Format::eEtc2R8G8B8A8SrgbBlock : return "ETC2"; + case Format::eEacR11UnormBlock : return "EAC"; + case Format::eEacR11SnormBlock : return "EAC"; + case Format::eEacR11G11UnormBlock : return "EAC"; + case Format::eEacR11G11SnormBlock : return "EAC"; + case Format::eAstc4x4UnormBlock : return "ASTC LDR"; + case Format::eAstc4x4SrgbBlock : return "ASTC LDR"; + case Format::eAstc5x4UnormBlock : return "ASTC LDR"; + case Format::eAstc5x4SrgbBlock : return "ASTC LDR"; + case Format::eAstc5x5UnormBlock : return "ASTC LDR"; + case Format::eAstc5x5SrgbBlock : return "ASTC LDR"; + case Format::eAstc6x5UnormBlock : return "ASTC LDR"; + case Format::eAstc6x5SrgbBlock : return "ASTC LDR"; + case Format::eAstc6x6UnormBlock : return "ASTC LDR"; + case Format::eAstc6x6SrgbBlock : return "ASTC LDR"; + case Format::eAstc8x5UnormBlock : return "ASTC LDR"; + case Format::eAstc8x5SrgbBlock : return "ASTC LDR"; + case Format::eAstc8x6UnormBlock : return "ASTC LDR"; + case Format::eAstc8x6SrgbBlock : return "ASTC LDR"; + case Format::eAstc8x8UnormBlock : return "ASTC LDR"; + case Format::eAstc8x8SrgbBlock : return "ASTC LDR"; + case Format::eAstc10x5UnormBlock : return "ASTC LDR"; + case Format::eAstc10x5SrgbBlock : return "ASTC LDR"; + case Format::eAstc10x6UnormBlock : return "ASTC LDR"; + case Format::eAstc10x6SrgbBlock : return "ASTC LDR"; + case Format::eAstc10x8UnormBlock : return "ASTC LDR"; + case Format::eAstc10x8SrgbBlock : return "ASTC LDR"; + case Format::eAstc10x10UnormBlock : return "ASTC LDR"; + case Format::eAstc10x10SrgbBlock : return "ASTC LDR"; + case Format::eAstc12x10UnormBlock : return "ASTC LDR"; + case Format::eAstc12x10SrgbBlock : return "ASTC LDR"; + case Format::eAstc12x12UnormBlock : return "ASTC LDR"; + case Format::eAstc12x12SrgbBlock : return "ASTC LDR"; + case Format::eAstc4x4SfloatBlock : return "ASTC HDR"; + case Format::eAstc5x4SfloatBlock : return "ASTC HDR"; + case Format::eAstc5x5SfloatBlock : return "ASTC HDR"; + case Format::eAstc6x5SfloatBlock : return "ASTC HDR"; + case Format::eAstc6x6SfloatBlock : return "ASTC HDR"; + case Format::eAstc8x5SfloatBlock : return "ASTC HDR"; + case Format::eAstc8x6SfloatBlock : return "ASTC HDR"; + case Format::eAstc8x8SfloatBlock : return "ASTC HDR"; + case Format::eAstc10x5SfloatBlock : return "ASTC HDR"; + case Format::eAstc10x6SfloatBlock : return "ASTC HDR"; + case Format::eAstc10x8SfloatBlock : return "ASTC HDR"; + case Format::eAstc10x10SfloatBlock : return "ASTC HDR"; + case Format::eAstc12x10SfloatBlock : return "ASTC HDR"; + case Format::eAstc12x12SfloatBlock : return "ASTC HDR"; + case Format::ePvrtc12BppUnormBlockIMG: return "PVRTC"; + case Format::ePvrtc14BppUnormBlockIMG: return "PVRTC"; + case Format::ePvrtc22BppUnormBlockIMG: return "PVRTC"; + case Format::ePvrtc24BppUnormBlockIMG: return "PVRTC"; + case Format::ePvrtc12BppSrgbBlockIMG : return "PVRTC"; + case Format::ePvrtc14BppSrgbBlockIMG : return "PVRTC"; + case Format::ePvrtc22BppSrgbBlockIMG : return "PVRTC"; + case Format::ePvrtc24BppSrgbBlockIMG : return "PVRTC"; + + default: return ""; + } + } + + // Get all formats + VULKAN_HPP_INLINE std::vector const & getAllFormats() + { + static std::vector allFormats = { Format::eR4G4UnormPack8, + Format::eR4G4B4A4UnormPack16, + Format::eB4G4R4A4UnormPack16, + Format::eR5G6B5UnormPack16, + Format::eB5G6R5UnormPack16, + Format::eR5G5B5A1UnormPack16, + Format::eB5G5R5A1UnormPack16, + Format::eA1R5G5B5UnormPack16, + Format::eR8Unorm, + Format::eR8Snorm, + Format::eR8Uscaled, + Format::eR8Sscaled, + Format::eR8Uint, + Format::eR8Sint, + Format::eR8Srgb, + Format::eR8G8Unorm, + Format::eR8G8Snorm, + Format::eR8G8Uscaled, + Format::eR8G8Sscaled, + Format::eR8G8Uint, + Format::eR8G8Sint, + Format::eR8G8Srgb, + Format::eR8G8B8Unorm, + Format::eR8G8B8Snorm, + Format::eR8G8B8Uscaled, + Format::eR8G8B8Sscaled, + Format::eR8G8B8Uint, + Format::eR8G8B8Sint, + Format::eR8G8B8Srgb, + Format::eB8G8R8Unorm, + Format::eB8G8R8Snorm, + Format::eB8G8R8Uscaled, + Format::eB8G8R8Sscaled, + Format::eB8G8R8Uint, + Format::eB8G8R8Sint, + Format::eB8G8R8Srgb, + Format::eR8G8B8A8Unorm, + Format::eR8G8B8A8Snorm, + Format::eR8G8B8A8Uscaled, + Format::eR8G8B8A8Sscaled, + Format::eR8G8B8A8Uint, + Format::eR8G8B8A8Sint, + Format::eR8G8B8A8Srgb, + Format::eB8G8R8A8Unorm, + Format::eB8G8R8A8Snorm, + Format::eB8G8R8A8Uscaled, + Format::eB8G8R8A8Sscaled, + Format::eB8G8R8A8Uint, + Format::eB8G8R8A8Sint, + Format::eB8G8R8A8Srgb, + Format::eA8B8G8R8UnormPack32, + Format::eA8B8G8R8SnormPack32, + Format::eA8B8G8R8UscaledPack32, + Format::eA8B8G8R8SscaledPack32, + Format::eA8B8G8R8UintPack32, + Format::eA8B8G8R8SintPack32, + Format::eA8B8G8R8SrgbPack32, + Format::eA2R10G10B10UnormPack32, + Format::eA2R10G10B10SnormPack32, + Format::eA2R10G10B10UscaledPack32, + Format::eA2R10G10B10SscaledPack32, + Format::eA2R10G10B10UintPack32, + Format::eA2R10G10B10SintPack32, + Format::eA2B10G10R10UnormPack32, + Format::eA2B10G10R10SnormPack32, + Format::eA2B10G10R10UscaledPack32, + Format::eA2B10G10R10SscaledPack32, + Format::eA2B10G10R10UintPack32, + Format::eA2B10G10R10SintPack32, + Format::eR16Unorm, + Format::eR16Snorm, + Format::eR16Uscaled, + Format::eR16Sscaled, + Format::eR16Uint, + Format::eR16Sint, + Format::eR16Sfloat, + Format::eR16G16Unorm, + Format::eR16G16Snorm, + Format::eR16G16Uscaled, + Format::eR16G16Sscaled, + Format::eR16G16Uint, + Format::eR16G16Sint, + Format::eR16G16Sfloat, + Format::eR16G16B16Unorm, + Format::eR16G16B16Snorm, + Format::eR16G16B16Uscaled, + Format::eR16G16B16Sscaled, + Format::eR16G16B16Uint, + Format::eR16G16B16Sint, + Format::eR16G16B16Sfloat, + Format::eR16G16B16A16Unorm, + Format::eR16G16B16A16Snorm, + Format::eR16G16B16A16Uscaled, + Format::eR16G16B16A16Sscaled, + Format::eR16G16B16A16Uint, + Format::eR16G16B16A16Sint, + Format::eR16G16B16A16Sfloat, + Format::eR32Uint, + Format::eR32Sint, + Format::eR32Sfloat, + Format::eR32G32Uint, + Format::eR32G32Sint, + Format::eR32G32Sfloat, + Format::eR32G32B32Uint, + Format::eR32G32B32Sint, + Format::eR32G32B32Sfloat, + Format::eR32G32B32A32Uint, + Format::eR32G32B32A32Sint, + Format::eR32G32B32A32Sfloat, + Format::eR64Uint, + Format::eR64Sint, + Format::eR64Sfloat, + Format::eR64G64Uint, + Format::eR64G64Sint, + Format::eR64G64Sfloat, + Format::eR64G64B64Uint, + Format::eR64G64B64Sint, + Format::eR64G64B64Sfloat, + Format::eR64G64B64A64Uint, + Format::eR64G64B64A64Sint, + Format::eR64G64B64A64Sfloat, + Format::eB10G11R11UfloatPack32, + Format::eE5B9G9R9UfloatPack32, + Format::eD16Unorm, + Format::eX8D24UnormPack32, + Format::eD32Sfloat, + Format::eS8Uint, + Format::eD16UnormS8Uint, + Format::eD24UnormS8Uint, + Format::eD32SfloatS8Uint, + Format::eBc1RgbUnormBlock, + Format::eBc1RgbSrgbBlock, + Format::eBc1RgbaUnormBlock, + Format::eBc1RgbaSrgbBlock, + Format::eBc2UnormBlock, + Format::eBc2SrgbBlock, + Format::eBc3UnormBlock, + Format::eBc3SrgbBlock, + Format::eBc4UnormBlock, + Format::eBc4SnormBlock, + Format::eBc5UnormBlock, + Format::eBc5SnormBlock, + Format::eBc6HUfloatBlock, + Format::eBc6HSfloatBlock, + Format::eBc7UnormBlock, + Format::eBc7SrgbBlock, + Format::eEtc2R8G8B8UnormBlock, + Format::eEtc2R8G8B8SrgbBlock, + Format::eEtc2R8G8B8A1UnormBlock, + Format::eEtc2R8G8B8A1SrgbBlock, + Format::eEtc2R8G8B8A8UnormBlock, + Format::eEtc2R8G8B8A8SrgbBlock, + Format::eEacR11UnormBlock, + Format::eEacR11SnormBlock, + Format::eEacR11G11UnormBlock, + Format::eEacR11G11SnormBlock, + Format::eAstc4x4UnormBlock, + Format::eAstc4x4SrgbBlock, + Format::eAstc5x4UnormBlock, + Format::eAstc5x4SrgbBlock, + Format::eAstc5x5UnormBlock, + Format::eAstc5x5SrgbBlock, + Format::eAstc6x5UnormBlock, + Format::eAstc6x5SrgbBlock, + Format::eAstc6x6UnormBlock, + Format::eAstc6x6SrgbBlock, + Format::eAstc8x5UnormBlock, + Format::eAstc8x5SrgbBlock, + Format::eAstc8x6UnormBlock, + Format::eAstc8x6SrgbBlock, + Format::eAstc8x8UnormBlock, + Format::eAstc8x8SrgbBlock, + Format::eAstc10x5UnormBlock, + Format::eAstc10x5SrgbBlock, + Format::eAstc10x6UnormBlock, + Format::eAstc10x6SrgbBlock, + Format::eAstc10x8UnormBlock, + Format::eAstc10x8SrgbBlock, + Format::eAstc10x10UnormBlock, + Format::eAstc10x10SrgbBlock, + Format::eAstc12x10UnormBlock, + Format::eAstc12x10SrgbBlock, + Format::eAstc12x12UnormBlock, + Format::eAstc12x12SrgbBlock, + Format::eG8B8G8R8422Unorm, + Format::eB8G8R8G8422Unorm, + Format::eG8B8R83Plane420Unorm, + Format::eG8B8R82Plane420Unorm, + Format::eG8B8R83Plane422Unorm, + Format::eG8B8R82Plane422Unorm, + Format::eG8B8R83Plane444Unorm, + Format::eR10X6UnormPack16, + Format::eR10X6G10X6Unorm2Pack16, + Format::eR10X6G10X6B10X6A10X6Unorm4Pack16, + Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16, + Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16, + Format::eG10X6B10X6R10X63Plane420Unorm3Pack16, + Format::eG10X6B10X6R10X62Plane420Unorm3Pack16, + Format::eG10X6B10X6R10X63Plane422Unorm3Pack16, + Format::eG10X6B10X6R10X62Plane422Unorm3Pack16, + Format::eG10X6B10X6R10X63Plane444Unorm3Pack16, + Format::eR12X4UnormPack16, + Format::eR12X4G12X4Unorm2Pack16, + Format::eR12X4G12X4B12X4A12X4Unorm4Pack16, + Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16, + Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16, + Format::eG12X4B12X4R12X43Plane420Unorm3Pack16, + Format::eG12X4B12X4R12X42Plane420Unorm3Pack16, + Format::eG12X4B12X4R12X43Plane422Unorm3Pack16, + Format::eG12X4B12X4R12X42Plane422Unorm3Pack16, + Format::eG12X4B12X4R12X43Plane444Unorm3Pack16, + Format::eG16B16G16R16422Unorm, + Format::eB16G16R16G16422Unorm, + Format::eG16B16R163Plane420Unorm, + Format::eG16B16R162Plane420Unorm, + Format::eG16B16R163Plane422Unorm, + Format::eG16B16R162Plane422Unorm, + Format::eG16B16R163Plane444Unorm, + Format::eG8B8R82Plane444Unorm, + Format::eG10X6B10X6R10X62Plane444Unorm3Pack16, + Format::eG12X4B12X4R12X42Plane444Unorm3Pack16, + Format::eG16B16R162Plane444Unorm, + Format::eA4R4G4B4UnormPack16, + Format::eA4B4G4R4UnormPack16, + Format::eAstc4x4SfloatBlock, + Format::eAstc5x4SfloatBlock, + Format::eAstc5x5SfloatBlock, + Format::eAstc6x5SfloatBlock, + Format::eAstc6x6SfloatBlock, + Format::eAstc8x5SfloatBlock, + Format::eAstc8x6SfloatBlock, + Format::eAstc8x8SfloatBlock, + Format::eAstc10x5SfloatBlock, + Format::eAstc10x6SfloatBlock, + Format::eAstc10x8SfloatBlock, + Format::eAstc10x10SfloatBlock, + Format::eAstc12x10SfloatBlock, + Format::eAstc12x12SfloatBlock, + Format::eA1B5G5R5UnormPack16, + Format::eA8Unorm, + Format::ePvrtc12BppUnormBlockIMG, + Format::ePvrtc14BppUnormBlockIMG, + Format::ePvrtc22BppUnormBlockIMG, + Format::ePvrtc24BppUnormBlockIMG, + Format::ePvrtc12BppSrgbBlockIMG, + Format::ePvrtc14BppSrgbBlockIMG, + Format::ePvrtc22BppSrgbBlockIMG, + Format::ePvrtc24BppSrgbBlockIMG, + Format::eR8BoolARM, + Format::eR16G16Sfixed5NV, + Format::eR10X6UintPack16ARM, + Format::eR10X6G10X6Uint2Pack16ARM, + Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM, + Format::eR12X4UintPack16ARM, + Format::eR12X4G12X4Uint2Pack16ARM, + Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM, + Format::eR14X2UintPack16ARM, + Format::eR14X2G14X2Uint2Pack16ARM, + Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM, + Format::eR14X2UnormPack16ARM, + Format::eR14X2G14X2Unorm2Pack16ARM, + Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM, + Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM, + Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM }; + return allFormats; + } + + // Get all formats with a color component + VULKAN_HPP_INLINE std::vector const & getColorFormats() + { + static std::vector colorFormats = { Format::eR4G4UnormPack8, + Format::eR4G4B4A4UnormPack16, + Format::eB4G4R4A4UnormPack16, + Format::eR5G6B5UnormPack16, + Format::eB5G6R5UnormPack16, + Format::eR5G5B5A1UnormPack16, + Format::eB5G5R5A1UnormPack16, + Format::eA1R5G5B5UnormPack16, + Format::eR8Unorm, + Format::eR8Snorm, + Format::eR8Uscaled, + Format::eR8Sscaled, + Format::eR8Uint, + Format::eR8Sint, + Format::eR8Srgb, + Format::eR8G8Unorm, + Format::eR8G8Snorm, + Format::eR8G8Uscaled, + Format::eR8G8Sscaled, + Format::eR8G8Uint, + Format::eR8G8Sint, + Format::eR8G8Srgb, + Format::eR8G8B8Unorm, + Format::eR8G8B8Snorm, + Format::eR8G8B8Uscaled, + Format::eR8G8B8Sscaled, + Format::eR8G8B8Uint, + Format::eR8G8B8Sint, + Format::eR8G8B8Srgb, + Format::eB8G8R8Unorm, + Format::eB8G8R8Snorm, + Format::eB8G8R8Uscaled, + Format::eB8G8R8Sscaled, + Format::eB8G8R8Uint, + Format::eB8G8R8Sint, + Format::eB8G8R8Srgb, + Format::eR8G8B8A8Unorm, + Format::eR8G8B8A8Snorm, + Format::eR8G8B8A8Uscaled, + Format::eR8G8B8A8Sscaled, + Format::eR8G8B8A8Uint, + Format::eR8G8B8A8Sint, + Format::eR8G8B8A8Srgb, + Format::eB8G8R8A8Unorm, + Format::eB8G8R8A8Snorm, + Format::eB8G8R8A8Uscaled, + Format::eB8G8R8A8Sscaled, + Format::eB8G8R8A8Uint, + Format::eB8G8R8A8Sint, + Format::eB8G8R8A8Srgb, + Format::eA8B8G8R8UnormPack32, + Format::eA8B8G8R8SnormPack32, + Format::eA8B8G8R8UscaledPack32, + Format::eA8B8G8R8SscaledPack32, + Format::eA8B8G8R8UintPack32, + Format::eA8B8G8R8SintPack32, + Format::eA8B8G8R8SrgbPack32, + Format::eA2R10G10B10UnormPack32, + Format::eA2R10G10B10SnormPack32, + Format::eA2R10G10B10UscaledPack32, + Format::eA2R10G10B10SscaledPack32, + Format::eA2R10G10B10UintPack32, + Format::eA2R10G10B10SintPack32, + Format::eA2B10G10R10UnormPack32, + Format::eA2B10G10R10SnormPack32, + Format::eA2B10G10R10UscaledPack32, + Format::eA2B10G10R10SscaledPack32, + Format::eA2B10G10R10UintPack32, + Format::eA2B10G10R10SintPack32, + Format::eR16Unorm, + Format::eR16Snorm, + Format::eR16Uscaled, + Format::eR16Sscaled, + Format::eR16Uint, + Format::eR16Sint, + Format::eR16Sfloat, + Format::eR16G16Unorm, + Format::eR16G16Snorm, + Format::eR16G16Uscaled, + Format::eR16G16Sscaled, + Format::eR16G16Uint, + Format::eR16G16Sint, + Format::eR16G16Sfloat, + Format::eR16G16B16Unorm, + Format::eR16G16B16Snorm, + Format::eR16G16B16Uscaled, + Format::eR16G16B16Sscaled, + Format::eR16G16B16Uint, + Format::eR16G16B16Sint, + Format::eR16G16B16Sfloat, + Format::eR16G16B16A16Unorm, + Format::eR16G16B16A16Snorm, + Format::eR16G16B16A16Uscaled, + Format::eR16G16B16A16Sscaled, + Format::eR16G16B16A16Uint, + Format::eR16G16B16A16Sint, + Format::eR16G16B16A16Sfloat, + Format::eR32Uint, + Format::eR32Sint, + Format::eR32Sfloat, + Format::eR32G32Uint, + Format::eR32G32Sint, + Format::eR32G32Sfloat, + Format::eR32G32B32Uint, + Format::eR32G32B32Sint, + Format::eR32G32B32Sfloat, + Format::eR32G32B32A32Uint, + Format::eR32G32B32A32Sint, + Format::eR32G32B32A32Sfloat, + Format::eR64Uint, + Format::eR64Sint, + Format::eR64Sfloat, + Format::eR64G64Uint, + Format::eR64G64Sint, + Format::eR64G64Sfloat, + Format::eR64G64B64Uint, + Format::eR64G64B64Sint, + Format::eR64G64B64Sfloat, + Format::eR64G64B64A64Uint, + Format::eR64G64B64A64Sint, + Format::eR64G64B64A64Sfloat, + Format::eB10G11R11UfloatPack32, + Format::eE5B9G9R9UfloatPack32, + Format::eBc1RgbUnormBlock, + Format::eBc1RgbSrgbBlock, + Format::eBc1RgbaUnormBlock, + Format::eBc1RgbaSrgbBlock, + Format::eBc2UnormBlock, + Format::eBc2SrgbBlock, + Format::eBc3UnormBlock, + Format::eBc3SrgbBlock, + Format::eBc4UnormBlock, + Format::eBc4SnormBlock, + Format::eBc5UnormBlock, + Format::eBc5SnormBlock, + Format::eBc6HUfloatBlock, + Format::eBc6HSfloatBlock, + Format::eBc7UnormBlock, + Format::eBc7SrgbBlock, + Format::eEtc2R8G8B8UnormBlock, + Format::eEtc2R8G8B8SrgbBlock, + Format::eEtc2R8G8B8A1UnormBlock, + Format::eEtc2R8G8B8A1SrgbBlock, + Format::eEtc2R8G8B8A8UnormBlock, + Format::eEtc2R8G8B8A8SrgbBlock, + Format::eEacR11UnormBlock, + Format::eEacR11SnormBlock, + Format::eEacR11G11UnormBlock, + Format::eEacR11G11SnormBlock, + Format::eAstc4x4UnormBlock, + Format::eAstc4x4SrgbBlock, + Format::eAstc5x4UnormBlock, + Format::eAstc5x4SrgbBlock, + Format::eAstc5x5UnormBlock, + Format::eAstc5x5SrgbBlock, + Format::eAstc6x5UnormBlock, + Format::eAstc6x5SrgbBlock, + Format::eAstc6x6UnormBlock, + Format::eAstc6x6SrgbBlock, + Format::eAstc8x5UnormBlock, + Format::eAstc8x5SrgbBlock, + Format::eAstc8x6UnormBlock, + Format::eAstc8x6SrgbBlock, + Format::eAstc8x8UnormBlock, + Format::eAstc8x8SrgbBlock, + Format::eAstc10x5UnormBlock, + Format::eAstc10x5SrgbBlock, + Format::eAstc10x6UnormBlock, + Format::eAstc10x6SrgbBlock, + Format::eAstc10x8UnormBlock, + Format::eAstc10x8SrgbBlock, + Format::eAstc10x10UnormBlock, + Format::eAstc10x10SrgbBlock, + Format::eAstc12x10UnormBlock, + Format::eAstc12x10SrgbBlock, + Format::eAstc12x12UnormBlock, + Format::eAstc12x12SrgbBlock, + Format::eG8B8G8R8422Unorm, + Format::eB8G8R8G8422Unorm, + Format::eG8B8R83Plane420Unorm, + Format::eG8B8R82Plane420Unorm, + Format::eG8B8R83Plane422Unorm, + Format::eG8B8R82Plane422Unorm, + Format::eG8B8R83Plane444Unorm, + Format::eR10X6UnormPack16, + Format::eR10X6G10X6Unorm2Pack16, + Format::eR10X6G10X6B10X6A10X6Unorm4Pack16, + Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16, + Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16, + Format::eG10X6B10X6R10X63Plane420Unorm3Pack16, + Format::eG10X6B10X6R10X62Plane420Unorm3Pack16, + Format::eG10X6B10X6R10X63Plane422Unorm3Pack16, + Format::eG10X6B10X6R10X62Plane422Unorm3Pack16, + Format::eG10X6B10X6R10X63Plane444Unorm3Pack16, + Format::eR12X4UnormPack16, + Format::eR12X4G12X4Unorm2Pack16, + Format::eR12X4G12X4B12X4A12X4Unorm4Pack16, + Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16, + Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16, + Format::eG12X4B12X4R12X43Plane420Unorm3Pack16, + Format::eG12X4B12X4R12X42Plane420Unorm3Pack16, + Format::eG12X4B12X4R12X43Plane422Unorm3Pack16, + Format::eG12X4B12X4R12X42Plane422Unorm3Pack16, + Format::eG12X4B12X4R12X43Plane444Unorm3Pack16, + Format::eG16B16G16R16422Unorm, + Format::eB16G16R16G16422Unorm, + Format::eG16B16R163Plane420Unorm, + Format::eG16B16R162Plane420Unorm, + Format::eG16B16R163Plane422Unorm, + Format::eG16B16R162Plane422Unorm, + Format::eG16B16R163Plane444Unorm, + Format::eG8B8R82Plane444Unorm, + Format::eG10X6B10X6R10X62Plane444Unorm3Pack16, + Format::eG12X4B12X4R12X42Plane444Unorm3Pack16, + Format::eG16B16R162Plane444Unorm, + Format::eA4R4G4B4UnormPack16, + Format::eA4B4G4R4UnormPack16, + Format::eAstc4x4SfloatBlock, + Format::eAstc5x4SfloatBlock, + Format::eAstc5x5SfloatBlock, + Format::eAstc6x5SfloatBlock, + Format::eAstc6x6SfloatBlock, + Format::eAstc8x5SfloatBlock, + Format::eAstc8x6SfloatBlock, + Format::eAstc8x8SfloatBlock, + Format::eAstc10x5SfloatBlock, + Format::eAstc10x6SfloatBlock, + Format::eAstc10x8SfloatBlock, + Format::eAstc10x10SfloatBlock, + Format::eAstc12x10SfloatBlock, + Format::eAstc12x12SfloatBlock, + Format::eA1B5G5R5UnormPack16, + Format::eA8Unorm, + Format::ePvrtc12BppUnormBlockIMG, + Format::ePvrtc14BppUnormBlockIMG, + Format::ePvrtc22BppUnormBlockIMG, + Format::ePvrtc24BppUnormBlockIMG, + Format::ePvrtc12BppSrgbBlockIMG, + Format::ePvrtc14BppSrgbBlockIMG, + Format::ePvrtc22BppSrgbBlockIMG, + Format::ePvrtc24BppSrgbBlockIMG, + Format::eR8BoolARM, + Format::eR16G16Sfixed5NV, + Format::eR10X6UintPack16ARM, + Format::eR10X6G10X6Uint2Pack16ARM, + Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM, + Format::eR12X4UintPack16ARM, + Format::eR12X4G12X4Uint2Pack16ARM, + Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM, + Format::eR14X2UintPack16ARM, + Format::eR14X2G14X2Uint2Pack16ARM, + Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM, + Format::eR14X2UnormPack16ARM, + Format::eR14X2G14X2Unorm2Pack16ARM, + Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM, + Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM, + Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM }; + return colorFormats; + } + + // Get all formats with a depth component + VULKAN_HPP_INLINE std::vector const & getDepthFormats() + { + static std::vector depthFormats = { Format::eD16Unorm, Format::eX8D24UnormPack32, Format::eD32Sfloat, + Format::eD16UnormS8Uint, Format::eD24UnormS8Uint, Format::eD32SfloatS8Uint }; + return depthFormats; + } + + // Get all formats with a depth and a stencil component + VULKAN_HPP_INLINE std::vector const & getDepthStencilFormats() + { + static std::vector depthStencilFormats = { Format::eD16UnormS8Uint, Format::eD24UnormS8Uint, Format::eD32SfloatS8Uint }; + return depthStencilFormats; + } + + // Get all formats with a stencil component + VULKAN_HPP_INLINE std::vector const & getStencilFormats() + { + static std::vector stencilFormats = { Format::eS8Uint, Format::eD16UnormS8Uint, Format::eD24UnormS8Uint, Format::eD32SfloatS8Uint }; + return stencilFormats; + } + + // True, if this format has an alpha component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool hasAlphaComponent( Format format ) + { + switch ( format ) + { + case Format::eR4G4B4A4UnormPack16: + case Format::eB4G4R4A4UnormPack16: + case Format::eR5G5B5A1UnormPack16: + case Format::eB5G5R5A1UnormPack16: + case Format::eA1R5G5B5UnormPack16: + case Format::eR8G8B8A8Unorm: + case Format::eR8G8B8A8Snorm: + case Format::eR8G8B8A8Uscaled: + case Format::eR8G8B8A8Sscaled: + case Format::eR8G8B8A8Uint: + case Format::eR8G8B8A8Sint: + case Format::eR8G8B8A8Srgb: + case Format::eB8G8R8A8Unorm: + case Format::eB8G8R8A8Snorm: + case Format::eB8G8R8A8Uscaled: + case Format::eB8G8R8A8Sscaled: + case Format::eB8G8R8A8Uint: + case Format::eB8G8R8A8Sint: + case Format::eB8G8R8A8Srgb: + case Format::eA8B8G8R8UnormPack32: + case Format::eA8B8G8R8SnormPack32: + case Format::eA8B8G8R8UscaledPack32: + case Format::eA8B8G8R8SscaledPack32: + case Format::eA8B8G8R8UintPack32: + case Format::eA8B8G8R8SintPack32: + case Format::eA8B8G8R8SrgbPack32: + case Format::eA2R10G10B10UnormPack32: + case Format::eA2R10G10B10SnormPack32: + case Format::eA2R10G10B10UscaledPack32: + case Format::eA2R10G10B10SscaledPack32: + case Format::eA2R10G10B10UintPack32: + case Format::eA2R10G10B10SintPack32: + case Format::eA2B10G10R10UnormPack32: + case Format::eA2B10G10R10SnormPack32: + case Format::eA2B10G10R10UscaledPack32: + case Format::eA2B10G10R10SscaledPack32: + case Format::eA2B10G10R10UintPack32: + case Format::eA2B10G10R10SintPack32: + case Format::eR16G16B16A16Unorm: + case Format::eR16G16B16A16Snorm: + case Format::eR16G16B16A16Uscaled: + case Format::eR16G16B16A16Sscaled: + case Format::eR16G16B16A16Uint: + case Format::eR16G16B16A16Sint: + case Format::eR16G16B16A16Sfloat: + case Format::eR32G32B32A32Uint: + case Format::eR32G32B32A32Sint: + case Format::eR32G32B32A32Sfloat: + case Format::eR64G64B64A64Uint: + case Format::eR64G64B64A64Sint: + case Format::eR64G64B64A64Sfloat: + case Format::eBc1RgbaUnormBlock: + case Format::eBc1RgbaSrgbBlock: + case Format::eBc2UnormBlock: + case Format::eBc2SrgbBlock: + case Format::eBc3UnormBlock: + case Format::eBc3SrgbBlock: + case Format::eBc7UnormBlock: + case Format::eBc7SrgbBlock: + case Format::eEtc2R8G8B8A1UnormBlock: + case Format::eEtc2R8G8B8A1SrgbBlock: + case Format::eEtc2R8G8B8A8UnormBlock: + case Format::eEtc2R8G8B8A8SrgbBlock: + case Format::eAstc4x4UnormBlock: + case Format::eAstc4x4SrgbBlock: + case Format::eAstc5x4UnormBlock: + case Format::eAstc5x4SrgbBlock: + case Format::eAstc5x5UnormBlock: + case Format::eAstc5x5SrgbBlock: + case Format::eAstc6x5UnormBlock: + case Format::eAstc6x5SrgbBlock: + case Format::eAstc6x6UnormBlock: + case Format::eAstc6x6SrgbBlock: + case Format::eAstc8x5UnormBlock: + case Format::eAstc8x5SrgbBlock: + case Format::eAstc8x6UnormBlock: + case Format::eAstc8x6SrgbBlock: + case Format::eAstc8x8UnormBlock: + case Format::eAstc8x8SrgbBlock: + case Format::eAstc10x5UnormBlock: + case Format::eAstc10x5SrgbBlock: + case Format::eAstc10x6UnormBlock: + case Format::eAstc10x6SrgbBlock: + case Format::eAstc10x8UnormBlock: + case Format::eAstc10x8SrgbBlock: + case Format::eAstc10x10UnormBlock: + case Format::eAstc10x10SrgbBlock: + case Format::eAstc12x10UnormBlock: + case Format::eAstc12x10SrgbBlock: + case Format::eAstc12x12UnormBlock: + case Format::eAstc12x12SrgbBlock: + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + case Format::eA4R4G4B4UnormPack16: + case Format::eA4B4G4R4UnormPack16: + case Format::eAstc4x4SfloatBlock: + case Format::eAstc5x4SfloatBlock: + case Format::eAstc5x5SfloatBlock: + case Format::eAstc6x5SfloatBlock: + case Format::eAstc6x6SfloatBlock: + case Format::eAstc8x5SfloatBlock: + case Format::eAstc8x6SfloatBlock: + case Format::eAstc8x8SfloatBlock: + case Format::eAstc10x5SfloatBlock: + case Format::eAstc10x6SfloatBlock: + case Format::eAstc10x8SfloatBlock: + case Format::eAstc10x10SfloatBlock: + case Format::eAstc12x10SfloatBlock: + case Format::eAstc12x12SfloatBlock: + case Format::eA1B5G5R5UnormPack16: + case Format::eA8Unorm: + case Format::ePvrtc12BppUnormBlockIMG: + case Format::ePvrtc14BppUnormBlockIMG: + case Format::ePvrtc22BppUnormBlockIMG: + case Format::ePvrtc24BppUnormBlockIMG: + case Format::ePvrtc12BppSrgbBlockIMG: + case Format::ePvrtc14BppSrgbBlockIMG: + case Format::ePvrtc22BppSrgbBlockIMG: + case Format::ePvrtc24BppSrgbBlockIMG: + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: return true; + default : return false; + } + } + + // True, if this format has a blue component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool hasBlueComponent( Format format ) + { + switch ( format ) + { + case Format::eR4G4B4A4UnormPack16: + case Format::eB4G4R4A4UnormPack16: + case Format::eR5G6B5UnormPack16: + case Format::eB5G6R5UnormPack16: + case Format::eR5G5B5A1UnormPack16: + case Format::eB5G5R5A1UnormPack16: + case Format::eA1R5G5B5UnormPack16: + case Format::eR8G8B8Unorm: + case Format::eR8G8B8Snorm: + case Format::eR8G8B8Uscaled: + case Format::eR8G8B8Sscaled: + case Format::eR8G8B8Uint: + case Format::eR8G8B8Sint: + case Format::eR8G8B8Srgb: + case Format::eB8G8R8Unorm: + case Format::eB8G8R8Snorm: + case Format::eB8G8R8Uscaled: + case Format::eB8G8R8Sscaled: + case Format::eB8G8R8Uint: + case Format::eB8G8R8Sint: + case Format::eB8G8R8Srgb: + case Format::eR8G8B8A8Unorm: + case Format::eR8G8B8A8Snorm: + case Format::eR8G8B8A8Uscaled: + case Format::eR8G8B8A8Sscaled: + case Format::eR8G8B8A8Uint: + case Format::eR8G8B8A8Sint: + case Format::eR8G8B8A8Srgb: + case Format::eB8G8R8A8Unorm: + case Format::eB8G8R8A8Snorm: + case Format::eB8G8R8A8Uscaled: + case Format::eB8G8R8A8Sscaled: + case Format::eB8G8R8A8Uint: + case Format::eB8G8R8A8Sint: + case Format::eB8G8R8A8Srgb: + case Format::eA8B8G8R8UnormPack32: + case Format::eA8B8G8R8SnormPack32: + case Format::eA8B8G8R8UscaledPack32: + case Format::eA8B8G8R8SscaledPack32: + case Format::eA8B8G8R8UintPack32: + case Format::eA8B8G8R8SintPack32: + case Format::eA8B8G8R8SrgbPack32: + case Format::eA2R10G10B10UnormPack32: + case Format::eA2R10G10B10SnormPack32: + case Format::eA2R10G10B10UscaledPack32: + case Format::eA2R10G10B10SscaledPack32: + case Format::eA2R10G10B10UintPack32: + case Format::eA2R10G10B10SintPack32: + case Format::eA2B10G10R10UnormPack32: + case Format::eA2B10G10R10SnormPack32: + case Format::eA2B10G10R10UscaledPack32: + case Format::eA2B10G10R10SscaledPack32: + case Format::eA2B10G10R10UintPack32: + case Format::eA2B10G10R10SintPack32: + case Format::eR16G16B16Unorm: + case Format::eR16G16B16Snorm: + case Format::eR16G16B16Uscaled: + case Format::eR16G16B16Sscaled: + case Format::eR16G16B16Uint: + case Format::eR16G16B16Sint: + case Format::eR16G16B16Sfloat: + case Format::eR16G16B16A16Unorm: + case Format::eR16G16B16A16Snorm: + case Format::eR16G16B16A16Uscaled: + case Format::eR16G16B16A16Sscaled: + case Format::eR16G16B16A16Uint: + case Format::eR16G16B16A16Sint: + case Format::eR16G16B16A16Sfloat: + case Format::eR32G32B32Uint: + case Format::eR32G32B32Sint: + case Format::eR32G32B32Sfloat: + case Format::eR32G32B32A32Uint: + case Format::eR32G32B32A32Sint: + case Format::eR32G32B32A32Sfloat: + case Format::eR64G64B64Uint: + case Format::eR64G64B64Sint: + case Format::eR64G64B64Sfloat: + case Format::eR64G64B64A64Uint: + case Format::eR64G64B64A64Sint: + case Format::eR64G64B64A64Sfloat: + case Format::eB10G11R11UfloatPack32: + case Format::eE5B9G9R9UfloatPack32: + case Format::eBc1RgbUnormBlock: + case Format::eBc1RgbSrgbBlock: + case Format::eBc1RgbaUnormBlock: + case Format::eBc1RgbaSrgbBlock: + case Format::eBc2UnormBlock: + case Format::eBc2SrgbBlock: + case Format::eBc3UnormBlock: + case Format::eBc3SrgbBlock: + case Format::eBc6HUfloatBlock: + case Format::eBc6HSfloatBlock: + case Format::eBc7UnormBlock: + case Format::eBc7SrgbBlock: + case Format::eEtc2R8G8B8UnormBlock: + case Format::eEtc2R8G8B8SrgbBlock: + case Format::eEtc2R8G8B8A1UnormBlock: + case Format::eEtc2R8G8B8A1SrgbBlock: + case Format::eEtc2R8G8B8A8UnormBlock: + case Format::eEtc2R8G8B8A8SrgbBlock: + case Format::eAstc4x4UnormBlock: + case Format::eAstc4x4SrgbBlock: + case Format::eAstc5x4UnormBlock: + case Format::eAstc5x4SrgbBlock: + case Format::eAstc5x5UnormBlock: + case Format::eAstc5x5SrgbBlock: + case Format::eAstc6x5UnormBlock: + case Format::eAstc6x5SrgbBlock: + case Format::eAstc6x6UnormBlock: + case Format::eAstc6x6SrgbBlock: + case Format::eAstc8x5UnormBlock: + case Format::eAstc8x5SrgbBlock: + case Format::eAstc8x6UnormBlock: + case Format::eAstc8x6SrgbBlock: + case Format::eAstc8x8UnormBlock: + case Format::eAstc8x8SrgbBlock: + case Format::eAstc10x5UnormBlock: + case Format::eAstc10x5SrgbBlock: + case Format::eAstc10x6UnormBlock: + case Format::eAstc10x6SrgbBlock: + case Format::eAstc10x8UnormBlock: + case Format::eAstc10x8SrgbBlock: + case Format::eAstc10x10UnormBlock: + case Format::eAstc10x10SrgbBlock: + case Format::eAstc12x10UnormBlock: + case Format::eAstc12x10SrgbBlock: + case Format::eAstc12x12UnormBlock: + case Format::eAstc12x12SrgbBlock: + case Format::eG8B8G8R8422Unorm: + case Format::eB8G8R8G8422Unorm: + case Format::eG8B8R83Plane420Unorm: + case Format::eG8B8R82Plane420Unorm: + case Format::eG8B8R83Plane422Unorm: + case Format::eG8B8R82Plane422Unorm: + case Format::eG8B8R83Plane444Unorm: + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + case Format::eG16B16G16R16422Unorm: + case Format::eB16G16R16G16422Unorm: + case Format::eG16B16R163Plane420Unorm: + case Format::eG16B16R162Plane420Unorm: + case Format::eG16B16R163Plane422Unorm: + case Format::eG16B16R162Plane422Unorm: + case Format::eG16B16R163Plane444Unorm: + case Format::eG8B8R82Plane444Unorm: + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + case Format::eG16B16R162Plane444Unorm: + case Format::eA4R4G4B4UnormPack16: + case Format::eA4B4G4R4UnormPack16: + case Format::eAstc4x4SfloatBlock: + case Format::eAstc5x4SfloatBlock: + case Format::eAstc5x5SfloatBlock: + case Format::eAstc6x5SfloatBlock: + case Format::eAstc6x6SfloatBlock: + case Format::eAstc8x5SfloatBlock: + case Format::eAstc8x6SfloatBlock: + case Format::eAstc8x8SfloatBlock: + case Format::eAstc10x5SfloatBlock: + case Format::eAstc10x6SfloatBlock: + case Format::eAstc10x8SfloatBlock: + case Format::eAstc10x10SfloatBlock: + case Format::eAstc12x10SfloatBlock: + case Format::eAstc12x12SfloatBlock: + case Format::eA1B5G5R5UnormPack16: + case Format::ePvrtc12BppUnormBlockIMG: + case Format::ePvrtc14BppUnormBlockIMG: + case Format::ePvrtc22BppUnormBlockIMG: + case Format::ePvrtc24BppUnormBlockIMG: + case Format::ePvrtc12BppSrgbBlockIMG: + case Format::ePvrtc14BppSrgbBlockIMG: + case Format::ePvrtc22BppSrgbBlockIMG: + case Format::ePvrtc24BppSrgbBlockIMG: + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return true; + default : return false; + } + } + + // True, if this format has a depth component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool hasDepthComponent( Format format ) + { + switch ( format ) + { + case Format::eD16Unorm: + case Format::eX8D24UnormPack32: + case Format::eD32Sfloat: + case Format::eD16UnormS8Uint: + case Format::eD24UnormS8Uint: + case Format::eD32SfloatS8Uint : return true; + default : return false; + } + } + + // True, if this format has a green component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool hasGreenComponent( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8: + case Format::eR4G4B4A4UnormPack16: + case Format::eB4G4R4A4UnormPack16: + case Format::eR5G6B5UnormPack16: + case Format::eB5G6R5UnormPack16: + case Format::eR5G5B5A1UnormPack16: + case Format::eB5G5R5A1UnormPack16: + case Format::eA1R5G5B5UnormPack16: + case Format::eR8G8Unorm: + case Format::eR8G8Snorm: + case Format::eR8G8Uscaled: + case Format::eR8G8Sscaled: + case Format::eR8G8Uint: + case Format::eR8G8Sint: + case Format::eR8G8Srgb: + case Format::eR8G8B8Unorm: + case Format::eR8G8B8Snorm: + case Format::eR8G8B8Uscaled: + case Format::eR8G8B8Sscaled: + case Format::eR8G8B8Uint: + case Format::eR8G8B8Sint: + case Format::eR8G8B8Srgb: + case Format::eB8G8R8Unorm: + case Format::eB8G8R8Snorm: + case Format::eB8G8R8Uscaled: + case Format::eB8G8R8Sscaled: + case Format::eB8G8R8Uint: + case Format::eB8G8R8Sint: + case Format::eB8G8R8Srgb: + case Format::eR8G8B8A8Unorm: + case Format::eR8G8B8A8Snorm: + case Format::eR8G8B8A8Uscaled: + case Format::eR8G8B8A8Sscaled: + case Format::eR8G8B8A8Uint: + case Format::eR8G8B8A8Sint: + case Format::eR8G8B8A8Srgb: + case Format::eB8G8R8A8Unorm: + case Format::eB8G8R8A8Snorm: + case Format::eB8G8R8A8Uscaled: + case Format::eB8G8R8A8Sscaled: + case Format::eB8G8R8A8Uint: + case Format::eB8G8R8A8Sint: + case Format::eB8G8R8A8Srgb: + case Format::eA8B8G8R8UnormPack32: + case Format::eA8B8G8R8SnormPack32: + case Format::eA8B8G8R8UscaledPack32: + case Format::eA8B8G8R8SscaledPack32: + case Format::eA8B8G8R8UintPack32: + case Format::eA8B8G8R8SintPack32: + case Format::eA8B8G8R8SrgbPack32: + case Format::eA2R10G10B10UnormPack32: + case Format::eA2R10G10B10SnormPack32: + case Format::eA2R10G10B10UscaledPack32: + case Format::eA2R10G10B10SscaledPack32: + case Format::eA2R10G10B10UintPack32: + case Format::eA2R10G10B10SintPack32: + case Format::eA2B10G10R10UnormPack32: + case Format::eA2B10G10R10SnormPack32: + case Format::eA2B10G10R10UscaledPack32: + case Format::eA2B10G10R10SscaledPack32: + case Format::eA2B10G10R10UintPack32: + case Format::eA2B10G10R10SintPack32: + case Format::eR16G16Unorm: + case Format::eR16G16Snorm: + case Format::eR16G16Uscaled: + case Format::eR16G16Sscaled: + case Format::eR16G16Uint: + case Format::eR16G16Sint: + case Format::eR16G16Sfloat: + case Format::eR16G16B16Unorm: + case Format::eR16G16B16Snorm: + case Format::eR16G16B16Uscaled: + case Format::eR16G16B16Sscaled: + case Format::eR16G16B16Uint: + case Format::eR16G16B16Sint: + case Format::eR16G16B16Sfloat: + case Format::eR16G16B16A16Unorm: + case Format::eR16G16B16A16Snorm: + case Format::eR16G16B16A16Uscaled: + case Format::eR16G16B16A16Sscaled: + case Format::eR16G16B16A16Uint: + case Format::eR16G16B16A16Sint: + case Format::eR16G16B16A16Sfloat: + case Format::eR32G32Uint: + case Format::eR32G32Sint: + case Format::eR32G32Sfloat: + case Format::eR32G32B32Uint: + case Format::eR32G32B32Sint: + case Format::eR32G32B32Sfloat: + case Format::eR32G32B32A32Uint: + case Format::eR32G32B32A32Sint: + case Format::eR32G32B32A32Sfloat: + case Format::eR64G64Uint: + case Format::eR64G64Sint: + case Format::eR64G64Sfloat: + case Format::eR64G64B64Uint: + case Format::eR64G64B64Sint: + case Format::eR64G64B64Sfloat: + case Format::eR64G64B64A64Uint: + case Format::eR64G64B64A64Sint: + case Format::eR64G64B64A64Sfloat: + case Format::eB10G11R11UfloatPack32: + case Format::eE5B9G9R9UfloatPack32: + case Format::eBc1RgbUnormBlock: + case Format::eBc1RgbSrgbBlock: + case Format::eBc1RgbaUnormBlock: + case Format::eBc1RgbaSrgbBlock: + case Format::eBc2UnormBlock: + case Format::eBc2SrgbBlock: + case Format::eBc3UnormBlock: + case Format::eBc3SrgbBlock: + case Format::eBc5UnormBlock: + case Format::eBc5SnormBlock: + case Format::eBc6HUfloatBlock: + case Format::eBc6HSfloatBlock: + case Format::eBc7UnormBlock: + case Format::eBc7SrgbBlock: + case Format::eEtc2R8G8B8UnormBlock: + case Format::eEtc2R8G8B8SrgbBlock: + case Format::eEtc2R8G8B8A1UnormBlock: + case Format::eEtc2R8G8B8A1SrgbBlock: + case Format::eEtc2R8G8B8A8UnormBlock: + case Format::eEtc2R8G8B8A8SrgbBlock: + case Format::eEacR11G11UnormBlock: + case Format::eEacR11G11SnormBlock: + case Format::eAstc4x4UnormBlock: + case Format::eAstc4x4SrgbBlock: + case Format::eAstc5x4UnormBlock: + case Format::eAstc5x4SrgbBlock: + case Format::eAstc5x5UnormBlock: + case Format::eAstc5x5SrgbBlock: + case Format::eAstc6x5UnormBlock: + case Format::eAstc6x5SrgbBlock: + case Format::eAstc6x6UnormBlock: + case Format::eAstc6x6SrgbBlock: + case Format::eAstc8x5UnormBlock: + case Format::eAstc8x5SrgbBlock: + case Format::eAstc8x6UnormBlock: + case Format::eAstc8x6SrgbBlock: + case Format::eAstc8x8UnormBlock: + case Format::eAstc8x8SrgbBlock: + case Format::eAstc10x5UnormBlock: + case Format::eAstc10x5SrgbBlock: + case Format::eAstc10x6UnormBlock: + case Format::eAstc10x6SrgbBlock: + case Format::eAstc10x8UnormBlock: + case Format::eAstc10x8SrgbBlock: + case Format::eAstc10x10UnormBlock: + case Format::eAstc10x10SrgbBlock: + case Format::eAstc12x10UnormBlock: + case Format::eAstc12x10SrgbBlock: + case Format::eAstc12x12UnormBlock: + case Format::eAstc12x12SrgbBlock: + case Format::eG8B8G8R8422Unorm: + case Format::eB8G8R8G8422Unorm: + case Format::eG8B8R83Plane420Unorm: + case Format::eG8B8R82Plane420Unorm: + case Format::eG8B8R83Plane422Unorm: + case Format::eG8B8R82Plane422Unorm: + case Format::eG8B8R83Plane444Unorm: + case Format::eR10X6G10X6Unorm2Pack16: + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + case Format::eR12X4G12X4Unorm2Pack16: + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + case Format::eG16B16G16R16422Unorm: + case Format::eB16G16R16G16422Unorm: + case Format::eG16B16R163Plane420Unorm: + case Format::eG16B16R162Plane420Unorm: + case Format::eG16B16R163Plane422Unorm: + case Format::eG16B16R162Plane422Unorm: + case Format::eG16B16R163Plane444Unorm: + case Format::eG8B8R82Plane444Unorm: + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + case Format::eG16B16R162Plane444Unorm: + case Format::eA4R4G4B4UnormPack16: + case Format::eA4B4G4R4UnormPack16: + case Format::eAstc4x4SfloatBlock: + case Format::eAstc5x4SfloatBlock: + case Format::eAstc5x5SfloatBlock: + case Format::eAstc6x5SfloatBlock: + case Format::eAstc6x6SfloatBlock: + case Format::eAstc8x5SfloatBlock: + case Format::eAstc8x6SfloatBlock: + case Format::eAstc8x8SfloatBlock: + case Format::eAstc10x5SfloatBlock: + case Format::eAstc10x6SfloatBlock: + case Format::eAstc10x8SfloatBlock: + case Format::eAstc10x10SfloatBlock: + case Format::eAstc12x10SfloatBlock: + case Format::eAstc12x12SfloatBlock: + case Format::eA1B5G5R5UnormPack16: + case Format::ePvrtc12BppUnormBlockIMG: + case Format::ePvrtc14BppUnormBlockIMG: + case Format::ePvrtc22BppUnormBlockIMG: + case Format::ePvrtc24BppUnormBlockIMG: + case Format::ePvrtc12BppSrgbBlockIMG: + case Format::ePvrtc14BppSrgbBlockIMG: + case Format::ePvrtc22BppSrgbBlockIMG: + case Format::ePvrtc24BppSrgbBlockIMG: + case Format::eR16G16Sfixed5NV: + case Format::eR10X6G10X6Uint2Pack16ARM: + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + case Format::eR12X4G12X4Uint2Pack16ARM: + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + case Format::eR14X2G14X2Uint2Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + case Format::eR14X2G14X2Unorm2Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return true; + default : return false; + } + } + + // True, if this format has a red component + VULKAN_HPP_CONSTEXPR_14 bool hasRedComponent( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8: + case Format::eR4G4B4A4UnormPack16: + case Format::eB4G4R4A4UnormPack16: + case Format::eR5G6B5UnormPack16: + case Format::eB5G6R5UnormPack16: + case Format::eR5G5B5A1UnormPack16: + case Format::eB5G5R5A1UnormPack16: + case Format::eA1R5G5B5UnormPack16: + case Format::eR8Unorm: + case Format::eR8Snorm: + case Format::eR8Uscaled: + case Format::eR8Sscaled: + case Format::eR8Uint: + case Format::eR8Sint: + case Format::eR8Srgb: + case Format::eR8G8Unorm: + case Format::eR8G8Snorm: + case Format::eR8G8Uscaled: + case Format::eR8G8Sscaled: + case Format::eR8G8Uint: + case Format::eR8G8Sint: + case Format::eR8G8Srgb: + case Format::eR8G8B8Unorm: + case Format::eR8G8B8Snorm: + case Format::eR8G8B8Uscaled: + case Format::eR8G8B8Sscaled: + case Format::eR8G8B8Uint: + case Format::eR8G8B8Sint: + case Format::eR8G8B8Srgb: + case Format::eB8G8R8Unorm: + case Format::eB8G8R8Snorm: + case Format::eB8G8R8Uscaled: + case Format::eB8G8R8Sscaled: + case Format::eB8G8R8Uint: + case Format::eB8G8R8Sint: + case Format::eB8G8R8Srgb: + case Format::eR8G8B8A8Unorm: + case Format::eR8G8B8A8Snorm: + case Format::eR8G8B8A8Uscaled: + case Format::eR8G8B8A8Sscaled: + case Format::eR8G8B8A8Uint: + case Format::eR8G8B8A8Sint: + case Format::eR8G8B8A8Srgb: + case Format::eB8G8R8A8Unorm: + case Format::eB8G8R8A8Snorm: + case Format::eB8G8R8A8Uscaled: + case Format::eB8G8R8A8Sscaled: + case Format::eB8G8R8A8Uint: + case Format::eB8G8R8A8Sint: + case Format::eB8G8R8A8Srgb: + case Format::eA8B8G8R8UnormPack32: + case Format::eA8B8G8R8SnormPack32: + case Format::eA8B8G8R8UscaledPack32: + case Format::eA8B8G8R8SscaledPack32: + case Format::eA8B8G8R8UintPack32: + case Format::eA8B8G8R8SintPack32: + case Format::eA8B8G8R8SrgbPack32: + case Format::eA2R10G10B10UnormPack32: + case Format::eA2R10G10B10SnormPack32: + case Format::eA2R10G10B10UscaledPack32: + case Format::eA2R10G10B10SscaledPack32: + case Format::eA2R10G10B10UintPack32: + case Format::eA2R10G10B10SintPack32: + case Format::eA2B10G10R10UnormPack32: + case Format::eA2B10G10R10SnormPack32: + case Format::eA2B10G10R10UscaledPack32: + case Format::eA2B10G10R10SscaledPack32: + case Format::eA2B10G10R10UintPack32: + case Format::eA2B10G10R10SintPack32: + case Format::eR16Unorm: + case Format::eR16Snorm: + case Format::eR16Uscaled: + case Format::eR16Sscaled: + case Format::eR16Uint: + case Format::eR16Sint: + case Format::eR16Sfloat: + case Format::eR16G16Unorm: + case Format::eR16G16Snorm: + case Format::eR16G16Uscaled: + case Format::eR16G16Sscaled: + case Format::eR16G16Uint: + case Format::eR16G16Sint: + case Format::eR16G16Sfloat: + case Format::eR16G16B16Unorm: + case Format::eR16G16B16Snorm: + case Format::eR16G16B16Uscaled: + case Format::eR16G16B16Sscaled: + case Format::eR16G16B16Uint: + case Format::eR16G16B16Sint: + case Format::eR16G16B16Sfloat: + case Format::eR16G16B16A16Unorm: + case Format::eR16G16B16A16Snorm: + case Format::eR16G16B16A16Uscaled: + case Format::eR16G16B16A16Sscaled: + case Format::eR16G16B16A16Uint: + case Format::eR16G16B16A16Sint: + case Format::eR16G16B16A16Sfloat: + case Format::eR32Uint: + case Format::eR32Sint: + case Format::eR32Sfloat: + case Format::eR32G32Uint: + case Format::eR32G32Sint: + case Format::eR32G32Sfloat: + case Format::eR32G32B32Uint: + case Format::eR32G32B32Sint: + case Format::eR32G32B32Sfloat: + case Format::eR32G32B32A32Uint: + case Format::eR32G32B32A32Sint: + case Format::eR32G32B32A32Sfloat: + case Format::eR64Uint: + case Format::eR64Sint: + case Format::eR64Sfloat: + case Format::eR64G64Uint: + case Format::eR64G64Sint: + case Format::eR64G64Sfloat: + case Format::eR64G64B64Uint: + case Format::eR64G64B64Sint: + case Format::eR64G64B64Sfloat: + case Format::eR64G64B64A64Uint: + case Format::eR64G64B64A64Sint: + case Format::eR64G64B64A64Sfloat: + case Format::eB10G11R11UfloatPack32: + case Format::eE5B9G9R9UfloatPack32: + case Format::eBc1RgbUnormBlock: + case Format::eBc1RgbSrgbBlock: + case Format::eBc1RgbaUnormBlock: + case Format::eBc1RgbaSrgbBlock: + case Format::eBc2UnormBlock: + case Format::eBc2SrgbBlock: + case Format::eBc3UnormBlock: + case Format::eBc3SrgbBlock: + case Format::eBc4UnormBlock: + case Format::eBc4SnormBlock: + case Format::eBc5UnormBlock: + case Format::eBc5SnormBlock: + case Format::eBc6HUfloatBlock: + case Format::eBc6HSfloatBlock: + case Format::eBc7UnormBlock: + case Format::eBc7SrgbBlock: + case Format::eEtc2R8G8B8UnormBlock: + case Format::eEtc2R8G8B8SrgbBlock: + case Format::eEtc2R8G8B8A1UnormBlock: + case Format::eEtc2R8G8B8A1SrgbBlock: + case Format::eEtc2R8G8B8A8UnormBlock: + case Format::eEtc2R8G8B8A8SrgbBlock: + case Format::eEacR11UnormBlock: + case Format::eEacR11SnormBlock: + case Format::eEacR11G11UnormBlock: + case Format::eEacR11G11SnormBlock: + case Format::eAstc4x4UnormBlock: + case Format::eAstc4x4SrgbBlock: + case Format::eAstc5x4UnormBlock: + case Format::eAstc5x4SrgbBlock: + case Format::eAstc5x5UnormBlock: + case Format::eAstc5x5SrgbBlock: + case Format::eAstc6x5UnormBlock: + case Format::eAstc6x5SrgbBlock: + case Format::eAstc6x6UnormBlock: + case Format::eAstc6x6SrgbBlock: + case Format::eAstc8x5UnormBlock: + case Format::eAstc8x5SrgbBlock: + case Format::eAstc8x6UnormBlock: + case Format::eAstc8x6SrgbBlock: + case Format::eAstc8x8UnormBlock: + case Format::eAstc8x8SrgbBlock: + case Format::eAstc10x5UnormBlock: + case Format::eAstc10x5SrgbBlock: + case Format::eAstc10x6UnormBlock: + case Format::eAstc10x6SrgbBlock: + case Format::eAstc10x8UnormBlock: + case Format::eAstc10x8SrgbBlock: + case Format::eAstc10x10UnormBlock: + case Format::eAstc10x10SrgbBlock: + case Format::eAstc12x10UnormBlock: + case Format::eAstc12x10SrgbBlock: + case Format::eAstc12x12UnormBlock: + case Format::eAstc12x12SrgbBlock: + case Format::eG8B8G8R8422Unorm: + case Format::eB8G8R8G8422Unorm: + case Format::eG8B8R83Plane420Unorm: + case Format::eG8B8R82Plane420Unorm: + case Format::eG8B8R83Plane422Unorm: + case Format::eG8B8R82Plane422Unorm: + case Format::eG8B8R83Plane444Unorm: + case Format::eR10X6UnormPack16: + case Format::eR10X6G10X6Unorm2Pack16: + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + case Format::eR12X4UnormPack16: + case Format::eR12X4G12X4Unorm2Pack16: + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + case Format::eG16B16G16R16422Unorm: + case Format::eB16G16R16G16422Unorm: + case Format::eG16B16R163Plane420Unorm: + case Format::eG16B16R162Plane420Unorm: + case Format::eG16B16R163Plane422Unorm: + case Format::eG16B16R162Plane422Unorm: + case Format::eG16B16R163Plane444Unorm: + case Format::eG8B8R82Plane444Unorm: + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + case Format::eG16B16R162Plane444Unorm: + case Format::eA4R4G4B4UnormPack16: + case Format::eA4B4G4R4UnormPack16: + case Format::eAstc4x4SfloatBlock: + case Format::eAstc5x4SfloatBlock: + case Format::eAstc5x5SfloatBlock: + case Format::eAstc6x5SfloatBlock: + case Format::eAstc6x6SfloatBlock: + case Format::eAstc8x5SfloatBlock: + case Format::eAstc8x6SfloatBlock: + case Format::eAstc8x8SfloatBlock: + case Format::eAstc10x5SfloatBlock: + case Format::eAstc10x6SfloatBlock: + case Format::eAstc10x8SfloatBlock: + case Format::eAstc10x10SfloatBlock: + case Format::eAstc12x10SfloatBlock: + case Format::eAstc12x12SfloatBlock: + case Format::eA1B5G5R5UnormPack16: + case Format::ePvrtc12BppUnormBlockIMG: + case Format::ePvrtc14BppUnormBlockIMG: + case Format::ePvrtc22BppUnormBlockIMG: + case Format::ePvrtc24BppUnormBlockIMG: + case Format::ePvrtc12BppSrgbBlockIMG: + case Format::ePvrtc14BppSrgbBlockIMG: + case Format::ePvrtc22BppSrgbBlockIMG: + case Format::ePvrtc24BppSrgbBlockIMG: + case Format::eR8BoolARM: + case Format::eR16G16Sfixed5NV: + case Format::eR10X6UintPack16ARM: + case Format::eR10X6G10X6Uint2Pack16ARM: + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM: + case Format::eR12X4UintPack16ARM: + case Format::eR12X4G12X4Uint2Pack16ARM: + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM: + case Format::eR14X2UintPack16ARM: + case Format::eR14X2G14X2Uint2Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM: + case Format::eR14X2UnormPack16ARM: + case Format::eR14X2G14X2Unorm2Pack16ARM: + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM: + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return true; + default : return false; + } + } + + // True, if this format has a stencil component + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool hasStencilComponent( Format format ) + { + switch ( format ) + { + case Format::eS8Uint: + case Format::eD16UnormS8Uint: + case Format::eD24UnormS8Uint: + case Format::eD32SfloatS8Uint: return true; + default : return false; + } + } + + // True, if this format is a color. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool isColor( Format format ) + { + return hasRedComponent( format ) || hasGreenComponent( format ) || hasBlueComponent( format ) || hasAlphaComponent( format ); + } + + // True, if this format is a compressed one. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool isCompressed( Format format ) + { + return ( *compressionScheme( format ) != 0 ); + } + + // The number of bits into which the format is packed. A single image element in this format + // can be stored in the same space as a scalar type of this bit width. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t packed( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8 : return 8; + case Format::eR4G4B4A4UnormPack16 : return 16; + case Format::eB4G4R4A4UnormPack16 : return 16; + case Format::eR5G6B5UnormPack16 : return 16; + case Format::eB5G6R5UnormPack16 : return 16; + case Format::eR5G5B5A1UnormPack16 : return 16; + case Format::eB5G5R5A1UnormPack16 : return 16; + case Format::eA1R5G5B5UnormPack16 : return 16; + case Format::eA8B8G8R8UnormPack32 : return 32; + case Format::eA8B8G8R8SnormPack32 : return 32; + case Format::eA8B8G8R8UscaledPack32 : return 32; + case Format::eA8B8G8R8SscaledPack32 : return 32; + case Format::eA8B8G8R8UintPack32 : return 32; + case Format::eA8B8G8R8SintPack32 : return 32; + case Format::eA8B8G8R8SrgbPack32 : return 32; + case Format::eA2R10G10B10UnormPack32 : return 32; + case Format::eA2R10G10B10SnormPack32 : return 32; + case Format::eA2R10G10B10UscaledPack32 : return 32; + case Format::eA2R10G10B10SscaledPack32 : return 32; + case Format::eA2R10G10B10UintPack32 : return 32; + case Format::eA2R10G10B10SintPack32 : return 32; + case Format::eA2B10G10R10UnormPack32 : return 32; + case Format::eA2B10G10R10SnormPack32 : return 32; + case Format::eA2B10G10R10UscaledPack32 : return 32; + case Format::eA2B10G10R10SscaledPack32 : return 32; + case Format::eA2B10G10R10UintPack32 : return 32; + case Format::eA2B10G10R10SintPack32 : return 32; + case Format::eB10G11R11UfloatPack32 : return 32; + case Format::eE5B9G9R9UfloatPack32 : return 32; + case Format::eX8D24UnormPack32 : return 32; + case Format::eR10X6UnormPack16 : return 16; + case Format::eR10X6G10X6Unorm2Pack16 : return 16; + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16 : return 16; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16 : return 16; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16 : return 16; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return 16; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return 16; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return 16; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return 16; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return 16; + case Format::eR12X4UnormPack16 : return 16; + case Format::eR12X4G12X4Unorm2Pack16 : return 16; + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16 : return 16; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16 : return 16; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16 : return 16; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return 16; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return 16; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return 16; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return 16; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return 16; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return 16; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return 16; + case Format::eA4R4G4B4UnormPack16 : return 16; + case Format::eA4B4G4R4UnormPack16 : return 16; + case Format::eA1B5G5R5UnormPack16 : return 16; + case Format::eR10X6UintPack16ARM : return 16; + case Format::eR10X6G10X6Uint2Pack16ARM : return 16; + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM : return 16; + case Format::eR12X4UintPack16ARM : return 16; + case Format::eR12X4G12X4Uint2Pack16ARM : return 16; + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM : return 16; + case Format::eR14X2UintPack16ARM : return 16; + case Format::eR14X2G14X2Uint2Pack16ARM : return 16; + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM : return 16; + case Format::eR14X2UnormPack16ARM : return 16; + case Format::eR14X2G14X2Unorm2Pack16ARM : return 16; + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM : return 16; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return 16; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return 16; + + default: return 0; + } + } + + // The single-plane format that this plane is compatible with. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 Format planeCompatibleFormat( Format format, uint8_t plane ) + { + switch ( format ) + { + case Format::eG8B8R83Plane420Unorm: + switch ( plane ) + { + case 0 : return Format::eR8Unorm; + case 1 : return Format::eR8Unorm; + case 2 : return Format::eR8Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG8B8R82Plane420Unorm: + switch ( plane ) + { + case 0 : return Format::eR8Unorm; + case 1 : return Format::eR8G8Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG8B8R83Plane422Unorm: + switch ( plane ) + { + case 0 : return Format::eR8Unorm; + case 1 : return Format::eR8Unorm; + case 2 : return Format::eR8Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG8B8R82Plane422Unorm: + switch ( plane ) + { + case 0 : return Format::eR8Unorm; + case 1 : return Format::eR8G8Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG8B8R83Plane444Unorm: + switch ( plane ) + { + case 0 : return Format::eR8Unorm; + case 1 : return Format::eR8Unorm; + case 2 : return Format::eR8Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR10X6UnormPack16; + case 1 : return Format::eR10X6UnormPack16; + case 2 : return Format::eR10X6UnormPack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR10X6UnormPack16; + case 1 : return Format::eR10X6G10X6Unorm2Pack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR10X6UnormPack16; + case 1 : return Format::eR10X6UnormPack16; + case 2 : return Format::eR10X6UnormPack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR10X6UnormPack16; + case 1 : return Format::eR10X6G10X6Unorm2Pack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR10X6UnormPack16; + case 1 : return Format::eR10X6UnormPack16; + case 2 : return Format::eR10X6UnormPack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR12X4UnormPack16; + case 1 : return Format::eR12X4UnormPack16; + case 2 : return Format::eR12X4UnormPack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR12X4UnormPack16; + case 1 : return Format::eR12X4G12X4Unorm2Pack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR12X4UnormPack16; + case 1 : return Format::eR12X4UnormPack16; + case 2 : return Format::eR12X4UnormPack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR12X4UnormPack16; + case 1 : return Format::eR12X4G12X4Unorm2Pack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR12X4UnormPack16; + case 1 : return Format::eR12X4UnormPack16; + case 2 : return Format::eR12X4UnormPack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG16B16R163Plane420Unorm: + switch ( plane ) + { + case 0 : return Format::eR16Unorm; + case 1 : return Format::eR16Unorm; + case 2 : return Format::eR16Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG16B16R162Plane420Unorm: + switch ( plane ) + { + case 0 : return Format::eR16Unorm; + case 1 : return Format::eR16G16Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG16B16R163Plane422Unorm: + switch ( plane ) + { + case 0 : return Format::eR16Unorm; + case 1 : return Format::eR16Unorm; + case 2 : return Format::eR16Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG16B16R162Plane422Unorm: + switch ( plane ) + { + case 0 : return Format::eR16Unorm; + case 1 : return Format::eR16G16Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG16B16R163Plane444Unorm: + switch ( plane ) + { + case 0 : return Format::eR16Unorm; + case 1 : return Format::eR16Unorm; + case 2 : return Format::eR16Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG8B8R82Plane444Unorm: + switch ( plane ) + { + case 0 : return Format::eR8Unorm; + case 1 : return Format::eR8G8Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR10X6UnormPack16; + case 1 : return Format::eR10X6G10X6Unorm2Pack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return Format::eR12X4UnormPack16; + case 1 : return Format::eR12X4G12X4Unorm2Pack16; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG16B16R162Plane444Unorm: + switch ( plane ) + { + case 0 : return Format::eR16Unorm; + case 1 : return Format::eR16G16Unorm; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( plane ) + { + case 0 : return Format::eR14X2UnormPack16ARM; + case 1 : return Format::eR14X2G14X2Unorm2Pack16ARM; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( plane ) + { + case 0 : return Format::eR14X2UnormPack16ARM; + case 1 : return Format::eR14X2G14X2Unorm2Pack16ARM; + default: VULKAN_HPP_ASSERT( false ); return Format::eUndefined; + } + + default: VULKAN_HPP_ASSERT( plane == 0 ); return format; + } + } + + // The number of image planes of this format. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeCount( Format format ) + { + switch ( format ) + { + case Format::eG8B8R83Plane420Unorm : return 3; + case Format::eG8B8R82Plane420Unorm : return 2; + case Format::eG8B8R83Plane422Unorm : return 3; + case Format::eG8B8R82Plane422Unorm : return 2; + case Format::eG8B8R83Plane444Unorm : return 3; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return 3; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return 2; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return 3; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return 2; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return 2; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return 3; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return 2; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return 3; + case Format::eG16B16R163Plane420Unorm : return 3; + case Format::eG16B16R162Plane420Unorm : return 2; + case Format::eG16B16R163Plane422Unorm : return 3; + case Format::eG16B16R162Plane422Unorm : return 2; + case Format::eG16B16R163Plane444Unorm : return 3; + case Format::eG8B8R82Plane444Unorm : return 2; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return 2; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return 2; + case Format::eG16B16R162Plane444Unorm : return 2; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return 2; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return 2; + + default: return 1; + } + } + + // The relative height of this plane. A value of k means that this plane is 1/k the height of the overall format. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeHeightDivisor( Format format, uint8_t plane ) + { + switch ( format ) + { + case Format::eG8B8R83Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R82Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R83Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R82Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R83Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R163Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R162Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R163Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R162Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R163Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R82Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R162Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + + default: VULKAN_HPP_ASSERT( plane == 0 ); return 1; + } + } + + // The relative width of this plane. A value of k means that this plane is 1/k the width of the overall format. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeWidthDivisor( Format format, uint8_t plane ) + { + switch ( format ) + { + case Format::eG8B8R83Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R82Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R83Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R82Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R83Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R163Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R162Plane420Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R163Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + case 2 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R162Plane422Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R163Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + case 2 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG8B8R82Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG16B16R162Plane444Unorm: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 1; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: + switch ( plane ) + { + case 0 : return 1; + case 1 : return 2; + default: VULKAN_HPP_ASSERT( false ); return 1; + } + + default: VULKAN_HPP_ASSERT( plane == 0 ); return 1; + } + } + + // The number of texels in a texel block. + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t texelsPerBlock( Format format ) + { + switch ( format ) + { + case Format::eR4G4UnormPack8 : return 1; + case Format::eR4G4B4A4UnormPack16 : return 1; + case Format::eB4G4R4A4UnormPack16 : return 1; + case Format::eR5G6B5UnormPack16 : return 1; + case Format::eB5G6R5UnormPack16 : return 1; + case Format::eR5G5B5A1UnormPack16 : return 1; + case Format::eB5G5R5A1UnormPack16 : return 1; + case Format::eA1R5G5B5UnormPack16 : return 1; + case Format::eR8Unorm : return 1; + case Format::eR8Snorm : return 1; + case Format::eR8Uscaled : return 1; + case Format::eR8Sscaled : return 1; + case Format::eR8Uint : return 1; + case Format::eR8Sint : return 1; + case Format::eR8Srgb : return 1; + case Format::eR8G8Unorm : return 1; + case Format::eR8G8Snorm : return 1; + case Format::eR8G8Uscaled : return 1; + case Format::eR8G8Sscaled : return 1; + case Format::eR8G8Uint : return 1; + case Format::eR8G8Sint : return 1; + case Format::eR8G8Srgb : return 1; + case Format::eR8G8B8Unorm : return 1; + case Format::eR8G8B8Snorm : return 1; + case Format::eR8G8B8Uscaled : return 1; + case Format::eR8G8B8Sscaled : return 1; + case Format::eR8G8B8Uint : return 1; + case Format::eR8G8B8Sint : return 1; + case Format::eR8G8B8Srgb : return 1; + case Format::eB8G8R8Unorm : return 1; + case Format::eB8G8R8Snorm : return 1; + case Format::eB8G8R8Uscaled : return 1; + case Format::eB8G8R8Sscaled : return 1; + case Format::eB8G8R8Uint : return 1; + case Format::eB8G8R8Sint : return 1; + case Format::eB8G8R8Srgb : return 1; + case Format::eR8G8B8A8Unorm : return 1; + case Format::eR8G8B8A8Snorm : return 1; + case Format::eR8G8B8A8Uscaled : return 1; + case Format::eR8G8B8A8Sscaled : return 1; + case Format::eR8G8B8A8Uint : return 1; + case Format::eR8G8B8A8Sint : return 1; + case Format::eR8G8B8A8Srgb : return 1; + case Format::eB8G8R8A8Unorm : return 1; + case Format::eB8G8R8A8Snorm : return 1; + case Format::eB8G8R8A8Uscaled : return 1; + case Format::eB8G8R8A8Sscaled : return 1; + case Format::eB8G8R8A8Uint : return 1; + case Format::eB8G8R8A8Sint : return 1; + case Format::eB8G8R8A8Srgb : return 1; + case Format::eA8B8G8R8UnormPack32 : return 1; + case Format::eA8B8G8R8SnormPack32 : return 1; + case Format::eA8B8G8R8UscaledPack32 : return 1; + case Format::eA8B8G8R8SscaledPack32 : return 1; + case Format::eA8B8G8R8UintPack32 : return 1; + case Format::eA8B8G8R8SintPack32 : return 1; + case Format::eA8B8G8R8SrgbPack32 : return 1; + case Format::eA2R10G10B10UnormPack32 : return 1; + case Format::eA2R10G10B10SnormPack32 : return 1; + case Format::eA2R10G10B10UscaledPack32 : return 1; + case Format::eA2R10G10B10SscaledPack32 : return 1; + case Format::eA2R10G10B10UintPack32 : return 1; + case Format::eA2R10G10B10SintPack32 : return 1; + case Format::eA2B10G10R10UnormPack32 : return 1; + case Format::eA2B10G10R10SnormPack32 : return 1; + case Format::eA2B10G10R10UscaledPack32 : return 1; + case Format::eA2B10G10R10SscaledPack32 : return 1; + case Format::eA2B10G10R10UintPack32 : return 1; + case Format::eA2B10G10R10SintPack32 : return 1; + case Format::eR16Unorm : return 1; + case Format::eR16Snorm : return 1; + case Format::eR16Uscaled : return 1; + case Format::eR16Sscaled : return 1; + case Format::eR16Uint : return 1; + case Format::eR16Sint : return 1; + case Format::eR16Sfloat : return 1; + case Format::eR16G16Unorm : return 1; + case Format::eR16G16Snorm : return 1; + case Format::eR16G16Uscaled : return 1; + case Format::eR16G16Sscaled : return 1; + case Format::eR16G16Uint : return 1; + case Format::eR16G16Sint : return 1; + case Format::eR16G16Sfloat : return 1; + case Format::eR16G16B16Unorm : return 1; + case Format::eR16G16B16Snorm : return 1; + case Format::eR16G16B16Uscaled : return 1; + case Format::eR16G16B16Sscaled : return 1; + case Format::eR16G16B16Uint : return 1; + case Format::eR16G16B16Sint : return 1; + case Format::eR16G16B16Sfloat : return 1; + case Format::eR16G16B16A16Unorm : return 1; + case Format::eR16G16B16A16Snorm : return 1; + case Format::eR16G16B16A16Uscaled : return 1; + case Format::eR16G16B16A16Sscaled : return 1; + case Format::eR16G16B16A16Uint : return 1; + case Format::eR16G16B16A16Sint : return 1; + case Format::eR16G16B16A16Sfloat : return 1; + case Format::eR32Uint : return 1; + case Format::eR32Sint : return 1; + case Format::eR32Sfloat : return 1; + case Format::eR32G32Uint : return 1; + case Format::eR32G32Sint : return 1; + case Format::eR32G32Sfloat : return 1; + case Format::eR32G32B32Uint : return 1; + case Format::eR32G32B32Sint : return 1; + case Format::eR32G32B32Sfloat : return 1; + case Format::eR32G32B32A32Uint : return 1; + case Format::eR32G32B32A32Sint : return 1; + case Format::eR32G32B32A32Sfloat : return 1; + case Format::eR64Uint : return 1; + case Format::eR64Sint : return 1; + case Format::eR64Sfloat : return 1; + case Format::eR64G64Uint : return 1; + case Format::eR64G64Sint : return 1; + case Format::eR64G64Sfloat : return 1; + case Format::eR64G64B64Uint : return 1; + case Format::eR64G64B64Sint : return 1; + case Format::eR64G64B64Sfloat : return 1; + case Format::eR64G64B64A64Uint : return 1; + case Format::eR64G64B64A64Sint : return 1; + case Format::eR64G64B64A64Sfloat : return 1; + case Format::eB10G11R11UfloatPack32 : return 1; + case Format::eE5B9G9R9UfloatPack32 : return 1; + case Format::eD16Unorm : return 1; + case Format::eX8D24UnormPack32 : return 1; + case Format::eD32Sfloat : return 1; + case Format::eS8Uint : return 1; + case Format::eD16UnormS8Uint : return 1; + case Format::eD24UnormS8Uint : return 1; + case Format::eD32SfloatS8Uint : return 1; + case Format::eBc1RgbUnormBlock : return 16; + case Format::eBc1RgbSrgbBlock : return 16; + case Format::eBc1RgbaUnormBlock : return 16; + case Format::eBc1RgbaSrgbBlock : return 16; + case Format::eBc2UnormBlock : return 16; + case Format::eBc2SrgbBlock : return 16; + case Format::eBc3UnormBlock : return 16; + case Format::eBc3SrgbBlock : return 16; + case Format::eBc4UnormBlock : return 16; + case Format::eBc4SnormBlock : return 16; + case Format::eBc5UnormBlock : return 16; + case Format::eBc5SnormBlock : return 16; + case Format::eBc6HUfloatBlock : return 16; + case Format::eBc6HSfloatBlock : return 16; + case Format::eBc7UnormBlock : return 16; + case Format::eBc7SrgbBlock : return 16; + case Format::eEtc2R8G8B8UnormBlock : return 16; + case Format::eEtc2R8G8B8SrgbBlock : return 16; + case Format::eEtc2R8G8B8A1UnormBlock : return 16; + case Format::eEtc2R8G8B8A1SrgbBlock : return 16; + case Format::eEtc2R8G8B8A8UnormBlock : return 16; + case Format::eEtc2R8G8B8A8SrgbBlock : return 16; + case Format::eEacR11UnormBlock : return 16; + case Format::eEacR11SnormBlock : return 16; + case Format::eEacR11G11UnormBlock : return 16; + case Format::eEacR11G11SnormBlock : return 16; + case Format::eAstc4x4UnormBlock : return 16; + case Format::eAstc4x4SrgbBlock : return 16; + case Format::eAstc5x4UnormBlock : return 20; + case Format::eAstc5x4SrgbBlock : return 20; + case Format::eAstc5x5UnormBlock : return 25; + case Format::eAstc5x5SrgbBlock : return 25; + case Format::eAstc6x5UnormBlock : return 30; + case Format::eAstc6x5SrgbBlock : return 30; + case Format::eAstc6x6UnormBlock : return 36; + case Format::eAstc6x6SrgbBlock : return 36; + case Format::eAstc8x5UnormBlock : return 40; + case Format::eAstc8x5SrgbBlock : return 40; + case Format::eAstc8x6UnormBlock : return 48; + case Format::eAstc8x6SrgbBlock : return 48; + case Format::eAstc8x8UnormBlock : return 64; + case Format::eAstc8x8SrgbBlock : return 64; + case Format::eAstc10x5UnormBlock : return 50; + case Format::eAstc10x5SrgbBlock : return 50; + case Format::eAstc10x6UnormBlock : return 60; + case Format::eAstc10x6SrgbBlock : return 60; + case Format::eAstc10x8UnormBlock : return 80; + case Format::eAstc10x8SrgbBlock : return 80; + case Format::eAstc10x10UnormBlock : return 100; + case Format::eAstc10x10SrgbBlock : return 100; + case Format::eAstc12x10UnormBlock : return 120; + case Format::eAstc12x10SrgbBlock : return 120; + case Format::eAstc12x12UnormBlock : return 144; + case Format::eAstc12x12SrgbBlock : return 144; + case Format::eG8B8G8R8422Unorm : return 1; + case Format::eB8G8R8G8422Unorm : return 1; + case Format::eG8B8R83Plane420Unorm : return 1; + case Format::eG8B8R82Plane420Unorm : return 1; + case Format::eG8B8R83Plane422Unorm : return 1; + case Format::eG8B8R82Plane422Unorm : return 1; + case Format::eG8B8R83Plane444Unorm : return 1; + case Format::eR10X6UnormPack16 : return 1; + case Format::eR10X6G10X6Unorm2Pack16 : return 1; + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16 : return 1; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16 : return 1; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16 : return 1; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return 1; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return 1; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return 1; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return 1; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return 1; + case Format::eR12X4UnormPack16 : return 1; + case Format::eR12X4G12X4Unorm2Pack16 : return 1; + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16 : return 1; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16 : return 1; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16 : return 1; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return 1; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return 1; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return 1; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return 1; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return 1; + case Format::eG16B16G16R16422Unorm : return 1; + case Format::eB16G16R16G16422Unorm : return 1; + case Format::eG16B16R163Plane420Unorm : return 1; + case Format::eG16B16R162Plane420Unorm : return 1; + case Format::eG16B16R163Plane422Unorm : return 1; + case Format::eG16B16R162Plane422Unorm : return 1; + case Format::eG16B16R163Plane444Unorm : return 1; + case Format::eG8B8R82Plane444Unorm : return 1; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return 1; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return 1; + case Format::eG16B16R162Plane444Unorm : return 1; + case Format::eA4R4G4B4UnormPack16 : return 1; + case Format::eA4B4G4R4UnormPack16 : return 1; + case Format::eAstc4x4SfloatBlock : return 16; + case Format::eAstc5x4SfloatBlock : return 20; + case Format::eAstc5x5SfloatBlock : return 25; + case Format::eAstc6x5SfloatBlock : return 30; + case Format::eAstc6x6SfloatBlock : return 36; + case Format::eAstc8x5SfloatBlock : return 40; + case Format::eAstc8x6SfloatBlock : return 48; + case Format::eAstc8x8SfloatBlock : return 64; + case Format::eAstc10x5SfloatBlock : return 50; + case Format::eAstc10x6SfloatBlock : return 60; + case Format::eAstc10x8SfloatBlock : return 80; + case Format::eAstc10x10SfloatBlock : return 100; + case Format::eAstc12x10SfloatBlock : return 120; + case Format::eAstc12x12SfloatBlock : return 144; + case Format::eA1B5G5R5UnormPack16 : return 1; + case Format::eA8Unorm : return 1; + case Format::ePvrtc12BppUnormBlockIMG : return 1; + case Format::ePvrtc14BppUnormBlockIMG : return 1; + case Format::ePvrtc22BppUnormBlockIMG : return 1; + case Format::ePvrtc24BppUnormBlockIMG : return 1; + case Format::ePvrtc12BppSrgbBlockIMG : return 1; + case Format::ePvrtc14BppSrgbBlockIMG : return 1; + case Format::ePvrtc22BppSrgbBlockIMG : return 1; + case Format::ePvrtc24BppSrgbBlockIMG : return 1; + case Format::eR8BoolARM : return 1; + case Format::eR16G16Sfixed5NV : return 1; + case Format::eR10X6UintPack16ARM : return 1; + case Format::eR10X6G10X6Uint2Pack16ARM : return 1; + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM : return 1; + case Format::eR12X4UintPack16ARM : return 1; + case Format::eR12X4G12X4Uint2Pack16ARM : return 1; + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM : return 1; + case Format::eR14X2UintPack16ARM : return 1; + case Format::eR14X2G14X2Uint2Pack16ARM : return 1; + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM : return 1; + case Format::eR14X2UnormPack16ARM : return 1; + case Format::eR14X2G14X2Unorm2Pack16ARM : return 1; + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM : return 1; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return 1; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return 1; + + default: VULKAN_HPP_ASSERT( false ); return 0; + } + } + +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_fuchsia.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_fuchsia.h new file mode 100644 index 0000000000..f65efc62bd --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_fuchsia.h @@ -0,0 +1,282 @@ +#ifndef VULKAN_FUCHSIA_H_ +#define VULKAN_FUCHSIA_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_FUCHSIA_imagepipe_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_imagepipe_surface 1 +#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1 +#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface" +typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; +typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkImagePipeSurfaceCreateFlagsFUCHSIA flags; + zx_handle_t imagePipeHandle; +} VkImagePipeSurfaceCreateInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( + VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_FUCHSIA_external_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_external_memory 1 +#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1 +#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory" +typedef struct VkImportMemoryZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + zx_handle_t handle; +} VkImportMemoryZirconHandleInfoFUCHSIA; + +typedef struct VkMemoryZirconHandlePropertiesFUCHSIA { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryZirconHandlePropertiesFUCHSIA; + +typedef struct VkMemoryGetZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetZirconHandleInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( + VkDevice device, + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); +#endif +#endif + + +// VK_FUCHSIA_external_semaphore is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_external_semaphore 1 +#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 +#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore" +typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + zx_handle_t zirconHandle; +} VkImportSemaphoreZirconHandleInfoFUCHSIA; + +typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetZirconHandleInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( + VkDevice device, + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( + VkDevice device, + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle); +#endif +#endif + + +// VK_FUCHSIA_buffer_collection is a preprocessor guard. Do not pass it to API calls. +#define VK_FUCHSIA_buffer_collection 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA) +#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 2 +#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection" +typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA; + +typedef enum VkImageConstraintsInfoFlagBitsFUCHSIA { + VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA = 0x00000001, + VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA = 0x00000002, + VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA = 0x00000004, + VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA = 0x00000008, + VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA = 0x00000010, + VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIA = 0x7FFFFFFF +} VkImageConstraintsInfoFlagBitsFUCHSIA; +typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA; +typedef struct VkBufferCollectionCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + zx_handle_t collectionToken; +} VkBufferCollectionCreateInfoFUCHSIA; + +typedef struct VkImportMemoryBufferCollectionFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkImportMemoryBufferCollectionFUCHSIA; + +typedef struct VkBufferCollectionImageCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkBufferCollectionImageCreateInfoFUCHSIA; + +typedef struct VkBufferCollectionConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + uint32_t minBufferCount; + uint32_t maxBufferCount; + uint32_t minBufferCountForCamping; + uint32_t minBufferCountForDedicatedSlack; + uint32_t minBufferCountForSharedSlack; +} VkBufferCollectionConstraintsInfoFUCHSIA; + +typedef struct VkBufferConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCreateInfo createInfo; + VkFormatFeatureFlags requiredFormatFeatures; + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; +} VkBufferConstraintsInfoFUCHSIA; + +typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkBufferCollectionFUCHSIA collection; + uint32_t index; +} VkBufferCollectionBufferCreateInfoFUCHSIA; + +typedef struct VkSysmemColorSpaceFUCHSIA { + VkStructureType sType; + const void* pNext; + uint32_t colorSpace; +} VkSysmemColorSpaceFUCHSIA; + +typedef struct VkBufferCollectionPropertiesFUCHSIA { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; + uint32_t bufferCount; + uint32_t createInfoIndex; + uint64_t sysmemPixelFormat; + VkFormatFeatureFlags formatFeatures; + VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkBufferCollectionPropertiesFUCHSIA; + +typedef struct VkImageFormatConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + VkImageCreateInfo imageCreateInfo; + VkFormatFeatureFlags requiredFormatFeatures; + VkImageFormatConstraintsFlagsFUCHSIA flags; + uint64_t sysmemPixelFormat; + uint32_t colorSpaceCount; + const VkSysmemColorSpaceFUCHSIA* pColorSpaces; +} VkImageFormatConstraintsInfoFUCHSIA; + +typedef struct VkImageConstraintsInfoFUCHSIA { + VkStructureType sType; + const void* pNext; + uint32_t formatConstraintsCount; + const VkImageFormatConstraintsInfoFUCHSIA* pFormatConstraints; + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints; + VkImageConstraintsInfoFlagsFUCHSIA flags; +} VkImageConstraintsInfoFUCHSIA; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection); +typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); +typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); +typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA( + VkDevice device, + const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBufferCollectionFUCHSIA* pCollection); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkAllocationCallbacks* pAllocator); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + VkBufferCollectionPropertiesFUCHSIA* pProperties); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_funcs.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_funcs.hpp new file mode 100644 index 0000000000..7e973970f7 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_funcs.hpp @@ -0,0 +1,31323 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_FUNCS_HPP +#define VULKAN_FUNCS_HPP + +// include-what-you-use: make sure, vulkan.hpp is used by code-completers +// IWYU pragma: private; include "vulkan.hpp" + +namespace VULKAN_HPP_NAMESPACE +{ + + //=========================== + //=== COMMAND Definitions === + //=========================== + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result createInstance( const InstanceCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Instance * pInstance, + Dispatch const & d ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateInstance( reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pInstance ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + createInstance( const InstanceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateInstance && "Function requires " ); +# endif + + Instance instance; + Result result = static_cast( d.vkCreateInstance( reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &instance ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::createInstance" ); + + return detail::createResultValueType( result, std::move( instance ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + createInstanceUnique( const InstanceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateInstance && "Function requires " ); +# endif + + Instance instance; + Result result = static_cast( d.vkCreateInstance( reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &instance ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::createInstanceUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( instance, detail::ObjectDestroy( allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyInstance.html + template + VULKAN_HPP_INLINE void Instance::destroy( const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyInstance( static_cast( m_instance ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyInstance.html + template + VULKAN_HPP_INLINE void Instance::destroy( Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyInstance && "Function requires " ); +# endif + + d.vkDestroyInstance( m_instance, reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount, + PhysicalDevice * pPhysicalDevices, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkEnumeratePhysicalDevices( static_cast( m_instance ), pPhysicalDeviceCount, reinterpret_cast( pPhysicalDevices ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::enumeratePhysicalDevices( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDevices && "Function requires " ); +# endif + + std::vector physicalDevices; + uint32_t physicalDeviceCount; + Result result; + do + { + result = static_cast( d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceCount ) + { + physicalDevices.resize( physicalDeviceCount ); + result = static_cast( + d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast( physicalDevices.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDevices" ); + VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() ); + if ( physicalDeviceCount < physicalDevices.size() ) + { + physicalDevices.resize( physicalDeviceCount ); + } + return detail::createResultValueType( result, std::move( physicalDevices ) ); + } + + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::enumeratePhysicalDevices( PhysicalDeviceAllocator & physicalDeviceAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDevices && "Function requires " ); +# endif + + std::vector physicalDevices( physicalDeviceAllocator ); + uint32_t physicalDeviceCount; + Result result; + do + { + result = static_cast( d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceCount ) + { + physicalDevices.resize( physicalDeviceCount ); + result = static_cast( + d.vkEnumeratePhysicalDevices( m_instance, &physicalDeviceCount, reinterpret_cast( physicalDevices.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDevices" ); + VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() ); + if ( physicalDeviceCount < physicalDevices.size() ) + { + physicalDevices.resize( physicalDeviceCount ); + } + return detail::createResultValueType( result, std::move( physicalDevices ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFeatures, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getFeatures( PhysicalDeviceFeatures * pFeatures, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceFeatures( static_cast( m_physicalDevice ), reinterpret_cast( pFeatures ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFeatures, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceFeatures PhysicalDevice::getFeatures( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFeatures && "Function requires " ); +# endif + + PhysicalDeviceFeatures features; + d.vkGetPhysicalDeviceFeatures( m_physicalDevice, reinterpret_cast( &features ) ); + + return features; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties.html + template + VULKAN_HPP_INLINE void + PhysicalDevice::getFormatProperties( Format format, FormatProperties * pFormatProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceFormatProperties( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( pFormatProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE FormatProperties PhysicalDevice::getFormatProperties( Format format, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFormatProperties && "Function requires " ); +# endif + + FormatProperties formatProperties; + d.vkGetPhysicalDeviceFormatProperties( m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return formatProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags, + ImageFormatProperties * pImageFormatProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceImageFormatProperties( static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( tiling ), + static_cast( usage ), + static_cast( flags ), + reinterpret_cast( pImageFormatProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type PhysicalDevice::getImageFormatProperties( + Format format, ImageType type, ImageTiling tiling, ImageUsageFlags usage, ImageCreateFlags flags, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceImageFormatProperties && "Function requires " ); +# endif + + ImageFormatProperties imageFormatProperties; + Result result = static_cast( d.vkGetPhysicalDeviceImageFormatProperties( m_physicalDevice, + static_cast( format ), + static_cast( type ), + static_cast( tiling ), + static_cast( usage ), + static_cast( flags ), + reinterpret_cast( &imageFormatProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties" ); + + return detail::createResultValueType( result, std::move( imageFormatProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getProperties( PhysicalDeviceProperties * pProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceProperties( static_cast( m_physicalDevice ), reinterpret_cast( pProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceProperties PhysicalDevice::getProperties( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceProperties && "Function requires " ); +# endif + + PhysicalDeviceProperties properties; + d.vkGetPhysicalDeviceProperties( m_physicalDevice, reinterpret_cast( &properties ) ); + + return properties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties( uint32_t * pQueueFamilyPropertyCount, + QueueFamilyProperties * pQueueFamilyProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceQueueFamilyProperties( + static_cast( m_physicalDevice ), pQueueFamilyPropertyCount, reinterpret_cast( pQueueFamilyProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties && "Function requires " ); +# endif + + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + d.vkGetPhysicalDeviceQueueFamilyProperties( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties && "Function requires " ); +# endif + + std::vector queueFamilyProperties( queueFamilyPropertiesAllocator ); + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + d.vkGetPhysicalDeviceQueueFamilyProperties( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties( PhysicalDeviceMemoryProperties * pMemoryProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceMemoryProperties( static_cast( m_physicalDevice ), + reinterpret_cast( pMemoryProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceMemoryProperties PhysicalDevice::getMemoryProperties( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceMemoryProperties && "Function requires " ); +# endif + + PhysicalDeviceMemoryProperties memoryProperties; + d.vkGetPhysicalDeviceMemoryProperties( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); + + return memoryProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetInstanceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetInstanceProcAddr.html + template + VULKAN_HPP_INLINE PFN_vkVoidFunction Instance::getProcAddr( const char * pName, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetInstanceProcAddr( static_cast( m_instance ), pName ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetInstanceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetInstanceProcAddr.html + template + VULKAN_HPP_INLINE PFN_VoidFunction Instance::getProcAddr( const std::string & name, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetInstanceProcAddr && "Function requires " ); +# endif + + PFN_vkVoidFunction result = d.vkGetInstanceProcAddr( m_instance, name.c_str() ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceProcAddr.html + template + VULKAN_HPP_INLINE PFN_vkVoidFunction Device::getProcAddr( const char * pName, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetDeviceProcAddr( static_cast( m_device ), pName ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceProcAddr.html + template + VULKAN_HPP_INLINE PFN_VoidFunction Device::getProcAddr( const std::string & name, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceProcAddr && "Function requires " ); +# endif + + PFN_vkVoidFunction result = d.vkGetDeviceProcAddr( m_device, name.c_str() ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::createDevice( const DeviceCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Device * pDevice, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDevice( static_cast( m_physicalDevice ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pDevice ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::createDevice( const DeviceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDevice && "Function requires " ); +# endif + + Device device; + Result result = static_cast( d.vkCreateDevice( m_physicalDevice, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &device ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDevice" ); + + return detail::createResultValueType( result, std::move( device ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::createDeviceUnique( const DeviceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDevice && "Function requires " ); +# endif + + Device device; + Result result = static_cast( d.vkCreateDevice( m_physicalDevice, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &device ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDeviceUnique" ); + + return detail::createResultValueType( result, UniqueHandle( device, detail::ObjectDestroy( allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDevice.html + template + VULKAN_HPP_INLINE void Device::destroy( const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDevice( static_cast( m_device ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDevice.html + template + VULKAN_HPP_INLINE void Device::destroy( Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDevice && "Function requires " ); +# endif + + d.vkDestroyDevice( m_device, reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceExtensionProperties( const char * pLayerName, + uint32_t * pPropertyCount, + ExtensionProperties * pProperties, + Dispatch const & d ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkEnumerateInstanceExtensionProperties( pLayerName, pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + enumerateInstanceExtensionProperties( Optional layerName, Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateInstanceExtensionProperties && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkEnumerateInstanceExtensionProperties( + layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceExtensionProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + enumerateInstanceExtensionProperties( Optional layerName, + ExtensionPropertiesAllocator & extensionPropertiesAllocator, + Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateInstanceExtensionProperties && "Function requires " ); +# endif + + std::vector properties( extensionPropertiesAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkEnumerateInstanceExtensionProperties( + layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceExtensionProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::enumerateDeviceExtensionProperties( const char * pLayerName, + uint32_t * pPropertyCount, + ExtensionProperties * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEnumerateDeviceExtensionProperties( + static_cast( m_physicalDevice ), pLayerName, pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::enumerateDeviceExtensionProperties( Optional layerName, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateDeviceExtensionProperties && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = + static_cast( d.vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkEnumerateDeviceExtensionProperties( + m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::enumerateDeviceExtensionProperties( Optional layerName, + ExtensionPropertiesAllocator & extensionPropertiesAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateDeviceExtensionProperties && "Function requires " ); +# endif + + std::vector properties( extensionPropertiesAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = + static_cast( d.vkEnumerateDeviceExtensionProperties( m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkEnumerateDeviceExtensionProperties( + m_physicalDevice, layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceLayerProperties( uint32_t * pPropertyCount, + LayerProperties * pProperties, + Dispatch const & d ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEnumerateInstanceLayerProperties( pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + enumerateInstanceLayerProperties( Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateInstanceLayerProperties && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceLayerProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + enumerateInstanceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateInstanceLayerProperties && "Function requires " ); +# endif + + std::vector properties( layerPropertiesAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceLayerProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::enumerateDeviceLayerProperties( uint32_t * pPropertyCount, + LayerProperties * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEnumerateDeviceLayerProperties( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::enumerateDeviceLayerProperties( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateDeviceLayerProperties && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::enumerateDeviceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateDeviceLayerProperties && "Function requires " ); +# endif + + std::vector properties( layerPropertiesAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + d.vkEnumerateDeviceLayerProperties( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue.html + template + VULKAN_HPP_INLINE void Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Queue * pQueue, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceQueue( static_cast( m_device ), queueFamilyIndex, queueIndex, reinterpret_cast( pQueue ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Queue Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceQueue && "Function requires " ); +# endif + + Queue queue; + d.vkGetDeviceQueue( m_device, queueFamilyIndex, queueIndex, reinterpret_cast( &queue ) ); + + return queue; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueueSubmit, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Queue::submit( uint32_t submitCount, const SubmitInfo * pSubmits, Fence fence, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkQueueSubmit( static_cast( m_queue ), submitCount, reinterpret_cast( pSubmits ), static_cast( fence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSubmit, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Queue::submit( ArrayProxy const & submits, Fence fence, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueSubmit && "Function requires " ); +# endif + + Result result = static_cast( + d.vkQueueSubmit( m_queue, submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueWaitIdle.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::waitIdle( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkQueueWaitIdle( static_cast( m_queue ) ) ); + } +#else + // wrapper function for command vkQueueWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueWaitIdle.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Queue::waitIdle( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueWaitIdle && "Function requires " ); +# endif + + Result result = static_cast( d.vkQueueWaitIdle( m_queue ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::waitIdle" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDeviceWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeviceWaitIdle.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitIdle( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkDeviceWaitIdle( static_cast( m_device ) ) ); + } +#else + // wrapper function for command vkDeviceWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeviceWaitIdle.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::waitIdle( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDeviceWaitIdle && "Function requires " ); +# endif + + Result result = static_cast( d.vkDeviceWaitIdle( m_device ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitIdle" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::allocateMemory( const MemoryAllocateInfo * pAllocateInfo, + const AllocationCallbacks * pAllocator, + DeviceMemory * pMemory, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAllocateMemory( static_cast( m_device ), + reinterpret_cast( pAllocateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pMemory ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::allocateMemory( const MemoryAllocateInfo & allocateInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateMemory && "Function requires " ); +# endif + + DeviceMemory memory; + Result result = static_cast( d.vkAllocateMemory( m_device, + reinterpret_cast( &allocateInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &memory ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateMemory" ); + + return detail::createResultValueType( result, std::move( memory ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::allocateMemoryUnique( const MemoryAllocateInfo & allocateInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateMemory && "Function requires " ); +# endif + + DeviceMemory memory; + Result result = static_cast( d.vkAllocateMemory( m_device, + reinterpret_cast( &allocateInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &memory ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateMemoryUnique" ); + + return detail::createResultValueType( result, UniqueHandle( memory, detail::ObjectFree( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + VULKAN_HPP_INLINE void Device::freeMemory( DeviceMemory memory, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkFreeMemory( static_cast( m_device ), static_cast( memory ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + VULKAN_HPP_INLINE void Device::freeMemory( DeviceMemory memory, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFreeMemory && "Function requires " ); +# endif + + d.vkFreeMemory( m_device, static_cast( memory ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + VULKAN_HPP_INLINE void( Device::free )( DeviceMemory memory, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkFreeMemory( static_cast( m_device ), static_cast( memory ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + VULKAN_HPP_INLINE void( Device::free )( DeviceMemory memory, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFreeMemory && "Function requires " ); +# endif + + d.vkFreeMemory( m_device, static_cast( memory ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkMapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mapMemory( + DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, void ** ppData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkMapMemory( static_cast( m_device ), + static_cast( memory ), + static_cast( offset ), + static_cast( size ), + static_cast( flags ), + ppData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkMapMemory && "Function requires " ); +# endif + + void * pData; + Result result = static_cast( d.vkMapMemory( m_device, + static_cast( memory ), + static_cast( offset ), + static_cast( size ), + static_cast( flags ), + &pData ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mapMemory" ); + + return detail::createResultValueType( result, std::move( pData ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUnmapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory.html + template + VULKAN_HPP_INLINE void Device::unmapMemory( DeviceMemory memory, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUnmapMemory( static_cast( m_device ), static_cast( memory ) ); + } + + // wrapper function for command vkFlushMappedMemoryRanges, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFlushMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::flushMappedMemoryRanges( uint32_t memoryRangeCount, + const MappedMemoryRange * pMemoryRanges, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkFlushMappedMemoryRanges( static_cast( m_device ), memoryRangeCount, reinterpret_cast( pMemoryRanges ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFlushMappedMemoryRanges, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFlushMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::flushMappedMemoryRanges( ArrayProxy const & memoryRanges, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFlushMappedMemoryRanges && "Function requires " ); +# endif + + Result result = + static_cast( d.vkFlushMappedMemoryRanges( m_device, memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::flushMappedMemoryRanges" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkInvalidateMappedMemoryRanges, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInvalidateMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::invalidateMappedMemoryRanges( uint32_t memoryRangeCount, + const MappedMemoryRange * pMemoryRanges, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkInvalidateMappedMemoryRanges( static_cast( m_device ), memoryRangeCount, reinterpret_cast( pMemoryRanges ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkInvalidateMappedMemoryRanges, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInvalidateMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkInvalidateMappedMemoryRanges && "Function requires " ); +# endif + + Result result = static_cast( + d.vkInvalidateMappedMemoryRanges( m_device, memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::invalidateMappedMemoryRanges" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMemoryCommitment, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryCommitment.html + template + VULKAN_HPP_INLINE void Device::getMemoryCommitment( DeviceMemory memory, DeviceSize * pCommittedMemoryInBytes, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceMemoryCommitment( + static_cast( m_device ), static_cast( memory ), reinterpret_cast( pCommittedMemoryInBytes ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMemoryCommitment, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryCommitment.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceSize Device::getMemoryCommitment( DeviceMemory memory, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceMemoryCommitment && "Function requires " ); +# endif + + DeviceSize committedMemoryInBytes; + d.vkGetDeviceMemoryCommitment( m_device, static_cast( memory ), reinterpret_cast( &committedMemoryInBytes ) ); + + return committedMemoryInBytes; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindBufferMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBindBufferMemory( + static_cast( m_device ), static_cast( buffer ), static_cast( memory ), static_cast( memoryOffset ) ) ); + } +#else + // wrapper function for command vkBindBufferMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindBufferMemory && "Function requires " ); +# endif + + Result result = static_cast( + d.vkBindBufferMemory( m_device, static_cast( buffer ), static_cast( memory ), static_cast( memoryOffset ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindImageMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBindImageMemory( + static_cast( m_device ), static_cast( image ), static_cast( memory ), static_cast( memoryOffset ) ) ); + } +#else + // wrapper function for command vkBindImageMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindImageMemory && "Function requires " ); +# endif + + Result result = static_cast( + d.vkBindImageMemory( m_device, static_cast( image ), static_cast( memory ), static_cast( memoryOffset ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements.html + template + VULKAN_HPP_INLINE void + Device::getBufferMemoryRequirements( Buffer buffer, MemoryRequirements * pMemoryRequirements, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetBufferMemoryRequirements( + static_cast( m_device ), static_cast( buffer ), reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements Device::getBufferMemoryRequirements( Buffer buffer, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferMemoryRequirements && "Function requires " ); +# endif + + MemoryRequirements memoryRequirements; + d.vkGetBufferMemoryRequirements( m_device, static_cast( buffer ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageMemoryRequirements, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements.html + template + VULKAN_HPP_INLINE void + Device::getImageMemoryRequirements( Image image, MemoryRequirements * pMemoryRequirements, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageMemoryRequirements( + static_cast( m_device ), static_cast( image ), reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageMemoryRequirements, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements Device::getImageMemoryRequirements( Image image, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageMemoryRequirements && "Function requires " ); +# endif + + MemoryRequirements memoryRequirements; + d.vkGetImageMemoryRequirements( m_device, static_cast( image ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + template + VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements( Image image, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements * pSparseMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSparseMemoryRequirements( static_cast( m_device ), + static_cast( image ), + pSparseMemoryRequirementCount, + reinterpret_cast( pSparseMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements( Image image, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSparseMemoryRequirements && "Function requires " ); +# endif + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + d.vkGetImageSparseMemoryRequirements( m_device, static_cast( image ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetImageSparseMemoryRequirements( m_device, + static_cast( image ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements( Image image, + SparseImageMemoryRequirementsAllocator & sparseImageMemoryRequirementsAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSparseMemoryRequirements && "Function requires " ); +# endif + + std::vector sparseMemoryRequirements( sparseImageMemoryRequirementsAllocator ); + uint32_t sparseMemoryRequirementCount; + d.vkGetImageSparseMemoryRequirements( m_device, static_cast( image ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetImageSparseMemoryRequirements( m_device, + static_cast( image ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties( Format format, + ImageType type, + SampleCountFlagBits samples, + ImageUsageFlags usage, + ImageTiling tiling, + uint32_t * pPropertyCount, + SparseImageFormatProperties * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceSparseImageFormatProperties( static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + pPropertyCount, + reinterpret_cast( pProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties( + Format format, ImageType type, SampleCountFlagBits samples, ImageUsageFlags usage, ImageTiling tiling, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSparseImageFormatProperties && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + &propertyCount, + nullptr ); + properties.resize( propertyCount ); + d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties( Format format, + ImageType type, + SampleCountFlagBits samples, + ImageUsageFlags usage, + ImageTiling tiling, + SparseImageFormatPropertiesAllocator & sparseImageFormatPropertiesAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSparseImageFormatProperties && + "Function requires " ); +# endif + + std::vector properties( sparseImageFormatPropertiesAllocator ); + uint32_t propertyCount; + d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + &propertyCount, + nullptr ); + properties.resize( propertyCount ); + d.vkGetPhysicalDeviceSparseImageFormatProperties( m_physicalDevice, + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueueBindSparse, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBindSparse.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Queue::bindSparse( uint32_t bindInfoCount, const BindSparseInfo * pBindInfo, Fence fence, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkQueueBindSparse( + static_cast( m_queue ), bindInfoCount, reinterpret_cast( pBindInfo ), static_cast( fence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueBindSparse, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBindSparse.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Queue::bindSparse( ArrayProxy const & bindInfo, Fence fence, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueBindSparse && "Function requires " ); +# endif + + Result result = static_cast( + d.vkQueueBindSparse( m_queue, bindInfo.size(), reinterpret_cast( bindInfo.data() ), static_cast( fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::bindSparse" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createFence( const FenceCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Fence * pFence, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateFence( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pFence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createFence( const FenceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateFence && "Function requires " ); +# endif + + Fence fence; + Result result = static_cast( d.vkCreateFence( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createFence" ); + + return detail::createResultValueType( result, std::move( fence ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createFenceUnique( const FenceCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateFence && "Function requires " ); +# endif + + Fence fence; + Result result = static_cast( d.vkCreateFence( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createFenceUnique" ); + + return detail::createResultValueType( result, UniqueHandle( fence, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + VULKAN_HPP_INLINE void Device::destroyFence( Fence fence, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyFence( static_cast( m_device ), static_cast( fence ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + VULKAN_HPP_INLINE void Device::destroyFence( Fence fence, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyFence && "Function requires " ); +# endif + + d.vkDestroyFence( m_device, static_cast( fence ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + VULKAN_HPP_INLINE void Device::destroy( Fence fence, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyFence( static_cast( m_device ), static_cast( fence ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + VULKAN_HPP_INLINE void Device::destroy( Fence fence, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyFence && "Function requires " ); +# endif + + d.vkDestroyFence( m_device, static_cast( fence ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkResetFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetFences.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::resetFences( uint32_t fenceCount, const Fence * pFences, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkResetFences( static_cast( m_device ), fenceCount, reinterpret_cast( pFences ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetFences.html + template + VULKAN_HPP_INLINE typename ResultValueType::type Device::resetFences( ArrayProxy const & fences, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkResetFences && "Function requires " ); +# endif + + Result result = static_cast( d.vkResetFences( m_device, fences.size(), reinterpret_cast( fences.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::resetFences" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFenceStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceStatus.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceStatus( Fence fence, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetFenceStatus( static_cast( m_device ), static_cast( fence ) ) ); + } +#else + // wrapper function for command vkGetFenceStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceStatus.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceStatus( Fence fence, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetFenceStatus && "Function requires " ); +# endif + + Result result = static_cast( d.vkGetFenceStatus( m_device, static_cast( fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceStatus", { Result::eSuccess, Result::eNotReady } ); + + return static_cast( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkWaitForFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForFences.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::waitForFences( uint32_t fenceCount, const Fence * pFences, Bool32 waitAll, uint64_t timeout, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkWaitForFences( + static_cast( m_device ), fenceCount, reinterpret_cast( pFences ), static_cast( waitAll ), timeout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitForFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForFences.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::waitForFences( ArrayProxy const & fences, Bool32 waitAll, uint64_t timeout, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWaitForFences && "Function requires " ); +# endif + + Result result = static_cast( + d.vkWaitForFences( m_device, fences.size(), reinterpret_cast( fences.data() ), static_cast( waitAll ), timeout ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitForFences", { Result::eSuccess, Result::eTimeout } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSemaphore( const SemaphoreCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Semaphore * pSemaphore, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSemaphore( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSemaphore ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createSemaphore( const SemaphoreCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSemaphore && "Function requires " ); +# endif + + Semaphore semaphore; + Result result = static_cast( d.vkCreateSemaphore( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &semaphore ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSemaphore" ); + + return detail::createResultValueType( result, std::move( semaphore ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSemaphoreUnique( const SemaphoreCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSemaphore && "Function requires " ); +# endif + + Semaphore semaphore; + Result result = static_cast( d.vkCreateSemaphore( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &semaphore ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSemaphoreUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( semaphore, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + VULKAN_HPP_INLINE void Device::destroySemaphore( Semaphore semaphore, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySemaphore( + static_cast( m_device ), static_cast( semaphore ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + VULKAN_HPP_INLINE void + Device::destroySemaphore( Semaphore semaphore, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySemaphore && "Function requires " ); +# endif + + d.vkDestroySemaphore( m_device, static_cast( semaphore ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + VULKAN_HPP_INLINE void Device::destroy( Semaphore semaphore, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySemaphore( + static_cast( m_device ), static_cast( semaphore ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + VULKAN_HPP_INLINE void Device::destroy( Semaphore semaphore, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySemaphore && "Function requires " ); +# endif + + d.vkDestroySemaphore( m_device, static_cast( semaphore ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createEvent( const EventCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Event * pEvent, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateEvent( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pEvent ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createEvent( const EventCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateEvent && "Function requires " ); +# endif + + Event event; + Result result = static_cast( d.vkCreateEvent( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &event ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createEvent" ); + + return detail::createResultValueType( result, std::move( event ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createEventUnique( const EventCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateEvent && "Function requires " ); +# endif + + Event event; + Result result = static_cast( d.vkCreateEvent( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &event ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createEventUnique" ); + + return detail::createResultValueType( result, UniqueHandle( event, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + VULKAN_HPP_INLINE void Device::destroyEvent( Event event, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyEvent( static_cast( m_device ), static_cast( event ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + VULKAN_HPP_INLINE void Device::destroyEvent( Event event, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyEvent && "Function requires " ); +# endif + + d.vkDestroyEvent( m_device, static_cast( event ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + VULKAN_HPP_INLINE void Device::destroy( Event event, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyEvent( static_cast( m_device ), static_cast( event ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + VULKAN_HPP_INLINE void Device::destroy( Event event, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyEvent && "Function requires " ); +# endif + + d.vkDestroyEvent( m_device, static_cast( event ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetEventStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEventStatus.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getEventStatus( Event event, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetEventStatus( static_cast( m_device ), static_cast( event ) ) ); + } +#else + // wrapper function for command vkGetEventStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEventStatus.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getEventStatus( Event event, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetEventStatus && "Function requires " ); +# endif + + Result result = static_cast( d.vkGetEventStatus( m_device, static_cast( event ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEventStatus", { Result::eEventSet, Result::eEventReset } ); + + return static_cast( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetEvent.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setEvent( Event event, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkSetEvent( static_cast( m_device ), static_cast( event ) ) ); + } +#else + // wrapper function for command vkSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetEvent.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::setEvent( Event event, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetEvent && "Function requires " ); +# endif + + Result result = static_cast( d.vkSetEvent( m_device, static_cast( event ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setEvent" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetEvent.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::resetEvent( Event event, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkResetEvent( static_cast( m_device ), static_cast( event ) ) ); + } +#else + // wrapper function for command vkResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetEvent.html + template + VULKAN_HPP_INLINE typename ResultValueType::type Device::resetEvent( Event event, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkResetEvent && "Function requires " ); +# endif + + Result result = static_cast( d.vkResetEvent( m_device, static_cast( event ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::resetEvent" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createQueryPool( const QueryPoolCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + QueryPool * pQueryPool, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateQueryPool( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pQueryPool ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createQueryPool( const QueryPoolCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateQueryPool && "Function requires " ); +# endif + + QueryPool queryPool; + Result result = static_cast( d.vkCreateQueryPool( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &queryPool ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createQueryPool" ); + + return detail::createResultValueType( result, std::move( queryPool ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createQueryPoolUnique( const QueryPoolCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateQueryPool && "Function requires " ); +# endif + + QueryPool queryPool; + Result result = static_cast( d.vkCreateQueryPool( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &queryPool ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createQueryPoolUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( queryPool, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + VULKAN_HPP_INLINE void Device::destroyQueryPool( QueryPool queryPool, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyQueryPool( + static_cast( m_device ), static_cast( queryPool ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + VULKAN_HPP_INLINE void + Device::destroyQueryPool( QueryPool queryPool, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyQueryPool && "Function requires " ); +# endif + + d.vkDestroyQueryPool( m_device, static_cast( queryPool ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + VULKAN_HPP_INLINE void Device::destroy( QueryPool queryPool, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyQueryPool( + static_cast( m_device ), static_cast( queryPool ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + VULKAN_HPP_INLINE void Device::destroy( QueryPool queryPool, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyQueryPool && "Function requires " ); +# endif + + d.vkDestroyQueryPool( m_device, static_cast( queryPool ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getQueryPoolResults( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + void * pData, + DeviceSize stride, + QueryResultFlags flags, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetQueryPoolResults( static_cast( m_device ), + static_cast( queryPool ), + firstQuery, + queryCount, + dataSize, + pData, + static_cast( stride ), + static_cast( flags ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> Device::getQueryPoolResults( + QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, DeviceSize stride, QueryResultFlags flags, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetQueryPoolResults && "Function requires " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( d.vkGetQueryPoolResults( m_device, + static_cast( queryPool ), + firstQuery, + queryCount, + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ), + static_cast( stride ), + static_cast( flags ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getQueryPoolResults", { Result::eSuccess, Result::eNotReady } ); + + return ResultValue>( result, std::move( data ) ); + } + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::getQueryPoolResult( + QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, DeviceSize stride, QueryResultFlags flags, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetQueryPoolResults && "Function requires " ); +# endif + + DataType data; + Result result = static_cast( d.vkGetQueryPoolResults( m_device, + static_cast( queryPool ), + firstQuery, + queryCount, + sizeof( DataType ), + reinterpret_cast( &data ), + static_cast( stride ), + static_cast( flags ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getQueryPoolResult", { Result::eSuccess, Result::eNotReady } ); + + return ResultValue( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createBuffer( const BufferCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Buffer * pBuffer, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateBuffer( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pBuffer ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createBuffer( const BufferCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateBuffer && "Function requires " ); +# endif + + Buffer buffer; + Result result = static_cast( d.vkCreateBuffer( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &buffer ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createBuffer" ); + + return detail::createResultValueType( result, std::move( buffer ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createBufferUnique( const BufferCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateBuffer && "Function requires " ); +# endif + + Buffer buffer; + Result result = static_cast( d.vkCreateBuffer( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &buffer ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferUnique" ); + + return detail::createResultValueType( result, UniqueHandle( buffer, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + VULKAN_HPP_INLINE void Device::destroyBuffer( Buffer buffer, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyBuffer( static_cast( m_device ), static_cast( buffer ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + VULKAN_HPP_INLINE void Device::destroyBuffer( Buffer buffer, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyBuffer && "Function requires " ); +# endif + + d.vkDestroyBuffer( m_device, static_cast( buffer ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + VULKAN_HPP_INLINE void Device::destroy( Buffer buffer, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyBuffer( static_cast( m_device ), static_cast( buffer ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + VULKAN_HPP_INLINE void Device::destroy( Buffer buffer, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyBuffer && "Function requires " ); +# endif + + d.vkDestroyBuffer( m_device, static_cast( buffer ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createBufferView( const BufferViewCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + BufferView * pView, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateBufferView( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pView ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createBufferView( const BufferViewCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateBufferView && "Function requires " ); +# endif + + BufferView view; + Result result = static_cast( d.vkCreateBufferView( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferView" ); + + return detail::createResultValueType( result, std::move( view ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createBufferViewUnique( const BufferViewCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateBufferView && "Function requires " ); +# endif + + BufferView view; + Result result = static_cast( d.vkCreateBufferView( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferViewUnique" ); + + return detail::createResultValueType( result, UniqueHandle( view, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + VULKAN_HPP_INLINE void + Device::destroyBufferView( BufferView bufferView, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyBufferView( + static_cast( m_device ), static_cast( bufferView ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + VULKAN_HPP_INLINE void + Device::destroyBufferView( BufferView bufferView, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyBufferView && "Function requires " ); +# endif + + d.vkDestroyBufferView( m_device, static_cast( bufferView ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + VULKAN_HPP_INLINE void Device::destroy( BufferView bufferView, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyBufferView( + static_cast( m_device ), static_cast( bufferView ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + VULKAN_HPP_INLINE void Device::destroy( BufferView bufferView, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyBufferView && "Function requires " ); +# endif + + d.vkDestroyBufferView( m_device, static_cast( bufferView ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createImage( const ImageCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Image * pImage, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateImage( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pImage ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createImage( const ImageCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateImage && "Function requires " ); +# endif + + Image image; + Result result = static_cast( d.vkCreateImage( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &image ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createImage" ); + + return detail::createResultValueType( result, std::move( image ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createImageUnique( const ImageCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateImage && "Function requires " ); +# endif + + Image image; + Result result = static_cast( d.vkCreateImage( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &image ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createImageUnique" ); + + return detail::createResultValueType( result, UniqueHandle( image, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + VULKAN_HPP_INLINE void Device::destroyImage( Image image, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyImage( static_cast( m_device ), static_cast( image ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + VULKAN_HPP_INLINE void Device::destroyImage( Image image, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyImage && "Function requires " ); +# endif + + d.vkDestroyImage( m_device, static_cast( image ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + VULKAN_HPP_INLINE void Device::destroy( Image image, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyImage( static_cast( m_device ), static_cast( image ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + VULKAN_HPP_INLINE void Device::destroy( Image image, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyImage && "Function requires " ); +# endif + + d.vkDestroyImage( m_device, static_cast( image ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout.html + template + VULKAN_HPP_INLINE void Device::getImageSubresourceLayout( Image image, + const ImageSubresource * pSubresource, + SubresourceLayout * pLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSubresourceLayout( static_cast( m_device ), + static_cast( image ), + reinterpret_cast( pSubresource ), + reinterpret_cast( pLayout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE SubresourceLayout Device::getImageSubresourceLayout( Image image, + const ImageSubresource & subresource, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSubresourceLayout && "Function requires " ); +# endif + + SubresourceLayout layout; + d.vkGetImageSubresourceLayout( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createImageView( const ImageViewCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + ImageView * pView, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateImageView( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pView ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createImageView( const ImageViewCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateImageView && "Function requires " ); +# endif + + ImageView view; + Result result = static_cast( d.vkCreateImageView( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createImageView" ); + + return detail::createResultValueType( result, std::move( view ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createImageViewUnique( const ImageViewCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateImageView && "Function requires " ); +# endif + + ImageView view; + Result result = static_cast( d.vkCreateImageView( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createImageViewUnique" ); + + return detail::createResultValueType( result, UniqueHandle( view, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + VULKAN_HPP_INLINE void Device::destroyImageView( ImageView imageView, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyImageView( + static_cast( m_device ), static_cast( imageView ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + VULKAN_HPP_INLINE void + Device::destroyImageView( ImageView imageView, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyImageView && "Function requires " ); +# endif + + d.vkDestroyImageView( m_device, static_cast( imageView ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + VULKAN_HPP_INLINE void Device::destroy( ImageView imageView, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyImageView( + static_cast( m_device ), static_cast( imageView ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + VULKAN_HPP_INLINE void Device::destroy( ImageView imageView, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyImageView && "Function requires " ); +# endif + + d.vkDestroyImageView( m_device, static_cast( imageView ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createShaderModule( const ShaderModuleCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + ShaderModule * pShaderModule, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateShaderModule( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pShaderModule ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createShaderModule( const ShaderModuleCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShaderModule && "Function requires " ); +# endif + + ShaderModule shaderModule; + Result result = static_cast( d.vkCreateShaderModule( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &shaderModule ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShaderModule" ); + + return detail::createResultValueType( result, std::move( shaderModule ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createShaderModuleUnique( const ShaderModuleCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShaderModule && "Function requires " ); +# endif + + ShaderModule shaderModule; + Result result = static_cast( d.vkCreateShaderModule( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &shaderModule ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShaderModuleUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( shaderModule, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + VULKAN_HPP_INLINE void + Device::destroyShaderModule( ShaderModule shaderModule, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyShaderModule( + static_cast( m_device ), static_cast( shaderModule ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + VULKAN_HPP_INLINE void + Device::destroyShaderModule( ShaderModule shaderModule, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyShaderModule && "Function requires " ); +# endif + + d.vkDestroyShaderModule( m_device, static_cast( shaderModule ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + VULKAN_HPP_INLINE void Device::destroy( ShaderModule shaderModule, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyShaderModule( + static_cast( m_device ), static_cast( shaderModule ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + VULKAN_HPP_INLINE void + Device::destroy( ShaderModule shaderModule, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyShaderModule && "Function requires " ); +# endif + + d.vkDestroyShaderModule( m_device, static_cast( shaderModule ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPipelineCache( const PipelineCacheCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PipelineCache * pPipelineCache, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreatePipelineCache( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelineCache ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createPipelineCache( const PipelineCacheCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineCache && "Function requires " ); +# endif + + PipelineCache pipelineCache; + Result result = static_cast( d.vkCreatePipelineCache( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipelineCache ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineCache" ); + + return detail::createResultValueType( result, std::move( pipelineCache ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createPipelineCacheUnique( const PipelineCacheCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineCache && "Function requires " ); +# endif + + PipelineCache pipelineCache; + Result result = static_cast( d.vkCreatePipelineCache( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipelineCache ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineCacheUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( pipelineCache, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + VULKAN_HPP_INLINE void + Device::destroyPipelineCache( PipelineCache pipelineCache, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipelineCache( + static_cast( m_device ), static_cast( pipelineCache ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + VULKAN_HPP_INLINE void + Device::destroyPipelineCache( PipelineCache pipelineCache, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipelineCache && "Function requires " ); +# endif + + d.vkDestroyPipelineCache( m_device, static_cast( pipelineCache ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + VULKAN_HPP_INLINE void Device::destroy( PipelineCache pipelineCache, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipelineCache( + static_cast( m_device ), static_cast( pipelineCache ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + VULKAN_HPP_INLINE void + Device::destroy( PipelineCache pipelineCache, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipelineCache && "Function requires " ); +# endif + + d.vkDestroyPipelineCache( m_device, static_cast( pipelineCache ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getPipelineCacheData( PipelineCache pipelineCache, size_t * pDataSize, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPipelineCacheData( static_cast( m_device ), static_cast( pipelineCache ), pDataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPipelineCacheData( PipelineCache pipelineCache, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineCacheData && "Function requires " ); +# endif + + std::vector data; + size_t dataSize; + Result result; + do + { + result = static_cast( d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineCacheData" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPipelineCacheData( PipelineCache pipelineCache, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineCacheData && "Function requires " ); +# endif + + std::vector data( uint8_tAllocator ); + size_t dataSize; + Result result; + do + { + result = static_cast( d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetPipelineCacheData( m_device, static_cast( pipelineCache ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineCacheData" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkMergePipelineCaches, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergePipelineCaches.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mergePipelineCaches( PipelineCache dstCache, + uint32_t srcCacheCount, + const PipelineCache * pSrcCaches, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkMergePipelineCaches( + static_cast( m_device ), static_cast( dstCache ), srcCacheCount, reinterpret_cast( pSrcCaches ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMergePipelineCaches, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergePipelineCaches.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::mergePipelineCaches( PipelineCache dstCache, ArrayProxy const & srcCaches, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkMergePipelineCaches && "Function requires " ); +# endif + + Result result = static_cast( d.vkMergePipelineCaches( + m_device, static_cast( dstCache ), srcCaches.size(), reinterpret_cast( srcCaches.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mergePipelineCaches" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createGraphicsPipelines( PipelineCache pipelineCache, + uint32_t createInfoCount, + const GraphicsPipelineCreateInfo * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateGraphicsPipelines( static_cast( m_device ), + static_cast( pipelineCache ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelines ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createGraphicsPipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateGraphicsPipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateGraphicsPipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelines", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createGraphicsPipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateGraphicsPipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size(), pipelineAllocator ); + Result result = static_cast( d.vkCreateGraphicsPipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelines", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::createGraphicsPipeline( PipelineCache pipelineCache, + const GraphicsPipelineCreateInfo & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateGraphicsPipelines && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateGraphicsPipelines( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipeline", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue( result, std::move( pipeline ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createGraphicsPipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateGraphicsPipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateGraphicsPipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelinesUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines; + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createGraphicsPipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateGraphicsPipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateGraphicsPipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelinesUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> Device::createGraphicsPipelineUnique( + PipelineCache pipelineCache, const GraphicsPipelineCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateGraphicsPipelines && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateGraphicsPipelines( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createGraphicsPipelineUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( + result, UniqueHandle( pipeline, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createComputePipelines( PipelineCache pipelineCache, + uint32_t createInfoCount, + const ComputePipelineCreateInfo * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateComputePipelines( static_cast( m_device ), + static_cast( pipelineCache ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelines ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createComputePipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateComputePipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateComputePipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelines", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createComputePipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateComputePipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size(), pipelineAllocator ); + Result result = static_cast( d.vkCreateComputePipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelines", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::createComputePipeline( PipelineCache pipelineCache, + const ComputePipelineCreateInfo & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateComputePipelines && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateComputePipelines( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipeline", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue( result, std::move( pipeline ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createComputePipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateComputePipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateComputePipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelinesUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines; + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createComputePipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateComputePipelines && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateComputePipelines( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelinesUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> Device::createComputePipelineUnique( + PipelineCache pipelineCache, const ComputePipelineCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateComputePipelines && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateComputePipelines( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createComputePipelineUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( + result, UniqueHandle( pipeline, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + VULKAN_HPP_INLINE void Device::destroyPipeline( Pipeline pipeline, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipeline( + static_cast( m_device ), static_cast( pipeline ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + VULKAN_HPP_INLINE void + Device::destroyPipeline( Pipeline pipeline, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipeline && "Function requires " ); +# endif + + d.vkDestroyPipeline( m_device, static_cast( pipeline ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + VULKAN_HPP_INLINE void Device::destroy( Pipeline pipeline, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipeline( + static_cast( m_device ), static_cast( pipeline ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + VULKAN_HPP_INLINE void Device::destroy( Pipeline pipeline, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipeline && "Function requires " ); +# endif + + d.vkDestroyPipeline( m_device, static_cast( pipeline ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPipelineLayout( const PipelineLayoutCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PipelineLayout * pPipelineLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreatePipelineLayout( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelineLayout ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineLayout && "Function requires " ); +# endif + + PipelineLayout pipelineLayout; + Result result = static_cast( d.vkCreatePipelineLayout( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipelineLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineLayout" ); + + return detail::createResultValueType( result, std::move( pipelineLayout ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createPipelineLayoutUnique( const PipelineLayoutCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineLayout && "Function requires " ); +# endif + + PipelineLayout pipelineLayout; + Result result = static_cast( d.vkCreatePipelineLayout( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipelineLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineLayoutUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( pipelineLayout, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + VULKAN_HPP_INLINE void + Device::destroyPipelineLayout( PipelineLayout pipelineLayout, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipelineLayout( + static_cast( m_device ), static_cast( pipelineLayout ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + VULKAN_HPP_INLINE void + Device::destroyPipelineLayout( PipelineLayout pipelineLayout, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipelineLayout && "Function requires " ); +# endif + + d.vkDestroyPipelineLayout( m_device, static_cast( pipelineLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + VULKAN_HPP_INLINE void Device::destroy( PipelineLayout pipelineLayout, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipelineLayout( + static_cast( m_device ), static_cast( pipelineLayout ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + VULKAN_HPP_INLINE void + Device::destroy( PipelineLayout pipelineLayout, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipelineLayout && "Function requires " ); +# endif + + d.vkDestroyPipelineLayout( m_device, static_cast( pipelineLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSampler( const SamplerCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Sampler * pSampler, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSampler( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSampler ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createSampler( const SamplerCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSampler && "Function requires " ); +# endif + + Sampler sampler; + Result result = static_cast( d.vkCreateSampler( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &sampler ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSampler" ); + + return detail::createResultValueType( result, std::move( sampler ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSamplerUnique( const SamplerCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSampler && "Function requires " ); +# endif + + Sampler sampler; + Result result = static_cast( d.vkCreateSampler( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &sampler ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerUnique" ); + + return detail::createResultValueType( result, UniqueHandle( sampler, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + VULKAN_HPP_INLINE void Device::destroySampler( Sampler sampler, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySampler( static_cast( m_device ), static_cast( sampler ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + VULKAN_HPP_INLINE void Device::destroySampler( Sampler sampler, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySampler && "Function requires " ); +# endif + + d.vkDestroySampler( m_device, static_cast( sampler ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + VULKAN_HPP_INLINE void Device::destroy( Sampler sampler, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySampler( static_cast( m_device ), static_cast( sampler ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + VULKAN_HPP_INLINE void Device::destroy( Sampler sampler, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySampler && "Function requires " ); +# endif + + d.vkDestroySampler( m_device, static_cast( sampler ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorSetLayout * pSetLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDescriptorSetLayout( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSetLayout ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createDescriptorSetLayout( + const DescriptorSetLayoutCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorSetLayout && "Function requires " ); +# endif + + DescriptorSetLayout setLayout; + Result result = static_cast( d.vkCreateDescriptorSetLayout( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &setLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorSetLayout" ); + + return detail::createResultValueType( result, std::move( setLayout ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createDescriptorSetLayoutUnique( + const DescriptorSetLayoutCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorSetLayout && "Function requires " ); +# endif + + DescriptorSetLayout setLayout; + Result result = static_cast( d.vkCreateDescriptorSetLayout( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &setLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorSetLayoutUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( setLayout, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + VULKAN_HPP_INLINE void Device::destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorSetLayout( static_cast( m_device ), + static_cast( descriptorSetLayout ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + VULKAN_HPP_INLINE void Device::destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorSetLayout && "Function requires " ); +# endif + + d.vkDestroyDescriptorSetLayout( + m_device, static_cast( descriptorSetLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + VULKAN_HPP_INLINE void + Device::destroy( DescriptorSetLayout descriptorSetLayout, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorSetLayout( static_cast( m_device ), + static_cast( descriptorSetLayout ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + VULKAN_HPP_INLINE void + Device::destroy( DescriptorSetLayout descriptorSetLayout, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorSetLayout && "Function requires " ); +# endif + + d.vkDestroyDescriptorSetLayout( + m_device, static_cast( descriptorSetLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDescriptorPool( const DescriptorPoolCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorPool * pDescriptorPool, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDescriptorPool( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pDescriptorPool ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorPool && "Function requires " ); +# endif + + DescriptorPool descriptorPool; + Result result = static_cast( d.vkCreateDescriptorPool( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorPool ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorPool" ); + + return detail::createResultValueType( result, std::move( descriptorPool ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createDescriptorPoolUnique( const DescriptorPoolCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorPool && "Function requires " ); +# endif + + DescriptorPool descriptorPool; + Result result = static_cast( d.vkCreateDescriptorPool( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorPool ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorPoolUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( descriptorPool, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + VULKAN_HPP_INLINE void + Device::destroyDescriptorPool( DescriptorPool descriptorPool, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorPool( + static_cast( m_device ), static_cast( descriptorPool ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + VULKAN_HPP_INLINE void + Device::destroyDescriptorPool( DescriptorPool descriptorPool, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorPool && "Function requires " ); +# endif + + d.vkDestroyDescriptorPool( m_device, static_cast( descriptorPool ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + VULKAN_HPP_INLINE void Device::destroy( DescriptorPool descriptorPool, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorPool( + static_cast( m_device ), static_cast( descriptorPool ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + VULKAN_HPP_INLINE void + Device::destroy( DescriptorPool descriptorPool, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorPool && "Function requires " ); +# endif + + d.vkDestroyDescriptorPool( m_device, static_cast( descriptorPool ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetDescriptorPool.html + template + VULKAN_HPP_INLINE Result Device::resetDescriptorPool( DescriptorPool descriptorPool, + DescriptorPoolResetFlags flags, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkResetDescriptorPool( + static_cast( m_device ), static_cast( descriptorPool ), static_cast( flags ) ) ); + } +#else + // wrapper function for command vkResetDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetDescriptorPool.html + template + VULKAN_HPP_INLINE void + Device::resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkResetDescriptorPool && "Function requires " ); +# endif + + d.vkResetDescriptorPool( m_device, static_cast( descriptorPool ), static_cast( flags ) ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::allocateDescriptorSets( const DescriptorSetAllocateInfo * pAllocateInfo, + DescriptorSet * pDescriptorSets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAllocateDescriptorSets( static_cast( m_device ), + reinterpret_cast( pAllocateInfo ), + reinterpret_cast( pDescriptorSets ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateDescriptorSets && "Function requires " ); +# endif + + std::vector descriptorSets( allocateInfo.descriptorSetCount ); + Result result = static_cast( d.vkAllocateDescriptorSets( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSets" ); + + return detail::createResultValueType( result, std::move( descriptorSets ) ); + } + + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo, DescriptorSetAllocator & descriptorSetAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateDescriptorSets && "Function requires " ); +# endif + + std::vector descriptorSets( allocateInfo.descriptorSetCount, descriptorSetAllocator ); + Result result = static_cast( d.vkAllocateDescriptorSets( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSets" ); + + return detail::createResultValueType( result, std::move( descriptorSets ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, DescriptorSetAllocator>>::type + Device::allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateDescriptorSets && "Function requires " ); +# endif + + std::vector descriptorSets( allocateInfo.descriptorSetCount ); + Result result = static_cast( d.vkAllocateDescriptorSets( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSetsUnique" ); + std::vector, DescriptorSetAllocator> uniqueDescriptorSets; + uniqueDescriptorSets.reserve( allocateInfo.descriptorSetCount ); + detail::PoolFree deleter( *this, allocateInfo.descriptorPool, d ); + for ( auto const & descriptorSet : descriptorSets ) + { + uniqueDescriptorSets.push_back( UniqueHandle( descriptorSet, deleter ) ); + } + return detail::createResultValueType( result, std::move( uniqueDescriptorSets ) ); + } + + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, DescriptorSetAllocator>>::type + Device::allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo, + DescriptorSetAllocator & descriptorSetAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateDescriptorSets && "Function requires " ); +# endif + + std::vector descriptorSets( allocateInfo.descriptorSetCount ); + Result result = static_cast( d.vkAllocateDescriptorSets( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( descriptorSets.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateDescriptorSetsUnique" ); + std::vector, DescriptorSetAllocator> uniqueDescriptorSets( descriptorSetAllocator ); + uniqueDescriptorSets.reserve( allocateInfo.descriptorSetCount ); + detail::PoolFree deleter( *this, allocateInfo.descriptorPool, d ); + for ( auto const & descriptorSet : descriptorSets ) + { + uniqueDescriptorSets.push_back( UniqueHandle( descriptorSet, deleter ) ); + } + return detail::createResultValueType( result, std::move( uniqueDescriptorSets ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + VULKAN_HPP_INLINE Result Device::freeDescriptorSets( DescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const DescriptorSet * pDescriptorSets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkFreeDescriptorSets( static_cast( m_device ), + static_cast( descriptorPool ), + descriptorSetCount, + reinterpret_cast( pDescriptorSets ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + VULKAN_HPP_INLINE void Device::freeDescriptorSets( DescriptorPool descriptorPool, + ArrayProxy const & descriptorSets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFreeDescriptorSets && "Function requires " ); +# endif + + d.vkFreeDescriptorSets( + m_device, static_cast( descriptorPool ), descriptorSets.size(), reinterpret_cast( descriptorSets.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + VULKAN_HPP_INLINE Result( Device::free )( DescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const DescriptorSet * pDescriptorSets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkFreeDescriptorSets( static_cast( m_device ), + static_cast( descriptorPool ), + descriptorSetCount, + reinterpret_cast( pDescriptorSets ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + VULKAN_HPP_INLINE void( Device::free )( DescriptorPool descriptorPool, + ArrayProxy const & descriptorSets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFreeDescriptorSets && "Function requires " ); +# endif + + d.vkFreeDescriptorSets( + m_device, static_cast( descriptorPool ), descriptorSets.size(), reinterpret_cast( descriptorSets.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSets.html + template + VULKAN_HPP_INLINE void Device::updateDescriptorSets( uint32_t descriptorWriteCount, + const WriteDescriptorSet * pDescriptorWrites, + uint32_t descriptorCopyCount, + const CopyDescriptorSet * pDescriptorCopies, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUpdateDescriptorSets( static_cast( m_device ), + descriptorWriteCount, + reinterpret_cast( pDescriptorWrites ), + descriptorCopyCount, + reinterpret_cast( pDescriptorCopies ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSets.html + template + VULKAN_HPP_INLINE void Device::updateDescriptorSets( ArrayProxy const & descriptorWrites, + ArrayProxy const & descriptorCopies, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUpdateDescriptorSets && "Function requires " ); +# endif + + d.vkUpdateDescriptorSets( m_device, + descriptorWrites.size(), + reinterpret_cast( descriptorWrites.data() ), + descriptorCopies.size(), + reinterpret_cast( descriptorCopies.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createFramebuffer( const FramebufferCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Framebuffer * pFramebuffer, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateFramebuffer( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pFramebuffer ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createFramebuffer( const FramebufferCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateFramebuffer && "Function requires " ); +# endif + + Framebuffer framebuffer; + Result result = static_cast( d.vkCreateFramebuffer( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &framebuffer ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createFramebuffer" ); + + return detail::createResultValueType( result, std::move( framebuffer ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createFramebufferUnique( const FramebufferCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateFramebuffer && "Function requires " ); +# endif + + Framebuffer framebuffer; + Result result = static_cast( d.vkCreateFramebuffer( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &framebuffer ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createFramebufferUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( framebuffer, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + VULKAN_HPP_INLINE void + Device::destroyFramebuffer( Framebuffer framebuffer, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyFramebuffer( + static_cast( m_device ), static_cast( framebuffer ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + VULKAN_HPP_INLINE void + Device::destroyFramebuffer( Framebuffer framebuffer, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyFramebuffer && "Function requires " ); +# endif + + d.vkDestroyFramebuffer( m_device, static_cast( framebuffer ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + VULKAN_HPP_INLINE void Device::destroy( Framebuffer framebuffer, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyFramebuffer( + static_cast( m_device ), static_cast( framebuffer ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + VULKAN_HPP_INLINE void Device::destroy( Framebuffer framebuffer, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyFramebuffer && "Function requires " ); +# endif + + d.vkDestroyFramebuffer( m_device, static_cast( framebuffer ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRenderPass( const RenderPassCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + RenderPass * pRenderPass, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateRenderPass( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pRenderPass ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createRenderPass( const RenderPassCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRenderPass && "Function requires " ); +# endif + + RenderPass renderPass; + Result result = static_cast( d.vkCreateRenderPass( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass" ); + + return detail::createResultValueType( result, std::move( renderPass ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createRenderPassUnique( const RenderPassCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRenderPass && "Function requires " ); +# endif + + RenderPass renderPass; + Result result = static_cast( d.vkCreateRenderPass( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPassUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( renderPass, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + VULKAN_HPP_INLINE void + Device::destroyRenderPass( RenderPass renderPass, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyRenderPass( + static_cast( m_device ), static_cast( renderPass ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + VULKAN_HPP_INLINE void + Device::destroyRenderPass( RenderPass renderPass, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyRenderPass && "Function requires " ); +# endif + + d.vkDestroyRenderPass( m_device, static_cast( renderPass ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + VULKAN_HPP_INLINE void Device::destroy( RenderPass renderPass, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyRenderPass( + static_cast( m_device ), static_cast( renderPass ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + VULKAN_HPP_INLINE void Device::destroy( RenderPass renderPass, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyRenderPass && "Function requires " ); +# endif + + d.vkDestroyRenderPass( m_device, static_cast( renderPass ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRenderAreaGranularity, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderAreaGranularity.html + template + VULKAN_HPP_INLINE void Device::getRenderAreaGranularity( RenderPass renderPass, Extent2D * pGranularity, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetRenderAreaGranularity( static_cast( m_device ), static_cast( renderPass ), reinterpret_cast( pGranularity ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRenderAreaGranularity, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderAreaGranularity.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Extent2D Device::getRenderAreaGranularity( RenderPass renderPass, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRenderAreaGranularity && "Function requires " ); +# endif + + Extent2D granularity; + d.vkGetRenderAreaGranularity( m_device, static_cast( renderPass ), reinterpret_cast( &granularity ) ); + + return granularity; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCommandPool( const CommandPoolCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + CommandPool * pCommandPool, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateCommandPool( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pCommandPool ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createCommandPool( const CommandPoolCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCommandPool && "Function requires " ); +# endif + + CommandPool commandPool; + Result result = static_cast( d.vkCreateCommandPool( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &commandPool ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCommandPool" ); + + return detail::createResultValueType( result, std::move( commandPool ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createCommandPoolUnique( const CommandPoolCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCommandPool && "Function requires " ); +# endif + + CommandPool commandPool; + Result result = static_cast( d.vkCreateCommandPool( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &commandPool ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCommandPoolUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( commandPool, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + VULKAN_HPP_INLINE void + Device::destroyCommandPool( CommandPool commandPool, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCommandPool( + static_cast( m_device ), static_cast( commandPool ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + VULKAN_HPP_INLINE void + Device::destroyCommandPool( CommandPool commandPool, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCommandPool && "Function requires " ); +# endif + + d.vkDestroyCommandPool( m_device, static_cast( commandPool ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + VULKAN_HPP_INLINE void Device::destroy( CommandPool commandPool, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCommandPool( + static_cast( m_device ), static_cast( commandPool ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + VULKAN_HPP_INLINE void Device::destroy( CommandPool commandPool, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCommandPool && "Function requires " ); +# endif + + d.vkDestroyCommandPool( m_device, static_cast( commandPool ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandPool.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::resetCommandPool( CommandPool commandPool, + CommandPoolResetFlags flags, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkResetCommandPool( static_cast( m_device ), static_cast( commandPool ), static_cast( flags ) ) ); + } +#else + // wrapper function for command vkResetCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandPool.html + template + VULKAN_HPP_INLINE typename ResultValueType::type + Device::resetCommandPool( CommandPool commandPool, CommandPoolResetFlags flags, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkResetCommandPool && "Function requires " ); +# endif + + Result result = + static_cast( d.vkResetCommandPool( m_device, static_cast( commandPool ), static_cast( flags ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::resetCommandPool" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::allocateCommandBuffers( const CommandBufferAllocateInfo * pAllocateInfo, + CommandBuffer * pCommandBuffers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAllocateCommandBuffers( static_cast( m_device ), + reinterpret_cast( pAllocateInfo ), + reinterpret_cast( pCommandBuffers ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateCommandBuffers && "Function requires " ); +# endif + + std::vector commandBuffers( allocateInfo.commandBufferCount ); + Result result = static_cast( d.vkAllocateCommandBuffers( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffers" ); + + return detail::createResultValueType( result, std::move( commandBuffers ) ); + } + + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo, CommandBufferAllocator & commandBufferAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateCommandBuffers && "Function requires " ); +# endif + + std::vector commandBuffers( allocateInfo.commandBufferCount, commandBufferAllocator ); + Result result = static_cast( d.vkAllocateCommandBuffers( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffers" ); + + return detail::createResultValueType( result, std::move( commandBuffers ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, CommandBufferAllocator>>::type + Device::allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateCommandBuffers && "Function requires " ); +# endif + + std::vector commandBuffers( allocateInfo.commandBufferCount ); + Result result = static_cast( d.vkAllocateCommandBuffers( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffersUnique" ); + std::vector, CommandBufferAllocator> uniqueCommandBuffers; + uniqueCommandBuffers.reserve( allocateInfo.commandBufferCount ); + detail::PoolFree deleter( *this, allocateInfo.commandPool, d ); + for ( auto const & commandBuffer : commandBuffers ) + { + uniqueCommandBuffers.push_back( UniqueHandle( commandBuffer, deleter ) ); + } + return detail::createResultValueType( result, std::move( uniqueCommandBuffers ) ); + } + + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, CommandBufferAllocator>>::type + Device::allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo, + CommandBufferAllocator & commandBufferAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAllocateCommandBuffers && "Function requires " ); +# endif + + std::vector commandBuffers( allocateInfo.commandBufferCount ); + Result result = static_cast( d.vkAllocateCommandBuffers( + m_device, reinterpret_cast( &allocateInfo ), reinterpret_cast( commandBuffers.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::allocateCommandBuffersUnique" ); + std::vector, CommandBufferAllocator> uniqueCommandBuffers( commandBufferAllocator ); + uniqueCommandBuffers.reserve( allocateInfo.commandBufferCount ); + detail::PoolFree deleter( *this, allocateInfo.commandPool, d ); + for ( auto const & commandBuffer : commandBuffers ) + { + uniqueCommandBuffers.push_back( UniqueHandle( commandBuffer, deleter ) ); + } + return detail::createResultValueType( result, std::move( uniqueCommandBuffers ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + VULKAN_HPP_INLINE void Device::freeCommandBuffers( CommandPool commandPool, + uint32_t commandBufferCount, + const CommandBuffer * pCommandBuffers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkFreeCommandBuffers( static_cast( m_device ), + static_cast( commandPool ), + commandBufferCount, + reinterpret_cast( pCommandBuffers ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + VULKAN_HPP_INLINE void + Device::freeCommandBuffers( CommandPool commandPool, ArrayProxy const & commandBuffers, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFreeCommandBuffers && "Function requires " ); +# endif + + d.vkFreeCommandBuffers( + m_device, static_cast( commandPool ), commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + VULKAN_HPP_INLINE void( Device::free )( CommandPool commandPool, + uint32_t commandBufferCount, + const CommandBuffer * pCommandBuffers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkFreeCommandBuffers( static_cast( m_device ), + static_cast( commandPool ), + commandBufferCount, + reinterpret_cast( pCommandBuffers ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + VULKAN_HPP_INLINE void( Device::free )( CommandPool commandPool, + ArrayProxy const & commandBuffers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkFreeCommandBuffers && "Function requires " ); +# endif + + d.vkFreeCommandBuffers( + m_device, static_cast( commandPool ), commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBeginCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBeginCommandBuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::begin( const CommandBufferBeginInfo * pBeginInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBeginCommandBuffer( static_cast( m_commandBuffer ), reinterpret_cast( pBeginInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBeginCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBeginCommandBuffer.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type CommandBuffer::begin( const CommandBufferBeginInfo & beginInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBeginCommandBuffer && "Function requires " ); +# endif + + Result result = static_cast( d.vkBeginCommandBuffer( m_commandBuffer, reinterpret_cast( &beginInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::begin" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEndCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEndCommandBuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::end( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEndCommandBuffer( static_cast( m_commandBuffer ) ) ); + } +#else + // wrapper function for command vkEndCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEndCommandBuffer.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type CommandBuffer::end( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEndCommandBuffer && "Function requires " ); +# endif + + Result result = static_cast( d.vkEndCommandBuffer( m_commandBuffer ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::end" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandBuffer.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::reset( CommandBufferResetFlags flags, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkResetCommandBuffer( static_cast( m_commandBuffer ), static_cast( flags ) ) ); + } +#else + // wrapper function for command vkResetCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandBuffer.html + template + VULKAN_HPP_INLINE typename ResultValueType::type CommandBuffer::reset( CommandBufferResetFlags flags, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkResetCommandBuffer && "Function requires " ); +# endif + + Result result = static_cast( d.vkResetCommandBuffer( m_commandBuffer, static_cast( flags ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::reset" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkCmdBindPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipeline.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindPipeline( PipelineBindPoint pipelineBindPoint, Pipeline pipeline, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindPipeline( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( pipeline ) ); + } + + // wrapper function for command vkCmdSetViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewport.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setViewport( uint32_t firstViewport, uint32_t viewportCount, const Viewport * pViewports, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewport( static_cast( m_commandBuffer ), firstViewport, viewportCount, reinterpret_cast( pViewports ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewport.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setViewport( uint32_t firstViewport, ArrayProxy const & viewports, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetViewport && "Function requires " ); +# endif + + d.vkCmdSetViewport( m_commandBuffer, firstViewport, viewports.size(), reinterpret_cast( viewports.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetScissor, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissor.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setScissor( uint32_t firstScissor, uint32_t scissorCount, const Rect2D * pScissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetScissor( static_cast( m_commandBuffer ), firstScissor, scissorCount, reinterpret_cast( pScissors ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetScissor, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissor.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setScissor( uint32_t firstScissor, ArrayProxy const & scissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetScissor && "Function requires " ); +# endif + + d.vkCmdSetScissor( m_commandBuffer, firstScissor, scissors.size(), reinterpret_cast( scissors.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetLineWidth, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineWidth.html + template + VULKAN_HPP_INLINE void CommandBuffer::setLineWidth( float lineWidth, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLineWidth( static_cast( m_commandBuffer ), lineWidth ); + } + + // wrapper function for command vkCmdSetDepthBias, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBias( static_cast( m_commandBuffer ), depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); + } + + // wrapper function for command vkCmdSetBlendConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetBlendConstants.html + template + VULKAN_HPP_INLINE void CommandBuffer::setBlendConstants( const float blendConstants[4], Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetBlendConstants( static_cast( m_commandBuffer ), blendConstants ); + } + + // wrapper function for command vkCmdSetDepthBounds, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBounds.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBounds( float minDepthBounds, float maxDepthBounds, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBounds( static_cast( m_commandBuffer ), minDepthBounds, maxDepthBounds ); + } + + // wrapper function for command vkCmdSetStencilCompareMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilCompareMask.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilCompareMask( StencilFaceFlags faceMask, uint32_t compareMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilCompareMask( static_cast( m_commandBuffer ), static_cast( faceMask ), compareMask ); + } + + // wrapper function for command vkCmdSetStencilWriteMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilWriteMask.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilWriteMask( StencilFaceFlags faceMask, uint32_t writeMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilWriteMask( static_cast( m_commandBuffer ), static_cast( faceMask ), writeMask ); + } + + // wrapper function for command vkCmdSetStencilReference, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilReference.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilReference( StencilFaceFlags faceMask, uint32_t reference, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilReference( static_cast( m_commandBuffer ), static_cast( faceMask ), reference ); + } + + // wrapper function for command vkCmdBindDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + const DescriptorSet * pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t * pDynamicOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindDescriptorSets( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + firstSet, + descriptorSetCount, + reinterpret_cast( pDescriptorSets ), + dynamicOffsetCount, + pDynamicOffsets ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & descriptorSets, + ArrayProxy const & dynamicOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindDescriptorSets && "Function requires " ); +# endif + + d.vkCmdBindDescriptorSets( m_commandBuffer, + static_cast( pipelineBindPoint ), + static_cast( layout ), + firstSet, + descriptorSets.size(), + reinterpret_cast( descriptorSets.data() ), + dynamicOffsets.size(), + dynamicOffsets.data() ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindIndexBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer( Buffer buffer, DeviceSize offset, IndexType indexType, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindIndexBuffer( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( indexType ) ); + } + + // wrapper function for command vkCmdBindVertexBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( + uint32_t firstBinding, uint32_t bindingCount, const Buffer * pBuffers, const DeviceSize * pOffsets, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindVertexBuffers( static_cast( m_commandBuffer ), + firstBinding, + bindingCount, + reinterpret_cast( pBuffers ), + reinterpret_cast( pOffsets ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindVertexBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindVertexBuffers && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBindVertexBuffers( m_commandBuffer, + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDraw, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDraw.html + template + VULKAN_HPP_INLINE void CommandBuffer::draw( + uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDraw( static_cast( m_commandBuffer ), vertexCount, instanceCount, firstVertex, firstInstance ); + } + + // wrapper function for command vkCmdDrawIndexed, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexed.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndexed( uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndexed( static_cast( m_commandBuffer ), indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); + } + + // wrapper function for command vkCmdDrawIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirect.html + template + VULKAN_HPP_INLINE void + CommandBuffer::drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndirect( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirect.html + template + VULKAN_HPP_INLINE void + CommandBuffer::drawIndexedIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndexedIndirect( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDispatch, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatch.html + template + VULKAN_HPP_INLINE void + CommandBuffer::dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatch( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkCmdDispatchIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchIndirect.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchIndirect( Buffer buffer, DeviceSize offset, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchIndirect( static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ) ); + } + + // wrapper function for command vkCmdCopyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( + Buffer srcBuffer, Buffer dstBuffer, uint32_t regionCount, const BufferCopy * pRegions, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyBuffer( static_cast( m_commandBuffer ), + static_cast( srcBuffer ), + static_cast( dstBuffer ), + regionCount, + reinterpret_cast( pRegions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer.html + template + VULKAN_HPP_INLINE void + CommandBuffer::copyBuffer( Buffer srcBuffer, Buffer dstBuffer, ArrayProxy const & regions, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyBuffer && "Function requires " ); +# endif + + d.vkCmdCopyBuffer( m_commandBuffer, + static_cast( srcBuffer ), + static_cast( dstBuffer ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const ImageCopy * pRegions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyImage( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regionCount, + reinterpret_cast( pRegions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyImage && "Function requires " ); +# endif + + d.vkCmdCopyImage( m_commandBuffer, + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBlitImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::blitImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const ImageBlit * pRegions, + Filter filter, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBlitImage( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regionCount, + reinterpret_cast( pRegions ), + static_cast( filter ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBlitImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::blitImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Filter filter, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBlitImage && "Function requires " ); +# endif + + d.vkCmdBlitImage( m_commandBuffer, + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ), + static_cast( filter ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBufferToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( Buffer srcBuffer, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const BufferImageCopy * pRegions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyBufferToImage( static_cast( m_commandBuffer ), + static_cast( srcBuffer ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regionCount, + reinterpret_cast( pRegions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBufferToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( Buffer srcBuffer, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyBufferToImage && "Function requires " ); +# endif + + d.vkCmdCopyBufferToImage( m_commandBuffer, + static_cast( srcBuffer ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImageToBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( Image srcImage, + ImageLayout srcImageLayout, + Buffer dstBuffer, + uint32_t regionCount, + const BufferImageCopy * pRegions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyImageToBuffer( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstBuffer ), + regionCount, + reinterpret_cast( pRegions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImageToBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( Image srcImage, + ImageLayout srcImageLayout, + Buffer dstBuffer, + ArrayProxy const & regions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyImageToBuffer && "Function requires " ); +# endif + + d.vkCmdCopyImageToBuffer( m_commandBuffer, + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstBuffer ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdUpdateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdateBuffer.html + template + VULKAN_HPP_INLINE void + CommandBuffer::updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize dataSize, const void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdUpdateBuffer( static_cast( m_commandBuffer ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + static_cast( dataSize ), + pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdUpdateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdateBuffer.html + template + VULKAN_HPP_INLINE void + CommandBuffer::updateBuffer( Buffer dstBuffer, DeviceSize dstOffset, ArrayProxy const & data, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdUpdateBuffer && "Function requires " ); +# endif + + d.vkCmdUpdateBuffer( m_commandBuffer, + static_cast( dstBuffer ), + static_cast( dstOffset ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdFillBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdFillBuffer.html + template + VULKAN_HPP_INLINE void + CommandBuffer::fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdFillBuffer( static_cast( m_commandBuffer ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + static_cast( size ), + data ); + } + + // wrapper function for command vkCmdClearColorImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearColorImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::clearColorImage( Image image, + ImageLayout imageLayout, + const ClearColorValue * pColor, + uint32_t rangeCount, + const ImageSubresourceRange * pRanges, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdClearColorImage( static_cast( m_commandBuffer ), + static_cast( image ), + static_cast( imageLayout ), + reinterpret_cast( pColor ), + rangeCount, + reinterpret_cast( pRanges ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdClearColorImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearColorImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::clearColorImage( Image image, + ImageLayout imageLayout, + const ClearColorValue & color, + ArrayProxy const & ranges, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdClearColorImage && "Function requires " ); +# endif + + d.vkCmdClearColorImage( m_commandBuffer, + static_cast( image ), + static_cast( imageLayout ), + reinterpret_cast( &color ), + ranges.size(), + reinterpret_cast( ranges.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdClearDepthStencilImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearDepthStencilImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage( Image image, + ImageLayout imageLayout, + const ClearDepthStencilValue * pDepthStencil, + uint32_t rangeCount, + const ImageSubresourceRange * pRanges, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdClearDepthStencilImage( static_cast( m_commandBuffer ), + static_cast( image ), + static_cast( imageLayout ), + reinterpret_cast( pDepthStencil ), + rangeCount, + reinterpret_cast( pRanges ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdClearDepthStencilImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearDepthStencilImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage( Image image, + ImageLayout imageLayout, + const ClearDepthStencilValue & depthStencil, + ArrayProxy const & ranges, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdClearDepthStencilImage && "Function requires " ); +# endif + + d.vkCmdClearDepthStencilImage( m_commandBuffer, + static_cast( image ), + static_cast( imageLayout ), + reinterpret_cast( &depthStencil ), + ranges.size(), + reinterpret_cast( ranges.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdClearAttachments, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearAttachments.html + template + VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( + uint32_t attachmentCount, const ClearAttachment * pAttachments, uint32_t rectCount, const ClearRect * pRects, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdClearAttachments( static_cast( m_commandBuffer ), + attachmentCount, + reinterpret_cast( pAttachments ), + rectCount, + reinterpret_cast( pRects ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdClearAttachments, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearAttachments.html + template + VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( ArrayProxy const & attachments, + ArrayProxy const & rects, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdClearAttachments && "Function requires " ); +# endif + + d.vkCmdClearAttachments( m_commandBuffer, + attachments.size(), + reinterpret_cast( attachments.data() ), + rects.size(), + reinterpret_cast( rects.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResolveImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::resolveImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const ImageResolve * pRegions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResolveImage( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regionCount, + reinterpret_cast( pRegions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdResolveImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage.html + template + VULKAN_HPP_INLINE void CommandBuffer::resolveImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdResolveImage && "Function requires " ); +# endif + + d.vkCmdResolveImage( m_commandBuffer, + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent.html + template + VULKAN_HPP_INLINE void CommandBuffer::setEvent( Event event, PipelineStageFlags stageMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetEvent( static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent.html + template + VULKAN_HPP_INLINE void CommandBuffer::resetEvent( Event event, PipelineStageFlags stageMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResetEvent( static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdWaitEvents, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents.html + template + VULKAN_HPP_INLINE void CommandBuffer::waitEvents( uint32_t eventCount, + const Event * pEvents, + PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const MemoryBarrier * pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const BufferMemoryBarrier * pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const ImageMemoryBarrier * pImageMemoryBarriers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWaitEvents( static_cast( m_commandBuffer ), + eventCount, + reinterpret_cast( pEvents ), + static_cast( srcStageMask ), + static_cast( dstStageMask ), + memoryBarrierCount, + reinterpret_cast( pMemoryBarriers ), + bufferMemoryBarrierCount, + reinterpret_cast( pBufferMemoryBarriers ), + imageMemoryBarrierCount, + reinterpret_cast( pImageMemoryBarriers ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWaitEvents, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents.html + template + VULKAN_HPP_INLINE void CommandBuffer::waitEvents( ArrayProxy const & events, + PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdWaitEvents && "Function requires " ); +# endif + + d.vkCmdWaitEvents( m_commandBuffer, + events.size(), + reinterpret_cast( events.data() ), + static_cast( srcStageMask ), + static_cast( dstStageMask ), + memoryBarriers.size(), + reinterpret_cast( memoryBarriers.data() ), + bufferMemoryBarriers.size(), + reinterpret_cast( bufferMemoryBarriers.data() ), + imageMemoryBarriers.size(), + reinterpret_cast( imageMemoryBarriers.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPipelineBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier.html + template + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier( PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + DependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const MemoryBarrier * pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const BufferMemoryBarrier * pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const ImageMemoryBarrier * pImageMemoryBarriers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPipelineBarrier( static_cast( m_commandBuffer ), + static_cast( srcStageMask ), + static_cast( dstStageMask ), + static_cast( dependencyFlags ), + memoryBarrierCount, + reinterpret_cast( pMemoryBarriers ), + bufferMemoryBarrierCount, + reinterpret_cast( pBufferMemoryBarriers ), + imageMemoryBarrierCount, + reinterpret_cast( pImageMemoryBarriers ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPipelineBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier.html + template + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier( PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + DependencyFlags dependencyFlags, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPipelineBarrier && "Function requires " ); +# endif + + d.vkCmdPipelineBarrier( m_commandBuffer, + static_cast( srcStageMask ), + static_cast( dstStageMask ), + static_cast( dependencyFlags ), + memoryBarriers.size(), + reinterpret_cast( memoryBarriers.data() ), + bufferMemoryBarriers.size(), + reinterpret_cast( bufferMemoryBarriers.data() ), + imageMemoryBarriers.size(), + reinterpret_cast( imageMemoryBarriers.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQuery.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginQuery( QueryPool queryPool, uint32_t query, QueryControlFlags flags, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginQuery( + static_cast( m_commandBuffer ), static_cast( queryPool ), query, static_cast( flags ) ); + } + + // wrapper function for command vkCmdEndQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQuery.html + template + VULKAN_HPP_INLINE void CommandBuffer::endQuery( QueryPool queryPool, uint32_t query, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndQuery( static_cast( m_commandBuffer ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkCmdResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetQueryPool.html + template + VULKAN_HPP_INLINE void + CommandBuffer::resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResetQueryPool( static_cast( m_commandBuffer ), static_cast( queryPool ), firstQuery, queryCount ); + } + + // wrapper function for command vkCmdWriteTimestamp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp.html + template + VULKAN_HPP_INLINE void + CommandBuffer::writeTimestamp( PipelineStageFlagBits pipelineStage, QueryPool queryPool, uint32_t query, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteTimestamp( + static_cast( m_commandBuffer ), static_cast( pipelineStage ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkCmdCopyQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyQueryPoolResults.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyQueryPoolResults( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + Buffer dstBuffer, + DeviceSize dstOffset, + DeviceSize stride, + QueryResultFlags flags, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyQueryPoolResults( static_cast( m_commandBuffer ), + static_cast( queryPool ), + firstQuery, + queryCount, + static_cast( dstBuffer ), + static_cast( dstOffset ), + static_cast( stride ), + static_cast( flags ) ); + } + + // wrapper function for command vkCmdPushConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants( + PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void * pValues, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushConstants( static_cast( m_commandBuffer ), + static_cast( layout ), + static_cast( stageFlags ), + offset, + size, + pValues ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants( PipelineLayout layout, + ShaderStageFlags stageFlags, + uint32_t offset, + ArrayProxy const & values, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushConstants && "Function requires " ); +# endif + + d.vkCmdPushConstants( m_commandBuffer, + static_cast( layout ), + static_cast( stageFlags ), + offset, + values.size() * sizeof( ValuesType ), + reinterpret_cast( values.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass.html + template + VULKAN_HPP_INLINE void + CommandBuffer::beginRenderPass( const RenderPassBeginInfo * pRenderPassBegin, SubpassContents contents, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginRenderPass( static_cast( m_commandBuffer ), + reinterpret_cast( pRenderPassBegin ), + static_cast( contents ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass.html + template + VULKAN_HPP_INLINE void + CommandBuffer::beginRenderPass( const RenderPassBeginInfo & renderPassBegin, SubpassContents contents, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginRenderPass && "Function requires " ); +# endif + + d.vkCmdBeginRenderPass( m_commandBuffer, reinterpret_cast( &renderPassBegin ), static_cast( contents ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdNextSubpass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass.html + template + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass( SubpassContents contents, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdNextSubpass( static_cast( m_commandBuffer ), static_cast( contents ) ); + } + + // wrapper function for command vkCmdEndRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndRenderPass( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdExecuteCommands, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteCommands.html + template + VULKAN_HPP_INLINE void + CommandBuffer::executeCommands( uint32_t commandBufferCount, const CommandBuffer * pCommandBuffers, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdExecuteCommands( static_cast( m_commandBuffer ), commandBufferCount, reinterpret_cast( pCommandBuffers ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdExecuteCommands, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteCommands.html + template + VULKAN_HPP_INLINE void CommandBuffer::executeCommands( ArrayProxy const & commandBuffers, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdExecuteCommands && "Function requires " ); +# endif + + d.vkCmdExecuteCommands( m_commandBuffer, commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkEnumerateInstanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceVersion.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceVersion( uint32_t * pApiVersion, Dispatch const & d ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEnumerateInstanceVersion( pApiVersion ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateInstanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceVersion.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type enumerateInstanceVersion( Dispatch const & d ) + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumerateInstanceVersion && "Function requires " ); +# endif + + uint32_t apiVersion; + Result result = static_cast( d.vkEnumerateInstanceVersion( &apiVersion ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceVersion" ); + + return detail::createResultValueType( result, std::move( apiVersion ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindBufferMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindBufferMemory2( uint32_t bindInfoCount, + const BindBufferMemoryInfo * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBindBufferMemory2( static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindBufferMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindBufferMemory2( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindBufferMemory2 && "Function requires or " ); +# endif + + Result result = + static_cast( d.vkBindBufferMemory2( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindImageMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindImageMemory2( uint32_t bindInfoCount, + const BindImageMemoryInfo * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBindImageMemory2( static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindImageMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindImageMemory2( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindImageMemory2 && "Function requires or " ); +# endif + + Result result = + static_cast( d.vkBindImageMemory2( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeatures.html + template + VULKAN_HPP_INLINE void Device::getGroupPeerMemoryFeatures( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + PeerMemoryFeatureFlags * pPeerMemoryFeatures, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceGroupPeerMemoryFeatures( + static_cast( m_device ), heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( pPeerMemoryFeatures ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupPeerMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeatures.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PeerMemoryFeatureFlags Device::getGroupPeerMemoryFeatures( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceGroupPeerMemoryFeatures && + "Function requires or " ); +# endif + + PeerMemoryFeatureFlags peerMemoryFeatures; + d.vkGetDeviceGroupPeerMemoryFeatures( + m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( &peerMemoryFeatures ) ); + + return peerMemoryFeatures; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDeviceMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMask.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDeviceMask( uint32_t deviceMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDeviceMask( static_cast( m_commandBuffer ), deviceMask ); + } + + // wrapper function for command vkCmdDispatchBase, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBase.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchBase( uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchBase( static_cast( m_commandBuffer ), baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::enumeratePhysicalDeviceGroups( uint32_t * pPhysicalDeviceGroupCount, + PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEnumeratePhysicalDeviceGroups( static_cast( m_instance ), + pPhysicalDeviceGroupCount, + reinterpret_cast( pPhysicalDeviceGroupProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::enumeratePhysicalDeviceGroups( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDeviceGroups && + "Function requires or " ); +# endif + + std::vector physicalDeviceGroupProperties; + uint32_t physicalDeviceGroupCount; + Result result; + do + { + result = static_cast( d.vkEnumeratePhysicalDeviceGroups( m_instance, &physicalDeviceGroupCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + result = static_cast( d.vkEnumeratePhysicalDeviceGroups( + m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" ); + VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); + if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + } + return detail::createResultValueType( result, std::move( physicalDeviceGroupProperties ) ); + } + + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::enumeratePhysicalDeviceGroups( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDeviceGroups && + "Function requires or " ); +# endif + + std::vector physicalDeviceGroupProperties( physicalDeviceGroupPropertiesAllocator ); + uint32_t physicalDeviceGroupCount; + Result result; + do + { + result = static_cast( d.vkEnumeratePhysicalDeviceGroups( m_instance, &physicalDeviceGroupCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + result = static_cast( d.vkEnumeratePhysicalDeviceGroups( + m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" ); + VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); + if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + } + return detail::createResultValueType( result, std::move( physicalDeviceGroupProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_INLINE void Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageMemoryRequirements2 && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetImageMemoryRequirements2( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageMemoryRequirements2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetImageMemoryRequirements2( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetBufferMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferMemoryRequirements2 && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetBufferMemoryRequirements2( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferMemoryRequirements2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetBufferMemoryRequirements2( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + template + VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSparseMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( pInfo ), + pSparseMemoryRequirementCount, + reinterpret_cast( pSparseMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSparseMemoryRequirements2 && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + d.vkGetImageSparseMemoryRequirements2( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetImageSparseMemoryRequirements2( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSparseMemoryRequirements2 && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements( sparseImageMemoryRequirements2Allocator ); + uint32_t sparseMemoryRequirementCount; + d.vkGetImageSparseMemoryRequirements2( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetImageSparseMemoryRequirements2( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getFeatures2( PhysicalDeviceFeatures2 * pFeatures, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceFeatures2( static_cast( m_physicalDevice ), reinterpret_cast( pFeatures ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFeatures2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceFeatures2 PhysicalDevice::getFeatures2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFeatures2 && + "Function requires or " ); +# endif + + PhysicalDeviceFeatures2 features; + d.vkGetPhysicalDeviceFeatures2( m_physicalDevice, reinterpret_cast( &features ) ); + + return features; + } + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFeatures2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + PhysicalDeviceFeatures2 & features = structureChain.template get(); + d.vkGetPhysicalDeviceFeatures2( m_physicalDevice, reinterpret_cast( &features ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getProperties2( PhysicalDeviceProperties2 * pProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceProperties2( static_cast( m_physicalDevice ), reinterpret_cast( pProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceProperties2 PhysicalDevice::getProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceProperties2 && + "Function requires or " ); +# endif + + PhysicalDeviceProperties2 properties; + d.vkGetPhysicalDeviceProperties2( m_physicalDevice, reinterpret_cast( &properties ) ); + + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceProperties2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + PhysicalDeviceProperties2 & properties = structureChain.template get(); + d.vkGetPhysicalDeviceProperties2( m_physicalDevice, reinterpret_cast( &properties ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_INLINE void + PhysicalDevice::getFormatProperties2( Format format, FormatProperties2 * pFormatProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceFormatProperties2( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( pFormatProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE FormatProperties2 PhysicalDevice::getFormatProperties2( Format format, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFormatProperties2 && + "Function requires or " ); +# endif + + FormatProperties2 formatProperties; + d.vkGetPhysicalDeviceFormatProperties2( m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return formatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFormatProperties2( Format format, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFormatProperties2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + FormatProperties2 & formatProperties = structureChain.template get(); + d.vkGetPhysicalDeviceFormatProperties2( m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + ImageFormatProperties2 * pImageFormatProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( pImageFormatInfo ), + reinterpret_cast( pImageFormatProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceImageFormatProperties2 && + "Function requires or " ); +# endif + + ImageFormatProperties2 imageFormatProperties; + Result result = + static_cast( d.vkGetPhysicalDeviceImageFormatProperties2( m_physicalDevice, + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); + + return detail::createResultValueType( result, std::move( imageFormatProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceImageFormatProperties2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); + Result result = + static_cast( d.vkGetPhysicalDeviceImageFormatProperties2( m_physicalDevice, + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties2( uint32_t * pQueueFamilyPropertyCount, + QueueFamilyProperties2 * pQueueFamilyProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceQueueFamilyProperties2( + static_cast( m_physicalDevice ), pQueueFamilyPropertyCount, reinterpret_cast( pQueueFamilyProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2 && + "Function requires or " ); +# endif + + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + d.vkGetPhysicalDeviceQueueFamilyProperties2( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2 && + "Function requires or " ); +# endif + + std::vector queueFamilyProperties( queueFamilyProperties2Allocator ); + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + d.vkGetPhysicalDeviceQueueFamilyProperties2( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2 && + "Function requires or " ); +# endif + + std::vector structureChains; + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + structureChains.resize( queueFamilyPropertyCount ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; + } + d.vkGetPhysicalDeviceQueueFamilyProperties2( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + structureChains.resize( queueFamilyPropertyCount ); + } + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + structureChains[i].template get() = queueFamilyProperties[i]; + } + return structureChains; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2 && + "Function requires or " ); +# endif + + std::vector structureChains( structureChainAllocator ); + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + structureChains.resize( queueFamilyPropertyCount ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; + } + d.vkGetPhysicalDeviceQueueFamilyProperties2( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + structureChains.resize( queueFamilyPropertyCount ); + } + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + structureChains[i].template get() = queueFamilyProperties[i]; + } + return structureChains; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties2( PhysicalDeviceMemoryProperties2 * pMemoryProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceMemoryProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( pMemoryProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceMemoryProperties2 PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceMemoryProperties2 && + "Function requires or " ); +# endif + + PhysicalDeviceMemoryProperties2 memoryProperties; + d.vkGetPhysicalDeviceMemoryProperties2( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); + + return memoryProperties; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceMemoryProperties2 && + "Function requires or " ); +# endif + + StructureChain structureChain; + PhysicalDeviceMemoryProperties2 & memoryProperties = structureChain.template get(); + d.vkGetPhysicalDeviceMemoryProperties2( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, + uint32_t * pPropertyCount, + SparseImageFormatProperties2 * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceSparseImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( pFormatInfo ), + pPropertyCount, + reinterpret_cast( pProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSparseImageFormatProperties2 && + "Function requires or " ); +# endif + + std::vector properties; + uint32_t propertyCount; + d.vkGetPhysicalDeviceSparseImageFormatProperties2( + m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); + properties.resize( propertyCount ); + d.vkGetPhysicalDeviceSparseImageFormatProperties2( m_physicalDevice, + reinterpret_cast( &formatInfo ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, + SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSparseImageFormatProperties2 && + "Function requires or " ); +# endif + + std::vector properties( sparseImageFormatProperties2Allocator ); + uint32_t propertyCount; + d.vkGetPhysicalDeviceSparseImageFormatProperties2( + m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); + properties.resize( propertyCount ); + d.vkGetPhysicalDeviceSparseImageFormatProperties2( m_physicalDevice, + reinterpret_cast( &formatInfo ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkTrimCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPool.html + template + VULKAN_HPP_INLINE void Device::trimCommandPool( CommandPool commandPool, CommandPoolTrimFlags flags, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkTrimCommandPool( static_cast( m_device ), static_cast( commandPool ), static_cast( flags ) ); + } + + // wrapper function for command vkGetDeviceQueue2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue2.html + template + VULKAN_HPP_INLINE void Device::getQueue2( const DeviceQueueInfo2 * pQueueInfo, Queue * pQueue, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceQueue2( static_cast( m_device ), reinterpret_cast( pQueueInfo ), reinterpret_cast( pQueue ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceQueue2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Queue Device::getQueue2( const DeviceQueueInfo2 & queueInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceQueue2 && "Function requires " ); +# endif + + Queue queue; + d.vkGetDeviceQueue2( m_device, reinterpret_cast( &queueInfo ), reinterpret_cast( &queue ) ); + + return queue; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSamplerYcbcrConversion( const SamplerYcbcrConversionCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + SamplerYcbcrConversion * pYcbcrConversion, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSamplerYcbcrConversion( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pYcbcrConversion ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createSamplerYcbcrConversion( + const SamplerYcbcrConversionCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSamplerYcbcrConversion && + "Function requires or " ); +# endif + + SamplerYcbcrConversion ycbcrConversion; + Result result = static_cast( d.vkCreateSamplerYcbcrConversion( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &ycbcrConversion ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversion" ); + + return detail::createResultValueType( result, std::move( ycbcrConversion ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSamplerYcbcrConversionUnique( const SamplerYcbcrConversionCreateInfo & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSamplerYcbcrConversion && + "Function requires or " ); +# endif + + SamplerYcbcrConversion ycbcrConversion; + Result result = static_cast( d.vkCreateSamplerYcbcrConversion( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &ycbcrConversion ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversionUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( ycbcrConversion, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversion( SamplerYcbcrConversion ycbcrConversion, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySamplerYcbcrConversion( static_cast( m_device ), + static_cast( ycbcrConversion ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversion( SamplerYcbcrConversion ycbcrConversion, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySamplerYcbcrConversion && + "Function requires or " ); +# endif + + d.vkDestroySamplerYcbcrConversion( + m_device, static_cast( ycbcrConversion ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + VULKAN_HPP_INLINE void + Device::destroy( SamplerYcbcrConversion ycbcrConversion, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySamplerYcbcrConversion( static_cast( m_device ), + static_cast( ycbcrConversion ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + VULKAN_HPP_INLINE void + Device::destroy( SamplerYcbcrConversion ycbcrConversion, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySamplerYcbcrConversion && + "Function requires or " ); +# endif + + d.vkDestroySamplerYcbcrConversion( + m_device, static_cast( ycbcrConversion ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDescriptorUpdateTemplate( const DescriptorUpdateTemplateCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorUpdateTemplate * pDescriptorUpdateTemplate, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDescriptorUpdateTemplate( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pDescriptorUpdateTemplate ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createDescriptorUpdateTemplate( + const DescriptorUpdateTemplateCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorUpdateTemplate && + "Function requires or " ); +# endif + + DescriptorUpdateTemplate descriptorUpdateTemplate; + Result result = static_cast( d.vkCreateDescriptorUpdateTemplate( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorUpdateTemplate ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplate" ); + + return detail::createResultValueType( result, std::move( descriptorUpdateTemplate ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createDescriptorUpdateTemplateUnique( const DescriptorUpdateTemplateCreateInfo & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorUpdateTemplate && + "Function requires or " ); +# endif + + DescriptorUpdateTemplate descriptorUpdateTemplate; + Result result = static_cast( d.vkCreateDescriptorUpdateTemplate( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorUpdateTemplate ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplateUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( descriptorUpdateTemplate, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorUpdateTemplate( static_cast( m_device ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorUpdateTemplate && + "Function requires or " ); +# endif + + d.vkDestroyDescriptorUpdateTemplate( + m_device, static_cast( descriptorUpdateTemplate ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + VULKAN_HPP_INLINE void + Device::destroy( DescriptorUpdateTemplate descriptorUpdateTemplate, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorUpdateTemplate( static_cast( m_device ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + VULKAN_HPP_INLINE void Device::destroy( DescriptorUpdateTemplate descriptorUpdateTemplate, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorUpdateTemplate && + "Function requires or " ); +# endif + + d.vkDestroyDescriptorUpdateTemplate( + m_device, static_cast( descriptorUpdateTemplate ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplate.html + template + VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplate( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + const void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUpdateDescriptorSetWithTemplate( static_cast( m_device ), + static_cast( descriptorSet ), + static_cast( descriptorUpdateTemplate ), + pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplate.html + template + VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplate( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + DataType const & data, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUpdateDescriptorSetWithTemplate && + "Function requires or " ); +# endif + + d.vkUpdateDescriptorSetWithTemplate( m_device, + static_cast( descriptorSet ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( &data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalBufferProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalBufferProperties( const PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, + ExternalBufferProperties * pExternalBufferProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalBufferProperties( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalBufferInfo ), + reinterpret_cast( pExternalBufferProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalBufferProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalBufferProperties + PhysicalDevice::getExternalBufferProperties( const PhysicalDeviceExternalBufferInfo & externalBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalBufferProperties && + "Function requires or " ); +# endif + + ExternalBufferProperties externalBufferProperties; + d.vkGetPhysicalDeviceExternalBufferProperties( m_physicalDevice, + reinterpret_cast( &externalBufferInfo ), + reinterpret_cast( &externalBufferProperties ) ); + + return externalBufferProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalFenceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFenceProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalFenceProperties( const PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, + ExternalFenceProperties * pExternalFenceProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalFenceProperties( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalFenceInfo ), + reinterpret_cast( pExternalFenceProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalFenceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFenceProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalFenceProperties + PhysicalDevice::getExternalFenceProperties( const PhysicalDeviceExternalFenceInfo & externalFenceInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalFenceProperties && + "Function requires or " ); +# endif + + ExternalFenceProperties externalFenceProperties; + d.vkGetPhysicalDeviceExternalFenceProperties( m_physicalDevice, + reinterpret_cast( &externalFenceInfo ), + reinterpret_cast( &externalFenceProperties ) ); + + return externalFenceProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphoreProperties.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalSemaphoreProperties( const PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, + ExternalSemaphoreProperties * pExternalSemaphoreProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalSemaphoreProperties( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalSemaphoreInfo ), + reinterpret_cast( pExternalSemaphoreProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphoreProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalSemaphoreProperties PhysicalDevice::getExternalSemaphoreProperties( + const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalSemaphoreProperties && + "Function requires or " ); +# endif + + ExternalSemaphoreProperties externalSemaphoreProperties; + d.vkGetPhysicalDeviceExternalSemaphoreProperties( m_physicalDevice, + reinterpret_cast( &externalSemaphoreInfo ), + reinterpret_cast( &externalSemaphoreProperties ) ); + + return externalSemaphoreProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo * pCreateInfo, + DescriptorSetLayoutSupport * pSupport, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorSetLayoutSupport( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pSupport ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DescriptorSetLayoutSupport Device::getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutSupport && "Function requires or " ); +# endif + + DescriptorSetLayoutSupport support; + d.vkGetDescriptorSetLayoutSupport( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); + + return support; + } + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutSupport && "Function requires or " ); +# endif + + StructureChain structureChain; + DescriptorSetLayoutSupport & support = structureChain.template get(); + d.vkGetDescriptorSetLayoutSupport( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkCmdDrawIndirectCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCount.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCount( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndirectCount( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirectCount, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCount.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCount( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndexedIndirectCount( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRenderPass2( const RenderPassCreateInfo2 * pCreateInfo, + const AllocationCallbacks * pAllocator, + RenderPass * pRenderPass, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateRenderPass2( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pRenderPass ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createRenderPass2( const RenderPassCreateInfo2 & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRenderPass2 && "Function requires or " ); +# endif + + RenderPass renderPass; + Result result = static_cast( d.vkCreateRenderPass2( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2" ); + + return detail::createResultValueType( result, std::move( renderPass ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createRenderPass2Unique( const RenderPassCreateInfo2 & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRenderPass2 && "Function requires or " ); +# endif + + RenderPass renderPass; + Result result = static_cast( d.vkCreateRenderPass2( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2Unique" ); + + return detail::createResultValueType( result, + UniqueHandle( renderPass, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const RenderPassBeginInfo * pRenderPassBegin, + const SubpassBeginInfo * pSubpassBeginInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginRenderPass2( static_cast( m_commandBuffer ), + reinterpret_cast( pRenderPassBegin ), + reinterpret_cast( pSubpassBeginInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const RenderPassBeginInfo & renderPassBegin, + const SubpassBeginInfo & subpassBeginInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginRenderPass2 && "Function requires or " ); +# endif + + d.vkCmdBeginRenderPass2( + m_commandBuffer, reinterpret_cast( &renderPassBegin ), reinterpret_cast( &subpassBeginInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdNextSubpass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2.html + template + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const SubpassBeginInfo * pSubpassBeginInfo, + const SubpassEndInfo * pSubpassEndInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdNextSubpass2( static_cast( m_commandBuffer ), + reinterpret_cast( pSubpassBeginInfo ), + reinterpret_cast( pSubpassEndInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdNextSubpass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2.html + template + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const SubpassBeginInfo & subpassBeginInfo, + const SubpassEndInfo & subpassEndInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdNextSubpass2 && "Function requires or " ); +# endif + + d.vkCmdNextSubpass2( + m_commandBuffer, reinterpret_cast( &subpassBeginInfo ), reinterpret_cast( &subpassEndInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const SubpassEndInfo * pSubpassEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndRenderPass2( static_cast( m_commandBuffer ), reinterpret_cast( pSubpassEndInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const SubpassEndInfo & subpassEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEndRenderPass2 && "Function requires or " ); +# endif + + d.vkCmdEndRenderPass2( m_commandBuffer, reinterpret_cast( &subpassEndInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPool.html + template + VULKAN_HPP_INLINE void Device::resetQueryPool( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkResetQueryPool( static_cast( m_device ), static_cast( queryPool ), firstQuery, queryCount ); + } + + // wrapper function for command vkGetSemaphoreCounterValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValue.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreCounterValue( Semaphore semaphore, + uint64_t * pValue, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSemaphoreCounterValue( static_cast( m_device ), static_cast( semaphore ), pValue ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreCounterValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValue.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getSemaphoreCounterValue( Semaphore semaphore, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSemaphoreCounterValue && "Function requires or " ); +# endif + + uint64_t value; + Result result = static_cast( d.vkGetSemaphoreCounterValue( m_device, static_cast( semaphore ), &value ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreCounterValue" ); + + return detail::createResultValueType( result, std::move( value ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWaitSemaphores, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphores.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphores( const SemaphoreWaitInfo * pWaitInfo, + uint64_t timeout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkWaitSemaphores( static_cast( m_device ), reinterpret_cast( pWaitInfo ), timeout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitSemaphores, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphores.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphores( const SemaphoreWaitInfo & waitInfo, uint64_t timeout, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWaitSemaphores && "Function requires or " ); +# endif + + Result result = static_cast( d.vkWaitSemaphores( m_device, reinterpret_cast( &waitInfo ), timeout ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphores", { Result::eSuccess, Result::eTimeout } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSignalSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphore.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::signalSemaphore( const SemaphoreSignalInfo * pSignalInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkSignalSemaphore( static_cast( m_device ), reinterpret_cast( pSignalInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSignalSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphore.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::signalSemaphore( const SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSignalSemaphore && "Function requires or " ); +# endif + + Result result = static_cast( d.vkSignalSemaphore( m_device, reinterpret_cast( &signalInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphore" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferDeviceAddress, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddress.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddress( const BufferDeviceAddressInfo * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetBufferDeviceAddress( static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferDeviceAddress, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddress.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddress( const BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferDeviceAddress && + "Function requires or or " ); +# endif + + VkDeviceAddress result = d.vkGetBufferDeviceAddress( m_device, reinterpret_cast( &info ) ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddress.html + template + VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetBufferOpaqueCaptureAddress( static_cast( m_device ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddress.html + template + VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferOpaqueCaptureAddress && + "Function requires or " ); +# endif + + uint64_t result = d.vkGetBufferOpaqueCaptureAddress( m_device, reinterpret_cast( &info ) ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html + template + VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetDeviceMemoryOpaqueCaptureAddress( static_cast( m_device ), + reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html + template + VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceMemoryOpaqueCaptureAddress && + "Function requires or " ); +# endif + + uint64_t result = d.vkGetDeviceMemoryOpaqueCaptureAddress( m_device, reinterpret_cast( &info ) ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getToolProperties( uint32_t * pToolCount, + PhysicalDeviceToolProperties * pToolProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceToolProperties( + static_cast( m_physicalDevice ), pToolCount, reinterpret_cast( pToolProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getToolProperties( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceToolProperties && + "Function requires or " ); +# endif + + std::vector toolProperties; + uint32_t toolCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && toolCount ) + { + toolProperties.resize( toolCount ); + result = static_cast( + d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" ); + VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); + if ( toolCount < toolProperties.size() ) + { + toolProperties.resize( toolCount ); + } + return detail::createResultValueType( result, std::move( toolProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getToolProperties( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceToolProperties && + "Function requires or " ); +# endif + + std::vector toolProperties( physicalDeviceToolPropertiesAllocator ); + uint32_t toolCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && toolCount ) + { + toolProperties.resize( toolCount ); + result = static_cast( + d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" ); + VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); + if ( toolCount < toolProperties.size() ) + { + toolProperties.resize( toolCount ); + } + return detail::createResultValueType( result, std::move( toolProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPrivateDataSlot( const PrivateDataSlotCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PrivateDataSlot * pPrivateDataSlot, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreatePrivateDataSlot( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPrivateDataSlot ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createPrivateDataSlot( const PrivateDataSlotCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePrivateDataSlot && "Function requires or " ); +# endif + + PrivateDataSlot privateDataSlot; + Result result = static_cast( d.vkCreatePrivateDataSlot( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &privateDataSlot ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlot" ); + + return detail::createResultValueType( result, std::move( privateDataSlot ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createPrivateDataSlotUnique( const PrivateDataSlotCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePrivateDataSlot && "Function requires or " ); +# endif + + PrivateDataSlot privateDataSlot; + Result result = static_cast( d.vkCreatePrivateDataSlot( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &privateDataSlot ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( privateDataSlot, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + VULKAN_HPP_INLINE void + Device::destroyPrivateDataSlot( PrivateDataSlot privateDataSlot, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPrivateDataSlot( + static_cast( m_device ), static_cast( privateDataSlot ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + VULKAN_HPP_INLINE void Device::destroyPrivateDataSlot( PrivateDataSlot privateDataSlot, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPrivateDataSlot && "Function requires or " ); +# endif + + d.vkDestroyPrivateDataSlot( + m_device, static_cast( privateDataSlot ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + VULKAN_HPP_INLINE void + Device::destroy( PrivateDataSlot privateDataSlot, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPrivateDataSlot( + static_cast( m_device ), static_cast( privateDataSlot ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + VULKAN_HPP_INLINE void + Device::destroy( PrivateDataSlot privateDataSlot, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPrivateDataSlot && "Function requires or " ); +# endif + + d.vkDestroyPrivateDataSlot( + m_device, static_cast( privateDataSlot ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateData.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setPrivateData( + ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, uint64_t data, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkSetPrivateData( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ) ); + } +#else + // wrapper function for command vkSetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateData.html + template + VULKAN_HPP_INLINE typename ResultValueType::type + Device::setPrivateData( ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, uint64_t data, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetPrivateData && "Function requires or " ); +# endif + + Result result = static_cast( + d.vkSetPrivateData( m_device, static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateData" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateData.html + template + VULKAN_HPP_INLINE void Device::getPrivateData( + ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, uint64_t * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPrivateData( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateData.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getPrivateData( ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPrivateData && "Function requires or " ); +# endif + + uint64_t data; + d.vkGetPrivateData( m_device, static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), &data ); + + return data; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2.html + template + VULKAN_HPP_INLINE void CommandBuffer::setEvent2( Event event, const DependencyInfo * pDependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetEvent2( + static_cast( m_commandBuffer ), static_cast( event ), reinterpret_cast( pDependencyInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2.html + template + VULKAN_HPP_INLINE void CommandBuffer::setEvent2( Event event, const DependencyInfo & dependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetEvent2 && "Function requires or " ); +# endif + + d.vkCmdSetEvent2( m_commandBuffer, static_cast( event ), reinterpret_cast( &dependencyInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2.html + template + VULKAN_HPP_INLINE void CommandBuffer::resetEvent2( Event event, PipelineStageFlags2 stageMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResetEvent2( static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdWaitEvents2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2.html + template + VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( uint32_t eventCount, + const Event * pEvents, + const DependencyInfo * pDependencyInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWaitEvents2( static_cast( m_commandBuffer ), + eventCount, + reinterpret_cast( pEvents ), + reinterpret_cast( pDependencyInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWaitEvents2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2.html + template + VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( ArrayProxy const & events, + ArrayProxy const & dependencyInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdWaitEvents2 && "Function requires or " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() ); +# else + if ( events.size() != dependencyInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2: events.size() != dependencyInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdWaitEvents2( m_commandBuffer, + events.size(), + reinterpret_cast( events.data() ), + reinterpret_cast( dependencyInfos.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPipelineBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const DependencyInfo * pDependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPipelineBarrier2( static_cast( m_commandBuffer ), reinterpret_cast( pDependencyInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPipelineBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const DependencyInfo & dependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPipelineBarrier2 && "Function requires or " ); +# endif + + d.vkCmdPipelineBarrier2( m_commandBuffer, reinterpret_cast( &dependencyInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteTimestamp2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2.html + template + VULKAN_HPP_INLINE void + CommandBuffer::writeTimestamp2( PipelineStageFlags2 stage, QueryPool queryPool, uint32_t query, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteTimestamp2( + static_cast( m_commandBuffer ), static_cast( stage ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkQueueSubmit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Queue::submit2( uint32_t submitCount, const SubmitInfo2 * pSubmits, Fence fence, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkQueueSubmit2( static_cast( m_queue ), submitCount, reinterpret_cast( pSubmits ), static_cast( fence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSubmit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Queue::submit2( ArrayProxy const & submits, Fence fence, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueSubmit2 && "Function requires or " ); +# endif + + Result result = static_cast( + d.vkQueueSubmit2( m_queue, submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const CopyBufferInfo2 * pCopyBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyBuffer2( static_cast( m_commandBuffer ), reinterpret_cast( pCopyBufferInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const CopyBufferInfo2 & copyBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyBuffer2 && "Function requires or " ); +# endif + + d.vkCmdCopyBuffer2( m_commandBuffer, reinterpret_cast( ©BufferInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const CopyImageInfo2 * pCopyImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyImage2( static_cast( m_commandBuffer ), reinterpret_cast( pCopyImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const CopyImageInfo2 & copyImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyImage2 && "Function requires or " ); +# endif + + d.vkCmdCopyImage2( m_commandBuffer, reinterpret_cast( ©ImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBufferToImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2( const CopyBufferToImageInfo2 * pCopyBufferToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyBufferToImage2( static_cast( m_commandBuffer ), reinterpret_cast( pCopyBufferToImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBufferToImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2( const CopyBufferToImageInfo2 & copyBufferToImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyBufferToImage2 && "Function requires or " ); +# endif + + d.vkCmdCopyBufferToImage2( m_commandBuffer, reinterpret_cast( ©BufferToImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImageToBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2( const CopyImageToBufferInfo2 * pCopyImageToBufferInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyImageToBuffer2( static_cast( m_commandBuffer ), reinterpret_cast( pCopyImageToBufferInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImageToBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2( const CopyImageToBufferInfo2 & copyImageToBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyImageToBuffer2 && "Function requires or " ); +# endif + + d.vkCmdCopyImageToBuffer2( m_commandBuffer, reinterpret_cast( ©ImageToBufferInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBlitImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const BlitImageInfo2 * pBlitImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBlitImage2( static_cast( m_commandBuffer ), reinterpret_cast( pBlitImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBlitImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const BlitImageInfo2 & blitImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBlitImage2 && "Function requires or " ); +# endif + + d.vkCmdBlitImage2( m_commandBuffer, reinterpret_cast( &blitImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResolveImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const ResolveImageInfo2 * pResolveImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResolveImage2( static_cast( m_commandBuffer ), reinterpret_cast( pResolveImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdResolveImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2.html + template + VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const ResolveImageInfo2 & resolveImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdResolveImage2 && "Function requires or " ); +# endif + + d.vkCmdResolveImage2( m_commandBuffer, reinterpret_cast( &resolveImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRendering.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const RenderingInfo * pRenderingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginRendering( static_cast( m_commandBuffer ), reinterpret_cast( pRenderingInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRendering.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const RenderingInfo & renderingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginRendering && "Function requires or " ); +# endif + + d.vkCmdBeginRendering( m_commandBuffer, reinterpret_cast( &renderingInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRendering( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndRendering( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdSetCullMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullMode.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCullMode( CullModeFlags cullMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCullMode( static_cast( m_commandBuffer ), static_cast( cullMode ) ); + } + + // wrapper function for command vkCmdSetFrontFace, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFace.html + template + VULKAN_HPP_INLINE void CommandBuffer::setFrontFace( FrontFace frontFace, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetFrontFace( static_cast( m_commandBuffer ), static_cast( frontFace ) ); + } + + // wrapper function for command vkCmdSetPrimitiveTopology, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopology.html + template + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopology( PrimitiveTopology primitiveTopology, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetPrimitiveTopology( static_cast( m_commandBuffer ), static_cast( primitiveTopology ) ); + } + + // wrapper function for command vkCmdSetViewportWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCount.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setViewportWithCount( uint32_t viewportCount, const Viewport * pViewports, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewportWithCount( static_cast( m_commandBuffer ), viewportCount, reinterpret_cast( pViewports ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCount.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount( ArrayProxy const & viewports, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetViewportWithCount && + "Function requires or or " ); +# endif + + d.vkCmdSetViewportWithCount( m_commandBuffer, viewports.size(), reinterpret_cast( viewports.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetScissorWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCount.html + template + VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount( uint32_t scissorCount, const Rect2D * pScissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetScissorWithCount( static_cast( m_commandBuffer ), scissorCount, reinterpret_cast( pScissors ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetScissorWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCount.html + template + VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount( ArrayProxy const & scissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetScissorWithCount && + "Function requires or or " ); +# endif + + d.vkCmdSetScissorWithCount( m_commandBuffer, scissors.size(), reinterpret_cast( scissors.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindVertexBuffers2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + const DeviceSize * pSizes, + const DeviceSize * pStrides, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindVertexBuffers2( static_cast( m_commandBuffer ), + firstBinding, + bindingCount, + reinterpret_cast( pBuffers ), + reinterpret_cast( pOffsets ), + reinterpret_cast( pSizes ), + reinterpret_cast( pStrides ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindVertexBuffers2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes, + ArrayProxy const & strides, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindVertexBuffers2 && + "Function requires or or " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); + VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); + VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != offsets.size()" ); + } + if ( !sizes.empty() && buffers.size() != sizes.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != sizes.size()" ); + } + if ( !strides.empty() && buffers.size() != strides.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != strides.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBindVertexBuffers2( m_commandBuffer, + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ), + reinterpret_cast( sizes.data() ), + reinterpret_cast( strides.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDepthTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnable( Bool32 depthTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthTestEnable( static_cast( m_commandBuffer ), static_cast( depthTestEnable ) ); + } + + // wrapper function for command vkCmdSetDepthWriteEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnable( Bool32 depthWriteEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthWriteEnable( static_cast( m_commandBuffer ), static_cast( depthWriteEnable ) ); + } + + // wrapper function for command vkCmdSetDepthCompareOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOp.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOp( CompareOp depthCompareOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthCompareOp( static_cast( m_commandBuffer ), static_cast( depthCompareOp ) ); + } + + // wrapper function for command vkCmdSetDepthBoundsTestEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBoundsTestEnable( static_cast( m_commandBuffer ), static_cast( depthBoundsTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnable( Bool32 stencilTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilTestEnable( static_cast( m_commandBuffer ), static_cast( stencilTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOp.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilOp( + StencilFaceFlags faceMask, StencilOp failOp, StencilOp passOp, StencilOp depthFailOp, CompareOp compareOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilOp( static_cast( m_commandBuffer ), + static_cast( faceMask ), + static_cast( failOp ), + static_cast( passOp ), + static_cast( depthFailOp ), + static_cast( compareOp ) ); + } + + // wrapper function for command vkCmdSetRasterizerDiscardEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRasterizerDiscardEnable( static_cast( m_commandBuffer ), static_cast( rasterizerDiscardEnable ) ); + } + + // wrapper function for command vkCmdSetDepthBiasEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnable( Bool32 depthBiasEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBiasEnable( static_cast( m_commandBuffer ), static_cast( depthBiasEnable ) ); + } + + // wrapper function for command vkCmdSetPrimitiveRestartEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnable.html + template + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnable( Bool32 primitiveRestartEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetPrimitiveRestartEnable( static_cast( m_commandBuffer ), static_cast( primitiveRestartEnable ) ); + } + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements( const DeviceBufferMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceBufferMemoryRequirements( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getBufferMemoryRequirements( const DeviceBufferMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceBufferMemoryRequirements && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetDeviceBufferMemoryRequirements( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getBufferMemoryRequirements( const DeviceBufferMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceBufferMemoryRequirements && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetDeviceBufferMemoryRequirements( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_INLINE void Device::getImageMemoryRequirements( const DeviceImageMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceImageMemoryRequirements( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getImageMemoryRequirements( const DeviceImageMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageMemoryRequirements && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetDeviceImageMemoryRequirements( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageMemoryRequirements( const DeviceImageMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageMemoryRequirements && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetDeviceImageMemoryRequirements( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + template + VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements( const DeviceImageMemoryRequirements * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceImageSparseMemoryRequirements( static_cast( m_device ), + reinterpret_cast( pInfo ), + pSparseMemoryRequirementCount, + reinterpret_cast( pSparseMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements( const DeviceImageMemoryRequirements & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSparseMemoryRequirements && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + d.vkGetDeviceImageSparseMemoryRequirements( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetDeviceImageSparseMemoryRequirements( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements( const DeviceImageMemoryRequirements & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSparseMemoryRequirements && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements( sparseImageMemoryRequirements2Allocator ); + uint32_t sparseMemoryRequirementCount; + d.vkGetDeviceImageSparseMemoryRequirements( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetDeviceImageSparseMemoryRequirements( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkCmdSetLineStipple, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStipple.html + template + VULKAN_HPP_INLINE void CommandBuffer::setLineStipple( uint32_t lineStippleFactor, uint16_t lineStipplePattern, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLineStipple( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); + } + + // wrapper function for command vkMapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mapMemory2( const MemoryMapInfo * pMemoryMapInfo, + void ** ppData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkMapMemory2( static_cast( m_device ), reinterpret_cast( pMemoryMapInfo ), ppData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::mapMemory2( const MemoryMapInfo & memoryMapInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkMapMemory2 && "Function requires or " ); +# endif + + void * pData; + Result result = static_cast( d.vkMapMemory2( m_device, reinterpret_cast( &memoryMapInfo ), &pData ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mapMemory2" ); + + return detail::createResultValueType( result, std::move( pData ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUnmapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::unmapMemory2( const MemoryUnmapInfo * pMemoryUnmapInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkUnmapMemory2( static_cast( m_device ), reinterpret_cast( pMemoryUnmapInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUnmapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2.html + template + VULKAN_HPP_INLINE typename ResultValueType::type Device::unmapMemory2( const MemoryUnmapInfo & memoryUnmapInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUnmapMemory2 && "Function requires or " ); +# endif + + Result result = static_cast( d.vkUnmapMemory2( m_device, reinterpret_cast( &memoryUnmapInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::unmapMemory2" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindIndexBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2.html + template + VULKAN_HPP_INLINE void + CommandBuffer::bindIndexBuffer2( Buffer buffer, DeviceSize offset, DeviceSize size, IndexType indexType, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindIndexBuffer2( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( size ), + static_cast( indexType ) ); + } + + // wrapper function for command vkGetRenderingAreaGranularity, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularity.html + template + VULKAN_HPP_INLINE void + Device::getRenderingAreaGranularity( const RenderingAreaInfo * pRenderingAreaInfo, Extent2D * pGranularity, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetRenderingAreaGranularity( + static_cast( m_device ), reinterpret_cast( pRenderingAreaInfo ), reinterpret_cast( pGranularity ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRenderingAreaGranularity, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularity.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Extent2D Device::getRenderingAreaGranularity( const RenderingAreaInfo & renderingAreaInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRenderingAreaGranularity && "Function requires or " ); +# endif + + Extent2D granularity; + d.vkGetRenderingAreaGranularity( + m_device, reinterpret_cast( &renderingAreaInfo ), reinterpret_cast( &granularity ) ); + + return granularity; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_INLINE void + Device::getImageSubresourceLayout( const DeviceImageSubresourceInfo * pInfo, SubresourceLayout2 * pLayout, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceImageSubresourceLayout( + static_cast( m_device ), reinterpret_cast( pInfo ), reinterpret_cast( pLayout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE SubresourceLayout2 Device::getImageSubresourceLayout( const DeviceImageSubresourceInfo & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSubresourceLayout && + "Function requires or " ); +# endif + + SubresourceLayout2 layout; + d.vkGetDeviceImageSubresourceLayout( + m_device, reinterpret_cast( &info ), reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageSubresourceLayout( const DeviceImageSubresourceInfo & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSubresourceLayout && + "Function requires or " ); +# endif + + StructureChain structureChain; + SubresourceLayout2 & layout = structureChain.template get(); + d.vkGetDeviceImageSubresourceLayout( + m_device, reinterpret_cast( &info ), reinterpret_cast( &layout ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_INLINE void Device::getImageSubresourceLayout2( Image image, + const ImageSubresource2 * pSubresource, + SubresourceLayout2 * pLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSubresourceLayout2( static_cast( m_device ), + static_cast( image ), + reinterpret_cast( pSubresource ), + reinterpret_cast( pLayout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE SubresourceLayout2 Device::getImageSubresourceLayout2( Image image, + const ImageSubresource2 & subresource, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkGetImageSubresourceLayout2 && + "Function requires or or or " ); +# endif + + SubresourceLayout2 layout; + d.vkGetImageSubresourceLayout2( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetImageSubresourceLayout2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageSubresourceLayout2( Image image, const ImageSubresource2 & subresource, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkGetImageSubresourceLayout2 && + "Function requires or or or " ); +# endif + + StructureChain structureChain; + SubresourceLayout2 & layout = structureChain.template get(); + d.vkGetImageSubresourceLayout2( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSet( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const WriteDescriptorSet * pDescriptorWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSet( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + set, + descriptorWriteCount, + reinterpret_cast( pDescriptorWrites ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSet( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushDescriptorSet && "Function requires or " ); +# endif + + d.vkCmdPushDescriptorSet( m_commandBuffer, + static_cast( pipelineBindPoint ), + static_cast( layout ), + set, + descriptorWrites.size(), + reinterpret_cast( descriptorWrites.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate( + DescriptorUpdateTemplate descriptorUpdateTemplate, PipelineLayout layout, uint32_t set, const void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSetWithTemplate( static_cast( m_commandBuffer ), + static_cast( descriptorUpdateTemplate ), + static_cast( layout ), + set, + pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate, + PipelineLayout layout, + uint32_t set, + DataType const & data, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkCmdPushDescriptorSetWithTemplate && + "Function requires or or " ); +# endif + + d.vkCmdPushDescriptorSetWithTemplate( m_commandBuffer, + static_cast( descriptorUpdateTemplate ), + static_cast( layout ), + set, + reinterpret_cast( &data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRenderingAttachmentLocations, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocations.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingAttachmentLocations( const RenderingAttachmentLocationInfo * pLocationInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRenderingAttachmentLocations( static_cast( m_commandBuffer ), + reinterpret_cast( pLocationInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingAttachmentLocations, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocations.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingAttachmentLocations( const RenderingAttachmentLocationInfo & locationInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetRenderingAttachmentLocations && + "Function requires or " ); +# endif + + d.vkCmdSetRenderingAttachmentLocations( m_commandBuffer, reinterpret_cast( &locationInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndices, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndices.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingInputAttachmentIndices( const RenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRenderingInputAttachmentIndices( static_cast( m_commandBuffer ), + reinterpret_cast( pInputAttachmentIndexInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingInputAttachmentIndices, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndices.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingInputAttachmentIndices( const RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetRenderingInputAttachmentIndices && + "Function requires or " ); +# endif + + d.vkCmdSetRenderingInputAttachmentIndices( m_commandBuffer, reinterpret_cast( &inputAttachmentIndexInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorSets2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets2( const BindDescriptorSetsInfo * pBindDescriptorSetsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindDescriptorSets2( static_cast( m_commandBuffer ), + reinterpret_cast( pBindDescriptorSetsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorSets2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets2( const BindDescriptorSetsInfo & bindDescriptorSetsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindDescriptorSets2 && "Function requires or " ); +# endif + + d.vkCmdBindDescriptorSets2( m_commandBuffer, reinterpret_cast( &bindDescriptorSetsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushConstants2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants2( const PushConstantsInfo * pPushConstantsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushConstants2( static_cast( m_commandBuffer ), reinterpret_cast( pPushConstantsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushConstants2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants2( const PushConstantsInfo & pushConstantsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushConstants2 && "Function requires or " ); +# endif + + d.vkCmdPushConstants2( m_commandBuffer, reinterpret_cast( &pushConstantsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSet2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSet2( const PushDescriptorSetInfo * pPushDescriptorSetInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSet2( static_cast( m_commandBuffer ), reinterpret_cast( pPushDescriptorSetInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSet2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSet2( const PushDescriptorSetInfo & pushDescriptorSetInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushDescriptorSet2 && "Function requires or " ); +# endif + + d.vkCmdPushDescriptorSet2( m_commandBuffer, reinterpret_cast( &pushDescriptorSetInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate2( const PushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSetWithTemplate2( static_cast( m_commandBuffer ), + reinterpret_cast( pPushDescriptorSetWithTemplateInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate2( const PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushDescriptorSetWithTemplate2 && + "Function requires or " ); +# endif + + d.vkCmdPushDescriptorSetWithTemplate2( m_commandBuffer, + reinterpret_cast( &pushDescriptorSetWithTemplateInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMemoryToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToImage( const CopyMemoryToImageInfo * pCopyMemoryToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkCopyMemoryToImage( static_cast( m_device ), reinterpret_cast( pCopyMemoryToImageInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::copyMemoryToImage( const CopyMemoryToImageInfo & copyMemoryToImageInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyMemoryToImage && "Function requires or " ); +# endif + + Result result = static_cast( d.vkCopyMemoryToImage( m_device, reinterpret_cast( ©MemoryToImageInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToImage" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemory.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyImageToMemory( const CopyImageToMemoryInfo * pCopyImageToMemoryInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkCopyImageToMemory( static_cast( m_device ), reinterpret_cast( pCopyImageToMemoryInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemory.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::copyImageToMemory( const CopyImageToMemoryInfo & copyImageToMemoryInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyImageToMemory && "Function requires or " ); +# endif + + Result result = static_cast( d.vkCopyImageToMemory( m_device, reinterpret_cast( ©ImageToMemoryInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToMemory" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImage.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyImageToImage( const CopyImageToImageInfo * pCopyImageToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkCopyImageToImage( static_cast( m_device ), reinterpret_cast( pCopyImageToImageInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImage.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::copyImageToImage( const CopyImageToImageInfo & copyImageToImageInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyImageToImage && "Function requires or " ); +# endif + + Result result = static_cast( d.vkCopyImageToImage( m_device, reinterpret_cast( ©ImageToImageInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToImage" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkTransitionImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::transitionImageLayout( uint32_t transitionCount, + const HostImageLayoutTransitionInfo * pTransitions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkTransitionImageLayout( + static_cast( m_device ), transitionCount, reinterpret_cast( pTransitions ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkTransitionImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayout.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::transitionImageLayout( ArrayProxy const & transitions, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkTransitionImageLayout && "Function requires or " ); +# endif + + Result result = static_cast( + d.vkTransitionImageLayout( m_device, transitions.size(), reinterpret_cast( transitions.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::transitionImageLayout" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_surface === + + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + VULKAN_HPP_INLINE void Instance::destroySurfaceKHR( SurfaceKHR surface, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySurfaceKHR( + static_cast( m_instance ), static_cast( surface ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + VULKAN_HPP_INLINE void + Instance::destroySurfaceKHR( SurfaceKHR surface, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySurfaceKHR && "Function requires " ); +# endif + + d.vkDestroySurfaceKHR( m_instance, static_cast( surface ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + VULKAN_HPP_INLINE void Instance::destroy( SurfaceKHR surface, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySurfaceKHR( + static_cast( m_instance ), static_cast( surface ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + VULKAN_HPP_INLINE void Instance::destroy( SurfaceKHR surface, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySurfaceKHR && "Function requires " ); +# endif + + d.vkDestroySurfaceKHR( m_instance, static_cast( surface ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Bool32 * pSupported, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfaceSupportKHR( + static_cast( m_physicalDevice ), queueFamilyIndex, static_cast( surface ), reinterpret_cast( pSupported ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceSupportKHR && "Function requires " ); +# endif + + Bool32 supported; + Result result = static_cast( d.vkGetPhysicalDeviceSurfaceSupportKHR( + m_physicalDevice, queueFamilyIndex, static_cast( surface ), reinterpret_cast( &supported ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceSupportKHR" ); + + return detail::createResultValueType( result, std::move( supported ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilitiesKHR( SurfaceKHR surface, + SurfaceCapabilitiesKHR * pSurfaceCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + reinterpret_cast( pSurfaceCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getSurfaceCapabilitiesKHR( SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceCapabilitiesKHR && "Function requires " ); +# endif + + SurfaceCapabilitiesKHR surfaceCapabilities; + Result result = static_cast( d.vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + m_physicalDevice, static_cast( surface ), reinterpret_cast( &surfaceCapabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilitiesKHR" ); + + return detail::createResultValueType( result, std::move( surfaceCapabilities ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceFormatsKHR( SurfaceKHR surface, + uint32_t * pSurfaceFormatCount, + SurfaceFormatKHR * pSurfaceFormats, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfaceFormatsKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + pSurfaceFormatCount, + reinterpret_cast( pSurfaceFormats ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceFormatsKHR( SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceFormatsKHR && "Function requires " ); +# endif + + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = + static_cast( d.vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast( surface ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + surfaceFormats.resize( surfaceFormatCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormatsKHR( + m_physicalDevice, static_cast( surface ), &surfaceFormatCount, reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + surfaceFormats.resize( surfaceFormatCount ); + } + return detail::createResultValueType( result, std::move( surfaceFormats ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceFormatsKHR( SurfaceKHR surface, SurfaceFormatKHRAllocator & surfaceFormatKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceFormatsKHR && "Function requires " ); +# endif + + std::vector surfaceFormats( surfaceFormatKHRAllocator ); + uint32_t surfaceFormatCount; + Result result; + do + { + result = + static_cast( d.vkGetPhysicalDeviceSurfaceFormatsKHR( m_physicalDevice, static_cast( surface ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + surfaceFormats.resize( surfaceFormatCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormatsKHR( + m_physicalDevice, static_cast( surface ), &surfaceFormatCount, reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + surfaceFormats.resize( surfaceFormatCount ); + } + return detail::createResultValueType( result, std::move( surfaceFormats ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfacePresentModesKHR( SurfaceKHR surface, + uint32_t * pPresentModeCount, + PresentModeKHR * pPresentModes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfacePresentModesKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + pPresentModeCount, + reinterpret_cast( pPresentModes ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfacePresentModesKHR( SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfacePresentModesKHR && "Function requires " ); +# endif + + std::vector presentModes; + uint32_t presentModeCount; + Result result; + do + { + result = static_cast( + d.vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast( surface ), &presentModeCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentModeCount ) + { + presentModes.resize( presentModeCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfacePresentModesKHR( + m_physicalDevice, static_cast( surface ), &presentModeCount, reinterpret_cast( presentModes.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" ); + VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); + if ( presentModeCount < presentModes.size() ) + { + presentModes.resize( presentModeCount ); + } + return detail::createResultValueType( result, std::move( presentModes ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfacePresentModesKHR( SurfaceKHR surface, PresentModeKHRAllocator & presentModeKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfacePresentModesKHR && "Function requires " ); +# endif + + std::vector presentModes( presentModeKHRAllocator ); + uint32_t presentModeCount; + Result result; + do + { + result = static_cast( + d.vkGetPhysicalDeviceSurfacePresentModesKHR( m_physicalDevice, static_cast( surface ), &presentModeCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentModeCount ) + { + presentModes.resize( presentModeCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfacePresentModesKHR( + m_physicalDevice, static_cast( surface ), &presentModeCount, reinterpret_cast( presentModes.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" ); + VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); + if ( presentModeCount < presentModes.size() ) + { + presentModes.resize( presentModeCount ); + } + return detail::createResultValueType( result, std::move( presentModes ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_swapchain === + + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSwapchainKHR( const SwapchainCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SwapchainKHR * pSwapchain, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSwapchainKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSwapchain ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSwapchainKHR && "Function requires " ); +# endif + + SwapchainKHR swapchain; + Result result = static_cast( d.vkCreateSwapchainKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSwapchainKHR" ); + + return detail::createResultValueType( result, std::move( swapchain ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSwapchainKHR && "Function requires " ); +# endif + + SwapchainKHR swapchain; + Result result = static_cast( d.vkCreateSwapchainKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSwapchainKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( swapchain, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + VULKAN_HPP_INLINE void + Device::destroySwapchainKHR( SwapchainKHR swapchain, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySwapchainKHR( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + VULKAN_HPP_INLINE void + Device::destroySwapchainKHR( SwapchainKHR swapchain, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySwapchainKHR && "Function requires " ); +# endif + + d.vkDestroySwapchainKHR( m_device, static_cast( swapchain ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + VULKAN_HPP_INLINE void Device::destroy( SwapchainKHR swapchain, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySwapchainKHR( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + VULKAN_HPP_INLINE void Device::destroy( SwapchainKHR swapchain, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySwapchainKHR && "Function requires " ); +# endif + + d.vkDestroySwapchainKHR( m_device, static_cast( swapchain ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainImagesKHR( SwapchainKHR swapchain, + uint32_t * pSwapchainImageCount, + Image * pSwapchainImages, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSwapchainImagesKHR( + static_cast( m_device ), static_cast( swapchain ), pSwapchainImageCount, reinterpret_cast( pSwapchainImages ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getSwapchainImagesKHR( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSwapchainImagesKHR && "Function requires " ); +# endif + + std::vector swapchainImages; + uint32_t swapchainImageCount; + Result result; + do + { + result = static_cast( d.vkGetSwapchainImagesKHR( m_device, static_cast( swapchain ), &swapchainImageCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && swapchainImageCount ) + { + swapchainImages.resize( swapchainImageCount ); + result = static_cast( d.vkGetSwapchainImagesKHR( + m_device, static_cast( swapchain ), &swapchainImageCount, reinterpret_cast( swapchainImages.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainImagesKHR" ); + VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() ); + if ( swapchainImageCount < swapchainImages.size() ) + { + swapchainImages.resize( swapchainImageCount ); + } + return detail::createResultValueType( result, std::move( swapchainImages ) ); + } + + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getSwapchainImagesKHR( SwapchainKHR swapchain, ImageAllocator & imageAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSwapchainImagesKHR && "Function requires " ); +# endif + + std::vector swapchainImages( imageAllocator ); + uint32_t swapchainImageCount; + Result result; + do + { + result = static_cast( d.vkGetSwapchainImagesKHR( m_device, static_cast( swapchain ), &swapchainImageCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && swapchainImageCount ) + { + swapchainImages.resize( swapchainImageCount ); + result = static_cast( d.vkGetSwapchainImagesKHR( + m_device, static_cast( swapchain ), &swapchainImageCount, reinterpret_cast( swapchainImages.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainImagesKHR" ); + VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() ); + if ( swapchainImageCount < swapchainImages.size() ) + { + swapchainImages.resize( swapchainImageCount ); + } + return detail::createResultValueType( result, std::move( swapchainImages ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkAcquireNextImageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImageKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireNextImageKHR( + SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, uint32_t * pImageIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAcquireNextImageKHR( static_cast( m_device ), + static_cast( swapchain ), + timeout, + static_cast( semaphore ), + static_cast( fence ), + pImageIndex ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireNextImageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImageKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue + Device::acquireNextImageKHR( SwapchainKHR swapchain, uint64_t timeout, Semaphore semaphore, Fence fence, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireNextImageKHR && "Function requires " ); +# endif + + uint32_t imageIndex; + Result result = static_cast( d.vkAcquireNextImageKHR( + m_device, static_cast( swapchain ), timeout, static_cast( semaphore ), static_cast( fence ), &imageIndex ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquireNextImageKHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } ); + + return ResultValue( result, std::move( imageIndex ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueuePresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueuePresentKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::presentKHR( const PresentInfoKHR * pPresentInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkQueuePresentKHR( static_cast( m_queue ), reinterpret_cast( pPresentInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueuePresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueuePresentKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::presentKHR( const PresentInfoKHR & presentInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueuePresentKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkQueuePresentKHR( m_queue, reinterpret_cast( &presentInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPresentCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getGroupPresentCapabilitiesKHR( DeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeviceGroupPresentCapabilitiesKHR( + static_cast( m_device ), reinterpret_cast( pDeviceGroupPresentCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPresentCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getGroupPresentCapabilitiesKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceGroupPresentCapabilitiesKHR && + "Function requires or " ); +# endif + + DeviceGroupPresentCapabilitiesKHR deviceGroupPresentCapabilities; + Result result = static_cast( + d.vkGetDeviceGroupPresentCapabilitiesKHR( m_device, reinterpret_cast( &deviceGroupPresentCapabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupPresentCapabilitiesKHR" ); + + return detail::createResultValueType( result, std::move( deviceGroupPresentCapabilities ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceGroupSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getGroupSurfacePresentModesKHR( SurfaceKHR surface, + DeviceGroupPresentModeFlagsKHR * pModes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeviceGroupSurfacePresentModesKHR( + static_cast( m_device ), static_cast( surface ), reinterpret_cast( pModes ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getGroupSurfacePresentModesKHR( SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceGroupSurfacePresentModesKHR && + "Function requires or " ); +# endif + + DeviceGroupPresentModeFlagsKHR modes; + Result result = static_cast( d.vkGetDeviceGroupSurfacePresentModesKHR( + m_device, static_cast( surface ), reinterpret_cast( &modes ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModesKHR" ); + + return detail::createResultValueType( result, std::move( modes ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getPresentRectanglesKHR( SurfaceKHR surface, uint32_t * pRectCount, Rect2D * pRects, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDevicePresentRectanglesKHR( + static_cast( m_physicalDevice ), static_cast( surface ), pRectCount, reinterpret_cast( pRects ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getPresentRectanglesKHR( SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDevicePresentRectanglesKHR && + "Function requires or " ); +# endif + + std::vector rects; + uint32_t rectCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDevicePresentRectanglesKHR( m_physicalDevice, static_cast( surface ), &rectCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && rectCount ) + { + rects.resize( rectCount ); + result = static_cast( d.vkGetPhysicalDevicePresentRectanglesKHR( + m_physicalDevice, static_cast( surface ), &rectCount, reinterpret_cast( rects.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" ); + VULKAN_HPP_ASSERT( rectCount <= rects.size() ); + if ( rectCount < rects.size() ) + { + rects.resize( rectCount ); + } + return detail::createResultValueType( result, std::move( rects ) ); + } + + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getPresentRectanglesKHR( SurfaceKHR surface, Rect2DAllocator & rect2DAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDevicePresentRectanglesKHR && + "Function requires or " ); +# endif + + std::vector rects( rect2DAllocator ); + uint32_t rectCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDevicePresentRectanglesKHR( m_physicalDevice, static_cast( surface ), &rectCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && rectCount ) + { + rects.resize( rectCount ); + result = static_cast( d.vkGetPhysicalDevicePresentRectanglesKHR( + m_physicalDevice, static_cast( surface ), &rectCount, reinterpret_cast( rects.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" ); + VULKAN_HPP_ASSERT( rectCount <= rects.size() ); + if ( rectCount < rects.size() ) + { + rects.resize( rectCount ); + } + return detail::createResultValueType( result, std::move( rects ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkAcquireNextImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImage2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireNextImage2KHR( const AcquireNextImageInfoKHR * pAcquireInfo, + uint32_t * pImageIndex, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkAcquireNextImage2KHR( static_cast( m_device ), reinterpret_cast( pAcquireInfo ), pImageIndex ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireNextImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImage2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::acquireNextImage2KHR( const AcquireNextImageInfoKHR & acquireInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireNextImage2KHR && "Function requires or " ); +# endif + + uint32_t imageIndex; + Result result = + static_cast( d.vkAcquireNextImage2KHR( m_device, reinterpret_cast( &acquireInfo ), &imageIndex ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquireNextImage2KHR", { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } ); + + return ResultValue( result, std::move( imageIndex ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_display === + + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPropertiesKHR( uint32_t * pPropertyCount, + DisplayPropertiesKHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceDisplayPropertiesKHR( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPropertiesKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayPropertiesKHR && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPropertiesKHR( DisplayPropertiesKHRAllocator & displayPropertiesKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayPropertiesKHR && "Function requires " ); +# endif + + std::vector properties( displayPropertiesKHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + d.vkGetPhysicalDeviceDisplayPropertiesKHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlanePropertiesKHR( uint32_t * pPropertyCount, + DisplayPlanePropertiesKHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPlanePropertiesKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPlanePropertiesKHR( DisplayPlanePropertiesKHRAllocator & displayPlanePropertiesKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR && "Function requires " ); +# endif + + std::vector properties( displayPlanePropertiesKHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, + uint32_t * pDisplayCount, + DisplayKHR * pDisplays, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDisplayPlaneSupportedDisplaysKHR( + static_cast( m_physicalDevice ), planeIndex, pDisplayCount, reinterpret_cast( pDisplays ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayPlaneSupportedDisplaysKHR && "Function requires " ); +# endif + + std::vector displays; + uint32_t displayCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && displayCount ) + { + displays.resize( displayCount ); + result = static_cast( + d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast( displays.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" ); + VULKAN_HPP_ASSERT( displayCount <= displays.size() ); + if ( displayCount < displays.size() ) + { + displays.resize( displayCount ); + } + return detail::createResultValueType( result, std::move( displays ) ); + } + + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, DisplayKHRAllocator & displayKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayPlaneSupportedDisplaysKHR && "Function requires " ); +# endif + + std::vector displays( displayKHRAllocator ); + uint32_t displayCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && displayCount ) + { + displays.resize( displayCount ); + result = static_cast( + d.vkGetDisplayPlaneSupportedDisplaysKHR( m_physicalDevice, planeIndex, &displayCount, reinterpret_cast( displays.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" ); + VULKAN_HPP_ASSERT( displayCount <= displays.size() ); + if ( displayCount < displays.size() ) + { + displays.resize( displayCount ); + } + return detail::createResultValueType( result, std::move( displays ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayModePropertiesKHR( DisplayKHR display, + uint32_t * pPropertyCount, + DisplayModePropertiesKHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDisplayModePropertiesKHR( static_cast( m_physicalDevice ), + static_cast( display ), + pPropertyCount, + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayModePropertiesKHR( DisplayKHR display, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayModePropertiesKHR && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetDisplayModePropertiesKHR( + m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModePropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayModePropertiesKHR( DisplayKHR display, + DisplayModePropertiesKHRAllocator & displayModePropertiesKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayModePropertiesKHR && "Function requires " ); +# endif + + std::vector properties( displayModePropertiesKHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayModePropertiesKHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetDisplayModePropertiesKHR( + m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModePropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::createDisplayModeKHR( DisplayKHR display, + const DisplayModeCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + DisplayModeKHR * pMode, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDisplayModeKHR( static_cast( m_physicalDevice ), + static_cast( display ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pMode ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type PhysicalDevice::createDisplayModeKHR( + DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDisplayModeKHR && "Function requires " ); +# endif + + DisplayModeKHR mode; + Result result = static_cast( d.vkCreateDisplayModeKHR( m_physicalDevice, + static_cast( display ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &mode ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDisplayModeKHR" ); + + return detail::createResultValueType( result, std::move( mode ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type PhysicalDevice::createDisplayModeKHRUnique( + DisplayKHR display, const DisplayModeCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDisplayModeKHR && "Function requires " ); +# endif + + DisplayModeKHR mode; + Result result = static_cast( d.vkCreateDisplayModeKHR( m_physicalDevice, + static_cast( display ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &mode ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::createDisplayModeKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( mode, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayPlaneCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, + uint32_t planeIndex, + DisplayPlaneCapabilitiesKHR * pCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDisplayPlaneCapabilitiesKHR( static_cast( m_physicalDevice ), + static_cast( mode ), + planeIndex, + reinterpret_cast( pCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayPlaneCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayPlaneCapabilitiesKHR && "Function requires " ); +# endif + + DisplayPlaneCapabilitiesKHR capabilities; + Result result = static_cast( d.vkGetDisplayPlaneCapabilitiesKHR( + m_physicalDevice, static_cast( mode ), planeIndex, reinterpret_cast( &capabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneCapabilitiesKHR" ); + + return detail::createResultValueType( result, std::move( capabilities ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDisplayPlaneSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createDisplayPlaneSurfaceKHR( + const DisplaySurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDisplayPlaneSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateDisplayPlaneSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDisplayPlaneSurfaceKHR" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createDisplayPlaneSurfaceKHRUnique( + const DisplaySurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDisplayPlaneSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateDisplayPlaneSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDisplayPlaneSurfaceKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_display_swapchain === + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSharedSwapchainsKHR( uint32_t swapchainCount, + const SwapchainCreateInfoKHR * pCreateInfos, + const AllocationCallbacks * pAllocator, + SwapchainKHR * pSwapchains, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSharedSwapchainsKHR( static_cast( m_device ), + swapchainCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSwapchains ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createSharedSwapchainsKHR( + ArrayProxy const & createInfos, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSharedSwapchainsKHR && "Function requires " ); +# endif + + std::vector swapchains( createInfos.size() ); + Result result = static_cast( d.vkCreateSharedSwapchainsKHR( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( swapchains.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHR" ); + + return detail::createResultValueType( result, std::move( swapchains ) ); + } + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSharedSwapchainsKHR( ArrayProxy const & createInfos, + Optional allocator, + SwapchainKHRAllocator & swapchainKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSharedSwapchainsKHR && "Function requires " ); +# endif + + std::vector swapchains( createInfos.size(), swapchainKHRAllocator ); + Result result = static_cast( d.vkCreateSharedSwapchainsKHR( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( swapchains.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHR" ); + + return detail::createResultValueType( result, std::move( swapchains ) ); + } + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSharedSwapchainsKHR && "Function requires " ); +# endif + + SwapchainKHR swapchain; + Result result = static_cast( d.vkCreateSharedSwapchainsKHR( m_device, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainKHR" ); + + return detail::createResultValueType( result, std::move( swapchain ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, SwapchainKHRAllocator>>::type + Device::createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSharedSwapchainsKHR && "Function requires " ); +# endif + + std::vector swapchains( createInfos.size() ); + Result result = static_cast( d.vkCreateSharedSwapchainsKHR( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( swapchains.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHRUnique" ); + std::vector, SwapchainKHRAllocator> uniqueSwapchains; + uniqueSwapchains.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & swapchain : swapchains ) + { + uniqueSwapchains.push_back( UniqueHandle( swapchain, deleter ) ); + } + return detail::createResultValueType( result, std::move( uniqueSwapchains ) ); + } + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, SwapchainKHRAllocator>>::type + Device::createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, + Optional allocator, + SwapchainKHRAllocator & swapchainKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSharedSwapchainsKHR && "Function requires " ); +# endif + + std::vector swapchains( createInfos.size() ); + Result result = static_cast( d.vkCreateSharedSwapchainsKHR( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( swapchains.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainsKHRUnique" ); + std::vector, SwapchainKHRAllocator> uniqueSwapchains( swapchainKHRAllocator ); + uniqueSwapchains.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & swapchain : swapchains ) + { + uniqueSwapchains.push_back( UniqueHandle( swapchain, deleter ) ); + } + return detail::createResultValueType( result, std::move( uniqueSwapchains ) ); + } + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSharedSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSharedSwapchainsKHR && "Function requires " ); +# endif + + SwapchainKHR swapchain; + Result result = static_cast( d.vkCreateSharedSwapchainsKHR( m_device, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSharedSwapchainKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( swapchain, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateXlibSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateXlibSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateXlibSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createXlibSurfaceKHR" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createXlibSurfaceKHRUnique( const XlibSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateXlibSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateXlibSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createXlibSurfaceKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceXlibPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXlibPresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 + PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display * dpy, VisualID visualID, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceXlibPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, dpy, visualID ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceXlibPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXlibPresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 + PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceXlibPresentationSupportKHR && + "Function requires " ); +# endif + + VkBool32 result = d.vkGetPhysicalDeviceXlibPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &dpy, visualID ); + + return static_cast( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateXcbSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateXcbSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateXcbSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createXcbSurfaceKHR" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createXcbSurfaceKHRUnique( const XcbSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateXcbSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateXcbSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createXcbSurfaceKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceXcbPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, + xcb_connection_t * connection, + xcb_visualid_t visual_id, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceXcbPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, connection, visual_id ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceXcbPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, + xcb_connection_t & connection, + xcb_visualid_t visual_id, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceXcbPresentationSupportKHR && + "Function requires " ); +# endif + + VkBool32 result = d.vkGetPhysicalDeviceXcbPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &connection, visual_id ); + + return static_cast( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateWaylandSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateWaylandSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateWaylandSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createWaylandSurfaceKHR" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createWaylandSurfaceKHRUnique( + const WaylandSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateWaylandSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateWaylandSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createWaylandSurfaceKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceWaylandPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWaylandPresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, + struct wl_display * display, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceWaylandPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, display ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceWaylandPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWaylandPresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, + struct wl_display & display, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceWaylandPresentationSupportKHR && + "Function requires " ); +# endif + + VkBool32 result = d.vkGetPhysicalDeviceWaylandPresentationSupportKHR( m_physicalDevice, queueFamilyIndex, &display ); + + return static_cast( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateAndroidSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateAndroidSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateAndroidSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createAndroidSurfaceKHR" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createAndroidSurfaceKHRUnique( + const AndroidSurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateAndroidSurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateAndroidSurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createAndroidSurfaceKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateWin32SurfaceKHR( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateWin32SurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateWin32SurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createWin32SurfaceKHR" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createWin32SurfaceKHRUnique( + const Win32SurfaceCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateWin32SurfaceKHR && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateWin32SurfaceKHR( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createWin32SurfaceKHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceWin32PresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWin32PresentationSupportKHR.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceWin32PresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex ) ); + } +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + DebugReportCallbackEXT * pCallback, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDebugReportCallbackEXT( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pCallback ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createDebugReportCallbackEXT( + const DebugReportCallbackCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDebugReportCallbackEXT && "Function requires " ); +# endif + + DebugReportCallbackEXT callback; + Result result = static_cast( d.vkCreateDebugReportCallbackEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &callback ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugReportCallbackEXT" ); + + return detail::createResultValueType( result, std::move( callback ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createDebugReportCallbackEXTUnique( const DebugReportCallbackCreateInfoEXT & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDebugReportCallbackEXT && "Function requires " ); +# endif + + DebugReportCallbackEXT callback; + Result result = static_cast( d.vkCreateDebugReportCallbackEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &callback ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugReportCallbackEXTUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( callback, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDebugReportCallbackEXT( + static_cast( m_instance ), static_cast( callback ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDebugReportCallbackEXT && "Function requires " ); +# endif + + d.vkDestroyDebugReportCallbackEXT( + m_instance, static_cast( callback ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + VULKAN_HPP_INLINE void + Instance::destroy( DebugReportCallbackEXT callback, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDebugReportCallbackEXT( + static_cast( m_instance ), static_cast( callback ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + VULKAN_HPP_INLINE void + Instance::destroy( DebugReportCallbackEXT callback, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDebugReportCallbackEXT && "Function requires " ); +# endif + + d.vkDestroyDebugReportCallbackEXT( + m_instance, static_cast( callback ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDebugReportMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugReportMessageEXT.html + template + VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( DebugReportFlagsEXT flags, + DebugReportObjectTypeEXT objectType_, + uint64_t object, + size_t location, + int32_t messageCode, + const char * pLayerPrefix, + const char * pMessage, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDebugReportMessageEXT( static_cast( m_instance ), + static_cast( flags ), + static_cast( objectType_ ), + object, + location, + messageCode, + pLayerPrefix, + pMessage ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDebugReportMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugReportMessageEXT.html + template + VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( DebugReportFlagsEXT flags, + DebugReportObjectTypeEXT objectType_, + uint64_t object, + size_t location, + int32_t messageCode, + const std::string & layerPrefix, + const std::string & message, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDebugReportMessageEXT && "Function requires " ); +# endif + + d.vkDebugReportMessageEXT( m_instance, + static_cast( flags ), + static_cast( objectType_ ), + object, + location, + messageCode, + layerPrefix.c_str(), + message.c_str() ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_debug_marker === + + // wrapper function for command vkDebugMarkerSetObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectTagEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT * pTagInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkDebugMarkerSetObjectTagEXT( static_cast( m_device ), reinterpret_cast( pTagInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDebugMarkerSetObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectTagEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDebugMarkerSetObjectTagEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkDebugMarkerSetObjectTagEXT( m_device, reinterpret_cast( &tagInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectTagEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDebugMarkerSetObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectNameEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT * pNameInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkDebugMarkerSetObjectNameEXT( static_cast( m_device ), reinterpret_cast( pNameInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDebugMarkerSetObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectNameEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDebugMarkerSetObjectNameEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkDebugMarkerSetObjectNameEXT( m_device, reinterpret_cast( &nameInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectNameEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDebugMarkerBeginEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerBeginEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT * pMarkerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDebugMarkerBeginEXT( static_cast( m_commandBuffer ), reinterpret_cast( pMarkerInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDebugMarkerBeginEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerBeginEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDebugMarkerBeginEXT && "Function requires " ); +# endif + + d.vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast( &markerInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDebugMarkerEndEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerEndEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerEndEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDebugMarkerEndEXT( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdDebugMarkerInsertEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerInsertEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT * pMarkerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDebugMarkerInsertEXT( static_cast( m_commandBuffer ), reinterpret_cast( pMarkerInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDebugMarkerInsertEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerInsertEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDebugMarkerInsertEXT && "Function requires " ); +# endif + + d.vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast( &markerInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileInfoKHR * pVideoProfile, + VideoCapabilitiesKHR * pCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceVideoCapabilitiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pVideoProfile ), + reinterpret_cast( pCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileInfoKHR & videoProfile, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoCapabilitiesKHR && "Function requires " ); +# endif + + VideoCapabilitiesKHR capabilities; + Result result = static_cast( d.vkGetPhysicalDeviceVideoCapabilitiesKHR( + m_physicalDevice, reinterpret_cast( &videoProfile ), reinterpret_cast( &capabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); + + return detail::createResultValueType( result, std::move( capabilities ) ); + } + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileInfoKHR & videoProfile, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoCapabilitiesKHR && "Function requires " ); +# endif + + StructureChain structureChain; + VideoCapabilitiesKHR & capabilities = structureChain.template get(); + Result result = static_cast( d.vkGetPhysicalDeviceVideoCapabilitiesKHR( + m_physicalDevice, reinterpret_cast( &videoProfile ), reinterpret_cast( &capabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, + uint32_t * pVideoFormatPropertyCount, + VideoFormatPropertiesKHR * pVideoFormatProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pVideoFormatInfo ), + pVideoFormatPropertyCount, + reinterpret_cast( pVideoFormatProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR && + "Function requires " ); +# endif + + std::vector videoFormatProperties; + uint32_t videoFormatPropertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( + m_physicalDevice, reinterpret_cast( &videoFormatInfo ), &videoFormatPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && videoFormatPropertyCount ) + { + videoFormatProperties.resize( videoFormatPropertyCount ); + result = static_cast( + d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + reinterpret_cast( videoFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); + VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); + if ( videoFormatPropertyCount < videoFormatProperties.size() ) + { + videoFormatProperties.resize( videoFormatPropertyCount ); + } + return detail::createResultValueType( result, std::move( videoFormatProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, + VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR && + "Function requires " ); +# endif + + std::vector videoFormatProperties( videoFormatPropertiesKHRAllocator ); + uint32_t videoFormatPropertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( + m_physicalDevice, reinterpret_cast( &videoFormatInfo ), &videoFormatPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && videoFormatPropertyCount ) + { + videoFormatProperties.resize( videoFormatPropertyCount ); + result = static_cast( + d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + reinterpret_cast( videoFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); + VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); + if ( videoFormatPropertyCount < videoFormatProperties.size() ) + { + videoFormatProperties.resize( videoFormatPropertyCount ); + } + return detail::createResultValueType( result, std::move( videoFormatProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR && + "Function requires " ); +# endif + + std::vector structureChains; + std::vector videoFormatProperties; + uint32_t videoFormatPropertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( + m_physicalDevice, reinterpret_cast( &videoFormatInfo ), &videoFormatPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && videoFormatPropertyCount ) + { + structureChains.resize( videoFormatPropertyCount ); + videoFormatProperties.resize( videoFormatPropertyCount ); + for ( uint32_t i = 0; i < videoFormatPropertyCount; i++ ) + { + videoFormatProperties[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( + d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + reinterpret_cast( videoFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); + VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); + if ( videoFormatPropertyCount < videoFormatProperties.size() ) + { + structureChains.resize( videoFormatPropertyCount ); + } + for ( uint32_t i = 0; i < videoFormatPropertyCount; i++ ) + { + structureChains[i].template get() = videoFormatProperties[i]; + } + return detail::createResultValueType( result, std::move( structureChains ) ); + } + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, + StructureChainAllocator & structureChainAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR && + "Function requires " ); +# endif + + std::vector structureChains( structureChainAllocator ); + std::vector videoFormatProperties; + uint32_t videoFormatPropertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( + m_physicalDevice, reinterpret_cast( &videoFormatInfo ), &videoFormatPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && videoFormatPropertyCount ) + { + structureChains.resize( videoFormatPropertyCount ); + videoFormatProperties.resize( videoFormatPropertyCount ); + for ( uint32_t i = 0; i < videoFormatPropertyCount; i++ ) + { + videoFormatProperties[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( + d.vkGetPhysicalDeviceVideoFormatPropertiesKHR( m_physicalDevice, + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + reinterpret_cast( videoFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); + VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); + if ( videoFormatPropertyCount < videoFormatProperties.size() ) + { + structureChains.resize( videoFormatPropertyCount ); + } + for ( uint32_t i = 0; i < videoFormatPropertyCount; i++ ) + { + structureChains[i].template get() = videoFormatProperties[i]; + } + return detail::createResultValueType( result, std::move( structureChains ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createVideoSessionKHR( const VideoSessionCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + VideoSessionKHR * pVideoSession, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateVideoSessionKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pVideoSession ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createVideoSessionKHR( const VideoSessionCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateVideoSessionKHR && "Function requires " ); +# endif + + VideoSessionKHR videoSession; + Result result = static_cast( d.vkCreateVideoSessionKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &videoSession ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionKHR" ); + + return detail::createResultValueType( result, std::move( videoSession ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createVideoSessionKHRUnique( const VideoSessionCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateVideoSessionKHR && "Function requires " ); +# endif + + VideoSessionKHR videoSession; + Result result = static_cast( d.vkCreateVideoSessionKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &videoSession ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( videoSession, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + VULKAN_HPP_INLINE void + Device::destroyVideoSessionKHR( VideoSessionKHR videoSession, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyVideoSessionKHR( + static_cast( m_device ), static_cast( videoSession ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + VULKAN_HPP_INLINE void + Device::destroyVideoSessionKHR( VideoSessionKHR videoSession, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyVideoSessionKHR && "Function requires " ); +# endif + + d.vkDestroyVideoSessionKHR( m_device, static_cast( videoSession ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + VULKAN_HPP_INLINE void Device::destroy( VideoSessionKHR videoSession, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyVideoSessionKHR( + static_cast( m_device ), static_cast( videoSession ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + VULKAN_HPP_INLINE void + Device::destroy( VideoSessionKHR videoSession, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyVideoSessionKHR && "Function requires " ); +# endif + + d.vkDestroyVideoSessionKHR( m_device, static_cast( videoSession ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getVideoSessionMemoryRequirementsKHR( VideoSessionKHR videoSession, + uint32_t * pMemoryRequirementsCount, + VideoSessionMemoryRequirementsKHR * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetVideoSessionMemoryRequirementsKHR( static_cast( m_device ), + static_cast( videoSession ), + pMemoryRequirementsCount, + reinterpret_cast( pMemoryRequirements ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + template < + typename VideoSessionMemoryRequirementsKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + Device::getVideoSessionMemoryRequirementsKHR( VideoSessionKHR videoSession, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetVideoSessionMemoryRequirementsKHR && "Function requires " ); +# endif + + std::vector memoryRequirements; + uint32_t memoryRequirementsCount; + Result result; + do + { + result = static_cast( + d.vkGetVideoSessionMemoryRequirementsKHR( m_device, static_cast( videoSession ), &memoryRequirementsCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && memoryRequirementsCount ) + { + memoryRequirements.resize( memoryRequirementsCount ); + result = static_cast( + d.vkGetVideoSessionMemoryRequirementsKHR( m_device, + static_cast( videoSession ), + &memoryRequirementsCount, + reinterpret_cast( memoryRequirements.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + + VULKAN_HPP_ASSERT( memoryRequirementsCount <= memoryRequirements.size() ); + if ( memoryRequirementsCount < memoryRequirements.size() ) + { + memoryRequirements.resize( memoryRequirementsCount ); + } + return memoryRequirements; + } + + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + template < + typename VideoSessionMemoryRequirementsKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + Device::getVideoSessionMemoryRequirementsKHR( VideoSessionKHR videoSession, + VideoSessionMemoryRequirementsKHRAllocator & videoSessionMemoryRequirementsKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetVideoSessionMemoryRequirementsKHR && "Function requires " ); +# endif + + std::vector memoryRequirements( videoSessionMemoryRequirementsKHRAllocator ); + uint32_t memoryRequirementsCount; + Result result; + do + { + result = static_cast( + d.vkGetVideoSessionMemoryRequirementsKHR( m_device, static_cast( videoSession ), &memoryRequirementsCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && memoryRequirementsCount ) + { + memoryRequirements.resize( memoryRequirementsCount ); + result = static_cast( + d.vkGetVideoSessionMemoryRequirementsKHR( m_device, + static_cast( videoSession ), + &memoryRequirementsCount, + reinterpret_cast( memoryRequirements.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + + VULKAN_HPP_ASSERT( memoryRequirementsCount <= memoryRequirements.size() ); + if ( memoryRequirementsCount < memoryRequirements.size() ) + { + memoryRequirements.resize( memoryRequirementsCount ); + } + return memoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindVideoSessionMemoryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindVideoSessionMemoryKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindVideoSessionMemoryKHR( VideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const BindVideoSessionMemoryInfoKHR * pBindSessionMemoryInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBindVideoSessionMemoryKHR( static_cast( m_device ), + static_cast( videoSession ), + bindSessionMemoryInfoCount, + reinterpret_cast( pBindSessionMemoryInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindVideoSessionMemoryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindVideoSessionMemoryKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::bindVideoSessionMemoryKHR( + VideoSessionKHR videoSession, ArrayProxy const & bindSessionMemoryInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindVideoSessionMemoryKHR && "Function requires " ); +# endif + + Result result = + static_cast( d.vkBindVideoSessionMemoryKHR( m_device, + static_cast( videoSession ), + bindSessionMemoryInfos.size(), + reinterpret_cast( bindSessionMemoryInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindVideoSessionMemoryKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createVideoSessionParametersKHR( const VideoSessionParametersCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + VideoSessionParametersKHR * pVideoSessionParameters, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateVideoSessionParametersKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pVideoSessionParameters ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createVideoSessionParametersKHR( + const VideoSessionParametersCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateVideoSessionParametersKHR && "Function requires " ); +# endif + + VideoSessionParametersKHR videoSessionParameters; + Result result = static_cast( d.vkCreateVideoSessionParametersKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &videoSessionParameters ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionParametersKHR" ); + + return detail::createResultValueType( result, std::move( videoSessionParameters ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createVideoSessionParametersKHRUnique( const VideoSessionParametersCreateInfoKHR & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateVideoSessionParametersKHR && "Function requires " ); +# endif + + VideoSessionParametersKHR videoSessionParameters; + Result result = static_cast( d.vkCreateVideoSessionParametersKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &videoSessionParameters ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createVideoSessionParametersKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( videoSessionParameters, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::updateVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters, + const VideoSessionParametersUpdateInfoKHR * pUpdateInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkUpdateVideoSessionParametersKHR( static_cast( m_device ), + static_cast( videoSessionParameters ), + reinterpret_cast( pUpdateInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::updateVideoSessionParametersKHR( + VideoSessionParametersKHR videoSessionParameters, const VideoSessionParametersUpdateInfoKHR & updateInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUpdateVideoSessionParametersKHR && "Function requires " ); +# endif + + Result result = + static_cast( d.vkUpdateVideoSessionParametersKHR( m_device, + static_cast( videoSessionParameters ), + reinterpret_cast( &updateInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::updateVideoSessionParametersKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + VULKAN_HPP_INLINE void Device::destroyVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyVideoSessionParametersKHR( static_cast( m_device ), + static_cast( videoSessionParameters ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + VULKAN_HPP_INLINE void Device::destroyVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyVideoSessionParametersKHR && "Function requires " ); +# endif + + d.vkDestroyVideoSessionParametersKHR( + m_device, static_cast( videoSessionParameters ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + VULKAN_HPP_INLINE void + Device::destroy( VideoSessionParametersKHR videoSessionParameters, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyVideoSessionParametersKHR( static_cast( m_device ), + static_cast( videoSessionParameters ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + VULKAN_HPP_INLINE void Device::destroy( VideoSessionParametersKHR videoSessionParameters, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyVideoSessionParametersKHR && "Function requires " ); +# endif + + d.vkDestroyVideoSessionParametersKHR( + m_device, static_cast( videoSessionParameters ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginVideoCodingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VideoBeginCodingInfoKHR * pBeginInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginVideoCodingKHR( static_cast( m_commandBuffer ), reinterpret_cast( pBeginInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginVideoCodingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VideoBeginCodingInfoKHR & beginInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginVideoCodingKHR && "Function requires " ); +# endif + + d.vkCmdBeginVideoCodingKHR( m_commandBuffer, reinterpret_cast( &beginInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndVideoCodingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VideoEndCodingInfoKHR * pEndCodingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndVideoCodingKHR( static_cast( m_commandBuffer ), reinterpret_cast( pEndCodingInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndVideoCodingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VideoEndCodingInfoKHR & endCodingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEndVideoCodingKHR && "Function requires " ); +# endif + + d.vkCmdEndVideoCodingKHR( m_commandBuffer, reinterpret_cast( &endCodingInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdControlVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdControlVideoCodingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::controlVideoCodingKHR( const VideoCodingControlInfoKHR * pCodingControlInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdControlVideoCodingKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pCodingControlInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdControlVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdControlVideoCodingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::controlVideoCodingKHR( const VideoCodingControlInfoKHR & codingControlInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdControlVideoCodingKHR && "Function requires " ); +# endif + + d.vkCmdControlVideoCodingKHR( m_commandBuffer, reinterpret_cast( &codingControlInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_decode_queue === + + // wrapper function for command vkCmdDecodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecodeVideoKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VideoDecodeInfoKHR * pDecodeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDecodeVideoKHR( static_cast( m_commandBuffer ), reinterpret_cast( pDecodeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDecodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecodeVideoKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VideoDecodeInfoKHR & decodeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDecodeVideoKHR && "Function requires " ); +# endif + + d.vkCmdDecodeVideoKHR( m_commandBuffer, reinterpret_cast( &decodeInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_transform_feedback === + + // wrapper function for command vkCmdBindTransformFeedbackBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTransformFeedbackBuffersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + const DeviceSize * pSizes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindTransformFeedbackBuffersEXT( static_cast( m_commandBuffer ), + firstBinding, + bindingCount, + reinterpret_cast( pBuffers ), + reinterpret_cast( pOffsets ), + reinterpret_cast( pSizes ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindTransformFeedbackBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTransformFeedbackBuffersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindTransformFeedbackBuffersEXT && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); + VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != offsets.size()" ); + } + if ( !sizes.empty() && buffers.size() != sizes.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != sizes.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBindTransformFeedbackBuffersEXT( m_commandBuffer, + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ), + reinterpret_cast( sizes.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginTransformFeedbackEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginTransformFeedbackEXT( uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const Buffer * pCounterBuffers, + const DeviceSize * pCounterBufferOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginTransformFeedbackEXT( static_cast( m_commandBuffer ), + firstCounterBuffer, + counterBufferCount, + reinterpret_cast( pCounterBuffers ), + reinterpret_cast( pCounterBufferOffsets ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginTransformFeedbackEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginTransformFeedbackEXT && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( counterBufferOffsets.empty() || counterBuffers.size() == counterBufferOffsets.size() ); +# else + if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::beginTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBeginTransformFeedbackEXT( m_commandBuffer, + firstCounterBuffer, + counterBuffers.size(), + reinterpret_cast( counterBuffers.data() ), + reinterpret_cast( counterBufferOffsets.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndTransformFeedbackEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndTransformFeedbackEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endTransformFeedbackEXT( uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const Buffer * pCounterBuffers, + const DeviceSize * pCounterBufferOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndTransformFeedbackEXT( static_cast( m_commandBuffer ), + firstCounterBuffer, + counterBufferCount, + reinterpret_cast( pCounterBuffers ), + reinterpret_cast( pCounterBufferOffsets ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndTransformFeedbackEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndTransformFeedbackEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEndTransformFeedbackEXT && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( counterBufferOffsets.empty() || counterBuffers.size() == counterBufferOffsets.size() ); +# else + if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::endTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdEndTransformFeedbackEXT( m_commandBuffer, + firstCounterBuffer, + counterBuffers.size(), + reinterpret_cast( counterBuffers.data() ), + reinterpret_cast( counterBufferOffsets.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQueryIndexedEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginQueryIndexedEXT( + QueryPool queryPool, uint32_t query, QueryControlFlags flags, uint32_t index, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginQueryIndexedEXT( + static_cast( m_commandBuffer ), static_cast( queryPool ), query, static_cast( flags ), index ); + } + + // wrapper function for command vkCmdEndQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQueryIndexedEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endQueryIndexedEXT( QueryPool queryPool, uint32_t query, uint32_t index, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndQueryIndexedEXT( static_cast( m_commandBuffer ), static_cast( queryPool ), query, index ); + } + + // wrapper function for command vkCmdDrawIndirectByteCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectByteCountEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectByteCountEXT( uint32_t instanceCount, + uint32_t firstInstance, + Buffer counterBuffer, + DeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndirectByteCountEXT( static_cast( m_commandBuffer ), + instanceCount, + firstInstance, + static_cast( counterBuffer ), + static_cast( counterBufferOffset ), + counterOffset, + vertexStride ); + } + + //=== VK_NVX_binary_import === + + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCuModuleNVX( const CuModuleCreateInfoNVX * pCreateInfo, + const AllocationCallbacks * pAllocator, + CuModuleNVX * pModule, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateCuModuleNVX( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pModule ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createCuModuleNVX( const CuModuleCreateInfoNVX & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCuModuleNVX && "Function requires " ); +# endif + + CuModuleNVX module; + Result result = static_cast( d.vkCreateCuModuleNVX( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &module ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCuModuleNVX" ); + + return detail::createResultValueType( result, std::move( module ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createCuModuleNVXUnique( const CuModuleCreateInfoNVX & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCuModuleNVX && "Function requires " ); +# endif + + CuModuleNVX module; + Result result = static_cast( d.vkCreateCuModuleNVX( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &module ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCuModuleNVXUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( module, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCuFunctionNVX( const CuFunctionCreateInfoNVX * pCreateInfo, + const AllocationCallbacks * pAllocator, + CuFunctionNVX * pFunction, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateCuFunctionNVX( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pFunction ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createCuFunctionNVX( const CuFunctionCreateInfoNVX & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCuFunctionNVX && "Function requires " ); +# endif + + CuFunctionNVX function; + Result result = static_cast( d.vkCreateCuFunctionNVX( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &function ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCuFunctionNVX" ); + + return detail::createResultValueType( result, std::move( function ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createCuFunctionNVXUnique( const CuFunctionCreateInfoNVX & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCuFunctionNVX && "Function requires " ); +# endif + + CuFunctionNVX function; + Result result = static_cast( d.vkCreateCuFunctionNVX( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &function ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCuFunctionNVXUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( function, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + VULKAN_HPP_INLINE void Device::destroyCuModuleNVX( CuModuleNVX module, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCuModuleNVX( + static_cast( m_device ), static_cast( module ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + VULKAN_HPP_INLINE void + Device::destroyCuModuleNVX( CuModuleNVX module, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCuModuleNVX && "Function requires " ); +# endif + + d.vkDestroyCuModuleNVX( m_device, static_cast( module ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + VULKAN_HPP_INLINE void Device::destroy( CuModuleNVX module, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCuModuleNVX( + static_cast( m_device ), static_cast( module ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + VULKAN_HPP_INLINE void Device::destroy( CuModuleNVX module, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCuModuleNVX && "Function requires " ); +# endif + + d.vkDestroyCuModuleNVX( m_device, static_cast( module ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + VULKAN_HPP_INLINE void + Device::destroyCuFunctionNVX( CuFunctionNVX function, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCuFunctionNVX( + static_cast( m_device ), static_cast( function ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + VULKAN_HPP_INLINE void + Device::destroyCuFunctionNVX( CuFunctionNVX function, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCuFunctionNVX && "Function requires " ); +# endif + + d.vkDestroyCuFunctionNVX( m_device, static_cast( function ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + VULKAN_HPP_INLINE void Device::destroy( CuFunctionNVX function, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCuFunctionNVX( + static_cast( m_device ), static_cast( function ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + VULKAN_HPP_INLINE void Device::destroy( CuFunctionNVX function, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCuFunctionNVX && "Function requires " ); +# endif + + d.vkDestroyCuFunctionNVX( m_device, static_cast( function ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCuLaunchKernelNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCuLaunchKernelNVX.html + template + VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const CuLaunchInfoNVX * pLaunchInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCuLaunchKernelNVX( static_cast( m_commandBuffer ), reinterpret_cast( pLaunchInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCuLaunchKernelNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCuLaunchKernelNVX.html + template + VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const CuLaunchInfoNVX & launchInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCuLaunchKernelNVX && "Function requires " ); +# endif + + d.vkCmdCuLaunchKernelNVX( m_commandBuffer, reinterpret_cast( &launchInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NVX_image_view_handle === + + // wrapper function for command vkGetImageViewHandleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandleNVX.html + template + VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX( const ImageViewHandleInfoNVX * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetImageViewHandleNVX( static_cast( m_device ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewHandleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandleNVX.html + template + VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX( const ImageViewHandleInfoNVX & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageViewHandleNVX && "Function requires " ); +# endif + + uint32_t result = d.vkGetImageViewHandleNVX( m_device, reinterpret_cast( &info ) ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageViewHandle64NVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandle64NVX.html + template + VULKAN_HPP_INLINE uint64_t Device::getImageViewHandle64NVX( const ImageViewHandleInfoNVX * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetImageViewHandle64NVX( static_cast( m_device ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewHandle64NVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandle64NVX.html + template + VULKAN_HPP_INLINE uint64_t Device::getImageViewHandle64NVX( const ImageViewHandleInfoNVX & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageViewHandle64NVX && "Function requires " ); +# endif + + uint64_t result = d.vkGetImageViewHandle64NVX( m_device, reinterpret_cast( &info ) ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageViewAddressNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewAddressNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getImageViewAddressNVX( ImageView imageView, + ImageViewAddressPropertiesNVX * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetImageViewAddressNVX( + static_cast( m_device ), static_cast( imageView ), reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewAddressNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewAddressNVX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getImageViewAddressNVX( ImageView imageView, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageViewAddressNVX && "Function requires " ); +# endif + + ImageViewAddressPropertiesNVX properties; + Result result = static_cast( + d.vkGetImageViewAddressNVX( m_device, static_cast( imageView ), reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getImageViewAddressNVX" ); + + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountAMD.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountAMD( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndirectCountAMD( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirectCountAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountAMD.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountAMD( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndexedIndirectCountAMD( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_AMD_shader_info === + + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getShaderInfoAMD( Pipeline pipeline, + ShaderStageFlagBits shaderStage, + ShaderInfoTypeAMD infoType, + size_t * pInfoSize, + void * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetShaderInfoAMD( static_cast( m_device ), + static_cast( pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + pInfoSize, + pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getShaderInfoAMD( Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetShaderInfoAMD && "Function requires " ); +# endif + + std::vector info; + size_t infoSize; + Result result; + do + { + result = static_cast( d.vkGetShaderInfoAMD( m_device, + static_cast( pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + &infoSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && infoSize ) + { + info.resize( infoSize ); + result = static_cast( d.vkGetShaderInfoAMD( m_device, + static_cast( pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + &infoSize, + reinterpret_cast( info.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderInfoAMD" ); + VULKAN_HPP_ASSERT( infoSize <= info.size() ); + if ( infoSize < info.size() ) + { + info.resize( infoSize ); + } + return detail::createResultValueType( result, std::move( info ) ); + } + + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::getShaderInfoAMD( + Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetShaderInfoAMD && "Function requires " ); +# endif + + std::vector info( uint8_tAllocator ); + size_t infoSize; + Result result; + do + { + result = static_cast( d.vkGetShaderInfoAMD( m_device, + static_cast( pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + &infoSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && infoSize ) + { + info.resize( infoSize ); + result = static_cast( d.vkGetShaderInfoAMD( m_device, + static_cast( pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + &infoSize, + reinterpret_cast( info.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderInfoAMD" ); + VULKAN_HPP_ASSERT( infoSize <= info.size() ); + if ( infoSize < info.size() ) + { + info.resize( infoSize ); + } + return detail::createResultValueType( result, std::move( info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_dynamic_rendering === + + // wrapper function for command vkCmdBeginRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const RenderingInfo * pRenderingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginRenderingKHR( static_cast( m_commandBuffer ), reinterpret_cast( pRenderingInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const RenderingInfo & renderingInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginRenderingKHR && "Function requires or " ); +# endif + + d.vkCmdBeginRenderingKHR( m_commandBuffer, reinterpret_cast( &renderingInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderingKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRenderingKHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndRenderingKHR( static_cast( m_commandBuffer ) ); + } + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createStreamDescriptorSurfaceGGP( const StreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateStreamDescriptorSurfaceGGP( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createStreamDescriptorSurfaceGGP( + const StreamDescriptorSurfaceCreateInfoGGP & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateStreamDescriptorSurfaceGGP && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateStreamDescriptorSurfaceGGP( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createStreamDescriptorSurfaceGGP" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createStreamDescriptorSurfaceGGPUnique( + const StreamDescriptorSurfaceCreateInfoGGP & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateStreamDescriptorSurfaceGGP && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateStreamDescriptorSurfaceGGP( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createStreamDescriptorSurfaceGGPUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getExternalImageFormatPropertiesNV( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags, + ExternalMemoryHandleTypeFlagsNV externalHandleType, + ExternalImageFormatPropertiesNV * pExternalImageFormatProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceExternalImageFormatPropertiesNV( static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( tiling ), + static_cast( usage ), + static_cast( flags ), + static_cast( externalHandleType ), + reinterpret_cast( pExternalImageFormatProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getExternalImageFormatPropertiesNV( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags, + ExternalMemoryHandleTypeFlagsNV externalHandleType, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalImageFormatPropertiesNV && + "Function requires " ); +# endif + + ExternalImageFormatPropertiesNV externalImageFormatProperties; + Result result = static_cast( + d.vkGetPhysicalDeviceExternalImageFormatPropertiesNV( m_physicalDevice, + static_cast( format ), + static_cast( type ), + static_cast( tiling ), + static_cast( usage ), + static_cast( flags ), + static_cast( externalHandleType ), + reinterpret_cast( &externalImageFormatProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getExternalImageFormatPropertiesNV" ); + + return detail::createResultValueType( result, std::move( externalImageFormatProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryWin32HandleNV( DeviceMemory memory, + ExternalMemoryHandleTypeFlagsNV handleType, + HANDLE * pHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryWin32HandleNV( + static_cast( m_device ), static_cast( memory ), static_cast( handleType ), pHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryWin32HandleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryWin32HandleNV( DeviceMemory memory, ExternalMemoryHandleTypeFlagsNV handleType, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryWin32HandleNV && "Function requires " ); +# endif + + HANDLE handle; + Result result = static_cast( + d.vkGetMemoryWin32HandleNV( m_device, static_cast( memory ), static_cast( handleType ), &handle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandleNV" ); + + return detail::createResultValueType( result, std::move( handle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getFeatures2KHR( PhysicalDeviceFeatures2 * pFeatures, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceFeatures2KHR( static_cast( m_physicalDevice ), reinterpret_cast( pFeatures ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceFeatures2 PhysicalDevice::getFeatures2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFeatures2KHR && + "Function requires or " ); +# endif + + PhysicalDeviceFeatures2 features; + d.vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast( &features ) ); + + return features; + } + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFeatures2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + PhysicalDeviceFeatures2 & features = structureChain.template get(); + d.vkGetPhysicalDeviceFeatures2KHR( m_physicalDevice, reinterpret_cast( &features ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getProperties2KHR( PhysicalDeviceProperties2 * pProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceProperties2KHR( static_cast( m_physicalDevice ), reinterpret_cast( pProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceProperties2 PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceProperties2KHR && + "Function requires or " ); +# endif + + PhysicalDeviceProperties2 properties; + d.vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast( &properties ) ); + + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceProperties2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + PhysicalDeviceProperties2 & properties = structureChain.template get(); + d.vkGetPhysicalDeviceProperties2KHR( m_physicalDevice, reinterpret_cast( &properties ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_INLINE void + PhysicalDevice::getFormatProperties2KHR( Format format, FormatProperties2 * pFormatProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceFormatProperties2KHR( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( pFormatProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE FormatProperties2 PhysicalDevice::getFormatProperties2KHR( Format format, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFormatProperties2KHR && + "Function requires or " ); +# endif + + FormatProperties2 formatProperties; + d.vkGetPhysicalDeviceFormatProperties2KHR( + m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return formatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFormatProperties2KHR( Format format, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFormatProperties2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + FormatProperties2 & formatProperties = structureChain.template get(); + d.vkGetPhysicalDeviceFormatProperties2KHR( + m_physicalDevice, static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + ImageFormatProperties2 * pImageFormatProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pImageFormatInfo ), + reinterpret_cast( pImageFormatProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceImageFormatProperties2KHR && + "Function requires or " ); +# endif + + ImageFormatProperties2 imageFormatProperties; + Result result = + static_cast( d.vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); + + return detail::createResultValueType( result, std::move( imageFormatProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceImageFormatProperties2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); + Result result = + static_cast( d.vkGetPhysicalDeviceImageFormatProperties2KHR( m_physicalDevice, + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyProperties2KHR( uint32_t * pQueueFamilyPropertyCount, + QueueFamilyProperties2 * pQueueFamilyProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( + static_cast( m_physicalDevice ), pQueueFamilyPropertyCount, reinterpret_cast( pQueueFamilyProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2KHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2KHR && + "Function requires or " ); +# endif + + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2KHR && + "Function requires or " ); +# endif + + std::vector queueFamilyProperties( queueFamilyProperties2Allocator ); + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2KHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2KHR && + "Function requires or " ); +# endif + + std::vector structureChains; + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + structureChains.resize( queueFamilyPropertyCount ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; + } + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + structureChains.resize( queueFamilyPropertyCount ); + } + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + structureChains[i].template get() = queueFamilyProperties[i]; + } + return structureChains; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyProperties2KHR && + "Function requires or " ); +# endif + + std::vector structureChains( structureChainAllocator ); + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( m_physicalDevice, &queueFamilyPropertyCount, nullptr ); + structureChains.resize( queueFamilyPropertyCount ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; + } + d.vkGetPhysicalDeviceQueueFamilyProperties2KHR( + m_physicalDevice, &queueFamilyPropertyCount, reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + structureChains.resize( queueFamilyPropertyCount ); + } + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + structureChains[i].template get() = queueFamilyProperties[i]; + } + return structureChains; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getMemoryProperties2KHR( PhysicalDeviceMemoryProperties2 * pMemoryProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceMemoryProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pMemoryProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PhysicalDeviceMemoryProperties2 PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceMemoryProperties2KHR && + "Function requires or " ); +# endif + + PhysicalDeviceMemoryProperties2 memoryProperties; + d.vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); + + return memoryProperties; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceMemoryProperties2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + PhysicalDeviceMemoryProperties2 & memoryProperties = structureChain.template get(); + d.vkGetPhysicalDeviceMemoryProperties2KHR( m_physicalDevice, reinterpret_cast( &memoryProperties ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, + uint32_t * pPropertyCount, + SparseImageFormatProperties2 * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pFormatInfo ), + pPropertyCount, + reinterpret_cast( pProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR && + "Function requires or " ); +# endif + + std::vector properties; + uint32_t propertyCount; + d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( + m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); + properties.resize( propertyCount ); + d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, + reinterpret_cast( &formatInfo ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, + SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR && + "Function requires or " ); +# endif + + std::vector properties( sparseImageFormatProperties2Allocator ); + uint32_t propertyCount; + d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( + m_physicalDevice, reinterpret_cast( &formatInfo ), &propertyCount, nullptr ); + properties.resize( propertyCount ); + d.vkGetPhysicalDeviceSparseImageFormatProperties2KHR( m_physicalDevice, + reinterpret_cast( &formatInfo ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_device_group === + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeaturesKHR.html + template + VULKAN_HPP_INLINE void Device::getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + PeerMemoryFeatureFlags * pPeerMemoryFeatures, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceGroupPeerMemoryFeaturesKHR( + static_cast( m_device ), heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( pPeerMemoryFeatures ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupPeerMemoryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeaturesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PeerMemoryFeatureFlags Device::getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceGroupPeerMemoryFeaturesKHR && + "Function requires or " ); +# endif + + PeerMemoryFeatureFlags peerMemoryFeatures; + d.vkGetDeviceGroupPeerMemoryFeaturesKHR( + m_device, heapIndex, localDeviceIndex, remoteDeviceIndex, reinterpret_cast( &peerMemoryFeatures ) ); + + return peerMemoryFeatures; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDeviceMaskKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMaskKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDeviceMaskKHR( uint32_t deviceMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDeviceMaskKHR( static_cast( m_commandBuffer ), deviceMask ); + } + + // wrapper function for command vkCmdDispatchBaseKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBaseKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchBaseKHR( uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchBaseKHR( static_cast( m_commandBuffer ), baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); + } + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createViSurfaceNN( const ViSurfaceCreateInfoNN * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateViSurfaceNN( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createViSurfaceNN( const ViSurfaceCreateInfoNN & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateViSurfaceNN && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateViSurfaceNN( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createViSurfaceNN" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createViSurfaceNNUnique( const ViSurfaceCreateInfoNN & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateViSurfaceNN && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateViSurfaceNN( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createViSurfaceNNUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_maintenance1 === + + // wrapper function for command vkTrimCommandPoolKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPoolKHR.html + template + VULKAN_HPP_INLINE void Device::trimCommandPoolKHR( CommandPool commandPool, CommandPoolTrimFlags flags, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkTrimCommandPoolKHR( static_cast( m_device ), static_cast( commandPool ), static_cast( flags ) ); + } + + //=== VK_KHR_device_group_creation === + + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::enumeratePhysicalDeviceGroupsKHR( uint32_t * pPhysicalDeviceGroupCount, + PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkEnumeratePhysicalDeviceGroupsKHR( static_cast( m_instance ), + pPhysicalDeviceGroupCount, + reinterpret_cast( pPhysicalDeviceGroupProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::enumeratePhysicalDeviceGroupsKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDeviceGroupsKHR && + "Function requires or " ); +# endif + + std::vector physicalDeviceGroupProperties; + uint32_t physicalDeviceGroupCount; + Result result; + do + { + result = static_cast( d.vkEnumeratePhysicalDeviceGroupsKHR( m_instance, &physicalDeviceGroupCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + result = static_cast( d.vkEnumeratePhysicalDeviceGroupsKHR( + m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" ); + VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); + if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + } + return detail::createResultValueType( result, std::move( physicalDeviceGroupProperties ) ); + } + + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::enumeratePhysicalDeviceGroupsKHR( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDeviceGroupsKHR && + "Function requires or " ); +# endif + + std::vector physicalDeviceGroupProperties( physicalDeviceGroupPropertiesAllocator ); + uint32_t physicalDeviceGroupCount; + Result result; + do + { + result = static_cast( d.vkEnumeratePhysicalDeviceGroupsKHR( m_instance, &physicalDeviceGroupCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + result = static_cast( d.vkEnumeratePhysicalDeviceGroupsKHR( + m_instance, &physicalDeviceGroupCount, reinterpret_cast( physicalDeviceGroupProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" ); + VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); + if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + } + return detail::createResultValueType( result, std::move( physicalDeviceGroupProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalBufferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferPropertiesKHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, + ExternalBufferProperties * pExternalBufferProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalBufferPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalBufferInfo ), + reinterpret_cast( pExternalBufferProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalBufferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalBufferProperties + PhysicalDevice::getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfo & externalBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalBufferPropertiesKHR && + "Function requires or " ); +# endif + + ExternalBufferProperties externalBufferProperties; + d.vkGetPhysicalDeviceExternalBufferPropertiesKHR( m_physicalDevice, + reinterpret_cast( &externalBufferInfo ), + reinterpret_cast( &externalBufferProperties ) ); + + return externalBufferProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( pGetWin32HandleInfo ), pHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryWin32HandleKHR && "Function requires " ); +# endif + + HANDLE handle; + Result result = + static_cast( d.vkGetMemoryWin32HandleKHR( m_device, reinterpret_cast( &getWin32HandleInfo ), &handle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandleKHR" ); + + return detail::createResultValueType( result, std::move( handle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandlePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + MemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryWin32HandlePropertiesKHR( static_cast( m_device ), + static_cast( handleType ), + handle, + reinterpret_cast( pMemoryWin32HandleProperties ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandlePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryWin32HandlePropertiesKHR && "Function requires " ); +# endif + + MemoryWin32HandlePropertiesKHR memoryWin32HandleProperties; + Result result = + static_cast( d.vkGetMemoryWin32HandlePropertiesKHR( m_device, + static_cast( handleType ), + handle, + reinterpret_cast( &memoryWin32HandleProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandlePropertiesKHR" ); + + return detail::createResultValueType( result, std::move( memoryWin32HandleProperties ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + + // wrapper function for command vkGetMemoryFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryFdKHR( const MemoryGetFdInfoKHR * pGetFdInfo, + int * pFd, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryFdKHR( static_cast( m_device ), reinterpret_cast( pGetFdInfo ), pFd ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryFdKHR && "Function requires " ); +# endif + + int fd; + Result result = static_cast( d.vkGetMemoryFdKHR( m_device, reinterpret_cast( &getFdInfo ), &fd ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdKHR" ); + + return detail::createResultValueType( result, std::move( fd ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, + int fd, + MemoryFdPropertiesKHR * pMemoryFdProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryFdPropertiesKHR( static_cast( m_device ), + static_cast( handleType ), + fd, + reinterpret_cast( pMemoryFdProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, int fd, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryFdPropertiesKHR && "Function requires " ); +# endif + + MemoryFdPropertiesKHR memoryFdProperties; + Result result = static_cast( d.vkGetMemoryFdPropertiesKHR( + m_device, static_cast( handleType ), fd, reinterpret_cast( &memoryFdProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdPropertiesKHR" ); + + return detail::createResultValueType( result, std::move( memoryFdProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_external_semaphore_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, + ExternalSemaphoreProperties * pExternalSemaphoreProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalSemaphoreInfo ), + reinterpret_cast( pExternalSemaphoreProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalSemaphoreProperties PhysicalDevice::getExternalSemaphorePropertiesKHR( + const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR && + "Function requires or " ); +# endif + + ExternalSemaphoreProperties externalSemaphoreProperties; + d.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( m_physicalDevice, + reinterpret_cast( &externalSemaphoreInfo ), + reinterpret_cast( &externalSemaphoreProperties ) ); + + return externalSemaphoreProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + + // wrapper function for command vkImportSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importSemaphoreWin32HandleKHR( + const ImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkImportSemaphoreWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( pImportSemaphoreWin32HandleInfo ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkImportSemaphoreWin32HandleKHR && "Function requires " ); +# endif + + Result result = static_cast( + d.vkImportSemaphoreWin32HandleKHR( m_device, reinterpret_cast( &importSemaphoreWin32HandleInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreWin32HandleKHR" ); + + return detail::createResultValueType( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSemaphoreWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSemaphoreWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( pGetWin32HandleInfo ), pHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSemaphoreWin32HandleKHR && "Function requires " ); +# endif + + HANDLE handle; + Result result = static_cast( + d.vkGetSemaphoreWin32HandleKHR( m_device, reinterpret_cast( &getWin32HandleInfo ), &handle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreWin32HandleKHR" ); + + return detail::createResultValueType( result, std::move( handle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + + // wrapper function for command vkImportSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkImportSemaphoreFdKHR( static_cast( m_device ), reinterpret_cast( pImportSemaphoreFdInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkImportSemaphoreFdKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkImportSemaphoreFdKHR( m_device, reinterpret_cast( &importSemaphoreFdInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreFdKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR * pGetFdInfo, + int * pFd, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetSemaphoreFdKHR( static_cast( m_device ), reinterpret_cast( pGetFdInfo ), pFd ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSemaphoreFdKHR && "Function requires " ); +# endif + + int fd; + Result result = static_cast( d.vkGetSemaphoreFdKHR( m_device, reinterpret_cast( &getFdInfo ), &fd ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreFdKHR" ); + + return detail::createResultValueType( result, std::move( fd ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_push_descriptor === + + // wrapper function for command vkCmdPushDescriptorSetKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const WriteDescriptorSet * pDescriptorWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSetKHR( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + set, + descriptorWriteCount, + reinterpret_cast( pDescriptorWrites ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushDescriptorSetKHR && "Function requires or " ); +# endif + + d.vkCmdPushDescriptorSetKHR( m_commandBuffer, + static_cast( pipelineBindPoint ), + static_cast( layout ), + set, + descriptorWrites.size(), + reinterpret_cast( descriptorWrites.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( + DescriptorUpdateTemplate descriptorUpdateTemplate, PipelineLayout layout, uint32_t set, const void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSetWithTemplateKHR( static_cast( m_commandBuffer ), + static_cast( descriptorUpdateTemplate ), + static_cast( layout ), + set, + pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate, + PipelineLayout layout, + uint32_t set, + DataType const & data, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkCmdPushDescriptorSetWithTemplateKHR && + "Function requires or or " ); +# endif + + d.vkCmdPushDescriptorSetWithTemplateKHR( m_commandBuffer, + static_cast( descriptorUpdateTemplate ), + static_cast( layout ), + set, + reinterpret_cast( &data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_conditional_rendering === + + // wrapper function for command vkCmdBeginConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginConditionalRenderingEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginConditionalRenderingEXT( static_cast( m_commandBuffer ), + reinterpret_cast( pConditionalRenderingBegin ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginConditionalRenderingEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginConditionalRenderingEXT && "Function requires " ); +# endif + + d.vkCmdBeginConditionalRenderingEXT( m_commandBuffer, reinterpret_cast( &conditionalRenderingBegin ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndConditionalRenderingEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endConditionalRenderingEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndConditionalRenderingEXT( static_cast( m_commandBuffer ) ); + } + + //=== VK_KHR_descriptor_update_template === + + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorUpdateTemplate * pDescriptorUpdateTemplate, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDescriptorUpdateTemplateKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pDescriptorUpdateTemplate ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createDescriptorUpdateTemplateKHR( + const DescriptorUpdateTemplateCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorUpdateTemplateKHR && + "Function requires or " ); +# endif + + DescriptorUpdateTemplate descriptorUpdateTemplate; + Result result = static_cast( d.vkCreateDescriptorUpdateTemplateKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorUpdateTemplate ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplateKHR" ); + + return detail::createResultValueType( result, std::move( descriptorUpdateTemplate ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createDescriptorUpdateTemplateKHRUnique( const DescriptorUpdateTemplateCreateInfo & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDescriptorUpdateTemplateKHR && + "Function requires or " ); +# endif + + DescriptorUpdateTemplate descriptorUpdateTemplate; + Result result = static_cast( d.vkCreateDescriptorUpdateTemplateKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorUpdateTemplate ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDescriptorUpdateTemplateKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( descriptorUpdateTemplate, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDescriptorUpdateTemplateKHR( static_cast( m_device ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDescriptorUpdateTemplateKHR && + "Function requires or " ); +# endif + + d.vkDestroyDescriptorUpdateTemplateKHR( + m_device, static_cast( descriptorUpdateTemplate ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplateKHR.html + template + VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplateKHR( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + const void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUpdateDescriptorSetWithTemplateKHR( static_cast( m_device ), + static_cast( descriptorSet ), + static_cast( descriptorUpdateTemplate ), + pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplateKHR.html + template + VULKAN_HPP_INLINE void Device::updateDescriptorSetWithTemplateKHR( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + DataType const & data, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUpdateDescriptorSetWithTemplateKHR && + "Function requires or " ); +# endif + + d.vkUpdateDescriptorSetWithTemplateKHR( m_device, + static_cast( descriptorSet ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( &data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_clip_space_w_scaling === + + // wrapper function for command vkCmdSetViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, + uint32_t viewportCount, + const ViewportWScalingNV * pViewportWScalings, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewportWScalingNV( + static_cast( m_commandBuffer ), firstViewport, viewportCount, reinterpret_cast( pViewportWScalings ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, + ArrayProxy const & viewportWScalings, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetViewportWScalingNV && "Function requires " ); +# endif + + d.vkCmdSetViewportWScalingNV( + m_commandBuffer, firstViewport, viewportWScalings.size(), reinterpret_cast( viewportWScalings.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_direct_mode_display === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseDisplayEXT.html + template + VULKAN_HPP_INLINE Result PhysicalDevice::releaseDisplayEXT( DisplayKHR display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkReleaseDisplayEXT( static_cast( m_physicalDevice ), static_cast( display ) ) ); + } +#else + // wrapper function for command vkReleaseDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseDisplayEXT.html + template + VULKAN_HPP_INLINE void PhysicalDevice::releaseDisplayEXT( DisplayKHR display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleaseDisplayEXT && "Function requires " ); +# endif + + d.vkReleaseDisplayEXT( m_physicalDevice, static_cast( display ) ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + + // wrapper function for command vkAcquireXlibDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireXlibDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::acquireXlibDisplayEXT( Display * dpy, + DisplayKHR display, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAcquireXlibDisplayEXT( static_cast( m_physicalDevice ), dpy, static_cast( display ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireXlibDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireXlibDisplayEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::acquireXlibDisplayEXT( Display & dpy, DisplayKHR display, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireXlibDisplayEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkAcquireXlibDisplayEXT( m_physicalDevice, &dpy, static_cast( display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireXlibDisplayEXT" ); + + return detail::createResultValueType( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getRandROutputDisplayEXT( Display * dpy, RROutput rrOutput, DisplayKHR * pDisplay, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetRandROutputDisplayEXT( static_cast( m_physicalDevice ), dpy, rrOutput, reinterpret_cast( pDisplay ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRandROutputDisplayEXT && "Function requires " ); +# endif + + DisplayKHR display; + Result result = static_cast( d.vkGetRandROutputDisplayEXT( m_physicalDevice, &dpy, rrOutput, reinterpret_cast( &display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getRandROutputDisplayEXT" ); + + return detail::createResultValueType( result, std::move( display ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getRandROutputDisplayEXTUnique( Display & dpy, RROutput rrOutput, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRandROutputDisplayEXT && "Function requires " ); +# endif + + DisplayKHR display; + Result result = static_cast( d.vkGetRandROutputDisplayEXT( m_physicalDevice, &dpy, rrOutput, reinterpret_cast( &display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getRandROutputDisplayEXTUnique" ); + + return detail::createResultValueType( result, UniqueHandle( display, detail::ObjectRelease( *this, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilities2EXT( SurfaceKHR surface, + SurfaceCapabilities2EXT * pSurfaceCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2EXT( static_cast( m_physicalDevice ), + static_cast( surface ), + reinterpret_cast( pSurfaceCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getSurfaceCapabilities2EXT( SurfaceKHR surface, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceCapabilities2EXT && + "Function requires " ); +# endif + + SurfaceCapabilities2EXT surfaceCapabilities; + Result result = static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2EXT( + m_physicalDevice, static_cast( surface ), reinterpret_cast( &surfaceCapabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2EXT" ); + + return detail::createResultValueType( result, std::move( surfaceCapabilities ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_display_control === + + // wrapper function for command vkDisplayPowerControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDisplayPowerControlEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::displayPowerControlEXT( DisplayKHR display, + const DisplayPowerInfoEXT * pDisplayPowerInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkDisplayPowerControlEXT( + static_cast( m_device ), static_cast( display ), reinterpret_cast( pDisplayPowerInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDisplayPowerControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDisplayPowerControlEXT.html + template + VULKAN_HPP_INLINE typename ResultValueType::type + Device::displayPowerControlEXT( DisplayKHR display, const DisplayPowerInfoEXT & displayPowerInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDisplayPowerControlEXT && "Function requires " ); +# endif + + Result result = static_cast( + d.vkDisplayPowerControlEXT( m_device, static_cast( display ), reinterpret_cast( &displayPowerInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::displayPowerControlEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::registerEventEXT( const DeviceEventInfoEXT * pDeviceEventInfo, + const AllocationCallbacks * pAllocator, + Fence * pFence, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkRegisterDeviceEventEXT( static_cast( m_device ), + reinterpret_cast( pDeviceEventInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pFence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::registerEventEXT( const DeviceEventInfoEXT & deviceEventInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkRegisterDeviceEventEXT && "Function requires " ); +# endif + + Fence fence; + Result result = static_cast( d.vkRegisterDeviceEventEXT( m_device, + reinterpret_cast( &deviceEventInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::registerEventEXT" ); + + return detail::createResultValueType( result, std::move( fence ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::registerEventEXTUnique( const DeviceEventInfoEXT & deviceEventInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkRegisterDeviceEventEXT && "Function requires " ); +# endif + + Fence fence; + Result result = static_cast( d.vkRegisterDeviceEventEXT( m_device, + reinterpret_cast( &deviceEventInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::registerEventEXTUnique" ); + + return detail::createResultValueType( result, UniqueHandle( fence, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::registerDisplayEventEXT( DisplayKHR display, + const DisplayEventInfoEXT * pDisplayEventInfo, + const AllocationCallbacks * pAllocator, + Fence * pFence, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkRegisterDisplayEventEXT( static_cast( m_device ), + static_cast( display ), + reinterpret_cast( pDisplayEventInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pFence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::registerDisplayEventEXT( DisplayKHR display, + const DisplayEventInfoEXT & displayEventInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkRegisterDisplayEventEXT && "Function requires " ); +# endif + + Fence fence; + Result result = static_cast( d.vkRegisterDisplayEventEXT( m_device, + static_cast( display ), + reinterpret_cast( &displayEventInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::registerDisplayEventEXT" ); + + return detail::createResultValueType( result, std::move( fence ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::registerDisplayEventEXTUnique( + DisplayKHR display, const DisplayEventInfoEXT & displayEventInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkRegisterDisplayEventEXT && "Function requires " ); +# endif + + Fence fence; + Result result = static_cast( d.vkRegisterDisplayEventEXT( m_device, + static_cast( display ), + reinterpret_cast( &displayEventInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::registerDisplayEventEXTUnique" ); + + return detail::createResultValueType( result, UniqueHandle( fence, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSwapchainCounterEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainCounterEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainCounterEXT( SwapchainKHR swapchain, + SurfaceCounterFlagBitsEXT counter, + uint64_t * pCounterValue, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSwapchainCounterEXT( + static_cast( m_device ), static_cast( swapchain ), static_cast( counter ), pCounterValue ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSwapchainCounterEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainCounterEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getSwapchainCounterEXT( SwapchainKHR swapchain, SurfaceCounterFlagBitsEXT counter, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSwapchainCounterEXT && "Function requires " ); +# endif + + uint64_t counterValue; + Result result = static_cast( + d.vkGetSwapchainCounterEXT( m_device, static_cast( swapchain ), static_cast( counter ), &counterValue ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainCounterEXT" ); + + return detail::createResultValueType( result, std::move( counterValue ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_GOOGLE_display_timing === + + // wrapper function for command vkGetRefreshCycleDurationGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRefreshCycleDurationGOOGLE.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain, + RefreshCycleDurationGOOGLE * pDisplayTimingProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetRefreshCycleDurationGOOGLE( static_cast( m_device ), + static_cast( swapchain ), + reinterpret_cast( pDisplayTimingProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRefreshCycleDurationGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRefreshCycleDurationGOOGLE.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRefreshCycleDurationGOOGLE && "Function requires " ); +# endif + + RefreshCycleDurationGOOGLE displayTimingProperties; + Result result = static_cast( d.vkGetRefreshCycleDurationGOOGLE( + m_device, static_cast( swapchain ), reinterpret_cast( &displayTimingProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRefreshCycleDurationGOOGLE" ); + + return detail::createResultValueType( result, std::move( displayTimingProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, + uint32_t * pPresentationTimingCount, + PastPresentationTimingGOOGLE * pPresentationTimings, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPastPresentationTimingGOOGLE( static_cast( m_device ), + static_cast( swapchain ), + pPresentationTimingCount, + reinterpret_cast( pPresentationTimings ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPastPresentationTimingGOOGLE && "Function requires " ); +# endif + + std::vector presentationTimings; + uint32_t presentationTimingCount; + Result result; + do + { + result = + static_cast( d.vkGetPastPresentationTimingGOOGLE( m_device, static_cast( swapchain ), &presentationTimingCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentationTimingCount ) + { + presentationTimings.resize( presentationTimingCount ); + result = static_cast( d.vkGetPastPresentationTimingGOOGLE( m_device, + static_cast( swapchain ), + &presentationTimingCount, + reinterpret_cast( presentationTimings.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPastPresentationTimingGOOGLE" ); + VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() ); + if ( presentationTimingCount < presentationTimings.size() ) + { + presentationTimings.resize( presentationTimingCount ); + } + return detail::createResultValueType( result, std::move( presentationTimings ) ); + } + + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, + PastPresentationTimingGOOGLEAllocator & pastPresentationTimingGOOGLEAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPastPresentationTimingGOOGLE && "Function requires " ); +# endif + + std::vector presentationTimings( pastPresentationTimingGOOGLEAllocator ); + uint32_t presentationTimingCount; + Result result; + do + { + result = + static_cast( d.vkGetPastPresentationTimingGOOGLE( m_device, static_cast( swapchain ), &presentationTimingCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentationTimingCount ) + { + presentationTimings.resize( presentationTimingCount ); + result = static_cast( d.vkGetPastPresentationTimingGOOGLE( m_device, + static_cast( swapchain ), + &presentationTimingCount, + reinterpret_cast( presentationTimings.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPastPresentationTimingGOOGLE" ); + VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() ); + if ( presentationTimingCount < presentationTimings.size() ) + { + presentationTimings.resize( presentationTimingCount ); + } + return detail::createResultValueType( result, std::move( presentationTimings ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_discard_rectangles === + + // wrapper function for command vkCmdSetDiscardRectangleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const Rect2D * pDiscardRectangles, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDiscardRectangleEXT( + static_cast( m_commandBuffer ), firstDiscardRectangle, discardRectangleCount, reinterpret_cast( pDiscardRectangles ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDiscardRectangleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, + ArrayProxy const & discardRectangles, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetDiscardRectangleEXT && "Function requires " ); +# endif + + d.vkCmdSetDiscardRectangleEXT( + m_commandBuffer, firstDiscardRectangle, discardRectangles.size(), reinterpret_cast( discardRectangles.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDiscardRectangleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEnableEXT( Bool32 discardRectangleEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDiscardRectangleEnableEXT( static_cast( m_commandBuffer ), static_cast( discardRectangleEnable ) ); + } + + // wrapper function for command vkCmdSetDiscardRectangleModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleModeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleModeEXT( DiscardRectangleModeEXT discardRectangleMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDiscardRectangleModeEXT( static_cast( m_commandBuffer ), static_cast( discardRectangleMode ) ); + } + + //=== VK_EXT_hdr_metadata === + + // wrapper function for command vkSetHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetHdrMetadataEXT.html + template + VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( uint32_t swapchainCount, + const SwapchainKHR * pSwapchains, + const HdrMetadataEXT * pMetadata, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkSetHdrMetadataEXT( static_cast( m_device ), + swapchainCount, + reinterpret_cast( pSwapchains ), + reinterpret_cast( pMetadata ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetHdrMetadataEXT.html + template + VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( ArrayProxy const & swapchains, + ArrayProxy const & metadata, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetHdrMetadataEXT && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( swapchains.size() == metadata.size() ); +# else + if ( swapchains.size() != metadata.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::setHdrMetadataEXT: swapchains.size() != metadata.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkSetHdrMetadataEXT( m_device, + swapchains.size(), + reinterpret_cast( swapchains.data() ), + reinterpret_cast( metadata.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_create_renderpass2 === + + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRenderPass2KHR( const RenderPassCreateInfo2 * pCreateInfo, + const AllocationCallbacks * pAllocator, + RenderPass * pRenderPass, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateRenderPass2KHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pRenderPass ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createRenderPass2KHR( const RenderPassCreateInfo2 & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRenderPass2KHR && "Function requires or " ); +# endif + + RenderPass renderPass; + Result result = static_cast( d.vkCreateRenderPass2KHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2KHR" ); + + return detail::createResultValueType( result, std::move( renderPass ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createRenderPass2KHRUnique( const RenderPassCreateInfo2 & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRenderPass2KHR && "Function requires or " ); +# endif + + RenderPass renderPass; + Result result = static_cast( d.vkCreateRenderPass2KHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRenderPass2KHRUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( renderPass, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const RenderPassBeginInfo * pRenderPassBegin, + const SubpassBeginInfo * pSubpassBeginInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginRenderPass2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pRenderPassBegin ), + reinterpret_cast( pSubpassBeginInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const RenderPassBeginInfo & renderPassBegin, + const SubpassBeginInfo & subpassBeginInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginRenderPass2KHR && "Function requires or " ); +# endif + + d.vkCmdBeginRenderPass2KHR( + m_commandBuffer, reinterpret_cast( &renderPassBegin ), reinterpret_cast( &subpassBeginInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdNextSubpass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const SubpassBeginInfo * pSubpassBeginInfo, + const SubpassEndInfo * pSubpassEndInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdNextSubpass2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pSubpassBeginInfo ), + reinterpret_cast( pSubpassEndInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdNextSubpass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const SubpassBeginInfo & subpassBeginInfo, + const SubpassEndInfo & subpassEndInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdNextSubpass2KHR && "Function requires or " ); +# endif + + d.vkCmdNextSubpass2KHR( + m_commandBuffer, reinterpret_cast( &subpassBeginInfo ), reinterpret_cast( &subpassEndInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const SubpassEndInfo * pSubpassEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndRenderPass2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pSubpassEndInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const SubpassEndInfo & subpassEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEndRenderPass2KHR && "Function requires or " ); +# endif + + d.vkCmdEndRenderPass2KHR( m_commandBuffer, reinterpret_cast( &subpassEndInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_shared_presentable_image === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSwapchainStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainStatusKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainStatusKHR( SwapchainKHR swapchain, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSwapchainStatusKHR( static_cast( m_device ), static_cast( swapchain ) ) ); + } +#else + // wrapper function for command vkGetSwapchainStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainStatusKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSwapchainStatusKHR( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSwapchainStatusKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkGetSwapchainStatusKHR( m_device, static_cast( swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainStatusKHR", { Result::eSuccess, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_external_fence_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalFencePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFencePropertiesKHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, + ExternalFenceProperties * pExternalFenceProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalFencePropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalFenceInfo ), + reinterpret_cast( pExternalFenceProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalFencePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFencePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalFenceProperties + PhysicalDevice::getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfo & externalFenceInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalFencePropertiesKHR && + "Function requires or " ); +# endif + + ExternalFenceProperties externalFenceProperties; + d.vkGetPhysicalDeviceExternalFencePropertiesKHR( m_physicalDevice, + reinterpret_cast( &externalFenceInfo ), + reinterpret_cast( &externalFenceProperties ) ); + + return externalFenceProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + + // wrapper function for command vkImportFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkImportFenceWin32HandleKHR( static_cast( m_device ), + reinterpret_cast( pImportFenceWin32HandleInfo ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkImportFenceWin32HandleKHR && "Function requires " ); +# endif + + Result result = static_cast( + d.vkImportFenceWin32HandleKHR( m_device, reinterpret_cast( &importFenceWin32HandleInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceWin32HandleKHR" ); + + return detail::createResultValueType( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetFenceWin32HandleKHR( static_cast( m_device ), reinterpret_cast( pGetWin32HandleInfo ), pHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetFenceWin32HandleKHR && "Function requires " ); +# endif + + HANDLE handle; + Result result = + static_cast( d.vkGetFenceWin32HandleKHR( m_device, reinterpret_cast( &getWin32HandleInfo ), &handle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceWin32HandleKHR" ); + + return detail::createResultValueType( result, std::move( handle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + + // wrapper function for command vkImportFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importFenceFdKHR( const ImportFenceFdInfoKHR * pImportFenceFdInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkImportFenceFdKHR( static_cast( m_device ), reinterpret_cast( pImportFenceFdInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceFdKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkImportFenceFdKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkImportFenceFdKHR( m_device, reinterpret_cast( &importFenceFdInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceFdKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFenceFdKHR( const FenceGetFdInfoKHR * pGetFdInfo, + int * pFd, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetFenceFdKHR( static_cast( m_device ), reinterpret_cast( pGetFdInfo ), pFd ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetFenceFdKHR && "Function requires " ); +# endif + + int fd; + Result result = static_cast( d.vkGetFenceFdKHR( m_device, reinterpret_cast( &getFdInfo ), &fd ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceFdKHR" ); + + return detail::createResultValueType( result, std::move( fd ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_performance_query === + + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, + uint32_t * pCounterCount, + PerformanceCounterKHR * pCounters, + PerformanceCounterDescriptionKHR * pCounterDescriptions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( static_cast( m_physicalDevice ), + queueFamilyIndex, + pCounterCount, + reinterpret_cast( pCounters ), + reinterpret_cast( pCounterDescriptions ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + template ::value && + std::is_same::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType, + std::vector>>::type + PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR && + "Function requires " ); +# endif + + std::pair, + std::vector> + data_; + std::vector & counters = data_.first; + std::vector & counterDescriptions = data_.second; + uint32_t counterCount; + Result result; + do + { + result = static_cast( + d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( m_physicalDevice, queueFamilyIndex, &counterCount, nullptr, nullptr ) ); + if ( ( result == Result::eSuccess ) && counterCount ) + { + counters.resize( counterCount ); + counterDescriptions.resize( counterCount ); + result = static_cast( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + m_physicalDevice, + queueFamilyIndex, + &counterCount, + reinterpret_cast( counters.data() ), + reinterpret_cast( counterDescriptions.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" ); + VULKAN_HPP_ASSERT( counterCount <= counters.size() ); + if ( counterCount < counters.size() ) + { + counters.resize( counterCount ); + counterDescriptions.resize( counterCount ); + } + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + template ::value && + std::is_same::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType, + std::vector>>::type + PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, + PerformanceCounterKHRAllocator & performanceCounterKHRAllocator, + PerformanceCounterDescriptionKHRAllocator & performanceCounterDescriptionKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR && + "Function requires " ); +# endif + + std::pair, + std::vector> + data_( + std::piecewise_construct, std::forward_as_tuple( performanceCounterKHRAllocator ), std::forward_as_tuple( performanceCounterDescriptionKHRAllocator ) ); + std::vector & counters = data_.first; + std::vector & counterDescriptions = data_.second; + uint32_t counterCount; + Result result; + do + { + result = static_cast( + d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( m_physicalDevice, queueFamilyIndex, &counterCount, nullptr, nullptr ) ); + if ( ( result == Result::eSuccess ) && counterCount ) + { + counters.resize( counterCount ); + counterDescriptions.resize( counterCount ); + result = static_cast( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + m_physicalDevice, + queueFamilyIndex, + &counterCount, + reinterpret_cast( counters.data() ), + reinterpret_cast( counterDescriptions.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" ); + VULKAN_HPP_ASSERT( counterCount <= counters.size() ); + if ( counterCount < counters.size() ) + { + counters.resize( counterCount ); + counterDescriptions.resize( counterCount ); + } + return detail::createResultValueType( result, std::move( data_ ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR( const QueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, + uint32_t * pNumPasses, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pPerformanceQueryCreateInfo ), + pNumPasses ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR( + const QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR && + "Function requires " ); +# endif + + uint32_t numPasses; + d.vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + m_physicalDevice, reinterpret_cast( &performanceQueryCreateInfo ), &numPasses ); + + return numPasses; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkAcquireProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireProfilingLockKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkAcquireProfilingLockKHR( static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireProfilingLockKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireProfilingLockKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkAcquireProfilingLockKHR( m_device, reinterpret_cast( &info ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquireProfilingLockKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkReleaseProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseProfilingLockKHR.html + template + VULKAN_HPP_INLINE void Device::releaseProfilingLockKHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkReleaseProfilingLockKHR( static_cast( m_device ) ); + } + + //=== VK_KHR_get_surface_capabilities2 === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + SurfaceCapabilities2KHR * pSurfaceCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pSurfaceInfo ), + reinterpret_cast( pSurfaceCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceCapabilities2KHR && + "Function requires " ); +# endif + + SurfaceCapabilities2KHR surfaceCapabilities; + Result result = + static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + reinterpret_cast( &surfaceCapabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); + + return detail::createResultValueType( result, std::move( surfaceCapabilities ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceCapabilities2KHR && + "Function requires " ); +# endif + + StructureChain structureChain; + SurfaceCapabilities2KHR & surfaceCapabilities = structureChain.template get(); + Result result = + static_cast( d.vkGetPhysicalDeviceSurfaceCapabilities2KHR( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + reinterpret_cast( &surfaceCapabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + uint32_t * pSurfaceFormatCount, + SurfaceFormat2KHR * pSurfaceFormats, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pSurfaceInfo ), + pSurfaceFormatCount, + reinterpret_cast( pSurfaceFormats ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceFormats2KHR && + "Function requires " ); +# endif + + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( + m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + surfaceFormats.resize( surfaceFormatCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + surfaceFormats.resize( surfaceFormatCount ); + } + return detail::createResultValueType( result, std::move( surfaceFormats ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, + SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceFormats2KHR && + "Function requires " ); +# endif + + std::vector surfaceFormats( surfaceFormat2KHRAllocator ); + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( + m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + surfaceFormats.resize( surfaceFormatCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + surfaceFormats.resize( surfaceFormatCount ); + } + return detail::createResultValueType( result, std::move( surfaceFormats ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceFormats2KHR && + "Function requires " ); +# endif + + std::vector structureChains; + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( + m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + structureChains.resize( surfaceFormatCount ); + surfaceFormats.resize( surfaceFormatCount ); + for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) + { + surfaceFormats[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + structureChains.resize( surfaceFormatCount ); + } + for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) + { + structureChains[i].template get() = surfaceFormats[i]; + } + return detail::createResultValueType( result, std::move( structureChains ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, + StructureChainAllocator & structureChainAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfaceFormats2KHR && + "Function requires " ); +# endif + + std::vector structureChains( structureChainAllocator ); + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( + m_physicalDevice, reinterpret_cast( &surfaceInfo ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + structureChains.resize( surfaceFormatCount ); + surfaceFormats.resize( surfaceFormatCount ); + for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) + { + surfaceFormats[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( d.vkGetPhysicalDeviceSurfaceFormats2KHR( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + structureChains.resize( surfaceFormatCount ); + } + for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) + { + structureChains[i].template get() = surfaceFormats[i]; + } + return detail::createResultValueType( result, std::move( structureChains ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_get_display_properties2 === + + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayProperties2KHR( uint32_t * pPropertyCount, + DisplayProperties2KHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceDisplayProperties2KHR( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayProperties2KHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayProperties2KHR && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayProperties2KHR( DisplayProperties2KHRAllocator & displayProperties2KHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayProperties2KHR && + "Function requires " ); +# endif + + std::vector properties( displayProperties2KHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + d.vkGetPhysicalDeviceDisplayProperties2KHR( m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneProperties2KHR( uint32_t * pPropertyCount, + DisplayPlaneProperties2KHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPlaneProperties2KHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayPlaneProperties2KHR( DisplayPlaneProperties2KHRAllocator & displayPlaneProperties2KHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR && + "Function requires " ); +# endif + + std::vector properties( displayPlaneProperties2KHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayModeProperties2KHR( DisplayKHR display, + uint32_t * pPropertyCount, + DisplayModeProperties2KHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDisplayModeProperties2KHR( static_cast( m_physicalDevice ), + static_cast( display ), + pPropertyCount, + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayModeProperties2KHR( DisplayKHR display, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayModeProperties2KHR && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayModeProperties2KHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetDisplayModeProperties2KHR( + m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayModeProperties2KHR( DisplayKHR display, + DisplayModeProperties2KHRAllocator & displayModeProperties2KHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayModeProperties2KHR && "Function requires " ); +# endif + + std::vector properties( displayModeProperties2KHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayModeProperties2KHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetDisplayModeProperties2KHR( + m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayModeProperties2KHR( DisplayKHR display, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayModeProperties2KHR && "Function requires " ); +# endif + + std::vector structureChains; + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayModeProperties2KHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + structureChains.resize( propertyCount ); + properties.resize( propertyCount ); + for ( uint32_t i = 0; i < propertyCount; i++ ) + { + properties[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( d.vkGetDisplayModeProperties2KHR( + m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + structureChains.resize( propertyCount ); + } + for ( uint32_t i = 0; i < propertyCount; i++ ) + { + structureChains[i].template get() = properties[i]; + } + return detail::createResultValueType( result, std::move( structureChains ) ); + } + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDisplayModeProperties2KHR( DisplayKHR display, StructureChainAllocator & structureChainAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayModeProperties2KHR && "Function requires " ); +# endif + + std::vector structureChains( structureChainAllocator ); + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetDisplayModeProperties2KHR( m_physicalDevice, static_cast( display ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + structureChains.resize( propertyCount ); + properties.resize( propertyCount ); + for ( uint32_t i = 0; i < propertyCount; i++ ) + { + properties[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( d.vkGetDisplayModeProperties2KHR( + m_physicalDevice, static_cast( display ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + structureChains.resize( propertyCount ); + } + for ( uint32_t i = 0; i < propertyCount; i++ ) + { + structureChains[i].template get() = properties[i]; + } + return detail::createResultValueType( result, std::move( structureChains ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayPlaneCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR * pDisplayPlaneInfo, + DisplayPlaneCapabilities2KHR * pCapabilities, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDisplayPlaneCapabilities2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pDisplayPlaneInfo ), + reinterpret_cast( pCapabilities ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayPlaneCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR & displayPlaneInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDisplayPlaneCapabilities2KHR && "Function requires " ); +# endif + + DisplayPlaneCapabilities2KHR capabilities; + Result result = static_cast( d.vkGetDisplayPlaneCapabilities2KHR( m_physicalDevice, + reinterpret_cast( &displayPlaneInfo ), + reinterpret_cast( &capabilities ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneCapabilities2KHR" ); + + return detail::createResultValueType( result, std::move( capabilities ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateIOSSurfaceMVK( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIOSSurfaceMVK && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateIOSSurfaceMVK( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createIOSSurfaceMVK" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createIOSSurfaceMVKUnique( const IOSSurfaceCreateInfoMVK & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIOSSurfaceMVK && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateIOSSurfaceMVK( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createIOSSurfaceMVKUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateMacOSSurfaceMVK( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateMacOSSurfaceMVK && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateMacOSSurfaceMVK( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createMacOSSurfaceMVK" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createMacOSSurfaceMVKUnique( + const MacOSSurfaceCreateInfoMVK & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateMacOSSurfaceMVK && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateMacOSSurfaceMVK( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createMacOSSurfaceMVKUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkSetDebugUtilsObjectNameEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectNameEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT * pNameInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkSetDebugUtilsObjectNameEXT( static_cast( m_device ), reinterpret_cast( pNameInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetDebugUtilsObjectNameEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectNameEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT & nameInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetDebugUtilsObjectNameEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkSetDebugUtilsObjectNameEXT( m_device, reinterpret_cast( &nameInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectNameEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetDebugUtilsObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectTagEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT * pTagInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkSetDebugUtilsObjectTagEXT( static_cast( m_device ), reinterpret_cast( pTagInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetDebugUtilsObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectTagEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT & tagInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetDebugUtilsObjectTagEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkSetDebugUtilsObjectTagEXT( m_device, reinterpret_cast( &tagInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectTagEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueueBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBeginDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkQueueBeginDebugUtilsLabelEXT( static_cast( m_queue ), reinterpret_cast( pLabelInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBeginDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueBeginDebugUtilsLabelEXT && "Function requires " ); +# endif + + d.vkQueueBeginDebugUtilsLabelEXT( m_queue, reinterpret_cast( &labelInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueueEndDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueEndDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void Queue::endDebugUtilsLabelEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkQueueEndDebugUtilsLabelEXT( static_cast( m_queue ) ); + } + + // wrapper function for command vkQueueInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueInsertDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkQueueInsertDebugUtilsLabelEXT( static_cast( m_queue ), reinterpret_cast( pLabelInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueInsertDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueInsertDebugUtilsLabelEXT && "Function requires " ); +# endif + + d.vkQueueInsertDebugUtilsLabelEXT( m_queue, reinterpret_cast( &labelInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginDebugUtilsLabelEXT( static_cast( m_commandBuffer ), reinterpret_cast( pLabelInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginDebugUtilsLabelEXT && "Function requires " ); +# endif + + d.vkCmdBeginDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast( &labelInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endDebugUtilsLabelEXT( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndDebugUtilsLabelEXT( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInsertDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdInsertDebugUtilsLabelEXT( static_cast( m_commandBuffer ), reinterpret_cast( pLabelInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInsertDebugUtilsLabelEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdInsertDebugUtilsLabelEXT && "Function requires " ); +# endif + + d.vkCmdInsertDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast( &labelInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createDebugUtilsMessengerEXT( const DebugUtilsMessengerCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + DebugUtilsMessengerEXT * pMessenger, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDebugUtilsMessengerEXT( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pMessenger ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createDebugUtilsMessengerEXT( + const DebugUtilsMessengerCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDebugUtilsMessengerEXT && "Function requires " ); +# endif + + DebugUtilsMessengerEXT messenger; + Result result = static_cast( d.vkCreateDebugUtilsMessengerEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &messenger ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugUtilsMessengerEXT" ); + + return detail::createResultValueType( result, std::move( messenger ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createDebugUtilsMessengerEXTUnique( const DebugUtilsMessengerCreateInfoEXT & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDebugUtilsMessengerEXT && "Function requires " ); +# endif + + DebugUtilsMessengerEXT messenger; + Result result = static_cast( d.vkCreateDebugUtilsMessengerEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &messenger ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDebugUtilsMessengerEXTUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( messenger, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + VULKAN_HPP_INLINE void Instance::destroyDebugUtilsMessengerEXT( DebugUtilsMessengerEXT messenger, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDebugUtilsMessengerEXT( static_cast( m_instance ), + static_cast( messenger ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + VULKAN_HPP_INLINE void Instance::destroyDebugUtilsMessengerEXT( DebugUtilsMessengerEXT messenger, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDebugUtilsMessengerEXT && "Function requires " ); +# endif + + d.vkDestroyDebugUtilsMessengerEXT( + m_instance, static_cast( messenger ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + VULKAN_HPP_INLINE void + Instance::destroy( DebugUtilsMessengerEXT messenger, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDebugUtilsMessengerEXT( static_cast( m_instance ), + static_cast( messenger ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + VULKAN_HPP_INLINE void + Instance::destroy( DebugUtilsMessengerEXT messenger, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDebugUtilsMessengerEXT && "Function requires " ); +# endif + + d.vkDestroyDebugUtilsMessengerEXT( + m_instance, static_cast( messenger ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSubmitDebugUtilsMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSubmitDebugUtilsMessageEXT.html + template + VULKAN_HPP_INLINE void Instance::submitDebugUtilsMessageEXT( DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + DebugUtilsMessageTypeFlagsEXT messageTypes, + const DebugUtilsMessengerCallbackDataEXT * pCallbackData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkSubmitDebugUtilsMessageEXT( static_cast( m_instance ), + static_cast( messageSeverity ), + static_cast( messageTypes ), + reinterpret_cast( pCallbackData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSubmitDebugUtilsMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSubmitDebugUtilsMessageEXT.html + template + VULKAN_HPP_INLINE void Instance::submitDebugUtilsMessageEXT( DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + DebugUtilsMessageTypeFlagsEXT messageTypes, + const DebugUtilsMessengerCallbackDataEXT & callbackData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSubmitDebugUtilsMessageEXT && "Function requires " ); +# endif + + d.vkSubmitDebugUtilsMessageEXT( m_instance, + static_cast( messageSeverity ), + static_cast( messageTypes ), + reinterpret_cast( &callbackData ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer * buffer, + AndroidHardwareBufferPropertiesANDROID * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetAndroidHardwareBufferPropertiesANDROID( + static_cast( m_device ), buffer, reinterpret_cast( pProperties ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAndroidHardwareBufferPropertiesANDROID && + "Function requires " ); +# endif + + AndroidHardwareBufferPropertiesANDROID properties; + Result result = static_cast( + d.vkGetAndroidHardwareBufferPropertiesANDROID( m_device, &buffer, reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); + + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAndroidHardwareBufferPropertiesANDROID && + "Function requires " ); +# endif + + StructureChain structureChain; + AndroidHardwareBufferPropertiesANDROID & properties = structureChain.template get(); + Result result = static_cast( + d.vkGetAndroidHardwareBufferPropertiesANDROID( m_device, &buffer, reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryAndroidHardwareBufferANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryAndroidHardwareBufferANDROID.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID * pInfo, + struct AHardwareBuffer ** pBuffer, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryAndroidHardwareBufferANDROID( + static_cast( m_device ), reinterpret_cast( pInfo ), pBuffer ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryAndroidHardwareBufferANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryAndroidHardwareBufferANDROID.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryAndroidHardwareBufferANDROID && + "Function requires " ); +# endif + + struct AHardwareBuffer * buffer; + Result result = static_cast( + d.vkGetMemoryAndroidHardwareBufferANDROID( m_device, reinterpret_cast( &info ), &buffer ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryAndroidHardwareBufferANDROID" ); + + return detail::createResultValueType( result, std::move( buffer ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createExecutionGraphPipelinesAMDX( PipelineCache pipelineCache, + uint32_t createInfoCount, + const ExecutionGraphPipelineCreateInfoAMDX * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateExecutionGraphPipelinesAMDX( static_cast( m_device ), + static_cast( pipelineCache ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelines ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createExecutionGraphPipelinesAMDX( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExecutionGraphPipelinesAMDX && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( d.vkCreateExecutionGraphPipelinesAMDX( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExecutionGraphPipelinesAMDX", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createExecutionGraphPipelinesAMDX( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExecutionGraphPipelinesAMDX && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size(), pipelineAllocator ); + Result result = + static_cast( d.vkCreateExecutionGraphPipelinesAMDX( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExecutionGraphPipelinesAMDX", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue + Device::createExecutionGraphPipelineAMDX( PipelineCache pipelineCache, + const ExecutionGraphPipelineCreateInfoAMDX & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExecutionGraphPipelinesAMDX && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateExecutionGraphPipelinesAMDX( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExecutionGraphPipelineAMDX", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue( result, std::move( pipeline ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createExecutionGraphPipelinesAMDXUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExecutionGraphPipelinesAMDX && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( d.vkCreateExecutionGraphPipelinesAMDX( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExecutionGraphPipelinesAMDXUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines; + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createExecutionGraphPipelinesAMDXUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExecutionGraphPipelinesAMDX && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( d.vkCreateExecutionGraphPipelinesAMDX( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExecutionGraphPipelinesAMDXUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createExecutionGraphPipelineAMDXUnique( PipelineCache pipelineCache, + const ExecutionGraphPipelineCreateInfoAMDX & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExecutionGraphPipelinesAMDX && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateExecutionGraphPipelinesAMDX( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExecutionGraphPipelineAMDXUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( + result, UniqueHandle( pipeline, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineScratchSizeAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getExecutionGraphPipelineScratchSizeAMDX( Pipeline executionGraph, + ExecutionGraphPipelineScratchSizeAMDX * pSizeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetExecutionGraphPipelineScratchSizeAMDX( static_cast( m_device ), + static_cast( executionGraph ), + reinterpret_cast( pSizeInfo ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineScratchSizeAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getExecutionGraphPipelineScratchSizeAMDX( Pipeline executionGraph, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetExecutionGraphPipelineScratchSizeAMDX && + "Function requires " ); +# endif + + ExecutionGraphPipelineScratchSizeAMDX sizeInfo; + Result result = static_cast( d.vkGetExecutionGraphPipelineScratchSizeAMDX( + m_device, static_cast( executionGraph ), reinterpret_cast( &sizeInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getExecutionGraphPipelineScratchSizeAMDX" ); + + return detail::createResultValueType( result, std::move( sizeInfo ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetExecutionGraphPipelineNodeIndexAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineNodeIndexAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getExecutionGraphPipelineNodeIndexAMDX( Pipeline executionGraph, + const PipelineShaderStageNodeCreateInfoAMDX * pNodeInfo, + uint32_t * pNodeIndex, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetExecutionGraphPipelineNodeIndexAMDX( static_cast( m_device ), + static_cast( executionGraph ), + reinterpret_cast( pNodeInfo ), + pNodeIndex ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetExecutionGraphPipelineNodeIndexAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineNodeIndexAMDX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getExecutionGraphPipelineNodeIndexAMDX( Pipeline executionGraph, const PipelineShaderStageNodeCreateInfoAMDX & nodeInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetExecutionGraphPipelineNodeIndexAMDX && "Function requires " ); +# endif + + uint32_t nodeIndex; + Result result = static_cast( d.vkGetExecutionGraphPipelineNodeIndexAMDX( + m_device, static_cast( executionGraph ), reinterpret_cast( &nodeInfo ), &nodeIndex ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getExecutionGraphPipelineNodeIndexAMDX" ); + + return detail::createResultValueType( result, std::move( nodeIndex ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdInitializeGraphScratchMemoryAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInitializeGraphScratchMemoryAMDX.html + template + VULKAN_HPP_INLINE void CommandBuffer::initializeGraphScratchMemoryAMDX( Pipeline executionGraph, + DeviceAddress scratch, + DeviceSize scratchSize, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdInitializeGraphScratchMemoryAMDX( static_cast( m_commandBuffer ), + static_cast( executionGraph ), + static_cast( scratch ), + static_cast( scratchSize ) ); + } + + // wrapper function for command vkCmdDispatchGraphAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphAMDX.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX * pCountInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchGraphAMDX( static_cast( m_commandBuffer ), + static_cast( scratch ), + static_cast( scratchSize ), + reinterpret_cast( pCountInfo ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchGraphAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphAMDX.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX & countInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDispatchGraphAMDX && "Function requires " ); +# endif + + d.vkCmdDispatchGraphAMDX( m_commandBuffer, + static_cast( scratch ), + static_cast( scratchSize ), + reinterpret_cast( &countInfo ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDispatchGraphIndirectAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectAMDX.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphIndirectAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX * pCountInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchGraphIndirectAMDX( static_cast( m_commandBuffer ), + static_cast( scratch ), + static_cast( scratchSize ), + reinterpret_cast( pCountInfo ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchGraphIndirectAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectAMDX.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphIndirectAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX & countInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDispatchGraphIndirectAMDX && "Function requires " ); +# endif + + d.vkCmdDispatchGraphIndirectAMDX( m_commandBuffer, + static_cast( scratch ), + static_cast( scratchSize ), + reinterpret_cast( &countInfo ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDispatchGraphIndirectCountAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectCountAMDX.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphIndirectCountAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + DeviceAddress countInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchGraphIndirectCountAMDX( static_cast( m_commandBuffer ), + static_cast( scratch ), + static_cast( scratchSize ), + static_cast( countInfo ) ); + } +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + + // wrapper function for command vkCmdSetSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const SampleLocationsInfoEXT * pSampleLocationsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetSampleLocationsEXT( static_cast( m_commandBuffer ), reinterpret_cast( pSampleLocationsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetSampleLocationsEXT && "Function requires " ); +# endif + + d.vkCmdSetSampleLocationsEXT( m_commandBuffer, reinterpret_cast( &sampleLocationsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMultisamplePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getMultisamplePropertiesEXT( SampleCountFlagBits samples, + MultisamplePropertiesEXT * pMultisampleProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceMultisamplePropertiesEXT( static_cast( m_physicalDevice ), + static_cast( samples ), + reinterpret_cast( pMultisampleProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMultisamplePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MultisamplePropertiesEXT PhysicalDevice::getMultisamplePropertiesEXT( SampleCountFlagBits samples, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceMultisamplePropertiesEXT && + "Function requires " ); +# endif + + MultisamplePropertiesEXT multisampleProperties; + d.vkGetPhysicalDeviceMultisamplePropertiesEXT( + m_physicalDevice, static_cast( samples ), reinterpret_cast( &multisampleProperties ) ); + + return multisampleProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_get_memory_requirements2 === + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_INLINE void Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageMemoryRequirements2KHR && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetImageMemoryRequirements2KHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageMemoryRequirements2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetImageMemoryRequirements2KHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_INLINE void Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetBufferMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferMemoryRequirements2KHR && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetBufferMemoryRequirements2KHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferMemoryRequirements2KHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetBufferMemoryRequirements2KHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + template + VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSparseMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + pSparseMemoryRequirementCount, + reinterpret_cast( pSparseMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSparseMemoryRequirements2KHR && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + d.vkGetImageSparseMemoryRequirements2KHR( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetImageSparseMemoryRequirements2KHR( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageSparseMemoryRequirements2KHR && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements( sparseImageMemoryRequirements2Allocator ); + uint32_t sparseMemoryRequirementCount; + d.vkGetImageSparseMemoryRequirements2KHR( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetImageSparseMemoryRequirements2KHR( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_acceleration_structure === + + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createAccelerationStructureKHR( const AccelerationStructureCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + AccelerationStructureKHR * pAccelerationStructure, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateAccelerationStructureKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pAccelerationStructure ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createAccelerationStructureKHR( + const AccelerationStructureCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateAccelerationStructureKHR && "Function requires " ); +# endif + + AccelerationStructureKHR accelerationStructure; + Result result = static_cast( d.vkCreateAccelerationStructureKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &accelerationStructure ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureKHR" ); + + return detail::createResultValueType( result, std::move( accelerationStructure ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createAccelerationStructureKHRUnique( const AccelerationStructureCreateInfoKHR & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateAccelerationStructureKHR && "Function requires " ); +# endif + + AccelerationStructureKHR accelerationStructure; + Result result = static_cast( d.vkCreateAccelerationStructureKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &accelerationStructure ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( accelerationStructure, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void Device::destroyAccelerationStructureKHR( AccelerationStructureKHR accelerationStructure, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyAccelerationStructureKHR( static_cast( m_device ), + static_cast( accelerationStructure ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void Device::destroyAccelerationStructureKHR( AccelerationStructureKHR accelerationStructure, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyAccelerationStructureKHR && "Function requires " ); +# endif + + d.vkDestroyAccelerationStructureKHR( + m_device, static_cast( accelerationStructure ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void + Device::destroy( AccelerationStructureKHR accelerationStructure, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyAccelerationStructureKHR( static_cast( m_device ), + static_cast( accelerationStructure ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void Device::destroy( AccelerationStructureKHR accelerationStructure, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyAccelerationStructureKHR && "Function requires " ); +# endif + + d.vkDestroyAccelerationStructureKHR( + m_device, static_cast( accelerationStructure ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresKHR( uint32_t infoCount, + const AccelerationStructureBuildGeometryInfoKHR * pInfos, + const AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBuildAccelerationStructuresKHR( static_cast( m_commandBuffer ), + infoCount, + reinterpret_cast( pInfos ), + reinterpret_cast( ppBuildRangeInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html + template + VULKAN_HPP_INLINE void + CommandBuffer::buildAccelerationStructuresKHR( ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBuildAccelerationStructuresKHR && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( infos.size() == pBuildRangeInfos.size() ); +# else + if ( infos.size() != pBuildRangeInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBuildAccelerationStructuresKHR( m_commandBuffer, + infos.size(), + reinterpret_cast( infos.data() ), + reinterpret_cast( pBuildRangeInfos.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildAccelerationStructuresIndirectKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresIndirectKHR( uint32_t infoCount, + const AccelerationStructureBuildGeometryInfoKHR * pInfos, + const DeviceAddress * pIndirectDeviceAddresses, + const uint32_t * pIndirectStrides, + const uint32_t * const * ppMaxPrimitiveCounts, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBuildAccelerationStructuresIndirectKHR( static_cast( m_commandBuffer ), + infoCount, + reinterpret_cast( pInfos ), + reinterpret_cast( pIndirectDeviceAddresses ), + pIndirectStrides, + ppMaxPrimitiveCounts ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildAccelerationStructuresIndirectKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, + ArrayProxy const & indirectDeviceAddresses, + ArrayProxy const & indirectStrides, + ArrayProxy const & pMaxPrimitiveCounts, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBuildAccelerationStructuresIndirectKHR && + "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( infos.size() == indirectDeviceAddresses.size() ); + VULKAN_HPP_ASSERT( infos.size() == indirectStrides.size() ); + VULKAN_HPP_ASSERT( infos.size() == pMaxPrimitiveCounts.size() ); +# else + if ( infos.size() != indirectDeviceAddresses.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectDeviceAddresses.size()" ); + } + if ( infos.size() != indirectStrides.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectStrides.size()" ); + } + if ( infos.size() != pMaxPrimitiveCounts.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != pMaxPrimitiveCounts.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBuildAccelerationStructuresIndirectKHR( m_commandBuffer, + infos.size(), + reinterpret_cast( infos.data() ), + reinterpret_cast( indirectDeviceAddresses.data() ), + indirectStrides.data(), + pMaxPrimitiveCounts.data() ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildAccelerationStructuresKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::buildAccelerationStructuresKHR( DeferredOperationKHR deferredOperation, + uint32_t infoCount, + const AccelerationStructureBuildGeometryInfoKHR * pInfos, + const AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBuildAccelerationStructuresKHR( static_cast( m_device ), + static_cast( deferredOperation ), + infoCount, + reinterpret_cast( pInfos ), + reinterpret_cast( ppBuildRangeInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildAccelerationStructuresKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::buildAccelerationStructuresKHR( DeferredOperationKHR deferredOperation, + ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBuildAccelerationStructuresKHR && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( infos.size() == pBuildRangeInfos.size() ); +# else + if ( infos.size() != pBuildRangeInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + Result result = static_cast( + d.vkBuildAccelerationStructuresKHR( m_device, + static_cast( deferredOperation ), + infos.size(), + reinterpret_cast( infos.data() ), + reinterpret_cast( pBuildRangeInfos.data() ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCopyAccelerationStructureKHR( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureInfoKHR & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyAccelerationStructureKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkCopyAccelerationStructureKHR( + m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureToMemoryKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureToMemoryKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureToMemoryInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCopyAccelerationStructureToMemoryKHR( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureToMemoryKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureToMemoryKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureToMemoryInfoKHR & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyAccelerationStructureToMemoryKHR && + "Function requires " ); +# endif + + Result result = static_cast( d.vkCopyAccelerationStructureToMemoryKHR( + m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureToMemoryKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyMemoryToAccelerationStructureInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCopyMemoryToAccelerationStructureKHR( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyMemoryToAccelerationStructureInfoKHR & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyMemoryToAccelerationStructureKHR && + "Function requires " ); +# endif + + Result result = static_cast( d.vkCopyMemoryToAccelerationStructureKHR( + m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToAccelerationStructureKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, + const AccelerationStructureKHR * pAccelerationStructures, + QueryType queryType, + size_t dataSize, + void * pData, + size_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkWriteAccelerationStructuresPropertiesKHR( static_cast( m_device ), + accelerationStructureCount, + reinterpret_cast( pAccelerationStructures ), + static_cast( queryType ), + dataSize, + pData, + stride ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::writeAccelerationStructuresPropertiesKHR( + ArrayProxy const & accelerationStructures, QueryType queryType, size_t dataSize, size_t stride, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWriteAccelerationStructuresPropertiesKHR && + "Function requires " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = + static_cast( d.vkWriteAccelerationStructuresPropertiesKHR( m_device, + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ), + stride ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertiesKHR" ); + + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::writeAccelerationStructuresPropertyKHR( + ArrayProxy const & accelerationStructures, QueryType queryType, size_t stride, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWriteAccelerationStructuresPropertiesKHR && + "Function requires " ); +# endif + + DataType data; + Result result = + static_cast( d.vkWriteAccelerationStructuresPropertiesKHR( m_device, + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + sizeof( DataType ), + reinterpret_cast( &data ), + stride ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertyKHR" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyAccelerationStructureKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyAccelerationStructureKHR && "Function requires " ); +# endif + + d.vkCmdCopyAccelerationStructureKHR( m_commandBuffer, reinterpret_cast( &info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureToMemoryKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyAccelerationStructureToMemoryKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureToMemoryKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyAccelerationStructureToMemoryKHR && + "Function requires " ); +# endif + + d.vkCmdCopyAccelerationStructureToMemoryKHR( m_commandBuffer, reinterpret_cast( &info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyMemoryToAccelerationStructureKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToAccelerationStructureKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyMemoryToAccelerationStructureKHR && + "Function requires " ); +# endif + + d.vkCmdCopyMemoryToAccelerationStructureKHR( m_commandBuffer, reinterpret_cast( &info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureDeviceAddressKHR.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getAccelerationStructureAddressKHR( const AccelerationStructureDeviceAddressInfoKHR * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetAccelerationStructureDeviceAddressKHR( + static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureDeviceAddressKHR.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getAccelerationStructureAddressKHR( const AccelerationStructureDeviceAddressInfoKHR & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureDeviceAddressKHR && + "Function requires " ); +# endif + + VkDeviceAddress result = + d.vkGetAccelerationStructureDeviceAddressKHR( m_device, reinterpret_cast( &info ) ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, + const AccelerationStructureKHR * pAccelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteAccelerationStructuresPropertiesKHR( static_cast( m_commandBuffer ), + accelerationStructureCount, + reinterpret_cast( pAccelerationStructures ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdWriteAccelerationStructuresPropertiesKHR && + "Function requires " ); +# endif + + d.vkCmdWriteAccelerationStructuresPropertiesKHR( m_commandBuffer, + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceAccelerationStructureCompatibilityKHR.html + template + VULKAN_HPP_INLINE void Device::getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR * pVersionInfo, + AccelerationStructureCompatibilityKHR * pCompatibility, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceAccelerationStructureCompatibilityKHR( static_cast( m_device ), + reinterpret_cast( pVersionInfo ), + reinterpret_cast( pCompatibility ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceAccelerationStructureCompatibilityKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE AccelerationStructureCompatibilityKHR + Device::getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR & versionInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceAccelerationStructureCompatibilityKHR && + "Function requires " ); +# endif + + AccelerationStructureCompatibilityKHR compatibility; + d.vkGetDeviceAccelerationStructureCompatibilityKHR( m_device, + reinterpret_cast( &versionInfo ), + reinterpret_cast( &compatibility ) ); + + return compatibility; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureBuildSizesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureBuildSizesKHR.html + template + VULKAN_HPP_INLINE void Device::getAccelerationStructureBuildSizesKHR( AccelerationStructureBuildTypeKHR buildType, + const AccelerationStructureBuildGeometryInfoKHR * pBuildInfo, + const uint32_t * pMaxPrimitiveCounts, + AccelerationStructureBuildSizesInfoKHR * pSizeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetAccelerationStructureBuildSizesKHR( static_cast( m_device ), + static_cast( buildType ), + reinterpret_cast( pBuildInfo ), + pMaxPrimitiveCounts, + reinterpret_cast( pSizeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureBuildSizesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureBuildSizesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE AccelerationStructureBuildSizesInfoKHR + Device::getAccelerationStructureBuildSizesKHR( AccelerationStructureBuildTypeKHR buildType, + const AccelerationStructureBuildGeometryInfoKHR & buildInfo, + ArrayProxy const & maxPrimitiveCounts, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureBuildSizesKHR && + "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( maxPrimitiveCounts.size() == buildInfo.geometryCount ); +# else + if ( maxPrimitiveCounts.size() != buildInfo.geometryCount ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureBuildSizesKHR: maxPrimitiveCounts.size() != buildInfo.geometryCount" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + AccelerationStructureBuildSizesInfoKHR sizeInfo; + d.vkGetAccelerationStructureBuildSizesKHR( m_device, + static_cast( buildType ), + reinterpret_cast( &buildInfo ), + maxPrimitiveCounts.data(), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkCmdTraceRaysKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, + const StridedDeviceAddressRegionKHR * pMissShaderBindingTable, + const StridedDeviceAddressRegionKHR * pHitShaderBindingTable, + const StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdTraceRaysKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pRaygenShaderBindingTable ), + reinterpret_cast( pMissShaderBindingTable ), + reinterpret_cast( pHitShaderBindingTable ), + reinterpret_cast( pCallableShaderBindingTable ), + width, + height, + depth ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdTraceRaysKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const StridedDeviceAddressRegionKHR & missShaderBindingTable, + const StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const StridedDeviceAddressRegionKHR & callableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdTraceRaysKHR && "Function requires " ); +# endif + + d.vkCmdTraceRaysKHR( m_commandBuffer, + reinterpret_cast( &raygenShaderBindingTable ), + reinterpret_cast( &missShaderBindingTable ), + reinterpret_cast( &hitShaderBindingTable ), + reinterpret_cast( &callableShaderBindingTable ), + width, + height, + depth ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRayTracingPipelinesKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + uint32_t createInfoCount, + const RayTracingPipelineCreateInfoKHR * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateRayTracingPipelinesKHR( static_cast( m_device ), + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelines ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createRayTracingPipelinesKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesKHR && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createRayTracingPipelinesKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesKHR && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size(), pipelineAllocator ); + Result result = static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::createRayTracingPipelineKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoKHR & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesKHR && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue( result, std::move( pipeline ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createRayTracingPipelinesKHRUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesKHR && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHRUnique", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines; + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createRayTracingPipelinesKHRUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesKHR && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesKHRUnique", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createRayTracingPipelineKHRUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoKHR & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesKHR && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateRayTracingPipelinesKHR( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineKHRUnique", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( + result, UniqueHandle( pipeline, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRayTracingShaderGroupHandlesKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetRayTracingShaderGroupHandlesKHR( + static_cast( m_device ), static_cast( pipeline ), firstGroup, groupCount, dataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getRayTracingShaderGroupHandlesKHR( Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRayTracingShaderGroupHandlesKHR && + "Function requires or " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( d.vkGetRayTracingShaderGroupHandlesKHR( + m_device, static_cast( pipeline ), firstGroup, groupCount, data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesKHR" ); + + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getRayTracingShaderGroupHandleKHR( Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRayTracingShaderGroupHandlesKHR && + "Function requires or " ); +# endif + + DataType data; + Result result = static_cast( d.vkGetRayTracingShaderGroupHandlesKHR( + m_device, static_cast( pipeline ), firstGroup, groupCount, sizeof( DataType ), reinterpret_cast( &data ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandleKHR" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + static_cast( m_device ), static_cast( pipeline ), firstGroup, groupCount, dataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR && + "Function requires " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + m_device, static_cast( pipeline ), firstGroup, groupCount, data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandlesKHR" ); + + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getRayTracingCaptureReplayShaderGroupHandleKHR( Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + m_device, static_cast( pipeline ), firstGroup, groupCount, sizeof( DataType ), reinterpret_cast( &data ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandleKHR" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdTraceRaysIndirectKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirectKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, + const StridedDeviceAddressRegionKHR * pMissShaderBindingTable, + const StridedDeviceAddressRegionKHR * pHitShaderBindingTable, + const StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, + DeviceAddress indirectDeviceAddress, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdTraceRaysIndirectKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pRaygenShaderBindingTable ), + reinterpret_cast( pMissShaderBindingTable ), + reinterpret_cast( pHitShaderBindingTable ), + reinterpret_cast( pCallableShaderBindingTable ), + static_cast( indirectDeviceAddress ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdTraceRaysIndirectKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirectKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const StridedDeviceAddressRegionKHR & missShaderBindingTable, + const StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const StridedDeviceAddressRegionKHR & callableShaderBindingTable, + DeviceAddress indirectDeviceAddress, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdTraceRaysIndirectKHR && "Function requires " ); +# endif + + d.vkCmdTraceRaysIndirectKHR( m_commandBuffer, + reinterpret_cast( &raygenShaderBindingTable ), + reinterpret_cast( &missShaderBindingTable ), + reinterpret_cast( &hitShaderBindingTable ), + reinterpret_cast( &callableShaderBindingTable ), + static_cast( indirectDeviceAddress ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingShaderGroupStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupStackSizeKHR.html + template + VULKAN_HPP_INLINE DeviceSize Device::getRayTracingShaderGroupStackSizeKHR( Pipeline pipeline, + uint32_t group, + ShaderGroupShaderKHR groupShader, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetRayTracingShaderGroupStackSizeKHR( + static_cast( m_device ), static_cast( pipeline ), group, static_cast( groupShader ) ) ); + } + + // wrapper function for command vkCmdSetRayTracingPipelineStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRayTracingPipelineStackSizeKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRayTracingPipelineStackSizeKHR( static_cast( m_commandBuffer ), pipelineStackSize ); + } + + //=== VK_KHR_sampler_ycbcr_conversion === + + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + SamplerYcbcrConversion * pYcbcrConversion, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSamplerYcbcrConversionKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pYcbcrConversion ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createSamplerYcbcrConversionKHR( + const SamplerYcbcrConversionCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSamplerYcbcrConversionKHR && + "Function requires or " ); +# endif + + SamplerYcbcrConversion ycbcrConversion; + Result result = static_cast( d.vkCreateSamplerYcbcrConversionKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &ycbcrConversion ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversionKHR" ); + + return detail::createResultValueType( result, std::move( ycbcrConversion ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createSamplerYcbcrConversionKHRUnique( const SamplerYcbcrConversionCreateInfo & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSamplerYcbcrConversionKHR && + "Function requires or " ); +# endif + + SamplerYcbcrConversion ycbcrConversion; + Result result = static_cast( d.vkCreateSamplerYcbcrConversionKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &ycbcrConversion ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createSamplerYcbcrConversionKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( ycbcrConversion, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversionKHR.html + template + VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR( SamplerYcbcrConversion ycbcrConversion, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroySamplerYcbcrConversionKHR( static_cast( m_device ), + static_cast( ycbcrConversion ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversionKHR.html + template + VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR( SamplerYcbcrConversion ycbcrConversion, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroySamplerYcbcrConversionKHR && + "Function requires or " ); +# endif + + d.vkDestroySamplerYcbcrConversionKHR( + m_device, static_cast( ycbcrConversion ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_bind_memory2 === + + // wrapper function for command vkBindBufferMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindBufferMemory2KHR( uint32_t bindInfoCount, + const BindBufferMemoryInfo * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBindBufferMemory2KHR( static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindBufferMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2KHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindBufferMemory2KHR( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindBufferMemory2KHR && "Function requires or " ); +# endif + + Result result = + static_cast( d.vkBindBufferMemory2KHR( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2KHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindImageMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindImageMemory2KHR( uint32_t bindInfoCount, + const BindImageMemoryInfo * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBindImageMemory2KHR( static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindImageMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2KHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindImageMemory2KHR( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindImageMemory2KHR && "Function requires or " ); +# endif + + Result result = + static_cast( d.vkBindImageMemory2KHR( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2KHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_image_drm_format_modifier === + + // wrapper function for command vkGetImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getImageDrmFormatModifierPropertiesEXT( Image image, + ImageDrmFormatModifierPropertiesEXT * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetImageDrmFormatModifierPropertiesEXT( + static_cast( m_device ), static_cast( image ), reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getImageDrmFormatModifierPropertiesEXT( Image image, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageDrmFormatModifierPropertiesEXT && + "Function requires " ); +# endif + + ImageDrmFormatModifierPropertiesEXT properties; + Result result = static_cast( d.vkGetImageDrmFormatModifierPropertiesEXT( + m_device, static_cast( image ), reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getImageDrmFormatModifierPropertiesEXT" ); + + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_validation_cache === + + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createValidationCacheEXT( const ValidationCacheCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + ValidationCacheEXT * pValidationCache, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateValidationCacheEXT( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pValidationCache ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createValidationCacheEXT( const ValidationCacheCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateValidationCacheEXT && "Function requires " ); +# endif + + ValidationCacheEXT validationCache; + Result result = static_cast( d.vkCreateValidationCacheEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &validationCache ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createValidationCacheEXT" ); + + return detail::createResultValueType( result, std::move( validationCache ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createValidationCacheEXTUnique( + const ValidationCacheCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateValidationCacheEXT && "Function requires " ); +# endif + + ValidationCacheEXT validationCache; + Result result = static_cast( d.vkCreateValidationCacheEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &validationCache ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createValidationCacheEXTUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( validationCache, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( ValidationCacheEXT validationCache, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyValidationCacheEXT( + static_cast( m_device ), static_cast( validationCache ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( ValidationCacheEXT validationCache, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyValidationCacheEXT && "Function requires " ); +# endif + + d.vkDestroyValidationCacheEXT( + m_device, static_cast( validationCache ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + VULKAN_HPP_INLINE void + Device::destroy( ValidationCacheEXT validationCache, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyValidationCacheEXT( + static_cast( m_device ), static_cast( validationCache ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + VULKAN_HPP_INLINE void + Device::destroy( ValidationCacheEXT validationCache, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyValidationCacheEXT && "Function requires " ); +# endif + + d.vkDestroyValidationCacheEXT( + m_device, static_cast( validationCache ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkMergeValidationCachesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergeValidationCachesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mergeValidationCachesEXT( ValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const ValidationCacheEXT * pSrcCaches, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkMergeValidationCachesEXT( static_cast( m_device ), + static_cast( dstCache ), + srcCacheCount, + reinterpret_cast( pSrcCaches ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMergeValidationCachesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergeValidationCachesEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::mergeValidationCachesEXT( ValidationCacheEXT dstCache, ArrayProxy const & srcCaches, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkMergeValidationCachesEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkMergeValidationCachesEXT( + m_device, static_cast( dstCache ), srcCaches.size(), reinterpret_cast( srcCaches.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mergeValidationCachesEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getValidationCacheDataEXT( ValidationCacheEXT validationCache, size_t * pDataSize, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetValidationCacheDataEXT( static_cast( m_device ), static_cast( validationCache ), pDataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getValidationCacheDataEXT( ValidationCacheEXT validationCache, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetValidationCacheDataEXT && "Function requires " ); +# endif + + std::vector data; + size_t dataSize; + Result result; + do + { + result = static_cast( d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getValidationCacheDataEXT" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getValidationCacheDataEXT( ValidationCacheEXT validationCache, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetValidationCacheDataEXT && "Function requires " ); +# endif + + std::vector data( uint8_tAllocator ); + size_t dataSize; + Result result; + do + { + result = static_cast( d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetValidationCacheDataEXT( m_device, static_cast( validationCache ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getValidationCacheDataEXT" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_shading_rate_image === + + // wrapper function for command vkCmdBindShadingRateImageNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadingRateImageNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindShadingRateImageNV( ImageView imageView, ImageLayout imageLayout, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindShadingRateImageNV( + static_cast( m_commandBuffer ), static_cast( imageView ), static_cast( imageLayout ) ); + } + + // wrapper function for command vkCmdSetViewportShadingRatePaletteNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportShadingRatePaletteNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportShadingRatePaletteNV( uint32_t firstViewport, + uint32_t viewportCount, + const ShadingRatePaletteNV * pShadingRatePalettes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewportShadingRatePaletteNV( + static_cast( m_commandBuffer ), firstViewport, viewportCount, reinterpret_cast( pShadingRatePalettes ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportShadingRatePaletteNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportShadingRatePaletteNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportShadingRatePaletteNV( uint32_t firstViewport, + ArrayProxy const & shadingRatePalettes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetViewportShadingRatePaletteNV && "Function requires " ); +# endif + + d.vkCmdSetViewportShadingRatePaletteNV( + m_commandBuffer, firstViewport, shadingRatePalettes.size(), reinterpret_cast( shadingRatePalettes.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetCoarseSampleOrderNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoarseSampleOrderNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoarseSampleOrderNV( CoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const CoarseSampleOrderCustomNV * pCustomSampleOrders, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoarseSampleOrderNV( static_cast( m_commandBuffer ), + static_cast( sampleOrderType ), + customSampleOrderCount, + reinterpret_cast( pCustomSampleOrders ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetCoarseSampleOrderNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoarseSampleOrderNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoarseSampleOrderNV( CoarseSampleOrderTypeNV sampleOrderType, + ArrayProxy const & customSampleOrders, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetCoarseSampleOrderNV && "Function requires " ); +# endif + + d.vkCmdSetCoarseSampleOrderNV( m_commandBuffer, + static_cast( sampleOrderType ), + customSampleOrders.size(), + reinterpret_cast( customSampleOrders.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createAccelerationStructureNV( const AccelerationStructureCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + AccelerationStructureNV * pAccelerationStructure, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateAccelerationStructureNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pAccelerationStructure ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createAccelerationStructureNV( + const AccelerationStructureCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateAccelerationStructureNV && "Function requires " ); +# endif + + AccelerationStructureNV accelerationStructure; + Result result = static_cast( d.vkCreateAccelerationStructureNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &accelerationStructure ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureNV" ); + + return detail::createResultValueType( result, std::move( accelerationStructure ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createAccelerationStructureNVUnique( const AccelerationStructureCreateInfoNV & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateAccelerationStructureNV && "Function requires " ); +# endif + + AccelerationStructureNV accelerationStructure; + Result result = static_cast( d.vkCreateAccelerationStructureNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &accelerationStructure ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createAccelerationStructureNVUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( accelerationStructure, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void Device::destroyAccelerationStructureNV( AccelerationStructureNV accelerationStructure, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyAccelerationStructureNV( static_cast( m_device ), + static_cast( accelerationStructure ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void Device::destroyAccelerationStructureNV( AccelerationStructureNV accelerationStructure, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyAccelerationStructureNV && "Function requires " ); +# endif + + d.vkDestroyAccelerationStructureNV( + m_device, static_cast( accelerationStructure ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void + Device::destroy( AccelerationStructureNV accelerationStructure, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyAccelerationStructureNV( static_cast( m_device ), + static_cast( accelerationStructure ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void Device::destroy( AccelerationStructureNV accelerationStructure, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyAccelerationStructureNV && "Function requires " ); +# endif + + d.vkDestroyAccelerationStructureNV( + m_device, static_cast( accelerationStructure ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_INLINE void Device::getAccelerationStructureMemoryRequirementsNV( const AccelerationStructureMemoryRequirementsInfoNV * pInfo, + MemoryRequirements2KHR * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetAccelerationStructureMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2KHR Device::getAccelerationStructureMemoryRequirementsNV( + const AccelerationStructureMemoryRequirementsInfoNV & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureMemoryRequirementsNV && + "Function requires " ); +# endif + + MemoryRequirements2KHR memoryRequirements; + d.vkGetAccelerationStructureMemoryRequirementsNV( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getAccelerationStructureMemoryRequirementsNV( const AccelerationStructureMemoryRequirementsInfoNV & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureMemoryRequirementsNV && + "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2KHR & memoryRequirements = structureChain.template get(); + d.vkGetAccelerationStructureMemoryRequirementsNV( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindAccelerationStructureMemoryNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindAccelerationStructureMemoryNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindAccelerationStructureMemoryNV( uint32_t bindInfoCount, + const BindAccelerationStructureMemoryInfoNV * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBindAccelerationStructureMemoryNV( + static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindAccelerationStructureMemoryNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindAccelerationStructureMemoryNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindAccelerationStructureMemoryNV && "Function requires " ); +# endif + + Result result = static_cast( d.vkBindAccelerationStructureMemoryNV( + m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindAccelerationStructureMemoryNV" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const AccelerationStructureInfoNV * pInfo, + Buffer instanceData, + DeviceSize instanceOffset, + Bool32 update, + AccelerationStructureNV dst, + AccelerationStructureNV src, + Buffer scratch, + DeviceSize scratchOffset, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBuildAccelerationStructureNV( static_cast( m_commandBuffer ), + reinterpret_cast( pInfo ), + static_cast( instanceData ), + static_cast( instanceOffset ), + static_cast( update ), + static_cast( dst ), + static_cast( src ), + static_cast( scratch ), + static_cast( scratchOffset ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const AccelerationStructureInfoNV & info, + Buffer instanceData, + DeviceSize instanceOffset, + Bool32 update, + AccelerationStructureNV dst, + AccelerationStructureNV src, + Buffer scratch, + DeviceSize scratchOffset, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBuildAccelerationStructureNV && "Function requires " ); +# endif + + d.vkCmdBuildAccelerationStructureNV( m_commandBuffer, + reinterpret_cast( &info ), + static_cast( instanceData ), + static_cast( instanceOffset ), + static_cast( update ), + static_cast( dst ), + static_cast( src ), + static_cast( scratch ), + static_cast( scratchOffset ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureNV( AccelerationStructureNV dst, + AccelerationStructureNV src, + CopyAccelerationStructureModeKHR mode, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyAccelerationStructureNV( static_cast( m_commandBuffer ), + static_cast( dst ), + static_cast( src ), + static_cast( mode ) ); + } + + // wrapper function for command vkCmdTraceRaysNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::traceRaysNV( Buffer raygenShaderBindingTableBuffer, + DeviceSize raygenShaderBindingOffset, + Buffer missShaderBindingTableBuffer, + DeviceSize missShaderBindingOffset, + DeviceSize missShaderBindingStride, + Buffer hitShaderBindingTableBuffer, + DeviceSize hitShaderBindingOffset, + DeviceSize hitShaderBindingStride, + Buffer callableShaderBindingTableBuffer, + DeviceSize callableShaderBindingOffset, + DeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdTraceRaysNV( static_cast( m_commandBuffer ), + static_cast( raygenShaderBindingTableBuffer ), + static_cast( raygenShaderBindingOffset ), + static_cast( missShaderBindingTableBuffer ), + static_cast( missShaderBindingOffset ), + static_cast( missShaderBindingStride ), + static_cast( hitShaderBindingTableBuffer ), + static_cast( hitShaderBindingOffset ), + static_cast( hitShaderBindingStride ), + static_cast( callableShaderBindingTableBuffer ), + static_cast( callableShaderBindingOffset ), + static_cast( callableShaderBindingStride ), + width, + height, + depth ); + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createRayTracingPipelinesNV( PipelineCache pipelineCache, + uint32_t createInfoCount, + const RayTracingPipelineCreateInfoNV * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateRayTracingPipelinesNV( static_cast( m_device ), + static_cast( pipelineCache ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelines ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createRayTracingPipelinesNV( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesNV && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateRayTracingPipelinesNV( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNV", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createRayTracingPipelinesNV( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesNV && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size(), pipelineAllocator ); + Result result = static_cast( d.vkCreateRayTracingPipelinesNV( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNV", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::createRayTracingPipelineNV( PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoNV & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesNV && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateRayTracingPipelinesNV( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineNV", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue( result, std::move( pipeline ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createRayTracingPipelinesNVUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesNV && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateRayTracingPipelinesNV( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNVUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines; + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createRayTracingPipelinesNVUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesNV && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateRayTracingPipelinesNV( m_device, + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelinesNVUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> Device::createRayTracingPipelineNVUnique( + PipelineCache pipelineCache, const RayTracingPipelineCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateRayTracingPipelinesNV && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateRayTracingPipelinesNV( m_device, + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createRayTracingPipelineNVUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( + result, UniqueHandle( pipeline, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getRayTracingShaderGroupHandlesNV( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetRayTracingShaderGroupHandlesNV( + static_cast( m_device ), static_cast( pipeline ), firstGroup, groupCount, dataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getRayTracingShaderGroupHandlesNV( Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRayTracingShaderGroupHandlesNV && + "Function requires or " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( d.vkGetRayTracingShaderGroupHandlesNV( + m_device, static_cast( pipeline ), firstGroup, groupCount, data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesNV" ); + + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getRayTracingShaderGroupHandleNV( Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRayTracingShaderGroupHandlesNV && + "Function requires or " ); +# endif + + DataType data; + Result result = static_cast( d.vkGetRayTracingShaderGroupHandlesNV( + m_device, static_cast( pipeline ), firstGroup, groupCount, sizeof( DataType ), reinterpret_cast( &data ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandleNV" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getAccelerationStructureHandleNV( AccelerationStructureNV accelerationStructure, + size_t dataSize, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetAccelerationStructureHandleNV( + static_cast( m_device ), static_cast( accelerationStructure ), dataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getAccelerationStructureHandleNV( AccelerationStructureNV accelerationStructure, size_t dataSize, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureHandleNV && "Function requires " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( d.vkGetAccelerationStructureHandleNV( + m_device, static_cast( accelerationStructure ), data.size() * sizeof( DataType ), reinterpret_cast( data.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" ); + + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getAccelerationStructureHandleNV( AccelerationStructureNV accelerationStructure, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureHandleNV && "Function requires " ); +# endif + + DataType data; + Result result = static_cast( d.vkGetAccelerationStructureHandleNV( + m_device, static_cast( accelerationStructure ), sizeof( DataType ), reinterpret_cast( &data ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeAccelerationStructuresPropertiesNV( uint32_t accelerationStructureCount, + const AccelerationStructureNV * pAccelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteAccelerationStructuresPropertiesNV( static_cast( m_commandBuffer ), + accelerationStructureCount, + reinterpret_cast( pAccelerationStructures ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdWriteAccelerationStructuresPropertiesNV && + "Function requires " ); +# endif + + d.vkCmdWriteAccelerationStructuresPropertiesNV( m_commandBuffer, + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCompileDeferredNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCompileDeferredNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::compileDeferredNV( Pipeline pipeline, uint32_t shader, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCompileDeferredNV( static_cast( m_device ), static_cast( pipeline ), shader ) ); + } +#else + // wrapper function for command vkCompileDeferredNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCompileDeferredNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::compileDeferredNV( Pipeline pipeline, uint32_t shader, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCompileDeferredNV && "Function requires " ); +# endif + + Result result = static_cast( d.vkCompileDeferredNV( m_device, static_cast( pipeline ), shader ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::compileDeferredNV" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_maintenance3 === + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo * pCreateInfo, + DescriptorSetLayoutSupport * pSupport, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorSetLayoutSupportKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pSupport ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DescriptorSetLayoutSupport Device::getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutSupportKHR && + "Function requires or " ); +# endif + + DescriptorSetLayoutSupport support; + d.vkGetDescriptorSetLayoutSupportKHR( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); + + return support; + } + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutSupportKHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + DescriptorSetLayoutSupport & support = structureChain.template get(); + d.vkGetDescriptorSetLayoutSupportKHR( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &support ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountKHR( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndirectCountKHR( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirectCountKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountKHR( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawIndexedIndirectCountKHR( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_EXT_external_memory_host === + + // wrapper function for command vkGetMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryHostPointerPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBits handleType, + const void * pHostPointer, + MemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryHostPointerPropertiesEXT( static_cast( m_device ), + static_cast( handleType ), + pHostPointer, + reinterpret_cast( pMemoryHostPointerProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryHostPointerPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryHostPointerPropertiesEXT && "Function requires " ); +# endif + + MemoryHostPointerPropertiesEXT memoryHostPointerProperties; + Result result = + static_cast( d.vkGetMemoryHostPointerPropertiesEXT( m_device, + static_cast( handleType ), + pHostPointer, + reinterpret_cast( &memoryHostPointerProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryHostPointerPropertiesEXT" ); + + return detail::createResultValueType( result, std::move( memoryHostPointerProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_buffer_marker === + + // wrapper function for command vkCmdWriteBufferMarkerAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarkerAMD.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarkerAMD( + PipelineStageFlagBits pipelineStage, Buffer dstBuffer, DeviceSize dstOffset, uint32_t marker, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteBufferMarkerAMD( static_cast( m_commandBuffer ), + static_cast( pipelineStage ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + marker ); + } + + // wrapper function for command vkCmdWriteBufferMarker2AMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarker2AMD.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( + PipelineStageFlags2 stage, Buffer dstBuffer, DeviceSize dstOffset, uint32_t marker, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteBufferMarker2AMD( static_cast( m_commandBuffer ), + static_cast( stage ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + marker ); + } + + //=== VK_EXT_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCalibrateableTimeDomainsEXT( uint32_t * pTimeDomainCount, + TimeDomainKHR * pTimeDomains, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( + static_cast( m_physicalDevice ), pTimeDomainCount, reinterpret_cast( pTimeDomains ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCalibrateableTimeDomainsEXT( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT && + "Function requires or " ); +# endif + + std::vector timeDomains; + uint32_t timeDomainCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && timeDomainCount ) + { + timeDomains.resize( timeDomainCount ); + result = static_cast( + d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, reinterpret_cast( timeDomains.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" ); + VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); + if ( timeDomainCount < timeDomains.size() ) + { + timeDomains.resize( timeDomainCount ); + } + return detail::createResultValueType( result, std::move( timeDomains ) ); + } + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCalibrateableTimeDomainsEXT( TimeDomainKHRAllocator & timeDomainKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT && + "Function requires or " ); +# endif + + std::vector timeDomains( timeDomainKHRAllocator ); + uint32_t timeDomainCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && timeDomainCount ) + { + timeDomains.resize( timeDomainCount ); + result = static_cast( + d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( m_physicalDevice, &timeDomainCount, reinterpret_cast( timeDomains.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" ); + VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); + if ( timeDomainCount < timeDomains.size() ) + { + timeDomains.resize( timeDomainCount ); + } + return detail::createResultValueType( result, std::move( timeDomains ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetCalibratedTimestampsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getCalibratedTimestampsEXT( uint32_t timestampCount, + const CalibratedTimestampInfoKHR * pTimestampInfos, + uint64_t * pTimestamps, + uint64_t * pMaxDeviation, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetCalibratedTimestampsEXT( static_cast( m_device ), + timestampCount, + reinterpret_cast( pTimestampInfos ), + pTimestamps, + pMaxDeviation ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetCalibratedTimestampsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, uint64_t>>::type + Device::getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCalibratedTimestampsEXT && + "Function requires or " ); +# endif + + std::pair, uint64_t> data_( + std::piecewise_construct, std::forward_as_tuple( timestampInfos.size() ), std::forward_as_tuple( 0 ) ); + std::vector & timestamps = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( d.vkGetCalibratedTimestampsEXT( + m_device, timestampInfos.size(), reinterpret_cast( timestampInfos.data() ), timestamps.data(), &maxDeviation ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetCalibratedTimestampsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, uint64_t>>::type + Device::getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, + Uint64_tAllocator & uint64_tAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCalibratedTimestampsEXT && + "Function requires or " ); +# endif + + std::pair, uint64_t> data_( + std::piecewise_construct, std::forward_as_tuple( timestampInfos.size(), uint64_tAllocator ), std::forward_as_tuple( 0 ) ); + std::vector & timestamps = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( d.vkGetCalibratedTimestampsEXT( + m_device, timestampInfos.size(), reinterpret_cast( timestampInfos.data() ), timestamps.data(), &maxDeviation ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetCalibratedTimestampsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getCalibratedTimestampEXT( const CalibratedTimestampInfoKHR & timestampInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCalibratedTimestampsEXT && + "Function requires or " ); +# endif + + std::pair data_; + uint64_t & timestamp = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( + d.vkGetCalibratedTimestampsEXT( m_device, 1, reinterpret_cast( ×tampInfo ), ×tamp, &maxDeviation ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampEXT" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMeshTasksNV( static_cast( m_commandBuffer ), taskCount, firstTask ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectNV( + Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMeshTasksIndirectNV( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectCountNV( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMeshTasksIndirectCountNV( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_NV_scissor_exclusive === + + // wrapper function for command vkCmdSetExclusiveScissorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setExclusiveScissorEnableNV( uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const Bool32 * pExclusiveScissorEnables, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetExclusiveScissorEnableNV( static_cast( m_commandBuffer ), + firstExclusiveScissor, + exclusiveScissorCount, + reinterpret_cast( pExclusiveScissorEnables ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetExclusiveScissorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setExclusiveScissorEnableNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissorEnables, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetExclusiveScissorEnableNV && "Function requires " ); +# endif + + d.vkCmdSetExclusiveScissorEnableNV( + m_commandBuffer, firstExclusiveScissor, exclusiveScissorEnables.size(), reinterpret_cast( exclusiveScissorEnables.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetExclusiveScissorNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setExclusiveScissorNV( uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const Rect2D * pExclusiveScissors, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetExclusiveScissorNV( + static_cast( m_commandBuffer ), firstExclusiveScissor, exclusiveScissorCount, reinterpret_cast( pExclusiveScissors ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetExclusiveScissorNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setExclusiveScissorNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissors, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetExclusiveScissorNV && "Function requires " ); +# endif + + d.vkCmdSetExclusiveScissorNV( + m_commandBuffer, firstExclusiveScissor, exclusiveScissors.size(), reinterpret_cast( exclusiveScissors.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_device_diagnostic_checkpoints === + + // wrapper function for command vkCmdSetCheckpointNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCheckpointNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( const void * pCheckpointMarker, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCheckpointNV( static_cast( m_commandBuffer ), pCheckpointMarker ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetCheckpointNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCheckpointNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( CheckpointMarkerType const & checkpointMarker, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetCheckpointNV && "Function requires " ); +# endif + + d.vkCmdSetCheckpointNV( m_commandBuffer, reinterpret_cast( &checkpointMarker ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + template + VULKAN_HPP_INLINE void + Queue::getCheckpointDataNV( uint32_t * pCheckpointDataCount, CheckpointDataNV * pCheckpointData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetQueueCheckpointDataNV( static_cast( m_queue ), pCheckpointDataCount, reinterpret_cast( pCheckpointData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Queue::getCheckpointDataNV( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetQueueCheckpointDataNV && "Function requires " ); +# endif + + std::vector checkpointData; + uint32_t checkpointDataCount; + d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, nullptr ); + checkpointData.resize( checkpointDataCount ); + d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); + + VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); + if ( checkpointDataCount < checkpointData.size() ) + { + checkpointData.resize( checkpointDataCount ); + } + return checkpointData; + } + + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Queue::getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetQueueCheckpointDataNV && "Function requires " ); +# endif + + std::vector checkpointData( checkpointDataNVAllocator ); + uint32_t checkpointDataCount; + d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, nullptr ); + checkpointData.resize( checkpointDataCount ); + d.vkGetQueueCheckpointDataNV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); + + VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); + if ( checkpointDataCount < checkpointData.size() ) + { + checkpointData.resize( checkpointDataCount ); + } + return checkpointData; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + template + VULKAN_HPP_INLINE void + Queue::getCheckpointData2NV( uint32_t * pCheckpointDataCount, CheckpointData2NV * pCheckpointData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetQueueCheckpointData2NV( static_cast( m_queue ), pCheckpointDataCount, reinterpret_cast( pCheckpointData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Queue::getCheckpointData2NV( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetQueueCheckpointData2NV && "Function requires " ); +# endif + + std::vector checkpointData; + uint32_t checkpointDataCount; + d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, nullptr ); + checkpointData.resize( checkpointDataCount ); + d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); + + VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); + if ( checkpointDataCount < checkpointData.size() ) + { + checkpointData.resize( checkpointDataCount ); + } + return checkpointData; + } + + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Queue::getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetQueueCheckpointData2NV && "Function requires " ); +# endif + + std::vector checkpointData( checkpointData2NVAllocator ); + uint32_t checkpointDataCount; + d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, nullptr ); + checkpointData.resize( checkpointDataCount ); + d.vkGetQueueCheckpointData2NV( m_queue, &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); + + VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); + if ( checkpointDataCount < checkpointData.size() ) + { + checkpointData.resize( checkpointDataCount ); + } + return checkpointData; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_timeline_semaphore === + + // wrapper function for command vkGetSemaphoreCounterValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValueKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreCounterValueKHR( Semaphore semaphore, + uint64_t * pValue, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSemaphoreCounterValueKHR( static_cast( m_device ), static_cast( semaphore ), pValue ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreCounterValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValueKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getSemaphoreCounterValueKHR( Semaphore semaphore, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSemaphoreCounterValueKHR && "Function requires or " ); +# endif + + uint64_t value; + Result result = static_cast( d.vkGetSemaphoreCounterValueKHR( m_device, static_cast( semaphore ), &value ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreCounterValueKHR" ); + + return detail::createResultValueType( result, std::move( value ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWaitSemaphoresKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphoresKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphoresKHR( const SemaphoreWaitInfo * pWaitInfo, + uint64_t timeout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkWaitSemaphoresKHR( static_cast( m_device ), reinterpret_cast( pWaitInfo ), timeout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitSemaphoresKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphoresKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphoresKHR( const SemaphoreWaitInfo & waitInfo, uint64_t timeout, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWaitSemaphoresKHR && "Function requires or " ); +# endif + + Result result = static_cast( d.vkWaitSemaphoresKHR( m_device, reinterpret_cast( &waitInfo ), timeout ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphoresKHR", { Result::eSuccess, Result::eTimeout } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSignalSemaphoreKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphoreKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::signalSemaphoreKHR( const SemaphoreSignalInfo * pSignalInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkSignalSemaphoreKHR( static_cast( m_device ), reinterpret_cast( pSignalInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSignalSemaphoreKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphoreKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::signalSemaphoreKHR( const SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSignalSemaphoreKHR && "Function requires or " ); +# endif + + Result result = static_cast( d.vkSignalSemaphoreKHR( m_device, reinterpret_cast( &signalInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphoreKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkInitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInitializePerformanceApiINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL * pInitializeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkInitializePerformanceApiINTEL( static_cast( m_device ), + reinterpret_cast( pInitializeInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkInitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInitializePerformanceApiINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL & initializeInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkInitializePerformanceApiINTEL && "Function requires " ); +# endif + + Result result = + static_cast( d.vkInitializePerformanceApiINTEL( m_device, reinterpret_cast( &initializeInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::initializePerformanceApiINTEL" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUninitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUninitializePerformanceApiINTEL.html + template + VULKAN_HPP_INLINE void Device::uninitializePerformanceApiINTEL( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUninitializePerformanceApiINTEL( static_cast( m_device ) ); + } + + // wrapper function for command vkCmdSetPerformanceMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceMarkerINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL * pMarkerInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCmdSetPerformanceMarkerINTEL( static_cast( m_commandBuffer ), + reinterpret_cast( pMarkerInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetPerformanceMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceMarkerINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + CommandBuffer::setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL & markerInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetPerformanceMarkerINTEL && "Function requires " ); +# endif + + Result result = + static_cast( d.vkCmdSetPerformanceMarkerINTEL( m_commandBuffer, reinterpret_cast( &markerInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceMarkerINTEL" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetPerformanceStreamMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceStreamMarkerINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL * pMarkerInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCmdSetPerformanceStreamMarkerINTEL( static_cast( m_commandBuffer ), + reinterpret_cast( pMarkerInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetPerformanceStreamMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceStreamMarkerINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + CommandBuffer::setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL & markerInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetPerformanceStreamMarkerINTEL && "Function requires " ); +# endif + + Result result = static_cast( + d.vkCmdSetPerformanceStreamMarkerINTEL( m_commandBuffer, reinterpret_cast( &markerInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceStreamMarkerINTEL" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetPerformanceOverrideINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceOverrideINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result CommandBuffer::setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL * pOverrideInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCmdSetPerformanceOverrideINTEL( static_cast( m_commandBuffer ), + reinterpret_cast( pOverrideInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetPerformanceOverrideINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceOverrideINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + CommandBuffer::setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL & overrideInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetPerformanceOverrideINTEL && "Function requires " ); +# endif + + Result result = + static_cast( d.vkCmdSetPerformanceOverrideINTEL( m_commandBuffer, reinterpret_cast( &overrideInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceOverrideINTEL" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquirePerformanceConfigurationINTEL( const PerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, + PerformanceConfigurationINTEL * pConfiguration, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAcquirePerformanceConfigurationINTEL( static_cast( m_device ), + reinterpret_cast( pAcquireInfo ), + reinterpret_cast( pConfiguration ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::acquirePerformanceConfigurationINTEL( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquirePerformanceConfigurationINTEL && "Function requires " ); +# endif + + PerformanceConfigurationINTEL configuration; + Result result = + static_cast( d.vkAcquirePerformanceConfigurationINTEL( m_device, + reinterpret_cast( &acquireInfo ), + reinterpret_cast( &configuration ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquirePerformanceConfigurationINTEL" ); + + return detail::createResultValueType( result, std::move( configuration ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::acquirePerformanceConfigurationINTELUnique( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquirePerformanceConfigurationINTEL && "Function requires " ); +# endif + + PerformanceConfigurationINTEL configuration; + Result result = + static_cast( d.vkAcquirePerformanceConfigurationINTEL( m_device, + reinterpret_cast( &acquireInfo ), + reinterpret_cast( &configuration ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquirePerformanceConfigurationINTELUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( configuration, detail::ObjectRelease( *this, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::releasePerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkReleasePerformanceConfigurationINTEL( static_cast( m_device ), static_cast( configuration ) ) ); + } +#else + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::releasePerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleasePerformanceConfigurationINTEL && "Function requires " ); +# endif + + Result result = static_cast( d.vkReleasePerformanceConfigurationINTEL( m_device, static_cast( configuration ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::releasePerformanceConfigurationINTEL" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::release( PerformanceConfigurationINTEL configuration, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkReleasePerformanceConfigurationINTEL( static_cast( m_device ), static_cast( configuration ) ) ); + } +#else + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::release( PerformanceConfigurationINTEL configuration, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleasePerformanceConfigurationINTEL && "Function requires " ); +# endif + + Result result = static_cast( d.vkReleasePerformanceConfigurationINTEL( m_device, static_cast( configuration ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::release" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSetPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSetPerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::setPerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkQueueSetPerformanceConfigurationINTEL( static_cast( m_queue ), static_cast( configuration ) ) ); + } +#else + // wrapper function for command vkQueueSetPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSetPerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Queue::setPerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueSetPerformanceConfigurationINTEL && + "Function requires " ); +# endif + + Result result = static_cast( d.vkQueueSetPerformanceConfigurationINTEL( m_queue, static_cast( configuration ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::setPerformanceConfigurationINTEL" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetPerformanceParameterINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPerformanceParameterINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPerformanceParameterINTEL( PerformanceParameterTypeINTEL parameter, + PerformanceValueINTEL * pValue, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPerformanceParameterINTEL( + static_cast( m_device ), static_cast( parameter ), reinterpret_cast( pValue ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPerformanceParameterINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPerformanceParameterINTEL.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getPerformanceParameterINTEL( PerformanceParameterTypeINTEL parameter, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPerformanceParameterINTEL && "Function requires " ); +# endif + + PerformanceValueINTEL value; + Result result = static_cast( d.vkGetPerformanceParameterINTEL( + m_device, static_cast( parameter ), reinterpret_cast( &value ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPerformanceParameterINTEL" ); + + return detail::createResultValueType( result, std::move( value ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_display_native_hdr === + + // wrapper function for command vkSetLocalDimmingAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLocalDimmingAMD.html + template + VULKAN_HPP_INLINE void Device::setLocalDimmingAMD( SwapchainKHR swapChain, Bool32 localDimmingEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkSetLocalDimmingAMD( static_cast( m_device ), static_cast( swapChain ), static_cast( localDimmingEnable ) ); + } + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateImagePipeSurfaceFUCHSIA( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createImagePipeSurfaceFUCHSIA( + const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateImagePipeSurfaceFUCHSIA && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateImagePipeSurfaceFUCHSIA( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createImagePipeSurfaceFUCHSIA" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createImagePipeSurfaceFUCHSIAUnique( + const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateImagePipeSurfaceFUCHSIA && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateImagePipeSurfaceFUCHSIA( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createImagePipeSurfaceFUCHSIAUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createMetalSurfaceEXT( const MetalSurfaceCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateMetalSurfaceEXT( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createMetalSurfaceEXT( const MetalSurfaceCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateMetalSurfaceEXT && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateMetalSurfaceEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createMetalSurfaceEXT" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createMetalSurfaceEXTUnique( + const MetalSurfaceCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateMetalSurfaceEXT && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateMetalSurfaceEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createMetalSurfaceEXTUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getFragmentShadingRatesKHR( uint32_t * pFragmentShadingRateCount, + PhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceFragmentShadingRatesKHR( static_cast( m_physicalDevice ), + pFragmentShadingRateCount, + reinterpret_cast( pFragmentShadingRates ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + template < + typename PhysicalDeviceFragmentShadingRateKHRAllocator, + typename Dispatch, + typename std::enable_if::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getFragmentShadingRatesKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFragmentShadingRatesKHR && + "Function requires " ); +# endif + + std::vector fragmentShadingRates; + uint32_t fragmentShadingRateCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceFragmentShadingRatesKHR( m_physicalDevice, &fragmentShadingRateCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && fragmentShadingRateCount ) + { + fragmentShadingRates.resize( fragmentShadingRateCount ); + result = static_cast( d.vkGetPhysicalDeviceFragmentShadingRatesKHR( + m_physicalDevice, &fragmentShadingRateCount, reinterpret_cast( fragmentShadingRates.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" ); + VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() ); + if ( fragmentShadingRateCount < fragmentShadingRates.size() ) + { + fragmentShadingRates.resize( fragmentShadingRateCount ); + } + return detail::createResultValueType( result, std::move( fragmentShadingRates ) ); + } + + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + template < + typename PhysicalDeviceFragmentShadingRateKHRAllocator, + typename Dispatch, + typename std::enable_if::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getFragmentShadingRatesKHR( PhysicalDeviceFragmentShadingRateKHRAllocator & physicalDeviceFragmentShadingRateKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceFragmentShadingRatesKHR && + "Function requires " ); +# endif + + std::vector fragmentShadingRates( + physicalDeviceFragmentShadingRateKHRAllocator ); + uint32_t fragmentShadingRateCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceFragmentShadingRatesKHR( m_physicalDevice, &fragmentShadingRateCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && fragmentShadingRateCount ) + { + fragmentShadingRates.resize( fragmentShadingRateCount ); + result = static_cast( d.vkGetPhysicalDeviceFragmentShadingRatesKHR( + m_physicalDevice, &fragmentShadingRateCount, reinterpret_cast( fragmentShadingRates.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" ); + VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() ); + if ( fragmentShadingRateCount < fragmentShadingRates.size() ) + { + fragmentShadingRates.resize( fragmentShadingRateCount ); + } + return detail::createResultValueType( result, std::move( fragmentShadingRates ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateKHR( const Extent2D * pFragmentSize, + const FragmentShadingRateCombinerOpKHR combinerOps[2], + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetFragmentShadingRateKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pFragmentSize ), + reinterpret_cast( combinerOps ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateKHR( const Extent2D & fragmentSize, + const FragmentShadingRateCombinerOpKHR combinerOps[2], + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetFragmentShadingRateKHR && "Function requires " ); +# endif + + d.vkCmdSetFragmentShadingRateKHR( + m_commandBuffer, reinterpret_cast( &fragmentSize ), reinterpret_cast( combinerOps ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_dynamic_rendering_local_read === + + // wrapper function for command vkCmdSetRenderingAttachmentLocationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocationsKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingAttachmentLocationsKHR( const RenderingAttachmentLocationInfo * pLocationInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRenderingAttachmentLocationsKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pLocationInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingAttachmentLocationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocationsKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingAttachmentLocationsKHR( const RenderingAttachmentLocationInfo & locationInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetRenderingAttachmentLocationsKHR && + "Function requires or " ); +# endif + + d.vkCmdSetRenderingAttachmentLocationsKHR( m_commandBuffer, reinterpret_cast( &locationInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndicesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndicesKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingInputAttachmentIndicesKHR( const RenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRenderingInputAttachmentIndicesKHR( static_cast( m_commandBuffer ), + reinterpret_cast( pInputAttachmentIndexInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingInputAttachmentIndicesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndicesKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRenderingInputAttachmentIndicesKHR( const RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetRenderingInputAttachmentIndicesKHR && + "Function requires or " ); +# endif + + d.vkCmdSetRenderingInputAttachmentIndicesKHR( m_commandBuffer, reinterpret_cast( &inputAttachmentIndexInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressEXT.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressEXT( const BufferDeviceAddressInfo * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetBufferDeviceAddressEXT( static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferDeviceAddressEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressEXT.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressEXT( const BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferDeviceAddressEXT && + "Function requires or or " ); +# endif + + VkDeviceAddress result = d.vkGetBufferDeviceAddressEXT( m_device, reinterpret_cast( &info ) ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_tooling_info === + + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getToolPropertiesEXT( uint32_t * pToolCount, + PhysicalDeviceToolProperties * pToolProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceToolPropertiesEXT( + static_cast( m_physicalDevice ), pToolCount, reinterpret_cast( pToolProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getToolPropertiesEXT( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceToolPropertiesEXT && + "Function requires or " ); +# endif + + std::vector toolProperties; + uint32_t toolCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && toolCount ) + { + toolProperties.resize( toolCount ); + result = static_cast( + d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" ); + VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); + if ( toolCount < toolProperties.size() ) + { + toolProperties.resize( toolCount ); + } + return detail::createResultValueType( result, std::move( toolProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getToolPropertiesEXT( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceToolPropertiesEXT && + "Function requires or " ); +# endif + + std::vector toolProperties( physicalDeviceToolPropertiesAllocator ); + uint32_t toolCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && toolCount ) + { + toolProperties.resize( toolCount ); + result = static_cast( + d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, reinterpret_cast( toolProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" ); + VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); + if ( toolCount < toolProperties.size() ) + { + toolProperties.resize( toolCount ); + } + return detail::createResultValueType( result, std::move( toolProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_present_wait === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitForPresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresentKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::waitForPresentKHR( SwapchainKHR swapchain, uint64_t presentId, uint64_t timeout, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkWaitForPresentKHR( static_cast( m_device ), static_cast( swapchain ), presentId, timeout ) ); + } +#else + // wrapper function for command vkWaitForPresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresentKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::waitForPresentKHR( SwapchainKHR swapchain, uint64_t presentId, uint64_t timeout, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWaitForPresentKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkWaitForPresentKHR( m_device, static_cast( swapchain ), presentId, timeout ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitForPresentKHR", { Result::eSuccess, Result::eTimeout, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_NV_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCooperativeMatrixPropertiesNV( uint32_t * pPropertyCount, + CooperativeMatrixPropertiesNV * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCooperativeMatrixPropertiesNV( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCooperativeMatrixPropertiesNV( CooperativeMatrixPropertiesNVAllocator & cooperativeMatrixPropertiesNVAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV && + "Function requires " ); +# endif + + std::vector properties( cooperativeMatrixPropertiesNVAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_coverage_reduction_mode === + + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV( + uint32_t * pCombinationCount, FramebufferMixedSamplesCombinationNV * pCombinations, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + static_cast( m_physicalDevice ), pCombinationCount, reinterpret_cast( pCombinations ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + template < + typename FramebufferMixedSamplesCombinationNVAllocator, + typename Dispatch, + typename std::enable_if::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV && + "Function requires " ); +# endif + + std::vector combinations; + uint32_t combinationCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( m_physicalDevice, &combinationCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && combinationCount ) + { + combinations.resize( combinationCount ); + result = static_cast( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + m_physicalDevice, &combinationCount, reinterpret_cast( combinations.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" ); + VULKAN_HPP_ASSERT( combinationCount <= combinations.size() ); + if ( combinationCount < combinations.size() ) + { + combinations.resize( combinationCount ); + } + return detail::createResultValueType( result, std::move( combinations ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + template < + typename FramebufferMixedSamplesCombinationNVAllocator, + typename Dispatch, + typename std::enable_if::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV( + FramebufferMixedSamplesCombinationNVAllocator & framebufferMixedSamplesCombinationNVAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV && + "Function requires " ); +# endif + + std::vector combinations( + framebufferMixedSamplesCombinationNVAllocator ); + uint32_t combinationCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( m_physicalDevice, &combinationCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && combinationCount ) + { + combinations.resize( combinationCount ); + result = static_cast( d.vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + m_physicalDevice, &combinationCount, reinterpret_cast( combinations.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" ); + VULKAN_HPP_ASSERT( combinationCount <= combinations.size() ); + if ( combinationCount < combinations.size() ) + { + combinations.resize( combinationCount ); + } + return detail::createResultValueType( result, std::move( combinations ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + uint32_t * pPresentModeCount, + PresentModeKHR * pPresentModes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceSurfacePresentModes2EXT( static_cast( m_physicalDevice ), + reinterpret_cast( pSurfaceInfo ), + pPresentModeCount, + reinterpret_cast( pPresentModes ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfacePresentModes2EXT && + "Function requires " ); +# endif + + std::vector presentModes; + uint32_t presentModeCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSurfacePresentModes2EXT( + m_physicalDevice, reinterpret_cast( &surfaceInfo ), &presentModeCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentModeCount ) + { + presentModes.resize( presentModeCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfacePresentModes2EXT( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + &presentModeCount, + reinterpret_cast( presentModes.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" ); + VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); + if ( presentModeCount < presentModes.size() ) + { + presentModes.resize( presentModeCount ); + } + return detail::createResultValueType( result, std::move( presentModes ) ); + } + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, + PresentModeKHRAllocator & presentModeKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceSurfacePresentModes2EXT && + "Function requires " ); +# endif + + std::vector presentModes( presentModeKHRAllocator ); + uint32_t presentModeCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceSurfacePresentModes2EXT( + m_physicalDevice, reinterpret_cast( &surfaceInfo ), &presentModeCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentModeCount ) + { + presentModes.resize( presentModeCount ); + result = static_cast( d.vkGetPhysicalDeviceSurfacePresentModes2EXT( m_physicalDevice, + reinterpret_cast( &surfaceInfo ), + &presentModeCount, + reinterpret_cast( presentModes.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" ); + VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); + if ( presentModeCount < presentModes.size() ) + { + presentModes.resize( presentModeCount ); + } + return detail::createResultValueType( result, std::move( presentModes ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::acquireFullScreenExclusiveModeEXT( SwapchainKHR swapchain, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAcquireFullScreenExclusiveModeEXT( static_cast( m_device ), static_cast( swapchain ) ) ); + } +# else + // wrapper function for command vkAcquireFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::acquireFullScreenExclusiveModeEXT( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireFullScreenExclusiveModeEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkAcquireFullScreenExclusiveModeEXT( m_device, static_cast( swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquireFullScreenExclusiveModeEXT" ); + + return detail::createResultValueType( result ); + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::releaseFullScreenExclusiveModeEXT( SwapchainKHR swapchain, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkReleaseFullScreenExclusiveModeEXT( static_cast( m_device ), static_cast( swapchain ) ) ); + } +# else + // wrapper function for command vkReleaseFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::releaseFullScreenExclusiveModeEXT( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleaseFullScreenExclusiveModeEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkReleaseFullScreenExclusiveModeEXT( m_device, static_cast( swapchain ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::releaseFullScreenExclusiveModeEXT" ); + + return detail::createResultValueType( result ); + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetDeviceGroupSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + DeviceGroupPresentModeFlagsKHR * pModes, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeviceGroupSurfacePresentModes2EXT( static_cast( m_device ), + reinterpret_cast( pSurfaceInfo ), + reinterpret_cast( pModes ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceGroupSurfacePresentModes2EXT && + "Function requires " ); +# endif + + DeviceGroupPresentModeFlagsKHR modes; + Result result = static_cast( d.vkGetDeviceGroupSurfacePresentModes2EXT( + m_device, reinterpret_cast( &surfaceInfo ), reinterpret_cast( &modes ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModes2EXT" ); + + return detail::createResultValueType( result, std::move( modes ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createHeadlessSurfaceEXT( const HeadlessSurfaceCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateHeadlessSurfaceEXT( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createHeadlessSurfaceEXT( + const HeadlessSurfaceCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateHeadlessSurfaceEXT && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateHeadlessSurfaceEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createHeadlessSurfaceEXT" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createHeadlessSurfaceEXTUnique( + const HeadlessSurfaceCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateHeadlessSurfaceEXT && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateHeadlessSurfaceEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createHeadlessSurfaceEXTUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressKHR.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressKHR( const BufferDeviceAddressInfo * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetBufferDeviceAddressKHR( static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferDeviceAddressKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressKHR.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressKHR( const BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferDeviceAddressKHR && + "Function requires or or " ); +# endif + + VkDeviceAddress result = d.vkGetBufferDeviceAddressKHR( m_device, reinterpret_cast( &info ) ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddressKHR.html + template + VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetBufferOpaqueCaptureAddressKHR( static_cast( m_device ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddressKHR.html + template + VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferOpaqueCaptureAddressKHR && + "Function requires or " ); +# endif + + uint64_t result = d.vkGetBufferOpaqueCaptureAddressKHR( m_device, reinterpret_cast( &info ) ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html + template + VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddressKHR( const DeviceMemoryOpaqueCaptureAddressInfo * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetDeviceMemoryOpaqueCaptureAddressKHR( static_cast( m_device ), + reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html + template + VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddressKHR( const DeviceMemoryOpaqueCaptureAddressInfo & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceMemoryOpaqueCaptureAddressKHR && + "Function requires or " ); +# endif + + uint64_t result = d.vkGetDeviceMemoryOpaqueCaptureAddressKHR( m_device, reinterpret_cast( &info ) ); + + return result; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLineStippleEXT( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); + } + + //=== VK_EXT_host_query_reset === + + // wrapper function for command vkResetQueryPoolEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPoolEXT.html + template + VULKAN_HPP_INLINE void + Device::resetQueryPoolEXT( QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkResetQueryPoolEXT( static_cast( m_device ), static_cast( queryPool ), firstQuery, queryCount ); + } + + //=== VK_EXT_extended_dynamic_state === + + // wrapper function for command vkCmdSetCullModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullModeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCullModeEXT( CullModeFlags cullMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCullModeEXT( static_cast( m_commandBuffer ), static_cast( cullMode ) ); + } + + // wrapper function for command vkCmdSetFrontFaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFaceEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setFrontFaceEXT( FrontFace frontFace, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetFrontFaceEXT( static_cast( m_commandBuffer ), static_cast( frontFace ) ); + } + + // wrapper function for command vkCmdSetPrimitiveTopologyEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopologyEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopologyEXT( PrimitiveTopology primitiveTopology, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetPrimitiveTopologyEXT( static_cast( m_commandBuffer ), static_cast( primitiveTopology ) ); + } + + // wrapper function for command vkCmdSetViewportWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCountEXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setViewportWithCountEXT( uint32_t viewportCount, const Viewport * pViewports, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewportWithCountEXT( static_cast( m_commandBuffer ), viewportCount, reinterpret_cast( pViewports ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCountEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCountEXT( ArrayProxy const & viewports, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetViewportWithCountEXT && + "Function requires or or " ); +# endif + + d.vkCmdSetViewportWithCountEXT( m_commandBuffer, viewports.size(), reinterpret_cast( viewports.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetScissorWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCountEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCountEXT( uint32_t scissorCount, const Rect2D * pScissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetScissorWithCountEXT( static_cast( m_commandBuffer ), scissorCount, reinterpret_cast( pScissors ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetScissorWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCountEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCountEXT( ArrayProxy const & scissors, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetScissorWithCountEXT && + "Function requires or or " ); +# endif + + d.vkCmdSetScissorWithCountEXT( m_commandBuffer, scissors.size(), reinterpret_cast( scissors.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindVertexBuffers2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2EXT( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + const DeviceSize * pSizes, + const DeviceSize * pStrides, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindVertexBuffers2EXT( static_cast( m_commandBuffer ), + firstBinding, + bindingCount, + reinterpret_cast( pBuffers ), + reinterpret_cast( pOffsets ), + reinterpret_cast( pSizes ), + reinterpret_cast( pStrides ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindVertexBuffers2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2EXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes, + ArrayProxy const & strides, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindVertexBuffers2EXT && + "Function requires or or " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); + VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); + VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != offsets.size()" ); + } + if ( !sizes.empty() && buffers.size() != sizes.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != sizes.size()" ); + } + if ( !strides.empty() && buffers.size() != strides.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != strides.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBindVertexBuffers2EXT( m_commandBuffer, + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ), + reinterpret_cast( sizes.data() ), + reinterpret_cast( strides.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDepthTestEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnableEXT( Bool32 depthTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthTestEnableEXT( static_cast( m_commandBuffer ), static_cast( depthTestEnable ) ); + } + + // wrapper function for command vkCmdSetDepthWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnableEXT( Bool32 depthWriteEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthWriteEnableEXT( static_cast( m_commandBuffer ), static_cast( depthWriteEnable ) ); + } + + // wrapper function for command vkCmdSetDepthCompareOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOpEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOpEXT( CompareOp depthCompareOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthCompareOpEXT( static_cast( m_commandBuffer ), static_cast( depthCompareOp ) ); + } + + // wrapper function for command vkCmdSetDepthBoundsTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnableEXT( Bool32 depthBoundsTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBoundsTestEnableEXT( static_cast( m_commandBuffer ), static_cast( depthBoundsTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilTestEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnableEXT( Bool32 stencilTestEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilTestEnableEXT( static_cast( m_commandBuffer ), static_cast( stencilTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOpEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setStencilOpEXT( + StencilFaceFlags faceMask, StencilOp failOp, StencilOp passOp, StencilOp depthFailOp, CompareOp compareOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetStencilOpEXT( static_cast( m_commandBuffer ), + static_cast( faceMask ), + static_cast( failOp ), + static_cast( passOp ), + static_cast( depthFailOp ), + static_cast( compareOp ) ); + } + + //=== VK_KHR_deferred_host_operations === + + // wrapper function for command vkCreateDeferredOperationKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDeferredOperationKHR( const AllocationCallbacks * pAllocator, + DeferredOperationKHR * pDeferredOperation, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDeferredOperationKHR( static_cast( m_device ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pDeferredOperation ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDeferredOperationKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createDeferredOperationKHR( Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDeferredOperationKHR && "Function requires " ); +# endif + + DeferredOperationKHR deferredOperation; + Result result = static_cast( d.vkCreateDeferredOperationKHR( + m_device, reinterpret_cast( allocator.get() ), reinterpret_cast( &deferredOperation ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDeferredOperationKHR" ); + + return detail::createResultValueType( result, std::move( deferredOperation ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDeferredOperationKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createDeferredOperationKHRUnique( Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDeferredOperationKHR && "Function requires " ); +# endif + + DeferredOperationKHR deferredOperation; + Result result = static_cast( d.vkCreateDeferredOperationKHR( + m_device, reinterpret_cast( allocator.get() ), reinterpret_cast( &deferredOperation ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDeferredOperationKHRUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( deferredOperation, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + VULKAN_HPP_INLINE void + Device::destroyDeferredOperationKHR( DeferredOperationKHR operation, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDeferredOperationKHR( + static_cast( m_device ), static_cast( operation ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + VULKAN_HPP_INLINE void Device::destroyDeferredOperationKHR( DeferredOperationKHR operation, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDeferredOperationKHR && "Function requires " ); +# endif + + d.vkDestroyDeferredOperationKHR( + m_device, static_cast( operation ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + VULKAN_HPP_INLINE void Device::destroy( DeferredOperationKHR operation, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDeferredOperationKHR( + static_cast( m_device ), static_cast( operation ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + VULKAN_HPP_INLINE void + Device::destroy( DeferredOperationKHR operation, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDeferredOperationKHR && "Function requires " ); +# endif + + d.vkDestroyDeferredOperationKHR( + m_device, static_cast( operation ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeferredOperationMaxConcurrencyKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationMaxConcurrencyKHR.html + template + VULKAN_HPP_INLINE uint32_t Device::getDeferredOperationMaxConcurrencyKHR( DeferredOperationKHR operation, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return d.vkGetDeferredOperationMaxConcurrencyKHR( static_cast( m_device ), static_cast( operation ) ); + } + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeferredOperationResultKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationResultKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getDeferredOperationResultKHR( DeferredOperationKHR operation, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeferredOperationResultKHR( static_cast( m_device ), static_cast( operation ) ) ); + } +#else + // wrapper function for command vkGetDeferredOperationResultKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationResultKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getDeferredOperationResultKHR( DeferredOperationKHR operation, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeferredOperationResultKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkGetDeferredOperationResultKHR( m_device, static_cast( operation ) ) ); + + return static_cast( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDeferredOperationJoinKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeferredOperationJoinKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::deferredOperationJoinKHR( DeferredOperationKHR operation, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkDeferredOperationJoinKHR( static_cast( m_device ), static_cast( operation ) ) ); + } +#else + // wrapper function for command vkDeferredOperationJoinKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeferredOperationJoinKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::deferredOperationJoinKHR( DeferredOperationKHR operation, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDeferredOperationJoinKHR && "Function requires " ); +# endif + + Result result = static_cast( d.vkDeferredOperationJoinKHR( m_device, static_cast( operation ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::deferredOperationJoinKHR", { Result::eSuccess, Result::eThreadDoneKHR, Result::eThreadIdleKHR } ); + + return static_cast( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_pipeline_executable_properties === + + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelineExecutablePropertiesKHR( const PipelineInfoKHR * pPipelineInfo, + uint32_t * pExecutableCount, + PipelineExecutablePropertiesKHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPipelineExecutablePropertiesKHR( static_cast( m_device ), + reinterpret_cast( pPipelineInfo ), + pExecutableCount, + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + template < + typename PipelineExecutablePropertiesKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineExecutablePropertiesKHR && + "Function requires " ); +# endif + + std::vector properties; + uint32_t executableCount; + Result result; + do + { + result = static_cast( + d.vkGetPipelineExecutablePropertiesKHR( m_device, reinterpret_cast( &pipelineInfo ), &executableCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && executableCount ) + { + properties.resize( executableCount ); + result = static_cast( d.vkGetPipelineExecutablePropertiesKHR( m_device, + reinterpret_cast( &pipelineInfo ), + &executableCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" ); + VULKAN_HPP_ASSERT( executableCount <= properties.size() ); + if ( executableCount < properties.size() ) + { + properties.resize( executableCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + template < + typename PipelineExecutablePropertiesKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo, + PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineExecutablePropertiesKHR && + "Function requires " ); +# endif + + std::vector properties( pipelineExecutablePropertiesKHRAllocator ); + uint32_t executableCount; + Result result; + do + { + result = static_cast( + d.vkGetPipelineExecutablePropertiesKHR( m_device, reinterpret_cast( &pipelineInfo ), &executableCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && executableCount ) + { + properties.resize( executableCount ); + result = static_cast( d.vkGetPipelineExecutablePropertiesKHR( m_device, + reinterpret_cast( &pipelineInfo ), + &executableCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" ); + VULKAN_HPP_ASSERT( executableCount <= properties.size() ); + if ( executableCount < properties.size() ) + { + properties.resize( executableCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR * pExecutableInfo, + uint32_t * pStatisticCount, + PipelineExecutableStatisticKHR * pStatistics, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPipelineExecutableStatisticsKHR( static_cast( m_device ), + reinterpret_cast( pExecutableInfo ), + pStatisticCount, + reinterpret_cast( pStatistics ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + template < + typename PipelineExecutableStatisticKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineExecutableStatisticsKHR && + "Function requires " ); +# endif + + std::vector statistics; + uint32_t statisticCount; + Result result; + do + { + result = static_cast( d.vkGetPipelineExecutableStatisticsKHR( + m_device, reinterpret_cast( &executableInfo ), &statisticCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && statisticCount ) + { + statistics.resize( statisticCount ); + result = static_cast( d.vkGetPipelineExecutableStatisticsKHR( m_device, + reinterpret_cast( &executableInfo ), + &statisticCount, + reinterpret_cast( statistics.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" ); + VULKAN_HPP_ASSERT( statisticCount <= statistics.size() ); + if ( statisticCount < statistics.size() ) + { + statistics.resize( statisticCount ); + } + return detail::createResultValueType( result, std::move( statistics ) ); + } + + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + template < + typename PipelineExecutableStatisticKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo, + PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineExecutableStatisticsKHR && + "Function requires " ); +# endif + + std::vector statistics( pipelineExecutableStatisticKHRAllocator ); + uint32_t statisticCount; + Result result; + do + { + result = static_cast( d.vkGetPipelineExecutableStatisticsKHR( + m_device, reinterpret_cast( &executableInfo ), &statisticCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && statisticCount ) + { + statistics.resize( statisticCount ); + result = static_cast( d.vkGetPipelineExecutableStatisticsKHR( m_device, + reinterpret_cast( &executableInfo ), + &statisticCount, + reinterpret_cast( statistics.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" ); + VULKAN_HPP_ASSERT( statisticCount <= statistics.size() ); + if ( statisticCount < statistics.size() ) + { + statistics.resize( statisticCount ); + } + return detail::createResultValueType( result, std::move( statistics ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR * pExecutableInfo, + uint32_t * pInternalRepresentationCount, + PipelineExecutableInternalRepresentationKHR * pInternalRepresentations, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPipelineExecutableInternalRepresentationsKHR( static_cast( m_device ), + reinterpret_cast( pExecutableInfo ), + pInternalRepresentationCount, + reinterpret_cast( pInternalRepresentations ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + Device::getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR & executableInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineExecutableInternalRepresentationsKHR && + "Function requires " ); +# endif + + std::vector internalRepresentations; + uint32_t internalRepresentationCount; + Result result; + do + { + result = static_cast( d.vkGetPipelineExecutableInternalRepresentationsKHR( + m_device, reinterpret_cast( &executableInfo ), &internalRepresentationCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && internalRepresentationCount ) + { + internalRepresentations.resize( internalRepresentationCount ); + result = static_cast( d.vkGetPipelineExecutableInternalRepresentationsKHR( + m_device, + reinterpret_cast( &executableInfo ), + &internalRepresentationCount, + reinterpret_cast( internalRepresentations.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" ); + VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() ); + if ( internalRepresentationCount < internalRepresentations.size() ) + { + internalRepresentations.resize( internalRepresentationCount ); + } + return detail::createResultValueType( result, std::move( internalRepresentations ) ); + } + + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + Device::getPipelineExecutableInternalRepresentationsKHR( + const PipelineExecutableInfoKHR & executableInfo, + PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineExecutableInternalRepresentationsKHR && + "Function requires " ); +# endif + + std::vector internalRepresentations( + pipelineExecutableInternalRepresentationKHRAllocator ); + uint32_t internalRepresentationCount; + Result result; + do + { + result = static_cast( d.vkGetPipelineExecutableInternalRepresentationsKHR( + m_device, reinterpret_cast( &executableInfo ), &internalRepresentationCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && internalRepresentationCount ) + { + internalRepresentations.resize( internalRepresentationCount ); + result = static_cast( d.vkGetPipelineExecutableInternalRepresentationsKHR( + m_device, + reinterpret_cast( &executableInfo ), + &internalRepresentationCount, + reinterpret_cast( internalRepresentations.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" ); + VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() ); + if ( internalRepresentationCount < internalRepresentations.size() ) + { + internalRepresentations.resize( internalRepresentationCount ); + } + return detail::createResultValueType( result, std::move( internalRepresentations ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_host_image_copy === + + // wrapper function for command vkCopyMemoryToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImageEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToImageEXT( const CopyMemoryToImageInfo * pCopyMemoryToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkCopyMemoryToImageEXT( static_cast( m_device ), reinterpret_cast( pCopyMemoryToImageInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImageEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::copyMemoryToImageEXT( const CopyMemoryToImageInfo & copyMemoryToImageInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyMemoryToImageEXT && "Function requires or " ); +# endif + + Result result = static_cast( d.vkCopyMemoryToImageEXT( m_device, reinterpret_cast( ©MemoryToImageInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToImageEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemoryEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyImageToMemoryEXT( const CopyImageToMemoryInfo * pCopyImageToMemoryInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkCopyImageToMemoryEXT( static_cast( m_device ), reinterpret_cast( pCopyImageToMemoryInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemoryEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::copyImageToMemoryEXT( const CopyImageToMemoryInfo & copyImageToMemoryInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyImageToMemoryEXT && "Function requires or " ); +# endif + + Result result = static_cast( d.vkCopyImageToMemoryEXT( m_device, reinterpret_cast( ©ImageToMemoryInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToMemoryEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImageEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyImageToImageEXT( const CopyImageToImageInfo * pCopyImageToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkCopyImageToImageEXT( static_cast( m_device ), reinterpret_cast( pCopyImageToImageInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImageEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::copyImageToImageEXT( const CopyImageToImageInfo & copyImageToImageInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyImageToImageEXT && "Function requires or " ); +# endif + + Result result = static_cast( d.vkCopyImageToImageEXT( m_device, reinterpret_cast( ©ImageToImageInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToImageEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkTransitionImageLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayoutEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::transitionImageLayoutEXT( uint32_t transitionCount, + const HostImageLayoutTransitionInfo * pTransitions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkTransitionImageLayoutEXT( + static_cast( m_device ), transitionCount, reinterpret_cast( pTransitions ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkTransitionImageLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayoutEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::transitionImageLayoutEXT( ArrayProxy const & transitions, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkTransitionImageLayoutEXT && "Function requires or " ); +# endif + + Result result = static_cast( + d.vkTransitionImageLayoutEXT( m_device, transitions.size(), reinterpret_cast( transitions.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::transitionImageLayoutEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_INLINE void Device::getImageSubresourceLayout2EXT( Image image, + const ImageSubresource2 * pSubresource, + SubresourceLayout2 * pLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSubresourceLayout2EXT( static_cast( m_device ), + static_cast( image ), + reinterpret_cast( pSubresource ), + reinterpret_cast( pLayout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE SubresourceLayout2 Device::getImageSubresourceLayout2EXT( Image image, + const ImageSubresource2 & subresource, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkGetImageSubresourceLayout2EXT && + "Function requires or or or " ); +# endif + + SubresourceLayout2 layout; + d.vkGetImageSubresourceLayout2EXT( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageSubresourceLayout2EXT( Image image, const ImageSubresource2 & subresource, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkGetImageSubresourceLayout2EXT && + "Function requires or or or " ); +# endif + + StructureChain structureChain; + SubresourceLayout2 & layout = structureChain.template get(); + d.vkGetImageSubresourceLayout2EXT( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_map_memory2 === + + // wrapper function for command vkMapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::mapMemory2KHR( const MemoryMapInfo * pMemoryMapInfo, + void ** ppData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkMapMemory2KHR( static_cast( m_device ), reinterpret_cast( pMemoryMapInfo ), ppData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::mapMemory2KHR( const MemoryMapInfo & memoryMapInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkMapMemory2KHR && "Function requires or " ); +# endif + + void * pData; + Result result = static_cast( d.vkMapMemory2KHR( m_device, reinterpret_cast( &memoryMapInfo ), &pData ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mapMemory2KHR" ); + + return detail::createResultValueType( result, std::move( pData ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUnmapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::unmapMemory2KHR( const MemoryUnmapInfo * pMemoryUnmapInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkUnmapMemory2KHR( static_cast( m_device ), reinterpret_cast( pMemoryUnmapInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUnmapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2KHR.html + template + VULKAN_HPP_INLINE typename ResultValueType::type Device::unmapMemory2KHR( const MemoryUnmapInfo & memoryUnmapInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUnmapMemory2KHR && "Function requires or " ); +# endif + + Result result = static_cast( d.vkUnmapMemory2KHR( m_device, reinterpret_cast( &memoryUnmapInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::unmapMemory2KHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::releaseSwapchainImagesEXT( const ReleaseSwapchainImagesInfoKHR * pReleaseInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkReleaseSwapchainImagesEXT( static_cast( m_device ), reinterpret_cast( pReleaseInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseSwapchainImagesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesEXT.html + template + VULKAN_HPP_INLINE typename ResultValueType::type Device::releaseSwapchainImagesEXT( const ReleaseSwapchainImagesInfoKHR & releaseInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleaseSwapchainImagesEXT && + "Function requires or " ); +# endif + + Result result = static_cast( d.vkReleaseSwapchainImagesEXT( m_device, reinterpret_cast( &releaseInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::releaseSwapchainImagesEXT" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_INLINE void Device::getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetGeneratedCommandsMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 + Device::getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetGeneratedCommandsMemoryRequirementsNV && + "Function requires " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetGeneratedCommandsMemoryRequirementsNV( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetGeneratedCommandsMemoryRequirementsNV && + "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetGeneratedCommandsMemoryRequirementsNV( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPreprocessGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV * pGeneratedCommandsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPreprocessGeneratedCommandsNV( static_cast( m_commandBuffer ), + reinterpret_cast( pGeneratedCommandsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPreprocessGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV & generatedCommandsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPreprocessGeneratedCommandsNV && "Function requires " ); +# endif + + d.vkCmdPreprocessGeneratedCommandsNV( m_commandBuffer, reinterpret_cast( &generatedCommandsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdExecuteGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsNV( Bool32 isPreprocessed, + const GeneratedCommandsInfoNV * pGeneratedCommandsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdExecuteGeneratedCommandsNV( static_cast( m_commandBuffer ), + static_cast( isPreprocessed ), + reinterpret_cast( pGeneratedCommandsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdExecuteGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsNV( Bool32 isPreprocessed, + const GeneratedCommandsInfoNV & generatedCommandsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdExecuteGeneratedCommandsNV && "Function requires " ); +# endif + + d.vkCmdExecuteGeneratedCommandsNV( + m_commandBuffer, static_cast( isPreprocessed ), reinterpret_cast( &generatedCommandsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindPipelineShaderGroupNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipelineShaderGroupNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindPipelineShaderGroupNV( PipelineBindPoint pipelineBindPoint, + Pipeline pipeline, + uint32_t groupIndex, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindPipelineShaderGroupNV( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( pipeline ), groupIndex ); + } + + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createIndirectCommandsLayoutNV( const IndirectCommandsLayoutCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + IndirectCommandsLayoutNV * pIndirectCommandsLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateIndirectCommandsLayoutNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pIndirectCommandsLayout ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createIndirectCommandsLayoutNV( + const IndirectCommandsLayoutCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIndirectCommandsLayoutNV && "Function requires " ); +# endif + + IndirectCommandsLayoutNV indirectCommandsLayout; + Result result = static_cast( d.vkCreateIndirectCommandsLayoutNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectCommandsLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectCommandsLayoutNV" ); + + return detail::createResultValueType( result, std::move( indirectCommandsLayout ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createIndirectCommandsLayoutNVUnique( const IndirectCommandsLayoutCreateInfoNV & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIndirectCommandsLayoutNV && "Function requires " ); +# endif + + IndirectCommandsLayoutNV indirectCommandsLayout; + Result result = static_cast( d.vkCreateIndirectCommandsLayoutNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectCommandsLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectCommandsLayoutNVUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( indirectCommandsLayout, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutNV( IndirectCommandsLayoutNV indirectCommandsLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyIndirectCommandsLayoutNV( static_cast( m_device ), + static_cast( indirectCommandsLayout ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutNV( IndirectCommandsLayoutNV indirectCommandsLayout, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyIndirectCommandsLayoutNV && "Function requires " ); +# endif + + d.vkDestroyIndirectCommandsLayoutNV( + m_device, static_cast( indirectCommandsLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + VULKAN_HPP_INLINE void + Device::destroy( IndirectCommandsLayoutNV indirectCommandsLayout, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyIndirectCommandsLayoutNV( static_cast( m_device ), + static_cast( indirectCommandsLayout ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + VULKAN_HPP_INLINE void Device::destroy( IndirectCommandsLayoutNV indirectCommandsLayout, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyIndirectCommandsLayoutNV && "Function requires " ); +# endif + + d.vkDestroyIndirectCommandsLayoutNV( + m_device, static_cast( indirectCommandsLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_depth_bias_control === + + // wrapper function for command vkCmdSetDepthBias2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBias2EXT( const DepthBiasInfoEXT * pDepthBiasInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBias2EXT( static_cast( m_commandBuffer ), reinterpret_cast( pDepthBiasInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDepthBias2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBias2EXT( const DepthBiasInfoEXT & depthBiasInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetDepthBias2EXT && "Function requires " ); +# endif + + d.vkCmdSetDepthBias2EXT( m_commandBuffer, reinterpret_cast( &depthBiasInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_acquire_drm_display === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd, + DisplayKHR display, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAcquireDrmDisplayEXT( static_cast( m_physicalDevice ), drmFd, static_cast( display ) ) ); + } +#else + // wrapper function for command vkAcquireDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireDrmDisplayEXT.html + template + VULKAN_HPP_INLINE typename ResultValueType::type PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd, DisplayKHR display, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireDrmDisplayEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkAcquireDrmDisplayEXT( m_physicalDevice, drmFd, static_cast( display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireDrmDisplayEXT" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId, DisplayKHR * display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetDrmDisplayEXT( static_cast( m_physicalDevice ), drmFd, connectorId, reinterpret_cast( display ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDrmDisplayEXT && "Function requires " ); +# endif + + DisplayKHR display; + Result result = static_cast( d.vkGetDrmDisplayEXT( m_physicalDevice, drmFd, connectorId, reinterpret_cast( &display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDrmDisplayEXT" ); + + return detail::createResultValueType( result, std::move( display ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getDrmDisplayEXTUnique( int32_t drmFd, uint32_t connectorId, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDrmDisplayEXT && "Function requires " ); +# endif + + DisplayKHR display; + Result result = static_cast( d.vkGetDrmDisplayEXT( m_physicalDevice, drmFd, connectorId, reinterpret_cast( &display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDrmDisplayEXTUnique" ); + + return detail::createResultValueType( result, UniqueHandle( display, detail::ObjectRelease( *this, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_private_data === + + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPrivateDataSlotEXT( const PrivateDataSlotCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PrivateDataSlot * pPrivateDataSlot, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreatePrivateDataSlotEXT( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPrivateDataSlot ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createPrivateDataSlotEXT( const PrivateDataSlotCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePrivateDataSlotEXT && "Function requires or " ); +# endif + + PrivateDataSlot privateDataSlot; + Result result = static_cast( d.vkCreatePrivateDataSlotEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &privateDataSlot ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotEXT" ); + + return detail::createResultValueType( result, std::move( privateDataSlot ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createPrivateDataSlotEXTUnique( + const PrivateDataSlotCreateInfo & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePrivateDataSlotEXT && "Function requires or " ); +# endif + + PrivateDataSlot privateDataSlot; + Result result = static_cast( d.vkCreatePrivateDataSlotEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &privateDataSlot ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotEXTUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( privateDataSlot, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlotEXT.html + template + VULKAN_HPP_INLINE void + Device::destroyPrivateDataSlotEXT( PrivateDataSlot privateDataSlot, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPrivateDataSlotEXT( + static_cast( m_device ), static_cast( privateDataSlot ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlotEXT.html + template + VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT( PrivateDataSlot privateDataSlot, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPrivateDataSlotEXT && "Function requires or " ); +# endif + + d.vkDestroyPrivateDataSlotEXT( + m_device, static_cast( privateDataSlot ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setPrivateDataEXT( + ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, uint64_t data, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkSetPrivateDataEXT( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ) ); + } +#else + // wrapper function for command vkSetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateDataEXT.html + template + VULKAN_HPP_INLINE typename ResultValueType::type + Device::setPrivateDataEXT( ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, uint64_t data, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetPrivateDataEXT && "Function requires or " ); +# endif + + Result result = static_cast( + d.vkSetPrivateDataEXT( m_device, static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateDataEXT" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateDataEXT.html + template + VULKAN_HPP_INLINE void Device::getPrivateDataEXT( + ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, uint64_t * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPrivateDataEXT( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getPrivateDataEXT( ObjectType objectType_, uint64_t objectHandle, PrivateDataSlot privateDataSlot, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPrivateDataEXT && "Function requires or " ); +# endif + + uint64_t data; + d.vkGetPrivateDataEXT( m_device, static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), &data ); + + return data; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR * pQualityLevelInfo, + VideoEncodeQualityLevelPropertiesKHR * pQualityLevelProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pQualityLevelInfo ), + reinterpret_cast( pQualityLevelProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR && + "Function requires " ); +# endif + + VideoEncodeQualityLevelPropertiesKHR qualityLevelProperties; + Result result = static_cast( + d.vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( m_physicalDevice, + reinterpret_cast( &qualityLevelInfo ), + reinterpret_cast( &qualityLevelProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR" ); + + return detail::createResultValueType( result, std::move( qualityLevelProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR && + "Function requires " ); +# endif + + StructureChain structureChain; + VideoEncodeQualityLevelPropertiesKHR & qualityLevelProperties = structureChain.template get(); + Result result = static_cast( + d.vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( m_physicalDevice, + reinterpret_cast( &qualityLevelInfo ), + reinterpret_cast( &qualityLevelProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR * pVideoSessionParametersInfo, + VideoEncodeSessionParametersFeedbackInfoKHR * pFeedbackInfo, + size_t * pDataSize, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetEncodedVideoSessionParametersKHR( static_cast( m_device ), + reinterpret_cast( pVideoSessionParametersInfo ), + reinterpret_cast( pFeedbackInfo ), + pDataSize, + pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>>::type + Device::getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetEncodedVideoSessionParametersKHR && "Function requires " ); +# endif + + std::pair> data_; + VideoEncodeSessionParametersFeedbackInfoKHR & feedbackInfo = data_.first; + std::vector & data = data_.second; + size_t dataSize; + Result result; + do + { + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEncodedVideoSessionParametersKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>>::type + Device::getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, + Uint8_tAllocator & uint8_tAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetEncodedVideoSessionParametersKHR && "Function requires " ); +# endif + + std::pair> data_( + std::piecewise_construct, std::forward_as_tuple(), std::forward_as_tuple( uint8_tAllocator ) ); + VideoEncodeSessionParametersFeedbackInfoKHR & feedbackInfo = data_.first; + std::vector & data = data_.second; + size_t dataSize; + Result result; + do + { + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEncodedVideoSessionParametersKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, std::vector>>::type + Device::getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetEncodedVideoSessionParametersKHR && "Function requires " ); +# endif + + std::pair, std::vector> data_; + VideoEncodeSessionParametersFeedbackInfoKHR & feedbackInfo = data_.first.template get(); + std::vector & data = data_.second; + size_t dataSize; + Result result; + do + { + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEncodedVideoSessionParametersKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, std::vector>>::type + Device::getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, + Uint8_tAllocator & uint8_tAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetEncodedVideoSessionParametersKHR && "Function requires " ); +# endif + + std::pair, std::vector> data_( + std::piecewise_construct, std::forward_as_tuple(), std::forward_as_tuple( uint8_tAllocator ) ); + VideoEncodeSessionParametersFeedbackInfoKHR & feedbackInfo = data_.first.template get(); + std::vector & data = data_.second; + size_t dataSize; + Result result; + do + { + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( + d.vkGetEncodedVideoSessionParametersKHR( m_device, + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEncodedVideoSessionParametersKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEncodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEncodeVideoKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VideoEncodeInfoKHR * pEncodeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEncodeVideoKHR( static_cast( m_commandBuffer ), reinterpret_cast( pEncodeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEncodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEncodeVideoKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VideoEncodeInfoKHR & encodeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEncodeVideoKHR && "Function requires " ); +# endif + + d.vkCmdEncodeVideoKHR( m_commandBuffer, reinterpret_cast( &encodeInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCudaModuleNV( const CudaModuleCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + CudaModuleNV * pModule, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateCudaModuleNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pModule ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createCudaModuleNV( const CudaModuleCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCudaModuleNV && "Function requires " ); +# endif + + CudaModuleNV module; + Result result = static_cast( d.vkCreateCudaModuleNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &module ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCudaModuleNV" ); + + return detail::createResultValueType( result, std::move( module ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createCudaModuleNVUnique( const CudaModuleCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCudaModuleNV && "Function requires " ); +# endif + + CudaModuleNV module; + Result result = static_cast( d.vkCreateCudaModuleNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &module ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCudaModuleNVUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( module, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getCudaModuleCacheNV( CudaModuleNV module, size_t * pCacheSize, void * pCacheData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetCudaModuleCacheNV( static_cast( m_device ), static_cast( module ), pCacheSize, pCacheData ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getCudaModuleCacheNV( CudaModuleNV module, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCudaModuleCacheNV && "Function requires " ); +# endif + + std::vector cacheData; + size_t cacheSize; + Result result; + do + { + result = static_cast( d.vkGetCudaModuleCacheNV( m_device, static_cast( module ), &cacheSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && cacheSize ) + { + cacheData.resize( cacheSize ); + result = static_cast( + d.vkGetCudaModuleCacheNV( m_device, static_cast( module ), &cacheSize, reinterpret_cast( cacheData.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCudaModuleCacheNV" ); + VULKAN_HPP_ASSERT( cacheSize <= cacheData.size() ); + if ( cacheSize < cacheData.size() ) + { + cacheData.resize( cacheSize ); + } + return detail::createResultValueType( result, std::move( cacheData ) ); + } + + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getCudaModuleCacheNV( CudaModuleNV module, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCudaModuleCacheNV && "Function requires " ); +# endif + + std::vector cacheData( uint8_tAllocator ); + size_t cacheSize; + Result result; + do + { + result = static_cast( d.vkGetCudaModuleCacheNV( m_device, static_cast( module ), &cacheSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && cacheSize ) + { + cacheData.resize( cacheSize ); + result = static_cast( + d.vkGetCudaModuleCacheNV( m_device, static_cast( module ), &cacheSize, reinterpret_cast( cacheData.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCudaModuleCacheNV" ); + VULKAN_HPP_ASSERT( cacheSize <= cacheData.size() ); + if ( cacheSize < cacheData.size() ) + { + cacheData.resize( cacheSize ); + } + return detail::createResultValueType( result, std::move( cacheData ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createCudaFunctionNV( const CudaFunctionCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + CudaFunctionNV * pFunction, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateCudaFunctionNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pFunction ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createCudaFunctionNV( const CudaFunctionCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCudaFunctionNV && "Function requires " ); +# endif + + CudaFunctionNV function; + Result result = static_cast( d.vkCreateCudaFunctionNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &function ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCudaFunctionNV" ); + + return detail::createResultValueType( result, std::move( function ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createCudaFunctionNVUnique( const CudaFunctionCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateCudaFunctionNV && "Function requires " ); +# endif + + CudaFunctionNV function; + Result result = static_cast( d.vkCreateCudaFunctionNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &function ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createCudaFunctionNVUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( function, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + VULKAN_HPP_INLINE void + Device::destroyCudaModuleNV( CudaModuleNV module, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCudaModuleNV( + static_cast( m_device ), static_cast( module ), reinterpret_cast( pAllocator ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + VULKAN_HPP_INLINE void + Device::destroyCudaModuleNV( CudaModuleNV module, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCudaModuleNV && "Function requires " ); +# endif + + d.vkDestroyCudaModuleNV( m_device, static_cast( module ), reinterpret_cast( allocator.get() ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + VULKAN_HPP_INLINE void Device::destroy( CudaModuleNV module, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCudaModuleNV( + static_cast( m_device ), static_cast( module ), reinterpret_cast( pAllocator ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + VULKAN_HPP_INLINE void Device::destroy( CudaModuleNV module, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCudaModuleNV && "Function requires " ); +# endif + + d.vkDestroyCudaModuleNV( m_device, static_cast( module ), reinterpret_cast( allocator.get() ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + VULKAN_HPP_INLINE void + Device::destroyCudaFunctionNV( CudaFunctionNV function, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCudaFunctionNV( + static_cast( m_device ), static_cast( function ), reinterpret_cast( pAllocator ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + VULKAN_HPP_INLINE void + Device::destroyCudaFunctionNV( CudaFunctionNV function, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCudaFunctionNV && "Function requires " ); +# endif + + d.vkDestroyCudaFunctionNV( m_device, static_cast( function ), reinterpret_cast( allocator.get() ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + VULKAN_HPP_INLINE void Device::destroy( CudaFunctionNV function, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyCudaFunctionNV( + static_cast( m_device ), static_cast( function ), reinterpret_cast( pAllocator ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + VULKAN_HPP_INLINE void Device::destroy( CudaFunctionNV function, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyCudaFunctionNV && "Function requires " ); +# endif + + d.vkDestroyCudaFunctionNV( m_device, static_cast( function ), reinterpret_cast( allocator.get() ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCudaLaunchKernelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCudaLaunchKernelNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::cudaLaunchKernelNV( const CudaLaunchInfoNV * pLaunchInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCudaLaunchKernelNV( static_cast( m_commandBuffer ), reinterpret_cast( pLaunchInfo ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCudaLaunchKernelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCudaLaunchKernelNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::cudaLaunchKernelNV( const CudaLaunchInfoNV & launchInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCudaLaunchKernelNV && "Function requires " ); +# endif + + d.vkCmdCudaLaunchKernelNV( m_commandBuffer, reinterpret_cast( &launchInfo ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + + // wrapper function for command vkCmdDispatchTileQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchTileQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchTileQCOM( const DispatchTileInfoQCOM * pDispatchTileInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchTileQCOM( static_cast( m_commandBuffer ), reinterpret_cast( pDispatchTileInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchTileQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchTileQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchTileQCOM( const DispatchTileInfoQCOM & dispatchTileInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDispatchTileQCOM && "Function requires " ); +# endif + + d.vkCmdDispatchTileQCOM( m_commandBuffer, reinterpret_cast( &dispatchTileInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginPerTileExecutionQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginPerTileExecutionQCOM( const PerTileBeginInfoQCOM * pPerTileBeginInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBeginPerTileExecutionQCOM( static_cast( m_commandBuffer ), reinterpret_cast( pPerTileBeginInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginPerTileExecutionQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::beginPerTileExecutionQCOM( const PerTileBeginInfoQCOM & perTileBeginInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBeginPerTileExecutionQCOM && "Function requires " ); +# endif + + d.vkCmdBeginPerTileExecutionQCOM( m_commandBuffer, reinterpret_cast( &perTileBeginInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndPerTileExecutionQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndPerTileExecutionQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::endPerTileExecutionQCOM( const PerTileEndInfoQCOM * pPerTileEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndPerTileExecutionQCOM( static_cast( m_commandBuffer ), reinterpret_cast( pPerTileEndInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndPerTileExecutionQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndPerTileExecutionQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::endPerTileExecutionQCOM( const PerTileEndInfoQCOM & perTileEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEndPerTileExecutionQCOM && "Function requires " ); +# endif + + d.vkCmdEndPerTileExecutionQCOM( m_commandBuffer, reinterpret_cast( &perTileEndInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + // wrapper function for command vkExportMetalObjectsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkExportMetalObjectsEXT.html + template + VULKAN_HPP_INLINE void Device::exportMetalObjectsEXT( ExportMetalObjectsInfoEXT * pMetalObjectsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkExportMetalObjectsEXT( static_cast( m_device ), reinterpret_cast( pMetalObjectsInfo ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkExportMetalObjectsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkExportMetalObjectsEXT.html + template + VULKAN_HPP_INLINE void Device::exportMetalObjectsEXT( ExportMetalObjectsInfoEXT & metalObjectsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkExportMetalObjectsEXT && "Function requires " ); +# endif + + d.vkExportMetalObjectsEXT( m_device, reinterpret_cast( &metalObjectsInfo ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + + // wrapper function for command vkCmdSetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( Event event, const DependencyInfo * pDependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetEvent2KHR( + static_cast( m_commandBuffer ), static_cast( event ), reinterpret_cast( pDependencyInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( Event event, const DependencyInfo & dependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetEvent2KHR && "Function requires or " ); +# endif + + d.vkCmdSetEvent2KHR( m_commandBuffer, static_cast( event ), reinterpret_cast( &dependencyInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::resetEvent2KHR( Event event, PipelineStageFlags2 stageMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResetEvent2KHR( static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdWaitEvents2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( uint32_t eventCount, + const Event * pEvents, + const DependencyInfo * pDependencyInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWaitEvents2KHR( static_cast( m_commandBuffer ), + eventCount, + reinterpret_cast( pEvents ), + reinterpret_cast( pDependencyInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWaitEvents2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( ArrayProxy const & events, + ArrayProxy const & dependencyInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdWaitEvents2KHR && "Function requires or " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() ); +# else + if ( events.size() != dependencyInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2KHR: events.size() != dependencyInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdWaitEvents2KHR( m_commandBuffer, + events.size(), + reinterpret_cast( events.data() ), + reinterpret_cast( dependencyInfos.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPipelineBarrier2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const DependencyInfo * pDependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPipelineBarrier2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pDependencyInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPipelineBarrier2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const DependencyInfo & dependencyInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPipelineBarrier2KHR && "Function requires or " ); +# endif + + d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast( &dependencyInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteTimestamp2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2KHR.html + template + VULKAN_HPP_INLINE void + CommandBuffer::writeTimestamp2KHR( PipelineStageFlags2 stage, QueryPool queryPool, uint32_t query, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteTimestamp2KHR( + static_cast( m_commandBuffer ), static_cast( stage ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkQueueSubmit2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Queue::submit2KHR( uint32_t submitCount, const SubmitInfo2 * pSubmits, Fence fence, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkQueueSubmit2KHR( static_cast( m_queue ), submitCount, reinterpret_cast( pSubmits ), static_cast( fence ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSubmit2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2KHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Queue::submit2KHR( ArrayProxy const & submits, Fence fence, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueSubmit2KHR && "Function requires or " ); +# endif + + Result result = static_cast( + d.vkQueueSubmit2KHR( m_queue, submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2KHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkGetDescriptorSetLayoutSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSizeEXT.html + template + VULKAN_HPP_INLINE void + Device::getDescriptorSetLayoutSizeEXT( DescriptorSetLayout layout, DeviceSize * pLayoutSizeInBytes, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorSetLayoutSizeEXT( + static_cast( m_device ), static_cast( layout ), reinterpret_cast( pLayoutSizeInBytes ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSizeEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceSize Device::getDescriptorSetLayoutSizeEXT( DescriptorSetLayout layout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutSizeEXT && "Function requires " ); +# endif + + DeviceSize layoutSizeInBytes; + d.vkGetDescriptorSetLayoutSizeEXT( m_device, static_cast( layout ), reinterpret_cast( &layoutSizeInBytes ) ); + + return layoutSizeInBytes; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorSetLayoutBindingOffsetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html + template + VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutBindingOffsetEXT( DescriptorSetLayout layout, + uint32_t binding, + DeviceSize * pOffset, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorSetLayoutBindingOffsetEXT( + static_cast( m_device ), static_cast( layout ), binding, reinterpret_cast( pOffset ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutBindingOffsetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceSize Device::getDescriptorSetLayoutBindingOffsetEXT( DescriptorSetLayout layout, + uint32_t binding, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutBindingOffsetEXT && + "Function requires " ); +# endif + + DeviceSize offset; + d.vkGetDescriptorSetLayoutBindingOffsetEXT( m_device, static_cast( layout ), binding, reinterpret_cast( &offset ) ); + + return offset; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + VULKAN_HPP_INLINE void + Device::getDescriptorEXT( const DescriptorGetInfoEXT * pDescriptorInfo, size_t dataSize, void * pDescriptor, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorEXT( static_cast( m_device ), reinterpret_cast( pDescriptorInfo ), dataSize, pDescriptor ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + VULKAN_HPP_INLINE void + Device::getDescriptorEXT( const DescriptorGetInfoEXT & descriptorInfo, size_t dataSize, void * pDescriptor, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorEXT && "Function requires " ); +# endif + + d.vkGetDescriptorEXT( m_device, reinterpret_cast( &descriptorInfo ), dataSize, pDescriptor ); + } + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DescriptorType Device::getDescriptorEXT( const DescriptorGetInfoEXT & descriptorInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorEXT && "Function requires " ); +# endif + + DescriptorType descriptor; + d.vkGetDescriptorEXT( + m_device, reinterpret_cast( &descriptorInfo ), sizeof( DescriptorType ), reinterpret_cast( &descriptor ) ); + + return descriptor; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBuffersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorBuffersEXT( uint32_t bufferCount, + const DescriptorBufferBindingInfoEXT * pBindingInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindDescriptorBuffersEXT( + static_cast( m_commandBuffer ), bufferCount, reinterpret_cast( pBindingInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBuffersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorBuffersEXT( ArrayProxy const & bindingInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindDescriptorBuffersEXT && "Function requires " ); +# endif + + d.vkCmdBindDescriptorBuffersEXT( m_commandBuffer, bindingInfos.size(), reinterpret_cast( bindingInfos.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDescriptorBufferOffsetsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDescriptorBufferOffsetsEXT( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t * pBufferIndices, + const DeviceSize * pOffsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDescriptorBufferOffsetsEXT( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + firstSet, + setCount, + pBufferIndices, + reinterpret_cast( pOffsets ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDescriptorBufferOffsetsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDescriptorBufferOffsetsEXT( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & bufferIndices, + ArrayProxy const & offsets, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetDescriptorBufferOffsetsEXT && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( bufferIndices.size() == offsets.size() ); +# else + if ( bufferIndices.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setDescriptorBufferOffsetsEXT: bufferIndices.size() != offsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdSetDescriptorBufferOffsetsEXT( m_commandBuffer, + static_cast( pipelineBindPoint ), + static_cast( layout ), + firstSet, + bufferIndices.size(), + bufferIndices.data(), + reinterpret_cast( offsets.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorBufferEmbeddedSamplersEXT( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( layout ), set ); + } + + // wrapper function for command vkGetBufferOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getBufferOpaqueCaptureDescriptorDataEXT( const BufferCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetBufferOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getBufferOpaqueCaptureDescriptorDataEXT( const BufferCaptureDescriptorDataInfoEXT & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferOpaqueCaptureDescriptorDataEXT && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( + d.vkGetBufferOpaqueCaptureDescriptorDataEXT( m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getBufferOpaqueCaptureDescriptorDataEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getImageOpaqueCaptureDescriptorDataEXT( const ImageCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetImageOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getImageOpaqueCaptureDescriptorDataEXT( const ImageCaptureDescriptorDataInfoEXT & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageOpaqueCaptureDescriptorDataEXT && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( + d.vkGetImageOpaqueCaptureDescriptorDataEXT( m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getImageOpaqueCaptureDescriptorDataEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageViewOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getImageViewOpaqueCaptureDescriptorDataEXT( const ImageViewCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetImageViewOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getImageViewOpaqueCaptureDescriptorDataEXT( const ImageViewCaptureDescriptorDataInfoEXT & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetImageViewOpaqueCaptureDescriptorDataEXT && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( + d.vkGetImageViewOpaqueCaptureDescriptorDataEXT( m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getImageViewOpaqueCaptureDescriptorDataEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSamplerOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSamplerOpaqueCaptureDescriptorDataEXT( const SamplerCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSamplerOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSamplerOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getSamplerOpaqueCaptureDescriptorDataEXT( const SamplerCaptureDescriptorDataInfoEXT & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSamplerOpaqueCaptureDescriptorDataEXT && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( + d.vkGetSamplerOpaqueCaptureDescriptorDataEXT( m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSamplerOpaqueCaptureDescriptorDataEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getAccelerationStructureOpaqueCaptureDescriptorDataEXT( + const AccelerationStructureCaptureDescriptorDataInfoEXT * pInfo, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getAccelerationStructureOpaqueCaptureDescriptorDataEXT( const AccelerationStructureCaptureDescriptorDataInfoEXT & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( d.vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureOpaqueCaptureDescriptorDataEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_fragment_shading_rate_enums === + + // wrapper function for command vkCmdSetFragmentShadingRateEnumNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateEnumNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateEnumNV( FragmentShadingRateNV shadingRate, + const FragmentShadingRateCombinerOpKHR combinerOps[2], + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetFragmentShadingRateEnumNV( static_cast( m_commandBuffer ), + static_cast( shadingRate ), + reinterpret_cast( combinerOps ) ); + } + + //=== VK_EXT_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksEXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::drawMeshTasksEXT( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMeshTasksEXT( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectEXT( + Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMeshTasksIndirectEXT( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectCountEXT( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMeshTasksIndirectCountEXT( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_KHR_copy_commands2 === + + // wrapper function for command vkCmdCopyBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const CopyBufferInfo2 * pCopyBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyBuffer2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pCopyBufferInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const CopyBufferInfo2 & copyBufferInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyBuffer2KHR && "Function requires or " ); +# endif + + d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast( ©BufferInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const CopyImageInfo2 * pCopyImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pCopyImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const CopyImageInfo2 & copyImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyImage2KHR && "Function requires or " ); +# endif + + d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast( ©ImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBufferToImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR( const CopyBufferToImageInfo2 * pCopyBufferToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyBufferToImage2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pCopyBufferToImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBufferToImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR( const CopyBufferToImageInfo2 & copyBufferToImageInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyBufferToImage2KHR && "Function requires or " ); +# endif + + d.vkCmdCopyBufferToImage2KHR( m_commandBuffer, reinterpret_cast( ©BufferToImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImageToBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR( const CopyImageToBufferInfo2 * pCopyImageToBufferInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyImageToBuffer2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pCopyImageToBufferInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImageToBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR( const CopyImageToBufferInfo2 & copyImageToBufferInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyImageToBuffer2KHR && "Function requires or " ); +# endif + + d.vkCmdCopyImageToBuffer2KHR( m_commandBuffer, reinterpret_cast( ©ImageToBufferInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBlitImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const BlitImageInfo2 * pBlitImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBlitImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pBlitImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBlitImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const BlitImageInfo2 & blitImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBlitImage2KHR && "Function requires or " ); +# endif + + d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast( &blitImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResolveImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const ResolveImageInfo2 * pResolveImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdResolveImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pResolveImageInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdResolveImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const ResolveImageInfo2 & resolveImageInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdResolveImage2KHR && "Function requires or " ); +# endif + + d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast( &resolveImageInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_device_fault === + + // wrapper function for command vkGetDeviceFaultInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceFaultInfoEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFaultInfoEXT( DeviceFaultCountsEXT * pFaultCounts, + DeviceFaultInfoEXT * pFaultInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeviceFaultInfoEXT( + static_cast( m_device ), reinterpret_cast( pFaultCounts ), reinterpret_cast( pFaultInfo ) ) ); + } +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::acquireWinrtDisplayNV( DisplayKHR display, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkAcquireWinrtDisplayNV( static_cast( m_physicalDevice ), static_cast( display ) ) ); + } +# else + // wrapper function for command vkAcquireWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + PhysicalDevice::acquireWinrtDisplayNV( DisplayKHR display, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAcquireWinrtDisplayNV && "Function requires " ); +# endif + + Result result = static_cast( d.vkAcquireWinrtDisplayNV( m_physicalDevice, static_cast( display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireWinrtDisplayNV" ); + + return detail::createResultValueType( result ); + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId, + DisplayKHR * pDisplay, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetWinrtDisplayNV( static_cast( m_physicalDevice ), deviceRelativeId, reinterpret_cast( pDisplay ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetWinrtDisplayNV && "Function requires " ); +# endif + + DisplayKHR display; + Result result = static_cast( d.vkGetWinrtDisplayNV( m_physicalDevice, deviceRelativeId, reinterpret_cast( &display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getWinrtDisplayNV" ); + + return detail::createResultValueType( result, std::move( display ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getWinrtDisplayNVUnique( uint32_t deviceRelativeId, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetWinrtDisplayNV && "Function requires " ); +# endif + + DisplayKHR display; + Result result = static_cast( d.vkGetWinrtDisplayNV( m_physicalDevice, deviceRelativeId, reinterpret_cast( &display ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getWinrtDisplayNVUnique" ); + + return detail::createResultValueType( result, UniqueHandle( display, detail::ObjectRelease( *this, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createDirectFBSurfaceEXT( const DirectFBSurfaceCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDirectFBSurfaceEXT( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Instance::createDirectFBSurfaceEXT( + const DirectFBSurfaceCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDirectFBSurfaceEXT && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateDirectFBSurfaceEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDirectFBSurfaceEXT" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createDirectFBSurfaceEXTUnique( + const DirectFBSurfaceCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDirectFBSurfaceEXT && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateDirectFBSurfaceEXT( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createDirectFBSurfaceEXTUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceDirectFBPresentationSupportEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, + IDirectFB * dfb, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceDirectFBPresentationSupportEXT( static_cast( m_physicalDevice ), queueFamilyIndex, dfb ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDirectFBPresentationSupportEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, + IDirectFB & dfb, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceDirectFBPresentationSupportEXT && + "Function requires " ); +# endif + + VkBool32 result = d.vkGetPhysicalDeviceDirectFBPresentationSupportEXT( m_physicalDevice, queueFamilyIndex, &dfb ); + + return static_cast( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + + // wrapper function for command vkCmdSetVertexInputEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetVertexInputEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setVertexInputEXT( uint32_t vertexBindingDescriptionCount, + const VertexInputBindingDescription2EXT * pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VertexInputAttributeDescription2EXT * pVertexAttributeDescriptions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetVertexInputEXT( static_cast( m_commandBuffer ), + vertexBindingDescriptionCount, + reinterpret_cast( pVertexBindingDescriptions ), + vertexAttributeDescriptionCount, + reinterpret_cast( pVertexAttributeDescriptions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetVertexInputEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetVertexInputEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setVertexInputEXT( ArrayProxy const & vertexBindingDescriptions, + ArrayProxy const & vertexAttributeDescriptions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetVertexInputEXT && "Function requires or " ); +# endif + + d.vkCmdSetVertexInputEXT( m_commandBuffer, + vertexBindingDescriptions.size(), + reinterpret_cast( vertexBindingDescriptions.data() ), + vertexAttributeDescriptions.size(), + reinterpret_cast( vertexAttributeDescriptions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + + // wrapper function for command vkGetMemoryZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, + zx_handle_t * pZirconHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryZirconHandleFUCHSIA( + static_cast( m_device ), reinterpret_cast( pGetZirconHandleInfo ), pZirconHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryZirconHandleFUCHSIA && "Function requires " ); +# endif + + zx_handle_t zirconHandle; + Result result = static_cast( + d.vkGetMemoryZirconHandleFUCHSIA( m_device, reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandleFUCHSIA" ); + + return detail::createResultValueType( result, std::move( zirconHandle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandlePropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getMemoryZirconHandlePropertiesFUCHSIA( ExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + MemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetMemoryZirconHandlePropertiesFUCHSIA( static_cast( m_device ), + static_cast( handleType ), + zirconHandle, + reinterpret_cast( pMemoryZirconHandleProperties ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandlePropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryZirconHandlePropertiesFUCHSIA( ExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryZirconHandlePropertiesFUCHSIA && + "Function requires " ); +# endif + + MemoryZirconHandlePropertiesFUCHSIA memoryZirconHandleProperties; + Result result = static_cast( + d.vkGetMemoryZirconHandlePropertiesFUCHSIA( m_device, + static_cast( handleType ), + zirconHandle, + reinterpret_cast( &memoryZirconHandleProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandlePropertiesFUCHSIA" ); + + return detail::createResultValueType( result, std::move( memoryZirconHandleProperties ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + + // wrapper function for command vkImportSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::importSemaphoreZirconHandleFUCHSIA( + const ImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkImportSemaphoreZirconHandleFUCHSIA( + static_cast( m_device ), reinterpret_cast( pImportSemaphoreZirconHandleInfo ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::importSemaphoreZirconHandleFUCHSIA( const ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkImportSemaphoreZirconHandleFUCHSIA && "Function requires " ); +# endif + + Result result = static_cast( d.vkImportSemaphoreZirconHandleFUCHSIA( + m_device, reinterpret_cast( &importSemaphoreZirconHandleInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreZirconHandleFUCHSIA" ); + + return detail::createResultValueType( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, + zx_handle_t * pZirconHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetSemaphoreZirconHandleFUCHSIA( + static_cast( m_device ), reinterpret_cast( pGetZirconHandleInfo ), pZirconHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetSemaphoreZirconHandleFUCHSIA && "Function requires " ); +# endif + + zx_handle_t zirconHandle; + Result result = static_cast( + d.vkGetSemaphoreZirconHandleFUCHSIA( m_device, reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreZirconHandleFUCHSIA" ); + + return detail::createResultValueType( result, std::move( zirconHandle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createBufferCollectionFUCHSIA( const BufferCollectionCreateInfoFUCHSIA * pCreateInfo, + const AllocationCallbacks * pAllocator, + BufferCollectionFUCHSIA * pCollection, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateBufferCollectionFUCHSIA( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pCollection ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createBufferCollectionFUCHSIA( + const BufferCollectionCreateInfoFUCHSIA & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateBufferCollectionFUCHSIA && "Function requires " ); +# endif + + BufferCollectionFUCHSIA collection; + Result result = static_cast( d.vkCreateBufferCollectionFUCHSIA( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &collection ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferCollectionFUCHSIA" ); + + return detail::createResultValueType( result, std::move( collection ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createBufferCollectionFUCHSIAUnique( const BufferCollectionCreateInfoFUCHSIA & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateBufferCollectionFUCHSIA && "Function requires " ); +# endif + + BufferCollectionFUCHSIA collection; + Result result = static_cast( d.vkCreateBufferCollectionFUCHSIA( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &collection ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferCollectionFUCHSIAUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( collection, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetBufferCollectionImageConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionImageConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setBufferCollectionImageConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, + const ImageConstraintsInfoFUCHSIA * pImageConstraintsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkSetBufferCollectionImageConstraintsFUCHSIA( static_cast( m_device ), + static_cast( collection ), + reinterpret_cast( pImageConstraintsInfo ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetBufferCollectionImageConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionImageConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::setBufferCollectionImageConstraintsFUCHSIA( + BufferCollectionFUCHSIA collection, const ImageConstraintsInfoFUCHSIA & imageConstraintsInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetBufferCollectionImageConstraintsFUCHSIA && + "Function requires " ); +# endif + + Result result = static_cast( d.vkSetBufferCollectionImageConstraintsFUCHSIA( + m_device, static_cast( collection ), reinterpret_cast( &imageConstraintsInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setBufferCollectionImageConstraintsFUCHSIA" ); + + return detail::createResultValueType( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetBufferCollectionBufferConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionBufferConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setBufferCollectionBufferConstraintsFUCHSIA( + BufferCollectionFUCHSIA collection, const BufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkSetBufferCollectionBufferConstraintsFUCHSIA( static_cast( m_device ), + static_cast( collection ), + reinterpret_cast( pBufferConstraintsInfo ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetBufferCollectionBufferConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionBufferConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::setBufferCollectionBufferConstraintsFUCHSIA( + BufferCollectionFUCHSIA collection, const BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetBufferCollectionBufferConstraintsFUCHSIA && + "Function requires " ); +# endif + + Result result = static_cast( d.vkSetBufferCollectionBufferConstraintsFUCHSIA( + m_device, static_cast( collection ), reinterpret_cast( &bufferConstraintsInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setBufferCollectionBufferConstraintsFUCHSIA" ); + + return detail::createResultValueType( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + VULKAN_HPP_INLINE void Device::destroyBufferCollectionFUCHSIA( BufferCollectionFUCHSIA collection, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyBufferCollectionFUCHSIA( + static_cast( m_device ), static_cast( collection ), reinterpret_cast( pAllocator ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + VULKAN_HPP_INLINE void Device::destroyBufferCollectionFUCHSIA( BufferCollectionFUCHSIA collection, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyBufferCollectionFUCHSIA && "Function requires " ); +# endif + + d.vkDestroyBufferCollectionFUCHSIA( + m_device, static_cast( collection ), reinterpret_cast( allocator.get() ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + VULKAN_HPP_INLINE void + Device::destroy( BufferCollectionFUCHSIA collection, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyBufferCollectionFUCHSIA( + static_cast( m_device ), static_cast( collection ), reinterpret_cast( pAllocator ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + VULKAN_HPP_INLINE void + Device::destroy( BufferCollectionFUCHSIA collection, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyBufferCollectionFUCHSIA && "Function requires " ); +# endif + + d.vkDestroyBufferCollectionFUCHSIA( + m_device, static_cast( collection ), reinterpret_cast( allocator.get() ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferCollectionPropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getBufferCollectionPropertiesFUCHSIA( BufferCollectionFUCHSIA collection, + BufferCollectionPropertiesFUCHSIA * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetBufferCollectionPropertiesFUCHSIA( static_cast( m_device ), + static_cast( collection ), + reinterpret_cast( pProperties ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferCollectionPropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getBufferCollectionPropertiesFUCHSIA( BufferCollectionFUCHSIA collection, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetBufferCollectionPropertiesFUCHSIA && + "Function requires " ); +# endif + + BufferCollectionPropertiesFUCHSIA properties; + Result result = static_cast( d.vkGetBufferCollectionPropertiesFUCHSIA( + m_device, static_cast( collection ), reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getBufferCollectionPropertiesFUCHSIA" ); + + return detail::createResultValueType( result, std::move( properties ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + + // wrapper function for command vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( RenderPass renderpass, + Extent2D * pMaxWorkgroupSize, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + static_cast( m_device ), static_cast( renderpass ), reinterpret_cast( pMaxWorkgroupSize ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( RenderPass renderpass, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI && + "Function requires " ); +# endif + + Extent2D maxWorkgroupSize; + Result result = static_cast( d.vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + m_device, static_cast( renderpass ), reinterpret_cast( &maxWorkgroupSize ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSubpassShadingMaxWorkgroupSizeHUAWEI" ); + + return detail::createResultValueType( result, std::move( maxWorkgroupSize ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSubpassShadingHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSubpassShadingHUAWEI.html + template + VULKAN_HPP_INLINE void CommandBuffer::subpassShadingHUAWEI( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSubpassShadingHUAWEI( static_cast( m_commandBuffer ) ); + } + + //=== VK_HUAWEI_invocation_mask === + + // wrapper function for command vkCmdBindInvocationMaskHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindInvocationMaskHUAWEI.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindInvocationMaskHUAWEI( ImageView imageView, ImageLayout imageLayout, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindInvocationMaskHUAWEI( + static_cast( m_commandBuffer ), static_cast( imageView ), static_cast( imageLayout ) ); + } + + //=== VK_NV_external_memory_rdma === + + // wrapper function for command vkGetMemoryRemoteAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryRemoteAddressNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, + RemoteAddressNV * pAddress, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryRemoteAddressNV( static_cast( m_device ), + reinterpret_cast( pMemoryGetRemoteAddressInfo ), + reinterpret_cast( pAddress ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryRemoteAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryRemoteAddressNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryRemoteAddressNV && "Function requires " ); +# endif + + RemoteAddressNV address; + Result result = static_cast( d.vkGetMemoryRemoteAddressNV( + m_device, reinterpret_cast( &memoryGetRemoteAddressInfo ), reinterpret_cast( &address ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryRemoteAddressNV" ); + + return detail::createResultValueType( result, std::move( address ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_pipeline_properties === + + // wrapper function for command vkGetPipelinePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelinePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelinePropertiesEXT( const PipelineInfoEXT * pPipelineInfo, + BaseOutStructure * pPipelineProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPipelinePropertiesEXT( static_cast( m_device ), + reinterpret_cast( pPipelineInfo ), + reinterpret_cast( pPipelineProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelinePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelinePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getPipelinePropertiesEXT( const PipelineInfoEXT & pipelineInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelinePropertiesEXT && "Function requires " ); +# endif + + BaseOutStructure pipelineProperties; + Result result = static_cast( d.vkGetPipelinePropertiesEXT( + m_device, reinterpret_cast( &pipelineInfo ), reinterpret_cast( &pipelineProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelinePropertiesEXT" ); + + return detail::createResultValueType( result, std::move( pipelineProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_extended_dynamic_state2 === + + // wrapper function for command vkCmdSetPatchControlPointsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPatchControlPointsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setPatchControlPointsEXT( uint32_t patchControlPoints, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetPatchControlPointsEXT( static_cast( m_commandBuffer ), patchControlPoints ); + } + + // wrapper function for command vkCmdSetRasterizerDiscardEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnableEXT( Bool32 rasterizerDiscardEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRasterizerDiscardEnableEXT( static_cast( m_commandBuffer ), static_cast( rasterizerDiscardEnable ) ); + } + + // wrapper function for command vkCmdSetDepthBiasEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnableEXT( Bool32 depthBiasEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthBiasEnableEXT( static_cast( m_commandBuffer ), static_cast( depthBiasEnable ) ); + } + + // wrapper function for command vkCmdSetLogicOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setLogicOpEXT( LogicOp logicOp, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLogicOpEXT( static_cast( m_commandBuffer ), static_cast( logicOp ) ); + } + + // wrapper function for command vkCmdSetPrimitiveRestartEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnableEXT( Bool32 primitiveRestartEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetPrimitiveRestartEnableEXT( static_cast( m_commandBuffer ), static_cast( primitiveRestartEnable ) ); + } + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createScreenSurfaceQNX( const ScreenSurfaceCreateInfoQNX * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateScreenSurfaceQNX( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createScreenSurfaceQNX( const ScreenSurfaceCreateInfoQNX & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateScreenSurfaceQNX && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateScreenSurfaceQNX( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createScreenSurfaceQNX" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Instance::createScreenSurfaceQNXUnique( + const ScreenSurfaceCreateInfoQNX & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateScreenSurfaceQNX && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateScreenSurfaceQNX( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createScreenSurfaceQNXUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceScreenPresentationSupportQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceScreenPresentationSupportQNX.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, + struct _screen_window * window, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceScreenPresentationSupportQNX( static_cast( m_physicalDevice ), queueFamilyIndex, window ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceScreenPresentationSupportQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceScreenPresentationSupportQNX.html + template + VULKAN_HPP_INLINE Bool32 PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, + struct _screen_window & window, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceScreenPresentationSupportQNX && + "Function requires " ); +# endif + + VkBool32 result = d.vkGetPhysicalDeviceScreenPresentationSupportQNX( m_physicalDevice, queueFamilyIndex, &window ); + + return static_cast( result ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + + // wrapper function for command vkCmdSetColorWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteEnableEXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setColorWriteEnableEXT( uint32_t attachmentCount, const Bool32 * pColorWriteEnables, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetColorWriteEnableEXT( static_cast( m_commandBuffer ), attachmentCount, reinterpret_cast( pColorWriteEnables ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetColorWriteEnableEXT && "Function requires " ); +# endif + + d.vkCmdSetColorWriteEnableEXT( m_commandBuffer, colorWriteEnables.size(), reinterpret_cast( colorWriteEnables.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_ray_tracing_maintenance1 === + + // wrapper function for command vkCmdTraceRaysIndirect2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirect2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirect2KHR( DeviceAddress indirectDeviceAddress, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdTraceRaysIndirect2KHR( static_cast( m_commandBuffer ), static_cast( indirectDeviceAddress ) ); + } + + //=== VK_EXT_multi_draw === + + // wrapper function for command vkCmdDrawMultiEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMultiEXT( uint32_t drawCount, + const MultiDrawInfoEXT * pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMultiEXT( static_cast( m_commandBuffer ), + drawCount, + reinterpret_cast( pVertexInfo ), + instanceCount, + firstInstance, + stride ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDrawMultiEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMultiEXT( StridedArrayProxy const & vertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDrawMultiEXT && "Function requires " ); +# endif + + d.vkCmdDrawMultiEXT( m_commandBuffer, + vertexInfo.size(), + reinterpret_cast( vertexInfo.data() ), + instanceCount, + firstInstance, + vertexInfo.stride() ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDrawMultiIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiIndexedEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMultiIndexedEXT( uint32_t drawCount, + const MultiDrawIndexedInfoEXT * pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t * pVertexOffset, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawMultiIndexedEXT( static_cast( m_commandBuffer ), + drawCount, + reinterpret_cast( pIndexInfo ), + instanceCount, + firstInstance, + stride, + pVertexOffset ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDrawMultiIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiIndexedEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawMultiIndexedEXT( StridedArrayProxy const & indexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + Optional vertexOffset, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDrawMultiIndexedEXT && "Function requires " ); +# endif + + d.vkCmdDrawMultiIndexedEXT( m_commandBuffer, + indexInfo.size(), + reinterpret_cast( indexInfo.data() ), + instanceCount, + firstInstance, + indexInfo.stride(), + vertexOffset.get() ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_opacity_micromap === + + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createMicromapEXT( const MicromapCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + MicromapEXT * pMicromap, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateMicromapEXT( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pMicromap ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createMicromapEXT( const MicromapCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateMicromapEXT && "Function requires " ); +# endif + + MicromapEXT micromap; + Result result = static_cast( d.vkCreateMicromapEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( µmap ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createMicromapEXT" ); + + return detail::createResultValueType( result, std::move( micromap ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createMicromapEXTUnique( const MicromapCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateMicromapEXT && "Function requires " ); +# endif + + MicromapEXT micromap; + Result result = static_cast( d.vkCreateMicromapEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( µmap ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createMicromapEXTUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( micromap, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + VULKAN_HPP_INLINE void + Device::destroyMicromapEXT( MicromapEXT micromap, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyMicromapEXT( + static_cast( m_device ), static_cast( micromap ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + VULKAN_HPP_INLINE void + Device::destroyMicromapEXT( MicromapEXT micromap, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyMicromapEXT && "Function requires " ); +# endif + + d.vkDestroyMicromapEXT( m_device, static_cast( micromap ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + VULKAN_HPP_INLINE void Device::destroy( MicromapEXT micromap, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyMicromapEXT( + static_cast( m_device ), static_cast( micromap ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + VULKAN_HPP_INLINE void Device::destroy( MicromapEXT micromap, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyMicromapEXT && "Function requires " ); +# endif + + d.vkDestroyMicromapEXT( m_device, static_cast( micromap ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildMicromapsEXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::buildMicromapsEXT( uint32_t infoCount, const MicromapBuildInfoEXT * pInfos, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBuildMicromapsEXT( static_cast( m_commandBuffer ), infoCount, reinterpret_cast( pInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildMicromapsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildMicromapsEXT( ArrayProxy const & infos, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBuildMicromapsEXT && "Function requires " ); +# endif + + d.vkCmdBuildMicromapsEXT( m_commandBuffer, infos.size(), reinterpret_cast( infos.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildMicromapsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::buildMicromapsEXT( DeferredOperationKHR deferredOperation, + uint32_t infoCount, + const MicromapBuildInfoEXT * pInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBuildMicromapsEXT( static_cast( m_device ), + static_cast( deferredOperation ), + infoCount, + reinterpret_cast( pInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildMicromapsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::buildMicromapsEXT( DeferredOperationKHR deferredOperation, + ArrayProxy const & infos, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBuildMicromapsEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkBuildMicromapsEXT( + m_device, static_cast( deferredOperation ), infos.size(), reinterpret_cast( infos.data() ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::buildMicromapsEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapInfoEXT * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCopyMicromapEXT( + static_cast( m_device ), static_cast( deferredOperation ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapInfoEXT & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyMicromapEXT && "Function requires " ); +# endif + + Result result = static_cast( + d.vkCopyMicromapEXT( m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyMicromapEXT", { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapToMemoryEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMicromapToMemoryEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapToMemoryInfoEXT * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCopyMicromapToMemoryEXT( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapToMemoryEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMicromapToMemoryEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapToMemoryInfoEXT & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyMicromapToMemoryEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkCopyMicromapToMemoryEXT( + m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMicromapToMemoryEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMemoryToMicromapInfoEXT * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCopyMemoryToMicromapEXT( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToMicromapEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMemoryToMicromapInfoEXT & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCopyMemoryToMicromapEXT && "Function requires " ); +# endif + + Result result = static_cast( d.vkCopyMemoryToMicromapEXT( + m_device, static_cast( deferredOperation ), reinterpret_cast( &info ) ) ); + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToMicromapEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::writeMicromapsPropertiesEXT( uint32_t micromapCount, + const MicromapEXT * pMicromaps, + QueryType queryType, + size_t dataSize, + void * pData, + size_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkWriteMicromapsPropertiesEXT( static_cast( m_device ), + micromapCount, + reinterpret_cast( pMicromaps ), + static_cast( queryType ), + dataSize, + pData, + stride ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::writeMicromapsPropertiesEXT( + ArrayProxy const & micromaps, QueryType queryType, size_t dataSize, size_t stride, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWriteMicromapsPropertiesEXT && "Function requires " ); +# endif + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( d.vkWriteMicromapsPropertiesEXT( m_device, + micromaps.size(), + reinterpret_cast( micromaps.data() ), + static_cast( queryType ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ), + stride ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeMicromapsPropertiesEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::writeMicromapsPropertyEXT( ArrayProxy const & micromaps, QueryType queryType, size_t stride, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWriteMicromapsPropertiesEXT && "Function requires " ); +# endif + + DataType data; + Result result = static_cast( d.vkWriteMicromapsPropertiesEXT( m_device, + micromaps.size(), + reinterpret_cast( micromaps.data() ), + static_cast( queryType ), + sizeof( DataType ), + reinterpret_cast( &data ), + stride ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeMicromapsPropertyEXT" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMicromapEXT( const CopyMicromapInfoEXT * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyMicromapEXT( static_cast( m_commandBuffer ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMicromapEXT( const CopyMicromapInfoEXT & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyMicromapEXT && "Function requires " ); +# endif + + d.vkCmdCopyMicromapEXT( m_commandBuffer, reinterpret_cast( &info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapToMemoryEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMicromapToMemoryEXT( const CopyMicromapToMemoryInfoEXT * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyMicromapToMemoryEXT( static_cast( m_commandBuffer ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapToMemoryEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMicromapToMemoryEXT( const CopyMicromapToMemoryInfoEXT & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyMicromapToMemoryEXT && "Function requires " ); +# endif + + d.vkCmdCopyMicromapToMemoryEXT( m_commandBuffer, reinterpret_cast( &info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToMicromapEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToMicromapEXT( const CopyMemoryToMicromapInfoEXT * pInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyMemoryToMicromapEXT( static_cast( m_commandBuffer ), reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToMicromapEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToMicromapEXT( const CopyMemoryToMicromapInfoEXT & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyMemoryToMicromapEXT && "Function requires " ); +# endif + + d.vkCmdCopyMemoryToMicromapEXT( m_commandBuffer, reinterpret_cast( &info ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeMicromapsPropertiesEXT( uint32_t micromapCount, + const MicromapEXT * pMicromaps, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdWriteMicromapsPropertiesEXT( static_cast( m_commandBuffer ), + micromapCount, + reinterpret_cast( pMicromaps ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::writeMicromapsPropertiesEXT( ArrayProxy const & micromaps, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdWriteMicromapsPropertiesEXT && "Function requires " ); +# endif + + d.vkCmdWriteMicromapsPropertiesEXT( m_commandBuffer, + micromaps.size(), + reinterpret_cast( micromaps.data() ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMicromapCompatibilityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMicromapCompatibilityEXT.html + template + VULKAN_HPP_INLINE void Device::getMicromapCompatibilityEXT( const MicromapVersionInfoEXT * pVersionInfo, + AccelerationStructureCompatibilityKHR * pCompatibility, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceMicromapCompatibilityEXT( static_cast( m_device ), + reinterpret_cast( pVersionInfo ), + reinterpret_cast( pCompatibility ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMicromapCompatibilityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMicromapCompatibilityEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE AccelerationStructureCompatibilityKHR + Device::getMicromapCompatibilityEXT( const MicromapVersionInfoEXT & versionInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceMicromapCompatibilityEXT && "Function requires " ); +# endif + + AccelerationStructureCompatibilityKHR compatibility; + d.vkGetDeviceMicromapCompatibilityEXT( m_device, + reinterpret_cast( &versionInfo ), + reinterpret_cast( &compatibility ) ); + + return compatibility; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMicromapBuildSizesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMicromapBuildSizesEXT.html + template + VULKAN_HPP_INLINE void Device::getMicromapBuildSizesEXT( AccelerationStructureBuildTypeKHR buildType, + const MicromapBuildInfoEXT * pBuildInfo, + MicromapBuildSizesInfoEXT * pSizeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetMicromapBuildSizesEXT( static_cast( m_device ), + static_cast( buildType ), + reinterpret_cast( pBuildInfo ), + reinterpret_cast( pSizeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMicromapBuildSizesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMicromapBuildSizesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MicromapBuildSizesInfoEXT Device::getMicromapBuildSizesEXT( AccelerationStructureBuildTypeKHR buildType, + const MicromapBuildInfoEXT & buildInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMicromapBuildSizesEXT && "Function requires " ); +# endif + + MicromapBuildSizesInfoEXT sizeInfo; + d.vkGetMicromapBuildSizesEXT( m_device, + static_cast( buildType ), + reinterpret_cast( &buildInfo ), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_HUAWEI_cluster_culling_shader === + + // wrapper function for command vkCmdDrawClusterHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterHUAWEI.html + template + VULKAN_HPP_INLINE void + CommandBuffer::drawClusterHUAWEI( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawClusterHUAWEI( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkCmdDrawClusterIndirectHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterIndirectHUAWEI.html + template + VULKAN_HPP_INLINE void CommandBuffer::drawClusterIndirectHUAWEI( Buffer buffer, DeviceSize offset, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDrawClusterIndirectHUAWEI( static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ) ); + } + + //=== VK_EXT_pageable_device_local_memory === + + // wrapper function for command vkSetDeviceMemoryPriorityEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDeviceMemoryPriorityEXT.html + template + VULKAN_HPP_INLINE void Device::setMemoryPriorityEXT( DeviceMemory memory, float priority, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkSetDeviceMemoryPriorityEXT( static_cast( m_device ), static_cast( memory ), priority ); + } + + //=== VK_KHR_maintenance4 === + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_INLINE void Device::getBufferMemoryRequirementsKHR( const DeviceBufferMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceBufferMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getBufferMemoryRequirementsKHR( const DeviceBufferMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceBufferMemoryRequirementsKHR && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetDeviceBufferMemoryRequirementsKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getBufferMemoryRequirementsKHR( const DeviceBufferMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceBufferMemoryRequirementsKHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetDeviceBufferMemoryRequirementsKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_INLINE void Device::getImageMemoryRequirementsKHR( const DeviceImageMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceImageMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getImageMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageMemoryRequirementsKHR && + "Function requires or " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetDeviceImageMemoryRequirementsKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageMemoryRequirementsKHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetDeviceImageMemoryRequirementsKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + template + VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirementsKHR( const DeviceImageMemoryRequirements * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceImageSparseMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + pSparseMemoryRequirementCount, + reinterpret_cast( pSparseMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSparseMemoryRequirementsKHR && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + d.vkGetDeviceImageSparseMemoryRequirementsKHR( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + template < + typename SparseImageMemoryRequirements2Allocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSparseMemoryRequirementsKHR && + "Function requires or " ); +# endif + + std::vector sparseMemoryRequirements( sparseImageMemoryRequirements2Allocator ); + uint32_t sparseMemoryRequirementCount; + d.vkGetDeviceImageSparseMemoryRequirementsKHR( + m_device, reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device, + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VALVE_descriptor_set_host_mapping === + + // wrapper function for command vkGetDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutHostMappingInfoVALVE.html + template + VULKAN_HPP_INLINE void Device::getDescriptorSetLayoutHostMappingInfoVALVE( const DescriptorSetBindingReferenceVALVE * pBindingReference, + DescriptorSetLayoutHostMappingInfoVALVE * pHostMapping, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorSetLayoutHostMappingInfoVALVE( static_cast( m_device ), + reinterpret_cast( pBindingReference ), + reinterpret_cast( pHostMapping ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutHostMappingInfoVALVE.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DescriptorSetLayoutHostMappingInfoVALVE Device::getDescriptorSetLayoutHostMappingInfoVALVE( + const DescriptorSetBindingReferenceVALVE & bindingReference, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetLayoutHostMappingInfoVALVE && + "Function requires " ); +# endif + + DescriptorSetLayoutHostMappingInfoVALVE hostMapping; + d.vkGetDescriptorSetLayoutHostMappingInfoVALVE( m_device, + reinterpret_cast( &bindingReference ), + reinterpret_cast( &hostMapping ) ); + + return hostMapping; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorSetHostMappingVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetHostMappingVALVE.html + template + VULKAN_HPP_INLINE void Device::getDescriptorSetHostMappingVALVE( DescriptorSet descriptorSet, void ** ppData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDescriptorSetHostMappingVALVE( static_cast( m_device ), static_cast( descriptorSet ), ppData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetHostMappingVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetHostMappingVALVE.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * Device::getDescriptorSetHostMappingVALVE( DescriptorSet descriptorSet, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDescriptorSetHostMappingVALVE && + "Function requires " ); +# endif + + void * pData; + d.vkGetDescriptorSetHostMappingVALVE( m_device, static_cast( descriptorSet ), &pData ); + + return pData; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_copy_memory_indirect === + + // wrapper function for command vkCmdCopyMemoryIndirectNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryIndirectNV.html + template + VULKAN_HPP_INLINE void + CommandBuffer::copyMemoryIndirectNV( DeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyMemoryIndirectNV( static_cast( m_commandBuffer ), static_cast( copyBufferAddress ), copyCount, stride ); + } + + // wrapper function for command vkCmdCopyMemoryToImageIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToImageIndirectNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToImageIndirectNV( DeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + Image dstImage, + ImageLayout dstImageLayout, + const ImageSubresourceLayers * pImageSubresources, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyMemoryToImageIndirectNV( static_cast( m_commandBuffer ), + static_cast( copyBufferAddress ), + copyCount, + stride, + static_cast( dstImage ), + static_cast( dstImageLayout ), + reinterpret_cast( pImageSubresources ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMemoryToImageIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToImageIndirectNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToImageIndirectNV( DeviceAddress copyBufferAddress, + uint32_t stride, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & imageSubresources, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyMemoryToImageIndirectNV && "Function requires " ); +# endif + + d.vkCmdCopyMemoryToImageIndirectNV( m_commandBuffer, + static_cast( copyBufferAddress ), + imageSubresources.size(), + stride, + static_cast( dstImage ), + static_cast( dstImageLayout ), + reinterpret_cast( imageSubresources.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_memory_decompression === + + // wrapper function for command vkCmdDecompressMemoryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::decompressMemoryNV( uint32_t decompressRegionCount, + const DecompressMemoryRegionNV * pDecompressMemoryRegions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDecompressMemoryNV( static_cast( m_commandBuffer ), + decompressRegionCount, + reinterpret_cast( pDecompressMemoryRegions ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDecompressMemoryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::decompressMemoryNV( ArrayProxy const & decompressMemoryRegions, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDecompressMemoryNV && "Function requires " ); +# endif + + d.vkCmdDecompressMemoryNV( + m_commandBuffer, decompressMemoryRegions.size(), reinterpret_cast( decompressMemoryRegions.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDecompressMemoryIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryIndirectCountNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::decompressMemoryIndirectCountNV( DeviceAddress indirectCommandsAddress, + DeviceAddress indirectCommandsCountAddress, + uint32_t stride, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDecompressMemoryIndirectCountNV( static_cast( m_commandBuffer ), + static_cast( indirectCommandsAddress ), + static_cast( indirectCommandsCountAddress ), + stride ); + } + + //=== VK_NV_device_generated_commands_compute === + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_INLINE void Device::getPipelineIndirectMemoryRequirementsNV( const ComputePipelineCreateInfo * pCreateInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPipelineIndirectMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getPipelineIndirectMemoryRequirementsNV( const ComputePipelineCreateInfo & createInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineIndirectMemoryRequirementsNV && + "Function requires " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetPipelineIndirectMemoryRequirementsNV( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getPipelineIndirectMemoryRequirementsNV( const ComputePipelineCreateInfo & createInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineIndirectMemoryRequirementsNV && + "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetPipelineIndirectMemoryRequirementsNV( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdUpdatePipelineIndirectBufferNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdatePipelineIndirectBufferNV.html + template + VULKAN_HPP_INLINE void + CommandBuffer::updatePipelineIndirectBufferNV( PipelineBindPoint pipelineBindPoint, Pipeline pipeline, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdUpdatePipelineIndirectBufferNV( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( pipeline ) ); + } + + // wrapper function for command vkGetPipelineIndirectDeviceAddressNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectDeviceAddressNV.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getPipelineIndirectAddressNV( const PipelineIndirectDeviceAddressInfoNV * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPipelineIndirectDeviceAddressNV( static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineIndirectDeviceAddressNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectDeviceAddressNV.html + template + VULKAN_HPP_INLINE DeviceAddress Device::getPipelineIndirectAddressNV( const PipelineIndirectDeviceAddressInfoNV & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineIndirectDeviceAddressNV && + "Function requires " ); +# endif + + VkDeviceAddress result = d.vkGetPipelineIndirectDeviceAddressNV( m_device, reinterpret_cast( &info ) ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_extended_dynamic_state3 === + + // wrapper function for command vkCmdSetDepthClampEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthClampEnableEXT( Bool32 depthClampEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthClampEnableEXT( static_cast( m_commandBuffer ), static_cast( depthClampEnable ) ); + } + + // wrapper function for command vkCmdSetPolygonModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPolygonModeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setPolygonModeEXT( PolygonMode polygonMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetPolygonModeEXT( static_cast( m_commandBuffer ), static_cast( polygonMode ) ); + } + + // wrapper function for command vkCmdSetRasterizationSamplesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationSamplesEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRasterizationSamplesEXT( SampleCountFlagBits rasterizationSamples, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRasterizationSamplesEXT( static_cast( m_commandBuffer ), static_cast( rasterizationSamples ) ); + } + + // wrapper function for command vkCmdSetSampleMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleMaskEXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setSampleMaskEXT( SampleCountFlagBits samples, const SampleMask * pSampleMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetSampleMaskEXT( + static_cast( m_commandBuffer ), static_cast( samples ), reinterpret_cast( pSampleMask ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetSampleMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleMaskEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setSampleMaskEXT( SampleCountFlagBits samples, + ArrayProxy const & sampleMask, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetSampleMaskEXT && "Function requires or " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( sampleMask.size() == ( static_cast( samples ) + 31 ) / 32 ); +# else + if ( sampleMask.size() != ( static_cast( samples ) + 31 ) / 32 ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setSampleMaskEXT: sampleMask.size() != ( static_cast( samples ) + 31 ) / 32" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdSetSampleMaskEXT( m_commandBuffer, static_cast( samples ), reinterpret_cast( sampleMask.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetAlphaToCoverageEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToCoverageEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setAlphaToCoverageEnableEXT( Bool32 alphaToCoverageEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetAlphaToCoverageEnableEXT( static_cast( m_commandBuffer ), static_cast( alphaToCoverageEnable ) ); + } + + // wrapper function for command vkCmdSetAlphaToOneEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToOneEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setAlphaToOneEnableEXT( Bool32 alphaToOneEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetAlphaToOneEnableEXT( static_cast( m_commandBuffer ), static_cast( alphaToOneEnable ) ); + } + + // wrapper function for command vkCmdSetLogicOpEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setLogicOpEnableEXT( Bool32 logicOpEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLogicOpEnableEXT( static_cast( m_commandBuffer ), static_cast( logicOpEnable ) ); + } + + // wrapper function for command vkCmdSetColorBlendEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendEnableEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const Bool32 * pColorBlendEnables, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetColorBlendEnableEXT( + static_cast( m_commandBuffer ), firstAttachment, attachmentCount, reinterpret_cast( pColorBlendEnables ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorBlendEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendEnableEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEnables, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetColorBlendEnableEXT && + "Function requires or " ); +# endif + + d.vkCmdSetColorBlendEnableEXT( m_commandBuffer, firstAttachment, colorBlendEnables.size(), reinterpret_cast( colorBlendEnables.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetColorBlendEquationEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEquationEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendEquationEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const ColorBlendEquationEXT * pColorBlendEquations, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetColorBlendEquationEXT( static_cast( m_commandBuffer ), + firstAttachment, + attachmentCount, + reinterpret_cast( pColorBlendEquations ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorBlendEquationEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEquationEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendEquationEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEquations, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetColorBlendEquationEXT && + "Function requires or " ); +# endif + + d.vkCmdSetColorBlendEquationEXT( + m_commandBuffer, firstAttachment, colorBlendEquations.size(), reinterpret_cast( colorBlendEquations.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetColorWriteMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteMaskEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorWriteMaskEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const ColorComponentFlags * pColorWriteMasks, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetColorWriteMaskEXT( + static_cast( m_commandBuffer ), firstAttachment, attachmentCount, reinterpret_cast( pColorWriteMasks ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorWriteMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteMaskEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorWriteMaskEXT( uint32_t firstAttachment, + ArrayProxy const & colorWriteMasks, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetColorWriteMaskEXT && + "Function requires or " ); +# endif + + d.vkCmdSetColorWriteMaskEXT( + m_commandBuffer, firstAttachment, colorWriteMasks.size(), reinterpret_cast( colorWriteMasks.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetTessellationDomainOriginEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetTessellationDomainOriginEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setTessellationDomainOriginEXT( TessellationDomainOrigin domainOrigin, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetTessellationDomainOriginEXT( static_cast( m_commandBuffer ), static_cast( domainOrigin ) ); + } + + // wrapper function for command vkCmdSetRasterizationStreamEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationStreamEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRasterizationStreamEXT( uint32_t rasterizationStream, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRasterizationStreamEXT( static_cast( m_commandBuffer ), rasterizationStream ); + } + + // wrapper function for command vkCmdSetConservativeRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetConservativeRasterizationModeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setConservativeRasterizationModeEXT( ConservativeRasterizationModeEXT conservativeRasterizationMode, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetConservativeRasterizationModeEXT( static_cast( m_commandBuffer ), + static_cast( conservativeRasterizationMode ) ); + } + + // wrapper function for command vkCmdSetExtraPrimitiveOverestimationSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setExtraPrimitiveOverestimationSizeEXT( float extraPrimitiveOverestimationSize, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetExtraPrimitiveOverestimationSizeEXT( static_cast( m_commandBuffer ), extraPrimitiveOverestimationSize ); + } + + // wrapper function for command vkCmdSetDepthClipEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthClipEnableEXT( Bool32 depthClipEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthClipEnableEXT( static_cast( m_commandBuffer ), static_cast( depthClipEnable ) ); + } + + // wrapper function for command vkCmdSetSampleLocationsEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEnableEXT( Bool32 sampleLocationsEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetSampleLocationsEnableEXT( static_cast( m_commandBuffer ), static_cast( sampleLocationsEnable ) ); + } + + // wrapper function for command vkCmdSetColorBlendAdvancedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendAdvancedEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendAdvancedEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const ColorBlendAdvancedEXT * pColorBlendAdvanced, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetColorBlendAdvancedEXT( static_cast( m_commandBuffer ), + firstAttachment, + attachmentCount, + reinterpret_cast( pColorBlendAdvanced ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorBlendAdvancedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendAdvancedEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendAdvancedEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendAdvanced, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetColorBlendAdvancedEXT && + "Function requires or " ); +# endif + + d.vkCmdSetColorBlendAdvancedEXT( + m_commandBuffer, firstAttachment, colorBlendAdvanced.size(), reinterpret_cast( colorBlendAdvanced.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetProvokingVertexModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetProvokingVertexModeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setProvokingVertexModeEXT( ProvokingVertexModeEXT provokingVertexMode, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetProvokingVertexModeEXT( static_cast( m_commandBuffer ), static_cast( provokingVertexMode ) ); + } + + // wrapper function for command vkCmdSetLineRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineRasterizationModeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setLineRasterizationModeEXT( LineRasterizationModeEXT lineRasterizationMode, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLineRasterizationModeEXT( static_cast( m_commandBuffer ), static_cast( lineRasterizationMode ) ); + } + + // wrapper function for command vkCmdSetLineStippleEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setLineStippleEnableEXT( Bool32 stippledLineEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLineStippleEnableEXT( static_cast( m_commandBuffer ), static_cast( stippledLineEnable ) ); + } + + // wrapper function for command vkCmdSetDepthClipNegativeOneToOneEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthClipNegativeOneToOneEXT( Bool32 negativeOneToOne, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthClipNegativeOneToOneEXT( static_cast( m_commandBuffer ), static_cast( negativeOneToOne ) ); + } + + // wrapper function for command vkCmdSetViewportWScalingEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingEnableNV( Bool32 viewportWScalingEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewportWScalingEnableNV( static_cast( m_commandBuffer ), static_cast( viewportWScalingEnable ) ); + } + + // wrapper function for command vkCmdSetViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportSwizzleNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportSwizzleNV( uint32_t firstViewport, + uint32_t viewportCount, + const ViewportSwizzleNV * pViewportSwizzles, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetViewportSwizzleNV( + static_cast( m_commandBuffer ), firstViewport, viewportCount, reinterpret_cast( pViewportSwizzles ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportSwizzleNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setViewportSwizzleNV( uint32_t firstViewport, + ArrayProxy const & viewportSwizzles, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetViewportSwizzleNV && + "Function requires or " ); +# endif + + d.vkCmdSetViewportSwizzleNV( + m_commandBuffer, firstViewport, viewportSwizzles.size(), reinterpret_cast( viewportSwizzles.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetCoverageToColorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageToColorEnableNV( Bool32 coverageToColorEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoverageToColorEnableNV( static_cast( m_commandBuffer ), static_cast( coverageToColorEnable ) ); + } + + // wrapper function for command vkCmdSetCoverageToColorLocationNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorLocationNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageToColorLocationNV( uint32_t coverageToColorLocation, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoverageToColorLocationNV( static_cast( m_commandBuffer ), coverageToColorLocation ); + } + + // wrapper function for command vkCmdSetCoverageModulationModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationModeNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageModulationModeNV( CoverageModulationModeNV coverageModulationMode, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoverageModulationModeNV( static_cast( m_commandBuffer ), static_cast( coverageModulationMode ) ); + } + + // wrapper function for command vkCmdSetCoverageModulationTableEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageModulationTableEnableNV( Bool32 coverageModulationTableEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoverageModulationTableEnableNV( static_cast( m_commandBuffer ), static_cast( coverageModulationTableEnable ) ); + } + + // wrapper function for command vkCmdSetCoverageModulationTableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageModulationTableNV( uint32_t coverageModulationTableCount, + const float * pCoverageModulationTable, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoverageModulationTableNV( static_cast( m_commandBuffer ), coverageModulationTableCount, pCoverageModulationTable ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetCoverageModulationTableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageModulationTableNV( ArrayProxy const & coverageModulationTable, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetCoverageModulationTableNV && + "Function requires or " ); +# endif + + d.vkCmdSetCoverageModulationTableNV( m_commandBuffer, coverageModulationTable.size(), coverageModulationTable.data() ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetShadingRateImageEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetShadingRateImageEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setShadingRateImageEnableNV( Bool32 shadingRateImageEnable, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetShadingRateImageEnableNV( static_cast( m_commandBuffer ), static_cast( shadingRateImageEnable ) ); + } + + // wrapper function for command vkCmdSetRepresentativeFragmentTestEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setRepresentativeFragmentTestEnableNV( Bool32 representativeFragmentTestEnable, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetRepresentativeFragmentTestEnableNV( static_cast( m_commandBuffer ), static_cast( representativeFragmentTestEnable ) ); + } + + // wrapper function for command vkCmdSetCoverageReductionModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageReductionModeNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCoverageReductionModeNV( CoverageReductionModeNV coverageReductionMode, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetCoverageReductionModeNV( static_cast( m_commandBuffer ), static_cast( coverageReductionMode ) ); + } + + //=== VK_ARM_tensors === + + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createTensorARM( const TensorCreateInfoARM * pCreateInfo, + const AllocationCallbacks * pAllocator, + TensorARM * pTensor, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateTensorARM( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pTensor ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createTensorARM( const TensorCreateInfoARM & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateTensorARM && "Function requires " ); +# endif + + TensorARM tensor; + Result result = static_cast( d.vkCreateTensorARM( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &tensor ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createTensorARM" ); + + return detail::createResultValueType( result, std::move( tensor ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createTensorARMUnique( const TensorCreateInfoARM & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateTensorARM && "Function requires " ); +# endif + + TensorARM tensor; + Result result = static_cast( d.vkCreateTensorARM( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &tensor ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createTensorARMUnique" ); + + return detail::createResultValueType( result, UniqueHandle( tensor, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + VULKAN_HPP_INLINE void Device::destroyTensorARM( TensorARM tensor, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyTensorARM( + static_cast( m_device ), static_cast( tensor ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + VULKAN_HPP_INLINE void + Device::destroyTensorARM( TensorARM tensor, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyTensorARM && "Function requires " ); +# endif + + d.vkDestroyTensorARM( m_device, static_cast( tensor ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + VULKAN_HPP_INLINE void Device::destroy( TensorARM tensor, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyTensorARM( + static_cast( m_device ), static_cast( tensor ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + VULKAN_HPP_INLINE void Device::destroy( TensorARM tensor, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyTensorARM && "Function requires " ); +# endif + + d.vkDestroyTensorARM( m_device, static_cast( tensor ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createTensorViewARM( const TensorViewCreateInfoARM * pCreateInfo, + const AllocationCallbacks * pAllocator, + TensorViewARM * pView, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateTensorViewARM( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pView ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::createTensorViewARM( const TensorViewCreateInfoARM & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateTensorViewARM && "Function requires " ); +# endif + + TensorViewARM view; + Result result = static_cast( d.vkCreateTensorViewARM( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createTensorViewARM" ); + + return detail::createResultValueType( result, std::move( view ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createTensorViewARMUnique( const TensorViewCreateInfoARM & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateTensorViewARM && "Function requires " ); +# endif + + TensorViewARM view; + Result result = static_cast( d.vkCreateTensorViewARM( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createTensorViewARMUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( view, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + VULKAN_HPP_INLINE void + Device::destroyTensorViewARM( TensorViewARM tensorView, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyTensorViewARM( + static_cast( m_device ), static_cast( tensorView ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + VULKAN_HPP_INLINE void + Device::destroyTensorViewARM( TensorViewARM tensorView, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyTensorViewARM && "Function requires " ); +# endif + + d.vkDestroyTensorViewARM( m_device, static_cast( tensorView ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + VULKAN_HPP_INLINE void Device::destroy( TensorViewARM tensorView, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyTensorViewARM( + static_cast( m_device ), static_cast( tensorView ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + VULKAN_HPP_INLINE void + Device::destroy( TensorViewARM tensorView, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyTensorViewARM && "Function requires " ); +# endif + + d.vkDestroyTensorViewARM( m_device, static_cast( tensorView ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_INLINE void Device::getTensorMemoryRequirementsARM( const TensorMemoryRequirementsInfoARM * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetTensorMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getTensorMemoryRequirementsARM( const TensorMemoryRequirementsInfoARM & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetTensorMemoryRequirementsARM && "Function requires " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetTensorMemoryRequirementsARM( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getTensorMemoryRequirementsARM( const TensorMemoryRequirementsInfoARM & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetTensorMemoryRequirementsARM && "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetTensorMemoryRequirementsARM( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindTensorMemoryARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindTensorMemoryARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindTensorMemoryARM( uint32_t bindInfoCount, + const BindTensorMemoryInfoARM * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkBindTensorMemoryARM( static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindTensorMemoryARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindTensorMemoryARM.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindTensorMemoryARM( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindTensorMemoryARM && "Function requires " ); +# endif + + Result result = + static_cast( d.vkBindTensorMemoryARM( m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindTensorMemoryARM" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_INLINE void Device::getTensorMemoryRequirementsARM( const DeviceTensorMemoryRequirementsARM * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceTensorMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getTensorMemoryRequirementsARM( const DeviceTensorMemoryRequirementsARM & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceTensorMemoryRequirementsARM && "Function requires " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetDeviceTensorMemoryRequirementsARM( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getTensorMemoryRequirementsARM( const DeviceTensorMemoryRequirementsARM & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceTensorMemoryRequirementsARM && "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetDeviceTensorMemoryRequirementsARM( + m_device, reinterpret_cast( &info ), reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyTensorARM.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyTensorARM( const CopyTensorInfoARM * pCopyTensorInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdCopyTensorARM( static_cast( m_commandBuffer ), reinterpret_cast( pCopyTensorInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyTensorARM.html + template + VULKAN_HPP_INLINE void CommandBuffer::copyTensorARM( const CopyTensorInfoARM & copyTensorInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdCopyTensorARM && "Function requires " ); +# endif + + d.vkCmdCopyTensorARM( m_commandBuffer, reinterpret_cast( ©TensorInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalTensorPropertiesARM.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getExternalTensorPropertiesARM( const PhysicalDeviceExternalTensorInfoARM * pExternalTensorInfo, + ExternalTensorPropertiesARM * pExternalTensorProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceExternalTensorPropertiesARM( static_cast( m_physicalDevice ), + reinterpret_cast( pExternalTensorInfo ), + reinterpret_cast( pExternalTensorProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalTensorPropertiesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ExternalTensorPropertiesARM PhysicalDevice::getExternalTensorPropertiesARM( + const PhysicalDeviceExternalTensorInfoARM & externalTensorInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceExternalTensorPropertiesARM && + "Function requires " ); +# endif + + ExternalTensorPropertiesARM externalTensorProperties; + d.vkGetPhysicalDeviceExternalTensorPropertiesARM( m_physicalDevice, + reinterpret_cast( &externalTensorInfo ), + reinterpret_cast( &externalTensorProperties ) ); + + return externalTensorProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetTensorOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getTensorOpaqueCaptureDescriptorDataARM( const TensorCaptureDescriptorDataInfoARM * pInfo, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetTensorOpaqueCaptureDescriptorDataARM( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetTensorOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getTensorOpaqueCaptureDescriptorDataARM( const TensorCaptureDescriptorDataInfoARM & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetTensorOpaqueCaptureDescriptorDataARM && "Function requires " ); +# endif + + DataType data; + Result result = static_cast( + d.vkGetTensorOpaqueCaptureDescriptorDataARM( m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getTensorOpaqueCaptureDescriptorDataARM" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetTensorViewOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorViewOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getTensorViewOpaqueCaptureDescriptorDataARM( const TensorViewCaptureDescriptorDataInfoARM * pInfo, + void * pData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetTensorViewOpaqueCaptureDescriptorDataARM( + static_cast( m_device ), reinterpret_cast( pInfo ), pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetTensorViewOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorViewOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getTensorViewOpaqueCaptureDescriptorDataARM( const TensorViewCaptureDescriptorDataInfoARM & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetTensorViewOpaqueCaptureDescriptorDataARM && + "Function requires " ); +# endif + + DataType data; + Result result = static_cast( + d.vkGetTensorViewOpaqueCaptureDescriptorDataARM( m_device, reinterpret_cast( &info ), &data ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getTensorViewOpaqueCaptureDescriptorDataARM" ); + + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_shader_module_identifier === + + // wrapper function for command vkGetShaderModuleIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleIdentifierEXT.html + template + VULKAN_HPP_INLINE void + Device::getShaderModuleIdentifierEXT( ShaderModule shaderModule, ShaderModuleIdentifierEXT * pIdentifier, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetShaderModuleIdentifierEXT( + static_cast( m_device ), static_cast( shaderModule ), reinterpret_cast( pIdentifier ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderModuleIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleIdentifierEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ShaderModuleIdentifierEXT Device::getShaderModuleIdentifierEXT( ShaderModule shaderModule, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetShaderModuleIdentifierEXT && "Function requires " ); +# endif + + ShaderModuleIdentifierEXT identifier; + d.vkGetShaderModuleIdentifierEXT( m_device, static_cast( shaderModule ), reinterpret_cast( &identifier ) ); + + return identifier; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetShaderModuleCreateInfoIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleCreateInfoIdentifierEXT.html + template + VULKAN_HPP_INLINE void Device::getShaderModuleCreateInfoIdentifierEXT( const ShaderModuleCreateInfo * pCreateInfo, + ShaderModuleIdentifierEXT * pIdentifier, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetShaderModuleCreateInfoIdentifierEXT( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pIdentifier ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderModuleCreateInfoIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleCreateInfoIdentifierEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ShaderModuleIdentifierEXT + Device::getShaderModuleCreateInfoIdentifierEXT( const ShaderModuleCreateInfo & createInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetShaderModuleCreateInfoIdentifierEXT && + "Function requires " ); +# endif + + ShaderModuleIdentifierEXT identifier; + d.vkGetShaderModuleCreateInfoIdentifierEXT( + m_device, reinterpret_cast( &createInfo ), reinterpret_cast( &identifier ) ); + + return identifier; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_optical_flow === + + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getOpticalFlowImageFormatsNV( const OpticalFlowImageFormatInfoNV * pOpticalFlowImageFormatInfo, + uint32_t * pFormatCount, + OpticalFlowImageFormatPropertiesNV * pImageFormatProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV( static_cast( m_physicalDevice ), + reinterpret_cast( pOpticalFlowImageFormatInfo ), + pFormatCount, + reinterpret_cast( pImageFormatProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getOpticalFlowImageFormatsNV( const OpticalFlowImageFormatInfoNV & opticalFlowImageFormatInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV && + "Function requires " ); +# endif + + std::vector imageFormatProperties; + uint32_t formatCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + m_physicalDevice, reinterpret_cast( &opticalFlowImageFormatInfo ), &formatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && formatCount ) + { + imageFormatProperties.resize( formatCount ); + result = static_cast( + d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV( m_physicalDevice, + reinterpret_cast( &opticalFlowImageFormatInfo ), + &formatCount, + reinterpret_cast( imageFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getOpticalFlowImageFormatsNV" ); + VULKAN_HPP_ASSERT( formatCount <= imageFormatProperties.size() ); + if ( formatCount < imageFormatProperties.size() ) + { + imageFormatProperties.resize( formatCount ); + } + return detail::createResultValueType( result, std::move( imageFormatProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getOpticalFlowImageFormatsNV( const OpticalFlowImageFormatInfoNV & opticalFlowImageFormatInfo, + OpticalFlowImageFormatPropertiesNVAllocator & opticalFlowImageFormatPropertiesNVAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV && + "Function requires " ); +# endif + + std::vector imageFormatProperties( + opticalFlowImageFormatPropertiesNVAllocator ); + uint32_t formatCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + m_physicalDevice, reinterpret_cast( &opticalFlowImageFormatInfo ), &formatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && formatCount ) + { + imageFormatProperties.resize( formatCount ); + result = static_cast( + d.vkGetPhysicalDeviceOpticalFlowImageFormatsNV( m_physicalDevice, + reinterpret_cast( &opticalFlowImageFormatInfo ), + &formatCount, + reinterpret_cast( imageFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getOpticalFlowImageFormatsNV" ); + VULKAN_HPP_ASSERT( formatCount <= imageFormatProperties.size() ); + if ( formatCount < imageFormatProperties.size() ) + { + imageFormatProperties.resize( formatCount ); + } + return detail::createResultValueType( result, std::move( imageFormatProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateOpticalFlowSessionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createOpticalFlowSessionNV( const OpticalFlowSessionCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + OpticalFlowSessionNV * pSession, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateOpticalFlowSessionNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSession ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateOpticalFlowSessionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createOpticalFlowSessionNV( + const OpticalFlowSessionCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateOpticalFlowSessionNV && "Function requires " ); +# endif + + OpticalFlowSessionNV session; + Result result = static_cast( d.vkCreateOpticalFlowSessionNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &session ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createOpticalFlowSessionNV" ); + + return detail::createResultValueType( result, std::move( session ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateOpticalFlowSessionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type Device::createOpticalFlowSessionNVUnique( + const OpticalFlowSessionCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateOpticalFlowSessionNV && "Function requires " ); +# endif + + OpticalFlowSessionNV session; + Result result = static_cast( d.vkCreateOpticalFlowSessionNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &session ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createOpticalFlowSessionNVUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( session, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + VULKAN_HPP_INLINE void + Device::destroyOpticalFlowSessionNV( OpticalFlowSessionNV session, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyOpticalFlowSessionNV( + static_cast( m_device ), static_cast( session ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + VULKAN_HPP_INLINE void Device::destroyOpticalFlowSessionNV( OpticalFlowSessionNV session, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyOpticalFlowSessionNV && "Function requires " ); +# endif + + d.vkDestroyOpticalFlowSessionNV( + m_device, static_cast( session ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + VULKAN_HPP_INLINE void Device::destroy( OpticalFlowSessionNV session, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyOpticalFlowSessionNV( + static_cast( m_device ), static_cast( session ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + VULKAN_HPP_INLINE void + Device::destroy( OpticalFlowSessionNV session, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyOpticalFlowSessionNV && "Function requires " ); +# endif + + d.vkDestroyOpticalFlowSessionNV( + m_device, static_cast( session ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindOpticalFlowSessionImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindOpticalFlowSessionImageNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindOpticalFlowSessionImageNV( OpticalFlowSessionNV session, + OpticalFlowSessionBindingPointNV bindingPoint, + ImageView view, + ImageLayout layout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBindOpticalFlowSessionImageNV( static_cast( m_device ), + static_cast( session ), + static_cast( bindingPoint ), + static_cast( view ), + static_cast( layout ) ) ); + } +#else + // wrapper function for command vkBindOpticalFlowSessionImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindOpticalFlowSessionImageNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type Device::bindOpticalFlowSessionImageNV( + OpticalFlowSessionNV session, OpticalFlowSessionBindingPointNV bindingPoint, ImageView view, ImageLayout layout, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindOpticalFlowSessionImageNV && "Function requires " ); +# endif + + Result result = static_cast( d.vkBindOpticalFlowSessionImageNV( m_device, + static_cast( session ), + static_cast( bindingPoint ), + static_cast( view ), + static_cast( layout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindOpticalFlowSessionImageNV" ); + + return detail::createResultValueType( result ); + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkCmdOpticalFlowExecuteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdOpticalFlowExecuteNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::opticalFlowExecuteNV( OpticalFlowSessionNV session, + const OpticalFlowExecuteInfoNV * pExecuteInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdOpticalFlowExecuteNV( static_cast( m_commandBuffer ), + static_cast( session ), + reinterpret_cast( pExecuteInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdOpticalFlowExecuteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdOpticalFlowExecuteNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::opticalFlowExecuteNV( OpticalFlowSessionNV session, + const OpticalFlowExecuteInfoNV & executeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdOpticalFlowExecuteNV && "Function requires " ); +# endif + + d.vkCmdOpticalFlowExecuteNV( + m_commandBuffer, static_cast( session ), reinterpret_cast( &executeInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkCmdBindIndexBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2KHR.html + template + VULKAN_HPP_INLINE void + CommandBuffer::bindIndexBuffer2KHR( Buffer buffer, DeviceSize offset, DeviceSize size, IndexType indexType, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindIndexBuffer2KHR( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( size ), + static_cast( indexType ) ); + } + + // wrapper function for command vkGetRenderingAreaGranularityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularityKHR.html + template + VULKAN_HPP_INLINE void Device::getRenderingAreaGranularityKHR( const RenderingAreaInfo * pRenderingAreaInfo, + Extent2D * pGranularity, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetRenderingAreaGranularityKHR( + static_cast( m_device ), reinterpret_cast( pRenderingAreaInfo ), reinterpret_cast( pGranularity ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRenderingAreaGranularityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularityKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Extent2D Device::getRenderingAreaGranularityKHR( const RenderingAreaInfo & renderingAreaInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetRenderingAreaGranularityKHR && "Function requires or " ); +# endif + + Extent2D granularity; + d.vkGetRenderingAreaGranularityKHR( + m_device, reinterpret_cast( &renderingAreaInfo ), reinterpret_cast( &granularity ) ); + + return granularity; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_INLINE void + Device::getImageSubresourceLayoutKHR( const DeviceImageSubresourceInfo * pInfo, SubresourceLayout2 * pLayout, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDeviceImageSubresourceLayoutKHR( + static_cast( m_device ), reinterpret_cast( pInfo ), reinterpret_cast( pLayout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE SubresourceLayout2 Device::getImageSubresourceLayoutKHR( const DeviceImageSubresourceInfo & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSubresourceLayoutKHR && + "Function requires or " ); +# endif + + SubresourceLayout2 layout; + d.vkGetDeviceImageSubresourceLayoutKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getImageSubresourceLayoutKHR( const DeviceImageSubresourceInfo & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDeviceImageSubresourceLayoutKHR && + "Function requires or " ); +# endif + + StructureChain structureChain; + SubresourceLayout2 & layout = structureChain.template get(); + d.vkGetDeviceImageSubresourceLayoutKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( &layout ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_INLINE void Device::getImageSubresourceLayout2KHR( Image image, + const ImageSubresource2 * pSubresource, + SubresourceLayout2 * pLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetImageSubresourceLayout2KHR( static_cast( m_device ), + static_cast( image ), + reinterpret_cast( pSubresource ), + reinterpret_cast( pLayout ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE SubresourceLayout2 Device::getImageSubresourceLayout2KHR( Image image, + const ImageSubresource2 & subresource, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkGetImageSubresourceLayout2KHR && + "Function requires or or or " ); +# endif + + SubresourceLayout2 layout; + d.vkGetImageSubresourceLayout2KHR( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageSubresourceLayout2KHR( Image image, const ImageSubresource2 & subresource, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( + d.vkGetImageSubresourceLayout2KHR && + "Function requires or or or " ); +# endif + + StructureChain structureChain; + SubresourceLayout2 & layout = structureChain.template get(); + d.vkGetImageSubresourceLayout2KHR( m_device, + static_cast( image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_anti_lag === + + // wrapper function for command vkAntiLagUpdateAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAntiLagUpdateAMD.html + template + VULKAN_HPP_INLINE void Device::antiLagUpdateAMD( const AntiLagDataAMD * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkAntiLagUpdateAMD( static_cast( m_device ), reinterpret_cast( pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAntiLagUpdateAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAntiLagUpdateAMD.html + template + VULKAN_HPP_INLINE void Device::antiLagUpdateAMD( const AntiLagDataAMD & data, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkAntiLagUpdateAMD && "Function requires " ); +# endif + + d.vkAntiLagUpdateAMD( m_device, reinterpret_cast( &data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_present_wait2 === + + // wrapper function for command vkWaitForPresent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresent2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitForPresent2KHR( SwapchainKHR swapchain, + const PresentWait2InfoKHR * pPresentWait2Info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkWaitForPresent2KHR( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pPresentWait2Info ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitForPresent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresent2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitForPresent2KHR( SwapchainKHR swapchain, + const PresentWait2InfoKHR & presentWait2Info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkWaitForPresent2KHR && "Function requires " ); +# endif + + Result result = static_cast( + d.vkWaitForPresent2KHR( m_device, static_cast( swapchain ), reinterpret_cast( &presentWait2Info ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitForPresent2KHR", { Result::eSuccess, Result::eTimeout, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_shader_object === + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createShadersEXT( uint32_t createInfoCount, + const ShaderCreateInfoEXT * pCreateInfos, + const AllocationCallbacks * pAllocator, + ShaderEXT * pShaders, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateShadersEXT( static_cast( m_device ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pShaders ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> Device::createShadersEXT( + ArrayProxy const & createInfos, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShadersEXT && "Function requires " ); +# endif + + std::vector shaders( createInfos.size() ); + Result result = static_cast( d.vkCreateShadersEXT( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( shaders.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShadersEXT", { Result::eSuccess, Result::eIncompatibleShaderBinaryEXT } ); + + return ResultValue>( result, std::move( shaders ) ); + } + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createShadersEXT( ArrayProxy const & createInfos, + Optional allocator, + ShaderEXTAllocator & shaderEXTAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShadersEXT && "Function requires " ); +# endif + + std::vector shaders( createInfos.size(), shaderEXTAllocator ); + Result result = static_cast( d.vkCreateShadersEXT( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( shaders.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShadersEXT", { Result::eSuccess, Result::eIncompatibleShaderBinaryEXT } ); + + return ResultValue>( result, std::move( shaders ) ); + } + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue + Device::createShaderEXT( const ShaderCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShadersEXT && "Function requires " ); +# endif + + ShaderEXT shader; + Result result = static_cast( d.vkCreateShadersEXT( m_device, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &shader ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShaderEXT", { Result::eSuccess, Result::eIncompatibleShaderBinaryEXT } ); + + return ResultValue( result, std::move( shader ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, ShaderEXTAllocator>> Device::createShadersEXTUnique( + ArrayProxy const & createInfos, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShadersEXT && "Function requires " ); +# endif + + std::vector shaders( createInfos.size() ); + Result result = static_cast( d.vkCreateShadersEXT( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( shaders.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShadersEXTUnique", { Result::eSuccess, Result::eIncompatibleShaderBinaryEXT } ); + std::vector, ShaderEXTAllocator> uniqueShaders; + uniqueShaders.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & shader : shaders ) + { + uniqueShaders.push_back( UniqueHandle( shader, deleter ) ); + } + return ResultValue, ShaderEXTAllocator>>( result, std::move( uniqueShaders ) ); + } + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, ShaderEXTAllocator>> + Device::createShadersEXTUnique( ArrayProxy const & createInfos, + Optional allocator, + ShaderEXTAllocator & shaderEXTAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShadersEXT && "Function requires " ); +# endif + + std::vector shaders( createInfos.size() ); + Result result = static_cast( d.vkCreateShadersEXT( m_device, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( shaders.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShadersEXTUnique", { Result::eSuccess, Result::eIncompatibleShaderBinaryEXT } ); + std::vector, ShaderEXTAllocator> uniqueShaders( shaderEXTAllocator ); + uniqueShaders.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & shader : shaders ) + { + uniqueShaders.push_back( UniqueHandle( shader, deleter ) ); + } + return ResultValue, ShaderEXTAllocator>>( result, std::move( uniqueShaders ) ); + } + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createShaderEXTUnique( const ShaderCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateShadersEXT && "Function requires " ); +# endif + + ShaderEXT shader; + Result result = static_cast( d.vkCreateShadersEXT( m_device, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &shader ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createShaderEXTUnique", { Result::eSuccess, Result::eIncompatibleShaderBinaryEXT } ); + + return ResultValue>( + result, UniqueHandle( shader, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + VULKAN_HPP_INLINE void Device::destroyShaderEXT( ShaderEXT shader, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyShaderEXT( + static_cast( m_device ), static_cast( shader ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + VULKAN_HPP_INLINE void + Device::destroyShaderEXT( ShaderEXT shader, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyShaderEXT && "Function requires " ); +# endif + + d.vkDestroyShaderEXT( m_device, static_cast( shader ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + VULKAN_HPP_INLINE void Device::destroy( ShaderEXT shader, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyShaderEXT( + static_cast( m_device ), static_cast( shader ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + VULKAN_HPP_INLINE void Device::destroy( ShaderEXT shader, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyShaderEXT && "Function requires " ); +# endif + + d.vkDestroyShaderEXT( m_device, static_cast( shader ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getShaderBinaryDataEXT( ShaderEXT shader, size_t * pDataSize, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetShaderBinaryDataEXT( static_cast( m_device ), static_cast( shader ), pDataSize, pData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getShaderBinaryDataEXT( ShaderEXT shader, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetShaderBinaryDataEXT && "Function requires " ); +# endif + + std::vector data; + size_t dataSize; + Result result; + do + { + result = static_cast( d.vkGetShaderBinaryDataEXT( m_device, static_cast( shader ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = + static_cast( d.vkGetShaderBinaryDataEXT( m_device, static_cast( shader ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderBinaryDataEXT" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return detail::createResultValueType( result, std::move( data ) ); + } + + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getShaderBinaryDataEXT( ShaderEXT shader, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetShaderBinaryDataEXT && "Function requires " ); +# endif + + std::vector data( uint8_tAllocator ); + size_t dataSize; + Result result; + do + { + result = static_cast( d.vkGetShaderBinaryDataEXT( m_device, static_cast( shader ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = + static_cast( d.vkGetShaderBinaryDataEXT( m_device, static_cast( shader ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderBinaryDataEXT" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return detail::createResultValueType( result, std::move( data ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindShadersEXT( uint32_t stageCount, + const ShaderStageFlagBits * pStages, + const ShaderEXT * pShaders, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindShadersEXT( static_cast( m_commandBuffer ), + stageCount, + reinterpret_cast( pStages ), + reinterpret_cast( pShaders ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadersEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindShadersEXT( ArrayProxy const & stages, + ArrayProxy const & shaders, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindShadersEXT && "Function requires " ); +# endif +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( stages.size() == shaders.size() ); +# else + if ( stages.size() != shaders.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindShadersEXT: stages.size() != shaders.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + d.vkCmdBindShadersEXT( m_commandBuffer, + stages.size(), + reinterpret_cast( stages.data() ), + reinterpret_cast( shaders.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampRangeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthClampRangeEXT( DepthClampModeEXT depthClampMode, + const DepthClampRangeEXT * pDepthClampRange, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDepthClampRangeEXT( static_cast( m_commandBuffer ), + static_cast( depthClampMode ), + reinterpret_cast( pDepthClampRange ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampRangeEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDepthClampRangeEXT( DepthClampModeEXT depthClampMode, + Optional depthClampRange, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetDepthClampRangeEXT && + "Function requires or " ); +# endif + + d.vkCmdSetDepthClampRangeEXT( + m_commandBuffer, static_cast( depthClampMode ), reinterpret_cast( depthClampRange.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_pipeline_binary === + + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createPipelineBinariesKHR( const PipelineBinaryCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + PipelineBinaryHandlesInfoKHR * pBinaries, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreatePipelineBinariesKHR( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pBinaries ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createPipelineBinariesKHR( const PipelineBinaryCreateInfoKHR & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineBinariesKHR && "Function requires " ); +# endif + + std::vector pipelineBinaries; + PipelineBinaryHandlesInfoKHR binaries; + Result result; + if ( createInfo.pKeysAndDataInfo ) + { + VULKAN_HPP_ASSERT( !createInfo.pipeline && !createInfo.pPipelineCreateInfo ); + pipelineBinaries.resize( createInfo.pKeysAndDataInfo->binaryCount ); + binaries.pipelineBinaryCount = createInfo.pKeysAndDataInfo->binaryCount; + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + else + { + VULKAN_HPP_ASSERT( !createInfo.pipeline ^ !createInfo.pPipelineCreateInfo ); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaries.resize( binaries.pipelineBinaryCount ); + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + } + + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineBinariesKHR", { Result::eSuccess, Result::eIncomplete, Result::ePipelineBinaryMissingKHR } ); + + return ResultValue>( result, std::move( pipelineBinaries ) ); + } + + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createPipelineBinariesKHR( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator, + PipelineBinaryKHRAllocator & pipelineBinaryKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineBinariesKHR && "Function requires " ); +# endif + + std::vector pipelineBinaries( pipelineBinaryKHRAllocator ); + PipelineBinaryHandlesInfoKHR binaries; + Result result; + if ( createInfo.pKeysAndDataInfo ) + { + VULKAN_HPP_ASSERT( !createInfo.pipeline && !createInfo.pPipelineCreateInfo ); + pipelineBinaries.resize( createInfo.pKeysAndDataInfo->binaryCount ); + binaries.pipelineBinaryCount = createInfo.pKeysAndDataInfo->binaryCount; + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + else + { + VULKAN_HPP_ASSERT( !createInfo.pipeline ^ !createInfo.pPipelineCreateInfo ); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaries.resize( binaries.pipelineBinaryCount ); + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + } + + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineBinariesKHR", { Result::eSuccess, Result::eIncomplete, Result::ePipelineBinaryMissingKHR } ); + + return ResultValue>( result, std::move( pipelineBinaries ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineBinaryKHRAllocator>> + Device::createPipelineBinariesKHRUnique( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineBinariesKHR && "Function requires " ); +# endif + + std::vector pipelineBinaries; + PipelineBinaryHandlesInfoKHR binaries; + Result result; + if ( createInfo.pKeysAndDataInfo ) + { + VULKAN_HPP_ASSERT( !createInfo.pipeline && !createInfo.pPipelineCreateInfo ); + pipelineBinaries.resize( createInfo.pKeysAndDataInfo->binaryCount ); + binaries.pipelineBinaryCount = createInfo.pKeysAndDataInfo->binaryCount; + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + else + { + VULKAN_HPP_ASSERT( !createInfo.pipeline ^ !createInfo.pPipelineCreateInfo ); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaries.resize( binaries.pipelineBinaryCount ); + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + } + + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineBinariesKHRUnique", + { Result::eSuccess, Result::eIncomplete, Result::ePipelineBinaryMissingKHR } ); + std::vector, PipelineBinaryKHRAllocator> uniquePipelineBinaries; + uniquePipelineBinaries.reserve( pipelineBinaries.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipelineBinary : pipelineBinaries ) + { + uniquePipelineBinaries.push_back( UniqueHandle( pipelineBinary, deleter ) ); + } + return ResultValue, PipelineBinaryKHRAllocator>>( result, std::move( uniquePipelineBinaries ) ); + } + + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineBinaryKHRAllocator>> + Device::createPipelineBinariesKHRUnique( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator, + PipelineBinaryKHRAllocator & pipelineBinaryKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreatePipelineBinariesKHR && "Function requires " ); +# endif + + std::vector pipelineBinaries; + PipelineBinaryHandlesInfoKHR binaries; + Result result; + if ( createInfo.pKeysAndDataInfo ) + { + VULKAN_HPP_ASSERT( !createInfo.pipeline && !createInfo.pPipelineCreateInfo ); + pipelineBinaries.resize( createInfo.pKeysAndDataInfo->binaryCount ); + binaries.pipelineBinaryCount = createInfo.pKeysAndDataInfo->binaryCount; + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + else + { + VULKAN_HPP_ASSERT( !createInfo.pipeline ^ !createInfo.pPipelineCreateInfo ); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaries.resize( binaries.pipelineBinaryCount ); + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( d.vkCreatePipelineBinariesKHR( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + } + + detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::createPipelineBinariesKHRUnique", + { Result::eSuccess, Result::eIncomplete, Result::ePipelineBinaryMissingKHR } ); + std::vector, PipelineBinaryKHRAllocator> uniquePipelineBinaries( pipelineBinaryKHRAllocator ); + uniquePipelineBinaries.reserve( pipelineBinaries.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipelineBinary : pipelineBinaries ) + { + uniquePipelineBinaries.push_back( UniqueHandle( pipelineBinary, deleter ) ); + } + return ResultValue, PipelineBinaryKHRAllocator>>( result, std::move( uniquePipelineBinaries ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + VULKAN_HPP_INLINE void + Device::destroyPipelineBinaryKHR( PipelineBinaryKHR pipelineBinary, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipelineBinaryKHR( + static_cast( m_device ), static_cast( pipelineBinary ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + VULKAN_HPP_INLINE void Device::destroyPipelineBinaryKHR( PipelineBinaryKHR pipelineBinary, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipelineBinaryKHR && "Function requires " ); +# endif + + d.vkDestroyPipelineBinaryKHR( + m_device, static_cast( pipelineBinary ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + VULKAN_HPP_INLINE void + Device::destroy( PipelineBinaryKHR pipelineBinary, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyPipelineBinaryKHR( + static_cast( m_device ), static_cast( pipelineBinary ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + VULKAN_HPP_INLINE void + Device::destroy( PipelineBinaryKHR pipelineBinary, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyPipelineBinaryKHR && "Function requires " ); +# endif + + d.vkDestroyPipelineBinaryKHR( + m_device, static_cast( pipelineBinary ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineKeyKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelineKeyKHR( const PipelineCreateInfoKHR * pPipelineCreateInfo, + PipelineBinaryKeyKHR * pPipelineKey, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPipelineKeyKHR( static_cast( m_device ), + reinterpret_cast( pPipelineCreateInfo ), + reinterpret_cast( pPipelineKey ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineKeyKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getPipelineKeyKHR( Optional pipelineCreateInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineKeyKHR && "Function requires " ); +# endif + + PipelineBinaryKeyKHR pipelineKey; + Result result = static_cast( d.vkGetPipelineKeyKHR( + m_device, reinterpret_cast( pipelineCreateInfo.get() ), reinterpret_cast( &pipelineKey ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineKeyKHR" ); + + return detail::createResultValueType( result, std::move( pipelineKey ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getPipelineBinaryDataKHR( const PipelineBinaryDataInfoKHR * pInfo, + PipelineBinaryKeyKHR * pPipelineBinaryKey, + size_t * pPipelineBinaryDataSize, + void * pPipelineBinaryData, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPipelineBinaryDataKHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pPipelineBinaryKey ), + pPipelineBinaryDataSize, + pPipelineBinaryData ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>>::type + Device::getPipelineBinaryDataKHR( const PipelineBinaryDataInfoKHR & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineBinaryDataKHR && "Function requires " ); +# endif + + std::pair> data_; + PipelineBinaryKeyKHR & pipelineBinaryKey = data_.first; + std::vector & pipelineBinaryData = data_.second; + size_t pipelineBinaryDataSize; + Result result = static_cast( d.vkGetPipelineBinaryDataKHR( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &pipelineBinaryKey ), + &pipelineBinaryDataSize, + nullptr ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaryData.resize( pipelineBinaryDataSize ); + result = static_cast( d.vkGetPipelineBinaryDataKHR( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &pipelineBinaryKey ), + &pipelineBinaryDataSize, + reinterpret_cast( pipelineBinaryData.data() ) ) ); + } + + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineBinaryDataKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>>::type + Device::getPipelineBinaryDataKHR( const PipelineBinaryDataInfoKHR & info, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPipelineBinaryDataKHR && "Function requires " ); +# endif + + std::pair> data_( + std::piecewise_construct, std::forward_as_tuple(), std::forward_as_tuple( uint8_tAllocator ) ); + PipelineBinaryKeyKHR & pipelineBinaryKey = data_.first; + std::vector & pipelineBinaryData = data_.second; + size_t pipelineBinaryDataSize; + Result result = static_cast( d.vkGetPipelineBinaryDataKHR( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &pipelineBinaryKey ), + &pipelineBinaryDataSize, + nullptr ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaryData.resize( pipelineBinaryDataSize ); + result = static_cast( d.vkGetPipelineBinaryDataKHR( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &pipelineBinaryKey ), + &pipelineBinaryDataSize, + reinterpret_cast( pipelineBinaryData.data() ) ) ); + } + + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineBinaryDataKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkReleaseCapturedPipelineDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseCapturedPipelineDataKHR.html + template + VULKAN_HPP_INLINE Result Device::releaseCapturedPipelineDataKHR( const ReleaseCapturedPipelineDataInfoKHR * pInfo, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkReleaseCapturedPipelineDataKHR( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pAllocator ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseCapturedPipelineDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseCapturedPipelineDataKHR.html + template + VULKAN_HPP_INLINE void Device::releaseCapturedPipelineDataKHR( const ReleaseCapturedPipelineDataInfoKHR & info, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleaseCapturedPipelineDataKHR && "Function requires " ); +# endif + + d.vkReleaseCapturedPipelineDataKHR( + m_device, reinterpret_cast( &info ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_QCOM_tile_properties === + + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFramebufferTilePropertiesQCOM( Framebuffer framebuffer, + uint32_t * pPropertiesCount, + TilePropertiesQCOM * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetFramebufferTilePropertiesQCOM( static_cast( m_device ), + static_cast( framebuffer ), + pPropertiesCount, + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getFramebufferTilePropertiesQCOM( Framebuffer framebuffer, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetFramebufferTilePropertiesQCOM && "Function requires " ); +# endif + + std::vector properties; + uint32_t propertiesCount; + Result result; + do + { + result = static_cast( d.vkGetFramebufferTilePropertiesQCOM( m_device, static_cast( framebuffer ), &propertiesCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertiesCount ) + { + properties.resize( propertiesCount ); + result = static_cast( d.vkGetFramebufferTilePropertiesQCOM( + m_device, static_cast( framebuffer ), &propertiesCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + + VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); + if ( propertiesCount < properties.size() ) + { + properties.resize( propertiesCount ); + } + return properties; + } + + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getFramebufferTilePropertiesQCOM( Framebuffer framebuffer, TilePropertiesQCOMAllocator & tilePropertiesQCOMAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetFramebufferTilePropertiesQCOM && "Function requires " ); +# endif + + std::vector properties( tilePropertiesQCOMAllocator ); + uint32_t propertiesCount; + Result result; + do + { + result = static_cast( d.vkGetFramebufferTilePropertiesQCOM( m_device, static_cast( framebuffer ), &propertiesCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertiesCount ) + { + properties.resize( propertiesCount ); + result = static_cast( d.vkGetFramebufferTilePropertiesQCOM( + m_device, static_cast( framebuffer ), &propertiesCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + + VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); + if ( propertiesCount < properties.size() ) + { + properties.resize( propertiesCount ); + } + return properties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDynamicRenderingTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDynamicRenderingTilePropertiesQCOM.html + template + VULKAN_HPP_INLINE Result Device::getDynamicRenderingTilePropertiesQCOM( const RenderingInfo * pRenderingInfo, + TilePropertiesQCOM * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDynamicRenderingTilePropertiesQCOM( static_cast( m_device ), + reinterpret_cast( pRenderingInfo ), + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDynamicRenderingTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDynamicRenderingTilePropertiesQCOM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE TilePropertiesQCOM Device::getDynamicRenderingTilePropertiesQCOM( const RenderingInfo & renderingInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDynamicRenderingTilePropertiesQCOM && "Function requires " ); +# endif + + TilePropertiesQCOM properties; + d.vkGetDynamicRenderingTilePropertiesQCOM( + m_device, reinterpret_cast( &renderingInfo ), reinterpret_cast( &properties ) ); + + return properties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::releaseSwapchainImagesKHR( const ReleaseSwapchainImagesInfoKHR * pReleaseInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkReleaseSwapchainImagesKHR( static_cast( m_device ), reinterpret_cast( pReleaseInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesKHR.html + template + VULKAN_HPP_INLINE typename ResultValueType::type Device::releaseSwapchainImagesKHR( const ReleaseSwapchainImagesInfoKHR & releaseInfo, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkReleaseSwapchainImagesKHR && + "Function requires or " ); +# endif + + Result result = static_cast( d.vkReleaseSwapchainImagesKHR( m_device, reinterpret_cast( &releaseInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::releaseSwapchainImagesKHR" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCooperativeVectorPropertiesNV( uint32_t * pPropertyCount, + CooperativeVectorPropertiesNV * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCooperativeVectorPropertiesNV( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeVectorPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCooperativeVectorPropertiesNV( CooperativeVectorPropertiesNVAllocator & cooperativeVectorPropertiesNVAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV && + "Function requires " ); +# endif + + std::vector properties( cooperativeVectorPropertiesNVAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeVectorPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkConvertCooperativeVectorMatrixNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::convertCooperativeVectorMatrixNV( const ConvertCooperativeVectorMatrixInfoNV * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkConvertCooperativeVectorMatrixNV( static_cast( m_device ), reinterpret_cast( pInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkConvertCooperativeVectorMatrixNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::convertCooperativeVectorMatrixNV( const ConvertCooperativeVectorMatrixInfoNV & info, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkConvertCooperativeVectorMatrixNV && "Function requires " ); +# endif + + Result result = + static_cast( d.vkConvertCooperativeVectorMatrixNV( m_device, reinterpret_cast( &info ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::convertCooperativeVectorMatrixNV", { Result::eSuccess, Result::eIncomplete } ); + + return static_cast( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdConvertCooperativeVectorMatrixNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::convertCooperativeVectorMatrixNV( uint32_t infoCount, + const ConvertCooperativeVectorMatrixInfoNV * pInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdConvertCooperativeVectorMatrixNV( + static_cast( m_commandBuffer ), infoCount, reinterpret_cast( pInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdConvertCooperativeVectorMatrixNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::convertCooperativeVectorMatrixNV( ArrayProxy const & infos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdConvertCooperativeVectorMatrixNV && "Function requires " ); +# endif + + d.vkCmdConvertCooperativeVectorMatrixNV( m_commandBuffer, infos.size(), reinterpret_cast( infos.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_low_latency2 === + + // wrapper function for command vkSetLatencySleepModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencySleepModeNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setLatencySleepModeNV( SwapchainKHR swapchain, + const LatencySleepModeInfoNV * pSleepModeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkSetLatencySleepModeNV( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pSleepModeInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetLatencySleepModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencySleepModeNV.html + template + VULKAN_HPP_INLINE typename ResultValueType::type + Device::setLatencySleepModeNV( SwapchainKHR swapchain, const LatencySleepModeInfoNV & sleepModeInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetLatencySleepModeNV && "Function requires " ); +# endif + + Result result = static_cast( + d.vkSetLatencySleepModeNV( m_device, static_cast( swapchain ), reinterpret_cast( &sleepModeInfo ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setLatencySleepModeNV" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkLatencySleepNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkLatencySleepNV.html + template + VULKAN_HPP_INLINE Result Device::latencySleepNV( SwapchainKHR swapchain, const LatencySleepInfoNV * pSleepInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkLatencySleepNV( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pSleepInfo ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkLatencySleepNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkLatencySleepNV.html + template + VULKAN_HPP_INLINE void Device::latencySleepNV( SwapchainKHR swapchain, const LatencySleepInfoNV & sleepInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkLatencySleepNV && "Function requires " ); +# endif + + d.vkLatencySleepNV( m_device, static_cast( swapchain ), reinterpret_cast( &sleepInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencyMarkerNV.html + template + VULKAN_HPP_INLINE void + Device::setLatencyMarkerNV( SwapchainKHR swapchain, const SetLatencyMarkerInfoNV * pLatencyMarkerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkSetLatencyMarkerNV( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pLatencyMarkerInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencyMarkerNV.html + template + VULKAN_HPP_INLINE void + Device::setLatencyMarkerNV( SwapchainKHR swapchain, const SetLatencyMarkerInfoNV & latencyMarkerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkSetLatencyMarkerNV && "Function requires " ); +# endif + + d.vkSetLatencyMarkerNV( m_device, static_cast( swapchain ), reinterpret_cast( &latencyMarkerInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + template + VULKAN_HPP_INLINE void + Device::getLatencyTimingsNV( SwapchainKHR swapchain, GetLatencyMarkerInfoNV * pLatencyMarkerInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetLatencyTimingsNV( + static_cast( m_device ), static_cast( swapchain ), reinterpret_cast( pLatencyMarkerInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getLatencyTimingsNV( SwapchainKHR swapchain, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetLatencyTimingsNV && "Function requires " ); +# endif + + std::vector timings; + GetLatencyMarkerInfoNV latencyMarkerInfo; + d.vkGetLatencyTimingsNV( m_device, static_cast( swapchain ), reinterpret_cast( &latencyMarkerInfo ) ); + timings.resize( latencyMarkerInfo.timingCount ); + latencyMarkerInfo.pTimings = timings.data(); + d.vkGetLatencyTimingsNV( m_device, static_cast( swapchain ), reinterpret_cast( &latencyMarkerInfo ) ); + + return timings; + } + + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getLatencyTimingsNV( SwapchainKHR swapchain, LatencyTimingsFrameReportNVAllocator & latencyTimingsFrameReportNVAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetLatencyTimingsNV && "Function requires " ); +# endif + + std::vector timings( latencyTimingsFrameReportNVAllocator ); + GetLatencyMarkerInfoNV latencyMarkerInfo; + d.vkGetLatencyTimingsNV( m_device, static_cast( swapchain ), reinterpret_cast( &latencyMarkerInfo ) ); + timings.resize( latencyMarkerInfo.timingCount ); + latencyMarkerInfo.pTimings = timings.data(); + d.vkGetLatencyTimingsNV( m_device, static_cast( swapchain ), reinterpret_cast( &latencyMarkerInfo ) ); + + return timings; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueueNotifyOutOfBandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueNotifyOutOfBandNV.html + template + VULKAN_HPP_INLINE void Queue::notifyOutOfBandNV( const OutOfBandQueueTypeInfoNV * pQueueTypeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkQueueNotifyOutOfBandNV( static_cast( m_queue ), reinterpret_cast( pQueueTypeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueNotifyOutOfBandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueNotifyOutOfBandNV.html + template + VULKAN_HPP_INLINE void Queue::notifyOutOfBandNV( const OutOfBandQueueTypeInfoNV & queueTypeInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkQueueNotifyOutOfBandNV && "Function requires " ); +# endif + + d.vkQueueNotifyOutOfBandNV( m_queue, reinterpret_cast( &queueTypeInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCooperativeMatrixPropertiesKHR( uint32_t * pPropertyCount, + CooperativeMatrixPropertiesKHR * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + static_cast( m_physicalDevice ), pPropertyCount, reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + template < + typename CooperativeMatrixPropertiesKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCooperativeMatrixPropertiesKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + template < + typename CooperativeMatrixPropertiesKHRAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCooperativeMatrixPropertiesKHR( CooperativeMatrixPropertiesKHRAllocator & cooperativeMatrixPropertiesKHRAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR && + "Function requires " ); +# endif + + std::vector properties( cooperativeMatrixPropertiesKHRAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_ARM_data_graph === + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDataGraphPipelinesARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + uint32_t createInfoCount, + const DataGraphPipelineCreateInfoARM * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDataGraphPipelinesARM( static_cast( m_device ), + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfoCount, + reinterpret_cast( pCreateInfos ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pPipelines ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createDataGraphPipelinesARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelinesARM && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateDataGraphPipelinesARM( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelinesARM", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createDataGraphPipelinesARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelinesARM && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size(), pipelineAllocator ); + Result result = static_cast( d.vkCreateDataGraphPipelinesARM( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelinesARM", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( result, std::move( pipelines ) ); + } + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue Device::createDataGraphPipelineARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const DataGraphPipelineCreateInfoARM & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelinesARM && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateDataGraphPipelinesARM( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelineARM", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue( result, std::move( pipeline ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createDataGraphPipelinesARMUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelinesARM && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateDataGraphPipelinesARM( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelinesARMUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines; + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template >::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue, PipelineAllocator>> + Device::createDataGraphPipelinesARMUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelinesARM && "Function requires " ); +# endif + + std::vector pipelines( createInfos.size() ); + Result result = static_cast( d.vkCreateDataGraphPipelinesARM( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelinesARMUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + std::vector, PipelineAllocator> uniquePipelines( pipelineAllocator ); + uniquePipelines.reserve( createInfos.size() ); + detail::ObjectDestroy deleter( *this, allocator, d ); + for ( auto const & pipeline : pipelines ) + { + uniquePipelines.push_back( UniqueHandle( pipeline, deleter ) ); + } + return ResultValue, PipelineAllocator>>( result, std::move( uniquePipelines ) ); + } + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue> + Device::createDataGraphPipelineARMUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const DataGraphPipelineCreateInfoARM & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelinesARM && "Function requires " ); +# endif + + Pipeline pipeline; + Result result = static_cast( d.vkCreateDataGraphPipelinesARM( m_device, + static_cast( deferredOperation ), + static_cast( pipelineCache ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelineARMUnique", { Result::eSuccess, Result::ePipelineCompileRequiredEXT } ); + + return ResultValue>( + result, UniqueHandle( pipeline, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createDataGraphPipelineSessionARM( const DataGraphPipelineSessionCreateInfoARM * pCreateInfo, + const AllocationCallbacks * pAllocator, + DataGraphPipelineSessionARM * pSession, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateDataGraphPipelineSessionARM( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSession ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createDataGraphPipelineSessionARM( + const DataGraphPipelineSessionCreateInfoARM & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelineSessionARM && "Function requires " ); +# endif + + DataGraphPipelineSessionARM session; + Result result = + static_cast( d.vkCreateDataGraphPipelineSessionARM( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &session ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelineSessionARM" ); + + return detail::createResultValueType( result, std::move( session ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createDataGraphPipelineSessionARMUnique( const DataGraphPipelineSessionCreateInfoARM & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateDataGraphPipelineSessionARM && "Function requires " ); +# endif + + DataGraphPipelineSessionARM session; + Result result = + static_cast( d.vkCreateDataGraphPipelineSessionARM( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &session ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createDataGraphPipelineSessionARMUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( session, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::getDataGraphPipelineSessionBindPointRequirementsARM( const DataGraphPipelineSessionBindPointRequirementsInfoARM * pInfo, + uint32_t * pBindPointRequirementCount, + DataGraphPipelineSessionBindPointRequirementARM * pBindPointRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM( + static_cast( m_device ), + reinterpret_cast( pInfo ), + pBindPointRequirementCount, + reinterpret_cast( pBindPointRequirements ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + Device::getDataGraphPipelineSessionBindPointRequirementsARM( const DataGraphPipelineSessionBindPointRequirementsInfoARM & info, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM && + "Function requires " ); +# endif + + std::vector bindPointRequirements; + uint32_t bindPointRequirementCount; + Result result; + do + { + result = static_cast( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM( + m_device, reinterpret_cast( &info ), &bindPointRequirementCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && bindPointRequirementCount ) + { + bindPointRequirements.resize( bindPointRequirementCount ); + result = static_cast( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM( + m_device, + reinterpret_cast( &info ), + &bindPointRequirementCount, + reinterpret_cast( bindPointRequirements.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getDataGraphPipelineSessionBindPointRequirementsARM" ); + VULKAN_HPP_ASSERT( bindPointRequirementCount <= bindPointRequirements.size() ); + if ( bindPointRequirementCount < bindPointRequirements.size() ) + { + bindPointRequirements.resize( bindPointRequirementCount ); + } + return detail::createResultValueType( result, std::move( bindPointRequirements ) ); + } + + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + Device::getDataGraphPipelineSessionBindPointRequirementsARM( + const DataGraphPipelineSessionBindPointRequirementsInfoARM & info, + DataGraphPipelineSessionBindPointRequirementARMAllocator & dataGraphPipelineSessionBindPointRequirementARMAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM && + "Function requires " ); +# endif + + std::vector bindPointRequirements( + dataGraphPipelineSessionBindPointRequirementARMAllocator ); + uint32_t bindPointRequirementCount; + Result result; + do + { + result = static_cast( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM( + m_device, reinterpret_cast( &info ), &bindPointRequirementCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && bindPointRequirementCount ) + { + bindPointRequirements.resize( bindPointRequirementCount ); + result = static_cast( d.vkGetDataGraphPipelineSessionBindPointRequirementsARM( + m_device, + reinterpret_cast( &info ), + &bindPointRequirementCount, + reinterpret_cast( bindPointRequirements.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getDataGraphPipelineSessionBindPointRequirementsARM" ); + VULKAN_HPP_ASSERT( bindPointRequirementCount <= bindPointRequirements.size() ); + if ( bindPointRequirementCount < bindPointRequirements.size() ) + { + bindPointRequirements.resize( bindPointRequirementCount ); + } + return detail::createResultValueType( result, std::move( bindPointRequirements ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_INLINE void Device::getDataGraphPipelineSessionMemoryRequirementsARM( const DataGraphPipelineSessionMemoryRequirementsInfoARM * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetDataGraphPipelineSessionMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 Device::getDataGraphPipelineSessionMemoryRequirementsARM( + const DataGraphPipelineSessionMemoryRequirementsInfoARM & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDataGraphPipelineSessionMemoryRequirementsARM && + "Function requires " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetDataGraphPipelineSessionMemoryRequirementsARM( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getDataGraphPipelineSessionMemoryRequirementsARM( const DataGraphPipelineSessionMemoryRequirementsInfoARM & info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDataGraphPipelineSessionMemoryRequirementsARM && + "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetDataGraphPipelineSessionMemoryRequirementsARM( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindDataGraphPipelineSessionMemoryARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindDataGraphPipelineSessionMemoryARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::bindDataGraphPipelineSessionMemoryARM( uint32_t bindInfoCount, + const BindDataGraphPipelineSessionMemoryInfoARM * pBindInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkBindDataGraphPipelineSessionMemoryARM( + static_cast( m_device ), bindInfoCount, reinterpret_cast( pBindInfos ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindDataGraphPipelineSessionMemoryARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindDataGraphPipelineSessionMemoryARM.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType::type + Device::bindDataGraphPipelineSessionMemoryARM( ArrayProxy const & bindInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkBindDataGraphPipelineSessionMemoryARM && "Function requires " ); +# endif + + Result result = static_cast( d.vkBindDataGraphPipelineSessionMemoryARM( + m_device, bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindDataGraphPipelineSessionMemoryARM" ); + + return detail::createResultValueType( result ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + VULKAN_HPP_INLINE void Device::destroyDataGraphPipelineSessionARM( DataGraphPipelineSessionARM session, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDataGraphPipelineSessionARM( + static_cast( m_device ), static_cast( session ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + VULKAN_HPP_INLINE void Device::destroyDataGraphPipelineSessionARM( DataGraphPipelineSessionARM session, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDataGraphPipelineSessionARM && "Function requires " ); +# endif + + d.vkDestroyDataGraphPipelineSessionARM( + m_device, static_cast( session ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + VULKAN_HPP_INLINE void + Device::destroy( DataGraphPipelineSessionARM session, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyDataGraphPipelineSessionARM( + static_cast( m_device ), static_cast( session ), reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + VULKAN_HPP_INLINE void + Device::destroy( DataGraphPipelineSessionARM session, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyDataGraphPipelineSessionARM && "Function requires " ); +# endif + + d.vkDestroyDataGraphPipelineSessionARM( + m_device, static_cast( session ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDispatchDataGraphARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchDataGraphARM.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchDataGraphARM( DataGraphPipelineSessionARM session, + const DataGraphPipelineDispatchInfoARM * pInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdDispatchDataGraphARM( static_cast( m_commandBuffer ), + static_cast( session ), + reinterpret_cast( pInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchDataGraphARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchDataGraphARM.html + template + VULKAN_HPP_INLINE void CommandBuffer::dispatchDataGraphARM( DataGraphPipelineSessionARM session, + Optional info, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdDispatchDataGraphARM && "Function requires " ); +# endif + + d.vkCmdDispatchDataGraphARM( + m_commandBuffer, static_cast( session ), reinterpret_cast( info.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getDataGraphPipelineAvailablePropertiesARM( const DataGraphPipelineInfoARM * pPipelineInfo, + uint32_t * pPropertiesCount, + DataGraphPipelinePropertyARM * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDataGraphPipelineAvailablePropertiesARM( static_cast( m_device ), + reinterpret_cast( pPipelineInfo ), + pPropertiesCount, + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getDataGraphPipelineAvailablePropertiesARM( const DataGraphPipelineInfoARM & pipelineInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDataGraphPipelineAvailablePropertiesARM && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertiesCount; + Result result; + do + { + result = static_cast( d.vkGetDataGraphPipelineAvailablePropertiesARM( + m_device, reinterpret_cast( &pipelineInfo ), &propertiesCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertiesCount ) + { + properties.resize( propertiesCount ); + result = + static_cast( d.vkGetDataGraphPipelineAvailablePropertiesARM( m_device, + reinterpret_cast( &pipelineInfo ), + &propertiesCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getDataGraphPipelineAvailablePropertiesARM" ); + VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); + if ( propertiesCount < properties.size() ) + { + properties.resize( propertiesCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getDataGraphPipelineAvailablePropertiesARM( const DataGraphPipelineInfoARM & pipelineInfo, + DataGraphPipelinePropertyARMAllocator & dataGraphPipelinePropertyARMAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetDataGraphPipelineAvailablePropertiesARM && + "Function requires " ); +# endif + + std::vector properties( dataGraphPipelinePropertyARMAllocator ); + uint32_t propertiesCount; + Result result; + do + { + result = static_cast( d.vkGetDataGraphPipelineAvailablePropertiesARM( + m_device, reinterpret_cast( &pipelineInfo ), &propertiesCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertiesCount ) + { + properties.resize( propertiesCount ); + result = + static_cast( d.vkGetDataGraphPipelineAvailablePropertiesARM( m_device, + reinterpret_cast( &pipelineInfo ), + &propertiesCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getDataGraphPipelineAvailablePropertiesARM" ); + VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); + if ( propertiesCount < properties.size() ) + { + properties.resize( propertiesCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelinePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelinePropertiesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getDataGraphPipelinePropertiesARM( const DataGraphPipelineInfoARM * pPipelineInfo, + uint32_t propertiesCount, + DataGraphPipelinePropertyQueryResultARM * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDataGraphPipelinePropertiesARM( static_cast( m_device ), + reinterpret_cast( pPipelineInfo ), + propertiesCount, + reinterpret_cast( pProperties ) ) ); + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex, + uint32_t * pQueueFamilyDataGraphPropertyCount, + QueueFamilyDataGraphPropertiesARM * pQueueFamilyDataGraphProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( static_cast( m_physicalDevice ), + queueFamilyIndex, + pQueueFamilyDataGraphPropertyCount, + reinterpret_cast( pQueueFamilyDataGraphProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + template < + typename QueueFamilyDataGraphPropertiesARMAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM && + "Function requires " ); +# endif + + std::vector queueFamilyDataGraphProperties; + uint32_t queueFamilyDataGraphPropertyCount; + Result result; + do + { + result = static_cast( + d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( m_physicalDevice, queueFamilyIndex, &queueFamilyDataGraphPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && queueFamilyDataGraphPropertyCount ) + { + queueFamilyDataGraphProperties.resize( queueFamilyDataGraphPropertyCount ); + result = static_cast( d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + m_physicalDevice, + queueFamilyIndex, + &queueFamilyDataGraphPropertyCount, + reinterpret_cast( queueFamilyDataGraphProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getQueueFamilyDataGraphPropertiesARM" ); + VULKAN_HPP_ASSERT( queueFamilyDataGraphPropertyCount <= queueFamilyDataGraphProperties.size() ); + if ( queueFamilyDataGraphPropertyCount < queueFamilyDataGraphProperties.size() ) + { + queueFamilyDataGraphProperties.resize( queueFamilyDataGraphPropertyCount ); + } + return detail::createResultValueType( result, std::move( queueFamilyDataGraphProperties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + template < + typename QueueFamilyDataGraphPropertiesARMAllocator, + typename Dispatch, + typename std::enable_if::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex, + QueueFamilyDataGraphPropertiesARMAllocator & queueFamilyDataGraphPropertiesARMAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM && + "Function requires " ); +# endif + + std::vector queueFamilyDataGraphProperties( + queueFamilyDataGraphPropertiesARMAllocator ); + uint32_t queueFamilyDataGraphPropertyCount; + Result result; + do + { + result = static_cast( + d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( m_physicalDevice, queueFamilyIndex, &queueFamilyDataGraphPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && queueFamilyDataGraphPropertyCount ) + { + queueFamilyDataGraphProperties.resize( queueFamilyDataGraphPropertyCount ); + result = static_cast( d.vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + m_physicalDevice, + queueFamilyIndex, + &queueFamilyDataGraphPropertyCount, + reinterpret_cast( queueFamilyDataGraphProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getQueueFamilyDataGraphPropertiesARM" ); + VULKAN_HPP_ASSERT( queueFamilyDataGraphPropertyCount <= queueFamilyDataGraphProperties.size() ); + if ( queueFamilyDataGraphPropertyCount < queueFamilyDataGraphProperties.size() ) + { + queueFamilyDataGraphProperties.resize( queueFamilyDataGraphPropertyCount ); + } + return detail::createResultValueType( result, std::move( queueFamilyDataGraphProperties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM.html + template + VULKAN_HPP_INLINE void PhysicalDevice::getQueueFamilyDataGraphProcessingEnginePropertiesARM( + const PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM * pQueueFamilyDataGraphProcessingEngineInfo, + QueueFamilyDataGraphProcessingEnginePropertiesARM * pQueueFamilyDataGraphProcessingEngineProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + static_cast( m_physicalDevice ), + reinterpret_cast( pQueueFamilyDataGraphProcessingEngineInfo ), + reinterpret_cast( pQueueFamilyDataGraphProcessingEngineProperties ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE QueueFamilyDataGraphProcessingEnginePropertiesARM PhysicalDevice::getQueueFamilyDataGraphProcessingEnginePropertiesARM( + const PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & queueFamilyDataGraphProcessingEngineInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM && + "Function requires " ); +# endif + + QueueFamilyDataGraphProcessingEnginePropertiesARM queueFamilyDataGraphProcessingEngineProperties; + d.vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + m_physicalDevice, + reinterpret_cast( &queueFamilyDataGraphProcessingEngineInfo ), + reinterpret_cast( &queueFamilyDataGraphProcessingEngineProperties ) ); + + return queueFamilyDataGraphProcessingEngineProperties; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + + // wrapper function for command vkCmdSetAttachmentFeedbackLoopEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAttachmentFeedbackLoopEnableEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setAttachmentFeedbackLoopEnableEXT( ImageAspectFlags aspectMask, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetAttachmentFeedbackLoopEnableEXT( static_cast( m_commandBuffer ), static_cast( aspectMask ) ); + } + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getScreenBufferPropertiesQNX( const struct _screen_buffer * buffer, + ScreenBufferPropertiesQNX * pProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( + d.vkGetScreenBufferPropertiesQNX( static_cast( m_device ), buffer, reinterpret_cast( pProperties ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetScreenBufferPropertiesQNX && "Function requires " ); +# endif + + ScreenBufferPropertiesQNX properties; + Result result = + static_cast( d.vkGetScreenBufferPropertiesQNX( m_device, &buffer, reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getScreenBufferPropertiesQNX" ); + + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetScreenBufferPropertiesQNX && "Function requires " ); +# endif + + StructureChain structureChain; + ScreenBufferPropertiesQNX & properties = structureChain.template get(); + Result result = + static_cast( d.vkGetScreenBufferPropertiesQNX( m_device, &buffer, reinterpret_cast( &properties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getScreenBufferPropertiesQNX" ); + + return detail::createResultValueType( result, std::move( structureChain ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleKHR.html + template + VULKAN_HPP_INLINE void + CommandBuffer::setLineStippleKHR( uint32_t lineStippleFactor, uint16_t lineStipplePattern, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetLineStippleKHR( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); + } + + //=== VK_KHR_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCalibrateableTimeDomainsKHR( uint32_t * pTimeDomainCount, + TimeDomainKHR * pTimeDomains, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( + static_cast( m_physicalDevice ), pTimeDomainCount, reinterpret_cast( pTimeDomains ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCalibrateableTimeDomainsKHR( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR && + "Function requires or " ); +# endif + + std::vector timeDomains; + uint32_t timeDomainCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( m_physicalDevice, &timeDomainCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && timeDomainCount ) + { + timeDomains.resize( timeDomainCount ); + result = static_cast( + d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( m_physicalDevice, &timeDomainCount, reinterpret_cast( timeDomains.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsKHR" ); + VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); + if ( timeDomainCount < timeDomains.size() ) + { + timeDomains.resize( timeDomainCount ); + } + return detail::createResultValueType( result, std::move( timeDomains ) ); + } + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + PhysicalDevice::getCalibrateableTimeDomainsKHR( TimeDomainKHRAllocator & timeDomainKHRAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR && + "Function requires or " ); +# endif + + std::vector timeDomains( timeDomainKHRAllocator ); + uint32_t timeDomainCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( m_physicalDevice, &timeDomainCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && timeDomainCount ) + { + timeDomains.resize( timeDomainCount ); + result = static_cast( + d.vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( m_physicalDevice, &timeDomainCount, reinterpret_cast( timeDomains.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsKHR" ); + VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); + if ( timeDomainCount < timeDomains.size() ) + { + timeDomains.resize( timeDomainCount ); + } + return detail::createResultValueType( result, std::move( timeDomains ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetCalibratedTimestampsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getCalibratedTimestampsKHR( uint32_t timestampCount, + const CalibratedTimestampInfoKHR * pTimestampInfos, + uint64_t * pTimestamps, + uint64_t * pMaxDeviation, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetCalibratedTimestampsKHR( static_cast( m_device ), + timestampCount, + reinterpret_cast( pTimestampInfos ), + pTimestamps, + pMaxDeviation ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetCalibratedTimestampsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, uint64_t>>::type + Device::getCalibratedTimestampsKHR( ArrayProxy const & timestampInfos, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCalibratedTimestampsKHR && + "Function requires or " ); +# endif + + std::pair, uint64_t> data_( + std::piecewise_construct, std::forward_as_tuple( timestampInfos.size() ), std::forward_as_tuple( 0 ) ); + std::vector & timestamps = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( d.vkGetCalibratedTimestampsKHR( + m_device, timestampInfos.size(), reinterpret_cast( timestampInfos.data() ), timestamps.data(), &maxDeviation ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetCalibratedTimestampsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template ::value, int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType, uint64_t>>::type + Device::getCalibratedTimestampsKHR( ArrayProxy const & timestampInfos, + Uint64_tAllocator & uint64_tAllocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCalibratedTimestampsKHR && + "Function requires or " ); +# endif + + std::pair, uint64_t> data_( + std::piecewise_construct, std::forward_as_tuple( timestampInfos.size(), uint64_tAllocator ), std::forward_as_tuple( 0 ) ); + std::vector & timestamps = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( d.vkGetCalibratedTimestampsKHR( + m_device, timestampInfos.size(), reinterpret_cast( timestampInfos.data() ), timestamps.data(), &maxDeviation ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } + + // wrapper function for command vkGetCalibratedTimestampsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::getCalibratedTimestampKHR( const CalibratedTimestampInfoKHR & timestampInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetCalibratedTimestampsKHR && + "Function requires or " ); +# endif + + std::pair data_; + uint64_t & timestamp = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( + d.vkGetCalibratedTimestampsKHR( m_device, 1, reinterpret_cast( ×tampInfo ), ×tamp, &maxDeviation ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampKHR" ); + + return detail::createResultValueType( result, std::move( data_ ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_maintenance6 === + + // wrapper function for command vkCmdBindDescriptorSets2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets2KHR( const BindDescriptorSetsInfo * pBindDescriptorSetsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindDescriptorSets2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pBindDescriptorSetsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorSets2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets2KHR( const BindDescriptorSetsInfo & bindDescriptorSetsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindDescriptorSets2KHR && "Function requires or " ); +# endif + + d.vkCmdBindDescriptorSets2KHR( m_commandBuffer, reinterpret_cast( &bindDescriptorSetsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushConstants2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants2KHR( const PushConstantsInfo * pPushConstantsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushConstants2KHR( static_cast( m_commandBuffer ), reinterpret_cast( pPushConstantsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushConstants2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants2KHR( const PushConstantsInfo & pushConstantsInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushConstants2KHR && "Function requires or " ); +# endif + + d.vkCmdPushConstants2KHR( m_commandBuffer, reinterpret_cast( &pushConstantsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSet2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSet2KHR( const PushDescriptorSetInfo * pPushDescriptorSetInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSet2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pPushDescriptorSetInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSet2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSet2KHR( const PushDescriptorSetInfo & pushDescriptorSetInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushDescriptorSet2KHR && "Function requires or " ); +# endif + + d.vkCmdPushDescriptorSet2KHR( m_commandBuffer, reinterpret_cast( &pushDescriptorSetInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate2KHR( const PushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPushDescriptorSetWithTemplate2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( pPushDescriptorSetWithTemplateInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2KHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate2KHR( const PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPushDescriptorSetWithTemplate2KHR && + "Function requires or " ); +# endif + + d.vkCmdPushDescriptorSetWithTemplate2KHR( m_commandBuffer, + reinterpret_cast( &pushDescriptorSetWithTemplateInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDescriptorBufferOffsets2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsets2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDescriptorBufferOffsets2EXT( const SetDescriptorBufferOffsetsInfoEXT * pSetDescriptorBufferOffsetsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdSetDescriptorBufferOffsets2EXT( static_cast( m_commandBuffer ), + reinterpret_cast( pSetDescriptorBufferOffsetsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDescriptorBufferOffsets2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsets2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::setDescriptorBufferOffsets2EXT( const SetDescriptorBufferOffsetsInfoEXT & setDescriptorBufferOffsetsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdSetDescriptorBufferOffsets2EXT && "Function requires " ); +# endif + + d.vkCmdSetDescriptorBufferOffsets2EXT( m_commandBuffer, reinterpret_cast( &setDescriptorBufferOffsetsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplers2EXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::bindDescriptorBufferEmbeddedSamplers2EXT( const BindDescriptorBufferEmbeddedSamplersInfoEXT * pBindDescriptorBufferEmbeddedSamplersInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + static_cast( m_commandBuffer ), + reinterpret_cast( pBindDescriptorBufferEmbeddedSamplersInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplers2EXT.html + template + VULKAN_HPP_INLINE void + CommandBuffer::bindDescriptorBufferEmbeddedSamplers2EXT( const BindDescriptorBufferEmbeddedSamplersInfoEXT & bindDescriptorBufferEmbeddedSamplersInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindDescriptorBufferEmbeddedSamplers2EXT && + "Function requires " ); +# endif + + d.vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + m_commandBuffer, reinterpret_cast( &bindDescriptorBufferEmbeddedSamplersInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_QCOM_tile_memory_heap === + + // wrapper function for command vkCmdBindTileMemoryQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTileMemoryQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindTileMemoryQCOM( const TileMemoryBindInfoQCOM * pTileMemoryBindInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBindTileMemoryQCOM( static_cast( m_commandBuffer ), reinterpret_cast( pTileMemoryBindInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindTileMemoryQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTileMemoryQCOM.html + template + VULKAN_HPP_INLINE void CommandBuffer::bindTileMemoryQCOM( Optional tileMemoryBindInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBindTileMemoryQCOM && "Function requires " ); +# endif + + d.vkCmdBindTileMemoryQCOM( m_commandBuffer, reinterpret_cast( tileMemoryBindInfo.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_external_compute_queue === + + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createExternalComputeQueueNV( const ExternalComputeQueueCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + ExternalComputeQueueNV * pExternalQueue, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateExternalComputeQueueNV( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pExternalQueue ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createExternalComputeQueueNV( + const ExternalComputeQueueCreateInfoNV & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExternalComputeQueueNV && "Function requires " ); +# endif + + ExternalComputeQueueNV externalQueue; + Result result = static_cast( d.vkCreateExternalComputeQueueNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &externalQueue ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExternalComputeQueueNV" ); + + return detail::createResultValueType( result, std::move( externalQueue ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createExternalComputeQueueNVUnique( const ExternalComputeQueueCreateInfoNV & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateExternalComputeQueueNV && "Function requires " ); +# endif + + ExternalComputeQueueNV externalQueue; + Result result = static_cast( d.vkCreateExternalComputeQueueNV( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &externalQueue ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createExternalComputeQueueNVUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( externalQueue, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + VULKAN_HPP_INLINE void Device::destroyExternalComputeQueueNV( ExternalComputeQueueNV externalQueue, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyExternalComputeQueueNV( static_cast( m_device ), + static_cast( externalQueue ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + VULKAN_HPP_INLINE void Device::destroyExternalComputeQueueNV( ExternalComputeQueueNV externalQueue, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyExternalComputeQueueNV && "Function requires " ); +# endif + + d.vkDestroyExternalComputeQueueNV( + m_device, static_cast( externalQueue ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + VULKAN_HPP_INLINE void + Device::destroy( ExternalComputeQueueNV externalQueue, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyExternalComputeQueueNV( static_cast( m_device ), + static_cast( externalQueue ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + VULKAN_HPP_INLINE void + Device::destroy( ExternalComputeQueueNV externalQueue, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyExternalComputeQueueNV && "Function requires " ); +# endif + + d.vkDestroyExternalComputeQueueNV( + m_device, static_cast( externalQueue ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetExternalComputeQueueDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExternalComputeQueueDataNV.html + template + VULKAN_HPP_INLINE void + ExternalComputeQueueNV::getData( ExternalComputeQueueDataParamsNV * params, void * pData, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetExternalComputeQueueDataNV( + static_cast( m_externalComputeQueueNV ), reinterpret_cast( params ), pData ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetExternalComputeQueueDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExternalComputeQueueDataNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair + ExternalComputeQueueNV::getData( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetExternalComputeQueueDataNV && "Function requires " ); +# endif + + std::pair data_; + ExternalComputeQueueDataParamsNV & arams = data_.first; + DataType & data = data_.second; + d.vkGetExternalComputeQueueDataNV( m_externalComputeQueueNV, reinterpret_cast( &arams ), &data ); + + return data_; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper function for command vkGetClusterAccelerationStructureBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetClusterAccelerationStructureBuildSizesNV.html + template + VULKAN_HPP_INLINE void Device::getClusterAccelerationStructureBuildSizesNV( const ClusterAccelerationStructureInputInfoNV * pInfo, + AccelerationStructureBuildSizesInfoKHR * pSizeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetClusterAccelerationStructureBuildSizesNV( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pSizeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetClusterAccelerationStructureBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetClusterAccelerationStructureBuildSizesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE AccelerationStructureBuildSizesInfoKHR + Device::getClusterAccelerationStructureBuildSizesNV( const ClusterAccelerationStructureInputInfoNV & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetClusterAccelerationStructureBuildSizesNV && + "Function requires " ); +# endif + + AccelerationStructureBuildSizesInfoKHR sizeInfo; + d.vkGetClusterAccelerationStructureBuildSizesNV( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildClusterAccelerationStructureIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildClusterAccelerationStructureIndirectNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildClusterAccelerationStructureIndirectNV( const ClusterAccelerationStructureCommandsInfoNV * pCommandInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBuildClusterAccelerationStructureIndirectNV( static_cast( m_commandBuffer ), + reinterpret_cast( pCommandInfos ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildClusterAccelerationStructureIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildClusterAccelerationStructureIndirectNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildClusterAccelerationStructureIndirectNV( const ClusterAccelerationStructureCommandsInfoNV & commandInfos, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBuildClusterAccelerationStructureIndirectNV && + "Function requires " ); +# endif + + d.vkCmdBuildClusterAccelerationStructureIndirectNV( m_commandBuffer, + reinterpret_cast( &commandInfos ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper function for command vkGetPartitionedAccelerationStructuresBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPartitionedAccelerationStructuresBuildSizesNV.html + template + VULKAN_HPP_INLINE void Device::getPartitionedAccelerationStructuresBuildSizesNV( const PartitionedAccelerationStructureInstancesInputNV * pInfo, + AccelerationStructureBuildSizesInfoKHR * pSizeInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetPartitionedAccelerationStructuresBuildSizesNV( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pSizeInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPartitionedAccelerationStructuresBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPartitionedAccelerationStructuresBuildSizesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE AccelerationStructureBuildSizesInfoKHR Device::getPartitionedAccelerationStructuresBuildSizesNV( + const PartitionedAccelerationStructureInstancesInputNV & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPartitionedAccelerationStructuresBuildSizesNV && + "Function requires " ); +# endif + + AccelerationStructureBuildSizesInfoKHR sizeInfo; + d.vkGetPartitionedAccelerationStructuresBuildSizesNV( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildPartitionedAccelerationStructuresNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildPartitionedAccelerationStructuresNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildPartitionedAccelerationStructuresNV( const BuildPartitionedAccelerationStructureInfoNV * pBuildInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdBuildPartitionedAccelerationStructuresNV( static_cast( m_commandBuffer ), + reinterpret_cast( pBuildInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildPartitionedAccelerationStructuresNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildPartitionedAccelerationStructuresNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::buildPartitionedAccelerationStructuresNV( const BuildPartitionedAccelerationStructureInfoNV & buildInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdBuildPartitionedAccelerationStructuresNV && + "Function requires " ); +# endif + + d.vkCmdBuildPartitionedAccelerationStructuresNV( m_commandBuffer, reinterpret_cast( &buildInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_INLINE void Device::getGeneratedCommandsMemoryRequirementsEXT( const GeneratedCommandsMemoryRequirementsInfoEXT * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkGetGeneratedCommandsMemoryRequirementsEXT( static_cast( m_device ), + reinterpret_cast( pInfo ), + reinterpret_cast( pMemoryRequirements ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE MemoryRequirements2 + Device::getGeneratedCommandsMemoryRequirementsEXT( const GeneratedCommandsMemoryRequirementsInfoEXT & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetGeneratedCommandsMemoryRequirementsEXT && + "Function requires " ); +# endif + + MemoryRequirements2 memoryRequirements; + d.vkGetGeneratedCommandsMemoryRequirementsEXT( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getGeneratedCommandsMemoryRequirementsEXT( const GeneratedCommandsMemoryRequirementsInfoEXT & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetGeneratedCommandsMemoryRequirementsEXT && + "Function requires " ); +# endif + + StructureChain structureChain; + MemoryRequirements2 & memoryRequirements = structureChain.template get(); + d.vkGetGeneratedCommandsMemoryRequirementsEXT( m_device, + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPreprocessGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsEXT( const GeneratedCommandsInfoEXT * pGeneratedCommandsInfo, + CommandBuffer stateCommandBuffer, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdPreprocessGeneratedCommandsEXT( static_cast( m_commandBuffer ), + reinterpret_cast( pGeneratedCommandsInfo ), + static_cast( stateCommandBuffer ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPreprocessGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsEXT( const GeneratedCommandsInfoEXT & generatedCommandsInfo, + CommandBuffer stateCommandBuffer, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdPreprocessGeneratedCommandsEXT && "Function requires " ); +# endif + + d.vkCmdPreprocessGeneratedCommandsEXT( + m_commandBuffer, reinterpret_cast( &generatedCommandsInfo ), static_cast( stateCommandBuffer ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdExecuteGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsEXT( Bool32 isPreprocessed, + const GeneratedCommandsInfoEXT * pGeneratedCommandsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdExecuteGeneratedCommandsEXT( static_cast( m_commandBuffer ), + static_cast( isPreprocessed ), + reinterpret_cast( pGeneratedCommandsInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdExecuteGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsEXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsEXT( Bool32 isPreprocessed, + const GeneratedCommandsInfoEXT & generatedCommandsInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdExecuteGeneratedCommandsEXT && "Function requires " ); +# endif + + d.vkCmdExecuteGeneratedCommandsEXT( + m_commandBuffer, static_cast( isPreprocessed ), reinterpret_cast( &generatedCommandsInfo ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createIndirectCommandsLayoutEXT( const IndirectCommandsLayoutCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + IndirectCommandsLayoutEXT * pIndirectCommandsLayout, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateIndirectCommandsLayoutEXT( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pIndirectCommandsLayout ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createIndirectCommandsLayoutEXT( + const IndirectCommandsLayoutCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIndirectCommandsLayoutEXT && "Function requires " ); +# endif + + IndirectCommandsLayoutEXT indirectCommandsLayout; + Result result = static_cast( d.vkCreateIndirectCommandsLayoutEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectCommandsLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectCommandsLayoutEXT" ); + + return detail::createResultValueType( result, std::move( indirectCommandsLayout ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createIndirectCommandsLayoutEXTUnique( const IndirectCommandsLayoutCreateInfoEXT & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIndirectCommandsLayoutEXT && "Function requires " ); +# endif + + IndirectCommandsLayoutEXT indirectCommandsLayout; + Result result = static_cast( d.vkCreateIndirectCommandsLayoutEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectCommandsLayout ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectCommandsLayoutEXTUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( indirectCommandsLayout, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT indirectCommandsLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyIndirectCommandsLayoutEXT( static_cast( m_device ), + static_cast( indirectCommandsLayout ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_INLINE void Device::destroyIndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT indirectCommandsLayout, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyIndirectCommandsLayoutEXT && "Function requires " ); +# endif + + d.vkDestroyIndirectCommandsLayoutEXT( + m_device, static_cast( indirectCommandsLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_INLINE void + Device::destroy( IndirectCommandsLayoutEXT indirectCommandsLayout, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyIndirectCommandsLayoutEXT( static_cast( m_device ), + static_cast( indirectCommandsLayout ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_INLINE void Device::destroy( IndirectCommandsLayoutEXT indirectCommandsLayout, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyIndirectCommandsLayoutEXT && "Function requires " ); +# endif + + d.vkDestroyIndirectCommandsLayoutEXT( + m_device, static_cast( indirectCommandsLayout ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::createIndirectExecutionSetEXT( const IndirectExecutionSetCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + IndirectExecutionSetEXT * pIndirectExecutionSet, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateIndirectExecutionSetEXT( static_cast( m_device ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pIndirectExecutionSet ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type Device::createIndirectExecutionSetEXT( + const IndirectExecutionSetCreateInfoEXT & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIndirectExecutionSetEXT && "Function requires " ); +# endif + + IndirectExecutionSetEXT indirectExecutionSet; + Result result = static_cast( d.vkCreateIndirectExecutionSetEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectExecutionSet ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectExecutionSetEXT" ); + + return detail::createResultValueType( result, std::move( indirectExecutionSet ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Device::createIndirectExecutionSetEXTUnique( const IndirectExecutionSetCreateInfoEXT & createInfo, + Optional allocator, + Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateIndirectExecutionSetEXT && "Function requires " ); +# endif + + IndirectExecutionSetEXT indirectExecutionSet; + Result result = static_cast( d.vkCreateIndirectExecutionSetEXT( m_device, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectExecutionSet ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::createIndirectExecutionSetEXTUnique" ); + + return detail::createResultValueType( + result, UniqueHandle( indirectExecutionSet, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + VULKAN_HPP_INLINE void Device::destroyIndirectExecutionSetEXT( IndirectExecutionSetEXT indirectExecutionSet, + const AllocationCallbacks * pAllocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyIndirectExecutionSetEXT( static_cast( m_device ), + static_cast( indirectExecutionSet ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + VULKAN_HPP_INLINE void Device::destroyIndirectExecutionSetEXT( IndirectExecutionSetEXT indirectExecutionSet, + Optional allocator, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyIndirectExecutionSetEXT && "Function requires " ); +# endif + + d.vkDestroyIndirectExecutionSetEXT( + m_device, static_cast( indirectExecutionSet ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + VULKAN_HPP_INLINE void + Device::destroy( IndirectExecutionSetEXT indirectExecutionSet, const AllocationCallbacks * pAllocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkDestroyIndirectExecutionSetEXT( static_cast( m_device ), + static_cast( indirectExecutionSet ), + reinterpret_cast( pAllocator ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + VULKAN_HPP_INLINE void + Device::destroy( IndirectExecutionSetEXT indirectExecutionSet, Optional allocator, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkDestroyIndirectExecutionSetEXT && "Function requires " ); +# endif + + d.vkDestroyIndirectExecutionSetEXT( + m_device, static_cast( indirectExecutionSet ), reinterpret_cast( allocator.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html + template + VULKAN_HPP_INLINE void Device::updateIndirectExecutionSetPipelineEXT( IndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const WriteIndirectExecutionSetPipelineEXT * pExecutionSetWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUpdateIndirectExecutionSetPipelineEXT( static_cast( m_device ), + static_cast( indirectExecutionSet ), + executionSetWriteCount, + reinterpret_cast( pExecutionSetWrites ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html + template + VULKAN_HPP_INLINE void Device::updateIndirectExecutionSetPipelineEXT( IndirectExecutionSetEXT indirectExecutionSet, + ArrayProxy const & executionSetWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUpdateIndirectExecutionSetPipelineEXT && + "Function requires " ); +# endif + + d.vkUpdateIndirectExecutionSetPipelineEXT( m_device, + static_cast( indirectExecutionSet ), + executionSetWrites.size(), + reinterpret_cast( executionSetWrites.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetShaderEXT.html + template + VULKAN_HPP_INLINE void Device::updateIndirectExecutionSetShaderEXT( IndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const WriteIndirectExecutionSetShaderEXT * pExecutionSetWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkUpdateIndirectExecutionSetShaderEXT( static_cast( m_device ), + static_cast( indirectExecutionSet ), + executionSetWriteCount, + reinterpret_cast( pExecutionSetWrites ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetShaderEXT.html + template + VULKAN_HPP_INLINE void Device::updateIndirectExecutionSetShaderEXT( IndirectExecutionSetEXT indirectExecutionSet, + ArrayProxy const & executionSetWrites, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkUpdateIndirectExecutionSetShaderEXT && + "Function requires " ); +# endif + + d.vkUpdateIndirectExecutionSetShaderEXT( m_device, + static_cast( indirectExecutionSet ), + executionSetWrites.size(), + reinterpret_cast( executionSetWrites.data() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Instance::createSurfaceOHOS( const SurfaceCreateInfoOHOS * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkCreateSurfaceOHOS( static_cast( m_instance ), + reinterpret_cast( pCreateInfo ), + reinterpret_cast( pAllocator ), + reinterpret_cast( pSurface ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Instance::createSurfaceOHOS( const SurfaceCreateInfoOHOS & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSurfaceOHOS && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateSurfaceOHOS( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createSurfaceOHOS" ); + + return detail::createResultValueType( result, std::move( surface ) ); + } + +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType>::type + Instance::createSurfaceOHOSUnique( const SurfaceCreateInfoOHOS & createInfo, Optional allocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCreateSurfaceOHOS && "Function requires " ); +# endif + + SurfaceKHR surface; + Result result = static_cast( d.vkCreateSurfaceOHOS( m_instance, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::createSurfaceOHOSUnique" ); + + return detail::createResultValueType( result, + UniqueHandle( surface, detail::ObjectDestroy( *this, allocator, d ) ) ); + } +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV( + uint32_t * pPropertyCount, CooperativeMatrixFlexibleDimensionsPropertiesNV * pProperties, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + static_cast( m_physicalDevice ), + pPropertyCount, + reinterpret_cast( pProperties ) ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV( Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV && + "Function requires " ); +# endif + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + template ::value, + int>::type> + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + typename ResultValueType>::type + PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV( + CooperativeMatrixFlexibleDimensionsPropertiesNVAllocator & cooperativeMatrixFlexibleDimensionsPropertiesNVAllocator, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV && + "Function requires " ); +# endif + + std::vector properties( + cooperativeMatrixFlexibleDimensionsPropertiesNVAllocator ); + uint32_t propertyCount; + Result result; + do + { + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( m_physicalDevice, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( d.vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + m_physicalDevice, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return detail::createResultValueType( result, std::move( properties ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + + // wrapper function for command vkGetMemoryMetalHandleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandleEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryMetalHandleEXT( const MemoryGetMetalHandleInfoEXT * pGetMetalHandleInfo, + void ** pHandle, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryMetalHandleEXT( + static_cast( m_device ), reinterpret_cast( pGetMetalHandleInfo ), pHandle ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryMetalHandleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandleEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryMetalHandleEXT( const MemoryGetMetalHandleInfoEXT & getMetalHandleInfo, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryMetalHandleEXT && "Function requires " ); +# endif + + void * handle; + Result result = + static_cast( d.vkGetMemoryMetalHandleEXT( m_device, reinterpret_cast( &getMetalHandleInfo ), &handle ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryMetalHandleEXT" ); + + return detail::createResultValueType( result, std::move( handle ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandlePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getMemoryMetalHandlePropertiesEXT( ExternalMemoryHandleTypeFlagBits handleType, + const void * pHandle, + MemoryMetalHandlePropertiesEXT * pMemoryMetalHandleProperties, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetMemoryMetalHandlePropertiesEXT( static_cast( m_device ), + static_cast( handleType ), + pHandle, + reinterpret_cast( pMemoryMetalHandleProperties ) ) ); + } + +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandlePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type + Device::getMemoryMetalHandlePropertiesEXT( ExternalMemoryHandleTypeFlagBits handleType, HandleType const & handle, Dispatch const & d ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkGetMemoryMetalHandlePropertiesEXT && "Function requires " ); +# endif + + MemoryMetalHandlePropertiesEXT memoryMetalHandleProperties; + Result result = + static_cast( d.vkGetMemoryMetalHandlePropertiesEXT( m_device, + static_cast( handleType ), + reinterpret_cast( &handle ), + reinterpret_cast( &memoryMetalHandleProperties ) ) ); + detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryMetalHandlePropertiesEXT" ); + + return detail::createResultValueType( result, std::move( memoryMetalHandleProperties ) ); + } +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + + // wrapper function for command vkCmdEndRendering2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRendering2EXT( const RenderingEndInfoEXT * pRenderingEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + d.vkCmdEndRendering2EXT( static_cast( m_commandBuffer ), reinterpret_cast( pRenderingEndInfo ) ); + } + +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndRendering2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering2EXT.html + template + VULKAN_HPP_INLINE void CommandBuffer::endRendering2EXT( Optional renderingEndInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); +# if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 ) + VULKAN_HPP_ASSERT( d.vkCmdEndRendering2EXT && "Function requires " ); +# endif + + d.vkCmdEndRendering2EXT( m_commandBuffer, reinterpret_cast( renderingEndInfo.get() ) ); + } +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ggp.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ggp.h new file mode 100644 index 0000000000..156c84a10d --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ggp.h @@ -0,0 +1,62 @@ +#ifndef VULKAN_GGP_H_ +#define VULKAN_GGP_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_GGP_stream_descriptor_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_GGP_stream_descriptor_surface 1 +#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1 +#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface" +typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; +typedef struct VkStreamDescriptorSurfaceCreateInfoGGP { + VkStructureType sType; + const void* pNext; + VkStreamDescriptorSurfaceCreateFlagsGGP flags; + GgpStreamDescriptor streamDescriptor; +} VkStreamDescriptorSurfaceCreateInfoGGP; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( + VkInstance instance, + const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_GGP_frame_token is a preprocessor guard. Do not pass it to API calls. +#define VK_GGP_frame_token 1 +#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1 +#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token" +typedef struct VkPresentFrameTokenGGP { + VkStructureType sType; + const void* pNext; + GgpFrameToken frameToken; +} VkPresentFrameTokenGGP; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_handles.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_handles.hpp new file mode 100644 index 0000000000..6ccd410930 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_handles.hpp @@ -0,0 +1,21405 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_HANDLES_HPP +#define VULKAN_HANDLES_HPP + +// include-what-you-use: make sure, vulkan.hpp is used by code-completers +// IWYU pragma: private; include "vulkan.hpp" + +namespace VULKAN_HPP_NAMESPACE +{ + + //=================================== + //=== STRUCT forward declarations === + //=================================== + + //=== VK_VERSION_1_0 === + struct Extent2D; + struct Extent3D; + struct Offset2D; + struct Offset3D; + struct Rect2D; + struct BaseInStructure; + struct BaseOutStructure; + struct BufferMemoryBarrier; + struct DispatchIndirectCommand; + struct DrawIndexedIndirectCommand; + struct DrawIndirectCommand; + struct ImageMemoryBarrier; + struct MemoryBarrier; + struct PipelineCacheHeaderVersionOne; + struct AllocationCallbacks; + struct ApplicationInfo; + struct FormatProperties; + struct ImageFormatProperties; + struct InstanceCreateInfo; + struct MemoryHeap; + struct MemoryType; + struct PhysicalDeviceFeatures; + struct PhysicalDeviceLimits; + struct PhysicalDeviceMemoryProperties; + struct PhysicalDeviceProperties; + struct PhysicalDeviceSparseProperties; + struct QueueFamilyProperties; + struct DeviceCreateInfo; + struct DeviceQueueCreateInfo; + struct ExtensionProperties; + struct LayerProperties; + struct SubmitInfo; + struct MappedMemoryRange; + struct MemoryAllocateInfo; + struct MemoryRequirements; + struct BindSparseInfo; + struct ImageSubresource; + struct SparseBufferMemoryBindInfo; + struct SparseImageFormatProperties; + struct SparseImageMemoryBind; + struct SparseImageMemoryBindInfo; + struct SparseImageMemoryRequirements; + struct SparseImageOpaqueMemoryBindInfo; + struct SparseMemoryBind; + struct FenceCreateInfo; + struct SemaphoreCreateInfo; + struct EventCreateInfo; + struct QueryPoolCreateInfo; + struct BufferCreateInfo; + struct BufferViewCreateInfo; + struct ImageCreateInfo; + struct SubresourceLayout; + struct ComponentMapping; + struct ImageSubresourceRange; + struct ImageViewCreateInfo; + struct ShaderModuleCreateInfo; + struct PipelineCacheCreateInfo; + struct ComputePipelineCreateInfo; + struct GraphicsPipelineCreateInfo; + struct PipelineColorBlendAttachmentState; + struct PipelineColorBlendStateCreateInfo; + struct PipelineDepthStencilStateCreateInfo; + struct PipelineDynamicStateCreateInfo; + struct PipelineInputAssemblyStateCreateInfo; + struct PipelineMultisampleStateCreateInfo; + struct PipelineRasterizationStateCreateInfo; + struct PipelineShaderStageCreateInfo; + struct PipelineTessellationStateCreateInfo; + struct PipelineVertexInputStateCreateInfo; + struct PipelineViewportStateCreateInfo; + struct SpecializationInfo; + struct SpecializationMapEntry; + struct StencilOpState; + struct VertexInputAttributeDescription; + struct VertexInputBindingDescription; + struct Viewport; + struct PipelineLayoutCreateInfo; + struct PushConstantRange; + struct SamplerCreateInfo; + struct CopyDescriptorSet; + struct DescriptorBufferInfo; + struct DescriptorImageInfo; + struct DescriptorPoolCreateInfo; + struct DescriptorPoolSize; + struct DescriptorSetAllocateInfo; + struct DescriptorSetLayoutBinding; + struct DescriptorSetLayoutCreateInfo; + struct WriteDescriptorSet; + struct AttachmentDescription; + struct AttachmentReference; + struct FramebufferCreateInfo; + struct RenderPassCreateInfo; + struct SubpassDependency; + struct SubpassDescription; + struct CommandPoolCreateInfo; + struct CommandBufferAllocateInfo; + struct CommandBufferBeginInfo; + struct CommandBufferInheritanceInfo; + struct BufferCopy; + struct BufferImageCopy; + struct ClearAttachment; + union ClearColorValue; + struct ClearDepthStencilValue; + struct ClearRect; + union ClearValue; + struct ImageBlit; + struct ImageCopy; + struct ImageResolve; + struct ImageSubresourceLayers; + struct RenderPassBeginInfo; + + //=== VK_VERSION_1_1 === + struct PhysicalDeviceSubgroupProperties; + struct BindBufferMemoryInfo; + using BindBufferMemoryInfoKHR = BindBufferMemoryInfo; + struct BindImageMemoryInfo; + using BindImageMemoryInfoKHR = BindImageMemoryInfo; + struct PhysicalDevice16BitStorageFeatures; + using PhysicalDevice16BitStorageFeaturesKHR = PhysicalDevice16BitStorageFeatures; + struct MemoryDedicatedRequirements; + using MemoryDedicatedRequirementsKHR = MemoryDedicatedRequirements; + struct MemoryDedicatedAllocateInfo; + using MemoryDedicatedAllocateInfoKHR = MemoryDedicatedAllocateInfo; + struct MemoryAllocateFlagsInfo; + using MemoryAllocateFlagsInfoKHR = MemoryAllocateFlagsInfo; + struct DeviceGroupRenderPassBeginInfo; + using DeviceGroupRenderPassBeginInfoKHR = DeviceGroupRenderPassBeginInfo; + struct DeviceGroupCommandBufferBeginInfo; + using DeviceGroupCommandBufferBeginInfoKHR = DeviceGroupCommandBufferBeginInfo; + struct DeviceGroupSubmitInfo; + using DeviceGroupSubmitInfoKHR = DeviceGroupSubmitInfo; + struct DeviceGroupBindSparseInfo; + using DeviceGroupBindSparseInfoKHR = DeviceGroupBindSparseInfo; + struct BindBufferMemoryDeviceGroupInfo; + using BindBufferMemoryDeviceGroupInfoKHR = BindBufferMemoryDeviceGroupInfo; + struct BindImageMemoryDeviceGroupInfo; + using BindImageMemoryDeviceGroupInfoKHR = BindImageMemoryDeviceGroupInfo; + struct PhysicalDeviceGroupProperties; + using PhysicalDeviceGroupPropertiesKHR = PhysicalDeviceGroupProperties; + struct DeviceGroupDeviceCreateInfo; + using DeviceGroupDeviceCreateInfoKHR = DeviceGroupDeviceCreateInfo; + struct BufferMemoryRequirementsInfo2; + using BufferMemoryRequirementsInfo2KHR = BufferMemoryRequirementsInfo2; + struct ImageMemoryRequirementsInfo2; + using ImageMemoryRequirementsInfo2KHR = ImageMemoryRequirementsInfo2; + struct ImageSparseMemoryRequirementsInfo2; + using ImageSparseMemoryRequirementsInfo2KHR = ImageSparseMemoryRequirementsInfo2; + struct MemoryRequirements2; + using MemoryRequirements2KHR = MemoryRequirements2; + struct SparseImageMemoryRequirements2; + using SparseImageMemoryRequirements2KHR = SparseImageMemoryRequirements2; + struct PhysicalDeviceFeatures2; + using PhysicalDeviceFeatures2KHR = PhysicalDeviceFeatures2; + struct PhysicalDeviceProperties2; + using PhysicalDeviceProperties2KHR = PhysicalDeviceProperties2; + struct FormatProperties2; + using FormatProperties2KHR = FormatProperties2; + struct ImageFormatProperties2; + using ImageFormatProperties2KHR = ImageFormatProperties2; + struct PhysicalDeviceImageFormatInfo2; + using PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2; + struct QueueFamilyProperties2; + using QueueFamilyProperties2KHR = QueueFamilyProperties2; + struct PhysicalDeviceMemoryProperties2; + using PhysicalDeviceMemoryProperties2KHR = PhysicalDeviceMemoryProperties2; + struct SparseImageFormatProperties2; + using SparseImageFormatProperties2KHR = SparseImageFormatProperties2; + struct PhysicalDeviceSparseImageFormatInfo2; + using PhysicalDeviceSparseImageFormatInfo2KHR = PhysicalDeviceSparseImageFormatInfo2; + struct PhysicalDevicePointClippingProperties; + using PhysicalDevicePointClippingPropertiesKHR = PhysicalDevicePointClippingProperties; + struct RenderPassInputAttachmentAspectCreateInfo; + using RenderPassInputAttachmentAspectCreateInfoKHR = RenderPassInputAttachmentAspectCreateInfo; + struct InputAttachmentAspectReference; + using InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference; + struct ImageViewUsageCreateInfo; + using ImageViewUsageCreateInfoKHR = ImageViewUsageCreateInfo; + struct PipelineTessellationDomainOriginStateCreateInfo; + using PipelineTessellationDomainOriginStateCreateInfoKHR = PipelineTessellationDomainOriginStateCreateInfo; + struct RenderPassMultiviewCreateInfo; + using RenderPassMultiviewCreateInfoKHR = RenderPassMultiviewCreateInfo; + struct PhysicalDeviceMultiviewFeatures; + using PhysicalDeviceMultiviewFeaturesKHR = PhysicalDeviceMultiviewFeatures; + struct PhysicalDeviceMultiviewProperties; + using PhysicalDeviceMultiviewPropertiesKHR = PhysicalDeviceMultiviewProperties; + struct PhysicalDeviceVariablePointersFeatures; + using PhysicalDeviceVariablePointerFeatures = PhysicalDeviceVariablePointersFeatures; + using PhysicalDeviceVariablePointerFeaturesKHR = PhysicalDeviceVariablePointersFeatures; + using PhysicalDeviceVariablePointersFeaturesKHR = PhysicalDeviceVariablePointersFeatures; + struct PhysicalDeviceProtectedMemoryFeatures; + struct PhysicalDeviceProtectedMemoryProperties; + struct DeviceQueueInfo2; + struct ProtectedSubmitInfo; + struct SamplerYcbcrConversionCreateInfo; + using SamplerYcbcrConversionCreateInfoKHR = SamplerYcbcrConversionCreateInfo; + struct SamplerYcbcrConversionInfo; + using SamplerYcbcrConversionInfoKHR = SamplerYcbcrConversionInfo; + struct BindImagePlaneMemoryInfo; + using BindImagePlaneMemoryInfoKHR = BindImagePlaneMemoryInfo; + struct ImagePlaneMemoryRequirementsInfo; + using ImagePlaneMemoryRequirementsInfoKHR = ImagePlaneMemoryRequirementsInfo; + struct PhysicalDeviceSamplerYcbcrConversionFeatures; + using PhysicalDeviceSamplerYcbcrConversionFeaturesKHR = PhysicalDeviceSamplerYcbcrConversionFeatures; + struct SamplerYcbcrConversionImageFormatProperties; + using SamplerYcbcrConversionImageFormatPropertiesKHR = SamplerYcbcrConversionImageFormatProperties; + struct DescriptorUpdateTemplateEntry; + using DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry; + struct DescriptorUpdateTemplateCreateInfo; + using DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo; + struct ExternalMemoryProperties; + using ExternalMemoryPropertiesKHR = ExternalMemoryProperties; + struct PhysicalDeviceExternalImageFormatInfo; + using PhysicalDeviceExternalImageFormatInfoKHR = PhysicalDeviceExternalImageFormatInfo; + struct ExternalImageFormatProperties; + using ExternalImageFormatPropertiesKHR = ExternalImageFormatProperties; + struct PhysicalDeviceExternalBufferInfo; + using PhysicalDeviceExternalBufferInfoKHR = PhysicalDeviceExternalBufferInfo; + struct ExternalBufferProperties; + using ExternalBufferPropertiesKHR = ExternalBufferProperties; + struct PhysicalDeviceIDProperties; + using PhysicalDeviceIDPropertiesKHR = PhysicalDeviceIDProperties; + struct ExternalMemoryImageCreateInfo; + using ExternalMemoryImageCreateInfoKHR = ExternalMemoryImageCreateInfo; + struct ExternalMemoryBufferCreateInfo; + using ExternalMemoryBufferCreateInfoKHR = ExternalMemoryBufferCreateInfo; + struct ExportMemoryAllocateInfo; + using ExportMemoryAllocateInfoKHR = ExportMemoryAllocateInfo; + struct PhysicalDeviceExternalFenceInfo; + using PhysicalDeviceExternalFenceInfoKHR = PhysicalDeviceExternalFenceInfo; + struct ExternalFenceProperties; + using ExternalFencePropertiesKHR = ExternalFenceProperties; + struct ExportFenceCreateInfo; + using ExportFenceCreateInfoKHR = ExportFenceCreateInfo; + struct ExportSemaphoreCreateInfo; + using ExportSemaphoreCreateInfoKHR = ExportSemaphoreCreateInfo; + struct PhysicalDeviceExternalSemaphoreInfo; + using PhysicalDeviceExternalSemaphoreInfoKHR = PhysicalDeviceExternalSemaphoreInfo; + struct ExternalSemaphoreProperties; + using ExternalSemaphorePropertiesKHR = ExternalSemaphoreProperties; + struct PhysicalDeviceMaintenance3Properties; + using PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties; + struct DescriptorSetLayoutSupport; + using DescriptorSetLayoutSupportKHR = DescriptorSetLayoutSupport; + struct PhysicalDeviceShaderDrawParametersFeatures; + using PhysicalDeviceShaderDrawParameterFeatures = PhysicalDeviceShaderDrawParametersFeatures; + + //=== VK_VERSION_1_2 === + struct PhysicalDeviceVulkan11Features; + struct PhysicalDeviceVulkan11Properties; + struct PhysicalDeviceVulkan12Features; + struct PhysicalDeviceVulkan12Properties; + struct ImageFormatListCreateInfo; + using ImageFormatListCreateInfoKHR = ImageFormatListCreateInfo; + struct RenderPassCreateInfo2; + using RenderPassCreateInfo2KHR = RenderPassCreateInfo2; + struct AttachmentDescription2; + using AttachmentDescription2KHR = AttachmentDescription2; + struct AttachmentReference2; + using AttachmentReference2KHR = AttachmentReference2; + struct SubpassDescription2; + using SubpassDescription2KHR = SubpassDescription2; + struct SubpassDependency2; + using SubpassDependency2KHR = SubpassDependency2; + struct SubpassBeginInfo; + using SubpassBeginInfoKHR = SubpassBeginInfo; + struct SubpassEndInfo; + using SubpassEndInfoKHR = SubpassEndInfo; + struct PhysicalDevice8BitStorageFeatures; + using PhysicalDevice8BitStorageFeaturesKHR = PhysicalDevice8BitStorageFeatures; + struct ConformanceVersion; + using ConformanceVersionKHR = ConformanceVersion; + struct PhysicalDeviceDriverProperties; + using PhysicalDeviceDriverPropertiesKHR = PhysicalDeviceDriverProperties; + struct PhysicalDeviceShaderAtomicInt64Features; + using PhysicalDeviceShaderAtomicInt64FeaturesKHR = PhysicalDeviceShaderAtomicInt64Features; + struct PhysicalDeviceShaderFloat16Int8Features; + using PhysicalDeviceFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; + using PhysicalDeviceShaderFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; + struct PhysicalDeviceFloatControlsProperties; + using PhysicalDeviceFloatControlsPropertiesKHR = PhysicalDeviceFloatControlsProperties; + struct DescriptorSetLayoutBindingFlagsCreateInfo; + using DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo; + struct PhysicalDeviceDescriptorIndexingFeatures; + using PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures; + struct PhysicalDeviceDescriptorIndexingProperties; + using PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties; + struct DescriptorSetVariableDescriptorCountAllocateInfo; + using DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo; + struct DescriptorSetVariableDescriptorCountLayoutSupport; + using DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport; + struct SubpassDescriptionDepthStencilResolve; + using SubpassDescriptionDepthStencilResolveKHR = SubpassDescriptionDepthStencilResolve; + struct PhysicalDeviceDepthStencilResolveProperties; + using PhysicalDeviceDepthStencilResolvePropertiesKHR = PhysicalDeviceDepthStencilResolveProperties; + struct PhysicalDeviceScalarBlockLayoutFeatures; + using PhysicalDeviceScalarBlockLayoutFeaturesEXT = PhysicalDeviceScalarBlockLayoutFeatures; + struct ImageStencilUsageCreateInfo; + using ImageStencilUsageCreateInfoEXT = ImageStencilUsageCreateInfo; + struct SamplerReductionModeCreateInfo; + using SamplerReductionModeCreateInfoEXT = SamplerReductionModeCreateInfo; + struct PhysicalDeviceSamplerFilterMinmaxProperties; + using PhysicalDeviceSamplerFilterMinmaxPropertiesEXT = PhysicalDeviceSamplerFilterMinmaxProperties; + struct PhysicalDeviceVulkanMemoryModelFeatures; + using PhysicalDeviceVulkanMemoryModelFeaturesKHR = PhysicalDeviceVulkanMemoryModelFeatures; + struct PhysicalDeviceImagelessFramebufferFeatures; + using PhysicalDeviceImagelessFramebufferFeaturesKHR = PhysicalDeviceImagelessFramebufferFeatures; + struct FramebufferAttachmentsCreateInfo; + using FramebufferAttachmentsCreateInfoKHR = FramebufferAttachmentsCreateInfo; + struct FramebufferAttachmentImageInfo; + using FramebufferAttachmentImageInfoKHR = FramebufferAttachmentImageInfo; + struct RenderPassAttachmentBeginInfo; + using RenderPassAttachmentBeginInfoKHR = RenderPassAttachmentBeginInfo; + struct PhysicalDeviceUniformBufferStandardLayoutFeatures; + using PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = PhysicalDeviceUniformBufferStandardLayoutFeatures; + struct PhysicalDeviceShaderSubgroupExtendedTypesFeatures; + using PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = PhysicalDeviceShaderSubgroupExtendedTypesFeatures; + struct PhysicalDeviceSeparateDepthStencilLayoutsFeatures; + using PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = PhysicalDeviceSeparateDepthStencilLayoutsFeatures; + struct AttachmentReferenceStencilLayout; + using AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout; + struct AttachmentDescriptionStencilLayout; + using AttachmentDescriptionStencilLayoutKHR = AttachmentDescriptionStencilLayout; + struct PhysicalDeviceHostQueryResetFeatures; + using PhysicalDeviceHostQueryResetFeaturesEXT = PhysicalDeviceHostQueryResetFeatures; + struct PhysicalDeviceTimelineSemaphoreFeatures; + using PhysicalDeviceTimelineSemaphoreFeaturesKHR = PhysicalDeviceTimelineSemaphoreFeatures; + struct PhysicalDeviceTimelineSemaphoreProperties; + using PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties; + struct SemaphoreTypeCreateInfo; + using SemaphoreTypeCreateInfoKHR = SemaphoreTypeCreateInfo; + struct TimelineSemaphoreSubmitInfo; + using TimelineSemaphoreSubmitInfoKHR = TimelineSemaphoreSubmitInfo; + struct SemaphoreWaitInfo; + using SemaphoreWaitInfoKHR = SemaphoreWaitInfo; + struct SemaphoreSignalInfo; + using SemaphoreSignalInfoKHR = SemaphoreSignalInfo; + struct PhysicalDeviceBufferDeviceAddressFeatures; + using PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures; + struct BufferDeviceAddressInfo; + using BufferDeviceAddressInfoEXT = BufferDeviceAddressInfo; + using BufferDeviceAddressInfoKHR = BufferDeviceAddressInfo; + struct BufferOpaqueCaptureAddressCreateInfo; + using BufferOpaqueCaptureAddressCreateInfoKHR = BufferOpaqueCaptureAddressCreateInfo; + struct MemoryOpaqueCaptureAddressAllocateInfo; + using MemoryOpaqueCaptureAddressAllocateInfoKHR = MemoryOpaqueCaptureAddressAllocateInfo; + struct DeviceMemoryOpaqueCaptureAddressInfo; + using DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo; + + //=== VK_VERSION_1_3 === + struct PhysicalDeviceVulkan13Features; + struct PhysicalDeviceVulkan13Properties; + struct PipelineCreationFeedbackCreateInfo; + using PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfo; + struct PipelineCreationFeedback; + using PipelineCreationFeedbackEXT = PipelineCreationFeedback; + struct PhysicalDeviceShaderTerminateInvocationFeatures; + using PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeatures; + struct PhysicalDeviceToolProperties; + using PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolProperties; + struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures; + using PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeatures; + struct PhysicalDevicePrivateDataFeatures; + using PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeatures; + struct DevicePrivateDataCreateInfo; + using DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfo; + struct PrivateDataSlotCreateInfo; + using PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfo; + struct PhysicalDevicePipelineCreationCacheControlFeatures; + using PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeatures; + struct MemoryBarrier2; + using MemoryBarrier2KHR = MemoryBarrier2; + struct BufferMemoryBarrier2; + using BufferMemoryBarrier2KHR = BufferMemoryBarrier2; + struct ImageMemoryBarrier2; + using ImageMemoryBarrier2KHR = ImageMemoryBarrier2; + struct DependencyInfo; + using DependencyInfoKHR = DependencyInfo; + struct SubmitInfo2; + using SubmitInfo2KHR = SubmitInfo2; + struct SemaphoreSubmitInfo; + using SemaphoreSubmitInfoKHR = SemaphoreSubmitInfo; + struct CommandBufferSubmitInfo; + using CommandBufferSubmitInfoKHR = CommandBufferSubmitInfo; + struct PhysicalDeviceSynchronization2Features; + using PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2Features; + struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + using PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + struct PhysicalDeviceImageRobustnessFeatures; + using PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeatures; + struct CopyBufferInfo2; + using CopyBufferInfo2KHR = CopyBufferInfo2; + struct CopyImageInfo2; + using CopyImageInfo2KHR = CopyImageInfo2; + struct CopyBufferToImageInfo2; + using CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2; + struct CopyImageToBufferInfo2; + using CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2; + struct BlitImageInfo2; + using BlitImageInfo2KHR = BlitImageInfo2; + struct ResolveImageInfo2; + using ResolveImageInfo2KHR = ResolveImageInfo2; + struct BufferCopy2; + using BufferCopy2KHR = BufferCopy2; + struct ImageCopy2; + using ImageCopy2KHR = ImageCopy2; + struct ImageBlit2; + using ImageBlit2KHR = ImageBlit2; + struct BufferImageCopy2; + using BufferImageCopy2KHR = BufferImageCopy2; + struct ImageResolve2; + using ImageResolve2KHR = ImageResolve2; + struct PhysicalDeviceSubgroupSizeControlFeatures; + using PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures; + struct PhysicalDeviceSubgroupSizeControlProperties; + using PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties; + struct PipelineShaderStageRequiredSubgroupSizeCreateInfo; + using PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo; + using ShaderRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo; + struct PhysicalDeviceInlineUniformBlockFeatures; + using PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeatures; + struct PhysicalDeviceInlineUniformBlockProperties; + using PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockProperties; + struct WriteDescriptorSetInlineUniformBlock; + using WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlock; + struct DescriptorPoolInlineUniformBlockCreateInfo; + using DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfo; + struct PhysicalDeviceTextureCompressionASTCHDRFeatures; + using PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeatures; + struct RenderingInfo; + using RenderingInfoKHR = RenderingInfo; + struct RenderingAttachmentInfo; + using RenderingAttachmentInfoKHR = RenderingAttachmentInfo; + struct PipelineRenderingCreateInfo; + using PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfo; + struct PhysicalDeviceDynamicRenderingFeatures; + using PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeatures; + struct CommandBufferInheritanceRenderingInfo; + using CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfo; + struct PhysicalDeviceShaderIntegerDotProductFeatures; + using PhysicalDeviceShaderIntegerDotProductFeaturesKHR = PhysicalDeviceShaderIntegerDotProductFeatures; + struct PhysicalDeviceShaderIntegerDotProductProperties; + using PhysicalDeviceShaderIntegerDotProductPropertiesKHR = PhysicalDeviceShaderIntegerDotProductProperties; + struct PhysicalDeviceTexelBufferAlignmentProperties; + using PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentProperties; + struct FormatProperties3; + using FormatProperties3KHR = FormatProperties3; + struct PhysicalDeviceMaintenance4Features; + using PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4Features; + struct PhysicalDeviceMaintenance4Properties; + using PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4Properties; + struct DeviceBufferMemoryRequirements; + using DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirements; + struct DeviceImageMemoryRequirements; + using DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirements; + + //=== VK_VERSION_1_4 === + struct PhysicalDeviceVulkan14Features; + struct PhysicalDeviceVulkan14Properties; + struct DeviceQueueGlobalPriorityCreateInfo; + using DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfo; + using DeviceQueueGlobalPriorityCreateInfoKHR = DeviceQueueGlobalPriorityCreateInfo; + struct PhysicalDeviceGlobalPriorityQueryFeatures; + using PhysicalDeviceGlobalPriorityQueryFeaturesEXT = PhysicalDeviceGlobalPriorityQueryFeatures; + using PhysicalDeviceGlobalPriorityQueryFeaturesKHR = PhysicalDeviceGlobalPriorityQueryFeatures; + struct QueueFamilyGlobalPriorityProperties; + using QueueFamilyGlobalPriorityPropertiesEXT = QueueFamilyGlobalPriorityProperties; + using QueueFamilyGlobalPriorityPropertiesKHR = QueueFamilyGlobalPriorityProperties; + struct PhysicalDeviceShaderSubgroupRotateFeatures; + using PhysicalDeviceShaderSubgroupRotateFeaturesKHR = PhysicalDeviceShaderSubgroupRotateFeatures; + struct PhysicalDeviceShaderFloatControls2Features; + using PhysicalDeviceShaderFloatControls2FeaturesKHR = PhysicalDeviceShaderFloatControls2Features; + struct PhysicalDeviceShaderExpectAssumeFeatures; + using PhysicalDeviceShaderExpectAssumeFeaturesKHR = PhysicalDeviceShaderExpectAssumeFeatures; + struct PhysicalDeviceLineRasterizationFeatures; + using PhysicalDeviceLineRasterizationFeaturesEXT = PhysicalDeviceLineRasterizationFeatures; + using PhysicalDeviceLineRasterizationFeaturesKHR = PhysicalDeviceLineRasterizationFeatures; + struct PhysicalDeviceLineRasterizationProperties; + using PhysicalDeviceLineRasterizationPropertiesEXT = PhysicalDeviceLineRasterizationProperties; + using PhysicalDeviceLineRasterizationPropertiesKHR = PhysicalDeviceLineRasterizationProperties; + struct PipelineRasterizationLineStateCreateInfo; + using PipelineRasterizationLineStateCreateInfoEXT = PipelineRasterizationLineStateCreateInfo; + using PipelineRasterizationLineStateCreateInfoKHR = PipelineRasterizationLineStateCreateInfo; + struct PhysicalDeviceVertexAttributeDivisorProperties; + using PhysicalDeviceVertexAttributeDivisorPropertiesKHR = PhysicalDeviceVertexAttributeDivisorProperties; + struct VertexInputBindingDivisorDescription; + using VertexInputBindingDivisorDescriptionEXT = VertexInputBindingDivisorDescription; + using VertexInputBindingDivisorDescriptionKHR = VertexInputBindingDivisorDescription; + struct PipelineVertexInputDivisorStateCreateInfo; + using PipelineVertexInputDivisorStateCreateInfoEXT = PipelineVertexInputDivisorStateCreateInfo; + using PipelineVertexInputDivisorStateCreateInfoKHR = PipelineVertexInputDivisorStateCreateInfo; + struct PhysicalDeviceVertexAttributeDivisorFeatures; + using PhysicalDeviceVertexAttributeDivisorFeaturesEXT = PhysicalDeviceVertexAttributeDivisorFeatures; + using PhysicalDeviceVertexAttributeDivisorFeaturesKHR = PhysicalDeviceVertexAttributeDivisorFeatures; + struct PhysicalDeviceIndexTypeUint8Features; + using PhysicalDeviceIndexTypeUint8FeaturesEXT = PhysicalDeviceIndexTypeUint8Features; + using PhysicalDeviceIndexTypeUint8FeaturesKHR = PhysicalDeviceIndexTypeUint8Features; + struct MemoryMapInfo; + using MemoryMapInfoKHR = MemoryMapInfo; + struct MemoryUnmapInfo; + using MemoryUnmapInfoKHR = MemoryUnmapInfo; + struct PhysicalDeviceMaintenance5Features; + using PhysicalDeviceMaintenance5FeaturesKHR = PhysicalDeviceMaintenance5Features; + struct PhysicalDeviceMaintenance5Properties; + using PhysicalDeviceMaintenance5PropertiesKHR = PhysicalDeviceMaintenance5Properties; + struct RenderingAreaInfo; + using RenderingAreaInfoKHR = RenderingAreaInfo; + struct DeviceImageSubresourceInfo; + using DeviceImageSubresourceInfoKHR = DeviceImageSubresourceInfo; + struct ImageSubresource2; + using ImageSubresource2EXT = ImageSubresource2; + using ImageSubresource2KHR = ImageSubresource2; + struct SubresourceLayout2; + using SubresourceLayout2EXT = SubresourceLayout2; + using SubresourceLayout2KHR = SubresourceLayout2; + struct PipelineCreateFlags2CreateInfo; + using PipelineCreateFlags2CreateInfoKHR = PipelineCreateFlags2CreateInfo; + struct BufferUsageFlags2CreateInfo; + using BufferUsageFlags2CreateInfoKHR = BufferUsageFlags2CreateInfo; + struct PhysicalDevicePushDescriptorProperties; + using PhysicalDevicePushDescriptorPropertiesKHR = PhysicalDevicePushDescriptorProperties; + struct PhysicalDeviceDynamicRenderingLocalReadFeatures; + using PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR = PhysicalDeviceDynamicRenderingLocalReadFeatures; + struct RenderingAttachmentLocationInfo; + using RenderingAttachmentLocationInfoKHR = RenderingAttachmentLocationInfo; + struct RenderingInputAttachmentIndexInfo; + using RenderingInputAttachmentIndexInfoKHR = RenderingInputAttachmentIndexInfo; + struct PhysicalDeviceMaintenance6Features; + using PhysicalDeviceMaintenance6FeaturesKHR = PhysicalDeviceMaintenance6Features; + struct PhysicalDeviceMaintenance6Properties; + using PhysicalDeviceMaintenance6PropertiesKHR = PhysicalDeviceMaintenance6Properties; + struct BindMemoryStatus; + using BindMemoryStatusKHR = BindMemoryStatus; + struct BindDescriptorSetsInfo; + using BindDescriptorSetsInfoKHR = BindDescriptorSetsInfo; + struct PushConstantsInfo; + using PushConstantsInfoKHR = PushConstantsInfo; + struct PushDescriptorSetInfo; + using PushDescriptorSetInfoKHR = PushDescriptorSetInfo; + struct PushDescriptorSetWithTemplateInfo; + using PushDescriptorSetWithTemplateInfoKHR = PushDescriptorSetWithTemplateInfo; + struct PhysicalDevicePipelineProtectedAccessFeatures; + using PhysicalDevicePipelineProtectedAccessFeaturesEXT = PhysicalDevicePipelineProtectedAccessFeatures; + struct PhysicalDevicePipelineRobustnessFeatures; + using PhysicalDevicePipelineRobustnessFeaturesEXT = PhysicalDevicePipelineRobustnessFeatures; + struct PhysicalDevicePipelineRobustnessProperties; + using PhysicalDevicePipelineRobustnessPropertiesEXT = PhysicalDevicePipelineRobustnessProperties; + struct PipelineRobustnessCreateInfo; + using PipelineRobustnessCreateInfoEXT = PipelineRobustnessCreateInfo; + struct PhysicalDeviceHostImageCopyFeatures; + using PhysicalDeviceHostImageCopyFeaturesEXT = PhysicalDeviceHostImageCopyFeatures; + struct PhysicalDeviceHostImageCopyProperties; + using PhysicalDeviceHostImageCopyPropertiesEXT = PhysicalDeviceHostImageCopyProperties; + struct MemoryToImageCopy; + using MemoryToImageCopyEXT = MemoryToImageCopy; + struct ImageToMemoryCopy; + using ImageToMemoryCopyEXT = ImageToMemoryCopy; + struct CopyMemoryToImageInfo; + using CopyMemoryToImageInfoEXT = CopyMemoryToImageInfo; + struct CopyImageToMemoryInfo; + using CopyImageToMemoryInfoEXT = CopyImageToMemoryInfo; + struct CopyImageToImageInfo; + using CopyImageToImageInfoEXT = CopyImageToImageInfo; + struct HostImageLayoutTransitionInfo; + using HostImageLayoutTransitionInfoEXT = HostImageLayoutTransitionInfo; + struct SubresourceHostMemcpySize; + using SubresourceHostMemcpySizeEXT = SubresourceHostMemcpySize; + struct HostImageCopyDevicePerformanceQuery; + using HostImageCopyDevicePerformanceQueryEXT = HostImageCopyDevicePerformanceQuery; + + //=== VK_KHR_surface === + struct SurfaceCapabilitiesKHR; + struct SurfaceFormatKHR; + + //=== VK_KHR_swapchain === + struct SwapchainCreateInfoKHR; + struct PresentInfoKHR; + struct ImageSwapchainCreateInfoKHR; + struct BindImageMemorySwapchainInfoKHR; + struct AcquireNextImageInfoKHR; + struct DeviceGroupPresentCapabilitiesKHR; + struct DeviceGroupPresentInfoKHR; + struct DeviceGroupSwapchainCreateInfoKHR; + + //=== VK_KHR_display === + struct DisplayModeCreateInfoKHR; + struct DisplayModeParametersKHR; + struct DisplayModePropertiesKHR; + struct DisplayPlaneCapabilitiesKHR; + struct DisplayPlanePropertiesKHR; + struct DisplayPropertiesKHR; + struct DisplaySurfaceCreateInfoKHR; + + //=== VK_KHR_display_swapchain === + struct DisplayPresentInfoKHR; + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + struct XlibSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + struct XcbSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + struct WaylandSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + struct AndroidSurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + struct Win32SurfaceCreateInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + struct DebugReportCallbackCreateInfoEXT; + + //=== VK_AMD_rasterization_order === + struct PipelineRasterizationStateRasterizationOrderAMD; + + //=== VK_EXT_debug_marker === + struct DebugMarkerObjectNameInfoEXT; + struct DebugMarkerObjectTagInfoEXT; + struct DebugMarkerMarkerInfoEXT; + + //=== VK_KHR_video_queue === + struct QueueFamilyQueryResultStatusPropertiesKHR; + struct QueueFamilyVideoPropertiesKHR; + struct VideoProfileInfoKHR; + struct VideoProfileListInfoKHR; + struct VideoCapabilitiesKHR; + struct PhysicalDeviceVideoFormatInfoKHR; + struct VideoFormatPropertiesKHR; + struct VideoPictureResourceInfoKHR; + struct VideoReferenceSlotInfoKHR; + struct VideoSessionMemoryRequirementsKHR; + struct BindVideoSessionMemoryInfoKHR; + struct VideoSessionCreateInfoKHR; + struct VideoSessionParametersCreateInfoKHR; + struct VideoSessionParametersUpdateInfoKHR; + struct VideoBeginCodingInfoKHR; + struct VideoEndCodingInfoKHR; + struct VideoCodingControlInfoKHR; + + //=== VK_KHR_video_decode_queue === + struct VideoDecodeCapabilitiesKHR; + struct VideoDecodeUsageInfoKHR; + struct VideoDecodeInfoKHR; + + //=== VK_NV_dedicated_allocation === + struct DedicatedAllocationImageCreateInfoNV; + struct DedicatedAllocationBufferCreateInfoNV; + struct DedicatedAllocationMemoryAllocateInfoNV; + + //=== VK_EXT_transform_feedback === + struct PhysicalDeviceTransformFeedbackFeaturesEXT; + struct PhysicalDeviceTransformFeedbackPropertiesEXT; + struct PipelineRasterizationStateStreamCreateInfoEXT; + + //=== VK_NVX_binary_import === + struct CuModuleCreateInfoNVX; + struct CuModuleTexturingModeCreateInfoNVX; + struct CuFunctionCreateInfoNVX; + struct CuLaunchInfoNVX; + + //=== VK_NVX_image_view_handle === + struct ImageViewHandleInfoNVX; + struct ImageViewAddressPropertiesNVX; + + //=== VK_KHR_video_encode_h264 === + struct VideoEncodeH264CapabilitiesKHR; + struct VideoEncodeH264QualityLevelPropertiesKHR; + struct VideoEncodeH264SessionCreateInfoKHR; + struct VideoEncodeH264SessionParametersCreateInfoKHR; + struct VideoEncodeH264SessionParametersAddInfoKHR; + struct VideoEncodeH264SessionParametersGetInfoKHR; + struct VideoEncodeH264SessionParametersFeedbackInfoKHR; + struct VideoEncodeH264PictureInfoKHR; + struct VideoEncodeH264DpbSlotInfoKHR; + struct VideoEncodeH264NaluSliceInfoKHR; + struct VideoEncodeH264ProfileInfoKHR; + struct VideoEncodeH264RateControlInfoKHR; + struct VideoEncodeH264RateControlLayerInfoKHR; + struct VideoEncodeH264QpKHR; + struct VideoEncodeH264FrameSizeKHR; + struct VideoEncodeH264GopRemainingFrameInfoKHR; + + //=== VK_KHR_video_encode_h265 === + struct VideoEncodeH265CapabilitiesKHR; + struct VideoEncodeH265SessionCreateInfoKHR; + struct VideoEncodeH265QualityLevelPropertiesKHR; + struct VideoEncodeH265SessionParametersCreateInfoKHR; + struct VideoEncodeH265SessionParametersAddInfoKHR; + struct VideoEncodeH265SessionParametersGetInfoKHR; + struct VideoEncodeH265SessionParametersFeedbackInfoKHR; + struct VideoEncodeH265PictureInfoKHR; + struct VideoEncodeH265DpbSlotInfoKHR; + struct VideoEncodeH265NaluSliceSegmentInfoKHR; + struct VideoEncodeH265ProfileInfoKHR; + struct VideoEncodeH265RateControlInfoKHR; + struct VideoEncodeH265RateControlLayerInfoKHR; + struct VideoEncodeH265QpKHR; + struct VideoEncodeH265FrameSizeKHR; + struct VideoEncodeH265GopRemainingFrameInfoKHR; + + //=== VK_KHR_video_decode_h264 === + struct VideoDecodeH264ProfileInfoKHR; + struct VideoDecodeH264CapabilitiesKHR; + struct VideoDecodeH264SessionParametersCreateInfoKHR; + struct VideoDecodeH264SessionParametersAddInfoKHR; + struct VideoDecodeH264PictureInfoKHR; + struct VideoDecodeH264DpbSlotInfoKHR; + + //=== VK_AMD_texture_gather_bias_lod === + struct TextureLODGatherFormatPropertiesAMD; + + //=== VK_AMD_shader_info === + struct ShaderResourceUsageAMD; + struct ShaderStatisticsInfoAMD; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + struct StreamDescriptorSurfaceCreateInfoGGP; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_corner_sampled_image === + struct PhysicalDeviceCornerSampledImageFeaturesNV; + + //=== VK_NV_external_memory_capabilities === + struct ExternalImageFormatPropertiesNV; + + //=== VK_NV_external_memory === + struct ExternalMemoryImageCreateInfoNV; + struct ExportMemoryAllocateInfoNV; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + struct ImportMemoryWin32HandleInfoNV; + struct ExportMemoryWin32HandleInfoNV; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_win32_keyed_mutex === + struct Win32KeyedMutexAcquireReleaseInfoNV; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_validation_flags === + struct ValidationFlagsEXT; + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + struct ViSurfaceCreateInfoNN; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_astc_decode_mode === + struct ImageViewASTCDecodeModeEXT; + struct PhysicalDeviceASTCDecodeFeaturesEXT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + struct ImportMemoryWin32HandleInfoKHR; + struct ExportMemoryWin32HandleInfoKHR; + struct MemoryWin32HandlePropertiesKHR; + struct MemoryGetWin32HandleInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + struct ImportMemoryFdInfoKHR; + struct MemoryFdPropertiesKHR; + struct MemoryGetFdInfoKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_keyed_mutex === + struct Win32KeyedMutexAcquireReleaseInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + struct ImportSemaphoreWin32HandleInfoKHR; + struct ExportSemaphoreWin32HandleInfoKHR; + struct D3D12FenceSubmitInfoKHR; + struct SemaphoreGetWin32HandleInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + struct ImportSemaphoreFdInfoKHR; + struct SemaphoreGetFdInfoKHR; + + //=== VK_EXT_conditional_rendering === + struct ConditionalRenderingBeginInfoEXT; + struct PhysicalDeviceConditionalRenderingFeaturesEXT; + struct CommandBufferInheritanceConditionalRenderingInfoEXT; + + //=== VK_KHR_incremental_present === + struct PresentRegionsKHR; + struct PresentRegionKHR; + struct RectLayerKHR; + + //=== VK_NV_clip_space_w_scaling === + struct ViewportWScalingNV; + struct PipelineViewportWScalingStateCreateInfoNV; + + //=== VK_EXT_display_surface_counter === + struct SurfaceCapabilities2EXT; + + //=== VK_EXT_display_control === + struct DisplayPowerInfoEXT; + struct DeviceEventInfoEXT; + struct DisplayEventInfoEXT; + struct SwapchainCounterCreateInfoEXT; + + //=== VK_GOOGLE_display_timing === + struct RefreshCycleDurationGOOGLE; + struct PastPresentationTimingGOOGLE; + struct PresentTimesInfoGOOGLE; + struct PresentTimeGOOGLE; + + //=== VK_NVX_multiview_per_view_attributes === + struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + struct MultiviewPerViewAttributesInfoNVX; + + //=== VK_NV_viewport_swizzle === + struct ViewportSwizzleNV; + struct PipelineViewportSwizzleStateCreateInfoNV; + + //=== VK_EXT_discard_rectangles === + struct PhysicalDeviceDiscardRectanglePropertiesEXT; + struct PipelineDiscardRectangleStateCreateInfoEXT; + + //=== VK_EXT_conservative_rasterization === + struct PhysicalDeviceConservativeRasterizationPropertiesEXT; + struct PipelineRasterizationConservativeStateCreateInfoEXT; + + //=== VK_EXT_depth_clip_enable === + struct PhysicalDeviceDepthClipEnableFeaturesEXT; + struct PipelineRasterizationDepthClipStateCreateInfoEXT; + + //=== VK_EXT_hdr_metadata === + struct HdrMetadataEXT; + struct XYColorEXT; + + //=== VK_IMG_relaxed_line_rasterization === + struct PhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + + //=== VK_KHR_shared_presentable_image === + struct SharedPresentSurfaceCapabilitiesKHR; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + struct ImportFenceWin32HandleInfoKHR; + struct ExportFenceWin32HandleInfoKHR; + struct FenceGetWin32HandleInfoKHR; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + struct ImportFenceFdInfoKHR; + struct FenceGetFdInfoKHR; + + //=== VK_KHR_performance_query === + struct PhysicalDevicePerformanceQueryFeaturesKHR; + struct PhysicalDevicePerformanceQueryPropertiesKHR; + struct PerformanceCounterKHR; + struct PerformanceCounterDescriptionKHR; + struct QueryPoolPerformanceCreateInfoKHR; + union PerformanceCounterResultKHR; + struct AcquireProfilingLockInfoKHR; + struct PerformanceQuerySubmitInfoKHR; + + //=== VK_KHR_get_surface_capabilities2 === + struct PhysicalDeviceSurfaceInfo2KHR; + struct SurfaceCapabilities2KHR; + struct SurfaceFormat2KHR; + + //=== VK_KHR_get_display_properties2 === + struct DisplayProperties2KHR; + struct DisplayPlaneProperties2KHR; + struct DisplayModeProperties2KHR; + struct DisplayPlaneInfo2KHR; + struct DisplayPlaneCapabilities2KHR; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + struct IOSSurfaceCreateInfoMVK; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + struct MacOSSurfaceCreateInfoMVK; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + struct DebugUtilsLabelEXT; + struct DebugUtilsMessengerCallbackDataEXT; + struct DebugUtilsMessengerCreateInfoEXT; + struct DebugUtilsObjectNameInfoEXT; + struct DebugUtilsObjectTagInfoEXT; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + struct AndroidHardwareBufferUsageANDROID; + struct AndroidHardwareBufferPropertiesANDROID; + struct AndroidHardwareBufferFormatPropertiesANDROID; + struct ImportAndroidHardwareBufferInfoANDROID; + struct MemoryGetAndroidHardwareBufferInfoANDROID; + struct ExternalFormatANDROID; + struct AndroidHardwareBufferFormatProperties2ANDROID; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + struct PhysicalDeviceShaderEnqueueFeaturesAMDX; + struct PhysicalDeviceShaderEnqueuePropertiesAMDX; + struct ExecutionGraphPipelineScratchSizeAMDX; + struct ExecutionGraphPipelineCreateInfoAMDX; + struct DispatchGraphInfoAMDX; + struct DispatchGraphCountInfoAMDX; + struct PipelineShaderStageNodeCreateInfoAMDX; + union DeviceOrHostAddressConstAMDX; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_AMD_mixed_attachment_samples === + struct AttachmentSampleCountInfoAMD; + using AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD; + + //=== VK_KHR_shader_bfloat16 === + struct PhysicalDeviceShaderBfloat16FeaturesKHR; + + //=== VK_EXT_sample_locations === + struct SampleLocationEXT; + struct SampleLocationsInfoEXT; + struct AttachmentSampleLocationsEXT; + struct SubpassSampleLocationsEXT; + struct RenderPassSampleLocationsBeginInfoEXT; + struct PipelineSampleLocationsStateCreateInfoEXT; + struct PhysicalDeviceSampleLocationsPropertiesEXT; + struct MultisamplePropertiesEXT; + + //=== VK_EXT_blend_operation_advanced === + struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT; + struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT; + struct PipelineColorBlendAdvancedStateCreateInfoEXT; + + //=== VK_NV_fragment_coverage_to_color === + struct PipelineCoverageToColorStateCreateInfoNV; + + //=== VK_KHR_acceleration_structure === + union DeviceOrHostAddressKHR; + union DeviceOrHostAddressConstKHR; + struct AccelerationStructureBuildRangeInfoKHR; + struct AabbPositionsKHR; + using AabbPositionsNV = AabbPositionsKHR; + struct AccelerationStructureGeometryTrianglesDataKHR; + struct TransformMatrixKHR; + using TransformMatrixNV = TransformMatrixKHR; + struct AccelerationStructureBuildGeometryInfoKHR; + struct AccelerationStructureGeometryAabbsDataKHR; + struct AccelerationStructureInstanceKHR; + using AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR; + struct AccelerationStructureGeometryInstancesDataKHR; + union AccelerationStructureGeometryDataKHR; + struct AccelerationStructureGeometryKHR; + struct AccelerationStructureCreateInfoKHR; + struct WriteDescriptorSetAccelerationStructureKHR; + struct PhysicalDeviceAccelerationStructureFeaturesKHR; + struct PhysicalDeviceAccelerationStructurePropertiesKHR; + struct AccelerationStructureDeviceAddressInfoKHR; + struct AccelerationStructureVersionInfoKHR; + struct CopyAccelerationStructureToMemoryInfoKHR; + struct CopyMemoryToAccelerationStructureInfoKHR; + struct CopyAccelerationStructureInfoKHR; + struct AccelerationStructureBuildSizesInfoKHR; + + //=== VK_KHR_ray_tracing_pipeline === + struct RayTracingShaderGroupCreateInfoKHR; + struct RayTracingPipelineCreateInfoKHR; + struct PhysicalDeviceRayTracingPipelineFeaturesKHR; + struct PhysicalDeviceRayTracingPipelinePropertiesKHR; + struct StridedDeviceAddressRegionKHR; + struct TraceRaysIndirectCommandKHR; + struct RayTracingPipelineInterfaceCreateInfoKHR; + + //=== VK_KHR_ray_query === + struct PhysicalDeviceRayQueryFeaturesKHR; + + //=== VK_NV_framebuffer_mixed_samples === + struct PipelineCoverageModulationStateCreateInfoNV; + + //=== VK_NV_shader_sm_builtins === + struct PhysicalDeviceShaderSMBuiltinsPropertiesNV; + struct PhysicalDeviceShaderSMBuiltinsFeaturesNV; + + //=== VK_EXT_image_drm_format_modifier === + struct DrmFormatModifierPropertiesListEXT; + struct DrmFormatModifierPropertiesEXT; + struct PhysicalDeviceImageDrmFormatModifierInfoEXT; + struct ImageDrmFormatModifierListCreateInfoEXT; + struct ImageDrmFormatModifierExplicitCreateInfoEXT; + struct ImageDrmFormatModifierPropertiesEXT; + struct DrmFormatModifierPropertiesList2EXT; + struct DrmFormatModifierProperties2EXT; + + //=== VK_EXT_validation_cache === + struct ValidationCacheCreateInfoEXT; + struct ShaderModuleValidationCacheCreateInfoEXT; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_portability_subset === + struct PhysicalDevicePortabilitySubsetFeaturesKHR; + struct PhysicalDevicePortabilitySubsetPropertiesKHR; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NV_shading_rate_image === + struct ShadingRatePaletteNV; + struct PipelineViewportShadingRateImageStateCreateInfoNV; + struct PhysicalDeviceShadingRateImageFeaturesNV; + struct PhysicalDeviceShadingRateImagePropertiesNV; + struct CoarseSampleLocationNV; + struct CoarseSampleOrderCustomNV; + struct PipelineViewportCoarseSampleOrderStateCreateInfoNV; + + //=== VK_NV_ray_tracing === + struct RayTracingShaderGroupCreateInfoNV; + struct RayTracingPipelineCreateInfoNV; + struct GeometryTrianglesNV; + struct GeometryAABBNV; + struct GeometryDataNV; + struct GeometryNV; + struct AccelerationStructureInfoNV; + struct AccelerationStructureCreateInfoNV; + struct BindAccelerationStructureMemoryInfoNV; + struct WriteDescriptorSetAccelerationStructureNV; + struct AccelerationStructureMemoryRequirementsInfoNV; + struct PhysicalDeviceRayTracingPropertiesNV; + + //=== VK_NV_representative_fragment_test === + struct PhysicalDeviceRepresentativeFragmentTestFeaturesNV; + struct PipelineRepresentativeFragmentTestStateCreateInfoNV; + + //=== VK_EXT_filter_cubic === + struct PhysicalDeviceImageViewImageFormatInfoEXT; + struct FilterCubicImageViewImageFormatPropertiesEXT; + + //=== VK_EXT_external_memory_host === + struct ImportMemoryHostPointerInfoEXT; + struct MemoryHostPointerPropertiesEXT; + struct PhysicalDeviceExternalMemoryHostPropertiesEXT; + + //=== VK_KHR_shader_clock === + struct PhysicalDeviceShaderClockFeaturesKHR; + + //=== VK_AMD_pipeline_compiler_control === + struct PipelineCompilerControlCreateInfoAMD; + + //=== VK_AMD_shader_core_properties === + struct PhysicalDeviceShaderCorePropertiesAMD; + + //=== VK_KHR_video_decode_h265 === + struct VideoDecodeH265ProfileInfoKHR; + struct VideoDecodeH265CapabilitiesKHR; + struct VideoDecodeH265SessionParametersCreateInfoKHR; + struct VideoDecodeH265SessionParametersAddInfoKHR; + struct VideoDecodeH265PictureInfoKHR; + struct VideoDecodeH265DpbSlotInfoKHR; + + //=== VK_AMD_memory_overallocation_behavior === + struct DeviceMemoryOverallocationCreateInfoAMD; + + //=== VK_EXT_vertex_attribute_divisor === + struct PhysicalDeviceVertexAttributeDivisorPropertiesEXT; + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_frame_token === + struct PresentFrameTokenGGP; +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_mesh_shader === + struct PhysicalDeviceMeshShaderFeaturesNV; + struct PhysicalDeviceMeshShaderPropertiesNV; + struct DrawMeshTasksIndirectCommandNV; + + //=== VK_NV_shader_image_footprint === + struct PhysicalDeviceShaderImageFootprintFeaturesNV; + + //=== VK_NV_scissor_exclusive === + struct PipelineViewportExclusiveScissorStateCreateInfoNV; + struct PhysicalDeviceExclusiveScissorFeaturesNV; + + //=== VK_NV_device_diagnostic_checkpoints === + struct QueueFamilyCheckpointPropertiesNV; + struct CheckpointDataNV; + struct QueueFamilyCheckpointProperties2NV; + struct CheckpointData2NV; + + //=== VK_INTEL_shader_integer_functions2 === + struct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + + //=== VK_INTEL_performance_query === + union PerformanceValueDataINTEL; + struct PerformanceValueINTEL; + struct InitializePerformanceApiInfoINTEL; + struct QueryPoolPerformanceQueryCreateInfoINTEL; + using QueryPoolCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL; + struct PerformanceMarkerInfoINTEL; + struct PerformanceStreamMarkerInfoINTEL; + struct PerformanceOverrideInfoINTEL; + struct PerformanceConfigurationAcquireInfoINTEL; + + //=== VK_EXT_pci_bus_info === + struct PhysicalDevicePCIBusInfoPropertiesEXT; + + //=== VK_AMD_display_native_hdr === + struct DisplayNativeHdrSurfaceCapabilitiesAMD; + struct SwapchainDisplayNativeHdrCreateInfoAMD; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + struct ImagePipeSurfaceCreateInfoFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + struct MetalSurfaceCreateInfoEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map === + struct PhysicalDeviceFragmentDensityMapFeaturesEXT; + struct PhysicalDeviceFragmentDensityMapPropertiesEXT; + struct RenderPassFragmentDensityMapCreateInfoEXT; + struct RenderingFragmentDensityMapAttachmentInfoEXT; + + //=== VK_KHR_fragment_shading_rate === + struct FragmentShadingRateAttachmentInfoKHR; + struct PipelineFragmentShadingRateStateCreateInfoKHR; + struct PhysicalDeviceFragmentShadingRateFeaturesKHR; + struct PhysicalDeviceFragmentShadingRatePropertiesKHR; + struct PhysicalDeviceFragmentShadingRateKHR; + struct RenderingFragmentShadingRateAttachmentInfoKHR; + + //=== VK_AMD_shader_core_properties2 === + struct PhysicalDeviceShaderCoreProperties2AMD; + + //=== VK_AMD_device_coherent_memory === + struct PhysicalDeviceCoherentMemoryFeaturesAMD; + + //=== VK_EXT_shader_image_atomic_int64 === + struct PhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + + //=== VK_KHR_shader_quad_control === + struct PhysicalDeviceShaderQuadControlFeaturesKHR; + + //=== VK_EXT_memory_budget === + struct PhysicalDeviceMemoryBudgetPropertiesEXT; + + //=== VK_EXT_memory_priority === + struct PhysicalDeviceMemoryPriorityFeaturesEXT; + struct MemoryPriorityAllocateInfoEXT; + + //=== VK_KHR_surface_protected_capabilities === + struct SurfaceProtectedCapabilitiesKHR; + + //=== VK_NV_dedicated_allocation_image_aliasing === + struct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + + //=== VK_EXT_buffer_device_address === + struct PhysicalDeviceBufferDeviceAddressFeaturesEXT; + using PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT; + struct BufferDeviceAddressCreateInfoEXT; + + //=== VK_EXT_validation_features === + struct ValidationFeaturesEXT; + + //=== VK_KHR_present_wait === + struct PhysicalDevicePresentWaitFeaturesKHR; + + //=== VK_NV_cooperative_matrix === + struct CooperativeMatrixPropertiesNV; + struct PhysicalDeviceCooperativeMatrixFeaturesNV; + struct PhysicalDeviceCooperativeMatrixPropertiesNV; + + //=== VK_NV_coverage_reduction_mode === + struct PhysicalDeviceCoverageReductionModeFeaturesNV; + struct PipelineCoverageReductionStateCreateInfoNV; + struct FramebufferMixedSamplesCombinationNV; + + //=== VK_EXT_fragment_shader_interlock === + struct PhysicalDeviceFragmentShaderInterlockFeaturesEXT; + + //=== VK_EXT_ycbcr_image_arrays === + struct PhysicalDeviceYcbcrImageArraysFeaturesEXT; + + //=== VK_EXT_provoking_vertex === + struct PhysicalDeviceProvokingVertexFeaturesEXT; + struct PhysicalDeviceProvokingVertexPropertiesEXT; + struct PipelineRasterizationProvokingVertexStateCreateInfoEXT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + struct SurfaceFullScreenExclusiveInfoEXT; + struct SurfaceCapabilitiesFullScreenExclusiveEXT; + struct SurfaceFullScreenExclusiveWin32InfoEXT; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + struct HeadlessSurfaceCreateInfoEXT; + + //=== VK_EXT_shader_atomic_float === + struct PhysicalDeviceShaderAtomicFloatFeaturesEXT; + + //=== VK_EXT_extended_dynamic_state === + struct PhysicalDeviceExtendedDynamicStateFeaturesEXT; + + //=== VK_KHR_pipeline_executable_properties === + struct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + struct PipelineInfoKHR; + using PipelineInfoEXT = PipelineInfoKHR; + struct PipelineExecutablePropertiesKHR; + struct PipelineExecutableInfoKHR; + union PipelineExecutableStatisticValueKHR; + struct PipelineExecutableStatisticKHR; + struct PipelineExecutableInternalRepresentationKHR; + + //=== VK_EXT_map_memory_placed === + struct PhysicalDeviceMapMemoryPlacedFeaturesEXT; + struct PhysicalDeviceMapMemoryPlacedPropertiesEXT; + struct MemoryMapPlacedInfoEXT; + + //=== VK_EXT_shader_atomic_float2 === + struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT; + + //=== VK_NV_device_generated_commands === + struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + struct GraphicsShaderGroupCreateInfoNV; + struct GraphicsPipelineShaderGroupsCreateInfoNV; + struct BindShaderGroupIndirectCommandNV; + struct BindIndexBufferIndirectCommandNV; + struct BindVertexBufferIndirectCommandNV; + struct SetStateFlagsIndirectCommandNV; + struct IndirectCommandsStreamNV; + struct IndirectCommandsLayoutTokenNV; + struct IndirectCommandsLayoutCreateInfoNV; + struct GeneratedCommandsInfoNV; + struct GeneratedCommandsMemoryRequirementsInfoNV; + + //=== VK_NV_inherited_viewport_scissor === + struct PhysicalDeviceInheritedViewportScissorFeaturesNV; + struct CommandBufferInheritanceViewportScissorInfoNV; + + //=== VK_EXT_texel_buffer_alignment === + struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT; + + //=== VK_QCOM_render_pass_transform === + struct RenderPassTransformBeginInfoQCOM; + struct CommandBufferInheritanceRenderPassTransformInfoQCOM; + + //=== VK_EXT_depth_bias_control === + struct PhysicalDeviceDepthBiasControlFeaturesEXT; + struct DepthBiasInfoEXT; + struct DepthBiasRepresentationInfoEXT; + + //=== VK_EXT_device_memory_report === + struct PhysicalDeviceDeviceMemoryReportFeaturesEXT; + struct DeviceDeviceMemoryReportCreateInfoEXT; + struct DeviceMemoryReportCallbackDataEXT; + + //=== VK_EXT_custom_border_color === + struct SamplerCustomBorderColorCreateInfoEXT; + struct PhysicalDeviceCustomBorderColorPropertiesEXT; + struct PhysicalDeviceCustomBorderColorFeaturesEXT; + + //=== VK_KHR_pipeline_library === + struct PipelineLibraryCreateInfoKHR; + + //=== VK_NV_present_barrier === + struct PhysicalDevicePresentBarrierFeaturesNV; + struct SurfaceCapabilitiesPresentBarrierNV; + struct SwapchainPresentBarrierCreateInfoNV; + + //=== VK_KHR_present_id === + struct PresentIdKHR; + struct PhysicalDevicePresentIdFeaturesKHR; + + //=== VK_KHR_video_encode_queue === + struct VideoEncodeInfoKHR; + struct VideoEncodeCapabilitiesKHR; + struct QueryPoolVideoEncodeFeedbackCreateInfoKHR; + struct VideoEncodeUsageInfoKHR; + struct VideoEncodeRateControlInfoKHR; + struct VideoEncodeRateControlLayerInfoKHR; + struct PhysicalDeviceVideoEncodeQualityLevelInfoKHR; + struct VideoEncodeQualityLevelPropertiesKHR; + struct VideoEncodeQualityLevelInfoKHR; + struct VideoEncodeSessionParametersGetInfoKHR; + struct VideoEncodeSessionParametersFeedbackInfoKHR; + + //=== VK_NV_device_diagnostics_config === + struct PhysicalDeviceDiagnosticsConfigFeaturesNV; + struct DeviceDiagnosticsConfigCreateInfoNV; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + struct CudaModuleCreateInfoNV; + struct CudaFunctionCreateInfoNV; + struct CudaLaunchInfoNV; + struct PhysicalDeviceCudaKernelLaunchFeaturesNV; + struct PhysicalDeviceCudaKernelLaunchPropertiesNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + struct PhysicalDeviceTileShadingFeaturesQCOM; + struct PhysicalDeviceTileShadingPropertiesQCOM; + struct RenderPassTileShadingCreateInfoQCOM; + struct PerTileBeginInfoQCOM; + struct PerTileEndInfoQCOM; + struct DispatchTileInfoQCOM; + + //=== VK_NV_low_latency === + struct QueryLowLatencySupportNV; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + struct ExportMetalObjectCreateInfoEXT; + struct ExportMetalObjectsInfoEXT; + struct ExportMetalDeviceInfoEXT; + struct ExportMetalCommandQueueInfoEXT; + struct ExportMetalBufferInfoEXT; + struct ImportMetalBufferInfoEXT; + struct ExportMetalTextureInfoEXT; + struct ImportMetalTextureInfoEXT; + struct ExportMetalIOSurfaceInfoEXT; + struct ImportMetalIOSurfaceInfoEXT; + struct ExportMetalSharedEventInfoEXT; + struct ImportMetalSharedEventInfoEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_descriptor_buffer === + struct PhysicalDeviceDescriptorBufferPropertiesEXT; + struct PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + struct PhysicalDeviceDescriptorBufferFeaturesEXT; + struct DescriptorAddressInfoEXT; + struct DescriptorBufferBindingInfoEXT; + struct DescriptorBufferBindingPushDescriptorBufferHandleEXT; + union DescriptorDataEXT; + struct DescriptorGetInfoEXT; + struct BufferCaptureDescriptorDataInfoEXT; + struct ImageCaptureDescriptorDataInfoEXT; + struct ImageViewCaptureDescriptorDataInfoEXT; + struct SamplerCaptureDescriptorDataInfoEXT; + struct OpaqueCaptureDescriptorDataCreateInfoEXT; + struct AccelerationStructureCaptureDescriptorDataInfoEXT; + + //=== VK_EXT_graphics_pipeline_library === + struct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + struct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + struct GraphicsPipelineLibraryCreateInfoEXT; + + //=== VK_AMD_shader_early_and_late_fragment_tests === + struct PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + + //=== VK_KHR_fragment_shader_barycentric === + struct PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + using PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + struct PhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + + //=== VK_KHR_shader_subgroup_uniform_control_flow === + struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + + //=== VK_NV_fragment_shading_rate_enums === + struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + struct PipelineFragmentShadingRateEnumStateCreateInfoNV; + + //=== VK_NV_ray_tracing_motion_blur === + struct AccelerationStructureGeometryMotionTrianglesDataNV; + struct AccelerationStructureMotionInfoNV; + struct AccelerationStructureMotionInstanceNV; + union AccelerationStructureMotionInstanceDataNV; + struct AccelerationStructureMatrixMotionInstanceNV; + struct AccelerationStructureSRTMotionInstanceNV; + struct SRTDataNV; + struct PhysicalDeviceRayTracingMotionBlurFeaturesNV; + + //=== VK_EXT_mesh_shader === + struct PhysicalDeviceMeshShaderFeaturesEXT; + struct PhysicalDeviceMeshShaderPropertiesEXT; + struct DrawMeshTasksIndirectCommandEXT; + + //=== VK_EXT_ycbcr_2plane_444_formats === + struct PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + + //=== VK_EXT_fragment_density_map2 === + struct PhysicalDeviceFragmentDensityMap2FeaturesEXT; + struct PhysicalDeviceFragmentDensityMap2PropertiesEXT; + + //=== VK_QCOM_rotated_copy_commands === + struct CopyCommandTransformInfoQCOM; + + //=== VK_KHR_workgroup_memory_explicit_layout === + struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + + //=== VK_EXT_image_compression_control === + struct PhysicalDeviceImageCompressionControlFeaturesEXT; + struct ImageCompressionControlEXT; + struct ImageCompressionPropertiesEXT; + + //=== VK_EXT_attachment_feedback_loop_layout === + struct PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + + //=== VK_EXT_4444_formats === + struct PhysicalDevice4444FormatsFeaturesEXT; + + //=== VK_EXT_device_fault === + struct PhysicalDeviceFaultFeaturesEXT; + struct DeviceFaultCountsEXT; + struct DeviceFaultInfoEXT; + struct DeviceFaultAddressInfoEXT; + struct DeviceFaultVendorInfoEXT; + struct DeviceFaultVendorBinaryHeaderVersionOneEXT; + + //=== VK_EXT_rgba10x6_formats === + struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT; + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + struct DirectFBSurfaceCreateInfoEXT; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + struct PhysicalDeviceVertexInputDynamicStateFeaturesEXT; + struct VertexInputBindingDescription2EXT; + struct VertexInputAttributeDescription2EXT; + + //=== VK_EXT_physical_device_drm === + struct PhysicalDeviceDrmPropertiesEXT; + + //=== VK_EXT_device_address_binding_report === + struct PhysicalDeviceAddressBindingReportFeaturesEXT; + struct DeviceAddressBindingCallbackDataEXT; + + //=== VK_EXT_depth_clip_control === + struct PhysicalDeviceDepthClipControlFeaturesEXT; + struct PipelineViewportDepthClipControlCreateInfoEXT; + + //=== VK_EXT_primitive_topology_list_restart === + struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + struct ImportMemoryZirconHandleInfoFUCHSIA; + struct MemoryZirconHandlePropertiesFUCHSIA; + struct MemoryGetZirconHandleInfoFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + struct ImportSemaphoreZirconHandleInfoFUCHSIA; + struct SemaphoreGetZirconHandleInfoFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + struct BufferCollectionCreateInfoFUCHSIA; + struct ImportMemoryBufferCollectionFUCHSIA; + struct BufferCollectionImageCreateInfoFUCHSIA; + struct BufferConstraintsInfoFUCHSIA; + struct BufferCollectionBufferCreateInfoFUCHSIA; + struct BufferCollectionPropertiesFUCHSIA; + struct SysmemColorSpaceFUCHSIA; + struct ImageConstraintsInfoFUCHSIA; + struct ImageFormatConstraintsInfoFUCHSIA; + struct BufferCollectionConstraintsInfoFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + struct SubpassShadingPipelineCreateInfoHUAWEI; + struct PhysicalDeviceSubpassShadingFeaturesHUAWEI; + struct PhysicalDeviceSubpassShadingPropertiesHUAWEI; + + //=== VK_HUAWEI_invocation_mask === + struct PhysicalDeviceInvocationMaskFeaturesHUAWEI; + + //=== VK_NV_external_memory_rdma === + struct MemoryGetRemoteAddressInfoNV; + struct PhysicalDeviceExternalMemoryRDMAFeaturesNV; + + //=== VK_EXT_pipeline_properties === + struct PipelinePropertiesIdentifierEXT; + struct PhysicalDevicePipelinePropertiesFeaturesEXT; + + //=== VK_EXT_frame_boundary === + struct PhysicalDeviceFrameBoundaryFeaturesEXT; + struct FrameBoundaryEXT; + + //=== VK_EXT_multisampled_render_to_single_sampled === + struct PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + struct SubpassResolvePerformanceQueryEXT; + struct MultisampledRenderToSingleSampledInfoEXT; + + //=== VK_EXT_extended_dynamic_state2 === + struct PhysicalDeviceExtendedDynamicState2FeaturesEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + struct ScreenSurfaceCreateInfoQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + struct PhysicalDeviceColorWriteEnableFeaturesEXT; + struct PipelineColorWriteCreateInfoEXT; + + //=== VK_EXT_primitives_generated_query === + struct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + + //=== VK_KHR_ray_tracing_maintenance1 === + struct PhysicalDeviceRayTracingMaintenance1FeaturesKHR; + struct TraceRaysIndirectCommand2KHR; + + //=== VK_EXT_image_view_min_lod === + struct PhysicalDeviceImageViewMinLodFeaturesEXT; + struct ImageViewMinLodCreateInfoEXT; + + //=== VK_EXT_multi_draw === + struct PhysicalDeviceMultiDrawFeaturesEXT; + struct PhysicalDeviceMultiDrawPropertiesEXT; + struct MultiDrawInfoEXT; + struct MultiDrawIndexedInfoEXT; + + //=== VK_EXT_image_2d_view_of_3d === + struct PhysicalDeviceImage2DViewOf3DFeaturesEXT; + + //=== VK_EXT_shader_tile_image === + struct PhysicalDeviceShaderTileImageFeaturesEXT; + struct PhysicalDeviceShaderTileImagePropertiesEXT; + + //=== VK_EXT_opacity_micromap === + struct MicromapBuildInfoEXT; + struct MicromapUsageEXT; + struct MicromapCreateInfoEXT; + struct PhysicalDeviceOpacityMicromapFeaturesEXT; + struct PhysicalDeviceOpacityMicromapPropertiesEXT; + struct MicromapVersionInfoEXT; + struct CopyMicromapToMemoryInfoEXT; + struct CopyMemoryToMicromapInfoEXT; + struct CopyMicromapInfoEXT; + struct MicromapBuildSizesInfoEXT; + struct AccelerationStructureTrianglesOpacityMicromapEXT; + struct MicromapTriangleEXT; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + struct PhysicalDeviceDisplacementMicromapFeaturesNV; + struct PhysicalDeviceDisplacementMicromapPropertiesNV; + struct AccelerationStructureTrianglesDisplacementMicromapNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_HUAWEI_cluster_culling_shader === + struct PhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + struct PhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + struct PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + + //=== VK_EXT_border_color_swizzle === + struct PhysicalDeviceBorderColorSwizzleFeaturesEXT; + struct SamplerBorderColorComponentMappingCreateInfoEXT; + + //=== VK_EXT_pageable_device_local_memory === + struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + + //=== VK_ARM_shader_core_properties === + struct PhysicalDeviceShaderCorePropertiesARM; + + //=== VK_ARM_scheduling_controls === + struct DeviceQueueShaderCoreControlCreateInfoARM; + struct PhysicalDeviceSchedulingControlsFeaturesARM; + struct PhysicalDeviceSchedulingControlsPropertiesARM; + + //=== VK_EXT_image_sliced_view_of_3d === + struct PhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + struct ImageViewSlicedCreateInfoEXT; + + //=== VK_VALVE_descriptor_set_host_mapping === + struct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + struct DescriptorSetBindingReferenceVALVE; + struct DescriptorSetLayoutHostMappingInfoVALVE; + + //=== VK_EXT_non_seamless_cube_map === + struct PhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + + //=== VK_ARM_render_pass_striped === + struct PhysicalDeviceRenderPassStripedFeaturesARM; + struct PhysicalDeviceRenderPassStripedPropertiesARM; + struct RenderPassStripeBeginInfoARM; + struct RenderPassStripeInfoARM; + struct RenderPassStripeSubmitInfoARM; + + //=== VK_NV_copy_memory_indirect === + struct CopyMemoryIndirectCommandNV; + struct CopyMemoryToImageIndirectCommandNV; + struct PhysicalDeviceCopyMemoryIndirectFeaturesNV; + struct PhysicalDeviceCopyMemoryIndirectPropertiesNV; + + //=== VK_NV_memory_decompression === + struct DecompressMemoryRegionNV; + struct PhysicalDeviceMemoryDecompressionFeaturesNV; + struct PhysicalDeviceMemoryDecompressionPropertiesNV; + + //=== VK_NV_device_generated_commands_compute === + struct PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + struct ComputePipelineIndirectBufferInfoNV; + struct PipelineIndirectDeviceAddressInfoNV; + struct BindPipelineIndirectCommandNV; + + //=== VK_NV_ray_tracing_linear_swept_spheres === + struct PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + struct AccelerationStructureGeometryLinearSweptSpheresDataNV; + struct AccelerationStructureGeometrySpheresDataNV; + + //=== VK_NV_linear_color_attachment === + struct PhysicalDeviceLinearColorAttachmentFeaturesNV; + + //=== VK_KHR_shader_maximal_reconvergence === + struct PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + + //=== VK_EXT_image_compression_control_swapchain === + struct PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + + //=== VK_QCOM_image_processing === + struct ImageViewSampleWeightCreateInfoQCOM; + struct PhysicalDeviceImageProcessingFeaturesQCOM; + struct PhysicalDeviceImageProcessingPropertiesQCOM; + + //=== VK_EXT_nested_command_buffer === + struct PhysicalDeviceNestedCommandBufferFeaturesEXT; + struct PhysicalDeviceNestedCommandBufferPropertiesEXT; + + //=== VK_EXT_external_memory_acquire_unmodified === + struct ExternalMemoryAcquireUnmodifiedEXT; + + //=== VK_EXT_extended_dynamic_state3 === + struct PhysicalDeviceExtendedDynamicState3FeaturesEXT; + struct PhysicalDeviceExtendedDynamicState3PropertiesEXT; + struct ColorBlendEquationEXT; + struct ColorBlendAdvancedEXT; + + //=== VK_EXT_subpass_merge_feedback === + struct PhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + struct RenderPassCreationControlEXT; + struct RenderPassCreationFeedbackInfoEXT; + struct RenderPassCreationFeedbackCreateInfoEXT; + struct RenderPassSubpassFeedbackInfoEXT; + struct RenderPassSubpassFeedbackCreateInfoEXT; + + //=== VK_LUNARG_direct_driver_loading === + struct DirectDriverLoadingInfoLUNARG; + struct DirectDriverLoadingListLUNARG; + + //=== VK_ARM_tensors === + struct TensorDescriptionARM; + struct TensorCreateInfoARM; + struct TensorViewCreateInfoARM; + struct TensorMemoryRequirementsInfoARM; + struct BindTensorMemoryInfoARM; + struct WriteDescriptorSetTensorARM; + struct TensorFormatPropertiesARM; + struct PhysicalDeviceTensorPropertiesARM; + struct TensorMemoryBarrierARM; + struct TensorDependencyInfoARM; + struct PhysicalDeviceTensorFeaturesARM; + struct DeviceTensorMemoryRequirementsARM; + struct CopyTensorInfoARM; + struct TensorCopyARM; + struct MemoryDedicatedAllocateInfoTensorARM; + struct PhysicalDeviceExternalTensorInfoARM; + struct ExternalTensorPropertiesARM; + struct ExternalMemoryTensorCreateInfoARM; + struct PhysicalDeviceDescriptorBufferTensorFeaturesARM; + struct PhysicalDeviceDescriptorBufferTensorPropertiesARM; + struct DescriptorGetTensorInfoARM; + struct TensorCaptureDescriptorDataInfoARM; + struct TensorViewCaptureDescriptorDataInfoARM; + struct FrameBoundaryTensorsARM; + + //=== VK_EXT_shader_module_identifier === + struct PhysicalDeviceShaderModuleIdentifierFeaturesEXT; + struct PhysicalDeviceShaderModuleIdentifierPropertiesEXT; + struct PipelineShaderStageModuleIdentifierCreateInfoEXT; + struct ShaderModuleIdentifierEXT; + + //=== VK_EXT_rasterization_order_attachment_access === + struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + using PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + + //=== VK_NV_optical_flow === + struct PhysicalDeviceOpticalFlowFeaturesNV; + struct PhysicalDeviceOpticalFlowPropertiesNV; + struct OpticalFlowImageFormatInfoNV; + struct OpticalFlowImageFormatPropertiesNV; + struct OpticalFlowSessionCreateInfoNV; + struct OpticalFlowSessionCreatePrivateDataInfoNV; + struct OpticalFlowExecuteInfoNV; + + //=== VK_EXT_legacy_dithering === + struct PhysicalDeviceLegacyDitheringFeaturesEXT; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_format_resolve === + struct PhysicalDeviceExternalFormatResolveFeaturesANDROID; + struct PhysicalDeviceExternalFormatResolvePropertiesANDROID; + struct AndroidHardwareBufferFormatResolvePropertiesANDROID; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_AMD_anti_lag === + struct PhysicalDeviceAntiLagFeaturesAMD; + struct AntiLagDataAMD; + struct AntiLagPresentationInfoAMD; + + //=== VK_KHR_present_id2 === + struct SurfaceCapabilitiesPresentId2KHR; + struct PresentId2KHR; + struct PhysicalDevicePresentId2FeaturesKHR; + + //=== VK_KHR_present_wait2 === + struct SurfaceCapabilitiesPresentWait2KHR; + struct PhysicalDevicePresentWait2FeaturesKHR; + struct PresentWait2InfoKHR; + + //=== VK_KHR_ray_tracing_position_fetch === + struct PhysicalDeviceRayTracingPositionFetchFeaturesKHR; + + //=== VK_EXT_shader_object === + struct PhysicalDeviceShaderObjectFeaturesEXT; + struct PhysicalDeviceShaderObjectPropertiesEXT; + struct ShaderCreateInfoEXT; + + //=== VK_KHR_pipeline_binary === + struct PhysicalDevicePipelineBinaryFeaturesKHR; + struct PhysicalDevicePipelineBinaryPropertiesKHR; + struct DevicePipelineBinaryInternalCacheControlKHR; + struct PipelineBinaryKeyKHR; + struct PipelineBinaryDataKHR; + struct PipelineBinaryKeysAndDataKHR; + struct PipelineBinaryCreateInfoKHR; + struct PipelineBinaryInfoKHR; + struct ReleaseCapturedPipelineDataInfoKHR; + struct PipelineBinaryDataInfoKHR; + struct PipelineCreateInfoKHR; + struct PipelineBinaryHandlesInfoKHR; + + //=== VK_QCOM_tile_properties === + struct PhysicalDeviceTilePropertiesFeaturesQCOM; + struct TilePropertiesQCOM; + + //=== VK_SEC_amigo_profiling === + struct PhysicalDeviceAmigoProfilingFeaturesSEC; + struct AmigoProfilingSubmitInfoSEC; + + //=== VK_KHR_surface_maintenance1 === + struct SurfacePresentModeKHR; + using SurfacePresentModeEXT = SurfacePresentModeKHR; + struct SurfacePresentScalingCapabilitiesKHR; + using SurfacePresentScalingCapabilitiesEXT = SurfacePresentScalingCapabilitiesKHR; + struct SurfacePresentModeCompatibilityKHR; + using SurfacePresentModeCompatibilityEXT = SurfacePresentModeCompatibilityKHR; + + //=== VK_KHR_swapchain_maintenance1 === + struct PhysicalDeviceSwapchainMaintenance1FeaturesKHR; + using PhysicalDeviceSwapchainMaintenance1FeaturesEXT = PhysicalDeviceSwapchainMaintenance1FeaturesKHR; + struct SwapchainPresentFenceInfoKHR; + using SwapchainPresentFenceInfoEXT = SwapchainPresentFenceInfoKHR; + struct SwapchainPresentModesCreateInfoKHR; + using SwapchainPresentModesCreateInfoEXT = SwapchainPresentModesCreateInfoKHR; + struct SwapchainPresentModeInfoKHR; + using SwapchainPresentModeInfoEXT = SwapchainPresentModeInfoKHR; + struct SwapchainPresentScalingCreateInfoKHR; + using SwapchainPresentScalingCreateInfoEXT = SwapchainPresentScalingCreateInfoKHR; + struct ReleaseSwapchainImagesInfoKHR; + using ReleaseSwapchainImagesInfoEXT = ReleaseSwapchainImagesInfoKHR; + + //=== VK_QCOM_multiview_per_view_viewports === + struct PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + + //=== VK_NV_ray_tracing_invocation_reorder === + struct PhysicalDeviceRayTracingInvocationReorderPropertiesNV; + struct PhysicalDeviceRayTracingInvocationReorderFeaturesNV; + + //=== VK_NV_cooperative_vector === + struct PhysicalDeviceCooperativeVectorPropertiesNV; + struct PhysicalDeviceCooperativeVectorFeaturesNV; + struct CooperativeVectorPropertiesNV; + struct ConvertCooperativeVectorMatrixInfoNV; + + //=== VK_NV_extended_sparse_address_space === + struct PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + struct PhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + + //=== VK_EXT_mutable_descriptor_type === + struct PhysicalDeviceMutableDescriptorTypeFeaturesEXT; + using PhysicalDeviceMutableDescriptorTypeFeaturesVALVE = PhysicalDeviceMutableDescriptorTypeFeaturesEXT; + struct MutableDescriptorTypeListEXT; + using MutableDescriptorTypeListVALVE = MutableDescriptorTypeListEXT; + struct MutableDescriptorTypeCreateInfoEXT; + using MutableDescriptorTypeCreateInfoVALVE = MutableDescriptorTypeCreateInfoEXT; + + //=== VK_EXT_legacy_vertex_attributes === + struct PhysicalDeviceLegacyVertexAttributesFeaturesEXT; + struct PhysicalDeviceLegacyVertexAttributesPropertiesEXT; + + //=== VK_EXT_layer_settings === + struct LayerSettingsCreateInfoEXT; + struct LayerSettingEXT; + + //=== VK_ARM_shader_core_builtins === + struct PhysicalDeviceShaderCoreBuiltinsFeaturesARM; + struct PhysicalDeviceShaderCoreBuiltinsPropertiesARM; + + //=== VK_EXT_pipeline_library_group_handles === + struct PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + + //=== VK_EXT_dynamic_rendering_unused_attachments === + struct PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + + //=== VK_NV_low_latency2 === + struct LatencySleepModeInfoNV; + struct LatencySleepInfoNV; + struct SetLatencyMarkerInfoNV; + struct GetLatencyMarkerInfoNV; + struct LatencyTimingsFrameReportNV; + struct LatencySubmissionPresentIdNV; + struct SwapchainLatencyCreateInfoNV; + struct OutOfBandQueueTypeInfoNV; + struct LatencySurfaceCapabilitiesNV; + + //=== VK_KHR_cooperative_matrix === + struct CooperativeMatrixPropertiesKHR; + struct PhysicalDeviceCooperativeMatrixFeaturesKHR; + struct PhysicalDeviceCooperativeMatrixPropertiesKHR; + + //=== VK_ARM_data_graph === + struct PhysicalDeviceDataGraphFeaturesARM; + struct DataGraphPipelineConstantARM; + struct DataGraphPipelineResourceInfoARM; + struct DataGraphPipelineCompilerControlCreateInfoARM; + struct DataGraphPipelineCreateInfoARM; + struct DataGraphPipelineShaderModuleCreateInfoARM; + struct DataGraphPipelineSessionCreateInfoARM; + struct DataGraphPipelineSessionBindPointRequirementsInfoARM; + struct DataGraphPipelineSessionBindPointRequirementARM; + struct DataGraphPipelineSessionMemoryRequirementsInfoARM; + struct BindDataGraphPipelineSessionMemoryInfoARM; + struct DataGraphPipelineInfoARM; + struct DataGraphPipelinePropertyQueryResultARM; + struct DataGraphPipelineIdentifierCreateInfoARM; + struct DataGraphPipelineDispatchInfoARM; + struct PhysicalDeviceDataGraphProcessingEngineARM; + struct QueueFamilyDataGraphPropertiesARM; + struct DataGraphProcessingEngineCreateInfoARM; + struct PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + struct QueueFamilyDataGraphProcessingEnginePropertiesARM; + struct PhysicalDeviceDataGraphOperationSupportARM; + struct DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + + //=== VK_QCOM_multiview_per_view_render_areas === + struct PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + struct MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + + //=== VK_KHR_compute_shader_derivatives === + struct PhysicalDeviceComputeShaderDerivativesFeaturesKHR; + using PhysicalDeviceComputeShaderDerivativesFeaturesNV = PhysicalDeviceComputeShaderDerivativesFeaturesKHR; + struct PhysicalDeviceComputeShaderDerivativesPropertiesKHR; + + //=== VK_KHR_video_decode_av1 === + struct VideoDecodeAV1ProfileInfoKHR; + struct VideoDecodeAV1CapabilitiesKHR; + struct VideoDecodeAV1SessionParametersCreateInfoKHR; + struct VideoDecodeAV1PictureInfoKHR; + struct VideoDecodeAV1DpbSlotInfoKHR; + + //=== VK_KHR_video_encode_av1 === + struct PhysicalDeviceVideoEncodeAV1FeaturesKHR; + struct VideoEncodeAV1CapabilitiesKHR; + struct VideoEncodeAV1QualityLevelPropertiesKHR; + struct VideoEncodeAV1SessionCreateInfoKHR; + struct VideoEncodeAV1SessionParametersCreateInfoKHR; + struct VideoEncodeAV1PictureInfoKHR; + struct VideoEncodeAV1DpbSlotInfoKHR; + struct VideoEncodeAV1ProfileInfoKHR; + struct VideoEncodeAV1QIndexKHR; + struct VideoEncodeAV1FrameSizeKHR; + struct VideoEncodeAV1GopRemainingFrameInfoKHR; + struct VideoEncodeAV1RateControlInfoKHR; + struct VideoEncodeAV1RateControlLayerInfoKHR; + + //=== VK_KHR_video_decode_vp9 === + struct PhysicalDeviceVideoDecodeVP9FeaturesKHR; + struct VideoDecodeVP9ProfileInfoKHR; + struct VideoDecodeVP9CapabilitiesKHR; + struct VideoDecodeVP9PictureInfoKHR; + + //=== VK_KHR_video_maintenance1 === + struct PhysicalDeviceVideoMaintenance1FeaturesKHR; + struct VideoInlineQueryInfoKHR; + + //=== VK_NV_per_stage_descriptor_set === + struct PhysicalDevicePerStageDescriptorSetFeaturesNV; + + //=== VK_QCOM_image_processing2 === + struct PhysicalDeviceImageProcessing2FeaturesQCOM; + struct PhysicalDeviceImageProcessing2PropertiesQCOM; + struct SamplerBlockMatchWindowCreateInfoQCOM; + + //=== VK_QCOM_filter_cubic_weights === + struct PhysicalDeviceCubicWeightsFeaturesQCOM; + struct SamplerCubicWeightsCreateInfoQCOM; + struct BlitImageCubicWeightsInfoQCOM; + + //=== VK_QCOM_ycbcr_degamma === + struct PhysicalDeviceYcbcrDegammaFeaturesQCOM; + struct SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + + //=== VK_QCOM_filter_cubic_clamp === + struct PhysicalDeviceCubicClampFeaturesQCOM; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + struct PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + + //=== VK_KHR_unified_image_layouts === + struct PhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + struct AttachmentFeedbackLoopInfoEXT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + struct ScreenBufferPropertiesQNX; + struct ScreenBufferFormatPropertiesQNX; + struct ImportScreenBufferInfoQNX; + struct ExternalFormatQNX; + struct PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_MSFT_layered_driver === + struct PhysicalDeviceLayeredDriverPropertiesMSFT; + + //=== VK_KHR_calibrated_timestamps === + struct CalibratedTimestampInfoKHR; + using CalibratedTimestampInfoEXT = CalibratedTimestampInfoKHR; + + //=== VK_KHR_maintenance6 === + struct SetDescriptorBufferOffsetsInfoEXT; + struct BindDescriptorBufferEmbeddedSamplersInfoEXT; + + //=== VK_NV_descriptor_pool_overallocation === + struct PhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + + //=== VK_QCOM_tile_memory_heap === + struct PhysicalDeviceTileMemoryHeapFeaturesQCOM; + struct PhysicalDeviceTileMemoryHeapPropertiesQCOM; + struct TileMemoryRequirementsQCOM; + struct TileMemoryBindInfoQCOM; + struct TileMemorySizeInfoQCOM; + + //=== VK_NV_display_stereo === + struct DisplaySurfaceStereoCreateInfoNV; + struct DisplayModeStereoPropertiesNV; + + //=== VK_KHR_video_encode_intra_refresh === + struct VideoEncodeIntraRefreshCapabilitiesKHR; + struct VideoEncodeSessionIntraRefreshCreateInfoKHR; + struct VideoEncodeIntraRefreshInfoKHR; + struct VideoReferenceIntraRefreshInfoKHR; + struct PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + + //=== VK_KHR_video_encode_quantization_map === + struct VideoEncodeQuantizationMapCapabilitiesKHR; + struct VideoFormatQuantizationMapPropertiesKHR; + struct VideoEncodeQuantizationMapInfoKHR; + struct VideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + struct PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + struct VideoEncodeH264QuantizationMapCapabilitiesKHR; + struct VideoEncodeH265QuantizationMapCapabilitiesKHR; + struct VideoFormatH265QuantizationMapPropertiesKHR; + struct VideoEncodeAV1QuantizationMapCapabilitiesKHR; + struct VideoFormatAV1QuantizationMapPropertiesKHR; + + //=== VK_NV_raw_access_chains === + struct PhysicalDeviceRawAccessChainsFeaturesNV; + + //=== VK_NV_external_compute_queue === + struct ExternalComputeQueueDeviceCreateInfoNV; + struct ExternalComputeQueueCreateInfoNV; + struct ExternalComputeQueueDataParamsNV; + struct PhysicalDeviceExternalComputeQueuePropertiesNV; + + //=== VK_KHR_shader_relaxed_extended_instruction === + struct PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + + //=== VK_NV_command_buffer_inheritance === + struct PhysicalDeviceCommandBufferInheritanceFeaturesNV; + + //=== VK_KHR_maintenance7 === + struct PhysicalDeviceMaintenance7FeaturesKHR; + struct PhysicalDeviceMaintenance7PropertiesKHR; + struct PhysicalDeviceLayeredApiPropertiesListKHR; + struct PhysicalDeviceLayeredApiPropertiesKHR; + struct PhysicalDeviceLayeredApiVulkanPropertiesKHR; + + //=== VK_NV_shader_atomic_float16_vector === + struct PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + + //=== VK_EXT_shader_replicated_composites === + struct PhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + + //=== VK_EXT_shader_float8 === + struct PhysicalDeviceShaderFloat8FeaturesEXT; + + //=== VK_NV_ray_tracing_validation === + struct PhysicalDeviceRayTracingValidationFeaturesNV; + + //=== VK_NV_cluster_acceleration_structure === + struct PhysicalDeviceClusterAccelerationStructureFeaturesNV; + struct PhysicalDeviceClusterAccelerationStructurePropertiesNV; + struct ClusterAccelerationStructureClustersBottomLevelInputNV; + struct ClusterAccelerationStructureTriangleClusterInputNV; + struct ClusterAccelerationStructureMoveObjectsInputNV; + union ClusterAccelerationStructureOpInputNV; + struct ClusterAccelerationStructureInputInfoNV; + struct ClusterAccelerationStructureCommandsInfoNV; + struct StridedDeviceAddressNV; + struct ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + struct ClusterAccelerationStructureMoveObjectsInfoNV; + struct ClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + struct ClusterAccelerationStructureBuildTriangleClusterInfoNV; + struct ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + struct ClusterAccelerationStructureInstantiateClusterInfoNV; + struct ClusterAccelerationStructureGetTemplateIndicesInfoNV; + struct RayTracingPipelineClusterAccelerationStructureCreateInfoNV; + + //=== VK_NV_partitioned_acceleration_structure === + struct PhysicalDevicePartitionedAccelerationStructureFeaturesNV; + struct PhysicalDevicePartitionedAccelerationStructurePropertiesNV; + struct PartitionedAccelerationStructureFlagsNV; + struct BuildPartitionedAccelerationStructureIndirectCommandNV; + struct PartitionedAccelerationStructureWriteInstanceDataNV; + struct PartitionedAccelerationStructureUpdateInstanceDataNV; + struct PartitionedAccelerationStructureWritePartitionTranslationDataNV; + struct WriteDescriptorSetPartitionedAccelerationStructureNV; + struct PartitionedAccelerationStructureInstancesInputNV; + struct BuildPartitionedAccelerationStructureInfoNV; + + //=== VK_EXT_device_generated_commands === + struct PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + struct PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + struct GeneratedCommandsMemoryRequirementsInfoEXT; + struct IndirectExecutionSetCreateInfoEXT; + union IndirectExecutionSetInfoEXT; + struct IndirectExecutionSetPipelineInfoEXT; + struct IndirectExecutionSetShaderInfoEXT; + struct GeneratedCommandsInfoEXT; + struct WriteIndirectExecutionSetPipelineEXT; + struct IndirectCommandsLayoutCreateInfoEXT; + struct IndirectCommandsLayoutTokenEXT; + struct DrawIndirectCountIndirectCommandEXT; + struct IndirectCommandsVertexBufferTokenEXT; + struct BindVertexBufferIndirectCommandEXT; + struct IndirectCommandsIndexBufferTokenEXT; + struct BindIndexBufferIndirectCommandEXT; + struct IndirectCommandsPushConstantTokenEXT; + struct IndirectCommandsExecutionSetTokenEXT; + union IndirectCommandsTokenDataEXT; + struct IndirectExecutionSetShaderLayoutInfoEXT; + struct GeneratedCommandsPipelineInfoEXT; + struct GeneratedCommandsShaderInfoEXT; + struct WriteIndirectExecutionSetShaderEXT; + + //=== VK_KHR_maintenance8 === + struct PhysicalDeviceMaintenance8FeaturesKHR; + struct MemoryBarrierAccessFlags3KHR; + + //=== VK_MESA_image_alignment_control === + struct PhysicalDeviceImageAlignmentControlFeaturesMESA; + struct PhysicalDeviceImageAlignmentControlPropertiesMESA; + struct ImageAlignmentControlCreateInfoMESA; + + //=== VK_EXT_depth_clamp_control === + struct PhysicalDeviceDepthClampControlFeaturesEXT; + struct PipelineViewportDepthClampControlCreateInfoEXT; + struct DepthClampRangeEXT; + + //=== VK_KHR_maintenance9 === + struct PhysicalDeviceMaintenance9FeaturesKHR; + struct PhysicalDeviceMaintenance9PropertiesKHR; + struct QueueFamilyOwnershipTransferPropertiesKHR; + + //=== VK_KHR_video_maintenance2 === + struct PhysicalDeviceVideoMaintenance2FeaturesKHR; + struct VideoDecodeH264InlineSessionParametersInfoKHR; + struct VideoDecodeH265InlineSessionParametersInfoKHR; + struct VideoDecodeAV1InlineSessionParametersInfoKHR; + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + struct OHSurfaceCreateInfoOHOS; + using SurfaceCreateInfoOHOS = OHSurfaceCreateInfoOHOS; +#endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_HUAWEI_hdr_vivid === + struct PhysicalDeviceHdrVividFeaturesHUAWEI; + struct HdrVividDynamicMetadataHUAWEI; + + //=== VK_NV_cooperative_matrix2 === + struct CooperativeMatrixFlexibleDimensionsPropertiesNV; + struct PhysicalDeviceCooperativeMatrix2FeaturesNV; + struct PhysicalDeviceCooperativeMatrix2PropertiesNV; + + //=== VK_ARM_pipeline_opacity_micromap === + struct PhysicalDevicePipelineOpacityMicromapFeaturesARM; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + struct ImportMemoryMetalHandleInfoEXT; + struct MemoryMetalHandlePropertiesEXT; + struct MemoryGetMetalHandleInfoEXT; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_depth_clamp_zero_one === + struct PhysicalDeviceDepthClampZeroOneFeaturesKHR; + using PhysicalDeviceDepthClampZeroOneFeaturesEXT = PhysicalDeviceDepthClampZeroOneFeaturesKHR; + + //=== VK_EXT_vertex_attribute_robustness === + struct PhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + + //=== VK_ARM_format_pack === + struct PhysicalDeviceFormatPackFeaturesARM; + + //=== VK_VALVE_fragment_density_map_layered === + struct PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + struct PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + struct PipelineFragmentDensityMapLayeredCreateInfoVALVE; + + //=== VK_KHR_robustness2 === + struct PhysicalDeviceRobustness2FeaturesKHR; + using PhysicalDeviceRobustness2FeaturesEXT = PhysicalDeviceRobustness2FeaturesKHR; + struct PhysicalDeviceRobustness2PropertiesKHR; + using PhysicalDeviceRobustness2PropertiesEXT = PhysicalDeviceRobustness2PropertiesKHR; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_present_metering === + struct SetPresentConfigNV; + struct PhysicalDevicePresentMeteringFeaturesNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_fragment_density_map_offset === + struct RenderingEndInfoEXT; + struct PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + using PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM = PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + struct PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + using PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM = PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + struct RenderPassFragmentDensityMapOffsetEndInfoEXT; + using SubpassFragmentDensityMapOffsetEndInfoQCOM = RenderPassFragmentDensityMapOffsetEndInfoEXT; + + //=== VK_EXT_zero_initialize_device_memory === + struct PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + + //=== VK_KHR_present_mode_fifo_latest_ready === + struct PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + using PhysicalDevicePresentModeFifoLatestReadyFeaturesEXT = PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + + //=== VK_SEC_pipeline_cache_incremental_mode === + struct PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + + //=================================== + //=== HANDLE forward declarations === + //=================================== + + //=== VK_VERSION_1_0 === + class Instance; + class PhysicalDevice; + class Device; + class Queue; + class DeviceMemory; + class Fence; + class Semaphore; + class Event; + class QueryPool; + class Buffer; + class BufferView; + class Image; + class ImageView; + class ShaderModule; + class PipelineCache; + class Pipeline; + class PipelineLayout; + class Sampler; + class DescriptorPool; + class DescriptorSet; + class DescriptorSetLayout; + class Framebuffer; + class RenderPass; + class CommandPool; + class CommandBuffer; + + //=== VK_VERSION_1_1 === + class SamplerYcbcrConversion; + class DescriptorUpdateTemplate; + + //=== VK_VERSION_1_3 === + class PrivateDataSlot; + + //=== VK_KHR_surface === + class SurfaceKHR; + + //=== VK_KHR_swapchain === + class SwapchainKHR; + + //=== VK_KHR_display === + class DisplayKHR; + class DisplayModeKHR; + + //=== VK_EXT_debug_report === + class DebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + class VideoSessionKHR; + class VideoSessionParametersKHR; + + //=== VK_NVX_binary_import === + class CuModuleNVX; + class CuFunctionNVX; + + //=== VK_EXT_debug_utils === + class DebugUtilsMessengerEXT; + + //=== VK_KHR_acceleration_structure === + class AccelerationStructureKHR; + + //=== VK_EXT_validation_cache === + class ValidationCacheEXT; + + //=== VK_NV_ray_tracing === + class AccelerationStructureNV; + + //=== VK_INTEL_performance_query === + class PerformanceConfigurationINTEL; + + //=== VK_KHR_deferred_host_operations === + class DeferredOperationKHR; + + //=== VK_NV_device_generated_commands === + class IndirectCommandsLayoutNV; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + class CudaModuleNV; + class CudaFunctionNV; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + class BufferCollectionFUCHSIA; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + class MicromapEXT; + + //=== VK_ARM_tensors === + class TensorARM; + class TensorViewARM; + + //=== VK_NV_optical_flow === + class OpticalFlowSessionNV; + + //=== VK_EXT_shader_object === + class ShaderEXT; + + //=== VK_KHR_pipeline_binary === + class PipelineBinaryKHR; + + //=== VK_ARM_data_graph === + class DataGraphPipelineSessionARM; + + //=== VK_NV_external_compute_queue === + class ExternalComputeQueueNV; + + //=== VK_EXT_device_generated_commands === + class IndirectCommandsLayoutEXT; + class IndirectExecutionSetEXT; + + typedef void( VKAPI_PTR * PFN_VoidFunction )(); + +#ifndef VULKAN_HPP_NO_SMART_HANDLE + //====================== + //=== UNIQUE HANDLEs === + //====================== + + //=== VK_VERSION_1_0 === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueInstance = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDevice = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectFree; + }; + + using UniqueDeviceMemory = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueFence = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueSemaphore = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueEvent = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueQueryPool = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueBuffer = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueBufferView = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueImage = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueImageView = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueShaderModule = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniquePipelineCache = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniquePipeline = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniquePipelineLayout = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueSampler = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDescriptorPool = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::PoolFree; + }; + + using UniqueDescriptorSet = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDescriptorSetLayout = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueFramebuffer = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueRenderPass = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueCommandPool = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::PoolFree; + }; + + using UniqueCommandBuffer = UniqueHandle; + + //=== VK_VERSION_1_1 === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueSamplerYcbcrConversion = UniqueHandle; + using UniqueSamplerYcbcrConversionKHR = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDescriptorUpdateTemplate = UniqueHandle; + using UniqueDescriptorUpdateTemplateKHR = UniqueHandle; + + //=== VK_VERSION_1_3 === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniquePrivateDataSlot = UniqueHandle; + using UniquePrivateDataSlotEXT = UniqueHandle; + + //=== VK_KHR_surface === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueSurfaceKHR = UniqueHandle; + + //=== VK_KHR_swapchain === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueSwapchainKHR = UniqueHandle; + + //=== VK_KHR_display === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDisplayKHR = UniqueHandle; + + //=== VK_EXT_debug_report === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDebugReportCallbackEXT = UniqueHandle; + + //=== VK_KHR_video_queue === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueVideoSessionKHR = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueVideoSessionParametersKHR = UniqueHandle; + + //=== VK_NVX_binary_import === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueCuModuleNVX = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueCuFunctionNVX = UniqueHandle; + + //=== VK_EXT_debug_utils === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDebugUtilsMessengerEXT = UniqueHandle; + + //=== VK_KHR_acceleration_structure === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueAccelerationStructureKHR = UniqueHandle; + + //=== VK_EXT_validation_cache === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueValidationCacheEXT = UniqueHandle; + + //=== VK_NV_ray_tracing === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueAccelerationStructureNV = UniqueHandle; + + //=== VK_INTEL_performance_query === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniquePerformanceConfigurationINTEL = UniqueHandle; + + //=== VK_KHR_deferred_host_operations === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDeferredOperationKHR = UniqueHandle; + + //=== VK_NV_device_generated_commands === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueIndirectCommandsLayoutNV = UniqueHandle; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueCudaModuleNV = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueCudaFunctionNV = UniqueHandle; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueBufferCollectionFUCHSIA = UniqueHandle; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueMicromapEXT = UniqueHandle; + + //=== VK_ARM_tensors === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueTensorARM = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueTensorViewARM = UniqueHandle; + + //=== VK_NV_optical_flow === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueOpticalFlowSessionNV = UniqueHandle; + + //=== VK_EXT_shader_object === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueShaderEXT = UniqueHandle; + + //=== VK_KHR_pipeline_binary === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniquePipelineBinaryKHR = UniqueHandle; + + //=== VK_ARM_data_graph === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueDataGraphPipelineSessionARM = UniqueHandle; + + //=== VK_NV_external_compute_queue === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueExternalComputeQueueNV = UniqueHandle; + + //=== VK_EXT_device_generated_commands === + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueIndirectCommandsLayoutEXT = UniqueHandle; + + template + class UniqueHandleTraits + { + public: + using deleter = detail::ObjectDestroy; + }; + + using UniqueIndirectExecutionSetEXT = UniqueHandle; +#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ + + //=============== + //=== HANDLEs === + //=============== + + template + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = false; + }; + + // wrapper class for handle VkSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceKHR.html + class SurfaceKHR + { + public: + using CType = VkSurfaceKHR; + using NativeType = VkSurfaceKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eSurfaceKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eSurfaceKHR; + + public: + SurfaceKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + SurfaceKHR( SurfaceKHR const & rhs ) = default; + SurfaceKHR & operator=( SurfaceKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + SurfaceKHR( SurfaceKHR && rhs ) = default; + SurfaceKHR & operator=( SurfaceKHR && rhs ) = default; +#else + SurfaceKHR( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_surfaceKHR( exchange( rhs.m_surfaceKHR, {} ) ) {} + + SurfaceKHR & operator=( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_surfaceKHR = exchange( rhs.m_surfaceKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR SurfaceKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT SurfaceKHR( VkSurfaceKHR surfaceKHR ) VULKAN_HPP_NOEXCEPT : m_surfaceKHR( surfaceKHR ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + SurfaceKHR & operator=( VkSurfaceKHR surfaceKHR ) VULKAN_HPP_NOEXCEPT + { + m_surfaceKHR = surfaceKHR; + return *this; + } +#endif + + SurfaceKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_surfaceKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSurfaceKHR() const VULKAN_HPP_NOEXCEPT + { + return m_surfaceKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_surfaceKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_surfaceKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceKHR const & ) const = default; +#endif + + private: + VkSurfaceKHR m_surfaceKHR = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceKHR; + }; + + template <> + struct CppType + { + using Type = SurfaceKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = SurfaceKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDebugReportCallbackEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugReportCallbackEXT.html + class DebugReportCallbackEXT + { + public: + using CType = VkDebugReportCallbackEXT; + using NativeType = VkDebugReportCallbackEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDebugReportCallbackEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDebugReportCallbackEXT; + + public: + DebugReportCallbackEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DebugReportCallbackEXT( DebugReportCallbackEXT const & rhs ) = default; + DebugReportCallbackEXT & operator=( DebugReportCallbackEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DebugReportCallbackEXT( DebugReportCallbackEXT && rhs ) = default; + DebugReportCallbackEXT & operator=( DebugReportCallbackEXT && rhs ) = default; +#else + DebugReportCallbackEXT( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT : m_debugReportCallbackEXT( exchange( rhs.m_debugReportCallbackEXT, {} ) ) {} + + DebugReportCallbackEXT & operator=( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_debugReportCallbackEXT = exchange( rhs.m_debugReportCallbackEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DebugReportCallbackEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DebugReportCallbackEXT( VkDebugReportCallbackEXT debugReportCallbackEXT ) VULKAN_HPP_NOEXCEPT + : m_debugReportCallbackEXT( debugReportCallbackEXT ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DebugReportCallbackEXT & operator=( VkDebugReportCallbackEXT debugReportCallbackEXT ) VULKAN_HPP_NOEXCEPT + { + m_debugReportCallbackEXT = debugReportCallbackEXT; + return *this; + } +#endif + + DebugReportCallbackEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_debugReportCallbackEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDebugReportCallbackEXT() const VULKAN_HPP_NOEXCEPT + { + return m_debugReportCallbackEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_debugReportCallbackEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_debugReportCallbackEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DebugReportCallbackEXT const & ) const = default; +#endif + + private: + VkDebugReportCallbackEXT m_debugReportCallbackEXT = {}; + }; + + template <> + struct CppType + { + using Type = DebugReportCallbackEXT; + }; + + template <> + struct CppType + { + using Type = DebugReportCallbackEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DebugReportCallbackEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDebugUtilsMessengerEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessengerEXT.html + class DebugUtilsMessengerEXT + { + public: + using CType = VkDebugUtilsMessengerEXT; + using NativeType = VkDebugUtilsMessengerEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDebugUtilsMessengerEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + DebugUtilsMessengerEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DebugUtilsMessengerEXT( DebugUtilsMessengerEXT const & rhs ) = default; + DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DebugUtilsMessengerEXT( DebugUtilsMessengerEXT && rhs ) = default; + DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT && rhs ) = default; +#else + DebugUtilsMessengerEXT( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT : m_debugUtilsMessengerEXT( exchange( rhs.m_debugUtilsMessengerEXT, {} ) ) {} + + DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_debugUtilsMessengerEXT = exchange( rhs.m_debugUtilsMessengerEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DebugUtilsMessengerEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DebugUtilsMessengerEXT( VkDebugUtilsMessengerEXT debugUtilsMessengerEXT ) VULKAN_HPP_NOEXCEPT + : m_debugUtilsMessengerEXT( debugUtilsMessengerEXT ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DebugUtilsMessengerEXT & operator=( VkDebugUtilsMessengerEXT debugUtilsMessengerEXT ) VULKAN_HPP_NOEXCEPT + { + m_debugUtilsMessengerEXT = debugUtilsMessengerEXT; + return *this; + } +#endif + + DebugUtilsMessengerEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_debugUtilsMessengerEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDebugUtilsMessengerEXT() const VULKAN_HPP_NOEXCEPT + { + return m_debugUtilsMessengerEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_debugUtilsMessengerEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_debugUtilsMessengerEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DebugUtilsMessengerEXT const & ) const = default; +#endif + + private: + VkDebugUtilsMessengerEXT m_debugUtilsMessengerEXT = {}; + }; + + template <> + struct CppType + { + using Type = DebugUtilsMessengerEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DebugUtilsMessengerEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDisplayKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayKHR.html + class DisplayKHR + { + public: + using CType = VkDisplayKHR; + using NativeType = VkDisplayKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDisplayKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDisplayKHR; + + public: + DisplayKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DisplayKHR( DisplayKHR const & rhs ) = default; + DisplayKHR & operator=( DisplayKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DisplayKHR( DisplayKHR && rhs ) = default; + DisplayKHR & operator=( DisplayKHR && rhs ) = default; +#else + DisplayKHR( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_displayKHR( exchange( rhs.m_displayKHR, {} ) ) {} + + DisplayKHR & operator=( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_displayKHR = exchange( rhs.m_displayKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DisplayKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DisplayKHR( VkDisplayKHR displayKHR ) VULKAN_HPP_NOEXCEPT : m_displayKHR( displayKHR ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DisplayKHR & operator=( VkDisplayKHR displayKHR ) VULKAN_HPP_NOEXCEPT + { + m_displayKHR = displayKHR; + return *this; + } +#endif + + DisplayKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_displayKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDisplayKHR() const VULKAN_HPP_NOEXCEPT + { + return m_displayKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_displayKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_displayKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayKHR const & ) const = default; +#endif + + private: + VkDisplayKHR m_displayKHR = {}; + }; + + template <> + struct CppType + { + using Type = DisplayKHR; + }; + + template <> + struct CppType + { + using Type = DisplayKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DisplayKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainKHR.html + class SwapchainKHR + { + public: + using CType = VkSwapchainKHR; + using NativeType = VkSwapchainKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eSwapchainKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eSwapchainKHR; + + public: + SwapchainKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + SwapchainKHR( SwapchainKHR const & rhs ) = default; + SwapchainKHR & operator=( SwapchainKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + SwapchainKHR( SwapchainKHR && rhs ) = default; + SwapchainKHR & operator=( SwapchainKHR && rhs ) = default; +#else + SwapchainKHR( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_swapchainKHR( exchange( rhs.m_swapchainKHR, {} ) ) {} + + SwapchainKHR & operator=( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_swapchainKHR = exchange( rhs.m_swapchainKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR SwapchainKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT SwapchainKHR( VkSwapchainKHR swapchainKHR ) VULKAN_HPP_NOEXCEPT : m_swapchainKHR( swapchainKHR ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + SwapchainKHR & operator=( VkSwapchainKHR swapchainKHR ) VULKAN_HPP_NOEXCEPT + { + m_swapchainKHR = swapchainKHR; + return *this; + } +#endif + + SwapchainKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_swapchainKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSwapchainKHR() const VULKAN_HPP_NOEXCEPT + { + return m_swapchainKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_swapchainKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_swapchainKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainKHR const & ) const = default; +#endif + + private: + VkSwapchainKHR m_swapchainKHR = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainKHR; + }; + + template <> + struct CppType + { + using Type = SwapchainKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = SwapchainKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphore.html + class Semaphore + { + public: + using CType = VkSemaphore; + using NativeType = VkSemaphore; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eSemaphore; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eSemaphore; + + public: + Semaphore() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Semaphore( Semaphore const & rhs ) = default; + Semaphore & operator=( Semaphore const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Semaphore( Semaphore && rhs ) = default; + Semaphore & operator=( Semaphore && rhs ) = default; +#else + Semaphore( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT : m_semaphore( exchange( rhs.m_semaphore, {} ) ) {} + + Semaphore & operator=( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT + { + m_semaphore = exchange( rhs.m_semaphore, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Semaphore( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Semaphore( VkSemaphore semaphore ) VULKAN_HPP_NOEXCEPT : m_semaphore( semaphore ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Semaphore & operator=( VkSemaphore semaphore ) VULKAN_HPP_NOEXCEPT + { + m_semaphore = semaphore; + return *this; + } +#endif + + Semaphore & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_semaphore = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSemaphore() const VULKAN_HPP_NOEXCEPT + { + return m_semaphore; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_semaphore != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_semaphore == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Semaphore const & ) const = default; +#endif + + private: + VkSemaphore m_semaphore = {}; + }; + + template <> + struct CppType + { + using Type = Semaphore; + }; + + template <> + struct CppType + { + using Type = Semaphore; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Semaphore; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFence.html + class Fence + { + public: + using CType = VkFence; + using NativeType = VkFence; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eFence; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eFence; + + public: + Fence() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Fence( Fence const & rhs ) = default; + Fence & operator=( Fence const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Fence( Fence && rhs ) = default; + Fence & operator=( Fence && rhs ) = default; +#else + Fence( Fence && rhs ) VULKAN_HPP_NOEXCEPT : m_fence( exchange( rhs.m_fence, {} ) ) {} + + Fence & operator=( Fence && rhs ) VULKAN_HPP_NOEXCEPT + { + m_fence = exchange( rhs.m_fence, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Fence( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Fence( VkFence fence ) VULKAN_HPP_NOEXCEPT : m_fence( fence ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Fence & operator=( VkFence fence ) VULKAN_HPP_NOEXCEPT + { + m_fence = fence; + return *this; + } +#endif + + Fence & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_fence = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkFence() const VULKAN_HPP_NOEXCEPT + { + return m_fence; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_fence != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_fence == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Fence const & ) const = default; +#endif + + private: + VkFence m_fence = {}; + }; + + template <> + struct CppType + { + using Type = Fence; + }; + + template <> + struct CppType + { + using Type = Fence; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Fence; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceConfigurationINTEL.html + class PerformanceConfigurationINTEL + { + public: + using CType = VkPerformanceConfigurationINTEL; + using NativeType = VkPerformanceConfigurationINTEL; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePerformanceConfigurationINTEL; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + PerformanceConfigurationINTEL() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + PerformanceConfigurationINTEL( PerformanceConfigurationINTEL const & rhs ) = default; + PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + PerformanceConfigurationINTEL( PerformanceConfigurationINTEL && rhs ) = default; + PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL && rhs ) = default; +#else + PerformanceConfigurationINTEL( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT + : m_performanceConfigurationINTEL( exchange( rhs.m_performanceConfigurationINTEL, {} ) ) + { + } + + PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT + { + m_performanceConfigurationINTEL = exchange( rhs.m_performanceConfigurationINTEL, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR PerformanceConfigurationINTEL( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT PerformanceConfigurationINTEL( VkPerformanceConfigurationINTEL performanceConfigurationINTEL ) VULKAN_HPP_NOEXCEPT + : m_performanceConfigurationINTEL( performanceConfigurationINTEL ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + PerformanceConfigurationINTEL & operator=( VkPerformanceConfigurationINTEL performanceConfigurationINTEL ) VULKAN_HPP_NOEXCEPT + { + m_performanceConfigurationINTEL = performanceConfigurationINTEL; + return *this; + } +#endif + + PerformanceConfigurationINTEL & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_performanceConfigurationINTEL = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPerformanceConfigurationINTEL() const VULKAN_HPP_NOEXCEPT + { + return m_performanceConfigurationINTEL; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_performanceConfigurationINTEL != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_performanceConfigurationINTEL == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceConfigurationINTEL const & ) const = default; +#endif + + private: + VkPerformanceConfigurationINTEL m_performanceConfigurationINTEL = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceConfigurationINTEL; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = PerformanceConfigurationINTEL; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPool.html + class QueryPool + { + public: + using CType = VkQueryPool; + using NativeType = VkQueryPool; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eQueryPool; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eQueryPool; + + public: + QueryPool() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + QueryPool( QueryPool const & rhs ) = default; + QueryPool & operator=( QueryPool const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + QueryPool( QueryPool && rhs ) = default; + QueryPool & operator=( QueryPool && rhs ) = default; +#else + QueryPool( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT : m_queryPool( exchange( rhs.m_queryPool, {} ) ) {} + + QueryPool & operator=( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT + { + m_queryPool = exchange( rhs.m_queryPool, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR QueryPool( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT QueryPool( VkQueryPool queryPool ) VULKAN_HPP_NOEXCEPT : m_queryPool( queryPool ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + QueryPool & operator=( VkQueryPool queryPool ) VULKAN_HPP_NOEXCEPT + { + m_queryPool = queryPool; + return *this; + } +#endif + + QueryPool & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_queryPool = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkQueryPool() const VULKAN_HPP_NOEXCEPT + { + return m_queryPool; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_queryPool != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_queryPool == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueryPool const & ) const = default; +#endif + + private: + VkQueryPool m_queryPool = {}; + }; + + template <> + struct CppType + { + using Type = QueryPool; + }; + + template <> + struct CppType + { + using Type = QueryPool; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = QueryPool; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuffer.html + class Buffer + { + public: + using CType = VkBuffer; + using NativeType = VkBuffer; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eBuffer; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eBuffer; + + public: + Buffer() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Buffer( Buffer const & rhs ) = default; + Buffer & operator=( Buffer const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Buffer( Buffer && rhs ) = default; + Buffer & operator=( Buffer && rhs ) = default; +#else + Buffer( Buffer && rhs ) VULKAN_HPP_NOEXCEPT : m_buffer( exchange( rhs.m_buffer, {} ) ) {} + + Buffer & operator=( Buffer && rhs ) VULKAN_HPP_NOEXCEPT + { + m_buffer = exchange( rhs.m_buffer, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Buffer( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Buffer( VkBuffer buffer ) VULKAN_HPP_NOEXCEPT : m_buffer( buffer ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Buffer & operator=( VkBuffer buffer ) VULKAN_HPP_NOEXCEPT + { + m_buffer = buffer; + return *this; + } +#endif + + Buffer & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_buffer = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBuffer() const VULKAN_HPP_NOEXCEPT + { + return m_buffer; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_buffer != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_buffer == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Buffer const & ) const = default; +#endif + + private: + VkBuffer m_buffer = {}; + }; + + template <> + struct CppType + { + using Type = Buffer; + }; + + template <> + struct CppType + { + using Type = Buffer; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Buffer; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineLayout.html + class PipelineLayout + { + public: + using CType = VkPipelineLayout; + using NativeType = VkPipelineLayout; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePipelineLayout; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::ePipelineLayout; + + public: + PipelineLayout() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + PipelineLayout( PipelineLayout const & rhs ) = default; + PipelineLayout & operator=( PipelineLayout const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + PipelineLayout( PipelineLayout && rhs ) = default; + PipelineLayout & operator=( PipelineLayout && rhs ) = default; +#else + PipelineLayout( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT : m_pipelineLayout( exchange( rhs.m_pipelineLayout, {} ) ) {} + + PipelineLayout & operator=( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT + { + m_pipelineLayout = exchange( rhs.m_pipelineLayout, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR PipelineLayout( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT PipelineLayout( VkPipelineLayout pipelineLayout ) VULKAN_HPP_NOEXCEPT : m_pipelineLayout( pipelineLayout ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + PipelineLayout & operator=( VkPipelineLayout pipelineLayout ) VULKAN_HPP_NOEXCEPT + { + m_pipelineLayout = pipelineLayout; + return *this; + } +#endif + + PipelineLayout & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_pipelineLayout = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineLayout() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineLayout; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineLayout != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineLayout == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineLayout const & ) const = default; +#endif + + private: + VkPipelineLayout m_pipelineLayout = {}; + }; + + template <> + struct CppType + { + using Type = PipelineLayout; + }; + + template <> + struct CppType + { + using Type = PipelineLayout; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = PipelineLayout; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSet.html + class DescriptorSet + { + public: + using CType = VkDescriptorSet; + using NativeType = VkDescriptorSet; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDescriptorSet; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDescriptorSet; + + public: + DescriptorSet() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DescriptorSet( DescriptorSet const & rhs ) = default; + DescriptorSet & operator=( DescriptorSet const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DescriptorSet( DescriptorSet && rhs ) = default; + DescriptorSet & operator=( DescriptorSet && rhs ) = default; +#else + DescriptorSet( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT : m_descriptorSet( exchange( rhs.m_descriptorSet, {} ) ) {} + + DescriptorSet & operator=( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT + { + m_descriptorSet = exchange( rhs.m_descriptorSet, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DescriptorSet( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorSet( VkDescriptorSet descriptorSet ) VULKAN_HPP_NOEXCEPT : m_descriptorSet( descriptorSet ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DescriptorSet & operator=( VkDescriptorSet descriptorSet ) VULKAN_HPP_NOEXCEPT + { + m_descriptorSet = descriptorSet; + return *this; + } +#endif + + DescriptorSet & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_descriptorSet = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorSet() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSet; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSet != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSet == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSet const & ) const = default; +#endif + + private: + VkDescriptorSet m_descriptorSet = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSet; + }; + + template <> + struct CppType + { + using Type = DescriptorSet; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DescriptorSet; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageView.html + class ImageView + { + public: + using CType = VkImageView; + using NativeType = VkImageView; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eImageView; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eImageView; + + public: + ImageView() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + ImageView( ImageView const & rhs ) = default; + ImageView & operator=( ImageView const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + ImageView( ImageView && rhs ) = default; + ImageView & operator=( ImageView && rhs ) = default; +#else + ImageView( ImageView && rhs ) VULKAN_HPP_NOEXCEPT : m_imageView( exchange( rhs.m_imageView, {} ) ) {} + + ImageView & operator=( ImageView && rhs ) VULKAN_HPP_NOEXCEPT + { + m_imageView = exchange( rhs.m_imageView, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR ImageView( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT ImageView( VkImageView imageView ) VULKAN_HPP_NOEXCEPT : m_imageView( imageView ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + ImageView & operator=( VkImageView imageView ) VULKAN_HPP_NOEXCEPT + { + m_imageView = imageView; + return *this; + } +#endif + + ImageView & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_imageView = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkImageView() const VULKAN_HPP_NOEXCEPT + { + return m_imageView; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_imageView != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_imageView == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageView const & ) const = default; +#endif + + private: + VkImageView m_imageView = {}; + }; + + template <> + struct CppType + { + using Type = ImageView; + }; + + template <> + struct CppType + { + using Type = ImageView; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = ImageView; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipeline.html + class Pipeline + { + public: + using CType = VkPipeline; + using NativeType = VkPipeline; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePipeline; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::ePipeline; + + public: + Pipeline() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Pipeline( Pipeline const & rhs ) = default; + Pipeline & operator=( Pipeline const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Pipeline( Pipeline && rhs ) = default; + Pipeline & operator=( Pipeline && rhs ) = default; +#else + Pipeline( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT : m_pipeline( exchange( rhs.m_pipeline, {} ) ) {} + + Pipeline & operator=( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT + { + m_pipeline = exchange( rhs.m_pipeline, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Pipeline( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Pipeline( VkPipeline pipeline ) VULKAN_HPP_NOEXCEPT : m_pipeline( pipeline ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Pipeline & operator=( VkPipeline pipeline ) VULKAN_HPP_NOEXCEPT + { + m_pipeline = pipeline; + return *this; + } +#endif + + Pipeline & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_pipeline = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipeline() const VULKAN_HPP_NOEXCEPT + { + return m_pipeline; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_pipeline != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_pipeline == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Pipeline const & ) const = default; +#endif + + private: + VkPipeline m_pipeline = {}; + }; + + template <> + struct CppType + { + using Type = Pipeline; + }; + + template <> + struct CppType + { + using Type = Pipeline; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Pipeline; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderEXT.html + class ShaderEXT + { + public: + using CType = VkShaderEXT; + using NativeType = VkShaderEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eShaderEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + ShaderEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + ShaderEXT( ShaderEXT const & rhs ) = default; + ShaderEXT & operator=( ShaderEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + ShaderEXT( ShaderEXT && rhs ) = default; + ShaderEXT & operator=( ShaderEXT && rhs ) = default; +#else + ShaderEXT( ShaderEXT && rhs ) VULKAN_HPP_NOEXCEPT : m_shaderEXT( exchange( rhs.m_shaderEXT, {} ) ) {} + + ShaderEXT & operator=( ShaderEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_shaderEXT = exchange( rhs.m_shaderEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR ShaderEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT ShaderEXT( VkShaderEXT shaderEXT ) VULKAN_HPP_NOEXCEPT : m_shaderEXT( shaderEXT ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + ShaderEXT & operator=( VkShaderEXT shaderEXT ) VULKAN_HPP_NOEXCEPT + { + m_shaderEXT = shaderEXT; + return *this; + } +#endif + + ShaderEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_shaderEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkShaderEXT() const VULKAN_HPP_NOEXCEPT + { + return m_shaderEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_shaderEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_shaderEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShaderEXT const & ) const = default; +#endif + + private: + VkShaderEXT m_shaderEXT = {}; + }; + + template <> + struct CppType + { + using Type = ShaderEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = ShaderEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImage.html + class Image + { + public: + using CType = VkImage; + using NativeType = VkImage; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eImage; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eImage; + + public: + Image() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Image( Image const & rhs ) = default; + Image & operator=( Image const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Image( Image && rhs ) = default; + Image & operator=( Image && rhs ) = default; +#else + Image( Image && rhs ) VULKAN_HPP_NOEXCEPT : m_image( exchange( rhs.m_image, {} ) ) {} + + Image & operator=( Image && rhs ) VULKAN_HPP_NOEXCEPT + { + m_image = exchange( rhs.m_image, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Image( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Image( VkImage image ) VULKAN_HPP_NOEXCEPT : m_image( image ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Image & operator=( VkImage image ) VULKAN_HPP_NOEXCEPT + { + m_image = image; + return *this; + } +#endif + + Image & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_image = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkImage() const VULKAN_HPP_NOEXCEPT + { + return m_image; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_image != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_image == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Image const & ) const = default; +#endif + + private: + VkImage m_image = {}; + }; + + template <> + struct CppType + { + using Type = Image; + }; + + template <> + struct CppType + { + using Type = Image; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Image; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkAccelerationStructureNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureNV.html + class AccelerationStructureNV + { + public: + using CType = VkAccelerationStructureNV; + using NativeType = VkAccelerationStructureNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eAccelerationStructureNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eAccelerationStructureNV; + + public: + AccelerationStructureNV() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + AccelerationStructureNV( AccelerationStructureNV const & rhs ) = default; + AccelerationStructureNV & operator=( AccelerationStructureNV const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + AccelerationStructureNV( AccelerationStructureNV && rhs ) = default; + AccelerationStructureNV & operator=( AccelerationStructureNV && rhs ) = default; +#else + AccelerationStructureNV( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT : m_accelerationStructureNV( exchange( rhs.m_accelerationStructureNV, {} ) ) + { + } + + AccelerationStructureNV & operator=( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT + { + m_accelerationStructureNV = exchange( rhs.m_accelerationStructureNV, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR AccelerationStructureNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT AccelerationStructureNV( VkAccelerationStructureNV accelerationStructureNV ) VULKAN_HPP_NOEXCEPT + : m_accelerationStructureNV( accelerationStructureNV ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + AccelerationStructureNV & operator=( VkAccelerationStructureNV accelerationStructureNV ) VULKAN_HPP_NOEXCEPT + { + m_accelerationStructureNV = accelerationStructureNV; + return *this; + } +#endif + + AccelerationStructureNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_accelerationStructureNV = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkAccelerationStructureNV() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureNV; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureNV != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureNV == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureNV const & ) const = default; +#endif + + private: + VkAccelerationStructureNV m_accelerationStructureNV = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureNV; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureNV; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = AccelerationStructureNV; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDataGraphPipelineSessionARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionARM.html + class DataGraphPipelineSessionARM + { + public: + using CType = VkDataGraphPipelineSessionARM; + using NativeType = VkDataGraphPipelineSessionARM; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDataGraphPipelineSessionARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + DataGraphPipelineSessionARM() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DataGraphPipelineSessionARM( DataGraphPipelineSessionARM const & rhs ) = default; + DataGraphPipelineSessionARM & operator=( DataGraphPipelineSessionARM const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DataGraphPipelineSessionARM( DataGraphPipelineSessionARM && rhs ) = default; + DataGraphPipelineSessionARM & operator=( DataGraphPipelineSessionARM && rhs ) = default; +#else + DataGraphPipelineSessionARM( DataGraphPipelineSessionARM && rhs ) VULKAN_HPP_NOEXCEPT + : m_dataGraphPipelineSessionARM( exchange( rhs.m_dataGraphPipelineSessionARM, {} ) ) + { + } + + DataGraphPipelineSessionARM & operator=( DataGraphPipelineSessionARM && rhs ) VULKAN_HPP_NOEXCEPT + { + m_dataGraphPipelineSessionARM = exchange( rhs.m_dataGraphPipelineSessionARM, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DataGraphPipelineSessionARM( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DataGraphPipelineSessionARM( VkDataGraphPipelineSessionARM dataGraphPipelineSessionARM ) VULKAN_HPP_NOEXCEPT + : m_dataGraphPipelineSessionARM( dataGraphPipelineSessionARM ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DataGraphPipelineSessionARM & operator=( VkDataGraphPipelineSessionARM dataGraphPipelineSessionARM ) VULKAN_HPP_NOEXCEPT + { + m_dataGraphPipelineSessionARM = dataGraphPipelineSessionARM; + return *this; + } +#endif + + DataGraphPipelineSessionARM & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_dataGraphPipelineSessionARM = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDataGraphPipelineSessionARM() const VULKAN_HPP_NOEXCEPT + { + return m_dataGraphPipelineSessionARM; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_dataGraphPipelineSessionARM != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_dataGraphPipelineSessionARM == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineSessionARM const & ) const = default; +#endif + + private: + VkDataGraphPipelineSessionARM m_dataGraphPipelineSessionARM = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineSessionARM; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DataGraphPipelineSessionARM; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkOpticalFlowSessionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionNV.html + class OpticalFlowSessionNV + { + public: + using CType = VkOpticalFlowSessionNV; + using NativeType = VkOpticalFlowSessionNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eOpticalFlowSessionNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + OpticalFlowSessionNV() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + OpticalFlowSessionNV( OpticalFlowSessionNV const & rhs ) = default; + OpticalFlowSessionNV & operator=( OpticalFlowSessionNV const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + OpticalFlowSessionNV( OpticalFlowSessionNV && rhs ) = default; + OpticalFlowSessionNV & operator=( OpticalFlowSessionNV && rhs ) = default; +#else + OpticalFlowSessionNV( OpticalFlowSessionNV && rhs ) VULKAN_HPP_NOEXCEPT : m_opticalFlowSessionNV( exchange( rhs.m_opticalFlowSessionNV, {} ) ) {} + + OpticalFlowSessionNV & operator=( OpticalFlowSessionNV && rhs ) VULKAN_HPP_NOEXCEPT + { + m_opticalFlowSessionNV = exchange( rhs.m_opticalFlowSessionNV, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR OpticalFlowSessionNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT OpticalFlowSessionNV( VkOpticalFlowSessionNV opticalFlowSessionNV ) VULKAN_HPP_NOEXCEPT + : m_opticalFlowSessionNV( opticalFlowSessionNV ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + OpticalFlowSessionNV & operator=( VkOpticalFlowSessionNV opticalFlowSessionNV ) VULKAN_HPP_NOEXCEPT + { + m_opticalFlowSessionNV = opticalFlowSessionNV; + return *this; + } +#endif + + OpticalFlowSessionNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_opticalFlowSessionNV = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkOpticalFlowSessionNV() const VULKAN_HPP_NOEXCEPT + { + return m_opticalFlowSessionNV; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_opticalFlowSessionNV != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_opticalFlowSessionNV == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpticalFlowSessionNV const & ) const = default; +#endif + + private: + VkOpticalFlowSessionNV m_opticalFlowSessionNV = {}; + }; + + template <> + struct CppType + { + using Type = OpticalFlowSessionNV; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = OpticalFlowSessionNV; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDescriptorUpdateTemplate, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorUpdateTemplate.html + class DescriptorUpdateTemplate + { + public: + using CType = VkDescriptorUpdateTemplate; + using NativeType = VkDescriptorUpdateTemplate; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDescriptorUpdateTemplate; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDescriptorUpdateTemplate; + + public: + DescriptorUpdateTemplate() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DescriptorUpdateTemplate( DescriptorUpdateTemplate const & rhs ) = default; + DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DescriptorUpdateTemplate( DescriptorUpdateTemplate && rhs ) = default; + DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate && rhs ) = default; +#else + DescriptorUpdateTemplate( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT + : m_descriptorUpdateTemplate( exchange( rhs.m_descriptorUpdateTemplate, {} ) ) + { + } + + DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT + { + m_descriptorUpdateTemplate = exchange( rhs.m_descriptorUpdateTemplate, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplate( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorUpdateTemplate( VkDescriptorUpdateTemplate descriptorUpdateTemplate ) VULKAN_HPP_NOEXCEPT + : m_descriptorUpdateTemplate( descriptorUpdateTemplate ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DescriptorUpdateTemplate & operator=( VkDescriptorUpdateTemplate descriptorUpdateTemplate ) VULKAN_HPP_NOEXCEPT + { + m_descriptorUpdateTemplate = descriptorUpdateTemplate; + return *this; + } +#endif + + DescriptorUpdateTemplate & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_descriptorUpdateTemplate = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorUpdateTemplate() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorUpdateTemplate; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorUpdateTemplate != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorUpdateTemplate == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorUpdateTemplate const & ) const = default; +#endif + + private: + VkDescriptorUpdateTemplate m_descriptorUpdateTemplate = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorUpdateTemplate; + }; + + template <> + struct CppType + { + using Type = DescriptorUpdateTemplate; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DescriptorUpdateTemplate; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + using DescriptorUpdateTemplateKHR = DescriptorUpdateTemplate; + + // wrapper class for handle VkEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkEvent.html + class Event + { + public: + using CType = VkEvent; + using NativeType = VkEvent; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eEvent; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eEvent; + + public: + Event() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Event( Event const & rhs ) = default; + Event & operator=( Event const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Event( Event && rhs ) = default; + Event & operator=( Event && rhs ) = default; +#else + Event( Event && rhs ) VULKAN_HPP_NOEXCEPT : m_event( exchange( rhs.m_event, {} ) ) {} + + Event & operator=( Event && rhs ) VULKAN_HPP_NOEXCEPT + { + m_event = exchange( rhs.m_event, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Event( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Event( VkEvent event ) VULKAN_HPP_NOEXCEPT : m_event( event ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Event & operator=( VkEvent event ) VULKAN_HPP_NOEXCEPT + { + m_event = event; + return *this; + } +#endif + + Event & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_event = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkEvent() const VULKAN_HPP_NOEXCEPT + { + return m_event; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_event != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_event == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Event const & ) const = default; +#endif + + private: + VkEvent m_event = {}; + }; + + template <> + struct CppType + { + using Type = Event; + }; + + template <> + struct CppType + { + using Type = Event; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Event; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkAccelerationStructureKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureKHR.html + class AccelerationStructureKHR + { + public: + using CType = VkAccelerationStructureKHR; + using NativeType = VkAccelerationStructureKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eAccelerationStructureKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eAccelerationStructureKHR; + + public: + AccelerationStructureKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + AccelerationStructureKHR( AccelerationStructureKHR const & rhs ) = default; + AccelerationStructureKHR & operator=( AccelerationStructureKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + AccelerationStructureKHR( AccelerationStructureKHR && rhs ) = default; + AccelerationStructureKHR & operator=( AccelerationStructureKHR && rhs ) = default; +#else + AccelerationStructureKHR( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_accelerationStructureKHR( exchange( rhs.m_accelerationStructureKHR, {} ) ) + { + } + + AccelerationStructureKHR & operator=( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_accelerationStructureKHR = exchange( rhs.m_accelerationStructureKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR AccelerationStructureKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT AccelerationStructureKHR( VkAccelerationStructureKHR accelerationStructureKHR ) VULKAN_HPP_NOEXCEPT + : m_accelerationStructureKHR( accelerationStructureKHR ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + AccelerationStructureKHR & operator=( VkAccelerationStructureKHR accelerationStructureKHR ) VULKAN_HPP_NOEXCEPT + { + m_accelerationStructureKHR = accelerationStructureKHR; + return *this; + } +#endif + + AccelerationStructureKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_accelerationStructureKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkAccelerationStructureKHR() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureKHR const & ) const = default; +#endif + + private: + VkAccelerationStructureKHR m_accelerationStructureKHR = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureKHR; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = AccelerationStructureKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapEXT.html + class MicromapEXT + { + public: + using CType = VkMicromapEXT; + using NativeType = VkMicromapEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eMicromapEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + MicromapEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + MicromapEXT( MicromapEXT const & rhs ) = default; + MicromapEXT & operator=( MicromapEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + MicromapEXT( MicromapEXT && rhs ) = default; + MicromapEXT & operator=( MicromapEXT && rhs ) = default; +#else + MicromapEXT( MicromapEXT && rhs ) VULKAN_HPP_NOEXCEPT : m_micromapEXT( exchange( rhs.m_micromapEXT, {} ) ) {} + + MicromapEXT & operator=( MicromapEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_micromapEXT = exchange( rhs.m_micromapEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR MicromapEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT MicromapEXT( VkMicromapEXT micromapEXT ) VULKAN_HPP_NOEXCEPT : m_micromapEXT( micromapEXT ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + MicromapEXT & operator=( VkMicromapEXT micromapEXT ) VULKAN_HPP_NOEXCEPT + { + m_micromapEXT = micromapEXT; + return *this; + } +#endif + + MicromapEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_micromapEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkMicromapEXT() const VULKAN_HPP_NOEXCEPT + { + return m_micromapEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_micromapEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_micromapEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MicromapEXT const & ) const = default; +#endif + + private: + VkMicromapEXT m_micromapEXT = {}; + }; + + template <> + struct CppType + { + using Type = MicromapEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = MicromapEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBuffer.html + class CommandBuffer + { + public: + using CType = VkCommandBuffer; + using NativeType = VkCommandBuffer; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eCommandBuffer; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eCommandBuffer; + + public: + CommandBuffer() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + CommandBuffer( CommandBuffer const & rhs ) = default; + CommandBuffer & operator=( CommandBuffer const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + CommandBuffer( CommandBuffer && rhs ) = default; + CommandBuffer & operator=( CommandBuffer && rhs ) = default; +#else + CommandBuffer( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT : m_commandBuffer( exchange( rhs.m_commandBuffer, {} ) ) {} + + CommandBuffer & operator=( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT + { + m_commandBuffer = exchange( rhs.m_commandBuffer, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR CommandBuffer( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + CommandBuffer( VkCommandBuffer commandBuffer ) VULKAN_HPP_NOEXCEPT : m_commandBuffer( commandBuffer ) {} + + CommandBuffer & operator=( VkCommandBuffer commandBuffer ) VULKAN_HPP_NOEXCEPT + { + m_commandBuffer = commandBuffer; + return *this; + } + + CommandBuffer & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_commandBuffer = {}; + return *this; + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkBeginCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBeginCommandBuffer.html + template + VULKAN_HPP_NODISCARD Result begin( const CommandBufferBeginInfo * pBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBeginCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBeginCommandBuffer.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type begin( const CommandBufferBeginInfo & beginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEndCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEndCommandBuffer.html + template + VULKAN_HPP_NODISCARD Result end( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkEndCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEndCommandBuffer.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type end( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandBuffer.html + template + VULKAN_HPP_NODISCARD Result reset( CommandBufferResetFlags flags, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkResetCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandBuffer.html + template + typename ResultValueType::type reset( CommandBufferResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkCmdBindPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipeline.html + template + void bindPipeline( PipelineBindPoint pipelineBindPoint, + Pipeline pipeline, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewport.html + template + void setViewport( uint32_t firstViewport, + uint32_t viewportCount, + const Viewport * pViewports, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewport.html + template + void setViewport( uint32_t firstViewport, + ArrayProxy const & viewports, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetScissor, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissor.html + template + void setScissor( uint32_t firstScissor, + uint32_t scissorCount, + const Rect2D * pScissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetScissor, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissor.html + template + void setScissor( uint32_t firstScissor, + ArrayProxy const & scissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetLineWidth, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineWidth.html + template + void setLineWidth( float lineWidth, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBias, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias.html + template + void setDepthBias( float depthBiasConstantFactor, + float depthBiasClamp, + float depthBiasSlopeFactor, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetBlendConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetBlendConstants.html + template + void setBlendConstants( const float blendConstants[4], Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBounds, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBounds.html + template + void setDepthBounds( float minDepthBounds, float maxDepthBounds, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilCompareMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilCompareMask.html + template + void setStencilCompareMask( StencilFaceFlags faceMask, + uint32_t compareMask, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilWriteMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilWriteMask.html + template + void setStencilWriteMask( StencilFaceFlags faceMask, + uint32_t writeMask, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilReference, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilReference.html + template + void setStencilReference( StencilFaceFlags faceMask, + uint32_t reference, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets.html + template + void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + uint32_t descriptorSetCount, + const DescriptorSet * pDescriptorSets, + uint32_t dynamicOffsetCount, + const uint32_t * pDynamicOffsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets.html + template + void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & descriptorSets, + ArrayProxy const & dynamicOffsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindIndexBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer.html + template + void bindIndexBuffer( Buffer buffer, + DeviceSize offset, + IndexType indexType, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindVertexBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers.html + template + void bindVertexBuffers( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindVertexBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers.html + template + void bindVertexBuffers( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDraw, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDraw.html + template + void draw( uint32_t vertexCount, + uint32_t instanceCount, + uint32_t firstVertex, + uint32_t firstInstance, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexed, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexed.html + template + void drawIndexed( uint32_t indexCount, + uint32_t instanceCount, + uint32_t firstIndex, + int32_t vertexOffset, + uint32_t firstInstance, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirect.html + template + void drawIndirect( Buffer buffer, DeviceSize offset, uint32_t drawCount, uint32_t stride, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirect.html + template + void drawIndexedIndirect( Buffer buffer, + DeviceSize offset, + uint32_t drawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatch, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatch.html + template + void dispatch( uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchIndirect.html + template + void dispatchIndirect( Buffer buffer, DeviceSize offset, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer.html + template + void copyBuffer( Buffer srcBuffer, + Buffer dstBuffer, + uint32_t regionCount, + const BufferCopy * pRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer.html + template + void copyBuffer( Buffer srcBuffer, + Buffer dstBuffer, + ArrayProxy const & regions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage.html + template + void copyImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const ImageCopy * pRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage.html + template + void copyImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBlitImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage.html + template + void blitImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const ImageBlit * pRegions, + Filter filter, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBlitImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage.html + template + void blitImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Filter filter, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBufferToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage.html + template + void copyBufferToImage( Buffer srcBuffer, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const BufferImageCopy * pRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBufferToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage.html + template + void copyBufferToImage( Buffer srcBuffer, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImageToBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer.html + template + void copyImageToBuffer( Image srcImage, + ImageLayout srcImageLayout, + Buffer dstBuffer, + uint32_t regionCount, + const BufferImageCopy * pRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImageToBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer.html + template + void copyImageToBuffer( Image srcImage, + ImageLayout srcImageLayout, + Buffer dstBuffer, + ArrayProxy const & regions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdUpdateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdateBuffer.html + template + void updateBuffer( Buffer dstBuffer, + DeviceSize dstOffset, + DeviceSize dataSize, + const void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdUpdateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdateBuffer.html + template + void updateBuffer( Buffer dstBuffer, + DeviceSize dstOffset, + ArrayProxy const & data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdFillBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdFillBuffer.html + template + void fillBuffer( Buffer dstBuffer, DeviceSize dstOffset, DeviceSize size, uint32_t data, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const + VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdClearColorImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearColorImage.html + template + void clearColorImage( Image image, + ImageLayout imageLayout, + const ClearColorValue * pColor, + uint32_t rangeCount, + const ImageSubresourceRange * pRanges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdClearColorImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearColorImage.html + template + void clearColorImage( Image image, + ImageLayout imageLayout, + const ClearColorValue & color, + ArrayProxy const & ranges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdClearDepthStencilImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearDepthStencilImage.html + template + void clearDepthStencilImage( Image image, + ImageLayout imageLayout, + const ClearDepthStencilValue * pDepthStencil, + uint32_t rangeCount, + const ImageSubresourceRange * pRanges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdClearDepthStencilImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearDepthStencilImage.html + template + void clearDepthStencilImage( Image image, + ImageLayout imageLayout, + const ClearDepthStencilValue & depthStencil, + ArrayProxy const & ranges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdClearAttachments, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearAttachments.html + template + void clearAttachments( uint32_t attachmentCount, + const ClearAttachment * pAttachments, + uint32_t rectCount, + const ClearRect * pRects, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdClearAttachments, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearAttachments.html + template + void clearAttachments( ArrayProxy const & attachments, + ArrayProxy const & rects, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResolveImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage.html + template + void resolveImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + uint32_t regionCount, + const ImageResolve * pRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdResolveImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage.html + template + void resolveImage( Image srcImage, + ImageLayout srcImageLayout, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & regions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent.html + template + void setEvent( Event event, PipelineStageFlags stageMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent.html + template + void resetEvent( Event event, PipelineStageFlags stageMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWaitEvents, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents.html + template + void waitEvents( uint32_t eventCount, + const Event * pEvents, + PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, + const MemoryBarrier * pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const BufferMemoryBarrier * pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const ImageMemoryBarrier * pImageMemoryBarriers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWaitEvents, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents.html + template + void waitEvents( ArrayProxy const & events, + PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPipelineBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier.html + template + void pipelineBarrier( PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + DependencyFlags dependencyFlags, + uint32_t memoryBarrierCount, + const MemoryBarrier * pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const BufferMemoryBarrier * pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const ImageMemoryBarrier * pImageMemoryBarriers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPipelineBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier.html + template + void pipelineBarrier( PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask, + DependencyFlags dependencyFlags, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQuery.html + template + void beginQuery( QueryPool queryPool, + uint32_t query, + QueryControlFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQuery.html + template + void endQuery( QueryPool queryPool, uint32_t query, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetQueryPool.html + template + void resetQueryPool( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteTimestamp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp.html + template + void writeTimestamp( PipelineStageFlagBits pipelineStage, + QueryPool queryPool, + uint32_t query, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyQueryPoolResults.html + template + void copyQueryPoolResults( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + Buffer dstBuffer, + DeviceSize dstOffset, + DeviceSize stride, + QueryResultFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants.html + template + void pushConstants( PipelineLayout layout, + ShaderStageFlags stageFlags, + uint32_t offset, + uint32_t size, + const void * pValues, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants.html + template + void pushConstants( PipelineLayout layout, + ShaderStageFlags stageFlags, + uint32_t offset, + ArrayProxy const & values, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass.html + template + void beginRenderPass( const RenderPassBeginInfo * pRenderPassBegin, + SubpassContents contents, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass.html + template + void beginRenderPass( const RenderPassBeginInfo & renderPassBegin, + SubpassContents contents, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdNextSubpass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass.html + template + void nextSubpass( SubpassContents contents, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass.html + template + void endRenderPass( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdExecuteCommands, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteCommands.html + template + void executeCommands( uint32_t commandBufferCount, + const CommandBuffer * pCommandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdExecuteCommands, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteCommands.html + template + void executeCommands( ArrayProxy const & commandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkCmdSetDeviceMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMask.html + template + void setDeviceMask( uint32_t deviceMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchBase, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBase.html + template + void dispatchBase( uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkCmdDrawIndirectCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCount.html + template + void drawIndirectCount( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirectCount, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCount.html + template + void drawIndexedIndirectCount( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBeginRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2.html + template + void beginRenderPass2( const RenderPassBeginInfo * pRenderPassBegin, + const SubpassBeginInfo * pSubpassBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2.html + template + void beginRenderPass2( const RenderPassBeginInfo & renderPassBegin, + const SubpassBeginInfo & subpassBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdNextSubpass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2.html + template + void nextSubpass2( const SubpassBeginInfo * pSubpassBeginInfo, + const SubpassEndInfo * pSubpassEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdNextSubpass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2.html + template + void nextSubpass2( const SubpassBeginInfo & subpassBeginInfo, + const SubpassEndInfo & subpassEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2.html + template + void endRenderPass2( const SubpassEndInfo * pSubpassEndInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2.html + template + void endRenderPass2( const SubpassEndInfo & subpassEndInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkCmdSetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2.html + template + void + setEvent2( Event event, const DependencyInfo * pDependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2.html + template + void setEvent2( Event event, const DependencyInfo & dependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2.html + template + void resetEvent2( Event event, PipelineStageFlags2 stageMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWaitEvents2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2.html + template + void waitEvents2( uint32_t eventCount, + const Event * pEvents, + const DependencyInfo * pDependencyInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWaitEvents2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2.html + template + void waitEvents2( ArrayProxy const & events, + ArrayProxy const & dependencyInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPipelineBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2.html + template + void pipelineBarrier2( const DependencyInfo * pDependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPipelineBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2.html + template + void pipelineBarrier2( const DependencyInfo & dependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteTimestamp2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2.html + template + void writeTimestamp2( PipelineStageFlags2 stage, + QueryPool queryPool, + uint32_t query, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2.html + template + void copyBuffer2( const CopyBufferInfo2 * pCopyBufferInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2.html + template + void copyBuffer2( const CopyBufferInfo2 & copyBufferInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2.html + template + void copyImage2( const CopyImageInfo2 * pCopyImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2.html + template + void copyImage2( const CopyImageInfo2 & copyImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBufferToImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html + template + void copyBufferToImage2( const CopyBufferToImageInfo2 * pCopyBufferToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBufferToImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html + template + void copyBufferToImage2( const CopyBufferToImageInfo2 & copyBufferToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImageToBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2.html + template + void copyImageToBuffer2( const CopyImageToBufferInfo2 * pCopyImageToBufferInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImageToBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2.html + template + void copyImageToBuffer2( const CopyImageToBufferInfo2 & copyImageToBufferInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBlitImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2.html + template + void blitImage2( const BlitImageInfo2 * pBlitImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBlitImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2.html + template + void blitImage2( const BlitImageInfo2 & blitImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResolveImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2.html + template + void resolveImage2( const ResolveImageInfo2 * pResolveImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdResolveImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2.html + template + void resolveImage2( const ResolveImageInfo2 & resolveImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRendering.html + template + void beginRendering( const RenderingInfo * pRenderingInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRendering.html + template + void beginRendering( const RenderingInfo & renderingInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering.html + template + void endRendering( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCullMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullMode.html + template + void setCullMode( CullModeFlags cullMode, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetFrontFace, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFace.html + template + void setFrontFace( FrontFace frontFace, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveTopology, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopology.html + template + void setPrimitiveTopology( PrimitiveTopology primitiveTopology, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCount.html + template + void setViewportWithCount( uint32_t viewportCount, + const Viewport * pViewports, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCount.html + template + void setViewportWithCount( ArrayProxy const & viewports, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetScissorWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCount.html + template + void setScissorWithCount( uint32_t scissorCount, + const Rect2D * pScissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetScissorWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCount.html + template + void setScissorWithCount( ArrayProxy const & scissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindVertexBuffers2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2.html + template + void bindVertexBuffers2( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + const DeviceSize * pSizes, + const DeviceSize * pStrides, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindVertexBuffers2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2.html + template + void bindVertexBuffers2( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDepthTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnable.html + template + void setDepthTestEnable( Bool32 depthTestEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthWriteEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnable.html + template + void setDepthWriteEnable( Bool32 depthWriteEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthCompareOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOp.html + template + void setDepthCompareOp( CompareOp depthCompareOp, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBoundsTestEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnable.html + template + void setDepthBoundsTestEnable( Bool32 depthBoundsTestEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnable.html + template + void setStencilTestEnable( Bool32 stencilTestEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOp.html + template + void setStencilOp( StencilFaceFlags faceMask, + StencilOp failOp, + StencilOp passOp, + StencilOp depthFailOp, + CompareOp compareOp, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizerDiscardEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnable.html + template + void setRasterizerDiscardEnable( Bool32 rasterizerDiscardEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBiasEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnable.html + template + void setDepthBiasEnable( Bool32 depthBiasEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveRestartEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnable.html + template + void setPrimitiveRestartEnable( Bool32 primitiveRestartEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkCmdSetLineStipple, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStipple.html + template + void setLineStipple( uint32_t lineStippleFactor, + uint16_t lineStipplePattern, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindIndexBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2.html + template + void bindIndexBuffer2( Buffer buffer, DeviceSize offset, DeviceSize size, IndexType indexType, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet.html + template + void pushDescriptorSet( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const WriteDescriptorSet * pDescriptorWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet.html + template + void pushDescriptorSet( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate.html + template + void pushDescriptorSetWithTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate, + PipelineLayout layout, + uint32_t set, + const void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate.html + template + void pushDescriptorSetWithTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate, + PipelineLayout layout, + uint32_t set, + DataType const & data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRenderingAttachmentLocations, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocations.html + template + void setRenderingAttachmentLocations( const RenderingAttachmentLocationInfo * pLocationInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingAttachmentLocations, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocations.html + template + void setRenderingAttachmentLocations( const RenderingAttachmentLocationInfo & locationInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndices, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndices.html + template + void setRenderingInputAttachmentIndices( const RenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingInputAttachmentIndices, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndices.html + template + void setRenderingInputAttachmentIndices( const RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorSets2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2.html + template + void bindDescriptorSets2( const BindDescriptorSetsInfo * pBindDescriptorSetsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorSets2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2.html + template + void bindDescriptorSets2( const BindDescriptorSetsInfo & bindDescriptorSetsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushConstants2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2.html + template + void pushConstants2( const PushConstantsInfo * pPushConstantsInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushConstants2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2.html + template + void pushConstants2( const PushConstantsInfo & pushConstantsInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSet2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2.html + template + void pushDescriptorSet2( const PushDescriptorSetInfo * pPushDescriptorSetInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSet2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2.html + template + void pushDescriptorSet2( const PushDescriptorSetInfo & pushDescriptorSetInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2.html + template + void pushDescriptorSetWithTemplate2( const PushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2.html + template + void pushDescriptorSetWithTemplate2( const PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_debug_marker === + + // wrapper function for command vkCmdDebugMarkerBeginEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerBeginEXT.html + template + void debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT * pMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDebugMarkerBeginEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerBeginEXT.html + template + void debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDebugMarkerEndEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerEndEXT.html + template + void debugMarkerEndEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDebugMarkerInsertEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerInsertEXT.html + template + void debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT * pMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDebugMarkerInsertEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerInsertEXT.html + template + void debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_queue === + + // wrapper function for command vkCmdBeginVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginVideoCodingKHR.html + template + void beginVideoCodingKHR( const VideoBeginCodingInfoKHR * pBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginVideoCodingKHR.html + template + void beginVideoCodingKHR( const VideoBeginCodingInfoKHR & beginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndVideoCodingKHR.html + template + void endVideoCodingKHR( const VideoEndCodingInfoKHR * pEndCodingInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndVideoCodingKHR.html + template + void endVideoCodingKHR( const VideoEndCodingInfoKHR & endCodingInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdControlVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdControlVideoCodingKHR.html + template + void controlVideoCodingKHR( const VideoCodingControlInfoKHR * pCodingControlInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdControlVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdControlVideoCodingKHR.html + template + void controlVideoCodingKHR( const VideoCodingControlInfoKHR & codingControlInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_decode_queue === + + // wrapper function for command vkCmdDecodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecodeVideoKHR.html + template + void decodeVideoKHR( const VideoDecodeInfoKHR * pDecodeInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDecodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecodeVideoKHR.html + template + void decodeVideoKHR( const VideoDecodeInfoKHR & decodeInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_transform_feedback === + + // wrapper function for command vkCmdBindTransformFeedbackBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTransformFeedbackBuffersEXT.html + template + void bindTransformFeedbackBuffersEXT( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + const DeviceSize * pSizes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindTransformFeedbackBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTransformFeedbackBuffersEXT.html + template + void bindTransformFeedbackBuffersEXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginTransformFeedbackEXT.html + template + void beginTransformFeedbackEXT( uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const Buffer * pCounterBuffers, + const DeviceSize * pCounterBufferOffsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginTransformFeedbackEXT.html + template + void beginTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndTransformFeedbackEXT.html + template + void endTransformFeedbackEXT( uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const Buffer * pCounterBuffers, + const DeviceSize * pCounterBufferOffsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndTransformFeedbackEXT.html + template + void endTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQueryIndexedEXT.html + template + void beginQueryIndexedEXT( QueryPool queryPool, + uint32_t query, + QueryControlFlags flags, + uint32_t index, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQueryIndexedEXT.html + template + void endQueryIndexedEXT( QueryPool queryPool, + uint32_t query, + uint32_t index, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndirectByteCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectByteCountEXT.html + template + void drawIndirectByteCountEXT( uint32_t instanceCount, + uint32_t firstInstance, + Buffer counterBuffer, + DeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NVX_binary_import === + + // wrapper function for command vkCmdCuLaunchKernelNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCuLaunchKernelNVX.html + template + void cuLaunchKernelNVX( const CuLaunchInfoNVX * pLaunchInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCuLaunchKernelNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCuLaunchKernelNVX.html + template + void cuLaunchKernelNVX( const CuLaunchInfoNVX & launchInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountAMD.html + template + void drawIndirectCountAMD( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirectCountAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountAMD.html + template + void drawIndexedIndirectCountAMD( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_dynamic_rendering === + + // wrapper function for command vkCmdBeginRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderingKHR.html + template + void beginRenderingKHR( const RenderingInfo * pRenderingInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderingKHR.html + template + void beginRenderingKHR( const RenderingInfo & renderingInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderingKHR.html + template + void endRenderingKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_device_group === + + // wrapper function for command vkCmdSetDeviceMaskKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMaskKHR.html + template + void setDeviceMaskKHR( uint32_t deviceMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchBaseKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBaseKHR.html + template + void dispatchBaseKHR( uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_push_descriptor === + + // wrapper function for command vkCmdPushDescriptorSetKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetKHR.html + template + void pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const WriteDescriptorSet * pDescriptorWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetKHR.html + template + void pushDescriptorSetKHR( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html + template + void pushDescriptorSetWithTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate, + PipelineLayout layout, + uint32_t set, + const void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html + template + void pushDescriptorSetWithTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate, + PipelineLayout layout, + uint32_t set, + DataType const & data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_conditional_rendering === + + // wrapper function for command vkCmdBeginConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginConditionalRenderingEXT.html + template + void beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginConditionalRenderingEXT.html + template + void beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndConditionalRenderingEXT.html + template + void endConditionalRenderingEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_clip_space_w_scaling === + + // wrapper function for command vkCmdSetViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingNV.html + template + void setViewportWScalingNV( uint32_t firstViewport, + uint32_t viewportCount, + const ViewportWScalingNV * pViewportWScalings, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingNV.html + template + void setViewportWScalingNV( uint32_t firstViewport, + ArrayProxy const & viewportWScalings, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_discard_rectangles === + + // wrapper function for command vkCmdSetDiscardRectangleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEXT.html + template + void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const Rect2D * pDiscardRectangles, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDiscardRectangleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEXT.html + template + void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, + ArrayProxy const & discardRectangles, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDiscardRectangleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEnableEXT.html + template + void setDiscardRectangleEnableEXT( Bool32 discardRectangleEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDiscardRectangleModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleModeEXT.html + template + void setDiscardRectangleModeEXT( DiscardRectangleModeEXT discardRectangleMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_create_renderpass2 === + + // wrapper function for command vkCmdBeginRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2KHR.html + template + void beginRenderPass2KHR( const RenderPassBeginInfo * pRenderPassBegin, + const SubpassBeginInfo * pSubpassBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2KHR.html + template + void beginRenderPass2KHR( const RenderPassBeginInfo & renderPassBegin, + const SubpassBeginInfo & subpassBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdNextSubpass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2KHR.html + template + void nextSubpass2KHR( const SubpassBeginInfo * pSubpassBeginInfo, + const SubpassEndInfo * pSubpassEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdNextSubpass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2KHR.html + template + void nextSubpass2KHR( const SubpassBeginInfo & subpassBeginInfo, + const SubpassEndInfo & subpassEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2KHR.html + template + void endRenderPass2KHR( const SubpassEndInfo * pSubpassEndInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2KHR.html + template + void endRenderPass2KHR( const SubpassEndInfo & subpassEndInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkCmdBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginDebugUtilsLabelEXT.html + template + void beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginDebugUtilsLabelEXT.html + template + void beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndDebugUtilsLabelEXT.html + template + void endDebugUtilsLabelEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInsertDebugUtilsLabelEXT.html + template + void insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInsertDebugUtilsLabelEXT.html + template + void insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkCmdInitializeGraphScratchMemoryAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInitializeGraphScratchMemoryAMDX.html + template + void initializeGraphScratchMemoryAMDX( Pipeline executionGraph, + DeviceAddress scratch, + DeviceSize scratchSize, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchGraphAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphAMDX.html + template + void dispatchGraphAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX * pCountInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchGraphAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphAMDX.html + template + void dispatchGraphAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX & countInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDispatchGraphIndirectAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectAMDX.html + template + void dispatchGraphIndirectAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX * pCountInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchGraphIndirectAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectAMDX.html + template + void dispatchGraphIndirectAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + const DispatchGraphCountInfoAMDX & countInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDispatchGraphIndirectCountAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectCountAMDX.html + template + void dispatchGraphIndirectCountAMDX( DeviceAddress scratch, + DeviceSize scratchSize, + DeviceAddress countInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + + // wrapper function for command vkCmdSetSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEXT.html + template + void setSampleLocationsEXT( const SampleLocationsInfoEXT * pSampleLocationsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEXT.html + template + void setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_acceleration_structure === + + // wrapper function for command vkCmdBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html + template + void buildAccelerationStructuresKHR( uint32_t infoCount, + const AccelerationStructureBuildGeometryInfoKHR * pInfos, + const AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html + template + void buildAccelerationStructuresKHR( ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBuildAccelerationStructuresIndirectKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html + template + void buildAccelerationStructuresIndirectKHR( uint32_t infoCount, + const AccelerationStructureBuildGeometryInfoKHR * pInfos, + const DeviceAddress * pIndirectDeviceAddresses, + const uint32_t * pIndirectStrides, + const uint32_t * const * ppMaxPrimitiveCounts, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildAccelerationStructuresIndirectKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html + template + void buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, + ArrayProxy const & indirectDeviceAddresses, + ArrayProxy const & indirectStrides, + ArrayProxy const & pMaxPrimitiveCounts, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureKHR.html + template + void copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureKHR.html + template + void copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureToMemoryKHR.html + template + void copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureToMemoryKHR.html + template + void copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToAccelerationStructureKHR.html + template + void copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToAccelerationStructureKHR.html + template + void copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesKHR.html + template + void writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, + const AccelerationStructureKHR * pAccelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesKHR.html + template + void writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkCmdTraceRaysKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysKHR.html + template + void traceRaysKHR( const StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, + const StridedDeviceAddressRegionKHR * pMissShaderBindingTable, + const StridedDeviceAddressRegionKHR * pHitShaderBindingTable, + const StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdTraceRaysKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysKHR.html + template + void traceRaysKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const StridedDeviceAddressRegionKHR & missShaderBindingTable, + const StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const StridedDeviceAddressRegionKHR & callableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdTraceRaysIndirectKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirectKHR.html + template + void traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR * pRaygenShaderBindingTable, + const StridedDeviceAddressRegionKHR * pMissShaderBindingTable, + const StridedDeviceAddressRegionKHR * pHitShaderBindingTable, + const StridedDeviceAddressRegionKHR * pCallableShaderBindingTable, + DeviceAddress indirectDeviceAddress, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdTraceRaysIndirectKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirectKHR.html + template + void traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const StridedDeviceAddressRegionKHR & missShaderBindingTable, + const StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const StridedDeviceAddressRegionKHR & callableShaderBindingTable, + DeviceAddress indirectDeviceAddress, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRayTracingPipelineStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRayTracingPipelineStackSizeKHR.html + template + void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_shading_rate_image === + + // wrapper function for command vkCmdBindShadingRateImageNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadingRateImageNV.html + template + void bindShadingRateImageNV( ImageView imageView, + ImageLayout imageLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportShadingRatePaletteNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportShadingRatePaletteNV.html + template + void setViewportShadingRatePaletteNV( uint32_t firstViewport, + uint32_t viewportCount, + const ShadingRatePaletteNV * pShadingRatePalettes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportShadingRatePaletteNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportShadingRatePaletteNV.html + template + void setViewportShadingRatePaletteNV( uint32_t firstViewport, + ArrayProxy const & shadingRatePalettes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetCoarseSampleOrderNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoarseSampleOrderNV.html + template + void setCoarseSampleOrderNV( CoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const CoarseSampleOrderCustomNV * pCustomSampleOrders, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetCoarseSampleOrderNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoarseSampleOrderNV.html + template + void setCoarseSampleOrderNV( CoarseSampleOrderTypeNV sampleOrderType, + ArrayProxy const & customSampleOrders, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkCmdBuildAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructureNV.html + template + void buildAccelerationStructureNV( const AccelerationStructureInfoNV * pInfo, + Buffer instanceData, + DeviceSize instanceOffset, + Bool32 update, + AccelerationStructureNV dst, + AccelerationStructureNV src, + Buffer scratch, + DeviceSize scratchOffset, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructureNV.html + template + void buildAccelerationStructureNV( const AccelerationStructureInfoNV & info, + Buffer instanceData, + DeviceSize instanceOffset, + Bool32 update, + AccelerationStructureNV dst, + AccelerationStructureNV src, + Buffer scratch, + DeviceSize scratchOffset, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureNV.html + template + void copyAccelerationStructureNV( AccelerationStructureNV dst, + AccelerationStructureNV src, + CopyAccelerationStructureModeKHR mode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdTraceRaysNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysNV.html + template + void traceRaysNV( Buffer raygenShaderBindingTableBuffer, + DeviceSize raygenShaderBindingOffset, + Buffer missShaderBindingTableBuffer, + DeviceSize missShaderBindingOffset, + DeviceSize missShaderBindingStride, + Buffer hitShaderBindingTableBuffer, + DeviceSize hitShaderBindingOffset, + DeviceSize hitShaderBindingStride, + Buffer callableShaderBindingTableBuffer, + DeviceSize callableShaderBindingOffset, + DeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html + template + void writeAccelerationStructuresPropertiesNV( uint32_t accelerationStructureCount, + const AccelerationStructureNV * pAccelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html + template + void writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountKHR.html + template + void drawIndirectCountKHR( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirectCountKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountKHR.html + template + void drawIndexedIndirectCountKHR( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_AMD_buffer_marker === + + // wrapper function for command vkCmdWriteBufferMarkerAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarkerAMD.html + template + void writeBufferMarkerAMD( PipelineStageFlagBits pipelineStage, + Buffer dstBuffer, + DeviceSize dstOffset, + uint32_t marker, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteBufferMarker2AMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarker2AMD.html + template + void writeBufferMarker2AMD( PipelineStageFlags2 stage, + Buffer dstBuffer, + DeviceSize dstOffset, + uint32_t marker, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksNV.html + template + void drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectNV.html + template + void drawMeshTasksIndirectNV( Buffer buffer, + DeviceSize offset, + uint32_t drawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountNV.html + template + void drawMeshTasksIndirectCountNV( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_scissor_exclusive === + + // wrapper function for command vkCmdSetExclusiveScissorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorEnableNV.html + template + void setExclusiveScissorEnableNV( uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const Bool32 * pExclusiveScissorEnables, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetExclusiveScissorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorEnableNV.html + template + void setExclusiveScissorEnableNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissorEnables, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetExclusiveScissorNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorNV.html + template + void setExclusiveScissorNV( uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const Rect2D * pExclusiveScissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetExclusiveScissorNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorNV.html + template + void setExclusiveScissorNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_device_diagnostic_checkpoints === + + // wrapper function for command vkCmdSetCheckpointNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCheckpointNV.html + template + void setCheckpointNV( const void * pCheckpointMarker, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetCheckpointNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCheckpointNV.html + template + void setCheckpointNV( CheckpointMarkerType const & checkpointMarker, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkCmdSetPerformanceMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceMarkerINTEL.html + template + VULKAN_HPP_NODISCARD Result setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL * pMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetPerformanceMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceMarkerINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL & markerInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetPerformanceStreamMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceStreamMarkerINTEL.html + template + VULKAN_HPP_NODISCARD Result setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL * pMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetPerformanceStreamMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceStreamMarkerINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL & markerInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetPerformanceOverrideINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceOverrideINTEL.html + template + VULKAN_HPP_NODISCARD Result setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL * pOverrideInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetPerformanceOverrideINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceOverrideINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL & overrideInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_fragment_shading_rate === + + // wrapper function for command vkCmdSetFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateKHR.html + template + void setFragmentShadingRateKHR( const Extent2D * pFragmentSize, + const FragmentShadingRateCombinerOpKHR combinerOps[2], + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateKHR.html + template + void setFragmentShadingRateKHR( const Extent2D & fragmentSize, + const FragmentShadingRateCombinerOpKHR combinerOps[2], + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_dynamic_rendering_local_read === + + // wrapper function for command vkCmdSetRenderingAttachmentLocationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocationsKHR.html + template + void setRenderingAttachmentLocationsKHR( const RenderingAttachmentLocationInfo * pLocationInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingAttachmentLocationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocationsKHR.html + template + void setRenderingAttachmentLocationsKHR( const RenderingAttachmentLocationInfo & locationInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndicesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndicesKHR.html + template + void setRenderingInputAttachmentIndicesKHR( const RenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetRenderingInputAttachmentIndicesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndicesKHR.html + template + void setRenderingInputAttachmentIndicesKHR( const RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEXT.html + template + void setLineStippleEXT( uint32_t lineStippleFactor, + uint16_t lineStipplePattern, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_extended_dynamic_state === + + // wrapper function for command vkCmdSetCullModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullModeEXT.html + template + void setCullModeEXT( CullModeFlags cullMode, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetFrontFaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFaceEXT.html + template + void setFrontFaceEXT( FrontFace frontFace, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveTopologyEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopologyEXT.html + template + void setPrimitiveTopologyEXT( PrimitiveTopology primitiveTopology, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportWithCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCountEXT.html + template + void setViewportWithCountEXT( uint32_t viewportCount, + const Viewport * pViewports, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportWithCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCountEXT.html + template + void setViewportWithCountEXT( ArrayProxy const & viewports, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetScissorWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCountEXT.html + template + void setScissorWithCountEXT( uint32_t scissorCount, + const Rect2D * pScissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetScissorWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCountEXT.html + template + void setScissorWithCountEXT( ArrayProxy const & scissors, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindVertexBuffers2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2EXT.html + template + void bindVertexBuffers2EXT( uint32_t firstBinding, + uint32_t bindingCount, + const Buffer * pBuffers, + const DeviceSize * pOffsets, + const DeviceSize * pSizes, + const DeviceSize * pStrides, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindVertexBuffers2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2EXT.html + template + void bindVertexBuffers2EXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDepthTestEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnableEXT.html + template + void setDepthTestEnableEXT( Bool32 depthTestEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnableEXT.html + template + void setDepthWriteEnableEXT( Bool32 depthWriteEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthCompareOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOpEXT.html + template + void setDepthCompareOpEXT( CompareOp depthCompareOp, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBoundsTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnableEXT.html + template + void setDepthBoundsTestEnableEXT( Bool32 depthBoundsTestEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnableEXT.html + template + void setStencilTestEnableEXT( Bool32 stencilTestEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOpEXT.html + template + void setStencilOpEXT( StencilFaceFlags faceMask, + StencilOp failOp, + StencilOp passOp, + StencilOp depthFailOp, + CompareOp compareOp, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_generated_commands === + + // wrapper function for command vkCmdPreprocessGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsNV.html + template + void preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV * pGeneratedCommandsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPreprocessGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsNV.html + template + void preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV & generatedCommandsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdExecuteGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsNV.html + template + void executeGeneratedCommandsNV( Bool32 isPreprocessed, + const GeneratedCommandsInfoNV * pGeneratedCommandsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdExecuteGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsNV.html + template + void executeGeneratedCommandsNV( Bool32 isPreprocessed, + const GeneratedCommandsInfoNV & generatedCommandsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindPipelineShaderGroupNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipelineShaderGroupNV.html + template + void bindPipelineShaderGroupNV( PipelineBindPoint pipelineBindPoint, + Pipeline pipeline, + uint32_t groupIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_depth_bias_control === + + // wrapper function for command vkCmdSetDepthBias2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias2EXT.html + template + void setDepthBias2EXT( const DepthBiasInfoEXT * pDepthBiasInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDepthBias2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias2EXT.html + template + void setDepthBias2EXT( const DepthBiasInfoEXT & depthBiasInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkCmdEncodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEncodeVideoKHR.html + template + void encodeVideoKHR( const VideoEncodeInfoKHR * pEncodeInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEncodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEncodeVideoKHR.html + template + void encodeVideoKHR( const VideoEncodeInfoKHR & encodeInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkCmdCudaLaunchKernelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCudaLaunchKernelNV.html + template + void cudaLaunchKernelNV( const CudaLaunchInfoNV * pLaunchInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCudaLaunchKernelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCudaLaunchKernelNV.html + template + void cudaLaunchKernelNV( const CudaLaunchInfoNV & launchInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + + // wrapper function for command vkCmdDispatchTileQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchTileQCOM.html + template + void dispatchTileQCOM( const DispatchTileInfoQCOM * pDispatchTileInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchTileQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchTileQCOM.html + template + void dispatchTileQCOM( const DispatchTileInfoQCOM & dispatchTileInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBeginPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginPerTileExecutionQCOM.html + template + void beginPerTileExecutionQCOM( const PerTileBeginInfoQCOM * pPerTileBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBeginPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginPerTileExecutionQCOM.html + template + void beginPerTileExecutionQCOM( const PerTileBeginInfoQCOM & perTileBeginInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdEndPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndPerTileExecutionQCOM.html + template + void endPerTileExecutionQCOM( const PerTileEndInfoQCOM * pPerTileEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndPerTileExecutionQCOM.html + template + void endPerTileExecutionQCOM( const PerTileEndInfoQCOM & perTileEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_synchronization2 === + + // wrapper function for command vkCmdSetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2KHR.html + template + void setEvent2KHR( Event event, + const DependencyInfo * pDependencyInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2KHR.html + template + void + setEvent2KHR( Event event, const DependencyInfo & dependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2KHR.html + template + void resetEvent2KHR( Event event, PipelineStageFlags2 stageMask, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWaitEvents2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2KHR.html + template + void waitEvents2KHR( uint32_t eventCount, + const Event * pEvents, + const DependencyInfo * pDependencyInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWaitEvents2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2KHR.html + template + void waitEvents2KHR( ArrayProxy const & events, + ArrayProxy const & dependencyInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPipelineBarrier2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2KHR.html + template + void pipelineBarrier2KHR( const DependencyInfo * pDependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPipelineBarrier2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2KHR.html + template + void pipelineBarrier2KHR( const DependencyInfo & dependencyInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteTimestamp2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2KHR.html + template + void writeTimestamp2KHR( PipelineStageFlags2 stage, + QueryPool queryPool, + uint32_t query, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkCmdBindDescriptorBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBuffersEXT.html + template + void bindDescriptorBuffersEXT( uint32_t bufferCount, + const DescriptorBufferBindingInfoEXT * pBindingInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBuffersEXT.html + template + void bindDescriptorBuffersEXT( ArrayProxy const & bindingInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDescriptorBufferOffsetsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html + template + void setDescriptorBufferOffsetsEXT( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t * pBufferIndices, + const DeviceSize * pOffsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDescriptorBufferOffsetsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html + template + void setDescriptorBufferOffsetsEXT( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & bufferIndices, + ArrayProxy const & offsets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.html + template + void bindDescriptorBufferEmbeddedSamplersEXT( PipelineBindPoint pipelineBindPoint, + PipelineLayout layout, + uint32_t set, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_fragment_shading_rate_enums === + + // wrapper function for command vkCmdSetFragmentShadingRateEnumNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateEnumNV.html + template + void setFragmentShadingRateEnumNV( FragmentShadingRateNV shadingRate, + const FragmentShadingRateCombinerOpKHR combinerOps[2], + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksEXT.html + template + void drawMeshTasksEXT( uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectEXT.html + template + void drawMeshTasksIndirectEXT( Buffer buffer, + DeviceSize offset, + uint32_t drawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountEXT.html + template + void drawMeshTasksIndirectCountEXT( Buffer buffer, + DeviceSize offset, + Buffer countBuffer, + DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_copy_commands2 === + + // wrapper function for command vkCmdCopyBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2KHR.html + template + void copyBuffer2KHR( const CopyBufferInfo2 * pCopyBufferInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2KHR.html + template + void copyBuffer2KHR( const CopyBufferInfo2 & copyBufferInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2KHR.html + template + void copyImage2KHR( const CopyImageInfo2 * pCopyImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2KHR.html + template + void copyImage2KHR( const CopyImageInfo2 & copyImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyBufferToImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2KHR.html + template + void copyBufferToImage2KHR( const CopyBufferToImageInfo2 * pCopyBufferToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyBufferToImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2KHR.html + template + void copyBufferToImage2KHR( const CopyBufferToImageInfo2 & copyBufferToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyImageToBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2KHR.html + template + void copyImageToBuffer2KHR( const CopyImageToBufferInfo2 * pCopyImageToBufferInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyImageToBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2KHR.html + template + void copyImageToBuffer2KHR( const CopyImageToBufferInfo2 & copyImageToBufferInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBlitImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2KHR.html + template + void blitImage2KHR( const BlitImageInfo2 * pBlitImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBlitImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2KHR.html + template + void blitImage2KHR( const BlitImageInfo2 & blitImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdResolveImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2KHR.html + template + void resolveImage2KHR( const ResolveImageInfo2 * pResolveImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdResolveImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2KHR.html + template + void resolveImage2KHR( const ResolveImageInfo2 & resolveImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_vertex_input_dynamic_state === + + // wrapper function for command vkCmdSetVertexInputEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetVertexInputEXT.html + template + void setVertexInputEXT( uint32_t vertexBindingDescriptionCount, + const VertexInputBindingDescription2EXT * pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VertexInputAttributeDescription2EXT * pVertexAttributeDescriptions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetVertexInputEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetVertexInputEXT.html + template + void setVertexInputEXT( ArrayProxy const & vertexBindingDescriptions, + ArrayProxy const & vertexAttributeDescriptions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_HUAWEI_subpass_shading === + + // wrapper function for command vkCmdSubpassShadingHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSubpassShadingHUAWEI.html + template + void subpassShadingHUAWEI( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_HUAWEI_invocation_mask === + + // wrapper function for command vkCmdBindInvocationMaskHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindInvocationMaskHUAWEI.html + template + void bindInvocationMaskHUAWEI( ImageView imageView, + ImageLayout imageLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_extended_dynamic_state2 === + + // wrapper function for command vkCmdSetPatchControlPointsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPatchControlPointsEXT.html + template + void setPatchControlPointsEXT( uint32_t patchControlPoints, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizerDiscardEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnableEXT.html + template + void setRasterizerDiscardEnableEXT( Bool32 rasterizerDiscardEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBiasEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnableEXT.html + template + void setDepthBiasEnableEXT( Bool32 depthBiasEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLogicOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEXT.html + template + void setLogicOpEXT( LogicOp logicOp, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveRestartEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnableEXT.html + template + void setPrimitiveRestartEnableEXT( Bool32 primitiveRestartEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_color_write_enable === + + // wrapper function for command vkCmdSetColorWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteEnableEXT.html + template + void setColorWriteEnableEXT( uint32_t attachmentCount, + const Bool32 * pColorWriteEnables, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteEnableEXT.html + template + void setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_ray_tracing_maintenance1 === + + // wrapper function for command vkCmdTraceRaysIndirect2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirect2KHR.html + template + void traceRaysIndirect2KHR( DeviceAddress indirectDeviceAddress, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_multi_draw === + + // wrapper function for command vkCmdDrawMultiEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiEXT.html + template + void drawMultiEXT( uint32_t drawCount, + const MultiDrawInfoEXT * pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDrawMultiEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiEXT.html + template + void drawMultiEXT( StridedArrayProxy const & vertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDrawMultiIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiIndexedEXT.html + template + void drawMultiIndexedEXT( uint32_t drawCount, + const MultiDrawIndexedInfoEXT * pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t * pVertexOffset, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDrawMultiIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiIndexedEXT.html + template + void drawMultiIndexedEXT( StridedArrayProxy const & indexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + Optional vertexOffset VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_opacity_micromap === + + // wrapper function for command vkCmdBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildMicromapsEXT.html + template + void buildMicromapsEXT( uint32_t infoCount, + const MicromapBuildInfoEXT * pInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildMicromapsEXT.html + template + void buildMicromapsEXT( ArrayProxy const & infos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapEXT.html + template + void copyMicromapEXT( const CopyMicromapInfoEXT * pInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapEXT.html + template + void copyMicromapEXT( const CopyMicromapInfoEXT & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMicromapToMemoryEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapToMemoryEXT.html + template + void copyMicromapToMemoryEXT( const CopyMicromapToMemoryInfoEXT * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMicromapToMemoryEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapToMemoryEXT.html + template + void copyMicromapToMemoryEXT( const CopyMicromapToMemoryInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdCopyMemoryToMicromapEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToMicromapEXT.html + template + void copyMemoryToMicromapEXT( const CopyMemoryToMicromapInfoEXT * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMemoryToMicromapEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToMicromapEXT.html + template + void copyMemoryToMicromapEXT( const CopyMemoryToMicromapInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteMicromapsPropertiesEXT.html + template + void writeMicromapsPropertiesEXT( uint32_t micromapCount, + const MicromapEXT * pMicromaps, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteMicromapsPropertiesEXT.html + template + void writeMicromapsPropertiesEXT( ArrayProxy const & micromaps, + QueryType queryType, + QueryPool queryPool, + uint32_t firstQuery, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_HUAWEI_cluster_culling_shader === + + // wrapper function for command vkCmdDrawClusterHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterHUAWEI.html + template + void drawClusterHUAWEI( uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawClusterIndirectHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterIndirectHUAWEI.html + template + void drawClusterIndirectHUAWEI( Buffer buffer, DeviceSize offset, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_copy_memory_indirect === + + // wrapper function for command vkCmdCopyMemoryIndirectNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryIndirectNV.html + template + void copyMemoryIndirectNV( DeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyMemoryToImageIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToImageIndirectNV.html + template + void copyMemoryToImageIndirectNV( DeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + Image dstImage, + ImageLayout dstImageLayout, + const ImageSubresourceLayers * pImageSubresources, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyMemoryToImageIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToImageIndirectNV.html + template + void copyMemoryToImageIndirectNV( DeviceAddress copyBufferAddress, + uint32_t stride, + Image dstImage, + ImageLayout dstImageLayout, + ArrayProxy const & imageSubresources, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_memory_decompression === + + // wrapper function for command vkCmdDecompressMemoryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryNV.html + template + void decompressMemoryNV( uint32_t decompressRegionCount, + const DecompressMemoryRegionNV * pDecompressMemoryRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDecompressMemoryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryNV.html + template + void decompressMemoryNV( ArrayProxy const & decompressMemoryRegions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdDecompressMemoryIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryIndirectCountNV.html + template + void decompressMemoryIndirectCountNV( DeviceAddress indirectCommandsAddress, + DeviceAddress indirectCommandsCountAddress, + uint32_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_generated_commands_compute === + + // wrapper function for command vkCmdUpdatePipelineIndirectBufferNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdatePipelineIndirectBufferNV.html + template + void updatePipelineIndirectBufferNV( PipelineBindPoint pipelineBindPoint, + Pipeline pipeline, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_extended_dynamic_state3 === + + // wrapper function for command vkCmdSetDepthClampEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampEnableEXT.html + template + void setDepthClampEnableEXT( Bool32 depthClampEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPolygonModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPolygonModeEXT.html + template + void setPolygonModeEXT( PolygonMode polygonMode, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizationSamplesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationSamplesEXT.html + template + void setRasterizationSamplesEXT( SampleCountFlagBits rasterizationSamples, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetSampleMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleMaskEXT.html + template + void setSampleMaskEXT( SampleCountFlagBits samples, + const SampleMask * pSampleMask, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetSampleMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleMaskEXT.html + template + void setSampleMaskEXT( SampleCountFlagBits samples, + ArrayProxy const & sampleMask, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetAlphaToCoverageEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToCoverageEnableEXT.html + template + void setAlphaToCoverageEnableEXT( Bool32 alphaToCoverageEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetAlphaToOneEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToOneEnableEXT.html + template + void setAlphaToOneEnableEXT( Bool32 alphaToOneEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLogicOpEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEnableEXT.html + template + void setLogicOpEnableEXT( Bool32 logicOpEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetColorBlendEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEnableEXT.html + template + void setColorBlendEnableEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const Bool32 * pColorBlendEnables, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorBlendEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEnableEXT.html + template + void setColorBlendEnableEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEnables, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetColorBlendEquationEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEquationEXT.html + template + void setColorBlendEquationEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const ColorBlendEquationEXT * pColorBlendEquations, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorBlendEquationEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEquationEXT.html + template + void setColorBlendEquationEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEquations, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetColorWriteMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteMaskEXT.html + template + void setColorWriteMaskEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const ColorComponentFlags * pColorWriteMasks, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorWriteMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteMaskEXT.html + template + void setColorWriteMaskEXT( uint32_t firstAttachment, + ArrayProxy const & colorWriteMasks, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetTessellationDomainOriginEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetTessellationDomainOriginEXT.html + template + void setTessellationDomainOriginEXT( TessellationDomainOrigin domainOrigin, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizationStreamEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationStreamEXT.html + template + void setRasterizationStreamEXT( uint32_t rasterizationStream, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetConservativeRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetConservativeRasterizationModeEXT.html + template + void setConservativeRasterizationModeEXT( ConservativeRasterizationModeEXT conservativeRasterizationMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetExtraPrimitiveOverestimationSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html + template + void setExtraPrimitiveOverestimationSizeEXT( float extraPrimitiveOverestimationSize, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthClipEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipEnableEXT.html + template + void setDepthClipEnableEXT( Bool32 depthClipEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetSampleLocationsEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEnableEXT.html + template + void setSampleLocationsEnableEXT( Bool32 sampleLocationsEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetColorBlendAdvancedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendAdvancedEXT.html + template + void setColorBlendAdvancedEXT( uint32_t firstAttachment, + uint32_t attachmentCount, + const ColorBlendAdvancedEXT * pColorBlendAdvanced, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetColorBlendAdvancedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendAdvancedEXT.html + template + void setColorBlendAdvancedEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendAdvanced, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetProvokingVertexModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetProvokingVertexModeEXT.html + template + void setProvokingVertexModeEXT( ProvokingVertexModeEXT provokingVertexMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLineRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineRasterizationModeEXT.html + template + void setLineRasterizationModeEXT( LineRasterizationModeEXT lineRasterizationMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLineStippleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEnableEXT.html + template + void setLineStippleEnableEXT( Bool32 stippledLineEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthClipNegativeOneToOneEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html + template + void setDepthClipNegativeOneToOneEXT( Bool32 negativeOneToOne, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportWScalingEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingEnableNV.html + template + void setViewportWScalingEnableNV( Bool32 viewportWScalingEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportSwizzleNV.html + template + void setViewportSwizzleNV( uint32_t firstViewport, + uint32_t viewportCount, + const ViewportSwizzleNV * pViewportSwizzles, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportSwizzleNV.html + template + void setViewportSwizzleNV( uint32_t firstViewport, + ArrayProxy const & viewportSwizzles, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetCoverageToColorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorEnableNV.html + template + void setCoverageToColorEnableNV( Bool32 coverageToColorEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageToColorLocationNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorLocationNV.html + template + void setCoverageToColorLocationNV( uint32_t coverageToColorLocation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageModulationModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationModeNV.html + template + void setCoverageModulationModeNV( CoverageModulationModeNV coverageModulationMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageModulationTableEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableEnableNV.html + template + void setCoverageModulationTableEnableNV( Bool32 coverageModulationTableEnable, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageModulationTableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableNV.html + template + void setCoverageModulationTableNV( uint32_t coverageModulationTableCount, + const float * pCoverageModulationTable, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetCoverageModulationTableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableNV.html + template + void setCoverageModulationTableNV( ArrayProxy const & coverageModulationTable, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetShadingRateImageEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetShadingRateImageEnableNV.html + template + void setShadingRateImageEnableNV( Bool32 shadingRateImageEnable, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRepresentativeFragmentTestEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html + template + void setRepresentativeFragmentTestEnableNV( Bool32 representativeFragmentTestEnable, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageReductionModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageReductionModeNV.html + template + void setCoverageReductionModeNV( CoverageReductionModeNV coverageReductionMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_ARM_tensors === + + // wrapper function for command vkCmdCopyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyTensorARM.html + template + void copyTensorARM( const CopyTensorInfoARM * pCopyTensorInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdCopyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyTensorARM.html + template + void copyTensorARM( const CopyTensorInfoARM & copyTensorInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_optical_flow === + + // wrapper function for command vkCmdOpticalFlowExecuteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdOpticalFlowExecuteNV.html + template + void opticalFlowExecuteNV( OpticalFlowSessionNV session, + const OpticalFlowExecuteInfoNV * pExecuteInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdOpticalFlowExecuteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdOpticalFlowExecuteNV.html + template + void opticalFlowExecuteNV( OpticalFlowSessionNV session, + const OpticalFlowExecuteInfoNV & executeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkCmdBindIndexBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2KHR.html + template + void bindIndexBuffer2KHR( Buffer buffer, + DeviceSize offset, + DeviceSize size, + IndexType indexType, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_shader_object === + + // wrapper function for command vkCmdBindShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadersEXT.html + template + void bindShadersEXT( uint32_t stageCount, + const ShaderStageFlagBits * pStages, + const ShaderEXT * pShaders, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadersEXT.html + template + void bindShadersEXT( ArrayProxy const & stages, + ArrayProxy const & shaders, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampRangeEXT.html + template + void setDepthClampRangeEXT( DepthClampModeEXT depthClampMode, + const DepthClampRangeEXT * pDepthClampRange, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampRangeEXT.html + template + void setDepthClampRangeEXT( DepthClampModeEXT depthClampMode, + Optional depthClampRange VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkCmdConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdConvertCooperativeVectorMatrixNV.html + template + void convertCooperativeVectorMatrixNV( uint32_t infoCount, + const ConvertCooperativeVectorMatrixInfoNV * pInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdConvertCooperativeVectorMatrixNV.html + template + void convertCooperativeVectorMatrixNV( ArrayProxy const & infos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_ARM_data_graph === + + // wrapper function for command vkCmdDispatchDataGraphARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchDataGraphARM.html + template + void dispatchDataGraphARM( DataGraphPipelineSessionARM session, + const DataGraphPipelineDispatchInfoARM * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdDispatchDataGraphARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchDataGraphARM.html + template + void dispatchDataGraphARM( DataGraphPipelineSessionARM session, + Optional info VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + + // wrapper function for command vkCmdSetAttachmentFeedbackLoopEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAttachmentFeedbackLoopEnableEXT.html + template + void setAttachmentFeedbackLoopEnableEXT( ImageAspectFlags aspectMask, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleKHR.html + template + void setLineStippleKHR( uint32_t lineStippleFactor, + uint16_t lineStipplePattern, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance6 === + + // wrapper function for command vkCmdBindDescriptorSets2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2KHR.html + template + void bindDescriptorSets2KHR( const BindDescriptorSetsInfo * pBindDescriptorSetsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorSets2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2KHR.html + template + void bindDescriptorSets2KHR( const BindDescriptorSetsInfo & bindDescriptorSetsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushConstants2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2KHR.html + template + void pushConstants2KHR( const PushConstantsInfo * pPushConstantsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushConstants2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2KHR.html + template + void pushConstants2KHR( const PushConstantsInfo & pushConstantsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSet2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2KHR.html + template + void pushDescriptorSet2KHR( const PushDescriptorSetInfo * pPushDescriptorSetInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSet2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2KHR.html + template + void pushDescriptorSet2KHR( const PushDescriptorSetInfo & pushDescriptorSetInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2KHR.html + template + void pushDescriptorSetWithTemplate2KHR( const PushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2KHR.html + template + void pushDescriptorSetWithTemplate2KHR( const PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdSetDescriptorBufferOffsets2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsets2EXT.html + template + void setDescriptorBufferOffsets2EXT( const SetDescriptorBufferOffsetsInfoEXT * pSetDescriptorBufferOffsetsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdSetDescriptorBufferOffsets2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsets2EXT.html + template + void setDescriptorBufferOffsets2EXT( const SetDescriptorBufferOffsetsInfoEXT & setDescriptorBufferOffsetsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplers2EXT.html + template + void bindDescriptorBufferEmbeddedSamplers2EXT( const BindDescriptorBufferEmbeddedSamplersInfoEXT * pBindDescriptorBufferEmbeddedSamplersInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplers2EXT.html + template + void bindDescriptorBufferEmbeddedSamplers2EXT( const BindDescriptorBufferEmbeddedSamplersInfoEXT & bindDescriptorBufferEmbeddedSamplersInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_QCOM_tile_memory_heap === + + // wrapper function for command vkCmdBindTileMemoryQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTileMemoryQCOM.html + template + void bindTileMemoryQCOM( const TileMemoryBindInfoQCOM * pTileMemoryBindInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBindTileMemoryQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTileMemoryQCOM.html + template + void bindTileMemoryQCOM( Optional tileMemoryBindInfo VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper function for command vkCmdBuildClusterAccelerationStructureIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildClusterAccelerationStructureIndirectNV.html + template + void buildClusterAccelerationStructureIndirectNV( const ClusterAccelerationStructureCommandsInfoNV * pCommandInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildClusterAccelerationStructureIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildClusterAccelerationStructureIndirectNV.html + template + void buildClusterAccelerationStructureIndirectNV( const ClusterAccelerationStructureCommandsInfoNV & commandInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper function for command vkCmdBuildPartitionedAccelerationStructuresNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildPartitionedAccelerationStructuresNV.html + template + void buildPartitionedAccelerationStructuresNV( const BuildPartitionedAccelerationStructureInfoNV * pBuildInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdBuildPartitionedAccelerationStructuresNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildPartitionedAccelerationStructuresNV.html + template + void buildPartitionedAccelerationStructuresNV( const BuildPartitionedAccelerationStructureInfoNV & buildInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkCmdPreprocessGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsEXT.html + template + void preprocessGeneratedCommandsEXT( const GeneratedCommandsInfoEXT * pGeneratedCommandsInfo, + CommandBuffer stateCommandBuffer, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdPreprocessGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsEXT.html + template + void preprocessGeneratedCommandsEXT( const GeneratedCommandsInfoEXT & generatedCommandsInfo, + CommandBuffer stateCommandBuffer, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCmdExecuteGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsEXT.html + template + void executeGeneratedCommandsEXT( Bool32 isPreprocessed, + const GeneratedCommandsInfoEXT * pGeneratedCommandsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdExecuteGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsEXT.html + template + void executeGeneratedCommandsEXT( Bool32 isPreprocessed, + const GeneratedCommandsInfoEXT & generatedCommandsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_fragment_density_map_offset === + + // wrapper function for command vkCmdEndRendering2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering2EXT.html + template + void endRendering2EXT( const RenderingEndInfoEXT * pRenderingEndInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCmdEndRendering2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering2EXT.html + template + void endRendering2EXT( Optional renderingEndInfo VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + operator VkCommandBuffer() const VULKAN_HPP_NOEXCEPT + { + return m_commandBuffer; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_commandBuffer != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_commandBuffer == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBuffer const & ) const = default; +#endif + + private: + VkCommandBuffer m_commandBuffer = {}; + }; + + template <> + struct CppType + { + using Type = CommandBuffer; + }; + + template <> + struct CppType + { + using Type = CommandBuffer; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = CommandBuffer; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDeviceMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemory.html + class DeviceMemory + { + public: + using CType = VkDeviceMemory; + using NativeType = VkDeviceMemory; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDeviceMemory; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDeviceMemory; + + public: + DeviceMemory() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DeviceMemory( DeviceMemory const & rhs ) = default; + DeviceMemory & operator=( DeviceMemory const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DeviceMemory( DeviceMemory && rhs ) = default; + DeviceMemory & operator=( DeviceMemory && rhs ) = default; +#else + DeviceMemory( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT : m_deviceMemory( exchange( rhs.m_deviceMemory, {} ) ) {} + + DeviceMemory & operator=( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT + { + m_deviceMemory = exchange( rhs.m_deviceMemory, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DeviceMemory( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DeviceMemory( VkDeviceMemory deviceMemory ) VULKAN_HPP_NOEXCEPT : m_deviceMemory( deviceMemory ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DeviceMemory & operator=( VkDeviceMemory deviceMemory ) VULKAN_HPP_NOEXCEPT + { + m_deviceMemory = deviceMemory; + return *this; + } +#endif + + DeviceMemory & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_deviceMemory = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDeviceMemory() const VULKAN_HPP_NOEXCEPT + { + return m_deviceMemory; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_deviceMemory != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_deviceMemory == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceMemory const & ) const = default; +#endif + + private: + VkDeviceMemory m_deviceMemory = {}; + }; + + template <> + struct CppType + { + using Type = DeviceMemory; + }; + + template <> + struct CppType + { + using Type = DeviceMemory; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DeviceMemory; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionKHR.html + class VideoSessionKHR + { + public: + using CType = VkVideoSessionKHR; + using NativeType = VkVideoSessionKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eVideoSessionKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + VideoSessionKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + VideoSessionKHR( VideoSessionKHR const & rhs ) = default; + VideoSessionKHR & operator=( VideoSessionKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + VideoSessionKHR( VideoSessionKHR && rhs ) = default; + VideoSessionKHR & operator=( VideoSessionKHR && rhs ) = default; +#else + VideoSessionKHR( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_videoSessionKHR( exchange( rhs.m_videoSessionKHR, {} ) ) {} + + VideoSessionKHR & operator=( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_videoSessionKHR = exchange( rhs.m_videoSessionKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR VideoSessionKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT VideoSessionKHR( VkVideoSessionKHR videoSessionKHR ) VULKAN_HPP_NOEXCEPT : m_videoSessionKHR( videoSessionKHR ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + VideoSessionKHR & operator=( VkVideoSessionKHR videoSessionKHR ) VULKAN_HPP_NOEXCEPT + { + m_videoSessionKHR = videoSessionKHR; + return *this; + } +#endif + + VideoSessionKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_videoSessionKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkVideoSessionKHR() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoSessionKHR const & ) const = default; +#endif + + private: + VkVideoSessionKHR m_videoSessionKHR = {}; + }; + + template <> + struct CppType + { + using Type = VideoSessionKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = VideoSessionKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDeferredOperationKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeferredOperationKHR.html + class DeferredOperationKHR + { + public: + using CType = VkDeferredOperationKHR; + using NativeType = VkDeferredOperationKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDeferredOperationKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + DeferredOperationKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DeferredOperationKHR( DeferredOperationKHR const & rhs ) = default; + DeferredOperationKHR & operator=( DeferredOperationKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DeferredOperationKHR( DeferredOperationKHR && rhs ) = default; + DeferredOperationKHR & operator=( DeferredOperationKHR && rhs ) = default; +#else + DeferredOperationKHR( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_deferredOperationKHR( exchange( rhs.m_deferredOperationKHR, {} ) ) {} + + DeferredOperationKHR & operator=( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_deferredOperationKHR = exchange( rhs.m_deferredOperationKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DeferredOperationKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DeferredOperationKHR( VkDeferredOperationKHR deferredOperationKHR ) VULKAN_HPP_NOEXCEPT + : m_deferredOperationKHR( deferredOperationKHR ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DeferredOperationKHR & operator=( VkDeferredOperationKHR deferredOperationKHR ) VULKAN_HPP_NOEXCEPT + { + m_deferredOperationKHR = deferredOperationKHR; + return *this; + } +#endif + + DeferredOperationKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_deferredOperationKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDeferredOperationKHR() const VULKAN_HPP_NOEXCEPT + { + return m_deferredOperationKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_deferredOperationKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_deferredOperationKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeferredOperationKHR const & ) const = default; +#endif + + private: + VkDeferredOperationKHR m_deferredOperationKHR = {}; + }; + + template <> + struct CppType + { + using Type = DeferredOperationKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DeferredOperationKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkBufferCollectionFUCHSIA, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionFUCHSIA.html +#if defined( VK_USE_PLATFORM_FUCHSIA ) + class BufferCollectionFUCHSIA + { + public: + using CType = VkBufferCollectionFUCHSIA; + using NativeType = VkBufferCollectionFUCHSIA; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eBufferCollectionFUCHSIA; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA; + + public: + BufferCollectionFUCHSIA() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + BufferCollectionFUCHSIA( BufferCollectionFUCHSIA const & rhs ) = default; + BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA const & rhs ) = default; + +# if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + BufferCollectionFUCHSIA( BufferCollectionFUCHSIA && rhs ) = default; + BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA && rhs ) = default; +# else + BufferCollectionFUCHSIA( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT : m_bufferCollectionFUCHSIA( exchange( rhs.m_bufferCollectionFUCHSIA, {} ) ) + { + } + + BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT + { + m_bufferCollectionFUCHSIA = exchange( rhs.m_bufferCollectionFUCHSIA, {} ); + return *this; + } +# endif + + VULKAN_HPP_CONSTEXPR BufferCollectionFUCHSIA( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT BufferCollectionFUCHSIA( VkBufferCollectionFUCHSIA bufferCollectionFUCHSIA ) VULKAN_HPP_NOEXCEPT + : m_bufferCollectionFUCHSIA( bufferCollectionFUCHSIA ) + { + } + +# if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + BufferCollectionFUCHSIA & operator=( VkBufferCollectionFUCHSIA bufferCollectionFUCHSIA ) VULKAN_HPP_NOEXCEPT + { + m_bufferCollectionFUCHSIA = bufferCollectionFUCHSIA; + return *this; + } +# endif + + BufferCollectionFUCHSIA & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_bufferCollectionFUCHSIA = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBufferCollectionFUCHSIA() const VULKAN_HPP_NOEXCEPT + { + return m_bufferCollectionFUCHSIA; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_bufferCollectionFUCHSIA != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_bufferCollectionFUCHSIA == VK_NULL_HANDLE; + } + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCollectionFUCHSIA const & ) const = default; +# endif + + private: + VkBufferCollectionFUCHSIA m_bufferCollectionFUCHSIA = {}; + }; + + template <> + struct CppType + { + using Type = BufferCollectionFUCHSIA; + }; + + template <> + struct CppType + { + using Type = BufferCollectionFUCHSIA; + }; + +# if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = BufferCollectionFUCHSIA; + }; +# endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper class for handle VkBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferView.html + class BufferView + { + public: + using CType = VkBufferView; + using NativeType = VkBufferView; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eBufferView; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eBufferView; + + public: + BufferView() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + BufferView( BufferView const & rhs ) = default; + BufferView & operator=( BufferView const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + BufferView( BufferView && rhs ) = default; + BufferView & operator=( BufferView && rhs ) = default; +#else + BufferView( BufferView && rhs ) VULKAN_HPP_NOEXCEPT : m_bufferView( exchange( rhs.m_bufferView, {} ) ) {} + + BufferView & operator=( BufferView && rhs ) VULKAN_HPP_NOEXCEPT + { + m_bufferView = exchange( rhs.m_bufferView, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR BufferView( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT BufferView( VkBufferView bufferView ) VULKAN_HPP_NOEXCEPT : m_bufferView( bufferView ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + BufferView & operator=( VkBufferView bufferView ) VULKAN_HPP_NOEXCEPT + { + m_bufferView = bufferView; + return *this; + } +#endif + + BufferView & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_bufferView = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBufferView() const VULKAN_HPP_NOEXCEPT + { + return m_bufferView; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_bufferView != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_bufferView == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferView const & ) const = default; +#endif + + private: + VkBufferView m_bufferView = {}; + }; + + template <> + struct CppType + { + using Type = BufferView; + }; + + template <> + struct CppType + { + using Type = BufferView; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = BufferView; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPool.html + class CommandPool + { + public: + using CType = VkCommandPool; + using NativeType = VkCommandPool; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eCommandPool; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eCommandPool; + + public: + CommandPool() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + CommandPool( CommandPool const & rhs ) = default; + CommandPool & operator=( CommandPool const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + CommandPool( CommandPool && rhs ) = default; + CommandPool & operator=( CommandPool && rhs ) = default; +#else + CommandPool( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT : m_commandPool( exchange( rhs.m_commandPool, {} ) ) {} + + CommandPool & operator=( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT + { + m_commandPool = exchange( rhs.m_commandPool, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR CommandPool( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT CommandPool( VkCommandPool commandPool ) VULKAN_HPP_NOEXCEPT : m_commandPool( commandPool ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + CommandPool & operator=( VkCommandPool commandPool ) VULKAN_HPP_NOEXCEPT + { + m_commandPool = commandPool; + return *this; + } +#endif + + CommandPool & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_commandPool = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCommandPool() const VULKAN_HPP_NOEXCEPT + { + return m_commandPool; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_commandPool != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_commandPool == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandPool const & ) const = default; +#endif + + private: + VkCommandPool m_commandPool = {}; + }; + + template <> + struct CppType + { + using Type = CommandPool; + }; + + template <> + struct CppType + { + using Type = CommandPool; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = CommandPool; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCache.html + class PipelineCache + { + public: + using CType = VkPipelineCache; + using NativeType = VkPipelineCache; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePipelineCache; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::ePipelineCache; + + public: + PipelineCache() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + PipelineCache( PipelineCache const & rhs ) = default; + PipelineCache & operator=( PipelineCache const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + PipelineCache( PipelineCache && rhs ) = default; + PipelineCache & operator=( PipelineCache && rhs ) = default; +#else + PipelineCache( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT : m_pipelineCache( exchange( rhs.m_pipelineCache, {} ) ) {} + + PipelineCache & operator=( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT + { + m_pipelineCache = exchange( rhs.m_pipelineCache, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR PipelineCache( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT PipelineCache( VkPipelineCache pipelineCache ) VULKAN_HPP_NOEXCEPT : m_pipelineCache( pipelineCache ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + PipelineCache & operator=( VkPipelineCache pipelineCache ) VULKAN_HPP_NOEXCEPT + { + m_pipelineCache = pipelineCache; + return *this; + } +#endif + + PipelineCache & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_pipelineCache = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineCache() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineCache; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineCache != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineCache == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCache const & ) const = default; +#endif + + private: + VkPipelineCache m_pipelineCache = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCache; + }; + + template <> + struct CppType + { + using Type = PipelineCache; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = PipelineCache; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuFunctionNVX.html + class CuFunctionNVX + { + public: + using CType = VkCuFunctionNVX; + using NativeType = VkCuFunctionNVX; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eCuFunctionNVX; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eCuFunctionNVX; + + public: + CuFunctionNVX() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + CuFunctionNVX( CuFunctionNVX const & rhs ) = default; + CuFunctionNVX & operator=( CuFunctionNVX const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + CuFunctionNVX( CuFunctionNVX && rhs ) = default; + CuFunctionNVX & operator=( CuFunctionNVX && rhs ) = default; +#else + CuFunctionNVX( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT : m_cuFunctionNVX( exchange( rhs.m_cuFunctionNVX, {} ) ) {} + + CuFunctionNVX & operator=( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT + { + m_cuFunctionNVX = exchange( rhs.m_cuFunctionNVX, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR CuFunctionNVX( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT CuFunctionNVX( VkCuFunctionNVX cuFunctionNVX ) VULKAN_HPP_NOEXCEPT : m_cuFunctionNVX( cuFunctionNVX ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + CuFunctionNVX & operator=( VkCuFunctionNVX cuFunctionNVX ) VULKAN_HPP_NOEXCEPT + { + m_cuFunctionNVX = cuFunctionNVX; + return *this; + } +#endif + + CuFunctionNVX & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_cuFunctionNVX = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCuFunctionNVX() const VULKAN_HPP_NOEXCEPT + { + return m_cuFunctionNVX; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_cuFunctionNVX != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_cuFunctionNVX == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CuFunctionNVX const & ) const = default; +#endif + + private: + VkCuFunctionNVX m_cuFunctionNVX = {}; + }; + + template <> + struct CppType + { + using Type = CuFunctionNVX; + }; + + template <> + struct CppType + { + using Type = CuFunctionNVX; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = CuFunctionNVX; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuModuleNVX.html + class CuModuleNVX + { + public: + using CType = VkCuModuleNVX; + using NativeType = VkCuModuleNVX; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eCuModuleNVX; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eCuModuleNVX; + + public: + CuModuleNVX() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + CuModuleNVX( CuModuleNVX const & rhs ) = default; + CuModuleNVX & operator=( CuModuleNVX const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + CuModuleNVX( CuModuleNVX && rhs ) = default; + CuModuleNVX & operator=( CuModuleNVX && rhs ) = default; +#else + CuModuleNVX( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT : m_cuModuleNVX( exchange( rhs.m_cuModuleNVX, {} ) ) {} + + CuModuleNVX & operator=( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT + { + m_cuModuleNVX = exchange( rhs.m_cuModuleNVX, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR CuModuleNVX( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT CuModuleNVX( VkCuModuleNVX cuModuleNVX ) VULKAN_HPP_NOEXCEPT : m_cuModuleNVX( cuModuleNVX ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + CuModuleNVX & operator=( VkCuModuleNVX cuModuleNVX ) VULKAN_HPP_NOEXCEPT + { + m_cuModuleNVX = cuModuleNVX; + return *this; + } +#endif + + CuModuleNVX & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_cuModuleNVX = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCuModuleNVX() const VULKAN_HPP_NOEXCEPT + { + return m_cuModuleNVX; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_cuModuleNVX != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_cuModuleNVX == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CuModuleNVX const & ) const = default; +#endif + + private: + VkCuModuleNVX m_cuModuleNVX = {}; + }; + + template <> + struct CppType + { + using Type = CuModuleNVX; + }; + + template <> + struct CppType + { + using Type = CuModuleNVX; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = CuModuleNVX; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaFunctionNV.html +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + class CudaFunctionNV + { + public: + using CType = VkCudaFunctionNV; + using NativeType = VkCudaFunctionNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eCudaFunctionNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eCudaFunctionNV; + + public: + CudaFunctionNV() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + CudaFunctionNV( CudaFunctionNV const & rhs ) = default; + CudaFunctionNV & operator=( CudaFunctionNV const & rhs ) = default; + +# if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + CudaFunctionNV( CudaFunctionNV && rhs ) = default; + CudaFunctionNV & operator=( CudaFunctionNV && rhs ) = default; +# else + CudaFunctionNV( CudaFunctionNV && rhs ) VULKAN_HPP_NOEXCEPT : m_cudaFunctionNV( exchange( rhs.m_cudaFunctionNV, {} ) ) {} + + CudaFunctionNV & operator=( CudaFunctionNV && rhs ) VULKAN_HPP_NOEXCEPT + { + m_cudaFunctionNV = exchange( rhs.m_cudaFunctionNV, {} ); + return *this; + } +# endif + + VULKAN_HPP_CONSTEXPR CudaFunctionNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT CudaFunctionNV( VkCudaFunctionNV cudaFunctionNV ) VULKAN_HPP_NOEXCEPT : m_cudaFunctionNV( cudaFunctionNV ) {} + +# if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + CudaFunctionNV & operator=( VkCudaFunctionNV cudaFunctionNV ) VULKAN_HPP_NOEXCEPT + { + m_cudaFunctionNV = cudaFunctionNV; + return *this; + } +# endif + + CudaFunctionNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_cudaFunctionNV = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCudaFunctionNV() const VULKAN_HPP_NOEXCEPT + { + return m_cudaFunctionNV; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_cudaFunctionNV != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_cudaFunctionNV == VK_NULL_HANDLE; + } + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CudaFunctionNV const & ) const = default; +# endif + + private: + VkCudaFunctionNV m_cudaFunctionNV = {}; + }; + + template <> + struct CppType + { + using Type = CudaFunctionNV; + }; + + template <> + struct CppType + { + using Type = CudaFunctionNV; + }; + +# if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = CudaFunctionNV; + }; +# endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper class for handle VkCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaModuleNV.html +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + class CudaModuleNV + { + public: + using CType = VkCudaModuleNV; + using NativeType = VkCudaModuleNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eCudaModuleNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eCudaModuleNV; + + public: + CudaModuleNV() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + CudaModuleNV( CudaModuleNV const & rhs ) = default; + CudaModuleNV & operator=( CudaModuleNV const & rhs ) = default; + +# if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + CudaModuleNV( CudaModuleNV && rhs ) = default; + CudaModuleNV & operator=( CudaModuleNV && rhs ) = default; +# else + CudaModuleNV( CudaModuleNV && rhs ) VULKAN_HPP_NOEXCEPT : m_cudaModuleNV( exchange( rhs.m_cudaModuleNV, {} ) ) {} + + CudaModuleNV & operator=( CudaModuleNV && rhs ) VULKAN_HPP_NOEXCEPT + { + m_cudaModuleNV = exchange( rhs.m_cudaModuleNV, {} ); + return *this; + } +# endif + + VULKAN_HPP_CONSTEXPR CudaModuleNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT CudaModuleNV( VkCudaModuleNV cudaModuleNV ) VULKAN_HPP_NOEXCEPT : m_cudaModuleNV( cudaModuleNV ) {} + +# if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + CudaModuleNV & operator=( VkCudaModuleNV cudaModuleNV ) VULKAN_HPP_NOEXCEPT + { + m_cudaModuleNV = cudaModuleNV; + return *this; + } +# endif + + CudaModuleNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_cudaModuleNV = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkCudaModuleNV() const VULKAN_HPP_NOEXCEPT + { + return m_cudaModuleNV; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_cudaModuleNV != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_cudaModuleNV == VK_NULL_HANDLE; + } + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CudaModuleNV const & ) const = default; +# endif + + private: + VkCudaModuleNV m_cudaModuleNV = {}; + }; + + template <> + struct CppType + { + using Type = CudaModuleNV; + }; + + template <> + struct CppType + { + using Type = CudaModuleNV; + }; + +# if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = CudaModuleNV; + }; +# endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper class for handle VkDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPool.html + class DescriptorPool + { + public: + using CType = VkDescriptorPool; + using NativeType = VkDescriptorPool; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDescriptorPool; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDescriptorPool; + + public: + DescriptorPool() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DescriptorPool( DescriptorPool const & rhs ) = default; + DescriptorPool & operator=( DescriptorPool const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DescriptorPool( DescriptorPool && rhs ) = default; + DescriptorPool & operator=( DescriptorPool && rhs ) = default; +#else + DescriptorPool( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT : m_descriptorPool( exchange( rhs.m_descriptorPool, {} ) ) {} + + DescriptorPool & operator=( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT + { + m_descriptorPool = exchange( rhs.m_descriptorPool, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DescriptorPool( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorPool( VkDescriptorPool descriptorPool ) VULKAN_HPP_NOEXCEPT : m_descriptorPool( descriptorPool ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DescriptorPool & operator=( VkDescriptorPool descriptorPool ) VULKAN_HPP_NOEXCEPT + { + m_descriptorPool = descriptorPool; + return *this; + } +#endif + + DescriptorPool & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_descriptorPool = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorPool() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorPool; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorPool != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorPool == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorPool const & ) const = default; +#endif + + private: + VkDescriptorPool m_descriptorPool = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorPool; + }; + + template <> + struct CppType + { + using Type = DescriptorPool; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DescriptorPool; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayout.html + class DescriptorSetLayout + { + public: + using CType = VkDescriptorSetLayout; + using NativeType = VkDescriptorSetLayout; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDescriptorSetLayout; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDescriptorSetLayout; + + public: + DescriptorSetLayout() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DescriptorSetLayout( DescriptorSetLayout const & rhs ) = default; + DescriptorSetLayout & operator=( DescriptorSetLayout const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DescriptorSetLayout( DescriptorSetLayout && rhs ) = default; + DescriptorSetLayout & operator=( DescriptorSetLayout && rhs ) = default; +#else + DescriptorSetLayout( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT : m_descriptorSetLayout( exchange( rhs.m_descriptorSetLayout, {} ) ) {} + + DescriptorSetLayout & operator=( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT + { + m_descriptorSetLayout = exchange( rhs.m_descriptorSetLayout, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DescriptorSetLayout( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DescriptorSetLayout( VkDescriptorSetLayout descriptorSetLayout ) VULKAN_HPP_NOEXCEPT + : m_descriptorSetLayout( descriptorSetLayout ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DescriptorSetLayout & operator=( VkDescriptorSetLayout descriptorSetLayout ) VULKAN_HPP_NOEXCEPT + { + m_descriptorSetLayout = descriptorSetLayout; + return *this; + } +#endif + + DescriptorSetLayout & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_descriptorSetLayout = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDescriptorSetLayout() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSetLayout; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSetLayout != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSetLayout == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetLayout const & ) const = default; +#endif + + private: + VkDescriptorSetLayout m_descriptorSetLayout = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetLayout; + }; + + template <> + struct CppType + { + using Type = DescriptorSetLayout; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DescriptorSetLayout; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkExternalComputeQueueNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalComputeQueueNV.html + class ExternalComputeQueueNV + { + public: + using CType = VkExternalComputeQueueNV; + using NativeType = VkExternalComputeQueueNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eExternalComputeQueueNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + ExternalComputeQueueNV() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + ExternalComputeQueueNV( ExternalComputeQueueNV const & rhs ) = default; + ExternalComputeQueueNV & operator=( ExternalComputeQueueNV const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + ExternalComputeQueueNV( ExternalComputeQueueNV && rhs ) = default; + ExternalComputeQueueNV & operator=( ExternalComputeQueueNV && rhs ) = default; +#else + ExternalComputeQueueNV( ExternalComputeQueueNV && rhs ) VULKAN_HPP_NOEXCEPT : m_externalComputeQueueNV( exchange( rhs.m_externalComputeQueueNV, {} ) ) {} + + ExternalComputeQueueNV & operator=( ExternalComputeQueueNV && rhs ) VULKAN_HPP_NOEXCEPT + { + m_externalComputeQueueNV = exchange( rhs.m_externalComputeQueueNV, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR ExternalComputeQueueNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + ExternalComputeQueueNV( VkExternalComputeQueueNV externalComputeQueueNV ) VULKAN_HPP_NOEXCEPT : m_externalComputeQueueNV( externalComputeQueueNV ) {} + + ExternalComputeQueueNV & operator=( VkExternalComputeQueueNV externalComputeQueueNV ) VULKAN_HPP_NOEXCEPT + { + m_externalComputeQueueNV = externalComputeQueueNV; + return *this; + } + + ExternalComputeQueueNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_externalComputeQueueNV = {}; + return *this; + } + + //=== VK_NV_external_compute_queue === + + // wrapper function for command vkGetExternalComputeQueueDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExternalComputeQueueDataNV.html + template + void + getData( ExternalComputeQueueDataParamsNV * params, void * pData, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetExternalComputeQueueDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExternalComputeQueueDataNV.html + template + VULKAN_HPP_NODISCARD std::pair + getData( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + operator VkExternalComputeQueueNV() const VULKAN_HPP_NOEXCEPT + { + return m_externalComputeQueueNV; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_externalComputeQueueNV != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_externalComputeQueueNV == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalComputeQueueNV const & ) const = default; +#endif + + private: + VkExternalComputeQueueNV m_externalComputeQueueNV = {}; + }; + + template <> + struct CppType + { + using Type = ExternalComputeQueueNV; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = ExternalComputeQueueNV; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebuffer.html + class Framebuffer + { + public: + using CType = VkFramebuffer; + using NativeType = VkFramebuffer; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eFramebuffer; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eFramebuffer; + + public: + Framebuffer() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Framebuffer( Framebuffer const & rhs ) = default; + Framebuffer & operator=( Framebuffer const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Framebuffer( Framebuffer && rhs ) = default; + Framebuffer & operator=( Framebuffer && rhs ) = default; +#else + Framebuffer( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT : m_framebuffer( exchange( rhs.m_framebuffer, {} ) ) {} + + Framebuffer & operator=( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT + { + m_framebuffer = exchange( rhs.m_framebuffer, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Framebuffer( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Framebuffer( VkFramebuffer framebuffer ) VULKAN_HPP_NOEXCEPT : m_framebuffer( framebuffer ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Framebuffer & operator=( VkFramebuffer framebuffer ) VULKAN_HPP_NOEXCEPT + { + m_framebuffer = framebuffer; + return *this; + } +#endif + + Framebuffer & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_framebuffer = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkFramebuffer() const VULKAN_HPP_NOEXCEPT + { + return m_framebuffer; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_framebuffer != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_framebuffer == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Framebuffer const & ) const = default; +#endif + + private: + VkFramebuffer m_framebuffer = {}; + }; + + template <> + struct CppType + { + using Type = Framebuffer; + }; + + template <> + struct CppType + { + using Type = Framebuffer; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Framebuffer; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkIndirectCommandsLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutEXT.html + class IndirectCommandsLayoutEXT + { + public: + using CType = VkIndirectCommandsLayoutEXT; + using NativeType = VkIndirectCommandsLayoutEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eIndirectCommandsLayoutEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + IndirectCommandsLayoutEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + IndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT const & rhs ) = default; + IndirectCommandsLayoutEXT & operator=( IndirectCommandsLayoutEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + IndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT && rhs ) = default; + IndirectCommandsLayoutEXT & operator=( IndirectCommandsLayoutEXT && rhs ) = default; +#else + IndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_indirectCommandsLayoutEXT( exchange( rhs.m_indirectCommandsLayoutEXT, {} ) ) + { + } + + IndirectCommandsLayoutEXT & operator=( IndirectCommandsLayoutEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_indirectCommandsLayoutEXT = exchange( rhs.m_indirectCommandsLayoutEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT IndirectCommandsLayoutEXT( VkIndirectCommandsLayoutEXT indirectCommandsLayoutEXT ) VULKAN_HPP_NOEXCEPT + : m_indirectCommandsLayoutEXT( indirectCommandsLayoutEXT ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + IndirectCommandsLayoutEXT & operator=( VkIndirectCommandsLayoutEXT indirectCommandsLayoutEXT ) VULKAN_HPP_NOEXCEPT + { + m_indirectCommandsLayoutEXT = indirectCommandsLayoutEXT; + return *this; + } +#endif + + IndirectCommandsLayoutEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_indirectCommandsLayoutEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkIndirectCommandsLayoutEXT() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsLayoutEXT const & ) const = default; +#endif + + private: + VkIndirectCommandsLayoutEXT m_indirectCommandsLayoutEXT = {}; + }; + + template <> + struct CppType + { + using Type = IndirectCommandsLayoutEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = IndirectCommandsLayoutEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkIndirectCommandsLayoutNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutNV.html + class IndirectCommandsLayoutNV + { + public: + using CType = VkIndirectCommandsLayoutNV; + using NativeType = VkIndirectCommandsLayoutNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eIndirectCommandsLayoutNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + IndirectCommandsLayoutNV() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + IndirectCommandsLayoutNV( IndirectCommandsLayoutNV const & rhs ) = default; + IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + IndirectCommandsLayoutNV( IndirectCommandsLayoutNV && rhs ) = default; + IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV && rhs ) = default; +#else + IndirectCommandsLayoutNV( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_indirectCommandsLayoutNV( exchange( rhs.m_indirectCommandsLayoutNV, {} ) ) + { + } + + IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT + { + m_indirectCommandsLayoutNV = exchange( rhs.m_indirectCommandsLayoutNV, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutNV( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT IndirectCommandsLayoutNV( VkIndirectCommandsLayoutNV indirectCommandsLayoutNV ) VULKAN_HPP_NOEXCEPT + : m_indirectCommandsLayoutNV( indirectCommandsLayoutNV ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + IndirectCommandsLayoutNV & operator=( VkIndirectCommandsLayoutNV indirectCommandsLayoutNV ) VULKAN_HPP_NOEXCEPT + { + m_indirectCommandsLayoutNV = indirectCommandsLayoutNV; + return *this; + } +#endif + + IndirectCommandsLayoutNV & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_indirectCommandsLayoutNV = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkIndirectCommandsLayoutNV() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutNV; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutNV != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutNV == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsLayoutNV const & ) const = default; +#endif + + private: + VkIndirectCommandsLayoutNV m_indirectCommandsLayoutNV = {}; + }; + + template <> + struct CppType + { + using Type = IndirectCommandsLayoutNV; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = IndirectCommandsLayoutNV; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkIndirectExecutionSetEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetEXT.html + class IndirectExecutionSetEXT + { + public: + using CType = VkIndirectExecutionSetEXT; + using NativeType = VkIndirectExecutionSetEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eIndirectExecutionSetEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + IndirectExecutionSetEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + IndirectExecutionSetEXT( IndirectExecutionSetEXT const & rhs ) = default; + IndirectExecutionSetEXT & operator=( IndirectExecutionSetEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + IndirectExecutionSetEXT( IndirectExecutionSetEXT && rhs ) = default; + IndirectExecutionSetEXT & operator=( IndirectExecutionSetEXT && rhs ) = default; +#else + IndirectExecutionSetEXT( IndirectExecutionSetEXT && rhs ) VULKAN_HPP_NOEXCEPT : m_indirectExecutionSetEXT( exchange( rhs.m_indirectExecutionSetEXT, {} ) ) + { + } + + IndirectExecutionSetEXT & operator=( IndirectExecutionSetEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_indirectExecutionSetEXT = exchange( rhs.m_indirectExecutionSetEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR IndirectExecutionSetEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT IndirectExecutionSetEXT( VkIndirectExecutionSetEXT indirectExecutionSetEXT ) VULKAN_HPP_NOEXCEPT + : m_indirectExecutionSetEXT( indirectExecutionSetEXT ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + IndirectExecutionSetEXT & operator=( VkIndirectExecutionSetEXT indirectExecutionSetEXT ) VULKAN_HPP_NOEXCEPT + { + m_indirectExecutionSetEXT = indirectExecutionSetEXT; + return *this; + } +#endif + + IndirectExecutionSetEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_indirectExecutionSetEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkIndirectExecutionSetEXT() const VULKAN_HPP_NOEXCEPT + { + return m_indirectExecutionSetEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_indirectExecutionSetEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_indirectExecutionSetEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectExecutionSetEXT const & ) const = default; +#endif + + private: + VkIndirectExecutionSetEXT m_indirectExecutionSetEXT = {}; + }; + + template <> + struct CppType + { + using Type = IndirectExecutionSetEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = IndirectExecutionSetEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPrivateDataSlot.html + class PrivateDataSlot + { + public: + using CType = VkPrivateDataSlot; + using NativeType = VkPrivateDataSlot; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePrivateDataSlot; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + PrivateDataSlot() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + PrivateDataSlot( PrivateDataSlot const & rhs ) = default; + PrivateDataSlot & operator=( PrivateDataSlot const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + PrivateDataSlot( PrivateDataSlot && rhs ) = default; + PrivateDataSlot & operator=( PrivateDataSlot && rhs ) = default; +#else + PrivateDataSlot( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT : m_privateDataSlot( exchange( rhs.m_privateDataSlot, {} ) ) {} + + PrivateDataSlot & operator=( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT + { + m_privateDataSlot = exchange( rhs.m_privateDataSlot, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR PrivateDataSlot( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT PrivateDataSlot( VkPrivateDataSlot privateDataSlot ) VULKAN_HPP_NOEXCEPT : m_privateDataSlot( privateDataSlot ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + PrivateDataSlot & operator=( VkPrivateDataSlot privateDataSlot ) VULKAN_HPP_NOEXCEPT + { + m_privateDataSlot = privateDataSlot; + return *this; + } +#endif + + PrivateDataSlot & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_privateDataSlot = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPrivateDataSlot() const VULKAN_HPP_NOEXCEPT + { + return m_privateDataSlot; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_privateDataSlot != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_privateDataSlot == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PrivateDataSlot const & ) const = default; +#endif + + private: + VkPrivateDataSlot m_privateDataSlot = {}; + }; + + template <> + struct CppType + { + using Type = PrivateDataSlot; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = PrivateDataSlot; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + using PrivateDataSlotEXT = PrivateDataSlot; + + // wrapper class for handle VkRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPass.html + class RenderPass + { + public: + using CType = VkRenderPass; + using NativeType = VkRenderPass; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eRenderPass; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eRenderPass; + + public: + RenderPass() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + RenderPass( RenderPass const & rhs ) = default; + RenderPass & operator=( RenderPass const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + RenderPass( RenderPass && rhs ) = default; + RenderPass & operator=( RenderPass && rhs ) = default; +#else + RenderPass( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT : m_renderPass( exchange( rhs.m_renderPass, {} ) ) {} + + RenderPass & operator=( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT + { + m_renderPass = exchange( rhs.m_renderPass, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR RenderPass( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT RenderPass( VkRenderPass renderPass ) VULKAN_HPP_NOEXCEPT : m_renderPass( renderPass ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + RenderPass & operator=( VkRenderPass renderPass ) VULKAN_HPP_NOEXCEPT + { + m_renderPass = renderPass; + return *this; + } +#endif + + RenderPass & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_renderPass = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkRenderPass() const VULKAN_HPP_NOEXCEPT + { + return m_renderPass; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_renderPass != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_renderPass == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPass const & ) const = default; +#endif + + private: + VkRenderPass m_renderPass = {}; + }; + + template <> + struct CppType + { + using Type = RenderPass; + }; + + template <> + struct CppType + { + using Type = RenderPass; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = RenderPass; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSampler.html + class Sampler + { + public: + using CType = VkSampler; + using NativeType = VkSampler; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eSampler; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eSampler; + + public: + Sampler() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Sampler( Sampler const & rhs ) = default; + Sampler & operator=( Sampler const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Sampler( Sampler && rhs ) = default; + Sampler & operator=( Sampler && rhs ) = default; +#else + Sampler( Sampler && rhs ) VULKAN_HPP_NOEXCEPT : m_sampler( exchange( rhs.m_sampler, {} ) ) {} + + Sampler & operator=( Sampler && rhs ) VULKAN_HPP_NOEXCEPT + { + m_sampler = exchange( rhs.m_sampler, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Sampler( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT Sampler( VkSampler sampler ) VULKAN_HPP_NOEXCEPT : m_sampler( sampler ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + Sampler & operator=( VkSampler sampler ) VULKAN_HPP_NOEXCEPT + { + m_sampler = sampler; + return *this; + } +#endif + + Sampler & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_sampler = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSampler() const VULKAN_HPP_NOEXCEPT + { + return m_sampler; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_sampler != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_sampler == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Sampler const & ) const = default; +#endif + + private: + VkSampler m_sampler = {}; + }; + + template <> + struct CppType + { + using Type = Sampler; + }; + + template <> + struct CppType + { + using Type = Sampler; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Sampler; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSamplerYcbcrConversion, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrConversion.html + class SamplerYcbcrConversion + { + public: + using CType = VkSamplerYcbcrConversion; + using NativeType = VkSamplerYcbcrConversion; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eSamplerYcbcrConversion; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eSamplerYcbcrConversion; + + public: + SamplerYcbcrConversion() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + SamplerYcbcrConversion( SamplerYcbcrConversion const & rhs ) = default; + SamplerYcbcrConversion & operator=( SamplerYcbcrConversion const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + SamplerYcbcrConversion( SamplerYcbcrConversion && rhs ) = default; + SamplerYcbcrConversion & operator=( SamplerYcbcrConversion && rhs ) = default; +#else + SamplerYcbcrConversion( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT : m_samplerYcbcrConversion( exchange( rhs.m_samplerYcbcrConversion, {} ) ) {} + + SamplerYcbcrConversion & operator=( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT + { + m_samplerYcbcrConversion = exchange( rhs.m_samplerYcbcrConversion, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversion( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT SamplerYcbcrConversion( VkSamplerYcbcrConversion samplerYcbcrConversion ) VULKAN_HPP_NOEXCEPT + : m_samplerYcbcrConversion( samplerYcbcrConversion ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + SamplerYcbcrConversion & operator=( VkSamplerYcbcrConversion samplerYcbcrConversion ) VULKAN_HPP_NOEXCEPT + { + m_samplerYcbcrConversion = samplerYcbcrConversion; + return *this; + } +#endif + + SamplerYcbcrConversion & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_samplerYcbcrConversion = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkSamplerYcbcrConversion() const VULKAN_HPP_NOEXCEPT + { + return m_samplerYcbcrConversion; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_samplerYcbcrConversion != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_samplerYcbcrConversion == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerYcbcrConversion const & ) const = default; +#endif + + private: + VkSamplerYcbcrConversion m_samplerYcbcrConversion = {}; + }; + + template <> + struct CppType + { + using Type = SamplerYcbcrConversion; + }; + + template <> + struct CppType + { + using Type = SamplerYcbcrConversion; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = SamplerYcbcrConversion; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + using SamplerYcbcrConversionKHR = SamplerYcbcrConversion; + + // wrapper class for handle VkShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderModule.html + class ShaderModule + { + public: + using CType = VkShaderModule; + using NativeType = VkShaderModule; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eShaderModule; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eShaderModule; + + public: + ShaderModule() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + ShaderModule( ShaderModule const & rhs ) = default; + ShaderModule & operator=( ShaderModule const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + ShaderModule( ShaderModule && rhs ) = default; + ShaderModule & operator=( ShaderModule && rhs ) = default; +#else + ShaderModule( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT : m_shaderModule( exchange( rhs.m_shaderModule, {} ) ) {} + + ShaderModule & operator=( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT + { + m_shaderModule = exchange( rhs.m_shaderModule, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR ShaderModule( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT ShaderModule( VkShaderModule shaderModule ) VULKAN_HPP_NOEXCEPT : m_shaderModule( shaderModule ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + ShaderModule & operator=( VkShaderModule shaderModule ) VULKAN_HPP_NOEXCEPT + { + m_shaderModule = shaderModule; + return *this; + } +#endif + + ShaderModule & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_shaderModule = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkShaderModule() const VULKAN_HPP_NOEXCEPT + { + return m_shaderModule; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_shaderModule != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_shaderModule == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShaderModule const & ) const = default; +#endif + + private: + VkShaderModule m_shaderModule = {}; + }; + + template <> + struct CppType + { + using Type = ShaderModule; + }; + + template <> + struct CppType + { + using Type = ShaderModule; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = ShaderModule; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorARM.html + class TensorARM + { + public: + using CType = VkTensorARM; + using NativeType = VkTensorARM; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eTensorARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + TensorARM() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + TensorARM( TensorARM const & rhs ) = default; + TensorARM & operator=( TensorARM const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + TensorARM( TensorARM && rhs ) = default; + TensorARM & operator=( TensorARM && rhs ) = default; +#else + TensorARM( TensorARM && rhs ) VULKAN_HPP_NOEXCEPT : m_tensorARM( exchange( rhs.m_tensorARM, {} ) ) {} + + TensorARM & operator=( TensorARM && rhs ) VULKAN_HPP_NOEXCEPT + { + m_tensorARM = exchange( rhs.m_tensorARM, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR TensorARM( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT TensorARM( VkTensorARM tensorARM ) VULKAN_HPP_NOEXCEPT : m_tensorARM( tensorARM ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + TensorARM & operator=( VkTensorARM tensorARM ) VULKAN_HPP_NOEXCEPT + { + m_tensorARM = tensorARM; + return *this; + } +#endif + + TensorARM & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_tensorARM = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkTensorARM() const VULKAN_HPP_NOEXCEPT + { + return m_tensorARM; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_tensorARM != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_tensorARM == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorARM const & ) const = default; +#endif + + private: + VkTensorARM m_tensorARM = {}; + }; + + template <> + struct CppType + { + using Type = TensorARM; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = TensorARM; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorViewARM.html + class TensorViewARM + { + public: + using CType = VkTensorViewARM; + using NativeType = VkTensorViewARM; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eTensorViewARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + TensorViewARM() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + TensorViewARM( TensorViewARM const & rhs ) = default; + TensorViewARM & operator=( TensorViewARM const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + TensorViewARM( TensorViewARM && rhs ) = default; + TensorViewARM & operator=( TensorViewARM && rhs ) = default; +#else + TensorViewARM( TensorViewARM && rhs ) VULKAN_HPP_NOEXCEPT : m_tensorViewARM( exchange( rhs.m_tensorViewARM, {} ) ) {} + + TensorViewARM & operator=( TensorViewARM && rhs ) VULKAN_HPP_NOEXCEPT + { + m_tensorViewARM = exchange( rhs.m_tensorViewARM, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR TensorViewARM( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT TensorViewARM( VkTensorViewARM tensorViewARM ) VULKAN_HPP_NOEXCEPT : m_tensorViewARM( tensorViewARM ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + TensorViewARM & operator=( VkTensorViewARM tensorViewARM ) VULKAN_HPP_NOEXCEPT + { + m_tensorViewARM = tensorViewARM; + return *this; + } +#endif + + TensorViewARM & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_tensorViewARM = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkTensorViewARM() const VULKAN_HPP_NOEXCEPT + { + return m_tensorViewARM; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_tensorViewARM != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_tensorViewARM == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorViewARM const & ) const = default; +#endif + + private: + VkTensorViewARM m_tensorViewARM = {}; + }; + + template <> + struct CppType + { + using Type = TensorViewARM; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = TensorViewARM; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationCacheEXT.html + class ValidationCacheEXT + { + public: + using CType = VkValidationCacheEXT; + using NativeType = VkValidationCacheEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eValidationCacheEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eValidationCacheEXT; + + public: + ValidationCacheEXT() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + ValidationCacheEXT( ValidationCacheEXT const & rhs ) = default; + ValidationCacheEXT & operator=( ValidationCacheEXT const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + ValidationCacheEXT( ValidationCacheEXT && rhs ) = default; + ValidationCacheEXT & operator=( ValidationCacheEXT && rhs ) = default; +#else + ValidationCacheEXT( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT : m_validationCacheEXT( exchange( rhs.m_validationCacheEXT, {} ) ) {} + + ValidationCacheEXT & operator=( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + m_validationCacheEXT = exchange( rhs.m_validationCacheEXT, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR ValidationCacheEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT ValidationCacheEXT( VkValidationCacheEXT validationCacheEXT ) VULKAN_HPP_NOEXCEPT : m_validationCacheEXT( validationCacheEXT ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + ValidationCacheEXT & operator=( VkValidationCacheEXT validationCacheEXT ) VULKAN_HPP_NOEXCEPT + { + m_validationCacheEXT = validationCacheEXT; + return *this; + } +#endif + + ValidationCacheEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_validationCacheEXT = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkValidationCacheEXT() const VULKAN_HPP_NOEXCEPT + { + return m_validationCacheEXT; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_validationCacheEXT != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_validationCacheEXT == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ValidationCacheEXT const & ) const = default; +#endif + + private: + VkValidationCacheEXT m_validationCacheEXT = {}; + }; + + template <> + struct CppType + { + using Type = ValidationCacheEXT; + }; + + template <> + struct CppType + { + using Type = ValidationCacheEXT; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = ValidationCacheEXT; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkVideoSessionParametersKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionParametersKHR.html + class VideoSessionParametersKHR + { + public: + using CType = VkVideoSessionParametersKHR; + using NativeType = VkVideoSessionParametersKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eVideoSessionParametersKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + VideoSessionParametersKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + VideoSessionParametersKHR( VideoSessionParametersKHR const & rhs ) = default; + VideoSessionParametersKHR & operator=( VideoSessionParametersKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + VideoSessionParametersKHR( VideoSessionParametersKHR && rhs ) = default; + VideoSessionParametersKHR & operator=( VideoSessionParametersKHR && rhs ) = default; +#else + VideoSessionParametersKHR( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_videoSessionParametersKHR( exchange( rhs.m_videoSessionParametersKHR, {} ) ) + { + } + + VideoSessionParametersKHR & operator=( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_videoSessionParametersKHR = exchange( rhs.m_videoSessionParametersKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR VideoSessionParametersKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT VideoSessionParametersKHR( VkVideoSessionParametersKHR videoSessionParametersKHR ) VULKAN_HPP_NOEXCEPT + : m_videoSessionParametersKHR( videoSessionParametersKHR ) + { + } + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + VideoSessionParametersKHR & operator=( VkVideoSessionParametersKHR videoSessionParametersKHR ) VULKAN_HPP_NOEXCEPT + { + m_videoSessionParametersKHR = videoSessionParametersKHR; + return *this; + } +#endif + + VideoSessionParametersKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_videoSessionParametersKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkVideoSessionParametersKHR() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionParametersKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionParametersKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionParametersKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoSessionParametersKHR const & ) const = default; +#endif + + private: + VkVideoSessionParametersKHR m_videoSessionParametersKHR = {}; + }; + + template <> + struct CppType + { + using Type = VideoSessionParametersKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = VideoSessionParametersKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryKHR.html + class PipelineBinaryKHR + { + public: + using CType = VkPipelineBinaryKHR; + using NativeType = VkPipelineBinaryKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePipelineBinaryKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eUnknown; + + public: + PipelineBinaryKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + PipelineBinaryKHR( PipelineBinaryKHR const & rhs ) = default; + PipelineBinaryKHR & operator=( PipelineBinaryKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + PipelineBinaryKHR( PipelineBinaryKHR && rhs ) = default; + PipelineBinaryKHR & operator=( PipelineBinaryKHR && rhs ) = default; +#else + PipelineBinaryKHR( PipelineBinaryKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_pipelineBinaryKHR( exchange( rhs.m_pipelineBinaryKHR, {} ) ) {} + + PipelineBinaryKHR & operator=( PipelineBinaryKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_pipelineBinaryKHR = exchange( rhs.m_pipelineBinaryKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR PipelineBinaryKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT PipelineBinaryKHR( VkPipelineBinaryKHR pipelineBinaryKHR ) VULKAN_HPP_NOEXCEPT : m_pipelineBinaryKHR( pipelineBinaryKHR ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + PipelineBinaryKHR & operator=( VkPipelineBinaryKHR pipelineBinaryKHR ) VULKAN_HPP_NOEXCEPT + { + m_pipelineBinaryKHR = pipelineBinaryKHR; + return *this; + } +#endif + + PipelineBinaryKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_pipelineBinaryKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPipelineBinaryKHR() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineBinaryKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineBinaryKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineBinaryKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryKHR const & ) const = default; +#endif + + private: + VkPipelineBinaryKHR m_pipelineBinaryKHR = {}; + }; + + template <> + struct CppType + { + using Type = PipelineBinaryKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = PipelineBinaryKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueue.html + class Queue + { + public: + using CType = VkQueue; + using NativeType = VkQueue; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eQueue; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eQueue; + + public: + Queue() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Queue( Queue const & rhs ) = default; + Queue & operator=( Queue const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Queue( Queue && rhs ) = default; + Queue & operator=( Queue && rhs ) = default; +#else + Queue( Queue && rhs ) VULKAN_HPP_NOEXCEPT : m_queue( exchange( rhs.m_queue, {} ) ) {} + + Queue & operator=( Queue && rhs ) VULKAN_HPP_NOEXCEPT + { + m_queue = exchange( rhs.m_queue, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Queue( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + Queue( VkQueue queue ) VULKAN_HPP_NOEXCEPT : m_queue( queue ) {} + + Queue & operator=( VkQueue queue ) VULKAN_HPP_NOEXCEPT + { + m_queue = queue; + return *this; + } + + Queue & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_queue = {}; + return *this; + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkQueueSubmit, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit.html + template + VULKAN_HPP_NODISCARD Result submit( uint32_t submitCount, + const SubmitInfo * pSubmits, + Fence fence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSubmit, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type submit( ArrayProxy const & submits, + Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueWaitIdle.html + template + VULKAN_HPP_NODISCARD Result waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkQueueWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueWaitIdle.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkQueueBindSparse, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBindSparse.html + template + VULKAN_HPP_NODISCARD Result bindSparse( uint32_t bindInfoCount, + const BindSparseInfo * pBindInfo, + Fence fence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueBindSparse, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBindSparse.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindSparse( ArrayProxy const & bindInfo, + Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkQueueSubmit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2.html + template + VULKAN_HPP_NODISCARD Result submit2( uint32_t submitCount, + const SubmitInfo2 * pSubmits, + Fence fence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSubmit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type submit2( ArrayProxy const & submits, + Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_swapchain === + + // wrapper function for command vkQueuePresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueuePresentKHR.html + template + VULKAN_HPP_NODISCARD Result presentKHR( const PresentInfoKHR * pPresentInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueuePresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueuePresentKHR.html + template + VULKAN_HPP_NODISCARD Result presentKHR( const PresentInfoKHR & presentInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkQueueBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBeginDebugUtilsLabelEXT.html + template + void beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBeginDebugUtilsLabelEXT.html + template + void beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkQueueEndDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueEndDebugUtilsLabelEXT.html + template + void endDebugUtilsLabelEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkQueueInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueInsertDebugUtilsLabelEXT.html + template + void insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT * pLabelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueInsertDebugUtilsLabelEXT.html + template + void insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_device_diagnostic_checkpoints === + + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + template + void getCheckpointDataNV( uint32_t * pCheckpointDataCount, + CheckpointDataNV * pCheckpointData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getCheckpointDataNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + template + void getCheckpointData2NV( uint32_t * pCheckpointDataCount, + CheckpointData2NV * pCheckpointData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getCheckpointData2NV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_INTEL_performance_query === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSetPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSetPerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD Result setPerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkQueueSetPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSetPerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setPerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_synchronization2 === + + // wrapper function for command vkQueueSubmit2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2KHR.html + template + VULKAN_HPP_NODISCARD Result submit2KHR( uint32_t submitCount, + const SubmitInfo2 * pSubmits, + Fence fence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueSubmit2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2KHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + submit2KHR( ArrayProxy const & submits, + Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_low_latency2 === + + // wrapper function for command vkQueueNotifyOutOfBandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueNotifyOutOfBandNV.html + template + void notifyOutOfBandNV( const OutOfBandQueueTypeInfoNV * pQueueTypeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkQueueNotifyOutOfBandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueNotifyOutOfBandNV.html + template + void notifyOutOfBandNV( const OutOfBandQueueTypeInfoNV & queueTypeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + operator VkQueue() const VULKAN_HPP_NOEXCEPT + { + return m_queue; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_queue != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_queue == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Queue const & ) const = default; +#endif + + private: + VkQueue m_queue = {}; + }; + + template <> + struct CppType + { + using Type = Queue; + }; + + template <> + struct CppType + { + using Type = Queue; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Queue; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDevice.html + class Device + { + public: + using CType = VkDevice; + using NativeType = VkDevice; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDevice; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDevice; + + public: + Device() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Device( Device const & rhs ) = default; + Device & operator=( Device const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Device( Device && rhs ) = default; + Device & operator=( Device && rhs ) = default; +#else + Device( Device && rhs ) VULKAN_HPP_NOEXCEPT : m_device( exchange( rhs.m_device, {} ) ) {} + + Device & operator=( Device && rhs ) VULKAN_HPP_NOEXCEPT + { + m_device = exchange( rhs.m_device, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Device( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + Device( VkDevice device ) VULKAN_HPP_NOEXCEPT : m_device( device ) {} + + Device & operator=( VkDevice device ) VULKAN_HPP_NOEXCEPT + { + m_device = device; + return *this; + } + + Device & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_device = {}; + return *this; + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetDeviceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceProcAddr.html + template + PFN_vkVoidFunction getProcAddr( const char * pName, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceProcAddr.html + template + PFN_VoidFunction getProcAddr( const std::string & name, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDevice.html + template + void destroy( const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDevice.html + template + void destroy( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue.html + template + void getQueue( uint32_t queueFamilyIndex, + uint32_t queueIndex, + Queue * pQueue, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue.html + template + VULKAN_HPP_NODISCARD Queue getQueue( uint32_t queueFamilyIndex, + uint32_t queueIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDeviceWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeviceWaitIdle.html + template + VULKAN_HPP_NODISCARD Result waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkDeviceWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeviceWaitIdle.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + template + VULKAN_HPP_NODISCARD Result allocateMemory( const MemoryAllocateInfo * pAllocateInfo, + const AllocationCallbacks * pAllocator, + DeviceMemory * pMemory, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + allocateMemory( const MemoryAllocateInfo & allocateInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + allocateMemoryUnique( const MemoryAllocateInfo & allocateInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + void freeMemory( DeviceMemory memory, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + void freeMemory( DeviceMemory memory VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + void( free )( DeviceMemory memory, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeMemory.html + template + void( free )( DeviceMemory memory, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkMapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory.html + template + VULKAN_HPP_NODISCARD Result mapMemory( DeviceMemory memory, + DeviceSize offset, + DeviceSize size, + MemoryMapFlags flags, + void ** ppData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type mapMemory( DeviceMemory memory, + DeviceSize offset, + DeviceSize size, + MemoryMapFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUnmapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory.html + template + void unmapMemory( DeviceMemory memory, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkFlushMappedMemoryRanges, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFlushMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD Result flushMappedMemoryRanges( uint32_t memoryRangeCount, + const MappedMemoryRange * pMemoryRanges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFlushMappedMemoryRanges, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFlushMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + flushMappedMemoryRanges( ArrayProxy const & memoryRanges, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkInvalidateMappedMemoryRanges, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInvalidateMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD Result invalidateMappedMemoryRanges( uint32_t memoryRangeCount, + const MappedMemoryRange * pMemoryRanges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkInvalidateMappedMemoryRanges, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInvalidateMappedMemoryRanges.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMemoryCommitment, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryCommitment.html + template + void getMemoryCommitment( DeviceMemory memory, + DeviceSize * pCommittedMemoryInBytes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMemoryCommitment, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryCommitment.html + template + VULKAN_HPP_NODISCARD DeviceSize getMemoryCommitment( DeviceMemory memory, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindBufferMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory.html + template + VULKAN_HPP_NODISCARD Result bindBufferMemory( Buffer buffer, + DeviceMemory memory, + DeviceSize memoryOffset, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkBindBufferMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindBufferMemory( Buffer buffer, DeviceMemory memory, DeviceSize memoryOffset, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindImageMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory.html + template + VULKAN_HPP_NODISCARD Result bindImageMemory( Image image, + DeviceMemory memory, + DeviceSize memoryOffset, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkBindImageMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindImageMemory( Image image, DeviceMemory memory, DeviceSize memoryOffset, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements.html + template + void getBufferMemoryRequirements( Buffer buffer, + MemoryRequirements * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD MemoryRequirements + getBufferMemoryRequirements( Buffer buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements.html + template + void getImageMemoryRequirements( Image image, + MemoryRequirements * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD MemoryRequirements getImageMemoryRequirements( Image image, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + template + void getImageSparseMemoryRequirements( Image image, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements * pSparseMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + template < + typename SparseImageMemoryRequirementsAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements( Image image, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + template < + typename SparseImageMemoryRequirementsAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements( Image image, + SparseImageMemoryRequirementsAllocator & sparseImageMemoryRequirementsAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + template + VULKAN_HPP_NODISCARD Result createFence( const FenceCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Fence * pFence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createFence( const FenceCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createFenceUnique( const FenceCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + void destroyFence( Fence fence, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + void destroyFence( Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + void destroy( Fence fence, const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFence.html + template + void destroy( Fence fence, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkResetFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetFences.html + template + VULKAN_HPP_NODISCARD Result resetFences( uint32_t fenceCount, + const Fence * pFences, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetFences.html + template + typename ResultValueType::type resetFences( ArrayProxy const & fences, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFenceStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceStatus.html + template + VULKAN_HPP_NODISCARD Result getFenceStatus( Fence fence, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkGetFenceStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceStatus.html + template + VULKAN_HPP_NODISCARD Result getFenceStatus( Fence fence, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkWaitForFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForFences.html + template + VULKAN_HPP_NODISCARD Result waitForFences( uint32_t fenceCount, + const Fence * pFences, + Bool32 waitAll, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitForFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForFences.html + template + VULKAN_HPP_NODISCARD Result waitForFences( ArrayProxy const & fences, + Bool32 waitAll, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + template + VULKAN_HPP_NODISCARD Result createSemaphore( const SemaphoreCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Semaphore * pSemaphore, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSemaphore( const SemaphoreCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSemaphoreUnique( const SemaphoreCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + void destroySemaphore( Semaphore semaphore, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + void destroySemaphore( Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + void destroy( Semaphore semaphore, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySemaphore.html + template + void destroy( Semaphore semaphore, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + template + VULKAN_HPP_NODISCARD Result createEvent( const EventCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Event * pEvent, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createEvent( const EventCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createEventUnique( const EventCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + void destroyEvent( Event event, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + void destroyEvent( Event event VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + void destroy( Event event, const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyEvent.html + template + void destroy( Event event, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetEventStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEventStatus.html + template + VULKAN_HPP_NODISCARD Result getEventStatus( Event event, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkGetEventStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEventStatus.html + template + VULKAN_HPP_NODISCARD Result getEventStatus( Event event, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetEvent.html + template + VULKAN_HPP_NODISCARD Result setEvent( Event event, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetEvent.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type setEvent( Event event, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetEvent.html + template + VULKAN_HPP_NODISCARD Result resetEvent( Event event, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetEvent.html + template + typename ResultValueType::type resetEvent( Event event, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + template + VULKAN_HPP_NODISCARD Result createQueryPool( const QueryPoolCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + QueryPool * pQueryPool, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createQueryPool( const QueryPoolCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createQueryPoolUnique( const QueryPoolCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + void destroyQueryPool( QueryPool queryPool, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + void destroyQueryPool( QueryPool queryPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + void destroy( QueryPool queryPool, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyQueryPool.html + template + void destroy( QueryPool queryPool, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD Result getQueryPoolResults( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + void * pData, + DeviceSize stride, + QueryResultFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + getQueryPoolResults( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + DeviceSize stride, + QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD ResultValue getQueryPoolResult( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + DeviceSize stride, + QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + template + VULKAN_HPP_NODISCARD Result createBuffer( const BufferCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Buffer * pBuffer, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createBuffer( const BufferCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createBufferUnique( const BufferCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + void destroyBuffer( Buffer buffer, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + void destroyBuffer( Buffer buffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + void + destroy( Buffer buffer, const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBuffer.html + template + void destroy( Buffer buffer, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + template + VULKAN_HPP_NODISCARD Result createBufferView( const BufferViewCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + BufferView * pView, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createBufferView( const BufferViewCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createBufferViewUnique( const BufferViewCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + void destroyBufferView( BufferView bufferView, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + void destroyBufferView( BufferView bufferView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + void destroy( BufferView bufferView, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferView.html + template + void destroy( BufferView bufferView, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + template + VULKAN_HPP_NODISCARD Result createImage( const ImageCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Image * pImage, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createImage( const ImageCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createImageUnique( const ImageCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + void destroyImage( Image image, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + void destroyImage( Image image VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + void destroy( Image image, const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImage.html + template + void destroy( Image image, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout.html + template + void getImageSubresourceLayout( Image image, + const ImageSubresource * pSubresource, + SubresourceLayout * pLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD SubresourceLayout getImageSubresourceLayout( Image image, + const ImageSubresource & subresource, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + template + VULKAN_HPP_NODISCARD Result createImageView( const ImageViewCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + ImageView * pView, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createImageView( const ImageViewCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createImageViewUnique( const ImageViewCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + void destroyImageView( ImageView imageView, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + void destroyImageView( ImageView imageView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + void destroy( ImageView imageView, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyImageView.html + template + void destroy( ImageView imageView, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + template + VULKAN_HPP_NODISCARD Result createShaderModule( const ShaderModuleCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + ShaderModule * pShaderModule, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createShaderModule( const ShaderModuleCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createShaderModuleUnique( const ShaderModuleCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + void destroyShaderModule( ShaderModule shaderModule, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + void destroyShaderModule( ShaderModule shaderModule VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + void destroy( ShaderModule shaderModule, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderModule.html + template + void destroy( ShaderModule shaderModule, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + template + VULKAN_HPP_NODISCARD Result createPipelineCache( const PipelineCacheCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PipelineCache * pPipelineCache, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createPipelineCache( const PipelineCacheCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createPipelineCacheUnique( const PipelineCacheCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + void destroyPipelineCache( PipelineCache pipelineCache, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + void destroyPipelineCache( PipelineCache pipelineCache VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + void destroy( PipelineCache pipelineCache, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineCache.html + template + void destroy( PipelineCache pipelineCache, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + template + VULKAN_HPP_NODISCARD Result getPipelineCacheData( PipelineCache pipelineCache, + size_t * pDataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPipelineCacheData( PipelineCache pipelineCache, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getPipelineCacheData( + PipelineCache pipelineCache, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkMergePipelineCaches, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergePipelineCaches.html + template + VULKAN_HPP_NODISCARD Result mergePipelineCaches( PipelineCache dstCache, + uint32_t srcCacheCount, + const PipelineCache * pSrcCaches, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMergePipelineCaches, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergePipelineCaches.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type mergePipelineCaches( + PipelineCache dstCache, ArrayProxy const & srcCaches, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template + VULKAN_HPP_NODISCARD Result createGraphicsPipelines( PipelineCache pipelineCache, + uint32_t createInfoCount, + const GraphicsPipelineCreateInfo * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createGraphicsPipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createGraphicsPipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template + VULKAN_HPP_NODISCARD ResultValue + createGraphicsPipeline( PipelineCache pipelineCache, + const GraphicsPipelineCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createGraphicsPipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createGraphicsPipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + template + VULKAN_HPP_NODISCARD ResultValue> + createGraphicsPipelineUnique( PipelineCache pipelineCache, + const GraphicsPipelineCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template + VULKAN_HPP_NODISCARD Result createComputePipelines( PipelineCache pipelineCache, + uint32_t createInfoCount, + const ComputePipelineCreateInfo * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createComputePipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createComputePipelines( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template + VULKAN_HPP_NODISCARD ResultValue + createComputePipeline( PipelineCache pipelineCache, + const ComputePipelineCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createComputePipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createComputePipelinesUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + template + VULKAN_HPP_NODISCARD ResultValue> + createComputePipelineUnique( PipelineCache pipelineCache, + const ComputePipelineCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + void destroyPipeline( Pipeline pipeline, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + void destroyPipeline( Pipeline pipeline VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + void destroy( Pipeline pipeline, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipeline.html + template + void destroy( Pipeline pipeline, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + template + VULKAN_HPP_NODISCARD Result createPipelineLayout( const PipelineLayoutCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PipelineLayout * pPipelineLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createPipelineLayout( const PipelineLayoutCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createPipelineLayoutUnique( const PipelineLayoutCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + void destroyPipelineLayout( PipelineLayout pipelineLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + void destroyPipelineLayout( PipelineLayout pipelineLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + void destroy( PipelineLayout pipelineLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineLayout.html + template + void destroy( PipelineLayout pipelineLayout, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + template + VULKAN_HPP_NODISCARD Result createSampler( const SamplerCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Sampler * pSampler, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSampler( const SamplerCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSamplerUnique( const SamplerCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + void destroySampler( Sampler sampler, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + void destroySampler( Sampler sampler VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + void + destroy( Sampler sampler, const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySampler.html + template + void destroy( Sampler sampler, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + template + VULKAN_HPP_NODISCARD Result createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorSetLayout * pSetLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDescriptorSetLayoutUnique( const DescriptorSetLayoutCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorSetLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorSetLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + void destroyDescriptorSetLayout( DescriptorSetLayout descriptorSetLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorSetLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + void destroy( DescriptorSetLayout descriptorSetLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorSetLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorSetLayout.html + template + void destroy( DescriptorSetLayout descriptorSetLayout, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + template + VULKAN_HPP_NODISCARD Result createDescriptorPool( const DescriptorPoolCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorPool * pDescriptorPool, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDescriptorPool( const DescriptorPoolCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDescriptorPoolUnique( const DescriptorPoolCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + void destroyDescriptorPool( DescriptorPool descriptorPool, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + void destroyDescriptorPool( DescriptorPool descriptorPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + void destroy( DescriptorPool descriptorPool, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorPool.html + template + void destroy( DescriptorPool descriptorPool, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetDescriptorPool.html + template + Result resetDescriptorPool( DescriptorPool descriptorPool, + DescriptorPoolResetFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkResetDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetDescriptorPool.html + template + void resetDescriptorPool( DescriptorPool descriptorPool, + DescriptorPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template + VULKAN_HPP_NODISCARD Result allocateDescriptorSets( const DescriptorSetAllocateInfo * pAllocateInfo, + DescriptorSet * pDescriptorSets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo, + DescriptorSetAllocator & descriptorSetAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, DescriptorSetAllocator>>::type + allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, DescriptorSetAllocator>>::type + allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo, + DescriptorSetAllocator & descriptorSetAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + Result freeDescriptorSets( DescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const DescriptorSet * pDescriptorSets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + void freeDescriptorSets( DescriptorPool descriptorPool, + ArrayProxy const & descriptorSets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + Result( free )( DescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const DescriptorSet * pDescriptorSets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeDescriptorSets.html + template + void( free )( DescriptorPool descriptorPool, + ArrayProxy const & descriptorSets, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSets.html + template + void updateDescriptorSets( uint32_t descriptorWriteCount, + const WriteDescriptorSet * pDescriptorWrites, + uint32_t descriptorCopyCount, + const CopyDescriptorSet * pDescriptorCopies, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSets.html + template + void updateDescriptorSets( ArrayProxy const & descriptorWrites, + ArrayProxy const & descriptorCopies, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + template + VULKAN_HPP_NODISCARD Result createFramebuffer( const FramebufferCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Framebuffer * pFramebuffer, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createFramebuffer( const FramebufferCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createFramebufferUnique( const FramebufferCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + void destroyFramebuffer( Framebuffer framebuffer, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + void destroyFramebuffer( Framebuffer framebuffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + void destroy( Framebuffer framebuffer, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyFramebuffer.html + template + void destroy( Framebuffer framebuffer, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + template + VULKAN_HPP_NODISCARD Result createRenderPass( const RenderPassCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + RenderPass * pRenderPass, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createRenderPass( const RenderPassCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createRenderPassUnique( const RenderPassCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + void destroyRenderPass( RenderPass renderPass, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + void destroyRenderPass( RenderPass renderPass VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + void destroy( RenderPass renderPass, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyRenderPass.html + template + void destroy( RenderPass renderPass, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRenderAreaGranularity, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderAreaGranularity.html + template + void getRenderAreaGranularity( RenderPass renderPass, + Extent2D * pGranularity, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRenderAreaGranularity, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderAreaGranularity.html + template + VULKAN_HPP_NODISCARD Extent2D getRenderAreaGranularity( RenderPass renderPass, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + template + VULKAN_HPP_NODISCARD Result createCommandPool( const CommandPoolCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + CommandPool * pCommandPool, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createCommandPool( const CommandPoolCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createCommandPoolUnique( const CommandPoolCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + void destroyCommandPool( CommandPool commandPool, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + void destroyCommandPool( CommandPool commandPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + void destroy( CommandPool commandPool, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCommandPool.html + template + void destroy( CommandPool commandPool, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkResetCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandPool.html + template + VULKAN_HPP_NODISCARD Result resetCommandPool( CommandPool commandPool, + CommandPoolResetFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkResetCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandPool.html + template + typename ResultValueType::type resetCommandPool( CommandPool commandPool, + CommandPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template + VULKAN_HPP_NODISCARD Result allocateCommandBuffers( const CommandBufferAllocateInfo * pAllocateInfo, + CommandBuffer * pCommandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo, + CommandBufferAllocator & commandBufferAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, CommandBufferAllocator>>::type + allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, CommandBufferAllocator>>::type + allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo, + CommandBufferAllocator & commandBufferAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + void freeCommandBuffers( CommandPool commandPool, + uint32_t commandBufferCount, + const CommandBuffer * pCommandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + void freeCommandBuffers( CommandPool commandPool, + ArrayProxy const & commandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + void( free )( CommandPool commandPool, + uint32_t commandBufferCount, + const CommandBuffer * pCommandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkFreeCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFreeCommandBuffers.html + template + void( free )( CommandPool commandPool, + ArrayProxy const & commandBuffers, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkBindBufferMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2.html + template + VULKAN_HPP_NODISCARD Result bindBufferMemory2( uint32_t bindInfoCount, + const BindBufferMemoryInfo * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindBufferMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindBufferMemory2( ArrayProxy const & bindInfos, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindImageMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2.html + template + VULKAN_HPP_NODISCARD Result bindImageMemory2( uint32_t bindInfoCount, + const BindImageMemoryInfo * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindImageMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindImageMemory2( ArrayProxy const & bindInfos, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeatures.html + template + void getGroupPeerMemoryFeatures( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + PeerMemoryFeatureFlags * pPeerMemoryFeatures, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupPeerMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeatures.html + template + VULKAN_HPP_NODISCARD PeerMemoryFeatureFlags + getGroupPeerMemoryFeatures( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + void getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getImageMemoryRequirements2( + const ImageMemoryRequirementsInfo2 & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + void getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getBufferMemoryRequirements2( + const BufferMemoryRequirementsInfo2 & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + template + void getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkTrimCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPool.html + template + void trimCommandPool( CommandPool commandPool, + CommandPoolTrimFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceQueue2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue2.html + template + void + getQueue2( const DeviceQueueInfo2 * pQueueInfo, Queue * pQueue, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceQueue2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue2.html + template + VULKAN_HPP_NODISCARD Queue getQueue2( const DeviceQueueInfo2 & queueInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + template + VULKAN_HPP_NODISCARD Result createSamplerYcbcrConversion( const SamplerYcbcrConversionCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + SamplerYcbcrConversion * pYcbcrConversion, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSamplerYcbcrConversion( const SamplerYcbcrConversionCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSamplerYcbcrConversionUnique( const SamplerYcbcrConversionCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + void destroySamplerYcbcrConversion( SamplerYcbcrConversion ycbcrConversion, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + void destroySamplerYcbcrConversion( SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + void destroy( SamplerYcbcrConversion ycbcrConversion, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversion.html + template + void destroy( SamplerYcbcrConversion ycbcrConversion, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + template + VULKAN_HPP_NODISCARD Result createDescriptorUpdateTemplate( const DescriptorUpdateTemplateCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorUpdateTemplate * pDescriptorUpdateTemplate, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDescriptorUpdateTemplate( const DescriptorUpdateTemplateCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDescriptorUpdateTemplateUnique( const DescriptorUpdateTemplateCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + void destroyDescriptorUpdateTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + void destroyDescriptorUpdateTemplate( DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + void destroy( DescriptorUpdateTemplate descriptorUpdateTemplate, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplate.html + template + void destroy( DescriptorUpdateTemplate descriptorUpdateTemplate, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplate.html + template + void updateDescriptorSetWithTemplate( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + const void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplate.html + template + void updateDescriptorSetWithTemplate( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + DataType const & data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + void getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo * pCreateInfo, + DescriptorSetLayoutSupport * pSupport, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_NODISCARD DescriptorSetLayoutSupport getDescriptorSetLayoutSupport( + const DescriptorSetLayoutCreateInfo & createInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_NODISCARD StructureChain + getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + template + VULKAN_HPP_NODISCARD Result createRenderPass2( const RenderPassCreateInfo2 * pCreateInfo, + const AllocationCallbacks * pAllocator, + RenderPass * pRenderPass, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createRenderPass2( const RenderPassCreateInfo2 & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createRenderPass2Unique( const RenderPassCreateInfo2 & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPool.html + template + void resetQueryPool( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetSemaphoreCounterValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValue.html + template + VULKAN_HPP_NODISCARD Result getSemaphoreCounterValue( Semaphore semaphore, + uint64_t * pValue, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreCounterValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValue.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getSemaphoreCounterValue( Semaphore semaphore, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWaitSemaphores, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphores.html + template + VULKAN_HPP_NODISCARD Result waitSemaphores( const SemaphoreWaitInfo * pWaitInfo, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitSemaphores, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphores.html + template + VULKAN_HPP_NODISCARD Result waitSemaphores( const SemaphoreWaitInfo & waitInfo, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSignalSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphore.html + template + VULKAN_HPP_NODISCARD Result signalSemaphore( const SemaphoreSignalInfo * pSignalInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSignalSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphore.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + signalSemaphore( const SemaphoreSignalInfo & signalInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferDeviceAddress, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddress.html + template + DeviceAddress getBufferAddress( const BufferDeviceAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferDeviceAddress, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddress.html + template + DeviceAddress getBufferAddress( const BufferDeviceAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddress.html + template + uint64_t getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddress.html + template + uint64_t getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html + template + uint64_t getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html + template + uint64_t getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + template + VULKAN_HPP_NODISCARD Result createPrivateDataSlot( const PrivateDataSlotCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PrivateDataSlot * pPrivateDataSlot, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createPrivateDataSlot( const PrivateDataSlotCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createPrivateDataSlotUnique( const PrivateDataSlotCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + void destroyPrivateDataSlot( PrivateDataSlot privateDataSlot, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + void destroyPrivateDataSlot( PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + void destroy( PrivateDataSlot privateDataSlot, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlot.html + template + void destroy( PrivateDataSlot privateDataSlot, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateData.html + template + VULKAN_HPP_NODISCARD Result setPrivateData( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + uint64_t data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkSetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateData.html + template + typename ResultValueType::type setPrivateData( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + uint64_t data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateData.html + template + void getPrivateData( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + uint64_t * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateData.html + template + VULKAN_HPP_NODISCARD uint64_t getPrivateData( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + void getBufferMemoryRequirements( const DeviceBufferMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getBufferMemoryRequirements( + const DeviceBufferMemoryRequirements & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirements( const DeviceBufferMemoryRequirements & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + void getImageMemoryRequirements( const DeviceImageMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getImageMemoryRequirements( + const DeviceImageMemoryRequirements & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirements( const DeviceImageMemoryRequirements & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + template + void getImageSparseMemoryRequirements( const DeviceImageMemoryRequirements * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements( const DeviceImageMemoryRequirements & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements( const DeviceImageMemoryRequirements & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkMapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2.html + template + VULKAN_HPP_NODISCARD Result mapMemory2( const MemoryMapInfo * pMemoryMapInfo, + void ** ppData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type mapMemory2( const MemoryMapInfo & memoryMapInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUnmapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2.html + template + VULKAN_HPP_NODISCARD Result unmapMemory2( const MemoryUnmapInfo * pMemoryUnmapInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUnmapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2.html + template + typename ResultValueType::type unmapMemory2( const MemoryUnmapInfo & memoryUnmapInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRenderingAreaGranularity, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularity.html + template + void getRenderingAreaGranularity( const RenderingAreaInfo * pRenderingAreaInfo, + Extent2D * pGranularity, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRenderingAreaGranularity, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularity.html + template + VULKAN_HPP_NODISCARD Extent2D getRenderingAreaGranularity( const RenderingAreaInfo & renderingAreaInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + void getImageSubresourceLayout( const DeviceImageSubresourceInfo * pInfo, + SubresourceLayout2 * pLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD SubresourceLayout2 getImageSubresourceLayout( const DeviceImageSubresourceInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageSubresourceLayout( const DeviceImageSubresourceInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + void getImageSubresourceLayout2( Image image, + const ImageSubresource2 * pSubresource, + SubresourceLayout2 * pLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_NODISCARD SubresourceLayout2 getImageSubresourceLayout2( Image image, + const ImageSubresource2 & subresource, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_NODISCARD StructureChain getImageSubresourceLayout2( + Image image, const ImageSubresource2 & subresource, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMemoryToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html + template + VULKAN_HPP_NODISCARD Result copyMemoryToImage( const CopyMemoryToImageInfo * pCopyMemoryToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + copyMemoryToImage( const CopyMemoryToImageInfo & copyMemoryToImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemory.html + template + VULKAN_HPP_NODISCARD Result copyImageToMemory( const CopyImageToMemoryInfo * pCopyImageToMemoryInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemory.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + copyImageToMemory( const CopyImageToMemoryInfo & copyImageToMemoryInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImage.html + template + VULKAN_HPP_NODISCARD Result copyImageToImage( const CopyImageToImageInfo * pCopyImageToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImage.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + copyImageToImage( const CopyImageToImageInfo & copyImageToImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkTransitionImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayout.html + template + VULKAN_HPP_NODISCARD Result transitionImageLayout( uint32_t transitionCount, + const HostImageLayoutTransitionInfo * pTransitions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkTransitionImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayout.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + transitionImageLayout( ArrayProxy const & transitions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_swapchain === + + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + template + VULKAN_HPP_NODISCARD Result createSwapchainKHR( const SwapchainCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SwapchainKHR * pSwapchain, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + void destroySwapchainKHR( SwapchainKHR swapchain, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + void destroySwapchainKHR( SwapchainKHR swapchain VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + void destroy( SwapchainKHR swapchain, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySwapchainKHR.html + template + void destroy( SwapchainKHR swapchain, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + template + VULKAN_HPP_NODISCARD Result getSwapchainImagesKHR( SwapchainKHR swapchain, + uint32_t * pSwapchainImageCount, + Image * pSwapchainImages, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSwapchainImagesKHR( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSwapchainImagesKHR( SwapchainKHR swapchain, ImageAllocator & imageAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkAcquireNextImageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImageKHR.html + template + VULKAN_HPP_NODISCARD Result acquireNextImageKHR( SwapchainKHR swapchain, + uint64_t timeout, + Semaphore semaphore, + Fence fence, + uint32_t * pImageIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireNextImageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImageKHR.html + template + VULKAN_HPP_NODISCARD ResultValue acquireNextImageKHR( SwapchainKHR swapchain, + uint64_t timeout, + Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPresentCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD Result getGroupPresentCapabilitiesKHR( DeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPresentCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getGroupPresentCapabilitiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceGroupSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModesKHR.html + template + VULKAN_HPP_NODISCARD Result getGroupSurfacePresentModesKHR( SurfaceKHR surface, + DeviceGroupPresentModeFlagsKHR * pModes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getGroupSurfacePresentModesKHR( SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkAcquireNextImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImage2KHR.html + template + VULKAN_HPP_NODISCARD Result acquireNextImage2KHR( const AcquireNextImageInfoKHR * pAcquireInfo, + uint32_t * pImageIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireNextImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImage2KHR.html + template + VULKAN_HPP_NODISCARD ResultValue acquireNextImage2KHR( const AcquireNextImageInfoKHR & acquireInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_display_swapchain === + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template + VULKAN_HPP_NODISCARD Result createSharedSwapchainsKHR( uint32_t swapchainCount, + const SwapchainCreateInfoKHR * pCreateInfos, + const AllocationCallbacks * pAllocator, + SwapchainKHR * pSwapchains, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSharedSwapchainsKHR( ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSharedSwapchainsKHR( ArrayProxy const & createInfos, + Optional allocator, + SwapchainKHRAllocator & swapchainKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSharedSwapchainKHR( const SwapchainCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, SwapchainKHRAllocator>>::type + createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, SwapchainKHRAllocator>>::type + createSharedSwapchainsKHRUnique( ArrayProxy const & createInfos, + Optional allocator, + SwapchainKHRAllocator & swapchainKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSharedSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_debug_marker === + + // wrapper function for command vkDebugMarkerSetObjectTagEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectTagEXT.html + template + VULKAN_HPP_NODISCARD Result debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT * pTagInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDebugMarkerSetObjectTagEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectTagEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDebugMarkerSetObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectNameEXT.html + template + VULKAN_HPP_NODISCARD Result debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT * pNameInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDebugMarkerSetObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectNameEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_queue === + + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + template + VULKAN_HPP_NODISCARD Result createVideoSessionKHR( const VideoSessionCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + VideoSessionKHR * pVideoSession, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createVideoSessionKHR( const VideoSessionCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createVideoSessionKHRUnique( const VideoSessionCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + void destroyVideoSessionKHR( VideoSessionKHR videoSession, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + void destroyVideoSessionKHR( VideoSessionKHR videoSession VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + void destroy( VideoSessionKHR videoSession, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionKHR.html + template + void destroy( VideoSessionKHR videoSession, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD Result getVideoSessionMemoryRequirementsKHR( VideoSessionKHR videoSession, + uint32_t * pMemoryRequirementsCount, + VideoSessionMemoryRequirementsKHR * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoSessionMemoryRequirementsKHR( VideoSessionKHR videoSession, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoSessionMemoryRequirementsKHR( VideoSessionKHR videoSession, + VideoSessionMemoryRequirementsKHRAllocator & videoSessionMemoryRequirementsKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindVideoSessionMemoryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindVideoSessionMemoryKHR.html + template + VULKAN_HPP_NODISCARD Result bindVideoSessionMemoryKHR( VideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const BindVideoSessionMemoryInfoKHR * pBindSessionMemoryInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindVideoSessionMemoryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindVideoSessionMemoryKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindVideoSessionMemoryKHR( VideoSessionKHR videoSession, + ArrayProxy const & bindSessionMemoryInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD Result createVideoSessionParametersKHR( const VideoSessionParametersCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + VideoSessionParametersKHR * pVideoSessionParameters, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createVideoSessionParametersKHR( const VideoSessionParametersCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createVideoSessionParametersKHRUnique( const VideoSessionParametersCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD Result updateVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters, + const VideoSessionParametersUpdateInfoKHR * pUpdateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + updateVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters, + const VideoSessionParametersUpdateInfoKHR & updateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + void destroyVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + void destroyVideoSessionParametersKHR( VideoSessionParametersKHR videoSessionParameters VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + void destroy( VideoSessionParametersKHR videoSessionParameters, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyVideoSessionParametersKHR.html + template + void destroy( VideoSessionParametersKHR videoSessionParameters, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NVX_binary_import === + + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + template + VULKAN_HPP_NODISCARD Result createCuModuleNVX( const CuModuleCreateInfoNVX * pCreateInfo, + const AllocationCallbacks * pAllocator, + CuModuleNVX * pModule, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createCuModuleNVX( const CuModuleCreateInfoNVX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createCuModuleNVXUnique( const CuModuleCreateInfoNVX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + template + VULKAN_HPP_NODISCARD Result createCuFunctionNVX( const CuFunctionCreateInfoNVX * pCreateInfo, + const AllocationCallbacks * pAllocator, + CuFunctionNVX * pFunction, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createCuFunctionNVX( const CuFunctionCreateInfoNVX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createCuFunctionNVXUnique( const CuFunctionCreateInfoNVX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + void destroyCuModuleNVX( CuModuleNVX module, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + void destroyCuModuleNVX( CuModuleNVX module, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + void destroy( CuModuleNVX module, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuModuleNVX.html + template + void destroy( CuModuleNVX module, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + void destroyCuFunctionNVX( CuFunctionNVX function, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + void destroyCuFunctionNVX( CuFunctionNVX function, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + void destroy( CuFunctionNVX function, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCuFunctionNVX.html + template + void destroy( CuFunctionNVX function, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NVX_image_view_handle === + + // wrapper function for command vkGetImageViewHandleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandleNVX.html + template + uint32_t getImageViewHandleNVX( const ImageViewHandleInfoNVX * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewHandleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandleNVX.html + template + uint32_t getImageViewHandleNVX( const ImageViewHandleInfoNVX & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageViewHandle64NVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandle64NVX.html + template + uint64_t getImageViewHandle64NVX( const ImageViewHandleInfoNVX * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewHandle64NVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandle64NVX.html + template + uint64_t getImageViewHandle64NVX( const ImageViewHandleInfoNVX & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageViewAddressNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewAddressNVX.html + template + VULKAN_HPP_NODISCARD Result getImageViewAddressNVX( ImageView imageView, + ImageViewAddressPropertiesNVX * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewAddressNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewAddressNVX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageViewAddressNVX( ImageView imageView, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_shader_info === + + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + template + VULKAN_HPP_NODISCARD Result getShaderInfoAMD( Pipeline pipeline, + ShaderStageFlagBits shaderStage, + ShaderInfoTypeAMD infoType, + size_t * pInfoSize, + void * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getShaderInfoAMD( + Pipeline pipeline, ShaderStageFlagBits shaderStage, ShaderInfoTypeAMD infoType, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getShaderInfoAMD( Pipeline pipeline, + ShaderStageFlagBits shaderStage, + ShaderInfoTypeAMD infoType, + Uint8_tAllocator & uint8_tAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleNV.html + template + VULKAN_HPP_NODISCARD Result getMemoryWin32HandleNV( DeviceMemory memory, + ExternalMemoryHandleTypeFlagsNV handleType, + HANDLE * pHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryWin32HandleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryWin32HandleNV( DeviceMemory memory, + ExternalMemoryHandleTypeFlagsNV handleType, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_device_group === + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeaturesKHR.html + template + void getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + PeerMemoryFeatureFlags * pPeerMemoryFeatures, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupPeerMemoryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeaturesKHR.html + template + VULKAN_HPP_NODISCARD PeerMemoryFeatureFlags + getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_maintenance1 === + + // wrapper function for command vkTrimCommandPoolKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPoolKHR.html + template + void trimCommandPoolKHR( CommandPool commandPool, + CommandPoolTrimFlags flags, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD Result getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandlePropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getMemoryWin32HandlePropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + MemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandlePropertiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryWin32HandlePropertiesKHR( + ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + + // wrapper function for command vkGetMemoryFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdKHR.html + template + VULKAN_HPP_NODISCARD Result getMemoryFdKHR( const MemoryGetFdInfoKHR * pGetFdInfo, + int * pFd, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdPropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, + int fd, + MemoryFdPropertiesKHR * pMemoryFdProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdPropertiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getMemoryFdPropertiesKHR( ExternalMemoryHandleTypeFlagBits handleType, int fd, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + + // wrapper function for command vkImportSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD Result importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD Result getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + + // wrapper function for command vkImportSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD Result importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD Result getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR * pGetFdInfo, + int * pFd, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreFdKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_descriptor_update_template === + + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_NODISCARD Result createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + DescriptorUpdateTemplate * pDescriptorUpdateTemplate, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDescriptorUpdateTemplateKHRUnique( const DescriptorUpdateTemplateCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplateKHR.html + template + void destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplateKHR.html + template + void destroyDescriptorUpdateTemplateKHR( DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplateKHR.html + template + void updateDescriptorSetWithTemplateKHR( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + const void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplateKHR.html + template + void updateDescriptorSetWithTemplateKHR( DescriptorSet descriptorSet, + DescriptorUpdateTemplate descriptorUpdateTemplate, + DataType const & data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_display_control === + + // wrapper function for command vkDisplayPowerControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDisplayPowerControlEXT.html + template + VULKAN_HPP_NODISCARD Result displayPowerControlEXT( DisplayKHR display, + const DisplayPowerInfoEXT * pDisplayPowerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDisplayPowerControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDisplayPowerControlEXT.html + template + typename ResultValueType::type displayPowerControlEXT( DisplayKHR display, + const DisplayPowerInfoEXT & displayPowerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + template + VULKAN_HPP_NODISCARD Result registerEventEXT( const DeviceEventInfoEXT * pDeviceEventInfo, + const AllocationCallbacks * pAllocator, + Fence * pFence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + registerEventEXT( const DeviceEventInfoEXT & deviceEventInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + registerEventEXTUnique( const DeviceEventInfoEXT & deviceEventInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + template + VULKAN_HPP_NODISCARD Result registerDisplayEventEXT( DisplayKHR display, + const DisplayEventInfoEXT * pDisplayEventInfo, + const AllocationCallbacks * pAllocator, + Fence * pFence, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + registerDisplayEventEXT( DisplayKHR display, + const DisplayEventInfoEXT & displayEventInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + registerDisplayEventEXTUnique( DisplayKHR display, + const DisplayEventInfoEXT & displayEventInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSwapchainCounterEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainCounterEXT.html + template + VULKAN_HPP_NODISCARD Result getSwapchainCounterEXT( SwapchainKHR swapchain, + SurfaceCounterFlagBitsEXT counter, + uint64_t * pCounterValue, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSwapchainCounterEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainCounterEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSwapchainCounterEXT( SwapchainKHR swapchain, SurfaceCounterFlagBitsEXT counter, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_GOOGLE_display_timing === + + // wrapper function for command vkGetRefreshCycleDurationGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRefreshCycleDurationGOOGLE.html + template + VULKAN_HPP_NODISCARD Result getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain, + RefreshCycleDurationGOOGLE * pDisplayTimingProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRefreshCycleDurationGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRefreshCycleDurationGOOGLE.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getRefreshCycleDurationGOOGLE( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + template + VULKAN_HPP_NODISCARD Result getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, + uint32_t * pPresentationTimingCount, + PastPresentationTimingGOOGLE * pPresentationTimings, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + template < + typename PastPresentationTimingGOOGLEAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + template < + typename PastPresentationTimingGOOGLEAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPastPresentationTimingGOOGLE( SwapchainKHR swapchain, + PastPresentationTimingGOOGLEAllocator & pastPresentationTimingGOOGLEAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_hdr_metadata === + + // wrapper function for command vkSetHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetHdrMetadataEXT.html + template + void setHdrMetadataEXT( uint32_t swapchainCount, + const SwapchainKHR * pSwapchains, + const HdrMetadataEXT * pMetadata, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetHdrMetadataEXT.html + template + void setHdrMetadataEXT( ArrayProxy const & swapchains, + ArrayProxy const & metadata, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_create_renderpass2 === + + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + template + VULKAN_HPP_NODISCARD Result createRenderPass2KHR( const RenderPassCreateInfo2 * pCreateInfo, + const AllocationCallbacks * pAllocator, + RenderPass * pRenderPass, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createRenderPass2KHR( const RenderPassCreateInfo2 & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createRenderPass2KHRUnique( const RenderPassCreateInfo2 & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_shared_presentable_image === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSwapchainStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainStatusKHR.html + template + VULKAN_HPP_NODISCARD Result getSwapchainStatusKHR( SwapchainKHR swapchain, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkGetSwapchainStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainStatusKHR.html + template + VULKAN_HPP_NODISCARD Result getSwapchainStatusKHR( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + + // wrapper function for command vkImportFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD Result importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD Result getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo, + HANDLE * pHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceWin32HandleKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + + // wrapper function for command vkImportFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceFdKHR.html + template + VULKAN_HPP_NODISCARD Result importFenceFdKHR( const ImportFenceFdInfoKHR * pImportFenceFdInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceFdKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html + template + VULKAN_HPP_NODISCARD Result getFenceFdKHR( const FenceGetFdInfoKHR * pGetFdInfo, + int * pFd, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_performance_query === + + // wrapper function for command vkAcquireProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireProfilingLockKHR.html + template + VULKAN_HPP_NODISCARD Result acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireProfilingLockKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkReleaseProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseProfilingLockKHR.html + template + void releaseProfilingLockKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkSetDebugUtilsObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectNameEXT.html + template + VULKAN_HPP_NODISCARD Result setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT * pNameInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetDebugUtilsObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectNameEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT & nameInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetDebugUtilsObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectTagEXT.html + template + VULKAN_HPP_NODISCARD Result setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT * pTagInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetDebugUtilsObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectTagEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT & tagInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD Result + getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer * buffer, + AndroidHardwareBufferPropertiesANDROID * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryAndroidHardwareBufferANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryAndroidHardwareBufferANDROID.html + template + VULKAN_HPP_NODISCARD Result getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID * pInfo, + struct AHardwareBuffer ** pBuffer, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryAndroidHardwareBufferANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryAndroidHardwareBufferANDROID.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template + VULKAN_HPP_NODISCARD Result createExecutionGraphPipelinesAMDX( PipelineCache pipelineCache, + uint32_t createInfoCount, + const ExecutionGraphPipelineCreateInfoAMDX * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createExecutionGraphPipelinesAMDX( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createExecutionGraphPipelinesAMDX( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template + VULKAN_HPP_NODISCARD ResultValue + createExecutionGraphPipelineAMDX( PipelineCache pipelineCache, + const ExecutionGraphPipelineCreateInfoAMDX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createExecutionGraphPipelinesAMDXUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createExecutionGraphPipelinesAMDXUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + template + VULKAN_HPP_NODISCARD ResultValue> + createExecutionGraphPipelineAMDXUnique( PipelineCache pipelineCache, + const ExecutionGraphPipelineCreateInfoAMDX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineScratchSizeAMDX.html + template + VULKAN_HPP_NODISCARD Result + getExecutionGraphPipelineScratchSizeAMDX( Pipeline executionGraph, + ExecutionGraphPipelineScratchSizeAMDX * pSizeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineScratchSizeAMDX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getExecutionGraphPipelineScratchSizeAMDX( Pipeline executionGraph, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetExecutionGraphPipelineNodeIndexAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineNodeIndexAMDX.html + template + VULKAN_HPP_NODISCARD Result getExecutionGraphPipelineNodeIndexAMDX( Pipeline executionGraph, + const PipelineShaderStageNodeCreateInfoAMDX * pNodeInfo, + uint32_t * pNodeIndex, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetExecutionGraphPipelineNodeIndexAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineNodeIndexAMDX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getExecutionGraphPipelineNodeIndexAMDX( + Pipeline executionGraph, const PipelineShaderStageNodeCreateInfoAMDX & nodeInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_KHR_get_memory_requirements2 === + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + void getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getImageMemoryRequirements2KHR( + const ImageMemoryRequirementsInfo2 & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + void getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getBufferMemoryRequirements2KHR( + const BufferMemoryRequirementsInfo2 & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + template + void getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_acceleration_structure === + + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD Result createAccelerationStructureKHR( const AccelerationStructureCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + AccelerationStructureKHR * pAccelerationStructure, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createAccelerationStructureKHR( const AccelerationStructureCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createAccelerationStructureKHRUnique( const AccelerationStructureCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + void destroyAccelerationStructureKHR( AccelerationStructureKHR accelerationStructure, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + void destroyAccelerationStructureKHR( AccelerationStructureKHR accelerationStructure VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + void destroy( AccelerationStructureKHR accelerationStructure, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureKHR.html + template + void destroy( AccelerationStructureKHR accelerationStructure, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildAccelerationStructuresKHR.html + template + VULKAN_HPP_NODISCARD Result buildAccelerationStructuresKHR( DeferredOperationKHR deferredOperation, + uint32_t infoCount, + const AccelerationStructureBuildGeometryInfoKHR * pInfos, + const AccelerationStructureBuildRangeInfoKHR * const * ppBuildRangeInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildAccelerationStructuresKHR.html + template + VULKAN_HPP_NODISCARD Result buildAccelerationStructuresKHR( DeferredOperationKHR deferredOperation, + ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD Result copyAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD Result copyAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureToMemoryKHR.html + template + VULKAN_HPP_NODISCARD Result copyAccelerationStructureToMemoryKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureToMemoryInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureToMemoryKHR.html + template + VULKAN_HPP_NODISCARD Result copyAccelerationStructureToMemoryKHR( DeferredOperationKHR deferredOperation, + const CopyAccelerationStructureToMemoryInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD Result copyMemoryToAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyMemoryToAccelerationStructureInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToAccelerationStructureKHR.html + template + VULKAN_HPP_NODISCARD Result copyMemoryToAccelerationStructureKHR( DeferredOperationKHR deferredOperation, + const CopyMemoryToAccelerationStructureInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result + writeAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, + const AccelerationStructureKHR * pAccelerationStructures, + QueryType queryType, + size_t dataSize, + void * pData, + size_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + QueryType queryType, + size_t dataSize, + size_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, + QueryType queryType, + size_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureDeviceAddressKHR.html + template + DeviceAddress getAccelerationStructureAddressKHR( const AccelerationStructureDeviceAddressInfoKHR * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureDeviceAddressKHR.html + template + DeviceAddress getAccelerationStructureAddressKHR( const AccelerationStructureDeviceAddressInfoKHR & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceAccelerationStructureCompatibilityKHR.html + template + void getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR * pVersionInfo, + AccelerationStructureCompatibilityKHR * pCompatibility, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceAccelerationStructureCompatibilityKHR.html + template + VULKAN_HPP_NODISCARD AccelerationStructureCompatibilityKHR getAccelerationStructureCompatibilityKHR( + const AccelerationStructureVersionInfoKHR & versionInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureBuildSizesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureBuildSizesKHR.html + template + void getAccelerationStructureBuildSizesKHR( AccelerationStructureBuildTypeKHR buildType, + const AccelerationStructureBuildGeometryInfoKHR * pBuildInfo, + const uint32_t * pMaxPrimitiveCounts, + AccelerationStructureBuildSizesInfoKHR * pSizeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureBuildSizesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureBuildSizesKHR.html + template + VULKAN_HPP_NODISCARD AccelerationStructureBuildSizesInfoKHR + getAccelerationStructureBuildSizesKHR( AccelerationStructureBuildTypeKHR buildType, + const AccelerationStructureBuildGeometryInfoKHR & buildInfo, + ArrayProxy const & maxPrimitiveCounts VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template + VULKAN_HPP_NODISCARD Result createRayTracingPipelinesKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + uint32_t createInfoCount, + const RayTracingPipelineCreateInfoKHR * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createRayTracingPipelinesKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createRayTracingPipelinesKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template + VULKAN_HPP_NODISCARD ResultValue + createRayTracingPipelineKHR( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createRayTracingPipelinesKHRUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createRayTracingPipelinesKHRUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + template + VULKAN_HPP_NODISCARD ResultValue> + createRayTracingPipelineKHRUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD Result getRayTracingShaderGroupHandlesKHR( Pipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getRayTracingShaderGroupHandlesKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getRayTracingShaderGroupHandleKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD Result getRayTracingCaptureReplayShaderGroupHandlesKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void * pData, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getRayTracingCaptureReplayShaderGroupHandlesKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getRayTracingCaptureReplayShaderGroupHandleKHR( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingShaderGroupStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupStackSizeKHR.html + template + DeviceSize getRayTracingShaderGroupStackSizeKHR( Pipeline pipeline, + uint32_t group, + ShaderGroupShaderKHR groupShader, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_sampler_ycbcr_conversion === + + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + template + VULKAN_HPP_NODISCARD Result createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + SamplerYcbcrConversion * pYcbcrConversion, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSamplerYcbcrConversionKHRUnique( const SamplerYcbcrConversionCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversionKHR.html + template + void destroySamplerYcbcrConversionKHR( SamplerYcbcrConversion ycbcrConversion, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversionKHR.html + template + void destroySamplerYcbcrConversionKHR( SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_bind_memory2 === + + // wrapper function for command vkBindBufferMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2KHR.html + template + VULKAN_HPP_NODISCARD Result bindBufferMemory2KHR( uint32_t bindInfoCount, + const BindBufferMemoryInfo * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindBufferMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2KHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindBufferMemory2KHR( ArrayProxy const & bindInfos, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindImageMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2KHR.html + template + VULKAN_HPP_NODISCARD Result bindImageMemory2KHR( uint32_t bindInfoCount, + const BindImageMemoryInfo * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindImageMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2KHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindImageMemory2KHR( ArrayProxy const & bindInfos, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_image_drm_format_modifier === + + // wrapper function for command vkGetImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html + template + VULKAN_HPP_NODISCARD Result getImageDrmFormatModifierPropertiesEXT( Image image, + ImageDrmFormatModifierPropertiesEXT * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageDrmFormatModifierPropertiesEXT( Image image, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_validation_cache === + + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + template + VULKAN_HPP_NODISCARD Result createValidationCacheEXT( const ValidationCacheCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + ValidationCacheEXT * pValidationCache, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createValidationCacheEXT( const ValidationCacheCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createValidationCacheEXTUnique( const ValidationCacheCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + void destroyValidationCacheEXT( ValidationCacheEXT validationCache, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + void destroyValidationCacheEXT( ValidationCacheEXT validationCache VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + void destroy( ValidationCacheEXT validationCache, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyValidationCacheEXT.html + template + void destroy( ValidationCacheEXT validationCache, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkMergeValidationCachesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergeValidationCachesEXT.html + template + VULKAN_HPP_NODISCARD Result mergeValidationCachesEXT( ValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const ValidationCacheEXT * pSrcCaches, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMergeValidationCachesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergeValidationCachesEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type mergeValidationCachesEXT( + ValidationCacheEXT dstCache, ArrayProxy const & srcCaches, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + template + VULKAN_HPP_NODISCARD Result getValidationCacheDataEXT( ValidationCacheEXT validationCache, + size_t * pDataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getValidationCacheDataEXT( ValidationCacheEXT validationCache, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getValidationCacheDataEXT( + ValidationCacheEXT validationCache, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + template + VULKAN_HPP_NODISCARD Result createAccelerationStructureNV( const AccelerationStructureCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + AccelerationStructureNV * pAccelerationStructure, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createAccelerationStructureNV( const AccelerationStructureCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createAccelerationStructureNVUnique( const AccelerationStructureCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + void destroyAccelerationStructureNV( AccelerationStructureNV accelerationStructure, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + void destroyAccelerationStructureNV( AccelerationStructureNV accelerationStructure VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + void destroy( AccelerationStructureNV accelerationStructure, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyAccelerationStructureNV.html + template + void destroy( AccelerationStructureNV accelerationStructure, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + void getAccelerationStructureMemoryRequirementsNV( const AccelerationStructureMemoryRequirementsInfoNV * pInfo, + MemoryRequirements2KHR * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2KHR getAccelerationStructureMemoryRequirementsNV( + const AccelerationStructureMemoryRequirementsInfoNV & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD StructureChain + getAccelerationStructureMemoryRequirementsNV( const AccelerationStructureMemoryRequirementsInfoNV & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindAccelerationStructureMemoryNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindAccelerationStructureMemoryNV.html + template + VULKAN_HPP_NODISCARD Result bindAccelerationStructureMemoryNV( uint32_t bindInfoCount, + const BindAccelerationStructureMemoryInfoNV * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindAccelerationStructureMemoryNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindAccelerationStructureMemoryNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template + VULKAN_HPP_NODISCARD Result createRayTracingPipelinesNV( PipelineCache pipelineCache, + uint32_t createInfoCount, + const RayTracingPipelineCreateInfoNV * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createRayTracingPipelinesNV( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createRayTracingPipelinesNV( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template + VULKAN_HPP_NODISCARD ResultValue + createRayTracingPipelineNV( PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createRayTracingPipelinesNVUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createRayTracingPipelinesNVUnique( PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + template + VULKAN_HPP_NODISCARD ResultValue> + createRayTracingPipelineNVUnique( PipelineCache pipelineCache, + const RayTracingPipelineCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD Result getRayTracingShaderGroupHandlesNV( Pipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getRayTracingShaderGroupHandlesNV( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getRayTracingShaderGroupHandleNV( + Pipeline pipeline, uint32_t firstGroup, uint32_t groupCount, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD Result getAccelerationStructureHandleNV( AccelerationStructureNV accelerationStructure, + size_t dataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getAccelerationStructureHandleNV( + AccelerationStructureNV accelerationStructure, size_t dataSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getAccelerationStructureHandleNV( AccelerationStructureNV accelerationStructure, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCompileDeferredNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCompileDeferredNV.html + template + VULKAN_HPP_NODISCARD Result compileDeferredNV( Pipeline pipeline, + uint32_t shader, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkCompileDeferredNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCompileDeferredNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + compileDeferredNV( Pipeline pipeline, uint32_t shader, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_maintenance3 === + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + void getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo * pCreateInfo, + DescriptorSetLayoutSupport * pSupport, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_NODISCARD DescriptorSetLayoutSupport getDescriptorSetLayoutSupportKHR( + const DescriptorSetLayoutCreateInfo & createInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_external_memory_host === + + // wrapper function for command vkGetMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryHostPointerPropertiesEXT.html + template + VULKAN_HPP_NODISCARD Result getMemoryHostPointerPropertiesEXT( ExternalMemoryHandleTypeFlagBits handleType, + const void * pHostPointer, + MemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryHostPointerPropertiesEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryHostPointerPropertiesEXT( + ExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_calibrated_timestamps === + + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template + VULKAN_HPP_NODISCARD Result getCalibratedTimestampsEXT( uint32_t timestampCount, + const CalibratedTimestampInfoKHR * pTimestampInfos, + uint64_t * pTimestamps, + uint64_t * pMaxDeviation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, uint64_t>>::type + getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, uint64_t>>::type + getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos, + Uint64_tAllocator & uint64_tAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCalibratedTimestampEXT( const CalibratedTimestampInfoKHR & timestampInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_timeline_semaphore === + + // wrapper function for command vkGetSemaphoreCounterValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValueKHR.html + template + VULKAN_HPP_NODISCARD Result getSemaphoreCounterValueKHR( Semaphore semaphore, + uint64_t * pValue, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreCounterValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValueKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSemaphoreCounterValueKHR( Semaphore semaphore, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWaitSemaphoresKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphoresKHR.html + template + VULKAN_HPP_NODISCARD Result waitSemaphoresKHR( const SemaphoreWaitInfo * pWaitInfo, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitSemaphoresKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphoresKHR.html + template + VULKAN_HPP_NODISCARD Result waitSemaphoresKHR( const SemaphoreWaitInfo & waitInfo, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSignalSemaphoreKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphoreKHR.html + template + VULKAN_HPP_NODISCARD Result signalSemaphoreKHR( const SemaphoreSignalInfo * pSignalInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSignalSemaphoreKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphoreKHR.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + signalSemaphoreKHR( const SemaphoreSignalInfo & signalInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkInitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInitializePerformanceApiINTEL.html + template + VULKAN_HPP_NODISCARD Result initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL * pInitializeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkInitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInitializePerformanceApiINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL & initializeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUninitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUninitializePerformanceApiINTEL.html + template + void uninitializePerformanceApiINTEL( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD Result acquirePerformanceConfigurationINTEL( const PerformanceConfigurationAcquireInfoINTEL * pAcquireInfo, + PerformanceConfigurationINTEL * pConfiguration, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + acquirePerformanceConfigurationINTEL( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + acquirePerformanceConfigurationINTELUnique( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD Result releasePerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + releasePerformanceConfigurationINTEL( PerformanceConfigurationINTEL configuration VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD Result release( PerformanceConfigurationINTEL configuration, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkReleasePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleasePerformanceConfigurationINTEL.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type release( PerformanceConfigurationINTEL configuration, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetPerformanceParameterINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPerformanceParameterINTEL.html + template + VULKAN_HPP_NODISCARD Result getPerformanceParameterINTEL( PerformanceParameterTypeINTEL parameter, + PerformanceValueINTEL * pValue, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPerformanceParameterINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPerformanceParameterINTEL.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getPerformanceParameterINTEL( PerformanceParameterTypeINTEL parameter, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_display_native_hdr === + + // wrapper function for command vkSetLocalDimmingAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLocalDimmingAMD.html + template + void setLocalDimmingAMD( SwapchainKHR swapChain, + Bool32 localDimmingEnable, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressEXT.html + template + DeviceAddress getBufferAddressEXT( const BufferDeviceAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferDeviceAddressEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressEXT.html + template + DeviceAddress getBufferAddressEXT( const BufferDeviceAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_present_wait === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitForPresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresentKHR.html + template + VULKAN_HPP_NODISCARD Result waitForPresentKHR( SwapchainKHR swapchain, + uint64_t presentId, + uint64_t timeout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkWaitForPresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresentKHR.html + template + VULKAN_HPP_NODISCARD Result + waitForPresentKHR( SwapchainKHR swapchain, uint64_t presentId, uint64_t timeout, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD Result acquireFullScreenExclusiveModeEXT( SwapchainKHR swapchain, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# else + // wrapper function for command vkAcquireFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + acquireFullScreenExclusiveModeEXT( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD Result releaseFullScreenExclusiveModeEXT( SwapchainKHR swapchain, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# else + // wrapper function for command vkReleaseFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseFullScreenExclusiveModeEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + releaseFullScreenExclusiveModeEXT( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetDeviceGroupSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html + template + VULKAN_HPP_NODISCARD Result getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + DeviceGroupPresentModeFlagsKHR * pModes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceGroupSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressKHR.html + template + DeviceAddress getBufferAddressKHR( const BufferDeviceAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferDeviceAddressKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressKHR.html + template + DeviceAddress getBufferAddressKHR( const BufferDeviceAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddressKHR.html + template + uint64_t getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddressKHR.html + template + uint64_t getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html + template + uint64_t getMemoryOpaqueCaptureAddressKHR( const DeviceMemoryOpaqueCaptureAddressInfo * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html + template + uint64_t getMemoryOpaqueCaptureAddressKHR( const DeviceMemoryOpaqueCaptureAddressInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_host_query_reset === + + // wrapper function for command vkResetQueryPoolEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPoolEXT.html + template + void resetQueryPoolEXT( QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_deferred_host_operations === + + // wrapper function for command vkCreateDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + template + VULKAN_HPP_NODISCARD Result createDeferredOperationKHR( const AllocationCallbacks * pAllocator, + DeferredOperationKHR * pDeferredOperation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDeferredOperationKHR( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDeferredOperationKHRUnique( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + void destroyDeferredOperationKHR( DeferredOperationKHR operation, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + void destroyDeferredOperationKHR( DeferredOperationKHR operation VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + void destroy( DeferredOperationKHR operation, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDeferredOperationKHR.html + template + void destroy( DeferredOperationKHR operation, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeferredOperationMaxConcurrencyKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationMaxConcurrencyKHR.html + template + uint32_t getDeferredOperationMaxConcurrencyKHR( DeferredOperationKHR operation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeferredOperationResultKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationResultKHR.html + template + VULKAN_HPP_NODISCARD Result getDeferredOperationResultKHR( DeferredOperationKHR operation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkGetDeferredOperationResultKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationResultKHR.html + template + VULKAN_HPP_NODISCARD Result getDeferredOperationResultKHR( DeferredOperationKHR operation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDeferredOperationJoinKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeferredOperationJoinKHR.html + template + VULKAN_HPP_NODISCARD Result deferredOperationJoinKHR( DeferredOperationKHR operation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkDeferredOperationJoinKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeferredOperationJoinKHR.html + template + VULKAN_HPP_NODISCARD Result deferredOperationJoinKHR( DeferredOperationKHR operation, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_pipeline_executable_properties === + + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getPipelineExecutablePropertiesKHR( const PipelineInfoKHR * pPipelineInfo, + uint32_t * pExecutableCount, + PipelineExecutablePropertiesKHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo, + PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + template + VULKAN_HPP_NODISCARD Result getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR * pExecutableInfo, + uint32_t * pStatisticCount, + PipelineExecutableStatisticKHR * pStatistics, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + template < + typename PipelineExecutableStatisticKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + template < + typename PipelineExecutableStatisticKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo, + PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + template + VULKAN_HPP_NODISCARD Result + getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR * pExecutableInfo, + uint32_t * pInternalRepresentationCount, + PipelineExecutableInternalRepresentationKHR * pInternalRepresentations, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if< + std::is_same::value, + int>::type = 0> + VULKAN_HPP_NODISCARD + typename ResultValueType>::type + getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR & executableInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if< + std::is_same::value, + int>::type = 0> + VULKAN_HPP_NODISCARD + typename ResultValueType>::type + getPipelineExecutableInternalRepresentationsKHR( + const PipelineExecutableInfoKHR & executableInfo, + PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_host_image_copy === + + // wrapper function for command vkCopyMemoryToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImageEXT.html + template + VULKAN_HPP_NODISCARD Result copyMemoryToImageEXT( const CopyMemoryToImageInfo * pCopyMemoryToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImageEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + copyMemoryToImageEXT( const CopyMemoryToImageInfo & copyMemoryToImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemoryEXT.html + template + VULKAN_HPP_NODISCARD Result copyImageToMemoryEXT( const CopyImageToMemoryInfo * pCopyImageToMemoryInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemoryEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + copyImageToMemoryEXT( const CopyImageToMemoryInfo & copyImageToMemoryInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyImageToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImageEXT.html + template + VULKAN_HPP_NODISCARD Result copyImageToImageEXT( const CopyImageToImageInfo * pCopyImageToImageInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyImageToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImageEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + copyImageToImageEXT( const CopyImageToImageInfo & copyImageToImageInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkTransitionImageLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayoutEXT.html + template + VULKAN_HPP_NODISCARD Result transitionImageLayoutEXT( uint32_t transitionCount, + const HostImageLayoutTransitionInfo * pTransitions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkTransitionImageLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayoutEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + transitionImageLayoutEXT( ArrayProxy const & transitions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + void getImageSubresourceLayout2EXT( Image image, + const ImageSubresource2 * pSubresource, + SubresourceLayout2 * pLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_NODISCARD SubresourceLayout2 getImageSubresourceLayout2EXT( + Image image, const ImageSubresource2 & subresource, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_NODISCARD StructureChain getImageSubresourceLayout2EXT( + Image image, const ImageSubresource2 & subresource, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_map_memory2 === + + // wrapper function for command vkMapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2KHR.html + template + VULKAN_HPP_NODISCARD Result mapMemory2KHR( const MemoryMapInfo * pMemoryMapInfo, + void ** ppData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkMapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type mapMemory2KHR( const MemoryMapInfo & memoryMapInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUnmapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2KHR.html + template + VULKAN_HPP_NODISCARD Result unmapMemory2KHR( const MemoryUnmapInfo * pMemoryUnmapInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUnmapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2KHR.html + template + typename ResultValueType::type unmapMemory2KHR( const MemoryUnmapInfo & memoryUnmapInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesEXT.html + template + VULKAN_HPP_NODISCARD Result releaseSwapchainImagesEXT( const ReleaseSwapchainImagesInfoKHR * pReleaseInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseSwapchainImagesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesEXT.html + template + typename ResultValueType::type releaseSwapchainImagesEXT( const ReleaseSwapchainImagesInfoKHR & releaseInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + void getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getGeneratedCommandsMemoryRequirementsNV( + const GeneratedCommandsMemoryRequirementsInfoNV & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD StructureChain + getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + template + VULKAN_HPP_NODISCARD Result createIndirectCommandsLayoutNV( const IndirectCommandsLayoutCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + IndirectCommandsLayoutNV * pIndirectCommandsLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createIndirectCommandsLayoutNV( const IndirectCommandsLayoutCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createIndirectCommandsLayoutNVUnique( const IndirectCommandsLayoutCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + void destroyIndirectCommandsLayoutNV( IndirectCommandsLayoutNV indirectCommandsLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + void destroyIndirectCommandsLayoutNV( IndirectCommandsLayoutNV indirectCommandsLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + void destroy( IndirectCommandsLayoutNV indirectCommandsLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutNV.html + template + void destroy( IndirectCommandsLayoutNV indirectCommandsLayout, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_private_data === + + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + template + VULKAN_HPP_NODISCARD Result createPrivateDataSlotEXT( const PrivateDataSlotCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + PrivateDataSlot * pPrivateDataSlot, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createPrivateDataSlotEXT( const PrivateDataSlotCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createPrivateDataSlotEXTUnique( const PrivateDataSlotCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlotEXT.html + template + void destroyPrivateDataSlotEXT( PrivateDataSlot privateDataSlot, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlotEXT.html + template + void destroyPrivateDataSlotEXT( PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateDataEXT.html + template + VULKAN_HPP_NODISCARD Result setPrivateDataEXT( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + uint64_t data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkSetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateDataEXT.html + template + typename ResultValueType::type setPrivateDataEXT( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + uint64_t data, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateDataEXT.html + template + void getPrivateDataEXT( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + uint64_t * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateDataEXT.html + template + VULKAN_HPP_NODISCARD uint64_t getPrivateDataEXT( ObjectType objectType, + uint64_t objectHandle, + PrivateDataSlot privateDataSlot, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD Result getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR * pVideoSessionParametersInfo, + VideoEncodeSessionParametersFeedbackInfoKHR * pFeedbackInfo, + size_t * pDataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>>::type + getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>>::type + getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, + Uint8_tAllocator & uint8_tAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, std::vector>>::type + getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, std::vector>>::type + getEncodedVideoSessionParametersKHR( const VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo, + Uint8_tAllocator & uint8_tAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + template + VULKAN_HPP_NODISCARD Result createCudaModuleNV( const CudaModuleCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + CudaModuleNV * pModule, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createCudaModuleNV( const CudaModuleCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createCudaModuleNVUnique( const CudaModuleCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + template + VULKAN_HPP_NODISCARD Result getCudaModuleCacheNV( CudaModuleNV module, + size_t * pCacheSize, + void * pCacheData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCudaModuleCacheNV( CudaModuleNV module, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCudaModuleCacheNV( CudaModuleNV module, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + template + VULKAN_HPP_NODISCARD Result createCudaFunctionNV( const CudaFunctionCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + CudaFunctionNV * pFunction, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createCudaFunctionNV( const CudaFunctionCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createCudaFunctionNVUnique( const CudaFunctionCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + void destroyCudaModuleNV( CudaModuleNV module, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + void destroyCudaModuleNV( CudaModuleNV module, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + void destroy( CudaModuleNV module, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaModuleNV.html + template + void destroy( CudaModuleNV module, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + void destroyCudaFunctionNV( CudaFunctionNV function, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + void destroyCudaFunctionNV( CudaFunctionNV function, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + void destroy( CudaFunctionNV function, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyCudaFunctionNV.html + template + void destroy( CudaFunctionNV function, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + // wrapper function for command vkExportMetalObjectsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkExportMetalObjectsEXT.html + template + void exportMetalObjectsEXT( ExportMetalObjectsInfoEXT * pMetalObjectsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkExportMetalObjectsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkExportMetalObjectsEXT.html + template + void exportMetalObjectsEXT( ExportMetalObjectsInfoEXT & metalObjectsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkGetDescriptorSetLayoutSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSizeEXT.html + template + void getDescriptorSetLayoutSizeEXT( DescriptorSetLayout layout, + DeviceSize * pLayoutSizeInBytes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSizeEXT.html + template + VULKAN_HPP_NODISCARD DeviceSize getDescriptorSetLayoutSizeEXT( DescriptorSetLayout layout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorSetLayoutBindingOffsetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html + template + void getDescriptorSetLayoutBindingOffsetEXT( DescriptorSetLayout layout, + uint32_t binding, + DeviceSize * pOffset, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutBindingOffsetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html + template + VULKAN_HPP_NODISCARD DeviceSize getDescriptorSetLayoutBindingOffsetEXT( + DescriptorSetLayout layout, uint32_t binding, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + void getDescriptorEXT( const DescriptorGetInfoEXT * pDescriptorInfo, + size_t dataSize, + void * pDescriptor, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + void getDescriptorEXT( const DescriptorGetInfoEXT & descriptorInfo, + size_t dataSize, + void * pDescriptor, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + VULKAN_HPP_NODISCARD DescriptorType getDescriptorEXT( const DescriptorGetInfoEXT & descriptorInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD Result getBufferOpaqueCaptureDescriptorDataEXT( + const BufferCaptureDescriptorDataInfoEXT * pInfo, void * pData, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getBufferOpaqueCaptureDescriptorDataEXT( const BufferCaptureDescriptorDataInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD Result getImageOpaqueCaptureDescriptorDataEXT( const ImageCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageOpaqueCaptureDescriptorDataEXT( const ImageCaptureDescriptorDataInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageViewOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD Result + getImageViewOpaqueCaptureDescriptorDataEXT( const ImageViewCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageViewOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageViewOpaqueCaptureDescriptorDataEXT( const ImageViewCaptureDescriptorDataInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSamplerOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD Result getSamplerOpaqueCaptureDescriptorDataEXT( + const SamplerCaptureDescriptorDataInfoEXT * pInfo, void * pData, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSamplerOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSamplerOpaqueCaptureDescriptorDataEXT( const SamplerCaptureDescriptorDataInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD Result + getAccelerationStructureOpaqueCaptureDescriptorDataEXT( const AccelerationStructureCaptureDescriptorDataInfoEXT * pInfo, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getAccelerationStructureOpaqueCaptureDescriptorDataEXT( const AccelerationStructureCaptureDescriptorDataInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_device_fault === + + // wrapper function for command vkGetDeviceFaultInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceFaultInfoEXT.html + template + VULKAN_HPP_NODISCARD Result getFaultInfoEXT( DeviceFaultCountsEXT * pFaultCounts, + DeviceFaultInfoEXT * pFaultInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + + // wrapper function for command vkGetMemoryZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, + zx_handle_t * pZirconHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandlePropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result getMemoryZirconHandlePropertiesFUCHSIA( ExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + MemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandlePropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryZirconHandlePropertiesFUCHSIA( + ExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + + // wrapper function for command vkImportSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result importSemaphoreZirconHandleFUCHSIA( const ImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkImportSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + importSemaphoreZirconHandleFUCHSIA( const ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo, + zx_handle_t * pZirconHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreZirconHandleFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result createBufferCollectionFUCHSIA( const BufferCollectionCreateInfoFUCHSIA * pCreateInfo, + const AllocationCallbacks * pAllocator, + BufferCollectionFUCHSIA * pCollection, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createBufferCollectionFUCHSIA( const BufferCollectionCreateInfoFUCHSIA & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createBufferCollectionFUCHSIAUnique( const BufferCollectionCreateInfoFUCHSIA & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetBufferCollectionImageConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionImageConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result + setBufferCollectionImageConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, + const ImageConstraintsInfoFUCHSIA * pImageConstraintsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetBufferCollectionImageConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionImageConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setBufferCollectionImageConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, + const ImageConstraintsInfoFUCHSIA & imageConstraintsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetBufferCollectionBufferConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionBufferConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result + setBufferCollectionBufferConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, + const BufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetBufferCollectionBufferConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionBufferConstraintsFUCHSIA.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + setBufferCollectionBufferConstraintsFUCHSIA( BufferCollectionFUCHSIA collection, + const BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + void destroyBufferCollectionFUCHSIA( BufferCollectionFUCHSIA collection, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + void destroyBufferCollectionFUCHSIA( BufferCollectionFUCHSIA collection, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + void destroy( BufferCollectionFUCHSIA collection, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyBufferCollectionFUCHSIA.html + template + void destroy( BufferCollectionFUCHSIA collection, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferCollectionPropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result getBufferCollectionPropertiesFUCHSIA( BufferCollectionFUCHSIA collection, + BufferCollectionPropertiesFUCHSIA * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferCollectionPropertiesFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getBufferCollectionPropertiesFUCHSIA( BufferCollectionFUCHSIA collection, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + + // wrapper function for command vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.html + template + VULKAN_HPP_NODISCARD Result getSubpassShadingMaxWorkgroupSizeHUAWEI( + RenderPass renderpass, Extent2D * pMaxWorkgroupSize, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSubpassShadingMaxWorkgroupSizeHUAWEI( RenderPass renderpass, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_external_memory_rdma === + + // wrapper function for command vkGetMemoryRemoteAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryRemoteAddressNV.html + template + VULKAN_HPP_NODISCARD Result getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo, + RemoteAddressNV * pAddress, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryRemoteAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryRemoteAddressNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_pipeline_properties === + + // wrapper function for command vkGetPipelinePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelinePropertiesEXT.html + template + VULKAN_HPP_NODISCARD Result getPipelinePropertiesEXT( const PipelineInfoEXT * pPipelineInfo, + BaseOutStructure * pPipelineProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelinePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelinePropertiesEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getPipelinePropertiesEXT( const PipelineInfoEXT & pipelineInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_opacity_micromap === + + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + template + VULKAN_HPP_NODISCARD Result createMicromapEXT( const MicromapCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + MicromapEXT * pMicromap, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createMicromapEXT( const MicromapCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createMicromapEXTUnique( const MicromapCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + void destroyMicromapEXT( MicromapEXT micromap, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + void destroyMicromapEXT( MicromapEXT micromap VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + void destroy( MicromapEXT micromap, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyMicromapEXT.html + template + void destroy( MicromapEXT micromap, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildMicromapsEXT.html + template + VULKAN_HPP_NODISCARD Result buildMicromapsEXT( DeferredOperationKHR deferredOperation, + uint32_t infoCount, + const MicromapBuildInfoEXT * pInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildMicromapsEXT.html + template + VULKAN_HPP_NODISCARD Result buildMicromapsEXT( DeferredOperationKHR deferredOperation, + ArrayProxy const & infos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapEXT.html + template + VULKAN_HPP_NODISCARD Result copyMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapInfoEXT * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapEXT.html + template + VULKAN_HPP_NODISCARD Result copyMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapToMemoryEXT.html + template + VULKAN_HPP_NODISCARD Result copyMicromapToMemoryEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapToMemoryInfoEXT * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapToMemoryEXT.html + template + VULKAN_HPP_NODISCARD Result copyMicromapToMemoryEXT( DeferredOperationKHR deferredOperation, + const CopyMicromapToMemoryInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToMicromapEXT.html + template + VULKAN_HPP_NODISCARD Result copyMemoryToMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMemoryToMicromapInfoEXT * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToMicromapEXT.html + template + VULKAN_HPP_NODISCARD Result copyMemoryToMicromapEXT( DeferredOperationKHR deferredOperation, + const CopyMemoryToMicromapInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD Result writeMicromapsPropertiesEXT( uint32_t micromapCount, + const MicromapEXT * pMicromaps, + QueryType queryType, + size_t dataSize, + void * pData, + size_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + writeMicromapsPropertiesEXT( ArrayProxy const & micromaps, + QueryType queryType, + size_t dataSize, + size_t stride, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type writeMicromapsPropertyEXT( + ArrayProxy const & micromaps, QueryType queryType, size_t stride, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceMicromapCompatibilityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMicromapCompatibilityEXT.html + template + void getMicromapCompatibilityEXT( const MicromapVersionInfoEXT * pVersionInfo, + AccelerationStructureCompatibilityKHR * pCompatibility, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceMicromapCompatibilityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMicromapCompatibilityEXT.html + template + VULKAN_HPP_NODISCARD AccelerationStructureCompatibilityKHR getMicromapCompatibilityEXT( + const MicromapVersionInfoEXT & versionInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMicromapBuildSizesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMicromapBuildSizesEXT.html + template + void getMicromapBuildSizesEXT( AccelerationStructureBuildTypeKHR buildType, + const MicromapBuildInfoEXT * pBuildInfo, + MicromapBuildSizesInfoEXT * pSizeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMicromapBuildSizesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMicromapBuildSizesEXT.html + template + VULKAN_HPP_NODISCARD MicromapBuildSizesInfoEXT + getMicromapBuildSizesEXT( AccelerationStructureBuildTypeKHR buildType, + const MicromapBuildInfoEXT & buildInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_pageable_device_local_memory === + + // wrapper function for command vkSetDeviceMemoryPriorityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDeviceMemoryPriorityEXT.html + template + void setMemoryPriorityEXT( DeviceMemory memory, float priority, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance4 === + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + void getBufferMemoryRequirementsKHR( const DeviceBufferMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getBufferMemoryRequirementsKHR( + const DeviceBufferMemoryRequirements & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirementsKHR( const DeviceBufferMemoryRequirements & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + void getImageMemoryRequirementsKHR( const DeviceImageMemoryRequirements * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getImageMemoryRequirementsKHR( + const DeviceImageMemoryRequirements & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + template + void getImageSparseMemoryRequirementsKHR( const DeviceImageMemoryRequirements * pInfo, + uint32_t * pSparseMemoryRequirementCount, + SparseImageMemoryRequirements2 * pSparseMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + template < + typename SparseImageMemoryRequirements2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirementsKHR( const DeviceImageMemoryRequirements & info, + SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VALVE_descriptor_set_host_mapping === + + // wrapper function for command vkGetDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutHostMappingInfoVALVE.html + template + void getDescriptorSetLayoutHostMappingInfoVALVE( const DescriptorSetBindingReferenceVALVE * pBindingReference, + DescriptorSetLayoutHostMappingInfoVALVE * pHostMapping, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutHostMappingInfoVALVE.html + template + VULKAN_HPP_NODISCARD DescriptorSetLayoutHostMappingInfoVALVE getDescriptorSetLayoutHostMappingInfoVALVE( + const DescriptorSetBindingReferenceVALVE & bindingReference, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDescriptorSetHostMappingVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetHostMappingVALVE.html + template + void getDescriptorSetHostMappingVALVE( DescriptorSet descriptorSet, + void ** ppData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDescriptorSetHostMappingVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetHostMappingVALVE.html + template + VULKAN_HPP_NODISCARD void * getDescriptorSetHostMappingVALVE( DescriptorSet descriptorSet, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_device_generated_commands_compute === + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + void getPipelineIndirectMemoryRequirementsNV( const ComputePipelineCreateInfo * pCreateInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getPipelineIndirectMemoryRequirementsNV( + const ComputePipelineCreateInfo & createInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD StructureChain + getPipelineIndirectMemoryRequirementsNV( const ComputePipelineCreateInfo & createInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineIndirectDeviceAddressNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectDeviceAddressNV.html + template + DeviceAddress getPipelineIndirectAddressNV( const PipelineIndirectDeviceAddressInfoNV * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineIndirectDeviceAddressNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectDeviceAddressNV.html + template + DeviceAddress getPipelineIndirectAddressNV( const PipelineIndirectDeviceAddressInfoNV & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_ARM_tensors === + + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + template + VULKAN_HPP_NODISCARD Result createTensorARM( const TensorCreateInfoARM * pCreateInfo, + const AllocationCallbacks * pAllocator, + TensorARM * pTensor, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createTensorARM( const TensorCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createTensorARMUnique( const TensorCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + void destroyTensorARM( TensorARM tensor, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + void destroyTensorARM( TensorARM tensor VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + void destroy( TensorARM tensor, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorARM.html + template + void destroy( TensorARM tensor, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + template + VULKAN_HPP_NODISCARD Result createTensorViewARM( const TensorViewCreateInfoARM * pCreateInfo, + const AllocationCallbacks * pAllocator, + TensorViewARM * pView, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createTensorViewARM( const TensorViewCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createTensorViewARMUnique( const TensorViewCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + void destroyTensorViewARM( TensorViewARM tensorView, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + void destroyTensorViewARM( TensorViewARM tensorView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + void destroy( TensorViewARM tensorView, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyTensorViewARM.html + template + void destroy( TensorViewARM tensorView, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + void getTensorMemoryRequirementsARM( const TensorMemoryRequirementsInfoARM * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getTensorMemoryRequirementsARM( + const TensorMemoryRequirementsInfoARM & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD StructureChain + getTensorMemoryRequirementsARM( const TensorMemoryRequirementsInfoARM & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindTensorMemoryARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindTensorMemoryARM.html + template + VULKAN_HPP_NODISCARD Result bindTensorMemoryARM( uint32_t bindInfoCount, + const BindTensorMemoryInfoARM * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindTensorMemoryARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindTensorMemoryARM.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindTensorMemoryARM( ArrayProxy const & bindInfos, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + void getTensorMemoryRequirementsARM( const DeviceTensorMemoryRequirementsARM * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getTensorMemoryRequirementsARM( + const DeviceTensorMemoryRequirementsARM & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD StructureChain + getTensorMemoryRequirementsARM( const DeviceTensorMemoryRequirementsARM & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetTensorOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD Result getTensorOpaqueCaptureDescriptorDataARM( + const TensorCaptureDescriptorDataInfoARM * pInfo, void * pData, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetTensorOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getTensorOpaqueCaptureDescriptorDataARM( const TensorCaptureDescriptorDataInfoARM & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetTensorViewOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorViewOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD Result + getTensorViewOpaqueCaptureDescriptorDataARM( const TensorViewCaptureDescriptorDataInfoARM * pInfo, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetTensorViewOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorViewOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getTensorViewOpaqueCaptureDescriptorDataARM( const TensorViewCaptureDescriptorDataInfoARM & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_shader_module_identifier === + + // wrapper function for command vkGetShaderModuleIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleIdentifierEXT.html + template + void getShaderModuleIdentifierEXT( ShaderModule shaderModule, + ShaderModuleIdentifierEXT * pIdentifier, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderModuleIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleIdentifierEXT.html + template + VULKAN_HPP_NODISCARD ShaderModuleIdentifierEXT + getShaderModuleIdentifierEXT( ShaderModule shaderModule, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetShaderModuleCreateInfoIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleCreateInfoIdentifierEXT.html + template + void getShaderModuleCreateInfoIdentifierEXT( const ShaderModuleCreateInfo * pCreateInfo, + ShaderModuleIdentifierEXT * pIdentifier, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderModuleCreateInfoIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleCreateInfoIdentifierEXT.html + template + VULKAN_HPP_NODISCARD ShaderModuleIdentifierEXT getShaderModuleCreateInfoIdentifierEXT( + const ShaderModuleCreateInfo & createInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_optical_flow === + + // wrapper function for command vkCreateOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + template + VULKAN_HPP_NODISCARD Result createOpticalFlowSessionNV( const OpticalFlowSessionCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + OpticalFlowSessionNV * pSession, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createOpticalFlowSessionNV( const OpticalFlowSessionCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createOpticalFlowSessionNVUnique( const OpticalFlowSessionCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + void destroyOpticalFlowSessionNV( OpticalFlowSessionNV session, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + void destroyOpticalFlowSessionNV( OpticalFlowSessionNV session, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + void destroy( OpticalFlowSessionNV session, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyOpticalFlowSessionNV.html + template + void destroy( OpticalFlowSessionNV session, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindOpticalFlowSessionImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindOpticalFlowSessionImageNV.html + template + VULKAN_HPP_NODISCARD Result bindOpticalFlowSessionImageNV( OpticalFlowSessionNV session, + OpticalFlowSessionBindingPointNV bindingPoint, + ImageView view, + ImageLayout layout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkBindOpticalFlowSessionImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindOpticalFlowSessionImageNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindOpticalFlowSessionImageNV( OpticalFlowSessionNV session, + OpticalFlowSessionBindingPointNV bindingPoint, + ImageView view, + ImageLayout layout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkGetRenderingAreaGranularityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularityKHR.html + template + void getRenderingAreaGranularityKHR( const RenderingAreaInfo * pRenderingAreaInfo, + Extent2D * pGranularity, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRenderingAreaGranularityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularityKHR.html + template + VULKAN_HPP_NODISCARD Extent2D getRenderingAreaGranularityKHR( const RenderingAreaInfo & renderingAreaInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + void getImageSubresourceLayoutKHR( const DeviceImageSubresourceInfo * pInfo, + SubresourceLayout2 * pLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_NODISCARD SubresourceLayout2 getImageSubresourceLayoutKHR( + const DeviceImageSubresourceInfo & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageSubresourceLayoutKHR( const DeviceImageSubresourceInfo & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + void getImageSubresourceLayout2KHR( Image image, + const ImageSubresource2 * pSubresource, + SubresourceLayout2 * pLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_NODISCARD SubresourceLayout2 getImageSubresourceLayout2KHR( + Image image, const ImageSubresource2 & subresource, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getImageSubresourceLayout2KHR( + Image image, const ImageSubresource2 & subresource, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_AMD_anti_lag === + + // wrapper function for command vkAntiLagUpdateAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAntiLagUpdateAMD.html + template + void antiLagUpdateAMD( const AntiLagDataAMD * pData, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAntiLagUpdateAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAntiLagUpdateAMD.html + template + void antiLagUpdateAMD( const AntiLagDataAMD & data, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_present_wait2 === + + // wrapper function for command vkWaitForPresent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresent2KHR.html + template + VULKAN_HPP_NODISCARD Result waitForPresent2KHR( SwapchainKHR swapchain, + const PresentWait2InfoKHR * pPresentWait2Info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkWaitForPresent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresent2KHR.html + template + VULKAN_HPP_NODISCARD Result waitForPresent2KHR( SwapchainKHR swapchain, + const PresentWait2InfoKHR & presentWait2Info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_shader_object === + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template + VULKAN_HPP_NODISCARD Result createShadersEXT( uint32_t createInfoCount, + const ShaderCreateInfoEXT * pCreateInfos, + const AllocationCallbacks * pAllocator, + ShaderEXT * pShaders, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createShadersEXT( ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createShadersEXT( ArrayProxy const & createInfos, + Optional allocator, + ShaderEXTAllocator & shaderEXTAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template + VULKAN_HPP_NODISCARD ResultValue createShaderEXT( const ShaderCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, ShaderEXTAllocator>> + createShadersEXTUnique( ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, ShaderEXTAllocator>> + createShadersEXTUnique( ArrayProxy const & createInfos, + Optional allocator, + ShaderEXTAllocator & shaderEXTAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + template + VULKAN_HPP_NODISCARD ResultValue> + createShaderEXTUnique( const ShaderCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + void destroyShaderEXT( ShaderEXT shader, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + void destroyShaderEXT( ShaderEXT shader VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + void destroy( ShaderEXT shader, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyShaderEXT.html + template + void destroy( ShaderEXT shader, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + template + VULKAN_HPP_NODISCARD Result getShaderBinaryDataEXT( ShaderEXT shader, + size_t * pDataSize, + void * pData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getShaderBinaryDataEXT( ShaderEXT shader, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getShaderBinaryDataEXT( ShaderEXT shader, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_pipeline_binary === + + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template + VULKAN_HPP_NODISCARD Result createPipelineBinariesKHR( const PipelineBinaryCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + PipelineBinaryHandlesInfoKHR * pBinaries, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createPipelineBinariesKHR( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createPipelineBinariesKHR( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator, + PipelineBinaryKHRAllocator & pipelineBinaryKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template < + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename PipelineBinaryKHRAllocator = std::allocator>, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineBinaryKHRAllocator>> + createPipelineBinariesKHRUnique( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + template < + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename PipelineBinaryKHRAllocator = std::allocator>, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineBinaryKHRAllocator>> + createPipelineBinariesKHRUnique( const PipelineBinaryCreateInfoKHR & createInfo, + Optional allocator, + PipelineBinaryKHRAllocator & pipelineBinaryKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + void destroyPipelineBinaryKHR( PipelineBinaryKHR pipelineBinary, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + void destroyPipelineBinaryKHR( PipelineBinaryKHR pipelineBinary VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + void destroy( PipelineBinaryKHR pipelineBinary, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPipelineBinaryKHR.html + template + void destroy( PipelineBinaryKHR pipelineBinary, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineKeyKHR.html + template + VULKAN_HPP_NODISCARD Result getPipelineKeyKHR( const PipelineCreateInfoKHR * pPipelineCreateInfo, + PipelineBinaryKeyKHR * pPipelineKey, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineKeyKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getPipelineKeyKHR( Optional pipelineCreateInfo VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + template + VULKAN_HPP_NODISCARD Result getPipelineBinaryDataKHR( const PipelineBinaryDataInfoKHR * pInfo, + PipelineBinaryKeyKHR * pPipelineBinaryKey, + size_t * pPipelineBinaryDataSize, + void * pPipelineBinaryData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>>::type + getPipelineBinaryDataKHR( const PipelineBinaryDataInfoKHR & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>>::type getPipelineBinaryDataKHR( + const PipelineBinaryDataInfoKHR & info, Uint8_tAllocator & uint8_tAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkReleaseCapturedPipelineDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseCapturedPipelineDataKHR.html + template + Result releaseCapturedPipelineDataKHR( const ReleaseCapturedPipelineDataInfoKHR * pInfo, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseCapturedPipelineDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseCapturedPipelineDataKHR.html + template + void releaseCapturedPipelineDataKHR( const ReleaseCapturedPipelineDataInfoKHR & info, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_QCOM_tile_properties === + + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + template + VULKAN_HPP_NODISCARD Result getFramebufferTilePropertiesQCOM( Framebuffer framebuffer, + uint32_t * pPropertiesCount, + TilePropertiesQCOM * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getFramebufferTilePropertiesQCOM( Framebuffer framebuffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getFramebufferTilePropertiesQCOM( + Framebuffer framebuffer, TilePropertiesQCOMAllocator & tilePropertiesQCOMAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDynamicRenderingTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDynamicRenderingTilePropertiesQCOM.html + template + Result getDynamicRenderingTilePropertiesQCOM( const RenderingInfo * pRenderingInfo, + TilePropertiesQCOM * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDynamicRenderingTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDynamicRenderingTilePropertiesQCOM.html + template + VULKAN_HPP_NODISCARD TilePropertiesQCOM getDynamicRenderingTilePropertiesQCOM( + const RenderingInfo & renderingInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesKHR.html + template + VULKAN_HPP_NODISCARD Result releaseSwapchainImagesKHR( const ReleaseSwapchainImagesInfoKHR * pReleaseInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesKHR.html + template + typename ResultValueType::type releaseSwapchainImagesKHR( const ReleaseSwapchainImagesInfoKHR & releaseInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkConvertCooperativeVectorMatrixNV.html + template + VULKAN_HPP_NODISCARD Result convertCooperativeVectorMatrixNV( const ConvertCooperativeVectorMatrixInfoNV * pInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkConvertCooperativeVectorMatrixNV.html + template + VULKAN_HPP_NODISCARD Result convertCooperativeVectorMatrixNV( const ConvertCooperativeVectorMatrixInfoNV & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_low_latency2 === + + // wrapper function for command vkSetLatencySleepModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencySleepModeNV.html + template + VULKAN_HPP_NODISCARD Result setLatencySleepModeNV( SwapchainKHR swapchain, + const LatencySleepModeInfoNV * pSleepModeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetLatencySleepModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencySleepModeNV.html + template + typename ResultValueType::type setLatencySleepModeNV( SwapchainKHR swapchain, + const LatencySleepModeInfoNV & sleepModeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkLatencySleepNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkLatencySleepNV.html + template + Result latencySleepNV( SwapchainKHR swapchain, + const LatencySleepInfoNV * pSleepInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkLatencySleepNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkLatencySleepNV.html + template + void latencySleepNV( SwapchainKHR swapchain, + const LatencySleepInfoNV & sleepInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSetLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencyMarkerNV.html + template + void setLatencyMarkerNV( SwapchainKHR swapchain, + const SetLatencyMarkerInfoNV * pLatencyMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSetLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencyMarkerNV.html + template + void setLatencyMarkerNV( SwapchainKHR swapchain, + const SetLatencyMarkerInfoNV & latencyMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + template + void getLatencyTimingsNV( SwapchainKHR swapchain, + GetLatencyMarkerInfoNV * pLatencyMarkerInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + template < + typename LatencyTimingsFrameReportNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getLatencyTimingsNV( SwapchainKHR swapchain, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + template < + typename LatencyTimingsFrameReportNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getLatencyTimingsNV( SwapchainKHR swapchain, + LatencyTimingsFrameReportNVAllocator & latencyTimingsFrameReportNVAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_ARM_data_graph === + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template + VULKAN_HPP_NODISCARD Result createDataGraphPipelinesARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + uint32_t createInfoCount, + const DataGraphPipelineCreateInfoARM * pCreateInfos, + const AllocationCallbacks * pAllocator, + Pipeline * pPipelines, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createDataGraphPipelinesARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue> + createDataGraphPipelinesARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template + VULKAN_HPP_NODISCARD ResultValue + createDataGraphPipelineARM( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const DataGraphPipelineCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createDataGraphPipelinesARMUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template >, + typename std::enable_if>::value, int>::type = 0> + VULKAN_HPP_NODISCARD ResultValue, PipelineAllocator>> + createDataGraphPipelinesARMUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + ArrayProxy const & createInfos, + Optional allocator, + PipelineAllocator & pipelineAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + template + VULKAN_HPP_NODISCARD ResultValue> + createDataGraphPipelineARMUnique( DeferredOperationKHR deferredOperation, + PipelineCache pipelineCache, + const DataGraphPipelineCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + template + VULKAN_HPP_NODISCARD Result createDataGraphPipelineSessionARM( const DataGraphPipelineSessionCreateInfoARM * pCreateInfo, + const AllocationCallbacks * pAllocator, + DataGraphPipelineSessionARM * pSession, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDataGraphPipelineSessionARM( const DataGraphPipelineSessionCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDataGraphPipelineSessionARMUnique( const DataGraphPipelineSessionCreateInfoARM & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + template + VULKAN_HPP_NODISCARD Result + getDataGraphPipelineSessionBindPointRequirementsARM( const DataGraphPipelineSessionBindPointRequirementsInfoARM * pInfo, + uint32_t * pBindPointRequirementCount, + DataGraphPipelineSessionBindPointRequirementARM * pBindPointRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD + typename ResultValueType>::type + getDataGraphPipelineSessionBindPointRequirementsARM( const DataGraphPipelineSessionBindPointRequirementsInfoARM & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD + typename ResultValueType>::type + getDataGraphPipelineSessionBindPointRequirementsARM( + const DataGraphPipelineSessionBindPointRequirementsInfoARM & info, + DataGraphPipelineSessionBindPointRequirementARMAllocator & dataGraphPipelineSessionBindPointRequirementARMAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + void getDataGraphPipelineSessionMemoryRequirementsARM( const DataGraphPipelineSessionMemoryRequirementsInfoARM * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getDataGraphPipelineSessionMemoryRequirementsARM( + const DataGraphPipelineSessionMemoryRequirementsInfoARM & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD StructureChain + getDataGraphPipelineSessionMemoryRequirementsARM( const DataGraphPipelineSessionMemoryRequirementsInfoARM & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkBindDataGraphPipelineSessionMemoryARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindDataGraphPipelineSessionMemoryARM.html + template + VULKAN_HPP_NODISCARD Result bindDataGraphPipelineSessionMemoryARM( uint32_t bindInfoCount, + const BindDataGraphPipelineSessionMemoryInfoARM * pBindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkBindDataGraphPipelineSessionMemoryARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindDataGraphPipelineSessionMemoryARM.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + bindDataGraphPipelineSessionMemoryARM( ArrayProxy const & bindInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + void destroyDataGraphPipelineSessionARM( DataGraphPipelineSessionARM session, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + void destroyDataGraphPipelineSessionARM( DataGraphPipelineSessionARM session, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + void destroy( DataGraphPipelineSessionARM session, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDataGraphPipelineSessionARM.html + template + void destroy( DataGraphPipelineSessionARM session, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + template + VULKAN_HPP_NODISCARD Result + getDataGraphPipelineAvailablePropertiesARM( const DataGraphPipelineInfoARM * pPipelineInfo, + uint32_t * pPropertiesCount, + DataGraphPipelinePropertyARM * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + template < + typename DataGraphPipelinePropertyARMAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDataGraphPipelineAvailablePropertiesARM( const DataGraphPipelineInfoARM & pipelineInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + template < + typename DataGraphPipelinePropertyARMAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDataGraphPipelineAvailablePropertiesARM( const DataGraphPipelineInfoARM & pipelineInfo, + DataGraphPipelinePropertyARMAllocator & dataGraphPipelinePropertyARMAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDataGraphPipelinePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelinePropertiesARM.html + template + VULKAN_HPP_NODISCARD Result getDataGraphPipelinePropertiesARM( const DataGraphPipelineInfoARM * pPipelineInfo, + uint32_t propertiesCount, + DataGraphPipelinePropertyQueryResultARM * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD Result getScreenBufferPropertiesQNX( const struct _screen_buffer * buffer, + ScreenBufferPropertiesQNX * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_calibrated_timestamps === + + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template + VULKAN_HPP_NODISCARD Result getCalibratedTimestampsKHR( uint32_t timestampCount, + const CalibratedTimestampInfoKHR * pTimestampInfos, + uint64_t * pTimestamps, + uint64_t * pMaxDeviation, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, uint64_t>>::type + getCalibratedTimestampsKHR( ArrayProxy const & timestampInfos, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, uint64_t>>::type + getCalibratedTimestampsKHR( ArrayProxy const & timestampInfos, + Uint64_tAllocator & uint64_tAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCalibratedTimestampKHR( const CalibratedTimestampInfoKHR & timestampInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_external_compute_queue === + + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + template + VULKAN_HPP_NODISCARD Result createExternalComputeQueueNV( const ExternalComputeQueueCreateInfoNV * pCreateInfo, + const AllocationCallbacks * pAllocator, + ExternalComputeQueueNV * pExternalQueue, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createExternalComputeQueueNV( const ExternalComputeQueueCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createExternalComputeQueueNVUnique( const ExternalComputeQueueCreateInfoNV & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + void destroyExternalComputeQueueNV( ExternalComputeQueueNV externalQueue, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + void destroyExternalComputeQueueNV( ExternalComputeQueueNV externalQueue, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + void destroy( ExternalComputeQueueNV externalQueue, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyExternalComputeQueueNV.html + template + void destroy( ExternalComputeQueueNV externalQueue, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper function for command vkGetClusterAccelerationStructureBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetClusterAccelerationStructureBuildSizesNV.html + template + void getClusterAccelerationStructureBuildSizesNV( const ClusterAccelerationStructureInputInfoNV * pInfo, + AccelerationStructureBuildSizesInfoKHR * pSizeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetClusterAccelerationStructureBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetClusterAccelerationStructureBuildSizesNV.html + template + VULKAN_HPP_NODISCARD AccelerationStructureBuildSizesInfoKHR getClusterAccelerationStructureBuildSizesNV( + const ClusterAccelerationStructureInputInfoNV & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper function for command vkGetPartitionedAccelerationStructuresBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPartitionedAccelerationStructuresBuildSizesNV.html + template + void getPartitionedAccelerationStructuresBuildSizesNV( const PartitionedAccelerationStructureInstancesInputNV * pInfo, + AccelerationStructureBuildSizesInfoKHR * pSizeInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPartitionedAccelerationStructuresBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPartitionedAccelerationStructuresBuildSizesNV.html + template + VULKAN_HPP_NODISCARD AccelerationStructureBuildSizesInfoKHR getPartitionedAccelerationStructuresBuildSizesNV( + const PartitionedAccelerationStructureInstancesInputNV & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + void getGeneratedCommandsMemoryRequirementsEXT( const GeneratedCommandsMemoryRequirementsInfoEXT * pInfo, + MemoryRequirements2 * pMemoryRequirements, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_NODISCARD MemoryRequirements2 getGeneratedCommandsMemoryRequirementsEXT( + const GeneratedCommandsMemoryRequirementsInfoEXT & info, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_NODISCARD StructureChain + getGeneratedCommandsMemoryRequirementsEXT( const GeneratedCommandsMemoryRequirementsInfoEXT & info, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_NODISCARD Result createIndirectCommandsLayoutEXT( const IndirectCommandsLayoutCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + IndirectCommandsLayoutEXT * pIndirectCommandsLayout, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createIndirectCommandsLayoutEXT( const IndirectCommandsLayoutCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createIndirectCommandsLayoutEXTUnique( const IndirectCommandsLayoutCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + void destroyIndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT indirectCommandsLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + void destroyIndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT indirectCommandsLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + void destroy( IndirectCommandsLayoutEXT indirectCommandsLayout, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectCommandsLayoutEXT.html + template + void destroy( IndirectCommandsLayoutEXT indirectCommandsLayout, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + template + VULKAN_HPP_NODISCARD Result createIndirectExecutionSetEXT( const IndirectExecutionSetCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + IndirectExecutionSetEXT * pIndirectExecutionSet, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createIndirectExecutionSetEXT( const IndirectExecutionSetCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createIndirectExecutionSetEXTUnique( const IndirectExecutionSetCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + void destroyIndirectExecutionSetEXT( IndirectExecutionSetEXT indirectExecutionSet, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + void destroyIndirectExecutionSetEXT( IndirectExecutionSetEXT indirectExecutionSet VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + void destroy( IndirectExecutionSetEXT indirectExecutionSet, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyIndirectExecutionSetEXT.html + template + void destroy( IndirectExecutionSetEXT indirectExecutionSet, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html + template + void updateIndirectExecutionSetPipelineEXT( IndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const WriteIndirectExecutionSetPipelineEXT * pExecutionSetWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html + template + void updateIndirectExecutionSetPipelineEXT( IndirectExecutionSetEXT indirectExecutionSet, + ArrayProxy const & executionSetWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkUpdateIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetShaderEXT.html + template + void updateIndirectExecutionSetShaderEXT( IndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const WriteIndirectExecutionSetShaderEXT * pExecutionSetWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkUpdateIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetShaderEXT.html + template + void updateIndirectExecutionSetShaderEXT( IndirectExecutionSetEXT indirectExecutionSet, + ArrayProxy const & executionSetWrites, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + + // wrapper function for command vkGetMemoryMetalHandleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandleEXT.html + template + VULKAN_HPP_NODISCARD Result getMemoryMetalHandleEXT( const MemoryGetMetalHandleInfoEXT * pGetMetalHandleInfo, + void ** pHandle, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryMetalHandleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandleEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryMetalHandleEXT( const MemoryGetMetalHandleInfoEXT & getMetalHandleInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandlePropertiesEXT.html + template + VULKAN_HPP_NODISCARD Result getMemoryMetalHandlePropertiesEXT( ExternalMemoryHandleTypeFlagBits handleType, + const void * pHandle, + MemoryMetalHandlePropertiesEXT * pMemoryMetalHandleProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandlePropertiesEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getMemoryMetalHandlePropertiesEXT( + ExternalMemoryHandleTypeFlagBits handleType, HandleType const & handle, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + operator VkDevice() const VULKAN_HPP_NOEXCEPT + { + return m_device; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_device != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_device == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Device const & ) const = default; +#endif + + private: + VkDevice m_device = {}; + }; + + template <> + struct CppType + { + using Type = Device; + }; + + template <> + struct CppType + { + using Type = Device; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Device; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeKHR.html + class DisplayModeKHR + { + public: + using CType = VkDisplayModeKHR; + using NativeType = VkDisplayModeKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eDisplayModeKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eDisplayModeKHR; + + public: + DisplayModeKHR() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + DisplayModeKHR( DisplayModeKHR const & rhs ) = default; + DisplayModeKHR & operator=( DisplayModeKHR const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + DisplayModeKHR( DisplayModeKHR && rhs ) = default; + DisplayModeKHR & operator=( DisplayModeKHR && rhs ) = default; +#else + DisplayModeKHR( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT : m_displayModeKHR( exchange( rhs.m_displayModeKHR, {} ) ) {} + + DisplayModeKHR & operator=( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + m_displayModeKHR = exchange( rhs.m_displayModeKHR, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR DisplayModeKHR( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + VULKAN_HPP_TYPESAFE_EXPLICIT DisplayModeKHR( VkDisplayModeKHR displayModeKHR ) VULKAN_HPP_NOEXCEPT : m_displayModeKHR( displayModeKHR ) {} + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) + DisplayModeKHR & operator=( VkDisplayModeKHR displayModeKHR ) VULKAN_HPP_NOEXCEPT + { + m_displayModeKHR = displayModeKHR; + return *this; + } +#endif + + DisplayModeKHR & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_displayModeKHR = {}; + return *this; + } + + VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDisplayModeKHR() const VULKAN_HPP_NOEXCEPT + { + return m_displayModeKHR; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_displayModeKHR != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_displayModeKHR == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayModeKHR const & ) const = default; +#endif + + private: + VkDisplayModeKHR m_displayModeKHR = {}; + }; + + template <> + struct CppType + { + using Type = DisplayModeKHR; + }; + + template <> + struct CppType + { + using Type = DisplayModeKHR; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = DisplayModeKHR; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPhysicalDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevice.html + class PhysicalDevice + { + public: + using CType = VkPhysicalDevice; + using NativeType = VkPhysicalDevice; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::ePhysicalDevice; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::ePhysicalDevice; + + public: + PhysicalDevice() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + PhysicalDevice( PhysicalDevice const & rhs ) = default; + PhysicalDevice & operator=( PhysicalDevice const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + PhysicalDevice( PhysicalDevice && rhs ) = default; + PhysicalDevice & operator=( PhysicalDevice && rhs ) = default; +#else + PhysicalDevice( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT : m_physicalDevice( exchange( rhs.m_physicalDevice, {} ) ) {} + + PhysicalDevice & operator=( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT + { + m_physicalDevice = exchange( rhs.m_physicalDevice, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR PhysicalDevice( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + PhysicalDevice( VkPhysicalDevice physicalDevice ) VULKAN_HPP_NOEXCEPT : m_physicalDevice( physicalDevice ) {} + + PhysicalDevice & operator=( VkPhysicalDevice physicalDevice ) VULKAN_HPP_NOEXCEPT + { + m_physicalDevice = physicalDevice; + return *this; + } + + PhysicalDevice & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_physicalDevice = {}; + return *this; + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetPhysicalDeviceFeatures, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures.html + template + void getFeatures( PhysicalDeviceFeatures * pFeatures, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFeatures, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceFeatures getFeatures( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties.html + template + void getFormatProperties( Format format, + FormatProperties * pFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties.html + template + VULKAN_HPP_NODISCARD FormatProperties getFormatProperties( Format format, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties.html + template + VULKAN_HPP_NODISCARD Result getImageFormatProperties( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags, + ImageFormatProperties * pImageFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageFormatProperties( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties.html + template + void getProperties( PhysicalDeviceProperties * pProperties, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceProperties getProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + template + void getQueueFamilyProperties( uint32_t * pQueueFamilyPropertyCount, + QueueFamilyProperties * pQueueFamilyProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties.html + template + void getMemoryProperties( PhysicalDeviceMemoryProperties * pMemoryProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceMemoryProperties + getMemoryProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + template + VULKAN_HPP_NODISCARD Result createDevice( const DeviceCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Device * pDevice, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDevice( const DeviceCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDeviceUnique( const DeviceCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + template + VULKAN_HPP_NODISCARD Result enumerateDeviceExtensionProperties( const char * pLayerName, + uint32_t * pPropertyCount, + ExtensionProperties * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateDeviceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateDeviceExtensionProperties( Optional layerName, + ExtensionPropertiesAllocator & extensionPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + template + VULKAN_HPP_NODISCARD Result enumerateDeviceLayerProperties( uint32_t * pPropertyCount, + LayerProperties * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateDeviceLayerProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateDeviceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + template + void getSparseImageFormatProperties( Format format, + ImageType type, + SampleCountFlagBits samples, + ImageUsageFlags usage, + ImageTiling tiling, + uint32_t * pPropertyCount, + SparseImageFormatProperties * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + template < + typename SparseImageFormatPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties( Format format, + ImageType type, + SampleCountFlagBits samples, + ImageUsageFlags usage, + ImageTiling tiling, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + template < + typename SparseImageFormatPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties( Format format, + ImageType type, + SampleCountFlagBits samples, + ImageUsageFlags usage, + ImageTiling tiling, + SparseImageFormatPropertiesAllocator & sparseImageFormatPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + void getFeatures2( PhysicalDeviceFeatures2 * pFeatures, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceFeatures2 getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_NODISCARD StructureChain getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + void getProperties2( PhysicalDeviceProperties2 * pProperties, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceProperties2 getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + void getFormatProperties2( Format format, + FormatProperties2 * pFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_NODISCARD FormatProperties2 getFormatProperties2( Format format, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain + getFormatProperties2( Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD Result getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + ImageFormatProperties2 * pImageFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template + void getQueueFamilyProperties2( uint32_t * pQueueFamilyPropertyCount, + QueueFamilyProperties2 * pQueueFamilyProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + void getMemoryProperties2( PhysicalDeviceMemoryProperties2 * pMemoryProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceMemoryProperties2 + getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain + getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + template + void getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, + uint32_t * pPropertyCount, + SparseImageFormatProperties2 * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + template < + typename SparseImageFormatProperties2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + template < + typename SparseImageFormatProperties2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, + SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalBufferProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferProperties.html + template + void getExternalBufferProperties( const PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, + ExternalBufferProperties * pExternalBufferProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalBufferProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferProperties.html + template + VULKAN_HPP_NODISCARD ExternalBufferProperties getExternalBufferProperties( + const PhysicalDeviceExternalBufferInfo & externalBufferInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalFenceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFenceProperties.html + template + void getExternalFenceProperties( const PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, + ExternalFenceProperties * pExternalFenceProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalFenceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFenceProperties.html + template + VULKAN_HPP_NODISCARD ExternalFenceProperties getExternalFenceProperties( + const PhysicalDeviceExternalFenceInfo & externalFenceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphoreProperties.html + template + void getExternalSemaphoreProperties( const PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, + ExternalSemaphoreProperties * pExternalSemaphoreProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphoreProperties.html + template + VULKAN_HPP_NODISCARD ExternalSemaphoreProperties + getExternalSemaphoreProperties( const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + template + VULKAN_HPP_NODISCARD Result getToolProperties( uint32_t * pToolCount, + PhysicalDeviceToolProperties * pToolProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + template < + typename PhysicalDeviceToolPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getToolProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + template < + typename PhysicalDeviceToolPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getToolProperties( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_surface === + + // wrapper function for command vkGetPhysicalDeviceSurfaceSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html + template + VULKAN_HPP_NODISCARD Result getSurfaceSupportKHR( uint32_t queueFamilyIndex, + SurfaceKHR surface, + Bool32 * pSupported, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSurfaceSupportKHR( uint32_t queueFamilyIndex, SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD Result getSurfaceCapabilitiesKHR( SurfaceKHR surface, + SurfaceCapabilitiesKHR * pSurfaceCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSurfaceCapabilitiesKHR( SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + template + VULKAN_HPP_NODISCARD Result getSurfaceFormatsKHR( SurfaceKHR surface, + uint32_t * pSurfaceFormatCount, + SurfaceFormatKHR * pSurfaceFormats, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfaceFormatsKHR( SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getSurfaceFormatsKHR( + SurfaceKHR surface, SurfaceFormatKHRAllocator & surfaceFormatKHRAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + template + VULKAN_HPP_NODISCARD Result getSurfacePresentModesKHR( SurfaceKHR surface, + uint32_t * pPresentModeCount, + PresentModeKHR * pPresentModes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfacePresentModesKHR( SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getSurfacePresentModesKHR( + SurfaceKHR surface, PresentModeKHRAllocator & presentModeKHRAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_swapchain === + + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + template + VULKAN_HPP_NODISCARD Result getPresentRectanglesKHR( SurfaceKHR surface, + uint32_t * pRectCount, + Rect2D * pRects, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPresentRectanglesKHR( SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getPresentRectanglesKHR( SurfaceKHR surface, Rect2DAllocator & rect2DAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_display === + + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayPropertiesKHR( uint32_t * pPropertyCount, + DisplayPropertiesKHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPropertiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPropertiesKHR( DisplayPropertiesKHRAllocator & displayPropertiesKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayPlanePropertiesKHR( uint32_t * pPropertyCount, + DisplayPlanePropertiesKHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPlanePropertiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPlanePropertiesKHR( DisplayPlanePropertiesKHRAllocator & displayPlanePropertiesKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, + uint32_t * pDisplayCount, + DisplayKHR * pDisplays, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getDisplayPlaneSupportedDisplaysKHR( + uint32_t planeIndex, DisplayKHRAllocator & displayKHRAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayModePropertiesKHR( DisplayKHR display, + uint32_t * pPropertyCount, + DisplayModePropertiesKHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayModePropertiesKHR( DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayModePropertiesKHR( DisplayKHR display, + DisplayModePropertiesKHRAllocator & displayModePropertiesKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + template + VULKAN_HPP_NODISCARD Result createDisplayModeKHR( DisplayKHR display, + const DisplayModeCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + DisplayModeKHR * pMode, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDisplayModeKHR( DisplayKHR display, + const DisplayModeCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDisplayModeKHRUnique( DisplayKHR display, + const DisplayModeCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayPlaneCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, + uint32_t planeIndex, + DisplayPlaneCapabilitiesKHR * pCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayPlaneCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getDisplayPlaneCapabilitiesKHR( DisplayModeKHR mode, uint32_t planeIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + // wrapper function for command vkGetPhysicalDeviceXlibPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXlibPresentationSupportKHR.html + template + Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, + Display * dpy, + VisualID visualID, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceXlibPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXlibPresentationSupportKHR.html + template + Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, + Display & dpy, + VisualID visualID, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + // wrapper function for command vkGetPhysicalDeviceXcbPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html + template + Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, + xcb_connection_t * connection, + xcb_visualid_t visual_id, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceXcbPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html + template + Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, + xcb_connection_t & connection, + xcb_visualid_t visual_id, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + // wrapper function for command vkGetPhysicalDeviceWaylandPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWaylandPresentationSupportKHR.html + template + Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, + struct wl_display * display, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceWaylandPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWaylandPresentationSupportKHR.html + template + Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, + struct wl_display & display, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + // wrapper function for command vkGetPhysicalDeviceWin32PresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWin32PresentationSupportKHR.html + template + Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_video_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD Result getVideoCapabilitiesKHR( const VideoProfileInfoKHR * pVideoProfile, + VideoCapabilitiesKHR * pCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getVideoCapabilitiesKHR( const VideoProfileInfoKHR & videoProfile, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoCapabilitiesKHR( const VideoProfileInfoKHR & videoProfile, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR * pVideoFormatInfo, + uint32_t * pVideoFormatPropertyCount, + VideoFormatPropertiesKHR * pVideoFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, + VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, + StructureChainAllocator & structureChainAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.html + template + VULKAN_HPP_NODISCARD Result getExternalImageFormatPropertiesNV( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags, + ExternalMemoryHandleTypeFlagsNV externalHandleType, + ExternalImageFormatPropertiesNV * pExternalImageFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getExternalImageFormatPropertiesNV( Format format, + ImageType type, + ImageTiling tiling, + ImageUsageFlags usage, + ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + ExternalMemoryHandleTypeFlagsNV externalHandleType VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_get_physical_device_properties2 === + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + void getFeatures2KHR( PhysicalDeviceFeatures2 * pFeatures, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceFeatures2 getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + void getProperties2KHR( PhysicalDeviceProperties2 * pProperties, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceProperties2 getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + void getFormatProperties2KHR( Format format, + FormatProperties2 * pFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD FormatProperties2 getFormatProperties2KHR( Format format, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getFormatProperties2KHR( Format format, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD Result getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + ImageFormatProperties2 * pImageFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template + void getQueueFamilyProperties2KHR( uint32_t * pQueueFamilyPropertyCount, + QueueFamilyProperties2 * pQueueFamilyProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + void getMemoryProperties2KHR( PhysicalDeviceMemoryProperties2 * pMemoryProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_NODISCARD PhysicalDeviceMemoryProperties2 + getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + template + void getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 * pFormatInfo, + uint32_t * pPropertyCount, + SparseImageFormatProperties2 * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + template < + typename SparseImageFormatProperties2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + template < + typename SparseImageFormatProperties2Allocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo, + SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalBufferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferPropertiesKHR.html + template + void getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfo * pExternalBufferInfo, + ExternalBufferProperties * pExternalBufferProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalBufferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferPropertiesKHR.html + template + VULKAN_HPP_NODISCARD ExternalBufferProperties getExternalBufferPropertiesKHR( + const PhysicalDeviceExternalBufferInfo & externalBufferInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_external_semaphore_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.html + template + void getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo, + ExternalSemaphoreProperties * pExternalSemaphoreProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.html + template + VULKAN_HPP_NODISCARD ExternalSemaphoreProperties + getExternalSemaphorePropertiesKHR( const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_direct_mode_display === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkReleaseDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseDisplayEXT.html + template + Result releaseDisplayEXT( DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkReleaseDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseDisplayEXT.html + template + void releaseDisplayEXT( DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + +#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + + // wrapper function for command vkAcquireXlibDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireXlibDisplayEXT.html + template + VULKAN_HPP_NODISCARD Result acquireXlibDisplayEXT( Display * dpy, + DisplayKHR display, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireXlibDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireXlibDisplayEXT.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + acquireXlibDisplayEXT( Display & dpy, DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + template + VULKAN_HPP_NODISCARD Result getRandROutputDisplayEXT( Display * dpy, + RROutput rrOutput, + DisplayKHR * pDisplay, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getRandROutputDisplayEXTUnique( Display & dpy, RROutput rrOutput, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2EXT.html + template + VULKAN_HPP_NODISCARD Result getSurfaceCapabilities2EXT( SurfaceKHR surface, + SurfaceCapabilities2EXT * pSurfaceCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2EXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSurfaceCapabilities2EXT( SurfaceKHR surface, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_external_fence_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalFencePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFencePropertiesKHR.html + template + void getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfo * pExternalFenceInfo, + ExternalFenceProperties * pExternalFenceProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalFencePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFencePropertiesKHR.html + template + VULKAN_HPP_NODISCARD ExternalFenceProperties getExternalFencePropertiesKHR( + const PhysicalDeviceExternalFenceInfo & externalFenceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_performance_query === + + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + template + VULKAN_HPP_NODISCARD Result + enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, + uint32_t * pCounterCount, + PerformanceCounterKHR * pCounters, + PerformanceCounterDescriptionKHR * pCounterDescriptions, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + template , + typename PerformanceCounterDescriptionKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value && + std::is_same::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, + std::vector>>::type + enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + template , + typename PerformanceCounterDescriptionKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value && + std::is_same::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType, + std::vector>>::type + enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex, + PerformanceCounterKHRAllocator & performanceCounterKHRAllocator, + PerformanceCounterDescriptionKHRAllocator & performanceCounterDescriptionKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.html + template + void getQueueFamilyPerformanceQueryPassesKHR( const QueryPoolPerformanceCreateInfoKHR * pPerformanceQueryCreateInfo, + uint32_t * pNumPasses, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.html + template + VULKAN_HPP_NODISCARD uint32_t + getQueueFamilyPerformanceQueryPassesKHR( const QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_get_surface_capabilities2 === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD Result getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + SurfaceCapabilities2KHR * pSurfaceCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template + VULKAN_HPP_NODISCARD Result getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + uint32_t * pSurfaceFormatCount, + SurfaceFormat2KHR * pSurfaceFormats, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, + SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, + StructureChainAllocator & structureChainAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_get_display_properties2 === + + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayProperties2KHR( uint32_t * pPropertyCount, + DisplayProperties2KHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayProperties2KHR( DisplayProperties2KHRAllocator & displayProperties2KHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayPlaneProperties2KHR( uint32_t * pPropertyCount, + DisplayPlaneProperties2KHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPlaneProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayPlaneProperties2KHR( DisplayPlaneProperties2KHRAllocator & displayPlaneProperties2KHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayModeProperties2KHR( DisplayKHR display, + uint32_t * pPropertyCount, + DisplayModeProperties2KHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayModeProperties2KHR( DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayModeProperties2KHR( DisplayKHR display, + DisplayModeProperties2KHRAllocator & displayModeProperties2KHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDisplayModeProperties2KHR( DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type getDisplayModeProperties2KHR( + DisplayKHR display, StructureChainAllocator & structureChainAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetDisplayPlaneCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD Result getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR * pDisplayPlaneInfo, + DisplayPlaneCapabilities2KHR * pCapabilities, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDisplayPlaneCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR & displayPlaneInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_sample_locations === + + // wrapper function for command vkGetPhysicalDeviceMultisamplePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html + template + void getMultisamplePropertiesEXT( SampleCountFlagBits samples, + MultisamplePropertiesEXT * pMultisampleProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceMultisamplePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html + template + VULKAN_HPP_NODISCARD MultisamplePropertiesEXT + getMultisamplePropertiesEXT( SampleCountFlagBits samples, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + template + VULKAN_HPP_NODISCARD Result getCalibrateableTimeDomainsEXT( uint32_t * pTimeDomainCount, + TimeDomainKHR * pTimeDomains, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCalibrateableTimeDomainsEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCalibrateableTimeDomainsEXT( TimeDomainKHRAllocator & timeDomainKHRAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_fragment_shading_rate === + + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + template + VULKAN_HPP_NODISCARD Result getFragmentShadingRatesKHR( uint32_t * pFragmentShadingRateCount, + PhysicalDeviceFragmentShadingRateKHR * pFragmentShadingRates, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + template < + typename PhysicalDeviceFragmentShadingRateKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getFragmentShadingRatesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + template < + typename PhysicalDeviceFragmentShadingRateKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getFragmentShadingRatesKHR( PhysicalDeviceFragmentShadingRateKHRAllocator & physicalDeviceFragmentShadingRateKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_EXT_tooling_info === + + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + template + VULKAN_HPP_NODISCARD Result getToolPropertiesEXT( uint32_t * pToolCount, + PhysicalDeviceToolProperties * pToolProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + template < + typename PhysicalDeviceToolPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getToolPropertiesEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + template < + typename PhysicalDeviceToolPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getToolPropertiesEXT( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + template + VULKAN_HPP_NODISCARD Result getCooperativeMatrixPropertiesNV( uint32_t * pPropertyCount, + CooperativeMatrixPropertiesNV * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + template < + typename CooperativeMatrixPropertiesNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCooperativeMatrixPropertiesNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + template < + typename CooperativeMatrixPropertiesNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCooperativeMatrixPropertiesNV( CooperativeMatrixPropertiesNVAllocator & cooperativeMatrixPropertiesNVAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_coverage_reduction_mode === + + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + template + VULKAN_HPP_NODISCARD Result + getSupportedFramebufferMixedSamplesCombinationsNV( uint32_t * pCombinationCount, + FramebufferMixedSamplesCombinationNV * pCombinations, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + template < + typename FramebufferMixedSamplesCombinationNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSupportedFramebufferMixedSamplesCombinationsNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + template < + typename FramebufferMixedSamplesCombinationNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSupportedFramebufferMixedSamplesCombinationsNV( FramebufferMixedSamplesCombinationNVAllocator & framebufferMixedSamplesCombinationNVAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + template + VULKAN_HPP_NODISCARD Result getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + uint32_t * pPresentModeCount, + PresentModeKHR * pPresentModes, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, + PresentModeKHRAllocator & presentModeKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_acquire_drm_display === + +#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD Result acquireDrmDisplayEXT( int32_t drmFd, + DisplayKHR display, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#else + // wrapper function for command vkAcquireDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireDrmDisplayEXT.html + template + typename ResultValueType::type + acquireDrmDisplayEXT( int32_t drmFd, DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD Result getDrmDisplayEXT( int32_t drmFd, + uint32_t connectorId, + DisplayKHR * display, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getDrmDisplayEXTUnique( int32_t drmFd, uint32_t connectorId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result + getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR * pQualityLevelInfo, + VideoEncodeQualityLevelPropertiesKHR * pQualityLevelProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkAcquireWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD Result acquireWinrtDisplayNV( DisplayKHR display, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# else + // wrapper function for command vkAcquireWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType::type + acquireWinrtDisplayNV( DisplayKHR display, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD Result getWinrtDisplayNV( uint32_t deviceRelativeId, + DisplayKHR * pDisplay, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type getWinrtDisplayNV( uint32_t deviceRelativeId, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getWinrtDisplayNVUnique( uint32_t deviceRelativeId, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + // wrapper function for command vkGetPhysicalDeviceDirectFBPresentationSupportEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.html + template + Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, + IDirectFB * dfb, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceDirectFBPresentationSupportEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.html + template + Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, + IDirectFB & dfb, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + // wrapper function for command vkGetPhysicalDeviceScreenPresentationSupportQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceScreenPresentationSupportQNX.html + template + Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, + struct _screen_window * window, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceScreenPresentationSupportQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceScreenPresentationSupportQNX.html + template + Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, + struct _screen_window & window, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_ARM_tensors === + + // wrapper function for command vkGetPhysicalDeviceExternalTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalTensorPropertiesARM.html + template + void getExternalTensorPropertiesARM( const PhysicalDeviceExternalTensorInfoARM * pExternalTensorInfo, + ExternalTensorPropertiesARM * pExternalTensorProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceExternalTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalTensorPropertiesARM.html + template + VULKAN_HPP_NODISCARD ExternalTensorPropertiesARM getExternalTensorPropertiesARM( + const PhysicalDeviceExternalTensorInfoARM & externalTensorInfo, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_optical_flow === + + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + template + VULKAN_HPP_NODISCARD Result getOpticalFlowImageFormatsNV( const OpticalFlowImageFormatInfoNV * pOpticalFlowImageFormatInfo, + uint32_t * pFormatCount, + OpticalFlowImageFormatPropertiesNV * pImageFormatProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getOpticalFlowImageFormatsNV( const OpticalFlowImageFormatInfoNV & opticalFlowImageFormatInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getOpticalFlowImageFormatsNV( const OpticalFlowImageFormatInfoNV & opticalFlowImageFormatInfo, + OpticalFlowImageFormatPropertiesNVAllocator & opticalFlowImageFormatPropertiesNVAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + template + VULKAN_HPP_NODISCARD Result getCooperativeVectorPropertiesNV( uint32_t * pPropertyCount, + CooperativeVectorPropertiesNV * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + template < + typename CooperativeVectorPropertiesNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCooperativeVectorPropertiesNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + template < + typename CooperativeVectorPropertiesNVAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCooperativeVectorPropertiesNV( CooperativeVectorPropertiesNVAllocator & cooperativeVectorPropertiesNVAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + template + VULKAN_HPP_NODISCARD Result getCooperativeMatrixPropertiesKHR( uint32_t * pPropertyCount, + CooperativeMatrixPropertiesKHR * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + template < + typename CooperativeMatrixPropertiesKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCooperativeMatrixPropertiesKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + template < + typename CooperativeMatrixPropertiesKHRAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCooperativeMatrixPropertiesKHR( CooperativeMatrixPropertiesKHRAllocator & cooperativeMatrixPropertiesKHRAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_ARM_data_graph === + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + template + VULKAN_HPP_NODISCARD Result getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex, + uint32_t * pQueueFamilyDataGraphPropertyCount, + QueueFamilyDataGraphPropertiesARM * pQueueFamilyDataGraphProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex, + QueueFamilyDataGraphPropertiesARMAllocator & queueFamilyDataGraphPropertiesARMAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM.html + template + void getQueueFamilyDataGraphProcessingEnginePropertiesARM( + const PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM * pQueueFamilyDataGraphProcessingEngineInfo, + QueueFamilyDataGraphProcessingEnginePropertiesARM * pQueueFamilyDataGraphProcessingEngineProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM.html + template + VULKAN_HPP_NODISCARD QueueFamilyDataGraphProcessingEnginePropertiesARM getQueueFamilyDataGraphProcessingEnginePropertiesARM( + const PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & queueFamilyDataGraphProcessingEngineInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + template + VULKAN_HPP_NODISCARD Result getCalibrateableTimeDomainsKHR( uint32_t * pTimeDomainCount, + TimeDomainKHR * pTimeDomains, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCalibrateableTimeDomainsKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + getCalibrateableTimeDomainsKHR( TimeDomainKHRAllocator & timeDomainKHRAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_NV_cooperative_matrix2 === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + template + VULKAN_HPP_NODISCARD Result + getCooperativeMatrixFlexibleDimensionsPropertiesNV( uint32_t * pPropertyCount, + CooperativeMatrixFlexibleDimensionsPropertiesNV * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD + typename ResultValueType>::type + getCooperativeMatrixFlexibleDimensionsPropertiesNV( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, + int>::type = 0> + VULKAN_HPP_NODISCARD + typename ResultValueType>::type + getCooperativeMatrixFlexibleDimensionsPropertiesNV( + CooperativeMatrixFlexibleDimensionsPropertiesNVAllocator & cooperativeMatrixFlexibleDimensionsPropertiesNVAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + operator VkPhysicalDevice() const VULKAN_HPP_NOEXCEPT + { + return m_physicalDevice; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_physicalDevice != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_physicalDevice == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevice const & ) const = default; +#endif + + private: + VkPhysicalDevice m_physicalDevice = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevice; + }; + + template <> + struct CppType + { + using Type = PhysicalDevice; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = PhysicalDevice; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkInstance.html + class Instance + { + public: + using CType = VkInstance; + using NativeType = VkInstance; + + static VULKAN_HPP_CONST_OR_CONSTEXPR ObjectType objectType = ObjectType::eInstance; + static VULKAN_HPP_CONST_OR_CONSTEXPR DebugReportObjectTypeEXT debugReportObjectType = DebugReportObjectTypeEXT::eInstance; + + public: + Instance() VULKAN_HPP_NOEXCEPT {} // = default; - try to workaround a compiler issue + + Instance( Instance const & rhs ) = default; + Instance & operator=( Instance const & rhs ) = default; + +#if !defined( VULKAN_HPP_HANDLES_MOVE_EXCHANGE ) + Instance( Instance && rhs ) = default; + Instance & operator=( Instance && rhs ) = default; +#else + Instance( Instance && rhs ) VULKAN_HPP_NOEXCEPT : m_instance( exchange( rhs.m_instance, {} ) ) {} + + Instance & operator=( Instance && rhs ) VULKAN_HPP_NOEXCEPT + { + m_instance = exchange( rhs.m_instance, {} ); + return *this; + } +#endif + + VULKAN_HPP_CONSTEXPR Instance( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {} + + Instance( VkInstance instance ) VULKAN_HPP_NOEXCEPT : m_instance( instance ) {} + + Instance & operator=( VkInstance instance ) VULKAN_HPP_NOEXCEPT + { + m_instance = instance; + return *this; + } + + Instance & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + m_instance = {}; + return *this; + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkDestroyInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyInstance.html + template + void destroy( const AllocationCallbacks * pAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyInstance.html + template + void destroy( Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + template + VULKAN_HPP_NODISCARD Result enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount, + PhysicalDevice * pPhysicalDevices, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumeratePhysicalDevices( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumeratePhysicalDevices( PhysicalDeviceAllocator & physicalDeviceAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkGetInstanceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetInstanceProcAddr.html + template + PFN_vkVoidFunction getProcAddr( const char * pName, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkGetInstanceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetInstanceProcAddr.html + template + PFN_VoidFunction getProcAddr( const std::string & name, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + template + VULKAN_HPP_NODISCARD Result enumeratePhysicalDeviceGroups( uint32_t * pPhysicalDeviceGroupCount, + PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + template < + typename PhysicalDeviceGroupPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumeratePhysicalDeviceGroups( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + template < + typename PhysicalDeviceGroupPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumeratePhysicalDeviceGroups( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_surface === + + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + void destroySurfaceKHR( SurfaceKHR surface, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + void destroySurfaceKHR( SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + void destroy( SurfaceKHR surface, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroySurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySurfaceKHR.html + template + void destroy( SurfaceKHR surface, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_KHR_display === + + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + template + VULKAN_HPP_NODISCARD Result createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDisplayPlaneSurfaceKHRUnique( const DisplaySurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + template + VULKAN_HPP_NODISCARD Result createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createXlibSurfaceKHRUnique( const XlibSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + template + VULKAN_HPP_NODISCARD Result createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createXcbSurfaceKHRUnique( const XcbSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + template + VULKAN_HPP_NODISCARD Result createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createWaylandSurfaceKHRUnique( const WaylandSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + template + VULKAN_HPP_NODISCARD Result createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createAndroidSurfaceKHRUnique( const AndroidSurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + template + VULKAN_HPP_NODISCARD Result createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createWin32SurfaceKHRUnique( const Win32SurfaceCreateInfoKHR & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + template + VULKAN_HPP_NODISCARD Result createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + DebugReportCallbackEXT * pCallback, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDebugReportCallbackEXTUnique( const DebugReportCallbackCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + void destroyDebugReportCallbackEXT( DebugReportCallbackEXT callback VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + void destroy( DebugReportCallbackEXT callback, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugReportCallbackEXT.html + template + void destroy( DebugReportCallbackEXT callback, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDebugReportMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugReportMessageEXT.html + template + void debugReportMessageEXT( DebugReportFlagsEXT flags, + DebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char * pLayerPrefix, + const char * pMessage, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDebugReportMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugReportMessageEXT.html + template + void debugReportMessageEXT( DebugReportFlagsEXT flags, + DebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const std::string & layerPrefix, + const std::string & message, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + template + VULKAN_HPP_NODISCARD Result createStreamDescriptorSurfaceGGP( const StreamDescriptorSurfaceCreateInfoGGP * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createStreamDescriptorSurfaceGGP( const StreamDescriptorSurfaceCreateInfoGGP & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createStreamDescriptorSurfaceGGPUnique( const StreamDescriptorSurfaceCreateInfoGGP & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_GGP*/ + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + template + VULKAN_HPP_NODISCARD Result createViSurfaceNN( const ViSurfaceCreateInfoNN * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createViSurfaceNN( const ViSurfaceCreateInfoNN & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createViSurfaceNNUnique( const ViSurfaceCreateInfoNN & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_device_group_creation === + + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + template + VULKAN_HPP_NODISCARD Result enumeratePhysicalDeviceGroupsKHR( uint32_t * pPhysicalDeviceGroupCount, + PhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + template < + typename PhysicalDeviceGroupPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumeratePhysicalDeviceGroupsKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + template < + typename PhysicalDeviceGroupPropertiesAllocator = std::allocator, + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumeratePhysicalDeviceGroupsKHR( PhysicalDeviceGroupPropertiesAllocator & physicalDeviceGroupPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD Result createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createIOSSurfaceMVKUnique( const IOSSurfaceCreateInfoMVK & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD Result createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createMacOSSurfaceMVKUnique( const MacOSSurfaceCreateInfoMVK & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + template + VULKAN_HPP_NODISCARD Result createDebugUtilsMessengerEXT( const DebugUtilsMessengerCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + DebugUtilsMessengerEXT * pMessenger, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDebugUtilsMessengerEXT( const DebugUtilsMessengerCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDebugUtilsMessengerEXTUnique( const DebugUtilsMessengerCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + void destroyDebugUtilsMessengerEXT( DebugUtilsMessengerEXT messenger, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + void destroyDebugUtilsMessengerEXT( DebugUtilsMessengerEXT messenger VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + void destroy( DebugUtilsMessengerEXT messenger, + const AllocationCallbacks * pAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkDestroyDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDebugUtilsMessengerEXT.html + template + void destroy( DebugUtilsMessengerEXT messenger, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkSubmitDebugUtilsMessageEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSubmitDebugUtilsMessageEXT.html + template + void submitDebugUtilsMessageEXT( DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + DebugUtilsMessageTypeFlagsEXT messageTypes, + const DebugUtilsMessengerCallbackDataEXT * pCallbackData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkSubmitDebugUtilsMessageEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSubmitDebugUtilsMessageEXT.html + template + void submitDebugUtilsMessageEXT( DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + DebugUtilsMessageTypeFlagsEXT messageTypes, + const DebugUtilsMessengerCallbackDataEXT & callbackData, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + template + VULKAN_HPP_NODISCARD Result createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createImagePipeSurfaceFUCHSIAUnique( const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + template + VULKAN_HPP_NODISCARD Result createMetalSurfaceEXT( const MetalSurfaceCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createMetalSurfaceEXT( const MetalSurfaceCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createMetalSurfaceEXTUnique( const MetalSurfaceCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_headless_surface === + + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + template + VULKAN_HPP_NODISCARD Result createHeadlessSurfaceEXT( const HeadlessSurfaceCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createHeadlessSurfaceEXT( const HeadlessSurfaceCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createHeadlessSurfaceEXTUnique( const HeadlessSurfaceCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + template + VULKAN_HPP_NODISCARD Result createDirectFBSurfaceEXT( const DirectFBSurfaceCreateInfoEXT * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createDirectFBSurfaceEXT( const DirectFBSurfaceCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createDirectFBSurfaceEXTUnique( const DirectFBSurfaceCreateInfoEXT & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + template + VULKAN_HPP_NODISCARD Result createScreenSurfaceQNX( const ScreenSurfaceCreateInfoQNX * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createScreenSurfaceQNX( const ScreenSurfaceCreateInfoQNX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createScreenSurfaceQNXUnique( const ScreenSurfaceCreateInfoQNX & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + template + VULKAN_HPP_NODISCARD Result createSurfaceOHOS( const SurfaceCreateInfoOHOS * pCreateInfo, + const AllocationCallbacks * pAllocator, + SurfaceKHR * pSurface, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createSurfaceOHOS( const SurfaceCreateInfoOHOS & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createSurfaceOHOSUnique( const SurfaceCreateInfoOHOS & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const; +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +# endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ +#endif /*VK_USE_PLATFORM_OHOS*/ + + operator VkInstance() const VULKAN_HPP_NOEXCEPT + { + return m_instance; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_instance != VK_NULL_HANDLE; + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_instance == VK_NULL_HANDLE; + } + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Instance const & ) const = default; +#endif + + private: + VkInstance m_instance = {}; + }; + + template <> + struct CppType + { + using Type = Instance; + }; + + template <> + struct CppType + { + using Type = Instance; + }; + +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) + template <> + struct CppType + { + using Type = Instance; + }; +#endif + + template <> + struct isVulkanHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + template + VULKAN_HPP_NODISCARD Result createInstance( const InstanceCreateInfo * pCreateInfo, + const AllocationCallbacks * pAllocator, + Instance * pInstance, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type + createInstance( const InstanceCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); +# ifndef VULKAN_HPP_NO_SMART_HANDLE + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + template + VULKAN_HPP_NODISCARD typename ResultValueType>::type + createInstanceUnique( const InstanceCreateInfo & createInfo, + Optional allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); +# endif /* VULKAN_HPP_NO_SMART_HANDLE */ +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + template + VULKAN_HPP_NODISCARD Result enumerateInstanceExtensionProperties( const char * pLayerName, + uint32_t * pPropertyCount, + ExtensionProperties * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateInstanceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateInstanceExtensionProperties( Optional layerName, + ExtensionPropertiesAllocator & extensionPropertiesAllocator, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + template + VULKAN_HPP_NODISCARD Result enumerateInstanceLayerProperties( uint32_t * pPropertyCount, + LayerProperties * pProperties, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateInstanceLayerProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + template , + typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE, + typename std::enable_if::value, int>::type = 0> + VULKAN_HPP_NODISCARD typename ResultValueType>::type + enumerateInstanceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator, Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkEnumerateInstanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceVersion.html + template + VULKAN_HPP_NODISCARD Result enumerateInstanceVersion( uint32_t * pApiVersion, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT; +#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE + // wrapper function for command vkEnumerateInstanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceVersion.html + template + VULKAN_HPP_NODISCARD typename ResultValueType::type enumerateInstanceVersion( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ); +#endif /* VULKAN_HPP_DISABLE_ENHANCED_MODE */ + + // operators to compare VULKAN_HPP_NAMESPACE::-handles +#if !defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + template ::value, int>::type = 0> + bool operator==( T const & lhs, T const & rhs ) + { + return static_cast( lhs ) == static_cast( rhs ); + } + + template ::value, int>::type = 0> + bool operator!=( T const & lhs, T const & rhs ) + { + return static_cast( lhs ) != static_cast( rhs ); + } + + template ::value, int>::type = 0> + bool operator<( T const & lhs, T const & rhs ) + { + return static_cast( lhs ) < static_cast( rhs ); + } + + template ::value, int>::type = 0> + bool operator<=( T const & lhs, T const & rhs ) + { + return static_cast( lhs ) <= static_cast( rhs ); + } + + template ::value, int>::type = 0> + bool operator>( T const & lhs, T const & rhs ) + { + return static_cast( lhs ) > static_cast( rhs ); + } + + template ::value, int>::type = 0> + bool operator>=( T const & lhs, T const & rhs ) + { + return static_cast( lhs ) >= static_cast( rhs ); + } +#endif + + template ::value, int>::type = 0> + bool operator==( T const & v, std::nullptr_t ) + { + return !v; + } + + template ::value, int>::type = 0> + bool operator==( std::nullptr_t, T const & v ) + { + return !v; + } + + template ::value, int>::type = 0> + bool operator!=( T const & v, std::nullptr_t ) + { + return !!v; + } + + template ::value, int>::type = 0> + bool operator!=( std::nullptr_t, T const & v ) + { + return !!v; + } +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hash.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hash.hpp new file mode 100644 index 0000000000..ee22504d58 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hash.hpp @@ -0,0 +1,20170 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_HASH_HPP +#define VULKAN_HASH_HPP + +#include + +namespace std +{ + //======================================= + //=== HASH structures for Flags types === + //======================================= + + template + struct hash> + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Flags const & flags ) const VULKAN_HPP_NOEXCEPT + { + return std::hash::type>{}( static_cast::type>( flags ) ); + } + }; + + //=================================== + //=== HASH structures for handles === + //=================================== + + //=== VK_VERSION_1_0 === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Instance const & instance ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( instance ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice const & physicalDevice ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( physicalDevice ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Device const & device ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( device ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Queue const & queue ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( queue ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemory const & deviceMemory ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( deviceMemory ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Fence const & fence ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( fence ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Semaphore const & semaphore ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( semaphore ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Event const & event ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( event ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPool const & queryPool ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( queryPool ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Buffer const & buffer ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( buffer ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferView const & bufferView ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( bufferView ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Image const & image ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( image ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageView const & imageView ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( imageView ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModule const & shaderModule ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( shaderModule ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCache const & pipelineCache ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( pipelineCache ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Pipeline const & pipeline ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( pipeline ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayout const & pipelineLayout ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( pipelineLayout ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Sampler const & sampler ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( sampler ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPool const & descriptorPool ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( descriptorPool ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSet const & descriptorSet ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( descriptorSet ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayout const & descriptorSetLayout ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( descriptorSetLayout ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Framebuffer const & framebuffer ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( framebuffer ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPass const & renderPass ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( renderPass ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandPool const & commandPool ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( commandPool ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBuffer const & commandBuffer ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( commandBuffer ) ); + } + }; + + //=== VK_VERSION_1_1 === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & samplerYcbcrConversion ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( samplerYcbcrConversion ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const & descriptorUpdateTemplate ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( descriptorUpdateTemplate ) ); + } + }; + + //=== VK_VERSION_1_3 === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlot const & privateDataSlot ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( privateDataSlot ) ); + } + }; + + //=== VK_KHR_surface === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceKHR const & surfaceKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( surfaceKHR ) ); + } + }; + + //=== VK_KHR_swapchain === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainKHR const & swapchainKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( swapchainKHR ) ); + } + }; + + //=== VK_KHR_display === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayKHR const & displayKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( displayKHR ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeKHR const & displayModeKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( displayModeKHR ) ); + } + }; + + //=== VK_EXT_debug_report === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & debugReportCallbackEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( debugReportCallbackEXT ) ); + } + }; + + //=== VK_KHR_video_queue === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionKHR const & videoSessionKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( videoSessionKHR ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & videoSessionParametersKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( videoSessionParametersKHR ) ); + } + }; + + //=== VK_NVX_binary_import === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleNVX const & cuModuleNVX ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( cuModuleNVX ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionNVX const & cuFunctionNVX ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( cuFunctionNVX ) ); + } + }; + + //=== VK_EXT_debug_utils === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & debugUtilsMessengerEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( debugUtilsMessengerEXT ) ); + } + }; + + //=== VK_KHR_acceleration_structure === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & accelerationStructureKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( accelerationStructureKHR ) ); + } + }; + + //=== VK_EXT_validation_cache === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & validationCacheEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( validationCacheEXT ) ); + } + }; + + //=== VK_NV_ray_tracing === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & accelerationStructureNV ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( accelerationStructureNV ) ); + } + }; + + //=== VK_INTEL_performance_query === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & performanceConfigurationINTEL ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( performanceConfigurationINTEL ) ); + } + }; + + //=== VK_KHR_deferred_host_operations === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & deferredOperationKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( deferredOperationKHR ) ); + } + }; + + //=== VK_NV_device_generated_commands === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & indirectCommandsLayoutNV ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( indirectCommandsLayoutNV ) ); + } + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CudaModuleNV const & cudaModuleNV ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( cudaModuleNV ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CudaFunctionNV const & cudaFunctionNV ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( cudaFunctionNV ) ); + } + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const & bufferCollectionFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( bufferCollectionFUCHSIA ) ); + } + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MicromapEXT const & micromapEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( micromapEXT ) ); + } + }; + + //=== VK_ARM_tensors === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorARM const & tensorARM ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( tensorARM ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorViewARM const & tensorViewARM ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( tensorViewARM ) ); + } + }; + + //=== VK_NV_optical_flow === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV const & opticalFlowSessionNV ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( opticalFlowSessionNV ) ); + } + }; + + //=== VK_EXT_shader_object === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderEXT const & shaderEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( shaderEXT ) ); + } + }; + + //=== VK_KHR_pipeline_binary === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryKHR const & pipelineBinaryKHR ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( pipelineBinaryKHR ) ); + } + }; + + //=== VK_ARM_data_graph === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM const & dataGraphPipelineSessionARM ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( dataGraphPipelineSessionARM ) ); + } + }; + + //=== VK_NV_external_compute_queue === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV const & externalComputeQueueNV ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( externalComputeQueueNV ) ); + } + }; + + //=== VK_EXT_device_generated_commands === + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT const & indirectCommandsLayoutEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( indirectCommandsLayoutEXT ) ); + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT const & indirectExecutionSetEXT ) const VULKAN_HPP_NOEXCEPT + { + return std::hash{}( static_cast( indirectExecutionSetEXT ) ); + } + }; + +#if 14 <= VULKAN_HPP_CPP_VERSION + //====================================== + //=== HASH structures for structures === + //====================================== + +# if !defined( VULKAN_HPP_HASH_COMBINE ) +# define VULKAN_HPP_HASH_COMBINE( seed, value ) \ + seed ^= std::hash::type>{}( value ) + 0x9e3779b9 + ( seed << 6 ) + ( seed >> 2 ) +# endif + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AabbPositionsKHR const & aabbPositionsKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minX ); + VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minY ); + VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minZ ); + VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxX ); + VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxY ); + VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxZ ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR const & accelerationStructureBuildRangeInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.primitiveCount ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.primitiveOffset ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.firstVertex ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.transformOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR const & accelerationStructureBuildSizesInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.accelerationStructureSize ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.updateScratchSize ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.buildScratchSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCaptureDescriptorDataInfoEXT const & accelerationStructureCaptureDescriptorDataInfoEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCaptureDescriptorDataInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCaptureDescriptorDataInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCaptureDescriptorDataInfoEXT.accelerationStructure ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCaptureDescriptorDataInfoEXT.accelerationStructureNV ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & accelerationStructureCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.createFlags ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.offset ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.size ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.type ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.deviceAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & geometryTrianglesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexData ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexOffset ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexCount ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexStride ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexFormat ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexData ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexOffset ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexCount ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexType ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.transformData ); + VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.transformOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & geometryAABBNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.aabbData ); + VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.numAABBs ); + VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.stride ); + VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.offset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometryDataNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, geometryDataNV.triangles ); + VULKAN_HPP_HASH_COMBINE( seed, geometryDataNV.aabbs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryNV const & geometryNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, geometryNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, geometryNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, geometryNV.geometryType ); + VULKAN_HPP_HASH_COMBINE( seed, geometryNV.geometry ); + VULKAN_HPP_HASH_COMBINE( seed, geometryNV.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const & accelerationStructureInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.type ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.instanceCount ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.geometryCount ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.pGeometries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & accelerationStructureCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.compactedSize ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.info ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR const & accelerationStructureDeviceAddressInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.accelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformMatrixKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + for ( size_t i = 0; i < 3; ++i ) + { + for ( size_t j = 0; j < 4; ++j ) + { + VULKAN_HPP_HASH_COMBINE( seed, transformMatrixKHR.matrix[i][j] ); + } + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR const & accelerationStructureInstanceKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.transform ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.instanceCustomIndex ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.mask ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.instanceShaderBindingTableRecordOffset ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.accelerationStructureReference ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV const & accelerationStructureMatrixMotionInstanceNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.transformT0 ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.transformT1 ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.instanceCustomIndex ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.mask ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.instanceShaderBindingTableRecordOffset ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.accelerationStructureReference ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV const & accelerationStructureMemoryRequirementsInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.type ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.accelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV const & accelerationStructureMotionInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.maxInstances ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SRTDataNV const & sRTDataNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sx ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.a ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.b ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvx ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sy ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.c ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvy ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sz ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvz ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qx ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qy ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qz ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qw ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.tx ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.ty ); + VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.tz ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV const & accelerationStructureSRTMotionInstanceNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.transformT0 ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.transformT1 ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.instanceCustomIndex ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.mask ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.instanceShaderBindingTableRecordOffset ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.accelerationStructureReference ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MicromapUsageEXT const & micromapUsageEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, micromapUsageEXT.count ); + VULKAN_HPP_HASH_COMBINE( seed, micromapUsageEXT.subdivisionLevel ); + VULKAN_HPP_HASH_COMBINE( seed, micromapUsageEXT.format ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR const & accelerationStructureVersionInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.pVersionData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR const & acquireNextImageInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.swapchain ); + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.timeout ); + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.fence ); + VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.deviceMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR const & acquireProfilingLockInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.timeout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AllocationCallbacks const & allocationCallbacks ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pUserData ); + VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnReallocation ); + VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnFree ); + VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnInternalAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnInternalFree ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AmigoProfilingSubmitInfoSEC const & amigoProfilingSubmitInfoSEC ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.sType ); + VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.firstDrawTimestamp ); + VULKAN_HPP_HASH_COMBINE( seed, amigoProfilingSubmitInfoSEC.swapBufferTimestamp ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ComponentMapping const & componentMapping ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, componentMapping.r ); + VULKAN_HPP_HASH_COMBINE( seed, componentMapping.g ); + VULKAN_HPP_HASH_COMBINE( seed, componentMapping.b ); + VULKAN_HPP_HASH_COMBINE( seed, componentMapping.a ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID const & androidHardwareBufferFormatProperties2ANDROID ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.format ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.externalFormat ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.formatFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.samplerYcbcrConversionComponents ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYcbcrModel ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYcbcrRange ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedXChromaOffset ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYChromaOffset ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID const & androidHardwareBufferFormatPropertiesANDROID ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.format ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.externalFormat ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.formatFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.samplerYcbcrConversionComponents ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYcbcrModel ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYcbcrRange ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedXChromaOffset ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYChromaOffset ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatResolvePropertiesANDROID const & androidHardwareBufferFormatResolvePropertiesANDROID ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatResolvePropertiesANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatResolvePropertiesANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatResolvePropertiesANDROID.colorAttachmentFormat ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID const & androidHardwareBufferPropertiesANDROID ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.allocationSize ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.memoryTypeBits ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID const & androidHardwareBufferUsageANDROID ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.androidHardwareBufferUsage ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & androidSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.window ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AntiLagPresentationInfoAMD const & antiLagPresentationInfoAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, antiLagPresentationInfoAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagPresentationInfoAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagPresentationInfoAMD.stage ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagPresentationInfoAMD.frameIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AntiLagDataAMD const & antiLagDataAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, antiLagDataAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagDataAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagDataAMD.mode ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagDataAMD.maxFPS ); + VULKAN_HPP_HASH_COMBINE( seed, antiLagDataAMD.pPresentationInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ApplicationInfo const & applicationInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.pNext ); + for ( const char * p = applicationInfo.pApplicationName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.applicationVersion ); + for ( const char * p = applicationInfo.pEngineName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.engineVersion ); + VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.apiVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescription const & attachmentDescription ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.flags ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.format ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.samples ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.loadOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.storeOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.stencilLoadOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.stencilStoreOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.initialLayout ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.finalLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescription2 const & attachmentDescription2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.flags ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.format ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.samples ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.loadOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.storeOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.stencilLoadOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.stencilStoreOp ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.initialLayout ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.finalLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout const & attachmentDescriptionStencilLayout ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.sType ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.stencilInitialLayout ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.stencilFinalLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentFeedbackLoopInfoEXT const & attachmentFeedbackLoopInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentFeedbackLoopInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentFeedbackLoopInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentFeedbackLoopInfoEXT.feedbackLoopEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReference const & attachmentReference ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference.attachment ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference.layout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReference2 const & attachmentReference2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.attachment ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.layout ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.aspectMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout const & attachmentReferenceStencilLayout ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.sType ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.stencilLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD const & attachmentSampleCountInfoAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.pColorAttachmentSamples ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.depthStencilAttachmentSamples ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Extent2D const & extent2D ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, extent2D.width ); + VULKAN_HPP_HASH_COMBINE( seed, extent2D.height ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SampleLocationEXT const & sampleLocationEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationEXT.x ); + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationEXT.y ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationsPerPixel ); + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationGridSize ); + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationsCount ); + VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.pSampleLocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT const & attachmentSampleLocationsEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleLocationsEXT.attachmentIndex ); + VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleLocationsEXT.sampleLocationsInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BaseInStructure const & baseInStructure ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, baseInStructure.sType ); + VULKAN_HPP_HASH_COMBINE( seed, baseInStructure.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BaseOutStructure const & baseOutStructure ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, baseOutStructure.sType ); + VULKAN_HPP_HASH_COMBINE( seed, baseOutStructure.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV const & bindAccelerationStructureMemoryInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.accelerationStructure ); + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.memory ); + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.memoryOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.deviceIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.pDeviceIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo const & bindBufferMemoryDeviceGroupInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.deviceIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.pDeviceIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo const & bindBufferMemoryInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.memory ); + VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.memoryOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::BindDataGraphPipelineSessionMemoryInfoARM const & bindDataGraphPipelineSessionMemoryInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.session ); + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.bindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.objectIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.memory ); + VULKAN_HPP_HASH_COMBINE( seed, bindDataGraphPipelineSessionMemoryInfoARM.memoryOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindDescriptorBufferEmbeddedSamplersInfoEXT const & bindDescriptorBufferEmbeddedSamplersInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorBufferEmbeddedSamplersInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorBufferEmbeddedSamplersInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorBufferEmbeddedSamplersInfoEXT.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorBufferEmbeddedSamplersInfoEXT.layout ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorBufferEmbeddedSamplersInfoEXT.set ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo const & bindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.layout ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.firstSet ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.descriptorSetCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.pDescriptorSets ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.dynamicOffsetCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindDescriptorSetsInfo.pDynamicOffsets ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Offset2D const & offset2D ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, offset2D.x ); + VULKAN_HPP_HASH_COMBINE( seed, offset2D.y ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Rect2D const & rect2D ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rect2D.offset ); + VULKAN_HPP_HASH_COMBINE( seed, rect2D.extent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo const & bindImageMemoryDeviceGroupInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.deviceIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pDeviceIndices ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.splitInstanceBindRegionCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pSplitInstanceBindRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImageMemoryInfo const & bindImageMemoryInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.image ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.memory ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.memoryOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR const & bindImageMemorySwapchainInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.swapchain ); + VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.imageIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo const & bindImagePlaneMemoryInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.planeAspect ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandEXT const & bindIndexBufferIndirectCommandEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandEXT.bufferAddress ); + VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandEXT.size ); + VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandEXT.indexType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV const & bindIndexBufferIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.bufferAddress ); + VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.size ); + VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.indexType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindMemoryStatus const & bindMemoryStatus ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindMemoryStatus.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindMemoryStatus.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindMemoryStatus.pResult ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindPipelineIndirectCommandNV const & bindPipelineIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindPipelineIndirectCommandNV.pipelineAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV const & bindShaderGroupIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindShaderGroupIndirectCommandNV.groupIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseMemoryBind const & sparseMemoryBind ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.resourceOffset ); + VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.size ); + VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.memory ); + VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.memoryOffset ); + VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo const & sparseBufferMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.bindCount ); + VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.pBinds ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo const & sparseImageOpaqueMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.image ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.bindCount ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.pBinds ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresource const & imageSubresource ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.aspectMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.mipLevel ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.arrayLayer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Offset3D const & offset3D ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, offset3D.x ); + VULKAN_HPP_HASH_COMBINE( seed, offset3D.y ); + VULKAN_HPP_HASH_COMBINE( seed, offset3D.z ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Extent3D const & extent3D ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, extent3D.width ); + VULKAN_HPP_HASH_COMBINE( seed, extent3D.height ); + VULKAN_HPP_HASH_COMBINE( seed, extent3D.depth ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryBind const & sparseImageMemoryBind ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.subresource ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.offset ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.extent ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.memory ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.memoryOffset ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo const & sparseImageMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.image ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.bindCount ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.pBinds ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindSparseInfo const & bindSparseInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.waitSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pWaitSemaphores ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.bufferBindCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pBufferBinds ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.imageOpaqueBindCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pImageOpaqueBinds ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.imageBindCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pImageBinds ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.signalSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pSignalSemaphores ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindTensorMemoryInfoARM const & bindTensorMemoryInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindTensorMemoryInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindTensorMemoryInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindTensorMemoryInfoARM.tensor ); + VULKAN_HPP_HASH_COMBINE( seed, bindTensorMemoryInfoARM.memory ); + VULKAN_HPP_HASH_COMBINE( seed, bindTensorMemoryInfoARM.memoryOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandEXT const & bindVertexBufferIndirectCommandEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandEXT.bufferAddress ); + VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandEXT.size ); + VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandEXT.stride ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV const & bindVertexBufferIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.bufferAddress ); + VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.size ); + VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.stride ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BindVideoSessionMemoryInfoKHR const & bindVideoSessionMemoryInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bindVideoSessionMemoryInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bindVideoSessionMemoryInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bindVideoSessionMemoryInfoKHR.memoryBindIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bindVideoSessionMemoryInfoKHR.memory ); + VULKAN_HPP_HASH_COMBINE( seed, bindVideoSessionMemoryInfoKHR.memoryOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bindVideoSessionMemoryInfoKHR.memorySize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BlitImageCubicWeightsInfoQCOM const & blitImageCubicWeightsInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, blitImageCubicWeightsInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageCubicWeightsInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageCubicWeightsInfoQCOM.cubicWeights ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresourceLayers ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.aspectMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.mipLevel ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.baseArrayLayer ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.layerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageBlit2 const & imageBlit2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.srcSubresource ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.srcOffsets[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.dstSubresource ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.dstOffsets[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BlitImageInfo2 const & blitImageInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.srcImage ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.srcImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.dstImage ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.dstImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.pRegions ); + VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.filter ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCaptureDescriptorDataInfoEXT const & bufferCaptureDescriptorDataInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCaptureDescriptorDataInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCaptureDescriptorDataInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCaptureDescriptorDataInfoEXT.buffer ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA const & bufferCollectionBufferCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.collection ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.index ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCount ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.maxBufferCount ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForCamping ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForDedicatedSlack ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForSharedSlack ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & bufferCollectionCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.collectionToken ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA const & bufferCollectionImageCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.collection ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.index ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const & sysmemColorSpaceFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.colorSpace ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA const & bufferCollectionPropertiesFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.memoryTypeBits ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.bufferCount ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.createInfoIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sysmemPixelFormat ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.formatFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sysmemColorSpaceIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.samplerYcbcrConversionComponents ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYcbcrModel ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYcbcrRange ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedXChromaOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYChromaOffset ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & bufferCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.size ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.usage ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.sharingMode ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.queueFamilyIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.pQueueFamilyIndices ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA const & bufferConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.createInfo ); + VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.requiredFormatFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.bufferCollectionConstraints ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCopy const & bufferCopy ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.srcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.dstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCopy2 const & bufferCopy2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.srcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.dstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT const & bufferDeviceAddressCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.deviceAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo const & bufferDeviceAddressInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.buffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferImageCopy const & bufferImageCopy ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferRowLength ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferImageHeight ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferImageCopy2 const & bufferImageCopy2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferRowLength ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferImageHeight ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageOffset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier const & bufferMemoryBarrier ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.srcQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.dstQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.offset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 const & bufferMemoryBarrier2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.offset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 const & bufferMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.buffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo const & bufferOpaqueCaptureAddressCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.opaqueCaptureAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferUsageFlags2CreateInfo const & bufferUsageFlags2CreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferUsageFlags2CreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferUsageFlags2CreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferUsageFlags2CreateInfo.usage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & bufferViewCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.format ); + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.offset ); + VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.range ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV const & stridedDeviceAddressNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressNV.startAddress ); + VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressNV.strideInBytes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureIndirectCommandNV const & + buildPartitionedAccelerationStructureIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureIndirectCommandNV.opType ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureIndirectCommandNV.argCount ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureIndirectCommandNV.argData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV const & partitionedAccelerationStructureInstancesInputNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.instanceCount ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.maxInstancePerPartitionCount ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.partitionCount ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureInstancesInputNV.maxInstanceInGlobalPartitionCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureInfoNV const & buildPartitionedAccelerationStructureInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.input ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.srcAccelerationStructureData ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.dstAccelerationStructureData ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.scratchData ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.srcInfos ); + VULKAN_HPP_HASH_COMBINE( seed, buildPartitionedAccelerationStructureInfoNV.srcInfosCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR const & calibratedTimestampInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoKHR.timeDomain ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CheckpointData2NV const & checkpointData2NV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.stage ); + VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.pCheckpointMarker ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CheckpointDataNV const & checkpointDataNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.stage ); + VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.pCheckpointMarker ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue const & clearDepthStencilValue ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clearDepthStencilValue.depth ); + VULKAN_HPP_HASH_COMBINE( seed, clearDepthStencilValue.stencil ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClearRect const & clearRect ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clearRect.rect ); + VULKAN_HPP_HASH_COMBINE( seed, clearRect.baseArrayLayer ); + VULKAN_HPP_HASH_COMBINE( seed, clearRect.layerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & + clusterAccelerationStructureBuildClustersBottomLevelInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildClustersBottomLevelInfoNV.clusterReferencesCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildClustersBottomLevelInfoNV.clusterReferencesStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildClustersBottomLevelInfoNV.clusterReferences ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & + clusterAccelerationStructureGeometryIndexAndGeometryFlagsNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureGeometryIndexAndGeometryFlagsNV.geometryIndex ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureGeometryIndexAndGeometryFlagsNV.reserved ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureGeometryIndexAndGeometryFlagsNV.geometryFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildTriangleClusterInfoNV const & + clusterAccelerationStructureBuildTriangleClusterInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.clusterID ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.clusterFlags ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.triangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.vertexCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.positionTruncateBitCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.indexType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapIndexType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.baseGeometryIndexAndGeometryFlags ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.indexBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.vertexBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.geometryIndexAndFlagsBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapIndexBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.indexBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.vertexBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.geometryIndexAndFlagsBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapArray ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapIndexBuffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & + clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.clusterID ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.clusterFlags ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.triangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.vertexCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.positionTruncateBitCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.indexType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.opacityMicromapIndexType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.baseGeometryIndexAndGeometryFlags ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.indexBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.vertexBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.geometryIndexAndFlagsBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.opacityMicromapIndexBufferStride ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.indexBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.vertexBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.geometryIndexAndFlagsBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.opacityMicromapArray ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.opacityMicromapIndexBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.instantiationBoundingBoxLimit ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClustersBottomLevelInputNV const & + clusterAccelerationStructureClustersBottomLevelInputNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureClustersBottomLevelInputNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureClustersBottomLevelInputNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureClustersBottomLevelInputNV.maxTotalClusterCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureClustersBottomLevelInputNV.maxClusterCountPerAccelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTriangleClusterInputNV const & clusterAccelerationStructureTriangleClusterInputNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.vertexFormat ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.maxGeometryIndexValue ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.maxClusterUniqueGeometryCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.maxClusterTriangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.maxClusterVertexCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.maxTotalTriangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.maxTotalVertexCount ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureTriangleClusterInputNV.minPositionTruncateBitCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInputNV const & clusterAccelerationStructureMoveObjectsInputNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureMoveObjectsInputNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureMoveObjectsInputNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureMoveObjectsInputNV.type ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureMoveObjectsInputNV.noMoveOverlap ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureMoveObjectsInputNV.maxMovedBytes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR const & stridedDeviceAddressRegionKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.deviceAddress ); + VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.stride ); + VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGetTemplateIndicesInfoNV const & + clusterAccelerationStructureGetTemplateIndicesInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureGetTemplateIndicesInfoNV.clusterTemplateAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInstantiateClusterInfoNV const & + clusterAccelerationStructureInstantiateClusterInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureInstantiateClusterInfoNV.clusterIdOffset ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureInstantiateClusterInfoNV.geometryIndexOffset ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureInstantiateClusterInfoNV.reserved ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureInstantiateClusterInfoNV.clusterTemplateAddress ); + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureInstantiateClusterInfoNV.vertexBuffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInfoNV const & clusterAccelerationStructureMoveObjectsInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, clusterAccelerationStructureMoveObjectsInfoNV.srcAccelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV const & coarseSampleLocationNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.pixelX ); + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.pixelY ); + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.sample ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV const & coarseSampleOrderCustomNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.shadingRate ); + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.sampleCount ); + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.sampleLocationCount ); + VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.pSampleLocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ColorBlendAdvancedEXT const & colorBlendAdvancedEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, colorBlendAdvancedEXT.advancedBlendOp ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendAdvancedEXT.srcPremultiplied ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendAdvancedEXT.dstPremultiplied ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendAdvancedEXT.blendOverlap ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendAdvancedEXT.clampResults ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ColorBlendEquationEXT const & colorBlendEquationEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, colorBlendEquationEXT.srcColorBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendEquationEXT.dstColorBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendEquationEXT.colorBlendOp ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendEquationEXT.srcAlphaBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendEquationEXT.dstAlphaBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, colorBlendEquationEXT.alphaBlendOp ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & commandBufferAllocateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.commandPool ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.level ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.commandBufferCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo const & commandBufferInheritanceInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.renderPass ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.subpass ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.framebuffer ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.occlusionQueryEnable ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.queryFlags ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.pipelineStatistics ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo const & commandBufferBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.pInheritanceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT const & commandBufferInheritanceConditionalRenderingInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.conditionalRenderingEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM const & commandBufferInheritanceRenderPassTransformInfoQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.transform ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.renderArea ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo const & commandBufferInheritanceRenderingInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.viewMask ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.pColorAttachmentFormats ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.depthAttachmentFormat ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.stencilAttachmentFormat ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.rasterizationSamples ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Viewport const & viewport ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, viewport.x ); + VULKAN_HPP_HASH_COMBINE( seed, viewport.y ); + VULKAN_HPP_HASH_COMBINE( seed, viewport.width ); + VULKAN_HPP_HASH_COMBINE( seed, viewport.height ); + VULKAN_HPP_HASH_COMBINE( seed, viewport.minDepth ); + VULKAN_HPP_HASH_COMBINE( seed, viewport.maxDepth ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV const & commandBufferInheritanceViewportScissorInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.viewportScissor2D ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.viewportDepthCount ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.pViewportDepths ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo const & commandBufferSubmitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.commandBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.deviceMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & commandPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.queueFamilyIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SpecializationMapEntry const & specializationMapEntry ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.constantID ); + VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.offset ); + VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SpecializationInfo const & specializationInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.mapEntryCount ); + VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.pMapEntries ); + VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const & pipelineShaderStageCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.stage ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.module ); + for ( const char * p = pipelineShaderStageCreateInfo.pName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.pSpecializationInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & computePipelineCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.stage ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.layout ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.basePipelineHandle ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.basePipelineIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ComputePipelineIndirectBufferInfoNV const & computePipelineIndirectBufferInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, computePipelineIndirectBufferInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineIndirectBufferInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineIndirectBufferInfoNV.deviceAddress ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineIndirectBufferInfoNV.size ); + VULKAN_HPP_HASH_COMBINE( seed, computePipelineIndirectBufferInfoNV.pipelineDeviceAddressCaptureReplay ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT const & conditionalRenderingBeginInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.offset ); + VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ConformanceVersion const & conformanceVersion ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.major ); + VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.minor ); + VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.subminor ); + VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.patch ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::CooperativeMatrixFlexibleDimensionsPropertiesNV const & cooperativeMatrixFlexibleDimensionsPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.MGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.NGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.KGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.AType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.BType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.CType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.ResultType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.saturatingAccumulation ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.scope ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixFlexibleDimensionsPropertiesNV.workgroupInvocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesKHR const & cooperativeMatrixPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.MSize ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.NSize ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.KSize ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.AType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.BType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.CType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.ResultType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.saturatingAccumulation ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesKHR.scope ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV const & cooperativeMatrixPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.MSize ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.NSize ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.KSize ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.AType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.BType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.CType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.DType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.scope ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CooperativeVectorPropertiesNV const & cooperativeVectorPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.inputType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.inputInterpretation ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.matrixInterpretation ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.biasInterpretation ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.resultType ); + VULKAN_HPP_HASH_COMBINE( seed, cooperativeVectorPropertiesNV.transpose ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR const & copyAccelerationStructureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.src ); + VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.dst ); + VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.mode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyBufferInfo2 const & copyBufferInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.srcBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.dstBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 const & copyBufferToImageInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.srcBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.dstImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.dstImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM const & copyCommandTransformInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.transform ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyDescriptorSet const & copyDescriptorSet ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcSet ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcBinding ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcArrayElement ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstSet ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstBinding ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstArrayElement ); + VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.descriptorCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCopy2 const & imageCopy2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.srcSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.srcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.dstSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.dstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.extent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageInfo2 const & copyImageInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.srcImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.srcImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.dstImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.dstImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 const & copyImageToBufferInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.srcImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.srcImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.dstBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageToImageInfo const & copyImageToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.srcImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.srcImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.dstImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.dstImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToImageInfo.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageToMemoryCopy const & imageToMemoryCopy ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.pHostPointer ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.memoryRowLength ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.memoryImageHeight ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.imageSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.imageOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageToMemoryCopy.imageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo const & copyImageToMemoryInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.srcImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.srcImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyImageToMemoryInfo.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyMemoryIndirectCommandNV const & copyMemoryIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryIndirectCommandNV.srcAddress ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryIndirectCommandNV.dstAddress ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryIndirectCommandNV.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyMemoryToImageIndirectCommandNV const & copyMemoryToImageIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageIndirectCommandNV.srcAddress ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageIndirectCommandNV.bufferRowLength ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageIndirectCommandNV.bufferImageHeight ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageIndirectCommandNV.imageSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageIndirectCommandNV.imageOffset ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageIndirectCommandNV.imageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryToImageCopy const & memoryToImageCopy ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.pHostPointer ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.memoryRowLength ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.memoryImageHeight ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.imageSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.imageOffset ); + VULKAN_HPP_HASH_COMBINE( seed, memoryToImageCopy.imageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo const & copyMemoryToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.dstImage ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.dstImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyMemoryToImageInfo.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT const & copyMicromapInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyMicromapInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyMicromapInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyMicromapInfoEXT.src ); + VULKAN_HPP_HASH_COMBINE( seed, copyMicromapInfoEXT.dst ); + VULKAN_HPP_HASH_COMBINE( seed, copyMicromapInfoEXT.mode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorCopyARM const & tensorCopyARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorCopyARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCopyARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCopyARM.dimensionCount ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCopyARM.pSrcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCopyARM.pDstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCopyARM.pExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyTensorInfoARM const & copyTensorInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, copyTensorInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, copyTensorInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, copyTensorInfoARM.srcTensor ); + VULKAN_HPP_HASH_COMBINE( seed, copyTensorInfoARM.dstTensor ); + VULKAN_HPP_HASH_COMBINE( seed, copyTensorInfoARM.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, copyTensorInfoARM.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & cuFunctionCreateInfoNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.module ); + for ( const char * p = cuFunctionCreateInfoNVX.pName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX const & cuLaunchInfoNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.function ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimX ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimY ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimZ ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimX ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimY ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimZ ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.sharedMemBytes ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.paramCount ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pParams ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.extraCount ); + VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pExtras ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & cuModuleCreateInfoNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleTexturingModeCreateInfoNVX const & cuModuleTexturingModeCreateInfoNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cuModuleTexturingModeCreateInfoNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cuModuleTexturingModeCreateInfoNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cuModuleTexturingModeCreateInfoNVX.use64bitTexturing ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CudaFunctionCreateInfoNV const & cudaFunctionCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cudaFunctionCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cudaFunctionCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cudaFunctionCreateInfoNV.module ); + for ( const char * p = cudaFunctionCreateInfoNV.pName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CudaLaunchInfoNV const & cudaLaunchInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.function ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.gridDimX ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.gridDimY ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.gridDimZ ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.blockDimX ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.blockDimY ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.blockDimZ ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.sharedMemBytes ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.paramCount ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.pParams ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.extraCount ); + VULKAN_HPP_HASH_COMBINE( seed, cudaLaunchInfoNV.pExtras ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::CudaModuleCreateInfoNV const & cudaModuleCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, cudaModuleCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, cudaModuleCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, cudaModuleCreateInfoNV.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, cudaModuleCreateInfoNV.pData ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR const & d3D12FenceSubmitInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.waitSemaphoreValuesCount ); + VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pWaitSemaphoreValues ); + VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.signalSemaphoreValuesCount ); + VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pSignalSemaphoreValues ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineCompilerControlCreateInfoARM const & dataGraphPipelineCompilerControlCreateInfoARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCompilerControlCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCompilerControlCreateInfoARM.pNext ); + for ( const char * p = dataGraphPipelineCompilerControlCreateInfoARM.pVendorOptions; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantARM const & dataGraphPipelineConstantARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantARM.id ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantARM.pConstantData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & + dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM.dimension ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM.zeroCount ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM.groupSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineResourceInfoARM const & dataGraphPipelineResourceInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineResourceInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineResourceInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineResourceInfoARM.descriptorSet ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineResourceInfoARM.binding ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineResourceInfoARM.arrayElement ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineCreateInfoARM const & dataGraphPipelineCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCreateInfoARM.flags ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCreateInfoARM.layout ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCreateInfoARM.resourceInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineCreateInfoARM.pResourceInfos ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchInfoARM const & dataGraphPipelineDispatchInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineDispatchInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineDispatchInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineDispatchInfoARM.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineIdentifierCreateInfoARM const & dataGraphPipelineIdentifierCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineIdentifierCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineIdentifierCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineIdentifierCreateInfoARM.identifierSize ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineIdentifierCreateInfoARM.pIdentifier ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineInfoARM const & dataGraphPipelineInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineInfoARM.dataGraphPipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyQueryResultARM const & dataGraphPipelinePropertyQueryResultARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelinePropertyQueryResultARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelinePropertyQueryResultARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelinePropertyQueryResultARM.property ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelinePropertyQueryResultARM.isText ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelinePropertyQueryResultARM.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelinePropertyQueryResultARM.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementARM const & dataGraphPipelineSessionBindPointRequirementARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementARM.bindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementARM.bindPointType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementARM.numObjects ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementsInfoARM const & + dataGraphPipelineSessionBindPointRequirementsInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementsInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementsInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionBindPointRequirementsInfoARM.session ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateInfoARM const & dataGraphPipelineSessionCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionCreateInfoARM.flags ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionCreateInfoARM.dataGraphPipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM const & dataGraphPipelineSessionMemoryRequirementsInfoARM ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionMemoryRequirementsInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionMemoryRequirementsInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionMemoryRequirementsInfoARM.session ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionMemoryRequirementsInfoARM.bindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineSessionMemoryRequirementsInfoARM.objectIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DataGraphPipelineShaderModuleCreateInfoARM const & dataGraphPipelineShaderModuleCreateInfoARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineShaderModuleCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineShaderModuleCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineShaderModuleCreateInfoARM.module ); + for ( const char * p = dataGraphPipelineShaderModuleCreateInfoARM.pName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineShaderModuleCreateInfoARM.pSpecializationInfo ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineShaderModuleCreateInfoARM.constantCount ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphPipelineShaderModuleCreateInfoARM.pConstants ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM const & physicalDeviceDataGraphProcessingEngineARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphProcessingEngineARM.type ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphProcessingEngineARM.isForeign ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DataGraphProcessingEngineCreateInfoARM const & dataGraphProcessingEngineCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dataGraphProcessingEngineCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphProcessingEngineCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphProcessingEngineCreateInfoARM.processingEngineCount ); + VULKAN_HPP_HASH_COMBINE( seed, dataGraphProcessingEngineCreateInfoARM.pProcessingEngines ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT const & debugMarkerMarkerInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.pNext ); + for ( const char * p = debugMarkerMarkerInfoEXT.pMarkerName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + for ( size_t i = 0; i < 4; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.color[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT const & debugMarkerObjectNameInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.objectType ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.object ); + for ( const char * p = debugMarkerObjectNameInfoEXT.pObjectName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT const & debugMarkerObjectTagInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.objectType ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.object ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.tagName ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.tagSize ); + VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.pTag ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & debugReportCallbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pfnCallback ); + VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pUserData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT const & debugUtilsLabelEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.pNext ); + for ( const char * p = debugUtilsLabelEXT.pLabelName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + for ( size_t i = 0; i < 4; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.color[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT const & debugUtilsObjectNameInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.objectType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.objectHandle ); + for ( const char * p = debugUtilsObjectNameInfoEXT.pObjectName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT const & debugUtilsMessengerCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.flags ); + for ( const char * p = debugUtilsMessengerCallbackDataEXT.pMessageIdName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.messageIdNumber ); + for ( const char * p = debugUtilsMessengerCallbackDataEXT.pMessage; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.queueLabelCount ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pQueueLabels ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.cmdBufLabelCount ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pCmdBufLabels ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.objectCount ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pObjects ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & debugUtilsMessengerCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.messageSeverity ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.messageType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pfnUserCallback ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pUserData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT const & debugUtilsObjectTagInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.objectType ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.objectHandle ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.tagName ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.tagSize ); + VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.pTag ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DecompressMemoryRegionNV const & decompressMemoryRegionNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, decompressMemoryRegionNV.srcAddress ); + VULKAN_HPP_HASH_COMBINE( seed, decompressMemoryRegionNV.dstAddress ); + VULKAN_HPP_HASH_COMBINE( seed, decompressMemoryRegionNV.compressedSize ); + VULKAN_HPP_HASH_COMBINE( seed, decompressMemoryRegionNV.decompressedSize ); + VULKAN_HPP_HASH_COMBINE( seed, decompressMemoryRegionNV.decompressionMethod ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV const & dedicatedAllocationBufferCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.dedicatedAllocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV const & dedicatedAllocationImageCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.dedicatedAllocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV const & dedicatedAllocationMemoryAllocateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.image ); + VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.buffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrier2 const & memoryBarrier2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.srcStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.dstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.dstAccessMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & imageSubresourceRange ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.aspectMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.baseMipLevel ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.levelCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.baseArrayLayer ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.layerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 const & imageMemoryBarrier2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.oldLayout ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.newLayout ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.image ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.subresourceRange ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DependencyInfo const & dependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.dependencyFlags ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.memoryBarrierCount ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pMemoryBarriers ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.bufferMemoryBarrierCount ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pBufferMemoryBarriers ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.imageMemoryBarrierCount ); + VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pImageMemoryBarriers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DepthBiasInfoEXT const & depthBiasInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, depthBiasInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasInfoEXT.depthBiasConstantFactor ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasInfoEXT.depthBiasClamp ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasInfoEXT.depthBiasSlopeFactor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DepthBiasRepresentationInfoEXT const & depthBiasRepresentationInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, depthBiasRepresentationInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasRepresentationInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasRepresentationInfoEXT.depthBiasRepresentation ); + VULKAN_HPP_HASH_COMBINE( seed, depthBiasRepresentationInfoEXT.depthBiasExact ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DepthClampRangeEXT const & depthClampRangeEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, depthClampRangeEXT.minDepthClamp ); + VULKAN_HPP_HASH_COMBINE( seed, depthClampRangeEXT.maxDepthClamp ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT const & descriptorAddressInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorAddressInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorAddressInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorAddressInfoEXT.address ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorAddressInfoEXT.range ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorAddressInfoEXT.format ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorBufferBindingInfoEXT const & descriptorBufferBindingInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingInfoEXT.address ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingInfoEXT.usage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorBufferBindingPushDescriptorBufferHandleEXT const & + descriptorBufferBindingPushDescriptorBufferHandleEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingPushDescriptorBufferHandleEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingPushDescriptorBufferHandleEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferBindingPushDescriptorBufferHandleEXT.buffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorBufferInfo const & descriptorBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.offset ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.range ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorImageInfo const & descriptorImageInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.sampler ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.imageView ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.imageLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorGetTensorInfoARM const & descriptorGetTensorInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorGetTensorInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorGetTensorInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorGetTensorInfoARM.tensorView ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolSize const & descriptorPoolSize ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolSize.type ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolSize.descriptorCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & descriptorPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.maxSets ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.poolSizeCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.pPoolSizes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo const & descriptorPoolInlineUniformBlockCreateInfo ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.maxInlineUniformBlockBindings ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & descriptorSetAllocateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.descriptorPool ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.descriptorSetCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.pSetLayouts ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE const & descriptorSetBindingReferenceVALVE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.descriptorSetLayout ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetBindingReferenceVALVE.binding ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding const & descriptorSetLayoutBinding ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.binding ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.descriptorType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.descriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.pImmutableSamplers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo const & descriptorSetLayoutBindingFlagsCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.bindingCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.pBindingFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & descriptorSetLayoutCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.bindingCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.pBindings ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE const & descriptorSetLayoutHostMappingInfoVALVE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.descriptorOffset ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutHostMappingInfoVALVE.descriptorSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport const & descriptorSetLayoutSupport ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.supported ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo const & descriptorSetVariableDescriptorCountAllocateInfo ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.descriptorSetCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.pDescriptorCounts ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport const & descriptorSetVariableDescriptorCountLayoutSupport ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.maxVariableDescriptorCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry const & descriptorUpdateTemplateEntry ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.dstBinding ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.dstArrayElement ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.descriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.descriptorType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.offset ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.stride ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & descriptorUpdateTemplateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.descriptorUpdateEntryCount ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pDescriptorUpdateEntries ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.templateType ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.descriptorSetLayout ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pipelineLayout ); + VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.set ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceAddressBindingCallbackDataEXT const & deviceAddressBindingCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceAddressBindingCallbackDataEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceAddressBindingCallbackDataEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceAddressBindingCallbackDataEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, deviceAddressBindingCallbackDataEXT.baseAddress ); + VULKAN_HPP_HASH_COMBINE( seed, deviceAddressBindingCallbackDataEXT.size ); + VULKAN_HPP_HASH_COMBINE( seed, deviceAddressBindingCallbackDataEXT.bindingType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements const & deviceBufferMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.pCreateInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo const & deviceQueueCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.queueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.queueCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.pQueuePriorities ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const & physicalDeviceFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.robustBufferAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fullDrawIndexUint32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.imageCubeArray ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.independentBlend ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.geometryShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.tessellationShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sampleRateShading ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.dualSrcBlend ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.logicOp ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.multiDrawIndirect ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.drawIndirectFirstInstance ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthClamp ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthBiasClamp ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fillModeNonSolid ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthBounds ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.wideLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.largePoints ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.alphaToOne ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.multiViewport ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.samplerAnisotropy ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionETC2 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionASTC_LDR ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionBC ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.occlusionQueryPrecise ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.pipelineStatisticsQuery ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.vertexPipelineStoresAndAtomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fragmentStoresAndAtomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderTessellationAndGeometryPointSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderImageGatherExtended ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageExtendedFormats ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageMultisample ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageReadWithoutFormat ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageWriteWithoutFormat ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderUniformBufferArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderSampledImageArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageBufferArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderClipDistance ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderCullDistance ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderInt64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderInt16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderResourceResidency ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderResourceMinLod ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseBinding ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyImage2D ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyImage3D ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency2Samples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency4Samples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency8Samples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency16Samples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyAliased ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.variableMultisampleRate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.inheritedQueries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & deviceCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.queueCreateInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pQueueCreateInfos ); + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.enabledLayerCount ); + for ( size_t i = 0; i < deviceCreateInfo.enabledLayerCount; ++i ) + { + for ( const char * p = deviceCreateInfo.ppEnabledLayerNames[i]; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + } + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.enabledExtensionCount ); + for ( size_t i = 0; i < deviceCreateInfo.enabledExtensionCount; ++i ) + { + for ( const char * p = deviceCreateInfo.ppEnabledExtensionNames[i]; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + } + VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pEnabledFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT const & deviceDeviceMemoryReportCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pfnUserCallback ); + VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pUserData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV const & deviceDiagnosticsConfigCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.deviceEvent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceFaultAddressInfoEXT const & deviceFaultAddressInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultAddressInfoEXT.addressType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultAddressInfoEXT.reportedAddress ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultAddressInfoEXT.addressPrecision ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceFaultCountsEXT const & deviceFaultCountsEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultCountsEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultCountsEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultCountsEXT.addressInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultCountsEXT.vendorInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultCountsEXT.vendorBinarySize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceFaultVendorInfoEXT const & deviceFaultVendorInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorInfoEXT.description[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorInfoEXT.vendorFaultCode ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorInfoEXT.vendorFaultData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceFaultInfoEXT const & deviceFaultInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultInfoEXT.pNext ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultInfoEXT.description[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultInfoEXT.pAddressInfos ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultInfoEXT.pVendorInfos ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultInfoEXT.pVendorBinaryData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionOneEXT const & deviceFaultVendorBinaryHeaderVersionOneEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.headerSize ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.headerVersion ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.vendorID ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.deviceID ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.driverVersion ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.pipelineCacheUUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.applicationNameOffset ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.applicationVersion ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.engineNameOffset ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.engineVersion ); + VULKAN_HPP_HASH_COMBINE( seed, deviceFaultVendorBinaryHeaderVersionOneEXT.apiVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo const & deviceGroupBindSparseInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.resourceDeviceIndex ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.memoryDeviceIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo const & deviceGroupCommandBufferBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.deviceMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo const & deviceGroupDeviceCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.physicalDeviceCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.pPhysicalDevices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR const & deviceGroupPresentCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.pNext ); + for ( size_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.presentMask[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.modes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR const & deviceGroupPresentInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.pDeviceMasks ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.mode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo const & deviceGroupRenderPassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.deviceMask ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.deviceRenderAreaCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.pDeviceRenderAreas ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo const & deviceGroupSubmitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.waitSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pWaitSemaphoreDeviceIndices ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.commandBufferCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pCommandBufferDeviceMasks ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.signalSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pSignalSemaphoreDeviceIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR const & deviceGroupSwapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.modes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & imageCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.imageType ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.format ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.extent ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.mipLevels ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.arrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.samples ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.tiling ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.usage ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.sharingMode ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.queueFamilyIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.pQueueFamilyIndices ); + VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.initialLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements const & deviceImageMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.pCreateInfo ); + VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.planeAspect ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresource2 const & imageSubresource2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageSubresource2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresource2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageSubresource2.imageSubresource ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo const & deviceImageSubresourceInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceImageSubresourceInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceImageSubresourceInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceImageSubresourceInfo.pCreateInfo ); + VULKAN_HPP_HASH_COMBINE( seed, deviceImageSubresourceInfo.pSubresource ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo const & deviceMemoryOpaqueCaptureAddressInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.memory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD const & deviceMemoryOverallocationCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.overallocationBehavior ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT const & deviceMemoryReportCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.type ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.memoryObjectId ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.size ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.objectType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.objectHandle ); + VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.heapIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DevicePipelineBinaryInternalCacheControlKHR const & devicePipelineBinaryInternalCacheControlKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, devicePipelineBinaryInternalCacheControlKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, devicePipelineBinaryInternalCacheControlKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, devicePipelineBinaryInternalCacheControlKHR.disableInternalCache ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo const & devicePrivateDataCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.privateDataSlotRequestCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfo const & deviceQueueGlobalPriorityCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfo.globalPriority ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & deviceQueueInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.flags ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.queueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.queueIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DeviceQueueShaderCoreControlCreateInfoARM const & deviceQueueShaderCoreControlCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueShaderCoreControlCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueShaderCoreControlCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceQueueShaderCoreControlCreateInfoARM.shaderCoreCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorDescriptionARM const & tensorDescriptionARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.tiling ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.format ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.dimensionCount ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.pDimensions ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.pStrides ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDescriptionARM.usage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorCreateInfoARM const & tensorCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.flags ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.pDescription ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.sharingMode ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.queueFamilyIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCreateInfoARM.pQueueFamilyIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM const & deviceTensorMemoryRequirementsARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, deviceTensorMemoryRequirementsARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, deviceTensorMemoryRequirementsARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, deviceTensorMemoryRequirementsARM.pCreateInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DirectDriverLoadingInfoLUNARG const & directDriverLoadingInfoLUNARG ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingInfoLUNARG.sType ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingInfoLUNARG.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingInfoLUNARG.flags ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingInfoLUNARG.pfnGetInstanceProcAddr ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DirectDriverLoadingListLUNARG const & directDriverLoadingListLUNARG ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingListLUNARG.sType ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingListLUNARG.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingListLUNARG.mode ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingListLUNARG.driverCount ); + VULKAN_HPP_HASH_COMBINE( seed, directDriverLoadingListLUNARG.pDrivers ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & directFBSurfaceCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.dfb ); + VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.surface ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DispatchIndirectCommand const & dispatchIndirectCommand ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.x ); + VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.y ); + VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.z ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DispatchTileInfoQCOM const & dispatchTileInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, dispatchTileInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, dispatchTileInfoQCOM.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.displayEvent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const & displayModeParametersKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayModeParametersKHR.visibleRegion ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeParametersKHR.refreshRate ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & displayModeCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.parameters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR const & displayModePropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayModePropertiesKHR.displayMode ); + VULKAN_HPP_HASH_COMBINE( seed, displayModePropertiesKHR.parameters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR const & displayModeProperties2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.displayModeProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeStereoPropertiesNV const & displayModeStereoPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayModeStereoPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeStereoPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayModeStereoPropertiesNV.hdmi3DSupported ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD const & displayNativeHdrSurfaceCapabilitiesAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.localDimmingSupport ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR const & displayPlaneCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.supportedAlpha ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minSrcPosition ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxSrcPosition ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minSrcExtent ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxSrcExtent ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minDstPosition ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxDstPosition ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minDstExtent ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxDstExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR const & displayPlaneCapabilities2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.capabilities ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR const & displayPlaneInfo2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.mode ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.planeIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR const & displayPlanePropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPlanePropertiesKHR.currentDisplay ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlanePropertiesKHR.currentStackIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR const & displayPlaneProperties2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.displayPlaneProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT const & displayPowerInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.powerState ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR const & displayPresentInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.srcRect ); + VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.dstRect ); + VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.persistent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR const & displayPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.display ); + for ( const char * p = displayPropertiesKHR.displayName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.physicalDimensions ); + VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.physicalResolution ); + VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.supportedTransforms ); + VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.planeReorderPossible ); + VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.persistentContent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayProperties2KHR const & displayProperties2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.displayProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & displaySurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.displayMode ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.planeIndex ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.planeStackIndex ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.transform ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.globalAlpha ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.alphaMode ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.imageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoCreateInfoNV const & displaySurfaceStereoCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceStereoCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceStereoCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceStereoCreateInfoNV.stereoType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand const & drawIndexedIndirectCommand ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.indexCount ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.instanceCount ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.firstIndex ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.vertexOffset ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.firstInstance ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawIndirectCommand const & drawIndirectCommand ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.vertexCount ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.instanceCount ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.firstVertex ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.firstInstance ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawIndirectCountIndirectCommandEXT const & drawIndirectCountIndirectCommandEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCountIndirectCommandEXT.bufferAddress ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCountIndirectCommandEXT.stride ); + VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCountIndirectCommandEXT.commandCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandEXT const & drawMeshTasksIndirectCommandEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandEXT.groupCountX ); + VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandEXT.groupCountY ); + VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandEXT.groupCountZ ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV const & drawMeshTasksIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandNV.taskCount ); + VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandNV.firstTask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT const & drmFormatModifierProperties2EXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifier ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifierPlaneCount ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifierTilingFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT const & drmFormatModifierPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifier ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifierPlaneCount ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifierTilingFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT const & drmFormatModifierPropertiesList2EXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.drmFormatModifierCount ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.pDrmFormatModifierProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT const & drmFormatModifierPropertiesListEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.drmFormatModifierCount ); + VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.pDrmFormatModifierProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::EventCreateInfo const & eventCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR const & pipelineLibraryCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.libraryCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.pLibraries ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineCreateInfoAMDX const & executionGraphPipelineCreateInfoAMDX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.flags ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.stageCount ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.pStages ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.pLibraryInfo ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.layout ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.basePipelineHandle ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineCreateInfoAMDX.basePipelineIndex ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineScratchSizeAMDX const & executionGraphPipelineScratchSizeAMDX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineScratchSizeAMDX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineScratchSizeAMDX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineScratchSizeAMDX.minSize ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineScratchSizeAMDX.maxSize ); + VULKAN_HPP_HASH_COMBINE( seed, executionGraphPipelineScratchSizeAMDX.sizeGranularity ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo const & exportFenceCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.handleTypes ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR const & exportFenceWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.pAttributes ); + VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.dwAccess ); + VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.name ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo const & exportMemoryAllocateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.handleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV const & exportMemoryAllocateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.handleTypes ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR const & exportMemoryWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.pAttributes ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.dwAccess ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.name ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV const & exportMemoryWin32HandleInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.pAttributes ); + VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.dwAccess ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalBufferInfoEXT const & exportMetalBufferInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.memory ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalBufferInfoEXT.mtlBuffer ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalCommandQueueInfoEXT const & exportMetalCommandQueueInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.queue ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalCommandQueueInfoEXT.mtlCommandQueue ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalDeviceInfoEXT const & exportMetalDeviceInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalDeviceInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalDeviceInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalDeviceInfoEXT.mtlDevice ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalIOSurfaceInfoEXT const & exportMetalIOSurfaceInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.image ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalIOSurfaceInfoEXT.ioSurface ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalObjectCreateInfoEXT const & exportMetalObjectCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectCreateInfoEXT.exportObjectType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT const & exportMetalObjectsInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectsInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalObjectsInfoEXT.pNext ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalSharedEventInfoEXT const & exportMetalSharedEventInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.event ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalSharedEventInfoEXT.mtlSharedEvent ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMetalTextureInfoEXT const & exportMetalTextureInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.image ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.imageView ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.bufferView ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.plane ); + VULKAN_HPP_HASH_COMBINE( seed, exportMetalTextureInfoEXT.mtlTexture ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo const & exportSemaphoreCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.handleTypes ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR const & exportSemaphoreWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.pAttributes ); + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.dwAccess ); + VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.name ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExtensionProperties const & extensionProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, extensionProperties.extensionName[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, extensionProperties.specVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties const & externalMemoryProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.externalMemoryFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.exportFromImportedHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.compatibleHandleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalBufferProperties const & externalBufferProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.externalMemoryProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalComputeQueueCreateInfoNV const & externalComputeQueueCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueCreateInfoNV.preferredQueue ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalComputeQueueDataParamsNV const & externalComputeQueueDataParamsNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueDataParamsNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueDataParamsNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueDataParamsNV.deviceIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ExternalComputeQueueDeviceCreateInfoNV const & externalComputeQueueDeviceCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueDeviceCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueDeviceCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalComputeQueueDeviceCreateInfoNV.reservedExternalQueues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalFenceProperties const & externalFenceProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.exportFromImportedHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.compatibleHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.externalFenceFeatures ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalFormatANDROID const & externalFormatANDROID ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.externalFormat ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalFormatQNX const & externalFormatQNX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalFormatQNX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalFormatQNX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalFormatQNX.externalFormat ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties const & externalImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.externalMemoryProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatProperties const & imageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxExtent ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxMipLevels ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxArrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.sampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxResourceSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV const & externalImageFormatPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.imageFormatProperties ); + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.externalMemoryFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.exportFromImportedHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.compatibleHandleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryAcquireUnmodifiedEXT const & externalMemoryAcquireUnmodifiedEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryAcquireUnmodifiedEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryAcquireUnmodifiedEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryAcquireUnmodifiedEXT.acquireUnmodifiedMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo const & externalMemoryBufferCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.handleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo const & externalMemoryImageCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.handleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV const & externalMemoryImageCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.handleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryTensorCreateInfoARM const & externalMemoryTensorCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryTensorCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryTensorCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalMemoryTensorCreateInfoARM.handleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties const & externalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.exportFromImportedHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.compatibleHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.externalSemaphoreFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalTensorPropertiesARM const & externalTensorPropertiesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, externalTensorPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, externalTensorPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, externalTensorPropertiesARM.externalMemoryProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & fenceCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR const & fenceGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.fence ); + VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.handleType ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR const & fenceGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.fence ); + VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.handleType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT const & filterCubicImageViewImageFormatPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.filterCubic ); + VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.filterCubicMinmax ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties const & formatProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, formatProperties.linearTilingFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties.optimalTilingFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties.bufferFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties2 const & formatProperties2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.formatProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties3 const & formatProperties3 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.sType ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.linearTilingFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.optimalTilingFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.bufferFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR const & fragmentShadingRateAttachmentInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.pFragmentShadingRateAttachment ); + VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.shadingRateAttachmentTexelSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FrameBoundaryEXT const & frameBoundaryEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.frameID ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.imageCount ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.pImages ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.bufferCount ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.pBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.tagName ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.tagSize ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryEXT.pTag ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FrameBoundaryTensorsARM const & frameBoundaryTensorsARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryTensorsARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryTensorsARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryTensorsARM.tensorCount ); + VULKAN_HPP_HASH_COMBINE( seed, frameBoundaryTensorsARM.pTensors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo const & framebufferAttachmentImageInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.usage ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.width ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.height ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.layerCount ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.viewFormatCount ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.pViewFormats ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo const & framebufferAttachmentsCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.attachmentImageInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.pAttachmentImageInfos ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & framebufferCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.renderPass ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.attachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.pAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.width ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.height ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.layers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV const & framebufferMixedSamplesCombinationNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.coverageReductionMode ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.rasterizationSamples ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.depthStencilSamples ); + VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.colorSamples ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT const & generatedCommandsInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.shaderStages ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.indirectExecutionSet ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.indirectCommandsLayout ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.indirectAddress ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.indirectAddressSize ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.preprocessAddress ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.preprocessSize ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.maxSequenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.sequenceCountAddress ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoEXT.maxDrawCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV const & indirectCommandsStreamNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsStreamNV.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsStreamNV.offset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV const & generatedCommandsInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pipeline ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.indirectCommandsLayout ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.streamCount ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pStreams ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCount ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessOffset ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessSize ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCountBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCountOffset ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesIndexBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesIndexOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT const & generatedCommandsMemoryRequirementsInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoEXT.indirectExecutionSet ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoEXT.indirectCommandsLayout ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoEXT.maxSequenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoEXT.maxDrawCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV const & generatedCommandsMemoryRequirementsInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pipeline ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.indirectCommandsLayout ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.maxSequencesCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsPipelineInfoEXT const & generatedCommandsPipelineInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsPipelineInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsPipelineInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsPipelineInfoEXT.pipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsShaderInfoEXT const & generatedCommandsShaderInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsShaderInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsShaderInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsShaderInfoEXT.shaderCount ); + VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsShaderInfoEXT.pShaders ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LatencyTimingsFrameReportNV const & latencyTimingsFrameReportNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.presentID ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.inputSampleTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.simStartTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.simEndTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.renderSubmitStartTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.renderSubmitEndTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.presentStartTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.presentEndTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.driverStartTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.driverEndTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.osRenderQueueStartTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.osRenderQueueEndTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.gpuRenderStartTimeUs ); + VULKAN_HPP_HASH_COMBINE( seed, latencyTimingsFrameReportNV.gpuRenderEndTimeUs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GetLatencyMarkerInfoNV const & getLatencyMarkerInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, getLatencyMarkerInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, getLatencyMarkerInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, getLatencyMarkerInfoNV.timingCount ); + VULKAN_HPP_HASH_COMBINE( seed, getLatencyMarkerInfoNV.pTimings ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription const & vertexInputBindingDescription ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.binding ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.stride ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.inputRate ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription const & vertexInputAttributeDescription ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.location ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.binding ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.format ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.offset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo const & pipelineVertexInputStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.vertexBindingDescriptionCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pVertexBindingDescriptions ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.vertexAttributeDescriptionCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pVertexAttributeDescriptions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo const & pipelineInputAssemblyStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.topology ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.primitiveRestartEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo const & pipelineTessellationStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.patchControlPoints ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo const & pipelineViewportStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.viewportCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pViewports ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.scissorCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pScissors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo const & pipelineRasterizationStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthClampEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.rasterizerDiscardEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.polygonMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.cullMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.frontFace ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasConstantFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasClamp ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasSlopeFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.lineWidth ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo const & pipelineMultisampleStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.rasterizationSamples ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.sampleShadingEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.minSampleShading ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.pSampleMask ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.alphaToCoverageEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.alphaToOneEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::StencilOpState const & stencilOpState ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.failOp ); + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.passOp ); + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.depthFailOp ); + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.compareOp ); + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.compareMask ); + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.writeMask ); + VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.reference ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo const & pipelineDepthStencilStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthTestEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthWriteEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthCompareOp ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthBoundsTestEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.stencilTestEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.front ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.back ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.minDepthBounds ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.maxDepthBounds ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState const & pipelineColorBlendAttachmentState ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.blendEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.srcColorBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.dstColorBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.colorBlendOp ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.srcAlphaBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.dstAlphaBlendFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.alphaBlendOp ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.colorWriteMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo const & pipelineColorBlendStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.logicOpEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.logicOp ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.attachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.pAttachments ); + for ( size_t i = 0; i < 4; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.blendConstants[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo const & pipelineDynamicStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.dynamicStateCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.pDynamicStates ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & graphicsPipelineCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.stageCount ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pStages ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pVertexInputState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pInputAssemblyState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pTessellationState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pViewportState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pRasterizationState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pMultisampleState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pDepthStencilState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pColorBlendState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pDynamicState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.layout ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.renderPass ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.subpass ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.basePipelineHandle ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.basePipelineIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryCreateInfoEXT const & graphicsPipelineLibraryCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineLibraryCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineLibraryCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineLibraryCreateInfoEXT.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV const & graphicsShaderGroupCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.stageCount ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pStages ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pVertexInputState ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pTessellationState ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV const & graphicsPipelineShaderGroupsCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.groupCount ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pGroups ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pipelineCount ); + VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pPipelines ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::XYColorEXT const & xYColorEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, xYColorEXT.x ); + VULKAN_HPP_HASH_COMBINE( seed, xYColorEXT.y ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::HdrMetadataEXT const & hdrMetadataEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryRed ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryGreen ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryBlue ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.whitePoint ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxLuminance ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.minLuminance ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxContentLightLevel ); + VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxFrameAverageLightLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::HdrVividDynamicMetadataHUAWEI const & hdrVividDynamicMetadataHUAWEI ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, hdrVividDynamicMetadataHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, hdrVividDynamicMetadataHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, hdrVividDynamicMetadataHUAWEI.dynamicMetadataSize ); + VULKAN_HPP_HASH_COMBINE( seed, hdrVividDynamicMetadataHUAWEI.pDynamicMetadata ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & headlessSurfaceCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::HostImageCopyDevicePerformanceQuery const & hostImageCopyDevicePerformanceQuery ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, hostImageCopyDevicePerformanceQuery.sType ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageCopyDevicePerformanceQuery.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageCopyDevicePerformanceQuery.optimalDeviceAccess ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageCopyDevicePerformanceQuery.identicalMemoryLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::HostImageLayoutTransitionInfo const & hostImageLayoutTransitionInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, hostImageLayoutTransitionInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageLayoutTransitionInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageLayoutTransitionInfo.image ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageLayoutTransitionInfo.oldLayout ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageLayoutTransitionInfo.newLayout ); + VULKAN_HPP_HASH_COMBINE( seed, hostImageLayoutTransitionInfo.subresourceRange ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & iOSSurfaceCreateInfoMVK ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.sType ); + VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.flags ); + VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.pView ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageAlignmentControlCreateInfoMESA const & imageAlignmentControlCreateInfoMESA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageAlignmentControlCreateInfoMESA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageAlignmentControlCreateInfoMESA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageAlignmentControlCreateInfoMESA.maximumRequestedAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageBlit const & imageBlit ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageBlit.srcSubresource ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, imageBlit.srcOffsets[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, imageBlit.dstSubresource ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, imageBlit.dstOffsets[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCaptureDescriptorDataInfoEXT const & imageCaptureDescriptorDataInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageCaptureDescriptorDataInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageCaptureDescriptorDataInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageCaptureDescriptorDataInfoEXT.image ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCompressionControlEXT const & imageCompressionControlEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.compressionControlPlaneCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionControlEXT.pFixedRateFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCompressionPropertiesEXT const & imageCompressionPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.imageCompressionFlags ); + VULKAN_HPP_HASH_COMBINE( seed, imageCompressionPropertiesEXT.imageCompressionFixedRateFlags ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA const & imageFormatConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.imageCreateInfo ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.requiredFormatFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.flags ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.sysmemPixelFormat ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.colorSpaceCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.pColorSpaces ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA const & imageConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.formatConstraintsCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.pFormatConstraints ); + VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.bufferCollectionConstraints ); + VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.flags ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCopy const & imageCopy ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageCopy.srcSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy.srcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy.dstSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy.dstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageCopy.extent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubresourceLayout const & subresourceLayout ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.offset ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.size ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.rowPitch ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.arrayPitch ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.depthPitch ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT const & imageDrmFormatModifierExplicitCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.drmFormatModifier ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.drmFormatModifierPlaneCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.pPlaneLayouts ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT const & imageDrmFormatModifierListCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.drmFormatModifierCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.pDrmFormatModifiers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT const & imageDrmFormatModifierPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.drmFormatModifier ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo const & imageFormatListCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.viewFormatCount ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.pViewFormats ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatProperties2 const & imageFormatProperties2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.imageFormatProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier const & imageMemoryBarrier ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.oldLayout ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.newLayout ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.srcQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.dstQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.image ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.subresourceRange ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 const & imageMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.image ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & imagePipeSurfaceCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.flags ); + VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.imagePipeHandle ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo const & imagePlaneMemoryRequirementsInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.planeAspect ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageResolve const & imageResolve ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageResolve.srcSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve.srcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve.dstSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve.dstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve.extent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageResolve2 const & imageResolve2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.srcSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.srcOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.dstSubresource ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.dstOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.extent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 const & imageSparseMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.image ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo const & imageStencilUsageCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.stencilUsage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR const & imageSwapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.swapchain ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT const & imageViewASTCDecodeModeEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.decodeMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX const & imageViewAddressPropertiesNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.deviceAddress ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ImageViewCaptureDescriptorDataInfoEXT const & imageViewCaptureDescriptorDataInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewCaptureDescriptorDataInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCaptureDescriptorDataInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCaptureDescriptorDataInfoEXT.imageView ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & imageViewCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.image ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.viewType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.format ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.components ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.subresourceRange ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX const & imageViewHandleInfoNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.imageView ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.descriptorType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.sampler ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT const & imageViewMinLodCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.minLod ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewSampleWeightCreateInfoQCOM const & imageViewSampleWeightCreateInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.filterCenter ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.filterSize ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSampleWeightCreateInfoQCOM.numPhases ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewSlicedCreateInfoEXT const & imageViewSlicedCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewSlicedCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSlicedCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSlicedCreateInfoEXT.sliceOffset ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewSlicedCreateInfoEXT.sliceCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo const & imageViewUsageCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.usage ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID const & importAndroidHardwareBufferInfoANDROID ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.buffer ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR const & importFenceFdInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.fence ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.fd ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR const & importFenceWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.fence ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.handle ); + VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.name ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA const & importMemoryBufferCollectionFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.collection ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.index ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR const & importMemoryFdInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.fd ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT const & importMemoryHostPointerInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.pHostPointer ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryMetalHandleInfoEXT const & importMemoryMetalHandleInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryMetalHandleInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryMetalHandleInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryMetalHandleInfoEXT.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryMetalHandleInfoEXT.handle ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR const & importMemoryWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.handle ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.name ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV const & importMemoryWin32HandleInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.handle ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA const & importMemoryZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.handle ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalBufferInfoEXT const & importMetalBufferInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMetalBufferInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalBufferInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalBufferInfoEXT.mtlBuffer ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalIOSurfaceInfoEXT const & importMetalIOSurfaceInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMetalIOSurfaceInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalIOSurfaceInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalIOSurfaceInfoEXT.ioSurface ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalSharedEventInfoEXT const & importMetalSharedEventInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMetalSharedEventInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalSharedEventInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalSharedEventInfoEXT.mtlSharedEvent ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMetalTextureInfoEXT const & importMetalTextureInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.plane ); + VULKAN_HPP_HASH_COMBINE( seed, importMetalTextureInfoEXT.mtlTexture ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportScreenBufferInfoQNX const & importScreenBufferInfoQNX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importScreenBufferInfoQNX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importScreenBufferInfoQNX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importScreenBufferInfoQNX.buffer ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR const & importSemaphoreFdInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.fd ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR const & importSemaphoreWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.handle ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.name ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA const & importSemaphoreZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.flags ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.handleType ); + VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.zirconHandle ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsExecutionSetTokenEXT const & indirectCommandsExecutionSetTokenEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsExecutionSetTokenEXT.type ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsExecutionSetTokenEXT.shaderStages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsIndexBufferTokenEXT const & indirectCommandsIndexBufferTokenEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsIndexBufferTokenEXT.mode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PushConstantRange const & pushConstantRange ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.offset ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsPushConstantTokenEXT const & indirectCommandsPushConstantTokenEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsPushConstantTokenEXT.updateRange ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsVertexBufferTokenEXT const & indirectCommandsVertexBufferTokenEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsVertexBufferTokenEXT.vertexBindingUnit ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoEXT const & indirectCommandsLayoutCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.shaderStages ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.indirectStride ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.pipelineLayout ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.tokenCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoEXT.pTokens ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV const & indirectCommandsLayoutTokenNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.tokenType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.stream ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.offset ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.vertexBindingUnit ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.vertexDynamicStride ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantPipelineLayout ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantShaderStageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantOffset ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantSize ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.indirectStateFlags ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.indexTypeCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pIndexTypes ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pIndexTypeValues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & indirectCommandsLayoutCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.tokenCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pTokens ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.streamCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pStreamStrides ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectExecutionSetPipelineInfoEXT const & indirectExecutionSetPipelineInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetPipelineInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetPipelineInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetPipelineInfoEXT.initialPipeline ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetPipelineInfoEXT.maxPipelineCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderLayoutInfoEXT const & indirectExecutionSetShaderLayoutInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderLayoutInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderLayoutInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderLayoutInfoEXT.setLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderLayoutInfoEXT.pSetLayouts ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderInfoEXT const & indirectExecutionSetShaderInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.shaderCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.pInitialShaders ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.pSetLayoutInfos ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.maxShaderCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.pushConstantRangeCount ); + VULKAN_HPP_HASH_COMBINE( seed, indirectExecutionSetShaderInfoEXT.pPushConstantRanges ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL const & initializePerformanceApiInfoINTEL ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.pUserData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference const & inputAttachmentAspectReference ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.subpass ); + VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.inputAttachmentIndex ); + VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.aspectMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & instanceCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.pApplicationInfo ); + VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.enabledLayerCount ); + for ( size_t i = 0; i < instanceCreateInfo.enabledLayerCount; ++i ) + { + for ( const char * p = instanceCreateInfo.ppEnabledLayerNames[i]; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + } + VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.enabledExtensionCount ); + for ( size_t i = 0; i < instanceCreateInfo.enabledExtensionCount; ++i ) + { + for ( const char * p = instanceCreateInfo.ppEnabledExtensionNames[i]; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LatencySleepInfoNV const & latencySleepInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, latencySleepInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepInfoNV.signalSemaphore ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepInfoNV.value ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LatencySleepModeInfoNV const & latencySleepModeInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, latencySleepModeInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepModeInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepModeInfoNV.lowLatencyMode ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepModeInfoNV.lowLatencyBoost ); + VULKAN_HPP_HASH_COMBINE( seed, latencySleepModeInfoNV.minimumIntervalUs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LatencySubmissionPresentIdNV const & latencySubmissionPresentIdNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, latencySubmissionPresentIdNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, latencySubmissionPresentIdNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, latencySubmissionPresentIdNV.presentID ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LatencySurfaceCapabilitiesNV const & latencySurfaceCapabilitiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, latencySurfaceCapabilitiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, latencySurfaceCapabilitiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, latencySurfaceCapabilitiesNV.presentModeCount ); + VULKAN_HPP_HASH_COMBINE( seed, latencySurfaceCapabilitiesNV.pPresentModes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LayerProperties const & layerProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, layerProperties.layerName[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, layerProperties.specVersion ); + VULKAN_HPP_HASH_COMBINE( seed, layerProperties.implementationVersion ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, layerProperties.description[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LayerSettingEXT const & layerSettingEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + for ( const char * p = layerSettingEXT.pLayerName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + for ( const char * p = layerSettingEXT.pSettingName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, layerSettingEXT.type ); + VULKAN_HPP_HASH_COMBINE( seed, layerSettingEXT.valueCount ); + VULKAN_HPP_HASH_COMBINE( seed, layerSettingEXT.pValues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::LayerSettingsCreateInfoEXT const & layerSettingsCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, layerSettingsCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, layerSettingsCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, layerSettingsCreateInfoEXT.settingCount ); + VULKAN_HPP_HASH_COMBINE( seed, layerSettingsCreateInfoEXT.pSettings ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & macOSSurfaceCreateInfoMVK ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.sType ); + VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.flags ); + VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.pView ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MappedMemoryRange const & mappedMemoryRange ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.sType ); + VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.memory ); + VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.offset ); + VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo const & memoryAllocateFlagsInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.deviceMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & memoryAllocateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.allocationSize ); + VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.memoryTypeIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrier const & memoryBarrier ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.dstAccessMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrierAccessFlags3KHR const & memoryBarrierAccessFlags3KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrierAccessFlags3KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrierAccessFlags3KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrierAccessFlags3KHR.srcAccessMask3 ); + VULKAN_HPP_HASH_COMBINE( seed, memoryBarrierAccessFlags3KHR.dstAccessMask3 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo const & memoryDedicatedAllocateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.image ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.buffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfoTensorARM const & memoryDedicatedAllocateInfoTensorARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfoTensorARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfoTensorARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfoTensorARM.tensor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements const & memoryDedicatedRequirements ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.prefersDedicatedAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.requiresDedicatedAllocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR const & memoryFdPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.memoryTypeBits ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID const & memoryGetAndroidHardwareBufferInfoANDROID ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.memory ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR const & memoryGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.memory ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.handleType ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetMetalHandleInfoEXT const & memoryGetMetalHandleInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryGetMetalHandleInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetMetalHandleInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetMetalHandleInfoEXT.memory ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetMetalHandleInfoEXT.handleType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV const & memoryGetRemoteAddressInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.memory ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.handleType ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR const & memoryGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.memory ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.handleType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA const & memoryGetZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.memory ); + VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.handleType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryHeap const & memoryHeap ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryHeap.size ); + VULKAN_HPP_HASH_COMBINE( seed, memoryHeap.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT const & memoryHostPointerPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.memoryTypeBits ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryMapInfo const & memoryMapInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryMapInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapInfo.memory ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapInfo.offset ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapInfo.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryMapPlacedInfoEXT const & memoryMapPlacedInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryMapPlacedInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapPlacedInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMapPlacedInfoEXT.pPlacedAddress ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryMetalHandlePropertiesEXT const & memoryMetalHandlePropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryMetalHandlePropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMetalHandlePropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryMetalHandlePropertiesEXT.memoryTypeBits ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo const & memoryOpaqueCaptureAddressAllocateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.opaqueCaptureAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT const & memoryPriorityAllocateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.priority ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryRequirements const & memoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.size ); + VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.alignment ); + VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.memoryTypeBits ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryRequirements2 const & memoryRequirements2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.memoryRequirements ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryType const & memoryType ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryType.propertyFlags ); + VULKAN_HPP_HASH_COMBINE( seed, memoryType.heapIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryUnmapInfo const & memoryUnmapInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryUnmapInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryUnmapInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryUnmapInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, memoryUnmapInfo.memory ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR const & memoryWin32HandlePropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.memoryTypeBits ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA const & memoryZirconHandlePropertiesFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.memoryTypeBits ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & metalSurfaceCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.pLayer ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MicromapBuildSizesInfoEXT const & micromapBuildSizesInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, micromapBuildSizesInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, micromapBuildSizesInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, micromapBuildSizesInfoEXT.micromapSize ); + VULKAN_HPP_HASH_COMBINE( seed, micromapBuildSizesInfoEXT.buildScratchSize ); + VULKAN_HPP_HASH_COMBINE( seed, micromapBuildSizesInfoEXT.discardable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MicromapCreateInfoEXT const & micromapCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.createFlags ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.buffer ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.offset ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.size ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.type ); + VULKAN_HPP_HASH_COMBINE( seed, micromapCreateInfoEXT.deviceAddress ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MicromapTriangleEXT const & micromapTriangleEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, micromapTriangleEXT.dataOffset ); + VULKAN_HPP_HASH_COMBINE( seed, micromapTriangleEXT.subdivisionLevel ); + VULKAN_HPP_HASH_COMBINE( seed, micromapTriangleEXT.format ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MicromapVersionInfoEXT const & micromapVersionInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, micromapVersionInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, micromapVersionInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, micromapVersionInfoEXT.pVersionData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT const & multiDrawIndexedInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.firstIndex ); + VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.indexCount ); + VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.vertexOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT const & multiDrawInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, multiDrawInfoEXT.firstVertex ); + VULKAN_HPP_HASH_COMBINE( seed, multiDrawInfoEXT.vertexCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT const & multisamplePropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.maxSampleLocationGridSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::MultisampledRenderToSingleSampledInfoEXT const & multisampledRenderToSingleSampledInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.multisampledRenderToSingleSampledEnable ); + VULKAN_HPP_HASH_COMBINE( seed, multisampledRenderToSingleSampledInfoEXT.rasterizationSamples ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX const & multiviewPerViewAttributesInfoNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.perViewAttributes ); + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.perViewAttributesPositionXOnly ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & multiviewPerViewRenderAreasRenderPassBeginInfoQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewRenderAreasRenderPassBeginInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewRenderAreasRenderPassBeginInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewRenderAreasRenderPassBeginInfoQCOM.perViewRenderAreaCount ); + VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewRenderAreasRenderPassBeginInfoQCOM.pPerViewRenderAreas ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListEXT const & mutableDescriptorTypeListEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeListEXT.descriptorTypeCount ); + VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeListEXT.pDescriptorTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoEXT const & mutableDescriptorTypeCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoEXT.mutableDescriptorTypeListCount ); + VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoEXT.pMutableDescriptorTypeLists ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_OHOS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OHSurfaceCreateInfoOHOS const & oHSurfaceCreateInfoOHOS ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, oHSurfaceCreateInfoOHOS.sType ); + VULKAN_HPP_HASH_COMBINE( seed, oHSurfaceCreateInfoOHOS.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, oHSurfaceCreateInfoOHOS.flags ); + VULKAN_HPP_HASH_COMBINE( seed, oHSurfaceCreateInfoOHOS.window ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_OHOS*/ + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::OpaqueCaptureDescriptorDataCreateInfoEXT const & opaqueCaptureDescriptorDataCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, opaqueCaptureDescriptorDataCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, opaqueCaptureDescriptorDataCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, opaqueCaptureDescriptorDataCreateInfoEXT.opaqueCaptureDescriptorData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OpticalFlowExecuteInfoNV const & opticalFlowExecuteInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowExecuteInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowExecuteInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowExecuteInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowExecuteInfoNV.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowExecuteInfoNV.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatInfoNV const & opticalFlowImageFormatInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowImageFormatInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowImageFormatInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowImageFormatInfoNV.usage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatPropertiesNV const & opticalFlowImageFormatPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowImageFormatPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowImageFormatPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowImageFormatPropertiesNV.format ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateInfoNV const & opticalFlowSessionCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.width ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.height ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.imageFormat ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.flowVectorFormat ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.costFormat ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.outputGridSize ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.hintGridSize ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.performanceLevel ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreateInfoNV.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreatePrivateDataInfoNV const & opticalFlowSessionCreatePrivateDataInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreatePrivateDataInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreatePrivateDataInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreatePrivateDataInfoNV.id ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreatePrivateDataInfoNV.size ); + VULKAN_HPP_HASH_COMBINE( seed, opticalFlowSessionCreatePrivateDataInfoNV.pPrivateData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeInfoNV const & outOfBandQueueTypeInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, outOfBandQueueTypeInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, outOfBandQueueTypeInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, outOfBandQueueTypeInfoNV.queueType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureFlagsNV const & partitionedAccelerationStructureFlagsNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureFlagsNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureFlagsNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureFlagsNV.enablePartitionTranslation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureUpdateInstanceDataNV const & + partitionedAccelerationStructureUpdateInstanceDataNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureUpdateInstanceDataNV.instanceIndex ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureUpdateInstanceDataNV.instanceContributionToHitGroupIndex ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureUpdateInstanceDataNV.accelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureWriteInstanceDataNV const & partitionedAccelerationStructureWriteInstanceDataNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.transform ); + for ( size_t i = 0; i < 6; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.explicitAABB[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.instanceID ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.instanceMask ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.instanceContributionToHitGroupIndex ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.instanceFlags ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.instanceIndex ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.partitionIndex ); + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWriteInstanceDataNV.accelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureWritePartitionTranslationDataNV const & + partitionedAccelerationStructureWritePartitionTranslationDataNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWritePartitionTranslationDataNV.partitionIndex ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, partitionedAccelerationStructureWritePartitionTranslationDataNV.partitionTranslation[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE const & pastPresentationTimingGOOGLE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.presentID ); + VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.desiredPresentTime ); + VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.actualPresentTime ); + VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.earliestPresentTime ); + VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.presentMargin ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerTileBeginInfoQCOM const & perTileBeginInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, perTileBeginInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, perTileBeginInfoQCOM.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerTileEndInfoQCOM const & perTileEndInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, perTileEndInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, perTileEndInfoQCOM.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & performanceConfigurationAcquireInfoINTEL ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.type ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR const & performanceCounterDescriptionKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.flags ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.name[i] ); + } + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.category[i] ); + } + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.description[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceCounterKHR const & performanceCounterKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.unit ); + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.scope ); + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.storage ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.uuid[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL const & performanceMarkerInfoINTEL ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.marker ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL const & performanceOverrideInfoINTEL ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.type ); + VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.enable ); + VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.parameter ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR const & performanceQuerySubmitInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.counterPassIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL const & performanceStreamMarkerInfoINTEL ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.marker ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures const & physicalDevice16BitStorageFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storageBuffer16BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.uniformAndStorageBuffer16BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storagePushConstant16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storageInputOutput16 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT const & physicalDevice4444FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.formatA4R4G4B4 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.formatA4B4G4R4 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures const & physicalDevice8BitStorageFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.storageBuffer8BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.uniformAndStorageBuffer8BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.storagePushConstant8 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT const & physicalDeviceASTCDecodeFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.decodeModeSharedExponent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR const & physicalDeviceAccelerationStructureFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureIndirectBuild ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.descriptorBindingAccelerationStructureUpdateAfterBind ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR const & physicalDeviceAccelerationStructurePropertiesKHR ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxGeometryCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxInstanceCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPrimitiveCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPerStageDescriptorAccelerationStructures ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPerStageDescriptorUpdateAfterBindAccelerationStructures ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxDescriptorSetAccelerationStructures ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxDescriptorSetUpdateAfterBindAccelerationStructures ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.minAccelerationStructureScratchOffsetAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAddressBindingReportFeaturesEXT const & physicalDeviceAddressBindingReportFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAddressBindingReportFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAddressBindingReportFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAddressBindingReportFeaturesEXT.reportAddressBinding ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAmigoProfilingFeaturesSEC const & physicalDeviceAmigoProfilingFeaturesSEC ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAmigoProfilingFeaturesSEC.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAmigoProfilingFeaturesSEC.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAmigoProfilingFeaturesSEC.amigoProfiling ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAntiLagFeaturesAMD const & physicalDeviceAntiLagFeaturesAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAntiLagFeaturesAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAntiLagFeaturesAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAntiLagFeaturesAMD.antiLag ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & + physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.attachmentFeedbackLoopDynamicState ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & + physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.attachmentFeedbackLoopLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & physicalDeviceBlendOperationAdvancedFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.advancedBlendCoherentOperations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & physicalDeviceBlendOperationAdvancedPropertiesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendMaxColorAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendIndependentBlend ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendNonPremultipliedSrcColor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendNonPremultipliedDstColor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendCorrelatedOverlap ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendAllOperations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT const & physicalDeviceBorderColorSwizzleFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzle ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzleFromImage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures const & physicalDeviceBufferDeviceAddressFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddressCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddressMultiDevice ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT const & physicalDeviceBufferDeviceAddressFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddress ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddressCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddressMultiDevice ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterAccelerationStructureFeaturesNV const & + physicalDeviceClusterAccelerationStructureFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructureFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructureFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructureFeaturesNV.clusterAccelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterAccelerationStructurePropertiesNV const & + physicalDeviceClusterAccelerationStructurePropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.maxVerticesPerCluster ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.maxTrianglesPerCluster ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.clusterScratchByteAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.clusterByteAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.clusterTemplateByteAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.clusterBottomLevelByteAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.clusterTemplateBoundsByteAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterAccelerationStructurePropertiesNV.maxClusterGeometryIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & physicalDeviceClusterCullingShaderFeaturesHUAWEI ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderFeaturesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderFeaturesHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderFeaturesHUAWEI.clustercullingShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderFeaturesHUAWEI.multiviewClusterCullingShader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & physicalDeviceClusterCullingShaderPropertiesHUAWEI ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderPropertiesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderPropertiesHUAWEI.pNext ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderPropertiesHUAWEI.maxWorkGroupCount[i] ); + } + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderPropertiesHUAWEI.maxWorkGroupSize[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderPropertiesHUAWEI.maxOutputClusterCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderPropertiesHUAWEI.indirectBufferOffsetAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & physicalDeviceClusterCullingShaderVrsFeaturesHUAWEI ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderVrsFeaturesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderVrsFeaturesHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceClusterCullingShaderVrsFeaturesHUAWEI.clusterShadingRate ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD const & physicalDeviceCoherentMemoryFeaturesAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.deviceCoherentMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT const & physicalDeviceColorWriteEnableFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCommandBufferInheritanceFeaturesNV const & physicalDeviceCommandBufferInheritanceFeaturesNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCommandBufferInheritanceFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCommandBufferInheritanceFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCommandBufferInheritanceFeaturesNV.commandBufferInheritance ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesKHR const & physicalDeviceComputeShaderDerivativesFeaturesKHR ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesKHR.computeDerivativeGroupQuads ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesKHR.computeDerivativeGroupLinear ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesPropertiesKHR const & physicalDeviceComputeShaderDerivativesPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesPropertiesKHR.meshAndTaskShaderDerivatives ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT const & physicalDeviceConditionalRenderingFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.conditionalRendering ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.inheritedConditionalRendering ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT const & + physicalDeviceConservativeRasterizationPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.primitiveOverestimationSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.maxExtraPrimitiveOverestimationSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.extraPrimitiveOverestimationSizeGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.primitiveUnderestimation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.conservativePointAndLineRasterization ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.degenerateTrianglesRasterized ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.degenerateLinesRasterized ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.fullyCoveredFragmentShaderInputVariable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.conservativeRasterizationPostDepthCoverage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrix2FeaturesNV const & physicalDeviceCooperativeMatrix2FeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixWorkgroupScope ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixFlexibleDimensions ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixReductions ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixConversions ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixPerElementOperations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixTensorAddressing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2FeaturesNV.cooperativeMatrixBlockLoads ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrix2PropertiesNV const & physicalDeviceCooperativeMatrix2PropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2PropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2PropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2PropertiesNV.cooperativeMatrixWorkgroupScopeMaxWorkgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2PropertiesNV.cooperativeMatrixFlexibleDimensionsMaxDimension ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrix2PropertiesNV.cooperativeMatrixWorkgroupScopeReservedSharedMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesKHR const & physicalDeviceCooperativeMatrixFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesKHR.cooperativeMatrix ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesKHR.cooperativeMatrixRobustBufferAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV const & physicalDeviceCooperativeMatrixFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.cooperativeMatrix ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.cooperativeMatrixRobustBufferAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesKHR const & physicalDeviceCooperativeMatrixPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesKHR.cooperativeMatrixSupportedStages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV const & physicalDeviceCooperativeMatrixPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.cooperativeMatrixSupportedStages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeVectorFeaturesNV const & physicalDeviceCooperativeVectorFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorFeaturesNV.cooperativeVector ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorFeaturesNV.cooperativeVectorTraining ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeVectorPropertiesNV const & physicalDeviceCooperativeVectorPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorPropertiesNV.cooperativeVectorSupportedStages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorPropertiesNV.cooperativeVectorTrainingFloat16Accumulation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorPropertiesNV.cooperativeVectorTrainingFloat32Accumulation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeVectorPropertiesNV.maxCooperativeVectorComponents ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCopyMemoryIndirectFeaturesNV const & physicalDeviceCopyMemoryIndirectFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCopyMemoryIndirectFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCopyMemoryIndirectFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCopyMemoryIndirectFeaturesNV.indirectCopy ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCopyMemoryIndirectPropertiesNV const & physicalDeviceCopyMemoryIndirectPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCopyMemoryIndirectPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCopyMemoryIndirectPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCopyMemoryIndirectPropertiesNV.supportedQueues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV const & physicalDeviceCornerSampledImageFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.cornerSampledImage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV const & physicalDeviceCoverageReductionModeFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.coverageReductionMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCubicClampFeaturesQCOM const & physicalDeviceCubicClampFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCubicClampFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCubicClampFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCubicClampFeaturesQCOM.cubicRangeClamp ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCubicWeightsFeaturesQCOM const & physicalDeviceCubicWeightsFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCubicWeightsFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCubicWeightsFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCubicWeightsFeaturesQCOM.selectableCubicWeights ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCudaKernelLaunchFeaturesNV const & physicalDeviceCudaKernelLaunchFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchFeaturesNV.cudaKernelLaunchFeatures ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCudaKernelLaunchPropertiesNV const & physicalDeviceCudaKernelLaunchPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchPropertiesNV.computeCapabilityMinor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCudaKernelLaunchPropertiesNV.computeCapabilityMajor ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT const & physicalDeviceCustomBorderColorFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.customBorderColors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.customBorderColorWithoutFormat ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT const & physicalDeviceCustomBorderColorPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.maxCustomBorderColorSamplers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphFeaturesARM const & physicalDeviceDataGraphFeaturesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.dataGraph ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.dataGraphUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.dataGraphSpecializationConstants ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.dataGraphDescriptorBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphFeaturesARM.dataGraphShaderModule ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationSupportARM const & physicalDeviceDataGraphOperationSupportARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphOperationSupportARM.operationType ); + for ( size_t i = 0; i < VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphOperationSupportARM.name[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDataGraphOperationSupportARM.version ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & + physicalDeviceDedicatedAllocationImageAliasingFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.dedicatedAllocationImageAliasing ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthBiasControlFeaturesEXT const & physicalDeviceDepthBiasControlFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthBiasControlFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthBiasControlFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthBiasControlFeaturesEXT.depthBiasControl ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthBiasControlFeaturesEXT.leastRepresentableValueForceUnormRepresentation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthBiasControlFeaturesEXT.floatRepresentation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthBiasControlFeaturesEXT.depthBiasExact ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampControlFeaturesEXT const & physicalDeviceDepthClampControlFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClampControlFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClampControlFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClampControlFeaturesEXT.depthClampControl ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampZeroOneFeaturesKHR const & physicalDeviceDepthClampZeroOneFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClampZeroOneFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClampZeroOneFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClampZeroOneFeaturesKHR.depthClampZeroOne ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT const & physicalDeviceDepthClipControlFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.depthClipControl ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT const & physicalDeviceDepthClipEnableFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties const & physicalDeviceDepthStencilResolveProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.supportedDepthResolveModes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.supportedStencilResolveModes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.independentResolveNone ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.independentResolve ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & + physicalDeviceDescriptorBufferDensityMapPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferDensityMapPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferDensityMapPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferDensityMapPropertiesEXT.combinedImageSamplerDensityMapDescriptorSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferFeaturesEXT const & physicalDeviceDescriptorBufferFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferFeaturesEXT.descriptorBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferFeaturesEXT.descriptorBufferCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferFeaturesEXT.descriptorBufferImageLayoutIgnored ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferFeaturesEXT.descriptorBufferPushDescriptors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferPropertiesEXT const & physicalDeviceDescriptorBufferPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.combinedImageSamplerDescriptorSingleArray ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.bufferlessPushDescriptors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.allowSamplerImageViewPostSubmitCreation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.descriptorBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxDescriptorBufferBindings ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxResourceDescriptorBufferBindings ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxSamplerDescriptorBufferBindings ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxEmbeddedImmutableSamplerBindings ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxEmbeddedImmutableSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.bufferCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.imageCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.imageViewCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.samplerCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.accelerationStructureCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.samplerDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.combinedImageSamplerDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.sampledImageDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.storageImageDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.uniformTexelBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.robustUniformTexelBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.storageTexelBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.robustStorageTexelBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.uniformBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.robustUniformBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.storageBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.robustStorageBufferDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.inputAttachmentDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.accelerationStructureDescriptorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxSamplerDescriptorBufferRange ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.maxResourceDescriptorBufferRange ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.samplerDescriptorBufferAddressSpaceSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.resourceDescriptorBufferAddressSpaceSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferPropertiesEXT.descriptorBufferAddressSpaceSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferTensorFeaturesARM const & physicalDeviceDescriptorBufferTensorFeaturesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorFeaturesARM.descriptorBufferTensorDescriptors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferTensorPropertiesARM const & physicalDeviceDescriptorBufferTensorPropertiesARM ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorPropertiesARM.tensorCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorPropertiesARM.tensorViewCaptureReplayDescriptorDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorBufferTensorPropertiesARM.tensorDescriptorSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures const & physicalDeviceDescriptorIndexingFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingVariableDescriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties const & physicalDeviceDescriptorIndexingProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxUpdateAfterBindDescriptorsInAllPools ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderUniformBufferArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderSampledImageArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderStorageBufferArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderStorageImageArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.shaderInputAttachmentArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.robustBufferAccessUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.quadDivergentImplicitLod ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSampledImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindStorageImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageUpdateAfterBindResources ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindSampledImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindInputAttachments ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & + physicalDeviceDescriptorPoolOverallocationFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorPoolOverallocationFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorPoolOverallocationFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorPoolOverallocationFeaturesNV.descriptorPoolOverallocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & physicalDeviceDescriptorSetHostMappingFeaturesVALVE ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorSetHostMappingFeaturesVALVE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorSetHostMappingFeaturesVALVE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorSetHostMappingFeaturesVALVE.descriptorSetHostMapping ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & + physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.deviceGeneratedCompute ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.deviceGeneratedComputePipelines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.deviceGeneratedComputeCaptureReplay ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & physicalDeviceDeviceGeneratedCommandsFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesEXT.deviceGeneratedCommands ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesEXT.dynamicGeneratedPipelineLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & physicalDeviceDeviceGeneratedCommandsFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.deviceGeneratedCommands ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & physicalDeviceDeviceGeneratedCommandsPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.maxIndirectPipelineCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.maxIndirectShaderObjectCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.maxIndirectSequenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.maxIndirectCommandsTokenCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.maxIndirectCommandsTokenOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.maxIndirectCommandsIndirectStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.supportedIndirectCommandsInputModes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.supportedIndirectCommandsShaderStages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.supportedIndirectCommandsShaderStagesPipelineBinding ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.supportedIndirectCommandsShaderStagesShaderBinding ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.deviceGeneratedCommandsTransformFeedback ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesEXT.deviceGeneratedCommandsMultiDrawIndirectCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & physicalDeviceDeviceGeneratedCommandsPropertiesNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxGraphicsShaderGroupCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectSequenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsTokenCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsStreamCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsTokenOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsStreamStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minSequencesCountBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minSequencesIndexBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minIndirectCommandsBufferOffsetAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT const & physicalDeviceDeviceMemoryReportFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.deviceMemoryReport ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV const & physicalDeviceDiagnosticsConfigFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.diagnosticsConfig ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT const & physicalDeviceDiscardRectanglePropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.maxDiscardRectangles ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDisplacementMicromapFeaturesNV const & physicalDeviceDisplacementMicromapFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDisplacementMicromapFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDisplacementMicromapFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDisplacementMicromapFeaturesNV.displacementMicromap ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDisplacementMicromapPropertiesNV const & physicalDeviceDisplacementMicromapPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDisplacementMicromapPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDisplacementMicromapPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDisplacementMicromapPropertiesNV.maxDisplacementMicromapSubdivisionLevel ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties const & physicalDeviceDriverProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverID ); + for ( size_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverName[i] ); + } + for ( size_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverInfo[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.conformanceVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT const & physicalDeviceDrmPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.hasPrimary ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.hasRender ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.primaryMajor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.primaryMinor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.renderMajor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.renderMinor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures const & physicalDeviceDynamicRenderingFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.dynamicRendering ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingLocalReadFeatures const & physicalDeviceDynamicRenderingLocalReadFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingLocalReadFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingLocalReadFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingLocalReadFeatures.dynamicRenderingLocalRead ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & + physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.dynamicRenderingUnusedAttachments ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV const & physicalDeviceExclusiveScissorFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.exclusiveScissor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT const & physicalDeviceExtendedDynamicState2FeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2LogicOp ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2PatchControlPoints ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState3FeaturesEXT const & physicalDeviceExtendedDynamicState3FeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3TessellationDomainOrigin ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClampEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3PolygonMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3RasterizationSamples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3SampleMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3AlphaToCoverageEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3AlphaToOneEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LogicOpEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorBlendEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorBlendEquation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorWriteMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3RasterizationStream ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ConservativeRasterizationMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ExtraPrimitiveOverestimationSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClipEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3SampleLocationsEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorBlendAdvanced ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ProvokingVertexMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineRasterizationMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineStippleEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClipNegativeOneToOne ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportWScalingEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportSwizzle ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorLocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTableEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageReductionMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3RepresentativeFragmentTestEnable ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ShadingRateImageEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState3PropertiesEXT const & physicalDeviceExtendedDynamicState3PropertiesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3PropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3PropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState3PropertiesEXT.dynamicPrimitiveTopologyUnrestricted ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT const & physicalDeviceExtendedDynamicStateFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.extendedDynamicState ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & physicalDeviceExtendedSparseAddressSpaceFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpaceFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpaceFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpaceFeaturesNV.extendedSparseAddressSpace ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & + physicalDeviceExtendedSparseAddressSpacePropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpacePropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpacePropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpacePropertiesNV.extendedSparseAddressSpaceSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpacePropertiesNV.extendedSparseImageUsageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedSparseAddressSpacePropertiesNV.extendedSparseBufferUsageFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo const & physicalDeviceExternalBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.usage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.handleType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalComputeQueuePropertiesNV const & physicalDeviceExternalComputeQueuePropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalComputeQueuePropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalComputeQueuePropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalComputeQueuePropertiesNV.externalDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalComputeQueuePropertiesNV.maxExternalQueues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo const & physicalDeviceExternalFenceInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.handleType ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFormatResolveFeaturesANDROID const & physicalDeviceExternalFormatResolveFeaturesANDROID ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolveFeaturesANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolveFeaturesANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolveFeaturesANDROID.externalFormatResolve ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFormatResolvePropertiesANDROID const & + physicalDeviceExternalFormatResolvePropertiesANDROID ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolvePropertiesANDROID.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolvePropertiesANDROID.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolvePropertiesANDROID.nullColorAttachmentWithExternalFormatResolve ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolvePropertiesANDROID.externalFormatResolveChromaOffsetX ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFormatResolvePropertiesANDROID.externalFormatResolveChromaOffsetY ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo const & physicalDeviceExternalImageFormatInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.handleType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT const & physicalDeviceExternalMemoryHostPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.minImportedHostPointerAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV const & physicalDeviceExternalMemoryRDMAFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.externalMemoryRDMA ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & physicalDeviceExternalMemoryScreenBufferFeaturesQNX ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryScreenBufferFeaturesQNX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryScreenBufferFeaturesQNX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryScreenBufferFeaturesQNX.screenBufferImport ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo const & physicalDeviceExternalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.handleType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalTensorInfoARM const & physicalDeviceExternalTensorInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalTensorInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalTensorInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalTensorInfoARM.flags ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalTensorInfoARM.pDescription ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalTensorInfoARM.handleType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFaultFeaturesEXT const & physicalDeviceFaultFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFaultFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFaultFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFaultFeaturesEXT.deviceFault ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFaultFeaturesEXT.deviceFaultVendorBinary ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 const & physicalDeviceFeatures2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.features ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties const & physicalDeviceFloatControlsProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.denormBehaviorIndependence ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.roundingModeIndependence ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat64 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFormatPackFeaturesARM const & physicalDeviceFormatPackFeaturesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFormatPackFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFormatPackFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFormatPackFeaturesARM.formatPack ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT const & physicalDeviceFragmentDensityMap2FeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.fragmentDensityMapDeferred ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT const & physicalDeviceFragmentDensityMap2PropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.subsampledLoads ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.subsampledCoarseReconstructionEarlyAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.maxSubsampledArrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.maxDescriptorSetSubsampledSamplers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT const & physicalDeviceFragmentDensityMapFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMap ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMapDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMapNonSubsampledImages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & + physicalDeviceFragmentDensityMapLayeredFeaturesVALVE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapLayeredFeaturesVALVE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapLayeredFeaturesVALVE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapLayeredFeaturesVALVE.fragmentDensityMapLayered ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & + physicalDeviceFragmentDensityMapLayeredPropertiesVALVE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapLayeredPropertiesVALVE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapLayeredPropertiesVALVE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapLayeredPropertiesVALVE.maxFragmentDensityMapLayers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & physicalDeviceFragmentDensityMapOffsetFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesEXT.fragmentDensityMapOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & physicalDeviceFragmentDensityMapOffsetPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesEXT.fragmentDensityOffsetGranularity ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT const & physicalDeviceFragmentDensityMapPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.minFragmentDensityTexelSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.maxFragmentDensityTexelSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.fragmentDensityInvocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & physicalDeviceFragmentShaderBarycentricFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesKHR.fragmentShaderBarycentric ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & + physicalDeviceFragmentShaderBarycentricPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricPropertiesKHR.triStripVertexOrderIndependentOfProvokingVertex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & physicalDeviceFragmentShaderInterlockFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & physicalDeviceFragmentShadingRateEnumsFeaturesNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.fragmentShadingRateEnums ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.supersampleFragmentShadingRates ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.noInvocationFragmentShadingRates ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & physicalDeviceFragmentShadingRateEnumsPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.maxFragmentShadingRateInvocationCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR const & physicalDeviceFragmentShadingRateFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.pipelineFragmentShadingRate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.primitiveFragmentShadingRate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.attachmentFragmentShadingRate ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR const & physicalDeviceFragmentShadingRateKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.sampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.fragmentSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR const & physicalDeviceFragmentShadingRatePropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.minFragmentShadingRateAttachmentTexelSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateAttachmentTexelSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateAttachmentTexelSizeAspectRatio ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.primitiveFragmentShadingRateWithMultipleViewports ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.layeredShadingRateAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateNonTrivialCombinerOps ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentSizeAspectRatio ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateCoverageSamples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateRasterizationSamples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithShaderDepthStencilWrites ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithSampleMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithShaderSampleMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithConservativeRasterization ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithFragmentShaderInterlock ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithCustomSampleLocations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateStrictMultiplyCombiner ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFrameBoundaryFeaturesEXT const & physicalDeviceFrameBoundaryFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFrameBoundaryFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFrameBoundaryFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFrameBoundaryFeaturesEXT.frameBoundary ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeatures const & physicalDeviceGlobalPriorityQueryFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeatures.globalPriorityQuery ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & physicalDeviceGraphicsPipelineLibraryFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryFeaturesEXT.graphicsPipelineLibrary ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & physicalDeviceGraphicsPipelineLibraryPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.graphicsPipelineLibraryFastLinking ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGraphicsPipelineLibraryPropertiesEXT.graphicsPipelineLibraryIndependentInterpolationDecoration ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties const & physicalDeviceGroupProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.physicalDeviceCount ); + for ( size_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.physicalDevices[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.subsetAllocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceHdrVividFeaturesHUAWEI const & physicalDeviceHdrVividFeaturesHUAWEI ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHdrVividFeaturesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHdrVividFeaturesHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHdrVividFeaturesHUAWEI.hdrVivid ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyFeatures const & physicalDeviceHostImageCopyFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyFeatures.hostImageCopy ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyProperties const & physicalDeviceHostImageCopyProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.copySrcLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.pCopySrcLayouts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.copyDstLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.pCopyDstLayouts ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.optimalTilingLayoutUUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostImageCopyProperties.identicalMemoryTypeRequirements ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures const & physicalDeviceHostQueryResetFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.hostQueryReset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties const & physicalDeviceIDProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.pNext ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceUUID[i] ); + } + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.driverUUID[i] ); + } + for ( size_t i = 0; i < VK_LUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceLUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceNodeMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceLUIDValid ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImage2DViewOf3DFeaturesEXT const & physicalDeviceImage2DViewOf3DFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.image2DViewOf3D ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImage2DViewOf3DFeaturesEXT.sampler2DViewOf3D ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceImageAlignmentControlFeaturesMESA const & physicalDeviceImageAlignmentControlFeaturesMESA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageAlignmentControlFeaturesMESA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageAlignmentControlFeaturesMESA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageAlignmentControlFeaturesMESA.imageAlignmentControl ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageAlignmentControlPropertiesMESA const & physicalDeviceImageAlignmentControlPropertiesMESA ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageAlignmentControlPropertiesMESA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageAlignmentControlPropertiesMESA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageAlignmentControlPropertiesMESA.supportedImageAlignmentMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlFeaturesEXT const & physicalDeviceImageCompressionControlFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlFeaturesEXT.imageCompressionControl ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & + physicalDeviceImageCompressionControlSwapchainFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlSwapchainFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlSwapchainFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageCompressionControlSwapchainFeaturesEXT.imageCompressionControlSwapchain ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT const & physicalDeviceImageDrmFormatModifierInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.drmFormatModifier ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.sharingMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.queueFamilyIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.pQueueFamilyIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 const & physicalDeviceImageFormatInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.format ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.type ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.tiling ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.usage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessing2FeaturesQCOM const & physicalDeviceImageProcessing2FeaturesQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessing2FeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessing2FeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessing2FeaturesQCOM.textureBlockMatch2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessing2PropertiesQCOM const & physicalDeviceImageProcessing2PropertiesQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessing2PropertiesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessing2PropertiesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessing2PropertiesQCOM.maxBlockMatchWindow ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingFeaturesQCOM const & physicalDeviceImageProcessingFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.textureSampleWeighted ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.textureBoxFilter ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingFeaturesQCOM.textureBlockMatch ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingPropertiesQCOM const & physicalDeviceImageProcessingPropertiesQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxWeightFilterPhases ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxWeightFilterDimension ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxBlockMatchRegion ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageProcessingPropertiesQCOM.maxBoxFilterBlockSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures const & physicalDeviceImageRobustnessFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.robustImageAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & physicalDeviceImageSlicedViewOf3DFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageSlicedViewOf3DFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageSlicedViewOf3DFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageSlicedViewOf3DFeaturesEXT.imageSlicedViewOf3D ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT const & physicalDeviceImageViewImageFormatInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.imageViewType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT const & physicalDeviceImageViewMinLodFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.minLod ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures const & physicalDeviceImagelessFramebufferFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8Features const & physicalDeviceIndexTypeUint8Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8Features.indexTypeUint8 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV const & physicalDeviceInheritedViewportScissorFeaturesNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.inheritedViewportScissor2D ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures const & physicalDeviceInlineUniformBlockFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.inlineUniformBlock ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.descriptorBindingInlineUniformBlockUpdateAfterBind ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties const & physicalDeviceInlineUniformBlockProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxInlineUniformBlockSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxPerStageDescriptorInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxDescriptorSetInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI const & physicalDeviceInvocationMaskFeaturesHUAWEI ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.invocationMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesKHR const & physicalDeviceLayeredApiPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesKHR.vendorID ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesKHR.deviceID ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesKHR.layeredAPI ); + for ( size_t i = 0; i < VK_MAX_PHYSICAL_DEVICE_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesKHR.deviceName[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesListKHR const & physicalDeviceLayeredApiPropertiesListKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesListKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesListKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesListKHR.layeredApiCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiPropertiesListKHR.pLayeredApis ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits const & physicalDeviceLimits ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension1D ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension2D ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension3D ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimensionCube ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageArrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelBufferElements ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxUniformBufferRange ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxStorageBufferRange ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPushConstantsSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxMemoryAllocationCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerAllocationCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.bufferImageGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sparseAddressSpaceSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxBoundDescriptorSets ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorSampledImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorStorageImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageResources ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetUniformBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetSampledImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputAttributes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputBindings ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputAttributeOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputBindingStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationGenerationLevel ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationPatchSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerVertexInputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerVertexOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerPatchOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlTotalOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationEvaluationInputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationEvaluationOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryShaderInvocations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryInputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryOutputVertices ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryTotalOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentInputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentOutputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentDualSrcAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentCombinedOutputResources ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeSharedMemorySize ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupCount[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupInvocations ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupSize[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subPixelPrecisionBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subTexelPrecisionBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.mipmapPrecisionBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDrawIndexedIndexValue ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDrawIndirectCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerLodBias ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerAnisotropy ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxViewports ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxViewportDimensions[i] ); + } + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.viewportBoundsRange[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.viewportSubPixelBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minMemoryMapAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minUniformBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minStorageBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelGatherOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelGatherOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minInterpolationOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxInterpolationOffset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subPixelInterpolationOffsetBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferWidth ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferHeight ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferLayers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferColorSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferDepthSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferStencilSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferNoAttachmentsSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxColorAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageColorSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageIntegerSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageDepthSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageStencilSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.storageImageSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSampleMaskWords ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.timestampComputeAndGraphics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.timestampPeriod ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxClipDistances ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxCullDistances ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxCombinedClipAndCullDistances ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.discreteQueuePriorities ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.pointSizeRange[i] ); + } + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.lineWidthRange[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.pointSizeGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.lineWidthGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.strictLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.standardSampleLocations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.optimalBufferCopyOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.optimalBufferCopyRowPitchAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.nonCoherentAtomSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties const & physicalDeviceSparseProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard2DBlockShape ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard2DMultisampleBlockShape ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard3DBlockShape ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyAlignedMipSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyNonResidentStrict ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties const & physicalDeviceProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.apiVersion ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.driverVersion ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.vendorID ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceID ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceType ); + for ( size_t i = 0; i < VK_MAX_PHYSICAL_DEVICE_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceName[i] ); + } + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.pipelineCacheUUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.limits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.sparseProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 const & physicalDeviceProperties2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.properties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiVulkanPropertiesKHR const & physicalDeviceLayeredApiVulkanPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiVulkanPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiVulkanPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredApiVulkanPropertiesKHR.properties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredDriverPropertiesMSFT const & physicalDeviceLayeredDriverPropertiesMSFT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredDriverPropertiesMSFT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredDriverPropertiesMSFT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLayeredDriverPropertiesMSFT.underlyingAPI ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyDitheringFeaturesEXT const & physicalDeviceLegacyDitheringFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyDitheringFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyDitheringFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyDitheringFeaturesEXT.legacyDithering ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyVertexAttributesFeaturesEXT const & physicalDeviceLegacyVertexAttributesFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyVertexAttributesFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyVertexAttributesFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyVertexAttributesFeaturesEXT.legacyVertexAttributes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyVertexAttributesPropertiesEXT const & physicalDeviceLegacyVertexAttributesPropertiesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyVertexAttributesPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyVertexAttributesPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLegacyVertexAttributesPropertiesEXT.nativeUnalignedPerformance ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeatures const & physicalDeviceLineRasterizationFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.rectangularLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.bresenhamLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.smoothLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.stippledRectangularLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.stippledBresenhamLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeatures.stippledSmoothLines ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationProperties const & physicalDeviceLineRasterizationProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationProperties.lineSubPixelPrecisionBits ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV const & physicalDeviceLinearColorAttachmentFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.linearColorAttachment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties const & physicalDeviceMaintenance3Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.maxPerSetDescriptors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.maxMemoryAllocationSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features const & physicalDeviceMaintenance4Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.maintenance4 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties const & physicalDeviceMaintenance4Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.maxBufferSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5Features const & physicalDeviceMaintenance5Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Features.maintenance5 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5Properties const & physicalDeviceMaintenance5Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.earlyFragmentMultisampleCoverageAfterSampleCounting ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.earlyFragmentSampleMaskTestBeforeSampleCounting ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.depthStencilSwizzleOneSupport ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.polygonModePointSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.nonStrictSinglePixelWideLinesUseParallelogram ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance5Properties.nonStrictWideLinesUseParallelogram ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6Features const & physicalDeviceMaintenance6Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Features.maintenance6 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6Properties const & physicalDeviceMaintenance6Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Properties.blockTexelViewCompatibleMultipleLayers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Properties.maxCombinedImageSamplerDescriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance6Properties.fragmentShadingRateClampCombinerInputs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance7FeaturesKHR const & physicalDeviceMaintenance7FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7FeaturesKHR.maintenance7 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance7PropertiesKHR const & physicalDeviceMaintenance7PropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.robustFragmentShadingRateAttachmentAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.separateDepthStencilAttachmentAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.maxDescriptorSetTotalUniformBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.maxDescriptorSetTotalStorageBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.maxDescriptorSetTotalBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance7PropertiesKHR.maxDescriptorSetUpdateAfterBindTotalBuffersDynamic ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance8FeaturesKHR const & physicalDeviceMaintenance8FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance8FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance8FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance8FeaturesKHR.maintenance8 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance9FeaturesKHR const & physicalDeviceMaintenance9FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9FeaturesKHR.maintenance9 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance9PropertiesKHR const & physicalDeviceMaintenance9PropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9PropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9PropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9PropertiesKHR.image2DViewOf3DSparse ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance9PropertiesKHR.defaultVertexAttributeValue ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMapMemoryPlacedFeaturesEXT const & physicalDeviceMapMemoryPlacedFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedFeaturesEXT.memoryMapPlaced ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedFeaturesEXT.memoryMapRangePlaced ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedFeaturesEXT.memoryUnmapReserve ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMapMemoryPlacedPropertiesEXT const & physicalDeviceMapMemoryPlacedPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMapMemoryPlacedPropertiesEXT.minPlacedMemoryMapAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT const & physicalDeviceMemoryBudgetPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.pNext ); + for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.heapBudget[i] ); + } + for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.heapUsage[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryDecompressionFeaturesNV const & physicalDeviceMemoryDecompressionFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionFeaturesNV.memoryDecompression ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryDecompressionPropertiesNV const & physicalDeviceMemoryDecompressionPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionPropertiesNV.decompressionMethods ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryDecompressionPropertiesNV.maxDecompressionIndirectCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT const & physicalDeviceMemoryPriorityFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.memoryPriority ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties const & physicalDeviceMemoryProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryTypeCount ); + for ( size_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryTypes[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryHeapCount ); + for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryHeaps[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 const & physicalDeviceMemoryProperties2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.memoryProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesEXT const & physicalDeviceMeshShaderFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.taskShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.meshShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.multiviewMeshShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.primitiveFragmentShadingRateMeshShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesEXT.meshShaderQueries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV const & physicalDeviceMeshShaderFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.taskShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.meshShader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesEXT const & physicalDeviceMeshShaderPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskWorkGroupTotalCount ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskWorkGroupCount[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskWorkGroupInvocations ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskWorkGroupSize[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskPayloadSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskSharedMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxTaskPayloadAndSharedMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshWorkGroupTotalCount ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshWorkGroupCount[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshWorkGroupInvocations ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshWorkGroupSize[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshSharedMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshPayloadAndSharedMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshOutputMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshPayloadAndOutputMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshOutputComponents ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshOutputVertices ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshOutputPrimitives ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshOutputLayers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxMeshMultiviewViewCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.meshOutputPerVertexGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.meshOutputPerPrimitiveGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxPreferredTaskWorkGroupInvocations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.maxPreferredMeshWorkGroupInvocations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.prefersLocalInvocationVertexOutput ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.prefersLocalInvocationPrimitiveOutput ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.prefersCompactVertexOutput ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesEXT.prefersCompactPrimitiveOutput ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV const & physicalDeviceMeshShaderPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxDrawMeshTasksCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskWorkGroupInvocations ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskWorkGroupSize[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskTotalMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskOutputCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshWorkGroupInvocations ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshWorkGroupSize[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshTotalMemorySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshOutputVertices ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshOutputPrimitives ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshMultiviewViewCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.meshOutputPerVertexGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.meshOutputPerPrimitiveGranularity ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT const & physicalDeviceMultiDrawFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.multiDraw ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT const & physicalDeviceMultiDrawPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.maxMultiDrawCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & + physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.multisampledRenderToSingleSampled ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures const & physicalDeviceMultiviewFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiview ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiviewGeometryShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiviewTessellationShader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & + physicalDeviceMultiviewPerViewAttributesPropertiesNVX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.perViewPositionAllComponents ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & + physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.multiviewPerViewRenderAreas ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & physicalDeviceMultiviewPerViewViewportsFeaturesQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewViewportsFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewViewportsFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewViewportsFeaturesQCOM.multiviewPerViewViewports ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties const & physicalDeviceMultiviewProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.maxMultiviewViewCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.maxMultiviewInstanceIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesEXT const & physicalDeviceMutableDescriptorTypeFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesEXT.mutableDescriptorType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceNestedCommandBufferFeaturesEXT const & physicalDeviceNestedCommandBufferFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferFeaturesEXT.nestedCommandBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferFeaturesEXT.nestedCommandBufferRendering ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferFeaturesEXT.nestedCommandBufferSimultaneousUse ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceNestedCommandBufferPropertiesEXT const & physicalDeviceNestedCommandBufferPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNestedCommandBufferPropertiesEXT.maxCommandBufferNestingLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & physicalDeviceNonSeamlessCubeMapFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNonSeamlessCubeMapFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNonSeamlessCubeMapFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceNonSeamlessCubeMapFeaturesEXT.nonSeamlessCubeMap ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpacityMicromapFeaturesEXT const & physicalDeviceOpacityMicromapFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapFeaturesEXT.micromap ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapFeaturesEXT.micromapCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapFeaturesEXT.micromapHostCommands ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpacityMicromapPropertiesEXT const & physicalDeviceOpacityMicromapPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapPropertiesEXT.maxOpacity2StateSubdivisionLevel ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpacityMicromapPropertiesEXT.maxOpacity4StateSubdivisionLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpticalFlowFeaturesNV const & physicalDeviceOpticalFlowFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowFeaturesNV.opticalFlow ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpticalFlowPropertiesNV const & physicalDeviceOpticalFlowPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.supportedOutputGridSizes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.supportedHintGridSizes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.hintSupported ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.costSupported ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.bidirectionalFlowSupported ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.globalFlowSupported ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.minWidth ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.minHeight ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.maxWidth ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.maxHeight ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceOpticalFlowPropertiesNV.maxNumRegionsOfInterest ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT const & physicalDevicePCIBusInfoPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciDomain ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciBus ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciDevice ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciFunction ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & physicalDevicePageableDeviceLocalMemoryFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pageableDeviceLocalMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePartitionedAccelerationStructureFeaturesNV const & + physicalDevicePartitionedAccelerationStructureFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePartitionedAccelerationStructureFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePartitionedAccelerationStructureFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePartitionedAccelerationStructureFeaturesNV.partitionedAccelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePartitionedAccelerationStructurePropertiesNV const & + physicalDevicePartitionedAccelerationStructurePropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePartitionedAccelerationStructurePropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePartitionedAccelerationStructurePropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePartitionedAccelerationStructurePropertiesNV.maxPartitionCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerStageDescriptorSetFeaturesNV const & physicalDevicePerStageDescriptorSetFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerStageDescriptorSetFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerStageDescriptorSetFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerStageDescriptorSetFeaturesNV.perStageDescriptorSet ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerStageDescriptorSetFeaturesNV.dynamicPipelineLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR const & physicalDevicePerformanceQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.performanceCounterQueryPools ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.performanceCounterMultipleQueryPools ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR const & physicalDevicePerformanceQueryPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.allowCommandBufferQueryCopies ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineBinaryFeaturesKHR const & physicalDevicePipelineBinaryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryFeaturesKHR.pipelineBinaries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineBinaryPropertiesKHR const & physicalDevicePipelineBinaryPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.pipelineBinaryInternalCache ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.pipelineBinaryInternalCacheControl ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.pipelineBinaryPrefersInternalCache ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.pipelineBinaryPrecompiledInternalCache ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineBinaryPropertiesKHR.pipelineBinaryCompressedData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & + physicalDevicePipelineCacheIncrementalModeFeaturesSEC ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCacheIncrementalModeFeaturesSEC.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCacheIncrementalModeFeaturesSEC.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCacheIncrementalModeFeaturesSEC.pipelineCacheIncrementalMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures const & physicalDevicePipelineCreationCacheControlFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.pipelineCreationCacheControl ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & + physicalDevicePipelineExecutablePropertiesFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.pipelineExecutableInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & + physicalDevicePipelineLibraryGroupHandlesFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.pipelineLibraryGroupHandles ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineOpacityMicromapFeaturesARM const & physicalDevicePipelineOpacityMicromapFeaturesARM ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineOpacityMicromapFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineOpacityMicromapFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineOpacityMicromapFeaturesARM.pipelineOpacityMicromap ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelinePropertiesFeaturesEXT const & physicalDevicePipelinePropertiesFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelinePropertiesFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelinePropertiesFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelinePropertiesFeaturesEXT.pipelinePropertiesIdentifier ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineProtectedAccessFeatures const & physicalDevicePipelineProtectedAccessFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineProtectedAccessFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineProtectedAccessFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineProtectedAccessFeatures.pipelineProtectedAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessFeatures const & physicalDevicePipelineRobustnessFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessFeatures.pipelineRobustness ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessProperties const & physicalDevicePipelineRobustnessProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessProperties.defaultRobustnessStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessProperties.defaultRobustnessUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessProperties.defaultRobustnessVertexInputs ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineRobustnessProperties.defaultRobustnessImages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties const & physicalDevicePointClippingProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.pointClippingBehavior ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR const & physicalDevicePortabilitySubsetFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.constantAlphaColorBlendFactors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.events ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageViewFormatReinterpretation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageViewFormatSwizzle ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageView2DOn3DImage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.multisampleArrayImage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.mutableComparisonSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.pointPolygons ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.samplerMipLodBias ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.separateStencilMaskRef ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.shaderSampleRateInterpolationFunctions ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.tessellationIsolines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.tessellationPointMode ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.triangleFans ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.vertexAttributeAccessBeyondStride ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR const & physicalDevicePortabilitySubsetPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.minVertexInputBindingStrideAlignment ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentBarrierFeaturesNV const & physicalDevicePresentBarrierFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentBarrierFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentBarrierFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentBarrierFeaturesNV.presentBarrier ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentId2FeaturesKHR const & physicalDevicePresentId2FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentId2FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentId2FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentId2FeaturesKHR.presentId2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR const & physicalDevicePresentIdFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.presentId ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentMeteringFeaturesNV const & physicalDevicePresentMeteringFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentMeteringFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentMeteringFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentMeteringFeaturesNV.presentMetering ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & physicalDevicePresentModeFifoLatestReadyFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentModeFifoLatestReadyFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentModeFifoLatestReadyFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentModeFifoLatestReadyFeaturesKHR.presentModeFifoLatestReady ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWait2FeaturesKHR const & physicalDevicePresentWait2FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWait2FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWait2FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWait2FeaturesKHR.presentWait2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR const & physicalDevicePresentWaitFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.presentWait ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & + physicalDevicePrimitiveTopologyListRestartFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyListRestart ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyPatchListRestart ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & physicalDevicePrimitivesGeneratedQueryFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.primitivesGeneratedQuery ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.primitivesGeneratedQueryWithRasterizerDiscard ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitivesGeneratedQueryFeaturesEXT.primitivesGeneratedQueryWithNonZeroStreams ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures const & physicalDevicePrivateDataFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.privateData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures const & physicalDeviceProtectedMemoryFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.protectedMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties const & physicalDeviceProtectedMemoryProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.protectedNoFault ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT const & physicalDeviceProvokingVertexFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.provokingVertexLast ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.transformFeedbackPreservesProvokingVertex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT const & physicalDeviceProvokingVertexPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.provokingVertexModePerPipeline ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.transformFeedbackPreservesTriangleFanProvokingVertex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorProperties const & physicalDevicePushDescriptorProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorProperties.maxPushDescriptors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & + physicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM.queueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM.engineType ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & physicalDeviceRGBA10X6FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.formatRgba10x6WithoutYCbCrSampler ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & + physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.rasterizationOrderColorAttachmentAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.rasterizationOrderDepthAttachmentAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.rasterizationOrderStencilAttachmentAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRawAccessChainsFeaturesNV const & physicalDeviceRawAccessChainsFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRawAccessChainsFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRawAccessChainsFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRawAccessChainsFeaturesNV.shaderRawAccessChains ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR const & physicalDeviceRayQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.rayQuery ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingInvocationReorderFeaturesNV const & physicalDeviceRayTracingInvocationReorderFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingInvocationReorderFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingInvocationReorderFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingInvocationReorderFeaturesNV.rayTracingInvocationReorder ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingInvocationReorderPropertiesNV const & + physicalDeviceRayTracingInvocationReorderPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingInvocationReorderPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingInvocationReorderPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingInvocationReorderPropertiesNV.rayTracingInvocationReorderReorderingHint ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & + physicalDeviceRayTracingLinearSweptSpheresFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingLinearSweptSpheresFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingLinearSweptSpheresFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingLinearSweptSpheresFeaturesNV.spheres ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingLinearSweptSpheresFeaturesNV.linearSweptSpheres ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & physicalDeviceRayTracingMaintenance1FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.rayTracingMaintenance1 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMaintenance1FeaturesKHR.rayTracingPipelineTraceRaysIndirect2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV const & physicalDeviceRayTracingMotionBlurFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.rayTracingMotionBlur ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.rayTracingMotionBlurPipelineTraceRaysIndirect ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR const & physicalDeviceRayTracingPipelineFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineShaderGroupHandleCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineShaderGroupHandleCaptureReplayMixed ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTraversalPrimitiveCulling ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR const & physicalDeviceRayTracingPipelinePropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayRecursionDepth ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxShaderGroupStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupBaseAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleCaptureReplaySize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayDispatchInvocationCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayHitAttributeSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPositionFetchFeaturesKHR const & physicalDeviceRayTracingPositionFetchFeaturesKHR ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPositionFetchFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPositionFetchFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPositionFetchFeaturesKHR.rayTracingPositionFetch ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV const & physicalDeviceRayTracingPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.shaderGroupHandleSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxRecursionDepth ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxShaderGroupStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.shaderGroupBaseAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxGeometryCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxInstanceCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxTriangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxDescriptorSetAccelerationStructures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingValidationFeaturesNV const & physicalDeviceRayTracingValidationFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingValidationFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingValidationFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingValidationFeaturesNV.rayTracingValidation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & physicalDeviceRelaxedLineRasterizationFeaturesIMG ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRelaxedLineRasterizationFeaturesIMG.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRelaxedLineRasterizationFeaturesIMG.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRelaxedLineRasterizationFeaturesIMG.relaxedLineRasterization ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRenderPassStripedFeaturesARM const & physicalDeviceRenderPassStripedFeaturesARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedFeaturesARM.renderPassStriped ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRenderPassStripedPropertiesARM const & physicalDeviceRenderPassStripedPropertiesARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedPropertiesARM.renderPassStripeGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRenderPassStripedPropertiesARM.maxRenderPassStripes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & physicalDeviceRepresentativeFragmentTestFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.representativeFragmentTest ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesKHR const & physicalDeviceRobustness2FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesKHR.robustBufferAccess2 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesKHR.robustImageAccess2 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesKHR.nullDescriptor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesKHR const & physicalDeviceRobustness2PropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesKHR.robustStorageBufferAccessSizeAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesKHR.robustUniformBufferAccessSizeAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT const & physicalDeviceSampleLocationsPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationSampleCounts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.maxSampleLocationGridSize ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationCoordinateRange[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationSubPixelBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.variableSampleLocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties const & physicalDeviceSamplerFilterMinmaxProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.filterMinmaxSingleComponentFormats ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.filterMinmaxImageComponentMapping ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures const & physicalDeviceSamplerYcbcrConversionFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.samplerYcbcrConversion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures const & physicalDeviceScalarBlockLayoutFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFeaturesARM const & physicalDeviceSchedulingControlsFeaturesARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSchedulingControlsFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSchedulingControlsFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSchedulingControlsFeaturesARM.schedulingControls ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsPropertiesARM const & physicalDeviceSchedulingControlsPropertiesARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSchedulingControlsPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSchedulingControlsPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSchedulingControlsPropertiesARM.schedulingControlsFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & physicalDeviceSeparateDepthStencilLayoutsFeatures ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & physicalDeviceShaderAtomicFloat16VectorFeaturesNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat16VectorFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat16VectorFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat16VectorFeaturesNV.shaderFloat16VectorAtomics ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & physicalDeviceShaderAtomicFloat2FeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat32AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat64AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat32AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat64AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderImageFloat32AtomicMinMax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.sparseImageFloat32AtomicMinMax ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT const & physicalDeviceShaderAtomicFloatFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat32Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat32AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat64Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat64AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat32Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat32AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat64Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat64AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32AtomicAdd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32AtomicAdd ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features const & physicalDeviceShaderAtomicInt64Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.shaderSharedInt64Atomics ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderBfloat16FeaturesKHR const & physicalDeviceShaderBfloat16FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderBfloat16FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderBfloat16FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderBfloat16FeaturesKHR.shaderBFloat16Type ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderBfloat16FeaturesKHR.shaderBFloat16DotProduct ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderBfloat16FeaturesKHR.shaderBFloat16CooperativeMatrix ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR const & physicalDeviceShaderClockFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.shaderDeviceClock ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreBuiltinsFeaturesARM const & physicalDeviceShaderCoreBuiltinsFeaturesARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsFeaturesARM.shaderCoreBuiltins ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreBuiltinsPropertiesARM const & physicalDeviceShaderCoreBuiltinsPropertiesARM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsPropertiesARM.shaderCoreMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsPropertiesARM.shaderCoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreBuiltinsPropertiesARM.shaderWarpsPerCore ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD const & physicalDeviceShaderCoreProperties2AMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.shaderCoreFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.activeComputeUnitCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD const & physicalDeviceShaderCorePropertiesAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.shaderEngineCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.shaderArraysPerEngineCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.computeUnitsPerShaderArray ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.simdPerComputeUnit ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.wavefrontsPerSimd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.wavefrontSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sgprsPerSimd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.minSgprAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.maxSgprAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sgprAllocationGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.vgprsPerSimd ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.minVgprAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.maxVgprAllocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.vgprAllocationGranularity ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesARM const & physicalDeviceShaderCorePropertiesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesARM.pixelRate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesARM.texelRate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesARM.fmaRate ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & + physicalDeviceShaderDemoteToHelperInvocationFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.shaderDemoteToHelperInvocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures const & physicalDeviceShaderDrawParametersFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.shaderDrawParameters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & + physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.shaderEarlyAndLateFragmentTests ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEnqueueFeaturesAMDX const & physicalDeviceShaderEnqueueFeaturesAMDX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueueFeaturesAMDX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueueFeaturesAMDX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueueFeaturesAMDX.shaderEnqueue ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueueFeaturesAMDX.shaderMeshEnqueue ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEnqueuePropertiesAMDX const & physicalDeviceShaderEnqueuePropertiesAMDX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.maxExecutionGraphDepth ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.maxExecutionGraphShaderOutputNodes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.maxExecutionGraphShaderPayloadSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.maxExecutionGraphShaderPayloadCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.executionGraphDispatchAddressAlignment ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.maxExecutionGraphWorkgroupCount[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderEnqueuePropertiesAMDX.maxExecutionGraphWorkgroups ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderExpectAssumeFeatures const & physicalDeviceShaderExpectAssumeFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderExpectAssumeFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderExpectAssumeFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderExpectAssumeFeatures.shaderExpectAssume ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features const & physicalDeviceShaderFloat16Int8Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.shaderFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.shaderInt8 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat8FeaturesEXT const & physicalDeviceShaderFloat8FeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat8FeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat8FeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat8FeaturesEXT.shaderFloat8 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat8FeaturesEXT.shaderFloat8CooperativeMatrix ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloatControls2Features const & physicalDeviceShaderFloatControls2Features ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloatControls2Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloatControls2Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloatControls2Features.shaderFloatControls2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & physicalDeviceShaderImageAtomicInt64FeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.sparseImageInt64Atomics ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV const & physicalDeviceShaderImageFootprintFeaturesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.imageFootprint ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures const & physicalDeviceShaderIntegerDotProductFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.shaderIntegerDotProduct ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties const & physicalDeviceShaderIntegerDotProductProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, + physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & physicalDeviceShaderIntegerFunctions2FeaturesINTEL ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.shaderIntegerFunctions2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & physicalDeviceShaderMaximalReconvergenceFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderMaximalReconvergenceFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderMaximalReconvergenceFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderMaximalReconvergenceFeaturesKHR.shaderMaximalReconvergence ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & physicalDeviceShaderModuleIdentifierFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierFeaturesEXT.shaderModuleIdentifier ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & physicalDeviceShaderModuleIdentifierPropertiesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierPropertiesEXT.pNext ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderModuleIdentifierPropertiesEXT.shaderModuleIdentifierAlgorithmUUID[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderObjectFeaturesEXT const & physicalDeviceShaderObjectFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectFeaturesEXT.shaderObject ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderObjectPropertiesEXT const & physicalDeviceShaderObjectPropertiesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectPropertiesEXT.pNext ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectPropertiesEXT.shaderBinaryUUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderObjectPropertiesEXT.shaderBinaryVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderQuadControlFeaturesKHR const & physicalDeviceShaderQuadControlFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderQuadControlFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderQuadControlFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderQuadControlFeaturesKHR.shaderQuadControl ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & + physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR.shaderRelaxedExtendedInstruction ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & physicalDeviceShaderReplicatedCompositesFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderReplicatedCompositesFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderReplicatedCompositesFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderReplicatedCompositesFeaturesEXT.shaderReplicatedComposites ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV const & physicalDeviceShaderSMBuiltinsFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.shaderSMBuiltins ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV const & physicalDeviceShaderSMBuiltinsPropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.shaderSMCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.shaderWarpsPerSM ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & physicalDeviceShaderSubgroupExtendedTypesFeatures ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupRotateFeatures const & physicalDeviceShaderSubgroupRotateFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupRotateFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupRotateFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupRotateFeatures.shaderSubgroupRotate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupRotateFeatures.shaderSubgroupRotateClustered ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & + physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.shaderSubgroupUniformControlFlow ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures const & physicalDeviceShaderTerminateInvocationFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.shaderTerminateInvocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTileImageFeaturesEXT const & physicalDeviceShaderTileImageFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImageFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImageFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImageFeaturesEXT.shaderTileImageColorReadAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImageFeaturesEXT.shaderTileImageDepthReadAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImageFeaturesEXT.shaderTileImageStencilReadAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTileImagePropertiesEXT const & physicalDeviceShaderTileImagePropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImagePropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImagePropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImagePropertiesEXT.shaderTileImageCoherentReadAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImagePropertiesEXT.shaderTileImageReadSampleFromPixelRateInvocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTileImagePropertiesEXT.shaderTileImageReadFromHelperInvocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV const & physicalDeviceShadingRateImageFeaturesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.shadingRateImage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.shadingRateCoarseSampleOrder ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV const & physicalDeviceShadingRateImagePropertiesNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRateTexelSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRatePaletteSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRateMaxCoarseSamples ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 const & physicalDeviceSparseImageFormatInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.format ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.type ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.samples ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.usage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.tiling ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties const & physicalDeviceSubgroupProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.subgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.supportedStages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.supportedOperations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.quadOperationsInAllStages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures const & physicalDeviceSubgroupSizeControlFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.subgroupSizeControl ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.computeFullSubgroups ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties const & physicalDeviceSubgroupSizeControlProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.minSubgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.maxSubgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.maxComputeWorkgroupSubgroups ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.requiredSubgroupSizeStages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & physicalDeviceSubpassMergeFeedbackFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassMergeFeedbackFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassMergeFeedbackFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassMergeFeedbackFeaturesEXT.subpassMergeFeedback ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI const & physicalDeviceSubpassShadingFeaturesHUAWEI ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.subpassShading ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI const & physicalDeviceSubpassShadingPropertiesHUAWEI ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.maxSubpassShadingWorkgroupSizeAspectRatio ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR const & physicalDeviceSurfaceInfo2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.surface ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSwapchainMaintenance1FeaturesKHR const & physicalDeviceSwapchainMaintenance1FeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSwapchainMaintenance1FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSwapchainMaintenance1FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSwapchainMaintenance1FeaturesKHR.swapchainMaintenance1 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features const & physicalDeviceSynchronization2Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.synchronization2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTensorFeaturesARM const & physicalDeviceTensorFeaturesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.tensorNonPacked ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.shaderTensorAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.shaderStorageTensorArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.shaderStorageTensorArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.descriptorBindingStorageTensorUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorFeaturesARM.tensors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTensorPropertiesARM const & physicalDeviceTensorPropertiesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxTensorDimensionCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxTensorElements ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxPerDimensionTensorElements ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxTensorStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxTensorSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxTensorShaderAccessArrayLength ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxTensorShaderAccessSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxDescriptorSetStorageTensors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxPerStageDescriptorSetStorageTensors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxDescriptorSetUpdateAfterBindStorageTensors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.maxPerStageDescriptorUpdateAfterBindStorageTensors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.shaderStorageTensorArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTensorPropertiesARM.shaderTensorSupportedStages ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & physicalDeviceTexelBufferAlignmentFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties const & physicalDeviceTexelBufferAlignmentProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.storageTexelBufferOffsetAlignmentBytes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.storageTexelBufferOffsetSingleTexelAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.uniformTexelBufferOffsetAlignmentBytes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.uniformTexelBufferOffsetSingleTexelAlignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures const & physicalDeviceTextureCompressionASTCHDRFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.textureCompressionASTC_HDR ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileMemoryHeapFeaturesQCOM const & physicalDeviceTileMemoryHeapFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapFeaturesQCOM.tileMemoryHeap ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileMemoryHeapPropertiesQCOM const & physicalDeviceTileMemoryHeapPropertiesQCOM ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapPropertiesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapPropertiesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapPropertiesQCOM.queueSubmitBoundary ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileMemoryHeapPropertiesQCOM.tileBufferTransfers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTilePropertiesFeaturesQCOM const & physicalDeviceTilePropertiesFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTilePropertiesFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTilePropertiesFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTilePropertiesFeaturesQCOM.tileProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileShadingFeaturesQCOM const & physicalDeviceTileShadingFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShading ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingFragmentStage ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingColorAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingDepthAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingStencilAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingSampledAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingPerTileDraw ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingPerTileDispatch ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingDispatchTile ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingApron ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingAnisotropicApron ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingAtomicOps ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingFeaturesQCOM.tileShadingImageProcessing ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileShadingPropertiesQCOM const & physicalDeviceTileShadingPropertiesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingPropertiesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingPropertiesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingPropertiesQCOM.maxApronSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingPropertiesQCOM.preferNonCoherent ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingPropertiesQCOM.tileGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTileShadingPropertiesQCOM.maxTileShadingRate ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures const & physicalDeviceTimelineSemaphoreFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties const & physicalDeviceTimelineSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.maxTimelineSemaphoreValueDifference ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties const & physicalDeviceToolProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.pNext ); + for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.name[i] ); + } + for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.version[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.purposes ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.description[i] ); + } + for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.layer[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT const & physicalDeviceTransformFeedbackFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.transformFeedback ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.geometryStreams ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT const & physicalDeviceTransformFeedbackPropertiesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackStreams ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackStreamDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferDataStride ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackQueries ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackStreamsLinesTriangles ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackRasterizationStreamSelect ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackDraw ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & physicalDeviceUnifiedImageLayoutsFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUnifiedImageLayoutsFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUnifiedImageLayoutsFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUnifiedImageLayoutsFeaturesKHR.unifiedImageLayouts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUnifiedImageLayoutsFeaturesKHR.unifiedImageLayoutsVideo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures const & physicalDeviceUniformBufferStandardLayoutFeatures ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures const & physicalDeviceVariablePointersFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.variablePointers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeatures const & physicalDeviceVertexAttributeDivisorFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeatures.vertexAttributeInstanceRateDivisor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeatures.vertexAttributeInstanceRateZeroDivisor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorProperties const & physicalDeviceVertexAttributeDivisorProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorProperties.maxVertexAttribDivisor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorProperties.supportsNonZeroFirstInstance ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & physicalDeviceVertexAttributeDivisorPropertiesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.maxVertexAttribDivisor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & physicalDeviceVertexAttributeRobustnessFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeRobustnessFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeRobustnessFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeRobustnessFeaturesEXT.vertexAttributeRobustness ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & physicalDeviceVertexInputDynamicStateFeaturesEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoDecodeVP9FeaturesKHR const & physicalDeviceVideoDecodeVP9FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoDecodeVP9FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoDecodeVP9FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoDecodeVP9FeaturesKHR.videoDecodeVP9 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeAV1FeaturesKHR const & physicalDeviceVideoEncodeAV1FeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeAV1FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeAV1FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeAV1FeaturesKHR.videoEncodeAV1 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & physicalDeviceVideoEncodeIntraRefreshFeaturesKHR ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeIntraRefreshFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeIntraRefreshFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeIntraRefreshFeaturesKHR.videoEncodeIntraRefresh ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR const & videoProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileInfoKHR.videoCodecOperation ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileInfoKHR.chromaSubsampling ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileInfoKHR.lumaBitDepth ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileInfoKHR.chromaBitDepth ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR const & physicalDeviceVideoEncodeQualityLevelInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQualityLevelInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQualityLevelInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQualityLevelInfoKHR.pVideoProfile ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQualityLevelInfoKHR.qualityLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & physicalDeviceVideoEncodeQuantizationMapFeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQuantizationMapFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQuantizationMapFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoEncodeQuantizationMapFeaturesKHR.videoEncodeQuantizationMap ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR const & physicalDeviceVideoFormatInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.imageUsage ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoMaintenance1FeaturesKHR const & physicalDeviceVideoMaintenance1FeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoMaintenance1FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoMaintenance1FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoMaintenance1FeaturesKHR.videoMaintenance1 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoMaintenance2FeaturesKHR const & physicalDeviceVideoMaintenance2FeaturesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoMaintenance2FeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoMaintenance2FeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoMaintenance2FeaturesKHR.videoMaintenance2 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features const & physicalDeviceVulkan11Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storageBuffer16BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.uniformAndStorageBuffer16BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storagePushConstant16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storageInputOutput16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiview ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiviewGeometryShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiviewTessellationShader ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.variablePointersStorageBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.variablePointers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.protectedMemory ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.samplerYcbcrConversion ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.shaderDrawParameters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties const & physicalDeviceVulkan11Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.pNext ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceUUID[i] ); + } + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.driverUUID[i] ); + } + for ( size_t i = 0; i < VK_LUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceLUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceNodeMask ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceLUIDValid ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSupportedStages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSupportedOperations ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupQuadOperationsInAllStages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.pointClippingBehavior ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMultiviewViewCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMultiviewInstanceIndex ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.protectedNoFault ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxPerSetDescriptors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMemoryAllocationSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features const & physicalDeviceVulkan12Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.samplerMirrorClampToEdge ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.drawIndirectCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.storageBuffer8BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.uniformAndStorageBuffer8BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.storagePushConstant8 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderBufferInt64Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSharedInt64Atomics ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInt8 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInputAttachmentArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageImageArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInputAttachmentArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayNonUniformIndexing ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUniformBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingPartiallyBound ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingVariableDescriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.runtimeDescriptorArray ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.samplerFilterMinmax ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.scalarBlockLayout ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.imagelessFramebuffer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.uniformBufferStandardLayout ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.separateDepthStencilLayouts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.hostQueryReset ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.timelineSemaphore ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddress ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddressCaptureReplay ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddressMultiDevice ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModel ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModelDeviceScope ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModelAvailabilityVisibilityChains ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderOutputViewportIndex ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderOutputLayer ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.subgroupBroadcastDynamicId ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties const & physicalDeviceVulkan12Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverID ); + for ( size_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverName[i] ); + } + for ( size_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverInfo[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.conformanceVersion ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.denormBehaviorIndependence ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.roundingModeIndependence ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat16 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat32 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat64 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxUpdateAfterBindDescriptorsInAllPools ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderUniformBufferArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSampledImageArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderStorageBufferArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderStorageImageArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderInputAttachmentArrayNonUniformIndexingNative ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.robustBufferAccessUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.quadDivergentImplicitLod ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSampledImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageUpdateAfterBindResources ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindSamplers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindSampledImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.supportedDepthResolveModes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.supportedStencilResolveModes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.independentResolveNone ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.independentResolve ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.filterMinmaxSingleComponentFormats ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.filterMinmaxImageComponentMapping ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxTimelineSemaphoreValueDifference ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.framebufferIntegerColorSampleCounts ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features const & physicalDeviceVulkan13Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.robustImageAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.inlineUniformBlock ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.pipelineCreationCacheControl ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.privateData ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderTerminateInvocation ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.subgroupSizeControl ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.computeFullSubgroups ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.synchronization2 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.textureCompressionASTC_HDR ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.dynamicRendering ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderIntegerDotProduct ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.maintenance4 ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties const & physicalDeviceVulkan13Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.minSubgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxSubgroupSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxComputeWorkgroupSubgroups ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.requiredSubgroupSizeStages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxInlineUniformBlockSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxPerStageDescriptorInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxDescriptorSetInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxInlineUniformTotalSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitSignedAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.storageTexelBufferOffsetAlignmentBytes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.storageTexelBufferOffsetSingleTexelAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.uniformTexelBufferOffsetAlignmentBytes ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.uniformTexelBufferOffsetSingleTexelAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxBufferSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan14Features const & physicalDeviceVulkan14Features ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.globalPriorityQuery ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.shaderSubgroupRotate ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.shaderSubgroupRotateClustered ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.shaderFloatControls2 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.shaderExpectAssume ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.rectangularLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.bresenhamLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.smoothLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.stippledRectangularLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.stippledBresenhamLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.stippledSmoothLines ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.vertexAttributeInstanceRateDivisor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.vertexAttributeInstanceRateZeroDivisor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.indexTypeUint8 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.dynamicRenderingLocalRead ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.maintenance5 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.maintenance6 ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.pipelineProtectedAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.pipelineRobustness ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.hostImageCopy ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Features.pushDescriptor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan14Properties const & physicalDeviceVulkan14Properties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.lineSubPixelPrecisionBits ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.maxVertexAttribDivisor ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.supportsNonZeroFirstInstance ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.maxPushDescriptors ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.dynamicRenderingLocalReadDepthStencilAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.dynamicRenderingLocalReadMultisampledAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.earlyFragmentMultisampleCoverageAfterSampleCounting ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.earlyFragmentSampleMaskTestBeforeSampleCounting ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.depthStencilSwizzleOneSupport ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.polygonModePointSize ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.nonStrictSinglePixelWideLinesUseParallelogram ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.nonStrictWideLinesUseParallelogram ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.blockTexelViewCompatibleMultipleLayers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.maxCombinedImageSamplerDescriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.fragmentShadingRateClampCombinerInputs ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.defaultRobustnessStorageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.defaultRobustnessUniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.defaultRobustnessVertexInputs ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.defaultRobustnessImages ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.copySrcLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.pCopySrcLayouts ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.copyDstLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.pCopyDstLayouts ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.optimalTilingLayoutUUID[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan14Properties.identicalMemoryTypeRequirements ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures const & physicalDeviceVulkanMemoryModelFeatures ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModelDeviceScope ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModelAvailabilityVisibilityChains ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & + physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayoutScalarBlockLayout ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout8BitAccess ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout16BitAccess ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & physicalDeviceYcbcr2Plane444FormatsFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrDegammaFeaturesQCOM const & physicalDeviceYcbcrDegammaFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrDegammaFeaturesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrDegammaFeaturesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrDegammaFeaturesQCOM.ycbcrDegamma ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT const & physicalDeviceYcbcrImageArraysFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & physicalDeviceZeroInitializeDeviceMemoryFeaturesEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeDeviceMemoryFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeDeviceMemoryFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeDeviceMemoryFeaturesEXT.zeroInitializeDeviceMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & physicalDeviceZeroInitializeWorkgroupMemoryFeatures ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.sType ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.shaderZeroInitializeWorkgroupMemory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR const & pipelineBinaryKeyKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeyKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeyKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeyKHR.keySize ); + for ( size_t i = 0; i < VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeyKHR.key[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryDataKHR const & pipelineBinaryDataKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryDataKHR.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryDataKHR.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryKeysAndDataKHR const & pipelineBinaryKeysAndDataKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeysAndDataKHR.binaryCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeysAndDataKHR.pPipelineBinaryKeys ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryKeysAndDataKHR.pPipelineBinaryData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreateInfoKHR const & pipelineCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreateInfoKHR.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryCreateInfoKHR const & pipelineBinaryCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryCreateInfoKHR.pKeysAndDataInfo ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryCreateInfoKHR.pipeline ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryCreateInfoKHR.pPipelineCreateInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryDataInfoKHR const & pipelineBinaryDataInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryDataInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryDataInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryDataInfoKHR.pipelineBinary ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryHandlesInfoKHR const & pipelineBinaryHandlesInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryHandlesInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryHandlesInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryHandlesInfoKHR.pipelineBinaryCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryHandlesInfoKHR.pPipelineBinaries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineBinaryInfoKHR const & pipelineBinaryInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryInfoKHR.binaryCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineBinaryInfoKHR.pPipelineBinaries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & pipelineCacheCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.initialDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.pInitialData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne const & pipelineCacheHeaderVersionOne ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.headerSize ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.headerVersion ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.vendorID ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.deviceID ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.pipelineCacheUUID[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT const & pipelineColorBlendAdvancedStateCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.srcPremultiplied ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.dstPremultiplied ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.blendOverlap ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT const & pipelineColorWriteCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.attachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.pColorWriteEnables ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD const & pipelineCompilerControlCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.compilerControlFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV const & pipelineCoverageModulationStateCreateInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationTableEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationTableCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.pCoverageModulationTable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV const & pipelineCoverageReductionStateCreateInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.coverageReductionMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV const & pipelineCoverageToColorStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.coverageToColorEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.coverageToColorLocation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreateFlags2CreateInfo const & pipelineCreateFlags2CreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreateFlags2CreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreateFlags2CreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreateFlags2CreateInfo.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback const & pipelineCreationFeedback ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedback.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedback.duration ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo const & pipelineCreationFeedbackCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pPipelineCreationFeedback ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pipelineStageCreationFeedbackCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pPipelineStageCreationFeedbacks ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT const & pipelineDiscardRectangleStateCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.discardRectangleMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.discardRectangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.pDiscardRectangles ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR const & pipelineExecutableInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.pipeline ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.executableIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR const & pipelineExecutableInternalRepresentationKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.pNext ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.name[i] ); + } + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.description[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.isText ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR const & pipelineExecutablePropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.stages ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.name[i] ); + } + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.description[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.subgroupSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentDensityMapLayeredCreateInfoVALVE const & pipelineFragmentDensityMapLayeredCreateInfoVALVE ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentDensityMapLayeredCreateInfoVALVE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentDensityMapLayeredCreateInfoVALVE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentDensityMapLayeredCreateInfoVALVE.maxFragmentDensityMapLayers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV const & pipelineFragmentShadingRateEnumStateCreateInfoNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.shadingRateType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.shadingRate ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.combinerOps[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR const & pipelineFragmentShadingRateStateCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.fragmentSize ); + for ( size_t i = 0; i < 2; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.combinerOps[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineIndirectDeviceAddressInfoNV const & pipelineIndirectDeviceAddressInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineIndirectDeviceAddressInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineIndirectDeviceAddressInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineIndirectDeviceAddressInfoNV.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineIndirectDeviceAddressInfoNV.pipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineInfoKHR const & pipelineInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.pipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & pipelineLayoutCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.setLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pSetLayouts ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pushConstantRangeCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pPushConstantRanges ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelinePropertiesIdentifierEXT const & pipelinePropertiesIdentifierEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelinePropertiesIdentifierEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelinePropertiesIdentifierEXT.pNext ); + for ( size_t i = 0; i < VK_UUID_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, pipelinePropertiesIdentifierEXT.pipelineIdentifier[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT const & pipelineRasterizationConservativeStateCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.conservativeRasterizationMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.extraPrimitiveOverestimationSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT const & pipelineRasterizationDepthClipStateCreateInfoEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.depthClipEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfo const & pipelineRasterizationLineStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfo.lineRasterizationMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfo.stippledLineEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfo.lineStippleFactor ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfo.lineStipplePattern ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT const & + pipelineRasterizationProvokingVertexStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.provokingVertexMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD const & pipelineRasterizationStateRasterizationOrderAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.rasterizationOrder ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT const & pipelineRasterizationStateStreamCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.rasterizationStream ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo const & pipelineRenderingCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.viewMask ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.pColorAttachmentFormats ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.depthAttachmentFormat ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.stencilAttachmentFormat ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV const & pipelineRepresentativeFragmentTestStateCreateInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.representativeFragmentTestEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRobustnessCreateInfo const & pipelineRobustnessCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfo.storageBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfo.uniformBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfo.vertexInputs ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineRobustnessCreateInfo.images ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT const & pipelineSampleLocationsStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sampleLocationsEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sampleLocationsInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageModuleIdentifierCreateInfoEXT const & pipelineShaderStageModuleIdentifierCreateInfoEXT ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.identifierSize ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageModuleIdentifierCreateInfoEXT.pIdentifier ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageNodeCreateInfoAMDX const & pipelineShaderStageNodeCreateInfoAMDX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageNodeCreateInfoAMDX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageNodeCreateInfoAMDX.pNext ); + for ( const char * p = pipelineShaderStageNodeCreateInfoAMDX.pName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageNodeCreateInfoAMDX.index ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo const & pipelineShaderStageRequiredSubgroupSizeCreateInfo ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.requiredSubgroupSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo const & pipelineTessellationDomainOriginStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.domainOrigin ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescription const & vertexInputBindingDivisorDescription ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDivisorDescription.binding ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDivisorDescription.divisor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfo const & pipelineVertexInputDivisorStateCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfo.vertexBindingDivisorCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfo.pVertexBindingDivisors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV const & pipelineViewportCoarseSampleOrderStateCreateInfoNV ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.sampleOrderType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.customSampleOrderCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.pCustomSampleOrders ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClampControlCreateInfoEXT const & pipelineViewportDepthClampControlCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClampControlCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClampControlCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClampControlCreateInfoEXT.depthClampMode ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClampControlCreateInfoEXT.pDepthClampRange ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT const & pipelineViewportDepthClipControlCreateInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.negativeOneToOne ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV const & pipelineViewportExclusiveScissorStateCreateInfoNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.exclusiveScissorCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.pExclusiveScissors ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV const & shadingRatePaletteNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shadingRatePaletteNV.shadingRatePaletteEntryCount ); + VULKAN_HPP_HASH_COMBINE( seed, shadingRatePaletteNV.pShadingRatePaletteEntries ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV const & pipelineViewportShadingRateImageStateCreateInfoNV ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.shadingRateImageEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.viewportCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.pShadingRatePalettes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ViewportSwizzleNV const & viewportSwizzleNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.x ); + VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.y ); + VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.z ); + VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.w ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV const & pipelineViewportSwizzleStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.viewportCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.pViewportSwizzles ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ViewportWScalingNV const & viewportWScalingNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, viewportWScalingNV.xcoeff ); + VULKAN_HPP_HASH_COMBINE( seed, viewportWScalingNV.ycoeff ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV const & pipelineViewportWScalingStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.viewportWScalingEnable ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.viewportCount ); + VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.pViewportWScalings ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_GGP ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP const & presentFrameTokenGGP ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.frameToken ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_GGP*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentId2KHR const & presentId2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentId2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentId2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentId2KHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentId2KHR.pPresentIds ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentIdKHR const & presentIdKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.pPresentIds ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentInfoKHR const & presentInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.waitSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pWaitSemaphores ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pSwapchains ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pImageIndices ); + VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pResults ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RectLayerKHR const & rectLayerKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.offset ); + VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.extent ); + VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.layer ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentRegionKHR const & presentRegionKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentRegionKHR.rectangleCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentRegionKHR.pRectangles ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentRegionsKHR const & presentRegionsKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE const & presentTimeGOOGLE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentTimeGOOGLE.presentID ); + VULKAN_HPP_HASH_COMBINE( seed, presentTimeGOOGLE.desiredPresentTime ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE const & presentTimesInfoGOOGLE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.pTimes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentWait2InfoKHR const & presentWait2InfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, presentWait2InfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, presentWait2InfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, presentWait2InfoKHR.presentId ); + VULKAN_HPP_HASH_COMBINE( seed, presentWait2InfoKHR.timeout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & privateDataSlotCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo const & protectedSubmitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.protectedSubmit ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PushConstantsInfo const & pushConstantsInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.layout ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.offset ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.size ); + VULKAN_HPP_HASH_COMBINE( seed, pushConstantsInfo.pValues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSet const & writeDescriptorSet ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstSet ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstBinding ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstArrayElement ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.descriptorCount ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.descriptorType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pImageInfo ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pBufferInfo ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pTexelBufferView ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo const & pushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.layout ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.set ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.descriptorWriteCount ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetInfo.pDescriptorWrites ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo const & pushDescriptorSetWithTemplateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetWithTemplateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetWithTemplateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetWithTemplateInfo.descriptorUpdateTemplate ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetWithTemplateInfo.layout ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetWithTemplateInfo.set ); + VULKAN_HPP_HASH_COMBINE( seed, pushDescriptorSetWithTemplateInfo.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryLowLatencySupportNV const & queryLowLatencySupportNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queryLowLatencySupportNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queryLowLatencySupportNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queryLowLatencySupportNV.pQueriedLowLatencyData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & queryPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.queryType ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.queryCount ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.pipelineStatistics ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR const & queryPoolPerformanceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.queueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.counterIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.pCounterIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL const & queryPoolPerformanceQueryCreateInfoINTEL ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.performanceCountersSampling ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::QueryPoolVideoEncodeFeedbackCreateInfoKHR const & queryPoolVideoEncodeFeedbackCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queryPoolVideoEncodeFeedbackCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolVideoEncodeFeedbackCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queryPoolVideoEncodeFeedbackCreateInfoKHR.encodeFeedbackFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV const & queueFamilyCheckpointProperties2NV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.checkpointExecutionStageMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV const & queueFamilyCheckpointPropertiesNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.checkpointExecutionStageMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphProcessingEnginePropertiesARM const & queueFamilyDataGraphProcessingEnginePropertiesARM ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphProcessingEnginePropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphProcessingEnginePropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphProcessingEnginePropertiesARM.foreignSemaphoreHandleTypes ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphProcessingEnginePropertiesARM.foreignMemoryHandleTypes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphPropertiesARM const & queueFamilyDataGraphPropertiesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphPropertiesARM.engine ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyDataGraphPropertiesARM.operation ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityProperties const & queueFamilyGlobalPriorityProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityProperties.priorityCount ); + for ( size_t i = 0; i < VK_MAX_GLOBAL_PRIORITY_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityProperties.priorities[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::QueueFamilyOwnershipTransferPropertiesKHR const & queueFamilyOwnershipTransferPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyOwnershipTransferPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyOwnershipTransferPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyOwnershipTransferPropertiesKHR.optimalImageTransferToQueueFamilies ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyProperties const & queueFamilyProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.queueFlags ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.queueCount ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.timestampValidBits ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.minImageTransferGranularity ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 const & queueFamilyProperties2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.queueFamilyProperties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusPropertiesKHR const & queueFamilyQueryResultStatusPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusPropertiesKHR.queryResultStatusSupport ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyVideoPropertiesKHR const & queueFamilyVideoPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyVideoPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyVideoPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, queueFamilyVideoPropertiesKHR.videoCodecOperations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineClusterAccelerationStructureCreateInfoNV const & + rayTracingPipelineClusterAccelerationStructureCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineClusterAccelerationStructureCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineClusterAccelerationStructureCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineClusterAccelerationStructureCreateInfoNV.allowClusterAccelerationStructure ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR const & rayTracingShaderGroupCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.type ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.generalShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.closestHitShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.anyHitShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.intersectionShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.pShaderGroupCaptureReplayHandle ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR const & rayTracingPipelineInterfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.maxPipelineRayPayloadSize ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.maxPipelineRayHitAttributeSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & rayTracingPipelineCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.stageCount ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pStages ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.groupCount ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pGroups ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.maxPipelineRayRecursionDepth ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pLibraryInfo ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pLibraryInterface ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pDynamicState ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.layout ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.basePipelineHandle ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.basePipelineIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV const & rayTracingShaderGroupCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.type ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.generalShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.closestHitShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.anyHitShader ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.intersectionShader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & rayTracingPipelineCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.flags ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.stageCount ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pStages ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.groupCount ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pGroups ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.maxRecursionDepth ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.layout ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.basePipelineHandle ); + VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.basePipelineIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE const & refreshCycleDurationGOOGLE ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, refreshCycleDurationGOOGLE.refreshDuration ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ReleaseCapturedPipelineDataInfoKHR const & releaseCapturedPipelineDataInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, releaseCapturedPipelineDataInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, releaseCapturedPipelineDataInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, releaseCapturedPipelineDataInfoKHR.pipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR const & releaseSwapchainImagesInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, releaseSwapchainImagesInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, releaseSwapchainImagesInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, releaseSwapchainImagesInfoKHR.swapchain ); + VULKAN_HPP_HASH_COMBINE( seed, releaseSwapchainImagesInfoKHR.imageIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, releaseSwapchainImagesInfoKHR.pImageIndices ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo const & renderPassAttachmentBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.attachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.pAttachments ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassBeginInfo const & renderPassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.renderPass ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.framebuffer ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.renderArea ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.clearValueCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.pClearValues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDescription const & subpassDescription ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.flags ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.inputAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pColorAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pResolveAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pDepthStencilAttachment ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.preserveAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pPreserveAttachments ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDependency const & subpassDependency ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcSubpass ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstSubpass ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dependencyFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & renderPassCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.attachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.subpassCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pSubpasses ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.dependencyCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pDependencies ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDescription2 const & subpassDescription2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.flags ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pipelineBindPoint ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.viewMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.inputAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pInputAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pColorAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pResolveAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pDepthStencilAttachment ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.preserveAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pPreserveAttachments ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDependency2 const & subpassDependency2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcSubpass ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstSubpass ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dependencyFlags ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.viewOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & renderPassCreateInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.flags ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.attachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.subpassCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pSubpasses ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.dependencyCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pDependencies ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.correlatedViewMaskCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pCorrelatedViewMasks ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreationControlEXT const & renderPassCreationControlEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationControlEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationControlEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationControlEXT.disallowMerging ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT const & renderPassCreationFeedbackInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackInfoEXT.postMergeSubpassCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackCreateInfoEXT const & renderPassCreationFeedbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassCreationFeedbackCreateInfoEXT.pRenderPassFeedback ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT const & renderPassFragmentDensityMapCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.fragmentDensityMapAttachment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapOffsetEndInfoEXT const & renderPassFragmentDensityMapOffsetEndInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapOffsetEndInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapOffsetEndInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapOffsetEndInfoEXT.fragmentDensityOffsetCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapOffsetEndInfoEXT.pFragmentDensityOffsets ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo const & renderPassInputAttachmentAspectCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.aspectReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.pAspectReferences ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo const & renderPassMultiviewCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.subpassCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pViewMasks ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.dependencyCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pViewOffsets ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.correlationMaskCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pCorrelationMasks ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT const & subpassSampleLocationsEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassSampleLocationsEXT.subpassIndex ); + VULKAN_HPP_HASH_COMBINE( seed, subpassSampleLocationsEXT.sampleLocationsInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT const & renderPassSampleLocationsBeginInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.attachmentInitialSampleLocationsCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pAttachmentInitialSampleLocations ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.postSubpassSampleLocationsCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pPostSubpassSampleLocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassStripeInfoARM const & renderPassStripeInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeInfoARM.stripeArea ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassStripeBeginInfoARM const & renderPassStripeBeginInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeBeginInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeBeginInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeBeginInfoARM.stripeInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeBeginInfoARM.pStripeInfos ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo const & semaphoreSubmitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.value ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.stageMask ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.deviceIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassStripeSubmitInfoARM const & renderPassStripeSubmitInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeSubmitInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeSubmitInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeSubmitInfoARM.stripeSemaphoreInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassStripeSubmitInfoARM.pStripeSemaphoreInfos ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT const & renderPassSubpassFeedbackInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackInfoEXT.subpassMergeStatus ); + for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackInfoEXT.description[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackInfoEXT.postMergeIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackCreateInfoEXT const & renderPassSubpassFeedbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassSubpassFeedbackCreateInfoEXT.pSubpassFeedback ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassTileShadingCreateInfoQCOM const & renderPassTileShadingCreateInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassTileShadingCreateInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassTileShadingCreateInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassTileShadingCreateInfoQCOM.flags ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassTileShadingCreateInfoQCOM.tileApronSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM const & renderPassTransformBeginInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.transform ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingAreaInfo const & renderingAreaInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.viewMask ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.pColorAttachmentFormats ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.depthAttachmentFormat ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAreaInfo.stencilAttachmentFormat ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo const & renderingAttachmentLocationInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingAttachmentLocationInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAttachmentLocationInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAttachmentLocationInfo.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderingAttachmentLocationInfo.pColorAttachmentLocations ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingEndInfoEXT const & renderingEndInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingEndInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingEndInfoEXT.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT const & renderingFragmentDensityMapAttachmentInfoEXT ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.imageView ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.imageLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR const & renderingFragmentShadingRateAttachmentInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.imageView ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.imageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.shadingRateAttachmentTexelSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingInfo const & renderingInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.renderArea ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.layerCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.viewMask ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pColorAttachments ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pDepthAttachment ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pStencilAttachment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo const & renderingInputAttachmentIndexInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, renderingInputAttachmentIndexInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInputAttachmentIndexInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInputAttachmentIndexInfo.colorAttachmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInputAttachmentIndexInfo.pColorAttachmentInputIndices ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInputAttachmentIndexInfo.pDepthInputAttachmentIndex ); + VULKAN_HPP_HASH_COMBINE( seed, renderingInputAttachmentIndexInfo.pStencilInputAttachmentIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ResolveImageInfo2 const & resolveImageInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.srcImage ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.srcImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.dstImage ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.dstImageLayout ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.regionCount ); + VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.pRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::SamplerBlockMatchWindowCreateInfoQCOM const & samplerBlockMatchWindowCreateInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerBlockMatchWindowCreateInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerBlockMatchWindowCreateInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerBlockMatchWindowCreateInfoQCOM.windowExtent ); + VULKAN_HPP_HASH_COMBINE( seed, samplerBlockMatchWindowCreateInfoQCOM.windowCompareMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT const & samplerBorderColorComponentMappingCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.components ); + VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.srgb ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerCaptureDescriptorDataInfoEXT const & samplerCaptureDescriptorDataInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerCaptureDescriptorDataInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCaptureDescriptorDataInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCaptureDescriptorDataInfoEXT.sampler ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & samplerCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.magFilter ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.minFilter ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.mipmapMode ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeU ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeV ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeW ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.mipLodBias ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.anisotropyEnable ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.maxAnisotropy ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.compareEnable ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.compareOp ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.minLod ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.maxLod ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.borderColor ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.unnormalizedCoordinates ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerCubicWeightsCreateInfoQCOM const & samplerCubicWeightsCreateInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerCubicWeightsCreateInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCubicWeightsCreateInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerCubicWeightsCreateInfoQCOM.cubicWeights ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo const & samplerReductionModeCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.reductionMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & samplerYcbcrConversionCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.format ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.ycbcrModel ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.ycbcrRange ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.components ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.xChromaOffset ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.yChromaOffset ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.chromaFilter ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.forceExplicitReconstruction ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties const & samplerYcbcrConversionImageFormatProperties ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.combinedImageSamplerDescriptorCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo const & samplerYcbcrConversionInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.conversion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & samplerYcbcrConversionYcbcrDegammaCreateInfoQCOM ) + const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.enableYDegamma ); + VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.enableCbCrDegamma ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ScreenBufferFormatPropertiesQNX const & screenBufferFormatPropertiesQNX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.format ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.externalFormat ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.screenUsage ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.formatFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.samplerYcbcrConversionComponents ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.suggestedYcbcrModel ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.suggestedYcbcrRange ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.suggestedXChromaOffset ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferFormatPropertiesQNX.suggestedYChromaOffset ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX const & screenBufferPropertiesQNX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, screenBufferPropertiesQNX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferPropertiesQNX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferPropertiesQNX.allocationSize ); + VULKAN_HPP_HASH_COMBINE( seed, screenBufferPropertiesQNX.memoryTypeBits ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & screenSurfaceCreateInfoQNX ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.sType ); + VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.flags ); + VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.context ); + VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.window ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & semaphoreCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR const & semaphoreGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.handleType ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR const & semaphoreGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.handleType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA const & semaphoreGetZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.handleType ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo const & semaphoreSignalInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.semaphore ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.value ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo const & semaphoreTypeCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.semaphoreType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.initialValue ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo const & semaphoreWaitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.semaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pSemaphores ); + VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pValues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SetDescriptorBufferOffsetsInfoEXT const & setDescriptorBufferOffsetsInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.stageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.layout ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.firstSet ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.setCount ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.pBufferIndices ); + VULKAN_HPP_HASH_COMBINE( seed, setDescriptorBufferOffsetsInfoEXT.pOffsets ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SetLatencyMarkerInfoNV const & setLatencyMarkerInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, setLatencyMarkerInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, setLatencyMarkerInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, setLatencyMarkerInfoNV.presentID ); + VULKAN_HPP_HASH_COMBINE( seed, setLatencyMarkerInfoNV.marker ); + return seed; + } + }; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SetPresentConfigNV const & setPresentConfigNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, setPresentConfigNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, setPresentConfigNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, setPresentConfigNV.numFramesPerBatch ); + VULKAN_HPP_HASH_COMBINE( seed, setPresentConfigNV.presentConfigFeedback ); + return seed; + } + }; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV const & setStateFlagsIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, setStateFlagsIndirectCommandNV.data ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderCreateInfoEXT const & shaderCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.stage ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.nextStage ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.codeType ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.codeSize ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.pCode ); + for ( const char * p = shaderCreateInfoEXT.pName; *p != '\0'; ++p ) + { + VULKAN_HPP_HASH_COMBINE( seed, *p ); + } + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.setLayoutCount ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.pSetLayouts ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.pushConstantRangeCount ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.pPushConstantRanges ); + VULKAN_HPP_HASH_COMBINE( seed, shaderCreateInfoEXT.pSpecializationInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & shaderModuleCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.flags ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.codeSize ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.pCode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT const & shaderModuleIdentifierEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.identifierSize ); + for ( size_t i = 0; i < VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleIdentifierEXT.identifier[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT const & shaderModuleValidationCacheCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.validationCache ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD const & shaderResourceUsageAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.numUsedVgprs ); + VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.numUsedSgprs ); + VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.ldsSizePerLocalWorkGroup ); + VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.ldsUsageSizeInBytes ); + VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.scratchMemUsageInBytes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD const & shaderStatisticsInfoAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.shaderStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.resourceUsage ); + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numPhysicalVgprs ); + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numPhysicalSgprs ); + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numAvailableVgprs ); + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numAvailableSgprs ); + for ( size_t i = 0; i < 3; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.computeWorkGroupSize[i] ); + } + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR const & sharedPresentSurfaceCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.sharedPresentSupportedUsageFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties const & sparseImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.aspectMask ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.imageGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 const & sparseImageFormatProperties2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.properties ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements const & sparseImageMemoryRequirements ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.formatProperties ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailFirstLod ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailSize ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailOffset ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailStride ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 const & sparseImageMemoryRequirements2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.memoryRequirements ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_GGP ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & streamDescriptorSurfaceCreateInfoGGP ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.sType ); + VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.flags ); + VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.streamDescriptor ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_GGP*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubmitInfo const & submitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.waitSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pWaitSemaphores ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pWaitDstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.commandBufferCount ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pCommandBuffers ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.signalSemaphoreCount ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pSignalSemaphores ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubmitInfo2 const & submitInfo2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.flags ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.waitSemaphoreInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pWaitSemaphoreInfos ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.commandBufferInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pCommandBufferInfos ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.signalSemaphoreInfoCount ); + VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pSignalSemaphoreInfos ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassBeginInfo const & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.contents ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve const & subpassDescriptionDepthStencilResolve ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.depthResolveMode ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.stencilResolveMode ); + VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.pDepthStencilResolveAttachment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassEndInfo const & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassEndInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassEndInfo.pNext ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassResolvePerformanceQueryEXT const & subpassResolvePerformanceQueryEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassResolvePerformanceQueryEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassResolvePerformanceQueryEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subpassResolvePerformanceQueryEXT.optimal ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI const & subpassShadingPipelineCreateInfoHUAWEI ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.renderPass ); + VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.subpass ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubresourceHostMemcpySize const & subresourceHostMemcpySize ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subresourceHostMemcpySize.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceHostMemcpySize.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceHostMemcpySize.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SubresourceLayout2 const & subresourceLayout2 ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout2.sType ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout2.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout2.subresourceLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT const & surfaceCapabilities2EXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.minImageCount ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageCount ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.currentExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.minImageExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageArrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedTransforms ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.currentTransform ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedCompositeAlpha ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedUsageFlags ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedSurfaceCounters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR const & surfaceCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.minImageCount ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageCount ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.currentExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.minImageExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageArrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedTransforms ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.currentTransform ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedCompositeAlpha ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedUsageFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR const & surfaceCapabilities2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.surfaceCapabilities ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT const & surfaceCapabilitiesFullScreenExclusiveEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.fullScreenExclusiveSupported ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentBarrierNV const & surfaceCapabilitiesPresentBarrierNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentBarrierNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentBarrierNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentBarrierNV.presentBarrierSupported ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentId2KHR const & surfaceCapabilitiesPresentId2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentId2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentId2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentId2KHR.presentId2Supported ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentWait2KHR const & surfaceCapabilitiesPresentWait2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentWait2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentWait2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesPresentWait2KHR.presentWait2Supported ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR const & surfaceFormatKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceFormatKHR.format ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFormatKHR.colorSpace ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR const & surfaceFormat2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.surfaceFormat ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT const & surfaceFullScreenExclusiveInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.fullScreenExclusive ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT const & surfaceFullScreenExclusiveWin32InfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.hmonitor ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfacePresentModeCompatibilityKHR const & surfacePresentModeCompatibilityKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeCompatibilityKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeCompatibilityKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeCompatibilityKHR.presentModeCount ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeCompatibilityKHR.pPresentModes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfacePresentModeKHR const & surfacePresentModeKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentModeKHR.presentMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfacePresentScalingCapabilitiesKHR const & surfacePresentScalingCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.supportedPresentScaling ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.supportedPresentGravityX ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.supportedPresentGravityY ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.minScaledImageExtent ); + VULKAN_HPP_HASH_COMBINE( seed, surfacePresentScalingCapabilitiesKHR.maxScaledImageExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR const & surfaceProtectedCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.supportsProtected ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT const & swapchainCounterCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.surfaceCounters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & swapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.surface ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.minImageCount ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageFormat ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageColorSpace ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageExtent ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageArrayLayers ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageUsage ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageSharingMode ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.queueFamilyIndexCount ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.pQueueFamilyIndices ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.preTransform ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.compositeAlpha ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.presentMode ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.clipped ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.oldSwapchain ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD const & swapchainDisplayNativeHdrCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.localDimmingEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainLatencyCreateInfoNV const & swapchainLatencyCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainLatencyCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainLatencyCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainLatencyCreateInfoNV.latencyModeEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainPresentBarrierCreateInfoNV const & swapchainPresentBarrierCreateInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentBarrierCreateInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentBarrierCreateInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentBarrierCreateInfoNV.presentBarrierEnable ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainPresentFenceInfoKHR const & swapchainPresentFenceInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentFenceInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentFenceInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentFenceInfoKHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentFenceInfoKHR.pFences ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainPresentModeInfoKHR const & swapchainPresentModeInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModeInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModeInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModeInfoKHR.swapchainCount ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModeInfoKHR.pPresentModes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainPresentModesCreateInfoKHR const & swapchainPresentModesCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModesCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModesCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModesCreateInfoKHR.presentModeCount ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentModesCreateInfoKHR.pPresentModes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainPresentScalingCreateInfoKHR const & swapchainPresentScalingCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentScalingCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentScalingCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentScalingCreateInfoKHR.scalingBehavior ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentScalingCreateInfoKHR.presentGravityX ); + VULKAN_HPP_HASH_COMBINE( seed, swapchainPresentScalingCreateInfoKHR.presentGravityY ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorCaptureDescriptorDataInfoARM const & tensorCaptureDescriptorDataInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorCaptureDescriptorDataInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCaptureDescriptorDataInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorCaptureDescriptorDataInfoARM.tensor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorMemoryBarrierARM const & tensorMemoryBarrierARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.srcStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.srcAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.dstStageMask ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.dstAccessMask ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.srcQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.dstQueueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryBarrierARM.tensor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorDependencyInfoARM const & tensorDependencyInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorDependencyInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDependencyInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDependencyInfoARM.tensorMemoryBarrierCount ); + VULKAN_HPP_HASH_COMBINE( seed, tensorDependencyInfoARM.pTensorMemoryBarriers ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorFormatPropertiesARM const & tensorFormatPropertiesARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorFormatPropertiesARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorFormatPropertiesARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorFormatPropertiesARM.optimalTilingTensorFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, tensorFormatPropertiesARM.linearTilingTensorFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM const & tensorMemoryRequirementsInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryRequirementsInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryRequirementsInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorMemoryRequirementsInfoARM.tensor ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::TensorViewCaptureDescriptorDataInfoARM const & tensorViewCaptureDescriptorDataInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCaptureDescriptorDataInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCaptureDescriptorDataInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCaptureDescriptorDataInfoARM.tensorView ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TensorViewCreateInfoARM const & tensorViewCreateInfoARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCreateInfoARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCreateInfoARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCreateInfoARM.flags ); + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCreateInfoARM.tensor ); + VULKAN_HPP_HASH_COMBINE( seed, tensorViewCreateInfoARM.format ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD const & textureLODGatherFormatPropertiesAMD ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.sType ); + VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.supportsTextureGatherLODBiasAMD ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TileMemoryBindInfoQCOM const & tileMemoryBindInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryBindInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryBindInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryBindInfoQCOM.memory ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TileMemoryRequirementsQCOM const & tileMemoryRequirementsQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryRequirementsQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryRequirementsQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryRequirementsQCOM.size ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemoryRequirementsQCOM.alignment ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TileMemorySizeInfoQCOM const & tileMemorySizeInfoQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tileMemorySizeInfoQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemorySizeInfoQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tileMemorySizeInfoQCOM.size ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TilePropertiesQCOM const & tilePropertiesQCOM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.tileSize ); + VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.apronSize ); + VULKAN_HPP_HASH_COMBINE( seed, tilePropertiesQCOM.origin ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo const & timelineSemaphoreSubmitInfo ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.sType ); + VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.waitSemaphoreValueCount ); + VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pWaitSemaphoreValues ); + VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.signalSemaphoreValueCount ); + VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pSignalSemaphoreValues ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommand2KHR const & traceRaysIndirectCommand2KHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.raygenShaderRecordAddress ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.raygenShaderRecordSize ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.missShaderBindingTableAddress ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.missShaderBindingTableSize ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.missShaderBindingTableStride ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.hitShaderBindingTableAddress ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.hitShaderBindingTableSize ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.hitShaderBindingTableStride ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.callableShaderBindingTableAddress ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.callableShaderBindingTableSize ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.callableShaderBindingTableStride ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.width ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.height ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommand2KHR.depth ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR const & traceRaysIndirectCommandKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.width ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.height ); + VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.depth ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & validationCacheCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.flags ); + VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.initialDataSize ); + VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.pInitialData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT const & validationFeaturesEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.enabledValidationFeatureCount ); + VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pEnabledValidationFeatures ); + VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.disabledValidationFeatureCount ); + VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pDisabledValidationFeatures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationFlagsEXT const & validationFlagsEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.disabledValidationCheckCount ); + VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.pDisabledValidationChecks ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT const & vertexInputAttributeDescription2EXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.location ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.binding ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.format ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.offset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT const & vertexInputBindingDescription2EXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.binding ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.stride ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.inputRate ); + VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.divisor ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_VI_NN ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & viSurfaceCreateInfoNN ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.sType ); + VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.flags ); + VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.window ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_VI_NN*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR const & videoPictureResourceInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceInfoKHR.codedOffset ); + VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceInfoKHR.codedExtent ); + VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceInfoKHR.baseArrayLayer ); + VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceInfoKHR.imageViewBinding ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR const & videoReferenceSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotInfoKHR.slotIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotInfoKHR.pPictureResource ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR const & videoBeginCodingInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.videoSession ); + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.videoSessionParameters ); + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.referenceSlotCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.pReferenceSlots ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR const & videoCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minBitstreamBufferSizeAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.pictureAccessGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minCodedExtent ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxCodedExtent ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxDpbSlots ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxActiveReferencePictures ); + VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.stdHeaderVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR const & videoCodingControlInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeAV1CapabilitiesKHR const & videoDecodeAV1CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1CapabilitiesKHR.maxLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeAV1DpbSlotInfoKHR const & videoDecodeAV1DpbSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1DpbSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1DpbSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1DpbSlotInfoKHR.pStdReferenceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeAV1InlineSessionParametersInfoKHR const & videoDecodeAV1InlineSessionParametersInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1InlineSessionParametersInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1InlineSessionParametersInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1InlineSessionParametersInfoKHR.pStdSequenceHeader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeAV1PictureInfoKHR const & videoDecodeAV1PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.pStdPictureInfo ); + for ( size_t i = 0; i < VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.referenceNameSlotIndices[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.frameHeaderOffset ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.tileCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.pTileOffsets ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1PictureInfoKHR.pTileSizes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeAV1ProfileInfoKHR const & videoDecodeAV1ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1ProfileInfoKHR.stdProfile ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1ProfileInfoKHR.filmGrainSupport ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeAV1SessionParametersCreateInfoKHR const & videoDecodeAV1SessionParametersCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1SessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1SessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeAV1SessionParametersCreateInfoKHR.pStdSequenceHeader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeCapabilitiesKHR const & videoDecodeCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeCapabilitiesKHR.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesKHR const & videoDecodeH264CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesKHR.maxLevelIdc ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesKHR.fieldOffsetGranularity ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoKHR const & videoDecodeH264DpbSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoKHR.pStdReferenceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264InlineSessionParametersInfoKHR const & videoDecodeH264InlineSessionParametersInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264InlineSessionParametersInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264InlineSessionParametersInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264InlineSessionParametersInfoKHR.pStdSPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264InlineSessionParametersInfoKHR.pStdPPS ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoKHR const & videoDecodeH264PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoKHR.pStdPictureInfo ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoKHR.sliceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoKHR.pSliceOffsets ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileInfoKHR const & videoDecodeH264ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileInfoKHR.stdProfileIdc ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileInfoKHR.pictureLayout ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoKHR const & videoDecodeH264SessionParametersAddInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoKHR.stdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoKHR.pStdSPSs ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoKHR.stdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoKHR.pStdPPSs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoKHR const & videoDecodeH264SessionParametersCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoKHR.maxStdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoKHR.maxStdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoKHR.pParametersAddInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesKHR const & videoDecodeH265CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesKHR.maxLevelIdc ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoKHR const & videoDecodeH265DpbSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoKHR.pStdReferenceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265InlineSessionParametersInfoKHR const & videoDecodeH265InlineSessionParametersInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265InlineSessionParametersInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265InlineSessionParametersInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265InlineSessionParametersInfoKHR.pStdVPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265InlineSessionParametersInfoKHR.pStdSPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265InlineSessionParametersInfoKHR.pStdPPS ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoKHR const & videoDecodeH265PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoKHR.pStdPictureInfo ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoKHR.sliceSegmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoKHR.pSliceSegmentOffsets ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileInfoKHR const & videoDecodeH265ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileInfoKHR.stdProfileIdc ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoKHR const & videoDecodeH265SessionParametersAddInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.stdVPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.pStdVPSs ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.stdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.pStdSPSs ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.stdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoKHR.pStdPPSs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoKHR const & videoDecodeH265SessionParametersCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoKHR.maxStdVPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoKHR.maxStdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoKHR.maxStdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoKHR.pParametersAddInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR const & videoDecodeInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBufferOffset ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBufferRange ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.dstPictureResource ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pSetupReferenceSlot ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.referenceSlotCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pReferenceSlots ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeUsageInfoKHR const & videoDecodeUsageInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeUsageInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeUsageInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeUsageInfoKHR.videoUsageHints ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeVP9CapabilitiesKHR const & videoDecodeVP9CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9CapabilitiesKHR.maxLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeVP9PictureInfoKHR const & videoDecodeVP9PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.pStdPictureInfo ); + for ( size_t i = 0; i < VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.referenceNameSlotIndices[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.uncompressedHeaderOffset ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.compressedHeaderOffset ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9PictureInfoKHR.tilesOffset ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeVP9ProfileInfoKHR const & videoDecodeVP9ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoDecodeVP9ProfileInfoKHR.stdProfile ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilitiesKHR const & videoEncodeAV1CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxLevel ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.codedPictureAlignment ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxTiles ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.minTileSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxTileSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.superblockSizes ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxSingleReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.singleReferenceNameMask ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxUnidirectionalCompoundReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxUnidirectionalCompoundGroup1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.unidirectionalCompoundReferenceNameMask ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxBidirectionalCompoundReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxBidirectionalCompoundGroup1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxBidirectionalCompoundGroup2ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.bidirectionalCompoundReferenceNameMask ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxTemporalLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxSpatialLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxOperatingPoints ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.minQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.maxQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.prefersGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.requiresGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1CapabilitiesKHR.stdSyntaxFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1DpbSlotInfoKHR const & videoEncodeAV1DpbSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1DpbSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1DpbSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1DpbSlotInfoKHR.pStdReferenceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1FrameSizeKHR const & videoEncodeAV1FrameSizeKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1FrameSizeKHR.intraFrameSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1FrameSizeKHR.predictiveFrameSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1FrameSizeKHR.bipredictiveFrameSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1GopRemainingFrameInfoKHR const & videoEncodeAV1GopRemainingFrameInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1GopRemainingFrameInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1GopRemainingFrameInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1GopRemainingFrameInfoKHR.useGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1GopRemainingFrameInfoKHR.gopRemainingIntra ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1GopRemainingFrameInfoKHR.gopRemainingPredictive ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1GopRemainingFrameInfoKHR.gopRemainingBipredictive ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1PictureInfoKHR const & videoEncodeAV1PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.predictionMode ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.rateControlGroup ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.constantQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.pStdPictureInfo ); + for ( size_t i = 0; i < VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR; ++i ) + { + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.referenceNameSlotIndices[i] ); + } + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.primaryReferenceCdfOnly ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1PictureInfoKHR.generateObuExtensionHeader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1ProfileInfoKHR const & videoEncodeAV1ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1ProfileInfoKHR.stdProfile ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR const & videoEncodeAV1QIndexKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QIndexKHR.intraQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QIndexKHR.predictiveQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QIndexKHR.bipredictiveQIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QualityLevelPropertiesKHR const & videoEncodeAV1QualityLevelPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredRateControlFlags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredGopFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredKeyFramePeriod ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredConsecutiveBipredictiveFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredTemporalLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredConstantQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredMaxSingleReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredSingleReferenceNameMask ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredMaxUnidirectionalCompoundReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredMaxUnidirectionalCompoundGroup1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredUnidirectionalCompoundReferenceNameMask ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredMaxBidirectionalCompoundReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredMaxBidirectionalCompoundGroup1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredMaxBidirectionalCompoundGroup2ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QualityLevelPropertiesKHR.preferredBidirectionalCompoundReferenceNameMask ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QuantizationMapCapabilitiesKHR const & videoEncodeAV1QuantizationMapCapabilitiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QuantizationMapCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QuantizationMapCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QuantizationMapCapabilitiesKHR.minQIndexDelta ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1QuantizationMapCapabilitiesKHR.maxQIndexDelta ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlInfoKHR const & videoEncodeAV1RateControlInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.gopFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.keyFramePeriod ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.consecutiveBipredictiveFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlInfoKHR.temporalLayerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlLayerInfoKHR const & videoEncodeAV1RateControlLayerInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.useMinQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.minQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.useMaxQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.maxQIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.useMaxFrameSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1RateControlLayerInfoKHR.maxFrameSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1SessionCreateInfoKHR const & videoEncodeAV1SessionCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionCreateInfoKHR.useMaxLevel ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionCreateInfoKHR.maxLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeAV1SessionParametersCreateInfoKHR const & videoEncodeAV1SessionParametersCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionParametersCreateInfoKHR.pStdSequenceHeader ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionParametersCreateInfoKHR.pStdDecoderModelInfo ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionParametersCreateInfoKHR.stdOperatingPointCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeAV1SessionParametersCreateInfoKHR.pStdOperatingPoints ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeCapabilitiesKHR const & videoEncodeCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.rateControlModes ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.maxRateControlLayers ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.maxBitrate ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.maxQualityLevels ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.encodeInputPictureGranularity ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeCapabilitiesKHR.supportedEncodeFeedbackFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesKHR const & videoEncodeH264CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxLevelIdc ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxSliceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxPPictureL0ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxBPictureL0ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxL1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxTemporalLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.expectDyadicTemporalLayerPattern ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.minQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.maxQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.prefersGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.requiresGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesKHR.stdSyntaxFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoKHR const & videoEncodeH264DpbSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoKHR.pStdReferenceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeKHR const & videoEncodeH264FrameSizeKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeKHR.frameISize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeKHR.framePSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeKHR.frameBSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264GopRemainingFrameInfoKHR const & videoEncodeH264GopRemainingFrameInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264GopRemainingFrameInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264GopRemainingFrameInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264GopRemainingFrameInfoKHR.useGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264GopRemainingFrameInfoKHR.gopRemainingI ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264GopRemainingFrameInfoKHR.gopRemainingP ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264GopRemainingFrameInfoKHR.gopRemainingB ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceInfoKHR const & videoEncodeH264NaluSliceInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceInfoKHR.constantQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceInfoKHR.pStdSliceHeader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264PictureInfoKHR const & videoEncodeH264PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264PictureInfoKHR.naluSliceEntryCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264PictureInfoKHR.pNaluSliceEntries ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264PictureInfoKHR.pStdPictureInfo ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264PictureInfoKHR.generatePrefixNalu ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileInfoKHR const & videoEncodeH264ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileInfoKHR.stdProfileIdc ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR const & videoEncodeH264QpKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpKHR.qpI ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpKHR.qpP ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpKHR.qpB ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264QualityLevelPropertiesKHR const & videoEncodeH264QualityLevelPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredRateControlFlags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredGopFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredIdrPeriod ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredConsecutiveBFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredTemporalLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredConstantQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredMaxL0ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredMaxL1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QualityLevelPropertiesKHR.preferredStdEntropyCodingModeFlag ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264QuantizationMapCapabilitiesKHR const & videoEncodeH264QuantizationMapCapabilitiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QuantizationMapCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QuantizationMapCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QuantizationMapCapabilitiesKHR.minQpDelta ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QuantizationMapCapabilitiesKHR.maxQpDelta ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoKHR const & videoEncodeH264RateControlInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.gopFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.idrPeriod ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.consecutiveBFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoKHR.temporalLayerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoKHR const & videoEncodeH264RateControlLayerInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.useMinQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.minQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.useMaxQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.maxQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.useMaxFrameSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoKHR.maxFrameSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoKHR const & videoEncodeH264SessionCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoKHR.useMaxLevelIdc ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoKHR.maxLevelIdc ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoKHR const & videoEncodeH264SessionParametersAddInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoKHR.stdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoKHR.pStdSPSs ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoKHR.stdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoKHR.pStdPPSs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoKHR const & videoEncodeH264SessionParametersCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoKHR.maxStdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoKHR.maxStdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoKHR.pParametersAddInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersFeedbackInfoKHR const & videoEncodeH264SessionParametersFeedbackInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersFeedbackInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersFeedbackInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersFeedbackInfoKHR.hasStdSPSOverrides ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersFeedbackInfoKHR.hasStdPPSOverrides ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersGetInfoKHR const & videoEncodeH264SessionParametersGetInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersGetInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersGetInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersGetInfoKHR.writeStdSPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersGetInfoKHR.writeStdPPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersGetInfoKHR.stdSPSId ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersGetInfoKHR.stdPPSId ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesKHR const & videoEncodeH265CapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxLevelIdc ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxSliceSegmentCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxTiles ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.ctbSizes ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.transformBlockSizes ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxPPictureL0ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxBPictureL0ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxL1ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxSubLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.expectDyadicTemporalSubLayerPattern ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.minQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.maxQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.prefersGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.requiresGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesKHR.stdSyntaxFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoKHR const & videoEncodeH265DpbSlotInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoKHR.pStdReferenceInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeKHR const & videoEncodeH265FrameSizeKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeKHR.frameISize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeKHR.framePSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeKHR.frameBSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265GopRemainingFrameInfoKHR const & videoEncodeH265GopRemainingFrameInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265GopRemainingFrameInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265GopRemainingFrameInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265GopRemainingFrameInfoKHR.useGopRemainingFrames ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265GopRemainingFrameInfoKHR.gopRemainingI ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265GopRemainingFrameInfoKHR.gopRemainingP ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265GopRemainingFrameInfoKHR.gopRemainingB ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentInfoKHR const & videoEncodeH265NaluSliceSegmentInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentInfoKHR.constantQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentInfoKHR.pStdSliceSegmentHeader ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265PictureInfoKHR const & videoEncodeH265PictureInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265PictureInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265PictureInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265PictureInfoKHR.naluSliceSegmentEntryCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265PictureInfoKHR.pNaluSliceSegmentEntries ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265PictureInfoKHR.pStdPictureInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileInfoKHR const & videoEncodeH265ProfileInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileInfoKHR.stdProfileIdc ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR const & videoEncodeH265QpKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpKHR.qpI ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpKHR.qpP ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpKHR.qpB ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265QualityLevelPropertiesKHR const & videoEncodeH265QualityLevelPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredRateControlFlags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredGopFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredIdrPeriod ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredConsecutiveBFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredSubLayerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredConstantQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredMaxL0ReferenceCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QualityLevelPropertiesKHR.preferredMaxL1ReferenceCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265QuantizationMapCapabilitiesKHR const & videoEncodeH265QuantizationMapCapabilitiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QuantizationMapCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QuantizationMapCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QuantizationMapCapabilitiesKHR.minQpDelta ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QuantizationMapCapabilitiesKHR.maxQpDelta ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoKHR const & videoEncodeH265RateControlInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.gopFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.idrPeriod ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.consecutiveBFrameCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoKHR.subLayerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoKHR const & videoEncodeH265RateControlLayerInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.useMinQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.minQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.useMaxQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.maxQp ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.useMaxFrameSize ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoKHR.maxFrameSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoKHR const & videoEncodeH265SessionCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoKHR.useMaxLevelIdc ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoKHR.maxLevelIdc ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoKHR const & videoEncodeH265SessionParametersAddInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.stdVPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.pStdVPSs ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.stdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.pStdSPSs ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.stdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoKHR.pStdPPSs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoKHR const & videoEncodeH265SessionParametersCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoKHR.maxStdVPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoKHR.maxStdSPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoKHR.maxStdPPSCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoKHR.pParametersAddInfo ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( + VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersFeedbackInfoKHR const & videoEncodeH265SessionParametersFeedbackInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersFeedbackInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersFeedbackInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersFeedbackInfoKHR.hasStdVPSOverrides ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersFeedbackInfoKHR.hasStdSPSOverrides ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersFeedbackInfoKHR.hasStdPPSOverrides ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersGetInfoKHR const & videoEncodeH265SessionParametersGetInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.writeStdVPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.writeStdSPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.writeStdPPS ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.stdVPSId ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.stdSPSId ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersGetInfoKHR.stdPPSId ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR const & videoEncodeInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBuffer ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBufferOffset ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBufferRange ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.srcPictureResource ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pSetupReferenceSlot ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.referenceSlotCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pReferenceSlots ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.precedingExternallyEncodedBytes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshCapabilitiesKHR const & videoEncodeIntraRefreshCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.intraRefreshModes ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.maxIntraRefreshCycleDuration ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.maxIntraRefreshActiveReferencePictures ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.partitionIndependentIntraRefreshRegions ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshCapabilitiesKHR.nonRectangularIntraRefreshRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshInfoKHR const & videoEncodeIntraRefreshInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshInfoKHR.intraRefreshCycleDuration ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeIntraRefreshInfoKHR.intraRefreshIndex ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelInfoKHR const & videoEncodeQualityLevelInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelInfoKHR.qualityLevel ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR const & videoEncodeQualityLevelPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelPropertiesKHR.preferredRateControlMode ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQualityLevelPropertiesKHR.preferredRateControlLayerCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapCapabilitiesKHR const & videoEncodeQuantizationMapCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapCapabilitiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapCapabilitiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapCapabilitiesKHR.maxQuantizationMapExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapInfoKHR const & videoEncodeQuantizationMapInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapInfoKHR.quantizationMap ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapInfoKHR.quantizationMapExtent ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & + videoEncodeQuantizationMapSessionParametersCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapSessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapSessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeQuantizationMapSessionParametersCreateInfoKHR.quantizationMapTexelSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR const & videoEncodeRateControlLayerInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.averageBitrate ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.maxBitrate ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.frameRateNumerator ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.frameRateDenominator ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR const & videoEncodeRateControlInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.rateControlMode ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.layerCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.pLayers ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.virtualBufferSizeInMs ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.initialVirtualBufferSizeInMs ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeSessionIntraRefreshCreateInfoKHR const & videoEncodeSessionIntraRefreshCreateInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionIntraRefreshCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionIntraRefreshCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionIntraRefreshCreateInfoKHR.intraRefreshMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersFeedbackInfoKHR const & videoEncodeSessionParametersFeedbackInfoKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionParametersFeedbackInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionParametersFeedbackInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionParametersFeedbackInfoKHR.hasOverrides ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR const & videoEncodeSessionParametersGetInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionParametersGetInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionParametersGetInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeSessionParametersGetInfoKHR.videoSessionParameters ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeUsageInfoKHR const & videoEncodeUsageInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeUsageInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeUsageInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeUsageInfoKHR.videoUsageHints ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeUsageInfoKHR.videoContentHints ); + VULKAN_HPP_HASH_COMBINE( seed, videoEncodeUsageInfoKHR.tuningMode ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR const & videoEndCodingInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.flags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoFormatAV1QuantizationMapPropertiesKHR const & videoFormatAV1QuantizationMapPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoFormatAV1QuantizationMapPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatAV1QuantizationMapPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatAV1QuantizationMapPropertiesKHR.compatibleSuperblockSizes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoFormatH265QuantizationMapPropertiesKHR const & videoFormatH265QuantizationMapPropertiesKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoFormatH265QuantizationMapPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatH265QuantizationMapPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatH265QuantizationMapPropertiesKHR.compatibleCtbSizes ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR const & videoFormatPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.format ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.componentMapping ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageCreateFlags ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageType ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageTiling ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.imageUsageFlags ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::VideoFormatQuantizationMapPropertiesKHR const & videoFormatQuantizationMapPropertiesKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoFormatQuantizationMapPropertiesKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatQuantizationMapPropertiesKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoFormatQuantizationMapPropertiesKHR.quantizationMapTexelSize ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoInlineQueryInfoKHR const & videoInlineQueryInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoInlineQueryInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoInlineQueryInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoInlineQueryInfoKHR.queryPool ); + VULKAN_HPP_HASH_COMBINE( seed, videoInlineQueryInfoKHR.firstQuery ); + VULKAN_HPP_HASH_COMBINE( seed, videoInlineQueryInfoKHR.queryCount ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoProfileListInfoKHR const & videoProfileListInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoProfileListInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileListInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileListInfoKHR.profileCount ); + VULKAN_HPP_HASH_COMBINE( seed, videoProfileListInfoKHR.pProfiles ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoReferenceIntraRefreshInfoKHR const & videoReferenceIntraRefreshInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceIntraRefreshInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceIntraRefreshInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoReferenceIntraRefreshInfoKHR.dirtyIntraRefreshRegions ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & videoSessionCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.queueFamilyIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pVideoProfile ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pictureFormat ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxCodedExtent ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.referencePictureFormat ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxDpbSlots ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxActiveReferencePictures ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pStdHeaderVersion ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionMemoryRequirementsKHR const & videoSessionMemoryRequirementsKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoSessionMemoryRequirementsKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionMemoryRequirementsKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionMemoryRequirementsKHR.memoryBindIndex ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionMemoryRequirementsKHR.memoryRequirements ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & videoSessionParametersCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.videoSessionParametersTemplate ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.videoSession ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR const & videoSessionParametersUpdateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.updateSequenceCount ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & waylandSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.display ); + VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.surface ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR const & win32KeyedMutexAcquireReleaseInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.acquireCount ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireSyncs ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireKeys ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireTimeouts ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.releaseCount ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pReleaseSyncs ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pReleaseKeys ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV const & win32KeyedMutexAcquireReleaseInfoNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.acquireCount ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireSyncs ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireKeys ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireTimeoutMilliseconds ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.releaseCount ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pReleaseSyncs ); + VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pReleaseKeys ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & win32SurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.hinstance ); + VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.hwnd ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR const & writeDescriptorSetAccelerationStructureKHR ) const + VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.accelerationStructureCount ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.pAccelerationStructures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t + operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV const & writeDescriptorSetAccelerationStructureNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.accelerationStructureCount ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.pAccelerationStructures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock const & writeDescriptorSetInlineUniformBlock ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.dataSize ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.pData ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetPartitionedAccelerationStructureNV const & + writeDescriptorSetPartitionedAccelerationStructureNV ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetPartitionedAccelerationStructureNV.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetPartitionedAccelerationStructureNV.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetPartitionedAccelerationStructureNV.accelerationStructureCount ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetPartitionedAccelerationStructureNV.pAccelerationStructures ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetTensorARM const & writeDescriptorSetTensorARM ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetTensorARM.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetTensorARM.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetTensorARM.tensorViewCount ); + VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetTensorARM.pTensorViews ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteIndirectExecutionSetPipelineEXT const & writeIndirectExecutionSetPipelineEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetPipelineEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetPipelineEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetPipelineEXT.index ); + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetPipelineEXT.pipeline ); + return seed; + } + }; + + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteIndirectExecutionSetShaderEXT const & writeIndirectExecutionSetShaderEXT ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetShaderEXT.sType ); + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetShaderEXT.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetShaderEXT.index ); + VULKAN_HPP_HASH_COMBINE( seed, writeIndirectExecutionSetShaderEXT.shader ); + return seed; + } + }; + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & xcbSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.connection ); + VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.window ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + template <> + struct hash + { + std::size_t operator()( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & xlibSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT + { + std::size_t seed = 0; + VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.sType ); + VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.pNext ); + VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.flags ); + VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.dpy ); + VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.window ); + return seed; + } + }; +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#endif // 14 <= VULKAN_HPP_CPP_VERSION + +} // namespace std +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hpp_macros.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hpp_macros.hpp new file mode 100644 index 0000000000..6118ef5af3 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_hpp_macros.hpp @@ -0,0 +1,326 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_HPP_MACROS_HPP +#define VULKAN_HPP_MACROS_HPP + +#if defined( _MSVC_LANG ) +# define VULKAN_HPP_CPLUSPLUS _MSVC_LANG +#else +# define VULKAN_HPP_CPLUSPLUS __cplusplus +#endif + +#if 202002L < VULKAN_HPP_CPLUSPLUS +# define VULKAN_HPP_CPP_VERSION 23 +#elif 201703L < VULKAN_HPP_CPLUSPLUS +# define VULKAN_HPP_CPP_VERSION 20 +#elif 201402L < VULKAN_HPP_CPLUSPLUS +# define VULKAN_HPP_CPP_VERSION 17 +#elif 201103L < VULKAN_HPP_CPLUSPLUS +# define VULKAN_HPP_CPP_VERSION 14 +#elif 199711L < VULKAN_HPP_CPLUSPLUS +# define VULKAN_HPP_CPP_VERSION 11 +#else +# error "vulkan.hpp needs at least c++ standard version 11" +#endif + +// include headers holding feature-test macros +#if 20 <= VULKAN_HPP_CPP_VERSION +# include +#else +# include +#endif + +#if defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) +# if !defined( VULKAN_HPP_NO_SMART_HANDLE ) +# define VULKAN_HPP_NO_SMART_HANDLE +# endif +#endif + +#if defined( VULKAN_HPP_NO_CONSTRUCTORS ) +# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) +# define VULKAN_HPP_NO_STRUCT_CONSTRUCTORS +# endif +# if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) +# define VULKAN_HPP_NO_UNION_CONSTRUCTORS +# endif +#endif + +#if defined( VULKAN_HPP_NO_SETTERS ) +# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) +# define VULKAN_HPP_NO_STRUCT_SETTERS +# endif +# if !defined( VULKAN_HPP_NO_UNION_SETTERS ) +# define VULKAN_HPP_NO_UNION_SETTERS +# endif +#endif + +#if !defined( VULKAN_HPP_ASSERT ) +# define VULKAN_HPP_ASSERT assert +#endif + +#if !defined( VULKAN_HPP_ASSERT_ON_RESULT ) +# define VULKAN_HPP_ASSERT_ON_RESULT VULKAN_HPP_ASSERT +#endif + +#if !defined( VULKAN_HPP_STATIC_ASSERT ) +# define VULKAN_HPP_STATIC_ASSERT static_assert +#endif + +#if !defined( VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL ) +# define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1 +#endif + +#if !defined( __has_include ) +# define __has_include( x ) false +#endif + +#if defined( __cpp_lib_three_way_comparison ) && ( 201907 <= __cpp_lib_three_way_comparison ) && __has_include( ) && !defined( VULKAN_HPP_NO_SPACESHIP_OPERATOR ) +# define VULKAN_HPP_HAS_SPACESHIP_OPERATOR +#endif + +#if defined( __cpp_lib_span ) && ( 201803 <= __cpp_lib_span ) +# define VULKAN_HPP_SUPPORT_SPAN +#endif + +#if defined( __cpp_lib_modules ) && !defined( VULKAN_HPP_STD_MODULE ) && defined( VULKAN_HPP_ENABLE_STD_MODULE ) +# define VULKAN_HPP_STD_MODULE std.compat +#endif + +#ifndef VK_USE_64_BIT_PTR_DEFINES +# if defined( __LP64__ ) || defined( _WIN64 ) || ( defined( __x86_64__ ) && !defined( __ILP32__ ) ) || defined( _M_X64 ) || defined( __ia64 ) || \ + defined( _M_IA64 ) || defined( __aarch64__ ) || defined( __powerpc64__ ) || ( defined( __riscv ) && __riscv_xlen == 64 ) +# define VK_USE_64_BIT_PTR_DEFINES 1 +# else +# define VK_USE_64_BIT_PTR_DEFINES 0 +# endif +#endif + +// 32-bit vulkan is not typesafe for non-dispatchable handles, so don't allow copy constructors on this platform by default. +// To enable this feature on 32-bit platforms please #define VULKAN_HPP_TYPESAFE_CONVERSION 1 +// To disable this feature on 64-bit platforms please #define VULKAN_HPP_TYPESAFE_CONVERSION 0 +#if ( VK_USE_64_BIT_PTR_DEFINES == 1 ) +# if !defined( VULKAN_HPP_TYPESAFE_CONVERSION ) +# define VULKAN_HPP_TYPESAFE_CONVERSION 1 +# endif +#endif + +#if defined( __GNUC__ ) +# define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) +#endif + +#if !defined( VULKAN_HPP_HAS_UNRESTRICTED_UNIONS ) +# if defined( __clang__ ) +# if __has_feature( cxx_unrestricted_unions ) +# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS +# endif +# elif defined( __GNUC__ ) +# if 40600 <= GCC_VERSION +# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS +# endif +# elif defined( _MSC_VER ) +# if 1900 <= _MSC_VER +# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS +# endif +# endif +#endif + +#if !defined( VULKAN_HPP_INLINE ) +# if defined( __clang__ ) +# if __has_attribute( always_inline ) +# define VULKAN_HPP_INLINE __attribute__( ( always_inline ) ) __inline__ +# else +# define VULKAN_HPP_INLINE inline +# endif +# elif defined( __GNUC__ ) +# define VULKAN_HPP_INLINE __attribute__( ( always_inline ) ) __inline__ +# elif defined( _MSC_VER ) +# define VULKAN_HPP_INLINE inline +# else +# define VULKAN_HPP_INLINE inline +# endif +#endif + +#if ( VULKAN_HPP_TYPESAFE_CONVERSION == 1 ) +# define VULKAN_HPP_TYPESAFE_EXPLICIT +#else +# define VULKAN_HPP_TYPESAFE_EXPLICIT explicit +#endif + +#if defined( __cpp_constexpr ) +# define VULKAN_HPP_CONSTEXPR constexpr +# if 201304 <= __cpp_constexpr +# define VULKAN_HPP_CONSTEXPR_14 constexpr +# else +# define VULKAN_HPP_CONSTEXPR_14 +# endif +# if ( 201907 <= __cpp_constexpr ) && ( !defined( __GNUC__ ) || ( 110400 < GCC_VERSION ) ) +# define VULKAN_HPP_CONSTEXPR_20 constexpr +# else +# define VULKAN_HPP_CONSTEXPR_20 +# endif +# define VULKAN_HPP_CONST_OR_CONSTEXPR constexpr +#else +# define VULKAN_HPP_CONSTEXPR +# define VULKAN_HPP_CONSTEXPR_14 +# define VULKAN_HPP_CONST_OR_CONSTEXPR const +#endif + +#if !defined( VULKAN_HPP_CONSTEXPR_INLINE ) +# if 201606L <= __cpp_inline_variables +# define VULKAN_HPP_CONSTEXPR_INLINE VULKAN_HPP_CONSTEXPR inline +# else +# define VULKAN_HPP_CONSTEXPR_INLINE VULKAN_HPP_CONSTEXPR +# endif +#endif + +#if !defined( VULKAN_HPP_NOEXCEPT ) +# if defined( _MSC_VER ) && ( _MSC_VER <= 1800 ) +# define VULKAN_HPP_NOEXCEPT +# else +# define VULKAN_HPP_NOEXCEPT noexcept +# define VULKAN_HPP_HAS_NOEXCEPT 1 +# if defined( VULKAN_HPP_NO_EXCEPTIONS ) +# define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS noexcept +# else +# define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS +# endif +# endif +#endif + +#if 14 <= VULKAN_HPP_CPP_VERSION +# define VULKAN_HPP_DEPRECATED( msg ) [[deprecated( msg )]] +#else +# define VULKAN_HPP_DEPRECATED( msg ) +#endif + +#if 17 <= VULKAN_HPP_CPP_VERSION +# define VULKAN_HPP_DEPRECATED_17( msg ) [[deprecated( msg )]] +#else +# define VULKAN_HPP_DEPRECATED_17( msg ) +#endif + +#if ( 17 <= VULKAN_HPP_CPP_VERSION ) && !defined( VULKAN_HPP_NO_NODISCARD_WARNINGS ) +# define VULKAN_HPP_NODISCARD [[nodiscard]] +# if defined( VULKAN_HPP_NO_EXCEPTIONS ) +# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS [[nodiscard]] +# else +# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS +# endif +#else +# define VULKAN_HPP_NODISCARD +# define VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS +#endif + +#if !defined( VULKAN_HPP_NAMESPACE ) +# define VULKAN_HPP_NAMESPACE vk +#endif + +#define VULKAN_HPP_STRINGIFY2( text ) #text +#define VULKAN_HPP_STRINGIFY( text ) VULKAN_HPP_STRINGIFY2( text ) +#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE ) + +#if !defined( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC ) +# if defined( VK_NO_PROTOTYPES ) +# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1 +# else +# define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 0 +# endif +#endif + +#if !defined( VULKAN_HPP_STORAGE_API ) +# if defined( VULKAN_HPP_STORAGE_SHARED ) +# if defined( _MSC_VER ) +# if defined( VULKAN_HPP_STORAGE_SHARED_EXPORT ) +# define VULKAN_HPP_STORAGE_API __declspec( dllexport ) +# else +# define VULKAN_HPP_STORAGE_API __declspec( dllimport ) +# endif +# elif defined( __clang__ ) || defined( __GNUC__ ) +# if defined( VULKAN_HPP_STORAGE_SHARED_EXPORT ) +# define VULKAN_HPP_STORAGE_API __attribute__( ( visibility( "default" ) ) ) +# else +# define VULKAN_HPP_STORAGE_API +# endif +# else +# define VULKAN_HPP_STORAGE_API +# pragma warning Unknown import / export semantics +# endif +# else +# define VULKAN_HPP_STORAGE_API +# endif +#endif + +namespace VULKAN_HPP_NAMESPACE +{ + namespace detail + { + class DispatchLoaderDynamic; + +#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER ) +# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 + extern VULKAN_HPP_STORAGE_API DispatchLoaderDynamic defaultDispatchLoaderDynamic; +# endif +#endif + } // namespace detail +} // namespace VULKAN_HPP_NAMESPACE + +#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER ) +# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 +# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::detail::defaultDispatchLoaderDynamic +# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE \ + namespace VULKAN_HPP_NAMESPACE \ + { \ + namespace detail \ + { \ + VULKAN_HPP_STORAGE_API DispatchLoaderDynamic defaultDispatchLoaderDynamic; \ + } \ + } +# else +# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::detail::getDispatchLoaderStatic() +# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE +# endif +#endif + +#if !defined( VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ) +# if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 +# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderDynamic +# else +# define VULKAN_HPP_DEFAULT_DISPATCHER_TYPE ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderStatic +# endif +#endif + +#if defined( VULKAN_HPP_NO_DEFAULT_DISPATCHER ) +# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT +# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT +# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT +#else +# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT = {} +# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT = nullptr +# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT = VULKAN_HPP_DEFAULT_DISPATCHER +#endif + +#if !defined( VULKAN_HPP_EXPECTED ) && ( 23 <= VULKAN_HPP_CPP_VERSION ) && defined( __cpp_lib_expected ) +# if !( defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) ) +# include +# endif +# define VULKAN_HPP_EXPECTED std::expected +# define VULKAN_HPP_UNEXPECTED std::unexpected +#endif + +#if !defined( VULKAN_HPP_RAII_NAMESPACE ) +# define VULKAN_HPP_RAII_NAMESPACE raii +#endif + +#if defined( VULKAN_HPP_NO_EXCEPTIONS ) && defined( VULKAN_HPP_EXPECTED ) +# define VULKAN_HPP_RAII_NO_EXCEPTIONS +# define VULKAN_HPP_RAII_CREATE_NOEXCEPT noexcept +#else +# define VULKAN_HPP_RAII_CREATE_NOEXCEPT +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ios.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ios.h new file mode 100644 index 0000000000..94feb5fd36 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ios.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_IOS_H_ +#define VULKAN_IOS_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_MVK_ios_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_MVK_ios_surface 1 +#define VK_MVK_IOS_SURFACE_SPEC_VERSION 3 +#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface" +typedef VkFlags VkIOSSurfaceCreateFlagsMVK; +typedef struct VkIOSSurfaceCreateInfoMVK { + VkStructureType sType; + const void* pNext; + VkIOSSurfaceCreateFlagsMVK flags; + const void* pView; +} VkIOSSurfaceCreateInfoMVK; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( + VkInstance instance, + const VkIOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_macos.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_macos.h new file mode 100644 index 0000000000..07b32d60c4 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_macos.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_MACOS_H_ +#define VULKAN_MACOS_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_MVK_macos_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_MVK_macos_surface 1 +#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 3 +#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" +typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; +typedef struct VkMacOSSurfaceCreateInfoMVK { + VkStructureType sType; + const void* pNext; + VkMacOSSurfaceCreateFlagsMVK flags; + const void* pView; +} VkMacOSSurfaceCreateInfoMVK; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( + VkInstance instance, + const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_metal.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_metal.h new file mode 100644 index 0000000000..325c3712ff --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_metal.h @@ -0,0 +1,244 @@ +#ifndef VULKAN_METAL_H_ +#define VULKAN_METAL_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_EXT_metal_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_metal_surface 1 +#ifdef __OBJC__ +@class CAMetalLayer; +#else +typedef void CAMetalLayer; +#endif + +#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1 +#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface" +typedef VkFlags VkMetalSurfaceCreateFlagsEXT; +typedef struct VkMetalSurfaceCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkMetalSurfaceCreateFlagsEXT flags; + const CAMetalLayer* pLayer; +} VkMetalSurfaceCreateInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( + VkInstance instance, + const VkMetalSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + + +// VK_EXT_metal_objects is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_metal_objects 1 +#ifdef __OBJC__ +@protocol MTLDevice; +typedef __unsafe_unretained id MTLDevice_id; +#else +typedef void* MTLDevice_id; +#endif + +#ifdef __OBJC__ +@protocol MTLCommandQueue; +typedef __unsafe_unretained id MTLCommandQueue_id; +#else +typedef void* MTLCommandQueue_id; +#endif + +#ifdef __OBJC__ +@protocol MTLBuffer; +typedef __unsafe_unretained id MTLBuffer_id; +#else +typedef void* MTLBuffer_id; +#endif + +#ifdef __OBJC__ +@protocol MTLTexture; +typedef __unsafe_unretained id MTLTexture_id; +#else +typedef void* MTLTexture_id; +#endif + +typedef struct __IOSurface* IOSurfaceRef; +#ifdef __OBJC__ +@protocol MTLSharedEvent; +typedef __unsafe_unretained id MTLSharedEvent_id; +#else +typedef void* MTLSharedEvent_id; +#endif + +#define VK_EXT_METAL_OBJECTS_SPEC_VERSION 2 +#define VK_EXT_METAL_OBJECTS_EXTENSION_NAME "VK_EXT_metal_objects" + +typedef enum VkExportMetalObjectTypeFlagBitsEXT { + VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT = 0x00000001, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT = 0x00000002, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT = 0x00000004, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT = 0x00000008, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT = 0x00000010, + VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT = 0x00000020, + VK_EXPORT_METAL_OBJECT_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF +} VkExportMetalObjectTypeFlagBitsEXT; +typedef VkFlags VkExportMetalObjectTypeFlagsEXT; +typedef struct VkExportMetalObjectCreateInfoEXT { + VkStructureType sType; + const void* pNext; + VkExportMetalObjectTypeFlagBitsEXT exportObjectType; +} VkExportMetalObjectCreateInfoEXT; + +typedef struct VkExportMetalObjectsInfoEXT { + VkStructureType sType; + const void* pNext; +} VkExportMetalObjectsInfoEXT; + +typedef struct VkExportMetalDeviceInfoEXT { + VkStructureType sType; + const void* pNext; + MTLDevice_id mtlDevice; +} VkExportMetalDeviceInfoEXT; + +typedef struct VkExportMetalCommandQueueInfoEXT { + VkStructureType sType; + const void* pNext; + VkQueue queue; + MTLCommandQueue_id mtlCommandQueue; +} VkExportMetalCommandQueueInfoEXT; + +typedef struct VkExportMetalBufferInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + MTLBuffer_id mtlBuffer; +} VkExportMetalBufferInfoEXT; + +typedef struct VkImportMetalBufferInfoEXT { + VkStructureType sType; + const void* pNext; + MTLBuffer_id mtlBuffer; +} VkImportMetalBufferInfoEXT; + +typedef struct VkExportMetalTextureInfoEXT { + VkStructureType sType; + const void* pNext; + VkImage image; + VkImageView imageView; + VkBufferView bufferView; + VkImageAspectFlagBits plane; + MTLTexture_id mtlTexture; +} VkExportMetalTextureInfoEXT; + +typedef struct VkImportMetalTextureInfoEXT { + VkStructureType sType; + const void* pNext; + VkImageAspectFlagBits plane; + MTLTexture_id mtlTexture; +} VkImportMetalTextureInfoEXT; + +typedef struct VkExportMetalIOSurfaceInfoEXT { + VkStructureType sType; + const void* pNext; + VkImage image; + IOSurfaceRef ioSurface; +} VkExportMetalIOSurfaceInfoEXT; + +typedef struct VkImportMetalIOSurfaceInfoEXT { + VkStructureType sType; + const void* pNext; + IOSurfaceRef ioSurface; +} VkImportMetalIOSurfaceInfoEXT; + +typedef struct VkExportMetalSharedEventInfoEXT { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkEvent event; + MTLSharedEvent_id mtlSharedEvent; +} VkExportMetalSharedEventInfoEXT; + +typedef struct VkImportMetalSharedEventInfoEXT { + VkStructureType sType; + const void* pNext; + MTLSharedEvent_id mtlSharedEvent; +} VkImportMetalSharedEventInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkExportMetalObjectsEXT)(VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT( + VkDevice device, + VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); +#endif +#endif + + +// VK_EXT_external_memory_metal is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_metal 1 +#define VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_METAL_EXTENSION_NAME "VK_EXT_external_memory_metal" +typedef struct VkImportMemoryMetalHandleInfoEXT { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + void* handle; +} VkImportMemoryMetalHandleInfoEXT; + +typedef struct VkMemoryMetalHandlePropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryMetalHandlePropertiesEXT; + +typedef struct VkMemoryGetMetalHandleInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetMetalHandleInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandleEXT)(VkDevice device, const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, void** pHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandlePropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHandle, VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandleEXT( + VkDevice device, + const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, + void** pHandle); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHandle, + VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ohos.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ohos.h new file mode 100644 index 0000000000..443825cf64 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_ohos.h @@ -0,0 +1,53 @@ +#ifndef VULKAN_OHOS_H_ +#define VULKAN_OHOS_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_OHOS_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_OHOS_surface 1 +typedef struct NativeWindow OHNativeWindow; +#define VK_OHOS_SURFACE_SPEC_VERSION 1 +#define VK_OHOS_SURFACE_EXTENSION_NAME "VK_OHOS_surface" +typedef VkFlags VkSurfaceCreateFlagsOHOS; +typedef struct VkOHSurfaceCreateInfoOHOS { + VkStructureType sType; + const void* pNext; + VkSurfaceCreateFlagsOHOS flags; + OHNativeWindow* window; +} VkOHSurfaceCreateInfoOHOS; + +typedef VkOHSurfaceCreateInfoOHOS VkSurfaceCreateInfoOHOS; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateSurfaceOHOS)(VkInstance instance, const VkSurfaceCreateInfoOHOS* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateSurfaceOHOS( + VkInstance instance, + const VkSurfaceCreateInfoOHOS* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_raii.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_raii.hpp new file mode 100644 index 0000000000..a1e6a49e74 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_raii.hpp @@ -0,0 +1,28836 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_RAII_HPP +#define VULKAN_RAII_HPP + +#include +#if !( defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) ) +# include // std::unique_ptr +# include // std::forward +#endif + +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) +namespace VULKAN_HPP_NAMESPACE +{ + namespace VULKAN_HPP_RAII_NAMESPACE + { + namespace detail + { + template + class CreateReturnType + { + public: +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + using Type = VULKAN_HPP_EXPECTED; +# else + using Type = T; +# endif + }; + + using PFN_dummy = void ( * )(); + + class ContextDispatcher : public ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderBase + { + public: + ContextDispatcher( PFN_vkGetInstanceProcAddr getProcAddr ) + : vkGetInstanceProcAddr( getProcAddr ) + //=== VK_VERSION_1_0 === + , vkCreateInstance( PFN_vkCreateInstance( getProcAddr( NULL, "vkCreateInstance" ) ) ) + , vkEnumerateInstanceExtensionProperties( + PFN_vkEnumerateInstanceExtensionProperties( getProcAddr( NULL, "vkEnumerateInstanceExtensionProperties" ) ) ) + , vkEnumerateInstanceLayerProperties( PFN_vkEnumerateInstanceLayerProperties( getProcAddr( NULL, "vkEnumerateInstanceLayerProperties" ) ) ) + //=== VK_VERSION_1_1 === + , vkEnumerateInstanceVersion( PFN_vkEnumerateInstanceVersion( getProcAddr( NULL, "vkEnumerateInstanceVersion" ) ) ) + { + } + + public: + PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; + + //=== VK_VERSION_1_0 === + PFN_vkCreateInstance vkCreateInstance = 0; + PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = 0; + PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = 0; + + //=== VK_VERSION_1_1 === + PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = 0; + }; + + class InstanceDispatcher : public ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderBase + { + public: + InstanceDispatcher( PFN_vkGetInstanceProcAddr getProcAddr, VkInstance instance ) : vkGetInstanceProcAddr( getProcAddr ) + { + //=== VK_VERSION_1_0 === + vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) ); + vkEnumeratePhysicalDevices = PFN_vkEnumeratePhysicalDevices( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" ) ); + vkGetPhysicalDeviceFeatures = PFN_vkGetPhysicalDeviceFeatures( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" ) ); + vkGetPhysicalDeviceFormatProperties = + PFN_vkGetPhysicalDeviceFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" ) ); + vkGetPhysicalDeviceImageFormatProperties = + PFN_vkGetPhysicalDeviceImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" ) ); + vkGetPhysicalDeviceProperties = PFN_vkGetPhysicalDeviceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" ) ); + vkGetPhysicalDeviceQueueFamilyProperties = + PFN_vkGetPhysicalDeviceQueueFamilyProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) ); + vkGetPhysicalDeviceMemoryProperties = + PFN_vkGetPhysicalDeviceMemoryProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) ); + vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) ); + vkEnumerateDeviceExtensionProperties = + PFN_vkEnumerateDeviceExtensionProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) ); + vkEnumerateDeviceLayerProperties = PFN_vkEnumerateDeviceLayerProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceLayerProperties" ) ); + vkGetPhysicalDeviceSparseImageFormatProperties = + PFN_vkGetPhysicalDeviceSparseImageFormatProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" ) ); + + //=== VK_VERSION_1_1 === + vkEnumeratePhysicalDeviceGroups = PFN_vkEnumeratePhysicalDeviceGroups( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroups" ) ); + vkGetPhysicalDeviceFeatures2 = PFN_vkGetPhysicalDeviceFeatures2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2" ) ); + vkGetPhysicalDeviceProperties2 = PFN_vkGetPhysicalDeviceProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2" ) ); + vkGetPhysicalDeviceFormatProperties2 = + PFN_vkGetPhysicalDeviceFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2" ) ); + vkGetPhysicalDeviceImageFormatProperties2 = + PFN_vkGetPhysicalDeviceImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2" ) ); + vkGetPhysicalDeviceQueueFamilyProperties2 = + PFN_vkGetPhysicalDeviceQueueFamilyProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2" ) ); + vkGetPhysicalDeviceMemoryProperties2 = + PFN_vkGetPhysicalDeviceMemoryProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2" ) ); + vkGetPhysicalDeviceSparseImageFormatProperties2 = + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2" ) ); + vkGetPhysicalDeviceExternalBufferProperties = + PFN_vkGetPhysicalDeviceExternalBufferProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferProperties" ) ); + vkGetPhysicalDeviceExternalFenceProperties = + PFN_vkGetPhysicalDeviceExternalFenceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFenceProperties" ) ); + vkGetPhysicalDeviceExternalSemaphoreProperties = + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) ); + + //=== VK_VERSION_1_3 === + vkGetPhysicalDeviceToolProperties = PFN_vkGetPhysicalDeviceToolProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolProperties" ) ); + + //=== VK_KHR_surface === + vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) ); + vkGetPhysicalDeviceSurfaceSupportKHR = + PFN_vkGetPhysicalDeviceSurfaceSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceSupportKHR" ) ); + vkGetPhysicalDeviceSurfaceCapabilitiesKHR = + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ) ); + vkGetPhysicalDeviceSurfaceFormatsKHR = + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" ) ); + vkGetPhysicalDeviceSurfacePresentModesKHR = + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" ) ); + + //=== VK_KHR_swapchain === + vkGetPhysicalDevicePresentRectanglesKHR = + PFN_vkGetPhysicalDevicePresentRectanglesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHR" ) ); + + //=== VK_KHR_display === + vkGetPhysicalDeviceDisplayPropertiesKHR = + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPropertiesKHR" ) ); + vkGetPhysicalDeviceDisplayPlanePropertiesKHR = + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" ) ); + vkGetDisplayPlaneSupportedDisplaysKHR = + PFN_vkGetDisplayPlaneSupportedDisplaysKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" ) ); + vkGetDisplayModePropertiesKHR = PFN_vkGetDisplayModePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" ) ); + vkCreateDisplayModeKHR = PFN_vkCreateDisplayModeKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" ) ); + vkGetDisplayPlaneCapabilitiesKHR = PFN_vkGetDisplayPlaneCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" ) ); + vkCreateDisplayPlaneSurfaceKHR = PFN_vkCreateDisplayPlaneSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" ) ); + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + vkCreateXlibSurfaceKHR = PFN_vkCreateXlibSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" ) ); + vkGetPhysicalDeviceXlibPresentationSupportKHR = + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" ) ); +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + vkCreateXcbSurfaceKHR = PFN_vkCreateXcbSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" ) ); + vkGetPhysicalDeviceXcbPresentationSupportKHR = + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" ) ); +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + vkCreateWaylandSurfaceKHR = PFN_vkCreateWaylandSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" ) ); + vkGetPhysicalDeviceWaylandPresentationSupportKHR = + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" ) ); +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + vkCreateAndroidSurfaceKHR = PFN_vkCreateAndroidSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" ) ); +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + vkCreateWin32SurfaceKHR = PFN_vkCreateWin32SurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" ) ); + vkGetPhysicalDeviceWin32PresentationSupportKHR = + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + vkCreateDebugReportCallbackEXT = PFN_vkCreateDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" ) ); + vkDestroyDebugReportCallbackEXT = PFN_vkDestroyDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" ) ); + vkDebugReportMessageEXT = PFN_vkDebugReportMessageEXT( vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" ) ); + + //=== VK_KHR_video_queue === + vkGetPhysicalDeviceVideoCapabilitiesKHR = + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR" ) ); + vkGetPhysicalDeviceVideoFormatPropertiesKHR = + PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR" ) ); + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + vkCreateStreamDescriptorSurfaceGGP = + PFN_vkCreateStreamDescriptorSurfaceGGP( vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" ) ); +# endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + vkGetPhysicalDeviceExternalImageFormatPropertiesNV = + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" ) ); + + //=== VK_KHR_get_physical_device_properties2 === + vkGetPhysicalDeviceFeatures2KHR = PFN_vkGetPhysicalDeviceFeatures2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2KHR" ) ); + if ( !vkGetPhysicalDeviceFeatures2 ) + vkGetPhysicalDeviceFeatures2 = vkGetPhysicalDeviceFeatures2KHR; + vkGetPhysicalDeviceProperties2KHR = PFN_vkGetPhysicalDeviceProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceProperties2 ) + vkGetPhysicalDeviceProperties2 = vkGetPhysicalDeviceProperties2KHR; + vkGetPhysicalDeviceFormatProperties2KHR = + PFN_vkGetPhysicalDeviceFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceFormatProperties2 ) + vkGetPhysicalDeviceFormatProperties2 = vkGetPhysicalDeviceFormatProperties2KHR; + vkGetPhysicalDeviceImageFormatProperties2KHR = + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceImageFormatProperties2 ) + vkGetPhysicalDeviceImageFormatProperties2 = vkGetPhysicalDeviceImageFormatProperties2KHR; + vkGetPhysicalDeviceQueueFamilyProperties2KHR = + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceQueueFamilyProperties2 ) + vkGetPhysicalDeviceQueueFamilyProperties2 = vkGetPhysicalDeviceQueueFamilyProperties2KHR; + vkGetPhysicalDeviceMemoryProperties2KHR = + PFN_vkGetPhysicalDeviceMemoryProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceMemoryProperties2 ) + vkGetPhysicalDeviceMemoryProperties2 = vkGetPhysicalDeviceMemoryProperties2KHR; + vkGetPhysicalDeviceSparseImageFormatProperties2KHR = + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceSparseImageFormatProperties2 ) + vkGetPhysicalDeviceSparseImageFormatProperties2 = vkGetPhysicalDeviceSparseImageFormatProperties2KHR; + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + vkCreateViSurfaceNN = PFN_vkCreateViSurfaceNN( vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" ) ); +# endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_device_group_creation === + vkEnumeratePhysicalDeviceGroupsKHR = + PFN_vkEnumeratePhysicalDeviceGroupsKHR( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroupsKHR" ) ); + if ( !vkEnumeratePhysicalDeviceGroups ) + vkEnumeratePhysicalDeviceGroups = vkEnumeratePhysicalDeviceGroupsKHR; + + //=== VK_KHR_external_memory_capabilities === + vkGetPhysicalDeviceExternalBufferPropertiesKHR = + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalBufferProperties ) + vkGetPhysicalDeviceExternalBufferProperties = vkGetPhysicalDeviceExternalBufferPropertiesKHR; + + //=== VK_KHR_external_semaphore_capabilities === + vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalSemaphoreProperties ) + vkGetPhysicalDeviceExternalSemaphoreProperties = vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; + + //=== VK_EXT_direct_mode_display === + vkReleaseDisplayEXT = PFN_vkReleaseDisplayEXT( vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" ) ); + +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + vkAcquireXlibDisplayEXT = PFN_vkAcquireXlibDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" ) ); + vkGetRandROutputDisplayEXT = PFN_vkGetRandROutputDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" ) ); +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + vkGetPhysicalDeviceSurfaceCapabilities2EXT = + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" ) ); + + //=== VK_KHR_external_fence_capabilities === + vkGetPhysicalDeviceExternalFencePropertiesKHR = + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalFenceProperties ) + vkGetPhysicalDeviceExternalFenceProperties = vkGetPhysicalDeviceExternalFencePropertiesKHR; + + //=== VK_KHR_performance_query === + vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR" ) ); + vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR" ) ); + + //=== VK_KHR_get_surface_capabilities2 === + vkGetPhysicalDeviceSurfaceCapabilities2KHR = + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR" ) ); + vkGetPhysicalDeviceSurfaceFormats2KHR = + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormats2KHR" ) ); + + //=== VK_KHR_get_display_properties2 === + vkGetPhysicalDeviceDisplayProperties2KHR = + PFN_vkGetPhysicalDeviceDisplayProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayProperties2KHR" ) ); + vkGetPhysicalDeviceDisplayPlaneProperties2KHR = + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" ) ); + vkGetDisplayModeProperties2KHR = PFN_vkGetDisplayModeProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModeProperties2KHR" ) ); + vkGetDisplayPlaneCapabilities2KHR = PFN_vkGetDisplayPlaneCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilities2KHR" ) ); + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + vkCreateIOSSurfaceMVK = PFN_vkCreateIOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" ) ); +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + vkCreateMacOSSurfaceMVK = PFN_vkCreateMacOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" ) ); +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + vkCreateDebugUtilsMessengerEXT = PFN_vkCreateDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugUtilsMessengerEXT" ) ); + vkDestroyDebugUtilsMessengerEXT = PFN_vkDestroyDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugUtilsMessengerEXT" ) ); + vkSubmitDebugUtilsMessageEXT = PFN_vkSubmitDebugUtilsMessageEXT( vkGetInstanceProcAddr( instance, "vkSubmitDebugUtilsMessageEXT" ) ); + + //=== VK_EXT_sample_locations === + vkGetPhysicalDeviceMultisamplePropertiesEXT = + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" ) ); + + //=== VK_EXT_calibrated_timestamps === + vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" ) ); + if ( !vkGetPhysicalDeviceCalibrateableTimeDomainsKHR ) + vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + vkCreateImagePipeSurfaceFUCHSIA = PFN_vkCreateImagePipeSurfaceFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + vkCreateMetalSurfaceEXT = PFN_vkCreateMetalSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" ) ); +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + vkGetPhysicalDeviceFragmentShadingRatesKHR = + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR" ) ); + + //=== VK_EXT_tooling_info === + vkGetPhysicalDeviceToolPropertiesEXT = + PFN_vkGetPhysicalDeviceToolPropertiesEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) ); + if ( !vkGetPhysicalDeviceToolProperties ) + vkGetPhysicalDeviceToolProperties = vkGetPhysicalDeviceToolPropertiesEXT; + + //=== VK_NV_cooperative_matrix === + vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV" ) ); + + //=== VK_NV_coverage_reduction_mode === + vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + vkGetPhysicalDeviceSurfacePresentModes2EXT = + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + vkCreateHeadlessSurfaceEXT = PFN_vkCreateHeadlessSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateHeadlessSurfaceEXT" ) ); + + //=== VK_EXT_acquire_drm_display === + vkAcquireDrmDisplayEXT = PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) ); + vkGetDrmDisplayEXT = PFN_vkGetDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetDrmDisplayEXT" ) ); + + //=== VK_KHR_video_encode_queue === + vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + vkAcquireWinrtDisplayNV = PFN_vkAcquireWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkAcquireWinrtDisplayNV" ) ); + vkGetWinrtDisplayNV = PFN_vkGetWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkGetWinrtDisplayNV" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + vkCreateDirectFBSurfaceEXT = PFN_vkCreateDirectFBSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" ) ); + vkGetPhysicalDeviceDirectFBPresentationSupportEXT = + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" ) ); +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + vkCreateScreenSurfaceQNX = PFN_vkCreateScreenSurfaceQNX( vkGetInstanceProcAddr( instance, "vkCreateScreenSurfaceQNX" ) ); + vkGetPhysicalDeviceScreenPresentationSupportQNX = + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX" ) ); +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_ARM_tensors === + vkGetPhysicalDeviceExternalTensorPropertiesARM = + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalTensorPropertiesARM" ) ); + + //=== VK_NV_optical_flow === + vkGetPhysicalDeviceOpticalFlowImageFormatsNV = + PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV" ) ); + + //=== VK_NV_cooperative_vector === + vkGetPhysicalDeviceCooperativeVectorPropertiesNV = + PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV" ) ); + + //=== VK_KHR_cooperative_matrix === + vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR" ) ); + + //=== VK_ARM_data_graph === + vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM" ) ); + vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM" ) ); + + //=== VK_KHR_calibrated_timestamps === + vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR" ) ); + +# if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + vkCreateSurfaceOHOS = PFN_vkCreateSurfaceOHOS( vkGetInstanceProcAddr( instance, "vkCreateSurfaceOHOS" ) ); +# endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV" ) ); + + vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) ); + } + + public: + //=== VK_VERSION_1_0 === + PFN_vkDestroyInstance vkDestroyInstance = 0; + PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; + PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; + PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; + PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; + PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; + PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; + PFN_vkCreateDevice vkCreateDevice = 0; + PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; + PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = 0; + + //=== VK_VERSION_1_1 === + PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = 0; + PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = 0; + PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = 0; + PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = 0; + PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = 0; + PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0; + + //=== VK_VERSION_1_3 === + PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties = 0; + + //=== VK_KHR_surface === + PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = 0; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = 0; + + //=== VK_KHR_swapchain === + PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = 0; + + //=== VK_KHR_display === + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = 0; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 0; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = 0; + PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = 0; + PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = 0; + PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = 0; + PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = 0; + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = 0; + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = 0; +# else + PFN_dummy vkCreateXlibSurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceXlibPresentationSupportKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = 0; + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = 0; +# else + PFN_dummy vkCreateXcbSurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceXcbPresentationSupportKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = 0; + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = 0; +# else + PFN_dummy vkCreateWaylandSurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceWaylandPresentationSupportKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0; +# else + PFN_dummy vkCreateAndroidSurfaceKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = 0; + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = 0; +# else + PFN_dummy vkCreateWin32SurfaceKHR_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceWin32PresentationSupportKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = 0; + PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = 0; + PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = 0; + + //=== VK_KHR_video_queue === + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR = 0; + PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR = 0; + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0; +# else + PFN_dummy vkCreateStreamDescriptorSurfaceGGP_placeholder = 0; +# endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 0; + + //=== VK_KHR_get_physical_device_properties2 === + PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; + PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; + PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; + PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN = 0; +# else + PFN_dummy vkCreateViSurfaceNN_placeholder = 0; +# endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_device_group_creation === + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = 0; + + //=== VK_KHR_external_memory_capabilities === + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR = 0; + + //=== VK_KHR_external_semaphore_capabilities === + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 0; + + //=== VK_EXT_direct_mode_display === + PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT = 0; + +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT = 0; + PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT = 0; +# else + PFN_dummy vkAcquireXlibDisplayEXT_placeholder = 0; + PFN_dummy vkGetRandROutputDisplayEXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT = 0; + + //=== VK_KHR_external_fence_capabilities === + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR = 0; + + //=== VK_KHR_performance_query === + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = 0; + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 0; + + //=== VK_KHR_get_surface_capabilities2 === + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = 0; + + //=== VK_KHR_get_display_properties2 === + PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = 0; + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 0; + PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = 0; + PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = 0; + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = 0; +# else + PFN_dummy vkCreateIOSSurfaceMVK_placeholder = 0; +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0; +# else + PFN_dummy vkCreateMacOSSurfaceMVK_placeholder = 0; +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = 0; + PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = 0; + PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT = 0; + + //=== VK_EXT_sample_locations === + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT = 0; + + //=== VK_EXT_calibrated_timestamps === + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = 0; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = 0; +# else + PFN_dummy vkCreateImagePipeSurfaceFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = 0; +# else + PFN_dummy vkCreateMetalSurfaceEXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR = 0; + + //=== VK_EXT_tooling_info === + PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT = 0; + + //=== VK_NV_cooperative_matrix === + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0; + + //=== VK_NV_coverage_reduction_mode === + PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT = 0; +# else + PFN_dummy vkGetPhysicalDeviceSurfacePresentModes2EXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = 0; + + //=== VK_EXT_acquire_drm_display === + PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT = 0; + PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0; + + //=== VK_KHR_video_encode_queue === + PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV = 0; + PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV = 0; +# else + PFN_dummy vkAcquireWinrtDisplayNV_placeholder = 0; + PFN_dummy vkGetWinrtDisplayNV_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = 0; + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = 0; +# else + PFN_dummy vkCreateDirectFBSurfaceEXT_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceDirectFBPresentationSupportEXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = 0; + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = 0; +# else + PFN_dummy vkCreateScreenSurfaceQNX_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceScreenPresentationSupportQNX_placeholder = 0; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_ARM_tensors === + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM vkGetPhysicalDeviceExternalTensorPropertiesARM = 0; + + //=== VK_NV_optical_flow === + PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV vkGetPhysicalDeviceOpticalFlowImageFormatsNV = 0; + + //=== VK_NV_cooperative_vector === + PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV vkGetPhysicalDeviceCooperativeVectorPropertiesNV = 0; + + //=== VK_KHR_cooperative_matrix === + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR = 0; + + //=== VK_ARM_data_graph === + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = 0; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = 0; + + //=== VK_KHR_calibrated_timestamps === + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR vkGetPhysicalDeviceCalibrateableTimeDomainsKHR = 0; + +# if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + PFN_vkCreateSurfaceOHOS vkCreateSurfaceOHOS = 0; +# else + PFN_dummy vkCreateSurfaceOHOS_placeholder = 0; +# endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = 0; + + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; + }; + + class DeviceDispatcher : public ::VULKAN_HPP_NAMESPACE::detail::DispatchLoaderBase + { + public: + DeviceDispatcher( PFN_vkGetDeviceProcAddr getProcAddr, VkDevice device ) : vkGetDeviceProcAddr( getProcAddr ) + { + //=== VK_VERSION_1_0 === + vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) ); + vkDestroyDevice = PFN_vkDestroyDevice( vkGetDeviceProcAddr( device, "vkDestroyDevice" ) ); + vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetDeviceProcAddr( device, "vkGetDeviceQueue" ) ); + vkQueueSubmit = PFN_vkQueueSubmit( vkGetDeviceProcAddr( device, "vkQueueSubmit" ) ); + vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetDeviceProcAddr( device, "vkQueueWaitIdle" ) ); + vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" ) ); + vkAllocateMemory = PFN_vkAllocateMemory( vkGetDeviceProcAddr( device, "vkAllocateMemory" ) ); + vkFreeMemory = PFN_vkFreeMemory( vkGetDeviceProcAddr( device, "vkFreeMemory" ) ); + vkMapMemory = PFN_vkMapMemory( vkGetDeviceProcAddr( device, "vkMapMemory" ) ); + vkUnmapMemory = PFN_vkUnmapMemory( vkGetDeviceProcAddr( device, "vkUnmapMemory" ) ); + vkFlushMappedMemoryRanges = PFN_vkFlushMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" ) ); + vkInvalidateMappedMemoryRanges = PFN_vkInvalidateMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" ) ); + vkGetDeviceMemoryCommitment = PFN_vkGetDeviceMemoryCommitment( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" ) ); + vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetDeviceProcAddr( device, "vkBindBufferMemory" ) ); + vkBindImageMemory = PFN_vkBindImageMemory( vkGetDeviceProcAddr( device, "vkBindImageMemory" ) ); + vkGetBufferMemoryRequirements = PFN_vkGetBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" ) ); + vkGetImageMemoryRequirements = PFN_vkGetImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" ) ); + vkGetImageSparseMemoryRequirements = PFN_vkGetImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" ) ); + vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetDeviceProcAddr( device, "vkQueueBindSparse" ) ); + vkCreateFence = PFN_vkCreateFence( vkGetDeviceProcAddr( device, "vkCreateFence" ) ); + vkDestroyFence = PFN_vkDestroyFence( vkGetDeviceProcAddr( device, "vkDestroyFence" ) ); + vkResetFences = PFN_vkResetFences( vkGetDeviceProcAddr( device, "vkResetFences" ) ); + vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetDeviceProcAddr( device, "vkGetFenceStatus" ) ); + vkWaitForFences = PFN_vkWaitForFences( vkGetDeviceProcAddr( device, "vkWaitForFences" ) ); + vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetDeviceProcAddr( device, "vkCreateSemaphore" ) ); + vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetDeviceProcAddr( device, "vkDestroySemaphore" ) ); + vkCreateEvent = PFN_vkCreateEvent( vkGetDeviceProcAddr( device, "vkCreateEvent" ) ); + vkDestroyEvent = PFN_vkDestroyEvent( vkGetDeviceProcAddr( device, "vkDestroyEvent" ) ); + vkGetEventStatus = PFN_vkGetEventStatus( vkGetDeviceProcAddr( device, "vkGetEventStatus" ) ); + vkSetEvent = PFN_vkSetEvent( vkGetDeviceProcAddr( device, "vkSetEvent" ) ); + vkResetEvent = PFN_vkResetEvent( vkGetDeviceProcAddr( device, "vkResetEvent" ) ); + vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetDeviceProcAddr( device, "vkCreateQueryPool" ) ); + vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetDeviceProcAddr( device, "vkDestroyQueryPool" ) ); + vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" ) ); + vkCreateBuffer = PFN_vkCreateBuffer( vkGetDeviceProcAddr( device, "vkCreateBuffer" ) ); + vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetDeviceProcAddr( device, "vkDestroyBuffer" ) ); + vkCreateBufferView = PFN_vkCreateBufferView( vkGetDeviceProcAddr( device, "vkCreateBufferView" ) ); + vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetDeviceProcAddr( device, "vkDestroyBufferView" ) ); + vkCreateImage = PFN_vkCreateImage( vkGetDeviceProcAddr( device, "vkCreateImage" ) ); + vkDestroyImage = PFN_vkDestroyImage( vkGetDeviceProcAddr( device, "vkDestroyImage" ) ); + vkGetImageSubresourceLayout = PFN_vkGetImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" ) ); + vkCreateImageView = PFN_vkCreateImageView( vkGetDeviceProcAddr( device, "vkCreateImageView" ) ); + vkDestroyImageView = PFN_vkDestroyImageView( vkGetDeviceProcAddr( device, "vkDestroyImageView" ) ); + vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetDeviceProcAddr( device, "vkCreateShaderModule" ) ); + vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetDeviceProcAddr( device, "vkDestroyShaderModule" ) ); + vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetDeviceProcAddr( device, "vkCreatePipelineCache" ) ); + vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" ) ); + vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" ) ); + vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetDeviceProcAddr( device, "vkMergePipelineCaches" ) ); + vkCreateGraphicsPipelines = PFN_vkCreateGraphicsPipelines( vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" ) ); + vkCreateComputePipelines = PFN_vkCreateComputePipelines( vkGetDeviceProcAddr( device, "vkCreateComputePipelines" ) ); + vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetDeviceProcAddr( device, "vkDestroyPipeline" ) ); + vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" ) ); + vkDestroyPipelineLayout = PFN_vkDestroyPipelineLayout( vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" ) ); + vkCreateSampler = PFN_vkCreateSampler( vkGetDeviceProcAddr( device, "vkCreateSampler" ) ); + vkDestroySampler = PFN_vkDestroySampler( vkGetDeviceProcAddr( device, "vkDestroySampler" ) ); + vkCreateDescriptorSetLayout = PFN_vkCreateDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" ) ); + vkDestroyDescriptorSetLayout = PFN_vkDestroyDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" ) ); + vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" ) ); + vkDestroyDescriptorPool = PFN_vkDestroyDescriptorPool( vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" ) ); + vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetDeviceProcAddr( device, "vkResetDescriptorPool" ) ); + vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" ) ); + vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" ) ); + vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" ) ); + vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetDeviceProcAddr( device, "vkCreateFramebuffer" ) ); + vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" ) ); + vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetDeviceProcAddr( device, "vkCreateRenderPass" ) ); + vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetDeviceProcAddr( device, "vkDestroyRenderPass" ) ); + vkGetRenderAreaGranularity = PFN_vkGetRenderAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" ) ); + vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetDeviceProcAddr( device, "vkCreateCommandPool" ) ); + vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetDeviceProcAddr( device, "vkDestroyCommandPool" ) ); + vkResetCommandPool = PFN_vkResetCommandPool( vkGetDeviceProcAddr( device, "vkResetCommandPool" ) ); + vkAllocateCommandBuffers = PFN_vkAllocateCommandBuffers( vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" ) ); + vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" ) ); + vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" ) ); + vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetDeviceProcAddr( device, "vkEndCommandBuffer" ) ); + vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetDeviceProcAddr( device, "vkResetCommandBuffer" ) ); + vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetDeviceProcAddr( device, "vkCmdBindPipeline" ) ); + vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetDeviceProcAddr( device, "vkCmdSetViewport" ) ); + vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetDeviceProcAddr( device, "vkCmdSetScissor" ) ); + vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" ) ); + vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" ) ); + vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" ) ); + vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" ) ); + vkCmdSetStencilCompareMask = PFN_vkCmdSetStencilCompareMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" ) ); + vkCmdSetStencilWriteMask = PFN_vkCmdSetStencilWriteMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" ) ); + vkCmdSetStencilReference = PFN_vkCmdSetStencilReference( vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" ) ); + vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" ) ); + vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" ) ); + vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" ) ); + vkCmdDraw = PFN_vkCmdDraw( vkGetDeviceProcAddr( device, "vkCmdDraw" ) ); + vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" ) ); + vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" ) ); + vkCmdDrawIndexedIndirect = PFN_vkCmdDrawIndexedIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" ) ); + vkCmdDispatch = PFN_vkCmdDispatch( vkGetDeviceProcAddr( device, "vkCmdDispatch" ) ); + vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" ) ); + vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" ) ); + vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetDeviceProcAddr( device, "vkCmdCopyImage" ) ); + vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetDeviceProcAddr( device, "vkCmdBlitImage" ) ); + vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" ) ); + vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" ) ); + vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" ) ); + vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetDeviceProcAddr( device, "vkCmdFillBuffer" ) ); + vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetDeviceProcAddr( device, "vkCmdClearColorImage" ) ); + vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" ) ); + vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetDeviceProcAddr( device, "vkCmdClearAttachments" ) ); + vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetDeviceProcAddr( device, "vkCmdResolveImage" ) ); + vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetDeviceProcAddr( device, "vkCmdSetEvent" ) ); + vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetDeviceProcAddr( device, "vkCmdResetEvent" ) ); + vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetDeviceProcAddr( device, "vkCmdWaitEvents" ) ); + vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" ) ); + vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetDeviceProcAddr( device, "vkCmdBeginQuery" ) ); + vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetDeviceProcAddr( device, "vkCmdEndQuery" ) ); + vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" ) ); + vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" ) ); + vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" ) ); + vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetDeviceProcAddr( device, "vkCmdPushConstants" ) ); + vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" ) ); + vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetDeviceProcAddr( device, "vkCmdNextSubpass" ) ); + vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" ) ); + vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" ) ); + + //=== VK_VERSION_1_1 === + vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetDeviceProcAddr( device, "vkBindBufferMemory2" ) ); + vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetDeviceProcAddr( device, "vkBindImageMemory2" ) ); + vkGetDeviceGroupPeerMemoryFeatures = PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" ) ); + vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" ) ); + vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetDeviceProcAddr( device, "vkCmdDispatchBase" ) ); + vkGetImageMemoryRequirements2 = PFN_vkGetImageMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" ) ); + vkGetBufferMemoryRequirements2 = PFN_vkGetBufferMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" ) ); + vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" ) ); + vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetDeviceProcAddr( device, "vkTrimCommandPool" ) ); + vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" ) ); + vkCreateSamplerYcbcrConversion = PFN_vkCreateSamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" ) ); + vkDestroySamplerYcbcrConversion = PFN_vkDestroySamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" ) ); + vkCreateDescriptorUpdateTemplate = PFN_vkCreateDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" ) ); + vkDestroyDescriptorUpdateTemplate = PFN_vkDestroyDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" ) ); + vkUpdateDescriptorSetWithTemplate = PFN_vkUpdateDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" ) ); + vkGetDescriptorSetLayoutSupport = PFN_vkGetDescriptorSetLayoutSupport( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" ) ); + + //=== VK_VERSION_1_2 === + vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCount" ) ); + vkCmdDrawIndexedIndirectCount = PFN_vkCmdDrawIndexedIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCount" ) ); + vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetDeviceProcAddr( device, "vkCreateRenderPass2" ) ); + vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2" ) ); + vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2" ) ); + vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2" ) ); + vkResetQueryPool = PFN_vkResetQueryPool( vkGetDeviceProcAddr( device, "vkResetQueryPool" ) ); + vkGetSemaphoreCounterValue = PFN_vkGetSemaphoreCounterValue( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValue" ) ); + vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetDeviceProcAddr( device, "vkWaitSemaphores" ) ); + vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetDeviceProcAddr( device, "vkSignalSemaphore" ) ); + vkGetBufferDeviceAddress = PFN_vkGetBufferDeviceAddress( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddress" ) ); + vkGetBufferOpaqueCaptureAddress = PFN_vkGetBufferOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddress" ) ); + vkGetDeviceMemoryOpaqueCaptureAddress = + PFN_vkGetDeviceMemoryOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); + + //=== VK_VERSION_1_3 === + vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlot" ) ); + vkDestroyPrivateDataSlot = PFN_vkDestroyPrivateDataSlot( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlot" ) ); + vkSetPrivateData = PFN_vkSetPrivateData( vkGetDeviceProcAddr( device, "vkSetPrivateData" ) ); + vkGetPrivateData = PFN_vkGetPrivateData( vkGetDeviceProcAddr( device, "vkGetPrivateData" ) ); + vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetDeviceProcAddr( device, "vkCmdSetEvent2" ) ); + vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetDeviceProcAddr( device, "vkCmdResetEvent2" ) ); + vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2" ) ); + vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2" ) ); + vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2" ) ); + vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetDeviceProcAddr( device, "vkQueueSubmit2" ) ); + vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2" ) ); + vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetDeviceProcAddr( device, "vkCmdCopyImage2" ) ); + vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2" ) ); + vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2" ) ); + vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetDeviceProcAddr( device, "vkCmdBlitImage2" ) ); + vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetDeviceProcAddr( device, "vkCmdResolveImage2" ) ); + vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetDeviceProcAddr( device, "vkCmdBeginRendering" ) ); + vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetDeviceProcAddr( device, "vkCmdEndRendering" ) ); + vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetDeviceProcAddr( device, "vkCmdSetCullMode" ) ); + vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetDeviceProcAddr( device, "vkCmdSetFrontFace" ) ); + vkCmdSetPrimitiveTopology = PFN_vkCmdSetPrimitiveTopology( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopology" ) ); + vkCmdSetViewportWithCount = PFN_vkCmdSetViewportWithCount( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCount" ) ); + vkCmdSetScissorWithCount = PFN_vkCmdSetScissorWithCount( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCount" ) ); + vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2" ) ); + vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnable" ) ); + vkCmdSetDepthWriteEnable = PFN_vkCmdSetDepthWriteEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnable" ) ); + vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOp" ) ); + vkCmdSetDepthBoundsTestEnable = PFN_vkCmdSetDepthBoundsTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnable" ) ); + vkCmdSetStencilTestEnable = PFN_vkCmdSetStencilTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnable" ) ); + vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetDeviceProcAddr( device, "vkCmdSetStencilOp" ) ); + vkCmdSetRasterizerDiscardEnable = PFN_vkCmdSetRasterizerDiscardEnable( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnable" ) ); + vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnable" ) ); + vkCmdSetPrimitiveRestartEnable = PFN_vkCmdSetPrimitiveRestartEnable( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnable" ) ); + vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirements" ) ); + vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirements" ) ); + vkGetDeviceImageSparseMemoryRequirements = + PFN_vkGetDeviceImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirements" ) ); + + //=== VK_VERSION_1_4 === + vkCmdSetLineStipple = PFN_vkCmdSetLineStipple( vkGetDeviceProcAddr( device, "vkCmdSetLineStipple" ) ); + vkMapMemory2 = PFN_vkMapMemory2( vkGetDeviceProcAddr( device, "vkMapMemory2" ) ); + vkUnmapMemory2 = PFN_vkUnmapMemory2( vkGetDeviceProcAddr( device, "vkUnmapMemory2" ) ); + vkCmdBindIndexBuffer2 = PFN_vkCmdBindIndexBuffer2( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer2" ) ); + vkGetRenderingAreaGranularity = PFN_vkGetRenderingAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderingAreaGranularity" ) ); + vkGetDeviceImageSubresourceLayout = PFN_vkGetDeviceImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetDeviceImageSubresourceLayout" ) ); + vkGetImageSubresourceLayout2 = PFN_vkGetImageSubresourceLayout2( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2" ) ); + vkCmdPushDescriptorSet = PFN_vkCmdPushDescriptorSet( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSet" ) ); + vkCmdPushDescriptorSetWithTemplate = PFN_vkCmdPushDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplate" ) ); + vkCmdSetRenderingAttachmentLocations = + PFN_vkCmdSetRenderingAttachmentLocations( vkGetDeviceProcAddr( device, "vkCmdSetRenderingAttachmentLocations" ) ); + vkCmdSetRenderingInputAttachmentIndices = + PFN_vkCmdSetRenderingInputAttachmentIndices( vkGetDeviceProcAddr( device, "vkCmdSetRenderingInputAttachmentIndices" ) ); + vkCmdBindDescriptorSets2 = PFN_vkCmdBindDescriptorSets2( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets2" ) ); + vkCmdPushConstants2 = PFN_vkCmdPushConstants2( vkGetDeviceProcAddr( device, "vkCmdPushConstants2" ) ); + vkCmdPushDescriptorSet2 = PFN_vkCmdPushDescriptorSet2( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSet2" ) ); + vkCmdPushDescriptorSetWithTemplate2 = PFN_vkCmdPushDescriptorSetWithTemplate2( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplate2" ) ); + vkCopyMemoryToImage = PFN_vkCopyMemoryToImage( vkGetDeviceProcAddr( device, "vkCopyMemoryToImage" ) ); + vkCopyImageToMemory = PFN_vkCopyImageToMemory( vkGetDeviceProcAddr( device, "vkCopyImageToMemory" ) ); + vkCopyImageToImage = PFN_vkCopyImageToImage( vkGetDeviceProcAddr( device, "vkCopyImageToImage" ) ); + vkTransitionImageLayout = PFN_vkTransitionImageLayout( vkGetDeviceProcAddr( device, "vkTransitionImageLayout" ) ); + + //=== VK_KHR_swapchain === + vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) ); + vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) ); + vkGetSwapchainImagesKHR = PFN_vkGetSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" ) ); + vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" ) ); + vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) ); + vkGetDeviceGroupPresentCapabilitiesKHR = + PFN_vkGetDeviceGroupPresentCapabilitiesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); + vkGetDeviceGroupSurfacePresentModesKHR = + PFN_vkGetDeviceGroupSurfacePresentModesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); + vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" ) ); + + //=== VK_KHR_display_swapchain === + vkCreateSharedSwapchainsKHR = PFN_vkCreateSharedSwapchainsKHR( vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" ) ); + + //=== VK_EXT_debug_marker === + vkDebugMarkerSetObjectTagEXT = PFN_vkDebugMarkerSetObjectTagEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" ) ); + vkDebugMarkerSetObjectNameEXT = PFN_vkDebugMarkerSetObjectNameEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" ) ); + vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" ) ); + vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" ) ); + vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" ) ); + + //=== VK_KHR_video_queue === + vkCreateVideoSessionKHR = PFN_vkCreateVideoSessionKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionKHR" ) ); + vkDestroyVideoSessionKHR = PFN_vkDestroyVideoSessionKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionKHR" ) ); + vkGetVideoSessionMemoryRequirementsKHR = + PFN_vkGetVideoSessionMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetVideoSessionMemoryRequirementsKHR" ) ); + vkBindVideoSessionMemoryKHR = PFN_vkBindVideoSessionMemoryKHR( vkGetDeviceProcAddr( device, "vkBindVideoSessionMemoryKHR" ) ); + vkCreateVideoSessionParametersKHR = PFN_vkCreateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionParametersKHR" ) ); + vkUpdateVideoSessionParametersKHR = PFN_vkUpdateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkUpdateVideoSessionParametersKHR" ) ); + vkDestroyVideoSessionParametersKHR = PFN_vkDestroyVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionParametersKHR" ) ); + vkCmdBeginVideoCodingKHR = PFN_vkCmdBeginVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginVideoCodingKHR" ) ); + vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdEndVideoCodingKHR" ) ); + vkCmdControlVideoCodingKHR = PFN_vkCmdControlVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdControlVideoCodingKHR" ) ); + + //=== VK_KHR_video_decode_queue === + vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdDecodeVideoKHR" ) ); + + //=== VK_EXT_transform_feedback === + vkCmdBindTransformFeedbackBuffersEXT = + PFN_vkCmdBindTransformFeedbackBuffersEXT( vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" ) ); + vkCmdBeginTransformFeedbackEXT = PFN_vkCmdBeginTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" ) ); + vkCmdEndTransformFeedbackEXT = PFN_vkCmdEndTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" ) ); + vkCmdBeginQueryIndexedEXT = PFN_vkCmdBeginQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" ) ); + vkCmdEndQueryIndexedEXT = PFN_vkCmdEndQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" ) ); + vkCmdDrawIndirectByteCountEXT = PFN_vkCmdDrawIndirectByteCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" ) ); + + //=== VK_NVX_binary_import === + vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetDeviceProcAddr( device, "vkCreateCuModuleNVX" ) ); + vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetDeviceProcAddr( device, "vkCreateCuFunctionNVX" ) ); + vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetDeviceProcAddr( device, "vkDestroyCuModuleNVX" ) ); + vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetDeviceProcAddr( device, "vkDestroyCuFunctionNVX" ) ); + vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetDeviceProcAddr( device, "vkCmdCuLaunchKernelNVX" ) ); + + //=== VK_NVX_image_view_handle === + vkGetImageViewHandleNVX = PFN_vkGetImageViewHandleNVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" ) ); + vkGetImageViewHandle64NVX = PFN_vkGetImageViewHandle64NVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandle64NVX" ) ); + vkGetImageViewAddressNVX = PFN_vkGetImageViewAddressNVX( vkGetDeviceProcAddr( device, "vkGetImageViewAddressNVX" ) ); + + //=== VK_AMD_draw_indirect_count === + vkCmdDrawIndirectCountAMD = PFN_vkCmdDrawIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; + vkCmdDrawIndexedIndirectCountAMD = PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; + + //=== VK_AMD_shader_info === + vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) ); + + //=== VK_KHR_dynamic_rendering === + vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderingKHR" ) ); + if ( !vkCmdBeginRendering ) + vkCmdBeginRendering = vkCmdBeginRenderingKHR; + vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderingKHR" ) ); + if ( !vkCmdEndRendering ) + vkCmdEndRendering = vkCmdEndRenderingKHR; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + vkGetMemoryWin32HandleNV = PFN_vkGetMemoryWin32HandleNV( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_device_group === + vkGetDeviceGroupPeerMemoryFeaturesKHR = + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); + if ( !vkGetDeviceGroupPeerMemoryFeatures ) + vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; + vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHR" ) ); + if ( !vkCmdSetDeviceMask ) + vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; + vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHR" ) ); + if ( !vkCmdDispatchBase ) + vkCmdDispatchBase = vkCmdDispatchBaseKHR; + + //=== VK_KHR_maintenance1 === + vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" ) ); + if ( !vkTrimCommandPool ) + vkTrimCommandPool = vkTrimCommandPoolKHR; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + vkGetMemoryWin32HandleKHR = PFN_vkGetMemoryWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" ) ); + vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" ) ); + vkGetMemoryFdPropertiesKHR = PFN_vkGetMemoryFdPropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + vkImportSemaphoreWin32HandleKHR = PFN_vkImportSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" ) ); + vkGetSemaphoreWin32HandleKHR = PFN_vkGetSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" ) ); + vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" ) ); + + //=== VK_KHR_push_descriptor === + vkCmdPushDescriptorSetKHR = PFN_vkCmdPushDescriptorSetKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" ) ); + if ( !vkCmdPushDescriptorSet ) + vkCmdPushDescriptorSet = vkCmdPushDescriptorSetKHR; + vkCmdPushDescriptorSetWithTemplateKHR = + PFN_vkCmdPushDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); + if ( !vkCmdPushDescriptorSetWithTemplate ) + vkCmdPushDescriptorSetWithTemplate = vkCmdPushDescriptorSetWithTemplateKHR; + + //=== VK_EXT_conditional_rendering === + vkCmdBeginConditionalRenderingEXT = PFN_vkCmdBeginConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" ) ); + vkCmdEndConditionalRenderingEXT = PFN_vkCmdEndConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" ) ); + + //=== VK_KHR_descriptor_update_template === + vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" ) ); + if ( !vkCreateDescriptorUpdateTemplate ) + vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; + vkDestroyDescriptorUpdateTemplateKHR = + PFN_vkDestroyDescriptorUpdateTemplateKHR( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" ) ); + if ( !vkDestroyDescriptorUpdateTemplate ) + vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; + vkUpdateDescriptorSetWithTemplateKHR = + PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" ) ); + if ( !vkUpdateDescriptorSetWithTemplate ) + vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; + + //=== VK_NV_clip_space_w_scaling === + vkCmdSetViewportWScalingNV = PFN_vkCmdSetViewportWScalingNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" ) ); + + //=== VK_EXT_display_control === + vkDisplayPowerControlEXT = PFN_vkDisplayPowerControlEXT( vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" ) ); + vkRegisterDeviceEventEXT = PFN_vkRegisterDeviceEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" ) ); + vkRegisterDisplayEventEXT = PFN_vkRegisterDisplayEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" ) ); + vkGetSwapchainCounterEXT = PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) ); + + //=== VK_GOOGLE_display_timing === + vkGetRefreshCycleDurationGOOGLE = PFN_vkGetRefreshCycleDurationGOOGLE( vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" ) ); + vkGetPastPresentationTimingGOOGLE = PFN_vkGetPastPresentationTimingGOOGLE( vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" ) ); + + //=== VK_EXT_discard_rectangles === + vkCmdSetDiscardRectangleEXT = PFN_vkCmdSetDiscardRectangleEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" ) ); + vkCmdSetDiscardRectangleEnableEXT = PFN_vkCmdSetDiscardRectangleEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEnableEXT" ) ); + vkCmdSetDiscardRectangleModeEXT = PFN_vkCmdSetDiscardRectangleModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleModeEXT" ) ); + + //=== VK_EXT_hdr_metadata === + vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" ) ); + + //=== VK_KHR_create_renderpass2 === + vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) ); + if ( !vkCreateRenderPass2 ) + vkCreateRenderPass2 = vkCreateRenderPass2KHR; + vkCmdBeginRenderPass2KHR = PFN_vkCmdBeginRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" ) ); + if ( !vkCmdBeginRenderPass2 ) + vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; + vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" ) ); + if ( !vkCmdNextSubpass2 ) + vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; + vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" ) ); + if ( !vkCmdEndRenderPass2 ) + vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; + + //=== VK_KHR_shared_presentable_image === + vkGetSwapchainStatusKHR = PFN_vkGetSwapchainStatusKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + vkImportFenceWin32HandleKHR = PFN_vkImportFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" ) ); + vkGetFenceWin32HandleKHR = PFN_vkGetFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) ); + vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) ); + + //=== VK_KHR_performance_query === + vkAcquireProfilingLockKHR = PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) ); + vkReleaseProfilingLockKHR = PFN_vkReleaseProfilingLockKHR( vkGetDeviceProcAddr( device, "vkReleaseProfilingLockKHR" ) ); + + //=== VK_EXT_debug_utils === + vkSetDebugUtilsObjectNameEXT = PFN_vkSetDebugUtilsObjectNameEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" ) ); + vkSetDebugUtilsObjectTagEXT = PFN_vkSetDebugUtilsObjectTagEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" ) ); + vkQueueBeginDebugUtilsLabelEXT = PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" ) ); + vkQueueEndDebugUtilsLabelEXT = PFN_vkQueueEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" ) ); + vkQueueInsertDebugUtilsLabelEXT = PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" ) ); + vkCmdBeginDebugUtilsLabelEXT = PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" ) ); + vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdEndDebugUtilsLabelEXT" ) ); + vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdInsertDebugUtilsLabelEXT" ) ); + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + vkGetAndroidHardwareBufferPropertiesANDROID = + PFN_vkGetAndroidHardwareBufferPropertiesANDROID( vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); + vkGetMemoryAndroidHardwareBufferANDROID = + PFN_vkGetMemoryAndroidHardwareBufferANDROID( vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + vkCreateExecutionGraphPipelinesAMDX = PFN_vkCreateExecutionGraphPipelinesAMDX( vkGetDeviceProcAddr( device, "vkCreateExecutionGraphPipelinesAMDX" ) ); + vkGetExecutionGraphPipelineScratchSizeAMDX = + PFN_vkGetExecutionGraphPipelineScratchSizeAMDX( vkGetDeviceProcAddr( device, "vkGetExecutionGraphPipelineScratchSizeAMDX" ) ); + vkGetExecutionGraphPipelineNodeIndexAMDX = + PFN_vkGetExecutionGraphPipelineNodeIndexAMDX( vkGetDeviceProcAddr( device, "vkGetExecutionGraphPipelineNodeIndexAMDX" ) ); + vkCmdInitializeGraphScratchMemoryAMDX = + PFN_vkCmdInitializeGraphScratchMemoryAMDX( vkGetDeviceProcAddr( device, "vkCmdInitializeGraphScratchMemoryAMDX" ) ); + vkCmdDispatchGraphAMDX = PFN_vkCmdDispatchGraphAMDX( vkGetDeviceProcAddr( device, "vkCmdDispatchGraphAMDX" ) ); + vkCmdDispatchGraphIndirectAMDX = PFN_vkCmdDispatchGraphIndirectAMDX( vkGetDeviceProcAddr( device, "vkCmdDispatchGraphIndirectAMDX" ) ); + vkCmdDispatchGraphIndirectCountAMDX = PFN_vkCmdDispatchGraphIndirectCountAMDX( vkGetDeviceProcAddr( device, "vkCmdDispatchGraphIndirectCountAMDX" ) ); +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + vkCmdSetSampleLocationsEXT = PFN_vkCmdSetSampleLocationsEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" ) ); + + //=== VK_KHR_get_memory_requirements2 === + vkGetImageMemoryRequirements2KHR = PFN_vkGetImageMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" ) ); + if ( !vkGetImageMemoryRequirements2 ) + vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; + vkGetBufferMemoryRequirements2KHR = PFN_vkGetBufferMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" ) ); + if ( !vkGetBufferMemoryRequirements2 ) + vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; + vkGetImageSparseMemoryRequirements2KHR = + PFN_vkGetImageSparseMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" ) ); + if ( !vkGetImageSparseMemoryRequirements2 ) + vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; + + //=== VK_KHR_acceleration_structure === + vkCreateAccelerationStructureKHR = PFN_vkCreateAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" ) ); + vkDestroyAccelerationStructureKHR = PFN_vkDestroyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureKHR" ) ); + vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresKHR" ) ); + vkCmdBuildAccelerationStructuresIndirectKHR = + PFN_vkCmdBuildAccelerationStructuresIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); + vkBuildAccelerationStructuresKHR = PFN_vkBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkBuildAccelerationStructuresKHR" ) ); + vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" ) ); + vkCopyAccelerationStructureToMemoryKHR = + PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" ) ); + vkCopyMemoryToAccelerationStructureKHR = + PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" ) ); + vkWriteAccelerationStructuresPropertiesKHR = + PFN_vkWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" ) ); + vkCmdCopyAccelerationStructureKHR = PFN_vkCmdCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" ) ); + vkCmdCopyAccelerationStructureToMemoryKHR = + PFN_vkCmdCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); + vkCmdCopyMemoryToAccelerationStructureKHR = + PFN_vkCmdCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); + vkGetAccelerationStructureDeviceAddressKHR = + PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" ) ); + vkCmdWriteAccelerationStructuresPropertiesKHR = + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); + vkGetDeviceAccelerationStructureCompatibilityKHR = + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); + vkGetAccelerationStructureBuildSizesKHR = + PFN_vkGetAccelerationStructureBuildSizesKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureBuildSizesKHR" ) ); + + //=== VK_KHR_ray_tracing_pipeline === + vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) ); + vkCreateRayTracingPipelinesKHR = PFN_vkCreateRayTracingPipelinesKHR( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" ) ); + vkGetRayTracingShaderGroupHandlesKHR = + PFN_vkGetRayTracingShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesKHR" ) ); + vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); + vkCmdTraceRaysIndirectKHR = PFN_vkCmdTraceRaysIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" ) ); + vkGetRayTracingShaderGroupStackSizeKHR = + PFN_vkGetRayTracingShaderGroupStackSizeKHR( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); + vkCmdSetRayTracingPipelineStackSizeKHR = + PFN_vkCmdSetRayTracingPipelineStackSizeKHR( vkGetDeviceProcAddr( device, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); + + //=== VK_KHR_sampler_ycbcr_conversion === + vkCreateSamplerYcbcrConversionKHR = PFN_vkCreateSamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" ) ); + if ( !vkCreateSamplerYcbcrConversion ) + vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; + vkDestroySamplerYcbcrConversionKHR = PFN_vkDestroySamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" ) ); + if ( !vkDestroySamplerYcbcrConversion ) + vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; + + //=== VK_KHR_bind_memory2 === + vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" ) ); + if ( !vkBindBufferMemory2 ) + vkBindBufferMemory2 = vkBindBufferMemory2KHR; + vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" ) ); + if ( !vkBindImageMemory2 ) + vkBindImageMemory2 = vkBindImageMemory2KHR; + + //=== VK_EXT_image_drm_format_modifier === + vkGetImageDrmFormatModifierPropertiesEXT = + PFN_vkGetImageDrmFormatModifierPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); + + //=== VK_EXT_validation_cache === + vkCreateValidationCacheEXT = PFN_vkCreateValidationCacheEXT( vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" ) ); + vkDestroyValidationCacheEXT = PFN_vkDestroyValidationCacheEXT( vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" ) ); + vkMergeValidationCachesEXT = PFN_vkMergeValidationCachesEXT( vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" ) ); + vkGetValidationCacheDataEXT = PFN_vkGetValidationCacheDataEXT( vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" ) ); + + //=== VK_NV_shading_rate_image === + vkCmdBindShadingRateImageNV = PFN_vkCmdBindShadingRateImageNV( vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" ) ); + vkCmdSetViewportShadingRatePaletteNV = + PFN_vkCmdSetViewportShadingRatePaletteNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" ) ); + vkCmdSetCoarseSampleOrderNV = PFN_vkCmdSetCoarseSampleOrderNV( vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" ) ); + + //=== VK_NV_ray_tracing === + vkCreateAccelerationStructureNV = PFN_vkCreateAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" ) ); + vkDestroyAccelerationStructureNV = PFN_vkDestroyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" ) ); + vkGetAccelerationStructureMemoryRequirementsNV = + PFN_vkGetAccelerationStructureMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); + vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" ) ); + vkCmdBuildAccelerationStructureNV = PFN_vkCmdBuildAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" ) ); + vkCmdCopyAccelerationStructureNV = PFN_vkCmdCopyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" ) ); + vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" ) ); + vkCreateRayTracingPipelinesNV = PFN_vkCreateRayTracingPipelinesNV( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" ) ); + vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" ) ); + if ( !vkGetRayTracingShaderGroupHandlesKHR ) + vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; + vkGetAccelerationStructureHandleNV = PFN_vkGetAccelerationStructureHandleNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" ) ); + vkCmdWriteAccelerationStructuresPropertiesNV = + PFN_vkCmdWriteAccelerationStructuresPropertiesNV( vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); + vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetDeviceProcAddr( device, "vkCompileDeferredNV" ) ); + + //=== VK_KHR_maintenance3 === + vkGetDescriptorSetLayoutSupportKHR = PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupportKHR" ) ); + if ( !vkGetDescriptorSetLayoutSupport ) + vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; + + //=== VK_KHR_draw_indirect_count === + vkCmdDrawIndirectCountKHR = PFN_vkCmdDrawIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; + vkCmdDrawIndexedIndirectCountKHR = PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; + + //=== VK_EXT_external_memory_host === + vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" ) ); + + //=== VK_AMD_buffer_marker === + vkCmdWriteBufferMarkerAMD = PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) ); + vkCmdWriteBufferMarker2AMD = PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) ); + + //=== VK_EXT_calibrated_timestamps === + vkGetCalibratedTimestampsEXT = PFN_vkGetCalibratedTimestampsEXT( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" ) ); + if ( !vkGetCalibratedTimestampsKHR ) + vkGetCalibratedTimestampsKHR = vkGetCalibratedTimestampsEXT; + + //=== VK_NV_mesh_shader === + vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" ) ); + vkCmdDrawMeshTasksIndirectNV = PFN_vkCmdDrawMeshTasksIndirectNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" ) ); + vkCmdDrawMeshTasksIndirectCountNV = PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" ) ); + + //=== VK_NV_scissor_exclusive === + vkCmdSetExclusiveScissorEnableNV = PFN_vkCmdSetExclusiveScissorEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorEnableNV" ) ); + vkCmdSetExclusiveScissorNV = PFN_vkCmdSetExclusiveScissorNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" ) ); + + //=== VK_NV_device_diagnostic_checkpoints === + vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" ) ); + vkGetQueueCheckpointDataNV = PFN_vkGetQueueCheckpointDataNV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" ) ); + vkGetQueueCheckpointData2NV = PFN_vkGetQueueCheckpointData2NV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointData2NV" ) ); + + //=== VK_KHR_timeline_semaphore === + vkGetSemaphoreCounterValueKHR = PFN_vkGetSemaphoreCounterValueKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValueKHR" ) ); + if ( !vkGetSemaphoreCounterValue ) + vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; + vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetDeviceProcAddr( device, "vkWaitSemaphoresKHR" ) ); + if ( !vkWaitSemaphores ) + vkWaitSemaphores = vkWaitSemaphoresKHR; + vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetDeviceProcAddr( device, "vkSignalSemaphoreKHR" ) ); + if ( !vkSignalSemaphore ) + vkSignalSemaphore = vkSignalSemaphoreKHR; + + //=== VK_INTEL_performance_query === + vkInitializePerformanceApiINTEL = PFN_vkInitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" ) ); + vkUninitializePerformanceApiINTEL = PFN_vkUninitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" ) ); + vkCmdSetPerformanceMarkerINTEL = PFN_vkCmdSetPerformanceMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" ) ); + vkCmdSetPerformanceStreamMarkerINTEL = + PFN_vkCmdSetPerformanceStreamMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); + vkCmdSetPerformanceOverrideINTEL = PFN_vkCmdSetPerformanceOverrideINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" ) ); + vkAcquirePerformanceConfigurationINTEL = + PFN_vkAcquirePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" ) ); + vkReleasePerformanceConfigurationINTEL = + PFN_vkReleasePerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" ) ); + vkQueueSetPerformanceConfigurationINTEL = + PFN_vkQueueSetPerformanceConfigurationINTEL( vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" ) ); + vkGetPerformanceParameterINTEL = PFN_vkGetPerformanceParameterINTEL( vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" ) ); + + //=== VK_AMD_display_native_hdr === + vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" ) ); + + //=== VK_KHR_fragment_shading_rate === + vkCmdSetFragmentShadingRateKHR = PFN_vkCmdSetFragmentShadingRateKHR( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateKHR" ) ); + + //=== VK_KHR_dynamic_rendering_local_read === + vkCmdSetRenderingAttachmentLocationsKHR = + PFN_vkCmdSetRenderingAttachmentLocationsKHR( vkGetDeviceProcAddr( device, "vkCmdSetRenderingAttachmentLocationsKHR" ) ); + if ( !vkCmdSetRenderingAttachmentLocations ) + vkCmdSetRenderingAttachmentLocations = vkCmdSetRenderingAttachmentLocationsKHR; + vkCmdSetRenderingInputAttachmentIndicesKHR = + PFN_vkCmdSetRenderingInputAttachmentIndicesKHR( vkGetDeviceProcAddr( device, "vkCmdSetRenderingInputAttachmentIndicesKHR" ) ); + if ( !vkCmdSetRenderingInputAttachmentIndices ) + vkCmdSetRenderingInputAttachmentIndices = vkCmdSetRenderingInputAttachmentIndicesKHR; + + //=== VK_EXT_buffer_device_address === + vkGetBufferDeviceAddressEXT = PFN_vkGetBufferDeviceAddressEXT( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; + + //=== VK_KHR_present_wait === + vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetDeviceProcAddr( device, "vkWaitForPresentKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" ) ); + vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" ) ); + vkGetDeviceGroupSurfacePresentModes2EXT = + PFN_vkGetDeviceGroupSurfacePresentModes2EXT( vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_buffer_device_address === + vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressKHR" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; + vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddressKHR" ) ); + if ( !vkGetBufferOpaqueCaptureAddress ) + vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; + vkGetDeviceMemoryOpaqueCaptureAddressKHR = + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); + if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) + vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; + + //=== VK_EXT_line_rasterization === + vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEXT" ) ); + if ( !vkCmdSetLineStipple ) + vkCmdSetLineStipple = vkCmdSetLineStippleEXT; + + //=== VK_EXT_host_query_reset === + vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" ) ); + if ( !vkResetQueryPool ) + vkResetQueryPool = vkResetQueryPoolEXT; + + //=== VK_EXT_extended_dynamic_state === + vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) ); + if ( !vkCmdSetCullMode ) + vkCmdSetCullMode = vkCmdSetCullModeEXT; + vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) ); + if ( !vkCmdSetFrontFace ) + vkCmdSetFrontFace = vkCmdSetFrontFaceEXT; + vkCmdSetPrimitiveTopologyEXT = PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) ); + if ( !vkCmdSetPrimitiveTopology ) + vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT; + vkCmdSetViewportWithCountEXT = PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) ); + if ( !vkCmdSetViewportWithCount ) + vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT; + vkCmdSetScissorWithCountEXT = PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) ); + if ( !vkCmdSetScissorWithCount ) + vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT; + vkCmdBindVertexBuffers2EXT = PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) ); + if ( !vkCmdBindVertexBuffers2 ) + vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT; + vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) ); + if ( !vkCmdSetDepthTestEnable ) + vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT; + vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) ); + if ( !vkCmdSetDepthWriteEnable ) + vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT; + vkCmdSetDepthCompareOpEXT = PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) ); + if ( !vkCmdSetDepthCompareOp ) + vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT; + vkCmdSetDepthBoundsTestEnableEXT = PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) ); + if ( !vkCmdSetDepthBoundsTestEnable ) + vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT; + vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) ); + if ( !vkCmdSetStencilTestEnable ) + vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT; + vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) ); + if ( !vkCmdSetStencilOp ) + vkCmdSetStencilOp = vkCmdSetStencilOpEXT; + + //=== VK_KHR_deferred_host_operations === + vkCreateDeferredOperationKHR = PFN_vkCreateDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" ) ); + vkDestroyDeferredOperationKHR = PFN_vkDestroyDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" ) ); + vkGetDeferredOperationMaxConcurrencyKHR = + PFN_vkGetDeferredOperationMaxConcurrencyKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); + vkGetDeferredOperationResultKHR = PFN_vkGetDeferredOperationResultKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" ) ); + vkDeferredOperationJoinKHR = PFN_vkDeferredOperationJoinKHR( vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" ) ); + + //=== VK_KHR_pipeline_executable_properties === + vkGetPipelineExecutablePropertiesKHR = + PFN_vkGetPipelineExecutablePropertiesKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutablePropertiesKHR" ) ); + vkGetPipelineExecutableStatisticsKHR = + PFN_vkGetPipelineExecutableStatisticsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableStatisticsKHR" ) ); + vkGetPipelineExecutableInternalRepresentationsKHR = + PFN_vkGetPipelineExecutableInternalRepresentationsKHR( vkGetDeviceProcAddr( device, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); + + //=== VK_EXT_host_image_copy === + vkCopyMemoryToImageEXT = PFN_vkCopyMemoryToImageEXT( vkGetDeviceProcAddr( device, "vkCopyMemoryToImageEXT" ) ); + if ( !vkCopyMemoryToImage ) + vkCopyMemoryToImage = vkCopyMemoryToImageEXT; + vkCopyImageToMemoryEXT = PFN_vkCopyImageToMemoryEXT( vkGetDeviceProcAddr( device, "vkCopyImageToMemoryEXT" ) ); + if ( !vkCopyImageToMemory ) + vkCopyImageToMemory = vkCopyImageToMemoryEXT; + vkCopyImageToImageEXT = PFN_vkCopyImageToImageEXT( vkGetDeviceProcAddr( device, "vkCopyImageToImageEXT" ) ); + if ( !vkCopyImageToImage ) + vkCopyImageToImage = vkCopyImageToImageEXT; + vkTransitionImageLayoutEXT = PFN_vkTransitionImageLayoutEXT( vkGetDeviceProcAddr( device, "vkTransitionImageLayoutEXT" ) ); + if ( !vkTransitionImageLayout ) + vkTransitionImageLayout = vkTransitionImageLayoutEXT; + vkGetImageSubresourceLayout2EXT = PFN_vkGetImageSubresourceLayout2EXT( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2EXT" ) ); + if ( !vkGetImageSubresourceLayout2 ) + vkGetImageSubresourceLayout2 = vkGetImageSubresourceLayout2EXT; + + //=== VK_KHR_map_memory2 === + vkMapMemory2KHR = PFN_vkMapMemory2KHR( vkGetDeviceProcAddr( device, "vkMapMemory2KHR" ) ); + if ( !vkMapMemory2 ) + vkMapMemory2 = vkMapMemory2KHR; + vkUnmapMemory2KHR = PFN_vkUnmapMemory2KHR( vkGetDeviceProcAddr( device, "vkUnmapMemory2KHR" ) ); + if ( !vkUnmapMemory2 ) + vkUnmapMemory2 = vkUnmapMemory2KHR; + + //=== VK_EXT_swapchain_maintenance1 === + vkReleaseSwapchainImagesEXT = PFN_vkReleaseSwapchainImagesEXT( vkGetDeviceProcAddr( device, "vkReleaseSwapchainImagesEXT" ) ); + if ( !vkReleaseSwapchainImagesKHR ) + vkReleaseSwapchainImagesKHR = vkReleaseSwapchainImagesEXT; + + //=== VK_NV_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsNV = + PFN_vkGetGeneratedCommandsMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); + vkCmdPreprocessGeneratedCommandsNV = PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsNV" ) ); + vkCmdExecuteGeneratedCommandsNV = PFN_vkCmdExecuteGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsNV" ) ); + vkCmdBindPipelineShaderGroupNV = PFN_vkCmdBindPipelineShaderGroupNV( vkGetDeviceProcAddr( device, "vkCmdBindPipelineShaderGroupNV" ) ); + vkCreateIndirectCommandsLayoutNV = PFN_vkCreateIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNV" ) ); + vkDestroyIndirectCommandsLayoutNV = PFN_vkDestroyIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNV" ) ); + + //=== VK_EXT_depth_bias_control === + vkCmdSetDepthBias2EXT = PFN_vkCmdSetDepthBias2EXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias2EXT" ) ); + + //=== VK_EXT_private_data === + vkCreatePrivateDataSlotEXT = PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) ); + if ( !vkCreatePrivateDataSlot ) + vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT; + vkDestroyPrivateDataSlotEXT = PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) ); + if ( !vkDestroyPrivateDataSlot ) + vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT; + vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) ); + if ( !vkSetPrivateData ) + vkSetPrivateData = vkSetPrivateDataEXT; + vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) ); + if ( !vkGetPrivateData ) + vkGetPrivateData = vkGetPrivateDataEXT; + + //=== VK_KHR_video_encode_queue === + vkGetEncodedVideoSessionParametersKHR = + PFN_vkGetEncodedVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkGetEncodedVideoSessionParametersKHR" ) ); + vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdEncodeVideoKHR" ) ); + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + vkCreateCudaModuleNV = PFN_vkCreateCudaModuleNV( vkGetDeviceProcAddr( device, "vkCreateCudaModuleNV" ) ); + vkGetCudaModuleCacheNV = PFN_vkGetCudaModuleCacheNV( vkGetDeviceProcAddr( device, "vkGetCudaModuleCacheNV" ) ); + vkCreateCudaFunctionNV = PFN_vkCreateCudaFunctionNV( vkGetDeviceProcAddr( device, "vkCreateCudaFunctionNV" ) ); + vkDestroyCudaModuleNV = PFN_vkDestroyCudaModuleNV( vkGetDeviceProcAddr( device, "vkDestroyCudaModuleNV" ) ); + vkDestroyCudaFunctionNV = PFN_vkDestroyCudaFunctionNV( vkGetDeviceProcAddr( device, "vkDestroyCudaFunctionNV" ) ); + vkCmdCudaLaunchKernelNV = PFN_vkCmdCudaLaunchKernelNV( vkGetDeviceProcAddr( device, "vkCmdCudaLaunchKernelNV" ) ); +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + vkCmdDispatchTileQCOM = PFN_vkCmdDispatchTileQCOM( vkGetDeviceProcAddr( device, "vkCmdDispatchTileQCOM" ) ); + vkCmdBeginPerTileExecutionQCOM = PFN_vkCmdBeginPerTileExecutionQCOM( vkGetDeviceProcAddr( device, "vkCmdBeginPerTileExecutionQCOM" ) ); + vkCmdEndPerTileExecutionQCOM = PFN_vkCmdEndPerTileExecutionQCOM( vkGetDeviceProcAddr( device, "vkCmdEndPerTileExecutionQCOM" ) ); + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + vkExportMetalObjectsEXT = PFN_vkExportMetalObjectsEXT( vkGetDeviceProcAddr( device, "vkExportMetalObjectsEXT" ) ); +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) ); + if ( !vkCmdSetEvent2 ) + vkCmdSetEvent2 = vkCmdSetEvent2KHR; + vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) ); + if ( !vkCmdResetEvent2 ) + vkCmdResetEvent2 = vkCmdResetEvent2KHR; + vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) ); + if ( !vkCmdWaitEvents2 ) + vkCmdWaitEvents2 = vkCmdWaitEvents2KHR; + vkCmdPipelineBarrier2KHR = PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) ); + if ( !vkCmdPipelineBarrier2 ) + vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR; + vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) ); + if ( !vkCmdWriteTimestamp2 ) + vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR; + vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) ); + if ( !vkQueueSubmit2 ) + vkQueueSubmit2 = vkQueueSubmit2KHR; + + //=== VK_EXT_descriptor_buffer === + vkGetDescriptorSetLayoutSizeEXT = PFN_vkGetDescriptorSetLayoutSizeEXT( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSizeEXT" ) ); + vkGetDescriptorSetLayoutBindingOffsetEXT = + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutBindingOffsetEXT" ) ); + vkGetDescriptorEXT = PFN_vkGetDescriptorEXT( vkGetDeviceProcAddr( device, "vkGetDescriptorEXT" ) ); + vkCmdBindDescriptorBuffersEXT = PFN_vkCmdBindDescriptorBuffersEXT( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorBuffersEXT" ) ); + vkCmdSetDescriptorBufferOffsetsEXT = PFN_vkCmdSetDescriptorBufferOffsetsEXT( vkGetDeviceProcAddr( device, "vkCmdSetDescriptorBufferOffsetsEXT" ) ); + vkCmdBindDescriptorBufferEmbeddedSamplersEXT = + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT" ) ); + vkGetBufferOpaqueCaptureDescriptorDataEXT = + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureDescriptorDataEXT" ) ); + vkGetImageOpaqueCaptureDescriptorDataEXT = + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetImageOpaqueCaptureDescriptorDataEXT" ) ); + vkGetImageViewOpaqueCaptureDescriptorDataEXT = + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetImageViewOpaqueCaptureDescriptorDataEXT" ) ); + vkGetSamplerOpaqueCaptureDescriptorDataEXT = + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT( vkGetDeviceProcAddr( device, "vkGetSamplerOpaqueCaptureDescriptorDataEXT" ) ); + vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + vkGetDeviceProcAddr( device, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT" ) ); + + //=== VK_NV_fragment_shading_rate_enums === + vkCmdSetFragmentShadingRateEnumNV = PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateEnumNV" ) ); + + //=== VK_EXT_mesh_shader === + vkCmdDrawMeshTasksEXT = PFN_vkCmdDrawMeshTasksEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksEXT" ) ); + vkCmdDrawMeshTasksIndirectEXT = PFN_vkCmdDrawMeshTasksIndirectEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectEXT" ) ); + vkCmdDrawMeshTasksIndirectCountEXT = PFN_vkCmdDrawMeshTasksIndirectCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountEXT" ) ); + + //=== VK_KHR_copy_commands2 === + vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) ); + if ( !vkCmdCopyBuffer2 ) + vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR; + vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) ); + if ( !vkCmdCopyImage2 ) + vkCmdCopyImage2 = vkCmdCopyImage2KHR; + vkCmdCopyBufferToImage2KHR = PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) ); + if ( !vkCmdCopyBufferToImage2 ) + vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR; + vkCmdCopyImageToBuffer2KHR = PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) ); + if ( !vkCmdCopyImageToBuffer2 ) + vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR; + vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) ); + if ( !vkCmdBlitImage2 ) + vkCmdBlitImage2 = vkCmdBlitImage2KHR; + vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) ); + if ( !vkCmdResolveImage2 ) + vkCmdResolveImage2 = vkCmdResolveImage2KHR; + + //=== VK_EXT_device_fault === + vkGetDeviceFaultInfoEXT = PFN_vkGetDeviceFaultInfoEXT( vkGetDeviceProcAddr( device, "vkGetDeviceFaultInfoEXT" ) ); + + //=== VK_EXT_vertex_input_dynamic_state === + vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetDeviceProcAddr( device, "vkCmdSetVertexInputEXT" ) ); + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + vkGetMemoryZirconHandleFUCHSIA = PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) ); + vkGetMemoryZirconHandlePropertiesFUCHSIA = + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + vkImportSemaphoreZirconHandleFUCHSIA = + PFN_vkImportSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); + vkGetSemaphoreZirconHandleFUCHSIA = PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + vkCreateBufferCollectionFUCHSIA = PFN_vkCreateBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkCreateBufferCollectionFUCHSIA" ) ); + vkSetBufferCollectionImageConstraintsFUCHSIA = + PFN_vkSetBufferCollectionImageConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) ); + vkSetBufferCollectionBufferConstraintsFUCHSIA = + PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA( vkGetDeviceProcAddr( device, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) ); + vkDestroyBufferCollectionFUCHSIA = PFN_vkDestroyBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkDestroyBufferCollectionFUCHSIA" ) ); + vkGetBufferCollectionPropertiesFUCHSIA = + PFN_vkGetBufferCollectionPropertiesFUCHSIA( vkGetDeviceProcAddr( device, "vkGetBufferCollectionPropertiesFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); + vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetDeviceProcAddr( device, "vkCmdSubpassShadingHUAWEI" ) ); + + //=== VK_HUAWEI_invocation_mask === + vkCmdBindInvocationMaskHUAWEI = PFN_vkCmdBindInvocationMaskHUAWEI( vkGetDeviceProcAddr( device, "vkCmdBindInvocationMaskHUAWEI" ) ); + + //=== VK_NV_external_memory_rdma === + vkGetMemoryRemoteAddressNV = PFN_vkGetMemoryRemoteAddressNV( vkGetDeviceProcAddr( device, "vkGetMemoryRemoteAddressNV" ) ); + + //=== VK_EXT_pipeline_properties === + vkGetPipelinePropertiesEXT = PFN_vkGetPipelinePropertiesEXT( vkGetDeviceProcAddr( device, "vkGetPipelinePropertiesEXT" ) ); + + //=== VK_EXT_extended_dynamic_state2 === + vkCmdSetPatchControlPointsEXT = PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) ); + vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) ); + if ( !vkCmdSetRasterizerDiscardEnable ) + vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT; + vkCmdSetDepthBiasEnableEXT = PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) ); + if ( !vkCmdSetDepthBiasEnable ) + vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT; + vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) ); + vkCmdSetPrimitiveRestartEnableEXT = PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) ); + if ( !vkCmdSetPrimitiveRestartEnable ) + vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT; + + //=== VK_EXT_color_write_enable === + vkCmdSetColorWriteEnableEXT = PFN_vkCmdSetColorWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteEnableEXT" ) ); + + //=== VK_KHR_ray_tracing_maintenance1 === + vkCmdTraceRaysIndirect2KHR = PFN_vkCmdTraceRaysIndirect2KHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirect2KHR" ) ); + + //=== VK_EXT_multi_draw === + vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) ); + vkCmdDrawMultiIndexedEXT = PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) ); + + //=== VK_EXT_opacity_micromap === + vkCreateMicromapEXT = PFN_vkCreateMicromapEXT( vkGetDeviceProcAddr( device, "vkCreateMicromapEXT" ) ); + vkDestroyMicromapEXT = PFN_vkDestroyMicromapEXT( vkGetDeviceProcAddr( device, "vkDestroyMicromapEXT" ) ); + vkCmdBuildMicromapsEXT = PFN_vkCmdBuildMicromapsEXT( vkGetDeviceProcAddr( device, "vkCmdBuildMicromapsEXT" ) ); + vkBuildMicromapsEXT = PFN_vkBuildMicromapsEXT( vkGetDeviceProcAddr( device, "vkBuildMicromapsEXT" ) ); + vkCopyMicromapEXT = PFN_vkCopyMicromapEXT( vkGetDeviceProcAddr( device, "vkCopyMicromapEXT" ) ); + vkCopyMicromapToMemoryEXT = PFN_vkCopyMicromapToMemoryEXT( vkGetDeviceProcAddr( device, "vkCopyMicromapToMemoryEXT" ) ); + vkCopyMemoryToMicromapEXT = PFN_vkCopyMemoryToMicromapEXT( vkGetDeviceProcAddr( device, "vkCopyMemoryToMicromapEXT" ) ); + vkWriteMicromapsPropertiesEXT = PFN_vkWriteMicromapsPropertiesEXT( vkGetDeviceProcAddr( device, "vkWriteMicromapsPropertiesEXT" ) ); + vkCmdCopyMicromapEXT = PFN_vkCmdCopyMicromapEXT( vkGetDeviceProcAddr( device, "vkCmdCopyMicromapEXT" ) ); + vkCmdCopyMicromapToMemoryEXT = PFN_vkCmdCopyMicromapToMemoryEXT( vkGetDeviceProcAddr( device, "vkCmdCopyMicromapToMemoryEXT" ) ); + vkCmdCopyMemoryToMicromapEXT = PFN_vkCmdCopyMemoryToMicromapEXT( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToMicromapEXT" ) ); + vkCmdWriteMicromapsPropertiesEXT = PFN_vkCmdWriteMicromapsPropertiesEXT( vkGetDeviceProcAddr( device, "vkCmdWriteMicromapsPropertiesEXT" ) ); + vkGetDeviceMicromapCompatibilityEXT = PFN_vkGetDeviceMicromapCompatibilityEXT( vkGetDeviceProcAddr( device, "vkGetDeviceMicromapCompatibilityEXT" ) ); + vkGetMicromapBuildSizesEXT = PFN_vkGetMicromapBuildSizesEXT( vkGetDeviceProcAddr( device, "vkGetMicromapBuildSizesEXT" ) ); + + //=== VK_HUAWEI_cluster_culling_shader === + vkCmdDrawClusterHUAWEI = PFN_vkCmdDrawClusterHUAWEI( vkGetDeviceProcAddr( device, "vkCmdDrawClusterHUAWEI" ) ); + vkCmdDrawClusterIndirectHUAWEI = PFN_vkCmdDrawClusterIndirectHUAWEI( vkGetDeviceProcAddr( device, "vkCmdDrawClusterIndirectHUAWEI" ) ); + + //=== VK_EXT_pageable_device_local_memory === + vkSetDeviceMemoryPriorityEXT = PFN_vkSetDeviceMemoryPriorityEXT( vkGetDeviceProcAddr( device, "vkSetDeviceMemoryPriorityEXT" ) ); + + //=== VK_KHR_maintenance4 === + vkGetDeviceBufferMemoryRequirementsKHR = + PFN_vkGetDeviceBufferMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceBufferMemoryRequirements ) + vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR; + vkGetDeviceImageMemoryRequirementsKHR = + PFN_vkGetDeviceImageMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceImageMemoryRequirements ) + vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR; + vkGetDeviceImageSparseMemoryRequirementsKHR = + PFN_vkGetDeviceImageSparseMemoryRequirementsKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) ); + if ( !vkGetDeviceImageSparseMemoryRequirements ) + vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR; + + //=== VK_VALVE_descriptor_set_host_mapping === + vkGetDescriptorSetLayoutHostMappingInfoVALVE = + PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutHostMappingInfoVALVE" ) ); + vkGetDescriptorSetHostMappingVALVE = PFN_vkGetDescriptorSetHostMappingVALVE( vkGetDeviceProcAddr( device, "vkGetDescriptorSetHostMappingVALVE" ) ); + + //=== VK_NV_copy_memory_indirect === + vkCmdCopyMemoryIndirectNV = PFN_vkCmdCopyMemoryIndirectNV( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryIndirectNV" ) ); + vkCmdCopyMemoryToImageIndirectNV = PFN_vkCmdCopyMemoryToImageIndirectNV( vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToImageIndirectNV" ) ); + + //=== VK_NV_memory_decompression === + vkCmdDecompressMemoryNV = PFN_vkCmdDecompressMemoryNV( vkGetDeviceProcAddr( device, "vkCmdDecompressMemoryNV" ) ); + vkCmdDecompressMemoryIndirectCountNV = + PFN_vkCmdDecompressMemoryIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDecompressMemoryIndirectCountNV" ) ); + + //=== VK_NV_device_generated_commands_compute === + vkGetPipelineIndirectMemoryRequirementsNV = + PFN_vkGetPipelineIndirectMemoryRequirementsNV( vkGetDeviceProcAddr( device, "vkGetPipelineIndirectMemoryRequirementsNV" ) ); + vkCmdUpdatePipelineIndirectBufferNV = PFN_vkCmdUpdatePipelineIndirectBufferNV( vkGetDeviceProcAddr( device, "vkCmdUpdatePipelineIndirectBufferNV" ) ); + vkGetPipelineIndirectDeviceAddressNV = + PFN_vkGetPipelineIndirectDeviceAddressNV( vkGetDeviceProcAddr( device, "vkGetPipelineIndirectDeviceAddressNV" ) ); + + //=== VK_EXT_extended_dynamic_state3 === + vkCmdSetDepthClampEnableEXT = PFN_vkCmdSetDepthClampEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClampEnableEXT" ) ); + vkCmdSetPolygonModeEXT = PFN_vkCmdSetPolygonModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetPolygonModeEXT" ) ); + vkCmdSetRasterizationSamplesEXT = PFN_vkCmdSetRasterizationSamplesEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizationSamplesEXT" ) ); + vkCmdSetSampleMaskEXT = PFN_vkCmdSetSampleMaskEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleMaskEXT" ) ); + vkCmdSetAlphaToCoverageEnableEXT = PFN_vkCmdSetAlphaToCoverageEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetAlphaToCoverageEnableEXT" ) ); + vkCmdSetAlphaToOneEnableEXT = PFN_vkCmdSetAlphaToOneEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetAlphaToOneEnableEXT" ) ); + vkCmdSetLogicOpEnableEXT = PFN_vkCmdSetLogicOpEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEnableEXT" ) ); + vkCmdSetColorBlendEnableEXT = PFN_vkCmdSetColorBlendEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorBlendEnableEXT" ) ); + vkCmdSetColorBlendEquationEXT = PFN_vkCmdSetColorBlendEquationEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorBlendEquationEXT" ) ); + vkCmdSetColorWriteMaskEXT = PFN_vkCmdSetColorWriteMaskEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteMaskEXT" ) ); + vkCmdSetTessellationDomainOriginEXT = PFN_vkCmdSetTessellationDomainOriginEXT( vkGetDeviceProcAddr( device, "vkCmdSetTessellationDomainOriginEXT" ) ); + vkCmdSetRasterizationStreamEXT = PFN_vkCmdSetRasterizationStreamEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizationStreamEXT" ) ); + vkCmdSetConservativeRasterizationModeEXT = + PFN_vkCmdSetConservativeRasterizationModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetConservativeRasterizationModeEXT" ) ); + vkCmdSetExtraPrimitiveOverestimationSizeEXT = + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT( vkGetDeviceProcAddr( device, "vkCmdSetExtraPrimitiveOverestimationSizeEXT" ) ); + vkCmdSetDepthClipEnableEXT = PFN_vkCmdSetDepthClipEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClipEnableEXT" ) ); + vkCmdSetSampleLocationsEnableEXT = PFN_vkCmdSetSampleLocationsEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEnableEXT" ) ); + vkCmdSetColorBlendAdvancedEXT = PFN_vkCmdSetColorBlendAdvancedEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorBlendAdvancedEXT" ) ); + vkCmdSetProvokingVertexModeEXT = PFN_vkCmdSetProvokingVertexModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetProvokingVertexModeEXT" ) ); + vkCmdSetLineRasterizationModeEXT = PFN_vkCmdSetLineRasterizationModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineRasterizationModeEXT" ) ); + vkCmdSetLineStippleEnableEXT = PFN_vkCmdSetLineStippleEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEnableEXT" ) ); + vkCmdSetDepthClipNegativeOneToOneEXT = + PFN_vkCmdSetDepthClipNegativeOneToOneEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClipNegativeOneToOneEXT" ) ); + vkCmdSetViewportWScalingEnableNV = PFN_vkCmdSetViewportWScalingEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingEnableNV" ) ); + vkCmdSetViewportSwizzleNV = PFN_vkCmdSetViewportSwizzleNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportSwizzleNV" ) ); + vkCmdSetCoverageToColorEnableNV = PFN_vkCmdSetCoverageToColorEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageToColorEnableNV" ) ); + vkCmdSetCoverageToColorLocationNV = PFN_vkCmdSetCoverageToColorLocationNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageToColorLocationNV" ) ); + vkCmdSetCoverageModulationModeNV = PFN_vkCmdSetCoverageModulationModeNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageModulationModeNV" ) ); + vkCmdSetCoverageModulationTableEnableNV = + PFN_vkCmdSetCoverageModulationTableEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageModulationTableEnableNV" ) ); + vkCmdSetCoverageModulationTableNV = PFN_vkCmdSetCoverageModulationTableNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageModulationTableNV" ) ); + vkCmdSetShadingRateImageEnableNV = PFN_vkCmdSetShadingRateImageEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetShadingRateImageEnableNV" ) ); + vkCmdSetRepresentativeFragmentTestEnableNV = + PFN_vkCmdSetRepresentativeFragmentTestEnableNV( vkGetDeviceProcAddr( device, "vkCmdSetRepresentativeFragmentTestEnableNV" ) ); + vkCmdSetCoverageReductionModeNV = PFN_vkCmdSetCoverageReductionModeNV( vkGetDeviceProcAddr( device, "vkCmdSetCoverageReductionModeNV" ) ); + + //=== VK_ARM_tensors === + vkCreateTensorARM = PFN_vkCreateTensorARM( vkGetDeviceProcAddr( device, "vkCreateTensorARM" ) ); + vkDestroyTensorARM = PFN_vkDestroyTensorARM( vkGetDeviceProcAddr( device, "vkDestroyTensorARM" ) ); + vkCreateTensorViewARM = PFN_vkCreateTensorViewARM( vkGetDeviceProcAddr( device, "vkCreateTensorViewARM" ) ); + vkDestroyTensorViewARM = PFN_vkDestroyTensorViewARM( vkGetDeviceProcAddr( device, "vkDestroyTensorViewARM" ) ); + vkGetTensorMemoryRequirementsARM = PFN_vkGetTensorMemoryRequirementsARM( vkGetDeviceProcAddr( device, "vkGetTensorMemoryRequirementsARM" ) ); + vkBindTensorMemoryARM = PFN_vkBindTensorMemoryARM( vkGetDeviceProcAddr( device, "vkBindTensorMemoryARM" ) ); + vkGetDeviceTensorMemoryRequirementsARM = + PFN_vkGetDeviceTensorMemoryRequirementsARM( vkGetDeviceProcAddr( device, "vkGetDeviceTensorMemoryRequirementsARM" ) ); + vkCmdCopyTensorARM = PFN_vkCmdCopyTensorARM( vkGetDeviceProcAddr( device, "vkCmdCopyTensorARM" ) ); + vkGetTensorOpaqueCaptureDescriptorDataARM = + PFN_vkGetTensorOpaqueCaptureDescriptorDataARM( vkGetDeviceProcAddr( device, "vkGetTensorOpaqueCaptureDescriptorDataARM" ) ); + vkGetTensorViewOpaqueCaptureDescriptorDataARM = + PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM( vkGetDeviceProcAddr( device, "vkGetTensorViewOpaqueCaptureDescriptorDataARM" ) ); + + //=== VK_EXT_shader_module_identifier === + vkGetShaderModuleIdentifierEXT = PFN_vkGetShaderModuleIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleIdentifierEXT" ) ); + vkGetShaderModuleCreateInfoIdentifierEXT = + PFN_vkGetShaderModuleCreateInfoIdentifierEXT( vkGetDeviceProcAddr( device, "vkGetShaderModuleCreateInfoIdentifierEXT" ) ); + + //=== VK_NV_optical_flow === + vkCreateOpticalFlowSessionNV = PFN_vkCreateOpticalFlowSessionNV( vkGetDeviceProcAddr( device, "vkCreateOpticalFlowSessionNV" ) ); + vkDestroyOpticalFlowSessionNV = PFN_vkDestroyOpticalFlowSessionNV( vkGetDeviceProcAddr( device, "vkDestroyOpticalFlowSessionNV" ) ); + vkBindOpticalFlowSessionImageNV = PFN_vkBindOpticalFlowSessionImageNV( vkGetDeviceProcAddr( device, "vkBindOpticalFlowSessionImageNV" ) ); + vkCmdOpticalFlowExecuteNV = PFN_vkCmdOpticalFlowExecuteNV( vkGetDeviceProcAddr( device, "vkCmdOpticalFlowExecuteNV" ) ); + + //=== VK_KHR_maintenance5 === + vkCmdBindIndexBuffer2KHR = PFN_vkCmdBindIndexBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer2KHR" ) ); + if ( !vkCmdBindIndexBuffer2 ) + vkCmdBindIndexBuffer2 = vkCmdBindIndexBuffer2KHR; + vkGetRenderingAreaGranularityKHR = PFN_vkGetRenderingAreaGranularityKHR( vkGetDeviceProcAddr( device, "vkGetRenderingAreaGranularityKHR" ) ); + if ( !vkGetRenderingAreaGranularity ) + vkGetRenderingAreaGranularity = vkGetRenderingAreaGranularityKHR; + vkGetDeviceImageSubresourceLayoutKHR = + PFN_vkGetDeviceImageSubresourceLayoutKHR( vkGetDeviceProcAddr( device, "vkGetDeviceImageSubresourceLayoutKHR" ) ); + if ( !vkGetDeviceImageSubresourceLayout ) + vkGetDeviceImageSubresourceLayout = vkGetDeviceImageSubresourceLayoutKHR; + vkGetImageSubresourceLayout2KHR = PFN_vkGetImageSubresourceLayout2KHR( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout2KHR" ) ); + if ( !vkGetImageSubresourceLayout2 ) + vkGetImageSubresourceLayout2 = vkGetImageSubresourceLayout2KHR; + + //=== VK_AMD_anti_lag === + vkAntiLagUpdateAMD = PFN_vkAntiLagUpdateAMD( vkGetDeviceProcAddr( device, "vkAntiLagUpdateAMD" ) ); + + //=== VK_KHR_present_wait2 === + vkWaitForPresent2KHR = PFN_vkWaitForPresent2KHR( vkGetDeviceProcAddr( device, "vkWaitForPresent2KHR" ) ); + + //=== VK_EXT_shader_object === + vkCreateShadersEXT = PFN_vkCreateShadersEXT( vkGetDeviceProcAddr( device, "vkCreateShadersEXT" ) ); + vkDestroyShaderEXT = PFN_vkDestroyShaderEXT( vkGetDeviceProcAddr( device, "vkDestroyShaderEXT" ) ); + vkGetShaderBinaryDataEXT = PFN_vkGetShaderBinaryDataEXT( vkGetDeviceProcAddr( device, "vkGetShaderBinaryDataEXT" ) ); + vkCmdBindShadersEXT = PFN_vkCmdBindShadersEXT( vkGetDeviceProcAddr( device, "vkCmdBindShadersEXT" ) ); + vkCmdSetDepthClampRangeEXT = PFN_vkCmdSetDepthClampRangeEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthClampRangeEXT" ) ); + + //=== VK_KHR_pipeline_binary === + vkCreatePipelineBinariesKHR = PFN_vkCreatePipelineBinariesKHR( vkGetDeviceProcAddr( device, "vkCreatePipelineBinariesKHR" ) ); + vkDestroyPipelineBinaryKHR = PFN_vkDestroyPipelineBinaryKHR( vkGetDeviceProcAddr( device, "vkDestroyPipelineBinaryKHR" ) ); + vkGetPipelineKeyKHR = PFN_vkGetPipelineKeyKHR( vkGetDeviceProcAddr( device, "vkGetPipelineKeyKHR" ) ); + vkGetPipelineBinaryDataKHR = PFN_vkGetPipelineBinaryDataKHR( vkGetDeviceProcAddr( device, "vkGetPipelineBinaryDataKHR" ) ); + vkReleaseCapturedPipelineDataKHR = PFN_vkReleaseCapturedPipelineDataKHR( vkGetDeviceProcAddr( device, "vkReleaseCapturedPipelineDataKHR" ) ); + + //=== VK_QCOM_tile_properties === + vkGetFramebufferTilePropertiesQCOM = PFN_vkGetFramebufferTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetFramebufferTilePropertiesQCOM" ) ); + vkGetDynamicRenderingTilePropertiesQCOM = + PFN_vkGetDynamicRenderingTilePropertiesQCOM( vkGetDeviceProcAddr( device, "vkGetDynamicRenderingTilePropertiesQCOM" ) ); + + //=== VK_KHR_swapchain_maintenance1 === + vkReleaseSwapchainImagesKHR = PFN_vkReleaseSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkReleaseSwapchainImagesKHR" ) ); + + //=== VK_NV_cooperative_vector === + vkConvertCooperativeVectorMatrixNV = PFN_vkConvertCooperativeVectorMatrixNV( vkGetDeviceProcAddr( device, "vkConvertCooperativeVectorMatrixNV" ) ); + vkCmdConvertCooperativeVectorMatrixNV = + PFN_vkCmdConvertCooperativeVectorMatrixNV( vkGetDeviceProcAddr( device, "vkCmdConvertCooperativeVectorMatrixNV" ) ); + + //=== VK_NV_low_latency2 === + vkSetLatencySleepModeNV = PFN_vkSetLatencySleepModeNV( vkGetDeviceProcAddr( device, "vkSetLatencySleepModeNV" ) ); + vkLatencySleepNV = PFN_vkLatencySleepNV( vkGetDeviceProcAddr( device, "vkLatencySleepNV" ) ); + vkSetLatencyMarkerNV = PFN_vkSetLatencyMarkerNV( vkGetDeviceProcAddr( device, "vkSetLatencyMarkerNV" ) ); + vkGetLatencyTimingsNV = PFN_vkGetLatencyTimingsNV( vkGetDeviceProcAddr( device, "vkGetLatencyTimingsNV" ) ); + vkQueueNotifyOutOfBandNV = PFN_vkQueueNotifyOutOfBandNV( vkGetDeviceProcAddr( device, "vkQueueNotifyOutOfBandNV" ) ); + + //=== VK_ARM_data_graph === + vkCreateDataGraphPipelinesARM = PFN_vkCreateDataGraphPipelinesARM( vkGetDeviceProcAddr( device, "vkCreateDataGraphPipelinesARM" ) ); + vkCreateDataGraphPipelineSessionARM = PFN_vkCreateDataGraphPipelineSessionARM( vkGetDeviceProcAddr( device, "vkCreateDataGraphPipelineSessionARM" ) ); + vkGetDataGraphPipelineSessionBindPointRequirementsARM = + PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelineSessionBindPointRequirementsARM" ) ); + vkGetDataGraphPipelineSessionMemoryRequirementsARM = + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelineSessionMemoryRequirementsARM" ) ); + vkBindDataGraphPipelineSessionMemoryARM = + PFN_vkBindDataGraphPipelineSessionMemoryARM( vkGetDeviceProcAddr( device, "vkBindDataGraphPipelineSessionMemoryARM" ) ); + vkDestroyDataGraphPipelineSessionARM = + PFN_vkDestroyDataGraphPipelineSessionARM( vkGetDeviceProcAddr( device, "vkDestroyDataGraphPipelineSessionARM" ) ); + vkCmdDispatchDataGraphARM = PFN_vkCmdDispatchDataGraphARM( vkGetDeviceProcAddr( device, "vkCmdDispatchDataGraphARM" ) ); + vkGetDataGraphPipelineAvailablePropertiesARM = + PFN_vkGetDataGraphPipelineAvailablePropertiesARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelineAvailablePropertiesARM" ) ); + vkGetDataGraphPipelinePropertiesARM = PFN_vkGetDataGraphPipelinePropertiesARM( vkGetDeviceProcAddr( device, "vkGetDataGraphPipelinePropertiesARM" ) ); + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + vkCmdSetAttachmentFeedbackLoopEnableEXT = + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetAttachmentFeedbackLoopEnableEXT" ) ); + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + vkGetScreenBufferPropertiesQNX = PFN_vkGetScreenBufferPropertiesQNX( vkGetDeviceProcAddr( device, "vkGetScreenBufferPropertiesQNX" ) ); +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + vkCmdSetLineStippleKHR = PFN_vkCmdSetLineStippleKHR( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleKHR" ) ); + if ( !vkCmdSetLineStipple ) + vkCmdSetLineStipple = vkCmdSetLineStippleKHR; + + //=== VK_KHR_calibrated_timestamps === + vkGetCalibratedTimestampsKHR = PFN_vkGetCalibratedTimestampsKHR( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsKHR" ) ); + + //=== VK_KHR_maintenance6 === + vkCmdBindDescriptorSets2KHR = PFN_vkCmdBindDescriptorSets2KHR( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets2KHR" ) ); + if ( !vkCmdBindDescriptorSets2 ) + vkCmdBindDescriptorSets2 = vkCmdBindDescriptorSets2KHR; + vkCmdPushConstants2KHR = PFN_vkCmdPushConstants2KHR( vkGetDeviceProcAddr( device, "vkCmdPushConstants2KHR" ) ); + if ( !vkCmdPushConstants2 ) + vkCmdPushConstants2 = vkCmdPushConstants2KHR; + vkCmdPushDescriptorSet2KHR = PFN_vkCmdPushDescriptorSet2KHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSet2KHR" ) ); + if ( !vkCmdPushDescriptorSet2 ) + vkCmdPushDescriptorSet2 = vkCmdPushDescriptorSet2KHR; + vkCmdPushDescriptorSetWithTemplate2KHR = + PFN_vkCmdPushDescriptorSetWithTemplate2KHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplate2KHR" ) ); + if ( !vkCmdPushDescriptorSetWithTemplate2 ) + vkCmdPushDescriptorSetWithTemplate2 = vkCmdPushDescriptorSetWithTemplate2KHR; + vkCmdSetDescriptorBufferOffsets2EXT = PFN_vkCmdSetDescriptorBufferOffsets2EXT( vkGetDeviceProcAddr( device, "vkCmdSetDescriptorBufferOffsets2EXT" ) ); + vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = + PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT" ) ); + + //=== VK_QCOM_tile_memory_heap === + vkCmdBindTileMemoryQCOM = PFN_vkCmdBindTileMemoryQCOM( vkGetDeviceProcAddr( device, "vkCmdBindTileMemoryQCOM" ) ); + + //=== VK_NV_external_compute_queue === + vkCreateExternalComputeQueueNV = PFN_vkCreateExternalComputeQueueNV( vkGetDeviceProcAddr( device, "vkCreateExternalComputeQueueNV" ) ); + vkDestroyExternalComputeQueueNV = PFN_vkDestroyExternalComputeQueueNV( vkGetDeviceProcAddr( device, "vkDestroyExternalComputeQueueNV" ) ); + vkGetExternalComputeQueueDataNV = PFN_vkGetExternalComputeQueueDataNV( vkGetDeviceProcAddr( device, "vkGetExternalComputeQueueDataNV" ) ); + + //=== VK_NV_cluster_acceleration_structure === + vkGetClusterAccelerationStructureBuildSizesNV = + PFN_vkGetClusterAccelerationStructureBuildSizesNV( vkGetDeviceProcAddr( device, "vkGetClusterAccelerationStructureBuildSizesNV" ) ); + vkCmdBuildClusterAccelerationStructureIndirectNV = + PFN_vkCmdBuildClusterAccelerationStructureIndirectNV( vkGetDeviceProcAddr( device, "vkCmdBuildClusterAccelerationStructureIndirectNV" ) ); + + //=== VK_NV_partitioned_acceleration_structure === + vkGetPartitionedAccelerationStructuresBuildSizesNV = + PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV( vkGetDeviceProcAddr( device, "vkGetPartitionedAccelerationStructuresBuildSizesNV" ) ); + vkCmdBuildPartitionedAccelerationStructuresNV = + PFN_vkCmdBuildPartitionedAccelerationStructuresNV( vkGetDeviceProcAddr( device, "vkCmdBuildPartitionedAccelerationStructuresNV" ) ); + + //=== VK_EXT_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsEXT = + PFN_vkGetGeneratedCommandsMemoryRequirementsEXT( vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsEXT" ) ); + vkCmdPreprocessGeneratedCommandsEXT = PFN_vkCmdPreprocessGeneratedCommandsEXT( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsEXT" ) ); + vkCmdExecuteGeneratedCommandsEXT = PFN_vkCmdExecuteGeneratedCommandsEXT( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsEXT" ) ); + vkCreateIndirectCommandsLayoutEXT = PFN_vkCreateIndirectCommandsLayoutEXT( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutEXT" ) ); + vkDestroyIndirectCommandsLayoutEXT = PFN_vkDestroyIndirectCommandsLayoutEXT( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutEXT" ) ); + vkCreateIndirectExecutionSetEXT = PFN_vkCreateIndirectExecutionSetEXT( vkGetDeviceProcAddr( device, "vkCreateIndirectExecutionSetEXT" ) ); + vkDestroyIndirectExecutionSetEXT = PFN_vkDestroyIndirectExecutionSetEXT( vkGetDeviceProcAddr( device, "vkDestroyIndirectExecutionSetEXT" ) ); + vkUpdateIndirectExecutionSetPipelineEXT = + PFN_vkUpdateIndirectExecutionSetPipelineEXT( vkGetDeviceProcAddr( device, "vkUpdateIndirectExecutionSetPipelineEXT" ) ); + vkUpdateIndirectExecutionSetShaderEXT = + PFN_vkUpdateIndirectExecutionSetShaderEXT( vkGetDeviceProcAddr( device, "vkUpdateIndirectExecutionSetShaderEXT" ) ); + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + vkGetMemoryMetalHandleEXT = PFN_vkGetMemoryMetalHandleEXT( vkGetDeviceProcAddr( device, "vkGetMemoryMetalHandleEXT" ) ); + vkGetMemoryMetalHandlePropertiesEXT = PFN_vkGetMemoryMetalHandlePropertiesEXT( vkGetDeviceProcAddr( device, "vkGetMemoryMetalHandlePropertiesEXT" ) ); +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + vkCmdEndRendering2EXT = PFN_vkCmdEndRendering2EXT( vkGetDeviceProcAddr( device, "vkCmdEndRendering2EXT" ) ); + } + + public: + //=== VK_VERSION_1_0 === + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; + PFN_vkDestroyDevice vkDestroyDevice = 0; + PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; + PFN_vkQueueSubmit vkQueueSubmit = 0; + PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; + PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; + PFN_vkAllocateMemory vkAllocateMemory = 0; + PFN_vkFreeMemory vkFreeMemory = 0; + PFN_vkMapMemory vkMapMemory = 0; + PFN_vkUnmapMemory vkUnmapMemory = 0; + PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; + PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; + PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; + PFN_vkBindBufferMemory vkBindBufferMemory = 0; + PFN_vkBindImageMemory vkBindImageMemory = 0; + PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; + PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; + PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements = 0; + PFN_vkQueueBindSparse vkQueueBindSparse = 0; + PFN_vkCreateFence vkCreateFence = 0; + PFN_vkDestroyFence vkDestroyFence = 0; + PFN_vkResetFences vkResetFences = 0; + PFN_vkGetFenceStatus vkGetFenceStatus = 0; + PFN_vkWaitForFences vkWaitForFences = 0; + PFN_vkCreateSemaphore vkCreateSemaphore = 0; + PFN_vkDestroySemaphore vkDestroySemaphore = 0; + PFN_vkCreateEvent vkCreateEvent = 0; + PFN_vkDestroyEvent vkDestroyEvent = 0; + PFN_vkGetEventStatus vkGetEventStatus = 0; + PFN_vkSetEvent vkSetEvent = 0; + PFN_vkResetEvent vkResetEvent = 0; + PFN_vkCreateQueryPool vkCreateQueryPool = 0; + PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; + PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; + PFN_vkCreateBuffer vkCreateBuffer = 0; + PFN_vkDestroyBuffer vkDestroyBuffer = 0; + PFN_vkCreateBufferView vkCreateBufferView = 0; + PFN_vkDestroyBufferView vkDestroyBufferView = 0; + PFN_vkCreateImage vkCreateImage = 0; + PFN_vkDestroyImage vkDestroyImage = 0; + PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; + PFN_vkCreateImageView vkCreateImageView = 0; + PFN_vkDestroyImageView vkDestroyImageView = 0; + PFN_vkCreateShaderModule vkCreateShaderModule = 0; + PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; + PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; + PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; + PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; + PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; + PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines = 0; + PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; + PFN_vkDestroyPipeline vkDestroyPipeline = 0; + PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; + PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; + PFN_vkCreateSampler vkCreateSampler = 0; + PFN_vkDestroySampler vkDestroySampler = 0; + PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; + PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; + PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; + PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; + PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; + PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; + PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; + PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; + PFN_vkCreateFramebuffer vkCreateFramebuffer = 0; + PFN_vkDestroyFramebuffer vkDestroyFramebuffer = 0; + PFN_vkCreateRenderPass vkCreateRenderPass = 0; + PFN_vkDestroyRenderPass vkDestroyRenderPass = 0; + PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity = 0; + PFN_vkCreateCommandPool vkCreateCommandPool = 0; + PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; + PFN_vkResetCommandPool vkResetCommandPool = 0; + PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; + PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; + PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; + PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; + PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; + PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; + PFN_vkCmdSetViewport vkCmdSetViewport = 0; + PFN_vkCmdSetScissor vkCmdSetScissor = 0; + PFN_vkCmdSetLineWidth vkCmdSetLineWidth = 0; + PFN_vkCmdSetDepthBias vkCmdSetDepthBias = 0; + PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants = 0; + PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds = 0; + PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = 0; + PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = 0; + PFN_vkCmdSetStencilReference vkCmdSetStencilReference = 0; + PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; + PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; + PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers = 0; + PFN_vkCmdDraw vkCmdDraw = 0; + PFN_vkCmdDrawIndexed vkCmdDrawIndexed = 0; + PFN_vkCmdDrawIndirect vkCmdDrawIndirect = 0; + PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect = 0; + PFN_vkCmdDispatch vkCmdDispatch = 0; + PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; + PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; + PFN_vkCmdCopyImage vkCmdCopyImage = 0; + PFN_vkCmdBlitImage vkCmdBlitImage = 0; + PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; + PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; + PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; + PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; + PFN_vkCmdClearColorImage vkCmdClearColorImage = 0; + PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage = 0; + PFN_vkCmdClearAttachments vkCmdClearAttachments = 0; + PFN_vkCmdResolveImage vkCmdResolveImage = 0; + PFN_vkCmdSetEvent vkCmdSetEvent = 0; + PFN_vkCmdResetEvent vkCmdResetEvent = 0; + PFN_vkCmdWaitEvents vkCmdWaitEvents = 0; + PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; + PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; + PFN_vkCmdEndQuery vkCmdEndQuery = 0; + PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; + PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; + PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; + PFN_vkCmdPushConstants vkCmdPushConstants = 0; + PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass = 0; + PFN_vkCmdNextSubpass vkCmdNextSubpass = 0; + PFN_vkCmdEndRenderPass vkCmdEndRenderPass = 0; + PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; + + //=== VK_VERSION_1_1 === + PFN_vkBindBufferMemory2 vkBindBufferMemory2 = 0; + PFN_vkBindImageMemory2 vkBindImageMemory2 = 0; + PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures = 0; + PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask = 0; + PFN_vkCmdDispatchBase vkCmdDispatchBase = 0; + PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2 = 0; + PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2 = 0; + PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2 = 0; + PFN_vkTrimCommandPool vkTrimCommandPool = 0; + PFN_vkGetDeviceQueue2 vkGetDeviceQueue2 = 0; + PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion = 0; + PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion = 0; + PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate = 0; + PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate = 0; + PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate = 0; + PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport = 0; + + //=== VK_VERSION_1_2 === + PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount = 0; + PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount = 0; + PFN_vkCreateRenderPass2 vkCreateRenderPass2 = 0; + PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2 = 0; + PFN_vkCmdNextSubpass2 vkCmdNextSubpass2 = 0; + PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2 = 0; + PFN_vkResetQueryPool vkResetQueryPool = 0; + PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue = 0; + PFN_vkWaitSemaphores vkWaitSemaphores = 0; + PFN_vkSignalSemaphore vkSignalSemaphore = 0; + PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = 0; + PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0; + PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0; + + //=== VK_VERSION_1_3 === + PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot = 0; + PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot = 0; + PFN_vkSetPrivateData vkSetPrivateData = 0; + PFN_vkGetPrivateData vkGetPrivateData = 0; + PFN_vkCmdSetEvent2 vkCmdSetEvent2 = 0; + PFN_vkCmdResetEvent2 vkCmdResetEvent2 = 0; + PFN_vkCmdWaitEvents2 vkCmdWaitEvents2 = 0; + PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = 0; + PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2 = 0; + PFN_vkQueueSubmit2 vkQueueSubmit2 = 0; + PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2 = 0; + PFN_vkCmdCopyImage2 vkCmdCopyImage2 = 0; + PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2 = 0; + PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2 = 0; + PFN_vkCmdBlitImage2 vkCmdBlitImage2 = 0; + PFN_vkCmdResolveImage2 vkCmdResolveImage2 = 0; + PFN_vkCmdBeginRendering vkCmdBeginRendering = 0; + PFN_vkCmdEndRendering vkCmdEndRendering = 0; + PFN_vkCmdSetCullMode vkCmdSetCullMode = 0; + PFN_vkCmdSetFrontFace vkCmdSetFrontFace = 0; + PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology = 0; + PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount = 0; + PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount = 0; + PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2 = 0; + PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable = 0; + PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable = 0; + PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp = 0; + PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable = 0; + PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable = 0; + PFN_vkCmdSetStencilOp vkCmdSetStencilOp = 0; + PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable = 0; + PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable = 0; + PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable = 0; + PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements = 0; + PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements = 0; + PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements = 0; + + //=== VK_VERSION_1_4 === + PFN_vkCmdSetLineStipple vkCmdSetLineStipple = 0; + PFN_vkMapMemory2 vkMapMemory2 = 0; + PFN_vkUnmapMemory2 vkUnmapMemory2 = 0; + PFN_vkCmdBindIndexBuffer2 vkCmdBindIndexBuffer2 = 0; + PFN_vkGetRenderingAreaGranularity vkGetRenderingAreaGranularity = 0; + PFN_vkGetDeviceImageSubresourceLayout vkGetDeviceImageSubresourceLayout = 0; + PFN_vkGetImageSubresourceLayout2 vkGetImageSubresourceLayout2 = 0; + PFN_vkCmdPushDescriptorSet vkCmdPushDescriptorSet = 0; + PFN_vkCmdPushDescriptorSetWithTemplate vkCmdPushDescriptorSetWithTemplate = 0; + PFN_vkCmdSetRenderingAttachmentLocations vkCmdSetRenderingAttachmentLocations = 0; + PFN_vkCmdSetRenderingInputAttachmentIndices vkCmdSetRenderingInputAttachmentIndices = 0; + PFN_vkCmdBindDescriptorSets2 vkCmdBindDescriptorSets2 = 0; + PFN_vkCmdPushConstants2 vkCmdPushConstants2 = 0; + PFN_vkCmdPushDescriptorSet2 vkCmdPushDescriptorSet2 = 0; + PFN_vkCmdPushDescriptorSetWithTemplate2 vkCmdPushDescriptorSetWithTemplate2 = 0; + PFN_vkCopyMemoryToImage vkCopyMemoryToImage = 0; + PFN_vkCopyImageToMemory vkCopyImageToMemory = 0; + PFN_vkCopyImageToImage vkCopyImageToImage = 0; + PFN_vkTransitionImageLayout vkTransitionImageLayout = 0; + + //=== VK_KHR_swapchain === + PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = 0; + PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = 0; + PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = 0; + PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR = 0; + PFN_vkQueuePresentKHR vkQueuePresentKHR = 0; + PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR = 0; + PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR = 0; + PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR = 0; + + //=== VK_KHR_display_swapchain === + PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR = 0; + + //=== VK_EXT_debug_marker === + PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT = 0; + PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT = 0; + PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT = 0; + PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT = 0; + PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT = 0; + + //=== VK_KHR_video_queue === + PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR = 0; + PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR = 0; + PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR = 0; + PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR = 0; + PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR = 0; + PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR = 0; + PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR = 0; + PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR = 0; + PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR = 0; + PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR = 0; + + //=== VK_KHR_video_decode_queue === + PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR = 0; + + //=== VK_EXT_transform_feedback === + PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT = 0; + PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT = 0; + PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT = 0; + PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT = 0; + PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT = 0; + PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT = 0; + + //=== VK_NVX_binary_import === + PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX = 0; + PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX = 0; + PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX = 0; + PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX = 0; + PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX = 0; + + //=== VK_NVX_image_view_handle === + PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX = 0; + PFN_vkGetImageViewHandle64NVX vkGetImageViewHandle64NVX = 0; + PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX = 0; + + //=== VK_AMD_draw_indirect_count === + PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD = 0; + PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD = 0; + + //=== VK_AMD_shader_info === + PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0; + + //=== VK_KHR_dynamic_rendering === + PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = 0; + PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV = 0; +# else + PFN_dummy vkGetMemoryWin32HandleNV_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_device_group === + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR = 0; + PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR = 0; + PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR = 0; + + //=== VK_KHR_maintenance1 === + PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = 0; + PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = 0; +# else + PFN_dummy vkGetMemoryWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetMemoryWin32HandlePropertiesKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = 0; + PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = 0; + PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = 0; +# else + PFN_dummy vkImportSemaphoreWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetSemaphoreWin32HandleKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR = 0; + PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = 0; + + //=== VK_KHR_push_descriptor === + PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR = 0; + PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR = 0; + + //=== VK_EXT_conditional_rendering === + PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT = 0; + PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT = 0; + + //=== VK_KHR_descriptor_update_template === + PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR = 0; + PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR = 0; + PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR = 0; + + //=== VK_NV_clip_space_w_scaling === + PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV = 0; + + //=== VK_EXT_display_control === + PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT = 0; + PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT = 0; + PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT = 0; + PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT = 0; + + //=== VK_GOOGLE_display_timing === + PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE = 0; + PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE = 0; + + //=== VK_EXT_discard_rectangles === + PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT = 0; + PFN_vkCmdSetDiscardRectangleEnableEXT vkCmdSetDiscardRectangleEnableEXT = 0; + PFN_vkCmdSetDiscardRectangleModeEXT vkCmdSetDiscardRectangleModeEXT = 0; + + //=== VK_EXT_hdr_metadata === + PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT = 0; + + //=== VK_KHR_create_renderpass2 === + PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR = 0; + PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR = 0; + PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR = 0; + PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR = 0; + + //=== VK_KHR_shared_presentable_image === + PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR = 0; + PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR = 0; +# else + PFN_dummy vkImportFenceWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetFenceWin32HandleKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0; + PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0; + + //=== VK_KHR_performance_query === + PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0; + PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0; + + //=== VK_EXT_debug_utils === + PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0; + PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT = 0; + PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT = 0; + PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT = 0; + PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT = 0; + PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT = 0; + PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT = 0; + PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT = 0; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID = 0; + PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID = 0; +# else + PFN_dummy vkGetAndroidHardwareBufferPropertiesANDROID_placeholder = 0; + PFN_dummy vkGetMemoryAndroidHardwareBufferANDROID_placeholder = 0; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + PFN_vkCreateExecutionGraphPipelinesAMDX vkCreateExecutionGraphPipelinesAMDX = 0; + PFN_vkGetExecutionGraphPipelineScratchSizeAMDX vkGetExecutionGraphPipelineScratchSizeAMDX = 0; + PFN_vkGetExecutionGraphPipelineNodeIndexAMDX vkGetExecutionGraphPipelineNodeIndexAMDX = 0; + PFN_vkCmdInitializeGraphScratchMemoryAMDX vkCmdInitializeGraphScratchMemoryAMDX = 0; + PFN_vkCmdDispatchGraphAMDX vkCmdDispatchGraphAMDX = 0; + PFN_vkCmdDispatchGraphIndirectAMDX vkCmdDispatchGraphIndirectAMDX = 0; + PFN_vkCmdDispatchGraphIndirectCountAMDX vkCmdDispatchGraphIndirectCountAMDX = 0; +# else + PFN_dummy vkCreateExecutionGraphPipelinesAMDX_placeholder = 0; + PFN_dummy vkGetExecutionGraphPipelineScratchSizeAMDX_placeholder = 0; + PFN_dummy vkGetExecutionGraphPipelineNodeIndexAMDX_placeholder = 0; + PFN_dummy vkCmdInitializeGraphScratchMemoryAMDX_placeholder = 0; + PFN_dummy vkCmdDispatchGraphAMDX_placeholder = 0; + PFN_dummy vkCmdDispatchGraphIndirectAMDX_placeholder = 0; + PFN_dummy vkCmdDispatchGraphIndirectCountAMDX_placeholder = 0; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT = 0; + + //=== VK_KHR_get_memory_requirements2 === + PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR = 0; + PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR = 0; + PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR = 0; + + //=== VK_KHR_acceleration_structure === + PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR = 0; + PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR = 0; + PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR = 0; + PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR = 0; + PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR = 0; + PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR = 0; + PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR = 0; + PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR = 0; + PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR = 0; + PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR = 0; + PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR = 0; + PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR = 0; + PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR = 0; + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR = 0; + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR = 0; + PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR = 0; + + //=== VK_KHR_ray_tracing_pipeline === + PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR = 0; + PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR = 0; + PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR = 0; + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = 0; + PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR = 0; + PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR = 0; + PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR = 0; + + //=== VK_KHR_sampler_ycbcr_conversion === + PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR = 0; + PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR = 0; + + //=== VK_KHR_bind_memory2 === + PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR = 0; + PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR = 0; + + //=== VK_EXT_image_drm_format_modifier === + PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT = 0; + + //=== VK_EXT_validation_cache === + PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT = 0; + PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT = 0; + PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT = 0; + PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT = 0; + + //=== VK_NV_shading_rate_image === + PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV = 0; + PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV = 0; + PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0; + + //=== VK_NV_ray_tracing === + PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV = 0; + PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV = 0; + PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV = 0; + PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV = 0; + PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV = 0; + PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV = 0; + PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV = 0; + PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV = 0; + PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV = 0; + PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV = 0; + PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV = 0; + PFN_vkCompileDeferredNV vkCompileDeferredNV = 0; + + //=== VK_KHR_maintenance3 === + PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0; + + //=== VK_KHR_draw_indirect_count === + PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0; + PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0; + + //=== VK_EXT_external_memory_host === + PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT = 0; + + //=== VK_AMD_buffer_marker === + PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0; + PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD = 0; + + //=== VK_EXT_calibrated_timestamps === + PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT = 0; + + //=== VK_NV_mesh_shader === + PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV = 0; + PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV = 0; + PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV = 0; + + //=== VK_NV_scissor_exclusive === + PFN_vkCmdSetExclusiveScissorEnableNV vkCmdSetExclusiveScissorEnableNV = 0; + PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV = 0; + + //=== VK_NV_device_diagnostic_checkpoints === + PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV = 0; + PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV = 0; + PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV = 0; + + //=== VK_KHR_timeline_semaphore === + PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR = 0; + PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR = 0; + PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR = 0; + + //=== VK_INTEL_performance_query === + PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL = 0; + PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL = 0; + PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL = 0; + PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL = 0; + PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL = 0; + PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL = 0; + PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL = 0; + PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL = 0; + PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL = 0; + + //=== VK_AMD_display_native_hdr === + PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD = 0; + + //=== VK_KHR_fragment_shading_rate === + PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR = 0; + + //=== VK_KHR_dynamic_rendering_local_read === + PFN_vkCmdSetRenderingAttachmentLocationsKHR vkCmdSetRenderingAttachmentLocationsKHR = 0; + PFN_vkCmdSetRenderingInputAttachmentIndicesKHR vkCmdSetRenderingInputAttachmentIndicesKHR = 0; + + //=== VK_EXT_buffer_device_address === + PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT = 0; + + //=== VK_KHR_present_wait === + PFN_vkWaitForPresentKHR vkWaitForPresentKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT = 0; + PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT = 0; + PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT = 0; +# else + PFN_dummy vkAcquireFullScreenExclusiveModeEXT_placeholder = 0; + PFN_dummy vkReleaseFullScreenExclusiveModeEXT_placeholder = 0; + PFN_dummy vkGetDeviceGroupSurfacePresentModes2EXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_buffer_device_address === + PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR = 0; + PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR = 0; + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR = 0; + + //=== VK_EXT_line_rasterization === + PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT = 0; + + //=== VK_EXT_host_query_reset === + PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT = 0; + + //=== VK_EXT_extended_dynamic_state === + PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT = 0; + PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT = 0; + PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT = 0; + PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT = 0; + PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT = 0; + PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT = 0; + PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT = 0; + PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT = 0; + PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT = 0; + PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT = 0; + PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = 0; + PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = 0; + + //=== VK_KHR_deferred_host_operations === + PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR = 0; + PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR = 0; + PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR = 0; + PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR = 0; + PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR = 0; + + //=== VK_KHR_pipeline_executable_properties === + PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR = 0; + PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR = 0; + PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR = 0; + + //=== VK_EXT_host_image_copy === + PFN_vkCopyMemoryToImageEXT vkCopyMemoryToImageEXT = 0; + PFN_vkCopyImageToMemoryEXT vkCopyImageToMemoryEXT = 0; + PFN_vkCopyImageToImageEXT vkCopyImageToImageEXT = 0; + PFN_vkTransitionImageLayoutEXT vkTransitionImageLayoutEXT = 0; + PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT = 0; + + //=== VK_KHR_map_memory2 === + PFN_vkMapMemory2KHR vkMapMemory2KHR = 0; + PFN_vkUnmapMemory2KHR vkUnmapMemory2KHR = 0; + + //=== VK_EXT_swapchain_maintenance1 === + PFN_vkReleaseSwapchainImagesEXT vkReleaseSwapchainImagesEXT = 0; + + //=== VK_NV_device_generated_commands === + PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV = 0; + PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV = 0; + PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV = 0; + PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV = 0; + PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV = 0; + PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV = 0; + + //=== VK_EXT_depth_bias_control === + PFN_vkCmdSetDepthBias2EXT vkCmdSetDepthBias2EXT = 0; + + //=== VK_EXT_private_data === + PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0; + PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0; + PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT = 0; + PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT = 0; + + //=== VK_KHR_video_encode_queue === + PFN_vkGetEncodedVideoSessionParametersKHR vkGetEncodedVideoSessionParametersKHR = 0; + PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR = 0; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + PFN_vkCreateCudaModuleNV vkCreateCudaModuleNV = 0; + PFN_vkGetCudaModuleCacheNV vkGetCudaModuleCacheNV = 0; + PFN_vkCreateCudaFunctionNV vkCreateCudaFunctionNV = 0; + PFN_vkDestroyCudaModuleNV vkDestroyCudaModuleNV = 0; + PFN_vkDestroyCudaFunctionNV vkDestroyCudaFunctionNV = 0; + PFN_vkCmdCudaLaunchKernelNV vkCmdCudaLaunchKernelNV = 0; +# else + PFN_dummy vkCreateCudaModuleNV_placeholder = 0; + PFN_dummy vkGetCudaModuleCacheNV_placeholder = 0; + PFN_dummy vkCreateCudaFunctionNV_placeholder = 0; + PFN_dummy vkDestroyCudaModuleNV_placeholder = 0; + PFN_dummy vkDestroyCudaFunctionNV_placeholder = 0; + PFN_dummy vkCmdCudaLaunchKernelNV_placeholder = 0; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + PFN_vkCmdDispatchTileQCOM vkCmdDispatchTileQCOM = 0; + PFN_vkCmdBeginPerTileExecutionQCOM vkCmdBeginPerTileExecutionQCOM = 0; + PFN_vkCmdEndPerTileExecutionQCOM vkCmdEndPerTileExecutionQCOM = 0; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + PFN_vkExportMetalObjectsEXT vkExportMetalObjectsEXT = 0; +# else + PFN_dummy vkExportMetalObjectsEXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR = 0; + PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR = 0; + PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR = 0; + PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = 0; + PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR = 0; + PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = 0; + + //=== VK_EXT_descriptor_buffer === + PFN_vkGetDescriptorSetLayoutSizeEXT vkGetDescriptorSetLayoutSizeEXT = 0; + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT vkGetDescriptorSetLayoutBindingOffsetEXT = 0; + PFN_vkGetDescriptorEXT vkGetDescriptorEXT = 0; + PFN_vkCmdBindDescriptorBuffersEXT vkCmdBindDescriptorBuffersEXT = 0; + PFN_vkCmdSetDescriptorBufferOffsetsEXT vkCmdSetDescriptorBufferOffsetsEXT = 0; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT vkCmdBindDescriptorBufferEmbeddedSamplersEXT = 0; + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT vkGetBufferOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT vkGetImageOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT vkGetImageViewOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT vkGetSamplerOpaqueCaptureDescriptorDataEXT = 0; + PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT = 0; + + //=== VK_NV_fragment_shading_rate_enums === + PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV = 0; + + //=== VK_EXT_mesh_shader === + PFN_vkCmdDrawMeshTasksEXT vkCmdDrawMeshTasksEXT = 0; + PFN_vkCmdDrawMeshTasksIndirectEXT vkCmdDrawMeshTasksIndirectEXT = 0; + PFN_vkCmdDrawMeshTasksIndirectCountEXT vkCmdDrawMeshTasksIndirectCountEXT = 0; + + //=== VK_KHR_copy_commands2 === + PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR = 0; + PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR = 0; + PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR = 0; + PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR = 0; + PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR = 0; + PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR = 0; + + //=== VK_EXT_device_fault === + PFN_vkGetDeviceFaultInfoEXT vkGetDeviceFaultInfoEXT = 0; + + //=== VK_EXT_vertex_input_dynamic_state === + PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0; + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0; +# else + PFN_dummy vkGetMemoryZirconHandleFUCHSIA_placeholder = 0; + PFN_dummy vkGetMemoryZirconHandlePropertiesFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA = 0; + PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = 0; +# else + PFN_dummy vkImportSemaphoreZirconHandleFUCHSIA_placeholder = 0; + PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA = 0; + PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA = 0; + PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0; + PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA = 0; + PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA = 0; +# else + PFN_dummy vkCreateBufferCollectionFUCHSIA_placeholder = 0; + PFN_dummy vkSetBufferCollectionImageConstraintsFUCHSIA_placeholder = 0; + PFN_dummy vkSetBufferCollectionBufferConstraintsFUCHSIA_placeholder = 0; + PFN_dummy vkDestroyBufferCollectionFUCHSIA_placeholder = 0; + PFN_dummy vkGetBufferCollectionPropertiesFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0; + PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0; + + //=== VK_HUAWEI_invocation_mask === + PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI = 0; + + //=== VK_NV_external_memory_rdma === + PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV = 0; + + //=== VK_EXT_pipeline_properties === + PFN_vkGetPipelinePropertiesEXT vkGetPipelinePropertiesEXT = 0; + + //=== VK_EXT_extended_dynamic_state2 === + PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT = 0; + PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT = 0; + PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT = 0; + PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT = 0; + PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT = 0; + + //=== VK_EXT_color_write_enable === + PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT = 0; + + //=== VK_KHR_ray_tracing_maintenance1 === + PFN_vkCmdTraceRaysIndirect2KHR vkCmdTraceRaysIndirect2KHR = 0; + + //=== VK_EXT_multi_draw === + PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0; + PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0; + + //=== VK_EXT_opacity_micromap === + PFN_vkCreateMicromapEXT vkCreateMicromapEXT = 0; + PFN_vkDestroyMicromapEXT vkDestroyMicromapEXT = 0; + PFN_vkCmdBuildMicromapsEXT vkCmdBuildMicromapsEXT = 0; + PFN_vkBuildMicromapsEXT vkBuildMicromapsEXT = 0; + PFN_vkCopyMicromapEXT vkCopyMicromapEXT = 0; + PFN_vkCopyMicromapToMemoryEXT vkCopyMicromapToMemoryEXT = 0; + PFN_vkCopyMemoryToMicromapEXT vkCopyMemoryToMicromapEXT = 0; + PFN_vkWriteMicromapsPropertiesEXT vkWriteMicromapsPropertiesEXT = 0; + PFN_vkCmdCopyMicromapEXT vkCmdCopyMicromapEXT = 0; + PFN_vkCmdCopyMicromapToMemoryEXT vkCmdCopyMicromapToMemoryEXT = 0; + PFN_vkCmdCopyMemoryToMicromapEXT vkCmdCopyMemoryToMicromapEXT = 0; + PFN_vkCmdWriteMicromapsPropertiesEXT vkCmdWriteMicromapsPropertiesEXT = 0; + PFN_vkGetDeviceMicromapCompatibilityEXT vkGetDeviceMicromapCompatibilityEXT = 0; + PFN_vkGetMicromapBuildSizesEXT vkGetMicromapBuildSizesEXT = 0; + + //=== VK_HUAWEI_cluster_culling_shader === + PFN_vkCmdDrawClusterHUAWEI vkCmdDrawClusterHUAWEI = 0; + PFN_vkCmdDrawClusterIndirectHUAWEI vkCmdDrawClusterIndirectHUAWEI = 0; + + //=== VK_EXT_pageable_device_local_memory === + PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT = 0; + + //=== VK_KHR_maintenance4 === + PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR = 0; + PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR = 0; + PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR = 0; + + //=== VK_VALVE_descriptor_set_host_mapping === + PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE vkGetDescriptorSetLayoutHostMappingInfoVALVE = 0; + PFN_vkGetDescriptorSetHostMappingVALVE vkGetDescriptorSetHostMappingVALVE = 0; + + //=== VK_NV_copy_memory_indirect === + PFN_vkCmdCopyMemoryIndirectNV vkCmdCopyMemoryIndirectNV = 0; + PFN_vkCmdCopyMemoryToImageIndirectNV vkCmdCopyMemoryToImageIndirectNV = 0; + + //=== VK_NV_memory_decompression === + PFN_vkCmdDecompressMemoryNV vkCmdDecompressMemoryNV = 0; + PFN_vkCmdDecompressMemoryIndirectCountNV vkCmdDecompressMemoryIndirectCountNV = 0; + + //=== VK_NV_device_generated_commands_compute === + PFN_vkGetPipelineIndirectMemoryRequirementsNV vkGetPipelineIndirectMemoryRequirementsNV = 0; + PFN_vkCmdUpdatePipelineIndirectBufferNV vkCmdUpdatePipelineIndirectBufferNV = 0; + PFN_vkGetPipelineIndirectDeviceAddressNV vkGetPipelineIndirectDeviceAddressNV = 0; + + //=== VK_EXT_extended_dynamic_state3 === + PFN_vkCmdSetDepthClampEnableEXT vkCmdSetDepthClampEnableEXT = 0; + PFN_vkCmdSetPolygonModeEXT vkCmdSetPolygonModeEXT = 0; + PFN_vkCmdSetRasterizationSamplesEXT vkCmdSetRasterizationSamplesEXT = 0; + PFN_vkCmdSetSampleMaskEXT vkCmdSetSampleMaskEXT = 0; + PFN_vkCmdSetAlphaToCoverageEnableEXT vkCmdSetAlphaToCoverageEnableEXT = 0; + PFN_vkCmdSetAlphaToOneEnableEXT vkCmdSetAlphaToOneEnableEXT = 0; + PFN_vkCmdSetLogicOpEnableEXT vkCmdSetLogicOpEnableEXT = 0; + PFN_vkCmdSetColorBlendEnableEXT vkCmdSetColorBlendEnableEXT = 0; + PFN_vkCmdSetColorBlendEquationEXT vkCmdSetColorBlendEquationEXT = 0; + PFN_vkCmdSetColorWriteMaskEXT vkCmdSetColorWriteMaskEXT = 0; + PFN_vkCmdSetTessellationDomainOriginEXT vkCmdSetTessellationDomainOriginEXT = 0; + PFN_vkCmdSetRasterizationStreamEXT vkCmdSetRasterizationStreamEXT = 0; + PFN_vkCmdSetConservativeRasterizationModeEXT vkCmdSetConservativeRasterizationModeEXT = 0; + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT vkCmdSetExtraPrimitiveOverestimationSizeEXT = 0; + PFN_vkCmdSetDepthClipEnableEXT vkCmdSetDepthClipEnableEXT = 0; + PFN_vkCmdSetSampleLocationsEnableEXT vkCmdSetSampleLocationsEnableEXT = 0; + PFN_vkCmdSetColorBlendAdvancedEXT vkCmdSetColorBlendAdvancedEXT = 0; + PFN_vkCmdSetProvokingVertexModeEXT vkCmdSetProvokingVertexModeEXT = 0; + PFN_vkCmdSetLineRasterizationModeEXT vkCmdSetLineRasterizationModeEXT = 0; + PFN_vkCmdSetLineStippleEnableEXT vkCmdSetLineStippleEnableEXT = 0; + PFN_vkCmdSetDepthClipNegativeOneToOneEXT vkCmdSetDepthClipNegativeOneToOneEXT = 0; + PFN_vkCmdSetViewportWScalingEnableNV vkCmdSetViewportWScalingEnableNV = 0; + PFN_vkCmdSetViewportSwizzleNV vkCmdSetViewportSwizzleNV = 0; + PFN_vkCmdSetCoverageToColorEnableNV vkCmdSetCoverageToColorEnableNV = 0; + PFN_vkCmdSetCoverageToColorLocationNV vkCmdSetCoverageToColorLocationNV = 0; + PFN_vkCmdSetCoverageModulationModeNV vkCmdSetCoverageModulationModeNV = 0; + PFN_vkCmdSetCoverageModulationTableEnableNV vkCmdSetCoverageModulationTableEnableNV = 0; + PFN_vkCmdSetCoverageModulationTableNV vkCmdSetCoverageModulationTableNV = 0; + PFN_vkCmdSetShadingRateImageEnableNV vkCmdSetShadingRateImageEnableNV = 0; + PFN_vkCmdSetRepresentativeFragmentTestEnableNV vkCmdSetRepresentativeFragmentTestEnableNV = 0; + PFN_vkCmdSetCoverageReductionModeNV vkCmdSetCoverageReductionModeNV = 0; + + //=== VK_ARM_tensors === + PFN_vkCreateTensorARM vkCreateTensorARM = 0; + PFN_vkDestroyTensorARM vkDestroyTensorARM = 0; + PFN_vkCreateTensorViewARM vkCreateTensorViewARM = 0; + PFN_vkDestroyTensorViewARM vkDestroyTensorViewARM = 0; + PFN_vkGetTensorMemoryRequirementsARM vkGetTensorMemoryRequirementsARM = 0; + PFN_vkBindTensorMemoryARM vkBindTensorMemoryARM = 0; + PFN_vkGetDeviceTensorMemoryRequirementsARM vkGetDeviceTensorMemoryRequirementsARM = 0; + PFN_vkCmdCopyTensorARM vkCmdCopyTensorARM = 0; + PFN_vkGetTensorOpaqueCaptureDescriptorDataARM vkGetTensorOpaqueCaptureDescriptorDataARM = 0; + PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM vkGetTensorViewOpaqueCaptureDescriptorDataARM = 0; + + //=== VK_EXT_shader_module_identifier === + PFN_vkGetShaderModuleIdentifierEXT vkGetShaderModuleIdentifierEXT = 0; + PFN_vkGetShaderModuleCreateInfoIdentifierEXT vkGetShaderModuleCreateInfoIdentifierEXT = 0; + + //=== VK_NV_optical_flow === + PFN_vkCreateOpticalFlowSessionNV vkCreateOpticalFlowSessionNV = 0; + PFN_vkDestroyOpticalFlowSessionNV vkDestroyOpticalFlowSessionNV = 0; + PFN_vkBindOpticalFlowSessionImageNV vkBindOpticalFlowSessionImageNV = 0; + PFN_vkCmdOpticalFlowExecuteNV vkCmdOpticalFlowExecuteNV = 0; + + //=== VK_KHR_maintenance5 === + PFN_vkCmdBindIndexBuffer2KHR vkCmdBindIndexBuffer2KHR = 0; + PFN_vkGetRenderingAreaGranularityKHR vkGetRenderingAreaGranularityKHR = 0; + PFN_vkGetDeviceImageSubresourceLayoutKHR vkGetDeviceImageSubresourceLayoutKHR = 0; + PFN_vkGetImageSubresourceLayout2KHR vkGetImageSubresourceLayout2KHR = 0; + + //=== VK_AMD_anti_lag === + PFN_vkAntiLagUpdateAMD vkAntiLagUpdateAMD = 0; + + //=== VK_KHR_present_wait2 === + PFN_vkWaitForPresent2KHR vkWaitForPresent2KHR = 0; + + //=== VK_EXT_shader_object === + PFN_vkCreateShadersEXT vkCreateShadersEXT = 0; + PFN_vkDestroyShaderEXT vkDestroyShaderEXT = 0; + PFN_vkGetShaderBinaryDataEXT vkGetShaderBinaryDataEXT = 0; + PFN_vkCmdBindShadersEXT vkCmdBindShadersEXT = 0; + PFN_vkCmdSetDepthClampRangeEXT vkCmdSetDepthClampRangeEXT = 0; + + //=== VK_KHR_pipeline_binary === + PFN_vkCreatePipelineBinariesKHR vkCreatePipelineBinariesKHR = 0; + PFN_vkDestroyPipelineBinaryKHR vkDestroyPipelineBinaryKHR = 0; + PFN_vkGetPipelineKeyKHR vkGetPipelineKeyKHR = 0; + PFN_vkGetPipelineBinaryDataKHR vkGetPipelineBinaryDataKHR = 0; + PFN_vkReleaseCapturedPipelineDataKHR vkReleaseCapturedPipelineDataKHR = 0; + + //=== VK_QCOM_tile_properties === + PFN_vkGetFramebufferTilePropertiesQCOM vkGetFramebufferTilePropertiesQCOM = 0; + PFN_vkGetDynamicRenderingTilePropertiesQCOM vkGetDynamicRenderingTilePropertiesQCOM = 0; + + //=== VK_KHR_swapchain_maintenance1 === + PFN_vkReleaseSwapchainImagesKHR vkReleaseSwapchainImagesKHR = 0; + + //=== VK_NV_cooperative_vector === + PFN_vkConvertCooperativeVectorMatrixNV vkConvertCooperativeVectorMatrixNV = 0; + PFN_vkCmdConvertCooperativeVectorMatrixNV vkCmdConvertCooperativeVectorMatrixNV = 0; + + //=== VK_NV_low_latency2 === + PFN_vkSetLatencySleepModeNV vkSetLatencySleepModeNV = 0; + PFN_vkLatencySleepNV vkLatencySleepNV = 0; + PFN_vkSetLatencyMarkerNV vkSetLatencyMarkerNV = 0; + PFN_vkGetLatencyTimingsNV vkGetLatencyTimingsNV = 0; + PFN_vkQueueNotifyOutOfBandNV vkQueueNotifyOutOfBandNV = 0; + + //=== VK_ARM_data_graph === + PFN_vkCreateDataGraphPipelinesARM vkCreateDataGraphPipelinesARM = 0; + PFN_vkCreateDataGraphPipelineSessionARM vkCreateDataGraphPipelineSessionARM = 0; + PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM vkGetDataGraphPipelineSessionBindPointRequirementsARM = 0; + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM vkGetDataGraphPipelineSessionMemoryRequirementsARM = 0; + PFN_vkBindDataGraphPipelineSessionMemoryARM vkBindDataGraphPipelineSessionMemoryARM = 0; + PFN_vkDestroyDataGraphPipelineSessionARM vkDestroyDataGraphPipelineSessionARM = 0; + PFN_vkCmdDispatchDataGraphARM vkCmdDispatchDataGraphARM = 0; + PFN_vkGetDataGraphPipelineAvailablePropertiesARM vkGetDataGraphPipelineAvailablePropertiesARM = 0; + PFN_vkGetDataGraphPipelinePropertiesARM vkGetDataGraphPipelinePropertiesARM = 0; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT vkCmdSetAttachmentFeedbackLoopEnableEXT = 0; + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + PFN_vkGetScreenBufferPropertiesQNX vkGetScreenBufferPropertiesQNX = 0; +# else + PFN_dummy vkGetScreenBufferPropertiesQNX_placeholder = 0; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + PFN_vkCmdSetLineStippleKHR vkCmdSetLineStippleKHR = 0; + + //=== VK_KHR_calibrated_timestamps === + PFN_vkGetCalibratedTimestampsKHR vkGetCalibratedTimestampsKHR = 0; + + //=== VK_KHR_maintenance6 === + PFN_vkCmdBindDescriptorSets2KHR vkCmdBindDescriptorSets2KHR = 0; + PFN_vkCmdPushConstants2KHR vkCmdPushConstants2KHR = 0; + PFN_vkCmdPushDescriptorSet2KHR vkCmdPushDescriptorSet2KHR = 0; + PFN_vkCmdPushDescriptorSetWithTemplate2KHR vkCmdPushDescriptorSetWithTemplate2KHR = 0; + PFN_vkCmdSetDescriptorBufferOffsets2EXT vkCmdSetDescriptorBufferOffsets2EXT = 0; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT vkCmdBindDescriptorBufferEmbeddedSamplers2EXT = 0; + + //=== VK_QCOM_tile_memory_heap === + PFN_vkCmdBindTileMemoryQCOM vkCmdBindTileMemoryQCOM = 0; + + //=== VK_NV_external_compute_queue === + PFN_vkCreateExternalComputeQueueNV vkCreateExternalComputeQueueNV = 0; + PFN_vkDestroyExternalComputeQueueNV vkDestroyExternalComputeQueueNV = 0; + PFN_vkGetExternalComputeQueueDataNV vkGetExternalComputeQueueDataNV = 0; + + //=== VK_NV_cluster_acceleration_structure === + PFN_vkGetClusterAccelerationStructureBuildSizesNV vkGetClusterAccelerationStructureBuildSizesNV = 0; + PFN_vkCmdBuildClusterAccelerationStructureIndirectNV vkCmdBuildClusterAccelerationStructureIndirectNV = 0; + + //=== VK_NV_partitioned_acceleration_structure === + PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV vkGetPartitionedAccelerationStructuresBuildSizesNV = 0; + PFN_vkCmdBuildPartitionedAccelerationStructuresNV vkCmdBuildPartitionedAccelerationStructuresNV = 0; + + //=== VK_EXT_device_generated_commands === + PFN_vkGetGeneratedCommandsMemoryRequirementsEXT vkGetGeneratedCommandsMemoryRequirementsEXT = 0; + PFN_vkCmdPreprocessGeneratedCommandsEXT vkCmdPreprocessGeneratedCommandsEXT = 0; + PFN_vkCmdExecuteGeneratedCommandsEXT vkCmdExecuteGeneratedCommandsEXT = 0; + PFN_vkCreateIndirectCommandsLayoutEXT vkCreateIndirectCommandsLayoutEXT = 0; + PFN_vkDestroyIndirectCommandsLayoutEXT vkDestroyIndirectCommandsLayoutEXT = 0; + PFN_vkCreateIndirectExecutionSetEXT vkCreateIndirectExecutionSetEXT = 0; + PFN_vkDestroyIndirectExecutionSetEXT vkDestroyIndirectExecutionSetEXT = 0; + PFN_vkUpdateIndirectExecutionSetPipelineEXT vkUpdateIndirectExecutionSetPipelineEXT = 0; + PFN_vkUpdateIndirectExecutionSetShaderEXT vkUpdateIndirectExecutionSetShaderEXT = 0; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + PFN_vkGetMemoryMetalHandleEXT vkGetMemoryMetalHandleEXT = 0; + PFN_vkGetMemoryMetalHandlePropertiesEXT vkGetMemoryMetalHandlePropertiesEXT = 0; +# else + PFN_dummy vkGetMemoryMetalHandleEXT_placeholder = 0; + PFN_dummy vkGetMemoryMetalHandlePropertiesEXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + PFN_vkCmdEndRendering2EXT vkCmdEndRendering2EXT = 0; + }; + + } // namespace detail + + //======================================== + //=== RAII HANDLE forward declarations === + //======================================== + + //=== VK_VERSION_1_0 === + class Instance; + class PhysicalDevice; + class Device; + class Queue; + class DeviceMemory; + class Fence; + class Semaphore; + class Event; + class QueryPool; + class Buffer; + class BufferView; + class Image; + class ImageView; + class ShaderModule; + class PipelineCache; + class Pipeline; + class PipelineLayout; + class Sampler; + class DescriptorPool; + class DescriptorSet; + class DescriptorSetLayout; + class Framebuffer; + class RenderPass; + class CommandPool; + class CommandBuffer; + + //=== VK_VERSION_1_1 === + class SamplerYcbcrConversion; + class DescriptorUpdateTemplate; + + //=== VK_VERSION_1_3 === + class PrivateDataSlot; + + //=== VK_KHR_surface === + class SurfaceKHR; + + //=== VK_KHR_swapchain === + class SwapchainKHR; + + //=== VK_KHR_display === + class DisplayKHR; + class DisplayModeKHR; + + //=== VK_EXT_debug_report === + class DebugReportCallbackEXT; + + //=== VK_KHR_video_queue === + class VideoSessionKHR; + class VideoSessionParametersKHR; + + //=== VK_NVX_binary_import === + class CuModuleNVX; + class CuFunctionNVX; + + //=== VK_KHR_descriptor_update_template === + using DescriptorUpdateTemplateKHR = DescriptorUpdateTemplate; + + //=== VK_EXT_debug_utils === + class DebugUtilsMessengerEXT; + + //=== VK_KHR_acceleration_structure === + class AccelerationStructureKHR; + + //=== VK_KHR_sampler_ycbcr_conversion === + using SamplerYcbcrConversionKHR = SamplerYcbcrConversion; + + //=== VK_EXT_validation_cache === + class ValidationCacheEXT; + + //=== VK_NV_ray_tracing === + class AccelerationStructureNV; + + //=== VK_INTEL_performance_query === + class PerformanceConfigurationINTEL; + + //=== VK_KHR_deferred_host_operations === + class DeferredOperationKHR; + + //=== VK_NV_device_generated_commands === + class IndirectCommandsLayoutNV; + + //=== VK_EXT_private_data === + using PrivateDataSlotEXT = PrivateDataSlot; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + class CudaModuleNV; + class CudaFunctionNV; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + class BufferCollectionFUCHSIA; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + class MicromapEXT; + + //=== VK_ARM_tensors === + class TensorARM; + class TensorViewARM; + + //=== VK_NV_optical_flow === + class OpticalFlowSessionNV; + + //=== VK_EXT_shader_object === + class ShaderEXT; + + //=== VK_KHR_pipeline_binary === + class PipelineBinaryKHR; + + //=== VK_ARM_data_graph === + class DataGraphPipelineSessionARM; + + //=== VK_NV_external_compute_queue === + class ExternalComputeQueueNV; + + //=== VK_EXT_device_generated_commands === + class IndirectCommandsLayoutEXT; + class IndirectExecutionSetEXT; + + //==================== + //=== RAII HANDLES === + //==================== + + template + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = false; + }; + + class Context + { + public: +# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + Context() + : m_dispatcher( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::ContextDispatcher( + m_dynamicLoader.getProcAddress( "vkGetInstanceProcAddr" ) ) ) +# else + Context( PFN_vkGetInstanceProcAddr getInstanceProcAddr ) + : m_dispatcher( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::ContextDispatcher( getInstanceProcAddr ) ) +# endif + { + } + + ~Context() = default; + + Context( Context const & ) = delete; + Context( Context && rhs ) VULKAN_HPP_NOEXCEPT +# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + : m_dynamicLoader( std::move( rhs.m_dynamicLoader ) ) + , m_dispatcher( rhs.m_dispatcher.release() ) +# else + : m_dispatcher( rhs.m_dispatcher.release() ) +# endif + { + } + Context & operator=( Context const & ) = delete; + + Context & operator=( Context && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { +# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + m_dynamicLoader = std::move( rhs.m_dynamicLoader ); +# endif + m_dispatcher.reset( rhs.m_dispatcher.release() ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::ContextDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return &*m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context & rhs ) + { +# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + std::swap( m_dynamicLoader, rhs.m_dynamicLoader ); +# endif + m_dispatcher.swap( rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createInstance( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + VULKAN_HPP_NODISCARD std::vector + enumerateInstanceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + VULKAN_HPP_NODISCARD std::vector enumerateInstanceLayerProperties() const; + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkEnumerateInstanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceVersion.html + VULKAN_HPP_NODISCARD uint32_t enumerateInstanceVersion() const; + + private: +# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL + VULKAN_HPP_NAMESPACE::detail::DynamicLoader m_dynamicLoader; +# endif + std::unique_ptr m_dispatcher; + }; + + // wrapper class for handle VkInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkInstance.html + class Instance + { + public: + using CType = VkInstance; + using CppType = VULKAN_HPP_NAMESPACE::Instance; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eInstance; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eInstance; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context const & context, + VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = context.createInstance( createInfo, allocator ); + } +# endif + + Instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context const & context, + VkInstance instance, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_instance( instance ), m_allocator( static_cast( allocator ) ) + { + m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher( context.getDispatcher()->vkGetInstanceProcAddr, + static_cast( m_instance ) ) ); + } + + Instance( std::nullptr_t ) {} + + ~Instance() + { + clear(); + } + + Instance() = delete; + Instance( Instance const & ) = delete; + + Instance( Instance && rhs ) VULKAN_HPP_NOEXCEPT + : m_instance( VULKAN_HPP_NAMESPACE::exchange( rhs.m_instance, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( rhs.m_dispatcher.release() ) + { + } + + Instance & operator=( Instance const & ) = delete; + + Instance & operator=( Instance && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Instance const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_instance; + } + + VULKAN_HPP_NAMESPACE::Instance const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_instance ); + } + + operator VULKAN_HPP_NAMESPACE::Instance() const VULKAN_HPP_NOEXCEPT + { + return m_instance; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_instance ) + { + getDispatcher()->vkDestroyInstance( static_cast( m_instance ), reinterpret_cast( m_allocator ) ); + } + m_instance = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Instance release() + { + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_instance, nullptr ); + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return &*m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + enumeratePhysicalDevices() const; + + // wrapper function for command vkGetInstanceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetInstanceProcAddr.html + VULKAN_HPP_NODISCARD PFN_VoidFunction getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + VULKAN_HPP_NODISCARD std::vector enumeratePhysicalDeviceGroups() const; + + //=== VK_KHR_display === + + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDisplayPlaneSurfaceKHR( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createXlibSurfaceKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createXcbSurfaceKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createWaylandSurfaceKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createAndroidSurfaceKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createWin32SurfaceKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkDebugReportMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugReportMessageEXT.html + void debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const std::string & layerPrefix, + const std::string & message ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createStreamDescriptorSurfaceGGP( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_GGP*/ + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createViSurfaceNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_device_group_creation === + + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + VULKAN_HPP_NODISCARD std::vector enumeratePhysicalDeviceGroupsKHR() const; + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createIOSSurfaceMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createMacOSSurfaceMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkSubmitDebugUtilsMessageEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSubmitDebugUtilsMessageEXT.html + void submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, + const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createImagePipeSurfaceFUCHSIA( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createMetalSurfaceEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_headless_surface === + + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createHeadlessSurfaceEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDirectFBSurfaceEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createScreenSurfaceQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +# if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSurfaceOHOS( VULKAN_HPP_NAMESPACE::SurfaceCreateInfoOHOS const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_OHOS*/ + + private: + VULKAN_HPP_NAMESPACE::Instance m_instance = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + std::unique_ptr m_dispatcher; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPhysicalDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevice.html + class PhysicalDevice + { + public: + using CType = VkPhysicalDevice; + using CppType = VULKAN_HPP_NAMESPACE::PhysicalDevice; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePhysicalDevice; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePhysicalDevice; + + public: + PhysicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, VkPhysicalDevice physicalDevice ) + : m_physicalDevice( physicalDevice ), m_dispatcher( instance.getDispatcher() ) + { + } + + PhysicalDevice( std::nullptr_t ) {} + + ~PhysicalDevice() + { + clear(); + } + + PhysicalDevice() = delete; + + PhysicalDevice( PhysicalDevice const & rhs ) : m_physicalDevice( rhs.m_physicalDevice ), m_dispatcher( rhs.m_dispatcher ) {} + + PhysicalDevice( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT + : m_physicalDevice( VULKAN_HPP_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + PhysicalDevice & operator=( PhysicalDevice const & rhs ) + { + m_physicalDevice = rhs.m_physicalDevice; + m_dispatcher = rhs.m_dispatcher; + return *this; + } + + PhysicalDevice & operator=( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_physicalDevice, rhs.m_physicalDevice ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::PhysicalDevice const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_physicalDevice; + } + + VULKAN_HPP_NAMESPACE::PhysicalDevice const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_physicalDevice ); + } + + operator VULKAN_HPP_NAMESPACE::PhysicalDevice() const VULKAN_HPP_NOEXCEPT + { + return m_physicalDevice; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + m_physicalDevice = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::PhysicalDevice release() + { + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_physicalDevice, nullptr ); + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_physicalDevice, rhs.m_physicalDevice ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetPhysicalDeviceFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures getFeatures() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties + getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, + VULKAN_HPP_NAMESPACE::ImageType type, + VULKAN_HPP_NAMESPACE::ImageTiling tiling, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + // wrapper function for command vkGetPhysicalDeviceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties getProperties() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties() const; + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties getMemoryProperties() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDevice( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + VULKAN_HPP_NODISCARD std::vector + enumerateDeviceExtensionProperties( Optional layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + VULKAN_HPP_NODISCARD std::vector enumerateDeviceLayerProperties() const; + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, + VULKAN_HPP_NAMESPACE::ImageType type, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, + VULKAN_HPP_NAMESPACE::ImageTiling tiling ) const; + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 getFeatures2() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_NODISCARD StructureChain getFeatures2() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 getProperties2() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain getProperties2() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties2 getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2 + getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2() const; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template + VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2() const; + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 getMemoryProperties2() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_NODISCARD StructureChain getMemoryProperties2() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceExternalBufferProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties + getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceExternalFenceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFenceProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties + getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphoreProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties + getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + VULKAN_HPP_NODISCARD std::vector getToolProperties() const; + + //=== VK_KHR_surface === + + // wrapper function for command vkGetPhysicalDeviceSurfaceSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32 getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + VULKAN_HPP_NODISCARD std::vector + getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + VULKAN_HPP_NODISCARD std::vector + getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_KHR_swapchain === + + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + VULKAN_HPP_NODISCARD std::vector getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; + + //=== VK_KHR_display === + + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + VULKAN_HPP_NODISCARD std::vector getDisplayPropertiesKHR() const; + + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + VULKAN_HPP_NODISCARD std::vector getDisplayPlanePropertiesKHR() const; + + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const; + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + // wrapper function for command vkGetPhysicalDeviceXlibPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXlibPresentationSupportKHR.html + VULKAN_HPP_NODISCARD Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + // wrapper function for command vkGetPhysicalDeviceXcbPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html + VULKAN_HPP_NODISCARD Bool32 getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, + xcb_connection_t & connection, + xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + // wrapper function for command vkGetPhysicalDeviceWaylandPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWaylandPresentationSupportKHR.html + VULKAN_HPP_NODISCARD Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, struct wl_display & display ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + // wrapper function for command vkGetPhysicalDeviceWin32PresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWin32PresentationSupportKHR.html + VULKAN_HPP_NODISCARD Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_video_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR + getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR & videoProfile ) const; + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD StructureChain getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR & videoProfile ) const; + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + VULKAN_HPP_NODISCARD std::vector + getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template + VULKAN_HPP_NODISCARD std::vector + getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const; + + //=== VK_NV_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV getExternalImageFormatPropertiesNV( + VULKAN_HPP_NAMESPACE::Format format, + VULKAN_HPP_NAMESPACE::ImageType type, + VULKAN_HPP_NAMESPACE::ImageTiling tiling, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_KHR_get_physical_device_properties2 === + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 getFeatures2KHR() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getFeatures2KHR() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 getProperties2KHR() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getProperties2KHR() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::FormatProperties2 getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2 + getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2KHR() const; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template + VULKAN_HPP_NODISCARD std::vector getQueueFamilyProperties2KHR() const; + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + VULKAN_HPP_NODISCARD std::vector + getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const; + + //=== VK_KHR_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalBufferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties + getExternalBufferPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_external_semaphore_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties + getExternalSemaphorePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + + // wrapper function for command vkAcquireXlibDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireXlibDisplayEXT.html + void acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const; + + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; + + //=== VK_KHR_external_fence_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalFencePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFencePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties + getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_performance_query === + + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + VULKAN_HPP_NODISCARD + std::pair, std::vector> + enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.html + VULKAN_HPP_NODISCARD uint32_t getQueueFamilyPerformanceQueryPassesKHR( + const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_get_surface_capabilities2 === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR + getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + VULKAN_HPP_NODISCARD std::vector + getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template + VULKAN_HPP_NODISCARD std::vector getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; + + //=== VK_KHR_get_display_properties2 === + + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + VULKAN_HPP_NODISCARD std::vector getDisplayProperties2KHR() const; + + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + VULKAN_HPP_NODISCARD std::vector getDisplayPlaneProperties2KHR() const; + + // wrapper function for command vkGetDisplayPlaneCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilities2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR + getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo ) const; + + //=== VK_EXT_sample_locations === + + // wrapper function for command vkGetPhysicalDeviceMultisamplePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT + getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + VULKAN_HPP_NODISCARD std::vector getCalibrateableTimeDomainsEXT() const; + + //=== VK_KHR_fragment_shading_rate === + + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + VULKAN_HPP_NODISCARD std::vector getFragmentShadingRatesKHR() const; + + //=== VK_EXT_tooling_info === + + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + VULKAN_HPP_NODISCARD std::vector getToolPropertiesEXT() const; + + //=== VK_NV_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + VULKAN_HPP_NODISCARD std::vector getCooperativeMatrixPropertiesNV() const; + + //=== VK_NV_coverage_reduction_mode === + + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + VULKAN_HPP_NODISCARD std::vector getSupportedFramebufferMixedSamplesCombinationsNV() const; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + VULKAN_HPP_NODISCARD std::vector + getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_acquire_drm_display === + + // wrapper function for command vkAcquireDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireDrmDisplayEXT.html + void acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const; + + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR + getVideoEncodeQualityLevelPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo ) const; + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getVideoEncodeQualityLevelPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo ) const; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + getWinrtDisplayNV( uint32_t deviceRelativeId ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + // wrapper function for command vkGetPhysicalDeviceDirectFBPresentationSupportEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.html + VULKAN_HPP_NODISCARD Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + // wrapper function for command vkGetPhysicalDeviceScreenPresentationSupportQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceScreenPresentationSupportQNX.html + VULKAN_HPP_NODISCARD Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, struct _screen_window & window ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_ARM_tensors === + + // wrapper function for command vkGetPhysicalDeviceExternalTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalTensorPropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalTensorPropertiesARM + getExternalTensorPropertiesARM( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalTensorInfoARM & externalTensorInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_optical_flow === + + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + VULKAN_HPP_NODISCARD std::vector + getOpticalFlowImageFormatsNV( const VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatInfoNV & opticalFlowImageFormatInfo ) const; + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + VULKAN_HPP_NODISCARD std::vector getCooperativeVectorPropertiesNV() const; + + //=== VK_KHR_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + VULKAN_HPP_NODISCARD std::vector getCooperativeMatrixPropertiesKHR() const; + + //=== VK_ARM_data_graph === + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + VULKAN_HPP_NODISCARD std::vector + getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex ) const; + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphProcessingEnginePropertiesARM getQueueFamilyDataGraphProcessingEnginePropertiesARM( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & queueFamilyDataGraphProcessingEngineInfo ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + VULKAN_HPP_NODISCARD std::vector getCalibrateableTimeDomainsKHR() const; + + //=== VK_NV_cooperative_matrix2 === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + VULKAN_HPP_NODISCARD std::vector + getCooperativeMatrixFlexibleDimensionsPropertiesNV() const; + + private: + VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class PhysicalDevices : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + PhysicalDevices( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance ) + { + *this = instance.enumeratePhysicalDevices(); + } +# endif + + PhysicalDevices( std::nullptr_t ) {} + + PhysicalDevices() = delete; + PhysicalDevices( PhysicalDevices const & ) = delete; + PhysicalDevices( PhysicalDevices && rhs ) = default; + PhysicalDevices & operator=( PhysicalDevices const & ) = delete; + PhysicalDevices & operator=( PhysicalDevices && rhs ) = default; + + private: + PhysicalDevices( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDevice.html + class Device + { + public: + using CType = VkDevice; + using CppType = VULKAN_HPP_NAMESPACE::Device; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDevice; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDevice; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, + VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = physicalDevice.createDevice( createInfo, allocator ); + } +# endif + + Device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, + VkDevice device, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ), m_allocator( static_cast( allocator ) ) + { + m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher( physicalDevice.getDispatcher()->vkGetDeviceProcAddr, + static_cast( m_device ) ) ); + } + + Device( std::nullptr_t ) {} + + ~Device() + { + clear(); + } + + Device() = delete; + Device( Device const & ) = delete; + + Device( Device && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( rhs.m_dispatcher.release() ) + { + } + + Device & operator=( Device const & ) = delete; + + Device & operator=( Device && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Device const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::Device const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_device ); + } + + operator VULKAN_HPP_NAMESPACE::Device() const VULKAN_HPP_NOEXCEPT + { + return m_device; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_device ) + { + getDispatcher()->vkDestroyDevice( static_cast( m_device ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Device release() + { + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_device, nullptr ); + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return &*m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetDeviceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceProcAddr.html + VULKAN_HPP_NODISCARD PFN_VoidFunction getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkDeviceWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeviceWaitIdle.html + void waitIdle() const; + + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + allocateMemory( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkFlushMappedMemoryRanges, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFlushMappedMemoryRanges.html + void flushMappedMemoryRanges( ArrayProxy const & memoryRanges ) const; + + // wrapper function for command vkInvalidateMappedMemoryRanges, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInvalidateMappedMemoryRanges.html + void invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges ) const; + + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createFence( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkResetFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetFences.html + void resetFences( ArrayProxy const & fences ) const; + + // wrapper function for command vkWaitForFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForFences.html + VULKAN_HPP_NODISCARD Result waitForFences( ArrayProxy const & fences, + VULKAN_HPP_NAMESPACE::Bool32 waitAll, + uint64_t timeout ) const; + + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSemaphore( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createEvent( VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createQueryPool( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createBuffer( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createBufferView( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createImage( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createImageView( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createShaderModule( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createGraphicsPipelines( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createGraphicsPipeline( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createComputePipelines( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createComputePipeline( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSampler( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateDescriptorSetLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + allocateDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) const; + + // wrapper function for command vkUpdateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSets.html + void updateDescriptorSets( ArrayProxy const & descriptorWrites, + ArrayProxy const & descriptorCopies ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createFramebuffer( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createRenderPass( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createCommandPool( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + allocateCommandBuffers( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) const; + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkBindBufferMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2.html + void bindBufferMemory2( ArrayProxy const & bindInfos ) const; + + // wrapper function for command vkBindImageMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2.html + void bindImageMemory2( ArrayProxy const & bindInfos ) const; + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeatures.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags + getGroupPeerMemoryFeatures( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const; + + // wrapper function for command vkGetDeviceQueue2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue2.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + getQueue2( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate>::Type + createDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport + getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_NODISCARD StructureChain + getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createRenderPass2( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkWaitSemaphores, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphores.html + VULKAN_HPP_NODISCARD Result waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const; + + // wrapper function for command vkSignalSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphore.html + void signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const; + + // wrapper function for command vkGetBufferDeviceAddress, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddress.html + VULKAN_HPP_NODISCARD DeviceAddress getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddress.html + VULKAN_HPP_NODISCARD uint64_t getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html + VULKAN_HPP_NODISCARD uint64_t + getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkSetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateData.html + void setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, + uint64_t data ) const; + + // wrapper function for command vkGetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateData.html + VULKAN_HPP_NODISCARD uint64_t getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const; + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkMapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2.html + VULKAN_HPP_NODISCARD void * mapMemory2( const VULKAN_HPP_NAMESPACE::MemoryMapInfo & memoryMapInfo ) const; + + // wrapper function for command vkUnmapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2.html + void unmapMemory2( const VULKAN_HPP_NAMESPACE::MemoryUnmapInfo & memoryUnmapInfo ) const; + + // wrapper function for command vkGetRenderingAreaGranularity, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularity.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Extent2D + getRenderingAreaGranularity( const VULKAN_HPP_NAMESPACE::RenderingAreaInfo & renderingAreaInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2 + getImageSubresourceLayout( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageSubresourceLayout( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCopyMemoryToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html + void copyMemoryToImage( const VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo & copyMemoryToImageInfo ) const; + + // wrapper function for command vkCopyImageToMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemory.html + void copyImageToMemory( const VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo & copyImageToMemoryInfo ) const; + + // wrapper function for command vkCopyImageToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImage.html + void copyImageToImage( const VULKAN_HPP_NAMESPACE::CopyImageToImageInfo & copyImageToImageInfo ) const; + + // wrapper function for command vkTransitionImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayout.html + void transitionImageLayout( ArrayProxy const & transitions ) const; + + //=== VK_KHR_swapchain === + + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkGetDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPresentCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR getGroupPresentCapabilitiesKHR() const; + + // wrapper function for command vkGetDeviceGroupSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR + getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const; + + // wrapper function for command vkAcquireNextImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImage2KHR.html + VULKAN_HPP_NODISCARD std::pair acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo ) const; + + //=== VK_KHR_display_swapchain === + + // wrapper function for command vkCreateSharedSwapchainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + createSharedSwapchainsKHR( VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateSharedSwapchainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSharedSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_EXT_debug_marker === + + // wrapper function for command vkDebugMarkerSetObjectTagEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectTagEXT.html + void debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo ) const; + + // wrapper function for command vkDebugMarkerSetObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectNameEXT.html + void debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo ) const; + + //=== VK_KHR_video_queue === + + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR>::Type + createVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_NVX_binary_import === + + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_NVX_image_view_handle === + + // wrapper function for command vkGetImageViewHandleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandleNVX.html + VULKAN_HPP_NODISCARD uint32_t getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageViewHandle64NVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandle64NVX.html + VULKAN_HPP_NODISCARD uint64_t getImageViewHandle64NVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_device_group === + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeaturesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags + getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleKHR.html + VULKAN_HPP_NODISCARD HANDLE getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const; + + // wrapper function for command vkGetMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandlePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR + getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle ) const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + + // wrapper function for command vkGetMemoryFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdKHR.html + VULKAN_HPP_NODISCARD int getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo ) const; + + // wrapper function for command vkGetMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR + getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd ) const; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + + // wrapper function for command vkImportSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreWin32HandleKHR.html + void importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const; + + // wrapper function for command vkGetSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreWin32HandleKHR.html + VULKAN_HPP_NODISCARD HANDLE getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + + // wrapper function for command vkImportSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreFdKHR.html + void importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const; + + // wrapper function for command vkGetSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreFdKHR.html + VULKAN_HPP_NODISCARD int getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo ) const; + + //=== VK_KHR_descriptor_update_template === + + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate>::Type + createDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkDestroyDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplateKHR.html + void destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_display_control === + + // wrapper function for command vkDisplayPowerControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDisplayPowerControlEXT.html + void displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo ) const; + + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + registerEventEXT( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, + VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_EXT_hdr_metadata === + + // wrapper function for command vkSetHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetHdrMetadataEXT.html + void setHdrMetadataEXT( ArrayProxy const & swapchains, + ArrayProxy const & metadata ) const; + + //=== VK_KHR_create_renderpass2 === + + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createRenderPass2KHR( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + + // wrapper function for command vkImportFenceWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceWin32HandleKHR.html + void importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const; + + // wrapper function for command vkGetFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceWin32HandleKHR.html + VULKAN_HPP_NODISCARD HANDLE getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + + // wrapper function for command vkImportFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceFdKHR.html + void importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo ) const; + + // wrapper function for command vkGetFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html + VULKAN_HPP_NODISCARD int getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo ) const; + + //=== VK_KHR_performance_query === + + // wrapper function for command vkAcquireProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireProfilingLockKHR.html + void acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info ) const; + + // wrapper function for command vkReleaseProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseProfilingLockKHR.html + void releaseProfilingLockKHR() const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkSetDebugUtilsObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectNameEXT.html + void setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo ) const; + + // wrapper function for command vkSetDebugUtilsObjectTagEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectTagEXT.html + void setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo ) const; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID + getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const; + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD StructureChain getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const; + + // wrapper function for command vkGetMemoryAndroidHardwareBufferANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryAndroidHardwareBufferANDROID.html + VULKAN_HPP_NODISCARD struct AHardwareBuffer * + getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info ) const; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createExecutionGraphPipelinesAMDX( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createExecutionGraphPipelineAMDX( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineCreateInfoAMDX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_KHR_get_memory_requirements2 === + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const; + + //=== VK_KHR_acceleration_structure === + + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR>::Type + createAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildAccelerationStructuresKHR.html + VULKAN_HPP_NODISCARD Result + buildAccelerationStructuresKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos ) const; + + // wrapper function for command vkCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureKHR.html + VULKAN_HPP_NODISCARD Result copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const; + + // wrapper function for command vkCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureToMemoryKHR.html + VULKAN_HPP_NODISCARD Result copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const; + + // wrapper function for command vkCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToAccelerationStructureKHR.html + VULKAN_HPP_NODISCARD Result copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const; + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD std::vector + writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t dataSize, + size_t stride ) const; + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD DataType + writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t stride ) const; + + // wrapper function for command vkGetAccelerationStructureDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureDeviceAddressKHR.html + VULKAN_HPP_NODISCARD DeviceAddress + getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceAccelerationStructureCompatibilityKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR + getAccelerationStructureCompatibilityKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetAccelerationStructureBuildSizesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureBuildSizesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR + getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, + const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo, + ArrayProxy const & maxPrimitiveCounts VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createRayTracingPipelinesKHR( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createRayTracingPipelineKHR( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_sampler_ycbcr_conversion === + + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createSamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkDestroySamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversionKHR.html + void destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_bind_memory2 === + + // wrapper function for command vkBindBufferMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2KHR.html + void bindBufferMemory2KHR( ArrayProxy const & bindInfos ) const; + + // wrapper function for command vkBindImageMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2KHR.html + void bindImageMemory2KHR( ArrayProxy const & bindInfos ) const; + + //=== VK_EXT_validation_cache === + + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV>::Type + createAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR getAccelerationStructureMemoryRequirementsNV( + const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD StructureChain getAccelerationStructureMemoryRequirementsNV( + const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkBindAccelerationStructureMemoryNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindAccelerationStructureMemoryNV.html + void bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos ) const; + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_maintenance3 === + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport + getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_external_memory_host === + + // wrapper function for command vkGetMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryHostPointerPropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT + getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer ) const; + + //=== VK_EXT_calibrated_timestamps === + + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + VULKAN_HPP_NODISCARD std::pair, uint64_t> + getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos ) const; + + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + VULKAN_HPP_NODISCARD std::pair + getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR & timestampInfo ) const; + + //=== VK_KHR_timeline_semaphore === + + // wrapper function for command vkWaitSemaphoresKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphoresKHR.html + VULKAN_HPP_NODISCARD Result waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const; + + // wrapper function for command vkSignalSemaphoreKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphoreKHR.html + void signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const; + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkInitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInitializePerformanceApiINTEL.html + void initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo ) const; + + // wrapper function for command vkUninitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUninitializePerformanceApiINTEL.html + void uninitializePerformanceApiINTEL() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL>::Type + acquirePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkGetPerformanceParameterINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPerformanceParameterINTEL.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PerformanceValueINTEL + getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const; + + //=== VK_EXT_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressEXT.html + VULKAN_HPP_NODISCARD DeviceAddress getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper function for command vkGetDeviceGroupSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR + getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressKHR.html + VULKAN_HPP_NODISCARD DeviceAddress getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddressKHR.html + VULKAN_HPP_NODISCARD uint64_t getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html + VULKAN_HPP_NODISCARD uint64_t + getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_deferred_host_operations === + + // wrapper function for command vkCreateDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDeferredOperationKHR( VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_pipeline_executable_properties === + + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + VULKAN_HPP_NODISCARD std::vector + getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo ) const; + + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + VULKAN_HPP_NODISCARD std::vector + getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const; + + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + VULKAN_HPP_NODISCARD std::vector + getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const; + + //=== VK_EXT_host_image_copy === + + // wrapper function for command vkCopyMemoryToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImageEXT.html + void copyMemoryToImageEXT( const VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo & copyMemoryToImageInfo ) const; + + // wrapper function for command vkCopyImageToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemoryEXT.html + void copyImageToMemoryEXT( const VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo & copyImageToMemoryInfo ) const; + + // wrapper function for command vkCopyImageToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImageEXT.html + void copyImageToImageEXT( const VULKAN_HPP_NAMESPACE::CopyImageToImageInfo & copyImageToImageInfo ) const; + + // wrapper function for command vkTransitionImageLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayoutEXT.html + void transitionImageLayoutEXT( ArrayProxy const & transitions ) const; + + //=== VK_KHR_map_memory2 === + + // wrapper function for command vkMapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2KHR.html + VULKAN_HPP_NODISCARD void * mapMemory2KHR( const VULKAN_HPP_NAMESPACE::MemoryMapInfo & memoryMapInfo ) const; + + // wrapper function for command vkUnmapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2KHR.html + void unmapMemory2KHR( const VULKAN_HPP_NAMESPACE::MemoryUnmapInfo & memoryUnmapInfo ) const; + + //=== VK_EXT_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesEXT.html + void releaseSwapchainImagesEXT( const VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR & releaseInfo ) const; + + //=== VK_NV_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD StructureChain + getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV>::Type + createIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_EXT_private_data === + + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkDestroyPrivateDataSlotEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlotEXT.html + void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + Optional allocator + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkSetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateDataEXT.html + void setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, + uint64_t data ) const; + + // wrapper function for command vkGetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateDataEXT.html + VULKAN_HPP_NODISCARD uint64_t getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + VULKAN_HPP_NODISCARD std::pair> + getEncodedVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo ) const; + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD std::pair, std::vector> + getEncodedVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo ) const; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createCudaModuleNV( VULKAN_HPP_NAMESPACE::CudaModuleCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createCudaFunctionNV( VULKAN_HPP_NAMESPACE::CudaFunctionCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + // wrapper function for command vkExportMetalObjectsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkExportMetalObjectsEXT.html + void exportMetalObjectsEXT( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT & metalObjectsInfo ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + void getDescriptorEXT( const VULKAN_HPP_NAMESPACE::DescriptorGetInfoEXT & descriptorInfo, size_t dataSize, void * pDescriptor ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + VULKAN_HPP_NODISCARD DescriptorType getDescriptorEXT( const VULKAN_HPP_NAMESPACE::DescriptorGetInfoEXT & descriptorInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetBufferOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD DataType getBufferOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::BufferCaptureDescriptorDataInfoEXT & info ) const; + + // wrapper function for command vkGetImageOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD DataType getImageOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::ImageCaptureDescriptorDataInfoEXT & info ) const; + + // wrapper function for command vkGetImageViewOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD DataType + getImageViewOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::ImageViewCaptureDescriptorDataInfoEXT & info ) const; + + // wrapper function for command vkGetSamplerOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD DataType getSamplerOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::SamplerCaptureDescriptorDataInfoEXT & info ) const; + + // wrapper function for command vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD DataType + getAccelerationStructureOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::AccelerationStructureCaptureDescriptorDataInfoEXT & info ) const; + + //=== VK_EXT_device_fault === + // wrapper function for command vkGetDeviceFaultInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceFaultInfoEXT.html + template + VULKAN_HPP_NODISCARD Result getFaultInfoEXT( DeviceFaultCountsEXT * pFaultCounts, + DeviceFaultInfoEXT * pFaultInfo, + Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + + // wrapper function for command vkGetMemoryZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandleFUCHSIA.html + VULKAN_HPP_NODISCARD zx_handle_t getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const; + + // wrapper function for command vkGetMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandlePropertiesFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA + getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle ) const; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + + // wrapper function for command vkImportSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreZirconHandleFUCHSIA.html + void importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const; + + // wrapper function for command vkGetSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreZirconHandleFUCHSIA.html + VULKAN_HPP_NODISCARD zx_handle_t + getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA>::Type + createBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_NV_external_memory_rdma === + + // wrapper function for command vkGetMemoryRemoteAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryRemoteAddressNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::RemoteAddressNV + getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const; + + //=== VK_EXT_pipeline_properties === + + // wrapper function for command vkGetPipelinePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelinePropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::BaseOutStructure getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT & pipelineInfo ) const; + + //=== VK_EXT_opacity_micromap === + + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createMicromapEXT( VULKAN_HPP_NAMESPACE::MicromapCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildMicromapsEXT.html + VULKAN_HPP_NODISCARD Result buildMicromapsEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + ArrayProxy const & infos ) const; + + // wrapper function for command vkCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapEXT.html + VULKAN_HPP_NODISCARD Result copyMicromapEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT & info ) const; + + // wrapper function for command vkCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapToMemoryEXT.html + VULKAN_HPP_NODISCARD Result copyMicromapToMemoryEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMicromapToMemoryInfoEXT & info ) const; + + // wrapper function for command vkCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToMicromapEXT.html + VULKAN_HPP_NODISCARD Result copyMemoryToMicromapEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMemoryToMicromapInfoEXT & info ) const; + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD std::vector writeMicromapsPropertiesEXT( ArrayProxy const & micromaps, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t dataSize, + size_t stride ) const; + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD DataType writeMicromapsPropertyEXT( ArrayProxy const & micromaps, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t stride ) const; + + // wrapper function for command vkGetDeviceMicromapCompatibilityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMicromapCompatibilityEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR + getMicromapCompatibilityEXT( const VULKAN_HPP_NAMESPACE::MicromapVersionInfoEXT & versionInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetMicromapBuildSizesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMicromapBuildSizesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MicromapBuildSizesInfoEXT + getMicromapBuildSizesEXT( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, + const VULKAN_HPP_NAMESPACE::MicromapBuildInfoEXT & buildInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance4 === + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD std::vector + getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const; + + //=== VK_VALVE_descriptor_set_host_mapping === + + // wrapper function for command vkGetDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutHostMappingInfoVALVE.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE getDescriptorSetLayoutHostMappingInfoVALVE( + const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE & bindingReference ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_generated_commands_compute === + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getPipelineIndirectMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD StructureChain + getPipelineIndirectMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetPipelineIndirectDeviceAddressNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectDeviceAddressNV.html + VULKAN_HPP_NODISCARD DeviceAddress + getPipelineIndirectAddressNV( const VULKAN_HPP_NAMESPACE::PipelineIndirectDeviceAddressInfoNV & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_ARM_tensors === + + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createTensorARM( VULKAN_HPP_NAMESPACE::TensorCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createTensorViewARM( VULKAN_HPP_NAMESPACE::TensorViewCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD StructureChain + getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkBindTensorMemoryARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindTensorMemoryARM.html + void bindTensorMemoryARM( ArrayProxy const & bindInfos ) const; + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD StructureChain + getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetTensorOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD DataType getTensorOpaqueCaptureDescriptorDataARM( const VULKAN_HPP_NAMESPACE::TensorCaptureDescriptorDataInfoARM & info ) const; + + // wrapper function for command vkGetTensorViewOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorViewOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD DataType + getTensorViewOpaqueCaptureDescriptorDataARM( const VULKAN_HPP_NAMESPACE::TensorViewCaptureDescriptorDataInfoARM & info ) const; + + //=== VK_EXT_shader_module_identifier === + + // wrapper function for command vkGetShaderModuleCreateInfoIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleCreateInfoIdentifierEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT + getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_optical_flow === + + // wrapper function for command vkCreateOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createOpticalFlowSessionNV( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkGetRenderingAreaGranularityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularityKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Extent2D + getRenderingAreaGranularityKHR( const VULKAN_HPP_NAMESPACE::RenderingAreaInfo & renderingAreaInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2 + getImageSubresourceLayoutKHR( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getImageSubresourceLayoutKHR( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_AMD_anti_lag === + + // wrapper function for command vkAntiLagUpdateAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAntiLagUpdateAMD.html + void antiLagUpdateAMD( const VULKAN_HPP_NAMESPACE::AntiLagDataAMD & data ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_shader_object === + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createShadersEXT( VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createShaderEXT( VULKAN_HPP_NAMESPACE::ShaderCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_pipeline_binary === + + // wrapper function for command vkCreatePipelineBinariesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + createPipelineBinariesKHR( VULKAN_HPP_NAMESPACE::PipelineBinaryCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkGetPipelineKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineKeyKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR getPipelineKeyKHR( + Optional pipelineCreateInfo VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + VULKAN_HPP_NODISCARD std::pair> + getPipelineBinaryDataKHR( const VULKAN_HPP_NAMESPACE::PipelineBinaryDataInfoKHR & info ) const; + + // wrapper function for command vkReleaseCapturedPipelineDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseCapturedPipelineDataKHR.html + void releaseCapturedPipelineDataKHR( const VULKAN_HPP_NAMESPACE::ReleaseCapturedPipelineDataInfoKHR & info, + Optional allocator + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_QCOM_tile_properties === + + // wrapper function for command vkGetDynamicRenderingTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDynamicRenderingTilePropertiesQCOM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::TilePropertiesQCOM + getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesKHR.html + void releaseSwapchainImagesKHR( const VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR & releaseInfo ) const; + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkConvertCooperativeVectorMatrixNV.html + VULKAN_HPP_NODISCARD Result convertCooperativeVectorMatrixNV( const VULKAN_HPP_NAMESPACE::ConvertCooperativeVectorMatrixInfoNV & info ) const; + + //=== VK_ARM_data_graph === + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + createDataGraphPipelinesARM( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const; + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createDataGraphPipelineARM( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::DataGraphPipelineCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DataGraphPipelineSessionARM>::Type + createDataGraphPipelineSessionARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + VULKAN_HPP_NODISCARD std::vector + getDataGraphPipelineSessionBindPointRequirementsARM( const VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementsInfoARM & info ) const; + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getDataGraphPipelineSessionMemoryRequirementsARM( + const VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD StructureChain getDataGraphPipelineSessionMemoryRequirementsARM( + const VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkBindDataGraphPipelineSessionMemoryARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindDataGraphPipelineSessionMemoryARM.html + void bindDataGraphPipelineSessionMemoryARM( ArrayProxy const & bindInfos ) const; + + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + VULKAN_HPP_NODISCARD std::vector + getDataGraphPipelineAvailablePropertiesARM( const VULKAN_HPP_NAMESPACE::DataGraphPipelineInfoARM & pipelineInfo ) const; + + // wrapper function for command vkGetDataGraphPipelinePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelinePropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result + getDataGraphPipelinePropertiesARM( const DataGraphPipelineInfoARM * pPipelineInfo, + uint32_t propertiesCount, + DataGraphPipelinePropertyQueryResultARM * pProperties ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer ) const; + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD StructureChain getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer ) const; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_calibrated_timestamps === + + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + VULKAN_HPP_NODISCARD std::pair, uint64_t> + getCalibratedTimestampsKHR( ArrayProxy const & timestampInfos ) const; + + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + VULKAN_HPP_NODISCARD std::pair + getCalibratedTimestampKHR( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR & timestampInfo ) const; + + //=== VK_NV_external_compute_queue === + + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createExternalComputeQueueNV( VULKAN_HPP_NAMESPACE::ExternalComputeQueueCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper function for command vkGetClusterAccelerationStructureBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetClusterAccelerationStructureBuildSizesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR + getClusterAccelerationStructureBuildSizesNV( const VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper function for command vkGetPartitionedAccelerationStructuresBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPartitionedAccelerationStructuresBuildSizesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR getPartitionedAccelerationStructuresBuildSizesNV( + const VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV & info ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 + getGeneratedCommandsMemoryRequirementsEXT( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_NODISCARD StructureChain + getGeneratedCommandsMemoryRequirementsEXT( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutEXT>::Type + createIndirectCommandsLayoutEXT( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectExecutionSetEXT>::Type + createIndirectExecutionSetEXT( VULKAN_HPP_NAMESPACE::IndirectExecutionSetCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + + // wrapper function for command vkGetMemoryMetalHandleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandleEXT.html + VULKAN_HPP_NODISCARD void * getMemoryMetalHandleEXT( const VULKAN_HPP_NAMESPACE::MemoryGetMetalHandleInfoEXT & getMetalHandleInfo ) const; + + // wrapper function for command vkGetMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandlePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryMetalHandlePropertiesEXT + getMemoryMetalHandlePropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HandleType const & handle ) const; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + std::unique_ptr m_dispatcher; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkAccelerationStructureKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureKHR.html + class AccelerationStructureKHR + { + public: + using CType = VkAccelerationStructureKHR; + using CppType = VULKAN_HPP_NAMESPACE::AccelerationStructureKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eAccelerationStructureKHR; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + AccelerationStructureKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createAccelerationStructureKHR( createInfo, allocator ); + } +# endif + + AccelerationStructureKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkAccelerationStructureKHR accelerationStructure, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_accelerationStructureKHR( accelerationStructure ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + AccelerationStructureKHR( std::nullptr_t ) {} + + ~AccelerationStructureKHR() + { + clear(); + } + + AccelerationStructureKHR() = delete; + AccelerationStructureKHR( AccelerationStructureKHR const & ) = delete; + + AccelerationStructureKHR( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_accelerationStructureKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_accelerationStructureKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + AccelerationStructureKHR & operator=( AccelerationStructureKHR const & ) = delete; + + AccelerationStructureKHR & operator=( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_accelerationStructureKHR, rhs.m_accelerationStructureKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureKHR; + } + + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_accelerationStructureKHR ); + } + + operator VULKAN_HPP_NAMESPACE::AccelerationStructureKHR() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_accelerationStructureKHR ) + { + getDispatcher()->vkDestroyAccelerationStructureKHR( static_cast( m_device ), + static_cast( m_accelerationStructureKHR ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_accelerationStructureKHR = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_accelerationStructureKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_accelerationStructureKHR, rhs.m_accelerationStructureKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR m_accelerationStructureKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkAccelerationStructureNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureNV.html + class AccelerationStructureNV + { + public: + using CType = VkAccelerationStructureNV; + using CppType = VULKAN_HPP_NAMESPACE::AccelerationStructureNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eAccelerationStructureNV; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + AccelerationStructureNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createAccelerationStructureNV( createInfo, allocator ); + } +# endif + + AccelerationStructureNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkAccelerationStructureNV accelerationStructure, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_accelerationStructureNV( accelerationStructure ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + AccelerationStructureNV( std::nullptr_t ) {} + + ~AccelerationStructureNV() + { + clear(); + } + + AccelerationStructureNV() = delete; + AccelerationStructureNV( AccelerationStructureNV const & ) = delete; + + AccelerationStructureNV( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_accelerationStructureNV( VULKAN_HPP_NAMESPACE::exchange( rhs.m_accelerationStructureNV, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + AccelerationStructureNV & operator=( AccelerationStructureNV const & ) = delete; + + AccelerationStructureNV & operator=( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_accelerationStructureNV, rhs.m_accelerationStructureNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureNV; + } + + VULKAN_HPP_NAMESPACE::AccelerationStructureNV const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_accelerationStructureNV ); + } + + operator VULKAN_HPP_NAMESPACE::AccelerationStructureNV() const VULKAN_HPP_NOEXCEPT + { + return m_accelerationStructureNV; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_accelerationStructureNV ) + { + getDispatcher()->vkDestroyAccelerationStructureNV( static_cast( m_device ), + static_cast( m_accelerationStructureNV ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_accelerationStructureNV = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::AccelerationStructureNV release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_accelerationStructureNV, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_accelerationStructureNV, rhs.m_accelerationStructureNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD std::vector getHandle( size_t dataSize ) const; + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD DataType getHandle() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureNV m_accelerationStructureNV = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuffer.html + class Buffer + { + public: + using CType = VkBuffer; + using CppType = VULKAN_HPP_NAMESPACE::Buffer; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBuffer; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBuffer; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createBuffer( createInfo, allocator ); + } +# endif + + Buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkBuffer buffer, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_buffer( buffer ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Buffer( std::nullptr_t ) {} + + ~Buffer() + { + clear(); + } + + Buffer() = delete; + Buffer( Buffer const & ) = delete; + + Buffer( Buffer && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_buffer( VULKAN_HPP_NAMESPACE::exchange( rhs.m_buffer, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Buffer & operator=( Buffer const & ) = delete; + + Buffer & operator=( Buffer && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_buffer, rhs.m_buffer ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Buffer const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_buffer; + } + + VULKAN_HPP_NAMESPACE::Buffer const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_buffer ); + } + + operator VULKAN_HPP_NAMESPACE::Buffer() const VULKAN_HPP_NOEXCEPT + { + return m_buffer; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_buffer ) + { + getDispatcher()->vkDestroyBuffer( + static_cast( m_device ), static_cast( m_buffer ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_buffer = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Buffer release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_buffer, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Buffer & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_buffer, rhs.m_buffer ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkBindBufferMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory.html + void bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const; + + // wrapper function for command vkGetBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getMemoryRequirements() const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Buffer m_buffer = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkBufferCollectionFUCHSIA, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionFUCHSIA.html +# if defined( VK_USE_PLATFORM_FUCHSIA ) + class BufferCollectionFUCHSIA + { + public: + using CType = VkBufferCollectionFUCHSIA; + using CppType = VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBufferCollectionFUCHSIA; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + BufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createBufferCollectionFUCHSIA( createInfo, allocator ); + } +# endif + + BufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkBufferCollectionFUCHSIA collection, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_bufferCollectionFUCHSIA( collection ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + BufferCollectionFUCHSIA( std::nullptr_t ) {} + + ~BufferCollectionFUCHSIA() + { + clear(); + } + + BufferCollectionFUCHSIA() = delete; + BufferCollectionFUCHSIA( BufferCollectionFUCHSIA const & ) = delete; + + BufferCollectionFUCHSIA( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_bufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::exchange( rhs.m_bufferCollectionFUCHSIA, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA const & ) = delete; + + BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_bufferCollectionFUCHSIA, rhs.m_bufferCollectionFUCHSIA ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_bufferCollectionFUCHSIA; + } + + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_bufferCollectionFUCHSIA ); + } + + operator VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA() const VULKAN_HPP_NOEXCEPT + { + return m_bufferCollectionFUCHSIA; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_bufferCollectionFUCHSIA ) + { + getDispatcher()->vkDestroyBufferCollectionFUCHSIA( static_cast( m_device ), + static_cast( m_bufferCollectionFUCHSIA ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_bufferCollectionFUCHSIA = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_bufferCollectionFUCHSIA, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_bufferCollectionFUCHSIA, rhs.m_bufferCollectionFUCHSIA ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_FUCHSIA_buffer_collection === + + // wrapper function for command vkSetBufferCollectionImageConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionImageConstraintsFUCHSIA.html + void setImageConstraints( const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo ) const; + + // wrapper function for command vkSetBufferCollectionBufferConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionBufferConstraintsFUCHSIA.html + void setBufferConstraints( const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo ) const; + + // wrapper function for command vkGetBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferCollectionPropertiesFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA getProperties() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA m_bufferCollectionFUCHSIA = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper class for handle VkBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferView.html + class BufferView + { + public: + using CType = VkBufferView; + using CppType = VULKAN_HPP_NAMESPACE::BufferView; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eBufferView; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferView; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + BufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createBufferView( createInfo, allocator ); + } +# endif + + BufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkBufferView bufferView, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_bufferView( bufferView ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + BufferView( std::nullptr_t ) {} + + ~BufferView() + { + clear(); + } + + BufferView() = delete; + BufferView( BufferView const & ) = delete; + + BufferView( BufferView && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_bufferView( VULKAN_HPP_NAMESPACE::exchange( rhs.m_bufferView, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + BufferView & operator=( BufferView const & ) = delete; + + BufferView & operator=( BufferView && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_bufferView, rhs.m_bufferView ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::BufferView const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_bufferView; + } + + VULKAN_HPP_NAMESPACE::BufferView const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_bufferView ); + } + + operator VULKAN_HPP_NAMESPACE::BufferView() const VULKAN_HPP_NOEXCEPT + { + return m_bufferView; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_bufferView ) + { + getDispatcher()->vkDestroyBufferView( + static_cast( m_device ), static_cast( m_bufferView ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_bufferView = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::BufferView release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_bufferView, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferView & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_bufferView, rhs.m_bufferView ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::BufferView m_bufferView = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPool.html + class CommandPool + { + public: + using CType = VkCommandPool; + using CppType = VULKAN_HPP_NAMESPACE::CommandPool; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCommandPool; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandPool; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + CommandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createCommandPool( createInfo, allocator ); + } +# endif + + CommandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkCommandPool commandPool, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_commandPool( commandPool ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + CommandPool( std::nullptr_t ) {} + + ~CommandPool() + { + clear(); + } + + CommandPool() = delete; + CommandPool( CommandPool const & ) = delete; + + CommandPool( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_commandPool( VULKAN_HPP_NAMESPACE::exchange( rhs.m_commandPool, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + CommandPool & operator=( CommandPool const & ) = delete; + + CommandPool & operator=( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_commandPool, rhs.m_commandPool ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::CommandPool const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_commandPool; + } + + VULKAN_HPP_NAMESPACE::CommandPool const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_commandPool ); + } + + operator VULKAN_HPP_NAMESPACE::CommandPool() const VULKAN_HPP_NOEXCEPT + { + return m_commandPool; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_commandPool ) + { + getDispatcher()->vkDestroyCommandPool( + static_cast( m_device ), static_cast( m_commandPool ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_commandPool = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::CommandPool release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_commandPool, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandPool & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_commandPool, rhs.m_commandPool ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkResetCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandPool.html + void reset( VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkTrimCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPool.html + void trim( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance1 === + + // wrapper function for command vkTrimCommandPoolKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPoolKHR.html + void trimKHR( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::CommandPool m_commandPool = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBuffer.html + class CommandBuffer + { + public: + using CType = VkCommandBuffer; + using CppType = VULKAN_HPP_NAMESPACE::CommandBuffer; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCommandBuffer; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandBuffer; + + public: + CommandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkCommandBuffer commandBuffer, VkCommandPool commandPool ) + : m_device( device ), m_commandPool( commandPool ), m_commandBuffer( commandBuffer ), m_dispatcher( device.getDispatcher() ) + { + } + + CommandBuffer( std::nullptr_t ) {} + + ~CommandBuffer() + { + clear(); + } + + CommandBuffer() = delete; + CommandBuffer( CommandBuffer const & ) = delete; + + CommandBuffer( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_commandPool( VULKAN_HPP_NAMESPACE::exchange( rhs.m_commandPool, {} ) ) + , m_commandBuffer( VULKAN_HPP_NAMESPACE::exchange( rhs.m_commandBuffer, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + CommandBuffer & operator=( CommandBuffer const & ) = delete; + + CommandBuffer & operator=( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_commandPool, rhs.m_commandPool ); + std::swap( m_commandBuffer, rhs.m_commandBuffer ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::CommandBuffer const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_commandBuffer; + } + + VULKAN_HPP_NAMESPACE::CommandBuffer const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_commandBuffer ); + } + + operator VULKAN_HPP_NAMESPACE::CommandBuffer() const VULKAN_HPP_NOEXCEPT + { + return m_commandBuffer; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_commandBuffer ) + { + getDispatcher()->vkFreeCommandBuffers( + static_cast( m_device ), static_cast( m_commandPool ), 1, reinterpret_cast( &m_commandBuffer ) ); + } + m_device = nullptr; + m_commandPool = nullptr; + m_commandBuffer = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::CommandBuffer release() + { + m_device = nullptr; + m_commandPool = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_commandBuffer, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandBuffer & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_commandPool, rhs.m_commandPool ); + std::swap( m_commandBuffer, rhs.m_commandBuffer ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkBeginCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBeginCommandBuffer.html + void begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo ) const; + + // wrapper function for command vkEndCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEndCommandBuffer.html + void end() const; + + // wrapper function for command vkResetCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandBuffer.html + void reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + // wrapper function for command vkCmdBindPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipeline.html + void bindPipeline( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, VULKAN_HPP_NAMESPACE::Pipeline pipeline ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewport.html + void setViewport( uint32_t firstViewport, ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetScissor, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissor.html + void setScissor( uint32_t firstScissor, ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLineWidth, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineWidth.html + void setLineWidth( float lineWidth ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBias, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias.html + void setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetBlendConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetBlendConstants.html + void setBlendConstants( const float blendConstants[4] ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBounds, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBounds.html + void setDepthBounds( float minDepthBounds, float maxDepthBounds ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilCompareMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilCompareMask.html + void setStencilCompareMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t compareMask ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilWriteMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilWriteMask.html + void setStencilWriteMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t writeMask ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilReference, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilReference.html + void setStencilReference( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t reference ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets.html + void bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & descriptorSets, + ArrayProxy const & dynamicOffsets ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindIndexBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer.html + void bindIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindVertexBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers.html + void bindVertexBuffers( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets ) const; + + // wrapper function for command vkCmdDraw, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDraw.html + void draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexed, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexed.html + void + drawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirect.html + void drawIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirect.html + void drawIndexedIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatch, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatch.html + void dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchIndirect.html + void dispatchIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, VULKAN_HPP_NAMESPACE::DeviceSize offset ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer.html + void copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage.html + void copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBlitImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage.html + void blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions, + VULKAN_HPP_NAMESPACE::Filter filter ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBufferToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage.html + void copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyImageToBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer.html + void copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdUpdateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdateBuffer.html + template + void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + ArrayProxy const & data ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdFillBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdFillBuffer.html + void fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + uint32_t data ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdClearColorImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearColorImage.html + void clearColorImage( VULKAN_HPP_NAMESPACE::Image image, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, + const VULKAN_HPP_NAMESPACE::ClearColorValue & color, + ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdClearDepthStencilImage, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearDepthStencilImage.html + void clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, + const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil, + ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdClearAttachments, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearAttachments.html + void clearAttachments( ArrayProxy const & attachments, + ArrayProxy const & rects ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResolveImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage.html + void resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent.html + void setEvent( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent.html + void resetEvent( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWaitEvents, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents.html + void waitEvents( ArrayProxy const & events, + VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPipelineBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier.html + void pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBeginQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQuery.html + void beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query, + VULKAN_HPP_NAMESPACE::QueryControlFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQuery.html + void endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetQueryPool.html + void resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteTimestamp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp.html + void writeTimestamp( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyQueryPoolResults.html + void copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + VULKAN_HPP_NAMESPACE::DeviceSize stride, + VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants.html + template + void pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, + uint32_t offset, + ArrayProxy const & values ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBeginRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass.html + void beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, + VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdNextSubpass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass.html + void nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass.html + void endRenderPass() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdExecuteCommands, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteCommands.html + void executeCommands( ArrayProxy const & commandBuffers ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkCmdSetDeviceMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMask.html + void setDeviceMask( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchBase, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBase.html + void dispatchBase( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkCmdDrawIndirectCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCount.html + void drawIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirectCount, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCount.html + void drawIndexedIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBeginRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2.html + void beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, + const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdNextSubpass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2.html + void nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, + const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2.html + void endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkCmdSetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2.html + void setEvent2( VULKAN_HPP_NAMESPACE::Event event, const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2.html + void resetEvent2( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWaitEvents2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2.html + void waitEvents2( ArrayProxy const & events, + ArrayProxy const & dependencyInfos ) const; + + // wrapper function for command vkCmdPipelineBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2.html + void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteTimestamp2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2.html + void + writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2.html + void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2.html + void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBufferToImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html + void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyImageToBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2.html + void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBlitImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2.html + void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResolveImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2.html + void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBeginRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRendering.html + void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering.html + void endRendering() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCullMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullMode.html + void setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetFrontFace, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFace.html + void setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveTopology, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopology.html + void setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCount.html + void setViewportWithCount( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetScissorWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCount.html + void setScissorWithCount( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindVertexBuffers2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2.html + void bindVertexBuffers2( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkCmdSetDepthTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnable.html + void setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthWriteEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnable.html + void setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthCompareOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOp.html + void setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBoundsTestEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnable.html + void setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnable.html + void setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOp.html + void setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, + VULKAN_HPP_NAMESPACE::StencilOp failOp, + VULKAN_HPP_NAMESPACE::StencilOp passOp, + VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, + VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizerDiscardEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnable.html + void setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBiasEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnable.html + void setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveRestartEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnable.html + void setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkCmdSetLineStipple, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStipple.html + void setLineStipple( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindIndexBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2.html + void bindIndexBuffer2( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet.html + void pushDescriptorSet( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate.html + template + void pushDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + DataType const & data ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRenderingAttachmentLocations, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocations.html + void setRenderingAttachmentLocations( const VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo & locationInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndices, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndices.html + void setRenderingInputAttachmentIndices( const VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo ) const + VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindDescriptorSets2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2.html + void bindDescriptorSets2( const VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo & bindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushConstants2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2.html + void pushConstants2( const VULKAN_HPP_NAMESPACE::PushConstantsInfo & pushConstantsInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSet2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2.html + void pushDescriptorSet2( const VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo & pushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2.html + void pushDescriptorSetWithTemplate2( const VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_debug_marker === + + // wrapper function for command vkCmdDebugMarkerBeginEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerBeginEXT.html + void debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDebugMarkerEndEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerEndEXT.html + void debugMarkerEndEXT() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDebugMarkerInsertEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerInsertEXT.html + void debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_video_queue === + + // wrapper function for command vkCmdBeginVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginVideoCodingKHR.html + void beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndVideoCodingKHR.html + void endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdControlVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdControlVideoCodingKHR.html + void controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_video_decode_queue === + + // wrapper function for command vkCmdDecodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecodeVideoKHR.html + void decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & decodeInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_transform_feedback === + + // wrapper function for command vkCmdBindTransformFeedbackBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTransformFeedbackBuffersEXT.html + void bindTransformFeedbackBuffersEXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkCmdBeginTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginTransformFeedbackEXT.html + void beginTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkCmdEndTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndTransformFeedbackEXT.html + void endTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkCmdBeginQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQueryIndexedEXT.html + void beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query, + VULKAN_HPP_NAMESPACE::QueryControlFlags flags, + uint32_t index ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQueryIndexedEXT.html + void endQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query, uint32_t index ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndirectByteCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectByteCountEXT.html + void drawIndirectByteCountEXT( uint32_t instanceCount, + uint32_t firstInstance, + VULKAN_HPP_NAMESPACE::Buffer counterBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NVX_binary_import === + + // wrapper function for command vkCmdCuLaunchKernelNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCuLaunchKernelNVX.html + void cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_AMD_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountAMD.html + void drawIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirectCountAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountAMD.html + void drawIndexedIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_dynamic_rendering === + + // wrapper function for command vkCmdBeginRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderingKHR.html + void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderingKHR.html + void endRenderingKHR() const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_device_group === + + // wrapper function for command vkCmdSetDeviceMaskKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMaskKHR.html + void setDeviceMaskKHR( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchBaseKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBaseKHR.html + void dispatchBaseKHR( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) + const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_push_descriptor === + + // wrapper function for command vkCmdPushDescriptorSetKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetKHR.html + void pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html + template + void pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + DataType const & data ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_conditional_rendering === + + // wrapper function for command vkCmdBeginConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginConditionalRenderingEXT.html + void beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndConditionalRenderingEXT.html + void endConditionalRenderingEXT() const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_clip_space_w_scaling === + + // wrapper function for command vkCmdSetViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingNV.html + void setViewportWScalingNV( uint32_t firstViewport, + ArrayProxy const & viewportWScalings ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_discard_rectangles === + + // wrapper function for command vkCmdSetDiscardRectangleEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEXT.html + void setDiscardRectangleEXT( uint32_t firstDiscardRectangle, + ArrayProxy const & discardRectangles ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDiscardRectangleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEnableEXT.html + void setDiscardRectangleEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 discardRectangleEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDiscardRectangleModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleModeEXT.html + void setDiscardRectangleModeEXT( VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_create_renderpass2 === + + // wrapper function for command vkCmdBeginRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2KHR.html + void beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, + const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdNextSubpass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2KHR.html + void nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, + const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2KHR.html + void endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkCmdBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginDebugUtilsLabelEXT.html + void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndDebugUtilsLabelEXT.html + void endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInsertDebugUtilsLabelEXT.html + void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkCmdInitializeGraphScratchMemoryAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInitializeGraphScratchMemoryAMDX.html + void initializeGraphScratchMemoryAMDX( VULKAN_HPP_NAMESPACE::Pipeline executionGraph, + VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchGraphAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphAMDX.html + void dispatchGraphAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize, + const VULKAN_HPP_NAMESPACE::DispatchGraphCountInfoAMDX & countInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchGraphIndirectAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectAMDX.html + void dispatchGraphIndirectAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize, + const VULKAN_HPP_NAMESPACE::DispatchGraphCountInfoAMDX & countInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDispatchGraphIndirectCountAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectCountAMDX.html + void dispatchGraphIndirectCountAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize, + VULKAN_HPP_NAMESPACE::DeviceAddress countInfo ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + + // wrapper function for command vkCmdSetSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEXT.html + void setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_acceleration_structure === + + // wrapper function for command vkCmdBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html + void + buildAccelerationStructuresKHR( ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos ) const; + + // wrapper function for command vkCmdBuildAccelerationStructuresIndirectKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html + void buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, + ArrayProxy const & indirectDeviceAddresses, + ArrayProxy const & indirectStrides, + ArrayProxy const & pMaxPrimitiveCounts ) const; + + // wrapper function for command vkCmdCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureKHR.html + void copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureToMemoryKHR.html + void copyAccelerationStructureToMemoryKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToAccelerationStructureKHR.html + void copyMemoryToAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesKHR.html + void writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkCmdTraceRaysKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysKHR.html + void traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdTraceRaysIndirectKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirectKHR.html + void traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, + VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRayTracingPipelineStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRayTracingPipelineStackSizeKHR.html + void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_shading_rate_image === + + // wrapper function for command vkCmdBindShadingRateImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadingRateImageNV.html + void bindShadingRateImageNV( VULKAN_HPP_NAMESPACE::ImageView imageView, VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportShadingRatePaletteNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportShadingRatePaletteNV.html + void + setViewportShadingRatePaletteNV( uint32_t firstViewport, + ArrayProxy const & shadingRatePalettes ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoarseSampleOrderNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoarseSampleOrderNV.html + void setCoarseSampleOrderNV( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, + ArrayProxy const & customSampleOrders ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkCmdBuildAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructureNV.html + void buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info, + VULKAN_HPP_NAMESPACE::Buffer instanceData, + VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, + VULKAN_HPP_NAMESPACE::Bool32 update, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, + VULKAN_HPP_NAMESPACE::Buffer scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureNV.html + void copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdTraceRaysNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysNV.html + void traceRaysNV( VULKAN_HPP_NAMESPACE::Buffer raygenShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderBindingOffset, + VULKAN_HPP_NAMESPACE::Buffer missShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingOffset, + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingStride, + VULKAN_HPP_NAMESPACE::Buffer hitShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingOffset, + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingStride, + VULKAN_HPP_NAMESPACE::Buffer callableShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingOffset, + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html + void writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountKHR.html + void drawIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawIndexedIndirectCountKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountKHR.html + void drawIndexedIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_AMD_buffer_marker === + + // wrapper function for command vkCmdWriteBufferMarkerAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarkerAMD.html + void writeBufferMarkerAMD( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + uint32_t marker ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteBufferMarker2AMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarker2AMD.html + void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + uint32_t marker ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksNV.html + void drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectNV.html + void drawMeshTasksIndirectNV( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountNV.html + void drawMeshTasksIndirectCountNV( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_scissor_exclusive === + + // wrapper function for command vkCmdSetExclusiveScissorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorEnableNV.html + void setExclusiveScissorEnableNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissorEnables ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetExclusiveScissorNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorNV.html + void setExclusiveScissorNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissors ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_diagnostic_checkpoints === + + // wrapper function for command vkCmdSetCheckpointNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCheckpointNV.html + template + void setCheckpointNV( CheckpointMarkerType const & checkpointMarker ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkCmdSetPerformanceMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceMarkerINTEL.html + void setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo ) const; + + // wrapper function for command vkCmdSetPerformanceStreamMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceStreamMarkerINTEL.html + void setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo ) const; + + // wrapper function for command vkCmdSetPerformanceOverrideINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceOverrideINTEL.html + void setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo ) const; + + //=== VK_KHR_fragment_shading_rate === + + // wrapper function for command vkCmdSetFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateKHR.html + void setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize, + const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_dynamic_rendering_local_read === + + // wrapper function for command vkCmdSetRenderingAttachmentLocationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocationsKHR.html + void setRenderingAttachmentLocationsKHR( const VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo & locationInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndicesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndicesKHR.html + void setRenderingInputAttachmentIndicesKHR( const VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEXT.html + void setLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_extended_dynamic_state === + + // wrapper function for command vkCmdSetCullModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullModeEXT.html + void setCullModeEXT( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetFrontFaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFaceEXT.html + void setFrontFaceEXT( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveTopologyEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopologyEXT.html + void setPrimitiveTopologyEXT( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportWithCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCountEXT.html + void setViewportWithCountEXT( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetScissorWithCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCountEXT.html + void setScissorWithCountEXT( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindVertexBuffers2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2EXT.html + void bindVertexBuffers2EXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + ArrayProxy const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const; + + // wrapper function for command vkCmdSetDepthTestEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnableEXT.html + void setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthWriteEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnableEXT.html + void setDepthWriteEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthCompareOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOpEXT.html + void setDepthCompareOpEXT( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBoundsTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnableEXT.html + void setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnableEXT.html + void setStencilTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetStencilOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOpEXT.html + void setStencilOpEXT( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, + VULKAN_HPP_NAMESPACE::StencilOp failOp, + VULKAN_HPP_NAMESPACE::StencilOp passOp, + VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, + VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_generated_commands === + + // wrapper function for command vkCmdPreprocessGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsNV.html + void preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdExecuteGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsNV.html + void executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, + const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindPipelineShaderGroupNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipelineShaderGroupNV.html + void bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::Pipeline pipeline, + uint32_t groupIndex ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_depth_bias_control === + + // wrapper function for command vkCmdSetDepthBias2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias2EXT.html + void setDepthBias2EXT( const VULKAN_HPP_NAMESPACE::DepthBiasInfoEXT & depthBiasInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkCmdEncodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEncodeVideoKHR.html + void encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkCmdCudaLaunchKernelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCudaLaunchKernelNV.html + void cudaLaunchKernelNV( const VULKAN_HPP_NAMESPACE::CudaLaunchInfoNV & launchInfo ) const VULKAN_HPP_NOEXCEPT; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + + // wrapper function for command vkCmdDispatchTileQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchTileQCOM.html + void dispatchTileQCOM( const VULKAN_HPP_NAMESPACE::DispatchTileInfoQCOM & dispatchTileInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBeginPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginPerTileExecutionQCOM.html + void beginPerTileExecutionQCOM( const VULKAN_HPP_NAMESPACE::PerTileBeginInfoQCOM & perTileBeginInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdEndPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndPerTileExecutionQCOM.html + void endPerTileExecutionQCOM( const VULKAN_HPP_NAMESPACE::PerTileEndInfoQCOM & perTileEndInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_synchronization2 === + + // wrapper function for command vkCmdSetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2KHR.html + void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2KHR.html + void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWaitEvents2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2KHR.html + void waitEvents2KHR( ArrayProxy const & events, + ArrayProxy const & dependencyInfos ) const; + + // wrapper function for command vkCmdPipelineBarrier2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2KHR.html + void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteTimestamp2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2KHR.html + void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkCmdBindDescriptorBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBuffersEXT.html + void bindDescriptorBuffersEXT( ArrayProxy const & bindingInfos ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDescriptorBufferOffsetsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html + void setDescriptorBufferOffsetsEXT( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & bufferIndices, + ArrayProxy const & offsets ) const; + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.html + void bindDescriptorBufferEmbeddedSamplersEXT( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_fragment_shading_rate_enums === + + // wrapper function for command vkCmdSetFragmentShadingRateEnumNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateEnumNV.html + void setFragmentShadingRateEnumNV( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate, + const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksEXT.html + void drawMeshTasksEXT( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectEXT.html + void drawMeshTasksIndirectEXT( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountEXT.html + void drawMeshTasksIndirectCountEXT( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_copy_commands2 === + + // wrapper function for command vkCmdCopyBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2KHR.html + void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2KHR.html + void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyBufferToImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2KHR.html + void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyImageToBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2KHR.html + void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBlitImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2KHR.html + void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdResolveImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2KHR.html + void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_vertex_input_dynamic_state === + + // wrapper function for command vkCmdSetVertexInputEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetVertexInputEXT.html + void setVertexInputEXT( ArrayProxy const & vertexBindingDescriptions, + ArrayProxy const & vertexAttributeDescriptions ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_HUAWEI_subpass_shading === + + // wrapper function for command vkCmdSubpassShadingHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSubpassShadingHUAWEI.html + void subpassShadingHUAWEI() const VULKAN_HPP_NOEXCEPT; + + //=== VK_HUAWEI_invocation_mask === + + // wrapper function for command vkCmdBindInvocationMaskHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindInvocationMaskHUAWEI.html + void bindInvocationMaskHUAWEI( VULKAN_HPP_NAMESPACE::ImageView imageView, VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_extended_dynamic_state2 === + + // wrapper function for command vkCmdSetPatchControlPointsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPatchControlPointsEXT.html + void setPatchControlPointsEXT( uint32_t patchControlPoints ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizerDiscardEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnableEXT.html + void setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthBiasEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnableEXT.html + void setDepthBiasEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLogicOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEXT.html + void setLogicOpEXT( VULKAN_HPP_NAMESPACE::LogicOp logicOp ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPrimitiveRestartEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnableEXT.html + void setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_color_write_enable === + + // wrapper function for command vkCmdSetColorWriteEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteEnableEXT.html + void setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_ray_tracing_maintenance1 === + + // wrapper function for command vkCmdTraceRaysIndirect2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirect2KHR.html + void traceRaysIndirect2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_multi_draw === + + // wrapper function for command vkCmdDrawMultiEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiEXT.html + void drawMultiEXT( StridedArrayProxy const & vertexInfo, + uint32_t instanceCount, + uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawMultiIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiIndexedEXT.html + void drawMultiIndexedEXT( StridedArrayProxy const & indexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + Optional vertexOffset VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_opacity_micromap === + + // wrapper function for command vkCmdBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildMicromapsEXT.html + void buildMicromapsEXT( ArrayProxy const & infos ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapEXT.html + void copyMicromapEXT( const VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyMicromapToMemoryEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapToMemoryEXT.html + void copyMicromapToMemoryEXT( const VULKAN_HPP_NAMESPACE::CopyMicromapToMemoryInfoEXT & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyMemoryToMicromapEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToMicromapEXT.html + void copyMemoryToMicromapEXT( const VULKAN_HPP_NAMESPACE::CopyMemoryToMicromapInfoEXT & info ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteMicromapsPropertiesEXT.html + void writeMicromapsPropertiesEXT( ArrayProxy const & micromaps, + VULKAN_HPP_NAMESPACE::QueryType queryType, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_HUAWEI_cluster_culling_shader === + + // wrapper function for command vkCmdDrawClusterHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterHUAWEI.html + void drawClusterHUAWEI( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDrawClusterIndirectHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterIndirectHUAWEI.html + void drawClusterIndirectHUAWEI( VULKAN_HPP_NAMESPACE::Buffer buffer, VULKAN_HPP_NAMESPACE::DeviceSize offset ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_copy_memory_indirect === + + // wrapper function for command vkCmdCopyMemoryIndirectNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryIndirectNV.html + void copyMemoryIndirectNV( VULKAN_HPP_NAMESPACE::DeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdCopyMemoryToImageIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToImageIndirectNV.html + void copyMemoryToImageIndirectNV( VULKAN_HPP_NAMESPACE::DeviceAddress copyBufferAddress, + uint32_t stride, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & imageSubresources ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_memory_decompression === + + // wrapper function for command vkCmdDecompressMemoryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryNV.html + void decompressMemoryNV( ArrayProxy const & decompressMemoryRegions ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdDecompressMemoryIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryIndirectCountNV.html + void decompressMemoryIndirectCountNV( VULKAN_HPP_NAMESPACE::DeviceAddress indirectCommandsAddress, + VULKAN_HPP_NAMESPACE::DeviceAddress indirectCommandsCountAddress, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_generated_commands_compute === + + // wrapper function for command vkCmdUpdatePipelineIndirectBufferNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdatePipelineIndirectBufferNV.html + void updatePipelineIndirectBufferNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::Pipeline pipeline ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_extended_dynamic_state3 === + + // wrapper function for command vkCmdSetDepthClampEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampEnableEXT.html + void setDepthClampEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetPolygonModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPolygonModeEXT.html + void setPolygonModeEXT( VULKAN_HPP_NAMESPACE::PolygonMode polygonMode ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizationSamplesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationSamplesEXT.html + void setRasterizationSamplesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetSampleMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleMaskEXT.html + void setSampleMaskEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, ArrayProxy const & sampleMask ) const; + + // wrapper function for command vkCmdSetAlphaToCoverageEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToCoverageEnableEXT.html + void setAlphaToCoverageEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetAlphaToOneEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToOneEnableEXT.html + void setAlphaToOneEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLogicOpEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEnableEXT.html + void setLogicOpEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetColorBlendEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEnableEXT.html + void setColorBlendEnableEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEnables ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetColorBlendEquationEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEquationEXT.html + void setColorBlendEquationEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEquations ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetColorWriteMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteMaskEXT.html + void setColorWriteMaskEXT( uint32_t firstAttachment, + ArrayProxy const & colorWriteMasks ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetTessellationDomainOriginEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetTessellationDomainOriginEXT.html + void setTessellationDomainOriginEXT( VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRasterizationStreamEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationStreamEXT.html + void setRasterizationStreamEXT( uint32_t rasterizationStream ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetConservativeRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetConservativeRasterizationModeEXT.html + void + setConservativeRasterizationModeEXT( VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetExtraPrimitiveOverestimationSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html + void setExtraPrimitiveOverestimationSizeEXT( float extraPrimitiveOverestimationSize ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthClipEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipEnableEXT.html + void setDepthClipEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetSampleLocationsEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEnableEXT.html + void setSampleLocationsEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetColorBlendAdvancedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendAdvancedEXT.html + void setColorBlendAdvancedEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendAdvanced ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetProvokingVertexModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetProvokingVertexModeEXT.html + void setProvokingVertexModeEXT( VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLineRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineRasterizationModeEXT.html + void setLineRasterizationModeEXT( VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT lineRasterizationMode ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetLineStippleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEnableEXT.html + void setLineStippleEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDepthClipNegativeOneToOneEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html + void setDepthClipNegativeOneToOneEXT( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportWScalingEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingEnableNV.html + void setViewportWScalingEnableNV( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportSwizzleNV.html + void setViewportSwizzleNV( uint32_t firstViewport, + ArrayProxy const & viewportSwizzles ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageToColorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorEnableNV.html + void setCoverageToColorEnableNV( VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageToColorLocationNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorLocationNV.html + void setCoverageToColorLocationNV( uint32_t coverageToColorLocation ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageModulationModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationModeNV.html + void setCoverageModulationModeNV( VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageModulationTableEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableEnableNV.html + void setCoverageModulationTableEnableNV( VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageModulationTableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableNV.html + void setCoverageModulationTableNV( ArrayProxy const & coverageModulationTable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetShadingRateImageEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetShadingRateImageEnableNV.html + void setShadingRateImageEnableNV( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetRepresentativeFragmentTestEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html + void setRepresentativeFragmentTestEnableNV( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetCoverageReductionModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageReductionModeNV.html + void setCoverageReductionModeNV( VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_ARM_tensors === + + // wrapper function for command vkCmdCopyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyTensorARM.html + void copyTensorARM( const VULKAN_HPP_NAMESPACE::CopyTensorInfoARM & copyTensorInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_optical_flow === + + // wrapper function for command vkCmdOpticalFlowExecuteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdOpticalFlowExecuteNV.html + void opticalFlowExecuteNV( VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV session, + const VULKAN_HPP_NAMESPACE::OpticalFlowExecuteInfoNV & executeInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkCmdBindIndexBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2KHR.html + void bindIndexBuffer2KHR( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_shader_object === + + // wrapper function for command vkCmdBindShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadersEXT.html + void bindShadersEXT( ArrayProxy const & stages, + ArrayProxy const & shaders ) const; + + // wrapper function for command vkCmdSetDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampRangeEXT.html + void setDepthClampRangeEXT( VULKAN_HPP_NAMESPACE::DepthClampModeEXT depthClampMode, + Optional depthClampRange + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkCmdConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdConvertCooperativeVectorMatrixNV.html + void convertCooperativeVectorMatrixNV( ArrayProxy const & infos ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_ARM_data_graph === + + // wrapper function for command vkCmdDispatchDataGraphARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchDataGraphARM.html + void dispatchDataGraphARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session, + Optional info + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + + // wrapper function for command vkCmdSetAttachmentFeedbackLoopEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAttachmentFeedbackLoopEnableEXT.html + void setAttachmentFeedbackLoopEnableEXT( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleKHR.html + void setLineStippleKHR( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance6 === + + // wrapper function for command vkCmdBindDescriptorSets2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2KHR.html + void bindDescriptorSets2KHR( const VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo & bindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushConstants2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2KHR.html + void pushConstants2KHR( const VULKAN_HPP_NAMESPACE::PushConstantsInfo & pushConstantsInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSet2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2KHR.html + void pushDescriptorSet2KHR( const VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo & pushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2KHR.html + void pushDescriptorSetWithTemplate2KHR( const VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo ) const + VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdSetDescriptorBufferOffsets2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsets2EXT.html + void setDescriptorBufferOffsets2EXT( const VULKAN_HPP_NAMESPACE::SetDescriptorBufferOffsetsInfoEXT & setDescriptorBufferOffsetsInfo ) const + VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplers2EXT.html + void bindDescriptorBufferEmbeddedSamplers2EXT( + const VULKAN_HPP_NAMESPACE::BindDescriptorBufferEmbeddedSamplersInfoEXT & bindDescriptorBufferEmbeddedSamplersInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_QCOM_tile_memory_heap === + + // wrapper function for command vkCmdBindTileMemoryQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTileMemoryQCOM.html + void bindTileMemoryQCOM( Optional tileMemoryBindInfo + VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper function for command vkCmdBuildClusterAccelerationStructureIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildClusterAccelerationStructureIndirectNV.html + void buildClusterAccelerationStructureIndirectNV( const VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureCommandsInfoNV & commandInfos ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper function for command vkCmdBuildPartitionedAccelerationStructuresNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildPartitionedAccelerationStructuresNV.html + void buildPartitionedAccelerationStructuresNV( const VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureInfoNV & buildInfo ) const + VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkCmdPreprocessGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsEXT.html + void preprocessGeneratedCommandsEXT( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT & generatedCommandsInfo, + VULKAN_HPP_NAMESPACE::CommandBuffer stateCommandBuffer ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkCmdExecuteGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsEXT.html + void executeGeneratedCommandsEXT( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, + const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_fragment_density_map_offset === + + // wrapper function for command vkCmdEndRendering2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering2EXT.html + void endRendering2EXT( Optional renderingEndInfo VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const + VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::CommandPool m_commandPool = {}; + VULKAN_HPP_NAMESPACE::CommandBuffer m_commandBuffer = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class CommandBuffers : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + CommandBuffers( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) + { + *this = device.allocateCommandBuffers( allocateInfo ); + } +# endif + + CommandBuffers( std::nullptr_t ) {} + + CommandBuffers() = delete; + CommandBuffers( CommandBuffers const & ) = delete; + CommandBuffers( CommandBuffers && rhs ) = default; + CommandBuffers & operator=( CommandBuffers const & ) = delete; + CommandBuffers & operator=( CommandBuffers && rhs ) = default; + + private: + CommandBuffers( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuFunctionNVX.html + class CuFunctionNVX + { + public: + using CType = VkCuFunctionNVX; + using CppType = VULKAN_HPP_NAMESPACE::CuFunctionNVX; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCuFunctionNVX; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCuFunctionNVX; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + CuFunctionNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createCuFunctionNVX( createInfo, allocator ); + } +# endif + + CuFunctionNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkCuFunctionNVX function, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_cuFunctionNVX( function ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + CuFunctionNVX( std::nullptr_t ) {} + + ~CuFunctionNVX() + { + clear(); + } + + CuFunctionNVX() = delete; + CuFunctionNVX( CuFunctionNVX const & ) = delete; + + CuFunctionNVX( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_cuFunctionNVX( VULKAN_HPP_NAMESPACE::exchange( rhs.m_cuFunctionNVX, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + CuFunctionNVX & operator=( CuFunctionNVX const & ) = delete; + + CuFunctionNVX & operator=( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cuFunctionNVX, rhs.m_cuFunctionNVX ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::CuFunctionNVX const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_cuFunctionNVX; + } + + VULKAN_HPP_NAMESPACE::CuFunctionNVX const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_cuFunctionNVX ); + } + + operator VULKAN_HPP_NAMESPACE::CuFunctionNVX() const VULKAN_HPP_NOEXCEPT + { + return m_cuFunctionNVX; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_cuFunctionNVX ) + { + getDispatcher()->vkDestroyCuFunctionNVX( static_cast( m_device ), + static_cast( m_cuFunctionNVX ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_cuFunctionNVX = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::CuFunctionNVX release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_cuFunctionNVX, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cuFunctionNVX, rhs.m_cuFunctionNVX ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::CuFunctionNVX m_cuFunctionNVX = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuModuleNVX.html + class CuModuleNVX + { + public: + using CType = VkCuModuleNVX; + using CppType = VULKAN_HPP_NAMESPACE::CuModuleNVX; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCuModuleNVX; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCuModuleNVX; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + CuModuleNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createCuModuleNVX( createInfo, allocator ); + } +# endif + + CuModuleNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkCuModuleNVX module, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_cuModuleNVX( module ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + CuModuleNVX( std::nullptr_t ) {} + + ~CuModuleNVX() + { + clear(); + } + + CuModuleNVX() = delete; + CuModuleNVX( CuModuleNVX const & ) = delete; + + CuModuleNVX( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_cuModuleNVX( VULKAN_HPP_NAMESPACE::exchange( rhs.m_cuModuleNVX, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + CuModuleNVX & operator=( CuModuleNVX const & ) = delete; + + CuModuleNVX & operator=( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cuModuleNVX, rhs.m_cuModuleNVX ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::CuModuleNVX const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_cuModuleNVX; + } + + VULKAN_HPP_NAMESPACE::CuModuleNVX const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_cuModuleNVX ); + } + + operator VULKAN_HPP_NAMESPACE::CuModuleNVX() const VULKAN_HPP_NOEXCEPT + { + return m_cuModuleNVX; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_cuModuleNVX ) + { + getDispatcher()->vkDestroyCuModuleNVX( + static_cast( m_device ), static_cast( m_cuModuleNVX ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_cuModuleNVX = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::CuModuleNVX release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_cuModuleNVX, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cuModuleNVX, rhs.m_cuModuleNVX ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::CuModuleNVX m_cuModuleNVX = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaFunctionNV.html +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + class CudaFunctionNV + { + public: + using CType = VkCudaFunctionNV; + using CppType = VULKAN_HPP_NAMESPACE::CudaFunctionNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCudaFunctionNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCudaFunctionNV; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + CudaFunctionNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::CudaFunctionCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createCudaFunctionNV( createInfo, allocator ); + } +# endif + + CudaFunctionNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkCudaFunctionNV function, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_cudaFunctionNV( function ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + CudaFunctionNV( std::nullptr_t ) {} + + ~CudaFunctionNV() + { + clear(); + } + + CudaFunctionNV() = delete; + CudaFunctionNV( CudaFunctionNV const & ) = delete; + + CudaFunctionNV( CudaFunctionNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_cudaFunctionNV( VULKAN_HPP_NAMESPACE::exchange( rhs.m_cudaFunctionNV, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + CudaFunctionNV & operator=( CudaFunctionNV const & ) = delete; + + CudaFunctionNV & operator=( CudaFunctionNV && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cudaFunctionNV, rhs.m_cudaFunctionNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::CudaFunctionNV const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_cudaFunctionNV; + } + + VULKAN_HPP_NAMESPACE::CudaFunctionNV const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_cudaFunctionNV ); + } + + operator VULKAN_HPP_NAMESPACE::CudaFunctionNV() const VULKAN_HPP_NOEXCEPT + { + return m_cudaFunctionNV; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_cudaFunctionNV ) + { + getDispatcher()->vkDestroyCudaFunctionNV( static_cast( m_device ), + static_cast( m_cudaFunctionNV ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_cudaFunctionNV = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::CudaFunctionNV release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_cudaFunctionNV, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CudaFunctionNV & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cudaFunctionNV, rhs.m_cudaFunctionNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::CudaFunctionNV m_cudaFunctionNV = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper class for handle VkCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaModuleNV.html +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + class CudaModuleNV + { + public: + using CType = VkCudaModuleNV; + using CppType = VULKAN_HPP_NAMESPACE::CudaModuleNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eCudaModuleNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCudaModuleNV; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + CudaModuleNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::CudaModuleCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createCudaModuleNV( createInfo, allocator ); + } +# endif + + CudaModuleNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkCudaModuleNV module, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_cudaModuleNV( module ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + CudaModuleNV( std::nullptr_t ) {} + + ~CudaModuleNV() + { + clear(); + } + + CudaModuleNV() = delete; + CudaModuleNV( CudaModuleNV const & ) = delete; + + CudaModuleNV( CudaModuleNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_cudaModuleNV( VULKAN_HPP_NAMESPACE::exchange( rhs.m_cudaModuleNV, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + CudaModuleNV & operator=( CudaModuleNV const & ) = delete; + + CudaModuleNV & operator=( CudaModuleNV && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cudaModuleNV, rhs.m_cudaModuleNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::CudaModuleNV const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_cudaModuleNV; + } + + VULKAN_HPP_NAMESPACE::CudaModuleNV const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_cudaModuleNV ); + } + + operator VULKAN_HPP_NAMESPACE::CudaModuleNV() const VULKAN_HPP_NOEXCEPT + { + return m_cudaModuleNV; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_cudaModuleNV ) + { + getDispatcher()->vkDestroyCudaModuleNV( + static_cast( m_device ), static_cast( m_cudaModuleNV ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_cudaModuleNV = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::CudaModuleNV release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_cudaModuleNV, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CudaModuleNV & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_cudaModuleNV, rhs.m_cudaModuleNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + VULKAN_HPP_NODISCARD std::vector getCache() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::CudaModuleNV m_cudaModuleNV = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper class for handle VkDataGraphPipelineSessionARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionARM.html + class DataGraphPipelineSessionARM + { + public: + using CType = VkDataGraphPipelineSessionARM; + using CppType = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDataGraphPipelineSessionARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DataGraphPipelineSessionARM( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDataGraphPipelineSessionARM( createInfo, allocator ); + } +# endif + + DataGraphPipelineSessionARM( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkDataGraphPipelineSessionARM session, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_dataGraphPipelineSessionARM( session ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + DataGraphPipelineSessionARM( std::nullptr_t ) {} + + ~DataGraphPipelineSessionARM() + { + clear(); + } + + DataGraphPipelineSessionARM() = delete; + DataGraphPipelineSessionARM( DataGraphPipelineSessionARM const & ) = delete; + + DataGraphPipelineSessionARM( DataGraphPipelineSessionARM && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_dataGraphPipelineSessionARM( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dataGraphPipelineSessionARM, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DataGraphPipelineSessionARM & operator=( DataGraphPipelineSessionARM const & ) = delete; + + DataGraphPipelineSessionARM & operator=( DataGraphPipelineSessionARM && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_dataGraphPipelineSessionARM, rhs.m_dataGraphPipelineSessionARM ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_dataGraphPipelineSessionARM; + } + + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_dataGraphPipelineSessionARM ); + } + + operator VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM() const VULKAN_HPP_NOEXCEPT + { + return m_dataGraphPipelineSessionARM; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_dataGraphPipelineSessionARM ) + { + getDispatcher()->vkDestroyDataGraphPipelineSessionARM( static_cast( m_device ), + static_cast( m_dataGraphPipelineSessionARM ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_dataGraphPipelineSessionARM = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_dataGraphPipelineSessionARM, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DataGraphPipelineSessionARM & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_dataGraphPipelineSessionARM, rhs.m_dataGraphPipelineSessionARM ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM m_dataGraphPipelineSessionARM = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDebugReportCallbackEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugReportCallbackEXT.html + class DebugReportCallbackEXT + { + public: + using CType = VkDebugReportCallbackEXT; + using CppType = VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDebugReportCallbackEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDebugReportCallbackEXT; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createDebugReportCallbackEXT( createInfo, allocator ); + } +# endif + + DebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VkDebugReportCallbackEXT callback, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_instance( instance ) + , m_debugReportCallbackEXT( callback ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( instance.getDispatcher() ) + { + } + + DebugReportCallbackEXT( std::nullptr_t ) {} + + ~DebugReportCallbackEXT() + { + clear(); + } + + DebugReportCallbackEXT() = delete; + DebugReportCallbackEXT( DebugReportCallbackEXT const & ) = delete; + + DebugReportCallbackEXT( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_instance( VULKAN_HPP_NAMESPACE::exchange( rhs.m_instance, {} ) ) + , m_debugReportCallbackEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_debugReportCallbackEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DebugReportCallbackEXT & operator=( DebugReportCallbackEXT const & ) = delete; + + DebugReportCallbackEXT & operator=( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_debugReportCallbackEXT, rhs.m_debugReportCallbackEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_debugReportCallbackEXT; + } + + VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_debugReportCallbackEXT ); + } + + operator VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT() const VULKAN_HPP_NOEXCEPT + { + return m_debugReportCallbackEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_debugReportCallbackEXT ) + { + getDispatcher()->vkDestroyDebugReportCallbackEXT( static_cast( m_instance ), + static_cast( m_debugReportCallbackEXT ), + reinterpret_cast( m_allocator ) ); + } + m_instance = nullptr; + m_debugReportCallbackEXT = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT release() + { + m_instance = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_debugReportCallbackEXT, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Instance getInstance() const + { + return m_instance; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_debugReportCallbackEXT, rhs.m_debugReportCallbackEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Instance m_instance = {}; + VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT m_debugReportCallbackEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDebugUtilsMessengerEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessengerEXT.html + class DebugUtilsMessengerEXT + { + public: + using CType = VkDebugUtilsMessengerEXT; + using CppType = VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDebugUtilsMessengerEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createDebugUtilsMessengerEXT( createInfo, allocator ); + } +# endif + + DebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VkDebugUtilsMessengerEXT messenger, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_instance( instance ) + , m_debugUtilsMessengerEXT( messenger ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( instance.getDispatcher() ) + { + } + + DebugUtilsMessengerEXT( std::nullptr_t ) {} + + ~DebugUtilsMessengerEXT() + { + clear(); + } + + DebugUtilsMessengerEXT() = delete; + DebugUtilsMessengerEXT( DebugUtilsMessengerEXT const & ) = delete; + + DebugUtilsMessengerEXT( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_instance( VULKAN_HPP_NAMESPACE::exchange( rhs.m_instance, {} ) ) + , m_debugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_debugUtilsMessengerEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT const & ) = delete; + + DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_debugUtilsMessengerEXT, rhs.m_debugUtilsMessengerEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_debugUtilsMessengerEXT; + } + + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_debugUtilsMessengerEXT ); + } + + operator VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT() const VULKAN_HPP_NOEXCEPT + { + return m_debugUtilsMessengerEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_debugUtilsMessengerEXT ) + { + getDispatcher()->vkDestroyDebugUtilsMessengerEXT( static_cast( m_instance ), + static_cast( m_debugUtilsMessengerEXT ), + reinterpret_cast( m_allocator ) ); + } + m_instance = nullptr; + m_debugUtilsMessengerEXT = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT release() + { + m_instance = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_debugUtilsMessengerEXT, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Instance getInstance() const + { + return m_instance; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_debugUtilsMessengerEXT, rhs.m_debugUtilsMessengerEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Instance m_instance = {}; + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT m_debugUtilsMessengerEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDeferredOperationKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeferredOperationKHR.html + class DeferredOperationKHR + { + public: + using CType = VkDeferredOperationKHR; + using CppType = VULKAN_HPP_NAMESPACE::DeferredOperationKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDeferredOperationKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DeferredOperationKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDeferredOperationKHR( allocator ); + } +# endif + + DeferredOperationKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkDeferredOperationKHR operation, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_deferredOperationKHR( operation ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + DeferredOperationKHR( std::nullptr_t ) {} + + ~DeferredOperationKHR() + { + clear(); + } + + DeferredOperationKHR() = delete; + DeferredOperationKHR( DeferredOperationKHR const & ) = delete; + + DeferredOperationKHR( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_deferredOperationKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_deferredOperationKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DeferredOperationKHR & operator=( DeferredOperationKHR const & ) = delete; + + DeferredOperationKHR & operator=( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_deferredOperationKHR, rhs.m_deferredOperationKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_deferredOperationKHR; + } + + VULKAN_HPP_NAMESPACE::DeferredOperationKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_deferredOperationKHR ); + } + + operator VULKAN_HPP_NAMESPACE::DeferredOperationKHR() const VULKAN_HPP_NOEXCEPT + { + return m_deferredOperationKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_deferredOperationKHR ) + { + getDispatcher()->vkDestroyDeferredOperationKHR( static_cast( m_device ), + static_cast( m_deferredOperationKHR ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_deferredOperationKHR = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DeferredOperationKHR release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_deferredOperationKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_deferredOperationKHR, rhs.m_deferredOperationKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_KHR_deferred_host_operations === + + // wrapper function for command vkGetDeferredOperationMaxConcurrencyKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationMaxConcurrencyKHR.html + VULKAN_HPP_NODISCARD uint32_t getMaxConcurrency() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeferredOperationResultKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationResultKHR.html + VULKAN_HPP_NODISCARD Result getResult() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkDeferredOperationJoinKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeferredOperationJoinKHR.html + VULKAN_HPP_NODISCARD Result join() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DeferredOperationKHR m_deferredOperationKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPool.html + class DescriptorPool + { + public: + using CType = VkDescriptorPool; + using CppType = VULKAN_HPP_NAMESPACE::DescriptorPool; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorPool; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorPool; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DescriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDescriptorPool( createInfo, allocator ); + } +# endif + + DescriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkDescriptorPool descriptorPool, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_descriptorPool( descriptorPool ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + DescriptorPool( std::nullptr_t ) {} + + ~DescriptorPool() + { + clear(); + } + + DescriptorPool() = delete; + DescriptorPool( DescriptorPool const & ) = delete; + + DescriptorPool( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_descriptorPool( VULKAN_HPP_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DescriptorPool & operator=( DescriptorPool const & ) = delete; + + DescriptorPool & operator=( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorPool, rhs.m_descriptorPool ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DescriptorPool const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_descriptorPool; + } + + VULKAN_HPP_NAMESPACE::DescriptorPool const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_descriptorPool ); + } + + operator VULKAN_HPP_NAMESPACE::DescriptorPool() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorPool; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_descriptorPool ) + { + getDispatcher()->vkDestroyDescriptorPool( static_cast( m_device ), + static_cast( m_descriptorPool ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_descriptorPool = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DescriptorPool release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_descriptorPool, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorPool & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorPool, rhs.m_descriptorPool ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkResetDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetDescriptorPool.html + void reset( VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSet.html + class DescriptorSet + { + public: + using CType = VkDescriptorSet; + using CppType = VULKAN_HPP_NAMESPACE::DescriptorSet; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSet; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSet; + + public: + DescriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkDescriptorSet descriptorSet, VkDescriptorPool descriptorPool ) + : m_device( device ), m_descriptorPool( descriptorPool ), m_descriptorSet( descriptorSet ), m_dispatcher( device.getDispatcher() ) + { + } + + DescriptorSet( std::nullptr_t ) {} + + ~DescriptorSet() + { + clear(); + } + + DescriptorSet() = delete; + DescriptorSet( DescriptorSet const & ) = delete; + + DescriptorSet( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_descriptorPool( VULKAN_HPP_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) ) + , m_descriptorSet( VULKAN_HPP_NAMESPACE::exchange( rhs.m_descriptorSet, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DescriptorSet & operator=( DescriptorSet const & ) = delete; + + DescriptorSet & operator=( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorPool, rhs.m_descriptorPool ); + std::swap( m_descriptorSet, rhs.m_descriptorSet ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DescriptorSet const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_descriptorSet; + } + + VULKAN_HPP_NAMESPACE::DescriptorSet const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_descriptorSet ); + } + + operator VULKAN_HPP_NAMESPACE::DescriptorSet() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSet; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_descriptorSet ) + { + getDispatcher()->vkFreeDescriptorSets( static_cast( m_device ), + static_cast( m_descriptorPool ), + 1, + reinterpret_cast( &m_descriptorSet ) ); + } + m_device = nullptr; + m_descriptorPool = nullptr; + m_descriptorSet = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DescriptorSet release() + { + m_device = nullptr; + m_descriptorPool = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_descriptorSet, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorSet & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorPool, rhs.m_descriptorPool ); + std::swap( m_descriptorSet, rhs.m_descriptorSet ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkUpdateDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplate.html + template + void updateWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, DataType const & data ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_descriptor_update_template === + + // wrapper function for command vkUpdateDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplateKHR.html + template + void updateWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, DataType const & data ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VALVE_descriptor_set_host_mapping === + + // wrapper function for command vkGetDescriptorSetHostMappingVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetHostMappingVALVE.html + VULKAN_HPP_NODISCARD void * getHostMappingVALVE() const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool = {}; + VULKAN_HPP_NAMESPACE::DescriptorSet m_descriptorSet = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class DescriptorSets : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DescriptorSets( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) + { + *this = device.allocateDescriptorSets( allocateInfo ); + } +# endif + + DescriptorSets( std::nullptr_t ) {} + + DescriptorSets() = delete; + DescriptorSets( DescriptorSets const & ) = delete; + DescriptorSets( DescriptorSets && rhs ) = default; + DescriptorSets & operator=( DescriptorSets const & ) = delete; + DescriptorSets & operator=( DescriptorSets && rhs ) = default; + + private: + DescriptorSets( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayout.html + class DescriptorSetLayout + { + public: + using CType = VkDescriptorSetLayout; + using CppType = VULKAN_HPP_NAMESPACE::DescriptorSetLayout; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSetLayout; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSetLayout; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DescriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDescriptorSetLayout( createInfo, allocator ); + } +# endif + + DescriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkDescriptorSetLayout descriptorSetLayout, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_descriptorSetLayout( descriptorSetLayout ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + DescriptorSetLayout( std::nullptr_t ) {} + + ~DescriptorSetLayout() + { + clear(); + } + + DescriptorSetLayout() = delete; + DescriptorSetLayout( DescriptorSetLayout const & ) = delete; + + DescriptorSetLayout( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_descriptorSetLayout( VULKAN_HPP_NAMESPACE::exchange( rhs.m_descriptorSetLayout, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DescriptorSetLayout & operator=( DescriptorSetLayout const & ) = delete; + + DescriptorSetLayout & operator=( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorSetLayout, rhs.m_descriptorSetLayout ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DescriptorSetLayout const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_descriptorSetLayout; + } + + VULKAN_HPP_NAMESPACE::DescriptorSetLayout const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_descriptorSetLayout ); + } + + operator VULKAN_HPP_NAMESPACE::DescriptorSetLayout() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorSetLayout; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_descriptorSetLayout ) + { + getDispatcher()->vkDestroyDescriptorSetLayout( static_cast( m_device ), + static_cast( m_descriptorSetLayout ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_descriptorSetLayout = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DescriptorSetLayout release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_descriptorSetLayout, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorSetLayout, rhs.m_descriptorSetLayout ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkGetDescriptorSetLayoutSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSizeEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize getSizeEXT() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDescriptorSetLayoutBindingOffsetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize getBindingOffsetEXT( uint32_t binding ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DescriptorSetLayout m_descriptorSetLayout = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDescriptorUpdateTemplate, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorUpdateTemplate.html + class DescriptorUpdateTemplate + { + public: + using CType = VkDescriptorUpdateTemplate; + using CppType = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorUpdateTemplate; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorUpdateTemplate; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDescriptorUpdateTemplate( createInfo, allocator ); + } +# endif + + DescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_descriptorUpdateTemplate( descriptorUpdateTemplate ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + DescriptorUpdateTemplate( std::nullptr_t ) {} + + ~DescriptorUpdateTemplate() + { + clear(); + } + + DescriptorUpdateTemplate() = delete; + DescriptorUpdateTemplate( DescriptorUpdateTemplate const & ) = delete; + + DescriptorUpdateTemplate( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_descriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::exchange( rhs.m_descriptorUpdateTemplate, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate const & ) = delete; + + DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorUpdateTemplate, rhs.m_descriptorUpdateTemplate ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_descriptorUpdateTemplate; + } + + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_descriptorUpdateTemplate ); + } + + operator VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate() const VULKAN_HPP_NOEXCEPT + { + return m_descriptorUpdateTemplate; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_descriptorUpdateTemplate ) + { + getDispatcher()->vkDestroyDescriptorUpdateTemplate( static_cast( m_device ), + static_cast( m_descriptorUpdateTemplate ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_descriptorUpdateTemplate = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_descriptorUpdateTemplate, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_descriptorUpdateTemplate, rhs.m_descriptorUpdateTemplate ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate m_descriptorUpdateTemplate = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDeviceMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemory.html + class DeviceMemory + { + public: + using CType = VkDeviceMemory; + using CppType = VULKAN_HPP_NAMESPACE::DeviceMemory; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDeviceMemory; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDeviceMemory; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DeviceMemory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.allocateMemory( allocateInfo, allocator ); + } +# endif + + DeviceMemory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkDeviceMemory memory, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_deviceMemory( memory ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + DeviceMemory( std::nullptr_t ) {} + + ~DeviceMemory() + { + clear(); + } + + DeviceMemory() = delete; + DeviceMemory( DeviceMemory const & ) = delete; + + DeviceMemory( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_deviceMemory( VULKAN_HPP_NAMESPACE::exchange( rhs.m_deviceMemory, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DeviceMemory & operator=( DeviceMemory const & ) = delete; + + DeviceMemory & operator=( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_deviceMemory, rhs.m_deviceMemory ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DeviceMemory const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_deviceMemory; + } + + VULKAN_HPP_NAMESPACE::DeviceMemory const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_deviceMemory ); + } + + operator VULKAN_HPP_NAMESPACE::DeviceMemory() const VULKAN_HPP_NOEXCEPT + { + return m_deviceMemory; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_deviceMemory ) + { + getDispatcher()->vkFreeMemory( + static_cast( m_device ), static_cast( m_deviceMemory ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_deviceMemory = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DeviceMemory release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_deviceMemory, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceMemory & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_deviceMemory, rhs.m_deviceMemory ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkMapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory.html + VULKAN_HPP_NODISCARD void * mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + VULKAN_HPP_NAMESPACE::MemoryMapFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + // wrapper function for command vkUnmapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory.html + void unmapMemory() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetDeviceMemoryCommitment, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryCommitment.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize getCommitment() const VULKAN_HPP_NOEXCEPT; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleNV.html + VULKAN_HPP_NODISCARD HANDLE getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_pageable_device_local_memory === + + // wrapper function for command vkSetDeviceMemoryPriorityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDeviceMemoryPriorityEXT.html + void setPriorityEXT( float priority ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory m_deviceMemory = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkDisplayKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayKHR.html + class DisplayKHR + { + public: + using CType = VkDisplayKHR; + using CppType = VULKAN_HPP_NAMESPACE::DisplayKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDisplayKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDisplayKHR; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, int32_t drmFd, uint32_t connectorId ) + { + *this = physicalDevice.getDrmDisplayEXT( drmFd, connectorId ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, Display & dpy, RROutput rrOutput ) + { + *this = physicalDevice.getRandROutputDisplayEXT( dpy, rrOutput ); + } +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, uint32_t deviceRelativeId ) + { + *this = physicalDevice.getWinrtDisplayNV( deviceRelativeId ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ +# endif + + DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, VkDisplayKHR display ) + : m_physicalDevice( physicalDevice ), m_displayKHR( display ), m_dispatcher( physicalDevice.getDispatcher() ) + { + } + + DisplayKHR( std::nullptr_t ) {} + + ~DisplayKHR() + { + clear(); + } + + DisplayKHR() = delete; + DisplayKHR( DisplayKHR const & ) = delete; + + DisplayKHR( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_physicalDevice( VULKAN_HPP_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) ) + , m_displayKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_displayKHR, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DisplayKHR & operator=( DisplayKHR const & ) = delete; + + DisplayKHR & operator=( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_physicalDevice, rhs.m_physicalDevice ); + std::swap( m_displayKHR, rhs.m_displayKHR ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DisplayKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_displayKHR; + } + + VULKAN_HPP_NAMESPACE::DisplayKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_displayKHR ); + } + + operator VULKAN_HPP_NAMESPACE::DisplayKHR() const VULKAN_HPP_NOEXCEPT + { + return m_displayKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_displayKHR ) + { + getDispatcher()->vkReleaseDisplayEXT( static_cast( m_physicalDevice ), static_cast( m_displayKHR ) ); + } + m_physicalDevice = nullptr; + m_displayKHR = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DisplayKHR release() + { + m_physicalDevice = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_displayKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::PhysicalDevice getPhysicalDevice() const + { + return m_physicalDevice; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_physicalDevice, rhs.m_physicalDevice ); + std::swap( m_displayKHR, rhs.m_displayKHR ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_KHR_display === + + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + VULKAN_HPP_NODISCARD std::vector getModeProperties() const; + + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + createMode( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT; + + //=== VK_KHR_get_display_properties2 === + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + VULKAN_HPP_NODISCARD std::vector getModeProperties2() const; + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template + VULKAN_HPP_NODISCARD std::vector getModeProperties2() const; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + + // wrapper function for command vkAcquireWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireWinrtDisplayNV.html + void acquireWinrtNV() const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + private: + VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {}; + VULKAN_HPP_NAMESPACE::DisplayKHR m_displayKHR = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class DisplayKHRs : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DisplayKHRs( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice, uint32_t planeIndex ) + { + *this = physicalDevice.getDisplayPlaneSupportedDisplaysKHR( planeIndex ); + } +# endif + + DisplayKHRs( std::nullptr_t ) {} + + DisplayKHRs() = delete; + DisplayKHRs( DisplayKHRs const & ) = delete; + DisplayKHRs( DisplayKHRs && rhs ) = default; + DisplayKHRs & operator=( DisplayKHRs const & ) = delete; + DisplayKHRs & operator=( DisplayKHRs && rhs ) = default; + + private: + DisplayKHRs( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeKHR.html + class DisplayModeKHR + { + public: + using CType = VkDisplayModeKHR; + using CppType = VULKAN_HPP_NAMESPACE::DisplayModeKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eDisplayModeKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDisplayModeKHR; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + DisplayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, + VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = display.createMode( createInfo, allocator ); + } +# endif + + DisplayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, VkDisplayModeKHR displayModeKHR ) + : m_physicalDevice( display.getPhysicalDevice() ), m_displayModeKHR( displayModeKHR ), m_dispatcher( display.getDispatcher() ) + { + } + + DisplayModeKHR( std::nullptr_t ) {} + + ~DisplayModeKHR() + { + clear(); + } + + DisplayModeKHR() = delete; + + DisplayModeKHR( DisplayModeKHR const & rhs ) : m_displayModeKHR( rhs.m_displayModeKHR ), m_dispatcher( rhs.m_dispatcher ) {} + + DisplayModeKHR( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_physicalDevice( VULKAN_HPP_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) ) + , m_displayModeKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_displayModeKHR, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + DisplayModeKHR & operator=( DisplayModeKHR const & rhs ) + { + m_displayModeKHR = rhs.m_displayModeKHR; + m_dispatcher = rhs.m_dispatcher; + return *this; + } + + DisplayModeKHR & operator=( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_physicalDevice, rhs.m_physicalDevice ); + std::swap( m_displayModeKHR, rhs.m_displayModeKHR ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::DisplayModeKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_displayModeKHR; + } + + VULKAN_HPP_NAMESPACE::DisplayModeKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_displayModeKHR ); + } + + operator VULKAN_HPP_NAMESPACE::DisplayModeKHR() const VULKAN_HPP_NOEXCEPT + { + return m_displayModeKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + m_physicalDevice = nullptr; + m_displayModeKHR = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::DisplayModeKHR release() + { + m_physicalDevice = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_displayModeKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_physicalDevice, rhs.m_physicalDevice ); + std::swap( m_displayModeKHR, rhs.m_displayModeKHR ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_KHR_display === + + // wrapper function for command vkGetDisplayPlaneCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR getDisplayPlaneCapabilities( uint32_t planeIndex ) const; + + private: + VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {}; + VULKAN_HPP_NAMESPACE::DisplayModeKHR m_displayModeKHR = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkEvent.html + class Event + { + public: + using CType = VkEvent; + using CppType = VULKAN_HPP_NAMESPACE::Event; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eEvent; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eEvent; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createEvent( createInfo, allocator ); + } +# endif + + Event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkEvent event, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_event( event ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Event( std::nullptr_t ) {} + + ~Event() + { + clear(); + } + + Event() = delete; + Event( Event const & ) = delete; + + Event( Event && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_event( VULKAN_HPP_NAMESPACE::exchange( rhs.m_event, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Event & operator=( Event const & ) = delete; + + Event & operator=( Event && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_event, rhs.m_event ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Event const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_event; + } + + VULKAN_HPP_NAMESPACE::Event const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_event ); + } + + operator VULKAN_HPP_NAMESPACE::Event() const VULKAN_HPP_NOEXCEPT + { + return m_event; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_event ) + { + getDispatcher()->vkDestroyEvent( + static_cast( m_device ), static_cast( m_event ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_event = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Event release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_event, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Event & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_event, rhs.m_event ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetEventStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEventStatus.html + VULKAN_HPP_NODISCARD Result getStatus() const; + + // wrapper function for command vkSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetEvent.html + void set() const; + + // wrapper function for command vkResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetEvent.html + void reset() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Event m_event = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkExternalComputeQueueNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalComputeQueueNV.html + class ExternalComputeQueueNV + { + public: + using CType = VkExternalComputeQueueNV; + using CppType = VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eExternalComputeQueueNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + ExternalComputeQueueNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ExternalComputeQueueCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createExternalComputeQueueNV( createInfo, allocator ); + } +# endif + + ExternalComputeQueueNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkExternalComputeQueueNV externalQueue, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_externalComputeQueueNV( externalQueue ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + ExternalComputeQueueNV( std::nullptr_t ) {} + + ~ExternalComputeQueueNV() + { + clear(); + } + + ExternalComputeQueueNV() = delete; + ExternalComputeQueueNV( ExternalComputeQueueNV const & ) = delete; + + ExternalComputeQueueNV( ExternalComputeQueueNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_externalComputeQueueNV( VULKAN_HPP_NAMESPACE::exchange( rhs.m_externalComputeQueueNV, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + ExternalComputeQueueNV & operator=( ExternalComputeQueueNV const & ) = delete; + + ExternalComputeQueueNV & operator=( ExternalComputeQueueNV && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_externalComputeQueueNV, rhs.m_externalComputeQueueNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_externalComputeQueueNV; + } + + VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_externalComputeQueueNV ); + } + + operator VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV() const VULKAN_HPP_NOEXCEPT + { + return m_externalComputeQueueNV; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_externalComputeQueueNV ) + { + getDispatcher()->vkDestroyExternalComputeQueueNV( static_cast( m_device ), + static_cast( m_externalComputeQueueNV ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_externalComputeQueueNV = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_externalComputeQueueNV, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ExternalComputeQueueNV & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_externalComputeQueueNV, rhs.m_externalComputeQueueNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_NV_external_compute_queue === + + // wrapper function for command vkGetExternalComputeQueueDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExternalComputeQueueDataNV.html + template + VULKAN_HPP_NODISCARD std::pair getData() const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV m_externalComputeQueueNV = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFence.html + class Fence + { + public: + using CType = VkFence; + using CppType = VULKAN_HPP_NAMESPACE::Fence; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eFence; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eFence; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createFence( createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.registerEventEXT( deviceEventInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, + VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.registerDisplayEventEXT( display, displayEventInfo, allocator ); + } +# endif + + Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkFence fence, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_fence( fence ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Fence( std::nullptr_t ) {} + + ~Fence() + { + clear(); + } + + Fence() = delete; + Fence( Fence const & ) = delete; + + Fence( Fence && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_fence( VULKAN_HPP_NAMESPACE::exchange( rhs.m_fence, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Fence & operator=( Fence const & ) = delete; + + Fence & operator=( Fence && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_fence, rhs.m_fence ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Fence const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_fence; + } + + VULKAN_HPP_NAMESPACE::Fence const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_fence ); + } + + operator VULKAN_HPP_NAMESPACE::Fence() const VULKAN_HPP_NOEXCEPT + { + return m_fence; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_fence ) + { + getDispatcher()->vkDestroyFence( + static_cast( m_device ), static_cast( m_fence ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_fence = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Fence release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_fence, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Fence & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_fence, rhs.m_fence ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetFenceStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceStatus.html + VULKAN_HPP_NODISCARD Result getStatus() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Fence m_fence = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebuffer.html + class Framebuffer + { + public: + using CType = VkFramebuffer; + using CppType = VULKAN_HPP_NAMESPACE::Framebuffer; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eFramebuffer; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eFramebuffer; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createFramebuffer( createInfo, allocator ); + } +# endif + + Framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkFramebuffer framebuffer, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_framebuffer( framebuffer ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Framebuffer( std::nullptr_t ) {} + + ~Framebuffer() + { + clear(); + } + + Framebuffer() = delete; + Framebuffer( Framebuffer const & ) = delete; + + Framebuffer( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_framebuffer( VULKAN_HPP_NAMESPACE::exchange( rhs.m_framebuffer, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Framebuffer & operator=( Framebuffer const & ) = delete; + + Framebuffer & operator=( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_framebuffer, rhs.m_framebuffer ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Framebuffer const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_framebuffer; + } + + VULKAN_HPP_NAMESPACE::Framebuffer const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_framebuffer ); + } + + operator VULKAN_HPP_NAMESPACE::Framebuffer() const VULKAN_HPP_NOEXCEPT + { + return m_framebuffer; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_framebuffer ) + { + getDispatcher()->vkDestroyFramebuffer( + static_cast( m_device ), static_cast( m_framebuffer ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_framebuffer = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Framebuffer release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_framebuffer, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Framebuffer & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_framebuffer, rhs.m_framebuffer ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_QCOM_tile_properties === + + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + VULKAN_HPP_NODISCARD std::vector getTilePropertiesQCOM() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Framebuffer m_framebuffer = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImage.html + class Image + { + public: + using CType = VkImage; + using CppType = VULKAN_HPP_NAMESPACE::Image; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eImage; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eImage; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createImage( createInfo, allocator ); + } +# endif + + Image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkImage image, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_image( image ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Image( std::nullptr_t ) {} + + ~Image() + { + clear(); + } + + Image() = delete; + Image( Image const & ) = delete; + + Image( Image && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_image( VULKAN_HPP_NAMESPACE::exchange( rhs.m_image, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Image & operator=( Image const & ) = delete; + + Image & operator=( Image && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_image, rhs.m_image ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Image const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_image; + } + + VULKAN_HPP_NAMESPACE::Image const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_image ); + } + + operator VULKAN_HPP_NAMESPACE::Image() const VULKAN_HPP_NOEXCEPT + { + return m_image; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_image ) + { + getDispatcher()->vkDestroyImage( + static_cast( m_device ), static_cast( m_image ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_image = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Image release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_image, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Image & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_image, rhs.m_image ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkBindImageMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory.html + void bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const; + + // wrapper function for command vkGetImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getMemoryRequirements() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + VULKAN_HPP_NODISCARD std::vector getSparseMemoryRequirements() const; + + // wrapper function for command vkGetImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout + getSubresourceLayout( const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2 + getSubresourceLayout2( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_NODISCARD StructureChain + getSubresourceLayout2( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_image_drm_format_modifier === + + // wrapper function for command vkGetImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT getDrmFormatModifierPropertiesEXT() const; + + //=== VK_EXT_host_image_copy === + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2 + getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_NODISCARD StructureChain + getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout2 + getSubresourceLayout2KHR( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_NODISCARD StructureChain + getSubresourceLayout2KHR( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Image m_image = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageView.html + class ImageView + { + public: + using CType = VkImageView; + using CppType = VULKAN_HPP_NAMESPACE::ImageView; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eImageView; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eImageView; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + ImageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createImageView( createInfo, allocator ); + } +# endif + + ImageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkImageView imageView, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_imageView( imageView ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + ImageView( std::nullptr_t ) {} + + ~ImageView() + { + clear(); + } + + ImageView() = delete; + ImageView( ImageView const & ) = delete; + + ImageView( ImageView && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_imageView( VULKAN_HPP_NAMESPACE::exchange( rhs.m_imageView, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + ImageView & operator=( ImageView const & ) = delete; + + ImageView & operator=( ImageView && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_imageView, rhs.m_imageView ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::ImageView const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_imageView; + } + + VULKAN_HPP_NAMESPACE::ImageView const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_imageView ); + } + + operator VULKAN_HPP_NAMESPACE::ImageView() const VULKAN_HPP_NOEXCEPT + { + return m_imageView; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_imageView ) + { + getDispatcher()->vkDestroyImageView( + static_cast( m_device ), static_cast( m_imageView ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_imageView = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::ImageView release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_imageView, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ImageView & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_imageView, rhs.m_imageView ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_NVX_image_view_handle === + + // wrapper function for command vkGetImageViewAddressNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewAddressNVX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX getAddressNVX() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::ImageView m_imageView = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkIndirectCommandsLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutEXT.html + class IndirectCommandsLayoutEXT + { + public: + using CType = VkIndirectCommandsLayoutEXT; + using CppType = VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eIndirectCommandsLayoutEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + IndirectCommandsLayoutEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createIndirectCommandsLayoutEXT( createInfo, allocator ); + } +# endif + + IndirectCommandsLayoutEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkIndirectCommandsLayoutEXT indirectCommandsLayout, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_indirectCommandsLayoutEXT( indirectCommandsLayout ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + IndirectCommandsLayoutEXT( std::nullptr_t ) {} + + ~IndirectCommandsLayoutEXT() + { + clear(); + } + + IndirectCommandsLayoutEXT() = delete; + IndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT const & ) = delete; + + IndirectCommandsLayoutEXT( IndirectCommandsLayoutEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_indirectCommandsLayoutEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_indirectCommandsLayoutEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + IndirectCommandsLayoutEXT & operator=( IndirectCommandsLayoutEXT const & ) = delete; + + IndirectCommandsLayoutEXT & operator=( IndirectCommandsLayoutEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_indirectCommandsLayoutEXT, rhs.m_indirectCommandsLayoutEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutEXT; + } + + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_indirectCommandsLayoutEXT ); + } + + operator VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_indirectCommandsLayoutEXT ) + { + getDispatcher()->vkDestroyIndirectCommandsLayoutEXT( static_cast( m_device ), + static_cast( m_indirectCommandsLayoutEXT ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_indirectCommandsLayoutEXT = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_indirectCommandsLayoutEXT, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_indirectCommandsLayoutEXT, rhs.m_indirectCommandsLayoutEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT m_indirectCommandsLayoutEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkIndirectCommandsLayoutNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutNV.html + class IndirectCommandsLayoutNV + { + public: + using CType = VkIndirectCommandsLayoutNV; + using CppType = VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eIndirectCommandsLayoutNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + IndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createIndirectCommandsLayoutNV( createInfo, allocator ); + } +# endif + + IndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkIndirectCommandsLayoutNV indirectCommandsLayout, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_indirectCommandsLayoutNV( indirectCommandsLayout ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + IndirectCommandsLayoutNV( std::nullptr_t ) {} + + ~IndirectCommandsLayoutNV() + { + clear(); + } + + IndirectCommandsLayoutNV() = delete; + IndirectCommandsLayoutNV( IndirectCommandsLayoutNV const & ) = delete; + + IndirectCommandsLayoutNV( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_indirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::exchange( rhs.m_indirectCommandsLayoutNV, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV const & ) = delete; + + IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_indirectCommandsLayoutNV, rhs.m_indirectCommandsLayoutNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutNV; + } + + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_indirectCommandsLayoutNV ); + } + + operator VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV() const VULKAN_HPP_NOEXCEPT + { + return m_indirectCommandsLayoutNV; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_indirectCommandsLayoutNV ) + { + getDispatcher()->vkDestroyIndirectCommandsLayoutNV( static_cast( m_device ), + static_cast( m_indirectCommandsLayoutNV ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_indirectCommandsLayoutNV = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_indirectCommandsLayoutNV, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_indirectCommandsLayoutNV, rhs.m_indirectCommandsLayoutNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV m_indirectCommandsLayoutNV = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkIndirectExecutionSetEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetEXT.html + class IndirectExecutionSetEXT + { + public: + using CType = VkIndirectExecutionSetEXT; + using CppType = VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eIndirectExecutionSetEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + IndirectExecutionSetEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::IndirectExecutionSetCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createIndirectExecutionSetEXT( createInfo, allocator ); + } +# endif + + IndirectExecutionSetEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkIndirectExecutionSetEXT indirectExecutionSet, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_indirectExecutionSetEXT( indirectExecutionSet ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + IndirectExecutionSetEXT( std::nullptr_t ) {} + + ~IndirectExecutionSetEXT() + { + clear(); + } + + IndirectExecutionSetEXT() = delete; + IndirectExecutionSetEXT( IndirectExecutionSetEXT const & ) = delete; + + IndirectExecutionSetEXT( IndirectExecutionSetEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_indirectExecutionSetEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_indirectExecutionSetEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + IndirectExecutionSetEXT & operator=( IndirectExecutionSetEXT const & ) = delete; + + IndirectExecutionSetEXT & operator=( IndirectExecutionSetEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_indirectExecutionSetEXT, rhs.m_indirectExecutionSetEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_indirectExecutionSetEXT; + } + + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_indirectExecutionSetEXT ); + } + + operator VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT() const VULKAN_HPP_NOEXCEPT + { + return m_indirectExecutionSetEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_indirectExecutionSetEXT ) + { + getDispatcher()->vkDestroyIndirectExecutionSetEXT( static_cast( m_device ), + static_cast( m_indirectExecutionSetEXT ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_indirectExecutionSetEXT = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_indirectExecutionSetEXT, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectExecutionSetEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_indirectExecutionSetEXT, rhs.m_indirectExecutionSetEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkUpdateIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html + void updatePipeline( ArrayProxy const & executionSetWrites ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkUpdateIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetShaderEXT.html + void updateShader( ArrayProxy const & executionSetWrites ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT m_indirectExecutionSetEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapEXT.html + class MicromapEXT + { + public: + using CType = VkMicromapEXT; + using CppType = VULKAN_HPP_NAMESPACE::MicromapEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eMicromapEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + MicromapEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::MicromapCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createMicromapEXT( createInfo, allocator ); + } +# endif + + MicromapEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkMicromapEXT micromap, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_micromapEXT( micromap ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + MicromapEXT( std::nullptr_t ) {} + + ~MicromapEXT() + { + clear(); + } + + MicromapEXT() = delete; + MicromapEXT( MicromapEXT const & ) = delete; + + MicromapEXT( MicromapEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_micromapEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_micromapEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + MicromapEXT & operator=( MicromapEXT const & ) = delete; + + MicromapEXT & operator=( MicromapEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_micromapEXT, rhs.m_micromapEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::MicromapEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_micromapEXT; + } + + VULKAN_HPP_NAMESPACE::MicromapEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_micromapEXT ); + } + + operator VULKAN_HPP_NAMESPACE::MicromapEXT() const VULKAN_HPP_NOEXCEPT + { + return m_micromapEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_micromapEXT ) + { + getDispatcher()->vkDestroyMicromapEXT( + static_cast( m_device ), static_cast( m_micromapEXT ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_micromapEXT = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::MicromapEXT release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_micromapEXT, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::MicromapEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_micromapEXT, rhs.m_micromapEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT m_micromapEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkOpticalFlowSessionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionNV.html + class OpticalFlowSessionNV + { + public: + using CType = VkOpticalFlowSessionNV; + using CppType = VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eOpticalFlowSessionNV; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + OpticalFlowSessionNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createOpticalFlowSessionNV( createInfo, allocator ); + } +# endif + + OpticalFlowSessionNV( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkOpticalFlowSessionNV session, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_opticalFlowSessionNV( session ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + OpticalFlowSessionNV( std::nullptr_t ) {} + + ~OpticalFlowSessionNV() + { + clear(); + } + + OpticalFlowSessionNV() = delete; + OpticalFlowSessionNV( OpticalFlowSessionNV const & ) = delete; + + OpticalFlowSessionNV( OpticalFlowSessionNV && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_opticalFlowSessionNV( VULKAN_HPP_NAMESPACE::exchange( rhs.m_opticalFlowSessionNV, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + OpticalFlowSessionNV & operator=( OpticalFlowSessionNV const & ) = delete; + + OpticalFlowSessionNV & operator=( OpticalFlowSessionNV && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_opticalFlowSessionNV, rhs.m_opticalFlowSessionNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_opticalFlowSessionNV; + } + + VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_opticalFlowSessionNV ); + } + + operator VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV() const VULKAN_HPP_NOEXCEPT + { + return m_opticalFlowSessionNV; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_opticalFlowSessionNV ) + { + getDispatcher()->vkDestroyOpticalFlowSessionNV( static_cast( m_device ), + static_cast( m_opticalFlowSessionNV ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_opticalFlowSessionNV = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_opticalFlowSessionNV, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::OpticalFlowSessionNV & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_opticalFlowSessionNV, rhs.m_opticalFlowSessionNV ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_NV_optical_flow === + + // wrapper function for command vkBindOpticalFlowSessionImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindOpticalFlowSessionImageNV.html + void bindImage( VULKAN_HPP_NAMESPACE::OpticalFlowSessionBindingPointNV bindingPoint, + VULKAN_HPP_NAMESPACE::ImageView view, + VULKAN_HPP_NAMESPACE::ImageLayout layout ) const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV m_opticalFlowSessionNV = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceConfigurationINTEL.html + class PerformanceConfigurationINTEL + { + public: + using CType = VkPerformanceConfigurationINTEL; + using CppType = VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePerformanceConfigurationINTEL; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + PerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) + { + *this = device.acquirePerformanceConfigurationINTEL( acquireInfo ); + } +# endif + + PerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkPerformanceConfigurationINTEL configuration ) + : m_device( device ), m_performanceConfigurationINTEL( configuration ), m_dispatcher( device.getDispatcher() ) + { + } + + PerformanceConfigurationINTEL( std::nullptr_t ) {} + + ~PerformanceConfigurationINTEL() + { + clear(); + } + + PerformanceConfigurationINTEL() = delete; + PerformanceConfigurationINTEL( PerformanceConfigurationINTEL const & ) = delete; + + PerformanceConfigurationINTEL( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_performanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::exchange( rhs.m_performanceConfigurationINTEL, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL const & ) = delete; + + PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_performanceConfigurationINTEL, rhs.m_performanceConfigurationINTEL ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_performanceConfigurationINTEL; + } + + VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_performanceConfigurationINTEL ); + } + + operator VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL() const VULKAN_HPP_NOEXCEPT + { + return m_performanceConfigurationINTEL; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_performanceConfigurationINTEL ) + { + getDispatcher()->vkReleasePerformanceConfigurationINTEL( static_cast( m_device ), + static_cast( m_performanceConfigurationINTEL ) ); + } + m_device = nullptr; + m_performanceConfigurationINTEL = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL release() + { + m_device = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_performanceConfigurationINTEL, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_performanceConfigurationINTEL, rhs.m_performanceConfigurationINTEL ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL m_performanceConfigurationINTEL = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCache.html + class PipelineCache + { + public: + using CType = VkPipelineCache; + using CppType = VULKAN_HPP_NAMESPACE::PipelineCache; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineCache; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipelineCache; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + PipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createPipelineCache( createInfo, allocator ); + } +# endif + + PipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkPipelineCache pipelineCache, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_pipelineCache( pipelineCache ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + PipelineCache( std::nullptr_t ) {} + + ~PipelineCache() + { + clear(); + } + + PipelineCache() = delete; + PipelineCache( PipelineCache const & ) = delete; + + PipelineCache( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_pipelineCache( VULKAN_HPP_NAMESPACE::exchange( rhs.m_pipelineCache, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + PipelineCache & operator=( PipelineCache const & ) = delete; + + PipelineCache & operator=( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipelineCache, rhs.m_pipelineCache ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::PipelineCache const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_pipelineCache; + } + + VULKAN_HPP_NAMESPACE::PipelineCache const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_pipelineCache ); + } + + operator VULKAN_HPP_NAMESPACE::PipelineCache() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineCache; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_pipelineCache ) + { + getDispatcher()->vkDestroyPipelineCache( static_cast( m_device ), + static_cast( m_pipelineCache ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_pipelineCache = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::PipelineCache release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_pipelineCache, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipelineCache, rhs.m_pipelineCache ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + VULKAN_HPP_NODISCARD std::vector getData() const; + + // wrapper function for command vkMergePipelineCaches, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergePipelineCaches.html + void merge( ArrayProxy const & srcCaches ) const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::PipelineCache m_pipelineCache = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipeline.html + class Pipeline + { + public: + using CType = VkPipeline; + using CppType = VULKAN_HPP_NAMESPACE::Pipeline; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipeline; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipeline; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createComputePipeline( pipelineCache, createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::DataGraphPipelineCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDataGraphPipelineARM( deferredOperation, pipelineCache, createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineCreateInfoAMDX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createExecutionGraphPipelineAMDX( pipelineCache, createInfo, allocator ); + } +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createGraphicsPipeline( pipelineCache, createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createRayTracingPipelineKHR( deferredOperation, pipelineCache, createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createRayTracingPipelineNV( pipelineCache, createInfo, allocator ); + } +# endif + + Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkPipeline pipeline, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr, + Result successCode = Result::eSuccess ) + : m_device( device ) + , m_pipeline( pipeline ) + , m_allocator( static_cast( allocator ) ) + , m_constructorSuccessCode( successCode ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Pipeline( std::nullptr_t ) {} + + ~Pipeline() + { + clear(); + } + + Pipeline() = delete; + Pipeline( Pipeline const & ) = delete; + + Pipeline( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_pipeline( VULKAN_HPP_NAMESPACE::exchange( rhs.m_pipeline, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_constructorSuccessCode( VULKAN_HPP_NAMESPACE::exchange( rhs.m_constructorSuccessCode, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Pipeline & operator=( Pipeline const & ) = delete; + + Pipeline & operator=( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipeline, rhs.m_pipeline ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Pipeline const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_pipeline; + } + + VULKAN_HPP_NAMESPACE::Pipeline const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_pipeline ); + } + + operator VULKAN_HPP_NAMESPACE::Pipeline() const VULKAN_HPP_NOEXCEPT + { + return m_pipeline; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_pipeline ) + { + getDispatcher()->vkDestroyPipeline( + static_cast( m_device ), static_cast( m_pipeline ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_pipeline = nullptr; + m_allocator = nullptr; + m_constructorSuccessCode = Result::eErrorUnknown; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Pipeline release() + { + m_device = nullptr; + m_allocator = nullptr; + m_constructorSuccessCode = Result::eErrorUnknown; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_pipeline, nullptr ); + } + + Result getConstructorSuccessCode() const + { + return m_constructorSuccessCode; + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipeline, rhs.m_pipeline ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_AMD_shader_info === + + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + VULKAN_HPP_NODISCARD std::vector getShaderInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, + VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType ) const; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkGetExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineScratchSizeAMDX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineScratchSizeAMDX getExecutionGraphScratchSizeAMDX() const; + + // wrapper function for command vkGetExecutionGraphPipelineNodeIndexAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineNodeIndexAMDX.html + VULKAN_HPP_NODISCARD uint32_t getExecutionGraphNodeIndexAMDX( const VULKAN_HPP_NAMESPACE::PipelineShaderStageNodeCreateInfoAMDX & nodeInfo ) const; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD std::vector getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const; + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD DataType getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const; + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD std::vector + getRayTracingCaptureReplayShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const; + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD DataType getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const; + + // wrapper function for command vkGetRayTracingShaderGroupStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupStackSizeKHR.html + VULKAN_HPP_NODISCARD DeviceSize getRayTracingShaderGroupStackSizeKHR( uint32_t group, + VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD std::vector getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const; + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD DataType getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const; + + // wrapper function for command vkCompileDeferredNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCompileDeferredNV.html + void compileDeferredNV( uint32_t shader ) const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Pipeline m_pipeline = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + Result m_constructorSuccessCode = Result::eErrorUnknown; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class Pipelines : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createComputePipelines( pipelineCache, createInfos, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createDataGraphPipelinesARM( deferredOperation, pipelineCache, createInfos, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createExecutionGraphPipelinesAMDX( pipelineCache, createInfos, allocator ); + } +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createGraphicsPipelines( pipelineCache, createInfos, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createRayTracingPipelinesKHR( deferredOperation, pipelineCache, createInfos, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Pipelines( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createRayTracingPipelinesNV( pipelineCache, createInfos, allocator ); + } +# endif + + Pipelines( std::nullptr_t ) {} + + Pipelines() = delete; + Pipelines( Pipelines const & ) = delete; + Pipelines( Pipelines && rhs ) = default; + Pipelines & operator=( Pipelines const & ) = delete; + Pipelines & operator=( Pipelines && rhs ) = default; + + private: + Pipelines( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkPipelineBinaryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryKHR.html + class PipelineBinaryKHR + { + public: + using CType = VkPipelineBinaryKHR; + using CppType = VULKAN_HPP_NAMESPACE::PipelineBinaryKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineBinaryKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: + PipelineBinaryKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkPipelineBinaryKHR pipelineBinary, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr, + Result successCode = Result::eSuccess ) + : m_device( device ) + , m_pipelineBinaryKHR( pipelineBinary ) + , m_allocator( static_cast( allocator ) ) + , m_constructorSuccessCode( successCode ) + , m_dispatcher( device.getDispatcher() ) + { + } + + PipelineBinaryKHR( std::nullptr_t ) {} + + ~PipelineBinaryKHR() + { + clear(); + } + + PipelineBinaryKHR() = delete; + PipelineBinaryKHR( PipelineBinaryKHR const & ) = delete; + + PipelineBinaryKHR( PipelineBinaryKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_pipelineBinaryKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_pipelineBinaryKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_constructorSuccessCode( VULKAN_HPP_NAMESPACE::exchange( rhs.m_constructorSuccessCode, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + PipelineBinaryKHR & operator=( PipelineBinaryKHR const & ) = delete; + + PipelineBinaryKHR & operator=( PipelineBinaryKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipelineBinaryKHR, rhs.m_pipelineBinaryKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_pipelineBinaryKHR; + } + + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_pipelineBinaryKHR ); + } + + operator VULKAN_HPP_NAMESPACE::PipelineBinaryKHR() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineBinaryKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_pipelineBinaryKHR ) + { + getDispatcher()->vkDestroyPipelineBinaryKHR( static_cast( m_device ), + static_cast( m_pipelineBinaryKHR ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_pipelineBinaryKHR = nullptr; + m_allocator = nullptr; + m_constructorSuccessCode = Result::eErrorUnknown; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR release() + { + m_device = nullptr; + m_allocator = nullptr; + m_constructorSuccessCode = Result::eErrorUnknown; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_pipelineBinaryKHR, nullptr ); + } + + Result getConstructorSuccessCode() const + { + return m_constructorSuccessCode; + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineBinaryKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipelineBinaryKHR, rhs.m_pipelineBinaryKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR m_pipelineBinaryKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + Result m_constructorSuccessCode = Result::eErrorUnknown; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class PipelineBinaryKHRs : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + PipelineBinaryKHRs( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::PipelineBinaryCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createPipelineBinariesKHR( createInfo, allocator ); + } +# endif + + PipelineBinaryKHRs( std::nullptr_t ) {} + + PipelineBinaryKHRs() = delete; + PipelineBinaryKHRs( PipelineBinaryKHRs const & ) = delete; + PipelineBinaryKHRs( PipelineBinaryKHRs && rhs ) = default; + PipelineBinaryKHRs & operator=( PipelineBinaryKHRs const & ) = delete; + PipelineBinaryKHRs & operator=( PipelineBinaryKHRs && rhs ) = default; + + private: + PipelineBinaryKHRs( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkPipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineLayout.html + class PipelineLayout + { + public: + using CType = VkPipelineLayout; + using CppType = VULKAN_HPP_NAMESPACE::PipelineLayout; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePipelineLayout; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::ePipelineLayout; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + PipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createPipelineLayout( createInfo, allocator ); + } +# endif + + PipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkPipelineLayout pipelineLayout, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_pipelineLayout( pipelineLayout ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + PipelineLayout( std::nullptr_t ) {} + + ~PipelineLayout() + { + clear(); + } + + PipelineLayout() = delete; + PipelineLayout( PipelineLayout const & ) = delete; + + PipelineLayout( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_pipelineLayout( VULKAN_HPP_NAMESPACE::exchange( rhs.m_pipelineLayout, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + PipelineLayout & operator=( PipelineLayout const & ) = delete; + + PipelineLayout & operator=( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipelineLayout, rhs.m_pipelineLayout ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::PipelineLayout const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_pipelineLayout; + } + + VULKAN_HPP_NAMESPACE::PipelineLayout const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_pipelineLayout ); + } + + operator VULKAN_HPP_NAMESPACE::PipelineLayout() const VULKAN_HPP_NOEXCEPT + { + return m_pipelineLayout; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_pipelineLayout ) + { + getDispatcher()->vkDestroyPipelineLayout( static_cast( m_device ), + static_cast( m_pipelineLayout ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_pipelineLayout = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::PipelineLayout release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_pipelineLayout, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineLayout & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_pipelineLayout, rhs.m_pipelineLayout ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout m_pipelineLayout = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkPrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPrivateDataSlot.html + class PrivateDataSlot + { + public: + using CType = VkPrivateDataSlot; + using CppType = VULKAN_HPP_NAMESPACE::PrivateDataSlot; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlot; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + PrivateDataSlot( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createPrivateDataSlot( createInfo, allocator ); + } +# endif + + PrivateDataSlot( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkPrivateDataSlot privateDataSlot, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_privateDataSlot( privateDataSlot ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + PrivateDataSlot( std::nullptr_t ) {} + + ~PrivateDataSlot() + { + clear(); + } + + PrivateDataSlot() = delete; + PrivateDataSlot( PrivateDataSlot const & ) = delete; + + PrivateDataSlot( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_privateDataSlot( VULKAN_HPP_NAMESPACE::exchange( rhs.m_privateDataSlot, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + PrivateDataSlot & operator=( PrivateDataSlot const & ) = delete; + + PrivateDataSlot & operator=( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_privateDataSlot, rhs.m_privateDataSlot ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::PrivateDataSlot const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_privateDataSlot; + } + + VULKAN_HPP_NAMESPACE::PrivateDataSlot const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_privateDataSlot ); + } + + operator VULKAN_HPP_NAMESPACE::PrivateDataSlot() const VULKAN_HPP_NOEXCEPT + { + return m_privateDataSlot; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_privateDataSlot ) + { + getDispatcher()->vkDestroyPrivateDataSlot( static_cast( m_device ), + static_cast( m_privateDataSlot ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_privateDataSlot = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::PrivateDataSlot release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_privateDataSlot, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_privateDataSlot, rhs.m_privateDataSlot ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::PrivateDataSlot m_privateDataSlot = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPool.html + class QueryPool + { + public: + using CType = VkQueryPool; + using CppType = VULKAN_HPP_NAMESPACE::QueryPool; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eQueryPool; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eQueryPool; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + QueryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createQueryPool( createInfo, allocator ); + } +# endif + + QueryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkQueryPool queryPool, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_queryPool( queryPool ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + QueryPool( std::nullptr_t ) {} + + ~QueryPool() + { + clear(); + } + + QueryPool() = delete; + QueryPool( QueryPool const & ) = delete; + + QueryPool( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_queryPool( VULKAN_HPP_NAMESPACE::exchange( rhs.m_queryPool, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + QueryPool & operator=( QueryPool const & ) = delete; + + QueryPool & operator=( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_queryPool, rhs.m_queryPool ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::QueryPool const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_queryPool; + } + + VULKAN_HPP_NAMESPACE::QueryPool const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_queryPool ); + } + + operator VULKAN_HPP_NAMESPACE::QueryPool() const VULKAN_HPP_NOEXCEPT + { + return m_queryPool; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_queryPool ) + { + getDispatcher()->vkDestroyQueryPool( + static_cast( m_device ), static_cast( m_queryPool ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_queryPool = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::QueryPool release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_queryPool, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::QueryPool & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_queryPool, rhs.m_queryPool ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD std::pair> + getResults( uint32_t firstQuery, + uint32_t queryCount, + size_t dataSize, + VULKAN_HPP_NAMESPACE::DeviceSize stride, + VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD std::pair getResult( uint32_t firstQuery, + uint32_t queryCount, + VULKAN_HPP_NAMESPACE::DeviceSize stride, + VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPool.html + void reset( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_EXT_host_query_reset === + + // wrapper function for command vkResetQueryPoolEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPoolEXT.html + void resetEXT( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::QueryPool m_queryPool = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueue.html + class Queue + { + public: + using CType = VkQueue; + using CppType = VULKAN_HPP_NAMESPACE::Queue; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eQueue; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eQueue; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, uint32_t queueFamilyIndex, uint32_t queueIndex ) + { + *this = device.getQueue( queueFamilyIndex, queueIndex ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) + { + *this = device.getQueue2( queueInfo ); + } +# endif + + Queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, VkQueue queue ) : m_queue( queue ), m_dispatcher( device.getDispatcher() ) + { + } + + Queue( std::nullptr_t ) {} + + ~Queue() + { + clear(); + } + + Queue() = delete; + + Queue( Queue const & rhs ) : m_queue( rhs.m_queue ), m_dispatcher( rhs.m_dispatcher ) {} + + Queue( Queue && rhs ) VULKAN_HPP_NOEXCEPT + : m_queue( VULKAN_HPP_NAMESPACE::exchange( rhs.m_queue, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Queue & operator=( Queue const & rhs ) + { + m_queue = rhs.m_queue; + m_dispatcher = rhs.m_dispatcher; + return *this; + } + + Queue & operator=( Queue && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_queue, rhs.m_queue ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Queue const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_queue; + } + + VULKAN_HPP_NAMESPACE::Queue const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_queue ); + } + + operator VULKAN_HPP_NAMESPACE::Queue() const VULKAN_HPP_NOEXCEPT + { + return m_queue; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + m_queue = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Queue release() + { + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_queue, nullptr ); + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Queue & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_queue, rhs.m_queue ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkQueueSubmit, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit.html + void submit( ArrayProxy const & submits, + VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + // wrapper function for command vkQueueWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueWaitIdle.html + void waitIdle() const; + + // wrapper function for command vkQueueBindSparse, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBindSparse.html + void bindSparse( ArrayProxy const & bindInfo, + VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkQueueSubmit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2.html + void submit2( ArrayProxy const & submits, + VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_KHR_swapchain === + + // wrapper function for command vkQueuePresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueuePresentKHR.html + VULKAN_HPP_NODISCARD Result presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo ) const; + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkQueueBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBeginDebugUtilsLabelEXT.html + void beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkQueueEndDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueEndDebugUtilsLabelEXT.html + void endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkQueueInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueInsertDebugUtilsLabelEXT.html + void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_NV_device_diagnostic_checkpoints === + + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + VULKAN_HPP_NODISCARD std::vector getCheckpointDataNV() const; + + // wrapper function for command vkGetQueueCheckpointData2NV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + VULKAN_HPP_NODISCARD std::vector getCheckpointData2NV() const; + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkQueueSetPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSetPerformanceConfigurationINTEL.html + void setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration ) const; + + //=== VK_KHR_synchronization2 === + + // wrapper function for command vkQueueSubmit2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2KHR.html + void submit2KHR( ArrayProxy const & submits, + VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_NV_low_latency2 === + + // wrapper function for command vkQueueNotifyOutOfBandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueNotifyOutOfBandNV.html + void notifyOutOfBandNV( const VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeInfoNV & queueTypeInfo ) const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Queue m_queue = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPass.html + class RenderPass + { + public: + using CType = VkRenderPass; + using CppType = VULKAN_HPP_NAMESPACE::RenderPass; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eRenderPass; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eRenderPass; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createRenderPass( createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createRenderPass2( createInfo, allocator ); + } +# endif + + RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkRenderPass renderPass, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_renderPass( renderPass ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + RenderPass( std::nullptr_t ) {} + + ~RenderPass() + { + clear(); + } + + RenderPass() = delete; + RenderPass( RenderPass const & ) = delete; + + RenderPass( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_renderPass( VULKAN_HPP_NAMESPACE::exchange( rhs.m_renderPass, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + RenderPass & operator=( RenderPass const & ) = delete; + + RenderPass & operator=( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_renderPass, rhs.m_renderPass ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::RenderPass const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_renderPass; + } + + VULKAN_HPP_NAMESPACE::RenderPass const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_renderPass ); + } + + operator VULKAN_HPP_NAMESPACE::RenderPass() const VULKAN_HPP_NOEXCEPT + { + return m_renderPass; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_renderPass ) + { + getDispatcher()->vkDestroyRenderPass( + static_cast( m_device ), static_cast( m_renderPass ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_renderPass = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::RenderPass release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_renderPass, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::RenderPass & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_renderPass, rhs.m_renderPass ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkGetRenderAreaGranularity, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderAreaGranularity.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Extent2D getRenderAreaGranularity() const VULKAN_HPP_NOEXCEPT; + + //=== VK_HUAWEI_subpass_shading === + + // wrapper function for command vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Extent2D getSubpassShadingMaxWorkgroupSizeHUAWEI() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::RenderPass m_renderPass = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSampler.html + class Sampler + { + public: + using CType = VkSampler; + using CppType = VULKAN_HPP_NAMESPACE::Sampler; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSampler; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSampler; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createSampler( createInfo, allocator ); + } +# endif + + Sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkSampler sampler, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_sampler( sampler ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Sampler( std::nullptr_t ) {} + + ~Sampler() + { + clear(); + } + + Sampler() = delete; + Sampler( Sampler const & ) = delete; + + Sampler( Sampler && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_sampler( VULKAN_HPP_NAMESPACE::exchange( rhs.m_sampler, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Sampler & operator=( Sampler const & ) = delete; + + Sampler & operator=( Sampler && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_sampler, rhs.m_sampler ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Sampler const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_sampler; + } + + VULKAN_HPP_NAMESPACE::Sampler const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_sampler ); + } + + operator VULKAN_HPP_NAMESPACE::Sampler() const VULKAN_HPP_NOEXCEPT + { + return m_sampler; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_sampler ) + { + getDispatcher()->vkDestroySampler( + static_cast( m_device ), static_cast( m_sampler ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_sampler = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Sampler release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_sampler, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Sampler & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_sampler, rhs.m_sampler ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Sampler m_sampler = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSamplerYcbcrConversion, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrConversion.html + class SamplerYcbcrConversion + { + public: + using CType = VkSamplerYcbcrConversion; + using CppType = VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSamplerYcbcrConversion; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSamplerYcbcrConversion; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + SamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createSamplerYcbcrConversion( createInfo, allocator ); + } +# endif + + SamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkSamplerYcbcrConversion ycbcrConversion, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_samplerYcbcrConversion( ycbcrConversion ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + SamplerYcbcrConversion( std::nullptr_t ) {} + + ~SamplerYcbcrConversion() + { + clear(); + } + + SamplerYcbcrConversion() = delete; + SamplerYcbcrConversion( SamplerYcbcrConversion const & ) = delete; + + SamplerYcbcrConversion( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_samplerYcbcrConversion( VULKAN_HPP_NAMESPACE::exchange( rhs.m_samplerYcbcrConversion, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + SamplerYcbcrConversion & operator=( SamplerYcbcrConversion const & ) = delete; + + SamplerYcbcrConversion & operator=( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_samplerYcbcrConversion, rhs.m_samplerYcbcrConversion ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_samplerYcbcrConversion; + } + + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_samplerYcbcrConversion ); + } + + operator VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion() const VULKAN_HPP_NOEXCEPT + { + return m_samplerYcbcrConversion; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_samplerYcbcrConversion ) + { + getDispatcher()->vkDestroySamplerYcbcrConversion( static_cast( m_device ), + static_cast( m_samplerYcbcrConversion ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_samplerYcbcrConversion = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_samplerYcbcrConversion, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_samplerYcbcrConversion, rhs.m_samplerYcbcrConversion ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion m_samplerYcbcrConversion = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphore.html + class Semaphore + { + public: + using CType = VkSemaphore; + using CppType = VULKAN_HPP_NAMESPACE::Semaphore; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSemaphore; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSemaphore; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + Semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createSemaphore( createInfo, allocator ); + } +# endif + + Semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkSemaphore semaphore, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_semaphore( semaphore ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + Semaphore( std::nullptr_t ) {} + + ~Semaphore() + { + clear(); + } + + Semaphore() = delete; + Semaphore( Semaphore const & ) = delete; + + Semaphore( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_semaphore( VULKAN_HPP_NAMESPACE::exchange( rhs.m_semaphore, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + Semaphore & operator=( Semaphore const & ) = delete; + + Semaphore & operator=( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_semaphore, rhs.m_semaphore ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::Semaphore const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_semaphore; + } + + VULKAN_HPP_NAMESPACE::Semaphore const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_semaphore ); + } + + operator VULKAN_HPP_NAMESPACE::Semaphore() const VULKAN_HPP_NOEXCEPT + { + return m_semaphore; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_semaphore ) + { + getDispatcher()->vkDestroySemaphore( + static_cast( m_device ), static_cast( m_semaphore ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_semaphore = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::Semaphore release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_semaphore, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Semaphore & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_semaphore, rhs.m_semaphore ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkGetSemaphoreCounterValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValue.html + VULKAN_HPP_NODISCARD uint64_t getCounterValue() const; + + //=== VK_KHR_timeline_semaphore === + + // wrapper function for command vkGetSemaphoreCounterValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValueKHR.html + VULKAN_HPP_NODISCARD uint64_t getCounterValueKHR() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::Semaphore m_semaphore = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkShaderEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderEXT.html + class ShaderEXT + { + public: + using CType = VkShaderEXT; + using CppType = VULKAN_HPP_NAMESPACE::ShaderEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eShaderEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + ShaderEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ShaderCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createShaderEXT( createInfo, allocator ); + } +# endif + + ShaderEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkShaderEXT shader, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr, + Result successCode = Result::eSuccess ) + : m_device( device ) + , m_shaderEXT( shader ) + , m_allocator( static_cast( allocator ) ) + , m_constructorSuccessCode( successCode ) + , m_dispatcher( device.getDispatcher() ) + { + } + + ShaderEXT( std::nullptr_t ) {} + + ~ShaderEXT() + { + clear(); + } + + ShaderEXT() = delete; + ShaderEXT( ShaderEXT const & ) = delete; + + ShaderEXT( ShaderEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_shaderEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_shaderEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_constructorSuccessCode( VULKAN_HPP_NAMESPACE::exchange( rhs.m_constructorSuccessCode, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + ShaderEXT & operator=( ShaderEXT const & ) = delete; + + ShaderEXT & operator=( ShaderEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_shaderEXT, rhs.m_shaderEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::ShaderEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_shaderEXT; + } + + VULKAN_HPP_NAMESPACE::ShaderEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_shaderEXT ); + } + + operator VULKAN_HPP_NAMESPACE::ShaderEXT() const VULKAN_HPP_NOEXCEPT + { + return m_shaderEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_shaderEXT ) + { + getDispatcher()->vkDestroyShaderEXT( + static_cast( m_device ), static_cast( m_shaderEXT ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_shaderEXT = nullptr; + m_allocator = nullptr; + m_constructorSuccessCode = Result::eErrorUnknown; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::ShaderEXT release() + { + m_device = nullptr; + m_allocator = nullptr; + m_constructorSuccessCode = Result::eErrorUnknown; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_shaderEXT, nullptr ); + } + + Result getConstructorSuccessCode() const + { + return m_constructorSuccessCode; + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ShaderEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_shaderEXT, rhs.m_shaderEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_constructorSuccessCode, rhs.m_constructorSuccessCode ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_EXT_shader_object === + + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + VULKAN_HPP_NODISCARD std::vector getBinaryData() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::ShaderEXT m_shaderEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + Result m_constructorSuccessCode = Result::eErrorUnknown; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class ShaderEXTs : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + ShaderEXTs( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createShadersEXT( createInfos, allocator ); + } +# endif + + ShaderEXTs( std::nullptr_t ) {} + + ShaderEXTs() = delete; + ShaderEXTs( ShaderEXTs const & ) = delete; + ShaderEXTs( ShaderEXTs && rhs ) = default; + ShaderEXTs & operator=( ShaderEXTs const & ) = delete; + ShaderEXTs & operator=( ShaderEXTs && rhs ) = default; + + private: + ShaderEXTs( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderModule.html + class ShaderModule + { + public: + using CType = VkShaderModule; + using CppType = VULKAN_HPP_NAMESPACE::ShaderModule; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eShaderModule; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eShaderModule; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + ShaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createShaderModule( createInfo, allocator ); + } +# endif + + ShaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkShaderModule shaderModule, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_shaderModule( shaderModule ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + ShaderModule( std::nullptr_t ) {} + + ~ShaderModule() + { + clear(); + } + + ShaderModule() = delete; + ShaderModule( ShaderModule const & ) = delete; + + ShaderModule( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_shaderModule( VULKAN_HPP_NAMESPACE::exchange( rhs.m_shaderModule, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + ShaderModule & operator=( ShaderModule const & ) = delete; + + ShaderModule & operator=( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_shaderModule, rhs.m_shaderModule ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::ShaderModule const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_shaderModule; + } + + VULKAN_HPP_NAMESPACE::ShaderModule const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_shaderModule ); + } + + operator VULKAN_HPP_NAMESPACE::ShaderModule() const VULKAN_HPP_NOEXCEPT + { + return m_shaderModule; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_shaderModule ) + { + getDispatcher()->vkDestroyShaderModule( + static_cast( m_device ), static_cast( m_shaderModule ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_shaderModule = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::ShaderModule release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_shaderModule, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ShaderModule & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_shaderModule, rhs.m_shaderModule ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_EXT_shader_module_identifier === + + // wrapper function for command vkGetShaderModuleIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleIdentifierEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT getIdentifierEXT() const VULKAN_HPP_NOEXCEPT; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::ShaderModule m_shaderModule = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceKHR.html + class SurfaceKHR + { + public: + using CType = VkSurfaceKHR; + using CppType = VULKAN_HPP_NAMESPACE::SurfaceKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSurfaceKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSurfaceKHR; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createAndroidSurfaceKHR( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createDirectFBSurfaceEXT( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createDisplayPlaneSurfaceKHR( createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createHeadlessSurfaceEXT( createInfo, allocator ); + } +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_IOS_MVK ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createIOSSurfaceMVK( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_IOS_MVK*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_FUCHSIA ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createImagePipeSurfaceFUCHSIA( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createMacOSSurfaceMVK( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_METAL_EXT ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createMetalSurfaceEXT( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createScreenSurfaceQNX( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_GGP ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createStreamDescriptorSurfaceGGP( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_GGP*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_OHOS ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::SurfaceCreateInfoOHOS const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createSurfaceOHOS( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_OHOS*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_VI_NN ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createViSurfaceNN( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_VI_NN*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createWaylandSurfaceKHR( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createWin32SurfaceKHR( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_XCB_KHR ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createXcbSurfaceKHR( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_XCB_KHR*/ +# endif + +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = instance.createXlibSurfaceKHR( createInfo, allocator ); + } +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ +# endif + + SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance, + VkSurfaceKHR surface, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_instance( instance ) + , m_surfaceKHR( surface ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( instance.getDispatcher() ) + { + } + + SurfaceKHR( std::nullptr_t ) {} + + ~SurfaceKHR() + { + clear(); + } + + SurfaceKHR() = delete; + SurfaceKHR( SurfaceKHR const & ) = delete; + + SurfaceKHR( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_instance( VULKAN_HPP_NAMESPACE::exchange( rhs.m_instance, {} ) ) + , m_surfaceKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_surfaceKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + SurfaceKHR & operator=( SurfaceKHR const & ) = delete; + + SurfaceKHR & operator=( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_surfaceKHR, rhs.m_surfaceKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::SurfaceKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_surfaceKHR; + } + + VULKAN_HPP_NAMESPACE::SurfaceKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_surfaceKHR ); + } + + operator VULKAN_HPP_NAMESPACE::SurfaceKHR() const VULKAN_HPP_NOEXCEPT + { + return m_surfaceKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_surfaceKHR ) + { + getDispatcher()->vkDestroySurfaceKHR( + static_cast( m_instance ), static_cast( m_surfaceKHR ), reinterpret_cast( m_allocator ) ); + } + m_instance = nullptr; + m_surfaceKHR = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::SurfaceKHR release() + { + m_instance = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_surfaceKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Instance getInstance() const + { + return m_instance; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_instance, rhs.m_instance ); + std::swap( m_surfaceKHR, rhs.m_surfaceKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Instance m_instance = {}; + VULKAN_HPP_NAMESPACE::SurfaceKHR m_surfaceKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::InstanceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainKHR.html + class SwapchainKHR + { + public: + using CType = VkSwapchainKHR; + using CppType = VULKAN_HPP_NAMESPACE::SwapchainKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eSwapchainKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eSwapchainKHR; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + SwapchainKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createSwapchainKHR( createInfo, allocator ); + } +# endif + + SwapchainKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkSwapchainKHR swapchain, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_swapchainKHR( swapchain ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + SwapchainKHR( std::nullptr_t ) {} + + ~SwapchainKHR() + { + clear(); + } + + SwapchainKHR() = delete; + SwapchainKHR( SwapchainKHR const & ) = delete; + + SwapchainKHR( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_swapchainKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_swapchainKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + SwapchainKHR & operator=( SwapchainKHR const & ) = delete; + + SwapchainKHR & operator=( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_swapchainKHR, rhs.m_swapchainKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::SwapchainKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_swapchainKHR; + } + + VULKAN_HPP_NAMESPACE::SwapchainKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_swapchainKHR ); + } + + operator VULKAN_HPP_NAMESPACE::SwapchainKHR() const VULKAN_HPP_NOEXCEPT + { + return m_swapchainKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_swapchainKHR ) + { + getDispatcher()->vkDestroySwapchainKHR( + static_cast( m_device ), static_cast( m_swapchainKHR ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_swapchainKHR = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::SwapchainKHR release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_swapchainKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_swapchainKHR, rhs.m_swapchainKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_KHR_swapchain === + + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + VULKAN_HPP_NODISCARD std::vector getImages() const; + + // wrapper function for command vkAcquireNextImageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImageKHR.html + VULKAN_HPP_NODISCARD std::pair acquireNextImage( uint64_t timeout, + VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT, + VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const; + + //=== VK_EXT_display_control === + + // wrapper function for command vkGetSwapchainCounterEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainCounterEXT.html + VULKAN_HPP_NODISCARD uint64_t getCounterEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter ) const; + + //=== VK_GOOGLE_display_timing === + + // wrapper function for command vkGetRefreshCycleDurationGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRefreshCycleDurationGOOGLE.html + VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE getRefreshCycleDurationGOOGLE() const; + + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + VULKAN_HPP_NODISCARD std::vector getPastPresentationTimingGOOGLE() const; + + //=== VK_KHR_shared_presentable_image === + + // wrapper function for command vkGetSwapchainStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainStatusKHR.html + VULKAN_HPP_NODISCARD Result getStatus() const; + + //=== VK_AMD_display_native_hdr === + + // wrapper function for command vkSetLocalDimmingAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLocalDimmingAMD.html + void setLocalDimmingAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable ) const VULKAN_HPP_NOEXCEPT; + + //=== VK_KHR_present_wait === + + // wrapper function for command vkWaitForPresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresentKHR.html + VULKAN_HPP_NODISCARD Result waitForPresent( uint64_t presentId, uint64_t timeout ) const; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper function for command vkAcquireFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireFullScreenExclusiveModeEXT.html + void acquireFullScreenExclusiveModeEXT() const; + + // wrapper function for command vkReleaseFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseFullScreenExclusiveModeEXT.html + void releaseFullScreenExclusiveModeEXT() const; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_present_wait2 === + + // wrapper function for command vkWaitForPresent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresent2KHR.html + VULKAN_HPP_NODISCARD Result waitForPresent2( const VULKAN_HPP_NAMESPACE::PresentWait2InfoKHR & presentWait2Info ) const; + + //=== VK_NV_low_latency2 === + + // wrapper function for command vkSetLatencySleepModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencySleepModeNV.html + void setLatencySleepModeNV( const VULKAN_HPP_NAMESPACE::LatencySleepModeInfoNV & sleepModeInfo ) const; + + // wrapper function for command vkLatencySleepNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkLatencySleepNV.html + void latencySleepNV( const VULKAN_HPP_NAMESPACE::LatencySleepInfoNV & sleepInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkSetLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencyMarkerNV.html + void setLatencyMarkerNV( const VULKAN_HPP_NAMESPACE::SetLatencyMarkerInfoNV & latencyMarkerInfo ) const VULKAN_HPP_NOEXCEPT; + + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + VULKAN_HPP_NODISCARD std::vector getLatencyTimingsNV() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::SwapchainKHR m_swapchainKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + class SwapchainKHRs : public std::vector + { + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + SwapchainKHRs( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createSharedSwapchainsKHR( createInfos, allocator ); + } +# endif + + SwapchainKHRs( std::nullptr_t ) {} + + SwapchainKHRs() = delete; + SwapchainKHRs( SwapchainKHRs const & ) = delete; + SwapchainKHRs( SwapchainKHRs && rhs ) = default; + SwapchainKHRs & operator=( SwapchainKHRs const & ) = delete; + SwapchainKHRs & operator=( SwapchainKHRs && rhs ) = default; + + private: + SwapchainKHRs( std::vector && rhs ) + { + std::swap( *this, rhs ); + } + }; + + // wrapper class for handle VkTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorARM.html + class TensorARM + { + public: + using CType = VkTensorARM; + using CppType = VULKAN_HPP_NAMESPACE::TensorARM; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eTensorARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + TensorARM( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::TensorCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createTensorARM( createInfo, allocator ); + } +# endif + + TensorARM( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkTensorARM tensor, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_tensorARM( tensor ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + TensorARM( std::nullptr_t ) {} + + ~TensorARM() + { + clear(); + } + + TensorARM() = delete; + TensorARM( TensorARM const & ) = delete; + + TensorARM( TensorARM && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_tensorARM( VULKAN_HPP_NAMESPACE::exchange( rhs.m_tensorARM, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + TensorARM & operator=( TensorARM const & ) = delete; + + TensorARM & operator=( TensorARM && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_tensorARM, rhs.m_tensorARM ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::TensorARM const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_tensorARM; + } + + VULKAN_HPP_NAMESPACE::TensorARM const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_tensorARM ); + } + + operator VULKAN_HPP_NAMESPACE::TensorARM() const VULKAN_HPP_NOEXCEPT + { + return m_tensorARM; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_tensorARM ) + { + getDispatcher()->vkDestroyTensorARM( + static_cast( m_device ), static_cast( m_tensorARM ), reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_tensorARM = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::TensorARM release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_tensorARM, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::TensorARM & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_tensorARM, rhs.m_tensorARM ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::TensorARM m_tensorARM = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorViewARM.html + class TensorViewARM + { + public: + using CType = VkTensorViewARM; + using CppType = VULKAN_HPP_NAMESPACE::TensorViewARM; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eTensorViewARM; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + TensorViewARM( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::TensorViewCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createTensorViewARM( createInfo, allocator ); + } +# endif + + TensorViewARM( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkTensorViewARM tensorView, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_tensorViewARM( tensorView ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + TensorViewARM( std::nullptr_t ) {} + + ~TensorViewARM() + { + clear(); + } + + TensorViewARM() = delete; + TensorViewARM( TensorViewARM const & ) = delete; + + TensorViewARM( TensorViewARM && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_tensorViewARM( VULKAN_HPP_NAMESPACE::exchange( rhs.m_tensorViewARM, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + TensorViewARM & operator=( TensorViewARM const & ) = delete; + + TensorViewARM & operator=( TensorViewARM && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_tensorViewARM, rhs.m_tensorViewARM ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::TensorViewARM const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_tensorViewARM; + } + + VULKAN_HPP_NAMESPACE::TensorViewARM const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_tensorViewARM ); + } + + operator VULKAN_HPP_NAMESPACE::TensorViewARM() const VULKAN_HPP_NOEXCEPT + { + return m_tensorViewARM; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_tensorViewARM ) + { + getDispatcher()->vkDestroyTensorViewARM( static_cast( m_device ), + static_cast( m_tensorViewARM ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_tensorViewARM = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::TensorViewARM release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_tensorViewARM, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::TensorViewARM & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_tensorViewARM, rhs.m_tensorViewARM ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::TensorViewARM m_tensorViewARM = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationCacheEXT.html + class ValidationCacheEXT + { + public: + using CType = VkValidationCacheEXT; + using CppType = VULKAN_HPP_NAMESPACE::ValidationCacheEXT; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eValidationCacheEXT; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eValidationCacheEXT; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + ValidationCacheEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createValidationCacheEXT( createInfo, allocator ); + } +# endif + + ValidationCacheEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkValidationCacheEXT validationCache, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_validationCacheEXT( validationCache ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + ValidationCacheEXT( std::nullptr_t ) {} + + ~ValidationCacheEXT() + { + clear(); + } + + ValidationCacheEXT() = delete; + ValidationCacheEXT( ValidationCacheEXT const & ) = delete; + + ValidationCacheEXT( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_validationCacheEXT( VULKAN_HPP_NAMESPACE::exchange( rhs.m_validationCacheEXT, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + ValidationCacheEXT & operator=( ValidationCacheEXT const & ) = delete; + + ValidationCacheEXT & operator=( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_validationCacheEXT, rhs.m_validationCacheEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_validationCacheEXT; + } + + VULKAN_HPP_NAMESPACE::ValidationCacheEXT const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_validationCacheEXT ); + } + + operator VULKAN_HPP_NAMESPACE::ValidationCacheEXT() const VULKAN_HPP_NOEXCEPT + { + return m_validationCacheEXT; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_validationCacheEXT ) + { + getDispatcher()->vkDestroyValidationCacheEXT( static_cast( m_device ), + static_cast( m_validationCacheEXT ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_validationCacheEXT = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::ValidationCacheEXT release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_validationCacheEXT, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_validationCacheEXT, rhs.m_validationCacheEXT ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_EXT_validation_cache === + + // wrapper function for command vkMergeValidationCachesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergeValidationCachesEXT.html + void merge( ArrayProxy const & srcCaches ) const; + + // wrapper function for command vkGetValidationCacheDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + VULKAN_HPP_NODISCARD std::vector getData() const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::ValidationCacheEXT m_validationCacheEXT = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionKHR.html + class VideoSessionKHR + { + public: + using CType = VkVideoSessionKHR; + using CppType = VULKAN_HPP_NAMESPACE::VideoSessionKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + VideoSessionKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createVideoSessionKHR( createInfo, allocator ); + } +# endif + + VideoSessionKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkVideoSessionKHR videoSession, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_videoSessionKHR( videoSession ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + VideoSessionKHR( std::nullptr_t ) {} + + ~VideoSessionKHR() + { + clear(); + } + + VideoSessionKHR() = delete; + VideoSessionKHR( VideoSessionKHR const & ) = delete; + + VideoSessionKHR( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_videoSessionKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_videoSessionKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + VideoSessionKHR & operator=( VideoSessionKHR const & ) = delete; + + VideoSessionKHR & operator=( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_videoSessionKHR, rhs.m_videoSessionKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::VideoSessionKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_videoSessionKHR; + } + + VULKAN_HPP_NAMESPACE::VideoSessionKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_videoSessionKHR ); + } + + operator VULKAN_HPP_NAMESPACE::VideoSessionKHR() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_videoSessionKHR ) + { + getDispatcher()->vkDestroyVideoSessionKHR( static_cast( m_device ), + static_cast( m_videoSessionKHR ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_videoSessionKHR = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::VideoSessionKHR release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_videoSessionKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_videoSessionKHR, rhs.m_videoSessionKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_KHR_video_queue === + + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD std::vector getMemoryRequirements() const; + + // wrapper function for command vkBindVideoSessionMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindVideoSessionMemoryKHR.html + void bindMemory( ArrayProxy const & bindSessionMemoryInfos ) const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::VideoSessionKHR m_videoSessionKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // wrapper class for handle VkVideoSessionParametersKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionParametersKHR.html + class VideoSessionParametersKHR + { + public: + using CType = VkVideoSessionParametersKHR; + using CppType = VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionParametersKHR; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + + public: +# if !defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + VideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + { + *this = device.createVideoSessionParametersKHR( createInfo, allocator ); + } +# endif + + VideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device, + VkVideoSessionParametersKHR videoSessionParameters, + VULKAN_HPP_NAMESPACE::Optional allocator = nullptr ) + : m_device( device ) + , m_videoSessionParametersKHR( videoSessionParameters ) + , m_allocator( static_cast( allocator ) ) + , m_dispatcher( device.getDispatcher() ) + { + } + + VideoSessionParametersKHR( std::nullptr_t ) {} + + ~VideoSessionParametersKHR() + { + clear(); + } + + VideoSessionParametersKHR() = delete; + VideoSessionParametersKHR( VideoSessionParametersKHR const & ) = delete; + + VideoSessionParametersKHR( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT + : m_device( VULKAN_HPP_NAMESPACE::exchange( rhs.m_device, {} ) ) + , m_videoSessionParametersKHR( VULKAN_HPP_NAMESPACE::exchange( rhs.m_videoSessionParametersKHR, {} ) ) + , m_allocator( VULKAN_HPP_NAMESPACE::exchange( rhs.m_allocator, {} ) ) + , m_dispatcher( VULKAN_HPP_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) ) + { + } + + VideoSessionParametersKHR & operator=( VideoSessionParametersKHR const & ) = delete; + + VideoSessionParametersKHR & operator=( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + std::swap( m_device, rhs.m_device ); + std::swap( m_videoSessionParametersKHR, rhs.m_videoSessionParametersKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + return *this; + } + + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & operator*() const & VULKAN_HPP_NOEXCEPT + { + return m_videoSessionParametersKHR; + } + + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const && operator*() const && VULKAN_HPP_NOEXCEPT + { + return std::move( m_videoSessionParametersKHR ); + } + + operator VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR() const VULKAN_HPP_NOEXCEPT + { + return m_videoSessionParametersKHR; + } + + void clear() VULKAN_HPP_NOEXCEPT + { + if ( m_videoSessionParametersKHR ) + { + getDispatcher()->vkDestroyVideoSessionParametersKHR( static_cast( m_device ), + static_cast( m_videoSessionParametersKHR ), + reinterpret_cast( m_allocator ) ); + } + m_device = nullptr; + m_videoSessionParametersKHR = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + } + + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR release() + { + m_device = nullptr; + m_allocator = nullptr; + m_dispatcher = nullptr; + return VULKAN_HPP_NAMESPACE::exchange( m_videoSessionParametersKHR, nullptr ); + } + + VULKAN_HPP_NAMESPACE::Device getDevice() const + { + return m_device; + } + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION ); + return m_dispatcher; + } + + void swap( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR & rhs ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_device, rhs.m_device ); + std::swap( m_videoSessionParametersKHR, rhs.m_videoSessionParametersKHR ); + std::swap( m_allocator, rhs.m_allocator ); + std::swap( m_dispatcher, rhs.m_dispatcher ); + } + + //=== VK_KHR_video_queue === + + // wrapper function for command vkUpdateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateVideoSessionParametersKHR.html + void update( const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo ) const; + + private: + VULKAN_HPP_NAMESPACE::Device m_device = {}; + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR m_videoSessionParametersKHR = {}; + const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::DeviceDispatcher const * m_dispatcher = nullptr; + }; + + template <> + struct isVulkanRAIIHandleType + { + static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true; + }; + + // operators to compare VULKAN_HPP_NAMESPACE::raii-handles +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + template ::value, bool>::type = 0> + auto operator<=>( T const & a, T const & b ) VULKAN_HPP_NOEXCEPT + { + return *a <=> *b; + } +# else + template ::value, bool>::type = 0> + bool operator<( T const & a, T const & b ) VULKAN_HPP_NOEXCEPT + { + return *a < *b; + } +# endif + + template ::value, bool>::type = 0> + bool operator==( T const & a, T const & b ) VULKAN_HPP_NOEXCEPT + { + return *a == *b; + } + + template ::value, bool>::type = 0> + bool operator!=( T const & a, T const & b ) VULKAN_HPP_NOEXCEPT + { + return *a != *b; + } + + template ::value, bool>::type = 0> + bool operator==( const T & v, std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + return !*v; + } + + template ::value, bool>::type = 0> + bool operator==( std::nullptr_t, const T & v ) VULKAN_HPP_NOEXCEPT + { + return !*v; + } + + template ::value, bool>::type = 0> + bool operator!=( const T & v, std::nullptr_t ) VULKAN_HPP_NOEXCEPT + { + return *v; + } + + template ::value, bool>::type = 0> + bool operator!=( std::nullptr_t, const T & v ) VULKAN_HPP_NOEXCEPT + { + return *v; + } + + //=========================== + //=== COMMAND Definitions === + //=========================== + + //=== VK_VERSION_1_0 === + + // wrapper function for command vkCreateInstance, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateInstance.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Context::createInstance( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Instance instance; + Result result = static_cast( getDispatcher()->vkCreateInstance( reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &instance ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Context::createInstance" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance( *this, *reinterpret_cast( &instance ), allocator ); + } + + // wrapper function for command vkEnumeratePhysicalDevices, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDevices.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + Instance::enumeratePhysicalDevices() const + { + std::vector physicalDevices; + uint32_t physicalDeviceCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkEnumeratePhysicalDevices( static_cast( m_instance ), &physicalDeviceCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceCount ) + { + physicalDevices.resize( physicalDeviceCount ); + result = static_cast( getDispatcher()->vkEnumeratePhysicalDevices( + static_cast( m_instance ), &physicalDeviceCount, reinterpret_cast( physicalDevices.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + if ( ( result != Result::eSuccess ) && ( result != Result::eIncomplete ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::enumeratePhysicalDevices" ); +# endif + } + + std::vector physicalDevicesRAII; + physicalDevicesRAII.reserve( physicalDevices.size() ); + for ( auto & physicalDevice : physicalDevices ) + { + physicalDevicesRAII.emplace_back( *this, *reinterpret_cast( &physicalDevice ) ); + } + return physicalDevicesRAII; + } + + // wrapper function for command vkGetPhysicalDeviceFeatures, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures PhysicalDevice::getFeatures() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures && "Function requires " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features; + getDispatcher()->vkGetPhysicalDeviceFeatures( static_cast( m_physicalDevice ), + reinterpret_cast( &features ) ); + + return features; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties + PhysicalDevice::getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties && "Function requires " ); + + VULKAN_HPP_NAMESPACE::FormatProperties formatProperties; + getDispatcher()->vkGetPhysicalDeviceFormatProperties( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return formatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties + PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, + VULKAN_HPP_NAMESPACE::ImageType type, + VULKAN_HPP_NAMESPACE::ImageTiling tiling, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties; + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties( static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( tiling ), + static_cast( usage ), + static_cast( flags ), + reinterpret_cast( &imageFormatProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties" ); + + return imageFormatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties PhysicalDevice::getProperties() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties && "Function requires " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties; + getDispatcher()->vkGetPhysicalDeviceProperties( static_cast( m_physicalDevice ), + reinterpret_cast( &properties ) ); + + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties && + "Function requires " ); + + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties( static_cast( m_physicalDevice ), + &queueFamilyPropertyCount, + reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties PhysicalDevice::getMemoryProperties() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties && "Function requires " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties; + getDispatcher()->vkGetPhysicalDeviceMemoryProperties( static_cast( m_physicalDevice ), + reinterpret_cast( &memoryProperties ) ); + + return memoryProperties; + } + + // wrapper function for command vkGetInstanceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetInstanceProcAddr.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PFN_VoidFunction Instance::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetInstanceProcAddr && "Function requires " ); + + PFN_vkVoidFunction result = getDispatcher()->vkGetInstanceProcAddr( static_cast( m_instance ), name.c_str() ); + + return result; + } + + // wrapper function for command vkGetDeviceProcAddr, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceProcAddr.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PFN_VoidFunction Device::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceProcAddr && "Function requires " ); + + PFN_vkVoidFunction result = getDispatcher()->vkGetDeviceProcAddr( static_cast( m_device ), name.c_str() ); + + return result; + } + + // wrapper function for command vkCreateDevice, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDevice.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + PhysicalDevice::createDevice( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Device device; + Result result = static_cast( getDispatcher()->vkCreateDevice( static_cast( m_physicalDevice ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &device ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "PhysicalDevice::createDevice" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device( *this, *reinterpret_cast( &device ), allocator ); + } + + // wrapper function for command vkEnumerateInstanceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceExtensionProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Context::enumerateInstanceExtensionProperties( Optional layerName ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumerateInstanceExtensionProperties && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = + static_cast( getDispatcher()->vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkEnumerateInstanceExtensionProperties( + layerName ? layerName->c_str() : nullptr, &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceExtensionProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkEnumerateDeviceExtensionProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceExtensionProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::enumerateDeviceExtensionProperties( Optional layerName ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumerateDeviceExtensionProperties && "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkEnumerateDeviceExtensionProperties( + static_cast( m_physicalDevice ), layerName ? layerName->c_str() : nullptr, &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = + static_cast( getDispatcher()->vkEnumerateDeviceExtensionProperties( static_cast( m_physicalDevice ), + layerName ? layerName->c_str() : nullptr, + &propertyCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkEnumerateInstanceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceLayerProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Context::enumerateInstanceLayerProperties() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumerateInstanceLayerProperties && "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkEnumerateInstanceLayerProperties( &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( + getDispatcher()->vkEnumerateInstanceLayerProperties( &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceLayerProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkEnumerateDeviceLayerProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateDeviceLayerProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::enumerateDeviceLayerProperties() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumerateDeviceLayerProperties && "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkEnumerateDeviceLayerProperties( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkEnumerateDeviceLayerProperties( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetDeviceQueue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Queue queue; + getDispatcher()->vkGetDeviceQueue( static_cast( m_device ), queueFamilyIndex, queueIndex, reinterpret_cast( &queue ) ); + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Queue( *this, *reinterpret_cast( &queue ) ); + } + + // wrapper function for command vkQueueSubmit, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit.html + VULKAN_HPP_INLINE void Queue::submit( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSubmit && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkQueueSubmit( + static_cast( m_queue ), submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit" ); + } + + // wrapper function for command vkQueueWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueWaitIdle.html + VULKAN_HPP_INLINE void Queue::waitIdle() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueWaitIdle && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkQueueWaitIdle( static_cast( m_queue ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::waitIdle" ); + } + + // wrapper function for command vkDeviceWaitIdle, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeviceWaitIdle.html + VULKAN_HPP_INLINE void Device::waitIdle() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDeviceWaitIdle && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkDeviceWaitIdle( static_cast( m_device ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitIdle" ); + } + + // wrapper function for command vkAllocateMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateMemory.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::allocateMemory( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DeviceMemory memory; + Result result = static_cast( getDispatcher()->vkAllocateMemory( static_cast( m_device ), + reinterpret_cast( &allocateInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &memory ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::allocateMemory" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceMemory( *this, *reinterpret_cast( &memory ), allocator ); + } + + // wrapper function for command vkMapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * DeviceMemory::mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + VULKAN_HPP_NAMESPACE::MemoryMapFlags flags ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkMapMemory && "Function requires " ); + + void * pData; + Result result = static_cast( getDispatcher()->vkMapMemory( static_cast( m_device ), + static_cast( m_deviceMemory ), + static_cast( offset ), + static_cast( size ), + static_cast( flags ), + &pData ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DeviceMemory::mapMemory" ); + + return pData; + } + + // wrapper function for command vkUnmapMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory.html + VULKAN_HPP_INLINE void DeviceMemory::unmapMemory() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUnmapMemory && "Function requires " ); + + getDispatcher()->vkUnmapMemory( static_cast( m_device ), static_cast( m_deviceMemory ) ); + } + + // wrapper function for command vkFlushMappedMemoryRanges, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkFlushMappedMemoryRanges.html + VULKAN_HPP_INLINE void Device::flushMappedMemoryRanges( ArrayProxy const & memoryRanges ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkFlushMappedMemoryRanges && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkFlushMappedMemoryRanges( + static_cast( m_device ), memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::flushMappedMemoryRanges" ); + } + + // wrapper function for command vkInvalidateMappedMemoryRanges, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInvalidateMappedMemoryRanges.html + VULKAN_HPP_INLINE void Device::invalidateMappedMemoryRanges( ArrayProxy const & memoryRanges ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkInvalidateMappedMemoryRanges && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkInvalidateMappedMemoryRanges( + static_cast( m_device ), memoryRanges.size(), reinterpret_cast( memoryRanges.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::invalidateMappedMemoryRanges" ); + } + + // wrapper function for command vkGetDeviceMemoryCommitment, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryCommitment.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceSize DeviceMemory::getCommitment() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceMemoryCommitment && "Function requires " ); + + VULKAN_HPP_NAMESPACE::DeviceSize committedMemoryInBytes; + getDispatcher()->vkGetDeviceMemoryCommitment( + static_cast( m_device ), static_cast( m_deviceMemory ), reinterpret_cast( &committedMemoryInBytes ) ); + + return committedMemoryInBytes; + } + + // wrapper function for command vkBindBufferMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory.html + VULKAN_HPP_INLINE void Buffer::bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindBufferMemory && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBindBufferMemory( static_cast( m_device ), + static_cast( m_buffer ), + static_cast( memory ), + static_cast( memoryOffset ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Buffer::bindMemory" ); + } + + // wrapper function for command vkBindImageMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory.html + VULKAN_HPP_INLINE void Image::bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindImageMemory && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBindImageMemory( static_cast( m_device ), + static_cast( m_image ), + static_cast( memory ), + static_cast( memoryOffset ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Image::bindMemory" ); + } + + // wrapper function for command vkGetBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements Buffer::getMemoryRequirements() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements && "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements; + getDispatcher()->vkGetBufferMemoryRequirements( + static_cast( m_device ), static_cast( m_buffer ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements Image::getMemoryRequirements() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements && "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements; + getDispatcher()->vkGetImageMemoryRequirements( + static_cast( m_device ), static_cast( m_image ), reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Image::getSparseMemoryRequirements() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSparseMemoryRequirements && "Function requires " ); + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + getDispatcher()->vkGetImageSparseMemoryRequirements( + static_cast( m_device ), static_cast( m_image ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + getDispatcher()->vkGetImageSparseMemoryRequirements( static_cast( m_device ), + static_cast( m_image ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format, + VULKAN_HPP_NAMESPACE::ImageType type, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, + VULKAN_HPP_NAMESPACE::ImageTiling tiling ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties( static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + &propertyCount, + nullptr ); + properties.resize( propertyCount ); + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties( static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( samples ), + static_cast( usage ), + static_cast( tiling ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkQueueBindSparse, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBindSparse.html + VULKAN_HPP_INLINE void Queue::bindSparse( ArrayProxy const & bindInfo, VULKAN_HPP_NAMESPACE::Fence fence ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueBindSparse && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkQueueBindSparse( + static_cast( m_queue ), bindInfo.size(), reinterpret_cast( bindInfo.data() ), static_cast( fence ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::bindSparse" ); + } + + // wrapper function for command vkCreateFence, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFence.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createFence( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Fence fence; + Result result = static_cast( getDispatcher()->vkCreateFence( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createFence" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Fence( *this, *reinterpret_cast( &fence ), allocator ); + } + + // wrapper function for command vkResetFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetFences.html + VULKAN_HPP_INLINE void Device::resetFences( ArrayProxy const & fences ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetFences && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkResetFences( static_cast( m_device ), fences.size(), reinterpret_cast( fences.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::resetFences" ); + } + + // wrapper function for command vkGetFenceStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceStatus.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Fence::getStatus() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceStatus && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkGetFenceStatus( static_cast( m_device ), static_cast( m_fence ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Fence::getStatus", { Result::eSuccess, Result::eNotReady } ); + + return static_cast( result ); + } + + // wrapper function for command vkWaitForFences, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForFences.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitForFences( ArrayProxy const & fences, + VULKAN_HPP_NAMESPACE::Bool32 waitAll, + uint64_t timeout ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWaitForFences && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkWaitForFences( + static_cast( m_device ), fences.size(), reinterpret_cast( fences.data() ), static_cast( waitAll ), timeout ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitForFences", { Result::eSuccess, Result::eTimeout } ); + + return static_cast( result ); + } + + // wrapper function for command vkCreateSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSemaphore.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createSemaphore( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Semaphore semaphore; + Result result = static_cast( getDispatcher()->vkCreateSemaphore( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &semaphore ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSemaphore" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Semaphore( *this, *reinterpret_cast( &semaphore ), allocator ); + } + + // wrapper function for command vkCreateEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateEvent.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createEvent( VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Event event; + Result result = static_cast( getDispatcher()->vkCreateEvent( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &event ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createEvent" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Event( *this, *reinterpret_cast( &event ), allocator ); + } + + // wrapper function for command vkGetEventStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEventStatus.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Event::getStatus() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetEventStatus && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkGetEventStatus( static_cast( m_device ), static_cast( m_event ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Event::getStatus", { Result::eEventSet, Result::eEventReset } ); + + return static_cast( result ); + } + + // wrapper function for command vkSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetEvent.html + VULKAN_HPP_INLINE void Event::set() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetEvent && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkSetEvent( static_cast( m_device ), static_cast( m_event ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Event::set" ); + } + + // wrapper function for command vkResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetEvent.html + VULKAN_HPP_INLINE void Event::reset() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetEvent && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkResetEvent( static_cast( m_device ), static_cast( m_event ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Event::reset" ); + } + + // wrapper function for command vkCreateQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateQueryPool.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createQueryPool( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::QueryPool queryPool; + Result result = static_cast( getDispatcher()->vkCreateQueryPool( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &queryPool ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createQueryPool" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::QueryPool( *this, *reinterpret_cast( &queryPool ), allocator ); + } + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair> QueryPool::getResults( + uint32_t firstQuery, uint32_t queryCount, size_t dataSize, VULKAN_HPP_NAMESPACE::DeviceSize stride, VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetQueryPoolResults && "Function requires " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( getDispatcher()->vkGetQueryPoolResults( static_cast( m_device ), + static_cast( m_queryPool ), + firstQuery, + queryCount, + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ), + static_cast( stride ), + static_cast( flags ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::QueryPool::getResults", { Result::eSuccess, Result::eNotReady } ); + + return std::make_pair( result, std::move( data ) ); + } + + // wrapper function for command vkGetQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueryPoolResults.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair QueryPool::getResult( uint32_t firstQuery, + uint32_t queryCount, + VULKAN_HPP_NAMESPACE::DeviceSize stride, + VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetQueryPoolResults && "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetQueryPoolResults( static_cast( m_device ), + static_cast( m_queryPool ), + firstQuery, + queryCount, + sizeof( DataType ), + reinterpret_cast( &data ), + static_cast( stride ), + static_cast( flags ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::QueryPool::getResult", { Result::eSuccess, Result::eNotReady } ); + + return std::make_pair( result, std::move( data ) ); + } + + // wrapper function for command vkCreateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBuffer.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createBuffer( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Buffer buffer; + Result result = static_cast( getDispatcher()->vkCreateBuffer( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &buffer ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createBuffer" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Buffer( *this, *reinterpret_cast( &buffer ), allocator ); + } + + // wrapper function for command vkCreateBufferView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferView.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createBufferView( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::BufferView view; + Result result = static_cast( getDispatcher()->vkCreateBufferView( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createBufferView" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferView( *this, *reinterpret_cast( &view ), allocator ); + } + + // wrapper function for command vkCreateImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImage.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createImage( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Image image; + Result result = static_cast( getDispatcher()->vkCreateImage( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &image ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createImage" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Image( *this, *reinterpret_cast( &image ), allocator ); + } + + // wrapper function for command vkGetImageSubresourceLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout + Image::getSubresourceLayout( const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSubresourceLayout && "Function requires " ); + + VULKAN_HPP_NAMESPACE::SubresourceLayout layout; + getDispatcher()->vkGetImageSubresourceLayout( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkCreateImageView, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImageView.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createImageView( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::ImageView view; + Result result = static_cast( getDispatcher()->vkCreateImageView( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createImageView" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ImageView( *this, *reinterpret_cast( &view ), allocator ); + } + + // wrapper function for command vkCreateShaderModule, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShaderModule.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createShaderModule( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::ShaderModule shaderModule; + Result result = static_cast( getDispatcher()->vkCreateShaderModule( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &shaderModule ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createShaderModule" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ShaderModule( *this, *reinterpret_cast( &shaderModule ), allocator ); + } + + // wrapper function for command vkCreatePipelineCache, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineCache.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache; + Result result = static_cast( getDispatcher()->vkCreatePipelineCache( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipelineCache ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createPipelineCache" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache( *this, *reinterpret_cast( &pipelineCache ), allocator ); + } + + // wrapper function for command vkGetPipelineCacheData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineCacheData.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PipelineCache::getData() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineCacheData && "Function requires " ); + + std::vector data; + size_t dataSize; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPipelineCacheData( static_cast( m_device ), static_cast( m_pipelineCache ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( getDispatcher()->vkGetPipelineCacheData( + static_cast( m_device ), static_cast( m_pipelineCache ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PipelineCache::getData" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return data; + } + + // wrapper function for command vkMergePipelineCaches, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergePipelineCaches.html + VULKAN_HPP_INLINE void PipelineCache::merge( ArrayProxy const & srcCaches ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkMergePipelineCaches && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkMergePipelineCaches( static_cast( m_device ), + static_cast( m_pipelineCache ), + srcCaches.size(), + reinterpret_cast( srcCaches.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PipelineCache::merge" ); + } + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createGraphicsPipelines( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( getDispatcher()->vkCreateGraphicsPipelines( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createGraphicsPipelines" ); +# endif + } + + std::vector pipelinesRAII; + pipelinesRAII.reserve( pipelines.size() ); + for ( auto & pipeline : pipelines ) + { + pipelinesRAII.emplace_back( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + return pipelinesRAII; + } + + // wrapper function for command vkCreateGraphicsPipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateGraphicsPipelines.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createGraphicsPipeline( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Pipeline pipeline; + Result result = static_cast( getDispatcher()->vkCreateGraphicsPipelines( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createGraphicsPipeline" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createComputePipelines( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( getDispatcher()->vkCreateComputePipelines( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createComputePipelines" ); +# endif + } + + std::vector pipelinesRAII; + pipelinesRAII.reserve( pipelines.size() ); + for ( auto & pipeline : pipelines ) + { + pipelinesRAII.emplace_back( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + return pipelinesRAII; + } + + // wrapper function for command vkCreateComputePipelines, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateComputePipelines.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createComputePipeline( VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Pipeline pipeline; + Result result = static_cast( getDispatcher()->vkCreateComputePipelines( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createComputePipeline" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + + // wrapper function for command vkCreatePipelineLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineLayout.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout; + Result result = static_cast( getDispatcher()->vkCreatePipelineLayout( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipelineLayout ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createPipelineLayout" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineLayout( *this, *reinterpret_cast( &pipelineLayout ), allocator ); + } + + // wrapper function for command vkCreateSampler, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSampler.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createSampler( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Sampler sampler; + Result result = static_cast( getDispatcher()->vkCreateSampler( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &sampler ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSampler" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Sampler( *this, *reinterpret_cast( &sampler ), allocator ); + } + + // wrapper function for command vkCreateDescriptorSetLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorSetLayout.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DescriptorSetLayout setLayout; + Result result = + static_cast( getDispatcher()->vkCreateDescriptorSetLayout( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &setLayout ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDescriptorSetLayout" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout( *this, *reinterpret_cast( &setLayout ), allocator ); + } + + // wrapper function for command vkCreateDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorPool.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool; + Result result = static_cast( getDispatcher()->vkCreateDescriptorPool( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorPool ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDescriptorPool" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorPool( *this, *reinterpret_cast( &descriptorPool ), allocator ); + } + + // wrapper function for command vkResetDescriptorPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetDescriptorPool.html + VULKAN_HPP_INLINE void DescriptorPool::reset( VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetDescriptorPool && "Function requires " ); + + getDispatcher()->vkResetDescriptorPool( + static_cast( m_device ), static_cast( m_descriptorPool ), static_cast( flags ) ); + } + + // wrapper function for command vkAllocateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateDescriptorSets.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + Device::allocateDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) const + { + std::vector descriptorSets( allocateInfo.descriptorSetCount ); + Result result = static_cast( getDispatcher()->vkAllocateDescriptorSets( static_cast( m_device ), + reinterpret_cast( &allocateInfo ), + reinterpret_cast( descriptorSets.data() ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::allocateDescriptorSets" ); +# endif + } + + std::vector descriptorSetsRAII; + descriptorSetsRAII.reserve( descriptorSets.size() ); + for ( auto & descriptorSet : descriptorSets ) + { + descriptorSetsRAII.emplace_back( + *this, *reinterpret_cast( &descriptorSet ), static_cast( allocateInfo.descriptorPool ) ); + } + return descriptorSetsRAII; + } + + // wrapper function for command vkUpdateDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSets.html + VULKAN_HPP_INLINE void + Device::updateDescriptorSets( ArrayProxy const & descriptorWrites, + ArrayProxy const & descriptorCopies ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateDescriptorSets && "Function requires " ); + + getDispatcher()->vkUpdateDescriptorSets( static_cast( m_device ), + descriptorWrites.size(), + reinterpret_cast( descriptorWrites.data() ), + descriptorCopies.size(), + reinterpret_cast( descriptorCopies.data() ) ); + } + + // wrapper function for command vkCreateFramebuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateFramebuffer.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createFramebuffer( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Framebuffer framebuffer; + Result result = static_cast( getDispatcher()->vkCreateFramebuffer( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &framebuffer ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createFramebuffer" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Framebuffer( *this, *reinterpret_cast( &framebuffer ), allocator ); + } + + // wrapper function for command vkCreateRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createRenderPass( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::RenderPass renderPass; + Result result = static_cast( getDispatcher()->vkCreateRenderPass( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRenderPass" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, *reinterpret_cast( &renderPass ), allocator ); + } + + // wrapper function for command vkGetRenderAreaGranularity, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderAreaGranularity.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D RenderPass::getRenderAreaGranularity() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRenderAreaGranularity && "Function requires " ); + + VULKAN_HPP_NAMESPACE::Extent2D granularity; + getDispatcher()->vkGetRenderAreaGranularity( + static_cast( m_device ), static_cast( m_renderPass ), reinterpret_cast( &granularity ) ); + + return granularity; + } + + // wrapper function for command vkCreateCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCommandPool.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createCommandPool( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::CommandPool commandPool; + Result result = static_cast( getDispatcher()->vkCreateCommandPool( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &commandPool ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createCommandPool" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandPool( *this, *reinterpret_cast( &commandPool ), allocator ); + } + + // wrapper function for command vkResetCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandPool.html + VULKAN_HPP_INLINE void CommandPool::reset( VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetCommandPool && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkResetCommandPool( + static_cast( m_device ), static_cast( m_commandPool ), static_cast( flags ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandPool::reset" ); + } + + // wrapper function for command vkAllocateCommandBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAllocateCommandBuffers.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + Device::allocateCommandBuffers( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) const + { + std::vector commandBuffers( allocateInfo.commandBufferCount ); + Result result = static_cast( getDispatcher()->vkAllocateCommandBuffers( static_cast( m_device ), + reinterpret_cast( &allocateInfo ), + reinterpret_cast( commandBuffers.data() ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::allocateCommandBuffers" ); +# endif + } + + std::vector commandBuffersRAII; + commandBuffersRAII.reserve( commandBuffers.size() ); + for ( auto & commandBuffer : commandBuffers ) + { + commandBuffersRAII.emplace_back( + *this, *reinterpret_cast( &commandBuffer ), static_cast( allocateInfo.commandPool ) ); + } + return commandBuffersRAII; + } + + // wrapper function for command vkBeginCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBeginCommandBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBeginCommandBuffer && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBeginCommandBuffer( static_cast( m_commandBuffer ), + reinterpret_cast( &beginInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::begin" ); + } + + // wrapper function for command vkEndCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEndCommandBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::end() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEndCommandBuffer && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkEndCommandBuffer( static_cast( m_commandBuffer ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::end" ); + } + + // wrapper function for command vkResetCommandBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetCommandBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetCommandBuffer && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkResetCommandBuffer( static_cast( m_commandBuffer ), static_cast( flags ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::reset" ); + } + + // wrapper function for command vkCmdBindPipeline, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipeline.html + VULKAN_HPP_INLINE void CommandBuffer::bindPipeline( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::Pipeline pipeline ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindPipeline && "Function requires " ); + + getDispatcher()->vkCmdBindPipeline( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( pipeline ) ); + } + + // wrapper function for command vkCmdSetViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewport.html + VULKAN_HPP_INLINE void CommandBuffer::setViewport( uint32_t firstViewport, + ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewport && "Function requires " ); + + getDispatcher()->vkCmdSetViewport( + static_cast( m_commandBuffer ), firstViewport, viewports.size(), reinterpret_cast( viewports.data() ) ); + } + + // wrapper function for command vkCmdSetScissor, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissor.html + VULKAN_HPP_INLINE void CommandBuffer::setScissor( uint32_t firstScissor, + ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetScissor && "Function requires " ); + + getDispatcher()->vkCmdSetScissor( + static_cast( m_commandBuffer ), firstScissor, scissors.size(), reinterpret_cast( scissors.data() ) ); + } + + // wrapper function for command vkCmdSetLineWidth, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineWidth.html + VULKAN_HPP_INLINE void CommandBuffer::setLineWidth( float lineWidth ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineWidth && "Function requires " ); + + getDispatcher()->vkCmdSetLineWidth( static_cast( m_commandBuffer ), lineWidth ); + } + + // wrapper function for command vkCmdSetDepthBias, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias.html + VULKAN_HPP_INLINE void + CommandBuffer::setDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBias && "Function requires " ); + + getDispatcher()->vkCmdSetDepthBias( static_cast( m_commandBuffer ), depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); + } + + // wrapper function for command vkCmdSetBlendConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetBlendConstants.html + VULKAN_HPP_INLINE void CommandBuffer::setBlendConstants( const float blendConstants[4] ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetBlendConstants && "Function requires " ); + + getDispatcher()->vkCmdSetBlendConstants( static_cast( m_commandBuffer ), blendConstants ); + } + + // wrapper function for command vkCmdSetDepthBounds, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBounds.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthBounds( float minDepthBounds, float maxDepthBounds ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBounds && "Function requires " ); + + getDispatcher()->vkCmdSetDepthBounds( static_cast( m_commandBuffer ), minDepthBounds, maxDepthBounds ); + } + + // wrapper function for command vkCmdSetStencilCompareMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilCompareMask.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilCompareMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, + uint32_t compareMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilCompareMask && "Function requires " ); + + getDispatcher()->vkCmdSetStencilCompareMask( static_cast( m_commandBuffer ), static_cast( faceMask ), compareMask ); + } + + // wrapper function for command vkCmdSetStencilWriteMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilWriteMask.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilWriteMask( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t writeMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilWriteMask && "Function requires " ); + + getDispatcher()->vkCmdSetStencilWriteMask( static_cast( m_commandBuffer ), static_cast( faceMask ), writeMask ); + } + + // wrapper function for command vkCmdSetStencilReference, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilReference.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilReference( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, uint32_t reference ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilReference && "Function requires " ); + + getDispatcher()->vkCmdSetStencilReference( static_cast( m_commandBuffer ), static_cast( faceMask ), reference ); + } + + // wrapper function for command vkCmdBindDescriptorSets, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets.html + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorSets( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & descriptorSets, + ArrayProxy const & dynamicOffsets ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindDescriptorSets && "Function requires " ); + + getDispatcher()->vkCmdBindDescriptorSets( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + firstSet, + descriptorSets.size(), + reinterpret_cast( descriptorSets.data() ), + dynamicOffsets.size(), + dynamicOffsets.data() ); + } + + // wrapper function for command vkCmdBindIndexBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindIndexBuffer && "Function requires " ); + + getDispatcher()->vkCmdBindIndexBuffer( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( indexType ) ); + } + + // wrapper function for command vkCmdBindVertexBuffers, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers.html + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindVertexBuffers && "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBindVertexBuffers( static_cast( m_commandBuffer ), + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ) ); + } + + // wrapper function for command vkCmdDraw, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDraw.html + VULKAN_HPP_INLINE void + CommandBuffer::draw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDraw && "Function requires " ); + + getDispatcher()->vkCmdDraw( static_cast( m_commandBuffer ), vertexCount, instanceCount, firstVertex, firstInstance ); + } + + // wrapper function for command vkCmdDrawIndexed, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexed.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndexed( + uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndexed && "Function requires " ); + + getDispatcher()->vkCmdDrawIndexed( static_cast( m_commandBuffer ), indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); + } + + // wrapper function for command vkCmdDrawIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirect.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirect && "Function requires " ); + + getDispatcher()->vkCmdDrawIndirect( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirect.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndexedIndirect && "Function requires " ); + + getDispatcher()->vkCmdDrawIndexedIndirect( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDispatch, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatch.html + VULKAN_HPP_INLINE void CommandBuffer::dispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatch && "Function requires " ); + + getDispatcher()->vkCmdDispatch( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkCmdDispatchIndirect, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchIndirect.html + VULKAN_HPP_INLINE void CommandBuffer::dispatchIndirect( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchIndirect && "Function requires " ); + + getDispatcher()->vkCmdDispatchIndirect( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ) ); + } + + // wrapper function for command vkCmdCopyBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBuffer && "Function requires " ); + + getDispatcher()->vkCmdCopyBuffer( static_cast( m_commandBuffer ), + static_cast( srcBuffer ), + static_cast( dstBuffer ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } + + // wrapper function for command vkCmdCopyImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage.html + VULKAN_HPP_INLINE void CommandBuffer::copyImage( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImage && "Function requires " ); + + getDispatcher()->vkCmdCopyImage( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } + + // wrapper function for command vkCmdBlitImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage.html + VULKAN_HPP_INLINE void CommandBuffer::blitImage( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions, + VULKAN_HPP_NAMESPACE::Filter filter ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBlitImage && "Function requires " ); + + getDispatcher()->vkCmdBlitImage( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ), + static_cast( filter ) ); + } + + // wrapper function for command vkCmdCopyBufferToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage.html + VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage( VULKAN_HPP_NAMESPACE::Buffer srcBuffer, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBufferToImage && "Function requires " ); + + getDispatcher()->vkCmdCopyBufferToImage( static_cast( m_commandBuffer ), + static_cast( srcBuffer ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } + + // wrapper function for command vkCmdCopyImageToBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImageToBuffer && "Function requires " ); + + getDispatcher()->vkCmdCopyImageToBuffer( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstBuffer ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } + + // wrapper function for command vkCmdUpdateBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdateBuffer.html + template + VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + ArrayProxy const & data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdUpdateBuffer && "Function requires " ); + + getDispatcher()->vkCmdUpdateBuffer( static_cast( m_commandBuffer ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ) ); + } + + // wrapper function for command vkCmdFillBuffer, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdFillBuffer.html + VULKAN_HPP_INLINE void CommandBuffer::fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + uint32_t data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdFillBuffer && "Function requires " ); + + getDispatcher()->vkCmdFillBuffer( static_cast( m_commandBuffer ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + static_cast( size ), + data ); + } + + // wrapper function for command vkCmdClearColorImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearColorImage.html + VULKAN_HPP_INLINE void + CommandBuffer::clearColorImage( VULKAN_HPP_NAMESPACE::Image image, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, + const VULKAN_HPP_NAMESPACE::ClearColorValue & color, + ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdClearColorImage && "Function requires " ); + + getDispatcher()->vkCmdClearColorImage( static_cast( m_commandBuffer ), + static_cast( image ), + static_cast( imageLayout ), + reinterpret_cast( &color ), + ranges.size(), + reinterpret_cast( ranges.data() ) ); + } + + // wrapper function for command vkCmdClearDepthStencilImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearDepthStencilImage.html + VULKAN_HPP_INLINE void + CommandBuffer::clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout, + const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil, + ArrayProxy const & ranges ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdClearDepthStencilImage && "Function requires " ); + + getDispatcher()->vkCmdClearDepthStencilImage( static_cast( m_commandBuffer ), + static_cast( image ), + static_cast( imageLayout ), + reinterpret_cast( &depthStencil ), + ranges.size(), + reinterpret_cast( ranges.data() ) ); + } + + // wrapper function for command vkCmdClearAttachments, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdClearAttachments.html + VULKAN_HPP_INLINE void CommandBuffer::clearAttachments( ArrayProxy const & attachments, + ArrayProxy const & rects ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdClearAttachments && "Function requires " ); + + getDispatcher()->vkCmdClearAttachments( static_cast( m_commandBuffer ), + attachments.size(), + reinterpret_cast( attachments.data() ), + rects.size(), + reinterpret_cast( rects.data() ) ); + } + + // wrapper function for command vkCmdResolveImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage.html + VULKAN_HPP_INLINE void CommandBuffer::resolveImage( VULKAN_HPP_NAMESPACE::Image srcImage, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & regions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResolveImage && "Function requires " ); + + getDispatcher()->vkCmdResolveImage( static_cast( m_commandBuffer ), + static_cast( srcImage ), + static_cast( srcImageLayout ), + static_cast( dstImage ), + static_cast( dstImageLayout ), + regions.size(), + reinterpret_cast( regions.data() ) ); + } + + // wrapper function for command vkCmdSetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent.html + VULKAN_HPP_INLINE void CommandBuffer::setEvent( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetEvent && "Function requires " ); + + getDispatcher()->vkCmdSetEvent( + static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdResetEvent, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent.html + VULKAN_HPP_INLINE void CommandBuffer::resetEvent( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResetEvent && "Function requires " ); + + getDispatcher()->vkCmdResetEvent( + static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdWaitEvents, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents.html + VULKAN_HPP_INLINE void + CommandBuffer::waitEvents( ArrayProxy const & events, + VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWaitEvents && "Function requires " ); + + getDispatcher()->vkCmdWaitEvents( static_cast( m_commandBuffer ), + events.size(), + reinterpret_cast( events.data() ), + static_cast( srcStageMask ), + static_cast( dstStageMask ), + memoryBarriers.size(), + reinterpret_cast( memoryBarriers.data() ), + bufferMemoryBarriers.size(), + reinterpret_cast( bufferMemoryBarriers.data() ), + imageMemoryBarriers.size(), + reinterpret_cast( imageMemoryBarriers.data() ) ); + } + + // wrapper function for command vkCmdPipelineBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier.html + VULKAN_HPP_INLINE void + CommandBuffer::pipelineBarrier( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask, + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask, + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags, + ArrayProxy const & memoryBarriers, + ArrayProxy const & bufferMemoryBarriers, + ArrayProxy const & imageMemoryBarriers ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPipelineBarrier && "Function requires " ); + + getDispatcher()->vkCmdPipelineBarrier( static_cast( m_commandBuffer ), + static_cast( srcStageMask ), + static_cast( dstStageMask ), + static_cast( dependencyFlags ), + memoryBarriers.size(), + reinterpret_cast( memoryBarriers.data() ), + bufferMemoryBarriers.size(), + reinterpret_cast( bufferMemoryBarriers.data() ), + imageMemoryBarriers.size(), + reinterpret_cast( imageMemoryBarriers.data() ) ); + } + + // wrapper function for command vkCmdBeginQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQuery.html + VULKAN_HPP_INLINE void CommandBuffer::beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query, + VULKAN_HPP_NAMESPACE::QueryControlFlags flags ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginQuery && "Function requires " ); + + getDispatcher()->vkCmdBeginQuery( + static_cast( m_commandBuffer ), static_cast( queryPool ), query, static_cast( flags ) ); + } + + // wrapper function for command vkCmdEndQuery, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQuery.html + VULKAN_HPP_INLINE void CommandBuffer::endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndQuery && "Function requires " ); + + getDispatcher()->vkCmdEndQuery( static_cast( m_commandBuffer ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkCmdResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetQueryPool.html + VULKAN_HPP_INLINE void + CommandBuffer::resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResetQueryPool && "Function requires " ); + + getDispatcher()->vkCmdResetQueryPool( static_cast( m_commandBuffer ), static_cast( queryPool ), firstQuery, queryCount ); + } + + // wrapper function for command vkCmdWriteTimestamp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp.html + VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteTimestamp && "Function requires " ); + + getDispatcher()->vkCmdWriteTimestamp( + static_cast( m_commandBuffer ), static_cast( pipelineStage ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkCmdCopyQueryPoolResults, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyQueryPoolResults.html + VULKAN_HPP_INLINE void CommandBuffer::copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + VULKAN_HPP_NAMESPACE::DeviceSize stride, + VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyQueryPoolResults && "Function requires " ); + + getDispatcher()->vkCmdCopyQueryPoolResults( static_cast( m_commandBuffer ), + static_cast( queryPool ), + firstQuery, + queryCount, + static_cast( dstBuffer ), + static_cast( dstOffset ), + static_cast( stride ), + static_cast( flags ) ); + } + + // wrapper function for command vkCmdPushConstants, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout, + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags, + uint32_t offset, + ArrayProxy const & values ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushConstants && "Function requires " ); + + getDispatcher()->vkCmdPushConstants( static_cast( m_commandBuffer ), + static_cast( layout ), + static_cast( stageFlags ), + offset, + values.size() * sizeof( ValuesType ), + reinterpret_cast( values.data() ) ); + } + + // wrapper function for command vkCmdBeginRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass.html + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, + VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderPass && "Function requires " ); + + getDispatcher()->vkCmdBeginRenderPass( static_cast( m_commandBuffer ), + reinterpret_cast( &renderPassBegin ), + static_cast( contents ) ); + } + + // wrapper function for command vkCmdNextSubpass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass.html + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdNextSubpass && "Function requires " ); + + getDispatcher()->vkCmdNextSubpass( static_cast( m_commandBuffer ), static_cast( contents ) ); + } + + // wrapper function for command vkCmdEndRenderPass, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass.html + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderPass && "Function requires " ); + + getDispatcher()->vkCmdEndRenderPass( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdExecuteCommands, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteCommands.html + VULKAN_HPP_INLINE void + CommandBuffer::executeCommands( ArrayProxy const & commandBuffers ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdExecuteCommands && "Function requires " ); + + getDispatcher()->vkCmdExecuteCommands( + static_cast( m_commandBuffer ), commandBuffers.size(), reinterpret_cast( commandBuffers.data() ) ); + } + + //=== VK_VERSION_1_1 === + + // wrapper function for command vkEnumerateInstanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumerateInstanceVersion.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t Context::enumerateInstanceVersion() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumerateInstanceVersion && "Function requires " ); + + uint32_t apiVersion; + Result result = static_cast( getDispatcher()->vkEnumerateInstanceVersion( &apiVersion ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceVersion" ); + + return apiVersion; + } + + // wrapper function for command vkBindBufferMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2.html + VULKAN_HPP_INLINE void Device::bindBufferMemory2( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindBufferMemory2 && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkBindBufferMemory2( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2" ); + } + + // wrapper function for command vkBindImageMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2.html + VULKAN_HPP_INLINE void Device::bindImageMemory2( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindImageMemory2 && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkBindImageMemory2( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2" ); + } + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeatures.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags + Device::getGroupPeerMemoryFeatures( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupPeerMemoryFeatures && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags peerMemoryFeatures; + getDispatcher()->vkGetDeviceGroupPeerMemoryFeatures( static_cast( m_device ), + heapIndex, + localDeviceIndex, + remoteDeviceIndex, + reinterpret_cast( &peerMemoryFeatures ) ); + + return peerMemoryFeatures; + } + + // wrapper function for command vkCmdSetDeviceMask, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMask.html + VULKAN_HPP_INLINE void CommandBuffer::setDeviceMask( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDeviceMask && "Function requires or " ); + + getDispatcher()->vkCmdSetDeviceMask( static_cast( m_commandBuffer ), deviceMask ); + } + + // wrapper function for command vkCmdDispatchBase, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBase.html + VULKAN_HPP_INLINE void CommandBuffer::dispatchBase( uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchBase && "Function requires or " ); + + getDispatcher()->vkCmdDispatchBase( + static_cast( m_commandBuffer ), baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkEnumeratePhysicalDeviceGroups, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroups.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Instance::enumeratePhysicalDeviceGroups() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumeratePhysicalDeviceGroups && + "Function requires or " ); + + std::vector physicalDeviceGroupProperties; + uint32_t physicalDeviceGroupCount; + Result result; + do + { + result = + static_cast( getDispatcher()->vkEnumeratePhysicalDeviceGroups( static_cast( m_instance ), &physicalDeviceGroupCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + result = static_cast( + getDispatcher()->vkEnumeratePhysicalDeviceGroups( static_cast( m_instance ), + &physicalDeviceGroupCount, + reinterpret_cast( physicalDeviceGroupProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" ); + VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); + if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + } + return physicalDeviceGroupProperties; + } + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetImageMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetImageMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetBufferMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetBufferMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetBufferMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetImageSparseMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSparseMemoryRequirements2 && + "Function requires or " ); + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + getDispatcher()->vkGetImageSparseMemoryRequirements2( + static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + getDispatcher()->vkGetImageSparseMemoryRequirements2( static_cast( m_device ), + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 PhysicalDevice::getFeatures2() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 features; + getDispatcher()->vkGetPhysicalDeviceFeatures2( static_cast( m_physicalDevice ), + reinterpret_cast( &features ) ); + + return features; + } + + // wrapper function for command vkGetPhysicalDeviceFeatures2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 & features = structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceFeatures2( static_cast( m_physicalDevice ), + reinterpret_cast( &features ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 PhysicalDevice::getProperties2() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties; + getDispatcher()->vkGetPhysicalDeviceProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &properties ) ); + + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 & properties = structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &properties ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2 + PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties; + getDispatcher()->vkGetPhysicalDeviceFormatProperties2( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return formatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties = structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceFormatProperties2( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties2 + PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties; + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); + + return imageFormatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + PhysicalDevice::getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2" ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2 && + "Function requires or " ); + + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), + &queueFamilyPropertyCount, + reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2 && + "Function requires or " ); + + std::vector structureChains; + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); + structureChains.resize( queueFamilyPropertyCount ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; + } + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2( static_cast( m_physicalDevice ), + &queueFamilyPropertyCount, + reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + structureChains.resize( queueFamilyPropertyCount ); + } + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + structureChains[i].template get() = queueFamilyProperties[i]; + } + return structureChains; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 + PhysicalDevice::getMemoryProperties2() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties2 && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties; + getDispatcher()->vkGetPhysicalDeviceMemoryProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &memoryProperties ) ); + + return memoryProperties; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties2 && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 & memoryProperties = + structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceMemoryProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &memoryProperties ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2 && + "Function requires or " ); + + std::vector properties; + uint32_t propertyCount; + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &formatInfo ), + &propertyCount, + nullptr ); + properties.resize( propertyCount ); + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( &formatInfo ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkTrimCommandPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPool.html + VULKAN_HPP_INLINE void CommandPool::trim( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkTrimCommandPool && "Function requires or " ); + + getDispatcher()->vkTrimCommandPool( + static_cast( m_device ), static_cast( m_commandPool ), static_cast( flags ) ); + } + + // wrapper function for command vkGetDeviceQueue2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceQueue2.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::getQueue2( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Queue queue; + getDispatcher()->vkGetDeviceQueue2( + static_cast( m_device ), reinterpret_cast( &queueInfo ), reinterpret_cast( &queue ) ); + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Queue( *this, *reinterpret_cast( &queue ) ); + } + + // wrapper function for command vkCreateSamplerYcbcrConversion, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversion.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion; + Result result = + static_cast( getDispatcher()->vkCreateSamplerYcbcrConversion( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &ycbcrConversion ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSamplerYcbcrConversion" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion( + *this, *reinterpret_cast( &ycbcrConversion ), allocator ); + } + + // wrapper function for command vkCreateDescriptorUpdateTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplate.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate; + Result result = + static_cast( getDispatcher()->vkCreateDescriptorUpdateTemplate( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorUpdateTemplate ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDescriptorUpdateTemplate" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate( + *this, *reinterpret_cast( &descriptorUpdateTemplate ), allocator ); + } + + // wrapper function for command vkUpdateDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplate.html + template + VULKAN_HPP_INLINE void DescriptorSet::updateWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + DataType const & data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateDescriptorSetWithTemplate && + "Function requires or " ); + + getDispatcher()->vkUpdateDescriptorSetWithTemplate( static_cast( m_device ), + static_cast( m_descriptorSet ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( &data ) ); + } + + // wrapper function for command vkGetPhysicalDeviceExternalBufferProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties + PhysicalDevice::getExternalBufferProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalBufferProperties && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties; + getDispatcher()->vkGetPhysicalDeviceExternalBufferProperties( static_cast( m_physicalDevice ), + reinterpret_cast( &externalBufferInfo ), + reinterpret_cast( &externalBufferProperties ) ); + + return externalBufferProperties; + } + + // wrapper function for command vkGetPhysicalDeviceExternalFenceProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFenceProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties + PhysicalDevice::getExternalFenceProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalFenceProperties && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties; + getDispatcher()->vkGetPhysicalDeviceExternalFenceProperties( static_cast( m_physicalDevice ), + reinterpret_cast( &externalFenceInfo ), + reinterpret_cast( &externalFenceProperties ) ); + + return externalFenceProperties; + } + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphoreProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties PhysicalDevice::getExternalSemaphoreProperties( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalSemaphoreProperties && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties; + getDispatcher()->vkGetPhysicalDeviceExternalSemaphoreProperties( + static_cast( m_physicalDevice ), + reinterpret_cast( &externalSemaphoreInfo ), + reinterpret_cast( &externalSemaphoreProperties ) ); + + return externalSemaphoreProperties; + } + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport + Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSupport && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support; + getDispatcher()->vkGetDescriptorSetLayoutSupport( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &support ) ); + + return support; + } + + // wrapper function for command vkGetDescriptorSetLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupport.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSupport && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support = structureChain.template get(); + getDispatcher()->vkGetDescriptorSetLayoutSupport( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &support ) ); + + return structureChain; + } + + //=== VK_VERSION_1_2 === + + // wrapper function for command vkCmdDrawIndirectCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCount.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectCount && + "Function requires or or " ); + + getDispatcher()->vkCmdDrawIndirectCount( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirectCount, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCount.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCount( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndexedIndirectCount && + "Function requires or or " ); + + getDispatcher()->vkCmdDrawIndexedIndirectCount( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCreateRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createRenderPass2( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::RenderPass renderPass; + Result result = static_cast( getDispatcher()->vkCreateRenderPass2( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRenderPass2" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, *reinterpret_cast( &renderPass ), allocator ); + } + + // wrapper function for command vkCmdBeginRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2.html + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, + const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderPass2 && + "Function requires or " ); + + getDispatcher()->vkCmdBeginRenderPass2( static_cast( m_commandBuffer ), + reinterpret_cast( &renderPassBegin ), + reinterpret_cast( &subpassBeginInfo ) ); + } + + // wrapper function for command vkCmdNextSubpass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2.html + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, + const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdNextSubpass2 && "Function requires or " ); + + getDispatcher()->vkCmdNextSubpass2( static_cast( m_commandBuffer ), + reinterpret_cast( &subpassBeginInfo ), + reinterpret_cast( &subpassEndInfo ) ); + } + + // wrapper function for command vkCmdEndRenderPass2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2.html + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderPass2 && "Function requires or " ); + + getDispatcher()->vkCmdEndRenderPass2( static_cast( m_commandBuffer ), reinterpret_cast( &subpassEndInfo ) ); + } + + // wrapper function for command vkResetQueryPool, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPool.html + VULKAN_HPP_INLINE void QueryPool::reset( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetQueryPool && "Function requires or " ); + + getDispatcher()->vkResetQueryPool( static_cast( m_device ), static_cast( m_queryPool ), firstQuery, queryCount ); + } + + // wrapper function for command vkGetSemaphoreCounterValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValue.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Semaphore::getCounterValue() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreCounterValue && + "Function requires or " ); + + uint64_t value; + Result result = static_cast( + getDispatcher()->vkGetSemaphoreCounterValue( static_cast( m_device ), static_cast( m_semaphore ), &value ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Semaphore::getCounterValue" ); + + return value; + } + + // wrapper function for command vkWaitSemaphores, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphores.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWaitSemaphores && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkWaitSemaphores( static_cast( m_device ), reinterpret_cast( &waitInfo ), timeout ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphores", { Result::eSuccess, Result::eTimeout } ); + + return static_cast( result ); + } + + // wrapper function for command vkSignalSemaphore, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphore.html + VULKAN_HPP_INLINE void Device::signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSignalSemaphore && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkSignalSemaphore( static_cast( m_device ), reinterpret_cast( &signalInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphore" ); + } + + // wrapper function for command vkGetBufferDeviceAddress, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddress.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceAddress + Device::getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferDeviceAddress && + "Function requires or or " ); + + VkDeviceAddress result = + getDispatcher()->vkGetBufferDeviceAddress( static_cast( m_device ), reinterpret_cast( &info ) ); + + return static_cast( result ); + } + + // wrapper function for command vkGetBufferOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddress.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferOpaqueCaptureAddress && + "Function requires or " ); + + uint64_t result = + getDispatcher()->vkGetBufferOpaqueCaptureAddress( static_cast( m_device ), reinterpret_cast( &info ) ); + + return result; + } + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddress, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddress && + "Function requires or " ); + + uint64_t result = getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddress( static_cast( m_device ), + reinterpret_cast( &info ) ); + + return result; + } + + //=== VK_VERSION_1_3 === + + // wrapper function for command vkGetPhysicalDeviceToolProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolProperties.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getToolProperties() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceToolProperties && + "Function requires or " ); + + std::vector toolProperties; + uint32_t toolCount; + Result result; + do + { + result = + static_cast( getDispatcher()->vkGetPhysicalDeviceToolProperties( static_cast( m_physicalDevice ), &toolCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && toolCount ) + { + toolProperties.resize( toolCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceToolProperties( + static_cast( m_physicalDevice ), &toolCount, reinterpret_cast( toolProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" ); + VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); + if ( toolCount < toolProperties.size() ) + { + toolProperties.resize( toolCount ); + } + return toolProperties; + } + + // wrapper function for command vkCreatePrivateDataSlot, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlot.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot; + Result result = static_cast( getDispatcher()->vkCreatePrivateDataSlot( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &privateDataSlot ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createPrivateDataSlot" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot( *this, *reinterpret_cast( &privateDataSlot ), allocator ); + } + + // wrapper function for command vkSetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateData.html + VULKAN_HPP_INLINE void Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, + uint64_t data ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetPrivateData && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkSetPrivateData( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateData" ); + } + + // wrapper function for command vkGetPrivateData, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateData.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPrivateData && "Function requires or " ); + + uint64_t data; + getDispatcher()->vkGetPrivateData( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), &data ); + + return data; + } + + // wrapper function for command vkCmdSetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2.html + VULKAN_HPP_INLINE void CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event, + const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetEvent2 && "Function requires or " ); + + getDispatcher()->vkCmdSetEvent2( + static_cast( m_commandBuffer ), static_cast( event ), reinterpret_cast( &dependencyInfo ) ); + } + + // wrapper function for command vkCmdResetEvent2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2.html + VULKAN_HPP_INLINE void CommandBuffer::resetEvent2( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResetEvent2 && "Function requires or " ); + + getDispatcher()->vkCmdResetEvent2( + static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdWaitEvents2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2.html + VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( ArrayProxy const & events, + ArrayProxy const & dependencyInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWaitEvents2 && "Function requires or " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() ); +# else + if ( events.size() != dependencyInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2: events.size() != dependencyInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdWaitEvents2( static_cast( m_commandBuffer ), + events.size(), + reinterpret_cast( events.data() ), + reinterpret_cast( dependencyInfos.data() ) ); + } + + // wrapper function for command vkCmdPipelineBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2.html + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPipelineBarrier2 && "Function requires or " ); + + getDispatcher()->vkCmdPipelineBarrier2( static_cast( m_commandBuffer ), reinterpret_cast( &dependencyInfo ) ); + } + + // wrapper function for command vkCmdWriteTimestamp2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2.html + VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteTimestamp2 && "Function requires or " ); + + getDispatcher()->vkCmdWriteTimestamp2( + static_cast( m_commandBuffer ), static_cast( stage ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkQueueSubmit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2.html + VULKAN_HPP_INLINE void Queue::submit2( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSubmit2 && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkQueueSubmit2( + static_cast( m_queue ), submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2" ); + } + + // wrapper function for command vkCmdCopyBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2.html + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBuffer2 && "Function requires or " ); + + getDispatcher()->vkCmdCopyBuffer2( static_cast( m_commandBuffer ), reinterpret_cast( ©BufferInfo ) ); + } + + // wrapper function for command vkCmdCopyImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2.html + VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImage2 && "Function requires or " ); + + getDispatcher()->vkCmdCopyImage2( static_cast( m_commandBuffer ), reinterpret_cast( ©ImageInfo ) ); + } + + // wrapper function for command vkCmdCopyBufferToImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html + VULKAN_HPP_INLINE void + CommandBuffer::copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBufferToImage2 && + "Function requires or " ); + + getDispatcher()->vkCmdCopyBufferToImage2( static_cast( m_commandBuffer ), + reinterpret_cast( ©BufferToImageInfo ) ); + } + + // wrapper function for command vkCmdCopyImageToBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2.html + VULKAN_HPP_INLINE void + CommandBuffer::copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImageToBuffer2 && + "Function requires or " ); + + getDispatcher()->vkCmdCopyImageToBuffer2( static_cast( m_commandBuffer ), + reinterpret_cast( ©ImageToBufferInfo ) ); + } + + // wrapper function for command vkCmdBlitImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2.html + VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBlitImage2 && "Function requires or " ); + + getDispatcher()->vkCmdBlitImage2( static_cast( m_commandBuffer ), reinterpret_cast( &blitImageInfo ) ); + } + + // wrapper function for command vkCmdResolveImage2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2.html + VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResolveImage2 && "Function requires or " ); + + getDispatcher()->vkCmdResolveImage2( static_cast( m_commandBuffer ), + reinterpret_cast( &resolveImageInfo ) ); + } + + // wrapper function for command vkCmdBeginRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRendering.html + VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRendering && "Function requires or " ); + + getDispatcher()->vkCmdBeginRendering( static_cast( m_commandBuffer ), reinterpret_cast( &renderingInfo ) ); + } + + // wrapper function for command vkCmdEndRendering, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering.html + VULKAN_HPP_INLINE void CommandBuffer::endRendering() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRendering && "Function requires or " ); + + getDispatcher()->vkCmdEndRendering( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdSetCullMode, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullMode.html + VULKAN_HPP_INLINE void CommandBuffer::setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCullMode && + "Function requires or or " ); + + getDispatcher()->vkCmdSetCullMode( static_cast( m_commandBuffer ), static_cast( cullMode ) ); + } + + // wrapper function for command vkCmdSetFrontFace, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFace.html + VULKAN_HPP_INLINE void CommandBuffer::setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFrontFace && + "Function requires or or " ); + + getDispatcher()->vkCmdSetFrontFace( static_cast( m_commandBuffer ), static_cast( frontFace ) ); + } + + // wrapper function for command vkCmdSetPrimitiveTopology, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopology.html + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPrimitiveTopology && + "Function requires or or " ); + + getDispatcher()->vkCmdSetPrimitiveTopology( static_cast( m_commandBuffer ), static_cast( primitiveTopology ) ); + } + + // wrapper function for command vkCmdSetViewportWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCount.html + VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportWithCount && + "Function requires or or " ); + + getDispatcher()->vkCmdSetViewportWithCount( + static_cast( m_commandBuffer ), viewports.size(), reinterpret_cast( viewports.data() ) ); + } + + // wrapper function for command vkCmdSetScissorWithCount, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCount.html + VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetScissorWithCount && + "Function requires or or " ); + + getDispatcher()->vkCmdSetScissorWithCount( + static_cast( m_commandBuffer ), scissors.size(), reinterpret_cast( scissors.data() ) ); + } + + // wrapper function for command vkCmdBindVertexBuffers2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2.html + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes, + ArrayProxy const & strides ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindVertexBuffers2 && + "Function requires or or " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); + VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); + VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != offsets.size()" ); + } + if ( !sizes.empty() && buffers.size() != sizes.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != sizes.size()" ); + } + if ( !strides.empty() && buffers.size() != strides.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2: buffers.size() != strides.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBindVertexBuffers2( static_cast( m_commandBuffer ), + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ), + reinterpret_cast( sizes.data() ), + reinterpret_cast( strides.data() ) ); + } + + // wrapper function for command vkCmdSetDepthTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthTestEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthTestEnable( static_cast( m_commandBuffer ), static_cast( depthTestEnable ) ); + } + + // wrapper function for command vkCmdSetDepthWriteEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthWriteEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthWriteEnable( static_cast( m_commandBuffer ), static_cast( depthWriteEnable ) ); + } + + // wrapper function for command vkCmdSetDepthCompareOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOp.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthCompareOp && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthCompareOp( static_cast( m_commandBuffer ), static_cast( depthCompareOp ) ); + } + + // wrapper function for command vkCmdSetDepthBoundsTestEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBoundsTestEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthBoundsTestEnable( static_cast( m_commandBuffer ), static_cast( depthBoundsTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilTestEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilTestEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetStencilTestEnable( static_cast( m_commandBuffer ), static_cast( stencilTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilOp, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOp.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, + VULKAN_HPP_NAMESPACE::StencilOp failOp, + VULKAN_HPP_NAMESPACE::StencilOp passOp, + VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, + VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilOp && + "Function requires or or " ); + + getDispatcher()->vkCmdSetStencilOp( static_cast( m_commandBuffer ), + static_cast( faceMask ), + static_cast( failOp ), + static_cast( passOp ), + static_cast( depthFailOp ), + static_cast( compareOp ) ); + } + + // wrapper function for command vkCmdSetRasterizerDiscardEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRasterizerDiscardEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetRasterizerDiscardEnable( static_cast( m_commandBuffer ), static_cast( rasterizerDiscardEnable ) ); + } + + // wrapper function for command vkCmdSetDepthBiasEnable, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBiasEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthBiasEnable( static_cast( m_commandBuffer ), static_cast( depthBiasEnable ) ); + } + + // wrapper function for command vkCmdSetPrimitiveRestartEnable, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnable.html + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPrimitiveRestartEnable && + "Function requires or or " ); + + getDispatcher()->vkCmdSetPrimitiveRestartEnable( static_cast( m_commandBuffer ), static_cast( primitiveRestartEnable ) ); + } + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceBufferMemoryRequirements && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetDeviceBufferMemoryRequirements( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceBufferMemoryRequirements && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetDeviceBufferMemoryRequirements( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageMemoryRequirements && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetDeviceImageMemoryRequirements( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirements.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageMemoryRequirements && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetDeviceImageMemoryRequirements( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirements.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSparseMemoryRequirements && + "Function requires or " ); + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + getDispatcher()->vkGetDeviceImageSparseMemoryRequirements( + static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + getDispatcher()->vkGetDeviceImageSparseMemoryRequirements( static_cast( m_device ), + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + //=== VK_VERSION_1_4 === + + // wrapper function for command vkCmdSetLineStipple, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStipple.html + VULKAN_HPP_INLINE void CommandBuffer::setLineStipple( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineStipple && + "Function requires or or " ); + + getDispatcher()->vkCmdSetLineStipple( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); + } + + // wrapper function for command vkMapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * Device::mapMemory2( const VULKAN_HPP_NAMESPACE::MemoryMapInfo & memoryMapInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkMapMemory2 && "Function requires or " ); + + void * pData; + Result result = static_cast( + getDispatcher()->vkMapMemory2( static_cast( m_device ), reinterpret_cast( &memoryMapInfo ), &pData ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mapMemory2" ); + + return pData; + } + + // wrapper function for command vkUnmapMemory2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2.html + VULKAN_HPP_INLINE void Device::unmapMemory2( const VULKAN_HPP_NAMESPACE::MemoryUnmapInfo & memoryUnmapInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUnmapMemory2 && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkUnmapMemory2( static_cast( m_device ), reinterpret_cast( &memoryUnmapInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::unmapMemory2" ); + } + + // wrapper function for command vkCmdBindIndexBuffer2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2.html + VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer2( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindIndexBuffer2 && "Function requires or " ); + + getDispatcher()->vkCmdBindIndexBuffer2( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( size ), + static_cast( indexType ) ); + } + + // wrapper function for command vkGetRenderingAreaGranularity, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularity.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D + Device::getRenderingAreaGranularity( const VULKAN_HPP_NAMESPACE::RenderingAreaInfo & renderingAreaInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRenderingAreaGranularity && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::Extent2D granularity; + getDispatcher()->vkGetRenderingAreaGranularity( static_cast( m_device ), + reinterpret_cast( &renderingAreaInfo ), + reinterpret_cast( &granularity ) ); + + return granularity; + } + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2 + Device::getImageSubresourceLayout( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSubresourceLayout && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::SubresourceLayout2 layout; + getDispatcher()->vkGetDeviceImageSubresourceLayout( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetDeviceImageSubresourceLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayout.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageSubresourceLayout( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSubresourceLayout && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::SubresourceLayout2 & layout = structureChain.template get(); + getDispatcher()->vkGetDeviceImageSubresourceLayout( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &layout ) ); + + return structureChain; + } + + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2 + Image::getSubresourceLayout2( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetImageSubresourceLayout2 && + "Function requires or or or " ); + + VULKAN_HPP_NAMESPACE::SubresourceLayout2 layout; + getDispatcher()->vkGetImageSubresourceLayout2( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetImageSubresourceLayout2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Image::getSubresourceLayout2( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetImageSubresourceLayout2 && + "Function requires or or or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::SubresourceLayout2 & layout = structureChain.template get(); + getDispatcher()->vkGetImageSubresourceLayout2( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return structureChain; + } + + // wrapper function for command vkCmdPushDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet.html + VULKAN_HPP_INLINE void + CommandBuffer::pushDescriptorSet( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSet && "Function requires or " ); + + getDispatcher()->vkCmdPushDescriptorSet( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + set, + descriptorWrites.size(), + reinterpret_cast( descriptorWrites.data() ) ); + } + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + DataType const & data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkCmdPushDescriptorSetWithTemplate && + "Function requires or or " ); + + getDispatcher()->vkCmdPushDescriptorSetWithTemplate( static_cast( m_commandBuffer ), + static_cast( descriptorUpdateTemplate ), + static_cast( layout ), + set, + reinterpret_cast( &data ) ); + } + + // wrapper function for command vkCmdSetRenderingAttachmentLocations, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocations.html + VULKAN_HPP_INLINE void + CommandBuffer::setRenderingAttachmentLocations( const VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo & locationInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRenderingAttachmentLocations && + "Function requires or " ); + + getDispatcher()->vkCmdSetRenderingAttachmentLocations( static_cast( m_commandBuffer ), + reinterpret_cast( &locationInfo ) ); + } + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndices, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndices.html + VULKAN_HPP_INLINE void CommandBuffer::setRenderingInputAttachmentIndices( + const VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRenderingInputAttachmentIndices && + "Function requires or " ); + + getDispatcher()->vkCmdSetRenderingInputAttachmentIndices( static_cast( m_commandBuffer ), + reinterpret_cast( &inputAttachmentIndexInfo ) ); + } + + // wrapper function for command vkCmdBindDescriptorSets2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2.html + VULKAN_HPP_INLINE void + CommandBuffer::bindDescriptorSets2( const VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo & bindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindDescriptorSets2 && + "Function requires or " ); + + getDispatcher()->vkCmdBindDescriptorSets2( static_cast( m_commandBuffer ), + reinterpret_cast( &bindDescriptorSetsInfo ) ); + } + + // wrapper function for command vkCmdPushConstants2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2.html + VULKAN_HPP_INLINE void CommandBuffer::pushConstants2( const VULKAN_HPP_NAMESPACE::PushConstantsInfo & pushConstantsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushConstants2 && "Function requires or " ); + + getDispatcher()->vkCmdPushConstants2( static_cast( m_commandBuffer ), + reinterpret_cast( &pushConstantsInfo ) ); + } + + // wrapper function for command vkCmdPushDescriptorSet2, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2.html + VULKAN_HPP_INLINE void + CommandBuffer::pushDescriptorSet2( const VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo & pushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSet2 && "Function requires or " ); + + getDispatcher()->vkCmdPushDescriptorSet2( static_cast( m_commandBuffer ), + reinterpret_cast( &pushDescriptorSetInfo ) ); + } + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2.html + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate2( + const VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSetWithTemplate2 && + "Function requires or " ); + + getDispatcher()->vkCmdPushDescriptorSetWithTemplate2( + static_cast( m_commandBuffer ), reinterpret_cast( &pushDescriptorSetWithTemplateInfo ) ); + } + + // wrapper function for command vkCopyMemoryToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html + VULKAN_HPP_INLINE void Device::copyMemoryToImage( const VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo & copyMemoryToImageInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMemoryToImage && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkCopyMemoryToImage( + static_cast( m_device ), reinterpret_cast( ©MemoryToImageInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToImage" ); + } + + // wrapper function for command vkCopyImageToMemory, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemory.html + VULKAN_HPP_INLINE void Device::copyImageToMemory( const VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo & copyImageToMemoryInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyImageToMemory && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkCopyImageToMemory( + static_cast( m_device ), reinterpret_cast( ©ImageToMemoryInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToMemory" ); + } + + // wrapper function for command vkCopyImageToImage, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImage.html + VULKAN_HPP_INLINE void Device::copyImageToImage( const VULKAN_HPP_NAMESPACE::CopyImageToImageInfo & copyImageToImageInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyImageToImage && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkCopyImageToImage( static_cast( m_device ), reinterpret_cast( ©ImageToImageInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToImage" ); + } + + // wrapper function for command vkTransitionImageLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayout.html + VULKAN_HPP_INLINE void Device::transitionImageLayout( ArrayProxy const & transitions ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkTransitionImageLayout && + "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkTransitionImageLayout( + static_cast( m_device ), transitions.size(), reinterpret_cast( transitions.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::transitionImageLayout" ); + } + + //=== VK_KHR_surface === + + // wrapper function for command vkGetPhysicalDeviceSurfaceSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, + VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceSupportKHR && "Function requires " ); + + VULKAN_HPP_NAMESPACE::Bool32 supported; + Result result = static_cast( getDispatcher()->vkGetPhysicalDeviceSurfaceSupportKHR( static_cast( m_physicalDevice ), + queueFamilyIndex, + static_cast( surface ), + reinterpret_cast( &supported ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceSupportKHR" ); + + return supported; + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR + PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilitiesKHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities; + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilitiesKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + reinterpret_cast( &surfaceCapabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilitiesKHR" ); + + return surfaceCapabilities; + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormatsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormatsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR && "Function requires " ); + + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR( + static_cast( m_physicalDevice ), static_cast( surface ), &surfaceFormatCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + surfaceFormats.resize( surfaceFormatCount ); + result = + static_cast( getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + surfaceFormats.resize( surfaceFormatCount ); + } + return surfaceFormats; + } + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR && + "Function requires " ); + + std::vector presentModes; + uint32_t presentModeCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR( + static_cast( m_physicalDevice ), static_cast( surface ), &presentModeCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentModeCount ) + { + presentModes.resize( presentModeCount ); + result = + static_cast( getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + &presentModeCount, + reinterpret_cast( presentModes.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" ); + VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); + if ( presentModeCount < presentModes.size() ) + { + presentModes.resize( presentModeCount ); + } + return presentModes; + } + + //=== VK_KHR_swapchain === + + // wrapper function for command vkCreateSwapchainKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSwapchainKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain; + Result result = static_cast( getDispatcher()->vkCreateSwapchainKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &swapchain ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSwapchainKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR( *this, *reinterpret_cast( &swapchain ), allocator ); + } + + // wrapper function for command vkGetSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainImagesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector SwapchainKHR::getImages() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainImagesKHR && "Function requires " ); + + std::vector swapchainImages; + uint32_t swapchainImageCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetSwapchainImagesKHR( + static_cast( m_device ), static_cast( m_swapchainKHR ), &swapchainImageCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && swapchainImageCount ) + { + swapchainImages.resize( swapchainImageCount ); + result = static_cast( getDispatcher()->vkGetSwapchainImagesKHR( static_cast( m_device ), + static_cast( m_swapchainKHR ), + &swapchainImageCount, + reinterpret_cast( swapchainImages.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getImages" ); + VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() ); + if ( swapchainImageCount < swapchainImages.size() ) + { + swapchainImages.resize( swapchainImageCount ); + } + return swapchainImages; + } + + // wrapper function for command vkAcquireNextImageKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImageKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair + SwapchainKHR::acquireNextImage( uint64_t timeout, VULKAN_HPP_NAMESPACE::Semaphore semaphore, VULKAN_HPP_NAMESPACE::Fence fence ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireNextImageKHR && "Function requires " ); + + uint32_t imageIndex; + Result result = static_cast( getDispatcher()->vkAcquireNextImageKHR( static_cast( m_device ), + static_cast( m_swapchainKHR ), + timeout, + static_cast( semaphore ), + static_cast( fence ), + &imageIndex ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::acquireNextImage", + { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } ); + + return std::make_pair( result, std::move( imageIndex ) ); + } + + // wrapper function for command vkQueuePresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueuePresentKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueuePresentKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkQueuePresentKHR( static_cast( m_queue ), reinterpret_cast( &presentInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::presentKHR", { Result::eSuccess, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkGetDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPresentCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR Device::getGroupPresentCapabilitiesKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupPresentCapabilitiesKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR deviceGroupPresentCapabilities; + Result result = static_cast( getDispatcher()->vkGetDeviceGroupPresentCapabilitiesKHR( + static_cast( m_device ), reinterpret_cast( &deviceGroupPresentCapabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupPresentCapabilitiesKHR" ); + + return deviceGroupPresentCapabilities; + } + + // wrapper function for command vkGetDeviceGroupSurfacePresentModesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR + Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupSurfacePresentModesKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes; + Result result = static_cast( getDispatcher()->vkGetDeviceGroupSurfacePresentModesKHR( + static_cast( m_device ), static_cast( surface ), reinterpret_cast( &modes ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModesKHR" ); + + return modes; + } + + // wrapper function for command vkGetPhysicalDevicePresentRectanglesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDevicePresentRectanglesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR && + "Function requires or " ); + + std::vector rects; + uint32_t rectCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR( + static_cast( m_physicalDevice ), static_cast( surface ), &rectCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && rectCount ) + { + rects.resize( rectCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR( static_cast( m_physicalDevice ), + static_cast( surface ), + &rectCount, + reinterpret_cast( rects.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" ); + VULKAN_HPP_ASSERT( rectCount <= rects.size() ); + if ( rectCount < rects.size() ) + { + rects.resize( rectCount ); + } + return rects; + } + + // wrapper function for command vkAcquireNextImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireNextImage2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair + Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireNextImage2KHR && "Function requires or " ); + + uint32_t imageIndex; + Result result = static_cast( getDispatcher()->vkAcquireNextImage2KHR( + static_cast( m_device ), reinterpret_cast( &acquireInfo ), &imageIndex ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::acquireNextImage2KHR", + { Result::eSuccess, Result::eTimeout, Result::eNotReady, Result::eSuboptimalKHR } ); + + return std::make_pair( result, std::move( imageIndex ) ); + } + + //=== VK_KHR_display === + + // wrapper function for command vkGetPhysicalDeviceDisplayPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayPropertiesKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayPropertiesKHR && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceDisplayPropertiesKHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceDisplayPropertiesKHR( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceDisplayPlanePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlanePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayPlanePropertiesKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetDisplayPlaneSupportedDisplaysKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneSupportedDisplaysKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const + { + std::vector displays; + uint32_t displayCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetDisplayPlaneSupportedDisplaysKHR( static_cast( m_physicalDevice ), planeIndex, &displayCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && displayCount ) + { + displays.resize( displayCount ); + result = static_cast( getDispatcher()->vkGetDisplayPlaneSupportedDisplaysKHR( + static_cast( m_physicalDevice ), planeIndex, &displayCount, reinterpret_cast( displays.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + if ( ( result != Result::eSuccess ) && ( result != Result::eIncomplete ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" ); +# endif + } + + std::vector displaysRAII; + displaysRAII.reserve( displays.size() ); + for ( auto & display : displays ) + { + displaysRAII.emplace_back( *this, *reinterpret_cast( &display ) ); + } + return displaysRAII; + } + + // wrapper function for command vkGetDisplayModePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector DisplayKHR::getModeProperties() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayModePropertiesKHR && "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetDisplayModePropertiesKHR( + static_cast( m_physicalDevice ), static_cast( m_displayKHR ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetDisplayModePropertiesKHR( static_cast( m_physicalDevice ), + static_cast( m_displayKHR ), + &propertyCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkCreateDisplayModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayModeKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + DisplayKHR::createMode( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DisplayModeKHR mode; + Result result = static_cast( getDispatcher()->vkCreateDisplayModeKHR( static_cast( m_physicalDevice ), + static_cast( m_displayKHR ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &mode ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "DisplayKHR::createMode" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR( *this, *reinterpret_cast( &mode ) ); + } + + // wrapper function for command vkGetDisplayPlaneCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR + DisplayModeKHR::getDisplayPlaneCapabilities( uint32_t planeIndex ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayPlaneCapabilitiesKHR && "Function requires " ); + + VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities; + Result result = + static_cast( getDispatcher()->vkGetDisplayPlaneCapabilitiesKHR( static_cast( m_physicalDevice ), + static_cast( m_displayModeKHR ), + planeIndex, + reinterpret_cast( &capabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayModeKHR::getDisplayPlaneCapabilities" ); + + return capabilities; + } + + // wrapper function for command vkCreateDisplayPlaneSurfaceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDisplayPlaneSurfaceKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createDisplayPlaneSurfaceKHR( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = + static_cast( getDispatcher()->vkCreateDisplayPlaneSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createDisplayPlaneSurfaceKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + //=== VK_KHR_display_swapchain === + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + Device::createSharedSwapchainsKHR( VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector swapchains( createInfos.size() ); + Result result = + static_cast( getDispatcher()->vkCreateSharedSwapchainsKHR( static_cast( m_device ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( swapchains.data() ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSharedSwapchainsKHR" ); +# endif + } + + std::vector swapchainsRAII; + swapchainsRAII.reserve( swapchains.size() ); + for ( auto & swapchain : swapchains ) + { + swapchainsRAII.emplace_back( *this, *reinterpret_cast( &swapchain ), allocator ); + } + return swapchainsRAII; + } + + // wrapper function for command vkCreateSharedSwapchainsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSharedSwapchainsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createSharedSwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain; + Result result = static_cast( getDispatcher()->vkCreateSharedSwapchainsKHR( static_cast( m_device ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &swapchain ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSharedSwapchainKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR( *this, *reinterpret_cast( &swapchain ), allocator ); + } + +# if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + // wrapper function for command vkCreateXlibSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXlibSurfaceKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createXlibSurfaceKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateXlibSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createXlibSurfaceKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + // wrapper function for command vkGetPhysicalDeviceXlibPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXlibPresentationSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXlibPresentationSupportKHR( uint32_t queueFamilyIndex, + Display & dpy, + VisualID visualID ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceXlibPresentationSupportKHR && + "Function requires " ); + + VkBool32 result = + getDispatcher()->vkGetPhysicalDeviceXlibPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, &dpy, visualID ); + + return static_cast( result ); + } +# endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +# if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + // wrapper function for command vkCreateXcbSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateXcbSurfaceKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createXcbSurfaceKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateXcbSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createXcbSurfaceKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + // wrapper function for command vkGetPhysicalDeviceXcbPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceXcbPresentationSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Bool32 PhysicalDevice::getXcbPresentationSupportKHR( uint32_t queueFamilyIndex, + xcb_connection_t & connection, + xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceXcbPresentationSupportKHR && + "Function requires " ); + + VkBool32 result = getDispatcher()->vkGetPhysicalDeviceXcbPresentationSupportKHR( + static_cast( m_physicalDevice ), queueFamilyIndex, &connection, visual_id ); + + return static_cast( result ); + } +# endif /*VK_USE_PLATFORM_XCB_KHR*/ + +# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + // wrapper function for command vkCreateWaylandSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWaylandSurfaceKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createWaylandSurfaceKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateWaylandSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createWaylandSurfaceKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + // wrapper function for command vkGetPhysicalDeviceWaylandPresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWaylandPresentationSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex, + struct wl_display & display ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceWaylandPresentationSupportKHR && + "Function requires " ); + + VkBool32 result = + getDispatcher()->vkGetPhysicalDeviceWaylandPresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex, &display ); + + return static_cast( result ); + } +# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + // wrapper function for command vkCreateAndroidSurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAndroidSurfaceKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createAndroidSurfaceKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateAndroidSurfaceKHR( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createAndroidSurfaceKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + // wrapper function for command vkCreateWin32SurfaceKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateWin32SurfaceKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createWin32SurfaceKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateWin32SurfaceKHR( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createWin32SurfaceKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + // wrapper function for command vkGetPhysicalDeviceWin32PresentationSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceWin32PresentationSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Bool32 PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceWin32PresentationSupportKHR && + "Function requires " ); + + VkBool32 result = getDispatcher()->vkGetPhysicalDeviceWin32PresentationSupportKHR( static_cast( m_physicalDevice ), queueFamilyIndex ); + + return static_cast( result ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + // wrapper function for command vkCreateDebugReportCallbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugReportCallbackEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback; + Result result = + static_cast( getDispatcher()->vkCreateDebugReportCallbackEXT( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &callback ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createDebugReportCallbackEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT( + *this, *reinterpret_cast( &callback ), allocator ); + } + + // wrapper function for command vkDebugReportMessageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugReportMessageEXT.html + VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_, + uint64_t object, + size_t location, + int32_t messageCode, + const std::string & layerPrefix, + const std::string & message ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDebugReportMessageEXT && "Function requires " ); + + getDispatcher()->vkDebugReportMessageEXT( static_cast( m_instance ), + static_cast( flags ), + static_cast( objectType_ ), + object, + location, + messageCode, + layerPrefix.c_str(), + message.c_str() ); + } + + //=== VK_EXT_debug_marker === + + // wrapper function for command vkDebugMarkerSetObjectTagEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectTagEXT.html + VULKAN_HPP_INLINE void Device::debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDebugMarkerSetObjectTagEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkDebugMarkerSetObjectTagEXT( + static_cast( m_device ), reinterpret_cast( &tagInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectTagEXT" ); + } + + // wrapper function for command vkDebugMarkerSetObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDebugMarkerSetObjectNameEXT.html + VULKAN_HPP_INLINE void Device::debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDebugMarkerSetObjectNameEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkDebugMarkerSetObjectNameEXT( + static_cast( m_device ), reinterpret_cast( &nameInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::debugMarkerSetObjectNameEXT" ); + } + + // wrapper function for command vkCmdDebugMarkerBeginEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerBeginEXT.html + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerBeginEXT && "Function requires " ); + + getDispatcher()->vkCmdDebugMarkerBeginEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &markerInfo ) ); + } + + // wrapper function for command vkCmdDebugMarkerEndEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerEndEXT.html + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerEndEXT() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerEndEXT && "Function requires " ); + + getDispatcher()->vkCmdDebugMarkerEndEXT( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdDebugMarkerInsertEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDebugMarkerInsertEXT.html + VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerInsertEXT && "Function requires " ); + + getDispatcher()->vkCmdDebugMarkerInsertEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &markerInfo ) ); + } + + //=== VK_KHR_video_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR + PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR & videoProfile ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR capabilities; + Result result = + static_cast( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &videoProfile ), + reinterpret_cast( &capabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); + + return capabilities; + } + + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR & videoProfile ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR & capabilities = structureChain.template get(); + Result result = + static_cast( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &videoProfile ), + reinterpret_cast( &capabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoCapabilitiesKHR" ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR && + "Function requires " ); + + std::vector videoFormatProperties; + uint32_t videoFormatPropertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && videoFormatPropertyCount ) + { + videoFormatProperties.resize( videoFormatPropertyCount ); + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + reinterpret_cast( videoFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); + VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); + if ( videoFormatPropertyCount < videoFormatProperties.size() ) + { + videoFormatProperties.resize( videoFormatPropertyCount ); + } + return videoFormatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceVideoFormatPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoFormatPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR && + "Function requires " ); + + std::vector structureChains; + std::vector videoFormatProperties; + uint32_t videoFormatPropertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && videoFormatPropertyCount ) + { + structureChains.resize( videoFormatPropertyCount ); + videoFormatProperties.resize( videoFormatPropertyCount ); + for ( uint32_t i = 0; i < videoFormatPropertyCount; i++ ) + { + videoFormatProperties[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &videoFormatInfo ), + &videoFormatPropertyCount, + reinterpret_cast( videoFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" ); + VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() ); + if ( videoFormatPropertyCount < videoFormatProperties.size() ) + { + structureChains.resize( videoFormatPropertyCount ); + } + for ( uint32_t i = 0; i < videoFormatPropertyCount; i++ ) + { + structureChains[i].template get() = videoFormatProperties[i]; + } + return structureChains; + } + + // wrapper function for command vkCreateVideoSessionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession; + Result result = static_cast( getDispatcher()->vkCreateVideoSessionKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &videoSession ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createVideoSessionKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR( *this, *reinterpret_cast( &videoSession ), allocator ); + } + + // wrapper function for command vkGetVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetVideoSessionMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector VideoSessionKHR::getMemoryRequirements() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR && + "Function requires " ); + + std::vector memoryRequirements; + uint32_t memoryRequirementsCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR( + static_cast( m_device ), static_cast( m_videoSessionKHR ), &memoryRequirementsCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && memoryRequirementsCount ) + { + memoryRequirements.resize( memoryRequirementsCount ); + result = static_cast( + getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR( static_cast( m_device ), + static_cast( m_videoSessionKHR ), + &memoryRequirementsCount, + reinterpret_cast( memoryRequirements.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + + VULKAN_HPP_ASSERT( memoryRequirementsCount <= memoryRequirements.size() ); + if ( memoryRequirementsCount < memoryRequirements.size() ) + { + memoryRequirements.resize( memoryRequirementsCount ); + } + return memoryRequirements; + } + + // wrapper function for command vkBindVideoSessionMemoryKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindVideoSessionMemoryKHR.html + VULKAN_HPP_INLINE void + VideoSessionKHR::bindMemory( ArrayProxy const & bindSessionMemoryInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindVideoSessionMemoryKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkBindVideoSessionMemoryKHR( static_cast( m_device ), + static_cast( m_videoSessionKHR ), + bindSessionMemoryInfos.size(), + reinterpret_cast( bindSessionMemoryInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::VideoSessionKHR::bindMemory" ); + } + + // wrapper function for command vkCreateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateVideoSessionParametersKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR>::Type + Device::createVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters; + Result result = + static_cast( getDispatcher()->vkCreateVideoSessionParametersKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &videoSessionParameters ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createVideoSessionParametersKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR( + *this, *reinterpret_cast( &videoSessionParameters ), allocator ); + } + + // wrapper function for command vkUpdateVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateVideoSessionParametersKHR.html + VULKAN_HPP_INLINE void VideoSessionParametersKHR::update( const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateVideoSessionParametersKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkUpdateVideoSessionParametersKHR( static_cast( m_device ), + static_cast( m_videoSessionParametersKHR ), + reinterpret_cast( &updateInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::VideoSessionParametersKHR::update" ); + } + + // wrapper function for command vkCmdBeginVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginVideoCodingKHR.html + VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginVideoCodingKHR && "Function requires " ); + + getDispatcher()->vkCmdBeginVideoCodingKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &beginInfo ) ); + } + + // wrapper function for command vkCmdEndVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndVideoCodingKHR.html + VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndVideoCodingKHR && "Function requires " ); + + getDispatcher()->vkCmdEndVideoCodingKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &endCodingInfo ) ); + } + + // wrapper function for command vkCmdControlVideoCodingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdControlVideoCodingKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdControlVideoCodingKHR && "Function requires " ); + + getDispatcher()->vkCmdControlVideoCodingKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &codingControlInfo ) ); + } + + //=== VK_KHR_video_decode_queue === + + // wrapper function for command vkCmdDecodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecodeVideoKHR.html + VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & decodeInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDecodeVideoKHR && "Function requires " ); + + getDispatcher()->vkCmdDecodeVideoKHR( static_cast( m_commandBuffer ), reinterpret_cast( &decodeInfo ) ); + } + + //=== VK_EXT_transform_feedback === + + // wrapper function for command vkCmdBindTransformFeedbackBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTransformFeedbackBuffersEXT.html + VULKAN_HPP_INLINE void CommandBuffer::bindTransformFeedbackBuffersEXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindTransformFeedbackBuffersEXT && + "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); + VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != offsets.size()" ); + } + if ( !sizes.empty() && buffers.size() != sizes.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindTransformFeedbackBuffersEXT: buffers.size() != sizes.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBindTransformFeedbackBuffersEXT( static_cast( m_commandBuffer ), + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ), + reinterpret_cast( sizes.data() ) ); + } + + // wrapper function for command vkCmdBeginTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginTransformFeedbackEXT.html + VULKAN_HPP_INLINE void CommandBuffer::beginTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginTransformFeedbackEXT && "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( counterBufferOffsets.empty() || counterBuffers.size() == counterBufferOffsets.size() ); +# else + if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::beginTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBeginTransformFeedbackEXT( static_cast( m_commandBuffer ), + firstCounterBuffer, + counterBuffers.size(), + reinterpret_cast( counterBuffers.data() ), + reinterpret_cast( counterBufferOffsets.data() ) ); + } + + // wrapper function for command vkCmdEndTransformFeedbackEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndTransformFeedbackEXT.html + VULKAN_HPP_INLINE void CommandBuffer::endTransformFeedbackEXT( uint32_t firstCounterBuffer, + ArrayProxy const & counterBuffers, + ArrayProxy const & counterBufferOffsets ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndTransformFeedbackEXT && "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( counterBufferOffsets.empty() || counterBuffers.size() == counterBufferOffsets.size() ); +# else + if ( !counterBufferOffsets.empty() && counterBuffers.size() != counterBufferOffsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::endTransformFeedbackEXT: counterBuffers.size() != counterBufferOffsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdEndTransformFeedbackEXT( static_cast( m_commandBuffer ), + firstCounterBuffer, + counterBuffers.size(), + reinterpret_cast( counterBuffers.data() ), + reinterpret_cast( counterBufferOffsets.data() ) ); + } + + // wrapper function for command vkCmdBeginQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginQueryIndexedEXT.html + VULKAN_HPP_INLINE void CommandBuffer::beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query, + VULKAN_HPP_NAMESPACE::QueryControlFlags flags, + uint32_t index ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginQueryIndexedEXT && "Function requires " ); + + getDispatcher()->vkCmdBeginQueryIndexedEXT( + static_cast( m_commandBuffer ), static_cast( queryPool ), query, static_cast( flags ), index ); + } + + // wrapper function for command vkCmdEndQueryIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndQueryIndexedEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::endQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query, uint32_t index ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndQueryIndexedEXT && "Function requires " ); + + getDispatcher()->vkCmdEndQueryIndexedEXT( static_cast( m_commandBuffer ), static_cast( queryPool ), query, index ); + } + + // wrapper function for command vkCmdDrawIndirectByteCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectByteCountEXT.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectByteCountEXT( uint32_t instanceCount, + uint32_t firstInstance, + VULKAN_HPP_NAMESPACE::Buffer counterBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectByteCountEXT && "Function requires " ); + + getDispatcher()->vkCmdDrawIndirectByteCountEXT( static_cast( m_commandBuffer ), + instanceCount, + firstInstance, + static_cast( counterBuffer ), + static_cast( counterBufferOffset ), + counterOffset, + vertexStride ); + } + + //=== VK_NVX_binary_import === + + // wrapper function for command vkCreateCuModuleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuModuleNVX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::CuModuleNVX module; + Result result = static_cast( getDispatcher()->vkCreateCuModuleNVX( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &module ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createCuModuleNVX" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX( *this, *reinterpret_cast( &module ), allocator ); + } + + // wrapper function for command vkCreateCuFunctionNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCuFunctionNVX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::CuFunctionNVX function; + Result result = static_cast( getDispatcher()->vkCreateCuFunctionNVX( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &function ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createCuFunctionNVX" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX( *this, *reinterpret_cast( &function ), allocator ); + } + + // wrapper function for command vkCmdCuLaunchKernelNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCuLaunchKernelNVX.html + VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCuLaunchKernelNVX && "Function requires " ); + + getDispatcher()->vkCmdCuLaunchKernelNVX( static_cast( m_commandBuffer ), reinterpret_cast( &launchInfo ) ); + } + + //=== VK_NVX_image_view_handle === + + // wrapper function for command vkGetImageViewHandleNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandleNVX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t + Device::getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewHandleNVX && "Function requires " ); + + uint32_t result = + getDispatcher()->vkGetImageViewHandleNVX( static_cast( m_device ), reinterpret_cast( &info ) ); + + return result; + } + + // wrapper function for command vkGetImageViewHandle64NVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewHandle64NVX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getImageViewHandle64NVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewHandle64NVX && "Function requires " ); + + uint64_t result = + getDispatcher()->vkGetImageViewHandle64NVX( static_cast( m_device ), reinterpret_cast( &info ) ); + + return result; + } + + // wrapper function for command vkGetImageViewAddressNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewAddressNVX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX ImageView::getAddressNVX() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewAddressNVX && "Function requires " ); + + VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX properties; + Result result = static_cast( getDispatcher()->vkGetImageViewAddressNVX( + static_cast( m_device ), static_cast( m_imageView ), reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::ImageView::getAddressNVX" ); + + return properties; + } + + //=== VK_AMD_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountAMD.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectCountAMD && + "Function requires or or " ); + + getDispatcher()->vkCmdDrawIndirectCountAMD( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirectCountAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountAMD.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountAMD( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkCmdDrawIndexedIndirectCountAMD && + "Function requires or or " ); + + getDispatcher()->vkCmdDrawIndexedIndirectCountAMD( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_AMD_shader_info === + + // wrapper function for command vkGetShaderInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderInfoAMD.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Pipeline::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage, + VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderInfoAMD && "Function requires " ); + + std::vector info; + size_t infoSize; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetShaderInfoAMD( static_cast( m_device ), + static_cast( m_pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + &infoSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && infoSize ) + { + info.resize( infoSize ); + result = static_cast( getDispatcher()->vkGetShaderInfoAMD( static_cast( m_device ), + static_cast( m_pipeline ), + static_cast( shaderStage ), + static_cast( infoType ), + &infoSize, + reinterpret_cast( info.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getShaderInfoAMD" ); + VULKAN_HPP_ASSERT( infoSize <= info.size() ); + if ( infoSize < info.size() ) + { + info.resize( infoSize ); + } + return info; + } + + //=== VK_KHR_dynamic_rendering === + + // wrapper function for command vkCmdBeginRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderingKHR.html + VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderingKHR && + "Function requires or " ); + + getDispatcher()->vkCmdBeginRenderingKHR( static_cast( m_commandBuffer ), reinterpret_cast( &renderingInfo ) ); + } + + // wrapper function for command vkCmdEndRenderingKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderingKHR.html + VULKAN_HPP_INLINE void CommandBuffer::endRenderingKHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderingKHR && "Function requires or " ); + + getDispatcher()->vkCmdEndRenderingKHR( static_cast( m_commandBuffer ) ); + } + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + // wrapper function for command vkCreateStreamDescriptorSurfaceGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateStreamDescriptorSurfaceGGP.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createStreamDescriptorSurfaceGGP( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( + getDispatcher()->vkCreateStreamDescriptorSurfaceGGP( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createStreamDescriptorSurfaceGGP" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV + PhysicalDevice::getExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format, + VULKAN_HPP_NAMESPACE::ImageType type, + VULKAN_HPP_NAMESPACE::ImageTiling tiling, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage, + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalImageFormatPropertiesNV && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV externalImageFormatProperties; + Result result = static_cast( getDispatcher()->vkGetPhysicalDeviceExternalImageFormatPropertiesNV( + static_cast( m_physicalDevice ), + static_cast( format ), + static_cast( type ), + static_cast( tiling ), + static_cast( usage ), + static_cast( flags ), + static_cast( externalHandleType ), + reinterpret_cast( &externalImageFormatProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getExternalImageFormatPropertiesNV" ); + + return externalImageFormatProperties; + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE DeviceMemory::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandleNV && "Function requires " ); + + HANDLE handle; + Result result = static_cast( getDispatcher()->vkGetMemoryWin32HandleNV( static_cast( m_device ), + static_cast( m_deviceMemory ), + static_cast( handleType ), + &handle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DeviceMemory::getMemoryWin32HandleNV" ); + + return handle; + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_get_physical_device_properties2 === + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 PhysicalDevice::getFeatures2KHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 features; + getDispatcher()->vkGetPhysicalDeviceFeatures2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &features ) ); + + return features; + } + + // wrapper function for command vkGetPhysicalDeviceFeatures2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFeatures2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getFeatures2KHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFeatures2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 & features = structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceFeatures2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &features ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 PhysicalDevice::getProperties2KHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties; + getDispatcher()->vkGetPhysicalDeviceProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &properties ) ); + + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getProperties2KHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceProperties2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 & properties = structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &properties ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2 + PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties; + getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return formatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties = structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR( + static_cast( m_physicalDevice ), static_cast( format ), reinterpret_cast( &formatProperties ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties2 + PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties; + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); + + return imageFormatProperties; + } + + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + PhysicalDevice::getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties = structureChain.template get(); + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &imageFormatInfo ), + reinterpret_cast( &imageFormatProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getImageFormatProperties2KHR" ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2KHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR && + "Function requires or " ); + + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), + &queueFamilyPropertyCount, + reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + queueFamilyProperties.resize( queueFamilyPropertyCount ); + } + return queueFamilyProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getQueueFamilyProperties2KHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR && + "Function requires or " ); + + std::vector structureChains; + std::vector queueFamilyProperties; + uint32_t queueFamilyPropertyCount; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), &queueFamilyPropertyCount, nullptr ); + structureChains.resize( queueFamilyPropertyCount ); + queueFamilyProperties.resize( queueFamilyPropertyCount ); + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + queueFamilyProperties[i].pNext = structureChains[i].template get().pNext; + } + getDispatcher()->vkGetPhysicalDeviceQueueFamilyProperties2KHR( static_cast( m_physicalDevice ), + &queueFamilyPropertyCount, + reinterpret_cast( queueFamilyProperties.data() ) ); + + VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() ); + if ( queueFamilyPropertyCount < queueFamilyProperties.size() ) + { + structureChains.resize( queueFamilyPropertyCount ); + } + for ( uint32_t i = 0; i < queueFamilyPropertyCount; i++ ) + { + structureChains[i].template get() = queueFamilyProperties[i]; + } + return structureChains; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 + PhysicalDevice::getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties; + getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &memoryProperties ) ); + + return memoryProperties; + } + + // wrapper function for command vkGetPhysicalDeviceMemoryProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMemoryProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 & memoryProperties = + structureChain.template get(); + getDispatcher()->vkGetPhysicalDeviceMemoryProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &memoryProperties ) ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceSparseImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSparseImageFormatProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR && + "Function requires or " ); + + std::vector properties; + uint32_t propertyCount; + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &formatInfo ), + &propertyCount, + nullptr ); + properties.resize( propertyCount ); + getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &formatInfo ), + &propertyCount, + reinterpret_cast( properties.data() ) ); + + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + //=== VK_KHR_device_group === + + // wrapper function for command vkGetDeviceGroupPeerMemoryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupPeerMemoryFeaturesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags + Device::getGroupPeerMemoryFeaturesKHR( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupPeerMemoryFeaturesKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags peerMemoryFeatures; + getDispatcher()->vkGetDeviceGroupPeerMemoryFeaturesKHR( static_cast( m_device ), + heapIndex, + localDeviceIndex, + remoteDeviceIndex, + reinterpret_cast( &peerMemoryFeatures ) ); + + return peerMemoryFeatures; + } + + // wrapper function for command vkCmdSetDeviceMaskKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDeviceMaskKHR.html + VULKAN_HPP_INLINE void CommandBuffer::setDeviceMaskKHR( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDeviceMaskKHR && "Function requires or " ); + + getDispatcher()->vkCmdSetDeviceMaskKHR( static_cast( m_commandBuffer ), deviceMask ); + } + + // wrapper function for command vkCmdDispatchBaseKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchBaseKHR.html + VULKAN_HPP_INLINE void CommandBuffer::dispatchBaseKHR( uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchBaseKHR && "Function requires or " ); + + getDispatcher()->vkCmdDispatchBaseKHR( + static_cast( m_commandBuffer ), baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); + } + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + // wrapper function for command vkCreateViSurfaceNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateViSurfaceNN.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createViSurfaceNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateViSurfaceNN( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createViSurfaceNN" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_KHR_maintenance1 === + + // wrapper function for command vkTrimCommandPoolKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTrimCommandPoolKHR.html + VULKAN_HPP_INLINE void CommandPool::trimKHR( VULKAN_HPP_NAMESPACE::CommandPoolTrimFlags flags ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkTrimCommandPoolKHR && "Function requires or " ); + + getDispatcher()->vkTrimCommandPoolKHR( + static_cast( m_device ), static_cast( m_commandPool ), static_cast( flags ) ); + } + + //=== VK_KHR_device_group_creation === + + // wrapper function for command vkEnumeratePhysicalDeviceGroupsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceGroupsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Instance::enumeratePhysicalDeviceGroupsKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumeratePhysicalDeviceGroupsKHR && + "Function requires or " ); + + std::vector physicalDeviceGroupProperties; + uint32_t physicalDeviceGroupCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkEnumeratePhysicalDeviceGroupsKHR( static_cast( m_instance ), &physicalDeviceGroupCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && physicalDeviceGroupCount ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + result = static_cast( getDispatcher()->vkEnumeratePhysicalDeviceGroupsKHR( + static_cast( m_instance ), + &physicalDeviceGroupCount, + reinterpret_cast( physicalDeviceGroupProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" ); + VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() ); + if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) + { + physicalDeviceGroupProperties.resize( physicalDeviceGroupCount ); + } + return physicalDeviceGroupProperties; + } + + //=== VK_KHR_external_memory_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalBufferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalBufferPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties PhysicalDevice::getExternalBufferPropertiesKHR( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalBufferPropertiesKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties; + getDispatcher()->vkGetPhysicalDeviceExternalBufferPropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &externalBufferInfo ), + reinterpret_cast( &externalBufferProperties ) ); + + return externalBufferProperties; + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + + // wrapper function for command vkGetMemoryWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandleKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE + Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandleKHR && "Function requires " ); + + HANDLE handle; + Result result = static_cast( getDispatcher()->vkGetMemoryWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( &getWin32HandleInfo ), &handle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandleKHR" ); + + return handle; + } + + // wrapper function for command vkGetMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryWin32HandlePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR + Device::getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HANDLE handle ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandlePropertiesKHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR memoryWin32HandleProperties; + Result result = static_cast( + getDispatcher()->vkGetMemoryWin32HandlePropertiesKHR( static_cast( m_device ), + static_cast( handleType ), + handle, + reinterpret_cast( &memoryWin32HandleProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryWin32HandlePropertiesKHR" ); + + return memoryWin32HandleProperties; + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + + // wrapper function for command vkGetMemoryFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryFdKHR && "Function requires " ); + + int fd; + Result result = static_cast( + getDispatcher()->vkGetMemoryFdKHR( static_cast( m_device ), reinterpret_cast( &getFdInfo ), &fd ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdKHR" ); + + return fd; + } + + // wrapper function for command vkGetMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryFdPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR + Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryFdPropertiesKHR && "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR memoryFdProperties; + Result result = static_cast( getDispatcher()->vkGetMemoryFdPropertiesKHR( static_cast( m_device ), + static_cast( handleType ), + fd, + reinterpret_cast( &memoryFdProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryFdPropertiesKHR" ); + + return memoryFdProperties; + } + + //=== VK_KHR_external_semaphore_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalSemaphorePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties PhysicalDevice::getExternalSemaphorePropertiesKHR( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties; + getDispatcher()->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( + static_cast( m_physicalDevice ), + reinterpret_cast( &externalSemaphoreInfo ), + reinterpret_cast( &externalSemaphoreProperties ) ); + + return externalSemaphoreProperties; + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + + // wrapper function for command vkImportSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreWin32HandleKHR.html + VULKAN_HPP_INLINE void + Device::importSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreWin32HandleKHR && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkImportSemaphoreWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( &importSemaphoreWin32HandleInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreWin32HandleKHR" ); + } + + // wrapper function for command vkGetSemaphoreWin32HandleKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreWin32HandleKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE + Device::getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreWin32HandleKHR && + "Function requires " ); + + HANDLE handle; + Result result = static_cast( getDispatcher()->vkGetSemaphoreWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( &getWin32HandleInfo ), &handle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreWin32HandleKHR" ); + + return handle; + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + + // wrapper function for command vkImportSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreFdKHR.html + VULKAN_HPP_INLINE void Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreFdKHR && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkImportSemaphoreFdKHR( + static_cast( m_device ), reinterpret_cast( &importSemaphoreFdInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreFdKHR" ); + } + + // wrapper function for command vkGetSemaphoreFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreFdKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreFdKHR && "Function requires " ); + + int fd; + Result result = static_cast( + getDispatcher()->vkGetSemaphoreFdKHR( static_cast( m_device ), reinterpret_cast( &getFdInfo ), &fd ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreFdKHR" ); + + return fd; + } + + //=== VK_KHR_push_descriptor === + + // wrapper function for command vkCmdPushDescriptorSetKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::pushDescriptorSetKHR( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + ArrayProxy const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSetKHR && + "Function requires or " ); + + getDispatcher()->vkCmdPushDescriptorSetKHR( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + set, + descriptorWrites.size(), + reinterpret_cast( descriptorWrites.data() ) ); + } + + // wrapper function for command vkCmdPushDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html + template + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set, + DataType const & data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkCmdPushDescriptorSetWithTemplateKHR && + "Function requires or or " ); + + getDispatcher()->vkCmdPushDescriptorSetWithTemplateKHR( static_cast( m_commandBuffer ), + static_cast( descriptorUpdateTemplate ), + static_cast( layout ), + set, + reinterpret_cast( &data ) ); + } + + //=== VK_EXT_conditional_rendering === + + // wrapper function for command vkCmdBeginConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginConditionalRenderingEXT.html + VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT( + const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginConditionalRenderingEXT && + "Function requires " ); + + getDispatcher()->vkCmdBeginConditionalRenderingEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &conditionalRenderingBegin ) ); + } + + // wrapper function for command vkCmdEndConditionalRenderingEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndConditionalRenderingEXT.html + VULKAN_HPP_INLINE void CommandBuffer::endConditionalRenderingEXT() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndConditionalRenderingEXT && + "Function requires " ); + + getDispatcher()->vkCmdEndConditionalRenderingEXT( static_cast( m_commandBuffer ) ); + } + + //=== VK_KHR_descriptor_update_template === + + // wrapper function for command vkCreateDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDescriptorUpdateTemplateKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate; + Result result = static_cast( + getDispatcher()->vkCreateDescriptorUpdateTemplateKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &descriptorUpdateTemplate ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDescriptorUpdateTemplateKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate( + *this, *reinterpret_cast( &descriptorUpdateTemplate ), allocator ); + } + + // wrapper function for command vkDestroyDescriptorUpdateTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyDescriptorUpdateTemplateKHR.html + VULKAN_HPP_INLINE void + Device::destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + Optional allocator ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDestroyDescriptorUpdateTemplateKHR && + "Function requires or " ); + + getDispatcher()->vkDestroyDescriptorUpdateTemplateKHR( static_cast( m_device ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( allocator.get() ) ); + } + + // wrapper function for command vkUpdateDescriptorSetWithTemplateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateDescriptorSetWithTemplateKHR.html + template + VULKAN_HPP_INLINE void DescriptorSet::updateWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate, + DataType const & data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateDescriptorSetWithTemplateKHR && + "Function requires or " ); + + getDispatcher()->vkUpdateDescriptorSetWithTemplateKHR( static_cast( m_device ), + static_cast( m_descriptorSet ), + static_cast( descriptorUpdateTemplate ), + reinterpret_cast( &data ) ); + } + + //=== VK_NV_clip_space_w_scaling === + + // wrapper function for command vkCmdSetViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setViewportWScalingNV( uint32_t firstViewport, + ArrayProxy const & viewportWScalings ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportWScalingNV && "Function requires " ); + + getDispatcher()->vkCmdSetViewportWScalingNV( static_cast( m_commandBuffer ), + firstViewport, + viewportWScalings.size(), + reinterpret_cast( viewportWScalings.data() ) ); + } + +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + + // wrapper function for command vkAcquireXlibDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireXlibDisplayEXT.html + VULKAN_HPP_INLINE void PhysicalDevice::acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireXlibDisplayEXT && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkAcquireXlibDisplayEXT( static_cast( m_physicalDevice ), &dpy, static_cast( display ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireXlibDisplayEXT" ); + } + + // wrapper function for command vkGetRandROutputDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRandROutputDisplayEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + PhysicalDevice::getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DisplayKHR display; + Result result = static_cast( getDispatcher()->vkGetRandROutputDisplayEXT( + static_cast( m_physicalDevice ), &dpy, rrOutput, reinterpret_cast( &display ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "PhysicalDevice::getRandROutputDisplayEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, *reinterpret_cast( &display ) ); + } +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_display_surface_counter === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT + PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2EXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT surfaceCapabilities; + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2EXT( static_cast( m_physicalDevice ), + static_cast( surface ), + reinterpret_cast( &surfaceCapabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2EXT" ); + + return surfaceCapabilities; + } + + //=== VK_EXT_display_control === + + // wrapper function for command vkDisplayPowerControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDisplayPowerControlEXT.html + VULKAN_HPP_INLINE void Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display, + const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDisplayPowerControlEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkDisplayPowerControlEXT( + static_cast( m_device ), static_cast( display ), reinterpret_cast( &displayPowerInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::displayPowerControlEXT" ); + } + + // wrapper function for command vkRegisterDeviceEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDeviceEventEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::registerEventEXT( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Fence fence; + Result result = static_cast( getDispatcher()->vkRegisterDeviceEventEXT( static_cast( m_device ), + reinterpret_cast( &deviceEventInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::registerEventEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Fence( *this, *reinterpret_cast( &fence ), allocator ); + } + + // wrapper function for command vkRegisterDisplayEventEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkRegisterDisplayEventEXT.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display, + VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Fence fence; + Result result = static_cast( getDispatcher()->vkRegisterDisplayEventEXT( static_cast( m_device ), + static_cast( *display ), + reinterpret_cast( &displayEventInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &fence ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::registerDisplayEventEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Fence( *this, *reinterpret_cast( &fence ), allocator ); + } + + // wrapper function for command vkGetSwapchainCounterEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainCounterEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t SwapchainKHR::getCounterEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainCounterEXT && "Function requires " ); + + uint64_t counterValue; + Result result = static_cast( getDispatcher()->vkGetSwapchainCounterEXT( static_cast( m_device ), + static_cast( m_swapchainKHR ), + static_cast( counter ), + &counterValue ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getCounterEXT" ); + + return counterValue; + } + + //=== VK_GOOGLE_display_timing === + + // wrapper function for command vkGetRefreshCycleDurationGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRefreshCycleDurationGOOGLE.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE SwapchainKHR::getRefreshCycleDurationGOOGLE() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRefreshCycleDurationGOOGLE && "Function requires " ); + + VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE displayTimingProperties; + Result result = + static_cast( getDispatcher()->vkGetRefreshCycleDurationGOOGLE( static_cast( m_device ), + static_cast( m_swapchainKHR ), + reinterpret_cast( &displayTimingProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getRefreshCycleDurationGOOGLE" ); + + return displayTimingProperties; + } + + // wrapper function for command vkGetPastPresentationTimingGOOGLE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPastPresentationTimingGOOGLE.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector SwapchainKHR::getPastPresentationTimingGOOGLE() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPastPresentationTimingGOOGLE && + "Function requires " ); + + std::vector presentationTimings; + uint32_t presentationTimingCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPastPresentationTimingGOOGLE( + static_cast( m_device ), static_cast( m_swapchainKHR ), &presentationTimingCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && presentationTimingCount ) + { + presentationTimings.resize( presentationTimingCount ); + result = static_cast( + getDispatcher()->vkGetPastPresentationTimingGOOGLE( static_cast( m_device ), + static_cast( m_swapchainKHR ), + &presentationTimingCount, + reinterpret_cast( presentationTimings.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getPastPresentationTimingGOOGLE" ); + VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() ); + if ( presentationTimingCount < presentationTimings.size() ) + { + presentationTimings.resize( presentationTimingCount ); + } + return presentationTimings; + } + + //=== VK_EXT_discard_rectangles === + + // wrapper function for command vkCmdSetDiscardRectangleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setDiscardRectangleEXT( uint32_t firstDiscardRectangle, + ArrayProxy const & discardRectangles ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDiscardRectangleEXT && "Function requires " ); + + getDispatcher()->vkCmdSetDiscardRectangleEXT( static_cast( m_commandBuffer ), + firstDiscardRectangle, + discardRectangles.size(), + reinterpret_cast( discardRectangles.data() ) ); + } + + // wrapper function for command vkCmdSetDiscardRectangleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDiscardRectangleEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 discardRectangleEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDiscardRectangleEnableEXT && + "Function requires " ); + + getDispatcher()->vkCmdSetDiscardRectangleEnableEXT( static_cast( m_commandBuffer ), static_cast( discardRectangleEnable ) ); + } + + // wrapper function for command vkCmdSetDiscardRectangleModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDiscardRectangleModeEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setDiscardRectangleModeEXT( VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDiscardRectangleModeEXT && + "Function requires " ); + + getDispatcher()->vkCmdSetDiscardRectangleModeEXT( static_cast( m_commandBuffer ), + static_cast( discardRectangleMode ) ); + } + + //=== VK_EXT_hdr_metadata === + + // wrapper function for command vkSetHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetHdrMetadataEXT.html + VULKAN_HPP_INLINE void Device::setHdrMetadataEXT( ArrayProxy const & swapchains, + ArrayProxy const & metadata ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetHdrMetadataEXT && "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( swapchains.size() == metadata.size() ); +# else + if ( swapchains.size() != metadata.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::setHdrMetadataEXT: swapchains.size() != metadata.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkSetHdrMetadataEXT( static_cast( m_device ), + swapchains.size(), + reinterpret_cast( swapchains.data() ), + reinterpret_cast( metadata.data() ) ); + } + + //=== VK_KHR_create_renderpass2 === + + // wrapper function for command vkCreateRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRenderPass2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createRenderPass2KHR( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::RenderPass renderPass; + Result result = static_cast( getDispatcher()->vkCreateRenderPass2KHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &renderPass ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRenderPass2KHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, *reinterpret_cast( &renderPass ), allocator ); + } + + // wrapper function for command vkCmdBeginRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginRenderPass2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin, + const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderPass2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdBeginRenderPass2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &renderPassBegin ), + reinterpret_cast( &subpassBeginInfo ) ); + } + + // wrapper function for command vkCmdNextSubpass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdNextSubpass2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo, + const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdNextSubpass2KHR && "Function requires or " ); + + getDispatcher()->vkCmdNextSubpass2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &subpassBeginInfo ), + reinterpret_cast( &subpassEndInfo ) ); + } + + // wrapper function for command vkCmdEndRenderPass2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRenderPass2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderPass2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdEndRenderPass2KHR( static_cast( m_commandBuffer ), reinterpret_cast( &subpassEndInfo ) ); + } + + //=== VK_KHR_shared_presentable_image === + + // wrapper function for command vkGetSwapchainStatusKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSwapchainStatusKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result SwapchainKHR::getStatus() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainStatusKHR && "Function requires " ); + + Result result = + static_cast( getDispatcher()->vkGetSwapchainStatusKHR( static_cast( m_device ), static_cast( m_swapchainKHR ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getStatus", { Result::eSuccess, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } + + //=== VK_KHR_external_fence_capabilities === + + // wrapper function for command vkGetPhysicalDeviceExternalFencePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalFencePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties + PhysicalDevice::getExternalFencePropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalFencePropertiesKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties; + getDispatcher()->vkGetPhysicalDeviceExternalFencePropertiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( &externalFenceInfo ), + reinterpret_cast( &externalFenceProperties ) ); + + return externalFenceProperties; + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + + // wrapper function for command vkImportFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceWin32HandleKHR.html + VULKAN_HPP_INLINE void Device::importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkImportFenceWin32HandleKHR && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkImportFenceWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( &importFenceWin32HandleInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceWin32HandleKHR" ); + } + + // wrapper function for command vkGetFenceWin32HandleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceWin32HandleKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE + Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceWin32HandleKHR && "Function requires " ); + + HANDLE handle; + Result result = static_cast( getDispatcher()->vkGetFenceWin32HandleKHR( + static_cast( m_device ), reinterpret_cast( &getWin32HandleInfo ), &handle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceWin32HandleKHR" ); + + return handle; + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_fence_fd === + + // wrapper function for command vkImportFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportFenceFdKHR.html + VULKAN_HPP_INLINE void Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkImportFenceFdKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkImportFenceFdKHR( static_cast( m_device ), reinterpret_cast( &importFenceFdInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importFenceFdKHR" ); + } + + // wrapper function for command vkGetFenceFdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceFdKHR && "Function requires " ); + + int fd; + Result result = static_cast( + getDispatcher()->vkGetFenceFdKHR( static_cast( m_device ), reinterpret_cast( &getFdInfo ), &fd ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getFenceFdKHR" ); + + return fd; + } + + //=== VK_KHR_performance_query === + + // wrapper function for command vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR.html + VULKAN_HPP_NODISCARD + VULKAN_HPP_INLINE std::pair, std::vector> + PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR && + "Function requires " ); + + std::pair, std::vector> data_; + std::vector & counters = data_.first; + std::vector & counterDescriptions = data_.second; + uint32_t counterCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + static_cast( m_physicalDevice ), queueFamilyIndex, &counterCount, nullptr, nullptr ) ); + if ( ( result == Result::eSuccess ) && counterCount ) + { + counters.resize( counterCount ); + counterDescriptions.resize( counterCount ); + result = static_cast( getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + static_cast( m_physicalDevice ), + queueFamilyIndex, + &counterCount, + reinterpret_cast( counters.data() ), + reinterpret_cast( counterDescriptions.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" ); + VULKAN_HPP_ASSERT( counterCount <= counters.size() ); + if ( counterCount < counters.size() ) + { + counters.resize( counterCount ); + counterDescriptions.resize( counterCount ); + } + return data_; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR( + const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR && + "Function requires " ); + + uint32_t numPasses; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + static_cast( m_physicalDevice ), + reinterpret_cast( &performanceQueryCreateInfo ), + &numPasses ); + + return numPasses; + } + + // wrapper function for command vkAcquireProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireProfilingLockKHR.html + VULKAN_HPP_INLINE void Device::acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireProfilingLockKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkAcquireProfilingLockKHR( static_cast( m_device ), reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::acquireProfilingLockKHR" ); + } + + // wrapper function for command vkReleaseProfilingLockKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseProfilingLockKHR.html + VULKAN_HPP_INLINE void Device::releaseProfilingLockKHR() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseProfilingLockKHR && "Function requires " ); + + getDispatcher()->vkReleaseProfilingLockKHR( static_cast( m_device ) ); + } + + //=== VK_KHR_get_surface_capabilities2 === + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR + PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR surfaceCapabilities; + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + reinterpret_cast( &surfaceCapabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); + + return surfaceCapabilities; + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR & surfaceCapabilities = structureChain.template get(); + Result result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + reinterpret_cast( &surfaceCapabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceCapabilities2KHR" ); + + return structureChain; + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR && + "Function requires " ); + + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + surfaceFormats.resize( surfaceFormatCount ); + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + surfaceFormats.resize( surfaceFormatCount ); + } + return surfaceFormats; + } + + // wrapper function for command vkGetPhysicalDeviceSurfaceFormats2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceFormats2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR && + "Function requires " ); + + std::vector structureChains; + std::vector surfaceFormats; + uint32_t surfaceFormatCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && surfaceFormatCount ) + { + structureChains.resize( surfaceFormatCount ); + surfaceFormats.resize( surfaceFormatCount ); + for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) + { + surfaceFormats[i].pNext = structureChains[i].template get().pNext; + } + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + &surfaceFormatCount, + reinterpret_cast( surfaceFormats.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" ); + VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() ); + if ( surfaceFormatCount < surfaceFormats.size() ) + { + structureChains.resize( surfaceFormatCount ); + } + for ( uint32_t i = 0; i < surfaceFormatCount; i++ ) + { + structureChains[i].template get() = surfaceFormats[i]; + } + return structureChains; + } + + //=== VK_KHR_get_display_properties2 === + + // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayProperties2KHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetPhysicalDeviceDisplayPlaneProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayPlaneProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getDisplayPlaneProperties2KHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector DisplayKHR::getModeProperties2() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayModeProperties2KHR && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetDisplayModeProperties2KHR( + static_cast( m_physicalDevice ), static_cast( m_displayKHR ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = + static_cast( getDispatcher()->vkGetDisplayModeProperties2KHR( static_cast( m_physicalDevice ), + static_cast( m_displayKHR ), + &propertyCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties2" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkGetDisplayModeProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayModeProperties2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector DisplayKHR::getModeProperties2() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayModeProperties2KHR && + "Function requires " ); + + std::vector structureChains; + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetDisplayModeProperties2KHR( + static_cast( m_physicalDevice ), static_cast( m_displayKHR ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + structureChains.resize( propertyCount ); + properties.resize( propertyCount ); + for ( uint32_t i = 0; i < propertyCount; i++ ) + { + properties[i].pNext = structureChains[i].template get().pNext; + } + result = + static_cast( getDispatcher()->vkGetDisplayModeProperties2KHR( static_cast( m_physicalDevice ), + static_cast( m_displayKHR ), + &propertyCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties2" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + structureChains.resize( propertyCount ); + } + for ( uint32_t i = 0; i < propertyCount; i++ ) + { + structureChains[i].template get() = properties[i]; + } + return structureChains; + } + + // wrapper function for command vkGetDisplayPlaneCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDisplayPlaneCapabilities2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR + PhysicalDevice::getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDisplayPlaneCapabilities2KHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR capabilities; + Result result = + static_cast( getDispatcher()->vkGetDisplayPlaneCapabilities2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( &displayPlaneInfo ), + reinterpret_cast( &capabilities ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneCapabilities2KHR" ); + + return capabilities; + } + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + // wrapper function for command vkCreateIOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIOSSurfaceMVK.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createIOSSurfaceMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateIOSSurfaceMVK( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createIOSSurfaceMVK" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + // wrapper function for command vkCreateMacOSSurfaceMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMacOSSurfaceMVK.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createMacOSSurfaceMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateMacOSSurfaceMVK( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createMacOSSurfaceMVK" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + // wrapper function for command vkSetDebugUtilsObjectNameEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectNameEXT.html + VULKAN_HPP_INLINE void Device::setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetDebugUtilsObjectNameEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkSetDebugUtilsObjectNameEXT( + static_cast( m_device ), reinterpret_cast( &nameInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectNameEXT" ); + } + + // wrapper function for command vkSetDebugUtilsObjectTagEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDebugUtilsObjectTagEXT.html + VULKAN_HPP_INLINE void Device::setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetDebugUtilsObjectTagEXT && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkSetDebugUtilsObjectTagEXT( static_cast( m_device ), reinterpret_cast( &tagInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setDebugUtilsObjectTagEXT" ); + } + + // wrapper function for command vkQueueBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueBeginDebugUtilsLabelEXT.html + VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueBeginDebugUtilsLabelEXT && "Function requires " ); + + getDispatcher()->vkQueueBeginDebugUtilsLabelEXT( static_cast( m_queue ), reinterpret_cast( &labelInfo ) ); + } + + // wrapper function for command vkQueueEndDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueEndDebugUtilsLabelEXT.html + VULKAN_HPP_INLINE void Queue::endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueEndDebugUtilsLabelEXT && "Function requires " ); + + getDispatcher()->vkQueueEndDebugUtilsLabelEXT( static_cast( m_queue ) ); + } + + // wrapper function for command vkQueueInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueInsertDebugUtilsLabelEXT.html + VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueInsertDebugUtilsLabelEXT && "Function requires " ); + + getDispatcher()->vkQueueInsertDebugUtilsLabelEXT( static_cast( m_queue ), reinterpret_cast( &labelInfo ) ); + } + + // wrapper function for command vkCmdBeginDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginDebugUtilsLabelEXT.html + VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginDebugUtilsLabelEXT && "Function requires " ); + + getDispatcher()->vkCmdBeginDebugUtilsLabelEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &labelInfo ) ); + } + + // wrapper function for command vkCmdEndDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndDebugUtilsLabelEXT.html + VULKAN_HPP_INLINE void CommandBuffer::endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndDebugUtilsLabelEXT && "Function requires " ); + + getDispatcher()->vkCmdEndDebugUtilsLabelEXT( static_cast( m_commandBuffer ) ); + } + + // wrapper function for command vkCmdInsertDebugUtilsLabelEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInsertDebugUtilsLabelEXT.html + VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdInsertDebugUtilsLabelEXT && "Function requires " ); + + getDispatcher()->vkCmdInsertDebugUtilsLabelEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &labelInfo ) ); + } + + // wrapper function for command vkCreateDebugUtilsMessengerEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDebugUtilsMessengerEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger; + Result result = + static_cast( getDispatcher()->vkCreateDebugUtilsMessengerEXT( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &messenger ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createDebugUtilsMessengerEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT( + *this, *reinterpret_cast( &messenger ), allocator ); + } + + // wrapper function for command vkSubmitDebugUtilsMessageEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSubmitDebugUtilsMessageEXT.html + VULKAN_HPP_INLINE void + Instance::submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, + const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSubmitDebugUtilsMessageEXT && "Function requires " ); + + getDispatcher()->vkSubmitDebugUtilsMessageEXT( static_cast( m_instance ), + static_cast( messageSeverity ), + static_cast( messageTypes ), + reinterpret_cast( &callbackData ) ); + } + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID + Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID properties; + Result result = static_cast( getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID( + static_cast( m_device ), &buffer, reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); + + return properties; + } + + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID & properties = + structureChain.template get(); + Result result = static_cast( getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID( + static_cast( m_device ), &buffer, reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAndroidHardwareBufferPropertiesANDROID" ); + + return structureChain; + } + + // wrapper function for command vkGetMemoryAndroidHardwareBufferANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryAndroidHardwareBufferANDROID.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE struct AHardwareBuffer * + Device::getMemoryAndroidHardwareBufferANDROID( const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryAndroidHardwareBufferANDROID && + "Function requires " ); + + struct AHardwareBuffer * buffer; + Result result = static_cast( getDispatcher()->vkGetMemoryAndroidHardwareBufferANDROID( + static_cast( m_device ), reinterpret_cast( &info ), &buffer ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryAndroidHardwareBufferANDROID" ); + + return buffer; + } +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_AMDX_shader_enqueue === + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createExecutionGraphPipelinesAMDX( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelines( createInfos.size() ); + Result result = static_cast( + getDispatcher()->vkCreateExecutionGraphPipelinesAMDX( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createExecutionGraphPipelinesAMDX" ); +# endif + } + + std::vector pipelinesRAII; + pipelinesRAII.reserve( pipelines.size() ); + for ( auto & pipeline : pipelines ) + { + pipelinesRAII.emplace_back( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + return pipelinesRAII; + } + + // wrapper function for command vkCreateExecutionGraphPipelinesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExecutionGraphPipelinesAMDX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createExecutionGraphPipelineAMDX( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineCreateInfoAMDX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Pipeline pipeline; + Result result = static_cast( + getDispatcher()->vkCreateExecutionGraphPipelinesAMDX( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createExecutionGraphPipelineAMDX" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + + // wrapper function for command vkGetExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineScratchSizeAMDX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineScratchSizeAMDX Pipeline::getExecutionGraphScratchSizeAMDX() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetExecutionGraphPipelineScratchSizeAMDX && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineScratchSizeAMDX sizeInfo; + Result result = static_cast( getDispatcher()->vkGetExecutionGraphPipelineScratchSizeAMDX( + static_cast( m_device ), static_cast( m_pipeline ), reinterpret_cast( &sizeInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getExecutionGraphScratchSizeAMDX" ); + + return sizeInfo; + } + + // wrapper function for command vkGetExecutionGraphPipelineNodeIndexAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExecutionGraphPipelineNodeIndexAMDX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t + Pipeline::getExecutionGraphNodeIndexAMDX( const VULKAN_HPP_NAMESPACE::PipelineShaderStageNodeCreateInfoAMDX & nodeInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetExecutionGraphPipelineNodeIndexAMDX && + "Function requires " ); + + uint32_t nodeIndex; + Result result = static_cast( + getDispatcher()->vkGetExecutionGraphPipelineNodeIndexAMDX( static_cast( m_device ), + static_cast( m_pipeline ), + reinterpret_cast( &nodeInfo ), + &nodeIndex ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getExecutionGraphNodeIndexAMDX" ); + + return nodeIndex; + } + + // wrapper function for command vkCmdInitializeGraphScratchMemoryAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdInitializeGraphScratchMemoryAMDX.html + VULKAN_HPP_INLINE void CommandBuffer::initializeGraphScratchMemoryAMDX( VULKAN_HPP_NAMESPACE::Pipeline executionGraph, + VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdInitializeGraphScratchMemoryAMDX && + "Function requires " ); + + getDispatcher()->vkCmdInitializeGraphScratchMemoryAMDX( static_cast( m_commandBuffer ), + static_cast( executionGraph ), + static_cast( scratch ), + static_cast( scratchSize ) ); + } + + // wrapper function for command vkCmdDispatchGraphAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphAMDX.html + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize, + const VULKAN_HPP_NAMESPACE::DispatchGraphCountInfoAMDX & countInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchGraphAMDX && "Function requires " ); + + getDispatcher()->vkCmdDispatchGraphAMDX( static_cast( m_commandBuffer ), + static_cast( scratch ), + static_cast( scratchSize ), + reinterpret_cast( &countInfo ) ); + } + + // wrapper function for command vkCmdDispatchGraphIndirectAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectAMDX.html + VULKAN_HPP_INLINE void + CommandBuffer::dispatchGraphIndirectAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize, + const VULKAN_HPP_NAMESPACE::DispatchGraphCountInfoAMDX & countInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchGraphIndirectAMDX && "Function requires " ); + + getDispatcher()->vkCmdDispatchGraphIndirectAMDX( static_cast( m_commandBuffer ), + static_cast( scratch ), + static_cast( scratchSize ), + reinterpret_cast( &countInfo ) ); + } + + // wrapper function for command vkCmdDispatchGraphIndirectCountAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchGraphIndirectCountAMDX.html + VULKAN_HPP_INLINE void CommandBuffer::dispatchGraphIndirectCountAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchSize, + VULKAN_HPP_NAMESPACE::DeviceAddress countInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchGraphIndirectCountAMDX && + "Function requires " ); + + getDispatcher()->vkCmdDispatchGraphIndirectCountAMDX( static_cast( m_commandBuffer ), + static_cast( scratch ), + static_cast( scratchSize ), + static_cast( countInfo ) ); + } +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_EXT_sample_locations === + + // wrapper function for command vkCmdSetSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetSampleLocationsEXT && "Function requires " ); + + getDispatcher()->vkCmdSetSampleLocationsEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &sampleLocationsInfo ) ); + } + + // wrapper function for command vkGetPhysicalDeviceMultisamplePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceMultisamplePropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT + PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceMultisamplePropertiesEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT multisampleProperties; + getDispatcher()->vkGetPhysicalDeviceMultisamplePropertiesEXT( static_cast( m_physicalDevice ), + static_cast( samples ), + reinterpret_cast( &multisampleProperties ) ); + + return multisampleProperties; + } + + //=== VK_KHR_get_memory_requirements2 === + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetImageMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetImageMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageMemoryRequirements2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetImageMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements2KHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetBufferMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetBufferMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferMemoryRequirements2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferMemoryRequirements2KHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetBufferMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetImageSparseMemoryRequirements2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSparseMemoryRequirements2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageSparseMemoryRequirements2KHR && + "Function requires or " ); + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + getDispatcher()->vkGetImageSparseMemoryRequirements2KHR( + static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + getDispatcher()->vkGetImageSparseMemoryRequirements2KHR( static_cast( m_device ), + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + //=== VK_KHR_acceleration_structure === + + // wrapper function for command vkCreateAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure; + Result result = + static_cast( getDispatcher()->vkCreateAccelerationStructureKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &accelerationStructure ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createAccelerationStructureKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR( + *this, *reinterpret_cast( &accelerationStructure ), allocator ); + } + + // wrapper function for command vkCmdBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresKHR.html + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresKHR( + ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructuresKHR && + "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( infos.size() == pBuildRangeInfos.size() ); +# else + if ( infos.size() != pBuildRangeInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBuildAccelerationStructuresKHR( + static_cast( m_commandBuffer ), + infos.size(), + reinterpret_cast( infos.data() ), + reinterpret_cast( pBuildRangeInfos.data() ) ); + } + + // wrapper function for command vkCmdBuildAccelerationStructuresIndirectKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructuresIndirectKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::buildAccelerationStructuresIndirectKHR( ArrayProxy const & infos, + ArrayProxy const & indirectDeviceAddresses, + ArrayProxy const & indirectStrides, + ArrayProxy const & pMaxPrimitiveCounts ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructuresIndirectKHR && + "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( infos.size() == indirectDeviceAddresses.size() ); + VULKAN_HPP_ASSERT( infos.size() == indirectStrides.size() ); + VULKAN_HPP_ASSERT( infos.size() == pMaxPrimitiveCounts.size() ); +# else + if ( infos.size() != indirectDeviceAddresses.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectDeviceAddresses.size()" ); + } + if ( infos.size() != indirectStrides.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != indirectStrides.size()" ); + } + if ( infos.size() != pMaxPrimitiveCounts.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::buildAccelerationStructuresIndirectKHR: infos.size() != pMaxPrimitiveCounts.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBuildAccelerationStructuresIndirectKHR( static_cast( m_commandBuffer ), + infos.size(), + reinterpret_cast( infos.data() ), + reinterpret_cast( indirectDeviceAddresses.data() ), + indirectStrides.data(), + pMaxPrimitiveCounts.data() ); + } + + // wrapper function for command vkBuildAccelerationStructuresKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildAccelerationStructuresKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::buildAccelerationStructuresKHR( + VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + ArrayProxy const & infos, + ArrayProxy const & pBuildRangeInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBuildAccelerationStructuresKHR && + "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( infos.size() == pBuildRangeInfos.size() ); +# else + if ( infos.size() != pBuildRangeInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR: infos.size() != pBuildRangeInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + Result result = static_cast( getDispatcher()->vkBuildAccelerationStructuresKHR( + static_cast( m_device ), + static_cast( deferredOperation ), + infos.size(), + reinterpret_cast( infos.data() ), + reinterpret_cast( pBuildRangeInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::buildAccelerationStructuresKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureKHR( + VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyAccelerationStructureKHR && + "Function requires " ); + + Result result = + static_cast( getDispatcher()->vkCopyAccelerationStructureKHR( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyAccelerationStructureToMemoryKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureToMemoryKHR( + VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyAccelerationStructureToMemoryKHR && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkCopyAccelerationStructureToMemoryKHR( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyAccelerationStructureToMemoryKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToAccelerationStructureKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToAccelerationStructureKHR( + VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMemoryToAccelerationStructureKHR && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkCopyMemoryToAccelerationStructureKHR( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToAccelerationStructureKHR", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t dataSize, + size_t stride ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR && + "Function requires " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( + getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR( static_cast( m_device ), + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ), + stride ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertiesKHR" ); + + return data; + } + + // wrapper function for command vkWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteAccelerationStructuresPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::writeAccelerationStructuresPropertyKHR( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t stride ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR && + "Function requires " ); + + DataType data; + Result result = static_cast( + getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR( static_cast( m_device ), + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + sizeof( DataType ), + reinterpret_cast( &data ), + stride ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertyKHR" ); + + return data; + } + + // wrapper function for command vkCmdCopyAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyAccelerationStructureKHR && + "Function requires " ); + + getDispatcher()->vkCmdCopyAccelerationStructureKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &info ) ); + } + + // wrapper function for command vkCmdCopyAccelerationStructureToMemoryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureToMemoryKHR.html + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR( + const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyAccelerationStructureToMemoryKHR && + "Function requires " ); + + getDispatcher()->vkCmdCopyAccelerationStructureToMemoryKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &info ) ); + } + + // wrapper function for command vkCmdCopyMemoryToAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToAccelerationStructureKHR.html + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR( + const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMemoryToAccelerationStructureKHR && + "Function requires " ); + + getDispatcher()->vkCmdCopyMemoryToAccelerationStructureKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &info ) ); + } + + // wrapper function for command vkGetAccelerationStructureDeviceAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureDeviceAddressKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceAddress + Device::getAccelerationStructureAddressKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureDeviceAddressKHR && + "Function requires " ); + + VkDeviceAddress result = getDispatcher()->vkGetAccelerationStructureDeviceAddressKHR( + static_cast( m_device ), reinterpret_cast( &info ) ); + + return static_cast( result ); + } + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::writeAccelerationStructuresPropertiesKHR( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesKHR && + "Function requires " ); + + getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesKHR( static_cast( m_commandBuffer ), + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } + + // wrapper function for command vkGetDeviceAccelerationStructureCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceAccelerationStructureCompatibilityKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR Device::getAccelerationStructureCompatibilityKHR( + const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceAccelerationStructureCompatibilityKHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR compatibility; + getDispatcher()->vkGetDeviceAccelerationStructureCompatibilityKHR( static_cast( m_device ), + reinterpret_cast( &versionInfo ), + reinterpret_cast( &compatibility ) ); + + return compatibility; + } + + // wrapper function for command vkGetAccelerationStructureBuildSizesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureBuildSizesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR + Device::getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, + const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo, + ArrayProxy const & maxPrimitiveCounts ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureBuildSizesKHR && + "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( maxPrimitiveCounts.size() == buildInfo.geometryCount ); +# else + if ( maxPrimitiveCounts.size() != buildInfo.geometryCount ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureBuildSizesKHR: maxPrimitiveCounts.size() != buildInfo.geometryCount" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR sizeInfo; + getDispatcher()->vkGetAccelerationStructureBuildSizesKHR( static_cast( m_device ), + static_cast( buildType ), + reinterpret_cast( &buildInfo ), + maxPrimitiveCounts.data(), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } + + //=== VK_KHR_ray_tracing_pipeline === + + // wrapper function for command vkCmdTraceRaysKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysKHR.html + VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysKHR && "Function requires " ); + + getDispatcher()->vkCmdTraceRaysKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &raygenShaderBindingTable ), + reinterpret_cast( &missShaderBindingTable ), + reinterpret_cast( &hitShaderBindingTable ), + reinterpret_cast( &callableShaderBindingTable ), + width, + height, + depth ); + } + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createRayTracingPipelinesKHR( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelines( createInfos.size() ); + Result result = static_cast( + getDispatcher()->vkCreateRayTracingPipelinesKHR( static_cast( m_device ), + deferredOperation ? static_cast( **deferredOperation ) : 0, + pipelineCache ? static_cast( **pipelineCache ) : 0, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::eOperationDeferredKHR ) && ( result != Result::eOperationNotDeferredKHR ) && + ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRayTracingPipelinesKHR" ); +# endif + } + + std::vector pipelinesRAII; + pipelinesRAII.reserve( pipelines.size() ); + for ( auto & pipeline : pipelines ) + { + pipelinesRAII.emplace_back( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + return pipelinesRAII; + } + + // wrapper function for command vkCreateRayTracingPipelinesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createRayTracingPipelineKHR( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Pipeline pipeline; + Result result = static_cast( + getDispatcher()->vkCreateRayTracingPipelinesKHR( static_cast( m_device ), + deferredOperation ? static_cast( **deferredOperation ) : 0, + pipelineCache ? static_cast( **pipelineCache ) : 0, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::eOperationDeferredKHR ) && ( result != Result::eOperationNotDeferredKHR ) && + ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRayTracingPipelineKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Pipeline::getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR && + "Function requires or " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR( static_cast( m_device ), + static_cast( m_pipeline ), + firstGroup, + groupCount, + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandlesKHR" ); + + return data; + } + + // wrapper function for command vkGetRayTracingShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Pipeline::getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR && + "Function requires or " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR( static_cast( m_device ), + static_cast( m_pipeline ), + firstGroup, + groupCount, + sizeof( DataType ), + reinterpret_cast( &data ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandleKHR" ); + + return data; + } + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Pipeline::getRayTracingCaptureReplayShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR && + "Function requires " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( static_cast( m_device ), + static_cast( m_pipeline ), + firstGroup, + groupCount, + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingCaptureReplayShaderGroupHandlesKHR" ); + + return data; + } + + // wrapper function for command vkGetRayTracingCaptureReplayShaderGroupHandlesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingCaptureReplayShaderGroupHandlesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Pipeline::getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( static_cast( m_device ), + static_cast( m_pipeline ), + firstGroup, + groupCount, + sizeof( DataType ), + reinterpret_cast( &data ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingCaptureReplayShaderGroupHandleKHR" ); + + return data; + } + + // wrapper function for command vkCmdTraceRaysIndirectKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirectKHR.html + VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable, + const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable, + VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysIndirectKHR && "Function requires " ); + + getDispatcher()->vkCmdTraceRaysIndirectKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &raygenShaderBindingTable ), + reinterpret_cast( &missShaderBindingTable ), + reinterpret_cast( &hitShaderBindingTable ), + reinterpret_cast( &callableShaderBindingTable ), + static_cast( indirectDeviceAddress ) ); + } + + // wrapper function for command vkGetRayTracingShaderGroupStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupStackSizeKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceSize + Pipeline::getRayTracingShaderGroupStackSizeKHR( uint32_t group, VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupStackSizeKHR && + "Function requires " ); + + VkDeviceSize result = getDispatcher()->vkGetRayTracingShaderGroupStackSizeKHR( + static_cast( m_device ), static_cast( m_pipeline ), group, static_cast( groupShader ) ); + + return static_cast( result ); + } + + // wrapper function for command vkCmdSetRayTracingPipelineStackSizeKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRayTracingPipelineStackSizeKHR.html + VULKAN_HPP_INLINE void CommandBuffer::setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRayTracingPipelineStackSizeKHR && + "Function requires " ); + + getDispatcher()->vkCmdSetRayTracingPipelineStackSizeKHR( static_cast( m_commandBuffer ), pipelineStackSize ); + } + + //=== VK_KHR_sampler_ycbcr_conversion === + + // wrapper function for command vkCreateSamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSamplerYcbcrConversionKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createSamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion; + Result result = + static_cast( getDispatcher()->vkCreateSamplerYcbcrConversionKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &ycbcrConversion ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createSamplerYcbcrConversionKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion( + *this, *reinterpret_cast( &ycbcrConversion ), allocator ); + } + + // wrapper function for command vkDestroySamplerYcbcrConversionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroySamplerYcbcrConversionKHR.html + VULKAN_HPP_INLINE void + Device::destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion, + Optional allocator ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDestroySamplerYcbcrConversionKHR && + "Function requires or " ); + + getDispatcher()->vkDestroySamplerYcbcrConversionKHR( static_cast( m_device ), + static_cast( ycbcrConversion ), + reinterpret_cast( allocator.get() ) ); + } + + //=== VK_KHR_bind_memory2 === + + // wrapper function for command vkBindBufferMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindBufferMemory2KHR.html + VULKAN_HPP_INLINE void Device::bindBufferMemory2KHR( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindBufferMemory2KHR && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkBindBufferMemory2KHR( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindBufferMemory2KHR" ); + } + + // wrapper function for command vkBindImageMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindImageMemory2KHR.html + VULKAN_HPP_INLINE void Device::bindImageMemory2KHR( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindImageMemory2KHR && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkBindImageMemory2KHR( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindImageMemory2KHR" ); + } + + //=== VK_EXT_image_drm_format_modifier === + + // wrapper function for command vkGetImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageDrmFormatModifierPropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT Image::getDrmFormatModifierPropertiesEXT() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageDrmFormatModifierPropertiesEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT properties; + Result result = static_cast( getDispatcher()->vkGetImageDrmFormatModifierPropertiesEXT( + static_cast( m_device ), static_cast( m_image ), reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Image::getDrmFormatModifierPropertiesEXT" ); + + return properties; + } + + //=== VK_EXT_validation_cache === + + // wrapper function for command vkCreateValidationCacheEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateValidationCacheEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache; + Result result = static_cast( getDispatcher()->vkCreateValidationCacheEXT( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &validationCache ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createValidationCacheEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT( + *this, *reinterpret_cast( &validationCache ), allocator ); + } + + // wrapper function for command vkMergeValidationCachesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMergeValidationCachesEXT.html + VULKAN_HPP_INLINE void ValidationCacheEXT::merge( ArrayProxy const & srcCaches ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkMergeValidationCachesEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkMergeValidationCachesEXT( static_cast( m_device ), + static_cast( m_validationCacheEXT ), + srcCaches.size(), + reinterpret_cast( srcCaches.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::ValidationCacheEXT::merge" ); + } + + // wrapper function for command vkGetValidationCacheDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetValidationCacheDataEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector ValidationCacheEXT::getData() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetValidationCacheDataEXT && "Function requires " ); + + std::vector data; + size_t dataSize; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetValidationCacheDataEXT( + static_cast( m_device ), static_cast( m_validationCacheEXT ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( getDispatcher()->vkGetValidationCacheDataEXT( static_cast( m_device ), + static_cast( m_validationCacheEXT ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::ValidationCacheEXT::getData" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return data; + } + + //=== VK_NV_shading_rate_image === + + // wrapper function for command vkCmdBindShadingRateImageNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadingRateImageNV.html + VULKAN_HPP_INLINE void CommandBuffer::bindShadingRateImageNV( VULKAN_HPP_NAMESPACE::ImageView imageView, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindShadingRateImageNV && "Function requires " ); + + getDispatcher()->vkCmdBindShadingRateImageNV( + static_cast( m_commandBuffer ), static_cast( imageView ), static_cast( imageLayout ) ); + } + + // wrapper function for command vkCmdSetViewportShadingRatePaletteNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportShadingRatePaletteNV.html + VULKAN_HPP_INLINE void CommandBuffer::setViewportShadingRatePaletteNV( + uint32_t firstViewport, ArrayProxy const & shadingRatePalettes ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportShadingRatePaletteNV && + "Function requires " ); + + getDispatcher()->vkCmdSetViewportShadingRatePaletteNV( static_cast( m_commandBuffer ), + firstViewport, + shadingRatePalettes.size(), + reinterpret_cast( shadingRatePalettes.data() ) ); + } + + // wrapper function for command vkCmdSetCoarseSampleOrderNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoarseSampleOrderNV.html + VULKAN_HPP_INLINE void CommandBuffer::setCoarseSampleOrderNV( + VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType, + ArrayProxy const & customSampleOrders ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoarseSampleOrderNV && "Function requires " ); + + getDispatcher()->vkCmdSetCoarseSampleOrderNV( static_cast( m_commandBuffer ), + static_cast( sampleOrderType ), + customSampleOrders.size(), + reinterpret_cast( customSampleOrders.data() ) ); + } + + //=== VK_NV_ray_tracing === + + // wrapper function for command vkCreateAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateAccelerationStructureNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure; + Result result = + static_cast( getDispatcher()->vkCreateAccelerationStructureNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &accelerationStructure ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createAccelerationStructureNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV( + *this, *reinterpret_cast( &accelerationStructure ), allocator ); + } + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR Device::getAccelerationStructureMemoryRequirementsNV( + const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR memoryRequirements; + getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetAccelerationStructureMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getAccelerationStructureMemoryRequirementsNV( + const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkBindAccelerationStructureMemoryNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindAccelerationStructureMemoryNV.html + VULKAN_HPP_INLINE void + Device::bindAccelerationStructureMemoryNV( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindAccelerationStructureMemoryNV && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBindAccelerationStructureMemoryNV( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindAccelerationStructureMemoryNV" ); + } + + // wrapper function for command vkCmdBuildAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildAccelerationStructureNV.html + VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info, + VULKAN_HPP_NAMESPACE::Buffer instanceData, + VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset, + VULKAN_HPP_NAMESPACE::Bool32 update, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, + VULKAN_HPP_NAMESPACE::Buffer scratch, + VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructureNV && "Function requires " ); + + getDispatcher()->vkCmdBuildAccelerationStructureNV( static_cast( m_commandBuffer ), + reinterpret_cast( &info ), + static_cast( instanceData ), + static_cast( instanceOffset ), + static_cast( update ), + static_cast( dst ), + static_cast( src ), + static_cast( scratch ), + static_cast( scratchOffset ) ); + } + + // wrapper function for command vkCmdCopyAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyAccelerationStructureNV.html + VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV src, + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyAccelerationStructureNV && "Function requires " ); + + getDispatcher()->vkCmdCopyAccelerationStructureNV( static_cast( m_commandBuffer ), + static_cast( dst ), + static_cast( src ), + static_cast( mode ) ); + } + + // wrapper function for command vkCmdTraceRaysNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysNV.html + VULKAN_HPP_INLINE void CommandBuffer::traceRaysNV( VULKAN_HPP_NAMESPACE::Buffer raygenShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderBindingOffset, + VULKAN_HPP_NAMESPACE::Buffer missShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingOffset, + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingStride, + VULKAN_HPP_NAMESPACE::Buffer hitShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingOffset, + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingStride, + VULKAN_HPP_NAMESPACE::Buffer callableShaderBindingTableBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingOffset, + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysNV && "Function requires " ); + + getDispatcher()->vkCmdTraceRaysNV( static_cast( m_commandBuffer ), + static_cast( raygenShaderBindingTableBuffer ), + static_cast( raygenShaderBindingOffset ), + static_cast( missShaderBindingTableBuffer ), + static_cast( missShaderBindingOffset ), + static_cast( missShaderBindingStride ), + static_cast( hitShaderBindingTableBuffer ), + static_cast( hitShaderBindingOffset ), + static_cast( hitShaderBindingStride ), + static_cast( callableShaderBindingTableBuffer ), + static_cast( callableShaderBindingOffset ), + static_cast( callableShaderBindingStride ), + width, + height, + depth ); + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createRayTracingPipelinesNV( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( getDispatcher()->vkCreateRayTracingPipelinesNV( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRayTracingPipelinesNV" ); +# endif + } + + std::vector pipelinesRAII; + pipelinesRAII.reserve( pipelines.size() ); + for ( auto & pipeline : pipelines ) + { + pipelinesRAII.emplace_back( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + return pipelinesRAII; + } + + // wrapper function for command vkCreateRayTracingPipelinesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateRayTracingPipelinesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createRayTracingPipelineNV( + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Pipeline pipeline; + Result result = + static_cast( getDispatcher()->vkCreateRayTracingPipelinesNV( static_cast( m_device ), + pipelineCache ? static_cast( **pipelineCache ) : 0, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createRayTracingPipelineNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Pipeline::getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesNV && + "Function requires or " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( getDispatcher()->vkGetRayTracingShaderGroupHandlesNV( static_cast( m_device ), + static_cast( m_pipeline ), + firstGroup, + groupCount, + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandlesNV" ); + + return data; + } + + // wrapper function for command vkGetRayTracingShaderGroupHandlesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRayTracingShaderGroupHandlesNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Pipeline::getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRayTracingShaderGroupHandlesNV && + "Function requires or " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetRayTracingShaderGroupHandlesNV( static_cast( m_device ), + static_cast( m_pipeline ), + firstGroup, + groupCount, + sizeof( DataType ), + reinterpret_cast( &data ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getRayTracingShaderGroupHandleNV" ); + + return data; + } + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector AccelerationStructureNV::getHandle( size_t dataSize ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureHandleNV && "Function requires " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = + static_cast( getDispatcher()->vkGetAccelerationStructureHandleNV( static_cast( m_device ), + static_cast( m_accelerationStructureNV ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::AccelerationStructureNV::getHandle" ); + + return data; + } + + // wrapper function for command vkGetAccelerationStructureHandleNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureHandleNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType AccelerationStructureNV::getHandle() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureHandleNV && "Function requires " ); + + DataType data; + Result result = + static_cast( getDispatcher()->vkGetAccelerationStructureHandleNV( static_cast( m_device ), + static_cast( m_accelerationStructureNV ), + sizeof( DataType ), + reinterpret_cast( &data ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::AccelerationStructureNV::getHandle" ); + + return data; + } + + // wrapper function for command vkCmdWriteAccelerationStructuresPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html + VULKAN_HPP_INLINE void + CommandBuffer::writeAccelerationStructuresPropertiesNV( ArrayProxy const & accelerationStructures, + VULKAN_HPP_NAMESPACE::QueryType queryType, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesNV && + "Function requires " ); + + getDispatcher()->vkCmdWriteAccelerationStructuresPropertiesNV( static_cast( m_commandBuffer ), + accelerationStructures.size(), + reinterpret_cast( accelerationStructures.data() ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } + + // wrapper function for command vkCompileDeferredNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCompileDeferredNV.html + VULKAN_HPP_INLINE void Pipeline::compileDeferredNV( uint32_t shader ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCompileDeferredNV && "Function requires " ); + + Result result = + static_cast( getDispatcher()->vkCompileDeferredNV( static_cast( m_device ), static_cast( m_pipeline ), shader ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::compileDeferredNV" ); + } + + //=== VK_KHR_maintenance3 === + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport + Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSupportKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support; + getDispatcher()->vkGetDescriptorSetLayoutSupportKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &support ) ); + + return support; + } + + // wrapper function for command vkGetDescriptorSetLayoutSupportKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSupportKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSupportKHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support = structureChain.template get(); + getDispatcher()->vkGetDescriptorSetLayoutSupportKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &support ) ); + + return structureChain; + } + + //=== VK_KHR_draw_indirect_count === + + // wrapper function for command vkCmdDrawIndirectCountKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndirectCountKHR.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawIndirectCountKHR && + "Function requires or or " ); + + getDispatcher()->vkCmdDrawIndirectCountKHR( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + // wrapper function for command vkCmdDrawIndexedIndirectCountKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawIndexedIndirectCountKHR.html + VULKAN_HPP_INLINE void CommandBuffer::drawIndexedIndirectCountKHR( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkCmdDrawIndexedIndirectCountKHR && + "Function requires or or " ); + + getDispatcher()->vkCmdDrawIndexedIndirectCountKHR( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_EXT_external_memory_host === + + // wrapper function for command vkGetMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryHostPointerPropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT + Device::getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, const void * pHostPointer ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryHostPointerPropertiesEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT memoryHostPointerProperties; + Result result = static_cast( + getDispatcher()->vkGetMemoryHostPointerPropertiesEXT( static_cast( m_device ), + static_cast( handleType ), + pHostPointer, + reinterpret_cast( &memoryHostPointerProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryHostPointerPropertiesEXT" ); + + return memoryHostPointerProperties; + } + + //=== VK_AMD_buffer_marker === + + // wrapper function for command vkCmdWriteBufferMarkerAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarkerAMD.html + VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarkerAMD( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits pipelineStage, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + uint32_t marker ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteBufferMarkerAMD && "Function requires " ); + + getDispatcher()->vkCmdWriteBufferMarkerAMD( static_cast( m_commandBuffer ), + static_cast( pipelineStage ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + marker ); + } + + // wrapper function for command vkCmdWriteBufferMarker2AMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteBufferMarker2AMD.html + VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset, + uint32_t marker ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteBufferMarker2AMD && "Function requires " ); + + getDispatcher()->vkCmdWriteBufferMarker2AMD( static_cast( m_commandBuffer ), + static_cast( stage ), + static_cast( dstBuffer ), + static_cast( dstOffset ), + marker ); + } + + //=== VK_EXT_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getCalibrateableTimeDomainsEXT() const + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT && + "Function requires or " ); + + std::vector timeDomains; + uint32_t timeDomainCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( static_cast( m_physicalDevice ), &timeDomainCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && timeDomainCount ) + { + timeDomains.resize( timeDomainCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( + static_cast( m_physicalDevice ), &timeDomainCount, reinterpret_cast( timeDomains.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" ); + VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); + if ( timeDomainCount < timeDomains.size() ) + { + timeDomains.resize( timeDomainCount ); + } + return timeDomains; + } + + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair, uint64_t> + Device::getCalibratedTimestampsEXT( ArrayProxy const & timestampInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetCalibratedTimestampsEXT && + "Function requires or " ); + + std::pair, uint64_t> data_( std::piecewise_construct, std::forward_as_tuple( timestampInfos.size() ), std::forward_as_tuple( 0 ) ); + std::vector & timestamps = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = + static_cast( getDispatcher()->vkGetCalibratedTimestampsEXT( static_cast( m_device ), + timestampInfos.size(), + reinterpret_cast( timestampInfos.data() ), + timestamps.data(), + &maxDeviation ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" ); + + return data_; + } + + // wrapper function for command vkGetCalibratedTimestampsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair + Device::getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR & timestampInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetCalibratedTimestampsEXT && + "Function requires or " ); + + std::pair data_; + uint64_t & timestamp = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( getDispatcher()->vkGetCalibratedTimestampsEXT( + static_cast( m_device ), 1, reinterpret_cast( ×tampInfo ), ×tamp, &maxDeviation ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampEXT" ); + + return data_; + } + + //=== VK_NV_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksNV.html + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksNV( uint32_t taskCount, uint32_t firstTask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksNV && "Function requires " ); + + getDispatcher()->vkCmdDrawMeshTasksNV( static_cast( m_commandBuffer ), taskCount, firstTask ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectNV.html + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectNV( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksIndirectNV && "Function requires " ); + + getDispatcher()->vkCmdDrawMeshTasksIndirectNV( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountNV.html + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectCountNV( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksIndirectCountNV && "Function requires " ); + + getDispatcher()->vkCmdDrawMeshTasksIndirectCountNV( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_NV_scissor_exclusive === + + // wrapper function for command vkCmdSetExclusiveScissorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorEnableNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setExclusiveScissorEnableNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissorEnables ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetExclusiveScissorEnableNV && + "Function requires " ); + + getDispatcher()->vkCmdSetExclusiveScissorEnableNV( static_cast( m_commandBuffer ), + firstExclusiveScissor, + exclusiveScissorEnables.size(), + reinterpret_cast( exclusiveScissorEnables.data() ) ); + } + + // wrapper function for command vkCmdSetExclusiveScissorNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExclusiveScissorNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setExclusiveScissorNV( uint32_t firstExclusiveScissor, + ArrayProxy const & exclusiveScissors ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetExclusiveScissorNV && "Function requires " ); + + getDispatcher()->vkCmdSetExclusiveScissorNV( static_cast( m_commandBuffer ), + firstExclusiveScissor, + exclusiveScissors.size(), + reinterpret_cast( exclusiveScissors.data() ) ); + } + + //=== VK_NV_device_diagnostic_checkpoints === + + // wrapper function for command vkCmdSetCheckpointNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCheckpointNV.html + template + VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( CheckpointMarkerType const & checkpointMarker ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCheckpointNV && "Function requires " ); + + getDispatcher()->vkCmdSetCheckpointNV( static_cast( m_commandBuffer ), reinterpret_cast( &checkpointMarker ) ); + } + + // wrapper function for command vkGetQueueCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointDataNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Queue::getCheckpointDataNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetQueueCheckpointDataNV && + "Function requires " ); + + std::vector checkpointData; + uint32_t checkpointDataCount; + getDispatcher()->vkGetQueueCheckpointDataNV( static_cast( m_queue ), &checkpointDataCount, nullptr ); + checkpointData.resize( checkpointDataCount ); + getDispatcher()->vkGetQueueCheckpointDataNV( + static_cast( m_queue ), &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); + + VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); + if ( checkpointDataCount < checkpointData.size() ) + { + checkpointData.resize( checkpointDataCount ); + } + return checkpointData; + } + + // wrapper function for command vkGetQueueCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetQueueCheckpointData2NV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Queue::getCheckpointData2NV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetQueueCheckpointData2NV && + "Function requires " ); + + std::vector checkpointData; + uint32_t checkpointDataCount; + getDispatcher()->vkGetQueueCheckpointData2NV( static_cast( m_queue ), &checkpointDataCount, nullptr ); + checkpointData.resize( checkpointDataCount ); + getDispatcher()->vkGetQueueCheckpointData2NV( + static_cast( m_queue ), &checkpointDataCount, reinterpret_cast( checkpointData.data() ) ); + + VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() ); + if ( checkpointDataCount < checkpointData.size() ) + { + checkpointData.resize( checkpointDataCount ); + } + return checkpointData; + } + + //=== VK_KHR_timeline_semaphore === + + // wrapper function for command vkGetSemaphoreCounterValueKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreCounterValueKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Semaphore::getCounterValueKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreCounterValueKHR && + "Function requires or " ); + + uint64_t value; + Result result = static_cast( + getDispatcher()->vkGetSemaphoreCounterValueKHR( static_cast( m_device ), static_cast( m_semaphore ), &value ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Semaphore::getCounterValueKHR" ); + + return value; + } + + // wrapper function for command vkWaitSemaphoresKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitSemaphoresKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWaitSemaphoresKHR && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkWaitSemaphoresKHR( static_cast( m_device ), reinterpret_cast( &waitInfo ), timeout ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::waitSemaphoresKHR", { Result::eSuccess, Result::eTimeout } ); + + return static_cast( result ); + } + + // wrapper function for command vkSignalSemaphoreKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSignalSemaphoreKHR.html + VULKAN_HPP_INLINE void Device::signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSignalSemaphoreKHR && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkSignalSemaphoreKHR( static_cast( m_device ), reinterpret_cast( &signalInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::signalSemaphoreKHR" ); + } + + //=== VK_INTEL_performance_query === + + // wrapper function for command vkInitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkInitializePerformanceApiINTEL.html + VULKAN_HPP_INLINE void Device::initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkInitializePerformanceApiINTEL && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkInitializePerformanceApiINTEL( + static_cast( m_device ), reinterpret_cast( &initializeInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::initializePerformanceApiINTEL" ); + } + + // wrapper function for command vkUninitializePerformanceApiINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUninitializePerformanceApiINTEL.html + VULKAN_HPP_INLINE void Device::uninitializePerformanceApiINTEL() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUninitializePerformanceApiINTEL && + "Function requires " ); + + getDispatcher()->vkUninitializePerformanceApiINTEL( static_cast( m_device ) ); + } + + // wrapper function for command vkCmdSetPerformanceMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceMarkerINTEL.html + VULKAN_HPP_INLINE void CommandBuffer::setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPerformanceMarkerINTEL && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkCmdSetPerformanceMarkerINTEL( + static_cast( m_commandBuffer ), reinterpret_cast( &markerInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceMarkerINTEL" ); + } + + // wrapper function for command vkCmdSetPerformanceStreamMarkerINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceStreamMarkerINTEL.html + VULKAN_HPP_INLINE void CommandBuffer::setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPerformanceStreamMarkerINTEL && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkCmdSetPerformanceStreamMarkerINTEL( + static_cast( m_commandBuffer ), reinterpret_cast( &markerInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceStreamMarkerINTEL" ); + } + + // wrapper function for command vkCmdSetPerformanceOverrideINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPerformanceOverrideINTEL.html + VULKAN_HPP_INLINE void CommandBuffer::setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPerformanceOverrideINTEL && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkCmdSetPerformanceOverrideINTEL( + static_cast( m_commandBuffer ), reinterpret_cast( &overrideInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setPerformanceOverrideINTEL" ); + } + + // wrapper function for command vkAcquirePerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquirePerformanceConfigurationINTEL.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL>::Type + Device::acquirePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration; + Result result = static_cast( + getDispatcher()->vkAcquirePerformanceConfigurationINTEL( static_cast( m_device ), + reinterpret_cast( &acquireInfo ), + reinterpret_cast( &configuration ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::acquirePerformanceConfigurationINTEL" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL( + *this, *reinterpret_cast( &configuration ) ); + } + + // wrapper function for command vkQueueSetPerformanceConfigurationINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSetPerformanceConfigurationINTEL.html + VULKAN_HPP_INLINE void Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSetPerformanceConfigurationINTEL && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkQueueSetPerformanceConfigurationINTEL( + static_cast( m_queue ), static_cast( configuration ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::setPerformanceConfigurationINTEL" ); + } + + // wrapper function for command vkGetPerformanceParameterINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPerformanceParameterINTEL.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PerformanceValueINTEL + Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPerformanceParameterINTEL && "Function requires " ); + + VULKAN_HPP_NAMESPACE::PerformanceValueINTEL value; + Result result = static_cast( getDispatcher()->vkGetPerformanceParameterINTEL( + static_cast( m_device ), static_cast( parameter ), reinterpret_cast( &value ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPerformanceParameterINTEL" ); + + return value; + } + + //=== VK_AMD_display_native_hdr === + + // wrapper function for command vkSetLocalDimmingAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLocalDimmingAMD.html + VULKAN_HPP_INLINE void SwapchainKHR::setLocalDimmingAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetLocalDimmingAMD && "Function requires " ); + + getDispatcher()->vkSetLocalDimmingAMD( + static_cast( m_device ), static_cast( m_swapchainKHR ), static_cast( localDimmingEnable ) ); + } + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + // wrapper function for command vkCreateImagePipeSurfaceFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateImagePipeSurfaceFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createImagePipeSurfaceFUCHSIA( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = + static_cast( getDispatcher()->vkCreateImagePipeSurfaceFUCHSIA( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createImagePipeSurfaceFUCHSIA" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + // wrapper function for command vkCreateMetalSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMetalSurfaceEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createMetalSurfaceEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateMetalSurfaceEXT( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createMetalSurfaceEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + + // wrapper function for command vkGetPhysicalDeviceFragmentShadingRatesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceFragmentShadingRatesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getFragmentShadingRatesKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceFragmentShadingRatesKHR && + "Function requires " ); + + std::vector fragmentShadingRates; + uint32_t fragmentShadingRateCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceFragmentShadingRatesKHR( + static_cast( m_physicalDevice ), &fragmentShadingRateCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && fragmentShadingRateCount ) + { + fragmentShadingRates.resize( fragmentShadingRateCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceFragmentShadingRatesKHR( + static_cast( m_physicalDevice ), + &fragmentShadingRateCount, + reinterpret_cast( fragmentShadingRates.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" ); + VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() ); + if ( fragmentShadingRateCount < fragmentShadingRates.size() ) + { + fragmentShadingRates.resize( fragmentShadingRateCount ); + } + return fragmentShadingRates; + } + + // wrapper function for command vkCmdSetFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize, + const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFragmentShadingRateKHR && + "Function requires " ); + + getDispatcher()->vkCmdSetFragmentShadingRateKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &fragmentSize ), + reinterpret_cast( combinerOps ) ); + } + + //=== VK_KHR_dynamic_rendering_local_read === + + // wrapper function for command vkCmdSetRenderingAttachmentLocationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingAttachmentLocationsKHR.html + VULKAN_HPP_INLINE void + CommandBuffer::setRenderingAttachmentLocationsKHR( const VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo & locationInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRenderingAttachmentLocationsKHR && + "Function requires or " ); + + getDispatcher()->vkCmdSetRenderingAttachmentLocationsKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &locationInfo ) ); + } + + // wrapper function for command vkCmdSetRenderingInputAttachmentIndicesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRenderingInputAttachmentIndicesKHR.html + VULKAN_HPP_INLINE void CommandBuffer::setRenderingInputAttachmentIndicesKHR( + const VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo & inputAttachmentIndexInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRenderingInputAttachmentIndicesKHR && + "Function requires or " ); + + getDispatcher()->vkCmdSetRenderingInputAttachmentIndicesKHR( static_cast( m_commandBuffer ), + reinterpret_cast( &inputAttachmentIndexInfo ) ); + } + + //=== VK_EXT_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceAddress + Device::getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetBufferDeviceAddressEXT && + "Function requires or or " ); + + VkDeviceAddress result = + getDispatcher()->vkGetBufferDeviceAddressEXT( static_cast( m_device ), reinterpret_cast( &info ) ); + + return static_cast( result ); + } + + //=== VK_EXT_tooling_info === + + // wrapper function for command vkGetPhysicalDeviceToolPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceToolPropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getToolPropertiesEXT() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT && + "Function requires or " ); + + std::vector toolProperties; + uint32_t toolCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT( static_cast( m_physicalDevice ), &toolCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && toolCount ) + { + toolProperties.resize( toolCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT( + static_cast( m_physicalDevice ), &toolCount, reinterpret_cast( toolProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" ); + VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() ); + if ( toolCount < toolProperties.size() ) + { + toolProperties.resize( toolCount ); + } + return toolProperties; + } + + //=== VK_KHR_present_wait === + + // wrapper function for command vkWaitForPresentKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresentKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result SwapchainKHR::waitForPresent( uint64_t presentId, uint64_t timeout ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWaitForPresentKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkWaitForPresentKHR( static_cast( m_device ), static_cast( m_swapchainKHR ), presentId, timeout ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::waitForPresent", { Result::eSuccess, Result::eTimeout, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } + + //=== VK_NV_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getCooperativeMatrixPropertiesNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + //=== VK_NV_coverage_reduction_mode === + + // wrapper function for command vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV && + "Function requires " ); + + std::vector combinations; + uint32_t combinationCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + static_cast( m_physicalDevice ), &combinationCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && combinationCount ) + { + combinations.resize( combinationCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + static_cast( m_physicalDevice ), + &combinationCount, + reinterpret_cast( combinations.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" ); + VULKAN_HPP_ASSERT( combinationCount <= combinations.size() ); + if ( combinationCount < combinations.size() ) + { + combinations.resize( combinationCount ); + } + return combinations; + } + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + // wrapper function for command vkGetPhysicalDeviceSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT && + "Function requires " ); + + std::vector presentModes; + uint32_t presentModeCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + &presentModeCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && presentModeCount ) + { + presentModes.resize( presentModeCount ); + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT( static_cast( m_physicalDevice ), + reinterpret_cast( &surfaceInfo ), + &presentModeCount, + reinterpret_cast( presentModes.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" ); + VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() ); + if ( presentModeCount < presentModes.size() ) + { + presentModes.resize( presentModeCount ); + } + return presentModes; + } + + // wrapper function for command vkAcquireFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireFullScreenExclusiveModeEXT.html + VULKAN_HPP_INLINE void SwapchainKHR::acquireFullScreenExclusiveModeEXT() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireFullScreenExclusiveModeEXT && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkAcquireFullScreenExclusiveModeEXT( static_cast( m_device ), static_cast( m_swapchainKHR ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::acquireFullScreenExclusiveModeEXT" ); + } + + // wrapper function for command vkReleaseFullScreenExclusiveModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseFullScreenExclusiveModeEXT.html + VULKAN_HPP_INLINE void SwapchainKHR::releaseFullScreenExclusiveModeEXT() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseFullScreenExclusiveModeEXT && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkReleaseFullScreenExclusiveModeEXT( static_cast( m_device ), static_cast( m_swapchainKHR ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::releaseFullScreenExclusiveModeEXT" ); + } + + // wrapper function for command vkGetDeviceGroupSurfacePresentModes2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR + Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceGroupSurfacePresentModes2EXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes; + Result result = static_cast( + getDispatcher()->vkGetDeviceGroupSurfacePresentModes2EXT( static_cast( m_device ), + reinterpret_cast( &surfaceInfo ), + reinterpret_cast( &modes ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getGroupSurfacePresentModes2EXT" ); + + return modes; + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + + // wrapper function for command vkCreateHeadlessSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateHeadlessSurfaceEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createHeadlessSurfaceEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateHeadlessSurfaceEXT( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createHeadlessSurfaceEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + //=== VK_KHR_buffer_device_address === + + // wrapper function for command vkGetBufferDeviceAddressKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferDeviceAddressKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceAddress + Device::getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetBufferDeviceAddressKHR && + "Function requires or or " ); + + VkDeviceAddress result = + getDispatcher()->vkGetBufferDeviceAddressKHR( static_cast( m_device ), reinterpret_cast( &info ) ); + + return static_cast( result ); + } + + // wrapper function for command vkGetBufferOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureAddressKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferOpaqueCaptureAddressKHR && + "Function requires or " ); + + uint64_t result = + getDispatcher()->vkGetBufferOpaqueCaptureAddressKHR( static_cast( m_device ), reinterpret_cast( &info ) ); + + return result; + } + + // wrapper function for command vkGetDeviceMemoryOpaqueCaptureAddressKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t + Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddressKHR && + "Function requires or " ); + + uint64_t result = getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddressKHR( static_cast( m_device ), + reinterpret_cast( &info ) ); + + return result; + } + + //=== VK_EXT_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setLineStippleEXT( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineStippleEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetLineStippleEXT( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); + } + + //=== VK_EXT_host_query_reset === + + // wrapper function for command vkResetQueryPoolEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkResetQueryPoolEXT.html + VULKAN_HPP_INLINE void QueryPool::resetEXT( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkResetQueryPoolEXT && "Function requires or " ); + + getDispatcher()->vkResetQueryPoolEXT( static_cast( m_device ), static_cast( m_queryPool ), firstQuery, queryCount ); + } + + //=== VK_EXT_extended_dynamic_state === + + // wrapper function for command vkCmdSetCullModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCullModeEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setCullModeEXT( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCullModeEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetCullModeEXT( static_cast( m_commandBuffer ), static_cast( cullMode ) ); + } + + // wrapper function for command vkCmdSetFrontFaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFrontFaceEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setFrontFaceEXT( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFrontFaceEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetFrontFaceEXT( static_cast( m_commandBuffer ), static_cast( frontFace ) ); + } + + // wrapper function for command vkCmdSetPrimitiveTopologyEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveTopologyEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopologyEXT( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPrimitiveTopologyEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetPrimitiveTopologyEXT( static_cast( m_commandBuffer ), static_cast( primitiveTopology ) ); + } + + // wrapper function for command vkCmdSetViewportWithCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWithCountEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setViewportWithCountEXT( ArrayProxy const & viewports ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportWithCountEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetViewportWithCountEXT( + static_cast( m_commandBuffer ), viewports.size(), reinterpret_cast( viewports.data() ) ); + } + + // wrapper function for command vkCmdSetScissorWithCountEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetScissorWithCountEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCountEXT( ArrayProxy const & scissors ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetScissorWithCountEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetScissorWithCountEXT( + static_cast( m_commandBuffer ), scissors.size(), reinterpret_cast( scissors.data() ) ); + } + + // wrapper function for command vkCmdBindVertexBuffers2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindVertexBuffers2EXT.html + VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2EXT( uint32_t firstBinding, + ArrayProxy const & buffers, + ArrayProxy const & offsets, + ArrayProxy const & sizes, + ArrayProxy const & strides ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindVertexBuffers2EXT && + "Function requires or or " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( buffers.size() == offsets.size() ); + VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() ); + VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() ); +# else + if ( buffers.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != offsets.size()" ); + } + if ( !sizes.empty() && buffers.size() != sizes.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != sizes.size()" ); + } + if ( !strides.empty() && buffers.size() != strides.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindVertexBuffers2EXT: buffers.size() != strides.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBindVertexBuffers2EXT( static_cast( m_commandBuffer ), + firstBinding, + buffers.size(), + reinterpret_cast( buffers.data() ), + reinterpret_cast( offsets.data() ), + reinterpret_cast( sizes.data() ), + reinterpret_cast( strides.data() ) ); + } + + // wrapper function for command vkCmdSetDepthTestEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthTestEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthTestEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthTestEnableEXT( static_cast( m_commandBuffer ), static_cast( depthTestEnable ) ); + } + + // wrapper function for command vkCmdSetDepthWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthWriteEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthWriteEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthWriteEnableEXT( static_cast( m_commandBuffer ), static_cast( depthWriteEnable ) ); + } + + // wrapper function for command vkCmdSetDepthCompareOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthCompareOpEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOpEXT( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthCompareOpEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthCompareOpEXT( static_cast( m_commandBuffer ), static_cast( depthCompareOp ) ); + } + + // wrapper function for command vkCmdSetDepthBoundsTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBoundsTestEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBoundsTestEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthBoundsTestEnableEXT( static_cast( m_commandBuffer ), static_cast( depthBoundsTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilTestEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilTestEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilTestEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetStencilTestEnableEXT( static_cast( m_commandBuffer ), static_cast( stencilTestEnable ) ); + } + + // wrapper function for command vkCmdSetStencilOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetStencilOpEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setStencilOpEXT( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask, + VULKAN_HPP_NAMESPACE::StencilOp failOp, + VULKAN_HPP_NAMESPACE::StencilOp passOp, + VULKAN_HPP_NAMESPACE::StencilOp depthFailOp, + VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetStencilOpEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetStencilOpEXT( static_cast( m_commandBuffer ), + static_cast( faceMask ), + static_cast( failOp ), + static_cast( passOp ), + static_cast( depthFailOp ), + static_cast( compareOp ) ); + } + + //=== VK_KHR_deferred_host_operations === + + // wrapper function for command vkCreateDeferredOperationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDeferredOperationKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createDeferredOperationKHR( VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation; + Result result = static_cast( getDispatcher()->vkCreateDeferredOperationKHR( static_cast( m_device ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &deferredOperation ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDeferredOperationKHR" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR( + *this, *reinterpret_cast( &deferredOperation ), allocator ); + } + + // wrapper function for command vkGetDeferredOperationMaxConcurrencyKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationMaxConcurrencyKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t DeferredOperationKHR::getMaxConcurrency() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeferredOperationMaxConcurrencyKHR && + "Function requires " ); + + uint32_t result = getDispatcher()->vkGetDeferredOperationMaxConcurrencyKHR( static_cast( m_device ), + static_cast( m_deferredOperationKHR ) ); + + return result; + } + + // wrapper function for command vkGetDeferredOperationResultKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeferredOperationResultKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result DeferredOperationKHR::getResult() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeferredOperationResultKHR && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkGetDeferredOperationResultKHR( static_cast( m_device ), static_cast( m_deferredOperationKHR ) ) ); + + return static_cast( result ); + } + + // wrapper function for command vkDeferredOperationJoinKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDeferredOperationJoinKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result DeferredOperationKHR::join() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDeferredOperationJoinKHR && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkDeferredOperationJoinKHR( static_cast( m_device ), static_cast( m_deferredOperationKHR ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::DeferredOperationKHR::join", { Result::eSuccess, Result::eThreadDoneKHR, Result::eThreadIdleKHR } ); + + return static_cast( result ); + } + + //=== VK_KHR_pipeline_executable_properties === + + // wrapper function for command vkGetPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutablePropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineExecutablePropertiesKHR && + "Function requires " ); + + std::vector properties; + uint32_t executableCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPipelineExecutablePropertiesKHR( + static_cast( m_device ), reinterpret_cast( &pipelineInfo ), &executableCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && executableCount ) + { + properties.resize( executableCount ); + result = static_cast( + getDispatcher()->vkGetPipelineExecutablePropertiesKHR( static_cast( m_device ), + reinterpret_cast( &pipelineInfo ), + &executableCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" ); + VULKAN_HPP_ASSERT( executableCount <= properties.size() ); + if ( executableCount < properties.size() ) + { + properties.resize( executableCount ); + } + return properties; + } + + // wrapper function for command vkGetPipelineExecutableStatisticsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableStatisticsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineExecutableStatisticsKHR && + "Function requires " ); + + std::vector statistics; + uint32_t statisticCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPipelineExecutableStatisticsKHR( + static_cast( m_device ), reinterpret_cast( &executableInfo ), &statisticCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && statisticCount ) + { + statistics.resize( statisticCount ); + result = static_cast( + getDispatcher()->vkGetPipelineExecutableStatisticsKHR( static_cast( m_device ), + reinterpret_cast( &executableInfo ), + &statisticCount, + reinterpret_cast( statistics.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" ); + VULKAN_HPP_ASSERT( statisticCount <= statistics.size() ); + if ( statisticCount < statistics.size() ) + { + statistics.resize( statisticCount ); + } + return statistics; + } + + // wrapper function for command vkGetPipelineExecutableInternalRepresentationsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineExecutableInternalRepresentationsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getPipelineExecutableInternalRepresentationsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR && + "Function requires " ); + + std::vector internalRepresentations; + uint32_t internalRepresentationCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR( static_cast( m_device ), + reinterpret_cast( &executableInfo ), + &internalRepresentationCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && internalRepresentationCount ) + { + internalRepresentations.resize( internalRepresentationCount ); + result = static_cast( getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR( + static_cast( m_device ), + reinterpret_cast( &executableInfo ), + &internalRepresentationCount, + reinterpret_cast( internalRepresentations.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" ); + VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() ); + if ( internalRepresentationCount < internalRepresentations.size() ) + { + internalRepresentations.resize( internalRepresentationCount ); + } + return internalRepresentations; + } + + //=== VK_EXT_host_image_copy === + + // wrapper function for command vkCopyMemoryToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImageEXT.html + VULKAN_HPP_INLINE void Device::copyMemoryToImageEXT( const VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo & copyMemoryToImageInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMemoryToImageEXT && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkCopyMemoryToImageEXT( + static_cast( m_device ), reinterpret_cast( ©MemoryToImageInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToImageEXT" ); + } + + // wrapper function for command vkCopyImageToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToMemoryEXT.html + VULKAN_HPP_INLINE void Device::copyImageToMemoryEXT( const VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo & copyImageToMemoryInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyImageToMemoryEXT && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkCopyImageToMemoryEXT( + static_cast( m_device ), reinterpret_cast( ©ImageToMemoryInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToMemoryEXT" ); + } + + // wrapper function for command vkCopyImageToImageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyImageToImageEXT.html + VULKAN_HPP_INLINE void Device::copyImageToImageEXT( const VULKAN_HPP_NAMESPACE::CopyImageToImageInfo & copyImageToImageInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyImageToImageEXT && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkCopyImageToImageEXT( + static_cast( m_device ), reinterpret_cast( ©ImageToImageInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::copyImageToImageEXT" ); + } + + // wrapper function for command vkTransitionImageLayoutEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkTransitionImageLayoutEXT.html + VULKAN_HPP_INLINE void Device::transitionImageLayoutEXT( ArrayProxy const & transitions ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkTransitionImageLayoutEXT && + "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkTransitionImageLayoutEXT( + static_cast( m_device ), transitions.size(), reinterpret_cast( transitions.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::transitionImageLayoutEXT" ); + } + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2 + Image::getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetImageSubresourceLayout2EXT && + "Function requires or or or " ); + + VULKAN_HPP_NAMESPACE::SubresourceLayout2 layout; + getDispatcher()->vkGetImageSubresourceLayout2EXT( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetImageSubresourceLayout2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2EXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Image::getSubresourceLayout2EXT( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetImageSubresourceLayout2EXT && + "Function requires or or or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::SubresourceLayout2 & layout = structureChain.template get(); + getDispatcher()->vkGetImageSubresourceLayout2EXT( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return structureChain; + } + + //=== VK_KHR_map_memory2 === + + // wrapper function for command vkMapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkMapMemory2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * Device::mapMemory2KHR( const VULKAN_HPP_NAMESPACE::MemoryMapInfo & memoryMapInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkMapMemory2KHR && "Function requires or " ); + + void * pData; + Result result = static_cast( + getDispatcher()->vkMapMemory2KHR( static_cast( m_device ), reinterpret_cast( &memoryMapInfo ), &pData ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::mapMemory2KHR" ); + + return pData; + } + + // wrapper function for command vkUnmapMemory2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkUnmapMemory2KHR.html + VULKAN_HPP_INLINE void Device::unmapMemory2KHR( const VULKAN_HPP_NAMESPACE::MemoryUnmapInfo & memoryUnmapInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUnmapMemory2KHR && "Function requires or " ); + + Result result = static_cast( + getDispatcher()->vkUnmapMemory2KHR( static_cast( m_device ), reinterpret_cast( &memoryUnmapInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::unmapMemory2KHR" ); + } + + //=== VK_EXT_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesEXT.html + VULKAN_HPP_INLINE void Device::releaseSwapchainImagesEXT( const VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR & releaseInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseSwapchainImagesEXT && + "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkReleaseSwapchainImagesEXT( + static_cast( m_device ), reinterpret_cast( &releaseInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::releaseSwapchainImagesEXT" ); + } + + //=== VK_NV_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getGeneratedCommandsMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkCmdPreprocessGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsNV.html + VULKAN_HPP_INLINE void + CommandBuffer::preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPreprocessGeneratedCommandsNV && + "Function requires " ); + + getDispatcher()->vkCmdPreprocessGeneratedCommandsNV( static_cast( m_commandBuffer ), + reinterpret_cast( &generatedCommandsInfo ) ); + } + + // wrapper function for command vkCmdExecuteGeneratedCommandsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsNV.html + VULKAN_HPP_INLINE void + CommandBuffer::executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, + const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdExecuteGeneratedCommandsNV && + "Function requires " ); + + getDispatcher()->vkCmdExecuteGeneratedCommandsNV( static_cast( m_commandBuffer ), + static_cast( isPreprocessed ), + reinterpret_cast( &generatedCommandsInfo ) ); + } + + // wrapper function for command vkCmdBindPipelineShaderGroupNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindPipelineShaderGroupNV.html + VULKAN_HPP_INLINE void CommandBuffer::bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::Pipeline pipeline, + uint32_t groupIndex ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindPipelineShaderGroupNV && + "Function requires " ); + + getDispatcher()->vkCmdBindPipelineShaderGroupNV( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( pipeline ), + groupIndex ); + } + + // wrapper function for command vkCreateIndirectCommandsLayoutNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout; + Result result = + static_cast( getDispatcher()->vkCreateIndirectCommandsLayoutNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectCommandsLayout ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createIndirectCommandsLayoutNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV( + *this, *reinterpret_cast( &indirectCommandsLayout ), allocator ); + } + + //=== VK_EXT_depth_bias_control === + + // wrapper function for command vkCmdSetDepthBias2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBias2EXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthBias2EXT( const VULKAN_HPP_NAMESPACE::DepthBiasInfoEXT & depthBiasInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBias2EXT && "Function requires " ); + + getDispatcher()->vkCmdSetDepthBias2EXT( static_cast( m_commandBuffer ), reinterpret_cast( &depthBiasInfo ) ); + } + + //=== VK_EXT_acquire_drm_display === + + // wrapper function for command vkAcquireDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireDrmDisplayEXT.html + VULKAN_HPP_INLINE void PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireDrmDisplayEXT && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkAcquireDrmDisplayEXT( static_cast( m_physicalDevice ), drmFd, static_cast( display ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireDrmDisplayEXT" ); + } + + // wrapper function for command vkGetDrmDisplayEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDrmDisplayEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DisplayKHR display; + Result result = static_cast( getDispatcher()->vkGetDrmDisplayEXT( + static_cast( m_physicalDevice ), drmFd, connectorId, reinterpret_cast( &display ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "PhysicalDevice::getDrmDisplayEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, *reinterpret_cast( &display ) ); + } + + //=== VK_EXT_private_data === + + // wrapper function for command vkCreatePrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePrivateDataSlotEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot; + Result result = static_cast( getDispatcher()->vkCreatePrivateDataSlotEXT( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &privateDataSlot ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createPrivateDataSlotEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot( *this, *reinterpret_cast( &privateDataSlot ), allocator ); + } + + // wrapper function for command vkDestroyPrivateDataSlotEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkDestroyPrivateDataSlotEXT.html + VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, + Optional allocator ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkDestroyPrivateDataSlotEXT && + "Function requires or " ); + + getDispatcher()->vkDestroyPrivateDataSlotEXT( static_cast( m_device ), + static_cast( privateDataSlot ), + reinterpret_cast( allocator.get() ) ); + } + + // wrapper function for command vkSetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetPrivateDataEXT.html + VULKAN_HPP_INLINE void Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot, + uint64_t data ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetPrivateDataEXT && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkSetPrivateDataEXT( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateDataEXT" ); + } + + // wrapper function for command vkGetPrivateDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPrivateDataEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, + uint64_t objectHandle, + VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPrivateDataEXT && "Function requires or " ); + + uint64_t data; + getDispatcher()->vkGetPrivateDataEXT( + static_cast( m_device ), static_cast( objectType_ ), objectHandle, static_cast( privateDataSlot ), &data ); + + return data; + } + + //=== VK_KHR_video_encode_queue === + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR qualityLevelProperties; + Result result = static_cast( getDispatcher()->vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + static_cast( m_physicalDevice ), + reinterpret_cast( &qualityLevelInfo ), + reinterpret_cast( &qualityLevelProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR" ); + + return qualityLevelProperties; + } + + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR & qualityLevelInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR & qualityLevelProperties = + structureChain.template get(); + Result result = static_cast( getDispatcher()->vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + static_cast( m_physicalDevice ), + reinterpret_cast( &qualityLevelInfo ), + reinterpret_cast( &qualityLevelProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR" ); + + return structureChain; + } + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair> + Device::getEncodedVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetEncodedVideoSessionParametersKHR && + "Function requires " ); + + std::pair> data_; + VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersFeedbackInfoKHR & feedbackInfo = data_.first; + std::vector & data = data_.second; + size_t dataSize; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetEncodedVideoSessionParametersKHR( + static_cast( m_device ), + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( getDispatcher()->vkGetEncodedVideoSessionParametersKHR( + static_cast( m_device ), + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEncodedVideoSessionParametersKHR" ); + + return data_; + } + + // wrapper function for command vkGetEncodedVideoSessionParametersKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetEncodedVideoSessionParametersKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair, std::vector> + Device::getEncodedVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR & videoSessionParametersInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetEncodedVideoSessionParametersKHR && + "Function requires " ); + + std::pair, std::vector> data_; + VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersFeedbackInfoKHR & feedbackInfo = + data_.first.template get(); + std::vector & data = data_.second; + size_t dataSize; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetEncodedVideoSessionParametersKHR( + static_cast( m_device ), + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( getDispatcher()->vkGetEncodedVideoSessionParametersKHR( + static_cast( m_device ), + reinterpret_cast( &videoSessionParametersInfo ), + reinterpret_cast( &feedbackInfo ), + &dataSize, + reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getEncodedVideoSessionParametersKHR" ); + + return data_; + } + + // wrapper function for command vkCmdEncodeVideoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEncodeVideoKHR.html + VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEncodeVideoKHR && "Function requires " ); + + getDispatcher()->vkCmdEncodeVideoKHR( static_cast( m_commandBuffer ), reinterpret_cast( &encodeInfo ) ); + } + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + + // wrapper function for command vkCreateCudaModuleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaModuleNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createCudaModuleNV( VULKAN_HPP_NAMESPACE::CudaModuleCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::CudaModuleNV module; + Result result = static_cast( getDispatcher()->vkCreateCudaModuleNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &module ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createCudaModuleNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CudaModuleNV( *this, *reinterpret_cast( &module ), allocator ); + } + + // wrapper function for command vkGetCudaModuleCacheNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCudaModuleCacheNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector CudaModuleNV::getCache() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetCudaModuleCacheNV && "Function requires " ); + + std::vector cacheData; + size_t cacheSize; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetCudaModuleCacheNV( static_cast( m_device ), static_cast( m_cudaModuleNV ), &cacheSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && cacheSize ) + { + cacheData.resize( cacheSize ); + result = static_cast( getDispatcher()->vkGetCudaModuleCacheNV( + static_cast( m_device ), static_cast( m_cudaModuleNV ), &cacheSize, reinterpret_cast( cacheData.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::CudaModuleNV::getCache" ); + VULKAN_HPP_ASSERT( cacheSize <= cacheData.size() ); + if ( cacheSize < cacheData.size() ) + { + cacheData.resize( cacheSize ); + } + return cacheData; + } + + // wrapper function for command vkCreateCudaFunctionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateCudaFunctionNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createCudaFunctionNV( VULKAN_HPP_NAMESPACE::CudaFunctionCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::CudaFunctionNV function; + Result result = static_cast( getDispatcher()->vkCreateCudaFunctionNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &function ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createCudaFunctionNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CudaFunctionNV( *this, *reinterpret_cast( &function ), allocator ); + } + + // wrapper function for command vkCmdCudaLaunchKernelNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCudaLaunchKernelNV.html + VULKAN_HPP_INLINE void CommandBuffer::cudaLaunchKernelNV( const VULKAN_HPP_NAMESPACE::CudaLaunchInfoNV & launchInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCudaLaunchKernelNV && "Function requires " ); + + getDispatcher()->vkCmdCudaLaunchKernelNV( static_cast( m_commandBuffer ), reinterpret_cast( &launchInfo ) ); + } +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_QCOM_tile_shading === + + // wrapper function for command vkCmdDispatchTileQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchTileQCOM.html + VULKAN_HPP_INLINE void CommandBuffer::dispatchTileQCOM( const VULKAN_HPP_NAMESPACE::DispatchTileInfoQCOM & dispatchTileInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchTileQCOM && "Function requires " ); + + getDispatcher()->vkCmdDispatchTileQCOM( static_cast( m_commandBuffer ), + reinterpret_cast( &dispatchTileInfo ) ); + } + + // wrapper function for command vkCmdBeginPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBeginPerTileExecutionQCOM.html + VULKAN_HPP_INLINE void + CommandBuffer::beginPerTileExecutionQCOM( const VULKAN_HPP_NAMESPACE::PerTileBeginInfoQCOM & perTileBeginInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginPerTileExecutionQCOM && "Function requires " ); + + getDispatcher()->vkCmdBeginPerTileExecutionQCOM( static_cast( m_commandBuffer ), + reinterpret_cast( &perTileBeginInfo ) ); + } + + // wrapper function for command vkCmdEndPerTileExecutionQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndPerTileExecutionQCOM.html + VULKAN_HPP_INLINE void CommandBuffer::endPerTileExecutionQCOM( const VULKAN_HPP_NAMESPACE::PerTileEndInfoQCOM & perTileEndInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndPerTileExecutionQCOM && "Function requires " ); + + getDispatcher()->vkCmdEndPerTileExecutionQCOM( static_cast( m_commandBuffer ), + reinterpret_cast( &perTileEndInfo ) ); + } + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + // wrapper function for command vkExportMetalObjectsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkExportMetalObjectsEXT.html + VULKAN_HPP_INLINE void Device::exportMetalObjectsEXT( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT & metalObjectsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkExportMetalObjectsEXT && "Function requires " ); + + getDispatcher()->vkExportMetalObjectsEXT( static_cast( m_device ), reinterpret_cast( &metalObjectsInfo ) ); + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_synchronization2 === + + // wrapper function for command vkCmdSetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetEvent2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, + const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetEvent2KHR && "Function requires or " ); + + getDispatcher()->vkCmdSetEvent2KHR( + static_cast( m_commandBuffer ), static_cast( event ), reinterpret_cast( &dependencyInfo ) ); + } + + // wrapper function for command vkCmdResetEvent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResetEvent2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResetEvent2KHR && "Function requires or " ); + + getDispatcher()->vkCmdResetEvent2KHR( + static_cast( m_commandBuffer ), static_cast( event ), static_cast( stageMask ) ); + } + + // wrapper function for command vkCmdWaitEvents2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWaitEvents2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( ArrayProxy const & events, + ArrayProxy const & dependencyInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWaitEvents2KHR && "Function requires or " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() ); +# else + if ( events.size() != dependencyInfos.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::waitEvents2KHR: events.size() != dependencyInfos.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdWaitEvents2KHR( static_cast( m_commandBuffer ), + events.size(), + reinterpret_cast( events.data() ), + reinterpret_cast( dependencyInfos.data() ) ); + } + + // wrapper function for command vkCmdPipelineBarrier2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPipelineBarrier2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPipelineBarrier2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdPipelineBarrier2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &dependencyInfo ) ); + } + + // wrapper function for command vkCmdWriteTimestamp2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteTimestamp2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t query ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteTimestamp2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdWriteTimestamp2KHR( + static_cast( m_commandBuffer ), static_cast( stage ), static_cast( queryPool ), query ); + } + + // wrapper function for command vkQueueSubmit2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueSubmit2KHR.html + VULKAN_HPP_INLINE void Queue::submit2KHR( ArrayProxy const & submits, VULKAN_HPP_NAMESPACE::Fence fence ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSubmit2KHR && "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkQueueSubmit2KHR( + static_cast( m_queue ), submits.size(), reinterpret_cast( submits.data() ), static_cast( fence ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2KHR" ); + } + + //=== VK_EXT_descriptor_buffer === + + // wrapper function for command vkGetDescriptorSetLayoutSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutSizeEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceSize DescriptorSetLayout::getSizeEXT() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutSizeEXT && "Function requires " ); + + VULKAN_HPP_NAMESPACE::DeviceSize layoutSizeInBytes; + getDispatcher()->vkGetDescriptorSetLayoutSizeEXT( static_cast( m_device ), + static_cast( m_descriptorSetLayout ), + reinterpret_cast( &layoutSizeInBytes ) ); + + return layoutSizeInBytes; + } + + // wrapper function for command vkGetDescriptorSetLayoutBindingOffsetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceSize + DescriptorSetLayout::getBindingOffsetEXT( uint32_t binding ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutBindingOffsetEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::DeviceSize offset; + getDispatcher()->vkGetDescriptorSetLayoutBindingOffsetEXT( + static_cast( m_device ), static_cast( m_descriptorSetLayout ), binding, reinterpret_cast( &offset ) ); + + return offset; + } + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + VULKAN_HPP_INLINE void Device::getDescriptorEXT( const VULKAN_HPP_NAMESPACE::DescriptorGetInfoEXT & descriptorInfo, + size_t dataSize, + void * pDescriptor ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorEXT && "Function requires " ); + + getDispatcher()->vkGetDescriptorEXT( + static_cast( m_device ), reinterpret_cast( &descriptorInfo ), dataSize, pDescriptor ); + } + + // wrapper function for command vkGetDescriptorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DescriptorType + Device::getDescriptorEXT( const VULKAN_HPP_NAMESPACE::DescriptorGetInfoEXT & descriptorInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorEXT && "Function requires " ); + + VULKAN_HPP_NAMESPACE::DescriptorType descriptor; + getDispatcher()->vkGetDescriptorEXT( static_cast( m_device ), + reinterpret_cast( &descriptorInfo ), + sizeof( DescriptorType ), + reinterpret_cast( &descriptor ) ); + + return descriptor; + } + + // wrapper function for command vkCmdBindDescriptorBuffersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBuffersEXT.html + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorBuffersEXT( + ArrayProxy const & bindingInfos ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindDescriptorBuffersEXT && "Function requires " ); + + getDispatcher()->vkCmdBindDescriptorBuffersEXT( static_cast( m_commandBuffer ), + bindingInfos.size(), + reinterpret_cast( bindingInfos.data() ) ); + } + + // wrapper function for command vkCmdSetDescriptorBufferOffsetsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDescriptorBufferOffsetsEXT( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t firstSet, + ArrayProxy const & bufferIndices, + ArrayProxy const & offsets ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDescriptorBufferOffsetsEXT && + "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( bufferIndices.size() == offsets.size() ); +# else + if ( bufferIndices.size() != offsets.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::setDescriptorBufferOffsetsEXT: bufferIndices.size() != offsets.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdSetDescriptorBufferOffsetsEXT( static_cast( m_commandBuffer ), + static_cast( pipelineBindPoint ), + static_cast( layout ), + firstSet, + bufferIndices.size(), + bufferIndices.data(), + reinterpret_cast( offsets.data() ) ); + } + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplersEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.html + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorBufferEmbeddedSamplersEXT( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::PipelineLayout layout, + uint32_t set ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindDescriptorBufferEmbeddedSamplersEXT && + "Function requires " ); + + getDispatcher()->vkCmdBindDescriptorBufferEmbeddedSamplersEXT( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( layout ), set ); + } + + // wrapper function for command vkGetBufferOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::getBufferOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::BufferCaptureDescriptorDataInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferOpaqueCaptureDescriptorDataEXT && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetBufferOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getBufferOpaqueCaptureDescriptorDataEXT" ); + + return data; + } + + // wrapper function for command vkGetImageOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::getImageOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::ImageCaptureDescriptorDataInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageOpaqueCaptureDescriptorDataEXT && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetImageOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getImageOpaqueCaptureDescriptorDataEXT" ); + + return data; + } + + // wrapper function for command vkGetImageViewOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::getImageViewOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::ImageViewCaptureDescriptorDataInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewOpaqueCaptureDescriptorDataEXT && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetImageViewOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getImageViewOpaqueCaptureDescriptorDataEXT" ); + + return data; + } + + // wrapper function for command vkGetSamplerOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::getSamplerOpaqueCaptureDescriptorDataEXT( const VULKAN_HPP_NAMESPACE::SamplerCaptureDescriptorDataInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSamplerOpaqueCaptureDescriptorDataEXT && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetSamplerOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSamplerOpaqueCaptureDescriptorDataEXT" ); + + return data; + } + + // wrapper function for command vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Device::getAccelerationStructureOpaqueCaptureDescriptorDataEXT( + const VULKAN_HPP_NAMESPACE::AccelerationStructureCaptureDescriptorDataInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureOpaqueCaptureDescriptorDataEXT" ); + + return data; + } + + //=== VK_NV_fragment_shading_rate_enums === + + // wrapper function for command vkCmdSetFragmentShadingRateEnumNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetFragmentShadingRateEnumNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setFragmentShadingRateEnumNV( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate, + const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetFragmentShadingRateEnumNV && + "Function requires " ); + + getDispatcher()->vkCmdSetFragmentShadingRateEnumNV( static_cast( m_commandBuffer ), + static_cast( shadingRate ), + reinterpret_cast( combinerOps ) ); + } + + //=== VK_EXT_mesh_shader === + + // wrapper function for command vkCmdDrawMeshTasksEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksEXT.html + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksEXT( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksEXT && "Function requires " ); + + getDispatcher()->vkCmdDrawMeshTasksEXT( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectEXT.html + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectEXT( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + uint32_t drawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksIndirectEXT && "Function requires " ); + + getDispatcher()->vkCmdDrawMeshTasksIndirectEXT( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ), drawCount, stride ); + } + + // wrapper function for command vkCmdDrawMeshTasksIndirectCountEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMeshTasksIndirectCountEXT.html + VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksIndirectCountEXT( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::Buffer countBuffer, + VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMeshTasksIndirectCountEXT && "Function requires " ); + + getDispatcher()->vkCmdDrawMeshTasksIndirectCountEXT( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( countBuffer ), + static_cast( countBufferOffset ), + maxDrawCount, + stride ); + } + + //=== VK_KHR_copy_commands2 === + + // wrapper function for command vkCmdCopyBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBuffer2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBuffer2KHR && "Function requires or " ); + + getDispatcher()->vkCmdCopyBuffer2KHR( static_cast( m_commandBuffer ), reinterpret_cast( ©BufferInfo ) ); + } + + // wrapper function for command vkCmdCopyImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImage2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImage2KHR && "Function requires or " ); + + getDispatcher()->vkCmdCopyImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( ©ImageInfo ) ); + } + + // wrapper function for command vkCmdCopyBufferToImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2KHR.html + VULKAN_HPP_INLINE void + CommandBuffer::copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBufferToImage2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdCopyBufferToImage2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( ©BufferToImageInfo ) ); + } + + // wrapper function for command vkCmdCopyImageToBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyImageToBuffer2KHR.html + VULKAN_HPP_INLINE void + CommandBuffer::copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImageToBuffer2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdCopyImageToBuffer2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( ©ImageToBufferInfo ) ); + } + + // wrapper function for command vkCmdBlitImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBlitImage2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBlitImage2KHR && "Function requires or " ); + + getDispatcher()->vkCmdBlitImage2KHR( static_cast( m_commandBuffer ), reinterpret_cast( &blitImageInfo ) ); + } + + // wrapper function for command vkCmdResolveImage2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdResolveImage2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResolveImage2KHR && "Function requires or " ); + + getDispatcher()->vkCmdResolveImage2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &resolveImageInfo ) ); + } + + //=== VK_EXT_device_fault === + // wrapper function for command vkGetDeviceFaultInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceFaultInfoEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getFaultInfoEXT( DeviceFaultCountsEXT * pFaultCounts, + DeviceFaultInfoEXT * pFaultInfo, + Dispatch const & d ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + return static_cast( d.vkGetDeviceFaultInfoEXT( static_cast( m_device ), + reinterpret_cast( pFaultCounts ), + reinterpret_cast( pFaultInfo ) ) ); + } +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + + // wrapper function for command vkAcquireWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAcquireWinrtDisplayNV.html + VULKAN_HPP_INLINE void DisplayKHR::acquireWinrtNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireWinrtDisplayNV && "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkAcquireWinrtDisplayNV( static_cast( m_physicalDevice ), static_cast( m_displayKHR ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::acquireWinrtNV" ); + } + + // wrapper function for command vkGetWinrtDisplayNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetWinrtDisplayNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DisplayKHR display; + Result result = static_cast( getDispatcher()->vkGetWinrtDisplayNV( + static_cast( m_physicalDevice ), deviceRelativeId, reinterpret_cast( &display ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "PhysicalDevice::getWinrtDisplayNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, *reinterpret_cast( &display ) ); + } +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + // wrapper function for command vkCreateDirectFBSurfaceEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDirectFBSurfaceEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createDirectFBSurfaceEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateDirectFBSurfaceEXT( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createDirectFBSurfaceEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + // wrapper function for command vkGetPhysicalDeviceDirectFBPresentationSupportEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDirectFBPresentationSupportEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Bool32 PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, + IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDirectFBPresentationSupportEXT && + "Function requires " ); + + VkBool32 result = + getDispatcher()->vkGetPhysicalDeviceDirectFBPresentationSupportEXT( static_cast( m_physicalDevice ), queueFamilyIndex, &dfb ); + + return static_cast( result ); + } +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_vertex_input_dynamic_state === + + // wrapper function for command vkCmdSetVertexInputEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetVertexInputEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setVertexInputEXT( + ArrayProxy const & vertexBindingDescriptions, + ArrayProxy const & vertexAttributeDescriptions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetVertexInputEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetVertexInputEXT( static_cast( m_commandBuffer ), + vertexBindingDescriptions.size(), + reinterpret_cast( vertexBindingDescriptions.data() ), + vertexAttributeDescriptions.size(), + reinterpret_cast( vertexAttributeDescriptions.data() ) ); + } + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + + // wrapper function for command vkGetMemoryZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandleFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t + Device::getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryZirconHandleFUCHSIA && "Function requires " ); + + zx_handle_t zirconHandle; + Result result = static_cast( getDispatcher()->vkGetMemoryZirconHandleFUCHSIA( + static_cast( m_device ), reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandleFUCHSIA" ); + + return zirconHandle; + } + + // wrapper function for command vkGetMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryZirconHandlePropertiesFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA + Device::getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryZirconHandlePropertiesFUCHSIA && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA memoryZirconHandleProperties; + Result result = static_cast( getDispatcher()->vkGetMemoryZirconHandlePropertiesFUCHSIA( + static_cast( m_device ), + static_cast( handleType ), + zirconHandle, + reinterpret_cast( &memoryZirconHandleProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryZirconHandlePropertiesFUCHSIA" ); + + return memoryZirconHandleProperties; + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + + // wrapper function for command vkImportSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkImportSemaphoreZirconHandleFUCHSIA.html + VULKAN_HPP_INLINE void + Device::importSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreZirconHandleFUCHSIA && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkImportSemaphoreZirconHandleFUCHSIA( + static_cast( m_device ), reinterpret_cast( &importSemaphoreZirconHandleInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::importSemaphoreZirconHandleFUCHSIA" ); + } + + // wrapper function for command vkGetSemaphoreZirconHandleFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetSemaphoreZirconHandleFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t + Device::getSemaphoreZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreZirconHandleFUCHSIA && + "Function requires " ); + + zx_handle_t zirconHandle; + Result result = static_cast( getDispatcher()->vkGetSemaphoreZirconHandleFUCHSIA( + static_cast( m_device ), reinterpret_cast( &getZirconHandleInfo ), &zirconHandle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getSemaphoreZirconHandleFUCHSIA" ); + + return zirconHandle; + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + // wrapper function for command vkCreateBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateBufferCollectionFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection; + Result result = + static_cast( getDispatcher()->vkCreateBufferCollectionFUCHSIA( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &collection ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createBufferCollectionFUCHSIA" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA( + *this, *reinterpret_cast( &collection ), allocator ); + } + + // wrapper function for command vkSetBufferCollectionImageConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionImageConstraintsFUCHSIA.html + VULKAN_HPP_INLINE void BufferCollectionFUCHSIA::setImageConstraints( const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetBufferCollectionImageConstraintsFUCHSIA && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkSetBufferCollectionImageConstraintsFUCHSIA( static_cast( m_device ), + static_cast( m_bufferCollectionFUCHSIA ), + reinterpret_cast( &imageConstraintsInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::setImageConstraints" ); + } + + // wrapper function for command vkSetBufferCollectionBufferConstraintsFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetBufferCollectionBufferConstraintsFUCHSIA.html + VULKAN_HPP_INLINE void + BufferCollectionFUCHSIA::setBufferConstraints( const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetBufferCollectionBufferConstraintsFUCHSIA && + "Function requires " ); + + Result result = static_cast( + getDispatcher()->vkSetBufferCollectionBufferConstraintsFUCHSIA( static_cast( m_device ), + static_cast( m_bufferCollectionFUCHSIA ), + reinterpret_cast( &bufferConstraintsInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::setBufferConstraints" ); + } + + // wrapper function for command vkGetBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetBufferCollectionPropertiesFUCHSIA.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA BufferCollectionFUCHSIA::getProperties() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetBufferCollectionPropertiesFUCHSIA && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA properties; + Result result = static_cast( + getDispatcher()->vkGetBufferCollectionPropertiesFUCHSIA( static_cast( m_device ), + static_cast( m_bufferCollectionFUCHSIA ), + reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::getProperties" ); + + return properties; + } +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_HUAWEI_subpass_shading === + + // wrapper function for command vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D RenderPass::getSubpassShadingMaxWorkgroupSizeHUAWEI() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::Extent2D maxWorkgroupSize; + Result result = static_cast( getDispatcher()->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + static_cast( m_device ), static_cast( m_renderPass ), reinterpret_cast( &maxWorkgroupSize ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::RenderPass::getSubpassShadingMaxWorkgroupSizeHUAWEI" ); + + return maxWorkgroupSize; + } + + // wrapper function for command vkCmdSubpassShadingHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSubpassShadingHUAWEI.html + VULKAN_HPP_INLINE void CommandBuffer::subpassShadingHUAWEI() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSubpassShadingHUAWEI && "Function requires " ); + + getDispatcher()->vkCmdSubpassShadingHUAWEI( static_cast( m_commandBuffer ) ); + } + + //=== VK_HUAWEI_invocation_mask === + + // wrapper function for command vkCmdBindInvocationMaskHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindInvocationMaskHUAWEI.html + VULKAN_HPP_INLINE void CommandBuffer::bindInvocationMaskHUAWEI( VULKAN_HPP_NAMESPACE::ImageView imageView, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindInvocationMaskHUAWEI && "Function requires " ); + + getDispatcher()->vkCmdBindInvocationMaskHUAWEI( + static_cast( m_commandBuffer ), static_cast( imageView ), static_cast( imageLayout ) ); + } + + //=== VK_NV_external_memory_rdma === + + // wrapper function for command vkGetMemoryRemoteAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryRemoteAddressNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::RemoteAddressNV + Device::getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryRemoteAddressNV && "Function requires " ); + + VULKAN_HPP_NAMESPACE::RemoteAddressNV address; + Result result = static_cast( + getDispatcher()->vkGetMemoryRemoteAddressNV( static_cast( m_device ), + reinterpret_cast( &memoryGetRemoteAddressInfo ), + reinterpret_cast( &address ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryRemoteAddressNV" ); + + return address; + } + + //=== VK_EXT_pipeline_properties === + + // wrapper function for command vkGetPipelinePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelinePropertiesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::BaseOutStructure + Device::getPipelinePropertiesEXT( const VULKAN_HPP_NAMESPACE::PipelineInfoEXT & pipelineInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelinePropertiesEXT && "Function requires " ); + + VULKAN_HPP_NAMESPACE::BaseOutStructure pipelineProperties; + Result result = static_cast( getDispatcher()->vkGetPipelinePropertiesEXT( static_cast( m_device ), + reinterpret_cast( &pipelineInfo ), + reinterpret_cast( &pipelineProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelinePropertiesEXT" ); + + return pipelineProperties; + } + + //=== VK_EXT_extended_dynamic_state2 === + + // wrapper function for command vkCmdSetPatchControlPointsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPatchControlPointsEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setPatchControlPointsEXT( uint32_t patchControlPoints ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPatchControlPointsEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetPatchControlPointsEXT( static_cast( m_commandBuffer ), patchControlPoints ); + } + + // wrapper function for command vkCmdSetRasterizerDiscardEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizerDiscardEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkCmdSetRasterizerDiscardEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetRasterizerDiscardEnableEXT( static_cast( m_commandBuffer ), static_cast( rasterizerDiscardEnable ) ); + } + + // wrapper function for command vkCmdSetDepthBiasEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthBiasEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthBiasEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetDepthBiasEnableEXT( static_cast( m_commandBuffer ), static_cast( depthBiasEnable ) ); + } + + // wrapper function for command vkCmdSetLogicOpEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setLogicOpEXT( VULKAN_HPP_NAMESPACE::LogicOp logicOp ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLogicOpEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetLogicOpEXT( static_cast( m_commandBuffer ), static_cast( logicOp ) ); + } + + // wrapper function for command vkCmdSetPrimitiveRestartEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPrimitiveRestartEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkCmdSetPrimitiveRestartEnableEXT && + "Function requires or or " ); + + getDispatcher()->vkCmdSetPrimitiveRestartEnableEXT( static_cast( m_commandBuffer ), static_cast( primitiveRestartEnable ) ); + } + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + // wrapper function for command vkCreateScreenSurfaceQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateScreenSurfaceQNX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createScreenSurfaceQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateScreenSurfaceQNX( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createScreenSurfaceQNX" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } + + // wrapper function for command vkGetPhysicalDeviceScreenPresentationSupportQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceScreenPresentationSupportQNX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Bool32 PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex, + struct _screen_window & window ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceScreenPresentationSupportQNX && + "Function requires " ); + + VkBool32 result = + getDispatcher()->vkGetPhysicalDeviceScreenPresentationSupportQNX( static_cast( m_physicalDevice ), queueFamilyIndex, &window ); + + return static_cast( result ); + } +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_color_write_enable === + + // wrapper function for command vkCmdSetColorWriteEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteEnableEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setColorWriteEnableEXT( ArrayProxy const & colorWriteEnables ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetColorWriteEnableEXT && "Function requires " ); + + getDispatcher()->vkCmdSetColorWriteEnableEXT( + static_cast( m_commandBuffer ), colorWriteEnables.size(), reinterpret_cast( colorWriteEnables.data() ) ); + } + + //=== VK_KHR_ray_tracing_maintenance1 === + + // wrapper function for command vkCmdTraceRaysIndirect2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdTraceRaysIndirect2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirect2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysIndirect2KHR && "Function requires " ); + + getDispatcher()->vkCmdTraceRaysIndirect2KHR( static_cast( m_commandBuffer ), static_cast( indirectDeviceAddress ) ); + } + + //=== VK_EXT_multi_draw === + + // wrapper function for command vkCmdDrawMultiEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiEXT.html + VULKAN_HPP_INLINE void CommandBuffer::drawMultiEXT( StridedArrayProxy const & vertexInfo, + uint32_t instanceCount, + uint32_t firstInstance ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMultiEXT && "Function requires " ); + + getDispatcher()->vkCmdDrawMultiEXT( static_cast( m_commandBuffer ), + vertexInfo.size(), + reinterpret_cast( vertexInfo.data() ), + instanceCount, + firstInstance, + vertexInfo.stride() ); + } + + // wrapper function for command vkCmdDrawMultiIndexedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawMultiIndexedEXT.html + VULKAN_HPP_INLINE void CommandBuffer::drawMultiIndexedEXT( StridedArrayProxy const & indexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + Optional vertexOffset ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawMultiIndexedEXT && "Function requires " ); + + getDispatcher()->vkCmdDrawMultiIndexedEXT( static_cast( m_commandBuffer ), + indexInfo.size(), + reinterpret_cast( indexInfo.data() ), + instanceCount, + firstInstance, + indexInfo.stride(), + vertexOffset.get() ); + } + + //=== VK_EXT_opacity_micromap === + + // wrapper function for command vkCreateMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateMicromapEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createMicromapEXT( VULKAN_HPP_NAMESPACE::MicromapCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::MicromapEXT micromap; + Result result = static_cast( getDispatcher()->vkCreateMicromapEXT( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( µmap ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createMicromapEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::MicromapEXT( *this, *reinterpret_cast( µmap ), allocator ); + } + + // wrapper function for command vkCmdBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildMicromapsEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::buildMicromapsEXT( ArrayProxy const & infos ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildMicromapsEXT && "Function requires " ); + + getDispatcher()->vkCmdBuildMicromapsEXT( + static_cast( m_commandBuffer ), infos.size(), reinterpret_cast( infos.data() ) ); + } + + // wrapper function for command vkBuildMicromapsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBuildMicromapsEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::buildMicromapsEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + ArrayProxy const & infos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBuildMicromapsEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBuildMicromapsEXT( static_cast( m_device ), + static_cast( deferredOperation ), + infos.size(), + reinterpret_cast( infos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::buildMicromapsEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMicromapEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMicromapEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkCopyMicromapEXT( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMicromapEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkCopyMicromapToMemoryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMicromapToMemoryEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMicromapToMemoryEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMicromapToMemoryInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMicromapToMemoryEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkCopyMicromapToMemoryEXT( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMicromapToMemoryEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkCopyMemoryToMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToMicromapEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToMicromapEXT( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation, + const VULKAN_HPP_NAMESPACE::CopyMemoryToMicromapInfoEXT & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCopyMemoryToMicromapEXT && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkCopyMemoryToMicromapEXT( static_cast( m_device ), + static_cast( deferredOperation ), + reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, + VULKAN_HPP_NAMESPACE_STRING "::Device::copyMemoryToMicromapEXT", + { Result::eSuccess, Result::eOperationDeferredKHR, Result::eOperationNotDeferredKHR } ); + + return static_cast( result ); + } + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Device::writeMicromapsPropertiesEXT( + ArrayProxy const & micromaps, VULKAN_HPP_NAMESPACE::QueryType queryType, size_t dataSize, size_t stride ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWriteMicromapsPropertiesEXT && "Function requires " ); + + VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 ); + std::vector data( dataSize / sizeof( DataType ) ); + Result result = static_cast( getDispatcher()->vkWriteMicromapsPropertiesEXT( static_cast( m_device ), + micromaps.size(), + reinterpret_cast( micromaps.data() ), + static_cast( queryType ), + data.size() * sizeof( DataType ), + reinterpret_cast( data.data() ), + stride ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeMicromapsPropertiesEXT" ); + + return data; + } + + // wrapper function for command vkWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkWriteMicromapsPropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType Device::writeMicromapsPropertyEXT( ArrayProxy const & micromaps, + VULKAN_HPP_NAMESPACE::QueryType queryType, + size_t stride ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWriteMicromapsPropertiesEXT && "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkWriteMicromapsPropertiesEXT( static_cast( m_device ), + micromaps.size(), + reinterpret_cast( micromaps.data() ), + static_cast( queryType ), + sizeof( DataType ), + reinterpret_cast( &data ), + stride ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::writeMicromapsPropertyEXT" ); + + return data; + } + + // wrapper function for command vkCmdCopyMicromapEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapEXT.html + VULKAN_HPP_INLINE void CommandBuffer::copyMicromapEXT( const VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMicromapEXT && "Function requires " ); + + getDispatcher()->vkCmdCopyMicromapEXT( static_cast( m_commandBuffer ), reinterpret_cast( &info ) ); + } + + // wrapper function for command vkCmdCopyMicromapToMemoryEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMicromapToMemoryEXT.html + VULKAN_HPP_INLINE void CommandBuffer::copyMicromapToMemoryEXT( const VULKAN_HPP_NAMESPACE::CopyMicromapToMemoryInfoEXT & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMicromapToMemoryEXT && "Function requires " ); + + getDispatcher()->vkCmdCopyMicromapToMemoryEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &info ) ); + } + + // wrapper function for command vkCmdCopyMemoryToMicromapEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToMicromapEXT.html + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToMicromapEXT( const VULKAN_HPP_NAMESPACE::CopyMemoryToMicromapInfoEXT & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMemoryToMicromapEXT && "Function requires " ); + + getDispatcher()->vkCmdCopyMemoryToMicromapEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &info ) ); + } + + // wrapper function for command vkCmdWriteMicromapsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdWriteMicromapsPropertiesEXT.html + VULKAN_HPP_INLINE void CommandBuffer::writeMicromapsPropertiesEXT( ArrayProxy const & micromaps, + VULKAN_HPP_NAMESPACE::QueryType queryType, + VULKAN_HPP_NAMESPACE::QueryPool queryPool, + uint32_t firstQuery ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteMicromapsPropertiesEXT && + "Function requires " ); + + getDispatcher()->vkCmdWriteMicromapsPropertiesEXT( static_cast( m_commandBuffer ), + micromaps.size(), + reinterpret_cast( micromaps.data() ), + static_cast( queryType ), + static_cast( queryPool ), + firstQuery ); + } + + // wrapper function for command vkGetDeviceMicromapCompatibilityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceMicromapCompatibilityEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR + Device::getMicromapCompatibilityEXT( const VULKAN_HPP_NAMESPACE::MicromapVersionInfoEXT & versionInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceMicromapCompatibilityEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR compatibility; + getDispatcher()->vkGetDeviceMicromapCompatibilityEXT( static_cast( m_device ), + reinterpret_cast( &versionInfo ), + reinterpret_cast( &compatibility ) ); + + return compatibility; + } + + // wrapper function for command vkGetMicromapBuildSizesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMicromapBuildSizesEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MicromapBuildSizesInfoEXT + Device::getMicromapBuildSizesEXT( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType, + const VULKAN_HPP_NAMESPACE::MicromapBuildInfoEXT & buildInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMicromapBuildSizesEXT && "Function requires " ); + + VULKAN_HPP_NAMESPACE::MicromapBuildSizesInfoEXT sizeInfo; + getDispatcher()->vkGetMicromapBuildSizesEXT( static_cast( m_device ), + static_cast( buildType ), + reinterpret_cast( &buildInfo ), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } + + //=== VK_HUAWEI_cluster_culling_shader === + + // wrapper function for command vkCmdDrawClusterHUAWEI, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterHUAWEI.html + VULKAN_HPP_INLINE void CommandBuffer::drawClusterHUAWEI( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawClusterHUAWEI && "Function requires " ); + + getDispatcher()->vkCmdDrawClusterHUAWEI( static_cast( m_commandBuffer ), groupCountX, groupCountY, groupCountZ ); + } + + // wrapper function for command vkCmdDrawClusterIndirectHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDrawClusterIndirectHUAWEI.html + VULKAN_HPP_INLINE void CommandBuffer::drawClusterIndirectHUAWEI( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDrawClusterIndirectHUAWEI && + "Function requires " ); + + getDispatcher()->vkCmdDrawClusterIndirectHUAWEI( + static_cast( m_commandBuffer ), static_cast( buffer ), static_cast( offset ) ); + } + + //=== VK_EXT_pageable_device_local_memory === + + // wrapper function for command vkSetDeviceMemoryPriorityEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetDeviceMemoryPriorityEXT.html + VULKAN_HPP_INLINE void DeviceMemory::setPriorityEXT( float priority ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetDeviceMemoryPriorityEXT && + "Function requires " ); + + getDispatcher()->vkSetDeviceMemoryPriorityEXT( static_cast( m_device ), static_cast( m_deviceMemory ), priority ); + } + + //=== VK_KHR_maintenance4 === + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceBufferMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceBufferMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceImageMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageMemoryRequirementsKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkGetDeviceImageSparseMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSparseMemoryRequirementsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR && + "Function requires or " ); + + std::vector sparseMemoryRequirements; + uint32_t sparseMemoryRequirementCount; + getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR( + static_cast( m_device ), reinterpret_cast( &info ), &sparseMemoryRequirementCount, nullptr ); + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR( static_cast( m_device ), + reinterpret_cast( &info ), + &sparseMemoryRequirementCount, + reinterpret_cast( sparseMemoryRequirements.data() ) ); + + VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() ); + if ( sparseMemoryRequirementCount < sparseMemoryRequirements.size() ) + { + sparseMemoryRequirements.resize( sparseMemoryRequirementCount ); + } + return sparseMemoryRequirements; + } + + //=== VK_VALVE_descriptor_set_host_mapping === + + // wrapper function for command vkGetDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetLayoutHostMappingInfoVALVE.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE Device::getDescriptorSetLayoutHostMappingInfoVALVE( + const VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE & bindingReference ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetLayoutHostMappingInfoVALVE && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE hostMapping; + getDispatcher()->vkGetDescriptorSetLayoutHostMappingInfoVALVE( static_cast( m_device ), + reinterpret_cast( &bindingReference ), + reinterpret_cast( &hostMapping ) ); + + return hostMapping; + } + + // wrapper function for command vkGetDescriptorSetHostMappingVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDescriptorSetHostMappingVALVE.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * DescriptorSet::getHostMappingVALVE() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDescriptorSetHostMappingVALVE && + "Function requires " ); + + void * pData; + getDispatcher()->vkGetDescriptorSetHostMappingVALVE( static_cast( m_device ), static_cast( m_descriptorSet ), &pData ); + + return pData; + } + + //=== VK_NV_copy_memory_indirect === + + // wrapper function for command vkCmdCopyMemoryIndirectNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryIndirectNV.html + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryIndirectNV( VULKAN_HPP_NAMESPACE::DeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMemoryIndirectNV && "Function requires " ); + + getDispatcher()->vkCmdCopyMemoryIndirectNV( + static_cast( m_commandBuffer ), static_cast( copyBufferAddress ), copyCount, stride ); + } + + // wrapper function for command vkCmdCopyMemoryToImageIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyMemoryToImageIndirectNV.html + VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToImageIndirectNV( + VULKAN_HPP_NAMESPACE::DeviceAddress copyBufferAddress, + uint32_t stride, + VULKAN_HPP_NAMESPACE::Image dstImage, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout, + ArrayProxy const & imageSubresources ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyMemoryToImageIndirectNV && + "Function requires " ); + + getDispatcher()->vkCmdCopyMemoryToImageIndirectNV( static_cast( m_commandBuffer ), + static_cast( copyBufferAddress ), + imageSubresources.size(), + stride, + static_cast( dstImage ), + static_cast( dstImageLayout ), + reinterpret_cast( imageSubresources.data() ) ); + } + + //=== VK_NV_memory_decompression === + + // wrapper function for command vkCmdDecompressMemoryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryNV.html + VULKAN_HPP_INLINE void CommandBuffer::decompressMemoryNV( + ArrayProxy const & decompressMemoryRegions ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDecompressMemoryNV && "Function requires " ); + + getDispatcher()->vkCmdDecompressMemoryNV( static_cast( m_commandBuffer ), + decompressMemoryRegions.size(), + reinterpret_cast( decompressMemoryRegions.data() ) ); + } + + // wrapper function for command vkCmdDecompressMemoryIndirectCountNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDecompressMemoryIndirectCountNV.html + VULKAN_HPP_INLINE void CommandBuffer::decompressMemoryIndirectCountNV( VULKAN_HPP_NAMESPACE::DeviceAddress indirectCommandsAddress, + VULKAN_HPP_NAMESPACE::DeviceAddress indirectCommandsCountAddress, + uint32_t stride ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDecompressMemoryIndirectCountNV && + "Function requires " ); + + getDispatcher()->vkCmdDecompressMemoryIndirectCountNV( static_cast( m_commandBuffer ), + static_cast( indirectCommandsAddress ), + static_cast( indirectCommandsCountAddress ), + stride ); + } + + //=== VK_NV_device_generated_commands_compute === + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getPipelineIndirectMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineIndirectMemoryRequirementsNV && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetPipelineIndirectMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetPipelineIndirectMemoryRequirementsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectMemoryRequirementsNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getPipelineIndirectMemoryRequirementsNV( const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineIndirectMemoryRequirementsNV && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetPipelineIndirectMemoryRequirementsNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkCmdUpdatePipelineIndirectBufferNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdUpdatePipelineIndirectBufferNV.html + VULKAN_HPP_INLINE void CommandBuffer::updatePipelineIndirectBufferNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint, + VULKAN_HPP_NAMESPACE::Pipeline pipeline ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdUpdatePipelineIndirectBufferNV && + "Function requires " ); + + getDispatcher()->vkCmdUpdatePipelineIndirectBufferNV( + static_cast( m_commandBuffer ), static_cast( pipelineBindPoint ), static_cast( pipeline ) ); + } + + // wrapper function for command vkGetPipelineIndirectDeviceAddressNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineIndirectDeviceAddressNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DeviceAddress + Device::getPipelineIndirectAddressNV( const VULKAN_HPP_NAMESPACE::PipelineIndirectDeviceAddressInfoNV & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineIndirectDeviceAddressNV && + "Function requires " ); + + VkDeviceAddress result = getDispatcher()->vkGetPipelineIndirectDeviceAddressNV( + static_cast( m_device ), reinterpret_cast( &info ) ); + + return static_cast( result ); + } + + //=== VK_EXT_extended_dynamic_state3 === + + // wrapper function for command vkCmdSetDepthClampEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthClampEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthClampEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetDepthClampEnableEXT( static_cast( m_commandBuffer ), static_cast( depthClampEnable ) ); + } + + // wrapper function for command vkCmdSetPolygonModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetPolygonModeEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setPolygonModeEXT( VULKAN_HPP_NAMESPACE::PolygonMode polygonMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetPolygonModeEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetPolygonModeEXT( static_cast( m_commandBuffer ), static_cast( polygonMode ) ); + } + + // wrapper function for command vkCmdSetRasterizationSamplesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationSamplesEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setRasterizationSamplesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRasterizationSamplesEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetRasterizationSamplesEXT( static_cast( m_commandBuffer ), + static_cast( rasterizationSamples ) ); + } + + // wrapper function for command vkCmdSetSampleMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleMaskEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setSampleMaskEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples, + ArrayProxy const & sampleMask ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetSampleMaskEXT && + "Function requires or " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( sampleMask.size() == ( static_cast( samples ) + 31 ) / 32 ); +# else + if ( sampleMask.size() != ( static_cast( samples ) + 31 ) / 32 ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::CommandBuffer::setSampleMaskEXT: sampleMask.size() != ( static_cast( samples ) + 31 ) / 32" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdSetSampleMaskEXT( static_cast( m_commandBuffer ), + static_cast( samples ), + reinterpret_cast( sampleMask.data() ) ); + } + + // wrapper function for command vkCmdSetAlphaToCoverageEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToCoverageEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setAlphaToCoverageEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetAlphaToCoverageEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetAlphaToCoverageEnableEXT( static_cast( m_commandBuffer ), static_cast( alphaToCoverageEnable ) ); + } + + // wrapper function for command vkCmdSetAlphaToOneEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAlphaToOneEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setAlphaToOneEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetAlphaToOneEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetAlphaToOneEnableEXT( static_cast( m_commandBuffer ), static_cast( alphaToOneEnable ) ); + } + + // wrapper function for command vkCmdSetLogicOpEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLogicOpEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setLogicOpEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLogicOpEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetLogicOpEnableEXT( static_cast( m_commandBuffer ), static_cast( logicOpEnable ) ); + } + + // wrapper function for command vkCmdSetColorBlendEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEnableEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setColorBlendEnableEXT( uint32_t firstAttachment, + ArrayProxy const & colorBlendEnables ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetColorBlendEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetColorBlendEnableEXT( static_cast( m_commandBuffer ), + firstAttachment, + colorBlendEnables.size(), + reinterpret_cast( colorBlendEnables.data() ) ); + } + + // wrapper function for command vkCmdSetColorBlendEquationEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendEquationEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendEquationEXT( + uint32_t firstAttachment, ArrayProxy const & colorBlendEquations ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetColorBlendEquationEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetColorBlendEquationEXT( static_cast( m_commandBuffer ), + firstAttachment, + colorBlendEquations.size(), + reinterpret_cast( colorBlendEquations.data() ) ); + } + + // wrapper function for command vkCmdSetColorWriteMaskEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorWriteMaskEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setColorWriteMaskEXT( uint32_t firstAttachment, + ArrayProxy const & colorWriteMasks ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetColorWriteMaskEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetColorWriteMaskEXT( static_cast( m_commandBuffer ), + firstAttachment, + colorWriteMasks.size(), + reinterpret_cast( colorWriteMasks.data() ) ); + } + + // wrapper function for command vkCmdSetTessellationDomainOriginEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetTessellationDomainOriginEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setTessellationDomainOriginEXT( VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetTessellationDomainOriginEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetTessellationDomainOriginEXT( static_cast( m_commandBuffer ), + static_cast( domainOrigin ) ); + } + + // wrapper function for command vkCmdSetRasterizationStreamEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRasterizationStreamEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setRasterizationStreamEXT( uint32_t rasterizationStream ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRasterizationStreamEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetRasterizationStreamEXT( static_cast( m_commandBuffer ), rasterizationStream ); + } + + // wrapper function for command vkCmdSetConservativeRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetConservativeRasterizationModeEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setConservativeRasterizationModeEXT( + VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetConservativeRasterizationModeEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetConservativeRasterizationModeEXT( static_cast( m_commandBuffer ), + static_cast( conservativeRasterizationMode ) ); + } + + // wrapper function for command vkCmdSetExtraPrimitiveOverestimationSizeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setExtraPrimitiveOverestimationSizeEXT( float extraPrimitiveOverestimationSize ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetExtraPrimitiveOverestimationSizeEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetExtraPrimitiveOverestimationSizeEXT( static_cast( m_commandBuffer ), extraPrimitiveOverestimationSize ); + } + + // wrapper function for command vkCmdSetDepthClipEnableEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthClipEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthClipEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetDepthClipEnableEXT( static_cast( m_commandBuffer ), static_cast( depthClipEnable ) ); + } + + // wrapper function for command vkCmdSetSampleLocationsEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetSampleLocationsEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetSampleLocationsEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetSampleLocationsEnableEXT( static_cast( m_commandBuffer ), static_cast( sampleLocationsEnable ) ); + } + + // wrapper function for command vkCmdSetColorBlendAdvancedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetColorBlendAdvancedEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setColorBlendAdvancedEXT( + uint32_t firstAttachment, ArrayProxy const & colorBlendAdvanced ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetColorBlendAdvancedEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetColorBlendAdvancedEXT( static_cast( m_commandBuffer ), + firstAttachment, + colorBlendAdvanced.size(), + reinterpret_cast( colorBlendAdvanced.data() ) ); + } + + // wrapper function for command vkCmdSetProvokingVertexModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetProvokingVertexModeEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setProvokingVertexModeEXT( VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetProvokingVertexModeEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetProvokingVertexModeEXT( static_cast( m_commandBuffer ), + static_cast( provokingVertexMode ) ); + } + + // wrapper function for command vkCmdSetLineRasterizationModeEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineRasterizationModeEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setLineRasterizationModeEXT( VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT lineRasterizationMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineRasterizationModeEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetLineRasterizationModeEXT( static_cast( m_commandBuffer ), + static_cast( lineRasterizationMode ) ); + } + + // wrapper function for command vkCmdSetLineStippleEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setLineStippleEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineStippleEnableEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetLineStippleEnableEXT( static_cast( m_commandBuffer ), static_cast( stippledLineEnable ) ); + } + + // wrapper function for command vkCmdSetDepthClipNegativeOneToOneEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDepthClipNegativeOneToOneEXT( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthClipNegativeOneToOneEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetDepthClipNegativeOneToOneEXT( static_cast( m_commandBuffer ), static_cast( negativeOneToOne ) ); + } + + // wrapper function for command vkCmdSetViewportWScalingEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportWScalingEnableNV.html + VULKAN_HPP_INLINE void CommandBuffer::setViewportWScalingEnableNV( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportWScalingEnableNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetViewportWScalingEnableNV( static_cast( m_commandBuffer ), static_cast( viewportWScalingEnable ) ); + } + + // wrapper function for command vkCmdSetViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetViewportSwizzleNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setViewportSwizzleNV( uint32_t firstViewport, + ArrayProxy const & viewportSwizzles ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetViewportSwizzleNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetViewportSwizzleNV( static_cast( m_commandBuffer ), + firstViewport, + viewportSwizzles.size(), + reinterpret_cast( viewportSwizzles.data() ) ); + } + + // wrapper function for command vkCmdSetCoverageToColorEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorEnableNV.html + VULKAN_HPP_INLINE void CommandBuffer::setCoverageToColorEnableNV( VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoverageToColorEnableNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetCoverageToColorEnableNV( static_cast( m_commandBuffer ), static_cast( coverageToColorEnable ) ); + } + + // wrapper function for command vkCmdSetCoverageToColorLocationNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageToColorLocationNV.html + VULKAN_HPP_INLINE void CommandBuffer::setCoverageToColorLocationNV( uint32_t coverageToColorLocation ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoverageToColorLocationNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetCoverageToColorLocationNV( static_cast( m_commandBuffer ), coverageToColorLocation ); + } + + // wrapper function for command vkCmdSetCoverageModulationModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationModeNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setCoverageModulationModeNV( VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoverageModulationModeNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetCoverageModulationModeNV( static_cast( m_commandBuffer ), + static_cast( coverageModulationMode ) ); + } + + // wrapper function for command vkCmdSetCoverageModulationTableEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableEnableNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setCoverageModulationTableEnableNV( VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoverageModulationTableEnableNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetCoverageModulationTableEnableNV( static_cast( m_commandBuffer ), + static_cast( coverageModulationTableEnable ) ); + } + + // wrapper function for command vkCmdSetCoverageModulationTableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageModulationTableNV.html + VULKAN_HPP_INLINE void CommandBuffer::setCoverageModulationTableNV( ArrayProxy const & coverageModulationTable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoverageModulationTableNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetCoverageModulationTableNV( + static_cast( m_commandBuffer ), coverageModulationTable.size(), coverageModulationTable.data() ); + } + + // wrapper function for command vkCmdSetShadingRateImageEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetShadingRateImageEnableNV.html + VULKAN_HPP_INLINE void CommandBuffer::setShadingRateImageEnableNV( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetShadingRateImageEnableNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetShadingRateImageEnableNV( static_cast( m_commandBuffer ), static_cast( shadingRateImageEnable ) ); + } + + // wrapper function for command vkCmdSetRepresentativeFragmentTestEnableNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setRepresentativeFragmentTestEnableNV( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetRepresentativeFragmentTestEnableNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetRepresentativeFragmentTestEnableNV( static_cast( m_commandBuffer ), + static_cast( representativeFragmentTestEnable ) ); + } + + // wrapper function for command vkCmdSetCoverageReductionModeNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetCoverageReductionModeNV.html + VULKAN_HPP_INLINE void + CommandBuffer::setCoverageReductionModeNV( VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetCoverageReductionModeNV && + "Function requires or " ); + + getDispatcher()->vkCmdSetCoverageReductionModeNV( static_cast( m_commandBuffer ), + static_cast( coverageReductionMode ) ); + } + + //=== VK_ARM_tensors === + + // wrapper function for command vkCreateTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createTensorARM( VULKAN_HPP_NAMESPACE::TensorCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::TensorARM tensor; + Result result = static_cast( getDispatcher()->vkCreateTensorARM( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &tensor ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createTensorARM" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::TensorARM( *this, *reinterpret_cast( &tensor ), allocator ); + } + + // wrapper function for command vkCreateTensorViewARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateTensorViewARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createTensorViewARM( VULKAN_HPP_NAMESPACE::TensorViewCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::TensorViewARM view; + Result result = static_cast( getDispatcher()->vkCreateTensorViewARM( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &view ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createTensorViewARM" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::TensorViewARM( *this, *reinterpret_cast( &view ), allocator ); + } + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetTensorMemoryRequirementsARM && "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetTensorMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetTensorMemoryRequirementsARM && "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetTensorMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkBindTensorMemoryARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindTensorMemoryARM.html + VULKAN_HPP_INLINE void Device::bindTensorMemoryARM( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindTensorMemoryARM && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBindTensorMemoryARM( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindTensorMemoryARM" ); + } + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 + Device::getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceTensorMemoryRequirementsARM && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetDeviceTensorMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceTensorMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceTensorMemoryRequirementsARM && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetDeviceTensorMemoryRequirementsARM( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkCmdCopyTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyTensorARM.html + VULKAN_HPP_INLINE void CommandBuffer::copyTensorARM( const VULKAN_HPP_NAMESPACE::CopyTensorInfoARM & copyTensorInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyTensorARM && "Function requires " ); + + getDispatcher()->vkCmdCopyTensorARM( static_cast( m_commandBuffer ), reinterpret_cast( ©TensorInfo ) ); + } + + // wrapper function for command vkGetPhysicalDeviceExternalTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceExternalTensorPropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalTensorPropertiesARM PhysicalDevice::getExternalTensorPropertiesARM( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalTensorInfoARM & externalTensorInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceExternalTensorPropertiesARM && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ExternalTensorPropertiesARM externalTensorProperties; + getDispatcher()->vkGetPhysicalDeviceExternalTensorPropertiesARM( static_cast( m_physicalDevice ), + reinterpret_cast( &externalTensorInfo ), + reinterpret_cast( &externalTensorProperties ) ); + + return externalTensorProperties; + } + + // wrapper function for command vkGetTensorOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::getTensorOpaqueCaptureDescriptorDataARM( const VULKAN_HPP_NAMESPACE::TensorCaptureDescriptorDataInfoARM & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetTensorOpaqueCaptureDescriptorDataARM && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetTensorOpaqueCaptureDescriptorDataARM( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getTensorOpaqueCaptureDescriptorDataARM" ); + + return data; + } + + // wrapper function for command vkGetTensorViewOpaqueCaptureDescriptorDataARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetTensorViewOpaqueCaptureDescriptorDataARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE DataType + Device::getTensorViewOpaqueCaptureDescriptorDataARM( const VULKAN_HPP_NAMESPACE::TensorViewCaptureDescriptorDataInfoARM & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetTensorViewOpaqueCaptureDescriptorDataARM && + "Function requires " ); + + DataType data; + Result result = static_cast( getDispatcher()->vkGetTensorViewOpaqueCaptureDescriptorDataARM( + static_cast( m_device ), reinterpret_cast( &info ), &data ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getTensorViewOpaqueCaptureDescriptorDataARM" ); + + return data; + } + + //=== VK_EXT_shader_module_identifier === + + // wrapper function for command vkGetShaderModuleIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleIdentifierEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT ShaderModule::getIdentifierEXT() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderModuleIdentifierEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT identifier; + getDispatcher()->vkGetShaderModuleIdentifierEXT( + static_cast( m_device ), static_cast( m_shaderModule ), reinterpret_cast( &identifier ) ); + + return identifier; + } + + // wrapper function for command vkGetShaderModuleCreateInfoIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderModuleCreateInfoIdentifierEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT + Device::getShaderModuleCreateInfoIdentifierEXT( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderModuleCreateInfoIdentifierEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT identifier; + getDispatcher()->vkGetShaderModuleCreateInfoIdentifierEXT( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( &identifier ) ); + + return identifier; + } + + //=== VK_NV_optical_flow === + + // wrapper function for command vkGetPhysicalDeviceOpticalFlowImageFormatsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceOpticalFlowImageFormatsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getOpticalFlowImageFormatsNV( const VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatInfoNV & opticalFlowImageFormatInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceOpticalFlowImageFormatsNV && + "Function requires " ); + + std::vector imageFormatProperties; + uint32_t formatCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + static_cast( m_physicalDevice ), + reinterpret_cast( &opticalFlowImageFormatInfo ), + &formatCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && formatCount ) + { + imageFormatProperties.resize( formatCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceOpticalFlowImageFormatsNV( + static_cast( m_physicalDevice ), + reinterpret_cast( &opticalFlowImageFormatInfo ), + &formatCount, + reinterpret_cast( imageFormatProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getOpticalFlowImageFormatsNV" ); + VULKAN_HPP_ASSERT( formatCount <= imageFormatProperties.size() ); + if ( formatCount < imageFormatProperties.size() ) + { + imageFormatProperties.resize( formatCount ); + } + return imageFormatProperties; + } + + // wrapper function for command vkCreateOpticalFlowSessionNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateOpticalFlowSessionNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createOpticalFlowSessionNV( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV session; + Result result = + static_cast( getDispatcher()->vkCreateOpticalFlowSessionNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &session ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createOpticalFlowSessionNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::OpticalFlowSessionNV( *this, *reinterpret_cast( &session ), allocator ); + } + + // wrapper function for command vkBindOpticalFlowSessionImageNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindOpticalFlowSessionImageNV.html + VULKAN_HPP_INLINE void OpticalFlowSessionNV::bindImage( VULKAN_HPP_NAMESPACE::OpticalFlowSessionBindingPointNV bindingPoint, + VULKAN_HPP_NAMESPACE::ImageView view, + VULKAN_HPP_NAMESPACE::ImageLayout layout ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindOpticalFlowSessionImageNV && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBindOpticalFlowSessionImageNV( static_cast( m_device ), + static_cast( m_opticalFlowSessionNV ), + static_cast( bindingPoint ), + static_cast( view ), + static_cast( layout ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::OpticalFlowSessionNV::bindImage" ); + } + + // wrapper function for command vkCmdOpticalFlowExecuteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdOpticalFlowExecuteNV.html + VULKAN_HPP_INLINE void CommandBuffer::opticalFlowExecuteNV( VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV session, + const VULKAN_HPP_NAMESPACE::OpticalFlowExecuteInfoNV & executeInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdOpticalFlowExecuteNV && "Function requires " ); + + getDispatcher()->vkCmdOpticalFlowExecuteNV( static_cast( m_commandBuffer ), + static_cast( session ), + reinterpret_cast( &executeInfo ) ); + } + + //=== VK_KHR_maintenance5 === + + // wrapper function for command vkCmdBindIndexBuffer2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindIndexBuffer2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::bindIndexBuffer2KHR( VULKAN_HPP_NAMESPACE::Buffer buffer, + VULKAN_HPP_NAMESPACE::DeviceSize offset, + VULKAN_HPP_NAMESPACE::DeviceSize size, + VULKAN_HPP_NAMESPACE::IndexType indexType ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindIndexBuffer2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdBindIndexBuffer2KHR( static_cast( m_commandBuffer ), + static_cast( buffer ), + static_cast( offset ), + static_cast( size ), + static_cast( indexType ) ); + } + + // wrapper function for command vkGetRenderingAreaGranularityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetRenderingAreaGranularityKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D + Device::getRenderingAreaGranularityKHR( const VULKAN_HPP_NAMESPACE::RenderingAreaInfo & renderingAreaInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetRenderingAreaGranularityKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::Extent2D granularity; + getDispatcher()->vkGetRenderingAreaGranularityKHR( static_cast( m_device ), + reinterpret_cast( &renderingAreaInfo ), + reinterpret_cast( &granularity ) ); + + return granularity; + } + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2 + Device::getImageSubresourceLayoutKHR( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSubresourceLayoutKHR && + "Function requires or " ); + + VULKAN_HPP_NAMESPACE::SubresourceLayout2 layout; + getDispatcher()->vkGetDeviceImageSubresourceLayoutKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetDeviceImageSubresourceLayoutKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDeviceImageSubresourceLayoutKHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Device::getImageSubresourceLayoutKHR( const VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDeviceImageSubresourceLayoutKHR && + "Function requires or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::SubresourceLayout2 & layout = structureChain.template get(); + getDispatcher()->vkGetDeviceImageSubresourceLayoutKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &layout ) ); + + return structureChain; + } + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout2 + Image::getSubresourceLayout2KHR( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetImageSubresourceLayout2KHR && + "Function requires or or or " ); + + VULKAN_HPP_NAMESPACE::SubresourceLayout2 layout; + getDispatcher()->vkGetImageSubresourceLayout2KHR( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return layout; + } + + // wrapper function for command vkGetImageSubresourceLayout2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetImageSubresourceLayout2KHR.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain + Image::getSubresourceLayout2KHR( const VULKAN_HPP_NAMESPACE::ImageSubresource2 & subresource ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetImageSubresourceLayout2KHR && + "Function requires or or or " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::SubresourceLayout2 & layout = structureChain.template get(); + getDispatcher()->vkGetImageSubresourceLayout2KHR( static_cast( m_device ), + static_cast( m_image ), + reinterpret_cast( &subresource ), + reinterpret_cast( &layout ) ); + + return structureChain; + } + + //=== VK_AMD_anti_lag === + + // wrapper function for command vkAntiLagUpdateAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkAntiLagUpdateAMD.html + VULKAN_HPP_INLINE void Device::antiLagUpdateAMD( const VULKAN_HPP_NAMESPACE::AntiLagDataAMD & data ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkAntiLagUpdateAMD && "Function requires " ); + + getDispatcher()->vkAntiLagUpdateAMD( static_cast( m_device ), reinterpret_cast( &data ) ); + } + + //=== VK_KHR_present_wait2 === + + // wrapper function for command vkWaitForPresent2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkWaitForPresent2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result SwapchainKHR::waitForPresent2( const VULKAN_HPP_NAMESPACE::PresentWait2InfoKHR & presentWait2Info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkWaitForPresent2KHR && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkWaitForPresent2KHR( static_cast( m_device ), + static_cast( m_swapchainKHR ), + reinterpret_cast( &presentWait2Info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::waitForPresent2", { Result::eSuccess, Result::eTimeout, Result::eSuboptimalKHR } ); + + return static_cast( result ); + } + + //=== VK_EXT_shader_object === + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createShadersEXT( VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector shaders( createInfos.size() ); + Result result = static_cast( getDispatcher()->vkCreateShadersEXT( static_cast( m_device ), + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( shaders.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::eIncompatibleShaderBinaryEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createShadersEXT" ); +# endif + } + + std::vector shadersRAII; + shadersRAII.reserve( shaders.size() ); + for ( auto & shader : shaders ) + { + shadersRAII.emplace_back( *this, *reinterpret_cast( &shader ), allocator, result ); + } + return shadersRAII; + } + + // wrapper function for command vkCreateShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateShadersEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createShaderEXT( VULKAN_HPP_NAMESPACE::ShaderCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::ShaderEXT shader; + Result result = static_cast( getDispatcher()->vkCreateShadersEXT( static_cast( m_device ), + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &shader ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::eIncompatibleShaderBinaryEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createShaderEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ShaderEXT( *this, *reinterpret_cast( &shader ), allocator, result ); + } + + // wrapper function for command vkGetShaderBinaryDataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetShaderBinaryDataEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector ShaderEXT::getBinaryData() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderBinaryDataEXT && "Function requires " ); + + std::vector data; + size_t dataSize; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetShaderBinaryDataEXT( static_cast( m_device ), static_cast( m_shaderEXT ), &dataSize, nullptr ) ); + if ( ( result == Result::eSuccess ) && dataSize ) + { + data.resize( dataSize ); + result = static_cast( getDispatcher()->vkGetShaderBinaryDataEXT( + static_cast( m_device ), static_cast( m_shaderEXT ), &dataSize, reinterpret_cast( data.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::ShaderEXT::getBinaryData" ); + VULKAN_HPP_ASSERT( dataSize <= data.size() ); + if ( dataSize < data.size() ) + { + data.resize( dataSize ); + } + return data; + } + + // wrapper function for command vkCmdBindShadersEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindShadersEXT.html + VULKAN_HPP_INLINE void CommandBuffer::bindShadersEXT( ArrayProxy const & stages, + ArrayProxy const & shaders ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindShadersEXT && "Function requires " ); +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( stages.size() == shaders.size() ); +# else + if ( stages.size() != shaders.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::CommandBuffer::bindShadersEXT: stages.size() != shaders.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + + getDispatcher()->vkCmdBindShadersEXT( static_cast( m_commandBuffer ), + stages.size(), + reinterpret_cast( stages.data() ), + reinterpret_cast( shaders.data() ) ); + } + + // wrapper function for command vkCmdSetDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDepthClampRangeEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::setDepthClampRangeEXT( VULKAN_HPP_NAMESPACE::DepthClampModeEXT depthClampMode, + Optional depthClampRange ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDepthClampRangeEXT && + "Function requires or " ); + + getDispatcher()->vkCmdSetDepthClampRangeEXT( static_cast( m_commandBuffer ), + static_cast( depthClampMode ), + reinterpret_cast( depthClampRange.get() ) ); + } + + //=== VK_KHR_pipeline_binary === + + // wrapper function for command vkCreatePipelineBinariesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreatePipelineBinariesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + std::vector>::Type + Device::createPipelineBinariesKHR( VULKAN_HPP_NAMESPACE::PipelineBinaryCreateInfoKHR const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelineBinaries; + PipelineBinaryHandlesInfoKHR binaries; + Result result; + if ( createInfo.pKeysAndDataInfo ) + { + VULKAN_HPP_ASSERT( !createInfo.pipeline && !createInfo.pPipelineCreateInfo ); + pipelineBinaries.resize( createInfo.pKeysAndDataInfo->binaryCount ); + binaries.pipelineBinaryCount = createInfo.pKeysAndDataInfo->binaryCount; + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( getDispatcher()->vkCreatePipelineBinariesKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + else + { + VULKAN_HPP_ASSERT( !createInfo.pipeline ^ !createInfo.pPipelineCreateInfo ); + result = static_cast( getDispatcher()->vkCreatePipelineBinariesKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaries.resize( binaries.pipelineBinaryCount ); + binaries.pPipelineBinaries = pipelineBinaries.data(); + result = static_cast( getDispatcher()->vkCreatePipelineBinariesKHR( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &binaries ) ) ); + } + } + + if ( ( result != Result::eSuccess ) && ( result != Result::eIncomplete ) && ( result != Result::ePipelineBinaryMissingKHR ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createPipelineBinariesKHR" ); +# endif + } + + std::vector pipelineBinariesRAII; + pipelineBinariesRAII.reserve( pipelineBinaries.size() ); + for ( auto & pipelineBinary : pipelineBinaries ) + { + pipelineBinariesRAII.emplace_back( *this, *reinterpret_cast( &pipelineBinary ), allocator, result ); + } + return pipelineBinariesRAII; + } + + // wrapper function for command vkGetPipelineKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineKeyKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR + Device::getPipelineKeyKHR( Optional pipelineCreateInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineKeyKHR && "Function requires " ); + + VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR pipelineKey; + Result result = static_cast( getDispatcher()->vkGetPipelineKeyKHR( static_cast( m_device ), + reinterpret_cast( pipelineCreateInfo.get() ), + reinterpret_cast( &pipelineKey ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineKeyKHR" ); + + return pipelineKey; + } + + // wrapper function for command vkGetPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPipelineBinaryDataKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair> + Device::getPipelineBinaryDataKHR( const VULKAN_HPP_NAMESPACE::PipelineBinaryDataInfoKHR & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPipelineBinaryDataKHR && "Function requires " ); + + std::pair> data_; + VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR & pipelineBinaryKey = data_.first; + std::vector & pipelineBinaryData = data_.second; + size_t pipelineBinaryDataSize; + Result result = static_cast( getDispatcher()->vkGetPipelineBinaryDataKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &pipelineBinaryKey ), + &pipelineBinaryDataSize, + nullptr ) ); + if ( result == Result::eSuccess ) + { + pipelineBinaryData.resize( pipelineBinaryDataSize ); + result = static_cast( getDispatcher()->vkGetPipelineBinaryDataKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &pipelineBinaryKey ), + &pipelineBinaryDataSize, + reinterpret_cast( pipelineBinaryData.data() ) ) ); + } + + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineBinaryDataKHR" ); + + return data_; + } + + // wrapper function for command vkReleaseCapturedPipelineDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseCapturedPipelineDataKHR.html + VULKAN_HPP_INLINE void + Device::releaseCapturedPipelineDataKHR( const VULKAN_HPP_NAMESPACE::ReleaseCapturedPipelineDataInfoKHR & info, + Optional allocator ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseCapturedPipelineDataKHR && "Function requires " ); + + getDispatcher()->vkReleaseCapturedPipelineDataKHR( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( allocator.get() ) ); + } + + //=== VK_QCOM_tile_properties === + + // wrapper function for command vkGetFramebufferTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFramebufferTilePropertiesQCOM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector Framebuffer::getTilePropertiesQCOM() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetFramebufferTilePropertiesQCOM && + "Function requires " ); + + std::vector properties; + uint32_t propertiesCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetFramebufferTilePropertiesQCOM( + static_cast( m_device ), static_cast( m_framebuffer ), &propertiesCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertiesCount ) + { + properties.resize( propertiesCount ); + result = static_cast( getDispatcher()->vkGetFramebufferTilePropertiesQCOM( static_cast( m_device ), + static_cast( m_framebuffer ), + &propertiesCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + + VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); + if ( propertiesCount < properties.size() ) + { + properties.resize( propertiesCount ); + } + return properties; + } + + // wrapper function for command vkGetDynamicRenderingTilePropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDynamicRenderingTilePropertiesQCOM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::TilePropertiesQCOM + Device::getDynamicRenderingTilePropertiesQCOM( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDynamicRenderingTilePropertiesQCOM && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::TilePropertiesQCOM properties; + getDispatcher()->vkGetDynamicRenderingTilePropertiesQCOM( static_cast( m_device ), + reinterpret_cast( &renderingInfo ), + reinterpret_cast( &properties ) ); + + return properties; + } + + //=== VK_KHR_swapchain_maintenance1 === + + // wrapper function for command vkReleaseSwapchainImagesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkReleaseSwapchainImagesKHR.html + VULKAN_HPP_INLINE void Device::releaseSwapchainImagesKHR( const VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR & releaseInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkReleaseSwapchainImagesKHR && + "Function requires or " ); + + Result result = static_cast( getDispatcher()->vkReleaseSwapchainImagesKHR( + static_cast( m_device ), reinterpret_cast( &releaseInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::releaseSwapchainImagesKHR" ); + } + + //=== VK_NV_cooperative_vector === + + // wrapper function for command vkGetPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeVectorPropertiesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getCooperativeVectorPropertiesNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceCooperativeVectorPropertiesNV && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceCooperativeVectorPropertiesNV( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeVectorPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + // wrapper function for command vkConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkConvertCooperativeVectorMatrixNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + Device::convertCooperativeVectorMatrixNV( const VULKAN_HPP_NAMESPACE::ConvertCooperativeVectorMatrixInfoNV & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkConvertCooperativeVectorMatrixNV && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkConvertCooperativeVectorMatrixNV( + static_cast( m_device ), reinterpret_cast( &info ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( + result, VULKAN_HPP_NAMESPACE_STRING "::Device::convertCooperativeVectorMatrixNV", { Result::eSuccess, Result::eIncomplete } ); + + return static_cast( result ); + } + + // wrapper function for command vkCmdConvertCooperativeVectorMatrixNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdConvertCooperativeVectorMatrixNV.html + VULKAN_HPP_INLINE void CommandBuffer::convertCooperativeVectorMatrixNV( + ArrayProxy const & infos ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdConvertCooperativeVectorMatrixNV && + "Function requires " ); + + getDispatcher()->vkCmdConvertCooperativeVectorMatrixNV( + static_cast( m_commandBuffer ), infos.size(), reinterpret_cast( infos.data() ) ); + } + + //=== VK_NV_low_latency2 === + + // wrapper function for command vkSetLatencySleepModeNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencySleepModeNV.html + VULKAN_HPP_INLINE void SwapchainKHR::setLatencySleepModeNV( const VULKAN_HPP_NAMESPACE::LatencySleepModeInfoNV & sleepModeInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetLatencySleepModeNV && "Function requires " ); + + Result result = static_cast( getDispatcher()->vkSetLatencySleepModeNV( static_cast( m_device ), + static_cast( m_swapchainKHR ), + reinterpret_cast( &sleepModeInfo ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::setLatencySleepModeNV" ); + } + + // wrapper function for command vkLatencySleepNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkLatencySleepNV.html + VULKAN_HPP_INLINE void SwapchainKHR::latencySleepNV( const VULKAN_HPP_NAMESPACE::LatencySleepInfoNV & sleepInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkLatencySleepNV && "Function requires " ); + + getDispatcher()->vkLatencySleepNV( + static_cast( m_device ), static_cast( m_swapchainKHR ), reinterpret_cast( &sleepInfo ) ); + } + + // wrapper function for command vkSetLatencyMarkerNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkSetLatencyMarkerNV.html + VULKAN_HPP_INLINE void SwapchainKHR::setLatencyMarkerNV( const VULKAN_HPP_NAMESPACE::SetLatencyMarkerInfoNV & latencyMarkerInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkSetLatencyMarkerNV && "Function requires " ); + + getDispatcher()->vkSetLatencyMarkerNV( static_cast( m_device ), + static_cast( m_swapchainKHR ), + reinterpret_cast( &latencyMarkerInfo ) ); + } + + // wrapper function for command vkGetLatencyTimingsNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetLatencyTimingsNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector SwapchainKHR::getLatencyTimingsNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetLatencyTimingsNV && "Function requires " ); + + std::vector timings; + GetLatencyMarkerInfoNV latencyMarkerInfo; + getDispatcher()->vkGetLatencyTimingsNV( + static_cast( m_device ), static_cast( m_swapchainKHR ), reinterpret_cast( &latencyMarkerInfo ) ); + timings.resize( latencyMarkerInfo.timingCount ); + latencyMarkerInfo.pTimings = timings.data(); + getDispatcher()->vkGetLatencyTimingsNV( + static_cast( m_device ), static_cast( m_swapchainKHR ), reinterpret_cast( &latencyMarkerInfo ) ); + + return timings; + } + + // wrapper function for command vkQueueNotifyOutOfBandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkQueueNotifyOutOfBandNV.html + VULKAN_HPP_INLINE void Queue::notifyOutOfBandNV( const VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeInfoNV & queueTypeInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkQueueNotifyOutOfBandNV && "Function requires " ); + + getDispatcher()->vkQueueNotifyOutOfBandNV( static_cast( m_queue ), reinterpret_cast( &queueTypeInfo ) ); + } + + //=== VK_KHR_cooperative_matrix === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getCooperativeMatrixPropertiesKHR() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR( + static_cast( m_physicalDevice ), &propertyCount, reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesKHR" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + + //=== VK_ARM_data_graph === + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType>::Type + Device::createDataGraphPipelinesARM( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::ArrayProxy const & createInfos, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + { + std::vector pipelines( createInfos.size() ); + Result result = + static_cast( getDispatcher()->vkCreateDataGraphPipelinesARM( static_cast( m_device ), + deferredOperation ? static_cast( **deferredOperation ) : 0, + pipelineCache ? static_cast( **pipelineCache ) : 0, + createInfos.size(), + reinterpret_cast( createInfos.data() ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( pipelines.data() ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDataGraphPipelinesARM" ); +# endif + } + + std::vector pipelinesRAII; + pipelinesRAII.reserve( pipelines.size() ); + for ( auto & pipeline : pipelines ) + { + pipelinesRAII.emplace_back( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + return pipelinesRAII; + } + + // wrapper function for command vkCreateDataGraphPipelinesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelinesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createDataGraphPipelineARM( + VULKAN_HPP_NAMESPACE::Optional const & deferredOperation, + VULKAN_HPP_NAMESPACE::Optional const & pipelineCache, + VULKAN_HPP_NAMESPACE::DataGraphPipelineCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::Pipeline pipeline; + Result result = + static_cast( getDispatcher()->vkCreateDataGraphPipelinesARM( static_cast( m_device ), + deferredOperation ? static_cast( **deferredOperation ) : 0, + pipelineCache ? static_cast( **pipelineCache ) : 0, + 1, + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &pipeline ) ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::ePipelineCompileRequiredEXT ) ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDataGraphPipelineARM" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, *reinterpret_cast( &pipeline ), allocator, result ); + } + + // wrapper function for command vkCreateDataGraphPipelineSessionARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateDataGraphPipelineSessionARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DataGraphPipelineSessionARM>::Type + Device::createDataGraphPipelineSessionARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateInfoARM const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session; + Result result = static_cast( + getDispatcher()->vkCreateDataGraphPipelineSessionARM( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &session ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createDataGraphPipelineSessionARM" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DataGraphPipelineSessionARM( + *this, *reinterpret_cast( &session ), allocator ); + } + + // wrapper function for command vkGetDataGraphPipelineSessionBindPointRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionBindPointRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getDataGraphPipelineSessionBindPointRequirementsARM( + const VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementsInfoARM & info ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDataGraphPipelineSessionBindPointRequirementsARM && + "Function requires " ); + + std::vector bindPointRequirements; + uint32_t bindPointRequirementCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetDataGraphPipelineSessionBindPointRequirementsARM( + static_cast( m_device ), + reinterpret_cast( &info ), + &bindPointRequirementCount, + nullptr ) ); + if ( ( result == Result::eSuccess ) && bindPointRequirementCount ) + { + bindPointRequirements.resize( bindPointRequirementCount ); + result = static_cast( getDispatcher()->vkGetDataGraphPipelineSessionBindPointRequirementsARM( + static_cast( m_device ), + reinterpret_cast( &info ), + &bindPointRequirementCount, + reinterpret_cast( bindPointRequirements.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getDataGraphPipelineSessionBindPointRequirementsARM" ); + VULKAN_HPP_ASSERT( bindPointRequirementCount <= bindPointRequirements.size() ); + if ( bindPointRequirementCount < bindPointRequirements.size() ) + { + bindPointRequirements.resize( bindPointRequirementCount ); + } + return bindPointRequirements; + } + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 Device::getDataGraphPipelineSessionMemoryRequirementsARM( + const VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDataGraphPipelineSessionMemoryRequirementsARM && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetDataGraphPipelineSessionMemoryRequirementsARM( + static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetDataGraphPipelineSessionMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineSessionMemoryRequirementsARM.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getDataGraphPipelineSessionMemoryRequirementsARM( + const VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDataGraphPipelineSessionMemoryRequirementsARM && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetDataGraphPipelineSessionMemoryRequirementsARM( + static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkBindDataGraphPipelineSessionMemoryARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkBindDataGraphPipelineSessionMemoryARM.html + VULKAN_HPP_INLINE void + Device::bindDataGraphPipelineSessionMemoryARM( ArrayProxy const & bindInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkBindDataGraphPipelineSessionMemoryARM && + "Function requires " ); + + Result result = static_cast( getDispatcher()->vkBindDataGraphPipelineSessionMemoryARM( + static_cast( m_device ), bindInfos.size(), reinterpret_cast( bindInfos.data() ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::bindDataGraphPipelineSessionMemoryARM" ); + } + + // wrapper function for command vkCmdDispatchDataGraphARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdDispatchDataGraphARM.html + VULKAN_HPP_INLINE void + CommandBuffer::dispatchDataGraphARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session, + Optional info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDispatchDataGraphARM && "Function requires " ); + + getDispatcher()->vkCmdDispatchDataGraphARM( static_cast( m_commandBuffer ), + static_cast( session ), + reinterpret_cast( info.get() ) ); + } + + // wrapper function for command vkGetDataGraphPipelineAvailablePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelineAvailablePropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + Device::getDataGraphPipelineAvailablePropertiesARM( const VULKAN_HPP_NAMESPACE::DataGraphPipelineInfoARM & pipelineInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDataGraphPipelineAvailablePropertiesARM && + "Function requires " ); + + std::vector properties; + uint32_t propertiesCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetDataGraphPipelineAvailablePropertiesARM( + static_cast( m_device ), reinterpret_cast( &pipelineInfo ), &propertiesCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertiesCount ) + { + properties.resize( propertiesCount ); + result = static_cast( + getDispatcher()->vkGetDataGraphPipelineAvailablePropertiesARM( static_cast( m_device ), + reinterpret_cast( &pipelineInfo ), + &propertiesCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getDataGraphPipelineAvailablePropertiesARM" ); + VULKAN_HPP_ASSERT( propertiesCount <= properties.size() ); + if ( propertiesCount < properties.size() ) + { + properties.resize( propertiesCount ); + } + return properties; + } + + // wrapper function for command vkGetDataGraphPipelinePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetDataGraphPipelinePropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result + Device::getDataGraphPipelinePropertiesARM( const DataGraphPipelineInfoARM * pPipelineInfo, + uint32_t propertiesCount, + DataGraphPipelinePropertyQueryResultARM * pProperties ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetDataGraphPipelinePropertiesARM && + "Function requires " ); + return static_cast( + getDispatcher()->vkGetDataGraphPipelinePropertiesARM( static_cast( m_device ), + reinterpret_cast( pPipelineInfo ), + propertiesCount, + reinterpret_cast( pProperties ) ) ); + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getQueueFamilyDataGraphPropertiesARM( uint32_t queueFamilyIndex ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM && + "Function requires " ); + + std::vector queueFamilyDataGraphProperties; + uint32_t queueFamilyDataGraphPropertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + static_cast( m_physicalDevice ), queueFamilyIndex, &queueFamilyDataGraphPropertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && queueFamilyDataGraphPropertyCount ) + { + queueFamilyDataGraphProperties.resize( queueFamilyDataGraphPropertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + static_cast( m_physicalDevice ), + queueFamilyIndex, + &queueFamilyDataGraphPropertyCount, + reinterpret_cast( queueFamilyDataGraphProperties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getQueueFamilyDataGraphPropertiesARM" ); + VULKAN_HPP_ASSERT( queueFamilyDataGraphPropertyCount <= queueFamilyDataGraphProperties.size() ); + if ( queueFamilyDataGraphPropertyCount < queueFamilyDataGraphProperties.size() ) + { + queueFamilyDataGraphProperties.resize( queueFamilyDataGraphPropertyCount ); + } + return queueFamilyDataGraphProperties; + } + + // wrapper function for command vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphProcessingEnginePropertiesARM + PhysicalDevice::getQueueFamilyDataGraphProcessingEnginePropertiesARM( + const VULKAN_HPP_NAMESPACE::PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & queueFamilyDataGraphProcessingEngineInfo ) const + VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphProcessingEnginePropertiesARM queueFamilyDataGraphProcessingEngineProperties; + getDispatcher()->vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + static_cast( m_physicalDevice ), + reinterpret_cast( &queueFamilyDataGraphProcessingEngineInfo ), + reinterpret_cast( &queueFamilyDataGraphProcessingEngineProperties ) ); + + return queueFamilyDataGraphProcessingEngineProperties; + } + + //=== VK_EXT_attachment_feedback_loop_dynamic_state === + + // wrapper function for command vkCmdSetAttachmentFeedbackLoopEnableEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetAttachmentFeedbackLoopEnableEXT.html + VULKAN_HPP_INLINE void CommandBuffer::setAttachmentFeedbackLoopEnableEXT( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetAttachmentFeedbackLoopEnableEXT && + "Function requires " ); + + getDispatcher()->vkCmdSetAttachmentFeedbackLoopEnableEXT( static_cast( m_commandBuffer ), + static_cast( aspectMask ) ); + } + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_external_memory_screen_buffer === + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX + Device::getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetScreenBufferPropertiesQNX && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX properties; + Result result = static_cast( getDispatcher()->vkGetScreenBufferPropertiesQNX( + static_cast( m_device ), &buffer, reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getScreenBufferPropertiesQNX" ); + + return properties; + } + + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetScreenBufferPropertiesQNX && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX & properties = structureChain.template get(); + Result result = static_cast( getDispatcher()->vkGetScreenBufferPropertiesQNX( + static_cast( m_device ), &buffer, reinterpret_cast( &properties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getScreenBufferPropertiesQNX" ); + + return structureChain; + } +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_KHR_line_rasterization === + + // wrapper function for command vkCmdSetLineStippleKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetLineStippleKHR.html + VULKAN_HPP_INLINE void CommandBuffer::setLineStippleKHR( uint32_t lineStippleFactor, uint16_t lineStipplePattern ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetLineStippleKHR && + "Function requires or or " ); + + getDispatcher()->vkCmdSetLineStippleKHR( static_cast( m_commandBuffer ), lineStippleFactor, lineStipplePattern ); + } + + //=== VK_KHR_calibrated_timestamps === + + // wrapper function for command vkGetPhysicalDeviceCalibrateableTimeDomainsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCalibrateableTimeDomainsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector PhysicalDevice::getCalibrateableTimeDomainsKHR() const + { + VULKAN_HPP_ASSERT( + getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR && + "Function requires or " ); + + std::vector timeDomains; + uint32_t timeDomainCount; + Result result; + do + { + result = static_cast( + getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( static_cast( m_physicalDevice ), &timeDomainCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && timeDomainCount ) + { + timeDomains.resize( timeDomainCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCalibrateableTimeDomainsKHR( + static_cast( m_physicalDevice ), &timeDomainCount, reinterpret_cast( timeDomains.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsKHR" ); + VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() ); + if ( timeDomainCount < timeDomains.size() ) + { + timeDomains.resize( timeDomainCount ); + } + return timeDomains; + } + + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair, uint64_t> + Device::getCalibratedTimestampsKHR( ArrayProxy const & timestampInfos ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetCalibratedTimestampsKHR && + "Function requires or " ); + + std::pair, uint64_t> data_( std::piecewise_construct, std::forward_as_tuple( timestampInfos.size() ), std::forward_as_tuple( 0 ) ); + std::vector & timestamps = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = + static_cast( getDispatcher()->vkGetCalibratedTimestampsKHR( static_cast( m_device ), + timestampInfos.size(), + reinterpret_cast( timestampInfos.data() ), + timestamps.data(), + &maxDeviation ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsKHR" ); + + return data_; + } + + // wrapper function for command vkGetCalibratedTimestampsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetCalibratedTimestampsKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair + Device::getCalibratedTimestampKHR( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR & timestampInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetCalibratedTimestampsKHR && + "Function requires or " ); + + std::pair data_; + uint64_t & timestamp = data_.first; + uint64_t & maxDeviation = data_.second; + Result result = static_cast( getDispatcher()->vkGetCalibratedTimestampsKHR( + static_cast( m_device ), 1, reinterpret_cast( ×tampInfo ), ×tamp, &maxDeviation ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampKHR" ); + + return data_; + } + + //=== VK_KHR_maintenance6 === + + // wrapper function for command vkCmdBindDescriptorSets2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorSets2KHR.html + VULKAN_HPP_INLINE void + CommandBuffer::bindDescriptorSets2KHR( const VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo & bindDescriptorSetsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindDescriptorSets2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdBindDescriptorSets2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &bindDescriptorSetsInfo ) ); + } + + // wrapper function for command vkCmdPushConstants2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushConstants2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::pushConstants2KHR( const VULKAN_HPP_NAMESPACE::PushConstantsInfo & pushConstantsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushConstants2KHR && "Function requires or " ); + + getDispatcher()->vkCmdPushConstants2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &pushConstantsInfo ) ); + } + + // wrapper function for command vkCmdPushDescriptorSet2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSet2KHR.html + VULKAN_HPP_INLINE void + CommandBuffer::pushDescriptorSet2KHR( const VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo & pushDescriptorSetInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSet2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdPushDescriptorSet2KHR( static_cast( m_commandBuffer ), + reinterpret_cast( &pushDescriptorSetInfo ) ); + } + + // wrapper function for command vkCmdPushDescriptorSetWithTemplate2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPushDescriptorSetWithTemplate2KHR.html + VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplate2KHR( + const VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo & pushDescriptorSetWithTemplateInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPushDescriptorSetWithTemplate2KHR && + "Function requires or " ); + + getDispatcher()->vkCmdPushDescriptorSetWithTemplate2KHR( + static_cast( m_commandBuffer ), reinterpret_cast( &pushDescriptorSetWithTemplateInfo ) ); + } + + // wrapper function for command vkCmdSetDescriptorBufferOffsets2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdSetDescriptorBufferOffsets2EXT.html + VULKAN_HPP_INLINE void CommandBuffer::setDescriptorBufferOffsets2EXT( + const VULKAN_HPP_NAMESPACE::SetDescriptorBufferOffsetsInfoEXT & setDescriptorBufferOffsetsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetDescriptorBufferOffsets2EXT && + "Function requires " ); + + getDispatcher()->vkCmdSetDescriptorBufferOffsets2EXT( static_cast( m_commandBuffer ), + reinterpret_cast( &setDescriptorBufferOffsetsInfo ) ); + } + + // wrapper function for command vkCmdBindDescriptorBufferEmbeddedSamplers2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindDescriptorBufferEmbeddedSamplers2EXT.html + VULKAN_HPP_INLINE void CommandBuffer::bindDescriptorBufferEmbeddedSamplers2EXT( + const VULKAN_HPP_NAMESPACE::BindDescriptorBufferEmbeddedSamplersInfoEXT & bindDescriptorBufferEmbeddedSamplersInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindDescriptorBufferEmbeddedSamplers2EXT && + "Function requires " ); + + getDispatcher()->vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( + static_cast( m_commandBuffer ), + reinterpret_cast( &bindDescriptorBufferEmbeddedSamplersInfo ) ); + } + + //=== VK_QCOM_tile_memory_heap === + + // wrapper function for command vkCmdBindTileMemoryQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBindTileMemoryQCOM.html + VULKAN_HPP_INLINE void + CommandBuffer::bindTileMemoryQCOM( Optional tileMemoryBindInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBindTileMemoryQCOM && "Function requires " ); + + getDispatcher()->vkCmdBindTileMemoryQCOM( static_cast( m_commandBuffer ), + reinterpret_cast( tileMemoryBindInfo.get() ) ); + } + + //=== VK_NV_external_compute_queue === + + // wrapper function for command vkCreateExternalComputeQueueNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateExternalComputeQueueNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createExternalComputeQueueNV( VULKAN_HPP_NAMESPACE::ExternalComputeQueueCreateInfoNV const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV externalQueue; + Result result = + static_cast( getDispatcher()->vkCreateExternalComputeQueueNV( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &externalQueue ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createExternalComputeQueueNV" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ExternalComputeQueueNV( + *this, *reinterpret_cast( &externalQueue ), allocator ); + } + + // wrapper function for command vkGetExternalComputeQueueDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetExternalComputeQueueDataNV.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair + ExternalComputeQueueNV::getData() const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetExternalComputeQueueDataNV && + "Function requires " ); + + std::pair data_; + VULKAN_HPP_NAMESPACE::ExternalComputeQueueDataParamsNV & arams = data_.first; + DataType & data = data_.second; + getDispatcher()->vkGetExternalComputeQueueDataNV( + static_cast( m_externalComputeQueueNV ), reinterpret_cast( &arams ), &data ); + + return data_; + } + + //=== VK_NV_cluster_acceleration_structure === + + // wrapper function for command vkGetClusterAccelerationStructureBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetClusterAccelerationStructureBuildSizesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR Device::getClusterAccelerationStructureBuildSizesNV( + const VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetClusterAccelerationStructureBuildSizesNV && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR sizeInfo; + getDispatcher()->vkGetClusterAccelerationStructureBuildSizesNV( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } + + // wrapper function for command vkCmdBuildClusterAccelerationStructureIndirectNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildClusterAccelerationStructureIndirectNV.html + VULKAN_HPP_INLINE void CommandBuffer::buildClusterAccelerationStructureIndirectNV( + const VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureCommandsInfoNV & commandInfos ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildClusterAccelerationStructureIndirectNV && + "Function requires " ); + + getDispatcher()->vkCmdBuildClusterAccelerationStructureIndirectNV( + static_cast( m_commandBuffer ), reinterpret_cast( &commandInfos ) ); + } + + //=== VK_NV_partitioned_acceleration_structure === + + // wrapper function for command vkGetPartitionedAccelerationStructuresBuildSizesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPartitionedAccelerationStructuresBuildSizesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR + Device::getPartitionedAccelerationStructuresBuildSizesNV( const VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV & info ) const + VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPartitionedAccelerationStructuresBuildSizesNV && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR sizeInfo; + getDispatcher()->vkGetPartitionedAccelerationStructuresBuildSizesNV( + static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &sizeInfo ) ); + + return sizeInfo; + } + + // wrapper function for command vkCmdBuildPartitionedAccelerationStructuresNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdBuildPartitionedAccelerationStructuresNV.html + VULKAN_HPP_INLINE void CommandBuffer::buildPartitionedAccelerationStructuresNV( + const VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureInfoNV & buildInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildPartitionedAccelerationStructuresNV && + "Function requires " ); + + getDispatcher()->vkCmdBuildPartitionedAccelerationStructuresNV( static_cast( m_commandBuffer ), + reinterpret_cast( &buildInfo ) ); + } + + //=== VK_EXT_device_generated_commands === + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 Device::getGeneratedCommandsMemoryRequirementsEXT( + const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements; + getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsEXT( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return memoryRequirements; + } + + // wrapper function for command vkGetGeneratedCommandsMemoryRequirementsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain Device::getGeneratedCommandsMemoryRequirementsEXT( + const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT & info ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsEXT && + "Function requires " ); + + StructureChain structureChain; + VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements = structureChain.template get(); + getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsEXT( static_cast( m_device ), + reinterpret_cast( &info ), + reinterpret_cast( &memoryRequirements ) ); + + return structureChain; + } + + // wrapper function for command vkCmdPreprocessGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdPreprocessGeneratedCommandsEXT.html + VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsEXT( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT & generatedCommandsInfo, + VULKAN_HPP_NAMESPACE::CommandBuffer stateCommandBuffer ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPreprocessGeneratedCommandsEXT && + "Function requires " ); + + getDispatcher()->vkCmdPreprocessGeneratedCommandsEXT( static_cast( m_commandBuffer ), + reinterpret_cast( &generatedCommandsInfo ), + static_cast( stateCommandBuffer ) ); + } + + // wrapper function for command vkCmdExecuteGeneratedCommandsEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdExecuteGeneratedCommandsEXT.html + VULKAN_HPP_INLINE void + CommandBuffer::executeGeneratedCommandsEXT( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed, + const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdExecuteGeneratedCommandsEXT && + "Function requires " ); + + getDispatcher()->vkCmdExecuteGeneratedCommandsEXT( static_cast( m_commandBuffer ), + static_cast( isPreprocessed ), + reinterpret_cast( &generatedCommandsInfo ) ); + } + + // wrapper function for command vkCreateIndirectCommandsLayoutEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectCommandsLayoutEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType< + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutEXT>::Type + Device::createIndirectCommandsLayoutEXT( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout; + Result result = + static_cast( getDispatcher()->vkCreateIndirectCommandsLayoutEXT( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectCommandsLayout ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createIndirectCommandsLayoutEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutEXT( + *this, *reinterpret_cast( &indirectCommandsLayout ), allocator ); + } + + // wrapper function for command vkCreateIndirectExecutionSetEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateIndirectExecutionSetEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Device::createIndirectExecutionSetEXT( VULKAN_HPP_NAMESPACE::IndirectExecutionSetCreateInfoEXT const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet; + Result result = + static_cast( getDispatcher()->vkCreateIndirectExecutionSetEXT( static_cast( m_device ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &indirectExecutionSet ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Device::createIndirectExecutionSetEXT" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::IndirectExecutionSetEXT( + *this, *reinterpret_cast( &indirectExecutionSet ), allocator ); + } + + // wrapper function for command vkUpdateIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html + VULKAN_HPP_INLINE void IndirectExecutionSetEXT::updatePipeline( + ArrayProxy const & executionSetWrites ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateIndirectExecutionSetPipelineEXT && + "Function requires " ); + + getDispatcher()->vkUpdateIndirectExecutionSetPipelineEXT( static_cast( m_device ), + static_cast( m_indirectExecutionSetEXT ), + executionSetWrites.size(), + reinterpret_cast( executionSetWrites.data() ) ); + } + + // wrapper function for command vkUpdateIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkUpdateIndirectExecutionSetShaderEXT.html + VULKAN_HPP_INLINE void IndirectExecutionSetEXT::updateShader( + ArrayProxy const & executionSetWrites ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateIndirectExecutionSetShaderEXT && + "Function requires " ); + + getDispatcher()->vkUpdateIndirectExecutionSetShaderEXT( static_cast( m_device ), + static_cast( m_indirectExecutionSetEXT ), + executionSetWrites.size(), + reinterpret_cast( executionSetWrites.data() ) ); + } + +# if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + // wrapper function for command vkCreateSurfaceOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCreateSurfaceOHOS.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::detail::CreateReturnType::Type + Instance::createSurfaceOHOS( VULKAN_HPP_NAMESPACE::SurfaceCreateInfoOHOS const & createInfo, + VULKAN_HPP_NAMESPACE::Optional allocator ) const + VULKAN_HPP_RAII_CREATE_NOEXCEPT + { + VULKAN_HPP_NAMESPACE::SurfaceKHR surface; + Result result = static_cast( getDispatcher()->vkCreateSurfaceOHOS( static_cast( m_instance ), + reinterpret_cast( &createInfo ), + reinterpret_cast( allocator.get() ), + reinterpret_cast( &surface ) ) ); + if ( result != Result::eSuccess ) + { +# if defined( VULKAN_HPP_RAII_NO_EXCEPTIONS ) + return VULKAN_HPP_UNEXPECTED( result ); +# else + VULKAN_HPP_NAMESPACE::detail::throwResultException( result, "Instance::createSurfaceOHOS" ); +# endif + } + + return VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, *reinterpret_cast( &surface ), allocator ); + } +# endif /*VK_USE_PLATFORM_OHOS*/ + + //=== VK_NV_cooperative_matrix2 === + + // wrapper function for command vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector + PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV() const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV && + "Function requires " ); + + std::vector properties; + uint32_t propertyCount; + Result result; + do + { + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + static_cast( m_physicalDevice ), &propertyCount, nullptr ) ); + if ( ( result == Result::eSuccess ) && propertyCount ) + { + properties.resize( propertyCount ); + result = static_cast( getDispatcher()->vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + static_cast( m_physicalDevice ), + &propertyCount, + reinterpret_cast( properties.data() ) ) ); + } + } while ( result == Result::eIncomplete ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixFlexibleDimensionsPropertiesNV" ); + VULKAN_HPP_ASSERT( propertyCount <= properties.size() ); + if ( propertyCount < properties.size() ) + { + properties.resize( propertyCount ); + } + return properties; + } + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_external_memory_metal === + + // wrapper function for command vkGetMemoryMetalHandleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandleEXT.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void * + Device::getMemoryMetalHandleEXT( const VULKAN_HPP_NAMESPACE::MemoryGetMetalHandleInfoEXT & getMetalHandleInfo ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryMetalHandleEXT && "Function requires " ); + + void * handle; + Result result = static_cast( getDispatcher()->vkGetMemoryMetalHandleEXT( + static_cast( m_device ), reinterpret_cast( &getMetalHandleInfo ), &handle ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryMetalHandleEXT" ); + + return handle; + } + + // wrapper function for command vkGetMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetMemoryMetalHandlePropertiesEXT.html + template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryMetalHandlePropertiesEXT + Device::getMemoryMetalHandlePropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, HandleType const & handle ) const + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryMetalHandlePropertiesEXT && + "Function requires " ); + + VULKAN_HPP_NAMESPACE::MemoryMetalHandlePropertiesEXT memoryMetalHandleProperties; + Result result = static_cast( + getDispatcher()->vkGetMemoryMetalHandlePropertiesEXT( static_cast( m_device ), + static_cast( handleType ), + reinterpret_cast( &handle ), + reinterpret_cast( &memoryMetalHandleProperties ) ) ); + VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getMemoryMetalHandlePropertiesEXT" ); + + return memoryMetalHandleProperties; + } +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_fragment_density_map_offset === + + // wrapper function for command vkCmdEndRendering2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdEndRendering2EXT.html + VULKAN_HPP_INLINE void + CommandBuffer::endRendering2EXT( Optional renderingEndInfo ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRendering2EXT && "Function requires " ); + + getDispatcher()->vkCmdEndRendering2EXT( static_cast( m_commandBuffer ), + reinterpret_cast( renderingEndInfo.get() ) ); + } + + //==================== + //=== RAII Helpers === + //==================== + + template + std::vector filterCppTypes( std::vector const & raiiTypes ) + { + std::vector cppTypes( raiiTypes.size() ); + std::transform( raiiTypes.begin(), raiiTypes.end(), cppTypes.begin(), []( RAIIType const & d ) { return *d; } ); + return cppTypes; + } + + template + std::vector filterCppTypes( std::vector const & raiiTypes, UnaryPredicate p ) + { + std::vector cppTypes; + for ( auto const & t : raiiTypes ) + { + if ( p( t ) ) + { + cppTypes.push_back( *t ); + } + } + return cppTypes; + } + + } // namespace VULKAN_HPP_RAII_NAMESPACE +} // namespace VULKAN_HPP_NAMESPACE +#endif +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_screen.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_screen.h new file mode 100644 index 0000000000..79b04f05f5 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_screen.h @@ -0,0 +1,114 @@ +#ifndef VULKAN_SCREEN_H_ +#define VULKAN_SCREEN_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_QNX_screen_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_QNX_screen_surface 1 +#define VK_QNX_SCREEN_SURFACE_SPEC_VERSION 1 +#define VK_QNX_SCREEN_SURFACE_EXTENSION_NAME "VK_QNX_screen_surface" +typedef VkFlags VkScreenSurfaceCreateFlagsQNX; +typedef struct VkScreenSurfaceCreateInfoQNX { + VkStructureType sType; + const void* pNext; + VkScreenSurfaceCreateFlagsQNX flags; + struct _screen_context* context; + struct _screen_window* window; +} VkScreenSurfaceCreateInfoQNX; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance, const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( + VkInstance instance, + const VkScreenSurfaceCreateInfoQNX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct _screen_window* window); +#endif +#endif + + +// VK_QNX_external_memory_screen_buffer is a preprocessor guard. Do not pass it to API calls. +#define VK_QNX_external_memory_screen_buffer 1 +#define VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_SPEC_VERSION 1 +#define VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_EXTENSION_NAME "VK_QNX_external_memory_screen_buffer" +typedef struct VkScreenBufferPropertiesQNX { + VkStructureType sType; + void* pNext; + VkDeviceSize allocationSize; + uint32_t memoryTypeBits; +} VkScreenBufferPropertiesQNX; + +typedef struct VkScreenBufferFormatPropertiesQNX { + VkStructureType sType; + void* pNext; + VkFormat format; + uint64_t externalFormat; + uint64_t screenUsage; + VkFormatFeatureFlags formatFeatures; + VkComponentMapping samplerYcbcrConversionComponents; + VkSamplerYcbcrModelConversion suggestedYcbcrModel; + VkSamplerYcbcrRange suggestedYcbcrRange; + VkChromaLocation suggestedXChromaOffset; + VkChromaLocation suggestedYChromaOffset; +} VkScreenBufferFormatPropertiesQNX; + +typedef struct VkImportScreenBufferInfoQNX { + VkStructureType sType; + const void* pNext; + struct _screen_buffer* buffer; +} VkImportScreenBufferInfoQNX; + +typedef struct VkExternalFormatQNX { + VkStructureType sType; + void* pNext; + uint64_t externalFormat; +} VkExternalFormatQNX; + +typedef struct VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX { + VkStructureType sType; + void* pNext; + VkBool32 screenBufferImport; +} VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + +typedef VkResult (VKAPI_PTR *PFN_vkGetScreenBufferPropertiesQNX)(VkDevice device, const struct _screen_buffer* buffer, VkScreenBufferPropertiesQNX* pProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetScreenBufferPropertiesQNX( + VkDevice device, + const struct _screen_buffer* buffer, + VkScreenBufferPropertiesQNX* pProperties); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_shared.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_shared.hpp new file mode 100644 index 0000000000..73c272081f --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_shared.hpp @@ -0,0 +1,1204 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_SHARED_HPP +#define VULKAN_SHARED_HPP + +#include + +#if !( defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) ) +# include // std::atomic_size_t +#endif + +namespace VULKAN_HPP_NAMESPACE +{ +#if !defined( VULKAN_HPP_NO_SMART_HANDLE ) + + template + class SharedHandleTraits; + + class NoDestructor + { + }; + + template + struct HasDestructorType : std::false_type + { + }; + + template + struct HasDestructorType::DestructorType() )> : std::true_type + { + }; + + template + struct GetDestructorType + { + using type = NoDestructor; + }; + + template + struct GetDestructorType::value>::type> + { + using type = typename SharedHandleTraits::DestructorType; + }; + + template + using DestructorTypeOf = typename GetDestructorType::type; + + template + struct HasDestructor : std::integral_constant, NoDestructor>::value> + { + }; + + template + struct HasPoolType : std::false_type + { + }; + + template + struct HasPoolType::deleter::PoolTypeExport() )> : std::true_type + { + }; + + template + struct GetPoolType + { + using type = NoDestructor; + }; + + template + struct GetPoolType::value>::type> + { + using type = typename SharedHandleTraits::deleter::PoolTypeExport; + }; + + //===================================================================================================================== + + template + class SharedHandle; + + template + struct SharedHeader + { + SharedHeader( SharedHandle parent, Deleter deleter = Deleter() ) VULKAN_HPP_NOEXCEPT + : parent( std::move( parent ) ) + , deleter( std::move( deleter ) ) + { + } + + SharedHandle parent; + Deleter deleter; + }; + + template + struct SharedHeader + { + SharedHeader( Deleter deleter = Deleter() ) VULKAN_HPP_NOEXCEPT : deleter( std::move( deleter ) ) {} + + Deleter deleter; + }; + + //===================================================================================================================== + + template + class ReferenceCounter + { + public: + template + ReferenceCounter( Args &&... control_args ) : m_header( std::forward( control_args )... ) + { + } + + ReferenceCounter( const ReferenceCounter & ) = delete; + ReferenceCounter & operator=( const ReferenceCounter & ) = delete; + + public: + size_t addRef() VULKAN_HPP_NOEXCEPT + { + // Relaxed memory order is sufficient since this does not impose any ordering on other operations + return m_ref_cnt.fetch_add( 1, std::memory_order_relaxed ); + } + + size_t release() VULKAN_HPP_NOEXCEPT + { + // A release memory order to ensure that all releases are ordered + return m_ref_cnt.fetch_sub( 1, std::memory_order_release ); + } + + public: + std::atomic_size_t m_ref_cnt{ 1 }; + HeaderType m_header{}; + }; + + //===================================================================================================================== + + template > + class SharedHandleBase + { + public: + SharedHandleBase() = default; + + template + SharedHandleBase( HandleType handle, Args &&... control_args ) + : m_control( new ReferenceCounter( std::forward( control_args )... ) ), m_handle( handle ) + { + } + + SharedHandleBase( const SharedHandleBase & o ) VULKAN_HPP_NOEXCEPT + { + o.addRef(); + m_handle = o.m_handle; + m_control = o.m_control; + } + + SharedHandleBase( SharedHandleBase && o ) VULKAN_HPP_NOEXCEPT + : m_control( o.m_control ) + , m_handle( o.m_handle ) + { + o.m_handle = nullptr; + o.m_control = nullptr; + } + + SharedHandleBase & operator=( const SharedHandleBase & o ) VULKAN_HPP_NOEXCEPT + { + SharedHandleBase( o ).swap( *this ); + return *this; + } + + SharedHandleBase & operator=( SharedHandleBase && o ) VULKAN_HPP_NOEXCEPT + { + SharedHandleBase( std::move( o ) ).swap( *this ); + return *this; + } + + ~SharedHandleBase() + { + // only this function owns the last reference to the control block + // the same principle is used in the default deleter of std::shared_ptr + if ( m_control && ( m_control->release() == 1 ) ) + { + // noop in x86, but does thread synchronization in ARM + // it is required to ensure that last thread is getting to destroy the control block + // by ordering all atomic operations before this fence + std::atomic_thread_fence( std::memory_order_acquire ); + ForwardType::internalDestroy( getHeader(), m_handle ); + delete m_control; + } + } + + public: + HandleType get() const VULKAN_HPP_NOEXCEPT + { + return m_handle; + } + + HandleType operator*() const VULKAN_HPP_NOEXCEPT + { + return m_handle; + } + + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return bool( m_handle ); + } + +# if defined( VULKAN_HPP_SMART_HANDLE_IMPLICIT_CAST ) + operator HandleType() const VULKAN_HPP_NOEXCEPT + { + return m_handle; + } +# endif + + const HandleType * operator->() const VULKAN_HPP_NOEXCEPT + { + return &m_handle; + } + + HandleType * operator->() VULKAN_HPP_NOEXCEPT + { + return &m_handle; + } + + void reset() VULKAN_HPP_NOEXCEPT + { + SharedHandleBase().swap( *this ); + } + + void swap( SharedHandleBase & o ) VULKAN_HPP_NOEXCEPT + { + std::swap( m_handle, o.m_handle ); + std::swap( m_control, o.m_control ); + } + + template + typename std::enable_if::value, const SharedHandle> &>::type getDestructorType() const VULKAN_HPP_NOEXCEPT + { + return getHeader().parent; + } + + protected: + template + static typename std::enable_if::value, void>::type internalDestroy( const HeaderType & control, HandleType handle ) VULKAN_HPP_NOEXCEPT + { + control.deleter.destroy( handle ); + } + + template + static typename std::enable_if::value, void>::type internalDestroy( const HeaderType & control, HandleType handle ) VULKAN_HPP_NOEXCEPT + { + control.deleter.destroy( control.parent.get(), handle ); + } + + const HeaderType & getHeader() const VULKAN_HPP_NOEXCEPT + { + return m_control->m_header; + } + + private: + void addRef() const VULKAN_HPP_NOEXCEPT + { + if ( m_control ) + m_control->addRef(); + } + + protected: + ReferenceCounter * m_control = nullptr; + HandleType m_handle{}; + }; + + template + class SharedHandle : public SharedHandleBase, typename SharedHandleTraits::deleter>> + { + private: + using BaseType = SharedHandleBase, typename SharedHandleTraits::deleter>>; + using DeleterType = typename SharedHandleTraits::deleter; + friend BaseType; + + public: + SharedHandle() = default; + + template ::value && !HasPoolType::value>::type> + explicit SharedHandle( HandleType handle, SharedHandle> parent, DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT + : BaseType( handle, std::move( parent ), std::move( deleter ) ) + { + } + + template ::value && HasPoolType::value>::type> + explicit SharedHandle( HandleType handle, + SharedHandle> parent, + SharedHandle::type> pool, + const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT + : BaseType( handle, std::move( parent ), DeleterType{ std::move( pool ), dispatch } ) + { + } + + template ::value>::type> + explicit SharedHandle( HandleType handle, DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT : BaseType( handle, std::move( deleter ) ) + { + } + + protected: + using BaseType::internalDestroy; + }; + + namespace detail + { + +// Silence the function cast warnings. +# if defined( __GNUC__ ) && !defined( __clang__ ) && !defined( __INTEL_COMPILER ) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wcast-function-type" +# elif defined( __clang__ ) && ( __clang_major__ >= 13 ) && !defined( __INTEL_COMPILER ) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wcast-function-type" +# endif + + template + class ObjectDestroyShared + { + public: + using DestructorType = typename SharedHandleTraits::DestructorType; + + template + using DestroyFunctionPointerType = + typename std::conditional::value, + void ( DestructorType::* )( HandleType, const AllocationCallbacks *, const Dispatcher & ) const, + void ( HandleType::* )( const AllocationCallbacks *, const Dispatcher & ) const>::type; + + using SelectorType = typename std::conditional::value, DestructorType, HandleType>::type; + + template + ObjectDestroyShared( Optional allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + : m_destroy( reinterpret_cast( static_cast>( &SelectorType::destroy ) ) ) + , m_dispatch( &dispatch ) + , m_allocationCallbacks( allocationCallbacks ) + { + } + + public: + template + typename std::enable_if::value, void>::type destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_destroy && m_dispatch ); + ( parent.*m_destroy )( handle, m_allocationCallbacks, *m_dispatch ); + } + + template + typename std::enable_if::value, void>::type destroy( HandleType handle ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_destroy && m_dispatch ); + ( handle.*m_destroy )( m_allocationCallbacks, *m_dispatch ); + } + + private: + DestroyFunctionPointerType m_destroy = nullptr; + const detail::DispatchLoaderBase * m_dispatch = nullptr; + Optional m_allocationCallbacks = nullptr; + }; + + template + class ObjectFreeShared + { + public: + using DestructorType = typename SharedHandleTraits::DestructorType; + + template + using DestroyFunctionPointerType = void ( DestructorType::* )( HandleType, const AllocationCallbacks *, const Dispatcher & ) const; + + template + ObjectFreeShared( Optional allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, + const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + : m_destroy( reinterpret_cast( static_cast>( &DestructorType::free ) ) ) + , m_dispatch( &dispatch ) + , m_allocationCallbacks( allocationCallbacks ) + { + } + + public: + void destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_destroy && m_dispatch ); + ( parent.*m_destroy )( handle, m_allocationCallbacks, *m_dispatch ); + } + + private: + DestroyFunctionPointerType m_destroy = nullptr; + const detail::DispatchLoaderBase * m_dispatch = nullptr; + Optional m_allocationCallbacks = nullptr; + }; + + template + class ObjectReleaseShared + { + public: + using DestructorType = typename SharedHandleTraits::DestructorType; + + template + using DestroyFunctionPointerType = void ( DestructorType::* )( HandleType, const Dispatcher & ) const; + + template + ObjectReleaseShared( const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + : m_destroy( reinterpret_cast( static_cast>( &DestructorType::release ) ) ) + , m_dispatch( &dispatch ) + { + } + + public: + void destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_destroy && m_dispatch ); + ( parent.*m_destroy )( handle, *m_dispatch ); + } + + private: + DestroyFunctionPointerType m_destroy = nullptr; + const detail::DispatchLoaderBase * m_dispatch = nullptr; + }; + + template + class PoolFreeShared + { + public: + using DestructorType = typename SharedHandleTraits::DestructorType; + + using PoolTypeExport = PoolType; + + template + using ReturnType = decltype( std::declval().free( PoolType(), 0u, nullptr, Dispatcher() ) ); + + template + using DestroyFunctionPointerType = ReturnType ( DestructorType::* )( PoolType, uint32_t, const HandleType *, const Dispatcher & ) const; + + PoolFreeShared() = default; + + template + PoolFreeShared( SharedHandle pool, const Dispatcher & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) + : m_destroy( reinterpret_cast( static_cast>( &DestructorType::free ) ) ) + , m_dispatch( &dispatch ) + , m_pool( std::move( pool ) ) + { + } + + public: + void destroy( DestructorType parent, HandleType handle ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( m_destroy && m_dispatch && m_pool ); + ( parent.*m_destroy )( m_pool.get(), 1u, &handle, *m_dispatch ); + } + + private: + DestroyFunctionPointerType m_destroy = nullptr; + const detail::DispatchLoaderBase * m_dispatch = nullptr; + SharedHandle m_pool{}; + }; + +# if defined( __GNUC__ ) && !defined( __clang__ ) && !defined( __INTEL_COMPILER ) +# pragma GCC diagnostic pop +# elif defined( __clang__ ) && ( __clang_major__ >= 13 ) && !defined( __INTEL_COMPILER ) +# pragma clang diagnostic pop +# endif + + } // namespace detail + + //====================== + //=== SHARED HANDLEs === + //====================== + + //=== VK_VERSION_1_0 === + template <> + class SharedHandleTraits + { + public: + using DestructorType = NoDestructor; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedInstance = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = NoDestructor; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDevice = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectFreeShared; + }; + + using SharedDeviceMemory = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedFence = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedSemaphore = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedEvent = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedQueryPool = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedBuffer = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedBufferView = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedImage = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedImageView = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedShaderModule = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedPipelineCache = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedPipeline = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedPipelineLayout = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedSampler = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDescriptorPool = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::PoolFreeShared; + }; + + using SharedDescriptorSet = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDescriptorSetLayout = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedFramebuffer = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedRenderPass = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedCommandPool = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::PoolFreeShared; + }; + + using SharedCommandBuffer = SharedHandle; + + //=== VK_VERSION_1_1 === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedSamplerYcbcrConversion = SharedHandle; + using SharedSamplerYcbcrConversionKHR = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDescriptorUpdateTemplate = SharedHandle; + using SharedDescriptorUpdateTemplateKHR = SharedHandle; + + //=== VK_VERSION_1_3 === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedPrivateDataSlot = SharedHandle; + using SharedPrivateDataSlotEXT = SharedHandle; + + //=== VK_KHR_surface === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Instance; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedSurfaceKHR = SharedHandle; + + //=== VK_KHR_swapchain === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedSwapchainKHR = SharedHandle; + + //=== VK_KHR_display === + template <> + class SharedHandleTraits + { + public: + using DestructorType = PhysicalDevice; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDisplayKHR = SharedHandle; + + //=== VK_EXT_debug_report === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Instance; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDebugReportCallbackEXT = SharedHandle; + + //=== VK_KHR_video_queue === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedVideoSessionKHR = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedVideoSessionParametersKHR = SharedHandle; + + //=== VK_NVX_binary_import === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedCuModuleNVX = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedCuFunctionNVX = SharedHandle; + + //=== VK_EXT_debug_utils === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Instance; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDebugUtilsMessengerEXT = SharedHandle; + + //=== VK_KHR_acceleration_structure === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedAccelerationStructureKHR = SharedHandle; + + //=== VK_EXT_validation_cache === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedValidationCacheEXT = SharedHandle; + + //=== VK_NV_ray_tracing === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedAccelerationStructureNV = SharedHandle; + + //=== VK_INTEL_performance_query === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedPerformanceConfigurationINTEL = SharedHandle; + + //=== VK_KHR_deferred_host_operations === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDeferredOperationKHR = SharedHandle; + + //=== VK_NV_device_generated_commands === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedIndirectCommandsLayoutNV = SharedHandle; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_cuda_kernel_launch === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedCudaModuleNV = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedCudaFunctionNV = SharedHandle; +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedBufferCollectionFUCHSIA = SharedHandle; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_opacity_micromap === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedMicromapEXT = SharedHandle; + + //=== VK_ARM_tensors === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedTensorARM = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedTensorViewARM = SharedHandle; + + //=== VK_NV_optical_flow === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedOpticalFlowSessionNV = SharedHandle; + + //=== VK_EXT_shader_object === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedShaderEXT = SharedHandle; + + //=== VK_KHR_pipeline_binary === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedPipelineBinaryKHR = SharedHandle; + + //=== VK_ARM_data_graph === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedDataGraphPipelineSessionARM = SharedHandle; + + //=== VK_NV_external_compute_queue === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedExternalComputeQueueNV = SharedHandle; + + //=== VK_EXT_device_generated_commands === + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedIndirectCommandsLayoutEXT = SharedHandle; + + template <> + class SharedHandleTraits + { + public: + using DestructorType = Device; + using deleter = detail::ObjectDestroyShared; + }; + + using SharedIndirectExecutionSetEXT = SharedHandle; + + enum class SwapchainOwns + { + no, + yes, + }; + + struct ImageHeader : SharedHeader, typename SharedHandleTraits::deleter> + { + ImageHeader( SharedHandle> parent, + typename SharedHandleTraits::deleter deleter = typename SharedHandleTraits::deleter(), + SwapchainOwns swapchainOwned = SwapchainOwns::no ) VULKAN_HPP_NOEXCEPT + : SharedHeader, typename SharedHandleTraits::deleter>( std::move( parent ), std::move( deleter ) ) + , swapchainOwned( swapchainOwned ) + { + } + + SwapchainOwns swapchainOwned = SwapchainOwns::no; + }; + + template <> + class SharedHandle : public SharedHandleBase + { + using BaseType = SharedHandleBase; + using DeleterType = typename SharedHandleTraits::deleter; + friend BaseType; + + public: + SharedHandle() = default; + + explicit SharedHandle( Image handle, + SharedHandle> parent, + SwapchainOwns swapchain_owned = SwapchainOwns::no, + DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT + : BaseType( handle, std::move( parent ), std::move( deleter ), swapchain_owned ) + { + } + + protected: + static void internalDestroy( const ImageHeader & control, Image handle ) VULKAN_HPP_NOEXCEPT + { + if ( control.swapchainOwned == SwapchainOwns::no ) + { + control.deleter.destroy( control.parent.get(), handle ); + } + } + }; + + struct SwapchainHeader + { + SwapchainHeader( SharedHandle surface, + SharedHandle> parent, + typename SharedHandleTraits::deleter deleter = typename SharedHandleTraits::deleter() ) VULKAN_HPP_NOEXCEPT + : surface( std::move( surface ) ) + , parent( std::move( parent ) ) + , deleter( std::move( deleter ) ) + { + } + + SharedHandle surface{}; + SharedHandle> parent{}; + typename SharedHandleTraits::deleter deleter{}; + }; + + template <> + class SharedHandle : public SharedHandleBase + { + using BaseType = SharedHandleBase; + using DeleterType = typename SharedHandleTraits::deleter; + friend BaseType; + + public: + SharedHandle() = default; + + explicit SharedHandle( SwapchainKHR handle, + SharedHandle> parent, + SharedHandle surface, + DeleterType deleter = DeleterType() ) VULKAN_HPP_NOEXCEPT + : BaseType( handle, std::move( surface ), std::move( parent ), std::move( deleter ) ) + { + } + + public: + const SharedHandle & getSurface() const VULKAN_HPP_NOEXCEPT + { + return getHeader().surface; + } + + protected: + using BaseType::internalDestroy; + }; + + template + class SharedHandleBaseNoDestroy : public SharedHandleBase + { + public: + using SharedHandleBase::SharedHandleBase; + + const DestructorType & getDestructorType() const VULKAN_HPP_NOEXCEPT + { + return SharedHandleBase::getHeader(); + } + + protected: + static void internalDestroy( const DestructorType &, HandleType ) VULKAN_HPP_NOEXCEPT {} + }; + + //=== VK_VERSION_1_0 === + + template <> + class SharedHandle : public SharedHandleBaseNoDestroy + { + friend SharedHandleBase; + + public: + SharedHandle() = default; + + explicit SharedHandle( PhysicalDevice handle, SharedInstance parent ) noexcept + : SharedHandleBaseNoDestroy( handle, std::move( parent ) ) + { + } + }; + + using SharedPhysicalDevice = SharedHandle; + + template <> + class SharedHandle : public SharedHandleBaseNoDestroy + { + friend SharedHandleBase; + + public: + SharedHandle() = default; + + explicit SharedHandle( Queue handle, SharedDevice parent ) noexcept : SharedHandleBaseNoDestroy( handle, std::move( parent ) ) {} + }; + + using SharedQueue = SharedHandle; + + //=== VK_KHR_display === + + template <> + class SharedHandle : public SharedHandleBaseNoDestroy + { + friend SharedHandleBase; + + public: + SharedHandle() = default; + + explicit SharedHandle( DisplayModeKHR handle, SharedDisplayKHR parent ) noexcept + : SharedHandleBaseNoDestroy( handle, std::move( parent ) ) + { + } + }; + + using SharedDisplayModeKHR = SharedHandle; +#endif // !VULKAN_HPP_NO_SMART_HANDLE +} // namespace VULKAN_HPP_NAMESPACE +#endif // VULKAN_SHARED_HPP diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_static_assertions.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_static_assertions.hpp new file mode 100644 index 0000000000..1f8c4c5d74 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_static_assertions.hpp @@ -0,0 +1,9219 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_STATIC_ASSERTIONS_HPP +#define VULKAN_STATIC_ASSERTIONS_HPP + +#include + +//========================= +//=== static_assertions === +//========================= + +//=== VK_VERSION_1_0 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Extent2D is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Extent3D is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Offset2D is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Offset3D is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Rect2D is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BaseInStructure ) == sizeof( VkBaseInStructure ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BaseInStructure is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BaseOutStructure ) == sizeof( VkBaseOutStructure ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BaseOutStructure is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferMemoryBarrier is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DispatchIndirectCommand is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrawIndexedIndirectCommand is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrawIndirectCommand is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageMemoryBarrier is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "MemoryBarrier is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne ) == sizeof( VkPipelineCacheHeaderVersionOne ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCacheHeaderVersionOne is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AllocationCallbacks ) == sizeof( VkAllocationCallbacks ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AllocationCallbacks is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ApplicationInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FormatProperties ) == sizeof( VkFormatProperties ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FormatProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatProperties ) == sizeof( VkImageFormatProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageFormatProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Instance ) == sizeof( VkInstance ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Instance is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Instance is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "InstanceCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "MemoryHeap is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "MemoryType is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice ) == sizeof( VkPhysicalDevice ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "PhysicalDevice is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevice is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLimits is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMemoryProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSparseProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Device ) == sizeof( VkDevice ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Device is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Device is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceQueueCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExtensionProperties ) == sizeof( VkExtensionProperties ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExtensionProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LayerProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Queue ) == sizeof( VkQueue ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Queue is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Queue is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "SubmitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MappedMemoryRange ) == sizeof( VkMappedMemoryRange ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MappedMemoryRange is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemory ) == sizeof( VkDeviceMemory ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DeviceMemory is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "DeviceMemory is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryRequirements ) == sizeof( VkMemoryRequirements ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryRequirements is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindSparseInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresource ) == sizeof( VkImageSubresource ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageSubresource is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseBufferMemoryBindInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageFormatProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageMemoryBind is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageMemoryBindInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageMemoryRequirements is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageOpaqueMemoryBindInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseMemoryBind ) == sizeof( VkSparseMemoryBind ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseMemoryBind is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Fence ) == sizeof( VkFence ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Fence is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Fence is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FenceCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Semaphore ) == sizeof( VkSemaphore ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Semaphore is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Semaphore is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Event ) == sizeof( VkEvent ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Event is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Event is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "EventCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPool ) == sizeof( VkQueryPool ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "QueryPool is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "QueryPool is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueryPoolCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Buffer ) == sizeof( VkBuffer ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Buffer is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Buffer is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCreateInfo ) == sizeof( VkBufferCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferView ) == sizeof( VkBufferView ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "BufferView is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "BufferView is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferViewCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Image ) == sizeof( VkImage ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Image is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Image is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubresourceLayout ) == sizeof( VkSubresourceLayout ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubresourceLayout is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ComponentMapping ) == sizeof( VkComponentMapping ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ComponentMapping is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageSubresourceRange is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageView ) == sizeof( VkImageView ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "ImageView is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageView is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModule ) == sizeof( VkShaderModule ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "ShaderModule is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ShaderModule is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShaderModuleCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCache ) == sizeof( VkPipelineCache ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "PipelineCache is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "PipelineCache is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCacheCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ComputePipelineCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GraphicsPipelineCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Pipeline ) == sizeof( VkPipeline ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Pipeline is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Pipeline is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineColorBlendAttachmentState is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineColorBlendStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineDepthStencilStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineDynamicStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineInputAssemblyStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineMultisampleStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineShaderStageCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineTessellationStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineVertexInputStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SpecializationInfo ) == sizeof( VkSpecializationInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SpecializationInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SpecializationMapEntry is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "StencilOpState is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VertexInputAttributeDescription is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VertexInputBindingDescription is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Viewport is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineLayout ) == sizeof( VkPipelineLayout ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "PipelineLayout is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineLayout is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineLayoutCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PushConstantRange ) == sizeof( VkPushConstantRange ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PushConstantRange is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Sampler ) == sizeof( VkSampler ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Sampler is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Sampler is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyDescriptorSet is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorBufferInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorImageInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPool ) == sizeof( VkDescriptorPool ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DescriptorPool is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorPool is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorPoolCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorPoolSize is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSet ) == sizeof( VkDescriptorSet ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DescriptorSet is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "DescriptorSet is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DescriptorSetLayout is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetLayout is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetLayoutBinding is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetLayoutCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteDescriptorSet is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentDescription ) == sizeof( VkAttachmentDescription ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentDescription is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentReference ) == sizeof( VkAttachmentReference ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentReference is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Framebuffer ) == sizeof( VkFramebuffer ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "Framebuffer is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "Framebuffer is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FramebufferCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPass ) == sizeof( VkRenderPass ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "RenderPass is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "RenderPass is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDependency ) == sizeof( VkSubpassDependency ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassDependency is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDescription ) == sizeof( VkSubpassDescription ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassDescription is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandPool ) == sizeof( VkCommandPool ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "CommandPool is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "CommandPool is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandPoolCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBuffer ) == sizeof( VkCommandBuffer ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "CommandBuffer is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "CommandBuffer is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferBeginInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferInheritanceInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "BufferCopy is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferImageCopy is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClearAttachment is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearColorValue ) == sizeof( VkClearColorValue ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClearColorValue is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClearDepthStencilValue is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ClearRect is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearValue ) == sizeof( VkClearValue ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ClearValue is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageBlit is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageCopy is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageResolve is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageSubresourceLayers is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassBeginInfo is not nothrow_move_constructible!" ); + +//=== VK_VERSION_1_1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties ) == sizeof( VkPhysicalDeviceSubgroupProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSubgroupProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo ) == sizeof( VkBindBufferMemoryInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindBufferMemoryInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImageMemoryInfo ) == sizeof( VkBindImageMemoryInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindImageMemoryInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures ) == sizeof( VkPhysicalDevice16BitStorageFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevice16BitStorageFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements ) == sizeof( VkMemoryDedicatedRequirements ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryDedicatedRequirements is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo ) == sizeof( VkMemoryDedicatedAllocateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryDedicatedAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo ) == sizeof( VkMemoryAllocateFlagsInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryAllocateFlagsInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo ) == sizeof( VkDeviceGroupRenderPassBeginInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupRenderPassBeginInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo ) == sizeof( VkDeviceGroupCommandBufferBeginInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupCommandBufferBeginInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo ) == sizeof( VkDeviceGroupSubmitInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupSubmitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo ) == sizeof( VkDeviceGroupBindSparseInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupBindSparseInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo ) == sizeof( VkBindBufferMemoryDeviceGroupInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindBufferMemoryDeviceGroupInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo ) == sizeof( VkBindImageMemoryDeviceGroupInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindImageMemoryDeviceGroupInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties ) == sizeof( VkPhysicalDeviceGroupProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceGroupProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo ) == sizeof( VkDeviceGroupDeviceCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupDeviceCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 ) == sizeof( VkBufferMemoryRequirementsInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferMemoryRequirementsInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 ) == sizeof( VkImageMemoryRequirementsInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageMemoryRequirementsInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 ) == sizeof( VkImageSparseMemoryRequirementsInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageSparseMemoryRequirementsInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryRequirements2 ) == sizeof( VkMemoryRequirements2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryRequirements2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 ) == sizeof( VkSparseImageMemoryRequirements2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageMemoryRequirements2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 ) == sizeof( VkPhysicalDeviceFeatures2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFeatures2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 ) == sizeof( VkPhysicalDeviceProperties2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceProperties2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FormatProperties2 ) == sizeof( VkFormatProperties2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FormatProperties2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatProperties2 ) == sizeof( VkImageFormatProperties2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageFormatProperties2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 ) == sizeof( VkPhysicalDeviceImageFormatInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageFormatInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 ) == sizeof( VkQueueFamilyProperties2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyProperties2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 ) == sizeof( VkPhysicalDeviceMemoryProperties2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMemoryProperties2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 ) == sizeof( VkSparseImageFormatProperties2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SparseImageFormatProperties2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 ) == sizeof( VkPhysicalDeviceSparseImageFormatInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSparseImageFormatInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties ) == sizeof( VkPhysicalDevicePointClippingProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePointClippingProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo ) == sizeof( VkRenderPassInputAttachmentAspectCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassInputAttachmentAspectCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference ) == sizeof( VkInputAttachmentAspectReference ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "InputAttachmentAspectReference is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo ) == sizeof( VkImageViewUsageCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewUsageCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo ) == + sizeof( VkPipelineTessellationDomainOriginStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineTessellationDomainOriginStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo ) == sizeof( VkRenderPassMultiviewCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassMultiviewCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures ) == sizeof( VkPhysicalDeviceMultiviewFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiviewFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties ) == sizeof( VkPhysicalDeviceMultiviewProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiviewProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures ) == sizeof( VkPhysicalDeviceVariablePointersFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVariablePointersFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures ) == sizeof( VkPhysicalDeviceProtectedMemoryFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceProtectedMemoryFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties ) == sizeof( VkPhysicalDeviceProtectedMemoryProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceProtectedMemoryProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 ) == sizeof( VkDeviceQueueInfo2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceQueueInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo ) == sizeof( VkProtectedSubmitInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ProtectedSubmitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo ) == sizeof( VkSamplerYcbcrConversionCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerYcbcrConversionCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo ) == sizeof( VkSamplerYcbcrConversionInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerYcbcrConversionInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo ) == sizeof( VkBindImagePlaneMemoryInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindImagePlaneMemoryInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo ) == sizeof( VkImagePlaneMemoryRequirementsInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImagePlaneMemoryRequirementsInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures ) == + sizeof( VkPhysicalDeviceSamplerYcbcrConversionFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSamplerYcbcrConversionFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties ) == + sizeof( VkSamplerYcbcrConversionImageFormatProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerYcbcrConversionImageFormatProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ) == sizeof( VkSamplerYcbcrConversion ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "SamplerYcbcrConversion is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerYcbcrConversion is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate ) == sizeof( VkDescriptorUpdateTemplate ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "DescriptorUpdateTemplate is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorUpdateTemplate is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry ) == sizeof( VkDescriptorUpdateTemplateEntry ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorUpdateTemplateEntry is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo ) == sizeof( VkDescriptorUpdateTemplateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorUpdateTemplateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties ) == sizeof( VkExternalMemoryProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalMemoryProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo ) == sizeof( VkPhysicalDeviceExternalImageFormatInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalImageFormatInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties ) == sizeof( VkExternalImageFormatProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalImageFormatProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo ) == sizeof( VkPhysicalDeviceExternalBufferInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalBufferInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalBufferProperties ) == sizeof( VkExternalBufferProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalBufferProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties ) == sizeof( VkPhysicalDeviceIDProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceIDProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo ) == sizeof( VkExternalMemoryImageCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalMemoryImageCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo ) == sizeof( VkExternalMemoryBufferCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalMemoryBufferCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo ) == sizeof( VkExportMemoryAllocateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMemoryAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo ) == sizeof( VkPhysicalDeviceExternalFenceInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalFenceInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalFenceProperties ) == sizeof( VkExternalFenceProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalFenceProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo ) == sizeof( VkExportFenceCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportFenceCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo ) == sizeof( VkExportSemaphoreCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportSemaphoreCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo ) == sizeof( VkPhysicalDeviceExternalSemaphoreInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalSemaphoreInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties ) == sizeof( VkExternalSemaphoreProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalSemaphoreProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties ) == sizeof( VkPhysicalDeviceMaintenance3Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance3Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport ) == sizeof( VkDescriptorSetLayoutSupport ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetLayoutSupport is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures ) == sizeof( VkPhysicalDeviceShaderDrawParametersFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderDrawParametersFeatures is not nothrow_move_constructible!" ); + +//=== VK_VERSION_1_2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features ) == sizeof( VkPhysicalDeviceVulkan11Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan11Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties ) == sizeof( VkPhysicalDeviceVulkan11Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan11Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features ) == sizeof( VkPhysicalDeviceVulkan12Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan12Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties ) == sizeof( VkPhysicalDeviceVulkan12Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan12Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo ) == sizeof( VkImageFormatListCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageFormatListCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 ) == sizeof( VkRenderPassCreateInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassCreateInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentDescription2 ) == sizeof( VkAttachmentDescription2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentDescription2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentReference2 ) == sizeof( VkAttachmentReference2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentReference2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDescription2 ) == sizeof( VkSubpassDescription2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassDescription2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDependency2 ) == sizeof( VkSubpassDependency2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassDependency2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassBeginInfo ) == sizeof( VkSubpassBeginInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassBeginInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassEndInfo ) == sizeof( VkSubpassEndInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassEndInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures ) == sizeof( VkPhysicalDevice8BitStorageFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevice8BitStorageFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ConformanceVersion ) == sizeof( VkConformanceVersion ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ConformanceVersion is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties ) == sizeof( VkPhysicalDeviceDriverProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDriverProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features ) == sizeof( VkPhysicalDeviceShaderAtomicInt64Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderAtomicInt64Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features ) == sizeof( VkPhysicalDeviceShaderFloat16Int8Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderFloat16Int8Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties ) == sizeof( VkPhysicalDeviceFloatControlsProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFloatControlsProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo ) == sizeof( VkDescriptorSetLayoutBindingFlagsCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetLayoutBindingFlagsCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures ) == sizeof( VkPhysicalDeviceDescriptorIndexingFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorIndexingFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties ) == sizeof( VkPhysicalDeviceDescriptorIndexingProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorIndexingProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo ) == + sizeof( VkDescriptorSetVariableDescriptorCountAllocateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetVariableDescriptorCountAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport ) == + sizeof( VkDescriptorSetVariableDescriptorCountLayoutSupport ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetVariableDescriptorCountLayoutSupport is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve ) == sizeof( VkSubpassDescriptionDepthStencilResolve ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassDescriptionDepthStencilResolve is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties ) == + sizeof( VkPhysicalDeviceDepthStencilResolveProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDepthStencilResolveProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures ) == sizeof( VkPhysicalDeviceScalarBlockLayoutFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceScalarBlockLayoutFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo ) == sizeof( VkImageStencilUsageCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageStencilUsageCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo ) == sizeof( VkSamplerReductionModeCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerReductionModeCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties ) == + sizeof( VkPhysicalDeviceSamplerFilterMinmaxProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSamplerFilterMinmaxProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures ) == sizeof( VkPhysicalDeviceVulkanMemoryModelFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkanMemoryModelFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures ) == sizeof( VkPhysicalDeviceImagelessFramebufferFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImagelessFramebufferFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo ) == sizeof( VkFramebufferAttachmentsCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FramebufferAttachmentsCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo ) == sizeof( VkFramebufferAttachmentImageInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FramebufferAttachmentImageInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo ) == sizeof( VkRenderPassAttachmentBeginInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassAttachmentBeginInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures ) == + sizeof( VkPhysicalDeviceUniformBufferStandardLayoutFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceUniformBufferStandardLayoutFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures ) == + sizeof( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderSubgroupExtendedTypesFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures ) == + sizeof( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSeparateDepthStencilLayoutsFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout ) == sizeof( VkAttachmentReferenceStencilLayout ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentReferenceStencilLayout is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout ) == sizeof( VkAttachmentDescriptionStencilLayout ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentDescriptionStencilLayout is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures ) == sizeof( VkPhysicalDeviceHostQueryResetFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceHostQueryResetFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures ) == sizeof( VkPhysicalDeviceTimelineSemaphoreFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTimelineSemaphoreFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties ) == sizeof( VkPhysicalDeviceTimelineSemaphoreProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTimelineSemaphoreProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo ) == sizeof( VkSemaphoreTypeCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreTypeCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo ) == sizeof( VkTimelineSemaphoreSubmitInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TimelineSemaphoreSubmitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo ) == sizeof( VkSemaphoreWaitInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreWaitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo ) == sizeof( VkSemaphoreSignalInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreSignalInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures ) == sizeof( VkPhysicalDeviceBufferDeviceAddressFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceBufferDeviceAddressFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo ) == sizeof( VkBufferDeviceAddressInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferDeviceAddressInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo ) == sizeof( VkBufferOpaqueCaptureAddressCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferOpaqueCaptureAddressCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo ) == sizeof( VkMemoryOpaqueCaptureAddressAllocateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryOpaqueCaptureAddressAllocateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo ) == sizeof( VkDeviceMemoryOpaqueCaptureAddressInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceMemoryOpaqueCaptureAddressInfo is not nothrow_move_constructible!" ); + +//=== VK_VERSION_1_3 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features ) == sizeof( VkPhysicalDeviceVulkan13Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan13Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties ) == sizeof( VkPhysicalDeviceVulkan13Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan13Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo ) == sizeof( VkPipelineCreationFeedbackCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCreationFeedbackCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback ) == sizeof( VkPipelineCreationFeedback ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCreationFeedback is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures ) == + sizeof( VkPhysicalDeviceShaderTerminateInvocationFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderTerminateInvocationFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties ) == sizeof( VkPhysicalDeviceToolProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceToolProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures ) == + sizeof( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderDemoteToHelperInvocationFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures ) == sizeof( VkPhysicalDevicePrivateDataFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePrivateDataFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo ) == sizeof( VkDevicePrivateDataCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DevicePrivateDataCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo ) == sizeof( VkPrivateDataSlotCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PrivateDataSlotCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PrivateDataSlot ) == sizeof( VkPrivateDataSlot ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "PrivateDataSlot is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PrivateDataSlot is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures ) == + sizeof( VkPhysicalDevicePipelineCreationCacheControlFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineCreationCacheControlFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryBarrier2 ) == sizeof( VkMemoryBarrier2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryBarrier2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 ) == sizeof( VkBufferMemoryBarrier2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferMemoryBarrier2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 ) == sizeof( VkImageMemoryBarrier2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageMemoryBarrier2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DependencyInfo ) == sizeof( VkDependencyInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DependencyInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubmitInfo2 ) == sizeof( VkSubmitInfo2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "SubmitInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo ) == sizeof( VkSemaphoreSubmitInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreSubmitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo ) == sizeof( VkCommandBufferSubmitInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferSubmitInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features ) == sizeof( VkPhysicalDeviceSynchronization2Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSynchronization2Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures ) == + sizeof( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures ) == sizeof( VkPhysicalDeviceImageRobustnessFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageRobustnessFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyBufferInfo2 ) == sizeof( VkCopyBufferInfo2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyBufferInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyImageInfo2 ) == sizeof( VkCopyImageInfo2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyImageInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 ) == sizeof( VkCopyBufferToImageInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyBufferToImageInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 ) == sizeof( VkCopyImageToBufferInfo2 ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyImageToBufferInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BlitImageInfo2 ) == sizeof( VkBlitImageInfo2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BlitImageInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ResolveImageInfo2 ) == sizeof( VkResolveImageInfo2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ResolveImageInfo2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCopy2 ) == sizeof( VkBufferCopy2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "BufferCopy2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCopy2 ) == sizeof( VkImageCopy2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageCopy2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageBlit2 ) == sizeof( VkImageBlit2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageBlit2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferImageCopy2 ) == sizeof( VkBufferImageCopy2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferImageCopy2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageResolve2 ) == sizeof( VkImageResolve2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ImageResolve2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures ) == sizeof( VkPhysicalDeviceSubgroupSizeControlFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSubgroupSizeControlFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties ) == + sizeof( VkPhysicalDeviceSubgroupSizeControlProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSubgroupSizeControlProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo ) == + sizeof( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineShaderStageRequiredSubgroupSizeCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures ) == sizeof( VkPhysicalDeviceInlineUniformBlockFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceInlineUniformBlockFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties ) == sizeof( VkPhysicalDeviceInlineUniformBlockProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceInlineUniformBlockProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock ) == sizeof( VkWriteDescriptorSetInlineUniformBlock ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteDescriptorSetInlineUniformBlock is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo ) == sizeof( VkDescriptorPoolInlineUniformBlockCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorPoolInlineUniformBlockCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures ) == + sizeof( VkPhysicalDeviceTextureCompressionASTCHDRFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTextureCompressionASTCHDRFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingInfo ) == sizeof( VkRenderingInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "RenderingInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo ) == sizeof( VkRenderingAttachmentInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingAttachmentInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo ) == sizeof( VkPipelineRenderingCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRenderingCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures ) == sizeof( VkPhysicalDeviceDynamicRenderingFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDynamicRenderingFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo ) == sizeof( VkCommandBufferInheritanceRenderingInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferInheritanceRenderingInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures ) == + sizeof( VkPhysicalDeviceShaderIntegerDotProductFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderIntegerDotProductFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties ) == + sizeof( VkPhysicalDeviceShaderIntegerDotProductProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderIntegerDotProductProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties ) == + sizeof( VkPhysicalDeviceTexelBufferAlignmentProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTexelBufferAlignmentProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FormatProperties3 ) == sizeof( VkFormatProperties3 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FormatProperties3 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features ) == sizeof( VkPhysicalDeviceMaintenance4Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance4Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties ) == sizeof( VkPhysicalDeviceMaintenance4Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance4Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements ) == sizeof( VkDeviceBufferMemoryRequirements ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceBufferMemoryRequirements is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements ) == sizeof( VkDeviceImageMemoryRequirements ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceImageMemoryRequirements is not nothrow_move_constructible!" ); + +//=== VK_VERSION_1_4 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan14Features ) == sizeof( VkPhysicalDeviceVulkan14Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan14Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan14Properties ) == sizeof( VkPhysicalDeviceVulkan14Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVulkan14Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfo ) == sizeof( VkDeviceQueueGlobalPriorityCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceQueueGlobalPriorityCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeatures ) == sizeof( VkPhysicalDeviceGlobalPriorityQueryFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceGlobalPriorityQueryFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityProperties ) == sizeof( VkQueueFamilyGlobalPriorityProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyGlobalPriorityProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupRotateFeatures ) == sizeof( VkPhysicalDeviceShaderSubgroupRotateFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderSubgroupRotateFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloatControls2Features ) == sizeof( VkPhysicalDeviceShaderFloatControls2Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderFloatControls2Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderExpectAssumeFeatures ) == sizeof( VkPhysicalDeviceShaderExpectAssumeFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderExpectAssumeFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeatures ) == sizeof( VkPhysicalDeviceLineRasterizationFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLineRasterizationFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationProperties ) == sizeof( VkPhysicalDeviceLineRasterizationProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLineRasterizationProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfo ) == sizeof( VkPipelineRasterizationLineStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationLineStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorProperties ) == + sizeof( VkPhysicalDeviceVertexAttributeDivisorProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVertexAttributeDivisorProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescription ) == sizeof( VkVertexInputBindingDivisorDescription ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VertexInputBindingDivisorDescription is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfo ) == sizeof( VkPipelineVertexInputDivisorStateCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineVertexInputDivisorStateCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeatures ) == + sizeof( VkPhysicalDeviceVertexAttributeDivisorFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVertexAttributeDivisorFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8Features ) == sizeof( VkPhysicalDeviceIndexTypeUint8Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceIndexTypeUint8Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryMapInfo ) == sizeof( VkMemoryMapInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "MemoryMapInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryUnmapInfo ) == sizeof( VkMemoryUnmapInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryUnmapInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5Features ) == sizeof( VkPhysicalDeviceMaintenance5Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance5Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance5Properties ) == sizeof( VkPhysicalDeviceMaintenance5Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance5Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingAreaInfo ) == sizeof( VkRenderingAreaInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingAreaInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceImageSubresourceInfo ) == sizeof( VkDeviceImageSubresourceInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceImageSubresourceInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresource2 ) == sizeof( VkImageSubresource2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageSubresource2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubresourceLayout2 ) == sizeof( VkSubresourceLayout2 ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubresourceLayout2 is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCreateFlags2CreateInfo ) == sizeof( VkPipelineCreateFlags2CreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCreateFlags2CreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferUsageFlags2CreateInfo ) == sizeof( VkBufferUsageFlags2CreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferUsageFlags2CreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorProperties ) == sizeof( VkPhysicalDevicePushDescriptorProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePushDescriptorProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingLocalReadFeatures ) == + sizeof( VkPhysicalDeviceDynamicRenderingLocalReadFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDynamicRenderingLocalReadFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingAttachmentLocationInfo ) == sizeof( VkRenderingAttachmentLocationInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingAttachmentLocationInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingInputAttachmentIndexInfo ) == sizeof( VkRenderingInputAttachmentIndexInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingInputAttachmentIndexInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6Features ) == sizeof( VkPhysicalDeviceMaintenance6Features ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance6Features is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance6Properties ) == sizeof( VkPhysicalDeviceMaintenance6Properties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance6Properties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindMemoryStatus ) == sizeof( VkBindMemoryStatus ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindMemoryStatus is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindDescriptorSetsInfo ) == sizeof( VkBindDescriptorSetsInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindDescriptorSetsInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PushConstantsInfo ) == sizeof( VkPushConstantsInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PushConstantsInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PushDescriptorSetInfo ) == sizeof( VkPushDescriptorSetInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PushDescriptorSetInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PushDescriptorSetWithTemplateInfo ) == sizeof( VkPushDescriptorSetWithTemplateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PushDescriptorSetWithTemplateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineProtectedAccessFeatures ) == + sizeof( VkPhysicalDevicePipelineProtectedAccessFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineProtectedAccessFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessFeatures ) == sizeof( VkPhysicalDevicePipelineRobustnessFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineRobustnessFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineRobustnessProperties ) == sizeof( VkPhysicalDevicePipelineRobustnessProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineRobustnessProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRobustnessCreateInfo ) == sizeof( VkPipelineRobustnessCreateInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRobustnessCreateInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyFeatures ) == sizeof( VkPhysicalDeviceHostImageCopyFeatures ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceHostImageCopyFeatures is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostImageCopyProperties ) == sizeof( VkPhysicalDeviceHostImageCopyProperties ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceHostImageCopyProperties is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryToImageCopy ) == sizeof( VkMemoryToImageCopy ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryToImageCopy is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageToMemoryCopy ) == sizeof( VkImageToMemoryCopy ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageToMemoryCopy is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMemoryToImageInfo ) == sizeof( VkCopyMemoryToImageInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMemoryToImageInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyImageToMemoryInfo ) == sizeof( VkCopyImageToMemoryInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyImageToMemoryInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyImageToImageInfo ) == sizeof( VkCopyImageToImageInfo ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyImageToImageInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HostImageLayoutTransitionInfo ) == sizeof( VkHostImageLayoutTransitionInfo ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "HostImageLayoutTransitionInfo is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubresourceHostMemcpySize ) == sizeof( VkSubresourceHostMemcpySize ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubresourceHostMemcpySize is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HostImageCopyDevicePerformanceQuery ) == sizeof( VkHostImageCopyDevicePerformanceQuery ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "HostImageCopyDevicePerformanceQuery is not nothrow_move_constructible!" ); + +//=== VK_KHR_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceKHR ) == sizeof( VkSurfaceKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "SurfaceKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "SurfaceKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceFormatKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_swapchain === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainKHR ) == sizeof( VkSwapchainKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "SwapchainKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "SwapchainKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR ) == sizeof( VkImageSwapchainCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageSwapchainCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR ) == sizeof( VkBindImageMemorySwapchainInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindImageMemorySwapchainInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR ) == sizeof( VkAcquireNextImageInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AcquireNextImageInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR ) == sizeof( VkDeviceGroupPresentCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupPresentCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR ) == sizeof( VkDeviceGroupPresentInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupPresentInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR ) == sizeof( VkDeviceGroupSwapchainCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceGroupSwapchainCreateInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_display === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayKHR ) == sizeof( VkDisplayKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DisplayKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "DisplayKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayModeCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeKHR ) == sizeof( VkDisplayModeKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DisplayModeKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayModeKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayModeParametersKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayModePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPlaneCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPlanePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplaySurfaceCreateInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_display_swapchain === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPresentInfoKHR is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) +//=== VK_KHR_xlib_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "XlibSurfaceCreateInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) +//=== VK_KHR_xcb_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "XcbSurfaceCreateInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) +//=== VK_KHR_wayland_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WaylandSurfaceCreateInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) +//=== VK_KHR_android_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AndroidSurfaceCreateInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_win32_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "Win32SurfaceCreateInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_EXT_debug_report === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "DebugReportCallbackEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugReportCallbackEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugReportCallbackCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_AMD_rasterization_order === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD ) == + sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationStateRasterizationOrderAMD is not nothrow_move_constructible!" ); + +//=== VK_EXT_debug_marker === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugMarkerObjectNameInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugMarkerObjectTagInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugMarkerMarkerInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_queue === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionKHR ) == sizeof( VkVideoSessionKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "VideoSessionKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoSessionKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR ) == sizeof( VkVideoSessionParametersKHR ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "VideoSessionParametersKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoSessionParametersKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusPropertiesKHR ) == sizeof( VkQueueFamilyQueryResultStatusPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyQueryResultStatusPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyVideoPropertiesKHR ) == sizeof( VkQueueFamilyVideoPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyVideoPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR ) == sizeof( VkVideoProfileInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoProfileListInfoKHR ) == sizeof( VkVideoProfileListInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoProfileListInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR ) == sizeof( VkVideoCapabilitiesKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR ) == sizeof( VkPhysicalDeviceVideoFormatInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoFormatInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR ) == sizeof( VkVideoFormatPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoFormatPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR ) == sizeof( VkVideoPictureResourceInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoPictureResourceInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR ) == sizeof( VkVideoReferenceSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoReferenceSlotInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionMemoryRequirementsKHR ) == sizeof( VkVideoSessionMemoryRequirementsKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoSessionMemoryRequirementsKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindVideoSessionMemoryInfoKHR ) == sizeof( VkBindVideoSessionMemoryInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindVideoSessionMemoryInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR ) == sizeof( VkVideoSessionCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoSessionCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR ) == sizeof( VkVideoSessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoSessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR ) == sizeof( VkVideoSessionParametersUpdateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoSessionParametersUpdateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR ) == sizeof( VkVideoBeginCodingInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoBeginCodingInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR ) == sizeof( VkVideoEndCodingInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEndCodingInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR ) == sizeof( VkVideoCodingControlInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoCodingControlInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_decode_queue === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeCapabilitiesKHR ) == sizeof( VkVideoDecodeCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeUsageInfoKHR ) == sizeof( VkVideoDecodeUsageInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeUsageInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR ) == sizeof( VkVideoDecodeInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_dedicated_allocation === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DedicatedAllocationImageCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DedicatedAllocationBufferCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV ) == sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DedicatedAllocationMemoryAllocateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_transform_feedback === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT ) == sizeof( VkPhysicalDeviceTransformFeedbackFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTransformFeedbackFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT ) == + sizeof( VkPhysicalDeviceTransformFeedbackPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTransformFeedbackPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT ) == + sizeof( VkPipelineRasterizationStateStreamCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationStateStreamCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_NVX_binary_import === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuModuleNVX ) == sizeof( VkCuModuleNVX ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "CuModuleNVX is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "CuModuleNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuFunctionNVX ) == sizeof( VkCuFunctionNVX ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "CuFunctionNVX is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "CuFunctionNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX ) == sizeof( VkCuModuleCreateInfoNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CuModuleCreateInfoNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuModuleTexturingModeCreateInfoNVX ) == sizeof( VkCuModuleTexturingModeCreateInfoNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CuModuleTexturingModeCreateInfoNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX ) == sizeof( VkCuFunctionCreateInfoNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CuFunctionCreateInfoNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX ) == sizeof( VkCuLaunchInfoNVX ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CuLaunchInfoNVX is not nothrow_move_constructible!" ); + +//=== VK_NVX_image_view_handle === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX ) == sizeof( VkImageViewHandleInfoNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewHandleInfoNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX ) == sizeof( VkImageViewAddressPropertiesNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewAddressPropertiesNVX is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_encode_h264 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesKHR ) == sizeof( VkVideoEncodeH264CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264QualityLevelPropertiesKHR ) == sizeof( VkVideoEncodeH264QualityLevelPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264QualityLevelPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoKHR ) == sizeof( VkVideoEncodeH264SessionCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264SessionCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoKHR ) == + sizeof( VkVideoEncodeH264SessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264SessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoKHR ) == sizeof( VkVideoEncodeH264SessionParametersAddInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264SessionParametersAddInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersGetInfoKHR ) == sizeof( VkVideoEncodeH264SessionParametersGetInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264SessionParametersGetInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersFeedbackInfoKHR ) == + sizeof( VkVideoEncodeH264SessionParametersFeedbackInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264SessionParametersFeedbackInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264PictureInfoKHR ) == sizeof( VkVideoEncodeH264PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264PictureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoKHR ) == sizeof( VkVideoEncodeH264DpbSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264DpbSlotInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceInfoKHR ) == sizeof( VkVideoEncodeH264NaluSliceInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264NaluSliceInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileInfoKHR ) == sizeof( VkVideoEncodeH264ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoKHR ) == sizeof( VkVideoEncodeH264RateControlInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264RateControlInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoKHR ) == sizeof( VkVideoEncodeH264RateControlLayerInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264RateControlLayerInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR ) == sizeof( VkVideoEncodeH264QpKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264QpKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeKHR ) == sizeof( VkVideoEncodeH264FrameSizeKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264FrameSizeKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264GopRemainingFrameInfoKHR ) == sizeof( VkVideoEncodeH264GopRemainingFrameInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264GopRemainingFrameInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_encode_h265 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesKHR ) == sizeof( VkVideoEncodeH265CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoKHR ) == sizeof( VkVideoEncodeH265SessionCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265SessionCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265QualityLevelPropertiesKHR ) == sizeof( VkVideoEncodeH265QualityLevelPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265QualityLevelPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoKHR ) == + sizeof( VkVideoEncodeH265SessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265SessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoKHR ) == sizeof( VkVideoEncodeH265SessionParametersAddInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265SessionParametersAddInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersGetInfoKHR ) == sizeof( VkVideoEncodeH265SessionParametersGetInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265SessionParametersGetInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersFeedbackInfoKHR ) == + sizeof( VkVideoEncodeH265SessionParametersFeedbackInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265SessionParametersFeedbackInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265PictureInfoKHR ) == sizeof( VkVideoEncodeH265PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265PictureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoKHR ) == sizeof( VkVideoEncodeH265DpbSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265DpbSlotInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentInfoKHR ) == sizeof( VkVideoEncodeH265NaluSliceSegmentInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265NaluSliceSegmentInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileInfoKHR ) == sizeof( VkVideoEncodeH265ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoKHR ) == sizeof( VkVideoEncodeH265RateControlInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265RateControlInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoKHR ) == sizeof( VkVideoEncodeH265RateControlLayerInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265RateControlLayerInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR ) == sizeof( VkVideoEncodeH265QpKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265QpKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeKHR ) == sizeof( VkVideoEncodeH265FrameSizeKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265FrameSizeKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265GopRemainingFrameInfoKHR ) == sizeof( VkVideoEncodeH265GopRemainingFrameInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265GopRemainingFrameInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_decode_h264 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileInfoKHR ) == sizeof( VkVideoDecodeH264ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesKHR ) == sizeof( VkVideoDecodeH264CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoKHR ) == + sizeof( VkVideoDecodeH264SessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264SessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoKHR ) == sizeof( VkVideoDecodeH264SessionParametersAddInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264SessionParametersAddInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoKHR ) == sizeof( VkVideoDecodeH264PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264PictureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoKHR ) == sizeof( VkVideoDecodeH264DpbSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264DpbSlotInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_AMD_texture_gather_bias_lod === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD ) == sizeof( VkTextureLODGatherFormatPropertiesAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TextureLODGatherFormatPropertiesAMD is not nothrow_move_constructible!" ); + +//=== VK_AMD_shader_info === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD ) == sizeof( VkShaderResourceUsageAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShaderResourceUsageAMD is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD ) == sizeof( VkShaderStatisticsInfoAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShaderStatisticsInfoAMD is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_GGP ) +//=== VK_GGP_stream_descriptor_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP ) == sizeof( VkStreamDescriptorSurfaceCreateInfoGGP ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "StreamDescriptorSurfaceCreateInfoGGP is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_GGP*/ + +//=== VK_NV_corner_sampled_image === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV ) == sizeof( VkPhysicalDeviceCornerSampledImageFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCornerSampledImageFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_external_memory_capabilities === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalImageFormatPropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_external_memory === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalMemoryImageCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMemoryAllocateInfoNV is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_NV_external_memory_win32 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryWin32HandleInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMemoryWin32HandleInfoNV is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_NV_win32_keyed_mutex === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "Win32KeyedMutexAcquireReleaseInfoNV is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_EXT_validation_flags === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ValidationFlagsEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_VI_NN ) +//=== VK_NN_vi_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN ) == sizeof( VkViSurfaceCreateInfoNN ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ViSurfaceCreateInfoNN is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_VI_NN*/ + +//=== VK_EXT_astc_decode_mode === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT ) == sizeof( VkImageViewASTCDecodeModeEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewASTCDecodeModeEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT ) == sizeof( VkPhysicalDeviceASTCDecodeFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceASTCDecodeFeaturesEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_external_memory_win32 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR ) == sizeof( VkImportMemoryWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryWin32HandleInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR ) == sizeof( VkExportMemoryWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMemoryWin32HandleInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR ) == sizeof( VkMemoryWin32HandlePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryWin32HandlePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR ) == sizeof( VkMemoryGetWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryGetWin32HandleInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_external_memory_fd === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR ) == sizeof( VkImportMemoryFdInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryFdInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR ) == sizeof( VkMemoryFdPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryFdPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR ) == sizeof( VkMemoryGetFdInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryGetFdInfoKHR is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_win32_keyed_mutex === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "Win32KeyedMutexAcquireReleaseInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_external_semaphore_win32 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR ) == sizeof( VkImportSemaphoreWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportSemaphoreWin32HandleInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR ) == sizeof( VkExportSemaphoreWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportSemaphoreWin32HandleInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR ) == sizeof( VkD3D12FenceSubmitInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "D3D12FenceSubmitInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR ) == sizeof( VkSemaphoreGetWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreGetWin32HandleInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_external_semaphore_fd === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR ) == sizeof( VkImportSemaphoreFdInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportSemaphoreFdInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR ) == sizeof( VkSemaphoreGetFdInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreGetFdInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_conditional_rendering === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT ) == sizeof( VkConditionalRenderingBeginInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ConditionalRenderingBeginInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT ) == + sizeof( VkPhysicalDeviceConditionalRenderingFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceConditionalRenderingFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT ) == + sizeof( VkCommandBufferInheritanceConditionalRenderingInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferInheritanceConditionalRenderingInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_incremental_present === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentRegionsKHR ) == sizeof( VkPresentRegionsKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentRegionsKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentRegionKHR ) == sizeof( VkPresentRegionKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentRegionKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RectLayerKHR ) == sizeof( VkRectLayerKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "RectLayerKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_clip_space_w_scaling === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ViewportWScalingNV ) == sizeof( VkViewportWScalingNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ViewportWScalingNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV ) == sizeof( VkPipelineViewportWScalingStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportWScalingStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_display_surface_counter === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT ) == sizeof( VkSurfaceCapabilities2EXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilities2EXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_display_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT ) == sizeof( VkDisplayPowerInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPowerInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT ) == sizeof( VkDeviceEventInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceEventInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT ) == sizeof( VkDisplayEventInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayEventInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT ) == sizeof( VkSwapchainCounterCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainCounterCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_GOOGLE_display_timing === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE ) == sizeof( VkRefreshCycleDurationGOOGLE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RefreshCycleDurationGOOGLE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE ) == sizeof( VkPastPresentationTimingGOOGLE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PastPresentationTimingGOOGLE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE ) == sizeof( VkPresentTimesInfoGOOGLE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentTimesInfoGOOGLE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE ) == sizeof( VkPresentTimeGOOGLE ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentTimeGOOGLE is not nothrow_move_constructible!" ); + +//=== VK_NVX_multiview_per_view_attributes === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ) == + sizeof( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX ) == sizeof( VkMultiviewPerViewAttributesInfoNVX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MultiviewPerViewAttributesInfoNVX is not nothrow_move_constructible!" ); + +//=== VK_NV_viewport_swizzle === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ViewportSwizzleNV ) == sizeof( VkViewportSwizzleNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ViewportSwizzleNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV ) == sizeof( VkPipelineViewportSwizzleStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportSwizzleStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_discard_rectangles === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT ) == + sizeof( VkPhysicalDeviceDiscardRectanglePropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDiscardRectanglePropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT ) == sizeof( VkPipelineDiscardRectangleStateCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineDiscardRectangleStateCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_conservative_rasterization === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT ) == + sizeof( VkPhysicalDeviceConservativeRasterizationPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceConservativeRasterizationPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT ) == + sizeof( VkPipelineRasterizationConservativeStateCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationConservativeStateCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_depth_clip_enable === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT ) == sizeof( VkPhysicalDeviceDepthClipEnableFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDepthClipEnableFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT ) == + sizeof( VkPipelineRasterizationDepthClipStateCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationDepthClipStateCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_hdr_metadata === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HdrMetadataEXT ) == sizeof( VkHdrMetadataEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "HdrMetadataEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::XYColorEXT ) == sizeof( VkXYColorEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "XYColorEXT is not nothrow_move_constructible!" ); + +//=== VK_IMG_relaxed_line_rasterization === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRelaxedLineRasterizationFeaturesIMG ) == + sizeof( VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRelaxedLineRasterizationFeaturesIMG is not nothrow_move_constructible!" ); + +//=== VK_KHR_shared_presentable_image === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR ) == sizeof( VkSharedPresentSurfaceCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SharedPresentSurfaceCapabilitiesKHR is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_KHR_external_fence_win32 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR ) == sizeof( VkImportFenceWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportFenceWin32HandleInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR ) == sizeof( VkExportFenceWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportFenceWin32HandleInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR ) == sizeof( VkFenceGetWin32HandleInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FenceGetWin32HandleInfoKHR is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_KHR_external_fence_fd === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR ) == sizeof( VkImportFenceFdInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportFenceFdInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR ) == sizeof( VkFenceGetFdInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FenceGetFdInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_performance_query === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR ) == sizeof( VkPhysicalDevicePerformanceQueryFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePerformanceQueryFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR ) == + sizeof( VkPhysicalDevicePerformanceQueryPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePerformanceQueryPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterKHR ) == sizeof( VkPerformanceCounterKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceCounterKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR ) == sizeof( VkPerformanceCounterDescriptionKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceCounterDescriptionKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR ) == sizeof( VkQueryPoolPerformanceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueryPoolPerformanceCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR ) == sizeof( VkPerformanceCounterResultKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceCounterResultKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR ) == sizeof( VkAcquireProfilingLockInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AcquireProfilingLockInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR ) == sizeof( VkPerformanceQuerySubmitInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceQuerySubmitInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_get_surface_capabilities2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR ) == sizeof( VkPhysicalDeviceSurfaceInfo2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSurfaceInfo2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR ) == sizeof( VkSurfaceCapabilities2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilities2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR ) == sizeof( VkSurfaceFormat2KHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceFormat2KHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_get_display_properties2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayProperties2KHR ) == sizeof( VkDisplayProperties2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayProperties2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR ) == sizeof( VkDisplayPlaneProperties2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPlaneProperties2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR ) == sizeof( VkDisplayModeProperties2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayModeProperties2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR ) == sizeof( VkDisplayPlaneInfo2KHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPlaneInfo2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR ) == sizeof( VkDisplayPlaneCapabilities2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayPlaneCapabilities2KHR is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_IOS_MVK ) +//=== VK_MVK_ios_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK ) == sizeof( VkIOSSurfaceCreateInfoMVK ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IOSSurfaceCreateInfoMVK is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) +//=== VK_MVK_macos_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK ) == sizeof( VkMacOSSurfaceCreateInfoMVK ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MacOSSurfaceCreateInfoMVK is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + +//=== VK_EXT_debug_utils === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT ) == sizeof( VkDebugUtilsLabelEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugUtilsLabelEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT ) == sizeof( VkDebugUtilsMessengerCallbackDataEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugUtilsMessengerCallbackDataEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT ) == sizeof( VkDebugUtilsMessengerCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugUtilsMessengerCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT ) == sizeof( VkDebugUtilsMessengerEXT ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "DebugUtilsMessengerEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugUtilsMessengerEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT ) == sizeof( VkDebugUtilsObjectNameInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugUtilsObjectNameInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT ) == sizeof( VkDebugUtilsObjectTagInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DebugUtilsObjectTagInfoEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) +//=== VK_ANDROID_external_memory_android_hardware_buffer === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID ) == sizeof( VkAndroidHardwareBufferUsageANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AndroidHardwareBufferUsageANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID ) == sizeof( VkAndroidHardwareBufferPropertiesANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AndroidHardwareBufferPropertiesANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID ) == + sizeof( VkAndroidHardwareBufferFormatPropertiesANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AndroidHardwareBufferFormatPropertiesANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID ) == sizeof( VkImportAndroidHardwareBufferInfoANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportAndroidHardwareBufferInfoANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID ) == sizeof( VkMemoryGetAndroidHardwareBufferInfoANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryGetAndroidHardwareBufferInfoANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalFormatANDROID ) == sizeof( VkExternalFormatANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalFormatANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID ) == + sizeof( VkAndroidHardwareBufferFormatProperties2ANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AndroidHardwareBufferFormatProperties2ANDROID is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_AMDX_shader_enqueue === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEnqueueFeaturesAMDX ) == sizeof( VkPhysicalDeviceShaderEnqueueFeaturesAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderEnqueueFeaturesAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEnqueuePropertiesAMDX ) == sizeof( VkPhysicalDeviceShaderEnqueuePropertiesAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderEnqueuePropertiesAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineScratchSizeAMDX ) == sizeof( VkExecutionGraphPipelineScratchSizeAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExecutionGraphPipelineScratchSizeAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExecutionGraphPipelineCreateInfoAMDX ) == sizeof( VkExecutionGraphPipelineCreateInfoAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExecutionGraphPipelineCreateInfoAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DispatchGraphInfoAMDX ) == sizeof( VkDispatchGraphInfoAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DispatchGraphInfoAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DispatchGraphCountInfoAMDX ) == sizeof( VkDispatchGraphCountInfoAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DispatchGraphCountInfoAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineShaderStageNodeCreateInfoAMDX ) == sizeof( VkPipelineShaderStageNodeCreateInfoAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineShaderStageNodeCreateInfoAMDX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX ) == sizeof( VkDeviceOrHostAddressConstAMDX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceOrHostAddressConstAMDX is not nothrow_move_constructible!" ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_AMD_mixed_attachment_samples === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD ) == sizeof( VkAttachmentSampleCountInfoAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentSampleCountInfoAMD is not nothrow_move_constructible!" ); + +//=== VK_KHR_shader_bfloat16 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderBfloat16FeaturesKHR ) == sizeof( VkPhysicalDeviceShaderBfloat16FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderBfloat16FeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_sample_locations === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SampleLocationEXT ) == sizeof( VkSampleLocationEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SampleLocationEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT ) == sizeof( VkSampleLocationsInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SampleLocationsInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT ) == sizeof( VkAttachmentSampleLocationsEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentSampleLocationsEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT ) == sizeof( VkSubpassSampleLocationsEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassSampleLocationsEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT ) == sizeof( VkRenderPassSampleLocationsBeginInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassSampleLocationsBeginInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT ) == sizeof( VkPipelineSampleLocationsStateCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineSampleLocationsStateCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT ) == sizeof( VkPhysicalDeviceSampleLocationsPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSampleLocationsPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT ) == sizeof( VkMultisamplePropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MultisamplePropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_blend_operation_advanced === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT ) == + sizeof( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceBlendOperationAdvancedFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT ) == + sizeof( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceBlendOperationAdvancedPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT ) == + sizeof( VkPipelineColorBlendAdvancedStateCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineColorBlendAdvancedStateCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_NV_fragment_coverage_to_color === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV ) == sizeof( VkPipelineCoverageToColorStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCoverageToColorStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_acceleration_structure === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR ) == sizeof( VkDeviceOrHostAddressKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceOrHostAddressKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR ) == sizeof( VkDeviceOrHostAddressConstKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceOrHostAddressConstKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR ) == sizeof( VkAccelerationStructureBuildRangeInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureBuildRangeInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AabbPositionsKHR ) == sizeof( VkAabbPositionsKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AabbPositionsKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR ) == + sizeof( VkAccelerationStructureGeometryTrianglesDataKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryTrianglesDataKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TransformMatrixKHR ) == sizeof( VkTransformMatrixKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TransformMatrixKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR ) == sizeof( VkAccelerationStructureBuildGeometryInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureBuildGeometryInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR ) == sizeof( VkAccelerationStructureGeometryAabbsDataKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryAabbsDataKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR ) == sizeof( VkAccelerationStructureInstanceKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureInstanceKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR ) == + sizeof( VkAccelerationStructureGeometryInstancesDataKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryInstancesDataKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR ) == sizeof( VkAccelerationStructureGeometryDataKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryDataKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR ) == sizeof( VkAccelerationStructureGeometryKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR ) == sizeof( VkAccelerationStructureCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR ) == sizeof( VkAccelerationStructureKHR ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "AccelerationStructureKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR ) == sizeof( VkWriteDescriptorSetAccelerationStructureKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteDescriptorSetAccelerationStructureKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR ) == + sizeof( VkPhysicalDeviceAccelerationStructureFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAccelerationStructureFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR ) == + sizeof( VkPhysicalDeviceAccelerationStructurePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAccelerationStructurePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR ) == sizeof( VkAccelerationStructureDeviceAddressInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureDeviceAddressInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR ) == sizeof( VkAccelerationStructureVersionInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureVersionInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR ) == sizeof( VkCopyAccelerationStructureToMemoryInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyAccelerationStructureToMemoryInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR ) == sizeof( VkCopyMemoryToAccelerationStructureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMemoryToAccelerationStructureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR ) == sizeof( VkCopyAccelerationStructureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyAccelerationStructureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR ) == sizeof( VkAccelerationStructureBuildSizesInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureBuildSizesInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_ray_tracing_pipeline === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR ) == sizeof( VkRayTracingShaderGroupCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RayTracingShaderGroupCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR ) == sizeof( VkRayTracingPipelineCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RayTracingPipelineCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR ) == + sizeof( VkPhysicalDeviceRayTracingPipelineFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingPipelineFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR ) == + sizeof( VkPhysicalDeviceRayTracingPipelinePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingPipelinePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR ) == sizeof( VkStridedDeviceAddressRegionKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "StridedDeviceAddressRegionKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR ) == sizeof( VkTraceRaysIndirectCommandKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TraceRaysIndirectCommandKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR ) == sizeof( VkRayTracingPipelineInterfaceCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RayTracingPipelineInterfaceCreateInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_ray_query === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR ) == sizeof( VkPhysicalDeviceRayQueryFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayQueryFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_framebuffer_mixed_samples === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV ) == + sizeof( VkPipelineCoverageModulationStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCoverageModulationStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_NV_shader_sm_builtins === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV ) == sizeof( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderSMBuiltinsPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV ) == sizeof( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderSMBuiltinsFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_image_drm_format_modifier === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT ) == sizeof( VkDrmFormatModifierPropertiesListEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrmFormatModifierPropertiesListEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT ) == sizeof( VkDrmFormatModifierPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrmFormatModifierPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT ) == + sizeof( VkPhysicalDeviceImageDrmFormatModifierInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageDrmFormatModifierInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT ) == sizeof( VkImageDrmFormatModifierListCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageDrmFormatModifierListCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT ) == + sizeof( VkImageDrmFormatModifierExplicitCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageDrmFormatModifierExplicitCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT ) == sizeof( VkImageDrmFormatModifierPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageDrmFormatModifierPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT ) == sizeof( VkDrmFormatModifierPropertiesList2EXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrmFormatModifierPropertiesList2EXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT ) == sizeof( VkDrmFormatModifierProperties2EXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrmFormatModifierProperties2EXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_validation_cache === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationCacheEXT ) == sizeof( VkValidationCacheEXT ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "ValidationCacheEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ValidationCacheEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT ) == sizeof( VkValidationCacheCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ValidationCacheCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT ) == sizeof( VkShaderModuleValidationCacheCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShaderModuleValidationCacheCreateInfoEXT is not nothrow_move_constructible!" ); + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_KHR_portability_subset === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR ) == sizeof( VkPhysicalDevicePortabilitySubsetFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePortabilitySubsetFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR ) == + sizeof( VkPhysicalDevicePortabilitySubsetPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePortabilitySubsetPropertiesKHR is not nothrow_move_constructible!" ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_NV_shading_rate_image === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV ) == sizeof( VkShadingRatePaletteNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShadingRatePaletteNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV ) == + sizeof( VkPipelineViewportShadingRateImageStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportShadingRateImageStateCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV ) == sizeof( VkPhysicalDeviceShadingRateImageFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShadingRateImageFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV ) == sizeof( VkPhysicalDeviceShadingRateImagePropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShadingRateImagePropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV ) == sizeof( VkCoarseSampleLocationNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CoarseSampleLocationNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV ) == sizeof( VkCoarseSampleOrderCustomNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CoarseSampleOrderCustomNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV ) == + sizeof( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportCoarseSampleOrderStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_NV_ray_tracing === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV ) == sizeof( VkRayTracingShaderGroupCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RayTracingShaderGroupCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV ) == sizeof( VkRayTracingPipelineCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RayTracingPipelineCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV ) == sizeof( VkGeometryTrianglesNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeometryTrianglesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryAABBNV ) == sizeof( VkGeometryAABBNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeometryAABBNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryDataNV ) == sizeof( VkGeometryDataNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeometryDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryNV ) == sizeof( VkGeometryNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "GeometryNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV ) == sizeof( VkAccelerationStructureInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV ) == sizeof( VkAccelerationStructureCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureNV ) == sizeof( VkAccelerationStructureNV ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "AccelerationStructureNV is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV ) == sizeof( VkBindAccelerationStructureMemoryInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindAccelerationStructureMemoryInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV ) == sizeof( VkWriteDescriptorSetAccelerationStructureNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteDescriptorSetAccelerationStructureNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV ) == + sizeof( VkAccelerationStructureMemoryRequirementsInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureMemoryRequirementsInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV ) == sizeof( VkPhysicalDeviceRayTracingPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingPropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_representative_fragment_test === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV ) == + sizeof( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRepresentativeFragmentTestFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV ) == + sizeof( VkPipelineRepresentativeFragmentTestStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRepresentativeFragmentTestStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_filter_cubic === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT ) == sizeof( VkPhysicalDeviceImageViewImageFormatInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageViewImageFormatInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT ) == + sizeof( VkFilterCubicImageViewImageFormatPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FilterCubicImageViewImageFormatPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_external_memory_host === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT ) == sizeof( VkImportMemoryHostPointerInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryHostPointerInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT ) == sizeof( VkMemoryHostPointerPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryHostPointerPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT ) == + sizeof( VkPhysicalDeviceExternalMemoryHostPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalMemoryHostPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_shader_clock === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR ) == sizeof( VkPhysicalDeviceShaderClockFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderClockFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_AMD_pipeline_compiler_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD ) == sizeof( VkPipelineCompilerControlCreateInfoAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCompilerControlCreateInfoAMD is not nothrow_move_constructible!" ); + +//=== VK_AMD_shader_core_properties === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD ) == sizeof( VkPhysicalDeviceShaderCorePropertiesAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderCorePropertiesAMD is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_decode_h265 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileInfoKHR ) == sizeof( VkVideoDecodeH265ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesKHR ) == sizeof( VkVideoDecodeH265CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoKHR ) == + sizeof( VkVideoDecodeH265SessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265SessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoKHR ) == sizeof( VkVideoDecodeH265SessionParametersAddInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265SessionParametersAddInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoKHR ) == sizeof( VkVideoDecodeH265PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265PictureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoKHR ) == sizeof( VkVideoDecodeH265DpbSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265DpbSlotInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_AMD_memory_overallocation_behavior === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD ) == sizeof( VkDeviceMemoryOverallocationCreateInfoAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceMemoryOverallocationCreateInfoAMD is not nothrow_move_constructible!" ); + +//=== VK_EXT_vertex_attribute_divisor === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT ) == + sizeof( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVertexAttributeDivisorPropertiesEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_GGP ) +//=== VK_GGP_frame_token === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP ) == sizeof( VkPresentFrameTokenGGP ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentFrameTokenGGP is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_GGP*/ + +//=== VK_NV_mesh_shader === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV ) == sizeof( VkPhysicalDeviceMeshShaderFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMeshShaderFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV ) == sizeof( VkPhysicalDeviceMeshShaderPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMeshShaderPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV ) == sizeof( VkDrawMeshTasksIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrawMeshTasksIndirectCommandNV is not nothrow_move_constructible!" ); + +//=== VK_NV_shader_image_footprint === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV ) == + sizeof( VkPhysicalDeviceShaderImageFootprintFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderImageFootprintFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_scissor_exclusive === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV ) == + sizeof( VkPipelineViewportExclusiveScissorStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportExclusiveScissorStateCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV ) == sizeof( VkPhysicalDeviceExclusiveScissorFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExclusiveScissorFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_device_diagnostic_checkpoints === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV ) == sizeof( VkQueueFamilyCheckpointPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyCheckpointPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CheckpointDataNV ) == sizeof( VkCheckpointDataNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CheckpointDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV ) == sizeof( VkQueueFamilyCheckpointProperties2NV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyCheckpointProperties2NV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CheckpointData2NV ) == sizeof( VkCheckpointData2NV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CheckpointData2NV is not nothrow_move_constructible!" ); + +//=== VK_INTEL_shader_integer_functions2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL ) == + sizeof( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL is not nothrow_move_constructible!" ); + +//=== VK_INTEL_performance_query === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL ) == sizeof( VkPerformanceValueDataINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceValueDataINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceValueINTEL ) == sizeof( VkPerformanceValueINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceValueINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL ) == sizeof( VkInitializePerformanceApiInfoINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "InitializePerformanceApiInfoINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL ) == sizeof( VkQueryPoolPerformanceQueryCreateInfoINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueryPoolPerformanceQueryCreateInfoINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL ) == sizeof( VkPerformanceMarkerInfoINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceMarkerInfoINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL ) == sizeof( VkPerformanceStreamMarkerInfoINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceStreamMarkerInfoINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL ) == sizeof( VkPerformanceOverrideInfoINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceOverrideInfoINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL ) == sizeof( VkPerformanceConfigurationAcquireInfoINTEL ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceConfigurationAcquireInfoINTEL is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL ) == sizeof( VkPerformanceConfigurationINTEL ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "PerformanceConfigurationINTEL is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerformanceConfigurationINTEL is not nothrow_move_constructible!" ); + +//=== VK_EXT_pci_bus_info === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT ) == sizeof( VkPhysicalDevicePCIBusInfoPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePCIBusInfoPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_AMD_display_native_hdr === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD ) == sizeof( VkDisplayNativeHdrSurfaceCapabilitiesAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayNativeHdrSurfaceCapabilitiesAMD is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD ) == sizeof( VkSwapchainDisplayNativeHdrCreateInfoAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainDisplayNativeHdrCreateInfoAMD is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_imagepipe_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA ) == sizeof( VkImagePipeSurfaceCreateInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImagePipeSurfaceCreateInfoFUCHSIA is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) +//=== VK_EXT_metal_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT ) == sizeof( VkMetalSurfaceCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MetalSurfaceCreateInfoEXT is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +//=== VK_EXT_fragment_density_map === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT ) == + sizeof( VkPhysicalDeviceFragmentDensityMapFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMapFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT ) == + sizeof( VkPhysicalDeviceFragmentDensityMapPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMapPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT ) == sizeof( VkRenderPassFragmentDensityMapCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassFragmentDensityMapCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT ) == + sizeof( VkRenderingFragmentDensityMapAttachmentInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingFragmentDensityMapAttachmentInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_fragment_shading_rate === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR ) == sizeof( VkFragmentShadingRateAttachmentInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FragmentShadingRateAttachmentInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR ) == + sizeof( VkPipelineFragmentShadingRateStateCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineFragmentShadingRateStateCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR ) == + sizeof( VkPhysicalDeviceFragmentShadingRateFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShadingRateFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR ) == + sizeof( VkPhysicalDeviceFragmentShadingRatePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShadingRatePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR ) == sizeof( VkPhysicalDeviceFragmentShadingRateKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShadingRateKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR ) == + sizeof( VkRenderingFragmentShadingRateAttachmentInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingFragmentShadingRateAttachmentInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_AMD_shader_core_properties2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD ) == sizeof( VkPhysicalDeviceShaderCoreProperties2AMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderCoreProperties2AMD is not nothrow_move_constructible!" ); + +//=== VK_AMD_device_coherent_memory === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD ) == sizeof( VkPhysicalDeviceCoherentMemoryFeaturesAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCoherentMemoryFeaturesAMD is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_image_atomic_int64 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT ) == + sizeof( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderImageAtomicInt64FeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_shader_quad_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderQuadControlFeaturesKHR ) == sizeof( VkPhysicalDeviceShaderQuadControlFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderQuadControlFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_memory_budget === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT ) == sizeof( VkPhysicalDeviceMemoryBudgetPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMemoryBudgetPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_memory_priority === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT ) == sizeof( VkPhysicalDeviceMemoryPriorityFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMemoryPriorityFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT ) == sizeof( VkMemoryPriorityAllocateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryPriorityAllocateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_surface_protected_capabilities === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR ) == sizeof( VkSurfaceProtectedCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceProtectedCapabilitiesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_dedicated_allocation_image_aliasing === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV ) == + sizeof( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_buffer_device_address === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT ) == + sizeof( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceBufferDeviceAddressFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT ) == sizeof( VkBufferDeviceAddressCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferDeviceAddressCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_validation_features === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT ) == sizeof( VkValidationFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ValidationFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_present_wait === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR ) == sizeof( VkPhysicalDevicePresentWaitFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentWaitFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_cooperative_matrix === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV ) == sizeof( VkCooperativeMatrixPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CooperativeMatrixPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV ) == sizeof( VkPhysicalDeviceCooperativeMatrixFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeMatrixFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV ) == + sizeof( VkPhysicalDeviceCooperativeMatrixPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeMatrixPropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_coverage_reduction_mode === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV ) == + sizeof( VkPhysicalDeviceCoverageReductionModeFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCoverageReductionModeFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV ) == sizeof( VkPipelineCoverageReductionStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCoverageReductionStateCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV ) == sizeof( VkFramebufferMixedSamplesCombinationNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FramebufferMixedSamplesCombinationNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_fragment_shader_interlock === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT ) == + sizeof( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShaderInterlockFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_ycbcr_image_arrays === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT ) == sizeof( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceYcbcrImageArraysFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_provoking_vertex === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT ) == sizeof( VkPhysicalDeviceProvokingVertexFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceProvokingVertexFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT ) == sizeof( VkPhysicalDeviceProvokingVertexPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceProvokingVertexPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT ) == + sizeof( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineRasterizationProvokingVertexStateCreateInfoEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) +//=== VK_EXT_full_screen_exclusive === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT ) == sizeof( VkSurfaceFullScreenExclusiveInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceFullScreenExclusiveInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT ) == sizeof( VkSurfaceCapabilitiesFullScreenExclusiveEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilitiesFullScreenExclusiveEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT ) == sizeof( VkSurfaceFullScreenExclusiveWin32InfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceFullScreenExclusiveWin32InfoEXT is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +//=== VK_EXT_headless_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT ) == sizeof( VkHeadlessSurfaceCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "HeadlessSurfaceCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_atomic_float === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT ) == sizeof( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderAtomicFloatFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_extended_dynamic_state === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT ) == + sizeof( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExtendedDynamicStateFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_deferred_host_operations === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeferredOperationKHR ) == sizeof( VkDeferredOperationKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "DeferredOperationKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeferredOperationKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_pipeline_executable_properties === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR ) == + sizeof( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineExecutablePropertiesFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineInfoKHR ) == sizeof( VkPipelineInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR ) == sizeof( VkPipelineExecutablePropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineExecutablePropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR ) == sizeof( VkPipelineExecutableInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineExecutableInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR ) == sizeof( VkPipelineExecutableStatisticValueKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineExecutableStatisticValueKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR ) == sizeof( VkPipelineExecutableStatisticKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineExecutableStatisticKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR ) == + sizeof( VkPipelineExecutableInternalRepresentationKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineExecutableInternalRepresentationKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_map_memory_placed === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMapMemoryPlacedFeaturesEXT ) == sizeof( VkPhysicalDeviceMapMemoryPlacedFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMapMemoryPlacedFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMapMemoryPlacedPropertiesEXT ) == sizeof( VkPhysicalDeviceMapMemoryPlacedPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMapMemoryPlacedPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryMapPlacedInfoEXT ) == sizeof( VkMemoryMapPlacedInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryMapPlacedInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_atomic_float2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT ) == + sizeof( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderAtomicFloat2FeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_NV_device_generated_commands === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV ) == + sizeof( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDeviceGeneratedCommandsPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV ) == + sizeof( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDeviceGeneratedCommandsFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV ) == sizeof( VkGraphicsShaderGroupCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GraphicsShaderGroupCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV ) == sizeof( VkGraphicsPipelineShaderGroupsCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GraphicsPipelineShaderGroupsCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV ) == sizeof( VkBindShaderGroupIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindShaderGroupIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV ) == sizeof( VkBindIndexBufferIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindIndexBufferIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV ) == sizeof( VkBindVertexBufferIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindVertexBufferIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV ) == sizeof( VkSetStateFlagsIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SetStateFlagsIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV ) == sizeof( VkIndirectCommandsLayoutNV ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "IndirectCommandsLayoutNV is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsLayoutNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV ) == sizeof( VkIndirectCommandsStreamNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsStreamNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV ) == sizeof( VkIndirectCommandsLayoutTokenNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsLayoutTokenNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV ) == sizeof( VkIndirectCommandsLayoutCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsLayoutCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV ) == sizeof( VkGeneratedCommandsInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeneratedCommandsInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV ) == sizeof( VkGeneratedCommandsMemoryRequirementsInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeneratedCommandsMemoryRequirementsInfoNV is not nothrow_move_constructible!" ); + +//=== VK_NV_inherited_viewport_scissor === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV ) == + sizeof( VkPhysicalDeviceInheritedViewportScissorFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceInheritedViewportScissorFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV ) == + sizeof( VkCommandBufferInheritanceViewportScissorInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferInheritanceViewportScissorInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_texel_buffer_alignment === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT ) == + sizeof( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTexelBufferAlignmentFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_QCOM_render_pass_transform === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM ) == sizeof( VkRenderPassTransformBeginInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassTransformBeginInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM ) == + sizeof( VkCommandBufferInheritanceRenderPassTransformInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CommandBufferInheritanceRenderPassTransformInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_EXT_depth_bias_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthBiasControlFeaturesEXT ) == sizeof( VkPhysicalDeviceDepthBiasControlFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDepthBiasControlFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DepthBiasInfoEXT ) == sizeof( VkDepthBiasInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DepthBiasInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DepthBiasRepresentationInfoEXT ) == sizeof( VkDepthBiasRepresentationInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DepthBiasRepresentationInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_device_memory_report === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT ) == + sizeof( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDeviceMemoryReportFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT ) == sizeof( VkDeviceDeviceMemoryReportCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceDeviceMemoryReportCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT ) == sizeof( VkDeviceMemoryReportCallbackDataEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceMemoryReportCallbackDataEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_custom_border_color === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerCustomBorderColorCreateInfoEXT ) == sizeof( VkSamplerCustomBorderColorCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerCustomBorderColorCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT ) == + sizeof( VkPhysicalDeviceCustomBorderColorPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCustomBorderColorPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT ) == sizeof( VkPhysicalDeviceCustomBorderColorFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCustomBorderColorFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_pipeline_library === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR ) == sizeof( VkPipelineLibraryCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineLibraryCreateInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_present_barrier === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentBarrierFeaturesNV ) == sizeof( VkPhysicalDevicePresentBarrierFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentBarrierFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentBarrierNV ) == sizeof( VkSurfaceCapabilitiesPresentBarrierNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilitiesPresentBarrierNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainPresentBarrierCreateInfoNV ) == sizeof( VkSwapchainPresentBarrierCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainPresentBarrierCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_present_id === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentIdKHR ) == sizeof( VkPresentIdKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "PresentIdKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR ) == sizeof( VkPhysicalDevicePresentIdFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentIdFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_encode_queue === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR ) == sizeof( VkVideoEncodeInfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeCapabilitiesKHR ) == sizeof( VkVideoEncodeCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolVideoEncodeFeedbackCreateInfoKHR ) == sizeof( VkQueryPoolVideoEncodeFeedbackCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueryPoolVideoEncodeFeedbackCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeUsageInfoKHR ) == sizeof( VkVideoEncodeUsageInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeUsageInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR ) == sizeof( VkVideoEncodeRateControlInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeRateControlInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR ) == sizeof( VkVideoEncodeRateControlLayerInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeRateControlLayerInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQualityLevelInfoKHR ) == + sizeof( VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoEncodeQualityLevelInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelPropertiesKHR ) == sizeof( VkVideoEncodeQualityLevelPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeQualityLevelPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeQualityLevelInfoKHR ) == sizeof( VkVideoEncodeQualityLevelInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeQualityLevelInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersGetInfoKHR ) == sizeof( VkVideoEncodeSessionParametersGetInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeSessionParametersGetInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeSessionParametersFeedbackInfoKHR ) == + sizeof( VkVideoEncodeSessionParametersFeedbackInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeSessionParametersFeedbackInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_device_diagnostics_config === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV ) == sizeof( VkPhysicalDeviceDiagnosticsConfigFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDiagnosticsConfigFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV ) == sizeof( VkDeviceDiagnosticsConfigCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceDiagnosticsConfigCreateInfoNV is not nothrow_move_constructible!" ); + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_NV_cuda_kernel_launch === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CudaModuleNV ) == sizeof( VkCudaModuleNV ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "CudaModuleNV is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "CudaModuleNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CudaFunctionNV ) == sizeof( VkCudaFunctionNV ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "CudaFunctionNV is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CudaFunctionNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CudaModuleCreateInfoNV ) == sizeof( VkCudaModuleCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CudaModuleCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CudaFunctionCreateInfoNV ) == sizeof( VkCudaFunctionCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CudaFunctionCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CudaLaunchInfoNV ) == sizeof( VkCudaLaunchInfoNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CudaLaunchInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCudaKernelLaunchFeaturesNV ) == sizeof( VkPhysicalDeviceCudaKernelLaunchFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCudaKernelLaunchFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCudaKernelLaunchPropertiesNV ) == sizeof( VkPhysicalDeviceCudaKernelLaunchPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCudaKernelLaunchPropertiesNV is not nothrow_move_constructible!" ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_QCOM_tile_shading === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileShadingFeaturesQCOM ) == sizeof( VkPhysicalDeviceTileShadingFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTileShadingFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileShadingPropertiesQCOM ) == sizeof( VkPhysicalDeviceTileShadingPropertiesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTileShadingPropertiesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassTileShadingCreateInfoQCOM ) == sizeof( VkRenderPassTileShadingCreateInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassTileShadingCreateInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerTileBeginInfoQCOM ) == sizeof( VkPerTileBeginInfoQCOM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerTileBeginInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerTileEndInfoQCOM ) == sizeof( VkPerTileEndInfoQCOM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PerTileEndInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DispatchTileInfoQCOM ) == sizeof( VkDispatchTileInfoQCOM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DispatchTileInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_NV_low_latency === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryLowLatencySupportNV ) == sizeof( VkQueryLowLatencySupportNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueryLowLatencySupportNV is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_METAL_EXT ) +//=== VK_EXT_metal_objects === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalObjectCreateInfoEXT ) == sizeof( VkExportMetalObjectCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalObjectCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalObjectsInfoEXT ) == sizeof( VkExportMetalObjectsInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalObjectsInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalDeviceInfoEXT ) == sizeof( VkExportMetalDeviceInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalDeviceInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalCommandQueueInfoEXT ) == sizeof( VkExportMetalCommandQueueInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalCommandQueueInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalBufferInfoEXT ) == sizeof( VkExportMetalBufferInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalBufferInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMetalBufferInfoEXT ) == sizeof( VkImportMetalBufferInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMetalBufferInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalTextureInfoEXT ) == sizeof( VkExportMetalTextureInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalTextureInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMetalTextureInfoEXT ) == sizeof( VkImportMetalTextureInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMetalTextureInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalIOSurfaceInfoEXT ) == sizeof( VkExportMetalIOSurfaceInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalIOSurfaceInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMetalIOSurfaceInfoEXT ) == sizeof( VkImportMetalIOSurfaceInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMetalIOSurfaceInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMetalSharedEventInfoEXT ) == sizeof( VkExportMetalSharedEventInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExportMetalSharedEventInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMetalSharedEventInfoEXT ) == sizeof( VkImportMetalSharedEventInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMetalSharedEventInfoEXT is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +//=== VK_EXT_descriptor_buffer === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferPropertiesEXT ) == + sizeof( VkPhysicalDeviceDescriptorBufferPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorBufferPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT ) == + sizeof( VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferFeaturesEXT ) == sizeof( VkPhysicalDeviceDescriptorBufferFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorBufferFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT ) == sizeof( VkDescriptorAddressInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorAddressInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorBufferBindingInfoEXT ) == sizeof( VkDescriptorBufferBindingInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorBufferBindingInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorBufferBindingPushDescriptorBufferHandleEXT ) == + sizeof( VkDescriptorBufferBindingPushDescriptorBufferHandleEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorBufferBindingPushDescriptorBufferHandleEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorDataEXT ) == sizeof( VkDescriptorDataEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorDataEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorGetInfoEXT ) == sizeof( VkDescriptorGetInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorGetInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCaptureDescriptorDataInfoEXT ) == sizeof( VkBufferCaptureDescriptorDataInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCaptureDescriptorDataInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCaptureDescriptorDataInfoEXT ) == sizeof( VkImageCaptureDescriptorDataInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageCaptureDescriptorDataInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewCaptureDescriptorDataInfoEXT ) == sizeof( VkImageViewCaptureDescriptorDataInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewCaptureDescriptorDataInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerCaptureDescriptorDataInfoEXT ) == sizeof( VkSamplerCaptureDescriptorDataInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerCaptureDescriptorDataInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpaqueCaptureDescriptorDataCreateInfoEXT ) == sizeof( VkOpaqueCaptureDescriptorDataCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpaqueCaptureDescriptorDataCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureCaptureDescriptorDataInfoEXT ) == + sizeof( VkAccelerationStructureCaptureDescriptorDataInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureCaptureDescriptorDataInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_graphics_pipeline_library === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT ) == + sizeof( VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT ) == + sizeof( VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryCreateInfoEXT ) == sizeof( VkGraphicsPipelineLibraryCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GraphicsPipelineLibraryCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_AMD_shader_early_and_late_fragment_tests === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD ) == + sizeof( VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD is not nothrow_move_constructible!" ); + +//=== VK_KHR_fragment_shader_barycentric === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR ) == + sizeof( VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShaderBarycentricFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricPropertiesKHR ) == + sizeof( VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShaderBarycentricPropertiesKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_shader_subgroup_uniform_control_flow === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ) == + sizeof( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_fragment_shading_rate_enums === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV ) == + sizeof( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShadingRateEnumsFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV ) == + sizeof( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentShadingRateEnumsPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV ) == + sizeof( VkPipelineFragmentShadingRateEnumStateCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineFragmentShadingRateEnumStateCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_NV_ray_tracing_motion_blur === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryMotionTrianglesDataNV ) == + sizeof( VkAccelerationStructureGeometryMotionTrianglesDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryMotionTrianglesDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV ) == sizeof( VkAccelerationStructureMotionInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureMotionInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceNV ) == sizeof( VkAccelerationStructureMotionInstanceNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureMotionInstanceNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV ) == sizeof( VkAccelerationStructureMotionInstanceDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureMotionInstanceDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV ) == + sizeof( VkAccelerationStructureMatrixMotionInstanceNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureMatrixMotionInstanceNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV ) == sizeof( VkAccelerationStructureSRTMotionInstanceNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureSRTMotionInstanceNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SRTDataNV ) == sizeof( VkSRTDataNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "SRTDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV ) == + sizeof( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingMotionBlurFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_mesh_shader === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesEXT ) == sizeof( VkPhysicalDeviceMeshShaderFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMeshShaderFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesEXT ) == sizeof( VkPhysicalDeviceMeshShaderPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMeshShaderPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandEXT ) == sizeof( VkDrawMeshTasksIndirectCommandEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrawMeshTasksIndirectCommandEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_ycbcr_2plane_444_formats === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ) == + sizeof( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_fragment_density_map2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT ) == + sizeof( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMap2FeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT ) == + sizeof( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMap2PropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_QCOM_rotated_copy_commands === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM ) == sizeof( VkCopyCommandTransformInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyCommandTransformInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_KHR_workgroup_memory_explicit_layout === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ) == + sizeof( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_image_compression_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlFeaturesEXT ) == + sizeof( VkPhysicalDeviceImageCompressionControlFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageCompressionControlFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCompressionControlEXT ) == sizeof( VkImageCompressionControlEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageCompressionControlEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCompressionPropertiesEXT ) == sizeof( VkImageCompressionPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageCompressionPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_attachment_feedback_loop_layout === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT ) == + sizeof( VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_4444_formats === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT ) == sizeof( VkPhysicalDevice4444FormatsFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevice4444FormatsFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_device_fault === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFaultFeaturesEXT ) == sizeof( VkPhysicalDeviceFaultFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFaultFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceFaultCountsEXT ) == sizeof( VkDeviceFaultCountsEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceFaultCountsEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceFaultInfoEXT ) == sizeof( VkDeviceFaultInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceFaultInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceFaultAddressInfoEXT ) == sizeof( VkDeviceFaultAddressInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceFaultAddressInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceFaultVendorInfoEXT ) == sizeof( VkDeviceFaultVendorInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceFaultVendorInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionOneEXT ) == sizeof( VkDeviceFaultVendorBinaryHeaderVersionOneEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceFaultVendorBinaryHeaderVersionOneEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_rgba10x6_formats === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT ) == sizeof( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRGBA10X6FormatsFeaturesEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) +//=== VK_EXT_directfb_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT ) == sizeof( VkDirectFBSurfaceCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DirectFBSurfaceCreateInfoEXT is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +//=== VK_EXT_vertex_input_dynamic_state === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT ) == + sizeof( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVertexInputDynamicStateFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT ) == sizeof( VkVertexInputBindingDescription2EXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VertexInputBindingDescription2EXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT ) == sizeof( VkVertexInputAttributeDescription2EXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VertexInputAttributeDescription2EXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_physical_device_drm === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT ) == sizeof( VkPhysicalDeviceDrmPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDrmPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_device_address_binding_report === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAddressBindingReportFeaturesEXT ) == + sizeof( VkPhysicalDeviceAddressBindingReportFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAddressBindingReportFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceAddressBindingCallbackDataEXT ) == sizeof( VkDeviceAddressBindingCallbackDataEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceAddressBindingCallbackDataEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_depth_clip_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT ) == sizeof( VkPhysicalDeviceDepthClipControlFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDepthClipControlFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT ) == + sizeof( VkPipelineViewportDepthClipControlCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportDepthClipControlCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_primitive_topology_list_restart === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT ) == + sizeof( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_external_memory === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA ) == sizeof( VkImportMemoryZirconHandleInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA ) == sizeof( VkMemoryZirconHandlePropertiesFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryZirconHandlePropertiesFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA ) == sizeof( VkMemoryGetZirconHandleInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryGetZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_external_semaphore === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA ) == sizeof( VkImportSemaphoreZirconHandleInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportSemaphoreZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA ) == sizeof( VkSemaphoreGetZirconHandleInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SemaphoreGetZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) +//=== VK_FUCHSIA_buffer_collection === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA ) == sizeof( VkBufferCollectionFUCHSIA ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "BufferCollectionFUCHSIA is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCollectionFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA ) == sizeof( VkBufferCollectionCreateInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCollectionCreateInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA ) == sizeof( VkImportMemoryBufferCollectionFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryBufferCollectionFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA ) == sizeof( VkBufferCollectionImageCreateInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCollectionImageCreateInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA ) == sizeof( VkBufferConstraintsInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferConstraintsInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA ) == sizeof( VkBufferCollectionBufferCreateInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCollectionBufferCreateInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA ) == sizeof( VkBufferCollectionPropertiesFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCollectionPropertiesFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA ) == sizeof( VkSysmemColorSpaceFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SysmemColorSpaceFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA ) == sizeof( VkImageConstraintsInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageConstraintsInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA ) == sizeof( VkImageFormatConstraintsInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageFormatConstraintsInfoFUCHSIA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA ) == sizeof( VkBufferCollectionConstraintsInfoFUCHSIA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BufferCollectionConstraintsInfoFUCHSIA is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +//=== VK_HUAWEI_subpass_shading === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI ) == sizeof( VkSubpassShadingPipelineCreateInfoHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassShadingPipelineCreateInfoHUAWEI is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI ) == sizeof( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSubpassShadingFeaturesHUAWEI is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI ) == + sizeof( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSubpassShadingPropertiesHUAWEI is not nothrow_move_constructible!" ); + +//=== VK_HUAWEI_invocation_mask === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI ) == sizeof( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceInvocationMaskFeaturesHUAWEI is not nothrow_move_constructible!" ); + +//=== VK_NV_external_memory_rdma === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV ) == sizeof( VkMemoryGetRemoteAddressInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryGetRemoteAddressInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV ) == sizeof( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalMemoryRDMAFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_pipeline_properties === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelinePropertiesIdentifierEXT ) == sizeof( VkPipelinePropertiesIdentifierEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelinePropertiesIdentifierEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelinePropertiesFeaturesEXT ) == + sizeof( VkPhysicalDevicePipelinePropertiesFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelinePropertiesFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_frame_boundary === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFrameBoundaryFeaturesEXT ) == sizeof( VkPhysicalDeviceFrameBoundaryFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFrameBoundaryFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FrameBoundaryEXT ) == sizeof( VkFrameBoundaryEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FrameBoundaryEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_multisampled_render_to_single_sampled === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT ) == + sizeof( VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassResolvePerformanceQueryEXT ) == sizeof( VkSubpassResolvePerformanceQueryEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SubpassResolvePerformanceQueryEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultisampledRenderToSingleSampledInfoEXT ) == sizeof( VkMultisampledRenderToSingleSampledInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MultisampledRenderToSingleSampledInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_extended_dynamic_state2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT ) == + sizeof( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExtendedDynamicState2FeaturesEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) +//=== VK_QNX_screen_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX ) == sizeof( VkScreenSurfaceCreateInfoQNX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ScreenSurfaceCreateInfoQNX is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +//=== VK_EXT_color_write_enable === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT ) == sizeof( VkPhysicalDeviceColorWriteEnableFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceColorWriteEnableFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT ) == sizeof( VkPipelineColorWriteCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineColorWriteCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_primitives_generated_query === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT ) == + sizeof( VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_ray_tracing_maintenance1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMaintenance1FeaturesKHR ) == + sizeof( VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingMaintenance1FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommand2KHR ) == sizeof( VkTraceRaysIndirectCommand2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TraceRaysIndirectCommand2KHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_image_view_min_lod === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT ) == sizeof( VkPhysicalDeviceImageViewMinLodFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageViewMinLodFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT ) == sizeof( VkImageViewMinLodCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewMinLodCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_multi_draw === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT ) == sizeof( VkPhysicalDeviceMultiDrawFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiDrawFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT ) == sizeof( VkPhysicalDeviceMultiDrawPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiDrawPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT ) == sizeof( VkMultiDrawInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MultiDrawInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT ) == sizeof( VkMultiDrawIndexedInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MultiDrawIndexedInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_image_2d_view_of_3d === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImage2DViewOf3DFeaturesEXT ) == sizeof( VkPhysicalDeviceImage2DViewOf3DFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImage2DViewOf3DFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_tile_image === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTileImageFeaturesEXT ) == sizeof( VkPhysicalDeviceShaderTileImageFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderTileImageFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTileImagePropertiesEXT ) == sizeof( VkPhysicalDeviceShaderTileImagePropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderTileImagePropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_opacity_micromap === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapBuildInfoEXT ) == sizeof( VkMicromapBuildInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MicromapBuildInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapUsageEXT ) == sizeof( VkMicromapUsageEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MicromapUsageEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapCreateInfoEXT ) == sizeof( VkMicromapCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MicromapCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapEXT ) == sizeof( VkMicromapEXT ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "MicromapEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "MicromapEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpacityMicromapFeaturesEXT ) == sizeof( VkPhysicalDeviceOpacityMicromapFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceOpacityMicromapFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpacityMicromapPropertiesEXT ) == sizeof( VkPhysicalDeviceOpacityMicromapPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceOpacityMicromapPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapVersionInfoEXT ) == sizeof( VkMicromapVersionInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MicromapVersionInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMicromapToMemoryInfoEXT ) == sizeof( VkCopyMicromapToMemoryInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMicromapToMemoryInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMemoryToMicromapInfoEXT ) == sizeof( VkCopyMemoryToMicromapInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMemoryToMicromapInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMicromapInfoEXT ) == sizeof( VkCopyMicromapInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMicromapInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapBuildSizesInfoEXT ) == sizeof( VkMicromapBuildSizesInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MicromapBuildSizesInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureTrianglesOpacityMicromapEXT ) == + sizeof( VkAccelerationStructureTrianglesOpacityMicromapEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureTrianglesOpacityMicromapEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MicromapTriangleEXT ) == sizeof( VkMicromapTriangleEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MicromapTriangleEXT is not nothrow_move_constructible!" ); + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_NV_displacement_micromap === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDisplacementMicromapFeaturesNV ) == + sizeof( VkPhysicalDeviceDisplacementMicromapFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDisplacementMicromapFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDisplacementMicromapPropertiesNV ) == + sizeof( VkPhysicalDeviceDisplacementMicromapPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDisplacementMicromapPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureTrianglesDisplacementMicromapNV ) == + sizeof( VkAccelerationStructureTrianglesDisplacementMicromapNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureTrianglesDisplacementMicromapNV is not nothrow_move_constructible!" ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_HUAWEI_cluster_culling_shader === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderFeaturesHUAWEI ) == + sizeof( VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceClusterCullingShaderFeaturesHUAWEI is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderPropertiesHUAWEI ) == + sizeof( VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceClusterCullingShaderPropertiesHUAWEI is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI ) == + sizeof( VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI is not nothrow_move_constructible!" ); + +//=== VK_EXT_border_color_swizzle === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT ) == + sizeof( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceBorderColorSwizzleFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT ) == + sizeof( VkSamplerBorderColorComponentMappingCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerBorderColorComponentMappingCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_pageable_device_local_memory === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT ) == + sizeof( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_ARM_shader_core_properties === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesARM ) == sizeof( VkPhysicalDeviceShaderCorePropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderCorePropertiesARM is not nothrow_move_constructible!" ); + +//=== VK_ARM_scheduling_controls === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueShaderCoreControlCreateInfoARM ) == sizeof( VkDeviceQueueShaderCoreControlCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceQueueShaderCoreControlCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFeaturesARM ) == + sizeof( VkPhysicalDeviceSchedulingControlsFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSchedulingControlsFeaturesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsPropertiesARM ) == + sizeof( VkPhysicalDeviceSchedulingControlsPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSchedulingControlsPropertiesARM is not nothrow_move_constructible!" ); + +//=== VK_EXT_image_sliced_view_of_3d === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageSlicedViewOf3DFeaturesEXT ) == + sizeof( VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageSlicedViewOf3DFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewSlicedCreateInfoEXT ) == sizeof( VkImageViewSlicedCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewSlicedCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_VALVE_descriptor_set_host_mapping === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE ) == + sizeof( VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetBindingReferenceVALVE ) == sizeof( VkDescriptorSetBindingReferenceVALVE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetBindingReferenceVALVE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutHostMappingInfoVALVE ) == sizeof( VkDescriptorSetLayoutHostMappingInfoVALVE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorSetLayoutHostMappingInfoVALVE is not nothrow_move_constructible!" ); + +//=== VK_EXT_non_seamless_cube_map === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceNonSeamlessCubeMapFeaturesEXT ) == + sizeof( VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceNonSeamlessCubeMapFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_ARM_render_pass_striped === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRenderPassStripedFeaturesARM ) == sizeof( VkPhysicalDeviceRenderPassStripedFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRenderPassStripedFeaturesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRenderPassStripedPropertiesARM ) == + sizeof( VkPhysicalDeviceRenderPassStripedPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRenderPassStripedPropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassStripeBeginInfoARM ) == sizeof( VkRenderPassStripeBeginInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassStripeBeginInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassStripeInfoARM ) == sizeof( VkRenderPassStripeInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassStripeInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassStripeSubmitInfoARM ) == sizeof( VkRenderPassStripeSubmitInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassStripeSubmitInfoARM is not nothrow_move_constructible!" ); + +//=== VK_NV_copy_memory_indirect === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMemoryIndirectCommandNV ) == sizeof( VkCopyMemoryIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMemoryIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMemoryToImageIndirectCommandNV ) == sizeof( VkCopyMemoryToImageIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyMemoryToImageIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCopyMemoryIndirectFeaturesNV ) == sizeof( VkPhysicalDeviceCopyMemoryIndirectFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCopyMemoryIndirectFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCopyMemoryIndirectPropertiesNV ) == + sizeof( VkPhysicalDeviceCopyMemoryIndirectPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCopyMemoryIndirectPropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_memory_decompression === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DecompressMemoryRegionNV ) == sizeof( VkDecompressMemoryRegionNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DecompressMemoryRegionNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryDecompressionFeaturesNV ) == + sizeof( VkPhysicalDeviceMemoryDecompressionFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMemoryDecompressionFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryDecompressionPropertiesNV ) == + sizeof( VkPhysicalDeviceMemoryDecompressionPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMemoryDecompressionPropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_device_generated_commands_compute === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV ) == + sizeof( VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ComputePipelineIndirectBufferInfoNV ) == sizeof( VkComputePipelineIndirectBufferInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ComputePipelineIndirectBufferInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineIndirectDeviceAddressInfoNV ) == sizeof( VkPipelineIndirectDeviceAddressInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineIndirectDeviceAddressInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindPipelineIndirectCommandNV ) == sizeof( VkBindPipelineIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindPipelineIndirectCommandNV is not nothrow_move_constructible!" ); + +//=== VK_NV_ray_tracing_linear_swept_spheres === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV ) == + sizeof( VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryLinearSweptSpheresDataNV ) == + sizeof( VkAccelerationStructureGeometryLinearSweptSpheresDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometryLinearSweptSpheresDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometrySpheresDataNV ) == sizeof( VkAccelerationStructureGeometrySpheresDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AccelerationStructureGeometrySpheresDataNV is not nothrow_move_constructible!" ); + +//=== VK_NV_linear_color_attachment === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV ) == + sizeof( VkPhysicalDeviceLinearColorAttachmentFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLinearColorAttachmentFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_shader_maximal_reconvergence === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR ) == + sizeof( VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_image_compression_control_swapchain === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT ) == + sizeof( VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_QCOM_image_processing === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewSampleWeightCreateInfoQCOM ) == sizeof( VkImageViewSampleWeightCreateInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageViewSampleWeightCreateInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingFeaturesQCOM ) == sizeof( VkPhysicalDeviceImageProcessingFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageProcessingFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessingPropertiesQCOM ) == + sizeof( VkPhysicalDeviceImageProcessingPropertiesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageProcessingPropertiesQCOM is not nothrow_move_constructible!" ); + +//=== VK_EXT_nested_command_buffer === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceNestedCommandBufferFeaturesEXT ) == + sizeof( VkPhysicalDeviceNestedCommandBufferFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceNestedCommandBufferFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceNestedCommandBufferPropertiesEXT ) == + sizeof( VkPhysicalDeviceNestedCommandBufferPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceNestedCommandBufferPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_external_memory_acquire_unmodified === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryAcquireUnmodifiedEXT ) == sizeof( VkExternalMemoryAcquireUnmodifiedEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalMemoryAcquireUnmodifiedEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_extended_dynamic_state3 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState3FeaturesEXT ) == + sizeof( VkPhysicalDeviceExtendedDynamicState3FeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExtendedDynamicState3FeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState3PropertiesEXT ) == + sizeof( VkPhysicalDeviceExtendedDynamicState3PropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExtendedDynamicState3PropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ColorBlendEquationEXT ) == sizeof( VkColorBlendEquationEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ColorBlendEquationEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ColorBlendAdvancedEXT ) == sizeof( VkColorBlendAdvancedEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ColorBlendAdvancedEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_subpass_merge_feedback === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassMergeFeedbackFeaturesEXT ) == + sizeof( VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSubpassMergeFeedbackFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreationControlEXT ) == sizeof( VkRenderPassCreationControlEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassCreationControlEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT ) == sizeof( VkRenderPassCreationFeedbackInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassCreationFeedbackInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackCreateInfoEXT ) == sizeof( VkRenderPassCreationFeedbackCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassCreationFeedbackCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT ) == sizeof( VkRenderPassSubpassFeedbackInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassSubpassFeedbackInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackCreateInfoEXT ) == sizeof( VkRenderPassSubpassFeedbackCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassSubpassFeedbackCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_LUNARG_direct_driver_loading === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DirectDriverLoadingInfoLUNARG ) == sizeof( VkDirectDriverLoadingInfoLUNARG ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DirectDriverLoadingInfoLUNARG is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DirectDriverLoadingListLUNARG ) == sizeof( VkDirectDriverLoadingListLUNARG ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DirectDriverLoadingListLUNARG is not nothrow_move_constructible!" ); + +//=== VK_ARM_tensors === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorARM ) == sizeof( VkTensorARM ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "TensorARM is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "TensorARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorViewARM ) == sizeof( VkTensorViewARM ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "TensorViewARM is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "TensorViewARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorDescriptionARM ) == sizeof( VkTensorDescriptionARM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorDescriptionARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorCreateInfoARM ) == sizeof( VkTensorCreateInfoARM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorViewCreateInfoARM ) == sizeof( VkTensorViewCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorViewCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorMemoryRequirementsInfoARM ) == sizeof( VkTensorMemoryRequirementsInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorMemoryRequirementsInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindTensorMemoryInfoARM ) == sizeof( VkBindTensorMemoryInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindTensorMemoryInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetTensorARM ) == sizeof( VkWriteDescriptorSetTensorARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteDescriptorSetTensorARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorFormatPropertiesARM ) == sizeof( VkTensorFormatPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorFormatPropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTensorPropertiesARM ) == sizeof( VkPhysicalDeviceTensorPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTensorPropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorMemoryBarrierARM ) == sizeof( VkTensorMemoryBarrierARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorMemoryBarrierARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorDependencyInfoARM ) == sizeof( VkTensorDependencyInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorDependencyInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTensorFeaturesARM ) == sizeof( VkPhysicalDeviceTensorFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTensorFeaturesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceTensorMemoryRequirementsARM ) == sizeof( VkDeviceTensorMemoryRequirementsARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DeviceTensorMemoryRequirementsARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyTensorInfoARM ) == sizeof( VkCopyTensorInfoARM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CopyTensorInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorCopyARM ) == sizeof( VkTensorCopyARM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "TensorCopyARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfoTensorARM ) == sizeof( VkMemoryDedicatedAllocateInfoTensorARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryDedicatedAllocateInfoTensorARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalTensorInfoARM ) == sizeof( VkPhysicalDeviceExternalTensorInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalTensorInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalTensorPropertiesARM ) == sizeof( VkExternalTensorPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalTensorPropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryTensorCreateInfoARM ) == sizeof( VkExternalMemoryTensorCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalMemoryTensorCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferTensorFeaturesARM ) == + sizeof( VkPhysicalDeviceDescriptorBufferTensorFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorBufferTensorFeaturesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorBufferTensorPropertiesARM ) == + sizeof( VkPhysicalDeviceDescriptorBufferTensorPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorBufferTensorPropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorGetTensorInfoARM ) == sizeof( VkDescriptorGetTensorInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DescriptorGetTensorInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorCaptureDescriptorDataInfoARM ) == sizeof( VkTensorCaptureDescriptorDataInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorCaptureDescriptorDataInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TensorViewCaptureDescriptorDataInfoARM ) == sizeof( VkTensorViewCaptureDescriptorDataInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TensorViewCaptureDescriptorDataInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FrameBoundaryTensorsARM ) == sizeof( VkFrameBoundaryTensorsARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "FrameBoundaryTensorsARM is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_module_identifier === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierFeaturesEXT ) == + sizeof( VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderModuleIdentifierFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderModuleIdentifierPropertiesEXT ) == + sizeof( VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderModuleIdentifierPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineShaderStageModuleIdentifierCreateInfoEXT ) == + sizeof( VkPipelineShaderStageModuleIdentifierCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineShaderStageModuleIdentifierCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModuleIdentifierEXT ) == sizeof( VkShaderModuleIdentifierEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShaderModuleIdentifierEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_rasterization_order_attachment_access === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT ) == + sizeof( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_NV_optical_flow === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpticalFlowFeaturesNV ) == sizeof( VkPhysicalDeviceOpticalFlowFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceOpticalFlowFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceOpticalFlowPropertiesNV ) == sizeof( VkPhysicalDeviceOpticalFlowPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceOpticalFlowPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatInfoNV ) == sizeof( VkOpticalFlowImageFormatInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpticalFlowImageFormatInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpticalFlowImageFormatPropertiesNV ) == sizeof( VkOpticalFlowImageFormatPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpticalFlowImageFormatPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpticalFlowSessionNV ) == sizeof( VkOpticalFlowSessionNV ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "OpticalFlowSessionNV is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpticalFlowSessionNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateInfoNV ) == sizeof( VkOpticalFlowSessionCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpticalFlowSessionCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreatePrivateDataInfoNV ) == sizeof( VkOpticalFlowSessionCreatePrivateDataInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpticalFlowSessionCreatePrivateDataInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OpticalFlowExecuteInfoNV ) == sizeof( VkOpticalFlowExecuteInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OpticalFlowExecuteInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_legacy_dithering === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyDitheringFeaturesEXT ) == sizeof( VkPhysicalDeviceLegacyDitheringFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLegacyDitheringFeaturesEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) +//=== VK_ANDROID_external_format_resolve === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFormatResolveFeaturesANDROID ) == + sizeof( VkPhysicalDeviceExternalFormatResolveFeaturesANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalFormatResolveFeaturesANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFormatResolvePropertiesANDROID ) == + sizeof( VkPhysicalDeviceExternalFormatResolvePropertiesANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalFormatResolvePropertiesANDROID is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatResolvePropertiesANDROID ) == + sizeof( VkAndroidHardwareBufferFormatResolvePropertiesANDROID ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AndroidHardwareBufferFormatResolvePropertiesANDROID is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +//=== VK_AMD_anti_lag === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAntiLagFeaturesAMD ) == sizeof( VkPhysicalDeviceAntiLagFeaturesAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAntiLagFeaturesAMD is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AntiLagDataAMD ) == sizeof( VkAntiLagDataAMD ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AntiLagDataAMD is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AntiLagPresentationInfoAMD ) == sizeof( VkAntiLagPresentationInfoAMD ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AntiLagPresentationInfoAMD is not nothrow_move_constructible!" ); + +//=== VK_KHR_present_id2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentId2KHR ) == sizeof( VkSurfaceCapabilitiesPresentId2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilitiesPresentId2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentId2KHR ) == sizeof( VkPresentId2KHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "PresentId2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentId2FeaturesKHR ) == sizeof( VkPhysicalDevicePresentId2FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentId2FeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_present_wait2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesPresentWait2KHR ) == sizeof( VkSurfaceCapabilitiesPresentWait2KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfaceCapabilitiesPresentWait2KHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWait2FeaturesKHR ) == sizeof( VkPhysicalDevicePresentWait2FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentWait2FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentWait2InfoKHR ) == sizeof( VkPresentWait2InfoKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PresentWait2InfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_ray_tracing_position_fetch === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPositionFetchFeaturesKHR ) == + sizeof( VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingPositionFetchFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_object === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderEXT ) == sizeof( VkShaderEXT ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "ShaderEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, "ShaderEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderObjectFeaturesEXT ) == sizeof( VkPhysicalDeviceShaderObjectFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderObjectFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderObjectPropertiesEXT ) == sizeof( VkPhysicalDeviceShaderObjectPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderObjectPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderCreateInfoEXT ) == sizeof( VkShaderCreateInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ShaderCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_pipeline_binary === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineBinaryFeaturesKHR ) == sizeof( VkPhysicalDevicePipelineBinaryFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineBinaryFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineBinaryPropertiesKHR ) == sizeof( VkPhysicalDevicePipelineBinaryPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineBinaryPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DevicePipelineBinaryInternalCacheControlKHR ) == + sizeof( VkDevicePipelineBinaryInternalCacheControlKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DevicePipelineBinaryInternalCacheControlKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryKHR ) == sizeof( VkPipelineBinaryKHR ), "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, "PipelineBinaryKHR is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR ) == sizeof( VkPipelineBinaryKeyKHR ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryKeyKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryDataKHR ) == sizeof( VkPipelineBinaryDataKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryDataKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryKeysAndDataKHR ) == sizeof( VkPipelineBinaryKeysAndDataKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryKeysAndDataKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryCreateInfoKHR ) == sizeof( VkPipelineBinaryCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryInfoKHR ) == sizeof( VkPipelineBinaryInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ReleaseCapturedPipelineDataInfoKHR ) == sizeof( VkReleaseCapturedPipelineDataInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ReleaseCapturedPipelineDataInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryDataInfoKHR ) == sizeof( VkPipelineBinaryDataInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryDataInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCreateInfoKHR ) == sizeof( VkPipelineCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineBinaryHandlesInfoKHR ) == sizeof( VkPipelineBinaryHandlesInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineBinaryHandlesInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_QCOM_tile_properties === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTilePropertiesFeaturesQCOM ) == sizeof( VkPhysicalDeviceTilePropertiesFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTilePropertiesFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TilePropertiesQCOM ) == sizeof( VkTilePropertiesQCOM ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TilePropertiesQCOM is not nothrow_move_constructible!" ); + +//=== VK_SEC_amigo_profiling === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAmigoProfilingFeaturesSEC ) == sizeof( VkPhysicalDeviceAmigoProfilingFeaturesSEC ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAmigoProfilingFeaturesSEC is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AmigoProfilingSubmitInfoSEC ) == sizeof( VkAmigoProfilingSubmitInfoSEC ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AmigoProfilingSubmitInfoSEC is not nothrow_move_constructible!" ); + +//=== VK_KHR_surface_maintenance1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfacePresentModeKHR ) == sizeof( VkSurfacePresentModeKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfacePresentModeKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfacePresentScalingCapabilitiesKHR ) == sizeof( VkSurfacePresentScalingCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfacePresentScalingCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfacePresentModeCompatibilityKHR ) == sizeof( VkSurfacePresentModeCompatibilityKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SurfacePresentModeCompatibilityKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_swapchain_maintenance1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSwapchainMaintenance1FeaturesKHR ) == + sizeof( VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceSwapchainMaintenance1FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainPresentFenceInfoKHR ) == sizeof( VkSwapchainPresentFenceInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainPresentFenceInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainPresentModesCreateInfoKHR ) == sizeof( VkSwapchainPresentModesCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainPresentModesCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainPresentModeInfoKHR ) == sizeof( VkSwapchainPresentModeInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainPresentModeInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainPresentScalingCreateInfoKHR ) == sizeof( VkSwapchainPresentScalingCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainPresentScalingCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ReleaseSwapchainImagesInfoKHR ) == sizeof( VkReleaseSwapchainImagesInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ReleaseSwapchainImagesInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_QCOM_multiview_per_view_viewports === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM ) == + sizeof( VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM is not nothrow_move_constructible!" ); + +//=== VK_NV_ray_tracing_invocation_reorder === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingInvocationReorderPropertiesNV ) == + sizeof( VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingInvocationReorderPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingInvocationReorderFeaturesNV ) == + sizeof( VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingInvocationReorderFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_cooperative_vector === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeVectorPropertiesNV ) == + sizeof( VkPhysicalDeviceCooperativeVectorPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeVectorPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeVectorFeaturesNV ) == sizeof( VkPhysicalDeviceCooperativeVectorFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeVectorFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CooperativeVectorPropertiesNV ) == sizeof( VkCooperativeVectorPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CooperativeVectorPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ConvertCooperativeVectorMatrixInfoNV ) == sizeof( VkConvertCooperativeVectorMatrixInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ConvertCooperativeVectorMatrixInfoNV is not nothrow_move_constructible!" ); + +//=== VK_NV_extended_sparse_address_space === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV ) == + sizeof( VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedSparseAddressSpacePropertiesNV ) == + sizeof( VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExtendedSparseAddressSpacePropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_mutable_descriptor_type === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesEXT ) == + sizeof( VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMutableDescriptorTypeFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListEXT ) == sizeof( VkMutableDescriptorTypeListEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MutableDescriptorTypeListEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoEXT ) == sizeof( VkMutableDescriptorTypeCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MutableDescriptorTypeCreateInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_legacy_vertex_attributes === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyVertexAttributesFeaturesEXT ) == + sizeof( VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLegacyVertexAttributesFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLegacyVertexAttributesPropertiesEXT ) == + sizeof( VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLegacyVertexAttributesPropertiesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_layer_settings === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LayerSettingsCreateInfoEXT ) == sizeof( VkLayerSettingsCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LayerSettingsCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LayerSettingEXT ) == sizeof( VkLayerSettingEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LayerSettingEXT is not nothrow_move_constructible!" ); + +//=== VK_ARM_shader_core_builtins === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreBuiltinsFeaturesARM ) == + sizeof( VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderCoreBuiltinsFeaturesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreBuiltinsPropertiesARM ) == + sizeof( VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderCoreBuiltinsPropertiesARM is not nothrow_move_constructible!" ); + +//=== VK_EXT_pipeline_library_group_handles === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT ) == + sizeof( VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_dynamic_rendering_unused_attachments === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT ) == + sizeof( VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_NV_low_latency2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LatencySleepModeInfoNV ) == sizeof( VkLatencySleepModeInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LatencySleepModeInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LatencySleepInfoNV ) == sizeof( VkLatencySleepInfoNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LatencySleepInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SetLatencyMarkerInfoNV ) == sizeof( VkSetLatencyMarkerInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SetLatencyMarkerInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GetLatencyMarkerInfoNV ) == sizeof( VkGetLatencyMarkerInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GetLatencyMarkerInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LatencyTimingsFrameReportNV ) == sizeof( VkLatencyTimingsFrameReportNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LatencyTimingsFrameReportNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LatencySubmissionPresentIdNV ) == sizeof( VkLatencySubmissionPresentIdNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LatencySubmissionPresentIdNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainLatencyCreateInfoNV ) == sizeof( VkSwapchainLatencyCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SwapchainLatencyCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeInfoNV ) == sizeof( VkOutOfBandQueueTypeInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OutOfBandQueueTypeInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LatencySurfaceCapabilitiesNV ) == sizeof( VkLatencySurfaceCapabilitiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "LatencySurfaceCapabilitiesNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_cooperative_matrix === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesKHR ) == sizeof( VkCooperativeMatrixPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CooperativeMatrixPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesKHR ) == sizeof( VkPhysicalDeviceCooperativeMatrixFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeMatrixFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesKHR ) == + sizeof( VkPhysicalDeviceCooperativeMatrixPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeMatrixPropertiesKHR is not nothrow_move_constructible!" ); + +//=== VK_ARM_data_graph === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphFeaturesARM ) == sizeof( VkPhysicalDeviceDataGraphFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDataGraphFeaturesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM ) == sizeof( VkDataGraphPipelineSessionARM ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "DataGraphPipelineSessionARM is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineSessionARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantARM ) == sizeof( VkDataGraphPipelineConstantARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineConstantARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineResourceInfoARM ) == sizeof( VkDataGraphPipelineResourceInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineResourceInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineCompilerControlCreateInfoARM ) == + sizeof( VkDataGraphPipelineCompilerControlCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineCompilerControlCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineCreateInfoARM ) == sizeof( VkDataGraphPipelineCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineShaderModuleCreateInfoARM ) == sizeof( VkDataGraphPipelineShaderModuleCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineShaderModuleCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateInfoARM ) == sizeof( VkDataGraphPipelineSessionCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineSessionCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementsInfoARM ) == + sizeof( VkDataGraphPipelineSessionBindPointRequirementsInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineSessionBindPointRequirementsInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointRequirementARM ) == + sizeof( VkDataGraphPipelineSessionBindPointRequirementARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineSessionBindPointRequirementARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionMemoryRequirementsInfoARM ) == + sizeof( VkDataGraphPipelineSessionMemoryRequirementsInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineSessionMemoryRequirementsInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindDataGraphPipelineSessionMemoryInfoARM ) == sizeof( VkBindDataGraphPipelineSessionMemoryInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindDataGraphPipelineSessionMemoryInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineInfoARM ) == sizeof( VkDataGraphPipelineInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyQueryResultARM ) == sizeof( VkDataGraphPipelinePropertyQueryResultARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelinePropertyQueryResultARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineIdentifierCreateInfoARM ) == sizeof( VkDataGraphPipelineIdentifierCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineIdentifierCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchInfoARM ) == sizeof( VkDataGraphPipelineDispatchInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineDispatchInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM ) == sizeof( VkPhysicalDeviceDataGraphProcessingEngineARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDataGraphProcessingEngineARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphPropertiesARM ) == sizeof( VkQueueFamilyDataGraphPropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyDataGraphPropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphProcessingEngineCreateInfoARM ) == sizeof( VkDataGraphProcessingEngineCreateInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphProcessingEngineCreateInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM ) == + sizeof( VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyDataGraphProcessingEnginePropertiesARM ) == + sizeof( VkQueueFamilyDataGraphProcessingEnginePropertiesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyDataGraphProcessingEnginePropertiesARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationSupportARM ) == sizeof( VkPhysicalDeviceDataGraphOperationSupportARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDataGraphOperationSupportARM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM ) == + sizeof( VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM is not nothrow_move_constructible!" ); + +//=== VK_QCOM_multiview_per_view_render_areas === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM ) == + sizeof( VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM ) == + sizeof( VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_KHR_compute_shader_derivatives === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesKHR ) == + sizeof( VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceComputeShaderDerivativesFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesPropertiesKHR ) == + sizeof( VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceComputeShaderDerivativesPropertiesKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_decode_av1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeAV1ProfileInfoKHR ) == sizeof( VkVideoDecodeAV1ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeAV1ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeAV1CapabilitiesKHR ) == sizeof( VkVideoDecodeAV1CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeAV1CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeAV1SessionParametersCreateInfoKHR ) == + sizeof( VkVideoDecodeAV1SessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeAV1SessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeAV1PictureInfoKHR ) == sizeof( VkVideoDecodeAV1PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeAV1PictureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeAV1DpbSlotInfoKHR ) == sizeof( VkVideoDecodeAV1DpbSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeAV1DpbSlotInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_encode_av1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeAV1FeaturesKHR ) == sizeof( VkPhysicalDeviceVideoEncodeAV1FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoEncodeAV1FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilitiesKHR ) == sizeof( VkVideoEncodeAV1CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QualityLevelPropertiesKHR ) == sizeof( VkVideoEncodeAV1QualityLevelPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1QualityLevelPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1SessionCreateInfoKHR ) == sizeof( VkVideoEncodeAV1SessionCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1SessionCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1SessionParametersCreateInfoKHR ) == + sizeof( VkVideoEncodeAV1SessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1SessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1PictureInfoKHR ) == sizeof( VkVideoEncodeAV1PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1PictureInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1DpbSlotInfoKHR ) == sizeof( VkVideoEncodeAV1DpbSlotInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1DpbSlotInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1ProfileInfoKHR ) == sizeof( VkVideoEncodeAV1ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR ) == sizeof( VkVideoEncodeAV1QIndexKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1QIndexKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1FrameSizeKHR ) == sizeof( VkVideoEncodeAV1FrameSizeKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1FrameSizeKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1GopRemainingFrameInfoKHR ) == sizeof( VkVideoEncodeAV1GopRemainingFrameInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1GopRemainingFrameInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlInfoKHR ) == sizeof( VkVideoEncodeAV1RateControlInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1RateControlInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlLayerInfoKHR ) == sizeof( VkVideoEncodeAV1RateControlLayerInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1RateControlLayerInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_decode_vp9 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoDecodeVP9FeaturesKHR ) == sizeof( VkPhysicalDeviceVideoDecodeVP9FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoDecodeVP9FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeVP9ProfileInfoKHR ) == sizeof( VkVideoDecodeVP9ProfileInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeVP9ProfileInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeVP9CapabilitiesKHR ) == sizeof( VkVideoDecodeVP9CapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeVP9CapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeVP9PictureInfoKHR ) == sizeof( VkVideoDecodeVP9PictureInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeVP9PictureInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_maintenance1 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoMaintenance1FeaturesKHR ) == sizeof( VkPhysicalDeviceVideoMaintenance1FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoMaintenance1FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoInlineQueryInfoKHR ) == sizeof( VkVideoInlineQueryInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoInlineQueryInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_per_stage_descriptor_set === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePerStageDescriptorSetFeaturesNV ) == + sizeof( VkPhysicalDevicePerStageDescriptorSetFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePerStageDescriptorSetFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_QCOM_image_processing2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessing2FeaturesQCOM ) == sizeof( VkPhysicalDeviceImageProcessing2FeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageProcessing2FeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageProcessing2PropertiesQCOM ) == + sizeof( VkPhysicalDeviceImageProcessing2PropertiesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageProcessing2PropertiesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerBlockMatchWindowCreateInfoQCOM ) == sizeof( VkSamplerBlockMatchWindowCreateInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerBlockMatchWindowCreateInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_QCOM_filter_cubic_weights === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCubicWeightsFeaturesQCOM ) == sizeof( VkPhysicalDeviceCubicWeightsFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCubicWeightsFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerCubicWeightsCreateInfoQCOM ) == sizeof( VkSamplerCubicWeightsCreateInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerCubicWeightsCreateInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BlitImageCubicWeightsInfoQCOM ) == sizeof( VkBlitImageCubicWeightsInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BlitImageCubicWeightsInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_QCOM_ycbcr_degamma === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrDegammaFeaturesQCOM ) == sizeof( VkPhysicalDeviceYcbcrDegammaFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceYcbcrDegammaFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM ) == + sizeof( VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_QCOM_filter_cubic_clamp === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCubicClampFeaturesQCOM ) == sizeof( VkPhysicalDeviceCubicClampFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCubicClampFeaturesQCOM is not nothrow_move_constructible!" ); + +//=== VK_EXT_attachment_feedback_loop_dynamic_state === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT ) == + sizeof( VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_unified_image_layouts === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceUnifiedImageLayoutsFeaturesKHR ) == + sizeof( VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceUnifiedImageLayoutsFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentFeedbackLoopInfoEXT ) == sizeof( VkAttachmentFeedbackLoopInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "AttachmentFeedbackLoopInfoEXT is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) +//=== VK_QNX_external_memory_screen_buffer === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ScreenBufferPropertiesQNX ) == sizeof( VkScreenBufferPropertiesQNX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ScreenBufferPropertiesQNX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ScreenBufferFormatPropertiesQNX ) == sizeof( VkScreenBufferFormatPropertiesQNX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ScreenBufferFormatPropertiesQNX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportScreenBufferInfoQNX ) == sizeof( VkImportScreenBufferInfoQNX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportScreenBufferInfoQNX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalFormatQNX ) == sizeof( VkExternalFormatQNX ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalFormatQNX is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX ) == + sizeof( VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +//=== VK_MSFT_layered_driver === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredDriverPropertiesMSFT ) == sizeof( VkPhysicalDeviceLayeredDriverPropertiesMSFT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLayeredDriverPropertiesMSFT is not nothrow_move_constructible!" ); + +//=== VK_KHR_calibrated_timestamps === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoKHR ) == sizeof( VkCalibratedTimestampInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CalibratedTimestampInfoKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_maintenance6 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SetDescriptorBufferOffsetsInfoEXT ) == sizeof( VkSetDescriptorBufferOffsetsInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SetDescriptorBufferOffsetsInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindDescriptorBufferEmbeddedSamplersInfoEXT ) == + sizeof( VkBindDescriptorBufferEmbeddedSamplersInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindDescriptorBufferEmbeddedSamplersInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_NV_descriptor_pool_overallocation === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorPoolOverallocationFeaturesNV ) == + sizeof( VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDescriptorPoolOverallocationFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_QCOM_tile_memory_heap === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileMemoryHeapFeaturesQCOM ) == sizeof( VkPhysicalDeviceTileMemoryHeapFeaturesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTileMemoryHeapFeaturesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTileMemoryHeapPropertiesQCOM ) == sizeof( VkPhysicalDeviceTileMemoryHeapPropertiesQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceTileMemoryHeapPropertiesQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TileMemoryRequirementsQCOM ) == sizeof( VkTileMemoryRequirementsQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TileMemoryRequirementsQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TileMemoryBindInfoQCOM ) == sizeof( VkTileMemoryBindInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TileMemoryBindInfoQCOM is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TileMemorySizeInfoQCOM ) == sizeof( VkTileMemorySizeInfoQCOM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "TileMemorySizeInfoQCOM is not nothrow_move_constructible!" ); + +//=== VK_NV_display_stereo === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoCreateInfoNV ) == sizeof( VkDisplaySurfaceStereoCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplaySurfaceStereoCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeStereoPropertiesNV ) == sizeof( VkDisplayModeStereoPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DisplayModeStereoPropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_encode_intra_refresh === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshCapabilitiesKHR ) == sizeof( VkVideoEncodeIntraRefreshCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeIntraRefreshCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeSessionIntraRefreshCreateInfoKHR ) == + sizeof( VkVideoEncodeSessionIntraRefreshCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeSessionIntraRefreshCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshInfoKHR ) == sizeof( VkVideoEncodeIntraRefreshInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeIntraRefreshInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoReferenceIntraRefreshInfoKHR ) == sizeof( VkVideoReferenceIntraRefreshInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoReferenceIntraRefreshInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR ) == + sizeof( VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_encode_quantization_map === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapCapabilitiesKHR ) == sizeof( VkVideoEncodeQuantizationMapCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeQuantizationMapCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoFormatQuantizationMapPropertiesKHR ) == sizeof( VkVideoFormatQuantizationMapPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoFormatQuantizationMapPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapInfoKHR ) == sizeof( VkVideoEncodeQuantizationMapInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeQuantizationMapInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeQuantizationMapSessionParametersCreateInfoKHR ) == + sizeof( VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeQuantizationMapSessionParametersCreateInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR ) == + sizeof( VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264QuantizationMapCapabilitiesKHR ) == + sizeof( VkVideoEncodeH264QuantizationMapCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH264QuantizationMapCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265QuantizationMapCapabilitiesKHR ) == + sizeof( VkVideoEncodeH265QuantizationMapCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeH265QuantizationMapCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoFormatH265QuantizationMapPropertiesKHR ) == + sizeof( VkVideoFormatH265QuantizationMapPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoFormatH265QuantizationMapPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QuantizationMapCapabilitiesKHR ) == + sizeof( VkVideoEncodeAV1QuantizationMapCapabilitiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoEncodeAV1QuantizationMapCapabilitiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoFormatAV1QuantizationMapPropertiesKHR ) == sizeof( VkVideoFormatAV1QuantizationMapPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoFormatAV1QuantizationMapPropertiesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_raw_access_chains === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRawAccessChainsFeaturesNV ) == sizeof( VkPhysicalDeviceRawAccessChainsFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRawAccessChainsFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_external_compute_queue === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalComputeQueueNV ) == sizeof( VkExternalComputeQueueNV ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "ExternalComputeQueueNV is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalComputeQueueNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalComputeQueueDeviceCreateInfoNV ) == sizeof( VkExternalComputeQueueDeviceCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalComputeQueueDeviceCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalComputeQueueCreateInfoNV ) == sizeof( VkExternalComputeQueueCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalComputeQueueCreateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalComputeQueueDataParamsNV ) == sizeof( VkExternalComputeQueueDataParamsNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ExternalComputeQueueDataParamsNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalComputeQueuePropertiesNV ) == + sizeof( VkPhysicalDeviceExternalComputeQueuePropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceExternalComputeQueuePropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_shader_relaxed_extended_instruction === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR ) == + sizeof( VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_command_buffer_inheritance === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCommandBufferInheritanceFeaturesNV ) == + sizeof( VkPhysicalDeviceCommandBufferInheritanceFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCommandBufferInheritanceFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_KHR_maintenance7 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance7FeaturesKHR ) == sizeof( VkPhysicalDeviceMaintenance7FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance7FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance7PropertiesKHR ) == sizeof( VkPhysicalDeviceMaintenance7PropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance7PropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesListKHR ) == sizeof( VkPhysicalDeviceLayeredApiPropertiesListKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLayeredApiPropertiesListKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesKHR ) == sizeof( VkPhysicalDeviceLayeredApiPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLayeredApiPropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiVulkanPropertiesKHR ) == + sizeof( VkPhysicalDeviceLayeredApiVulkanPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceLayeredApiVulkanPropertiesKHR is not nothrow_move_constructible!" ); + +//=== VK_NV_shader_atomic_float16_vector === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV ) == + sizeof( VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_replicated_composites === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderReplicatedCompositesFeaturesEXT ) == + sizeof( VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderReplicatedCompositesFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_shader_float8 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat8FeaturesEXT ) == sizeof( VkPhysicalDeviceShaderFloat8FeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceShaderFloat8FeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_NV_ray_tracing_validation === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingValidationFeaturesNV ) == + sizeof( VkPhysicalDeviceRayTracingValidationFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRayTracingValidationFeaturesNV is not nothrow_move_constructible!" ); + +//=== VK_NV_cluster_acceleration_structure === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterAccelerationStructureFeaturesNV ) == + sizeof( VkPhysicalDeviceClusterAccelerationStructureFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceClusterAccelerationStructureFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceClusterAccelerationStructurePropertiesNV ) == + sizeof( VkPhysicalDeviceClusterAccelerationStructurePropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceClusterAccelerationStructurePropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClustersBottomLevelInputNV ) == + sizeof( VkClusterAccelerationStructureClustersBottomLevelInputNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureClustersBottomLevelInputNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTriangleClusterInputNV ) == + sizeof( VkClusterAccelerationStructureTriangleClusterInputNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureTriangleClusterInputNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInputNV ) == + sizeof( VkClusterAccelerationStructureMoveObjectsInputNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureMoveObjectsInputNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpInputNV ) == sizeof( VkClusterAccelerationStructureOpInputNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureOpInputNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV ) == sizeof( VkClusterAccelerationStructureInputInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureInputInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureCommandsInfoNV ) == sizeof( VkClusterAccelerationStructureCommandsInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureCommandsInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV ) == sizeof( VkStridedDeviceAddressNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "StridedDeviceAddressNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV ) == + sizeof( VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInfoNV ) == + sizeof( VkClusterAccelerationStructureMoveObjectsInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureMoveObjectsInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildClustersBottomLevelInfoNV ) == + sizeof( VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureBuildClustersBottomLevelInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildTriangleClusterInfoNV ) == + sizeof( VkClusterAccelerationStructureBuildTriangleClusterInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureBuildTriangleClusterInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV ) == + sizeof( VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInstantiateClusterInfoNV ) == + sizeof( VkClusterAccelerationStructureInstantiateClusterInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureInstantiateClusterInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGetTemplateIndicesInfoNV ) == + sizeof( VkClusterAccelerationStructureGetTemplateIndicesInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ClusterAccelerationStructureGetTemplateIndicesInfoNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineClusterAccelerationStructureCreateInfoNV ) == + sizeof( VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RayTracingPipelineClusterAccelerationStructureCreateInfoNV is not nothrow_move_constructible!" ); + +//=== VK_NV_partitioned_acceleration_structure === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePartitionedAccelerationStructureFeaturesNV ) == + sizeof( VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePartitionedAccelerationStructureFeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePartitionedAccelerationStructurePropertiesNV ) == + sizeof( VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePartitionedAccelerationStructurePropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureFlagsNV ) == sizeof( VkPartitionedAccelerationStructureFlagsNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PartitionedAccelerationStructureFlagsNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureIndirectCommandNV ) == + sizeof( VkBuildPartitionedAccelerationStructureIndirectCommandNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BuildPartitionedAccelerationStructureIndirectCommandNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureWriteInstanceDataNV ) == + sizeof( VkPartitionedAccelerationStructureWriteInstanceDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PartitionedAccelerationStructureWriteInstanceDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureUpdateInstanceDataNV ) == + sizeof( VkPartitionedAccelerationStructureUpdateInstanceDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PartitionedAccelerationStructureUpdateInstanceDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureWritePartitionTranslationDataNV ) == + sizeof( VkPartitionedAccelerationStructureWritePartitionTranslationDataNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PartitionedAccelerationStructureWritePartitionTranslationDataNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetPartitionedAccelerationStructureNV ) == + sizeof( VkWriteDescriptorSetPartitionedAccelerationStructureNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteDescriptorSetPartitionedAccelerationStructureNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV ) == + sizeof( VkPartitionedAccelerationStructureInstancesInputNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PartitionedAccelerationStructureInstancesInputNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BuildPartitionedAccelerationStructureInfoNV ) == + sizeof( VkBuildPartitionedAccelerationStructureInfoNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BuildPartitionedAccelerationStructureInfoNV is not nothrow_move_constructible!" ); + +//=== VK_EXT_device_generated_commands === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT ) == + sizeof( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT ) == + sizeof( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoEXT ) == sizeof( VkGeneratedCommandsMemoryRequirementsInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeneratedCommandsMemoryRequirementsInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectExecutionSetCreateInfoEXT ) == sizeof( VkIndirectExecutionSetCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectExecutionSetCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoEXT ) == sizeof( VkIndirectExecutionSetInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectExecutionSetInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectExecutionSetPipelineInfoEXT ) == sizeof( VkIndirectExecutionSetPipelineInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectExecutionSetPipelineInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderInfoEXT ) == sizeof( VkIndirectExecutionSetShaderInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectExecutionSetShaderInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoEXT ) == sizeof( VkGeneratedCommandsInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeneratedCommandsInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteIndirectExecutionSetPipelineEXT ) == sizeof( VkWriteIndirectExecutionSetPipelineEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteIndirectExecutionSetPipelineEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoEXT ) == sizeof( VkIndirectCommandsLayoutCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsLayoutCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenEXT ) == sizeof( VkIndirectCommandsLayoutTokenEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsLayoutTokenEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawIndirectCountIndirectCommandEXT ) == sizeof( VkDrawIndirectCountIndirectCommandEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DrawIndirectCountIndirectCommandEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsVertexBufferTokenEXT ) == sizeof( VkIndirectCommandsVertexBufferTokenEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsVertexBufferTokenEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandEXT ) == sizeof( VkBindVertexBufferIndirectCommandEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindVertexBufferIndirectCommandEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsIndexBufferTokenEXT ) == sizeof( VkIndirectCommandsIndexBufferTokenEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsIndexBufferTokenEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandEXT ) == sizeof( VkBindIndexBufferIndirectCommandEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "BindIndexBufferIndirectCommandEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsPushConstantTokenEXT ) == sizeof( VkIndirectCommandsPushConstantTokenEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsPushConstantTokenEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsExecutionSetTokenEXT ) == sizeof( VkIndirectCommandsExecutionSetTokenEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsExecutionSetTokenEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenDataEXT ) == sizeof( VkIndirectCommandsTokenDataEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsTokenDataEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT ) == sizeof( VkIndirectCommandsLayoutEXT ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "IndirectCommandsLayoutEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectCommandsLayoutEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT ) == sizeof( VkIndirectExecutionSetEXT ), + "handle and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_copy_constructible::value, + "IndirectExecutionSetEXT is not copy_constructible!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectExecutionSetEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderLayoutInfoEXT ) == sizeof( VkIndirectExecutionSetShaderLayoutInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "IndirectExecutionSetShaderLayoutInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsPipelineInfoEXT ) == sizeof( VkGeneratedCommandsPipelineInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeneratedCommandsPipelineInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsShaderInfoEXT ) == sizeof( VkGeneratedCommandsShaderInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "GeneratedCommandsShaderInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteIndirectExecutionSetShaderEXT ) == sizeof( VkWriteIndirectExecutionSetShaderEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "WriteIndirectExecutionSetShaderEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_maintenance8 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance8FeaturesKHR ) == sizeof( VkPhysicalDeviceMaintenance8FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance8FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryBarrierAccessFlags3KHR ) == sizeof( VkMemoryBarrierAccessFlags3KHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryBarrierAccessFlags3KHR is not nothrow_move_constructible!" ); + +//=== VK_MESA_image_alignment_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageAlignmentControlFeaturesMESA ) == + sizeof( VkPhysicalDeviceImageAlignmentControlFeaturesMESA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageAlignmentControlFeaturesMESA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageAlignmentControlPropertiesMESA ) == + sizeof( VkPhysicalDeviceImageAlignmentControlPropertiesMESA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceImageAlignmentControlPropertiesMESA is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageAlignmentControlCreateInfoMESA ) == sizeof( VkImageAlignmentControlCreateInfoMESA ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImageAlignmentControlCreateInfoMESA is not nothrow_move_constructible!" ); + +//=== VK_EXT_depth_clamp_control === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampControlFeaturesEXT ) == sizeof( VkPhysicalDeviceDepthClampControlFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDepthClampControlFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClampControlCreateInfoEXT ) == + sizeof( VkPipelineViewportDepthClampControlCreateInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineViewportDepthClampControlCreateInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DepthClampRangeEXT ) == sizeof( VkDepthClampRangeEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "DepthClampRangeEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_maintenance9 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance9FeaturesKHR ) == sizeof( VkPhysicalDeviceMaintenance9FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance9FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance9PropertiesKHR ) == sizeof( VkPhysicalDeviceMaintenance9PropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceMaintenance9PropertiesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyOwnershipTransferPropertiesKHR ) == sizeof( VkQueueFamilyOwnershipTransferPropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "QueueFamilyOwnershipTransferPropertiesKHR is not nothrow_move_constructible!" ); + +//=== VK_KHR_video_maintenance2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoMaintenance2FeaturesKHR ) == sizeof( VkPhysicalDeviceVideoMaintenance2FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVideoMaintenance2FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264InlineSessionParametersInfoKHR ) == + sizeof( VkVideoDecodeH264InlineSessionParametersInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH264InlineSessionParametersInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265InlineSessionParametersInfoKHR ) == + sizeof( VkVideoDecodeH265InlineSessionParametersInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeH265InlineSessionParametersInfoKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeAV1InlineSessionParametersInfoKHR ) == + sizeof( VkVideoDecodeAV1InlineSessionParametersInfoKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "VideoDecodeAV1InlineSessionParametersInfoKHR is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_OHOS ) +//=== VK_OHOS_surface === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::OHSurfaceCreateInfoOHOS ) == sizeof( VkOHSurfaceCreateInfoOHOS ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "OHSurfaceCreateInfoOHOS is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_OHOS*/ + +//=== VK_HUAWEI_hdr_vivid === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceHdrVividFeaturesHUAWEI ) == sizeof( VkPhysicalDeviceHdrVividFeaturesHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceHdrVividFeaturesHUAWEI is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HdrVividDynamicMetadataHUAWEI ) == sizeof( VkHdrVividDynamicMetadataHUAWEI ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "HdrVividDynamicMetadataHUAWEI is not nothrow_move_constructible!" ); + +//=== VK_NV_cooperative_matrix2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CooperativeMatrixFlexibleDimensionsPropertiesNV ) == + sizeof( VkCooperativeMatrixFlexibleDimensionsPropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "CooperativeMatrixFlexibleDimensionsPropertiesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrix2FeaturesNV ) == sizeof( VkPhysicalDeviceCooperativeMatrix2FeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeMatrix2FeaturesNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrix2PropertiesNV ) == + sizeof( VkPhysicalDeviceCooperativeMatrix2PropertiesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceCooperativeMatrix2PropertiesNV is not nothrow_move_constructible!" ); + +//=== VK_ARM_pipeline_opacity_micromap === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineOpacityMicromapFeaturesARM ) == + sizeof( VkPhysicalDevicePipelineOpacityMicromapFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineOpacityMicromapFeaturesARM is not nothrow_move_constructible!" ); + +#if defined( VK_USE_PLATFORM_METAL_EXT ) +//=== VK_EXT_external_memory_metal === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryMetalHandleInfoEXT ) == sizeof( VkImportMemoryMetalHandleInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "ImportMemoryMetalHandleInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryMetalHandlePropertiesEXT ) == sizeof( VkMemoryMetalHandlePropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryMetalHandlePropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetMetalHandleInfoEXT ) == sizeof( VkMemoryGetMetalHandleInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "MemoryGetMetalHandleInfoEXT is not nothrow_move_constructible!" ); +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +//=== VK_KHR_depth_clamp_zero_one === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClampZeroOneFeaturesKHR ) == sizeof( VkPhysicalDeviceDepthClampZeroOneFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceDepthClampZeroOneFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_EXT_vertex_attribute_robustness === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeRobustnessFeaturesEXT ) == + sizeof( VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceVertexAttributeRobustnessFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_ARM_format_pack === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFormatPackFeaturesARM ) == sizeof( VkPhysicalDeviceFormatPackFeaturesARM ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFormatPackFeaturesARM is not nothrow_move_constructible!" ); + +//=== VK_VALVE_fragment_density_map_layered === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE ) == + sizeof( VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE ) == + sizeof( VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineFragmentDensityMapLayeredCreateInfoVALVE ) == + sizeof( VkPipelineFragmentDensityMapLayeredCreateInfoVALVE ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PipelineFragmentDensityMapLayeredCreateInfoVALVE is not nothrow_move_constructible!" ); + +//=== VK_KHR_robustness2 === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesKHR ) == sizeof( VkPhysicalDeviceRobustness2FeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRobustness2FeaturesKHR is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesKHR ) == sizeof( VkPhysicalDeviceRobustness2PropertiesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceRobustness2PropertiesKHR is not nothrow_move_constructible!" ); + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) +//=== VK_NV_present_metering === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SetPresentConfigNV ) == sizeof( VkSetPresentConfigNV ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "SetPresentConfigNV is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentMeteringFeaturesNV ) == sizeof( VkPhysicalDevicePresentMeteringFeaturesNV ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentMeteringFeaturesNV is not nothrow_move_constructible!" ); +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +//=== VK_EXT_fragment_density_map_offset === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingEndInfoEXT ) == sizeof( VkRenderingEndInfoEXT ), "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderingEndInfoEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT ) == + sizeof( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT ) == + sizeof( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT is not nothrow_move_constructible!" ); + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapOffsetEndInfoEXT ) == + sizeof( VkRenderPassFragmentDensityMapOffsetEndInfoEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "RenderPassFragmentDensityMapOffsetEndInfoEXT is not nothrow_move_constructible!" ); + +//=== VK_EXT_zero_initialize_device_memory === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT ) == + sizeof( VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT is not nothrow_move_constructible!" ); + +//=== VK_KHR_present_mode_fifo_latest_ready === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR ) == + sizeof( VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR is not nothrow_move_constructible!" ); + +//=== VK_SEC_pipeline_cache_incremental_mode === + +VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC ) == + sizeof( VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC ), + "struct and wrapper have different size!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout::value, + "struct wrapper is not a standard layout!" ); +VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible::value, + "PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC is not nothrow_move_constructible!" ); + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_structs.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_structs.hpp new file mode 100644 index 0000000000..52399bd7d5 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_structs.hpp @@ -0,0 +1,167051 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_STRUCTS_HPP +#define VULKAN_STRUCTS_HPP + +// include-what-you-use: make sure, vulkan.hpp is used by code-completers +// IWYU pragma: private; include "vulkan.hpp" + +#include // strcmp + +namespace VULKAN_HPP_NAMESPACE +{ + + //=============== + //=== STRUCTS === + //=============== + + // wrapper struct for struct VkAabbPositionsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAabbPositionsKHR.html + struct AabbPositionsKHR + { + using NativeType = VkAabbPositionsKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + AabbPositionsKHR( float minX_ = {}, float minY_ = {}, float minZ_ = {}, float maxX_ = {}, float maxY_ = {}, float maxZ_ = {} ) VULKAN_HPP_NOEXCEPT + : minX{ minX_ } + , minY{ minY_ } + , minZ{ minZ_ } + , maxX{ maxX_ } + , maxY{ maxY_ } + , maxZ{ maxZ_ } + { + } + + VULKAN_HPP_CONSTEXPR AabbPositionsKHR( AabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AabbPositionsKHR( VkAabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT : AabbPositionsKHR( *reinterpret_cast( &rhs ) ) {} + + AabbPositionsKHR & operator=( AabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AabbPositionsKHR & operator=( VkAabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinX( float minX_ ) VULKAN_HPP_NOEXCEPT + { + minX = minX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinY( float minY_ ) VULKAN_HPP_NOEXCEPT + { + minY = minY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinZ( float minZ_ ) VULKAN_HPP_NOEXCEPT + { + minZ = minZ_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxX( float maxX_ ) VULKAN_HPP_NOEXCEPT + { + maxX = maxX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxY( float maxY_ ) VULKAN_HPP_NOEXCEPT + { + maxY = maxY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxZ( float maxZ_ ) VULKAN_HPP_NOEXCEPT + { + maxZ = maxZ_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAabbPositionsKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAabbPositionsKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAabbPositionsKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAabbPositionsKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( minX, minY, minZ, maxX, maxY, maxZ ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AabbPositionsKHR const & ) const = default; +#else + bool operator==( AabbPositionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( minX == rhs.minX ) && ( minY == rhs.minY ) && ( minZ == rhs.minZ ) && ( maxX == rhs.maxX ) && ( maxY == rhs.maxY ) && ( maxZ == rhs.maxZ ); +# endif + } + + bool operator!=( AabbPositionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float minX = {}; + float minY = {}; + float minZ = {}; + float maxX = {}; + float maxY = {}; + float maxZ = {}; + }; + + using AabbPositionsNV = AabbPositionsKHR; + + union DeviceOrHostAddressConstKHR + { + using NativeType = VkDeviceOrHostAddressConstKHR; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} ) : deviceAddress( deviceAddress_ ) {} + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR( const void * hostAddress_ ) : hostAddress( hostAddress_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR & setHostAddress( const void * hostAddress_ ) VULKAN_HPP_NOEXCEPT + { + hostAddress = hostAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceOrHostAddressConstKHR const &() const + { + return *reinterpret_cast( this ); + } + + operator VkDeviceOrHostAddressConstKHR &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress; + const void * hostAddress; +#else + VkDeviceAddress deviceAddress; + const void * hostAddress; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkAccelerationStructureGeometryTrianglesDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometryTrianglesDataKHR.html + struct AccelerationStructureGeometryTrianglesDataKHR + { + using NativeType = VkAccelerationStructureGeometryTrianglesDataKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryTrianglesDataKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureGeometryTrianglesDataKHR( VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {}, + uint32_t maxVertex_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR transformData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexFormat{ vertexFormat_ } + , vertexData{ vertexData_ } + , vertexStride{ vertexStride_ } + , maxVertex{ maxVertex_ } + , indexType{ indexType_ } + , indexData{ indexData_ } + , transformData{ transformData_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureGeometryTrianglesDataKHR( AccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometryTrianglesDataKHR( VkAccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometryTrianglesDataKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometryTrianglesDataKHR & operator=( AccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometryTrianglesDataKHR & operator=( VkAccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT + { + vertexFormat = vertexFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & + setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT + { + vertexData = vertexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & + setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexStride = vertexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setMaxVertex( uint32_t maxVertex_ ) VULKAN_HPP_NOEXCEPT + { + maxVertex = maxVertex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & + setIndexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexData_ ) VULKAN_HPP_NOEXCEPT + { + indexData = indexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR & + setTransformData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & transformData_ ) VULKAN_HPP_NOEXCEPT + { + transformData = transformData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryTrianglesDataKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryTrianglesDataKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryTrianglesDataKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryTrianglesDataKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexFormat, vertexData, vertexStride, maxVertex, indexType, indexData, transformData ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryTrianglesDataKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride = {}; + uint32_t maxVertex = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR transformData = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometryTrianglesDataKHR; + }; + + // wrapper struct for struct VkAccelerationStructureGeometryAabbsDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometryAabbsDataKHR.html + struct AccelerationStructureGeometryAabbsDataKHR + { + using NativeType = VkAccelerationStructureGeometryAabbsDataKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryAabbsDataKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize stride_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , data{ data_ } + , stride{ stride_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR( AccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometryAabbsDataKHR( VkAccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometryAabbsDataKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometryAabbsDataKHR & operator=( AccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometryAabbsDataKHR & operator=( VkAccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR & + setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR & setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryAabbsDataKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryAabbsDataKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryAabbsDataKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryAabbsDataKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, data, stride ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryAabbsDataKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {}; + VULKAN_HPP_NAMESPACE::DeviceSize stride = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometryAabbsDataKHR; + }; + + // wrapper struct for struct VkAccelerationStructureGeometryInstancesDataKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometryInstancesDataKHR.html + struct AccelerationStructureGeometryInstancesDataKHR + { + using NativeType = VkAccelerationStructureGeometryInstancesDataKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryInstancesDataKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , arrayOfPointers{ arrayOfPointers_ } + , data{ data_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureGeometryInstancesDataKHR( AccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometryInstancesDataKHR( VkAccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometryInstancesDataKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometryInstancesDataKHR & operator=( AccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometryInstancesDataKHR & operator=( VkAccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR & + setArrayOfPointers( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ ) VULKAN_HPP_NOEXCEPT + { + arrayOfPointers = arrayOfPointers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR & + setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryInstancesDataKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryInstancesDataKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryInstancesDataKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryInstancesDataKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, arrayOfPointers, data ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryInstancesDataKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometryInstancesDataKHR; + }; + + union AccelerationStructureGeometryDataKHR + { + using NativeType = VkAccelerationStructureGeometryDataKHR; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR triangles_ = {} ) + : triangles( triangles_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR aabbs_ ) : aabbs( aabbs_ ) {} + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR instances_ ) + : instances( instances_ ) + { + } +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & + setTriangles( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR const & triangles_ ) VULKAN_HPP_NOEXCEPT + { + triangles = triangles_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & + setAabbs( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR const & aabbs_ ) VULKAN_HPP_NOEXCEPT + { + aabbs = aabbs_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & + setInstances( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR const & instances_ ) VULKAN_HPP_NOEXCEPT + { + instances = instances_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryDataKHR const &() const + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryDataKHR &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR triangles; + VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR aabbs; + VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR instances; +#else + VkAccelerationStructureGeometryTrianglesDataKHR triangles; + VkAccelerationStructureGeometryAabbsDataKHR aabbs; + VkAccelerationStructureGeometryInstancesDataKHR instances; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkAccelerationStructureGeometryKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometryKHR.html + struct AccelerationStructureGeometryKHR + { + using NativeType = VkAccelerationStructureGeometryKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureGeometryKHR( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles, + VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR geometry_ = {}, + VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , geometryType{ geometryType_ } + , geometry{ geometry_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR( AccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometryKHR( VkAccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometryKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometryKHR & operator=( AccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometryKHR & operator=( VkAccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT + { + geometryType = geometryType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & + setGeometry( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR const & geometry_ ) VULKAN_HPP_NOEXCEPT + { + geometry = geometry_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, geometryType, geometry, flags ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles; + VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR geometry = {}; + VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometryKHR; + }; + + union DeviceOrHostAddressKHR + { + using NativeType = VkDeviceOrHostAddressKHR; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} ) : deviceAddress( deviceAddress_ ) {} + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR( void * hostAddress_ ) : hostAddress( hostAddress_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR & setHostAddress( void * hostAddress_ ) VULKAN_HPP_NOEXCEPT + { + hostAddress = hostAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceOrHostAddressKHR const &() const + { + return *reinterpret_cast( this ); + } + + operator VkDeviceOrHostAddressKHR &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress; + void * hostAddress; +#else + VkDeviceAddress deviceAddress; + void * hostAddress; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkAccelerationStructureBuildGeometryInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureBuildGeometryInfoKHR.html + struct AccelerationStructureBuildGeometryInfoKHR + { + using NativeType = VkAccelerationStructureBuildGeometryInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureBuildGeometryInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR( + VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR::eBuild, + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_ = {}, + uint32_t geometryCount_ = {}, + const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries_ = {}, + const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , flags{ flags_ } + , mode{ mode_ } + , srcAccelerationStructure{ srcAccelerationStructure_ } + , dstAccelerationStructure{ dstAccelerationStructure_ } + , geometryCount{ geometryCount_ } + , pGeometries{ pGeometries_ } + , ppGeometries{ ppGeometries_ } + , scratchData{ scratchData_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR( AccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureBuildGeometryInfoKHR( VkAccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureBuildGeometryInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureBuildGeometryInfoKHR( + VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_, + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_, + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pGeometries_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , type( type_ ) + , flags( flags_ ) + , mode( mode_ ) + , srcAccelerationStructure( srcAccelerationStructure_ ) + , dstAccelerationStructure( dstAccelerationStructure_ ) + , geometryCount( static_cast( !geometries_.empty() ? geometries_.size() : pGeometries_.size() ) ) + , pGeometries( geometries_.data() ) + , ppGeometries( pGeometries_.data() ) + , scratchData( scratchData_ ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( ( !geometries_.empty() + !pGeometries_.empty() ) <= 1 ); +# else + if ( 1 < ( !geometries_.empty() + !pGeometries_.empty() ) ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::AccelerationStructureBuildGeometryInfoKHR::AccelerationStructureBuildGeometryInfoKHR: 1 < ( !geometries_.empty() + !pGeometries_.empty() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + AccelerationStructureBuildGeometryInfoKHR & operator=( AccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureBuildGeometryInfoKHR & operator=( VkAccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setMode( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setSrcAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + srcAccelerationStructure = srcAccelerationStructure_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setDstAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + dstAccelerationStructure = dstAccelerationStructure_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT + { + geometryCount = geometryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setPGeometries( const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries_ ) VULKAN_HPP_NOEXCEPT + { + pGeometries = pGeometries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureBuildGeometryInfoKHR & setGeometries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_ ) VULKAN_HPP_NOEXCEPT + { + geometryCount = static_cast( geometries_.size() ); + pGeometries = geometries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setPpGeometries( const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries_ ) VULKAN_HPP_NOEXCEPT + { + ppGeometries = ppGeometries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureBuildGeometryInfoKHR & + setPGeometries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pGeometries_ ) + VULKAN_HPP_NOEXCEPT + { + geometryCount = static_cast( pGeometries_.size() ); + ppGeometries = pGeometries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & + setScratchData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & scratchData_ ) VULKAN_HPP_NOEXCEPT + { + scratchData = scratchData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureBuildGeometryInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildGeometryInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildGeometryInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildGeometryInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, type, flags, mode, srcAccelerationStructure, dstAccelerationStructure, geometryCount, pGeometries, ppGeometries, scratchData ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureBuildGeometryInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel; + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR::eBuild; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure = {}; + uint32_t geometryCount = {}; + const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries = {}; + const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureBuildGeometryInfoKHR; + }; + + // wrapper struct for struct VkAccelerationStructureBuildRangeInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureBuildRangeInfoKHR.html + struct AccelerationStructureBuildRangeInfoKHR + { + using NativeType = VkAccelerationStructureBuildRangeInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureBuildRangeInfoKHR( uint32_t primitiveCount_ = {}, + uint32_t primitiveOffset_ = {}, + uint32_t firstVertex_ = {}, + uint32_t transformOffset_ = {} ) VULKAN_HPP_NOEXCEPT + : primitiveCount{ primitiveCount_ } + , primitiveOffset{ primitiveOffset_ } + , firstVertex{ firstVertex_ } + , transformOffset{ transformOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureBuildRangeInfoKHR( AccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureBuildRangeInfoKHR( VkAccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureBuildRangeInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureBuildRangeInfoKHR & operator=( AccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureBuildRangeInfoKHR & operator=( VkAccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setPrimitiveCount( uint32_t primitiveCount_ ) VULKAN_HPP_NOEXCEPT + { + primitiveCount = primitiveCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setPrimitiveOffset( uint32_t primitiveOffset_ ) VULKAN_HPP_NOEXCEPT + { + primitiveOffset = primitiveOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT + { + firstVertex = firstVertex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR & setTransformOffset( uint32_t transformOffset_ ) VULKAN_HPP_NOEXCEPT + { + transformOffset = transformOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureBuildRangeInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildRangeInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildRangeInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildRangeInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( primitiveCount, primitiveOffset, firstVertex, transformOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureBuildRangeInfoKHR const & ) const = default; +#else + bool operator==( AccelerationStructureBuildRangeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( primitiveCount == rhs.primitiveCount ) && ( primitiveOffset == rhs.primitiveOffset ) && ( firstVertex == rhs.firstVertex ) && + ( transformOffset == rhs.transformOffset ); +# endif + } + + bool operator!=( AccelerationStructureBuildRangeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t primitiveCount = {}; + uint32_t primitiveOffset = {}; + uint32_t firstVertex = {}; + uint32_t transformOffset = {}; + }; + + // wrapper struct for struct VkAccelerationStructureBuildSizesInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureBuildSizesInfoKHR.html + struct AccelerationStructureBuildSizesInfoKHR + { + using NativeType = VkAccelerationStructureBuildSizesInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureBuildSizesInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureBuildSizesInfoKHR( VULKAN_HPP_NAMESPACE::DeviceSize accelerationStructureSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructureSize{ accelerationStructureSize_ } + , updateScratchSize{ updateScratchSize_ } + , buildScratchSize{ buildScratchSize_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureBuildSizesInfoKHR( AccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureBuildSizesInfoKHR( VkAccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureBuildSizesInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureBuildSizesInfoKHR & operator=( AccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureBuildSizesInfoKHR & operator=( VkAccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkAccelerationStructureBuildSizesInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildSizesInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildSizesInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureBuildSizesInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructureSize, updateScratchSize, buildScratchSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureBuildSizesInfoKHR const & ) const = default; +#else + bool operator==( AccelerationStructureBuildSizesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureSize == rhs.accelerationStructureSize ) && + ( updateScratchSize == rhs.updateScratchSize ) && ( buildScratchSize == rhs.buildScratchSize ); +# endif + } + + bool operator!=( AccelerationStructureBuildSizesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureBuildSizesInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize accelerationStructureSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureBuildSizesInfoKHR; + }; + + // wrapper struct for struct VkAccelerationStructureCaptureDescriptorDataInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureCaptureDescriptorDataInfoEXT.html + struct AccelerationStructureCaptureDescriptorDataInfoEXT + { + using NativeType = VkAccelerationStructureCaptureDescriptorDataInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureCaptureDescriptorDataInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureCaptureDescriptorDataInfoEXT( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructureNV_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructure{ accelerationStructure_ } + , accelerationStructureNV{ accelerationStructureNV_ } + { + } + + VULKAN_HPP_CONSTEXPR + AccelerationStructureCaptureDescriptorDataInfoEXT( AccelerationStructureCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureCaptureDescriptorDataInfoEXT( VkAccelerationStructureCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureCaptureDescriptorDataInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureCaptureDescriptorDataInfoEXT & + operator=( AccelerationStructureCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureCaptureDescriptorDataInfoEXT & operator=( VkAccelerationStructureCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCaptureDescriptorDataInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCaptureDescriptorDataInfoEXT & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCaptureDescriptorDataInfoEXT & + setAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructureNV_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureNV = accelerationStructureNV_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureCaptureDescriptorDataInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureCaptureDescriptorDataInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureCaptureDescriptorDataInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureCaptureDescriptorDataInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructure, accelerationStructureNV ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureCaptureDescriptorDataInfoEXT const & ) const = default; +#else + bool operator==( AccelerationStructureCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ) && + ( accelerationStructureNV == rhs.accelerationStructureNV ); +# endif + } + + bool operator!=( AccelerationStructureCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureCaptureDescriptorDataInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructureNV = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureCaptureDescriptorDataInfoEXT; + }; + + // wrapper struct for struct VkAccelerationStructureCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureCreateInfoKHR.html + struct AccelerationStructureCreateInfoKHR + { + using NativeType = VkAccelerationStructureCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoKHR( + VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel, + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , createFlags{ createFlags_ } + , buffer{ buffer_ } + , offset{ offset_ } + , size{ size_ } + , type{ type_ } + , deviceAddress{ deviceAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoKHR( AccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureCreateInfoKHR( VkAccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureCreateInfoKHR & operator=( AccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureCreateInfoKHR & operator=( VkAccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & + setCreateFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags_ ) VULKAN_HPP_NOEXCEPT + { + createFlags = createFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, createFlags, buffer, offset, size, type, deviceAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureCreateInfoKHR const & ) const = default; +#else + bool operator==( AccelerationStructureCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createFlags == rhs.createFlags ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && + ( size == rhs.size ) && ( type == rhs.type ) && ( deviceAddress == rhs.deviceAddress ); +# endif + } + + bool operator!=( AccelerationStructureCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type = VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel; + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureCreateInfoKHR; + }; + + // wrapper struct for struct VkGeometryTrianglesNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryTrianglesNV.html + struct GeometryTrianglesNV + { + using NativeType = VkGeometryTrianglesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryTrianglesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeometryTrianglesNV( VULKAN_HPP_NAMESPACE::Buffer vertexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset_ = {}, + uint32_t vertexCount_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {}, + VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Buffer indexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indexOffset_ = {}, + uint32_t indexCount_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, + VULKAN_HPP_NAMESPACE::Buffer transformData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize transformOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexData{ vertexData_ } + , vertexOffset{ vertexOffset_ } + , vertexCount{ vertexCount_ } + , vertexStride{ vertexStride_ } + , vertexFormat{ vertexFormat_ } + , indexData{ indexData_ } + , indexOffset{ indexOffset_ } + , indexCount{ indexCount_ } + , indexType{ indexType_ } + , transformData{ transformData_ } + , transformOffset{ transformOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR GeometryTrianglesNV( GeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeometryTrianglesNV( VkGeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryTrianglesNV( *reinterpret_cast( &rhs ) ) + { + } + + GeometryTrianglesNV & operator=( GeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeometryTrianglesNV & operator=( VkGeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexData( VULKAN_HPP_NAMESPACE::Buffer vertexData_ ) VULKAN_HPP_NOEXCEPT + { + vertexData = vertexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexOffset( VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset_ ) VULKAN_HPP_NOEXCEPT + { + vertexOffset = vertexOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexCount = vertexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexStride = vertexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT + { + vertexFormat = vertexFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexData( VULKAN_HPP_NAMESPACE::Buffer indexData_ ) VULKAN_HPP_NOEXCEPT + { + indexData = indexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize indexOffset_ ) VULKAN_HPP_NOEXCEPT + { + indexOffset = indexOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT + { + indexCount = indexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setTransformData( VULKAN_HPP_NAMESPACE::Buffer transformData_ ) VULKAN_HPP_NOEXCEPT + { + transformData = transformData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setTransformOffset( VULKAN_HPP_NAMESPACE::DeviceSize transformOffset_ ) VULKAN_HPP_NOEXCEPT + { + transformOffset = transformOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeometryTrianglesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryTrianglesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryTrianglesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeometryTrianglesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + vertexData, + vertexOffset, + vertexCount, + vertexStride, + vertexFormat, + indexData, + indexOffset, + indexCount, + indexType, + transformData, + transformOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeometryTrianglesNV const & ) const = default; +#else + bool operator==( GeometryTrianglesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexData == rhs.vertexData ) && ( vertexOffset == rhs.vertexOffset ) && + ( vertexCount == rhs.vertexCount ) && ( vertexStride == rhs.vertexStride ) && ( vertexFormat == rhs.vertexFormat ) && + ( indexData == rhs.indexData ) && ( indexOffset == rhs.indexOffset ) && ( indexCount == rhs.indexCount ) && ( indexType == rhs.indexType ) && + ( transformData == rhs.transformData ) && ( transformOffset == rhs.transformOffset ); +# endif + } + + bool operator!=( GeometryTrianglesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeometryTrianglesNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer vertexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset = {}; + uint32_t vertexCount = {}; + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride = {}; + VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Buffer indexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indexOffset = {}; + uint32_t indexCount = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + VULKAN_HPP_NAMESPACE::Buffer transformData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize transformOffset = {}; + }; + + template <> + struct CppType + { + using Type = GeometryTrianglesNV; + }; + + // wrapper struct for struct VkGeometryAABBNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryAABBNV.html + struct GeometryAABBNV + { + using NativeType = VkGeometryAABBNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryAabbNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeometryAABBNV( VULKAN_HPP_NAMESPACE::Buffer aabbData_ = {}, + uint32_t numAABBs_ = {}, + uint32_t stride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , aabbData{ aabbData_ } + , numAABBs{ numAABBs_ } + , stride{ stride_ } + , offset{ offset_ } + { + } + + VULKAN_HPP_CONSTEXPR GeometryAABBNV( GeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeometryAABBNV( VkGeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryAABBNV( *reinterpret_cast( &rhs ) ) {} + + GeometryAABBNV & operator=( GeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeometryAABBNV & operator=( VkGeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setAabbData( VULKAN_HPP_NAMESPACE::Buffer aabbData_ ) VULKAN_HPP_NOEXCEPT + { + aabbData = aabbData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setNumAABBs( uint32_t numAABBs_ ) VULKAN_HPP_NOEXCEPT + { + numAABBs = numAABBs_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeometryAABBNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryAABBNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryAABBNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeometryAABBNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, aabbData, numAABBs, stride, offset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeometryAABBNV const & ) const = default; +#else + bool operator==( GeometryAABBNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( aabbData == rhs.aabbData ) && ( numAABBs == rhs.numAABBs ) && ( stride == rhs.stride ) && + ( offset == rhs.offset ); +# endif + } + + bool operator!=( GeometryAABBNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeometryAabbNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer aabbData = {}; + uint32_t numAABBs = {}; + uint32_t stride = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + }; + + template <> + struct CppType + { + using Type = GeometryAABBNV; + }; + + // wrapper struct for struct VkGeometryDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryDataNV.html + struct GeometryDataNV + { + using NativeType = VkGeometryDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeometryDataNV( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV triangles_ = {}, + VULKAN_HPP_NAMESPACE::GeometryAABBNV aabbs_ = {} ) VULKAN_HPP_NOEXCEPT + : triangles{ triangles_ } + , aabbs{ aabbs_ } + { + } + + VULKAN_HPP_CONSTEXPR GeometryDataNV( GeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeometryDataNV( VkGeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryDataNV( *reinterpret_cast( &rhs ) ) {} + + GeometryDataNV & operator=( GeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeometryDataNV & operator=( VkGeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeometryDataNV & setTriangles( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & triangles_ ) VULKAN_HPP_NOEXCEPT + { + triangles = triangles_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryDataNV & setAabbs( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & aabbs_ ) VULKAN_HPP_NOEXCEPT + { + aabbs = aabbs_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeometryDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeometryDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( triangles, aabbs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeometryDataNV const & ) const = default; +#else + bool operator==( GeometryDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( triangles == rhs.triangles ) && ( aabbs == rhs.aabbs ); +# endif + } + + bool operator!=( GeometryDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::GeometryTrianglesNV triangles = {}; + VULKAN_HPP_NAMESPACE::GeometryAABBNV aabbs = {}; + }; + + // wrapper struct for struct VkGeometryNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeometryNV.html + struct GeometryNV + { + using NativeType = VkGeometryNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeometryNV( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles, + VULKAN_HPP_NAMESPACE::GeometryDataNV geometry_ = {}, + VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , geometryType{ geometryType_ } + , geometry{ geometry_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR GeometryNV( GeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeometryNV( VkGeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT : GeometryNV( *reinterpret_cast( &rhs ) ) {} + + GeometryNV & operator=( GeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeometryNV & operator=( VkGeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeometryNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryNV & setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT + { + geometryType = geometryType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryNV & setGeometry( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometry_ ) VULKAN_HPP_NOEXCEPT + { + geometry = geometry_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeometryNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeometryNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeometryNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeometryNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, geometryType, geometry, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeometryNV const & ) const = default; +#else + bool operator==( GeometryNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( geometryType == rhs.geometryType ) && ( geometry == rhs.geometry ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( GeometryNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeometryNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles; + VULKAN_HPP_NAMESPACE::GeometryDataNV geometry = {}; + VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags = {}; + }; + + template <> + struct CppType + { + using Type = GeometryNV; + }; + + // wrapper struct for struct VkAccelerationStructureInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureInfoNV.html + struct AccelerationStructureInfoNV + { + using NativeType = VkAccelerationStructureInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_ = {}, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_ = {}, + uint32_t instanceCount_ = {}, + uint32_t geometryCount_ = {}, + const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , flags{ flags_ } + , instanceCount{ instanceCount_ } + , geometryCount{ geometryCount_ } + , pGeometries{ pGeometries_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureInfoNV( AccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureInfoNV( VkAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_, + uint32_t instanceCount_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , type( type_ ) + , flags( flags_ ) + , instanceCount( instanceCount_ ) + , geometryCount( static_cast( geometries_.size() ) ) + , pGeometries( geometries_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + AccelerationStructureInfoNV & operator=( AccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureInfoNV & operator=( VkAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT + { + instanceCount = instanceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT + { + geometryCount = geometryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setPGeometries( const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries_ ) VULKAN_HPP_NOEXCEPT + { + pGeometries = pGeometries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureInfoNV & + setGeometries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & geometries_ ) VULKAN_HPP_NOEXCEPT + { + geometryCount = static_cast( geometries_.size() ); + pGeometries = geometries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, flags, instanceCount, geometryCount, pGeometries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureInfoNV const & ) const = default; +#else + bool operator==( AccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( flags == rhs.flags ) && ( instanceCount == rhs.instanceCount ) && + ( geometryCount == rhs.geometryCount ) && ( pGeometries == rhs.pGeometries ); +# endif + } + + bool operator!=( AccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type = {}; + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags = {}; + uint32_t instanceCount = {}; + uint32_t geometryCount = {}; + const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureInfoNV; + }; + + // wrapper struct for struct VkAccelerationStructureCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureCreateInfoNV.html + struct AccelerationStructureCreateInfoNV + { + using NativeType = VkAccelerationStructureCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoNV( VULKAN_HPP_NAMESPACE::DeviceSize compactedSize_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV info_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , compactedSize{ compactedSize_ } + , info{ info_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureCreateInfoNV( AccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureCreateInfoNV( VkAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureCreateInfoNV & operator=( AccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureCreateInfoNV & operator=( VkAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setCompactedSize( VULKAN_HPP_NAMESPACE::DeviceSize compactedSize_ ) VULKAN_HPP_NOEXCEPT + { + compactedSize = compactedSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setInfo( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const & info_ ) VULKAN_HPP_NOEXCEPT + { + info = info_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, compactedSize, info ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureCreateInfoNV const & ) const = default; +#else + bool operator==( AccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compactedSize == rhs.compactedSize ) && ( info == rhs.info ); +# endif + } + + bool operator!=( AccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize compactedSize = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV info = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureCreateInfoNV; + }; + + // wrapper struct for struct VkAccelerationStructureDeviceAddressInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureDeviceAddressInfoKHR.html + struct AccelerationStructureDeviceAddressInfoKHR + { + using NativeType = VkAccelerationStructureDeviceAddressInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureDeviceAddressInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureDeviceAddressInfoKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructure{ accelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureDeviceAddressInfoKHR( AccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureDeviceAddressInfoKHR( VkAccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureDeviceAddressInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureDeviceAddressInfoKHR & operator=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureDeviceAddressInfoKHR & operator=( VkAccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureDeviceAddressInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureDeviceAddressInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureDeviceAddressInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureDeviceAddressInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureDeviceAddressInfoKHR const & ) const = default; +#else + bool operator==( AccelerationStructureDeviceAddressInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ); +# endif + } + + bool operator!=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureDeviceAddressInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureDeviceAddressInfoKHR; + }; + + // wrapper struct for struct VkAccelerationStructureGeometryLinearSweptSpheresDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometryLinearSweptSpheresDataNV.html + struct AccelerationStructureGeometryLinearSweptSpheresDataNV + { + using NativeType = VkAccelerationStructureGeometryLinearSweptSpheresDataNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryLinearSweptSpheresDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV( + VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {}, + VULKAN_HPP_NAMESPACE::Format radiusFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR radiusData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize radiusStride_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ = {}, + VULKAN_HPP_NAMESPACE::RayTracingLssIndexingModeNV indexingMode_ = VULKAN_HPP_NAMESPACE::RayTracingLssIndexingModeNV::eList, + VULKAN_HPP_NAMESPACE::RayTracingLssPrimitiveEndCapsModeNV endCapsMode_ = VULKAN_HPP_NAMESPACE::RayTracingLssPrimitiveEndCapsModeNV::eNone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexFormat{ vertexFormat_ } + , vertexData{ vertexData_ } + , vertexStride{ vertexStride_ } + , radiusFormat{ radiusFormat_ } + , radiusData{ radiusData_ } + , radiusStride{ radiusStride_ } + , indexType{ indexType_ } + , indexData{ indexData_ } + , indexStride{ indexStride_ } + , indexingMode{ indexingMode_ } + , endCapsMode{ endCapsMode_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureGeometryLinearSweptSpheresDataNV( AccelerationStructureGeometryLinearSweptSpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometryLinearSweptSpheresDataNV( VkAccelerationStructureGeometryLinearSweptSpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometryLinearSweptSpheresDataNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometryLinearSweptSpheresDataNV & + operator=( AccelerationStructureGeometryLinearSweptSpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometryLinearSweptSpheresDataNV & operator=( VkAccelerationStructureGeometryLinearSweptSpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT + { + vertexFormat = vertexFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT + { + vertexData = vertexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexStride = vertexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setRadiusFormat( VULKAN_HPP_NAMESPACE::Format radiusFormat_ ) VULKAN_HPP_NOEXCEPT + { + radiusFormat = radiusFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setRadiusData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & radiusData_ ) VULKAN_HPP_NOEXCEPT + { + radiusData = radiusData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setRadiusStride( VULKAN_HPP_NAMESPACE::DeviceSize radiusStride_ ) VULKAN_HPP_NOEXCEPT + { + radiusStride = radiusStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setIndexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexData_ ) VULKAN_HPP_NOEXCEPT + { + indexData = indexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setIndexStride( VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ ) VULKAN_HPP_NOEXCEPT + { + indexStride = indexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setIndexingMode( VULKAN_HPP_NAMESPACE::RayTracingLssIndexingModeNV indexingMode_ ) VULKAN_HPP_NOEXCEPT + { + indexingMode = indexingMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryLinearSweptSpheresDataNV & + setEndCapsMode( VULKAN_HPP_NAMESPACE::RayTracingLssPrimitiveEndCapsModeNV endCapsMode_ ) VULKAN_HPP_NOEXCEPT + { + endCapsMode = endCapsMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryLinearSweptSpheresDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryLinearSweptSpheresDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryLinearSweptSpheresDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryLinearSweptSpheresDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + vertexFormat, + vertexData, + vertexStride, + radiusFormat, + radiusData, + radiusStride, + indexType, + indexData, + indexStride, + indexingMode, + endCapsMode ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryLinearSweptSpheresDataNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride = {}; + VULKAN_HPP_NAMESPACE::Format radiusFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR radiusData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize radiusStride = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indexStride = {}; + VULKAN_HPP_NAMESPACE::RayTracingLssIndexingModeNV indexingMode = VULKAN_HPP_NAMESPACE::RayTracingLssIndexingModeNV::eList; + VULKAN_HPP_NAMESPACE::RayTracingLssPrimitiveEndCapsModeNV endCapsMode = VULKAN_HPP_NAMESPACE::RayTracingLssPrimitiveEndCapsModeNV::eNone; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometryLinearSweptSpheresDataNV; + }; + + // wrapper struct for struct VkAccelerationStructureGeometryMotionTrianglesDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometryMotionTrianglesDataNV.html + struct AccelerationStructureGeometryMotionTrianglesDataNV + { + using NativeType = VkAccelerationStructureGeometryMotionTrianglesDataNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexData{ vertexData_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureGeometryMotionTrianglesDataNV( AccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometryMotionTrianglesDataNV( VkAccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometryMotionTrianglesDataNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometryMotionTrianglesDataNV & + operator=( AccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometryMotionTrianglesDataNV & operator=( VkAccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV & + setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT + { + vertexData = vertexData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometryMotionTrianglesDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryMotionTrianglesDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryMotionTrianglesDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometryMotionTrianglesDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexData ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometryMotionTrianglesDataNV; + }; + + // wrapper struct for struct VkAccelerationStructureGeometrySpheresDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureGeometrySpheresDataNV.html + struct AccelerationStructureGeometrySpheresDataNV + { + using NativeType = VkAccelerationStructureGeometrySpheresDataNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometrySpheresDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV( VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {}, + VULKAN_HPP_NAMESPACE::Format radiusFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR radiusData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize radiusStride_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexFormat{ vertexFormat_ } + , vertexData{ vertexData_ } + , vertexStride{ vertexStride_ } + , radiusFormat{ radiusFormat_ } + , radiusData{ radiusData_ } + , radiusStride{ radiusStride_ } + , indexType{ indexType_ } + , indexData{ indexData_ } + , indexStride{ indexStride_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV( AccelerationStructureGeometrySpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureGeometrySpheresDataNV( VkAccelerationStructureGeometrySpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureGeometrySpheresDataNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureGeometrySpheresDataNV & operator=( AccelerationStructureGeometrySpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureGeometrySpheresDataNV & operator=( VkAccelerationStructureGeometrySpheresDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT + { + vertexFormat = vertexFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & + setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT + { + vertexData = vertexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexStride = vertexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setRadiusFormat( VULKAN_HPP_NAMESPACE::Format radiusFormat_ ) VULKAN_HPP_NOEXCEPT + { + radiusFormat = radiusFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & + setRadiusData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & radiusData_ ) VULKAN_HPP_NOEXCEPT + { + radiusData = radiusData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setRadiusStride( VULKAN_HPP_NAMESPACE::DeviceSize radiusStride_ ) VULKAN_HPP_NOEXCEPT + { + radiusStride = radiusStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & + setIndexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexData_ ) VULKAN_HPP_NOEXCEPT + { + indexData = indexData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometrySpheresDataNV & setIndexStride( VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ ) VULKAN_HPP_NOEXCEPT + { + indexStride = indexStride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureGeometrySpheresDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometrySpheresDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometrySpheresDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureGeometrySpheresDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexFormat, vertexData, vertexStride, radiusFormat, radiusData, radiusStride, indexType, indexData, indexStride ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometrySpheresDataNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize vertexStride = {}; + VULKAN_HPP_NAMESPACE::Format radiusFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR radiusData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize radiusStride = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indexStride = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureGeometrySpheresDataNV; + }; + + // wrapper struct for struct VkTransformMatrixKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTransformMatrixKHR.html + struct TransformMatrixKHR + { + using NativeType = VkTransformMatrixKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR( std::array, 3> const & matrix_ = {} ) VULKAN_HPP_NOEXCEPT : matrix{ matrix_ } {} + + VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR( TransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TransformMatrixKHR( VkTransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT : TransformMatrixKHR( *reinterpret_cast( &rhs ) ) {} + + TransformMatrixKHR & operator=( TransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TransformMatrixKHR & operator=( VkTransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR & setMatrix( std::array, 3> matrix_ ) VULKAN_HPP_NOEXCEPT + { + matrix = matrix_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTransformMatrixKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTransformMatrixKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTransformMatrixKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTransformMatrixKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( matrix ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TransformMatrixKHR const & ) const = default; +#else + bool operator==( TransformMatrixKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( matrix == rhs.matrix ); +# endif + } + + bool operator!=( TransformMatrixKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper2D matrix = {}; + }; + + using TransformMatrixNV = TransformMatrixKHR; + + // wrapper struct for struct VkAccelerationStructureInstanceKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureInstanceKHR.html + struct AccelerationStructureInstanceKHR + { + using NativeType = VkAccelerationStructureInstanceKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform_ = {}, + uint32_t instanceCustomIndex_ = {}, + uint32_t mask_ = {}, + uint32_t instanceShaderBindingTableRecordOffset_ = {}, + VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ = {}, + uint64_t accelerationStructureReference_ = {} ) VULKAN_HPP_NOEXCEPT + : transform{ transform_ } + , instanceCustomIndex{ instanceCustomIndex_ } + , mask{ mask_ } + , instanceShaderBindingTableRecordOffset{ instanceShaderBindingTableRecordOffset_ } + , flags{ flags_ } + , accelerationStructureReference{ accelerationStructureReference_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR( AccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureInstanceKHR( VkAccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureInstanceKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureInstanceKHR & operator=( AccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureInstanceKHR & operator=( VkAccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setTransform( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transform_ ) VULKAN_HPP_NOEXCEPT + { + transform = transform_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceCustomIndex = instanceCustomIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT + { + mask = mask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & + setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT + { + instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_; + return *this; + } + + AccelerationStructureInstanceKHR & setFlags( VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = *reinterpret_cast( &flags_ ); + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureReference = accelerationStructureReference_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureInstanceKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureInstanceKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureInstanceKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureInstanceKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( transform, instanceCustomIndex, mask, instanceShaderBindingTableRecordOffset, flags, accelerationStructureReference ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureInstanceKHR const & ) const = default; +#else + bool operator==( AccelerationStructureInstanceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( transform == rhs.transform ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) && ( mask == rhs.mask ) && + ( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) && ( flags == rhs.flags ) && + ( accelerationStructureReference == rhs.accelerationStructureReference ); +# endif + } + + bool operator!=( AccelerationStructureInstanceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform = {}; + uint32_t instanceCustomIndex : 24; + uint32_t mask : 8; + uint32_t instanceShaderBindingTableRecordOffset : 24; + VkGeometryInstanceFlagsKHR flags : 8; + uint64_t accelerationStructureReference = {}; + }; + + using AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR; + + // wrapper struct for struct VkAccelerationStructureMatrixMotionInstanceNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMatrixMotionInstanceNV.html + struct AccelerationStructureMatrixMotionInstanceNV + { + using NativeType = VkAccelerationStructureMatrixMotionInstanceNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT0_ = {}, + VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT1_ = {}, + uint32_t instanceCustomIndex_ = {}, + uint32_t mask_ = {}, + uint32_t instanceShaderBindingTableRecordOffset_ = {}, + VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ = {}, + uint64_t accelerationStructureReference_ = {} ) VULKAN_HPP_NOEXCEPT + : transformT0{ transformT0_ } + , transformT1{ transformT1_ } + , instanceCustomIndex{ instanceCustomIndex_ } + , mask{ mask_ } + , instanceShaderBindingTableRecordOffset{ instanceShaderBindingTableRecordOffset_ } + , flags{ flags_ } + , accelerationStructureReference{ accelerationStructureReference_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureMatrixMotionInstanceNV( AccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureMatrixMotionInstanceNV( VkAccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureMatrixMotionInstanceNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureMatrixMotionInstanceNV & operator=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureMatrixMotionInstanceNV & operator=( VkAccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & + setTransformT0( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformT0_ ) VULKAN_HPP_NOEXCEPT + { + transformT0 = transformT0_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & + setTransformT1( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformT1_ ) VULKAN_HPP_NOEXCEPT + { + transformT1 = transformT1_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceCustomIndex = instanceCustomIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT + { + mask = mask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & + setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT + { + instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_; + return *this; + } + + AccelerationStructureMatrixMotionInstanceNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = *reinterpret_cast( &flags_ ); + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & + setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureReference = accelerationStructureReference_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureMatrixMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMatrixMotionInstanceNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMatrixMotionInstanceNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureMatrixMotionInstanceNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( transformT0, transformT1, instanceCustomIndex, mask, instanceShaderBindingTableRecordOffset, flags, accelerationStructureReference ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureMatrixMotionInstanceNV const & ) const = default; +#else + bool operator==( AccelerationStructureMatrixMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( transformT0 == rhs.transformT0 ) && ( transformT1 == rhs.transformT1 ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) && + ( mask == rhs.mask ) && ( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) && ( flags == rhs.flags ) && + ( accelerationStructureReference == rhs.accelerationStructureReference ); +# endif + } + + bool operator!=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT0 = {}; + VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT1 = {}; + uint32_t instanceCustomIndex : 24; + uint32_t mask : 8; + uint32_t instanceShaderBindingTableRecordOffset : 24; + VkGeometryInstanceFlagsKHR flags : 8; + uint64_t accelerationStructureReference = {}; + }; + + // wrapper struct for struct VkAccelerationStructureMemoryRequirementsInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMemoryRequirementsInfoNV.html + struct AccelerationStructureMemoryRequirementsInfoNV + { + using NativeType = VkAccelerationStructureMemoryRequirementsInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureMemoryRequirementsInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureMemoryRequirementsInfoNV( + VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV::eObject, + VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , accelerationStructure{ accelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR + AccelerationStructureMemoryRequirementsInfoNV( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureMemoryRequirementsInfoNV( VkAccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureMemoryRequirementsInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureMemoryRequirementsInfoNV & operator=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureMemoryRequirementsInfoNV & operator=( VkAccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & + setType( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMemoryRequirementsInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureMemoryRequirementsInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, accelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureMemoryRequirementsInfoNV const & ) const = default; +#else + bool operator==( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( accelerationStructure == rhs.accelerationStructure ); +# endif + } + + bool operator!=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureMemoryRequirementsInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type = VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV::eObject; + VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureMemoryRequirementsInfoNV; + }; + + // wrapper struct for struct VkAccelerationStructureMotionInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMotionInfoNV.html + struct AccelerationStructureMotionInfoNV + { + using NativeType = VkAccelerationStructureMotionInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureMotionInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureMotionInfoNV( uint32_t maxInstances_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxInstances{ maxInstances_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureMotionInfoNV( AccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureMotionInfoNV( VkAccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureMotionInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureMotionInfoNV & operator=( AccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureMotionInfoNV & operator=( VkAccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & setMaxInstances( uint32_t maxInstances_ ) VULKAN_HPP_NOEXCEPT + { + maxInstances = maxInstances_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & + setFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureMotionInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxInstances, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureMotionInfoNV const & ) const = default; +#else + bool operator==( AccelerationStructureMotionInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInstances == rhs.maxInstances ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( AccelerationStructureMotionInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureMotionInfoNV; + const void * pNext = {}; + uint32_t maxInstances = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureMotionInfoNV; + }; + + // wrapper struct for struct VkSRTDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSRTDataNV.html + struct SRTDataNV + { + using NativeType = VkSRTDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SRTDataNV( float sx_ = {}, + float a_ = {}, + float b_ = {}, + float pvx_ = {}, + float sy_ = {}, + float c_ = {}, + float pvy_ = {}, + float sz_ = {}, + float pvz_ = {}, + float qx_ = {}, + float qy_ = {}, + float qz_ = {}, + float qw_ = {}, + float tx_ = {}, + float ty_ = {}, + float tz_ = {} ) VULKAN_HPP_NOEXCEPT + : sx{ sx_ } + , a{ a_ } + , b{ b_ } + , pvx{ pvx_ } + , sy{ sy_ } + , c{ c_ } + , pvy{ pvy_ } + , sz{ sz_ } + , pvz{ pvz_ } + , qx{ qx_ } + , qy{ qy_ } + , qz{ qz_ } + , qw{ qw_ } + , tx{ tx_ } + , ty{ ty_ } + , tz{ tz_ } + { + } + + VULKAN_HPP_CONSTEXPR SRTDataNV( SRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SRTDataNV( VkSRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT : SRTDataNV( *reinterpret_cast( &rhs ) ) {} + + SRTDataNV & operator=( SRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SRTDataNV & operator=( VkSRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSx( float sx_ ) VULKAN_HPP_NOEXCEPT + { + sx = sx_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setA( float a_ ) VULKAN_HPP_NOEXCEPT + { + a = a_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setB( float b_ ) VULKAN_HPP_NOEXCEPT + { + b = b_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvx( float pvx_ ) VULKAN_HPP_NOEXCEPT + { + pvx = pvx_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSy( float sy_ ) VULKAN_HPP_NOEXCEPT + { + sy = sy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setC( float c_ ) VULKAN_HPP_NOEXCEPT + { + c = c_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvy( float pvy_ ) VULKAN_HPP_NOEXCEPT + { + pvy = pvy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSz( float sz_ ) VULKAN_HPP_NOEXCEPT + { + sz = sz_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvz( float pvz_ ) VULKAN_HPP_NOEXCEPT + { + pvz = pvz_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQx( float qx_ ) VULKAN_HPP_NOEXCEPT + { + qx = qx_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQy( float qy_ ) VULKAN_HPP_NOEXCEPT + { + qy = qy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQz( float qz_ ) VULKAN_HPP_NOEXCEPT + { + qz = qz_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQw( float qw_ ) VULKAN_HPP_NOEXCEPT + { + qw = qw_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTx( float tx_ ) VULKAN_HPP_NOEXCEPT + { + tx = tx_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTy( float ty_ ) VULKAN_HPP_NOEXCEPT + { + ty = ty_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTz( float tz_ ) VULKAN_HPP_NOEXCEPT + { + tz = tz_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSRTDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSRTDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSRTDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSRTDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sx, a, b, pvx, sy, c, pvy, sz, pvz, qx, qy, qz, qw, tx, ty, tz ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SRTDataNV const & ) const = default; +#else + bool operator==( SRTDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sx == rhs.sx ) && ( a == rhs.a ) && ( b == rhs.b ) && ( pvx == rhs.pvx ) && ( sy == rhs.sy ) && ( c == rhs.c ) && ( pvy == rhs.pvy ) && + ( sz == rhs.sz ) && ( pvz == rhs.pvz ) && ( qx == rhs.qx ) && ( qy == rhs.qy ) && ( qz == rhs.qz ) && ( qw == rhs.qw ) && ( tx == rhs.tx ) && + ( ty == rhs.ty ) && ( tz == rhs.tz ); +# endif + } + + bool operator!=( SRTDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float sx = {}; + float a = {}; + float b = {}; + float pvx = {}; + float sy = {}; + float c = {}; + float pvy = {}; + float sz = {}; + float pvz = {}; + float qx = {}; + float qy = {}; + float qz = {}; + float qw = {}; + float tx = {}; + float ty = {}; + float tz = {}; + }; + + // wrapper struct for struct VkAccelerationStructureSRTMotionInstanceNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureSRTMotionInstanceNV.html + struct AccelerationStructureSRTMotionInstanceNV + { + using NativeType = VkAccelerationStructureSRTMotionInstanceNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureSRTMotionInstanceNV( VULKAN_HPP_NAMESPACE::SRTDataNV transformT0_ = {}, + VULKAN_HPP_NAMESPACE::SRTDataNV transformT1_ = {}, + uint32_t instanceCustomIndex_ = {}, + uint32_t mask_ = {}, + uint32_t instanceShaderBindingTableRecordOffset_ = {}, + VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ = {}, + uint64_t accelerationStructureReference_ = {} ) VULKAN_HPP_NOEXCEPT + : transformT0{ transformT0_ } + , transformT1{ transformT1_ } + , instanceCustomIndex{ instanceCustomIndex_ } + , mask{ mask_ } + , instanceShaderBindingTableRecordOffset{ instanceShaderBindingTableRecordOffset_ } + , flags{ flags_ } + , accelerationStructureReference{ accelerationStructureReference_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureSRTMotionInstanceNV( AccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureSRTMotionInstanceNV( VkAccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureSRTMotionInstanceNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureSRTMotionInstanceNV & operator=( AccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureSRTMotionInstanceNV & operator=( VkAccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & + setTransformT0( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT0_ ) VULKAN_HPP_NOEXCEPT + { + transformT0 = transformT0_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & + setTransformT1( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT1_ ) VULKAN_HPP_NOEXCEPT + { + transformT1 = transformT1_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceCustomIndex = instanceCustomIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT + { + mask = mask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & + setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT + { + instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_; + return *this; + } + + AccelerationStructureSRTMotionInstanceNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryInstanceFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = *reinterpret_cast( &flags_ ); + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & + setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureReference = accelerationStructureReference_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureSRTMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureSRTMotionInstanceNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureSRTMotionInstanceNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureSRTMotionInstanceNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( transformT0, transformT1, instanceCustomIndex, mask, instanceShaderBindingTableRecordOffset, flags, accelerationStructureReference ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureSRTMotionInstanceNV const & ) const = default; +#else + bool operator==( AccelerationStructureSRTMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( transformT0 == rhs.transformT0 ) && ( transformT1 == rhs.transformT1 ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) && + ( mask == rhs.mask ) && ( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) && ( flags == rhs.flags ) && + ( accelerationStructureReference == rhs.accelerationStructureReference ); +# endif + } + + bool operator!=( AccelerationStructureSRTMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::SRTDataNV transformT0 = {}; + VULKAN_HPP_NAMESPACE::SRTDataNV transformT1 = {}; + uint32_t instanceCustomIndex : 24; + uint32_t mask : 8; + uint32_t instanceShaderBindingTableRecordOffset : 24; + VkGeometryInstanceFlagsKHR flags : 8; + uint64_t accelerationStructureReference = {}; + }; + + union AccelerationStructureMotionInstanceDataNV + { + using NativeType = VkAccelerationStructureMotionInstanceDataNV; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR staticInstance_ = {} ) + : staticInstance( staticInstance_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV matrixMotionInstance_ ) + : matrixMotionInstance( matrixMotionInstance_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV srtMotionInstance_ ) + : srtMotionInstance( srtMotionInstance_ ) + { + } +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & + setStaticInstance( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR const & staticInstance_ ) VULKAN_HPP_NOEXCEPT + { + staticInstance = staticInstance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & + setMatrixMotionInstance( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV const & matrixMotionInstance_ ) VULKAN_HPP_NOEXCEPT + { + matrixMotionInstance = matrixMotionInstance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & + setSrtMotionInstance( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV const & srtMotionInstance_ ) VULKAN_HPP_NOEXCEPT + { + srtMotionInstance = srtMotionInstance_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureMotionInstanceDataNV const &() const + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInstanceDataNV &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR staticInstance; + VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; + VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV srtMotionInstance; +#else + VkAccelerationStructureInstanceKHR staticInstance; + VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance; + VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkAccelerationStructureMotionInstanceNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureMotionInstanceNV.html + struct AccelerationStructureMotionInstanceNV + { + using NativeType = VkAccelerationStructureMotionInstanceNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV( + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ = VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic, + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data_ = {} ) VULKAN_HPP_NOEXCEPT + : type{ type_ } + , flags{ flags_ } + , data{ data_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV( AccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureMotionInstanceNV( VkAccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureMotionInstanceNV( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureMotionInstanceNV & operator=( AccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureMotionInstanceNV & operator=( VkAccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV & + setType( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV & + setFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV & + setData( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV const & data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInstanceNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInstanceNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureMotionInstanceNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( type, flags, data ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type = VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic; + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data = {}; + }; + + // wrapper struct for struct VkMicromapUsageEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapUsageEXT.html + struct MicromapUsageEXT + { + using NativeType = VkMicromapUsageEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MicromapUsageEXT( uint32_t count_ = {}, uint32_t subdivisionLevel_ = {}, uint32_t format_ = {} ) VULKAN_HPP_NOEXCEPT + : count{ count_ } + , subdivisionLevel{ subdivisionLevel_ } + , format{ format_ } + { + } + + VULKAN_HPP_CONSTEXPR MicromapUsageEXT( MicromapUsageEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MicromapUsageEXT( VkMicromapUsageEXT const & rhs ) VULKAN_HPP_NOEXCEPT : MicromapUsageEXT( *reinterpret_cast( &rhs ) ) {} + + MicromapUsageEXT & operator=( MicromapUsageEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MicromapUsageEXT & operator=( VkMicromapUsageEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MicromapUsageEXT & setCount( uint32_t count_ ) VULKAN_HPP_NOEXCEPT + { + count = count_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapUsageEXT & setSubdivisionLevel( uint32_t subdivisionLevel_ ) VULKAN_HPP_NOEXCEPT + { + subdivisionLevel = subdivisionLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapUsageEXT & setFormat( uint32_t format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMicromapUsageEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapUsageEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapUsageEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMicromapUsageEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( count, subdivisionLevel, format ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MicromapUsageEXT const & ) const = default; +#else + bool operator==( MicromapUsageEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( count == rhs.count ) && ( subdivisionLevel == rhs.subdivisionLevel ) && ( format == rhs.format ); +# endif + } + + bool operator!=( MicromapUsageEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t count = {}; + uint32_t subdivisionLevel = {}; + uint32_t format = {}; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkAccelerationStructureTrianglesDisplacementMicromapNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureTrianglesDisplacementMicromapNV.html + struct AccelerationStructureTrianglesDisplacementMicromapNV + { + using NativeType = VkAccelerationStructureTrianglesDisplacementMicromapNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureTrianglesDisplacementMicromapNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV( + VULKAN_HPP_NAMESPACE::Format displacementBiasAndScaleFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format displacementVectorFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize displacementBiasAndScaleStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacementVectorBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize displacementVectorStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize displacedMicromapPrimitiveFlagsStride_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ = {}, + uint32_t baseTriangle_ = {}, + uint32_t usageCountsCount_ = {}, + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts_ = {}, + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts_ = {}, + VULKAN_HPP_NAMESPACE::MicromapEXT micromap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displacementBiasAndScaleFormat{ displacementBiasAndScaleFormat_ } + , displacementVectorFormat{ displacementVectorFormat_ } + , displacementBiasAndScaleBuffer{ displacementBiasAndScaleBuffer_ } + , displacementBiasAndScaleStride{ displacementBiasAndScaleStride_ } + , displacementVectorBuffer{ displacementVectorBuffer_ } + , displacementVectorStride{ displacementVectorStride_ } + , displacedMicromapPrimitiveFlags{ displacedMicromapPrimitiveFlags_ } + , displacedMicromapPrimitiveFlagsStride{ displacedMicromapPrimitiveFlagsStride_ } + , indexType{ indexType_ } + , indexBuffer{ indexBuffer_ } + , indexStride{ indexStride_ } + , baseTriangle{ baseTriangle_ } + , usageCountsCount{ usageCountsCount_ } + , pUsageCounts{ pUsageCounts_ } + , ppUsageCounts{ ppUsageCounts_ } + , micromap{ micromap_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureTrianglesDisplacementMicromapNV( AccelerationStructureTrianglesDisplacementMicromapNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureTrianglesDisplacementMicromapNV( VkAccelerationStructureTrianglesDisplacementMicromapNV const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureTrianglesDisplacementMicromapNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureTrianglesDisplacementMicromapNV( + VULKAN_HPP_NAMESPACE::Format displacementBiasAndScaleFormat_, + VULKAN_HPP_NAMESPACE::Format displacementVectorFormat_, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer_, + VULKAN_HPP_NAMESPACE::DeviceSize displacementBiasAndScaleStride_, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacementVectorBuffer_, + VULKAN_HPP_NAMESPACE::DeviceSize displacementVectorStride_, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags_, + VULKAN_HPP_NAMESPACE::DeviceSize displacedMicromapPrimitiveFlagsStride_, + VULKAN_HPP_NAMESPACE::IndexType indexType_, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexBuffer_, + VULKAN_HPP_NAMESPACE::DeviceSize indexStride_, + uint32_t baseTriangle_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & usageCounts_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pUsageCounts_ = {}, + VULKAN_HPP_NAMESPACE::MicromapEXT micromap_ = {}, + void * pNext_ = nullptr ) + : pNext( pNext_ ) + , displacementBiasAndScaleFormat( displacementBiasAndScaleFormat_ ) + , displacementVectorFormat( displacementVectorFormat_ ) + , displacementBiasAndScaleBuffer( displacementBiasAndScaleBuffer_ ) + , displacementBiasAndScaleStride( displacementBiasAndScaleStride_ ) + , displacementVectorBuffer( displacementVectorBuffer_ ) + , displacementVectorStride( displacementVectorStride_ ) + , displacedMicromapPrimitiveFlags( displacedMicromapPrimitiveFlags_ ) + , displacedMicromapPrimitiveFlagsStride( displacedMicromapPrimitiveFlagsStride_ ) + , indexType( indexType_ ) + , indexBuffer( indexBuffer_ ) + , indexStride( indexStride_ ) + , baseTriangle( baseTriangle_ ) + , usageCountsCount( static_cast( usageCounts_.size() ) ) + , pUsageCounts( usageCounts_.data() ) + , ppUsageCounts( pUsageCounts_.data() ) + , micromap( micromap_ ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( usageCounts_.empty() || pUsageCounts_.empty() || ( usageCounts_.size() == pUsageCounts_.size() ) ); +# else + if ( !usageCounts_.empty() && !pUsageCounts_.empty() && ( usageCounts_.size() != pUsageCounts_.size() ) ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::AccelerationStructureTrianglesDisplacementMicromapNV::AccelerationStructureTrianglesDisplacementMicromapNV: !usageCounts_.empty() && !pUsageCounts_.empty() && ( usageCounts_.size() != pUsageCounts_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + AccelerationStructureTrianglesDisplacementMicromapNV & + operator=( AccelerationStructureTrianglesDisplacementMicromapNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureTrianglesDisplacementMicromapNV & operator=( VkAccelerationStructureTrianglesDisplacementMicromapNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacementBiasAndScaleFormat( VULKAN_HPP_NAMESPACE::Format displacementBiasAndScaleFormat_ ) VULKAN_HPP_NOEXCEPT + { + displacementBiasAndScaleFormat = displacementBiasAndScaleFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacementVectorFormat( VULKAN_HPP_NAMESPACE::Format displacementVectorFormat_ ) VULKAN_HPP_NOEXCEPT + { + displacementVectorFormat = displacementVectorFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacementBiasAndScaleBuffer( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & displacementBiasAndScaleBuffer_ ) VULKAN_HPP_NOEXCEPT + { + displacementBiasAndScaleBuffer = displacementBiasAndScaleBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacementBiasAndScaleStride( VULKAN_HPP_NAMESPACE::DeviceSize displacementBiasAndScaleStride_ ) VULKAN_HPP_NOEXCEPT + { + displacementBiasAndScaleStride = displacementBiasAndScaleStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacementVectorBuffer( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & displacementVectorBuffer_ ) VULKAN_HPP_NOEXCEPT + { + displacementVectorBuffer = displacementVectorBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacementVectorStride( VULKAN_HPP_NAMESPACE::DeviceSize displacementVectorStride_ ) VULKAN_HPP_NOEXCEPT + { + displacementVectorStride = displacementVectorStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacedMicromapPrimitiveFlags( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & displacedMicromapPrimitiveFlags_ ) VULKAN_HPP_NOEXCEPT + { + displacedMicromapPrimitiveFlags = displacedMicromapPrimitiveFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setDisplacedMicromapPrimitiveFlagsStride( VULKAN_HPP_NAMESPACE::DeviceSize displacedMicromapPrimitiveFlagsStride_ ) VULKAN_HPP_NOEXCEPT + { + displacedMicromapPrimitiveFlagsStride = displacedMicromapPrimitiveFlagsStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setIndexBuffer( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + indexBuffer = indexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setIndexStride( VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ ) VULKAN_HPP_NOEXCEPT + { + indexStride = indexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & setBaseTriangle( uint32_t baseTriangle_ ) VULKAN_HPP_NOEXCEPT + { + baseTriangle = baseTriangle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & setUsageCountsCount( uint32_t usageCountsCount_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = usageCountsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setPUsageCounts( const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + pUsageCounts = pUsageCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureTrianglesDisplacementMicromapNV & + setUsageCounts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & usageCounts_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = static_cast( usageCounts_.size() ); + pUsageCounts = usageCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setPpUsageCounts( const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + ppUsageCounts = ppUsageCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureTrianglesDisplacementMicromapNV & setPUsageCounts( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = static_cast( pUsageCounts_.size() ); + ppUsageCounts = pUsageCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesDisplacementMicromapNV & + setMicromap( VULKAN_HPP_NAMESPACE::MicromapEXT micromap_ ) VULKAN_HPP_NOEXCEPT + { + micromap = micromap_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureTrianglesDisplacementMicromapNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureTrianglesDisplacementMicromapNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureTrianglesDisplacementMicromapNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureTrianglesDisplacementMicromapNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + displacementBiasAndScaleFormat, + displacementVectorFormat, + displacementBiasAndScaleBuffer, + displacementBiasAndScaleStride, + displacementVectorBuffer, + displacementVectorStride, + displacedMicromapPrimitiveFlags, + displacedMicromapPrimitiveFlagsStride, + indexType, + indexBuffer, + indexStride, + baseTriangle, + usageCountsCount, + pUsageCounts, + ppUsageCounts, + micromap ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureTrianglesDisplacementMicromapNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format displacementBiasAndScaleFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Format displacementVectorFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize displacementBiasAndScaleStride = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacementVectorBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize displacementVectorStride = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags = {}; + VULKAN_HPP_NAMESPACE::DeviceSize displacedMicromapPrimitiveFlagsStride = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indexStride = {}; + uint32_t baseTriangle = {}; + uint32_t usageCountsCount = {}; + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts = {}; + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT micromap = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureTrianglesDisplacementMicromapNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkAccelerationStructureTrianglesOpacityMicromapEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureTrianglesOpacityMicromapEXT.html + struct AccelerationStructureTrianglesOpacityMicromapEXT + { + using NativeType = VkAccelerationStructureTrianglesOpacityMicromapEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureTrianglesOpacityMicromapEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureTrianglesOpacityMicromapEXT( VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ = {}, + uint32_t baseTriangle_ = {}, + uint32_t usageCountsCount_ = {}, + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts_ = {}, + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts_ = {}, + VULKAN_HPP_NAMESPACE::MicromapEXT micromap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , indexType{ indexType_ } + , indexBuffer{ indexBuffer_ } + , indexStride{ indexStride_ } + , baseTriangle{ baseTriangle_ } + , usageCountsCount{ usageCountsCount_ } + , pUsageCounts{ pUsageCounts_ } + , ppUsageCounts{ ppUsageCounts_ } + , micromap{ micromap_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + AccelerationStructureTrianglesOpacityMicromapEXT( AccelerationStructureTrianglesOpacityMicromapEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureTrianglesOpacityMicromapEXT( VkAccelerationStructureTrianglesOpacityMicromapEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureTrianglesOpacityMicromapEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureTrianglesOpacityMicromapEXT( + VULKAN_HPP_NAMESPACE::IndexType indexType_, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexBuffer_, + VULKAN_HPP_NAMESPACE::DeviceSize indexStride_, + uint32_t baseTriangle_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & usageCounts_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pUsageCounts_ = {}, + VULKAN_HPP_NAMESPACE::MicromapEXT micromap_ = {}, + void * pNext_ = nullptr ) + : pNext( pNext_ ) + , indexType( indexType_ ) + , indexBuffer( indexBuffer_ ) + , indexStride( indexStride_ ) + , baseTriangle( baseTriangle_ ) + , usageCountsCount( static_cast( !usageCounts_.empty() ? usageCounts_.size() : pUsageCounts_.size() ) ) + , pUsageCounts( usageCounts_.data() ) + , ppUsageCounts( pUsageCounts_.data() ) + , micromap( micromap_ ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( ( !usageCounts_.empty() + !pUsageCounts_.empty() ) <= 1 ); +# else + if ( 1 < ( !usageCounts_.empty() + !pUsageCounts_.empty() ) ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::AccelerationStructureTrianglesOpacityMicromapEXT::AccelerationStructureTrianglesOpacityMicromapEXT: 1 < ( !usageCounts_.empty() + !pUsageCounts_.empty() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + AccelerationStructureTrianglesOpacityMicromapEXT & operator=( AccelerationStructureTrianglesOpacityMicromapEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureTrianglesOpacityMicromapEXT & operator=( VkAccelerationStructureTrianglesOpacityMicromapEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & + setIndexBuffer( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + indexBuffer = indexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & + setIndexStride( VULKAN_HPP_NAMESPACE::DeviceSize indexStride_ ) VULKAN_HPP_NOEXCEPT + { + indexStride = indexStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & setBaseTriangle( uint32_t baseTriangle_ ) VULKAN_HPP_NOEXCEPT + { + baseTriangle = baseTriangle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & setUsageCountsCount( uint32_t usageCountsCount_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = usageCountsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & + setPUsageCounts( const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + pUsageCounts = pUsageCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureTrianglesOpacityMicromapEXT & + setUsageCounts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & usageCounts_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = static_cast( usageCounts_.size() ); + pUsageCounts = usageCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & + setPpUsageCounts( const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + ppUsageCounts = ppUsageCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AccelerationStructureTrianglesOpacityMicromapEXT & setPUsageCounts( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = static_cast( pUsageCounts_.size() ); + ppUsageCounts = pUsageCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureTrianglesOpacityMicromapEXT & setMicromap( VULKAN_HPP_NAMESPACE::MicromapEXT micromap_ ) VULKAN_HPP_NOEXCEPT + { + micromap = micromap_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureTrianglesOpacityMicromapEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureTrianglesOpacityMicromapEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureTrianglesOpacityMicromapEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureTrianglesOpacityMicromapEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, indexType, indexBuffer, indexStride, baseTriangle, usageCountsCount, pUsageCounts, ppUsageCounts, micromap ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureTrianglesOpacityMicromapEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indexStride = {}; + uint32_t baseTriangle = {}; + uint32_t usageCountsCount = {}; + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts = {}; + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT micromap = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureTrianglesOpacityMicromapEXT; + }; + + // wrapper struct for struct VkAccelerationStructureVersionInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAccelerationStructureVersionInfoKHR.html + struct AccelerationStructureVersionInfoKHR + { + using NativeType = VkAccelerationStructureVersionInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureVersionInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AccelerationStructureVersionInfoKHR( const uint8_t * pVersionData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pVersionData{ pVersionData_ } + { + } + + VULKAN_HPP_CONSTEXPR AccelerationStructureVersionInfoKHR( AccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AccelerationStructureVersionInfoKHR( VkAccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AccelerationStructureVersionInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AccelerationStructureVersionInfoKHR & operator=( AccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AccelerationStructureVersionInfoKHR & operator=( VkAccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR & setPVersionData( const uint8_t * pVersionData_ ) VULKAN_HPP_NOEXCEPT + { + pVersionData = pVersionData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAccelerationStructureVersionInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureVersionInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAccelerationStructureVersionInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAccelerationStructureVersionInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pVersionData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AccelerationStructureVersionInfoKHR const & ) const = default; +#else + bool operator==( AccelerationStructureVersionInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pVersionData == rhs.pVersionData ); +# endif + } + + bool operator!=( AccelerationStructureVersionInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureVersionInfoKHR; + const void * pNext = {}; + const uint8_t * pVersionData = {}; + }; + + template <> + struct CppType + { + using Type = AccelerationStructureVersionInfoKHR; + }; + + // wrapper struct for struct VkAcquireNextImageInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAcquireNextImageInfoKHR.html + struct AcquireNextImageInfoKHR + { + using NativeType = VkAcquireNextImageInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireNextImageInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AcquireNextImageInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, + uint64_t timeout_ = {}, + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::Fence fence_ = {}, + uint32_t deviceMask_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchain{ swapchain_ } + , timeout{ timeout_ } + , semaphore{ semaphore_ } + , fence{ fence_ } + , deviceMask{ deviceMask_ } + { + } + + VULKAN_HPP_CONSTEXPR AcquireNextImageInfoKHR( AcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AcquireNextImageInfoKHR( VkAcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AcquireNextImageInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AcquireNextImageInfoKHR & operator=( AcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AcquireNextImageInfoKHR & operator=( VkAcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT + { + swapchain = swapchain_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT + { + timeout = timeout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT + { + fence = fence_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT + { + deviceMask = deviceMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAcquireNextImageInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAcquireNextImageInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAcquireNextImageInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAcquireNextImageInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchain, timeout, semaphore, fence, deviceMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AcquireNextImageInfoKHR const & ) const = default; +#else + bool operator==( AcquireNextImageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) && ( timeout == rhs.timeout ) && + ( semaphore == rhs.semaphore ) && ( fence == rhs.fence ) && ( deviceMask == rhs.deviceMask ); +# endif + } + + bool operator!=( AcquireNextImageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAcquireNextImageInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; + uint64_t timeout = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::Fence fence = {}; + uint32_t deviceMask = {}; + }; + + template <> + struct CppType + { + using Type = AcquireNextImageInfoKHR; + }; + + // wrapper struct for struct VkAcquireProfilingLockInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAcquireProfilingLockInfoKHR.html + struct AcquireProfilingLockInfoKHR + { + using NativeType = VkAcquireProfilingLockInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireProfilingLockInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AcquireProfilingLockInfoKHR( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ = {}, + uint64_t timeout_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , timeout{ timeout_ } + { + } + + VULKAN_HPP_CONSTEXPR AcquireProfilingLockInfoKHR( AcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AcquireProfilingLockInfoKHR( VkAcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AcquireProfilingLockInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AcquireProfilingLockInfoKHR & operator=( AcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AcquireProfilingLockInfoKHR & operator=( VkAcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT + { + timeout = timeout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAcquireProfilingLockInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAcquireProfilingLockInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAcquireProfilingLockInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAcquireProfilingLockInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, timeout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AcquireProfilingLockInfoKHR const & ) const = default; +#else + bool operator==( AcquireProfilingLockInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( timeout == rhs.timeout ); +# endif + } + + bool operator!=( AcquireProfilingLockInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAcquireProfilingLockInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags = {}; + uint64_t timeout = {}; + }; + + template <> + struct CppType + { + using Type = AcquireProfilingLockInfoKHR; + }; + + typedef void *( VKAPI_PTR * PFN_AllocationFunction )( void * pUserData, + size_t size, + size_t alignment, + VULKAN_HPP_NAMESPACE::SystemAllocationScope allocationScope ); + + typedef void *( VKAPI_PTR * PFN_ReallocationFunction )( + void * pUserData, void * pOriginal, size_t size, size_t alignment, VULKAN_HPP_NAMESPACE::SystemAllocationScope allocationScope ); + + typedef void( VKAPI_PTR * PFN_FreeFunction )( void * pUserData, void * pMemory ); + + typedef void( VKAPI_PTR * PFN_InternalAllocationNotification )( void * pUserData, + size_t size, + VULKAN_HPP_NAMESPACE::InternalAllocationType allocationType, + VULKAN_HPP_NAMESPACE::SystemAllocationScope allocationScope ); + + typedef void( VKAPI_PTR * PFN_InternalFreeNotification )( void * pUserData, + size_t size, + VULKAN_HPP_NAMESPACE::InternalAllocationType allocationType, + VULKAN_HPP_NAMESPACE::SystemAllocationScope allocationScope ); + + // wrapper struct for struct VkAllocationCallbacks, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAllocationCallbacks.html + struct AllocationCallbacks + { + using NativeType = VkAllocationCallbacks; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AllocationCallbacks( void * pUserData_ = {}, + VULKAN_HPP_NAMESPACE::PFN_AllocationFunction pfnAllocation_ = {}, + VULKAN_HPP_NAMESPACE::PFN_ReallocationFunction pfnReallocation_ = {}, + VULKAN_HPP_NAMESPACE::PFN_FreeFunction pfnFree_ = {}, + VULKAN_HPP_NAMESPACE::PFN_InternalAllocationNotification pfnInternalAllocation_ = {}, + VULKAN_HPP_NAMESPACE::PFN_InternalFreeNotification pfnInternalFree_ = {} ) VULKAN_HPP_NOEXCEPT + : pUserData{ pUserData_ } + , pfnAllocation{ pfnAllocation_ } + , pfnReallocation{ pfnReallocation_ } + , pfnFree{ pfnFree_ } + , pfnInternalAllocation{ pfnInternalAllocation_ } + , pfnInternalFree{ pfnInternalFree_ } + { + } + + VULKAN_HPP_CONSTEXPR AllocationCallbacks( AllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AllocationCallbacks( VkAllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT : AllocationCallbacks( *reinterpret_cast( &rhs ) ) + { + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This constructor is deprecated. Use the one taking function pointer types from the vk-namespace instead." ) + + AllocationCallbacks( void * pUserData_, + PFN_vkAllocationFunction pfnAllocation_, + PFN_vkReallocationFunction pfnReallocation_ = {}, + PFN_vkFreeFunction pfnFree_ = {}, + PFN_vkInternalAllocationNotification pfnInternalAllocation_ = {}, + PFN_vkInternalFreeNotification pfnInternalFree_ = {} ) VULKAN_HPP_NOEXCEPT + : AllocationCallbacks( pUserData_, + reinterpret_cast( pfnAllocation_ ), + reinterpret_cast( pfnReallocation_ ), + reinterpret_cast( pfnFree_ ), + reinterpret_cast( pfnInternalAllocation_ ), + reinterpret_cast( pfnInternalFree_ ) ) + { + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif + + AllocationCallbacks & operator=( AllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AllocationCallbacks & operator=( VkAllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT + { + pUserData = pUserData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnAllocation( VULKAN_HPP_NAMESPACE::PFN_AllocationFunction pfnAllocation_ ) VULKAN_HPP_NOEXCEPT + { + pfnAllocation = pfnAllocation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnReallocation( VULKAN_HPP_NAMESPACE::PFN_ReallocationFunction pfnReallocation_ ) VULKAN_HPP_NOEXCEPT + { + pfnReallocation = pfnReallocation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnFree( VULKAN_HPP_NAMESPACE::PFN_FreeFunction pfnFree_ ) VULKAN_HPP_NOEXCEPT + { + pfnFree = pfnFree_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & + setPfnInternalAllocation( VULKAN_HPP_NAMESPACE::PFN_InternalAllocationNotification pfnInternalAllocation_ ) VULKAN_HPP_NOEXCEPT + { + pfnInternalAllocation = pfnInternalAllocation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnInternalFree( VULKAN_HPP_NAMESPACE::PFN_InternalFreeNotification pfnInternalFree_ ) VULKAN_HPP_NOEXCEPT + { + pfnInternalFree = pfnInternalFree_; + return *this; + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + AllocationCallbacks & setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnAllocation( reinterpret_cast( pfnAllocation_ ) ); + } + + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + AllocationCallbacks & setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnReallocation( reinterpret_cast( pfnReallocation_ ) ); + } + + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + AllocationCallbacks & setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnInternalAllocation( reinterpret_cast( pfnInternalAllocation_ ) ); + } + + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + AllocationCallbacks & setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnInternalFree( reinterpret_cast( pfnInternalFree_ ) ); + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAllocationCallbacks const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAllocationCallbacks &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAllocationCallbacks const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAllocationCallbacks *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( pUserData, pfnAllocation, pfnReallocation, pfnFree, pfnInternalAllocation, pfnInternalFree ); + } +#endif + + bool operator==( AllocationCallbacks const & rhs ) const VULKAN_HPP_NOEXCEPT + { +#if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +#else + return ( pUserData == rhs.pUserData ) && ( pfnAllocation == rhs.pfnAllocation ) && ( pfnReallocation == rhs.pfnReallocation ) && + ( pfnFree == rhs.pfnFree ) && ( pfnInternalAllocation == rhs.pfnInternalAllocation ) && ( pfnInternalFree == rhs.pfnInternalFree ); +#endif + } + + bool operator!=( AllocationCallbacks const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + void * pUserData = {}; + VULKAN_HPP_NAMESPACE::PFN_AllocationFunction pfnAllocation = {}; + VULKAN_HPP_NAMESPACE::PFN_ReallocationFunction pfnReallocation = {}; + VULKAN_HPP_NAMESPACE::PFN_FreeFunction pfnFree = {}; + VULKAN_HPP_NAMESPACE::PFN_InternalAllocationNotification pfnInternalAllocation = {}; + VULKAN_HPP_NAMESPACE::PFN_InternalFreeNotification pfnInternalFree = {}; + }; + + // wrapper struct for struct VkAmigoProfilingSubmitInfoSEC, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAmigoProfilingSubmitInfoSEC.html + struct AmigoProfilingSubmitInfoSEC + { + using NativeType = VkAmigoProfilingSubmitInfoSEC; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAmigoProfilingSubmitInfoSEC; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + AmigoProfilingSubmitInfoSEC( uint64_t firstDrawTimestamp_ = {}, uint64_t swapBufferTimestamp_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , firstDrawTimestamp{ firstDrawTimestamp_ } + , swapBufferTimestamp{ swapBufferTimestamp_ } + { + } + + VULKAN_HPP_CONSTEXPR AmigoProfilingSubmitInfoSEC( AmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AmigoProfilingSubmitInfoSEC( VkAmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT + : AmigoProfilingSubmitInfoSEC( *reinterpret_cast( &rhs ) ) + { + } + + AmigoProfilingSubmitInfoSEC & operator=( AmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AmigoProfilingSubmitInfoSEC & operator=( VkAmigoProfilingSubmitInfoSEC const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AmigoProfilingSubmitInfoSEC & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AmigoProfilingSubmitInfoSEC & setFirstDrawTimestamp( uint64_t firstDrawTimestamp_ ) VULKAN_HPP_NOEXCEPT + { + firstDrawTimestamp = firstDrawTimestamp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AmigoProfilingSubmitInfoSEC & setSwapBufferTimestamp( uint64_t swapBufferTimestamp_ ) VULKAN_HPP_NOEXCEPT + { + swapBufferTimestamp = swapBufferTimestamp_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAmigoProfilingSubmitInfoSEC const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAmigoProfilingSubmitInfoSEC &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAmigoProfilingSubmitInfoSEC const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAmigoProfilingSubmitInfoSEC *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, firstDrawTimestamp, swapBufferTimestamp ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AmigoProfilingSubmitInfoSEC const & ) const = default; +#else + bool operator==( AmigoProfilingSubmitInfoSEC const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( firstDrawTimestamp == rhs.firstDrawTimestamp ) && + ( swapBufferTimestamp == rhs.swapBufferTimestamp ); +# endif + } + + bool operator!=( AmigoProfilingSubmitInfoSEC const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAmigoProfilingSubmitInfoSEC; + const void * pNext = {}; + uint64_t firstDrawTimestamp = {}; + uint64_t swapBufferTimestamp = {}; + }; + + template <> + struct CppType + { + using Type = AmigoProfilingSubmitInfoSEC; + }; + + // wrapper struct for struct VkComponentMapping, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkComponentMapping.html + struct ComponentMapping + { + using NativeType = VkComponentMapping; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ComponentMapping( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity, + VULKAN_HPP_NAMESPACE::ComponentSwizzle g_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity, + VULKAN_HPP_NAMESPACE::ComponentSwizzle b_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity, + VULKAN_HPP_NAMESPACE::ComponentSwizzle a_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity ) VULKAN_HPP_NOEXCEPT + : r{ r_ } + , g{ g_ } + , b{ b_ } + , a{ a_ } + { + } + + VULKAN_HPP_CONSTEXPR ComponentMapping( ComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ComponentMapping( VkComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT : ComponentMapping( *reinterpret_cast( &rhs ) ) {} + + ComponentMapping & operator=( ComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ComponentMapping & operator=( VkComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setR( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ ) VULKAN_HPP_NOEXCEPT + { + r = r_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setG( VULKAN_HPP_NAMESPACE::ComponentSwizzle g_ ) VULKAN_HPP_NOEXCEPT + { + g = g_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setB( VULKAN_HPP_NAMESPACE::ComponentSwizzle b_ ) VULKAN_HPP_NOEXCEPT + { + b = b_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setA( VULKAN_HPP_NAMESPACE::ComponentSwizzle a_ ) VULKAN_HPP_NOEXCEPT + { + a = a_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkComponentMapping const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkComponentMapping &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkComponentMapping const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkComponentMapping *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( r, g, b, a ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ComponentMapping const & ) const = default; +#else + bool operator==( ComponentMapping const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( r == rhs.r ) && ( g == rhs.g ) && ( b == rhs.b ) && ( a == rhs.a ); +# endif + } + + bool operator!=( ComponentMapping const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ComponentSwizzle r = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; + VULKAN_HPP_NAMESPACE::ComponentSwizzle g = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; + VULKAN_HPP_NAMESPACE::ComponentSwizzle b = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; + VULKAN_HPP_NAMESPACE::ComponentSwizzle a = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity; + }; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkAndroidHardwareBufferFormatProperties2ANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidHardwareBufferFormatProperties2ANDROID.html + struct AndroidHardwareBufferFormatProperties2ANDROID + { + using NativeType = VkAndroidHardwareBufferFormatProperties2ANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferFormatProperties2ANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatProperties2ANDROID( + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint64_t externalFormat_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 formatFeatures_ = {}, + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , externalFormat{ externalFormat_ } + , formatFeatures{ formatFeatures_ } + , samplerYcbcrConversionComponents{ samplerYcbcrConversionComponents_ } + , suggestedYcbcrModel{ suggestedYcbcrModel_ } + , suggestedYcbcrRange{ suggestedYcbcrRange_ } + , suggestedXChromaOffset{ suggestedXChromaOffset_ } + , suggestedYChromaOffset{ suggestedYChromaOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR + AndroidHardwareBufferFormatProperties2ANDROID( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AndroidHardwareBufferFormatProperties2ANDROID( VkAndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : AndroidHardwareBufferFormatProperties2ANDROID( *reinterpret_cast( &rhs ) ) + { + } + + AndroidHardwareBufferFormatProperties2ANDROID & operator=( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AndroidHardwareBufferFormatProperties2ANDROID & operator=( VkAndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkAndroidHardwareBufferFormatProperties2ANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatProperties2ANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatProperties2ANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatProperties2ANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + format, + externalFormat, + formatFeatures, + samplerYcbcrConversionComponents, + suggestedYcbcrModel, + suggestedYcbcrRange, + suggestedXChromaOffset, + suggestedYChromaOffset ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AndroidHardwareBufferFormatProperties2ANDROID const & ) const = default; +# else + bool operator==( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( externalFormat == rhs.externalFormat ) && + ( formatFeatures == rhs.formatFeatures ) && ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && + ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && + ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); +# endif + } + + bool operator!=( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferFormatProperties2ANDROID; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint64_t externalFormat = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 formatFeatures = {}; + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + }; + + template <> + struct CppType + { + using Type = AndroidHardwareBufferFormatProperties2ANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkAndroidHardwareBufferFormatPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidHardwareBufferFormatPropertiesANDROID.html + struct AndroidHardwareBufferFormatPropertiesANDROID + { + using NativeType = VkAndroidHardwareBufferFormatPropertiesANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferFormatPropertiesANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatPropertiesANDROID( + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint64_t externalFormat_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ = {}, + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , externalFormat{ externalFormat_ } + , formatFeatures{ formatFeatures_ } + , samplerYcbcrConversionComponents{ samplerYcbcrConversionComponents_ } + , suggestedYcbcrModel{ suggestedYcbcrModel_ } + , suggestedYcbcrRange{ suggestedYcbcrRange_ } + , suggestedXChromaOffset{ suggestedXChromaOffset_ } + , suggestedYChromaOffset{ suggestedYChromaOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatPropertiesANDROID( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AndroidHardwareBufferFormatPropertiesANDROID( VkAndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : AndroidHardwareBufferFormatPropertiesANDROID( *reinterpret_cast( &rhs ) ) + { + } + + AndroidHardwareBufferFormatPropertiesANDROID & operator=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AndroidHardwareBufferFormatPropertiesANDROID & operator=( VkAndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkAndroidHardwareBufferFormatPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatPropertiesANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatPropertiesANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatPropertiesANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + format, + externalFormat, + formatFeatures, + samplerYcbcrConversionComponents, + suggestedYcbcrModel, + suggestedYcbcrRange, + suggestedXChromaOffset, + suggestedYChromaOffset ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AndroidHardwareBufferFormatPropertiesANDROID const & ) const = default; +# else + bool operator==( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( externalFormat == rhs.externalFormat ) && + ( formatFeatures == rhs.formatFeatures ) && ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && + ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && + ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); +# endif + } + + bool operator!=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferFormatPropertiesANDROID; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint64_t externalFormat = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures = {}; + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + }; + + template <> + struct CppType + { + using Type = AndroidHardwareBufferFormatPropertiesANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkAndroidHardwareBufferFormatResolvePropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidHardwareBufferFormatResolvePropertiesANDROID.html + struct AndroidHardwareBufferFormatResolvePropertiesANDROID + { + using NativeType = VkAndroidHardwareBufferFormatResolvePropertiesANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferFormatResolvePropertiesANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + AndroidHardwareBufferFormatResolvePropertiesANDROID( VULKAN_HPP_NAMESPACE::Format colorAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , colorAttachmentFormat{ colorAttachmentFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR + AndroidHardwareBufferFormatResolvePropertiesANDROID( AndroidHardwareBufferFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AndroidHardwareBufferFormatResolvePropertiesANDROID( VkAndroidHardwareBufferFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : AndroidHardwareBufferFormatResolvePropertiesANDROID( *reinterpret_cast( &rhs ) ) + { + } + + AndroidHardwareBufferFormatResolvePropertiesANDROID & + operator=( AndroidHardwareBufferFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AndroidHardwareBufferFormatResolvePropertiesANDROID & operator=( VkAndroidHardwareBufferFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkAndroidHardwareBufferFormatResolvePropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatResolvePropertiesANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatResolvePropertiesANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferFormatResolvePropertiesANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, colorAttachmentFormat ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AndroidHardwareBufferFormatResolvePropertiesANDROID const & ) const = default; +# else + bool operator==( AndroidHardwareBufferFormatResolvePropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorAttachmentFormat == rhs.colorAttachmentFormat ); +# endif + } + + bool operator!=( AndroidHardwareBufferFormatResolvePropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferFormatResolvePropertiesANDROID; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format colorAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = AndroidHardwareBufferFormatResolvePropertiesANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidHardwareBufferPropertiesANDROID.html + struct AndroidHardwareBufferPropertiesANDROID + { + using NativeType = VkAndroidHardwareBufferPropertiesANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferPropertiesANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferPropertiesANDROID( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ = {}, + uint32_t memoryTypeBits_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , allocationSize{ allocationSize_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferPropertiesANDROID( AndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AndroidHardwareBufferPropertiesANDROID( VkAndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : AndroidHardwareBufferPropertiesANDROID( *reinterpret_cast( &rhs ) ) + { + } + + AndroidHardwareBufferPropertiesANDROID & operator=( AndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AndroidHardwareBufferPropertiesANDROID & operator=( VkAndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkAndroidHardwareBufferPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferPropertiesANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferPropertiesANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferPropertiesANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, allocationSize, memoryTypeBits ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AndroidHardwareBufferPropertiesANDROID const & ) const = default; +# else + bool operator==( AndroidHardwareBufferPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( AndroidHardwareBufferPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferPropertiesANDROID; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = AndroidHardwareBufferPropertiesANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkAndroidHardwareBufferUsageANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidHardwareBufferUsageANDROID.html + struct AndroidHardwareBufferUsageANDROID + { + using NativeType = VkAndroidHardwareBufferUsageANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidHardwareBufferUsageANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferUsageANDROID( uint64_t androidHardwareBufferUsage_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , androidHardwareBufferUsage{ androidHardwareBufferUsage_ } + { + } + + VULKAN_HPP_CONSTEXPR AndroidHardwareBufferUsageANDROID( AndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AndroidHardwareBufferUsageANDROID( VkAndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : AndroidHardwareBufferUsageANDROID( *reinterpret_cast( &rhs ) ) + { + } + + AndroidHardwareBufferUsageANDROID & operator=( AndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AndroidHardwareBufferUsageANDROID & operator=( VkAndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkAndroidHardwareBufferUsageANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferUsageANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferUsageANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAndroidHardwareBufferUsageANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, androidHardwareBufferUsage ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AndroidHardwareBufferUsageANDROID const & ) const = default; +# else + bool operator==( AndroidHardwareBufferUsageANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( androidHardwareBufferUsage == rhs.androidHardwareBufferUsage ); +# endif + } + + bool operator!=( AndroidHardwareBufferUsageANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferUsageANDROID; + void * pNext = {}; + uint64_t androidHardwareBufferUsage = {}; + }; + + template <> + struct CppType + { + using Type = AndroidHardwareBufferUsageANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkAndroidSurfaceCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAndroidSurfaceCreateInfoKHR.html + struct AndroidSurfaceCreateInfoKHR + { + using NativeType = VkAndroidSurfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidSurfaceCreateInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AndroidSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ = {}, + struct ANativeWindow * window_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , window{ window_ } + { + } + + VULKAN_HPP_CONSTEXPR AndroidSurfaceCreateInfoKHR( AndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AndroidSurfaceCreateInfoKHR( VkAndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : AndroidSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + AndroidSurfaceCreateInfoKHR & operator=( AndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AndroidSurfaceCreateInfoKHR & operator=( VkAndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setWindow( struct ANativeWindow * window_ ) VULKAN_HPP_NOEXCEPT + { + window = window_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAndroidSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAndroidSurfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAndroidSurfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, window ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AndroidSurfaceCreateInfoKHR const & ) const = default; +# else + bool operator==( AndroidSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window ); +# endif + } + + bool operator!=( AndroidSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidSurfaceCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags = {}; + struct ANativeWindow * window = {}; + }; + + template <> + struct CppType + { + using Type = AndroidSurfaceCreateInfoKHR; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + // wrapper struct for struct VkAntiLagPresentationInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAntiLagPresentationInfoAMD.html + struct AntiLagPresentationInfoAMD + { + using NativeType = VkAntiLagPresentationInfoAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAntiLagPresentationInfoAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AntiLagPresentationInfoAMD( VULKAN_HPP_NAMESPACE::AntiLagStageAMD stage_ = VULKAN_HPP_NAMESPACE::AntiLagStageAMD::eInput, + uint64_t frameIndex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stage{ stage_ } + , frameIndex{ frameIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR AntiLagPresentationInfoAMD( AntiLagPresentationInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AntiLagPresentationInfoAMD( VkAntiLagPresentationInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : AntiLagPresentationInfoAMD( *reinterpret_cast( &rhs ) ) + { + } + + AntiLagPresentationInfoAMD & operator=( AntiLagPresentationInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AntiLagPresentationInfoAMD & operator=( VkAntiLagPresentationInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AntiLagPresentationInfoAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AntiLagPresentationInfoAMD & setStage( VULKAN_HPP_NAMESPACE::AntiLagStageAMD stage_ ) VULKAN_HPP_NOEXCEPT + { + stage = stage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AntiLagPresentationInfoAMD & setFrameIndex( uint64_t frameIndex_ ) VULKAN_HPP_NOEXCEPT + { + frameIndex = frameIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAntiLagPresentationInfoAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAntiLagPresentationInfoAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAntiLagPresentationInfoAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAntiLagPresentationInfoAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stage, frameIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AntiLagPresentationInfoAMD const & ) const = default; +#else + bool operator==( AntiLagPresentationInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) && ( frameIndex == rhs.frameIndex ); +# endif + } + + bool operator!=( AntiLagPresentationInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAntiLagPresentationInfoAMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::AntiLagStageAMD stage = VULKAN_HPP_NAMESPACE::AntiLagStageAMD::eInput; + uint64_t frameIndex = {}; + }; + + template <> + struct CppType + { + using Type = AntiLagPresentationInfoAMD; + }; + + // wrapper struct for struct VkAntiLagDataAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAntiLagDataAMD.html + struct AntiLagDataAMD + { + using NativeType = VkAntiLagDataAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAntiLagDataAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AntiLagDataAMD( VULKAN_HPP_NAMESPACE::AntiLagModeAMD mode_ = VULKAN_HPP_NAMESPACE::AntiLagModeAMD::eDriverControl, + uint32_t maxFPS_ = {}, + const VULKAN_HPP_NAMESPACE::AntiLagPresentationInfoAMD * pPresentationInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mode{ mode_ } + , maxFPS{ maxFPS_ } + , pPresentationInfo{ pPresentationInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR AntiLagDataAMD( AntiLagDataAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AntiLagDataAMD( VkAntiLagDataAMD const & rhs ) VULKAN_HPP_NOEXCEPT : AntiLagDataAMD( *reinterpret_cast( &rhs ) ) {} + + AntiLagDataAMD & operator=( AntiLagDataAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AntiLagDataAMD & operator=( VkAntiLagDataAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AntiLagDataAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AntiLagDataAMD & setMode( VULKAN_HPP_NAMESPACE::AntiLagModeAMD mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AntiLagDataAMD & setMaxFPS( uint32_t maxFPS_ ) VULKAN_HPP_NOEXCEPT + { + maxFPS = maxFPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AntiLagDataAMD & + setPPresentationInfo( const VULKAN_HPP_NAMESPACE::AntiLagPresentationInfoAMD * pPresentationInfo_ ) VULKAN_HPP_NOEXCEPT + { + pPresentationInfo = pPresentationInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAntiLagDataAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAntiLagDataAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAntiLagDataAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAntiLagDataAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mode, maxFPS, pPresentationInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AntiLagDataAMD const & ) const = default; +#else + bool operator==( AntiLagDataAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mode == rhs.mode ) && ( maxFPS == rhs.maxFPS ) && + ( pPresentationInfo == rhs.pPresentationInfo ); +# endif + } + + bool operator!=( AntiLagDataAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAntiLagDataAMD; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AntiLagModeAMD mode = VULKAN_HPP_NAMESPACE::AntiLagModeAMD::eDriverControl; + uint32_t maxFPS = {}; + const VULKAN_HPP_NAMESPACE::AntiLagPresentationInfoAMD * pPresentationInfo = {}; + }; + + template <> + struct CppType + { + using Type = AntiLagDataAMD; + }; + + // wrapper struct for struct VkApplicationInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkApplicationInfo.html + struct ApplicationInfo + { + using NativeType = VkApplicationInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eApplicationInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ApplicationInfo( const char * pApplicationName_ = {}, + uint32_t applicationVersion_ = {}, + const char * pEngineName_ = {}, + uint32_t engineVersion_ = {}, + uint32_t apiVersion_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pApplicationName{ pApplicationName_ } + , applicationVersion{ applicationVersion_ } + , pEngineName{ pEngineName_ } + , engineVersion{ engineVersion_ } + , apiVersion{ apiVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR ApplicationInfo( ApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ApplicationInfo( VkApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ApplicationInfo( *reinterpret_cast( &rhs ) ) {} + + ApplicationInfo & operator=( ApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ApplicationInfo & operator=( VkApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPApplicationName( const char * pApplicationName_ ) VULKAN_HPP_NOEXCEPT + { + pApplicationName = pApplicationName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setApplicationVersion( uint32_t applicationVersion_ ) VULKAN_HPP_NOEXCEPT + { + applicationVersion = applicationVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPEngineName( const char * pEngineName_ ) VULKAN_HPP_NOEXCEPT + { + pEngineName = pEngineName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setEngineVersion( uint32_t engineVersion_ ) VULKAN_HPP_NOEXCEPT + { + engineVersion = engineVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setApiVersion( uint32_t apiVersion_ ) VULKAN_HPP_NOEXCEPT + { + apiVersion = apiVersion_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkApplicationInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkApplicationInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkApplicationInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkApplicationInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pApplicationName, applicationVersion, pEngineName, engineVersion, apiVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( pApplicationName != rhs.pApplicationName ) + if ( auto cmp = strcmp( pApplicationName, rhs.pApplicationName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = applicationVersion <=> rhs.applicationVersion; cmp != 0 ) + return cmp; + if ( pEngineName != rhs.pEngineName ) + if ( auto cmp = strcmp( pEngineName, rhs.pEngineName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = engineVersion <=> rhs.engineVersion; cmp != 0 ) + return cmp; + if ( auto cmp = apiVersion <=> rhs.apiVersion; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( ( pApplicationName == rhs.pApplicationName ) || ( strcmp( pApplicationName, rhs.pApplicationName ) == 0 ) ) && + ( applicationVersion == rhs.applicationVersion ) && ( ( pEngineName == rhs.pEngineName ) || ( strcmp( pEngineName, rhs.pEngineName ) == 0 ) ) && + ( engineVersion == rhs.engineVersion ) && ( apiVersion == rhs.apiVersion ); + } + + bool operator!=( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eApplicationInfo; + const void * pNext = {}; + const char * pApplicationName = {}; + uint32_t applicationVersion = {}; + const char * pEngineName = {}; + uint32_t engineVersion = {}; + uint32_t apiVersion = {}; + }; + + template <> + struct CppType + { + using Type = ApplicationInfo; + }; + + // wrapper struct for struct VkAttachmentDescription, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentDescription.html + struct AttachmentDescription + { + using NativeType = VkAttachmentDescription; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + AttachmentDescription( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, + VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, + VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, + VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined ) VULKAN_HPP_NOEXCEPT + : flags{ flags_ } + , format{ format_ } + , samples{ samples_ } + , loadOp{ loadOp_ } + , storeOp{ storeOp_ } + , stencilLoadOp{ stencilLoadOp_ } + , stencilStoreOp{ stencilStoreOp_ } + , initialLayout{ initialLayout_ } + , finalLayout{ finalLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentDescription( AttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentDescription( VkAttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentDescription( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentDescription & operator=( AttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentDescription & operator=( VkAttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT + { + samples = samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT + { + loadOp = loadOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT + { + storeOp = storeOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setStencilLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ ) VULKAN_HPP_NOEXCEPT + { + stencilLoadOp = stencilLoadOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setStencilStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ ) VULKAN_HPP_NOEXCEPT + { + stencilStoreOp = stencilStoreOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT + { + initialLayout = initialLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription & setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT + { + finalLayout = finalLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentDescription const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentDescription &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentDescription const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentDescription *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( flags, format, samples, loadOp, storeOp, stencilLoadOp, stencilStoreOp, initialLayout, finalLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentDescription const & ) const = default; +#else + bool operator==( AttachmentDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( flags == rhs.flags ) && ( format == rhs.format ) && ( samples == rhs.samples ) && ( loadOp == rhs.loadOp ) && ( storeOp == rhs.storeOp ) && + ( stencilLoadOp == rhs.stencilLoadOp ) && ( stencilStoreOp == rhs.stencilStoreOp ) && ( initialLayout == rhs.initialLayout ) && + ( finalLayout == rhs.finalLayout ); +# endif + } + + bool operator!=( AttachmentDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; + VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; + VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; + VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageLayout finalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + // wrapper struct for struct VkAttachmentDescription2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentDescription2.html + struct AttachmentDescription2 + { + using NativeType = VkAttachmentDescription2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentDescription2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AttachmentDescription2( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, + VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, + VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, + VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , format{ format_ } + , samples{ samples_ } + , loadOp{ loadOp_ } + , storeOp{ storeOp_ } + , stencilLoadOp{ stencilLoadOp_ } + , stencilStoreOp{ stencilStoreOp_ } + , initialLayout{ initialLayout_ } + , finalLayout{ finalLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentDescription2( AttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentDescription2( VkAttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentDescription2( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentDescription2 & operator=( AttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentDescription2 & operator=( VkAttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT + { + samples = samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT + { + loadOp = loadOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT + { + storeOp = storeOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setStencilLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ ) VULKAN_HPP_NOEXCEPT + { + stencilLoadOp = stencilLoadOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setStencilStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ ) VULKAN_HPP_NOEXCEPT + { + stencilStoreOp = stencilStoreOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT + { + initialLayout = initialLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT + { + finalLayout = finalLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentDescription2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentDescription2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentDescription2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentDescription2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, format, samples, loadOp, storeOp, stencilLoadOp, stencilStoreOp, initialLayout, finalLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentDescription2 const & ) const = default; +#else + bool operator==( AttachmentDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( format == rhs.format ) && ( samples == rhs.samples ) && + ( loadOp == rhs.loadOp ) && ( storeOp == rhs.storeOp ) && ( stencilLoadOp == rhs.stencilLoadOp ) && ( stencilStoreOp == rhs.stencilStoreOp ) && + ( initialLayout == rhs.initialLayout ) && ( finalLayout == rhs.finalLayout ); +# endif + } + + bool operator!=( AttachmentDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentDescription2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; + VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; + VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; + VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageLayout finalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + template <> + struct CppType + { + using Type = AttachmentDescription2; + }; + + using AttachmentDescription2KHR = AttachmentDescription2; + + // wrapper struct for struct VkAttachmentDescriptionStencilLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentDescriptionStencilLayout.html + struct AttachmentDescriptionStencilLayout + { + using NativeType = VkAttachmentDescriptionStencilLayout; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentDescriptionStencilLayout; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + AttachmentDescriptionStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stencilInitialLayout{ stencilInitialLayout_ } + , stencilFinalLayout{ stencilFinalLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentDescriptionStencilLayout( AttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentDescriptionStencilLayout( VkAttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentDescriptionStencilLayout( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentDescriptionStencilLayout & operator=( AttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentDescriptionStencilLayout & operator=( VkAttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & + setStencilInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout_ ) VULKAN_HPP_NOEXCEPT + { + stencilInitialLayout = stencilInitialLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & + setStencilFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout_ ) VULKAN_HPP_NOEXCEPT + { + stencilFinalLayout = stencilFinalLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentDescriptionStencilLayout const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentDescriptionStencilLayout &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentDescriptionStencilLayout const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentDescriptionStencilLayout *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stencilInitialLayout, stencilFinalLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentDescriptionStencilLayout const & ) const = default; +#else + bool operator==( AttachmentDescriptionStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilInitialLayout == rhs.stencilInitialLayout ) && + ( stencilFinalLayout == rhs.stencilFinalLayout ); +# endif + } + + bool operator!=( AttachmentDescriptionStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentDescriptionStencilLayout; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + template <> + struct CppType + { + using Type = AttachmentDescriptionStencilLayout; + }; + + using AttachmentDescriptionStencilLayoutKHR = AttachmentDescriptionStencilLayout; + + // wrapper struct for struct VkAttachmentFeedbackLoopInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentFeedbackLoopInfoEXT.html + struct AttachmentFeedbackLoopInfoEXT + { + using NativeType = VkAttachmentFeedbackLoopInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentFeedbackLoopInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AttachmentFeedbackLoopInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 feedbackLoopEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , feedbackLoopEnable{ feedbackLoopEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentFeedbackLoopInfoEXT( AttachmentFeedbackLoopInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentFeedbackLoopInfoEXT( VkAttachmentFeedbackLoopInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentFeedbackLoopInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentFeedbackLoopInfoEXT & operator=( AttachmentFeedbackLoopInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentFeedbackLoopInfoEXT & operator=( VkAttachmentFeedbackLoopInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentFeedbackLoopInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentFeedbackLoopInfoEXT & setFeedbackLoopEnable( VULKAN_HPP_NAMESPACE::Bool32 feedbackLoopEnable_ ) VULKAN_HPP_NOEXCEPT + { + feedbackLoopEnable = feedbackLoopEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentFeedbackLoopInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentFeedbackLoopInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentFeedbackLoopInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentFeedbackLoopInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, feedbackLoopEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentFeedbackLoopInfoEXT const & ) const = default; +#else + bool operator==( AttachmentFeedbackLoopInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( feedbackLoopEnable == rhs.feedbackLoopEnable ); +# endif + } + + bool operator!=( AttachmentFeedbackLoopInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentFeedbackLoopInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 feedbackLoopEnable = {}; + }; + + template <> + struct CppType + { + using Type = AttachmentFeedbackLoopInfoEXT; + }; + + // wrapper struct for struct VkAttachmentReference, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentReference.html + struct AttachmentReference + { + using NativeType = VkAttachmentReference; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AttachmentReference( uint32_t attachment_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout layout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined ) VULKAN_HPP_NOEXCEPT + : attachment{ attachment_ } + , layout{ layout_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentReference( AttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentReference( VkAttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT : AttachmentReference( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentReference & operator=( AttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentReference & operator=( VkAttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentReference & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT + { + attachment = attachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentReference & setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentReference const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentReference &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentReference const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentReference *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( attachment, layout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentReference const & ) const = default; +#else + bool operator==( AttachmentReference const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( attachment == rhs.attachment ) && ( layout == rhs.layout ); +# endif + } + + bool operator!=( AttachmentReference const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t attachment = {}; + VULKAN_HPP_NAMESPACE::ImageLayout layout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + // wrapper struct for struct VkAttachmentReference2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentReference2.html + struct AttachmentReference2 + { + using NativeType = VkAttachmentReference2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReference2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AttachmentReference2( uint32_t attachment_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout layout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachment{ attachment_ } + , layout{ layout_ } + , aspectMask{ aspectMask_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentReference2( AttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentReference2( VkAttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentReference2( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentReference2 & operator=( AttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentReference2 & operator=( VkAttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT + { + attachment = attachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT + { + aspectMask = aspectMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentReference2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentReference2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentReference2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentReference2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, attachment, layout, aspectMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentReference2 const & ) const = default; +#else + bool operator==( AttachmentReference2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachment == rhs.attachment ) && ( layout == rhs.layout ) && + ( aspectMask == rhs.aspectMask ); +# endif + } + + bool operator!=( AttachmentReference2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentReference2; + const void * pNext = {}; + uint32_t attachment = {}; + VULKAN_HPP_NAMESPACE::ImageLayout layout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + }; + + template <> + struct CppType + { + using Type = AttachmentReference2; + }; + + using AttachmentReference2KHR = AttachmentReference2; + + // wrapper struct for struct VkAttachmentReferenceStencilLayout, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentReferenceStencilLayout.html + struct AttachmentReferenceStencilLayout + { + using NativeType = VkAttachmentReferenceStencilLayout; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReferenceStencilLayout; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AttachmentReferenceStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stencilLayout{ stencilLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentReferenceStencilLayout( AttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentReferenceStencilLayout( VkAttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentReferenceStencilLayout( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentReferenceStencilLayout & operator=( AttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentReferenceStencilLayout & operator=( VkAttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout & setStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout_ ) VULKAN_HPP_NOEXCEPT + { + stencilLayout = stencilLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentReferenceStencilLayout const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentReferenceStencilLayout &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentReferenceStencilLayout const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentReferenceStencilLayout *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stencilLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentReferenceStencilLayout const & ) const = default; +#else + bool operator==( AttachmentReferenceStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilLayout == rhs.stencilLayout ); +# endif + } + + bool operator!=( AttachmentReferenceStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentReferenceStencilLayout; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + template <> + struct CppType + { + using Type = AttachmentReferenceStencilLayout; + }; + + using AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout; + + // wrapper struct for struct VkAttachmentSampleCountInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentSampleCountInfoAMD.html + struct AttachmentSampleCountInfoAMD + { + using NativeType = VkAttachmentSampleCountInfoAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentSampleCountInfoAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + AttachmentSampleCountInfoAMD( uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachmentSamples{ pColorAttachmentSamples_ } + , depthStencilAttachmentSamples{ depthStencilAttachmentSamples_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentSampleCountInfoAMD( AttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentSampleCountInfoAMD( VkAttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentSampleCountInfoAMD( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AttachmentSampleCountInfoAMD( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentSamples_, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , colorAttachmentCount( static_cast( colorAttachmentSamples_.size() ) ) + , pColorAttachmentSamples( colorAttachmentSamples_.data() ) + , depthStencilAttachmentSamples( depthStencilAttachmentSamples_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + AttachmentSampleCountInfoAMD & operator=( AttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentSampleCountInfoAMD & operator=( VkAttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & + setPColorAttachmentSamples( const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachmentSamples = pColorAttachmentSamples_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + AttachmentSampleCountInfoAMD & setColorAttachmentSamples( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachmentSamples_.size() ); + pColorAttachmentSamples = colorAttachmentSamples_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & + setDepthStencilAttachmentSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT + { + depthStencilAttachmentSamples = depthStencilAttachmentSamples_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentSampleCountInfoAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentSampleCountInfoAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentSampleCountInfoAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentSampleCountInfoAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, colorAttachmentCount, pColorAttachmentSamples, depthStencilAttachmentSamples ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentSampleCountInfoAMD const & ) const = default; +#else + bool operator==( AttachmentSampleCountInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachmentSamples == rhs.pColorAttachmentSamples ) && ( depthStencilAttachmentSamples == rhs.depthStencilAttachmentSamples ); +# endif + } + + bool operator!=( AttachmentSampleCountInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentSampleCountInfoAMD; + const void * pNext = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + }; + + template <> + struct CppType + { + using Type = AttachmentSampleCountInfoAMD; + }; + + using AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD; + + // wrapper struct for struct VkExtent2D, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExtent2D.html + struct Extent2D + { + using NativeType = VkExtent2D; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Extent2D( uint32_t width_ = {}, uint32_t height_ = {} ) VULKAN_HPP_NOEXCEPT + : width{ width_ } + , height{ height_ } + { + } + + VULKAN_HPP_CONSTEXPR Extent2D( Extent2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Extent2D( VkExtent2D const & rhs ) VULKAN_HPP_NOEXCEPT : Extent2D( *reinterpret_cast( &rhs ) ) {} + + Extent2D & operator=( Extent2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Extent2D & operator=( VkExtent2D const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Extent2D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Extent2D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExtent2D const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExtent2D &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExtent2D const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExtent2D *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( width, height ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Extent2D const & ) const = default; +#else + bool operator==( Extent2D const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( width == rhs.width ) && ( height == rhs.height ); +# endif + } + + bool operator!=( Extent2D const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t width = {}; + uint32_t height = {}; + }; + + // wrapper struct for struct VkSampleLocationEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSampleLocationEXT.html + struct SampleLocationEXT + { + using NativeType = VkSampleLocationEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SampleLocationEXT( float x_ = {}, float y_ = {} ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + { + } + + VULKAN_HPP_CONSTEXPR SampleLocationEXT( SampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SampleLocationEXT( VkSampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT : SampleLocationEXT( *reinterpret_cast( &rhs ) ) {} + + SampleLocationEXT & operator=( SampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SampleLocationEXT & operator=( VkSampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSampleLocationEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSampleLocationEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSampleLocationEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSampleLocationEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SampleLocationEXT const & ) const = default; +#else + bool operator==( SampleLocationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ); +# endif + } + + bool operator!=( SampleLocationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float x = {}; + float y = {}; + }; + + // wrapper struct for struct VkSampleLocationsInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSampleLocationsInfoEXT.html + struct SampleLocationsInfoEXT + { + using NativeType = VkSampleLocationsInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSampleLocationsInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SampleLocationsInfoEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::Extent2D sampleLocationGridSize_ = {}, + uint32_t sampleLocationsCount_ = {}, + const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sampleLocationsPerPixel{ sampleLocationsPerPixel_ } + , sampleLocationGridSize{ sampleLocationGridSize_ } + , sampleLocationsCount{ sampleLocationsCount_ } + , pSampleLocations{ pSampleLocations_ } + { + } + + VULKAN_HPP_CONSTEXPR SampleLocationsInfoEXT( SampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SampleLocationsInfoEXT( VkSampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SampleLocationsInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SampleLocationsInfoEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_, + VULKAN_HPP_NAMESPACE::Extent2D sampleLocationGridSize_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , sampleLocationsPerPixel( sampleLocationsPerPixel_ ) + , sampleLocationGridSize( sampleLocationGridSize_ ) + , sampleLocationsCount( static_cast( sampleLocations_.size() ) ) + , pSampleLocations( sampleLocations_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SampleLocationsInfoEXT & operator=( SampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SampleLocationsInfoEXT & operator=( VkSampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & + setSampleLocationsPerPixel( VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsPerPixel = sampleLocationsPerPixel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & + setSampleLocationGridSize( VULKAN_HPP_NAMESPACE::Extent2D const & sampleLocationGridSize_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationGridSize = sampleLocationGridSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & setSampleLocationsCount( uint32_t sampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsCount = sampleLocationsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & + setPSampleLocations( const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations_ ) VULKAN_HPP_NOEXCEPT + { + pSampleLocations = pSampleLocations_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SampleLocationsInfoEXT & setSampleLocations( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsCount = static_cast( sampleLocations_.size() ); + pSampleLocations = sampleLocations_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSampleLocationsInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSampleLocationsInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSampleLocationsInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSampleLocationsInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sampleLocationsPerPixel, sampleLocationGridSize, sampleLocationsCount, pSampleLocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SampleLocationsInfoEXT const & ) const = default; +#else + bool operator==( SampleLocationsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleLocationsPerPixel == rhs.sampleLocationsPerPixel ) && + ( sampleLocationGridSize == rhs.sampleLocationGridSize ) && ( sampleLocationsCount == rhs.sampleLocationsCount ) && + ( pSampleLocations == rhs.pSampleLocations ); +# endif + } + + bool operator!=( SampleLocationsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSampleLocationsInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::Extent2D sampleLocationGridSize = {}; + uint32_t sampleLocationsCount = {}; + const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations = {}; + }; + + template <> + struct CppType + { + using Type = SampleLocationsInfoEXT; + }; + + // wrapper struct for struct VkAttachmentSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkAttachmentSampleLocationsEXT.html + struct AttachmentSampleLocationsEXT + { + using NativeType = VkAttachmentSampleLocationsEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR AttachmentSampleLocationsEXT( uint32_t attachmentIndex_ = {}, + VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo_ = {} ) VULKAN_HPP_NOEXCEPT + : attachmentIndex{ attachmentIndex_ } + , sampleLocationsInfo{ sampleLocationsInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR AttachmentSampleLocationsEXT( AttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + AttachmentSampleLocationsEXT( VkAttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : AttachmentSampleLocationsEXT( *reinterpret_cast( &rhs ) ) + { + } + + AttachmentSampleLocationsEXT & operator=( AttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + AttachmentSampleLocationsEXT & operator=( VkAttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT & setAttachmentIndex( uint32_t attachmentIndex_ ) VULKAN_HPP_NOEXCEPT + { + attachmentIndex = attachmentIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT & + setSampleLocationsInfo( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsInfo = sampleLocationsInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkAttachmentSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkAttachmentSampleLocationsEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkAttachmentSampleLocationsEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( attachmentIndex, sampleLocationsInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( AttachmentSampleLocationsEXT const & ) const = default; +#else + bool operator==( AttachmentSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( attachmentIndex == rhs.attachmentIndex ) && ( sampleLocationsInfo == rhs.sampleLocationsInfo ); +# endif + } + + bool operator!=( AttachmentSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t attachmentIndex = {}; + VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {}; + }; + + // wrapper struct for struct VkBaseInStructure, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBaseInStructure.html + struct BaseInStructure + { + using NativeType = VkBaseInStructure; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + BaseInStructure( VULKAN_HPP_NAMESPACE::StructureType sType_ = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo, + const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : sType{ sType_ } + , pNext{ pNext_ } + { + } + + BaseInStructure( BaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BaseInStructure( VkBaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT : BaseInStructure( *reinterpret_cast( &rhs ) ) {} + + BaseInStructure & operator=( BaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BaseInStructure & operator=( VkBaseInStructure const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BaseInStructure & setPNext( const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBaseInStructure const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBaseInStructure &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBaseInStructure const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBaseInStructure *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BaseInStructure const & ) const = default; +#else + bool operator==( BaseInStructure const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( BaseInStructure const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo; + const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext = {}; + }; + + // wrapper struct for struct VkBaseOutStructure, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBaseOutStructure.html + struct BaseOutStructure + { + using NativeType = VkBaseOutStructure; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + BaseOutStructure( VULKAN_HPP_NAMESPACE::StructureType sType_ = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo, + struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : sType{ sType_ } + , pNext{ pNext_ } + { + } + + BaseOutStructure( BaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BaseOutStructure( VkBaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT : BaseOutStructure( *reinterpret_cast( &rhs ) ) {} + + BaseOutStructure & operator=( BaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BaseOutStructure & operator=( VkBaseOutStructure const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BaseOutStructure & setPNext( struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBaseOutStructure const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBaseOutStructure &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBaseOutStructure const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBaseOutStructure *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BaseOutStructure const & ) const = default; +#else + bool operator==( BaseOutStructure const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( BaseOutStructure const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo; + struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext = {}; + }; + + // wrapper struct for struct VkBindAccelerationStructureMemoryInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindAccelerationStructureMemoryInfoNV.html + struct BindAccelerationStructureMemoryInfoNV + { + using NativeType = VkBindAccelerationStructureMemoryInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindAccelerationStructureMemoryInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindAccelerationStructureMemoryInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + uint32_t deviceIndexCount_ = {}, + const uint32_t * pDeviceIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructure{ accelerationStructure_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + , deviceIndexCount{ deviceIndexCount_ } + , pDeviceIndices{ pDeviceIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR BindAccelerationStructureMemoryInfoNV( BindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindAccelerationStructureMemoryInfoNV( VkBindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BindAccelerationStructureMemoryInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindAccelerationStructureMemoryInfoNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , accelerationStructure( accelerationStructure_ ) + , memory( memory_ ) + , memoryOffset( memoryOffset_ ) + , deviceIndexCount( static_cast( deviceIndices_.size() ) ) + , pDeviceIndices( deviceIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BindAccelerationStructureMemoryInfoNV & operator=( BindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindAccelerationStructureMemoryInfoNV & operator=( VkBindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndexCount = deviceIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + pDeviceIndices = pDeviceIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindAccelerationStructureMemoryInfoNV & + setDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndexCount = static_cast( deviceIndices_.size() ); + pDeviceIndices = deviceIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindAccelerationStructureMemoryInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindAccelerationStructureMemoryInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindAccelerationStructureMemoryInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindAccelerationStructureMemoryInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructure, memory, memoryOffset, deviceIndexCount, pDeviceIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindAccelerationStructureMemoryInfoNV const & ) const = default; +#else + bool operator==( BindAccelerationStructureMemoryInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ) && ( memory == rhs.memory ) && + ( memoryOffset == rhs.memoryOffset ) && ( deviceIndexCount == rhs.deviceIndexCount ) && ( pDeviceIndices == rhs.pDeviceIndices ); +# endif + } + + bool operator!=( BindAccelerationStructureMemoryInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindAccelerationStructureMemoryInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + uint32_t deviceIndexCount = {}; + const uint32_t * pDeviceIndices = {}; + }; + + template <> + struct CppType + { + using Type = BindAccelerationStructureMemoryInfoNV; + }; + + // wrapper struct for struct VkBindBufferMemoryDeviceGroupInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindBufferMemoryDeviceGroupInfo.html + struct BindBufferMemoryDeviceGroupInfo + { + using NativeType = VkBindBufferMemoryDeviceGroupInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryDeviceGroupInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindBufferMemoryDeviceGroupInfo( uint32_t deviceIndexCount_ = {}, + const uint32_t * pDeviceIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceIndexCount{ deviceIndexCount_ } + , pDeviceIndices{ pDeviceIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR BindBufferMemoryDeviceGroupInfo( BindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindBufferMemoryDeviceGroupInfo( VkBindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BindBufferMemoryDeviceGroupInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindBufferMemoryDeviceGroupInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), deviceIndexCount( static_cast( deviceIndices_.size() ) ), pDeviceIndices( deviceIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BindBufferMemoryDeviceGroupInfo & operator=( BindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindBufferMemoryDeviceGroupInfo & operator=( VkBindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndexCount = deviceIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + pDeviceIndices = pDeviceIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindBufferMemoryDeviceGroupInfo & + setDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndexCount = static_cast( deviceIndices_.size() ); + pDeviceIndices = deviceIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindBufferMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindBufferMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindBufferMemoryDeviceGroupInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindBufferMemoryDeviceGroupInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceIndexCount, pDeviceIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindBufferMemoryDeviceGroupInfo const & ) const = default; +#else + bool operator==( BindBufferMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndexCount == rhs.deviceIndexCount ) && ( pDeviceIndices == rhs.pDeviceIndices ); +# endif + } + + bool operator!=( BindBufferMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindBufferMemoryDeviceGroupInfo; + const void * pNext = {}; + uint32_t deviceIndexCount = {}; + const uint32_t * pDeviceIndices = {}; + }; + + template <> + struct CppType + { + using Type = BindBufferMemoryDeviceGroupInfo; + }; + + using BindBufferMemoryDeviceGroupInfoKHR = BindBufferMemoryDeviceGroupInfo; + + // wrapper struct for struct VkBindBufferMemoryInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindBufferMemoryInfo.html + struct BindBufferMemoryInfo + { + using NativeType = VkBindBufferMemoryInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindBufferMemoryInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR BindBufferMemoryInfo( BindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindBufferMemoryInfo( VkBindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BindBufferMemoryInfo( *reinterpret_cast( &rhs ) ) + { + } + + BindBufferMemoryInfo & operator=( BindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindBufferMemoryInfo & operator=( VkBindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindBufferMemoryInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindBufferMemoryInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindBufferMemoryInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindBufferMemoryInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer, memory, memoryOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindBufferMemoryInfo const & ) const = default; +#else + bool operator==( BindBufferMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ); +# endif + } + + bool operator!=( BindBufferMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindBufferMemoryInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + }; + + template <> + struct CppType + { + using Type = BindBufferMemoryInfo; + }; + + using BindBufferMemoryInfoKHR = BindBufferMemoryInfo; + + // wrapper struct for struct VkBindDataGraphPipelineSessionMemoryInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindDataGraphPipelineSessionMemoryInfoARM.html + struct BindDataGraphPipelineSessionMemoryInfoARM + { + using NativeType = VkBindDataGraphPipelineSessionMemoryInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindDataGraphPipelineSessionMemoryInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindDataGraphPipelineSessionMemoryInfoARM( + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session_ = {}, + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint_ = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM::eTransient, + uint32_t objectIndex_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , session{ session_ } + , bindPoint{ bindPoint_ } + , objectIndex{ objectIndex_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR BindDataGraphPipelineSessionMemoryInfoARM( BindDataGraphPipelineSessionMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindDataGraphPipelineSessionMemoryInfoARM( VkBindDataGraphPipelineSessionMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : BindDataGraphPipelineSessionMemoryInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + BindDataGraphPipelineSessionMemoryInfoARM & operator=( BindDataGraphPipelineSessionMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindDataGraphPipelineSessionMemoryInfoARM & operator=( VkBindDataGraphPipelineSessionMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindDataGraphPipelineSessionMemoryInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDataGraphPipelineSessionMemoryInfoARM & + setSession( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session_ ) VULKAN_HPP_NOEXCEPT + { + session = session_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDataGraphPipelineSessionMemoryInfoARM & + setBindPoint( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint_ ) VULKAN_HPP_NOEXCEPT + { + bindPoint = bindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDataGraphPipelineSessionMemoryInfoARM & setObjectIndex( uint32_t objectIndex_ ) VULKAN_HPP_NOEXCEPT + { + objectIndex = objectIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDataGraphPipelineSessionMemoryInfoARM & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDataGraphPipelineSessionMemoryInfoARM & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindDataGraphPipelineSessionMemoryInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindDataGraphPipelineSessionMemoryInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindDataGraphPipelineSessionMemoryInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindDataGraphPipelineSessionMemoryInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, session, bindPoint, objectIndex, memory, memoryOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindDataGraphPipelineSessionMemoryInfoARM const & ) const = default; +#else + bool operator==( BindDataGraphPipelineSessionMemoryInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( session == rhs.session ) && ( bindPoint == rhs.bindPoint ) && + ( objectIndex == rhs.objectIndex ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ); +# endif + } + + bool operator!=( BindDataGraphPipelineSessionMemoryInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindDataGraphPipelineSessionMemoryInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM::eTransient; + uint32_t objectIndex = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + }; + + template <> + struct CppType + { + using Type = BindDataGraphPipelineSessionMemoryInfoARM; + }; + + // wrapper struct for struct VkBindDescriptorBufferEmbeddedSamplersInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindDescriptorBufferEmbeddedSamplersInfoEXT.html + struct BindDescriptorBufferEmbeddedSamplersInfoEXT + { + using NativeType = VkBindDescriptorBufferEmbeddedSamplersInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindDescriptorBufferEmbeddedSamplersInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindDescriptorBufferEmbeddedSamplersInfoEXT( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + uint32_t set_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stageFlags{ stageFlags_ } + , layout{ layout_ } + , set{ set_ } + { + } + + VULKAN_HPP_CONSTEXPR BindDescriptorBufferEmbeddedSamplersInfoEXT( BindDescriptorBufferEmbeddedSamplersInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindDescriptorBufferEmbeddedSamplersInfoEXT( VkBindDescriptorBufferEmbeddedSamplersInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : BindDescriptorBufferEmbeddedSamplersInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + BindDescriptorBufferEmbeddedSamplersInfoEXT & operator=( BindDescriptorBufferEmbeddedSamplersInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindDescriptorBufferEmbeddedSamplersInfoEXT & operator=( VkBindDescriptorBufferEmbeddedSamplersInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindDescriptorBufferEmbeddedSamplersInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorBufferEmbeddedSamplersInfoEXT & + setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorBufferEmbeddedSamplersInfoEXT & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorBufferEmbeddedSamplersInfoEXT & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT + { + set = set_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindDescriptorBufferEmbeddedSamplersInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindDescriptorBufferEmbeddedSamplersInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindDescriptorBufferEmbeddedSamplersInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindDescriptorBufferEmbeddedSamplersInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stageFlags, layout, set ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindDescriptorBufferEmbeddedSamplersInfoEXT const & ) const = default; +#else + bool operator==( BindDescriptorBufferEmbeddedSamplersInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageFlags == rhs.stageFlags ) && ( layout == rhs.layout ) && ( set == rhs.set ); +# endif + } + + bool operator!=( BindDescriptorBufferEmbeddedSamplersInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindDescriptorBufferEmbeddedSamplersInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + uint32_t set = {}; + }; + + template <> + struct CppType + { + using Type = BindDescriptorBufferEmbeddedSamplersInfoEXT; + }; + + // wrapper struct for struct VkBindDescriptorSetsInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindDescriptorSetsInfo.html + struct BindDescriptorSetsInfo + { + using NativeType = VkBindDescriptorSetsInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindDescriptorSetsInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindDescriptorSetsInfo( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + uint32_t firstSet_ = {}, + uint32_t descriptorSetCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets_ = {}, + uint32_t dynamicOffsetCount_ = {}, + const uint32_t * pDynamicOffsets_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stageFlags{ stageFlags_ } + , layout{ layout_ } + , firstSet{ firstSet_ } + , descriptorSetCount{ descriptorSetCount_ } + , pDescriptorSets{ pDescriptorSets_ } + , dynamicOffsetCount{ dynamicOffsetCount_ } + , pDynamicOffsets{ pDynamicOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR BindDescriptorSetsInfo( BindDescriptorSetsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindDescriptorSetsInfo( VkBindDescriptorSetsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BindDescriptorSetsInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindDescriptorSetsInfo( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_, + uint32_t firstSet_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorSets_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicOffsets_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stageFlags( stageFlags_ ) + , layout( layout_ ) + , firstSet( firstSet_ ) + , descriptorSetCount( static_cast( descriptorSets_.size() ) ) + , pDescriptorSets( descriptorSets_.data() ) + , dynamicOffsetCount( static_cast( dynamicOffsets_.size() ) ) + , pDynamicOffsets( dynamicOffsets_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BindDescriptorSetsInfo & operator=( BindDescriptorSetsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindDescriptorSetsInfo & operator=( VkBindDescriptorSetsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setFirstSet( uint32_t firstSet_ ) VULKAN_HPP_NOEXCEPT + { + firstSet = firstSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetCount = descriptorSetCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setPDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets_ ) VULKAN_HPP_NOEXCEPT + { + pDescriptorSets = pDescriptorSets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindDescriptorSetsInfo & + setDescriptorSets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorSets_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetCount = static_cast( descriptorSets_.size() ); + pDescriptorSets = descriptorSets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setDynamicOffsetCount( uint32_t dynamicOffsetCount_ ) VULKAN_HPP_NOEXCEPT + { + dynamicOffsetCount = dynamicOffsetCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindDescriptorSetsInfo & setPDynamicOffsets( const uint32_t * pDynamicOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pDynamicOffsets = pDynamicOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindDescriptorSetsInfo & setDynamicOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicOffsets_ ) VULKAN_HPP_NOEXCEPT + { + dynamicOffsetCount = static_cast( dynamicOffsets_.size() ); + pDynamicOffsets = dynamicOffsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindDescriptorSetsInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindDescriptorSetsInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindDescriptorSetsInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindDescriptorSetsInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stageFlags, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindDescriptorSetsInfo const & ) const = default; +#else + bool operator==( BindDescriptorSetsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageFlags == rhs.stageFlags ) && ( layout == rhs.layout ) && ( firstSet == rhs.firstSet ) && + ( descriptorSetCount == rhs.descriptorSetCount ) && ( pDescriptorSets == rhs.pDescriptorSets ) && + ( dynamicOffsetCount == rhs.dynamicOffsetCount ) && ( pDynamicOffsets == rhs.pDynamicOffsets ); +# endif + } + + bool operator!=( BindDescriptorSetsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindDescriptorSetsInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + uint32_t firstSet = {}; + uint32_t descriptorSetCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets = {}; + uint32_t dynamicOffsetCount = {}; + const uint32_t * pDynamicOffsets = {}; + }; + + template <> + struct CppType + { + using Type = BindDescriptorSetsInfo; + }; + + using BindDescriptorSetsInfoKHR = BindDescriptorSetsInfo; + + // wrapper struct for struct VkOffset2D, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOffset2D.html + struct Offset2D + { + using NativeType = VkOffset2D; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Offset2D( int32_t x_ = {}, int32_t y_ = {} ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + { + } + + VULKAN_HPP_CONSTEXPR Offset2D( Offset2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Offset2D( VkOffset2D const & rhs ) VULKAN_HPP_NOEXCEPT : Offset2D( *reinterpret_cast( &rhs ) ) {} + + Offset2D & operator=( Offset2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Offset2D & operator=( VkOffset2D const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Offset2D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Offset2D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOffset2D const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOffset2D &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOffset2D const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOffset2D *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Offset2D const & ) const = default; +#else + bool operator==( Offset2D const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ); +# endif + } + + bool operator!=( Offset2D const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + int32_t x = {}; + int32_t y = {}; + }; + + // wrapper struct for struct VkRect2D, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRect2D.html + struct Rect2D + { + using NativeType = VkRect2D; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Rect2D( VULKAN_HPP_NAMESPACE::Offset2D offset_ = {}, VULKAN_HPP_NAMESPACE::Extent2D extent_ = {} ) VULKAN_HPP_NOEXCEPT + : offset{ offset_ } + , extent{ extent_ } + { + } + + VULKAN_HPP_CONSTEXPR Rect2D( Rect2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Rect2D( VkRect2D const & rhs ) VULKAN_HPP_NOEXCEPT : Rect2D( *reinterpret_cast( &rhs ) ) {} + + Rect2D & operator=( Rect2D const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Rect2D & operator=( VkRect2D const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Rect2D & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Rect2D & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRect2D const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRect2D &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRect2D const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRect2D *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( offset, extent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Rect2D const & ) const = default; +#else + bool operator==( Rect2D const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( offset == rhs.offset ) && ( extent == rhs.extent ); +# endif + } + + bool operator!=( Rect2D const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Offset2D offset = {}; + VULKAN_HPP_NAMESPACE::Extent2D extent = {}; + }; + + // wrapper struct for struct VkBindImageMemoryDeviceGroupInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindImageMemoryDeviceGroupInfo.html + struct BindImageMemoryDeviceGroupInfo + { + using NativeType = VkBindImageMemoryDeviceGroupInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryDeviceGroupInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindImageMemoryDeviceGroupInfo( uint32_t deviceIndexCount_ = {}, + const uint32_t * pDeviceIndices_ = {}, + uint32_t splitInstanceBindRegionCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceIndexCount{ deviceIndexCount_ } + , pDeviceIndices{ pDeviceIndices_ } + , splitInstanceBindRegionCount{ splitInstanceBindRegionCount_ } + , pSplitInstanceBindRegions{ pSplitInstanceBindRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR BindImageMemoryDeviceGroupInfo( BindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindImageMemoryDeviceGroupInfo( VkBindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BindImageMemoryDeviceGroupInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindImageMemoryDeviceGroupInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & splitInstanceBindRegions_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , deviceIndexCount( static_cast( deviceIndices_.size() ) ) + , pDeviceIndices( deviceIndices_.data() ) + , splitInstanceBindRegionCount( static_cast( splitInstanceBindRegions_.size() ) ) + , pSplitInstanceBindRegions( splitInstanceBindRegions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BindImageMemoryDeviceGroupInfo & operator=( BindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindImageMemoryDeviceGroupInfo & operator=( VkBindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndexCount = deviceIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + pDeviceIndices = pDeviceIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindImageMemoryDeviceGroupInfo & + setDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndexCount = static_cast( deviceIndices_.size() ); + pDeviceIndices = deviceIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setSplitInstanceBindRegionCount( uint32_t splitInstanceBindRegionCount_ ) VULKAN_HPP_NOEXCEPT + { + splitInstanceBindRegionCount = splitInstanceBindRegionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & + setPSplitInstanceBindRegions( const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions_ ) VULKAN_HPP_NOEXCEPT + { + pSplitInstanceBindRegions = pSplitInstanceBindRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindImageMemoryDeviceGroupInfo & setSplitInstanceBindRegions( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & splitInstanceBindRegions_ ) VULKAN_HPP_NOEXCEPT + { + splitInstanceBindRegionCount = static_cast( splitInstanceBindRegions_.size() ); + pSplitInstanceBindRegions = splitInstanceBindRegions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindImageMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImageMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImageMemoryDeviceGroupInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindImageMemoryDeviceGroupInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceIndexCount, pDeviceIndices, splitInstanceBindRegionCount, pSplitInstanceBindRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindImageMemoryDeviceGroupInfo const & ) const = default; +#else + bool operator==( BindImageMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndexCount == rhs.deviceIndexCount ) && ( pDeviceIndices == rhs.pDeviceIndices ) && + ( splitInstanceBindRegionCount == rhs.splitInstanceBindRegionCount ) && ( pSplitInstanceBindRegions == rhs.pSplitInstanceBindRegions ); +# endif + } + + bool operator!=( BindImageMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImageMemoryDeviceGroupInfo; + const void * pNext = {}; + uint32_t deviceIndexCount = {}; + const uint32_t * pDeviceIndices = {}; + uint32_t splitInstanceBindRegionCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions = {}; + }; + + template <> + struct CppType + { + using Type = BindImageMemoryDeviceGroupInfo; + }; + + using BindImageMemoryDeviceGroupInfoKHR = BindImageMemoryDeviceGroupInfo; + + // wrapper struct for struct VkBindImageMemoryInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindImageMemoryInfo.html + struct BindImageMemoryInfo + { + using NativeType = VkBindImageMemoryInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindImageMemoryInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR BindImageMemoryInfo( BindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindImageMemoryInfo( VkBindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT : BindImageMemoryInfo( *reinterpret_cast( &rhs ) ) + { + } + + BindImageMemoryInfo & operator=( BindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindImageMemoryInfo & operator=( VkBindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindImageMemoryInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImageMemoryInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImageMemoryInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindImageMemoryInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image, memory, memoryOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindImageMemoryInfo const & ) const = default; +#else + bool operator==( BindImageMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ); +# endif + } + + bool operator!=( BindImageMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImageMemoryInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + }; + + template <> + struct CppType + { + using Type = BindImageMemoryInfo; + }; + + using BindImageMemoryInfoKHR = BindImageMemoryInfo; + + // wrapper struct for struct VkBindImageMemorySwapchainInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindImageMemorySwapchainInfoKHR.html + struct BindImageMemorySwapchainInfoKHR + { + using NativeType = VkBindImageMemorySwapchainInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemorySwapchainInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindImageMemorySwapchainInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, + uint32_t imageIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchain{ swapchain_ } + , imageIndex{ imageIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR BindImageMemorySwapchainInfoKHR( BindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindImageMemorySwapchainInfoKHR( VkBindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : BindImageMemorySwapchainInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + BindImageMemorySwapchainInfoKHR & operator=( BindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindImageMemorySwapchainInfoKHR & operator=( VkBindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT + { + swapchain = swapchain_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setImageIndex( uint32_t imageIndex_ ) VULKAN_HPP_NOEXCEPT + { + imageIndex = imageIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindImageMemorySwapchainInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImageMemorySwapchainInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImageMemorySwapchainInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindImageMemorySwapchainInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchain, imageIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindImageMemorySwapchainInfoKHR const & ) const = default; +#else + bool operator==( BindImageMemorySwapchainInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) && ( imageIndex == rhs.imageIndex ); +# endif + } + + bool operator!=( BindImageMemorySwapchainInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImageMemorySwapchainInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; + uint32_t imageIndex = {}; + }; + + template <> + struct CppType + { + using Type = BindImageMemorySwapchainInfoKHR; + }; + + // wrapper struct for struct VkBindImagePlaneMemoryInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindImagePlaneMemoryInfo.html + struct BindImagePlaneMemoryInfo + { + using NativeType = VkBindImagePlaneMemoryInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImagePlaneMemoryInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindImagePlaneMemoryInfo( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , planeAspect{ planeAspect_ } + { + } + + VULKAN_HPP_CONSTEXPR BindImagePlaneMemoryInfo( BindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindImagePlaneMemoryInfo( VkBindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BindImagePlaneMemoryInfo( *reinterpret_cast( &rhs ) ) + { + } + + BindImagePlaneMemoryInfo & operator=( BindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindImagePlaneMemoryInfo & operator=( VkBindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo & setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT + { + planeAspect = planeAspect_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindImagePlaneMemoryInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImagePlaneMemoryInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindImagePlaneMemoryInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindImagePlaneMemoryInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, planeAspect ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindImagePlaneMemoryInfo const & ) const = default; +#else + bool operator==( BindImagePlaneMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( planeAspect == rhs.planeAspect ); +# endif + } + + bool operator!=( BindImagePlaneMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindImagePlaneMemoryInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; + }; + + template <> + struct CppType + { + using Type = BindImagePlaneMemoryInfo; + }; + + using BindImagePlaneMemoryInfoKHR = BindImagePlaneMemoryInfo; + + // wrapper struct for struct VkBindIndexBufferIndirectCommandEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindIndexBufferIndirectCommandEXT.html + struct BindIndexBufferIndirectCommandEXT + { + using NativeType = VkBindIndexBufferIndirectCommandEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + BindIndexBufferIndirectCommandEXT( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, + uint32_t size_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16 ) VULKAN_HPP_NOEXCEPT + : bufferAddress{ bufferAddress_ } + , size{ size_ } + , indexType{ indexType_ } + { + } + + VULKAN_HPP_CONSTEXPR BindIndexBufferIndirectCommandEXT( BindIndexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindIndexBufferIndirectCommandEXT( VkBindIndexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : BindIndexBufferIndirectCommandEXT( *reinterpret_cast( &rhs ) ) + { + } + + BindIndexBufferIndirectCommandEXT & operator=( BindIndexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindIndexBufferIndirectCommandEXT & operator=( VkBindIndexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandEXT & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferAddress = bufferAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandEXT & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandEXT & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindIndexBufferIndirectCommandEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindIndexBufferIndirectCommandEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindIndexBufferIndirectCommandEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindIndexBufferIndirectCommandEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( bufferAddress, size, indexType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindIndexBufferIndirectCommandEXT const & ) const = default; +#else + bool operator==( BindIndexBufferIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( indexType == rhs.indexType ); +# endif + } + + bool operator!=( BindIndexBufferIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; + uint32_t size = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + }; + + // wrapper struct for struct VkBindIndexBufferIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindIndexBufferIndirectCommandNV.html + struct BindIndexBufferIndirectCommandNV + { + using NativeType = VkBindIndexBufferIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + BindIndexBufferIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, + uint32_t size_ = {}, + VULKAN_HPP_NAMESPACE::IndexType indexType_ = VULKAN_HPP_NAMESPACE::IndexType::eUint16 ) VULKAN_HPP_NOEXCEPT + : bufferAddress{ bufferAddress_ } + , size{ size_ } + , indexType{ indexType_ } + { + } + + VULKAN_HPP_CONSTEXPR BindIndexBufferIndirectCommandNV( BindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindIndexBufferIndirectCommandNV( VkBindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BindIndexBufferIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + BindIndexBufferIndirectCommandNV & operator=( BindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindIndexBufferIndirectCommandNV & operator=( VkBindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferAddress = bufferAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindIndexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindIndexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindIndexBufferIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindIndexBufferIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( bufferAddress, size, indexType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindIndexBufferIndirectCommandNV const & ) const = default; +#else + bool operator==( BindIndexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( indexType == rhs.indexType ); +# endif + } + + bool operator!=( BindIndexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; + uint32_t size = {}; + VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16; + }; + + // wrapper struct for struct VkBindMemoryStatus, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindMemoryStatus.html + struct BindMemoryStatus + { + using NativeType = VkBindMemoryStatus; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindMemoryStatus; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindMemoryStatus( VULKAN_HPP_NAMESPACE::Result * pResult_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pResult{ pResult_ } + { + } + + VULKAN_HPP_CONSTEXPR BindMemoryStatus( BindMemoryStatus const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindMemoryStatus( VkBindMemoryStatus const & rhs ) VULKAN_HPP_NOEXCEPT : BindMemoryStatus( *reinterpret_cast( &rhs ) ) {} + + BindMemoryStatus & operator=( BindMemoryStatus const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindMemoryStatus & operator=( VkBindMemoryStatus const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindMemoryStatus & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindMemoryStatus & setPResult( VULKAN_HPP_NAMESPACE::Result * pResult_ ) VULKAN_HPP_NOEXCEPT + { + pResult = pResult_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindMemoryStatus const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindMemoryStatus &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindMemoryStatus const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindMemoryStatus *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pResult ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindMemoryStatus const & ) const = default; +#else + bool operator==( BindMemoryStatus const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pResult == rhs.pResult ); +# endif + } + + bool operator!=( BindMemoryStatus const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindMemoryStatus; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Result * pResult = {}; + }; + + template <> + struct CppType + { + using Type = BindMemoryStatus; + }; + + using BindMemoryStatusKHR = BindMemoryStatus; + + // wrapper struct for struct VkBindPipelineIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindPipelineIndirectCommandNV.html + struct BindPipelineIndirectCommandNV + { + using NativeType = VkBindPipelineIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindPipelineIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress pipelineAddress_ = {} ) VULKAN_HPP_NOEXCEPT + : pipelineAddress{ pipelineAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR BindPipelineIndirectCommandNV( BindPipelineIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindPipelineIndirectCommandNV( VkBindPipelineIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BindPipelineIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + BindPipelineIndirectCommandNV & operator=( BindPipelineIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindPipelineIndirectCommandNV & operator=( VkBindPipelineIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindPipelineIndirectCommandNV & setPipelineAddress( VULKAN_HPP_NAMESPACE::DeviceAddress pipelineAddress_ ) VULKAN_HPP_NOEXCEPT + { + pipelineAddress = pipelineAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindPipelineIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindPipelineIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindPipelineIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindPipelineIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( pipelineAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindPipelineIndirectCommandNV const & ) const = default; +#else + bool operator==( BindPipelineIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( pipelineAddress == rhs.pipelineAddress ); +# endif + } + + bool operator!=( BindPipelineIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress pipelineAddress = {}; + }; + + // wrapper struct for struct VkBindShaderGroupIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindShaderGroupIndirectCommandNV.html + struct BindShaderGroupIndirectCommandNV + { + using NativeType = VkBindShaderGroupIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindShaderGroupIndirectCommandNV( uint32_t groupIndex_ = {} ) VULKAN_HPP_NOEXCEPT : groupIndex{ groupIndex_ } {} + + VULKAN_HPP_CONSTEXPR BindShaderGroupIndirectCommandNV( BindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindShaderGroupIndirectCommandNV( VkBindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BindShaderGroupIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + BindShaderGroupIndirectCommandNV & operator=( BindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindShaderGroupIndirectCommandNV & operator=( VkBindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindShaderGroupIndirectCommandNV & setGroupIndex( uint32_t groupIndex_ ) VULKAN_HPP_NOEXCEPT + { + groupIndex = groupIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindShaderGroupIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindShaderGroupIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindShaderGroupIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindShaderGroupIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( groupIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindShaderGroupIndirectCommandNV const & ) const = default; +#else + bool operator==( BindShaderGroupIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( groupIndex == rhs.groupIndex ); +# endif + } + + bool operator!=( BindShaderGroupIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t groupIndex = {}; + }; + + // wrapper struct for struct VkSparseMemoryBind, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseMemoryBind.html + struct SparseMemoryBind + { + using NativeType = VkSparseMemoryBind; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseMemoryBind( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT + : resourceOffset{ resourceOffset_ } + , size{ size_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseMemoryBind( SparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseMemoryBind( VkSparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT : SparseMemoryBind( *reinterpret_cast( &rhs ) ) {} + + SparseMemoryBind & operator=( SparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseMemoryBind & operator=( VkSparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setResourceOffset( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ ) VULKAN_HPP_NOEXCEPT + { + resourceOffset = resourceOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSparseMemoryBind const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseMemoryBind &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseMemoryBind const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseMemoryBind *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( resourceOffset, size, memory, memoryOffset, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseMemoryBind const & ) const = default; +#else + bool operator==( SparseMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( resourceOffset == rhs.resourceOffset ) && ( size == rhs.size ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ) && + ( flags == rhs.flags ); +# endif + } + + bool operator!=( SparseMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags = {}; + }; + + // wrapper struct for struct VkSparseBufferMemoryBindInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseBufferMemoryBindInfo.html + struct SparseBufferMemoryBindInfo + { + using NativeType = VkSparseBufferMemoryBindInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseBufferMemoryBindInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + uint32_t bindCount_ = {}, + const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ = {} ) VULKAN_HPP_NOEXCEPT + : buffer{ buffer_ } + , bindCount{ bindCount_ } + , pBinds{ pBinds_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseBufferMemoryBindInfo( SparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseBufferMemoryBindInfo( VkSparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseBufferMemoryBindInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SparseBufferMemoryBindInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) + : buffer( buffer_ ), bindCount( static_cast( binds_.size() ) ), pBinds( binds_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SparseBufferMemoryBindInfo & operator=( SparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseBufferMemoryBindInfo & operator=( VkSparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT + { + bindCount = bindCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT + { + pBinds = pBinds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SparseBufferMemoryBindInfo & + setBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) VULKAN_HPP_NOEXCEPT + { + bindCount = static_cast( binds_.size() ); + pBinds = binds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSparseBufferMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseBufferMemoryBindInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseBufferMemoryBindInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseBufferMemoryBindInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( buffer, bindCount, pBinds ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseBufferMemoryBindInfo const & ) const = default; +#else + bool operator==( SparseBufferMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( buffer == rhs.buffer ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds ); +# endif + } + + bool operator!=( SparseBufferMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + uint32_t bindCount = {}; + const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds = {}; + }; + + // wrapper struct for struct VkSparseImageOpaqueMemoryBindInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageOpaqueMemoryBindInfo.html + struct SparseImageOpaqueMemoryBindInfo + { + using NativeType = VkSparseImageOpaqueMemoryBindInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageOpaqueMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, + uint32_t bindCount_ = {}, + const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ = {} ) VULKAN_HPP_NOEXCEPT + : image{ image_ } + , bindCount{ bindCount_ } + , pBinds{ pBinds_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageOpaqueMemoryBindInfo( SparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageOpaqueMemoryBindInfo( VkSparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageOpaqueMemoryBindInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SparseImageOpaqueMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) + : image( image_ ), bindCount( static_cast( binds_.size() ) ), pBinds( binds_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SparseImageOpaqueMemoryBindInfo & operator=( SparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageOpaqueMemoryBindInfo & operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT + { + bindCount = bindCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT + { + pBinds = pBinds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SparseImageOpaqueMemoryBindInfo & + setBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) VULKAN_HPP_NOEXCEPT + { + bindCount = static_cast( binds_.size() ); + pBinds = binds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSparseImageOpaqueMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageOpaqueMemoryBindInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageOpaqueMemoryBindInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageOpaqueMemoryBindInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( image, bindCount, pBinds ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageOpaqueMemoryBindInfo const & ) const = default; +#else + bool operator==( SparseImageOpaqueMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( image == rhs.image ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds ); +# endif + } + + bool operator!=( SparseImageOpaqueMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Image image = {}; + uint32_t bindCount = {}; + const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds = {}; + }; + + // wrapper struct for struct VkImageSubresource, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageSubresource.html + struct ImageSubresource + { + using NativeType = VkImageSubresource; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ImageSubresource( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, uint32_t mipLevel_ = {}, uint32_t arrayLayer_ = {} ) VULKAN_HPP_NOEXCEPT + : aspectMask{ aspectMask_ } + , mipLevel{ mipLevel_ } + , arrayLayer{ arrayLayer_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageSubresource( ImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageSubresource( VkImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT : ImageSubresource( *reinterpret_cast( &rhs ) ) {} + + ImageSubresource & operator=( ImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageSubresource & operator=( VkImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT + { + aspectMask = aspectMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT + { + mipLevel = mipLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setArrayLayer( uint32_t arrayLayer_ ) VULKAN_HPP_NOEXCEPT + { + arrayLayer = arrayLayer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageSubresource const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresource &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresource const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageSubresource *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( aspectMask, mipLevel, arrayLayer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageSubresource const & ) const = default; +#else + bool operator==( ImageSubresource const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( aspectMask == rhs.aspectMask ) && ( mipLevel == rhs.mipLevel ) && ( arrayLayer == rhs.arrayLayer ); +# endif + } + + bool operator!=( ImageSubresource const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + uint32_t mipLevel = {}; + uint32_t arrayLayer = {}; + }; + + // wrapper struct for struct VkOffset3D, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOffset3D.html + struct Offset3D + { + using NativeType = VkOffset3D; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Offset3D( int32_t x_ = {}, int32_t y_ = {}, int32_t z_ = {} ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + , z{ z_ } + { + } + + VULKAN_HPP_CONSTEXPR Offset3D( Offset3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Offset3D( VkOffset3D const & rhs ) VULKAN_HPP_NOEXCEPT : Offset3D( *reinterpret_cast( &rhs ) ) {} + + explicit Offset3D( Offset2D const & offset2D, int32_t z_ = {} ) : x( offset2D.x ), y( offset2D.y ), z( z_ ) {} + + Offset3D & operator=( Offset3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Offset3D & operator=( VkOffset3D const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Offset3D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Offset3D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Offset3D & setZ( int32_t z_ ) VULKAN_HPP_NOEXCEPT + { + z = z_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOffset3D const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOffset3D &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOffset3D const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOffset3D *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y, z ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Offset3D const & ) const = default; +#else + bool operator==( Offset3D const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ); +# endif + } + + bool operator!=( Offset3D const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + int32_t x = {}; + int32_t y = {}; + int32_t z = {}; + }; + + // wrapper struct for struct VkExtent3D, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExtent3D.html + struct Extent3D + { + using NativeType = VkExtent3D; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Extent3D( uint32_t width_ = {}, uint32_t height_ = {}, uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT + : width{ width_ } + , height{ height_ } + , depth{ depth_ } + { + } + + VULKAN_HPP_CONSTEXPR Extent3D( Extent3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Extent3D( VkExtent3D const & rhs ) VULKAN_HPP_NOEXCEPT : Extent3D( *reinterpret_cast( &rhs ) ) {} + + explicit Extent3D( Extent2D const & extent2D, uint32_t depth_ = {} ) : width( extent2D.width ), height( extent2D.height ), depth( depth_ ) {} + + Extent3D & operator=( Extent3D const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Extent3D & operator=( VkExtent3D const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Extent3D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Extent3D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Extent3D & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT + { + depth = depth_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExtent3D const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExtent3D &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExtent3D const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExtent3D *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( width, height, depth ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Extent3D const & ) const = default; +#else + bool operator==( Extent3D const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( width == rhs.width ) && ( height == rhs.height ) && ( depth == rhs.depth ); +# endif + } + + bool operator!=( Extent3D const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t width = {}; + uint32_t height = {}; + uint32_t depth = {}; + }; + + // wrapper struct for struct VkSparseImageMemoryBind, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageMemoryBind.html + struct SparseImageMemoryBind + { + using NativeType = VkSparseImageMemoryBind; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageMemoryBind( VULKAN_HPP_NAMESPACE::ImageSubresource subresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D offset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT + : subresource{ subresource_ } + , offset{ offset_ } + , extent{ extent_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageMemoryBind( SparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageMemoryBind( VkSparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageMemoryBind( *reinterpret_cast( &rhs ) ) + { + } + + SparseImageMemoryBind & operator=( SparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageMemoryBind & operator=( VkSparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setSubresource( VULKAN_HPP_NAMESPACE::ImageSubresource const & subresource_ ) VULKAN_HPP_NOEXCEPT + { + subresource = subresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setOffset( VULKAN_HPP_NAMESPACE::Offset3D const & offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind & setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSparseImageMemoryBind const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryBind &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryBind const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageMemoryBind *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( subresource, offset, extent, memory, memoryOffset, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageMemoryBind const & ) const = default; +#else + bool operator==( SparseImageMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( subresource == rhs.subresource ) && ( offset == rhs.offset ) && ( extent == rhs.extent ) && ( memory == rhs.memory ) && + ( memoryOffset == rhs.memoryOffset ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( SparseImageMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageSubresource subresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D offset = {}; + VULKAN_HPP_NAMESPACE::Extent3D extent = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags = {}; + }; + + // wrapper struct for struct VkSparseImageMemoryBindInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageMemoryBindInfo.html + struct SparseImageMemoryBindInfo + { + using NativeType = VkSparseImageMemoryBindInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, + uint32_t bindCount_ = {}, + const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds_ = {} ) VULKAN_HPP_NOEXCEPT + : image{ image_ } + , bindCount{ bindCount_ } + , pBinds{ pBinds_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageMemoryBindInfo( SparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageMemoryBindInfo( VkSparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageMemoryBindInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SparseImageMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) + : image( image_ ), bindCount( static_cast( binds_.size() ) ), pBinds( binds_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SparseImageMemoryBindInfo & operator=( SparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageMemoryBindInfo & operator=( VkSparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT + { + bindCount = bindCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT + { + pBinds = pBinds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SparseImageMemoryBindInfo & + setBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & binds_ ) VULKAN_HPP_NOEXCEPT + { + bindCount = static_cast( binds_.size() ); + pBinds = binds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSparseImageMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryBindInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryBindInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageMemoryBindInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( image, bindCount, pBinds ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageMemoryBindInfo const & ) const = default; +#else + bool operator==( SparseImageMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( image == rhs.image ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds ); +# endif + } + + bool operator!=( SparseImageMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Image image = {}; + uint32_t bindCount = {}; + const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds = {}; + }; + + // wrapper struct for struct VkBindSparseInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindSparseInfo.html + struct BindSparseInfo + { + using NativeType = VkBindSparseInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindSparseInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindSparseInfo( uint32_t waitSemaphoreCount_ = {}, + const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ = {}, + uint32_t bufferBindCount_ = {}, + const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds_ = {}, + uint32_t imageOpaqueBindCount_ = {}, + const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds_ = {}, + uint32_t imageBindCount_ = {}, + const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds_ = {}, + uint32_t signalSemaphoreCount_ = {}, + const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , waitSemaphoreCount{ waitSemaphoreCount_ } + , pWaitSemaphores{ pWaitSemaphores_ } + , bufferBindCount{ bufferBindCount_ } + , pBufferBinds{ pBufferBinds_ } + , imageOpaqueBindCount{ imageOpaqueBindCount_ } + , pImageOpaqueBinds{ pImageOpaqueBinds_ } + , imageBindCount{ imageBindCount_ } + , pImageBinds{ pImageBinds_ } + , signalSemaphoreCount{ signalSemaphoreCount_ } + , pSignalSemaphores{ pSignalSemaphores_ } + { + } + + VULKAN_HPP_CONSTEXPR BindSparseInfo( BindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindSparseInfo( VkBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT : BindSparseInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindSparseInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferBinds_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageOpaqueBinds_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageBinds_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , waitSemaphoreCount( static_cast( waitSemaphores_.size() ) ) + , pWaitSemaphores( waitSemaphores_.data() ) + , bufferBindCount( static_cast( bufferBinds_.size() ) ) + , pBufferBinds( bufferBinds_.data() ) + , imageOpaqueBindCount( static_cast( imageOpaqueBinds_.size() ) ) + , pImageOpaqueBinds( imageOpaqueBinds_.data() ) + , imageBindCount( static_cast( imageBinds_.size() ) ) + , pImageBinds( imageBinds_.data() ) + , signalSemaphoreCount( static_cast( signalSemaphores_.size() ) ) + , pSignalSemaphores( signalSemaphores_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BindSparseInfo & operator=( BindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindSparseInfo & operator=( VkBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = waitSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphores = pWaitSemaphores_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindSparseInfo & + setWaitSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = static_cast( waitSemaphores_.size() ); + pWaitSemaphores = waitSemaphores_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setBufferBindCount( uint32_t bufferBindCount_ ) VULKAN_HPP_NOEXCEPT + { + bufferBindCount = bufferBindCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPBufferBinds( const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds_ ) VULKAN_HPP_NOEXCEPT + { + pBufferBinds = pBufferBinds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindSparseInfo & setBufferBinds( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferBinds_ ) VULKAN_HPP_NOEXCEPT + { + bufferBindCount = static_cast( bufferBinds_.size() ); + pBufferBinds = bufferBinds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ ) VULKAN_HPP_NOEXCEPT + { + imageOpaqueBindCount = imageOpaqueBindCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & + setPImageOpaqueBinds( const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds_ ) VULKAN_HPP_NOEXCEPT + { + pImageOpaqueBinds = pImageOpaqueBinds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindSparseInfo & setImageOpaqueBinds( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageOpaqueBinds_ ) VULKAN_HPP_NOEXCEPT + { + imageOpaqueBindCount = static_cast( imageOpaqueBinds_.size() ); + pImageOpaqueBinds = imageOpaqueBinds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setImageBindCount( uint32_t imageBindCount_ ) VULKAN_HPP_NOEXCEPT + { + imageBindCount = imageBindCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPImageBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds_ ) VULKAN_HPP_NOEXCEPT + { + pImageBinds = pImageBinds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindSparseInfo & setImageBinds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageBinds_ ) + VULKAN_HPP_NOEXCEPT + { + imageBindCount = static_cast( imageBinds_.size() ); + pImageBinds = imageBinds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreCount = signalSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + pSignalSemaphores = pSignalSemaphores_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BindSparseInfo & + setSignalSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreCount = static_cast( signalSemaphores_.size() ); + pSignalSemaphores = signalSemaphores_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindSparseInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindSparseInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindSparseInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + waitSemaphoreCount, + pWaitSemaphores, + bufferBindCount, + pBufferBinds, + imageOpaqueBindCount, + pImageOpaqueBinds, + imageBindCount, + pImageBinds, + signalSemaphoreCount, + pSignalSemaphores ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindSparseInfo const & ) const = default; +#else + bool operator==( BindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && + ( pWaitSemaphores == rhs.pWaitSemaphores ) && ( bufferBindCount == rhs.bufferBindCount ) && ( pBufferBinds == rhs.pBufferBinds ) && + ( imageOpaqueBindCount == rhs.imageOpaqueBindCount ) && ( pImageOpaqueBinds == rhs.pImageOpaqueBinds ) && + ( imageBindCount == rhs.imageBindCount ) && ( pImageBinds == rhs.pImageBinds ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) && + ( pSignalSemaphores == rhs.pSignalSemaphores ); +# endif + } + + bool operator!=( BindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindSparseInfo; + const void * pNext = {}; + uint32_t waitSemaphoreCount = {}; + const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores = {}; + uint32_t bufferBindCount = {}; + const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds = {}; + uint32_t imageOpaqueBindCount = {}; + const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds = {}; + uint32_t imageBindCount = {}; + const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds = {}; + uint32_t signalSemaphoreCount = {}; + const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores = {}; + }; + + template <> + struct CppType + { + using Type = BindSparseInfo; + }; + + // wrapper struct for struct VkBindTensorMemoryInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindTensorMemoryInfoARM.html + struct BindTensorMemoryInfoARM + { + using NativeType = VkBindTensorMemoryInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindTensorMemoryInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindTensorMemoryInfoARM( VULKAN_HPP_NAMESPACE::TensorARM tensor_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensor{ tensor_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR BindTensorMemoryInfoARM( BindTensorMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindTensorMemoryInfoARM( VkBindTensorMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : BindTensorMemoryInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + BindTensorMemoryInfoARM & operator=( BindTensorMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindTensorMemoryInfoARM & operator=( VkBindTensorMemoryInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindTensorMemoryInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindTensorMemoryInfoARM & setTensor( VULKAN_HPP_NAMESPACE::TensorARM tensor_ ) VULKAN_HPP_NOEXCEPT + { + tensor = tensor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindTensorMemoryInfoARM & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindTensorMemoryInfoARM & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindTensorMemoryInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindTensorMemoryInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindTensorMemoryInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindTensorMemoryInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensor, memory, memoryOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindTensorMemoryInfoARM const & ) const = default; +#else + bool operator==( BindTensorMemoryInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensor == rhs.tensor ) && ( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ); +# endif + } + + bool operator!=( BindTensorMemoryInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindTensorMemoryInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorARM tensor = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + }; + + template <> + struct CppType + { + using Type = BindTensorMemoryInfoARM; + }; + + // wrapper struct for struct VkBindVertexBufferIndirectCommandEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindVertexBufferIndirectCommandEXT.html + struct BindVertexBufferIndirectCommandEXT + { + using NativeType = VkBindVertexBufferIndirectCommandEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandEXT( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, + uint32_t size_ = {}, + uint32_t stride_ = {} ) VULKAN_HPP_NOEXCEPT + : bufferAddress{ bufferAddress_ } + , size{ size_ } + , stride{ stride_ } + { + } + + VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandEXT( BindVertexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindVertexBufferIndirectCommandEXT( VkBindVertexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : BindVertexBufferIndirectCommandEXT( *reinterpret_cast( &rhs ) ) + { + } + + BindVertexBufferIndirectCommandEXT & operator=( BindVertexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindVertexBufferIndirectCommandEXT & operator=( VkBindVertexBufferIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandEXT & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferAddress = bufferAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandEXT & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandEXT & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindVertexBufferIndirectCommandEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindVertexBufferIndirectCommandEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindVertexBufferIndirectCommandEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindVertexBufferIndirectCommandEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( bufferAddress, size, stride ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindVertexBufferIndirectCommandEXT const & ) const = default; +#else + bool operator==( BindVertexBufferIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( stride == rhs.stride ); +# endif + } + + bool operator!=( BindVertexBufferIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; + uint32_t size = {}; + uint32_t stride = {}; + }; + + // wrapper struct for struct VkBindVertexBufferIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindVertexBufferIndirectCommandNV.html + struct BindVertexBufferIndirectCommandNV + { + using NativeType = VkBindVertexBufferIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, + uint32_t size_ = {}, + uint32_t stride_ = {} ) VULKAN_HPP_NOEXCEPT + : bufferAddress{ bufferAddress_ } + , size{ size_ } + , stride{ stride_ } + { + } + + VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandNV( BindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindVertexBufferIndirectCommandNV( VkBindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BindVertexBufferIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + BindVertexBufferIndirectCommandNV & operator=( BindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindVertexBufferIndirectCommandNV & operator=( VkBindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferAddress = bufferAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindVertexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindVertexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindVertexBufferIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindVertexBufferIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( bufferAddress, size, stride ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindVertexBufferIndirectCommandNV const & ) const = default; +#else + bool operator==( BindVertexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( stride == rhs.stride ); +# endif + } + + bool operator!=( BindVertexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; + uint32_t size = {}; + uint32_t stride = {}; + }; + + // wrapper struct for struct VkBindVideoSessionMemoryInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBindVideoSessionMemoryInfoKHR.html + struct BindVideoSessionMemoryInfoKHR + { + using NativeType = VkBindVideoSessionMemoryInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindVideoSessionMemoryInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BindVideoSessionMemoryInfoKHR( uint32_t memoryBindIndex_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize memorySize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryBindIndex{ memoryBindIndex_ } + , memory{ memory_ } + , memoryOffset{ memoryOffset_ } + , memorySize{ memorySize_ } + { + } + + VULKAN_HPP_CONSTEXPR BindVideoSessionMemoryInfoKHR( BindVideoSessionMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BindVideoSessionMemoryInfoKHR( VkBindVideoSessionMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : BindVideoSessionMemoryInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + BindVideoSessionMemoryInfoKHR & operator=( BindVideoSessionMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BindVideoSessionMemoryInfoKHR & operator=( VkBindVideoSessionMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BindVideoSessionMemoryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVideoSessionMemoryInfoKHR & setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT + { + memoryBindIndex = memoryBindIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVideoSessionMemoryInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVideoSessionMemoryInfoKHR & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT + { + memoryOffset = memoryOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BindVideoSessionMemoryInfoKHR & setMemorySize( VULKAN_HPP_NAMESPACE::DeviceSize memorySize_ ) VULKAN_HPP_NOEXCEPT + { + memorySize = memorySize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBindVideoSessionMemoryInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindVideoSessionMemoryInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBindVideoSessionMemoryInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBindVideoSessionMemoryInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryBindIndex, memory, memoryOffset, memorySize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BindVideoSessionMemoryInfoKHR const & ) const = default; +#else + bool operator==( BindVideoSessionMemoryInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryBindIndex == rhs.memoryBindIndex ) && ( memory == rhs.memory ) && + ( memoryOffset == rhs.memoryOffset ) && ( memorySize == rhs.memorySize ); +# endif + } + + bool operator!=( BindVideoSessionMemoryInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBindVideoSessionMemoryInfoKHR; + const void * pNext = {}; + uint32_t memoryBindIndex = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize memorySize = {}; + }; + + template <> + struct CppType + { + using Type = BindVideoSessionMemoryInfoKHR; + }; + + // wrapper struct for struct VkBlitImageCubicWeightsInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBlitImageCubicWeightsInfoQCOM.html + struct BlitImageCubicWeightsInfoQCOM + { + using NativeType = VkBlitImageCubicWeightsInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBlitImageCubicWeightsInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + BlitImageCubicWeightsInfoQCOM( VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM cubicWeights_ = VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM::eCatmullRom, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cubicWeights{ cubicWeights_ } + { + } + + VULKAN_HPP_CONSTEXPR BlitImageCubicWeightsInfoQCOM( BlitImageCubicWeightsInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BlitImageCubicWeightsInfoQCOM( VkBlitImageCubicWeightsInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : BlitImageCubicWeightsInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + BlitImageCubicWeightsInfoQCOM & operator=( BlitImageCubicWeightsInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BlitImageCubicWeightsInfoQCOM & operator=( VkBlitImageCubicWeightsInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BlitImageCubicWeightsInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageCubicWeightsInfoQCOM & setCubicWeights( VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM cubicWeights_ ) VULKAN_HPP_NOEXCEPT + { + cubicWeights = cubicWeights_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBlitImageCubicWeightsInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBlitImageCubicWeightsInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBlitImageCubicWeightsInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBlitImageCubicWeightsInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cubicWeights ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BlitImageCubicWeightsInfoQCOM const & ) const = default; +#else + bool operator==( BlitImageCubicWeightsInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cubicWeights == rhs.cubicWeights ); +# endif + } + + bool operator!=( BlitImageCubicWeightsInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBlitImageCubicWeightsInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM cubicWeights = VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM::eCatmullRom; + }; + + template <> + struct CppType + { + using Type = BlitImageCubicWeightsInfoQCOM; + }; + + // wrapper struct for struct VkImageSubresourceLayers, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageSubresourceLayers.html + struct ImageSubresourceLayers + { + using NativeType = VkImageSubresourceLayers; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageSubresourceLayers( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, + uint32_t mipLevel_ = {}, + uint32_t baseArrayLayer_ = {}, + uint32_t layerCount_ = {} ) VULKAN_HPP_NOEXCEPT + : aspectMask{ aspectMask_ } + , mipLevel{ mipLevel_ } + , baseArrayLayer{ baseArrayLayer_ } + , layerCount{ layerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageSubresourceLayers( ImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageSubresourceLayers( VkImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageSubresourceLayers( *reinterpret_cast( &rhs ) ) + { + } + + ImageSubresourceLayers & operator=( ImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageSubresourceLayers & operator=( VkImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT + { + aspectMask = aspectMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT + { + mipLevel = mipLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT + { + baseArrayLayer = baseArrayLayer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = layerCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageSubresourceLayers const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresourceLayers &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresourceLayers const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageSubresourceLayers *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( aspectMask, mipLevel, baseArrayLayer, layerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageSubresourceLayers const & ) const = default; +#else + bool operator==( ImageSubresourceLayers const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( aspectMask == rhs.aspectMask ) && ( mipLevel == rhs.mipLevel ) && ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount ); +# endif + } + + bool operator!=( ImageSubresourceLayers const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + uint32_t mipLevel = {}; + uint32_t baseArrayLayer = {}; + uint32_t layerCount = {}; + }; + + // wrapper struct for struct VkImageBlit2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageBlit2.html + struct ImageBlit2 + { + using NativeType = VkImageBlit2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageBlit2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ImageBlit2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, + std::array const & srcOffsets_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, + std::array const & dstOffsets_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcSubresource{ srcSubresource_ } + , srcOffsets{ srcOffsets_ } + , dstSubresource{ dstSubresource_ } + , dstOffsets{ dstOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit2( ImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageBlit2( VkImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageBlit2( *reinterpret_cast( &rhs ) ) {} + + ImageBlit2 & operator=( ImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageBlit2 & operator=( VkImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT + { + srcSubresource = srcSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setSrcOffsets( std::array const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT + { + srcOffsets = srcOffsets_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT + { + dstSubresource = dstSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setDstOffsets( std::array const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT + { + dstOffsets = dstOffsets_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageBlit2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageBlit2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageBlit2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageBlit2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcSubresource, srcOffsets, dstSubresource, dstOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageBlit2 const & ) const = default; +#else + bool operator==( ImageBlit2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) && ( srcOffsets == rhs.srcOffsets ) && + ( dstSubresource == rhs.dstSubresource ) && ( dstOffsets == rhs.dstOffsets ); +# endif + } + + bool operator!=( ImageBlit2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageBlit2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D srcOffsets = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D dstOffsets = {}; + }; + + template <> + struct CppType + { + using Type = ImageBlit2; + }; + + using ImageBlit2KHR = ImageBlit2; + + // wrapper struct for struct VkBlitImageInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBlitImageInfo2.html + struct BlitImageInfo2 + { + using NativeType = VkBlitImageInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBlitImageInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions_ = {}, + VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcImage{ srcImage_ } + , srcImageLayout{ srcImageLayout_ } + , dstImage{ dstImage_ } + , dstImageLayout{ dstImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + , filter{ filter_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2( BlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BlitImageInfo2( VkBlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : BlitImageInfo2( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BlitImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, + VULKAN_HPP_NAMESPACE::Image dstImage_, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , srcImage( srcImage_ ) + , srcImageLayout( srcImageLayout_ ) + , dstImage( dstImage_ ) + , dstImageLayout( dstImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + , filter( filter_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BlitImageInfo2 & operator=( BlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BlitImageInfo2 & operator=( VkBlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT + { + srcImage = srcImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcImageLayout = srcImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT + { + dstImage = dstImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstImageLayout = dstImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BlitImageInfo2 & setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setFilter( VULKAN_HPP_NAMESPACE::Filter filter_ ) VULKAN_HPP_NOEXCEPT + { + filter = filter_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBlitImageInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBlitImageInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBlitImageInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBlitImageInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BlitImageInfo2 const & ) const = default; +#else + bool operator==( BlitImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && + ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ) && + ( filter == rhs.filter ); +# endif + } + + bool operator!=( BlitImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBlitImageInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image srcImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::Image dstImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions = {}; + VULKAN_HPP_NAMESPACE::Filter filter = VULKAN_HPP_NAMESPACE::Filter::eNearest; + }; + + template <> + struct CppType + { + using Type = BlitImageInfo2; + }; + + using BlitImageInfo2KHR = BlitImageInfo2; + + // wrapper struct for struct VkBufferCaptureDescriptorDataInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCaptureDescriptorDataInfoEXT.html + struct BufferCaptureDescriptorDataInfoEXT + { + using NativeType = VkBufferCaptureDescriptorDataInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCaptureDescriptorDataInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCaptureDescriptorDataInfoEXT( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCaptureDescriptorDataInfoEXT( BufferCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCaptureDescriptorDataInfoEXT( VkBufferCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferCaptureDescriptorDataInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + BufferCaptureDescriptorDataInfoEXT & operator=( BufferCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCaptureDescriptorDataInfoEXT & operator=( VkBufferCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCaptureDescriptorDataInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCaptureDescriptorDataInfoEXT & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCaptureDescriptorDataInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCaptureDescriptorDataInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCaptureDescriptorDataInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCaptureDescriptorDataInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCaptureDescriptorDataInfoEXT const & ) const = default; +#else + bool operator==( BufferCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( BufferCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCaptureDescriptorDataInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + }; + + template <> + struct CppType + { + using Type = BufferCaptureDescriptorDataInfoEXT; + }; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkBufferCollectionBufferCreateInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionBufferCreateInfoFUCHSIA.html + struct BufferCollectionBufferCreateInfoFUCHSIA + { + using NativeType = VkBufferCollectionBufferCreateInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionBufferCreateInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCollectionBufferCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {}, + uint32_t index_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , collection{ collection_ } + , index{ index_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCollectionBufferCreateInfoFUCHSIA( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCollectionBufferCreateInfoFUCHSIA( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferCollectionBufferCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + BufferCollectionBufferCreateInfoFUCHSIA & operator=( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCollectionBufferCreateInfoFUCHSIA & operator=( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & + setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT + { + collection = collection_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT + { + index = index_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCollectionBufferCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionBufferCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionBufferCreateInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCollectionBufferCreateInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, collection, index ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCollectionBufferCreateInfoFUCHSIA const & ) const = default; +# else + bool operator==( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) && ( index == rhs.index ); +# endif + } + + bool operator!=( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionBufferCreateInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {}; + uint32_t index = {}; + }; + + template <> + struct CppType + { + using Type = BufferCollectionBufferCreateInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkBufferCollectionConstraintsInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionConstraintsInfoFUCHSIA.html + struct BufferCollectionConstraintsInfoFUCHSIA + { + using NativeType = VkBufferCollectionConstraintsInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionConstraintsInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCollectionConstraintsInfoFUCHSIA( uint32_t minBufferCount_ = {}, + uint32_t maxBufferCount_ = {}, + uint32_t minBufferCountForCamping_ = {}, + uint32_t minBufferCountForDedicatedSlack_ = {}, + uint32_t minBufferCountForSharedSlack_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minBufferCount{ minBufferCount_ } + , maxBufferCount{ maxBufferCount_ } + , minBufferCountForCamping{ minBufferCountForCamping_ } + , minBufferCountForDedicatedSlack{ minBufferCountForDedicatedSlack_ } + , minBufferCountForSharedSlack{ minBufferCountForSharedSlack_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCollectionConstraintsInfoFUCHSIA( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCollectionConstraintsInfoFUCHSIA( VkBufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferCollectionConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + BufferCollectionConstraintsInfoFUCHSIA & operator=( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCollectionConstraintsInfoFUCHSIA & operator=( VkBufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setMinBufferCount( uint32_t minBufferCount_ ) VULKAN_HPP_NOEXCEPT + { + minBufferCount = minBufferCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setMaxBufferCount( uint32_t maxBufferCount_ ) VULKAN_HPP_NOEXCEPT + { + maxBufferCount = maxBufferCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setMinBufferCountForCamping( uint32_t minBufferCountForCamping_ ) VULKAN_HPP_NOEXCEPT + { + minBufferCountForCamping = minBufferCountForCamping_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & + setMinBufferCountForDedicatedSlack( uint32_t minBufferCountForDedicatedSlack_ ) VULKAN_HPP_NOEXCEPT + { + minBufferCountForDedicatedSlack = minBufferCountForDedicatedSlack_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & + setMinBufferCountForSharedSlack( uint32_t minBufferCountForSharedSlack_ ) VULKAN_HPP_NOEXCEPT + { + minBufferCountForSharedSlack = minBufferCountForSharedSlack_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCollectionConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionConstraintsInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCollectionConstraintsInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minBufferCount, maxBufferCount, minBufferCountForCamping, minBufferCountForDedicatedSlack, minBufferCountForSharedSlack ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCollectionConstraintsInfoFUCHSIA const & ) const = default; +# else + bool operator==( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minBufferCount == rhs.minBufferCount ) && ( maxBufferCount == rhs.maxBufferCount ) && + ( minBufferCountForCamping == rhs.minBufferCountForCamping ) && ( minBufferCountForDedicatedSlack == rhs.minBufferCountForDedicatedSlack ) && + ( minBufferCountForSharedSlack == rhs.minBufferCountForSharedSlack ); +# endif + } + + bool operator!=( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionConstraintsInfoFUCHSIA; + const void * pNext = {}; + uint32_t minBufferCount = {}; + uint32_t maxBufferCount = {}; + uint32_t minBufferCountForCamping = {}; + uint32_t minBufferCountForDedicatedSlack = {}; + uint32_t minBufferCountForSharedSlack = {}; + }; + + template <> + struct CppType + { + using Type = BufferCollectionConstraintsInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkBufferCollectionCreateInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionCreateInfoFUCHSIA.html + struct BufferCollectionCreateInfoFUCHSIA + { + using NativeType = VkBufferCollectionCreateInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionCreateInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCollectionCreateInfoFUCHSIA( zx_handle_t collectionToken_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , collectionToken{ collectionToken_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCollectionCreateInfoFUCHSIA( BufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCollectionCreateInfoFUCHSIA( VkBufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferCollectionCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + BufferCollectionCreateInfoFUCHSIA & operator=( BufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCollectionCreateInfoFUCHSIA & operator=( VkBufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCollectionCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionCreateInfoFUCHSIA & setCollectionToken( zx_handle_t collectionToken_ ) VULKAN_HPP_NOEXCEPT + { + collectionToken = collectionToken_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCollectionCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionCreateInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCollectionCreateInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, collectionToken ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &collectionToken, &rhs.collectionToken, sizeof( zx_handle_t ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &collectionToken, &rhs.collectionToken, sizeof( zx_handle_t ) ) == 0 ); + } + + bool operator!=( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionCreateInfoFUCHSIA; + const void * pNext = {}; + zx_handle_t collectionToken = {}; + }; + + template <> + struct CppType + { + using Type = BufferCollectionCreateInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkBufferCollectionImageCreateInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionImageCreateInfoFUCHSIA.html + struct BufferCollectionImageCreateInfoFUCHSIA + { + using NativeType = VkBufferCollectionImageCreateInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionImageCreateInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCollectionImageCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {}, + uint32_t index_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , collection{ collection_ } + , index{ index_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCollectionImageCreateInfoFUCHSIA( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCollectionImageCreateInfoFUCHSIA( VkBufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferCollectionImageCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + BufferCollectionImageCreateInfoFUCHSIA & operator=( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCollectionImageCreateInfoFUCHSIA & operator=( VkBufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & + setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT + { + collection = collection_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT + { + index = index_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCollectionImageCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionImageCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionImageCreateInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCollectionImageCreateInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, collection, index ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCollectionImageCreateInfoFUCHSIA const & ) const = default; +# else + bool operator==( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) && ( index == rhs.index ); +# endif + } + + bool operator!=( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionImageCreateInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {}; + uint32_t index = {}; + }; + + template <> + struct CppType + { + using Type = BufferCollectionImageCreateInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkSysmemColorSpaceFUCHSIA, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSysmemColorSpaceFUCHSIA.html + struct SysmemColorSpaceFUCHSIA + { + using NativeType = VkSysmemColorSpaceFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSysmemColorSpaceFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SysmemColorSpaceFUCHSIA( uint32_t colorSpace_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , colorSpace{ colorSpace_ } + { + } + + VULKAN_HPP_CONSTEXPR SysmemColorSpaceFUCHSIA( SysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SysmemColorSpaceFUCHSIA( VkSysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : SysmemColorSpaceFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + SysmemColorSpaceFUCHSIA & operator=( SysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SysmemColorSpaceFUCHSIA & operator=( VkSysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SysmemColorSpaceFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SysmemColorSpaceFUCHSIA & setColorSpace( uint32_t colorSpace_ ) VULKAN_HPP_NOEXCEPT + { + colorSpace = colorSpace_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSysmemColorSpaceFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSysmemColorSpaceFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSysmemColorSpaceFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSysmemColorSpaceFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, colorSpace ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SysmemColorSpaceFUCHSIA const & ) const = default; +# else + bool operator==( SysmemColorSpaceFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorSpace == rhs.colorSpace ); +# endif + } + + bool operator!=( SysmemColorSpaceFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSysmemColorSpaceFUCHSIA; + const void * pNext = {}; + uint32_t colorSpace = {}; + }; + + template <> + struct CppType + { + using Type = SysmemColorSpaceFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkBufferCollectionPropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCollectionPropertiesFUCHSIA.html + struct BufferCollectionPropertiesFUCHSIA + { + using NativeType = VkBufferCollectionPropertiesFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCollectionPropertiesFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCollectionPropertiesFUCHSIA( + uint32_t memoryTypeBits_ = {}, + uint32_t bufferCount_ = {}, + uint32_t createInfoIndex_ = {}, + uint64_t sysmemPixelFormat_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ = {}, + VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA sysmemColorSpaceIndex_ = {}, + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryTypeBits{ memoryTypeBits_ } + , bufferCount{ bufferCount_ } + , createInfoIndex{ createInfoIndex_ } + , sysmemPixelFormat{ sysmemPixelFormat_ } + , formatFeatures{ formatFeatures_ } + , sysmemColorSpaceIndex{ sysmemColorSpaceIndex_ } + , samplerYcbcrConversionComponents{ samplerYcbcrConversionComponents_ } + , suggestedYcbcrModel{ suggestedYcbcrModel_ } + , suggestedYcbcrRange{ suggestedYcbcrRange_ } + , suggestedXChromaOffset{ suggestedXChromaOffset_ } + , suggestedYChromaOffset{ suggestedYChromaOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCollectionPropertiesFUCHSIA( BufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCollectionPropertiesFUCHSIA( VkBufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferCollectionPropertiesFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + BufferCollectionPropertiesFUCHSIA & operator=( BufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCollectionPropertiesFUCHSIA & operator=( VkBufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkBufferCollectionPropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionPropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCollectionPropertiesFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCollectionPropertiesFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + memoryTypeBits, + bufferCount, + createInfoIndex, + sysmemPixelFormat, + formatFeatures, + sysmemColorSpaceIndex, + samplerYcbcrConversionComponents, + suggestedYcbcrModel, + suggestedYcbcrRange, + suggestedXChromaOffset, + suggestedYChromaOffset ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCollectionPropertiesFUCHSIA const & ) const = default; +# else + bool operator==( BufferCollectionPropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ) && ( bufferCount == rhs.bufferCount ) && + ( createInfoIndex == rhs.createInfoIndex ) && ( sysmemPixelFormat == rhs.sysmemPixelFormat ) && ( formatFeatures == rhs.formatFeatures ) && + ( sysmemColorSpaceIndex == rhs.sysmemColorSpaceIndex ) && ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && + ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && + ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); +# endif + } + + bool operator!=( BufferCollectionPropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionPropertiesFUCHSIA; + void * pNext = {}; + uint32_t memoryTypeBits = {}; + uint32_t bufferCount = {}; + uint32_t createInfoIndex = {}; + uint64_t sysmemPixelFormat = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures = {}; + VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA sysmemColorSpaceIndex = {}; + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + }; + + template <> + struct CppType + { + using Type = BufferCollectionPropertiesFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkBufferCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCreateInfo.html + struct BufferCreateInfo + { + using NativeType = VkBufferCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ = {}, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, + uint32_t queueFamilyIndexCount_ = {}, + const uint32_t * pQueueFamilyIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , size{ size_ } + , usage{ usage_ } + , sharingMode{ sharingMode_ } + , queueFamilyIndexCount{ queueFamilyIndexCount_ } + , pQueueFamilyIndices{ pQueueFamilyIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCreateInfo( BufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCreateInfo( VkBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : BufferCreateInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BufferCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_, + VULKAN_HPP_NAMESPACE::DeviceSize size_, + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , size( size_ ) + , usage( usage_ ) + , sharingMode( sharingMode_ ) + , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) + , pQueueFamilyIndices( queueFamilyIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + BufferCreateInfo & operator=( BufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCreateInfo & operator=( VkBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT + { + sharingMode = sharingMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = queueFamilyIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + pQueueFamilyIndices = pQueueFamilyIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + BufferCreateInfo & setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); + pQueueFamilyIndices = queueFamilyIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, size, usage, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCreateInfo const & ) const = default; +#else + bool operator==( BufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( size == rhs.size ) && ( usage == rhs.usage ) && + ( sharingMode == rhs.sharingMode ) && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ); +# endif + } + + bool operator!=( BufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage = {}; + VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; + uint32_t queueFamilyIndexCount = {}; + const uint32_t * pQueueFamilyIndices = {}; + }; + + template <> + struct CppType + { + using Type = BufferCreateInfo; + }; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkBufferConstraintsInfoFUCHSIA, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferConstraintsInfoFUCHSIA.html + struct BufferConstraintsInfoFUCHSIA + { + using NativeType = VkBufferConstraintsInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferConstraintsInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferConstraintsInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCreateInfo createInfo_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ = {}, + VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , createInfo{ createInfo_ } + , requiredFormatFeatures{ requiredFormatFeatures_ } + , bufferCollectionConstraints{ bufferCollectionConstraints_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferConstraintsInfoFUCHSIA( BufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferConstraintsInfoFUCHSIA( VkBufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + BufferConstraintsInfoFUCHSIA & operator=( BufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferConstraintsInfoFUCHSIA & operator=( VkBufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & setCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo_ ) VULKAN_HPP_NOEXCEPT + { + createInfo = createInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & + setRequiredFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ ) VULKAN_HPP_NOEXCEPT + { + requiredFormatFeatures = requiredFormatFeatures_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & + setBufferCollectionConstraints( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraints_ ) VULKAN_HPP_NOEXCEPT + { + bufferCollectionConstraints = bufferCollectionConstraints_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferConstraintsInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferConstraintsInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, createInfo, requiredFormatFeatures, bufferCollectionConstraints ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferConstraintsInfoFUCHSIA const & ) const = default; +# else + bool operator==( BufferConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createInfo == rhs.createInfo ) && ( requiredFormatFeatures == rhs.requiredFormatFeatures ) && + ( bufferCollectionConstraints == rhs.bufferCollectionConstraints ); +# endif + } + + bool operator!=( BufferConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferConstraintsInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferCreateInfo createInfo = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures = {}; + VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints = {}; + }; + + template <> + struct CppType + { + using Type = BufferConstraintsInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkBufferCopy, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCopy.html + struct BufferCopy + { + using NativeType = VkBufferCopy; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCopy( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT + : srcOffset{ srcOffset_ } + , dstOffset{ dstOffset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCopy( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCopy( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT : BufferCopy( *reinterpret_cast( &rhs ) ) {} + + BufferCopy & operator=( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCopy & operator=( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcOffset = srcOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCopy & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstOffset = dstOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCopy & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCopy const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCopy &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCopy const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCopy *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcOffset, dstOffset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCopy const & ) const = default; +#else + bool operator==( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcOffset == rhs.srcOffset ) && ( dstOffset == rhs.dstOffset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + // wrapper struct for struct VkBufferCopy2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferCopy2.html + struct BufferCopy2 + { + using NativeType = VkBufferCopy2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCopy2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferCopy2( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcOffset{ srcOffset_ } + , dstOffset{ dstOffset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferCopy2( BufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferCopy2( VkBufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT : BufferCopy2( *reinterpret_cast( &rhs ) ) {} + + BufferCopy2 & operator=( BufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferCopy2 & operator=( VkBufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcOffset = srcOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstOffset = dstOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferCopy2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCopy2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferCopy2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferCopy2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcOffset, dstOffset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferCopy2 const & ) const = default; +#else + bool operator==( BufferCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcOffset == rhs.srcOffset ) && ( dstOffset == rhs.dstOffset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( BufferCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCopy2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = BufferCopy2; + }; + + using BufferCopy2KHR = BufferCopy2; + + // wrapper struct for struct VkBufferDeviceAddressCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferDeviceAddressCreateInfoEXT.html + struct BufferDeviceAddressCreateInfoEXT + { + using NativeType = VkBufferDeviceAddressCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferDeviceAddressCreateInfoEXT( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceAddress{ deviceAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferDeviceAddressCreateInfoEXT( BufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferDeviceAddressCreateInfoEXT( VkBufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferDeviceAddressCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + BufferDeviceAddressCreateInfoEXT & operator=( BufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferDeviceAddressCreateInfoEXT & operator=( VkBufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferDeviceAddressCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferDeviceAddressCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferDeviceAddressCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferDeviceAddressCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferDeviceAddressCreateInfoEXT const & ) const = default; +#else + bool operator==( BufferDeviceAddressCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress ); +# endif + } + + bool operator!=( BufferDeviceAddressCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferDeviceAddressCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; + }; + + template <> + struct CppType + { + using Type = BufferDeviceAddressCreateInfoEXT; + }; + + // wrapper struct for struct VkBufferDeviceAddressInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferDeviceAddressInfo.html + struct BufferDeviceAddressInfo + { + using NativeType = VkBufferDeviceAddressInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferDeviceAddressInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferDeviceAddressInfo( BufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferDeviceAddressInfo( VkBufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferDeviceAddressInfo( *reinterpret_cast( &rhs ) ) + { + } + + BufferDeviceAddressInfo & operator=( BufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferDeviceAddressInfo & operator=( VkBufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferDeviceAddressInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferDeviceAddressInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferDeviceAddressInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferDeviceAddressInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferDeviceAddressInfo const & ) const = default; +#else + bool operator==( BufferDeviceAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( BufferDeviceAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferDeviceAddressInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + }; + + template <> + struct CppType + { + using Type = BufferDeviceAddressInfo; + }; + + using BufferDeviceAddressInfoEXT = BufferDeviceAddressInfo; + using BufferDeviceAddressInfoKHR = BufferDeviceAddressInfo; + + // wrapper struct for struct VkBufferImageCopy, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferImageCopy.html + struct BufferImageCopy + { + using NativeType = VkBufferImageCopy; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferImageCopy( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {}, + uint32_t bufferRowLength_ = {}, + uint32_t bufferImageHeight_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {} ) VULKAN_HPP_NOEXCEPT + : bufferOffset{ bufferOffset_ } + , bufferRowLength{ bufferRowLength_ } + , bufferImageHeight{ bufferImageHeight_ } + , imageSubresource{ imageSubresource_ } + , imageOffset{ imageOffset_ } + , imageExtent{ imageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferImageCopy( BufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferImageCopy( VkBufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : BufferImageCopy( *reinterpret_cast( &rhs ) ) {} + + BufferImageCopy & operator=( BufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferImageCopy & operator=( VkBufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT + { + bufferOffset = bufferOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT + { + bufferRowLength = bufferRowLength_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT + { + bufferImageHeight = bufferImageHeight_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT + { + imageSubresource = imageSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT + { + imageOffset = imageOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferImageCopy const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferImageCopy &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferImageCopy const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferImageCopy *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( bufferOffset, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferImageCopy const & ) const = default; +#else + bool operator==( BufferImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( bufferOffset == rhs.bufferOffset ) && ( bufferRowLength == rhs.bufferRowLength ) && ( bufferImageHeight == rhs.bufferImageHeight ) && + ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && ( imageExtent == rhs.imageExtent ); +# endif + } + + bool operator!=( BufferImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset = {}; + uint32_t bufferRowLength = {}; + uint32_t bufferImageHeight = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; + }; + + // wrapper struct for struct VkBufferImageCopy2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferImageCopy2.html + struct BufferImageCopy2 + { + using NativeType = VkBufferImageCopy2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferImageCopy2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferImageCopy2( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {}, + uint32_t bufferRowLength_ = {}, + uint32_t bufferImageHeight_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , bufferOffset{ bufferOffset_ } + , bufferRowLength{ bufferRowLength_ } + , bufferImageHeight{ bufferImageHeight_ } + , imageSubresource{ imageSubresource_ } + , imageOffset{ imageOffset_ } + , imageExtent{ imageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferImageCopy2( BufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferImageCopy2( VkBufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT : BufferImageCopy2( *reinterpret_cast( &rhs ) ) {} + + BufferImageCopy2 & operator=( BufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferImageCopy2 & operator=( VkBufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT + { + bufferOffset = bufferOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT + { + bufferRowLength = bufferRowLength_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT + { + bufferImageHeight = bufferImageHeight_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT + { + imageSubresource = imageSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT + { + imageOffset = imageOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferImageCopy2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferImageCopy2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferImageCopy2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferImageCopy2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, bufferOffset, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferImageCopy2 const & ) const = default; +#else + bool operator==( BufferImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferOffset == rhs.bufferOffset ) && ( bufferRowLength == rhs.bufferRowLength ) && + ( bufferImageHeight == rhs.bufferImageHeight ) && ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && + ( imageExtent == rhs.imageExtent ); +# endif + } + + bool operator!=( BufferImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferImageCopy2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset = {}; + uint32_t bufferRowLength = {}; + uint32_t bufferImageHeight = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; + }; + + template <> + struct CppType + { + using Type = BufferImageCopy2; + }; + + using BufferImageCopy2KHR = BufferImageCopy2; + + // wrapper struct for struct VkBufferMemoryBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferMemoryBarrier.html + struct BufferMemoryBarrier + { + using NativeType = VkBufferMemoryBarrier; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferMemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, + uint32_t srcQueueFamilyIndex_ = {}, + uint32_t dstQueueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcAccessMask{ srcAccessMask_ } + , dstAccessMask{ dstAccessMask_ } + , srcQueueFamilyIndex{ srcQueueFamilyIndex_ } + , dstQueueFamilyIndex{ dstQueueFamilyIndex_ } + , buffer{ buffer_ } + , offset{ offset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferMemoryBarrier( BufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferMemoryBarrier( VkBufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT : BufferMemoryBarrier( *reinterpret_cast( &rhs ) ) + { + } + + BufferMemoryBarrier & operator=( BufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferMemoryBarrier & operator=( VkBufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + srcQueueFamilyIndex = srcQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + dstQueueFamilyIndex = dstQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferMemoryBarrier &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferMemoryBarrier const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferMemoryBarrier *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcAccessMask, dstAccessMask, srcQueueFamilyIndex, dstQueueFamilyIndex, buffer, offset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferMemoryBarrier const & ) const = default; +#else + bool operator==( BufferMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) && + ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( buffer == rhs.buffer ) && + ( offset == rhs.offset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( BufferMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryBarrier; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; + uint32_t srcQueueFamilyIndex = {}; + uint32_t dstQueueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = BufferMemoryBarrier; + }; + + // wrapper struct for struct VkBufferMemoryBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferMemoryBarrier2.html + struct BufferMemoryBarrier2 + { + using NativeType = VkBufferMemoryBarrier2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, + uint32_t srcQueueFamilyIndex_ = {}, + uint32_t dstQueueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcStageMask{ srcStageMask_ } + , srcAccessMask{ srcAccessMask_ } + , dstStageMask{ dstStageMask_ } + , dstAccessMask{ dstAccessMask_ } + , srcQueueFamilyIndex{ srcQueueFamilyIndex_ } + , dstQueueFamilyIndex{ dstQueueFamilyIndex_ } + , buffer{ buffer_ } + , offset{ offset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2( BufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferMemoryBarrier2( VkBufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferMemoryBarrier2( *reinterpret_cast( &rhs ) ) + { + } + + BufferMemoryBarrier2 & operator=( BufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferMemoryBarrier2 & operator=( VkBufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT + { + srcStageMask = srcStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + dstStageMask = dstStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + srcQueueFamilyIndex = srcQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + dstQueueFamilyIndex = dstQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferMemoryBarrier2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferMemoryBarrier2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcStageMask, srcAccessMask, dstStageMask, dstAccessMask, srcQueueFamilyIndex, dstQueueFamilyIndex, buffer, offset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferMemoryBarrier2 const & ) const = default; +#else + bool operator==( BufferMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && + ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && + ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( BufferMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryBarrier2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; + uint32_t srcQueueFamilyIndex = {}; + uint32_t dstQueueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = BufferMemoryBarrier2; + }; + + using BufferMemoryBarrier2KHR = BufferMemoryBarrier2; + + // wrapper struct for struct VkBufferMemoryRequirementsInfo2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferMemoryRequirementsInfo2.html + struct BufferMemoryRequirementsInfo2 + { + using NativeType = VkBufferMemoryRequirementsInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryRequirementsInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferMemoryRequirementsInfo2( BufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferMemoryRequirementsInfo2( VkBufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferMemoryRequirementsInfo2( *reinterpret_cast( &rhs ) ) + { + } + + BufferMemoryRequirementsInfo2 & operator=( BufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferMemoryRequirementsInfo2 & operator=( VkBufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferMemoryRequirementsInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferMemoryRequirementsInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferMemoryRequirementsInfo2 const & ) const = default; +#else + bool operator==( BufferMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( BufferMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryRequirementsInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + }; + + template <> + struct CppType + { + using Type = BufferMemoryRequirementsInfo2; + }; + + using BufferMemoryRequirementsInfo2KHR = BufferMemoryRequirementsInfo2; + + // wrapper struct for struct VkBufferOpaqueCaptureAddressCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferOpaqueCaptureAddressCreateInfo.html + struct BufferOpaqueCaptureAddressCreateInfo + { + using NativeType = VkBufferOpaqueCaptureAddressCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferOpaqueCaptureAddressCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferOpaqueCaptureAddressCreateInfo( uint64_t opaqueCaptureAddress_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , opaqueCaptureAddress{ opaqueCaptureAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferOpaqueCaptureAddressCreateInfo( BufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferOpaqueCaptureAddressCreateInfo( VkBufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferOpaqueCaptureAddressCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + BufferOpaqueCaptureAddressCreateInfo & operator=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferOpaqueCaptureAddressCreateInfo & operator=( VkBufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo & setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT + { + opaqueCaptureAddress = opaqueCaptureAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferOpaqueCaptureAddressCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferOpaqueCaptureAddressCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferOpaqueCaptureAddressCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferOpaqueCaptureAddressCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, opaqueCaptureAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferOpaqueCaptureAddressCreateInfo const & ) const = default; +#else + bool operator==( BufferOpaqueCaptureAddressCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureAddress == rhs.opaqueCaptureAddress ); +# endif + } + + bool operator!=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferOpaqueCaptureAddressCreateInfo; + const void * pNext = {}; + uint64_t opaqueCaptureAddress = {}; + }; + + template <> + struct CppType + { + using Type = BufferOpaqueCaptureAddressCreateInfo; + }; + + using BufferOpaqueCaptureAddressCreateInfoKHR = BufferOpaqueCaptureAddressCreateInfo; + + // wrapper struct for struct VkBufferUsageFlags2CreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferUsageFlags2CreateInfo.html + struct BufferUsageFlags2CreateInfo + { + using NativeType = VkBufferUsageFlags2CreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferUsageFlags2CreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferUsageFlags2CreateInfo( VULKAN_HPP_NAMESPACE::BufferUsageFlags2 usage_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , usage{ usage_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferUsageFlags2CreateInfo( BufferUsageFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferUsageFlags2CreateInfo( VkBufferUsageFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferUsageFlags2CreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + BufferUsageFlags2CreateInfo & operator=( BufferUsageFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferUsageFlags2CreateInfo & operator=( VkBufferUsageFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferUsageFlags2CreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferUsageFlags2CreateInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags2 usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferUsageFlags2CreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferUsageFlags2CreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferUsageFlags2CreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferUsageFlags2CreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, usage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferUsageFlags2CreateInfo const & ) const = default; +#else + bool operator==( BufferUsageFlags2CreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( usage == rhs.usage ); +# endif + } + + bool operator!=( BufferUsageFlags2CreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferUsageFlags2CreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferUsageFlags2 usage = {}; + }; + + template <> + struct CppType + { + using Type = BufferUsageFlags2CreateInfo; + }; + + using BufferUsageFlags2CreateInfoKHR = BufferUsageFlags2CreateInfo; + + // wrapper struct for struct VkBufferViewCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkBufferViewCreateInfo.html + struct BufferViewCreateInfo + { + using NativeType = VkBufferViewCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferViewCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BufferViewCreateInfo( VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize range_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , buffer{ buffer_ } + , format{ format_ } + , offset{ offset_ } + , range{ range_ } + { + } + + VULKAN_HPP_CONSTEXPR BufferViewCreateInfo( BufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BufferViewCreateInfo( VkBufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : BufferViewCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + BufferViewCreateInfo & operator=( BufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BufferViewCreateInfo & operator=( VkBufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT + { + range = range_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBufferViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferViewCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBufferViewCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBufferViewCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, buffer, format, offset, range ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BufferViewCreateInfo const & ) const = default; +#else + bool operator==( BufferViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( buffer == rhs.buffer ) && ( format == rhs.format ) && + ( offset == rhs.offset ) && ( range == rhs.range ); +# endif + } + + bool operator!=( BufferViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferViewCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize range = {}; + }; + + template <> + struct CppType + { + using Type = BufferViewCreateInfo; + }; + + // wrapper struct for struct VkStridedDeviceAddressNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkStridedDeviceAddressNV.html + struct StridedDeviceAddressNV + { + using NativeType = VkStridedDeviceAddressNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR StridedDeviceAddressNV( VULKAN_HPP_NAMESPACE::DeviceAddress startAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize strideInBytes_ = {} ) VULKAN_HPP_NOEXCEPT + : startAddress{ startAddress_ } + , strideInBytes{ strideInBytes_ } + { + } + + VULKAN_HPP_CONSTEXPR StridedDeviceAddressNV( StridedDeviceAddressNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + StridedDeviceAddressNV( VkStridedDeviceAddressNV const & rhs ) VULKAN_HPP_NOEXCEPT + : StridedDeviceAddressNV( *reinterpret_cast( &rhs ) ) + { + } + + StridedDeviceAddressNV & operator=( StridedDeviceAddressNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + StridedDeviceAddressNV & operator=( VkStridedDeviceAddressNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressNV & setStartAddress( VULKAN_HPP_NAMESPACE::DeviceAddress startAddress_ ) VULKAN_HPP_NOEXCEPT + { + startAddress = startAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressNV & setStrideInBytes( VULKAN_HPP_NAMESPACE::DeviceSize strideInBytes_ ) VULKAN_HPP_NOEXCEPT + { + strideInBytes = strideInBytes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkStridedDeviceAddressNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStridedDeviceAddressNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStridedDeviceAddressNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkStridedDeviceAddressNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( startAddress, strideInBytes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( StridedDeviceAddressNV const & ) const = default; +#else + bool operator==( StridedDeviceAddressNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( startAddress == rhs.startAddress ) && ( strideInBytes == rhs.strideInBytes ); +# endif + } + + bool operator!=( StridedDeviceAddressNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress startAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize strideInBytes = {}; + }; + + // wrapper struct for struct VkBuildPartitionedAccelerationStructureIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildPartitionedAccelerationStructureIndirectCommandNV.html + struct BuildPartitionedAccelerationStructureIndirectCommandNV + { + using NativeType = VkBuildPartitionedAccelerationStructureIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BuildPartitionedAccelerationStructureIndirectCommandNV( + VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureOpTypeNV opType_ = VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureOpTypeNV::eWriteInstance, + uint32_t argCount_ = {}, + VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV argData_ = {} ) VULKAN_HPP_NOEXCEPT + : opType{ opType_ } + , argCount{ argCount_ } + , argData{ argData_ } + { + } + + VULKAN_HPP_CONSTEXPR BuildPartitionedAccelerationStructureIndirectCommandNV( BuildPartitionedAccelerationStructureIndirectCommandNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + BuildPartitionedAccelerationStructureIndirectCommandNV( VkBuildPartitionedAccelerationStructureIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BuildPartitionedAccelerationStructureIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + BuildPartitionedAccelerationStructureIndirectCommandNV & + operator=( BuildPartitionedAccelerationStructureIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BuildPartitionedAccelerationStructureIndirectCommandNV & + operator=( VkBuildPartitionedAccelerationStructureIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureIndirectCommandNV & + setOpType( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureOpTypeNV opType_ ) VULKAN_HPP_NOEXCEPT + { + opType = opType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureIndirectCommandNV & setArgCount( uint32_t argCount_ ) VULKAN_HPP_NOEXCEPT + { + argCount = argCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureIndirectCommandNV & + setArgData( VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV const & argData_ ) VULKAN_HPP_NOEXCEPT + { + argData = argData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBuildPartitionedAccelerationStructureIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBuildPartitionedAccelerationStructureIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBuildPartitionedAccelerationStructureIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBuildPartitionedAccelerationStructureIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( opType, argCount, argData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BuildPartitionedAccelerationStructureIndirectCommandNV const & ) const = default; +#else + bool operator==( BuildPartitionedAccelerationStructureIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( opType == rhs.opType ) && ( argCount == rhs.argCount ) && ( argData == rhs.argData ); +# endif + } + + bool operator!=( BuildPartitionedAccelerationStructureIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureOpTypeNV opType = VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureOpTypeNV::eWriteInstance; + uint32_t argCount = {}; + VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV argData = {}; + }; + + // wrapper struct for struct VkPartitionedAccelerationStructureInstancesInputNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureInstancesInputNV.html + struct PartitionedAccelerationStructureInstancesInputNV + { + using NativeType = VkPartitionedAccelerationStructureInstancesInputNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePartitionedAccelerationStructureInstancesInputNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PartitionedAccelerationStructureInstancesInputNV( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ = {}, + uint32_t instanceCount_ = {}, + uint32_t maxInstancePerPartitionCount_ = {}, + uint32_t partitionCount_ = {}, + uint32_t maxInstanceInGlobalPartitionCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , instanceCount{ instanceCount_ } + , maxInstancePerPartitionCount{ maxInstancePerPartitionCount_ } + , partitionCount{ partitionCount_ } + , maxInstanceInGlobalPartitionCount{ maxInstanceInGlobalPartitionCount_ } + { + } + + VULKAN_HPP_CONSTEXPR + PartitionedAccelerationStructureInstancesInputNV( PartitionedAccelerationStructureInstancesInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PartitionedAccelerationStructureInstancesInputNV( VkPartitionedAccelerationStructureInstancesInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PartitionedAccelerationStructureInstancesInputNV( *reinterpret_cast( &rhs ) ) + { + } + + PartitionedAccelerationStructureInstancesInputNV & operator=( PartitionedAccelerationStructureInstancesInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PartitionedAccelerationStructureInstancesInputNV & operator=( VkPartitionedAccelerationStructureInstancesInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureInstancesInputNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureInstancesInputNV & + setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureInstancesInputNV & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT + { + instanceCount = instanceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureInstancesInputNV & + setMaxInstancePerPartitionCount( uint32_t maxInstancePerPartitionCount_ ) VULKAN_HPP_NOEXCEPT + { + maxInstancePerPartitionCount = maxInstancePerPartitionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureInstancesInputNV & setPartitionCount( uint32_t partitionCount_ ) VULKAN_HPP_NOEXCEPT + { + partitionCount = partitionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureInstancesInputNV & + setMaxInstanceInGlobalPartitionCount( uint32_t maxInstanceInGlobalPartitionCount_ ) VULKAN_HPP_NOEXCEPT + { + maxInstanceInGlobalPartitionCount = maxInstanceInGlobalPartitionCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPartitionedAccelerationStructureInstancesInputNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureInstancesInputNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureInstancesInputNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureInstancesInputNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, instanceCount, maxInstancePerPartitionCount, partitionCount, maxInstanceInGlobalPartitionCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PartitionedAccelerationStructureInstancesInputNV const & ) const = default; +#else + bool operator==( PartitionedAccelerationStructureInstancesInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( instanceCount == rhs.instanceCount ) && + ( maxInstancePerPartitionCount == rhs.maxInstancePerPartitionCount ) && ( partitionCount == rhs.partitionCount ) && + ( maxInstanceInGlobalPartitionCount == rhs.maxInstanceInGlobalPartitionCount ); +# endif + } + + bool operator!=( PartitionedAccelerationStructureInstancesInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePartitionedAccelerationStructureInstancesInputNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags = {}; + uint32_t instanceCount = {}; + uint32_t maxInstancePerPartitionCount = {}; + uint32_t partitionCount = {}; + uint32_t maxInstanceInGlobalPartitionCount = {}; + }; + + template <> + struct CppType + { + using Type = PartitionedAccelerationStructureInstancesInputNV; + }; + + // wrapper struct for struct VkBuildPartitionedAccelerationStructureInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkBuildPartitionedAccelerationStructureInfoNV.html + struct BuildPartitionedAccelerationStructureInfoNV + { + using NativeType = VkBuildPartitionedAccelerationStructureInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBuildPartitionedAccelerationStructureInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR BuildPartitionedAccelerationStructureInfoNV( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV input_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress srcAccelerationStructureData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress dstAccelerationStructureData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress scratchData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress srcInfos_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress srcInfosCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , input{ input_ } + , srcAccelerationStructureData{ srcAccelerationStructureData_ } + , dstAccelerationStructureData{ dstAccelerationStructureData_ } + , scratchData{ scratchData_ } + , srcInfos{ srcInfos_ } + , srcInfosCount{ srcInfosCount_ } + { + } + + VULKAN_HPP_CONSTEXPR BuildPartitionedAccelerationStructureInfoNV( BuildPartitionedAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + BuildPartitionedAccelerationStructureInfoNV( VkBuildPartitionedAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : BuildPartitionedAccelerationStructureInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + BuildPartitionedAccelerationStructureInfoNV & operator=( BuildPartitionedAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + BuildPartitionedAccelerationStructureInfoNV & operator=( VkBuildPartitionedAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & + setInput( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV const & input_ ) VULKAN_HPP_NOEXCEPT + { + input = input_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & + setSrcAccelerationStructureData( VULKAN_HPP_NAMESPACE::DeviceAddress srcAccelerationStructureData_ ) VULKAN_HPP_NOEXCEPT + { + srcAccelerationStructureData = srcAccelerationStructureData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & + setDstAccelerationStructureData( VULKAN_HPP_NAMESPACE::DeviceAddress dstAccelerationStructureData_ ) VULKAN_HPP_NOEXCEPT + { + dstAccelerationStructureData = dstAccelerationStructureData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & setScratchData( VULKAN_HPP_NAMESPACE::DeviceAddress scratchData_ ) VULKAN_HPP_NOEXCEPT + { + scratchData = scratchData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & setSrcInfos( VULKAN_HPP_NAMESPACE::DeviceAddress srcInfos_ ) VULKAN_HPP_NOEXCEPT + { + srcInfos = srcInfos_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 BuildPartitionedAccelerationStructureInfoNV & + setSrcInfosCount( VULKAN_HPP_NAMESPACE::DeviceAddress srcInfosCount_ ) VULKAN_HPP_NOEXCEPT + { + srcInfosCount = srcInfosCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkBuildPartitionedAccelerationStructureInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBuildPartitionedAccelerationStructureInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkBuildPartitionedAccelerationStructureInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkBuildPartitionedAccelerationStructureInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, input, srcAccelerationStructureData, dstAccelerationStructureData, scratchData, srcInfos, srcInfosCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( BuildPartitionedAccelerationStructureInfoNV const & ) const = default; +#else + bool operator==( BuildPartitionedAccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( input == rhs.input ) && + ( srcAccelerationStructureData == rhs.srcAccelerationStructureData ) && ( dstAccelerationStructureData == rhs.dstAccelerationStructureData ) && + ( scratchData == rhs.scratchData ) && ( srcInfos == rhs.srcInfos ) && ( srcInfosCount == rhs.srcInfosCount ); +# endif + } + + bool operator!=( BuildPartitionedAccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBuildPartitionedAccelerationStructureInfoNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstancesInputNV input = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress srcAccelerationStructureData = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress dstAccelerationStructureData = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress scratchData = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress srcInfos = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress srcInfosCount = {}; + }; + + template <> + struct CppType + { + using Type = BuildPartitionedAccelerationStructureInfoNV; + }; + + // wrapper struct for struct VkCalibratedTimestampInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCalibratedTimestampInfoKHR.html + struct CalibratedTimestampInfoKHR + { + using NativeType = VkCalibratedTimestampInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCalibratedTimestampInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CalibratedTimestampInfoKHR( VULKAN_HPP_NAMESPACE::TimeDomainKHR timeDomain_ = VULKAN_HPP_NAMESPACE::TimeDomainKHR::eDevice, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , timeDomain{ timeDomain_ } + { + } + + VULKAN_HPP_CONSTEXPR CalibratedTimestampInfoKHR( CalibratedTimestampInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CalibratedTimestampInfoKHR( VkCalibratedTimestampInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : CalibratedTimestampInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + CalibratedTimestampInfoKHR & operator=( CalibratedTimestampInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CalibratedTimestampInfoKHR & operator=( VkCalibratedTimestampInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoKHR & setTimeDomain( VULKAN_HPP_NAMESPACE::TimeDomainKHR timeDomain_ ) VULKAN_HPP_NOEXCEPT + { + timeDomain = timeDomain_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCalibratedTimestampInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCalibratedTimestampInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCalibratedTimestampInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCalibratedTimestampInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, timeDomain ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CalibratedTimestampInfoKHR const & ) const = default; +#else + bool operator==( CalibratedTimestampInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timeDomain == rhs.timeDomain ); +# endif + } + + bool operator!=( CalibratedTimestampInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCalibratedTimestampInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TimeDomainKHR timeDomain = VULKAN_HPP_NAMESPACE::TimeDomainKHR::eDevice; + }; + + template <> + struct CppType + { + using Type = CalibratedTimestampInfoKHR; + }; + + using CalibratedTimestampInfoEXT = CalibratedTimestampInfoKHR; + + // wrapper struct for struct VkCheckpointData2NV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCheckpointData2NV.html + struct CheckpointData2NV + { + using NativeType = VkCheckpointData2NV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointData2NV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CheckpointData2NV( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage_ = {}, void * pCheckpointMarker_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stage{ stage_ } + , pCheckpointMarker{ pCheckpointMarker_ } + { + } + + VULKAN_HPP_CONSTEXPR CheckpointData2NV( CheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CheckpointData2NV( VkCheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT : CheckpointData2NV( *reinterpret_cast( &rhs ) ) {} + + CheckpointData2NV & operator=( CheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CheckpointData2NV & operator=( VkCheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkCheckpointData2NV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCheckpointData2NV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCheckpointData2NV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCheckpointData2NV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stage, pCheckpointMarker ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CheckpointData2NV const & ) const = default; +#else + bool operator==( CheckpointData2NV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) && ( pCheckpointMarker == rhs.pCheckpointMarker ); +# endif + } + + bool operator!=( CheckpointData2NV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCheckpointData2NV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage = {}; + void * pCheckpointMarker = {}; + }; + + template <> + struct CppType + { + using Type = CheckpointData2NV; + }; + + // wrapper struct for struct VkCheckpointDataNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCheckpointDataNV.html + struct CheckpointDataNV + { + using NativeType = VkCheckpointDataNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CheckpointDataNV( VULKAN_HPP_NAMESPACE::PipelineStageFlagBits stage_ = VULKAN_HPP_NAMESPACE::PipelineStageFlagBits::eTopOfPipe, + void * pCheckpointMarker_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stage{ stage_ } + , pCheckpointMarker{ pCheckpointMarker_ } + { + } + + VULKAN_HPP_CONSTEXPR CheckpointDataNV( CheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CheckpointDataNV( VkCheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT : CheckpointDataNV( *reinterpret_cast( &rhs ) ) {} + + CheckpointDataNV & operator=( CheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CheckpointDataNV & operator=( VkCheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkCheckpointDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCheckpointDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCheckpointDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCheckpointDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stage, pCheckpointMarker ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CheckpointDataNV const & ) const = default; +#else + bool operator==( CheckpointDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) && ( pCheckpointMarker == rhs.pCheckpointMarker ); +# endif + } + + bool operator!=( CheckpointDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCheckpointDataNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlagBits stage = VULKAN_HPP_NAMESPACE::PipelineStageFlagBits::eTopOfPipe; + void * pCheckpointMarker = {}; + }; + + template <> + struct CppType + { + using Type = CheckpointDataNV; + }; + + union ClearColorValue + { + using NativeType = VkClearColorValue; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array & float32_ = {} ) : float32( float32_ ) {} + + VULKAN_HPP_CONSTEXPR ClearColorValue( float float32_0, float float32_1, float float32_2, float float32_3 ) + : float32{ { { float32_0, float32_1, float32_2, float32_3 } } } + { + } + + VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array & int32_ ) : int32( int32_ ) {} + + VULKAN_HPP_CONSTEXPR ClearColorValue( int32_t int32_0, int32_t int32_1, int32_t int32_2, int32_t int32_3 ) + : int32{ { { int32_0, int32_1, int32_2, int32_3 } } } + { + } + + VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array & uint32_ ) : uint32( uint32_ ) {} + + VULKAN_HPP_CONSTEXPR ClearColorValue( uint32_t uint32_0, uint32_t uint32_1, uint32_t uint32_2, uint32_t uint32_3 ) + : uint32{ { { uint32_0, uint32_1, uint32_2, uint32_3 } } } + { + } +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setFloat32( std::array float32_ ) VULKAN_HPP_NOEXCEPT + { + float32 = float32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setInt32( std::array int32_ ) VULKAN_HPP_NOEXCEPT + { + int32 = int32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setUint32( std::array uint32_ ) VULKAN_HPP_NOEXCEPT + { + uint32 = uint32_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClearColorValue const &() const + { + return *reinterpret_cast( this ); + } + + operator VkClearColorValue &() + { + return *reinterpret_cast( this ); + } + + VULKAN_HPP_NAMESPACE::ArrayWrapper1D float32; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D int32; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D uint32; + }; + + // wrapper struct for struct VkClearDepthStencilValue, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkClearDepthStencilValue.html + struct ClearDepthStencilValue + { + using NativeType = VkClearDepthStencilValue; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClearDepthStencilValue( float depth_ = {}, uint32_t stencil_ = {} ) VULKAN_HPP_NOEXCEPT + : depth{ depth_ } + , stencil{ stencil_ } + { + } + + VULKAN_HPP_CONSTEXPR ClearDepthStencilValue( ClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClearDepthStencilValue( VkClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT + : ClearDepthStencilValue( *reinterpret_cast( &rhs ) ) + { + } + + ClearDepthStencilValue & operator=( ClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClearDepthStencilValue & operator=( VkClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue & setDepth( float depth_ ) VULKAN_HPP_NOEXCEPT + { + depth = depth_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue & setStencil( uint32_t stencil_ ) VULKAN_HPP_NOEXCEPT + { + stencil = stencil_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClearDepthStencilValue const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClearDepthStencilValue &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClearDepthStencilValue const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClearDepthStencilValue *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( depth, stencil ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClearDepthStencilValue const & ) const = default; +#else + bool operator==( ClearDepthStencilValue const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( depth == rhs.depth ) && ( stencil == rhs.stencil ); +# endif + } + + bool operator!=( ClearDepthStencilValue const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float depth = {}; + uint32_t stencil = {}; + }; + + union ClearValue + { + using NativeType = VkClearValue; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 ClearValue( VULKAN_HPP_NAMESPACE::ClearColorValue color_ = {} ) : color( color_ ) {} + + VULKAN_HPP_CONSTEXPR_14 ClearValue( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue depthStencil_ ) : depthStencil( depthStencil_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClearValue & setColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & color_ ) VULKAN_HPP_NOEXCEPT + { + color = color_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearValue & setDepthStencil( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue const & depthStencil_ ) VULKAN_HPP_NOEXCEPT + { + depthStencil = depthStencil_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClearValue const &() const + { + return *reinterpret_cast( this ); + } + + operator VkClearValue &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::ClearColorValue color; + VULKAN_HPP_NAMESPACE::ClearDepthStencilValue depthStencil; +#else + VkClearColorValue color; + VkClearDepthStencilValue depthStencil; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkClearAttachment, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkClearAttachment.html + struct ClearAttachment + { + using NativeType = VkClearAttachment; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ClearAttachment( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, + uint32_t colorAttachment_ = {}, + VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {} ) VULKAN_HPP_NOEXCEPT + : aspectMask{ aspectMask_ } + , colorAttachment{ colorAttachment_ } + , clearValue{ clearValue_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ClearAttachment( ClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClearAttachment( VkClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT : ClearAttachment( *reinterpret_cast( &rhs ) ) {} + + ClearAttachment & operator=( ClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClearAttachment & operator=( VkClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT + { + aspectMask = aspectMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setColorAttachment( uint32_t colorAttachment_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachment = colorAttachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT + { + clearValue = clearValue_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClearAttachment const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClearAttachment &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClearAttachment const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClearAttachment *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( aspectMask, colorAttachment, clearValue ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + uint32_t colorAttachment = {}; + VULKAN_HPP_NAMESPACE::ClearValue clearValue = {}; + }; + + // wrapper struct for struct VkClearRect, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkClearRect.html + struct ClearRect + { + using NativeType = VkClearRect; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClearRect( VULKAN_HPP_NAMESPACE::Rect2D rect_ = {}, uint32_t baseArrayLayer_ = {}, uint32_t layerCount_ = {} ) VULKAN_HPP_NOEXCEPT + : rect{ rect_ } + , baseArrayLayer{ baseArrayLayer_ } + , layerCount{ layerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR ClearRect( ClearRect const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClearRect( VkClearRect const & rhs ) VULKAN_HPP_NOEXCEPT : ClearRect( *reinterpret_cast( &rhs ) ) {} + + ClearRect & operator=( ClearRect const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClearRect & operator=( VkClearRect const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClearRect & setRect( VULKAN_HPP_NAMESPACE::Rect2D const & rect_ ) VULKAN_HPP_NOEXCEPT + { + rect = rect_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearRect & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT + { + baseArrayLayer = baseArrayLayer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClearRect & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = layerCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClearRect const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClearRect &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClearRect const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClearRect *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( rect, baseArrayLayer, layerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClearRect const & ) const = default; +#else + bool operator==( ClearRect const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( rect == rhs.rect ) && ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount ); +# endif + } + + bool operator!=( ClearRect const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Rect2D rect = {}; + uint32_t baseArrayLayer = {}; + uint32_t layerCount = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV.html + struct ClusterAccelerationStructureBuildClustersBottomLevelInfoNV + { + using NativeType = VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureBuildClustersBottomLevelInfoNV( uint32_t clusterReferencesCount_ = {}, + uint32_t clusterReferencesStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress clusterReferences_ = {} ) VULKAN_HPP_NOEXCEPT + : clusterReferencesCount{ clusterReferencesCount_ } + , clusterReferencesStride{ clusterReferencesStride_ } + , clusterReferences{ clusterReferences_ } + { + } + + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureBuildClustersBottomLevelInfoNV( ClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureBuildClustersBottomLevelInfoNV( VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureBuildClustersBottomLevelInfoNV( + *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureBuildClustersBottomLevelInfoNV & + operator=( ClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureBuildClustersBottomLevelInfoNV & + operator=( VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildClustersBottomLevelInfoNV & + setClusterReferencesCount( uint32_t clusterReferencesCount_ ) VULKAN_HPP_NOEXCEPT + { + clusterReferencesCount = clusterReferencesCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildClustersBottomLevelInfoNV & + setClusterReferencesStride( uint32_t clusterReferencesStride_ ) VULKAN_HPP_NOEXCEPT + { + clusterReferencesStride = clusterReferencesStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildClustersBottomLevelInfoNV & + setClusterReferences( VULKAN_HPP_NAMESPACE::DeviceAddress clusterReferences_ ) VULKAN_HPP_NOEXCEPT + { + clusterReferences = clusterReferences_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( clusterReferencesCount, clusterReferencesStride, clusterReferences ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( clusterReferencesCount == rhs.clusterReferencesCount ) && ( clusterReferencesStride == rhs.clusterReferencesStride ) && + ( clusterReferences == rhs.clusterReferences ); +# endif + } + + bool operator!=( ClusterAccelerationStructureBuildClustersBottomLevelInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t clusterReferencesCount = {}; + uint32_t clusterReferencesStride = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress clusterReferences = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV.html + struct ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV + { + using NativeType = VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV( uint32_t geometryIndex_ = {}, + uint32_t reserved_ = {}, + uint32_t geometryFlags_ = {} ) VULKAN_HPP_NOEXCEPT + : geometryIndex{ geometryIndex_ } + , reserved{ reserved_ } + , geometryFlags{ geometryFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV( ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV( VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV( + *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV & + operator=( ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV & + operator=( VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV & setGeometryIndex( uint32_t geometryIndex_ ) VULKAN_HPP_NOEXCEPT + { + geometryIndex = geometryIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV & setReserved( uint32_t reserved_ ) VULKAN_HPP_NOEXCEPT + { + reserved = reserved_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV & setGeometryFlags( uint32_t geometryFlags_ ) VULKAN_HPP_NOEXCEPT + { + geometryFlags = geometryFlags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( geometryIndex, reserved, geometryFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( geometryIndex == rhs.geometryIndex ) && ( reserved == rhs.reserved ) && ( geometryFlags == rhs.geometryFlags ); +# endif + } + + bool operator!=( ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t geometryIndex : 24; + uint32_t reserved : 5; + uint32_t geometryFlags : 3; + }; + + // wrapper struct for struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureBuildTriangleClusterInfoNV.html + struct ClusterAccelerationStructureBuildTriangleClusterInfoNV + { + using NativeType = VkClusterAccelerationStructureBuildTriangleClusterInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureBuildTriangleClusterInfoNV( + uint32_t clusterID_ = {}, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV clusterFlags_ = {}, + uint32_t triangleCount_ = {}, + uint32_t vertexCount_ = {}, + uint32_t positionTruncateBitCount_ = {}, + uint32_t indexType_ = {}, + uint32_t opacityMicromapIndexType_ = {}, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags_ = {}, + uint16_t indexBufferStride_ = {}, + uint16_t vertexBufferStride_ = {}, + uint16_t geometryIndexAndFlagsBufferStride_ = {}, + uint16_t opacityMicromapIndexBufferStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress indexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress vertexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress geometryIndexAndFlagsBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapArray_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapIndexBuffer_ = {} ) VULKAN_HPP_NOEXCEPT + : clusterID{ clusterID_ } + , clusterFlags{ clusterFlags_ } + , triangleCount{ triangleCount_ } + , vertexCount{ vertexCount_ } + , positionTruncateBitCount{ positionTruncateBitCount_ } + , indexType{ indexType_ } + , opacityMicromapIndexType{ opacityMicromapIndexType_ } + , baseGeometryIndexAndGeometryFlags{ baseGeometryIndexAndGeometryFlags_ } + , indexBufferStride{ indexBufferStride_ } + , vertexBufferStride{ vertexBufferStride_ } + , geometryIndexAndFlagsBufferStride{ geometryIndexAndFlagsBufferStride_ } + , opacityMicromapIndexBufferStride{ opacityMicromapIndexBufferStride_ } + , indexBuffer{ indexBuffer_ } + , vertexBuffer{ vertexBuffer_ } + , geometryIndexAndFlagsBuffer{ geometryIndexAndFlagsBuffer_ } + , opacityMicromapArray{ opacityMicromapArray_ } + , opacityMicromapIndexBuffer{ opacityMicromapIndexBuffer_ } + { + } + + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureBuildTriangleClusterInfoNV( ClusterAccelerationStructureBuildTriangleClusterInfoNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureBuildTriangleClusterInfoNV( VkClusterAccelerationStructureBuildTriangleClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureBuildTriangleClusterInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureBuildTriangleClusterInfoNV & + operator=( ClusterAccelerationStructureBuildTriangleClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureBuildTriangleClusterInfoNV & + operator=( VkClusterAccelerationStructureBuildTriangleClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setClusterID( uint32_t clusterID_ ) VULKAN_HPP_NOEXCEPT + { + clusterID = clusterID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setClusterFlags( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV clusterFlags_ ) VULKAN_HPP_NOEXCEPT + { + clusterFlags = clusterFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setTriangleCount( uint32_t triangleCount_ ) VULKAN_HPP_NOEXCEPT + { + triangleCount = triangleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexCount = vertexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setPositionTruncateBitCount( uint32_t positionTruncateBitCount_ ) VULKAN_HPP_NOEXCEPT + { + positionTruncateBitCount = positionTruncateBitCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setIndexType( uint32_t indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setOpacityMicromapIndexType( uint32_t opacityMicromapIndexType_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapIndexType = opacityMicromapIndexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setBaseGeometryIndexAndGeometryFlags( + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & baseGeometryIndexAndGeometryFlags_ ) VULKAN_HPP_NOEXCEPT + { + baseGeometryIndexAndGeometryFlags = baseGeometryIndexAndGeometryFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setIndexBufferStride( uint16_t indexBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + indexBufferStride = indexBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & setVertexBufferStride( uint16_t vertexBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexBufferStride = vertexBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setGeometryIndexAndFlagsBufferStride( uint16_t geometryIndexAndFlagsBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + geometryIndexAndFlagsBufferStride = geometryIndexAndFlagsBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setOpacityMicromapIndexBufferStride( uint16_t opacityMicromapIndexBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapIndexBufferStride = opacityMicromapIndexBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setIndexBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress indexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + indexBuffer = indexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setVertexBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress vertexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + vertexBuffer = vertexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setGeometryIndexAndFlagsBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress geometryIndexAndFlagsBuffer_ ) VULKAN_HPP_NOEXCEPT + { + geometryIndexAndFlagsBuffer = geometryIndexAndFlagsBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setOpacityMicromapArray( VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapArray_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapArray = opacityMicromapArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterInfoNV & + setOpacityMicromapIndexBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapIndexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapIndexBuffer = opacityMicromapIndexBuffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureBuildTriangleClusterInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildTriangleClusterInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildTriangleClusterInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildTriangleClusterInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( clusterID, + clusterFlags, + triangleCount, + vertexCount, + positionTruncateBitCount, + indexType, + opacityMicromapIndexType, + baseGeometryIndexAndGeometryFlags, + indexBufferStride, + vertexBufferStride, + geometryIndexAndFlagsBufferStride, + opacityMicromapIndexBufferStride, + indexBuffer, + vertexBuffer, + geometryIndexAndFlagsBuffer, + opacityMicromapArray, + opacityMicromapIndexBuffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureBuildTriangleClusterInfoNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureBuildTriangleClusterInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( clusterID == rhs.clusterID ) && ( clusterFlags == rhs.clusterFlags ) && ( triangleCount == rhs.triangleCount ) && + ( vertexCount == rhs.vertexCount ) && ( positionTruncateBitCount == rhs.positionTruncateBitCount ) && ( indexType == rhs.indexType ) && + ( opacityMicromapIndexType == rhs.opacityMicromapIndexType ) && ( baseGeometryIndexAndGeometryFlags == rhs.baseGeometryIndexAndGeometryFlags ) && + ( indexBufferStride == rhs.indexBufferStride ) && ( vertexBufferStride == rhs.vertexBufferStride ) && + ( geometryIndexAndFlagsBufferStride == rhs.geometryIndexAndFlagsBufferStride ) && + ( opacityMicromapIndexBufferStride == rhs.opacityMicromapIndexBufferStride ) && ( indexBuffer == rhs.indexBuffer ) && + ( vertexBuffer == rhs.vertexBuffer ) && ( geometryIndexAndFlagsBuffer == rhs.geometryIndexAndFlagsBuffer ) && + ( opacityMicromapArray == rhs.opacityMicromapArray ) && ( opacityMicromapIndexBuffer == rhs.opacityMicromapIndexBuffer ); +# endif + } + + bool operator!=( ClusterAccelerationStructureBuildTriangleClusterInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t clusterID = {}; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV clusterFlags = {}; + uint32_t triangleCount : 9; + uint32_t vertexCount : 9; + uint32_t positionTruncateBitCount : 6; + uint32_t indexType : 4; + uint32_t opacityMicromapIndexType : 4; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags = {}; + uint16_t indexBufferStride = {}; + uint16_t vertexBufferStride = {}; + uint16_t geometryIndexAndFlagsBufferStride = {}; + uint16_t opacityMicromapIndexBufferStride = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress indexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress vertexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress geometryIndexAndFlagsBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapArray = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapIndexBuffer = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV.html + struct ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV + { + using NativeType = VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV( + uint32_t clusterID_ = {}, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV clusterFlags_ = {}, + uint32_t triangleCount_ = {}, + uint32_t vertexCount_ = {}, + uint32_t positionTruncateBitCount_ = {}, + uint32_t indexType_ = {}, + uint32_t opacityMicromapIndexType_ = {}, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags_ = {}, + uint16_t indexBufferStride_ = {}, + uint16_t vertexBufferStride_ = {}, + uint16_t geometryIndexAndFlagsBufferStride_ = {}, + uint16_t opacityMicromapIndexBufferStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress indexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress vertexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress geometryIndexAndFlagsBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapArray_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapIndexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress instantiationBoundingBoxLimit_ = {} ) VULKAN_HPP_NOEXCEPT + : clusterID{ clusterID_ } + , clusterFlags{ clusterFlags_ } + , triangleCount{ triangleCount_ } + , vertexCount{ vertexCount_ } + , positionTruncateBitCount{ positionTruncateBitCount_ } + , indexType{ indexType_ } + , opacityMicromapIndexType{ opacityMicromapIndexType_ } + , baseGeometryIndexAndGeometryFlags{ baseGeometryIndexAndGeometryFlags_ } + , indexBufferStride{ indexBufferStride_ } + , vertexBufferStride{ vertexBufferStride_ } + , geometryIndexAndFlagsBufferStride{ geometryIndexAndFlagsBufferStride_ } + , opacityMicromapIndexBufferStride{ opacityMicromapIndexBufferStride_ } + , indexBuffer{ indexBuffer_ } + , vertexBuffer{ vertexBuffer_ } + , geometryIndexAndFlagsBuffer{ geometryIndexAndFlagsBuffer_ } + , opacityMicromapArray{ opacityMicromapArray_ } + , opacityMicromapIndexBuffer{ opacityMicromapIndexBuffer_ } + , instantiationBoundingBoxLimit{ instantiationBoundingBoxLimit_ } + { + } + + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV( + ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV( VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & rhs ) + VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV( + *reinterpret_cast( &rhs ) ) + { + } + + explicit ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV( + ClusterAccelerationStructureBuildTriangleClusterInfoNV const & clusterAccelerationStructureBuildTriangleClusterInfoNV, + VULKAN_HPP_NAMESPACE::DeviceAddress instantiationBoundingBoxLimit_ = {} ) + : clusterID( clusterAccelerationStructureBuildTriangleClusterInfoNV.clusterID ) + , clusterFlags( clusterAccelerationStructureBuildTriangleClusterInfoNV.clusterFlags ) + , triangleCount( clusterAccelerationStructureBuildTriangleClusterInfoNV.triangleCount ) + , vertexCount( clusterAccelerationStructureBuildTriangleClusterInfoNV.vertexCount ) + , positionTruncateBitCount( clusterAccelerationStructureBuildTriangleClusterInfoNV.positionTruncateBitCount ) + , indexType( clusterAccelerationStructureBuildTriangleClusterInfoNV.indexType ) + , opacityMicromapIndexType( clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapIndexType ) + , baseGeometryIndexAndGeometryFlags( clusterAccelerationStructureBuildTriangleClusterInfoNV.baseGeometryIndexAndGeometryFlags ) + , indexBufferStride( clusterAccelerationStructureBuildTriangleClusterInfoNV.indexBufferStride ) + , vertexBufferStride( clusterAccelerationStructureBuildTriangleClusterInfoNV.vertexBufferStride ) + , geometryIndexAndFlagsBufferStride( clusterAccelerationStructureBuildTriangleClusterInfoNV.geometryIndexAndFlagsBufferStride ) + , opacityMicromapIndexBufferStride( clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapIndexBufferStride ) + , indexBuffer( clusterAccelerationStructureBuildTriangleClusterInfoNV.indexBuffer ) + , vertexBuffer( clusterAccelerationStructureBuildTriangleClusterInfoNV.vertexBuffer ) + , geometryIndexAndFlagsBuffer( clusterAccelerationStructureBuildTriangleClusterInfoNV.geometryIndexAndFlagsBuffer ) + , opacityMicromapArray( clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapArray ) + , opacityMicromapIndexBuffer( clusterAccelerationStructureBuildTriangleClusterInfoNV.opacityMicromapIndexBuffer ) + , instantiationBoundingBoxLimit( instantiationBoundingBoxLimit_ ) + { + } + + ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + operator=( ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + operator=( VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & setClusterID( uint32_t clusterID_ ) VULKAN_HPP_NOEXCEPT + { + clusterID = clusterID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setClusterFlags( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV clusterFlags_ ) VULKAN_HPP_NOEXCEPT + { + clusterFlags = clusterFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & setTriangleCount( uint32_t triangleCount_ ) VULKAN_HPP_NOEXCEPT + { + triangleCount = triangleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexCount = vertexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setPositionTruncateBitCount( uint32_t positionTruncateBitCount_ ) VULKAN_HPP_NOEXCEPT + { + positionTruncateBitCount = positionTruncateBitCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & setIndexType( uint32_t indexType_ ) VULKAN_HPP_NOEXCEPT + { + indexType = indexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setOpacityMicromapIndexType( uint32_t opacityMicromapIndexType_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapIndexType = opacityMicromapIndexType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & setBaseGeometryIndexAndGeometryFlags( + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV const & baseGeometryIndexAndGeometryFlags_ ) VULKAN_HPP_NOEXCEPT + { + baseGeometryIndexAndGeometryFlags = baseGeometryIndexAndGeometryFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setIndexBufferStride( uint16_t indexBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + indexBufferStride = indexBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setVertexBufferStride( uint16_t vertexBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexBufferStride = vertexBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setGeometryIndexAndFlagsBufferStride( uint16_t geometryIndexAndFlagsBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + geometryIndexAndFlagsBufferStride = geometryIndexAndFlagsBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setOpacityMicromapIndexBufferStride( uint16_t opacityMicromapIndexBufferStride_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapIndexBufferStride = opacityMicromapIndexBufferStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setIndexBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress indexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + indexBuffer = indexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setVertexBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress vertexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + vertexBuffer = vertexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setGeometryIndexAndFlagsBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress geometryIndexAndFlagsBuffer_ ) VULKAN_HPP_NOEXCEPT + { + geometryIndexAndFlagsBuffer = geometryIndexAndFlagsBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setOpacityMicromapArray( VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapArray_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapArray = opacityMicromapArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setOpacityMicromapIndexBuffer( VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapIndexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + opacityMicromapIndexBuffer = opacityMicromapIndexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV & + setInstantiationBoundingBoxLimit( VULKAN_HPP_NAMESPACE::DeviceAddress instantiationBoundingBoxLimit_ ) VULKAN_HPP_NOEXCEPT + { + instantiationBoundingBoxLimit = instantiationBoundingBoxLimit_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( clusterID, + clusterFlags, + triangleCount, + vertexCount, + positionTruncateBitCount, + indexType, + opacityMicromapIndexType, + baseGeometryIndexAndGeometryFlags, + indexBufferStride, + vertexBufferStride, + geometryIndexAndFlagsBufferStride, + opacityMicromapIndexBufferStride, + indexBuffer, + vertexBuffer, + geometryIndexAndFlagsBuffer, + opacityMicromapArray, + opacityMicromapIndexBuffer, + instantiationBoundingBoxLimit ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( clusterID == rhs.clusterID ) && ( clusterFlags == rhs.clusterFlags ) && ( triangleCount == rhs.triangleCount ) && + ( vertexCount == rhs.vertexCount ) && ( positionTruncateBitCount == rhs.positionTruncateBitCount ) && ( indexType == rhs.indexType ) && + ( opacityMicromapIndexType == rhs.opacityMicromapIndexType ) && ( baseGeometryIndexAndGeometryFlags == rhs.baseGeometryIndexAndGeometryFlags ) && + ( indexBufferStride == rhs.indexBufferStride ) && ( vertexBufferStride == rhs.vertexBufferStride ) && + ( geometryIndexAndFlagsBufferStride == rhs.geometryIndexAndFlagsBufferStride ) && + ( opacityMicromapIndexBufferStride == rhs.opacityMicromapIndexBufferStride ) && ( indexBuffer == rhs.indexBuffer ) && + ( vertexBuffer == rhs.vertexBuffer ) && ( geometryIndexAndFlagsBuffer == rhs.geometryIndexAndFlagsBuffer ) && + ( opacityMicromapArray == rhs.opacityMicromapArray ) && ( opacityMicromapIndexBuffer == rhs.opacityMicromapIndexBuffer ) && + ( instantiationBoundingBoxLimit == rhs.instantiationBoundingBoxLimit ); +# endif + } + + bool operator!=( ClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t clusterID = {}; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClusterFlagsNV clusterFlags = {}; + uint32_t triangleCount : 9; + uint32_t vertexCount : 9; + uint32_t positionTruncateBitCount : 6; + uint32_t indexType : 4; + uint32_t opacityMicromapIndexType : 4; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags = {}; + uint16_t indexBufferStride = {}; + uint16_t vertexBufferStride = {}; + uint16_t geometryIndexAndFlagsBufferStride = {}; + uint16_t opacityMicromapIndexBufferStride = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress indexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress vertexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress geometryIndexAndFlagsBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapArray = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress opacityMicromapIndexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress instantiationBoundingBoxLimit = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureClustersBottomLevelInputNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureClustersBottomLevelInputNV.html + struct ClusterAccelerationStructureClustersBottomLevelInputNV + { + using NativeType = VkClusterAccelerationStructureClustersBottomLevelInputNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eClusterAccelerationStructureClustersBottomLevelInputNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureClustersBottomLevelInputNV( uint32_t maxTotalClusterCount_ = {}, + uint32_t maxClusterCountPerAccelerationStructure_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxTotalClusterCount{ maxTotalClusterCount_ } + , maxClusterCountPerAccelerationStructure{ maxClusterCountPerAccelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureClustersBottomLevelInputNV( ClusterAccelerationStructureClustersBottomLevelInputNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureClustersBottomLevelInputNV( VkClusterAccelerationStructureClustersBottomLevelInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureClustersBottomLevelInputNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureClustersBottomLevelInputNV & + operator=( ClusterAccelerationStructureClustersBottomLevelInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureClustersBottomLevelInputNV & + operator=( VkClusterAccelerationStructureClustersBottomLevelInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureClustersBottomLevelInputNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureClustersBottomLevelInputNV & + setMaxTotalClusterCount( uint32_t maxTotalClusterCount_ ) VULKAN_HPP_NOEXCEPT + { + maxTotalClusterCount = maxTotalClusterCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureClustersBottomLevelInputNV & + setMaxClusterCountPerAccelerationStructure( uint32_t maxClusterCountPerAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + maxClusterCountPerAccelerationStructure = maxClusterCountPerAccelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureClustersBottomLevelInputNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureClustersBottomLevelInputNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureClustersBottomLevelInputNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureClustersBottomLevelInputNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxTotalClusterCount, maxClusterCountPerAccelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureClustersBottomLevelInputNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureClustersBottomLevelInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTotalClusterCount == rhs.maxTotalClusterCount ) && + ( maxClusterCountPerAccelerationStructure == rhs.maxClusterCountPerAccelerationStructure ); +# endif + } + + bool operator!=( ClusterAccelerationStructureClustersBottomLevelInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eClusterAccelerationStructureClustersBottomLevelInputNV; + void * pNext = {}; + uint32_t maxTotalClusterCount = {}; + uint32_t maxClusterCountPerAccelerationStructure = {}; + }; + + template <> + struct CppType + { + using Type = ClusterAccelerationStructureClustersBottomLevelInputNV; + }; + + // wrapper struct for struct VkClusterAccelerationStructureTriangleClusterInputNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureTriangleClusterInputNV.html + struct ClusterAccelerationStructureTriangleClusterInputNV + { + using NativeType = VkClusterAccelerationStructureTriangleClusterInputNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eClusterAccelerationStructureTriangleClusterInputNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureTriangleClusterInputNV( VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint32_t maxGeometryIndexValue_ = {}, + uint32_t maxClusterUniqueGeometryCount_ = {}, + uint32_t maxClusterTriangleCount_ = {}, + uint32_t maxClusterVertexCount_ = {}, + uint32_t maxTotalTriangleCount_ = {}, + uint32_t maxTotalVertexCount_ = {}, + uint32_t minPositionTruncateBitCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexFormat{ vertexFormat_ } + , maxGeometryIndexValue{ maxGeometryIndexValue_ } + , maxClusterUniqueGeometryCount{ maxClusterUniqueGeometryCount_ } + , maxClusterTriangleCount{ maxClusterTriangleCount_ } + , maxClusterVertexCount{ maxClusterVertexCount_ } + , maxTotalTriangleCount{ maxTotalTriangleCount_ } + , maxTotalVertexCount{ maxTotalVertexCount_ } + , minPositionTruncateBitCount{ minPositionTruncateBitCount_ } + { + } + + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureTriangleClusterInputNV( ClusterAccelerationStructureTriangleClusterInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureTriangleClusterInputNV( VkClusterAccelerationStructureTriangleClusterInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureTriangleClusterInputNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureTriangleClusterInputNV & + operator=( ClusterAccelerationStructureTriangleClusterInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureTriangleClusterInputNV & operator=( VkClusterAccelerationStructureTriangleClusterInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & + setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT + { + vertexFormat = vertexFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & setMaxGeometryIndexValue( uint32_t maxGeometryIndexValue_ ) VULKAN_HPP_NOEXCEPT + { + maxGeometryIndexValue = maxGeometryIndexValue_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & + setMaxClusterUniqueGeometryCount( uint32_t maxClusterUniqueGeometryCount_ ) VULKAN_HPP_NOEXCEPT + { + maxClusterUniqueGeometryCount = maxClusterUniqueGeometryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & + setMaxClusterTriangleCount( uint32_t maxClusterTriangleCount_ ) VULKAN_HPP_NOEXCEPT + { + maxClusterTriangleCount = maxClusterTriangleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & setMaxClusterVertexCount( uint32_t maxClusterVertexCount_ ) VULKAN_HPP_NOEXCEPT + { + maxClusterVertexCount = maxClusterVertexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & setMaxTotalTriangleCount( uint32_t maxTotalTriangleCount_ ) VULKAN_HPP_NOEXCEPT + { + maxTotalTriangleCount = maxTotalTriangleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & setMaxTotalVertexCount( uint32_t maxTotalVertexCount_ ) VULKAN_HPP_NOEXCEPT + { + maxTotalVertexCount = maxTotalVertexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureTriangleClusterInputNV & + setMinPositionTruncateBitCount( uint32_t minPositionTruncateBitCount_ ) VULKAN_HPP_NOEXCEPT + { + minPositionTruncateBitCount = minPositionTruncateBitCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureTriangleClusterInputNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureTriangleClusterInputNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureTriangleClusterInputNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureTriangleClusterInputNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + vertexFormat, + maxGeometryIndexValue, + maxClusterUniqueGeometryCount, + maxClusterTriangleCount, + maxClusterVertexCount, + maxTotalTriangleCount, + maxTotalVertexCount, + minPositionTruncateBitCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureTriangleClusterInputNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureTriangleClusterInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexFormat == rhs.vertexFormat ) && + ( maxGeometryIndexValue == rhs.maxGeometryIndexValue ) && ( maxClusterUniqueGeometryCount == rhs.maxClusterUniqueGeometryCount ) && + ( maxClusterTriangleCount == rhs.maxClusterTriangleCount ) && ( maxClusterVertexCount == rhs.maxClusterVertexCount ) && + ( maxTotalTriangleCount == rhs.maxTotalTriangleCount ) && ( maxTotalVertexCount == rhs.maxTotalVertexCount ) && + ( minPositionTruncateBitCount == rhs.minPositionTruncateBitCount ); +# endif + } + + bool operator!=( ClusterAccelerationStructureTriangleClusterInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eClusterAccelerationStructureTriangleClusterInputNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format vertexFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint32_t maxGeometryIndexValue = {}; + uint32_t maxClusterUniqueGeometryCount = {}; + uint32_t maxClusterTriangleCount = {}; + uint32_t maxClusterVertexCount = {}; + uint32_t maxTotalTriangleCount = {}; + uint32_t maxTotalVertexCount = {}; + uint32_t minPositionTruncateBitCount = {}; + }; + + template <> + struct CppType + { + using Type = ClusterAccelerationStructureTriangleClusterInputNV; + }; + + // wrapper struct for struct VkClusterAccelerationStructureMoveObjectsInputNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureMoveObjectsInputNV.html + struct ClusterAccelerationStructureMoveObjectsInputNV + { + using NativeType = VkClusterAccelerationStructureMoveObjectsInputNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eClusterAccelerationStructureMoveObjectsInputNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureMoveObjectsInputNV( + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTypeNV type_ = VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTypeNV::eClustersBottomLevel, + VULKAN_HPP_NAMESPACE::Bool32 noMoveOverlap_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxMovedBytes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , noMoveOverlap{ noMoveOverlap_ } + , maxMovedBytes{ maxMovedBytes_ } + { + } + + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureMoveObjectsInputNV( ClusterAccelerationStructureMoveObjectsInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureMoveObjectsInputNV( VkClusterAccelerationStructureMoveObjectsInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureMoveObjectsInputNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureMoveObjectsInputNV & operator=( ClusterAccelerationStructureMoveObjectsInputNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureMoveObjectsInputNV & operator=( VkClusterAccelerationStructureMoveObjectsInputNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureMoveObjectsInputNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureMoveObjectsInputNV & + setType( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTypeNV type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureMoveObjectsInputNV & setNoMoveOverlap( VULKAN_HPP_NAMESPACE::Bool32 noMoveOverlap_ ) VULKAN_HPP_NOEXCEPT + { + noMoveOverlap = noMoveOverlap_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureMoveObjectsInputNV & + setMaxMovedBytes( VULKAN_HPP_NAMESPACE::DeviceSize maxMovedBytes_ ) VULKAN_HPP_NOEXCEPT + { + maxMovedBytes = maxMovedBytes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureMoveObjectsInputNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureMoveObjectsInputNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureMoveObjectsInputNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureMoveObjectsInputNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, noMoveOverlap, maxMovedBytes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureMoveObjectsInputNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureMoveObjectsInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( noMoveOverlap == rhs.noMoveOverlap ) && + ( maxMovedBytes == rhs.maxMovedBytes ); +# endif + } + + bool operator!=( ClusterAccelerationStructureMoveObjectsInputNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eClusterAccelerationStructureMoveObjectsInputNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTypeNV type = VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTypeNV::eClustersBottomLevel; + VULKAN_HPP_NAMESPACE::Bool32 noMoveOverlap = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxMovedBytes = {}; + }; + + template <> + struct CppType + { + using Type = ClusterAccelerationStructureMoveObjectsInputNV; + }; + + union ClusterAccelerationStructureOpInputNV + { + using NativeType = VkClusterAccelerationStructureOpInputNV; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 + ClusterAccelerationStructureOpInputNV( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClustersBottomLevelInputNV * pClustersBottomLevel_ = {} ) + : pClustersBottomLevel( pClustersBottomLevel_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 + ClusterAccelerationStructureOpInputNV( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTriangleClusterInputNV * pTriangleClusters_ ) + : pTriangleClusters( pTriangleClusters_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureOpInputNV( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInputNV * pMoveObjects_ ) + : pMoveObjects( pMoveObjects_ ) + { + } +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureOpInputNV & + setPClustersBottomLevel( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClustersBottomLevelInputNV * pClustersBottomLevel_ ) VULKAN_HPP_NOEXCEPT + { + pClustersBottomLevel = pClustersBottomLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureOpInputNV & + setPTriangleClusters( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTriangleClusterInputNV * pTriangleClusters_ ) VULKAN_HPP_NOEXCEPT + { + pTriangleClusters = pTriangleClusters_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureOpInputNV & + setPMoveObjects( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInputNV * pMoveObjects_ ) VULKAN_HPP_NOEXCEPT + { + pMoveObjects = pMoveObjects_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureOpInputNV const &() const + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureOpInputNV &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureClustersBottomLevelInputNV * pClustersBottomLevel; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureTriangleClusterInputNV * pTriangleClusters; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureMoveObjectsInputNV * pMoveObjects; +#else + VkClusterAccelerationStructureClustersBottomLevelInputNV * pClustersBottomLevel; + VkClusterAccelerationStructureTriangleClusterInputNV * pTriangleClusters; + VkClusterAccelerationStructureMoveObjectsInputNV * pMoveObjects; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkClusterAccelerationStructureInputInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureInputInfoNV.html + struct ClusterAccelerationStructureInputInfoNV + { + using NativeType = VkClusterAccelerationStructureInputInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eClusterAccelerationStructureInputInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV( + uint32_t maxAccelerationStructureCount_ = {}, + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpTypeNV opType_ = VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpTypeNV::eMoveObjects, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpModeNV opMode_ = VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpModeNV::eImplicitDestinations, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpInputNV opInput_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxAccelerationStructureCount{ maxAccelerationStructureCount_ } + , flags{ flags_ } + , opType{ opType_ } + , opMode{ opMode_ } + , opInput{ opInput_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV( ClusterAccelerationStructureInputInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureInputInfoNV( VkClusterAccelerationStructureInputInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureInputInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureInputInfoNV & operator=( ClusterAccelerationStructureInputInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureInputInfoNV & operator=( VkClusterAccelerationStructureInputInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV & + setMaxAccelerationStructureCount( uint32_t maxAccelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT + { + maxAccelerationStructureCount = maxAccelerationStructureCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV & + setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV & + setOpType( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpTypeNV opType_ ) VULKAN_HPP_NOEXCEPT + { + opType = opType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV & + setOpMode( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpModeNV opMode_ ) VULKAN_HPP_NOEXCEPT + { + opMode = opMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInputInfoNV & + setOpInput( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpInputNV const & opInput_ ) VULKAN_HPP_NOEXCEPT + { + opInput = opInput_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureInputInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureInputInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureInputInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureInputInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxAccelerationStructureCount, flags, opType, opMode, opInput ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eClusterAccelerationStructureInputInfoNV; + void * pNext = {}; + uint32_t maxAccelerationStructureCount = {}; + VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpTypeNV opType = VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpTypeNV::eMoveObjects; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpModeNV opMode = VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpModeNV::eImplicitDestinations; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureOpInputNV opInput = {}; + }; + + template <> + struct CppType + { + using Type = ClusterAccelerationStructureInputInfoNV; + }; + + // wrapper struct for struct VkStridedDeviceAddressRegionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkStridedDeviceAddressRegionKHR.html + struct StridedDeviceAddressRegionKHR + { + using NativeType = VkStridedDeviceAddressRegionKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR StridedDeviceAddressRegionKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize stride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT + : deviceAddress{ deviceAddress_ } + , stride{ stride_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR StridedDeviceAddressRegionKHR( StridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + StridedDeviceAddressRegionKHR( VkStridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : StridedDeviceAddressRegionKHR( *reinterpret_cast( &rhs ) ) + { + } + + StridedDeviceAddressRegionKHR & operator=( StridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + StridedDeviceAddressRegionKHR & operator=( VkStridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR & setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkStridedDeviceAddressRegionKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStridedDeviceAddressRegionKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStridedDeviceAddressRegionKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkStridedDeviceAddressRegionKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( deviceAddress, stride, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( StridedDeviceAddressRegionKHR const & ) const = default; +#else + bool operator==( StridedDeviceAddressRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( deviceAddress == rhs.deviceAddress ) && ( stride == rhs.stride ) && ( size == rhs.size ); +# endif + } + + bool operator!=( StridedDeviceAddressRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize stride = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureCommandsInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureCommandsInfoNV.html + struct ClusterAccelerationStructureCommandsInfoNV + { + using NativeType = VkClusterAccelerationStructureCommandsInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eClusterAccelerationStructureCommandsInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + ClusterAccelerationStructureCommandsInfoNV( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV input_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress dstImplicitData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress scratchData_ = {}, + VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR dstAddressesArray_ = {}, + VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR dstSizesArray_ = {}, + VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR srcInfosArray_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress srcInfosCount_ = {}, + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , input{ input_ } + , dstImplicitData{ dstImplicitData_ } + , scratchData{ scratchData_ } + , dstAddressesArray{ dstAddressesArray_ } + , dstSizesArray{ dstSizesArray_ } + , srcInfosArray{ srcInfosArray_ } + , srcInfosCount{ srcInfosCount_ } + , addressResolutionFlags{ addressResolutionFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV( ClusterAccelerationStructureCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureCommandsInfoNV( VkClusterAccelerationStructureCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureCommandsInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureCommandsInfoNV & operator=( ClusterAccelerationStructureCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureCommandsInfoNV & operator=( VkClusterAccelerationStructureCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setInput( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV const & input_ ) VULKAN_HPP_NOEXCEPT + { + input = input_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setDstImplicitData( VULKAN_HPP_NAMESPACE::DeviceAddress dstImplicitData_ ) VULKAN_HPP_NOEXCEPT + { + dstImplicitData = dstImplicitData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & setScratchData( VULKAN_HPP_NAMESPACE::DeviceAddress scratchData_ ) VULKAN_HPP_NOEXCEPT + { + scratchData = scratchData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setDstAddressesArray( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR const & dstAddressesArray_ ) VULKAN_HPP_NOEXCEPT + { + dstAddressesArray = dstAddressesArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setDstSizesArray( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR const & dstSizesArray_ ) VULKAN_HPP_NOEXCEPT + { + dstSizesArray = dstSizesArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setSrcInfosArray( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR const & srcInfosArray_ ) VULKAN_HPP_NOEXCEPT + { + srcInfosArray = srcInfosArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setSrcInfosCount( VULKAN_HPP_NAMESPACE::DeviceAddress srcInfosCount_ ) VULKAN_HPP_NOEXCEPT + { + srcInfosCount = srcInfosCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureCommandsInfoNV & + setAddressResolutionFlags( VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags_ ) VULKAN_HPP_NOEXCEPT + { + addressResolutionFlags = addressResolutionFlags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureCommandsInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureCommandsInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureCommandsInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureCommandsInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, input, dstImplicitData, scratchData, dstAddressesArray, dstSizesArray, srcInfosArray, srcInfosCount, addressResolutionFlags ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eClusterAccelerationStructureCommandsInfoNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureInputInfoNV input = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress dstImplicitData = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress scratchData = {}; + VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR dstAddressesArray = {}; + VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR dstSizesArray = {}; + VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR srcInfosArray = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress srcInfosCount = {}; + VULKAN_HPP_NAMESPACE::ClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags = {}; + }; + + template <> + struct CppType + { + using Type = ClusterAccelerationStructureCommandsInfoNV; + }; + + // wrapper struct for struct VkClusterAccelerationStructureGetTemplateIndicesInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureGetTemplateIndicesInfoNV.html + struct ClusterAccelerationStructureGetTemplateIndicesInfoNV + { + using NativeType = VkClusterAccelerationStructureGetTemplateIndicesInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureGetTemplateIndicesInfoNV( VULKAN_HPP_NAMESPACE::DeviceAddress clusterTemplateAddress_ = {} ) VULKAN_HPP_NOEXCEPT + : clusterTemplateAddress{ clusterTemplateAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureGetTemplateIndicesInfoNV( ClusterAccelerationStructureGetTemplateIndicesInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureGetTemplateIndicesInfoNV( VkClusterAccelerationStructureGetTemplateIndicesInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureGetTemplateIndicesInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureGetTemplateIndicesInfoNV & + operator=( ClusterAccelerationStructureGetTemplateIndicesInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureGetTemplateIndicesInfoNV & operator=( VkClusterAccelerationStructureGetTemplateIndicesInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureGetTemplateIndicesInfoNV & + setClusterTemplateAddress( VULKAN_HPP_NAMESPACE::DeviceAddress clusterTemplateAddress_ ) VULKAN_HPP_NOEXCEPT + { + clusterTemplateAddress = clusterTemplateAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureGetTemplateIndicesInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureGetTemplateIndicesInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureGetTemplateIndicesInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureGetTemplateIndicesInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( clusterTemplateAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureGetTemplateIndicesInfoNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureGetTemplateIndicesInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( clusterTemplateAddress == rhs.clusterTemplateAddress ); +# endif + } + + bool operator!=( ClusterAccelerationStructureGetTemplateIndicesInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress clusterTemplateAddress = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureInstantiateClusterInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureInstantiateClusterInfoNV.html + struct ClusterAccelerationStructureInstantiateClusterInfoNV + { + using NativeType = VkClusterAccelerationStructureInstantiateClusterInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureInstantiateClusterInfoNV( uint32_t clusterIdOffset_ = {}, + uint32_t geometryIndexOffset_ = {}, + uint32_t reserved_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress clusterTemplateAddress_ = {}, + VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV vertexBuffer_ = {} ) VULKAN_HPP_NOEXCEPT + : clusterIdOffset{ clusterIdOffset_ } + , geometryIndexOffset{ geometryIndexOffset_ } + , reserved{ reserved_ } + , clusterTemplateAddress{ clusterTemplateAddress_ } + , vertexBuffer{ vertexBuffer_ } + { + } + + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureInstantiateClusterInfoNV( ClusterAccelerationStructureInstantiateClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureInstantiateClusterInfoNV( VkClusterAccelerationStructureInstantiateClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureInstantiateClusterInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureInstantiateClusterInfoNV & + operator=( ClusterAccelerationStructureInstantiateClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureInstantiateClusterInfoNV & operator=( VkClusterAccelerationStructureInstantiateClusterInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInstantiateClusterInfoNV & setClusterIdOffset( uint32_t clusterIdOffset_ ) VULKAN_HPP_NOEXCEPT + { + clusterIdOffset = clusterIdOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInstantiateClusterInfoNV & setGeometryIndexOffset( uint32_t geometryIndexOffset_ ) VULKAN_HPP_NOEXCEPT + { + geometryIndexOffset = geometryIndexOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInstantiateClusterInfoNV & setReserved( uint32_t reserved_ ) VULKAN_HPP_NOEXCEPT + { + reserved = reserved_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInstantiateClusterInfoNV & + setClusterTemplateAddress( VULKAN_HPP_NAMESPACE::DeviceAddress clusterTemplateAddress_ ) VULKAN_HPP_NOEXCEPT + { + clusterTemplateAddress = clusterTemplateAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureInstantiateClusterInfoNV & + setVertexBuffer( VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV const & vertexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + vertexBuffer = vertexBuffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureInstantiateClusterInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureInstantiateClusterInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureInstantiateClusterInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureInstantiateClusterInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( clusterIdOffset, geometryIndexOffset, reserved, clusterTemplateAddress, vertexBuffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureInstantiateClusterInfoNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureInstantiateClusterInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( clusterIdOffset == rhs.clusterIdOffset ) && ( geometryIndexOffset == rhs.geometryIndexOffset ) && ( reserved == rhs.reserved ) && + ( clusterTemplateAddress == rhs.clusterTemplateAddress ) && ( vertexBuffer == rhs.vertexBuffer ); +# endif + } + + bool operator!=( ClusterAccelerationStructureInstantiateClusterInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t clusterIdOffset = {}; + uint32_t geometryIndexOffset : 24; + uint32_t reserved : 8; + VULKAN_HPP_NAMESPACE::DeviceAddress clusterTemplateAddress = {}; + VULKAN_HPP_NAMESPACE::StridedDeviceAddressNV vertexBuffer = {}; + }; + + // wrapper struct for struct VkClusterAccelerationStructureMoveObjectsInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkClusterAccelerationStructureMoveObjectsInfoNV.html + struct ClusterAccelerationStructureMoveObjectsInfoNV + { + using NativeType = VkClusterAccelerationStructureMoveObjectsInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ClusterAccelerationStructureMoveObjectsInfoNV( VULKAN_HPP_NAMESPACE::DeviceAddress srcAccelerationStructure_ = {} ) VULKAN_HPP_NOEXCEPT + : srcAccelerationStructure{ srcAccelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR + ClusterAccelerationStructureMoveObjectsInfoNV( ClusterAccelerationStructureMoveObjectsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ClusterAccelerationStructureMoveObjectsInfoNV( VkClusterAccelerationStructureMoveObjectsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ClusterAccelerationStructureMoveObjectsInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ClusterAccelerationStructureMoveObjectsInfoNV & operator=( ClusterAccelerationStructureMoveObjectsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ClusterAccelerationStructureMoveObjectsInfoNV & operator=( VkClusterAccelerationStructureMoveObjectsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ClusterAccelerationStructureMoveObjectsInfoNV & + setSrcAccelerationStructure( VULKAN_HPP_NAMESPACE::DeviceAddress srcAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + srcAccelerationStructure = srcAccelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkClusterAccelerationStructureMoveObjectsInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureMoveObjectsInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureMoveObjectsInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkClusterAccelerationStructureMoveObjectsInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcAccelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ClusterAccelerationStructureMoveObjectsInfoNV const & ) const = default; +#else + bool operator==( ClusterAccelerationStructureMoveObjectsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcAccelerationStructure == rhs.srcAccelerationStructure ); +# endif + } + + bool operator!=( ClusterAccelerationStructureMoveObjectsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress srcAccelerationStructure = {}; + }; + + // wrapper struct for struct VkCoarseSampleLocationNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCoarseSampleLocationNV.html + struct CoarseSampleLocationNV + { + using NativeType = VkCoarseSampleLocationNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CoarseSampleLocationNV( uint32_t pixelX_ = {}, uint32_t pixelY_ = {}, uint32_t sample_ = {} ) VULKAN_HPP_NOEXCEPT + : pixelX{ pixelX_ } + , pixelY{ pixelY_ } + , sample{ sample_ } + { + } + + VULKAN_HPP_CONSTEXPR CoarseSampleLocationNV( CoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CoarseSampleLocationNV( VkCoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CoarseSampleLocationNV( *reinterpret_cast( &rhs ) ) + { + } + + CoarseSampleLocationNV & operator=( CoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CoarseSampleLocationNV & operator=( VkCoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setPixelX( uint32_t pixelX_ ) VULKAN_HPP_NOEXCEPT + { + pixelX = pixelX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setPixelY( uint32_t pixelY_ ) VULKAN_HPP_NOEXCEPT + { + pixelY = pixelY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setSample( uint32_t sample_ ) VULKAN_HPP_NOEXCEPT + { + sample = sample_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCoarseSampleLocationNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCoarseSampleLocationNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCoarseSampleLocationNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCoarseSampleLocationNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( pixelX, pixelY, sample ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CoarseSampleLocationNV const & ) const = default; +#else + bool operator==( CoarseSampleLocationNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( pixelX == rhs.pixelX ) && ( pixelY == rhs.pixelY ) && ( sample == rhs.sample ); +# endif + } + + bool operator!=( CoarseSampleLocationNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t pixelX = {}; + uint32_t pixelY = {}; + uint32_t sample = {}; + }; + + // wrapper struct for struct VkCoarseSampleOrderCustomNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCoarseSampleOrderCustomNV.html + struct CoarseSampleOrderCustomNV + { + using NativeType = VkCoarseSampleOrderCustomNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CoarseSampleOrderCustomNV( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_ = VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV::eNoInvocations, + uint32_t sampleCount_ = {}, + uint32_t sampleLocationCount_ = {}, + const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations_ = {} ) VULKAN_HPP_NOEXCEPT + : shadingRate{ shadingRate_ } + , sampleCount{ sampleCount_ } + , sampleLocationCount{ sampleLocationCount_ } + , pSampleLocations{ pSampleLocations_ } + { + } + + VULKAN_HPP_CONSTEXPR CoarseSampleOrderCustomNV( CoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CoarseSampleOrderCustomNV( VkCoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CoarseSampleOrderCustomNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CoarseSampleOrderCustomNV( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_, + uint32_t sampleCount_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_ ) + : shadingRate( shadingRate_ ) + , sampleCount( sampleCount_ ) + , sampleLocationCount( static_cast( sampleLocations_.size() ) ) + , pSampleLocations( sampleLocations_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CoarseSampleOrderCustomNV & operator=( CoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CoarseSampleOrderCustomNV & operator=( VkCoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setShadingRate( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_ ) VULKAN_HPP_NOEXCEPT + { + shadingRate = shadingRate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setSampleCount( uint32_t sampleCount_ ) VULKAN_HPP_NOEXCEPT + { + sampleCount = sampleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setSampleLocationCount( uint32_t sampleLocationCount_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationCount = sampleLocationCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & + setPSampleLocations( const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations_ ) VULKAN_HPP_NOEXCEPT + { + pSampleLocations = pSampleLocations_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CoarseSampleOrderCustomNV & setSampleLocations( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sampleLocations_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationCount = static_cast( sampleLocations_.size() ); + pSampleLocations = sampleLocations_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCoarseSampleOrderCustomNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCoarseSampleOrderCustomNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCoarseSampleOrderCustomNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCoarseSampleOrderCustomNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( shadingRate, sampleCount, sampleLocationCount, pSampleLocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CoarseSampleOrderCustomNV const & ) const = default; +#else + bool operator==( CoarseSampleOrderCustomNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( shadingRate == rhs.shadingRate ) && ( sampleCount == rhs.sampleCount ) && ( sampleLocationCount == rhs.sampleLocationCount ) && + ( pSampleLocations == rhs.pSampleLocations ); +# endif + } + + bool operator!=( CoarseSampleOrderCustomNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate = VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV::eNoInvocations; + uint32_t sampleCount = {}; + uint32_t sampleLocationCount = {}; + const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations = {}; + }; + + // wrapper struct for struct VkColorBlendAdvancedEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkColorBlendAdvancedEXT.html + struct ColorBlendAdvancedEXT + { + using NativeType = VkColorBlendAdvancedEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ColorBlendAdvancedEXT( VULKAN_HPP_NAMESPACE::BlendOp advancedBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd, + VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ = {}, + VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated, + VULKAN_HPP_NAMESPACE::Bool32 clampResults_ = {} ) VULKAN_HPP_NOEXCEPT + : advancedBlendOp{ advancedBlendOp_ } + , srcPremultiplied{ srcPremultiplied_ } + , dstPremultiplied{ dstPremultiplied_ } + , blendOverlap{ blendOverlap_ } + , clampResults{ clampResults_ } + { + } + + VULKAN_HPP_CONSTEXPR ColorBlendAdvancedEXT( ColorBlendAdvancedEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ColorBlendAdvancedEXT( VkColorBlendAdvancedEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ColorBlendAdvancedEXT( *reinterpret_cast( &rhs ) ) + { + } + + ColorBlendAdvancedEXT & operator=( ColorBlendAdvancedEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ColorBlendAdvancedEXT & operator=( VkColorBlendAdvancedEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ColorBlendAdvancedEXT & setAdvancedBlendOp( VULKAN_HPP_NAMESPACE::BlendOp advancedBlendOp_ ) VULKAN_HPP_NOEXCEPT + { + advancedBlendOp = advancedBlendOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendAdvancedEXT & setSrcPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ ) VULKAN_HPP_NOEXCEPT + { + srcPremultiplied = srcPremultiplied_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendAdvancedEXT & setDstPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ ) VULKAN_HPP_NOEXCEPT + { + dstPremultiplied = dstPremultiplied_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendAdvancedEXT & setBlendOverlap( VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ ) VULKAN_HPP_NOEXCEPT + { + blendOverlap = blendOverlap_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendAdvancedEXT & setClampResults( VULKAN_HPP_NAMESPACE::Bool32 clampResults_ ) VULKAN_HPP_NOEXCEPT + { + clampResults = clampResults_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkColorBlendAdvancedEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkColorBlendAdvancedEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkColorBlendAdvancedEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkColorBlendAdvancedEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( advancedBlendOp, srcPremultiplied, dstPremultiplied, blendOverlap, clampResults ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ColorBlendAdvancedEXT const & ) const = default; +#else + bool operator==( ColorBlendAdvancedEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( advancedBlendOp == rhs.advancedBlendOp ) && ( srcPremultiplied == rhs.srcPremultiplied ) && ( dstPremultiplied == rhs.dstPremultiplied ) && + ( blendOverlap == rhs.blendOverlap ) && ( clampResults == rhs.clampResults ); +# endif + } + + bool operator!=( ColorBlendAdvancedEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::BlendOp advancedBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; + VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied = {}; + VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied = {}; + VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated; + VULKAN_HPP_NAMESPACE::Bool32 clampResults = {}; + }; + + // wrapper struct for struct VkColorBlendEquationEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkColorBlendEquationEXT.html + struct ColorBlendEquationEXT + { + using NativeType = VkColorBlendEquationEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ColorBlendEquationEXT( VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd, + VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd ) VULKAN_HPP_NOEXCEPT + : srcColorBlendFactor{ srcColorBlendFactor_ } + , dstColorBlendFactor{ dstColorBlendFactor_ } + , colorBlendOp{ colorBlendOp_ } + , srcAlphaBlendFactor{ srcAlphaBlendFactor_ } + , dstAlphaBlendFactor{ dstAlphaBlendFactor_ } + , alphaBlendOp{ alphaBlendOp_ } + { + } + + VULKAN_HPP_CONSTEXPR ColorBlendEquationEXT( ColorBlendEquationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ColorBlendEquationEXT( VkColorBlendEquationEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ColorBlendEquationEXT( *reinterpret_cast( &rhs ) ) + { + } + + ColorBlendEquationEXT & operator=( ColorBlendEquationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ColorBlendEquationEXT & operator=( VkColorBlendEquationEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ColorBlendEquationEXT & setSrcColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + srcColorBlendFactor = srcColorBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendEquationEXT & setDstColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + dstColorBlendFactor = dstColorBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendEquationEXT & setColorBlendOp( VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ ) VULKAN_HPP_NOEXCEPT + { + colorBlendOp = colorBlendOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendEquationEXT & setSrcAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + srcAlphaBlendFactor = srcAlphaBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendEquationEXT & setDstAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + dstAlphaBlendFactor = dstAlphaBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ColorBlendEquationEXT & setAlphaBlendOp( VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ ) VULKAN_HPP_NOEXCEPT + { + alphaBlendOp = alphaBlendOp_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkColorBlendEquationEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkColorBlendEquationEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkColorBlendEquationEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkColorBlendEquationEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcColorBlendFactor, dstColorBlendFactor, colorBlendOp, srcAlphaBlendFactor, dstAlphaBlendFactor, alphaBlendOp ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ColorBlendEquationEXT const & ) const = default; +#else + bool operator==( ColorBlendEquationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcColorBlendFactor == rhs.srcColorBlendFactor ) && ( dstColorBlendFactor == rhs.dstColorBlendFactor ) && ( colorBlendOp == rhs.colorBlendOp ) && + ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor ) && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor ) && ( alphaBlendOp == rhs.alphaBlendOp ); +# endif + } + + bool operator!=( ColorBlendEquationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; + VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; + }; + + // wrapper struct for struct VkCommandBufferAllocateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferAllocateInfo.html + struct CommandBufferAllocateInfo + { + using NativeType = VkCommandBufferAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferAllocateInfo( VULKAN_HPP_NAMESPACE::CommandPool commandPool_ = {}, + VULKAN_HPP_NAMESPACE::CommandBufferLevel level_ = VULKAN_HPP_NAMESPACE::CommandBufferLevel::ePrimary, + uint32_t commandBufferCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , commandPool{ commandPool_ } + , level{ level_ } + , commandBufferCount{ commandBufferCount_ } + { + } + + VULKAN_HPP_CONSTEXPR CommandBufferAllocateInfo( CommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferAllocateInfo( VkCommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferAllocateInfo( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferAllocateInfo & operator=( CommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferAllocateInfo & operator=( VkCommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool_ ) VULKAN_HPP_NOEXCEPT + { + commandPool = commandPool_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setLevel( VULKAN_HPP_NAMESPACE::CommandBufferLevel level_ ) VULKAN_HPP_NOEXCEPT + { + level = level_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferCount = commandBufferCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, commandPool, level, commandBufferCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferAllocateInfo const & ) const = default; +#else + bool operator==( CommandBufferAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandPool == rhs.commandPool ) && ( level == rhs.level ) && + ( commandBufferCount == rhs.commandBufferCount ); +# endif + } + + bool operator!=( CommandBufferAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferAllocateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CommandPool commandPool = {}; + VULKAN_HPP_NAMESPACE::CommandBufferLevel level = VULKAN_HPP_NAMESPACE::CommandBufferLevel::ePrimary; + uint32_t commandBufferCount = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferAllocateInfo; + }; + + // wrapper struct for struct VkCommandBufferInheritanceInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferInheritanceInfo.html + struct CommandBufferInheritanceInfo + { + using NativeType = VkCommandBufferInheritanceInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferInheritanceInfo( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, + uint32_t subpass_ = {}, + VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable_ = {}, + VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags_ = {}, + VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , renderPass{ renderPass_ } + , subpass{ subpass_ } + , framebuffer{ framebuffer_ } + , occlusionQueryEnable{ occlusionQueryEnable_ } + , queryFlags{ queryFlags_ } + , pipelineStatistics{ pipelineStatistics_ } + { + } + + VULKAN_HPP_CONSTEXPR CommandBufferInheritanceInfo( CommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferInheritanceInfo( VkCommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferInheritanceInfo( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferInheritanceInfo & operator=( CommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferInheritanceInfo & operator=( VkCommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT + { + renderPass = renderPass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT + { + subpass = subpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT + { + framebuffer = framebuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setOcclusionQueryEnable( VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable_ ) VULKAN_HPP_NOEXCEPT + { + occlusionQueryEnable = occlusionQueryEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setQueryFlags( VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags_ ) VULKAN_HPP_NOEXCEPT + { + queryFlags = queryFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & + setPipelineStatistics( VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ ) VULKAN_HPP_NOEXCEPT + { + pipelineStatistics = pipelineStatistics_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferInheritanceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, renderPass, subpass, framebuffer, occlusionQueryEnable, queryFlags, pipelineStatistics ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferInheritanceInfo const & ) const = default; +#else + bool operator==( CommandBufferInheritanceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) && ( subpass == rhs.subpass ) && + ( framebuffer == rhs.framebuffer ) && ( occlusionQueryEnable == rhs.occlusionQueryEnable ) && ( queryFlags == rhs.queryFlags ) && + ( pipelineStatistics == rhs.pipelineStatistics ); +# endif + } + + bool operator!=( CommandBufferInheritanceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; + uint32_t subpass = {}; + VULKAN_HPP_NAMESPACE::Framebuffer framebuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable = {}; + VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags = {}; + VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferInheritanceInfo; + }; + + // wrapper struct for struct VkCommandBufferBeginInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferBeginInfo.html + struct CommandBufferBeginInfo + { + using NativeType = VkCommandBufferBeginInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferBeginInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferBeginInfo( VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags_ = {}, + const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pInheritanceInfo{ pInheritanceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR CommandBufferBeginInfo( CommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferBeginInfo( VkCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferBeginInfo( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferBeginInfo & operator=( CommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferBeginInfo & operator=( VkCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & setFlags( VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & + setPInheritanceInfo( const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pInheritanceInfo = pInheritanceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferBeginInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferBeginInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pInheritanceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferBeginInfo const & ) const = default; +#else + bool operator==( CommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pInheritanceInfo == rhs.pInheritanceInfo ); +# endif + } + + bool operator!=( CommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferBeginInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags = {}; + const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferBeginInfo; + }; + + // wrapper struct for struct VkCommandBufferInheritanceConditionalRenderingInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferInheritanceConditionalRenderingInfoEXT.html + struct CommandBufferInheritanceConditionalRenderingInfoEXT + { + using NativeType = VkCommandBufferInheritanceConditionalRenderingInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferInheritanceConditionalRenderingInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , conditionalRenderingEnable{ conditionalRenderingEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR + CommandBufferInheritanceConditionalRenderingInfoEXT( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferInheritanceConditionalRenderingInfoEXT( VkCommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferInheritanceConditionalRenderingInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferInheritanceConditionalRenderingInfoEXT & + operator=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferInheritanceConditionalRenderingInfoEXT & operator=( VkCommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT & + setConditionalRenderingEnable( VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable_ ) VULKAN_HPP_NOEXCEPT + { + conditionalRenderingEnable = conditionalRenderingEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferInheritanceConditionalRenderingInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceConditionalRenderingInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceConditionalRenderingInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceConditionalRenderingInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, conditionalRenderingEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferInheritanceConditionalRenderingInfoEXT const & ) const = default; +#else + bool operator==( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conditionalRenderingEnable == rhs.conditionalRenderingEnable ); +# endif + } + + bool operator!=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferInheritanceConditionalRenderingInfoEXT; + }; + + // wrapper struct for struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferInheritanceRenderPassTransformInfoQCOM.html + struct CommandBufferInheritanceRenderPassTransformInfoQCOM + { + using NativeType = VkCommandBufferInheritanceRenderPassTransformInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferInheritanceRenderPassTransformInfoQCOM( + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , transform{ transform_ } + , renderArea{ renderArea_ } + { + } + + VULKAN_HPP_CONSTEXPR + CommandBufferInheritanceRenderPassTransformInfoQCOM( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferInheritanceRenderPassTransformInfoQCOM( VkCommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferInheritanceRenderPassTransformInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferInheritanceRenderPassTransformInfoQCOM & + operator=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferInheritanceRenderPassTransformInfoQCOM & operator=( VkCommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM & + setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT + { + transform = transform_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM & + setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT + { + renderArea = renderArea_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, transform, renderArea ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferInheritanceRenderPassTransformInfoQCOM const & ) const = default; +#else + bool operator==( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ) && ( renderArea == rhs.renderArea ); +# endif + } + + bool operator!=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + VULKAN_HPP_NAMESPACE::Rect2D renderArea = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferInheritanceRenderPassTransformInfoQCOM; + }; + + // wrapper struct for struct VkCommandBufferInheritanceRenderingInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferInheritanceRenderingInfo.html + struct CommandBufferInheritanceRenderingInfo + { + using NativeType = VkCommandBufferInheritanceRenderingInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceRenderingInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CommandBufferInheritanceRenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ = {}, + uint32_t viewMask_ = {}, + uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {}, + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , viewMask{ viewMask_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachmentFormats{ pColorAttachmentFormats_ } + , depthAttachmentFormat{ depthAttachmentFormat_ } + , stencilAttachmentFormat{ stencilAttachmentFormat_ } + , rasterizationSamples{ rasterizationSamples_ } + { + } + + VULKAN_HPP_CONSTEXPR CommandBufferInheritanceRenderingInfo( CommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferInheritanceRenderingInfo( VkCommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferInheritanceRenderingInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CommandBufferInheritanceRenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_, + uint32_t viewMask_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_, + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , viewMask( viewMask_ ) + , colorAttachmentCount( static_cast( colorAttachmentFormats_.size() ) ) + , pColorAttachmentFormats( colorAttachmentFormats_.data() ) + , depthAttachmentFormat( depthAttachmentFormat_ ) + , stencilAttachmentFormat( stencilAttachmentFormat_ ) + , rasterizationSamples( rasterizationSamples_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CommandBufferInheritanceRenderingInfo & operator=( CommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferInheritanceRenderingInfo & operator=( VkCommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT + { + viewMask = viewMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & + setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachmentFormats = pColorAttachmentFormats_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CommandBufferInheritanceRenderingInfo & setColorAttachmentFormats( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachmentFormats_.size() ); + pColorAttachmentFormats = colorAttachmentFormats_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & + setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT + { + depthAttachmentFormat = depthAttachmentFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & + setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT + { + stencilAttachmentFormat = stencilAttachmentFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & + setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationSamples = rasterizationSamples_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferInheritanceRenderingInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceRenderingInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceRenderingInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceRenderingInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, flags, viewMask, colorAttachmentCount, pColorAttachmentFormats, depthAttachmentFormat, stencilAttachmentFormat, rasterizationSamples ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferInheritanceRenderingInfo const & ) const = default; +#else + bool operator==( CommandBufferInheritanceRenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( viewMask == rhs.viewMask ) && + ( colorAttachmentCount == rhs.colorAttachmentCount ) && ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) && + ( depthAttachmentFormat == rhs.depthAttachmentFormat ) && ( stencilAttachmentFormat == rhs.stencilAttachmentFormat ) && + ( rasterizationSamples == rhs.rasterizationSamples ); +# endif + } + + bool operator!=( CommandBufferInheritanceRenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceRenderingInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderingFlags flags = {}; + uint32_t viewMask = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {}; + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + }; + + template <> + struct CppType + { + using Type = CommandBufferInheritanceRenderingInfo; + }; + + using CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfo; + + // wrapper struct for struct VkViewport, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkViewport.html + struct Viewport + { + using NativeType = VkViewport; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + Viewport( float x_ = {}, float y_ = {}, float width_ = {}, float height_ = {}, float minDepth_ = {}, float maxDepth_ = {} ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + , width{ width_ } + , height{ height_ } + , minDepth{ minDepth_ } + , maxDepth{ maxDepth_ } + { + } + + VULKAN_HPP_CONSTEXPR Viewport( Viewport const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Viewport( VkViewport const & rhs ) VULKAN_HPP_NOEXCEPT : Viewport( *reinterpret_cast( &rhs ) ) {} + + Viewport & operator=( Viewport const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Viewport & operator=( VkViewport const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Viewport & setX( float x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Viewport & setY( float y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Viewport & setWidth( float width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Viewport & setHeight( float height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Viewport & setMinDepth( float minDepth_ ) VULKAN_HPP_NOEXCEPT + { + minDepth = minDepth_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Viewport & setMaxDepth( float maxDepth_ ) VULKAN_HPP_NOEXCEPT + { + maxDepth = maxDepth_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkViewport const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViewport &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViewport const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkViewport *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y, width, height, minDepth, maxDepth ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Viewport const & ) const = default; +#else + bool operator==( Viewport const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ) && ( width == rhs.width ) && ( height == rhs.height ) && ( minDepth == rhs.minDepth ) && + ( maxDepth == rhs.maxDepth ); +# endif + } + + bool operator!=( Viewport const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float x = {}; + float y = {}; + float width = {}; + float height = {}; + float minDepth = {}; + float maxDepth = {}; + }; + + // wrapper struct for struct VkCommandBufferInheritanceViewportScissorInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferInheritanceViewportScissorInfoNV.html + struct CommandBufferInheritanceViewportScissorInfoNV + { + using NativeType = VkCommandBufferInheritanceViewportScissorInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceViewportScissorInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferInheritanceViewportScissorInfoNV( VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D_ = {}, + uint32_t viewportDepthCount_ = {}, + const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , viewportScissor2D{ viewportScissor2D_ } + , viewportDepthCount{ viewportDepthCount_ } + , pViewportDepths{ pViewportDepths_ } + { + } + + VULKAN_HPP_CONSTEXPR + CommandBufferInheritanceViewportScissorInfoNV( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferInheritanceViewportScissorInfoNV( VkCommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferInheritanceViewportScissorInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferInheritanceViewportScissorInfoNV & operator=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferInheritanceViewportScissorInfoNV & operator=( VkCommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & + setViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D_ ) VULKAN_HPP_NOEXCEPT + { + viewportScissor2D = viewportScissor2D_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & setViewportDepthCount( uint32_t viewportDepthCount_ ) VULKAN_HPP_NOEXCEPT + { + viewportDepthCount = viewportDepthCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV & + setPViewportDepths( const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths_ ) VULKAN_HPP_NOEXCEPT + { + pViewportDepths = pViewportDepths_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferInheritanceViewportScissorInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceViewportScissorInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceViewportScissorInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferInheritanceViewportScissorInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, viewportScissor2D, viewportDepthCount, pViewportDepths ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferInheritanceViewportScissorInfoNV const & ) const = default; +#else + bool operator==( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewportScissor2D == rhs.viewportScissor2D ) && + ( viewportDepthCount == rhs.viewportDepthCount ) && ( pViewportDepths == rhs.pViewportDepths ); +# endif + } + + bool operator!=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceViewportScissorInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D = {}; + uint32_t viewportDepthCount = {}; + const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferInheritanceViewportScissorInfoNV; + }; + + // wrapper struct for struct VkCommandBufferSubmitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandBufferSubmitInfo.html + struct CommandBufferSubmitInfo + { + using NativeType = VkCommandBufferSubmitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferSubmitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfo( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ = {}, + uint32_t deviceMask_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , commandBuffer{ commandBuffer_ } + , deviceMask{ deviceMask_ } + { + } + + VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfo( CommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandBufferSubmitInfo( VkCommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandBufferSubmitInfo( *reinterpret_cast( &rhs ) ) + { + } + + CommandBufferSubmitInfo & operator=( CommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandBufferSubmitInfo & operator=( VkCommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setCommandBuffer( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ ) VULKAN_HPP_NOEXCEPT + { + commandBuffer = commandBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT + { + deviceMask = deviceMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandBufferSubmitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferSubmitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandBufferSubmitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandBufferSubmitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, commandBuffer, deviceMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandBufferSubmitInfo const & ) const = default; +#else + bool operator==( CommandBufferSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandBuffer == rhs.commandBuffer ) && ( deviceMask == rhs.deviceMask ); +# endif + } + + bool operator!=( CommandBufferSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferSubmitInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer = {}; + uint32_t deviceMask = {}; + }; + + template <> + struct CppType + { + using Type = CommandBufferSubmitInfo; + }; + + using CommandBufferSubmitInfoKHR = CommandBufferSubmitInfo; + + // wrapper struct for struct VkCommandPoolCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCommandPoolCreateInfo.html + struct CommandPoolCreateInfo + { + using NativeType = VkCommandPoolCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandPoolCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CommandPoolCreateInfo( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ = {}, + uint32_t queueFamilyIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , queueFamilyIndex{ queueFamilyIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR CommandPoolCreateInfo( CommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CommandPoolCreateInfo( VkCommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CommandPoolCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + CommandPoolCreateInfo & operator=( CommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CommandPoolCreateInfo & operator=( VkCommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndex = queueFamilyIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCommandPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandPoolCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCommandPoolCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCommandPoolCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, queueFamilyIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CommandPoolCreateInfo const & ) const = default; +#else + bool operator==( CommandPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueFamilyIndex == rhs.queueFamilyIndex ); +# endif + } + + bool operator!=( CommandPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandPoolCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags = {}; + uint32_t queueFamilyIndex = {}; + }; + + template <> + struct CppType + { + using Type = CommandPoolCreateInfo; + }; + + // wrapper struct for struct VkSpecializationMapEntry, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSpecializationMapEntry.html + struct SpecializationMapEntry + { + using NativeType = VkSpecializationMapEntry; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SpecializationMapEntry( uint32_t constantID_ = {}, uint32_t offset_ = {}, size_t size_ = {} ) VULKAN_HPP_NOEXCEPT + : constantID{ constantID_ } + , offset{ offset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR SpecializationMapEntry( SpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SpecializationMapEntry( VkSpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT + : SpecializationMapEntry( *reinterpret_cast( &rhs ) ) + { + } + + SpecializationMapEntry & operator=( SpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SpecializationMapEntry & operator=( VkSpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setConstantID( uint32_t constantID_ ) VULKAN_HPP_NOEXCEPT + { + constantID = constantID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setSize( size_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSpecializationMapEntry const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSpecializationMapEntry &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSpecializationMapEntry const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSpecializationMapEntry *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( constantID, offset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SpecializationMapEntry const & ) const = default; +#else + bool operator==( SpecializationMapEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( constantID == rhs.constantID ) && ( offset == rhs.offset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( SpecializationMapEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t constantID = {}; + uint32_t offset = {}; + size_t size = {}; + }; + + // wrapper struct for struct VkSpecializationInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSpecializationInfo.html + struct SpecializationInfo + { + using NativeType = VkSpecializationInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SpecializationInfo( uint32_t mapEntryCount_ = {}, + const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries_ = {}, + size_t dataSize_ = {}, + const void * pData_ = {} ) VULKAN_HPP_NOEXCEPT + : mapEntryCount{ mapEntryCount_ } + , pMapEntries{ pMapEntries_ } + , dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR SpecializationInfo( SpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SpecializationInfo( VkSpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SpecializationInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + SpecializationInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mapEntries_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ = {} ) + : mapEntryCount( static_cast( mapEntries_.size() ) ) + , pMapEntries( mapEntries_.data() ) + , dataSize( data_.size() * sizeof( T ) ) + , pData( data_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SpecializationInfo & operator=( SpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SpecializationInfo & operator=( VkSpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setMapEntryCount( uint32_t mapEntryCount_ ) VULKAN_HPP_NOEXCEPT + { + mapEntryCount = mapEntryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setPMapEntries( const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries_ ) VULKAN_HPP_NOEXCEPT + { + pMapEntries = pMapEntries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SpecializationInfo & + setMapEntries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mapEntries_ ) VULKAN_HPP_NOEXCEPT + { + mapEntryCount = static_cast( mapEntries_.size() ); + pMapEntries = mapEntries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = dataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + SpecializationInfo & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = data_.size() * sizeof( T ); + pData = data_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSpecializationInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSpecializationInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSpecializationInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSpecializationInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( mapEntryCount, pMapEntries, dataSize, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SpecializationInfo const & ) const = default; +#else + bool operator==( SpecializationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( mapEntryCount == rhs.mapEntryCount ) && ( pMapEntries == rhs.pMapEntries ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); +# endif + } + + bool operator!=( SpecializationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t mapEntryCount = {}; + const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries = {}; + size_t dataSize = {}; + const void * pData = {}; + }; + + // wrapper struct for struct VkPipelineShaderStageCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageCreateInfo.html + struct PipelineShaderStageCreateInfo + { + using NativeType = VkPipelineShaderStageCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateInfo( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ = VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex, + VULKAN_HPP_NAMESPACE::ShaderModule module_ = {}, + const char * pName_ = {}, + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stage{ stage_ } + , module{ module_ } + , pName{ pName_ } + , pSpecializationInfo{ pSpecializationInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateInfo( PipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineShaderStageCreateInfo( VkPipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineShaderStageCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineShaderStageCreateInfo & operator=( PipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineShaderStageCreateInfo & operator=( VkPipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setStage( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ ) VULKAN_HPP_NOEXCEPT + { + stage = stage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setModule( VULKAN_HPP_NAMESPACE::ShaderModule module_ ) VULKAN_HPP_NOEXCEPT + { + module = module_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT + { + pName = pName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & + setPSpecializationInfo( const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ ) VULKAN_HPP_NOEXCEPT + { + pSpecializationInfo = pSpecializationInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineShaderStageCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineShaderStageCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, stage, module, pName, pSpecializationInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = stage <=> rhs.stage; cmp != 0 ) + return cmp; + if ( auto cmp = module <=> rhs.module; cmp != 0 ) + return cmp; + if ( pName != rhs.pName ) + if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = pSpecializationInfo <=> rhs.pSpecializationInfo; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) && ( module == rhs.module ) && + ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ) && ( pSpecializationInfo == rhs.pSpecializationInfo ); + } + + bool operator!=( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage = VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex; + VULKAN_HPP_NAMESPACE::ShaderModule module = {}; + const char * pName = {}; + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo = {}; + }; + + template <> + struct CppType + { + using Type = PipelineShaderStageCreateInfo; + }; + + // wrapper struct for struct VkComputePipelineCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkComputePipelineCreateInfo.html + struct ComputePipelineCreateInfo + { + using NativeType = VkComputePipelineCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eComputePipelineCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ComputePipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo stage_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stage{ stage_ } + , layout{ layout_ } + , basePipelineHandle{ basePipelineHandle_ } + , basePipelineIndex{ basePipelineIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR ComputePipelineCreateInfo( ComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ComputePipelineCreateInfo( VkComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ComputePipelineCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ComputePipelineCreateInfo & operator=( ComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ComputePipelineCreateInfo & operator=( VkComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setStage( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const & stage_ ) VULKAN_HPP_NOEXCEPT + { + stage = stage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineHandle = basePipelineHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineIndex = basePipelineIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkComputePipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkComputePipelineCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkComputePipelineCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkComputePipelineCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, stage, layout, basePipelineHandle, basePipelineIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ComputePipelineCreateInfo const & ) const = default; +#else + bool operator==( ComputePipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) && ( layout == rhs.layout ) && + ( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex ); +# endif + } + + bool operator!=( ComputePipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eComputePipelineCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo stage = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; + int32_t basePipelineIndex = {}; + }; + + template <> + struct CppType + { + using Type = ComputePipelineCreateInfo; + }; + + // wrapper struct for struct VkComputePipelineIndirectBufferInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkComputePipelineIndirectBufferInfoNV.html + struct ComputePipelineIndirectBufferInfoNV + { + using NativeType = VkComputePipelineIndirectBufferInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eComputePipelineIndirectBufferInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ComputePipelineIndirectBufferInfoNV( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress pipelineDeviceAddressCaptureReplay_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceAddress{ deviceAddress_ } + , size{ size_ } + , pipelineDeviceAddressCaptureReplay{ pipelineDeviceAddressCaptureReplay_ } + { + } + + VULKAN_HPP_CONSTEXPR ComputePipelineIndirectBufferInfoNV( ComputePipelineIndirectBufferInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ComputePipelineIndirectBufferInfoNV( VkComputePipelineIndirectBufferInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ComputePipelineIndirectBufferInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ComputePipelineIndirectBufferInfoNV & operator=( ComputePipelineIndirectBufferInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ComputePipelineIndirectBufferInfoNV & operator=( VkComputePipelineIndirectBufferInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ComputePipelineIndirectBufferInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineIndirectBufferInfoNV & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineIndirectBufferInfoNV & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ComputePipelineIndirectBufferInfoNV & + setPipelineDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::DeviceAddress pipelineDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + pipelineDeviceAddressCaptureReplay = pipelineDeviceAddressCaptureReplay_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkComputePipelineIndirectBufferInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkComputePipelineIndirectBufferInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkComputePipelineIndirectBufferInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkComputePipelineIndirectBufferInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceAddress, size, pipelineDeviceAddressCaptureReplay ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ComputePipelineIndirectBufferInfoNV const & ) const = default; +#else + bool operator==( ComputePipelineIndirectBufferInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress ) && ( size == rhs.size ) && + ( pipelineDeviceAddressCaptureReplay == rhs.pipelineDeviceAddressCaptureReplay ); +# endif + } + + bool operator!=( ComputePipelineIndirectBufferInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eComputePipelineIndirectBufferInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress pipelineDeviceAddressCaptureReplay = {}; + }; + + template <> + struct CppType + { + using Type = ComputePipelineIndirectBufferInfoNV; + }; + + // wrapper struct for struct VkConditionalRenderingBeginInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkConditionalRenderingBeginInfoEXT.html + struct ConditionalRenderingBeginInfoEXT + { + using NativeType = VkConditionalRenderingBeginInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eConditionalRenderingBeginInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ConditionalRenderingBeginInfoEXT( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + , offset{ offset_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR ConditionalRenderingBeginInfoEXT( ConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ConditionalRenderingBeginInfoEXT( VkConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ConditionalRenderingBeginInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ConditionalRenderingBeginInfoEXT & operator=( ConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ConditionalRenderingBeginInfoEXT & operator=( VkConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkConditionalRenderingBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkConditionalRenderingBeginInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkConditionalRenderingBeginInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkConditionalRenderingBeginInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer, offset, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ConditionalRenderingBeginInfoEXT const & ) const = default; +#else + bool operator==( ConditionalRenderingBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( ConditionalRenderingBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eConditionalRenderingBeginInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags = {}; + }; + + template <> + struct CppType + { + using Type = ConditionalRenderingBeginInfoEXT; + }; + + // wrapper struct for struct VkConformanceVersion, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkConformanceVersion.html + struct ConformanceVersion + { + using NativeType = VkConformanceVersion; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ConformanceVersion( uint8_t major_ = {}, uint8_t minor_ = {}, uint8_t subminor_ = {}, uint8_t patch_ = {} ) VULKAN_HPP_NOEXCEPT + : major{ major_ } + , minor{ minor_ } + , subminor{ subminor_ } + , patch{ patch_ } + { + } + + VULKAN_HPP_CONSTEXPR ConformanceVersion( ConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ConformanceVersion( VkConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT : ConformanceVersion( *reinterpret_cast( &rhs ) ) {} + + ConformanceVersion & operator=( ConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ConformanceVersion & operator=( VkConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setMajor( uint8_t major_ ) VULKAN_HPP_NOEXCEPT + { + major = major_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setMinor( uint8_t minor_ ) VULKAN_HPP_NOEXCEPT + { + minor = minor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setSubminor( uint8_t subminor_ ) VULKAN_HPP_NOEXCEPT + { + subminor = subminor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setPatch( uint8_t patch_ ) VULKAN_HPP_NOEXCEPT + { + patch = patch_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkConformanceVersion const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkConformanceVersion &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkConformanceVersion const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkConformanceVersion *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( major, minor, subminor, patch ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ConformanceVersion const & ) const = default; +#else + bool operator==( ConformanceVersion const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( major == rhs.major ) && ( minor == rhs.minor ) && ( subminor == rhs.subminor ) && ( patch == rhs.patch ); +# endif + } + + bool operator!=( ConformanceVersion const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint8_t major = {}; + uint8_t minor = {}; + uint8_t subminor = {}; + uint8_t patch = {}; + }; + + using ConformanceVersionKHR = ConformanceVersion; + + // wrapper struct for struct VkConvertCooperativeVectorMatrixInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkConvertCooperativeVectorMatrixInfoNV.html + struct ConvertCooperativeVectorMatrixInfoNV + { + using NativeType = VkConvertCooperativeVectorMatrixInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eConvertCooperativeVectorMatrixInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV( + size_t srcSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR srcData_ = {}, + size_t * pDstSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dstData_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR srcComponentType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR dstComponentType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + uint32_t numRows_ = {}, + uint32_t numColumns_ = {}, + VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV srcLayout_ = VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV::eRowMajor, + size_t srcStride_ = {}, + VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV dstLayout_ = VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV::eRowMajor, + size_t dstStride_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcSize{ srcSize_ } + , srcData{ srcData_ } + , pDstSize{ pDstSize_ } + , dstData{ dstData_ } + , srcComponentType{ srcComponentType_ } + , dstComponentType{ dstComponentType_ } + , numRows{ numRows_ } + , numColumns{ numColumns_ } + , srcLayout{ srcLayout_ } + , srcStride{ srcStride_ } + , dstLayout{ dstLayout_ } + , dstStride{ dstStride_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV( ConvertCooperativeVectorMatrixInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ConvertCooperativeVectorMatrixInfoNV( VkConvertCooperativeVectorMatrixInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ConvertCooperativeVectorMatrixInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ConvertCooperativeVectorMatrixInfoNV & operator=( ConvertCooperativeVectorMatrixInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ConvertCooperativeVectorMatrixInfoNV & operator=( VkConvertCooperativeVectorMatrixInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setSrcSize( size_t srcSize_ ) VULKAN_HPP_NOEXCEPT + { + srcSize = srcSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & + setSrcData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & srcData_ ) VULKAN_HPP_NOEXCEPT + { + srcData = srcData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setPDstSize( size_t * pDstSize_ ) VULKAN_HPP_NOEXCEPT + { + pDstSize = pDstSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & + setDstData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & dstData_ ) VULKAN_HPP_NOEXCEPT + { + dstData = dstData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & + setSrcComponentType( VULKAN_HPP_NAMESPACE::ComponentTypeKHR srcComponentType_ ) VULKAN_HPP_NOEXCEPT + { + srcComponentType = srcComponentType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & + setDstComponentType( VULKAN_HPP_NAMESPACE::ComponentTypeKHR dstComponentType_ ) VULKAN_HPP_NOEXCEPT + { + dstComponentType = dstComponentType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setNumRows( uint32_t numRows_ ) VULKAN_HPP_NOEXCEPT + { + numRows = numRows_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setNumColumns( uint32_t numColumns_ ) VULKAN_HPP_NOEXCEPT + { + numColumns = numColumns_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & + setSrcLayout( VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV srcLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcLayout = srcLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setSrcStride( size_t srcStride_ ) VULKAN_HPP_NOEXCEPT + { + srcStride = srcStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & + setDstLayout( VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV dstLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstLayout = dstLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ConvertCooperativeVectorMatrixInfoNV & setDstStride( size_t dstStride_ ) VULKAN_HPP_NOEXCEPT + { + dstStride = dstStride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkConvertCooperativeVectorMatrixInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkConvertCooperativeVectorMatrixInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkConvertCooperativeVectorMatrixInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkConvertCooperativeVectorMatrixInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + srcSize, + srcData, + pDstSize, + dstData, + srcComponentType, + dstComponentType, + numRows, + numColumns, + srcLayout, + srcStride, + dstLayout, + dstStride ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eConvertCooperativeVectorMatrixInfoNV; + const void * pNext = {}; + size_t srcSize = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR srcData = {}; + size_t * pDstSize = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dstData = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR srcComponentType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR dstComponentType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + uint32_t numRows = {}; + uint32_t numColumns = {}; + VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV srcLayout = VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV::eRowMajor; + size_t srcStride = {}; + VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV dstLayout = VULKAN_HPP_NAMESPACE::CooperativeVectorMatrixLayoutNV::eRowMajor; + size_t dstStride = {}; + }; + + template <> + struct CppType + { + using Type = ConvertCooperativeVectorMatrixInfoNV; + }; + + // wrapper struct for struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCooperativeMatrixFlexibleDimensionsPropertiesNV.html + struct CooperativeMatrixFlexibleDimensionsPropertiesNV + { + using NativeType = VkCooperativeMatrixFlexibleDimensionsPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeMatrixFlexibleDimensionsPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CooperativeMatrixFlexibleDimensionsPropertiesNV( uint32_t MGranularity_ = {}, + uint32_t NGranularity_ = {}, + uint32_t KGranularity_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR AType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR BType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR CType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR ResultType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::Bool32 saturatingAccumulation_ = {}, + VULKAN_HPP_NAMESPACE::ScopeKHR scope_ = VULKAN_HPP_NAMESPACE::ScopeKHR::eDevice, + uint32_t workgroupInvocations_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , MGranularity{ MGranularity_ } + , NGranularity{ NGranularity_ } + , KGranularity{ KGranularity_ } + , AType{ AType_ } + , BType{ BType_ } + , CType{ CType_ } + , ResultType{ ResultType_ } + , saturatingAccumulation{ saturatingAccumulation_ } + , scope{ scope_ } + , workgroupInvocations{ workgroupInvocations_ } + { + } + + VULKAN_HPP_CONSTEXPR + CooperativeMatrixFlexibleDimensionsPropertiesNV( CooperativeMatrixFlexibleDimensionsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CooperativeMatrixFlexibleDimensionsPropertiesNV( VkCooperativeMatrixFlexibleDimensionsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CooperativeMatrixFlexibleDimensionsPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + CooperativeMatrixFlexibleDimensionsPropertiesNV & operator=( CooperativeMatrixFlexibleDimensionsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CooperativeMatrixFlexibleDimensionsPropertiesNV & operator=( VkCooperativeMatrixFlexibleDimensionsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkCooperativeMatrixFlexibleDimensionsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeMatrixFlexibleDimensionsPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeMatrixFlexibleDimensionsPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCooperativeMatrixFlexibleDimensionsPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, MGranularity, NGranularity, KGranularity, AType, BType, CType, ResultType, saturatingAccumulation, scope, workgroupInvocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CooperativeMatrixFlexibleDimensionsPropertiesNV const & ) const = default; +#else + bool operator==( CooperativeMatrixFlexibleDimensionsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( MGranularity == rhs.MGranularity ) && ( NGranularity == rhs.NGranularity ) && + ( KGranularity == rhs.KGranularity ) && ( AType == rhs.AType ) && ( BType == rhs.BType ) && ( CType == rhs.CType ) && + ( ResultType == rhs.ResultType ) && ( saturatingAccumulation == rhs.saturatingAccumulation ) && ( scope == rhs.scope ) && + ( workgroupInvocations == rhs.workgroupInvocations ); +# endif + } + + bool operator!=( CooperativeMatrixFlexibleDimensionsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCooperativeMatrixFlexibleDimensionsPropertiesNV; + void * pNext = {}; + uint32_t MGranularity = {}; + uint32_t NGranularity = {}; + uint32_t KGranularity = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR AType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR BType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR CType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR ResultType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::Bool32 saturatingAccumulation = {}; + VULKAN_HPP_NAMESPACE::ScopeKHR scope = VULKAN_HPP_NAMESPACE::ScopeKHR::eDevice; + uint32_t workgroupInvocations = {}; + }; + + template <> + struct CppType + { + using Type = CooperativeMatrixFlexibleDimensionsPropertiesNV; + }; + + // wrapper struct for struct VkCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCooperativeMatrixPropertiesKHR.html + struct CooperativeMatrixPropertiesKHR + { + using NativeType = VkCooperativeMatrixPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeMatrixPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesKHR( uint32_t MSize_ = {}, + uint32_t NSize_ = {}, + uint32_t KSize_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR AType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR BType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR CType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR ResultType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::Bool32 saturatingAccumulation_ = {}, + VULKAN_HPP_NAMESPACE::ScopeKHR scope_ = VULKAN_HPP_NAMESPACE::ScopeKHR::eDevice, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , MSize{ MSize_ } + , NSize{ NSize_ } + , KSize{ KSize_ } + , AType{ AType_ } + , BType{ BType_ } + , CType{ CType_ } + , ResultType{ ResultType_ } + , saturatingAccumulation{ saturatingAccumulation_ } + , scope{ scope_ } + { + } + + VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesKHR( CooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CooperativeMatrixPropertiesKHR( VkCooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : CooperativeMatrixPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + CooperativeMatrixPropertiesKHR & operator=( CooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CooperativeMatrixPropertiesKHR & operator=( VkCooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkCooperativeMatrixPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeMatrixPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeMatrixPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCooperativeMatrixPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, MSize, NSize, KSize, AType, BType, CType, ResultType, saturatingAccumulation, scope ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CooperativeMatrixPropertiesKHR const & ) const = default; +#else + bool operator==( CooperativeMatrixPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( MSize == rhs.MSize ) && ( NSize == rhs.NSize ) && ( KSize == rhs.KSize ) && + ( AType == rhs.AType ) && ( BType == rhs.BType ) && ( CType == rhs.CType ) && ( ResultType == rhs.ResultType ) && + ( saturatingAccumulation == rhs.saturatingAccumulation ) && ( scope == rhs.scope ); +# endif + } + + bool operator!=( CooperativeMatrixPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCooperativeMatrixPropertiesKHR; + void * pNext = {}; + uint32_t MSize = {}; + uint32_t NSize = {}; + uint32_t KSize = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR AType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR BType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR CType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR ResultType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::Bool32 saturatingAccumulation = {}; + VULKAN_HPP_NAMESPACE::ScopeKHR scope = VULKAN_HPP_NAMESPACE::ScopeKHR::eDevice; + }; + + template <> + struct CppType + { + using Type = CooperativeMatrixPropertiesKHR; + }; + + // wrapper struct for struct VkCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCooperativeMatrixPropertiesNV.html + struct CooperativeMatrixPropertiesNV + { + using NativeType = VkCooperativeMatrixPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeMatrixPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesNV( uint32_t MSize_ = {}, + uint32_t NSize_ = {}, + uint32_t KSize_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeNV AType_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeNV BType_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeNV CType_ = {}, + VULKAN_HPP_NAMESPACE::ComponentTypeNV DType_ = {}, + VULKAN_HPP_NAMESPACE::ScopeNV scope_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , MSize{ MSize_ } + , NSize{ NSize_ } + , KSize{ KSize_ } + , AType{ AType_ } + , BType{ BType_ } + , CType{ CType_ } + , DType{ DType_ } + , scope{ scope_ } + { + } + + VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesNV( CooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CooperativeMatrixPropertiesNV( VkCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CooperativeMatrixPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + CooperativeMatrixPropertiesNV & operator=( CooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CooperativeMatrixPropertiesNV & operator=( VkCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeMatrixPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCooperativeMatrixPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, MSize, NSize, KSize, AType, BType, CType, DType, scope ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CooperativeMatrixPropertiesNV const & ) const = default; +#else + bool operator==( CooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( MSize == rhs.MSize ) && ( NSize == rhs.NSize ) && ( KSize == rhs.KSize ) && + ( AType == rhs.AType ) && ( BType == rhs.BType ) && ( CType == rhs.CType ) && ( DType == rhs.DType ) && ( scope == rhs.scope ); +# endif + } + + bool operator!=( CooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCooperativeMatrixPropertiesNV; + void * pNext = {}; + uint32_t MSize = {}; + uint32_t NSize = {}; + uint32_t KSize = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeNV AType = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeNV BType = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeNV CType = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeNV DType = {}; + VULKAN_HPP_NAMESPACE::ScopeNV scope = {}; + }; + + template <> + struct CppType + { + using Type = CooperativeMatrixPropertiesNV; + }; + + // wrapper struct for struct VkCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCooperativeVectorPropertiesNV.html + struct CooperativeVectorPropertiesNV + { + using NativeType = VkCooperativeVectorPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeVectorPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CooperativeVectorPropertiesNV( VULKAN_HPP_NAMESPACE::ComponentTypeKHR inputType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR inputInterpretation_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR matrixInterpretation_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR biasInterpretation_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::ComponentTypeKHR resultType_ = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16, + VULKAN_HPP_NAMESPACE::Bool32 transpose_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , inputType{ inputType_ } + , inputInterpretation{ inputInterpretation_ } + , matrixInterpretation{ matrixInterpretation_ } + , biasInterpretation{ biasInterpretation_ } + , resultType{ resultType_ } + , transpose{ transpose_ } + { + } + + VULKAN_HPP_CONSTEXPR CooperativeVectorPropertiesNV( CooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CooperativeVectorPropertiesNV( VkCooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CooperativeVectorPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + CooperativeVectorPropertiesNV & operator=( CooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CooperativeVectorPropertiesNV & operator=( VkCooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & setInputType( VULKAN_HPP_NAMESPACE::ComponentTypeKHR inputType_ ) VULKAN_HPP_NOEXCEPT + { + inputType = inputType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & + setInputInterpretation( VULKAN_HPP_NAMESPACE::ComponentTypeKHR inputInterpretation_ ) VULKAN_HPP_NOEXCEPT + { + inputInterpretation = inputInterpretation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & + setMatrixInterpretation( VULKAN_HPP_NAMESPACE::ComponentTypeKHR matrixInterpretation_ ) VULKAN_HPP_NOEXCEPT + { + matrixInterpretation = matrixInterpretation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & + setBiasInterpretation( VULKAN_HPP_NAMESPACE::ComponentTypeKHR biasInterpretation_ ) VULKAN_HPP_NOEXCEPT + { + biasInterpretation = biasInterpretation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & setResultType( VULKAN_HPP_NAMESPACE::ComponentTypeKHR resultType_ ) VULKAN_HPP_NOEXCEPT + { + resultType = resultType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CooperativeVectorPropertiesNV & setTranspose( VULKAN_HPP_NAMESPACE::Bool32 transpose_ ) VULKAN_HPP_NOEXCEPT + { + transpose = transpose_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCooperativeVectorPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeVectorPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCooperativeVectorPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCooperativeVectorPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, inputType, inputInterpretation, matrixInterpretation, biasInterpretation, resultType, transpose ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CooperativeVectorPropertiesNV const & ) const = default; +#else + bool operator==( CooperativeVectorPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( inputType == rhs.inputType ) && ( inputInterpretation == rhs.inputInterpretation ) && + ( matrixInterpretation == rhs.matrixInterpretation ) && ( biasInterpretation == rhs.biasInterpretation ) && ( resultType == rhs.resultType ) && + ( transpose == rhs.transpose ); +# endif + } + + bool operator!=( CooperativeVectorPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCooperativeVectorPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR inputType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR inputInterpretation = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR matrixInterpretation = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR biasInterpretation = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::ComponentTypeKHR resultType = VULKAN_HPP_NAMESPACE::ComponentTypeKHR::eFloat16; + VULKAN_HPP_NAMESPACE::Bool32 transpose = {}; + }; + + template <> + struct CppType + { + using Type = CooperativeVectorPropertiesNV; + }; + + // wrapper struct for struct VkCopyAccelerationStructureInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyAccelerationStructureInfoKHR.html + struct CopyAccelerationStructureInfoKHR + { + using NativeType = VkCopyAccelerationStructureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyAccelerationStructureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyAccelerationStructureInfoKHR( + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ = {}, + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , src{ src_ } + , dst{ dst_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyAccelerationStructureInfoKHR( CopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyAccelerationStructureInfoKHR( VkCopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyAccelerationStructureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + CopyAccelerationStructureInfoKHR & operator=( CopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyAccelerationStructureInfoKHR & operator=( VkCopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT + { + src = src_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT + { + dst = dst_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyAccelerationStructureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyAccelerationStructureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, src, dst, mode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyAccelerationStructureInfoKHR const & ) const = default; +#else + bool operator==( CopyAccelerationStructureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( src == rhs.src ) && ( dst == rhs.dst ) && ( mode == rhs.mode ); +# endif + } + + bool operator!=( CopyAccelerationStructureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyAccelerationStructureInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst = {}; + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone; + }; + + template <> + struct CppType + { + using Type = CopyAccelerationStructureInfoKHR; + }; + + // wrapper struct for struct VkCopyAccelerationStructureToMemoryInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyAccelerationStructureToMemoryInfoKHR.html + struct CopyAccelerationStructureToMemoryInfoKHR + { + using NativeType = VkCopyAccelerationStructureToMemoryInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyAccelerationStructureToMemoryInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR( + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst_ = {}, + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , src{ src_ } + , dst{ dst_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR( CopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyAccelerationStructureToMemoryInfoKHR( VkCopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyAccelerationStructureToMemoryInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + CopyAccelerationStructureToMemoryInfoKHR & operator=( CopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyAccelerationStructureToMemoryInfoKHR & operator=( VkCopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT + { + src = src_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & setDst( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & dst_ ) VULKAN_HPP_NOEXCEPT + { + dst = dst_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR & + setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyAccelerationStructureToMemoryInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyAccelerationStructureToMemoryInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyAccelerationStructureToMemoryInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyAccelerationStructureToMemoryInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, src, dst, mode ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyAccelerationStructureToMemoryInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst = {}; + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone; + }; + + template <> + struct CppType + { + using Type = CopyAccelerationStructureToMemoryInfoKHR; + }; + + // wrapper struct for struct VkCopyBufferInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyBufferInfo2.html + struct CopyBufferInfo2 + { + using NativeType = VkCopyBufferInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyBufferInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {}, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcBuffer{ srcBuffer_ } + , dstBuffer{ dstBuffer_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyBufferInfo2( CopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyBufferInfo2( VkCopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : CopyBufferInfo2( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyBufferInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), srcBuffer( srcBuffer_ ), dstBuffer( dstBuffer_ ), regionCount( static_cast( regions_.size() ) ), pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyBufferInfo2 & operator=( CopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyBufferInfo2 & operator=( VkCopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT + { + srcBuffer = srcBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT + { + dstBuffer = dstBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyBufferInfo2 & setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyBufferInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyBufferInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyBufferInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyBufferInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcBuffer, dstBuffer, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyBufferInfo2 const & ) const = default; +#else + bool operator==( CopyBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcBuffer == rhs.srcBuffer ) && ( dstBuffer == rhs.dstBuffer ) && + ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {}; + VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {}; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyBufferInfo2; + }; + + using CopyBufferInfo2KHR = CopyBufferInfo2; + + // wrapper struct for struct VkCopyBufferToImageInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyBufferToImageInfo2.html + struct CopyBufferToImageInfo2 + { + using NativeType = VkCopyBufferToImageInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferToImageInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcBuffer{ srcBuffer_ } + , dstImage{ dstImage_ } + , dstImageLayout{ dstImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2( CopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyBufferToImageInfo2( VkCopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyBufferToImageInfo2( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyBufferToImageInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_, + VULKAN_HPP_NAMESPACE::Image dstImage_, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , srcBuffer( srcBuffer_ ) + , dstImage( dstImage_ ) + , dstImageLayout( dstImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyBufferToImageInfo2 & operator=( CopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyBufferToImageInfo2 & operator=( VkCopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT + { + srcBuffer = srcBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT + { + dstImage = dstImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstImageLayout = dstImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyBufferToImageInfo2 & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyBufferToImageInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyBufferToImageInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyBufferToImageInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyBufferToImageInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyBufferToImageInfo2 const & ) const = default; +#else + bool operator==( CopyBufferToImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcBuffer == rhs.srcBuffer ) && ( dstImage == rhs.dstImage ) && + ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyBufferToImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferToImageInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {}; + VULKAN_HPP_NAMESPACE::Image dstImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyBufferToImageInfo2; + }; + + using CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2; + + // wrapper struct for struct VkCopyCommandTransformInfoQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyCommandTransformInfoQCOM.html + struct CopyCommandTransformInfoQCOM + { + using NativeType = VkCopyCommandTransformInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyCommandTransformInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CopyCommandTransformInfoQCOM( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , transform{ transform_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyCommandTransformInfoQCOM( CopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyCommandTransformInfoQCOM( VkCopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyCommandTransformInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + CopyCommandTransformInfoQCOM & operator=( CopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyCommandTransformInfoQCOM & operator=( VkCopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM & setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT + { + transform = transform_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyCommandTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyCommandTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyCommandTransformInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyCommandTransformInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, transform ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyCommandTransformInfoQCOM const & ) const = default; +#else + bool operator==( CopyCommandTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ); +# endif + } + + bool operator!=( CopyCommandTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyCommandTransformInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + }; + + template <> + struct CppType + { + using Type = CopyCommandTransformInfoQCOM; + }; + + // wrapper struct for struct VkCopyDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyDescriptorSet.html + struct CopyDescriptorSet + { + using NativeType = VkCopyDescriptorSet; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyDescriptorSet; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ = {}, + uint32_t srcBinding_ = {}, + uint32_t srcArrayElement_ = {}, + VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ = {}, + uint32_t dstBinding_ = {}, + uint32_t dstArrayElement_ = {}, + uint32_t descriptorCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcSet{ srcSet_ } + , srcBinding{ srcBinding_ } + , srcArrayElement{ srcArrayElement_ } + , dstSet{ dstSet_ } + , dstBinding{ dstBinding_ } + , dstArrayElement{ dstArrayElement_ } + , descriptorCount{ descriptorCount_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyDescriptorSet( CopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyDescriptorSet( VkCopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT : CopyDescriptorSet( *reinterpret_cast( &rhs ) ) {} + + CopyDescriptorSet & operator=( CopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyDescriptorSet & operator=( VkCopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ ) VULKAN_HPP_NOEXCEPT + { + srcSet = srcSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcBinding( uint32_t srcBinding_ ) VULKAN_HPP_NOEXCEPT + { + srcBinding = srcBinding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcArrayElement( uint32_t srcArrayElement_ ) VULKAN_HPP_NOEXCEPT + { + srcArrayElement = srcArrayElement_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT + { + dstSet = dstSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT + { + dstBinding = dstBinding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT + { + dstArrayElement = dstArrayElement_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = descriptorCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyDescriptorSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyDescriptorSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyDescriptorSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyDescriptorSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcSet, srcBinding, srcArrayElement, dstSet, dstBinding, dstArrayElement, descriptorCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyDescriptorSet const & ) const = default; +#else + bool operator==( CopyDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSet == rhs.srcSet ) && ( srcBinding == rhs.srcBinding ) && + ( srcArrayElement == rhs.srcArrayElement ) && ( dstSet == rhs.dstSet ) && ( dstBinding == rhs.dstBinding ) && + ( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount ); +# endif + } + + bool operator!=( CopyDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyDescriptorSet; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorSet srcSet = {}; + uint32_t srcBinding = {}; + uint32_t srcArrayElement = {}; + VULKAN_HPP_NAMESPACE::DescriptorSet dstSet = {}; + uint32_t dstBinding = {}; + uint32_t dstArrayElement = {}; + uint32_t descriptorCount = {}; + }; + + template <> + struct CppType + { + using Type = CopyDescriptorSet; + }; + + // wrapper struct for struct VkImageCopy2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCopy2.html + struct ImageCopy2 + { + using NativeType = VkImageCopy2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCopy2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageCopy2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcSubresource{ srcSubresource_ } + , srcOffset{ srcOffset_ } + , dstSubresource{ dstSubresource_ } + , dstOffset{ dstOffset_ } + , extent{ extent_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageCopy2( ImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageCopy2( VkImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCopy2( *reinterpret_cast( &rhs ) ) {} + + ImageCopy2 & operator=( ImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageCopy2 & operator=( VkImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT + { + srcSubresource = srcSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcOffset = srcOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT + { + dstSubresource = dstSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstOffset = dstOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageCopy2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCopy2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCopy2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageCopy2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageCopy2 const & ) const = default; +#else + bool operator==( ImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && + ( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); +# endif + } + + bool operator!=( ImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCopy2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D extent = {}; + }; + + template <> + struct CppType + { + using Type = ImageCopy2; + }; + + using ImageCopy2KHR = ImageCopy2; + + // wrapper struct for struct VkCopyImageInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyImageInfo2.html + struct CopyImageInfo2 + { + using NativeType = VkCopyImageInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcImage{ srcImage_ } + , srcImageLayout{ srcImageLayout_ } + , dstImage{ dstImage_ } + , dstImageLayout{ dstImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyImageInfo2( CopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyImageInfo2( VkCopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : CopyImageInfo2( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, + VULKAN_HPP_NAMESPACE::Image dstImage_, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , srcImage( srcImage_ ) + , srcImageLayout( srcImageLayout_ ) + , dstImage( dstImage_ ) + , dstImageLayout( dstImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyImageInfo2 & operator=( CopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyImageInfo2 & operator=( VkCopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT + { + srcImage = srcImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcImageLayout = srcImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT + { + dstImage = dstImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstImageLayout = dstImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageInfo2 & setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyImageInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyImageInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyImageInfo2 const & ) const = default; +#else + bool operator==( CopyImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && + ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image srcImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::Image dstImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyImageInfo2; + }; + + using CopyImageInfo2KHR = CopyImageInfo2; + + // wrapper struct for struct VkCopyImageToBufferInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyImageToBufferInfo2.html + struct CopyImageToBufferInfo2 + { + using NativeType = VkCopyImageToBufferInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageToBufferInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {}, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcImage{ srcImage_ } + , srcImageLayout{ srcImageLayout_ } + , dstBuffer{ dstBuffer_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2( CopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyImageToBufferInfo2( VkCopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyImageToBufferInfo2( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageToBufferInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , srcImage( srcImage_ ) + , srcImageLayout( srcImageLayout_ ) + , dstBuffer( dstBuffer_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyImageToBufferInfo2 & operator=( CopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyImageToBufferInfo2 & operator=( VkCopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT + { + srcImage = srcImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcImageLayout = srcImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT + { + dstBuffer = dstBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageToBufferInfo2 & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyImageToBufferInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageToBufferInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageToBufferInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyImageToBufferInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyImageToBufferInfo2 const & ) const = default; +#else + bool operator==( CopyImageToBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && + ( dstBuffer == rhs.dstBuffer ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyImageToBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageToBufferInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image srcImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {}; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyImageToBufferInfo2; + }; + + using CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2; + + // wrapper struct for struct VkCopyImageToImageInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyImageToImageInfo.html + struct CopyImageToImageInfo + { + using NativeType = VkCopyImageToImageInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageToImageInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyImageToImageInfo( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , srcImage{ srcImage_ } + , srcImageLayout{ srcImageLayout_ } + , dstImage{ dstImage_ } + , dstImageLayout{ dstImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyImageToImageInfo( CopyImageToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyImageToImageInfo( VkCopyImageToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyImageToImageInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageToImageInfo( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_, + VULKAN_HPP_NAMESPACE::Image srcImage_, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, + VULKAN_HPP_NAMESPACE::Image dstImage_, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , srcImage( srcImage_ ) + , srcImageLayout( srcImageLayout_ ) + , dstImage( dstImage_ ) + , dstImageLayout( dstImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyImageToImageInfo & operator=( CopyImageToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyImageToImageInfo & operator=( VkCopyImageToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setFlags( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT + { + srcImage = srcImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcImageLayout = srcImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT + { + dstImage = dstImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstImageLayout = dstImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToImageInfo & setPRegions( const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageToImageInfo & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyImageToImageInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageToImageInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageToImageInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyImageToImageInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyImageToImageInfo const & ) const = default; +#else + bool operator==( CopyImageToImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( srcImage == rhs.srcImage ) && + ( srcImageLayout == rhs.srcImageLayout ) && ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && + ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyImageToImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageToImageInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags = {}; + VULKAN_HPP_NAMESPACE::Image srcImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::Image dstImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyImageToImageInfo; + }; + + using CopyImageToImageInfoEXT = CopyImageToImageInfo; + + // wrapper struct for struct VkImageToMemoryCopy, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageToMemoryCopy.html + struct ImageToMemoryCopy + { + using NativeType = VkImageToMemoryCopy; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageToMemoryCopy; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageToMemoryCopy( void * pHostPointer_ = {}, + uint32_t memoryRowLength_ = {}, + uint32_t memoryImageHeight_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pHostPointer{ pHostPointer_ } + , memoryRowLength{ memoryRowLength_ } + , memoryImageHeight{ memoryImageHeight_ } + , imageSubresource{ imageSubresource_ } + , imageOffset{ imageOffset_ } + , imageExtent{ imageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageToMemoryCopy( ImageToMemoryCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageToMemoryCopy( VkImageToMemoryCopy const & rhs ) VULKAN_HPP_NOEXCEPT : ImageToMemoryCopy( *reinterpret_cast( &rhs ) ) {} + + ImageToMemoryCopy & operator=( ImageToMemoryCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageToMemoryCopy & operator=( VkImageToMemoryCopy const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & setPHostPointer( void * pHostPointer_ ) VULKAN_HPP_NOEXCEPT + { + pHostPointer = pHostPointer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & setMemoryRowLength( uint32_t memoryRowLength_ ) VULKAN_HPP_NOEXCEPT + { + memoryRowLength = memoryRowLength_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & setMemoryImageHeight( uint32_t memoryImageHeight_ ) VULKAN_HPP_NOEXCEPT + { + memoryImageHeight = memoryImageHeight_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & + setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT + { + imageSubresource = imageSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT + { + imageOffset = imageOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageToMemoryCopy & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageToMemoryCopy const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageToMemoryCopy &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageToMemoryCopy const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageToMemoryCopy *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pHostPointer, memoryRowLength, memoryImageHeight, imageSubresource, imageOffset, imageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageToMemoryCopy const & ) const = default; +#else + bool operator==( ImageToMemoryCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pHostPointer == rhs.pHostPointer ) && ( memoryRowLength == rhs.memoryRowLength ) && + ( memoryImageHeight == rhs.memoryImageHeight ) && ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && + ( imageExtent == rhs.imageExtent ); +# endif + } + + bool operator!=( ImageToMemoryCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageToMemoryCopy; + const void * pNext = {}; + void * pHostPointer = {}; + uint32_t memoryRowLength = {}; + uint32_t memoryImageHeight = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; + }; + + template <> + struct CppType + { + using Type = ImageToMemoryCopy; + }; + + using ImageToMemoryCopyEXT = ImageToMemoryCopy; + + // wrapper struct for struct VkCopyImageToMemoryInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyImageToMemoryInfo.html + struct CopyImageToMemoryInfo + { + using NativeType = VkCopyImageToMemoryInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageToMemoryInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyImageToMemoryInfo( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageToMemoryCopy * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , srcImage{ srcImage_ } + , srcImageLayout{ srcImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyImageToMemoryInfo( CopyImageToMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyImageToMemoryInfo( VkCopyImageToMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyImageToMemoryInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageToMemoryInfo( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_, + VULKAN_HPP_NAMESPACE::Image srcImage_, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , srcImage( srcImage_ ) + , srcImageLayout( srcImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyImageToMemoryInfo & operator=( CopyImageToMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyImageToMemoryInfo & operator=( VkCopyImageToMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyImageToMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToMemoryInfo & setFlags( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToMemoryInfo & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT + { + srcImage = srcImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToMemoryInfo & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcImageLayout = srcImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToMemoryInfo & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyImageToMemoryInfo & setPRegions( const VULKAN_HPP_NAMESPACE::ImageToMemoryCopy * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyImageToMemoryInfo & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyImageToMemoryInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageToMemoryInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyImageToMemoryInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyImageToMemoryInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, srcImage, srcImageLayout, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyImageToMemoryInfo const & ) const = default; +#else + bool operator==( CopyImageToMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( srcImage == rhs.srcImage ) && + ( srcImageLayout == rhs.srcImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyImageToMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageToMemoryInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags = {}; + VULKAN_HPP_NAMESPACE::Image srcImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::ImageToMemoryCopy * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyImageToMemoryInfo; + }; + + using CopyImageToMemoryInfoEXT = CopyImageToMemoryInfo; + + // wrapper struct for struct VkCopyMemoryIndirectCommandNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMemoryIndirectCommandNV.html + struct CopyMemoryIndirectCommandNV + { + using NativeType = VkCopyMemoryIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyMemoryIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress dstAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT + : srcAddress{ srcAddress_ } + , dstAddress{ dstAddress_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyMemoryIndirectCommandNV( CopyMemoryIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMemoryIndirectCommandNV( VkCopyMemoryIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyMemoryIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + CopyMemoryIndirectCommandNV & operator=( CopyMemoryIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMemoryIndirectCommandNV & operator=( VkCopyMemoryIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryIndirectCommandNV & setSrcAddress( VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress_ ) VULKAN_HPP_NOEXCEPT + { + srcAddress = srcAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryIndirectCommandNV & setDstAddress( VULKAN_HPP_NAMESPACE::DeviceAddress dstAddress_ ) VULKAN_HPP_NOEXCEPT + { + dstAddress = dstAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryIndirectCommandNV & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMemoryIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMemoryIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcAddress, dstAddress, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyMemoryIndirectCommandNV const & ) const = default; +#else + bool operator==( CopyMemoryIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcAddress == rhs.srcAddress ) && ( dstAddress == rhs.dstAddress ) && ( size == rhs.size ); +# endif + } + + bool operator!=( CopyMemoryIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress dstAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + // wrapper struct for struct VkCopyMemoryToAccelerationStructureInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMemoryToAccelerationStructureInfoKHR.html + struct CopyMemoryToAccelerationStructureInfoKHR + { + using NativeType = VkCopyMemoryToAccelerationStructureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyMemoryToAccelerationStructureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR( + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src_ = {}, + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ = {}, + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , src{ src_ } + , dst{ dst_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR( CopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMemoryToAccelerationStructureInfoKHR( VkCopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyMemoryToAccelerationStructureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + CopyMemoryToAccelerationStructureInfoKHR & operator=( CopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMemoryToAccelerationStructureInfoKHR & operator=( VkCopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & + setSrc( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & src_ ) VULKAN_HPP_NOEXCEPT + { + src = src_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT + { + dst = dst_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR & + setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMemoryToAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToAccelerationStructureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMemoryToAccelerationStructureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, src, dst, mode ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMemoryToAccelerationStructureInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src = {}; + VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst = {}; + VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode = VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone; + }; + + template <> + struct CppType + { + using Type = CopyMemoryToAccelerationStructureInfoKHR; + }; + + // wrapper struct for struct VkCopyMemoryToImageIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMemoryToImageIndirectCommandNV.html + struct CopyMemoryToImageIndirectCommandNV + { + using NativeType = VkCopyMemoryToImageIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyMemoryToImageIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress_ = {}, + uint32_t bufferRowLength_ = {}, + uint32_t bufferImageHeight_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {} ) VULKAN_HPP_NOEXCEPT + : srcAddress{ srcAddress_ } + , bufferRowLength{ bufferRowLength_ } + , bufferImageHeight{ bufferImageHeight_ } + , imageSubresource{ imageSubresource_ } + , imageOffset{ imageOffset_ } + , imageExtent{ imageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyMemoryToImageIndirectCommandNV( CopyMemoryToImageIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMemoryToImageIndirectCommandNV( VkCopyMemoryToImageIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyMemoryToImageIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + CopyMemoryToImageIndirectCommandNV & operator=( CopyMemoryToImageIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMemoryToImageIndirectCommandNV & operator=( VkCopyMemoryToImageIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageIndirectCommandNV & setSrcAddress( VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress_ ) VULKAN_HPP_NOEXCEPT + { + srcAddress = srcAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageIndirectCommandNV & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT + { + bufferRowLength = bufferRowLength_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageIndirectCommandNV & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT + { + bufferImageHeight = bufferImageHeight_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageIndirectCommandNV & + setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT + { + imageSubresource = imageSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageIndirectCommandNV & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT + { + imageOffset = imageOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageIndirectCommandNV & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMemoryToImageIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToImageIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToImageIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMemoryToImageIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcAddress, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyMemoryToImageIndirectCommandNV const & ) const = default; +#else + bool operator==( CopyMemoryToImageIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcAddress == rhs.srcAddress ) && ( bufferRowLength == rhs.bufferRowLength ) && ( bufferImageHeight == rhs.bufferImageHeight ) && + ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && ( imageExtent == rhs.imageExtent ); +# endif + } + + bool operator!=( CopyMemoryToImageIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress = {}; + uint32_t bufferRowLength = {}; + uint32_t bufferImageHeight = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; + }; + + // wrapper struct for struct VkMemoryToImageCopy, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryToImageCopy.html + struct MemoryToImageCopy + { + using NativeType = VkMemoryToImageCopy; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryToImageCopy; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryToImageCopy( const void * pHostPointer_ = {}, + uint32_t memoryRowLength_ = {}, + uint32_t memoryImageHeight_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pHostPointer{ pHostPointer_ } + , memoryRowLength{ memoryRowLength_ } + , memoryImageHeight{ memoryImageHeight_ } + , imageSubresource{ imageSubresource_ } + , imageOffset{ imageOffset_ } + , imageExtent{ imageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryToImageCopy( MemoryToImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryToImageCopy( VkMemoryToImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryToImageCopy( *reinterpret_cast( &rhs ) ) {} + + MemoryToImageCopy & operator=( MemoryToImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryToImageCopy & operator=( VkMemoryToImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & setPHostPointer( const void * pHostPointer_ ) VULKAN_HPP_NOEXCEPT + { + pHostPointer = pHostPointer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & setMemoryRowLength( uint32_t memoryRowLength_ ) VULKAN_HPP_NOEXCEPT + { + memoryRowLength = memoryRowLength_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & setMemoryImageHeight( uint32_t memoryImageHeight_ ) VULKAN_HPP_NOEXCEPT + { + memoryImageHeight = memoryImageHeight_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & + setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT + { + imageSubresource = imageSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT + { + imageOffset = imageOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryToImageCopy & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryToImageCopy const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryToImageCopy &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryToImageCopy const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryToImageCopy *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pHostPointer, memoryRowLength, memoryImageHeight, imageSubresource, imageOffset, imageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryToImageCopy const & ) const = default; +#else + bool operator==( MemoryToImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pHostPointer == rhs.pHostPointer ) && ( memoryRowLength == rhs.memoryRowLength ) && + ( memoryImageHeight == rhs.memoryImageHeight ) && ( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) && + ( imageExtent == rhs.imageExtent ); +# endif + } + + bool operator!=( MemoryToImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryToImageCopy; + const void * pNext = {}; + const void * pHostPointer = {}; + uint32_t memoryRowLength = {}; + uint32_t memoryImageHeight = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {}; + }; + + template <> + struct CppType + { + using Type = MemoryToImageCopy; + }; + + using MemoryToImageCopyEXT = MemoryToImageCopy; + + // wrapper struct for struct VkCopyMemoryToImageInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMemoryToImageInfo.html + struct CopyMemoryToImageInfo + { + using NativeType = VkCopyMemoryToImageInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyMemoryToImageInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyMemoryToImageInfo( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::MemoryToImageCopy * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , dstImage{ dstImage_ } + , dstImageLayout{ dstImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyMemoryToImageInfo( CopyMemoryToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMemoryToImageInfo( VkCopyMemoryToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyMemoryToImageInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyMemoryToImageInfo( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_, + VULKAN_HPP_NAMESPACE::Image dstImage_, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , dstImage( dstImage_ ) + , dstImageLayout( dstImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyMemoryToImageInfo & operator=( CopyMemoryToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMemoryToImageInfo & operator=( VkCopyMemoryToImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageInfo & setFlags( VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageInfo & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT + { + dstImage = dstImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageInfo & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstImageLayout = dstImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageInfo & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToImageInfo & setPRegions( const VULKAN_HPP_NAMESPACE::MemoryToImageCopy * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyMemoryToImageInfo & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMemoryToImageInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToImageInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToImageInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMemoryToImageInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, dstImage, dstImageLayout, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyMemoryToImageInfo const & ) const = default; +#else + bool operator==( CopyMemoryToImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dstImage == rhs.dstImage ) && + ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyMemoryToImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMemoryToImageInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::HostImageCopyFlags flags = {}; + VULKAN_HPP_NAMESPACE::Image dstImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::MemoryToImageCopy * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyMemoryToImageInfo; + }; + + using CopyMemoryToImageInfoEXT = CopyMemoryToImageInfo; + + // wrapper struct for struct VkCopyMemoryToMicromapInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMemoryToMicromapInfoEXT.html + struct CopyMemoryToMicromapInfoEXT + { + using NativeType = VkCopyMemoryToMicromapInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyMemoryToMicromapInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToMicromapInfoEXT( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src_ = {}, + VULKAN_HPP_NAMESPACE::MicromapEXT dst_ = {}, + VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode_ = VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT::eClone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , src{ src_ } + , dst{ dst_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToMicromapInfoEXT( CopyMemoryToMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMemoryToMicromapInfoEXT( VkCopyMemoryToMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyMemoryToMicromapInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + CopyMemoryToMicromapInfoEXT & operator=( CopyMemoryToMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMemoryToMicromapInfoEXT & operator=( VkCopyMemoryToMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToMicromapInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToMicromapInfoEXT & setSrc( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & src_ ) VULKAN_HPP_NOEXCEPT + { + src = src_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToMicromapInfoEXT & setDst( VULKAN_HPP_NAMESPACE::MicromapEXT dst_ ) VULKAN_HPP_NOEXCEPT + { + dst = dst_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMemoryToMicromapInfoEXT & setMode( VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMemoryToMicromapInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToMicromapInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMemoryToMicromapInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMemoryToMicromapInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, src, dst, mode ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMemoryToMicromapInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT dst = {}; + VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode = VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT::eClone; + }; + + template <> + struct CppType + { + using Type = CopyMemoryToMicromapInfoEXT; + }; + + // wrapper struct for struct VkCopyMicromapInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMicromapInfoEXT.html + struct CopyMicromapInfoEXT + { + using NativeType = VkCopyMicromapInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyMicromapInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyMicromapInfoEXT( VULKAN_HPP_NAMESPACE::MicromapEXT src_ = {}, + VULKAN_HPP_NAMESPACE::MicromapEXT dst_ = {}, + VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode_ = VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT::eClone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , src{ src_ } + , dst{ dst_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyMicromapInfoEXT( CopyMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMicromapInfoEXT( VkCopyMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : CopyMicromapInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + CopyMicromapInfoEXT & operator=( CopyMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMicromapInfoEXT & operator=( VkCopyMicromapInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMicromapInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapInfoEXT & setSrc( VULKAN_HPP_NAMESPACE::MicromapEXT src_ ) VULKAN_HPP_NOEXCEPT + { + src = src_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapInfoEXT & setDst( VULKAN_HPP_NAMESPACE::MicromapEXT dst_ ) VULKAN_HPP_NOEXCEPT + { + dst = dst_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapInfoEXT & setMode( VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMicromapInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMicromapInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMicromapInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMicromapInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, src, dst, mode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyMicromapInfoEXT const & ) const = default; +#else + bool operator==( CopyMicromapInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( src == rhs.src ) && ( dst == rhs.dst ) && ( mode == rhs.mode ); +# endif + } + + bool operator!=( CopyMicromapInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMicromapInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT src = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT dst = {}; + VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode = VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT::eClone; + }; + + template <> + struct CppType + { + using Type = CopyMicromapInfoEXT; + }; + + // wrapper struct for struct VkCopyMicromapToMemoryInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyMicromapToMemoryInfoEXT.html + struct CopyMicromapToMemoryInfoEXT + { + using NativeType = VkCopyMicromapToMemoryInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyMicromapToMemoryInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 CopyMicromapToMemoryInfoEXT( VULKAN_HPP_NAMESPACE::MicromapEXT src_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst_ = {}, + VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode_ = VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT::eClone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , src{ src_ } + , dst{ dst_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapToMemoryInfoEXT( CopyMicromapToMemoryInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyMicromapToMemoryInfoEXT( VkCopyMicromapToMemoryInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : CopyMicromapToMemoryInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + CopyMicromapToMemoryInfoEXT & operator=( CopyMicromapToMemoryInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyMicromapToMemoryInfoEXT & operator=( VkCopyMicromapToMemoryInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyMicromapToMemoryInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapToMemoryInfoEXT & setSrc( VULKAN_HPP_NAMESPACE::MicromapEXT src_ ) VULKAN_HPP_NOEXCEPT + { + src = src_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapToMemoryInfoEXT & setDst( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & dst_ ) VULKAN_HPP_NOEXCEPT + { + dst = dst_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyMicromapToMemoryInfoEXT & setMode( VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyMicromapToMemoryInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMicromapToMemoryInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyMicromapToMemoryInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyMicromapToMemoryInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, src, dst, mode ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMicromapToMemoryInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MicromapEXT src = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst = {}; + VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT mode = VULKAN_HPP_NAMESPACE::CopyMicromapModeEXT::eClone; + }; + + template <> + struct CppType + { + using Type = CopyMicromapToMemoryInfoEXT; + }; + + // wrapper struct for struct VkTensorCopyARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorCopyARM.html + struct TensorCopyARM + { + using NativeType = VkTensorCopyARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorCopyARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorCopyARM( uint32_t dimensionCount_ = {}, + const uint64_t * pSrcOffset_ = {}, + const uint64_t * pDstOffset_ = {}, + const uint64_t * pExtent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dimensionCount{ dimensionCount_ } + , pSrcOffset{ pSrcOffset_ } + , pDstOffset{ pDstOffset_ } + , pExtent{ pExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorCopyARM( TensorCopyARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorCopyARM( VkTensorCopyARM const & rhs ) VULKAN_HPP_NOEXCEPT : TensorCopyARM( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorCopyARM( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & srcOffset_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extent_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , dimensionCount( static_cast( srcOffset_.size() ) ) + , pSrcOffset( srcOffset_.data() ) + , pDstOffset( dstOffset_.data() ) + , pExtent( extent_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( srcOffset_.empty() || dstOffset_.empty() || ( srcOffset_.size() == dstOffset_.size() ) ); + VULKAN_HPP_ASSERT( srcOffset_.empty() || extent_.empty() || ( srcOffset_.size() == extent_.size() ) ); + VULKAN_HPP_ASSERT( dstOffset_.empty() || extent_.empty() || ( dstOffset_.size() == extent_.size() ) ); +# else + if ( !srcOffset_.empty() && !dstOffset_.empty() && ( srcOffset_.size() != dstOffset_.size() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::TensorCopyARM::TensorCopyARM: !srcOffset_.empty() && !dstOffset_.empty() && ( srcOffset_.size() != dstOffset_.size() )" ); + } + if ( !srcOffset_.empty() && !extent_.empty() && ( srcOffset_.size() != extent_.size() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::TensorCopyARM::TensorCopyARM: !srcOffset_.empty() && !extent_.empty() && ( srcOffset_.size() != extent_.size() )" ); + } + if ( !dstOffset_.empty() && !extent_.empty() && ( dstOffset_.size() != extent_.size() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::TensorCopyARM::TensorCopyARM: !dstOffset_.empty() && !extent_.empty() && ( dstOffset_.size() != extent_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + TensorCopyARM & operator=( TensorCopyARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorCopyARM & operator=( VkTensorCopyARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorCopyARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCopyARM & setDimensionCount( uint32_t dimensionCount_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = dimensionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCopyARM & setPSrcOffset( const uint64_t * pSrcOffset_ ) VULKAN_HPP_NOEXCEPT + { + pSrcOffset = pSrcOffset_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorCopyARM & setSrcOffset( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = static_cast( srcOffset_.size() ); + pSrcOffset = srcOffset_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 TensorCopyARM & setPDstOffset( const uint64_t * pDstOffset_ ) VULKAN_HPP_NOEXCEPT + { + pDstOffset = pDstOffset_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorCopyARM & setDstOffset( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = static_cast( dstOffset_.size() ); + pDstOffset = dstOffset_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 TensorCopyARM & setPExtent( const uint64_t * pExtent_ ) VULKAN_HPP_NOEXCEPT + { + pExtent = pExtent_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorCopyARM & setExtent( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extent_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = static_cast( extent_.size() ); + pExtent = extent_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorCopyARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorCopyARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorCopyARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorCopyARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dimensionCount, pSrcOffset, pDstOffset, pExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorCopyARM const & ) const = default; +#else + bool operator==( TensorCopyARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dimensionCount == rhs.dimensionCount ) && ( pSrcOffset == rhs.pSrcOffset ) && + ( pDstOffset == rhs.pDstOffset ) && ( pExtent == rhs.pExtent ); +# endif + } + + bool operator!=( TensorCopyARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorCopyARM; + const void * pNext = {}; + uint32_t dimensionCount = {}; + const uint64_t * pSrcOffset = {}; + const uint64_t * pDstOffset = {}; + const uint64_t * pExtent = {}; + }; + + template <> + struct CppType + { + using Type = TensorCopyARM; + }; + + // wrapper struct for struct VkCopyTensorInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCopyTensorInfoARM.html + struct CopyTensorInfoARM + { + using NativeType = VkCopyTensorInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyTensorInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CopyTensorInfoARM( VULKAN_HPP_NAMESPACE::TensorARM srcTensor_ = {}, + VULKAN_HPP_NAMESPACE::TensorARM dstTensor_ = {}, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::TensorCopyARM * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcTensor{ srcTensor_ } + , dstTensor{ dstTensor_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR CopyTensorInfoARM( CopyTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CopyTensorInfoARM( VkCopyTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT : CopyTensorInfoARM( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyTensorInfoARM( VULKAN_HPP_NAMESPACE::TensorARM srcTensor_, + VULKAN_HPP_NAMESPACE::TensorARM dstTensor_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), srcTensor( srcTensor_ ), dstTensor( dstTensor_ ), regionCount( static_cast( regions_.size() ) ), pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CopyTensorInfoARM & operator=( CopyTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CopyTensorInfoARM & operator=( VkCopyTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CopyTensorInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyTensorInfoARM & setSrcTensor( VULKAN_HPP_NAMESPACE::TensorARM srcTensor_ ) VULKAN_HPP_NOEXCEPT + { + srcTensor = srcTensor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyTensorInfoARM & setDstTensor( VULKAN_HPP_NAMESPACE::TensorARM dstTensor_ ) VULKAN_HPP_NOEXCEPT + { + dstTensor = dstTensor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyTensorInfoARM & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CopyTensorInfoARM & setPRegions( const VULKAN_HPP_NAMESPACE::TensorCopyARM * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CopyTensorInfoARM & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCopyTensorInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyTensorInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCopyTensorInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCopyTensorInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcTensor, dstTensor, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CopyTensorInfoARM const & ) const = default; +#else + bool operator==( CopyTensorInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcTensor == rhs.srcTensor ) && ( dstTensor == rhs.dstTensor ) && + ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( CopyTensorInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyTensorInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorARM srcTensor = {}; + VULKAN_HPP_NAMESPACE::TensorARM dstTensor = {}; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::TensorCopyARM * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = CopyTensorInfoARM; + }; + + // wrapper struct for struct VkCuFunctionCreateInfoNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuFunctionCreateInfoNVX.html + struct CuFunctionCreateInfoNVX + { + using NativeType = VkCuFunctionCreateInfoNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuFunctionCreateInfoNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CuFunctionCreateInfoNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ = {}, const char * pName_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , module{ module_ } + , pName{ pName_ } + { + } + + VULKAN_HPP_CONSTEXPR CuFunctionCreateInfoNVX( CuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CuFunctionCreateInfoNVX( VkCuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : CuFunctionCreateInfoNVX( *reinterpret_cast( &rhs ) ) + { + } + + CuFunctionCreateInfoNVX & operator=( CuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CuFunctionCreateInfoNVX & operator=( VkCuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setModule( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ ) VULKAN_HPP_NOEXCEPT + { + module = module_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT + { + pName = pName_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCuFunctionCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuFunctionCreateInfoNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuFunctionCreateInfoNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCuFunctionCreateInfoNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, module, pName ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = module <=> rhs.module; cmp != 0 ) + return cmp; + if ( pName != rhs.pName ) + if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( module == rhs.module ) && ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ); + } + + bool operator!=( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuFunctionCreateInfoNVX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CuModuleNVX module = {}; + const char * pName = {}; + }; + + template <> + struct CppType + { + using Type = CuFunctionCreateInfoNVX; + }; + + // wrapper struct for struct VkCuLaunchInfoNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuLaunchInfoNVX.html + struct CuLaunchInfoNVX + { + using NativeType = VkCuLaunchInfoNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuLaunchInfoNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CuLaunchInfoNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ = {}, + uint32_t gridDimX_ = {}, + uint32_t gridDimY_ = {}, + uint32_t gridDimZ_ = {}, + uint32_t blockDimX_ = {}, + uint32_t blockDimY_ = {}, + uint32_t blockDimZ_ = {}, + uint32_t sharedMemBytes_ = {}, + size_t paramCount_ = {}, + const void * const * pParams_ = {}, + size_t extraCount_ = {}, + const void * const * pExtras_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , function{ function_ } + , gridDimX{ gridDimX_ } + , gridDimY{ gridDimY_ } + , gridDimZ{ gridDimZ_ } + , blockDimX{ blockDimX_ } + , blockDimY{ blockDimY_ } + , blockDimZ{ blockDimZ_ } + , sharedMemBytes{ sharedMemBytes_ } + , paramCount{ paramCount_ } + , pParams{ pParams_ } + , extraCount{ extraCount_ } + , pExtras{ pExtras_ } + { + } + + VULKAN_HPP_CONSTEXPR CuLaunchInfoNVX( CuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CuLaunchInfoNVX( VkCuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT : CuLaunchInfoNVX( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CuLaunchInfoNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_, + uint32_t gridDimX_, + uint32_t gridDimY_, + uint32_t gridDimZ_, + uint32_t blockDimX_, + uint32_t blockDimY_, + uint32_t blockDimZ_, + uint32_t sharedMemBytes_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & params_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extras_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , function( function_ ) + , gridDimX( gridDimX_ ) + , gridDimY( gridDimY_ ) + , gridDimZ( gridDimZ_ ) + , blockDimX( blockDimX_ ) + , blockDimY( blockDimY_ ) + , blockDimZ( blockDimZ_ ) + , sharedMemBytes( sharedMemBytes_ ) + , paramCount( params_.size() ) + , pParams( params_.data() ) + , extraCount( extras_.size() ) + , pExtras( extras_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CuLaunchInfoNVX & operator=( CuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CuLaunchInfoNVX & operator=( VkCuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setFunction( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ ) VULKAN_HPP_NOEXCEPT + { + function = function_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimX( uint32_t gridDimX_ ) VULKAN_HPP_NOEXCEPT + { + gridDimX = gridDimX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimY( uint32_t gridDimY_ ) VULKAN_HPP_NOEXCEPT + { + gridDimY = gridDimY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimZ( uint32_t gridDimZ_ ) VULKAN_HPP_NOEXCEPT + { + gridDimZ = gridDimZ_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimX( uint32_t blockDimX_ ) VULKAN_HPP_NOEXCEPT + { + blockDimX = blockDimX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimY( uint32_t blockDimY_ ) VULKAN_HPP_NOEXCEPT + { + blockDimY = blockDimY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimZ( uint32_t blockDimZ_ ) VULKAN_HPP_NOEXCEPT + { + blockDimZ = blockDimZ_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setSharedMemBytes( uint32_t sharedMemBytes_ ) VULKAN_HPP_NOEXCEPT + { + sharedMemBytes = sharedMemBytes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setParamCount( size_t paramCount_ ) VULKAN_HPP_NOEXCEPT + { + paramCount = paramCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPParams( const void * const * pParams_ ) VULKAN_HPP_NOEXCEPT + { + pParams = pParams_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CuLaunchInfoNVX & setParams( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & params_ ) VULKAN_HPP_NOEXCEPT + { + paramCount = params_.size(); + pParams = params_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setExtraCount( size_t extraCount_ ) VULKAN_HPP_NOEXCEPT + { + extraCount = extraCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPExtras( const void * const * pExtras_ ) VULKAN_HPP_NOEXCEPT + { + pExtras = pExtras_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CuLaunchInfoNVX & setExtras( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extras_ ) VULKAN_HPP_NOEXCEPT + { + extraCount = extras_.size(); + pExtras = extras_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCuLaunchInfoNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuLaunchInfoNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuLaunchInfoNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCuLaunchInfoNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, function, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, paramCount, pParams, extraCount, pExtras ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CuLaunchInfoNVX const & ) const = default; +#else + bool operator==( CuLaunchInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( function == rhs.function ) && ( gridDimX == rhs.gridDimX ) && ( gridDimY == rhs.gridDimY ) && + ( gridDimZ == rhs.gridDimZ ) && ( blockDimX == rhs.blockDimX ) && ( blockDimY == rhs.blockDimY ) && ( blockDimZ == rhs.blockDimZ ) && + ( sharedMemBytes == rhs.sharedMemBytes ) && ( paramCount == rhs.paramCount ) && ( pParams == rhs.pParams ) && ( extraCount == rhs.extraCount ) && + ( pExtras == rhs.pExtras ); +# endif + } + + bool operator!=( CuLaunchInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuLaunchInfoNVX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CuFunctionNVX function = {}; + uint32_t gridDimX = {}; + uint32_t gridDimY = {}; + uint32_t gridDimZ = {}; + uint32_t blockDimX = {}; + uint32_t blockDimY = {}; + uint32_t blockDimZ = {}; + uint32_t sharedMemBytes = {}; + size_t paramCount = {}; + const void * const * pParams = {}; + size_t extraCount = {}; + const void * const * pExtras = {}; + }; + + template <> + struct CppType + { + using Type = CuLaunchInfoNVX; + }; + + // wrapper struct for struct VkCuModuleCreateInfoNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuModuleCreateInfoNVX.html + struct CuModuleCreateInfoNVX + { + using NativeType = VkCuModuleCreateInfoNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuModuleCreateInfoNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CuModuleCreateInfoNVX( size_t dataSize_ = {}, const void * pData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR CuModuleCreateInfoNVX( CuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CuModuleCreateInfoNVX( VkCuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : CuModuleCreateInfoNVX( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + CuModuleCreateInfoNVX( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), dataSize( data_.size() * sizeof( T ) ), pData( data_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CuModuleCreateInfoNVX & operator=( CuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CuModuleCreateInfoNVX & operator=( VkCuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = dataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + CuModuleCreateInfoNVX & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = data_.size() * sizeof( T ); + pData = data_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCuModuleCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuModuleCreateInfoNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuModuleCreateInfoNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCuModuleCreateInfoNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dataSize, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CuModuleCreateInfoNVX const & ) const = default; +#else + bool operator==( CuModuleCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); +# endif + } + + bool operator!=( CuModuleCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuModuleCreateInfoNVX; + const void * pNext = {}; + size_t dataSize = {}; + const void * pData = {}; + }; + + template <> + struct CppType + { + using Type = CuModuleCreateInfoNVX; + }; + + // wrapper struct for struct VkCuModuleTexturingModeCreateInfoNVX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkCuModuleTexturingModeCreateInfoNVX.html + struct CuModuleTexturingModeCreateInfoNVX + { + using NativeType = VkCuModuleTexturingModeCreateInfoNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuModuleTexturingModeCreateInfoNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CuModuleTexturingModeCreateInfoNVX( VULKAN_HPP_NAMESPACE::Bool32 use64bitTexturing_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , use64bitTexturing{ use64bitTexturing_ } + { + } + + VULKAN_HPP_CONSTEXPR CuModuleTexturingModeCreateInfoNVX( CuModuleTexturingModeCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CuModuleTexturingModeCreateInfoNVX( VkCuModuleTexturingModeCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : CuModuleTexturingModeCreateInfoNVX( *reinterpret_cast( &rhs ) ) + { + } + + CuModuleTexturingModeCreateInfoNVX & operator=( CuModuleTexturingModeCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CuModuleTexturingModeCreateInfoNVX & operator=( VkCuModuleTexturingModeCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CuModuleTexturingModeCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CuModuleTexturingModeCreateInfoNVX & setUse64bitTexturing( VULKAN_HPP_NAMESPACE::Bool32 use64bitTexturing_ ) VULKAN_HPP_NOEXCEPT + { + use64bitTexturing = use64bitTexturing_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCuModuleTexturingModeCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuModuleTexturingModeCreateInfoNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCuModuleTexturingModeCreateInfoNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCuModuleTexturingModeCreateInfoNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, use64bitTexturing ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CuModuleTexturingModeCreateInfoNVX const & ) const = default; +#else + bool operator==( CuModuleTexturingModeCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( use64bitTexturing == rhs.use64bitTexturing ); +# endif + } + + bool operator!=( CuModuleTexturingModeCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuModuleTexturingModeCreateInfoNVX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 use64bitTexturing = {}; + }; + + template <> + struct CppType + { + using Type = CuModuleTexturingModeCreateInfoNVX; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkCudaFunctionCreateInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaFunctionCreateInfoNV.html + struct CudaFunctionCreateInfoNV + { + using NativeType = VkCudaFunctionCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCudaFunctionCreateInfoNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + CudaFunctionCreateInfoNV( VULKAN_HPP_NAMESPACE::CudaModuleNV module_ = {}, const char * pName_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , module{ module_ } + , pName{ pName_ } + { + } + + VULKAN_HPP_CONSTEXPR CudaFunctionCreateInfoNV( CudaFunctionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CudaFunctionCreateInfoNV( VkCudaFunctionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CudaFunctionCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + CudaFunctionCreateInfoNV & operator=( CudaFunctionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CudaFunctionCreateInfoNV & operator=( VkCudaFunctionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CudaFunctionCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaFunctionCreateInfoNV & setModule( VULKAN_HPP_NAMESPACE::CudaModuleNV module_ ) VULKAN_HPP_NOEXCEPT + { + module = module_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaFunctionCreateInfoNV & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT + { + pName = pName_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCudaFunctionCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCudaFunctionCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCudaFunctionCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCudaFunctionCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, module, pName ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( CudaFunctionCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = module <=> rhs.module; cmp != 0 ) + return cmp; + if ( pName != rhs.pName ) + if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( CudaFunctionCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( module == rhs.module ) && ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ); + } + + bool operator!=( CudaFunctionCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCudaFunctionCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CudaModuleNV module = {}; + const char * pName = {}; + }; + + template <> + struct CppType + { + using Type = CudaFunctionCreateInfoNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkCudaLaunchInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaLaunchInfoNV.html + struct CudaLaunchInfoNV + { + using NativeType = VkCudaLaunchInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCudaLaunchInfoNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CudaLaunchInfoNV( VULKAN_HPP_NAMESPACE::CudaFunctionNV function_ = {}, + uint32_t gridDimX_ = {}, + uint32_t gridDimY_ = {}, + uint32_t gridDimZ_ = {}, + uint32_t blockDimX_ = {}, + uint32_t blockDimY_ = {}, + uint32_t blockDimZ_ = {}, + uint32_t sharedMemBytes_ = {}, + size_t paramCount_ = {}, + const void * const * pParams_ = {}, + size_t extraCount_ = {}, + const void * const * pExtras_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , function{ function_ } + , gridDimX{ gridDimX_ } + , gridDimY{ gridDimY_ } + , gridDimZ{ gridDimZ_ } + , blockDimX{ blockDimX_ } + , blockDimY{ blockDimY_ } + , blockDimZ{ blockDimZ_ } + , sharedMemBytes{ sharedMemBytes_ } + , paramCount{ paramCount_ } + , pParams{ pParams_ } + , extraCount{ extraCount_ } + , pExtras{ pExtras_ } + { + } + + VULKAN_HPP_CONSTEXPR CudaLaunchInfoNV( CudaLaunchInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CudaLaunchInfoNV( VkCudaLaunchInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT : CudaLaunchInfoNV( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CudaLaunchInfoNV( VULKAN_HPP_NAMESPACE::CudaFunctionNV function_, + uint32_t gridDimX_, + uint32_t gridDimY_, + uint32_t gridDimZ_, + uint32_t blockDimX_, + uint32_t blockDimY_, + uint32_t blockDimZ_, + uint32_t sharedMemBytes_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & params_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extras_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , function( function_ ) + , gridDimX( gridDimX_ ) + , gridDimY( gridDimY_ ) + , gridDimZ( gridDimZ_ ) + , blockDimX( blockDimX_ ) + , blockDimY( blockDimY_ ) + , blockDimZ( blockDimZ_ ) + , sharedMemBytes( sharedMemBytes_ ) + , paramCount( params_.size() ) + , pParams( params_.data() ) + , extraCount( extras_.size() ) + , pExtras( extras_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CudaLaunchInfoNV & operator=( CudaLaunchInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CudaLaunchInfoNV & operator=( VkCudaLaunchInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setFunction( VULKAN_HPP_NAMESPACE::CudaFunctionNV function_ ) VULKAN_HPP_NOEXCEPT + { + function = function_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setGridDimX( uint32_t gridDimX_ ) VULKAN_HPP_NOEXCEPT + { + gridDimX = gridDimX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setGridDimY( uint32_t gridDimY_ ) VULKAN_HPP_NOEXCEPT + { + gridDimY = gridDimY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setGridDimZ( uint32_t gridDimZ_ ) VULKAN_HPP_NOEXCEPT + { + gridDimZ = gridDimZ_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setBlockDimX( uint32_t blockDimX_ ) VULKAN_HPP_NOEXCEPT + { + blockDimX = blockDimX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setBlockDimY( uint32_t blockDimY_ ) VULKAN_HPP_NOEXCEPT + { + blockDimY = blockDimY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setBlockDimZ( uint32_t blockDimZ_ ) VULKAN_HPP_NOEXCEPT + { + blockDimZ = blockDimZ_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setSharedMemBytes( uint32_t sharedMemBytes_ ) VULKAN_HPP_NOEXCEPT + { + sharedMemBytes = sharedMemBytes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setParamCount( size_t paramCount_ ) VULKAN_HPP_NOEXCEPT + { + paramCount = paramCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setPParams( const void * const * pParams_ ) VULKAN_HPP_NOEXCEPT + { + pParams = pParams_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CudaLaunchInfoNV & setParams( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & params_ ) VULKAN_HPP_NOEXCEPT + { + paramCount = params_.size(); + pParams = params_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setExtraCount( size_t extraCount_ ) VULKAN_HPP_NOEXCEPT + { + extraCount = extraCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaLaunchInfoNV & setPExtras( const void * const * pExtras_ ) VULKAN_HPP_NOEXCEPT + { + pExtras = pExtras_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + CudaLaunchInfoNV & setExtras( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & extras_ ) VULKAN_HPP_NOEXCEPT + { + extraCount = extras_.size(); + pExtras = extras_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCudaLaunchInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCudaLaunchInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCudaLaunchInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCudaLaunchInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, function, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, paramCount, pParams, extraCount, pExtras ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CudaLaunchInfoNV const & ) const = default; +# else + bool operator==( CudaLaunchInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( function == rhs.function ) && ( gridDimX == rhs.gridDimX ) && ( gridDimY == rhs.gridDimY ) && + ( gridDimZ == rhs.gridDimZ ) && ( blockDimX == rhs.blockDimX ) && ( blockDimY == rhs.blockDimY ) && ( blockDimZ == rhs.blockDimZ ) && + ( sharedMemBytes == rhs.sharedMemBytes ) && ( paramCount == rhs.paramCount ) && ( pParams == rhs.pParams ) && ( extraCount == rhs.extraCount ) && + ( pExtras == rhs.pExtras ); +# endif + } + + bool operator!=( CudaLaunchInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCudaLaunchInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CudaFunctionNV function = {}; + uint32_t gridDimX = {}; + uint32_t gridDimY = {}; + uint32_t gridDimZ = {}; + uint32_t blockDimX = {}; + uint32_t blockDimY = {}; + uint32_t blockDimZ = {}; + uint32_t sharedMemBytes = {}; + size_t paramCount = {}; + const void * const * pParams = {}; + size_t extraCount = {}; + const void * const * pExtras = {}; + }; + + template <> + struct CppType + { + using Type = CudaLaunchInfoNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkCudaModuleCreateInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkCudaModuleCreateInfoNV.html + struct CudaModuleCreateInfoNV + { + using NativeType = VkCudaModuleCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCudaModuleCreateInfoNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR CudaModuleCreateInfoNV( size_t dataSize_ = {}, const void * pData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR CudaModuleCreateInfoNV( CudaModuleCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + CudaModuleCreateInfoNV( VkCudaModuleCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : CudaModuleCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + CudaModuleCreateInfoNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), dataSize( data_.size() * sizeof( T ) ), pData( data_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + CudaModuleCreateInfoNV & operator=( CudaModuleCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + CudaModuleCreateInfoNV & operator=( VkCudaModuleCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 CudaModuleCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaModuleCreateInfoNV & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = dataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 CudaModuleCreateInfoNV & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + CudaModuleCreateInfoNV & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = data_.size() * sizeof( T ); + pData = data_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkCudaModuleCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCudaModuleCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkCudaModuleCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkCudaModuleCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dataSize, pData ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( CudaModuleCreateInfoNV const & ) const = default; +# else + bool operator==( CudaModuleCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); +# endif + } + + bool operator!=( CudaModuleCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCudaModuleCreateInfoNV; + const void * pNext = {}; + size_t dataSize = {}; + const void * pData = {}; + }; + + template <> + struct CppType + { + using Type = CudaModuleCreateInfoNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkD3D12FenceSubmitInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkD3D12FenceSubmitInfoKHR.html + struct D3D12FenceSubmitInfoKHR + { + using NativeType = VkD3D12FenceSubmitInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eD3D12FenceSubmitInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR D3D12FenceSubmitInfoKHR( uint32_t waitSemaphoreValuesCount_ = {}, + const uint64_t * pWaitSemaphoreValues_ = {}, + uint32_t signalSemaphoreValuesCount_ = {}, + const uint64_t * pSignalSemaphoreValues_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , waitSemaphoreValuesCount{ waitSemaphoreValuesCount_ } + , pWaitSemaphoreValues{ pWaitSemaphoreValues_ } + , signalSemaphoreValuesCount{ signalSemaphoreValuesCount_ } + , pSignalSemaphoreValues{ pSignalSemaphoreValues_ } + { + } + + VULKAN_HPP_CONSTEXPR D3D12FenceSubmitInfoKHR( D3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + D3D12FenceSubmitInfoKHR( VkD3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : D3D12FenceSubmitInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + D3D12FenceSubmitInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , waitSemaphoreValuesCount( static_cast( waitSemaphoreValues_.size() ) ) + , pWaitSemaphoreValues( waitSemaphoreValues_.data() ) + , signalSemaphoreValuesCount( static_cast( signalSemaphoreValues_.size() ) ) + , pSignalSemaphoreValues( signalSemaphoreValues_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + D3D12FenceSubmitInfoKHR & operator=( D3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + D3D12FenceSubmitInfoKHR & operator=( VkD3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setWaitSemaphoreValuesCount( uint32_t waitSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreValuesCount = waitSemaphoreValuesCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphoreValues = pWaitSemaphoreValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + D3D12FenceSubmitInfoKHR & + setWaitSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreValuesCount = static_cast( waitSemaphoreValues_.size() ); + pWaitSemaphoreValues = waitSemaphoreValues_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setSignalSemaphoreValuesCount( uint32_t signalSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreValuesCount = signalSemaphoreValuesCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + pSignalSemaphoreValues = pSignalSemaphoreValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + D3D12FenceSubmitInfoKHR & + setSignalSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreValuesCount = static_cast( signalSemaphoreValues_.size() ); + pSignalSemaphoreValues = signalSemaphoreValues_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkD3D12FenceSubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkD3D12FenceSubmitInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkD3D12FenceSubmitInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkD3D12FenceSubmitInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, waitSemaphoreValuesCount, pWaitSemaphoreValues, signalSemaphoreValuesCount, pSignalSemaphoreValues ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( D3D12FenceSubmitInfoKHR const & ) const = default; +# else + bool operator==( D3D12FenceSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreValuesCount == rhs.waitSemaphoreValuesCount ) && + ( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues ) && ( signalSemaphoreValuesCount == rhs.signalSemaphoreValuesCount ) && + ( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues ); +# endif + } + + bool operator!=( D3D12FenceSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eD3D12FenceSubmitInfoKHR; + const void * pNext = {}; + uint32_t waitSemaphoreValuesCount = {}; + const uint64_t * pWaitSemaphoreValues = {}; + uint32_t signalSemaphoreValuesCount = {}; + const uint64_t * pSignalSemaphoreValues = {}; + }; + + template <> + struct CppType + { + using Type = D3D12FenceSubmitInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkDataGraphPipelineCompilerControlCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineCompilerControlCreateInfoARM.html + struct DataGraphPipelineCompilerControlCreateInfoARM + { + using NativeType = VkDataGraphPipelineCompilerControlCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineCompilerControlCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineCompilerControlCreateInfoARM( const char * pVendorOptions_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pVendorOptions{ pVendorOptions_ } + { + } + + VULKAN_HPP_CONSTEXPR + DataGraphPipelineCompilerControlCreateInfoARM( DataGraphPipelineCompilerControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineCompilerControlCreateInfoARM( VkDataGraphPipelineCompilerControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineCompilerControlCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineCompilerControlCreateInfoARM & operator=( DataGraphPipelineCompilerControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineCompilerControlCreateInfoARM & operator=( VkDataGraphPipelineCompilerControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCompilerControlCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCompilerControlCreateInfoARM & setPVendorOptions( const char * pVendorOptions_ ) VULKAN_HPP_NOEXCEPT + { + pVendorOptions = pVendorOptions_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineCompilerControlCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineCompilerControlCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineCompilerControlCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineCompilerControlCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pVendorOptions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DataGraphPipelineCompilerControlCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( pVendorOptions != rhs.pVendorOptions ) + if ( auto cmp = strcmp( pVendorOptions, rhs.pVendorOptions ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DataGraphPipelineCompilerControlCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( ( pVendorOptions == rhs.pVendorOptions ) || ( strcmp( pVendorOptions, rhs.pVendorOptions ) == 0 ) ); + } + + bool operator!=( DataGraphPipelineCompilerControlCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineCompilerControlCreateInfoARM; + const void * pNext = {}; + const char * pVendorOptions = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineCompilerControlCreateInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineConstantARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineConstantARM.html + struct DataGraphPipelineConstantARM + { + using NativeType = VkDataGraphPipelineConstantARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineConstantARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineConstantARM( uint32_t id_ = {}, const void * pConstantData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , id{ id_ } + , pConstantData{ pConstantData_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineConstantARM( DataGraphPipelineConstantARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineConstantARM( VkDataGraphPipelineConstantARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineConstantARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineConstantARM & operator=( DataGraphPipelineConstantARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineConstantARM & operator=( VkDataGraphPipelineConstantARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantARM & setId( uint32_t id_ ) VULKAN_HPP_NOEXCEPT + { + id = id_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantARM & setPConstantData( const void * pConstantData_ ) VULKAN_HPP_NOEXCEPT + { + pConstantData = pConstantData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineConstantARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineConstantARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineConstantARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineConstantARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, id, pConstantData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineConstantARM const & ) const = default; +#else + bool operator==( DataGraphPipelineConstantARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( id == rhs.id ) && ( pConstantData == rhs.pConstantData ); +# endif + } + + bool operator!=( DataGraphPipelineConstantARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineConstantARM; + const void * pNext = {}; + uint32_t id = {}; + const void * pConstantData = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineConstantARM; + }; + + // wrapper struct for struct VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM.html + struct DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM + { + using NativeType = VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM( uint32_t dimension_ = {}, + uint32_t zeroCount_ = {}, + uint32_t groupSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dimension{ dimension_ } + , zeroCount{ zeroCount_ } + , groupSize{ groupSize_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM( + DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM( VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & rhs ) + VULKAN_HPP_NOEXCEPT + : DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM( + *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM & + operator=( DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM & + operator=( VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM & setDimension( uint32_t dimension_ ) VULKAN_HPP_NOEXCEPT + { + dimension = dimension_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM & setZeroCount( uint32_t zeroCount_ ) VULKAN_HPP_NOEXCEPT + { + zeroCount = zeroCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM & setGroupSize( uint32_t groupSize_ ) VULKAN_HPP_NOEXCEPT + { + groupSize = groupSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dimension, zeroCount, groupSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dimension == rhs.dimension ) && ( zeroCount == rhs.zeroCount ) && + ( groupSize == rhs.groupSize ); +# endif + } + + bool operator!=( DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + const void * pNext = {}; + uint32_t dimension = {}; + uint32_t zeroCount = {}; + uint32_t groupSize = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineResourceInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineResourceInfoARM.html + struct DataGraphPipelineResourceInfoARM + { + using NativeType = VkDataGraphPipelineResourceInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineResourceInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineResourceInfoARM( uint32_t descriptorSet_ = {}, + uint32_t binding_ = {}, + uint32_t arrayElement_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorSet{ descriptorSet_ } + , binding{ binding_ } + , arrayElement{ arrayElement_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineResourceInfoARM( DataGraphPipelineResourceInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineResourceInfoARM( VkDataGraphPipelineResourceInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineResourceInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineResourceInfoARM & operator=( DataGraphPipelineResourceInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineResourceInfoARM & operator=( VkDataGraphPipelineResourceInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineResourceInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineResourceInfoARM & setDescriptorSet( uint32_t descriptorSet_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSet = descriptorSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineResourceInfoARM & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineResourceInfoARM & setArrayElement( uint32_t arrayElement_ ) VULKAN_HPP_NOEXCEPT + { + arrayElement = arrayElement_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineResourceInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineResourceInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineResourceInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineResourceInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorSet, binding, arrayElement ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineResourceInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineResourceInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSet == rhs.descriptorSet ) && ( binding == rhs.binding ) && + ( arrayElement == rhs.arrayElement ); +# endif + } + + bool operator!=( DataGraphPipelineResourceInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineResourceInfoARM; + const void * pNext = {}; + uint32_t descriptorSet = {}; + uint32_t binding = {}; + uint32_t arrayElement = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineResourceInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineCreateInfoARM.html + struct DataGraphPipelineCreateInfoARM + { + using NativeType = VkDataGraphPipelineCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineCreateInfoARM( VULKAN_HPP_NAMESPACE::PipelineCreateFlags2KHR flags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + uint32_t resourceInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::DataGraphPipelineResourceInfoARM * pResourceInfos_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , layout{ layout_ } + , resourceInfoCount{ resourceInfoCount_ } + , pResourceInfos{ pResourceInfos_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineCreateInfoARM( DataGraphPipelineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineCreateInfoARM( VkDataGraphPipelineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphPipelineCreateInfoARM( + VULKAN_HPP_NAMESPACE::PipelineCreateFlags2KHR flags_, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resourceInfos_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , layout( layout_ ) + , resourceInfoCount( static_cast( resourceInfos_.size() ) ) + , pResourceInfos( resourceInfos_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DataGraphPipelineCreateInfoARM & operator=( DataGraphPipelineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineCreateInfoARM & operator=( VkDataGraphPipelineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCreateInfoARM & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags2KHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCreateInfoARM & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCreateInfoARM & setResourceInfoCount( uint32_t resourceInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + resourceInfoCount = resourceInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineCreateInfoARM & + setPResourceInfos( const VULKAN_HPP_NAMESPACE::DataGraphPipelineResourceInfoARM * pResourceInfos_ ) VULKAN_HPP_NOEXCEPT + { + pResourceInfos = pResourceInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphPipelineCreateInfoARM & setResourceInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resourceInfos_ ) VULKAN_HPP_NOEXCEPT + { + resourceInfoCount = static_cast( resourceInfos_.size() ); + pResourceInfos = resourceInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, layout, resourceInfoCount, pResourceInfos ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineCreateInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( layout == rhs.layout ) && + ( resourceInfoCount == rhs.resourceInfoCount ) && ( pResourceInfos == rhs.pResourceInfos ); +# endif + } + + bool operator!=( DataGraphPipelineCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineCreateInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags2KHR flags = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + uint32_t resourceInfoCount = {}; + const VULKAN_HPP_NAMESPACE::DataGraphPipelineResourceInfoARM * pResourceInfos = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineCreateInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineDispatchInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineDispatchInfoARM.html + struct DataGraphPipelineDispatchInfoARM + { + using NativeType = VkDataGraphPipelineDispatchInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineDispatchInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineDispatchInfoARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchFlagsARM flags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineDispatchInfoARM( DataGraphPipelineDispatchInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineDispatchInfoARM( VkDataGraphPipelineDispatchInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineDispatchInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineDispatchInfoARM & operator=( DataGraphPipelineDispatchInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineDispatchInfoARM & operator=( VkDataGraphPipelineDispatchInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineDispatchInfoARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineDispatchInfoARM & setFlags( VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchFlagsARM flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineDispatchInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineDispatchInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineDispatchInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineDispatchInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineDispatchInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineDispatchInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( DataGraphPipelineDispatchInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineDispatchInfoARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineDispatchFlagsARM flags = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineDispatchInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineIdentifierCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineIdentifierCreateInfoARM.html + struct DataGraphPipelineIdentifierCreateInfoARM + { + using NativeType = VkDataGraphPipelineIdentifierCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineIdentifierCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineIdentifierCreateInfoARM( uint32_t identifierSize_ = {}, + const uint8_t * pIdentifier_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , identifierSize{ identifierSize_ } + , pIdentifier{ pIdentifier_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineIdentifierCreateInfoARM( DataGraphPipelineIdentifierCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineIdentifierCreateInfoARM( VkDataGraphPipelineIdentifierCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineIdentifierCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphPipelineIdentifierCreateInfoARM( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & identifier_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), identifierSize( static_cast( identifier_.size() ) ), pIdentifier( identifier_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DataGraphPipelineIdentifierCreateInfoARM & operator=( DataGraphPipelineIdentifierCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineIdentifierCreateInfoARM & operator=( VkDataGraphPipelineIdentifierCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineIdentifierCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineIdentifierCreateInfoARM & setIdentifierSize( uint32_t identifierSize_ ) VULKAN_HPP_NOEXCEPT + { + identifierSize = identifierSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineIdentifierCreateInfoARM & setPIdentifier( const uint8_t * pIdentifier_ ) VULKAN_HPP_NOEXCEPT + { + pIdentifier = pIdentifier_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphPipelineIdentifierCreateInfoARM & + setIdentifier( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & identifier_ ) VULKAN_HPP_NOEXCEPT + { + identifierSize = static_cast( identifier_.size() ); + pIdentifier = identifier_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineIdentifierCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineIdentifierCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineIdentifierCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineIdentifierCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, identifierSize, pIdentifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineIdentifierCreateInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineIdentifierCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( identifierSize == rhs.identifierSize ) && ( pIdentifier == rhs.pIdentifier ); +# endif + } + + bool operator!=( DataGraphPipelineIdentifierCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineIdentifierCreateInfoARM; + const void * pNext = {}; + uint32_t identifierSize = {}; + const uint8_t * pIdentifier = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineIdentifierCreateInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineInfoARM.html + struct DataGraphPipelineInfoARM + { + using NativeType = VkDataGraphPipelineInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineInfoARM( VULKAN_HPP_NAMESPACE::Pipeline dataGraphPipeline_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dataGraphPipeline{ dataGraphPipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineInfoARM( DataGraphPipelineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineInfoARM( VkDataGraphPipelineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineInfoARM & operator=( DataGraphPipelineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineInfoARM & operator=( VkDataGraphPipelineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineInfoARM & setDataGraphPipeline( VULKAN_HPP_NAMESPACE::Pipeline dataGraphPipeline_ ) VULKAN_HPP_NOEXCEPT + { + dataGraphPipeline = dataGraphPipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dataGraphPipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataGraphPipeline == rhs.dataGraphPipeline ); +# endif + } + + bool operator!=( DataGraphPipelineInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Pipeline dataGraphPipeline = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelinePropertyQueryResultARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelinePropertyQueryResultARM.html + struct DataGraphPipelinePropertyQueryResultARM + { + using NativeType = VkDataGraphPipelinePropertyQueryResultARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelinePropertyQueryResultARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelinePropertyQueryResultARM( + VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM property_ = VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM::eCreationLog, + VULKAN_HPP_NAMESPACE::Bool32 isText_ = {}, + size_t dataSize_ = {}, + void * pData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , property{ property_ } + , isText{ isText_ } + , dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelinePropertyQueryResultARM( DataGraphPipelinePropertyQueryResultARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelinePropertyQueryResultARM( VkDataGraphPipelinePropertyQueryResultARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelinePropertyQueryResultARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + DataGraphPipelinePropertyQueryResultARM( VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM property_, + VULKAN_HPP_NAMESPACE::Bool32 isText_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), property( property_ ), isText( isText_ ), dataSize( data_.size() * sizeof( T ) ), pData( data_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DataGraphPipelinePropertyQueryResultARM & operator=( DataGraphPipelinePropertyQueryResultARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelinePropertyQueryResultARM & operator=( VkDataGraphPipelinePropertyQueryResultARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelinePropertyQueryResultARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelinePropertyQueryResultARM & + setProperty( VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM property_ ) VULKAN_HPP_NOEXCEPT + { + property = property_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelinePropertyQueryResultARM & setIsText( VULKAN_HPP_NAMESPACE::Bool32 isText_ ) VULKAN_HPP_NOEXCEPT + { + isText = isText_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelinePropertyQueryResultARM & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = dataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelinePropertyQueryResultARM & setPData( void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + DataGraphPipelinePropertyQueryResultARM & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = data_.size() * sizeof( T ); + pData = data_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelinePropertyQueryResultARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelinePropertyQueryResultARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelinePropertyQueryResultARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelinePropertyQueryResultARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, property, isText, dataSize, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelinePropertyQueryResultARM const & ) const = default; +#else + bool operator==( DataGraphPipelinePropertyQueryResultARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( property == rhs.property ) && ( isText == rhs.isText ) && ( dataSize == rhs.dataSize ) && + ( pData == rhs.pData ); +# endif + } + + bool operator!=( DataGraphPipelinePropertyQueryResultARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelinePropertyQueryResultARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM property = VULKAN_HPP_NAMESPACE::DataGraphPipelinePropertyARM::eCreationLog; + VULKAN_HPP_NAMESPACE::Bool32 isText = {}; + size_t dataSize = {}; + void * pData = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelinePropertyQueryResultARM; + }; + + // wrapper struct for struct VkDataGraphPipelineSessionBindPointRequirementARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionBindPointRequirementARM.html + struct DataGraphPipelineSessionBindPointRequirementARM + { + using NativeType = VkDataGraphPipelineSessionBindPointRequirementARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineSessionBindPointRequirementARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineSessionBindPointRequirementARM( + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint_ = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM::eTransient, + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointTypeARM bindPointType_ = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointTypeARM::eMemory, + uint32_t numObjects_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , bindPoint{ bindPoint_ } + , bindPointType{ bindPointType_ } + , numObjects{ numObjects_ } + { + } + + VULKAN_HPP_CONSTEXPR + DataGraphPipelineSessionBindPointRequirementARM( DataGraphPipelineSessionBindPointRequirementARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineSessionBindPointRequirementARM( VkDataGraphPipelineSessionBindPointRequirementARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineSessionBindPointRequirementARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineSessionBindPointRequirementARM & operator=( DataGraphPipelineSessionBindPointRequirementARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineSessionBindPointRequirementARM & operator=( VkDataGraphPipelineSessionBindPointRequirementARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionBindPointRequirementARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionBindPointRequirementARM & + setBindPoint( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint_ ) VULKAN_HPP_NOEXCEPT + { + bindPoint = bindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionBindPointRequirementARM & + setBindPointType( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointTypeARM bindPointType_ ) VULKAN_HPP_NOEXCEPT + { + bindPointType = bindPointType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionBindPointRequirementARM & setNumObjects( uint32_t numObjects_ ) VULKAN_HPP_NOEXCEPT + { + numObjects = numObjects_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineSessionBindPointRequirementARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionBindPointRequirementARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionBindPointRequirementARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionBindPointRequirementARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, bindPoint, bindPointType, numObjects ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineSessionBindPointRequirementARM const & ) const = default; +#else + bool operator==( DataGraphPipelineSessionBindPointRequirementARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bindPoint == rhs.bindPoint ) && ( bindPointType == rhs.bindPointType ) && + ( numObjects == rhs.numObjects ); +# endif + } + + bool operator!=( DataGraphPipelineSessionBindPointRequirementARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineSessionBindPointRequirementARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM::eTransient; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointTypeARM bindPointType = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointTypeARM::eMemory; + uint32_t numObjects = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineSessionBindPointRequirementARM; + }; + + // wrapper struct for struct VkDataGraphPipelineSessionBindPointRequirementsInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionBindPointRequirementsInfoARM.html + struct DataGraphPipelineSessionBindPointRequirementsInfoARM + { + using NativeType = VkDataGraphPipelineSessionBindPointRequirementsInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineSessionBindPointRequirementsInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineSessionBindPointRequirementsInfoARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , session{ session_ } + { + } + + VULKAN_HPP_CONSTEXPR + DataGraphPipelineSessionBindPointRequirementsInfoARM( DataGraphPipelineSessionBindPointRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineSessionBindPointRequirementsInfoARM( VkDataGraphPipelineSessionBindPointRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineSessionBindPointRequirementsInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineSessionBindPointRequirementsInfoARM & + operator=( DataGraphPipelineSessionBindPointRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineSessionBindPointRequirementsInfoARM & operator=( VkDataGraphPipelineSessionBindPointRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionBindPointRequirementsInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionBindPointRequirementsInfoARM & + setSession( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session_ ) VULKAN_HPP_NOEXCEPT + { + session = session_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineSessionBindPointRequirementsInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionBindPointRequirementsInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionBindPointRequirementsInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionBindPointRequirementsInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, session ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineSessionBindPointRequirementsInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineSessionBindPointRequirementsInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( session == rhs.session ); +# endif + } + + bool operator!=( DataGraphPipelineSessionBindPointRequirementsInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineSessionBindPointRequirementsInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineSessionBindPointRequirementsInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineSessionCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionCreateInfoARM.html + struct DataGraphPipelineSessionCreateInfoARM + { + using NativeType = VkDataGraphPipelineSessionCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineSessionCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineSessionCreateInfoARM( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateFlagsARM flags_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline dataGraphPipeline_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , dataGraphPipeline{ dataGraphPipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineSessionCreateInfoARM( DataGraphPipelineSessionCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineSessionCreateInfoARM( VkDataGraphPipelineSessionCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineSessionCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineSessionCreateInfoARM & operator=( DataGraphPipelineSessionCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineSessionCreateInfoARM & operator=( VkDataGraphPipelineSessionCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionCreateInfoARM & + setFlags( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateFlagsARM flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionCreateInfoARM & + setDataGraphPipeline( VULKAN_HPP_NAMESPACE::Pipeline dataGraphPipeline_ ) VULKAN_HPP_NOEXCEPT + { + dataGraphPipeline = dataGraphPipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineSessionCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, dataGraphPipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineSessionCreateInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineSessionCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dataGraphPipeline == rhs.dataGraphPipeline ); +# endif + } + + bool operator!=( DataGraphPipelineSessionCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineSessionCreateInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionCreateFlagsARM flags = {}; + VULKAN_HPP_NAMESPACE::Pipeline dataGraphPipeline = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineSessionCreateInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineSessionMemoryRequirementsInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineSessionMemoryRequirementsInfoARM.html + struct DataGraphPipelineSessionMemoryRequirementsInfoARM + { + using NativeType = VkDataGraphPipelineSessionMemoryRequirementsInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineSessionMemoryRequirementsInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineSessionMemoryRequirementsInfoARM( + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session_ = {}, + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint_ = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM::eTransient, + uint32_t objectIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , session{ session_ } + , bindPoint{ bindPoint_ } + , objectIndex{ objectIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR + DataGraphPipelineSessionMemoryRequirementsInfoARM( DataGraphPipelineSessionMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineSessionMemoryRequirementsInfoARM( VkDataGraphPipelineSessionMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineSessionMemoryRequirementsInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DataGraphPipelineSessionMemoryRequirementsInfoARM & + operator=( DataGraphPipelineSessionMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineSessionMemoryRequirementsInfoARM & operator=( VkDataGraphPipelineSessionMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionMemoryRequirementsInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionMemoryRequirementsInfoARM & + setSession( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session_ ) VULKAN_HPP_NOEXCEPT + { + session = session_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionMemoryRequirementsInfoARM & + setBindPoint( VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint_ ) VULKAN_HPP_NOEXCEPT + { + bindPoint = bindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineSessionMemoryRequirementsInfoARM & setObjectIndex( uint32_t objectIndex_ ) VULKAN_HPP_NOEXCEPT + { + objectIndex = objectIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineSessionMemoryRequirementsInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionMemoryRequirementsInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionMemoryRequirementsInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineSessionMemoryRequirementsInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, session, bindPoint, objectIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphPipelineSessionMemoryRequirementsInfoARM const & ) const = default; +#else + bool operator==( DataGraphPipelineSessionMemoryRequirementsInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( session == rhs.session ) && ( bindPoint == rhs.bindPoint ) && + ( objectIndex == rhs.objectIndex ); +# endif + } + + bool operator!=( DataGraphPipelineSessionMemoryRequirementsInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineSessionMemoryRequirementsInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionARM session = {}; + VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM bindPoint = VULKAN_HPP_NAMESPACE::DataGraphPipelineSessionBindPointARM::eTransient; + uint32_t objectIndex = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineSessionMemoryRequirementsInfoARM; + }; + + // wrapper struct for struct VkDataGraphPipelineShaderModuleCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphPipelineShaderModuleCreateInfoARM.html + struct DataGraphPipelineShaderModuleCreateInfoARM + { + using NativeType = VkDataGraphPipelineShaderModuleCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphPipelineShaderModuleCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphPipelineShaderModuleCreateInfoARM( VULKAN_HPP_NAMESPACE::ShaderModule module_ = {}, + const char * pName_ = {}, + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ = {}, + uint32_t constantCount_ = {}, + const VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantARM * pConstants_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , module{ module_ } + , pName{ pName_ } + , pSpecializationInfo{ pSpecializationInfo_ } + , constantCount{ constantCount_ } + , pConstants{ pConstants_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphPipelineShaderModuleCreateInfoARM( DataGraphPipelineShaderModuleCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphPipelineShaderModuleCreateInfoARM( VkDataGraphPipelineShaderModuleCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphPipelineShaderModuleCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphPipelineShaderModuleCreateInfoARM( + VULKAN_HPP_NAMESPACE::ShaderModule module_, + const char * pName_, + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & constants_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , module( module_ ) + , pName( pName_ ) + , pSpecializationInfo( pSpecializationInfo_ ) + , constantCount( static_cast( constants_.size() ) ) + , pConstants( constants_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DataGraphPipelineShaderModuleCreateInfoARM & operator=( DataGraphPipelineShaderModuleCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphPipelineShaderModuleCreateInfoARM & operator=( VkDataGraphPipelineShaderModuleCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineShaderModuleCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineShaderModuleCreateInfoARM & setModule( VULKAN_HPP_NAMESPACE::ShaderModule module_ ) VULKAN_HPP_NOEXCEPT + { + module = module_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineShaderModuleCreateInfoARM & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT + { + pName = pName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineShaderModuleCreateInfoARM & + setPSpecializationInfo( const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ ) VULKAN_HPP_NOEXCEPT + { + pSpecializationInfo = pSpecializationInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineShaderModuleCreateInfoARM & setConstantCount( uint32_t constantCount_ ) VULKAN_HPP_NOEXCEPT + { + constantCount = constantCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphPipelineShaderModuleCreateInfoARM & + setPConstants( const VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantARM * pConstants_ ) VULKAN_HPP_NOEXCEPT + { + pConstants = pConstants_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphPipelineShaderModuleCreateInfoARM & setConstants( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & constants_ ) VULKAN_HPP_NOEXCEPT + { + constantCount = static_cast( constants_.size() ); + pConstants = constants_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphPipelineShaderModuleCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineShaderModuleCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphPipelineShaderModuleCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphPipelineShaderModuleCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, module, pName, pSpecializationInfo, constantCount, pConstants ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DataGraphPipelineShaderModuleCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = module <=> rhs.module; cmp != 0 ) + return cmp; + if ( pName != rhs.pName ) + if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = pSpecializationInfo <=> rhs.pSpecializationInfo; cmp != 0 ) + return cmp; + if ( auto cmp = constantCount <=> rhs.constantCount; cmp != 0 ) + return cmp; + if ( auto cmp = pConstants <=> rhs.pConstants; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DataGraphPipelineShaderModuleCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( module == rhs.module ) && + ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ) && ( pSpecializationInfo == rhs.pSpecializationInfo ) && + ( constantCount == rhs.constantCount ) && ( pConstants == rhs.pConstants ); + } + + bool operator!=( DataGraphPipelineShaderModuleCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphPipelineShaderModuleCreateInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderModule module = {}; + const char * pName = {}; + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo = {}; + uint32_t constantCount = {}; + const VULKAN_HPP_NAMESPACE::DataGraphPipelineConstantARM * pConstants = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphPipelineShaderModuleCreateInfoARM; + }; + + // wrapper struct for struct VkPhysicalDeviceDataGraphProcessingEngineARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDataGraphProcessingEngineARM.html + struct PhysicalDeviceDataGraphProcessingEngineARM + { + using NativeType = VkPhysicalDeviceDataGraphProcessingEngineARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDataGraphProcessingEngineARM( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM type_ = + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM::eDefault, + VULKAN_HPP_NAMESPACE::Bool32 isForeign_ = {} ) VULKAN_HPP_NOEXCEPT + : type{ type_ } + , isForeign{ isForeign_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDataGraphProcessingEngineARM( PhysicalDeviceDataGraphProcessingEngineARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDataGraphProcessingEngineARM( VkPhysicalDeviceDataGraphProcessingEngineARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDataGraphProcessingEngineARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDataGraphProcessingEngineARM & operator=( PhysicalDeviceDataGraphProcessingEngineARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDataGraphProcessingEngineARM & operator=( VkPhysicalDeviceDataGraphProcessingEngineARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphProcessingEngineARM & + setType( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphProcessingEngineARM & setIsForeign( VULKAN_HPP_NAMESPACE::Bool32 isForeign_ ) VULKAN_HPP_NOEXCEPT + { + isForeign = isForeign_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDataGraphProcessingEngineARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphProcessingEngineARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphProcessingEngineARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphProcessingEngineARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( type, isForeign ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDataGraphProcessingEngineARM const & ) const = default; +#else + bool operator==( PhysicalDeviceDataGraphProcessingEngineARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( type == rhs.type ) && ( isForeign == rhs.isForeign ); +# endif + } + + bool operator!=( PhysicalDeviceDataGraphProcessingEngineARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM type = VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM::eDefault; + VULKAN_HPP_NAMESPACE::Bool32 isForeign = {}; + }; + + // wrapper struct for struct VkDataGraphProcessingEngineCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDataGraphProcessingEngineCreateInfoARM.html + struct DataGraphProcessingEngineCreateInfoARM + { + using NativeType = VkDataGraphProcessingEngineCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDataGraphProcessingEngineCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DataGraphProcessingEngineCreateInfoARM( uint32_t processingEngineCount_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM * pProcessingEngines_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , processingEngineCount{ processingEngineCount_ } + , pProcessingEngines{ pProcessingEngines_ } + { + } + + VULKAN_HPP_CONSTEXPR DataGraphProcessingEngineCreateInfoARM( DataGraphProcessingEngineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DataGraphProcessingEngineCreateInfoARM( VkDataGraphProcessingEngineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DataGraphProcessingEngineCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphProcessingEngineCreateInfoARM( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & processingEngines_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), processingEngineCount( static_cast( processingEngines_.size() ) ), pProcessingEngines( processingEngines_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DataGraphProcessingEngineCreateInfoARM & operator=( DataGraphProcessingEngineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DataGraphProcessingEngineCreateInfoARM & operator=( VkDataGraphProcessingEngineCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DataGraphProcessingEngineCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphProcessingEngineCreateInfoARM & setProcessingEngineCount( uint32_t processingEngineCount_ ) VULKAN_HPP_NOEXCEPT + { + processingEngineCount = processingEngineCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DataGraphProcessingEngineCreateInfoARM & + setPProcessingEngines( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM * pProcessingEngines_ ) VULKAN_HPP_NOEXCEPT + { + pProcessingEngines = pProcessingEngines_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DataGraphProcessingEngineCreateInfoARM & setProcessingEngines( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & processingEngines_ ) + VULKAN_HPP_NOEXCEPT + { + processingEngineCount = static_cast( processingEngines_.size() ); + pProcessingEngines = processingEngines_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDataGraphProcessingEngineCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphProcessingEngineCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDataGraphProcessingEngineCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDataGraphProcessingEngineCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, processingEngineCount, pProcessingEngines ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DataGraphProcessingEngineCreateInfoARM const & ) const = default; +#else + bool operator==( DataGraphProcessingEngineCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( processingEngineCount == rhs.processingEngineCount ) && + ( pProcessingEngines == rhs.pProcessingEngines ); +# endif + } + + bool operator!=( DataGraphProcessingEngineCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDataGraphProcessingEngineCreateInfoARM; + const void * pNext = {}; + uint32_t processingEngineCount = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM * pProcessingEngines = {}; + }; + + template <> + struct CppType + { + using Type = DataGraphProcessingEngineCreateInfoARM; + }; + + // wrapper struct for struct VkDebugMarkerMarkerInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugMarkerMarkerInfoEXT.html + struct DebugMarkerMarkerInfoEXT + { + using NativeType = VkDebugMarkerMarkerInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerMarkerInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + DebugMarkerMarkerInfoEXT( const char * pMarkerName_ = {}, std::array const & color_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pMarkerName{ pMarkerName_ } + , color{ color_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT( DebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugMarkerMarkerInfoEXT( VkDebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugMarkerMarkerInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DebugMarkerMarkerInfoEXT & operator=( DebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugMarkerMarkerInfoEXT & operator=( VkDebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setPMarkerName( const char * pMarkerName_ ) VULKAN_HPP_NOEXCEPT + { + pMarkerName = pMarkerName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setColor( std::array color_ ) VULKAN_HPP_NOEXCEPT + { + color = color_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugMarkerMarkerInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugMarkerMarkerInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugMarkerMarkerInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugMarkerMarkerInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pMarkerName, color ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::partial_ordering operator<=>( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( pMarkerName != rhs.pMarkerName ) + if ( auto cmp = strcmp( pMarkerName, rhs.pMarkerName ); cmp != 0 ) + return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater; + if ( auto cmp = color <=> rhs.color; cmp != 0 ) + return cmp; + + return std::partial_ordering::equivalent; + } +#endif + + bool operator==( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ( pMarkerName == rhs.pMarkerName ) || ( strcmp( pMarkerName, rhs.pMarkerName ) == 0 ) ) && + ( color == rhs.color ); + } + + bool operator!=( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerMarkerInfoEXT; + const void * pNext = {}; + const char * pMarkerName = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D color = {}; + }; + + template <> + struct CppType + { + using Type = DebugMarkerMarkerInfoEXT; + }; + + // wrapper struct for struct VkDebugMarkerObjectNameInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugMarkerObjectNameInfoEXT.html + struct DebugMarkerObjectNameInfoEXT + { + using NativeType = VkDebugMarkerObjectNameInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectNameInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DebugMarkerObjectNameInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown, + uint64_t object_ = {}, + const char * pObjectName_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , objectType{ objectType_ } + , object{ object_ } + , pObjectName{ pObjectName_ } + { + } + + VULKAN_HPP_CONSTEXPR DebugMarkerObjectNameInfoEXT( DebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugMarkerObjectNameInfoEXT( VkDebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugMarkerObjectNameInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DebugMarkerObjectNameInfoEXT & operator=( DebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugMarkerObjectNameInfoEXT & operator=( VkDebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ ) VULKAN_HPP_NOEXCEPT + { + objectType = objectType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT + { + object = object_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT + { + pObjectName = pObjectName_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugMarkerObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugMarkerObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugMarkerObjectNameInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugMarkerObjectNameInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, objectType, object, pObjectName ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = objectType <=> rhs.objectType; cmp != 0 ) + return cmp; + if ( auto cmp = object <=> rhs.object; cmp != 0 ) + return cmp; + if ( pObjectName != rhs.pObjectName ) + if ( auto cmp = strcmp( pObjectName, rhs.pObjectName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( object == rhs.object ) && + ( ( pObjectName == rhs.pObjectName ) || ( strcmp( pObjectName, rhs.pObjectName ) == 0 ) ); + } + + bool operator!=( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerObjectNameInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + uint64_t object = {}; + const char * pObjectName = {}; + }; + + template <> + struct CppType + { + using Type = DebugMarkerObjectNameInfoEXT; + }; + + // wrapper struct for struct VkDebugMarkerObjectTagInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugMarkerObjectTagInfoEXT.html + struct DebugMarkerObjectTagInfoEXT + { + using NativeType = VkDebugMarkerObjectTagInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectTagInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DebugMarkerObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown, + uint64_t object_ = {}, + uint64_t tagName_ = {}, + size_t tagSize_ = {}, + const void * pTag_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , objectType{ objectType_ } + , object{ object_ } + , tagName{ tagName_ } + , tagSize{ tagSize_ } + , pTag{ pTag_ } + { + } + + VULKAN_HPP_CONSTEXPR DebugMarkerObjectTagInfoEXT( DebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugMarkerObjectTagInfoEXT( VkDebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugMarkerObjectTagInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + DebugMarkerObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_, + uint64_t object_, + uint64_t tagName_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), objectType( objectType_ ), object( object_ ), tagName( tagName_ ), tagSize( tag_.size() * sizeof( T ) ), pTag( tag_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DebugMarkerObjectTagInfoEXT & operator=( DebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugMarkerObjectTagInfoEXT & operator=( VkDebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ ) VULKAN_HPP_NOEXCEPT + { + objectType = objectType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT + { + object = object_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT + { + tagName = tagName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT + { + tagSize = tagSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT + { + pTag = pTag_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + DebugMarkerObjectTagInfoEXT & setTag( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_ ) VULKAN_HPP_NOEXCEPT + { + tagSize = tag_.size() * sizeof( T ); + pTag = tag_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugMarkerObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugMarkerObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugMarkerObjectTagInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugMarkerObjectTagInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, objectType, object, tagName, tagSize, pTag ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DebugMarkerObjectTagInfoEXT const & ) const = default; +#else + bool operator==( DebugMarkerObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( object == rhs.object ) && ( tagName == rhs.tagName ) && + ( tagSize == rhs.tagSize ) && ( pTag == rhs.pTag ); +# endif + } + + bool operator!=( DebugMarkerObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerObjectTagInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown; + uint64_t object = {}; + uint64_t tagName = {}; + size_t tagSize = {}; + const void * pTag = {}; + }; + + template <> + struct CppType + { + using Type = DebugMarkerObjectTagInfoEXT; + }; + + typedef VULKAN_HPP_NAMESPACE::Bool32( VKAPI_PTR * PFN_DebugReportCallbackEXT )( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags, + VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char * pLayerPrefix, + const char * pMessage, + void * pUserData ); + + // wrapper struct for struct VkDebugReportCallbackCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugReportCallbackCreateInfoEXT.html + struct DebugReportCallbackCreateInfoEXT + { + using NativeType = VkDebugReportCallbackCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugReportCallbackCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DebugReportCallbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::PFN_DebugReportCallbackEXT pfnCallback_ = {}, + void * pUserData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pfnCallback{ pfnCallback_ } + , pUserData{ pUserData_ } + { + } + + VULKAN_HPP_CONSTEXPR DebugReportCallbackCreateInfoEXT( DebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugReportCallbackCreateInfoEXT( VkDebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugReportCallbackCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This constructor is deprecated. Use the one taking function pointer types from the vk-namespace instead." ) + + DebugReportCallbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_, + PFN_vkDebugReportCallbackEXT pfnCallback_, + void * pUserData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : DebugReportCallbackCreateInfoEXT( flags_, reinterpret_cast( pfnCallback_ ), pUserData_, pNext_ ) + { + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif + + DebugReportCallbackCreateInfoEXT & operator=( DebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugReportCallbackCreateInfoEXT & operator=( VkDebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & + setPfnCallback( VULKAN_HPP_NAMESPACE::PFN_DebugReportCallbackEXT pfnCallback_ ) VULKAN_HPP_NOEXCEPT + { + pfnCallback = pfnCallback_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT + { + pUserData = pUserData_; + return *this; + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + DebugReportCallbackCreateInfoEXT & setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnCallback( reinterpret_cast( pfnCallback_ ) ); + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugReportCallbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugReportCallbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugReportCallbackCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugReportCallbackCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pfnCallback, pUserData ); + } +#endif + + bool operator==( DebugReportCallbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +#if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +#else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pfnCallback == rhs.pfnCallback ) && ( pUserData == rhs.pUserData ); +#endif + } + + bool operator!=( DebugReportCallbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugReportCallbackCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::PFN_DebugReportCallbackEXT pfnCallback = {}; + void * pUserData = {}; + }; + + template <> + struct CppType + { + using Type = DebugReportCallbackCreateInfoEXT; + }; + + // wrapper struct for struct VkDebugUtilsLabelEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsLabelEXT.html + struct DebugUtilsLabelEXT + { + using NativeType = VkDebugUtilsLabelEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsLabelEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + DebugUtilsLabelEXT( const char * pLabelName_ = {}, std::array const & color_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pLabelName{ pLabelName_ } + , color{ color_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT( DebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugUtilsLabelEXT( VkDebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DebugUtilsLabelEXT( *reinterpret_cast( &rhs ) ) {} + + DebugUtilsLabelEXT & operator=( DebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugUtilsLabelEXT & operator=( VkDebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setPLabelName( const char * pLabelName_ ) VULKAN_HPP_NOEXCEPT + { + pLabelName = pLabelName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setColor( std::array color_ ) VULKAN_HPP_NOEXCEPT + { + color = color_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugUtilsLabelEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsLabelEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsLabelEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugUtilsLabelEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pLabelName, color ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::partial_ordering operator<=>( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( pLabelName != rhs.pLabelName ) + if ( auto cmp = strcmp( pLabelName, rhs.pLabelName ); cmp != 0 ) + return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater; + if ( auto cmp = color <=> rhs.color; cmp != 0 ) + return cmp; + + return std::partial_ordering::equivalent; + } +#endif + + bool operator==( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ( pLabelName == rhs.pLabelName ) || ( strcmp( pLabelName, rhs.pLabelName ) == 0 ) ) && + ( color == rhs.color ); + } + + bool operator!=( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsLabelEXT; + const void * pNext = {}; + const char * pLabelName = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D color = {}; + }; + + template <> + struct CppType + { + using Type = DebugUtilsLabelEXT; + }; + + // wrapper struct for struct VkDebugUtilsObjectNameInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsObjectNameInfoEXT.html + struct DebugUtilsObjectNameInfoEXT + { + using NativeType = VkDebugUtilsObjectNameInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectNameInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DebugUtilsObjectNameInfoEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_ = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown, + uint64_t objectHandle_ = {}, + const char * pObjectName_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , objectType{ objectType_ } + , objectHandle{ objectHandle_ } + , pObjectName{ pObjectName_ } + { + } + + VULKAN_HPP_CONSTEXPR DebugUtilsObjectNameInfoEXT( DebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugUtilsObjectNameInfoEXT( VkDebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugUtilsObjectNameInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DebugUtilsObjectNameInfoEXT & operator=( DebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugUtilsObjectNameInfoEXT & operator=( VkDebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT + { + objectType = objectType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT + { + objectHandle = objectHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT + { + pObjectName = pObjectName_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugUtilsObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsObjectNameInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugUtilsObjectNameInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, objectType, objectHandle, pObjectName ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = objectType <=> rhs.objectType; cmp != 0 ) + return cmp; + if ( auto cmp = objectHandle <=> rhs.objectHandle; cmp != 0 ) + return cmp; + if ( pObjectName != rhs.pObjectName ) + if ( auto cmp = strcmp( pObjectName, rhs.pObjectName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( objectHandle == rhs.objectHandle ) && + ( ( pObjectName == rhs.pObjectName ) || ( strcmp( pObjectName, rhs.pObjectName ) == 0 ) ); + } + + bool operator!=( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsObjectNameInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown; + uint64_t objectHandle = {}; + const char * pObjectName = {}; + }; + + template <> + struct CppType + { + using Type = DebugUtilsObjectNameInfoEXT; + }; + + // wrapper struct for struct VkDebugUtilsMessengerCallbackDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessengerCallbackDataEXT.html + struct DebugUtilsMessengerCallbackDataEXT + { + using NativeType = VkDebugUtilsMessengerCallbackDataEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsMessengerCallbackDataEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_ = {}, + const char * pMessageIdName_ = {}, + int32_t messageIdNumber_ = {}, + const char * pMessage_ = {}, + uint32_t queueLabelCount_ = {}, + const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels_ = {}, + uint32_t cmdBufLabelCount_ = {}, + const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels_ = {}, + uint32_t objectCount_ = {}, + const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pMessageIdName{ pMessageIdName_ } + , messageIdNumber{ messageIdNumber_ } + , pMessage{ pMessage_ } + , queueLabelCount{ queueLabelCount_ } + , pQueueLabels{ pQueueLabels_ } + , cmdBufLabelCount{ cmdBufLabelCount_ } + , pCmdBufLabels{ pCmdBufLabels_ } + , objectCount{ objectCount_ } + , pObjects{ pObjects_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT( DebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugUtilsMessengerCallbackDataEXT( VkDebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugUtilsMessengerCallbackDataEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DebugUtilsMessengerCallbackDataEXT( + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_, + const char * pMessageIdName_, + int32_t messageIdNumber_, + const char * pMessage_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueLabels_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & cmdBufLabels_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & objects_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , pMessageIdName( pMessageIdName_ ) + , messageIdNumber( messageIdNumber_ ) + , pMessage( pMessage_ ) + , queueLabelCount( static_cast( queueLabels_.size() ) ) + , pQueueLabels( queueLabels_.data() ) + , cmdBufLabelCount( static_cast( cmdBufLabels_.size() ) ) + , pCmdBufLabels( cmdBufLabels_.data() ) + , objectCount( static_cast( objects_.size() ) ) + , pObjects( objects_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DebugUtilsMessengerCallbackDataEXT & operator=( DebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugUtilsMessengerCallbackDataEXT & operator=( VkDebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & + setFlags( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPMessageIdName( const char * pMessageIdName_ ) VULKAN_HPP_NOEXCEPT + { + pMessageIdName = pMessageIdName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setMessageIdNumber( int32_t messageIdNumber_ ) VULKAN_HPP_NOEXCEPT + { + messageIdNumber = messageIdNumber_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPMessage( const char * pMessage_ ) VULKAN_HPP_NOEXCEPT + { + pMessage = pMessage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setQueueLabelCount( uint32_t queueLabelCount_ ) VULKAN_HPP_NOEXCEPT + { + queueLabelCount = queueLabelCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & + setPQueueLabels( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels_ ) VULKAN_HPP_NOEXCEPT + { + pQueueLabels = pQueueLabels_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DebugUtilsMessengerCallbackDataEXT & + setQueueLabels( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueLabels_ ) VULKAN_HPP_NOEXCEPT + { + queueLabelCount = static_cast( queueLabels_.size() ); + pQueueLabels = queueLabels_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setCmdBufLabelCount( uint32_t cmdBufLabelCount_ ) VULKAN_HPP_NOEXCEPT + { + cmdBufLabelCount = cmdBufLabelCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & + setPCmdBufLabels( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels_ ) VULKAN_HPP_NOEXCEPT + { + pCmdBufLabels = pCmdBufLabels_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DebugUtilsMessengerCallbackDataEXT & + setCmdBufLabels( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & cmdBufLabels_ ) VULKAN_HPP_NOEXCEPT + { + cmdBufLabelCount = static_cast( cmdBufLabels_.size() ); + pCmdBufLabels = cmdBufLabels_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setObjectCount( uint32_t objectCount_ ) VULKAN_HPP_NOEXCEPT + { + objectCount = objectCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & + setPObjects( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects_ ) VULKAN_HPP_NOEXCEPT + { + pObjects = pObjects_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DebugUtilsMessengerCallbackDataEXT & + setObjects( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & objects_ ) VULKAN_HPP_NOEXCEPT + { + objectCount = static_cast( objects_.size() ); + pObjects = objects_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugUtilsMessengerCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsMessengerCallbackDataEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsMessengerCallbackDataEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugUtilsMessengerCallbackDataEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, flags, pMessageIdName, messageIdNumber, pMessage, queueLabelCount, pQueueLabels, cmdBufLabelCount, pCmdBufLabels, objectCount, pObjects ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( pMessageIdName != rhs.pMessageIdName ) + if ( auto cmp = strcmp( pMessageIdName, rhs.pMessageIdName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = messageIdNumber <=> rhs.messageIdNumber; cmp != 0 ) + return cmp; + if ( pMessage != rhs.pMessage ) + if ( auto cmp = strcmp( pMessage, rhs.pMessage ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = queueLabelCount <=> rhs.queueLabelCount; cmp != 0 ) + return cmp; + if ( auto cmp = pQueueLabels <=> rhs.pQueueLabels; cmp != 0 ) + return cmp; + if ( auto cmp = cmdBufLabelCount <=> rhs.cmdBufLabelCount; cmp != 0 ) + return cmp; + if ( auto cmp = pCmdBufLabels <=> rhs.pCmdBufLabels; cmp != 0 ) + return cmp; + if ( auto cmp = objectCount <=> rhs.objectCount; cmp != 0 ) + return cmp; + if ( auto cmp = pObjects <=> rhs.pObjects; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( ( pMessageIdName == rhs.pMessageIdName ) || ( strcmp( pMessageIdName, rhs.pMessageIdName ) == 0 ) ) && + ( messageIdNumber == rhs.messageIdNumber ) && ( ( pMessage == rhs.pMessage ) || ( strcmp( pMessage, rhs.pMessage ) == 0 ) ) && + ( queueLabelCount == rhs.queueLabelCount ) && ( pQueueLabels == rhs.pQueueLabels ) && ( cmdBufLabelCount == rhs.cmdBufLabelCount ) && + ( pCmdBufLabels == rhs.pCmdBufLabels ) && ( objectCount == rhs.objectCount ) && ( pObjects == rhs.pObjects ); + } + + bool operator!=( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsMessengerCallbackDataEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags = {}; + const char * pMessageIdName = {}; + int32_t messageIdNumber = {}; + const char * pMessage = {}; + uint32_t queueLabelCount = {}; + const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels = {}; + uint32_t cmdBufLabelCount = {}; + const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels = {}; + uint32_t objectCount = {}; + const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects = {}; + }; + + template <> + struct CppType + { + using Type = DebugUtilsMessengerCallbackDataEXT; + }; + + typedef VULKAN_HPP_NAMESPACE::Bool32( VKAPI_PTR * PFN_DebugUtilsMessengerCallbackEXT )( + VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes, + const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT * pCallbackData, + void * pUserData ); + + // wrapper struct for struct VkDebugUtilsMessengerCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsMessengerCreateInfoEXT.html + struct DebugUtilsMessengerCreateInfoEXT + { + using NativeType = VkDebugUtilsMessengerCreateInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsMessengerCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DebugUtilsMessengerCreateInfoEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity_ = {}, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType_ = {}, + VULKAN_HPP_NAMESPACE::PFN_DebugUtilsMessengerCallbackEXT pfnUserCallback_ = {}, + void * pUserData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , messageSeverity{ messageSeverity_ } + , messageType{ messageType_ } + , pfnUserCallback{ pfnUserCallback_ } + , pUserData{ pUserData_ } + { + } + + VULKAN_HPP_CONSTEXPR DebugUtilsMessengerCreateInfoEXT( DebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugUtilsMessengerCreateInfoEXT( VkDebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugUtilsMessengerCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This constructor is deprecated. Use the one taking function pointer types from the vk-namespace instead." ) + + DebugUtilsMessengerCreateInfoEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity_, + VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType_, + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback_, + void * pUserData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : DebugUtilsMessengerCreateInfoEXT( flags_, + messageSeverity_, + messageType_, + reinterpret_cast( pfnUserCallback_ ), + pUserData_, + pNext_ ) + { + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif + + DebugUtilsMessengerCreateInfoEXT & operator=( DebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugUtilsMessengerCreateInfoEXT & operator=( VkDebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & + setMessageSeverity( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity_ ) VULKAN_HPP_NOEXCEPT + { + messageSeverity = messageSeverity_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & + setMessageType( VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType_ ) VULKAN_HPP_NOEXCEPT + { + messageType = messageType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & + setPfnUserCallback( VULKAN_HPP_NAMESPACE::PFN_DebugUtilsMessengerCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT + { + pfnUserCallback = pfnUserCallback_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT + { + pUserData = pUserData_; + return *this; + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + DebugUtilsMessengerCreateInfoEXT & setPfnUserCallback( PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnUserCallback( reinterpret_cast( pfnUserCallback_ ) ); + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugUtilsMessengerCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsMessengerCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsMessengerCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugUtilsMessengerCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, messageSeverity, messageType, pfnUserCallback, pUserData ); + } +#endif + + bool operator==( DebugUtilsMessengerCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +#if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +#else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( messageSeverity == rhs.messageSeverity ) && + ( messageType == rhs.messageType ) && ( pfnUserCallback == rhs.pfnUserCallback ) && ( pUserData == rhs.pUserData ); +#endif + } + + bool operator!=( DebugUtilsMessengerCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsMessengerCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity = {}; + VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType = {}; + VULKAN_HPP_NAMESPACE::PFN_DebugUtilsMessengerCallbackEXT pfnUserCallback = {}; + void * pUserData = {}; + }; + + template <> + struct CppType + { + using Type = DebugUtilsMessengerCreateInfoEXT; + }; + + // wrapper struct for struct VkDebugUtilsObjectTagInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDebugUtilsObjectTagInfoEXT.html + struct DebugUtilsObjectTagInfoEXT + { + using NativeType = VkDebugUtilsObjectTagInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectTagInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DebugUtilsObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_ = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown, + uint64_t objectHandle_ = {}, + uint64_t tagName_ = {}, + size_t tagSize_ = {}, + const void * pTag_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , objectType{ objectType_ } + , objectHandle{ objectHandle_ } + , tagName{ tagName_ } + , tagSize{ tagSize_ } + , pTag{ pTag_ } + { + } + + VULKAN_HPP_CONSTEXPR DebugUtilsObjectTagInfoEXT( DebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DebugUtilsObjectTagInfoEXT( VkDebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DebugUtilsObjectTagInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + DebugUtilsObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_, + uint64_t objectHandle_, + uint64_t tagName_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , objectType( objectType_ ) + , objectHandle( objectHandle_ ) + , tagName( tagName_ ) + , tagSize( tag_.size() * sizeof( T ) ) + , pTag( tag_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DebugUtilsObjectTagInfoEXT & operator=( DebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DebugUtilsObjectTagInfoEXT & operator=( VkDebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT + { + objectType = objectType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT + { + objectHandle = objectHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT + { + tagName = tagName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT + { + tagSize = tagSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT + { + pTag = pTag_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + DebugUtilsObjectTagInfoEXT & setTag( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_ ) VULKAN_HPP_NOEXCEPT + { + tagSize = tag_.size() * sizeof( T ); + pTag = tag_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDebugUtilsObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDebugUtilsObjectTagInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDebugUtilsObjectTagInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, objectType, objectHandle, tagName, tagSize, pTag ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DebugUtilsObjectTagInfoEXT const & ) const = default; +#else + bool operator==( DebugUtilsObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) && ( objectHandle == rhs.objectHandle ) && + ( tagName == rhs.tagName ) && ( tagSize == rhs.tagSize ) && ( pTag == rhs.pTag ); +# endif + } + + bool operator!=( DebugUtilsObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsObjectTagInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown; + uint64_t objectHandle = {}; + uint64_t tagName = {}; + size_t tagSize = {}; + const void * pTag = {}; + }; + + template <> + struct CppType + { + using Type = DebugUtilsObjectTagInfoEXT; + }; + + // wrapper struct for struct VkDecompressMemoryRegionNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDecompressMemoryRegionNV.html + struct DecompressMemoryRegionNV + { + using NativeType = VkDecompressMemoryRegionNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DecompressMemoryRegionNV( VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress dstAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize compressedSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize decompressedSize_ = {}, + VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagsNV decompressionMethod_ = {} ) VULKAN_HPP_NOEXCEPT + : srcAddress{ srcAddress_ } + , dstAddress{ dstAddress_ } + , compressedSize{ compressedSize_ } + , decompressedSize{ decompressedSize_ } + , decompressionMethod{ decompressionMethod_ } + { + } + + VULKAN_HPP_CONSTEXPR DecompressMemoryRegionNV( DecompressMemoryRegionNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DecompressMemoryRegionNV( VkDecompressMemoryRegionNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DecompressMemoryRegionNV( *reinterpret_cast( &rhs ) ) + { + } + + DecompressMemoryRegionNV & operator=( DecompressMemoryRegionNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DecompressMemoryRegionNV & operator=( VkDecompressMemoryRegionNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DecompressMemoryRegionNV & setSrcAddress( VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress_ ) VULKAN_HPP_NOEXCEPT + { + srcAddress = srcAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DecompressMemoryRegionNV & setDstAddress( VULKAN_HPP_NAMESPACE::DeviceAddress dstAddress_ ) VULKAN_HPP_NOEXCEPT + { + dstAddress = dstAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DecompressMemoryRegionNV & setCompressedSize( VULKAN_HPP_NAMESPACE::DeviceSize compressedSize_ ) VULKAN_HPP_NOEXCEPT + { + compressedSize = compressedSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DecompressMemoryRegionNV & setDecompressedSize( VULKAN_HPP_NAMESPACE::DeviceSize decompressedSize_ ) VULKAN_HPP_NOEXCEPT + { + decompressedSize = decompressedSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DecompressMemoryRegionNV & + setDecompressionMethod( VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagsNV decompressionMethod_ ) VULKAN_HPP_NOEXCEPT + { + decompressionMethod = decompressionMethod_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDecompressMemoryRegionNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDecompressMemoryRegionNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDecompressMemoryRegionNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDecompressMemoryRegionNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcAddress, dstAddress, compressedSize, decompressedSize, decompressionMethod ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DecompressMemoryRegionNV const & ) const = default; +#else + bool operator==( DecompressMemoryRegionNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcAddress == rhs.srcAddress ) && ( dstAddress == rhs.dstAddress ) && ( compressedSize == rhs.compressedSize ) && + ( decompressedSize == rhs.decompressedSize ) && ( decompressionMethod == rhs.decompressionMethod ); +# endif + } + + bool operator!=( DecompressMemoryRegionNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress srcAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress dstAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize compressedSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize decompressedSize = {}; + VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagsNV decompressionMethod = {}; + }; + + // wrapper struct for struct VkDedicatedAllocationBufferCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDedicatedAllocationBufferCreateInfoNV.html + struct DedicatedAllocationBufferCreateInfoNV + { + using NativeType = VkDedicatedAllocationBufferCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDedicatedAllocationBufferCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DedicatedAllocationBufferCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dedicatedAllocation{ dedicatedAllocation_ } + { + } + + VULKAN_HPP_CONSTEXPR DedicatedAllocationBufferCreateInfoNV( DedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DedicatedAllocationBufferCreateInfoNV( VkDedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DedicatedAllocationBufferCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + DedicatedAllocationBufferCreateInfoNV & operator=( DedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DedicatedAllocationBufferCreateInfoNV & operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV & + setDedicatedAllocation( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ ) VULKAN_HPP_NOEXCEPT + { + dedicatedAllocation = dedicatedAllocation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDedicatedAllocationBufferCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDedicatedAllocationBufferCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDedicatedAllocationBufferCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDedicatedAllocationBufferCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dedicatedAllocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DedicatedAllocationBufferCreateInfoNV const & ) const = default; +#else + bool operator==( DedicatedAllocationBufferCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocation == rhs.dedicatedAllocation ); +# endif + } + + bool operator!=( DedicatedAllocationBufferCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDedicatedAllocationBufferCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation = {}; + }; + + template <> + struct CppType + { + using Type = DedicatedAllocationBufferCreateInfoNV; + }; + + // wrapper struct for struct VkDedicatedAllocationImageCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDedicatedAllocationImageCreateInfoNV.html + struct DedicatedAllocationImageCreateInfoNV + { + using NativeType = VkDedicatedAllocationImageCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDedicatedAllocationImageCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DedicatedAllocationImageCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dedicatedAllocation{ dedicatedAllocation_ } + { + } + + VULKAN_HPP_CONSTEXPR DedicatedAllocationImageCreateInfoNV( DedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DedicatedAllocationImageCreateInfoNV( VkDedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DedicatedAllocationImageCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + DedicatedAllocationImageCreateInfoNV & operator=( DedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DedicatedAllocationImageCreateInfoNV & operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV & + setDedicatedAllocation( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ ) VULKAN_HPP_NOEXCEPT + { + dedicatedAllocation = dedicatedAllocation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDedicatedAllocationImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDedicatedAllocationImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDedicatedAllocationImageCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDedicatedAllocationImageCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dedicatedAllocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DedicatedAllocationImageCreateInfoNV const & ) const = default; +#else + bool operator==( DedicatedAllocationImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocation == rhs.dedicatedAllocation ); +# endif + } + + bool operator!=( DedicatedAllocationImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDedicatedAllocationImageCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation = {}; + }; + + template <> + struct CppType + { + using Type = DedicatedAllocationImageCreateInfoNV; + }; + + // wrapper struct for struct VkDedicatedAllocationMemoryAllocateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDedicatedAllocationMemoryAllocateInfoNV.html + struct DedicatedAllocationMemoryAllocateInfoNV + { + using NativeType = VkDedicatedAllocationMemoryAllocateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDedicatedAllocationMemoryAllocateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DedicatedAllocationMemoryAllocateInfoNV( VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR DedicatedAllocationMemoryAllocateInfoNV( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DedicatedAllocationMemoryAllocateInfoNV( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DedicatedAllocationMemoryAllocateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + DedicatedAllocationMemoryAllocateInfoNV & operator=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DedicatedAllocationMemoryAllocateInfoNV & operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDedicatedAllocationMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDedicatedAllocationMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDedicatedAllocationMemoryAllocateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDedicatedAllocationMemoryAllocateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image, buffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DedicatedAllocationMemoryAllocateInfoNV const & ) const = default; +#else + bool operator==( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDedicatedAllocationMemoryAllocateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + }; + + template <> + struct CppType + { + using Type = DedicatedAllocationMemoryAllocateInfoNV; + }; + + // wrapper struct for struct VkMemoryBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryBarrier2.html + struct MemoryBarrier2 + { + using NativeType = VkMemoryBarrier2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcStageMask{ srcStageMask_ } + , srcAccessMask{ srcAccessMask_ } + , dstStageMask{ dstStageMask_ } + , dstAccessMask{ dstAccessMask_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryBarrier2( MemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryBarrier2( VkMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryBarrier2( *reinterpret_cast( &rhs ) ) {} + + MemoryBarrier2 & operator=( MemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryBarrier2 & operator=( VkMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT + { + srcStageMask = srcStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + dstStageMask = dstStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryBarrier2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryBarrier2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcStageMask, srcAccessMask, dstStageMask, dstAccessMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryBarrier2 const & ) const = default; +#else + bool operator==( MemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && + ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ); +# endif + } + + bool operator!=( MemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrier2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; + }; + + template <> + struct CppType + { + using Type = MemoryBarrier2; + }; + + using MemoryBarrier2KHR = MemoryBarrier2; + + // wrapper struct for struct VkImageSubresourceRange, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageSubresourceRange.html + struct ImageSubresourceRange + { + using NativeType = VkImageSubresourceRange; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageSubresourceRange( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, + uint32_t baseMipLevel_ = {}, + uint32_t levelCount_ = {}, + uint32_t baseArrayLayer_ = {}, + uint32_t layerCount_ = {} ) VULKAN_HPP_NOEXCEPT + : aspectMask{ aspectMask_ } + , baseMipLevel{ baseMipLevel_ } + , levelCount{ levelCount_ } + , baseArrayLayer{ baseArrayLayer_ } + , layerCount{ layerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageSubresourceRange( ImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageSubresourceRange( VkImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageSubresourceRange( *reinterpret_cast( &rhs ) ) + { + } + + ImageSubresourceRange & operator=( ImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageSubresourceRange & operator=( VkImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT + { + aspectMask = aspectMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setBaseMipLevel( uint32_t baseMipLevel_ ) VULKAN_HPP_NOEXCEPT + { + baseMipLevel = baseMipLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setLevelCount( uint32_t levelCount_ ) VULKAN_HPP_NOEXCEPT + { + levelCount = levelCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT + { + baseArrayLayer = baseArrayLayer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = layerCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageSubresourceRange const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresourceRange &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresourceRange const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageSubresourceRange *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( aspectMask, baseMipLevel, levelCount, baseArrayLayer, layerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageSubresourceRange const & ) const = default; +#else + bool operator==( ImageSubresourceRange const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( aspectMask == rhs.aspectMask ) && ( baseMipLevel == rhs.baseMipLevel ) && ( levelCount == rhs.levelCount ) && + ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount ); +# endif + } + + bool operator!=( ImageSubresourceRange const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + uint32_t baseMipLevel = {}; + uint32_t levelCount = {}; + uint32_t baseArrayLayer = {}; + uint32_t layerCount = {}; + }; + + // wrapper struct for struct VkImageMemoryBarrier2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageMemoryBarrier2.html + struct ImageMemoryBarrier2 + { + using NativeType = VkImageMemoryBarrier2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t srcQueueFamilyIndex_ = {}, + uint32_t dstQueueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcStageMask{ srcStageMask_ } + , srcAccessMask{ srcAccessMask_ } + , dstStageMask{ dstStageMask_ } + , dstAccessMask{ dstAccessMask_ } + , oldLayout{ oldLayout_ } + , newLayout{ newLayout_ } + , srcQueueFamilyIndex{ srcQueueFamilyIndex_ } + , dstQueueFamilyIndex{ dstQueueFamilyIndex_ } + , image{ image_ } + , subresourceRange{ subresourceRange_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2( ImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageMemoryBarrier2( VkImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageMemoryBarrier2( *reinterpret_cast( &rhs ) ) + { + } + + ImageMemoryBarrier2 & operator=( ImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageMemoryBarrier2 & operator=( VkImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT + { + srcStageMask = srcStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + dstStageMask = dstStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT + { + oldLayout = oldLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT + { + newLayout = newLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + srcQueueFamilyIndex = srcQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + dstQueueFamilyIndex = dstQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & + setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT + { + subresourceRange = subresourceRange_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageMemoryBarrier2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageMemoryBarrier2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + srcStageMask, + srcAccessMask, + dstStageMask, + dstAccessMask, + oldLayout, + newLayout, + srcQueueFamilyIndex, + dstQueueFamilyIndex, + image, + subresourceRange ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageMemoryBarrier2 const & ) const = default; +#else + bool operator==( ImageMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && + ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ) && ( oldLayout == rhs.oldLayout ) && + ( newLayout == rhs.newLayout ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && + ( image == rhs.image ) && ( subresourceRange == rhs.subresourceRange ); +# endif + } + + bool operator!=( ImageMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryBarrier2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; + VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t srcQueueFamilyIndex = {}; + uint32_t dstQueueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; + }; + + template <> + struct CppType + { + using Type = ImageMemoryBarrier2; + }; + + using ImageMemoryBarrier2KHR = ImageMemoryBarrier2; + + // wrapper struct for struct VkDependencyInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDependencyInfo.html + struct DependencyInfo + { + using NativeType = VkDependencyInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDependencyInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DependencyInfo( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {}, + uint32_t memoryBarrierCount_ = {}, + const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers_ = {}, + uint32_t bufferMemoryBarrierCount_ = {}, + const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers_ = {}, + uint32_t imageMemoryBarrierCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dependencyFlags{ dependencyFlags_ } + , memoryBarrierCount{ memoryBarrierCount_ } + , pMemoryBarriers{ pMemoryBarriers_ } + , bufferMemoryBarrierCount{ bufferMemoryBarrierCount_ } + , pBufferMemoryBarriers{ pBufferMemoryBarriers_ } + , imageMemoryBarrierCount{ imageMemoryBarrierCount_ } + , pImageMemoryBarriers{ pImageMemoryBarriers_ } + { + } + + VULKAN_HPP_CONSTEXPR DependencyInfo( DependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DependencyInfo( VkDependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT : DependencyInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DependencyInfo( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & memoryBarriers_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferMemoryBarriers_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageMemoryBarriers_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , dependencyFlags( dependencyFlags_ ) + , memoryBarrierCount( static_cast( memoryBarriers_.size() ) ) + , pMemoryBarriers( memoryBarriers_.data() ) + , bufferMemoryBarrierCount( static_cast( bufferMemoryBarriers_.size() ) ) + , pBufferMemoryBarriers( bufferMemoryBarriers_.data() ) + , imageMemoryBarrierCount( static_cast( imageMemoryBarriers_.size() ) ) + , pImageMemoryBarriers( imageMemoryBarriers_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DependencyInfo & operator=( DependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DependencyInfo & operator=( VkDependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT + { + dependencyFlags = dependencyFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setMemoryBarrierCount( uint32_t memoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT + { + memoryBarrierCount = memoryBarrierCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPMemoryBarriers( const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + pMemoryBarriers = pMemoryBarriers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DependencyInfo & + setMemoryBarriers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & memoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + memoryBarrierCount = static_cast( memoryBarriers_.size() ); + pMemoryBarriers = memoryBarriers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setBufferMemoryBarrierCount( uint32_t bufferMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT + { + bufferMemoryBarrierCount = bufferMemoryBarrierCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & + setPBufferMemoryBarriers( const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + pBufferMemoryBarriers = pBufferMemoryBarriers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DependencyInfo & setBufferMemoryBarriers( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + bufferMemoryBarrierCount = static_cast( bufferMemoryBarriers_.size() ); + pBufferMemoryBarriers = bufferMemoryBarriers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setImageMemoryBarrierCount( uint32_t imageMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT + { + imageMemoryBarrierCount = imageMemoryBarrierCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DependencyInfo & + setPImageMemoryBarriers( const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + pImageMemoryBarriers = pImageMemoryBarriers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DependencyInfo & setImageMemoryBarriers( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + imageMemoryBarrierCount = static_cast( imageMemoryBarriers_.size() ); + pImageMemoryBarriers = imageMemoryBarriers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDependencyInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDependencyInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDependencyInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDependencyInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + dependencyFlags, + memoryBarrierCount, + pMemoryBarriers, + bufferMemoryBarrierCount, + pBufferMemoryBarriers, + imageMemoryBarrierCount, + pImageMemoryBarriers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DependencyInfo const & ) const = default; +#else + bool operator==( DependencyInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dependencyFlags == rhs.dependencyFlags ) && + ( memoryBarrierCount == rhs.memoryBarrierCount ) && ( pMemoryBarriers == rhs.pMemoryBarriers ) && + ( bufferMemoryBarrierCount == rhs.bufferMemoryBarrierCount ) && ( pBufferMemoryBarriers == rhs.pBufferMemoryBarriers ) && + ( imageMemoryBarrierCount == rhs.imageMemoryBarrierCount ) && ( pImageMemoryBarriers == rhs.pImageMemoryBarriers ); +# endif + } + + bool operator!=( DependencyInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDependencyInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {}; + uint32_t memoryBarrierCount = {}; + const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers = {}; + uint32_t bufferMemoryBarrierCount = {}; + const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers = {}; + uint32_t imageMemoryBarrierCount = {}; + const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers = {}; + }; + + template <> + struct CppType + { + using Type = DependencyInfo; + }; + + using DependencyInfoKHR = DependencyInfo; + + // wrapper struct for struct VkDepthBiasInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDepthBiasInfoEXT.html + struct DepthBiasInfoEXT + { + using NativeType = VkDepthBiasInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDepthBiasInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DepthBiasInfoEXT( float depthBiasConstantFactor_ = {}, + float depthBiasClamp_ = {}, + float depthBiasSlopeFactor_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthBiasConstantFactor{ depthBiasConstantFactor_ } + , depthBiasClamp{ depthBiasClamp_ } + , depthBiasSlopeFactor{ depthBiasSlopeFactor_ } + { + } + + VULKAN_HPP_CONSTEXPR DepthBiasInfoEXT( DepthBiasInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DepthBiasInfoEXT( VkDepthBiasInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DepthBiasInfoEXT( *reinterpret_cast( &rhs ) ) {} + + DepthBiasInfoEXT & operator=( DepthBiasInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DepthBiasInfoEXT & operator=( VkDepthBiasInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DepthBiasInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DepthBiasInfoEXT & setDepthBiasConstantFactor( float depthBiasConstantFactor_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasConstantFactor = depthBiasConstantFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DepthBiasInfoEXT & setDepthBiasClamp( float depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasClamp = depthBiasClamp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DepthBiasInfoEXT & setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasSlopeFactor = depthBiasSlopeFactor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDepthBiasInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDepthBiasInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDepthBiasInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDepthBiasInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DepthBiasInfoEXT const & ) const = default; +#else + bool operator==( DepthBiasInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor ) && + ( depthBiasClamp == rhs.depthBiasClamp ) && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor ); +# endif + } + + bool operator!=( DepthBiasInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDepthBiasInfoEXT; + const void * pNext = {}; + float depthBiasConstantFactor = {}; + float depthBiasClamp = {}; + float depthBiasSlopeFactor = {}; + }; + + template <> + struct CppType + { + using Type = DepthBiasInfoEXT; + }; + + // wrapper struct for struct VkDepthBiasRepresentationInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDepthBiasRepresentationInfoEXT.html + struct DepthBiasRepresentationInfoEXT + { + using NativeType = VkDepthBiasRepresentationInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDepthBiasRepresentationInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DepthBiasRepresentationInfoEXT( VULKAN_HPP_NAMESPACE::DepthBiasRepresentationEXT depthBiasRepresentation_ = + VULKAN_HPP_NAMESPACE::DepthBiasRepresentationEXT::eLeastRepresentableValueFormat, + VULKAN_HPP_NAMESPACE::Bool32 depthBiasExact_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthBiasRepresentation{ depthBiasRepresentation_ } + , depthBiasExact{ depthBiasExact_ } + { + } + + VULKAN_HPP_CONSTEXPR DepthBiasRepresentationInfoEXT( DepthBiasRepresentationInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DepthBiasRepresentationInfoEXT( VkDepthBiasRepresentationInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DepthBiasRepresentationInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DepthBiasRepresentationInfoEXT & operator=( DepthBiasRepresentationInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DepthBiasRepresentationInfoEXT & operator=( VkDepthBiasRepresentationInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DepthBiasRepresentationInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DepthBiasRepresentationInfoEXT & + setDepthBiasRepresentation( VULKAN_HPP_NAMESPACE::DepthBiasRepresentationEXT depthBiasRepresentation_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasRepresentation = depthBiasRepresentation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DepthBiasRepresentationInfoEXT & setDepthBiasExact( VULKAN_HPP_NAMESPACE::Bool32 depthBiasExact_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasExact = depthBiasExact_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDepthBiasRepresentationInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDepthBiasRepresentationInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDepthBiasRepresentationInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDepthBiasRepresentationInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthBiasRepresentation, depthBiasExact ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DepthBiasRepresentationInfoEXT const & ) const = default; +#else + bool operator==( DepthBiasRepresentationInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthBiasRepresentation == rhs.depthBiasRepresentation ) && + ( depthBiasExact == rhs.depthBiasExact ); +# endif + } + + bool operator!=( DepthBiasRepresentationInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDepthBiasRepresentationInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DepthBiasRepresentationEXT depthBiasRepresentation = VULKAN_HPP_NAMESPACE::DepthBiasRepresentationEXT::eLeastRepresentableValueFormat; + VULKAN_HPP_NAMESPACE::Bool32 depthBiasExact = {}; + }; + + template <> + struct CppType + { + using Type = DepthBiasRepresentationInfoEXT; + }; + + // wrapper struct for struct VkDepthClampRangeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDepthClampRangeEXT.html + struct DepthClampRangeEXT + { + using NativeType = VkDepthClampRangeEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DepthClampRangeEXT( float minDepthClamp_ = {}, float maxDepthClamp_ = {} ) VULKAN_HPP_NOEXCEPT + : minDepthClamp{ minDepthClamp_ } + , maxDepthClamp{ maxDepthClamp_ } + { + } + + VULKAN_HPP_CONSTEXPR DepthClampRangeEXT( DepthClampRangeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DepthClampRangeEXT( VkDepthClampRangeEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DepthClampRangeEXT( *reinterpret_cast( &rhs ) ) {} + + DepthClampRangeEXT & operator=( DepthClampRangeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DepthClampRangeEXT & operator=( VkDepthClampRangeEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DepthClampRangeEXT & setMinDepthClamp( float minDepthClamp_ ) VULKAN_HPP_NOEXCEPT + { + minDepthClamp = minDepthClamp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DepthClampRangeEXT & setMaxDepthClamp( float maxDepthClamp_ ) VULKAN_HPP_NOEXCEPT + { + maxDepthClamp = maxDepthClamp_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDepthClampRangeEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDepthClampRangeEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDepthClampRangeEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDepthClampRangeEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( minDepthClamp, maxDepthClamp ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DepthClampRangeEXT const & ) const = default; +#else + bool operator==( DepthClampRangeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( minDepthClamp == rhs.minDepthClamp ) && ( maxDepthClamp == rhs.maxDepthClamp ); +# endif + } + + bool operator!=( DepthClampRangeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float minDepthClamp = {}; + float maxDepthClamp = {}; + }; + + // wrapper struct for struct VkDescriptorAddressInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorAddressInfoEXT.html + struct DescriptorAddressInfoEXT + { + using NativeType = VkDescriptorAddressInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorAddressInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorAddressInfoEXT( VULKAN_HPP_NAMESPACE::DeviceAddress address_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize range_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , address{ address_ } + , range{ range_ } + , format{ format_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorAddressInfoEXT( DescriptorAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorAddressInfoEXT( VkDescriptorAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorAddressInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorAddressInfoEXT & operator=( DescriptorAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorAddressInfoEXT & operator=( VkDescriptorAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorAddressInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorAddressInfoEXT & setAddress( VULKAN_HPP_NAMESPACE::DeviceAddress address_ ) VULKAN_HPP_NOEXCEPT + { + address = address_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorAddressInfoEXT & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT + { + range = range_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorAddressInfoEXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorAddressInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorAddressInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorAddressInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorAddressInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, address, range, format ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorAddressInfoEXT const & ) const = default; +#else + bool operator==( DescriptorAddressInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( address == rhs.address ) && ( range == rhs.range ) && ( format == rhs.format ); +# endif + } + + bool operator!=( DescriptorAddressInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorAddressInfoEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress address = {}; + VULKAN_HPP_NAMESPACE::DeviceSize range = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = DescriptorAddressInfoEXT; + }; + + // wrapper struct for struct VkDescriptorBufferBindingInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorBufferBindingInfoEXT.html + struct DescriptorBufferBindingInfoEXT + { + using NativeType = VkDescriptorBufferBindingInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorBufferBindingInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorBufferBindingInfoEXT( VULKAN_HPP_NAMESPACE::DeviceAddress address_ = {}, + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , address{ address_ } + , usage{ usage_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorBufferBindingInfoEXT( DescriptorBufferBindingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorBufferBindingInfoEXT( VkDescriptorBufferBindingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorBufferBindingInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorBufferBindingInfoEXT & operator=( DescriptorBufferBindingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorBufferBindingInfoEXT & operator=( VkDescriptorBufferBindingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferBindingInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferBindingInfoEXT & setAddress( VULKAN_HPP_NAMESPACE::DeviceAddress address_ ) VULKAN_HPP_NOEXCEPT + { + address = address_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferBindingInfoEXT & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorBufferBindingInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorBufferBindingInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorBufferBindingInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorBufferBindingInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, address, usage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorBufferBindingInfoEXT const & ) const = default; +#else + bool operator==( DescriptorBufferBindingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( address == rhs.address ) && ( usage == rhs.usage ); +# endif + } + + bool operator!=( DescriptorBufferBindingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorBufferBindingInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress address = {}; + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorBufferBindingInfoEXT; + }; + + // wrapper struct for struct VkDescriptorBufferBindingPushDescriptorBufferHandleEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorBufferBindingPushDescriptorBufferHandleEXT.html + struct DescriptorBufferBindingPushDescriptorBufferHandleEXT + { + using NativeType = VkDescriptorBufferBindingPushDescriptorBufferHandleEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorBufferBindingPushDescriptorBufferHandleEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorBufferBindingPushDescriptorBufferHandleEXT( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR + DescriptorBufferBindingPushDescriptorBufferHandleEXT( DescriptorBufferBindingPushDescriptorBufferHandleEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorBufferBindingPushDescriptorBufferHandleEXT( VkDescriptorBufferBindingPushDescriptorBufferHandleEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorBufferBindingPushDescriptorBufferHandleEXT( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorBufferBindingPushDescriptorBufferHandleEXT & + operator=( DescriptorBufferBindingPushDescriptorBufferHandleEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorBufferBindingPushDescriptorBufferHandleEXT & operator=( VkDescriptorBufferBindingPushDescriptorBufferHandleEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferBindingPushDescriptorBufferHandleEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferBindingPushDescriptorBufferHandleEXT & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorBufferBindingPushDescriptorBufferHandleEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorBufferBindingPushDescriptorBufferHandleEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorBufferBindingPushDescriptorBufferHandleEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorBufferBindingPushDescriptorBufferHandleEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorBufferBindingPushDescriptorBufferHandleEXT const & ) const = default; +#else + bool operator==( DescriptorBufferBindingPushDescriptorBufferHandleEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( DescriptorBufferBindingPushDescriptorBufferHandleEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorBufferBindingPushDescriptorBufferHandleEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorBufferBindingPushDescriptorBufferHandleEXT; + }; + + // wrapper struct for struct VkDescriptorBufferInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorBufferInfo.html + struct DescriptorBufferInfo + { + using NativeType = VkDescriptorBufferInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorBufferInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize range_ = {} ) VULKAN_HPP_NOEXCEPT + : buffer{ buffer_ } + , offset{ offset_ } + , range{ range_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorBufferInfo( DescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorBufferInfo( VkDescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorBufferInfo( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorBufferInfo & operator=( DescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorBufferInfo & operator=( VkDescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT + { + range = range_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorBufferInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorBufferInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorBufferInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorBufferInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( buffer, offset, range ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorBufferInfo const & ) const = default; +#else + bool operator==( DescriptorBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( range == rhs.range ); +# endif + } + + bool operator!=( DescriptorBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize range = {}; + }; + + // wrapper struct for struct VkDescriptorImageInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorImageInfo.html + struct DescriptorImageInfo + { + using NativeType = VkDescriptorImageInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DescriptorImageInfo( VULKAN_HPP_NAMESPACE::Sampler sampler_ = {}, + VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined ) VULKAN_HPP_NOEXCEPT + : sampler{ sampler_ } + , imageView{ imageView_ } + , imageLayout{ imageLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorImageInfo( DescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorImageInfo( VkDescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT : DescriptorImageInfo( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorImageInfo & operator=( DescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorImageInfo & operator=( VkDescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT + { + sampler = sampler_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT + { + imageLayout = imageLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorImageInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorImageInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorImageInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorImageInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sampler, imageView, imageLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorImageInfo const & ) const = default; +#else + bool operator==( DescriptorImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sampler == rhs.sampler ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout ); +# endif + } + + bool operator!=( DescriptorImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Sampler sampler = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + union DescriptorDataEXT + { + using NativeType = VkDescriptorDataEXT; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT( const VULKAN_HPP_NAMESPACE::Sampler * pSampler_ = {} ) : pSampler( pSampler_ ) {} + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pDescriptorImageInfo_ ) + : pCombinedImageSampler( pDescriptorImageInfo_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT( const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pDescriptorAddressInfoEXT_ ) + : pUniformTexelBuffer( pDescriptorAddressInfoEXT_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT( VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure_ ) : accelerationStructure( accelerationStructure_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & setPSampler( const VULKAN_HPP_NAMESPACE::Sampler * pSampler_ ) VULKAN_HPP_NOEXCEPT + { + pSampler = pSampler_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & + setPCombinedImageSampler( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pCombinedImageSampler_ ) VULKAN_HPP_NOEXCEPT + { + pCombinedImageSampler = pCombinedImageSampler_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & + setPInputAttachmentImage( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pInputAttachmentImage_ ) VULKAN_HPP_NOEXCEPT + { + pInputAttachmentImage = pInputAttachmentImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & setPSampledImage( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pSampledImage_ ) VULKAN_HPP_NOEXCEPT + { + pSampledImage = pSampledImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & setPStorageImage( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pStorageImage_ ) VULKAN_HPP_NOEXCEPT + { + pStorageImage = pStorageImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & + setPUniformTexelBuffer( const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pUniformTexelBuffer_ ) VULKAN_HPP_NOEXCEPT + { + pUniformTexelBuffer = pUniformTexelBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & + setPStorageTexelBuffer( const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pStorageTexelBuffer_ ) VULKAN_HPP_NOEXCEPT + { + pStorageTexelBuffer = pStorageTexelBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & setPUniformBuffer( const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pUniformBuffer_ ) VULKAN_HPP_NOEXCEPT + { + pUniformBuffer = pUniformBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & setPStorageBuffer( const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pStorageBuffer_ ) VULKAN_HPP_NOEXCEPT + { + pStorageBuffer = pStorageBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorDataEXT & setAccelerationStructure( VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorDataEXT const &() const + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorDataEXT &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + const VULKAN_HPP_NAMESPACE::Sampler * pSampler; + const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pCombinedImageSampler; + const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pInputAttachmentImage; + const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pSampledImage; + const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pStorageImage; + const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pUniformTexelBuffer; + const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pStorageTexelBuffer; + const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pUniformBuffer; + const VULKAN_HPP_NAMESPACE::DescriptorAddressInfoEXT * pStorageBuffer; + VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure; +#else + const VkSampler * pSampler; + const VkDescriptorImageInfo * pCombinedImageSampler; + const VkDescriptorImageInfo * pInputAttachmentImage; + const VkDescriptorImageInfo * pSampledImage; + const VkDescriptorImageInfo * pStorageImage; + const VkDescriptorAddressInfoEXT * pUniformTexelBuffer; + const VkDescriptorAddressInfoEXT * pStorageTexelBuffer; + const VkDescriptorAddressInfoEXT * pUniformBuffer; + const VkDescriptorAddressInfoEXT * pStorageBuffer; + VkDeviceAddress accelerationStructure; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkDescriptorGetInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorGetInfoEXT.html + struct DescriptorGetInfoEXT + { + using NativeType = VkDescriptorGetInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorGetInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorGetInfoEXT( VULKAN_HPP_NAMESPACE::DescriptorType type_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, + VULKAN_HPP_NAMESPACE::DescriptorDataEXT data_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , data{ data_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorGetInfoEXT( DescriptorGetInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorGetInfoEXT( VkDescriptorGetInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorGetInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorGetInfoEXT & operator=( DescriptorGetInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorGetInfoEXT & operator=( VkDescriptorGetInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorGetInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorGetInfoEXT & setType( VULKAN_HPP_NAMESPACE::DescriptorType type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorGetInfoEXT & setData( VULKAN_HPP_NAMESPACE::DescriptorDataEXT const & data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorGetInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorGetInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorGetInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorGetInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, data ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorGetInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorType type = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; + VULKAN_HPP_NAMESPACE::DescriptorDataEXT data = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorGetInfoEXT; + }; + + // wrapper struct for struct VkDescriptorGetTensorInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorGetTensorInfoARM.html + struct DescriptorGetTensorInfoARM + { + using NativeType = VkDescriptorGetTensorInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorGetTensorInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorGetTensorInfoARM( VULKAN_HPP_NAMESPACE::TensorViewARM tensorView_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorView{ tensorView_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorGetTensorInfoARM( DescriptorGetTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorGetTensorInfoARM( VkDescriptorGetTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorGetTensorInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorGetTensorInfoARM & operator=( DescriptorGetTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorGetTensorInfoARM & operator=( VkDescriptorGetTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorGetTensorInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorGetTensorInfoARM & setTensorView( VULKAN_HPP_NAMESPACE::TensorViewARM tensorView_ ) VULKAN_HPP_NOEXCEPT + { + tensorView = tensorView_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorGetTensorInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorGetTensorInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorGetTensorInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorGetTensorInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensorView ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorGetTensorInfoARM const & ) const = default; +#else + bool operator==( DescriptorGetTensorInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorView == rhs.tensorView ); +# endif + } + + bool operator!=( DescriptorGetTensorInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorGetTensorInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorViewARM tensorView = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorGetTensorInfoARM; + }; + + // wrapper struct for struct VkDescriptorPoolSize, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPoolSize.html + struct DescriptorPoolSize + { + using NativeType = VkDescriptorPoolSize; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorPoolSize( VULKAN_HPP_NAMESPACE::DescriptorType type_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, + uint32_t descriptorCount_ = {} ) VULKAN_HPP_NOEXCEPT + : type{ type_ } + , descriptorCount{ descriptorCount_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorPoolSize( DescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorPoolSize( VkDescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT : DescriptorPoolSize( *reinterpret_cast( &rhs ) ) {} + + DescriptorPoolSize & operator=( DescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorPoolSize & operator=( VkDescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize & setType( VULKAN_HPP_NAMESPACE::DescriptorType type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = descriptorCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorPoolSize const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorPoolSize &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorPoolSize const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorPoolSize *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( type, descriptorCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorPoolSize const & ) const = default; +#else + bool operator==( DescriptorPoolSize const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( type == rhs.type ) && ( descriptorCount == rhs.descriptorCount ); +# endif + } + + bool operator!=( DescriptorPoolSize const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DescriptorType type = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; + uint32_t descriptorCount = {}; + }; + + // wrapper struct for struct VkDescriptorPoolCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPoolCreateInfo.html + struct DescriptorPoolCreateInfo + { + using NativeType = VkDescriptorPoolCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorPoolCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorPoolCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_ = {}, + uint32_t maxSets_ = {}, + uint32_t poolSizeCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , maxSets{ maxSets_ } + , poolSizeCount{ poolSizeCount_ } + , pPoolSizes{ pPoolSizes_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorPoolCreateInfo( DescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorPoolCreateInfo( VkDescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorPoolCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorPoolCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_, + uint32_t maxSets_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & poolSizes_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), maxSets( maxSets_ ), poolSizeCount( static_cast( poolSizes_.size() ) ), pPoolSizes( poolSizes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorPoolCreateInfo & operator=( DescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorPoolCreateInfo & operator=( VkDescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setMaxSets( uint32_t maxSets_ ) VULKAN_HPP_NOEXCEPT + { + maxSets = maxSets_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPoolSizeCount( uint32_t poolSizeCount_ ) VULKAN_HPP_NOEXCEPT + { + poolSizeCount = poolSizeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPPoolSizes( const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes_ ) VULKAN_HPP_NOEXCEPT + { + pPoolSizes = pPoolSizes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorPoolCreateInfo & + setPoolSizes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & poolSizes_ ) VULKAN_HPP_NOEXCEPT + { + poolSizeCount = static_cast( poolSizes_.size() ); + pPoolSizes = poolSizes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorPoolCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorPoolCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorPoolCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, maxSets, poolSizeCount, pPoolSizes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorPoolCreateInfo const & ) const = default; +#else + bool operator==( DescriptorPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( maxSets == rhs.maxSets ) && + ( poolSizeCount == rhs.poolSizeCount ) && ( pPoolSizes == rhs.pPoolSizes ); +# endif + } + + bool operator!=( DescriptorPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorPoolCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags = {}; + uint32_t maxSets = {}; + uint32_t poolSizeCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorPoolCreateInfo; + }; + + // wrapper struct for struct VkDescriptorPoolInlineUniformBlockCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorPoolInlineUniformBlockCreateInfo.html + struct DescriptorPoolInlineUniformBlockCreateInfo + { + using NativeType = VkDescriptorPoolInlineUniformBlockCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorPoolInlineUniformBlockCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorPoolInlineUniformBlockCreateInfo( uint32_t maxInlineUniformBlockBindings_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxInlineUniformBlockBindings{ maxInlineUniformBlockBindings_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorPoolInlineUniformBlockCreateInfo( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorPoolInlineUniformBlockCreateInfo( VkDescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorPoolInlineUniformBlockCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorPoolInlineUniformBlockCreateInfo & operator=( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorPoolInlineUniformBlockCreateInfo & operator=( VkDescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfo & + setMaxInlineUniformBlockBindings( uint32_t maxInlineUniformBlockBindings_ ) VULKAN_HPP_NOEXCEPT + { + maxInlineUniformBlockBindings = maxInlineUniformBlockBindings_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorPoolInlineUniformBlockCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorPoolInlineUniformBlockCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorPoolInlineUniformBlockCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorPoolInlineUniformBlockCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxInlineUniformBlockBindings ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorPoolInlineUniformBlockCreateInfo const & ) const = default; +#else + bool operator==( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInlineUniformBlockBindings == rhs.maxInlineUniformBlockBindings ); +# endif + } + + bool operator!=( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorPoolInlineUniformBlockCreateInfo; + const void * pNext = {}; + uint32_t maxInlineUniformBlockBindings = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorPoolInlineUniformBlockCreateInfo; + }; + + using DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfo; + + // wrapper struct for struct VkDescriptorSetAllocateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetAllocateInfo.html + struct DescriptorSetAllocateInfo + { + using NativeType = VkDescriptorSetAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetAllocateInfo( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_ = {}, + uint32_t descriptorSetCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorPool{ descriptorPool_ } + , descriptorSetCount{ descriptorSetCount_ } + , pSetLayouts{ pSetLayouts_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetAllocateInfo( DescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetAllocateInfo( VkDescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetAllocateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetAllocateInfo( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), descriptorPool( descriptorPool_ ), descriptorSetCount( static_cast( setLayouts_.size() ) ), pSetLayouts( setLayouts_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorSetAllocateInfo & operator=( DescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetAllocateInfo & operator=( VkDescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_ ) VULKAN_HPP_NOEXCEPT + { + descriptorPool = descriptorPool_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetCount = descriptorSetCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pSetLayouts = pSetLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetAllocateInfo & + setSetLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetCount = static_cast( setLayouts_.size() ); + pSetLayouts = setLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorPool, descriptorSetCount, pSetLayouts ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetAllocateInfo const & ) const = default; +#else + bool operator==( DescriptorSetAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorPool == rhs.descriptorPool ) && ( descriptorSetCount == rhs.descriptorSetCount ) && + ( pSetLayouts == rhs.pSetLayouts ); +# endif + } + + bool operator!=( DescriptorSetAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetAllocateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool = {}; + uint32_t descriptorSetCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetAllocateInfo; + }; + + // wrapper struct for struct VkDescriptorSetBindingReferenceVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetBindingReferenceVALVE.html + struct DescriptorSetBindingReferenceVALVE + { + using NativeType = VkDescriptorSetBindingReferenceVALVE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetBindingReferenceVALVE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetBindingReferenceVALVE( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ = {}, + uint32_t binding_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorSetLayout{ descriptorSetLayout_ } + , binding{ binding_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetBindingReferenceVALVE( DescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetBindingReferenceVALVE( VkDescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetBindingReferenceVALVE( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorSetBindingReferenceVALVE & operator=( DescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetBindingReferenceVALVE & operator=( VkDescriptorSetBindingReferenceVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetBindingReferenceVALVE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetBindingReferenceVALVE & + setDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetLayout = descriptorSetLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetBindingReferenceVALVE & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetBindingReferenceVALVE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetBindingReferenceVALVE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetBindingReferenceVALVE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetBindingReferenceVALVE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorSetLayout, binding ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetBindingReferenceVALVE const & ) const = default; +#else + bool operator==( DescriptorSetBindingReferenceVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetLayout == rhs.descriptorSetLayout ) && ( binding == rhs.binding ); +# endif + } + + bool operator!=( DescriptorSetBindingReferenceVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetBindingReferenceVALVE; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout = {}; + uint32_t binding = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetBindingReferenceVALVE; + }; + + // wrapper struct for struct VkDescriptorSetLayoutBinding, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutBinding.html + struct DescriptorSetLayoutBinding + { + using NativeType = VkDescriptorSetLayoutBinding; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBinding( uint32_t binding_ = {}, + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, + uint32_t descriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, + const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers_ = {} ) VULKAN_HPP_NOEXCEPT + : binding{ binding_ } + , descriptorType{ descriptorType_ } + , descriptorCount{ descriptorCount_ } + , stageFlags{ stageFlags_ } + , pImmutableSamplers{ pImmutableSamplers_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBinding( DescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetLayoutBinding( VkDescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetLayoutBinding( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetLayoutBinding( uint32_t binding_, + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_, + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & immutableSamplers_ ) + : binding( binding_ ) + , descriptorType( descriptorType_ ) + , descriptorCount( static_cast( immutableSamplers_.size() ) ) + , stageFlags( stageFlags_ ) + , pImmutableSamplers( immutableSamplers_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorSetLayoutBinding & operator=( DescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetLayoutBinding & operator=( VkDescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT + { + descriptorType = descriptorType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = descriptorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setPImmutableSamplers( const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers_ ) VULKAN_HPP_NOEXCEPT + { + pImmutableSamplers = pImmutableSamplers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetLayoutBinding & + setImmutableSamplers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & immutableSamplers_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = static_cast( immutableSamplers_.size() ); + pImmutableSamplers = immutableSamplers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetLayoutBinding const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutBinding &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutBinding const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutBinding *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( binding, descriptorType, descriptorCount, stageFlags, pImmutableSamplers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetLayoutBinding const & ) const = default; +#else + bool operator==( DescriptorSetLayoutBinding const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( binding == rhs.binding ) && ( descriptorType == rhs.descriptorType ) && ( descriptorCount == rhs.descriptorCount ) && + ( stageFlags == rhs.stageFlags ) && ( pImmutableSamplers == rhs.pImmutableSamplers ); +# endif + } + + bool operator!=( DescriptorSetLayoutBinding const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t binding = {}; + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; + uint32_t descriptorCount = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers = {}; + }; + + // wrapper struct for struct VkDescriptorSetLayoutBindingFlagsCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutBindingFlagsCreateInfo.html + struct DescriptorSetLayoutBindingFlagsCreateInfo + { + using NativeType = VkDescriptorSetLayoutBindingFlagsCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBindingFlagsCreateInfo( uint32_t bindingCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , bindingCount{ bindingCount_ } + , pBindingFlags{ pBindingFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBindingFlagsCreateInfo( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetLayoutBindingFlagsCreateInfo( VkDescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetLayoutBindingFlagsCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetLayoutBindingFlagsCreateInfo( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindingFlags_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), bindingCount( static_cast( bindingFlags_.size() ) ), pBindingFlags( bindingFlags_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorSetLayoutBindingFlagsCreateInfo & operator=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetLayoutBindingFlagsCreateInfo & operator=( VkDescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo & setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT + { + bindingCount = bindingCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo & + setPBindingFlags( const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags_ ) VULKAN_HPP_NOEXCEPT + { + pBindingFlags = pBindingFlags_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetLayoutBindingFlagsCreateInfo & setBindingFlags( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindingFlags_ ) VULKAN_HPP_NOEXCEPT + { + bindingCount = static_cast( bindingFlags_.size() ); + pBindingFlags = bindingFlags_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetLayoutBindingFlagsCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutBindingFlagsCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutBindingFlagsCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutBindingFlagsCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, bindingCount, pBindingFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetLayoutBindingFlagsCreateInfo const & ) const = default; +#else + bool operator==( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bindingCount == rhs.bindingCount ) && ( pBindingFlags == rhs.pBindingFlags ); +# endif + } + + bool operator!=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo; + const void * pNext = {}; + uint32_t bindingCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetLayoutBindingFlagsCreateInfo; + }; + + using DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo; + + // wrapper struct for struct VkDescriptorSetLayoutCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutCreateInfo.html + struct DescriptorSetLayoutCreateInfo + { + using NativeType = VkDescriptorSetLayoutCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_ = {}, + uint32_t bindingCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , bindingCount{ bindingCount_ } + , pBindings{ pBindings_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateInfo( DescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetLayoutCreateInfo( VkDescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetLayoutCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetLayoutCreateInfo( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindings_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), bindingCount( static_cast( bindings_.size() ) ), pBindings( bindings_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorSetLayoutCreateInfo & operator=( DescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetLayoutCreateInfo & operator=( VkDescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT + { + bindingCount = bindingCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & + setPBindings( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings_ ) VULKAN_HPP_NOEXCEPT + { + pBindings = pBindings_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetLayoutCreateInfo & + setBindings( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bindings_ ) VULKAN_HPP_NOEXCEPT + { + bindingCount = static_cast( bindings_.size() ); + pBindings = bindings_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, bindingCount, pBindings ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetLayoutCreateInfo const & ) const = default; +#else + bool operator==( DescriptorSetLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( bindingCount == rhs.bindingCount ) && + ( pBindings == rhs.pBindings ); +# endif + } + + bool operator!=( DescriptorSetLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags = {}; + uint32_t bindingCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetLayoutCreateInfo; + }; + + // wrapper struct for struct VkDescriptorSetLayoutHostMappingInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutHostMappingInfoVALVE.html + struct DescriptorSetLayoutHostMappingInfoVALVE + { + using NativeType = VkDescriptorSetLayoutHostMappingInfoVALVE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutHostMappingInfoVALVE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DescriptorSetLayoutHostMappingInfoVALVE( size_t descriptorOffset_ = {}, uint32_t descriptorSize_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorOffset{ descriptorOffset_ } + , descriptorSize{ descriptorSize_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutHostMappingInfoVALVE( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetLayoutHostMappingInfoVALVE( VkDescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetLayoutHostMappingInfoVALVE( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorSetLayoutHostMappingInfoVALVE & operator=( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetLayoutHostMappingInfoVALVE & operator=( VkDescriptorSetLayoutHostMappingInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutHostMappingInfoVALVE & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutHostMappingInfoVALVE & setDescriptorOffset( size_t descriptorOffset_ ) VULKAN_HPP_NOEXCEPT + { + descriptorOffset = descriptorOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutHostMappingInfoVALVE & setDescriptorSize( uint32_t descriptorSize_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSize = descriptorSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetLayoutHostMappingInfoVALVE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutHostMappingInfoVALVE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutHostMappingInfoVALVE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutHostMappingInfoVALVE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorOffset, descriptorSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetLayoutHostMappingInfoVALVE const & ) const = default; +#else + bool operator==( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorOffset == rhs.descriptorOffset ) && ( descriptorSize == rhs.descriptorSize ); +# endif + } + + bool operator!=( DescriptorSetLayoutHostMappingInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutHostMappingInfoVALVE; + void * pNext = {}; + size_t descriptorOffset = {}; + uint32_t descriptorSize = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetLayoutHostMappingInfoVALVE; + }; + + // wrapper struct for struct VkDescriptorSetLayoutSupport, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetLayoutSupport.html + struct DescriptorSetLayoutSupport + { + using NativeType = VkDescriptorSetLayoutSupport; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutSupport; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutSupport( VULKAN_HPP_NAMESPACE::Bool32 supported_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supported{ supported_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorSetLayoutSupport( DescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetLayoutSupport( VkDescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetLayoutSupport( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorSetLayoutSupport & operator=( DescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetLayoutSupport & operator=( VkDescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDescriptorSetLayoutSupport const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutSupport &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutSupport const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetLayoutSupport *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supported ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetLayoutSupport const & ) const = default; +#else + bool operator==( DescriptorSetLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supported == rhs.supported ); +# endif + } + + bool operator!=( DescriptorSetLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetLayoutSupport; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 supported = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetLayoutSupport; + }; + + using DescriptorSetLayoutSupportKHR = DescriptorSetLayoutSupport; + + // wrapper struct for struct VkDescriptorSetVariableDescriptorCountAllocateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetVariableDescriptorCountAllocateInfo.html + struct DescriptorSetVariableDescriptorCountAllocateInfo + { + using NativeType = VkDescriptorSetVariableDescriptorCountAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetVariableDescriptorCountAllocateInfo( uint32_t descriptorSetCount_ = {}, + const uint32_t * pDescriptorCounts_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorSetCount{ descriptorSetCount_ } + , pDescriptorCounts{ pDescriptorCounts_ } + { + } + + VULKAN_HPP_CONSTEXPR + DescriptorSetVariableDescriptorCountAllocateInfo( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetVariableDescriptorCountAllocateInfo( VkDescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetVariableDescriptorCountAllocateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetVariableDescriptorCountAllocateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorCounts_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), descriptorSetCount( static_cast( descriptorCounts_.size() ) ), pDescriptorCounts( descriptorCounts_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorSetVariableDescriptorCountAllocateInfo & operator=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetVariableDescriptorCountAllocateInfo & operator=( VkDescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo & setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetCount = descriptorSetCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo & setPDescriptorCounts( const uint32_t * pDescriptorCounts_ ) VULKAN_HPP_NOEXCEPT + { + pDescriptorCounts = pDescriptorCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorSetVariableDescriptorCountAllocateInfo & + setDescriptorCounts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorCounts_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetCount = static_cast( descriptorCounts_.size() ); + pDescriptorCounts = descriptorCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorSetVariableDescriptorCountAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetVariableDescriptorCountAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetVariableDescriptorCountAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetVariableDescriptorCountAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorSetCount, pDescriptorCounts ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetVariableDescriptorCountAllocateInfo const & ) const = default; +#else + bool operator==( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetCount == rhs.descriptorSetCount ) && + ( pDescriptorCounts == rhs.pDescriptorCounts ); +# endif + } + + bool operator!=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo; + const void * pNext = {}; + uint32_t descriptorSetCount = {}; + const uint32_t * pDescriptorCounts = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetVariableDescriptorCountAllocateInfo; + }; + + using DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo; + + // wrapper struct for struct VkDescriptorSetVariableDescriptorCountLayoutSupport, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorSetVariableDescriptorCountLayoutSupport.html + struct DescriptorSetVariableDescriptorCountLayoutSupport + { + using NativeType = VkDescriptorSetVariableDescriptorCountLayoutSupport; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorSetVariableDescriptorCountLayoutSupport( uint32_t maxVariableDescriptorCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxVariableDescriptorCount{ maxVariableDescriptorCount_ } + { + } + + VULKAN_HPP_CONSTEXPR + DescriptorSetVariableDescriptorCountLayoutSupport( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorSetVariableDescriptorCountLayoutSupport( VkDescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorSetVariableDescriptorCountLayoutSupport( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorSetVariableDescriptorCountLayoutSupport & + operator=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorSetVariableDescriptorCountLayoutSupport & operator=( VkDescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDescriptorSetVariableDescriptorCountLayoutSupport const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetVariableDescriptorCountLayoutSupport &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorSetVariableDescriptorCountLayoutSupport const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorSetVariableDescriptorCountLayoutSupport *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxVariableDescriptorCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorSetVariableDescriptorCountLayoutSupport const & ) const = default; +#else + bool operator==( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVariableDescriptorCount == rhs.maxVariableDescriptorCount ); +# endif + } + + bool operator!=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport; + void * pNext = {}; + uint32_t maxVariableDescriptorCount = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorSetVariableDescriptorCountLayoutSupport; + }; + + using DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport; + + // wrapper struct for struct VkDescriptorUpdateTemplateEntry, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorUpdateTemplateEntry.html + struct DescriptorUpdateTemplateEntry + { + using NativeType = VkDescriptorUpdateTemplateEntry; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateEntry( uint32_t dstBinding_ = {}, + uint32_t dstArrayElement_ = {}, + uint32_t descriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, + size_t offset_ = {}, + size_t stride_ = {} ) VULKAN_HPP_NOEXCEPT + : dstBinding{ dstBinding_ } + , dstArrayElement{ dstArrayElement_ } + , descriptorCount{ descriptorCount_ } + , descriptorType{ descriptorType_ } + , offset{ offset_ } + , stride{ stride_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateEntry( DescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorUpdateTemplateEntry( VkDescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorUpdateTemplateEntry( *reinterpret_cast( &rhs ) ) + { + } + + DescriptorUpdateTemplateEntry & operator=( DescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorUpdateTemplateEntry & operator=( VkDescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT + { + dstBinding = dstBinding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT + { + dstArrayElement = dstArrayElement_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = descriptorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT + { + descriptorType = descriptorType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setOffset( size_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setStride( size_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorUpdateTemplateEntry const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorUpdateTemplateEntry &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorUpdateTemplateEntry const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorUpdateTemplateEntry *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( dstBinding, dstArrayElement, descriptorCount, descriptorType, offset, stride ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorUpdateTemplateEntry const & ) const = default; +#else + bool operator==( DescriptorUpdateTemplateEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( dstBinding == rhs.dstBinding ) && ( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount ) && + ( descriptorType == rhs.descriptorType ) && ( offset == rhs.offset ) && ( stride == rhs.stride ); +# endif + } + + bool operator!=( DescriptorUpdateTemplateEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t dstBinding = {}; + uint32_t dstArrayElement = {}; + uint32_t descriptorCount = {}; + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; + size_t offset = {}; + size_t stride = {}; + }; + + using DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry; + + // wrapper struct for struct VkDescriptorUpdateTemplateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDescriptorUpdateTemplateCreateInfo.html + struct DescriptorUpdateTemplateCreateInfo + { + using NativeType = VkDescriptorUpdateTemplateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorUpdateTemplateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateCreateInfo( + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_ = {}, + uint32_t descriptorUpdateEntryCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries_ = {}, + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType::eDescriptorSet, + VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ = {}, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ = {}, + uint32_t set_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , descriptorUpdateEntryCount{ descriptorUpdateEntryCount_ } + , pDescriptorUpdateEntries{ pDescriptorUpdateEntries_ } + , templateType{ templateType_ } + , descriptorSetLayout{ descriptorSetLayout_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , pipelineLayout{ pipelineLayout_ } + , set{ set_ } + { + } + + VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateCreateInfo( DescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DescriptorUpdateTemplateCreateInfo( VkDescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DescriptorUpdateTemplateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorUpdateTemplateCreateInfo( + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorUpdateEntries_, + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType::eDescriptorSet, + VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ = {}, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ = {}, + uint32_t set_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , descriptorUpdateEntryCount( static_cast( descriptorUpdateEntries_.size() ) ) + , pDescriptorUpdateEntries( descriptorUpdateEntries_.data() ) + , templateType( templateType_ ) + , descriptorSetLayout( descriptorSetLayout_ ) + , pipelineBindPoint( pipelineBindPoint_ ) + , pipelineLayout( pipelineLayout_ ) + , set( set_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DescriptorUpdateTemplateCreateInfo & operator=( DescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DescriptorUpdateTemplateCreateInfo & operator=( VkDescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setDescriptorUpdateEntryCount( uint32_t descriptorUpdateEntryCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorUpdateEntryCount = descriptorUpdateEntryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & + setPDescriptorUpdateEntries( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries_ ) VULKAN_HPP_NOEXCEPT + { + pDescriptorUpdateEntries = pDescriptorUpdateEntries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DescriptorUpdateTemplateCreateInfo & setDescriptorUpdateEntries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorUpdateEntries_ ) + VULKAN_HPP_NOEXCEPT + { + descriptorUpdateEntryCount = static_cast( descriptorUpdateEntries_.size() ); + pDescriptorUpdateEntries = descriptorUpdateEntries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & + setTemplateType( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ ) VULKAN_HPP_NOEXCEPT + { + templateType = templateType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & + setDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetLayout = descriptorSetLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & + setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ ) VULKAN_HPP_NOEXCEPT + { + pipelineLayout = pipelineLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT + { + set = set_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDescriptorUpdateTemplateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorUpdateTemplateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDescriptorUpdateTemplateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDescriptorUpdateTemplateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, flags, descriptorUpdateEntryCount, pDescriptorUpdateEntries, templateType, descriptorSetLayout, pipelineBindPoint, pipelineLayout, set ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DescriptorUpdateTemplateCreateInfo const & ) const = default; +#else + bool operator==( DescriptorUpdateTemplateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( descriptorUpdateEntryCount == rhs.descriptorUpdateEntryCount ) && + ( pDescriptorUpdateEntries == rhs.pDescriptorUpdateEntries ) && ( templateType == rhs.templateType ) && + ( descriptorSetLayout == rhs.descriptorSetLayout ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipelineLayout == rhs.pipelineLayout ) && + ( set == rhs.set ); +# endif + } + + bool operator!=( DescriptorUpdateTemplateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorUpdateTemplateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags = {}; + uint32_t descriptorUpdateEntryCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries = {}; + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType = VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType::eDescriptorSet; + VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout = {}; + uint32_t set = {}; + }; + + template <> + struct CppType + { + using Type = DescriptorUpdateTemplateCreateInfo; + }; + + using DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo; + + // wrapper struct for struct VkDeviceAddressBindingCallbackDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceAddressBindingCallbackDataEXT.html + struct DeviceAddressBindingCallbackDataEXT + { + using NativeType = VkDeviceAddressBindingCallbackDataEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceAddressBindingCallbackDataEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceAddressBindingCallbackDataEXT( + VULKAN_HPP_NAMESPACE::DeviceAddressBindingFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress baseAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddressBindingTypeEXT bindingType_ = VULKAN_HPP_NAMESPACE::DeviceAddressBindingTypeEXT::eBind, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , baseAddress{ baseAddress_ } + , size{ size_ } + , bindingType{ bindingType_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceAddressBindingCallbackDataEXT( DeviceAddressBindingCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceAddressBindingCallbackDataEXT( VkDeviceAddressBindingCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceAddressBindingCallbackDataEXT( *reinterpret_cast( &rhs ) ) + { + } + + DeviceAddressBindingCallbackDataEXT & operator=( DeviceAddressBindingCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceAddressBindingCallbackDataEXT & operator=( VkDeviceAddressBindingCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceAddressBindingCallbackDataEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceAddressBindingCallbackDataEXT & setFlags( VULKAN_HPP_NAMESPACE::DeviceAddressBindingFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceAddressBindingCallbackDataEXT & setBaseAddress( VULKAN_HPP_NAMESPACE::DeviceAddress baseAddress_ ) VULKAN_HPP_NOEXCEPT + { + baseAddress = baseAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceAddressBindingCallbackDataEXT & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceAddressBindingCallbackDataEXT & + setBindingType( VULKAN_HPP_NAMESPACE::DeviceAddressBindingTypeEXT bindingType_ ) VULKAN_HPP_NOEXCEPT + { + bindingType = bindingType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceAddressBindingCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceAddressBindingCallbackDataEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceAddressBindingCallbackDataEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceAddressBindingCallbackDataEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, baseAddress, size, bindingType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceAddressBindingCallbackDataEXT const & ) const = default; +#else + bool operator==( DeviceAddressBindingCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( baseAddress == rhs.baseAddress ) && ( size == rhs.size ) && + ( bindingType == rhs.bindingType ); +# endif + } + + bool operator!=( DeviceAddressBindingCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceAddressBindingCallbackDataEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceAddressBindingFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress baseAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::DeviceAddressBindingTypeEXT bindingType = VULKAN_HPP_NAMESPACE::DeviceAddressBindingTypeEXT::eBind; + }; + + template <> + struct CppType + { + using Type = DeviceAddressBindingCallbackDataEXT; + }; + + // wrapper struct for struct VkDeviceBufferMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceBufferMemoryRequirements.html + struct DeviceBufferMemoryRequirements + { + using NativeType = VkDeviceBufferMemoryRequirements; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceBufferMemoryRequirements; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pCreateInfo{ pCreateInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceBufferMemoryRequirements( DeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceBufferMemoryRequirements( VkDeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceBufferMemoryRequirements( *reinterpret_cast( &rhs ) ) + { + } + + DeviceBufferMemoryRequirements & operator=( DeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceBufferMemoryRequirements & operator=( VkDeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceBufferMemoryRequirements & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceBufferMemoryRequirements & setPCreateInfo( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT + { + pCreateInfo = pCreateInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceBufferMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceBufferMemoryRequirements &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceBufferMemoryRequirements const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceBufferMemoryRequirements *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pCreateInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceBufferMemoryRequirements const & ) const = default; +#else + bool operator==( DeviceBufferMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ); +# endif + } + + bool operator!=( DeviceBufferMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceBufferMemoryRequirements; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo = {}; + }; + + template <> + struct CppType + { + using Type = DeviceBufferMemoryRequirements; + }; + + using DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirements; + + // wrapper struct for struct VkDeviceQueueCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceQueueCreateInfo.html + struct DeviceQueueCreateInfo + { + using NativeType = VkDeviceQueueCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceQueueCreateInfo( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ = {}, + uint32_t queueFamilyIndex_ = {}, + uint32_t queueCount_ = {}, + const float * pQueuePriorities_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , queueFamilyIndex{ queueFamilyIndex_ } + , queueCount{ queueCount_ } + , pQueuePriorities{ pQueuePriorities_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceQueueCreateInfo( DeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceQueueCreateInfo( VkDeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceQueueCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceQueueCreateInfo( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_, + uint32_t queueFamilyIndex_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queuePriorities_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , queueFamilyIndex( queueFamilyIndex_ ) + , queueCount( static_cast( queuePriorities_.size() ) ) + , pQueuePriorities( queuePriorities_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceQueueCreateInfo & operator=( DeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceQueueCreateInfo & operator=( VkDeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndex = queueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setQueueCount( uint32_t queueCount_ ) VULKAN_HPP_NOEXCEPT + { + queueCount = queueCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setPQueuePriorities( const float * pQueuePriorities_ ) VULKAN_HPP_NOEXCEPT + { + pQueuePriorities = pQueuePriorities_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceQueueCreateInfo & setQueuePriorities( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queuePriorities_ ) VULKAN_HPP_NOEXCEPT + { + queueCount = static_cast( queuePriorities_.size() ); + pQueuePriorities = queuePriorities_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceQueueCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceQueueCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, queueFamilyIndex, queueCount, pQueuePriorities ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceQueueCreateInfo const & ) const = default; +#else + bool operator==( DeviceQueueCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && + ( queueCount == rhs.queueCount ) && ( pQueuePriorities == rhs.pQueuePriorities ); +# endif + } + + bool operator!=( DeviceQueueCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags = {}; + uint32_t queueFamilyIndex = {}; + uint32_t queueCount = {}; + const float * pQueuePriorities = {}; + }; + + template <> + struct CppType + { + using Type = DeviceQueueCreateInfo; + }; + + // wrapper struct for struct VkPhysicalDeviceFeatures, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFeatures.html + struct PhysicalDeviceFeatures + { + using NativeType = VkPhysicalDeviceFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 independentBlend_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 geometryShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tessellationShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 logicOp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthClamp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthBounds_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 wideLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 largePoints_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 alphaToOne_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiViewport_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInt64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInt16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseBinding_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries_ = {} ) VULKAN_HPP_NOEXCEPT + : robustBufferAccess{ robustBufferAccess_ } + , fullDrawIndexUint32{ fullDrawIndexUint32_ } + , imageCubeArray{ imageCubeArray_ } + , independentBlend{ independentBlend_ } + , geometryShader{ geometryShader_ } + , tessellationShader{ tessellationShader_ } + , sampleRateShading{ sampleRateShading_ } + , dualSrcBlend{ dualSrcBlend_ } + , logicOp{ logicOp_ } + , multiDrawIndirect{ multiDrawIndirect_ } + , drawIndirectFirstInstance{ drawIndirectFirstInstance_ } + , depthClamp{ depthClamp_ } + , depthBiasClamp{ depthBiasClamp_ } + , fillModeNonSolid{ fillModeNonSolid_ } + , depthBounds{ depthBounds_ } + , wideLines{ wideLines_ } + , largePoints{ largePoints_ } + , alphaToOne{ alphaToOne_ } + , multiViewport{ multiViewport_ } + , samplerAnisotropy{ samplerAnisotropy_ } + , textureCompressionETC2{ textureCompressionETC2_ } + , textureCompressionASTC_LDR{ textureCompressionASTC_LDR_ } + , textureCompressionBC{ textureCompressionBC_ } + , occlusionQueryPrecise{ occlusionQueryPrecise_ } + , pipelineStatisticsQuery{ pipelineStatisticsQuery_ } + , vertexPipelineStoresAndAtomics{ vertexPipelineStoresAndAtomics_ } + , fragmentStoresAndAtomics{ fragmentStoresAndAtomics_ } + , shaderTessellationAndGeometryPointSize{ shaderTessellationAndGeometryPointSize_ } + , shaderImageGatherExtended{ shaderImageGatherExtended_ } + , shaderStorageImageExtendedFormats{ shaderStorageImageExtendedFormats_ } + , shaderStorageImageMultisample{ shaderStorageImageMultisample_ } + , shaderStorageImageReadWithoutFormat{ shaderStorageImageReadWithoutFormat_ } + , shaderStorageImageWriteWithoutFormat{ shaderStorageImageWriteWithoutFormat_ } + , shaderUniformBufferArrayDynamicIndexing{ shaderUniformBufferArrayDynamicIndexing_ } + , shaderSampledImageArrayDynamicIndexing{ shaderSampledImageArrayDynamicIndexing_ } + , shaderStorageBufferArrayDynamicIndexing{ shaderStorageBufferArrayDynamicIndexing_ } + , shaderStorageImageArrayDynamicIndexing{ shaderStorageImageArrayDynamicIndexing_ } + , shaderClipDistance{ shaderClipDistance_ } + , shaderCullDistance{ shaderCullDistance_ } + , shaderFloat64{ shaderFloat64_ } + , shaderInt64{ shaderInt64_ } + , shaderInt16{ shaderInt16_ } + , shaderResourceResidency{ shaderResourceResidency_ } + , shaderResourceMinLod{ shaderResourceMinLod_ } + , sparseBinding{ sparseBinding_ } + , sparseResidencyBuffer{ sparseResidencyBuffer_ } + , sparseResidencyImage2D{ sparseResidencyImage2D_ } + , sparseResidencyImage3D{ sparseResidencyImage3D_ } + , sparseResidency2Samples{ sparseResidency2Samples_ } + , sparseResidency4Samples{ sparseResidency4Samples_ } + , sparseResidency8Samples{ sparseResidency8Samples_ } + , sparseResidency16Samples{ sparseResidency16Samples_ } + , sparseResidencyAliased{ sparseResidencyAliased_ } + , variableMultisampleRate{ variableMultisampleRate_ } + , inheritedQueries{ inheritedQueries_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures( PhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFeatures( VkPhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFeatures & operator=( PhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFeatures & operator=( VkPhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setRobustBufferAccess( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess_ ) VULKAN_HPP_NOEXCEPT + { + robustBufferAccess = robustBufferAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setFullDrawIndexUint32( VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32_ ) VULKAN_HPP_NOEXCEPT + { + fullDrawIndexUint32 = fullDrawIndexUint32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setImageCubeArray( VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray_ ) VULKAN_HPP_NOEXCEPT + { + imageCubeArray = imageCubeArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setIndependentBlend( VULKAN_HPP_NAMESPACE::Bool32 independentBlend_ ) VULKAN_HPP_NOEXCEPT + { + independentBlend = independentBlend_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 geometryShader_ ) VULKAN_HPP_NOEXCEPT + { + geometryShader = geometryShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 tessellationShader_ ) VULKAN_HPP_NOEXCEPT + { + tessellationShader = tessellationShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSampleRateShading( VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading_ ) VULKAN_HPP_NOEXCEPT + { + sampleRateShading = sampleRateShading_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDualSrcBlend( VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend_ ) VULKAN_HPP_NOEXCEPT + { + dualSrcBlend = dualSrcBlend_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setLogicOp( VULKAN_HPP_NAMESPACE::Bool32 logicOp_ ) VULKAN_HPP_NOEXCEPT + { + logicOp = logicOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setMultiDrawIndirect( VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect_ ) VULKAN_HPP_NOEXCEPT + { + multiDrawIndirect = multiDrawIndirect_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDrawIndirectFirstInstance( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance_ ) VULKAN_HPP_NOEXCEPT + { + drawIndirectFirstInstance = drawIndirectFirstInstance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDepthClamp( VULKAN_HPP_NAMESPACE::Bool32 depthClamp_ ) VULKAN_HPP_NOEXCEPT + { + depthClamp = depthClamp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDepthBiasClamp( VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasClamp = depthBiasClamp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setFillModeNonSolid( VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid_ ) VULKAN_HPP_NOEXCEPT + { + fillModeNonSolid = fillModeNonSolid_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setDepthBounds( VULKAN_HPP_NAMESPACE::Bool32 depthBounds_ ) VULKAN_HPP_NOEXCEPT + { + depthBounds = depthBounds_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setWideLines( VULKAN_HPP_NAMESPACE::Bool32 wideLines_ ) VULKAN_HPP_NOEXCEPT + { + wideLines = wideLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setLargePoints( VULKAN_HPP_NAMESPACE::Bool32 largePoints_ ) VULKAN_HPP_NOEXCEPT + { + largePoints = largePoints_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setAlphaToOne( VULKAN_HPP_NAMESPACE::Bool32 alphaToOne_ ) VULKAN_HPP_NOEXCEPT + { + alphaToOne = alphaToOne_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setMultiViewport( VULKAN_HPP_NAMESPACE::Bool32 multiViewport_ ) VULKAN_HPP_NOEXCEPT + { + multiViewport = multiViewport_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSamplerAnisotropy( VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy_ ) VULKAN_HPP_NOEXCEPT + { + samplerAnisotropy = samplerAnisotropy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setTextureCompressionETC2( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2_ ) VULKAN_HPP_NOEXCEPT + { + textureCompressionETC2 = textureCompressionETC2_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setTextureCompressionASTC_LDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR_ ) VULKAN_HPP_NOEXCEPT + { + textureCompressionASTC_LDR = textureCompressionASTC_LDR_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setTextureCompressionBC( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC_ ) VULKAN_HPP_NOEXCEPT + { + textureCompressionBC = textureCompressionBC_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setOcclusionQueryPrecise( VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise_ ) VULKAN_HPP_NOEXCEPT + { + occlusionQueryPrecise = occlusionQueryPrecise_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setPipelineStatisticsQuery( VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery_ ) VULKAN_HPP_NOEXCEPT + { + pipelineStatisticsQuery = pipelineStatisticsQuery_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setVertexPipelineStoresAndAtomics( VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics_ ) VULKAN_HPP_NOEXCEPT + { + vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setFragmentStoresAndAtomics( VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics_ ) VULKAN_HPP_NOEXCEPT + { + fragmentStoresAndAtomics = fragmentStoresAndAtomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderTessellationAndGeometryPointSize( VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize_ ) VULKAN_HPP_NOEXCEPT + { + shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderImageGatherExtended( VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended_ ) VULKAN_HPP_NOEXCEPT + { + shaderImageGatherExtended = shaderImageGatherExtended_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderStorageImageExtendedFormats( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderStorageImageMultisample( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageMultisample = shaderStorageImageMultisample_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderStorageImageReadWithoutFormat( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderStorageImageWriteWithoutFormat( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderUniformBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderSampledImageArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderStorageBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & + setShaderStorageImageArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderClipDistance( VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance_ ) VULKAN_HPP_NOEXCEPT + { + shaderClipDistance = shaderClipDistance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderCullDistance( VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance_ ) VULKAN_HPP_NOEXCEPT + { + shaderCullDistance = shaderCullDistance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderFloat64( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloat64 = shaderFloat64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderInt64( VULKAN_HPP_NAMESPACE::Bool32 shaderInt64_ ) VULKAN_HPP_NOEXCEPT + { + shaderInt64 = shaderInt64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderInt16( VULKAN_HPP_NAMESPACE::Bool32 shaderInt16_ ) VULKAN_HPP_NOEXCEPT + { + shaderInt16 = shaderInt16_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderResourceResidency( VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency_ ) VULKAN_HPP_NOEXCEPT + { + shaderResourceResidency = shaderResourceResidency_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderResourceMinLod( VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod_ ) VULKAN_HPP_NOEXCEPT + { + shaderResourceMinLod = shaderResourceMinLod_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseBinding( VULKAN_HPP_NAMESPACE::Bool32 sparseBinding_ ) VULKAN_HPP_NOEXCEPT + { + sparseBinding = sparseBinding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyBuffer( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidencyBuffer = sparseResidencyBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyImage2D( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidencyImage2D = sparseResidencyImage2D_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyImage3D( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidencyImage3D = sparseResidencyImage3D_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency2Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidency2Samples = sparseResidency2Samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency4Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidency4Samples = sparseResidency4Samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency8Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidency8Samples = sparseResidency8Samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidency16Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidency16Samples = sparseResidency16Samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setSparseResidencyAliased( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased_ ) VULKAN_HPP_NOEXCEPT + { + sparseResidencyAliased = sparseResidencyAliased_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setVariableMultisampleRate( VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate_ ) VULKAN_HPP_NOEXCEPT + { + variableMultisampleRate = variableMultisampleRate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setInheritedQueries( VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries_ ) VULKAN_HPP_NOEXCEPT + { + inheritedQueries = inheritedQueries_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( robustBufferAccess, + fullDrawIndexUint32, + imageCubeArray, + independentBlend, + geometryShader, + tessellationShader, + sampleRateShading, + dualSrcBlend, + logicOp, + multiDrawIndirect, + drawIndirectFirstInstance, + depthClamp, + depthBiasClamp, + fillModeNonSolid, + depthBounds, + wideLines, + largePoints, + alphaToOne, + multiViewport, + samplerAnisotropy, + textureCompressionETC2, + textureCompressionASTC_LDR, + textureCompressionBC, + occlusionQueryPrecise, + pipelineStatisticsQuery, + vertexPipelineStoresAndAtomics, + fragmentStoresAndAtomics, + shaderTessellationAndGeometryPointSize, + shaderImageGatherExtended, + shaderStorageImageExtendedFormats, + shaderStorageImageMultisample, + shaderStorageImageReadWithoutFormat, + shaderStorageImageWriteWithoutFormat, + shaderUniformBufferArrayDynamicIndexing, + shaderSampledImageArrayDynamicIndexing, + shaderStorageBufferArrayDynamicIndexing, + shaderStorageImageArrayDynamicIndexing, + shaderClipDistance, + shaderCullDistance, + shaderFloat64, + shaderInt64, + shaderInt16, + shaderResourceResidency, + shaderResourceMinLod, + sparseBinding, + sparseResidencyBuffer, + sparseResidencyImage2D, + sparseResidencyImage3D, + sparseResidency2Samples, + sparseResidency4Samples, + sparseResidency8Samples, + sparseResidency16Samples, + sparseResidencyAliased, + variableMultisampleRate, + inheritedQueries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( robustBufferAccess == rhs.robustBufferAccess ) && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 ) && + ( imageCubeArray == rhs.imageCubeArray ) && ( independentBlend == rhs.independentBlend ) && ( geometryShader == rhs.geometryShader ) && + ( tessellationShader == rhs.tessellationShader ) && ( sampleRateShading == rhs.sampleRateShading ) && ( dualSrcBlend == rhs.dualSrcBlend ) && + ( logicOp == rhs.logicOp ) && ( multiDrawIndirect == rhs.multiDrawIndirect ) && ( drawIndirectFirstInstance == rhs.drawIndirectFirstInstance ) && + ( depthClamp == rhs.depthClamp ) && ( depthBiasClamp == rhs.depthBiasClamp ) && ( fillModeNonSolid == rhs.fillModeNonSolid ) && + ( depthBounds == rhs.depthBounds ) && ( wideLines == rhs.wideLines ) && ( largePoints == rhs.largePoints ) && ( alphaToOne == rhs.alphaToOne ) && + ( multiViewport == rhs.multiViewport ) && ( samplerAnisotropy == rhs.samplerAnisotropy ) && + ( textureCompressionETC2 == rhs.textureCompressionETC2 ) && ( textureCompressionASTC_LDR == rhs.textureCompressionASTC_LDR ) && + ( textureCompressionBC == rhs.textureCompressionBC ) && ( occlusionQueryPrecise == rhs.occlusionQueryPrecise ) && + ( pipelineStatisticsQuery == rhs.pipelineStatisticsQuery ) && ( vertexPipelineStoresAndAtomics == rhs.vertexPipelineStoresAndAtomics ) && + ( fragmentStoresAndAtomics == rhs.fragmentStoresAndAtomics ) && + ( shaderTessellationAndGeometryPointSize == rhs.shaderTessellationAndGeometryPointSize ) && + ( shaderImageGatherExtended == rhs.shaderImageGatherExtended ) && ( shaderStorageImageExtendedFormats == rhs.shaderStorageImageExtendedFormats ) && + ( shaderStorageImageMultisample == rhs.shaderStorageImageMultisample ) && + ( shaderStorageImageReadWithoutFormat == rhs.shaderStorageImageReadWithoutFormat ) && + ( shaderStorageImageWriteWithoutFormat == rhs.shaderStorageImageWriteWithoutFormat ) && + ( shaderUniformBufferArrayDynamicIndexing == rhs.shaderUniformBufferArrayDynamicIndexing ) && + ( shaderSampledImageArrayDynamicIndexing == rhs.shaderSampledImageArrayDynamicIndexing ) && + ( shaderStorageBufferArrayDynamicIndexing == rhs.shaderStorageBufferArrayDynamicIndexing ) && + ( shaderStorageImageArrayDynamicIndexing == rhs.shaderStorageImageArrayDynamicIndexing ) && ( shaderClipDistance == rhs.shaderClipDistance ) && + ( shaderCullDistance == rhs.shaderCullDistance ) && ( shaderFloat64 == rhs.shaderFloat64 ) && ( shaderInt64 == rhs.shaderInt64 ) && + ( shaderInt16 == rhs.shaderInt16 ) && ( shaderResourceResidency == rhs.shaderResourceResidency ) && + ( shaderResourceMinLod == rhs.shaderResourceMinLod ) && ( sparseBinding == rhs.sparseBinding ) && + ( sparseResidencyBuffer == rhs.sparseResidencyBuffer ) && ( sparseResidencyImage2D == rhs.sparseResidencyImage2D ) && + ( sparseResidencyImage3D == rhs.sparseResidencyImage3D ) && ( sparseResidency2Samples == rhs.sparseResidency2Samples ) && + ( sparseResidency4Samples == rhs.sparseResidency4Samples ) && ( sparseResidency8Samples == rhs.sparseResidency8Samples ) && + ( sparseResidency16Samples == rhs.sparseResidency16Samples ) && ( sparseResidencyAliased == rhs.sparseResidencyAliased ) && + ( variableMultisampleRate == rhs.variableMultisampleRate ) && ( inheritedQueries == rhs.inheritedQueries ); +# endif + } + + bool operator!=( PhysicalDeviceFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray = {}; + VULKAN_HPP_NAMESPACE::Bool32 independentBlend = {}; + VULKAN_HPP_NAMESPACE::Bool32 geometryShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 tessellationShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading = {}; + VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend = {}; + VULKAN_HPP_NAMESPACE::Bool32 logicOp = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect = {}; + VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClamp = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp = {}; + VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthBounds = {}; + VULKAN_HPP_NAMESPACE::Bool32 wideLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 largePoints = {}; + VULKAN_HPP_NAMESPACE::Bool32 alphaToOne = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiViewport = {}; + VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2 = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC = {}; + VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInt64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInt16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseBinding = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased = {}; + VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate = {}; + VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries = {}; + }; + + // wrapper struct for struct VkDeviceCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceCreateInfo.html + struct DeviceCreateInfo + { + using NativeType = VkDeviceCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceCreateInfo( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ = {}, + uint32_t queueCreateInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos_ = {}, + uint32_t enabledLayerCount_ = {}, + const char * const * ppEnabledLayerNames_ = {}, + uint32_t enabledExtensionCount_ = {}, + const char * const * ppEnabledExtensionNames_ = {}, + const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , queueCreateInfoCount{ queueCreateInfoCount_ } + , pQueueCreateInfos{ pQueueCreateInfos_ } + , enabledLayerCount{ enabledLayerCount_ } + , ppEnabledLayerNames{ ppEnabledLayerNames_ } + , enabledExtensionCount{ enabledExtensionCount_ } + , ppEnabledExtensionNames{ ppEnabledExtensionNames_ } + , pEnabledFeatures{ pEnabledFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceCreateInfo( DeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceCreateInfo( VkDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceCreateInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceCreateInfo( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueCreateInfos_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ = {}, + const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , queueCreateInfoCount( static_cast( queueCreateInfos_.size() ) ) + , pQueueCreateInfos( queueCreateInfos_.data() ) + , enabledLayerCount( static_cast( pEnabledLayerNames_.size() ) ) + , ppEnabledLayerNames( pEnabledLayerNames_.data() ) + , enabledExtensionCount( static_cast( pEnabledExtensionNames_.size() ) ) + , ppEnabledExtensionNames( pEnabledExtensionNames_.data() ) + , pEnabledFeatures( pEnabledFeatures_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceCreateInfo & operator=( DeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceCreateInfo & operator=( VkDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + queueCreateInfoCount = queueCreateInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & + setPQueueCreateInfos( const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos_ ) VULKAN_HPP_NOEXCEPT + { + pQueueCreateInfos = pQueueCreateInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceCreateInfo & setQueueCreateInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueCreateInfos_ ) VULKAN_HPP_NOEXCEPT + { + queueCreateInfoCount = static_cast( queueCreateInfos_.size() ); + pQueueCreateInfos = queueCreateInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT + { + enabledLayerCount = enabledLayerCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT + { + ppEnabledLayerNames = ppEnabledLayerNames_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceCreateInfo & + setPEnabledLayerNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT + { + enabledLayerCount = static_cast( pEnabledLayerNames_.size() ); + ppEnabledLayerNames = pEnabledLayerNames_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT + { + enabledExtensionCount = enabledExtensionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT + { + ppEnabledExtensionNames = ppEnabledExtensionNames_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceCreateInfo & + setPEnabledExtensionNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT + { + enabledExtensionCount = static_cast( pEnabledExtensionNames_.size() ); + ppEnabledExtensionNames = pEnabledExtensionNames_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPEnabledFeatures( const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ ) VULKAN_HPP_NOEXCEPT + { + pEnabledFeatures = pEnabledFeatures_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + queueCreateInfoCount, + pQueueCreateInfos, + enabledLayerCount, + ppEnabledLayerNames, + enabledExtensionCount, + ppEnabledExtensionNames, + pEnabledFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = queueCreateInfoCount <=> rhs.queueCreateInfoCount; cmp != 0 ) + return cmp; + if ( auto cmp = pQueueCreateInfos <=> rhs.pQueueCreateInfos; cmp != 0 ) + return cmp; + if ( auto cmp = enabledLayerCount <=> rhs.enabledLayerCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < enabledLayerCount; ++i ) + { + if ( ppEnabledLayerNames[i] != rhs.ppEnabledLayerNames[i] ) + if ( auto cmp = strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ); cmp != 0 ) + return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; + } + if ( auto cmp = enabledExtensionCount <=> rhs.enabledExtensionCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < enabledExtensionCount; ++i ) + { + if ( ppEnabledExtensionNames[i] != rhs.ppEnabledExtensionNames[i] ) + if ( auto cmp = strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ); cmp != 0 ) + return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; + } + if ( auto cmp = pEnabledFeatures <=> rhs.pEnabledFeatures; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueCreateInfoCount == rhs.queueCreateInfoCount ) && + ( pQueueCreateInfos == rhs.pQueueCreateInfos ) && ( enabledLayerCount == rhs.enabledLayerCount ) && + std::equal( ppEnabledLayerNames, + ppEnabledLayerNames + enabledLayerCount, + rhs.ppEnabledLayerNames, + []( char const * left, char const * right ) { return ( left == right ) || ( strcmp( left, right ) == 0 ); } ) && + ( enabledExtensionCount == rhs.enabledExtensionCount ) && + std::equal( ppEnabledExtensionNames, + ppEnabledExtensionNames + enabledExtensionCount, + rhs.ppEnabledExtensionNames, + []( char const * left, char const * right ) { return ( left == right ) || ( strcmp( left, right ) == 0 ); } ) && + ( pEnabledFeatures == rhs.pEnabledFeatures ); + } + + bool operator!=( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags = {}; + uint32_t queueCreateInfoCount = {}; + const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos = {}; + uint32_t enabledLayerCount = {}; + const char * const * ppEnabledLayerNames = {}; + uint32_t enabledExtensionCount = {}; + const char * const * ppEnabledExtensionNames = {}; + const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures = {}; + }; + + template <> + struct CppType + { + using Type = DeviceCreateInfo; + }; + + // wrapper struct for struct VkDeviceMemoryReportCallbackDataEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemoryReportCallbackDataEXT.html + struct DeviceMemoryReportCallbackDataEXT + { + using NativeType = VkDeviceMemoryReportCallbackDataEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceMemoryReportCallbackDataEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceMemoryReportCallbackDataEXT( + VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT type_ = VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT::eAllocate, + uint64_t memoryObjectId_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::ObjectType objectType_ = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown, + uint64_t objectHandle_ = {}, + uint32_t heapIndex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , type{ type_ } + , memoryObjectId{ memoryObjectId_ } + , size{ size_ } + , objectType{ objectType_ } + , objectHandle{ objectHandle_ } + , heapIndex{ heapIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceMemoryReportCallbackDataEXT( DeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceMemoryReportCallbackDataEXT( VkDeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceMemoryReportCallbackDataEXT( *reinterpret_cast( &rhs ) ) + { + } + + DeviceMemoryReportCallbackDataEXT & operator=( DeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceMemoryReportCallbackDataEXT & operator=( VkDeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDeviceMemoryReportCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceMemoryReportCallbackDataEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceMemoryReportCallbackDataEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceMemoryReportCallbackDataEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, type, memoryObjectId, size, objectType, objectHandle, heapIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceMemoryReportCallbackDataEXT const & ) const = default; +#else + bool operator==( DeviceMemoryReportCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( type == rhs.type ) && ( memoryObjectId == rhs.memoryObjectId ) && + ( size == rhs.size ) && ( objectType == rhs.objectType ) && ( objectHandle == rhs.objectHandle ) && ( heapIndex == rhs.heapIndex ); +# endif + } + + bool operator!=( DeviceMemoryReportCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceMemoryReportCallbackDataEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT type = VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT::eAllocate; + uint64_t memoryObjectId = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::eUnknown; + uint64_t objectHandle = {}; + uint32_t heapIndex = {}; + }; + + template <> + struct CppType + { + using Type = DeviceMemoryReportCallbackDataEXT; + }; + + typedef void( VKAPI_PTR * PFN_DeviceMemoryReportCallbackEXT )( const VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT * pCallbackData, + void * pUserData ); + + // wrapper struct for struct VkDeviceDeviceMemoryReportCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceDeviceMemoryReportCreateInfoEXT.html + struct DeviceDeviceMemoryReportCreateInfoEXT + { + using NativeType = VkDeviceDeviceMemoryReportCreateInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceDeviceMemoryReportCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceDeviceMemoryReportCreateInfoEXT( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::PFN_DeviceMemoryReportCallbackEXT pfnUserCallback_ = {}, + void * pUserData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pfnUserCallback{ pfnUserCallback_ } + , pUserData{ pUserData_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceDeviceMemoryReportCreateInfoEXT( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceDeviceMemoryReportCreateInfoEXT( VkDeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceDeviceMemoryReportCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This constructor is deprecated. Use the one taking function pointer types from the vk-namespace instead." ) + + DeviceDeviceMemoryReportCreateInfoEXT( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_, + PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback_, + void * pUserData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : DeviceDeviceMemoryReportCreateInfoEXT( flags_, + reinterpret_cast( pfnUserCallback_ ), + pUserData_, + pNext_ ) + { + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif + + DeviceDeviceMemoryReportCreateInfoEXT & operator=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceDeviceMemoryReportCreateInfoEXT & operator=( VkDeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & + setPfnUserCallback( VULKAN_HPP_NAMESPACE::PFN_DeviceMemoryReportCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT + { + pfnUserCallback = pfnUserCallback_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT + { + pUserData = pUserData_; + return *this; + } + +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# if defined( __clang__ ) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# endif +# pragma GCC diagnostic ignored "-Wcast-function-type" +# endif + VULKAN_HPP_DEPRECATED( "This setter is deprecated. Use the one taking a function pointer type from the vk-namespace instead." ) + + DeviceDeviceMemoryReportCreateInfoEXT & setPfnUserCallback( PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT + { + return setPfnUserCallback( reinterpret_cast( pfnUserCallback_ ) ); + } +# if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +# endif +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceDeviceMemoryReportCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceDeviceMemoryReportCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceDeviceMemoryReportCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceDeviceMemoryReportCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pfnUserCallback, pUserData ); + } +#endif + + bool operator==( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +#if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +#else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pfnUserCallback == rhs.pfnUserCallback ) && + ( pUserData == rhs.pUserData ); +#endif + } + + bool operator!=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceDeviceMemoryReportCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::PFN_DeviceMemoryReportCallbackEXT pfnUserCallback = {}; + void * pUserData = {}; + }; + + template <> + struct CppType + { + using Type = DeviceDeviceMemoryReportCreateInfoEXT; + }; + + // wrapper struct for struct VkDeviceDiagnosticsConfigCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceDiagnosticsConfigCreateInfoNV.html + struct DeviceDiagnosticsConfigCreateInfoNV + { + using NativeType = VkDeviceDiagnosticsConfigCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceDiagnosticsConfigCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigCreateInfoNV( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigCreateInfoNV( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceDiagnosticsConfigCreateInfoNV( VkDeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceDiagnosticsConfigCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + DeviceDiagnosticsConfigCreateInfoNV & operator=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceDiagnosticsConfigCreateInfoNV & operator=( VkDeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceDiagnosticsConfigCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceDiagnosticsConfigCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceDiagnosticsConfigCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceDiagnosticsConfigCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceDiagnosticsConfigCreateInfoNV const & ) const = default; +#else + bool operator==( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceDiagnosticsConfigCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags = {}; + }; + + template <> + struct CppType + { + using Type = DeviceDiagnosticsConfigCreateInfoNV; + }; + + // wrapper struct for struct VkDeviceEventInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceEventInfoEXT.html + struct DeviceEventInfoEXT + { + using NativeType = VkDeviceEventInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceEventInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceEventInfoEXT( VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent_ = VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT::eDisplayHotplug, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceEvent{ deviceEvent_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceEventInfoEXT( DeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceEventInfoEXT( VkDeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceEventInfoEXT( *reinterpret_cast( &rhs ) ) {} + + DeviceEventInfoEXT & operator=( DeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceEventInfoEXT & operator=( VkDeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT & setDeviceEvent( VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent_ ) VULKAN_HPP_NOEXCEPT + { + deviceEvent = deviceEvent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceEventInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceEventInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceEventInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceEvent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceEventInfoEXT const & ) const = default; +#else + bool operator==( DeviceEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceEvent == rhs.deviceEvent ); +# endif + } + + bool operator!=( DeviceEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceEventInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent = VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT::eDisplayHotplug; + }; + + template <> + struct CppType + { + using Type = DeviceEventInfoEXT; + }; + + // wrapper struct for struct VkDeviceFaultAddressInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultAddressInfoEXT.html + struct DeviceFaultAddressInfoEXT + { + using NativeType = VkDeviceFaultAddressInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DeviceFaultAddressInfoEXT( VULKAN_HPP_NAMESPACE::DeviceFaultAddressTypeEXT addressType_ = VULKAN_HPP_NAMESPACE::DeviceFaultAddressTypeEXT::eNone, + VULKAN_HPP_NAMESPACE::DeviceAddress reportedAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize addressPrecision_ = {} ) VULKAN_HPP_NOEXCEPT + : addressType{ addressType_ } + , reportedAddress{ reportedAddress_ } + , addressPrecision{ addressPrecision_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceFaultAddressInfoEXT( DeviceFaultAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceFaultAddressInfoEXT( VkDeviceFaultAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceFaultAddressInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DeviceFaultAddressInfoEXT & operator=( DeviceFaultAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceFaultAddressInfoEXT & operator=( VkDeviceFaultAddressInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultAddressInfoEXT & setAddressType( VULKAN_HPP_NAMESPACE::DeviceFaultAddressTypeEXT addressType_ ) VULKAN_HPP_NOEXCEPT + { + addressType = addressType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultAddressInfoEXT & setReportedAddress( VULKAN_HPP_NAMESPACE::DeviceAddress reportedAddress_ ) VULKAN_HPP_NOEXCEPT + { + reportedAddress = reportedAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultAddressInfoEXT & setAddressPrecision( VULKAN_HPP_NAMESPACE::DeviceSize addressPrecision_ ) VULKAN_HPP_NOEXCEPT + { + addressPrecision = addressPrecision_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceFaultAddressInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultAddressInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultAddressInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceFaultAddressInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( addressType, reportedAddress, addressPrecision ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceFaultAddressInfoEXT const & ) const = default; +#else + bool operator==( DeviceFaultAddressInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( addressType == rhs.addressType ) && ( reportedAddress == rhs.reportedAddress ) && ( addressPrecision == rhs.addressPrecision ); +# endif + } + + bool operator!=( DeviceFaultAddressInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceFaultAddressTypeEXT addressType = VULKAN_HPP_NAMESPACE::DeviceFaultAddressTypeEXT::eNone; + VULKAN_HPP_NAMESPACE::DeviceAddress reportedAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize addressPrecision = {}; + }; + + // wrapper struct for struct VkDeviceFaultCountsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultCountsEXT.html + struct DeviceFaultCountsEXT + { + using NativeType = VkDeviceFaultCountsEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceFaultCountsEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceFaultCountsEXT( uint32_t addressInfoCount_ = {}, + uint32_t vendorInfoCount_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize vendorBinarySize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , addressInfoCount{ addressInfoCount_ } + , vendorInfoCount{ vendorInfoCount_ } + , vendorBinarySize{ vendorBinarySize_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceFaultCountsEXT( DeviceFaultCountsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceFaultCountsEXT( VkDeviceFaultCountsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceFaultCountsEXT( *reinterpret_cast( &rhs ) ) + { + } + + DeviceFaultCountsEXT & operator=( DeviceFaultCountsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceFaultCountsEXT & operator=( VkDeviceFaultCountsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultCountsEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultCountsEXT & setAddressInfoCount( uint32_t addressInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + addressInfoCount = addressInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultCountsEXT & setVendorInfoCount( uint32_t vendorInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + vendorInfoCount = vendorInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultCountsEXT & setVendorBinarySize( VULKAN_HPP_NAMESPACE::DeviceSize vendorBinarySize_ ) VULKAN_HPP_NOEXCEPT + { + vendorBinarySize = vendorBinarySize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceFaultCountsEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultCountsEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultCountsEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceFaultCountsEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, addressInfoCount, vendorInfoCount, vendorBinarySize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceFaultCountsEXT const & ) const = default; +#else + bool operator==( DeviceFaultCountsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( addressInfoCount == rhs.addressInfoCount ) && ( vendorInfoCount == rhs.vendorInfoCount ) && + ( vendorBinarySize == rhs.vendorBinarySize ); +# endif + } + + bool operator!=( DeviceFaultCountsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceFaultCountsEXT; + void * pNext = {}; + uint32_t addressInfoCount = {}; + uint32_t vendorInfoCount = {}; + VULKAN_HPP_NAMESPACE::DeviceSize vendorBinarySize = {}; + }; + + template <> + struct CppType + { + using Type = DeviceFaultCountsEXT; + }; + + // wrapper struct for struct VkDeviceFaultVendorInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultVendorInfoEXT.html + struct DeviceFaultVendorInfoEXT + { + using NativeType = VkDeviceFaultVendorInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorInfoEXT( std::array const & description_ = {}, + uint64_t vendorFaultCode_ = {}, + uint64_t vendorFaultData_ = {} ) VULKAN_HPP_NOEXCEPT + : description{ description_ } + , vendorFaultCode{ vendorFaultCode_ } + , vendorFaultData{ vendorFaultData_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorInfoEXT( DeviceFaultVendorInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceFaultVendorInfoEXT( VkDeviceFaultVendorInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceFaultVendorInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceFaultVendorInfoEXT( std::string const & description_, uint64_t vendorFaultCode_ = {}, uint64_t vendorFaultData_ = {} ) + : vendorFaultCode( vendorFaultCode_ ), vendorFaultData( vendorFaultData_ ) + { + VULKAN_HPP_ASSERT( description_.size() < VK_MAX_DESCRIPTION_SIZE ); +# if defined( _WIN32 ) + strncpy_s( description, VK_MAX_DESCRIPTION_SIZE, description_.data(), description_.size() ); +# else + strncpy( description, description_.data(), std::min( VK_MAX_DESCRIPTION_SIZE, description_.size() ) ); +# endif + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceFaultVendorInfoEXT & operator=( DeviceFaultVendorInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceFaultVendorInfoEXT & operator=( VkDeviceFaultVendorInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorInfoEXT & setDescription( std::array description_ ) VULKAN_HPP_NOEXCEPT + { + description = description_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceFaultVendorInfoEXT & setDescription( std::string const & description_ ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( description_.size() < VK_MAX_DESCRIPTION_SIZE ); +# if defined( _WIN32 ) + strncpy_s( description, VK_MAX_DESCRIPTION_SIZE, description_.data(), description_.size() ); +# else + strncpy( description, description_.data(), std::min( VK_MAX_DESCRIPTION_SIZE, description_.size() ) ); +# endif + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorInfoEXT & setVendorFaultCode( uint64_t vendorFaultCode_ ) VULKAN_HPP_NOEXCEPT + { + vendorFaultCode = vendorFaultCode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorInfoEXT & setVendorFaultData( uint64_t vendorFaultData_ ) VULKAN_HPP_NOEXCEPT + { + vendorFaultData = vendorFaultData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceFaultVendorInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultVendorInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultVendorInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceFaultVendorInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, uint64_t const &, uint64_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( description, vendorFaultCode, vendorFaultData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DeviceFaultVendorInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = vendorFaultCode <=> rhs.vendorFaultCode; cmp != 0 ) + return cmp; + if ( auto cmp = vendorFaultData <=> rhs.vendorFaultData; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DeviceFaultVendorInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( strcmp( description, rhs.description ) == 0 ) && ( vendorFaultCode == rhs.vendorFaultCode ) && ( vendorFaultData == rhs.vendorFaultData ); + } + + bool operator!=( DeviceFaultVendorInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + uint64_t vendorFaultCode = {}; + uint64_t vendorFaultData = {}; + }; + + // wrapper struct for struct VkDeviceFaultInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultInfoEXT.html + struct DeviceFaultInfoEXT + { + using NativeType = VkDeviceFaultInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceFaultInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultInfoEXT( std::array const & description_ = {}, + VULKAN_HPP_NAMESPACE::DeviceFaultAddressInfoEXT * pAddressInfos_ = {}, + VULKAN_HPP_NAMESPACE::DeviceFaultVendorInfoEXT * pVendorInfos_ = {}, + void * pVendorBinaryData_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , description{ description_ } + , pAddressInfos{ pAddressInfos_ } + , pVendorInfos{ pVendorInfos_ } + , pVendorBinaryData{ pVendorBinaryData_ } + { + } + +# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE + VULKAN_HPP_CONSTEXPR_14 DeviceFaultInfoEXT( DeviceFaultInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceFaultInfoEXT( VkDeviceFaultInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceFaultInfoEXT( *reinterpret_cast( &rhs ) ) {} + + DeviceFaultInfoEXT & operator=( DeviceFaultInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# else + DeviceFaultInfoEXT( DeviceFaultInfoEXT const & ) = delete; + DeviceFaultInfoEXT & operator=( DeviceFaultInfoEXT const & ) = delete; + + DeviceFaultInfoEXT( DeviceFaultInfoEXT && rhs ) VULKAN_HPP_NOEXCEPT + : pNext{ rhs.pNext } + , pAddressInfos{ rhs.pAddressInfos } + , pVendorInfos{ rhs.pVendorInfos } + , pVendorBinaryData{ rhs.pVendorBinaryData } + { + memcpy( description, rhs.description, VK_MAX_DESCRIPTION_SIZE ); + + rhs.pNext = nullptr; + memset( rhs.description, 0, VK_MAX_DESCRIPTION_SIZE ); + rhs.pAddressInfos = nullptr; + rhs.pVendorInfos = nullptr; + rhs.pVendorBinaryData = nullptr; + } + + DeviceFaultInfoEXT & operator=( DeviceFaultInfoEXT && rhs ) VULKAN_HPP_NOEXCEPT + { + free( pAddressInfos ); + free( pVendorInfos ); + free( pVendorBinaryData ); + + pNext = rhs.pNext; + memcpy( description, rhs.description, VK_MAX_DESCRIPTION_SIZE ); + pAddressInfos = rhs.pAddressInfos; + pVendorInfos = rhs.pVendorInfos; + pVendorBinaryData = rhs.pVendorBinaryData; + + rhs.pNext = nullptr; + memset( rhs.description, 0, VK_MAX_DESCRIPTION_SIZE ); + rhs.pAddressInfos = nullptr; + rhs.pVendorInfos = nullptr; + rhs.pVendorBinaryData = nullptr; + + return *this; + } + + ~DeviceFaultInfoEXT() VULKAN_HPP_NOEXCEPT + { + free( pAddressInfos ); + free( pVendorInfos ); + free( pVendorBinaryData ); + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + operator VkDeviceFaultInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceFaultInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::DeviceFaultAddressInfoEXT * const &, + VULKAN_HPP_NAMESPACE::DeviceFaultVendorInfoEXT * const &, + void * const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, description, pAddressInfos, pVendorInfos, pVendorBinaryData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DeviceFaultInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = pAddressInfos <=> rhs.pAddressInfos; cmp != 0 ) + return cmp; + if ( auto cmp = pVendorInfos <=> rhs.pVendorInfos; cmp != 0 ) + return cmp; + if ( auto cmp = pVendorBinaryData <=> rhs.pVendorBinaryData; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DeviceFaultInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( strcmp( description, rhs.description ) == 0 ) && ( pAddressInfos == rhs.pAddressInfos ) && + ( pVendorInfos == rhs.pVendorInfos ) && ( pVendorBinaryData == rhs.pVendorBinaryData ); + } + + bool operator!=( DeviceFaultInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceFaultInfoEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + VULKAN_HPP_NAMESPACE::DeviceFaultAddressInfoEXT * pAddressInfos = {}; + VULKAN_HPP_NAMESPACE::DeviceFaultVendorInfoEXT * pVendorInfos = {}; + void * pVendorBinaryData = {}; + }; + + template <> + struct CppType + { + using Type = DeviceFaultInfoEXT; + }; + + // wrapper struct for struct VkDeviceFaultVendorBinaryHeaderVersionOneEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceFaultVendorBinaryHeaderVersionOneEXT.html + struct DeviceFaultVendorBinaryHeaderVersionOneEXT + { + using NativeType = VkDeviceFaultVendorBinaryHeaderVersionOneEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT( + uint32_t headerSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionEXT headerVersion_ = VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionEXT::eOne, + uint32_t vendorID_ = {}, + uint32_t deviceID_ = {}, + uint32_t driverVersion_ = {}, + std::array const & pipelineCacheUUID_ = {}, + uint32_t applicationNameOffset_ = {}, + uint32_t applicationVersion_ = {}, + uint32_t engineNameOffset_ = {}, + uint32_t engineVersion_ = {}, + uint32_t apiVersion_ = {} ) VULKAN_HPP_NOEXCEPT + : headerSize{ headerSize_ } + , headerVersion{ headerVersion_ } + , vendorID{ vendorID_ } + , deviceID{ deviceID_ } + , driverVersion{ driverVersion_ } + , pipelineCacheUUID{ pipelineCacheUUID_ } + , applicationNameOffset{ applicationNameOffset_ } + , applicationVersion{ applicationVersion_ } + , engineNameOffset{ engineNameOffset_ } + , engineVersion{ engineVersion_ } + , apiVersion{ apiVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT( DeviceFaultVendorBinaryHeaderVersionOneEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceFaultVendorBinaryHeaderVersionOneEXT( VkDeviceFaultVendorBinaryHeaderVersionOneEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceFaultVendorBinaryHeaderVersionOneEXT( *reinterpret_cast( &rhs ) ) + { + } + + DeviceFaultVendorBinaryHeaderVersionOneEXT & operator=( DeviceFaultVendorBinaryHeaderVersionOneEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceFaultVendorBinaryHeaderVersionOneEXT & operator=( VkDeviceFaultVendorBinaryHeaderVersionOneEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setHeaderSize( uint32_t headerSize_ ) VULKAN_HPP_NOEXCEPT + { + headerSize = headerSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & + setHeaderVersion( VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionEXT headerVersion_ ) VULKAN_HPP_NOEXCEPT + { + headerVersion = headerVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setVendorID( uint32_t vendorID_ ) VULKAN_HPP_NOEXCEPT + { + vendorID = vendorID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setDeviceID( uint32_t deviceID_ ) VULKAN_HPP_NOEXCEPT + { + deviceID = deviceID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setDriverVersion( uint32_t driverVersion_ ) VULKAN_HPP_NOEXCEPT + { + driverVersion = driverVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & + setPipelineCacheUUID( std::array pipelineCacheUUID_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCacheUUID = pipelineCacheUUID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setApplicationNameOffset( uint32_t applicationNameOffset_ ) VULKAN_HPP_NOEXCEPT + { + applicationNameOffset = applicationNameOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setApplicationVersion( uint32_t applicationVersion_ ) VULKAN_HPP_NOEXCEPT + { + applicationVersion = applicationVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setEngineNameOffset( uint32_t engineNameOffset_ ) VULKAN_HPP_NOEXCEPT + { + engineNameOffset = engineNameOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setEngineVersion( uint32_t engineVersion_ ) VULKAN_HPP_NOEXCEPT + { + engineVersion = engineVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceFaultVendorBinaryHeaderVersionOneEXT & setApiVersion( uint32_t apiVersion_ ) VULKAN_HPP_NOEXCEPT + { + apiVersion = apiVersion_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceFaultVendorBinaryHeaderVersionOneEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultVendorBinaryHeaderVersionOneEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceFaultVendorBinaryHeaderVersionOneEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceFaultVendorBinaryHeaderVersionOneEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( headerSize, + headerVersion, + vendorID, + deviceID, + driverVersion, + pipelineCacheUUID, + applicationNameOffset, + applicationVersion, + engineNameOffset, + engineVersion, + apiVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceFaultVendorBinaryHeaderVersionOneEXT const & ) const = default; +#else + bool operator==( DeviceFaultVendorBinaryHeaderVersionOneEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( headerSize == rhs.headerSize ) && ( headerVersion == rhs.headerVersion ) && ( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && + ( driverVersion == rhs.driverVersion ) && ( pipelineCacheUUID == rhs.pipelineCacheUUID ) && + ( applicationNameOffset == rhs.applicationNameOffset ) && ( applicationVersion == rhs.applicationVersion ) && + ( engineNameOffset == rhs.engineNameOffset ) && ( engineVersion == rhs.engineVersion ) && ( apiVersion == rhs.apiVersion ); +# endif + } + + bool operator!=( DeviceFaultVendorBinaryHeaderVersionOneEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t headerSize = {}; + VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionEXT headerVersion = VULKAN_HPP_NAMESPACE::DeviceFaultVendorBinaryHeaderVersionEXT::eOne; + uint32_t vendorID = {}; + uint32_t deviceID = {}; + uint32_t driverVersion = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineCacheUUID = {}; + uint32_t applicationNameOffset = {}; + uint32_t applicationVersion = {}; + uint32_t engineNameOffset = {}; + uint32_t engineVersion = {}; + uint32_t apiVersion = {}; + }; + + // wrapper struct for struct VkDeviceGroupBindSparseInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupBindSparseInfo.html + struct DeviceGroupBindSparseInfo + { + using NativeType = VkDeviceGroupBindSparseInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupBindSparseInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DeviceGroupBindSparseInfo( uint32_t resourceDeviceIndex_ = {}, uint32_t memoryDeviceIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , resourceDeviceIndex{ resourceDeviceIndex_ } + , memoryDeviceIndex{ memoryDeviceIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupBindSparseInfo( DeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupBindSparseInfo( VkDeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupBindSparseInfo( *reinterpret_cast( &rhs ) ) + { + } + + DeviceGroupBindSparseInfo & operator=( DeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupBindSparseInfo & operator=( VkDeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setResourceDeviceIndex( uint32_t resourceDeviceIndex_ ) VULKAN_HPP_NOEXCEPT + { + resourceDeviceIndex = resourceDeviceIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setMemoryDeviceIndex( uint32_t memoryDeviceIndex_ ) VULKAN_HPP_NOEXCEPT + { + memoryDeviceIndex = memoryDeviceIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupBindSparseInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupBindSparseInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupBindSparseInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, resourceDeviceIndex, memoryDeviceIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupBindSparseInfo const & ) const = default; +#else + bool operator==( DeviceGroupBindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( resourceDeviceIndex == rhs.resourceDeviceIndex ) && + ( memoryDeviceIndex == rhs.memoryDeviceIndex ); +# endif + } + + bool operator!=( DeviceGroupBindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupBindSparseInfo; + const void * pNext = {}; + uint32_t resourceDeviceIndex = {}; + uint32_t memoryDeviceIndex = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupBindSparseInfo; + }; + + using DeviceGroupBindSparseInfoKHR = DeviceGroupBindSparseInfo; + + // wrapper struct for struct VkDeviceGroupCommandBufferBeginInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupCommandBufferBeginInfo.html + struct DeviceGroupCommandBufferBeginInfo + { + using NativeType = VkDeviceGroupCommandBufferBeginInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupCommandBufferBeginInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceGroupCommandBufferBeginInfo( uint32_t deviceMask_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceMask{ deviceMask_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupCommandBufferBeginInfo( DeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupCommandBufferBeginInfo( VkDeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupCommandBufferBeginInfo( *reinterpret_cast( &rhs ) ) + { + } + + DeviceGroupCommandBufferBeginInfo & operator=( DeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupCommandBufferBeginInfo & operator=( VkDeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT + { + deviceMask = deviceMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupCommandBufferBeginInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupCommandBufferBeginInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupCommandBufferBeginInfo const & ) const = default; +#else + bool operator==( DeviceGroupCommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMask == rhs.deviceMask ); +# endif + } + + bool operator!=( DeviceGroupCommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupCommandBufferBeginInfo; + const void * pNext = {}; + uint32_t deviceMask = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupCommandBufferBeginInfo; + }; + + using DeviceGroupCommandBufferBeginInfoKHR = DeviceGroupCommandBufferBeginInfo; + + // wrapper struct for struct VkDeviceGroupDeviceCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupDeviceCreateInfo.html + struct DeviceGroupDeviceCreateInfo + { + using NativeType = VkDeviceGroupDeviceCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupDeviceCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceGroupDeviceCreateInfo( uint32_t physicalDeviceCount_ = {}, + const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , physicalDeviceCount{ physicalDeviceCount_ } + , pPhysicalDevices{ pPhysicalDevices_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupDeviceCreateInfo( DeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupDeviceCreateInfo( VkDeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupDeviceCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupDeviceCreateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & physicalDevices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), physicalDeviceCount( static_cast( physicalDevices_.size() ) ), pPhysicalDevices( physicalDevices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceGroupDeviceCreateInfo & operator=( DeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupDeviceCreateInfo & operator=( VkDeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & setPhysicalDeviceCount( uint32_t physicalDeviceCount_ ) VULKAN_HPP_NOEXCEPT + { + physicalDeviceCount = physicalDeviceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & + setPPhysicalDevices( const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices_ ) VULKAN_HPP_NOEXCEPT + { + pPhysicalDevices = pPhysicalDevices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupDeviceCreateInfo & setPhysicalDevices( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & physicalDevices_ ) VULKAN_HPP_NOEXCEPT + { + physicalDeviceCount = static_cast( physicalDevices_.size() ); + pPhysicalDevices = physicalDevices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupDeviceCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupDeviceCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, physicalDeviceCount, pPhysicalDevices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupDeviceCreateInfo const & ) const = default; +#else + bool operator==( DeviceGroupDeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( physicalDeviceCount == rhs.physicalDeviceCount ) && + ( pPhysicalDevices == rhs.pPhysicalDevices ); +# endif + } + + bool operator!=( DeviceGroupDeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupDeviceCreateInfo; + const void * pNext = {}; + uint32_t physicalDeviceCount = {}; + const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupDeviceCreateInfo; + }; + + using DeviceGroupDeviceCreateInfoKHR = DeviceGroupDeviceCreateInfo; + + // wrapper struct for struct VkDeviceGroupPresentCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupPresentCapabilitiesKHR.html + struct DeviceGroupPresentCapabilitiesKHR + { + using NativeType = VkDeviceGroupPresentCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupPresentCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentCapabilitiesKHR( std::array const & presentMask_ = {}, + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentMask{ presentMask_ } + , modes{ modes_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentCapabilitiesKHR( DeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupPresentCapabilitiesKHR( VkDeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupPresentCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + DeviceGroupPresentCapabilitiesKHR & operator=( DeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupPresentCapabilitiesKHR & operator=( VkDeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDeviceGroupPresentCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupPresentCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupPresentCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupPresentCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentMask, modes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupPresentCapabilitiesKHR const & ) const = default; +#else + bool operator==( DeviceGroupPresentCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentMask == rhs.presentMask ) && ( modes == rhs.modes ); +# endif + } + + bool operator!=( DeviceGroupPresentCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupPresentCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D presentMask = {}; + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupPresentCapabilitiesKHR; + }; + + // wrapper struct for struct VkDeviceGroupPresentInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupPresentInfoKHR.html + struct DeviceGroupPresentInfoKHR + { + using NativeType = VkDeviceGroupPresentInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupPresentInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceGroupPresentInfoKHR( + uint32_t swapchainCount_ = {}, + const uint32_t * pDeviceMasks_ = {}, + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ = VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pDeviceMasks{ pDeviceMasks_ } + , mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupPresentInfoKHR( DeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupPresentInfoKHR( VkDeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupPresentInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupPresentInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceMasks_, + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ = VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( deviceMasks_.size() ) ), pDeviceMasks( deviceMasks_.data() ), mode( mode_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceGroupPresentInfoKHR & operator=( DeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupPresentInfoKHR & operator=( VkDeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setPDeviceMasks( const uint32_t * pDeviceMasks_ ) VULKAN_HPP_NOEXCEPT + { + pDeviceMasks = pDeviceMasks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupPresentInfoKHR & setDeviceMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceMasks_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( deviceMasks_.size() ); + pDeviceMasks = deviceMasks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setMode( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupPresentInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupPresentInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupPresentInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pDeviceMasks, mode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupPresentInfoKHR const & ) const = default; +#else + bool operator==( DeviceGroupPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pDeviceMasks == rhs.pDeviceMasks ) && + ( mode == rhs.mode ); +# endif + } + + bool operator!=( DeviceGroupPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupPresentInfoKHR; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const uint32_t * pDeviceMasks = {}; + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode = VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal; + }; + + template <> + struct CppType + { + using Type = DeviceGroupPresentInfoKHR; + }; + + // wrapper struct for struct VkDeviceGroupRenderPassBeginInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupRenderPassBeginInfo.html + struct DeviceGroupRenderPassBeginInfo + { + using NativeType = VkDeviceGroupRenderPassBeginInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupRenderPassBeginInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceGroupRenderPassBeginInfo( uint32_t deviceMask_ = {}, + uint32_t deviceRenderAreaCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceMask{ deviceMask_ } + , deviceRenderAreaCount{ deviceRenderAreaCount_ } + , pDeviceRenderAreas{ pDeviceRenderAreas_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupRenderPassBeginInfo( DeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupRenderPassBeginInfo( VkDeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupRenderPassBeginInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupRenderPassBeginInfo( uint32_t deviceMask_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceRenderAreas_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , deviceMask( deviceMask_ ) + , deviceRenderAreaCount( static_cast( deviceRenderAreas_.size() ) ) + , pDeviceRenderAreas( deviceRenderAreas_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceGroupRenderPassBeginInfo & operator=( DeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupRenderPassBeginInfo & operator=( VkDeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT + { + deviceMask = deviceMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setDeviceRenderAreaCount( uint32_t deviceRenderAreaCount_ ) VULKAN_HPP_NOEXCEPT + { + deviceRenderAreaCount = deviceRenderAreaCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & + setPDeviceRenderAreas( const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas_ ) VULKAN_HPP_NOEXCEPT + { + pDeviceRenderAreas = pDeviceRenderAreas_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupRenderPassBeginInfo & + setDeviceRenderAreas( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & deviceRenderAreas_ ) VULKAN_HPP_NOEXCEPT + { + deviceRenderAreaCount = static_cast( deviceRenderAreas_.size() ); + pDeviceRenderAreas = deviceRenderAreas_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupRenderPassBeginInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupRenderPassBeginInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceMask, deviceRenderAreaCount, pDeviceRenderAreas ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupRenderPassBeginInfo const & ) const = default; +#else + bool operator==( DeviceGroupRenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMask == rhs.deviceMask ) && ( deviceRenderAreaCount == rhs.deviceRenderAreaCount ) && + ( pDeviceRenderAreas == rhs.pDeviceRenderAreas ); +# endif + } + + bool operator!=( DeviceGroupRenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupRenderPassBeginInfo; + const void * pNext = {}; + uint32_t deviceMask = {}; + uint32_t deviceRenderAreaCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupRenderPassBeginInfo; + }; + + using DeviceGroupRenderPassBeginInfoKHR = DeviceGroupRenderPassBeginInfo; + + // wrapper struct for struct VkDeviceGroupSubmitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupSubmitInfo.html + struct DeviceGroupSubmitInfo + { + using NativeType = VkDeviceGroupSubmitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupSubmitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceGroupSubmitInfo( uint32_t waitSemaphoreCount_ = {}, + const uint32_t * pWaitSemaphoreDeviceIndices_ = {}, + uint32_t commandBufferCount_ = {}, + const uint32_t * pCommandBufferDeviceMasks_ = {}, + uint32_t signalSemaphoreCount_ = {}, + const uint32_t * pSignalSemaphoreDeviceIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , waitSemaphoreCount{ waitSemaphoreCount_ } + , pWaitSemaphoreDeviceIndices{ pWaitSemaphoreDeviceIndices_ } + , commandBufferCount{ commandBufferCount_ } + , pCommandBufferDeviceMasks{ pCommandBufferDeviceMasks_ } + , signalSemaphoreCount{ signalSemaphoreCount_ } + , pSignalSemaphoreDeviceIndices{ pSignalSemaphoreDeviceIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupSubmitInfo( DeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupSubmitInfo( VkDeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupSubmitInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupSubmitInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreDeviceIndices_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferDeviceMasks_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreDeviceIndices_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , waitSemaphoreCount( static_cast( waitSemaphoreDeviceIndices_.size() ) ) + , pWaitSemaphoreDeviceIndices( waitSemaphoreDeviceIndices_.data() ) + , commandBufferCount( static_cast( commandBufferDeviceMasks_.size() ) ) + , pCommandBufferDeviceMasks( commandBufferDeviceMasks_.data() ) + , signalSemaphoreCount( static_cast( signalSemaphoreDeviceIndices_.size() ) ) + , pSignalSemaphoreDeviceIndices( signalSemaphoreDeviceIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DeviceGroupSubmitInfo & operator=( DeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupSubmitInfo & operator=( VkDeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = waitSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPWaitSemaphoreDeviceIndices( const uint32_t * pWaitSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphoreDeviceIndices = pWaitSemaphoreDeviceIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupSubmitInfo & + setWaitSemaphoreDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = static_cast( waitSemaphoreDeviceIndices_.size() ); + pWaitSemaphoreDeviceIndices = waitSemaphoreDeviceIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferCount = commandBufferCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPCommandBufferDeviceMasks( const uint32_t * pCommandBufferDeviceMasks_ ) VULKAN_HPP_NOEXCEPT + { + pCommandBufferDeviceMasks = pCommandBufferDeviceMasks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupSubmitInfo & + setCommandBufferDeviceMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferDeviceMasks_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferCount = static_cast( commandBufferDeviceMasks_.size() ); + pCommandBufferDeviceMasks = commandBufferDeviceMasks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreCount = signalSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPSignalSemaphoreDeviceIndices( const uint32_t * pSignalSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + pSignalSemaphoreDeviceIndices = pSignalSemaphoreDeviceIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DeviceGroupSubmitInfo & + setSignalSemaphoreDeviceIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreCount = static_cast( signalSemaphoreDeviceIndices_.size() ); + pSignalSemaphoreDeviceIndices = signalSemaphoreDeviceIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupSubmitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupSubmitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupSubmitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupSubmitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + waitSemaphoreCount, + pWaitSemaphoreDeviceIndices, + commandBufferCount, + pCommandBufferDeviceMasks, + signalSemaphoreCount, + pSignalSemaphoreDeviceIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupSubmitInfo const & ) const = default; +#else + bool operator==( DeviceGroupSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && + ( pWaitSemaphoreDeviceIndices == rhs.pWaitSemaphoreDeviceIndices ) && ( commandBufferCount == rhs.commandBufferCount ) && + ( pCommandBufferDeviceMasks == rhs.pCommandBufferDeviceMasks ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) && + ( pSignalSemaphoreDeviceIndices == rhs.pSignalSemaphoreDeviceIndices ); +# endif + } + + bool operator!=( DeviceGroupSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupSubmitInfo; + const void * pNext = {}; + uint32_t waitSemaphoreCount = {}; + const uint32_t * pWaitSemaphoreDeviceIndices = {}; + uint32_t commandBufferCount = {}; + const uint32_t * pCommandBufferDeviceMasks = {}; + uint32_t signalSemaphoreCount = {}; + const uint32_t * pSignalSemaphoreDeviceIndices = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupSubmitInfo; + }; + + using DeviceGroupSubmitInfoKHR = DeviceGroupSubmitInfo; + + // wrapper struct for struct VkDeviceGroupSwapchainCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceGroupSwapchainCreateInfoKHR.html + struct DeviceGroupSwapchainCreateInfoKHR + { + using NativeType = VkDeviceGroupSwapchainCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupSwapchainCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceGroupSwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , modes{ modes_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceGroupSwapchainCreateInfoKHR( DeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceGroupSwapchainCreateInfoKHR( VkDeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceGroupSwapchainCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + DeviceGroupSwapchainCreateInfoKHR & operator=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceGroupSwapchainCreateInfoKHR & operator=( VkDeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR & setModes( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ ) VULKAN_HPP_NOEXCEPT + { + modes = modes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceGroupSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceGroupSwapchainCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceGroupSwapchainCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, modes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceGroupSwapchainCreateInfoKHR const & ) const = default; +#else + bool operator==( DeviceGroupSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( modes == rhs.modes ); +# endif + } + + bool operator!=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceGroupSwapchainCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes = {}; + }; + + template <> + struct CppType + { + using Type = DeviceGroupSwapchainCreateInfoKHR; + }; + + // wrapper struct for struct VkImageCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCreateInfo.html + struct ImageCreateInfo + { + using NativeType = VkImageCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ImageType imageType_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, + uint32_t mipLevels_ = {}, + uint32_t arrayLayers_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, + uint32_t queueFamilyIndexCount_ = {}, + const uint32_t * pQueueFamilyIndices_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , imageType{ imageType_ } + , format{ format_ } + , extent{ extent_ } + , mipLevels{ mipLevels_ } + , arrayLayers{ arrayLayers_ } + , samples{ samples_ } + , tiling{ tiling_ } + , usage{ usage_ } + , sharingMode{ sharingMode_ } + , queueFamilyIndexCount{ queueFamilyIndexCount_ } + , pQueueFamilyIndices{ pQueueFamilyIndices_ } + , initialLayout{ initialLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageCreateInfo( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageCreateInfo( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCreateInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ImageType imageType_, + VULKAN_HPP_NAMESPACE::Format format_, + VULKAN_HPP_NAMESPACE::Extent3D extent_, + uint32_t mipLevels_, + uint32_t arrayLayers_, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_, + VULKAN_HPP_NAMESPACE::ImageTiling tiling_, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , imageType( imageType_ ) + , format( format_ ) + , extent( extent_ ) + , mipLevels( mipLevels_ ) + , arrayLayers( arrayLayers_ ) + , samples( samples_ ) + , tiling( tiling_ ) + , usage( usage_ ) + , sharingMode( sharingMode_ ) + , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) + , pQueueFamilyIndices( queueFamilyIndices_.data() ) + , initialLayout( initialLayout_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageCreateInfo & operator=( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageCreateInfo & operator=( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setImageType( VULKAN_HPP_NAMESPACE::ImageType imageType_ ) VULKAN_HPP_NOEXCEPT + { + imageType = imageType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setMipLevels( uint32_t mipLevels_ ) VULKAN_HPP_NOEXCEPT + { + mipLevels = mipLevels_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setArrayLayers( uint32_t arrayLayers_ ) VULKAN_HPP_NOEXCEPT + { + arrayLayers = arrayLayers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT + { + samples = samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT + { + tiling = tiling_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT + { + sharingMode = sharingMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = queueFamilyIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + pQueueFamilyIndices = pQueueFamilyIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageCreateInfo & setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); + pQueueFamilyIndices = queueFamilyIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT + { + initialLayout = initialLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + imageType, + format, + extent, + mipLevels, + arrayLayers, + samples, + tiling, + usage, + sharingMode, + queueFamilyIndexCount, + pQueueFamilyIndices, + initialLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageCreateInfo const & ) const = default; +#else + bool operator==( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( imageType == rhs.imageType ) && ( format == rhs.format ) && + ( extent == rhs.extent ) && ( mipLevels == rhs.mipLevels ) && ( arrayLayers == rhs.arrayLayers ) && ( samples == rhs.samples ) && + ( tiling == rhs.tiling ) && ( usage == rhs.usage ) && ( sharingMode == rhs.sharingMode ) && + ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && + ( initialLayout == rhs.initialLayout ); +# endif + } + + bool operator!=( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::ImageType imageType = VULKAN_HPP_NAMESPACE::ImageType::e1D; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Extent3D extent = {}; + uint32_t mipLevels = {}; + uint32_t arrayLayers = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; + VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; + uint32_t queueFamilyIndexCount = {}; + const uint32_t * pQueueFamilyIndices = {}; + VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + template <> + struct CppType + { + using Type = ImageCreateInfo; + }; + + // wrapper struct for struct VkDeviceImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceImageMemoryRequirements.html + struct DeviceImageMemoryRequirements + { + using NativeType = VkDeviceImageMemoryRequirements; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceImageMemoryRequirements; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DeviceImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ = {}, + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pCreateInfo{ pCreateInfo_ } + , planeAspect{ planeAspect_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceImageMemoryRequirements( DeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceImageMemoryRequirements( VkDeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceImageMemoryRequirements( *reinterpret_cast( &rhs ) ) + { + } + + DeviceImageMemoryRequirements & operator=( DeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceImageMemoryRequirements & operator=( VkDeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPCreateInfo( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT + { + pCreateInfo = pCreateInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT + { + planeAspect = planeAspect_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceImageMemoryRequirements const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceImageMemoryRequirements *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pCreateInfo, planeAspect ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceImageMemoryRequirements const & ) const = default; +#else + bool operator==( DeviceImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ) && ( planeAspect == rhs.planeAspect ); +# endif + } + + bool operator!=( DeviceImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceImageMemoryRequirements; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo = {}; + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; + }; + + template <> + struct CppType + { + using Type = DeviceImageMemoryRequirements; + }; + + using DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirements; + + // wrapper struct for struct VkImageSubresource2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageSubresource2.html + struct ImageSubresource2 + { + using NativeType = VkImageSubresource2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSubresource2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageSubresource2( VULKAN_HPP_NAMESPACE::ImageSubresource imageSubresource_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageSubresource{ imageSubresource_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageSubresource2( ImageSubresource2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageSubresource2( VkImageSubresource2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageSubresource2( *reinterpret_cast( &rhs ) ) {} + + ImageSubresource2 & operator=( ImageSubresource2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageSubresource2 & operator=( VkImageSubresource2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageSubresource2 & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSubresource2 & setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresource const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT + { + imageSubresource = imageSubresource_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageSubresource2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresource2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSubresource2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageSubresource2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageSubresource ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageSubresource2 const & ) const = default; +#else + bool operator==( ImageSubresource2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageSubresource == rhs.imageSubresource ); +# endif + } + + bool operator!=( ImageSubresource2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageSubresource2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageSubresource imageSubresource = {}; + }; + + template <> + struct CppType + { + using Type = ImageSubresource2; + }; + + using ImageSubresource2EXT = ImageSubresource2; + using ImageSubresource2KHR = ImageSubresource2; + + // wrapper struct for struct VkDeviceImageSubresourceInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceImageSubresourceInfo.html + struct DeviceImageSubresourceInfo + { + using NativeType = VkDeviceImageSubresourceInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceImageSubresourceInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceImageSubresourceInfo( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ = {}, + const VULKAN_HPP_NAMESPACE::ImageSubresource2 * pSubresource_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pCreateInfo{ pCreateInfo_ } + , pSubresource{ pSubresource_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceImageSubresourceInfo( DeviceImageSubresourceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceImageSubresourceInfo( VkDeviceImageSubresourceInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceImageSubresourceInfo( *reinterpret_cast( &rhs ) ) + { + } + + DeviceImageSubresourceInfo & operator=( DeviceImageSubresourceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceImageSubresourceInfo & operator=( VkDeviceImageSubresourceInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceImageSubresourceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceImageSubresourceInfo & setPCreateInfo( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT + { + pCreateInfo = pCreateInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceImageSubresourceInfo & setPSubresource( const VULKAN_HPP_NAMESPACE::ImageSubresource2 * pSubresource_ ) VULKAN_HPP_NOEXCEPT + { + pSubresource = pSubresource_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceImageSubresourceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceImageSubresourceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceImageSubresourceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceImageSubresourceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pCreateInfo, pSubresource ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceImageSubresourceInfo const & ) const = default; +#else + bool operator==( DeviceImageSubresourceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ) && ( pSubresource == rhs.pSubresource ); +# endif + } + + bool operator!=( DeviceImageSubresourceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceImageSubresourceInfo; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo = {}; + const VULKAN_HPP_NAMESPACE::ImageSubresource2 * pSubresource = {}; + }; + + template <> + struct CppType + { + using Type = DeviceImageSubresourceInfo; + }; + + using DeviceImageSubresourceInfoKHR = DeviceImageSubresourceInfo; + + // wrapper struct for struct VkDeviceMemoryOpaqueCaptureAddressInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemoryOpaqueCaptureAddressInfo.html + struct DeviceMemoryOpaqueCaptureAddressInfo + { + using NativeType = VkDeviceMemoryOpaqueCaptureAddressInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceMemoryOpaqueCaptureAddressInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceMemoryOpaqueCaptureAddressInfo( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceMemoryOpaqueCaptureAddressInfo( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceMemoryOpaqueCaptureAddressInfo( VkDeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceMemoryOpaqueCaptureAddressInfo( *reinterpret_cast( &rhs ) ) + { + } + + DeviceMemoryOpaqueCaptureAddressInfo & operator=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceMemoryOpaqueCaptureAddressInfo & operator=( VkDeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceMemoryOpaqueCaptureAddressInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceMemoryOpaqueCaptureAddressInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceMemoryOpaqueCaptureAddressInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceMemoryOpaqueCaptureAddressInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceMemoryOpaqueCaptureAddressInfo const & ) const = default; +#else + bool operator==( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ); +# endif + } + + bool operator!=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceMemoryOpaqueCaptureAddressInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + }; + + template <> + struct CppType + { + using Type = DeviceMemoryOpaqueCaptureAddressInfo; + }; + + using DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo; + + // wrapper struct for struct VkDeviceMemoryOverallocationCreateInfoAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceMemoryOverallocationCreateInfoAMD.html + struct DeviceMemoryOverallocationCreateInfoAMD + { + using NativeType = VkDeviceMemoryOverallocationCreateInfoAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceMemoryOverallocationCreateInfoAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceMemoryOverallocationCreateInfoAMD( + VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior_ = VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD::eDefault, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , overallocationBehavior{ overallocationBehavior_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceMemoryOverallocationCreateInfoAMD( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceMemoryOverallocationCreateInfoAMD( VkDeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceMemoryOverallocationCreateInfoAMD( *reinterpret_cast( &rhs ) ) + { + } + + DeviceMemoryOverallocationCreateInfoAMD & operator=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceMemoryOverallocationCreateInfoAMD & operator=( VkDeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD & + setOverallocationBehavior( VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior_ ) VULKAN_HPP_NOEXCEPT + { + overallocationBehavior = overallocationBehavior_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceMemoryOverallocationCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceMemoryOverallocationCreateInfoAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceMemoryOverallocationCreateInfoAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceMemoryOverallocationCreateInfoAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, overallocationBehavior ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceMemoryOverallocationCreateInfoAMD const & ) const = default; +#else + bool operator==( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( overallocationBehavior == rhs.overallocationBehavior ); +# endif + } + + bool operator!=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceMemoryOverallocationCreateInfoAMD; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior = VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD::eDefault; + }; + + template <> + struct CppType + { + using Type = DeviceMemoryOverallocationCreateInfoAMD; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + union DeviceOrHostAddressConstAMDX + { + using NativeType = VkDeviceOrHostAddressConstAMDX; +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstAMDX( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} ) : deviceAddress( deviceAddress_ ) {} + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstAMDX( const void * hostAddress_ ) : hostAddress( hostAddress_ ) {} +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstAMDX & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstAMDX & setHostAddress( const void * hostAddress_ ) VULKAN_HPP_NOEXCEPT + { + hostAddress = hostAddress_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceOrHostAddressConstAMDX const &() const + { + return *reinterpret_cast( this ); + } + + operator VkDeviceOrHostAddressConstAMDX &() + { + return *reinterpret_cast( this ); + } + +# ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress; + const void * hostAddress; +# else + VkDeviceAddress deviceAddress; + const void * hostAddress; +# endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkDevicePipelineBinaryInternalCacheControlKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDevicePipelineBinaryInternalCacheControlKHR.html + struct DevicePipelineBinaryInternalCacheControlKHR + { + using NativeType = VkDevicePipelineBinaryInternalCacheControlKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDevicePipelineBinaryInternalCacheControlKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DevicePipelineBinaryInternalCacheControlKHR( VULKAN_HPP_NAMESPACE::Bool32 disableInternalCache_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , disableInternalCache{ disableInternalCache_ } + { + } + + VULKAN_HPP_CONSTEXPR DevicePipelineBinaryInternalCacheControlKHR( DevicePipelineBinaryInternalCacheControlKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DevicePipelineBinaryInternalCacheControlKHR( VkDevicePipelineBinaryInternalCacheControlKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DevicePipelineBinaryInternalCacheControlKHR( *reinterpret_cast( &rhs ) ) + { + } + + DevicePipelineBinaryInternalCacheControlKHR & operator=( DevicePipelineBinaryInternalCacheControlKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DevicePipelineBinaryInternalCacheControlKHR & operator=( VkDevicePipelineBinaryInternalCacheControlKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DevicePipelineBinaryInternalCacheControlKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DevicePipelineBinaryInternalCacheControlKHR & + setDisableInternalCache( VULKAN_HPP_NAMESPACE::Bool32 disableInternalCache_ ) VULKAN_HPP_NOEXCEPT + { + disableInternalCache = disableInternalCache_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDevicePipelineBinaryInternalCacheControlKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDevicePipelineBinaryInternalCacheControlKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDevicePipelineBinaryInternalCacheControlKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDevicePipelineBinaryInternalCacheControlKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, disableInternalCache ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DevicePipelineBinaryInternalCacheControlKHR const & ) const = default; +#else + bool operator==( DevicePipelineBinaryInternalCacheControlKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( disableInternalCache == rhs.disableInternalCache ); +# endif + } + + bool operator!=( DevicePipelineBinaryInternalCacheControlKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDevicePipelineBinaryInternalCacheControlKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 disableInternalCache = {}; + }; + + template <> + struct CppType + { + using Type = DevicePipelineBinaryInternalCacheControlKHR; + }; + + // wrapper struct for struct VkDevicePrivateDataCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDevicePrivateDataCreateInfo.html + struct DevicePrivateDataCreateInfo + { + using NativeType = VkDevicePrivateDataCreateInfo; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDevicePrivateDataCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DevicePrivateDataCreateInfo( uint32_t privateDataSlotRequestCount_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , privateDataSlotRequestCount{ privateDataSlotRequestCount_ } + { + } + + VULKAN_HPP_CONSTEXPR DevicePrivateDataCreateInfo( DevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DevicePrivateDataCreateInfo( VkDevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DevicePrivateDataCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + DevicePrivateDataCreateInfo & operator=( DevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DevicePrivateDataCreateInfo & operator=( VkDevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfo & setPrivateDataSlotRequestCount( uint32_t privateDataSlotRequestCount_ ) VULKAN_HPP_NOEXCEPT + { + privateDataSlotRequestCount = privateDataSlotRequestCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDevicePrivateDataCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDevicePrivateDataCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDevicePrivateDataCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDevicePrivateDataCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, privateDataSlotRequestCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DevicePrivateDataCreateInfo const & ) const = default; +#else + bool operator==( DevicePrivateDataCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( privateDataSlotRequestCount == rhs.privateDataSlotRequestCount ); +# endif + } + + bool operator!=( DevicePrivateDataCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDevicePrivateDataCreateInfo; + const void * pNext = {}; + uint32_t privateDataSlotRequestCount = {}; + }; + + template <> + struct CppType + { + using Type = DevicePrivateDataCreateInfo; + }; + + using DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfo; + + // wrapper struct for struct VkDeviceQueueGlobalPriorityCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceQueueGlobalPriorityCreateInfo.html + struct DeviceQueueGlobalPriorityCreateInfo + { + using NativeType = VkDeviceQueueGlobalPriorityCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueGlobalPriorityCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DeviceQueueGlobalPriorityCreateInfo( VULKAN_HPP_NAMESPACE::QueueGlobalPriority globalPriority_ = VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , globalPriority{ globalPriority_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceQueueGlobalPriorityCreateInfo( DeviceQueueGlobalPriorityCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceQueueGlobalPriorityCreateInfo( VkDeviceQueueGlobalPriorityCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceQueueGlobalPriorityCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + DeviceQueueGlobalPriorityCreateInfo & operator=( DeviceQueueGlobalPriorityCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceQueueGlobalPriorityCreateInfo & operator=( VkDeviceQueueGlobalPriorityCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfo & + setGlobalPriority( VULKAN_HPP_NAMESPACE::QueueGlobalPriority globalPriority_ ) VULKAN_HPP_NOEXCEPT + { + globalPriority = globalPriority_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceQueueGlobalPriorityCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueGlobalPriorityCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueGlobalPriorityCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceQueueGlobalPriorityCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, globalPriority ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceQueueGlobalPriorityCreateInfo const & ) const = default; +#else + bool operator==( DeviceQueueGlobalPriorityCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriority == rhs.globalPriority ); +# endif + } + + bool operator!=( DeviceQueueGlobalPriorityCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueGlobalPriorityCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::QueueGlobalPriority globalPriority = VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow; + }; + + template <> + struct CppType + { + using Type = DeviceQueueGlobalPriorityCreateInfo; + }; + + using DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfo; + using DeviceQueueGlobalPriorityCreateInfoKHR = DeviceQueueGlobalPriorityCreateInfo; + + // wrapper struct for struct VkDeviceQueueInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceQueueInfo2.html + struct DeviceQueueInfo2 + { + using NativeType = VkDeviceQueueInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceQueueInfo2( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ = {}, + uint32_t queueFamilyIndex_ = {}, + uint32_t queueIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , queueFamilyIndex{ queueFamilyIndex_ } + , queueIndex{ queueIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceQueueInfo2( DeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceQueueInfo2( VkDeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : DeviceQueueInfo2( *reinterpret_cast( &rhs ) ) {} + + DeviceQueueInfo2 & operator=( DeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceQueueInfo2 & operator=( VkDeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndex = queueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setQueueIndex( uint32_t queueIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueIndex = queueIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceQueueInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceQueueInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, queueFamilyIndex, queueIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceQueueInfo2 const & ) const = default; +#else + bool operator==( DeviceQueueInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && + ( queueIndex == rhs.queueIndex ); +# endif + } + + bool operator!=( DeviceQueueInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags = {}; + uint32_t queueFamilyIndex = {}; + uint32_t queueIndex = {}; + }; + + template <> + struct CppType + { + using Type = DeviceQueueInfo2; + }; + + // wrapper struct for struct VkDeviceQueueShaderCoreControlCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceQueueShaderCoreControlCreateInfoARM.html + struct DeviceQueueShaderCoreControlCreateInfoARM + { + using NativeType = VkDeviceQueueShaderCoreControlCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueShaderCoreControlCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceQueueShaderCoreControlCreateInfoARM( uint32_t shaderCoreCount_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderCoreCount{ shaderCoreCount_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceQueueShaderCoreControlCreateInfoARM( DeviceQueueShaderCoreControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceQueueShaderCoreControlCreateInfoARM( VkDeviceQueueShaderCoreControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceQueueShaderCoreControlCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + DeviceQueueShaderCoreControlCreateInfoARM & operator=( DeviceQueueShaderCoreControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceQueueShaderCoreControlCreateInfoARM & operator=( VkDeviceQueueShaderCoreControlCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceQueueShaderCoreControlCreateInfoARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceQueueShaderCoreControlCreateInfoARM & setShaderCoreCount( uint32_t shaderCoreCount_ ) VULKAN_HPP_NOEXCEPT + { + shaderCoreCount = shaderCoreCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceQueueShaderCoreControlCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueShaderCoreControlCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceQueueShaderCoreControlCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceQueueShaderCoreControlCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderCoreCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceQueueShaderCoreControlCreateInfoARM const & ) const = default; +#else + bool operator==( DeviceQueueShaderCoreControlCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCoreCount == rhs.shaderCoreCount ); +# endif + } + + bool operator!=( DeviceQueueShaderCoreControlCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueShaderCoreControlCreateInfoARM; + void * pNext = {}; + uint32_t shaderCoreCount = {}; + }; + + template <> + struct CppType + { + using Type = DeviceQueueShaderCoreControlCreateInfoARM; + }; + + // wrapper struct for struct VkTensorDescriptionARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorDescriptionARM.html + struct TensorDescriptionARM + { + using NativeType = VkTensorDescriptionARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorDescriptionARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorDescriptionARM( VULKAN_HPP_NAMESPACE::TensorTilingARM tiling_ = VULKAN_HPP_NAMESPACE::TensorTilingARM::eOptimal, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint32_t dimensionCount_ = {}, + const int64_t * pDimensions_ = {}, + const int64_t * pStrides_ = {}, + VULKAN_HPP_NAMESPACE::TensorUsageFlagsARM usage_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tiling{ tiling_ } + , format{ format_ } + , dimensionCount{ dimensionCount_ } + , pDimensions{ pDimensions_ } + , pStrides{ pStrides_ } + , usage{ usage_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorDescriptionARM( TensorDescriptionARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorDescriptionARM( VkTensorDescriptionARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorDescriptionARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorDescriptionARM( VULKAN_HPP_NAMESPACE::TensorTilingARM tiling_, + VULKAN_HPP_NAMESPACE::Format format_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dimensions_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & strides_ = {}, + VULKAN_HPP_NAMESPACE::TensorUsageFlagsARM usage_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , tiling( tiling_ ) + , format( format_ ) + , dimensionCount( static_cast( dimensions_.size() ) ) + , pDimensions( dimensions_.data() ) + , pStrides( strides_.data() ) + , usage( usage_ ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( strides_.empty() || ( dimensions_.size() == strides_.size() ) ); +# else + if ( !strides_.empty() && ( dimensions_.size() != strides_.size() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::TensorDescriptionARM::TensorDescriptionARM: !strides_.empty() && ( dimensions_.size() != strides_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + TensorDescriptionARM & operator=( TensorDescriptionARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorDescriptionARM & operator=( VkTensorDescriptionARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setTiling( VULKAN_HPP_NAMESPACE::TensorTilingARM tiling_ ) VULKAN_HPP_NOEXCEPT + { + tiling = tiling_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setDimensionCount( uint32_t dimensionCount_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = dimensionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setPDimensions( const int64_t * pDimensions_ ) VULKAN_HPP_NOEXCEPT + { + pDimensions = pDimensions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorDescriptionARM & setDimensions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dimensions_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = static_cast( dimensions_.size() ); + pDimensions = dimensions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setPStrides( const int64_t * pStrides_ ) VULKAN_HPP_NOEXCEPT + { + pStrides = pStrides_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorDescriptionARM & setStrides( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & strides_ ) VULKAN_HPP_NOEXCEPT + { + dimensionCount = static_cast( strides_.size() ); + pStrides = strides_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 TensorDescriptionARM & setUsage( VULKAN_HPP_NAMESPACE::TensorUsageFlagsARM usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorDescriptionARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorDescriptionARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorDescriptionARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorDescriptionARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tiling, format, dimensionCount, pDimensions, pStrides, usage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorDescriptionARM const & ) const = default; +#else + bool operator==( TensorDescriptionARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tiling == rhs.tiling ) && ( format == rhs.format ) && + ( dimensionCount == rhs.dimensionCount ) && ( pDimensions == rhs.pDimensions ) && ( pStrides == rhs.pStrides ) && ( usage == rhs.usage ); +# endif + } + + bool operator!=( TensorDescriptionARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorDescriptionARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorTilingARM tiling = VULKAN_HPP_NAMESPACE::TensorTilingARM::eOptimal; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint32_t dimensionCount = {}; + const int64_t * pDimensions = {}; + const int64_t * pStrides = {}; + VULKAN_HPP_NAMESPACE::TensorUsageFlagsARM usage = {}; + }; + + template <> + struct CppType + { + using Type = TensorDescriptionARM; + }; + + // wrapper struct for struct VkTensorCreateInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorCreateInfoARM.html + struct TensorCreateInfoARM + { + using NativeType = VkTensorCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorCreateInfoARM( VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags_ = {}, + const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription_ = {}, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, + uint32_t queueFamilyIndexCount_ = {}, + const uint32_t * pQueueFamilyIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pDescription{ pDescription_ } + , sharingMode{ sharingMode_ } + , queueFamilyIndexCount{ queueFamilyIndexCount_ } + , pQueueFamilyIndices{ pQueueFamilyIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorCreateInfoARM( TensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorCreateInfoARM( VkTensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT : TensorCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorCreateInfoARM( VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags_, + const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription_, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , pDescription( pDescription_ ) + , sharingMode( sharingMode_ ) + , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) + , pQueueFamilyIndices( queueFamilyIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + TensorCreateInfoARM & operator=( TensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorCreateInfoARM & operator=( VkTensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCreateInfoARM & setFlags( VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCreateInfoARM & setPDescription( const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription_ ) VULKAN_HPP_NOEXCEPT + { + pDescription = pDescription_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCreateInfoARM & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT + { + sharingMode = sharingMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCreateInfoARM & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = queueFamilyIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCreateInfoARM & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + pQueueFamilyIndices = pQueueFamilyIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TensorCreateInfoARM & setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); + pQueueFamilyIndices = queueFamilyIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pDescription, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorCreateInfoARM const & ) const = default; +#else + bool operator==( TensorCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pDescription == rhs.pDescription ) && + ( sharingMode == rhs.sharingMode ) && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ); +# endif + } + + bool operator!=( TensorCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorCreateInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags = {}; + const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription = {}; + VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; + uint32_t queueFamilyIndexCount = {}; + const uint32_t * pQueueFamilyIndices = {}; + }; + + template <> + struct CppType + { + using Type = TensorCreateInfoARM; + }; + + // wrapper struct for struct VkDeviceTensorMemoryRequirementsARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDeviceTensorMemoryRequirementsARM.html + struct DeviceTensorMemoryRequirementsARM + { + using NativeType = VkDeviceTensorMemoryRequirementsARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceTensorMemoryRequirementsARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DeviceTensorMemoryRequirementsARM( const VULKAN_HPP_NAMESPACE::TensorCreateInfoARM * pCreateInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pCreateInfo{ pCreateInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR DeviceTensorMemoryRequirementsARM( DeviceTensorMemoryRequirementsARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DeviceTensorMemoryRequirementsARM( VkDeviceTensorMemoryRequirementsARM const & rhs ) VULKAN_HPP_NOEXCEPT + : DeviceTensorMemoryRequirementsARM( *reinterpret_cast( &rhs ) ) + { + } + + DeviceTensorMemoryRequirementsARM & operator=( DeviceTensorMemoryRequirementsARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DeviceTensorMemoryRequirementsARM & operator=( VkDeviceTensorMemoryRequirementsARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DeviceTensorMemoryRequirementsARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DeviceTensorMemoryRequirementsARM & + setPCreateInfo( const VULKAN_HPP_NAMESPACE::TensorCreateInfoARM * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT + { + pCreateInfo = pCreateInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDeviceTensorMemoryRequirementsARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceTensorMemoryRequirementsARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDeviceTensorMemoryRequirementsARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDeviceTensorMemoryRequirementsARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pCreateInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DeviceTensorMemoryRequirementsARM const & ) const = default; +#else + bool operator==( DeviceTensorMemoryRequirementsARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ); +# endif + } + + bool operator!=( DeviceTensorMemoryRequirementsARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceTensorMemoryRequirementsARM; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::TensorCreateInfoARM * pCreateInfo = {}; + }; + + template <> + struct CppType + { + using Type = DeviceTensorMemoryRequirementsARM; + }; + + typedef PFN_vkVoidFunction( VKAPI_PTR * PFN_GetInstanceProcAddrLUNARG )( VULKAN_HPP_NAMESPACE::Instance instance, const char * pName ); + + // wrapper struct for struct VkDirectDriverLoadingInfoLUNARG, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDirectDriverLoadingInfoLUNARG.html + struct DirectDriverLoadingInfoLUNARG + { + using NativeType = VkDirectDriverLoadingInfoLUNARG; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDirectDriverLoadingInfoLUNARG; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DirectDriverLoadingInfoLUNARG( VULKAN_HPP_NAMESPACE::DirectDriverLoadingFlagsLUNARG flags_ = {}, + VULKAN_HPP_NAMESPACE::PFN_GetInstanceProcAddrLUNARG pfnGetInstanceProcAddr_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pfnGetInstanceProcAddr{ pfnGetInstanceProcAddr_ } + { + } + + VULKAN_HPP_CONSTEXPR DirectDriverLoadingInfoLUNARG( DirectDriverLoadingInfoLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DirectDriverLoadingInfoLUNARG( VkDirectDriverLoadingInfoLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT + : DirectDriverLoadingInfoLUNARG( *reinterpret_cast( &rhs ) ) + { + } + + DirectDriverLoadingInfoLUNARG & operator=( DirectDriverLoadingInfoLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DirectDriverLoadingInfoLUNARG & operator=( VkDirectDriverLoadingInfoLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingInfoLUNARG & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingInfoLUNARG & setFlags( VULKAN_HPP_NAMESPACE::DirectDriverLoadingFlagsLUNARG flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingInfoLUNARG & + setPfnGetInstanceProcAddr( VULKAN_HPP_NAMESPACE::PFN_GetInstanceProcAddrLUNARG pfnGetInstanceProcAddr_ ) VULKAN_HPP_NOEXCEPT + { + pfnGetInstanceProcAddr = pfnGetInstanceProcAddr_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDirectDriverLoadingInfoLUNARG const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDirectDriverLoadingInfoLUNARG &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDirectDriverLoadingInfoLUNARG const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDirectDriverLoadingInfoLUNARG *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pfnGetInstanceProcAddr ); + } +#endif + + bool operator==( DirectDriverLoadingInfoLUNARG const & rhs ) const VULKAN_HPP_NOEXCEPT + { +#if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +#else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pfnGetInstanceProcAddr == rhs.pfnGetInstanceProcAddr ); +#endif + } + + bool operator!=( DirectDriverLoadingInfoLUNARG const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDirectDriverLoadingInfoLUNARG; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DirectDriverLoadingFlagsLUNARG flags = {}; + VULKAN_HPP_NAMESPACE::PFN_GetInstanceProcAddrLUNARG pfnGetInstanceProcAddr = {}; + }; + + template <> + struct CppType + { + using Type = DirectDriverLoadingInfoLUNARG; + }; + + // wrapper struct for struct VkDirectDriverLoadingListLUNARG, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDirectDriverLoadingListLUNARG.html + struct DirectDriverLoadingListLUNARG + { + using NativeType = VkDirectDriverLoadingListLUNARG; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDirectDriverLoadingListLUNARG; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DirectDriverLoadingListLUNARG( + VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG mode_ = VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG::eExclusive, + uint32_t driverCount_ = {}, + const VULKAN_HPP_NAMESPACE::DirectDriverLoadingInfoLUNARG * pDrivers_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mode{ mode_ } + , driverCount{ driverCount_ } + , pDrivers{ pDrivers_ } + { + } + + VULKAN_HPP_CONSTEXPR DirectDriverLoadingListLUNARG( DirectDriverLoadingListLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DirectDriverLoadingListLUNARG( VkDirectDriverLoadingListLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT + : DirectDriverLoadingListLUNARG( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DirectDriverLoadingListLUNARG( VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG mode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drivers_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), mode( mode_ ), driverCount( static_cast( drivers_.size() ) ), pDrivers( drivers_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + DirectDriverLoadingListLUNARG & operator=( DirectDriverLoadingListLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DirectDriverLoadingListLUNARG & operator=( VkDirectDriverLoadingListLUNARG const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingListLUNARG & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingListLUNARG & setMode( VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingListLUNARG & setDriverCount( uint32_t driverCount_ ) VULKAN_HPP_NOEXCEPT + { + driverCount = driverCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectDriverLoadingListLUNARG & + setPDrivers( const VULKAN_HPP_NAMESPACE::DirectDriverLoadingInfoLUNARG * pDrivers_ ) VULKAN_HPP_NOEXCEPT + { + pDrivers = pDrivers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + DirectDriverLoadingListLUNARG & setDrivers( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drivers_ ) VULKAN_HPP_NOEXCEPT + { + driverCount = static_cast( drivers_.size() ); + pDrivers = drivers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDirectDriverLoadingListLUNARG const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDirectDriverLoadingListLUNARG &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDirectDriverLoadingListLUNARG const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDirectDriverLoadingListLUNARG *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mode, driverCount, pDrivers ); + } +#endif + + bool operator==( DirectDriverLoadingListLUNARG const & rhs ) const VULKAN_HPP_NOEXCEPT + { +#if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +#else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mode == rhs.mode ) && ( driverCount == rhs.driverCount ) && ( pDrivers == rhs.pDrivers ); +#endif + } + + bool operator!=( DirectDriverLoadingListLUNARG const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDirectDriverLoadingListLUNARG; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG mode = VULKAN_HPP_NAMESPACE::DirectDriverLoadingModeLUNARG::eExclusive; + uint32_t driverCount = {}; + const VULKAN_HPP_NAMESPACE::DirectDriverLoadingInfoLUNARG * pDrivers = {}; + }; + + template <> + struct CppType + { + using Type = DirectDriverLoadingListLUNARG; + }; + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + // wrapper struct for struct VkDirectFBSurfaceCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDirectFBSurfaceCreateInfoEXT.html + struct DirectFBSurfaceCreateInfoEXT + { + using NativeType = VkDirectFBSurfaceCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDirectfbSurfaceCreateInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DirectFBSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ = {}, + IDirectFB * dfb_ = {}, + IDirectFBSurface * surface_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , dfb{ dfb_ } + , surface{ surface_ } + { + } + + VULKAN_HPP_CONSTEXPR DirectFBSurfaceCreateInfoEXT( DirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DirectFBSurfaceCreateInfoEXT( VkDirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DirectFBSurfaceCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DirectFBSurfaceCreateInfoEXT & operator=( DirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DirectFBSurfaceCreateInfoEXT & operator=( VkDirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setDfb( IDirectFB * dfb_ ) VULKAN_HPP_NOEXCEPT + { + dfb = dfb_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setSurface( IDirectFBSurface * surface_ ) VULKAN_HPP_NOEXCEPT + { + surface = surface_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDirectFBSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDirectFBSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDirectFBSurfaceCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDirectFBSurfaceCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, dfb, surface ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DirectFBSurfaceCreateInfoEXT const & ) const = default; +# else + bool operator==( DirectFBSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dfb == rhs.dfb ) && ( surface == rhs.surface ); +# endif + } + + bool operator!=( DirectFBSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDirectfbSurfaceCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags = {}; + IDirectFB * dfb = {}; + IDirectFBSurface * surface = {}; + }; + + template <> + struct CppType + { + using Type = DirectFBSurfaceCreateInfoEXT; + }; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkDispatchGraphCountInfoAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDispatchGraphCountInfoAMDX.html + struct DispatchGraphCountInfoAMDX + { + using NativeType = VkDispatchGraphCountInfoAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DispatchGraphCountInfoAMDX( uint32_t count_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX infos_ = {}, + uint64_t stride_ = {} ) VULKAN_HPP_NOEXCEPT + : count{ count_ } + , infos{ infos_ } + , stride{ stride_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphCountInfoAMDX( DispatchGraphCountInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DispatchGraphCountInfoAMDX( VkDispatchGraphCountInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : DispatchGraphCountInfoAMDX( *reinterpret_cast( &rhs ) ) + { + } + + DispatchGraphCountInfoAMDX & operator=( DispatchGraphCountInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DispatchGraphCountInfoAMDX & operator=( VkDispatchGraphCountInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DispatchGraphCountInfoAMDX & setCount( uint32_t count_ ) VULKAN_HPP_NOEXCEPT + { + count = count_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphCountInfoAMDX & setInfos( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX const & infos_ ) VULKAN_HPP_NOEXCEPT + { + infos = infos_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphCountInfoAMDX & setStride( uint64_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDispatchGraphCountInfoAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchGraphCountInfoAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchGraphCountInfoAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDispatchGraphCountInfoAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( count, infos, stride ); + } +# endif + + public: + uint32_t count = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX infos = {}; + uint64_t stride = {}; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkDispatchGraphInfoAMDX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDispatchGraphInfoAMDX.html + struct DispatchGraphInfoAMDX + { + using NativeType = VkDispatchGraphInfoAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 DispatchGraphInfoAMDX( uint32_t nodeIndex_ = {}, + uint32_t payloadCount_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX payloads_ = {}, + uint64_t payloadStride_ = {} ) VULKAN_HPP_NOEXCEPT + : nodeIndex{ nodeIndex_ } + , payloadCount{ payloadCount_ } + , payloads{ payloads_ } + , payloadStride{ payloadStride_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphInfoAMDX( DispatchGraphInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DispatchGraphInfoAMDX( VkDispatchGraphInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : DispatchGraphInfoAMDX( *reinterpret_cast( &rhs ) ) + { + } + + DispatchGraphInfoAMDX & operator=( DispatchGraphInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DispatchGraphInfoAMDX & operator=( VkDispatchGraphInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DispatchGraphInfoAMDX & setNodeIndex( uint32_t nodeIndex_ ) VULKAN_HPP_NOEXCEPT + { + nodeIndex = nodeIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphInfoAMDX & setPayloadCount( uint32_t payloadCount_ ) VULKAN_HPP_NOEXCEPT + { + payloadCount = payloadCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphInfoAMDX & setPayloads( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX const & payloads_ ) VULKAN_HPP_NOEXCEPT + { + payloads = payloads_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchGraphInfoAMDX & setPayloadStride( uint64_t payloadStride_ ) VULKAN_HPP_NOEXCEPT + { + payloadStride = payloadStride_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDispatchGraphInfoAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchGraphInfoAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchGraphInfoAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDispatchGraphInfoAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( nodeIndex, payloadCount, payloads, payloadStride ); + } +# endif + + public: + uint32_t nodeIndex = {}; + uint32_t payloadCount = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstAMDX payloads = {}; + uint64_t payloadStride = {}; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkDispatchIndirectCommand, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDispatchIndirectCommand.html + struct DispatchIndirectCommand + { + using NativeType = VkDispatchIndirectCommand; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DispatchIndirectCommand( uint32_t x_ = {}, uint32_t y_ = {}, uint32_t z_ = {} ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + , z{ z_ } + { + } + + VULKAN_HPP_CONSTEXPR DispatchIndirectCommand( DispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DispatchIndirectCommand( VkDispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT + : DispatchIndirectCommand( *reinterpret_cast( &rhs ) ) + { + } + + DispatchIndirectCommand & operator=( DispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DispatchIndirectCommand & operator=( VkDispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setX( uint32_t x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setY( uint32_t y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setZ( uint32_t z_ ) VULKAN_HPP_NOEXCEPT + { + z = z_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDispatchIndirectCommand const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchIndirectCommand &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchIndirectCommand const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDispatchIndirectCommand *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y, z ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DispatchIndirectCommand const & ) const = default; +#else + bool operator==( DispatchIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ); +# endif + } + + bool operator!=( DispatchIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t x = {}; + uint32_t y = {}; + uint32_t z = {}; + }; + + // wrapper struct for struct VkDispatchTileInfoQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDispatchTileInfoQCOM.html + struct DispatchTileInfoQCOM + { + using NativeType = VkDispatchTileInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDispatchTileInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DispatchTileInfoQCOM( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR DispatchTileInfoQCOM( DispatchTileInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DispatchTileInfoQCOM( VkDispatchTileInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : DispatchTileInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + DispatchTileInfoQCOM & operator=( DispatchTileInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DispatchTileInfoQCOM & operator=( VkDispatchTileInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DispatchTileInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDispatchTileInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchTileInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDispatchTileInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDispatchTileInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DispatchTileInfoQCOM const & ) const = default; +#else + bool operator==( DispatchTileInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( DispatchTileInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDispatchTileInfoQCOM; + const void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = DispatchTileInfoQCOM; + }; + + // wrapper struct for struct VkDisplayEventInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayEventInfoEXT.html + struct DisplayEventInfoEXT + { + using NativeType = VkDisplayEventInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayEventInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DisplayEventInfoEXT( VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent_ = VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT::eFirstPixelOut, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displayEvent{ displayEvent_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayEventInfoEXT( DisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayEventInfoEXT( VkDisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DisplayEventInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DisplayEventInfoEXT & operator=( DisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayEventInfoEXT & operator=( VkDisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT & setDisplayEvent( VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent_ ) VULKAN_HPP_NOEXCEPT + { + displayEvent = displayEvent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplayEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayEventInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayEventInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayEventInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, displayEvent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayEventInfoEXT const & ) const = default; +#else + bool operator==( DisplayEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayEvent == rhs.displayEvent ); +# endif + } + + bool operator!=( DisplayEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayEventInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent = VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT::eFirstPixelOut; + }; + + template <> + struct CppType + { + using Type = DisplayEventInfoEXT; + }; + + // wrapper struct for struct VkDisplayModeParametersKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeParametersKHR.html + struct DisplayModeParametersKHR + { + using NativeType = VkDisplayModeParametersKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayModeParametersKHR( VULKAN_HPP_NAMESPACE::Extent2D visibleRegion_ = {}, uint32_t refreshRate_ = {} ) VULKAN_HPP_NOEXCEPT + : visibleRegion{ visibleRegion_ } + , refreshRate{ refreshRate_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayModeParametersKHR( DisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayModeParametersKHR( VkDisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayModeParametersKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayModeParametersKHR & operator=( DisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayModeParametersKHR & operator=( VkDisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR & setVisibleRegion( VULKAN_HPP_NAMESPACE::Extent2D const & visibleRegion_ ) VULKAN_HPP_NOEXCEPT + { + visibleRegion = visibleRegion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR & setRefreshRate( uint32_t refreshRate_ ) VULKAN_HPP_NOEXCEPT + { + refreshRate = refreshRate_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplayModeParametersKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeParametersKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeParametersKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayModeParametersKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( visibleRegion, refreshRate ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayModeParametersKHR const & ) const = default; +#else + bool operator==( DisplayModeParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( visibleRegion == rhs.visibleRegion ) && ( refreshRate == rhs.refreshRate ); +# endif + } + + bool operator!=( DisplayModeParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Extent2D visibleRegion = {}; + uint32_t refreshRate = {}; + }; + + // wrapper struct for struct VkDisplayModeCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeCreateInfoKHR.html + struct DisplayModeCreateInfoKHR + { + using NativeType = VkDisplayModeCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayModeCreateInfoKHR( VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , parameters{ parameters_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayModeCreateInfoKHR( DisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayModeCreateInfoKHR( VkDisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayModeCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayModeCreateInfoKHR & operator=( DisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayModeCreateInfoKHR & operator=( VkDisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setParameters( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const & parameters_ ) VULKAN_HPP_NOEXCEPT + { + parameters = parameters_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplayModeCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayModeCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, parameters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayModeCreateInfoKHR const & ) const = default; +#else + bool operator==( DisplayModeCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( parameters == rhs.parameters ); +# endif + } + + bool operator!=( DisplayModeCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayModeCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters = {}; + }; + + template <> + struct CppType + { + using Type = DisplayModeCreateInfoKHR; + }; + + // wrapper struct for struct VkDisplayModePropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModePropertiesKHR.html + struct DisplayModePropertiesKHR + { + using NativeType = VkDisplayModePropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ = {}, + VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters_ = {} ) VULKAN_HPP_NOEXCEPT + : displayMode{ displayMode_ } + , parameters{ parameters_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayModePropertiesKHR( DisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayModePropertiesKHR( VkDisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayModePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayModePropertiesKHR & operator=( DisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayModePropertiesKHR & operator=( VkDisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayModePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayModePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( displayMode, parameters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayModePropertiesKHR const & ) const = default; +#else + bool operator==( DisplayModePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( displayMode == rhs.displayMode ) && ( parameters == rhs.parameters ); +# endif + } + + bool operator!=( DisplayModePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode = {}; + VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters = {}; + }; + + // wrapper struct for struct VkDisplayModeProperties2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeProperties2KHR.html + struct DisplayModeProperties2KHR + { + using NativeType = VkDisplayModeProperties2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeProperties2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR displayModeProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displayModeProperties{ displayModeProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayModeProperties2KHR( DisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayModeProperties2KHR( VkDisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayModeProperties2KHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayModeProperties2KHR & operator=( DisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayModeProperties2KHR & operator=( VkDisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayModeProperties2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeProperties2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeProperties2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayModeProperties2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, displayModeProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayModeProperties2KHR const & ) const = default; +#else + bool operator==( DisplayModeProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayModeProperties == rhs.displayModeProperties ); +# endif + } + + bool operator!=( DisplayModeProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayModeProperties2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR displayModeProperties = {}; + }; + + template <> + struct CppType + { + using Type = DisplayModeProperties2KHR; + }; + + // wrapper struct for struct VkDisplayModeStereoPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayModeStereoPropertiesNV.html + struct DisplayModeStereoPropertiesNV + { + using NativeType = VkDisplayModeStereoPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeStereoPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayModeStereoPropertiesNV( VULKAN_HPP_NAMESPACE::Bool32 hdmi3DSupported_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hdmi3DSupported{ hdmi3DSupported_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayModeStereoPropertiesNV( DisplayModeStereoPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayModeStereoPropertiesNV( VkDisplayModeStereoPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayModeStereoPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + DisplayModeStereoPropertiesNV & operator=( DisplayModeStereoPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayModeStereoPropertiesNV & operator=( VkDisplayModeStereoPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayModeStereoPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeStereoPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayModeStereoPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayModeStereoPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hdmi3DSupported ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayModeStereoPropertiesNV const & ) const = default; +#else + bool operator==( DisplayModeStereoPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hdmi3DSupported == rhs.hdmi3DSupported ); +# endif + } + + bool operator!=( DisplayModeStereoPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayModeStereoPropertiesNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hdmi3DSupported = {}; + }; + + template <> + struct CppType + { + using Type = DisplayModeStereoPropertiesNV; + }; + + // wrapper struct for struct VkDisplayNativeHdrSurfaceCapabilitiesAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayNativeHdrSurfaceCapabilitiesAMD.html + struct DisplayNativeHdrSurfaceCapabilitiesAMD + { + using NativeType = VkDisplayNativeHdrSurfaceCapabilitiesAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayNativeHdrSurfaceCapabilitiesAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingSupport_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , localDimmingSupport{ localDimmingSupport_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayNativeHdrSurfaceCapabilitiesAMD( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayNativeHdrSurfaceCapabilitiesAMD( VkDisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayNativeHdrSurfaceCapabilitiesAMD( *reinterpret_cast( &rhs ) ) + { + } + + DisplayNativeHdrSurfaceCapabilitiesAMD & operator=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayNativeHdrSurfaceCapabilitiesAMD & operator=( VkDisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayNativeHdrSurfaceCapabilitiesAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayNativeHdrSurfaceCapabilitiesAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayNativeHdrSurfaceCapabilitiesAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayNativeHdrSurfaceCapabilitiesAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, localDimmingSupport ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayNativeHdrSurfaceCapabilitiesAMD const & ) const = default; +#else + bool operator==( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( localDimmingSupport == rhs.localDimmingSupport ); +# endif + } + + bool operator!=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 localDimmingSupport = {}; + }; + + template <> + struct CppType + { + using Type = DisplayNativeHdrSurfaceCapabilitiesAMD; + }; + + // wrapper struct for struct VkDisplayPlaneCapabilitiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlaneCapabilitiesKHR.html + struct DisplayPlaneCapabilitiesKHR + { + using NativeType = VkDisplayPlaneCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR supportedAlpha_ = {}, + VULKAN_HPP_NAMESPACE::Offset2D minSrcPosition_ = {}, + VULKAN_HPP_NAMESPACE::Offset2D maxSrcPosition_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minSrcExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxSrcExtent_ = {}, + VULKAN_HPP_NAMESPACE::Offset2D minDstPosition_ = {}, + VULKAN_HPP_NAMESPACE::Offset2D maxDstPosition_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minDstExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxDstExtent_ = {} ) VULKAN_HPP_NOEXCEPT + : supportedAlpha{ supportedAlpha_ } + , minSrcPosition{ minSrcPosition_ } + , maxSrcPosition{ maxSrcPosition_ } + , minSrcExtent{ minSrcExtent_ } + , maxSrcExtent{ maxSrcExtent_ } + , minDstPosition{ minDstPosition_ } + , maxDstPosition{ maxDstPosition_ } + , minDstExtent{ minDstExtent_ } + , maxDstExtent{ maxDstExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilitiesKHR( DisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPlaneCapabilitiesKHR( VkDisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPlaneCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPlaneCapabilitiesKHR & operator=( DisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPlaneCapabilitiesKHR & operator=( VkDisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayPlaneCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPlaneCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( supportedAlpha, minSrcPosition, maxSrcPosition, minSrcExtent, maxSrcExtent, minDstPosition, maxDstPosition, minDstExtent, maxDstExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPlaneCapabilitiesKHR const & ) const = default; +#else + bool operator==( DisplayPlaneCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( supportedAlpha == rhs.supportedAlpha ) && ( minSrcPosition == rhs.minSrcPosition ) && ( maxSrcPosition == rhs.maxSrcPosition ) && + ( minSrcExtent == rhs.minSrcExtent ) && ( maxSrcExtent == rhs.maxSrcExtent ) && ( minDstPosition == rhs.minDstPosition ) && + ( maxDstPosition == rhs.maxDstPosition ) && ( minDstExtent == rhs.minDstExtent ) && ( maxDstExtent == rhs.maxDstExtent ); +# endif + } + + bool operator!=( DisplayPlaneCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR supportedAlpha = {}; + VULKAN_HPP_NAMESPACE::Offset2D minSrcPosition = {}; + VULKAN_HPP_NAMESPACE::Offset2D maxSrcPosition = {}; + VULKAN_HPP_NAMESPACE::Extent2D minSrcExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxSrcExtent = {}; + VULKAN_HPP_NAMESPACE::Offset2D minDstPosition = {}; + VULKAN_HPP_NAMESPACE::Offset2D maxDstPosition = {}; + VULKAN_HPP_NAMESPACE::Extent2D minDstExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxDstExtent = {}; + }; + + // wrapper struct for struct VkDisplayPlaneCapabilities2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlaneCapabilities2KHR.html + struct DisplayPlaneCapabilities2KHR + { + using NativeType = VkDisplayPlaneCapabilities2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneCapabilities2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilities2KHR( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , capabilities{ capabilities_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilities2KHR( DisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPlaneCapabilities2KHR( VkDisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPlaneCapabilities2KHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPlaneCapabilities2KHR & operator=( DisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPlaneCapabilities2KHR & operator=( VkDisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayPlaneCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneCapabilities2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneCapabilities2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPlaneCapabilities2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, capabilities ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPlaneCapabilities2KHR const & ) const = default; +#else + bool operator==( DisplayPlaneCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( capabilities == rhs.capabilities ); +# endif + } + + bool operator!=( DisplayPlaneCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPlaneCapabilities2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities = {}; + }; + + template <> + struct CppType + { + using Type = DisplayPlaneCapabilities2KHR; + }; + + // wrapper struct for struct VkDisplayPlaneInfo2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlaneInfo2KHR.html + struct DisplayPlaneInfo2KHR + { + using NativeType = VkDisplayPlaneInfo2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneInfo2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DisplayPlaneInfo2KHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ = {}, uint32_t planeIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mode{ mode_ } + , planeIndex{ planeIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPlaneInfo2KHR( DisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPlaneInfo2KHR( VkDisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPlaneInfo2KHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPlaneInfo2KHR & operator=( DisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPlaneInfo2KHR & operator=( VkDisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT + { + planeIndex = planeIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplayPlaneInfo2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneInfo2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneInfo2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPlaneInfo2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mode, planeIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPlaneInfo2KHR const & ) const = default; +#else + bool operator==( DisplayPlaneInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mode == rhs.mode ) && ( planeIndex == rhs.planeIndex ); +# endif + } + + bool operator!=( DisplayPlaneInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPlaneInfo2KHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayModeKHR mode = {}; + uint32_t planeIndex = {}; + }; + + template <> + struct CppType + { + using Type = DisplayPlaneInfo2KHR; + }; + + // wrapper struct for struct VkDisplayPlanePropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlanePropertiesKHR.html + struct DisplayPlanePropertiesKHR + { + using NativeType = VkDisplayPlanePropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPlanePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR currentDisplay_ = {}, + uint32_t currentStackIndex_ = {} ) VULKAN_HPP_NOEXCEPT + : currentDisplay{ currentDisplay_ } + , currentStackIndex{ currentStackIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPlanePropertiesKHR( DisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPlanePropertiesKHR( VkDisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPlanePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPlanePropertiesKHR & operator=( DisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPlanePropertiesKHR & operator=( VkDisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayPlanePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlanePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlanePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPlanePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( currentDisplay, currentStackIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPlanePropertiesKHR const & ) const = default; +#else + bool operator==( DisplayPlanePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( currentDisplay == rhs.currentDisplay ) && ( currentStackIndex == rhs.currentStackIndex ); +# endif + } + + bool operator!=( DisplayPlanePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DisplayKHR currentDisplay = {}; + uint32_t currentStackIndex = {}; + }; + + // wrapper struct for struct VkDisplayPlaneProperties2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPlaneProperties2KHR.html + struct DisplayPlaneProperties2KHR + { + using NativeType = VkDisplayPlaneProperties2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneProperties2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPlaneProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR displayPlaneProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displayPlaneProperties{ displayPlaneProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPlaneProperties2KHR( DisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPlaneProperties2KHR( VkDisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPlaneProperties2KHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPlaneProperties2KHR & operator=( DisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPlaneProperties2KHR & operator=( VkDisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayPlaneProperties2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneProperties2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPlaneProperties2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPlaneProperties2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, displayPlaneProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPlaneProperties2KHR const & ) const = default; +#else + bool operator==( DisplayPlaneProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayPlaneProperties == rhs.displayPlaneProperties ); +# endif + } + + bool operator!=( DisplayPlaneProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPlaneProperties2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR displayPlaneProperties = {}; + }; + + template <> + struct CppType + { + using Type = DisplayPlaneProperties2KHR; + }; + + // wrapper struct for struct VkDisplayPowerInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPowerInfoEXT.html + struct DisplayPowerInfoEXT + { + using NativeType = VkDisplayPowerInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPowerInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPowerInfoEXT( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ = VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT::eOff, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , powerState{ powerState_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPowerInfoEXT( DisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPowerInfoEXT( VkDisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : DisplayPowerInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPowerInfoEXT & operator=( DisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPowerInfoEXT & operator=( VkDisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT & setPowerState( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ ) VULKAN_HPP_NOEXCEPT + { + powerState = powerState_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplayPowerInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPowerInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPowerInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPowerInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, powerState ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPowerInfoEXT const & ) const = default; +#else + bool operator==( DisplayPowerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( powerState == rhs.powerState ); +# endif + } + + bool operator!=( DisplayPowerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPowerInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState = VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT::eOff; + }; + + template <> + struct CppType + { + using Type = DisplayPowerInfoEXT; + }; + + // wrapper struct for struct VkDisplayPresentInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPresentInfoKHR.html + struct DisplayPresentInfoKHR + { + using NativeType = VkDisplayPresentInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPresentInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPresentInfoKHR( VULKAN_HPP_NAMESPACE::Rect2D srcRect_ = {}, + VULKAN_HPP_NAMESPACE::Rect2D dstRect_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 persistent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcRect{ srcRect_ } + , dstRect{ dstRect_ } + , persistent{ persistent_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPresentInfoKHR( DisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPresentInfoKHR( VkDisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPresentInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPresentInfoKHR & operator=( DisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPresentInfoKHR & operator=( VkDisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setSrcRect( VULKAN_HPP_NAMESPACE::Rect2D const & srcRect_ ) VULKAN_HPP_NOEXCEPT + { + srcRect = srcRect_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setDstRect( VULKAN_HPP_NAMESPACE::Rect2D const & dstRect_ ) VULKAN_HPP_NOEXCEPT + { + dstRect = dstRect_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setPersistent( VULKAN_HPP_NAMESPACE::Bool32 persistent_ ) VULKAN_HPP_NOEXCEPT + { + persistent = persistent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplayPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPresentInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPresentInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPresentInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcRect, dstRect, persistent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayPresentInfoKHR const & ) const = default; +#else + bool operator==( DisplayPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcRect == rhs.srcRect ) && ( dstRect == rhs.dstRect ) && ( persistent == rhs.persistent ); +# endif + } + + bool operator!=( DisplayPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayPresentInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Rect2D srcRect = {}; + VULKAN_HPP_NAMESPACE::Rect2D dstRect = {}; + VULKAN_HPP_NAMESPACE::Bool32 persistent = {}; + }; + + template <> + struct CppType + { + using Type = DisplayPresentInfoKHR; + }; + + // wrapper struct for struct VkDisplayPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayPropertiesKHR.html + struct DisplayPropertiesKHR + { + using NativeType = VkDisplayPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayPropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display_ = {}, + const char * displayName_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D physicalDimensions_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D physicalResolution_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 planeReorderPossible_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 persistentContent_ = {} ) VULKAN_HPP_NOEXCEPT + : display{ display_ } + , displayName{ displayName_ } + , physicalDimensions{ physicalDimensions_ } + , physicalResolution{ physicalResolution_ } + , supportedTransforms{ supportedTransforms_ } + , planeReorderPossible{ planeReorderPossible_ } + , persistentContent{ persistentContent_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayPropertiesKHR( DisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayPropertiesKHR( VkDisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayPropertiesKHR & operator=( DisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayPropertiesKHR & operator=( VkDisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( display, displayName, physicalDimensions, physicalResolution, supportedTransforms, planeReorderPossible, persistentContent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = display <=> rhs.display; cmp != 0 ) + return cmp; + if ( displayName != rhs.displayName ) + if ( auto cmp = strcmp( displayName, rhs.displayName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = physicalDimensions <=> rhs.physicalDimensions; cmp != 0 ) + return cmp; + if ( auto cmp = physicalResolution <=> rhs.physicalResolution; cmp != 0 ) + return cmp; + if ( auto cmp = supportedTransforms <=> rhs.supportedTransforms; cmp != 0 ) + return cmp; + if ( auto cmp = planeReorderPossible <=> rhs.planeReorderPossible; cmp != 0 ) + return cmp; + if ( auto cmp = persistentContent <=> rhs.persistentContent; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( display == rhs.display ) && ( ( displayName == rhs.displayName ) || ( strcmp( displayName, rhs.displayName ) == 0 ) ) && + ( physicalDimensions == rhs.physicalDimensions ) && ( physicalResolution == rhs.physicalResolution ) && + ( supportedTransforms == rhs.supportedTransforms ) && ( planeReorderPossible == rhs.planeReorderPossible ) && + ( persistentContent == rhs.persistentContent ); + } + + bool operator!=( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::DisplayKHR display = {}; + const char * displayName = {}; + VULKAN_HPP_NAMESPACE::Extent2D physicalDimensions = {}; + VULKAN_HPP_NAMESPACE::Extent2D physicalResolution = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms = {}; + VULKAN_HPP_NAMESPACE::Bool32 planeReorderPossible = {}; + VULKAN_HPP_NAMESPACE::Bool32 persistentContent = {}; + }; + + // wrapper struct for struct VkDisplayProperties2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplayProperties2KHR.html + struct DisplayProperties2KHR + { + using NativeType = VkDisplayProperties2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayProperties2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DisplayProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR displayProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displayProperties{ displayProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplayProperties2KHR( DisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplayProperties2KHR( VkDisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplayProperties2KHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplayProperties2KHR & operator=( DisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplayProperties2KHR & operator=( VkDisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDisplayProperties2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayProperties2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplayProperties2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplayProperties2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, displayProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplayProperties2KHR const & ) const = default; +#else + bool operator==( DisplayProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayProperties == rhs.displayProperties ); +# endif + } + + bool operator!=( DisplayProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplayProperties2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR displayProperties = {}; + }; + + template <> + struct CppType + { + using Type = DisplayProperties2KHR; + }; + + // wrapper struct for struct VkDisplaySurfaceCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplaySurfaceCreateInfoKHR.html + struct DisplaySurfaceCreateInfoKHR + { + using NativeType = VkDisplaySurfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplaySurfaceCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DisplaySurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ = {}, + uint32_t planeIndex_ = {}, + uint32_t planeStackIndex_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + float globalAlpha_ = {}, + VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode_ = VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR::eOpaque, + VULKAN_HPP_NAMESPACE::Extent2D imageExtent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , displayMode{ displayMode_ } + , planeIndex{ planeIndex_ } + , planeStackIndex{ planeStackIndex_ } + , transform{ transform_ } + , globalAlpha{ globalAlpha_ } + , alphaMode{ alphaMode_ } + , imageExtent{ imageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplaySurfaceCreateInfoKHR( DisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplaySurfaceCreateInfoKHR( VkDisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplaySurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + DisplaySurfaceCreateInfoKHR & operator=( DisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplaySurfaceCreateInfoKHR & operator=( VkDisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setDisplayMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ ) VULKAN_HPP_NOEXCEPT + { + displayMode = displayMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT + { + planeIndex = planeIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPlaneStackIndex( uint32_t planeStackIndex_ ) VULKAN_HPP_NOEXCEPT + { + planeStackIndex = planeStackIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT + { + transform = transform_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setGlobalAlpha( float globalAlpha_ ) VULKAN_HPP_NOEXCEPT + { + globalAlpha = globalAlpha_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setAlphaMode( VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode_ ) VULKAN_HPP_NOEXCEPT + { + alphaMode = alphaMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplaySurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplaySurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplaySurfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplaySurfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, displayMode, planeIndex, planeStackIndex, transform, globalAlpha, alphaMode, imageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplaySurfaceCreateInfoKHR const & ) const = default; +#else + bool operator==( DisplaySurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( displayMode == rhs.displayMode ) && + ( planeIndex == rhs.planeIndex ) && ( planeStackIndex == rhs.planeStackIndex ) && ( transform == rhs.transform ) && + ( globalAlpha == rhs.globalAlpha ) && ( alphaMode == rhs.alphaMode ) && ( imageExtent == rhs.imageExtent ); +# endif + } + + bool operator!=( DisplaySurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplaySurfaceCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode = {}; + uint32_t planeIndex = {}; + uint32_t planeStackIndex = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + float globalAlpha = {}; + VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode = VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR::eOpaque; + VULKAN_HPP_NAMESPACE::Extent2D imageExtent = {}; + }; + + template <> + struct CppType + { + using Type = DisplaySurfaceCreateInfoKHR; + }; + + // wrapper struct for struct VkDisplaySurfaceStereoCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDisplaySurfaceStereoCreateInfoNV.html + struct DisplaySurfaceStereoCreateInfoNV + { + using NativeType = VkDisplaySurfaceStereoCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplaySurfaceStereoCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DisplaySurfaceStereoCreateInfoNV( VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoTypeNV stereoType_ = VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoTypeNV::eNone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stereoType{ stereoType_ } + { + } + + VULKAN_HPP_CONSTEXPR DisplaySurfaceStereoCreateInfoNV( DisplaySurfaceStereoCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DisplaySurfaceStereoCreateInfoNV( VkDisplaySurfaceStereoCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DisplaySurfaceStereoCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + DisplaySurfaceStereoCreateInfoNV & operator=( DisplaySurfaceStereoCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DisplaySurfaceStereoCreateInfoNV & operator=( VkDisplaySurfaceStereoCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceStereoCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceStereoCreateInfoNV & setStereoType( VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoTypeNV stereoType_ ) VULKAN_HPP_NOEXCEPT + { + stereoType = stereoType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDisplaySurfaceStereoCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplaySurfaceStereoCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDisplaySurfaceStereoCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDisplaySurfaceStereoCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stereoType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DisplaySurfaceStereoCreateInfoNV const & ) const = default; +#else + bool operator==( DisplaySurfaceStereoCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stereoType == rhs.stereoType ); +# endif + } + + bool operator!=( DisplaySurfaceStereoCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDisplaySurfaceStereoCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoTypeNV stereoType = VULKAN_HPP_NAMESPACE::DisplaySurfaceStereoTypeNV::eNone; + }; + + template <> + struct CppType + { + using Type = DisplaySurfaceStereoCreateInfoNV; + }; + + // wrapper struct for struct VkDrawIndexedIndirectCommand, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrawIndexedIndirectCommand.html + struct DrawIndexedIndirectCommand + { + using NativeType = VkDrawIndexedIndirectCommand; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrawIndexedIndirectCommand( uint32_t indexCount_ = {}, + uint32_t instanceCount_ = {}, + uint32_t firstIndex_ = {}, + int32_t vertexOffset_ = {}, + uint32_t firstInstance_ = {} ) VULKAN_HPP_NOEXCEPT + : indexCount{ indexCount_ } + , instanceCount{ instanceCount_ } + , firstIndex{ firstIndex_ } + , vertexOffset{ vertexOffset_ } + , firstInstance{ firstInstance_ } + { + } + + VULKAN_HPP_CONSTEXPR DrawIndexedIndirectCommand( DrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrawIndexedIndirectCommand( VkDrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT + : DrawIndexedIndirectCommand( *reinterpret_cast( &rhs ) ) + { + } + + DrawIndexedIndirectCommand & operator=( DrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrawIndexedIndirectCommand & operator=( VkDrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT + { + indexCount = indexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT + { + instanceCount = instanceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT + { + firstIndex = firstIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT + { + vertexOffset = vertexOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT + { + firstInstance = firstInstance_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDrawIndexedIndirectCommand const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawIndexedIndirectCommand &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawIndexedIndirectCommand const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrawIndexedIndirectCommand *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrawIndexedIndirectCommand const & ) const = default; +#else + bool operator==( DrawIndexedIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( indexCount == rhs.indexCount ) && ( instanceCount == rhs.instanceCount ) && ( firstIndex == rhs.firstIndex ) && + ( vertexOffset == rhs.vertexOffset ) && ( firstInstance == rhs.firstInstance ); +# endif + } + + bool operator!=( DrawIndexedIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t indexCount = {}; + uint32_t instanceCount = {}; + uint32_t firstIndex = {}; + int32_t vertexOffset = {}; + uint32_t firstInstance = {}; + }; + + // wrapper struct for struct VkDrawIndirectCommand, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrawIndirectCommand.html + struct DrawIndirectCommand + { + using NativeType = VkDrawIndirectCommand; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrawIndirectCommand( uint32_t vertexCount_ = {}, + uint32_t instanceCount_ = {}, + uint32_t firstVertex_ = {}, + uint32_t firstInstance_ = {} ) VULKAN_HPP_NOEXCEPT + : vertexCount{ vertexCount_ } + , instanceCount{ instanceCount_ } + , firstVertex{ firstVertex_ } + , firstInstance{ firstInstance_ } + { + } + + VULKAN_HPP_CONSTEXPR DrawIndirectCommand( DrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrawIndirectCommand( VkDrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT : DrawIndirectCommand( *reinterpret_cast( &rhs ) ) + { + } + + DrawIndirectCommand & operator=( DrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrawIndirectCommand & operator=( VkDrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexCount = vertexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT + { + instanceCount = instanceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT + { + firstVertex = firstVertex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT + { + firstInstance = firstInstance_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDrawIndirectCommand const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawIndirectCommand &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawIndirectCommand const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrawIndirectCommand *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( vertexCount, instanceCount, firstVertex, firstInstance ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrawIndirectCommand const & ) const = default; +#else + bool operator==( DrawIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( vertexCount == rhs.vertexCount ) && ( instanceCount == rhs.instanceCount ) && ( firstVertex == rhs.firstVertex ) && + ( firstInstance == rhs.firstInstance ); +# endif + } + + bool operator!=( DrawIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t vertexCount = {}; + uint32_t instanceCount = {}; + uint32_t firstVertex = {}; + uint32_t firstInstance = {}; + }; + + // wrapper struct for struct VkDrawIndirectCountIndirectCommandEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrawIndirectCountIndirectCommandEXT.html + struct DrawIndirectCountIndirectCommandEXT + { + using NativeType = VkDrawIndirectCountIndirectCommandEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrawIndirectCountIndirectCommandEXT( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {}, + uint32_t stride_ = {}, + uint32_t commandCount_ = {} ) VULKAN_HPP_NOEXCEPT + : bufferAddress{ bufferAddress_ } + , stride{ stride_ } + , commandCount{ commandCount_ } + { + } + + VULKAN_HPP_CONSTEXPR DrawIndirectCountIndirectCommandEXT( DrawIndirectCountIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrawIndirectCountIndirectCommandEXT( VkDrawIndirectCountIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DrawIndirectCountIndirectCommandEXT( *reinterpret_cast( &rhs ) ) + { + } + + DrawIndirectCountIndirectCommandEXT & operator=( DrawIndirectCountIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrawIndirectCountIndirectCommandEXT & operator=( VkDrawIndirectCountIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCountIndirectCommandEXT & setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferAddress = bufferAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCountIndirectCommandEXT & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawIndirectCountIndirectCommandEXT & setCommandCount( uint32_t commandCount_ ) VULKAN_HPP_NOEXCEPT + { + commandCount = commandCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDrawIndirectCountIndirectCommandEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawIndirectCountIndirectCommandEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawIndirectCountIndirectCommandEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrawIndirectCountIndirectCommandEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( bufferAddress, stride, commandCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrawIndirectCountIndirectCommandEXT const & ) const = default; +#else + bool operator==( DrawIndirectCountIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( bufferAddress == rhs.bufferAddress ) && ( stride == rhs.stride ) && ( commandCount == rhs.commandCount ); +# endif + } + + bool operator!=( DrawIndirectCountIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress = {}; + uint32_t stride = {}; + uint32_t commandCount = {}; + }; + + // wrapper struct for struct VkDrawMeshTasksIndirectCommandEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrawMeshTasksIndirectCommandEXT.html + struct DrawMeshTasksIndirectCommandEXT + { + using NativeType = VkDrawMeshTasksIndirectCommandEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + DrawMeshTasksIndirectCommandEXT( uint32_t groupCountX_ = {}, uint32_t groupCountY_ = {}, uint32_t groupCountZ_ = {} ) VULKAN_HPP_NOEXCEPT + : groupCountX{ groupCountX_ } + , groupCountY{ groupCountY_ } + , groupCountZ{ groupCountZ_ } + { + } + + VULKAN_HPP_CONSTEXPR DrawMeshTasksIndirectCommandEXT( DrawMeshTasksIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrawMeshTasksIndirectCommandEXT( VkDrawMeshTasksIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DrawMeshTasksIndirectCommandEXT( *reinterpret_cast( &rhs ) ) + { + } + + DrawMeshTasksIndirectCommandEXT & operator=( DrawMeshTasksIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrawMeshTasksIndirectCommandEXT & operator=( VkDrawMeshTasksIndirectCommandEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandEXT & setGroupCountX( uint32_t groupCountX_ ) VULKAN_HPP_NOEXCEPT + { + groupCountX = groupCountX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandEXT & setGroupCountY( uint32_t groupCountY_ ) VULKAN_HPP_NOEXCEPT + { + groupCountY = groupCountY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandEXT & setGroupCountZ( uint32_t groupCountZ_ ) VULKAN_HPP_NOEXCEPT + { + groupCountZ = groupCountZ_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDrawMeshTasksIndirectCommandEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawMeshTasksIndirectCommandEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawMeshTasksIndirectCommandEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrawMeshTasksIndirectCommandEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( groupCountX, groupCountY, groupCountZ ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrawMeshTasksIndirectCommandEXT const & ) const = default; +#else + bool operator==( DrawMeshTasksIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( groupCountX == rhs.groupCountX ) && ( groupCountY == rhs.groupCountY ) && ( groupCountZ == rhs.groupCountZ ); +# endif + } + + bool operator!=( DrawMeshTasksIndirectCommandEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t groupCountX = {}; + uint32_t groupCountY = {}; + uint32_t groupCountZ = {}; + }; + + // wrapper struct for struct VkDrawMeshTasksIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrawMeshTasksIndirectCommandNV.html + struct DrawMeshTasksIndirectCommandNV + { + using NativeType = VkDrawMeshTasksIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrawMeshTasksIndirectCommandNV( uint32_t taskCount_ = {}, uint32_t firstTask_ = {} ) VULKAN_HPP_NOEXCEPT + : taskCount{ taskCount_ } + , firstTask{ firstTask_ } + { + } + + VULKAN_HPP_CONSTEXPR DrawMeshTasksIndirectCommandNV( DrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrawMeshTasksIndirectCommandNV( VkDrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : DrawMeshTasksIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + DrawMeshTasksIndirectCommandNV & operator=( DrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrawMeshTasksIndirectCommandNV & operator=( VkDrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV & setTaskCount( uint32_t taskCount_ ) VULKAN_HPP_NOEXCEPT + { + taskCount = taskCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV & setFirstTask( uint32_t firstTask_ ) VULKAN_HPP_NOEXCEPT + { + firstTask = firstTask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkDrawMeshTasksIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawMeshTasksIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrawMeshTasksIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrawMeshTasksIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( taskCount, firstTask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrawMeshTasksIndirectCommandNV const & ) const = default; +#else + bool operator==( DrawMeshTasksIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( taskCount == rhs.taskCount ) && ( firstTask == rhs.firstTask ); +# endif + } + + bool operator!=( DrawMeshTasksIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t taskCount = {}; + uint32_t firstTask = {}; + }; + + // wrapper struct for struct VkDrmFormatModifierProperties2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrmFormatModifierProperties2EXT.html + struct DrmFormatModifierProperties2EXT + { + using NativeType = VkDrmFormatModifierProperties2EXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrmFormatModifierProperties2EXT( uint64_t drmFormatModifier_ = {}, + uint32_t drmFormatModifierPlaneCount_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 drmFormatModifierTilingFeatures_ = {} ) VULKAN_HPP_NOEXCEPT + : drmFormatModifier{ drmFormatModifier_ } + , drmFormatModifierPlaneCount{ drmFormatModifierPlaneCount_ } + , drmFormatModifierTilingFeatures{ drmFormatModifierTilingFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR DrmFormatModifierProperties2EXT( DrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrmFormatModifierProperties2EXT( VkDrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DrmFormatModifierProperties2EXT( *reinterpret_cast( &rhs ) ) + { + } + + DrmFormatModifierProperties2EXT & operator=( DrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrmFormatModifierProperties2EXT & operator=( VkDrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDrmFormatModifierProperties2EXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierProperties2EXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierProperties2EXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrmFormatModifierProperties2EXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( drmFormatModifier, drmFormatModifierPlaneCount, drmFormatModifierTilingFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrmFormatModifierProperties2EXT const & ) const = default; +#else + bool operator==( DrmFormatModifierProperties2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( drmFormatModifier == rhs.drmFormatModifier ) && ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) && + ( drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures ); +# endif + } + + bool operator!=( DrmFormatModifierProperties2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint64_t drmFormatModifier = {}; + uint32_t drmFormatModifierPlaneCount = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 drmFormatModifierTilingFeatures = {}; + }; + + // wrapper struct for struct VkDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrmFormatModifierPropertiesEXT.html + struct DrmFormatModifierPropertiesEXT + { + using NativeType = VkDrmFormatModifierPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesEXT( uint64_t drmFormatModifier_ = {}, + uint32_t drmFormatModifierPlaneCount_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags drmFormatModifierTilingFeatures_ = {} ) VULKAN_HPP_NOEXCEPT + : drmFormatModifier{ drmFormatModifier_ } + , drmFormatModifierPlaneCount{ drmFormatModifierPlaneCount_ } + , drmFormatModifierTilingFeatures{ drmFormatModifierTilingFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesEXT( DrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrmFormatModifierPropertiesEXT( VkDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DrmFormatModifierPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + DrmFormatModifierPropertiesEXT & operator=( DrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrmFormatModifierPropertiesEXT & operator=( VkDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( drmFormatModifier, drmFormatModifierPlaneCount, drmFormatModifierTilingFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrmFormatModifierPropertiesEXT const & ) const = default; +#else + bool operator==( DrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( drmFormatModifier == rhs.drmFormatModifier ) && ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) && + ( drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures ); +# endif + } + + bool operator!=( DrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint64_t drmFormatModifier = {}; + uint32_t drmFormatModifierPlaneCount = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags drmFormatModifierTilingFeatures = {}; + }; + + // wrapper struct for struct VkDrmFormatModifierPropertiesList2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrmFormatModifierPropertiesList2EXT.html + struct DrmFormatModifierPropertiesList2EXT + { + using NativeType = VkDrmFormatModifierPropertiesList2EXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDrmFormatModifierPropertiesList2EXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesList2EXT( uint32_t drmFormatModifierCount_ = {}, + VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * pDrmFormatModifierProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , drmFormatModifierCount{ drmFormatModifierCount_ } + , pDrmFormatModifierProperties{ pDrmFormatModifierProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesList2EXT( DrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrmFormatModifierPropertiesList2EXT( VkDrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DrmFormatModifierPropertiesList2EXT( *reinterpret_cast( &rhs ) ) + { + } + + DrmFormatModifierPropertiesList2EXT & operator=( DrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrmFormatModifierPropertiesList2EXT & operator=( VkDrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDrmFormatModifierPropertiesList2EXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesList2EXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesList2EXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesList2EXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifierProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrmFormatModifierPropertiesList2EXT const & ) const = default; +#else + bool operator==( DrmFormatModifierPropertiesList2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifierCount == rhs.drmFormatModifierCount ) && + ( pDrmFormatModifierProperties == rhs.pDrmFormatModifierProperties ); +# endif + } + + bool operator!=( DrmFormatModifierPropertiesList2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDrmFormatModifierPropertiesList2EXT; + void * pNext = {}; + uint32_t drmFormatModifierCount = {}; + VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * pDrmFormatModifierProperties = {}; + }; + + template <> + struct CppType + { + using Type = DrmFormatModifierPropertiesList2EXT; + }; + + // wrapper struct for struct VkDrmFormatModifierPropertiesListEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkDrmFormatModifierPropertiesListEXT.html + struct DrmFormatModifierPropertiesListEXT + { + using NativeType = VkDrmFormatModifierPropertiesListEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDrmFormatModifierPropertiesListEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesListEXT( uint32_t drmFormatModifierCount_ = {}, + VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT * pDrmFormatModifierProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , drmFormatModifierCount{ drmFormatModifierCount_ } + , pDrmFormatModifierProperties{ pDrmFormatModifierProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesListEXT( DrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + DrmFormatModifierPropertiesListEXT( VkDrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : DrmFormatModifierPropertiesListEXT( *reinterpret_cast( &rhs ) ) + { + } + + DrmFormatModifierPropertiesListEXT & operator=( DrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + DrmFormatModifierPropertiesListEXT & operator=( VkDrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkDrmFormatModifierPropertiesListEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesListEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesListEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkDrmFormatModifierPropertiesListEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifierProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( DrmFormatModifierPropertiesListEXT const & ) const = default; +#else + bool operator==( DrmFormatModifierPropertiesListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifierCount == rhs.drmFormatModifierCount ) && + ( pDrmFormatModifierProperties == rhs.pDrmFormatModifierProperties ); +# endif + } + + bool operator!=( DrmFormatModifierPropertiesListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDrmFormatModifierPropertiesListEXT; + void * pNext = {}; + uint32_t drmFormatModifierCount = {}; + VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT * pDrmFormatModifierProperties = {}; + }; + + template <> + struct CppType + { + using Type = DrmFormatModifierPropertiesListEXT; + }; + + // wrapper struct for struct VkEventCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkEventCreateInfo.html + struct EventCreateInfo + { + using NativeType = VkEventCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eEventCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR EventCreateInfo( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR EventCreateInfo( EventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + EventCreateInfo( VkEventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : EventCreateInfo( *reinterpret_cast( &rhs ) ) {} + + EventCreateInfo & operator=( EventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + EventCreateInfo & operator=( VkEventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 EventCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 EventCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkEventCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkEventCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkEventCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkEventCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( EventCreateInfo const & ) const = default; +#else + bool operator==( EventCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( EventCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eEventCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::EventCreateFlags flags = {}; + }; + + template <> + struct CppType + { + using Type = EventCreateInfo; + }; + + // wrapper struct for struct VkPipelineLibraryCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineLibraryCreateInfoKHR.html + struct PipelineLibraryCreateInfoKHR + { + using NativeType = VkPipelineLibraryCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLibraryCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineLibraryCreateInfoKHR( uint32_t libraryCount_ = {}, + const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , libraryCount{ libraryCount_ } + , pLibraries{ pLibraries_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineLibraryCreateInfoKHR( PipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineLibraryCreateInfoKHR( VkPipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineLibraryCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineLibraryCreateInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & libraries_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), libraryCount( static_cast( libraries_.size() ) ), pLibraries( libraries_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineLibraryCreateInfoKHR & operator=( PipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineLibraryCreateInfoKHR & operator=( VkPipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setLibraryCount( uint32_t libraryCount_ ) VULKAN_HPP_NOEXCEPT + { + libraryCount = libraryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setPLibraries( const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries_ ) VULKAN_HPP_NOEXCEPT + { + pLibraries = pLibraries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineLibraryCreateInfoKHR & + setLibraries( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & libraries_ ) VULKAN_HPP_NOEXCEPT + { + libraryCount = static_cast( libraries_.size() ); + pLibraries = libraries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineLibraryCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineLibraryCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineLibraryCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineLibraryCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, libraryCount, pLibraries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineLibraryCreateInfoKHR const & ) const = default; +#else + bool operator==( PipelineLibraryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( libraryCount == rhs.libraryCount ) && ( pLibraries == rhs.pLibraries ); +# endif + } + + bool operator!=( PipelineLibraryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineLibraryCreateInfoKHR; + const void * pNext = {}; + uint32_t libraryCount = {}; + const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries = {}; + }; + + template <> + struct CppType + { + using Type = PipelineLibraryCreateInfoKHR; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkExecutionGraphPipelineCreateInfoAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExecutionGraphPipelineCreateInfoAMDX.html + struct ExecutionGraphPipelineCreateInfoAMDX + { + using NativeType = VkExecutionGraphPipelineCreateInfoAMDX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExecutionGraphPipelineCreateInfoAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExecutionGraphPipelineCreateInfoAMDX( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, + uint32_t stageCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stageCount{ stageCount_ } + , pStages{ pStages_ } + , pLibraryInfo{ pLibraryInfo_ } + , layout{ layout_ } + , basePipelineHandle{ basePipelineHandle_ } + , basePipelineIndex{ basePipelineIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR ExecutionGraphPipelineCreateInfoAMDX( ExecutionGraphPipelineCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExecutionGraphPipelineCreateInfoAMDX( VkExecutionGraphPipelineCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : ExecutionGraphPipelineCreateInfoAMDX( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ExecutionGraphPipelineCreateInfoAMDX( + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, + const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , stageCount( static_cast( stages_.size() ) ) + , pStages( stages_.data() ) + , pLibraryInfo( pLibraryInfo_ ) + , layout( layout_ ) + , basePipelineHandle( basePipelineHandle_ ) + , basePipelineIndex( basePipelineIndex_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ExecutionGraphPipelineCreateInfoAMDX & operator=( ExecutionGraphPipelineCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExecutionGraphPipelineCreateInfoAMDX & operator=( VkExecutionGraphPipelineCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = stageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & + setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT + { + pStages = pStages_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ExecutionGraphPipelineCreateInfoAMDX & + setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = static_cast( stages_.size() ); + pStages = stages_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & + setPLibraryInfo( const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ ) VULKAN_HPP_NOEXCEPT + { + pLibraryInfo = pLibraryInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & + setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineHandle = basePipelineHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineCreateInfoAMDX & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineIndex = basePipelineIndex_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExecutionGraphPipelineCreateInfoAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExecutionGraphPipelineCreateInfoAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExecutionGraphPipelineCreateInfoAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExecutionGraphPipelineCreateInfoAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, stageCount, pStages, pLibraryInfo, layout, basePipelineHandle, basePipelineIndex ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExecutionGraphPipelineCreateInfoAMDX const & ) const = default; +# else + bool operator==( ExecutionGraphPipelineCreateInfoAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && + ( pLibraryInfo == rhs.pLibraryInfo ) && ( layout == rhs.layout ) && ( basePipelineHandle == rhs.basePipelineHandle ) && + ( basePipelineIndex == rhs.basePipelineIndex ); +# endif + } + + bool operator!=( ExecutionGraphPipelineCreateInfoAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExecutionGraphPipelineCreateInfoAMDX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; + uint32_t stageCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; + const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; + int32_t basePipelineIndex = {}; + }; + + template <> + struct CppType + { + using Type = ExecutionGraphPipelineCreateInfoAMDX; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkExecutionGraphPipelineScratchSizeAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExecutionGraphPipelineScratchSizeAMDX.html + struct ExecutionGraphPipelineScratchSizeAMDX + { + using NativeType = VkExecutionGraphPipelineScratchSizeAMDX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExecutionGraphPipelineScratchSizeAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExecutionGraphPipelineScratchSizeAMDX( VULKAN_HPP_NAMESPACE::DeviceSize minSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize sizeGranularity_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minSize{ minSize_ } + , maxSize{ maxSize_ } + , sizeGranularity{ sizeGranularity_ } + { + } + + VULKAN_HPP_CONSTEXPR ExecutionGraphPipelineScratchSizeAMDX( ExecutionGraphPipelineScratchSizeAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExecutionGraphPipelineScratchSizeAMDX( VkExecutionGraphPipelineScratchSizeAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : ExecutionGraphPipelineScratchSizeAMDX( *reinterpret_cast( &rhs ) ) + { + } + + ExecutionGraphPipelineScratchSizeAMDX & operator=( ExecutionGraphPipelineScratchSizeAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExecutionGraphPipelineScratchSizeAMDX & operator=( VkExecutionGraphPipelineScratchSizeAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineScratchSizeAMDX & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineScratchSizeAMDX & setMinSize( VULKAN_HPP_NAMESPACE::DeviceSize minSize_ ) VULKAN_HPP_NOEXCEPT + { + minSize = minSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineScratchSizeAMDX & setMaxSize( VULKAN_HPP_NAMESPACE::DeviceSize maxSize_ ) VULKAN_HPP_NOEXCEPT + { + maxSize = maxSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExecutionGraphPipelineScratchSizeAMDX & setSizeGranularity( VULKAN_HPP_NAMESPACE::DeviceSize sizeGranularity_ ) VULKAN_HPP_NOEXCEPT + { + sizeGranularity = sizeGranularity_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExecutionGraphPipelineScratchSizeAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExecutionGraphPipelineScratchSizeAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExecutionGraphPipelineScratchSizeAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExecutionGraphPipelineScratchSizeAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minSize, maxSize, sizeGranularity ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExecutionGraphPipelineScratchSizeAMDX const & ) const = default; +# else + bool operator==( ExecutionGraphPipelineScratchSizeAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSize == rhs.minSize ) && ( maxSize == rhs.maxSize ) && + ( sizeGranularity == rhs.sizeGranularity ); +# endif + } + + bool operator!=( ExecutionGraphPipelineScratchSizeAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExecutionGraphPipelineScratchSizeAMDX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize sizeGranularity = {}; + }; + + template <> + struct CppType + { + using Type = ExecutionGraphPipelineScratchSizeAMDX; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkExportFenceCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportFenceCreateInfo.html + struct ExportFenceCreateInfo + { + using NativeType = VkExportFenceCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportFenceCreateInfo( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportFenceCreateInfo( ExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportFenceCreateInfo( VkExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportFenceCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ExportFenceCreateInfo & operator=( ExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportFenceCreateInfo & operator=( VkExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo & setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportFenceCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportFenceCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportFenceCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportFenceCreateInfo const & ) const = default; +#else + bool operator==( ExportFenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExportFenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportFenceCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExportFenceCreateInfo; + }; + + using ExportFenceCreateInfoKHR = ExportFenceCreateInfo; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkExportFenceWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportFenceWin32HandleInfoKHR.html + struct ExportFenceWin32HandleInfoKHR + { + using NativeType = VkExportFenceWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportFenceWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {}, + DWORD dwAccess_ = {}, + LPCWSTR name_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pAttributes{ pAttributes_ } + , dwAccess{ dwAccess_ } + , name{ name_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportFenceWin32HandleInfoKHR( ExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportFenceWin32HandleInfoKHR( VkExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportFenceWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ExportFenceWin32HandleInfoKHR & operator=( ExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportFenceWin32HandleInfoKHR & operator=( VkExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT + { + pAttributes = pAttributes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT + { + dwAccess = dwAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportFenceWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportFenceWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pAttributes, dwAccess, name ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportFenceWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( ExportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ) && ( name == rhs.name ); +# endif + } + + bool operator!=( ExportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportFenceWin32HandleInfoKHR; + const void * pNext = {}; + const SECURITY_ATTRIBUTES * pAttributes = {}; + DWORD dwAccess = {}; + LPCWSTR name = {}; + }; + + template <> + struct CppType + { + using Type = ExportFenceWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkExportMemoryAllocateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMemoryAllocateInfo.html + struct ExportMemoryAllocateInfo + { + using NativeType = VkExportMemoryAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfo( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfo( ExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMemoryAllocateInfo( VkExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMemoryAllocateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ExportMemoryAllocateInfo & operator=( ExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMemoryAllocateInfo & operator=( VkExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo & setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMemoryAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMemoryAllocateInfo const & ) const = default; +#else + bool operator==( ExportMemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExportMemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryAllocateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExportMemoryAllocateInfo; + }; + + using ExportMemoryAllocateInfoKHR = ExportMemoryAllocateInfo; + + // wrapper struct for struct VkExportMemoryAllocateInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMemoryAllocateInfoNV.html + struct ExportMemoryAllocateInfoNV + { + using NativeType = VkExportMemoryAllocateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfoNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfoNV( ExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMemoryAllocateInfoNV( VkExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMemoryAllocateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ExportMemoryAllocateInfoNV & operator=( ExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMemoryAllocateInfoNV & operator=( VkExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV & + setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryAllocateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMemoryAllocateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMemoryAllocateInfoNV const & ) const = default; +#else + bool operator==( ExportMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExportMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryAllocateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExportMemoryAllocateInfoNV; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkExportMemoryWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMemoryWin32HandleInfoKHR.html + struct ExportMemoryWin32HandleInfoKHR + { + using NativeType = VkExportMemoryWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {}, + DWORD dwAccess_ = {}, + LPCWSTR name_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pAttributes{ pAttributes_ } + , dwAccess{ dwAccess_ } + , name{ name_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoKHR( ExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMemoryWin32HandleInfoKHR( VkExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMemoryWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ExportMemoryWin32HandleInfoKHR & operator=( ExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMemoryWin32HandleInfoKHR & operator=( VkExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT + { + pAttributes = pAttributes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT + { + dwAccess = dwAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMemoryWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pAttributes, dwAccess, name ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMemoryWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( ExportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ) && ( name == rhs.name ); +# endif + } + + bool operator!=( ExportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryWin32HandleInfoKHR; + const void * pNext = {}; + const SECURITY_ATTRIBUTES * pAttributes = {}; + DWORD dwAccess = {}; + LPCWSTR name = {}; + }; + + template <> + struct CppType + { + using Type = ExportMemoryWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkExportMemoryWin32HandleInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMemoryWin32HandleInfoNV.html + struct ExportMemoryWin32HandleInfoNV + { + using NativeType = VkExportMemoryWin32HandleInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES * pAttributes_ = {}, DWORD dwAccess_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pAttributes{ pAttributes_ } + , dwAccess{ dwAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoNV( ExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMemoryWin32HandleInfoNV( VkExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMemoryWin32HandleInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ExportMemoryWin32HandleInfoNV & operator=( ExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMemoryWin32HandleInfoNV & operator=( VkExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT + { + pAttributes = pAttributes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT + { + dwAccess = dwAccess_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMemoryWin32HandleInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMemoryWin32HandleInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pAttributes, dwAccess ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMemoryWin32HandleInfoNV const & ) const = default; +# else + bool operator==( ExportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ); +# endif + } + + bool operator!=( ExportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMemoryWin32HandleInfoNV; + const void * pNext = {}; + const SECURITY_ATTRIBUTES * pAttributes = {}; + DWORD dwAccess = {}; + }; + + template <> + struct CppType + { + using Type = ExportMemoryWin32HandleInfoNV; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalBufferInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalBufferInfoEXT.html + struct ExportMetalBufferInfoEXT + { + using NativeType = VkExportMetalBufferInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalBufferInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalBufferInfoEXT( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + MTLBuffer_id mtlBuffer_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , mtlBuffer{ mtlBuffer_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalBufferInfoEXT( ExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalBufferInfoEXT( VkExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalBufferInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalBufferInfoEXT & operator=( ExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalBufferInfoEXT & operator=( VkExportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalBufferInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalBufferInfoEXT & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalBufferInfoEXT & setMtlBuffer( MTLBuffer_id mtlBuffer_ ) VULKAN_HPP_NOEXCEPT + { + mtlBuffer = mtlBuffer_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalBufferInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalBufferInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalBufferInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalBufferInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, mtlBuffer ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalBufferInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( mtlBuffer == rhs.mtlBuffer ); +# endif + } + + bool operator!=( ExportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalBufferInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + MTLBuffer_id mtlBuffer = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalBufferInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalCommandQueueInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalCommandQueueInfoEXT.html + struct ExportMetalCommandQueueInfoEXT + { + using NativeType = VkExportMetalCommandQueueInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalCommandQueueInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalCommandQueueInfoEXT( VULKAN_HPP_NAMESPACE::Queue queue_ = {}, + MTLCommandQueue_id mtlCommandQueue_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queue{ queue_ } + , mtlCommandQueue{ mtlCommandQueue_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalCommandQueueInfoEXT( ExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalCommandQueueInfoEXT( VkExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalCommandQueueInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalCommandQueueInfoEXT & operator=( ExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalCommandQueueInfoEXT & operator=( VkExportMetalCommandQueueInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalCommandQueueInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalCommandQueueInfoEXT & setQueue( VULKAN_HPP_NAMESPACE::Queue queue_ ) VULKAN_HPP_NOEXCEPT + { + queue = queue_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalCommandQueueInfoEXT & setMtlCommandQueue( MTLCommandQueue_id mtlCommandQueue_ ) VULKAN_HPP_NOEXCEPT + { + mtlCommandQueue = mtlCommandQueue_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalCommandQueueInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalCommandQueueInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalCommandQueueInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalCommandQueueInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queue, mtlCommandQueue ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalCommandQueueInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalCommandQueueInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queue == rhs.queue ) && ( mtlCommandQueue == rhs.mtlCommandQueue ); +# endif + } + + bool operator!=( ExportMetalCommandQueueInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalCommandQueueInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Queue queue = {}; + MTLCommandQueue_id mtlCommandQueue = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalCommandQueueInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalDeviceInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalDeviceInfoEXT.html + struct ExportMetalDeviceInfoEXT + { + using NativeType = VkExportMetalDeviceInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalDeviceInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalDeviceInfoEXT( MTLDevice_id mtlDevice_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mtlDevice{ mtlDevice_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalDeviceInfoEXT( ExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalDeviceInfoEXT( VkExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalDeviceInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalDeviceInfoEXT & operator=( ExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalDeviceInfoEXT & operator=( VkExportMetalDeviceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalDeviceInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalDeviceInfoEXT & setMtlDevice( MTLDevice_id mtlDevice_ ) VULKAN_HPP_NOEXCEPT + { + mtlDevice = mtlDevice_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalDeviceInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalDeviceInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalDeviceInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalDeviceInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mtlDevice ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalDeviceInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalDeviceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mtlDevice == rhs.mtlDevice ); +# endif + } + + bool operator!=( ExportMetalDeviceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalDeviceInfoEXT; + const void * pNext = {}; + MTLDevice_id mtlDevice = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalDeviceInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalIOSurfaceInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalIOSurfaceInfoEXT.html + struct ExportMetalIOSurfaceInfoEXT + { + using NativeType = VkExportMetalIOSurfaceInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalIoSurfaceInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ExportMetalIOSurfaceInfoEXT( VULKAN_HPP_NAMESPACE::Image image_ = {}, IOSurfaceRef ioSurface_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + , ioSurface{ ioSurface_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalIOSurfaceInfoEXT( ExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalIOSurfaceInfoEXT( VkExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalIOSurfaceInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalIOSurfaceInfoEXT & operator=( ExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalIOSurfaceInfoEXT & operator=( VkExportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalIOSurfaceInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalIOSurfaceInfoEXT & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalIOSurfaceInfoEXT & setIoSurface( IOSurfaceRef ioSurface_ ) VULKAN_HPP_NOEXCEPT + { + ioSurface = ioSurface_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalIOSurfaceInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalIOSurfaceInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalIOSurfaceInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalIOSurfaceInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image, ioSurface ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalIOSurfaceInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( ioSurface == rhs.ioSurface ); +# endif + } + + bool operator!=( ExportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalIoSurfaceInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + IOSurfaceRef ioSurface = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalIOSurfaceInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalObjectCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalObjectCreateInfoEXT.html + struct ExportMetalObjectCreateInfoEXT + { + using NativeType = VkExportMetalObjectCreateInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalObjectCreateInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalObjectCreateInfoEXT( + VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT exportObjectType_ = VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT::eMetalDevice, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , exportObjectType{ exportObjectType_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalObjectCreateInfoEXT( ExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalObjectCreateInfoEXT( VkExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalObjectCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalObjectCreateInfoEXT & operator=( ExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalObjectCreateInfoEXT & operator=( VkExportMetalObjectCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalObjectCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalObjectCreateInfoEXT & + setExportObjectType( VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT exportObjectType_ ) VULKAN_HPP_NOEXCEPT + { + exportObjectType = exportObjectType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalObjectCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalObjectCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalObjectCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalObjectCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, exportObjectType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalObjectCreateInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalObjectCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exportObjectType == rhs.exportObjectType ); +# endif + } + + bool operator!=( ExportMetalObjectCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalObjectCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT exportObjectType = VULKAN_HPP_NAMESPACE::ExportMetalObjectTypeFlagBitsEXT::eMetalDevice; + }; + + template <> + struct CppType + { + using Type = ExportMetalObjectCreateInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalObjectsInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalObjectsInfoEXT.html + struct ExportMetalObjectsInfoEXT + { + using NativeType = VkExportMetalObjectsInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalObjectsInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalObjectsInfoEXT( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR ExportMetalObjectsInfoEXT( ExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalObjectsInfoEXT( VkExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalObjectsInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalObjectsInfoEXT & operator=( ExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalObjectsInfoEXT & operator=( VkExportMetalObjectsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalObjectsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalObjectsInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalObjectsInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalObjectsInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalObjectsInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalObjectsInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalObjectsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( ExportMetalObjectsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalObjectsInfoEXT; + const void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalObjectsInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalSharedEventInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalSharedEventInfoEXT.html + struct ExportMetalSharedEventInfoEXT + { + using NativeType = VkExportMetalSharedEventInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalSharedEventInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalSharedEventInfoEXT( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::Event event_ = {}, + MTLSharedEvent_id mtlSharedEvent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , event{ event_ } + , mtlSharedEvent{ mtlSharedEvent_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalSharedEventInfoEXT( ExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalSharedEventInfoEXT( VkExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalSharedEventInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalSharedEventInfoEXT & operator=( ExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalSharedEventInfoEXT & operator=( VkExportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setEvent( VULKAN_HPP_NAMESPACE::Event event_ ) VULKAN_HPP_NOEXCEPT + { + event = event_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalSharedEventInfoEXT & setMtlSharedEvent( MTLSharedEvent_id mtlSharedEvent_ ) VULKAN_HPP_NOEXCEPT + { + mtlSharedEvent = mtlSharedEvent_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalSharedEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalSharedEventInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalSharedEventInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalSharedEventInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, event, mtlSharedEvent ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalSharedEventInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( event == rhs.event ) && + ( mtlSharedEvent == rhs.mtlSharedEvent ); +# endif + } + + bool operator!=( ExportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalSharedEventInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::Event event = {}; + MTLSharedEvent_id mtlSharedEvent = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalSharedEventInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkExportMetalTextureInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportMetalTextureInfoEXT.html + struct ExportMetalTextureInfoEXT + { + using NativeType = VkExportMetalTextureInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMetalTextureInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportMetalTextureInfoEXT( VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + VULKAN_HPP_NAMESPACE::BufferView bufferView_ = {}, + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, + MTLTexture_id mtlTexture_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + , imageView{ imageView_ } + , bufferView{ bufferView_ } + , plane{ plane_ } + , mtlTexture{ mtlTexture_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportMetalTextureInfoEXT( ExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportMetalTextureInfoEXT( VkExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportMetalTextureInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExportMetalTextureInfoEXT & operator=( ExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportMetalTextureInfoEXT & operator=( VkExportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView_ ) VULKAN_HPP_NOEXCEPT + { + bufferView = bufferView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setPlane( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ ) VULKAN_HPP_NOEXCEPT + { + plane = plane_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportMetalTextureInfoEXT & setMtlTexture( MTLTexture_id mtlTexture_ ) VULKAN_HPP_NOEXCEPT + { + mtlTexture = mtlTexture_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportMetalTextureInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalTextureInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportMetalTextureInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportMetalTextureInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image, imageView, bufferView, plane, mtlTexture ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportMetalTextureInfoEXT const & ) const = default; +# else + bool operator==( ExportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( imageView == rhs.imageView ) && ( bufferView == rhs.bufferView ) && + ( plane == rhs.plane ) && ( mtlTexture == rhs.mtlTexture ); +# endif + } + + bool operator!=( ExportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportMetalTextureInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + VULKAN_HPP_NAMESPACE::BufferView bufferView = {}; + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; + MTLTexture_id mtlTexture = {}; + }; + + template <> + struct CppType + { + using Type = ExportMetalTextureInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + // wrapper struct for struct VkExportSemaphoreCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportSemaphoreCreateInfo.html + struct ExportSemaphoreCreateInfo + { + using NativeType = VkExportSemaphoreCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportSemaphoreCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportSemaphoreCreateInfo( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportSemaphoreCreateInfo( ExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportSemaphoreCreateInfo( VkExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportSemaphoreCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ExportSemaphoreCreateInfo & operator=( ExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportSemaphoreCreateInfo & operator=( VkExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo & + setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportSemaphoreCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportSemaphoreCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportSemaphoreCreateInfo const & ) const = default; +#else + bool operator==( ExportSemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExportSemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportSemaphoreCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExportSemaphoreCreateInfo; + }; + + using ExportSemaphoreCreateInfoKHR = ExportSemaphoreCreateInfo; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkExportSemaphoreWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExportSemaphoreWin32HandleInfoKHR.html + struct ExportSemaphoreWin32HandleInfoKHR + { + using NativeType = VkExportSemaphoreWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportSemaphoreWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExportSemaphoreWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {}, + DWORD dwAccess_ = {}, + LPCWSTR name_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pAttributes{ pAttributes_ } + , dwAccess{ dwAccess_ } + , name{ name_ } + { + } + + VULKAN_HPP_CONSTEXPR ExportSemaphoreWin32HandleInfoKHR( ExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExportSemaphoreWin32HandleInfoKHR( VkExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ExportSemaphoreWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ExportSemaphoreWin32HandleInfoKHR & operator=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExportSemaphoreWin32HandleInfoKHR & operator=( VkExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT + { + pAttributes = pAttributes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT + { + dwAccess = dwAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExportSemaphoreWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExportSemaphoreWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pAttributes, dwAccess, name ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExportSemaphoreWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( ExportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) && ( dwAccess == rhs.dwAccess ) && ( name == rhs.name ); +# endif + } + + bool operator!=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExportSemaphoreWin32HandleInfoKHR; + const void * pNext = {}; + const SECURITY_ATTRIBUTES * pAttributes = {}; + DWORD dwAccess = {}; + LPCWSTR name = {}; + }; + + template <> + struct CppType + { + using Type = ExportSemaphoreWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkExtensionProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExtensionProperties.html + struct ExtensionProperties + { + using NativeType = VkExtensionProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ExtensionProperties( std::array const & extensionName_ = {}, + uint32_t specVersion_ = {} ) VULKAN_HPP_NOEXCEPT + : extensionName{ extensionName_ } + , specVersion{ specVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ExtensionProperties( ExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExtensionProperties( VkExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT : ExtensionProperties( *reinterpret_cast( &rhs ) ) + { + } + + ExtensionProperties & operator=( ExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExtensionProperties & operator=( VkExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExtensionProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExtensionProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExtensionProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExtensionProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( extensionName, specVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = strcmp( extensionName, rhs.extensionName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = specVersion <=> rhs.specVersion; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( strcmp( extensionName, rhs.extensionName ) == 0 ) && ( specVersion == rhs.specVersion ); + } + + bool operator!=( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D extensionName = {}; + uint32_t specVersion = {}; + }; + + // wrapper struct for struct VkExternalMemoryProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryProperties.html + struct ExternalMemoryProperties + { + using NativeType = VkExternalMemoryProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalMemoryProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags externalMemoryFeatures_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags exportFromImportedHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags compatibleHandleTypes_ = {} ) VULKAN_HPP_NOEXCEPT + : externalMemoryFeatures{ externalMemoryFeatures_ } + , exportFromImportedHandleTypes{ exportFromImportedHandleTypes_ } + , compatibleHandleTypes{ compatibleHandleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalMemoryProperties( ExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalMemoryProperties( VkExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalMemoryProperties( *reinterpret_cast( &rhs ) ) + { + } + + ExternalMemoryProperties & operator=( ExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalMemoryProperties & operator=( VkExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExternalMemoryProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalMemoryProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( externalMemoryFeatures, exportFromImportedHandleTypes, compatibleHandleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalMemoryProperties const & ) const = default; +#else + bool operator==( ExternalMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( externalMemoryFeatures == rhs.externalMemoryFeatures ) && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && + ( compatibleHandleTypes == rhs.compatibleHandleTypes ); +# endif + } + + bool operator!=( ExternalMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags externalMemoryFeatures = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags exportFromImportedHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags compatibleHandleTypes = {}; + }; + + using ExternalMemoryPropertiesKHR = ExternalMemoryProperties; + + // wrapper struct for struct VkExternalBufferProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalBufferProperties.html + struct ExternalBufferProperties + { + using NativeType = VkExternalBufferProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalBufferProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalBufferProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalMemoryProperties{ externalMemoryProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalBufferProperties( ExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalBufferProperties( VkExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalBufferProperties( *reinterpret_cast( &rhs ) ) + { + } + + ExternalBufferProperties & operator=( ExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalBufferProperties & operator=( VkExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExternalBufferProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalBufferProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalBufferProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalBufferProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalMemoryProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalBufferProperties const & ) const = default; +#else + bool operator==( ExternalBufferProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryProperties == rhs.externalMemoryProperties ); +# endif + } + + bool operator!=( ExternalBufferProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalBufferProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {}; + }; + + template <> + struct CppType + { + using Type = ExternalBufferProperties; + }; + + using ExternalBufferPropertiesKHR = ExternalBufferProperties; + + // wrapper struct for struct VkExternalComputeQueueCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalComputeQueueCreateInfoNV.html + struct ExternalComputeQueueCreateInfoNV + { + using NativeType = VkExternalComputeQueueCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalComputeQueueCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalComputeQueueCreateInfoNV( VULKAN_HPP_NAMESPACE::Queue preferredQueue_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , preferredQueue{ preferredQueue_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalComputeQueueCreateInfoNV( ExternalComputeQueueCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalComputeQueueCreateInfoNV( VkExternalComputeQueueCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalComputeQueueCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ExternalComputeQueueCreateInfoNV & operator=( ExternalComputeQueueCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalComputeQueueCreateInfoNV & operator=( VkExternalComputeQueueCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalComputeQueueCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalComputeQueueCreateInfoNV & setPreferredQueue( VULKAN_HPP_NAMESPACE::Queue preferredQueue_ ) VULKAN_HPP_NOEXCEPT + { + preferredQueue = preferredQueue_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalComputeQueueCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalComputeQueueCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalComputeQueueCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalComputeQueueCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, preferredQueue ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalComputeQueueCreateInfoNV const & ) const = default; +#else + bool operator==( ExternalComputeQueueCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( preferredQueue == rhs.preferredQueue ); +# endif + } + + bool operator!=( ExternalComputeQueueCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalComputeQueueCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Queue preferredQueue = {}; + }; + + template <> + struct CppType + { + using Type = ExternalComputeQueueCreateInfoNV; + }; + + // wrapper struct for struct VkExternalComputeQueueDataParamsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalComputeQueueDataParamsNV.html + struct ExternalComputeQueueDataParamsNV + { + using NativeType = VkExternalComputeQueueDataParamsNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalComputeQueueDataParamsNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalComputeQueueDataParamsNV( uint32_t deviceIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceIndex{ deviceIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalComputeQueueDataParamsNV( ExternalComputeQueueDataParamsNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalComputeQueueDataParamsNV( VkExternalComputeQueueDataParamsNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalComputeQueueDataParamsNV( *reinterpret_cast( &rhs ) ) + { + } + + ExternalComputeQueueDataParamsNV & operator=( ExternalComputeQueueDataParamsNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalComputeQueueDataParamsNV & operator=( VkExternalComputeQueueDataParamsNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalComputeQueueDataParamsNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalComputeQueueDataParamsNV & setDeviceIndex( uint32_t deviceIndex_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndex = deviceIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalComputeQueueDataParamsNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalComputeQueueDataParamsNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalComputeQueueDataParamsNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalComputeQueueDataParamsNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalComputeQueueDataParamsNV const & ) const = default; +#else + bool operator==( ExternalComputeQueueDataParamsNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndex == rhs.deviceIndex ); +# endif + } + + bool operator!=( ExternalComputeQueueDataParamsNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalComputeQueueDataParamsNV; + const void * pNext = {}; + uint32_t deviceIndex = {}; + }; + + template <> + struct CppType + { + using Type = ExternalComputeQueueDataParamsNV; + }; + + // wrapper struct for struct VkExternalComputeQueueDeviceCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalComputeQueueDeviceCreateInfoNV.html + struct ExternalComputeQueueDeviceCreateInfoNV + { + using NativeType = VkExternalComputeQueueDeviceCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalComputeQueueDeviceCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalComputeQueueDeviceCreateInfoNV( uint32_t reservedExternalQueues_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , reservedExternalQueues{ reservedExternalQueues_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalComputeQueueDeviceCreateInfoNV( ExternalComputeQueueDeviceCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalComputeQueueDeviceCreateInfoNV( VkExternalComputeQueueDeviceCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalComputeQueueDeviceCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ExternalComputeQueueDeviceCreateInfoNV & operator=( ExternalComputeQueueDeviceCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalComputeQueueDeviceCreateInfoNV & operator=( VkExternalComputeQueueDeviceCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalComputeQueueDeviceCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalComputeQueueDeviceCreateInfoNV & setReservedExternalQueues( uint32_t reservedExternalQueues_ ) VULKAN_HPP_NOEXCEPT + { + reservedExternalQueues = reservedExternalQueues_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalComputeQueueDeviceCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalComputeQueueDeviceCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalComputeQueueDeviceCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalComputeQueueDeviceCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, reservedExternalQueues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalComputeQueueDeviceCreateInfoNV const & ) const = default; +#else + bool operator==( ExternalComputeQueueDeviceCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( reservedExternalQueues == rhs.reservedExternalQueues ); +# endif + } + + bool operator!=( ExternalComputeQueueDeviceCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalComputeQueueDeviceCreateInfoNV; + const void * pNext = {}; + uint32_t reservedExternalQueues = {}; + }; + + template <> + struct CppType + { + using Type = ExternalComputeQueueDeviceCreateInfoNV; + }; + + // wrapper struct for struct VkExternalFenceProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFenceProperties.html + struct ExternalFenceProperties + { + using NativeType = VkExternalFenceProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFenceProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalFenceProperties( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags exportFromImportedHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags compatibleHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags externalFenceFeatures_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , exportFromImportedHandleTypes{ exportFromImportedHandleTypes_ } + , compatibleHandleTypes{ compatibleHandleTypes_ } + , externalFenceFeatures{ externalFenceFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalFenceProperties( ExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalFenceProperties( VkExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalFenceProperties( *reinterpret_cast( &rhs ) ) + { + } + + ExternalFenceProperties & operator=( ExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalFenceProperties & operator=( VkExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExternalFenceProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalFenceProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalFenceProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalFenceProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, exportFromImportedHandleTypes, compatibleHandleTypes, externalFenceFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalFenceProperties const & ) const = default; +#else + bool operator==( ExternalFenceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && + ( compatibleHandleTypes == rhs.compatibleHandleTypes ) && ( externalFenceFeatures == rhs.externalFenceFeatures ); +# endif + } + + bool operator!=( ExternalFenceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalFenceProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags exportFromImportedHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags compatibleHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags externalFenceFeatures = {}; + }; + + template <> + struct CppType + { + using Type = ExternalFenceProperties; + }; + + using ExternalFencePropertiesKHR = ExternalFenceProperties; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkExternalFormatANDROID, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFormatANDROID.html + struct ExternalFormatANDROID + { + using NativeType = VkExternalFormatANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFormatANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalFormatANDROID( uint64_t externalFormat_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalFormat{ externalFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalFormatANDROID( ExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalFormatANDROID( VkExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalFormatANDROID( *reinterpret_cast( &rhs ) ) + { + } + + ExternalFormatANDROID & operator=( ExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalFormatANDROID & operator=( VkExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID & setExternalFormat( uint64_t externalFormat_ ) VULKAN_HPP_NOEXCEPT + { + externalFormat = externalFormat_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalFormatANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalFormatANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalFormatANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalFormatANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalFormat ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalFormatANDROID const & ) const = default; +# else + bool operator==( ExternalFormatANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalFormat == rhs.externalFormat ); +# endif + } + + bool operator!=( ExternalFormatANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalFormatANDROID; + void * pNext = {}; + uint64_t externalFormat = {}; + }; + + template <> + struct CppType + { + using Type = ExternalFormatANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + // wrapper struct for struct VkExternalFormatQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalFormatQNX.html + struct ExternalFormatQNX + { + using NativeType = VkExternalFormatQNX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFormatQNX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalFormatQNX( uint64_t externalFormat_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalFormat{ externalFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalFormatQNX( ExternalFormatQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalFormatQNX( VkExternalFormatQNX const & rhs ) VULKAN_HPP_NOEXCEPT : ExternalFormatQNX( *reinterpret_cast( &rhs ) ) {} + + ExternalFormatQNX & operator=( ExternalFormatQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalFormatQNX & operator=( VkExternalFormatQNX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalFormatQNX & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalFormatQNX & setExternalFormat( uint64_t externalFormat_ ) VULKAN_HPP_NOEXCEPT + { + externalFormat = externalFormat_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalFormatQNX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalFormatQNX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalFormatQNX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalFormatQNX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalFormat ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalFormatQNX const & ) const = default; +# else + bool operator==( ExternalFormatQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalFormat == rhs.externalFormat ); +# endif + } + + bool operator!=( ExternalFormatQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalFormatQNX; + void * pNext = {}; + uint64_t externalFormat = {}; + }; + + template <> + struct CppType + { + using Type = ExternalFormatQNX; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + // wrapper struct for struct VkExternalImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalImageFormatProperties.html + struct ExternalImageFormatProperties + { + using NativeType = VkExternalImageFormatProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalImageFormatProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalImageFormatProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalMemoryProperties{ externalMemoryProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalImageFormatProperties( ExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalImageFormatProperties( VkExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalImageFormatProperties( *reinterpret_cast( &rhs ) ) + { + } + + ExternalImageFormatProperties & operator=( ExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalImageFormatProperties & operator=( VkExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExternalImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalImageFormatProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalImageFormatProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalImageFormatProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalMemoryProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalImageFormatProperties const & ) const = default; +#else + bool operator==( ExternalImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryProperties == rhs.externalMemoryProperties ); +# endif + } + + bool operator!=( ExternalImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalImageFormatProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {}; + }; + + template <> + struct CppType + { + using Type = ExternalImageFormatProperties; + }; + + using ExternalImageFormatPropertiesKHR = ExternalImageFormatProperties; + + // wrapper struct for struct VkImageFormatProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageFormatProperties.html + struct ImageFormatProperties + { + using NativeType = VkImageFormatProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageFormatProperties( VULKAN_HPP_NAMESPACE::Extent3D maxExtent_ = {}, + uint32_t maxMipLevels_ = {}, + uint32_t maxArrayLayers_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxResourceSize_ = {} ) VULKAN_HPP_NOEXCEPT + : maxExtent{ maxExtent_ } + , maxMipLevels{ maxMipLevels_ } + , maxArrayLayers{ maxArrayLayers_ } + , sampleCounts{ sampleCounts_ } + , maxResourceSize{ maxResourceSize_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageFormatProperties( ImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageFormatProperties( VkImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageFormatProperties( *reinterpret_cast( &rhs ) ) + { + } + + ImageFormatProperties & operator=( ImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageFormatProperties & operator=( VkImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageFormatProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( maxExtent, maxMipLevels, maxArrayLayers, sampleCounts, maxResourceSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageFormatProperties const & ) const = default; +#else + bool operator==( ImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( maxExtent == rhs.maxExtent ) && ( maxMipLevels == rhs.maxMipLevels ) && ( maxArrayLayers == rhs.maxArrayLayers ) && + ( sampleCounts == rhs.sampleCounts ) && ( maxResourceSize == rhs.maxResourceSize ); +# endif + } + + bool operator!=( ImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Extent3D maxExtent = {}; + uint32_t maxMipLevels = {}; + uint32_t maxArrayLayers = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxResourceSize = {}; + }; + + // wrapper struct for struct VkExternalImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalImageFormatPropertiesNV.html + struct ExternalImageFormatPropertiesNV + { + using NativeType = VkExternalImageFormatPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ExternalImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsNV externalMemoryFeatures_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes_ = {} ) VULKAN_HPP_NOEXCEPT + : imageFormatProperties{ imageFormatProperties_ } + , externalMemoryFeatures{ externalMemoryFeatures_ } + , exportFromImportedHandleTypes{ exportFromImportedHandleTypes_ } + , compatibleHandleTypes{ compatibleHandleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalImageFormatPropertiesNV( ExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalImageFormatPropertiesNV( VkExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalImageFormatPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + ExternalImageFormatPropertiesNV & operator=( ExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalImageFormatPropertiesNV & operator=( VkExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExternalImageFormatPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalImageFormatPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalImageFormatPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalImageFormatPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( imageFormatProperties, externalMemoryFeatures, exportFromImportedHandleTypes, compatibleHandleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalImageFormatPropertiesNV const & ) const = default; +#else + bool operator==( ExternalImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( imageFormatProperties == rhs.imageFormatProperties ) && ( externalMemoryFeatures == rhs.externalMemoryFeatures ) && + ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && ( compatibleHandleTypes == rhs.compatibleHandleTypes ); +# endif + } + + bool operator!=( ExternalImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsNV externalMemoryFeatures = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes = {}; + }; + + // wrapper struct for struct VkExternalMemoryAcquireUnmodifiedEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryAcquireUnmodifiedEXT.html + struct ExternalMemoryAcquireUnmodifiedEXT + { + using NativeType = VkExternalMemoryAcquireUnmodifiedEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryAcquireUnmodifiedEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalMemoryAcquireUnmodifiedEXT( VULKAN_HPP_NAMESPACE::Bool32 acquireUnmodifiedMemory_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , acquireUnmodifiedMemory{ acquireUnmodifiedMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalMemoryAcquireUnmodifiedEXT( ExternalMemoryAcquireUnmodifiedEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalMemoryAcquireUnmodifiedEXT( VkExternalMemoryAcquireUnmodifiedEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalMemoryAcquireUnmodifiedEXT( *reinterpret_cast( &rhs ) ) + { + } + + ExternalMemoryAcquireUnmodifiedEXT & operator=( ExternalMemoryAcquireUnmodifiedEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalMemoryAcquireUnmodifiedEXT & operator=( VkExternalMemoryAcquireUnmodifiedEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryAcquireUnmodifiedEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryAcquireUnmodifiedEXT & + setAcquireUnmodifiedMemory( VULKAN_HPP_NAMESPACE::Bool32 acquireUnmodifiedMemory_ ) VULKAN_HPP_NOEXCEPT + { + acquireUnmodifiedMemory = acquireUnmodifiedMemory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalMemoryAcquireUnmodifiedEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryAcquireUnmodifiedEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryAcquireUnmodifiedEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalMemoryAcquireUnmodifiedEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, acquireUnmodifiedMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalMemoryAcquireUnmodifiedEXT const & ) const = default; +#else + bool operator==( ExternalMemoryAcquireUnmodifiedEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireUnmodifiedMemory == rhs.acquireUnmodifiedMemory ); +# endif + } + + bool operator!=( ExternalMemoryAcquireUnmodifiedEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryAcquireUnmodifiedEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 acquireUnmodifiedMemory = {}; + }; + + template <> + struct CppType + { + using Type = ExternalMemoryAcquireUnmodifiedEXT; + }; + + // wrapper struct for struct VkExternalMemoryBufferCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryBufferCreateInfo.html + struct ExternalMemoryBufferCreateInfo + { + using NativeType = VkExternalMemoryBufferCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryBufferCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalMemoryBufferCreateInfo( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalMemoryBufferCreateInfo( ExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalMemoryBufferCreateInfo( VkExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalMemoryBufferCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ExternalMemoryBufferCreateInfo & operator=( ExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalMemoryBufferCreateInfo & operator=( VkExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo & + setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalMemoryBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryBufferCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryBufferCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalMemoryBufferCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalMemoryBufferCreateInfo const & ) const = default; +#else + bool operator==( ExternalMemoryBufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExternalMemoryBufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryBufferCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExternalMemoryBufferCreateInfo; + }; + + using ExternalMemoryBufferCreateInfoKHR = ExternalMemoryBufferCreateInfo; + + // wrapper struct for struct VkExternalMemoryImageCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryImageCreateInfo.html + struct ExternalMemoryImageCreateInfo + { + using NativeType = VkExternalMemoryImageCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfo( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfo( ExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalMemoryImageCreateInfo( VkExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalMemoryImageCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ExternalMemoryImageCreateInfo & operator=( ExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalMemoryImageCreateInfo & operator=( VkExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo & + setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalMemoryImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryImageCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryImageCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalMemoryImageCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalMemoryImageCreateInfo const & ) const = default; +#else + bool operator==( ExternalMemoryImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExternalMemoryImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryImageCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExternalMemoryImageCreateInfo; + }; + + using ExternalMemoryImageCreateInfoKHR = ExternalMemoryImageCreateInfo; + + // wrapper struct for struct VkExternalMemoryImageCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryImageCreateInfoNV.html + struct ExternalMemoryImageCreateInfoNV + { + using NativeType = VkExternalMemoryImageCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfoNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfoNV( ExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalMemoryImageCreateInfoNV( VkExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalMemoryImageCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ExternalMemoryImageCreateInfoNV & operator=( ExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalMemoryImageCreateInfoNV & operator=( VkExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV & + setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalMemoryImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryImageCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalMemoryImageCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalMemoryImageCreateInfoNV const & ) const = default; +#else + bool operator==( ExternalMemoryImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExternalMemoryImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryImageCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExternalMemoryImageCreateInfoNV; + }; + + // wrapper struct for struct VkExternalMemoryTensorCreateInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalMemoryTensorCreateInfoARM.html + struct ExternalMemoryTensorCreateInfoARM + { + using NativeType = VkExternalMemoryTensorCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryTensorCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalMemoryTensorCreateInfoARM( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleTypes{ handleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalMemoryTensorCreateInfoARM( ExternalMemoryTensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalMemoryTensorCreateInfoARM( VkExternalMemoryTensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalMemoryTensorCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + ExternalMemoryTensorCreateInfoARM & operator=( ExternalMemoryTensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalMemoryTensorCreateInfoARM & operator=( VkExternalMemoryTensorCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryTensorCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalMemoryTensorCreateInfoARM & + setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT + { + handleTypes = handleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalMemoryTensorCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryTensorCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalMemoryTensorCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalMemoryTensorCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalMemoryTensorCreateInfoARM const & ) const = default; +#else + bool operator==( ExternalMemoryTensorCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes ); +# endif + } + + bool operator!=( ExternalMemoryTensorCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalMemoryTensorCreateInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {}; + }; + + template <> + struct CppType + { + using Type = ExternalMemoryTensorCreateInfoARM; + }; + + // wrapper struct for struct VkExternalSemaphoreProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalSemaphoreProperties.html + struct ExternalSemaphoreProperties + { + using NativeType = VkExternalSemaphoreProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalSemaphoreProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalSemaphoreProperties( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags compatibleHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags externalSemaphoreFeatures_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , exportFromImportedHandleTypes{ exportFromImportedHandleTypes_ } + , compatibleHandleTypes{ compatibleHandleTypes_ } + , externalSemaphoreFeatures{ externalSemaphoreFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalSemaphoreProperties( ExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalSemaphoreProperties( VkExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalSemaphoreProperties( *reinterpret_cast( &rhs ) ) + { + } + + ExternalSemaphoreProperties & operator=( ExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalSemaphoreProperties & operator=( VkExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkExternalSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalSemaphoreProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalSemaphoreProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalSemaphoreProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, exportFromImportedHandleTypes, compatibleHandleTypes, externalSemaphoreFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalSemaphoreProperties const & ) const = default; +#else + bool operator==( ExternalSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) && + ( compatibleHandleTypes == rhs.compatibleHandleTypes ) && ( externalSemaphoreFeatures == rhs.externalSemaphoreFeatures ); +# endif + } + + bool operator!=( ExternalSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalSemaphoreProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags compatibleHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags externalSemaphoreFeatures = {}; + }; + + template <> + struct CppType + { + using Type = ExternalSemaphoreProperties; + }; + + using ExternalSemaphorePropertiesKHR = ExternalSemaphoreProperties; + + // wrapper struct for struct VkExternalTensorPropertiesARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkExternalTensorPropertiesARM.html + struct ExternalTensorPropertiesARM + { + using NativeType = VkExternalTensorPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalTensorPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ExternalTensorPropertiesARM( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalMemoryProperties{ externalMemoryProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR ExternalTensorPropertiesARM( ExternalTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ExternalTensorPropertiesARM( VkExternalTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : ExternalTensorPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + ExternalTensorPropertiesARM & operator=( ExternalTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ExternalTensorPropertiesARM & operator=( VkExternalTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ExternalTensorPropertiesARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ExternalTensorPropertiesARM & + setExternalMemoryProperties( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties const & externalMemoryProperties_ ) VULKAN_HPP_NOEXCEPT + { + externalMemoryProperties = externalMemoryProperties_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkExternalTensorPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalTensorPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkExternalTensorPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkExternalTensorPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalMemoryProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ExternalTensorPropertiesARM const & ) const = default; +#else + bool operator==( ExternalTensorPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryProperties == rhs.externalMemoryProperties ); +# endif + } + + bool operator!=( ExternalTensorPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eExternalTensorPropertiesARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {}; + }; + + template <> + struct CppType + { + using Type = ExternalTensorPropertiesARM; + }; + + // wrapper struct for struct VkFenceCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceCreateInfo.html + struct FenceCreateInfo + { + using NativeType = VkFenceCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FenceCreateInfo( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR FenceCreateInfo( FenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FenceCreateInfo( VkFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : FenceCreateInfo( *reinterpret_cast( &rhs ) ) {} + + FenceCreateInfo & operator=( FenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FenceCreateInfo & operator=( VkFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFenceCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFenceCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFenceCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FenceCreateInfo const & ) const = default; +#else + bool operator==( FenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( FenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFenceCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::FenceCreateFlags flags = {}; + }; + + template <> + struct CppType + { + using Type = FenceCreateInfo; + }; + + // wrapper struct for struct VkFenceGetFdInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceGetFdInfoKHR.html + struct FenceGetFdInfoKHR + { + using NativeType = VkFenceGetFdInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetFdInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + FenceGetFdInfoKHR( VULKAN_HPP_NAMESPACE::Fence fence_ = {}, + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fence{ fence_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR FenceGetFdInfoKHR( FenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FenceGetFdInfoKHR( VkFenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : FenceGetFdInfoKHR( *reinterpret_cast( &rhs ) ) {} + + FenceGetFdInfoKHR & operator=( FenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FenceGetFdInfoKHR & operator=( VkFenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT + { + fence = fence_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFenceGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFenceGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFenceGetFdInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFenceGetFdInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fence, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FenceGetFdInfoKHR const & ) const = default; +#else + bool operator==( FenceGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( FenceGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFenceGetFdInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Fence fence = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = FenceGetFdInfoKHR; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkFenceGetWin32HandleInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFenceGetWin32HandleInfoKHR.html + struct FenceGetWin32HandleInfoKHR + { + using NativeType = VkFenceGetWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FenceGetWin32HandleInfoKHR( + VULKAN_HPP_NAMESPACE::Fence fence_ = {}, + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fence{ fence_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR FenceGetWin32HandleInfoKHR( FenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FenceGetWin32HandleInfoKHR( VkFenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : FenceGetWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + FenceGetWin32HandleInfoKHR & operator=( FenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FenceGetWin32HandleInfoKHR & operator=( VkFenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT + { + fence = fence_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFenceGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFenceGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFenceGetWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFenceGetWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fence, handleType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FenceGetWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( FenceGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( FenceGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFenceGetWin32HandleInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Fence fence = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = FenceGetWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkFilterCubicImageViewImageFormatPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkFilterCubicImageViewImageFormatPropertiesEXT.html + struct FilterCubicImageViewImageFormatPropertiesEXT + { + using NativeType = VkFilterCubicImageViewImageFormatPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFilterCubicImageViewImageFormatPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FilterCubicImageViewImageFormatPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 filterCubic_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 filterCubicMinmax_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , filterCubic{ filterCubic_ } + , filterCubicMinmax{ filterCubicMinmax_ } + { + } + + VULKAN_HPP_CONSTEXPR FilterCubicImageViewImageFormatPropertiesEXT( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FilterCubicImageViewImageFormatPropertiesEXT( VkFilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : FilterCubicImageViewImageFormatPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + FilterCubicImageViewImageFormatPropertiesEXT & operator=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FilterCubicImageViewImageFormatPropertiesEXT & operator=( VkFilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkFilterCubicImageViewImageFormatPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFilterCubicImageViewImageFormatPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFilterCubicImageViewImageFormatPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFilterCubicImageViewImageFormatPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, filterCubic, filterCubicMinmax ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FilterCubicImageViewImageFormatPropertiesEXT const & ) const = default; +#else + bool operator==( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterCubic == rhs.filterCubic ) && ( filterCubicMinmax == rhs.filterCubicMinmax ); +# endif + } + + bool operator!=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFilterCubicImageViewImageFormatPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 filterCubic = {}; + VULKAN_HPP_NAMESPACE::Bool32 filterCubicMinmax = {}; + }; + + template <> + struct CppType + { + using Type = FilterCubicImageViewImageFormatPropertiesEXT; + }; + + // wrapper struct for struct VkFormatProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatProperties.html + struct FormatProperties + { + using NativeType = VkFormatProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FormatProperties( VULKAN_HPP_NAMESPACE::FormatFeatureFlags linearTilingFeatures_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags optimalTilingFeatures_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags bufferFeatures_ = {} ) VULKAN_HPP_NOEXCEPT + : linearTilingFeatures{ linearTilingFeatures_ } + , optimalTilingFeatures{ optimalTilingFeatures_ } + , bufferFeatures{ bufferFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR FormatProperties( FormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FormatProperties( VkFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT : FormatProperties( *reinterpret_cast( &rhs ) ) {} + + FormatProperties & operator=( FormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FormatProperties & operator=( VkFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkFormatProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFormatProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFormatProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFormatProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( linearTilingFeatures, optimalTilingFeatures, bufferFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FormatProperties const & ) const = default; +#else + bool operator==( FormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( linearTilingFeatures == rhs.linearTilingFeatures ) && ( optimalTilingFeatures == rhs.optimalTilingFeatures ) && + ( bufferFeatures == rhs.bufferFeatures ); +# endif + } + + bool operator!=( FormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::FormatFeatureFlags linearTilingFeatures = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags optimalTilingFeatures = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags bufferFeatures = {}; + }; + + // wrapper struct for struct VkFormatProperties2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatProperties2.html + struct FormatProperties2 + { + using NativeType = VkFormatProperties2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FormatProperties2( VULKAN_HPP_NAMESPACE::FormatProperties formatProperties_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , formatProperties{ formatProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR FormatProperties2( FormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FormatProperties2( VkFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT : FormatProperties2( *reinterpret_cast( &rhs ) ) {} + + FormatProperties2 & operator=( FormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FormatProperties2 & operator=( VkFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFormatProperties2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFormatProperties2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFormatProperties2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, formatProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FormatProperties2 const & ) const = default; +#else + bool operator==( FormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatProperties == rhs.formatProperties ); +# endif + } + + bool operator!=( FormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFormatProperties2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::FormatProperties formatProperties = {}; + }; + + template <> + struct CppType + { + using Type = FormatProperties2; + }; + + using FormatProperties2KHR = FormatProperties2; + + // wrapper struct for struct VkFormatProperties3, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFormatProperties3.html + struct FormatProperties3 + { + using NativeType = VkFormatProperties3; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties3; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FormatProperties3( VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingFeatures_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingFeatures_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 bufferFeatures_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , linearTilingFeatures{ linearTilingFeatures_ } + , optimalTilingFeatures{ optimalTilingFeatures_ } + , bufferFeatures{ bufferFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR FormatProperties3( FormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FormatProperties3( VkFormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT : FormatProperties3( *reinterpret_cast( &rhs ) ) {} + + FormatProperties3 & operator=( FormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FormatProperties3 & operator=( VkFormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkFormatProperties3 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFormatProperties3 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFormatProperties3 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFormatProperties3 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, linearTilingFeatures, optimalTilingFeatures, bufferFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FormatProperties3 const & ) const = default; +#else + bool operator==( FormatProperties3 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( linearTilingFeatures == rhs.linearTilingFeatures ) && + ( optimalTilingFeatures == rhs.optimalTilingFeatures ) && ( bufferFeatures == rhs.bufferFeatures ); +# endif + } + + bool operator!=( FormatProperties3 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFormatProperties3; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingFeatures = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingFeatures = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 bufferFeatures = {}; + }; + + template <> + struct CppType + { + using Type = FormatProperties3; + }; + + using FormatProperties3KHR = FormatProperties3; + + // wrapper struct for struct VkFragmentShadingRateAttachmentInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkFragmentShadingRateAttachmentInfoKHR.html + struct FragmentShadingRateAttachmentInfoKHR + { + using NativeType = VkFragmentShadingRateAttachmentInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFragmentShadingRateAttachmentInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FragmentShadingRateAttachmentInfoKHR( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pFragmentShadingRateAttachment{ pFragmentShadingRateAttachment_ } + , shadingRateAttachmentTexelSize{ shadingRateAttachmentTexelSize_ } + { + } + + VULKAN_HPP_CONSTEXPR FragmentShadingRateAttachmentInfoKHR( FragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FragmentShadingRateAttachmentInfoKHR( VkFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : FragmentShadingRateAttachmentInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + FragmentShadingRateAttachmentInfoKHR & operator=( FragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FragmentShadingRateAttachmentInfoKHR & operator=( VkFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & + setPFragmentShadingRateAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment_ ) VULKAN_HPP_NOEXCEPT + { + pFragmentShadingRateAttachment = pFragmentShadingRateAttachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & + setShadingRateAttachmentTexelSize( VULKAN_HPP_NAMESPACE::Extent2D const & shadingRateAttachmentTexelSize_ ) VULKAN_HPP_NOEXCEPT + { + shadingRateAttachmentTexelSize = shadingRateAttachmentTexelSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFragmentShadingRateAttachmentInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFragmentShadingRateAttachmentInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pFragmentShadingRateAttachment, shadingRateAttachmentTexelSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FragmentShadingRateAttachmentInfoKHR const & ) const = default; +#else + bool operator==( FragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pFragmentShadingRateAttachment == rhs.pFragmentShadingRateAttachment ) && + ( shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize ); +# endif + } + + bool operator!=( FragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFragmentShadingRateAttachmentInfoKHR; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment = {}; + VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize = {}; + }; + + template <> + struct CppType + { + using Type = FragmentShadingRateAttachmentInfoKHR; + }; + + // wrapper struct for struct VkFrameBoundaryEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFrameBoundaryEXT.html + struct FrameBoundaryEXT + { + using NativeType = VkFrameBoundaryEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFrameBoundaryEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FrameBoundaryEXT( VULKAN_HPP_NAMESPACE::FrameBoundaryFlagsEXT flags_ = {}, + uint64_t frameID_ = {}, + uint32_t imageCount_ = {}, + const VULKAN_HPP_NAMESPACE::Image * pImages_ = {}, + uint32_t bufferCount_ = {}, + const VULKAN_HPP_NAMESPACE::Buffer * pBuffers_ = {}, + uint64_t tagName_ = {}, + size_t tagSize_ = {}, + const void * pTag_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , frameID{ frameID_ } + , imageCount{ imageCount_ } + , pImages{ pImages_ } + , bufferCount{ bufferCount_ } + , pBuffers{ pBuffers_ } + , tagName{ tagName_ } + , tagSize{ tagSize_ } + , pTag{ pTag_ } + { + } + + VULKAN_HPP_CONSTEXPR FrameBoundaryEXT( FrameBoundaryEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FrameBoundaryEXT( VkFrameBoundaryEXT const & rhs ) VULKAN_HPP_NOEXCEPT : FrameBoundaryEXT( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + FrameBoundaryEXT( VULKAN_HPP_NAMESPACE::FrameBoundaryFlagsEXT flags_, + uint64_t frameID_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & images_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & buffers_ = {}, + uint64_t tagName_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , frameID( frameID_ ) + , imageCount( static_cast( images_.size() ) ) + , pImages( images_.data() ) + , bufferCount( static_cast( buffers_.size() ) ) + , pBuffers( buffers_.data() ) + , tagName( tagName_ ) + , tagSize( tag_.size() * sizeof( T ) ) + , pTag( tag_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + FrameBoundaryEXT & operator=( FrameBoundaryEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FrameBoundaryEXT & operator=( VkFrameBoundaryEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setFlags( VULKAN_HPP_NAMESPACE::FrameBoundaryFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setFrameID( uint64_t frameID_ ) VULKAN_HPP_NOEXCEPT + { + frameID = frameID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setImageCount( uint32_t imageCount_ ) VULKAN_HPP_NOEXCEPT + { + imageCount = imageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setPImages( const VULKAN_HPP_NAMESPACE::Image * pImages_ ) VULKAN_HPP_NOEXCEPT + { + pImages = pImages_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FrameBoundaryEXT & setImages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & images_ ) VULKAN_HPP_NOEXCEPT + { + imageCount = static_cast( images_.size() ); + pImages = images_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setBufferCount( uint32_t bufferCount_ ) VULKAN_HPP_NOEXCEPT + { + bufferCount = bufferCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setPBuffers( const VULKAN_HPP_NAMESPACE::Buffer * pBuffers_ ) VULKAN_HPP_NOEXCEPT + { + pBuffers = pBuffers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FrameBoundaryEXT & setBuffers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & buffers_ ) VULKAN_HPP_NOEXCEPT + { + bufferCount = static_cast( buffers_.size() ); + pBuffers = buffers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT + { + tagName = tagName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT + { + tagSize = tagSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT + { + pTag = pTag_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + FrameBoundaryEXT & setTag( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tag_ ) VULKAN_HPP_NOEXCEPT + { + tagSize = tag_.size() * sizeof( T ); + pTag = tag_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFrameBoundaryEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFrameBoundaryEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFrameBoundaryEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFrameBoundaryEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, frameID, imageCount, pImages, bufferCount, pBuffers, tagName, tagSize, pTag ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FrameBoundaryEXT const & ) const = default; +#else + bool operator==( FrameBoundaryEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( frameID == rhs.frameID ) && ( imageCount == rhs.imageCount ) && + ( pImages == rhs.pImages ) && ( bufferCount == rhs.bufferCount ) && ( pBuffers == rhs.pBuffers ) && ( tagName == rhs.tagName ) && + ( tagSize == rhs.tagSize ) && ( pTag == rhs.pTag ); +# endif + } + + bool operator!=( FrameBoundaryEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFrameBoundaryEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::FrameBoundaryFlagsEXT flags = {}; + uint64_t frameID = {}; + uint32_t imageCount = {}; + const VULKAN_HPP_NAMESPACE::Image * pImages = {}; + uint32_t bufferCount = {}; + const VULKAN_HPP_NAMESPACE::Buffer * pBuffers = {}; + uint64_t tagName = {}; + size_t tagSize = {}; + const void * pTag = {}; + }; + + template <> + struct CppType + { + using Type = FrameBoundaryEXT; + }; + + // wrapper struct for struct VkFrameBoundaryTensorsARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFrameBoundaryTensorsARM.html + struct FrameBoundaryTensorsARM + { + using NativeType = VkFrameBoundaryTensorsARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFrameBoundaryTensorsARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FrameBoundaryTensorsARM( uint32_t tensorCount_ = {}, + const VULKAN_HPP_NAMESPACE::TensorARM * pTensors_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorCount{ tensorCount_ } + , pTensors{ pTensors_ } + { + } + + VULKAN_HPP_CONSTEXPR FrameBoundaryTensorsARM( FrameBoundaryTensorsARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FrameBoundaryTensorsARM( VkFrameBoundaryTensorsARM const & rhs ) VULKAN_HPP_NOEXCEPT + : FrameBoundaryTensorsARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FrameBoundaryTensorsARM( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tensors_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), tensorCount( static_cast( tensors_.size() ) ), pTensors( tensors_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + FrameBoundaryTensorsARM & operator=( FrameBoundaryTensorsARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FrameBoundaryTensorsARM & operator=( VkFrameBoundaryTensorsARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryTensorsARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryTensorsARM & setTensorCount( uint32_t tensorCount_ ) VULKAN_HPP_NOEXCEPT + { + tensorCount = tensorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FrameBoundaryTensorsARM & setPTensors( const VULKAN_HPP_NAMESPACE::TensorARM * pTensors_ ) VULKAN_HPP_NOEXCEPT + { + pTensors = pTensors_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FrameBoundaryTensorsARM & + setTensors( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tensors_ ) VULKAN_HPP_NOEXCEPT + { + tensorCount = static_cast( tensors_.size() ); + pTensors = tensors_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFrameBoundaryTensorsARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFrameBoundaryTensorsARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFrameBoundaryTensorsARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFrameBoundaryTensorsARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensorCount, pTensors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FrameBoundaryTensorsARM const & ) const = default; +#else + bool operator==( FrameBoundaryTensorsARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorCount == rhs.tensorCount ) && ( pTensors == rhs.pTensors ); +# endif + } + + bool operator!=( FrameBoundaryTensorsARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFrameBoundaryTensorsARM; + const void * pNext = {}; + uint32_t tensorCount = {}; + const VULKAN_HPP_NAMESPACE::TensorARM * pTensors = {}; + }; + + template <> + struct CppType + { + using Type = FrameBoundaryTensorsARM; + }; + + // wrapper struct for struct VkFramebufferAttachmentImageInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebufferAttachmentImageInfo.html + struct FramebufferAttachmentImageInfo + { + using NativeType = VkFramebufferAttachmentImageInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentImageInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FramebufferAttachmentImageInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, + uint32_t width_ = {}, + uint32_t height_ = {}, + uint32_t layerCount_ = {}, + uint32_t viewFormatCount_ = {}, + const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , usage{ usage_ } + , width{ width_ } + , height{ height_ } + , layerCount{ layerCount_ } + , viewFormatCount{ viewFormatCount_ } + , pViewFormats{ pViewFormats_ } + { + } + + VULKAN_HPP_CONSTEXPR FramebufferAttachmentImageInfo( FramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FramebufferAttachmentImageInfo( VkFramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : FramebufferAttachmentImageInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FramebufferAttachmentImageInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_, + uint32_t width_, + uint32_t height_, + uint32_t layerCount_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , usage( usage_ ) + , width( width_ ) + , height( height_ ) + , layerCount( layerCount_ ) + , viewFormatCount( static_cast( viewFormats_.size() ) ) + , pViewFormats( viewFormats_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + FramebufferAttachmentImageInfo & operator=( FramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FramebufferAttachmentImageInfo & operator=( VkFramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = layerCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT + { + viewFormatCount = viewFormatCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT + { + pViewFormats = pViewFormats_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FramebufferAttachmentImageInfo & + setViewFormats( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_ ) VULKAN_HPP_NOEXCEPT + { + viewFormatCount = static_cast( viewFormats_.size() ); + pViewFormats = viewFormats_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFramebufferAttachmentImageInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferAttachmentImageInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferAttachmentImageInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFramebufferAttachmentImageInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, usage, width, height, layerCount, viewFormatCount, pViewFormats ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FramebufferAttachmentImageInfo const & ) const = default; +#else + bool operator==( FramebufferAttachmentImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( usage == rhs.usage ) && ( width == rhs.width ) && + ( height == rhs.height ) && ( layerCount == rhs.layerCount ) && ( viewFormatCount == rhs.viewFormatCount ) && ( pViewFormats == rhs.pViewFormats ); +# endif + } + + bool operator!=( FramebufferAttachmentImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferAttachmentImageInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; + uint32_t width = {}; + uint32_t height = {}; + uint32_t layerCount = {}; + uint32_t viewFormatCount = {}; + const VULKAN_HPP_NAMESPACE::Format * pViewFormats = {}; + }; + + template <> + struct CppType + { + using Type = FramebufferAttachmentImageInfo; + }; + + using FramebufferAttachmentImageInfoKHR = FramebufferAttachmentImageInfo; + + // wrapper struct for struct VkFramebufferAttachmentsCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebufferAttachmentsCreateInfo.html + struct FramebufferAttachmentsCreateInfo + { + using NativeType = VkFramebufferAttachmentsCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentsCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FramebufferAttachmentsCreateInfo( uint32_t attachmentImageInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachmentImageInfoCount{ attachmentImageInfoCount_ } + , pAttachmentImageInfos{ pAttachmentImageInfos_ } + { + } + + VULKAN_HPP_CONSTEXPR FramebufferAttachmentsCreateInfo( FramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FramebufferAttachmentsCreateInfo( VkFramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : FramebufferAttachmentsCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FramebufferAttachmentsCreateInfo( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentImageInfos_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , attachmentImageInfoCount( static_cast( attachmentImageInfos_.size() ) ) + , pAttachmentImageInfos( attachmentImageInfos_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + FramebufferAttachmentsCreateInfo & operator=( FramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FramebufferAttachmentsCreateInfo & operator=( VkFramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & setAttachmentImageInfoCount( uint32_t attachmentImageInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentImageInfoCount = attachmentImageInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & + setPAttachmentImageInfos( const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos_ ) VULKAN_HPP_NOEXCEPT + { + pAttachmentImageInfos = pAttachmentImageInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FramebufferAttachmentsCreateInfo & setAttachmentImageInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentImageInfos_ ) + VULKAN_HPP_NOEXCEPT + { + attachmentImageInfoCount = static_cast( attachmentImageInfos_.size() ); + pAttachmentImageInfos = attachmentImageInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFramebufferAttachmentsCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferAttachmentsCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferAttachmentsCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFramebufferAttachmentsCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, attachmentImageInfoCount, pAttachmentImageInfos ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FramebufferAttachmentsCreateInfo const & ) const = default; +#else + bool operator==( FramebufferAttachmentsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentImageInfoCount == rhs.attachmentImageInfoCount ) && + ( pAttachmentImageInfos == rhs.pAttachmentImageInfos ); +# endif + } + + bool operator!=( FramebufferAttachmentsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferAttachmentsCreateInfo; + const void * pNext = {}; + uint32_t attachmentImageInfoCount = {}; + const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos = {}; + }; + + template <> + struct CppType + { + using Type = FramebufferAttachmentsCreateInfo; + }; + + using FramebufferAttachmentsCreateInfoKHR = FramebufferAttachmentsCreateInfo; + + // wrapper struct for struct VkFramebufferCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebufferCreateInfo.html + struct FramebufferCreateInfo + { + using NativeType = VkFramebufferCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FramebufferCreateInfo( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, + uint32_t attachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ = {}, + uint32_t width_ = {}, + uint32_t height_ = {}, + uint32_t layers_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , renderPass{ renderPass_ } + , attachmentCount{ attachmentCount_ } + , pAttachments{ pAttachments_ } + , width{ width_ } + , height{ height_ } + , layers{ layers_ } + { + } + + VULKAN_HPP_CONSTEXPR FramebufferCreateInfo( FramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FramebufferCreateInfo( VkFramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : FramebufferCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FramebufferCreateInfo( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_, + VULKAN_HPP_NAMESPACE::RenderPass renderPass_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, + uint32_t width_ = {}, + uint32_t height_ = {}, + uint32_t layers_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , renderPass( renderPass_ ) + , attachmentCount( static_cast( attachments_.size() ) ) + , pAttachments( attachments_.data() ) + , width( width_ ) + , height( height_ ) + , layers( layers_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + FramebufferCreateInfo & operator=( FramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FramebufferCreateInfo & operator=( VkFramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT + { + renderPass = renderPass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = attachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pAttachments = pAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + FramebufferCreateInfo & + setAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = static_cast( attachments_.size() ); + pAttachments = attachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setLayers( uint32_t layers_ ) VULKAN_HPP_NOEXCEPT + { + layers = layers_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkFramebufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFramebufferCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, renderPass, attachmentCount, pAttachments, width, height, layers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FramebufferCreateInfo const & ) const = default; +#else + bool operator==( FramebufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( renderPass == rhs.renderPass ) && + ( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) && ( width == rhs.width ) && ( height == rhs.height ) && + ( layers == rhs.layers ); +# endif + } + + bool operator!=( FramebufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; + uint32_t attachmentCount = {}; + const VULKAN_HPP_NAMESPACE::ImageView * pAttachments = {}; + uint32_t width = {}; + uint32_t height = {}; + uint32_t layers = {}; + }; + + template <> + struct CppType + { + using Type = FramebufferCreateInfo; + }; + + // wrapper struct for struct VkFramebufferMixedSamplesCombinationNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkFramebufferMixedSamplesCombinationNV.html + struct FramebufferMixedSamplesCombinationNV + { + using NativeType = VkFramebufferMixedSamplesCombinationNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferMixedSamplesCombinationNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR FramebufferMixedSamplesCombinationNV( + VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::SampleCountFlags depthStencilSamples_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags colorSamples_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , coverageReductionMode{ coverageReductionMode_ } + , rasterizationSamples{ rasterizationSamples_ } + , depthStencilSamples{ depthStencilSamples_ } + , colorSamples{ colorSamples_ } + { + } + + VULKAN_HPP_CONSTEXPR FramebufferMixedSamplesCombinationNV( FramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + FramebufferMixedSamplesCombinationNV( VkFramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT + : FramebufferMixedSamplesCombinationNV( *reinterpret_cast( &rhs ) ) + { + } + + FramebufferMixedSamplesCombinationNV & operator=( FramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + FramebufferMixedSamplesCombinationNV & operator=( VkFramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkFramebufferMixedSamplesCombinationNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferMixedSamplesCombinationNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkFramebufferMixedSamplesCombinationNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkFramebufferMixedSamplesCombinationNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, coverageReductionMode, rasterizationSamples, depthStencilSamples, colorSamples ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( FramebufferMixedSamplesCombinationNV const & ) const = default; +#else + bool operator==( FramebufferMixedSamplesCombinationNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( coverageReductionMode == rhs.coverageReductionMode ) && + ( rasterizationSamples == rhs.rasterizationSamples ) && ( depthStencilSamples == rhs.depthStencilSamples ) && ( colorSamples == rhs.colorSamples ); +# endif + } + + bool operator!=( FramebufferMixedSamplesCombinationNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFramebufferMixedSamplesCombinationNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::SampleCountFlags depthStencilSamples = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags colorSamples = {}; + }; + + template <> + struct CppType + { + using Type = FramebufferMixedSamplesCombinationNV; + }; + + // wrapper struct for struct VkGeneratedCommandsInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeneratedCommandsInfoEXT.html + struct GeneratedCommandsInfoEXT + { + using NativeType = VkGeneratedCommandsInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeneratedCommandsInfoEXT( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_ = {}, + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet_ = {}, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress indirectAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indirectAddressSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress preprocessAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ = {}, + uint32_t maxSequenceCount_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress sequenceCountAddress_ = {}, + uint32_t maxDrawCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderStages{ shaderStages_ } + , indirectExecutionSet{ indirectExecutionSet_ } + , indirectCommandsLayout{ indirectCommandsLayout_ } + , indirectAddress{ indirectAddress_ } + , indirectAddressSize{ indirectAddressSize_ } + , preprocessAddress{ preprocessAddress_ } + , preprocessSize{ preprocessSize_ } + , maxSequenceCount{ maxSequenceCount_ } + , sequenceCountAddress{ sequenceCountAddress_ } + , maxDrawCount{ maxDrawCount_ } + { + } + + VULKAN_HPP_CONSTEXPR GeneratedCommandsInfoEXT( GeneratedCommandsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeneratedCommandsInfoEXT( VkGeneratedCommandsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : GeneratedCommandsInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + GeneratedCommandsInfoEXT & operator=( GeneratedCommandsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeneratedCommandsInfoEXT & operator=( VkGeneratedCommandsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setShaderStages( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_ ) VULKAN_HPP_NOEXCEPT + { + shaderStages = shaderStages_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & + setIndirectExecutionSet( VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet_ ) VULKAN_HPP_NOEXCEPT + { + indirectExecutionSet = indirectExecutionSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & + setIndirectCommandsLayout( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT + { + indirectCommandsLayout = indirectCommandsLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setIndirectAddress( VULKAN_HPP_NAMESPACE::DeviceAddress indirectAddress_ ) VULKAN_HPP_NOEXCEPT + { + indirectAddress = indirectAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setIndirectAddressSize( VULKAN_HPP_NAMESPACE::DeviceSize indirectAddressSize_ ) VULKAN_HPP_NOEXCEPT + { + indirectAddressSize = indirectAddressSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setPreprocessAddress( VULKAN_HPP_NAMESPACE::DeviceAddress preprocessAddress_ ) VULKAN_HPP_NOEXCEPT + { + preprocessAddress = preprocessAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setPreprocessSize( VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ ) VULKAN_HPP_NOEXCEPT + { + preprocessSize = preprocessSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setMaxSequenceCount( uint32_t maxSequenceCount_ ) VULKAN_HPP_NOEXCEPT + { + maxSequenceCount = maxSequenceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setSequenceCountAddress( VULKAN_HPP_NAMESPACE::DeviceAddress sequenceCountAddress_ ) VULKAN_HPP_NOEXCEPT + { + sequenceCountAddress = sequenceCountAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoEXT & setMaxDrawCount( uint32_t maxDrawCount_ ) VULKAN_HPP_NOEXCEPT + { + maxDrawCount = maxDrawCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeneratedCommandsInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeneratedCommandsInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderStages, + indirectExecutionSet, + indirectCommandsLayout, + indirectAddress, + indirectAddressSize, + preprocessAddress, + preprocessSize, + maxSequenceCount, + sequenceCountAddress, + maxDrawCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeneratedCommandsInfoEXT const & ) const = default; +#else + bool operator==( GeneratedCommandsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderStages == rhs.shaderStages ) && ( indirectExecutionSet == rhs.indirectExecutionSet ) && + ( indirectCommandsLayout == rhs.indirectCommandsLayout ) && ( indirectAddress == rhs.indirectAddress ) && + ( indirectAddressSize == rhs.indirectAddressSize ) && ( preprocessAddress == rhs.preprocessAddress ) && ( preprocessSize == rhs.preprocessSize ) && + ( maxSequenceCount == rhs.maxSequenceCount ) && ( sequenceCountAddress == rhs.sequenceCountAddress ) && ( maxDrawCount == rhs.maxDrawCount ); +# endif + } + + bool operator!=( GeneratedCommandsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages = {}; + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress indirectAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indirectAddressSize = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress preprocessAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize = {}; + uint32_t maxSequenceCount = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress sequenceCountAddress = {}; + uint32_t maxDrawCount = {}; + }; + + template <> + struct CppType + { + using Type = GeneratedCommandsInfoEXT; + }; + + // wrapper struct for struct VkIndirectCommandsStreamNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsStreamNV.html + struct IndirectCommandsStreamNV + { + using NativeType = VkIndirectCommandsStreamNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectCommandsStreamNV( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {} ) VULKAN_HPP_NOEXCEPT + : buffer{ buffer_ } + , offset{ offset_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsStreamNV( IndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsStreamNV( VkIndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsStreamNV( *reinterpret_cast( &rhs ) ) + { + } + + IndirectCommandsStreamNV & operator=( IndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsStreamNV & operator=( VkIndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsStreamNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsStreamNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsStreamNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsStreamNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( buffer, offset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsStreamNV const & ) const = default; +#else + bool operator==( IndirectCommandsStreamNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( buffer == rhs.buffer ) && ( offset == rhs.offset ); +# endif + } + + bool operator!=( IndirectCommandsStreamNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + }; + + // wrapper struct for struct VkGeneratedCommandsInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeneratedCommandsInfoNV.html + struct GeneratedCommandsInfoNV + { + using NativeType = VkGeneratedCommandsInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + GeneratedCommandsInfoNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ = {}, + uint32_t streamCount_ = {}, + const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams_ = {}, + uint32_t sequencesCount_ = {}, + VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ = {}, + VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ = {}, + VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , pipeline{ pipeline_ } + , indirectCommandsLayout{ indirectCommandsLayout_ } + , streamCount{ streamCount_ } + , pStreams{ pStreams_ } + , sequencesCount{ sequencesCount_ } + , preprocessBuffer{ preprocessBuffer_ } + , preprocessOffset{ preprocessOffset_ } + , preprocessSize{ preprocessSize_ } + , sequencesCountBuffer{ sequencesCountBuffer_ } + , sequencesCountOffset{ sequencesCountOffset_ } + , sequencesIndexBuffer{ sequencesIndexBuffer_ } + , sequencesIndexOffset{ sequencesIndexOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR GeneratedCommandsInfoNV( GeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeneratedCommandsInfoNV( VkGeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : GeneratedCommandsInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GeneratedCommandsInfoNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, + VULKAN_HPP_NAMESPACE::Pipeline pipeline_, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streams_, + uint32_t sequencesCount_ = {}, + VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ = {}, + VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ = {}, + VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , pipelineBindPoint( pipelineBindPoint_ ) + , pipeline( pipeline_ ) + , indirectCommandsLayout( indirectCommandsLayout_ ) + , streamCount( static_cast( streams_.size() ) ) + , pStreams( streams_.data() ) + , sequencesCount( sequencesCount_ ) + , preprocessBuffer( preprocessBuffer_ ) + , preprocessOffset( preprocessOffset_ ) + , preprocessSize( preprocessSize_ ) + , sequencesCountBuffer( sequencesCountBuffer_ ) + , sequencesCountOffset( sequencesCountOffset_ ) + , sequencesIndexBuffer( sequencesIndexBuffer_ ) + , sequencesIndexOffset( sequencesIndexOffset_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + GeneratedCommandsInfoNV & operator=( GeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeneratedCommandsInfoNV & operator=( VkGeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & + setIndirectCommandsLayout( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT + { + indirectCommandsLayout = indirectCommandsLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT + { + streamCount = streamCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPStreams( const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams_ ) VULKAN_HPP_NOEXCEPT + { + pStreams = pStreams_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GeneratedCommandsInfoNV & + setStreams( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streams_ ) VULKAN_HPP_NOEXCEPT + { + streamCount = static_cast( streams_.size() ); + pStreams = streams_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCount( uint32_t sequencesCount_ ) VULKAN_HPP_NOEXCEPT + { + sequencesCount = sequencesCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPreprocessBuffer( VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ ) VULKAN_HPP_NOEXCEPT + { + preprocessBuffer = preprocessBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPreprocessOffset( VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ ) VULKAN_HPP_NOEXCEPT + { + preprocessOffset = preprocessOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPreprocessSize( VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ ) VULKAN_HPP_NOEXCEPT + { + preprocessSize = preprocessSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCountBuffer( VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ ) VULKAN_HPP_NOEXCEPT + { + sequencesCountBuffer = sequencesCountBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCountOffset( VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ ) VULKAN_HPP_NOEXCEPT + { + sequencesCountOffset = sequencesCountOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + sequencesIndexBuffer = sequencesIndexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ ) VULKAN_HPP_NOEXCEPT + { + sequencesIndexOffset = sequencesIndexOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeneratedCommandsInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeneratedCommandsInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + pipelineBindPoint, + pipeline, + indirectCommandsLayout, + streamCount, + pStreams, + sequencesCount, + preprocessBuffer, + preprocessOffset, + preprocessSize, + sequencesCountBuffer, + sequencesCountOffset, + sequencesIndexBuffer, + sequencesIndexOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeneratedCommandsInfoNV const & ) const = default; +#else + bool operator==( GeneratedCommandsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipeline == rhs.pipeline ) && + ( indirectCommandsLayout == rhs.indirectCommandsLayout ) && ( streamCount == rhs.streamCount ) && ( pStreams == rhs.pStreams ) && + ( sequencesCount == rhs.sequencesCount ) && ( preprocessBuffer == rhs.preprocessBuffer ) && ( preprocessOffset == rhs.preprocessOffset ) && + ( preprocessSize == rhs.preprocessSize ) && ( sequencesCountBuffer == rhs.sequencesCountBuffer ) && + ( sequencesCountOffset == rhs.sequencesCountOffset ) && ( sequencesIndexBuffer == rhs.sequencesIndexBuffer ) && + ( sequencesIndexOffset == rhs.sequencesIndexOffset ); +# endif + } + + bool operator!=( GeneratedCommandsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout = {}; + uint32_t streamCount = {}; + const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams = {}; + uint32_t sequencesCount = {}; + VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize = {}; + VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset = {}; + VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset = {}; + }; + + template <> + struct CppType + { + using Type = GeneratedCommandsInfoNV; + }; + + // wrapper struct for struct VkGeneratedCommandsMemoryRequirementsInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeneratedCommandsMemoryRequirementsInfoEXT.html + struct GeneratedCommandsMemoryRequirementsInfoEXT + { + using NativeType = VkGeneratedCommandsMemoryRequirementsInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsMemoryRequirementsInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeneratedCommandsMemoryRequirementsInfoEXT( VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet_ = {}, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout_ = {}, + uint32_t maxSequenceCount_ = {}, + uint32_t maxDrawCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , indirectExecutionSet{ indirectExecutionSet_ } + , indirectCommandsLayout{ indirectCommandsLayout_ } + , maxSequenceCount{ maxSequenceCount_ } + , maxDrawCount{ maxDrawCount_ } + { + } + + VULKAN_HPP_CONSTEXPR GeneratedCommandsMemoryRequirementsInfoEXT( GeneratedCommandsMemoryRequirementsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeneratedCommandsMemoryRequirementsInfoEXT( VkGeneratedCommandsMemoryRequirementsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : GeneratedCommandsMemoryRequirementsInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + GeneratedCommandsMemoryRequirementsInfoEXT & operator=( GeneratedCommandsMemoryRequirementsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeneratedCommandsMemoryRequirementsInfoEXT & operator=( VkGeneratedCommandsMemoryRequirementsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoEXT & + setIndirectExecutionSet( VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet_ ) VULKAN_HPP_NOEXCEPT + { + indirectExecutionSet = indirectExecutionSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoEXT & + setIndirectCommandsLayout( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT + { + indirectCommandsLayout = indirectCommandsLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoEXT & setMaxSequenceCount( uint32_t maxSequenceCount_ ) VULKAN_HPP_NOEXCEPT + { + maxSequenceCount = maxSequenceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoEXT & setMaxDrawCount( uint32_t maxDrawCount_ ) VULKAN_HPP_NOEXCEPT + { + maxDrawCount = maxDrawCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeneratedCommandsMemoryRequirementsInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsMemoryRequirementsInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsMemoryRequirementsInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeneratedCommandsMemoryRequirementsInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, indirectExecutionSet, indirectCommandsLayout, maxSequenceCount, maxDrawCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeneratedCommandsMemoryRequirementsInfoEXT const & ) const = default; +#else + bool operator==( GeneratedCommandsMemoryRequirementsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( indirectExecutionSet == rhs.indirectExecutionSet ) && + ( indirectCommandsLayout == rhs.indirectCommandsLayout ) && ( maxSequenceCount == rhs.maxSequenceCount ) && ( maxDrawCount == rhs.maxDrawCount ); +# endif + } + + bool operator!=( GeneratedCommandsMemoryRequirementsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsMemoryRequirementsInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndirectExecutionSetEXT indirectExecutionSet = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutEXT indirectCommandsLayout = {}; + uint32_t maxSequenceCount = {}; + uint32_t maxDrawCount = {}; + }; + + template <> + struct CppType + { + using Type = GeneratedCommandsMemoryRequirementsInfoEXT; + }; + + // wrapper struct for struct VkGeneratedCommandsMemoryRequirementsInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeneratedCommandsMemoryRequirementsInfoNV.html + struct GeneratedCommandsMemoryRequirementsInfoNV + { + using NativeType = VkGeneratedCommandsMemoryRequirementsInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsMemoryRequirementsInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeneratedCommandsMemoryRequirementsInfoNV( + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ = {}, + uint32_t maxSequencesCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , pipeline{ pipeline_ } + , indirectCommandsLayout{ indirectCommandsLayout_ } + , maxSequencesCount{ maxSequencesCount_ } + { + } + + VULKAN_HPP_CONSTEXPR GeneratedCommandsMemoryRequirementsInfoNV( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeneratedCommandsMemoryRequirementsInfoNV( VkGeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : GeneratedCommandsMemoryRequirementsInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + GeneratedCommandsMemoryRequirementsInfoNV & operator=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeneratedCommandsMemoryRequirementsInfoNV & operator=( VkGeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & + setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & + setIndirectCommandsLayout( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT + { + indirectCommandsLayout = indirectCommandsLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setMaxSequencesCount( uint32_t maxSequencesCount_ ) VULKAN_HPP_NOEXCEPT + { + maxSequencesCount = maxSequencesCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeneratedCommandsMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsMemoryRequirementsInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeneratedCommandsMemoryRequirementsInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineBindPoint, pipeline, indirectCommandsLayout, maxSequencesCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeneratedCommandsMemoryRequirementsInfoNV const & ) const = default; +#else + bool operator==( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipeline == rhs.pipeline ) && + ( indirectCommandsLayout == rhs.indirectCommandsLayout ) && ( maxSequencesCount == rhs.maxSequencesCount ); +# endif + } + + bool operator!=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsMemoryRequirementsInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout = {}; + uint32_t maxSequencesCount = {}; + }; + + template <> + struct CppType + { + using Type = GeneratedCommandsMemoryRequirementsInfoNV; + }; + + // wrapper struct for struct VkGeneratedCommandsPipelineInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeneratedCommandsPipelineInfoEXT.html + struct GeneratedCommandsPipelineInfoEXT + { + using NativeType = VkGeneratedCommandsPipelineInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsPipelineInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeneratedCommandsPipelineInfoEXT( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipeline{ pipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR GeneratedCommandsPipelineInfoEXT( GeneratedCommandsPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeneratedCommandsPipelineInfoEXT( VkGeneratedCommandsPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : GeneratedCommandsPipelineInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + GeneratedCommandsPipelineInfoEXT & operator=( GeneratedCommandsPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeneratedCommandsPipelineInfoEXT & operator=( VkGeneratedCommandsPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsPipelineInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsPipelineInfoEXT & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeneratedCommandsPipelineInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsPipelineInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsPipelineInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeneratedCommandsPipelineInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeneratedCommandsPipelineInfoEXT const & ) const = default; +#else + bool operator==( GeneratedCommandsPipelineInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ); +# endif + } + + bool operator!=( GeneratedCommandsPipelineInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsPipelineInfoEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + }; + + template <> + struct CppType + { + using Type = GeneratedCommandsPipelineInfoEXT; + }; + + // wrapper struct for struct VkGeneratedCommandsShaderInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGeneratedCommandsShaderInfoEXT.html + struct GeneratedCommandsShaderInfoEXT + { + using NativeType = VkGeneratedCommandsShaderInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsShaderInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GeneratedCommandsShaderInfoEXT( uint32_t shaderCount_ = {}, + const VULKAN_HPP_NAMESPACE::ShaderEXT * pShaders_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderCount{ shaderCount_ } + , pShaders{ pShaders_ } + { + } + + VULKAN_HPP_CONSTEXPR GeneratedCommandsShaderInfoEXT( GeneratedCommandsShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GeneratedCommandsShaderInfoEXT( VkGeneratedCommandsShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : GeneratedCommandsShaderInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GeneratedCommandsShaderInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shaders_, + void * pNext_ = nullptr ) + : pNext( pNext_ ), shaderCount( static_cast( shaders_.size() ) ), pShaders( shaders_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + GeneratedCommandsShaderInfoEXT & operator=( GeneratedCommandsShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GeneratedCommandsShaderInfoEXT & operator=( VkGeneratedCommandsShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsShaderInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsShaderInfoEXT & setShaderCount( uint32_t shaderCount_ ) VULKAN_HPP_NOEXCEPT + { + shaderCount = shaderCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsShaderInfoEXT & setPShaders( const VULKAN_HPP_NAMESPACE::ShaderEXT * pShaders_ ) VULKAN_HPP_NOEXCEPT + { + pShaders = pShaders_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GeneratedCommandsShaderInfoEXT & + setShaders( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shaders_ ) VULKAN_HPP_NOEXCEPT + { + shaderCount = static_cast( shaders_.size() ); + pShaders = shaders_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGeneratedCommandsShaderInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsShaderInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGeneratedCommandsShaderInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGeneratedCommandsShaderInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderCount, pShaders ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GeneratedCommandsShaderInfoEXT const & ) const = default; +#else + bool operator==( GeneratedCommandsShaderInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCount == rhs.shaderCount ) && ( pShaders == rhs.pShaders ); +# endif + } + + bool operator!=( GeneratedCommandsShaderInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGeneratedCommandsShaderInfoEXT; + void * pNext = {}; + uint32_t shaderCount = {}; + const VULKAN_HPP_NAMESPACE::ShaderEXT * pShaders = {}; + }; + + template <> + struct CppType + { + using Type = GeneratedCommandsShaderInfoEXT; + }; + + // wrapper struct for struct VkLatencyTimingsFrameReportNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLatencyTimingsFrameReportNV.html + struct LatencyTimingsFrameReportNV + { + using NativeType = VkLatencyTimingsFrameReportNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eLatencyTimingsFrameReportNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR LatencyTimingsFrameReportNV( uint64_t presentID_ = {}, + uint64_t inputSampleTimeUs_ = {}, + uint64_t simStartTimeUs_ = {}, + uint64_t simEndTimeUs_ = {}, + uint64_t renderSubmitStartTimeUs_ = {}, + uint64_t renderSubmitEndTimeUs_ = {}, + uint64_t presentStartTimeUs_ = {}, + uint64_t presentEndTimeUs_ = {}, + uint64_t driverStartTimeUs_ = {}, + uint64_t driverEndTimeUs_ = {}, + uint64_t osRenderQueueStartTimeUs_ = {}, + uint64_t osRenderQueueEndTimeUs_ = {}, + uint64_t gpuRenderStartTimeUs_ = {}, + uint64_t gpuRenderEndTimeUs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentID{ presentID_ } + , inputSampleTimeUs{ inputSampleTimeUs_ } + , simStartTimeUs{ simStartTimeUs_ } + , simEndTimeUs{ simEndTimeUs_ } + , renderSubmitStartTimeUs{ renderSubmitStartTimeUs_ } + , renderSubmitEndTimeUs{ renderSubmitEndTimeUs_ } + , presentStartTimeUs{ presentStartTimeUs_ } + , presentEndTimeUs{ presentEndTimeUs_ } + , driverStartTimeUs{ driverStartTimeUs_ } + , driverEndTimeUs{ driverEndTimeUs_ } + , osRenderQueueStartTimeUs{ osRenderQueueStartTimeUs_ } + , osRenderQueueEndTimeUs{ osRenderQueueEndTimeUs_ } + , gpuRenderStartTimeUs{ gpuRenderStartTimeUs_ } + , gpuRenderEndTimeUs{ gpuRenderEndTimeUs_ } + { + } + + VULKAN_HPP_CONSTEXPR LatencyTimingsFrameReportNV( LatencyTimingsFrameReportNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LatencyTimingsFrameReportNV( VkLatencyTimingsFrameReportNV const & rhs ) VULKAN_HPP_NOEXCEPT + : LatencyTimingsFrameReportNV( *reinterpret_cast( &rhs ) ) + { + } + + LatencyTimingsFrameReportNV & operator=( LatencyTimingsFrameReportNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LatencyTimingsFrameReportNV & operator=( VkLatencyTimingsFrameReportNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkLatencyTimingsFrameReportNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencyTimingsFrameReportNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencyTimingsFrameReportNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLatencyTimingsFrameReportNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + presentID, + inputSampleTimeUs, + simStartTimeUs, + simEndTimeUs, + renderSubmitStartTimeUs, + renderSubmitEndTimeUs, + presentStartTimeUs, + presentEndTimeUs, + driverStartTimeUs, + driverEndTimeUs, + osRenderQueueStartTimeUs, + osRenderQueueEndTimeUs, + gpuRenderStartTimeUs, + gpuRenderEndTimeUs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( LatencyTimingsFrameReportNV const & ) const = default; +#else + bool operator==( LatencyTimingsFrameReportNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentID == rhs.presentID ) && ( inputSampleTimeUs == rhs.inputSampleTimeUs ) && + ( simStartTimeUs == rhs.simStartTimeUs ) && ( simEndTimeUs == rhs.simEndTimeUs ) && ( renderSubmitStartTimeUs == rhs.renderSubmitStartTimeUs ) && + ( renderSubmitEndTimeUs == rhs.renderSubmitEndTimeUs ) && ( presentStartTimeUs == rhs.presentStartTimeUs ) && + ( presentEndTimeUs == rhs.presentEndTimeUs ) && ( driverStartTimeUs == rhs.driverStartTimeUs ) && ( driverEndTimeUs == rhs.driverEndTimeUs ) && + ( osRenderQueueStartTimeUs == rhs.osRenderQueueStartTimeUs ) && ( osRenderQueueEndTimeUs == rhs.osRenderQueueEndTimeUs ) && + ( gpuRenderStartTimeUs == rhs.gpuRenderStartTimeUs ) && ( gpuRenderEndTimeUs == rhs.gpuRenderEndTimeUs ); +# endif + } + + bool operator!=( LatencyTimingsFrameReportNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eLatencyTimingsFrameReportNV; + const void * pNext = {}; + uint64_t presentID = {}; + uint64_t inputSampleTimeUs = {}; + uint64_t simStartTimeUs = {}; + uint64_t simEndTimeUs = {}; + uint64_t renderSubmitStartTimeUs = {}; + uint64_t renderSubmitEndTimeUs = {}; + uint64_t presentStartTimeUs = {}; + uint64_t presentEndTimeUs = {}; + uint64_t driverStartTimeUs = {}; + uint64_t driverEndTimeUs = {}; + uint64_t osRenderQueueStartTimeUs = {}; + uint64_t osRenderQueueEndTimeUs = {}; + uint64_t gpuRenderStartTimeUs = {}; + uint64_t gpuRenderEndTimeUs = {}; + }; + + template <> + struct CppType + { + using Type = LatencyTimingsFrameReportNV; + }; + + // wrapper struct for struct VkGetLatencyMarkerInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGetLatencyMarkerInfoNV.html + struct GetLatencyMarkerInfoNV + { + using NativeType = VkGetLatencyMarkerInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGetLatencyMarkerInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GetLatencyMarkerInfoNV( uint32_t timingCount_ = {}, + VULKAN_HPP_NAMESPACE::LatencyTimingsFrameReportNV * pTimings_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , timingCount{ timingCount_ } + , pTimings{ pTimings_ } + { + } + + VULKAN_HPP_CONSTEXPR GetLatencyMarkerInfoNV( GetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GetLatencyMarkerInfoNV( VkGetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : GetLatencyMarkerInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GetLatencyMarkerInfoNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & timings_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), timingCount( static_cast( timings_.size() ) ), pTimings( timings_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + GetLatencyMarkerInfoNV & operator=( GetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GetLatencyMarkerInfoNV & operator=( VkGetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GetLatencyMarkerInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GetLatencyMarkerInfoNV & setTimingCount( uint32_t timingCount_ ) VULKAN_HPP_NOEXCEPT + { + timingCount = timingCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GetLatencyMarkerInfoNV & setPTimings( VULKAN_HPP_NAMESPACE::LatencyTimingsFrameReportNV * pTimings_ ) VULKAN_HPP_NOEXCEPT + { + pTimings = pTimings_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GetLatencyMarkerInfoNV & + setTimings( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & timings_ ) VULKAN_HPP_NOEXCEPT + { + timingCount = static_cast( timings_.size() ); + pTimings = timings_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGetLatencyMarkerInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGetLatencyMarkerInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGetLatencyMarkerInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGetLatencyMarkerInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, timingCount, pTimings ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GetLatencyMarkerInfoNV const & ) const = default; +#else + bool operator==( GetLatencyMarkerInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timingCount == rhs.timingCount ) && ( pTimings == rhs.pTimings ); +# endif + } + + bool operator!=( GetLatencyMarkerInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGetLatencyMarkerInfoNV; + const void * pNext = {}; + uint32_t timingCount = {}; + VULKAN_HPP_NAMESPACE::LatencyTimingsFrameReportNV * pTimings = {}; + }; + + template <> + struct CppType + { + using Type = GetLatencyMarkerInfoNV; + }; + + // wrapper struct for struct VkVertexInputBindingDescription, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVertexInputBindingDescription.html + struct VertexInputBindingDescription + { + using NativeType = VkVertexInputBindingDescription; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VertexInputBindingDescription( uint32_t binding_ = {}, + uint32_t stride_ = {}, + VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex ) VULKAN_HPP_NOEXCEPT + : binding{ binding_ } + , stride{ stride_ } + , inputRate{ inputRate_ } + { + } + + VULKAN_HPP_CONSTEXPR VertexInputBindingDescription( VertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VertexInputBindingDescription( VkVertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT + : VertexInputBindingDescription( *reinterpret_cast( &rhs ) ) + { + } + + VertexInputBindingDescription & operator=( VertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VertexInputBindingDescription & operator=( VkVertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT + { + inputRate = inputRate_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVertexInputBindingDescription const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputBindingDescription &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputBindingDescription const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVertexInputBindingDescription *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( binding, stride, inputRate ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VertexInputBindingDescription const & ) const = default; +#else + bool operator==( VertexInputBindingDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( binding == rhs.binding ) && ( stride == rhs.stride ) && ( inputRate == rhs.inputRate ); +# endif + } + + bool operator!=( VertexInputBindingDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t binding = {}; + uint32_t stride = {}; + VULKAN_HPP_NAMESPACE::VertexInputRate inputRate = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex; + }; + + // wrapper struct for struct VkVertexInputAttributeDescription, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVertexInputAttributeDescription.html + struct VertexInputAttributeDescription + { + using NativeType = VkVertexInputAttributeDescription; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription( uint32_t location_ = {}, + uint32_t binding_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint32_t offset_ = {} ) VULKAN_HPP_NOEXCEPT + : location{ location_ } + , binding{ binding_ } + , format{ format_ } + , offset{ offset_ } + { + } + + VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription( VertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VertexInputAttributeDescription( VkVertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT + : VertexInputAttributeDescription( *reinterpret_cast( &rhs ) ) + { + } + + VertexInputAttributeDescription & operator=( VertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VertexInputAttributeDescription & operator=( VkVertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT + { + location = location_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVertexInputAttributeDescription const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputAttributeDescription &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputAttributeDescription const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVertexInputAttributeDescription *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( location, binding, format, offset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VertexInputAttributeDescription const & ) const = default; +#else + bool operator==( VertexInputAttributeDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( location == rhs.location ) && ( binding == rhs.binding ) && ( format == rhs.format ) && ( offset == rhs.offset ); +# endif + } + + bool operator!=( VertexInputAttributeDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t location = {}; + uint32_t binding = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint32_t offset = {}; + }; + + // wrapper struct for struct VkPipelineVertexInputStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineVertexInputStateCreateInfo.html + struct PipelineVertexInputStateCreateInfo + { + using NativeType = VkPipelineVertexInputStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineVertexInputStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineVertexInputStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_ = {}, + uint32_t vertexBindingDescriptionCount_ = {}, + const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions_ = {}, + uint32_t vertexAttributeDescriptionCount_ = {}, + const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , vertexBindingDescriptionCount{ vertexBindingDescriptionCount_ } + , pVertexBindingDescriptions{ pVertexBindingDescriptions_ } + , vertexAttributeDescriptionCount{ vertexAttributeDescriptionCount_ } + , pVertexAttributeDescriptions{ pVertexAttributeDescriptions_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineVertexInputStateCreateInfo( PipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineVertexInputStateCreateInfo( VkPipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineVertexInputStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineVertexInputStateCreateInfo( + VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDescriptions_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexAttributeDescriptions_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , vertexBindingDescriptionCount( static_cast( vertexBindingDescriptions_.size() ) ) + , pVertexBindingDescriptions( vertexBindingDescriptions_.data() ) + , vertexAttributeDescriptionCount( static_cast( vertexAttributeDescriptions_.size() ) ) + , pVertexAttributeDescriptions( vertexAttributeDescriptions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineVertexInputStateCreateInfo & operator=( PipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineVertexInputStateCreateInfo & operator=( VkPipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexBindingDescriptionCount = vertexBindingDescriptionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & + setPVertexBindingDescriptions( const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions_ ) VULKAN_HPP_NOEXCEPT + { + pVertexBindingDescriptions = pVertexBindingDescriptions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineVertexInputStateCreateInfo & setVertexBindingDescriptions( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDescriptions_ ) + VULKAN_HPP_NOEXCEPT + { + vertexBindingDescriptionCount = static_cast( vertexBindingDescriptions_.size() ); + pVertexBindingDescriptions = vertexBindingDescriptions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & + setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & + setPVertexAttributeDescriptions( const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions_ ) VULKAN_HPP_NOEXCEPT + { + pVertexAttributeDescriptions = pVertexAttributeDescriptions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineVertexInputStateCreateInfo & setVertexAttributeDescriptions( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexAttributeDescriptions_ ) + VULKAN_HPP_NOEXCEPT + { + vertexAttributeDescriptionCount = static_cast( vertexAttributeDescriptions_.size() ); + pVertexAttributeDescriptions = vertexAttributeDescriptions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineVertexInputStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineVertexInputStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineVertexInputStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineVertexInputStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, flags, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineVertexInputStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineVertexInputStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount ) && ( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions ) && + ( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount ) && ( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions ); +# endif + } + + bool operator!=( PipelineVertexInputStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineVertexInputStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags = {}; + uint32_t vertexBindingDescriptionCount = {}; + const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions = {}; + uint32_t vertexAttributeDescriptionCount = {}; + const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions = {}; + }; + + template <> + struct CppType + { + using Type = PipelineVertexInputStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineInputAssemblyStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineInputAssemblyStateCreateInfo.html + struct PipelineInputAssemblyStateCreateInfo + { + using NativeType = VkPipelineInputAssemblyStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineInputAssemblyStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PipelineInputAssemblyStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::PrimitiveTopology topology_ = VULKAN_HPP_NAMESPACE::PrimitiveTopology::ePointList, + VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , topology{ topology_ } + , primitiveRestartEnable{ primitiveRestartEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineInputAssemblyStateCreateInfo( PipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineInputAssemblyStateCreateInfo( VkPipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineInputAssemblyStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineInputAssemblyStateCreateInfo & operator=( PipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineInputAssemblyStateCreateInfo & operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & setTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology topology_ ) VULKAN_HPP_NOEXCEPT + { + topology = topology_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & + setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable_ ) VULKAN_HPP_NOEXCEPT + { + primitiveRestartEnable = primitiveRestartEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineInputAssemblyStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineInputAssemblyStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineInputAssemblyStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineInputAssemblyStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, topology, primitiveRestartEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineInputAssemblyStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineInputAssemblyStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( topology == rhs.topology ) && + ( primitiveRestartEnable == rhs.primitiveRestartEnable ); +# endif + } + + bool operator!=( PipelineInputAssemblyStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineInputAssemblyStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::PrimitiveTopology topology = VULKAN_HPP_NAMESPACE::PrimitiveTopology::ePointList; + VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable = {}; + }; + + template <> + struct CppType + { + using Type = PipelineInputAssemblyStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineTessellationStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineTessellationStateCreateInfo.html + struct PipelineTessellationStateCreateInfo + { + using NativeType = VkPipelineTessellationStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineTessellationStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineTessellationStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags_ = {}, + uint32_t patchControlPoints_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , patchControlPoints{ patchControlPoints_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineTessellationStateCreateInfo( PipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineTessellationStateCreateInfo( VkPipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineTessellationStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineTessellationStateCreateInfo & operator=( PipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineTessellationStateCreateInfo & operator=( VkPipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & setPatchControlPoints( uint32_t patchControlPoints_ ) VULKAN_HPP_NOEXCEPT + { + patchControlPoints = patchControlPoints_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineTessellationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineTessellationStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineTessellationStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineTessellationStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, patchControlPoints ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineTessellationStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineTessellationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( patchControlPoints == rhs.patchControlPoints ); +# endif + } + + bool operator!=( PipelineTessellationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineTessellationStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags = {}; + uint32_t patchControlPoints = {}; + }; + + template <> + struct CppType + { + using Type = PipelineTessellationStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineViewportStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportStateCreateInfo.html + struct PipelineViewportStateCreateInfo + { + using NativeType = VkPipelineViewportStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_ = {}, + uint32_t viewportCount_ = {}, + const VULKAN_HPP_NAMESPACE::Viewport * pViewports_ = {}, + uint32_t scissorCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pScissors_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , viewportCount{ viewportCount_ } + , pViewports{ pViewports_ } + , scissorCount{ scissorCount_ } + , pScissors{ pScissors_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineViewportStateCreateInfo( PipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportStateCreateInfo( VkPipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewports_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & scissors_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , viewportCount( static_cast( viewports_.size() ) ) + , pViewports( viewports_.data() ) + , scissorCount( static_cast( scissors_.size() ) ) + , pScissors( scissors_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineViewportStateCreateInfo & operator=( PipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportStateCreateInfo & operator=( VkPipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = viewportCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPViewports( const VULKAN_HPP_NAMESPACE::Viewport * pViewports_ ) VULKAN_HPP_NOEXCEPT + { + pViewports = pViewports_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportStateCreateInfo & + setViewports( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewports_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = static_cast( viewports_.size() ); + pViewports = viewports_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setScissorCount( uint32_t scissorCount_ ) VULKAN_HPP_NOEXCEPT + { + scissorCount = scissorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pScissors_ ) VULKAN_HPP_NOEXCEPT + { + pScissors = pScissors_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportStateCreateInfo & + setScissors( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & scissors_ ) VULKAN_HPP_NOEXCEPT + { + scissorCount = static_cast( scissors_.size() ); + pScissors = scissors_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, viewportCount, pViewports, scissorCount, pScissors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineViewportStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( viewportCount == rhs.viewportCount ) && + ( pViewports == rhs.pViewports ) && ( scissorCount == rhs.scissorCount ) && ( pScissors == rhs.pScissors ); +# endif + } + + bool operator!=( PipelineViewportStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags = {}; + uint32_t viewportCount = {}; + const VULKAN_HPP_NAMESPACE::Viewport * pViewports = {}; + uint32_t scissorCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pScissors = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineRasterizationStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationStateCreateInfo.html + struct PipelineRasterizationStateCreateInfo + { + using NativeType = VkPipelineRasterizationStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable_ = {}, + VULKAN_HPP_NAMESPACE::PolygonMode polygonMode_ = VULKAN_HPP_NAMESPACE::PolygonMode::eFill, + VULKAN_HPP_NAMESPACE::CullModeFlags cullMode_ = {}, + VULKAN_HPP_NAMESPACE::FrontFace frontFace_ = VULKAN_HPP_NAMESPACE::FrontFace::eCounterClockwise, + VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable_ = {}, + float depthBiasConstantFactor_ = {}, + float depthBiasClamp_ = {}, + float depthBiasSlopeFactor_ = {}, + float lineWidth_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , depthClampEnable{ depthClampEnable_ } + , rasterizerDiscardEnable{ rasterizerDiscardEnable_ } + , polygonMode{ polygonMode_ } + , cullMode{ cullMode_ } + , frontFace{ frontFace_ } + , depthBiasEnable{ depthBiasEnable_ } + , depthBiasConstantFactor{ depthBiasConstantFactor_ } + , depthBiasClamp{ depthBiasClamp_ } + , depthBiasSlopeFactor{ depthBiasSlopeFactor_ } + , lineWidth{ lineWidth_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineRasterizationStateCreateInfo( PipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationStateCreateInfo( VkPipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationStateCreateInfo & operator=( PipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationStateCreateInfo & operator=( VkPipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthClampEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthClampEnable = depthClampEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & + setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable_ ) VULKAN_HPP_NOEXCEPT + { + rasterizerDiscardEnable = rasterizerDiscardEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setPolygonMode( VULKAN_HPP_NAMESPACE::PolygonMode polygonMode_ ) VULKAN_HPP_NOEXCEPT + { + polygonMode = polygonMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode_ ) VULKAN_HPP_NOEXCEPT + { + cullMode = cullMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace_ ) VULKAN_HPP_NOEXCEPT + { + frontFace = frontFace_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasEnable = depthBiasEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasConstantFactor( float depthBiasConstantFactor_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasConstantFactor = depthBiasConstantFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasClamp( float depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasClamp = depthBiasClamp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasSlopeFactor = depthBiasSlopeFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setLineWidth( float lineWidth_ ) VULKAN_HPP_NOEXCEPT + { + lineWidth = lineWidth_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + depthClampEnable, + rasterizerDiscardEnable, + polygonMode, + cullMode, + frontFace, + depthBiasEnable, + depthBiasConstantFactor, + depthBiasClamp, + depthBiasSlopeFactor, + lineWidth ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineRasterizationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( depthClampEnable == rhs.depthClampEnable ) && + ( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable ) && ( polygonMode == rhs.polygonMode ) && ( cullMode == rhs.cullMode ) && + ( frontFace == rhs.frontFace ) && ( depthBiasEnable == rhs.depthBiasEnable ) && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor ) && + ( depthBiasClamp == rhs.depthBiasClamp ) && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor ) && ( lineWidth == rhs.lineWidth ); +# endif + } + + bool operator!=( PipelineRasterizationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable = {}; + VULKAN_HPP_NAMESPACE::PolygonMode polygonMode = VULKAN_HPP_NAMESPACE::PolygonMode::eFill; + VULKAN_HPP_NAMESPACE::CullModeFlags cullMode = {}; + VULKAN_HPP_NAMESPACE::FrontFace frontFace = VULKAN_HPP_NAMESPACE::FrontFace::eCounterClockwise; + VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable = {}; + float depthBiasConstantFactor = {}; + float depthBiasClamp = {}; + float depthBiasSlopeFactor = {}; + float lineWidth = {}; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineMultisampleStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineMultisampleStateCreateInfo.html + struct PipelineMultisampleStateCreateInfo + { + using NativeType = VkPipelineMultisampleStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineMultisampleStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PipelineMultisampleStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable_ = {}, + float minSampleShading_ = {}, + const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , rasterizationSamples{ rasterizationSamples_ } + , sampleShadingEnable{ sampleShadingEnable_ } + , minSampleShading{ minSampleShading_ } + , pSampleMask{ pSampleMask_ } + , alphaToCoverageEnable{ alphaToCoverageEnable_ } + , alphaToOneEnable{ alphaToOneEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineMultisampleStateCreateInfo( PipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineMultisampleStateCreateInfo( VkPipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineMultisampleStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineMultisampleStateCreateInfo & operator=( PipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineMultisampleStateCreateInfo & operator=( VkPipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & + setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationSamples = rasterizationSamples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setSampleShadingEnable( VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable_ ) VULKAN_HPP_NOEXCEPT + { + sampleShadingEnable = sampleShadingEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setMinSampleShading( float minSampleShading_ ) VULKAN_HPP_NOEXCEPT + { + minSampleShading = minSampleShading_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setPSampleMask( const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask_ ) VULKAN_HPP_NOEXCEPT + { + pSampleMask = pSampleMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & + setAlphaToCoverageEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable_ ) VULKAN_HPP_NOEXCEPT + { + alphaToCoverageEnable = alphaToCoverageEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setAlphaToOneEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable_ ) VULKAN_HPP_NOEXCEPT + { + alphaToOneEnable = alphaToOneEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineMultisampleStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineMultisampleStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineMultisampleStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineMultisampleStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, rasterizationSamples, sampleShadingEnable, minSampleShading, pSampleMask, alphaToCoverageEnable, alphaToOneEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineMultisampleStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineMultisampleStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rasterizationSamples == rhs.rasterizationSamples ) && + ( sampleShadingEnable == rhs.sampleShadingEnable ) && ( minSampleShading == rhs.minSampleShading ) && ( pSampleMask == rhs.pSampleMask ) && + ( alphaToCoverageEnable == rhs.alphaToCoverageEnable ) && ( alphaToOneEnable == rhs.alphaToOneEnable ); +# endif + } + + bool operator!=( PipelineMultisampleStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineMultisampleStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable = {}; + float minSampleShading = {}; + const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable = {}; + }; + + template <> + struct CppType + { + using Type = PipelineMultisampleStateCreateInfo; + }; + + // wrapper struct for struct VkStencilOpState, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkStencilOpState.html + struct StencilOpState + { + using NativeType = VkStencilOpState; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR StencilOpState( VULKAN_HPP_NAMESPACE::StencilOp failOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep, + VULKAN_HPP_NAMESPACE::StencilOp passOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep, + VULKAN_HPP_NAMESPACE::StencilOp depthFailOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep, + VULKAN_HPP_NAMESPACE::CompareOp compareOp_ = VULKAN_HPP_NAMESPACE::CompareOp::eNever, + uint32_t compareMask_ = {}, + uint32_t writeMask_ = {}, + uint32_t reference_ = {} ) VULKAN_HPP_NOEXCEPT + : failOp{ failOp_ } + , passOp{ passOp_ } + , depthFailOp{ depthFailOp_ } + , compareOp{ compareOp_ } + , compareMask{ compareMask_ } + , writeMask{ writeMask_ } + , reference{ reference_ } + { + } + + VULKAN_HPP_CONSTEXPR StencilOpState( StencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + StencilOpState( VkStencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT : StencilOpState( *reinterpret_cast( &rhs ) ) {} + + StencilOpState & operator=( StencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + StencilOpState & operator=( VkStencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setFailOp( VULKAN_HPP_NAMESPACE::StencilOp failOp_ ) VULKAN_HPP_NOEXCEPT + { + failOp = failOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setPassOp( VULKAN_HPP_NAMESPACE::StencilOp passOp_ ) VULKAN_HPP_NOEXCEPT + { + passOp = passOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setDepthFailOp( VULKAN_HPP_NAMESPACE::StencilOp depthFailOp_ ) VULKAN_HPP_NOEXCEPT + { + depthFailOp = depthFailOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT + { + compareOp = compareOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setCompareMask( uint32_t compareMask_ ) VULKAN_HPP_NOEXCEPT + { + compareMask = compareMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setWriteMask( uint32_t writeMask_ ) VULKAN_HPP_NOEXCEPT + { + writeMask = writeMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StencilOpState & setReference( uint32_t reference_ ) VULKAN_HPP_NOEXCEPT + { + reference = reference_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkStencilOpState const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStencilOpState &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStencilOpState const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkStencilOpState *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( failOp, passOp, depthFailOp, compareOp, compareMask, writeMask, reference ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( StencilOpState const & ) const = default; +#else + bool operator==( StencilOpState const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( failOp == rhs.failOp ) && ( passOp == rhs.passOp ) && ( depthFailOp == rhs.depthFailOp ) && ( compareOp == rhs.compareOp ) && + ( compareMask == rhs.compareMask ) && ( writeMask == rhs.writeMask ) && ( reference == rhs.reference ); +# endif + } + + bool operator!=( StencilOpState const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StencilOp failOp = VULKAN_HPP_NAMESPACE::StencilOp::eKeep; + VULKAN_HPP_NAMESPACE::StencilOp passOp = VULKAN_HPP_NAMESPACE::StencilOp::eKeep; + VULKAN_HPP_NAMESPACE::StencilOp depthFailOp = VULKAN_HPP_NAMESPACE::StencilOp::eKeep; + VULKAN_HPP_NAMESPACE::CompareOp compareOp = VULKAN_HPP_NAMESPACE::CompareOp::eNever; + uint32_t compareMask = {}; + uint32_t writeMask = {}; + uint32_t reference = {}; + }; + + // wrapper struct for struct VkPipelineDepthStencilStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDepthStencilStateCreateInfo.html + struct PipelineDepthStencilStateCreateInfo + { + using NativeType = VkPipelineDepthStencilStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDepthStencilStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable_ = {}, + VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp_ = VULKAN_HPP_NAMESPACE::CompareOp::eNever, + VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable_ = {}, + VULKAN_HPP_NAMESPACE::StencilOpState front_ = {}, + VULKAN_HPP_NAMESPACE::StencilOpState back_ = {}, + float minDepthBounds_ = {}, + float maxDepthBounds_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , depthTestEnable{ depthTestEnable_ } + , depthWriteEnable{ depthWriteEnable_ } + , depthCompareOp{ depthCompareOp_ } + , depthBoundsTestEnable{ depthBoundsTestEnable_ } + , stencilTestEnable{ stencilTestEnable_ } + , front{ front_ } + , back{ back_ } + , minDepthBounds{ minDepthBounds_ } + , maxDepthBounds{ maxDepthBounds_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateInfo( PipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineDepthStencilStateCreateInfo( VkPipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineDepthStencilStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineDepthStencilStateCreateInfo & operator=( PipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineDepthStencilStateCreateInfo & operator=( VkPipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & + setFlags( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthTestEnable = depthTestEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthWriteEnable = depthWriteEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp_ ) VULKAN_HPP_NOEXCEPT + { + depthCompareOp = depthCompareOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & + setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthBoundsTestEnable = depthBoundsTestEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable_ ) VULKAN_HPP_NOEXCEPT + { + stencilTestEnable = stencilTestEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setFront( VULKAN_HPP_NAMESPACE::StencilOpState const & front_ ) VULKAN_HPP_NOEXCEPT + { + front = front_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setBack( VULKAN_HPP_NAMESPACE::StencilOpState const & back_ ) VULKAN_HPP_NOEXCEPT + { + back = back_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setMinDepthBounds( float minDepthBounds_ ) VULKAN_HPP_NOEXCEPT + { + minDepthBounds = minDepthBounds_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setMaxDepthBounds( float maxDepthBounds_ ) VULKAN_HPP_NOEXCEPT + { + maxDepthBounds = maxDepthBounds_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineDepthStencilStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineDepthStencilStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineDepthStencilStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineDepthStencilStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + depthTestEnable, + depthWriteEnable, + depthCompareOp, + depthBoundsTestEnable, + stencilTestEnable, + front, + back, + minDepthBounds, + maxDepthBounds ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineDepthStencilStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineDepthStencilStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( depthTestEnable == rhs.depthTestEnable ) && + ( depthWriteEnable == rhs.depthWriteEnable ) && ( depthCompareOp == rhs.depthCompareOp ) && + ( depthBoundsTestEnable == rhs.depthBoundsTestEnable ) && ( stencilTestEnable == rhs.stencilTestEnable ) && ( front == rhs.front ) && + ( back == rhs.back ) && ( minDepthBounds == rhs.minDepthBounds ) && ( maxDepthBounds == rhs.maxDepthBounds ); +# endif + } + + bool operator!=( PipelineDepthStencilStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineDepthStencilStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable = {}; + VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp = VULKAN_HPP_NAMESPACE::CompareOp::eNever; + VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable = {}; + VULKAN_HPP_NAMESPACE::StencilOpState front = {}; + VULKAN_HPP_NAMESPACE::StencilOpState back = {}; + float minDepthBounds = {}; + float maxDepthBounds = {}; + }; + + template <> + struct CppType + { + using Type = PipelineDepthStencilStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineColorBlendAttachmentState, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineColorBlendAttachmentState.html + struct PipelineColorBlendAttachmentState + { + using NativeType = VkPipelineColorBlendAttachmentState; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineColorBlendAttachmentState( VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ = {}, + VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd, + VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ = VULKAN_HPP_NAMESPACE::BlendFactor::eZero, + VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ = VULKAN_HPP_NAMESPACE::BlendOp::eAdd, + VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask_ = {} ) VULKAN_HPP_NOEXCEPT + : blendEnable{ blendEnable_ } + , srcColorBlendFactor{ srcColorBlendFactor_ } + , dstColorBlendFactor{ dstColorBlendFactor_ } + , colorBlendOp{ colorBlendOp_ } + , srcAlphaBlendFactor{ srcAlphaBlendFactor_ } + , dstAlphaBlendFactor{ dstAlphaBlendFactor_ } + , alphaBlendOp{ alphaBlendOp_ } + , colorWriteMask{ colorWriteMask_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineColorBlendAttachmentState( PipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineColorBlendAttachmentState( VkPipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineColorBlendAttachmentState( *reinterpret_cast( &rhs ) ) + { + } + + PipelineColorBlendAttachmentState & operator=( PipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineColorBlendAttachmentState & operator=( VkPipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & setBlendEnable( VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ ) VULKAN_HPP_NOEXCEPT + { + blendEnable = blendEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & + setSrcColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + srcColorBlendFactor = srcColorBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & + setDstColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + dstColorBlendFactor = dstColorBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & setColorBlendOp( VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ ) VULKAN_HPP_NOEXCEPT + { + colorBlendOp = colorBlendOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & + setSrcAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + srcAlphaBlendFactor = srcAlphaBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & + setDstAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT + { + dstAlphaBlendFactor = dstAlphaBlendFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & setAlphaBlendOp( VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ ) VULKAN_HPP_NOEXCEPT + { + alphaBlendOp = alphaBlendOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState & + setColorWriteMask( VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask_ ) VULKAN_HPP_NOEXCEPT + { + colorWriteMask = colorWriteMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineColorBlendAttachmentState const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorBlendAttachmentState &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorBlendAttachmentState const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineColorBlendAttachmentState *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + blendEnable, srcColorBlendFactor, dstColorBlendFactor, colorBlendOp, srcAlphaBlendFactor, dstAlphaBlendFactor, alphaBlendOp, colorWriteMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineColorBlendAttachmentState const & ) const = default; +#else + bool operator==( PipelineColorBlendAttachmentState const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( blendEnable == rhs.blendEnable ) && ( srcColorBlendFactor == rhs.srcColorBlendFactor ) && ( dstColorBlendFactor == rhs.dstColorBlendFactor ) && + ( colorBlendOp == rhs.colorBlendOp ) && ( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor ) && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor ) && + ( alphaBlendOp == rhs.alphaBlendOp ) && ( colorWriteMask == rhs.colorWriteMask ); +# endif + } + + bool operator!=( PipelineColorBlendAttachmentState const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Bool32 blendEnable = {}; + VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; + VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor = VULKAN_HPP_NAMESPACE::BlendFactor::eZero; + VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd; + VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask = {}; + }; + + // wrapper struct for struct VkPipelineColorBlendStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineColorBlendStateCreateInfo.html + struct PipelineColorBlendStateCreateInfo + { + using NativeType = VkPipelineColorBlendStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorBlendStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_ = {}, + VULKAN_HPP_NAMESPACE::LogicOp logicOp_ = VULKAN_HPP_NAMESPACE::LogicOp::eClear, + uint32_t attachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments_ = {}, + std::array const & blendConstants_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , logicOpEnable{ logicOpEnable_ } + , logicOp{ logicOp_ } + , attachmentCount{ attachmentCount_ } + , pAttachments{ pAttachments_ } + , blendConstants{ blendConstants_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo( PipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineColorBlendStateCreateInfo( VkPipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineColorBlendStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineColorBlendStateCreateInfo( + VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_, + VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_, + VULKAN_HPP_NAMESPACE::LogicOp logicOp_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, + std::array const & blendConstants_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , logicOpEnable( logicOpEnable_ ) + , logicOp( logicOp_ ) + , attachmentCount( static_cast( attachments_.size() ) ) + , pAttachments( attachments_.data() ) + , blendConstants( blendConstants_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineColorBlendStateCreateInfo & operator=( PipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineColorBlendStateCreateInfo & operator=( VkPipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setLogicOpEnable( VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_ ) VULKAN_HPP_NOEXCEPT + { + logicOpEnable = logicOpEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setLogicOp( VULKAN_HPP_NAMESPACE::LogicOp logicOp_ ) VULKAN_HPP_NOEXCEPT + { + logicOp = logicOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = attachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & + setPAttachments( const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pAttachments = pAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineColorBlendStateCreateInfo & setAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = static_cast( attachments_.size() ); + pAttachments = attachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setBlendConstants( std::array blendConstants_ ) VULKAN_HPP_NOEXCEPT + { + blendConstants = blendConstants_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineColorBlendStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorBlendStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorBlendStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineColorBlendStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, logicOpEnable, logicOp, attachmentCount, pAttachments, blendConstants ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineColorBlendStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineColorBlendStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( logicOpEnable == rhs.logicOpEnable ) && + ( logicOp == rhs.logicOp ) && ( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) && + ( blendConstants == rhs.blendConstants ); +# endif + } + + bool operator!=( PipelineColorBlendStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineColorBlendStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable = {}; + VULKAN_HPP_NAMESPACE::LogicOp logicOp = VULKAN_HPP_NAMESPACE::LogicOp::eClear; + uint32_t attachmentCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D blendConstants = {}; + }; + + template <> + struct CppType + { + using Type = PipelineColorBlendStateCreateInfo; + }; + + // wrapper struct for struct VkPipelineDynamicStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDynamicStateCreateInfo.html + struct PipelineDynamicStateCreateInfo + { + using NativeType = VkPipelineDynamicStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDynamicStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineDynamicStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_ = {}, + uint32_t dynamicStateCount_ = {}, + const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , dynamicStateCount{ dynamicStateCount_ } + , pDynamicStates{ pDynamicStates_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineDynamicStateCreateInfo( PipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineDynamicStateCreateInfo( VkPipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineDynamicStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineDynamicStateCreateInfo( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicStates_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), dynamicStateCount( static_cast( dynamicStates_.size() ) ), pDynamicStates( dynamicStates_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineDynamicStateCreateInfo & operator=( PipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineDynamicStateCreateInfo & operator=( VkPipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setDynamicStateCount( uint32_t dynamicStateCount_ ) VULKAN_HPP_NOEXCEPT + { + dynamicStateCount = dynamicStateCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setPDynamicStates( const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates_ ) VULKAN_HPP_NOEXCEPT + { + pDynamicStates = pDynamicStates_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineDynamicStateCreateInfo & + setDynamicStates( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicStates_ ) VULKAN_HPP_NOEXCEPT + { + dynamicStateCount = static_cast( dynamicStates_.size() ); + pDynamicStates = dynamicStates_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineDynamicStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineDynamicStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineDynamicStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineDynamicStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, dynamicStateCount, pDynamicStates ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineDynamicStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineDynamicStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dynamicStateCount == rhs.dynamicStateCount ) && + ( pDynamicStates == rhs.pDynamicStates ); +# endif + } + + bool operator!=( PipelineDynamicStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineDynamicStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags = {}; + uint32_t dynamicStateCount = {}; + const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates = {}; + }; + + template <> + struct CppType + { + using Type = PipelineDynamicStateCreateInfo; + }; + + // wrapper struct for struct VkGraphicsPipelineCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkGraphicsPipelineCreateInfo.html + struct GraphicsPipelineCreateInfo + { + using NativeType = VkGraphicsPipelineCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, + uint32_t stageCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, + uint32_t subpass_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stageCount{ stageCount_ } + , pStages{ pStages_ } + , pVertexInputState{ pVertexInputState_ } + , pInputAssemblyState{ pInputAssemblyState_ } + , pTessellationState{ pTessellationState_ } + , pViewportState{ pViewportState_ } + , pRasterizationState{ pRasterizationState_ } + , pMultisampleState{ pMultisampleState_ } + , pDepthStencilState{ pDepthStencilState_ } + , pColorBlendState{ pColorBlendState_ } + , pDynamicState{ pDynamicState_ } + , layout{ layout_ } + , renderPass{ renderPass_ } + , subpass{ subpass_ } + , basePipelineHandle{ basePipelineHandle_ } + , basePipelineIndex{ basePipelineIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo( GraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GraphicsPipelineCreateInfo( VkGraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : GraphicsPipelineCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsPipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, + const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, + uint32_t subpass_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , stageCount( static_cast( stages_.size() ) ) + , pStages( stages_.data() ) + , pVertexInputState( pVertexInputState_ ) + , pInputAssemblyState( pInputAssemblyState_ ) + , pTessellationState( pTessellationState_ ) + , pViewportState( pViewportState_ ) + , pRasterizationState( pRasterizationState_ ) + , pMultisampleState( pMultisampleState_ ) + , pDepthStencilState( pDepthStencilState_ ) + , pColorBlendState( pColorBlendState_ ) + , pDynamicState( pDynamicState_ ) + , layout( layout_ ) + , renderPass( renderPass_ ) + , subpass( subpass_ ) + , basePipelineHandle( basePipelineHandle_ ) + , basePipelineIndex( basePipelineIndex_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + GraphicsPipelineCreateInfo & operator=( GraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GraphicsPipelineCreateInfo & operator=( VkGraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = stageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT + { + pStages = pStages_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsPipelineCreateInfo & + setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = static_cast( stages_.size() ); + pStages = stages_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPVertexInputState( const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ ) VULKAN_HPP_NOEXCEPT + { + pVertexInputState = pVertexInputState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPInputAssemblyState( const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ ) VULKAN_HPP_NOEXCEPT + { + pInputAssemblyState = pInputAssemblyState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPTessellationState( const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ ) VULKAN_HPP_NOEXCEPT + { + pTessellationState = pTessellationState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPViewportState( const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ ) VULKAN_HPP_NOEXCEPT + { + pViewportState = pViewportState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPRasterizationState( const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ ) VULKAN_HPP_NOEXCEPT + { + pRasterizationState = pRasterizationState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPMultisampleState( const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ ) VULKAN_HPP_NOEXCEPT + { + pMultisampleState = pMultisampleState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPDepthStencilState( const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ ) VULKAN_HPP_NOEXCEPT + { + pDepthStencilState = pDepthStencilState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPColorBlendState( const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ ) VULKAN_HPP_NOEXCEPT + { + pColorBlendState = pColorBlendState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & + setPDynamicState( const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ ) VULKAN_HPP_NOEXCEPT + { + pDynamicState = pDynamicState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT + { + renderPass = renderPass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT + { + subpass = subpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineHandle = basePipelineHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineIndex = basePipelineIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGraphicsPipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsPipelineCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsPipelineCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGraphicsPipelineCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + stageCount, + pStages, + pVertexInputState, + pInputAssemblyState, + pTessellationState, + pViewportState, + pRasterizationState, + pMultisampleState, + pDepthStencilState, + pColorBlendState, + pDynamicState, + layout, + renderPass, + subpass, + basePipelineHandle, + basePipelineIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GraphicsPipelineCreateInfo const & ) const = default; +#else + bool operator==( GraphicsPipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && + ( pVertexInputState == rhs.pVertexInputState ) && ( pInputAssemblyState == rhs.pInputAssemblyState ) && + ( pTessellationState == rhs.pTessellationState ) && ( pViewportState == rhs.pViewportState ) && + ( pRasterizationState == rhs.pRasterizationState ) && ( pMultisampleState == rhs.pMultisampleState ) && + ( pDepthStencilState == rhs.pDepthStencilState ) && ( pColorBlendState == rhs.pColorBlendState ) && ( pDynamicState == rhs.pDynamicState ) && + ( layout == rhs.layout ) && ( renderPass == rhs.renderPass ) && ( subpass == rhs.subpass ) && ( basePipelineHandle == rhs.basePipelineHandle ) && + ( basePipelineIndex == rhs.basePipelineIndex ); +# endif + } + + bool operator!=( GraphicsPipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsPipelineCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; + uint32_t stageCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; + const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState = {}; + const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState = {}; + const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState = {}; + const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState = {}; + const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState = {}; + const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState = {}; + const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState = {}; + const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState = {}; + const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; + uint32_t subpass = {}; + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; + int32_t basePipelineIndex = {}; + }; + + template <> + struct CppType + { + using Type = GraphicsPipelineCreateInfo; + }; + + // wrapper struct for struct VkGraphicsPipelineLibraryCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGraphicsPipelineLibraryCreateInfoEXT.html + struct GraphicsPipelineLibraryCreateInfoEXT + { + using NativeType = VkGraphicsPipelineLibraryCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineLibraryCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryCreateInfoEXT( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR GraphicsPipelineLibraryCreateInfoEXT( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GraphicsPipelineLibraryCreateInfoEXT( VkGraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : GraphicsPipelineLibraryCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + GraphicsPipelineLibraryCreateInfoEXT & operator=( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GraphicsPipelineLibraryCreateInfoEXT & operator=( VkGraphicsPipelineLibraryCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineLibraryCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineLibraryCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGraphicsPipelineLibraryCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsPipelineLibraryCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsPipelineLibraryCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGraphicsPipelineLibraryCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GraphicsPipelineLibraryCreateInfoEXT const & ) const = default; +#else + bool operator==( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( GraphicsPipelineLibraryCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsPipelineLibraryCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::GraphicsPipelineLibraryFlagsEXT flags = {}; + }; + + template <> + struct CppType + { + using Type = GraphicsPipelineLibraryCreateInfoEXT; + }; + + // wrapper struct for struct VkGraphicsShaderGroupCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGraphicsShaderGroupCreateInfoNV.html + struct GraphicsShaderGroupCreateInfoNV + { + using NativeType = VkGraphicsShaderGroupCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsShaderGroupCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GraphicsShaderGroupCreateInfoNV( uint32_t stageCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stageCount{ stageCount_ } + , pStages{ pStages_ } + , pVertexInputState{ pVertexInputState_ } + , pTessellationState{ pTessellationState_ } + { + } + + VULKAN_HPP_CONSTEXPR GraphicsShaderGroupCreateInfoNV( GraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GraphicsShaderGroupCreateInfoNV( VkGraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : GraphicsShaderGroupCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsShaderGroupCreateInfoNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, + const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stageCount( static_cast( stages_.size() ) ) + , pStages( stages_.data() ) + , pVertexInputState( pVertexInputState_ ) + , pTessellationState( pTessellationState_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + GraphicsShaderGroupCreateInfoNV & operator=( GraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GraphicsShaderGroupCreateInfoNV & operator=( VkGraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = stageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & + setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT + { + pStages = pStages_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsShaderGroupCreateInfoNV & + setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = static_cast( stages_.size() ); + pStages = stages_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & + setPVertexInputState( const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ ) VULKAN_HPP_NOEXCEPT + { + pVertexInputState = pVertexInputState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & + setPTessellationState( const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ ) VULKAN_HPP_NOEXCEPT + { + pTessellationState = pTessellationState_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGraphicsShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsShaderGroupCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGraphicsShaderGroupCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stageCount, pStages, pVertexInputState, pTessellationState ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GraphicsShaderGroupCreateInfoNV const & ) const = default; +#else + bool operator==( GraphicsShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && + ( pVertexInputState == rhs.pVertexInputState ) && ( pTessellationState == rhs.pTessellationState ); +# endif + } + + bool operator!=( GraphicsShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsShaderGroupCreateInfoNV; + const void * pNext = {}; + uint32_t stageCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; + const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState = {}; + const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState = {}; + }; + + template <> + struct CppType + { + using Type = GraphicsShaderGroupCreateInfoNV; + }; + + // wrapper struct for struct VkGraphicsPipelineShaderGroupsCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkGraphicsPipelineShaderGroupsCreateInfoNV.html + struct GraphicsPipelineShaderGroupsCreateInfoNV + { + using NativeType = VkGraphicsPipelineShaderGroupsCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR GraphicsPipelineShaderGroupsCreateInfoNV( uint32_t groupCount_ = {}, + const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups_ = {}, + uint32_t pipelineCount_ = {}, + const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , groupCount{ groupCount_ } + , pGroups{ pGroups_ } + , pipelineCount{ pipelineCount_ } + , pPipelines{ pPipelines_ } + { + } + + VULKAN_HPP_CONSTEXPR GraphicsPipelineShaderGroupsCreateInfoNV( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + GraphicsPipelineShaderGroupsCreateInfoNV( VkGraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : GraphicsPipelineShaderGroupsCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsPipelineShaderGroupsCreateInfoNV( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelines_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , groupCount( static_cast( groups_.size() ) ) + , pGroups( groups_.data() ) + , pipelineCount( static_cast( pipelines_.size() ) ) + , pPipelines( pipelines_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + GraphicsPipelineShaderGroupsCreateInfoNV & operator=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + GraphicsPipelineShaderGroupsCreateInfoNV & operator=( VkGraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT + { + groupCount = groupCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & + setPGroups( const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups_ ) VULKAN_HPP_NOEXCEPT + { + pGroups = pGroups_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsPipelineShaderGroupsCreateInfoNV & setGroups( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ ) VULKAN_HPP_NOEXCEPT + { + groupCount = static_cast( groups_.size() ); + pGroups = groups_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setPipelineCount( uint32_t pipelineCount_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCount = pipelineCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV & setPPipelines( const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines_ ) VULKAN_HPP_NOEXCEPT + { + pPipelines = pPipelines_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + GraphicsPipelineShaderGroupsCreateInfoNV & + setPipelines( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelines_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCount = static_cast( pipelines_.size() ); + pPipelines = pipelines_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkGraphicsPipelineShaderGroupsCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsPipelineShaderGroupsCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkGraphicsPipelineShaderGroupsCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkGraphicsPipelineShaderGroupsCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, groupCount, pGroups, pipelineCount, pPipelines ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( GraphicsPipelineShaderGroupsCreateInfoNV const & ) const = default; +#else + bool operator==( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( groupCount == rhs.groupCount ) && ( pGroups == rhs.pGroups ) && + ( pipelineCount == rhs.pipelineCount ) && ( pPipelines == rhs.pPipelines ); +# endif + } + + bool operator!=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV; + const void * pNext = {}; + uint32_t groupCount = {}; + const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups = {}; + uint32_t pipelineCount = {}; + const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines = {}; + }; + + template <> + struct CppType + { + using Type = GraphicsPipelineShaderGroupsCreateInfoNV; + }; + + // wrapper struct for struct VkXYColorEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkXYColorEXT.html + struct XYColorEXT + { + using NativeType = VkXYColorEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR XYColorEXT( float x_ = {}, float y_ = {} ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + { + } + + VULKAN_HPP_CONSTEXPR XYColorEXT( XYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + XYColorEXT( VkXYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT : XYColorEXT( *reinterpret_cast( &rhs ) ) {} + + XYColorEXT & operator=( XYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + XYColorEXT & operator=( VkXYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 XYColorEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XYColorEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkXYColorEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkXYColorEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkXYColorEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkXYColorEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( XYColorEXT const & ) const = default; +#else + bool operator==( XYColorEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ); +# endif + } + + bool operator!=( XYColorEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float x = {}; + float y = {}; + }; + + // wrapper struct for struct VkHdrMetadataEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkHdrMetadataEXT.html + struct HdrMetadataEXT + { + using NativeType = VkHdrMetadataEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHdrMetadataEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR HdrMetadataEXT( VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryRed_ = {}, + VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryGreen_ = {}, + VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryBlue_ = {}, + VULKAN_HPP_NAMESPACE::XYColorEXT whitePoint_ = {}, + float maxLuminance_ = {}, + float minLuminance_ = {}, + float maxContentLightLevel_ = {}, + float maxFrameAverageLightLevel_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displayPrimaryRed{ displayPrimaryRed_ } + , displayPrimaryGreen{ displayPrimaryGreen_ } + , displayPrimaryBlue{ displayPrimaryBlue_ } + , whitePoint{ whitePoint_ } + , maxLuminance{ maxLuminance_ } + , minLuminance{ minLuminance_ } + , maxContentLightLevel{ maxContentLightLevel_ } + , maxFrameAverageLightLevel{ maxFrameAverageLightLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR HdrMetadataEXT( HdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + HdrMetadataEXT( VkHdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT : HdrMetadataEXT( *reinterpret_cast( &rhs ) ) {} + + HdrMetadataEXT & operator=( HdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + HdrMetadataEXT & operator=( VkHdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setDisplayPrimaryRed( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryRed_ ) VULKAN_HPP_NOEXCEPT + { + displayPrimaryRed = displayPrimaryRed_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setDisplayPrimaryGreen( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryGreen_ ) VULKAN_HPP_NOEXCEPT + { + displayPrimaryGreen = displayPrimaryGreen_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setDisplayPrimaryBlue( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryBlue_ ) VULKAN_HPP_NOEXCEPT + { + displayPrimaryBlue = displayPrimaryBlue_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setWhitePoint( VULKAN_HPP_NAMESPACE::XYColorEXT const & whitePoint_ ) VULKAN_HPP_NOEXCEPT + { + whitePoint = whitePoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxLuminance( float maxLuminance_ ) VULKAN_HPP_NOEXCEPT + { + maxLuminance = maxLuminance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMinLuminance( float minLuminance_ ) VULKAN_HPP_NOEXCEPT + { + minLuminance = minLuminance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxContentLightLevel( float maxContentLightLevel_ ) VULKAN_HPP_NOEXCEPT + { + maxContentLightLevel = maxContentLightLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxFrameAverageLightLevel( float maxFrameAverageLightLevel_ ) VULKAN_HPP_NOEXCEPT + { + maxFrameAverageLightLevel = maxFrameAverageLightLevel_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkHdrMetadataEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHdrMetadataEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHdrMetadataEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkHdrMetadataEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + displayPrimaryRed, + displayPrimaryGreen, + displayPrimaryBlue, + whitePoint, + maxLuminance, + minLuminance, + maxContentLightLevel, + maxFrameAverageLightLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( HdrMetadataEXT const & ) const = default; +#else + bool operator==( HdrMetadataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayPrimaryRed == rhs.displayPrimaryRed ) && + ( displayPrimaryGreen == rhs.displayPrimaryGreen ) && ( displayPrimaryBlue == rhs.displayPrimaryBlue ) && ( whitePoint == rhs.whitePoint ) && + ( maxLuminance == rhs.maxLuminance ) && ( minLuminance == rhs.minLuminance ) && ( maxContentLightLevel == rhs.maxContentLightLevel ) && + ( maxFrameAverageLightLevel == rhs.maxFrameAverageLightLevel ); +# endif + } + + bool operator!=( HdrMetadataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHdrMetadataEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryRed = {}; + VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryGreen = {}; + VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryBlue = {}; + VULKAN_HPP_NAMESPACE::XYColorEXT whitePoint = {}; + float maxLuminance = {}; + float minLuminance = {}; + float maxContentLightLevel = {}; + float maxFrameAverageLightLevel = {}; + }; + + template <> + struct CppType + { + using Type = HdrMetadataEXT; + }; + + // wrapper struct for struct VkHdrVividDynamicMetadataHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkHdrVividDynamicMetadataHUAWEI.html + struct HdrVividDynamicMetadataHUAWEI + { + using NativeType = VkHdrVividDynamicMetadataHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHdrVividDynamicMetadataHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + HdrVividDynamicMetadataHUAWEI( size_t dynamicMetadataSize_ = {}, const void * pDynamicMetadata_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dynamicMetadataSize{ dynamicMetadataSize_ } + , pDynamicMetadata{ pDynamicMetadata_ } + { + } + + VULKAN_HPP_CONSTEXPR HdrVividDynamicMetadataHUAWEI( HdrVividDynamicMetadataHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + HdrVividDynamicMetadataHUAWEI( VkHdrVividDynamicMetadataHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : HdrVividDynamicMetadataHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + HdrVividDynamicMetadataHUAWEI( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicMetadata_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), dynamicMetadataSize( dynamicMetadata_.size() * sizeof( T ) ), pDynamicMetadata( dynamicMetadata_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + HdrVividDynamicMetadataHUAWEI & operator=( HdrVividDynamicMetadataHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + HdrVividDynamicMetadataHUAWEI & operator=( VkHdrVividDynamicMetadataHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 HdrVividDynamicMetadataHUAWEI & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrVividDynamicMetadataHUAWEI & setDynamicMetadataSize( size_t dynamicMetadataSize_ ) VULKAN_HPP_NOEXCEPT + { + dynamicMetadataSize = dynamicMetadataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HdrVividDynamicMetadataHUAWEI & setPDynamicMetadata( const void * pDynamicMetadata_ ) VULKAN_HPP_NOEXCEPT + { + pDynamicMetadata = pDynamicMetadata_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + HdrVividDynamicMetadataHUAWEI & setDynamicMetadata( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dynamicMetadata_ ) VULKAN_HPP_NOEXCEPT + { + dynamicMetadataSize = dynamicMetadata_.size() * sizeof( T ); + pDynamicMetadata = dynamicMetadata_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkHdrVividDynamicMetadataHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHdrVividDynamicMetadataHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHdrVividDynamicMetadataHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkHdrVividDynamicMetadataHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dynamicMetadataSize, pDynamicMetadata ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( HdrVividDynamicMetadataHUAWEI const & ) const = default; +#else + bool operator==( HdrVividDynamicMetadataHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicMetadataSize == rhs.dynamicMetadataSize ) && + ( pDynamicMetadata == rhs.pDynamicMetadata ); +# endif + } + + bool operator!=( HdrVividDynamicMetadataHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHdrVividDynamicMetadataHUAWEI; + const void * pNext = {}; + size_t dynamicMetadataSize = {}; + const void * pDynamicMetadata = {}; + }; + + template <> + struct CppType + { + using Type = HdrVividDynamicMetadataHUAWEI; + }; + + // wrapper struct for struct VkHeadlessSurfaceCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkHeadlessSurfaceCreateInfoEXT.html + struct HeadlessSurfaceCreateInfoEXT + { + using NativeType = VkHeadlessSurfaceCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHeadlessSurfaceCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR HeadlessSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR HeadlessSurfaceCreateInfoEXT( HeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + HeadlessSurfaceCreateInfoEXT( VkHeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : HeadlessSurfaceCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + HeadlessSurfaceCreateInfoEXT & operator=( HeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + HeadlessSurfaceCreateInfoEXT & operator=( VkHeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkHeadlessSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHeadlessSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHeadlessSurfaceCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkHeadlessSurfaceCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( HeadlessSurfaceCreateInfoEXT const & ) const = default; +#else + bool operator==( HeadlessSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( HeadlessSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHeadlessSurfaceCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags = {}; + }; + + template <> + struct CppType + { + using Type = HeadlessSurfaceCreateInfoEXT; + }; + + // wrapper struct for struct VkHostImageCopyDevicePerformanceQuery, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkHostImageCopyDevicePerformanceQuery.html + struct HostImageCopyDevicePerformanceQuery + { + using NativeType = VkHostImageCopyDevicePerformanceQuery; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHostImageCopyDevicePerformanceQuery; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR HostImageCopyDevicePerformanceQuery( VULKAN_HPP_NAMESPACE::Bool32 optimalDeviceAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryLayout_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , optimalDeviceAccess{ optimalDeviceAccess_ } + , identicalMemoryLayout{ identicalMemoryLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR HostImageCopyDevicePerformanceQuery( HostImageCopyDevicePerformanceQuery const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + HostImageCopyDevicePerformanceQuery( VkHostImageCopyDevicePerformanceQuery const & rhs ) VULKAN_HPP_NOEXCEPT + : HostImageCopyDevicePerformanceQuery( *reinterpret_cast( &rhs ) ) + { + } + + HostImageCopyDevicePerformanceQuery & operator=( HostImageCopyDevicePerformanceQuery const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + HostImageCopyDevicePerformanceQuery & operator=( VkHostImageCopyDevicePerformanceQuery const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkHostImageCopyDevicePerformanceQuery const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHostImageCopyDevicePerformanceQuery &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHostImageCopyDevicePerformanceQuery const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkHostImageCopyDevicePerformanceQuery *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, optimalDeviceAccess, identicalMemoryLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( HostImageCopyDevicePerformanceQuery const & ) const = default; +#else + bool operator==( HostImageCopyDevicePerformanceQuery const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( optimalDeviceAccess == rhs.optimalDeviceAccess ) && + ( identicalMemoryLayout == rhs.identicalMemoryLayout ); +# endif + } + + bool operator!=( HostImageCopyDevicePerformanceQuery const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHostImageCopyDevicePerformanceQuery; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 optimalDeviceAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryLayout = {}; + }; + + template <> + struct CppType + { + using Type = HostImageCopyDevicePerformanceQuery; + }; + + using HostImageCopyDevicePerformanceQueryEXT = HostImageCopyDevicePerformanceQuery; + + // wrapper struct for struct VkHostImageLayoutTransitionInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkHostImageLayoutTransitionInfo.html + struct HostImageLayoutTransitionInfo + { + using NativeType = VkHostImageLayoutTransitionInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHostImageLayoutTransitionInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR HostImageLayoutTransitionInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + , oldLayout{ oldLayout_ } + , newLayout{ newLayout_ } + , subresourceRange{ subresourceRange_ } + { + } + + VULKAN_HPP_CONSTEXPR HostImageLayoutTransitionInfo( HostImageLayoutTransitionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + HostImageLayoutTransitionInfo( VkHostImageLayoutTransitionInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : HostImageLayoutTransitionInfo( *reinterpret_cast( &rhs ) ) + { + } + + HostImageLayoutTransitionInfo & operator=( HostImageLayoutTransitionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + HostImageLayoutTransitionInfo & operator=( VkHostImageLayoutTransitionInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 HostImageLayoutTransitionInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HostImageLayoutTransitionInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HostImageLayoutTransitionInfo & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT + { + oldLayout = oldLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HostImageLayoutTransitionInfo & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT + { + newLayout = newLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 HostImageLayoutTransitionInfo & + setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT + { + subresourceRange = subresourceRange_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkHostImageLayoutTransitionInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHostImageLayoutTransitionInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkHostImageLayoutTransitionInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkHostImageLayoutTransitionInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image, oldLayout, newLayout, subresourceRange ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( HostImageLayoutTransitionInfo const & ) const = default; +#else + bool operator==( HostImageLayoutTransitionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( oldLayout == rhs.oldLayout ) && ( newLayout == rhs.newLayout ) && + ( subresourceRange == rhs.subresourceRange ); +# endif + } + + bool operator!=( HostImageLayoutTransitionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eHostImageLayoutTransitionInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; + }; + + template <> + struct CppType + { + using Type = HostImageLayoutTransitionInfo; + }; + + using HostImageLayoutTransitionInfoEXT = HostImageLayoutTransitionInfo; + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + // wrapper struct for struct VkIOSSurfaceCreateInfoMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkIOSSurfaceCreateInfoMVK.html + struct IOSSurfaceCreateInfoMVK + { + using NativeType = VkIOSSurfaceCreateInfoMVK; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIosSurfaceCreateInfoMVK; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IOSSurfaceCreateInfoMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ = {}, + const void * pView_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pView{ pView_ } + { + } + + VULKAN_HPP_CONSTEXPR IOSSurfaceCreateInfoMVK( IOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IOSSurfaceCreateInfoMVK( VkIOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT + : IOSSurfaceCreateInfoMVK( *reinterpret_cast( &rhs ) ) + { + } + + IOSSurfaceCreateInfoMVK & operator=( IOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IOSSurfaceCreateInfoMVK & operator=( VkIOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setFlags( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT + { + pView = pView_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIOSSurfaceCreateInfoMVK const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIOSSurfaceCreateInfoMVK *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pView ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IOSSurfaceCreateInfoMVK const & ) const = default; +# else + bool operator==( IOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pView == rhs.pView ); +# endif + } + + bool operator!=( IOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIosSurfaceCreateInfoMVK; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags = {}; + const void * pView = {}; + }; + + template <> + struct CppType + { + using Type = IOSSurfaceCreateInfoMVK; + }; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + + // wrapper struct for struct VkImageAlignmentControlCreateInfoMESA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageAlignmentControlCreateInfoMESA.html + struct ImageAlignmentControlCreateInfoMESA + { + using NativeType = VkImageAlignmentControlCreateInfoMESA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageAlignmentControlCreateInfoMESA; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageAlignmentControlCreateInfoMESA( uint32_t maximumRequestedAlignment_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maximumRequestedAlignment{ maximumRequestedAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageAlignmentControlCreateInfoMESA( ImageAlignmentControlCreateInfoMESA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageAlignmentControlCreateInfoMESA( VkImageAlignmentControlCreateInfoMESA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageAlignmentControlCreateInfoMESA( *reinterpret_cast( &rhs ) ) + { + } + + ImageAlignmentControlCreateInfoMESA & operator=( ImageAlignmentControlCreateInfoMESA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageAlignmentControlCreateInfoMESA & operator=( VkImageAlignmentControlCreateInfoMESA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageAlignmentControlCreateInfoMESA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageAlignmentControlCreateInfoMESA & setMaximumRequestedAlignment( uint32_t maximumRequestedAlignment_ ) VULKAN_HPP_NOEXCEPT + { + maximumRequestedAlignment = maximumRequestedAlignment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageAlignmentControlCreateInfoMESA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageAlignmentControlCreateInfoMESA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageAlignmentControlCreateInfoMESA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageAlignmentControlCreateInfoMESA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maximumRequestedAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageAlignmentControlCreateInfoMESA const & ) const = default; +#else + bool operator==( ImageAlignmentControlCreateInfoMESA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maximumRequestedAlignment == rhs.maximumRequestedAlignment ); +# endif + } + + bool operator!=( ImageAlignmentControlCreateInfoMESA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageAlignmentControlCreateInfoMESA; + const void * pNext = {}; + uint32_t maximumRequestedAlignment = {}; + }; + + template <> + struct CppType + { + using Type = ImageAlignmentControlCreateInfoMESA; + }; + + // wrapper struct for struct VkImageBlit, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageBlit.html + struct ImageBlit + { + using NativeType = VkImageBlit; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ImageBlit( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, + std::array const & srcOffsets_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, + std::array const & dstOffsets_ = {} ) VULKAN_HPP_NOEXCEPT + : srcSubresource{ srcSubresource_ } + , srcOffsets{ srcOffsets_ } + , dstSubresource{ dstSubresource_ } + , dstOffsets{ dstOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit( ImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageBlit( VkImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT : ImageBlit( *reinterpret_cast( &rhs ) ) {} + + ImageBlit & operator=( ImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageBlit & operator=( VkImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageBlit & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT + { + srcSubresource = srcSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit & setSrcOffsets( std::array const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT + { + srcOffsets = srcOffsets_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT + { + dstSubresource = dstSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageBlit & setDstOffsets( std::array const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT + { + dstOffsets = dstOffsets_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageBlit const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageBlit &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageBlit const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageBlit *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcSubresource, srcOffsets, dstSubresource, dstOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageBlit const & ) const = default; +#else + bool operator==( ImageBlit const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcSubresource == rhs.srcSubresource ) && ( srcOffsets == rhs.srcOffsets ) && ( dstSubresource == rhs.dstSubresource ) && + ( dstOffsets == rhs.dstOffsets ); +# endif + } + + bool operator!=( ImageBlit const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D srcOffsets = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D dstOffsets = {}; + }; + + // wrapper struct for struct VkImageCaptureDescriptorDataInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCaptureDescriptorDataInfoEXT.html + struct ImageCaptureDescriptorDataInfoEXT + { + using NativeType = VkImageCaptureDescriptorDataInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCaptureDescriptorDataInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageCaptureDescriptorDataInfoEXT( VULKAN_HPP_NAMESPACE::Image image_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageCaptureDescriptorDataInfoEXT( ImageCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageCaptureDescriptorDataInfoEXT( VkImageCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageCaptureDescriptorDataInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageCaptureDescriptorDataInfoEXT & operator=( ImageCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageCaptureDescriptorDataInfoEXT & operator=( VkImageCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageCaptureDescriptorDataInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCaptureDescriptorDataInfoEXT & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageCaptureDescriptorDataInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCaptureDescriptorDataInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCaptureDescriptorDataInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageCaptureDescriptorDataInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageCaptureDescriptorDataInfoEXT const & ) const = default; +#else + bool operator==( ImageCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ); +# endif + } + + bool operator!=( ImageCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCaptureDescriptorDataInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + }; + + template <> + struct CppType + { + using Type = ImageCaptureDescriptorDataInfoEXT; + }; + + // wrapper struct for struct VkImageCompressionControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCompressionControlEXT.html + struct ImageCompressionControlEXT + { + using NativeType = VkImageCompressionControlEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCompressionControlEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageCompressionControlEXT( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags_ = {}, + uint32_t compressionControlPlaneCount_ = {}, + VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT * pFixedRateFlags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , compressionControlPlaneCount{ compressionControlPlaneCount_ } + , pFixedRateFlags{ pFixedRateFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageCompressionControlEXT( ImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageCompressionControlEXT( VkImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageCompressionControlEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageCompressionControlEXT( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fixedRateFlags_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , compressionControlPlaneCount( static_cast( fixedRateFlags_.size() ) ) + , pFixedRateFlags( fixedRateFlags_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageCompressionControlEXT & operator=( ImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageCompressionControlEXT & operator=( VkImageCompressionControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & setFlags( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & setCompressionControlPlaneCount( uint32_t compressionControlPlaneCount_ ) VULKAN_HPP_NOEXCEPT + { + compressionControlPlaneCount = compressionControlPlaneCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCompressionControlEXT & + setPFixedRateFlags( VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT * pFixedRateFlags_ ) VULKAN_HPP_NOEXCEPT + { + pFixedRateFlags = pFixedRateFlags_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageCompressionControlEXT & setFixedRateFlags( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fixedRateFlags_ ) VULKAN_HPP_NOEXCEPT + { + compressionControlPlaneCount = static_cast( fixedRateFlags_.size() ); + pFixedRateFlags = fixedRateFlags_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageCompressionControlEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCompressionControlEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCompressionControlEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageCompressionControlEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, compressionControlPlaneCount, pFixedRateFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageCompressionControlEXT const & ) const = default; +#else + bool operator==( ImageCompressionControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( compressionControlPlaneCount == rhs.compressionControlPlaneCount ) && ( pFixedRateFlags == rhs.pFixedRateFlags ); +# endif + } + + bool operator!=( ImageCompressionControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCompressionControlEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT flags = {}; + uint32_t compressionControlPlaneCount = {}; + VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT * pFixedRateFlags = {}; + }; + + template <> + struct CppType + { + using Type = ImageCompressionControlEXT; + }; + + // wrapper struct for struct VkImageCompressionPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCompressionPropertiesEXT.html + struct ImageCompressionPropertiesEXT + { + using NativeType = VkImageCompressionPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCompressionPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageCompressionPropertiesEXT( VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT imageCompressionFlags_ = {}, + VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageCompressionFlags{ imageCompressionFlags_ } + , imageCompressionFixedRateFlags{ imageCompressionFixedRateFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageCompressionPropertiesEXT( ImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageCompressionPropertiesEXT( VkImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageCompressionPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageCompressionPropertiesEXT & operator=( ImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageCompressionPropertiesEXT & operator=( VkImageCompressionPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkImageCompressionPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCompressionPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCompressionPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageCompressionPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageCompressionFlags, imageCompressionFixedRateFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageCompressionPropertiesEXT const & ) const = default; +#else + bool operator==( ImageCompressionPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCompressionFlags == rhs.imageCompressionFlags ) && + ( imageCompressionFixedRateFlags == rhs.imageCompressionFixedRateFlags ); +# endif + } + + bool operator!=( ImageCompressionPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCompressionPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageCompressionFlagsEXT imageCompressionFlags = {}; + VULKAN_HPP_NAMESPACE::ImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags = {}; + }; + + template <> + struct CppType + { + using Type = ImageCompressionPropertiesEXT; + }; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkImageFormatConstraintsInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageFormatConstraintsInfoFUCHSIA.html + struct ImageFormatConstraintsInfoFUCHSIA + { + using NativeType = VkImageFormatConstraintsInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatConstraintsInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageFormatConstraintsInfoFUCHSIA( VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ = {}, + VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_ = {}, + uint64_t sysmemPixelFormat_ = {}, + uint32_t colorSpaceCount_ = {}, + const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageCreateInfo{ imageCreateInfo_ } + , requiredFormatFeatures{ requiredFormatFeatures_ } + , flags{ flags_ } + , sysmemPixelFormat{ sysmemPixelFormat_ } + , colorSpaceCount{ colorSpaceCount_ } + , pColorSpaces{ pColorSpaces_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageFormatConstraintsInfoFUCHSIA( ImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageFormatConstraintsInfoFUCHSIA( VkImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageFormatConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageFormatConstraintsInfoFUCHSIA( VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo_, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_, + VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_, + uint64_t sysmemPixelFormat_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorSpaces_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , imageCreateInfo( imageCreateInfo_ ) + , requiredFormatFeatures( requiredFormatFeatures_ ) + , flags( flags_ ) + , sysmemPixelFormat( sysmemPixelFormat_ ) + , colorSpaceCount( static_cast( colorSpaces_.size() ) ) + , pColorSpaces( colorSpaces_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageFormatConstraintsInfoFUCHSIA & operator=( ImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageFormatConstraintsInfoFUCHSIA & operator=( VkImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & + setImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & imageCreateInfo_ ) VULKAN_HPP_NOEXCEPT + { + imageCreateInfo = imageCreateInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & + setRequiredFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ ) VULKAN_HPP_NOEXCEPT + { + requiredFormatFeatures = requiredFormatFeatures_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setSysmemPixelFormat( uint64_t sysmemPixelFormat_ ) VULKAN_HPP_NOEXCEPT + { + sysmemPixelFormat = sysmemPixelFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setColorSpaceCount( uint32_t colorSpaceCount_ ) VULKAN_HPP_NOEXCEPT + { + colorSpaceCount = colorSpaceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & + setPColorSpaces( const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces_ ) VULKAN_HPP_NOEXCEPT + { + pColorSpaces = pColorSpaces_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageFormatConstraintsInfoFUCHSIA & setColorSpaces( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorSpaces_ ) VULKAN_HPP_NOEXCEPT + { + colorSpaceCount = static_cast( colorSpaces_.size() ); + pColorSpaces = colorSpaces_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageFormatConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatConstraintsInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageFormatConstraintsInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageCreateInfo, requiredFormatFeatures, flags, sysmemPixelFormat, colorSpaceCount, pColorSpaces ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageFormatConstraintsInfoFUCHSIA const & ) const = default; +# else + bool operator==( ImageFormatConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCreateInfo == rhs.imageCreateInfo ) && + ( requiredFormatFeatures == rhs.requiredFormatFeatures ) && ( flags == rhs.flags ) && ( sysmemPixelFormat == rhs.sysmemPixelFormat ) && + ( colorSpaceCount == rhs.colorSpaceCount ) && ( pColorSpaces == rhs.pColorSpaces ); +# endif + } + + bool operator!=( ImageFormatConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatConstraintsInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures = {}; + VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags = {}; + uint64_t sysmemPixelFormat = {}; + uint32_t colorSpaceCount = {}; + const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces = {}; + }; + + template <> + struct CppType + { + using Type = ImageFormatConstraintsInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkImageConstraintsInfoFUCHSIA, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageConstraintsInfoFUCHSIA.html + struct ImageConstraintsInfoFUCHSIA + { + using NativeType = VkImageConstraintsInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageConstraintsInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFUCHSIA( uint32_t formatConstraintsCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints_ = {}, + VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {}, + VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , formatConstraintsCount{ formatConstraintsCount_ } + , pFormatConstraints{ pFormatConstraints_ } + , bufferCollectionConstraints{ bufferCollectionConstraints_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFUCHSIA( ImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageConstraintsInfoFUCHSIA( VkImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageConstraintsInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageConstraintsInfoFUCHSIA( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & formatConstraints_, + VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {}, + VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , formatConstraintsCount( static_cast( formatConstraints_.size() ) ) + , pFormatConstraints( formatConstraints_.data() ) + , bufferCollectionConstraints( bufferCollectionConstraints_ ) + , flags( flags_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageConstraintsInfoFUCHSIA & operator=( ImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageConstraintsInfoFUCHSIA & operator=( VkImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setFormatConstraintsCount( uint32_t formatConstraintsCount_ ) VULKAN_HPP_NOEXCEPT + { + formatConstraintsCount = formatConstraintsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & + setPFormatConstraints( const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints_ ) VULKAN_HPP_NOEXCEPT + { + pFormatConstraints = pFormatConstraints_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageConstraintsInfoFUCHSIA & setFormatConstraints( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & formatConstraints_ ) + VULKAN_HPP_NOEXCEPT + { + formatConstraintsCount = static_cast( formatConstraints_.size() ); + pFormatConstraints = formatConstraints_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & + setBufferCollectionConstraints( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraints_ ) VULKAN_HPP_NOEXCEPT + { + bufferCollectionConstraints = bufferCollectionConstraints_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageConstraintsInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageConstraintsInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, formatConstraintsCount, pFormatConstraints, bufferCollectionConstraints, flags ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageConstraintsInfoFUCHSIA const & ) const = default; +# else + bool operator==( ImageConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatConstraintsCount == rhs.formatConstraintsCount ) && + ( pFormatConstraints == rhs.pFormatConstraints ) && ( bufferCollectionConstraints == rhs.bufferCollectionConstraints ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( ImageConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageConstraintsInfoFUCHSIA; + const void * pNext = {}; + uint32_t formatConstraintsCount = {}; + const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints = {}; + VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints = {}; + VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags = {}; + }; + + template <> + struct CppType + { + using Type = ImageConstraintsInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkImageCopy, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageCopy.html + struct ImageCopy + { + using NativeType = VkImageCopy; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageCopy( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT + : srcSubresource{ srcSubresource_ } + , srcOffset{ srcOffset_ } + , dstSubresource{ dstSubresource_ } + , dstOffset{ dstOffset_ } + , extent{ extent_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageCopy( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageCopy( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCopy( *reinterpret_cast( &rhs ) ) {} + + ImageCopy & operator=( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageCopy & operator=( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageCopy & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT + { + srcSubresource = srcSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcOffset = srcOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT + { + dstSubresource = dstSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstOffset = dstOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageCopy & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageCopy const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCopy &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageCopy const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageCopy *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageCopy const & ) const = default; +#else + bool operator==( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && ( dstSubresource == rhs.dstSubresource ) && + ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); +# endif + } + + bool operator!=( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D extent = {}; + }; + + // wrapper struct for struct VkSubresourceLayout, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubresourceLayout.html + struct SubresourceLayout + { + using NativeType = VkSubresourceLayout; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubresourceLayout( VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize rowPitch_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize arrayPitch_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize depthPitch_ = {} ) VULKAN_HPP_NOEXCEPT + : offset{ offset_ } + , size{ size_ } + , rowPitch{ rowPitch_ } + , arrayPitch{ arrayPitch_ } + , depthPitch{ depthPitch_ } + { + } + + VULKAN_HPP_CONSTEXPR SubresourceLayout( SubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubresourceLayout( VkSubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT : SubresourceLayout( *reinterpret_cast( &rhs ) ) {} + + SubresourceLayout & operator=( SubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubresourceLayout & operator=( VkSubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubresourceLayout & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubresourceLayout & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubresourceLayout & setRowPitch( VULKAN_HPP_NAMESPACE::DeviceSize rowPitch_ ) VULKAN_HPP_NOEXCEPT + { + rowPitch = rowPitch_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubresourceLayout & setArrayPitch( VULKAN_HPP_NAMESPACE::DeviceSize arrayPitch_ ) VULKAN_HPP_NOEXCEPT + { + arrayPitch = arrayPitch_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubresourceLayout & setDepthPitch( VULKAN_HPP_NAMESPACE::DeviceSize depthPitch_ ) VULKAN_HPP_NOEXCEPT + { + depthPitch = depthPitch_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubresourceLayout const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubresourceLayout &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubresourceLayout const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubresourceLayout *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( offset, size, rowPitch, arrayPitch, depthPitch ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubresourceLayout const & ) const = default; +#else + bool operator==( SubresourceLayout const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( offset == rhs.offset ) && ( size == rhs.size ) && ( rowPitch == rhs.rowPitch ) && ( arrayPitch == rhs.arrayPitch ) && + ( depthPitch == rhs.depthPitch ); +# endif + } + + bool operator!=( SubresourceLayout const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::DeviceSize rowPitch = {}; + VULKAN_HPP_NAMESPACE::DeviceSize arrayPitch = {}; + VULKAN_HPP_NAMESPACE::DeviceSize depthPitch = {}; + }; + + // wrapper struct for struct VkImageDrmFormatModifierExplicitCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageDrmFormatModifierExplicitCreateInfoEXT.html + struct ImageDrmFormatModifierExplicitCreateInfoEXT + { + using NativeType = VkImageDrmFormatModifierExplicitCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierExplicitCreateInfoEXT( uint64_t drmFormatModifier_ = {}, + uint32_t drmFormatModifierPlaneCount_ = {}, + const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , drmFormatModifier{ drmFormatModifier_ } + , drmFormatModifierPlaneCount{ drmFormatModifierPlaneCount_ } + , pPlaneLayouts{ pPlaneLayouts_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierExplicitCreateInfoEXT( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageDrmFormatModifierExplicitCreateInfoEXT( VkImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageDrmFormatModifierExplicitCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageDrmFormatModifierExplicitCreateInfoEXT( + uint64_t drmFormatModifier_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & planeLayouts_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , drmFormatModifier( drmFormatModifier_ ) + , drmFormatModifierPlaneCount( static_cast( planeLayouts_.size() ) ) + , pPlaneLayouts( planeLayouts_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageDrmFormatModifierExplicitCreateInfoEXT & operator=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageDrmFormatModifierExplicitCreateInfoEXT & operator=( VkImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT + { + drmFormatModifier = drmFormatModifier_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & + setDrmFormatModifierPlaneCount( uint32_t drmFormatModifierPlaneCount_ ) VULKAN_HPP_NOEXCEPT + { + drmFormatModifierPlaneCount = drmFormatModifierPlaneCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT & + setPPlaneLayouts( const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pPlaneLayouts = pPlaneLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageDrmFormatModifierExplicitCreateInfoEXT & + setPlaneLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & planeLayouts_ ) VULKAN_HPP_NOEXCEPT + { + drmFormatModifierPlaneCount = static_cast( planeLayouts_.size() ); + pPlaneLayouts = planeLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageDrmFormatModifierExplicitCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierExplicitCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierExplicitCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierExplicitCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, drmFormatModifier, drmFormatModifierPlaneCount, pPlaneLayouts ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageDrmFormatModifierExplicitCreateInfoEXT const & ) const = default; +#else + bool operator==( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ) && + ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) && ( pPlaneLayouts == rhs.pPlaneLayouts ); +# endif + } + + bool operator!=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT; + const void * pNext = {}; + uint64_t drmFormatModifier = {}; + uint32_t drmFormatModifierPlaneCount = {}; + const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts = {}; + }; + + template <> + struct CppType + { + using Type = ImageDrmFormatModifierExplicitCreateInfoEXT; + }; + + // wrapper struct for struct VkImageDrmFormatModifierListCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageDrmFormatModifierListCreateInfoEXT.html + struct ImageDrmFormatModifierListCreateInfoEXT + { + using NativeType = VkImageDrmFormatModifierListCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageDrmFormatModifierListCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierListCreateInfoEXT( uint32_t drmFormatModifierCount_ = {}, + const uint64_t * pDrmFormatModifiers_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , drmFormatModifierCount{ drmFormatModifierCount_ } + , pDrmFormatModifiers{ pDrmFormatModifiers_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierListCreateInfoEXT( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageDrmFormatModifierListCreateInfoEXT( VkImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageDrmFormatModifierListCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageDrmFormatModifierListCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drmFormatModifiers_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), drmFormatModifierCount( static_cast( drmFormatModifiers_.size() ) ), pDrmFormatModifiers( drmFormatModifiers_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageDrmFormatModifierListCreateInfoEXT & operator=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageDrmFormatModifierListCreateInfoEXT & operator=( VkImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT & setDrmFormatModifierCount( uint32_t drmFormatModifierCount_ ) VULKAN_HPP_NOEXCEPT + { + drmFormatModifierCount = drmFormatModifierCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT & setPDrmFormatModifiers( const uint64_t * pDrmFormatModifiers_ ) VULKAN_HPP_NOEXCEPT + { + pDrmFormatModifiers = pDrmFormatModifiers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageDrmFormatModifierListCreateInfoEXT & + setDrmFormatModifiers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & drmFormatModifiers_ ) VULKAN_HPP_NOEXCEPT + { + drmFormatModifierCount = static_cast( drmFormatModifiers_.size() ); + pDrmFormatModifiers = drmFormatModifiers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageDrmFormatModifierListCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierListCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierListCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierListCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifiers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageDrmFormatModifierListCreateInfoEXT const & ) const = default; +#else + bool operator==( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifierCount == rhs.drmFormatModifierCount ) && + ( pDrmFormatModifiers == rhs.pDrmFormatModifiers ); +# endif + } + + bool operator!=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageDrmFormatModifierListCreateInfoEXT; + const void * pNext = {}; + uint32_t drmFormatModifierCount = {}; + const uint64_t * pDrmFormatModifiers = {}; + }; + + template <> + struct CppType + { + using Type = ImageDrmFormatModifierListCreateInfoEXT; + }; + + // wrapper struct for struct VkImageDrmFormatModifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageDrmFormatModifierPropertiesEXT.html + struct ImageDrmFormatModifierPropertiesEXT + { + using NativeType = VkImageDrmFormatModifierPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageDrmFormatModifierPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierPropertiesEXT( uint64_t drmFormatModifier_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , drmFormatModifier{ drmFormatModifier_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageDrmFormatModifierPropertiesEXT( ImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageDrmFormatModifierPropertiesEXT( VkImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageDrmFormatModifierPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageDrmFormatModifierPropertiesEXT & operator=( ImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageDrmFormatModifierPropertiesEXT & operator=( VkImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkImageDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageDrmFormatModifierPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, drmFormatModifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageDrmFormatModifierPropertiesEXT const & ) const = default; +#else + bool operator==( ImageDrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ); +# endif + } + + bool operator!=( ImageDrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageDrmFormatModifierPropertiesEXT; + void * pNext = {}; + uint64_t drmFormatModifier = {}; + }; + + template <> + struct CppType + { + using Type = ImageDrmFormatModifierPropertiesEXT; + }; + + // wrapper struct for struct VkImageFormatListCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageFormatListCreateInfo.html + struct ImageFormatListCreateInfo + { + using NativeType = VkImageFormatListCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatListCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageFormatListCreateInfo( uint32_t viewFormatCount_ = {}, + const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , viewFormatCount{ viewFormatCount_ } + , pViewFormats{ pViewFormats_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageFormatListCreateInfo( ImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageFormatListCreateInfo( VkImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageFormatListCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageFormatListCreateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), viewFormatCount( static_cast( viewFormats_.size() ) ), pViewFormats( viewFormats_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ImageFormatListCreateInfo & operator=( ImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageFormatListCreateInfo & operator=( VkImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT + { + viewFormatCount = viewFormatCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT + { + pViewFormats = pViewFormats_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ImageFormatListCreateInfo & + setViewFormats( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewFormats_ ) VULKAN_HPP_NOEXCEPT + { + viewFormatCount = static_cast( viewFormats_.size() ); + pViewFormats = viewFormats_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageFormatListCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatListCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatListCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageFormatListCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, viewFormatCount, pViewFormats ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageFormatListCreateInfo const & ) const = default; +#else + bool operator==( ImageFormatListCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewFormatCount == rhs.viewFormatCount ) && ( pViewFormats == rhs.pViewFormats ); +# endif + } + + bool operator!=( ImageFormatListCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatListCreateInfo; + const void * pNext = {}; + uint32_t viewFormatCount = {}; + const VULKAN_HPP_NAMESPACE::Format * pViewFormats = {}; + }; + + template <> + struct CppType + { + using Type = ImageFormatListCreateInfo; + }; + + using ImageFormatListCreateInfoKHR = ImageFormatListCreateInfo; + + // wrapper struct for struct VkImageFormatProperties2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageFormatProperties2.html + struct ImageFormatProperties2 + { + using NativeType = VkImageFormatProperties2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatProperties2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageFormatProperties2( VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageFormatProperties{ imageFormatProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageFormatProperties2( ImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageFormatProperties2( VkImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageFormatProperties2( *reinterpret_cast( &rhs ) ) + { + } + + ImageFormatProperties2 & operator=( ImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageFormatProperties2 & operator=( VkImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageFormatProperties2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageFormatProperties2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageFormatProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageFormatProperties2 const & ) const = default; +#else + bool operator==( ImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageFormatProperties == rhs.imageFormatProperties ); +# endif + } + + bool operator!=( ImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatProperties2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties = {}; + }; + + template <> + struct CppType + { + using Type = ImageFormatProperties2; + }; + + using ImageFormatProperties2KHR = ImageFormatProperties2; + + // wrapper struct for struct VkImageMemoryBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageMemoryBarrier.html + struct ImageMemoryBarrier + { + using NativeType = VkImageMemoryBarrier; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageMemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t srcQueueFamilyIndex_ = {}, + uint32_t dstQueueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcAccessMask{ srcAccessMask_ } + , dstAccessMask{ dstAccessMask_ } + , oldLayout{ oldLayout_ } + , newLayout{ newLayout_ } + , srcQueueFamilyIndex{ srcQueueFamilyIndex_ } + , dstQueueFamilyIndex{ dstQueueFamilyIndex_ } + , image{ image_ } + , subresourceRange{ subresourceRange_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageMemoryBarrier( ImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageMemoryBarrier( VkImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT : ImageMemoryBarrier( *reinterpret_cast( &rhs ) ) {} + + ImageMemoryBarrier & operator=( ImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageMemoryBarrier & operator=( VkImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT + { + oldLayout = oldLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT + { + newLayout = newLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + srcQueueFamilyIndex = srcQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + dstQueueFamilyIndex = dstQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & + setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT + { + subresourceRange = subresourceRange_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageMemoryBarrier &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageMemoryBarrier const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageMemoryBarrier *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcAccessMask, dstAccessMask, oldLayout, newLayout, srcQueueFamilyIndex, dstQueueFamilyIndex, image, subresourceRange ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageMemoryBarrier const & ) const = default; +#else + bool operator==( ImageMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) && + ( oldLayout == rhs.oldLayout ) && ( newLayout == rhs.newLayout ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && + ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( image == rhs.image ) && ( subresourceRange == rhs.subresourceRange ); +# endif + } + + bool operator!=( ImageMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryBarrier; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; + VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t srcQueueFamilyIndex = {}; + uint32_t dstQueueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; + }; + + template <> + struct CppType + { + using Type = ImageMemoryBarrier; + }; + + // wrapper struct for struct VkImageMemoryRequirementsInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageMemoryRequirementsInfo2.html + struct ImageMemoryRequirementsInfo2 + { + using NativeType = VkImageMemoryRequirementsInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryRequirementsInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Image image_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageMemoryRequirementsInfo2( ImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageMemoryRequirementsInfo2( VkImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageMemoryRequirementsInfo2( *reinterpret_cast( &rhs ) ) + { + } + + ImageMemoryRequirementsInfo2 & operator=( ImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageMemoryRequirementsInfo2 & operator=( VkImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageMemoryRequirementsInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageMemoryRequirementsInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageMemoryRequirementsInfo2 const & ) const = default; +#else + bool operator==( ImageMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ); +# endif + } + + bool operator!=( ImageMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryRequirementsInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + }; + + template <> + struct CppType + { + using Type = ImageMemoryRequirementsInfo2; + }; + + using ImageMemoryRequirementsInfo2KHR = ImageMemoryRequirementsInfo2; + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkImagePipeSurfaceCreateInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImagePipeSurfaceCreateInfoFUCHSIA.html + struct ImagePipeSurfaceCreateInfoFUCHSIA + { + using NativeType = VkImagePipeSurfaceCreateInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImagepipeSurfaceCreateInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImagePipeSurfaceCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags_ = {}, + zx_handle_t imagePipeHandle_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , imagePipeHandle{ imagePipeHandle_ } + { + } + + VULKAN_HPP_CONSTEXPR ImagePipeSurfaceCreateInfoFUCHSIA( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImagePipeSurfaceCreateInfoFUCHSIA( VkImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImagePipeSurfaceCreateInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + ImagePipeSurfaceCreateInfoFUCHSIA & operator=( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImagePipeSurfaceCreateInfoFUCHSIA & operator=( VkImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setImagePipeHandle( zx_handle_t imagePipeHandle_ ) VULKAN_HPP_NOEXCEPT + { + imagePipeHandle = imagePipeHandle_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImagePipeSurfaceCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImagePipeSurfaceCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImagePipeSurfaceCreateInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImagePipeSurfaceCreateInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, imagePipeHandle ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &imagePipeHandle, &rhs.imagePipeHandle, sizeof( zx_handle_t ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( memcmp( &imagePipeHandle, &rhs.imagePipeHandle, sizeof( zx_handle_t ) ) == 0 ); + } + + bool operator!=( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImagepipeSurfaceCreateInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags = {}; + zx_handle_t imagePipeHandle = {}; + }; + + template <> + struct CppType + { + using Type = ImagePipeSurfaceCreateInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkImagePlaneMemoryRequirementsInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImagePlaneMemoryRequirementsInfo.html + struct ImagePlaneMemoryRequirementsInfo + { + using NativeType = VkImagePlaneMemoryRequirementsInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImagePlaneMemoryRequirementsInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ImagePlaneMemoryRequirementsInfo( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , planeAspect{ planeAspect_ } + { + } + + VULKAN_HPP_CONSTEXPR ImagePlaneMemoryRequirementsInfo( ImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImagePlaneMemoryRequirementsInfo( VkImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ImagePlaneMemoryRequirementsInfo( *reinterpret_cast( &rhs ) ) + { + } + + ImagePlaneMemoryRequirementsInfo & operator=( ImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImagePlaneMemoryRequirementsInfo & operator=( VkImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo & setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT + { + planeAspect = planeAspect_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImagePlaneMemoryRequirementsInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImagePlaneMemoryRequirementsInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImagePlaneMemoryRequirementsInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImagePlaneMemoryRequirementsInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, planeAspect ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImagePlaneMemoryRequirementsInfo const & ) const = default; +#else + bool operator==( ImagePlaneMemoryRequirementsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( planeAspect == rhs.planeAspect ); +# endif + } + + bool operator!=( ImagePlaneMemoryRequirementsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImagePlaneMemoryRequirementsInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; + }; + + template <> + struct CppType + { + using Type = ImagePlaneMemoryRequirementsInfo; + }; + + using ImagePlaneMemoryRequirementsInfoKHR = ImagePlaneMemoryRequirementsInfo; + + // wrapper struct for struct VkImageResolve, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageResolve.html + struct ImageResolve + { + using NativeType = VkImageResolve; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageResolve( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT + : srcSubresource{ srcSubresource_ } + , srcOffset{ srcOffset_ } + , dstSubresource{ dstSubresource_ } + , dstOffset{ dstOffset_ } + , extent{ extent_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageResolve( ImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageResolve( VkImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT : ImageResolve( *reinterpret_cast( &rhs ) ) {} + + ImageResolve & operator=( ImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageResolve & operator=( VkImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageResolve & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT + { + srcSubresource = srcSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcOffset = srcOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT + { + dstSubresource = dstSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstOffset = dstOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageResolve const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageResolve &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageResolve const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageResolve *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageResolve const & ) const = default; +#else + bool operator==( ImageResolve const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && ( dstSubresource == rhs.dstSubresource ) && + ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); +# endif + } + + bool operator!=( ImageResolve const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D extent = {}; + }; + + // wrapper struct for struct VkImageResolve2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageResolve2.html + struct ImageResolve2 + { + using NativeType = VkImageResolve2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageResolve2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageResolve2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {}, + VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D extent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcSubresource{ srcSubresource_ } + , srcOffset{ srcOffset_ } + , dstSubresource{ dstSubresource_ } + , dstOffset{ dstOffset_ } + , extent{ extent_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageResolve2( ImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageResolve2( VkImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT : ImageResolve2( *reinterpret_cast( &rhs ) ) {} + + ImageResolve2 & operator=( ImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageResolve2 & operator=( VkImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT + { + srcSubresource = srcSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcOffset = srcOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT + { + dstSubresource = dstSubresource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstOffset = dstOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageResolve2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageResolve2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageResolve2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageResolve2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcSubresource, srcOffset, dstSubresource, dstOffset, extent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageResolve2 const & ) const = default; +#else + bool operator==( ImageResolve2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) && + ( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent ); +# endif + } + + bool operator!=( ImageResolve2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageResolve2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {}; + VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {}; + VULKAN_HPP_NAMESPACE::Extent3D extent = {}; + }; + + template <> + struct CppType + { + using Type = ImageResolve2; + }; + + using ImageResolve2KHR = ImageResolve2; + + // wrapper struct for struct VkImageSparseMemoryRequirementsInfo2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageSparseMemoryRequirementsInfo2.html + struct ImageSparseMemoryRequirementsInfo2 + { + using NativeType = VkImageSparseMemoryRequirementsInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSparseMemoryRequirementsInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageSparseMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Image image_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageSparseMemoryRequirementsInfo2( ImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageSparseMemoryRequirementsInfo2( VkImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageSparseMemoryRequirementsInfo2( *reinterpret_cast( &rhs ) ) + { + } + + ImageSparseMemoryRequirementsInfo2 & operator=( ImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageSparseMemoryRequirementsInfo2 & operator=( VkImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageSparseMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSparseMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSparseMemoryRequirementsInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageSparseMemoryRequirementsInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageSparseMemoryRequirementsInfo2 const & ) const = default; +#else + bool operator==( ImageSparseMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ); +# endif + } + + bool operator!=( ImageSparseMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageSparseMemoryRequirementsInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + }; + + template <> + struct CppType + { + using Type = ImageSparseMemoryRequirementsInfo2; + }; + + using ImageSparseMemoryRequirementsInfo2KHR = ImageSparseMemoryRequirementsInfo2; + + // wrapper struct for struct VkImageStencilUsageCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageStencilUsageCreateInfo.html + struct ImageStencilUsageCreateInfo + { + using NativeType = VkImageStencilUsageCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageStencilUsageCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageStencilUsageCreateInfo( VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stencilUsage{ stencilUsage_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageStencilUsageCreateInfo( ImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageStencilUsageCreateInfo( VkImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageStencilUsageCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ImageStencilUsageCreateInfo & operator=( ImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageStencilUsageCreateInfo & operator=( VkImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo & setStencilUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage_ ) VULKAN_HPP_NOEXCEPT + { + stencilUsage = stencilUsage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageStencilUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageStencilUsageCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageStencilUsageCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageStencilUsageCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stencilUsage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageStencilUsageCreateInfo const & ) const = default; +#else + bool operator==( ImageStencilUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilUsage == rhs.stencilUsage ); +# endif + } + + bool operator!=( ImageStencilUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageStencilUsageCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage = {}; + }; + + template <> + struct CppType + { + using Type = ImageStencilUsageCreateInfo; + }; + + using ImageStencilUsageCreateInfoEXT = ImageStencilUsageCreateInfo; + + // wrapper struct for struct VkImageSwapchainCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageSwapchainCreateInfoKHR.html + struct ImageSwapchainCreateInfoKHR + { + using NativeType = VkImageSwapchainCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSwapchainCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageSwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchain{ swapchain_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageSwapchainCreateInfoKHR( ImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageSwapchainCreateInfoKHR( VkImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageSwapchainCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImageSwapchainCreateInfoKHR & operator=( ImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageSwapchainCreateInfoKHR & operator=( VkImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT + { + swapchain = swapchain_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageSwapchainCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageSwapchainCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchain ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageSwapchainCreateInfoKHR const & ) const = default; +#else + bool operator==( ImageSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ); +# endif + } + + bool operator!=( ImageSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageSwapchainCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; + }; + + template <> + struct CppType + { + using Type = ImageSwapchainCreateInfoKHR; + }; + + // wrapper struct for struct VkImageViewASTCDecodeModeEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewASTCDecodeModeEXT.html + struct ImageViewASTCDecodeModeEXT + { + using NativeType = VkImageViewASTCDecodeModeEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAstcDecodeModeEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewASTCDecodeModeEXT( VULKAN_HPP_NAMESPACE::Format decodeMode_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , decodeMode{ decodeMode_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewASTCDecodeModeEXT( ImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewASTCDecodeModeEXT( VkImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewASTCDecodeModeEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewASTCDecodeModeEXT & operator=( ImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewASTCDecodeModeEXT & operator=( VkImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT & setDecodeMode( VULKAN_HPP_NAMESPACE::Format decodeMode_ ) VULKAN_HPP_NOEXCEPT + { + decodeMode = decodeMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewASTCDecodeModeEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewASTCDecodeModeEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewASTCDecodeModeEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewASTCDecodeModeEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, decodeMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewASTCDecodeModeEXT const & ) const = default; +#else + bool operator==( ImageViewASTCDecodeModeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( decodeMode == rhs.decodeMode ); +# endif + } + + bool operator!=( ImageViewASTCDecodeModeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewAstcDecodeModeEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format decodeMode = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = ImageViewASTCDecodeModeEXT; + }; + + // wrapper struct for struct VkImageViewAddressPropertiesNVX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewAddressPropertiesNVX.html + struct ImageViewAddressPropertiesNVX + { + using NativeType = VkImageViewAddressPropertiesNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAddressPropertiesNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewAddressPropertiesNVX( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceAddress{ deviceAddress_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewAddressPropertiesNVX( ImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewAddressPropertiesNVX( VkImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewAddressPropertiesNVX( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewAddressPropertiesNVX & operator=( ImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewAddressPropertiesNVX & operator=( VkImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkImageViewAddressPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewAddressPropertiesNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewAddressPropertiesNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewAddressPropertiesNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceAddress, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewAddressPropertiesNVX const & ) const = default; +#else + bool operator==( ImageViewAddressPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress ) && ( size == rhs.size ); +# endif + } + + bool operator!=( ImageViewAddressPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewAddressPropertiesNVX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewAddressPropertiesNVX; + }; + + // wrapper struct for struct VkImageViewCaptureDescriptorDataInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewCaptureDescriptorDataInfoEXT.html + struct ImageViewCaptureDescriptorDataInfoEXT + { + using NativeType = VkImageViewCaptureDescriptorDataInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewCaptureDescriptorDataInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewCaptureDescriptorDataInfoEXT( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageView{ imageView_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewCaptureDescriptorDataInfoEXT( ImageViewCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewCaptureDescriptorDataInfoEXT( VkImageViewCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewCaptureDescriptorDataInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewCaptureDescriptorDataInfoEXT & operator=( ImageViewCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewCaptureDescriptorDataInfoEXT & operator=( VkImageViewCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewCaptureDescriptorDataInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCaptureDescriptorDataInfoEXT & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewCaptureDescriptorDataInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewCaptureDescriptorDataInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewCaptureDescriptorDataInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewCaptureDescriptorDataInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageView ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewCaptureDescriptorDataInfoEXT const & ) const = default; +#else + bool operator==( ImageViewCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ); +# endif + } + + bool operator!=( ImageViewCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewCaptureDescriptorDataInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewCaptureDescriptorDataInfoEXT; + }; + + // wrapper struct for struct VkImageViewCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewCreateInfo.html + struct ImageViewCreateInfo + { + using NativeType = VkImageViewCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewCreateInfo( VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::ImageViewType viewType_ = VULKAN_HPP_NAMESPACE::ImageViewType::e1D, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {}, + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , image{ image_ } + , viewType{ viewType_ } + , format{ format_ } + , components{ components_ } + , subresourceRange{ subresourceRange_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewCreateInfo( ImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewCreateInfo( VkImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ImageViewCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewCreateInfo & operator=( ImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewCreateInfo & operator=( VkImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setViewType( VULKAN_HPP_NAMESPACE::ImageViewType viewType_ ) VULKAN_HPP_NOEXCEPT + { + viewType = viewType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT + { + components = components_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & + setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT + { + subresourceRange = subresourceRange_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, image, viewType, format, components, subresourceRange ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewCreateInfo const & ) const = default; +#else + bool operator==( ImageViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( image == rhs.image ) && ( viewType == rhs.viewType ) && + ( format == rhs.format ) && ( components == rhs.components ) && ( subresourceRange == rhs.subresourceRange ); +# endif + } + + bool operator!=( ImageViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::ImageViewType viewType = VULKAN_HPP_NAMESPACE::ImageViewType::e1D; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::ComponentMapping components = {}; + VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewCreateInfo; + }; + + // wrapper struct for struct VkImageViewHandleInfoNVX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewHandleInfoNVX.html + struct ImageViewHandleInfoNVX + { + using NativeType = VkImageViewHandleInfoNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewHandleInfoNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewHandleInfoNVX( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, + VULKAN_HPP_NAMESPACE::Sampler sampler_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageView{ imageView_ } + , descriptorType{ descriptorType_ } + , sampler{ sampler_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewHandleInfoNVX( ImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewHandleInfoNVX( VkImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewHandleInfoNVX( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewHandleInfoNVX & operator=( ImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewHandleInfoNVX & operator=( VkImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT + { + descriptorType = descriptorType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT + { + sampler = sampler_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewHandleInfoNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewHandleInfoNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewHandleInfoNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewHandleInfoNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageView, descriptorType, sampler ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewHandleInfoNVX const & ) const = default; +#else + bool operator==( ImageViewHandleInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) && ( descriptorType == rhs.descriptorType ) && + ( sampler == rhs.sampler ); +# endif + } + + bool operator!=( ImageViewHandleInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewHandleInfoNVX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; + VULKAN_HPP_NAMESPACE::Sampler sampler = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewHandleInfoNVX; + }; + + // wrapper struct for struct VkImageViewMinLodCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewMinLodCreateInfoEXT.html + struct ImageViewMinLodCreateInfoEXT + { + using NativeType = VkImageViewMinLodCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewMinLodCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewMinLodCreateInfoEXT( float minLod_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minLod{ minLod_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewMinLodCreateInfoEXT( ImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewMinLodCreateInfoEXT( VkImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewMinLodCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewMinLodCreateInfoEXT & operator=( ImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewMinLodCreateInfoEXT & operator=( VkImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewMinLodCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewMinLodCreateInfoEXT & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT + { + minLod = minLod_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewMinLodCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewMinLodCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewMinLodCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewMinLodCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minLod ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewMinLodCreateInfoEXT const & ) const = default; +#else + bool operator==( ImageViewMinLodCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minLod == rhs.minLod ); +# endif + } + + bool operator!=( ImageViewMinLodCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewMinLodCreateInfoEXT; + const void * pNext = {}; + float minLod = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewMinLodCreateInfoEXT; + }; + + // wrapper struct for struct VkImageViewSampleWeightCreateInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewSampleWeightCreateInfoQCOM.html + struct ImageViewSampleWeightCreateInfoQCOM + { + using NativeType = VkImageViewSampleWeightCreateInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewSampleWeightCreateInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewSampleWeightCreateInfoQCOM( VULKAN_HPP_NAMESPACE::Offset2D filterCenter_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D filterSize_ = {}, + uint32_t numPhases_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , filterCenter{ filterCenter_ } + , filterSize{ filterSize_ } + , numPhases{ numPhases_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewSampleWeightCreateInfoQCOM( ImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewSampleWeightCreateInfoQCOM( VkImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewSampleWeightCreateInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewSampleWeightCreateInfoQCOM & operator=( ImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewSampleWeightCreateInfoQCOM & operator=( VkImageViewSampleWeightCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setFilterCenter( VULKAN_HPP_NAMESPACE::Offset2D const & filterCenter_ ) VULKAN_HPP_NOEXCEPT + { + filterCenter = filterCenter_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setFilterSize( VULKAN_HPP_NAMESPACE::Extent2D const & filterSize_ ) VULKAN_HPP_NOEXCEPT + { + filterSize = filterSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewSampleWeightCreateInfoQCOM & setNumPhases( uint32_t numPhases_ ) VULKAN_HPP_NOEXCEPT + { + numPhases = numPhases_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewSampleWeightCreateInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewSampleWeightCreateInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewSampleWeightCreateInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewSampleWeightCreateInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, filterCenter, filterSize, numPhases ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewSampleWeightCreateInfoQCOM const & ) const = default; +#else + bool operator==( ImageViewSampleWeightCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterCenter == rhs.filterCenter ) && ( filterSize == rhs.filterSize ) && + ( numPhases == rhs.numPhases ); +# endif + } + + bool operator!=( ImageViewSampleWeightCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewSampleWeightCreateInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Offset2D filterCenter = {}; + VULKAN_HPP_NAMESPACE::Extent2D filterSize = {}; + uint32_t numPhases = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewSampleWeightCreateInfoQCOM; + }; + + // wrapper struct for struct VkImageViewSlicedCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewSlicedCreateInfoEXT.html + struct ImageViewSlicedCreateInfoEXT + { + using NativeType = VkImageViewSlicedCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewSlicedCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ImageViewSlicedCreateInfoEXT( uint32_t sliceOffset_ = {}, uint32_t sliceCount_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sliceOffset{ sliceOffset_ } + , sliceCount{ sliceCount_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewSlicedCreateInfoEXT( ImageViewSlicedCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewSlicedCreateInfoEXT( VkImageViewSlicedCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewSlicedCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewSlicedCreateInfoEXT & operator=( ImageViewSlicedCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewSlicedCreateInfoEXT & operator=( VkImageViewSlicedCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewSlicedCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewSlicedCreateInfoEXT & setSliceOffset( uint32_t sliceOffset_ ) VULKAN_HPP_NOEXCEPT + { + sliceOffset = sliceOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewSlicedCreateInfoEXT & setSliceCount( uint32_t sliceCount_ ) VULKAN_HPP_NOEXCEPT + { + sliceCount = sliceCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewSlicedCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewSlicedCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewSlicedCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewSlicedCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sliceOffset, sliceCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewSlicedCreateInfoEXT const & ) const = default; +#else + bool operator==( ImageViewSlicedCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sliceOffset == rhs.sliceOffset ) && ( sliceCount == rhs.sliceCount ); +# endif + } + + bool operator!=( ImageViewSlicedCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewSlicedCreateInfoEXT; + const void * pNext = {}; + uint32_t sliceOffset = {}; + uint32_t sliceCount = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewSlicedCreateInfoEXT; + }; + + // wrapper struct for struct VkImageViewUsageCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImageViewUsageCreateInfo.html + struct ImageViewUsageCreateInfo + { + using NativeType = VkImageViewUsageCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewUsageCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImageViewUsageCreateInfo( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , usage{ usage_ } + { + } + + VULKAN_HPP_CONSTEXPR ImageViewUsageCreateInfo( ImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImageViewUsageCreateInfo( VkImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ImageViewUsageCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + ImageViewUsageCreateInfo & operator=( ImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImageViewUsageCreateInfo & operator=( VkImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImageViewUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewUsageCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImageViewUsageCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImageViewUsageCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, usage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImageViewUsageCreateInfo const & ) const = default; +#else + bool operator==( ImageViewUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( usage == rhs.usage ); +# endif + } + + bool operator!=( ImageViewUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewUsageCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; + }; + + template <> + struct CppType + { + using Type = ImageViewUsageCreateInfo; + }; + + using ImageViewUsageCreateInfoKHR = ImageViewUsageCreateInfo; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkImportAndroidHardwareBufferInfoANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportAndroidHardwareBufferInfoANDROID.html + struct ImportAndroidHardwareBufferInfoANDROID + { + using NativeType = VkImportAndroidHardwareBufferInfoANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportAndroidHardwareBufferInfoANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportAndroidHardwareBufferInfoANDROID( struct AHardwareBuffer * buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportAndroidHardwareBufferInfoANDROID( ImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportAndroidHardwareBufferInfoANDROID( VkImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportAndroidHardwareBufferInfoANDROID( *reinterpret_cast( &rhs ) ) + { + } + + ImportAndroidHardwareBufferInfoANDROID & operator=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportAndroidHardwareBufferInfoANDROID & operator=( VkImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID & setBuffer( struct AHardwareBuffer * buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportAndroidHardwareBufferInfoANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportAndroidHardwareBufferInfoANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportAndroidHardwareBufferInfoANDROID const & ) const = default; +# else + bool operator==( ImportAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportAndroidHardwareBufferInfoANDROID; + const void * pNext = {}; + struct AHardwareBuffer * buffer = {}; + }; + + template <> + struct CppType + { + using Type = ImportAndroidHardwareBufferInfoANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + // wrapper struct for struct VkImportFenceFdInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportFenceFdInfoKHR.html + struct ImportFenceFdInfoKHR + { + using NativeType = VkImportFenceFdInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceFdInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportFenceFdInfoKHR( + VULKAN_HPP_NAMESPACE::Fence fence_ = {}, + VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, + int fd_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fence{ fence_ } + , flags{ flags_ } + , handleType{ handleType_ } + , fd{ fd_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportFenceFdInfoKHR( ImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportFenceFdInfoKHR( VkImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportFenceFdInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImportFenceFdInfoKHR & operator=( ImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportFenceFdInfoKHR & operator=( VkImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT + { + fence = fence_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT + { + fd = fd_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportFenceFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportFenceFdInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportFenceFdInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportFenceFdInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fence, flags, handleType, fd ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportFenceFdInfoKHR const & ) const = default; +#else + bool operator==( ImportFenceFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && + ( fd == rhs.fd ); +# endif + } + + bool operator!=( ImportFenceFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportFenceFdInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Fence fence = {}; + VULKAN_HPP_NAMESPACE::FenceImportFlags flags = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; + int fd = {}; + }; + + template <> + struct CppType + { + using Type = ImportFenceFdInfoKHR; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkImportFenceWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportFenceWin32HandleInfoKHR.html + struct ImportFenceWin32HandleInfoKHR + { + using NativeType = VkImportFenceWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportFenceWin32HandleInfoKHR( + VULKAN_HPP_NAMESPACE::Fence fence_ = {}, + VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, + HANDLE handle_ = {}, + LPCWSTR name_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fence{ fence_ } + , flags{ flags_ } + , handleType{ handleType_ } + , handle{ handle_ } + , name{ name_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportFenceWin32HandleInfoKHR( ImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportFenceWin32HandleInfoKHR( VkImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportFenceWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImportFenceWin32HandleInfoKHR & operator=( ImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportFenceWin32HandleInfoKHR & operator=( VkImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT + { + fence = fence_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT + { + handle = handle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportFenceWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportFenceWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fence, flags, handleType, handle, name ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportFenceWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( ImportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && + ( handle == rhs.handle ) && ( name == rhs.name ); +# endif + } + + bool operator!=( ImportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportFenceWin32HandleInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Fence fence = {}; + VULKAN_HPP_NAMESPACE::FenceImportFlags flags = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; + HANDLE handle = {}; + LPCWSTR name = {}; + }; + + template <> + struct CppType + { + using Type = ImportFenceWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkImportMemoryBufferCollectionFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryBufferCollectionFUCHSIA.html + struct ImportMemoryBufferCollectionFUCHSIA + { + using NativeType = VkImportMemoryBufferCollectionFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryBufferCollectionFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {}, + uint32_t index_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , collection{ collection_ } + , index{ index_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryBufferCollectionFUCHSIA( ImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryBufferCollectionFUCHSIA( VkImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryBufferCollectionFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryBufferCollectionFUCHSIA & operator=( ImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryBufferCollectionFUCHSIA & operator=( VkImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT + { + collection = collection_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT + { + index = index_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryBufferCollectionFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryBufferCollectionFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryBufferCollectionFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryBufferCollectionFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, collection, index ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMemoryBufferCollectionFUCHSIA const & ) const = default; +# else + bool operator==( ImportMemoryBufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) && ( index == rhs.index ); +# endif + } + + bool operator!=( ImportMemoryBufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryBufferCollectionFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {}; + uint32_t index = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryBufferCollectionFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkImportMemoryFdInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryFdInfoKHR.html + struct ImportMemoryFdInfoKHR + { + using NativeType = VkImportMemoryFdInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryFdInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryFdInfoKHR( + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + int fd_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + , fd{ fd_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryFdInfoKHR( ImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryFdInfoKHR( VkImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryFdInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryFdInfoKHR & operator=( ImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryFdInfoKHR & operator=( VkImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT + { + fd = fd_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryFdInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryFdInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryFdInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType, fd ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMemoryFdInfoKHR const & ) const = default; +#else + bool operator==( ImportMemoryFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( fd == rhs.fd ); +# endif + } + + bool operator!=( ImportMemoryFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryFdInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + int fd = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryFdInfoKHR; + }; + + // wrapper struct for struct VkImportMemoryHostPointerInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryHostPointerInfoEXT.html + struct ImportMemoryHostPointerInfoEXT + { + using NativeType = VkImportMemoryHostPointerInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryHostPointerInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryHostPointerInfoEXT( + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + void * pHostPointer_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + , pHostPointer{ pHostPointer_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryHostPointerInfoEXT( ImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryHostPointerInfoEXT( VkImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryHostPointerInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryHostPointerInfoEXT & operator=( ImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryHostPointerInfoEXT & operator=( VkImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & setPHostPointer( void * pHostPointer_ ) VULKAN_HPP_NOEXCEPT + { + pHostPointer = pHostPointer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryHostPointerInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryHostPointerInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryHostPointerInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryHostPointerInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType, pHostPointer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMemoryHostPointerInfoEXT const & ) const = default; +#else + bool operator==( ImportMemoryHostPointerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( pHostPointer == rhs.pHostPointer ); +# endif + } + + bool operator!=( ImportMemoryHostPointerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryHostPointerInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + void * pHostPointer = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryHostPointerInfoEXT; + }; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkImportMemoryMetalHandleInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryMetalHandleInfoEXT.html + struct ImportMemoryMetalHandleInfoEXT + { + using NativeType = VkImportMemoryMetalHandleInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryMetalHandleInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryMetalHandleInfoEXT( + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + void * handle_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + , handle{ handle_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryMetalHandleInfoEXT( ImportMemoryMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryMetalHandleInfoEXT( VkImportMemoryMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryMetalHandleInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryMetalHandleInfoEXT & operator=( ImportMemoryMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryMetalHandleInfoEXT & operator=( VkImportMemoryMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryMetalHandleInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryMetalHandleInfoEXT & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryMetalHandleInfoEXT & setHandle( void * handle_ ) VULKAN_HPP_NOEXCEPT + { + handle = handle_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryMetalHandleInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryMetalHandleInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryMetalHandleInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryMetalHandleInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType, handle ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMemoryMetalHandleInfoEXT const & ) const = default; +# else + bool operator==( ImportMemoryMetalHandleInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( handle == rhs.handle ); +# endif + } + + bool operator!=( ImportMemoryMetalHandleInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryMetalHandleInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + void * handle = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryMetalHandleInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkImportMemoryWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryWin32HandleInfoKHR.html + struct ImportMemoryWin32HandleInfoKHR + { + using NativeType = VkImportMemoryWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoKHR( + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + HANDLE handle_ = {}, + LPCWSTR name_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + , handle{ handle_ } + , name{ name_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoKHR( ImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryWin32HandleInfoKHR( VkImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryWin32HandleInfoKHR & operator=( ImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryWin32HandleInfoKHR & operator=( VkImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT + { + handle = handle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType, handle, name ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMemoryWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( ImportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( handle == rhs.handle ) && ( name == rhs.name ); +# endif + } + + bool operator!=( ImportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryWin32HandleInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + HANDLE handle = {}; + LPCWSTR name = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkImportMemoryWin32HandleInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryWin32HandleInfoNV.html + struct ImportMemoryWin32HandleInfoNV + { + using NativeType = VkImportMemoryWin32HandleInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType_ = {}, + HANDLE handle_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + , handle{ handle_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryWin32HandleInfoNV( ImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryWin32HandleInfoNV( VkImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryWin32HandleInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryWin32HandleInfoNV & operator=( ImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryWin32HandleInfoNV & operator=( VkImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT + { + handle = handle_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryWin32HandleInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryWin32HandleInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType, handle ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMemoryWin32HandleInfoNV const & ) const = default; +# else + bool operator==( ImportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( handle == rhs.handle ); +# endif + } + + bool operator!=( ImportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryWin32HandleInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType = {}; + HANDLE handle = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryWin32HandleInfoNV; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkImportMemoryZirconHandleInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMemoryZirconHandleInfoFUCHSIA.html + struct ImportMemoryZirconHandleInfoFUCHSIA + { + using NativeType = VkImportMemoryZirconHandleInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryZirconHandleInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMemoryZirconHandleInfoFUCHSIA( + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + zx_handle_t handle_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + , handle{ handle_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMemoryZirconHandleInfoFUCHSIA( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMemoryZirconHandleInfoFUCHSIA( VkImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMemoryZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + ImportMemoryZirconHandleInfoFUCHSIA & operator=( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMemoryZirconHandleInfoFUCHSIA & operator=( VkImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & setHandle( zx_handle_t handle_ ) VULKAN_HPP_NOEXCEPT + { + handle = handle_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMemoryZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMemoryZirconHandleInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMemoryZirconHandleInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType, handle ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = handleType <=> rhs.handleType; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &handle, &rhs.handle, sizeof( zx_handle_t ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && + ( memcmp( &handle, &rhs.handle, sizeof( zx_handle_t ) ) == 0 ); + } + + bool operator!=( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryZirconHandleInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + zx_handle_t handle = {}; + }; + + template <> + struct CppType + { + using Type = ImportMemoryZirconHandleInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkImportMetalBufferInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMetalBufferInfoEXT.html + struct ImportMetalBufferInfoEXT + { + using NativeType = VkImportMetalBufferInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalBufferInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMetalBufferInfoEXT( MTLBuffer_id mtlBuffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mtlBuffer{ mtlBuffer_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMetalBufferInfoEXT( ImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMetalBufferInfoEXT( VkImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMetalBufferInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImportMetalBufferInfoEXT & operator=( ImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMetalBufferInfoEXT & operator=( VkImportMetalBufferInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMetalBufferInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMetalBufferInfoEXT & setMtlBuffer( MTLBuffer_id mtlBuffer_ ) VULKAN_HPP_NOEXCEPT + { + mtlBuffer = mtlBuffer_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMetalBufferInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalBufferInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalBufferInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMetalBufferInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mtlBuffer ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMetalBufferInfoEXT const & ) const = default; +# else + bool operator==( ImportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mtlBuffer == rhs.mtlBuffer ); +# endif + } + + bool operator!=( ImportMetalBufferInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalBufferInfoEXT; + const void * pNext = {}; + MTLBuffer_id mtlBuffer = {}; + }; + + template <> + struct CppType + { + using Type = ImportMetalBufferInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkImportMetalIOSurfaceInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMetalIOSurfaceInfoEXT.html + struct ImportMetalIOSurfaceInfoEXT + { + using NativeType = VkImportMetalIOSurfaceInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalIoSurfaceInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMetalIOSurfaceInfoEXT( IOSurfaceRef ioSurface_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , ioSurface{ ioSurface_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMetalIOSurfaceInfoEXT( ImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMetalIOSurfaceInfoEXT( VkImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMetalIOSurfaceInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImportMetalIOSurfaceInfoEXT & operator=( ImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMetalIOSurfaceInfoEXT & operator=( VkImportMetalIOSurfaceInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMetalIOSurfaceInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMetalIOSurfaceInfoEXT & setIoSurface( IOSurfaceRef ioSurface_ ) VULKAN_HPP_NOEXCEPT + { + ioSurface = ioSurface_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMetalIOSurfaceInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalIOSurfaceInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalIOSurfaceInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMetalIOSurfaceInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, ioSurface ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMetalIOSurfaceInfoEXT const & ) const = default; +# else + bool operator==( ImportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ioSurface == rhs.ioSurface ); +# endif + } + + bool operator!=( ImportMetalIOSurfaceInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalIoSurfaceInfoEXT; + const void * pNext = {}; + IOSurfaceRef ioSurface = {}; + }; + + template <> + struct CppType + { + using Type = ImportMetalIOSurfaceInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkImportMetalSharedEventInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMetalSharedEventInfoEXT.html + struct ImportMetalSharedEventInfoEXT + { + using NativeType = VkImportMetalSharedEventInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalSharedEventInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMetalSharedEventInfoEXT( MTLSharedEvent_id mtlSharedEvent_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mtlSharedEvent{ mtlSharedEvent_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMetalSharedEventInfoEXT( ImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMetalSharedEventInfoEXT( VkImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMetalSharedEventInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImportMetalSharedEventInfoEXT & operator=( ImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMetalSharedEventInfoEXT & operator=( VkImportMetalSharedEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMetalSharedEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMetalSharedEventInfoEXT & setMtlSharedEvent( MTLSharedEvent_id mtlSharedEvent_ ) VULKAN_HPP_NOEXCEPT + { + mtlSharedEvent = mtlSharedEvent_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMetalSharedEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalSharedEventInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalSharedEventInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMetalSharedEventInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mtlSharedEvent ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMetalSharedEventInfoEXT const & ) const = default; +# else + bool operator==( ImportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mtlSharedEvent == rhs.mtlSharedEvent ); +# endif + } + + bool operator!=( ImportMetalSharedEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalSharedEventInfoEXT; + const void * pNext = {}; + MTLSharedEvent_id mtlSharedEvent = {}; + }; + + template <> + struct CppType + { + using Type = ImportMetalSharedEventInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkImportMetalTextureInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportMetalTextureInfoEXT.html + struct ImportMetalTextureInfoEXT + { + using NativeType = VkImportMetalTextureInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMetalTextureInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportMetalTextureInfoEXT( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor, + MTLTexture_id mtlTexture_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , plane{ plane_ } + , mtlTexture{ mtlTexture_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportMetalTextureInfoEXT( ImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportMetalTextureInfoEXT( VkImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportMetalTextureInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ImportMetalTextureInfoEXT & operator=( ImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportMetalTextureInfoEXT & operator=( VkImportMetalTextureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportMetalTextureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMetalTextureInfoEXT & setPlane( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane_ ) VULKAN_HPP_NOEXCEPT + { + plane = plane_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportMetalTextureInfoEXT & setMtlTexture( MTLTexture_id mtlTexture_ ) VULKAN_HPP_NOEXCEPT + { + mtlTexture = mtlTexture_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportMetalTextureInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalTextureInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportMetalTextureInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportMetalTextureInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, plane, mtlTexture ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportMetalTextureInfoEXT const & ) const = default; +# else + bool operator==( ImportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( plane == rhs.plane ) && ( mtlTexture == rhs.mtlTexture ); +# endif + } + + bool operator!=( ImportMetalTextureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMetalTextureInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageAspectFlagBits plane = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor; + MTLTexture_id mtlTexture = {}; + }; + + template <> + struct CppType + { + using Type = ImportMetalTextureInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + // wrapper struct for struct VkImportScreenBufferInfoQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportScreenBufferInfoQNX.html + struct ImportScreenBufferInfoQNX + { + using NativeType = VkImportScreenBufferInfoQNX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportScreenBufferInfoQNX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportScreenBufferInfoQNX( struct _screen_buffer * buffer_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportScreenBufferInfoQNX( ImportScreenBufferInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportScreenBufferInfoQNX( VkImportScreenBufferInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportScreenBufferInfoQNX( *reinterpret_cast( &rhs ) ) + { + } + + ImportScreenBufferInfoQNX & operator=( ImportScreenBufferInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportScreenBufferInfoQNX & operator=( VkImportScreenBufferInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportScreenBufferInfoQNX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportScreenBufferInfoQNX & setBuffer( struct _screen_buffer * buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportScreenBufferInfoQNX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportScreenBufferInfoQNX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportScreenBufferInfoQNX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportScreenBufferInfoQNX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, buffer ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportScreenBufferInfoQNX const & ) const = default; +# else + bool operator==( ImportScreenBufferInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( ImportScreenBufferInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportScreenBufferInfoQNX; + const void * pNext = {}; + struct _screen_buffer * buffer = {}; + }; + + template <> + struct CppType + { + using Type = ImportScreenBufferInfoQNX; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + // wrapper struct for struct VkImportSemaphoreFdInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportSemaphoreFdInfoKHR.html + struct ImportSemaphoreFdInfoKHR + { + using NativeType = VkImportSemaphoreFdInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreFdInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportSemaphoreFdInfoKHR( + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + int fd_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , flags{ flags_ } + , handleType{ handleType_ } + , fd{ fd_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportSemaphoreFdInfoKHR( ImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportSemaphoreFdInfoKHR( VkImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportSemaphoreFdInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImportSemaphoreFdInfoKHR & operator=( ImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportSemaphoreFdInfoKHR & operator=( VkImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT + { + fd = fd_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportSemaphoreFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportSemaphoreFdInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportSemaphoreFdInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportSemaphoreFdInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, flags, handleType, fd ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportSemaphoreFdInfoKHR const & ) const = default; +#else + bool operator==( ImportSemaphoreFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && + ( fd == rhs.fd ); +# endif + } + + bool operator!=( ImportSemaphoreFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreFdInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + int fd = {}; + }; + + template <> + struct CppType + { + using Type = ImportSemaphoreFdInfoKHR; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkImportSemaphoreWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportSemaphoreWin32HandleInfoKHR.html + struct ImportSemaphoreWin32HandleInfoKHR + { + using NativeType = VkImportSemaphoreWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportSemaphoreWin32HandleInfoKHR( + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + HANDLE handle_ = {}, + LPCWSTR name_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , flags{ flags_ } + , handleType{ handleType_ } + , handle{ handle_ } + , name{ name_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportSemaphoreWin32HandleInfoKHR( ImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportSemaphoreWin32HandleInfoKHR( VkImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportSemaphoreWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ImportSemaphoreWin32HandleInfoKHR & operator=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportSemaphoreWin32HandleInfoKHR & operator=( VkImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT + { + handle = handle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportSemaphoreWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportSemaphoreWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, flags, handleType, handle, name ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ImportSemaphoreWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( ImportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && + ( handle == rhs.handle ) && ( name == rhs.name ); +# endif + } + + bool operator!=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreWin32HandleInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + HANDLE handle = {}; + LPCWSTR name = {}; + }; + + template <> + struct CppType + { + using Type = ImportSemaphoreWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkImportSemaphoreZirconHandleInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkImportSemaphoreZirconHandleInfoFUCHSIA.html + struct ImportSemaphoreZirconHandleInfoFUCHSIA + { + using NativeType = VkImportSemaphoreZirconHandleInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ImportSemaphoreZirconHandleInfoFUCHSIA( + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + zx_handle_t zirconHandle_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , flags{ flags_ } + , handleType{ handleType_ } + , zirconHandle{ zirconHandle_ } + { + } + + VULKAN_HPP_CONSTEXPR ImportSemaphoreZirconHandleInfoFUCHSIA( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ImportSemaphoreZirconHandleInfoFUCHSIA( VkImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : ImportSemaphoreZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + ImportSemaphoreZirconHandleInfoFUCHSIA & operator=( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ImportSemaphoreZirconHandleInfoFUCHSIA & operator=( VkImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setZirconHandle( zx_handle_t zirconHandle_ ) VULKAN_HPP_NOEXCEPT + { + zirconHandle = zirconHandle_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkImportSemaphoreZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportSemaphoreZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkImportSemaphoreZirconHandleInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkImportSemaphoreZirconHandleInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, flags, handleType, zirconHandle ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = semaphore <=> rhs.semaphore; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = handleType <=> rhs.handleType; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &zirconHandle, &rhs.zirconHandle, sizeof( zx_handle_t ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( flags == rhs.flags ) && ( handleType == rhs.handleType ) && + ( memcmp( &zirconHandle, &rhs.zirconHandle, sizeof( zx_handle_t ) ) == 0 ); + } + + bool operator!=( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + zx_handle_t zirconHandle = {}; + }; + + template <> + struct CppType + { + using Type = ImportSemaphoreZirconHandleInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkIndirectCommandsExecutionSetTokenEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsExecutionSetTokenEXT.html + struct IndirectCommandsExecutionSetTokenEXT + { + using NativeType = VkIndirectCommandsExecutionSetTokenEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectCommandsExecutionSetTokenEXT( + VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT type_ = VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT::ePipelines, + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_ = {} ) VULKAN_HPP_NOEXCEPT + : type{ type_ } + , shaderStages{ shaderStages_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsExecutionSetTokenEXT( IndirectCommandsExecutionSetTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsExecutionSetTokenEXT( VkIndirectCommandsExecutionSetTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsExecutionSetTokenEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectCommandsExecutionSetTokenEXT & operator=( IndirectCommandsExecutionSetTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsExecutionSetTokenEXT & operator=( VkIndirectCommandsExecutionSetTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsExecutionSetTokenEXT & setType( VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsExecutionSetTokenEXT & setShaderStages( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_ ) VULKAN_HPP_NOEXCEPT + { + shaderStages = shaderStages_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsExecutionSetTokenEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsExecutionSetTokenEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsExecutionSetTokenEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsExecutionSetTokenEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( type, shaderStages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsExecutionSetTokenEXT const & ) const = default; +#else + bool operator==( IndirectCommandsExecutionSetTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( type == rhs.type ) && ( shaderStages == rhs.shaderStages ); +# endif + } + + bool operator!=( IndirectCommandsExecutionSetTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT type = VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT::ePipelines; + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages = {}; + }; + + // wrapper struct for struct VkIndirectCommandsIndexBufferTokenEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsIndexBufferTokenEXT.html + struct IndirectCommandsIndexBufferTokenEXT + { + using NativeType = VkIndirectCommandsIndexBufferTokenEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + IndirectCommandsIndexBufferTokenEXT( VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagBitsEXT mode_ = + VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagBitsEXT::eVulkanIndexBuffer ) VULKAN_HPP_NOEXCEPT + : mode{ mode_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsIndexBufferTokenEXT( IndirectCommandsIndexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsIndexBufferTokenEXT( VkIndirectCommandsIndexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsIndexBufferTokenEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectCommandsIndexBufferTokenEXT & operator=( IndirectCommandsIndexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsIndexBufferTokenEXT & operator=( VkIndirectCommandsIndexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsIndexBufferTokenEXT & + setMode( VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagBitsEXT mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsIndexBufferTokenEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsIndexBufferTokenEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsIndexBufferTokenEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsIndexBufferTokenEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( mode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsIndexBufferTokenEXT const & ) const = default; +#else + bool operator==( IndirectCommandsIndexBufferTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( mode == rhs.mode ); +# endif + } + + bool operator!=( IndirectCommandsIndexBufferTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagBitsEXT mode = VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagBitsEXT::eVulkanIndexBuffer; + }; + + // wrapper struct for struct VkPushConstantRange, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPushConstantRange.html + struct PushConstantRange + { + using NativeType = VkPushConstantRange; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PushConstantRange( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, uint32_t offset_ = {}, uint32_t size_ = {} ) VULKAN_HPP_NOEXCEPT + : stageFlags{ stageFlags_ } + , offset{ offset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR PushConstantRange( PushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PushConstantRange( VkPushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT : PushConstantRange( *reinterpret_cast( &rhs ) ) {} + + PushConstantRange & operator=( PushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PushConstantRange & operator=( VkPushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPushConstantRange const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushConstantRange &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushConstantRange const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPushConstantRange *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( stageFlags, offset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PushConstantRange const & ) const = default; +#else + bool operator==( PushConstantRange const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( stageFlags == rhs.stageFlags ) && ( offset == rhs.offset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( PushConstantRange const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + uint32_t offset = {}; + uint32_t size = {}; + }; + + // wrapper struct for struct VkIndirectCommandsPushConstantTokenEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsPushConstantTokenEXT.html + struct IndirectCommandsPushConstantTokenEXT + { + using NativeType = VkIndirectCommandsPushConstantTokenEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectCommandsPushConstantTokenEXT( VULKAN_HPP_NAMESPACE::PushConstantRange updateRange_ = {} ) VULKAN_HPP_NOEXCEPT + : updateRange{ updateRange_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsPushConstantTokenEXT( IndirectCommandsPushConstantTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsPushConstantTokenEXT( VkIndirectCommandsPushConstantTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsPushConstantTokenEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectCommandsPushConstantTokenEXT & operator=( IndirectCommandsPushConstantTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsPushConstantTokenEXT & operator=( VkIndirectCommandsPushConstantTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsPushConstantTokenEXT & + setUpdateRange( VULKAN_HPP_NAMESPACE::PushConstantRange const & updateRange_ ) VULKAN_HPP_NOEXCEPT + { + updateRange = updateRange_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsPushConstantTokenEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsPushConstantTokenEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsPushConstantTokenEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsPushConstantTokenEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( updateRange ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsPushConstantTokenEXT const & ) const = default; +#else + bool operator==( IndirectCommandsPushConstantTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( updateRange == rhs.updateRange ); +# endif + } + + bool operator!=( IndirectCommandsPushConstantTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::PushConstantRange updateRange = {}; + }; + + // wrapper struct for struct VkIndirectCommandsVertexBufferTokenEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsVertexBufferTokenEXT.html + struct IndirectCommandsVertexBufferTokenEXT + { + using NativeType = VkIndirectCommandsVertexBufferTokenEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectCommandsVertexBufferTokenEXT( uint32_t vertexBindingUnit_ = {} ) VULKAN_HPP_NOEXCEPT : vertexBindingUnit{ vertexBindingUnit_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsVertexBufferTokenEXT( IndirectCommandsVertexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsVertexBufferTokenEXT( VkIndirectCommandsVertexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsVertexBufferTokenEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectCommandsVertexBufferTokenEXT & operator=( IndirectCommandsVertexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsVertexBufferTokenEXT & operator=( VkIndirectCommandsVertexBufferTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsVertexBufferTokenEXT & setVertexBindingUnit( uint32_t vertexBindingUnit_ ) VULKAN_HPP_NOEXCEPT + { + vertexBindingUnit = vertexBindingUnit_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsVertexBufferTokenEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsVertexBufferTokenEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsVertexBufferTokenEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsVertexBufferTokenEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( vertexBindingUnit ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsVertexBufferTokenEXT const & ) const = default; +#else + bool operator==( IndirectCommandsVertexBufferTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( vertexBindingUnit == rhs.vertexBindingUnit ); +# endif + } + + bool operator!=( IndirectCommandsVertexBufferTokenEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t vertexBindingUnit = {}; + }; + + union IndirectCommandsTokenDataEXT + { + using NativeType = VkIndirectCommandsTokenDataEXT; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT( const VULKAN_HPP_NAMESPACE::IndirectCommandsPushConstantTokenEXT * pPushConstant_ = {} ) + : pPushConstant( pPushConstant_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT( const VULKAN_HPP_NAMESPACE::IndirectCommandsVertexBufferTokenEXT * pVertexBuffer_ ) + : pVertexBuffer( pVertexBuffer_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT( const VULKAN_HPP_NAMESPACE::IndirectCommandsIndexBufferTokenEXT * pIndexBuffer_ ) + : pIndexBuffer( pIndexBuffer_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT( const VULKAN_HPP_NAMESPACE::IndirectCommandsExecutionSetTokenEXT * pExecutionSet_ ) + : pExecutionSet( pExecutionSet_ ) + { + } +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT & + setPPushConstant( const VULKAN_HPP_NAMESPACE::IndirectCommandsPushConstantTokenEXT * pPushConstant_ ) VULKAN_HPP_NOEXCEPT + { + pPushConstant = pPushConstant_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT & + setPVertexBuffer( const VULKAN_HPP_NAMESPACE::IndirectCommandsVertexBufferTokenEXT * pVertexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + pVertexBuffer = pVertexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT & + setPIndexBuffer( const VULKAN_HPP_NAMESPACE::IndirectCommandsIndexBufferTokenEXT * pIndexBuffer_ ) VULKAN_HPP_NOEXCEPT + { + pIndexBuffer = pIndexBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsTokenDataEXT & + setPExecutionSet( const VULKAN_HPP_NAMESPACE::IndirectCommandsExecutionSetTokenEXT * pExecutionSet_ ) VULKAN_HPP_NOEXCEPT + { + pExecutionSet = pExecutionSet_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsTokenDataEXT const &() const + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsTokenDataEXT &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + const VULKAN_HPP_NAMESPACE::IndirectCommandsPushConstantTokenEXT * pPushConstant; + const VULKAN_HPP_NAMESPACE::IndirectCommandsVertexBufferTokenEXT * pVertexBuffer; + const VULKAN_HPP_NAMESPACE::IndirectCommandsIndexBufferTokenEXT * pIndexBuffer; + const VULKAN_HPP_NAMESPACE::IndirectCommandsExecutionSetTokenEXT * pExecutionSet; +#else + const VkIndirectCommandsPushConstantTokenEXT * pPushConstant; + const VkIndirectCommandsVertexBufferTokenEXT * pVertexBuffer; + const VkIndirectCommandsIndexBufferTokenEXT * pIndexBuffer; + const VkIndirectCommandsExecutionSetTokenEXT * pExecutionSet; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkIndirectCommandsLayoutTokenEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutTokenEXT.html + struct IndirectCommandsLayoutTokenEXT + { + using NativeType = VkIndirectCommandsLayoutTokenEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutTokenEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenEXT( + VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeEXT type_ = VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeEXT::eExecutionSet, + VULKAN_HPP_NAMESPACE::IndirectCommandsTokenDataEXT data_ = {}, + uint32_t offset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , data{ data_ } + , offset{ offset_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenEXT( IndirectCommandsLayoutTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsLayoutTokenEXT( VkIndirectCommandsLayoutTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsLayoutTokenEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectCommandsLayoutTokenEXT & operator=( IndirectCommandsLayoutTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsLayoutTokenEXT & operator=( VkIndirectCommandsLayoutTokenEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenEXT & setType( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeEXT type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenEXT & setData( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenDataEXT const & data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenEXT & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsLayoutTokenEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutTokenEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutTokenEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutTokenEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, data, offset ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectCommandsLayoutTokenEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeEXT type = VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeEXT::eExecutionSet; + VULKAN_HPP_NAMESPACE::IndirectCommandsTokenDataEXT data = {}; + uint32_t offset = {}; + }; + + template <> + struct CppType + { + using Type = IndirectCommandsLayoutTokenEXT; + }; + + // wrapper struct for struct VkIndirectCommandsLayoutCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutCreateInfoEXT.html + struct IndirectCommandsLayoutCreateInfoEXT + { + using NativeType = VkIndirectCommandsLayoutCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutCreateInfoEXT( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_ = {}, + uint32_t indirectStride_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ = {}, + uint32_t tokenCount_ = {}, + const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenEXT * pTokens_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , shaderStages{ shaderStages_ } + , indirectStride{ indirectStride_ } + , pipelineLayout{ pipelineLayout_ } + , tokenCount{ tokenCount_ } + , pTokens{ pTokens_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutCreateInfoEXT( IndirectCommandsLayoutCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsLayoutCreateInfoEXT( VkIndirectCommandsLayoutCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsLayoutCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutCreateInfoEXT( + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_, + uint32_t indirectStride_, + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tokens_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , shaderStages( shaderStages_ ) + , indirectStride( indirectStride_ ) + , pipelineLayout( pipelineLayout_ ) + , tokenCount( static_cast( tokens_.size() ) ) + , pTokens( tokens_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + IndirectCommandsLayoutCreateInfoEXT & operator=( IndirectCommandsLayoutCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsLayoutCreateInfoEXT & operator=( VkIndirectCommandsLayoutCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & + setFlags( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & setShaderStages( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages_ ) VULKAN_HPP_NOEXCEPT + { + shaderStages = shaderStages_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & setIndirectStride( uint32_t indirectStride_ ) VULKAN_HPP_NOEXCEPT + { + indirectStride = indirectStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & setPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ ) VULKAN_HPP_NOEXCEPT + { + pipelineLayout = pipelineLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & setTokenCount( uint32_t tokenCount_ ) VULKAN_HPP_NOEXCEPT + { + tokenCount = tokenCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoEXT & + setPTokens( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenEXT * pTokens_ ) VULKAN_HPP_NOEXCEPT + { + pTokens = pTokens_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutCreateInfoEXT & + setTokens( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tokens_ ) VULKAN_HPP_NOEXCEPT + { + tokenCount = static_cast( tokens_.size() ); + pTokens = tokens_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsLayoutCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, shaderStages, indirectStride, pipelineLayout, tokenCount, pTokens ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsLayoutCreateInfoEXT const & ) const = default; +#else + bool operator==( IndirectCommandsLayoutCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( shaderStages == rhs.shaderStages ) && + ( indirectStride == rhs.indirectStride ) && ( pipelineLayout == rhs.pipelineLayout ) && ( tokenCount == rhs.tokenCount ) && + ( pTokens == rhs.pTokens ); +# endif + } + + bool operator!=( IndirectCommandsLayoutCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectCommandsLayoutCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStages = {}; + uint32_t indirectStride = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout = {}; + uint32_t tokenCount = {}; + const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenEXT * pTokens = {}; + }; + + template <> + struct CppType + { + using Type = IndirectCommandsLayoutCreateInfoEXT; + }; + + // wrapper struct for struct VkIndirectCommandsLayoutTokenNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutTokenNV.html + struct IndirectCommandsLayoutTokenNV + { + using NativeType = VkIndirectCommandsLayoutTokenNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutTokenNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutTokenNV( + VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_ = VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV::eShaderGroup, + uint32_t stream_ = {}, + uint32_t offset_ = {}, + uint32_t vertexBindingUnit_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_ = {}, + uint32_t pushconstantOffset_ = {}, + uint32_t pushconstantSize_ = {}, + VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_ = {}, + uint32_t indexTypeCount_ = {}, + const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes_ = {}, + const uint32_t * pIndexTypeValues_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tokenType{ tokenType_ } + , stream{ stream_ } + , offset{ offset_ } + , vertexBindingUnit{ vertexBindingUnit_ } + , vertexDynamicStride{ vertexDynamicStride_ } + , pushconstantPipelineLayout{ pushconstantPipelineLayout_ } + , pushconstantShaderStageFlags{ pushconstantShaderStageFlags_ } + , pushconstantOffset{ pushconstantOffset_ } + , pushconstantSize{ pushconstantSize_ } + , indirectStateFlags{ indirectStateFlags_ } + , indexTypeCount{ indexTypeCount_ } + , pIndexTypes{ pIndexTypes_ } + , pIndexTypeValues{ pIndexTypeValues_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutTokenNV( IndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsLayoutTokenNV( VkIndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsLayoutTokenNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutTokenNV( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_, + uint32_t stream_, + uint32_t offset_, + uint32_t vertexBindingUnit_, + VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_, + VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_, + VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_, + uint32_t pushconstantOffset_, + uint32_t pushconstantSize_, + VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypes_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypeValues_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , tokenType( tokenType_ ) + , stream( stream_ ) + , offset( offset_ ) + , vertexBindingUnit( vertexBindingUnit_ ) + , vertexDynamicStride( vertexDynamicStride_ ) + , pushconstantPipelineLayout( pushconstantPipelineLayout_ ) + , pushconstantShaderStageFlags( pushconstantShaderStageFlags_ ) + , pushconstantOffset( pushconstantOffset_ ) + , pushconstantSize( pushconstantSize_ ) + , indirectStateFlags( indirectStateFlags_ ) + , indexTypeCount( static_cast( indexTypes_.size() ) ) + , pIndexTypes( indexTypes_.data() ) + , pIndexTypeValues( indexTypeValues_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( indexTypes_.size() == indexTypeValues_.size() ); +# else + if ( indexTypes_.size() != indexTypeValues_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::IndirectCommandsLayoutTokenNV::IndirectCommandsLayoutTokenNV: indexTypes_.size() != indexTypeValues_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + IndirectCommandsLayoutTokenNV & operator=( IndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsLayoutTokenNV & operator=( VkIndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setTokenType( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_ ) VULKAN_HPP_NOEXCEPT + { + tokenType = tokenType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setStream( uint32_t stream_ ) VULKAN_HPP_NOEXCEPT + { + stream = stream_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setVertexBindingUnit( uint32_t vertexBindingUnit_ ) VULKAN_HPP_NOEXCEPT + { + vertexBindingUnit = vertexBindingUnit_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setVertexDynamicStride( VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexDynamicStride = vertexDynamicStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & + setPushconstantPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_ ) VULKAN_HPP_NOEXCEPT + { + pushconstantPipelineLayout = pushconstantPipelineLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & + setPushconstantShaderStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_ ) VULKAN_HPP_NOEXCEPT + { + pushconstantShaderStageFlags = pushconstantShaderStageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPushconstantOffset( uint32_t pushconstantOffset_ ) VULKAN_HPP_NOEXCEPT + { + pushconstantOffset = pushconstantOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPushconstantSize( uint32_t pushconstantSize_ ) VULKAN_HPP_NOEXCEPT + { + pushconstantSize = pushconstantSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & + setIndirectStateFlags( VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_ ) VULKAN_HPP_NOEXCEPT + { + indirectStateFlags = indirectStateFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setIndexTypeCount( uint32_t indexTypeCount_ ) VULKAN_HPP_NOEXCEPT + { + indexTypeCount = indexTypeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPIndexTypes( const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes_ ) VULKAN_HPP_NOEXCEPT + { + pIndexTypes = pIndexTypes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutTokenNV & + setIndexTypes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypes_ ) VULKAN_HPP_NOEXCEPT + { + indexTypeCount = static_cast( indexTypes_.size() ); + pIndexTypes = indexTypes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPIndexTypeValues( const uint32_t * pIndexTypeValues_ ) VULKAN_HPP_NOEXCEPT + { + pIndexTypeValues = pIndexTypeValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutTokenNV & + setIndexTypeValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & indexTypeValues_ ) VULKAN_HPP_NOEXCEPT + { + indexTypeCount = static_cast( indexTypeValues_.size() ); + pIndexTypeValues = indexTypeValues_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsLayoutTokenNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutTokenNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutTokenNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutTokenNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + tokenType, + stream, + offset, + vertexBindingUnit, + vertexDynamicStride, + pushconstantPipelineLayout, + pushconstantShaderStageFlags, + pushconstantOffset, + pushconstantSize, + indirectStateFlags, + indexTypeCount, + pIndexTypes, + pIndexTypeValues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsLayoutTokenNV const & ) const = default; +#else + bool operator==( IndirectCommandsLayoutTokenNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tokenType == rhs.tokenType ) && ( stream == rhs.stream ) && ( offset == rhs.offset ) && + ( vertexBindingUnit == rhs.vertexBindingUnit ) && ( vertexDynamicStride == rhs.vertexDynamicStride ) && + ( pushconstantPipelineLayout == rhs.pushconstantPipelineLayout ) && ( pushconstantShaderStageFlags == rhs.pushconstantShaderStageFlags ) && + ( pushconstantOffset == rhs.pushconstantOffset ) && ( pushconstantSize == rhs.pushconstantSize ) && + ( indirectStateFlags == rhs.indirectStateFlags ) && ( indexTypeCount == rhs.indexTypeCount ) && ( pIndexTypes == rhs.pIndexTypes ) && + ( pIndexTypeValues == rhs.pIndexTypeValues ); +# endif + } + + bool operator!=( IndirectCommandsLayoutTokenNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectCommandsLayoutTokenNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType = VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV::eShaderGroup; + uint32_t stream = {}; + uint32_t offset = {}; + uint32_t vertexBindingUnit = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags = {}; + uint32_t pushconstantOffset = {}; + uint32_t pushconstantSize = {}; + VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags = {}; + uint32_t indexTypeCount = {}; + const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes = {}; + const uint32_t * pIndexTypeValues = {}; + }; + + template <> + struct CppType + { + using Type = IndirectCommandsLayoutTokenNV; + }; + + // wrapper struct for struct VkIndirectCommandsLayoutCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectCommandsLayoutCreateInfoNV.html + struct IndirectCommandsLayoutCreateInfoNV + { + using NativeType = VkIndirectCommandsLayoutCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + IndirectCommandsLayoutCreateInfoNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + uint32_t tokenCount_ = {}, + const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens_ = {}, + uint32_t streamCount_ = {}, + const uint32_t * pStreamStrides_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , tokenCount{ tokenCount_ } + , pTokens{ pTokens_ } + , streamCount{ streamCount_ } + , pStreamStrides{ pStreamStrides_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutCreateInfoNV( IndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectCommandsLayoutCreateInfoNV( VkIndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectCommandsLayoutCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutCreateInfoNV( + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tokens_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streamStrides_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , pipelineBindPoint( pipelineBindPoint_ ) + , tokenCount( static_cast( tokens_.size() ) ) + , pTokens( tokens_.data() ) + , streamCount( static_cast( streamStrides_.size() ) ) + , pStreamStrides( streamStrides_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + IndirectCommandsLayoutCreateInfoNV & operator=( IndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectCommandsLayoutCreateInfoNV & operator=( VkIndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & + setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setTokenCount( uint32_t tokenCount_ ) VULKAN_HPP_NOEXCEPT + { + tokenCount = tokenCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & + setPTokens( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens_ ) VULKAN_HPP_NOEXCEPT + { + pTokens = pTokens_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutCreateInfoNV & + setTokens( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tokens_ ) VULKAN_HPP_NOEXCEPT + { + tokenCount = static_cast( tokens_.size() ); + pTokens = tokens_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT + { + streamCount = streamCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setPStreamStrides( const uint32_t * pStreamStrides_ ) VULKAN_HPP_NOEXCEPT + { + pStreamStrides = pStreamStrides_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectCommandsLayoutCreateInfoNV & + setStreamStrides( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & streamStrides_ ) VULKAN_HPP_NOEXCEPT + { + streamCount = static_cast( streamStrides_.size() ); + pStreamStrides = streamStrides_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectCommandsLayoutCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectCommandsLayoutCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pipelineBindPoint, tokenCount, pTokens, streamCount, pStreamStrides ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectCommandsLayoutCreateInfoNV const & ) const = default; +#else + bool operator==( IndirectCommandsLayoutCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && + ( tokenCount == rhs.tokenCount ) && ( pTokens == rhs.pTokens ) && ( streamCount == rhs.streamCount ) && ( pStreamStrides == rhs.pStreamStrides ); +# endif + } + + bool operator!=( IndirectCommandsLayoutCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectCommandsLayoutCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + uint32_t tokenCount = {}; + const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens = {}; + uint32_t streamCount = {}; + const uint32_t * pStreamStrides = {}; + }; + + template <> + struct CppType + { + using Type = IndirectCommandsLayoutCreateInfoNV; + }; + + // wrapper struct for struct VkIndirectExecutionSetPipelineInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetPipelineInfoEXT.html + struct IndirectExecutionSetPipelineInfoEXT + { + using NativeType = VkIndirectExecutionSetPipelineInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectExecutionSetPipelineInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectExecutionSetPipelineInfoEXT( VULKAN_HPP_NAMESPACE::Pipeline initialPipeline_ = {}, + uint32_t maxPipelineCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , initialPipeline{ initialPipeline_ } + , maxPipelineCount{ maxPipelineCount_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectExecutionSetPipelineInfoEXT( IndirectExecutionSetPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectExecutionSetPipelineInfoEXT( VkIndirectExecutionSetPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectExecutionSetPipelineInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectExecutionSetPipelineInfoEXT & operator=( IndirectExecutionSetPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectExecutionSetPipelineInfoEXT & operator=( VkIndirectExecutionSetPipelineInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetPipelineInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetPipelineInfoEXT & setInitialPipeline( VULKAN_HPP_NAMESPACE::Pipeline initialPipeline_ ) VULKAN_HPP_NOEXCEPT + { + initialPipeline = initialPipeline_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetPipelineInfoEXT & setMaxPipelineCount( uint32_t maxPipelineCount_ ) VULKAN_HPP_NOEXCEPT + { + maxPipelineCount = maxPipelineCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectExecutionSetPipelineInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetPipelineInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetPipelineInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetPipelineInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, initialPipeline, maxPipelineCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectExecutionSetPipelineInfoEXT const & ) const = default; +#else + bool operator==( IndirectExecutionSetPipelineInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( initialPipeline == rhs.initialPipeline ) && ( maxPipelineCount == rhs.maxPipelineCount ); +# endif + } + + bool operator!=( IndirectExecutionSetPipelineInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectExecutionSetPipelineInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Pipeline initialPipeline = {}; + uint32_t maxPipelineCount = {}; + }; + + template <> + struct CppType + { + using Type = IndirectExecutionSetPipelineInfoEXT; + }; + + // wrapper struct for struct VkIndirectExecutionSetShaderLayoutInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetShaderLayoutInfoEXT.html + struct IndirectExecutionSetShaderLayoutInfoEXT + { + using NativeType = VkIndirectExecutionSetShaderLayoutInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectExecutionSetShaderLayoutInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectExecutionSetShaderLayoutInfoEXT( uint32_t setLayoutCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , setLayoutCount{ setLayoutCount_ } + , pSetLayouts{ pSetLayouts_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectExecutionSetShaderLayoutInfoEXT( IndirectExecutionSetShaderLayoutInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectExecutionSetShaderLayoutInfoEXT( VkIndirectExecutionSetShaderLayoutInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectExecutionSetShaderLayoutInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectExecutionSetShaderLayoutInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), setLayoutCount( static_cast( setLayouts_.size() ) ), pSetLayouts( setLayouts_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + IndirectExecutionSetShaderLayoutInfoEXT & operator=( IndirectExecutionSetShaderLayoutInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectExecutionSetShaderLayoutInfoEXT & operator=( VkIndirectExecutionSetShaderLayoutInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderLayoutInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderLayoutInfoEXT & setSetLayoutCount( uint32_t setLayoutCount_ ) VULKAN_HPP_NOEXCEPT + { + setLayoutCount = setLayoutCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderLayoutInfoEXT & + setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pSetLayouts = pSetLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectExecutionSetShaderLayoutInfoEXT & + setSetLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ ) VULKAN_HPP_NOEXCEPT + { + setLayoutCount = static_cast( setLayouts_.size() ); + pSetLayouts = setLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectExecutionSetShaderLayoutInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetShaderLayoutInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetShaderLayoutInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetShaderLayoutInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, setLayoutCount, pSetLayouts ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectExecutionSetShaderLayoutInfoEXT const & ) const = default; +#else + bool operator==( IndirectExecutionSetShaderLayoutInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( setLayoutCount == rhs.setLayoutCount ) && ( pSetLayouts == rhs.pSetLayouts ); +# endif + } + + bool operator!=( IndirectExecutionSetShaderLayoutInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectExecutionSetShaderLayoutInfoEXT; + const void * pNext = {}; + uint32_t setLayoutCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {}; + }; + + template <> + struct CppType + { + using Type = IndirectExecutionSetShaderLayoutInfoEXT; + }; + + // wrapper struct for struct VkIndirectExecutionSetShaderInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetShaderInfoEXT.html + struct IndirectExecutionSetShaderInfoEXT + { + using NativeType = VkIndirectExecutionSetShaderInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectExecutionSetShaderInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR IndirectExecutionSetShaderInfoEXT( uint32_t shaderCount_ = {}, + const VULKAN_HPP_NAMESPACE::ShaderEXT * pInitialShaders_ = {}, + const VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderLayoutInfoEXT * pSetLayoutInfos_ = {}, + uint32_t maxShaderCount_ = {}, + uint32_t pushConstantRangeCount_ = {}, + const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderCount{ shaderCount_ } + , pInitialShaders{ pInitialShaders_ } + , pSetLayoutInfos{ pSetLayoutInfos_ } + , maxShaderCount{ maxShaderCount_ } + , pushConstantRangeCount{ pushConstantRangeCount_ } + , pPushConstantRanges{ pPushConstantRanges_ } + { + } + + VULKAN_HPP_CONSTEXPR IndirectExecutionSetShaderInfoEXT( IndirectExecutionSetShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectExecutionSetShaderInfoEXT( VkIndirectExecutionSetShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectExecutionSetShaderInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectExecutionSetShaderInfoEXT( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialShaders_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayoutInfos_ = {}, + uint32_t maxShaderCount_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , shaderCount( static_cast( initialShaders_.size() ) ) + , pInitialShaders( initialShaders_.data() ) + , pSetLayoutInfos( setLayoutInfos_.data() ) + , maxShaderCount( maxShaderCount_ ) + , pushConstantRangeCount( static_cast( pushConstantRanges_.size() ) ) + , pPushConstantRanges( pushConstantRanges_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( setLayoutInfos_.empty() || ( initialShaders_.size() == setLayoutInfos_.size() ) ); +# else + if ( !setLayoutInfos_.empty() && ( initialShaders_.size() != setLayoutInfos_.size() ) ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::IndirectExecutionSetShaderInfoEXT::IndirectExecutionSetShaderInfoEXT: !setLayoutInfos_.empty() && ( initialShaders_.size() != setLayoutInfos_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + IndirectExecutionSetShaderInfoEXT & operator=( IndirectExecutionSetShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectExecutionSetShaderInfoEXT & operator=( VkIndirectExecutionSetShaderInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & setShaderCount( uint32_t shaderCount_ ) VULKAN_HPP_NOEXCEPT + { + shaderCount = shaderCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & + setPInitialShaders( const VULKAN_HPP_NAMESPACE::ShaderEXT * pInitialShaders_ ) VULKAN_HPP_NOEXCEPT + { + pInitialShaders = pInitialShaders_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectExecutionSetShaderInfoEXT & + setInitialShaders( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialShaders_ ) VULKAN_HPP_NOEXCEPT + { + shaderCount = static_cast( initialShaders_.size() ); + pInitialShaders = initialShaders_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & + setPSetLayoutInfos( const VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderLayoutInfoEXT * pSetLayoutInfos_ ) VULKAN_HPP_NOEXCEPT + { + pSetLayoutInfos = pSetLayoutInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectExecutionSetShaderInfoEXT & setSetLayoutInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayoutInfos_ ) + VULKAN_HPP_NOEXCEPT + { + shaderCount = static_cast( setLayoutInfos_.size() ); + pSetLayoutInfos = setLayoutInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & setMaxShaderCount( uint32_t maxShaderCount_ ) VULKAN_HPP_NOEXCEPT + { + maxShaderCount = maxShaderCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & setPushConstantRangeCount( uint32_t pushConstantRangeCount_ ) VULKAN_HPP_NOEXCEPT + { + pushConstantRangeCount = pushConstantRangeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetShaderInfoEXT & + setPPushConstantRanges( const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ ) VULKAN_HPP_NOEXCEPT + { + pPushConstantRanges = pPushConstantRanges_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + IndirectExecutionSetShaderInfoEXT & setPushConstantRanges( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ ) VULKAN_HPP_NOEXCEPT + { + pushConstantRangeCount = static_cast( pushConstantRanges_.size() ); + pPushConstantRanges = pushConstantRanges_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectExecutionSetShaderInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetShaderInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetShaderInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetShaderInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderCount, pInitialShaders, pSetLayoutInfos, maxShaderCount, pushConstantRangeCount, pPushConstantRanges ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( IndirectExecutionSetShaderInfoEXT const & ) const = default; +#else + bool operator==( IndirectExecutionSetShaderInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCount == rhs.shaderCount ) && ( pInitialShaders == rhs.pInitialShaders ) && + ( pSetLayoutInfos == rhs.pSetLayoutInfos ) && ( maxShaderCount == rhs.maxShaderCount ) && + ( pushConstantRangeCount == rhs.pushConstantRangeCount ) && ( pPushConstantRanges == rhs.pPushConstantRanges ); +# endif + } + + bool operator!=( IndirectExecutionSetShaderInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectExecutionSetShaderInfoEXT; + const void * pNext = {}; + uint32_t shaderCount = {}; + const VULKAN_HPP_NAMESPACE::ShaderEXT * pInitialShaders = {}; + const VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderLayoutInfoEXT * pSetLayoutInfos = {}; + uint32_t maxShaderCount = {}; + uint32_t pushConstantRangeCount = {}; + const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges = {}; + }; + + template <> + struct CppType + { + using Type = IndirectExecutionSetShaderInfoEXT; + }; + + union IndirectExecutionSetInfoEXT + { + using NativeType = VkIndirectExecutionSetInfoEXT; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetInfoEXT( const VULKAN_HPP_NAMESPACE::IndirectExecutionSetPipelineInfoEXT * pPipelineInfo_ = {} ) + : pPipelineInfo( pPipelineInfo_ ) + { + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetInfoEXT( const VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderInfoEXT * pShaderInfo_ ) + : pShaderInfo( pShaderInfo_ ) + { + } +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetInfoEXT & + setPPipelineInfo( const VULKAN_HPP_NAMESPACE::IndirectExecutionSetPipelineInfoEXT * pPipelineInfo_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineInfo = pPipelineInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetInfoEXT & + setPShaderInfo( const VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderInfoEXT * pShaderInfo_ ) VULKAN_HPP_NOEXCEPT + { + pShaderInfo = pShaderInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectExecutionSetInfoEXT const &() const + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetInfoEXT &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + const VULKAN_HPP_NAMESPACE::IndirectExecutionSetPipelineInfoEXT * pPipelineInfo; + const VULKAN_HPP_NAMESPACE::IndirectExecutionSetShaderInfoEXT * pShaderInfo; +#else + const VkIndirectExecutionSetPipelineInfoEXT * pPipelineInfo; + const VkIndirectExecutionSetShaderInfoEXT * pShaderInfo; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkIndirectExecutionSetCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkIndirectExecutionSetCreateInfoEXT.html + struct IndirectExecutionSetCreateInfoEXT + { + using NativeType = VkIndirectExecutionSetCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectExecutionSetCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetCreateInfoEXT( + VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT type_ = VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT::ePipelines, + VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoEXT info_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , info{ info_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetCreateInfoEXT( IndirectExecutionSetCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + IndirectExecutionSetCreateInfoEXT( VkIndirectExecutionSetCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : IndirectExecutionSetCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + IndirectExecutionSetCreateInfoEXT & operator=( IndirectExecutionSetCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + IndirectExecutionSetCreateInfoEXT & operator=( VkIndirectExecutionSetCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetCreateInfoEXT & setType( VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 IndirectExecutionSetCreateInfoEXT & setInfo( VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoEXT const & info_ ) VULKAN_HPP_NOEXCEPT + { + info = info_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkIndirectExecutionSetCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkIndirectExecutionSetCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, info ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eIndirectExecutionSetCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT type = VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoTypeEXT::ePipelines; + VULKAN_HPP_NAMESPACE::IndirectExecutionSetInfoEXT info = {}; + }; + + template <> + struct CppType + { + using Type = IndirectExecutionSetCreateInfoEXT; + }; + + // wrapper struct for struct VkInitializePerformanceApiInfoINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkInitializePerformanceApiInfoINTEL.html + struct InitializePerformanceApiInfoINTEL + { + using NativeType = VkInitializePerformanceApiInfoINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eInitializePerformanceApiInfoINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR InitializePerformanceApiInfoINTEL( void * pUserData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pUserData{ pUserData_ } + { + } + + VULKAN_HPP_CONSTEXPR InitializePerformanceApiInfoINTEL( InitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + InitializePerformanceApiInfoINTEL( VkInitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : InitializePerformanceApiInfoINTEL( *reinterpret_cast( &rhs ) ) + { + } + + InitializePerformanceApiInfoINTEL & operator=( InitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + InitializePerformanceApiInfoINTEL & operator=( VkInitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT + { + pUserData = pUserData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkInitializePerformanceApiInfoINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkInitializePerformanceApiInfoINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkInitializePerformanceApiInfoINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkInitializePerformanceApiInfoINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pUserData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( InitializePerformanceApiInfoINTEL const & ) const = default; +#else + bool operator==( InitializePerformanceApiInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pUserData == rhs.pUserData ); +# endif + } + + bool operator!=( InitializePerformanceApiInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eInitializePerformanceApiInfoINTEL; + const void * pNext = {}; + void * pUserData = {}; + }; + + template <> + struct CppType + { + using Type = InitializePerformanceApiInfoINTEL; + }; + + // wrapper struct for struct VkInputAttachmentAspectReference, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkInputAttachmentAspectReference.html + struct InputAttachmentAspectReference + { + using NativeType = VkInputAttachmentAspectReference; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR InputAttachmentAspectReference( uint32_t subpass_ = {}, + uint32_t inputAttachmentIndex_ = {}, + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {} ) VULKAN_HPP_NOEXCEPT + : subpass{ subpass_ } + , inputAttachmentIndex{ inputAttachmentIndex_ } + , aspectMask{ aspectMask_ } + { + } + + VULKAN_HPP_CONSTEXPR InputAttachmentAspectReference( InputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + InputAttachmentAspectReference( VkInputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT + : InputAttachmentAspectReference( *reinterpret_cast( &rhs ) ) + { + } + + InputAttachmentAspectReference & operator=( InputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + InputAttachmentAspectReference & operator=( VkInputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT + { + subpass = subpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setInputAttachmentIndex( uint32_t inputAttachmentIndex_ ) VULKAN_HPP_NOEXCEPT + { + inputAttachmentIndex = inputAttachmentIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT + { + aspectMask = aspectMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkInputAttachmentAspectReference const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkInputAttachmentAspectReference &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkInputAttachmentAspectReference const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkInputAttachmentAspectReference *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( subpass, inputAttachmentIndex, aspectMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( InputAttachmentAspectReference const & ) const = default; +#else + bool operator==( InputAttachmentAspectReference const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( subpass == rhs.subpass ) && ( inputAttachmentIndex == rhs.inputAttachmentIndex ) && ( aspectMask == rhs.aspectMask ); +# endif + } + + bool operator!=( InputAttachmentAspectReference const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t subpass = {}; + uint32_t inputAttachmentIndex = {}; + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + }; + + using InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference; + + // wrapper struct for struct VkInstanceCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkInstanceCreateInfo.html + struct InstanceCreateInfo + { + using NativeType = VkInstanceCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eInstanceCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR InstanceCreateInfo( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ = {}, + const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_ = {}, + uint32_t enabledLayerCount_ = {}, + const char * const * ppEnabledLayerNames_ = {}, + uint32_t enabledExtensionCount_ = {}, + const char * const * ppEnabledExtensionNames_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pApplicationInfo{ pApplicationInfo_ } + , enabledLayerCount{ enabledLayerCount_ } + , ppEnabledLayerNames{ ppEnabledLayerNames_ } + , enabledExtensionCount{ enabledExtensionCount_ } + , ppEnabledExtensionNames{ ppEnabledExtensionNames_ } + { + } + + VULKAN_HPP_CONSTEXPR InstanceCreateInfo( InstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + InstanceCreateInfo( VkInstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : InstanceCreateInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + InstanceCreateInfo( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_, + const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , pApplicationInfo( pApplicationInfo_ ) + , enabledLayerCount( static_cast( pEnabledLayerNames_.size() ) ) + , ppEnabledLayerNames( pEnabledLayerNames_.data() ) + , enabledExtensionCount( static_cast( pEnabledExtensionNames_.size() ) ) + , ppEnabledExtensionNames( pEnabledExtensionNames_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + InstanceCreateInfo & operator=( InstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + InstanceCreateInfo & operator=( VkInstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPApplicationInfo( const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_ ) VULKAN_HPP_NOEXCEPT + { + pApplicationInfo = pApplicationInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT + { + enabledLayerCount = enabledLayerCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT + { + ppEnabledLayerNames = ppEnabledLayerNames_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + InstanceCreateInfo & + setPEnabledLayerNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT + { + enabledLayerCount = static_cast( pEnabledLayerNames_.size() ); + ppEnabledLayerNames = pEnabledLayerNames_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT + { + enabledExtensionCount = enabledExtensionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT + { + ppEnabledExtensionNames = ppEnabledExtensionNames_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + InstanceCreateInfo & + setPEnabledExtensionNames( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT + { + enabledExtensionCount = static_cast( pEnabledExtensionNames_.size() ); + ppEnabledExtensionNames = pEnabledExtensionNames_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkInstanceCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkInstanceCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkInstanceCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkInstanceCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pApplicationInfo, enabledLayerCount, ppEnabledLayerNames, enabledExtensionCount, ppEnabledExtensionNames ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = pApplicationInfo <=> rhs.pApplicationInfo; cmp != 0 ) + return cmp; + if ( auto cmp = enabledLayerCount <=> rhs.enabledLayerCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < enabledLayerCount; ++i ) + { + if ( ppEnabledLayerNames[i] != rhs.ppEnabledLayerNames[i] ) + if ( auto cmp = strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ); cmp != 0 ) + return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; + } + if ( auto cmp = enabledExtensionCount <=> rhs.enabledExtensionCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < enabledExtensionCount; ++i ) + { + if ( ppEnabledExtensionNames[i] != rhs.ppEnabledExtensionNames[i] ) + if ( auto cmp = strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ); cmp != 0 ) + return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater; + } + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pApplicationInfo == rhs.pApplicationInfo ) && + ( enabledLayerCount == rhs.enabledLayerCount ) && + std::equal( ppEnabledLayerNames, + ppEnabledLayerNames + enabledLayerCount, + rhs.ppEnabledLayerNames, + []( char const * left, char const * right ) { return ( left == right ) || ( strcmp( left, right ) == 0 ); } ) && + ( enabledExtensionCount == rhs.enabledExtensionCount ) && + std::equal( ppEnabledExtensionNames, + ppEnabledExtensionNames + enabledExtensionCount, + rhs.ppEnabledExtensionNames, + []( char const * left, char const * right ) { return ( left == right ) || ( strcmp( left, right ) == 0 ); } ); + } + + bool operator!=( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eInstanceCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags = {}; + const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo = {}; + uint32_t enabledLayerCount = {}; + const char * const * ppEnabledLayerNames = {}; + uint32_t enabledExtensionCount = {}; + const char * const * ppEnabledExtensionNames = {}; + }; + + template <> + struct CppType + { + using Type = InstanceCreateInfo; + }; + + // wrapper struct for struct VkLatencySleepInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLatencySleepInfoNV.html + struct LatencySleepInfoNV + { + using NativeType = VkLatencySleepInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eLatencySleepInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + LatencySleepInfoNV( VULKAN_HPP_NAMESPACE::Semaphore signalSemaphore_ = {}, uint64_t value_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , signalSemaphore{ signalSemaphore_ } + , value{ value_ } + { + } + + VULKAN_HPP_CONSTEXPR LatencySleepInfoNV( LatencySleepInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LatencySleepInfoNV( VkLatencySleepInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT : LatencySleepInfoNV( *reinterpret_cast( &rhs ) ) {} + + LatencySleepInfoNV & operator=( LatencySleepInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LatencySleepInfoNV & operator=( VkLatencySleepInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 LatencySleepInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySleepInfoNV & setSignalSemaphore( VULKAN_HPP_NAMESPACE::Semaphore signalSemaphore_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphore = signalSemaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySleepInfoNV & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT + { + value = value_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkLatencySleepInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySleepInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySleepInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLatencySleepInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, signalSemaphore, value ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( LatencySleepInfoNV const & ) const = default; +#else + bool operator==( LatencySleepInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( signalSemaphore == rhs.signalSemaphore ) && ( value == rhs.value ); +# endif + } + + bool operator!=( LatencySleepInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eLatencySleepInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore signalSemaphore = {}; + uint64_t value = {}; + }; + + template <> + struct CppType + { + using Type = LatencySleepInfoNV; + }; + + // wrapper struct for struct VkLatencySleepModeInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLatencySleepModeInfoNV.html + struct LatencySleepModeInfoNV + { + using NativeType = VkLatencySleepModeInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eLatencySleepModeInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR LatencySleepModeInfoNV( VULKAN_HPP_NAMESPACE::Bool32 lowLatencyMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 lowLatencyBoost_ = {}, + uint32_t minimumIntervalUs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , lowLatencyMode{ lowLatencyMode_ } + , lowLatencyBoost{ lowLatencyBoost_ } + , minimumIntervalUs{ minimumIntervalUs_ } + { + } + + VULKAN_HPP_CONSTEXPR LatencySleepModeInfoNV( LatencySleepModeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LatencySleepModeInfoNV( VkLatencySleepModeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : LatencySleepModeInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + LatencySleepModeInfoNV & operator=( LatencySleepModeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LatencySleepModeInfoNV & operator=( VkLatencySleepModeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 LatencySleepModeInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySleepModeInfoNV & setLowLatencyMode( VULKAN_HPP_NAMESPACE::Bool32 lowLatencyMode_ ) VULKAN_HPP_NOEXCEPT + { + lowLatencyMode = lowLatencyMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySleepModeInfoNV & setLowLatencyBoost( VULKAN_HPP_NAMESPACE::Bool32 lowLatencyBoost_ ) VULKAN_HPP_NOEXCEPT + { + lowLatencyBoost = lowLatencyBoost_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySleepModeInfoNV & setMinimumIntervalUs( uint32_t minimumIntervalUs_ ) VULKAN_HPP_NOEXCEPT + { + minimumIntervalUs = minimumIntervalUs_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkLatencySleepModeInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySleepModeInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySleepModeInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLatencySleepModeInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, lowLatencyMode, lowLatencyBoost, minimumIntervalUs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( LatencySleepModeInfoNV const & ) const = default; +#else + bool operator==( LatencySleepModeInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( lowLatencyMode == rhs.lowLatencyMode ) && ( lowLatencyBoost == rhs.lowLatencyBoost ) && + ( minimumIntervalUs == rhs.minimumIntervalUs ); +# endif + } + + bool operator!=( LatencySleepModeInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eLatencySleepModeInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 lowLatencyMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 lowLatencyBoost = {}; + uint32_t minimumIntervalUs = {}; + }; + + template <> + struct CppType + { + using Type = LatencySleepModeInfoNV; + }; + + // wrapper struct for struct VkLatencySubmissionPresentIdNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLatencySubmissionPresentIdNV.html + struct LatencySubmissionPresentIdNV + { + using NativeType = VkLatencySubmissionPresentIdNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eLatencySubmissionPresentIdNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR LatencySubmissionPresentIdNV( uint64_t presentID_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentID{ presentID_ } + { + } + + VULKAN_HPP_CONSTEXPR LatencySubmissionPresentIdNV( LatencySubmissionPresentIdNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LatencySubmissionPresentIdNV( VkLatencySubmissionPresentIdNV const & rhs ) VULKAN_HPP_NOEXCEPT + : LatencySubmissionPresentIdNV( *reinterpret_cast( &rhs ) ) + { + } + + LatencySubmissionPresentIdNV & operator=( LatencySubmissionPresentIdNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LatencySubmissionPresentIdNV & operator=( VkLatencySubmissionPresentIdNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 LatencySubmissionPresentIdNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySubmissionPresentIdNV & setPresentID( uint64_t presentID_ ) VULKAN_HPP_NOEXCEPT + { + presentID = presentID_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkLatencySubmissionPresentIdNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySubmissionPresentIdNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySubmissionPresentIdNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLatencySubmissionPresentIdNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentID ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( LatencySubmissionPresentIdNV const & ) const = default; +#else + bool operator==( LatencySubmissionPresentIdNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentID == rhs.presentID ); +# endif + } + + bool operator!=( LatencySubmissionPresentIdNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eLatencySubmissionPresentIdNV; + const void * pNext = {}; + uint64_t presentID = {}; + }; + + template <> + struct CppType + { + using Type = LatencySubmissionPresentIdNV; + }; + + // wrapper struct for struct VkLatencySurfaceCapabilitiesNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLatencySurfaceCapabilitiesNV.html + struct LatencySurfaceCapabilitiesNV + { + using NativeType = VkLatencySurfaceCapabilitiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eLatencySurfaceCapabilitiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR LatencySurfaceCapabilitiesNV( uint32_t presentModeCount_ = {}, + VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentModeCount{ presentModeCount_ } + , pPresentModes{ pPresentModes_ } + { + } + + VULKAN_HPP_CONSTEXPR LatencySurfaceCapabilitiesNV( LatencySurfaceCapabilitiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LatencySurfaceCapabilitiesNV( VkLatencySurfaceCapabilitiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : LatencySurfaceCapabilitiesNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + LatencySurfaceCapabilitiesNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), presentModeCount( static_cast( presentModes_.size() ) ), pPresentModes( presentModes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + LatencySurfaceCapabilitiesNV & operator=( LatencySurfaceCapabilitiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LatencySurfaceCapabilitiesNV & operator=( VkLatencySurfaceCapabilitiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 LatencySurfaceCapabilitiesNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySurfaceCapabilitiesNV & setPresentModeCount( uint32_t presentModeCount_ ) VULKAN_HPP_NOEXCEPT + { + presentModeCount = presentModeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LatencySurfaceCapabilitiesNV & setPPresentModes( VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ ) VULKAN_HPP_NOEXCEPT + { + pPresentModes = pPresentModes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + LatencySurfaceCapabilitiesNV & + setPresentModes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_ ) VULKAN_HPP_NOEXCEPT + { + presentModeCount = static_cast( presentModes_.size() ); + pPresentModes = presentModes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkLatencySurfaceCapabilitiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySurfaceCapabilitiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLatencySurfaceCapabilitiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLatencySurfaceCapabilitiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentModeCount, pPresentModes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( LatencySurfaceCapabilitiesNV const & ) const = default; +#else + bool operator==( LatencySurfaceCapabilitiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentModeCount == rhs.presentModeCount ) && ( pPresentModes == rhs.pPresentModes ); +# endif + } + + bool operator!=( LatencySurfaceCapabilitiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eLatencySurfaceCapabilitiesNV; + const void * pNext = {}; + uint32_t presentModeCount = {}; + VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes = {}; + }; + + template <> + struct CppType + { + using Type = LatencySurfaceCapabilitiesNV; + }; + + // wrapper struct for struct VkLayerProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLayerProperties.html + struct LayerProperties + { + using NativeType = VkLayerProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 LayerProperties( std::array const & layerName_ = {}, + uint32_t specVersion_ = {}, + uint32_t implementationVersion_ = {}, + std::array const & description_ = {} ) VULKAN_HPP_NOEXCEPT + : layerName{ layerName_ } + , specVersion{ specVersion_ } + , implementationVersion{ implementationVersion_ } + , description{ description_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 LayerProperties( LayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LayerProperties( VkLayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT : LayerProperties( *reinterpret_cast( &rhs ) ) {} + + LayerProperties & operator=( LayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LayerProperties & operator=( VkLayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkLayerProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLayerProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLayerProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLayerProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( layerName, specVersion, implementationVersion, description ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = strcmp( layerName, rhs.layerName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = specVersion <=> rhs.specVersion; cmp != 0 ) + return cmp; + if ( auto cmp = implementationVersion <=> rhs.implementationVersion; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( strcmp( layerName, rhs.layerName ) == 0 ) && ( specVersion == rhs.specVersion ) && ( implementationVersion == rhs.implementationVersion ) && + ( strcmp( description, rhs.description ) == 0 ); + } + + bool operator!=( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D layerName = {}; + uint32_t specVersion = {}; + uint32_t implementationVersion = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + }; + + // wrapper struct for struct VkLayerSettingEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLayerSettingEXT.html + struct LayerSettingEXT + { + using NativeType = VkLayerSettingEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR LayerSettingEXT( const char * pLayerName_ = {}, + const char * pSettingName_ = {}, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_ = VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT::eBool32, + uint32_t valueCount_ = {}, + const void * pValues_ = {} ) VULKAN_HPP_NOEXCEPT + : pLayerName{ pLayerName_ } + , pSettingName{ pSettingName_ } + , type{ type_ } + , valueCount{ valueCount_ } + , pValues{ pValues_ } + { + } + + VULKAN_HPP_CONSTEXPR LayerSettingEXT( LayerSettingEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LayerSettingEXT( VkLayerSettingEXT const & rhs ) VULKAN_HPP_NOEXCEPT : LayerSettingEXT( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + // NOTE: you need to provide the type because VULKAN_HPP_NAMESPACE::Bool32 and uint32_t are indistinguishable! + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } + + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } + + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } + + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } + + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } + + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } + + LayerSettingEXT( char const * pLayerName_, + char const * pSettingName_, + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) + : pLayerName( pLayerName_ ) + , pSettingName( pSettingName_ ) + , type( type_ ) + , valueCount( static_cast( values_.size() ) ) + , pValues( values_.data() ) + { + VULKAN_HPP_ASSERT( VULKAN_HPP_NAMESPACE::isSameType( type ) ); + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + LayerSettingEXT & operator=( LayerSettingEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LayerSettingEXT & operator=( VkLayerSettingEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 LayerSettingEXT & setPLayerName( const char * pLayerName_ ) VULKAN_HPP_NOEXCEPT + { + pLayerName = pLayerName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LayerSettingEXT & setPSettingName( const char * pSettingName_ ) VULKAN_HPP_NOEXCEPT + { + pSettingName = pSettingName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LayerSettingEXT & setType( VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LayerSettingEXT & setValueCount( uint32_t valueCount_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = valueCount_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } + + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } + + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } + + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } + + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } + + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } + + LayerSettingEXT & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + valueCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkLayerSettingEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLayerSettingEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLayerSettingEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLayerSettingEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( pLayerName, pSettingName, type, valueCount, pValues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( LayerSettingEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( pLayerName != rhs.pLayerName ) + if ( auto cmp = strcmp( pLayerName, rhs.pLayerName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( pSettingName != rhs.pSettingName ) + if ( auto cmp = strcmp( pSettingName, rhs.pSettingName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = type <=> rhs.type; cmp != 0 ) + return cmp; + if ( auto cmp = valueCount <=> rhs.valueCount; cmp != 0 ) + return cmp; + if ( auto cmp = pValues <=> rhs.pValues; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( LayerSettingEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( ( pLayerName == rhs.pLayerName ) || ( strcmp( pLayerName, rhs.pLayerName ) == 0 ) ) && + ( ( pSettingName == rhs.pSettingName ) || ( strcmp( pSettingName, rhs.pSettingName ) == 0 ) ) && ( type == rhs.type ) && + ( valueCount == rhs.valueCount ) && ( pValues == rhs.pValues ); + } + + bool operator!=( LayerSettingEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + const char * pLayerName = {}; + const char * pSettingName = {}; + VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT type = VULKAN_HPP_NAMESPACE::LayerSettingTypeEXT::eBool32; + uint32_t valueCount = {}; + const void * pValues = {}; + }; + + // wrapper struct for struct VkLayerSettingsCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkLayerSettingsCreateInfoEXT.html + struct LayerSettingsCreateInfoEXT + { + using NativeType = VkLayerSettingsCreateInfoEXT; + + static const bool allowDuplicate = true; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eLayerSettingsCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR LayerSettingsCreateInfoEXT( uint32_t settingCount_ = {}, + const VULKAN_HPP_NAMESPACE::LayerSettingEXT * pSettings_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , settingCount{ settingCount_ } + , pSettings{ pSettings_ } + { + } + + VULKAN_HPP_CONSTEXPR LayerSettingsCreateInfoEXT( LayerSettingsCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + LayerSettingsCreateInfoEXT( VkLayerSettingsCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : LayerSettingsCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + LayerSettingsCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & settings_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), settingCount( static_cast( settings_.size() ) ), pSettings( settings_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + LayerSettingsCreateInfoEXT & operator=( LayerSettingsCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + LayerSettingsCreateInfoEXT & operator=( VkLayerSettingsCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 LayerSettingsCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LayerSettingsCreateInfoEXT & setSettingCount( uint32_t settingCount_ ) VULKAN_HPP_NOEXCEPT + { + settingCount = settingCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 LayerSettingsCreateInfoEXT & setPSettings( const VULKAN_HPP_NAMESPACE::LayerSettingEXT * pSettings_ ) VULKAN_HPP_NOEXCEPT + { + pSettings = pSettings_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + LayerSettingsCreateInfoEXT & + setSettings( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & settings_ ) VULKAN_HPP_NOEXCEPT + { + settingCount = static_cast( settings_.size() ); + pSettings = settings_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkLayerSettingsCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLayerSettingsCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkLayerSettingsCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkLayerSettingsCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, settingCount, pSettings ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( LayerSettingsCreateInfoEXT const & ) const = default; +#else + bool operator==( LayerSettingsCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( settingCount == rhs.settingCount ) && ( pSettings == rhs.pSettings ); +# endif + } + + bool operator!=( LayerSettingsCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eLayerSettingsCreateInfoEXT; + const void * pNext = {}; + uint32_t settingCount = {}; + const VULKAN_HPP_NAMESPACE::LayerSettingEXT * pSettings = {}; + }; + + template <> + struct CppType + { + using Type = LayerSettingsCreateInfoEXT; + }; + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + // wrapper struct for struct VkMacOSSurfaceCreateInfoMVK, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMacOSSurfaceCreateInfoMVK.html + struct MacOSSurfaceCreateInfoMVK + { + using NativeType = VkMacOSSurfaceCreateInfoMVK; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMacosSurfaceCreateInfoMVK; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MacOSSurfaceCreateInfoMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ = {}, + const void * pView_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pView{ pView_ } + { + } + + VULKAN_HPP_CONSTEXPR MacOSSurfaceCreateInfoMVK( MacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MacOSSurfaceCreateInfoMVK( VkMacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT + : MacOSSurfaceCreateInfoMVK( *reinterpret_cast( &rhs ) ) + { + } + + MacOSSurfaceCreateInfoMVK & operator=( MacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MacOSSurfaceCreateInfoMVK & operator=( VkMacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setFlags( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT + { + pView = pView_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMacOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMacOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMacOSSurfaceCreateInfoMVK const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMacOSSurfaceCreateInfoMVK *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pView ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MacOSSurfaceCreateInfoMVK const & ) const = default; +# else + bool operator==( MacOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pView == rhs.pView ); +# endif + } + + bool operator!=( MacOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMacosSurfaceCreateInfoMVK; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags = {}; + const void * pView = {}; + }; + + template <> + struct CppType + { + using Type = MacOSSurfaceCreateInfoMVK; + }; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + // wrapper struct for struct VkMappedMemoryRange, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMappedMemoryRange.html + struct MappedMemoryRange + { + using NativeType = VkMappedMemoryRange; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMappedMemoryRange; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MappedMemoryRange( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , offset{ offset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR MappedMemoryRange( MappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MappedMemoryRange( VkMappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT : MappedMemoryRange( *reinterpret_cast( &rhs ) ) {} + + MappedMemoryRange & operator=( MappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MappedMemoryRange & operator=( VkMappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMappedMemoryRange const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMappedMemoryRange &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMappedMemoryRange const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMappedMemoryRange *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, offset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MappedMemoryRange const & ) const = default; +#else + bool operator==( MappedMemoryRange const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( offset == rhs.offset ) && ( size == rhs.size ); +# endif + } + + bool operator!=( MappedMemoryRange const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMappedMemoryRange; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = MappedMemoryRange; + }; + + // wrapper struct for struct VkMemoryAllocateFlagsInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryAllocateFlagsInfo.html + struct MemoryAllocateFlagsInfo + { + using NativeType = VkMemoryAllocateFlagsInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateFlagsInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryAllocateFlagsInfo( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ = {}, + uint32_t deviceMask_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , deviceMask{ deviceMask_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryAllocateFlagsInfo( MemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryAllocateFlagsInfo( VkMemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryAllocateFlagsInfo( *reinterpret_cast( &rhs ) ) + { + } + + MemoryAllocateFlagsInfo & operator=( MemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryAllocateFlagsInfo & operator=( VkMemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setFlags( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT + { + deviceMask = deviceMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryAllocateFlagsInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryAllocateFlagsInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryAllocateFlagsInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryAllocateFlagsInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, deviceMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryAllocateFlagsInfo const & ) const = default; +#else + bool operator==( MemoryAllocateFlagsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( deviceMask == rhs.deviceMask ); +# endif + } + + bool operator!=( MemoryAllocateFlagsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryAllocateFlagsInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags = {}; + uint32_t deviceMask = {}; + }; + + template <> + struct CppType + { + using Type = MemoryAllocateFlagsInfo; + }; + + using MemoryAllocateFlagsInfoKHR = MemoryAllocateFlagsInfo; + + // wrapper struct for struct VkMemoryAllocateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryAllocateInfo.html + struct MemoryAllocateInfo + { + using NativeType = VkMemoryAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryAllocateInfo( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ = {}, + uint32_t memoryTypeIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , allocationSize{ allocationSize_ } + , memoryTypeIndex{ memoryTypeIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryAllocateInfo( MemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryAllocateInfo( VkMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryAllocateInfo( *reinterpret_cast( &rhs ) ) {} + + MemoryAllocateInfo & operator=( MemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryAllocateInfo & operator=( VkMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setAllocationSize( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ ) VULKAN_HPP_NOEXCEPT + { + allocationSize = allocationSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setMemoryTypeIndex( uint32_t memoryTypeIndex_ ) VULKAN_HPP_NOEXCEPT + { + memoryTypeIndex = memoryTypeIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, allocationSize, memoryTypeIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryAllocateInfo const & ) const = default; +#else + bool operator==( MemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) && ( memoryTypeIndex == rhs.memoryTypeIndex ); +# endif + } + + bool operator!=( MemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryAllocateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {}; + uint32_t memoryTypeIndex = {}; + }; + + template <> + struct CppType + { + using Type = MemoryAllocateInfo; + }; + + // wrapper struct for struct VkMemoryBarrier, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryBarrier.html + struct MemoryBarrier + { + using NativeType = VkMemoryBarrier; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcAccessMask{ srcAccessMask_ } + , dstAccessMask{ dstAccessMask_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryBarrier( MemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryBarrier( VkMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryBarrier( *reinterpret_cast( &rhs ) ) {} + + MemoryBarrier & operator=( MemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryBarrier & operator=( VkMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryBarrier &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryBarrier const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryBarrier *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcAccessMask, dstAccessMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryBarrier const & ) const = default; +#else + bool operator==( MemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ); +# endif + } + + bool operator!=( MemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrier; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; + }; + + template <> + struct CppType + { + using Type = MemoryBarrier; + }; + + // wrapper struct for struct VkMemoryBarrierAccessFlags3KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryBarrierAccessFlags3KHR.html + struct MemoryBarrierAccessFlags3KHR + { + using NativeType = VkMemoryBarrierAccessFlags3KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrierAccessFlags3KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryBarrierAccessFlags3KHR( VULKAN_HPP_NAMESPACE::AccessFlags3KHR srcAccessMask3_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags3KHR dstAccessMask3_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcAccessMask3{ srcAccessMask3_ } + , dstAccessMask3{ dstAccessMask3_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryBarrierAccessFlags3KHR( MemoryBarrierAccessFlags3KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryBarrierAccessFlags3KHR( VkMemoryBarrierAccessFlags3KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryBarrierAccessFlags3KHR( *reinterpret_cast( &rhs ) ) + { + } + + MemoryBarrierAccessFlags3KHR & operator=( MemoryBarrierAccessFlags3KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryBarrierAccessFlags3KHR & operator=( VkMemoryBarrierAccessFlags3KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryBarrierAccessFlags3KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrierAccessFlags3KHR & setSrcAccessMask3( VULKAN_HPP_NAMESPACE::AccessFlags3KHR srcAccessMask3_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask3 = srcAccessMask3_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryBarrierAccessFlags3KHR & setDstAccessMask3( VULKAN_HPP_NAMESPACE::AccessFlags3KHR dstAccessMask3_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask3 = dstAccessMask3_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryBarrierAccessFlags3KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryBarrierAccessFlags3KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryBarrierAccessFlags3KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryBarrierAccessFlags3KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcAccessMask3, dstAccessMask3 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryBarrierAccessFlags3KHR const & ) const = default; +#else + bool operator==( MemoryBarrierAccessFlags3KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask3 == rhs.srcAccessMask3 ) && ( dstAccessMask3 == rhs.dstAccessMask3 ); +# endif + } + + bool operator!=( MemoryBarrierAccessFlags3KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrierAccessFlags3KHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AccessFlags3KHR srcAccessMask3 = {}; + VULKAN_HPP_NAMESPACE::AccessFlags3KHR dstAccessMask3 = {}; + }; + + template <> + struct CppType + { + using Type = MemoryBarrierAccessFlags3KHR; + }; + + // wrapper struct for struct VkMemoryDedicatedAllocateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryDedicatedAllocateInfo.html + struct MemoryDedicatedAllocateInfo + { + using NativeType = VkMemoryDedicatedAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfo( VULKAN_HPP_NAMESPACE::Image image_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image{ image_ } + , buffer{ buffer_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfo( MemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryDedicatedAllocateInfo( VkMemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryDedicatedAllocateInfo( *reinterpret_cast( &rhs ) ) + { + } + + MemoryDedicatedAllocateInfo & operator=( MemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryDedicatedAllocateInfo & operator=( VkMemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT + { + image = image_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryDedicatedAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryDedicatedAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryDedicatedAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryDedicatedAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image, buffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryDedicatedAllocateInfo const & ) const = default; +#else + bool operator==( MemoryDedicatedAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( buffer == rhs.buffer ); +# endif + } + + bool operator!=( MemoryDedicatedAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryDedicatedAllocateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image image = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + }; + + template <> + struct CppType + { + using Type = MemoryDedicatedAllocateInfo; + }; + + using MemoryDedicatedAllocateInfoKHR = MemoryDedicatedAllocateInfo; + + // wrapper struct for struct VkMemoryDedicatedAllocateInfoTensorARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryDedicatedAllocateInfoTensorARM.html + struct MemoryDedicatedAllocateInfoTensorARM + { + using NativeType = VkMemoryDedicatedAllocateInfoTensorARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedAllocateInfoTensorARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfoTensorARM( VULKAN_HPP_NAMESPACE::TensorARM tensor_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensor{ tensor_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfoTensorARM( MemoryDedicatedAllocateInfoTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryDedicatedAllocateInfoTensorARM( VkMemoryDedicatedAllocateInfoTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryDedicatedAllocateInfoTensorARM( *reinterpret_cast( &rhs ) ) + { + } + + MemoryDedicatedAllocateInfoTensorARM & operator=( MemoryDedicatedAllocateInfoTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryDedicatedAllocateInfoTensorARM & operator=( VkMemoryDedicatedAllocateInfoTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfoTensorARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfoTensorARM & setTensor( VULKAN_HPP_NAMESPACE::TensorARM tensor_ ) VULKAN_HPP_NOEXCEPT + { + tensor = tensor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryDedicatedAllocateInfoTensorARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryDedicatedAllocateInfoTensorARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryDedicatedAllocateInfoTensorARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryDedicatedAllocateInfoTensorARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryDedicatedAllocateInfoTensorARM const & ) const = default; +#else + bool operator==( MemoryDedicatedAllocateInfoTensorARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensor == rhs.tensor ); +# endif + } + + bool operator!=( MemoryDedicatedAllocateInfoTensorARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryDedicatedAllocateInfoTensorARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorARM tensor = {}; + }; + + template <> + struct CppType + { + using Type = MemoryDedicatedAllocateInfoTensorARM; + }; + + // wrapper struct for struct VkMemoryDedicatedRequirements, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryDedicatedRequirements.html + struct MemoryDedicatedRequirements + { + using NativeType = VkMemoryDedicatedRequirements; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedRequirements; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryDedicatedRequirements( VULKAN_HPP_NAMESPACE::Bool32 prefersDedicatedAllocation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 requiresDedicatedAllocation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , prefersDedicatedAllocation{ prefersDedicatedAllocation_ } + , requiresDedicatedAllocation{ requiresDedicatedAllocation_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryDedicatedRequirements( MemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryDedicatedRequirements( VkMemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryDedicatedRequirements( *reinterpret_cast( &rhs ) ) + { + } + + MemoryDedicatedRequirements & operator=( MemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryDedicatedRequirements & operator=( VkMemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryDedicatedRequirements const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryDedicatedRequirements &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryDedicatedRequirements const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryDedicatedRequirements *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, prefersDedicatedAllocation, requiresDedicatedAllocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryDedicatedRequirements const & ) const = default; +#else + bool operator==( MemoryDedicatedRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( prefersDedicatedAllocation == rhs.prefersDedicatedAllocation ) && + ( requiresDedicatedAllocation == rhs.requiresDedicatedAllocation ); +# endif + } + + bool operator!=( MemoryDedicatedRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryDedicatedRequirements; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersDedicatedAllocation = {}; + VULKAN_HPP_NAMESPACE::Bool32 requiresDedicatedAllocation = {}; + }; + + template <> + struct CppType + { + using Type = MemoryDedicatedRequirements; + }; + + using MemoryDedicatedRequirementsKHR = MemoryDedicatedRequirements; + + // wrapper struct for struct VkMemoryFdPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryFdPropertiesKHR.html + struct MemoryFdPropertiesKHR + { + using NativeType = VkMemoryFdPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryFdPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryFdPropertiesKHR( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryFdPropertiesKHR( MemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryFdPropertiesKHR( VkMemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryFdPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + MemoryFdPropertiesKHR & operator=( MemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryFdPropertiesKHR & operator=( VkMemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryFdPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryFdPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryFdPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryFdPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryTypeBits ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryFdPropertiesKHR const & ) const = default; +#else + bool operator==( MemoryFdPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( MemoryFdPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryFdPropertiesKHR; + void * pNext = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = MemoryFdPropertiesKHR; + }; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkMemoryGetAndroidHardwareBufferInfoANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryGetAndroidHardwareBufferInfoANDROID.html + struct MemoryGetAndroidHardwareBufferInfoANDROID + { + using NativeType = VkMemoryGetAndroidHardwareBufferInfoANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryGetAndroidHardwareBufferInfoANDROID( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryGetAndroidHardwareBufferInfoANDROID( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryGetAndroidHardwareBufferInfoANDROID( VkMemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryGetAndroidHardwareBufferInfoANDROID( *reinterpret_cast( &rhs ) ) + { + } + + MemoryGetAndroidHardwareBufferInfoANDROID & operator=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryGetAndroidHardwareBufferInfoANDROID & operator=( VkMemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryGetAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetAndroidHardwareBufferInfoANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryGetAndroidHardwareBufferInfoANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryGetAndroidHardwareBufferInfoANDROID const & ) const = default; +# else + bool operator==( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ); +# endif + } + + bool operator!=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + }; + + template <> + struct CppType + { + using Type = MemoryGetAndroidHardwareBufferInfoANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + // wrapper struct for struct VkMemoryGetFdInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryGetFdInfoKHR.html + struct MemoryGetFdInfoKHR + { + using NativeType = VkMemoryGetFdInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetFdInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryGetFdInfoKHR( + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryGetFdInfoKHR( MemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryGetFdInfoKHR( VkMemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryGetFdInfoKHR( *reinterpret_cast( &rhs ) ) {} + + MemoryGetFdInfoKHR & operator=( MemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryGetFdInfoKHR & operator=( VkMemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetFdInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryGetFdInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryGetFdInfoKHR const & ) const = default; +#else + bool operator==( MemoryGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( MemoryGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetFdInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = MemoryGetFdInfoKHR; + }; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkMemoryGetMetalHandleInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryGetMetalHandleInfoEXT.html + struct MemoryGetMetalHandleInfoEXT + { + using NativeType = VkMemoryGetMetalHandleInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetMetalHandleInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryGetMetalHandleInfoEXT( + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryGetMetalHandleInfoEXT( MemoryGetMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryGetMetalHandleInfoEXT( VkMemoryGetMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryGetMetalHandleInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MemoryGetMetalHandleInfoEXT & operator=( MemoryGetMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryGetMetalHandleInfoEXT & operator=( VkMemoryGetMetalHandleInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryGetMetalHandleInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetMetalHandleInfoEXT & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetMetalHandleInfoEXT & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryGetMetalHandleInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetMetalHandleInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetMetalHandleInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryGetMetalHandleInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, handleType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryGetMetalHandleInfoEXT const & ) const = default; +# else + bool operator==( MemoryGetMetalHandleInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( MemoryGetMetalHandleInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetMetalHandleInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = MemoryGetMetalHandleInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + // wrapper struct for struct VkMemoryGetRemoteAddressInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryGetRemoteAddressInfoNV.html + struct MemoryGetRemoteAddressInfoNV + { + using NativeType = VkMemoryGetRemoteAddressInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetRemoteAddressInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryGetRemoteAddressInfoNV( + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryGetRemoteAddressInfoNV( MemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryGetRemoteAddressInfoNV( VkMemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryGetRemoteAddressInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + MemoryGetRemoteAddressInfoNV & operator=( MemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryGetRemoteAddressInfoNV & operator=( VkMemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryGetRemoteAddressInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetRemoteAddressInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetRemoteAddressInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryGetRemoteAddressInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryGetRemoteAddressInfoNV const & ) const = default; +#else + bool operator==( MemoryGetRemoteAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( MemoryGetRemoteAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetRemoteAddressInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = MemoryGetRemoteAddressInfoNV; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkMemoryGetWin32HandleInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryGetWin32HandleInfoKHR.html + struct MemoryGetWin32HandleInfoKHR + { + using NativeType = VkMemoryGetWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryGetWin32HandleInfoKHR( + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryGetWin32HandleInfoKHR( MemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryGetWin32HandleInfoKHR( VkMemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryGetWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + MemoryGetWin32HandleInfoKHR & operator=( MemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryGetWin32HandleInfoKHR & operator=( VkMemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryGetWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, handleType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryGetWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( MemoryGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( MemoryGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetWin32HandleInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = MemoryGetWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkMemoryGetZirconHandleInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryGetZirconHandleInfoFUCHSIA.html + struct MemoryGetZirconHandleInfoFUCHSIA + { + using NativeType = VkMemoryGetZirconHandleInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetZirconHandleInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryGetZirconHandleInfoFUCHSIA( + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryGetZirconHandleInfoFUCHSIA( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryGetZirconHandleInfoFUCHSIA( VkMemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryGetZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + MemoryGetZirconHandleInfoFUCHSIA & operator=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryGetZirconHandleInfoFUCHSIA & operator=( VkMemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryGetZirconHandleInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryGetZirconHandleInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory, handleType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryGetZirconHandleInfoFUCHSIA const & ) const = default; +# else + bool operator==( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryGetZirconHandleInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = MemoryGetZirconHandleInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkMemoryHeap, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryHeap.html + struct MemoryHeap + { + using NativeType = VkMemoryHeap; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryHeap( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, VULKAN_HPP_NAMESPACE::MemoryHeapFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT + : size{ size_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryHeap( MemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryHeap( VkMemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryHeap( *reinterpret_cast( &rhs ) ) {} + + MemoryHeap & operator=( MemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryHeap & operator=( VkMemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryHeap const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryHeap &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryHeap const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryHeap *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( size, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryHeap const & ) const = default; +#else + bool operator==( MemoryHeap const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( size == rhs.size ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( MemoryHeap const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::MemoryHeapFlags flags = {}; + }; + + // wrapper struct for struct VkMemoryHostPointerPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryHostPointerPropertiesEXT.html + struct MemoryHostPointerPropertiesEXT + { + using NativeType = VkMemoryHostPointerPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryHostPointerPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryHostPointerPropertiesEXT( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryHostPointerPropertiesEXT( MemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryHostPointerPropertiesEXT( VkMemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryHostPointerPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + MemoryHostPointerPropertiesEXT & operator=( MemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryHostPointerPropertiesEXT & operator=( VkMemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryHostPointerPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryHostPointerPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryHostPointerPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryHostPointerPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryTypeBits ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryHostPointerPropertiesEXT const & ) const = default; +#else + bool operator==( MemoryHostPointerPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( MemoryHostPointerPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryHostPointerPropertiesEXT; + void * pNext = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = MemoryHostPointerPropertiesEXT; + }; + + // wrapper struct for struct VkMemoryMapInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryMapInfo.html + struct MemoryMapInfo + { + using NativeType = VkMemoryMapInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryMapInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryMapInfo( VULKAN_HPP_NAMESPACE::MemoryMapFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , memory{ memory_ } + , offset{ offset_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryMapInfo( MemoryMapInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryMapInfo( VkMemoryMapInfo const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryMapInfo( *reinterpret_cast( &rhs ) ) {} + + MemoryMapInfo & operator=( MemoryMapInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryMapInfo & operator=( VkMemoryMapInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryMapInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryMapInfo & setFlags( VULKAN_HPP_NAMESPACE::MemoryMapFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryMapInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryMapInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryMapInfo & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryMapInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryMapInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryMapInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryMapInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, memory, offset, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryMapInfo const & ) const = default; +#else + bool operator==( MemoryMapInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( memory == rhs.memory ) && ( offset == rhs.offset ) && + ( size == rhs.size ); +# endif + } + + bool operator!=( MemoryMapInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryMapInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MemoryMapFlags flags = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = MemoryMapInfo; + }; + + using MemoryMapInfoKHR = MemoryMapInfo; + + // wrapper struct for struct VkMemoryMapPlacedInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryMapPlacedInfoEXT.html + struct MemoryMapPlacedInfoEXT + { + using NativeType = VkMemoryMapPlacedInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryMapPlacedInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryMapPlacedInfoEXT( void * pPlacedAddress_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pPlacedAddress{ pPlacedAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryMapPlacedInfoEXT( MemoryMapPlacedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryMapPlacedInfoEXT( VkMemoryMapPlacedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryMapPlacedInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MemoryMapPlacedInfoEXT & operator=( MemoryMapPlacedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryMapPlacedInfoEXT & operator=( VkMemoryMapPlacedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryMapPlacedInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryMapPlacedInfoEXT & setPPlacedAddress( void * pPlacedAddress_ ) VULKAN_HPP_NOEXCEPT + { + pPlacedAddress = pPlacedAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryMapPlacedInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryMapPlacedInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryMapPlacedInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryMapPlacedInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pPlacedAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryMapPlacedInfoEXT const & ) const = default; +#else + bool operator==( MemoryMapPlacedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pPlacedAddress == rhs.pPlacedAddress ); +# endif + } + + bool operator!=( MemoryMapPlacedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryMapPlacedInfoEXT; + const void * pNext = {}; + void * pPlacedAddress = {}; + }; + + template <> + struct CppType + { + using Type = MemoryMapPlacedInfoEXT; + }; + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkMemoryMetalHandlePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryMetalHandlePropertiesEXT.html + struct MemoryMetalHandlePropertiesEXT + { + using NativeType = VkMemoryMetalHandlePropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryMetalHandlePropertiesEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryMetalHandlePropertiesEXT( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryMetalHandlePropertiesEXT( MemoryMetalHandlePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryMetalHandlePropertiesEXT( VkMemoryMetalHandlePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryMetalHandlePropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + MemoryMetalHandlePropertiesEXT & operator=( MemoryMetalHandlePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryMetalHandlePropertiesEXT & operator=( VkMemoryMetalHandlePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryMetalHandlePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryMetalHandlePropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryMetalHandlePropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryMetalHandlePropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryTypeBits ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryMetalHandlePropertiesEXT const & ) const = default; +# else + bool operator==( MemoryMetalHandlePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( MemoryMetalHandlePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryMetalHandlePropertiesEXT; + void * pNext = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = MemoryMetalHandlePropertiesEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + // wrapper struct for struct VkMemoryOpaqueCaptureAddressAllocateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryOpaqueCaptureAddressAllocateInfo.html + struct MemoryOpaqueCaptureAddressAllocateInfo + { + using NativeType = VkMemoryOpaqueCaptureAddressAllocateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryOpaqueCaptureAddressAllocateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryOpaqueCaptureAddressAllocateInfo( uint64_t opaqueCaptureAddress_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , opaqueCaptureAddress{ opaqueCaptureAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryOpaqueCaptureAddressAllocateInfo( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryOpaqueCaptureAddressAllocateInfo( VkMemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryOpaqueCaptureAddressAllocateInfo( *reinterpret_cast( &rhs ) ) + { + } + + MemoryOpaqueCaptureAddressAllocateInfo & operator=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryOpaqueCaptureAddressAllocateInfo & operator=( VkMemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo & setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT + { + opaqueCaptureAddress = opaqueCaptureAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryOpaqueCaptureAddressAllocateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryOpaqueCaptureAddressAllocateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryOpaqueCaptureAddressAllocateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryOpaqueCaptureAddressAllocateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, opaqueCaptureAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryOpaqueCaptureAddressAllocateInfo const & ) const = default; +#else + bool operator==( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureAddress == rhs.opaqueCaptureAddress ); +# endif + } + + bool operator!=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryOpaqueCaptureAddressAllocateInfo; + const void * pNext = {}; + uint64_t opaqueCaptureAddress = {}; + }; + + template <> + struct CppType + { + using Type = MemoryOpaqueCaptureAddressAllocateInfo; + }; + + using MemoryOpaqueCaptureAddressAllocateInfoKHR = MemoryOpaqueCaptureAddressAllocateInfo; + + // wrapper struct for struct VkMemoryPriorityAllocateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryPriorityAllocateInfoEXT.html + struct MemoryPriorityAllocateInfoEXT + { + using NativeType = VkMemoryPriorityAllocateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryPriorityAllocateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryPriorityAllocateInfoEXT( float priority_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , priority{ priority_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryPriorityAllocateInfoEXT( MemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryPriorityAllocateInfoEXT( VkMemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryPriorityAllocateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MemoryPriorityAllocateInfoEXT & operator=( MemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryPriorityAllocateInfoEXT & operator=( VkMemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT & setPriority( float priority_ ) VULKAN_HPP_NOEXCEPT + { + priority = priority_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryPriorityAllocateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryPriorityAllocateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryPriorityAllocateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryPriorityAllocateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, priority ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryPriorityAllocateInfoEXT const & ) const = default; +#else + bool operator==( MemoryPriorityAllocateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( priority == rhs.priority ); +# endif + } + + bool operator!=( MemoryPriorityAllocateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryPriorityAllocateInfoEXT; + const void * pNext = {}; + float priority = {}; + }; + + template <> + struct CppType + { + using Type = MemoryPriorityAllocateInfoEXT; + }; + + // wrapper struct for struct VkMemoryRequirements, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryRequirements.html + struct MemoryRequirements + { + using NativeType = VkMemoryRequirements; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryRequirements( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize alignment_ = {}, + uint32_t memoryTypeBits_ = {} ) VULKAN_HPP_NOEXCEPT + : size{ size_ } + , alignment{ alignment_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryRequirements( MemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryRequirements( VkMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryRequirements( *reinterpret_cast( &rhs ) ) {} + + MemoryRequirements & operator=( MemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryRequirements & operator=( VkMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryRequirements &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryRequirements const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryRequirements *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( size, alignment, memoryTypeBits ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryRequirements const & ) const = default; +#else + bool operator==( MemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( size == rhs.size ) && ( alignment == rhs.alignment ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( MemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::DeviceSize alignment = {}; + uint32_t memoryTypeBits = {}; + }; + + // wrapper struct for struct VkMemoryRequirements2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryRequirements2.html + struct MemoryRequirements2 + { + using NativeType = VkMemoryRequirements2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryRequirements2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryRequirements2( VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryRequirements{ memoryRequirements_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryRequirements2( MemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryRequirements2( VkMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryRequirements2( *reinterpret_cast( &rhs ) ) + { + } + + MemoryRequirements2 & operator=( MemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryRequirements2 & operator=( VkMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryRequirements2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryRequirements2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryRequirements ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryRequirements2 const & ) const = default; +#else + bool operator==( MemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryRequirements == rhs.memoryRequirements ); +# endif + } + + bool operator!=( MemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryRequirements2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements = {}; + }; + + template <> + struct CppType + { + using Type = MemoryRequirements2; + }; + + using MemoryRequirements2KHR = MemoryRequirements2; + + // wrapper struct for struct VkMemoryType, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryType.html + struct MemoryType + { + using NativeType = VkMemoryType; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryType( VULKAN_HPP_NAMESPACE::MemoryPropertyFlags propertyFlags_ = {}, uint32_t heapIndex_ = {} ) VULKAN_HPP_NOEXCEPT + : propertyFlags{ propertyFlags_ } + , heapIndex{ heapIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryType( MemoryType const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryType( VkMemoryType const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryType( *reinterpret_cast( &rhs ) ) {} + + MemoryType & operator=( MemoryType const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryType & operator=( VkMemoryType const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryType const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryType &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryType const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryType *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( propertyFlags, heapIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryType const & ) const = default; +#else + bool operator==( MemoryType const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( propertyFlags == rhs.propertyFlags ) && ( heapIndex == rhs.heapIndex ); +# endif + } + + bool operator!=( MemoryType const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::MemoryPropertyFlags propertyFlags = {}; + uint32_t heapIndex = {}; + }; + + // wrapper struct for struct VkMemoryUnmapInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryUnmapInfo.html + struct MemoryUnmapInfo + { + using NativeType = VkMemoryUnmapInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryUnmapInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryUnmapInfo( VULKAN_HPP_NAMESPACE::MemoryUnmapFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , memory{ memory_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryUnmapInfo( MemoryUnmapInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryUnmapInfo( VkMemoryUnmapInfo const & rhs ) VULKAN_HPP_NOEXCEPT : MemoryUnmapInfo( *reinterpret_cast( &rhs ) ) {} + + MemoryUnmapInfo & operator=( MemoryUnmapInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryUnmapInfo & operator=( VkMemoryUnmapInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MemoryUnmapInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryUnmapInfo & setFlags( VULKAN_HPP_NAMESPACE::MemoryUnmapFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MemoryUnmapInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMemoryUnmapInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryUnmapInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryUnmapInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryUnmapInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, memory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryUnmapInfo const & ) const = default; +#else + bool operator==( MemoryUnmapInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( memory == rhs.memory ); +# endif + } + + bool operator!=( MemoryUnmapInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryUnmapInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MemoryUnmapFlags flags = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + }; + + template <> + struct CppType + { + using Type = MemoryUnmapInfo; + }; + + using MemoryUnmapInfoKHR = MemoryUnmapInfo; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkMemoryWin32HandlePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryWin32HandlePropertiesKHR.html + struct MemoryWin32HandlePropertiesKHR + { + using NativeType = VkMemoryWin32HandlePropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryWin32HandlePropertiesKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryWin32HandlePropertiesKHR( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryWin32HandlePropertiesKHR( MemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryWin32HandlePropertiesKHR( VkMemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryWin32HandlePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + MemoryWin32HandlePropertiesKHR & operator=( MemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryWin32HandlePropertiesKHR & operator=( VkMemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryWin32HandlePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryWin32HandlePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryWin32HandlePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryWin32HandlePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryTypeBits ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryWin32HandlePropertiesKHR const & ) const = default; +# else + bool operator==( MemoryWin32HandlePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( MemoryWin32HandlePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryWin32HandlePropertiesKHR; + void * pNext = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = MemoryWin32HandlePropertiesKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkMemoryZirconHandlePropertiesFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMemoryZirconHandlePropertiesFUCHSIA.html + struct MemoryZirconHandlePropertiesFUCHSIA + { + using NativeType = VkMemoryZirconHandlePropertiesFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryZirconHandlePropertiesFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MemoryZirconHandlePropertiesFUCHSIA( uint32_t memoryTypeBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR MemoryZirconHandlePropertiesFUCHSIA( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MemoryZirconHandlePropertiesFUCHSIA( VkMemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : MemoryZirconHandlePropertiesFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + MemoryZirconHandlePropertiesFUCHSIA & operator=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MemoryZirconHandlePropertiesFUCHSIA & operator=( VkMemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMemoryZirconHandlePropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryZirconHandlePropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMemoryZirconHandlePropertiesFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMemoryZirconHandlePropertiesFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryTypeBits ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MemoryZirconHandlePropertiesFUCHSIA const & ) const = default; +# else + bool operator==( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryZirconHandlePropertiesFUCHSIA; + void * pNext = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = MemoryZirconHandlePropertiesFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + // wrapper struct for struct VkMetalSurfaceCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMetalSurfaceCreateInfoEXT.html + struct MetalSurfaceCreateInfoEXT + { + using NativeType = VkMetalSurfaceCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMetalSurfaceCreateInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MetalSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ = {}, + const CAMetalLayer * pLayer_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pLayer{ pLayer_ } + { + } + + VULKAN_HPP_CONSTEXPR MetalSurfaceCreateInfoEXT( MetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MetalSurfaceCreateInfoEXT( VkMetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MetalSurfaceCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MetalSurfaceCreateInfoEXT & operator=( MetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MetalSurfaceCreateInfoEXT & operator=( VkMetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setPLayer( const CAMetalLayer * pLayer_ ) VULKAN_HPP_NOEXCEPT + { + pLayer = pLayer_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMetalSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMetalSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMetalSurfaceCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMetalSurfaceCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pLayer ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MetalSurfaceCreateInfoEXT const & ) const = default; +# else + bool operator==( MetalSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pLayer == rhs.pLayer ); +# endif + } + + bool operator!=( MetalSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMetalSurfaceCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags = {}; + const CAMetalLayer * pLayer = {}; + }; + + template <> + struct CppType + { + using Type = MetalSurfaceCreateInfoEXT; + }; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + // wrapper struct for struct VkMicromapBuildInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapBuildInfoEXT.html + struct MicromapBuildInfoEXT + { + using NativeType = VkMicromapBuildInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMicromapBuildInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT( VULKAN_HPP_NAMESPACE::MicromapTypeEXT type_ = VULKAN_HPP_NAMESPACE::MicromapTypeEXT::eOpacityMicromap, + VULKAN_HPP_NAMESPACE::BuildMicromapFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT mode_ = VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT::eBuild, + VULKAN_HPP_NAMESPACE::MicromapEXT dstMicromap_ = {}, + uint32_t usageCountsCount_ = {}, + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts_ = {}, + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR triangleArray_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize triangleArrayStride_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , flags{ flags_ } + , mode{ mode_ } + , dstMicromap{ dstMicromap_ } + , usageCountsCount{ usageCountsCount_ } + , pUsageCounts{ pUsageCounts_ } + , ppUsageCounts{ ppUsageCounts_ } + , data{ data_ } + , scratchData{ scratchData_ } + , triangleArray{ triangleArray_ } + , triangleArrayStride{ triangleArrayStride_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT( MicromapBuildInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MicromapBuildInfoEXT( VkMicromapBuildInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MicromapBuildInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MicromapBuildInfoEXT( VULKAN_HPP_NAMESPACE::MicromapTypeEXT type_, + VULKAN_HPP_NAMESPACE::BuildMicromapFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT mode_, + VULKAN_HPP_NAMESPACE::MicromapEXT dstMicromap_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & usageCounts_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pUsageCounts_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData_ = {}, + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR triangleArray_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize triangleArrayStride_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , type( type_ ) + , flags( flags_ ) + , mode( mode_ ) + , dstMicromap( dstMicromap_ ) + , usageCountsCount( static_cast( !usageCounts_.empty() ? usageCounts_.size() : pUsageCounts_.size() ) ) + , pUsageCounts( usageCounts_.data() ) + , ppUsageCounts( pUsageCounts_.data() ) + , data( data_ ) + , scratchData( scratchData_ ) + , triangleArray( triangleArray_ ) + , triangleArrayStride( triangleArrayStride_ ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( ( !usageCounts_.empty() + !pUsageCounts_.empty() ) <= 1 ); +# else + if ( 1 < ( !usageCounts_.empty() + !pUsageCounts_.empty() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::MicromapBuildInfoEXT::MicromapBuildInfoEXT: 1 < ( !usageCounts_.empty() + !pUsageCounts_.empty() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + MicromapBuildInfoEXT & operator=( MicromapBuildInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MicromapBuildInfoEXT & operator=( VkMicromapBuildInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setType( VULKAN_HPP_NAMESPACE::MicromapTypeEXT type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::BuildMicromapFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setMode( VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT mode_ ) VULKAN_HPP_NOEXCEPT + { + mode = mode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setDstMicromap( VULKAN_HPP_NAMESPACE::MicromapEXT dstMicromap_ ) VULKAN_HPP_NOEXCEPT + { + dstMicromap = dstMicromap_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setUsageCountsCount( uint32_t usageCountsCount_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = usageCountsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setPUsageCounts( const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + pUsageCounts = pUsageCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MicromapBuildInfoEXT & + setUsageCounts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & usageCounts_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = static_cast( usageCounts_.size() ); + pUsageCounts = usageCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setPpUsageCounts( const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + ppUsageCounts = ppUsageCounts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MicromapBuildInfoEXT & setPUsageCounts( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pUsageCounts_ ) VULKAN_HPP_NOEXCEPT + { + usageCountsCount = static_cast( pUsageCounts_.size() ); + ppUsageCounts = pUsageCounts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setScratchData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & scratchData_ ) VULKAN_HPP_NOEXCEPT + { + scratchData = scratchData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & + setTriangleArray( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & triangleArray_ ) VULKAN_HPP_NOEXCEPT + { + triangleArray = triangleArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildInfoEXT & setTriangleArrayStride( VULKAN_HPP_NAMESPACE::DeviceSize triangleArrayStride_ ) VULKAN_HPP_NOEXCEPT + { + triangleArrayStride = triangleArrayStride_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMicromapBuildInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapBuildInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapBuildInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMicromapBuildInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, type, flags, mode, dstMicromap, usageCountsCount, pUsageCounts, ppUsageCounts, data, scratchData, triangleArray, triangleArrayStride ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMicromapBuildInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MicromapTypeEXT type = VULKAN_HPP_NAMESPACE::MicromapTypeEXT::eOpacityMicromap; + VULKAN_HPP_NAMESPACE::BuildMicromapFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT mode = VULKAN_HPP_NAMESPACE::BuildMicromapModeEXT::eBuild; + VULKAN_HPP_NAMESPACE::MicromapEXT dstMicromap = {}; + uint32_t usageCountsCount = {}; + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * pUsageCounts = {}; + const VULKAN_HPP_NAMESPACE::MicromapUsageEXT * const * ppUsageCounts = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData = {}; + VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR triangleArray = {}; + VULKAN_HPP_NAMESPACE::DeviceSize triangleArrayStride = {}; + }; + + template <> + struct CppType + { + using Type = MicromapBuildInfoEXT; + }; + + // wrapper struct for struct VkMicromapBuildSizesInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapBuildSizesInfoEXT.html + struct MicromapBuildSizesInfoEXT + { + using NativeType = VkMicromapBuildSizesInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMicromapBuildSizesInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MicromapBuildSizesInfoEXT( VULKAN_HPP_NAMESPACE::DeviceSize micromapSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 discardable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , micromapSize{ micromapSize_ } + , buildScratchSize{ buildScratchSize_ } + , discardable{ discardable_ } + { + } + + VULKAN_HPP_CONSTEXPR MicromapBuildSizesInfoEXT( MicromapBuildSizesInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MicromapBuildSizesInfoEXT( VkMicromapBuildSizesInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MicromapBuildSizesInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MicromapBuildSizesInfoEXT & operator=( MicromapBuildSizesInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MicromapBuildSizesInfoEXT & operator=( VkMicromapBuildSizesInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MicromapBuildSizesInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildSizesInfoEXT & setMicromapSize( VULKAN_HPP_NAMESPACE::DeviceSize micromapSize_ ) VULKAN_HPP_NOEXCEPT + { + micromapSize = micromapSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildSizesInfoEXT & setBuildScratchSize( VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize_ ) VULKAN_HPP_NOEXCEPT + { + buildScratchSize = buildScratchSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapBuildSizesInfoEXT & setDiscardable( VULKAN_HPP_NAMESPACE::Bool32 discardable_ ) VULKAN_HPP_NOEXCEPT + { + discardable = discardable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMicromapBuildSizesInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapBuildSizesInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapBuildSizesInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMicromapBuildSizesInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, micromapSize, buildScratchSize, discardable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MicromapBuildSizesInfoEXT const & ) const = default; +#else + bool operator==( MicromapBuildSizesInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( micromapSize == rhs.micromapSize ) && ( buildScratchSize == rhs.buildScratchSize ) && + ( discardable == rhs.discardable ); +# endif + } + + bool operator!=( MicromapBuildSizesInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMicromapBuildSizesInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize micromapSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 discardable = {}; + }; + + template <> + struct CppType + { + using Type = MicromapBuildSizesInfoEXT; + }; + + // wrapper struct for struct VkMicromapCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapCreateInfoEXT.html + struct MicromapCreateInfoEXT + { + using NativeType = VkMicromapCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMicromapCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MicromapCreateInfoEXT( VULKAN_HPP_NAMESPACE::MicromapCreateFlagsEXT createFlags_ = {}, + VULKAN_HPP_NAMESPACE::Buffer buffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::MicromapTypeEXT type_ = VULKAN_HPP_NAMESPACE::MicromapTypeEXT::eOpacityMicromap, + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , createFlags{ createFlags_ } + , buffer{ buffer_ } + , offset{ offset_ } + , size{ size_ } + , type{ type_ } + , deviceAddress{ deviceAddress_ } + { + } + + VULKAN_HPP_CONSTEXPR MicromapCreateInfoEXT( MicromapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MicromapCreateInfoEXT( VkMicromapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MicromapCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MicromapCreateInfoEXT & operator=( MicromapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MicromapCreateInfoEXT & operator=( VkMicromapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setCreateFlags( VULKAN_HPP_NAMESPACE::MicromapCreateFlagsEXT createFlags_ ) VULKAN_HPP_NOEXCEPT + { + createFlags = createFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT + { + buffer = buffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setType( VULKAN_HPP_NAMESPACE::MicromapTypeEXT type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapCreateInfoEXT & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + deviceAddress = deviceAddress_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMicromapCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMicromapCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, createFlags, buffer, offset, size, type, deviceAddress ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MicromapCreateInfoEXT const & ) const = default; +#else + bool operator==( MicromapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createFlags == rhs.createFlags ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && + ( size == rhs.size ) && ( type == rhs.type ) && ( deviceAddress == rhs.deviceAddress ); +# endif + } + + bool operator!=( MicromapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMicromapCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::MicromapCreateFlagsEXT createFlags = {}; + VULKAN_HPP_NAMESPACE::Buffer buffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize offset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::MicromapTypeEXT type = VULKAN_HPP_NAMESPACE::MicromapTypeEXT::eOpacityMicromap; + VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {}; + }; + + template <> + struct CppType + { + using Type = MicromapCreateInfoEXT; + }; + + // wrapper struct for struct VkMicromapTriangleEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapTriangleEXT.html + struct MicromapTriangleEXT + { + using NativeType = VkMicromapTriangleEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MicromapTriangleEXT( uint32_t dataOffset_ = {}, uint16_t subdivisionLevel_ = {}, uint16_t format_ = {} ) VULKAN_HPP_NOEXCEPT + : dataOffset{ dataOffset_ } + , subdivisionLevel{ subdivisionLevel_ } + , format{ format_ } + { + } + + VULKAN_HPP_CONSTEXPR MicromapTriangleEXT( MicromapTriangleEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MicromapTriangleEXT( VkMicromapTriangleEXT const & rhs ) VULKAN_HPP_NOEXCEPT : MicromapTriangleEXT( *reinterpret_cast( &rhs ) ) + { + } + + MicromapTriangleEXT & operator=( MicromapTriangleEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MicromapTriangleEXT & operator=( VkMicromapTriangleEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MicromapTriangleEXT & setDataOffset( uint32_t dataOffset_ ) VULKAN_HPP_NOEXCEPT + { + dataOffset = dataOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapTriangleEXT & setSubdivisionLevel( uint16_t subdivisionLevel_ ) VULKAN_HPP_NOEXCEPT + { + subdivisionLevel = subdivisionLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapTriangleEXT & setFormat( uint16_t format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMicromapTriangleEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapTriangleEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapTriangleEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMicromapTriangleEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( dataOffset, subdivisionLevel, format ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MicromapTriangleEXT const & ) const = default; +#else + bool operator==( MicromapTriangleEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( dataOffset == rhs.dataOffset ) && ( subdivisionLevel == rhs.subdivisionLevel ) && ( format == rhs.format ); +# endif + } + + bool operator!=( MicromapTriangleEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t dataOffset = {}; + uint16_t subdivisionLevel = {}; + uint16_t format = {}; + }; + + // wrapper struct for struct VkMicromapVersionInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMicromapVersionInfoEXT.html + struct MicromapVersionInfoEXT + { + using NativeType = VkMicromapVersionInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMicromapVersionInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MicromapVersionInfoEXT( const uint8_t * pVersionData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pVersionData{ pVersionData_ } + { + } + + VULKAN_HPP_CONSTEXPR MicromapVersionInfoEXT( MicromapVersionInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MicromapVersionInfoEXT( VkMicromapVersionInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MicromapVersionInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MicromapVersionInfoEXT & operator=( MicromapVersionInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MicromapVersionInfoEXT & operator=( VkMicromapVersionInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MicromapVersionInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MicromapVersionInfoEXT & setPVersionData( const uint8_t * pVersionData_ ) VULKAN_HPP_NOEXCEPT + { + pVersionData = pVersionData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMicromapVersionInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapVersionInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMicromapVersionInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMicromapVersionInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pVersionData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MicromapVersionInfoEXT const & ) const = default; +#else + bool operator==( MicromapVersionInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pVersionData == rhs.pVersionData ); +# endif + } + + bool operator!=( MicromapVersionInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMicromapVersionInfoEXT; + const void * pNext = {}; + const uint8_t * pVersionData = {}; + }; + + template <> + struct CppType + { + using Type = MicromapVersionInfoEXT; + }; + + // wrapper struct for struct VkMultiDrawIndexedInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMultiDrawIndexedInfoEXT.html + struct MultiDrawIndexedInfoEXT + { + using NativeType = VkMultiDrawIndexedInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MultiDrawIndexedInfoEXT( uint32_t firstIndex_ = {}, uint32_t indexCount_ = {}, int32_t vertexOffset_ = {} ) VULKAN_HPP_NOEXCEPT + : firstIndex{ firstIndex_ } + , indexCount{ indexCount_ } + , vertexOffset{ vertexOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR MultiDrawIndexedInfoEXT( MultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MultiDrawIndexedInfoEXT( VkMultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MultiDrawIndexedInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MultiDrawIndexedInfoEXT & operator=( MultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MultiDrawIndexedInfoEXT & operator=( VkMultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT + { + firstIndex = firstIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT + { + indexCount = indexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT + { + vertexOffset = vertexOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMultiDrawIndexedInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiDrawIndexedInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiDrawIndexedInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMultiDrawIndexedInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( firstIndex, indexCount, vertexOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MultiDrawIndexedInfoEXT const & ) const = default; +#else + bool operator==( MultiDrawIndexedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( firstIndex == rhs.firstIndex ) && ( indexCount == rhs.indexCount ) && ( vertexOffset == rhs.vertexOffset ); +# endif + } + + bool operator!=( MultiDrawIndexedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t firstIndex = {}; + uint32_t indexCount = {}; + int32_t vertexOffset = {}; + }; + + // wrapper struct for struct VkMultiDrawInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMultiDrawInfoEXT.html + struct MultiDrawInfoEXT + { + using NativeType = VkMultiDrawInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MultiDrawInfoEXT( uint32_t firstVertex_ = {}, uint32_t vertexCount_ = {} ) VULKAN_HPP_NOEXCEPT + : firstVertex{ firstVertex_ } + , vertexCount{ vertexCount_ } + { + } + + VULKAN_HPP_CONSTEXPR MultiDrawInfoEXT( MultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MultiDrawInfoEXT( VkMultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : MultiDrawInfoEXT( *reinterpret_cast( &rhs ) ) {} + + MultiDrawInfoEXT & operator=( MultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MultiDrawInfoEXT & operator=( VkMultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT + { + firstVertex = firstVertex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexCount = vertexCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMultiDrawInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiDrawInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiDrawInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMultiDrawInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( firstVertex, vertexCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MultiDrawInfoEXT const & ) const = default; +#else + bool operator==( MultiDrawInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( firstVertex == rhs.firstVertex ) && ( vertexCount == rhs.vertexCount ); +# endif + } + + bool operator!=( MultiDrawInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t firstVertex = {}; + uint32_t vertexCount = {}; + }; + + // wrapper struct for struct VkMultisamplePropertiesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMultisamplePropertiesEXT.html + struct MultisamplePropertiesEXT + { + using NativeType = VkMultisamplePropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultisamplePropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxSampleLocationGridSize{ maxSampleLocationGridSize_ } + { + } + + VULKAN_HPP_CONSTEXPR MultisamplePropertiesEXT( MultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MultisamplePropertiesEXT( VkMultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MultisamplePropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + MultisamplePropertiesEXT & operator=( MultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MultisamplePropertiesEXT & operator=( VkMultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkMultisamplePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultisamplePropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultisamplePropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMultisamplePropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxSampleLocationGridSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MultisamplePropertiesEXT const & ) const = default; +#else + bool operator==( MultisamplePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize ); +# endif + } + + bool operator!=( MultisamplePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultisamplePropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize = {}; + }; + + template <> + struct CppType + { + using Type = MultisamplePropertiesEXT; + }; + + // wrapper struct for struct VkMultisampledRenderToSingleSampledInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMultisampledRenderToSingleSampledInfoEXT.html + struct MultisampledRenderToSingleSampledInfoEXT + { + using NativeType = VkMultisampledRenderToSingleSampledInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultisampledRenderToSingleSampledInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + MultisampledRenderToSingleSampledInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampledEnable_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , multisampledRenderToSingleSampledEnable{ multisampledRenderToSingleSampledEnable_ } + , rasterizationSamples{ rasterizationSamples_ } + { + } + + VULKAN_HPP_CONSTEXPR MultisampledRenderToSingleSampledInfoEXT( MultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MultisampledRenderToSingleSampledInfoEXT( VkMultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MultisampledRenderToSingleSampledInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + MultisampledRenderToSingleSampledInfoEXT & operator=( MultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MultisampledRenderToSingleSampledInfoEXT & operator=( VkMultisampledRenderToSingleSampledInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MultisampledRenderToSingleSampledInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultisampledRenderToSingleSampledInfoEXT & + setMultisampledRenderToSingleSampledEnable( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampledEnable_ ) VULKAN_HPP_NOEXCEPT + { + multisampledRenderToSingleSampledEnable = multisampledRenderToSingleSampledEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultisampledRenderToSingleSampledInfoEXT & + setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationSamples = rasterizationSamples_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMultisampledRenderToSingleSampledInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultisampledRenderToSingleSampledInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultisampledRenderToSingleSampledInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMultisampledRenderToSingleSampledInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, multisampledRenderToSingleSampledEnable, rasterizationSamples ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MultisampledRenderToSingleSampledInfoEXT const & ) const = default; +#else + bool operator==( MultisampledRenderToSingleSampledInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multisampledRenderToSingleSampledEnable == rhs.multisampledRenderToSingleSampledEnable ) && + ( rasterizationSamples == rhs.rasterizationSamples ); +# endif + } + + bool operator!=( MultisampledRenderToSingleSampledInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultisampledRenderToSingleSampledInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampledEnable = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + }; + + template <> + struct CppType + { + using Type = MultisampledRenderToSingleSampledInfoEXT; + }; + + // wrapper struct for struct VkMultiviewPerViewAttributesInfoNVX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMultiviewPerViewAttributesInfoNVX.html + struct MultiviewPerViewAttributesInfoNVX + { + using NativeType = VkMultiviewPerViewAttributesInfoNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultiviewPerViewAttributesInfoNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MultiviewPerViewAttributesInfoNVX( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , perViewAttributes{ perViewAttributes_ } + , perViewAttributesPositionXOnly{ perViewAttributesPositionXOnly_ } + { + } + + VULKAN_HPP_CONSTEXPR MultiviewPerViewAttributesInfoNVX( MultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MultiviewPerViewAttributesInfoNVX( VkMultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : MultiviewPerViewAttributesInfoNVX( *reinterpret_cast( &rhs ) ) + { + } + + MultiviewPerViewAttributesInfoNVX & operator=( MultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MultiviewPerViewAttributesInfoNVX & operator=( VkMultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & setPerViewAttributes( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes_ ) VULKAN_HPP_NOEXCEPT + { + perViewAttributes = perViewAttributes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & + setPerViewAttributesPositionXOnly( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly_ ) VULKAN_HPP_NOEXCEPT + { + perViewAttributesPositionXOnly = perViewAttributesPositionXOnly_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMultiviewPerViewAttributesInfoNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiviewPerViewAttributesInfoNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiviewPerViewAttributesInfoNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMultiviewPerViewAttributesInfoNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, perViewAttributes, perViewAttributesPositionXOnly ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MultiviewPerViewAttributesInfoNVX const & ) const = default; +#else + bool operator==( MultiviewPerViewAttributesInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perViewAttributes == rhs.perViewAttributes ) && + ( perViewAttributesPositionXOnly == rhs.perViewAttributesPositionXOnly ); +# endif + } + + bool operator!=( MultiviewPerViewAttributesInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultiviewPerViewAttributesInfoNVX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes = {}; + VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly = {}; + }; + + template <> + struct CppType + { + using Type = MultiviewPerViewAttributesInfoNVX; + }; + + // wrapper struct for struct VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM.html + struct MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM + { + using NativeType = VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM( uint32_t perViewRenderAreaCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pPerViewRenderAreas_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , perViewRenderAreaCount{ perViewRenderAreaCount_ } + , pPerViewRenderAreas{ pPerViewRenderAreas_ } + { + } + + VULKAN_HPP_CONSTEXPR + MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM( MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM( VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & perViewRenderAreas_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), perViewRenderAreaCount( static_cast( perViewRenderAreas_.size() ) ), pPerViewRenderAreas( perViewRenderAreas_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM & + operator=( MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM & operator=( VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM & + setPerViewRenderAreaCount( uint32_t perViewRenderAreaCount_ ) VULKAN_HPP_NOEXCEPT + { + perViewRenderAreaCount = perViewRenderAreaCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM & + setPPerViewRenderAreas( const VULKAN_HPP_NAMESPACE::Rect2D * pPerViewRenderAreas_ ) VULKAN_HPP_NOEXCEPT + { + pPerViewRenderAreas = pPerViewRenderAreas_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM & + setPerViewRenderAreas( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & perViewRenderAreas_ ) VULKAN_HPP_NOEXCEPT + { + perViewRenderAreaCount = static_cast( perViewRenderAreas_.size() ); + pPerViewRenderAreas = perViewRenderAreas_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, perViewRenderAreaCount, pPerViewRenderAreas ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & ) const = default; +#else + bool operator==( MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perViewRenderAreaCount == rhs.perViewRenderAreaCount ) && + ( pPerViewRenderAreas == rhs.pPerViewRenderAreas ); +# endif + } + + bool operator!=( MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + const void * pNext = {}; + uint32_t perViewRenderAreaCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pPerViewRenderAreas = {}; + }; + + template <> + struct CppType + { + using Type = MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM; + }; + + // wrapper struct for struct VkMutableDescriptorTypeListEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkMutableDescriptorTypeListEXT.html + struct MutableDescriptorTypeListEXT + { + using NativeType = VkMutableDescriptorTypeListEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MutableDescriptorTypeListEXT( uint32_t descriptorTypeCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes_ = {} ) VULKAN_HPP_NOEXCEPT + : descriptorTypeCount{ descriptorTypeCount_ } + , pDescriptorTypes{ pDescriptorTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR MutableDescriptorTypeListEXT( MutableDescriptorTypeListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MutableDescriptorTypeListEXT( VkMutableDescriptorTypeListEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MutableDescriptorTypeListEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MutableDescriptorTypeListEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorTypes_ ) + : descriptorTypeCount( static_cast( descriptorTypes_.size() ) ), pDescriptorTypes( descriptorTypes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + MutableDescriptorTypeListEXT & operator=( MutableDescriptorTypeListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MutableDescriptorTypeListEXT & operator=( VkMutableDescriptorTypeListEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListEXT & setDescriptorTypeCount( uint32_t descriptorTypeCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorTypeCount = descriptorTypeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListEXT & + setPDescriptorTypes( const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes_ ) VULKAN_HPP_NOEXCEPT + { + pDescriptorTypes = pDescriptorTypes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MutableDescriptorTypeListEXT & setDescriptorTypes( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorTypes_ ) VULKAN_HPP_NOEXCEPT + { + descriptorTypeCount = static_cast( descriptorTypes_.size() ); + pDescriptorTypes = descriptorTypes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMutableDescriptorTypeListEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMutableDescriptorTypeListEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMutableDescriptorTypeListEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMutableDescriptorTypeListEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( descriptorTypeCount, pDescriptorTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MutableDescriptorTypeListEXT const & ) const = default; +#else + bool operator==( MutableDescriptorTypeListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( descriptorTypeCount == rhs.descriptorTypeCount ) && ( pDescriptorTypes == rhs.pDescriptorTypes ); +# endif + } + + bool operator!=( MutableDescriptorTypeListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t descriptorTypeCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes = {}; + }; + + using MutableDescriptorTypeListVALVE = MutableDescriptorTypeListEXT; + + // wrapper struct for struct VkMutableDescriptorTypeCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkMutableDescriptorTypeCreateInfoEXT.html + struct MutableDescriptorTypeCreateInfoEXT + { + using NativeType = VkMutableDescriptorTypeCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMutableDescriptorTypeCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR MutableDescriptorTypeCreateInfoEXT( uint32_t mutableDescriptorTypeListCount_ = {}, + const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListEXT * pMutableDescriptorTypeLists_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mutableDescriptorTypeListCount{ mutableDescriptorTypeListCount_ } + , pMutableDescriptorTypeLists{ pMutableDescriptorTypeLists_ } + { + } + + VULKAN_HPP_CONSTEXPR MutableDescriptorTypeCreateInfoEXT( MutableDescriptorTypeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + MutableDescriptorTypeCreateInfoEXT( VkMutableDescriptorTypeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : MutableDescriptorTypeCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MutableDescriptorTypeCreateInfoEXT( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mutableDescriptorTypeLists_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , mutableDescriptorTypeListCount( static_cast( mutableDescriptorTypeLists_.size() ) ) + , pMutableDescriptorTypeLists( mutableDescriptorTypeLists_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + MutableDescriptorTypeCreateInfoEXT & operator=( MutableDescriptorTypeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + MutableDescriptorTypeCreateInfoEXT & operator=( VkMutableDescriptorTypeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoEXT & + setMutableDescriptorTypeListCount( uint32_t mutableDescriptorTypeListCount_ ) VULKAN_HPP_NOEXCEPT + { + mutableDescriptorTypeListCount = mutableDescriptorTypeListCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoEXT & + setPMutableDescriptorTypeLists( const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListEXT * pMutableDescriptorTypeLists_ ) VULKAN_HPP_NOEXCEPT + { + pMutableDescriptorTypeLists = pMutableDescriptorTypeLists_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + MutableDescriptorTypeCreateInfoEXT & setMutableDescriptorTypeLists( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & mutableDescriptorTypeLists_ ) + VULKAN_HPP_NOEXCEPT + { + mutableDescriptorTypeListCount = static_cast( mutableDescriptorTypeLists_.size() ); + pMutableDescriptorTypeLists = mutableDescriptorTypeLists_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkMutableDescriptorTypeCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMutableDescriptorTypeCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkMutableDescriptorTypeCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkMutableDescriptorTypeCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mutableDescriptorTypeListCount, pMutableDescriptorTypeLists ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( MutableDescriptorTypeCreateInfoEXT const & ) const = default; +#else + bool operator==( MutableDescriptorTypeCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mutableDescriptorTypeListCount == rhs.mutableDescriptorTypeListCount ) && + ( pMutableDescriptorTypeLists == rhs.pMutableDescriptorTypeLists ); +# endif + } + + bool operator!=( MutableDescriptorTypeCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMutableDescriptorTypeCreateInfoEXT; + const void * pNext = {}; + uint32_t mutableDescriptorTypeListCount = {}; + const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListEXT * pMutableDescriptorTypeLists = {}; + }; + + template <> + struct CppType + { + using Type = MutableDescriptorTypeCreateInfoEXT; + }; + + using MutableDescriptorTypeCreateInfoVALVE = MutableDescriptorTypeCreateInfoEXT; + +#if defined( VK_USE_PLATFORM_OHOS ) + // wrapper struct for struct VkOHSurfaceCreateInfoOHOS, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOHSurfaceCreateInfoOHOS.html + struct OHSurfaceCreateInfoOHOS + { + using NativeType = VkOHSurfaceCreateInfoOHOS; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOhSurfaceCreateInfoOHOS; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OHSurfaceCreateInfoOHOS( VULKAN_HPP_NAMESPACE::SurfaceCreateFlagsOHOS flags_ = {}, + OHNativeWindow * window_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , window{ window_ } + { + } + + VULKAN_HPP_CONSTEXPR OHSurfaceCreateInfoOHOS( OHSurfaceCreateInfoOHOS const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OHSurfaceCreateInfoOHOS( VkOHSurfaceCreateInfoOHOS const & rhs ) VULKAN_HPP_NOEXCEPT + : OHSurfaceCreateInfoOHOS( *reinterpret_cast( &rhs ) ) + { + } + + OHSurfaceCreateInfoOHOS & operator=( OHSurfaceCreateInfoOHOS const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OHSurfaceCreateInfoOHOS & operator=( VkOHSurfaceCreateInfoOHOS const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OHSurfaceCreateInfoOHOS & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OHSurfaceCreateInfoOHOS & setFlags( VULKAN_HPP_NAMESPACE::SurfaceCreateFlagsOHOS flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OHSurfaceCreateInfoOHOS & setWindow( OHNativeWindow * window_ ) VULKAN_HPP_NOEXCEPT + { + window = window_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOHSurfaceCreateInfoOHOS const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOHSurfaceCreateInfoOHOS &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOHSurfaceCreateInfoOHOS const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOHSurfaceCreateInfoOHOS *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, window ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OHSurfaceCreateInfoOHOS const & ) const = default; +# else + bool operator==( OHSurfaceCreateInfoOHOS const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window ); +# endif + } + + bool operator!=( OHSurfaceCreateInfoOHOS const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOhSurfaceCreateInfoOHOS; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceCreateFlagsOHOS flags = {}; + OHNativeWindow * window = {}; + }; + + template <> + struct CppType + { + using Type = OHSurfaceCreateInfoOHOS; + }; + + using SurfaceCreateInfoOHOS = OHSurfaceCreateInfoOHOS; +#endif /*VK_USE_PLATFORM_OHOS*/ + + // wrapper struct for struct VkOpaqueCaptureDescriptorDataCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpaqueCaptureDescriptorDataCreateInfoEXT.html + struct OpaqueCaptureDescriptorDataCreateInfoEXT + { + using NativeType = VkOpaqueCaptureDescriptorDataCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOpaqueCaptureDescriptorDataCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OpaqueCaptureDescriptorDataCreateInfoEXT( const void * opaqueCaptureDescriptorData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , opaqueCaptureDescriptorData{ opaqueCaptureDescriptorData_ } + { + } + + VULKAN_HPP_CONSTEXPR OpaqueCaptureDescriptorDataCreateInfoEXT( OpaqueCaptureDescriptorDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OpaqueCaptureDescriptorDataCreateInfoEXT( VkOpaqueCaptureDescriptorDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : OpaqueCaptureDescriptorDataCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + OpaqueCaptureDescriptorDataCreateInfoEXT & operator=( OpaqueCaptureDescriptorDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OpaqueCaptureDescriptorDataCreateInfoEXT & operator=( VkOpaqueCaptureDescriptorDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OpaqueCaptureDescriptorDataCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpaqueCaptureDescriptorDataCreateInfoEXT & + setOpaqueCaptureDescriptorData( const void * opaqueCaptureDescriptorData_ ) VULKAN_HPP_NOEXCEPT + { + opaqueCaptureDescriptorData = opaqueCaptureDescriptorData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOpaqueCaptureDescriptorDataCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpaqueCaptureDescriptorDataCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpaqueCaptureDescriptorDataCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOpaqueCaptureDescriptorDataCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, opaqueCaptureDescriptorData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpaqueCaptureDescriptorDataCreateInfoEXT const & ) const = default; +#else + bool operator==( OpaqueCaptureDescriptorDataCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureDescriptorData == rhs.opaqueCaptureDescriptorData ); +# endif + } + + bool operator!=( OpaqueCaptureDescriptorDataCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOpaqueCaptureDescriptorDataCreateInfoEXT; + const void * pNext = {}; + const void * opaqueCaptureDescriptorData = {}; + }; + + template <> + struct CppType + { + using Type = OpaqueCaptureDescriptorDataCreateInfoEXT; + }; + + // wrapper struct for struct VkOpticalFlowExecuteInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowExecuteInfoNV.html + struct OpticalFlowExecuteInfoNV + { + using NativeType = VkOpticalFlowExecuteInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOpticalFlowExecuteInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OpticalFlowExecuteInfoNV( VULKAN_HPP_NAMESPACE::OpticalFlowExecuteFlagsNV flags_ = {}, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pRegions_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR OpticalFlowExecuteInfoNV( OpticalFlowExecuteInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OpticalFlowExecuteInfoNV( VkOpticalFlowExecuteInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : OpticalFlowExecuteInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + OpticalFlowExecuteInfoNV( VULKAN_HPP_NAMESPACE::OpticalFlowExecuteFlagsNV flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), regionCount( static_cast( regions_.size() ) ), pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + OpticalFlowExecuteInfoNV & operator=( OpticalFlowExecuteInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OpticalFlowExecuteInfoNV & operator=( VkOpticalFlowExecuteInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OpticalFlowExecuteInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowExecuteInfoNV & setFlags( VULKAN_HPP_NAMESPACE::OpticalFlowExecuteFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowExecuteInfoNV & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowExecuteInfoNV & setPRegions( const VULKAN_HPP_NAMESPACE::Rect2D * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + OpticalFlowExecuteInfoNV & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOpticalFlowExecuteInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowExecuteInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowExecuteInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOpticalFlowExecuteInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpticalFlowExecuteInfoNV const & ) const = default; +#else + bool operator==( OpticalFlowExecuteInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( OpticalFlowExecuteInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOpticalFlowExecuteInfoNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowExecuteFlagsNV flags = {}; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = OpticalFlowExecuteInfoNV; + }; + + // wrapper struct for struct VkOpticalFlowImageFormatInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowImageFormatInfoNV.html + struct OpticalFlowImageFormatInfoNV + { + using NativeType = VkOpticalFlowImageFormatInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOpticalFlowImageFormatInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OpticalFlowImageFormatInfoNV( VULKAN_HPP_NAMESPACE::OpticalFlowUsageFlagsNV usage_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , usage{ usage_ } + { + } + + VULKAN_HPP_CONSTEXPR OpticalFlowImageFormatInfoNV( OpticalFlowImageFormatInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OpticalFlowImageFormatInfoNV( VkOpticalFlowImageFormatInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : OpticalFlowImageFormatInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + OpticalFlowImageFormatInfoNV & operator=( OpticalFlowImageFormatInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OpticalFlowImageFormatInfoNV & operator=( VkOpticalFlowImageFormatInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OpticalFlowImageFormatInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowImageFormatInfoNV & setUsage( VULKAN_HPP_NAMESPACE::OpticalFlowUsageFlagsNV usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOpticalFlowImageFormatInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowImageFormatInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowImageFormatInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOpticalFlowImageFormatInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, usage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpticalFlowImageFormatInfoNV const & ) const = default; +#else + bool operator==( OpticalFlowImageFormatInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( usage == rhs.usage ); +# endif + } + + bool operator!=( OpticalFlowImageFormatInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOpticalFlowImageFormatInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowUsageFlagsNV usage = {}; + }; + + template <> + struct CppType + { + using Type = OpticalFlowImageFormatInfoNV; + }; + + // wrapper struct for struct VkOpticalFlowImageFormatPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowImageFormatPropertiesNV.html + struct OpticalFlowImageFormatPropertiesNV + { + using NativeType = VkOpticalFlowImageFormatPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOpticalFlowImageFormatPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OpticalFlowImageFormatPropertiesNV( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + { + } + + VULKAN_HPP_CONSTEXPR OpticalFlowImageFormatPropertiesNV( OpticalFlowImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OpticalFlowImageFormatPropertiesNV( VkOpticalFlowImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : OpticalFlowImageFormatPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + OpticalFlowImageFormatPropertiesNV & operator=( OpticalFlowImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OpticalFlowImageFormatPropertiesNV & operator=( VkOpticalFlowImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkOpticalFlowImageFormatPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowImageFormatPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowImageFormatPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOpticalFlowImageFormatPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, format ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpticalFlowImageFormatPropertiesNV const & ) const = default; +#else + bool operator==( OpticalFlowImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ); +# endif + } + + bool operator!=( OpticalFlowImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOpticalFlowImageFormatPropertiesNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = OpticalFlowImageFormatPropertiesNV; + }; + + // wrapper struct for struct VkOpticalFlowSessionCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionCreateInfoNV.html + struct OpticalFlowSessionCreateInfoNV + { + using NativeType = VkOpticalFlowSessionCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOpticalFlowSessionCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OpticalFlowSessionCreateInfoNV( + uint32_t width_ = {}, + uint32_t height_ = {}, + VULKAN_HPP_NAMESPACE::Format imageFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format flowVectorFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format costFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV outputGridSize_ = {}, + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV hintGridSize_ = {}, + VULKAN_HPP_NAMESPACE::OpticalFlowPerformanceLevelNV performanceLevel_ = VULKAN_HPP_NAMESPACE::OpticalFlowPerformanceLevelNV::eUnknown, + VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateFlagsNV flags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , width{ width_ } + , height{ height_ } + , imageFormat{ imageFormat_ } + , flowVectorFormat{ flowVectorFormat_ } + , costFormat{ costFormat_ } + , outputGridSize{ outputGridSize_ } + , hintGridSize{ hintGridSize_ } + , performanceLevel{ performanceLevel_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR OpticalFlowSessionCreateInfoNV( OpticalFlowSessionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OpticalFlowSessionCreateInfoNV( VkOpticalFlowSessionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : OpticalFlowSessionCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + OpticalFlowSessionCreateInfoNV & operator=( OpticalFlowSessionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OpticalFlowSessionCreateInfoNV & operator=( VkOpticalFlowSessionCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setImageFormat( VULKAN_HPP_NAMESPACE::Format imageFormat_ ) VULKAN_HPP_NOEXCEPT + { + imageFormat = imageFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setFlowVectorFormat( VULKAN_HPP_NAMESPACE::Format flowVectorFormat_ ) VULKAN_HPP_NOEXCEPT + { + flowVectorFormat = flowVectorFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setCostFormat( VULKAN_HPP_NAMESPACE::Format costFormat_ ) VULKAN_HPP_NOEXCEPT + { + costFormat = costFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & + setOutputGridSize( VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV outputGridSize_ ) VULKAN_HPP_NOEXCEPT + { + outputGridSize = outputGridSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & + setHintGridSize( VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV hintGridSize_ ) VULKAN_HPP_NOEXCEPT + { + hintGridSize = hintGridSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & + setPerformanceLevel( VULKAN_HPP_NAMESPACE::OpticalFlowPerformanceLevelNV performanceLevel_ ) VULKAN_HPP_NOEXCEPT + { + performanceLevel = performanceLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOpticalFlowSessionCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowSessionCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowSessionCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOpticalFlowSessionCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, width, height, imageFormat, flowVectorFormat, costFormat, outputGridSize, hintGridSize, performanceLevel, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpticalFlowSessionCreateInfoNV const & ) const = default; +#else + bool operator==( OpticalFlowSessionCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( width == rhs.width ) && ( height == rhs.height ) && ( imageFormat == rhs.imageFormat ) && + ( flowVectorFormat == rhs.flowVectorFormat ) && ( costFormat == rhs.costFormat ) && ( outputGridSize == rhs.outputGridSize ) && + ( hintGridSize == rhs.hintGridSize ) && ( performanceLevel == rhs.performanceLevel ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( OpticalFlowSessionCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOpticalFlowSessionCreateInfoNV; + void * pNext = {}; + uint32_t width = {}; + uint32_t height = {}; + VULKAN_HPP_NAMESPACE::Format imageFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Format flowVectorFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Format costFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV outputGridSize = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV hintGridSize = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowPerformanceLevelNV performanceLevel = VULKAN_HPP_NAMESPACE::OpticalFlowPerformanceLevelNV::eUnknown; + VULKAN_HPP_NAMESPACE::OpticalFlowSessionCreateFlagsNV flags = {}; + }; + + template <> + struct CppType + { + using Type = OpticalFlowSessionCreateInfoNV; + }; + + // wrapper struct for struct VkOpticalFlowSessionCreatePrivateDataInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkOpticalFlowSessionCreatePrivateDataInfoNV.html + struct OpticalFlowSessionCreatePrivateDataInfoNV + { + using NativeType = VkOpticalFlowSessionCreatePrivateDataInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOpticalFlowSessionCreatePrivateDataInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OpticalFlowSessionCreatePrivateDataInfoNV( uint32_t id_ = {}, + uint32_t size_ = {}, + const void * pPrivateData_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , id{ id_ } + , size{ size_ } + , pPrivateData{ pPrivateData_ } + { + } + + VULKAN_HPP_CONSTEXPR OpticalFlowSessionCreatePrivateDataInfoNV( OpticalFlowSessionCreatePrivateDataInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OpticalFlowSessionCreatePrivateDataInfoNV( VkOpticalFlowSessionCreatePrivateDataInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : OpticalFlowSessionCreatePrivateDataInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + OpticalFlowSessionCreatePrivateDataInfoNV & operator=( OpticalFlowSessionCreatePrivateDataInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OpticalFlowSessionCreatePrivateDataInfoNV & operator=( VkOpticalFlowSessionCreatePrivateDataInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreatePrivateDataInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreatePrivateDataInfoNV & setId( uint32_t id_ ) VULKAN_HPP_NOEXCEPT + { + id = id_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreatePrivateDataInfoNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OpticalFlowSessionCreatePrivateDataInfoNV & setPPrivateData( const void * pPrivateData_ ) VULKAN_HPP_NOEXCEPT + { + pPrivateData = pPrivateData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOpticalFlowSessionCreatePrivateDataInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowSessionCreatePrivateDataInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOpticalFlowSessionCreatePrivateDataInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOpticalFlowSessionCreatePrivateDataInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, id, size, pPrivateData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OpticalFlowSessionCreatePrivateDataInfoNV const & ) const = default; +#else + bool operator==( OpticalFlowSessionCreatePrivateDataInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( id == rhs.id ) && ( size == rhs.size ) && ( pPrivateData == rhs.pPrivateData ); +# endif + } + + bool operator!=( OpticalFlowSessionCreatePrivateDataInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOpticalFlowSessionCreatePrivateDataInfoNV; + void * pNext = {}; + uint32_t id = {}; + uint32_t size = {}; + const void * pPrivateData = {}; + }; + + template <> + struct CppType + { + using Type = OpticalFlowSessionCreatePrivateDataInfoNV; + }; + + // wrapper struct for struct VkOutOfBandQueueTypeInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkOutOfBandQueueTypeInfoNV.html + struct OutOfBandQueueTypeInfoNV + { + using NativeType = VkOutOfBandQueueTypeInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eOutOfBandQueueTypeInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR OutOfBandQueueTypeInfoNV( VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeNV queueType_ = VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeNV::eRender, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queueType{ queueType_ } + { + } + + VULKAN_HPP_CONSTEXPR OutOfBandQueueTypeInfoNV( OutOfBandQueueTypeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + OutOfBandQueueTypeInfoNV( VkOutOfBandQueueTypeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : OutOfBandQueueTypeInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + OutOfBandQueueTypeInfoNV & operator=( OutOfBandQueueTypeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + OutOfBandQueueTypeInfoNV & operator=( VkOutOfBandQueueTypeInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 OutOfBandQueueTypeInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 OutOfBandQueueTypeInfoNV & setQueueType( VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeNV queueType_ ) VULKAN_HPP_NOEXCEPT + { + queueType = queueType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkOutOfBandQueueTypeInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOutOfBandQueueTypeInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkOutOfBandQueueTypeInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkOutOfBandQueueTypeInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queueType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( OutOfBandQueueTypeInfoNV const & ) const = default; +#else + bool operator==( OutOfBandQueueTypeInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueType == rhs.queueType ); +# endif + } + + bool operator!=( OutOfBandQueueTypeInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eOutOfBandQueueTypeInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeNV queueType = VULKAN_HPP_NAMESPACE::OutOfBandQueueTypeNV::eRender; + }; + + template <> + struct CppType + { + using Type = OutOfBandQueueTypeInfoNV; + }; + + // wrapper struct for struct VkPartitionedAccelerationStructureFlagsNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureFlagsNV.html + struct PartitionedAccelerationStructureFlagsNV + { + using NativeType = VkPartitionedAccelerationStructureFlagsNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePartitionedAccelerationStructureFlagsNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PartitionedAccelerationStructureFlagsNV( VULKAN_HPP_NAMESPACE::Bool32 enablePartitionTranslation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , enablePartitionTranslation{ enablePartitionTranslation_ } + { + } + + VULKAN_HPP_CONSTEXPR PartitionedAccelerationStructureFlagsNV( PartitionedAccelerationStructureFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PartitionedAccelerationStructureFlagsNV( VkPartitionedAccelerationStructureFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PartitionedAccelerationStructureFlagsNV( *reinterpret_cast( &rhs ) ) + { + } + + PartitionedAccelerationStructureFlagsNV & operator=( PartitionedAccelerationStructureFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PartitionedAccelerationStructureFlagsNV & operator=( VkPartitionedAccelerationStructureFlagsNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureFlagsNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureFlagsNV & + setEnablePartitionTranslation( VULKAN_HPP_NAMESPACE::Bool32 enablePartitionTranslation_ ) VULKAN_HPP_NOEXCEPT + { + enablePartitionTranslation = enablePartitionTranslation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPartitionedAccelerationStructureFlagsNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureFlagsNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureFlagsNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureFlagsNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, enablePartitionTranslation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PartitionedAccelerationStructureFlagsNV const & ) const = default; +#else + bool operator==( PartitionedAccelerationStructureFlagsNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( enablePartitionTranslation == rhs.enablePartitionTranslation ); +# endif + } + + bool operator!=( PartitionedAccelerationStructureFlagsNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePartitionedAccelerationStructureFlagsNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 enablePartitionTranslation = {}; + }; + + template <> + struct CppType + { + using Type = PartitionedAccelerationStructureFlagsNV; + }; + + // wrapper struct for struct VkPartitionedAccelerationStructureUpdateInstanceDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureUpdateInstanceDataNV.html + struct PartitionedAccelerationStructureUpdateInstanceDataNV + { + using NativeType = VkPartitionedAccelerationStructureUpdateInstanceDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PartitionedAccelerationStructureUpdateInstanceDataNV( uint32_t instanceIndex_ = {}, + uint32_t instanceContributionToHitGroupIndex_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure_ = {} ) VULKAN_HPP_NOEXCEPT + : instanceIndex{ instanceIndex_ } + , instanceContributionToHitGroupIndex{ instanceContributionToHitGroupIndex_ } + , accelerationStructure{ accelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR + PartitionedAccelerationStructureUpdateInstanceDataNV( PartitionedAccelerationStructureUpdateInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PartitionedAccelerationStructureUpdateInstanceDataNV( VkPartitionedAccelerationStructureUpdateInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PartitionedAccelerationStructureUpdateInstanceDataNV( *reinterpret_cast( &rhs ) ) + { + } + + PartitionedAccelerationStructureUpdateInstanceDataNV & + operator=( PartitionedAccelerationStructureUpdateInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PartitionedAccelerationStructureUpdateInstanceDataNV & operator=( VkPartitionedAccelerationStructureUpdateInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureUpdateInstanceDataNV & setInstanceIndex( uint32_t instanceIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceIndex = instanceIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureUpdateInstanceDataNV & + setInstanceContributionToHitGroupIndex( uint32_t instanceContributionToHitGroupIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceContributionToHitGroupIndex = instanceContributionToHitGroupIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureUpdateInstanceDataNV & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPartitionedAccelerationStructureUpdateInstanceDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureUpdateInstanceDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureUpdateInstanceDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureUpdateInstanceDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( instanceIndex, instanceContributionToHitGroupIndex, accelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PartitionedAccelerationStructureUpdateInstanceDataNV const & ) const = default; +#else + bool operator==( PartitionedAccelerationStructureUpdateInstanceDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( instanceIndex == rhs.instanceIndex ) && ( instanceContributionToHitGroupIndex == rhs.instanceContributionToHitGroupIndex ) && + ( accelerationStructure == rhs.accelerationStructure ); +# endif + } + + bool operator!=( PartitionedAccelerationStructureUpdateInstanceDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t instanceIndex = {}; + uint32_t instanceContributionToHitGroupIndex = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure = {}; + }; + + // wrapper struct for struct VkPartitionedAccelerationStructureWriteInstanceDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureWriteInstanceDataNV.html + struct PartitionedAccelerationStructureWriteInstanceDataNV + { + using NativeType = VkPartitionedAccelerationStructureWriteInstanceDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PartitionedAccelerationStructureWriteInstanceDataNV( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform_ = {}, + std::array const & explicitAABB_ = {}, + uint32_t instanceID_ = {}, + uint32_t instanceMask_ = {}, + uint32_t instanceContributionToHitGroupIndex_ = {}, + VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstanceFlagsNV instanceFlags_ = {}, + uint32_t instanceIndex_ = {}, + uint32_t partitionIndex_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure_ = {} ) VULKAN_HPP_NOEXCEPT + : transform{ transform_ } + , explicitAABB{ explicitAABB_ } + , instanceID{ instanceID_ } + , instanceMask{ instanceMask_ } + , instanceContributionToHitGroupIndex{ instanceContributionToHitGroupIndex_ } + , instanceFlags{ instanceFlags_ } + , instanceIndex{ instanceIndex_ } + , partitionIndex{ partitionIndex_ } + , accelerationStructure{ accelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PartitionedAccelerationStructureWriteInstanceDataNV( PartitionedAccelerationStructureWriteInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PartitionedAccelerationStructureWriteInstanceDataNV( VkPartitionedAccelerationStructureWriteInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PartitionedAccelerationStructureWriteInstanceDataNV( *reinterpret_cast( &rhs ) ) + { + } + + PartitionedAccelerationStructureWriteInstanceDataNV & + operator=( PartitionedAccelerationStructureWriteInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PartitionedAccelerationStructureWriteInstanceDataNV & operator=( VkPartitionedAccelerationStructureWriteInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & + setTransform( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transform_ ) VULKAN_HPP_NOEXCEPT + { + transform = transform_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & setExplicitAABB( std::array explicitAABB_ ) VULKAN_HPP_NOEXCEPT + { + explicitAABB = explicitAABB_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & setInstanceID( uint32_t instanceID_ ) VULKAN_HPP_NOEXCEPT + { + instanceID = instanceID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & setInstanceMask( uint32_t instanceMask_ ) VULKAN_HPP_NOEXCEPT + { + instanceMask = instanceMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & + setInstanceContributionToHitGroupIndex( uint32_t instanceContributionToHitGroupIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceContributionToHitGroupIndex = instanceContributionToHitGroupIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & + setInstanceFlags( VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstanceFlagsNV instanceFlags_ ) VULKAN_HPP_NOEXCEPT + { + instanceFlags = instanceFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & setInstanceIndex( uint32_t instanceIndex_ ) VULKAN_HPP_NOEXCEPT + { + instanceIndex = instanceIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & setPartitionIndex( uint32_t partitionIndex_ ) VULKAN_HPP_NOEXCEPT + { + partitionIndex = partitionIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWriteInstanceDataNV & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPartitionedAccelerationStructureWriteInstanceDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureWriteInstanceDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureWriteInstanceDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureWriteInstanceDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstanceFlagsNV const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::DeviceAddress const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( transform, + explicitAABB, + instanceID, + instanceMask, + instanceContributionToHitGroupIndex, + instanceFlags, + instanceIndex, + partitionIndex, + accelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PartitionedAccelerationStructureWriteInstanceDataNV const & ) const = default; +#else + bool operator==( PartitionedAccelerationStructureWriteInstanceDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( transform == rhs.transform ) && ( explicitAABB == rhs.explicitAABB ) && ( instanceID == rhs.instanceID ) && + ( instanceMask == rhs.instanceMask ) && ( instanceContributionToHitGroupIndex == rhs.instanceContributionToHitGroupIndex ) && + ( instanceFlags == rhs.instanceFlags ) && ( instanceIndex == rhs.instanceIndex ) && ( partitionIndex == rhs.partitionIndex ) && + ( accelerationStructure == rhs.accelerationStructure ); +# endif + } + + bool operator!=( PartitionedAccelerationStructureWriteInstanceDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D explicitAABB = {}; + uint32_t instanceID = {}; + uint32_t instanceMask = {}; + uint32_t instanceContributionToHitGroupIndex = {}; + VULKAN_HPP_NAMESPACE::PartitionedAccelerationStructureInstanceFlagsNV instanceFlags = {}; + uint32_t instanceIndex = {}; + uint32_t partitionIndex = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress accelerationStructure = {}; + }; + + // wrapper struct for struct VkPartitionedAccelerationStructureWritePartitionTranslationDataNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPartitionedAccelerationStructureWritePartitionTranslationDataNV.html + struct PartitionedAccelerationStructureWritePartitionTranslationDataNV + { + using NativeType = VkPartitionedAccelerationStructureWritePartitionTranslationDataNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PartitionedAccelerationStructureWritePartitionTranslationDataNV( uint32_t partitionIndex_ = {}, + std::array const & partitionTranslation_ = {} ) VULKAN_HPP_NOEXCEPT + : partitionIndex{ partitionIndex_ } + , partitionTranslation{ partitionTranslation_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWritePartitionTranslationDataNV( + PartitionedAccelerationStructureWritePartitionTranslationDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PartitionedAccelerationStructureWritePartitionTranslationDataNV( VkPartitionedAccelerationStructureWritePartitionTranslationDataNV const & rhs ) + VULKAN_HPP_NOEXCEPT + : PartitionedAccelerationStructureWritePartitionTranslationDataNV( + *reinterpret_cast( &rhs ) ) + { + } + + PartitionedAccelerationStructureWritePartitionTranslationDataNV & + operator=( PartitionedAccelerationStructureWritePartitionTranslationDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PartitionedAccelerationStructureWritePartitionTranslationDataNV & + operator=( VkPartitionedAccelerationStructureWritePartitionTranslationDataNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWritePartitionTranslationDataNV & setPartitionIndex( uint32_t partitionIndex_ ) VULKAN_HPP_NOEXCEPT + { + partitionIndex = partitionIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PartitionedAccelerationStructureWritePartitionTranslationDataNV & + setPartitionTranslation( std::array partitionTranslation_ ) VULKAN_HPP_NOEXCEPT + { + partitionTranslation = partitionTranslation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPartitionedAccelerationStructureWritePartitionTranslationDataNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureWritePartitionTranslationDataNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureWritePartitionTranslationDataNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPartitionedAccelerationStructureWritePartitionTranslationDataNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( partitionIndex, partitionTranslation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PartitionedAccelerationStructureWritePartitionTranslationDataNV const & ) const = default; +#else + bool operator==( PartitionedAccelerationStructureWritePartitionTranslationDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( partitionIndex == rhs.partitionIndex ) && ( partitionTranslation == rhs.partitionTranslation ); +# endif + } + + bool operator!=( PartitionedAccelerationStructureWritePartitionTranslationDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t partitionIndex = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D partitionTranslation = {}; + }; + + // wrapper struct for struct VkPastPresentationTimingGOOGLE, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPastPresentationTimingGOOGLE.html + struct PastPresentationTimingGOOGLE + { + using NativeType = VkPastPresentationTimingGOOGLE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PastPresentationTimingGOOGLE( uint32_t presentID_ = {}, + uint64_t desiredPresentTime_ = {}, + uint64_t actualPresentTime_ = {}, + uint64_t earliestPresentTime_ = {}, + uint64_t presentMargin_ = {} ) VULKAN_HPP_NOEXCEPT + : presentID{ presentID_ } + , desiredPresentTime{ desiredPresentTime_ } + , actualPresentTime{ actualPresentTime_ } + , earliestPresentTime{ earliestPresentTime_ } + , presentMargin{ presentMargin_ } + { + } + + VULKAN_HPP_CONSTEXPR PastPresentationTimingGOOGLE( PastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PastPresentationTimingGOOGLE( VkPastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + : PastPresentationTimingGOOGLE( *reinterpret_cast( &rhs ) ) + { + } + + PastPresentationTimingGOOGLE & operator=( PastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PastPresentationTimingGOOGLE & operator=( VkPastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPastPresentationTimingGOOGLE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPastPresentationTimingGOOGLE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPastPresentationTimingGOOGLE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPastPresentationTimingGOOGLE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( presentID, desiredPresentTime, actualPresentTime, earliestPresentTime, presentMargin ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PastPresentationTimingGOOGLE const & ) const = default; +#else + bool operator==( PastPresentationTimingGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( presentID == rhs.presentID ) && ( desiredPresentTime == rhs.desiredPresentTime ) && ( actualPresentTime == rhs.actualPresentTime ) && + ( earliestPresentTime == rhs.earliestPresentTime ) && ( presentMargin == rhs.presentMargin ); +# endif + } + + bool operator!=( PastPresentationTimingGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t presentID = {}; + uint64_t desiredPresentTime = {}; + uint64_t actualPresentTime = {}; + uint64_t earliestPresentTime = {}; + uint64_t presentMargin = {}; + }; + + // wrapper struct for struct VkPerTileBeginInfoQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerTileBeginInfoQCOM.html + struct PerTileBeginInfoQCOM + { + using NativeType = VkPerTileBeginInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerTileBeginInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PerTileBeginInfoQCOM( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR PerTileBeginInfoQCOM( PerTileBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerTileBeginInfoQCOM( VkPerTileBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PerTileBeginInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PerTileBeginInfoQCOM & operator=( PerTileBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerTileBeginInfoQCOM & operator=( VkPerTileBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerTileBeginInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerTileBeginInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerTileBeginInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerTileBeginInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerTileBeginInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerTileBeginInfoQCOM const & ) const = default; +#else + bool operator==( PerTileBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( PerTileBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerTileBeginInfoQCOM; + const void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = PerTileBeginInfoQCOM; + }; + + // wrapper struct for struct VkPerTileEndInfoQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerTileEndInfoQCOM.html + struct PerTileEndInfoQCOM + { + using NativeType = VkPerTileEndInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerTileEndInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PerTileEndInfoQCOM( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR PerTileEndInfoQCOM( PerTileEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerTileEndInfoQCOM( VkPerTileEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT : PerTileEndInfoQCOM( *reinterpret_cast( &rhs ) ) {} + + PerTileEndInfoQCOM & operator=( PerTileEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerTileEndInfoQCOM & operator=( VkPerTileEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerTileEndInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerTileEndInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerTileEndInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerTileEndInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerTileEndInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerTileEndInfoQCOM const & ) const = default; +#else + bool operator==( PerTileEndInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( PerTileEndInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerTileEndInfoQCOM; + const void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = PerTileEndInfoQCOM; + }; + + // wrapper struct for struct VkPerformanceConfigurationAcquireInfoINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceConfigurationAcquireInfoINTEL.html + struct PerformanceConfigurationAcquireInfoINTEL + { + using NativeType = VkPerformanceConfigurationAcquireInfoINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceConfigurationAcquireInfoINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PerformanceConfigurationAcquireInfoINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type_ = + VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + { + } + + VULKAN_HPP_CONSTEXPR PerformanceConfigurationAcquireInfoINTEL( PerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceConfigurationAcquireInfoINTEL( VkPerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceConfigurationAcquireInfoINTEL( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceConfigurationAcquireInfoINTEL & operator=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceConfigurationAcquireInfoINTEL & operator=( VkPerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL & + setType( VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceConfigurationAcquireInfoINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceConfigurationAcquireInfoINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceConfigurationAcquireInfoINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceConfigurationAcquireInfoINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceConfigurationAcquireInfoINTEL const & ) const = default; +#else + bool operator==( PerformanceConfigurationAcquireInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ); +# endif + } + + bool operator!=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceConfigurationAcquireInfoINTEL; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type = + VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated; + }; + + template <> + struct CppType + { + using Type = PerformanceConfigurationAcquireInfoINTEL; + }; + + // wrapper struct for struct VkPerformanceCounterDescriptionKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterDescriptionKHR.html + struct PerformanceCounterDescriptionKHR + { + using NativeType = VkPerformanceCounterDescriptionKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterDescriptionKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterDescriptionKHR( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagsKHR flags_ = {}, + std::array const & name_ = {}, + std::array const & category_ = {}, + std::array const & description_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , name{ name_ } + , category{ category_ } + , description{ description_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterDescriptionKHR( PerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceCounterDescriptionKHR( VkPerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceCounterDescriptionKHR( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceCounterDescriptionKHR & operator=( PerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceCounterDescriptionKHR & operator=( VkPerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPerformanceCounterDescriptionKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceCounterDescriptionKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceCounterDescriptionKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceCounterDescriptionKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, name, category, description ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( name, rhs.name ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( category, rhs.category ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( strcmp( name, rhs.name ) == 0 ) && + ( strcmp( category, rhs.category ) == 0 ) && ( strcmp( description, rhs.description ) == 0 ); + } + + bool operator!=( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceCounterDescriptionKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D category = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceCounterDescriptionKHR; + }; + + // wrapper struct for struct VkPerformanceCounterKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceCounterKHR.html + struct PerformanceCounterKHR + { + using NativeType = VkPerformanceCounterKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PerformanceCounterKHR( VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR unit_ = VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR::eGeneric, + VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR scope_ = VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR::eCommandBuffer, + VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR storage_ = VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR::eInt32, + std::array const & uuid_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , unit{ unit_ } + , scope{ scope_ } + , storage{ storage_ } + , uuid{ uuid_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterKHR( PerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceCounterKHR( VkPerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceCounterKHR( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceCounterKHR & operator=( PerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceCounterKHR & operator=( VkPerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPerformanceCounterKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceCounterKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceCounterKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceCounterKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, unit, scope, storage, uuid ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceCounterKHR const & ) const = default; +#else + bool operator==( PerformanceCounterKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( unit == rhs.unit ) && ( scope == rhs.scope ) && ( storage == rhs.storage ) && + ( uuid == rhs.uuid ); +# endif + } + + bool operator!=( PerformanceCounterKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceCounterKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR unit = VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR::eGeneric; + VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR scope = VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR::eCommandBuffer; + VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR storage = VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR::eInt32; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D uuid = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceCounterKHR; + }; + + union PerformanceCounterResultKHR + { + using NativeType = VkPerformanceCounterResultKHR; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( int32_t int32_ = {} ) : int32( int32_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( int64_t int64_ ) : int64( int64_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( uint32_t uint32_ ) : uint32( uint32_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( uint64_t uint64_ ) : uint64( uint64_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( float float32_ ) : float32( float32_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( double float64_ ) : float64( float64_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setInt32( int32_t int32_ ) VULKAN_HPP_NOEXCEPT + { + int32 = int32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setInt64( int64_t int64_ ) VULKAN_HPP_NOEXCEPT + { + int64 = int64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setUint32( uint32_t uint32_ ) VULKAN_HPP_NOEXCEPT + { + uint32 = uint32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setUint64( uint64_t uint64_ ) VULKAN_HPP_NOEXCEPT + { + uint64 = uint64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setFloat32( float float32_ ) VULKAN_HPP_NOEXCEPT + { + float32 = float32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setFloat64( double float64_ ) VULKAN_HPP_NOEXCEPT + { + float64 = float64_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceCounterResultKHR const &() const + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceCounterResultKHR &() + { + return *reinterpret_cast( this ); + } + + int32_t int32; + int64_t int64; + uint32_t uint32; + uint64_t uint64; + float float32; + double float64; + }; + + // wrapper struct for struct VkPerformanceMarkerInfoINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceMarkerInfoINTEL.html + struct PerformanceMarkerInfoINTEL + { + using NativeType = VkPerformanceMarkerInfoINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceMarkerInfoINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PerformanceMarkerInfoINTEL( uint64_t marker_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , marker{ marker_ } + { + } + + VULKAN_HPP_CONSTEXPR PerformanceMarkerInfoINTEL( PerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceMarkerInfoINTEL( VkPerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceMarkerInfoINTEL( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceMarkerInfoINTEL & operator=( PerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceMarkerInfoINTEL & operator=( VkPerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL & setMarker( uint64_t marker_ ) VULKAN_HPP_NOEXCEPT + { + marker = marker_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceMarkerInfoINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceMarkerInfoINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, marker ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceMarkerInfoINTEL const & ) const = default; +#else + bool operator==( PerformanceMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( marker == rhs.marker ); +# endif + } + + bool operator!=( PerformanceMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceMarkerInfoINTEL; + const void * pNext = {}; + uint64_t marker = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceMarkerInfoINTEL; + }; + + // wrapper struct for struct VkPerformanceOverrideInfoINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceOverrideInfoINTEL.html + struct PerformanceOverrideInfoINTEL + { + using NativeType = VkPerformanceOverrideInfoINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceOverrideInfoINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PerformanceOverrideInfoINTEL( + VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type_ = VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL::eNullHardware, + VULKAN_HPP_NAMESPACE::Bool32 enable_ = {}, + uint64_t parameter_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , enable{ enable_ } + , parameter{ parameter_ } + { + } + + VULKAN_HPP_CONSTEXPR PerformanceOverrideInfoINTEL( PerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceOverrideInfoINTEL( VkPerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceOverrideInfoINTEL( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceOverrideInfoINTEL & operator=( PerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceOverrideInfoINTEL & operator=( VkPerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setType( VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setEnable( VULKAN_HPP_NAMESPACE::Bool32 enable_ ) VULKAN_HPP_NOEXCEPT + { + enable = enable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setParameter( uint64_t parameter_ ) VULKAN_HPP_NOEXCEPT + { + parameter = parameter_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceOverrideInfoINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceOverrideInfoINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceOverrideInfoINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceOverrideInfoINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, enable, parameter ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceOverrideInfoINTEL const & ) const = default; +#else + bool operator==( PerformanceOverrideInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( enable == rhs.enable ) && ( parameter == rhs.parameter ); +# endif + } + + bool operator!=( PerformanceOverrideInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceOverrideInfoINTEL; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type = VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL::eNullHardware; + VULKAN_HPP_NAMESPACE::Bool32 enable = {}; + uint64_t parameter = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceOverrideInfoINTEL; + }; + + // wrapper struct for struct VkPerformanceQuerySubmitInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceQuerySubmitInfoKHR.html + struct PerformanceQuerySubmitInfoKHR + { + using NativeType = VkPerformanceQuerySubmitInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceQuerySubmitInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PerformanceQuerySubmitInfoKHR( uint32_t counterPassIndex_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , counterPassIndex{ counterPassIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR PerformanceQuerySubmitInfoKHR( PerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceQuerySubmitInfoKHR( VkPerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceQuerySubmitInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceQuerySubmitInfoKHR & operator=( PerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceQuerySubmitInfoKHR & operator=( VkPerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR & setCounterPassIndex( uint32_t counterPassIndex_ ) VULKAN_HPP_NOEXCEPT + { + counterPassIndex = counterPassIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceQuerySubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceQuerySubmitInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceQuerySubmitInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceQuerySubmitInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, counterPassIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceQuerySubmitInfoKHR const & ) const = default; +#else + bool operator==( PerformanceQuerySubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( counterPassIndex == rhs.counterPassIndex ); +# endif + } + + bool operator!=( PerformanceQuerySubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceQuerySubmitInfoKHR; + const void * pNext = {}; + uint32_t counterPassIndex = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceQuerySubmitInfoKHR; + }; + + // wrapper struct for struct VkPerformanceStreamMarkerInfoINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceStreamMarkerInfoINTEL.html + struct PerformanceStreamMarkerInfoINTEL + { + using NativeType = VkPerformanceStreamMarkerInfoINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceStreamMarkerInfoINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PerformanceStreamMarkerInfoINTEL( uint32_t marker_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , marker{ marker_ } + { + } + + VULKAN_HPP_CONSTEXPR PerformanceStreamMarkerInfoINTEL( PerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceStreamMarkerInfoINTEL( VkPerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceStreamMarkerInfoINTEL( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceStreamMarkerInfoINTEL & operator=( PerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceStreamMarkerInfoINTEL & operator=( VkPerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL & setMarker( uint32_t marker_ ) VULKAN_HPP_NOEXCEPT + { + marker = marker_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceStreamMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceStreamMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceStreamMarkerInfoINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceStreamMarkerInfoINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, marker ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PerformanceStreamMarkerInfoINTEL const & ) const = default; +#else + bool operator==( PerformanceStreamMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( marker == rhs.marker ); +# endif + } + + bool operator!=( PerformanceStreamMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePerformanceStreamMarkerInfoINTEL; + const void * pNext = {}; + uint32_t marker = {}; + }; + + template <> + struct CppType + { + using Type = PerformanceStreamMarkerInfoINTEL; + }; + + union PerformanceValueDataINTEL + { + using NativeType = VkPerformanceValueDataINTEL; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( uint32_t value32_ = {} ) : value32( value32_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( uint64_t value64_ ) : value64( value64_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( float valueFloat_ ) : valueFloat( valueFloat_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( const char * valueString_ ) : valueString( valueString_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValue32( uint32_t value32_ ) VULKAN_HPP_NOEXCEPT + { + value32 = value32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValue64( uint64_t value64_ ) VULKAN_HPP_NOEXCEPT + { + value64 = value64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueFloat( float valueFloat_ ) VULKAN_HPP_NOEXCEPT + { + valueFloat = valueFloat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueBool( VULKAN_HPP_NAMESPACE::Bool32 valueBool_ ) VULKAN_HPP_NOEXCEPT + { + valueBool = valueBool_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueString( const char * valueString_ ) VULKAN_HPP_NOEXCEPT + { + valueString = valueString_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPerformanceValueDataINTEL const &() const + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceValueDataINTEL &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + uint32_t value32; + uint64_t value64; + float valueFloat; + VULKAN_HPP_NAMESPACE::Bool32 valueBool; + const char * valueString; +#else + uint32_t value32; + uint64_t value64; + float valueFloat; + VkBool32 valueBool; + const char * valueString; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkPerformanceValueINTEL, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPerformanceValueINTEL.html + struct PerformanceValueINTEL + { + using NativeType = VkPerformanceValueINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PerformanceValueINTEL( VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type_ = VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL::eUint32, + VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL data_ = {} ) VULKAN_HPP_NOEXCEPT + : type{ type_ } + , data{ data_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL( PerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PerformanceValueINTEL( VkPerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : PerformanceValueINTEL( *reinterpret_cast( &rhs ) ) + { + } + + PerformanceValueINTEL & operator=( PerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PerformanceValueINTEL & operator=( VkPerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPerformanceValueINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceValueINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPerformanceValueINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPerformanceValueINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( type, data ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type = VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL::eUint32; + VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL data = {}; + }; + + // wrapper struct for struct VkPhysicalDevice16BitStorageFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevice16BitStorageFeatures.html + struct PhysicalDevice16BitStorageFeatures + { + using NativeType = VkPhysicalDevice16BitStorageFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevice16BitStorageFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevice16BitStorageFeatures( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , storageBuffer16BitAccess{ storageBuffer16BitAccess_ } + , uniformAndStorageBuffer16BitAccess{ uniformAndStorageBuffer16BitAccess_ } + , storagePushConstant16{ storagePushConstant16_ } + , storageInputOutput16{ storageInputOutput16_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevice16BitStorageFeatures( PhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevice16BitStorageFeatures( VkPhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevice16BitStorageFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevice16BitStorageFeatures & operator=( PhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevice16BitStorageFeatures & operator=( VkPhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & + setStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + storageBuffer16BitAccess = storageBuffer16BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & + setUniformAndStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & + setStoragePushConstant16( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ ) VULKAN_HPP_NOEXCEPT + { + storagePushConstant16 = storagePushConstant16_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & + setStorageInputOutput16( VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ ) VULKAN_HPP_NOEXCEPT + { + storageInputOutput16 = storageInputOutput16_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevice16BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevice16BitStorageFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevice16BitStorageFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevice16BitStorageFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, storageBuffer16BitAccess, uniformAndStorageBuffer16BitAccess, storagePushConstant16, storageInputOutput16 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevice16BitStorageFeatures const & ) const = default; +#else + bool operator==( PhysicalDevice16BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess ) && + ( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess ) && ( storagePushConstant16 == rhs.storagePushConstant16 ) && + ( storageInputOutput16 == rhs.storageInputOutput16 ); +# endif + } + + bool operator!=( PhysicalDevice16BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevice16BitStorageFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevice16BitStorageFeatures; + }; + + using PhysicalDevice16BitStorageFeaturesKHR = PhysicalDevice16BitStorageFeatures; + + // wrapper struct for struct VkPhysicalDevice4444FormatsFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevice4444FormatsFeaturesEXT.html + struct PhysicalDevice4444FormatsFeaturesEXT + { + using NativeType = VkPhysicalDevice4444FormatsFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevice4444FormatsFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevice4444FormatsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , formatA4R4G4B4{ formatA4R4G4B4_ } + , formatA4B4G4R4{ formatA4B4G4R4_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevice4444FormatsFeaturesEXT( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevice4444FormatsFeaturesEXT( VkPhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevice4444FormatsFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevice4444FormatsFeaturesEXT & operator=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevice4444FormatsFeaturesEXT & operator=( VkPhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setFormatA4R4G4B4( VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4_ ) VULKAN_HPP_NOEXCEPT + { + formatA4R4G4B4 = formatA4R4G4B4_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setFormatA4B4G4R4( VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4_ ) VULKAN_HPP_NOEXCEPT + { + formatA4B4G4R4 = formatA4B4G4R4_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevice4444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevice4444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevice4444FormatsFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevice4444FormatsFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, formatA4R4G4B4, formatA4B4G4R4 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevice4444FormatsFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatA4R4G4B4 == rhs.formatA4R4G4B4 ) && ( formatA4B4G4R4 == rhs.formatA4B4G4R4 ); +# endif + } + + bool operator!=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevice4444FormatsFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4 = {}; + VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevice4444FormatsFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDevice8BitStorageFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevice8BitStorageFeatures.html + struct PhysicalDevice8BitStorageFeatures + { + using NativeType = VkPhysicalDevice8BitStorageFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevice8BitStorageFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevice8BitStorageFeatures( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , storageBuffer8BitAccess{ storageBuffer8BitAccess_ } + , uniformAndStorageBuffer8BitAccess{ uniformAndStorageBuffer8BitAccess_ } + , storagePushConstant8{ storagePushConstant8_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevice8BitStorageFeatures( PhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevice8BitStorageFeatures( VkPhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevice8BitStorageFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevice8BitStorageFeatures & operator=( PhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevice8BitStorageFeatures & operator=( VkPhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & + setStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + storageBuffer8BitAccess = storageBuffer8BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & + setUniformAndStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & + setStoragePushConstant8( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ ) VULKAN_HPP_NOEXCEPT + { + storagePushConstant8 = storagePushConstant8_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevice8BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevice8BitStorageFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevice8BitStorageFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevice8BitStorageFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, storageBuffer8BitAccess, uniformAndStorageBuffer8BitAccess, storagePushConstant8 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevice8BitStorageFeatures const & ) const = default; +#else + bool operator==( PhysicalDevice8BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffer8BitAccess == rhs.storageBuffer8BitAccess ) && + ( uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess ) && ( storagePushConstant8 == rhs.storagePushConstant8 ); +# endif + } + + bool operator!=( PhysicalDevice8BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevice8BitStorageFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevice8BitStorageFeatures; + }; + + using PhysicalDevice8BitStorageFeaturesKHR = PhysicalDevice8BitStorageFeatures; + + // wrapper struct for struct VkPhysicalDeviceASTCDecodeFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceASTCDecodeFeaturesEXT.html + struct PhysicalDeviceASTCDecodeFeaturesEXT + { + using NativeType = VkPhysicalDeviceASTCDecodeFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceASTCDecodeFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , decodeModeSharedExponent{ decodeModeSharedExponent_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceASTCDecodeFeaturesEXT( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceASTCDecodeFeaturesEXT( VkPhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceASTCDecodeFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceASTCDecodeFeaturesEXT & operator=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceASTCDecodeFeaturesEXT & operator=( VkPhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT & + setDecodeModeSharedExponent( VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent_ ) VULKAN_HPP_NOEXCEPT + { + decodeModeSharedExponent = decodeModeSharedExponent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceASTCDecodeFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceASTCDecodeFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceASTCDecodeFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceASTCDecodeFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, decodeModeSharedExponent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceASTCDecodeFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( decodeModeSharedExponent == rhs.decodeModeSharedExponent ); +# endif + } + + bool operator!=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceASTCDecodeFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceAccelerationStructureFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAccelerationStructureFeaturesKHR.html + struct PhysicalDeviceAccelerationStructureFeaturesKHR + { + using NativeType = VkPhysicalDeviceAccelerationStructureFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceAccelerationStructureFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructure{ accelerationStructure_ } + , accelerationStructureCaptureReplay{ accelerationStructureCaptureReplay_ } + , accelerationStructureIndirectBuild{ accelerationStructureIndirectBuild_ } + , accelerationStructureHostCommands{ accelerationStructureHostCommands_ } + , descriptorBindingAccelerationStructureUpdateAfterBind{ descriptorBindingAccelerationStructureUpdateAfterBind_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceAccelerationStructureFeaturesKHR( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAccelerationStructureFeaturesKHR( VkPhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAccelerationStructureFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAccelerationStructureFeaturesKHR & operator=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAccelerationStructureFeaturesKHR & operator=( VkPhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & + setAccelerationStructure( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructure = accelerationStructure_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & + setAccelerationStructureCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCaptureReplay = accelerationStructureCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & + setAccelerationStructureIndirectBuild( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureIndirectBuild = accelerationStructureIndirectBuild_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & + setAccelerationStructureHostCommands( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureHostCommands = accelerationStructureHostCommands_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setDescriptorBindingAccelerationStructureUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingAccelerationStructureUpdateAfterBind = descriptorBindingAccelerationStructureUpdateAfterBind_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceAccelerationStructureFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAccelerationStructureFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAccelerationStructureFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAccelerationStructureFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + accelerationStructure, + accelerationStructureCaptureReplay, + accelerationStructureIndirectBuild, + accelerationStructureHostCommands, + descriptorBindingAccelerationStructureUpdateAfterBind ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAccelerationStructureFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure ) && + ( accelerationStructureCaptureReplay == rhs.accelerationStructureCaptureReplay ) && + ( accelerationStructureIndirectBuild == rhs.accelerationStructureIndirectBuild ) && + ( accelerationStructureHostCommands == rhs.accelerationStructureHostCommands ) && + ( descriptorBindingAccelerationStructureUpdateAfterBind == rhs.descriptorBindingAccelerationStructureUpdateAfterBind ); +# endif + } + + bool operator!=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure = {}; + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild = {}; + VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAccelerationStructureFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceAccelerationStructurePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAccelerationStructurePropertiesKHR.html + struct PhysicalDeviceAccelerationStructurePropertiesKHR + { + using NativeType = VkPhysicalDeviceAccelerationStructurePropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceAccelerationStructurePropertiesKHR( uint64_t maxGeometryCount_ = {}, + uint64_t maxInstanceCount_ = {}, + uint64_t maxPrimitiveCount_ = {}, + uint32_t maxPerStageDescriptorAccelerationStructures_ = {}, + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures_ = {}, + uint32_t maxDescriptorSetAccelerationStructures_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures_ = {}, + uint32_t minAccelerationStructureScratchOffsetAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxGeometryCount{ maxGeometryCount_ } + , maxInstanceCount{ maxInstanceCount_ } + , maxPrimitiveCount{ maxPrimitiveCount_ } + , maxPerStageDescriptorAccelerationStructures{ maxPerStageDescriptorAccelerationStructures_ } + , maxPerStageDescriptorUpdateAfterBindAccelerationStructures{ maxPerStageDescriptorUpdateAfterBindAccelerationStructures_ } + , maxDescriptorSetAccelerationStructures{ maxDescriptorSetAccelerationStructures_ } + , maxDescriptorSetUpdateAfterBindAccelerationStructures{ maxDescriptorSetUpdateAfterBindAccelerationStructures_ } + , minAccelerationStructureScratchOffsetAlignment{ minAccelerationStructureScratchOffsetAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceAccelerationStructurePropertiesKHR( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAccelerationStructurePropertiesKHR( VkPhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAccelerationStructurePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAccelerationStructurePropertiesKHR & operator=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAccelerationStructurePropertiesKHR & operator=( VkPhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceAccelerationStructurePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAccelerationStructurePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAccelerationStructurePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAccelerationStructurePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxGeometryCount, + maxInstanceCount, + maxPrimitiveCount, + maxPerStageDescriptorAccelerationStructures, + maxPerStageDescriptorUpdateAfterBindAccelerationStructures, + maxDescriptorSetAccelerationStructures, + maxDescriptorSetUpdateAfterBindAccelerationStructures, + minAccelerationStructureScratchOffsetAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAccelerationStructurePropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxGeometryCount == rhs.maxGeometryCount ) && ( maxInstanceCount == rhs.maxInstanceCount ) && + ( maxPrimitiveCount == rhs.maxPrimitiveCount ) && + ( maxPerStageDescriptorAccelerationStructures == rhs.maxPerStageDescriptorAccelerationStructures ) && + ( maxPerStageDescriptorUpdateAfterBindAccelerationStructures == rhs.maxPerStageDescriptorUpdateAfterBindAccelerationStructures ) && + ( maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures ) && + ( maxDescriptorSetUpdateAfterBindAccelerationStructures == rhs.maxDescriptorSetUpdateAfterBindAccelerationStructures ) && + ( minAccelerationStructureScratchOffsetAlignment == rhs.minAccelerationStructureScratchOffsetAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR; + void * pNext = {}; + uint64_t maxGeometryCount = {}; + uint64_t maxInstanceCount = {}; + uint64_t maxPrimitiveCount = {}; + uint32_t maxPerStageDescriptorAccelerationStructures = {}; + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures = {}; + uint32_t maxDescriptorSetAccelerationStructures = {}; + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures = {}; + uint32_t minAccelerationStructureScratchOffsetAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAccelerationStructurePropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceAddressBindingReportFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAddressBindingReportFeaturesEXT.html + struct PhysicalDeviceAddressBindingReportFeaturesEXT + { + using NativeType = VkPhysicalDeviceAddressBindingReportFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAddressBindingReportFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceAddressBindingReportFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 reportAddressBinding_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , reportAddressBinding{ reportAddressBinding_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceAddressBindingReportFeaturesEXT( PhysicalDeviceAddressBindingReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAddressBindingReportFeaturesEXT( VkPhysicalDeviceAddressBindingReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAddressBindingReportFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAddressBindingReportFeaturesEXT & operator=( PhysicalDeviceAddressBindingReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAddressBindingReportFeaturesEXT & operator=( VkPhysicalDeviceAddressBindingReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAddressBindingReportFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAddressBindingReportFeaturesEXT & + setReportAddressBinding( VULKAN_HPP_NAMESPACE::Bool32 reportAddressBinding_ ) VULKAN_HPP_NOEXCEPT + { + reportAddressBinding = reportAddressBinding_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceAddressBindingReportFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAddressBindingReportFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAddressBindingReportFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAddressBindingReportFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, reportAddressBinding ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAddressBindingReportFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceAddressBindingReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( reportAddressBinding == rhs.reportAddressBinding ); +# endif + } + + bool operator!=( PhysicalDeviceAddressBindingReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAddressBindingReportFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 reportAddressBinding = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAddressBindingReportFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceAmigoProfilingFeaturesSEC, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAmigoProfilingFeaturesSEC.html + struct PhysicalDeviceAmigoProfilingFeaturesSEC + { + using NativeType = VkPhysicalDeviceAmigoProfilingFeaturesSEC; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAmigoProfilingFeaturesSEC; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceAmigoProfilingFeaturesSEC( VULKAN_HPP_NAMESPACE::Bool32 amigoProfiling_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , amigoProfiling{ amigoProfiling_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceAmigoProfilingFeaturesSEC( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAmigoProfilingFeaturesSEC( VkPhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAmigoProfilingFeaturesSEC( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAmigoProfilingFeaturesSEC & operator=( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAmigoProfilingFeaturesSEC & operator=( VkPhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAmigoProfilingFeaturesSEC & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAmigoProfilingFeaturesSEC & setAmigoProfiling( VULKAN_HPP_NAMESPACE::Bool32 amigoProfiling_ ) VULKAN_HPP_NOEXCEPT + { + amigoProfiling = amigoProfiling_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceAmigoProfilingFeaturesSEC const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAmigoProfilingFeaturesSEC &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAmigoProfilingFeaturesSEC const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAmigoProfilingFeaturesSEC *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, amigoProfiling ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAmigoProfilingFeaturesSEC const & ) const = default; +#else + bool operator==( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( amigoProfiling == rhs.amigoProfiling ); +# endif + } + + bool operator!=( PhysicalDeviceAmigoProfilingFeaturesSEC const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAmigoProfilingFeaturesSEC; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 amigoProfiling = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAmigoProfilingFeaturesSEC; + }; + + // wrapper struct for struct VkPhysicalDeviceAntiLagFeaturesAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAntiLagFeaturesAMD.html + struct PhysicalDeviceAntiLagFeaturesAMD + { + using NativeType = VkPhysicalDeviceAntiLagFeaturesAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAntiLagFeaturesAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceAntiLagFeaturesAMD( VULKAN_HPP_NAMESPACE::Bool32 antiLag_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , antiLag{ antiLag_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceAntiLagFeaturesAMD( PhysicalDeviceAntiLagFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAntiLagFeaturesAMD( VkPhysicalDeviceAntiLagFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAntiLagFeaturesAMD( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAntiLagFeaturesAMD & operator=( PhysicalDeviceAntiLagFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAntiLagFeaturesAMD & operator=( VkPhysicalDeviceAntiLagFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAntiLagFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAntiLagFeaturesAMD & setAntiLag( VULKAN_HPP_NAMESPACE::Bool32 antiLag_ ) VULKAN_HPP_NOEXCEPT + { + antiLag = antiLag_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceAntiLagFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAntiLagFeaturesAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAntiLagFeaturesAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAntiLagFeaturesAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, antiLag ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAntiLagFeaturesAMD const & ) const = default; +#else + bool operator==( PhysicalDeviceAntiLagFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( antiLag == rhs.antiLag ); +# endif + } + + bool operator!=( PhysicalDeviceAntiLagFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAntiLagFeaturesAMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 antiLag = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAntiLagFeaturesAMD; + }; + + // wrapper struct for struct VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.html + struct PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT + { + using NativeType = VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopDynamicState_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachmentFeedbackLoopDynamicState{ attachmentFeedbackLoopDynamicState_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT( PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT( VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT & + operator=( PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT & + operator=( VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT & + setAttachmentFeedbackLoopDynamicState( VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopDynamicState_ ) VULKAN_HPP_NOEXCEPT + { + attachmentFeedbackLoopDynamicState = attachmentFeedbackLoopDynamicState_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, attachmentFeedbackLoopDynamicState ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentFeedbackLoopDynamicState == rhs.attachmentFeedbackLoopDynamicState ); +# endif + } + + bool operator!=( PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopDynamicState = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.html + struct PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT + { + using NativeType = VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopLayout_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachmentFeedbackLoopLayout{ attachmentFeedbackLoopLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & + operator=( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & operator=( VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT & + setAttachmentFeedbackLoopLayout( VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopLayout_ ) VULKAN_HPP_NOEXCEPT + { + attachmentFeedbackLoopLayout = attachmentFeedbackLoopLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, attachmentFeedbackLoopLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentFeedbackLoopLayout == rhs.attachmentFeedbackLoopLayout ); +# endif + } + + bool operator!=( PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 attachmentFeedbackLoopLayout = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.html + struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT + { + using NativeType = VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceBlendOperationAdvancedFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , advancedBlendCoherentOperations{ advancedBlendCoherentOperations_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceBlendOperationAdvancedFeaturesEXT( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceBlendOperationAdvancedFeaturesEXT( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceBlendOperationAdvancedFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceBlendOperationAdvancedFeaturesEXT & operator=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceBlendOperationAdvancedFeaturesEXT & operator=( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT & + setAdvancedBlendCoherentOperations( VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations_ ) VULKAN_HPP_NOEXCEPT + { + advancedBlendCoherentOperations = advancedBlendCoherentOperations_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, advancedBlendCoherentOperations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( advancedBlendCoherentOperations == rhs.advancedBlendCoherentOperations ); +# endif + } + + bool operator!=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceBlendOperationAdvancedFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.html + struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT + { + using NativeType = VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceBlendOperationAdvancedPropertiesEXT( uint32_t advancedBlendMaxColorAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendIndependentBlend_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedSrcColor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedDstColor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCorrelatedOverlap_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendAllOperations_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , advancedBlendMaxColorAttachments{ advancedBlendMaxColorAttachments_ } + , advancedBlendIndependentBlend{ advancedBlendIndependentBlend_ } + , advancedBlendNonPremultipliedSrcColor{ advancedBlendNonPremultipliedSrcColor_ } + , advancedBlendNonPremultipliedDstColor{ advancedBlendNonPremultipliedDstColor_ } + , advancedBlendCorrelatedOverlap{ advancedBlendCorrelatedOverlap_ } + , advancedBlendAllOperations{ advancedBlendAllOperations_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceBlendOperationAdvancedPropertiesEXT( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceBlendOperationAdvancedPropertiesEXT( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceBlendOperationAdvancedPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceBlendOperationAdvancedPropertiesEXT & + operator=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceBlendOperationAdvancedPropertiesEXT & operator=( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + advancedBlendMaxColorAttachments, + advancedBlendIndependentBlend, + advancedBlendNonPremultipliedSrcColor, + advancedBlendNonPremultipliedDstColor, + advancedBlendCorrelatedOverlap, + advancedBlendAllOperations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( advancedBlendMaxColorAttachments == rhs.advancedBlendMaxColorAttachments ) && + ( advancedBlendIndependentBlend == rhs.advancedBlendIndependentBlend ) && + ( advancedBlendNonPremultipliedSrcColor == rhs.advancedBlendNonPremultipliedSrcColor ) && + ( advancedBlendNonPremultipliedDstColor == rhs.advancedBlendNonPremultipliedDstColor ) && + ( advancedBlendCorrelatedOverlap == rhs.advancedBlendCorrelatedOverlap ) && ( advancedBlendAllOperations == rhs.advancedBlendAllOperations ); +# endif + } + + bool operator!=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT; + void * pNext = {}; + uint32_t advancedBlendMaxColorAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendIndependentBlend = {}; + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedSrcColor = {}; + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendNonPremultipliedDstColor = {}; + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCorrelatedOverlap = {}; + VULKAN_HPP_NAMESPACE::Bool32 advancedBlendAllOperations = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceBlendOperationAdvancedPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.html + struct PhysicalDeviceBorderColorSwizzleFeaturesEXT + { + using NativeType = VkPhysicalDeviceBorderColorSwizzleFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceBorderColorSwizzleFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , borderColorSwizzle{ borderColorSwizzle_ } + , borderColorSwizzleFromImage{ borderColorSwizzleFromImage_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceBorderColorSwizzleFeaturesEXT( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceBorderColorSwizzleFeaturesEXT( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceBorderColorSwizzleFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceBorderColorSwizzleFeaturesEXT & operator=( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceBorderColorSwizzleFeaturesEXT & operator=( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & + setBorderColorSwizzle( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle_ ) VULKAN_HPP_NOEXCEPT + { + borderColorSwizzle = borderColorSwizzle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & + setBorderColorSwizzleFromImage( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage_ ) VULKAN_HPP_NOEXCEPT + { + borderColorSwizzleFromImage = borderColorSwizzleFromImage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, borderColorSwizzle, borderColorSwizzleFromImage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( borderColorSwizzle == rhs.borderColorSwizzle ) && + ( borderColorSwizzleFromImage == rhs.borderColorSwizzleFromImage ); +# endif + } + + bool operator!=( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle = {}; + VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceBorderColorSwizzleFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceBufferDeviceAddressFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceBufferDeviceAddressFeatures.html + struct PhysicalDeviceBufferDeviceAddressFeatures + { + using NativeType = VkPhysicalDeviceBufferDeviceAddressFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBufferDeviceAddressFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeatures( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , bufferDeviceAddress{ bufferDeviceAddress_ } + , bufferDeviceAddressCaptureReplay{ bufferDeviceAddressCaptureReplay_ } + , bufferDeviceAddressMultiDevice{ bufferDeviceAddressMultiDevice_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeatures( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceBufferDeviceAddressFeatures( VkPhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceBufferDeviceAddressFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceBufferDeviceAddressFeatures & operator=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceBufferDeviceAddressFeatures & operator=( VkPhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & + setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddress = bufferDeviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & + setBufferDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & + setBufferDeviceAddressMultiDevice( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceBufferDeviceAddressFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBufferDeviceAddressFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBufferDeviceAddressFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBufferDeviceAddressFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, bufferDeviceAddress, bufferDeviceAddressCaptureReplay, bufferDeviceAddressMultiDevice ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceBufferDeviceAddressFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) && + ( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) && + ( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice ); +# endif + } + + bool operator!=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBufferDeviceAddressFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceBufferDeviceAddressFeatures; + }; + + using PhysicalDeviceBufferDeviceAddressFeaturesKHR = PhysicalDeviceBufferDeviceAddressFeatures; + + // wrapper struct for struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.html + struct PhysicalDeviceBufferDeviceAddressFeaturesEXT + { + using NativeType = VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , bufferDeviceAddress{ bufferDeviceAddress_ } + , bufferDeviceAddressCaptureReplay{ bufferDeviceAddressCaptureReplay_ } + , bufferDeviceAddressMultiDevice{ bufferDeviceAddressMultiDevice_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceBufferDeviceAddressFeaturesEXT( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceBufferDeviceAddressFeaturesEXT( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceBufferDeviceAddressFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceBufferDeviceAddressFeaturesEXT & operator=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceBufferDeviceAddressFeaturesEXT & operator=( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & + setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddress = bufferDeviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & + setBufferDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & + setBufferDeviceAddressMultiDevice( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, bufferDeviceAddress, bufferDeviceAddressCaptureReplay, bufferDeviceAddressMultiDevice ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) && + ( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) && + ( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice ); +# endif + } + + bool operator!=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceBufferDeviceAddressFeaturesEXT; + }; + + using PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT; + + // wrapper struct for struct VkPhysicalDeviceClusterAccelerationStructureFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceClusterAccelerationStructureFeaturesNV.html + struct PhysicalDeviceClusterAccelerationStructureFeaturesNV + { + using NativeType = VkPhysicalDeviceClusterAccelerationStructureFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceClusterAccelerationStructureFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceClusterAccelerationStructureFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 clusterAccelerationStructure_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , clusterAccelerationStructure{ clusterAccelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceClusterAccelerationStructureFeaturesNV( PhysicalDeviceClusterAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceClusterAccelerationStructureFeaturesNV( VkPhysicalDeviceClusterAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceClusterAccelerationStructureFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceClusterAccelerationStructureFeaturesNV & + operator=( PhysicalDeviceClusterAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceClusterAccelerationStructureFeaturesNV & operator=( VkPhysicalDeviceClusterAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterAccelerationStructureFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterAccelerationStructureFeaturesNV & + setClusterAccelerationStructure( VULKAN_HPP_NAMESPACE::Bool32 clusterAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + clusterAccelerationStructure = clusterAccelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceClusterAccelerationStructureFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterAccelerationStructureFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterAccelerationStructureFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterAccelerationStructureFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, clusterAccelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceClusterAccelerationStructureFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceClusterAccelerationStructureFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( clusterAccelerationStructure == rhs.clusterAccelerationStructure ); +# endif + } + + bool operator!=( PhysicalDeviceClusterAccelerationStructureFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceClusterAccelerationStructureFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 clusterAccelerationStructure = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceClusterAccelerationStructureFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceClusterAccelerationStructurePropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceClusterAccelerationStructurePropertiesNV.html + struct PhysicalDeviceClusterAccelerationStructurePropertiesNV + { + using NativeType = VkPhysicalDeviceClusterAccelerationStructurePropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceClusterAccelerationStructurePropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceClusterAccelerationStructurePropertiesNV( uint32_t maxVerticesPerCluster_ = {}, + uint32_t maxTrianglesPerCluster_ = {}, + uint32_t clusterScratchByteAlignment_ = {}, + uint32_t clusterByteAlignment_ = {}, + uint32_t clusterTemplateByteAlignment_ = {}, + uint32_t clusterBottomLevelByteAlignment_ = {}, + uint32_t clusterTemplateBoundsByteAlignment_ = {}, + uint32_t maxClusterGeometryIndex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxVerticesPerCluster{ maxVerticesPerCluster_ } + , maxTrianglesPerCluster{ maxTrianglesPerCluster_ } + , clusterScratchByteAlignment{ clusterScratchByteAlignment_ } + , clusterByteAlignment{ clusterByteAlignment_ } + , clusterTemplateByteAlignment{ clusterTemplateByteAlignment_ } + , clusterBottomLevelByteAlignment{ clusterBottomLevelByteAlignment_ } + , clusterTemplateBoundsByteAlignment{ clusterTemplateBoundsByteAlignment_ } + , maxClusterGeometryIndex{ maxClusterGeometryIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceClusterAccelerationStructurePropertiesNV( PhysicalDeviceClusterAccelerationStructurePropertiesNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceClusterAccelerationStructurePropertiesNV( VkPhysicalDeviceClusterAccelerationStructurePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceClusterAccelerationStructurePropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceClusterAccelerationStructurePropertiesNV & + operator=( PhysicalDeviceClusterAccelerationStructurePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceClusterAccelerationStructurePropertiesNV & + operator=( VkPhysicalDeviceClusterAccelerationStructurePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceClusterAccelerationStructurePropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterAccelerationStructurePropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterAccelerationStructurePropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterAccelerationStructurePropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxVerticesPerCluster, + maxTrianglesPerCluster, + clusterScratchByteAlignment, + clusterByteAlignment, + clusterTemplateByteAlignment, + clusterBottomLevelByteAlignment, + clusterTemplateBoundsByteAlignment, + maxClusterGeometryIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceClusterAccelerationStructurePropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceClusterAccelerationStructurePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVerticesPerCluster == rhs.maxVerticesPerCluster ) && + ( maxTrianglesPerCluster == rhs.maxTrianglesPerCluster ) && ( clusterScratchByteAlignment == rhs.clusterScratchByteAlignment ) && + ( clusterByteAlignment == rhs.clusterByteAlignment ) && ( clusterTemplateByteAlignment == rhs.clusterTemplateByteAlignment ) && + ( clusterBottomLevelByteAlignment == rhs.clusterBottomLevelByteAlignment ) && + ( clusterTemplateBoundsByteAlignment == rhs.clusterTemplateBoundsByteAlignment ) && ( maxClusterGeometryIndex == rhs.maxClusterGeometryIndex ); +# endif + } + + bool operator!=( PhysicalDeviceClusterAccelerationStructurePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceClusterAccelerationStructurePropertiesNV; + void * pNext = {}; + uint32_t maxVerticesPerCluster = {}; + uint32_t maxTrianglesPerCluster = {}; + uint32_t clusterScratchByteAlignment = {}; + uint32_t clusterByteAlignment = {}; + uint32_t clusterTemplateByteAlignment = {}; + uint32_t clusterBottomLevelByteAlignment = {}; + uint32_t clusterTemplateBoundsByteAlignment = {}; + uint32_t maxClusterGeometryIndex = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceClusterAccelerationStructurePropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI.html + struct PhysicalDeviceClusterCullingShaderFeaturesHUAWEI + { + using NativeType = VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceClusterCullingShaderFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 clustercullingShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiviewClusterCullingShader_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , clustercullingShader{ clustercullingShader_ } + , multiviewClusterCullingShader{ multiviewClusterCullingShader_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceClusterCullingShaderFeaturesHUAWEI( PhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceClusterCullingShaderFeaturesHUAWEI( VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceClusterCullingShaderFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceClusterCullingShaderFeaturesHUAWEI & operator=( PhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceClusterCullingShaderFeaturesHUAWEI & operator=( VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterCullingShaderFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterCullingShaderFeaturesHUAWEI & + setClustercullingShader( VULKAN_HPP_NAMESPACE::Bool32 clustercullingShader_ ) VULKAN_HPP_NOEXCEPT + { + clustercullingShader = clustercullingShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterCullingShaderFeaturesHUAWEI & + setMultiviewClusterCullingShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewClusterCullingShader_ ) VULKAN_HPP_NOEXCEPT + { + multiviewClusterCullingShader = multiviewClusterCullingShader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, clustercullingShader, multiviewClusterCullingShader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( clustercullingShader == rhs.clustercullingShader ) && + ( multiviewClusterCullingShader == rhs.multiviewClusterCullingShader ); +# endif + } + + bool operator!=( PhysicalDeviceClusterCullingShaderFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 clustercullingShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewClusterCullingShader = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceClusterCullingShaderFeaturesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI.html + struct PhysicalDeviceClusterCullingShaderPropertiesHUAWEI + { + using NativeType = VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterCullingShaderPropertiesHUAWEI( std::array const & maxWorkGroupCount_ = {}, + std::array const & maxWorkGroupSize_ = {}, + uint32_t maxOutputClusterCount_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize indirectBufferOffsetAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxWorkGroupCount{ maxWorkGroupCount_ } + , maxWorkGroupSize{ maxWorkGroupSize_ } + , maxOutputClusterCount{ maxOutputClusterCount_ } + , indirectBufferOffsetAlignment{ indirectBufferOffsetAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceClusterCullingShaderPropertiesHUAWEI( PhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceClusterCullingShaderPropertiesHUAWEI( VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceClusterCullingShaderPropertiesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceClusterCullingShaderPropertiesHUAWEI & + operator=( PhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceClusterCullingShaderPropertiesHUAWEI & operator=( VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxWorkGroupCount, maxWorkGroupSize, maxOutputClusterCount, indirectBufferOffsetAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxWorkGroupCount == rhs.maxWorkGroupCount ) && + ( maxWorkGroupSize == rhs.maxWorkGroupSize ) && ( maxOutputClusterCount == rhs.maxOutputClusterCount ) && + ( indirectBufferOffsetAlignment == rhs.indirectBufferOffsetAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceClusterCullingShaderPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxWorkGroupCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxWorkGroupSize = {}; + uint32_t maxOutputClusterCount = {}; + VULKAN_HPP_NAMESPACE::DeviceSize indirectBufferOffsetAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceClusterCullingShaderPropertiesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI.html + struct PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI + { + using NativeType = VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 clusterShadingRate_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , clusterShadingRate{ clusterShadingRate_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI( PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI( VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI & + operator=( PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI & operator=( VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI & + setClusterShadingRate( VULKAN_HPP_NAMESPACE::Bool32 clusterShadingRate_ ) VULKAN_HPP_NOEXCEPT + { + clusterShadingRate = clusterShadingRate_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, clusterShadingRate ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( clusterShadingRate == rhs.clusterShadingRate ); +# endif + } + + bool operator!=( PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 clusterShadingRate = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceCoherentMemoryFeaturesAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCoherentMemoryFeaturesAMD.html + struct PhysicalDeviceCoherentMemoryFeaturesAMD + { + using NativeType = VkPhysicalDeviceCoherentMemoryFeaturesAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCoherentMemoryFeaturesAMD( VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceCoherentMemory{ deviceCoherentMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCoherentMemoryFeaturesAMD( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCoherentMemoryFeaturesAMD( VkPhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCoherentMemoryFeaturesAMD( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCoherentMemoryFeaturesAMD & operator=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCoherentMemoryFeaturesAMD & operator=( VkPhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD & + setDeviceCoherentMemory( VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory_ ) VULKAN_HPP_NOEXCEPT + { + deviceCoherentMemory = deviceCoherentMemory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCoherentMemoryFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCoherentMemoryFeaturesAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCoherentMemoryFeaturesAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCoherentMemoryFeaturesAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceCoherentMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCoherentMemoryFeaturesAMD const & ) const = default; +#else + bool operator==( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceCoherentMemory == rhs.deviceCoherentMemory ); +# endif + } + + bool operator!=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCoherentMemoryFeaturesAMD; + }; + + // wrapper struct for struct VkPhysicalDeviceColorWriteEnableFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceColorWriteEnableFeaturesEXT.html + struct PhysicalDeviceColorWriteEnableFeaturesEXT + { + using NativeType = VkPhysicalDeviceColorWriteEnableFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceColorWriteEnableFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , colorWriteEnable{ colorWriteEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceColorWriteEnableFeaturesEXT( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceColorWriteEnableFeaturesEXT( VkPhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceColorWriteEnableFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceColorWriteEnableFeaturesEXT & operator=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceColorWriteEnableFeaturesEXT & operator=( VkPhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT & + setColorWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable_ ) VULKAN_HPP_NOEXCEPT + { + colorWriteEnable = colorWriteEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceColorWriteEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceColorWriteEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceColorWriteEnableFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceColorWriteEnableFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, colorWriteEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceColorWriteEnableFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorWriteEnable == rhs.colorWriteEnable ); +# endif + } + + bool operator!=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceColorWriteEnableFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceCommandBufferInheritanceFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCommandBufferInheritanceFeaturesNV.html + struct PhysicalDeviceCommandBufferInheritanceFeaturesNV + { + using NativeType = VkPhysicalDeviceCommandBufferInheritanceFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCommandBufferInheritanceFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCommandBufferInheritanceFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 commandBufferInheritance_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , commandBufferInheritance{ commandBufferInheritance_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceCommandBufferInheritanceFeaturesNV( PhysicalDeviceCommandBufferInheritanceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCommandBufferInheritanceFeaturesNV( VkPhysicalDeviceCommandBufferInheritanceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCommandBufferInheritanceFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCommandBufferInheritanceFeaturesNV & operator=( PhysicalDeviceCommandBufferInheritanceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCommandBufferInheritanceFeaturesNV & operator=( VkPhysicalDeviceCommandBufferInheritanceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCommandBufferInheritanceFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCommandBufferInheritanceFeaturesNV & + setCommandBufferInheritance( VULKAN_HPP_NAMESPACE::Bool32 commandBufferInheritance_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferInheritance = commandBufferInheritance_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCommandBufferInheritanceFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCommandBufferInheritanceFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCommandBufferInheritanceFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCommandBufferInheritanceFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, commandBufferInheritance ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCommandBufferInheritanceFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCommandBufferInheritanceFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandBufferInheritance == rhs.commandBufferInheritance ); +# endif + } + + bool operator!=( PhysicalDeviceCommandBufferInheritanceFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCommandBufferInheritanceFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 commandBufferInheritance = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCommandBufferInheritanceFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR.html + struct PhysicalDeviceComputeShaderDerivativesFeaturesKHR + { + using NativeType = VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceComputeShaderDerivativesFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , computeDerivativeGroupQuads{ computeDerivativeGroupQuads_ } + , computeDerivativeGroupLinear{ computeDerivativeGroupLinear_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceComputeShaderDerivativesFeaturesKHR( PhysicalDeviceComputeShaderDerivativesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceComputeShaderDerivativesFeaturesKHR( VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceComputeShaderDerivativesFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceComputeShaderDerivativesFeaturesKHR & + operator=( PhysicalDeviceComputeShaderDerivativesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceComputeShaderDerivativesFeaturesKHR & operator=( VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesKHR & + setComputeDerivativeGroupQuads( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads_ ) VULKAN_HPP_NOEXCEPT + { + computeDerivativeGroupQuads = computeDerivativeGroupQuads_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesKHR & + setComputeDerivativeGroupLinear( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear_ ) VULKAN_HPP_NOEXCEPT + { + computeDerivativeGroupLinear = computeDerivativeGroupLinear_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, computeDerivativeGroupQuads, computeDerivativeGroupLinear ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceComputeShaderDerivativesFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceComputeShaderDerivativesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( computeDerivativeGroupQuads == rhs.computeDerivativeGroupQuads ) && + ( computeDerivativeGroupLinear == rhs.computeDerivativeGroupLinear ); +# endif + } + + bool operator!=( PhysicalDeviceComputeShaderDerivativesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads = {}; + VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceComputeShaderDerivativesFeaturesKHR; + }; + + using PhysicalDeviceComputeShaderDerivativesFeaturesNV = PhysicalDeviceComputeShaderDerivativesFeaturesKHR; + + // wrapper struct for struct VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR.html + struct PhysicalDeviceComputeShaderDerivativesPropertiesKHR + { + using NativeType = VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceComputeShaderDerivativesPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceComputeShaderDerivativesPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 meshAndTaskShaderDerivatives_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , meshAndTaskShaderDerivatives{ meshAndTaskShaderDerivatives_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceComputeShaderDerivativesPropertiesKHR( PhysicalDeviceComputeShaderDerivativesPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceComputeShaderDerivativesPropertiesKHR( VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceComputeShaderDerivativesPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceComputeShaderDerivativesPropertiesKHR & + operator=( PhysicalDeviceComputeShaderDerivativesPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceComputeShaderDerivativesPropertiesKHR & operator=( VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, meshAndTaskShaderDerivatives ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceComputeShaderDerivativesPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceComputeShaderDerivativesPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( meshAndTaskShaderDerivatives == rhs.meshAndTaskShaderDerivatives ); +# endif + } + + bool operator!=( PhysicalDeviceComputeShaderDerivativesPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceComputeShaderDerivativesPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 meshAndTaskShaderDerivatives = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceComputeShaderDerivativesPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceConditionalRenderingFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceConditionalRenderingFeaturesEXT.html + struct PhysicalDeviceConditionalRenderingFeaturesEXT + { + using NativeType = VkPhysicalDeviceConditionalRenderingFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceConditionalRenderingFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , conditionalRendering{ conditionalRendering_ } + , inheritedConditionalRendering{ inheritedConditionalRendering_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceConditionalRenderingFeaturesEXT( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceConditionalRenderingFeaturesEXT( VkPhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceConditionalRenderingFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceConditionalRenderingFeaturesEXT & operator=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceConditionalRenderingFeaturesEXT & operator=( VkPhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & + setConditionalRendering( VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering_ ) VULKAN_HPP_NOEXCEPT + { + conditionalRendering = conditionalRendering_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & + setInheritedConditionalRendering( VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering_ ) VULKAN_HPP_NOEXCEPT + { + inheritedConditionalRendering = inheritedConditionalRendering_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceConditionalRenderingFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceConditionalRenderingFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceConditionalRenderingFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceConditionalRenderingFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, conditionalRendering, inheritedConditionalRendering ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceConditionalRenderingFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conditionalRendering == rhs.conditionalRendering ) && + ( inheritedConditionalRendering == rhs.inheritedConditionalRendering ); +# endif + } + + bool operator!=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering = {}; + VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceConditionalRenderingFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.html + struct PhysicalDeviceConservativeRasterizationPropertiesEXT + { + using NativeType = VkPhysicalDeviceConservativeRasterizationPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceConservativeRasterizationPropertiesEXT( float primitiveOverestimationSize_ = {}, + float maxExtraPrimitiveOverestimationSize_ = {}, + float extraPrimitiveOverestimationSizeGranularity_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitiveUnderestimation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 conservativePointAndLineRasterization_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 degenerateTrianglesRasterized_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 degenerateLinesRasterized_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fullyCoveredFragmentShaderInputVariable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 conservativeRasterizationPostDepthCoverage_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , primitiveOverestimationSize{ primitiveOverestimationSize_ } + , maxExtraPrimitiveOverestimationSize{ maxExtraPrimitiveOverestimationSize_ } + , extraPrimitiveOverestimationSizeGranularity{ extraPrimitiveOverestimationSizeGranularity_ } + , primitiveUnderestimation{ primitiveUnderestimation_ } + , conservativePointAndLineRasterization{ conservativePointAndLineRasterization_ } + , degenerateTrianglesRasterized{ degenerateTrianglesRasterized_ } + , degenerateLinesRasterized{ degenerateLinesRasterized_ } + , fullyCoveredFragmentShaderInputVariable{ fullyCoveredFragmentShaderInputVariable_ } + , conservativeRasterizationPostDepthCoverage{ conservativeRasterizationPostDepthCoverage_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceConservativeRasterizationPropertiesEXT( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceConservativeRasterizationPropertiesEXT( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceConservativeRasterizationPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceConservativeRasterizationPropertiesEXT & + operator=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceConservativeRasterizationPropertiesEXT & operator=( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + primitiveOverestimationSize, + maxExtraPrimitiveOverestimationSize, + extraPrimitiveOverestimationSizeGranularity, + primitiveUnderestimation, + conservativePointAndLineRasterization, + degenerateTrianglesRasterized, + degenerateLinesRasterized, + fullyCoveredFragmentShaderInputVariable, + conservativeRasterizationPostDepthCoverage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceConservativeRasterizationPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( primitiveOverestimationSize == rhs.primitiveOverestimationSize ) && + ( maxExtraPrimitiveOverestimationSize == rhs.maxExtraPrimitiveOverestimationSize ) && + ( extraPrimitiveOverestimationSizeGranularity == rhs.extraPrimitiveOverestimationSizeGranularity ) && + ( primitiveUnderestimation == rhs.primitiveUnderestimation ) && + ( conservativePointAndLineRasterization == rhs.conservativePointAndLineRasterization ) && + ( degenerateTrianglesRasterized == rhs.degenerateTrianglesRasterized ) && ( degenerateLinesRasterized == rhs.degenerateLinesRasterized ) && + ( fullyCoveredFragmentShaderInputVariable == rhs.fullyCoveredFragmentShaderInputVariable ) && + ( conservativeRasterizationPostDepthCoverage == rhs.conservativeRasterizationPostDepthCoverage ); +# endif + } + + bool operator!=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT; + void * pNext = {}; + float primitiveOverestimationSize = {}; + float maxExtraPrimitiveOverestimationSize = {}; + float extraPrimitiveOverestimationSizeGranularity = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitiveUnderestimation = {}; + VULKAN_HPP_NAMESPACE::Bool32 conservativePointAndLineRasterization = {}; + VULKAN_HPP_NAMESPACE::Bool32 degenerateTrianglesRasterized = {}; + VULKAN_HPP_NAMESPACE::Bool32 degenerateLinesRasterized = {}; + VULKAN_HPP_NAMESPACE::Bool32 fullyCoveredFragmentShaderInputVariable = {}; + VULKAN_HPP_NAMESPACE::Bool32 conservativeRasterizationPostDepthCoverage = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceConservativeRasterizationPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeMatrix2FeaturesNV.html + struct PhysicalDeviceCooperativeMatrix2FeaturesNV + { + using NativeType = VkPhysicalDeviceCooperativeMatrix2FeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrix2FeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrix2FeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixWorkgroupScope_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixFlexibleDimensions_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixReductions_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixConversions_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixPerElementOperations_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixTensorAddressing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixBlockLoads_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeMatrixWorkgroupScope{ cooperativeMatrixWorkgroupScope_ } + , cooperativeMatrixFlexibleDimensions{ cooperativeMatrixFlexibleDimensions_ } + , cooperativeMatrixReductions{ cooperativeMatrixReductions_ } + , cooperativeMatrixConversions{ cooperativeMatrixConversions_ } + , cooperativeMatrixPerElementOperations{ cooperativeMatrixPerElementOperations_ } + , cooperativeMatrixTensorAddressing{ cooperativeMatrixTensorAddressing_ } + , cooperativeMatrixBlockLoads{ cooperativeMatrixBlockLoads_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrix2FeaturesNV( PhysicalDeviceCooperativeMatrix2FeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeMatrix2FeaturesNV( VkPhysicalDeviceCooperativeMatrix2FeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeMatrix2FeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeMatrix2FeaturesNV & operator=( PhysicalDeviceCooperativeMatrix2FeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeMatrix2FeaturesNV & operator=( VkPhysicalDeviceCooperativeMatrix2FeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixWorkgroupScope( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixWorkgroupScope_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixWorkgroupScope = cooperativeMatrixWorkgroupScope_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixFlexibleDimensions( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixFlexibleDimensions_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixFlexibleDimensions = cooperativeMatrixFlexibleDimensions_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixReductions( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixReductions_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixReductions = cooperativeMatrixReductions_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixConversions( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixConversions_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixConversions = cooperativeMatrixConversions_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixPerElementOperations( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixPerElementOperations_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixPerElementOperations = cooperativeMatrixPerElementOperations_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixTensorAddressing( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixTensorAddressing_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixTensorAddressing = cooperativeMatrixTensorAddressing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrix2FeaturesNV & + setCooperativeMatrixBlockLoads( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixBlockLoads_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixBlockLoads = cooperativeMatrixBlockLoads_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCooperativeMatrix2FeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrix2FeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrix2FeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrix2FeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + cooperativeMatrixWorkgroupScope, + cooperativeMatrixFlexibleDimensions, + cooperativeMatrixReductions, + cooperativeMatrixConversions, + cooperativeMatrixPerElementOperations, + cooperativeMatrixTensorAddressing, + cooperativeMatrixBlockLoads ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeMatrix2FeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeMatrix2FeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrixWorkgroupScope == rhs.cooperativeMatrixWorkgroupScope ) && + ( cooperativeMatrixFlexibleDimensions == rhs.cooperativeMatrixFlexibleDimensions ) && + ( cooperativeMatrixReductions == rhs.cooperativeMatrixReductions ) && ( cooperativeMatrixConversions == rhs.cooperativeMatrixConversions ) && + ( cooperativeMatrixPerElementOperations == rhs.cooperativeMatrixPerElementOperations ) && + ( cooperativeMatrixTensorAddressing == rhs.cooperativeMatrixTensorAddressing ) && + ( cooperativeMatrixBlockLoads == rhs.cooperativeMatrixBlockLoads ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeMatrix2FeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrix2FeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixWorkgroupScope = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixFlexibleDimensions = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixReductions = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixConversions = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixPerElementOperations = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixTensorAddressing = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixBlockLoads = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeMatrix2FeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeMatrix2PropertiesNV.html + struct PhysicalDeviceCooperativeMatrix2PropertiesNV + { + using NativeType = VkPhysicalDeviceCooperativeMatrix2PropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrix2PropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrix2PropertiesNV( uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize_ = {}, + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension_ = {}, + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeMatrixWorkgroupScopeMaxWorkgroupSize{ cooperativeMatrixWorkgroupScopeMaxWorkgroupSize_ } + , cooperativeMatrixFlexibleDimensionsMaxDimension{ cooperativeMatrixFlexibleDimensionsMaxDimension_ } + , cooperativeMatrixWorkgroupScopeReservedSharedMemory{ cooperativeMatrixWorkgroupScopeReservedSharedMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrix2PropertiesNV( PhysicalDeviceCooperativeMatrix2PropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeMatrix2PropertiesNV( VkPhysicalDeviceCooperativeMatrix2PropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeMatrix2PropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeMatrix2PropertiesNV & operator=( PhysicalDeviceCooperativeMatrix2PropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeMatrix2PropertiesNV & operator=( VkPhysicalDeviceCooperativeMatrix2PropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCooperativeMatrix2PropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrix2PropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrix2PropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrix2PropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + cooperativeMatrixWorkgroupScopeMaxWorkgroupSize, + cooperativeMatrixFlexibleDimensionsMaxDimension, + cooperativeMatrixWorkgroupScopeReservedSharedMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeMatrix2PropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeMatrix2PropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( cooperativeMatrixWorkgroupScopeMaxWorkgroupSize == rhs.cooperativeMatrixWorkgroupScopeMaxWorkgroupSize ) && + ( cooperativeMatrixFlexibleDimensionsMaxDimension == rhs.cooperativeMatrixFlexibleDimensionsMaxDimension ) && + ( cooperativeMatrixWorkgroupScopeReservedSharedMemory == rhs.cooperativeMatrixWorkgroupScopeReservedSharedMemory ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeMatrix2PropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrix2PropertiesNV; + void * pNext = {}; + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize = {}; + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension = {}; + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeMatrix2PropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeMatrixFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeMatrixFeaturesKHR.html + struct PhysicalDeviceCooperativeMatrixFeaturesKHR + { + using NativeType = VkPhysicalDeviceCooperativeMatrixFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrixFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeMatrix{ cooperativeMatrix_ } + , cooperativeMatrixRobustBufferAccess{ cooperativeMatrixRobustBufferAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixFeaturesKHR( PhysicalDeviceCooperativeMatrixFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeMatrixFeaturesKHR( VkPhysicalDeviceCooperativeMatrixFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeMatrixFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeMatrixFeaturesKHR & operator=( PhysicalDeviceCooperativeMatrixFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeMatrixFeaturesKHR & operator=( VkPhysicalDeviceCooperativeMatrixFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesKHR & + setCooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrix = cooperativeMatrix_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesKHR & + setCooperativeMatrixRobustBufferAccess( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixRobustBufferAccess = cooperativeMatrixRobustBufferAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCooperativeMatrixFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cooperativeMatrix, cooperativeMatrixRobustBufferAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeMatrixFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeMatrixFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrix == rhs.cooperativeMatrix ) && + ( cooperativeMatrixRobustBufferAccess == rhs.cooperativeMatrixRobustBufferAccess ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeMatrixFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrixFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeMatrixFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeMatrixFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeMatrixFeaturesNV.html + struct PhysicalDeviceCooperativeMatrixFeaturesNV + { + using NativeType = VkPhysicalDeviceCooperativeMatrixFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeMatrix{ cooperativeMatrix_ } + , cooperativeMatrixRobustBufferAccess{ cooperativeMatrixRobustBufferAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixFeaturesNV( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeMatrixFeaturesNV( VkPhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeMatrixFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeMatrixFeaturesNV & operator=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeMatrixFeaturesNV & operator=( VkPhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & + setCooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrix = cooperativeMatrix_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & + setCooperativeMatrixRobustBufferAccess( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeMatrixRobustBufferAccess = cooperativeMatrixRobustBufferAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCooperativeMatrixFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cooperativeMatrix, cooperativeMatrixRobustBufferAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeMatrixFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrix == rhs.cooperativeMatrix ) && + ( cooperativeMatrixRobustBufferAccess == rhs.cooperativeMatrixRobustBufferAccess ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeMatrixFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeMatrixPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeMatrixPropertiesKHR.html + struct PhysicalDeviceCooperativeMatrixPropertiesKHR + { + using NativeType = VkPhysicalDeviceCooperativeMatrixPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrixPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixPropertiesKHR( VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeMatrixSupportedStages{ cooperativeMatrixSupportedStages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixPropertiesKHR( PhysicalDeviceCooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeMatrixPropertiesKHR( VkPhysicalDeviceCooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeMatrixPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeMatrixPropertiesKHR & operator=( PhysicalDeviceCooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeMatrixPropertiesKHR & operator=( VkPhysicalDeviceCooperativeMatrixPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cooperativeMatrixSupportedStages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeMatrixPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeMatrixPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrixSupportedStages == rhs.cooperativeMatrixSupportedStages ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeMatrixPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrixPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeMatrixPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeMatrixPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeMatrixPropertiesNV.html + struct PhysicalDeviceCooperativeMatrixPropertiesNV + { + using NativeType = VkPhysicalDeviceCooperativeMatrixPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixPropertiesNV( VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeMatrixSupportedStages{ cooperativeMatrixSupportedStages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeMatrixPropertiesNV( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeMatrixPropertiesNV( VkPhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeMatrixPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeMatrixPropertiesNV & operator=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeMatrixPropertiesNV & operator=( VkPhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeMatrixPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cooperativeMatrixSupportedStages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeMatrixPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrixSupportedStages == rhs.cooperativeMatrixSupportedStages ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeMatrixPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeVectorFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeVectorFeaturesNV.html + struct PhysicalDeviceCooperativeVectorFeaturesNV + { + using NativeType = VkPhysicalDeviceCooperativeVectorFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeVectorFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeVectorFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cooperativeVector_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTraining_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeVector{ cooperativeVector_ } + , cooperativeVectorTraining{ cooperativeVectorTraining_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeVectorFeaturesNV( PhysicalDeviceCooperativeVectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeVectorFeaturesNV( VkPhysicalDeviceCooperativeVectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeVectorFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeVectorFeaturesNV & operator=( PhysicalDeviceCooperativeVectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeVectorFeaturesNV & operator=( VkPhysicalDeviceCooperativeVectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeVectorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeVectorFeaturesNV & + setCooperativeVector( VULKAN_HPP_NAMESPACE::Bool32 cooperativeVector_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeVector = cooperativeVector_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeVectorFeaturesNV & + setCooperativeVectorTraining( VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTraining_ ) VULKAN_HPP_NOEXCEPT + { + cooperativeVectorTraining = cooperativeVectorTraining_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCooperativeVectorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeVectorFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeVectorFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeVectorFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cooperativeVector, cooperativeVectorTraining ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeVectorFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeVectorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeVector == rhs.cooperativeVector ) && + ( cooperativeVectorTraining == rhs.cooperativeVectorTraining ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeVectorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeVectorFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVector = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTraining = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeVectorFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCooperativeVectorPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCooperativeVectorPropertiesNV.html + struct PhysicalDeviceCooperativeVectorPropertiesNV + { + using NativeType = VkPhysicalDeviceCooperativeVectorPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCooperativeVectorPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeVectorPropertiesNV( VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeVectorSupportedStages_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTrainingFloat16Accumulation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTrainingFloat32Accumulation_ = {}, + uint32_t maxCooperativeVectorComponents_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cooperativeVectorSupportedStages{ cooperativeVectorSupportedStages_ } + , cooperativeVectorTrainingFloat16Accumulation{ cooperativeVectorTrainingFloat16Accumulation_ } + , cooperativeVectorTrainingFloat32Accumulation{ cooperativeVectorTrainingFloat32Accumulation_ } + , maxCooperativeVectorComponents{ maxCooperativeVectorComponents_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCooperativeVectorPropertiesNV( PhysicalDeviceCooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCooperativeVectorPropertiesNV( VkPhysicalDeviceCooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCooperativeVectorPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCooperativeVectorPropertiesNV & operator=( PhysicalDeviceCooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCooperativeVectorPropertiesNV & operator=( VkPhysicalDeviceCooperativeVectorPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCooperativeVectorPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeVectorPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeVectorPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCooperativeVectorPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + cooperativeVectorSupportedStages, + cooperativeVectorTrainingFloat16Accumulation, + cooperativeVectorTrainingFloat32Accumulation, + maxCooperativeVectorComponents ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCooperativeVectorPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCooperativeVectorPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeVectorSupportedStages == rhs.cooperativeVectorSupportedStages ) && + ( cooperativeVectorTrainingFloat16Accumulation == rhs.cooperativeVectorTrainingFloat16Accumulation ) && + ( cooperativeVectorTrainingFloat32Accumulation == rhs.cooperativeVectorTrainingFloat32Accumulation ) && + ( maxCooperativeVectorComponents == rhs.maxCooperativeVectorComponents ); +# endif + } + + bool operator!=( PhysicalDeviceCooperativeVectorPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCooperativeVectorPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeVectorSupportedStages = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTrainingFloat16Accumulation = {}; + VULKAN_HPP_NAMESPACE::Bool32 cooperativeVectorTrainingFloat32Accumulation = {}; + uint32_t maxCooperativeVectorComponents = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCooperativeVectorPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCopyMemoryIndirectFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCopyMemoryIndirectFeaturesNV.html + struct PhysicalDeviceCopyMemoryIndirectFeaturesNV + { + using NativeType = VkPhysicalDeviceCopyMemoryIndirectFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCopyMemoryIndirectFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCopyMemoryIndirectFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 indirectCopy_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , indirectCopy{ indirectCopy_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCopyMemoryIndirectFeaturesNV( PhysicalDeviceCopyMemoryIndirectFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCopyMemoryIndirectFeaturesNV( VkPhysicalDeviceCopyMemoryIndirectFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCopyMemoryIndirectFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCopyMemoryIndirectFeaturesNV & operator=( PhysicalDeviceCopyMemoryIndirectFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCopyMemoryIndirectFeaturesNV & operator=( VkPhysicalDeviceCopyMemoryIndirectFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCopyMemoryIndirectFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCopyMemoryIndirectFeaturesNV & setIndirectCopy( VULKAN_HPP_NAMESPACE::Bool32 indirectCopy_ ) VULKAN_HPP_NOEXCEPT + { + indirectCopy = indirectCopy_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCopyMemoryIndirectFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCopyMemoryIndirectFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCopyMemoryIndirectFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCopyMemoryIndirectFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, indirectCopy ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCopyMemoryIndirectFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCopyMemoryIndirectFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( indirectCopy == rhs.indirectCopy ); +# endif + } + + bool operator!=( PhysicalDeviceCopyMemoryIndirectFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCopyMemoryIndirectFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 indirectCopy = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCopyMemoryIndirectFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCopyMemoryIndirectPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.html + struct PhysicalDeviceCopyMemoryIndirectPropertiesNV + { + using NativeType = VkPhysicalDeviceCopyMemoryIndirectPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCopyMemoryIndirectPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCopyMemoryIndirectPropertiesNV( VULKAN_HPP_NAMESPACE::QueueFlags supportedQueues_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportedQueues{ supportedQueues_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCopyMemoryIndirectPropertiesNV( PhysicalDeviceCopyMemoryIndirectPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCopyMemoryIndirectPropertiesNV( VkPhysicalDeviceCopyMemoryIndirectPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCopyMemoryIndirectPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCopyMemoryIndirectPropertiesNV & operator=( PhysicalDeviceCopyMemoryIndirectPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCopyMemoryIndirectPropertiesNV & operator=( VkPhysicalDeviceCopyMemoryIndirectPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCopyMemoryIndirectPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCopyMemoryIndirectPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCopyMemoryIndirectPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCopyMemoryIndirectPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supportedQueues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCopyMemoryIndirectPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCopyMemoryIndirectPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportedQueues == rhs.supportedQueues ); +# endif + } + + bool operator!=( PhysicalDeviceCopyMemoryIndirectPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCopyMemoryIndirectPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::QueueFlags supportedQueues = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCopyMemoryIndirectPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCornerSampledImageFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCornerSampledImageFeaturesNV.html + struct PhysicalDeviceCornerSampledImageFeaturesNV + { + using NativeType = VkPhysicalDeviceCornerSampledImageFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCornerSampledImageFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cornerSampledImage{ cornerSampledImage_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCornerSampledImageFeaturesNV( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCornerSampledImageFeaturesNV( VkPhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCornerSampledImageFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCornerSampledImageFeaturesNV & operator=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCornerSampledImageFeaturesNV & operator=( VkPhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV & + setCornerSampledImage( VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage_ ) VULKAN_HPP_NOEXCEPT + { + cornerSampledImage = cornerSampledImage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCornerSampledImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCornerSampledImageFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCornerSampledImageFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCornerSampledImageFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cornerSampledImage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCornerSampledImageFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cornerSampledImage == rhs.cornerSampledImage ); +# endif + } + + bool operator!=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCornerSampledImageFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCoverageReductionModeFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCoverageReductionModeFeaturesNV.html + struct PhysicalDeviceCoverageReductionModeFeaturesNV + { + using NativeType = VkPhysicalDeviceCoverageReductionModeFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCoverageReductionModeFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , coverageReductionMode{ coverageReductionMode_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceCoverageReductionModeFeaturesNV( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCoverageReductionModeFeaturesNV( VkPhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCoverageReductionModeFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCoverageReductionModeFeaturesNV & operator=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCoverageReductionModeFeaturesNV & operator=( VkPhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV & + setCoverageReductionMode( VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode_ ) VULKAN_HPP_NOEXCEPT + { + coverageReductionMode = coverageReductionMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCoverageReductionModeFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCoverageReductionModeFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCoverageReductionModeFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCoverageReductionModeFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, coverageReductionMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCoverageReductionModeFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( coverageReductionMode == rhs.coverageReductionMode ); +# endif + } + + bool operator!=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCoverageReductionModeFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceCubicClampFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCubicClampFeaturesQCOM.html + struct PhysicalDeviceCubicClampFeaturesQCOM + { + using NativeType = VkPhysicalDeviceCubicClampFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCubicClampFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCubicClampFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 cubicRangeClamp_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cubicRangeClamp{ cubicRangeClamp_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCubicClampFeaturesQCOM( PhysicalDeviceCubicClampFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCubicClampFeaturesQCOM( VkPhysicalDeviceCubicClampFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCubicClampFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCubicClampFeaturesQCOM & operator=( PhysicalDeviceCubicClampFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCubicClampFeaturesQCOM & operator=( VkPhysicalDeviceCubicClampFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCubicClampFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCubicClampFeaturesQCOM & setCubicRangeClamp( VULKAN_HPP_NAMESPACE::Bool32 cubicRangeClamp_ ) VULKAN_HPP_NOEXCEPT + { + cubicRangeClamp = cubicRangeClamp_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCubicClampFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCubicClampFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCubicClampFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCubicClampFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cubicRangeClamp ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCubicClampFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceCubicClampFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cubicRangeClamp == rhs.cubicRangeClamp ); +# endif + } + + bool operator!=( PhysicalDeviceCubicClampFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCubicClampFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cubicRangeClamp = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCubicClampFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceCubicWeightsFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCubicWeightsFeaturesQCOM.html + struct PhysicalDeviceCubicWeightsFeaturesQCOM + { + using NativeType = VkPhysicalDeviceCubicWeightsFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCubicWeightsFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCubicWeightsFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 selectableCubicWeights_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , selectableCubicWeights{ selectableCubicWeights_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCubicWeightsFeaturesQCOM( PhysicalDeviceCubicWeightsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCubicWeightsFeaturesQCOM( VkPhysicalDeviceCubicWeightsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCubicWeightsFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCubicWeightsFeaturesQCOM & operator=( PhysicalDeviceCubicWeightsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCubicWeightsFeaturesQCOM & operator=( VkPhysicalDeviceCubicWeightsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCubicWeightsFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCubicWeightsFeaturesQCOM & + setSelectableCubicWeights( VULKAN_HPP_NAMESPACE::Bool32 selectableCubicWeights_ ) VULKAN_HPP_NOEXCEPT + { + selectableCubicWeights = selectableCubicWeights_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCubicWeightsFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCubicWeightsFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCubicWeightsFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCubicWeightsFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, selectableCubicWeights ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCubicWeightsFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceCubicWeightsFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( selectableCubicWeights == rhs.selectableCubicWeights ); +# endif + } + + bool operator!=( PhysicalDeviceCubicWeightsFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCubicWeightsFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 selectableCubicWeights = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCubicWeightsFeaturesQCOM; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCudaKernelLaunchFeaturesNV.html + struct PhysicalDeviceCudaKernelLaunchFeaturesNV + { + using NativeType = VkPhysicalDeviceCudaKernelLaunchFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCudaKernelLaunchFeaturesNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCudaKernelLaunchFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 cudaKernelLaunchFeatures_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cudaKernelLaunchFeatures{ cudaKernelLaunchFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCudaKernelLaunchFeaturesNV( PhysicalDeviceCudaKernelLaunchFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCudaKernelLaunchFeaturesNV( VkPhysicalDeviceCudaKernelLaunchFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCudaKernelLaunchFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCudaKernelLaunchFeaturesNV & operator=( PhysicalDeviceCudaKernelLaunchFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCudaKernelLaunchFeaturesNV & operator=( VkPhysicalDeviceCudaKernelLaunchFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCudaKernelLaunchFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCudaKernelLaunchFeaturesNV & + setCudaKernelLaunchFeatures( VULKAN_HPP_NAMESPACE::Bool32 cudaKernelLaunchFeatures_ ) VULKAN_HPP_NOEXCEPT + { + cudaKernelLaunchFeatures = cudaKernelLaunchFeatures_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCudaKernelLaunchFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCudaKernelLaunchFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCudaKernelLaunchFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCudaKernelLaunchFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cudaKernelLaunchFeatures ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCudaKernelLaunchFeaturesNV const & ) const = default; +# else + bool operator==( PhysicalDeviceCudaKernelLaunchFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cudaKernelLaunchFeatures == rhs.cudaKernelLaunchFeatures ); +# endif + } + + bool operator!=( PhysicalDeviceCudaKernelLaunchFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCudaKernelLaunchFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 cudaKernelLaunchFeatures = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCudaKernelLaunchFeaturesNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCudaKernelLaunchPropertiesNV.html + struct PhysicalDeviceCudaKernelLaunchPropertiesNV + { + using NativeType = VkPhysicalDeviceCudaKernelLaunchPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCudaKernelLaunchPropertiesNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCudaKernelLaunchPropertiesNV( uint32_t computeCapabilityMinor_ = {}, + uint32_t computeCapabilityMajor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , computeCapabilityMinor{ computeCapabilityMinor_ } + , computeCapabilityMajor{ computeCapabilityMajor_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCudaKernelLaunchPropertiesNV( PhysicalDeviceCudaKernelLaunchPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCudaKernelLaunchPropertiesNV( VkPhysicalDeviceCudaKernelLaunchPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCudaKernelLaunchPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCudaKernelLaunchPropertiesNV & operator=( PhysicalDeviceCudaKernelLaunchPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCudaKernelLaunchPropertiesNV & operator=( VkPhysicalDeviceCudaKernelLaunchPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCudaKernelLaunchPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCudaKernelLaunchPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCudaKernelLaunchPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCudaKernelLaunchPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, computeCapabilityMinor, computeCapabilityMajor ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCudaKernelLaunchPropertiesNV const & ) const = default; +# else + bool operator==( PhysicalDeviceCudaKernelLaunchPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( computeCapabilityMinor == rhs.computeCapabilityMinor ) && + ( computeCapabilityMajor == rhs.computeCapabilityMajor ); +# endif + } + + bool operator!=( PhysicalDeviceCudaKernelLaunchPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCudaKernelLaunchPropertiesNV; + void * pNext = {}; + uint32_t computeCapabilityMinor = {}; + uint32_t computeCapabilityMajor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCudaKernelLaunchPropertiesNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkPhysicalDeviceCustomBorderColorFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCustomBorderColorFeaturesEXT.html + struct PhysicalDeviceCustomBorderColorFeaturesEXT + { + using NativeType = VkPhysicalDeviceCustomBorderColorFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 customBorderColors_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , customBorderColors{ customBorderColors_ } + , customBorderColorWithoutFormat{ customBorderColorWithoutFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorFeaturesEXT( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCustomBorderColorFeaturesEXT( VkPhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCustomBorderColorFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCustomBorderColorFeaturesEXT & operator=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCustomBorderColorFeaturesEXT & operator=( VkPhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & + setCustomBorderColors( VULKAN_HPP_NAMESPACE::Bool32 customBorderColors_ ) VULKAN_HPP_NOEXCEPT + { + customBorderColors = customBorderColors_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & + setCustomBorderColorWithoutFormat( VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat_ ) VULKAN_HPP_NOEXCEPT + { + customBorderColorWithoutFormat = customBorderColorWithoutFormat_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceCustomBorderColorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCustomBorderColorFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCustomBorderColorFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCustomBorderColorFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, customBorderColors, customBorderColorWithoutFormat ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCustomBorderColorFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( customBorderColors == rhs.customBorderColors ) && + ( customBorderColorWithoutFormat == rhs.customBorderColorWithoutFormat ); +# endif + } + + bool operator!=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 customBorderColors = {}; + VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCustomBorderColorFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceCustomBorderColorPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceCustomBorderColorPropertiesEXT.html + struct PhysicalDeviceCustomBorderColorPropertiesEXT + { + using NativeType = VkPhysicalDeviceCustomBorderColorPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorPropertiesEXT( uint32_t maxCustomBorderColorSamplers_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxCustomBorderColorSamplers{ maxCustomBorderColorSamplers_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceCustomBorderColorPropertiesEXT( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceCustomBorderColorPropertiesEXT( VkPhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceCustomBorderColorPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceCustomBorderColorPropertiesEXT & operator=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceCustomBorderColorPropertiesEXT & operator=( VkPhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceCustomBorderColorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCustomBorderColorPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCustomBorderColorPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceCustomBorderColorPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxCustomBorderColorSamplers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceCustomBorderColorPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxCustomBorderColorSamplers == rhs.maxCustomBorderColorSamplers ); +# endif + } + + bool operator!=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT; + void * pNext = {}; + uint32_t maxCustomBorderColorSamplers = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceCustomBorderColorPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDataGraphFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDataGraphFeaturesARM.html + struct PhysicalDeviceDataGraphFeaturesARM + { + using NativeType = VkPhysicalDeviceDataGraphFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDataGraphFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDataGraphFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 dataGraph_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dataGraphUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dataGraphSpecializationConstants_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dataGraphDescriptorBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dataGraphShaderModule_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dataGraph{ dataGraph_ } + , dataGraphUpdateAfterBind{ dataGraphUpdateAfterBind_ } + , dataGraphSpecializationConstants{ dataGraphSpecializationConstants_ } + , dataGraphDescriptorBuffer{ dataGraphDescriptorBuffer_ } + , dataGraphShaderModule{ dataGraphShaderModule_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDataGraphFeaturesARM( PhysicalDeviceDataGraphFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDataGraphFeaturesARM( VkPhysicalDeviceDataGraphFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDataGraphFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDataGraphFeaturesARM & operator=( PhysicalDeviceDataGraphFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDataGraphFeaturesARM & operator=( VkPhysicalDeviceDataGraphFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphFeaturesARM & setDataGraph( VULKAN_HPP_NAMESPACE::Bool32 dataGraph_ ) VULKAN_HPP_NOEXCEPT + { + dataGraph = dataGraph_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphFeaturesARM & + setDataGraphUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 dataGraphUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + dataGraphUpdateAfterBind = dataGraphUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphFeaturesARM & + setDataGraphSpecializationConstants( VULKAN_HPP_NAMESPACE::Bool32 dataGraphSpecializationConstants_ ) VULKAN_HPP_NOEXCEPT + { + dataGraphSpecializationConstants = dataGraphSpecializationConstants_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphFeaturesARM & + setDataGraphDescriptorBuffer( VULKAN_HPP_NAMESPACE::Bool32 dataGraphDescriptorBuffer_ ) VULKAN_HPP_NOEXCEPT + { + dataGraphDescriptorBuffer = dataGraphDescriptorBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphFeaturesARM & + setDataGraphShaderModule( VULKAN_HPP_NAMESPACE::Bool32 dataGraphShaderModule_ ) VULKAN_HPP_NOEXCEPT + { + dataGraphShaderModule = dataGraphShaderModule_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDataGraphFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dataGraph, dataGraphUpdateAfterBind, dataGraphSpecializationConstants, dataGraphDescriptorBuffer, dataGraphShaderModule ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDataGraphFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceDataGraphFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataGraph == rhs.dataGraph ) && + ( dataGraphUpdateAfterBind == rhs.dataGraphUpdateAfterBind ) && ( dataGraphSpecializationConstants == rhs.dataGraphSpecializationConstants ) && + ( dataGraphDescriptorBuffer == rhs.dataGraphDescriptorBuffer ) && ( dataGraphShaderModule == rhs.dataGraphShaderModule ); +# endif + } + + bool operator!=( PhysicalDeviceDataGraphFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDataGraphFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dataGraph = {}; + VULKAN_HPP_NAMESPACE::Bool32 dataGraphUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 dataGraphSpecializationConstants = {}; + VULKAN_HPP_NAMESPACE::Bool32 dataGraphDescriptorBuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 dataGraphShaderModule = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDataGraphFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceDataGraphOperationSupportARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDataGraphOperationSupportARM.html + struct PhysicalDeviceDataGraphOperationSupportARM + { + using NativeType = VkPhysicalDeviceDataGraphOperationSupportARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceDataGraphOperationSupportARM( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM operationType_ = + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM::eSpirvExtendedInstructionSet, + std::array const & name_ = {}, + uint32_t version_ = {} ) VULKAN_HPP_NOEXCEPT + : operationType{ operationType_ } + , name{ name_ } + , version{ version_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphOperationSupportARM( PhysicalDeviceDataGraphOperationSupportARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDataGraphOperationSupportARM( VkPhysicalDeviceDataGraphOperationSupportARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDataGraphOperationSupportARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceDataGraphOperationSupportARM( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM operationType_, + std::string const & name_, + uint32_t version_ = {} ) + : operationType( operationType_ ), version( version_ ) + { + VULKAN_HPP_ASSERT( name_.size() < VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM ); +# if defined( _WIN32 ) + strncpy_s( name, VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM, name_.data(), name_.size() ); +# else + strncpy( name, name_.data(), std::min( VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM, name_.size() ) ); +# endif + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PhysicalDeviceDataGraphOperationSupportARM & operator=( PhysicalDeviceDataGraphOperationSupportARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDataGraphOperationSupportARM & operator=( VkPhysicalDeviceDataGraphOperationSupportARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphOperationSupportARM & + setOperationType( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM operationType_ ) VULKAN_HPP_NOEXCEPT + { + operationType = operationType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphOperationSupportARM & + setName( std::array name_ ) VULKAN_HPP_NOEXCEPT + { + name = name_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceDataGraphOperationSupportARM & setName( std::string const & name_ ) VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( name_.size() < VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM ); +# if defined( _WIN32 ) + strncpy_s( name, VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM, name_.data(), name_.size() ); +# else + strncpy( name, name_.data(), std::min( VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM, name_.size() ) ); +# endif + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDataGraphOperationSupportARM & setVersion( uint32_t version_ ) VULKAN_HPP_NOEXCEPT + { + version = version_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDataGraphOperationSupportARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphOperationSupportARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphOperationSupportARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDataGraphOperationSupportARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( operationType, name, version ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PhysicalDeviceDataGraphOperationSupportARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = operationType <=> rhs.operationType; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( name, rhs.name ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = version <=> rhs.version; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceDataGraphOperationSupportARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( operationType == rhs.operationType ) && ( strcmp( name, rhs.name ) == 0 ) && ( version == rhs.version ); + } + + bool operator!=( PhysicalDeviceDataGraphOperationSupportARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM operationType = + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationTypeARM::eSpirvExtendedInstructionSet; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; + uint32_t version = {}; + }; + + // wrapper struct for struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.html + struct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV + { + using NativeType = VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dedicatedAllocationImageAliasing{ dedicatedAllocationImageAliasing_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & + operator=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & + operator=( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & + setDedicatedAllocationImageAliasing( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing_ ) VULKAN_HPP_NOEXCEPT + { + dedicatedAllocationImageAliasing = dedicatedAllocationImageAliasing_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dedicatedAllocationImageAliasing ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocationImageAliasing == rhs.dedicatedAllocationImageAliasing ); +# endif + } + + bool operator!=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceDepthBiasControlFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDepthBiasControlFeaturesEXT.html + struct PhysicalDeviceDepthBiasControlFeaturesEXT + { + using NativeType = VkPhysicalDeviceDepthBiasControlFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthBiasControlFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthBiasControlFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBiasControl_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 leastRepresentableValueForceUnormRepresentation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 floatRepresentation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthBiasExact_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthBiasControl{ depthBiasControl_ } + , leastRepresentableValueForceUnormRepresentation{ leastRepresentableValueForceUnormRepresentation_ } + , floatRepresentation{ floatRepresentation_ } + , depthBiasExact{ depthBiasExact_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthBiasControlFeaturesEXT( PhysicalDeviceDepthBiasControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDepthBiasControlFeaturesEXT( VkPhysicalDeviceDepthBiasControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDepthBiasControlFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDepthBiasControlFeaturesEXT & operator=( PhysicalDeviceDepthBiasControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDepthBiasControlFeaturesEXT & operator=( VkPhysicalDeviceDepthBiasControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthBiasControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthBiasControlFeaturesEXT & + setDepthBiasControl( VULKAN_HPP_NAMESPACE::Bool32 depthBiasControl_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasControl = depthBiasControl_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthBiasControlFeaturesEXT & + setLeastRepresentableValueForceUnormRepresentation( VULKAN_HPP_NAMESPACE::Bool32 leastRepresentableValueForceUnormRepresentation_ ) VULKAN_HPP_NOEXCEPT + { + leastRepresentableValueForceUnormRepresentation = leastRepresentableValueForceUnormRepresentation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthBiasControlFeaturesEXT & + setFloatRepresentation( VULKAN_HPP_NAMESPACE::Bool32 floatRepresentation_ ) VULKAN_HPP_NOEXCEPT + { + floatRepresentation = floatRepresentation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthBiasControlFeaturesEXT & setDepthBiasExact( VULKAN_HPP_NAMESPACE::Bool32 depthBiasExact_ ) VULKAN_HPP_NOEXCEPT + { + depthBiasExact = depthBiasExact_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDepthBiasControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthBiasControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthBiasControlFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthBiasControlFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthBiasControl, leastRepresentableValueForceUnormRepresentation, floatRepresentation, depthBiasExact ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDepthBiasControlFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDepthBiasControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthBiasControl == rhs.depthBiasControl ) && + ( leastRepresentableValueForceUnormRepresentation == rhs.leastRepresentableValueForceUnormRepresentation ) && + ( floatRepresentation == rhs.floatRepresentation ) && ( depthBiasExact == rhs.depthBiasExact ); +# endif + } + + bool operator!=( PhysicalDeviceDepthBiasControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthBiasControlFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthBiasControl = {}; + VULKAN_HPP_NAMESPACE::Bool32 leastRepresentableValueForceUnormRepresentation = {}; + VULKAN_HPP_NAMESPACE::Bool32 floatRepresentation = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthBiasExact = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDepthBiasControlFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDepthClampControlFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDepthClampControlFeaturesEXT.html + struct PhysicalDeviceDepthClampControlFeaturesEXT + { + using NativeType = VkPhysicalDeviceDepthClampControlFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthClampControlFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClampControlFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClampControl_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthClampControl{ depthClampControl_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClampControlFeaturesEXT( PhysicalDeviceDepthClampControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDepthClampControlFeaturesEXT( VkPhysicalDeviceDepthClampControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDepthClampControlFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDepthClampControlFeaturesEXT & operator=( PhysicalDeviceDepthClampControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDepthClampControlFeaturesEXT & operator=( VkPhysicalDeviceDepthClampControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClampControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClampControlFeaturesEXT & + setDepthClampControl( VULKAN_HPP_NAMESPACE::Bool32 depthClampControl_ ) VULKAN_HPP_NOEXCEPT + { + depthClampControl = depthClampControl_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDepthClampControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClampControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClampControlFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClampControlFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthClampControl ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDepthClampControlFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDepthClampControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClampControl == rhs.depthClampControl ); +# endif + } + + bool operator!=( PhysicalDeviceDepthClampControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClampControlFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClampControl = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDepthClampControlFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDepthClampZeroOneFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDepthClampZeroOneFeaturesKHR.html + struct PhysicalDeviceDepthClampZeroOneFeaturesKHR + { + using NativeType = VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthClampZeroOneFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClampZeroOneFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 depthClampZeroOne_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthClampZeroOne{ depthClampZeroOne_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClampZeroOneFeaturesKHR( PhysicalDeviceDepthClampZeroOneFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDepthClampZeroOneFeaturesKHR( VkPhysicalDeviceDepthClampZeroOneFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDepthClampZeroOneFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDepthClampZeroOneFeaturesKHR & operator=( PhysicalDeviceDepthClampZeroOneFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDepthClampZeroOneFeaturesKHR & operator=( VkPhysicalDeviceDepthClampZeroOneFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClampZeroOneFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClampZeroOneFeaturesKHR & + setDepthClampZeroOne( VULKAN_HPP_NAMESPACE::Bool32 depthClampZeroOne_ ) VULKAN_HPP_NOEXCEPT + { + depthClampZeroOne = depthClampZeroOne_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDepthClampZeroOneFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClampZeroOneFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClampZeroOneFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClampZeroOneFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthClampZeroOne ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDepthClampZeroOneFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceDepthClampZeroOneFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClampZeroOne == rhs.depthClampZeroOne ); +# endif + } + + bool operator!=( PhysicalDeviceDepthClampZeroOneFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClampZeroOneFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClampZeroOne = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDepthClampZeroOneFeaturesKHR; + }; + + using PhysicalDeviceDepthClampZeroOneFeaturesEXT = PhysicalDeviceDepthClampZeroOneFeaturesKHR; + + // wrapper struct for struct VkPhysicalDeviceDepthClipControlFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDepthClipControlFeaturesEXT.html + struct PhysicalDeviceDepthClipControlFeaturesEXT + { + using NativeType = VkPhysicalDeviceDepthClipControlFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipControlFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClipControl_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthClipControl{ depthClipControl_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipControlFeaturesEXT( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDepthClipControlFeaturesEXT( VkPhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDepthClipControlFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDepthClipControlFeaturesEXT & operator=( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDepthClipControlFeaturesEXT & operator=( VkPhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipControlFeaturesEXT & + setDepthClipControl( VULKAN_HPP_NAMESPACE::Bool32 depthClipControl_ ) VULKAN_HPP_NOEXCEPT + { + depthClipControl = depthClipControl_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDepthClipControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClipControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClipControlFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClipControlFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthClipControl ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDepthClipControlFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClipControl == rhs.depthClipControl ); +# endif + } + + bool operator!=( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClipControl = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDepthClipControlFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDepthClipEnableFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDepthClipEnableFeaturesEXT.html + struct PhysicalDeviceDepthClipEnableFeaturesEXT + { + using NativeType = VkPhysicalDeviceDepthClipEnableFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipEnableFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthClipEnable{ depthClipEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipEnableFeaturesEXT( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDepthClipEnableFeaturesEXT( VkPhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDepthClipEnableFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDepthClipEnableFeaturesEXT & operator=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDepthClipEnableFeaturesEXT & operator=( VkPhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT & setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthClipEnable = depthClipEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDepthClipEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClipEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClipEnableFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthClipEnableFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthClipEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDepthClipEnableFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClipEnable == rhs.depthClipEnable ); +# endif + } + + bool operator!=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDepthClipEnableFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDepthStencilResolveProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDepthStencilResolveProperties.html + struct PhysicalDeviceDepthStencilResolveProperties + { + using NativeType = VkPhysicalDeviceDepthStencilResolveProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDepthStencilResolveProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthStencilResolveProperties( VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes_ = {}, + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 independentResolve_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportedDepthResolveModes{ supportedDepthResolveModes_ } + , supportedStencilResolveModes{ supportedStencilResolveModes_ } + , independentResolveNone{ independentResolveNone_ } + , independentResolve{ independentResolve_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthStencilResolveProperties( PhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDepthStencilResolveProperties( VkPhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDepthStencilResolveProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDepthStencilResolveProperties & operator=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDepthStencilResolveProperties & operator=( VkPhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDepthStencilResolveProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthStencilResolveProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthStencilResolveProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDepthStencilResolveProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supportedDepthResolveModes, supportedStencilResolveModes, independentResolveNone, independentResolve ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDepthStencilResolveProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceDepthStencilResolveProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportedDepthResolveModes == rhs.supportedDepthResolveModes ) && + ( supportedStencilResolveModes == rhs.supportedStencilResolveModes ) && ( independentResolveNone == rhs.independentResolveNone ) && + ( independentResolve == rhs.independentResolve ); +# endif + } + + bool operator!=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthStencilResolveProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes = {}; + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes = {}; + VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone = {}; + VULKAN_HPP_NAMESPACE::Bool32 independentResolve = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDepthStencilResolveProperties; + }; + + using PhysicalDeviceDepthStencilResolvePropertiesKHR = PhysicalDeviceDepthStencilResolveProperties; + + // wrapper struct for struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.html + struct PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT + { + using NativeType = VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT( size_t combinedImageSamplerDensityMapDescriptorSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , combinedImageSamplerDensityMapDescriptorSize{ combinedImageSamplerDensityMapDescriptorSize_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT( PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT( VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT & + operator=( PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT & operator=( VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, combinedImageSamplerDensityMapDescriptorSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( combinedImageSamplerDensityMapDescriptorSize == rhs.combinedImageSamplerDensityMapDescriptorSize ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + void * pNext = {}; + size_t combinedImageSamplerDensityMapDescriptorSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDescriptorBufferFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorBufferFeaturesEXT.html + struct PhysicalDeviceDescriptorBufferFeaturesEXT + { + using NativeType = VkPhysicalDeviceDescriptorBufferFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorBufferFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 descriptorBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferImageLayoutIgnored_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferPushDescriptors_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorBuffer{ descriptorBuffer_ } + , descriptorBufferCaptureReplay{ descriptorBufferCaptureReplay_ } + , descriptorBufferImageLayoutIgnored{ descriptorBufferImageLayoutIgnored_ } + , descriptorBufferPushDescriptors{ descriptorBufferPushDescriptors_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferFeaturesEXT( PhysicalDeviceDescriptorBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorBufferFeaturesEXT( VkPhysicalDeviceDescriptorBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorBufferFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorBufferFeaturesEXT & operator=( PhysicalDeviceDescriptorBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorBufferFeaturesEXT & operator=( VkPhysicalDeviceDescriptorBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferFeaturesEXT & + setDescriptorBuffer( VULKAN_HPP_NAMESPACE::Bool32 descriptorBuffer_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBuffer = descriptorBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferFeaturesEXT & + setDescriptorBufferCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBufferCaptureReplay = descriptorBufferCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferFeaturesEXT & + setDescriptorBufferImageLayoutIgnored( VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferImageLayoutIgnored_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBufferImageLayoutIgnored = descriptorBufferImageLayoutIgnored_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferFeaturesEXT & + setDescriptorBufferPushDescriptors( VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferPushDescriptors_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBufferPushDescriptors = descriptorBufferPushDescriptors_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDescriptorBufferFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorBuffer, descriptorBufferCaptureReplay, descriptorBufferImageLayoutIgnored, descriptorBufferPushDescriptors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorBufferFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorBufferFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorBuffer == rhs.descriptorBuffer ) && + ( descriptorBufferCaptureReplay == rhs.descriptorBufferCaptureReplay ) && + ( descriptorBufferImageLayoutIgnored == rhs.descriptorBufferImageLayoutIgnored ) && + ( descriptorBufferPushDescriptors == rhs.descriptorBufferPushDescriptors ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorBufferFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorBufferFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferImageLayoutIgnored = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferPushDescriptors = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorBufferFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDescriptorBufferPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorBufferPropertiesEXT.html + struct PhysicalDeviceDescriptorBufferPropertiesEXT + { + using NativeType = VkPhysicalDeviceDescriptorBufferPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorBufferPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 combinedImageSamplerDescriptorSingleArray_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferlessPushDescriptors_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 allowSamplerImageViewPostSubmitCreation_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize descriptorBufferOffsetAlignment_ = {}, + uint32_t maxDescriptorBufferBindings_ = {}, + uint32_t maxResourceDescriptorBufferBindings_ = {}, + uint32_t maxSamplerDescriptorBufferBindings_ = {}, + uint32_t maxEmbeddedImmutableSamplerBindings_ = {}, + uint32_t maxEmbeddedImmutableSamplers_ = {}, + size_t bufferCaptureReplayDescriptorDataSize_ = {}, + size_t imageCaptureReplayDescriptorDataSize_ = {}, + size_t imageViewCaptureReplayDescriptorDataSize_ = {}, + size_t samplerCaptureReplayDescriptorDataSize_ = {}, + size_t accelerationStructureCaptureReplayDescriptorDataSize_ = {}, + size_t samplerDescriptorSize_ = {}, + size_t combinedImageSamplerDescriptorSize_ = {}, + size_t sampledImageDescriptorSize_ = {}, + size_t storageImageDescriptorSize_ = {}, + size_t uniformTexelBufferDescriptorSize_ = {}, + size_t robustUniformTexelBufferDescriptorSize_ = {}, + size_t storageTexelBufferDescriptorSize_ = {}, + size_t robustStorageTexelBufferDescriptorSize_ = {}, + size_t uniformBufferDescriptorSize_ = {}, + size_t robustUniformBufferDescriptorSize_ = {}, + size_t storageBufferDescriptorSize_ = {}, + size_t robustStorageBufferDescriptorSize_ = {}, + size_t inputAttachmentDescriptorSize_ = {}, + size_t accelerationStructureDescriptorSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxSamplerDescriptorBufferRange_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxResourceDescriptorBufferRange_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize samplerDescriptorBufferAddressSpaceSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize resourceDescriptorBufferAddressSpaceSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize descriptorBufferAddressSpaceSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , combinedImageSamplerDescriptorSingleArray{ combinedImageSamplerDescriptorSingleArray_ } + , bufferlessPushDescriptors{ bufferlessPushDescriptors_ } + , allowSamplerImageViewPostSubmitCreation{ allowSamplerImageViewPostSubmitCreation_ } + , descriptorBufferOffsetAlignment{ descriptorBufferOffsetAlignment_ } + , maxDescriptorBufferBindings{ maxDescriptorBufferBindings_ } + , maxResourceDescriptorBufferBindings{ maxResourceDescriptorBufferBindings_ } + , maxSamplerDescriptorBufferBindings{ maxSamplerDescriptorBufferBindings_ } + , maxEmbeddedImmutableSamplerBindings{ maxEmbeddedImmutableSamplerBindings_ } + , maxEmbeddedImmutableSamplers{ maxEmbeddedImmutableSamplers_ } + , bufferCaptureReplayDescriptorDataSize{ bufferCaptureReplayDescriptorDataSize_ } + , imageCaptureReplayDescriptorDataSize{ imageCaptureReplayDescriptorDataSize_ } + , imageViewCaptureReplayDescriptorDataSize{ imageViewCaptureReplayDescriptorDataSize_ } + , samplerCaptureReplayDescriptorDataSize{ samplerCaptureReplayDescriptorDataSize_ } + , accelerationStructureCaptureReplayDescriptorDataSize{ accelerationStructureCaptureReplayDescriptorDataSize_ } + , samplerDescriptorSize{ samplerDescriptorSize_ } + , combinedImageSamplerDescriptorSize{ combinedImageSamplerDescriptorSize_ } + , sampledImageDescriptorSize{ sampledImageDescriptorSize_ } + , storageImageDescriptorSize{ storageImageDescriptorSize_ } + , uniformTexelBufferDescriptorSize{ uniformTexelBufferDescriptorSize_ } + , robustUniformTexelBufferDescriptorSize{ robustUniformTexelBufferDescriptorSize_ } + , storageTexelBufferDescriptorSize{ storageTexelBufferDescriptorSize_ } + , robustStorageTexelBufferDescriptorSize{ robustStorageTexelBufferDescriptorSize_ } + , uniformBufferDescriptorSize{ uniformBufferDescriptorSize_ } + , robustUniformBufferDescriptorSize{ robustUniformBufferDescriptorSize_ } + , storageBufferDescriptorSize{ storageBufferDescriptorSize_ } + , robustStorageBufferDescriptorSize{ robustStorageBufferDescriptorSize_ } + , inputAttachmentDescriptorSize{ inputAttachmentDescriptorSize_ } + , accelerationStructureDescriptorSize{ accelerationStructureDescriptorSize_ } + , maxSamplerDescriptorBufferRange{ maxSamplerDescriptorBufferRange_ } + , maxResourceDescriptorBufferRange{ maxResourceDescriptorBufferRange_ } + , samplerDescriptorBufferAddressSpaceSize{ samplerDescriptorBufferAddressSpaceSize_ } + , resourceDescriptorBufferAddressSpaceSize{ resourceDescriptorBufferAddressSpaceSize_ } + , descriptorBufferAddressSpaceSize{ descriptorBufferAddressSpaceSize_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferPropertiesEXT( PhysicalDeviceDescriptorBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorBufferPropertiesEXT( VkPhysicalDeviceDescriptorBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorBufferPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorBufferPropertiesEXT & operator=( PhysicalDeviceDescriptorBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorBufferPropertiesEXT & operator=( VkPhysicalDeviceDescriptorBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDescriptorBufferPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + combinedImageSamplerDescriptorSingleArray, + bufferlessPushDescriptors, + allowSamplerImageViewPostSubmitCreation, + descriptorBufferOffsetAlignment, + maxDescriptorBufferBindings, + maxResourceDescriptorBufferBindings, + maxSamplerDescriptorBufferBindings, + maxEmbeddedImmutableSamplerBindings, + maxEmbeddedImmutableSamplers, + bufferCaptureReplayDescriptorDataSize, + imageCaptureReplayDescriptorDataSize, + imageViewCaptureReplayDescriptorDataSize, + samplerCaptureReplayDescriptorDataSize, + accelerationStructureCaptureReplayDescriptorDataSize, + samplerDescriptorSize, + combinedImageSamplerDescriptorSize, + sampledImageDescriptorSize, + storageImageDescriptorSize, + uniformTexelBufferDescriptorSize, + robustUniformTexelBufferDescriptorSize, + storageTexelBufferDescriptorSize, + robustStorageTexelBufferDescriptorSize, + uniformBufferDescriptorSize, + robustUniformBufferDescriptorSize, + storageBufferDescriptorSize, + robustStorageBufferDescriptorSize, + inputAttachmentDescriptorSize, + accelerationStructureDescriptorSize, + maxSamplerDescriptorBufferRange, + maxResourceDescriptorBufferRange, + samplerDescriptorBufferAddressSpaceSize, + resourceDescriptorBufferAddressSpaceSize, + descriptorBufferAddressSpaceSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorBufferPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorBufferPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( combinedImageSamplerDescriptorSingleArray == rhs.combinedImageSamplerDescriptorSingleArray ) && + ( bufferlessPushDescriptors == rhs.bufferlessPushDescriptors ) && + ( allowSamplerImageViewPostSubmitCreation == rhs.allowSamplerImageViewPostSubmitCreation ) && + ( descriptorBufferOffsetAlignment == rhs.descriptorBufferOffsetAlignment ) && ( maxDescriptorBufferBindings == rhs.maxDescriptorBufferBindings ) && + ( maxResourceDescriptorBufferBindings == rhs.maxResourceDescriptorBufferBindings ) && + ( maxSamplerDescriptorBufferBindings == rhs.maxSamplerDescriptorBufferBindings ) && + ( maxEmbeddedImmutableSamplerBindings == rhs.maxEmbeddedImmutableSamplerBindings ) && + ( maxEmbeddedImmutableSamplers == rhs.maxEmbeddedImmutableSamplers ) && + ( bufferCaptureReplayDescriptorDataSize == rhs.bufferCaptureReplayDescriptorDataSize ) && + ( imageCaptureReplayDescriptorDataSize == rhs.imageCaptureReplayDescriptorDataSize ) && + ( imageViewCaptureReplayDescriptorDataSize == rhs.imageViewCaptureReplayDescriptorDataSize ) && + ( samplerCaptureReplayDescriptorDataSize == rhs.samplerCaptureReplayDescriptorDataSize ) && + ( accelerationStructureCaptureReplayDescriptorDataSize == rhs.accelerationStructureCaptureReplayDescriptorDataSize ) && + ( samplerDescriptorSize == rhs.samplerDescriptorSize ) && ( combinedImageSamplerDescriptorSize == rhs.combinedImageSamplerDescriptorSize ) && + ( sampledImageDescriptorSize == rhs.sampledImageDescriptorSize ) && ( storageImageDescriptorSize == rhs.storageImageDescriptorSize ) && + ( uniformTexelBufferDescriptorSize == rhs.uniformTexelBufferDescriptorSize ) && + ( robustUniformTexelBufferDescriptorSize == rhs.robustUniformTexelBufferDescriptorSize ) && + ( storageTexelBufferDescriptorSize == rhs.storageTexelBufferDescriptorSize ) && + ( robustStorageTexelBufferDescriptorSize == rhs.robustStorageTexelBufferDescriptorSize ) && + ( uniformBufferDescriptorSize == rhs.uniformBufferDescriptorSize ) && + ( robustUniformBufferDescriptorSize == rhs.robustUniformBufferDescriptorSize ) && + ( storageBufferDescriptorSize == rhs.storageBufferDescriptorSize ) && + ( robustStorageBufferDescriptorSize == rhs.robustStorageBufferDescriptorSize ) && + ( inputAttachmentDescriptorSize == rhs.inputAttachmentDescriptorSize ) && + ( accelerationStructureDescriptorSize == rhs.accelerationStructureDescriptorSize ) && + ( maxSamplerDescriptorBufferRange == rhs.maxSamplerDescriptorBufferRange ) && + ( maxResourceDescriptorBufferRange == rhs.maxResourceDescriptorBufferRange ) && + ( samplerDescriptorBufferAddressSpaceSize == rhs.samplerDescriptorBufferAddressSpaceSize ) && + ( resourceDescriptorBufferAddressSpaceSize == rhs.resourceDescriptorBufferAddressSpaceSize ) && + ( descriptorBufferAddressSpaceSize == rhs.descriptorBufferAddressSpaceSize ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorBufferPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorBufferPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 combinedImageSamplerDescriptorSingleArray = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferlessPushDescriptors = {}; + VULKAN_HPP_NAMESPACE::Bool32 allowSamplerImageViewPostSubmitCreation = {}; + VULKAN_HPP_NAMESPACE::DeviceSize descriptorBufferOffsetAlignment = {}; + uint32_t maxDescriptorBufferBindings = {}; + uint32_t maxResourceDescriptorBufferBindings = {}; + uint32_t maxSamplerDescriptorBufferBindings = {}; + uint32_t maxEmbeddedImmutableSamplerBindings = {}; + uint32_t maxEmbeddedImmutableSamplers = {}; + size_t bufferCaptureReplayDescriptorDataSize = {}; + size_t imageCaptureReplayDescriptorDataSize = {}; + size_t imageViewCaptureReplayDescriptorDataSize = {}; + size_t samplerCaptureReplayDescriptorDataSize = {}; + size_t accelerationStructureCaptureReplayDescriptorDataSize = {}; + size_t samplerDescriptorSize = {}; + size_t combinedImageSamplerDescriptorSize = {}; + size_t sampledImageDescriptorSize = {}; + size_t storageImageDescriptorSize = {}; + size_t uniformTexelBufferDescriptorSize = {}; + size_t robustUniformTexelBufferDescriptorSize = {}; + size_t storageTexelBufferDescriptorSize = {}; + size_t robustStorageTexelBufferDescriptorSize = {}; + size_t uniformBufferDescriptorSize = {}; + size_t robustUniformBufferDescriptorSize = {}; + size_t storageBufferDescriptorSize = {}; + size_t robustStorageBufferDescriptorSize = {}; + size_t inputAttachmentDescriptorSize = {}; + size_t accelerationStructureDescriptorSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxSamplerDescriptorBufferRange = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxResourceDescriptorBufferRange = {}; + VULKAN_HPP_NAMESPACE::DeviceSize samplerDescriptorBufferAddressSpaceSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize resourceDescriptorBufferAddressSpaceSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize descriptorBufferAddressSpaceSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorBufferPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDescriptorBufferTensorFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorBufferTensorFeaturesARM.html + struct PhysicalDeviceDescriptorBufferTensorFeaturesARM + { + using NativeType = VkPhysicalDeviceDescriptorBufferTensorFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorBufferTensorFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferTensorFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferTensorDescriptors_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorBufferTensorDescriptors{ descriptorBufferTensorDescriptors_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDescriptorBufferTensorFeaturesARM( PhysicalDeviceDescriptorBufferTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorBufferTensorFeaturesARM( VkPhysicalDeviceDescriptorBufferTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorBufferTensorFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorBufferTensorFeaturesARM & operator=( PhysicalDeviceDescriptorBufferTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorBufferTensorFeaturesARM & operator=( VkPhysicalDeviceDescriptorBufferTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferTensorFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferTensorFeaturesARM & + setDescriptorBufferTensorDescriptors( VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferTensorDescriptors_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBufferTensorDescriptors = descriptorBufferTensorDescriptors_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDescriptorBufferTensorFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferTensorFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferTensorFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferTensorFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorBufferTensorDescriptors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorBufferTensorFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorBufferTensorFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorBufferTensorDescriptors == rhs.descriptorBufferTensorDescriptors ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorBufferTensorFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorBufferTensorFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBufferTensorDescriptors = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorBufferTensorFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceDescriptorBufferTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorBufferTensorPropertiesARM.html + struct PhysicalDeviceDescriptorBufferTensorPropertiesARM + { + using NativeType = VkPhysicalDeviceDescriptorBufferTensorPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorBufferTensorPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorBufferTensorPropertiesARM( size_t tensorCaptureReplayDescriptorDataSize_ = {}, + size_t tensorViewCaptureReplayDescriptorDataSize_ = {}, + size_t tensorDescriptorSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorCaptureReplayDescriptorDataSize{ tensorCaptureReplayDescriptorDataSize_ } + , tensorViewCaptureReplayDescriptorDataSize{ tensorViewCaptureReplayDescriptorDataSize_ } + , tensorDescriptorSize{ tensorDescriptorSize_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDescriptorBufferTensorPropertiesARM( PhysicalDeviceDescriptorBufferTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorBufferTensorPropertiesARM( VkPhysicalDeviceDescriptorBufferTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorBufferTensorPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorBufferTensorPropertiesARM & + operator=( PhysicalDeviceDescriptorBufferTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorBufferTensorPropertiesARM & operator=( VkPhysicalDeviceDescriptorBufferTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferTensorPropertiesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferTensorPropertiesARM & + setTensorCaptureReplayDescriptorDataSize( size_t tensorCaptureReplayDescriptorDataSize_ ) VULKAN_HPP_NOEXCEPT + { + tensorCaptureReplayDescriptorDataSize = tensorCaptureReplayDescriptorDataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferTensorPropertiesARM & + setTensorViewCaptureReplayDescriptorDataSize( size_t tensorViewCaptureReplayDescriptorDataSize_ ) VULKAN_HPP_NOEXCEPT + { + tensorViewCaptureReplayDescriptorDataSize = tensorViewCaptureReplayDescriptorDataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorBufferTensorPropertiesARM & setTensorDescriptorSize( size_t tensorDescriptorSize_ ) VULKAN_HPP_NOEXCEPT + { + tensorDescriptorSize = tensorDescriptorSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDescriptorBufferTensorPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferTensorPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferTensorPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorBufferTensorPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensorCaptureReplayDescriptorDataSize, tensorViewCaptureReplayDescriptorDataSize, tensorDescriptorSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorBufferTensorPropertiesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorBufferTensorPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorCaptureReplayDescriptorDataSize == rhs.tensorCaptureReplayDescriptorDataSize ) && + ( tensorViewCaptureReplayDescriptorDataSize == rhs.tensorViewCaptureReplayDescriptorDataSize ) && + ( tensorDescriptorSize == rhs.tensorDescriptorSize ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorBufferTensorPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorBufferTensorPropertiesARM; + void * pNext = {}; + size_t tensorCaptureReplayDescriptorDataSize = {}; + size_t tensorViewCaptureReplayDescriptorDataSize = {}; + size_t tensorDescriptorSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorBufferTensorPropertiesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceDescriptorIndexingFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html + struct PhysicalDeviceDescriptorIndexingFeatures + { + using NativeType = VkPhysicalDeviceDescriptorIndexingFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorIndexingFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderInputAttachmentArrayDynamicIndexing{ shaderInputAttachmentArrayDynamicIndexing_ } + , shaderUniformTexelBufferArrayDynamicIndexing{ shaderUniformTexelBufferArrayDynamicIndexing_ } + , shaderStorageTexelBufferArrayDynamicIndexing{ shaderStorageTexelBufferArrayDynamicIndexing_ } + , shaderUniformBufferArrayNonUniformIndexing{ shaderUniformBufferArrayNonUniformIndexing_ } + , shaderSampledImageArrayNonUniformIndexing{ shaderSampledImageArrayNonUniformIndexing_ } + , shaderStorageBufferArrayNonUniformIndexing{ shaderStorageBufferArrayNonUniformIndexing_ } + , shaderStorageImageArrayNonUniformIndexing{ shaderStorageImageArrayNonUniformIndexing_ } + , shaderInputAttachmentArrayNonUniformIndexing{ shaderInputAttachmentArrayNonUniformIndexing_ } + , shaderUniformTexelBufferArrayNonUniformIndexing{ shaderUniformTexelBufferArrayNonUniformIndexing_ } + , shaderStorageTexelBufferArrayNonUniformIndexing{ shaderStorageTexelBufferArrayNonUniformIndexing_ } + , descriptorBindingUniformBufferUpdateAfterBind{ descriptorBindingUniformBufferUpdateAfterBind_ } + , descriptorBindingSampledImageUpdateAfterBind{ descriptorBindingSampledImageUpdateAfterBind_ } + , descriptorBindingStorageImageUpdateAfterBind{ descriptorBindingStorageImageUpdateAfterBind_ } + , descriptorBindingStorageBufferUpdateAfterBind{ descriptorBindingStorageBufferUpdateAfterBind_ } + , descriptorBindingUniformTexelBufferUpdateAfterBind{ descriptorBindingUniformTexelBufferUpdateAfterBind_ } + , descriptorBindingStorageTexelBufferUpdateAfterBind{ descriptorBindingStorageTexelBufferUpdateAfterBind_ } + , descriptorBindingUpdateUnusedWhilePending{ descriptorBindingUpdateUnusedWhilePending_ } + , descriptorBindingPartiallyBound{ descriptorBindingPartiallyBound_ } + , descriptorBindingVariableDescriptorCount{ descriptorBindingVariableDescriptorCount_ } + , runtimeDescriptorArray{ runtimeDescriptorArray_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingFeatures( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorIndexingFeatures( VkPhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorIndexingFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorIndexingFeatures & operator=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorIndexingFeatures & operator=( VkPhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderInputAttachmentArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderUniformTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderStorageTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderUniformBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderSampledImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderStorageBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderStorageImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderInputAttachmentArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderUniformTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setShaderStorageTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingUniformBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingSampledImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingStorageImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingStorageBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUniformTexelBufferUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageTexelBufferUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingUpdateUnusedWhilePending( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingPartiallyBound( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingPartiallyBound = descriptorBindingPartiallyBound_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setDescriptorBindingVariableDescriptorCount( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & + setRuntimeDescriptorArray( VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ ) VULKAN_HPP_NOEXCEPT + { + runtimeDescriptorArray = runtimeDescriptorArray_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDescriptorIndexingFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorIndexingFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorIndexingFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorIndexingFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderInputAttachmentArrayDynamicIndexing, + shaderUniformTexelBufferArrayDynamicIndexing, + shaderStorageTexelBufferArrayDynamicIndexing, + shaderUniformBufferArrayNonUniformIndexing, + shaderSampledImageArrayNonUniformIndexing, + shaderStorageBufferArrayNonUniformIndexing, + shaderStorageImageArrayNonUniformIndexing, + shaderInputAttachmentArrayNonUniformIndexing, + shaderUniformTexelBufferArrayNonUniformIndexing, + shaderStorageTexelBufferArrayNonUniformIndexing, + descriptorBindingUniformBufferUpdateAfterBind, + descriptorBindingSampledImageUpdateAfterBind, + descriptorBindingStorageImageUpdateAfterBind, + descriptorBindingStorageBufferUpdateAfterBind, + descriptorBindingUniformTexelBufferUpdateAfterBind, + descriptorBindingStorageTexelBufferUpdateAfterBind, + descriptorBindingUpdateUnusedWhilePending, + descriptorBindingPartiallyBound, + descriptorBindingVariableDescriptorCount, + runtimeDescriptorArray ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorIndexingFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing ) && + ( shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing ) && + ( shaderStorageTexelBufferArrayDynamicIndexing == rhs.shaderStorageTexelBufferArrayDynamicIndexing ) && + ( shaderUniformBufferArrayNonUniformIndexing == rhs.shaderUniformBufferArrayNonUniformIndexing ) && + ( shaderSampledImageArrayNonUniformIndexing == rhs.shaderSampledImageArrayNonUniformIndexing ) && + ( shaderStorageBufferArrayNonUniformIndexing == rhs.shaderStorageBufferArrayNonUniformIndexing ) && + ( shaderStorageImageArrayNonUniformIndexing == rhs.shaderStorageImageArrayNonUniformIndexing ) && + ( shaderInputAttachmentArrayNonUniformIndexing == rhs.shaderInputAttachmentArrayNonUniformIndexing ) && + ( shaderUniformTexelBufferArrayNonUniformIndexing == rhs.shaderUniformTexelBufferArrayNonUniformIndexing ) && + ( shaderStorageTexelBufferArrayNonUniformIndexing == rhs.shaderStorageTexelBufferArrayNonUniformIndexing ) && + ( descriptorBindingUniformBufferUpdateAfterBind == rhs.descriptorBindingUniformBufferUpdateAfterBind ) && + ( descriptorBindingSampledImageUpdateAfterBind == rhs.descriptorBindingSampledImageUpdateAfterBind ) && + ( descriptorBindingStorageImageUpdateAfterBind == rhs.descriptorBindingStorageImageUpdateAfterBind ) && + ( descriptorBindingStorageBufferUpdateAfterBind == rhs.descriptorBindingStorageBufferUpdateAfterBind ) && + ( descriptorBindingUniformTexelBufferUpdateAfterBind == rhs.descriptorBindingUniformTexelBufferUpdateAfterBind ) && + ( descriptorBindingStorageTexelBufferUpdateAfterBind == rhs.descriptorBindingStorageTexelBufferUpdateAfterBind ) && + ( descriptorBindingUpdateUnusedWhilePending == rhs.descriptorBindingUpdateUnusedWhilePending ) && + ( descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound ) && + ( descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount ) && + ( runtimeDescriptorArray == rhs.runtimeDescriptorArray ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorIndexingFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorIndexingFeatures; + }; + + using PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures; + + // wrapper struct for struct VkPhysicalDeviceDescriptorIndexingProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html + struct PhysicalDeviceDescriptorIndexingProperties + { + using NativeType = VkPhysicalDeviceDescriptorIndexingProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorIndexingProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingProperties( uint32_t maxUpdateAfterBindDescriptorsInAllPools_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 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_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxUpdateAfterBindDescriptorsInAllPools{ maxUpdateAfterBindDescriptorsInAllPools_ } + , shaderUniformBufferArrayNonUniformIndexingNative{ shaderUniformBufferArrayNonUniformIndexingNative_ } + , shaderSampledImageArrayNonUniformIndexingNative{ shaderSampledImageArrayNonUniformIndexingNative_ } + , shaderStorageBufferArrayNonUniformIndexingNative{ shaderStorageBufferArrayNonUniformIndexingNative_ } + , shaderStorageImageArrayNonUniformIndexingNative{ shaderStorageImageArrayNonUniformIndexingNative_ } + , shaderInputAttachmentArrayNonUniformIndexingNative{ shaderInputAttachmentArrayNonUniformIndexingNative_ } + , robustBufferAccessUpdateAfterBind{ robustBufferAccessUpdateAfterBind_ } + , quadDivergentImplicitLod{ quadDivergentImplicitLod_ } + , maxPerStageDescriptorUpdateAfterBindSamplers{ maxPerStageDescriptorUpdateAfterBindSamplers_ } + , maxPerStageDescriptorUpdateAfterBindUniformBuffers{ maxPerStageDescriptorUpdateAfterBindUniformBuffers_ } + , maxPerStageDescriptorUpdateAfterBindStorageBuffers{ maxPerStageDescriptorUpdateAfterBindStorageBuffers_ } + , maxPerStageDescriptorUpdateAfterBindSampledImages{ maxPerStageDescriptorUpdateAfterBindSampledImages_ } + , maxPerStageDescriptorUpdateAfterBindStorageImages{ maxPerStageDescriptorUpdateAfterBindStorageImages_ } + , maxPerStageDescriptorUpdateAfterBindInputAttachments{ maxPerStageDescriptorUpdateAfterBindInputAttachments_ } + , maxPerStageUpdateAfterBindResources{ maxPerStageUpdateAfterBindResources_ } + , maxDescriptorSetUpdateAfterBindSamplers{ maxDescriptorSetUpdateAfterBindSamplers_ } + , maxDescriptorSetUpdateAfterBindUniformBuffers{ maxDescriptorSetUpdateAfterBindUniformBuffers_ } + , maxDescriptorSetUpdateAfterBindUniformBuffersDynamic{ maxDescriptorSetUpdateAfterBindUniformBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindStorageBuffers{ maxDescriptorSetUpdateAfterBindStorageBuffers_ } + , maxDescriptorSetUpdateAfterBindStorageBuffersDynamic{ maxDescriptorSetUpdateAfterBindStorageBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindSampledImages{ maxDescriptorSetUpdateAfterBindSampledImages_ } + , maxDescriptorSetUpdateAfterBindStorageImages{ maxDescriptorSetUpdateAfterBindStorageImages_ } + , maxDescriptorSetUpdateAfterBindInputAttachments{ maxDescriptorSetUpdateAfterBindInputAttachments_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorIndexingProperties( PhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorIndexingProperties( VkPhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorIndexingProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorIndexingProperties & operator=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorIndexingProperties & operator=( VkPhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDescriptorIndexingProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorIndexingProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorIndexingProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorIndexingProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxUpdateAfterBindDescriptorsInAllPools, + shaderUniformBufferArrayNonUniformIndexingNative, + shaderSampledImageArrayNonUniformIndexingNative, + shaderStorageBufferArrayNonUniformIndexingNative, + shaderStorageImageArrayNonUniformIndexingNative, + shaderInputAttachmentArrayNonUniformIndexingNative, + robustBufferAccessUpdateAfterBind, + quadDivergentImplicitLod, + maxPerStageDescriptorUpdateAfterBindSamplers, + maxPerStageDescriptorUpdateAfterBindUniformBuffers, + maxPerStageDescriptorUpdateAfterBindStorageBuffers, + maxPerStageDescriptorUpdateAfterBindSampledImages, + maxPerStageDescriptorUpdateAfterBindStorageImages, + maxPerStageDescriptorUpdateAfterBindInputAttachments, + maxPerStageUpdateAfterBindResources, + maxDescriptorSetUpdateAfterBindSamplers, + maxDescriptorSetUpdateAfterBindUniformBuffers, + maxDescriptorSetUpdateAfterBindUniformBuffersDynamic, + maxDescriptorSetUpdateAfterBindStorageBuffers, + maxDescriptorSetUpdateAfterBindStorageBuffersDynamic, + maxDescriptorSetUpdateAfterBindSampledImages, + maxDescriptorSetUpdateAfterBindStorageImages, + maxDescriptorSetUpdateAfterBindInputAttachments ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorIndexingProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorIndexingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools ) && + ( shaderUniformBufferArrayNonUniformIndexingNative == rhs.shaderUniformBufferArrayNonUniformIndexingNative ) && + ( shaderSampledImageArrayNonUniformIndexingNative == rhs.shaderSampledImageArrayNonUniformIndexingNative ) && + ( shaderStorageBufferArrayNonUniformIndexingNative == rhs.shaderStorageBufferArrayNonUniformIndexingNative ) && + ( shaderStorageImageArrayNonUniformIndexingNative == rhs.shaderStorageImageArrayNonUniformIndexingNative ) && + ( shaderInputAttachmentArrayNonUniformIndexingNative == rhs.shaderInputAttachmentArrayNonUniformIndexingNative ) && + ( robustBufferAccessUpdateAfterBind == rhs.robustBufferAccessUpdateAfterBind ) && ( quadDivergentImplicitLod == rhs.quadDivergentImplicitLod ) && + ( maxPerStageDescriptorUpdateAfterBindSamplers == rhs.maxPerStageDescriptorUpdateAfterBindSamplers ) && + ( maxPerStageDescriptorUpdateAfterBindUniformBuffers == rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers ) && + ( maxPerStageDescriptorUpdateAfterBindStorageBuffers == rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers ) && + ( maxPerStageDescriptorUpdateAfterBindSampledImages == rhs.maxPerStageDescriptorUpdateAfterBindSampledImages ) && + ( maxPerStageDescriptorUpdateAfterBindStorageImages == rhs.maxPerStageDescriptorUpdateAfterBindStorageImages ) && + ( maxPerStageDescriptorUpdateAfterBindInputAttachments == rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments ) && + ( maxPerStageUpdateAfterBindResources == rhs.maxPerStageUpdateAfterBindResources ) && + ( maxDescriptorSetUpdateAfterBindSamplers == rhs.maxDescriptorSetUpdateAfterBindSamplers ) && + ( maxDescriptorSetUpdateAfterBindUniformBuffers == rhs.maxDescriptorSetUpdateAfterBindUniformBuffers ) && + ( maxDescriptorSetUpdateAfterBindUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindStorageBuffers == rhs.maxDescriptorSetUpdateAfterBindStorageBuffers ) && + ( maxDescriptorSetUpdateAfterBindStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages ) && + ( maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages ) && + ( maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorIndexingProperties; + void * pNext = {}; + uint32_t maxUpdateAfterBindDescriptorsInAllPools = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 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 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorIndexingProperties; + }; + + using PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties; + + // wrapper struct for struct VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV.html + struct PhysicalDeviceDescriptorPoolOverallocationFeaturesNV + { + using NativeType = VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorPoolOverallocationFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 descriptorPoolOverallocation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorPoolOverallocation{ descriptorPoolOverallocation_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDescriptorPoolOverallocationFeaturesNV( PhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorPoolOverallocationFeaturesNV( VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorPoolOverallocationFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorPoolOverallocationFeaturesNV & + operator=( PhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorPoolOverallocationFeaturesNV & operator=( VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorPoolOverallocationFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorPoolOverallocationFeaturesNV & + setDescriptorPoolOverallocation( VULKAN_HPP_NAMESPACE::Bool32 descriptorPoolOverallocation_ ) VULKAN_HPP_NOEXCEPT + { + descriptorPoolOverallocation = descriptorPoolOverallocation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorPoolOverallocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorPoolOverallocation == rhs.descriptorPoolOverallocation ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorPoolOverallocationFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorPoolOverallocation = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorPoolOverallocationFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE.html + struct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE + { + using NativeType = VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( VULKAN_HPP_NAMESPACE::Bool32 descriptorSetHostMapping_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorSetHostMapping{ descriptorSetHostMapping_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & + operator=( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & operator=( VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE & + setDescriptorSetHostMapping( VULKAN_HPP_NAMESPACE::Bool32 descriptorSetHostMapping_ ) VULKAN_HPP_NOEXCEPT + { + descriptorSetHostMapping = descriptorSetHostMapping_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorSetHostMapping ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & ) const = default; +#else + bool operator==( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetHostMapping == rhs.descriptorSetHostMapping ); +# endif + } + + bool operator!=( PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorSetHostMapping = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE; + }; + + // wrapper struct for struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.html + struct PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV + { + using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCompute_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedComputePipelines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedComputeCaptureReplay_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceGeneratedCompute{ deviceGeneratedCompute_ } + , deviceGeneratedComputePipelines{ deviceGeneratedComputePipelines_ } + , deviceGeneratedComputeCaptureReplay{ deviceGeneratedComputeCaptureReplay_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV( PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV( VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV & + operator=( PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV & + operator=( VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV & + setDeviceGeneratedCompute( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCompute_ ) VULKAN_HPP_NOEXCEPT + { + deviceGeneratedCompute = deviceGeneratedCompute_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV & + setDeviceGeneratedComputePipelines( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedComputePipelines_ ) VULKAN_HPP_NOEXCEPT + { + deviceGeneratedComputePipelines = deviceGeneratedComputePipelines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV & + setDeviceGeneratedComputeCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedComputeCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + deviceGeneratedComputeCaptureReplay = deviceGeneratedComputeCaptureReplay_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceGeneratedCompute, deviceGeneratedComputePipelines, deviceGeneratedComputeCaptureReplay ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceGeneratedCompute == rhs.deviceGeneratedCompute ) && + ( deviceGeneratedComputePipelines == rhs.deviceGeneratedComputePipelines ) && + ( deviceGeneratedComputeCaptureReplay == rhs.deviceGeneratedComputeCaptureReplay ); +# endif + } + + bool operator!=( PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCompute = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedComputePipelines = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedComputeCaptureReplay = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT.html + struct PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT + { + using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dynamicGeneratedPipelineLayout_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceGeneratedCommands{ deviceGeneratedCommands_ } + , dynamicGeneratedPipelineLayout{ dynamicGeneratedPipelineLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT( PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT & operator=( PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT & operator=( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT & + setDeviceGeneratedCommands( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ ) VULKAN_HPP_NOEXCEPT + { + deviceGeneratedCommands = deviceGeneratedCommands_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT & + setDynamicGeneratedPipelineLayout( VULKAN_HPP_NAMESPACE::Bool32 dynamicGeneratedPipelineLayout_ ) VULKAN_HPP_NOEXCEPT + { + dynamicGeneratedPipelineLayout = dynamicGeneratedPipelineLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceGeneratedCommands, dynamicGeneratedPipelineLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceGeneratedCommands == rhs.deviceGeneratedCommands ) && + ( dynamicGeneratedPipelineLayout == rhs.dynamicGeneratedPipelineLayout ); +# endif + } + + bool operator!=( PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicGeneratedPipelineLayout = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.html + struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV + { + using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceGeneratedCommands{ deviceGeneratedCommands_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDeviceGeneratedCommandsFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & operator=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & operator=( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & + setDeviceGeneratedCommands( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ ) VULKAN_HPP_NOEXCEPT + { + deviceGeneratedCommands = deviceGeneratedCommands_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceGeneratedCommands ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceGeneratedCommands == rhs.deviceGeneratedCommands ); +# endif + } + + bool operator!=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT.html + struct PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT + { + using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT( uint32_t maxIndirectPipelineCount_ = {}, + uint32_t maxIndirectShaderObjectCount_ = {}, + uint32_t maxIndirectSequenceCount_ = {}, + uint32_t maxIndirectCommandsTokenCount_ = {}, + uint32_t maxIndirectCommandsTokenOffset_ = {}, + uint32_t maxIndirectCommandsIndirectStride_ = {}, + VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedIndirectCommandsShaderStages_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommandsTransformFeedback_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommandsMultiDrawIndirectCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxIndirectPipelineCount{ maxIndirectPipelineCount_ } + , maxIndirectShaderObjectCount{ maxIndirectShaderObjectCount_ } + , maxIndirectSequenceCount{ maxIndirectSequenceCount_ } + , maxIndirectCommandsTokenCount{ maxIndirectCommandsTokenCount_ } + , maxIndirectCommandsTokenOffset{ maxIndirectCommandsTokenOffset_ } + , maxIndirectCommandsIndirectStride{ maxIndirectCommandsIndirectStride_ } + , supportedIndirectCommandsInputModes{ supportedIndirectCommandsInputModes_ } + , supportedIndirectCommandsShaderStages{ supportedIndirectCommandsShaderStages_ } + , supportedIndirectCommandsShaderStagesPipelineBinding{ supportedIndirectCommandsShaderStagesPipelineBinding_ } + , supportedIndirectCommandsShaderStagesShaderBinding{ supportedIndirectCommandsShaderStagesShaderBinding_ } + , deviceGeneratedCommandsTransformFeedback{ deviceGeneratedCommandsTransformFeedback_ } + , deviceGeneratedCommandsMultiDrawIndirectCount{ deviceGeneratedCommandsMultiDrawIndirectCount_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT( PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT & + operator=( PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT & operator=( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxIndirectPipelineCount, + maxIndirectShaderObjectCount, + maxIndirectSequenceCount, + maxIndirectCommandsTokenCount, + maxIndirectCommandsTokenOffset, + maxIndirectCommandsIndirectStride, + supportedIndirectCommandsInputModes, + supportedIndirectCommandsShaderStages, + supportedIndirectCommandsShaderStagesPipelineBinding, + supportedIndirectCommandsShaderStagesShaderBinding, + deviceGeneratedCommandsTransformFeedback, + deviceGeneratedCommandsMultiDrawIndirectCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxIndirectPipelineCount == rhs.maxIndirectPipelineCount ) && + ( maxIndirectShaderObjectCount == rhs.maxIndirectShaderObjectCount ) && ( maxIndirectSequenceCount == rhs.maxIndirectSequenceCount ) && + ( maxIndirectCommandsTokenCount == rhs.maxIndirectCommandsTokenCount ) && + ( maxIndirectCommandsTokenOffset == rhs.maxIndirectCommandsTokenOffset ) && + ( maxIndirectCommandsIndirectStride == rhs.maxIndirectCommandsIndirectStride ) && + ( supportedIndirectCommandsInputModes == rhs.supportedIndirectCommandsInputModes ) && + ( supportedIndirectCommandsShaderStages == rhs.supportedIndirectCommandsShaderStages ) && + ( supportedIndirectCommandsShaderStagesPipelineBinding == rhs.supportedIndirectCommandsShaderStagesPipelineBinding ) && + ( supportedIndirectCommandsShaderStagesShaderBinding == rhs.supportedIndirectCommandsShaderStagesShaderBinding ) && + ( deviceGeneratedCommandsTransformFeedback == rhs.deviceGeneratedCommandsTransformFeedback ) && + ( deviceGeneratedCommandsMultiDrawIndirectCount == rhs.deviceGeneratedCommandsMultiDrawIndirectCount ); +# endif + } + + bool operator!=( PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + void * pNext = {}; + uint32_t maxIndirectPipelineCount = {}; + uint32_t maxIndirectShaderObjectCount = {}; + uint32_t maxIndirectSequenceCount = {}; + uint32_t maxIndirectCommandsTokenCount = {}; + uint32_t maxIndirectCommandsTokenOffset = {}; + uint32_t maxIndirectCommandsIndirectStride = {}; + VULKAN_HPP_NAMESPACE::IndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedIndirectCommandsShaderStages = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommandsTransformFeedback = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommandsMultiDrawIndirectCount = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.html + struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV + { + using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( uint32_t maxGraphicsShaderGroupCount_ = {}, + uint32_t maxIndirectSequenceCount_ = {}, + uint32_t maxIndirectCommandsTokenCount_ = {}, + uint32_t maxIndirectCommandsStreamCount_ = {}, + uint32_t maxIndirectCommandsTokenOffset_ = {}, + uint32_t maxIndirectCommandsStreamStride_ = {}, + uint32_t minSequencesCountBufferOffsetAlignment_ = {}, + uint32_t minSequencesIndexBufferOffsetAlignment_ = {}, + uint32_t minIndirectCommandsBufferOffsetAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxGraphicsShaderGroupCount{ maxGraphicsShaderGroupCount_ } + , maxIndirectSequenceCount{ maxIndirectSequenceCount_ } + , maxIndirectCommandsTokenCount{ maxIndirectCommandsTokenCount_ } + , maxIndirectCommandsStreamCount{ maxIndirectCommandsStreamCount_ } + , maxIndirectCommandsTokenOffset{ maxIndirectCommandsTokenOffset_ } + , maxIndirectCommandsStreamStride{ maxIndirectCommandsStreamStride_ } + , minSequencesCountBufferOffsetAlignment{ minSequencesCountBufferOffsetAlignment_ } + , minSequencesIndexBufferOffsetAlignment{ minSequencesIndexBufferOffsetAlignment_ } + , minIndirectCommandsBufferOffsetAlignment{ minIndirectCommandsBufferOffsetAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDeviceGeneratedCommandsPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDeviceGeneratedCommandsPropertiesNV & + operator=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDeviceGeneratedCommandsPropertiesNV & operator=( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxGraphicsShaderGroupCount, + maxIndirectSequenceCount, + maxIndirectCommandsTokenCount, + maxIndirectCommandsStreamCount, + maxIndirectCommandsTokenOffset, + maxIndirectCommandsStreamStride, + minSequencesCountBufferOffsetAlignment, + minSequencesIndexBufferOffsetAlignment, + minIndirectCommandsBufferOffsetAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxGraphicsShaderGroupCount == rhs.maxGraphicsShaderGroupCount ) && + ( maxIndirectSequenceCount == rhs.maxIndirectSequenceCount ) && ( maxIndirectCommandsTokenCount == rhs.maxIndirectCommandsTokenCount ) && + ( maxIndirectCommandsStreamCount == rhs.maxIndirectCommandsStreamCount ) && + ( maxIndirectCommandsTokenOffset == rhs.maxIndirectCommandsTokenOffset ) && + ( maxIndirectCommandsStreamStride == rhs.maxIndirectCommandsStreamStride ) && + ( minSequencesCountBufferOffsetAlignment == rhs.minSequencesCountBufferOffsetAlignment ) && + ( minSequencesIndexBufferOffsetAlignment == rhs.minSequencesIndexBufferOffsetAlignment ) && + ( minIndirectCommandsBufferOffsetAlignment == rhs.minIndirectCommandsBufferOffsetAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + void * pNext = {}; + uint32_t maxGraphicsShaderGroupCount = {}; + uint32_t maxIndirectSequenceCount = {}; + uint32_t maxIndirectCommandsTokenCount = {}; + uint32_t maxIndirectCommandsStreamCount = {}; + uint32_t maxIndirectCommandsTokenOffset = {}; + uint32_t maxIndirectCommandsStreamStride = {}; + uint32_t minSequencesCountBufferOffsetAlignment = {}; + uint32_t minSequencesIndexBufferOffsetAlignment = {}; + uint32_t minIndirectCommandsBufferOffsetAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.html + struct PhysicalDeviceDeviceMemoryReportFeaturesEXT + { + using NativeType = VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceMemoryReportFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceMemoryReport{ deviceMemoryReport_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDeviceMemoryReportFeaturesEXT( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDeviceMemoryReportFeaturesEXT( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDeviceMemoryReportFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDeviceMemoryReportFeaturesEXT & operator=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDeviceMemoryReportFeaturesEXT & operator=( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT & + setDeviceMemoryReport( VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport_ ) VULKAN_HPP_NOEXCEPT + { + deviceMemoryReport = deviceMemoryReport_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceMemoryReport ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMemoryReport == rhs.deviceMemoryReport ); +# endif + } + + bool operator!=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDeviceMemoryReportFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.html + struct PhysicalDeviceDiagnosticsConfigFeaturesNV + { + using NativeType = VkPhysicalDeviceDiagnosticsConfigFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDiagnosticsConfigFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , diagnosticsConfig{ diagnosticsConfig_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDiagnosticsConfigFeaturesNV( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDiagnosticsConfigFeaturesNV( VkPhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDiagnosticsConfigFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDiagnosticsConfigFeaturesNV & operator=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDiagnosticsConfigFeaturesNV & operator=( VkPhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV & + setDiagnosticsConfig( VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig_ ) VULKAN_HPP_NOEXCEPT + { + diagnosticsConfig = diagnosticsConfig_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, diagnosticsConfig ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDiagnosticsConfigFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( diagnosticsConfig == rhs.diagnosticsConfig ); +# endif + } + + bool operator!=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDiagnosticsConfigFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceDiscardRectanglePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDiscardRectanglePropertiesEXT.html + struct PhysicalDeviceDiscardRectanglePropertiesEXT + { + using NativeType = VkPhysicalDeviceDiscardRectanglePropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDiscardRectanglePropertiesEXT( uint32_t maxDiscardRectangles_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxDiscardRectangles{ maxDiscardRectangles_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDiscardRectanglePropertiesEXT( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDiscardRectanglePropertiesEXT( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDiscardRectanglePropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDiscardRectanglePropertiesEXT & operator=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDiscardRectanglePropertiesEXT & operator=( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDiscardRectanglePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDiscardRectanglePropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDiscardRectanglePropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDiscardRectanglePropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxDiscardRectangles ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDiscardRectanglePropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxDiscardRectangles == rhs.maxDiscardRectangles ); +# endif + } + + bool operator!=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT; + void * pNext = {}; + uint32_t maxDiscardRectangles = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDiscardRectanglePropertiesEXT; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDeviceDisplacementMicromapFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDisplacementMicromapFeaturesNV.html + struct PhysicalDeviceDisplacementMicromapFeaturesNV + { + using NativeType = VkPhysicalDeviceDisplacementMicromapFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDisplacementMicromapFeaturesNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDisplacementMicromapFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 displacementMicromap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , displacementMicromap{ displacementMicromap_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDisplacementMicromapFeaturesNV( PhysicalDeviceDisplacementMicromapFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDisplacementMicromapFeaturesNV( VkPhysicalDeviceDisplacementMicromapFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDisplacementMicromapFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDisplacementMicromapFeaturesNV & operator=( PhysicalDeviceDisplacementMicromapFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDisplacementMicromapFeaturesNV & operator=( VkPhysicalDeviceDisplacementMicromapFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDisplacementMicromapFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDisplacementMicromapFeaturesNV & + setDisplacementMicromap( VULKAN_HPP_NAMESPACE::Bool32 displacementMicromap_ ) VULKAN_HPP_NOEXCEPT + { + displacementMicromap = displacementMicromap_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDisplacementMicromapFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDisplacementMicromapFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDisplacementMicromapFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDisplacementMicromapFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, displacementMicromap ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDisplacementMicromapFeaturesNV const & ) const = default; +# else + bool operator==( PhysicalDeviceDisplacementMicromapFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displacementMicromap == rhs.displacementMicromap ); +# endif + } + + bool operator!=( PhysicalDeviceDisplacementMicromapFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDisplacementMicromapFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 displacementMicromap = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDisplacementMicromapFeaturesNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDeviceDisplacementMicromapPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDisplacementMicromapPropertiesNV.html + struct PhysicalDeviceDisplacementMicromapPropertiesNV + { + using NativeType = VkPhysicalDeviceDisplacementMicromapPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDisplacementMicromapPropertiesNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDisplacementMicromapPropertiesNV( uint32_t maxDisplacementMicromapSubdivisionLevel_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxDisplacementMicromapSubdivisionLevel{ maxDisplacementMicromapSubdivisionLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDisplacementMicromapPropertiesNV( PhysicalDeviceDisplacementMicromapPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDisplacementMicromapPropertiesNV( VkPhysicalDeviceDisplacementMicromapPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDisplacementMicromapPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDisplacementMicromapPropertiesNV & operator=( PhysicalDeviceDisplacementMicromapPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDisplacementMicromapPropertiesNV & operator=( VkPhysicalDeviceDisplacementMicromapPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDisplacementMicromapPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDisplacementMicromapPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDisplacementMicromapPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDisplacementMicromapPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxDisplacementMicromapSubdivisionLevel ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDisplacementMicromapPropertiesNV const & ) const = default; +# else + bool operator==( PhysicalDeviceDisplacementMicromapPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxDisplacementMicromapSubdivisionLevel == rhs.maxDisplacementMicromapSubdivisionLevel ); +# endif + } + + bool operator!=( PhysicalDeviceDisplacementMicromapPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDisplacementMicromapPropertiesNV; + void * pNext = {}; + uint32_t maxDisplacementMicromapSubdivisionLevel = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDisplacementMicromapPropertiesNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkPhysicalDeviceDriverProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDriverProperties.html + struct PhysicalDeviceDriverProperties + { + using NativeType = VkPhysicalDeviceDriverProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDriverProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDriverProperties( VULKAN_HPP_NAMESPACE::DriverId driverID_ = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary, + std::array const & driverName_ = {}, + std::array const & driverInfo_ = {}, + VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , driverID{ driverID_ } + , driverName{ driverName_ } + , driverInfo{ driverInfo_ } + , conformanceVersion{ conformanceVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDriverProperties( PhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDriverProperties( VkPhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDriverProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDriverProperties & operator=( PhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDriverProperties & operator=( VkPhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDriverProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDriverProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDriverProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDriverProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ConformanceVersion const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, driverID, driverName, driverInfo, conformanceVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = driverID <=> rhs.driverID; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( driverName, rhs.driverName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( driverInfo, rhs.driverInfo ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = conformanceVersion <=> rhs.conformanceVersion; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( driverID == rhs.driverID ) && ( strcmp( driverName, rhs.driverName ) == 0 ) && + ( strcmp( driverInfo, rhs.driverInfo ) == 0 ) && ( conformanceVersion == rhs.conformanceVersion ); + } + + bool operator!=( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDriverProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DriverId driverID = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverName = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverInfo = {}; + VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDriverProperties; + }; + + using PhysicalDeviceDriverPropertiesKHR = PhysicalDeviceDriverProperties; + + // wrapper struct for struct VkPhysicalDeviceDrmPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDrmPropertiesEXT.html + struct PhysicalDeviceDrmPropertiesEXT + { + using NativeType = VkPhysicalDeviceDrmPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDrmPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDrmPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 hasPrimary_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hasRender_ = {}, + int64_t primaryMajor_ = {}, + int64_t primaryMinor_ = {}, + int64_t renderMajor_ = {}, + int64_t renderMinor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hasPrimary{ hasPrimary_ } + , hasRender{ hasRender_ } + , primaryMajor{ primaryMajor_ } + , primaryMinor{ primaryMinor_ } + , renderMajor{ renderMajor_ } + , renderMinor{ renderMinor_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDrmPropertiesEXT( PhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDrmPropertiesEXT( VkPhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDrmPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDrmPropertiesEXT & operator=( PhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDrmPropertiesEXT & operator=( VkPhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceDrmPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDrmPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDrmPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDrmPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hasPrimary, hasRender, primaryMajor, primaryMinor, renderMajor, renderMinor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDrmPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDrmPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hasPrimary == rhs.hasPrimary ) && ( hasRender == rhs.hasRender ) && + ( primaryMajor == rhs.primaryMajor ) && ( primaryMinor == rhs.primaryMinor ) && ( renderMajor == rhs.renderMajor ) && + ( renderMinor == rhs.renderMinor ); +# endif + } + + bool operator!=( PhysicalDeviceDrmPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDrmPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasPrimary = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasRender = {}; + int64_t primaryMajor = {}; + int64_t primaryMinor = {}; + int64_t renderMajor = {}; + int64_t renderMinor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDrmPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceDynamicRenderingFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDynamicRenderingFeatures.html + struct PhysicalDeviceDynamicRenderingFeatures + { + using NativeType = VkPhysicalDeviceDynamicRenderingFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDynamicRenderingFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingFeatures( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dynamicRendering{ dynamicRendering_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingFeatures( PhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDynamicRenderingFeatures( VkPhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDynamicRenderingFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDynamicRenderingFeatures & operator=( PhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDynamicRenderingFeatures & operator=( VkPhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingFeatures & setDynamicRendering( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ ) VULKAN_HPP_NOEXCEPT + { + dynamicRendering = dynamicRendering_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDynamicRenderingFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dynamicRendering ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDynamicRenderingFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceDynamicRenderingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicRendering == rhs.dynamicRendering ); +# endif + } + + bool operator!=( PhysicalDeviceDynamicRenderingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDynamicRenderingFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDynamicRenderingFeatures; + }; + + using PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeatures; + + // wrapper struct for struct VkPhysicalDeviceDynamicRenderingLocalReadFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDynamicRenderingLocalReadFeatures.html + struct PhysicalDeviceDynamicRenderingLocalReadFeatures + { + using NativeType = VkPhysicalDeviceDynamicRenderingLocalReadFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDynamicRenderingLocalReadFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingLocalReadFeatures( VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalRead_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dynamicRenderingLocalRead{ dynamicRenderingLocalRead_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceDynamicRenderingLocalReadFeatures( PhysicalDeviceDynamicRenderingLocalReadFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDynamicRenderingLocalReadFeatures( VkPhysicalDeviceDynamicRenderingLocalReadFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDynamicRenderingLocalReadFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDynamicRenderingLocalReadFeatures & operator=( PhysicalDeviceDynamicRenderingLocalReadFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDynamicRenderingLocalReadFeatures & operator=( VkPhysicalDeviceDynamicRenderingLocalReadFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingLocalReadFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingLocalReadFeatures & + setDynamicRenderingLocalRead( VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalRead_ ) VULKAN_HPP_NOEXCEPT + { + dynamicRenderingLocalRead = dynamicRenderingLocalRead_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDynamicRenderingLocalReadFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingLocalReadFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingLocalReadFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingLocalReadFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dynamicRenderingLocalRead ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDynamicRenderingLocalReadFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceDynamicRenderingLocalReadFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicRenderingLocalRead == rhs.dynamicRenderingLocalRead ); +# endif + } + + bool operator!=( PhysicalDeviceDynamicRenderingLocalReadFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDynamicRenderingLocalReadFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalRead = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDynamicRenderingLocalReadFeatures; + }; + + using PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR = PhysicalDeviceDynamicRenderingLocalReadFeatures; + + // wrapper struct for struct VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.html + struct PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT + { + using NativeType = VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingUnusedAttachments_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dynamicRenderingUnusedAttachments{ dynamicRenderingUnusedAttachments_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT( PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT( VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT & + operator=( PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT & + operator=( VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT & + setDynamicRenderingUnusedAttachments( VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingUnusedAttachments_ ) VULKAN_HPP_NOEXCEPT + { + dynamicRenderingUnusedAttachments = dynamicRenderingUnusedAttachments_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dynamicRenderingUnusedAttachments ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicRenderingUnusedAttachments == rhs.dynamicRenderingUnusedAttachments ); +# endif + } + + bool operator!=( PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingUnusedAttachments = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceExclusiveScissorFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExclusiveScissorFeaturesNV.html + struct PhysicalDeviceExclusiveScissorFeaturesNV + { + using NativeType = VkPhysicalDeviceExclusiveScissorFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExclusiveScissorFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , exclusiveScissor{ exclusiveScissor_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExclusiveScissorFeaturesNV( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExclusiveScissorFeaturesNV( VkPhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExclusiveScissorFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExclusiveScissorFeaturesNV & operator=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExclusiveScissorFeaturesNV & operator=( VkPhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV & setExclusiveScissor( VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor_ ) VULKAN_HPP_NOEXCEPT + { + exclusiveScissor = exclusiveScissor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExclusiveScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExclusiveScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExclusiveScissorFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExclusiveScissorFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, exclusiveScissor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExclusiveScissorFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exclusiveScissor == rhs.exclusiveScissor ); +# endif + } + + bool operator!=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExclusiveScissorFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.html + struct PhysicalDeviceExtendedDynamicState2FeaturesEXT + { + using NativeType = VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedDynamicState2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , extendedDynamicState2{ extendedDynamicState2_ } + , extendedDynamicState2LogicOp{ extendedDynamicState2LogicOp_ } + , extendedDynamicState2PatchControlPoints{ extendedDynamicState2PatchControlPoints_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedDynamicState2FeaturesEXT( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExtendedDynamicState2FeaturesEXT( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExtendedDynamicState2FeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExtendedDynamicState2FeaturesEXT & operator=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExtendedDynamicState2FeaturesEXT & operator=( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & + setExtendedDynamicState2( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState2 = extendedDynamicState2_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & + setExtendedDynamicState2LogicOp( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState2LogicOp = extendedDynamicState2LogicOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & + setExtendedDynamicState2PatchControlPoints( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState2PatchControlPoints = extendedDynamicState2PatchControlPoints_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, extendedDynamicState2, extendedDynamicState2LogicOp, extendedDynamicState2PatchControlPoints ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedDynamicState2 == rhs.extendedDynamicState2 ) && + ( extendedDynamicState2LogicOp == rhs.extendedDynamicState2LogicOp ) && + ( extendedDynamicState2PatchControlPoints == rhs.extendedDynamicState2PatchControlPoints ); +# endif + } + + bool operator!=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2 = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExtendedDynamicState2FeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExtendedDynamicState3FeaturesEXT.html + struct PhysicalDeviceExtendedDynamicState3FeaturesEXT + { + using NativeType = VkPhysicalDeviceExtendedDynamicState3FeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedDynamicState3FeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedDynamicState3FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3TessellationDomainOrigin_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClampEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3PolygonMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RasterizationSamples_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3SampleMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3AlphaToCoverageEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3AlphaToOneEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LogicOpEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendEquation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorWriteMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RasterizationStream_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ConservativeRasterizationMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ExtraPrimitiveOverestimationSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClipEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3SampleLocationsEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendAdvanced_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ProvokingVertexMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LineRasterizationMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LineStippleEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClipNegativeOneToOne_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ViewportWScalingEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ViewportSwizzle_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageToColorEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageToColorLocation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationTableEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationTable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageReductionMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RepresentativeFragmentTestEnable_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ShadingRateImageEnable_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , extendedDynamicState3TessellationDomainOrigin{ extendedDynamicState3TessellationDomainOrigin_ } + , extendedDynamicState3DepthClampEnable{ extendedDynamicState3DepthClampEnable_ } + , extendedDynamicState3PolygonMode{ extendedDynamicState3PolygonMode_ } + , extendedDynamicState3RasterizationSamples{ extendedDynamicState3RasterizationSamples_ } + , extendedDynamicState3SampleMask{ extendedDynamicState3SampleMask_ } + , extendedDynamicState3AlphaToCoverageEnable{ extendedDynamicState3AlphaToCoverageEnable_ } + , extendedDynamicState3AlphaToOneEnable{ extendedDynamicState3AlphaToOneEnable_ } + , extendedDynamicState3LogicOpEnable{ extendedDynamicState3LogicOpEnable_ } + , extendedDynamicState3ColorBlendEnable{ extendedDynamicState3ColorBlendEnable_ } + , extendedDynamicState3ColorBlendEquation{ extendedDynamicState3ColorBlendEquation_ } + , extendedDynamicState3ColorWriteMask{ extendedDynamicState3ColorWriteMask_ } + , extendedDynamicState3RasterizationStream{ extendedDynamicState3RasterizationStream_ } + , extendedDynamicState3ConservativeRasterizationMode{ extendedDynamicState3ConservativeRasterizationMode_ } + , extendedDynamicState3ExtraPrimitiveOverestimationSize{ extendedDynamicState3ExtraPrimitiveOverestimationSize_ } + , extendedDynamicState3DepthClipEnable{ extendedDynamicState3DepthClipEnable_ } + , extendedDynamicState3SampleLocationsEnable{ extendedDynamicState3SampleLocationsEnable_ } + , extendedDynamicState3ColorBlendAdvanced{ extendedDynamicState3ColorBlendAdvanced_ } + , extendedDynamicState3ProvokingVertexMode{ extendedDynamicState3ProvokingVertexMode_ } + , extendedDynamicState3LineRasterizationMode{ extendedDynamicState3LineRasterizationMode_ } + , extendedDynamicState3LineStippleEnable{ extendedDynamicState3LineStippleEnable_ } + , extendedDynamicState3DepthClipNegativeOneToOne{ extendedDynamicState3DepthClipNegativeOneToOne_ } + , extendedDynamicState3ViewportWScalingEnable{ extendedDynamicState3ViewportWScalingEnable_ } + , extendedDynamicState3ViewportSwizzle{ extendedDynamicState3ViewportSwizzle_ } + , extendedDynamicState3CoverageToColorEnable{ extendedDynamicState3CoverageToColorEnable_ } + , extendedDynamicState3CoverageToColorLocation{ extendedDynamicState3CoverageToColorLocation_ } + , extendedDynamicState3CoverageModulationMode{ extendedDynamicState3CoverageModulationMode_ } + , extendedDynamicState3CoverageModulationTableEnable{ extendedDynamicState3CoverageModulationTableEnable_ } + , extendedDynamicState3CoverageModulationTable{ extendedDynamicState3CoverageModulationTable_ } + , extendedDynamicState3CoverageReductionMode{ extendedDynamicState3CoverageReductionMode_ } + , extendedDynamicState3RepresentativeFragmentTestEnable{ extendedDynamicState3RepresentativeFragmentTestEnable_ } + , extendedDynamicState3ShadingRateImageEnable{ extendedDynamicState3ShadingRateImageEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedDynamicState3FeaturesEXT( PhysicalDeviceExtendedDynamicState3FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExtendedDynamicState3FeaturesEXT( VkPhysicalDeviceExtendedDynamicState3FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExtendedDynamicState3FeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExtendedDynamicState3FeaturesEXT & operator=( PhysicalDeviceExtendedDynamicState3FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExtendedDynamicState3FeaturesEXT & operator=( VkPhysicalDeviceExtendedDynamicState3FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3TessellationDomainOrigin( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3TessellationDomainOrigin_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3TessellationDomainOrigin = extendedDynamicState3TessellationDomainOrigin_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3DepthClampEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClampEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3DepthClampEnable = extendedDynamicState3DepthClampEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3PolygonMode( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3PolygonMode_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3PolygonMode = extendedDynamicState3PolygonMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3RasterizationSamples( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RasterizationSamples_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3RasterizationSamples = extendedDynamicState3RasterizationSamples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3SampleMask( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3SampleMask_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3SampleMask = extendedDynamicState3SampleMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3AlphaToCoverageEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3AlphaToCoverageEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3AlphaToCoverageEnable = extendedDynamicState3AlphaToCoverageEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3AlphaToOneEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3AlphaToOneEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3AlphaToOneEnable = extendedDynamicState3AlphaToOneEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3LogicOpEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LogicOpEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3LogicOpEnable = extendedDynamicState3LogicOpEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ColorBlendEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ColorBlendEnable = extendedDynamicState3ColorBlendEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ColorBlendEquation( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendEquation_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ColorBlendEquation = extendedDynamicState3ColorBlendEquation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ColorWriteMask( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorWriteMask_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ColorWriteMask = extendedDynamicState3ColorWriteMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3RasterizationStream( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RasterizationStream_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3RasterizationStream = extendedDynamicState3RasterizationStream_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & setExtendedDynamicState3ConservativeRasterizationMode( + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ConservativeRasterizationMode_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ConservativeRasterizationMode = extendedDynamicState3ConservativeRasterizationMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & setExtendedDynamicState3ExtraPrimitiveOverestimationSize( + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ExtraPrimitiveOverestimationSize_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ExtraPrimitiveOverestimationSize = extendedDynamicState3ExtraPrimitiveOverestimationSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3DepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClipEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3DepthClipEnable = extendedDynamicState3DepthClipEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3SampleLocationsEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3SampleLocationsEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3SampleLocationsEnable = extendedDynamicState3SampleLocationsEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ColorBlendAdvanced( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendAdvanced_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ColorBlendAdvanced = extendedDynamicState3ColorBlendAdvanced_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ProvokingVertexMode( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ProvokingVertexMode_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ProvokingVertexMode = extendedDynamicState3ProvokingVertexMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3LineRasterizationMode( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LineRasterizationMode_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3LineRasterizationMode = extendedDynamicState3LineRasterizationMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3LineStippleEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LineStippleEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3LineStippleEnable = extendedDynamicState3LineStippleEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3DepthClipNegativeOneToOne( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClipNegativeOneToOne_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3DepthClipNegativeOneToOne = extendedDynamicState3DepthClipNegativeOneToOne_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ViewportWScalingEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ViewportWScalingEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ViewportWScalingEnable = extendedDynamicState3ViewportWScalingEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ViewportSwizzle( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ViewportSwizzle_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ViewportSwizzle = extendedDynamicState3ViewportSwizzle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3CoverageToColorEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageToColorEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3CoverageToColorEnable = extendedDynamicState3CoverageToColorEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3CoverageToColorLocation( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageToColorLocation_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3CoverageToColorLocation = extendedDynamicState3CoverageToColorLocation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3CoverageModulationMode( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationMode_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3CoverageModulationMode = extendedDynamicState3CoverageModulationMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & setExtendedDynamicState3CoverageModulationTableEnable( + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationTableEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3CoverageModulationTableEnable = extendedDynamicState3CoverageModulationTableEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3CoverageModulationTable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationTable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3CoverageModulationTable = extendedDynamicState3CoverageModulationTable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3CoverageReductionMode( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageReductionMode_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3CoverageReductionMode = extendedDynamicState3CoverageReductionMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & setExtendedDynamicState3RepresentativeFragmentTestEnable( + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RepresentativeFragmentTestEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3RepresentativeFragmentTestEnable = extendedDynamicState3RepresentativeFragmentTestEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState3FeaturesEXT & + setExtendedDynamicState3ShadingRateImageEnable( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ShadingRateImageEnable_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState3ShadingRateImageEnable = extendedDynamicState3ShadingRateImageEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExtendedDynamicState3FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState3FeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState3FeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + extendedDynamicState3TessellationDomainOrigin, + extendedDynamicState3DepthClampEnable, + extendedDynamicState3PolygonMode, + extendedDynamicState3RasterizationSamples, + extendedDynamicState3SampleMask, + extendedDynamicState3AlphaToCoverageEnable, + extendedDynamicState3AlphaToOneEnable, + extendedDynamicState3LogicOpEnable, + extendedDynamicState3ColorBlendEnable, + extendedDynamicState3ColorBlendEquation, + extendedDynamicState3ColorWriteMask, + extendedDynamicState3RasterizationStream, + extendedDynamicState3ConservativeRasterizationMode, + extendedDynamicState3ExtraPrimitiveOverestimationSize, + extendedDynamicState3DepthClipEnable, + extendedDynamicState3SampleLocationsEnable, + extendedDynamicState3ColorBlendAdvanced, + extendedDynamicState3ProvokingVertexMode, + extendedDynamicState3LineRasterizationMode, + extendedDynamicState3LineStippleEnable, + extendedDynamicState3DepthClipNegativeOneToOne, + extendedDynamicState3ViewportWScalingEnable, + extendedDynamicState3ViewportSwizzle, + extendedDynamicState3CoverageToColorEnable, + extendedDynamicState3CoverageToColorLocation, + extendedDynamicState3CoverageModulationMode, + extendedDynamicState3CoverageModulationTableEnable, + extendedDynamicState3CoverageModulationTable, + extendedDynamicState3CoverageReductionMode, + extendedDynamicState3RepresentativeFragmentTestEnable, + extendedDynamicState3ShadingRateImageEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExtendedDynamicState3FeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceExtendedDynamicState3FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( extendedDynamicState3TessellationDomainOrigin == rhs.extendedDynamicState3TessellationDomainOrigin ) && + ( extendedDynamicState3DepthClampEnable == rhs.extendedDynamicState3DepthClampEnable ) && + ( extendedDynamicState3PolygonMode == rhs.extendedDynamicState3PolygonMode ) && + ( extendedDynamicState3RasterizationSamples == rhs.extendedDynamicState3RasterizationSamples ) && + ( extendedDynamicState3SampleMask == rhs.extendedDynamicState3SampleMask ) && + ( extendedDynamicState3AlphaToCoverageEnable == rhs.extendedDynamicState3AlphaToCoverageEnable ) && + ( extendedDynamicState3AlphaToOneEnable == rhs.extendedDynamicState3AlphaToOneEnable ) && + ( extendedDynamicState3LogicOpEnable == rhs.extendedDynamicState3LogicOpEnable ) && + ( extendedDynamicState3ColorBlendEnable == rhs.extendedDynamicState3ColorBlendEnable ) && + ( extendedDynamicState3ColorBlendEquation == rhs.extendedDynamicState3ColorBlendEquation ) && + ( extendedDynamicState3ColorWriteMask == rhs.extendedDynamicState3ColorWriteMask ) && + ( extendedDynamicState3RasterizationStream == rhs.extendedDynamicState3RasterizationStream ) && + ( extendedDynamicState3ConservativeRasterizationMode == rhs.extendedDynamicState3ConservativeRasterizationMode ) && + ( extendedDynamicState3ExtraPrimitiveOverestimationSize == rhs.extendedDynamicState3ExtraPrimitiveOverestimationSize ) && + ( extendedDynamicState3DepthClipEnable == rhs.extendedDynamicState3DepthClipEnable ) && + ( extendedDynamicState3SampleLocationsEnable == rhs.extendedDynamicState3SampleLocationsEnable ) && + ( extendedDynamicState3ColorBlendAdvanced == rhs.extendedDynamicState3ColorBlendAdvanced ) && + ( extendedDynamicState3ProvokingVertexMode == rhs.extendedDynamicState3ProvokingVertexMode ) && + ( extendedDynamicState3LineRasterizationMode == rhs.extendedDynamicState3LineRasterizationMode ) && + ( extendedDynamicState3LineStippleEnable == rhs.extendedDynamicState3LineStippleEnable ) && + ( extendedDynamicState3DepthClipNegativeOneToOne == rhs.extendedDynamicState3DepthClipNegativeOneToOne ) && + ( extendedDynamicState3ViewportWScalingEnable == rhs.extendedDynamicState3ViewportWScalingEnable ) && + ( extendedDynamicState3ViewportSwizzle == rhs.extendedDynamicState3ViewportSwizzle ) && + ( extendedDynamicState3CoverageToColorEnable == rhs.extendedDynamicState3CoverageToColorEnable ) && + ( extendedDynamicState3CoverageToColorLocation == rhs.extendedDynamicState3CoverageToColorLocation ) && + ( extendedDynamicState3CoverageModulationMode == rhs.extendedDynamicState3CoverageModulationMode ) && + ( extendedDynamicState3CoverageModulationTableEnable == rhs.extendedDynamicState3CoverageModulationTableEnable ) && + ( extendedDynamicState3CoverageModulationTable == rhs.extendedDynamicState3CoverageModulationTable ) && + ( extendedDynamicState3CoverageReductionMode == rhs.extendedDynamicState3CoverageReductionMode ) && + ( extendedDynamicState3RepresentativeFragmentTestEnable == rhs.extendedDynamicState3RepresentativeFragmentTestEnable ) && + ( extendedDynamicState3ShadingRateImageEnable == rhs.extendedDynamicState3ShadingRateImageEnable ); +# endif + } + + bool operator!=( PhysicalDeviceExtendedDynamicState3FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedDynamicState3FeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3TessellationDomainOrigin = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClampEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3PolygonMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RasterizationSamples = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3SampleMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3AlphaToCoverageEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3AlphaToOneEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LogicOpEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendEquation = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorWriteMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RasterizationStream = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ConservativeRasterizationMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ExtraPrimitiveOverestimationSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClipEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3SampleLocationsEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ColorBlendAdvanced = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ProvokingVertexMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LineRasterizationMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3LineStippleEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3DepthClipNegativeOneToOne = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ViewportWScalingEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ViewportSwizzle = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageToColorEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageToColorLocation = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationTableEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageModulationTable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3CoverageReductionMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3RepresentativeFragmentTestEnable = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState3ShadingRateImageEnable = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExtendedDynamicState3FeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceExtendedDynamicState3PropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.html + struct PhysicalDeviceExtendedDynamicState3PropertiesEXT + { + using NativeType = VkPhysicalDeviceExtendedDynamicState3PropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedDynamicState3PropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedDynamicState3PropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 dynamicPrimitiveTopologyUnrestricted_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dynamicPrimitiveTopologyUnrestricted{ dynamicPrimitiveTopologyUnrestricted_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedDynamicState3PropertiesEXT( PhysicalDeviceExtendedDynamicState3PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExtendedDynamicState3PropertiesEXT( VkPhysicalDeviceExtendedDynamicState3PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExtendedDynamicState3PropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExtendedDynamicState3PropertiesEXT & operator=( PhysicalDeviceExtendedDynamicState3PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExtendedDynamicState3PropertiesEXT & operator=( VkPhysicalDeviceExtendedDynamicState3PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceExtendedDynamicState3PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState3PropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState3PropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicState3PropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dynamicPrimitiveTopologyUnrestricted ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExtendedDynamicState3PropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceExtendedDynamicState3PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicPrimitiveTopologyUnrestricted == rhs.dynamicPrimitiveTopologyUnrestricted ); +# endif + } + + bool operator!=( PhysicalDeviceExtendedDynamicState3PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedDynamicState3PropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicPrimitiveTopologyUnrestricted = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExtendedDynamicState3PropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.html + struct PhysicalDeviceExtendedDynamicStateFeaturesEXT + { + using NativeType = VkPhysicalDeviceExtendedDynamicStateFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedDynamicStateFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , extendedDynamicState{ extendedDynamicState_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedDynamicStateFeaturesEXT( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExtendedDynamicStateFeaturesEXT( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExtendedDynamicStateFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExtendedDynamicStateFeaturesEXT & operator=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExtendedDynamicStateFeaturesEXT & operator=( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT & + setExtendedDynamicState( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState_ ) VULKAN_HPP_NOEXCEPT + { + extendedDynamicState = extendedDynamicState_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, extendedDynamicState ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedDynamicState == rhs.extendedDynamicState ); +# endif + } + + bool operator!=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExtendedDynamicStateFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV.html + struct PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV + { + using NativeType = VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 extendedSparseAddressSpace_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , extendedSparseAddressSpace{ extendedSparseAddressSpace_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV( PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV( VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV & + operator=( PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV & operator=( VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV & + setExtendedSparseAddressSpace( VULKAN_HPP_NAMESPACE::Bool32 extendedSparseAddressSpace_ ) VULKAN_HPP_NOEXCEPT + { + extendedSparseAddressSpace = extendedSparseAddressSpace_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, extendedSparseAddressSpace ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedSparseAddressSpace == rhs.extendedSparseAddressSpace ); +# endif + } + + bool operator!=( PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 extendedSparseAddressSpace = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.html + struct PhysicalDeviceExtendedSparseAddressSpacePropertiesNV + { + using NativeType = VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExtendedSparseAddressSpacePropertiesNV( VULKAN_HPP_NAMESPACE::DeviceSize extendedSparseAddressSpaceSize_ = {}, + VULKAN_HPP_NAMESPACE::ImageUsageFlags extendedSparseImageUsageFlags_ = {}, + VULKAN_HPP_NAMESPACE::BufferUsageFlags extendedSparseBufferUsageFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , extendedSparseAddressSpaceSize{ extendedSparseAddressSpaceSize_ } + , extendedSparseImageUsageFlags{ extendedSparseImageUsageFlags_ } + , extendedSparseBufferUsageFlags{ extendedSparseBufferUsageFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExtendedSparseAddressSpacePropertiesNV( PhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExtendedSparseAddressSpacePropertiesNV( VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExtendedSparseAddressSpacePropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExtendedSparseAddressSpacePropertiesNV & + operator=( PhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExtendedSparseAddressSpacePropertiesNV & operator=( VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, extendedSparseAddressSpaceSize, extendedSparseImageUsageFlags, extendedSparseBufferUsageFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedSparseAddressSpaceSize == rhs.extendedSparseAddressSpaceSize ) && + ( extendedSparseImageUsageFlags == rhs.extendedSparseImageUsageFlags ) && ( extendedSparseBufferUsageFlags == rhs.extendedSparseBufferUsageFlags ); +# endif + } + + bool operator!=( PhysicalDeviceExtendedSparseAddressSpacePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize extendedSparseAddressSpaceSize = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags extendedSparseImageUsageFlags = {}; + VULKAN_HPP_NAMESPACE::BufferUsageFlags extendedSparseBufferUsageFlags = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExtendedSparseAddressSpacePropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceExternalBufferInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalBufferInfo.html + struct PhysicalDeviceExternalBufferInfo + { + using NativeType = VkPhysicalDeviceExternalBufferInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalBufferInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalBufferInfo( + VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , usage{ usage_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalBufferInfo( PhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalBufferInfo( VkPhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalBufferInfo( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalBufferInfo & operator=( PhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalBufferInfo & operator=( VkPhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalBufferInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalBufferInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalBufferInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalBufferInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, usage, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalBufferInfo const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( usage == rhs.usage ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( PhysicalDeviceExternalBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalBufferInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::BufferCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::BufferUsageFlags usage = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalBufferInfo; + }; + + using PhysicalDeviceExternalBufferInfoKHR = PhysicalDeviceExternalBufferInfo; + + // wrapper struct for struct VkPhysicalDeviceExternalComputeQueuePropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalComputeQueuePropertiesNV.html + struct PhysicalDeviceExternalComputeQueuePropertiesNV + { + using NativeType = VkPhysicalDeviceExternalComputeQueuePropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalComputeQueuePropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalComputeQueuePropertiesNV( uint32_t externalDataSize_ = {}, + uint32_t maxExternalQueues_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalDataSize{ externalDataSize_ } + , maxExternalQueues{ maxExternalQueues_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExternalComputeQueuePropertiesNV( PhysicalDeviceExternalComputeQueuePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalComputeQueuePropertiesNV( VkPhysicalDeviceExternalComputeQueuePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalComputeQueuePropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalComputeQueuePropertiesNV & operator=( PhysicalDeviceExternalComputeQueuePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalComputeQueuePropertiesNV & operator=( VkPhysicalDeviceExternalComputeQueuePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceExternalComputeQueuePropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalComputeQueuePropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalComputeQueuePropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalComputeQueuePropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalDataSize, maxExternalQueues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalComputeQueuePropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalComputeQueuePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalDataSize == rhs.externalDataSize ) && ( maxExternalQueues == rhs.maxExternalQueues ); +# endif + } + + bool operator!=( PhysicalDeviceExternalComputeQueuePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalComputeQueuePropertiesNV; + void * pNext = {}; + uint32_t externalDataSize = {}; + uint32_t maxExternalQueues = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalComputeQueuePropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceExternalFenceInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalFenceInfo.html + struct PhysicalDeviceExternalFenceInfo + { + using NativeType = VkPhysicalDeviceExternalFenceInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalFenceInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFenceInfo( + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFenceInfo( PhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalFenceInfo( VkPhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalFenceInfo( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalFenceInfo & operator=( PhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalFenceInfo & operator=( VkPhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalFenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalFenceInfo const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalFenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( PhysicalDeviceExternalFenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalFenceInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalFenceInfo; + }; + + using PhysicalDeviceExternalFenceInfoKHR = PhysicalDeviceExternalFenceInfo; + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkPhysicalDeviceExternalFormatResolveFeaturesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalFormatResolveFeaturesANDROID.html + struct PhysicalDeviceExternalFormatResolveFeaturesANDROID + { + using NativeType = VkPhysicalDeviceExternalFormatResolveFeaturesANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalFormatResolveFeaturesANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFormatResolveFeaturesANDROID( VULKAN_HPP_NAMESPACE::Bool32 externalFormatResolve_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalFormatResolve{ externalFormatResolve_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExternalFormatResolveFeaturesANDROID( PhysicalDeviceExternalFormatResolveFeaturesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalFormatResolveFeaturesANDROID( VkPhysicalDeviceExternalFormatResolveFeaturesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalFormatResolveFeaturesANDROID( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalFormatResolveFeaturesANDROID & + operator=( PhysicalDeviceExternalFormatResolveFeaturesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalFormatResolveFeaturesANDROID & operator=( VkPhysicalDeviceExternalFormatResolveFeaturesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFormatResolveFeaturesANDROID & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFormatResolveFeaturesANDROID & + setExternalFormatResolve( VULKAN_HPP_NAMESPACE::Bool32 externalFormatResolve_ ) VULKAN_HPP_NOEXCEPT + { + externalFormatResolve = externalFormatResolve_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalFormatResolveFeaturesANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFormatResolveFeaturesANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFormatResolveFeaturesANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFormatResolveFeaturesANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalFormatResolve ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalFormatResolveFeaturesANDROID const & ) const = default; +# else + bool operator==( PhysicalDeviceExternalFormatResolveFeaturesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalFormatResolve == rhs.externalFormatResolve ); +# endif + } + + bool operator!=( PhysicalDeviceExternalFormatResolveFeaturesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalFormatResolveFeaturesANDROID; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 externalFormatResolve = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalFormatResolveFeaturesANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + // wrapper struct for struct VkPhysicalDeviceExternalFormatResolvePropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalFormatResolvePropertiesANDROID.html + struct PhysicalDeviceExternalFormatResolvePropertiesANDROID + { + using NativeType = VkPhysicalDeviceExternalFormatResolvePropertiesANDROID; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalFormatResolvePropertiesANDROID; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFormatResolvePropertiesANDROID( + VULKAN_HPP_NAMESPACE::Bool32 nullColorAttachmentWithExternalFormatResolve_ = {}, + VULKAN_HPP_NAMESPACE::ChromaLocation externalFormatResolveChromaOffsetX_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::ChromaLocation externalFormatResolveChromaOffsetY_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , nullColorAttachmentWithExternalFormatResolve{ nullColorAttachmentWithExternalFormatResolve_ } + , externalFormatResolveChromaOffsetX{ externalFormatResolveChromaOffsetX_ } + , externalFormatResolveChromaOffsetY{ externalFormatResolveChromaOffsetY_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExternalFormatResolvePropertiesANDROID( PhysicalDeviceExternalFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalFormatResolvePropertiesANDROID( VkPhysicalDeviceExternalFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalFormatResolvePropertiesANDROID( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalFormatResolvePropertiesANDROID & + operator=( PhysicalDeviceExternalFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalFormatResolvePropertiesANDROID & operator=( VkPhysicalDeviceExternalFormatResolvePropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceExternalFormatResolvePropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFormatResolvePropertiesANDROID &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFormatResolvePropertiesANDROID const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalFormatResolvePropertiesANDROID *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, nullColorAttachmentWithExternalFormatResolve, externalFormatResolveChromaOffsetX, externalFormatResolveChromaOffsetY ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalFormatResolvePropertiesANDROID const & ) const = default; +# else + bool operator==( PhysicalDeviceExternalFormatResolvePropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( nullColorAttachmentWithExternalFormatResolve == rhs.nullColorAttachmentWithExternalFormatResolve ) && + ( externalFormatResolveChromaOffsetX == rhs.externalFormatResolveChromaOffsetX ) && + ( externalFormatResolveChromaOffsetY == rhs.externalFormatResolveChromaOffsetY ); +# endif + } + + bool operator!=( PhysicalDeviceExternalFormatResolvePropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalFormatResolvePropertiesANDROID; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 nullColorAttachmentWithExternalFormatResolve = {}; + VULKAN_HPP_NAMESPACE::ChromaLocation externalFormatResolveChromaOffsetX = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::ChromaLocation externalFormatResolveChromaOffsetY = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalFormatResolvePropertiesANDROID; + }; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + // wrapper struct for struct VkPhysicalDeviceExternalImageFormatInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalImageFormatInfo.html + struct PhysicalDeviceExternalImageFormatInfo + { + using NativeType = VkPhysicalDeviceExternalImageFormatInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalImageFormatInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalImageFormatInfo( + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalImageFormatInfo( PhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalImageFormatInfo( VkPhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalImageFormatInfo( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalImageFormatInfo & operator=( PhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalImageFormatInfo & operator=( VkPhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalImageFormatInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalImageFormatInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalImageFormatInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalImageFormatInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalImageFormatInfo const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalImageFormatInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( PhysicalDeviceExternalImageFormatInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalImageFormatInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalImageFormatInfo; + }; + + using PhysicalDeviceExternalImageFormatInfoKHR = PhysicalDeviceExternalImageFormatInfo; + + // wrapper struct for struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.html + struct PhysicalDeviceExternalMemoryHostPropertiesEXT + { + using NativeType = VkPhysicalDeviceExternalMemoryHostPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryHostPropertiesEXT( VULKAN_HPP_NAMESPACE::DeviceSize minImportedHostPointerAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minImportedHostPointerAlignment{ minImportedHostPointerAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExternalMemoryHostPropertiesEXT( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalMemoryHostPropertiesEXT( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalMemoryHostPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalMemoryHostPropertiesEXT & operator=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalMemoryHostPropertiesEXT & operator=( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minImportedHostPointerAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalMemoryHostPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minImportedHostPointerAlignment == rhs.minImportedHostPointerAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minImportedHostPointerAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalMemoryHostPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceExternalMemoryRDMAFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.html + struct PhysicalDeviceExternalMemoryRDMAFeaturesNV + { + using NativeType = VkPhysicalDeviceExternalMemoryRDMAFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryRDMAFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , externalMemoryRDMA{ externalMemoryRDMA_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryRDMAFeaturesNV( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalMemoryRDMAFeaturesNV( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalMemoryRDMAFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalMemoryRDMAFeaturesNV & operator=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalMemoryRDMAFeaturesNV & operator=( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV & + setExternalMemoryRDMA( VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA_ ) VULKAN_HPP_NOEXCEPT + { + externalMemoryRDMA = externalMemoryRDMA_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, externalMemoryRDMA ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryRDMA == rhs.externalMemoryRDMA ); +# endif + } + + bool operator!=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalMemoryRDMAFeaturesNV; + }; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + // wrapper struct for struct VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX.html + struct PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX + { + using NativeType = VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX( VULKAN_HPP_NAMESPACE::Bool32 screenBufferImport_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , screenBufferImport{ screenBufferImport_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX( PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX( VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX & + operator=( PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX & operator=( VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX & + setScreenBufferImport( VULKAN_HPP_NAMESPACE::Bool32 screenBufferImport_ ) VULKAN_HPP_NOEXCEPT + { + screenBufferImport = screenBufferImport_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, screenBufferImport ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & ) const = default; +# else + bool operator==( PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( screenBufferImport == rhs.screenBufferImport ); +# endif + } + + bool operator!=( PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 screenBufferImport = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + // wrapper struct for struct VkPhysicalDeviceExternalSemaphoreInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalSemaphoreInfo.html + struct PhysicalDeviceExternalSemaphoreInfo + { + using NativeType = VkPhysicalDeviceExternalSemaphoreInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalSemaphoreInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalSemaphoreInfo( + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalSemaphoreInfo( PhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalSemaphoreInfo( VkPhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalSemaphoreInfo( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalSemaphoreInfo & operator=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalSemaphoreInfo & operator=( VkPhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalSemaphoreInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalSemaphoreInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalSemaphoreInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalSemaphoreInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalSemaphoreInfo const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalSemaphoreInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalSemaphoreInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalSemaphoreInfo; + }; + + using PhysicalDeviceExternalSemaphoreInfoKHR = PhysicalDeviceExternalSemaphoreInfo; + + // wrapper struct for struct VkPhysicalDeviceExternalTensorInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceExternalTensorInfoARM.html + struct PhysicalDeviceExternalTensorInfoARM + { + using NativeType = VkPhysicalDeviceExternalTensorInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalTensorInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalTensorInfoARM( + VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags_ = {}, + const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pDescription{ pDescription_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalTensorInfoARM( PhysicalDeviceExternalTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceExternalTensorInfoARM( VkPhysicalDeviceExternalTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceExternalTensorInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceExternalTensorInfoARM & operator=( PhysicalDeviceExternalTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceExternalTensorInfoARM & operator=( VkPhysicalDeviceExternalTensorInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalTensorInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalTensorInfoARM & setFlags( VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalTensorInfoARM & + setPDescription( const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription_ ) VULKAN_HPP_NOEXCEPT + { + pDescription = pDescription_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalTensorInfoARM & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceExternalTensorInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalTensorInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalTensorInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceExternalTensorInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, pDescription, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceExternalTensorInfoARM const & ) const = default; +#else + bool operator==( PhysicalDeviceExternalTensorInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pDescription == rhs.pDescription ) && + ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( PhysicalDeviceExternalTensorInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceExternalTensorInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorCreateFlagsARM flags = {}; + const VULKAN_HPP_NAMESPACE::TensorDescriptionARM * pDescription = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceExternalTensorInfoARM; + }; + + // wrapper struct for struct VkPhysicalDeviceFaultFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFaultFeaturesEXT.html + struct PhysicalDeviceFaultFeaturesEXT + { + using NativeType = VkPhysicalDeviceFaultFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFaultFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFaultFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 deviceFault_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceFaultVendorBinary_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceFault{ deviceFault_ } + , deviceFaultVendorBinary{ deviceFaultVendorBinary_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFaultFeaturesEXT( PhysicalDeviceFaultFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFaultFeaturesEXT( VkPhysicalDeviceFaultFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFaultFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFaultFeaturesEXT & operator=( PhysicalDeviceFaultFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFaultFeaturesEXT & operator=( VkPhysicalDeviceFaultFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFaultFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFaultFeaturesEXT & setDeviceFault( VULKAN_HPP_NAMESPACE::Bool32 deviceFault_ ) VULKAN_HPP_NOEXCEPT + { + deviceFault = deviceFault_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFaultFeaturesEXT & + setDeviceFaultVendorBinary( VULKAN_HPP_NAMESPACE::Bool32 deviceFaultVendorBinary_ ) VULKAN_HPP_NOEXCEPT + { + deviceFaultVendorBinary = deviceFaultVendorBinary_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFaultFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFaultFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFaultFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFaultFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceFault, deviceFaultVendorBinary ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFaultFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFaultFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceFault == rhs.deviceFault ) && + ( deviceFaultVendorBinary == rhs.deviceFaultVendorBinary ); +# endif + } + + bool operator!=( PhysicalDeviceFaultFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFaultFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceFault = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceFaultVendorBinary = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFaultFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceFeatures2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFeatures2.html + struct PhysicalDeviceFeatures2 + { + using NativeType = VkPhysicalDeviceFeatures2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFeatures2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures2( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , features{ features_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFeatures2( PhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFeatures2( VkPhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFeatures2( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFeatures2 & operator=( PhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFeatures2 & operator=( VkPhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 & setFeatures( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const & features_ ) VULKAN_HPP_NOEXCEPT + { + features = features_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFeatures2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFeatures2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFeatures2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFeatures2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, features ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFeatures2 const & ) const = default; +#else + bool operator==( PhysicalDeviceFeatures2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( features == rhs.features ); +# endif + } + + bool operator!=( PhysicalDeviceFeatures2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFeatures2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFeatures2; + }; + + using PhysicalDeviceFeatures2KHR = PhysicalDeviceFeatures2; + + // wrapper struct for struct VkPhysicalDeviceFloatControlsProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFloatControlsProperties.html + struct PhysicalDeviceFloatControlsProperties + { + using NativeType = VkPhysicalDeviceFloatControlsProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFloatControlsProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFloatControlsProperties( + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , denormBehaviorIndependence{ denormBehaviorIndependence_ } + , roundingModeIndependence{ roundingModeIndependence_ } + , shaderSignedZeroInfNanPreserveFloat16{ shaderSignedZeroInfNanPreserveFloat16_ } + , shaderSignedZeroInfNanPreserveFloat32{ shaderSignedZeroInfNanPreserveFloat32_ } + , shaderSignedZeroInfNanPreserveFloat64{ shaderSignedZeroInfNanPreserveFloat64_ } + , shaderDenormPreserveFloat16{ shaderDenormPreserveFloat16_ } + , shaderDenormPreserveFloat32{ shaderDenormPreserveFloat32_ } + , shaderDenormPreserveFloat64{ shaderDenormPreserveFloat64_ } + , shaderDenormFlushToZeroFloat16{ shaderDenormFlushToZeroFloat16_ } + , shaderDenormFlushToZeroFloat32{ shaderDenormFlushToZeroFloat32_ } + , shaderDenormFlushToZeroFloat64{ shaderDenormFlushToZeroFloat64_ } + , shaderRoundingModeRTEFloat16{ shaderRoundingModeRTEFloat16_ } + , shaderRoundingModeRTEFloat32{ shaderRoundingModeRTEFloat32_ } + , shaderRoundingModeRTEFloat64{ shaderRoundingModeRTEFloat64_ } + , shaderRoundingModeRTZFloat16{ shaderRoundingModeRTZFloat16_ } + , shaderRoundingModeRTZFloat32{ shaderRoundingModeRTZFloat32_ } + , shaderRoundingModeRTZFloat64{ shaderRoundingModeRTZFloat64_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFloatControlsProperties( PhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFloatControlsProperties( VkPhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFloatControlsProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFloatControlsProperties & operator=( PhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFloatControlsProperties & operator=( VkPhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFloatControlsProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFloatControlsProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFloatControlsProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFloatControlsProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + denormBehaviorIndependence, + roundingModeIndependence, + shaderSignedZeroInfNanPreserveFloat16, + shaderSignedZeroInfNanPreserveFloat32, + shaderSignedZeroInfNanPreserveFloat64, + shaderDenormPreserveFloat16, + shaderDenormPreserveFloat32, + shaderDenormPreserveFloat64, + shaderDenormFlushToZeroFloat16, + shaderDenormFlushToZeroFloat32, + shaderDenormFlushToZeroFloat64, + shaderRoundingModeRTEFloat16, + shaderRoundingModeRTEFloat32, + shaderRoundingModeRTEFloat64, + shaderRoundingModeRTZFloat16, + shaderRoundingModeRTZFloat32, + shaderRoundingModeRTZFloat64 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFloatControlsProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceFloatControlsProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( denormBehaviorIndependence == rhs.denormBehaviorIndependence ) && + ( roundingModeIndependence == rhs.roundingModeIndependence ) && + ( shaderSignedZeroInfNanPreserveFloat16 == rhs.shaderSignedZeroInfNanPreserveFloat16 ) && + ( shaderSignedZeroInfNanPreserveFloat32 == rhs.shaderSignedZeroInfNanPreserveFloat32 ) && + ( shaderSignedZeroInfNanPreserveFloat64 == rhs.shaderSignedZeroInfNanPreserveFloat64 ) && + ( shaderDenormPreserveFloat16 == rhs.shaderDenormPreserveFloat16 ) && ( shaderDenormPreserveFloat32 == rhs.shaderDenormPreserveFloat32 ) && + ( shaderDenormPreserveFloat64 == rhs.shaderDenormPreserveFloat64 ) && ( shaderDenormFlushToZeroFloat16 == rhs.shaderDenormFlushToZeroFloat16 ) && + ( shaderDenormFlushToZeroFloat32 == rhs.shaderDenormFlushToZeroFloat32 ) && + ( shaderDenormFlushToZeroFloat64 == rhs.shaderDenormFlushToZeroFloat64 ) && ( shaderRoundingModeRTEFloat16 == rhs.shaderRoundingModeRTEFloat16 ) && + ( shaderRoundingModeRTEFloat32 == rhs.shaderRoundingModeRTEFloat32 ) && ( shaderRoundingModeRTEFloat64 == rhs.shaderRoundingModeRTEFloat64 ) && + ( shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16 ) && ( shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32 ) && + ( shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64 ); +# endif + } + + bool operator!=( PhysicalDeviceFloatControlsProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFloatControlsProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFloatControlsProperties; + }; + + using PhysicalDeviceFloatControlsPropertiesKHR = PhysicalDeviceFloatControlsProperties; + + // wrapper struct for struct VkPhysicalDeviceFormatPackFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFormatPackFeaturesARM.html + struct PhysicalDeviceFormatPackFeaturesARM + { + using NativeType = VkPhysicalDeviceFormatPackFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFormatPackFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFormatPackFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 formatPack_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , formatPack{ formatPack_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFormatPackFeaturesARM( PhysicalDeviceFormatPackFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFormatPackFeaturesARM( VkPhysicalDeviceFormatPackFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFormatPackFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFormatPackFeaturesARM & operator=( PhysicalDeviceFormatPackFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFormatPackFeaturesARM & operator=( VkPhysicalDeviceFormatPackFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFormatPackFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFormatPackFeaturesARM & setFormatPack( VULKAN_HPP_NAMESPACE::Bool32 formatPack_ ) VULKAN_HPP_NOEXCEPT + { + formatPack = formatPack_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFormatPackFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFormatPackFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFormatPackFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFormatPackFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, formatPack ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFormatPackFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceFormatPackFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatPack == rhs.formatPack ); +# endif + } + + bool operator!=( PhysicalDeviceFormatPackFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFormatPackFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 formatPack = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFormatPackFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.html + struct PhysicalDeviceFragmentDensityMap2FeaturesEXT + { + using NativeType = VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMap2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityMapDeferred{ fragmentDensityMapDeferred_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMap2FeaturesEXT( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMap2FeaturesEXT( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMap2FeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMap2FeaturesEXT & operator=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMap2FeaturesEXT & operator=( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT & + setFragmentDensityMapDeferred( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityMapDeferred = fragmentDensityMapDeferred_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityMapDeferred ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapDeferred == rhs.fragmentDensityMapDeferred ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMap2FeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.html + struct PhysicalDeviceFragmentDensityMap2PropertiesEXT + { + using NativeType = VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMap2PropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 subsampledLoads_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 subsampledCoarseReconstructionEarlyAccess_ = {}, + uint32_t maxSubsampledArrayLayers_ = {}, + uint32_t maxDescriptorSetSubsampledSamplers_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subsampledLoads{ subsampledLoads_ } + , subsampledCoarseReconstructionEarlyAccess{ subsampledCoarseReconstructionEarlyAccess_ } + , maxSubsampledArrayLayers{ maxSubsampledArrayLayers_ } + , maxDescriptorSetSubsampledSamplers{ maxDescriptorSetSubsampledSamplers_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentDensityMap2PropertiesEXT( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMap2PropertiesEXT( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMap2PropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMap2PropertiesEXT & operator=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMap2PropertiesEXT & operator=( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subsampledLoads, subsampledCoarseReconstructionEarlyAccess, maxSubsampledArrayLayers, maxDescriptorSetSubsampledSamplers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subsampledLoads == rhs.subsampledLoads ) && + ( subsampledCoarseReconstructionEarlyAccess == rhs.subsampledCoarseReconstructionEarlyAccess ) && + ( maxSubsampledArrayLayers == rhs.maxSubsampledArrayLayers ) && ( maxDescriptorSetSubsampledSamplers == rhs.maxDescriptorSetSubsampledSamplers ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 subsampledLoads = {}; + VULKAN_HPP_NAMESPACE::Bool32 subsampledCoarseReconstructionEarlyAccess = {}; + uint32_t maxSubsampledArrayLayers = {}; + uint32_t maxDescriptorSetSubsampledSamplers = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMap2PropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.html + struct PhysicalDeviceFragmentDensityMapFeaturesEXT + { + using NativeType = VkPhysicalDeviceFragmentDensityMapFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityMap{ fragmentDensityMap_ } + , fragmentDensityMapDynamic{ fragmentDensityMapDynamic_ } + , fragmentDensityMapNonSubsampledImages{ fragmentDensityMapNonSubsampledImages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapFeaturesEXT( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMapFeaturesEXT( VkPhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMapFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMapFeaturesEXT & operator=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMapFeaturesEXT & operator=( VkPhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & + setFragmentDensityMap( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityMap = fragmentDensityMap_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & + setFragmentDensityMapDynamic( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityMapDynamic = fragmentDensityMapDynamic_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & + setFragmentDensityMapNonSubsampledImages( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityMapNonSubsampledImages = fragmentDensityMapNonSubsampledImages_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityMap, fragmentDensityMapDynamic, fragmentDensityMapNonSubsampledImages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMapFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMap == rhs.fragmentDensityMap ) && + ( fragmentDensityMapDynamic == rhs.fragmentDensityMapDynamic ) && + ( fragmentDensityMapNonSubsampledImages == rhs.fragmentDensityMapNonSubsampledImages ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMapFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE.html + struct PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE + { + using NativeType = VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapLayered_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityMapLayered{ fragmentDensityMapLayered_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE( PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE( VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE & + operator=( PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE & operator=( VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityMapLayered ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapLayered == rhs.fragmentDensityMapLayered ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapLayered = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE.html + struct PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE + { + using NativeType = VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE( uint32_t maxFragmentDensityMapLayers_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxFragmentDensityMapLayers{ maxFragmentDensityMapLayers_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE( PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE( VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE & + operator=( PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE & + operator=( VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxFragmentDensityMapLayers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxFragmentDensityMapLayers == rhs.maxFragmentDensityMapLayers ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + void * pNext = {}; + uint32_t maxFragmentDensityMapLayers = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT.html + struct PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT + { + using NativeType = VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityMapOffset{ fragmentDensityMapOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT( PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT & + operator=( PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT & operator=( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT & + setFragmentDensityMapOffset( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityMapOffset = fragmentDensityMapOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityMapOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapOffset == rhs.fragmentDensityMapOffset ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + }; + + using PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM = PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT.html + struct PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT + { + using NativeType = VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT( VULKAN_HPP_NAMESPACE::Extent2D fragmentDensityOffsetGranularity_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityOffsetGranularity{ fragmentDensityOffsetGranularity_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT( PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT & + operator=( PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT & operator=( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityOffsetGranularity ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityOffsetGranularity == rhs.fragmentDensityOffsetGranularity ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D fragmentDensityOffsetGranularity = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + }; + + using PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM = PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + + // wrapper struct for struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.html + struct PhysicalDeviceFragmentDensityMapPropertiesEXT + { + using NativeType = VkPhysicalDeviceFragmentDensityMapPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapPropertiesEXT( VULKAN_HPP_NAMESPACE::Extent2D minFragmentDensityTexelSize_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxFragmentDensityTexelSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityInvocations_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minFragmentDensityTexelSize{ minFragmentDensityTexelSize_ } + , maxFragmentDensityTexelSize{ maxFragmentDensityTexelSize_ } + , fragmentDensityInvocations{ fragmentDensityInvocations_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentDensityMapPropertiesEXT( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentDensityMapPropertiesEXT( VkPhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentDensityMapPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentDensityMapPropertiesEXT & operator=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentDensityMapPropertiesEXT & operator=( VkPhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minFragmentDensityTexelSize, maxFragmentDensityTexelSize, fragmentDensityInvocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentDensityMapPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minFragmentDensityTexelSize == rhs.minFragmentDensityTexelSize ) && + ( maxFragmentDensityTexelSize == rhs.maxFragmentDensityTexelSize ) && ( fragmentDensityInvocations == rhs.fragmentDensityInvocations ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D minFragmentDensityTexelSize = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxFragmentDensityTexelSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityInvocations = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentDensityMapPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR.html + struct PhysicalDeviceFragmentShaderBarycentricFeaturesKHR + { + using NativeType = VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentShaderBarycentric{ fragmentShaderBarycentric_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShaderBarycentricFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & + operator=( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & operator=( VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesKHR & + setFragmentShaderBarycentric( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric_ ) VULKAN_HPP_NOEXCEPT + { + fragmentShaderBarycentric = fragmentShaderBarycentric_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentShaderBarycentric ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentShaderBarycentric == rhs.fragmentShaderBarycentric ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShaderBarycentricFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + }; + + using PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesKHR; + + // wrapper struct for struct VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.html + struct PhysicalDeviceFragmentShaderBarycentricPropertiesKHR + { + using NativeType = VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 triStripVertexOrderIndependentOfProvokingVertex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , triStripVertexOrderIndependentOfProvokingVertex{ triStripVertexOrderIndependentOfProvokingVertex_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShaderBarycentricPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShaderBarycentricPropertiesKHR & + operator=( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShaderBarycentricPropertiesKHR & operator=( VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, triStripVertexOrderIndependentOfProvokingVertex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( triStripVertexOrderIndependentOfProvokingVertex == rhs.triStripVertexOrderIndependentOfProvokingVertex ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShaderBarycentricPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 triStripVertexOrderIndependentOfProvokingVertex = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShaderBarycentricPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.html + struct PhysicalDeviceFragmentShaderInterlockFeaturesEXT + { + using NativeType = VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShaderInterlockFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentShaderSampleInterlock{ fragmentShaderSampleInterlock_ } + , fragmentShaderPixelInterlock{ fragmentShaderPixelInterlock_ } + , fragmentShaderShadingRateInterlock{ fragmentShaderShadingRateInterlock_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShaderInterlockFeaturesEXT( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShaderInterlockFeaturesEXT( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShaderInterlockFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShaderInterlockFeaturesEXT & operator=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShaderInterlockFeaturesEXT & operator=( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & + setFragmentShaderSampleInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock_ ) VULKAN_HPP_NOEXCEPT + { + fragmentShaderSampleInterlock = fragmentShaderSampleInterlock_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & + setFragmentShaderPixelInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock_ ) VULKAN_HPP_NOEXCEPT + { + fragmentShaderPixelInterlock = fragmentShaderPixelInterlock_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & + setFragmentShaderShadingRateInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock_ ) VULKAN_HPP_NOEXCEPT + { + fragmentShaderShadingRateInterlock = fragmentShaderShadingRateInterlock_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentShaderSampleInterlock, fragmentShaderPixelInterlock, fragmentShaderShadingRateInterlock ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentShaderSampleInterlock == rhs.fragmentShaderSampleInterlock ) && + ( fragmentShaderPixelInterlock == rhs.fragmentShaderPixelInterlock ) && + ( fragmentShaderShadingRateInterlock == rhs.fragmentShaderShadingRateInterlock ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShaderInterlockFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.html + struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV + { + using NativeType = VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentShadingRateEnums{ fragmentShadingRateEnums_ } + , supersampleFragmentShadingRates{ supersampleFragmentShadingRates_ } + , noInvocationFragmentShadingRates{ noInvocationFragmentShadingRates_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShadingRateEnumsFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & operator=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & operator=( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & + setFragmentShadingRateEnums( VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums_ ) VULKAN_HPP_NOEXCEPT + { + fragmentShadingRateEnums = fragmentShadingRateEnums_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & + setSupersampleFragmentShadingRates( VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates_ ) VULKAN_HPP_NOEXCEPT + { + supersampleFragmentShadingRates = supersampleFragmentShadingRates_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & + setNoInvocationFragmentShadingRates( VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates_ ) VULKAN_HPP_NOEXCEPT + { + noInvocationFragmentShadingRates = noInvocationFragmentShadingRates_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentShadingRateEnums, supersampleFragmentShadingRates, noInvocationFragmentShadingRates ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentShadingRateEnums == rhs.fragmentShadingRateEnums ) && + ( supersampleFragmentShadingRates == rhs.supersampleFragmentShadingRates ) && + ( noInvocationFragmentShadingRates == rhs.noInvocationFragmentShadingRates ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums = {}; + VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates = {}; + VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShadingRateEnumsFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.html + struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV + { + using NativeType = VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( + VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxFragmentShadingRateInvocationCount{ maxFragmentShadingRateInvocationCount_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShadingRateEnumsPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & + operator=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & operator=( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxFragmentShadingRateInvocationCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxFragmentShadingRateInvocationCount == rhs.maxFragmentShadingRateInvocationCount ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShadingRateEnumsPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.html + struct PhysicalDeviceFragmentShadingRateFeaturesKHR + { + using NativeType = VkPhysicalDeviceFragmentShadingRateFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineFragmentShadingRate{ pipelineFragmentShadingRate_ } + , primitiveFragmentShadingRate{ primitiveFragmentShadingRate_ } + , attachmentFragmentShadingRate{ attachmentFragmentShadingRate_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateFeaturesKHR( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShadingRateFeaturesKHR( VkPhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShadingRateFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShadingRateFeaturesKHR & operator=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShadingRateFeaturesKHR & operator=( VkPhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & + setPipelineFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT + { + pipelineFragmentShadingRate = pipelineFragmentShadingRate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & + setPrimitiveFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT + { + primitiveFragmentShadingRate = primitiveFragmentShadingRate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & + setAttachmentFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT + { + attachmentFragmentShadingRate = attachmentFragmentShadingRate_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineFragmentShadingRate, primitiveFragmentShadingRate, attachmentFragmentShadingRate ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShadingRateFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineFragmentShadingRate == rhs.pipelineFragmentShadingRate ) && + ( primitiveFragmentShadingRate == rhs.primitiveFragmentShadingRate ) && ( attachmentFragmentShadingRate == rhs.attachmentFragmentShadingRate ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate = {}; + VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShadingRateFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShadingRateKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShadingRateKHR.html + struct PhysicalDeviceFragmentShadingRateKHR + { + using NativeType = VkPhysicalDeviceFragmentShadingRateKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRateKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateKHR( VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D fragmentSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sampleCounts{ sampleCounts_ } + , fragmentSize{ fragmentSize_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRateKHR( PhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShadingRateKHR( VkPhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShadingRateKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShadingRateKHR & operator=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShadingRateKHR & operator=( VkPhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentShadingRateKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRateKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sampleCounts, fragmentSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShadingRateKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShadingRateKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleCounts == rhs.sampleCounts ) && ( fragmentSize == rhs.fragmentSize ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRateKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts = {}; + VULKAN_HPP_NAMESPACE::Extent2D fragmentSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShadingRateKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.html + struct PhysicalDeviceFragmentShadingRatePropertiesKHR + { + using NativeType = VkPhysicalDeviceFragmentShadingRatePropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentShadingRatePropertiesKHR( + VULKAN_HPP_NAMESPACE::Extent2D minFragmentShadingRateAttachmentTexelSize_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxFragmentShadingRateAttachmentTexelSize_ = {}, + uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateWithMultipleViewports_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 layeredShadingRateAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateNonTrivialCombinerOps_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxFragmentSize_ = {}, + uint32_t maxFragmentSizeAspectRatio_ = {}, + uint32_t maxFragmentShadingRateCoverageSamples_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateRasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderDepthStencilWrites_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithSampleMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderSampleMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithConservativeRasterization_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithFragmentShaderInterlock_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithCustomSampleLocations_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateStrictMultiplyCombiner_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minFragmentShadingRateAttachmentTexelSize{ minFragmentShadingRateAttachmentTexelSize_ } + , maxFragmentShadingRateAttachmentTexelSize{ maxFragmentShadingRateAttachmentTexelSize_ } + , maxFragmentShadingRateAttachmentTexelSizeAspectRatio{ maxFragmentShadingRateAttachmentTexelSizeAspectRatio_ } + , primitiveFragmentShadingRateWithMultipleViewports{ primitiveFragmentShadingRateWithMultipleViewports_ } + , layeredShadingRateAttachments{ layeredShadingRateAttachments_ } + , fragmentShadingRateNonTrivialCombinerOps{ fragmentShadingRateNonTrivialCombinerOps_ } + , maxFragmentSize{ maxFragmentSize_ } + , maxFragmentSizeAspectRatio{ maxFragmentSizeAspectRatio_ } + , maxFragmentShadingRateCoverageSamples{ maxFragmentShadingRateCoverageSamples_ } + , maxFragmentShadingRateRasterizationSamples{ maxFragmentShadingRateRasterizationSamples_ } + , fragmentShadingRateWithShaderDepthStencilWrites{ fragmentShadingRateWithShaderDepthStencilWrites_ } + , fragmentShadingRateWithSampleMask{ fragmentShadingRateWithSampleMask_ } + , fragmentShadingRateWithShaderSampleMask{ fragmentShadingRateWithShaderSampleMask_ } + , fragmentShadingRateWithConservativeRasterization{ fragmentShadingRateWithConservativeRasterization_ } + , fragmentShadingRateWithFragmentShaderInterlock{ fragmentShadingRateWithFragmentShaderInterlock_ } + , fragmentShadingRateWithCustomSampleLocations{ fragmentShadingRateWithCustomSampleLocations_ } + , fragmentShadingRateStrictMultiplyCombiner{ fragmentShadingRateStrictMultiplyCombiner_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceFragmentShadingRatePropertiesKHR( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFragmentShadingRatePropertiesKHR( VkPhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFragmentShadingRatePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFragmentShadingRatePropertiesKHR & operator=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFragmentShadingRatePropertiesKHR & operator=( VkPhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + minFragmentShadingRateAttachmentTexelSize, + maxFragmentShadingRateAttachmentTexelSize, + maxFragmentShadingRateAttachmentTexelSizeAspectRatio, + primitiveFragmentShadingRateWithMultipleViewports, + layeredShadingRateAttachments, + fragmentShadingRateNonTrivialCombinerOps, + maxFragmentSize, + maxFragmentSizeAspectRatio, + maxFragmentShadingRateCoverageSamples, + maxFragmentShadingRateRasterizationSamples, + fragmentShadingRateWithShaderDepthStencilWrites, + fragmentShadingRateWithSampleMask, + fragmentShadingRateWithShaderSampleMask, + fragmentShadingRateWithConservativeRasterization, + fragmentShadingRateWithFragmentShaderInterlock, + fragmentShadingRateWithCustomSampleLocations, + fragmentShadingRateStrictMultiplyCombiner ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFragmentShadingRatePropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( minFragmentShadingRateAttachmentTexelSize == rhs.minFragmentShadingRateAttachmentTexelSize ) && + ( maxFragmentShadingRateAttachmentTexelSize == rhs.maxFragmentShadingRateAttachmentTexelSize ) && + ( maxFragmentShadingRateAttachmentTexelSizeAspectRatio == rhs.maxFragmentShadingRateAttachmentTexelSizeAspectRatio ) && + ( primitiveFragmentShadingRateWithMultipleViewports == rhs.primitiveFragmentShadingRateWithMultipleViewports ) && + ( layeredShadingRateAttachments == rhs.layeredShadingRateAttachments ) && + ( fragmentShadingRateNonTrivialCombinerOps == rhs.fragmentShadingRateNonTrivialCombinerOps ) && ( maxFragmentSize == rhs.maxFragmentSize ) && + ( maxFragmentSizeAspectRatio == rhs.maxFragmentSizeAspectRatio ) && + ( maxFragmentShadingRateCoverageSamples == rhs.maxFragmentShadingRateCoverageSamples ) && + ( maxFragmentShadingRateRasterizationSamples == rhs.maxFragmentShadingRateRasterizationSamples ) && + ( fragmentShadingRateWithShaderDepthStencilWrites == rhs.fragmentShadingRateWithShaderDepthStencilWrites ) && + ( fragmentShadingRateWithSampleMask == rhs.fragmentShadingRateWithSampleMask ) && + ( fragmentShadingRateWithShaderSampleMask == rhs.fragmentShadingRateWithShaderSampleMask ) && + ( fragmentShadingRateWithConservativeRasterization == rhs.fragmentShadingRateWithConservativeRasterization ) && + ( fragmentShadingRateWithFragmentShaderInterlock == rhs.fragmentShadingRateWithFragmentShaderInterlock ) && + ( fragmentShadingRateWithCustomSampleLocations == rhs.fragmentShadingRateWithCustomSampleLocations ) && + ( fragmentShadingRateStrictMultiplyCombiner == rhs.fragmentShadingRateStrictMultiplyCombiner ); +# endif + } + + bool operator!=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D minFragmentShadingRateAttachmentTexelSize = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxFragmentShadingRateAttachmentTexelSize = {}; + uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateWithMultipleViewports = {}; + VULKAN_HPP_NAMESPACE::Bool32 layeredShadingRateAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateNonTrivialCombinerOps = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxFragmentSize = {}; + uint32_t maxFragmentSizeAspectRatio = {}; + uint32_t maxFragmentShadingRateCoverageSamples = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateRasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderDepthStencilWrites = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithSampleMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithShaderSampleMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithConservativeRasterization = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithFragmentShaderInterlock = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithCustomSampleLocations = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateStrictMultiplyCombiner = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFragmentShadingRatePropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceFrameBoundaryFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceFrameBoundaryFeaturesEXT.html + struct PhysicalDeviceFrameBoundaryFeaturesEXT + { + using NativeType = VkPhysicalDeviceFrameBoundaryFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFrameBoundaryFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceFrameBoundaryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 frameBoundary_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , frameBoundary{ frameBoundary_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceFrameBoundaryFeaturesEXT( PhysicalDeviceFrameBoundaryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceFrameBoundaryFeaturesEXT( VkPhysicalDeviceFrameBoundaryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceFrameBoundaryFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceFrameBoundaryFeaturesEXT & operator=( PhysicalDeviceFrameBoundaryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceFrameBoundaryFeaturesEXT & operator=( VkPhysicalDeviceFrameBoundaryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFrameBoundaryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFrameBoundaryFeaturesEXT & setFrameBoundary( VULKAN_HPP_NAMESPACE::Bool32 frameBoundary_ ) VULKAN_HPP_NOEXCEPT + { + frameBoundary = frameBoundary_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceFrameBoundaryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFrameBoundaryFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFrameBoundaryFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceFrameBoundaryFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, frameBoundary ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceFrameBoundaryFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceFrameBoundaryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( frameBoundary == rhs.frameBoundary ); +# endif + } + + bool operator!=( PhysicalDeviceFrameBoundaryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFrameBoundaryFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 frameBoundary = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceFrameBoundaryFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceGlobalPriorityQueryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceGlobalPriorityQueryFeatures.html + struct PhysicalDeviceGlobalPriorityQueryFeatures + { + using NativeType = VkPhysicalDeviceGlobalPriorityQueryFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGlobalPriorityQueryFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeatures( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , globalPriorityQuery{ globalPriorityQuery_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeatures( PhysicalDeviceGlobalPriorityQueryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceGlobalPriorityQueryFeatures( VkPhysicalDeviceGlobalPriorityQueryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceGlobalPriorityQueryFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceGlobalPriorityQueryFeatures & operator=( PhysicalDeviceGlobalPriorityQueryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceGlobalPriorityQueryFeatures & operator=( VkPhysicalDeviceGlobalPriorityQueryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeatures & + setGlobalPriorityQuery( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ ) VULKAN_HPP_NOEXCEPT + { + globalPriorityQuery = globalPriorityQuery_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceGlobalPriorityQueryFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGlobalPriorityQueryFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGlobalPriorityQueryFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGlobalPriorityQueryFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, globalPriorityQuery ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceGlobalPriorityQueryFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceGlobalPriorityQueryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriorityQuery == rhs.globalPriorityQuery ); +# endif + } + + bool operator!=( PhysicalDeviceGlobalPriorityQueryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGlobalPriorityQueryFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceGlobalPriorityQueryFeatures; + }; + + using PhysicalDeviceGlobalPriorityQueryFeaturesEXT = PhysicalDeviceGlobalPriorityQueryFeatures; + using PhysicalDeviceGlobalPriorityQueryFeaturesKHR = PhysicalDeviceGlobalPriorityQueryFeatures; + + // wrapper struct for struct VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT.html + struct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT + { + using NativeType = VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibrary_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , graphicsPipelineLibrary{ graphicsPipelineLibrary_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & operator=( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & operator=( VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT & + setGraphicsPipelineLibrary( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibrary_ ) VULKAN_HPP_NOEXCEPT + { + graphicsPipelineLibrary = graphicsPipelineLibrary_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, graphicsPipelineLibrary ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( graphicsPipelineLibrary == rhs.graphicsPipelineLibrary ); +# endif + } + + bool operator!=( PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibrary = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.html + struct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT + { + using NativeType = VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryFastLinking_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryIndependentInterpolationDecoration_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , graphicsPipelineLibraryFastLinking{ graphicsPipelineLibraryFastLinking_ } + , graphicsPipelineLibraryIndependentInterpolationDecoration{ graphicsPipelineLibraryIndependentInterpolationDecoration_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & + operator=( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT & operator=( VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, graphicsPipelineLibraryFastLinking, graphicsPipelineLibraryIndependentInterpolationDecoration ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( graphicsPipelineLibraryFastLinking == rhs.graphicsPipelineLibraryFastLinking ) && + ( graphicsPipelineLibraryIndependentInterpolationDecoration == rhs.graphicsPipelineLibraryIndependentInterpolationDecoration ); +# endif + } + + bool operator!=( PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryFastLinking = {}; + VULKAN_HPP_NAMESPACE::Bool32 graphicsPipelineLibraryIndependentInterpolationDecoration = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceGroupProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceGroupProperties.html + struct PhysicalDeviceGroupProperties + { + using NativeType = VkPhysicalDeviceGroupProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGroupProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceGroupProperties( uint32_t physicalDeviceCount_ = {}, + std::array const & physicalDevices_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 subsetAllocation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , physicalDeviceCount{ physicalDeviceCount_ } + , physicalDevices{ physicalDevices_ } + , subsetAllocation{ subsetAllocation_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGroupProperties( PhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceGroupProperties( VkPhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceGroupProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceGroupProperties & operator=( PhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceGroupProperties & operator=( VkPhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceGroupProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGroupProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGroupProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceGroupProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, physicalDeviceCount, physicalDevices, subsetAllocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = physicalDeviceCount <=> rhs.physicalDeviceCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < physicalDeviceCount; ++i ) + { + if ( auto cmp = physicalDevices[i] <=> rhs.physicalDevices[i]; cmp != 0 ) + return cmp; + } + if ( auto cmp = subsetAllocation <=> rhs.subsetAllocation; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( physicalDeviceCount == rhs.physicalDeviceCount ) && + ( memcmp( physicalDevices, rhs.physicalDevices, physicalDeviceCount * sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice ) ) == 0 ) && + ( subsetAllocation == rhs.subsetAllocation ); + } + + bool operator!=( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGroupProperties; + void * pNext = {}; + uint32_t physicalDeviceCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D physicalDevices = {}; + VULKAN_HPP_NAMESPACE::Bool32 subsetAllocation = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceGroupProperties; + }; + + using PhysicalDeviceGroupPropertiesKHR = PhysicalDeviceGroupProperties; + + // wrapper struct for struct VkPhysicalDeviceHdrVividFeaturesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceHdrVividFeaturesHUAWEI.html + struct PhysicalDeviceHdrVividFeaturesHUAWEI + { + using NativeType = VkPhysicalDeviceHdrVividFeaturesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceHdrVividFeaturesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceHdrVividFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 hdrVivid_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hdrVivid{ hdrVivid_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceHdrVividFeaturesHUAWEI( PhysicalDeviceHdrVividFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceHdrVividFeaturesHUAWEI( VkPhysicalDeviceHdrVividFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceHdrVividFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceHdrVividFeaturesHUAWEI & operator=( PhysicalDeviceHdrVividFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceHdrVividFeaturesHUAWEI & operator=( VkPhysicalDeviceHdrVividFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHdrVividFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHdrVividFeaturesHUAWEI & setHdrVivid( VULKAN_HPP_NAMESPACE::Bool32 hdrVivid_ ) VULKAN_HPP_NOEXCEPT + { + hdrVivid = hdrVivid_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceHdrVividFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHdrVividFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHdrVividFeaturesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHdrVividFeaturesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hdrVivid ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceHdrVividFeaturesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceHdrVividFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hdrVivid == rhs.hdrVivid ); +# endif + } + + bool operator!=( PhysicalDeviceHdrVividFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceHdrVividFeaturesHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hdrVivid = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceHdrVividFeaturesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceHostImageCopyFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceHostImageCopyFeatures.html + struct PhysicalDeviceHostImageCopyFeatures + { + using NativeType = VkPhysicalDeviceHostImageCopyFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceHostImageCopyFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceHostImageCopyFeatures( VULKAN_HPP_NAMESPACE::Bool32 hostImageCopy_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hostImageCopy{ hostImageCopy_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceHostImageCopyFeatures( PhysicalDeviceHostImageCopyFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceHostImageCopyFeatures( VkPhysicalDeviceHostImageCopyFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceHostImageCopyFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceHostImageCopyFeatures & operator=( PhysicalDeviceHostImageCopyFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceHostImageCopyFeatures & operator=( VkPhysicalDeviceHostImageCopyFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyFeatures & setHostImageCopy( VULKAN_HPP_NAMESPACE::Bool32 hostImageCopy_ ) VULKAN_HPP_NOEXCEPT + { + hostImageCopy = hostImageCopy_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceHostImageCopyFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostImageCopyFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostImageCopyFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostImageCopyFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hostImageCopy ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceHostImageCopyFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceHostImageCopyFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hostImageCopy == rhs.hostImageCopy ); +# endif + } + + bool operator!=( PhysicalDeviceHostImageCopyFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceHostImageCopyFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hostImageCopy = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceHostImageCopyFeatures; + }; + + using PhysicalDeviceHostImageCopyFeaturesEXT = PhysicalDeviceHostImageCopyFeatures; + + // wrapper struct for struct VkPhysicalDeviceHostImageCopyProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceHostImageCopyProperties.html + struct PhysicalDeviceHostImageCopyProperties + { + using NativeType = VkPhysicalDeviceHostImageCopyProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceHostImageCopyProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties( uint32_t copySrcLayoutCount_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout * pCopySrcLayouts_ = {}, + uint32_t copyDstLayoutCount_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout * pCopyDstLayouts_ = {}, + std::array const & optimalTilingLayoutUUID_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryTypeRequirements_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , copySrcLayoutCount{ copySrcLayoutCount_ } + , pCopySrcLayouts{ pCopySrcLayouts_ } + , copyDstLayoutCount{ copyDstLayoutCount_ } + , pCopyDstLayouts{ pCopyDstLayouts_ } + , optimalTilingLayoutUUID{ optimalTilingLayoutUUID_ } + , identicalMemoryTypeRequirements{ identicalMemoryTypeRequirements_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties( PhysicalDeviceHostImageCopyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceHostImageCopyProperties( VkPhysicalDeviceHostImageCopyProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceHostImageCopyProperties( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceHostImageCopyProperties( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & copySrcLayouts_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & copyDstLayouts_ = {}, + std::array const & optimalTilingLayoutUUID_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryTypeRequirements_ = {}, + void * pNext_ = nullptr ) + : pNext( pNext_ ) + , copySrcLayoutCount( static_cast( copySrcLayouts_.size() ) ) + , pCopySrcLayouts( copySrcLayouts_.data() ) + , copyDstLayoutCount( static_cast( copyDstLayouts_.size() ) ) + , pCopyDstLayouts( copyDstLayouts_.data() ) + , optimalTilingLayoutUUID( optimalTilingLayoutUUID_ ) + , identicalMemoryTypeRequirements( identicalMemoryTypeRequirements_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PhysicalDeviceHostImageCopyProperties & operator=( PhysicalDeviceHostImageCopyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceHostImageCopyProperties & operator=( VkPhysicalDeviceHostImageCopyProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & setCopySrcLayoutCount( uint32_t copySrcLayoutCount_ ) VULKAN_HPP_NOEXCEPT + { + copySrcLayoutCount = copySrcLayoutCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & + setPCopySrcLayouts( VULKAN_HPP_NAMESPACE::ImageLayout * pCopySrcLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pCopySrcLayouts = pCopySrcLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceHostImageCopyProperties & + setCopySrcLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & copySrcLayouts_ ) VULKAN_HPP_NOEXCEPT + { + copySrcLayoutCount = static_cast( copySrcLayouts_.size() ); + pCopySrcLayouts = copySrcLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & setCopyDstLayoutCount( uint32_t copyDstLayoutCount_ ) VULKAN_HPP_NOEXCEPT + { + copyDstLayoutCount = copyDstLayoutCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & + setPCopyDstLayouts( VULKAN_HPP_NAMESPACE::ImageLayout * pCopyDstLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pCopyDstLayouts = pCopyDstLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceHostImageCopyProperties & + setCopyDstLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & copyDstLayouts_ ) VULKAN_HPP_NOEXCEPT + { + copyDstLayoutCount = static_cast( copyDstLayouts_.size() ); + pCopyDstLayouts = copyDstLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & + setOptimalTilingLayoutUUID( std::array optimalTilingLayoutUUID_ ) VULKAN_HPP_NOEXCEPT + { + optimalTilingLayoutUUID = optimalTilingLayoutUUID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostImageCopyProperties & + setIdenticalMemoryTypeRequirements( VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryTypeRequirements_ ) VULKAN_HPP_NOEXCEPT + { + identicalMemoryTypeRequirements = identicalMemoryTypeRequirements_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceHostImageCopyProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostImageCopyProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostImageCopyProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostImageCopyProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, copySrcLayoutCount, pCopySrcLayouts, copyDstLayoutCount, pCopyDstLayouts, optimalTilingLayoutUUID, identicalMemoryTypeRequirements ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceHostImageCopyProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceHostImageCopyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( copySrcLayoutCount == rhs.copySrcLayoutCount ) && + ( pCopySrcLayouts == rhs.pCopySrcLayouts ) && ( copyDstLayoutCount == rhs.copyDstLayoutCount ) && ( pCopyDstLayouts == rhs.pCopyDstLayouts ) && + ( optimalTilingLayoutUUID == rhs.optimalTilingLayoutUUID ) && ( identicalMemoryTypeRequirements == rhs.identicalMemoryTypeRequirements ); +# endif + } + + bool operator!=( PhysicalDeviceHostImageCopyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceHostImageCopyProperties; + void * pNext = {}; + uint32_t copySrcLayoutCount = {}; + VULKAN_HPP_NAMESPACE::ImageLayout * pCopySrcLayouts = {}; + uint32_t copyDstLayoutCount = {}; + VULKAN_HPP_NAMESPACE::ImageLayout * pCopyDstLayouts = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D optimalTilingLayoutUUID = {}; + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryTypeRequirements = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceHostImageCopyProperties; + }; + + using PhysicalDeviceHostImageCopyPropertiesEXT = PhysicalDeviceHostImageCopyProperties; + + // wrapper struct for struct VkPhysicalDeviceHostQueryResetFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceHostQueryResetFeatures.html + struct PhysicalDeviceHostQueryResetFeatures + { + using NativeType = VkPhysicalDeviceHostQueryResetFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceHostQueryResetFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceHostQueryResetFeatures( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hostQueryReset{ hostQueryReset_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceHostQueryResetFeatures( PhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceHostQueryResetFeatures( VkPhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceHostQueryResetFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceHostQueryResetFeatures & operator=( PhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceHostQueryResetFeatures & operator=( VkPhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures & setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT + { + hostQueryReset = hostQueryReset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceHostQueryResetFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostQueryResetFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostQueryResetFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceHostQueryResetFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hostQueryReset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceHostQueryResetFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceHostQueryResetFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hostQueryReset == rhs.hostQueryReset ); +# endif + } + + bool operator!=( PhysicalDeviceHostQueryResetFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceHostQueryResetFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceHostQueryResetFeatures; + }; + + using PhysicalDeviceHostQueryResetFeaturesEXT = PhysicalDeviceHostQueryResetFeatures; + + // wrapper struct for struct VkPhysicalDeviceIDProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceIDProperties.html + struct PhysicalDeviceIDProperties + { + using NativeType = VkPhysicalDeviceIDProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceIdProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIDProperties( std::array const & deviceUUID_ = {}, + std::array const & driverUUID_ = {}, + std::array const & deviceLUID_ = {}, + uint32_t deviceNodeMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceUUID{ deviceUUID_ } + , driverUUID{ driverUUID_ } + , deviceLUID{ deviceLUID_ } + , deviceNodeMask{ deviceNodeMask_ } + , deviceLUIDValid{ deviceLUIDValid_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIDProperties( PhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceIDProperties( VkPhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceIDProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceIDProperties & operator=( PhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceIDProperties & operator=( VkPhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceIDProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceIDProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceIDProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceIDProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, deviceUUID, driverUUID, deviceLUID, deviceNodeMask, deviceLUIDValid ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceIDProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceIDProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceUUID == rhs.deviceUUID ) && ( driverUUID == rhs.driverUUID ) && + ( deviceLUID == rhs.deviceLUID ) && ( deviceNodeMask == rhs.deviceNodeMask ) && ( deviceLUIDValid == rhs.deviceLUIDValid ); +# endif + } + + bool operator!=( PhysicalDeviceIDProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceIdProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceUUID = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverUUID = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceLUID = {}; + uint32_t deviceNodeMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceIDProperties; + }; + + using PhysicalDeviceIDPropertiesKHR = PhysicalDeviceIDProperties; + + // wrapper struct for struct VkPhysicalDeviceImage2DViewOf3DFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImage2DViewOf3DFeaturesEXT.html + struct PhysicalDeviceImage2DViewOf3DFeaturesEXT + { + using NativeType = VkPhysicalDeviceImage2DViewOf3DFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImage2DViewOf3DFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImage2DViewOf3DFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3D_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sampler2DViewOf3D_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image2DViewOf3D{ image2DViewOf3D_ } + , sampler2DViewOf3D{ sampler2DViewOf3D_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImage2DViewOf3DFeaturesEXT( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImage2DViewOf3DFeaturesEXT( VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImage2DViewOf3DFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImage2DViewOf3DFeaturesEXT & operator=( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImage2DViewOf3DFeaturesEXT & operator=( VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImage2DViewOf3DFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImage2DViewOf3DFeaturesEXT & setImage2DViewOf3D( VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3D_ ) VULKAN_HPP_NOEXCEPT + { + image2DViewOf3D = image2DViewOf3D_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImage2DViewOf3DFeaturesEXT & + setSampler2DViewOf3D( VULKAN_HPP_NAMESPACE::Bool32 sampler2DViewOf3D_ ) VULKAN_HPP_NOEXCEPT + { + sampler2DViewOf3D = sampler2DViewOf3D_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImage2DViewOf3DFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImage2DViewOf3DFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image2DViewOf3D, sampler2DViewOf3D ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image2DViewOf3D == rhs.image2DViewOf3D ) && ( sampler2DViewOf3D == rhs.sampler2DViewOf3D ); +# endif + } + + bool operator!=( PhysicalDeviceImage2DViewOf3DFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImage2DViewOf3DFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3D = {}; + VULKAN_HPP_NAMESPACE::Bool32 sampler2DViewOf3D = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImage2DViewOf3DFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImageAlignmentControlFeaturesMESA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageAlignmentControlFeaturesMESA.html + struct PhysicalDeviceImageAlignmentControlFeaturesMESA + { + using NativeType = VkPhysicalDeviceImageAlignmentControlFeaturesMESA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageAlignmentControlFeaturesMESA; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageAlignmentControlFeaturesMESA( VULKAN_HPP_NAMESPACE::Bool32 imageAlignmentControl_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageAlignmentControl{ imageAlignmentControl_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceImageAlignmentControlFeaturesMESA( PhysicalDeviceImageAlignmentControlFeaturesMESA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageAlignmentControlFeaturesMESA( VkPhysicalDeviceImageAlignmentControlFeaturesMESA const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageAlignmentControlFeaturesMESA( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageAlignmentControlFeaturesMESA & operator=( PhysicalDeviceImageAlignmentControlFeaturesMESA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageAlignmentControlFeaturesMESA & operator=( VkPhysicalDeviceImageAlignmentControlFeaturesMESA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageAlignmentControlFeaturesMESA & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageAlignmentControlFeaturesMESA & + setImageAlignmentControl( VULKAN_HPP_NAMESPACE::Bool32 imageAlignmentControl_ ) VULKAN_HPP_NOEXCEPT + { + imageAlignmentControl = imageAlignmentControl_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageAlignmentControlFeaturesMESA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageAlignmentControlFeaturesMESA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageAlignmentControlFeaturesMESA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageAlignmentControlFeaturesMESA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageAlignmentControl ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageAlignmentControlFeaturesMESA const & ) const = default; +#else + bool operator==( PhysicalDeviceImageAlignmentControlFeaturesMESA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageAlignmentControl == rhs.imageAlignmentControl ); +# endif + } + + bool operator!=( PhysicalDeviceImageAlignmentControlFeaturesMESA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageAlignmentControlFeaturesMESA; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageAlignmentControl = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageAlignmentControlFeaturesMESA; + }; + + // wrapper struct for struct VkPhysicalDeviceImageAlignmentControlPropertiesMESA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageAlignmentControlPropertiesMESA.html + struct PhysicalDeviceImageAlignmentControlPropertiesMESA + { + using NativeType = VkPhysicalDeviceImageAlignmentControlPropertiesMESA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageAlignmentControlPropertiesMESA; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageAlignmentControlPropertiesMESA( uint32_t supportedImageAlignmentMask_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportedImageAlignmentMask{ supportedImageAlignmentMask_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceImageAlignmentControlPropertiesMESA( PhysicalDeviceImageAlignmentControlPropertiesMESA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageAlignmentControlPropertiesMESA( VkPhysicalDeviceImageAlignmentControlPropertiesMESA const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageAlignmentControlPropertiesMESA( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageAlignmentControlPropertiesMESA & + operator=( PhysicalDeviceImageAlignmentControlPropertiesMESA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageAlignmentControlPropertiesMESA & operator=( VkPhysicalDeviceImageAlignmentControlPropertiesMESA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceImageAlignmentControlPropertiesMESA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageAlignmentControlPropertiesMESA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageAlignmentControlPropertiesMESA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageAlignmentControlPropertiesMESA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supportedImageAlignmentMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageAlignmentControlPropertiesMESA const & ) const = default; +#else + bool operator==( PhysicalDeviceImageAlignmentControlPropertiesMESA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportedImageAlignmentMask == rhs.supportedImageAlignmentMask ); +# endif + } + + bool operator!=( PhysicalDeviceImageAlignmentControlPropertiesMESA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageAlignmentControlPropertiesMESA; + void * pNext = {}; + uint32_t supportedImageAlignmentMask = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageAlignmentControlPropertiesMESA; + }; + + // wrapper struct for struct VkPhysicalDeviceImageCompressionControlFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageCompressionControlFeaturesEXT.html + struct PhysicalDeviceImageCompressionControlFeaturesEXT + { + using NativeType = VkPhysicalDeviceImageCompressionControlFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageCompressionControlFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageCompressionControlFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControl_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageCompressionControl{ imageCompressionControl_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceImageCompressionControlFeaturesEXT( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageCompressionControlFeaturesEXT( VkPhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageCompressionControlFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageCompressionControlFeaturesEXT & operator=( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageCompressionControlFeaturesEXT & operator=( VkPhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlFeaturesEXT & + setImageCompressionControl( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControl_ ) VULKAN_HPP_NOEXCEPT + { + imageCompressionControl = imageCompressionControl_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageCompressionControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageCompressionControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageCompressionControlFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageCompressionControlFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageCompressionControl ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageCompressionControlFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCompressionControl == rhs.imageCompressionControl ); +# endif + } + + bool operator!=( PhysicalDeviceImageCompressionControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageCompressionControlFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControl = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageCompressionControlFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT.html + struct PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT + { + using NativeType = VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControlSwapchain_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageCompressionControlSwapchain{ imageCompressionControlSwapchain_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & + operator=( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & + operator=( VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT & + setImageCompressionControlSwapchain( VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControlSwapchain_ ) VULKAN_HPP_NOEXCEPT + { + imageCompressionControlSwapchain = imageCompressionControlSwapchain_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageCompressionControlSwapchain ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCompressionControlSwapchain == rhs.imageCompressionControlSwapchain ); +# endif + } + + bool operator!=( PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageCompressionControlSwapchain = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.html + struct PhysicalDeviceImageDrmFormatModifierInfoEXT + { + using NativeType = VkPhysicalDeviceImageDrmFormatModifierInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceImageDrmFormatModifierInfoEXT( uint64_t drmFormatModifier_ = {}, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, + uint32_t queueFamilyIndexCount_ = {}, + const uint32_t * pQueueFamilyIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , drmFormatModifier{ drmFormatModifier_ } + , sharingMode{ sharingMode_ } + , queueFamilyIndexCount{ queueFamilyIndexCount_ } + , pQueueFamilyIndices{ pQueueFamilyIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageDrmFormatModifierInfoEXT( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageDrmFormatModifierInfoEXT( VkPhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageDrmFormatModifierInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceImageDrmFormatModifierInfoEXT( uint64_t drmFormatModifier_, + VULKAN_HPP_NAMESPACE::SharingMode sharingMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , drmFormatModifier( drmFormatModifier_ ) + , sharingMode( sharingMode_ ) + , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) + , pQueueFamilyIndices( queueFamilyIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PhysicalDeviceImageDrmFormatModifierInfoEXT & operator=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageDrmFormatModifierInfoEXT & operator=( VkPhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT + { + drmFormatModifier = drmFormatModifier_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT + { + sharingMode = sharingMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = queueFamilyIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + pQueueFamilyIndices = pQueueFamilyIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceImageDrmFormatModifierInfoEXT & + setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); + pQueueFamilyIndices = queueFamilyIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, drmFormatModifier, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageDrmFormatModifierInfoEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ) && ( sharingMode == rhs.sharingMode ) && + ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ); +# endif + } + + bool operator!=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT; + const void * pNext = {}; + uint64_t drmFormatModifier = {}; + VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; + uint32_t queueFamilyIndexCount = {}; + const uint32_t * pQueueFamilyIndices = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageDrmFormatModifierInfoEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImageFormatInfo2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageFormatInfo2.html + struct PhysicalDeviceImageFormatInfo2 + { + using NativeType = VkPhysicalDeviceImageFormatInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageFormatInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageFormatInfo2( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::ImageType type_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, + VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , type{ type_ } + , tiling{ tiling_ } + , usage{ usage_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageFormatInfo2( PhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageFormatInfo2( VkPhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageFormatInfo2( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageFormatInfo2 & operator=( PhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageFormatInfo2 & operator=( VkPhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT + { + tiling = tiling_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageFormatInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageFormatInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, format, type, tiling, usage, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageFormatInfo2 const & ) const = default; +#else + bool operator==( PhysicalDeviceImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( type == rhs.type ) && ( tiling == rhs.tiling ) && + ( usage == rhs.usage ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( PhysicalDeviceImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageFormatInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::ImageType type = VULKAN_HPP_NAMESPACE::ImageType::e1D; + VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; + VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageFormatInfo2; + }; + + using PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2; + + // wrapper struct for struct VkPhysicalDeviceImageProcessing2FeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageProcessing2FeaturesQCOM.html + struct PhysicalDeviceImageProcessing2FeaturesQCOM + { + using NativeType = VkPhysicalDeviceImageProcessing2FeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageProcessing2FeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessing2FeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch2_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , textureBlockMatch2{ textureBlockMatch2_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessing2FeaturesQCOM( PhysicalDeviceImageProcessing2FeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageProcessing2FeaturesQCOM( VkPhysicalDeviceImageProcessing2FeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageProcessing2FeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageProcessing2FeaturesQCOM & operator=( PhysicalDeviceImageProcessing2FeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageProcessing2FeaturesQCOM & operator=( VkPhysicalDeviceImageProcessing2FeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessing2FeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessing2FeaturesQCOM & + setTextureBlockMatch2( VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch2_ ) VULKAN_HPP_NOEXCEPT + { + textureBlockMatch2 = textureBlockMatch2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageProcessing2FeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessing2FeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessing2FeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessing2FeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, textureBlockMatch2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageProcessing2FeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceImageProcessing2FeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( textureBlockMatch2 == rhs.textureBlockMatch2 ); +# endif + } + + bool operator!=( PhysicalDeviceImageProcessing2FeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageProcessing2FeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageProcessing2FeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceImageProcessing2PropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageProcessing2PropertiesQCOM.html + struct PhysicalDeviceImageProcessing2PropertiesQCOM + { + using NativeType = VkPhysicalDeviceImageProcessing2PropertiesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageProcessing2PropertiesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessing2PropertiesQCOM( VULKAN_HPP_NAMESPACE::Extent2D maxBlockMatchWindow_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxBlockMatchWindow{ maxBlockMatchWindow_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessing2PropertiesQCOM( PhysicalDeviceImageProcessing2PropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageProcessing2PropertiesQCOM( VkPhysicalDeviceImageProcessing2PropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageProcessing2PropertiesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageProcessing2PropertiesQCOM & operator=( PhysicalDeviceImageProcessing2PropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageProcessing2PropertiesQCOM & operator=( VkPhysicalDeviceImageProcessing2PropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceImageProcessing2PropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessing2PropertiesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessing2PropertiesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessing2PropertiesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxBlockMatchWindow ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageProcessing2PropertiesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceImageProcessing2PropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxBlockMatchWindow == rhs.maxBlockMatchWindow ); +# endif + } + + bool operator!=( PhysicalDeviceImageProcessing2PropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageProcessing2PropertiesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxBlockMatchWindow = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageProcessing2PropertiesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceImageProcessingFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageProcessingFeaturesQCOM.html + struct PhysicalDeviceImageProcessingFeaturesQCOM + { + using NativeType = VkPhysicalDeviceImageProcessingFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageProcessingFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 textureSampleWeighted_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 textureBoxFilter_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , textureSampleWeighted{ textureSampleWeighted_ } + , textureBoxFilter{ textureBoxFilter_ } + , textureBlockMatch{ textureBlockMatch_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingFeaturesQCOM( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageProcessingFeaturesQCOM( VkPhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageProcessingFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageProcessingFeaturesQCOM & operator=( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageProcessingFeaturesQCOM & operator=( VkPhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & + setTextureSampleWeighted( VULKAN_HPP_NAMESPACE::Bool32 textureSampleWeighted_ ) VULKAN_HPP_NOEXCEPT + { + textureSampleWeighted = textureSampleWeighted_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & + setTextureBoxFilter( VULKAN_HPP_NAMESPACE::Bool32 textureBoxFilter_ ) VULKAN_HPP_NOEXCEPT + { + textureBoxFilter = textureBoxFilter_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageProcessingFeaturesQCOM & + setTextureBlockMatch( VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch_ ) VULKAN_HPP_NOEXCEPT + { + textureBlockMatch = textureBlockMatch_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageProcessingFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessingFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessingFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessingFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, textureSampleWeighted, textureBoxFilter, textureBlockMatch ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageProcessingFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( textureSampleWeighted == rhs.textureSampleWeighted ) && + ( textureBoxFilter == rhs.textureBoxFilter ) && ( textureBlockMatch == rhs.textureBlockMatch ); +# endif + } + + bool operator!=( PhysicalDeviceImageProcessingFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageProcessingFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureSampleWeighted = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureBoxFilter = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureBlockMatch = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageProcessingFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceImageProcessingPropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageProcessingPropertiesQCOM.html + struct PhysicalDeviceImageProcessingPropertiesQCOM + { + using NativeType = VkPhysicalDeviceImageProcessingPropertiesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageProcessingPropertiesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingPropertiesQCOM( uint32_t maxWeightFilterPhases_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxWeightFilterDimension_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxBlockMatchRegion_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxBoxFilterBlockSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxWeightFilterPhases{ maxWeightFilterPhases_ } + , maxWeightFilterDimension{ maxWeightFilterDimension_ } + , maxBlockMatchRegion{ maxBlockMatchRegion_ } + , maxBoxFilterBlockSize{ maxBoxFilterBlockSize_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageProcessingPropertiesQCOM( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageProcessingPropertiesQCOM( VkPhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageProcessingPropertiesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageProcessingPropertiesQCOM & operator=( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageProcessingPropertiesQCOM & operator=( VkPhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceImageProcessingPropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessingPropertiesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessingPropertiesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageProcessingPropertiesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxWeightFilterPhases, maxWeightFilterDimension, maxBlockMatchRegion, maxBoxFilterBlockSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageProcessingPropertiesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxWeightFilterPhases == rhs.maxWeightFilterPhases ) && + ( maxWeightFilterDimension == rhs.maxWeightFilterDimension ) && ( maxBlockMatchRegion == rhs.maxBlockMatchRegion ) && + ( maxBoxFilterBlockSize == rhs.maxBoxFilterBlockSize ); +# endif + } + + bool operator!=( PhysicalDeviceImageProcessingPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageProcessingPropertiesQCOM; + void * pNext = {}; + uint32_t maxWeightFilterPhases = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxWeightFilterDimension = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxBlockMatchRegion = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxBoxFilterBlockSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageProcessingPropertiesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceImageRobustnessFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageRobustnessFeatures.html + struct PhysicalDeviceImageRobustnessFeatures + { + using NativeType = VkPhysicalDeviceImageRobustnessFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageRobustnessFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeatures( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , robustImageAccess{ robustImageAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeatures( PhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageRobustnessFeatures( VkPhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageRobustnessFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageRobustnessFeatures & operator=( PhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageRobustnessFeatures & operator=( VkPhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeatures & setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT + { + robustImageAccess = robustImageAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageRobustnessFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageRobustnessFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageRobustnessFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageRobustnessFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, robustImageAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageRobustnessFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceImageRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustImageAccess == rhs.robustImageAccess ); +# endif + } + + bool operator!=( PhysicalDeviceImageRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageRobustnessFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageRobustnessFeatures; + }; + + using PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeatures; + + // wrapper struct for struct VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT.html + struct PhysicalDeviceImageSlicedViewOf3DFeaturesEXT + { + using NativeType = VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageSlicedViewOf3DFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 imageSlicedViewOf3D_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageSlicedViewOf3D{ imageSlicedViewOf3D_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageSlicedViewOf3DFeaturesEXT( PhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageSlicedViewOf3DFeaturesEXT( VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageSlicedViewOf3DFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageSlicedViewOf3DFeaturesEXT & operator=( PhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageSlicedViewOf3DFeaturesEXT & operator=( VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageSlicedViewOf3DFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageSlicedViewOf3DFeaturesEXT & + setImageSlicedViewOf3D( VULKAN_HPP_NAMESPACE::Bool32 imageSlicedViewOf3D_ ) VULKAN_HPP_NOEXCEPT + { + imageSlicedViewOf3D = imageSlicedViewOf3D_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageSlicedViewOf3D ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageSlicedViewOf3D == rhs.imageSlicedViewOf3D ); +# endif + } + + bool operator!=( PhysicalDeviceImageSlicedViewOf3DFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageSlicedViewOf3D = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageSlicedViewOf3DFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImageViewImageFormatInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageViewImageFormatInfoEXT.html + struct PhysicalDeviceImageViewImageFormatInfoEXT + { + using NativeType = VkPhysicalDeviceImageViewImageFormatInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceImageViewImageFormatInfoEXT( VULKAN_HPP_NAMESPACE::ImageViewType imageViewType_ = VULKAN_HPP_NAMESPACE::ImageViewType::e1D, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageViewType{ imageViewType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewImageFormatInfoEXT( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageViewImageFormatInfoEXT( VkPhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageViewImageFormatInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageViewImageFormatInfoEXT & operator=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageViewImageFormatInfoEXT & operator=( VkPhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT & + setImageViewType( VULKAN_HPP_NAMESPACE::ImageViewType imageViewType_ ) VULKAN_HPP_NOEXCEPT + { + imageViewType = imageViewType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageViewImageFormatInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageViewImageFormatInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageViewImageFormatInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageViewImageFormatInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageViewType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageViewImageFormatInfoEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageViewType == rhs.imageViewType ); +# endif + } + + bool operator!=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageViewType imageViewType = VULKAN_HPP_NAMESPACE::ImageViewType::e1D; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageViewImageFormatInfoEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImageViewMinLodFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImageViewMinLodFeaturesEXT.html + struct PhysicalDeviceImageViewMinLodFeaturesEXT + { + using NativeType = VkPhysicalDeviceImageViewMinLodFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewMinLodFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 minLod_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minLod{ minLod_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewMinLodFeaturesEXT( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImageViewMinLodFeaturesEXT( VkPhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImageViewMinLodFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImageViewMinLodFeaturesEXT & operator=( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImageViewMinLodFeaturesEXT & operator=( VkPhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewMinLodFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewMinLodFeaturesEXT & setMinLod( VULKAN_HPP_NAMESPACE::Bool32 minLod_ ) VULKAN_HPP_NOEXCEPT + { + minLod = minLod_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImageViewMinLodFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageViewMinLodFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageViewMinLodFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImageViewMinLodFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minLod ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImageViewMinLodFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minLod == rhs.minLod ); +# endif + } + + bool operator!=( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 minLod = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImageViewMinLodFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceImagelessFramebufferFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceImagelessFramebufferFeatures.html + struct PhysicalDeviceImagelessFramebufferFeatures + { + using NativeType = VkPhysicalDeviceImagelessFramebufferFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImagelessFramebufferFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceImagelessFramebufferFeatures( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imagelessFramebuffer{ imagelessFramebuffer_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceImagelessFramebufferFeatures( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceImagelessFramebufferFeatures( VkPhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceImagelessFramebufferFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceImagelessFramebufferFeatures & operator=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceImagelessFramebufferFeatures & operator=( VkPhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures & + setImagelessFramebuffer( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ ) VULKAN_HPP_NOEXCEPT + { + imagelessFramebuffer = imagelessFramebuffer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceImagelessFramebufferFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImagelessFramebufferFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImagelessFramebufferFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceImagelessFramebufferFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imagelessFramebuffer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceImagelessFramebufferFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imagelessFramebuffer == rhs.imagelessFramebuffer ); +# endif + } + + bool operator!=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImagelessFramebufferFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceImagelessFramebufferFeatures; + }; + + using PhysicalDeviceImagelessFramebufferFeaturesKHR = PhysicalDeviceImagelessFramebufferFeatures; + + // wrapper struct for struct VkPhysicalDeviceIndexTypeUint8Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceIndexTypeUint8Features.html + struct PhysicalDeviceIndexTypeUint8Features + { + using NativeType = VkPhysicalDeviceIndexTypeUint8Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceIndexTypeUint8Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceIndexTypeUint8Features( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , indexTypeUint8{ indexTypeUint8_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceIndexTypeUint8Features( PhysicalDeviceIndexTypeUint8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceIndexTypeUint8Features( VkPhysicalDeviceIndexTypeUint8Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceIndexTypeUint8Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceIndexTypeUint8Features & operator=( PhysicalDeviceIndexTypeUint8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceIndexTypeUint8Features & operator=( VkPhysicalDeviceIndexTypeUint8Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8Features & setIndexTypeUint8( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ ) VULKAN_HPP_NOEXCEPT + { + indexTypeUint8 = indexTypeUint8_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceIndexTypeUint8Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceIndexTypeUint8Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceIndexTypeUint8Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceIndexTypeUint8Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, indexTypeUint8 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceIndexTypeUint8Features const & ) const = default; +#else + bool operator==( PhysicalDeviceIndexTypeUint8Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( indexTypeUint8 == rhs.indexTypeUint8 ); +# endif + } + + bool operator!=( PhysicalDeviceIndexTypeUint8Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceIndexTypeUint8Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceIndexTypeUint8Features; + }; + + using PhysicalDeviceIndexTypeUint8FeaturesEXT = PhysicalDeviceIndexTypeUint8Features; + using PhysicalDeviceIndexTypeUint8FeaturesKHR = PhysicalDeviceIndexTypeUint8Features; + + // wrapper struct for struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.html + struct PhysicalDeviceInheritedViewportScissorFeaturesNV + { + using NativeType = VkPhysicalDeviceInheritedViewportScissorFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceInheritedViewportScissorFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , inheritedViewportScissor2D{ inheritedViewportScissor2D_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceInheritedViewportScissorFeaturesNV( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceInheritedViewportScissorFeaturesNV( VkPhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceInheritedViewportScissorFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceInheritedViewportScissorFeaturesNV & operator=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceInheritedViewportScissorFeaturesNV & operator=( VkPhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV & + setInheritedViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D_ ) VULKAN_HPP_NOEXCEPT + { + inheritedViewportScissor2D = inheritedViewportScissor2D_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, inheritedViewportScissor2D ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceInheritedViewportScissorFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( inheritedViewportScissor2D == rhs.inheritedViewportScissor2D ); +# endif + } + + bool operator!=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceInheritedViewportScissorFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceInlineUniformBlockFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceInlineUniformBlockFeatures.html + struct PhysicalDeviceInlineUniformBlockFeatures + { + using NativeType = VkPhysicalDeviceInlineUniformBlockFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInlineUniformBlockFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeatures( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , inlineUniformBlock{ inlineUniformBlock_ } + , descriptorBindingInlineUniformBlockUpdateAfterBind{ descriptorBindingInlineUniformBlockUpdateAfterBind_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeatures( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceInlineUniformBlockFeatures( VkPhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceInlineUniformBlockFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceInlineUniformBlockFeatures & operator=( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceInlineUniformBlockFeatures & operator=( VkPhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & + setInlineUniformBlock( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ ) VULKAN_HPP_NOEXCEPT + { + inlineUniformBlock = inlineUniformBlock_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & setDescriptorBindingInlineUniformBlockUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceInlineUniformBlockFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInlineUniformBlockFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInlineUniformBlockFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInlineUniformBlockFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, inlineUniformBlock, descriptorBindingInlineUniformBlockUpdateAfterBind ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceInlineUniformBlockFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( inlineUniformBlock == rhs.inlineUniformBlock ) && + ( descriptorBindingInlineUniformBlockUpdateAfterBind == rhs.descriptorBindingInlineUniformBlockUpdateAfterBind ); +# endif + } + + bool operator!=( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceInlineUniformBlockFeatures; + }; + + using PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeatures; + + // wrapper struct for struct VkPhysicalDeviceInlineUniformBlockProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceInlineUniformBlockProperties.html + struct PhysicalDeviceInlineUniformBlockProperties + { + using NativeType = VkPhysicalDeviceInlineUniformBlockProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInlineUniformBlockProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockProperties( uint32_t maxInlineUniformBlockSize_ = {}, + uint32_t maxPerStageDescriptorInlineUniformBlocks_ = {}, + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ = {}, + uint32_t maxDescriptorSetInlineUniformBlocks_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxInlineUniformBlockSize{ maxInlineUniformBlockSize_ } + , maxPerStageDescriptorInlineUniformBlocks{ maxPerStageDescriptorInlineUniformBlocks_ } + , maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks{ maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ } + , maxDescriptorSetInlineUniformBlocks{ maxDescriptorSetInlineUniformBlocks_ } + , maxDescriptorSetUpdateAfterBindInlineUniformBlocks{ maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockProperties( PhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceInlineUniformBlockProperties( VkPhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceInlineUniformBlockProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceInlineUniformBlockProperties & operator=( PhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceInlineUniformBlockProperties & operator=( VkPhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceInlineUniformBlockProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInlineUniformBlockProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInlineUniformBlockProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInlineUniformBlockProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxInlineUniformBlockSize, + maxPerStageDescriptorInlineUniformBlocks, + maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, + maxDescriptorSetInlineUniformBlocks, + maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceInlineUniformBlockProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceInlineUniformBlockProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize ) && + ( maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks ) && + ( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks == rhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ) && + ( maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks ) && + ( maxDescriptorSetUpdateAfterBindInlineUniformBlocks == rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ); +# endif + } + + bool operator!=( PhysicalDeviceInlineUniformBlockProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockProperties; + void * pNext = {}; + uint32_t maxInlineUniformBlockSize = {}; + uint32_t maxPerStageDescriptorInlineUniformBlocks = {}; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = {}; + uint32_t maxDescriptorSetInlineUniformBlocks = {}; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceInlineUniformBlockProperties; + }; + + using PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockProperties; + + // wrapper struct for struct VkPhysicalDeviceInvocationMaskFeaturesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.html + struct PhysicalDeviceInvocationMaskFeaturesHUAWEI + { + using NativeType = VkPhysicalDeviceInvocationMaskFeaturesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceInvocationMaskFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 invocationMask_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , invocationMask{ invocationMask_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceInvocationMaskFeaturesHUAWEI( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceInvocationMaskFeaturesHUAWEI( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceInvocationMaskFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceInvocationMaskFeaturesHUAWEI & operator=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceInvocationMaskFeaturesHUAWEI & operator=( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI & setInvocationMask( VULKAN_HPP_NAMESPACE::Bool32 invocationMask_ ) VULKAN_HPP_NOEXCEPT + { + invocationMask = invocationMask_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, invocationMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( invocationMask == rhs.invocationMask ); +# endif + } + + bool operator!=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 invocationMask = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceInvocationMaskFeaturesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceLayeredApiPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLayeredApiPropertiesKHR.html + struct PhysicalDeviceLayeredApiPropertiesKHR + { + using NativeType = VkPhysicalDeviceLayeredApiPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLayeredApiPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesKHR( + uint32_t vendorID_ = {}, + uint32_t deviceID_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiKHR layeredAPI_ = VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiKHR::eVulkan, + std::array const & deviceName_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vendorID{ vendorID_ } + , deviceID{ deviceID_ } + , layeredAPI{ layeredAPI_ } + , deviceName{ deviceName_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesKHR( PhysicalDeviceLayeredApiPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLayeredApiPropertiesKHR( VkPhysicalDeviceLayeredApiPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLayeredApiPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLayeredApiPropertiesKHR & operator=( PhysicalDeviceLayeredApiPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLayeredApiPropertiesKHR & operator=( VkPhysicalDeviceLayeredApiPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceLayeredApiPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vendorID, deviceID, layeredAPI, deviceName ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLayeredApiPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceLayeredApiPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && + ( layeredAPI == rhs.layeredAPI ) && ( deviceName == rhs.deviceName ); +# endif + } + + bool operator!=( PhysicalDeviceLayeredApiPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLayeredApiPropertiesKHR; + void * pNext = {}; + uint32_t vendorID = {}; + uint32_t deviceID = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiKHR layeredAPI = VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiKHR::eVulkan; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceName = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLayeredApiPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceLayeredApiPropertiesListKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLayeredApiPropertiesListKHR.html + struct PhysicalDeviceLayeredApiPropertiesListKHR + { + using NativeType = VkPhysicalDeviceLayeredApiPropertiesListKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLayeredApiPropertiesListKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesListKHR( uint32_t layeredApiCount_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesKHR * pLayeredApis_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , layeredApiCount{ layeredApiCount_ } + , pLayeredApis{ pLayeredApis_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesListKHR( PhysicalDeviceLayeredApiPropertiesListKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLayeredApiPropertiesListKHR( VkPhysicalDeviceLayeredApiPropertiesListKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLayeredApiPropertiesListKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceLayeredApiPropertiesListKHR( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & layeredApis_, void * pNext_ = nullptr ) + : pNext( pNext_ ), layeredApiCount( static_cast( layeredApis_.size() ) ), pLayeredApis( layeredApis_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PhysicalDeviceLayeredApiPropertiesListKHR & operator=( PhysicalDeviceLayeredApiPropertiesListKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLayeredApiPropertiesListKHR & operator=( VkPhysicalDeviceLayeredApiPropertiesListKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesListKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesListKHR & setLayeredApiCount( uint32_t layeredApiCount_ ) VULKAN_HPP_NOEXCEPT + { + layeredApiCount = layeredApiCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiPropertiesListKHR & + setPLayeredApis( VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesKHR * pLayeredApis_ ) VULKAN_HPP_NOEXCEPT + { + pLayeredApis = pLayeredApis_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PhysicalDeviceLayeredApiPropertiesListKHR & setLayeredApis( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & layeredApis_ ) VULKAN_HPP_NOEXCEPT + { + layeredApiCount = static_cast( layeredApis_.size() ); + pLayeredApis = layeredApis_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceLayeredApiPropertiesListKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiPropertiesListKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiPropertiesListKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiPropertiesListKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, layeredApiCount, pLayeredApis ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLayeredApiPropertiesListKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceLayeredApiPropertiesListKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( layeredApiCount == rhs.layeredApiCount ) && ( pLayeredApis == rhs.pLayeredApis ); +# endif + } + + bool operator!=( PhysicalDeviceLayeredApiPropertiesListKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLayeredApiPropertiesListKHR; + void * pNext = {}; + uint32_t layeredApiCount = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceLayeredApiPropertiesKHR * pLayeredApis = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLayeredApiPropertiesListKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceLimits, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLimits.html + struct PhysicalDeviceLimits + { + using NativeType = VkPhysicalDeviceLimits; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLimits( 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_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize bufferImageGranularity_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize 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_ = {}, + std::array const & maxComputeWorkGroupCount_ = {}, + uint32_t maxComputeWorkGroupInvocations_ = {}, + std::array const & maxComputeWorkGroupSize_ = {}, + uint32_t subPixelPrecisionBits_ = {}, + uint32_t subTexelPrecisionBits_ = {}, + uint32_t mipmapPrecisionBits_ = {}, + uint32_t maxDrawIndexedIndexValue_ = {}, + uint32_t maxDrawIndirectCount_ = {}, + float maxSamplerLodBias_ = {}, + float maxSamplerAnisotropy_ = {}, + uint32_t maxViewports_ = {}, + std::array const & maxViewportDimensions_ = {}, + std::array const & viewportBoundsRange_ = {}, + uint32_t viewportSubPixelBits_ = {}, + size_t minMemoryMapAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize minTexelBufferOffsetAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize minUniformBufferOffsetAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize 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_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferColorSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferDepthSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferStencilSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferNoAttachmentsSampleCounts_ = {}, + uint32_t maxColorAttachments_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageColorSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageIntegerSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageDepthSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageStencilSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags storageImageSampleCounts_ = {}, + uint32_t maxSampleMaskWords_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 timestampComputeAndGraphics_ = {}, + float timestampPeriod_ = {}, + uint32_t maxClipDistances_ = {}, + uint32_t maxCullDistances_ = {}, + uint32_t maxCombinedClipAndCullDistances_ = {}, + uint32_t discreteQueuePriorities_ = {}, + std::array const & pointSizeRange_ = {}, + std::array const & lineWidthRange_ = {}, + float pointSizeGranularity_ = {}, + float lineWidthGranularity_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 strictLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 standardSampleLocations_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyOffsetAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyRowPitchAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize nonCoherentAtomSize_ = {} ) VULKAN_HPP_NOEXCEPT + : maxImageDimension1D{ maxImageDimension1D_ } + , maxImageDimension2D{ maxImageDimension2D_ } + , maxImageDimension3D{ maxImageDimension3D_ } + , maxImageDimensionCube{ maxImageDimensionCube_ } + , maxImageArrayLayers{ maxImageArrayLayers_ } + , maxTexelBufferElements{ maxTexelBufferElements_ } + , maxUniformBufferRange{ maxUniformBufferRange_ } + , maxStorageBufferRange{ maxStorageBufferRange_ } + , maxPushConstantsSize{ maxPushConstantsSize_ } + , maxMemoryAllocationCount{ maxMemoryAllocationCount_ } + , maxSamplerAllocationCount{ maxSamplerAllocationCount_ } + , bufferImageGranularity{ bufferImageGranularity_ } + , sparseAddressSpaceSize{ sparseAddressSpaceSize_ } + , maxBoundDescriptorSets{ maxBoundDescriptorSets_ } + , maxPerStageDescriptorSamplers{ maxPerStageDescriptorSamplers_ } + , maxPerStageDescriptorUniformBuffers{ maxPerStageDescriptorUniformBuffers_ } + , maxPerStageDescriptorStorageBuffers{ maxPerStageDescriptorStorageBuffers_ } + , maxPerStageDescriptorSampledImages{ maxPerStageDescriptorSampledImages_ } + , maxPerStageDescriptorStorageImages{ maxPerStageDescriptorStorageImages_ } + , maxPerStageDescriptorInputAttachments{ maxPerStageDescriptorInputAttachments_ } + , maxPerStageResources{ maxPerStageResources_ } + , maxDescriptorSetSamplers{ maxDescriptorSetSamplers_ } + , maxDescriptorSetUniformBuffers{ maxDescriptorSetUniformBuffers_ } + , maxDescriptorSetUniformBuffersDynamic{ maxDescriptorSetUniformBuffersDynamic_ } + , maxDescriptorSetStorageBuffers{ maxDescriptorSetStorageBuffers_ } + , maxDescriptorSetStorageBuffersDynamic{ maxDescriptorSetStorageBuffersDynamic_ } + , maxDescriptorSetSampledImages{ maxDescriptorSetSampledImages_ } + , maxDescriptorSetStorageImages{ maxDescriptorSetStorageImages_ } + , maxDescriptorSetInputAttachments{ maxDescriptorSetInputAttachments_ } + , maxVertexInputAttributes{ maxVertexInputAttributes_ } + , maxVertexInputBindings{ maxVertexInputBindings_ } + , maxVertexInputAttributeOffset{ maxVertexInputAttributeOffset_ } + , maxVertexInputBindingStride{ maxVertexInputBindingStride_ } + , maxVertexOutputComponents{ maxVertexOutputComponents_ } + , maxTessellationGenerationLevel{ maxTessellationGenerationLevel_ } + , maxTessellationPatchSize{ maxTessellationPatchSize_ } + , maxTessellationControlPerVertexInputComponents{ maxTessellationControlPerVertexInputComponents_ } + , maxTessellationControlPerVertexOutputComponents{ maxTessellationControlPerVertexOutputComponents_ } + , maxTessellationControlPerPatchOutputComponents{ maxTessellationControlPerPatchOutputComponents_ } + , maxTessellationControlTotalOutputComponents{ maxTessellationControlTotalOutputComponents_ } + , maxTessellationEvaluationInputComponents{ maxTessellationEvaluationInputComponents_ } + , maxTessellationEvaluationOutputComponents{ maxTessellationEvaluationOutputComponents_ } + , maxGeometryShaderInvocations{ maxGeometryShaderInvocations_ } + , maxGeometryInputComponents{ maxGeometryInputComponents_ } + , maxGeometryOutputComponents{ maxGeometryOutputComponents_ } + , maxGeometryOutputVertices{ maxGeometryOutputVertices_ } + , maxGeometryTotalOutputComponents{ maxGeometryTotalOutputComponents_ } + , maxFragmentInputComponents{ maxFragmentInputComponents_ } + , maxFragmentOutputAttachments{ maxFragmentOutputAttachments_ } + , maxFragmentDualSrcAttachments{ maxFragmentDualSrcAttachments_ } + , maxFragmentCombinedOutputResources{ maxFragmentCombinedOutputResources_ } + , maxComputeSharedMemorySize{ maxComputeSharedMemorySize_ } + , maxComputeWorkGroupCount{ maxComputeWorkGroupCount_ } + , maxComputeWorkGroupInvocations{ maxComputeWorkGroupInvocations_ } + , maxComputeWorkGroupSize{ maxComputeWorkGroupSize_ } + , subPixelPrecisionBits{ subPixelPrecisionBits_ } + , subTexelPrecisionBits{ subTexelPrecisionBits_ } + , mipmapPrecisionBits{ mipmapPrecisionBits_ } + , maxDrawIndexedIndexValue{ maxDrawIndexedIndexValue_ } + , maxDrawIndirectCount{ maxDrawIndirectCount_ } + , maxSamplerLodBias{ maxSamplerLodBias_ } + , maxSamplerAnisotropy{ maxSamplerAnisotropy_ } + , maxViewports{ maxViewports_ } + , maxViewportDimensions{ maxViewportDimensions_ } + , viewportBoundsRange{ viewportBoundsRange_ } + , viewportSubPixelBits{ viewportSubPixelBits_ } + , minMemoryMapAlignment{ minMemoryMapAlignment_ } + , minTexelBufferOffsetAlignment{ minTexelBufferOffsetAlignment_ } + , minUniformBufferOffsetAlignment{ minUniformBufferOffsetAlignment_ } + , minStorageBufferOffsetAlignment{ minStorageBufferOffsetAlignment_ } + , minTexelOffset{ minTexelOffset_ } + , maxTexelOffset{ maxTexelOffset_ } + , minTexelGatherOffset{ minTexelGatherOffset_ } + , maxTexelGatherOffset{ maxTexelGatherOffset_ } + , minInterpolationOffset{ minInterpolationOffset_ } + , maxInterpolationOffset{ maxInterpolationOffset_ } + , subPixelInterpolationOffsetBits{ subPixelInterpolationOffsetBits_ } + , maxFramebufferWidth{ maxFramebufferWidth_ } + , maxFramebufferHeight{ maxFramebufferHeight_ } + , maxFramebufferLayers{ maxFramebufferLayers_ } + , framebufferColorSampleCounts{ framebufferColorSampleCounts_ } + , framebufferDepthSampleCounts{ framebufferDepthSampleCounts_ } + , framebufferStencilSampleCounts{ framebufferStencilSampleCounts_ } + , framebufferNoAttachmentsSampleCounts{ framebufferNoAttachmentsSampleCounts_ } + , maxColorAttachments{ maxColorAttachments_ } + , sampledImageColorSampleCounts{ sampledImageColorSampleCounts_ } + , sampledImageIntegerSampleCounts{ sampledImageIntegerSampleCounts_ } + , sampledImageDepthSampleCounts{ sampledImageDepthSampleCounts_ } + , sampledImageStencilSampleCounts{ sampledImageStencilSampleCounts_ } + , storageImageSampleCounts{ storageImageSampleCounts_ } + , maxSampleMaskWords{ maxSampleMaskWords_ } + , timestampComputeAndGraphics{ timestampComputeAndGraphics_ } + , timestampPeriod{ timestampPeriod_ } + , maxClipDistances{ maxClipDistances_ } + , maxCullDistances{ maxCullDistances_ } + , maxCombinedClipAndCullDistances{ maxCombinedClipAndCullDistances_ } + , discreteQueuePriorities{ discreteQueuePriorities_ } + , pointSizeRange{ pointSizeRange_ } + , lineWidthRange{ lineWidthRange_ } + , pointSizeGranularity{ pointSizeGranularity_ } + , lineWidthGranularity{ lineWidthGranularity_ } + , strictLines{ strictLines_ } + , standardSampleLocations{ standardSampleLocations_ } + , optimalBufferCopyOffsetAlignment{ optimalBufferCopyOffsetAlignment_ } + , optimalBufferCopyRowPitchAlignment{ optimalBufferCopyRowPitchAlignment_ } + , nonCoherentAtomSize{ nonCoherentAtomSize_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLimits( PhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLimits( VkPhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLimits( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLimits & operator=( PhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLimits & operator=( VkPhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceLimits const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLimits &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLimits const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLimits *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + float const &, + float const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + size_t const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &, + int32_t const &, + uint32_t const &, + int32_t const &, + uint32_t const &, + float const &, + float const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + float const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + float const &, + float const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( maxImageDimension1D, + maxImageDimension2D, + maxImageDimension3D, + maxImageDimensionCube, + maxImageArrayLayers, + maxTexelBufferElements, + maxUniformBufferRange, + maxStorageBufferRange, + maxPushConstantsSize, + maxMemoryAllocationCount, + maxSamplerAllocationCount, + bufferImageGranularity, + sparseAddressSpaceSize, + maxBoundDescriptorSets, + maxPerStageDescriptorSamplers, + maxPerStageDescriptorUniformBuffers, + maxPerStageDescriptorStorageBuffers, + maxPerStageDescriptorSampledImages, + maxPerStageDescriptorStorageImages, + maxPerStageDescriptorInputAttachments, + maxPerStageResources, + maxDescriptorSetSamplers, + maxDescriptorSetUniformBuffers, + maxDescriptorSetUniformBuffersDynamic, + maxDescriptorSetStorageBuffers, + maxDescriptorSetStorageBuffersDynamic, + maxDescriptorSetSampledImages, + maxDescriptorSetStorageImages, + maxDescriptorSetInputAttachments, + maxVertexInputAttributes, + maxVertexInputBindings, + maxVertexInputAttributeOffset, + maxVertexInputBindingStride, + maxVertexOutputComponents, + maxTessellationGenerationLevel, + maxTessellationPatchSize, + maxTessellationControlPerVertexInputComponents, + maxTessellationControlPerVertexOutputComponents, + maxTessellationControlPerPatchOutputComponents, + maxTessellationControlTotalOutputComponents, + maxTessellationEvaluationInputComponents, + maxTessellationEvaluationOutputComponents, + maxGeometryShaderInvocations, + maxGeometryInputComponents, + maxGeometryOutputComponents, + maxGeometryOutputVertices, + maxGeometryTotalOutputComponents, + maxFragmentInputComponents, + maxFragmentOutputAttachments, + maxFragmentDualSrcAttachments, + maxFragmentCombinedOutputResources, + maxComputeSharedMemorySize, + maxComputeWorkGroupCount, + maxComputeWorkGroupInvocations, + maxComputeWorkGroupSize, + subPixelPrecisionBits, + subTexelPrecisionBits, + mipmapPrecisionBits, + maxDrawIndexedIndexValue, + maxDrawIndirectCount, + maxSamplerLodBias, + maxSamplerAnisotropy, + maxViewports, + maxViewportDimensions, + viewportBoundsRange, + viewportSubPixelBits, + minMemoryMapAlignment, + minTexelBufferOffsetAlignment, + minUniformBufferOffsetAlignment, + minStorageBufferOffsetAlignment, + minTexelOffset, + maxTexelOffset, + minTexelGatherOffset, + maxTexelGatherOffset, + minInterpolationOffset, + maxInterpolationOffset, + subPixelInterpolationOffsetBits, + maxFramebufferWidth, + maxFramebufferHeight, + maxFramebufferLayers, + framebufferColorSampleCounts, + framebufferDepthSampleCounts, + framebufferStencilSampleCounts, + framebufferNoAttachmentsSampleCounts, + maxColorAttachments, + sampledImageColorSampleCounts, + sampledImageIntegerSampleCounts, + sampledImageDepthSampleCounts, + sampledImageStencilSampleCounts, + storageImageSampleCounts, + maxSampleMaskWords, + timestampComputeAndGraphics, + timestampPeriod, + maxClipDistances, + maxCullDistances, + maxCombinedClipAndCullDistances, + discreteQueuePriorities, + pointSizeRange, + lineWidthRange, + pointSizeGranularity, + lineWidthGranularity, + strictLines, + standardSampleLocations, + optimalBufferCopyOffsetAlignment, + optimalBufferCopyRowPitchAlignment, + nonCoherentAtomSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLimits const & ) const = default; +#else + bool operator==( PhysicalDeviceLimits const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( maxImageDimension1D == rhs.maxImageDimension1D ) && ( maxImageDimension2D == rhs.maxImageDimension2D ) && + ( maxImageDimension3D == rhs.maxImageDimension3D ) && ( maxImageDimensionCube == rhs.maxImageDimensionCube ) && + ( maxImageArrayLayers == rhs.maxImageArrayLayers ) && ( maxTexelBufferElements == rhs.maxTexelBufferElements ) && + ( maxUniformBufferRange == rhs.maxUniformBufferRange ) && ( maxStorageBufferRange == rhs.maxStorageBufferRange ) && + ( maxPushConstantsSize == rhs.maxPushConstantsSize ) && ( maxMemoryAllocationCount == rhs.maxMemoryAllocationCount ) && + ( maxSamplerAllocationCount == rhs.maxSamplerAllocationCount ) && ( bufferImageGranularity == rhs.bufferImageGranularity ) && + ( sparseAddressSpaceSize == rhs.sparseAddressSpaceSize ) && ( maxBoundDescriptorSets == rhs.maxBoundDescriptorSets ) && + ( maxPerStageDescriptorSamplers == rhs.maxPerStageDescriptorSamplers ) && + ( maxPerStageDescriptorUniformBuffers == rhs.maxPerStageDescriptorUniformBuffers ) && + ( maxPerStageDescriptorStorageBuffers == rhs.maxPerStageDescriptorStorageBuffers ) && + ( maxPerStageDescriptorSampledImages == rhs.maxPerStageDescriptorSampledImages ) && + ( maxPerStageDescriptorStorageImages == rhs.maxPerStageDescriptorStorageImages ) && + ( maxPerStageDescriptorInputAttachments == rhs.maxPerStageDescriptorInputAttachments ) && ( maxPerStageResources == rhs.maxPerStageResources ) && + ( maxDescriptorSetSamplers == rhs.maxDescriptorSetSamplers ) && ( maxDescriptorSetUniformBuffers == rhs.maxDescriptorSetUniformBuffers ) && + ( maxDescriptorSetUniformBuffersDynamic == rhs.maxDescriptorSetUniformBuffersDynamic ) && + ( maxDescriptorSetStorageBuffers == rhs.maxDescriptorSetStorageBuffers ) && + ( maxDescriptorSetStorageBuffersDynamic == rhs.maxDescriptorSetStorageBuffersDynamic ) && + ( maxDescriptorSetSampledImages == rhs.maxDescriptorSetSampledImages ) && ( maxDescriptorSetStorageImages == rhs.maxDescriptorSetStorageImages ) && + ( maxDescriptorSetInputAttachments == rhs.maxDescriptorSetInputAttachments ) && ( maxVertexInputAttributes == rhs.maxVertexInputAttributes ) && + ( maxVertexInputBindings == rhs.maxVertexInputBindings ) && ( maxVertexInputAttributeOffset == rhs.maxVertexInputAttributeOffset ) && + ( maxVertexInputBindingStride == rhs.maxVertexInputBindingStride ) && ( maxVertexOutputComponents == rhs.maxVertexOutputComponents ) && + ( maxTessellationGenerationLevel == rhs.maxTessellationGenerationLevel ) && ( maxTessellationPatchSize == rhs.maxTessellationPatchSize ) && + ( maxTessellationControlPerVertexInputComponents == rhs.maxTessellationControlPerVertexInputComponents ) && + ( maxTessellationControlPerVertexOutputComponents == rhs.maxTessellationControlPerVertexOutputComponents ) && + ( maxTessellationControlPerPatchOutputComponents == rhs.maxTessellationControlPerPatchOutputComponents ) && + ( maxTessellationControlTotalOutputComponents == rhs.maxTessellationControlTotalOutputComponents ) && + ( maxTessellationEvaluationInputComponents == rhs.maxTessellationEvaluationInputComponents ) && + ( maxTessellationEvaluationOutputComponents == rhs.maxTessellationEvaluationOutputComponents ) && + ( maxGeometryShaderInvocations == rhs.maxGeometryShaderInvocations ) && ( maxGeometryInputComponents == rhs.maxGeometryInputComponents ) && + ( maxGeometryOutputComponents == rhs.maxGeometryOutputComponents ) && ( maxGeometryOutputVertices == rhs.maxGeometryOutputVertices ) && + ( maxGeometryTotalOutputComponents == rhs.maxGeometryTotalOutputComponents ) && ( maxFragmentInputComponents == rhs.maxFragmentInputComponents ) && + ( maxFragmentOutputAttachments == rhs.maxFragmentOutputAttachments ) && ( maxFragmentDualSrcAttachments == rhs.maxFragmentDualSrcAttachments ) && + ( maxFragmentCombinedOutputResources == rhs.maxFragmentCombinedOutputResources ) && + ( maxComputeSharedMemorySize == rhs.maxComputeSharedMemorySize ) && ( maxComputeWorkGroupCount == rhs.maxComputeWorkGroupCount ) && + ( maxComputeWorkGroupInvocations == rhs.maxComputeWorkGroupInvocations ) && ( maxComputeWorkGroupSize == rhs.maxComputeWorkGroupSize ) && + ( subPixelPrecisionBits == rhs.subPixelPrecisionBits ) && ( subTexelPrecisionBits == rhs.subTexelPrecisionBits ) && + ( mipmapPrecisionBits == rhs.mipmapPrecisionBits ) && ( maxDrawIndexedIndexValue == rhs.maxDrawIndexedIndexValue ) && + ( maxDrawIndirectCount == rhs.maxDrawIndirectCount ) && ( maxSamplerLodBias == rhs.maxSamplerLodBias ) && + ( maxSamplerAnisotropy == rhs.maxSamplerAnisotropy ) && ( maxViewports == rhs.maxViewports ) && + ( maxViewportDimensions == rhs.maxViewportDimensions ) && ( viewportBoundsRange == rhs.viewportBoundsRange ) && + ( viewportSubPixelBits == rhs.viewportSubPixelBits ) && ( minMemoryMapAlignment == rhs.minMemoryMapAlignment ) && + ( minTexelBufferOffsetAlignment == rhs.minTexelBufferOffsetAlignment ) && + ( minUniformBufferOffsetAlignment == rhs.minUniformBufferOffsetAlignment ) && + ( minStorageBufferOffsetAlignment == rhs.minStorageBufferOffsetAlignment ) && ( minTexelOffset == rhs.minTexelOffset ) && + ( maxTexelOffset == rhs.maxTexelOffset ) && ( minTexelGatherOffset == rhs.minTexelGatherOffset ) && + ( maxTexelGatherOffset == rhs.maxTexelGatherOffset ) && ( minInterpolationOffset == rhs.minInterpolationOffset ) && + ( maxInterpolationOffset == rhs.maxInterpolationOffset ) && ( subPixelInterpolationOffsetBits == rhs.subPixelInterpolationOffsetBits ) && + ( maxFramebufferWidth == rhs.maxFramebufferWidth ) && ( maxFramebufferHeight == rhs.maxFramebufferHeight ) && + ( maxFramebufferLayers == rhs.maxFramebufferLayers ) && ( framebufferColorSampleCounts == rhs.framebufferColorSampleCounts ) && + ( framebufferDepthSampleCounts == rhs.framebufferDepthSampleCounts ) && ( framebufferStencilSampleCounts == rhs.framebufferStencilSampleCounts ) && + ( framebufferNoAttachmentsSampleCounts == rhs.framebufferNoAttachmentsSampleCounts ) && ( maxColorAttachments == rhs.maxColorAttachments ) && + ( sampledImageColorSampleCounts == rhs.sampledImageColorSampleCounts ) && + ( sampledImageIntegerSampleCounts == rhs.sampledImageIntegerSampleCounts ) && + ( sampledImageDepthSampleCounts == rhs.sampledImageDepthSampleCounts ) && + ( sampledImageStencilSampleCounts == rhs.sampledImageStencilSampleCounts ) && ( storageImageSampleCounts == rhs.storageImageSampleCounts ) && + ( maxSampleMaskWords == rhs.maxSampleMaskWords ) && ( timestampComputeAndGraphics == rhs.timestampComputeAndGraphics ) && + ( timestampPeriod == rhs.timestampPeriod ) && ( maxClipDistances == rhs.maxClipDistances ) && ( maxCullDistances == rhs.maxCullDistances ) && + ( maxCombinedClipAndCullDistances == rhs.maxCombinedClipAndCullDistances ) && ( discreteQueuePriorities == rhs.discreteQueuePriorities ) && + ( pointSizeRange == rhs.pointSizeRange ) && ( lineWidthRange == rhs.lineWidthRange ) && ( pointSizeGranularity == rhs.pointSizeGranularity ) && + ( lineWidthGranularity == rhs.lineWidthGranularity ) && ( strictLines == rhs.strictLines ) && + ( standardSampleLocations == rhs.standardSampleLocations ) && ( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment ) && + ( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment ) && ( nonCoherentAtomSize == rhs.nonCoherentAtomSize ); +# endif + } + + bool operator!=( PhysicalDeviceLimits const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + 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 = {}; + VULKAN_HPP_NAMESPACE::DeviceSize bufferImageGranularity = {}; + VULKAN_HPP_NAMESPACE::DeviceSize 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 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxComputeWorkGroupCount = {}; + uint32_t maxComputeWorkGroupInvocations = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxComputeWorkGroupSize = {}; + uint32_t subPixelPrecisionBits = {}; + uint32_t subTexelPrecisionBits = {}; + uint32_t mipmapPrecisionBits = {}; + uint32_t maxDrawIndexedIndexValue = {}; + uint32_t maxDrawIndirectCount = {}; + float maxSamplerLodBias = {}; + float maxSamplerAnisotropy = {}; + uint32_t maxViewports = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxViewportDimensions = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D viewportBoundsRange = {}; + uint32_t viewportSubPixelBits = {}; + size_t minMemoryMapAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minTexelBufferOffsetAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minUniformBufferOffsetAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize 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 = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferColorSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferDepthSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferStencilSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferNoAttachmentsSampleCounts = {}; + uint32_t maxColorAttachments = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageColorSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageIntegerSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageDepthSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampledImageStencilSampleCounts = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags storageImageSampleCounts = {}; + uint32_t maxSampleMaskWords = {}; + VULKAN_HPP_NAMESPACE::Bool32 timestampComputeAndGraphics = {}; + float timestampPeriod = {}; + uint32_t maxClipDistances = {}; + uint32_t maxCullDistances = {}; + uint32_t maxCombinedClipAndCullDistances = {}; + uint32_t discreteQueuePriorities = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D pointSizeRange = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D lineWidthRange = {}; + float pointSizeGranularity = {}; + float lineWidthGranularity = {}; + VULKAN_HPP_NAMESPACE::Bool32 strictLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 standardSampleLocations = {}; + VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyOffsetAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyRowPitchAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize nonCoherentAtomSize = {}; + }; + + // wrapper struct for struct VkPhysicalDeviceSparseProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSparseProperties.html + struct PhysicalDeviceSparseProperties + { + using NativeType = VkPhysicalDeviceSparseProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseProperties( VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DBlockShape_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DMultisampleBlockShape_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 residencyStandard3DBlockShape_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 residencyAlignedMipSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 residencyNonResidentStrict_ = {} ) VULKAN_HPP_NOEXCEPT + : residencyStandard2DBlockShape{ residencyStandard2DBlockShape_ } + , residencyStandard2DMultisampleBlockShape{ residencyStandard2DMultisampleBlockShape_ } + , residencyStandard3DBlockShape{ residencyStandard3DBlockShape_ } + , residencyAlignedMipSize{ residencyAlignedMipSize_ } + , residencyNonResidentStrict{ residencyNonResidentStrict_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseProperties( PhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSparseProperties( VkPhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSparseProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSparseProperties & operator=( PhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSparseProperties & operator=( VkPhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSparseProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSparseProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSparseProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSparseProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( residencyStandard2DBlockShape, + residencyStandard2DMultisampleBlockShape, + residencyStandard3DBlockShape, + residencyAlignedMipSize, + residencyNonResidentStrict ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSparseProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceSparseProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape ) && + ( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape ) && + ( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape ) && ( residencyAlignedMipSize == rhs.residencyAlignedMipSize ) && + ( residencyNonResidentStrict == rhs.residencyNonResidentStrict ); +# endif + } + + bool operator!=( PhysicalDeviceSparseProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DBlockShape = {}; + VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DMultisampleBlockShape = {}; + VULKAN_HPP_NAMESPACE::Bool32 residencyStandard3DBlockShape = {}; + VULKAN_HPP_NAMESPACE::Bool32 residencyAlignedMipSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 residencyNonResidentStrict = {}; + }; + + // wrapper struct for struct VkPhysicalDeviceProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceProperties.html + struct PhysicalDeviceProperties + { + using NativeType = VkPhysicalDeviceProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties( uint32_t apiVersion_ = {}, + uint32_t driverVersion_ = {}, + uint32_t vendorID_ = {}, + uint32_t deviceID_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceType deviceType_ = VULKAN_HPP_NAMESPACE::PhysicalDeviceType::eOther, + std::array const & deviceName_ = {}, + std::array const & pipelineCacheUUID_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits limits_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties sparseProperties_ = {} ) VULKAN_HPP_NOEXCEPT + : apiVersion{ apiVersion_ } + , driverVersion{ driverVersion_ } + , vendorID{ vendorID_ } + , deviceID{ deviceID_ } + , deviceType{ deviceType_ } + , deviceName{ deviceName_ } + , pipelineCacheUUID{ pipelineCacheUUID_ } + , limits{ limits_ } + , sparseProperties{ sparseProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties( PhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceProperties( VkPhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceProperties & operator=( PhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceProperties & operator=( VkPhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits const &, + VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( apiVersion, driverVersion, vendorID, deviceID, deviceType, deviceName, pipelineCacheUUID, limits, sparseProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::partial_ordering operator<=>( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = apiVersion <=> rhs.apiVersion; cmp != 0 ) + return cmp; + if ( auto cmp = driverVersion <=> rhs.driverVersion; cmp != 0 ) + return cmp; + if ( auto cmp = vendorID <=> rhs.vendorID; cmp != 0 ) + return cmp; + if ( auto cmp = deviceID <=> rhs.deviceID; cmp != 0 ) + return cmp; + if ( auto cmp = deviceType <=> rhs.deviceType; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( deviceName, rhs.deviceName ); cmp != 0 ) + return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater; + if ( auto cmp = pipelineCacheUUID <=> rhs.pipelineCacheUUID; cmp != 0 ) + return cmp; + if ( auto cmp = limits <=> rhs.limits; cmp != 0 ) + return cmp; + if ( auto cmp = sparseProperties <=> rhs.sparseProperties; cmp != 0 ) + return cmp; + + return std::partial_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( apiVersion == rhs.apiVersion ) && ( driverVersion == rhs.driverVersion ) && ( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && + ( deviceType == rhs.deviceType ) && ( strcmp( deviceName, rhs.deviceName ) == 0 ) && ( pipelineCacheUUID == rhs.pipelineCacheUUID ) && + ( limits == rhs.limits ) && ( sparseProperties == rhs.sparseProperties ); + } + + bool operator!=( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t apiVersion = {}; + uint32_t driverVersion = {}; + uint32_t vendorID = {}; + uint32_t deviceID = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceType deviceType = VULKAN_HPP_NAMESPACE::PhysicalDeviceType::eOther; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceName = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineCacheUUID = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits limits = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties sparseProperties = {}; + }; + + // wrapper struct for struct VkPhysicalDeviceProperties2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceProperties2.html + struct PhysicalDeviceProperties2 + { + using NativeType = VkPhysicalDeviceProperties2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProperties2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , properties{ properties_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties2( PhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceProperties2( VkPhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceProperties2( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceProperties2 & operator=( PhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceProperties2 & operator=( VkPhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceProperties2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProperties2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProperties2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProperties2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, properties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceProperties2 const & ) const = default; +#else + bool operator==( PhysicalDeviceProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties ); +# endif + } + + bool operator!=( PhysicalDeviceProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProperties2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceProperties2; + }; + + using PhysicalDeviceProperties2KHR = PhysicalDeviceProperties2; + + // wrapper struct for struct VkPhysicalDeviceLayeredApiVulkanPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLayeredApiVulkanPropertiesKHR.html + struct PhysicalDeviceLayeredApiVulkanPropertiesKHR + { + using NativeType = VkPhysicalDeviceLayeredApiVulkanPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLayeredApiVulkanPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLayeredApiVulkanPropertiesKHR( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , properties{ properties_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceLayeredApiVulkanPropertiesKHR( PhysicalDeviceLayeredApiVulkanPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLayeredApiVulkanPropertiesKHR( VkPhysicalDeviceLayeredApiVulkanPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLayeredApiVulkanPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLayeredApiVulkanPropertiesKHR & operator=( PhysicalDeviceLayeredApiVulkanPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLayeredApiVulkanPropertiesKHR & operator=( VkPhysicalDeviceLayeredApiVulkanPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceLayeredApiVulkanPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiVulkanPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiVulkanPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredApiVulkanPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, properties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLayeredApiVulkanPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceLayeredApiVulkanPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties ); +# endif + } + + bool operator!=( PhysicalDeviceLayeredApiVulkanPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLayeredApiVulkanPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLayeredApiVulkanPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceLayeredDriverPropertiesMSFT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLayeredDriverPropertiesMSFT.html + struct PhysicalDeviceLayeredDriverPropertiesMSFT + { + using NativeType = VkPhysicalDeviceLayeredDriverPropertiesMSFT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLayeredDriverPropertiesMSFT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLayeredDriverPropertiesMSFT( + VULKAN_HPP_NAMESPACE::LayeredDriverUnderlyingApiMSFT underlyingAPI_ = VULKAN_HPP_NAMESPACE::LayeredDriverUnderlyingApiMSFT::eNone, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , underlyingAPI{ underlyingAPI_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceLayeredDriverPropertiesMSFT( PhysicalDeviceLayeredDriverPropertiesMSFT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLayeredDriverPropertiesMSFT( VkPhysicalDeviceLayeredDriverPropertiesMSFT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLayeredDriverPropertiesMSFT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLayeredDriverPropertiesMSFT & operator=( PhysicalDeviceLayeredDriverPropertiesMSFT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLayeredDriverPropertiesMSFT & operator=( VkPhysicalDeviceLayeredDriverPropertiesMSFT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceLayeredDriverPropertiesMSFT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredDriverPropertiesMSFT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredDriverPropertiesMSFT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLayeredDriverPropertiesMSFT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, underlyingAPI ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLayeredDriverPropertiesMSFT const & ) const = default; +#else + bool operator==( PhysicalDeviceLayeredDriverPropertiesMSFT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( underlyingAPI == rhs.underlyingAPI ); +# endif + } + + bool operator!=( PhysicalDeviceLayeredDriverPropertiesMSFT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLayeredDriverPropertiesMSFT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::LayeredDriverUnderlyingApiMSFT underlyingAPI = VULKAN_HPP_NAMESPACE::LayeredDriverUnderlyingApiMSFT::eNone; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLayeredDriverPropertiesMSFT; + }; + + // wrapper struct for struct VkPhysicalDeviceLegacyDitheringFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLegacyDitheringFeaturesEXT.html + struct PhysicalDeviceLegacyDitheringFeaturesEXT + { + using NativeType = VkPhysicalDeviceLegacyDitheringFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLegacyDitheringFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLegacyDitheringFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 legacyDithering_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , legacyDithering{ legacyDithering_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceLegacyDitheringFeaturesEXT( PhysicalDeviceLegacyDitheringFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLegacyDitheringFeaturesEXT( VkPhysicalDeviceLegacyDitheringFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLegacyDitheringFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLegacyDitheringFeaturesEXT & operator=( PhysicalDeviceLegacyDitheringFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLegacyDitheringFeaturesEXT & operator=( VkPhysicalDeviceLegacyDitheringFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLegacyDitheringFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLegacyDitheringFeaturesEXT & setLegacyDithering( VULKAN_HPP_NAMESPACE::Bool32 legacyDithering_ ) VULKAN_HPP_NOEXCEPT + { + legacyDithering = legacyDithering_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceLegacyDitheringFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyDitheringFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyDitheringFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyDitheringFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, legacyDithering ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLegacyDitheringFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceLegacyDitheringFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( legacyDithering == rhs.legacyDithering ); +# endif + } + + bool operator!=( PhysicalDeviceLegacyDitheringFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLegacyDitheringFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 legacyDithering = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLegacyDitheringFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT.html + struct PhysicalDeviceLegacyVertexAttributesFeaturesEXT + { + using NativeType = VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLegacyVertexAttributesFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLegacyVertexAttributesFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 legacyVertexAttributes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , legacyVertexAttributes{ legacyVertexAttributes_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceLegacyVertexAttributesFeaturesEXT( PhysicalDeviceLegacyVertexAttributesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLegacyVertexAttributesFeaturesEXT( VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLegacyVertexAttributesFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLegacyVertexAttributesFeaturesEXT & operator=( PhysicalDeviceLegacyVertexAttributesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLegacyVertexAttributesFeaturesEXT & operator=( VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLegacyVertexAttributesFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLegacyVertexAttributesFeaturesEXT & + setLegacyVertexAttributes( VULKAN_HPP_NAMESPACE::Bool32 legacyVertexAttributes_ ) VULKAN_HPP_NOEXCEPT + { + legacyVertexAttributes = legacyVertexAttributes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, legacyVertexAttributes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLegacyVertexAttributesFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceLegacyVertexAttributesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( legacyVertexAttributes == rhs.legacyVertexAttributes ); +# endif + } + + bool operator!=( PhysicalDeviceLegacyVertexAttributesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLegacyVertexAttributesFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 legacyVertexAttributes = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLegacyVertexAttributesFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT.html + struct PhysicalDeviceLegacyVertexAttributesPropertiesEXT + { + using NativeType = VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLegacyVertexAttributesPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLegacyVertexAttributesPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 nativeUnalignedPerformance_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , nativeUnalignedPerformance{ nativeUnalignedPerformance_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceLegacyVertexAttributesPropertiesEXT( PhysicalDeviceLegacyVertexAttributesPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLegacyVertexAttributesPropertiesEXT( VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLegacyVertexAttributesPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLegacyVertexAttributesPropertiesEXT & + operator=( PhysicalDeviceLegacyVertexAttributesPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLegacyVertexAttributesPropertiesEXT & operator=( VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, nativeUnalignedPerformance ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLegacyVertexAttributesPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceLegacyVertexAttributesPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( nativeUnalignedPerformance == rhs.nativeUnalignedPerformance ); +# endif + } + + bool operator!=( PhysicalDeviceLegacyVertexAttributesPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLegacyVertexAttributesPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 nativeUnalignedPerformance = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLegacyVertexAttributesPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceLineRasterizationFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLineRasterizationFeatures.html + struct PhysicalDeviceLineRasterizationFeatures + { + using NativeType = VkPhysicalDeviceLineRasterizationFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLineRasterizationFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationFeatures( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rectangularLines{ rectangularLines_ } + , bresenhamLines{ bresenhamLines_ } + , smoothLines{ smoothLines_ } + , stippledRectangularLines{ stippledRectangularLines_ } + , stippledBresenhamLines{ stippledBresenhamLines_ } + , stippledSmoothLines{ stippledSmoothLines_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationFeatures( PhysicalDeviceLineRasterizationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLineRasterizationFeatures( VkPhysicalDeviceLineRasterizationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLineRasterizationFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLineRasterizationFeatures & operator=( PhysicalDeviceLineRasterizationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLineRasterizationFeatures & operator=( VkPhysicalDeviceLineRasterizationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & setRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ ) VULKAN_HPP_NOEXCEPT + { + rectangularLines = rectangularLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & setBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ ) VULKAN_HPP_NOEXCEPT + { + bresenhamLines = bresenhamLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & setSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ ) VULKAN_HPP_NOEXCEPT + { + smoothLines = smoothLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & + setStippledRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ ) VULKAN_HPP_NOEXCEPT + { + stippledRectangularLines = stippledRectangularLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & + setStippledBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ ) VULKAN_HPP_NOEXCEPT + { + stippledBresenhamLines = stippledBresenhamLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeatures & + setStippledSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ ) VULKAN_HPP_NOEXCEPT + { + stippledSmoothLines = stippledSmoothLines_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceLineRasterizationFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLineRasterizationFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLineRasterizationFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLineRasterizationFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rectangularLines, bresenhamLines, smoothLines, stippledRectangularLines, stippledBresenhamLines, stippledSmoothLines ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLineRasterizationFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceLineRasterizationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rectangularLines == rhs.rectangularLines ) && ( bresenhamLines == rhs.bresenhamLines ) && + ( smoothLines == rhs.smoothLines ) && ( stippledRectangularLines == rhs.stippledRectangularLines ) && + ( stippledBresenhamLines == rhs.stippledBresenhamLines ) && ( stippledSmoothLines == rhs.stippledSmoothLines ); +# endif + } + + bool operator!=( PhysicalDeviceLineRasterizationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLineRasterizationFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rectangularLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 smoothLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLineRasterizationFeatures; + }; + + using PhysicalDeviceLineRasterizationFeaturesEXT = PhysicalDeviceLineRasterizationFeatures; + using PhysicalDeviceLineRasterizationFeaturesKHR = PhysicalDeviceLineRasterizationFeatures; + + // wrapper struct for struct VkPhysicalDeviceLineRasterizationProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLineRasterizationProperties.html + struct PhysicalDeviceLineRasterizationProperties + { + using NativeType = VkPhysicalDeviceLineRasterizationProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLineRasterizationProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationProperties( uint32_t lineSubPixelPrecisionBits_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , lineSubPixelPrecisionBits{ lineSubPixelPrecisionBits_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceLineRasterizationProperties( PhysicalDeviceLineRasterizationProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLineRasterizationProperties( VkPhysicalDeviceLineRasterizationProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLineRasterizationProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLineRasterizationProperties & operator=( PhysicalDeviceLineRasterizationProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLineRasterizationProperties & operator=( VkPhysicalDeviceLineRasterizationProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceLineRasterizationProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLineRasterizationProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLineRasterizationProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLineRasterizationProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, lineSubPixelPrecisionBits ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLineRasterizationProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceLineRasterizationProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( lineSubPixelPrecisionBits == rhs.lineSubPixelPrecisionBits ); +# endif + } + + bool operator!=( PhysicalDeviceLineRasterizationProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLineRasterizationProperties; + void * pNext = {}; + uint32_t lineSubPixelPrecisionBits = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLineRasterizationProperties; + }; + + using PhysicalDeviceLineRasterizationPropertiesEXT = PhysicalDeviceLineRasterizationProperties; + using PhysicalDeviceLineRasterizationPropertiesKHR = PhysicalDeviceLineRasterizationProperties; + + // wrapper struct for struct VkPhysicalDeviceLinearColorAttachmentFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceLinearColorAttachmentFeaturesNV.html + struct PhysicalDeviceLinearColorAttachmentFeaturesNV + { + using NativeType = VkPhysicalDeviceLinearColorAttachmentFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceLinearColorAttachmentFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , linearColorAttachment{ linearColorAttachment_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceLinearColorAttachmentFeaturesNV( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceLinearColorAttachmentFeaturesNV( VkPhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceLinearColorAttachmentFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceLinearColorAttachmentFeaturesNV & operator=( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceLinearColorAttachmentFeaturesNV & operator=( VkPhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLinearColorAttachmentFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLinearColorAttachmentFeaturesNV & + setLinearColorAttachment( VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment_ ) VULKAN_HPP_NOEXCEPT + { + linearColorAttachment = linearColorAttachment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, linearColorAttachment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceLinearColorAttachmentFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( linearColorAttachment == rhs.linearColorAttachment ); +# endif + } + + bool operator!=( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceLinearColorAttachmentFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceMaintenance3Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance3Properties.html + struct PhysicalDeviceMaintenance3Properties + { + using NativeType = VkPhysicalDeviceMaintenance3Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance3Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance3Properties( uint32_t maxPerSetDescriptors_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxPerSetDescriptors{ maxPerSetDescriptors_ } + , maxMemoryAllocationSize{ maxMemoryAllocationSize_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance3Properties( PhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance3Properties( VkPhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance3Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance3Properties & operator=( PhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance3Properties & operator=( VkPhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMaintenance3Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance3Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance3Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance3Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxPerSetDescriptors, maxMemoryAllocationSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance3Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance3Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPerSetDescriptors == rhs.maxPerSetDescriptors ) && + ( maxMemoryAllocationSize == rhs.maxMemoryAllocationSize ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance3Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance3Properties; + void * pNext = {}; + uint32_t maxPerSetDescriptors = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance3Properties; + }; + + using PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties; + + // wrapper struct for struct VkPhysicalDeviceMaintenance4Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance4Features.html + struct PhysicalDeviceMaintenance4Features + { + using NativeType = VkPhysicalDeviceMaintenance4Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance4Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Features( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maintenance4{ maintenance4_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Features( PhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance4Features( VkPhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance4Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance4Features & operator=( PhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance4Features & operator=( VkPhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance4Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance4Features & setMaintenance4( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ ) VULKAN_HPP_NOEXCEPT + { + maintenance4 = maintenance4_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMaintenance4Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance4Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance4Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance4Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maintenance4 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance4Features const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance4Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance4 == rhs.maintenance4 ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance4Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance4Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance4 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance4Features; + }; + + using PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4Features; + + // wrapper struct for struct VkPhysicalDeviceMaintenance4Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance4Properties.html + struct PhysicalDeviceMaintenance4Properties + { + using NativeType = VkPhysicalDeviceMaintenance4Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance4Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Properties( VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxBufferSize{ maxBufferSize_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Properties( PhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance4Properties( VkPhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance4Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance4Properties & operator=( PhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance4Properties & operator=( VkPhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMaintenance4Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance4Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance4Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance4Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxBufferSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance4Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance4Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxBufferSize == rhs.maxBufferSize ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance4Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance4Properties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance4Properties; + }; + + using PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4Properties; + + // wrapper struct for struct VkPhysicalDeviceMaintenance5Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance5Features.html + struct PhysicalDeviceMaintenance5Features + { + using NativeType = VkPhysicalDeviceMaintenance5Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance5Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance5Features( VULKAN_HPP_NAMESPACE::Bool32 maintenance5_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maintenance5{ maintenance5_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance5Features( PhysicalDeviceMaintenance5Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance5Features( VkPhysicalDeviceMaintenance5Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance5Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance5Features & operator=( PhysicalDeviceMaintenance5Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance5Features & operator=( VkPhysicalDeviceMaintenance5Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance5Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance5Features & setMaintenance5( VULKAN_HPP_NAMESPACE::Bool32 maintenance5_ ) VULKAN_HPP_NOEXCEPT + { + maintenance5 = maintenance5_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMaintenance5Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance5Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance5Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance5Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maintenance5 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance5Features const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance5Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance5 == rhs.maintenance5 ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance5Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance5Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance5 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance5Features; + }; + + using PhysicalDeviceMaintenance5FeaturesKHR = PhysicalDeviceMaintenance5Features; + + // wrapper struct for struct VkPhysicalDeviceMaintenance5Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance5Properties.html + struct PhysicalDeviceMaintenance5Properties + { + using NativeType = VkPhysicalDeviceMaintenance5Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance5Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance5Properties( VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentMultisampleCoverageAfterSampleCounting_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentSampleMaskTestBeforeSampleCounting_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthStencilSwizzleOneSupport_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 polygonModePointSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nonStrictSinglePixelWideLinesUseParallelogram_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nonStrictWideLinesUseParallelogram_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , earlyFragmentMultisampleCoverageAfterSampleCounting{ earlyFragmentMultisampleCoverageAfterSampleCounting_ } + , earlyFragmentSampleMaskTestBeforeSampleCounting{ earlyFragmentSampleMaskTestBeforeSampleCounting_ } + , depthStencilSwizzleOneSupport{ depthStencilSwizzleOneSupport_ } + , polygonModePointSize{ polygonModePointSize_ } + , nonStrictSinglePixelWideLinesUseParallelogram{ nonStrictSinglePixelWideLinesUseParallelogram_ } + , nonStrictWideLinesUseParallelogram{ nonStrictWideLinesUseParallelogram_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance5Properties( PhysicalDeviceMaintenance5Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance5Properties( VkPhysicalDeviceMaintenance5Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance5Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance5Properties & operator=( PhysicalDeviceMaintenance5Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance5Properties & operator=( VkPhysicalDeviceMaintenance5Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMaintenance5Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance5Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance5Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance5Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + earlyFragmentMultisampleCoverageAfterSampleCounting, + earlyFragmentSampleMaskTestBeforeSampleCounting, + depthStencilSwizzleOneSupport, + polygonModePointSize, + nonStrictSinglePixelWideLinesUseParallelogram, + nonStrictWideLinesUseParallelogram ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance5Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance5Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( earlyFragmentMultisampleCoverageAfterSampleCounting == rhs.earlyFragmentMultisampleCoverageAfterSampleCounting ) && + ( earlyFragmentSampleMaskTestBeforeSampleCounting == rhs.earlyFragmentSampleMaskTestBeforeSampleCounting ) && + ( depthStencilSwizzleOneSupport == rhs.depthStencilSwizzleOneSupport ) && ( polygonModePointSize == rhs.polygonModePointSize ) && + ( nonStrictSinglePixelWideLinesUseParallelogram == rhs.nonStrictSinglePixelWideLinesUseParallelogram ) && + ( nonStrictWideLinesUseParallelogram == rhs.nonStrictWideLinesUseParallelogram ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance5Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance5Properties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentMultisampleCoverageAfterSampleCounting = {}; + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentSampleMaskTestBeforeSampleCounting = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthStencilSwizzleOneSupport = {}; + VULKAN_HPP_NAMESPACE::Bool32 polygonModePointSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 nonStrictSinglePixelWideLinesUseParallelogram = {}; + VULKAN_HPP_NAMESPACE::Bool32 nonStrictWideLinesUseParallelogram = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance5Properties; + }; + + using PhysicalDeviceMaintenance5PropertiesKHR = PhysicalDeviceMaintenance5Properties; + + // wrapper struct for struct VkPhysicalDeviceMaintenance6Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance6Features.html + struct PhysicalDeviceMaintenance6Features + { + using NativeType = VkPhysicalDeviceMaintenance6Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance6Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance6Features( VULKAN_HPP_NAMESPACE::Bool32 maintenance6_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maintenance6{ maintenance6_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance6Features( PhysicalDeviceMaintenance6Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance6Features( VkPhysicalDeviceMaintenance6Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance6Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance6Features & operator=( PhysicalDeviceMaintenance6Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance6Features & operator=( VkPhysicalDeviceMaintenance6Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance6Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance6Features & setMaintenance6( VULKAN_HPP_NAMESPACE::Bool32 maintenance6_ ) VULKAN_HPP_NOEXCEPT + { + maintenance6 = maintenance6_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMaintenance6Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance6Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance6Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance6Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maintenance6 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance6Features const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance6Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance6 == rhs.maintenance6 ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance6Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance6Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance6 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance6Features; + }; + + using PhysicalDeviceMaintenance6FeaturesKHR = PhysicalDeviceMaintenance6Features; + + // wrapper struct for struct VkPhysicalDeviceMaintenance6Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance6Properties.html + struct PhysicalDeviceMaintenance6Properties + { + using NativeType = VkPhysicalDeviceMaintenance6Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance6Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance6Properties( VULKAN_HPP_NAMESPACE::Bool32 blockTexelViewCompatibleMultipleLayers_ = {}, + uint32_t maxCombinedImageSamplerDescriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateClampCombinerInputs_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , blockTexelViewCompatibleMultipleLayers{ blockTexelViewCompatibleMultipleLayers_ } + , maxCombinedImageSamplerDescriptorCount{ maxCombinedImageSamplerDescriptorCount_ } + , fragmentShadingRateClampCombinerInputs{ fragmentShadingRateClampCombinerInputs_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance6Properties( PhysicalDeviceMaintenance6Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance6Properties( VkPhysicalDeviceMaintenance6Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance6Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance6Properties & operator=( PhysicalDeviceMaintenance6Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance6Properties & operator=( VkPhysicalDeviceMaintenance6Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMaintenance6Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance6Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance6Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance6Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, blockTexelViewCompatibleMultipleLayers, maxCombinedImageSamplerDescriptorCount, fragmentShadingRateClampCombinerInputs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance6Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance6Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( blockTexelViewCompatibleMultipleLayers == rhs.blockTexelViewCompatibleMultipleLayers ) && + ( maxCombinedImageSamplerDescriptorCount == rhs.maxCombinedImageSamplerDescriptorCount ) && + ( fragmentShadingRateClampCombinerInputs == rhs.fragmentShadingRateClampCombinerInputs ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance6Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance6Properties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 blockTexelViewCompatibleMultipleLayers = {}; + uint32_t maxCombinedImageSamplerDescriptorCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateClampCombinerInputs = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance6Properties; + }; + + using PhysicalDeviceMaintenance6PropertiesKHR = PhysicalDeviceMaintenance6Properties; + + // wrapper struct for struct VkPhysicalDeviceMaintenance7FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance7FeaturesKHR.html + struct PhysicalDeviceMaintenance7FeaturesKHR + { + using NativeType = VkPhysicalDeviceMaintenance7FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance7FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance7FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 maintenance7_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maintenance7{ maintenance7_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance7FeaturesKHR( PhysicalDeviceMaintenance7FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance7FeaturesKHR( VkPhysicalDeviceMaintenance7FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance7FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance7FeaturesKHR & operator=( PhysicalDeviceMaintenance7FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance7FeaturesKHR & operator=( VkPhysicalDeviceMaintenance7FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance7FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance7FeaturesKHR & setMaintenance7( VULKAN_HPP_NAMESPACE::Bool32 maintenance7_ ) VULKAN_HPP_NOEXCEPT + { + maintenance7 = maintenance7_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMaintenance7FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance7FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance7FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance7FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maintenance7 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance7FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance7FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance7 == rhs.maintenance7 ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance7FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance7FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance7 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance7FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceMaintenance7PropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance7PropertiesKHR.html + struct PhysicalDeviceMaintenance7PropertiesKHR + { + using NativeType = VkPhysicalDeviceMaintenance7PropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance7PropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance7PropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 robustFragmentShadingRateAttachmentAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilAttachmentAccess_ = {}, + uint32_t maxDescriptorSetTotalUniformBuffersDynamic_ = {}, + uint32_t maxDescriptorSetTotalStorageBuffersDynamic_ = {}, + uint32_t maxDescriptorSetTotalBuffersDynamic_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , robustFragmentShadingRateAttachmentAccess{ robustFragmentShadingRateAttachmentAccess_ } + , separateDepthStencilAttachmentAccess{ separateDepthStencilAttachmentAccess_ } + , maxDescriptorSetTotalUniformBuffersDynamic{ maxDescriptorSetTotalUniformBuffersDynamic_ } + , maxDescriptorSetTotalStorageBuffersDynamic{ maxDescriptorSetTotalStorageBuffersDynamic_ } + , maxDescriptorSetTotalBuffersDynamic{ maxDescriptorSetTotalBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic{ maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic{ maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindTotalBuffersDynamic{ maxDescriptorSetUpdateAfterBindTotalBuffersDynamic_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance7PropertiesKHR( PhysicalDeviceMaintenance7PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance7PropertiesKHR( VkPhysicalDeviceMaintenance7PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance7PropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance7PropertiesKHR & operator=( PhysicalDeviceMaintenance7PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance7PropertiesKHR & operator=( VkPhysicalDeviceMaintenance7PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMaintenance7PropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance7PropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance7PropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance7PropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + robustFragmentShadingRateAttachmentAccess, + separateDepthStencilAttachmentAccess, + maxDescriptorSetTotalUniformBuffersDynamic, + maxDescriptorSetTotalStorageBuffersDynamic, + maxDescriptorSetTotalBuffersDynamic, + maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic, + maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic, + maxDescriptorSetUpdateAfterBindTotalBuffersDynamic ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance7PropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance7PropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && + ( robustFragmentShadingRateAttachmentAccess == rhs.robustFragmentShadingRateAttachmentAccess ) && + ( separateDepthStencilAttachmentAccess == rhs.separateDepthStencilAttachmentAccess ) && + ( maxDescriptorSetTotalUniformBuffersDynamic == rhs.maxDescriptorSetTotalUniformBuffersDynamic ) && + ( maxDescriptorSetTotalStorageBuffersDynamic == rhs.maxDescriptorSetTotalStorageBuffersDynamic ) && + ( maxDescriptorSetTotalBuffersDynamic == rhs.maxDescriptorSetTotalBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindTotalBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindTotalBuffersDynamic ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance7PropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance7PropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustFragmentShadingRateAttachmentAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilAttachmentAccess = {}; + uint32_t maxDescriptorSetTotalUniformBuffersDynamic = {}; + uint32_t maxDescriptorSetTotalStorageBuffersDynamic = {}; + uint32_t maxDescriptorSetTotalBuffersDynamic = {}; + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic = {}; + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic = {}; + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance7PropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceMaintenance8FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance8FeaturesKHR.html + struct PhysicalDeviceMaintenance8FeaturesKHR + { + using NativeType = VkPhysicalDeviceMaintenance8FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance8FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance8FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 maintenance8_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maintenance8{ maintenance8_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance8FeaturesKHR( PhysicalDeviceMaintenance8FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance8FeaturesKHR( VkPhysicalDeviceMaintenance8FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance8FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance8FeaturesKHR & operator=( PhysicalDeviceMaintenance8FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance8FeaturesKHR & operator=( VkPhysicalDeviceMaintenance8FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance8FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance8FeaturesKHR & setMaintenance8( VULKAN_HPP_NAMESPACE::Bool32 maintenance8_ ) VULKAN_HPP_NOEXCEPT + { + maintenance8 = maintenance8_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMaintenance8FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance8FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance8FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance8FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maintenance8 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance8FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance8FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance8 == rhs.maintenance8 ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance8FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance8FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance8 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance8FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceMaintenance9FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance9FeaturesKHR.html + struct PhysicalDeviceMaintenance9FeaturesKHR + { + using NativeType = VkPhysicalDeviceMaintenance9FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance9FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance9FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 maintenance9_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maintenance9{ maintenance9_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance9FeaturesKHR( PhysicalDeviceMaintenance9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance9FeaturesKHR( VkPhysicalDeviceMaintenance9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance9FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance9FeaturesKHR & operator=( PhysicalDeviceMaintenance9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance9FeaturesKHR & operator=( VkPhysicalDeviceMaintenance9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance9FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance9FeaturesKHR & setMaintenance9( VULKAN_HPP_NAMESPACE::Bool32 maintenance9_ ) VULKAN_HPP_NOEXCEPT + { + maintenance9 = maintenance9_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMaintenance9FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance9FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance9FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance9FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maintenance9 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance9FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance9FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance9 == rhs.maintenance9 ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance9FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance9FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance9 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance9FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceMaintenance9PropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMaintenance9PropertiesKHR.html + struct PhysicalDeviceMaintenance9PropertiesKHR + { + using NativeType = VkPhysicalDeviceMaintenance9PropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMaintenance9PropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance9PropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3DSparse_ = {}, + VULKAN_HPP_NAMESPACE::DefaultVertexAttributeValueKHR defaultVertexAttributeValue_ = + VULKAN_HPP_NAMESPACE::DefaultVertexAttributeValueKHR::eZeroZeroZeroZero, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , image2DViewOf3DSparse{ image2DViewOf3DSparse_ } + , defaultVertexAttributeValue{ defaultVertexAttributeValue_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance9PropertiesKHR( PhysicalDeviceMaintenance9PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMaintenance9PropertiesKHR( VkPhysicalDeviceMaintenance9PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMaintenance9PropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMaintenance9PropertiesKHR & operator=( PhysicalDeviceMaintenance9PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMaintenance9PropertiesKHR & operator=( VkPhysicalDeviceMaintenance9PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMaintenance9PropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance9PropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance9PropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMaintenance9PropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, image2DViewOf3DSparse, defaultVertexAttributeValue ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMaintenance9PropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceMaintenance9PropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image2DViewOf3DSparse == rhs.image2DViewOf3DSparse ) && + ( defaultVertexAttributeValue == rhs.defaultVertexAttributeValue ); +# endif + } + + bool operator!=( PhysicalDeviceMaintenance9PropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance9PropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 image2DViewOf3DSparse = {}; + VULKAN_HPP_NAMESPACE::DefaultVertexAttributeValueKHR defaultVertexAttributeValue = VULKAN_HPP_NAMESPACE::DefaultVertexAttributeValueKHR::eZeroZeroZeroZero; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMaintenance9PropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceMapMemoryPlacedFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMapMemoryPlacedFeaturesEXT.html + struct PhysicalDeviceMapMemoryPlacedFeaturesEXT + { + using NativeType = VkPhysicalDeviceMapMemoryPlacedFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMapMemoryPlacedFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMapMemoryPlacedFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 memoryMapPlaced_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 memoryMapRangePlaced_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 memoryUnmapReserve_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryMapPlaced{ memoryMapPlaced_ } + , memoryMapRangePlaced{ memoryMapRangePlaced_ } + , memoryUnmapReserve{ memoryUnmapReserve_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMapMemoryPlacedFeaturesEXT( PhysicalDeviceMapMemoryPlacedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMapMemoryPlacedFeaturesEXT( VkPhysicalDeviceMapMemoryPlacedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMapMemoryPlacedFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMapMemoryPlacedFeaturesEXT & operator=( PhysicalDeviceMapMemoryPlacedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMapMemoryPlacedFeaturesEXT & operator=( VkPhysicalDeviceMapMemoryPlacedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMapMemoryPlacedFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMapMemoryPlacedFeaturesEXT & setMemoryMapPlaced( VULKAN_HPP_NAMESPACE::Bool32 memoryMapPlaced_ ) VULKAN_HPP_NOEXCEPT + { + memoryMapPlaced = memoryMapPlaced_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMapMemoryPlacedFeaturesEXT & + setMemoryMapRangePlaced( VULKAN_HPP_NAMESPACE::Bool32 memoryMapRangePlaced_ ) VULKAN_HPP_NOEXCEPT + { + memoryMapRangePlaced = memoryMapRangePlaced_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMapMemoryPlacedFeaturesEXT & + setMemoryUnmapReserve( VULKAN_HPP_NAMESPACE::Bool32 memoryUnmapReserve_ ) VULKAN_HPP_NOEXCEPT + { + memoryUnmapReserve = memoryUnmapReserve_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMapMemoryPlacedFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMapMemoryPlacedFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMapMemoryPlacedFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryMapPlaced, memoryMapRangePlaced, memoryUnmapReserve ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMapMemoryPlacedFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMapMemoryPlacedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryMapPlaced == rhs.memoryMapPlaced ) && + ( memoryMapRangePlaced == rhs.memoryMapRangePlaced ) && ( memoryUnmapReserve == rhs.memoryUnmapReserve ); +# endif + } + + bool operator!=( PhysicalDeviceMapMemoryPlacedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMapMemoryPlacedFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 memoryMapPlaced = {}; + VULKAN_HPP_NAMESPACE::Bool32 memoryMapRangePlaced = {}; + VULKAN_HPP_NAMESPACE::Bool32 memoryUnmapReserve = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMapMemoryPlacedFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMapMemoryPlacedPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMapMemoryPlacedPropertiesEXT.html + struct PhysicalDeviceMapMemoryPlacedPropertiesEXT + { + using NativeType = VkPhysicalDeviceMapMemoryPlacedPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMapMemoryPlacedPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMapMemoryPlacedPropertiesEXT( VULKAN_HPP_NAMESPACE::DeviceSize minPlacedMemoryMapAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minPlacedMemoryMapAlignment{ minPlacedMemoryMapAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMapMemoryPlacedPropertiesEXT( PhysicalDeviceMapMemoryPlacedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMapMemoryPlacedPropertiesEXT( VkPhysicalDeviceMapMemoryPlacedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMapMemoryPlacedPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMapMemoryPlacedPropertiesEXT & operator=( PhysicalDeviceMapMemoryPlacedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMapMemoryPlacedPropertiesEXT & operator=( VkPhysicalDeviceMapMemoryPlacedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMapMemoryPlacedPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMapMemoryPlacedPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMapMemoryPlacedPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMapMemoryPlacedPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minPlacedMemoryMapAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMapMemoryPlacedPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMapMemoryPlacedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minPlacedMemoryMapAlignment == rhs.minPlacedMemoryMapAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceMapMemoryPlacedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMapMemoryPlacedPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minPlacedMemoryMapAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMapMemoryPlacedPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMemoryBudgetPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMemoryBudgetPropertiesEXT.html + struct PhysicalDeviceMemoryBudgetPropertiesEXT + { + using NativeType = VkPhysicalDeviceMemoryBudgetPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryBudgetPropertiesEXT( std::array const & heapBudget_ = {}, + std::array const & heapUsage_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , heapBudget{ heapBudget_ } + , heapUsage{ heapUsage_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryBudgetPropertiesEXT( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMemoryBudgetPropertiesEXT( VkPhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMemoryBudgetPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMemoryBudgetPropertiesEXT & operator=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMemoryBudgetPropertiesEXT & operator=( VkPhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMemoryBudgetPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryBudgetPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryBudgetPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryBudgetPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, heapBudget, heapUsage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMemoryBudgetPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( heapBudget == rhs.heapBudget ) && ( heapUsage == rhs.heapUsage ); +# endif + } + + bool operator!=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D heapBudget = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D heapUsage = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMemoryBudgetPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMemoryDecompressionFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMemoryDecompressionFeaturesNV.html + struct PhysicalDeviceMemoryDecompressionFeaturesNV + { + using NativeType = VkPhysicalDeviceMemoryDecompressionFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryDecompressionFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryDecompressionFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 memoryDecompression_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryDecompression{ memoryDecompression_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryDecompressionFeaturesNV( PhysicalDeviceMemoryDecompressionFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMemoryDecompressionFeaturesNV( VkPhysicalDeviceMemoryDecompressionFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMemoryDecompressionFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMemoryDecompressionFeaturesNV & operator=( PhysicalDeviceMemoryDecompressionFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMemoryDecompressionFeaturesNV & operator=( VkPhysicalDeviceMemoryDecompressionFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryDecompressionFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryDecompressionFeaturesNV & + setMemoryDecompression( VULKAN_HPP_NAMESPACE::Bool32 memoryDecompression_ ) VULKAN_HPP_NOEXCEPT + { + memoryDecompression = memoryDecompression_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMemoryDecompressionFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryDecompressionFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryDecompressionFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryDecompressionFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryDecompression ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMemoryDecompressionFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceMemoryDecompressionFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryDecompression == rhs.memoryDecompression ); +# endif + } + + bool operator!=( PhysicalDeviceMemoryDecompressionFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryDecompressionFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 memoryDecompression = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMemoryDecompressionFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceMemoryDecompressionPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMemoryDecompressionPropertiesNV.html + struct PhysicalDeviceMemoryDecompressionPropertiesNV + { + using NativeType = VkPhysicalDeviceMemoryDecompressionPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryDecompressionPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryDecompressionPropertiesNV( VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagsNV decompressionMethods_ = {}, + uint64_t maxDecompressionIndirectCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , decompressionMethods{ decompressionMethods_ } + , maxDecompressionIndirectCount{ maxDecompressionIndirectCount_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceMemoryDecompressionPropertiesNV( PhysicalDeviceMemoryDecompressionPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMemoryDecompressionPropertiesNV( VkPhysicalDeviceMemoryDecompressionPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMemoryDecompressionPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMemoryDecompressionPropertiesNV & operator=( PhysicalDeviceMemoryDecompressionPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMemoryDecompressionPropertiesNV & operator=( VkPhysicalDeviceMemoryDecompressionPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMemoryDecompressionPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryDecompressionPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryDecompressionPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryDecompressionPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, decompressionMethods, maxDecompressionIndirectCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMemoryDecompressionPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceMemoryDecompressionPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( decompressionMethods == rhs.decompressionMethods ) && + ( maxDecompressionIndirectCount == rhs.maxDecompressionIndirectCount ); +# endif + } + + bool operator!=( PhysicalDeviceMemoryDecompressionPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryDecompressionPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::MemoryDecompressionMethodFlagsNV decompressionMethods = {}; + uint64_t maxDecompressionIndirectCount = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMemoryDecompressionPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceMemoryPriorityFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMemoryPriorityFeaturesEXT.html + struct PhysicalDeviceMemoryPriorityFeaturesEXT + { + using NativeType = VkPhysicalDeviceMemoryPriorityFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryPriorityFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 memoryPriority_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryPriority{ memoryPriority_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMemoryPriorityFeaturesEXT( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMemoryPriorityFeaturesEXT( VkPhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMemoryPriorityFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMemoryPriorityFeaturesEXT & operator=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMemoryPriorityFeaturesEXT & operator=( VkPhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT & setMemoryPriority( VULKAN_HPP_NAMESPACE::Bool32 memoryPriority_ ) VULKAN_HPP_NOEXCEPT + { + memoryPriority = memoryPriority_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMemoryPriorityFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryPriorityFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryPriorityFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryPriorityFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryPriority ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMemoryPriorityFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryPriority == rhs.memoryPriority ); +# endif + } + + bool operator!=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 memoryPriority = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMemoryPriorityFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMemoryProperties.html + struct PhysicalDeviceMemoryProperties + { + using NativeType = VkPhysicalDeviceMemoryProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceMemoryProperties( uint32_t memoryTypeCount_ = {}, + std::array const & memoryTypes_ = {}, + uint32_t memoryHeapCount_ = {}, + std::array const & memoryHeaps_ = {} ) VULKAN_HPP_NOEXCEPT + : memoryTypeCount{ memoryTypeCount_ } + , memoryTypes{ memoryTypes_ } + , memoryHeapCount{ memoryHeapCount_ } + , memoryHeaps{ memoryHeaps_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties( PhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMemoryProperties( VkPhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMemoryProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMemoryProperties & operator=( PhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMemoryProperties & operator=( VkPhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMemoryProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( memoryTypeCount, memoryTypes, memoryHeapCount, memoryHeaps ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = memoryTypeCount <=> rhs.memoryTypeCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < memoryTypeCount; ++i ) + { + if ( auto cmp = memoryTypes[i] <=> rhs.memoryTypes[i]; cmp != 0 ) + return cmp; + } + if ( auto cmp = memoryHeapCount <=> rhs.memoryHeapCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < memoryHeapCount; ++i ) + { + if ( auto cmp = memoryHeaps[i] <=> rhs.memoryHeaps[i]; cmp != 0 ) + return cmp; + } + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( memoryTypeCount == rhs.memoryTypeCount ) && + ( memcmp( memoryTypes, rhs.memoryTypes, memoryTypeCount * sizeof( VULKAN_HPP_NAMESPACE::MemoryType ) ) == 0 ) && + ( memoryHeapCount == rhs.memoryHeapCount ) && + ( memcmp( memoryHeaps, rhs.memoryHeaps, memoryHeapCount * sizeof( VULKAN_HPP_NAMESPACE::MemoryHeap ) ) == 0 ); + } + + bool operator!=( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t memoryTypeCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D memoryTypes = {}; + uint32_t memoryHeapCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D memoryHeaps = {}; + }; + + // wrapper struct for struct VkPhysicalDeviceMemoryProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMemoryProperties2.html + struct PhysicalDeviceMemoryProperties2 + { + using NativeType = VkPhysicalDeviceMemoryProperties2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryProperties2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties2( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryProperties{ memoryProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties2( PhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMemoryProperties2( VkPhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMemoryProperties2( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMemoryProperties2 & operator=( PhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMemoryProperties2 & operator=( VkPhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMemoryProperties2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryProperties2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryProperties2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMemoryProperties2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMemoryProperties2 const & ) const = default; +#else + bool operator==( PhysicalDeviceMemoryProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryProperties == rhs.memoryProperties ); +# endif + } + + bool operator!=( PhysicalDeviceMemoryProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMemoryProperties2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMemoryProperties2; + }; + + using PhysicalDeviceMemoryProperties2KHR = PhysicalDeviceMemoryProperties2; + + // wrapper struct for struct VkPhysicalDeviceMeshShaderFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMeshShaderFeaturesEXT.html + struct PhysicalDeviceMeshShaderFeaturesEXT + { + using NativeType = VkPhysicalDeviceMeshShaderFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMeshShaderFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMeshShaderFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 meshShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiviewMeshShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateMeshShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 meshShaderQueries_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , taskShader{ taskShader_ } + , meshShader{ meshShader_ } + , multiviewMeshShader{ multiviewMeshShader_ } + , primitiveFragmentShadingRateMeshShader{ primitiveFragmentShadingRateMeshShader_ } + , meshShaderQueries{ meshShaderQueries_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMeshShaderFeaturesEXT( PhysicalDeviceMeshShaderFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMeshShaderFeaturesEXT( VkPhysicalDeviceMeshShaderFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMeshShaderFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMeshShaderFeaturesEXT & operator=( PhysicalDeviceMeshShaderFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMeshShaderFeaturesEXT & operator=( VkPhysicalDeviceMeshShaderFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesEXT & setTaskShader( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ ) VULKAN_HPP_NOEXCEPT + { + taskShader = taskShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesEXT & setMeshShader( VULKAN_HPP_NAMESPACE::Bool32 meshShader_ ) VULKAN_HPP_NOEXCEPT + { + meshShader = meshShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesEXT & + setMultiviewMeshShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewMeshShader_ ) VULKAN_HPP_NOEXCEPT + { + multiviewMeshShader = multiviewMeshShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesEXT & + setPrimitiveFragmentShadingRateMeshShader( VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateMeshShader_ ) VULKAN_HPP_NOEXCEPT + { + primitiveFragmentShadingRateMeshShader = primitiveFragmentShadingRateMeshShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesEXT & setMeshShaderQueries( VULKAN_HPP_NAMESPACE::Bool32 meshShaderQueries_ ) VULKAN_HPP_NOEXCEPT + { + meshShaderQueries = meshShaderQueries_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMeshShaderFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, taskShader, meshShader, multiviewMeshShader, primitiveFragmentShadingRateMeshShader, meshShaderQueries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMeshShaderFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMeshShaderFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( taskShader == rhs.taskShader ) && ( meshShader == rhs.meshShader ) && + ( multiviewMeshShader == rhs.multiviewMeshShader ) && ( primitiveFragmentShadingRateMeshShader == rhs.primitiveFragmentShadingRateMeshShader ) && + ( meshShaderQueries == rhs.meshShaderQueries ); +# endif + } + + bool operator!=( PhysicalDeviceMeshShaderFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMeshShaderFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 taskShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 meshShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewMeshShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRateMeshShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 meshShaderQueries = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMeshShaderFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMeshShaderFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMeshShaderFeaturesNV.html + struct PhysicalDeviceMeshShaderFeaturesNV + { + using NativeType = VkPhysicalDeviceMeshShaderFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMeshShaderFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMeshShaderFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 meshShader_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , taskShader{ taskShader_ } + , meshShader{ meshShader_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMeshShaderFeaturesNV( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMeshShaderFeaturesNV( VkPhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMeshShaderFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMeshShaderFeaturesNV & operator=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMeshShaderFeaturesNV & operator=( VkPhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setTaskShader( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ ) VULKAN_HPP_NOEXCEPT + { + taskShader = taskShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setMeshShader( VULKAN_HPP_NAMESPACE::Bool32 meshShader_ ) VULKAN_HPP_NOEXCEPT + { + meshShader = meshShader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMeshShaderFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, taskShader, meshShader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMeshShaderFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( taskShader == rhs.taskShader ) && ( meshShader == rhs.meshShader ); +# endif + } + + bool operator!=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMeshShaderFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 taskShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 meshShader = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMeshShaderFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceMeshShaderPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMeshShaderPropertiesEXT.html + struct PhysicalDeviceMeshShaderPropertiesEXT + { + using NativeType = VkPhysicalDeviceMeshShaderPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMeshShaderPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesEXT( uint32_t maxTaskWorkGroupTotalCount_ = {}, + std::array const & maxTaskWorkGroupCount_ = {}, + uint32_t maxTaskWorkGroupInvocations_ = {}, + std::array const & maxTaskWorkGroupSize_ = {}, + uint32_t maxTaskPayloadSize_ = {}, + uint32_t maxTaskSharedMemorySize_ = {}, + uint32_t maxTaskPayloadAndSharedMemorySize_ = {}, + uint32_t maxMeshWorkGroupTotalCount_ = {}, + std::array const & maxMeshWorkGroupCount_ = {}, + uint32_t maxMeshWorkGroupInvocations_ = {}, + std::array const & maxMeshWorkGroupSize_ = {}, + uint32_t maxMeshSharedMemorySize_ = {}, + uint32_t maxMeshPayloadAndSharedMemorySize_ = {}, + uint32_t maxMeshOutputMemorySize_ = {}, + uint32_t maxMeshPayloadAndOutputMemorySize_ = {}, + uint32_t maxMeshOutputComponents_ = {}, + uint32_t maxMeshOutputVertices_ = {}, + uint32_t maxMeshOutputPrimitives_ = {}, + uint32_t maxMeshOutputLayers_ = {}, + uint32_t maxMeshMultiviewViewCount_ = {}, + uint32_t meshOutputPerVertexGranularity_ = {}, + uint32_t meshOutputPerPrimitiveGranularity_ = {}, + uint32_t maxPreferredTaskWorkGroupInvocations_ = {}, + uint32_t maxPreferredMeshWorkGroupInvocations_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersLocalInvocationVertexOutput_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersLocalInvocationPrimitiveOutput_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersCompactVertexOutput_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersCompactPrimitiveOutput_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxTaskWorkGroupTotalCount{ maxTaskWorkGroupTotalCount_ } + , maxTaskWorkGroupCount{ maxTaskWorkGroupCount_ } + , maxTaskWorkGroupInvocations{ maxTaskWorkGroupInvocations_ } + , maxTaskWorkGroupSize{ maxTaskWorkGroupSize_ } + , maxTaskPayloadSize{ maxTaskPayloadSize_ } + , maxTaskSharedMemorySize{ maxTaskSharedMemorySize_ } + , maxTaskPayloadAndSharedMemorySize{ maxTaskPayloadAndSharedMemorySize_ } + , maxMeshWorkGroupTotalCount{ maxMeshWorkGroupTotalCount_ } + , maxMeshWorkGroupCount{ maxMeshWorkGroupCount_ } + , maxMeshWorkGroupInvocations{ maxMeshWorkGroupInvocations_ } + , maxMeshWorkGroupSize{ maxMeshWorkGroupSize_ } + , maxMeshSharedMemorySize{ maxMeshSharedMemorySize_ } + , maxMeshPayloadAndSharedMemorySize{ maxMeshPayloadAndSharedMemorySize_ } + , maxMeshOutputMemorySize{ maxMeshOutputMemorySize_ } + , maxMeshPayloadAndOutputMemorySize{ maxMeshPayloadAndOutputMemorySize_ } + , maxMeshOutputComponents{ maxMeshOutputComponents_ } + , maxMeshOutputVertices{ maxMeshOutputVertices_ } + , maxMeshOutputPrimitives{ maxMeshOutputPrimitives_ } + , maxMeshOutputLayers{ maxMeshOutputLayers_ } + , maxMeshMultiviewViewCount{ maxMeshMultiviewViewCount_ } + , meshOutputPerVertexGranularity{ meshOutputPerVertexGranularity_ } + , meshOutputPerPrimitiveGranularity{ meshOutputPerPrimitiveGranularity_ } + , maxPreferredTaskWorkGroupInvocations{ maxPreferredTaskWorkGroupInvocations_ } + , maxPreferredMeshWorkGroupInvocations{ maxPreferredMeshWorkGroupInvocations_ } + , prefersLocalInvocationVertexOutput{ prefersLocalInvocationVertexOutput_ } + , prefersLocalInvocationPrimitiveOutput{ prefersLocalInvocationPrimitiveOutput_ } + , prefersCompactVertexOutput{ prefersCompactVertexOutput_ } + , prefersCompactPrimitiveOutput{ prefersCompactPrimitiveOutput_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesEXT( PhysicalDeviceMeshShaderPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMeshShaderPropertiesEXT( VkPhysicalDeviceMeshShaderPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMeshShaderPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMeshShaderPropertiesEXT & operator=( PhysicalDeviceMeshShaderPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMeshShaderPropertiesEXT & operator=( VkPhysicalDeviceMeshShaderPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMeshShaderPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxTaskWorkGroupTotalCount, + maxTaskWorkGroupCount, + maxTaskWorkGroupInvocations, + maxTaskWorkGroupSize, + maxTaskPayloadSize, + maxTaskSharedMemorySize, + maxTaskPayloadAndSharedMemorySize, + maxMeshWorkGroupTotalCount, + maxMeshWorkGroupCount, + maxMeshWorkGroupInvocations, + maxMeshWorkGroupSize, + maxMeshSharedMemorySize, + maxMeshPayloadAndSharedMemorySize, + maxMeshOutputMemorySize, + maxMeshPayloadAndOutputMemorySize, + maxMeshOutputComponents, + maxMeshOutputVertices, + maxMeshOutputPrimitives, + maxMeshOutputLayers, + maxMeshMultiviewViewCount, + meshOutputPerVertexGranularity, + meshOutputPerPrimitiveGranularity, + maxPreferredTaskWorkGroupInvocations, + maxPreferredMeshWorkGroupInvocations, + prefersLocalInvocationVertexOutput, + prefersLocalInvocationPrimitiveOutput, + prefersCompactVertexOutput, + prefersCompactPrimitiveOutput ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMeshShaderPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMeshShaderPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTaskWorkGroupTotalCount == rhs.maxTaskWorkGroupTotalCount ) && + ( maxTaskWorkGroupCount == rhs.maxTaskWorkGroupCount ) && ( maxTaskWorkGroupInvocations == rhs.maxTaskWorkGroupInvocations ) && + ( maxTaskWorkGroupSize == rhs.maxTaskWorkGroupSize ) && ( maxTaskPayloadSize == rhs.maxTaskPayloadSize ) && + ( maxTaskSharedMemorySize == rhs.maxTaskSharedMemorySize ) && ( maxTaskPayloadAndSharedMemorySize == rhs.maxTaskPayloadAndSharedMemorySize ) && + ( maxMeshWorkGroupTotalCount == rhs.maxMeshWorkGroupTotalCount ) && ( maxMeshWorkGroupCount == rhs.maxMeshWorkGroupCount ) && + ( maxMeshWorkGroupInvocations == rhs.maxMeshWorkGroupInvocations ) && ( maxMeshWorkGroupSize == rhs.maxMeshWorkGroupSize ) && + ( maxMeshSharedMemorySize == rhs.maxMeshSharedMemorySize ) && ( maxMeshPayloadAndSharedMemorySize == rhs.maxMeshPayloadAndSharedMemorySize ) && + ( maxMeshOutputMemorySize == rhs.maxMeshOutputMemorySize ) && ( maxMeshPayloadAndOutputMemorySize == rhs.maxMeshPayloadAndOutputMemorySize ) && + ( maxMeshOutputComponents == rhs.maxMeshOutputComponents ) && ( maxMeshOutputVertices == rhs.maxMeshOutputVertices ) && + ( maxMeshOutputPrimitives == rhs.maxMeshOutputPrimitives ) && ( maxMeshOutputLayers == rhs.maxMeshOutputLayers ) && + ( maxMeshMultiviewViewCount == rhs.maxMeshMultiviewViewCount ) && ( meshOutputPerVertexGranularity == rhs.meshOutputPerVertexGranularity ) && + ( meshOutputPerPrimitiveGranularity == rhs.meshOutputPerPrimitiveGranularity ) && + ( maxPreferredTaskWorkGroupInvocations == rhs.maxPreferredTaskWorkGroupInvocations ) && + ( maxPreferredMeshWorkGroupInvocations == rhs.maxPreferredMeshWorkGroupInvocations ) && + ( prefersLocalInvocationVertexOutput == rhs.prefersLocalInvocationVertexOutput ) && + ( prefersLocalInvocationPrimitiveOutput == rhs.prefersLocalInvocationPrimitiveOutput ) && + ( prefersCompactVertexOutput == rhs.prefersCompactVertexOutput ) && ( prefersCompactPrimitiveOutput == rhs.prefersCompactPrimitiveOutput ); +# endif + } + + bool operator!=( PhysicalDeviceMeshShaderPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMeshShaderPropertiesEXT; + void * pNext = {}; + uint32_t maxTaskWorkGroupTotalCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxTaskWorkGroupCount = {}; + uint32_t maxTaskWorkGroupInvocations = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxTaskWorkGroupSize = {}; + uint32_t maxTaskPayloadSize = {}; + uint32_t maxTaskSharedMemorySize = {}; + uint32_t maxTaskPayloadAndSharedMemorySize = {}; + uint32_t maxMeshWorkGroupTotalCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxMeshWorkGroupCount = {}; + uint32_t maxMeshWorkGroupInvocations = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxMeshWorkGroupSize = {}; + uint32_t maxMeshSharedMemorySize = {}; + uint32_t maxMeshPayloadAndSharedMemorySize = {}; + uint32_t maxMeshOutputMemorySize = {}; + uint32_t maxMeshPayloadAndOutputMemorySize = {}; + uint32_t maxMeshOutputComponents = {}; + uint32_t maxMeshOutputVertices = {}; + uint32_t maxMeshOutputPrimitives = {}; + uint32_t maxMeshOutputLayers = {}; + uint32_t maxMeshMultiviewViewCount = {}; + uint32_t meshOutputPerVertexGranularity = {}; + uint32_t meshOutputPerPrimitiveGranularity = {}; + uint32_t maxPreferredTaskWorkGroupInvocations = {}; + uint32_t maxPreferredMeshWorkGroupInvocations = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersLocalInvocationVertexOutput = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersLocalInvocationPrimitiveOutput = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersCompactVertexOutput = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersCompactPrimitiveOutput = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMeshShaderPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMeshShaderPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMeshShaderPropertiesNV.html + struct PhysicalDeviceMeshShaderPropertiesNV + { + using NativeType = VkPhysicalDeviceMeshShaderPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMeshShaderPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesNV( uint32_t maxDrawMeshTasksCount_ = {}, + uint32_t maxTaskWorkGroupInvocations_ = {}, + std::array const & maxTaskWorkGroupSize_ = {}, + uint32_t maxTaskTotalMemorySize_ = {}, + uint32_t maxTaskOutputCount_ = {}, + uint32_t maxMeshWorkGroupInvocations_ = {}, + std::array const & maxMeshWorkGroupSize_ = {}, + uint32_t maxMeshTotalMemorySize_ = {}, + uint32_t maxMeshOutputVertices_ = {}, + uint32_t maxMeshOutputPrimitives_ = {}, + uint32_t maxMeshMultiviewViewCount_ = {}, + uint32_t meshOutputPerVertexGranularity_ = {}, + uint32_t meshOutputPerPrimitiveGranularity_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxDrawMeshTasksCount{ maxDrawMeshTasksCount_ } + , maxTaskWorkGroupInvocations{ maxTaskWorkGroupInvocations_ } + , maxTaskWorkGroupSize{ maxTaskWorkGroupSize_ } + , maxTaskTotalMemorySize{ maxTaskTotalMemorySize_ } + , maxTaskOutputCount{ maxTaskOutputCount_ } + , maxMeshWorkGroupInvocations{ maxMeshWorkGroupInvocations_ } + , maxMeshWorkGroupSize{ maxMeshWorkGroupSize_ } + , maxMeshTotalMemorySize{ maxMeshTotalMemorySize_ } + , maxMeshOutputVertices{ maxMeshOutputVertices_ } + , maxMeshOutputPrimitives{ maxMeshOutputPrimitives_ } + , maxMeshMultiviewViewCount{ maxMeshMultiviewViewCount_ } + , meshOutputPerVertexGranularity{ meshOutputPerVertexGranularity_ } + , meshOutputPerPrimitiveGranularity{ meshOutputPerPrimitiveGranularity_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesNV( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMeshShaderPropertiesNV( VkPhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMeshShaderPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMeshShaderPropertiesNV & operator=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMeshShaderPropertiesNV & operator=( VkPhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMeshShaderPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMeshShaderPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxDrawMeshTasksCount, + maxTaskWorkGroupInvocations, + maxTaskWorkGroupSize, + maxTaskTotalMemorySize, + maxTaskOutputCount, + maxMeshWorkGroupInvocations, + maxMeshWorkGroupSize, + maxMeshTotalMemorySize, + maxMeshOutputVertices, + maxMeshOutputPrimitives, + maxMeshMultiviewViewCount, + meshOutputPerVertexGranularity, + meshOutputPerPrimitiveGranularity ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMeshShaderPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxDrawMeshTasksCount == rhs.maxDrawMeshTasksCount ) && + ( maxTaskWorkGroupInvocations == rhs.maxTaskWorkGroupInvocations ) && ( maxTaskWorkGroupSize == rhs.maxTaskWorkGroupSize ) && + ( maxTaskTotalMemorySize == rhs.maxTaskTotalMemorySize ) && ( maxTaskOutputCount == rhs.maxTaskOutputCount ) && + ( maxMeshWorkGroupInvocations == rhs.maxMeshWorkGroupInvocations ) && ( maxMeshWorkGroupSize == rhs.maxMeshWorkGroupSize ) && + ( maxMeshTotalMemorySize == rhs.maxMeshTotalMemorySize ) && ( maxMeshOutputVertices == rhs.maxMeshOutputVertices ) && + ( maxMeshOutputPrimitives == rhs.maxMeshOutputPrimitives ) && ( maxMeshMultiviewViewCount == rhs.maxMeshMultiviewViewCount ) && + ( meshOutputPerVertexGranularity == rhs.meshOutputPerVertexGranularity ) && + ( meshOutputPerPrimitiveGranularity == rhs.meshOutputPerPrimitiveGranularity ); +# endif + } + + bool operator!=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMeshShaderPropertiesNV; + void * pNext = {}; + uint32_t maxDrawMeshTasksCount = {}; + uint32_t maxTaskWorkGroupInvocations = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxTaskWorkGroupSize = {}; + uint32_t maxTaskTotalMemorySize = {}; + uint32_t maxTaskOutputCount = {}; + uint32_t maxMeshWorkGroupInvocations = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxMeshWorkGroupSize = {}; + uint32_t maxMeshTotalMemorySize = {}; + uint32_t maxMeshOutputVertices = {}; + uint32_t maxMeshOutputPrimitives = {}; + uint32_t maxMeshMultiviewViewCount = {}; + uint32_t meshOutputPerVertexGranularity = {}; + uint32_t meshOutputPerPrimitiveGranularity = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMeshShaderPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceMultiDrawFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiDrawFeaturesEXT.html + struct PhysicalDeviceMultiDrawFeaturesEXT + { + using NativeType = VkPhysicalDeviceMultiDrawFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiDrawFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 multiDraw_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , multiDraw{ multiDraw_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawFeaturesEXT( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiDrawFeaturesEXT( VkPhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiDrawFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiDrawFeaturesEXT & operator=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiDrawFeaturesEXT & operator=( VkPhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT & setMultiDraw( VULKAN_HPP_NAMESPACE::Bool32 multiDraw_ ) VULKAN_HPP_NOEXCEPT + { + multiDraw = multiDraw_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMultiDrawFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiDrawFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiDrawFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiDrawFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, multiDraw ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiDrawFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiDraw == rhs.multiDraw ); +# endif + } + + bool operator!=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiDrawFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiDraw = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiDrawFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMultiDrawPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiDrawPropertiesEXT.html + struct PhysicalDeviceMultiDrawPropertiesEXT + { + using NativeType = VkPhysicalDeviceMultiDrawPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiDrawPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawPropertiesEXT( uint32_t maxMultiDrawCount_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxMultiDrawCount{ maxMultiDrawCount_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiDrawPropertiesEXT( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiDrawPropertiesEXT( VkPhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiDrawPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiDrawPropertiesEXT & operator=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiDrawPropertiesEXT & operator=( VkPhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMultiDrawPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiDrawPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiDrawPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiDrawPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxMultiDrawCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiDrawPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxMultiDrawCount == rhs.maxMultiDrawCount ); +# endif + } + + bool operator!=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiDrawPropertiesEXT; + void * pNext = {}; + uint32_t maxMultiDrawCount = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiDrawPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.html + struct PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT + { + using NativeType = VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampled_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , multisampledRenderToSingleSampled{ multisampledRenderToSingleSampled_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & + operator=( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & + operator=( VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT & + setMultisampledRenderToSingleSampled( VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampled_ ) VULKAN_HPP_NOEXCEPT + { + multisampledRenderToSingleSampled = multisampledRenderToSingleSampled_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, multisampledRenderToSingleSampled ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multisampledRenderToSingleSampled == rhs.multisampledRenderToSingleSampled ); +# endif + } + + bool operator!=( PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 multisampledRenderToSingleSampled = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceMultiviewFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiviewFeatures.html + struct PhysicalDeviceMultiviewFeatures + { + using NativeType = VkPhysicalDeviceMultiviewFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewFeatures( VULKAN_HPP_NAMESPACE::Bool32 multiview_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , multiview{ multiview_ } + , multiviewGeometryShader{ multiviewGeometryShader_ } + , multiviewTessellationShader{ multiviewTessellationShader_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewFeatures( PhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiviewFeatures( VkPhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiviewFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiviewFeatures & operator=( PhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiviewFeatures & operator=( VkPhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT + { + multiview = multiview_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & + setMultiviewGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ ) VULKAN_HPP_NOEXCEPT + { + multiviewGeometryShader = multiviewGeometryShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & + setMultiviewTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ ) VULKAN_HPP_NOEXCEPT + { + multiviewTessellationShader = multiviewTessellationShader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMultiviewFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, multiview, multiviewGeometryShader, multiviewTessellationShader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiviewFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiviewFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiview == rhs.multiview ) && ( multiviewGeometryShader == rhs.multiviewGeometryShader ) && + ( multiviewTessellationShader == rhs.multiviewTessellationShader ); +# endif + } + + bool operator!=( PhysicalDeviceMultiviewFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiview = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiviewFeatures; + }; + + using PhysicalDeviceMultiviewFeaturesKHR = PhysicalDeviceMultiviewFeatures; + + // wrapper struct for struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.html + struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX + { + using NativeType = VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( VULKAN_HPP_NAMESPACE::Bool32 perViewPositionAllComponents_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , perViewPositionAllComponents{ perViewPositionAllComponents_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX & + operator=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX & operator=( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, perViewPositionAllComponents ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perViewPositionAllComponents == rhs.perViewPositionAllComponents ); +# endif + } + + bool operator!=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 perViewPositionAllComponents = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; + }; + + // wrapper struct for struct VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.html + struct PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM + { + using NativeType = VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 multiviewPerViewRenderAreas_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , multiviewPerViewRenderAreas{ multiviewPerViewRenderAreas_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM( PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM( VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM & + operator=( PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM & operator=( VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM & + setMultiviewPerViewRenderAreas( VULKAN_HPP_NAMESPACE::Bool32 multiviewPerViewRenderAreas_ ) VULKAN_HPP_NOEXCEPT + { + multiviewPerViewRenderAreas = multiviewPerViewRenderAreas_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, multiviewPerViewRenderAreas ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiviewPerViewRenderAreas == rhs.multiviewPerViewRenderAreas ); +# endif + } + + bool operator!=( PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewPerViewRenderAreas = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM.html + struct PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM + { + using NativeType = VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 multiviewPerViewViewports_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , multiviewPerViewViewports{ multiviewPerViewViewports_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM( PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM( VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM & + operator=( PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM & operator=( VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM & + setMultiviewPerViewViewports( VULKAN_HPP_NAMESPACE::Bool32 multiviewPerViewViewports_ ) VULKAN_HPP_NOEXCEPT + { + multiviewPerViewViewports = multiviewPerViewViewports_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, multiviewPerViewViewports ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiviewPerViewViewports == rhs.multiviewPerViewViewports ); +# endif + } + + bool operator!=( PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewPerViewViewports = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceMultiviewProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMultiviewProperties.html + struct PhysicalDeviceMultiviewProperties + { + using NativeType = VkPhysicalDeviceMultiviewProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewProperties( uint32_t maxMultiviewViewCount_ = {}, + uint32_t maxMultiviewInstanceIndex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxMultiviewViewCount{ maxMultiviewViewCount_ } + , maxMultiviewInstanceIndex{ maxMultiviewInstanceIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewProperties( PhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMultiviewProperties( VkPhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMultiviewProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMultiviewProperties & operator=( PhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMultiviewProperties & operator=( VkPhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceMultiviewProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMultiviewProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxMultiviewViewCount, maxMultiviewInstanceIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMultiviewProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceMultiviewProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxMultiviewViewCount == rhs.maxMultiviewViewCount ) && + ( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex ); +# endif + } + + bool operator!=( PhysicalDeviceMultiviewProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMultiviewProperties; + void * pNext = {}; + uint32_t maxMultiviewViewCount = {}; + uint32_t maxMultiviewInstanceIndex = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMultiviewProperties; + }; + + using PhysicalDeviceMultiviewPropertiesKHR = PhysicalDeviceMultiviewProperties; + + // wrapper struct for struct VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT.html + struct PhysicalDeviceMutableDescriptorTypeFeaturesEXT + { + using NativeType = VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceMutableDescriptorTypeFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , mutableDescriptorType{ mutableDescriptorType_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceMutableDescriptorTypeFeaturesEXT( PhysicalDeviceMutableDescriptorTypeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceMutableDescriptorTypeFeaturesEXT( VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceMutableDescriptorTypeFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceMutableDescriptorTypeFeaturesEXT & operator=( PhysicalDeviceMutableDescriptorTypeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceMutableDescriptorTypeFeaturesEXT & operator=( VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesEXT & + setMutableDescriptorType( VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType_ ) VULKAN_HPP_NOEXCEPT + { + mutableDescriptorType = mutableDescriptorType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, mutableDescriptorType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceMutableDescriptorTypeFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceMutableDescriptorTypeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mutableDescriptorType == rhs.mutableDescriptorType ); +# endif + } + + bool operator!=( PhysicalDeviceMutableDescriptorTypeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceMutableDescriptorTypeFeaturesEXT; + }; + + using PhysicalDeviceMutableDescriptorTypeFeaturesVALVE = PhysicalDeviceMutableDescriptorTypeFeaturesEXT; + + // wrapper struct for struct VkPhysicalDeviceNestedCommandBufferFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceNestedCommandBufferFeaturesEXT.html + struct PhysicalDeviceNestedCommandBufferFeaturesEXT + { + using NativeType = VkPhysicalDeviceNestedCommandBufferFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceNestedCommandBufferFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceNestedCommandBufferFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBufferRendering_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBufferSimultaneousUse_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , nestedCommandBuffer{ nestedCommandBuffer_ } + , nestedCommandBufferRendering{ nestedCommandBufferRendering_ } + , nestedCommandBufferSimultaneousUse{ nestedCommandBufferSimultaneousUse_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceNestedCommandBufferFeaturesEXT( PhysicalDeviceNestedCommandBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceNestedCommandBufferFeaturesEXT( VkPhysicalDeviceNestedCommandBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceNestedCommandBufferFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceNestedCommandBufferFeaturesEXT & operator=( PhysicalDeviceNestedCommandBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceNestedCommandBufferFeaturesEXT & operator=( VkPhysicalDeviceNestedCommandBufferFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNestedCommandBufferFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNestedCommandBufferFeaturesEXT & + setNestedCommandBuffer( VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBuffer_ ) VULKAN_HPP_NOEXCEPT + { + nestedCommandBuffer = nestedCommandBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNestedCommandBufferFeaturesEXT & + setNestedCommandBufferRendering( VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBufferRendering_ ) VULKAN_HPP_NOEXCEPT + { + nestedCommandBufferRendering = nestedCommandBufferRendering_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNestedCommandBufferFeaturesEXT & + setNestedCommandBufferSimultaneousUse( VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBufferSimultaneousUse_ ) VULKAN_HPP_NOEXCEPT + { + nestedCommandBufferSimultaneousUse = nestedCommandBufferSimultaneousUse_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceNestedCommandBufferFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNestedCommandBufferFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNestedCommandBufferFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNestedCommandBufferFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, nestedCommandBuffer, nestedCommandBufferRendering, nestedCommandBufferSimultaneousUse ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceNestedCommandBufferFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceNestedCommandBufferFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( nestedCommandBuffer == rhs.nestedCommandBuffer ) && + ( nestedCommandBufferRendering == rhs.nestedCommandBufferRendering ) && + ( nestedCommandBufferSimultaneousUse == rhs.nestedCommandBufferSimultaneousUse ); +# endif + } + + bool operator!=( PhysicalDeviceNestedCommandBufferFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceNestedCommandBufferFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBufferRendering = {}; + VULKAN_HPP_NAMESPACE::Bool32 nestedCommandBufferSimultaneousUse = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceNestedCommandBufferFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceNestedCommandBufferPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceNestedCommandBufferPropertiesEXT.html + struct PhysicalDeviceNestedCommandBufferPropertiesEXT + { + using NativeType = VkPhysicalDeviceNestedCommandBufferPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceNestedCommandBufferPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceNestedCommandBufferPropertiesEXT( uint32_t maxCommandBufferNestingLevel_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxCommandBufferNestingLevel{ maxCommandBufferNestingLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceNestedCommandBufferPropertiesEXT( PhysicalDeviceNestedCommandBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceNestedCommandBufferPropertiesEXT( VkPhysicalDeviceNestedCommandBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceNestedCommandBufferPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceNestedCommandBufferPropertiesEXT & operator=( PhysicalDeviceNestedCommandBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceNestedCommandBufferPropertiesEXT & operator=( VkPhysicalDeviceNestedCommandBufferPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceNestedCommandBufferPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNestedCommandBufferPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNestedCommandBufferPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNestedCommandBufferPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxCommandBufferNestingLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceNestedCommandBufferPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceNestedCommandBufferPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxCommandBufferNestingLevel == rhs.maxCommandBufferNestingLevel ); +# endif + } + + bool operator!=( PhysicalDeviceNestedCommandBufferPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceNestedCommandBufferPropertiesEXT; + void * pNext = {}; + uint32_t maxCommandBufferNestingLevel = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceNestedCommandBufferPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT.html + struct PhysicalDeviceNonSeamlessCubeMapFeaturesEXT + { + using NativeType = VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 nonSeamlessCubeMap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , nonSeamlessCubeMap{ nonSeamlessCubeMap_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceNonSeamlessCubeMapFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & operator=( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & operator=( VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceNonSeamlessCubeMapFeaturesEXT & + setNonSeamlessCubeMap( VULKAN_HPP_NAMESPACE::Bool32 nonSeamlessCubeMap_ ) VULKAN_HPP_NOEXCEPT + { + nonSeamlessCubeMap = nonSeamlessCubeMap_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, nonSeamlessCubeMap ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( nonSeamlessCubeMap == rhs.nonSeamlessCubeMap ); +# endif + } + + bool operator!=( PhysicalDeviceNonSeamlessCubeMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 nonSeamlessCubeMap = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceNonSeamlessCubeMapFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceOpacityMicromapFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceOpacityMicromapFeaturesEXT.html + struct PhysicalDeviceOpacityMicromapFeaturesEXT + { + using NativeType = VkPhysicalDeviceOpacityMicromapFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceOpacityMicromapFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpacityMicromapFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 micromap_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 micromapCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 micromapHostCommands_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , micromap{ micromap_ } + , micromapCaptureReplay{ micromapCaptureReplay_ } + , micromapHostCommands{ micromapHostCommands_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpacityMicromapFeaturesEXT( PhysicalDeviceOpacityMicromapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceOpacityMicromapFeaturesEXT( VkPhysicalDeviceOpacityMicromapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceOpacityMicromapFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceOpacityMicromapFeaturesEXT & operator=( PhysicalDeviceOpacityMicromapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceOpacityMicromapFeaturesEXT & operator=( VkPhysicalDeviceOpacityMicromapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceOpacityMicromapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceOpacityMicromapFeaturesEXT & setMicromap( VULKAN_HPP_NAMESPACE::Bool32 micromap_ ) VULKAN_HPP_NOEXCEPT + { + micromap = micromap_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceOpacityMicromapFeaturesEXT & + setMicromapCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 micromapCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + micromapCaptureReplay = micromapCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceOpacityMicromapFeaturesEXT & + setMicromapHostCommands( VULKAN_HPP_NAMESPACE::Bool32 micromapHostCommands_ ) VULKAN_HPP_NOEXCEPT + { + micromapHostCommands = micromapHostCommands_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceOpacityMicromapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpacityMicromapFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpacityMicromapFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpacityMicromapFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, micromap, micromapCaptureReplay, micromapHostCommands ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceOpacityMicromapFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceOpacityMicromapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( micromap == rhs.micromap ) && ( micromapCaptureReplay == rhs.micromapCaptureReplay ) && + ( micromapHostCommands == rhs.micromapHostCommands ); +# endif + } + + bool operator!=( PhysicalDeviceOpacityMicromapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceOpacityMicromapFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 micromap = {}; + VULKAN_HPP_NAMESPACE::Bool32 micromapCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 micromapHostCommands = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceOpacityMicromapFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceOpacityMicromapPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceOpacityMicromapPropertiesEXT.html + struct PhysicalDeviceOpacityMicromapPropertiesEXT + { + using NativeType = VkPhysicalDeviceOpacityMicromapPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceOpacityMicromapPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpacityMicromapPropertiesEXT( uint32_t maxOpacity2StateSubdivisionLevel_ = {}, + uint32_t maxOpacity4StateSubdivisionLevel_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxOpacity2StateSubdivisionLevel{ maxOpacity2StateSubdivisionLevel_ } + , maxOpacity4StateSubdivisionLevel{ maxOpacity4StateSubdivisionLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpacityMicromapPropertiesEXT( PhysicalDeviceOpacityMicromapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceOpacityMicromapPropertiesEXT( VkPhysicalDeviceOpacityMicromapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceOpacityMicromapPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceOpacityMicromapPropertiesEXT & operator=( PhysicalDeviceOpacityMicromapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceOpacityMicromapPropertiesEXT & operator=( VkPhysicalDeviceOpacityMicromapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceOpacityMicromapPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpacityMicromapPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpacityMicromapPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpacityMicromapPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxOpacity2StateSubdivisionLevel, maxOpacity4StateSubdivisionLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceOpacityMicromapPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceOpacityMicromapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxOpacity2StateSubdivisionLevel == rhs.maxOpacity2StateSubdivisionLevel ) && + ( maxOpacity4StateSubdivisionLevel == rhs.maxOpacity4StateSubdivisionLevel ); +# endif + } + + bool operator!=( PhysicalDeviceOpacityMicromapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceOpacityMicromapPropertiesEXT; + void * pNext = {}; + uint32_t maxOpacity2StateSubdivisionLevel = {}; + uint32_t maxOpacity4StateSubdivisionLevel = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceOpacityMicromapPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceOpticalFlowFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceOpticalFlowFeaturesNV.html + struct PhysicalDeviceOpticalFlowFeaturesNV + { + using NativeType = VkPhysicalDeviceOpticalFlowFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceOpticalFlowFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpticalFlowFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 opticalFlow_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , opticalFlow{ opticalFlow_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpticalFlowFeaturesNV( PhysicalDeviceOpticalFlowFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceOpticalFlowFeaturesNV( VkPhysicalDeviceOpticalFlowFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceOpticalFlowFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceOpticalFlowFeaturesNV & operator=( PhysicalDeviceOpticalFlowFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceOpticalFlowFeaturesNV & operator=( VkPhysicalDeviceOpticalFlowFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceOpticalFlowFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceOpticalFlowFeaturesNV & setOpticalFlow( VULKAN_HPP_NAMESPACE::Bool32 opticalFlow_ ) VULKAN_HPP_NOEXCEPT + { + opticalFlow = opticalFlow_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceOpticalFlowFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpticalFlowFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpticalFlowFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpticalFlowFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, opticalFlow ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceOpticalFlowFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceOpticalFlowFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opticalFlow == rhs.opticalFlow ); +# endif + } + + bool operator!=( PhysicalDeviceOpticalFlowFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceOpticalFlowFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 opticalFlow = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceOpticalFlowFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceOpticalFlowPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceOpticalFlowPropertiesNV.html + struct PhysicalDeviceOpticalFlowPropertiesNV + { + using NativeType = VkPhysicalDeviceOpticalFlowPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceOpticalFlowPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpticalFlowPropertiesNV( VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV supportedOutputGridSizes_ = {}, + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV supportedHintGridSizes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hintSupported_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 costSupported_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bidirectionalFlowSupported_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 globalFlowSupported_ = {}, + uint32_t minWidth_ = {}, + uint32_t minHeight_ = {}, + uint32_t maxWidth_ = {}, + uint32_t maxHeight_ = {}, + uint32_t maxNumRegionsOfInterest_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportedOutputGridSizes{ supportedOutputGridSizes_ } + , supportedHintGridSizes{ supportedHintGridSizes_ } + , hintSupported{ hintSupported_ } + , costSupported{ costSupported_ } + , bidirectionalFlowSupported{ bidirectionalFlowSupported_ } + , globalFlowSupported{ globalFlowSupported_ } + , minWidth{ minWidth_ } + , minHeight{ minHeight_ } + , maxWidth{ maxWidth_ } + , maxHeight{ maxHeight_ } + , maxNumRegionsOfInterest{ maxNumRegionsOfInterest_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceOpticalFlowPropertiesNV( PhysicalDeviceOpticalFlowPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceOpticalFlowPropertiesNV( VkPhysicalDeviceOpticalFlowPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceOpticalFlowPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceOpticalFlowPropertiesNV & operator=( PhysicalDeviceOpticalFlowPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceOpticalFlowPropertiesNV & operator=( VkPhysicalDeviceOpticalFlowPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceOpticalFlowPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpticalFlowPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpticalFlowPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceOpticalFlowPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + supportedOutputGridSizes, + supportedHintGridSizes, + hintSupported, + costSupported, + bidirectionalFlowSupported, + globalFlowSupported, + minWidth, + minHeight, + maxWidth, + maxHeight, + maxNumRegionsOfInterest ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceOpticalFlowPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceOpticalFlowPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportedOutputGridSizes == rhs.supportedOutputGridSizes ) && + ( supportedHintGridSizes == rhs.supportedHintGridSizes ) && ( hintSupported == rhs.hintSupported ) && ( costSupported == rhs.costSupported ) && + ( bidirectionalFlowSupported == rhs.bidirectionalFlowSupported ) && ( globalFlowSupported == rhs.globalFlowSupported ) && + ( minWidth == rhs.minWidth ) && ( minHeight == rhs.minHeight ) && ( maxWidth == rhs.maxWidth ) && ( maxHeight == rhs.maxHeight ) && + ( maxNumRegionsOfInterest == rhs.maxNumRegionsOfInterest ); +# endif + } + + bool operator!=( PhysicalDeviceOpticalFlowPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceOpticalFlowPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV supportedOutputGridSizes = {}; + VULKAN_HPP_NAMESPACE::OpticalFlowGridSizeFlagsNV supportedHintGridSizes = {}; + VULKAN_HPP_NAMESPACE::Bool32 hintSupported = {}; + VULKAN_HPP_NAMESPACE::Bool32 costSupported = {}; + VULKAN_HPP_NAMESPACE::Bool32 bidirectionalFlowSupported = {}; + VULKAN_HPP_NAMESPACE::Bool32 globalFlowSupported = {}; + uint32_t minWidth = {}; + uint32_t minHeight = {}; + uint32_t maxWidth = {}; + uint32_t maxHeight = {}; + uint32_t maxNumRegionsOfInterest = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceOpticalFlowPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDevicePCIBusInfoPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePCIBusInfoPropertiesEXT.html + struct PhysicalDevicePCIBusInfoPropertiesEXT + { + using NativeType = VkPhysicalDevicePCIBusInfoPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePciBusInfoPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePCIBusInfoPropertiesEXT( + uint32_t pciDomain_ = {}, uint32_t pciBus_ = {}, uint32_t pciDevice_ = {}, uint32_t pciFunction_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pciDomain{ pciDomain_ } + , pciBus{ pciBus_ } + , pciDevice{ pciDevice_ } + , pciFunction{ pciFunction_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePCIBusInfoPropertiesEXT( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePCIBusInfoPropertiesEXT( VkPhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePCIBusInfoPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePCIBusInfoPropertiesEXT & operator=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePCIBusInfoPropertiesEXT & operator=( VkPhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePCIBusInfoPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePCIBusInfoPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePCIBusInfoPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePCIBusInfoPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pciDomain, pciBus, pciDevice, pciFunction ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePCIBusInfoPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pciDomain == rhs.pciDomain ) && ( pciBus == rhs.pciBus ) && ( pciDevice == rhs.pciDevice ) && + ( pciFunction == rhs.pciFunction ); +# endif + } + + bool operator!=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePciBusInfoPropertiesEXT; + void * pNext = {}; + uint32_t pciDomain = {}; + uint32_t pciBus = {}; + uint32_t pciDevice = {}; + uint32_t pciFunction = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePCIBusInfoPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.html + struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT + { + using NativeType = VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pageableDeviceLocalMemory{ pageableDeviceLocalMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & + operator=( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & operator=( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT & + setPageableDeviceLocalMemory( VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory_ ) VULKAN_HPP_NOEXCEPT + { + pageableDeviceLocalMemory = pageableDeviceLocalMemory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pageableDeviceLocalMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pageableDeviceLocalMemory == rhs.pageableDeviceLocalMemory ); +# endif + } + + bool operator!=( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV.html + struct PhysicalDevicePartitionedAccelerationStructureFeaturesNV + { + using NativeType = VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePartitionedAccelerationStructureFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePartitionedAccelerationStructureFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 partitionedAccelerationStructure_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , partitionedAccelerationStructure{ partitionedAccelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePartitionedAccelerationStructureFeaturesNV( PhysicalDevicePartitionedAccelerationStructureFeaturesNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePartitionedAccelerationStructureFeaturesNV( VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePartitionedAccelerationStructureFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePartitionedAccelerationStructureFeaturesNV & + operator=( PhysicalDevicePartitionedAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePartitionedAccelerationStructureFeaturesNV & + operator=( VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePartitionedAccelerationStructureFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePartitionedAccelerationStructureFeaturesNV & + setPartitionedAccelerationStructure( VULKAN_HPP_NAMESPACE::Bool32 partitionedAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + partitionedAccelerationStructure = partitionedAccelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, partitionedAccelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePartitionedAccelerationStructureFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDevicePartitionedAccelerationStructureFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( partitionedAccelerationStructure == rhs.partitionedAccelerationStructure ); +# endif + } + + bool operator!=( PhysicalDevicePartitionedAccelerationStructureFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePartitionedAccelerationStructureFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 partitionedAccelerationStructure = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePartitionedAccelerationStructureFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV.html + struct PhysicalDevicePartitionedAccelerationStructurePropertiesNV + { + using NativeType = VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePartitionedAccelerationStructurePropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePartitionedAccelerationStructurePropertiesNV( uint32_t maxPartitionCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxPartitionCount{ maxPartitionCount_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePartitionedAccelerationStructurePropertiesNV( PhysicalDevicePartitionedAccelerationStructurePropertiesNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePartitionedAccelerationStructurePropertiesNV( VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePartitionedAccelerationStructurePropertiesNV( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePartitionedAccelerationStructurePropertiesNV & + operator=( PhysicalDevicePartitionedAccelerationStructurePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePartitionedAccelerationStructurePropertiesNV & + operator=( VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxPartitionCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePartitionedAccelerationStructurePropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDevicePartitionedAccelerationStructurePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPartitionCount == rhs.maxPartitionCount ); +# endif + } + + bool operator!=( PhysicalDevicePartitionedAccelerationStructurePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePartitionedAccelerationStructurePropertiesNV; + void * pNext = {}; + uint32_t maxPartitionCount = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePartitionedAccelerationStructurePropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDevicePerStageDescriptorSetFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePerStageDescriptorSetFeaturesNV.html + struct PhysicalDevicePerStageDescriptorSetFeaturesNV + { + using NativeType = VkPhysicalDevicePerStageDescriptorSetFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePerStageDescriptorSetFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePerStageDescriptorSetFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 perStageDescriptorSet_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dynamicPipelineLayout_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , perStageDescriptorSet{ perStageDescriptorSet_ } + , dynamicPipelineLayout{ dynamicPipelineLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePerStageDescriptorSetFeaturesNV( PhysicalDevicePerStageDescriptorSetFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePerStageDescriptorSetFeaturesNV( VkPhysicalDevicePerStageDescriptorSetFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePerStageDescriptorSetFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePerStageDescriptorSetFeaturesNV & operator=( PhysicalDevicePerStageDescriptorSetFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePerStageDescriptorSetFeaturesNV & operator=( VkPhysicalDevicePerStageDescriptorSetFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerStageDescriptorSetFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerStageDescriptorSetFeaturesNV & + setPerStageDescriptorSet( VULKAN_HPP_NAMESPACE::Bool32 perStageDescriptorSet_ ) VULKAN_HPP_NOEXCEPT + { + perStageDescriptorSet = perStageDescriptorSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerStageDescriptorSetFeaturesNV & + setDynamicPipelineLayout( VULKAN_HPP_NAMESPACE::Bool32 dynamicPipelineLayout_ ) VULKAN_HPP_NOEXCEPT + { + dynamicPipelineLayout = dynamicPipelineLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePerStageDescriptorSetFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerStageDescriptorSetFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerStageDescriptorSetFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerStageDescriptorSetFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, perStageDescriptorSet, dynamicPipelineLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePerStageDescriptorSetFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDevicePerStageDescriptorSetFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perStageDescriptorSet == rhs.perStageDescriptorSet ) && + ( dynamicPipelineLayout == rhs.dynamicPipelineLayout ); +# endif + } + + bool operator!=( PhysicalDevicePerStageDescriptorSetFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePerStageDescriptorSetFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 perStageDescriptorSet = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicPipelineLayout = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePerStageDescriptorSetFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDevicePerformanceQueryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePerformanceQueryFeaturesKHR.html + struct PhysicalDevicePerformanceQueryFeaturesKHR + { + using NativeType = VkPhysicalDevicePerformanceQueryFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , performanceCounterQueryPools{ performanceCounterQueryPools_ } + , performanceCounterMultipleQueryPools{ performanceCounterMultipleQueryPools_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryFeaturesKHR( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePerformanceQueryFeaturesKHR( VkPhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePerformanceQueryFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePerformanceQueryFeaturesKHR & operator=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePerformanceQueryFeaturesKHR & operator=( VkPhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & + setPerformanceCounterQueryPools( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools_ ) VULKAN_HPP_NOEXCEPT + { + performanceCounterQueryPools = performanceCounterQueryPools_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & + setPerformanceCounterMultipleQueryPools( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools_ ) VULKAN_HPP_NOEXCEPT + { + performanceCounterMultipleQueryPools = performanceCounterMultipleQueryPools_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePerformanceQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerformanceQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerformanceQueryFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerformanceQueryFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, performanceCounterQueryPools, performanceCounterMultipleQueryPools ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePerformanceQueryFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( performanceCounterQueryPools == rhs.performanceCounterQueryPools ) && + ( performanceCounterMultipleQueryPools == rhs.performanceCounterMultipleQueryPools ); +# endif + } + + bool operator!=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools = {}; + VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePerformanceQueryFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePerformanceQueryPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePerformanceQueryPropertiesKHR.html + struct PhysicalDevicePerformanceQueryPropertiesKHR + { + using NativeType = VkPhysicalDevicePerformanceQueryPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 allowCommandBufferQueryCopies_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , allowCommandBufferQueryCopies{ allowCommandBufferQueryCopies_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePerformanceQueryPropertiesKHR( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePerformanceQueryPropertiesKHR( VkPhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePerformanceQueryPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePerformanceQueryPropertiesKHR & operator=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePerformanceQueryPropertiesKHR & operator=( VkPhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePerformanceQueryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerformanceQueryPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerformanceQueryPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePerformanceQueryPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, allowCommandBufferQueryCopies ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePerformanceQueryPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allowCommandBufferQueryCopies == rhs.allowCommandBufferQueryCopies ); +# endif + } + + bool operator!=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 allowCommandBufferQueryCopies = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePerformanceQueryPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineBinaryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineBinaryFeaturesKHR.html + struct PhysicalDevicePipelineBinaryFeaturesKHR + { + using NativeType = VkPhysicalDevicePipelineBinaryFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineBinaryFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineBinaryFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaries_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBinaries{ pipelineBinaries_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineBinaryFeaturesKHR( PhysicalDevicePipelineBinaryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineBinaryFeaturesKHR( VkPhysicalDevicePipelineBinaryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineBinaryFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineBinaryFeaturesKHR & operator=( PhysicalDevicePipelineBinaryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineBinaryFeaturesKHR & operator=( VkPhysicalDevicePipelineBinaryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineBinaryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineBinaryFeaturesKHR & setPipelineBinaries( VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaries_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBinaries = pipelineBinaries_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineBinaryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineBinaryFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineBinaryFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineBinaryFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineBinaries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineBinaryFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineBinaryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBinaries == rhs.pipelineBinaries ); +# endif + } + + bool operator!=( PhysicalDevicePipelineBinaryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineBinaryFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaries = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineBinaryFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineBinaryPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineBinaryPropertiesKHR.html + struct PhysicalDevicePipelineBinaryPropertiesKHR + { + using NativeType = VkPhysicalDevicePipelineBinaryPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineBinaryPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineBinaryPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryInternalCache_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryInternalCacheControl_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryPrefersInternalCache_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryPrecompiledInternalCache_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryCompressedData_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBinaryInternalCache{ pipelineBinaryInternalCache_ } + , pipelineBinaryInternalCacheControl{ pipelineBinaryInternalCacheControl_ } + , pipelineBinaryPrefersInternalCache{ pipelineBinaryPrefersInternalCache_ } + , pipelineBinaryPrecompiledInternalCache{ pipelineBinaryPrecompiledInternalCache_ } + , pipelineBinaryCompressedData{ pipelineBinaryCompressedData_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineBinaryPropertiesKHR( PhysicalDevicePipelineBinaryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineBinaryPropertiesKHR( VkPhysicalDevicePipelineBinaryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineBinaryPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineBinaryPropertiesKHR & operator=( PhysicalDevicePipelineBinaryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineBinaryPropertiesKHR & operator=( VkPhysicalDevicePipelineBinaryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePipelineBinaryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineBinaryPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineBinaryPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineBinaryPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + pipelineBinaryInternalCache, + pipelineBinaryInternalCacheControl, + pipelineBinaryPrefersInternalCache, + pipelineBinaryPrecompiledInternalCache, + pipelineBinaryCompressedData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineBinaryPropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineBinaryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBinaryInternalCache == rhs.pipelineBinaryInternalCache ) && + ( pipelineBinaryInternalCacheControl == rhs.pipelineBinaryInternalCacheControl ) && + ( pipelineBinaryPrefersInternalCache == rhs.pipelineBinaryPrefersInternalCache ) && + ( pipelineBinaryPrecompiledInternalCache == rhs.pipelineBinaryPrecompiledInternalCache ) && + ( pipelineBinaryCompressedData == rhs.pipelineBinaryCompressedData ); +# endif + } + + bool operator!=( PhysicalDevicePipelineBinaryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineBinaryPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryInternalCache = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryInternalCacheControl = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryPrefersInternalCache = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryPrecompiledInternalCache = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineBinaryCompressedData = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineBinaryPropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC.html + struct PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC + { + using NativeType = VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC( VULKAN_HPP_NAMESPACE::Bool32 pipelineCacheIncrementalMode_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineCacheIncrementalMode{ pipelineCacheIncrementalMode_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC( PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC( VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC & + operator=( PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC & operator=( VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC & + setPipelineCacheIncrementalMode( VULKAN_HPP_NAMESPACE::Bool32 pipelineCacheIncrementalMode_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCacheIncrementalMode = pipelineCacheIncrementalMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineCacheIncrementalMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineCacheIncrementalMode == rhs.pipelineCacheIncrementalMode ); +# endif + } + + bool operator!=( PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineCacheIncrementalMode = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineCreationCacheControlFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineCreationCacheControlFeatures.html + struct PhysicalDevicePipelineCreationCacheControlFeatures + { + using NativeType = VkPhysicalDevicePipelineCreationCacheControlFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCreationCacheControlFeatures( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineCreationCacheControl{ pipelineCreationCacheControl_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePipelineCreationCacheControlFeatures( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineCreationCacheControlFeatures( VkPhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineCreationCacheControlFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineCreationCacheControlFeatures & + operator=( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineCreationCacheControlFeatures & operator=( VkPhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeatures & + setPipelineCreationCacheControl( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCreationCacheControl = pipelineCreationCacheControl_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineCreationCacheControlFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineCreationCacheControlFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineCreationCacheControlFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineCreationCacheControlFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineCreationCacheControl ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineCreationCacheControlFeatures const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineCreationCacheControl == rhs.pipelineCreationCacheControl ); +# endif + } + + bool operator!=( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineCreationCacheControlFeatures; + }; + + using PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeatures; + + // wrapper struct for struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.html + struct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR + { + using NativeType = VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineExecutableInfo{ pipelineExecutableInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineExecutablePropertiesFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & + operator=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & operator=( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & + setPipelineExecutableInfo( VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo_ ) VULKAN_HPP_NOEXCEPT + { + pipelineExecutableInfo = pipelineExecutableInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineExecutableInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineExecutableInfo == rhs.pipelineExecutableInfo ); +# endif + } + + bool operator!=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT.html + struct PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT + { + using NativeType = VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 pipelineLibraryGroupHandles_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineLibraryGroupHandles{ pipelineLibraryGroupHandles_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT( PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT( VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT & + operator=( PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT & operator=( VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT & + setPipelineLibraryGroupHandles( VULKAN_HPP_NAMESPACE::Bool32 pipelineLibraryGroupHandles_ ) VULKAN_HPP_NOEXCEPT + { + pipelineLibraryGroupHandles = pipelineLibraryGroupHandles_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineLibraryGroupHandles ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineLibraryGroupHandles == rhs.pipelineLibraryGroupHandles ); +# endif + } + + bool operator!=( PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineLibraryGroupHandles = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineOpacityMicromapFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineOpacityMicromapFeaturesARM.html + struct PhysicalDevicePipelineOpacityMicromapFeaturesARM + { + using NativeType = VkPhysicalDevicePipelineOpacityMicromapFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineOpacityMicromapFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineOpacityMicromapFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 pipelineOpacityMicromap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineOpacityMicromap{ pipelineOpacityMicromap_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePipelineOpacityMicromapFeaturesARM( PhysicalDevicePipelineOpacityMicromapFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineOpacityMicromapFeaturesARM( VkPhysicalDevicePipelineOpacityMicromapFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineOpacityMicromapFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineOpacityMicromapFeaturesARM & operator=( PhysicalDevicePipelineOpacityMicromapFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineOpacityMicromapFeaturesARM & operator=( VkPhysicalDevicePipelineOpacityMicromapFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineOpacityMicromapFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineOpacityMicromapFeaturesARM & + setPipelineOpacityMicromap( VULKAN_HPP_NAMESPACE::Bool32 pipelineOpacityMicromap_ ) VULKAN_HPP_NOEXCEPT + { + pipelineOpacityMicromap = pipelineOpacityMicromap_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineOpacityMicromapFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineOpacityMicromapFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineOpacityMicromapFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineOpacityMicromapFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineOpacityMicromap ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineOpacityMicromapFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineOpacityMicromapFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineOpacityMicromap == rhs.pipelineOpacityMicromap ); +# endif + } + + bool operator!=( PhysicalDevicePipelineOpacityMicromapFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineOpacityMicromapFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineOpacityMicromap = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineOpacityMicromapFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDevicePipelinePropertiesFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelinePropertiesFeaturesEXT.html + struct PhysicalDevicePipelinePropertiesFeaturesEXT + { + using NativeType = VkPhysicalDevicePipelinePropertiesFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelinePropertiesFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelinePropertiesFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 pipelinePropertiesIdentifier_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelinePropertiesIdentifier{ pipelinePropertiesIdentifier_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelinePropertiesFeaturesEXT( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelinePropertiesFeaturesEXT( VkPhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelinePropertiesFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelinePropertiesFeaturesEXT & operator=( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelinePropertiesFeaturesEXT & operator=( VkPhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelinePropertiesFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelinePropertiesFeaturesEXT & + setPipelinePropertiesIdentifier( VULKAN_HPP_NAMESPACE::Bool32 pipelinePropertiesIdentifier_ ) VULKAN_HPP_NOEXCEPT + { + pipelinePropertiesIdentifier = pipelinePropertiesIdentifier_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelinePropertiesFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelinePropertiesFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelinePropertiesFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelinePropertiesFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelinePropertiesIdentifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelinePropertiesFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelinePropertiesIdentifier == rhs.pipelinePropertiesIdentifier ); +# endif + } + + bool operator!=( PhysicalDevicePipelinePropertiesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelinePropertiesFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelinePropertiesIdentifier = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelinePropertiesFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePipelineProtectedAccessFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineProtectedAccessFeatures.html + struct PhysicalDevicePipelineProtectedAccessFeatures + { + using NativeType = VkPhysicalDevicePipelineProtectedAccessFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineProtectedAccessFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineProtectedAccessFeatures( VULKAN_HPP_NAMESPACE::Bool32 pipelineProtectedAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineProtectedAccess{ pipelineProtectedAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePipelineProtectedAccessFeatures( PhysicalDevicePipelineProtectedAccessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineProtectedAccessFeatures( VkPhysicalDevicePipelineProtectedAccessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineProtectedAccessFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineProtectedAccessFeatures & operator=( PhysicalDevicePipelineProtectedAccessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineProtectedAccessFeatures & operator=( VkPhysicalDevicePipelineProtectedAccessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineProtectedAccessFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineProtectedAccessFeatures & + setPipelineProtectedAccess( VULKAN_HPP_NAMESPACE::Bool32 pipelineProtectedAccess_ ) VULKAN_HPP_NOEXCEPT + { + pipelineProtectedAccess = pipelineProtectedAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineProtectedAccessFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineProtectedAccessFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineProtectedAccessFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineProtectedAccessFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineProtectedAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineProtectedAccessFeatures const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineProtectedAccessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineProtectedAccess == rhs.pipelineProtectedAccess ); +# endif + } + + bool operator!=( PhysicalDevicePipelineProtectedAccessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineProtectedAccessFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineProtectedAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineProtectedAccessFeatures; + }; + + using PhysicalDevicePipelineProtectedAccessFeaturesEXT = PhysicalDevicePipelineProtectedAccessFeatures; + + // wrapper struct for struct VkPhysicalDevicePipelineRobustnessFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineRobustnessFeatures.html + struct PhysicalDevicePipelineRobustnessFeatures + { + using NativeType = VkPhysicalDevicePipelineRobustnessFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineRobustnessFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineRobustnessFeatures( VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineRobustness{ pipelineRobustness_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineRobustnessFeatures( PhysicalDevicePipelineRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineRobustnessFeatures( VkPhysicalDevicePipelineRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineRobustnessFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineRobustnessFeatures & operator=( PhysicalDevicePipelineRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineRobustnessFeatures & operator=( VkPhysicalDevicePipelineRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineRobustnessFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineRobustnessFeatures & + setPipelineRobustness( VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness_ ) VULKAN_HPP_NOEXCEPT + { + pipelineRobustness = pipelineRobustness_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePipelineRobustnessFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineRobustnessFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineRobustnessFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineRobustnessFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineRobustness ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineRobustnessFeatures const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineRobustness == rhs.pipelineRobustness ); +# endif + } + + bool operator!=( PhysicalDevicePipelineRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineRobustnessFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineRobustnessFeatures; + }; + + using PhysicalDevicePipelineRobustnessFeaturesEXT = PhysicalDevicePipelineRobustnessFeatures; + + // wrapper struct for struct VkPhysicalDevicePipelineRobustnessProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePipelineRobustnessProperties.html + struct PhysicalDevicePipelineRobustnessProperties + { + using NativeType = VkPhysicalDevicePipelineRobustnessProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePipelineRobustnessProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineRobustnessProperties( + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers_ = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers_ = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessVertexInputs_ = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior defaultRobustnessImages_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior::eDeviceDefault, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , defaultRobustnessStorageBuffers{ defaultRobustnessStorageBuffers_ } + , defaultRobustnessUniformBuffers{ defaultRobustnessUniformBuffers_ } + , defaultRobustnessVertexInputs{ defaultRobustnessVertexInputs_ } + , defaultRobustnessImages{ defaultRobustnessImages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineRobustnessProperties( PhysicalDevicePipelineRobustnessProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePipelineRobustnessProperties( VkPhysicalDevicePipelineRobustnessProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePipelineRobustnessProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePipelineRobustnessProperties & operator=( PhysicalDevicePipelineRobustnessProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePipelineRobustnessProperties & operator=( VkPhysicalDevicePipelineRobustnessProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePipelineRobustnessProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineRobustnessProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineRobustnessProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePipelineRobustnessProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, defaultRobustnessStorageBuffers, defaultRobustnessUniformBuffers, defaultRobustnessVertexInputs, defaultRobustnessImages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePipelineRobustnessProperties const & ) const = default; +#else + bool operator==( PhysicalDevicePipelineRobustnessProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( defaultRobustnessStorageBuffers == rhs.defaultRobustnessStorageBuffers ) && + ( defaultRobustnessUniformBuffers == rhs.defaultRobustnessUniformBuffers ) && + ( defaultRobustnessVertexInputs == rhs.defaultRobustnessVertexInputs ) && ( defaultRobustnessImages == rhs.defaultRobustnessImages ); +# endif + } + + bool operator!=( PhysicalDevicePipelineRobustnessProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineRobustnessProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessVertexInputs = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior defaultRobustnessImages = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior::eDeviceDefault; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePipelineRobustnessProperties; + }; + + using PhysicalDevicePipelineRobustnessPropertiesEXT = PhysicalDevicePipelineRobustnessProperties; + + // wrapper struct for struct VkPhysicalDevicePointClippingProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePointClippingProperties.html + struct PhysicalDevicePointClippingProperties + { + using NativeType = VkPhysicalDevicePointClippingProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePointClippingProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePointClippingProperties( + VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior_ = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pointClippingBehavior{ pointClippingBehavior_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePointClippingProperties( PhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePointClippingProperties( VkPhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePointClippingProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePointClippingProperties & operator=( PhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePointClippingProperties & operator=( VkPhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePointClippingProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePointClippingProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePointClippingProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePointClippingProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pointClippingBehavior ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePointClippingProperties const & ) const = default; +#else + bool operator==( PhysicalDevicePointClippingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pointClippingBehavior == rhs.pointClippingBehavior ); +# endif + } + + bool operator!=( PhysicalDevicePointClippingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePointClippingProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePointClippingProperties; + }; + + using PhysicalDevicePointClippingPropertiesKHR = PhysicalDevicePointClippingProperties; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDevicePortabilitySubsetFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePortabilitySubsetFeaturesKHR.html + struct PhysicalDevicePortabilitySubsetFeaturesKHR + { + using NativeType = VkPhysicalDevicePortabilitySubsetFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 events_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pointPolygons_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 triangleFans_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , constantAlphaColorBlendFactors{ constantAlphaColorBlendFactors_ } + , events{ events_ } + , imageViewFormatReinterpretation{ imageViewFormatReinterpretation_ } + , imageViewFormatSwizzle{ imageViewFormatSwizzle_ } + , imageView2DOn3DImage{ imageView2DOn3DImage_ } + , multisampleArrayImage{ multisampleArrayImage_ } + , mutableComparisonSamplers{ mutableComparisonSamplers_ } + , pointPolygons{ pointPolygons_ } + , samplerMipLodBias{ samplerMipLodBias_ } + , separateStencilMaskRef{ separateStencilMaskRef_ } + , shaderSampleRateInterpolationFunctions{ shaderSampleRateInterpolationFunctions_ } + , tessellationIsolines{ tessellationIsolines_ } + , tessellationPointMode{ tessellationPointMode_ } + , triangleFans{ triangleFans_ } + , vertexAttributeAccessBeyondStride{ vertexAttributeAccessBeyondStride_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetFeaturesKHR( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePortabilitySubsetFeaturesKHR( VkPhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePortabilitySubsetFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePortabilitySubsetFeaturesKHR & operator=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePortabilitySubsetFeaturesKHR & operator=( VkPhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setConstantAlphaColorBlendFactors( VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors_ ) VULKAN_HPP_NOEXCEPT + { + constantAlphaColorBlendFactors = constantAlphaColorBlendFactors_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setEvents( VULKAN_HPP_NAMESPACE::Bool32 events_ ) VULKAN_HPP_NOEXCEPT + { + events = events_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setImageViewFormatReinterpretation( VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation_ ) VULKAN_HPP_NOEXCEPT + { + imageViewFormatReinterpretation = imageViewFormatReinterpretation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setImageViewFormatSwizzle( VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle_ ) VULKAN_HPP_NOEXCEPT + { + imageViewFormatSwizzle = imageViewFormatSwizzle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setImageView2DOn3DImage( VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage_ ) VULKAN_HPP_NOEXCEPT + { + imageView2DOn3DImage = imageView2DOn3DImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setMultisampleArrayImage( VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage_ ) VULKAN_HPP_NOEXCEPT + { + multisampleArrayImage = multisampleArrayImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setMutableComparisonSamplers( VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers_ ) VULKAN_HPP_NOEXCEPT + { + mutableComparisonSamplers = mutableComparisonSamplers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setPointPolygons( VULKAN_HPP_NAMESPACE::Bool32 pointPolygons_ ) VULKAN_HPP_NOEXCEPT + { + pointPolygons = pointPolygons_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setSamplerMipLodBias( VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias_ ) VULKAN_HPP_NOEXCEPT + { + samplerMipLodBias = samplerMipLodBias_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setSeparateStencilMaskRef( VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef_ ) VULKAN_HPP_NOEXCEPT + { + separateStencilMaskRef = separateStencilMaskRef_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setShaderSampleRateInterpolationFunctions( VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions_ ) VULKAN_HPP_NOEXCEPT + { + shaderSampleRateInterpolationFunctions = shaderSampleRateInterpolationFunctions_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setTessellationIsolines( VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines_ ) VULKAN_HPP_NOEXCEPT + { + tessellationIsolines = tessellationIsolines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setTessellationPointMode( VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode_ ) VULKAN_HPP_NOEXCEPT + { + tessellationPointMode = tessellationPointMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setTriangleFans( VULKAN_HPP_NAMESPACE::Bool32 triangleFans_ ) VULKAN_HPP_NOEXCEPT + { + triangleFans = triangleFans_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & + setVertexAttributeAccessBeyondStride( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeAccessBeyondStride = vertexAttributeAccessBeyondStride_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePortabilitySubsetFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePortabilitySubsetFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePortabilitySubsetFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePortabilitySubsetFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + constantAlphaColorBlendFactors, + events, + imageViewFormatReinterpretation, + imageViewFormatSwizzle, + imageView2DOn3DImage, + multisampleArrayImage, + mutableComparisonSamplers, + pointPolygons, + samplerMipLodBias, + separateStencilMaskRef, + shaderSampleRateInterpolationFunctions, + tessellationIsolines, + tessellationPointMode, + triangleFans, + vertexAttributeAccessBeyondStride ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePortabilitySubsetFeaturesKHR const & ) const = default; +# else + bool operator==( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( constantAlphaColorBlendFactors == rhs.constantAlphaColorBlendFactors ) && + ( events == rhs.events ) && ( imageViewFormatReinterpretation == rhs.imageViewFormatReinterpretation ) && + ( imageViewFormatSwizzle == rhs.imageViewFormatSwizzle ) && ( imageView2DOn3DImage == rhs.imageView2DOn3DImage ) && + ( multisampleArrayImage == rhs.multisampleArrayImage ) && ( mutableComparisonSamplers == rhs.mutableComparisonSamplers ) && + ( pointPolygons == rhs.pointPolygons ) && ( samplerMipLodBias == rhs.samplerMipLodBias ) && + ( separateStencilMaskRef == rhs.separateStencilMaskRef ) && + ( shaderSampleRateInterpolationFunctions == rhs.shaderSampleRateInterpolationFunctions ) && ( tessellationIsolines == rhs.tessellationIsolines ) && + ( tessellationPointMode == rhs.tessellationPointMode ) && ( triangleFans == rhs.triangleFans ) && + ( vertexAttributeAccessBeyondStride == rhs.vertexAttributeAccessBeyondStride ); +# endif + } + + bool operator!=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors = {}; + VULKAN_HPP_NAMESPACE::Bool32 events = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage = {}; + VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage = {}; + VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers = {}; + VULKAN_HPP_NAMESPACE::Bool32 pointPolygons = {}; + VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias = {}; + VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions = {}; + VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines = {}; + VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode = {}; + VULKAN_HPP_NAMESPACE::Bool32 triangleFans = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePortabilitySubsetFeaturesKHR; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDevicePortabilitySubsetPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePortabilitySubsetPropertiesKHR.html + struct PhysicalDevicePortabilitySubsetPropertiesKHR + { + using NativeType = VkPhysicalDevicePortabilitySubsetPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetPropertiesKHR( uint32_t minVertexInputBindingStrideAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minVertexInputBindingStrideAlignment{ minVertexInputBindingStrideAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePortabilitySubsetPropertiesKHR( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePortabilitySubsetPropertiesKHR( VkPhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePortabilitySubsetPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePortabilitySubsetPropertiesKHR & operator=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePortabilitySubsetPropertiesKHR & operator=( VkPhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePortabilitySubsetPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePortabilitySubsetPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePortabilitySubsetPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePortabilitySubsetPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minVertexInputBindingStrideAlignment ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePortabilitySubsetPropertiesKHR const & ) const = default; +# else + bool operator==( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minVertexInputBindingStrideAlignment == rhs.minVertexInputBindingStrideAlignment ); +# endif + } + + bool operator!=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR; + void * pNext = {}; + uint32_t minVertexInputBindingStrideAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePortabilitySubsetPropertiesKHR; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkPhysicalDevicePresentBarrierFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentBarrierFeaturesNV.html + struct PhysicalDevicePresentBarrierFeaturesNV + { + using NativeType = VkPhysicalDevicePresentBarrierFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentBarrierFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentBarrierFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 presentBarrier_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentBarrier{ presentBarrier_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentBarrierFeaturesNV( PhysicalDevicePresentBarrierFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentBarrierFeaturesNV( VkPhysicalDevicePresentBarrierFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentBarrierFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentBarrierFeaturesNV & operator=( PhysicalDevicePresentBarrierFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentBarrierFeaturesNV & operator=( VkPhysicalDevicePresentBarrierFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentBarrierFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentBarrierFeaturesNV & setPresentBarrier( VULKAN_HPP_NAMESPACE::Bool32 presentBarrier_ ) VULKAN_HPP_NOEXCEPT + { + presentBarrier = presentBarrier_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentBarrierFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentBarrierFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentBarrierFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentBarrierFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentBarrier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentBarrierFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDevicePresentBarrierFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentBarrier == rhs.presentBarrier ); +# endif + } + + bool operator!=( PhysicalDevicePresentBarrierFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentBarrierFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentBarrier = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentBarrierFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDevicePresentId2FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentId2FeaturesKHR.html + struct PhysicalDevicePresentId2FeaturesKHR + { + using NativeType = VkPhysicalDevicePresentId2FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentId2FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentId2FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentId2_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentId2{ presentId2_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentId2FeaturesKHR( PhysicalDevicePresentId2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentId2FeaturesKHR( VkPhysicalDevicePresentId2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentId2FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentId2FeaturesKHR & operator=( PhysicalDevicePresentId2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentId2FeaturesKHR & operator=( VkPhysicalDevicePresentId2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentId2FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentId2FeaturesKHR & setPresentId2( VULKAN_HPP_NAMESPACE::Bool32 presentId2_ ) VULKAN_HPP_NOEXCEPT + { + presentId2 = presentId2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentId2FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentId2FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentId2FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentId2FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentId2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentId2FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePresentId2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentId2 == rhs.presentId2 ); +# endif + } + + bool operator!=( PhysicalDevicePresentId2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentId2FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentId2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentId2FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePresentIdFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentIdFeaturesKHR.html + struct PhysicalDevicePresentIdFeaturesKHR + { + using NativeType = VkPhysicalDevicePresentIdFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentIdFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentIdFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentId_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentId{ presentId_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentIdFeaturesKHR( PhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentIdFeaturesKHR( VkPhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentIdFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentIdFeaturesKHR & operator=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentIdFeaturesKHR & operator=( VkPhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR & setPresentId( VULKAN_HPP_NAMESPACE::Bool32 presentId_ ) VULKAN_HPP_NOEXCEPT + { + presentId = presentId_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentIdFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentIdFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentIdFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentIdFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentId ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentIdFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePresentIdFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentId == rhs.presentId ); +# endif + } + + bool operator!=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentIdFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentId = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentIdFeaturesKHR; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDevicePresentMeteringFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentMeteringFeaturesNV.html + struct PhysicalDevicePresentMeteringFeaturesNV + { + using NativeType = VkPhysicalDevicePresentMeteringFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentMeteringFeaturesNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentMeteringFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 presentMetering_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentMetering{ presentMetering_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentMeteringFeaturesNV( PhysicalDevicePresentMeteringFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentMeteringFeaturesNV( VkPhysicalDevicePresentMeteringFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentMeteringFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentMeteringFeaturesNV & operator=( PhysicalDevicePresentMeteringFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentMeteringFeaturesNV & operator=( VkPhysicalDevicePresentMeteringFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentMeteringFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentMeteringFeaturesNV & setPresentMetering( VULKAN_HPP_NAMESPACE::Bool32 presentMetering_ ) VULKAN_HPP_NOEXCEPT + { + presentMetering = presentMetering_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentMeteringFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentMeteringFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentMeteringFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentMeteringFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentMetering ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentMeteringFeaturesNV const & ) const = default; +# else + bool operator==( PhysicalDevicePresentMeteringFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentMetering == rhs.presentMetering ); +# endif + } + + bool operator!=( PhysicalDevicePresentMeteringFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentMeteringFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentMetering = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentMeteringFeaturesNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR.html + struct PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR + { + using NativeType = VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentModeFifoLatestReady_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentModeFifoLatestReady{ presentModeFifoLatestReady_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR( PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR( VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR & + operator=( PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR & operator=( VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR & + setPresentModeFifoLatestReady( VULKAN_HPP_NAMESPACE::Bool32 presentModeFifoLatestReady_ ) VULKAN_HPP_NOEXCEPT + { + presentModeFifoLatestReady = presentModeFifoLatestReady_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentModeFifoLatestReady ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentModeFifoLatestReady == rhs.presentModeFifoLatestReady ); +# endif + } + + bool operator!=( PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentModeFifoLatestReady = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + }; + + using PhysicalDevicePresentModeFifoLatestReadyFeaturesEXT = PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR; + + // wrapper struct for struct VkPhysicalDevicePresentWait2FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentWait2FeaturesKHR.html + struct PhysicalDevicePresentWait2FeaturesKHR + { + using NativeType = VkPhysicalDevicePresentWait2FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentWait2FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentWait2FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentWait2_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentWait2{ presentWait2_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentWait2FeaturesKHR( PhysicalDevicePresentWait2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentWait2FeaturesKHR( VkPhysicalDevicePresentWait2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentWait2FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentWait2FeaturesKHR & operator=( PhysicalDevicePresentWait2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentWait2FeaturesKHR & operator=( VkPhysicalDevicePresentWait2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWait2FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWait2FeaturesKHR & setPresentWait2( VULKAN_HPP_NAMESPACE::Bool32 presentWait2_ ) VULKAN_HPP_NOEXCEPT + { + presentWait2 = presentWait2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentWait2FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentWait2FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentWait2FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentWait2FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentWait2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentWait2FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePresentWait2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentWait2 == rhs.presentWait2 ); +# endif + } + + bool operator!=( PhysicalDevicePresentWait2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentWait2FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentWait2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentWait2FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePresentWaitFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePresentWaitFeaturesKHR.html + struct PhysicalDevicePresentWaitFeaturesKHR + { + using NativeType = VkPhysicalDevicePresentWaitFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePresentWaitFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentWaitFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 presentWait_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentWait{ presentWait_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePresentWaitFeaturesKHR( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePresentWaitFeaturesKHR( VkPhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePresentWaitFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePresentWaitFeaturesKHR & operator=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePresentWaitFeaturesKHR & operator=( VkPhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR & setPresentWait( VULKAN_HPP_NAMESPACE::Bool32 presentWait_ ) VULKAN_HPP_NOEXCEPT + { + presentWait = presentWait_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePresentWaitFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentWaitFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentWaitFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePresentWaitFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentWait ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePresentWaitFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentWait == rhs.presentWait ); +# endif + } + + bool operator!=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePresentWaitFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentWait = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePresentWaitFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.html + struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT + { + using NativeType = VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , primitiveTopologyListRestart{ primitiveTopologyListRestart_ } + , primitiveTopologyPatchListRestart{ primitiveTopologyPatchListRestart_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & + operator=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & operator=( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & + setPrimitiveTopologyListRestart( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart_ ) VULKAN_HPP_NOEXCEPT + { + primitiveTopologyListRestart = primitiveTopologyListRestart_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & + setPrimitiveTopologyPatchListRestart( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart_ ) VULKAN_HPP_NOEXCEPT + { + primitiveTopologyPatchListRestart = primitiveTopologyPatchListRestart_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, primitiveTopologyListRestart, primitiveTopologyPatchListRestart ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( primitiveTopologyListRestart == rhs.primitiveTopologyListRestart ) && + ( primitiveTopologyPatchListRestart == rhs.primitiveTopologyPatchListRestart ); +# endif + } + + bool operator!=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT.html + struct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT + { + using NativeType = VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQuery_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithRasterizerDiscard_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithNonZeroStreams_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , primitivesGeneratedQuery{ primitivesGeneratedQuery_ } + , primitivesGeneratedQueryWithRasterizerDiscard{ primitivesGeneratedQueryWithRasterizerDiscard_ } + , primitivesGeneratedQueryWithNonZeroStreams{ primitivesGeneratedQueryWithNonZeroStreams_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & + operator=( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & operator=( VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & + setPrimitivesGeneratedQuery( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQuery_ ) VULKAN_HPP_NOEXCEPT + { + primitivesGeneratedQuery = primitivesGeneratedQuery_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & + setPrimitivesGeneratedQueryWithRasterizerDiscard( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithRasterizerDiscard_ ) VULKAN_HPP_NOEXCEPT + { + primitivesGeneratedQueryWithRasterizerDiscard = primitivesGeneratedQueryWithRasterizerDiscard_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT & + setPrimitivesGeneratedQueryWithNonZeroStreams( VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithNonZeroStreams_ ) VULKAN_HPP_NOEXCEPT + { + primitivesGeneratedQueryWithNonZeroStreams = primitivesGeneratedQueryWithNonZeroStreams_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, primitivesGeneratedQuery, primitivesGeneratedQueryWithRasterizerDiscard, primitivesGeneratedQueryWithNonZeroStreams ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( primitivesGeneratedQuery == rhs.primitivesGeneratedQuery ) && + ( primitivesGeneratedQueryWithRasterizerDiscard == rhs.primitivesGeneratedQueryWithRasterizerDiscard ) && + ( primitivesGeneratedQueryWithNonZeroStreams == rhs.primitivesGeneratedQueryWithNonZeroStreams ); +# endif + } + + bool operator!=( PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQuery = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithRasterizerDiscard = {}; + VULKAN_HPP_NAMESPACE::Bool32 primitivesGeneratedQueryWithNonZeroStreams = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePrivateDataFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePrivateDataFeatures.html + struct PhysicalDevicePrivateDataFeatures + { + using NativeType = VkPhysicalDevicePrivateDataFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePrivateDataFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePrivateDataFeatures( VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , privateData{ privateData_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePrivateDataFeatures( PhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePrivateDataFeatures( VkPhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePrivateDataFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePrivateDataFeatures & operator=( PhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePrivateDataFeatures & operator=( VkPhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeatures & setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT + { + privateData = privateData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDevicePrivateDataFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrivateDataFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrivateDataFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePrivateDataFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, privateData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePrivateDataFeatures const & ) const = default; +#else + bool operator==( PhysicalDevicePrivateDataFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( privateData == rhs.privateData ); +# endif + } + + bool operator!=( PhysicalDevicePrivateDataFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrivateDataFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 privateData = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePrivateDataFeatures; + }; + + using PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeatures; + + // wrapper struct for struct VkPhysicalDeviceProtectedMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceProtectedMemoryFeatures.html + struct PhysicalDeviceProtectedMemoryFeatures + { + using NativeType = VkPhysicalDeviceProtectedMemoryFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProtectedMemoryFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryFeatures( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , protectedMemory{ protectedMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryFeatures( PhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceProtectedMemoryFeatures( VkPhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceProtectedMemoryFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceProtectedMemoryFeatures & operator=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceProtectedMemoryFeatures & operator=( VkPhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures & setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT + { + protectedMemory = protectedMemory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceProtectedMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProtectedMemoryFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProtectedMemoryFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProtectedMemoryFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, protectedMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceProtectedMemoryFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceProtectedMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedMemory == rhs.protectedMemory ); +# endif + } + + bool operator!=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProtectedMemoryFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 protectedMemory = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceProtectedMemoryFeatures; + }; + + // wrapper struct for struct VkPhysicalDeviceProtectedMemoryProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceProtectedMemoryProperties.html + struct PhysicalDeviceProtectedMemoryProperties + { + using NativeType = VkPhysicalDeviceProtectedMemoryProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProtectedMemoryProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryProperties( VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , protectedNoFault{ protectedNoFault_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceProtectedMemoryProperties( PhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceProtectedMemoryProperties( VkPhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceProtectedMemoryProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceProtectedMemoryProperties & operator=( PhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceProtectedMemoryProperties & operator=( VkPhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceProtectedMemoryProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProtectedMemoryProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProtectedMemoryProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProtectedMemoryProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, protectedNoFault ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceProtectedMemoryProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceProtectedMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedNoFault == rhs.protectedNoFault ); +# endif + } + + bool operator!=( PhysicalDeviceProtectedMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProtectedMemoryProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceProtectedMemoryProperties; + }; + + // wrapper struct for struct VkPhysicalDeviceProvokingVertexFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceProvokingVertexFeaturesEXT.html + struct PhysicalDeviceProvokingVertexFeaturesEXT + { + using NativeType = VkPhysicalDeviceProvokingVertexFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , provokingVertexLast{ provokingVertexLast_ } + , transformFeedbackPreservesProvokingVertex{ transformFeedbackPreservesProvokingVertex_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexFeaturesEXT( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceProvokingVertexFeaturesEXT( VkPhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceProvokingVertexFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceProvokingVertexFeaturesEXT & operator=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceProvokingVertexFeaturesEXT & operator=( VkPhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & + setProvokingVertexLast( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast_ ) VULKAN_HPP_NOEXCEPT + { + provokingVertexLast = provokingVertexLast_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & + setTransformFeedbackPreservesProvokingVertex( VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex_ ) VULKAN_HPP_NOEXCEPT + { + transformFeedbackPreservesProvokingVertex = transformFeedbackPreservesProvokingVertex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceProvokingVertexFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProvokingVertexFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProvokingVertexFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProvokingVertexFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, provokingVertexLast, transformFeedbackPreservesProvokingVertex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceProvokingVertexFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexLast == rhs.provokingVertexLast ) && + ( transformFeedbackPreservesProvokingVertex == rhs.transformFeedbackPreservesProvokingVertex ); +# endif + } + + bool operator!=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceProvokingVertexFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceProvokingVertexPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceProvokingVertexPropertiesEXT.html + struct PhysicalDeviceProvokingVertexPropertiesEXT + { + using NativeType = VkPhysicalDeviceProvokingVertexPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexModePerPipeline_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesTriangleFanProvokingVertex_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , provokingVertexModePerPipeline{ provokingVertexModePerPipeline_ } + , transformFeedbackPreservesTriangleFanProvokingVertex{ transformFeedbackPreservesTriangleFanProvokingVertex_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceProvokingVertexPropertiesEXT( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceProvokingVertexPropertiesEXT( VkPhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceProvokingVertexPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceProvokingVertexPropertiesEXT & operator=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceProvokingVertexPropertiesEXT & operator=( VkPhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceProvokingVertexPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProvokingVertexPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProvokingVertexPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceProvokingVertexPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, provokingVertexModePerPipeline, transformFeedbackPreservesTriangleFanProvokingVertex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceProvokingVertexPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexModePerPipeline == rhs.provokingVertexModePerPipeline ) && + ( transformFeedbackPreservesTriangleFanProvokingVertex == rhs.transformFeedbackPreservesTriangleFanProvokingVertex ); +# endif + } + + bool operator!=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 provokingVertexModePerPipeline = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesTriangleFanProvokingVertex = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceProvokingVertexPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDevicePushDescriptorProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDevicePushDescriptorProperties.html + struct PhysicalDevicePushDescriptorProperties + { + using NativeType = VkPhysicalDevicePushDescriptorProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDevicePushDescriptorProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDevicePushDescriptorProperties( uint32_t maxPushDescriptors_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxPushDescriptors{ maxPushDescriptors_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDevicePushDescriptorProperties( PhysicalDevicePushDescriptorProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDevicePushDescriptorProperties( VkPhysicalDevicePushDescriptorProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDevicePushDescriptorProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDevicePushDescriptorProperties & operator=( PhysicalDevicePushDescriptorProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDevicePushDescriptorProperties & operator=( VkPhysicalDevicePushDescriptorProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDevicePushDescriptorProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePushDescriptorProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDevicePushDescriptorProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDevicePushDescriptorProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxPushDescriptors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDevicePushDescriptorProperties const & ) const = default; +#else + bool operator==( PhysicalDevicePushDescriptorProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPushDescriptors == rhs.maxPushDescriptors ); +# endif + } + + bool operator!=( PhysicalDevicePushDescriptorProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePushDescriptorProperties; + void * pNext = {}; + uint32_t maxPushDescriptors = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDevicePushDescriptorProperties; + }; + + using PhysicalDevicePushDescriptorPropertiesKHR = PhysicalDevicePushDescriptorProperties; + + // wrapper struct for struct VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM.html + struct PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM + { + using NativeType = VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM( uint32_t queueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM engineType_ = + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM::eDefault, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queueFamilyIndex{ queueFamilyIndex_ } + , engineType{ engineType_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM( PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM( VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & + operator=( PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & + operator=( VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndex = queueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM & + setEngineType( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM engineType_ ) VULKAN_HPP_NOEXCEPT + { + engineType = engineType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queueFamilyIndex, engineType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & ) const = default; +#else + bool operator==( PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && ( engineType == rhs.engineType ); +# endif + } + + bool operator!=( PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + const void * pNext = {}; + uint32_t queueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM engineType = + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineTypeARM::eDefault; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM; + }; + + // wrapper struct for struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.html + struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT + { + using NativeType = VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRGBA10X6FormatsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , formatRgba10x6WithoutYCbCrSampler{ formatRgba10x6WithoutYCbCrSampler_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRGBA10X6FormatsFeaturesEXT( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRGBA10X6FormatsFeaturesEXT( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRGBA10X6FormatsFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRGBA10X6FormatsFeaturesEXT & operator=( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRGBA10X6FormatsFeaturesEXT & operator=( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRGBA10X6FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRGBA10X6FormatsFeaturesEXT & + setFormatRgba10x6WithoutYCbCrSampler( VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler_ ) VULKAN_HPP_NOEXCEPT + { + formatRgba10x6WithoutYCbCrSampler = formatRgba10x6WithoutYCbCrSampler_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, formatRgba10x6WithoutYCbCrSampler ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatRgba10x6WithoutYCbCrSampler == rhs.formatRgba10x6WithoutYCbCrSampler ); +# endif + } + + bool operator!=( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRGBA10X6FormatsFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.html + struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT + { + using NativeType = VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rasterizationOrderColorAttachmentAccess{ rasterizationOrderColorAttachmentAccess_ } + , rasterizationOrderDepthAttachmentAccess{ rasterizationOrderDepthAttachmentAccess_ } + , rasterizationOrderStencilAttachmentAccess{ rasterizationOrderStencilAttachmentAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT & + operator=( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT & + operator=( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT & + setRasterizationOrderColorAttachmentAccess( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationOrderColorAttachmentAccess = rasterizationOrderColorAttachmentAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT & + setRasterizationOrderDepthAttachmentAccess( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationOrderDepthAttachmentAccess = rasterizationOrderDepthAttachmentAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT & + setRasterizationOrderStencilAttachmentAccess( VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationOrderStencilAttachmentAccess = rasterizationOrderStencilAttachmentAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, rasterizationOrderColorAttachmentAccess, rasterizationOrderDepthAttachmentAccess, rasterizationOrderStencilAttachmentAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rasterizationOrderColorAttachmentAccess == rhs.rasterizationOrderColorAttachmentAccess ) && + ( rasterizationOrderDepthAttachmentAccess == rhs.rasterizationOrderDepthAttachmentAccess ) && + ( rasterizationOrderStencilAttachmentAccess == rhs.rasterizationOrderStencilAttachmentAccess ); +# endif + } + + bool operator!=( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + }; + + using PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM = PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT; + + // wrapper struct for struct VkPhysicalDeviceRawAccessChainsFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRawAccessChainsFeaturesNV.html + struct PhysicalDeviceRawAccessChainsFeaturesNV + { + using NativeType = VkPhysicalDeviceRawAccessChainsFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRawAccessChainsFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRawAccessChainsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 shaderRawAccessChains_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderRawAccessChains{ shaderRawAccessChains_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRawAccessChainsFeaturesNV( PhysicalDeviceRawAccessChainsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRawAccessChainsFeaturesNV( VkPhysicalDeviceRawAccessChainsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRawAccessChainsFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRawAccessChainsFeaturesNV & operator=( PhysicalDeviceRawAccessChainsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRawAccessChainsFeaturesNV & operator=( VkPhysicalDeviceRawAccessChainsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRawAccessChainsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRawAccessChainsFeaturesNV & + setShaderRawAccessChains( VULKAN_HPP_NAMESPACE::Bool32 shaderRawAccessChains_ ) VULKAN_HPP_NOEXCEPT + { + shaderRawAccessChains = shaderRawAccessChains_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRawAccessChainsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRawAccessChainsFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRawAccessChainsFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRawAccessChainsFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderRawAccessChains ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRawAccessChainsFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRawAccessChainsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderRawAccessChains == rhs.shaderRawAccessChains ); +# endif + } + + bool operator!=( PhysicalDeviceRawAccessChainsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRawAccessChainsFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRawAccessChains = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRawAccessChainsFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRayQueryFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayQueryFeaturesKHR.html + struct PhysicalDeviceRayQueryFeaturesKHR + { + using NativeType = VkPhysicalDeviceRayQueryFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayQueryFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayQueryFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayQuery_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayQuery{ rayQuery_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayQueryFeaturesKHR( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayQueryFeaturesKHR( VkPhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayQueryFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayQueryFeaturesKHR & operator=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayQueryFeaturesKHR & operator=( VkPhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR & setRayQuery( VULKAN_HPP_NAMESPACE::Bool32 rayQuery_ ) VULKAN_HPP_NOEXCEPT + { + rayQuery = rayQuery_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayQueryFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayQueryFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayQuery ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayQueryFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayQuery == rhs.rayQuery ); +# endif + } + + bool operator!=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayQueryFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayQuery = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayQueryFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV.html + struct PhysicalDeviceRayTracingInvocationReorderFeaturesNV + { + using NativeType = VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingInvocationReorderFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingInvocationReorderFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 rayTracingInvocationReorder_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingInvocationReorder{ rayTracingInvocationReorder_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRayTracingInvocationReorderFeaturesNV( PhysicalDeviceRayTracingInvocationReorderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingInvocationReorderFeaturesNV( VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingInvocationReorderFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingInvocationReorderFeaturesNV & + operator=( PhysicalDeviceRayTracingInvocationReorderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingInvocationReorderFeaturesNV & operator=( VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingInvocationReorderFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingInvocationReorderFeaturesNV & + setRayTracingInvocationReorder( VULKAN_HPP_NAMESPACE::Bool32 rayTracingInvocationReorder_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingInvocationReorder = rayTracingInvocationReorder_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayTracingInvocationReorder ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingInvocationReorderFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingInvocationReorderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingInvocationReorder == rhs.rayTracingInvocationReorder ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingInvocationReorderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingInvocationReorderFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingInvocationReorder = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingInvocationReorderFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.html + struct PhysicalDeviceRayTracingInvocationReorderPropertiesNV + { + using NativeType = VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingInvocationReorderPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingInvocationReorderPropertiesNV( + VULKAN_HPP_NAMESPACE::RayTracingInvocationReorderModeNV rayTracingInvocationReorderReorderingHint_ = + VULKAN_HPP_NAMESPACE::RayTracingInvocationReorderModeNV::eNone, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingInvocationReorderReorderingHint{ rayTracingInvocationReorderReorderingHint_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRayTracingInvocationReorderPropertiesNV( PhysicalDeviceRayTracingInvocationReorderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingInvocationReorderPropertiesNV( VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingInvocationReorderPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingInvocationReorderPropertiesNV & + operator=( PhysicalDeviceRayTracingInvocationReorderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingInvocationReorderPropertiesNV & operator=( VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayTracingInvocationReorderReorderingHint ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingInvocationReorderPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingInvocationReorderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingInvocationReorderReorderingHint == rhs.rayTracingInvocationReorderReorderingHint ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingInvocationReorderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingInvocationReorderPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::RayTracingInvocationReorderModeNV rayTracingInvocationReorderReorderingHint = + VULKAN_HPP_NAMESPACE::RayTracingInvocationReorderModeNV::eNone; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingInvocationReorderPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV.html + struct PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV + { + using NativeType = VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 spheres_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 linearSweptSpheres_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , spheres{ spheres_ } + , linearSweptSpheres{ linearSweptSpheres_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV( PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV( VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV & + operator=( PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV & operator=( VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV & setSpheres( VULKAN_HPP_NAMESPACE::Bool32 spheres_ ) VULKAN_HPP_NOEXCEPT + { + spheres = spheres_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV & + setLinearSweptSpheres( VULKAN_HPP_NAMESPACE::Bool32 linearSweptSpheres_ ) VULKAN_HPP_NOEXCEPT + { + linearSweptSpheres = linearSweptSpheres_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, spheres, linearSweptSpheres ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spheres == rhs.spheres ) && ( linearSweptSpheres == rhs.linearSweptSpheres ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 spheres = {}; + VULKAN_HPP_NAMESPACE::Bool32 linearSweptSpheres = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR.html + struct PhysicalDeviceRayTracingMaintenance1FeaturesKHR + { + using NativeType = VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingMaintenance1FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingMaintenance1FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMaintenance1_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect2_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingMaintenance1{ rayTracingMaintenance1_ } + , rayTracingPipelineTraceRaysIndirect2{ rayTracingPipelineTraceRaysIndirect2_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRayTracingMaintenance1FeaturesKHR( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingMaintenance1FeaturesKHR( VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingMaintenance1FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingMaintenance1FeaturesKHR & operator=( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingMaintenance1FeaturesKHR & operator=( VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMaintenance1FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMaintenance1FeaturesKHR & + setRayTracingMaintenance1( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMaintenance1_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingMaintenance1 = rayTracingMaintenance1_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMaintenance1FeaturesKHR & + setRayTracingPipelineTraceRaysIndirect2( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect2_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingPipelineTraceRaysIndirect2 = rayTracingPipelineTraceRaysIndirect2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayTracingMaintenance1, rayTracingPipelineTraceRaysIndirect2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingMaintenance1 == rhs.rayTracingMaintenance1 ) && + ( rayTracingPipelineTraceRaysIndirect2 == rhs.rayTracingPipelineTraceRaysIndirect2 ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingMaintenance1FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingMaintenance1 = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingMaintenance1FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.html + struct PhysicalDeviceRayTracingMotionBlurFeaturesNV + { + using NativeType = VkPhysicalDeviceRayTracingMotionBlurFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingMotionBlurFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingMotionBlur{ rayTracingMotionBlur_ } + , rayTracingMotionBlurPipelineTraceRaysIndirect{ rayTracingMotionBlurPipelineTraceRaysIndirect_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingMotionBlurFeaturesNV( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingMotionBlurFeaturesNV( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingMotionBlurFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingMotionBlurFeaturesNV & operator=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingMotionBlurFeaturesNV & operator=( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & + setRayTracingMotionBlur( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingMotionBlur = rayTracingMotionBlur_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & + setRayTracingMotionBlurPipelineTraceRaysIndirect( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingMotionBlurPipelineTraceRaysIndirect = rayTracingMotionBlurPipelineTraceRaysIndirect_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayTracingMotionBlur, rayTracingMotionBlurPipelineTraceRaysIndirect ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingMotionBlur == rhs.rayTracingMotionBlur ) && + ( rayTracingMotionBlurPipelineTraceRaysIndirect == rhs.rayTracingMotionBlurPipelineTraceRaysIndirect ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingMotionBlurFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.html + struct PhysicalDeviceRayTracingPipelineFeaturesKHR + { + using NativeType = VkPhysicalDeviceRayTracingPipelineFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPipelineFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingPipeline{ rayTracingPipeline_ } + , rayTracingPipelineShaderGroupHandleCaptureReplay{ rayTracingPipelineShaderGroupHandleCaptureReplay_ } + , rayTracingPipelineShaderGroupHandleCaptureReplayMixed{ rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ } + , rayTracingPipelineTraceRaysIndirect{ rayTracingPipelineTraceRaysIndirect_ } + , rayTraversalPrimitiveCulling{ rayTraversalPrimitiveCulling_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPipelineFeaturesKHR( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingPipelineFeaturesKHR( VkPhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingPipelineFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingPipelineFeaturesKHR & operator=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingPipelineFeaturesKHR & operator=( VkPhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & + setRayTracingPipeline( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingPipeline = rayTracingPipeline_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & + setRayTracingPipelineShaderGroupHandleCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingPipelineShaderGroupHandleCaptureReplay = rayTracingPipelineShaderGroupHandleCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & setRayTracingPipelineShaderGroupHandleCaptureReplayMixed( + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingPipelineShaderGroupHandleCaptureReplayMixed = rayTracingPipelineShaderGroupHandleCaptureReplayMixed_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & + setRayTracingPipelineTraceRaysIndirect( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingPipelineTraceRaysIndirect = rayTracingPipelineTraceRaysIndirect_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & + setRayTraversalPrimitiveCulling( VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling_ ) VULKAN_HPP_NOEXCEPT + { + rayTraversalPrimitiveCulling = rayTraversalPrimitiveCulling_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + rayTracingPipeline, + rayTracingPipelineShaderGroupHandleCaptureReplay, + rayTracingPipelineShaderGroupHandleCaptureReplayMixed, + rayTracingPipelineTraceRaysIndirect, + rayTraversalPrimitiveCulling ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingPipelineFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingPipeline == rhs.rayTracingPipeline ) && + ( rayTracingPipelineShaderGroupHandleCaptureReplay == rhs.rayTracingPipelineShaderGroupHandleCaptureReplay ) && + ( rayTracingPipelineShaderGroupHandleCaptureReplayMixed == rhs.rayTracingPipelineShaderGroupHandleCaptureReplayMixed ) && + ( rayTracingPipelineTraceRaysIndirect == rhs.rayTracingPipelineTraceRaysIndirect ) && + ( rayTraversalPrimitiveCulling == rhs.rayTraversalPrimitiveCulling ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingPipelineFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.html + struct PhysicalDeviceRayTracingPipelinePropertiesKHR + { + using NativeType = VkPhysicalDeviceRayTracingPipelinePropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPipelinePropertiesKHR( uint32_t shaderGroupHandleSize_ = {}, + uint32_t maxRayRecursionDepth_ = {}, + uint32_t maxShaderGroupStride_ = {}, + uint32_t shaderGroupBaseAlignment_ = {}, + uint32_t shaderGroupHandleCaptureReplaySize_ = {}, + uint32_t maxRayDispatchInvocationCount_ = {}, + uint32_t shaderGroupHandleAlignment_ = {}, + uint32_t maxRayHitAttributeSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderGroupHandleSize{ shaderGroupHandleSize_ } + , maxRayRecursionDepth{ maxRayRecursionDepth_ } + , maxShaderGroupStride{ maxShaderGroupStride_ } + , shaderGroupBaseAlignment{ shaderGroupBaseAlignment_ } + , shaderGroupHandleCaptureReplaySize{ shaderGroupHandleCaptureReplaySize_ } + , maxRayDispatchInvocationCount{ maxRayDispatchInvocationCount_ } + , shaderGroupHandleAlignment{ shaderGroupHandleAlignment_ } + , maxRayHitAttributeSize{ maxRayHitAttributeSize_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRayTracingPipelinePropertiesKHR( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingPipelinePropertiesKHR( VkPhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingPipelinePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingPipelinePropertiesKHR & operator=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingPipelinePropertiesKHR & operator=( VkPhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderGroupHandleSize, + maxRayRecursionDepth, + maxShaderGroupStride, + shaderGroupBaseAlignment, + shaderGroupHandleCaptureReplaySize, + maxRayDispatchInvocationCount, + shaderGroupHandleAlignment, + maxRayHitAttributeSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingPipelinePropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderGroupHandleSize == rhs.shaderGroupHandleSize ) && + ( maxRayRecursionDepth == rhs.maxRayRecursionDepth ) && ( maxShaderGroupStride == rhs.maxShaderGroupStride ) && + ( shaderGroupBaseAlignment == rhs.shaderGroupBaseAlignment ) && ( shaderGroupHandleCaptureReplaySize == rhs.shaderGroupHandleCaptureReplaySize ) && + ( maxRayDispatchInvocationCount == rhs.maxRayDispatchInvocationCount ) && ( shaderGroupHandleAlignment == rhs.shaderGroupHandleAlignment ) && + ( maxRayHitAttributeSize == rhs.maxRayHitAttributeSize ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR; + void * pNext = {}; + uint32_t shaderGroupHandleSize = {}; + uint32_t maxRayRecursionDepth = {}; + uint32_t maxShaderGroupStride = {}; + uint32_t shaderGroupBaseAlignment = {}; + uint32_t shaderGroupHandleCaptureReplaySize = {}; + uint32_t maxRayDispatchInvocationCount = {}; + uint32_t shaderGroupHandleAlignment = {}; + uint32_t maxRayHitAttributeSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingPipelinePropertiesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR.html + struct PhysicalDeviceRayTracingPositionFetchFeaturesKHR + { + using NativeType = VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPositionFetchFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPositionFetchFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPositionFetch_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingPositionFetch{ rayTracingPositionFetch_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRayTracingPositionFetchFeaturesKHR( PhysicalDeviceRayTracingPositionFetchFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingPositionFetchFeaturesKHR( VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingPositionFetchFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingPositionFetchFeaturesKHR & operator=( PhysicalDeviceRayTracingPositionFetchFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingPositionFetchFeaturesKHR & operator=( VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPositionFetchFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPositionFetchFeaturesKHR & + setRayTracingPositionFetch( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPositionFetch_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingPositionFetch = rayTracingPositionFetch_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayTracingPositionFetch ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingPositionFetchFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingPositionFetchFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingPositionFetch == rhs.rayTracingPositionFetch ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingPositionFetchFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPositionFetchFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingPositionFetch = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingPositionFetchFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingPropertiesNV.html + struct PhysicalDeviceRayTracingPropertiesNV + { + using NativeType = VkPhysicalDeviceRayTracingPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPropertiesNV( uint32_t shaderGroupHandleSize_ = {}, + uint32_t maxRecursionDepth_ = {}, + uint32_t maxShaderGroupStride_ = {}, + uint32_t shaderGroupBaseAlignment_ = {}, + uint64_t maxGeometryCount_ = {}, + uint64_t maxInstanceCount_ = {}, + uint64_t maxTriangleCount_ = {}, + uint32_t maxDescriptorSetAccelerationStructures_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderGroupHandleSize{ shaderGroupHandleSize_ } + , maxRecursionDepth{ maxRecursionDepth_ } + , maxShaderGroupStride{ maxShaderGroupStride_ } + , shaderGroupBaseAlignment{ shaderGroupBaseAlignment_ } + , maxGeometryCount{ maxGeometryCount_ } + , maxInstanceCount{ maxInstanceCount_ } + , maxTriangleCount{ maxTriangleCount_ } + , maxDescriptorSetAccelerationStructures{ maxDescriptorSetAccelerationStructures_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingPropertiesNV( PhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingPropertiesNV( VkPhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingPropertiesNV & operator=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingPropertiesNV & operator=( VkPhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceRayTracingPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderGroupHandleSize, + maxRecursionDepth, + maxShaderGroupStride, + shaderGroupBaseAlignment, + maxGeometryCount, + maxInstanceCount, + maxTriangleCount, + maxDescriptorSetAccelerationStructures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderGroupHandleSize == rhs.shaderGroupHandleSize ) && + ( maxRecursionDepth == rhs.maxRecursionDepth ) && ( maxShaderGroupStride == rhs.maxShaderGroupStride ) && + ( shaderGroupBaseAlignment == rhs.shaderGroupBaseAlignment ) && ( maxGeometryCount == rhs.maxGeometryCount ) && + ( maxInstanceCount == rhs.maxInstanceCount ) && ( maxTriangleCount == rhs.maxTriangleCount ) && + ( maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingPropertiesNV; + void * pNext = {}; + uint32_t shaderGroupHandleSize = {}; + uint32_t maxRecursionDepth = {}; + uint32_t maxShaderGroupStride = {}; + uint32_t shaderGroupBaseAlignment = {}; + uint64_t maxGeometryCount = {}; + uint64_t maxInstanceCount = {}; + uint64_t maxTriangleCount = {}; + uint32_t maxDescriptorSetAccelerationStructures = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRayTracingValidationFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRayTracingValidationFeaturesNV.html + struct PhysicalDeviceRayTracingValidationFeaturesNV + { + using NativeType = VkPhysicalDeviceRayTracingValidationFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRayTracingValidationFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingValidationFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 rayTracingValidation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rayTracingValidation{ rayTracingValidation_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRayTracingValidationFeaturesNV( PhysicalDeviceRayTracingValidationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRayTracingValidationFeaturesNV( VkPhysicalDeviceRayTracingValidationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRayTracingValidationFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRayTracingValidationFeaturesNV & operator=( PhysicalDeviceRayTracingValidationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRayTracingValidationFeaturesNV & operator=( VkPhysicalDeviceRayTracingValidationFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingValidationFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingValidationFeaturesNV & + setRayTracingValidation( VULKAN_HPP_NAMESPACE::Bool32 rayTracingValidation_ ) VULKAN_HPP_NOEXCEPT + { + rayTracingValidation = rayTracingValidation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRayTracingValidationFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingValidationFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingValidationFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRayTracingValidationFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rayTracingValidation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRayTracingValidationFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRayTracingValidationFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingValidation == rhs.rayTracingValidation ); +# endif + } + + bool operator!=( PhysicalDeviceRayTracingValidationFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRayTracingValidationFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 rayTracingValidation = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRayTracingValidationFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG.html + struct PhysicalDeviceRelaxedLineRasterizationFeaturesIMG + { + using NativeType = VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRelaxedLineRasterizationFeaturesIMG( VULKAN_HPP_NAMESPACE::Bool32 relaxedLineRasterization_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , relaxedLineRasterization{ relaxedLineRasterization_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRelaxedLineRasterizationFeaturesIMG( PhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRelaxedLineRasterizationFeaturesIMG( VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRelaxedLineRasterizationFeaturesIMG( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRelaxedLineRasterizationFeaturesIMG & + operator=( PhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRelaxedLineRasterizationFeaturesIMG & operator=( VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRelaxedLineRasterizationFeaturesIMG & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRelaxedLineRasterizationFeaturesIMG & + setRelaxedLineRasterization( VULKAN_HPP_NAMESPACE::Bool32 relaxedLineRasterization_ ) VULKAN_HPP_NOEXCEPT + { + relaxedLineRasterization = relaxedLineRasterization_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, relaxedLineRasterization ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & ) const = default; +#else + bool operator==( PhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( relaxedLineRasterization == rhs.relaxedLineRasterization ); +# endif + } + + bool operator!=( PhysicalDeviceRelaxedLineRasterizationFeaturesIMG const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 relaxedLineRasterization = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRelaxedLineRasterizationFeaturesIMG; + }; + + // wrapper struct for struct VkPhysicalDeviceRenderPassStripedFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRenderPassStripedFeaturesARM.html + struct PhysicalDeviceRenderPassStripedFeaturesARM + { + using NativeType = VkPhysicalDeviceRenderPassStripedFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRenderPassStripedFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRenderPassStripedFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 renderPassStriped_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , renderPassStriped{ renderPassStriped_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRenderPassStripedFeaturesARM( PhysicalDeviceRenderPassStripedFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRenderPassStripedFeaturesARM( VkPhysicalDeviceRenderPassStripedFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRenderPassStripedFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRenderPassStripedFeaturesARM & operator=( PhysicalDeviceRenderPassStripedFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRenderPassStripedFeaturesARM & operator=( VkPhysicalDeviceRenderPassStripedFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRenderPassStripedFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRenderPassStripedFeaturesARM & + setRenderPassStriped( VULKAN_HPP_NAMESPACE::Bool32 renderPassStriped_ ) VULKAN_HPP_NOEXCEPT + { + renderPassStriped = renderPassStriped_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRenderPassStripedFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRenderPassStripedFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRenderPassStripedFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRenderPassStripedFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, renderPassStriped ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRenderPassStripedFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceRenderPassStripedFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPassStriped == rhs.renderPassStriped ); +# endif + } + + bool operator!=( PhysicalDeviceRenderPassStripedFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRenderPassStripedFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 renderPassStriped = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRenderPassStripedFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceRenderPassStripedPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRenderPassStripedPropertiesARM.html + struct PhysicalDeviceRenderPassStripedPropertiesARM + { + using NativeType = VkPhysicalDeviceRenderPassStripedPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRenderPassStripedPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRenderPassStripedPropertiesARM( VULKAN_HPP_NAMESPACE::Extent2D renderPassStripeGranularity_ = {}, + uint32_t maxRenderPassStripes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , renderPassStripeGranularity{ renderPassStripeGranularity_ } + , maxRenderPassStripes{ maxRenderPassStripes_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRenderPassStripedPropertiesARM( PhysicalDeviceRenderPassStripedPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRenderPassStripedPropertiesARM( VkPhysicalDeviceRenderPassStripedPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRenderPassStripedPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRenderPassStripedPropertiesARM & operator=( PhysicalDeviceRenderPassStripedPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRenderPassStripedPropertiesARM & operator=( VkPhysicalDeviceRenderPassStripedPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceRenderPassStripedPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRenderPassStripedPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRenderPassStripedPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRenderPassStripedPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, renderPassStripeGranularity, maxRenderPassStripes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRenderPassStripedPropertiesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceRenderPassStripedPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPassStripeGranularity == rhs.renderPassStripeGranularity ) && + ( maxRenderPassStripes == rhs.maxRenderPassStripes ); +# endif + } + + bool operator!=( PhysicalDeviceRenderPassStripedPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRenderPassStripedPropertiesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D renderPassStripeGranularity = {}; + uint32_t maxRenderPassStripes = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRenderPassStripedPropertiesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.html + struct PhysicalDeviceRepresentativeFragmentTestFeaturesNV + { + using NativeType = VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRepresentativeFragmentTestFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , representativeFragmentTest{ representativeFragmentTest_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceRepresentativeFragmentTestFeaturesNV( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRepresentativeFragmentTestFeaturesNV( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRepresentativeFragmentTestFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRepresentativeFragmentTestFeaturesNV & + operator=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRepresentativeFragmentTestFeaturesNV & operator=( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV & + setRepresentativeFragmentTest( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest_ ) VULKAN_HPP_NOEXCEPT + { + representativeFragmentTest = representativeFragmentTest_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, representativeFragmentTest ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( representativeFragmentTest == rhs.representativeFragmentTest ); +# endif + } + + bool operator!=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRepresentativeFragmentTestFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceRobustness2FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRobustness2FeaturesKHR.html + struct PhysicalDeviceRobustness2FeaturesKHR + { + using NativeType = VkPhysicalDeviceRobustness2FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRobustness2FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , robustBufferAccess2{ robustBufferAccess2_ } + , robustImageAccess2{ robustImageAccess2_ } + , nullDescriptor{ nullDescriptor_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2FeaturesKHR( PhysicalDeviceRobustness2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRobustness2FeaturesKHR( VkPhysicalDeviceRobustness2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRobustness2FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRobustness2FeaturesKHR & operator=( PhysicalDeviceRobustness2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRobustness2FeaturesKHR & operator=( VkPhysicalDeviceRobustness2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesKHR & + setRobustBufferAccess2( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2_ ) VULKAN_HPP_NOEXCEPT + { + robustBufferAccess2 = robustBufferAccess2_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesKHR & setRobustImageAccess2( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2_ ) VULKAN_HPP_NOEXCEPT + { + robustImageAccess2 = robustImageAccess2_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesKHR & setNullDescriptor( VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor_ ) VULKAN_HPP_NOEXCEPT + { + nullDescriptor = nullDescriptor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceRobustness2FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRobustness2FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRobustness2FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRobustness2FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, robustBufferAccess2, robustImageAccess2, nullDescriptor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRobustness2FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRobustness2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustBufferAccess2 == rhs.robustBufferAccess2 ) && + ( robustImageAccess2 == rhs.robustImageAccess2 ) && ( nullDescriptor == rhs.nullDescriptor ); +# endif + } + + bool operator!=( PhysicalDeviceRobustness2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRobustness2FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2 = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2 = {}; + VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRobustness2FeaturesKHR; + }; + + using PhysicalDeviceRobustness2FeaturesEXT = PhysicalDeviceRobustness2FeaturesKHR; + + // wrapper struct for struct VkPhysicalDeviceRobustness2PropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceRobustness2PropertiesKHR.html + struct PhysicalDeviceRobustness2PropertiesKHR + { + using NativeType = VkPhysicalDeviceRobustness2PropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceRobustness2PropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2PropertiesKHR( VULKAN_HPP_NAMESPACE::DeviceSize robustStorageBufferAccessSizeAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize robustUniformBufferAccessSizeAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , robustStorageBufferAccessSizeAlignment{ robustStorageBufferAccessSizeAlignment_ } + , robustUniformBufferAccessSizeAlignment{ robustUniformBufferAccessSizeAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceRobustness2PropertiesKHR( PhysicalDeviceRobustness2PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceRobustness2PropertiesKHR( VkPhysicalDeviceRobustness2PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceRobustness2PropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceRobustness2PropertiesKHR & operator=( PhysicalDeviceRobustness2PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceRobustness2PropertiesKHR & operator=( VkPhysicalDeviceRobustness2PropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceRobustness2PropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRobustness2PropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRobustness2PropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceRobustness2PropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, robustStorageBufferAccessSizeAlignment, robustUniformBufferAccessSizeAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceRobustness2PropertiesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceRobustness2PropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustStorageBufferAccessSizeAlignment == rhs.robustStorageBufferAccessSizeAlignment ) && + ( robustUniformBufferAccessSizeAlignment == rhs.robustUniformBufferAccessSizeAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceRobustness2PropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRobustness2PropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize robustStorageBufferAccessSizeAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize robustUniformBufferAccessSizeAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceRobustness2PropertiesKHR; + }; + + using PhysicalDeviceRobustness2PropertiesEXT = PhysicalDeviceRobustness2PropertiesKHR; + + // wrapper struct for struct VkPhysicalDeviceSampleLocationsPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSampleLocationsPropertiesEXT.html + struct PhysicalDeviceSampleLocationsPropertiesEXT + { + using NativeType = VkPhysicalDeviceSampleLocationsPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSampleLocationsPropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlags sampleLocationSampleCounts_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize_ = {}, + std::array const & sampleLocationCoordinateRange_ = {}, + uint32_t sampleLocationSubPixelBits_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 variableSampleLocations_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sampleLocationSampleCounts{ sampleLocationSampleCounts_ } + , maxSampleLocationGridSize{ maxSampleLocationGridSize_ } + , sampleLocationCoordinateRange{ sampleLocationCoordinateRange_ } + , sampleLocationSubPixelBits{ sampleLocationSubPixelBits_ } + , variableSampleLocations{ variableSampleLocations_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSampleLocationsPropertiesEXT( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSampleLocationsPropertiesEXT( VkPhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSampleLocationsPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSampleLocationsPropertiesEXT & operator=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSampleLocationsPropertiesEXT & operator=( VkPhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSampleLocationsPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSampleLocationsPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSampleLocationsPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSampleLocationsPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + sampleLocationSampleCounts, + maxSampleLocationGridSize, + sampleLocationCoordinateRange, + sampleLocationSubPixelBits, + variableSampleLocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSampleLocationsPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleLocationSampleCounts == rhs.sampleLocationSampleCounts ) && + ( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize ) && ( sampleLocationCoordinateRange == rhs.sampleLocationCoordinateRange ) && + ( sampleLocationSubPixelBits == rhs.sampleLocationSubPixelBits ) && ( variableSampleLocations == rhs.variableSampleLocations ); +# endif + } + + bool operator!=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags sampleLocationSampleCounts = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D sampleLocationCoordinateRange = {}; + uint32_t sampleLocationSubPixelBits = {}; + VULKAN_HPP_NAMESPACE::Bool32 variableSampleLocations = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSampleLocationsPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceSamplerFilterMinmaxProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSamplerFilterMinmaxProperties.html + struct PhysicalDeviceSamplerFilterMinmaxProperties + { + using NativeType = VkPhysicalDeviceSamplerFilterMinmaxProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerFilterMinmaxProperties( VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , filterMinmaxSingleComponentFormats{ filterMinmaxSingleComponentFormats_ } + , filterMinmaxImageComponentMapping{ filterMinmaxImageComponentMapping_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerFilterMinmaxProperties( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSamplerFilterMinmaxProperties( VkPhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSamplerFilterMinmaxProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSamplerFilterMinmaxProperties & operator=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSamplerFilterMinmaxProperties & operator=( VkPhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSamplerFilterMinmaxProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSamplerFilterMinmaxProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSamplerFilterMinmaxProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSamplerFilterMinmaxProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, filterMinmaxSingleComponentFormats, filterMinmaxImageComponentMapping ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSamplerFilterMinmaxProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats ) && + ( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping ); +# endif + } + + bool operator!=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats = {}; + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSamplerFilterMinmaxProperties; + }; + + using PhysicalDeviceSamplerFilterMinmaxPropertiesEXT = PhysicalDeviceSamplerFilterMinmaxProperties; + + // wrapper struct for struct VkPhysicalDeviceSamplerYcbcrConversionFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSamplerYcbcrConversionFeatures.html + struct PhysicalDeviceSamplerYcbcrConversionFeatures + { + using NativeType = VkPhysicalDeviceSamplerYcbcrConversionFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerYcbcrConversionFeatures( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , samplerYcbcrConversion{ samplerYcbcrConversion_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSamplerYcbcrConversionFeatures( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSamplerYcbcrConversionFeatures( VkPhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSamplerYcbcrConversionFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSamplerYcbcrConversionFeatures & operator=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSamplerYcbcrConversionFeatures & operator=( VkPhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures & + setSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ ) VULKAN_HPP_NOEXCEPT + { + samplerYcbcrConversion = samplerYcbcrConversion_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSamplerYcbcrConversionFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSamplerYcbcrConversionFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSamplerYcbcrConversionFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSamplerYcbcrConversionFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, samplerYcbcrConversion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSamplerYcbcrConversionFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( samplerYcbcrConversion == rhs.samplerYcbcrConversion ); +# endif + } + + bool operator!=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSamplerYcbcrConversionFeatures; + }; + + using PhysicalDeviceSamplerYcbcrConversionFeaturesKHR = PhysicalDeviceSamplerYcbcrConversionFeatures; + + // wrapper struct for struct VkPhysicalDeviceScalarBlockLayoutFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceScalarBlockLayoutFeatures.html + struct PhysicalDeviceScalarBlockLayoutFeatures + { + using NativeType = VkPhysicalDeviceScalarBlockLayoutFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceScalarBlockLayoutFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceScalarBlockLayoutFeatures( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , scalarBlockLayout{ scalarBlockLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceScalarBlockLayoutFeatures( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceScalarBlockLayoutFeatures( VkPhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceScalarBlockLayoutFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceScalarBlockLayoutFeatures & operator=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceScalarBlockLayoutFeatures & operator=( VkPhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures & + setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT + { + scalarBlockLayout = scalarBlockLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceScalarBlockLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceScalarBlockLayoutFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceScalarBlockLayoutFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceScalarBlockLayoutFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, scalarBlockLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceScalarBlockLayoutFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( scalarBlockLayout == rhs.scalarBlockLayout ); +# endif + } + + bool operator!=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceScalarBlockLayoutFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceScalarBlockLayoutFeatures; + }; + + using PhysicalDeviceScalarBlockLayoutFeaturesEXT = PhysicalDeviceScalarBlockLayoutFeatures; + + // wrapper struct for struct VkPhysicalDeviceSchedulingControlsFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSchedulingControlsFeaturesARM.html + struct PhysicalDeviceSchedulingControlsFeaturesARM + { + using NativeType = VkPhysicalDeviceSchedulingControlsFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSchedulingControlsFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSchedulingControlsFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 schedulingControls_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , schedulingControls{ schedulingControls_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSchedulingControlsFeaturesARM( PhysicalDeviceSchedulingControlsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSchedulingControlsFeaturesARM( VkPhysicalDeviceSchedulingControlsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSchedulingControlsFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSchedulingControlsFeaturesARM & operator=( PhysicalDeviceSchedulingControlsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSchedulingControlsFeaturesARM & operator=( VkPhysicalDeviceSchedulingControlsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSchedulingControlsFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSchedulingControlsFeaturesARM & + setSchedulingControls( VULKAN_HPP_NAMESPACE::Bool32 schedulingControls_ ) VULKAN_HPP_NOEXCEPT + { + schedulingControls = schedulingControls_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSchedulingControlsFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSchedulingControlsFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSchedulingControlsFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSchedulingControlsFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, schedulingControls ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSchedulingControlsFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceSchedulingControlsFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( schedulingControls == rhs.schedulingControls ); +# endif + } + + bool operator!=( PhysicalDeviceSchedulingControlsFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSchedulingControlsFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 schedulingControls = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSchedulingControlsFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceSchedulingControlsPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSchedulingControlsPropertiesARM.html + struct PhysicalDeviceSchedulingControlsPropertiesARM + { + using NativeType = VkPhysicalDeviceSchedulingControlsPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSchedulingControlsPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceSchedulingControlsPropertiesARM( VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , schedulingControlsFlags{ schedulingControlsFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceSchedulingControlsPropertiesARM( PhysicalDeviceSchedulingControlsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSchedulingControlsPropertiesARM( VkPhysicalDeviceSchedulingControlsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSchedulingControlsPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSchedulingControlsPropertiesARM & operator=( PhysicalDeviceSchedulingControlsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSchedulingControlsPropertiesARM & operator=( VkPhysicalDeviceSchedulingControlsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSchedulingControlsPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSchedulingControlsPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSchedulingControlsPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSchedulingControlsPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, schedulingControlsFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSchedulingControlsPropertiesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceSchedulingControlsPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( schedulingControlsFlags == rhs.schedulingControlsFlags ); +# endif + } + + bool operator!=( PhysicalDeviceSchedulingControlsPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSchedulingControlsPropertiesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSchedulingControlsPropertiesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.html + struct PhysicalDeviceSeparateDepthStencilLayoutsFeatures + { + using NativeType = VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSeparateDepthStencilLayoutsFeatures( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , separateDepthStencilLayouts{ separateDepthStencilLayouts_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceSeparateDepthStencilLayoutsFeatures( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSeparateDepthStencilLayoutsFeatures( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSeparateDepthStencilLayoutsFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSeparateDepthStencilLayoutsFeatures & + operator=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSeparateDepthStencilLayoutsFeatures & operator=( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures & + setSeparateDepthStencilLayouts( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ ) VULKAN_HPP_NOEXCEPT + { + separateDepthStencilLayouts = separateDepthStencilLayouts_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, separateDepthStencilLayouts ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( separateDepthStencilLayouts == rhs.separateDepthStencilLayouts ); +# endif + } + + bool operator!=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSeparateDepthStencilLayoutsFeatures; + }; + + using PhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR = PhysicalDeviceSeparateDepthStencilLayoutsFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV.html + struct PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV + { + using NativeType = VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16VectorAtomics_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderFloat16VectorAtomics{ shaderFloat16VectorAtomics_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV( PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV( VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV & + operator=( PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV & operator=( VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV & + setShaderFloat16VectorAtomics( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16VectorAtomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloat16VectorAtomics = shaderFloat16VectorAtomics_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderFloat16VectorAtomics ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderFloat16VectorAtomics == rhs.shaderFloat16VectorAtomics ); +# endif + } + + bool operator!=( PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16VectorAtomics = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.html + struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloat2FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderBufferFloat16Atomics{ shaderBufferFloat16Atomics_ } + , shaderBufferFloat16AtomicAdd{ shaderBufferFloat16AtomicAdd_ } + , shaderBufferFloat16AtomicMinMax{ shaderBufferFloat16AtomicMinMax_ } + , shaderBufferFloat32AtomicMinMax{ shaderBufferFloat32AtomicMinMax_ } + , shaderBufferFloat64AtomicMinMax{ shaderBufferFloat64AtomicMinMax_ } + , shaderSharedFloat16Atomics{ shaderSharedFloat16Atomics_ } + , shaderSharedFloat16AtomicAdd{ shaderSharedFloat16AtomicAdd_ } + , shaderSharedFloat16AtomicMinMax{ shaderSharedFloat16AtomicMinMax_ } + , shaderSharedFloat32AtomicMinMax{ shaderSharedFloat32AtomicMinMax_ } + , shaderSharedFloat64AtomicMinMax{ shaderSharedFloat64AtomicMinMax_ } + , shaderImageFloat32AtomicMinMax{ shaderImageFloat32AtomicMinMax_ } + , sparseImageFloat32AtomicMinMax{ sparseImageFloat32AtomicMinMax_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloat2FeaturesEXT( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderAtomicFloat2FeaturesEXT( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderAtomicFloat2FeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderAtomicFloat2FeaturesEXT & operator=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderAtomicFloat2FeaturesEXT & operator=( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderBufferFloat16Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat16Atomics = shaderBufferFloat16Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderBufferFloat16AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat16AtomicAdd = shaderBufferFloat16AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderBufferFloat16AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat16AtomicMinMax = shaderBufferFloat16AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderBufferFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat32AtomicMinMax = shaderBufferFloat32AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderBufferFloat64AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat64AtomicMinMax = shaderBufferFloat64AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderSharedFloat16Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat16Atomics = shaderSharedFloat16Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderSharedFloat16AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat16AtomicAdd = shaderSharedFloat16AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderSharedFloat16AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat16AtomicMinMax = shaderSharedFloat16AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderSharedFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat32AtomicMinMax = shaderSharedFloat32AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderSharedFloat64AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat64AtomicMinMax = shaderSharedFloat64AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setShaderImageFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + shaderImageFloat32AtomicMinMax = shaderImageFloat32AtomicMinMax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & + setSparseImageFloat32AtomicMinMax( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT + { + sparseImageFloat32AtomicMinMax = sparseImageFloat32AtomicMinMax_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderBufferFloat16Atomics, + shaderBufferFloat16AtomicAdd, + shaderBufferFloat16AtomicMinMax, + shaderBufferFloat32AtomicMinMax, + shaderBufferFloat64AtomicMinMax, + shaderSharedFloat16Atomics, + shaderSharedFloat16AtomicAdd, + shaderSharedFloat16AtomicMinMax, + shaderSharedFloat32AtomicMinMax, + shaderSharedFloat64AtomicMinMax, + shaderImageFloat32AtomicMinMax, + sparseImageFloat32AtomicMinMax ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBufferFloat16Atomics == rhs.shaderBufferFloat16Atomics ) && + ( shaderBufferFloat16AtomicAdd == rhs.shaderBufferFloat16AtomicAdd ) && + ( shaderBufferFloat16AtomicMinMax == rhs.shaderBufferFloat16AtomicMinMax ) && + ( shaderBufferFloat32AtomicMinMax == rhs.shaderBufferFloat32AtomicMinMax ) && + ( shaderBufferFloat64AtomicMinMax == rhs.shaderBufferFloat64AtomicMinMax ) && ( shaderSharedFloat16Atomics == rhs.shaderSharedFloat16Atomics ) && + ( shaderSharedFloat16AtomicAdd == rhs.shaderSharedFloat16AtomicAdd ) && + ( shaderSharedFloat16AtomicMinMax == rhs.shaderSharedFloat16AtomicMinMax ) && + ( shaderSharedFloat32AtomicMinMax == rhs.shaderSharedFloat32AtomicMinMax ) && + ( shaderSharedFloat64AtomicMinMax == rhs.shaderSharedFloat64AtomicMinMax ) && + ( shaderImageFloat32AtomicMinMax == rhs.shaderImageFloat32AtomicMinMax ) && + ( sparseImageFloat32AtomicMinMax == rhs.sparseImageFloat32AtomicMinMax ); +# endif + } + + bool operator!=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderAtomicFloat2FeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.html + struct PhysicalDeviceShaderAtomicFloatFeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderAtomicFloatFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloatFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderBufferFloat32Atomics{ shaderBufferFloat32Atomics_ } + , shaderBufferFloat32AtomicAdd{ shaderBufferFloat32AtomicAdd_ } + , shaderBufferFloat64Atomics{ shaderBufferFloat64Atomics_ } + , shaderBufferFloat64AtomicAdd{ shaderBufferFloat64AtomicAdd_ } + , shaderSharedFloat32Atomics{ shaderSharedFloat32Atomics_ } + , shaderSharedFloat32AtomicAdd{ shaderSharedFloat32AtomicAdd_ } + , shaderSharedFloat64Atomics{ shaderSharedFloat64Atomics_ } + , shaderSharedFloat64AtomicAdd{ shaderSharedFloat64AtomicAdd_ } + , shaderImageFloat32Atomics{ shaderImageFloat32Atomics_ } + , shaderImageFloat32AtomicAdd{ shaderImageFloat32AtomicAdd_ } + , sparseImageFloat32Atomics{ sparseImageFloat32Atomics_ } + , sparseImageFloat32AtomicAdd{ sparseImageFloat32AtomicAdd_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicFloatFeaturesEXT( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderAtomicFloatFeaturesEXT( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderAtomicFloatFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderAtomicFloatFeaturesEXT & operator=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderAtomicFloatFeaturesEXT & operator=( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderBufferFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat32Atomics = shaderBufferFloat32Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderBufferFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat32AtomicAdd = shaderBufferFloat32AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderBufferFloat64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat64Atomics = shaderBufferFloat64Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderBufferFloat64AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferFloat64AtomicAdd = shaderBufferFloat64AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderSharedFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat32Atomics = shaderSharedFloat32Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderSharedFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat32AtomicAdd = shaderSharedFloat32AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderSharedFloat64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat64Atomics = shaderSharedFloat64Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderSharedFloat64AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedFloat64AtomicAdd = shaderSharedFloat64AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderImageFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderImageFloat32Atomics = shaderImageFloat32Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setShaderImageFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + shaderImageFloat32AtomicAdd = shaderImageFloat32AtomicAdd_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setSparseImageFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT + { + sparseImageFloat32Atomics = sparseImageFloat32Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & + setSparseImageFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT + { + sparseImageFloat32AtomicAdd = sparseImageFloat32AtomicAdd_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderBufferFloat32Atomics, + shaderBufferFloat32AtomicAdd, + shaderBufferFloat64Atomics, + shaderBufferFloat64AtomicAdd, + shaderSharedFloat32Atomics, + shaderSharedFloat32AtomicAdd, + shaderSharedFloat64Atomics, + shaderSharedFloat64AtomicAdd, + shaderImageFloat32Atomics, + shaderImageFloat32AtomicAdd, + sparseImageFloat32Atomics, + sparseImageFloat32AtomicAdd ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBufferFloat32Atomics == rhs.shaderBufferFloat32Atomics ) && + ( shaderBufferFloat32AtomicAdd == rhs.shaderBufferFloat32AtomicAdd ) && ( shaderBufferFloat64Atomics == rhs.shaderBufferFloat64Atomics ) && + ( shaderBufferFloat64AtomicAdd == rhs.shaderBufferFloat64AtomicAdd ) && ( shaderSharedFloat32Atomics == rhs.shaderSharedFloat32Atomics ) && + ( shaderSharedFloat32AtomicAdd == rhs.shaderSharedFloat32AtomicAdd ) && ( shaderSharedFloat64Atomics == rhs.shaderSharedFloat64Atomics ) && + ( shaderSharedFloat64AtomicAdd == rhs.shaderSharedFloat64AtomicAdd ) && ( shaderImageFloat32Atomics == rhs.shaderImageFloat32Atomics ) && + ( shaderImageFloat32AtomicAdd == rhs.shaderImageFloat32AtomicAdd ) && ( sparseImageFloat32Atomics == rhs.sparseImageFloat32Atomics ) && + ( sparseImageFloat32AtomicAdd == rhs.sparseImageFloat32AtomicAdd ); +# endif + } + + bool operator!=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderAtomicFloatFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderAtomicInt64Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderAtomicInt64Features.html + struct PhysicalDeviceShaderAtomicInt64Features + { + using NativeType = VkPhysicalDeviceShaderAtomicInt64Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderAtomicInt64Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicInt64Features( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderBufferInt64Atomics{ shaderBufferInt64Atomics_ } + , shaderSharedInt64Atomics{ shaderSharedInt64Atomics_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderAtomicInt64Features( PhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderAtomicInt64Features( VkPhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderAtomicInt64Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderAtomicInt64Features & operator=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderAtomicInt64Features & operator=( VkPhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & + setShaderBufferInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferInt64Atomics = shaderBufferInt64Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & + setShaderSharedInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedInt64Atomics = shaderSharedInt64Atomics_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderAtomicInt64Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicInt64Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicInt64Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderAtomicInt64Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderBufferInt64Atomics, shaderSharedInt64Atomics ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderAtomicInt64Features const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderAtomicInt64Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics ) && + ( shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics ); +# endif + } + + bool operator!=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderAtomicInt64Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderAtomicInt64Features; + }; + + using PhysicalDeviceShaderAtomicInt64FeaturesKHR = PhysicalDeviceShaderAtomicInt64Features; + + // wrapper struct for struct VkPhysicalDeviceShaderBfloat16FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderBfloat16FeaturesKHR.html + struct PhysicalDeviceShaderBfloat16FeaturesKHR + { + using NativeType = VkPhysicalDeviceShaderBfloat16FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderBfloat16FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderBfloat16FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16Type_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16DotProduct_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16CooperativeMatrix_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderBFloat16Type{ shaderBFloat16Type_ } + , shaderBFloat16DotProduct{ shaderBFloat16DotProduct_ } + , shaderBFloat16CooperativeMatrix{ shaderBFloat16CooperativeMatrix_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderBfloat16FeaturesKHR( PhysicalDeviceShaderBfloat16FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderBfloat16FeaturesKHR( VkPhysicalDeviceShaderBfloat16FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderBfloat16FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderBfloat16FeaturesKHR & operator=( PhysicalDeviceShaderBfloat16FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderBfloat16FeaturesKHR & operator=( VkPhysicalDeviceShaderBfloat16FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderBfloat16FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderBfloat16FeaturesKHR & + setShaderBFloat16Type( VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16Type_ ) VULKAN_HPP_NOEXCEPT + { + shaderBFloat16Type = shaderBFloat16Type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderBfloat16FeaturesKHR & + setShaderBFloat16DotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16DotProduct_ ) VULKAN_HPP_NOEXCEPT + { + shaderBFloat16DotProduct = shaderBFloat16DotProduct_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderBfloat16FeaturesKHR & + setShaderBFloat16CooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16CooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT + { + shaderBFloat16CooperativeMatrix = shaderBFloat16CooperativeMatrix_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderBfloat16FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderBfloat16FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderBfloat16FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderBfloat16FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderBFloat16Type, shaderBFloat16DotProduct, shaderBFloat16CooperativeMatrix ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderBfloat16FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderBfloat16FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBFloat16Type == rhs.shaderBFloat16Type ) && + ( shaderBFloat16DotProduct == rhs.shaderBFloat16DotProduct ) && ( shaderBFloat16CooperativeMatrix == rhs.shaderBFloat16CooperativeMatrix ); +# endif + } + + bool operator!=( PhysicalDeviceShaderBfloat16FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderBfloat16FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16Type = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16DotProduct = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBFloat16CooperativeMatrix = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderBfloat16FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderClockFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderClockFeaturesKHR.html + struct PhysicalDeviceShaderClockFeaturesKHR + { + using NativeType = VkPhysicalDeviceShaderClockFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderClockFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderClockFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderSubgroupClock{ shaderSubgroupClock_ } + , shaderDeviceClock{ shaderDeviceClock_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderClockFeaturesKHR( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderClockFeaturesKHR( VkPhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderClockFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderClockFeaturesKHR & operator=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderClockFeaturesKHR & operator=( VkPhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & + setShaderSubgroupClock( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupClock = shaderSubgroupClock_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & setShaderDeviceClock( VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock_ ) VULKAN_HPP_NOEXCEPT + { + shaderDeviceClock = shaderDeviceClock_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderClockFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderClockFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderClockFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderClockFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderSubgroupClock, shaderDeviceClock ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderClockFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupClock == rhs.shaderSubgroupClock ) && + ( shaderDeviceClock == rhs.shaderDeviceClock ); +# endif + } + + bool operator!=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderClockFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderClockFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM.html + struct PhysicalDeviceShaderCoreBuiltinsFeaturesARM + { + using NativeType = VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCoreBuiltinsFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreBuiltinsFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 shaderCoreBuiltins_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderCoreBuiltins{ shaderCoreBuiltins_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreBuiltinsFeaturesARM( PhysicalDeviceShaderCoreBuiltinsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderCoreBuiltinsFeaturesARM( VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderCoreBuiltinsFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderCoreBuiltinsFeaturesARM & operator=( PhysicalDeviceShaderCoreBuiltinsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderCoreBuiltinsFeaturesARM & operator=( VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderCoreBuiltinsFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderCoreBuiltinsFeaturesARM & + setShaderCoreBuiltins( VULKAN_HPP_NAMESPACE::Bool32 shaderCoreBuiltins_ ) VULKAN_HPP_NOEXCEPT + { + shaderCoreBuiltins = shaderCoreBuiltins_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderCoreBuiltins ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderCoreBuiltinsFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderCoreBuiltinsFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCoreBuiltins == rhs.shaderCoreBuiltins ); +# endif + } + + bool operator!=( PhysicalDeviceShaderCoreBuiltinsFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCoreBuiltinsFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderCoreBuiltins = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderCoreBuiltinsFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.html + struct PhysicalDeviceShaderCoreBuiltinsPropertiesARM + { + using NativeType = VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCoreBuiltinsPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreBuiltinsPropertiesARM( uint64_t shaderCoreMask_ = {}, + uint32_t shaderCoreCount_ = {}, + uint32_t shaderWarpsPerCore_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderCoreMask{ shaderCoreMask_ } + , shaderCoreCount{ shaderCoreCount_ } + , shaderWarpsPerCore{ shaderWarpsPerCore_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderCoreBuiltinsPropertiesARM( PhysicalDeviceShaderCoreBuiltinsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderCoreBuiltinsPropertiesARM( VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderCoreBuiltinsPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderCoreBuiltinsPropertiesARM & operator=( PhysicalDeviceShaderCoreBuiltinsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderCoreBuiltinsPropertiesARM & operator=( VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderCoreMask, shaderCoreCount, shaderWarpsPerCore ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderCoreBuiltinsPropertiesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderCoreBuiltinsPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCoreMask == rhs.shaderCoreMask ) && ( shaderCoreCount == rhs.shaderCoreCount ) && + ( shaderWarpsPerCore == rhs.shaderWarpsPerCore ); +# endif + } + + bool operator!=( PhysicalDeviceShaderCoreBuiltinsPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCoreBuiltinsPropertiesARM; + void * pNext = {}; + uint64_t shaderCoreMask = {}; + uint32_t shaderCoreCount = {}; + uint32_t shaderWarpsPerCore = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderCoreBuiltinsPropertiesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderCoreProperties2AMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderCoreProperties2AMD.html + struct PhysicalDeviceShaderCoreProperties2AMD + { + using NativeType = VkPhysicalDeviceShaderCoreProperties2AMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCoreProperties2AMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreProperties2AMD( VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD shaderCoreFeatures_ = {}, + uint32_t activeComputeUnitCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderCoreFeatures{ shaderCoreFeatures_ } + , activeComputeUnitCount{ activeComputeUnitCount_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCoreProperties2AMD( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderCoreProperties2AMD( VkPhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderCoreProperties2AMD( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderCoreProperties2AMD & operator=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderCoreProperties2AMD & operator=( VkPhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderCoreProperties2AMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreProperties2AMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreProperties2AMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCoreProperties2AMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderCoreFeatures, activeComputeUnitCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderCoreProperties2AMD const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCoreFeatures == rhs.shaderCoreFeatures ) && + ( activeComputeUnitCount == rhs.activeComputeUnitCount ); +# endif + } + + bool operator!=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCoreProperties2AMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD shaderCoreFeatures = {}; + uint32_t activeComputeUnitCount = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderCoreProperties2AMD; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderCorePropertiesAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderCorePropertiesAMD.html + struct PhysicalDeviceShaderCorePropertiesAMD + { + using NativeType = VkPhysicalDeviceShaderCorePropertiesAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCorePropertiesAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCorePropertiesAMD( uint32_t shaderEngineCount_ = {}, + uint32_t shaderArraysPerEngineCount_ = {}, + uint32_t computeUnitsPerShaderArray_ = {}, + uint32_t simdPerComputeUnit_ = {}, + uint32_t wavefrontsPerSimd_ = {}, + uint32_t wavefrontSize_ = {}, + uint32_t sgprsPerSimd_ = {}, + uint32_t minSgprAllocation_ = {}, + uint32_t maxSgprAllocation_ = {}, + uint32_t sgprAllocationGranularity_ = {}, + uint32_t vgprsPerSimd_ = {}, + uint32_t minVgprAllocation_ = {}, + uint32_t maxVgprAllocation_ = {}, + uint32_t vgprAllocationGranularity_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderEngineCount{ shaderEngineCount_ } + , shaderArraysPerEngineCount{ shaderArraysPerEngineCount_ } + , computeUnitsPerShaderArray{ computeUnitsPerShaderArray_ } + , simdPerComputeUnit{ simdPerComputeUnit_ } + , wavefrontsPerSimd{ wavefrontsPerSimd_ } + , wavefrontSize{ wavefrontSize_ } + , sgprsPerSimd{ sgprsPerSimd_ } + , minSgprAllocation{ minSgprAllocation_ } + , maxSgprAllocation{ maxSgprAllocation_ } + , sgprAllocationGranularity{ sgprAllocationGranularity_ } + , vgprsPerSimd{ vgprsPerSimd_ } + , minVgprAllocation{ minVgprAllocation_ } + , maxVgprAllocation{ maxVgprAllocation_ } + , vgprAllocationGranularity{ vgprAllocationGranularity_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCorePropertiesAMD( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderCorePropertiesAMD( VkPhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderCorePropertiesAMD( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderCorePropertiesAMD & operator=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderCorePropertiesAMD & operator=( VkPhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderCorePropertiesAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCorePropertiesAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCorePropertiesAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCorePropertiesAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + shaderEngineCount, + shaderArraysPerEngineCount, + computeUnitsPerShaderArray, + simdPerComputeUnit, + wavefrontsPerSimd, + wavefrontSize, + sgprsPerSimd, + minSgprAllocation, + maxSgprAllocation, + sgprAllocationGranularity, + vgprsPerSimd, + minVgprAllocation, + maxVgprAllocation, + vgprAllocationGranularity ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderCorePropertiesAMD const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderEngineCount == rhs.shaderEngineCount ) && + ( shaderArraysPerEngineCount == rhs.shaderArraysPerEngineCount ) && ( computeUnitsPerShaderArray == rhs.computeUnitsPerShaderArray ) && + ( simdPerComputeUnit == rhs.simdPerComputeUnit ) && ( wavefrontsPerSimd == rhs.wavefrontsPerSimd ) && ( wavefrontSize == rhs.wavefrontSize ) && + ( sgprsPerSimd == rhs.sgprsPerSimd ) && ( minSgprAllocation == rhs.minSgprAllocation ) && ( maxSgprAllocation == rhs.maxSgprAllocation ) && + ( sgprAllocationGranularity == rhs.sgprAllocationGranularity ) && ( vgprsPerSimd == rhs.vgprsPerSimd ) && + ( minVgprAllocation == rhs.minVgprAllocation ) && ( maxVgprAllocation == rhs.maxVgprAllocation ) && + ( vgprAllocationGranularity == rhs.vgprAllocationGranularity ); +# endif + } + + bool operator!=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCorePropertiesAMD; + void * pNext = {}; + uint32_t shaderEngineCount = {}; + uint32_t shaderArraysPerEngineCount = {}; + uint32_t computeUnitsPerShaderArray = {}; + uint32_t simdPerComputeUnit = {}; + uint32_t wavefrontsPerSimd = {}; + uint32_t wavefrontSize = {}; + uint32_t sgprsPerSimd = {}; + uint32_t minSgprAllocation = {}; + uint32_t maxSgprAllocation = {}; + uint32_t sgprAllocationGranularity = {}; + uint32_t vgprsPerSimd = {}; + uint32_t minVgprAllocation = {}; + uint32_t maxVgprAllocation = {}; + uint32_t vgprAllocationGranularity = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderCorePropertiesAMD; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderCorePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderCorePropertiesARM.html + struct PhysicalDeviceShaderCorePropertiesARM + { + using NativeType = VkPhysicalDeviceShaderCorePropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderCorePropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCorePropertiesARM( uint32_t pixelRate_ = {}, + uint32_t texelRate_ = {}, + uint32_t fmaRate_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pixelRate{ pixelRate_ } + , texelRate{ texelRate_ } + , fmaRate{ fmaRate_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderCorePropertiesARM( PhysicalDeviceShaderCorePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderCorePropertiesARM( VkPhysicalDeviceShaderCorePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderCorePropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderCorePropertiesARM & operator=( PhysicalDeviceShaderCorePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderCorePropertiesARM & operator=( VkPhysicalDeviceShaderCorePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderCorePropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCorePropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCorePropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderCorePropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pixelRate, texelRate, fmaRate ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderCorePropertiesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderCorePropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pixelRate == rhs.pixelRate ) && ( texelRate == rhs.texelRate ) && ( fmaRate == rhs.fmaRate ); +# endif + } + + bool operator!=( PhysicalDeviceShaderCorePropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderCorePropertiesARM; + void * pNext = {}; + uint32_t pixelRate = {}; + uint32_t texelRate = {}; + uint32_t fmaRate = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderCorePropertiesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures.html + struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures + { + using NativeType = VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDemoteToHelperInvocationFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderDemoteToHelperInvocation{ shaderDemoteToHelperInvocation_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderDemoteToHelperInvocationFeatures( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderDemoteToHelperInvocationFeatures( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderDemoteToHelperInvocationFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderDemoteToHelperInvocationFeatures & + operator=( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderDemoteToHelperInvocationFeatures & operator=( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeatures & + setShaderDemoteToHelperInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ ) VULKAN_HPP_NOEXCEPT + { + shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderDemoteToHelperInvocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation ); +# endif + } + + bool operator!=( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderDemoteToHelperInvocationFeatures; + }; + + using PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderDrawParametersFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderDrawParametersFeatures.html + struct PhysicalDeviceShaderDrawParametersFeatures + { + using NativeType = VkPhysicalDeviceShaderDrawParametersFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderDrawParametersFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDrawParametersFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderDrawParameters{ shaderDrawParameters_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDrawParametersFeatures( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderDrawParametersFeatures( VkPhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderDrawParametersFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderDrawParametersFeatures & operator=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderDrawParametersFeatures & operator=( VkPhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures & + setShaderDrawParameters( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ ) VULKAN_HPP_NOEXCEPT + { + shaderDrawParameters = shaderDrawParameters_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderDrawParametersFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderDrawParametersFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderDrawParametersFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderDrawParametersFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderDrawParameters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderDrawParametersFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderDrawParameters == rhs.shaderDrawParameters ); +# endif + } + + bool operator!=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderDrawParametersFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderDrawParametersFeatures; + }; + + using PhysicalDeviceShaderDrawParameterFeatures = PhysicalDeviceShaderDrawParametersFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.html + struct PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD + { + using NativeType = VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( VULKAN_HPP_NAMESPACE::Bool32 shaderEarlyAndLateFragmentTests_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderEarlyAndLateFragmentTests{ shaderEarlyAndLateFragmentTests_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & + operator=( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & + operator=( VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD & + setShaderEarlyAndLateFragmentTests( VULKAN_HPP_NAMESPACE::Bool32 shaderEarlyAndLateFragmentTests_ ) VULKAN_HPP_NOEXCEPT + { + shaderEarlyAndLateFragmentTests = shaderEarlyAndLateFragmentTests_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderEarlyAndLateFragmentTests ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderEarlyAndLateFragmentTests == rhs.shaderEarlyAndLateFragmentTests ); +# endif + } + + bool operator!=( PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderEarlyAndLateFragmentTests = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDeviceShaderEnqueueFeaturesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderEnqueueFeaturesAMDX.html + struct PhysicalDeviceShaderEnqueueFeaturesAMDX + { + using NativeType = VkPhysicalDeviceShaderEnqueueFeaturesAMDX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderEnqueueFeaturesAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderEnqueueFeaturesAMDX( VULKAN_HPP_NAMESPACE::Bool32 shaderEnqueue_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderMeshEnqueue_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderEnqueue{ shaderEnqueue_ } + , shaderMeshEnqueue{ shaderMeshEnqueue_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderEnqueueFeaturesAMDX( PhysicalDeviceShaderEnqueueFeaturesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderEnqueueFeaturesAMDX( VkPhysicalDeviceShaderEnqueueFeaturesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderEnqueueFeaturesAMDX( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderEnqueueFeaturesAMDX & operator=( PhysicalDeviceShaderEnqueueFeaturesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderEnqueueFeaturesAMDX & operator=( VkPhysicalDeviceShaderEnqueueFeaturesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEnqueueFeaturesAMDX & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEnqueueFeaturesAMDX & setShaderEnqueue( VULKAN_HPP_NAMESPACE::Bool32 shaderEnqueue_ ) VULKAN_HPP_NOEXCEPT + { + shaderEnqueue = shaderEnqueue_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEnqueueFeaturesAMDX & + setShaderMeshEnqueue( VULKAN_HPP_NAMESPACE::Bool32 shaderMeshEnqueue_ ) VULKAN_HPP_NOEXCEPT + { + shaderMeshEnqueue = shaderMeshEnqueue_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderEnqueueFeaturesAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEnqueueFeaturesAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEnqueueFeaturesAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEnqueueFeaturesAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderEnqueue, shaderMeshEnqueue ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderEnqueueFeaturesAMDX const & ) const = default; +# else + bool operator==( PhysicalDeviceShaderEnqueueFeaturesAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderEnqueue == rhs.shaderEnqueue ) && ( shaderMeshEnqueue == rhs.shaderMeshEnqueue ); +# endif + } + + bool operator!=( PhysicalDeviceShaderEnqueueFeaturesAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderEnqueueFeaturesAMDX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderEnqueue = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderMeshEnqueue = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderEnqueueFeaturesAMDX; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPhysicalDeviceShaderEnqueuePropertiesAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderEnqueuePropertiesAMDX.html + struct PhysicalDeviceShaderEnqueuePropertiesAMDX + { + using NativeType = VkPhysicalDeviceShaderEnqueuePropertiesAMDX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderEnqueuePropertiesAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEnqueuePropertiesAMDX( uint32_t maxExecutionGraphDepth_ = {}, + uint32_t maxExecutionGraphShaderOutputNodes_ = {}, + uint32_t maxExecutionGraphShaderPayloadSize_ = {}, + uint32_t maxExecutionGraphShaderPayloadCount_ = {}, + uint32_t executionGraphDispatchAddressAlignment_ = {}, + std::array const & maxExecutionGraphWorkgroupCount_ = {}, + uint32_t maxExecutionGraphWorkgroups_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxExecutionGraphDepth{ maxExecutionGraphDepth_ } + , maxExecutionGraphShaderOutputNodes{ maxExecutionGraphShaderOutputNodes_ } + , maxExecutionGraphShaderPayloadSize{ maxExecutionGraphShaderPayloadSize_ } + , maxExecutionGraphShaderPayloadCount{ maxExecutionGraphShaderPayloadCount_ } + , executionGraphDispatchAddressAlignment{ executionGraphDispatchAddressAlignment_ } + , maxExecutionGraphWorkgroupCount{ maxExecutionGraphWorkgroupCount_ } + , maxExecutionGraphWorkgroups{ maxExecutionGraphWorkgroups_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderEnqueuePropertiesAMDX( PhysicalDeviceShaderEnqueuePropertiesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderEnqueuePropertiesAMDX( VkPhysicalDeviceShaderEnqueuePropertiesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderEnqueuePropertiesAMDX( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderEnqueuePropertiesAMDX & operator=( PhysicalDeviceShaderEnqueuePropertiesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderEnqueuePropertiesAMDX & operator=( VkPhysicalDeviceShaderEnqueuePropertiesAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderEnqueuePropertiesAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEnqueuePropertiesAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEnqueuePropertiesAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderEnqueuePropertiesAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxExecutionGraphDepth, + maxExecutionGraphShaderOutputNodes, + maxExecutionGraphShaderPayloadSize, + maxExecutionGraphShaderPayloadCount, + executionGraphDispatchAddressAlignment, + maxExecutionGraphWorkgroupCount, + maxExecutionGraphWorkgroups ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderEnqueuePropertiesAMDX const & ) const = default; +# else + bool operator==( PhysicalDeviceShaderEnqueuePropertiesAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxExecutionGraphDepth == rhs.maxExecutionGraphDepth ) && + ( maxExecutionGraphShaderOutputNodes == rhs.maxExecutionGraphShaderOutputNodes ) && + ( maxExecutionGraphShaderPayloadSize == rhs.maxExecutionGraphShaderPayloadSize ) && + ( maxExecutionGraphShaderPayloadCount == rhs.maxExecutionGraphShaderPayloadCount ) && + ( executionGraphDispatchAddressAlignment == rhs.executionGraphDispatchAddressAlignment ) && + ( maxExecutionGraphWorkgroupCount == rhs.maxExecutionGraphWorkgroupCount ) && ( maxExecutionGraphWorkgroups == rhs.maxExecutionGraphWorkgroups ); +# endif + } + + bool operator!=( PhysicalDeviceShaderEnqueuePropertiesAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderEnqueuePropertiesAMDX; + void * pNext = {}; + uint32_t maxExecutionGraphDepth = {}; + uint32_t maxExecutionGraphShaderOutputNodes = {}; + uint32_t maxExecutionGraphShaderPayloadSize = {}; + uint32_t maxExecutionGraphShaderPayloadCount = {}; + uint32_t executionGraphDispatchAddressAlignment = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D maxExecutionGraphWorkgroupCount = {}; + uint32_t maxExecutionGraphWorkgroups = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderEnqueuePropertiesAMDX; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkPhysicalDeviceShaderExpectAssumeFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderExpectAssumeFeatures.html + struct PhysicalDeviceShaderExpectAssumeFeatures + { + using NativeType = VkPhysicalDeviceShaderExpectAssumeFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderExpectAssumeFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderExpectAssumeFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderExpectAssume_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderExpectAssume{ shaderExpectAssume_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderExpectAssumeFeatures( PhysicalDeviceShaderExpectAssumeFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderExpectAssumeFeatures( VkPhysicalDeviceShaderExpectAssumeFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderExpectAssumeFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderExpectAssumeFeatures & operator=( PhysicalDeviceShaderExpectAssumeFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderExpectAssumeFeatures & operator=( VkPhysicalDeviceShaderExpectAssumeFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderExpectAssumeFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderExpectAssumeFeatures & + setShaderExpectAssume( VULKAN_HPP_NAMESPACE::Bool32 shaderExpectAssume_ ) VULKAN_HPP_NOEXCEPT + { + shaderExpectAssume = shaderExpectAssume_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderExpectAssumeFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderExpectAssumeFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderExpectAssumeFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderExpectAssumeFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderExpectAssume ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderExpectAssumeFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderExpectAssumeFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderExpectAssume == rhs.shaderExpectAssume ); +# endif + } + + bool operator!=( PhysicalDeviceShaderExpectAssumeFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderExpectAssumeFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderExpectAssume = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderExpectAssumeFeatures; + }; + + using PhysicalDeviceShaderExpectAssumeFeaturesKHR = PhysicalDeviceShaderExpectAssumeFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderFloat16Int8Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderFloat16Int8Features.html + struct PhysicalDeviceShaderFloat16Int8Features + { + using NativeType = VkPhysicalDeviceShaderFloat16Int8Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderFloat16Int8Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloat16Int8Features( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderFloat16{ shaderFloat16_ } + , shaderInt8{ shaderInt8_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloat16Int8Features( PhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderFloat16Int8Features( VkPhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderFloat16Int8Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderFloat16Int8Features & operator=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderFloat16Int8Features & operator=( VkPhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloat16 = shaderFloat16_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT + { + shaderInt8 = shaderInt8_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderFloat16Int8Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloat16Int8Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloat16Int8Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloat16Int8Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderFloat16, shaderInt8 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderFloat16Int8Features const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderFloat16Int8Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderFloat16 == rhs.shaderFloat16 ) && ( shaderInt8 == rhs.shaderInt8 ); +# endif + } + + bool operator!=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderFloat16Int8Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInt8 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderFloat16Int8Features; + }; + + using PhysicalDeviceFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; + using PhysicalDeviceShaderFloat16Int8FeaturesKHR = PhysicalDeviceShaderFloat16Int8Features; + + // wrapper struct for struct VkPhysicalDeviceShaderFloat8FeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderFloat8FeaturesEXT.html + struct PhysicalDeviceShaderFloat8FeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderFloat8FeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderFloat8FeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloat8FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat8_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat8CooperativeMatrix_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderFloat8{ shaderFloat8_ } + , shaderFloat8CooperativeMatrix{ shaderFloat8CooperativeMatrix_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloat8FeaturesEXT( PhysicalDeviceShaderFloat8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderFloat8FeaturesEXT( VkPhysicalDeviceShaderFloat8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderFloat8FeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderFloat8FeaturesEXT & operator=( PhysicalDeviceShaderFloat8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderFloat8FeaturesEXT & operator=( VkPhysicalDeviceShaderFloat8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat8FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat8FeaturesEXT & setShaderFloat8( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat8_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloat8 = shaderFloat8_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat8FeaturesEXT & + setShaderFloat8CooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat8CooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloat8CooperativeMatrix = shaderFloat8CooperativeMatrix_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderFloat8FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloat8FeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloat8FeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloat8FeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderFloat8, shaderFloat8CooperativeMatrix ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderFloat8FeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderFloat8FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderFloat8 == rhs.shaderFloat8 ) && + ( shaderFloat8CooperativeMatrix == rhs.shaderFloat8CooperativeMatrix ); +# endif + } + + bool operator!=( PhysicalDeviceShaderFloat8FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderFloat8FeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat8 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat8CooperativeMatrix = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderFloat8FeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderFloatControls2Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderFloatControls2Features.html + struct PhysicalDeviceShaderFloatControls2Features + { + using NativeType = VkPhysicalDeviceShaderFloatControls2Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderFloatControls2Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloatControls2Features( VULKAN_HPP_NAMESPACE::Bool32 shaderFloatControls2_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderFloatControls2{ shaderFloatControls2_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderFloatControls2Features( PhysicalDeviceShaderFloatControls2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderFloatControls2Features( VkPhysicalDeviceShaderFloatControls2Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderFloatControls2Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderFloatControls2Features & operator=( PhysicalDeviceShaderFloatControls2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderFloatControls2Features & operator=( VkPhysicalDeviceShaderFloatControls2Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloatControls2Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloatControls2Features & + setShaderFloatControls2( VULKAN_HPP_NAMESPACE::Bool32 shaderFloatControls2_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloatControls2 = shaderFloatControls2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderFloatControls2Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloatControls2Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloatControls2Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderFloatControls2Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderFloatControls2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderFloatControls2Features const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderFloatControls2Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderFloatControls2 == rhs.shaderFloatControls2 ); +# endif + } + + bool operator!=( PhysicalDeviceShaderFloatControls2Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderFloatControls2Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloatControls2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderFloatControls2Features; + }; + + using PhysicalDeviceShaderFloatControls2FeaturesKHR = PhysicalDeviceShaderFloatControls2Features; + + // wrapper struct for struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.html + struct PhysicalDeviceShaderImageAtomicInt64FeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderImageInt64Atomics{ shaderImageInt64Atomics_ } + , sparseImageInt64Atomics{ sparseImageInt64Atomics_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderImageAtomicInt64FeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & operator=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & operator=( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & + setShaderImageInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderImageInt64Atomics = shaderImageInt64Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & + setSparseImageInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + sparseImageInt64Atomics = sparseImageInt64Atomics_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderImageInt64Atomics, sparseImageInt64Atomics ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderImageInt64Atomics == rhs.shaderImageInt64Atomics ) && + ( sparseImageInt64Atomics == rhs.sparseImageInt64Atomics ); +# endif + } + + bool operator!=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderImageAtomicInt64FeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderImageFootprintFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderImageFootprintFeaturesNV.html + struct PhysicalDeviceShaderImageFootprintFeaturesNV + { + using NativeType = VkPhysicalDeviceShaderImageFootprintFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderImageFootprintFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 imageFootprint_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageFootprint{ imageFootprint_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderImageFootprintFeaturesNV( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderImageFootprintFeaturesNV( VkPhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderImageFootprintFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderImageFootprintFeaturesNV & operator=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderImageFootprintFeaturesNV & operator=( VkPhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV & setImageFootprint( VULKAN_HPP_NAMESPACE::Bool32 imageFootprint_ ) VULKAN_HPP_NOEXCEPT + { + imageFootprint = imageFootprint_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderImageFootprintFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderImageFootprintFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderImageFootprintFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderImageFootprintFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageFootprint ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderImageFootprintFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageFootprint == rhs.imageFootprint ); +# endif + } + + bool operator!=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 imageFootprint = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderImageFootprintFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderIntegerDotProductFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderIntegerDotProductFeatures.html + struct PhysicalDeviceShaderIntegerDotProductFeatures + { + using NativeType = VkPhysicalDeviceShaderIntegerDotProductFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderIntegerDotProduct{ shaderIntegerDotProduct_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderIntegerDotProductFeatures( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderIntegerDotProductFeatures( VkPhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderIntegerDotProductFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderIntegerDotProductFeatures & operator=( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderIntegerDotProductFeatures & operator=( VkPhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeatures & + setShaderIntegerDotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ ) VULKAN_HPP_NOEXCEPT + { + shaderIntegerDotProduct = shaderIntegerDotProduct_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderIntegerDotProductFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerDotProductFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerDotProductFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerDotProductFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderIntegerDotProduct ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderIntegerDotProductFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderIntegerDotProduct == rhs.shaderIntegerDotProduct ); +# endif + } + + bool operator!=( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderIntegerDotProductFeatures; + }; + + using PhysicalDeviceShaderIntegerDotProductFeaturesKHR = PhysicalDeviceShaderIntegerDotProductFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderIntegerDotProductProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderIntegerDotProductProperties.html + struct PhysicalDeviceShaderIntegerDotProductProperties + { + using NativeType = VkPhysicalDeviceShaderIntegerDotProductProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderIntegerDotProductProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductProperties( + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , integerDotProduct8BitUnsignedAccelerated{ integerDotProduct8BitUnsignedAccelerated_ } + , integerDotProduct8BitSignedAccelerated{ integerDotProduct8BitSignedAccelerated_ } + , integerDotProduct8BitMixedSignednessAccelerated{ integerDotProduct8BitMixedSignednessAccelerated_ } + , integerDotProduct4x8BitPackedUnsignedAccelerated{ integerDotProduct4x8BitPackedUnsignedAccelerated_ } + , integerDotProduct4x8BitPackedSignedAccelerated{ integerDotProduct4x8BitPackedSignedAccelerated_ } + , integerDotProduct4x8BitPackedMixedSignednessAccelerated{ integerDotProduct4x8BitPackedMixedSignednessAccelerated_ } + , integerDotProduct16BitUnsignedAccelerated{ integerDotProduct16BitUnsignedAccelerated_ } + , integerDotProduct16BitSignedAccelerated{ integerDotProduct16BitSignedAccelerated_ } + , integerDotProduct16BitMixedSignednessAccelerated{ integerDotProduct16BitMixedSignednessAccelerated_ } + , integerDotProduct32BitUnsignedAccelerated{ integerDotProduct32BitUnsignedAccelerated_ } + , integerDotProduct32BitSignedAccelerated{ integerDotProduct32BitSignedAccelerated_ } + , integerDotProduct32BitMixedSignednessAccelerated{ integerDotProduct32BitMixedSignednessAccelerated_ } + , integerDotProduct64BitUnsignedAccelerated{ integerDotProduct64BitUnsignedAccelerated_ } + , integerDotProduct64BitSignedAccelerated{ integerDotProduct64BitSignedAccelerated_ } + , integerDotProduct64BitMixedSignednessAccelerated{ integerDotProduct64BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating8BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating8BitSignedAccelerated{ integerDotProductAccumulatingSaturating8BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated{ integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated{ integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ } + , integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating16BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating16BitSignedAccelerated{ integerDotProductAccumulatingSaturating16BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating32BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating32BitSignedAccelerated{ integerDotProductAccumulatingSaturating32BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating64BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating64BitSignedAccelerated{ integerDotProductAccumulatingSaturating64BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderIntegerDotProductProperties( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderIntegerDotProductProperties( VkPhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderIntegerDotProductProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderIntegerDotProductProperties & operator=( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderIntegerDotProductProperties & operator=( VkPhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderIntegerDotProductProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerDotProductProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerDotProductProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerDotProductProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + integerDotProduct8BitUnsignedAccelerated, + integerDotProduct8BitSignedAccelerated, + integerDotProduct8BitMixedSignednessAccelerated, + integerDotProduct4x8BitPackedUnsignedAccelerated, + integerDotProduct4x8BitPackedSignedAccelerated, + integerDotProduct4x8BitPackedMixedSignednessAccelerated, + integerDotProduct16BitUnsignedAccelerated, + integerDotProduct16BitSignedAccelerated, + integerDotProduct16BitMixedSignednessAccelerated, + integerDotProduct32BitUnsignedAccelerated, + integerDotProduct32BitSignedAccelerated, + integerDotProduct32BitMixedSignednessAccelerated, + integerDotProduct64BitUnsignedAccelerated, + integerDotProduct64BitSignedAccelerated, + integerDotProduct64BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating8BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating8BitSignedAccelerated, + integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated, + integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated, + integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating16BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating16BitSignedAccelerated, + integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating32BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating32BitSignedAccelerated, + integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating64BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating64BitSignedAccelerated, + integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderIntegerDotProductProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated ) && + ( integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated ) && + ( integerDotProduct8BitMixedSignednessAccelerated == rhs.integerDotProduct8BitMixedSignednessAccelerated ) && + ( integerDotProduct4x8BitPackedUnsignedAccelerated == rhs.integerDotProduct4x8BitPackedUnsignedAccelerated ) && + ( integerDotProduct4x8BitPackedSignedAccelerated == rhs.integerDotProduct4x8BitPackedSignedAccelerated ) && + ( integerDotProduct4x8BitPackedMixedSignednessAccelerated == rhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated ) && + ( integerDotProduct16BitUnsignedAccelerated == rhs.integerDotProduct16BitUnsignedAccelerated ) && + ( integerDotProduct16BitSignedAccelerated == rhs.integerDotProduct16BitSignedAccelerated ) && + ( integerDotProduct16BitMixedSignednessAccelerated == rhs.integerDotProduct16BitMixedSignednessAccelerated ) && + ( integerDotProduct32BitUnsignedAccelerated == rhs.integerDotProduct32BitUnsignedAccelerated ) && + ( integerDotProduct32BitSignedAccelerated == rhs.integerDotProduct32BitSignedAccelerated ) && + ( integerDotProduct32BitMixedSignednessAccelerated == rhs.integerDotProduct32BitMixedSignednessAccelerated ) && + ( integerDotProduct64BitUnsignedAccelerated == rhs.integerDotProduct64BitUnsignedAccelerated ) && + ( integerDotProduct64BitSignedAccelerated == rhs.integerDotProduct64BitSignedAccelerated ) && + ( integerDotProduct64BitMixedSignednessAccelerated == rhs.integerDotProduct64BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating8BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated == + rhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated == + rhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating16BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating32BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating64BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ); +# endif + } + + bool operator!=( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderIntegerDotProductProperties; + }; + + using PhysicalDeviceShaderIntegerDotProductPropertiesKHR = PhysicalDeviceShaderIntegerDotProductProperties; + + // wrapper struct for struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.html + struct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL + { + using NativeType = VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderIntegerFunctions2{ shaderIntegerFunctions2_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & + operator=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & operator=( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & + setShaderIntegerFunctions2( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2_ ) VULKAN_HPP_NOEXCEPT + { + shaderIntegerFunctions2 = shaderIntegerFunctions2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderIntegerFunctions2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderIntegerFunctions2 == rhs.shaderIntegerFunctions2 ); +# endif + } + + bool operator!=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR.html + struct PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR + { + using NativeType = VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderMaximalReconvergence_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderMaximalReconvergence{ shaderMaximalReconvergence_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR( PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR( VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR & + operator=( PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR & operator=( VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR & + setShaderMaximalReconvergence( VULKAN_HPP_NAMESPACE::Bool32 shaderMaximalReconvergence_ ) VULKAN_HPP_NOEXCEPT + { + shaderMaximalReconvergence = shaderMaximalReconvergence_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderMaximalReconvergence ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderMaximalReconvergence == rhs.shaderMaximalReconvergence ); +# endif + } + + bool operator!=( PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderMaximalReconvergence = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT.html + struct PhysicalDeviceShaderModuleIdentifierFeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderModuleIdentifierFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderModuleIdentifierFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderModuleIdentifier_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderModuleIdentifier{ shaderModuleIdentifier_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderModuleIdentifierFeaturesEXT( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderModuleIdentifierFeaturesEXT( VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderModuleIdentifierFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderModuleIdentifierFeaturesEXT & operator=( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderModuleIdentifierFeaturesEXT & operator=( VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderModuleIdentifierFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderModuleIdentifierFeaturesEXT & + setShaderModuleIdentifier( VULKAN_HPP_NAMESPACE::Bool32 shaderModuleIdentifier_ ) VULKAN_HPP_NOEXCEPT + { + shaderModuleIdentifier = shaderModuleIdentifier_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderModuleIdentifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderModuleIdentifier == rhs.shaderModuleIdentifier ); +# endif + } + + bool operator!=( PhysicalDeviceShaderModuleIdentifierFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderModuleIdentifierFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderModuleIdentifier = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderModuleIdentifierFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.html + struct PhysicalDeviceShaderModuleIdentifierPropertiesEXT + { + using NativeType = VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderModuleIdentifierPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceShaderModuleIdentifierPropertiesEXT( std::array const & shaderModuleIdentifierAlgorithmUUID_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderModuleIdentifierAlgorithmUUID{ shaderModuleIdentifierAlgorithmUUID_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PhysicalDeviceShaderModuleIdentifierPropertiesEXT( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderModuleIdentifierPropertiesEXT( VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderModuleIdentifierPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderModuleIdentifierPropertiesEXT & + operator=( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderModuleIdentifierPropertiesEXT & operator=( VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderModuleIdentifierAlgorithmUUID ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderModuleIdentifierAlgorithmUUID == rhs.shaderModuleIdentifierAlgorithmUUID ); +# endif + } + + bool operator!=( PhysicalDeviceShaderModuleIdentifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderModuleIdentifierPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D shaderModuleIdentifierAlgorithmUUID = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderModuleIdentifierPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderObjectFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderObjectFeaturesEXT.html + struct PhysicalDeviceShaderObjectFeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderObjectFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderObjectFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderObjectFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderObject_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderObject{ shaderObject_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderObjectFeaturesEXT( PhysicalDeviceShaderObjectFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderObjectFeaturesEXT( VkPhysicalDeviceShaderObjectFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderObjectFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderObjectFeaturesEXT & operator=( PhysicalDeviceShaderObjectFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderObjectFeaturesEXT & operator=( VkPhysicalDeviceShaderObjectFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderObjectFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderObjectFeaturesEXT & setShaderObject( VULKAN_HPP_NAMESPACE::Bool32 shaderObject_ ) VULKAN_HPP_NOEXCEPT + { + shaderObject = shaderObject_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderObjectFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderObjectFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderObjectFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderObjectFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderObject ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderObjectFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderObjectFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderObject == rhs.shaderObject ); +# endif + } + + bool operator!=( PhysicalDeviceShaderObjectFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderObjectFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderObject = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderObjectFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderObjectPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderObjectPropertiesEXT.html + struct PhysicalDeviceShaderObjectPropertiesEXT + { + using NativeType = VkPhysicalDeviceShaderObjectPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderObjectPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderObjectPropertiesEXT( std::array const & shaderBinaryUUID_ = {}, + uint32_t shaderBinaryVersion_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderBinaryUUID{ shaderBinaryUUID_ } + , shaderBinaryVersion{ shaderBinaryVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderObjectPropertiesEXT( PhysicalDeviceShaderObjectPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderObjectPropertiesEXT( VkPhysicalDeviceShaderObjectPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderObjectPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderObjectPropertiesEXT & operator=( PhysicalDeviceShaderObjectPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderObjectPropertiesEXT & operator=( VkPhysicalDeviceShaderObjectPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderObjectPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderObjectPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderObjectPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderObjectPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple const &, uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderBinaryUUID, shaderBinaryVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderObjectPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderObjectPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderBinaryUUID == rhs.shaderBinaryUUID ) && + ( shaderBinaryVersion == rhs.shaderBinaryVersion ); +# endif + } + + bool operator!=( PhysicalDeviceShaderObjectPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderObjectPropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D shaderBinaryUUID = {}; + uint32_t shaderBinaryVersion = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderObjectPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderQuadControlFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderQuadControlFeaturesKHR.html + struct PhysicalDeviceShaderQuadControlFeaturesKHR + { + using NativeType = VkPhysicalDeviceShaderQuadControlFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderQuadControlFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderQuadControlFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderQuadControl_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderQuadControl{ shaderQuadControl_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderQuadControlFeaturesKHR( PhysicalDeviceShaderQuadControlFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderQuadControlFeaturesKHR( VkPhysicalDeviceShaderQuadControlFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderQuadControlFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderQuadControlFeaturesKHR & operator=( PhysicalDeviceShaderQuadControlFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderQuadControlFeaturesKHR & operator=( VkPhysicalDeviceShaderQuadControlFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderQuadControlFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderQuadControlFeaturesKHR & + setShaderQuadControl( VULKAN_HPP_NAMESPACE::Bool32 shaderQuadControl_ ) VULKAN_HPP_NOEXCEPT + { + shaderQuadControl = shaderQuadControl_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderQuadControlFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderQuadControlFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderQuadControlFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderQuadControlFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderQuadControl ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderQuadControlFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderQuadControlFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderQuadControl == rhs.shaderQuadControl ); +# endif + } + + bool operator!=( PhysicalDeviceShaderQuadControlFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderQuadControlFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderQuadControl = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderQuadControlFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR.html + struct PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR + { + using NativeType = VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderRelaxedExtendedInstruction_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderRelaxedExtendedInstruction{ shaderRelaxedExtendedInstruction_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR( PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR( VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR & + operator=( PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR & + operator=( VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR & + setShaderRelaxedExtendedInstruction( VULKAN_HPP_NAMESPACE::Bool32 shaderRelaxedExtendedInstruction_ ) VULKAN_HPP_NOEXCEPT + { + shaderRelaxedExtendedInstruction = shaderRelaxedExtendedInstruction_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderRelaxedExtendedInstruction ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderRelaxedExtendedInstruction == rhs.shaderRelaxedExtendedInstruction ); +# endif + } + + bool operator!=( PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRelaxedExtendedInstruction = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT.html + struct PhysicalDeviceShaderReplicatedCompositesFeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderReplicatedCompositesFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderReplicatedComposites_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderReplicatedComposites{ shaderReplicatedComposites_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderReplicatedCompositesFeaturesEXT( PhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderReplicatedCompositesFeaturesEXT( VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderReplicatedCompositesFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderReplicatedCompositesFeaturesEXT & + operator=( PhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderReplicatedCompositesFeaturesEXT & operator=( VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderReplicatedCompositesFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderReplicatedCompositesFeaturesEXT & + setShaderReplicatedComposites( VULKAN_HPP_NAMESPACE::Bool32 shaderReplicatedComposites_ ) VULKAN_HPP_NOEXCEPT + { + shaderReplicatedComposites = shaderReplicatedComposites_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderReplicatedComposites ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderReplicatedComposites == rhs.shaderReplicatedComposites ); +# endif + } + + bool operator!=( PhysicalDeviceShaderReplicatedCompositesFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderReplicatedComposites = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderReplicatedCompositesFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.html + struct PhysicalDeviceShaderSMBuiltinsFeaturesNV + { + using NativeType = VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSMBuiltinsFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderSMBuiltins{ shaderSMBuiltins_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSMBuiltinsFeaturesNV( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderSMBuiltinsFeaturesNV( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderSMBuiltinsFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderSMBuiltinsFeaturesNV & operator=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderSMBuiltinsFeaturesNV & operator=( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV & setShaderSMBuiltins( VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins_ ) VULKAN_HPP_NOEXCEPT + { + shaderSMBuiltins = shaderSMBuiltins_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderSMBuiltins ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSMBuiltins == rhs.shaderSMBuiltins ); +# endif + } + + bool operator!=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderSMBuiltinsFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.html + struct PhysicalDeviceShaderSMBuiltinsPropertiesNV + { + using NativeType = VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderSMBuiltinsPropertiesNV( uint32_t shaderSMCount_ = {}, uint32_t shaderWarpsPerSM_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderSMCount{ shaderSMCount_ } + , shaderWarpsPerSM{ shaderWarpsPerSM_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSMBuiltinsPropertiesNV( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderSMBuiltinsPropertiesNV( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderSMBuiltinsPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderSMBuiltinsPropertiesNV & operator=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderSMBuiltinsPropertiesNV & operator=( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderSMCount, shaderWarpsPerSM ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSMCount == rhs.shaderSMCount ) && ( shaderWarpsPerSM == rhs.shaderWarpsPerSM ); +# endif + } + + bool operator!=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV; + void * pNext = {}; + uint32_t shaderSMCount = {}; + uint32_t shaderWarpsPerSM = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderSMBuiltinsPropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.html + struct PhysicalDeviceShaderSubgroupExtendedTypesFeatures + { + using NativeType = VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupExtendedTypesFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderSubgroupExtendedTypes{ shaderSubgroupExtendedTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderSubgroupExtendedTypesFeatures( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderSubgroupExtendedTypesFeatures( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderSubgroupExtendedTypesFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderSubgroupExtendedTypesFeatures & + operator=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderSubgroupExtendedTypesFeatures & operator=( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures & + setShaderSubgroupExtendedTypes( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderSubgroupExtendedTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes ); +# endif + } + + bool operator!=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderSubgroupExtendedTypesFeatures; + }; + + using PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR = PhysicalDeviceShaderSubgroupExtendedTypesFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderSubgroupRotateFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderSubgroupRotateFeatures.html + struct PhysicalDeviceShaderSubgroupRotateFeatures + { + using NativeType = VkPhysicalDeviceShaderSubgroupRotateFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSubgroupRotateFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupRotateFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotate_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotateClustered_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderSubgroupRotate{ shaderSubgroupRotate_ } + , shaderSubgroupRotateClustered{ shaderSubgroupRotateClustered_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupRotateFeatures( PhysicalDeviceShaderSubgroupRotateFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderSubgroupRotateFeatures( VkPhysicalDeviceShaderSubgroupRotateFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderSubgroupRotateFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderSubgroupRotateFeatures & operator=( PhysicalDeviceShaderSubgroupRotateFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderSubgroupRotateFeatures & operator=( VkPhysicalDeviceShaderSubgroupRotateFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupRotateFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupRotateFeatures & + setShaderSubgroupRotate( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotate_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupRotate = shaderSubgroupRotate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupRotateFeatures & + setShaderSubgroupRotateClustered( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotateClustered_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupRotateClustered = shaderSubgroupRotateClustered_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderSubgroupRotateFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupRotateFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupRotateFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupRotateFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderSubgroupRotate, shaderSubgroupRotateClustered ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderSubgroupRotateFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderSubgroupRotateFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupRotate == rhs.shaderSubgroupRotate ) && + ( shaderSubgroupRotateClustered == rhs.shaderSubgroupRotateClustered ); +# endif + } + + bool operator!=( PhysicalDeviceShaderSubgroupRotateFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSubgroupRotateFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotate = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotateClustered = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderSubgroupRotateFeatures; + }; + + using PhysicalDeviceShaderSubgroupRotateFeaturesKHR = PhysicalDeviceShaderSubgroupRotateFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.html + struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR + { + using NativeType = VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderSubgroupUniformControlFlow{ shaderSubgroupUniformControlFlow_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR( + *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & + operator=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & + operator=( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & + setShaderSubgroupUniformControlFlow( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupUniformControlFlow = shaderSubgroupUniformControlFlow_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderSubgroupUniformControlFlow ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupUniformControlFlow == rhs.shaderSubgroupUniformControlFlow ); +# endif + } + + bool operator!=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderTerminateInvocationFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderTerminateInvocationFeatures.html + struct PhysicalDeviceShaderTerminateInvocationFeatures + { + using NativeType = VkPhysicalDeviceShaderTerminateInvocationFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTerminateInvocationFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderTerminateInvocation{ shaderTerminateInvocation_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceShaderTerminateInvocationFeatures( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderTerminateInvocationFeatures( VkPhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderTerminateInvocationFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderTerminateInvocationFeatures & operator=( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderTerminateInvocationFeatures & operator=( VkPhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeatures & + setShaderTerminateInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ ) VULKAN_HPP_NOEXCEPT + { + shaderTerminateInvocation = shaderTerminateInvocation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderTerminateInvocationFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTerminateInvocationFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTerminateInvocationFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTerminateInvocationFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderTerminateInvocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderTerminateInvocationFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderTerminateInvocation == rhs.shaderTerminateInvocation ); +# endif + } + + bool operator!=( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderTerminateInvocationFeatures; + }; + + using PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeatures; + + // wrapper struct for struct VkPhysicalDeviceShaderTileImageFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderTileImageFeaturesEXT.html + struct PhysicalDeviceShaderTileImageFeaturesEXT + { + using NativeType = VkPhysicalDeviceShaderTileImageFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderTileImageFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTileImageFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageColorReadAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageDepthReadAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageStencilReadAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderTileImageColorReadAccess{ shaderTileImageColorReadAccess_ } + , shaderTileImageDepthReadAccess{ shaderTileImageDepthReadAccess_ } + , shaderTileImageStencilReadAccess{ shaderTileImageStencilReadAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTileImageFeaturesEXT( PhysicalDeviceShaderTileImageFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderTileImageFeaturesEXT( VkPhysicalDeviceShaderTileImageFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderTileImageFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderTileImageFeaturesEXT & operator=( PhysicalDeviceShaderTileImageFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderTileImageFeaturesEXT & operator=( VkPhysicalDeviceShaderTileImageFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTileImageFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTileImageFeaturesEXT & + setShaderTileImageColorReadAccess( VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageColorReadAccess_ ) VULKAN_HPP_NOEXCEPT + { + shaderTileImageColorReadAccess = shaderTileImageColorReadAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTileImageFeaturesEXT & + setShaderTileImageDepthReadAccess( VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageDepthReadAccess_ ) VULKAN_HPP_NOEXCEPT + { + shaderTileImageDepthReadAccess = shaderTileImageDepthReadAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTileImageFeaturesEXT & + setShaderTileImageStencilReadAccess( VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageStencilReadAccess_ ) VULKAN_HPP_NOEXCEPT + { + shaderTileImageStencilReadAccess = shaderTileImageStencilReadAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShaderTileImageFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTileImageFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTileImageFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTileImageFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderTileImageColorReadAccess, shaderTileImageDepthReadAccess, shaderTileImageStencilReadAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderTileImageFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderTileImageFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderTileImageColorReadAccess == rhs.shaderTileImageColorReadAccess ) && + ( shaderTileImageDepthReadAccess == rhs.shaderTileImageDepthReadAccess ) && + ( shaderTileImageStencilReadAccess == rhs.shaderTileImageStencilReadAccess ); +# endif + } + + bool operator!=( PhysicalDeviceShaderTileImageFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderTileImageFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageColorReadAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageDepthReadAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageStencilReadAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderTileImageFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShaderTileImagePropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShaderTileImagePropertiesEXT.html + struct PhysicalDeviceShaderTileImagePropertiesEXT + { + using NativeType = VkPhysicalDeviceShaderTileImagePropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShaderTileImagePropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTileImagePropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageCoherentReadAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageReadSampleFromPixelRateInvocation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageReadFromHelperInvocation_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderTileImageCoherentReadAccelerated{ shaderTileImageCoherentReadAccelerated_ } + , shaderTileImageReadSampleFromPixelRateInvocation{ shaderTileImageReadSampleFromPixelRateInvocation_ } + , shaderTileImageReadFromHelperInvocation{ shaderTileImageReadFromHelperInvocation_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTileImagePropertiesEXT( PhysicalDeviceShaderTileImagePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShaderTileImagePropertiesEXT( VkPhysicalDeviceShaderTileImagePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShaderTileImagePropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShaderTileImagePropertiesEXT & operator=( PhysicalDeviceShaderTileImagePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShaderTileImagePropertiesEXT & operator=( VkPhysicalDeviceShaderTileImagePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShaderTileImagePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTileImagePropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTileImagePropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShaderTileImagePropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, shaderTileImageCoherentReadAccelerated, shaderTileImageReadSampleFromPixelRateInvocation, shaderTileImageReadFromHelperInvocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShaderTileImagePropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceShaderTileImagePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderTileImageCoherentReadAccelerated == rhs.shaderTileImageCoherentReadAccelerated ) && + ( shaderTileImageReadSampleFromPixelRateInvocation == rhs.shaderTileImageReadSampleFromPixelRateInvocation ) && + ( shaderTileImageReadFromHelperInvocation == rhs.shaderTileImageReadFromHelperInvocation ); +# endif + } + + bool operator!=( PhysicalDeviceShaderTileImagePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderTileImagePropertiesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageCoherentReadAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageReadSampleFromPixelRateInvocation = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTileImageReadFromHelperInvocation = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShaderTileImagePropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceShadingRateImageFeaturesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShadingRateImageFeaturesNV.html + struct PhysicalDeviceShadingRateImageFeaturesNV + { + using NativeType = VkPhysicalDeviceShadingRateImageFeaturesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShadingRateImageFeaturesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImageFeaturesNV( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shadingRateImage{ shadingRateImage_ } + , shadingRateCoarseSampleOrder{ shadingRateCoarseSampleOrder_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImageFeaturesNV( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShadingRateImageFeaturesNV( VkPhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShadingRateImageFeaturesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShadingRateImageFeaturesNV & operator=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShadingRateImageFeaturesNV & operator=( VkPhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & setShadingRateImage( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage_ ) VULKAN_HPP_NOEXCEPT + { + shadingRateImage = shadingRateImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & + setShadingRateCoarseSampleOrder( VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder_ ) VULKAN_HPP_NOEXCEPT + { + shadingRateCoarseSampleOrder = shadingRateCoarseSampleOrder_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceShadingRateImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShadingRateImageFeaturesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShadingRateImageFeaturesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShadingRateImageFeaturesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shadingRateImage, shadingRateCoarseSampleOrder ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShadingRateImageFeaturesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateImage == rhs.shadingRateImage ) && + ( shadingRateCoarseSampleOrder == rhs.shadingRateCoarseSampleOrder ); +# endif + } + + bool operator!=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShadingRateImageFeaturesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage = {}; + VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShadingRateImageFeaturesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceShadingRateImagePropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceShadingRateImagePropertiesNV.html + struct PhysicalDeviceShadingRateImagePropertiesNV + { + using NativeType = VkPhysicalDeviceShadingRateImagePropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceShadingRateImagePropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImagePropertiesNV( VULKAN_HPP_NAMESPACE::Extent2D shadingRateTexelSize_ = {}, + uint32_t shadingRatePaletteSize_ = {}, + uint32_t shadingRateMaxCoarseSamples_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shadingRateTexelSize{ shadingRateTexelSize_ } + , shadingRatePaletteSize{ shadingRatePaletteSize_ } + , shadingRateMaxCoarseSamples{ shadingRateMaxCoarseSamples_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceShadingRateImagePropertiesNV( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceShadingRateImagePropertiesNV( VkPhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceShadingRateImagePropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceShadingRateImagePropertiesNV & operator=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceShadingRateImagePropertiesNV & operator=( VkPhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceShadingRateImagePropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShadingRateImagePropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShadingRateImagePropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceShadingRateImagePropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shadingRateTexelSize, shadingRatePaletteSize, shadingRateMaxCoarseSamples ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceShadingRateImagePropertiesNV const & ) const = default; +#else + bool operator==( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateTexelSize == rhs.shadingRateTexelSize ) && + ( shadingRatePaletteSize == rhs.shadingRatePaletteSize ) && ( shadingRateMaxCoarseSamples == rhs.shadingRateMaxCoarseSamples ); +# endif + } + + bool operator!=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShadingRateImagePropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D shadingRateTexelSize = {}; + uint32_t shadingRatePaletteSize = {}; + uint32_t shadingRateMaxCoarseSamples = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceShadingRateImagePropertiesNV; + }; + + // wrapper struct for struct VkPhysicalDeviceSparseImageFormatInfo2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSparseImageFormatInfo2.html + struct PhysicalDeviceSparseImageFormatInfo2 + { + using NativeType = VkPhysicalDeviceSparseImageFormatInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSparseImageFormatInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceSparseImageFormatInfo2( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::ImageType type_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1, + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {}, + VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , type{ type_ } + , samples{ samples_ } + , usage{ usage_ } + , tiling{ tiling_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseImageFormatInfo2( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSparseImageFormatInfo2( VkPhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSparseImageFormatInfo2( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSparseImageFormatInfo2 & operator=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSparseImageFormatInfo2 & operator=( VkPhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT + { + samples = samples_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT + { + usage = usage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT + { + tiling = tiling_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSparseImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSparseImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSparseImageFormatInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSparseImageFormatInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, format, type, samples, usage, tiling ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSparseImageFormatInfo2 const & ) const = default; +#else + bool operator==( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( type == rhs.type ) && ( samples == rhs.samples ) && + ( usage == rhs.usage ) && ( tiling == rhs.tiling ); +# endif + } + + bool operator!=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSparseImageFormatInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::ImageType type = VULKAN_HPP_NAMESPACE::ImageType::e1D; + VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1; + VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {}; + VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSparseImageFormatInfo2; + }; + + using PhysicalDeviceSparseImageFormatInfo2KHR = PhysicalDeviceSparseImageFormatInfo2; + + // wrapper struct for struct VkPhysicalDeviceSubgroupProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSubgroupProperties.html + struct PhysicalDeviceSubgroupProperties + { + using NativeType = VkPhysicalDeviceSubgroupProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupProperties( uint32_t subgroupSize_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedStages_ = {}, + VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags supportedOperations_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 quadOperationsInAllStages_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subgroupSize{ subgroupSize_ } + , supportedStages{ supportedStages_ } + , supportedOperations{ supportedOperations_ } + , quadOperationsInAllStages{ quadOperationsInAllStages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupProperties( PhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSubgroupProperties( VkPhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSubgroupProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSubgroupProperties & operator=( PhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSubgroupProperties & operator=( VkPhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSubgroupProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subgroupSize, supportedStages, supportedOperations, quadOperationsInAllStages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSubgroupProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceSubgroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subgroupSize == rhs.subgroupSize ) && ( supportedStages == rhs.supportedStages ) && + ( supportedOperations == rhs.supportedOperations ) && ( quadOperationsInAllStages == rhs.quadOperationsInAllStages ); +# endif + } + + bool operator!=( PhysicalDeviceSubgroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupProperties; + void * pNext = {}; + uint32_t subgroupSize = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags supportedStages = {}; + VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags supportedOperations = {}; + VULKAN_HPP_NAMESPACE::Bool32 quadOperationsInAllStages = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSubgroupProperties; + }; + + // wrapper struct for struct VkPhysicalDeviceSubgroupSizeControlFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSubgroupSizeControlFeatures.html + struct PhysicalDeviceSubgroupSizeControlFeatures + { + using NativeType = VkPhysicalDeviceSubgroupSizeControlFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupSizeControlFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeatures( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subgroupSizeControl{ subgroupSizeControl_ } + , computeFullSubgroups{ computeFullSubgroups_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeatures( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSubgroupSizeControlFeatures( VkPhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSubgroupSizeControlFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSubgroupSizeControlFeatures & operator=( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSubgroupSizeControlFeatures & operator=( VkPhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & + setSubgroupSizeControl( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ ) VULKAN_HPP_NOEXCEPT + { + subgroupSizeControl = subgroupSizeControl_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & + setComputeFullSubgroups( VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ ) VULKAN_HPP_NOEXCEPT + { + computeFullSubgroups = computeFullSubgroups_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSubgroupSizeControlFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupSizeControlFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupSizeControlFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupSizeControlFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subgroupSizeControl, computeFullSubgroups ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSubgroupSizeControlFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subgroupSizeControl == rhs.subgroupSizeControl ) && + ( computeFullSubgroups == rhs.computeFullSubgroups ); +# endif + } + + bool operator!=( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {}; + VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSubgroupSizeControlFeatures; + }; + + using PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures; + + // wrapper struct for struct VkPhysicalDeviceSubgroupSizeControlProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSubgroupSizeControlProperties.html + struct PhysicalDeviceSubgroupSizeControlProperties + { + using NativeType = VkPhysicalDeviceSubgroupSizeControlProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupSizeControlProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlProperties( uint32_t minSubgroupSize_ = {}, + uint32_t maxSubgroupSize_ = {}, + uint32_t maxComputeWorkgroupSubgroups_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minSubgroupSize{ minSubgroupSize_ } + , maxSubgroupSize{ maxSubgroupSize_ } + , maxComputeWorkgroupSubgroups{ maxComputeWorkgroupSubgroups_ } + , requiredSubgroupSizeStages{ requiredSubgroupSizeStages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlProperties( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSubgroupSizeControlProperties( VkPhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSubgroupSizeControlProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSubgroupSizeControlProperties & operator=( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSubgroupSizeControlProperties & operator=( VkPhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSubgroupSizeControlProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupSizeControlProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupSizeControlProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubgroupSizeControlProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minSubgroupSize, maxSubgroupSize, maxComputeWorkgroupSubgroups, requiredSubgroupSizeStages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSubgroupSizeControlProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSubgroupSize == rhs.minSubgroupSize ) && ( maxSubgroupSize == rhs.maxSubgroupSize ) && + ( maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups ) && ( requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages ); +# endif + } + + bool operator!=( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlProperties; + void * pNext = {}; + uint32_t minSubgroupSize = {}; + uint32_t maxSubgroupSize = {}; + uint32_t maxComputeWorkgroupSubgroups = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSubgroupSizeControlProperties; + }; + + using PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties; + + // wrapper struct for struct VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT.html + struct PhysicalDeviceSubpassMergeFeedbackFeaturesEXT + { + using NativeType = VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 subpassMergeFeedback_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subpassMergeFeedback{ subpassMergeFeedback_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSubpassMergeFeedbackFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & operator=( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & operator=( VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassMergeFeedbackFeaturesEXT & + setSubpassMergeFeedback( VULKAN_HPP_NAMESPACE::Bool32 subpassMergeFeedback_ ) VULKAN_HPP_NOEXCEPT + { + subpassMergeFeedback = subpassMergeFeedback_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subpassMergeFeedback ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassMergeFeedback == rhs.subpassMergeFeedback ); +# endif + } + + bool operator!=( PhysicalDeviceSubpassMergeFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 subpassMergeFeedback = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSubpassMergeFeedbackFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceSubpassShadingFeaturesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.html + struct PhysicalDeviceSubpassShadingFeaturesHUAWEI + { + using NativeType = VkPhysicalDeviceSubpassShadingFeaturesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingFeaturesHUAWEI( VULKAN_HPP_NAMESPACE::Bool32 subpassShading_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subpassShading{ subpassShading_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingFeaturesHUAWEI( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSubpassShadingFeaturesHUAWEI( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSubpassShadingFeaturesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSubpassShadingFeaturesHUAWEI & operator=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSubpassShadingFeaturesHUAWEI & operator=( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI & setSubpassShading( VULKAN_HPP_NAMESPACE::Bool32 subpassShading_ ) VULKAN_HPP_NOEXCEPT + { + subpassShading = subpassShading_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subpassShading ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassShading == rhs.subpassShading ); +# endif + } + + bool operator!=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 subpassShading = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSubpassShadingFeaturesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceSubpassShadingPropertiesHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.html + struct PhysicalDeviceSubpassShadingPropertiesHUAWEI + { + using NativeType = VkPhysicalDeviceSubpassShadingPropertiesHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingPropertiesHUAWEI( uint32_t maxSubpassShadingWorkgroupSizeAspectRatio_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxSubpassShadingWorkgroupSizeAspectRatio{ maxSubpassShadingWorkgroupSizeAspectRatio_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSubpassShadingPropertiesHUAWEI( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSubpassShadingPropertiesHUAWEI( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSubpassShadingPropertiesHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSubpassShadingPropertiesHUAWEI & operator=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSubpassShadingPropertiesHUAWEI & operator=( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxSubpassShadingWorkgroupSizeAspectRatio ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & ) const = default; +#else + bool operator==( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSubpassShadingWorkgroupSizeAspectRatio == rhs.maxSubpassShadingWorkgroupSizeAspectRatio ); +# endif + } + + bool operator!=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI; + void * pNext = {}; + uint32_t maxSubpassShadingWorkgroupSizeAspectRatio = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSubpassShadingPropertiesHUAWEI; + }; + + // wrapper struct for struct VkPhysicalDeviceSurfaceInfo2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSurfaceInfo2KHR.html + struct PhysicalDeviceSurfaceInfo2KHR + { + using NativeType = VkPhysicalDeviceSurfaceInfo2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSurfaceInfo2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSurfaceInfo2KHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , surface{ surface_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSurfaceInfo2KHR( PhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSurfaceInfo2KHR( VkPhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSurfaceInfo2KHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSurfaceInfo2KHR & operator=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSurfaceInfo2KHR & operator=( VkPhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR & setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT + { + surface = surface_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSurfaceInfo2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSurfaceInfo2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSurfaceInfo2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSurfaceInfo2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, surface ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSurfaceInfo2KHR const & ) const = default; +#else + bool operator==( PhysicalDeviceSurfaceInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surface == rhs.surface ); +# endif + } + + bool operator!=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSurfaceInfo2KHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceKHR surface = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSurfaceInfo2KHR; + }; + + // wrapper struct for struct VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR.html + struct PhysicalDeviceSwapchainMaintenance1FeaturesKHR + { + using NativeType = VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSwapchainMaintenance1FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSwapchainMaintenance1FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 swapchainMaintenance1_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainMaintenance1{ swapchainMaintenance1_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceSwapchainMaintenance1FeaturesKHR( PhysicalDeviceSwapchainMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSwapchainMaintenance1FeaturesKHR( VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSwapchainMaintenance1FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSwapchainMaintenance1FeaturesKHR & operator=( PhysicalDeviceSwapchainMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSwapchainMaintenance1FeaturesKHR & operator=( VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSwapchainMaintenance1FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSwapchainMaintenance1FeaturesKHR & + setSwapchainMaintenance1( VULKAN_HPP_NAMESPACE::Bool32 swapchainMaintenance1_ ) VULKAN_HPP_NOEXCEPT + { + swapchainMaintenance1 = swapchainMaintenance1_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainMaintenance1 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSwapchainMaintenance1FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceSwapchainMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainMaintenance1 == rhs.swapchainMaintenance1 ); +# endif + } + + bool operator!=( PhysicalDeviceSwapchainMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSwapchainMaintenance1FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 swapchainMaintenance1 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSwapchainMaintenance1FeaturesKHR; + }; + + using PhysicalDeviceSwapchainMaintenance1FeaturesEXT = PhysicalDeviceSwapchainMaintenance1FeaturesKHR; + + // wrapper struct for struct VkPhysicalDeviceSynchronization2Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceSynchronization2Features.html + struct PhysicalDeviceSynchronization2Features + { + using NativeType = VkPhysicalDeviceSynchronization2Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSynchronization2Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2Features( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , synchronization2{ synchronization2_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2Features( PhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceSynchronization2Features( VkPhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceSynchronization2Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceSynchronization2Features & operator=( PhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceSynchronization2Features & operator=( VkPhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2Features & setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT + { + synchronization2 = synchronization2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceSynchronization2Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSynchronization2Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSynchronization2Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceSynchronization2Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, synchronization2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceSynchronization2Features const & ) const = default; +#else + bool operator==( PhysicalDeviceSynchronization2Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( synchronization2 == rhs.synchronization2 ); +# endif + } + + bool operator!=( PhysicalDeviceSynchronization2Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSynchronization2Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 synchronization2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceSynchronization2Features; + }; + + using PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2Features; + + // wrapper struct for struct VkPhysicalDeviceTensorFeaturesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTensorFeaturesARM.html + struct PhysicalDeviceTensorFeaturesARM + { + using NativeType = VkPhysicalDeviceTensorFeaturesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTensorFeaturesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTensorFeaturesARM( VULKAN_HPP_NAMESPACE::Bool32 tensorNonPacked_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTensorAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTensorUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tensors_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorNonPacked{ tensorNonPacked_ } + , shaderTensorAccess{ shaderTensorAccess_ } + , shaderStorageTensorArrayDynamicIndexing{ shaderStorageTensorArrayDynamicIndexing_ } + , shaderStorageTensorArrayNonUniformIndexing{ shaderStorageTensorArrayNonUniformIndexing_ } + , descriptorBindingStorageTensorUpdateAfterBind{ descriptorBindingStorageTensorUpdateAfterBind_ } + , tensors{ tensors_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTensorFeaturesARM( PhysicalDeviceTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTensorFeaturesARM( VkPhysicalDeviceTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTensorFeaturesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTensorFeaturesARM & operator=( PhysicalDeviceTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTensorFeaturesARM & operator=( VkPhysicalDeviceTensorFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & setTensorNonPacked( VULKAN_HPP_NAMESPACE::Bool32 tensorNonPacked_ ) VULKAN_HPP_NOEXCEPT + { + tensorNonPacked = tensorNonPacked_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & setShaderTensorAccess( VULKAN_HPP_NAMESPACE::Bool32 shaderTensorAccess_ ) VULKAN_HPP_NOEXCEPT + { + shaderTensorAccess = shaderTensorAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & + setShaderStorageTensorArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageTensorArrayDynamicIndexing = shaderStorageTensorArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & + setShaderStorageTensorArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageTensorArrayNonUniformIndexing = shaderStorageTensorArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & + setDescriptorBindingStorageTensorUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTensorUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageTensorUpdateAfterBind = descriptorBindingStorageTensorUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTensorFeaturesARM & setTensors( VULKAN_HPP_NAMESPACE::Bool32 tensors_ ) VULKAN_HPP_NOEXCEPT + { + tensors = tensors_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTensorFeaturesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTensorFeaturesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTensorFeaturesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTensorFeaturesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + tensorNonPacked, + shaderTensorAccess, + shaderStorageTensorArrayDynamicIndexing, + shaderStorageTensorArrayNonUniformIndexing, + descriptorBindingStorageTensorUpdateAfterBind, + tensors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTensorFeaturesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceTensorFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorNonPacked == rhs.tensorNonPacked ) && + ( shaderTensorAccess == rhs.shaderTensorAccess ) && ( shaderStorageTensorArrayDynamicIndexing == rhs.shaderStorageTensorArrayDynamicIndexing ) && + ( shaderStorageTensorArrayNonUniformIndexing == rhs.shaderStorageTensorArrayNonUniformIndexing ) && + ( descriptorBindingStorageTensorUpdateAfterBind == rhs.descriptorBindingStorageTensorUpdateAfterBind ) && ( tensors == rhs.tensors ); +# endif + } + + bool operator!=( PhysicalDeviceTensorFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTensorFeaturesARM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 tensorNonPacked = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTensorAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTensorUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 tensors = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTensorFeaturesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceTensorPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTensorPropertiesARM.html + struct PhysicalDeviceTensorPropertiesARM + { + using NativeType = VkPhysicalDeviceTensorPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTensorPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTensorPropertiesARM( uint32_t maxTensorDimensionCount_ = {}, + uint64_t maxTensorElements_ = {}, + uint64_t maxPerDimensionTensorElements_ = {}, + int64_t maxTensorStride_ = {}, + uint64_t maxTensorSize_ = {}, + uint32_t maxTensorShaderAccessArrayLength_ = {}, + uint32_t maxTensorShaderAccessSize_ = {}, + uint32_t maxDescriptorSetStorageTensors_ = {}, + uint32_t maxPerStageDescriptorSetStorageTensors_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors_ = {}, + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderTensorSupportedStages_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxTensorDimensionCount{ maxTensorDimensionCount_ } + , maxTensorElements{ maxTensorElements_ } + , maxPerDimensionTensorElements{ maxPerDimensionTensorElements_ } + , maxTensorStride{ maxTensorStride_ } + , maxTensorSize{ maxTensorSize_ } + , maxTensorShaderAccessArrayLength{ maxTensorShaderAccessArrayLength_ } + , maxTensorShaderAccessSize{ maxTensorShaderAccessSize_ } + , maxDescriptorSetStorageTensors{ maxDescriptorSetStorageTensors_ } + , maxPerStageDescriptorSetStorageTensors{ maxPerStageDescriptorSetStorageTensors_ } + , maxDescriptorSetUpdateAfterBindStorageTensors{ maxDescriptorSetUpdateAfterBindStorageTensors_ } + , maxPerStageDescriptorUpdateAfterBindStorageTensors{ maxPerStageDescriptorUpdateAfterBindStorageTensors_ } + , shaderStorageTensorArrayNonUniformIndexingNative{ shaderStorageTensorArrayNonUniformIndexingNative_ } + , shaderTensorSupportedStages{ shaderTensorSupportedStages_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTensorPropertiesARM( PhysicalDeviceTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTensorPropertiesARM( VkPhysicalDeviceTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTensorPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTensorPropertiesARM & operator=( PhysicalDeviceTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTensorPropertiesARM & operator=( VkPhysicalDeviceTensorPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceTensorPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTensorPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTensorPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTensorPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxTensorDimensionCount, + maxTensorElements, + maxPerDimensionTensorElements, + maxTensorStride, + maxTensorSize, + maxTensorShaderAccessArrayLength, + maxTensorShaderAccessSize, + maxDescriptorSetStorageTensors, + maxPerStageDescriptorSetStorageTensors, + maxDescriptorSetUpdateAfterBindStorageTensors, + maxPerStageDescriptorUpdateAfterBindStorageTensors, + shaderStorageTensorArrayNonUniformIndexingNative, + shaderTensorSupportedStages ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTensorPropertiesARM const & ) const = default; +#else + bool operator==( PhysicalDeviceTensorPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTensorDimensionCount == rhs.maxTensorDimensionCount ) && + ( maxTensorElements == rhs.maxTensorElements ) && ( maxPerDimensionTensorElements == rhs.maxPerDimensionTensorElements ) && + ( maxTensorStride == rhs.maxTensorStride ) && ( maxTensorSize == rhs.maxTensorSize ) && + ( maxTensorShaderAccessArrayLength == rhs.maxTensorShaderAccessArrayLength ) && ( maxTensorShaderAccessSize == rhs.maxTensorShaderAccessSize ) && + ( maxDescriptorSetStorageTensors == rhs.maxDescriptorSetStorageTensors ) && + ( maxPerStageDescriptorSetStorageTensors == rhs.maxPerStageDescriptorSetStorageTensors ) && + ( maxDescriptorSetUpdateAfterBindStorageTensors == rhs.maxDescriptorSetUpdateAfterBindStorageTensors ) && + ( maxPerStageDescriptorUpdateAfterBindStorageTensors == rhs.maxPerStageDescriptorUpdateAfterBindStorageTensors ) && + ( shaderStorageTensorArrayNonUniformIndexingNative == rhs.shaderStorageTensorArrayNonUniformIndexingNative ) && + ( shaderTensorSupportedStages == rhs.shaderTensorSupportedStages ); +# endif + } + + bool operator!=( PhysicalDeviceTensorPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTensorPropertiesARM; + void * pNext = {}; + uint32_t maxTensorDimensionCount = {}; + uint64_t maxTensorElements = {}; + uint64_t maxPerDimensionTensorElements = {}; + int64_t maxTensorStride = {}; + uint64_t maxTensorSize = {}; + uint32_t maxTensorShaderAccessArrayLength = {}; + uint32_t maxTensorShaderAccessSize = {}; + uint32_t maxDescriptorSetStorageTensors = {}; + uint32_t maxPerStageDescriptorSetStorageTensors = {}; + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors = {}; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTensorArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderTensorSupportedStages = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTensorPropertiesARM; + }; + + // wrapper struct for struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.html + struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT + { + using NativeType = VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , texelBufferAlignment{ texelBufferAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceTexelBufferAlignmentFeaturesEXT( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTexelBufferAlignmentFeaturesEXT( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTexelBufferAlignmentFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTexelBufferAlignmentFeaturesEXT & operator=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTexelBufferAlignmentFeaturesEXT & operator=( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT & + setTexelBufferAlignment( VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment_ ) VULKAN_HPP_NOEXCEPT + { + texelBufferAlignment = texelBufferAlignment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, texelBufferAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( texelBufferAlignment == rhs.texelBufferAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTexelBufferAlignmentFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceTexelBufferAlignmentProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTexelBufferAlignmentProperties.html + struct PhysicalDeviceTexelBufferAlignmentProperties + { + using NativeType = VkPhysicalDeviceTexelBufferAlignmentProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTexelBufferAlignmentProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentProperties( VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , storageTexelBufferOffsetAlignmentBytes{ storageTexelBufferOffsetAlignmentBytes_ } + , storageTexelBufferOffsetSingleTexelAlignment{ storageTexelBufferOffsetSingleTexelAlignment_ } + , uniformTexelBufferOffsetAlignmentBytes{ uniformTexelBufferOffsetAlignmentBytes_ } + , uniformTexelBufferOffsetSingleTexelAlignment{ uniformTexelBufferOffsetSingleTexelAlignment_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentProperties( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTexelBufferAlignmentProperties( VkPhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTexelBufferAlignmentProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTexelBufferAlignmentProperties & operator=( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTexelBufferAlignmentProperties & operator=( VkPhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceTexelBufferAlignmentProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTexelBufferAlignmentProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTexelBufferAlignmentProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTexelBufferAlignmentProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + storageTexelBufferOffsetAlignmentBytes, + storageTexelBufferOffsetSingleTexelAlignment, + uniformTexelBufferOffsetAlignmentBytes, + uniformTexelBufferOffsetSingleTexelAlignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTexelBufferAlignmentProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes ) && + ( storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment ) && + ( uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes ) && + ( uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment ); +# endif + } + + bool operator!=( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTexelBufferAlignmentProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTexelBufferAlignmentProperties; + }; + + using PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentProperties; + + // wrapper struct for struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTextureCompressionASTCHDRFeatures.html + struct PhysicalDeviceTextureCompressionASTCHDRFeatures + { + using NativeType = VkPhysicalDeviceTextureCompressionASTCHDRFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTextureCompressionASTCHDRFeatures( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , textureCompressionASTC_HDR{ textureCompressionASTC_HDR_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceTextureCompressionASTCHDRFeatures( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTextureCompressionASTCHDRFeatures( VkPhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTextureCompressionASTCHDRFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTextureCompressionASTCHDRFeatures & operator=( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTextureCompressionASTCHDRFeatures & operator=( VkPhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeatures & + setTextureCompressionASTC_HDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ ) VULKAN_HPP_NOEXCEPT + { + textureCompressionASTC_HDR = textureCompressionASTC_HDR_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, textureCompressionASTC_HDR ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTextureCompressionASTCHDRFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR ); +# endif + } + + bool operator!=( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTextureCompressionASTCHDRFeatures; + }; + + using PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeatures; + + // wrapper struct for struct VkPhysicalDeviceTileMemoryHeapFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTileMemoryHeapFeaturesQCOM.html + struct PhysicalDeviceTileMemoryHeapFeaturesQCOM + { + using NativeType = VkPhysicalDeviceTileMemoryHeapFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTileMemoryHeapFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileMemoryHeapFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 tileMemoryHeap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tileMemoryHeap{ tileMemoryHeap_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileMemoryHeapFeaturesQCOM( PhysicalDeviceTileMemoryHeapFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTileMemoryHeapFeaturesQCOM( VkPhysicalDeviceTileMemoryHeapFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTileMemoryHeapFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTileMemoryHeapFeaturesQCOM & operator=( PhysicalDeviceTileMemoryHeapFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTileMemoryHeapFeaturesQCOM & operator=( VkPhysicalDeviceTileMemoryHeapFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileMemoryHeapFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileMemoryHeapFeaturesQCOM & setTileMemoryHeap( VULKAN_HPP_NAMESPACE::Bool32 tileMemoryHeap_ ) VULKAN_HPP_NOEXCEPT + { + tileMemoryHeap = tileMemoryHeap_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTileMemoryHeapFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileMemoryHeapFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileMemoryHeapFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileMemoryHeapFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tileMemoryHeap ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTileMemoryHeapFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceTileMemoryHeapFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tileMemoryHeap == rhs.tileMemoryHeap ); +# endif + } + + bool operator!=( PhysicalDeviceTileMemoryHeapFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTileMemoryHeapFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileMemoryHeap = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTileMemoryHeapFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceTileMemoryHeapPropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTileMemoryHeapPropertiesQCOM.html + struct PhysicalDeviceTileMemoryHeapPropertiesQCOM + { + using NativeType = VkPhysicalDeviceTileMemoryHeapPropertiesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTileMemoryHeapPropertiesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileMemoryHeapPropertiesQCOM( VULKAN_HPP_NAMESPACE::Bool32 queueSubmitBoundary_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileBufferTransfers_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queueSubmitBoundary{ queueSubmitBoundary_ } + , tileBufferTransfers{ tileBufferTransfers_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileMemoryHeapPropertiesQCOM( PhysicalDeviceTileMemoryHeapPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTileMemoryHeapPropertiesQCOM( VkPhysicalDeviceTileMemoryHeapPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTileMemoryHeapPropertiesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTileMemoryHeapPropertiesQCOM & operator=( PhysicalDeviceTileMemoryHeapPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTileMemoryHeapPropertiesQCOM & operator=( VkPhysicalDeviceTileMemoryHeapPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileMemoryHeapPropertiesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileMemoryHeapPropertiesQCOM & + setQueueSubmitBoundary( VULKAN_HPP_NAMESPACE::Bool32 queueSubmitBoundary_ ) VULKAN_HPP_NOEXCEPT + { + queueSubmitBoundary = queueSubmitBoundary_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileMemoryHeapPropertiesQCOM & + setTileBufferTransfers( VULKAN_HPP_NAMESPACE::Bool32 tileBufferTransfers_ ) VULKAN_HPP_NOEXCEPT + { + tileBufferTransfers = tileBufferTransfers_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTileMemoryHeapPropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileMemoryHeapPropertiesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileMemoryHeapPropertiesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileMemoryHeapPropertiesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queueSubmitBoundary, tileBufferTransfers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTileMemoryHeapPropertiesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceTileMemoryHeapPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueSubmitBoundary == rhs.queueSubmitBoundary ) && + ( tileBufferTransfers == rhs.tileBufferTransfers ); +# endif + } + + bool operator!=( PhysicalDeviceTileMemoryHeapPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTileMemoryHeapPropertiesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 queueSubmitBoundary = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileBufferTransfers = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTileMemoryHeapPropertiesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceTilePropertiesFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTilePropertiesFeaturesQCOM.html + struct PhysicalDeviceTilePropertiesFeaturesQCOM + { + using NativeType = VkPhysicalDeviceTilePropertiesFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTilePropertiesFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTilePropertiesFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 tileProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tileProperties{ tileProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTilePropertiesFeaturesQCOM( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTilePropertiesFeaturesQCOM( VkPhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTilePropertiesFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTilePropertiesFeaturesQCOM & operator=( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTilePropertiesFeaturesQCOM & operator=( VkPhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTilePropertiesFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTilePropertiesFeaturesQCOM & setTileProperties( VULKAN_HPP_NAMESPACE::Bool32 tileProperties_ ) VULKAN_HPP_NOEXCEPT + { + tileProperties = tileProperties_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTilePropertiesFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTilePropertiesFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTilePropertiesFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTilePropertiesFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tileProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTilePropertiesFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tileProperties == rhs.tileProperties ); +# endif + } + + bool operator!=( PhysicalDeviceTilePropertiesFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTilePropertiesFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileProperties = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTilePropertiesFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceTileShadingFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTileShadingFeaturesQCOM.html + struct PhysicalDeviceTileShadingFeaturesQCOM + { + using NativeType = VkPhysicalDeviceTileShadingFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTileShadingFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileShadingFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 tileShading_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingFragmentStage_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingColorAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingDepthAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingStencilAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingInputAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingSampledAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingPerTileDraw_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingPerTileDispatch_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingDispatchTile_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingApron_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingAnisotropicApron_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingAtomicOps_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 tileShadingImageProcessing_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tileShading{ tileShading_ } + , tileShadingFragmentStage{ tileShadingFragmentStage_ } + , tileShadingColorAttachments{ tileShadingColorAttachments_ } + , tileShadingDepthAttachments{ tileShadingDepthAttachments_ } + , tileShadingStencilAttachments{ tileShadingStencilAttachments_ } + , tileShadingInputAttachments{ tileShadingInputAttachments_ } + , tileShadingSampledAttachments{ tileShadingSampledAttachments_ } + , tileShadingPerTileDraw{ tileShadingPerTileDraw_ } + , tileShadingPerTileDispatch{ tileShadingPerTileDispatch_ } + , tileShadingDispatchTile{ tileShadingDispatchTile_ } + , tileShadingApron{ tileShadingApron_ } + , tileShadingAnisotropicApron{ tileShadingAnisotropicApron_ } + , tileShadingAtomicOps{ tileShadingAtomicOps_ } + , tileShadingImageProcessing{ tileShadingImageProcessing_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileShadingFeaturesQCOM( PhysicalDeviceTileShadingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTileShadingFeaturesQCOM( VkPhysicalDeviceTileShadingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTileShadingFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTileShadingFeaturesQCOM & operator=( PhysicalDeviceTileShadingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTileShadingFeaturesQCOM & operator=( VkPhysicalDeviceTileShadingFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & setTileShading( VULKAN_HPP_NAMESPACE::Bool32 tileShading_ ) VULKAN_HPP_NOEXCEPT + { + tileShading = tileShading_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingFragmentStage( VULKAN_HPP_NAMESPACE::Bool32 tileShadingFragmentStage_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingFragmentStage = tileShadingFragmentStage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingColorAttachments( VULKAN_HPP_NAMESPACE::Bool32 tileShadingColorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingColorAttachments = tileShadingColorAttachments_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingDepthAttachments( VULKAN_HPP_NAMESPACE::Bool32 tileShadingDepthAttachments_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingDepthAttachments = tileShadingDepthAttachments_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingStencilAttachments( VULKAN_HPP_NAMESPACE::Bool32 tileShadingStencilAttachments_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingStencilAttachments = tileShadingStencilAttachments_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingInputAttachments( VULKAN_HPP_NAMESPACE::Bool32 tileShadingInputAttachments_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingInputAttachments = tileShadingInputAttachments_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingSampledAttachments( VULKAN_HPP_NAMESPACE::Bool32 tileShadingSampledAttachments_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingSampledAttachments = tileShadingSampledAttachments_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingPerTileDraw( VULKAN_HPP_NAMESPACE::Bool32 tileShadingPerTileDraw_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingPerTileDraw = tileShadingPerTileDraw_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingPerTileDispatch( VULKAN_HPP_NAMESPACE::Bool32 tileShadingPerTileDispatch_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingPerTileDispatch = tileShadingPerTileDispatch_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingDispatchTile( VULKAN_HPP_NAMESPACE::Bool32 tileShadingDispatchTile_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingDispatchTile = tileShadingDispatchTile_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & setTileShadingApron( VULKAN_HPP_NAMESPACE::Bool32 tileShadingApron_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingApron = tileShadingApron_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingAnisotropicApron( VULKAN_HPP_NAMESPACE::Bool32 tileShadingAnisotropicApron_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingAnisotropicApron = tileShadingAnisotropicApron_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingAtomicOps( VULKAN_HPP_NAMESPACE::Bool32 tileShadingAtomicOps_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingAtomicOps = tileShadingAtomicOps_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTileShadingFeaturesQCOM & + setTileShadingImageProcessing( VULKAN_HPP_NAMESPACE::Bool32 tileShadingImageProcessing_ ) VULKAN_HPP_NOEXCEPT + { + tileShadingImageProcessing = tileShadingImageProcessing_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTileShadingFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileShadingFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileShadingFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileShadingFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + tileShading, + tileShadingFragmentStage, + tileShadingColorAttachments, + tileShadingDepthAttachments, + tileShadingStencilAttachments, + tileShadingInputAttachments, + tileShadingSampledAttachments, + tileShadingPerTileDraw, + tileShadingPerTileDispatch, + tileShadingDispatchTile, + tileShadingApron, + tileShadingAnisotropicApron, + tileShadingAtomicOps, + tileShadingImageProcessing ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTileShadingFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceTileShadingFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tileShading == rhs.tileShading ) && + ( tileShadingFragmentStage == rhs.tileShadingFragmentStage ) && ( tileShadingColorAttachments == rhs.tileShadingColorAttachments ) && + ( tileShadingDepthAttachments == rhs.tileShadingDepthAttachments ) && ( tileShadingStencilAttachments == rhs.tileShadingStencilAttachments ) && + ( tileShadingInputAttachments == rhs.tileShadingInputAttachments ) && ( tileShadingSampledAttachments == rhs.tileShadingSampledAttachments ) && + ( tileShadingPerTileDraw == rhs.tileShadingPerTileDraw ) && ( tileShadingPerTileDispatch == rhs.tileShadingPerTileDispatch ) && + ( tileShadingDispatchTile == rhs.tileShadingDispatchTile ) && ( tileShadingApron == rhs.tileShadingApron ) && + ( tileShadingAnisotropicApron == rhs.tileShadingAnisotropicApron ) && ( tileShadingAtomicOps == rhs.tileShadingAtomicOps ) && + ( tileShadingImageProcessing == rhs.tileShadingImageProcessing ); +# endif + } + + bool operator!=( PhysicalDeviceTileShadingFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTileShadingFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShading = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingFragmentStage = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingColorAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingDepthAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingStencilAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingInputAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingSampledAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingPerTileDraw = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingPerTileDispatch = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingDispatchTile = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingApron = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingAnisotropicApron = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingAtomicOps = {}; + VULKAN_HPP_NAMESPACE::Bool32 tileShadingImageProcessing = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTileShadingFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceTileShadingPropertiesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTileShadingPropertiesQCOM.html + struct PhysicalDeviceTileShadingPropertiesQCOM + { + using NativeType = VkPhysicalDeviceTileShadingPropertiesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTileShadingPropertiesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileShadingPropertiesQCOM( uint32_t maxApronSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 preferNonCoherent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D tileGranularity_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxTileShadingRate_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxApronSize{ maxApronSize_ } + , preferNonCoherent{ preferNonCoherent_ } + , tileGranularity{ tileGranularity_ } + , maxTileShadingRate{ maxTileShadingRate_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTileShadingPropertiesQCOM( PhysicalDeviceTileShadingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTileShadingPropertiesQCOM( VkPhysicalDeviceTileShadingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTileShadingPropertiesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTileShadingPropertiesQCOM & operator=( PhysicalDeviceTileShadingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTileShadingPropertiesQCOM & operator=( VkPhysicalDeviceTileShadingPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceTileShadingPropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileShadingPropertiesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileShadingPropertiesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTileShadingPropertiesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxApronSize, preferNonCoherent, tileGranularity, maxTileShadingRate ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTileShadingPropertiesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceTileShadingPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxApronSize == rhs.maxApronSize ) && ( preferNonCoherent == rhs.preferNonCoherent ) && + ( tileGranularity == rhs.tileGranularity ) && ( maxTileShadingRate == rhs.maxTileShadingRate ); +# endif + } + + bool operator!=( PhysicalDeviceTileShadingPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTileShadingPropertiesQCOM; + void * pNext = {}; + uint32_t maxApronSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 preferNonCoherent = {}; + VULKAN_HPP_NAMESPACE::Extent2D tileGranularity = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxTileShadingRate = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTileShadingPropertiesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceTimelineSemaphoreFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTimelineSemaphoreFeatures.html + struct PhysicalDeviceTimelineSemaphoreFeatures + { + using NativeType = VkPhysicalDeviceTimelineSemaphoreFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTimelineSemaphoreFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreFeatures( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , timelineSemaphore{ timelineSemaphore_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreFeatures( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTimelineSemaphoreFeatures( VkPhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTimelineSemaphoreFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTimelineSemaphoreFeatures & operator=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTimelineSemaphoreFeatures & operator=( VkPhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures & + setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT + { + timelineSemaphore = timelineSemaphore_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTimelineSemaphoreFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTimelineSemaphoreFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTimelineSemaphoreFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTimelineSemaphoreFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, timelineSemaphore ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTimelineSemaphoreFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timelineSemaphore == rhs.timelineSemaphore ); +# endif + } + + bool operator!=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTimelineSemaphoreFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTimelineSemaphoreFeatures; + }; + + using PhysicalDeviceTimelineSemaphoreFeaturesKHR = PhysicalDeviceTimelineSemaphoreFeatures; + + // wrapper struct for struct VkPhysicalDeviceTimelineSemaphoreProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTimelineSemaphoreProperties.html + struct PhysicalDeviceTimelineSemaphoreProperties + { + using NativeType = VkPhysicalDeviceTimelineSemaphoreProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTimelineSemaphoreProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreProperties( uint64_t maxTimelineSemaphoreValueDifference_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxTimelineSemaphoreValueDifference{ maxTimelineSemaphoreValueDifference_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTimelineSemaphoreProperties( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTimelineSemaphoreProperties( VkPhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTimelineSemaphoreProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTimelineSemaphoreProperties & operator=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTimelineSemaphoreProperties & operator=( VkPhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceTimelineSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTimelineSemaphoreProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTimelineSemaphoreProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTimelineSemaphoreProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxTimelineSemaphoreValueDifference ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTimelineSemaphoreProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference ); +# endif + } + + bool operator!=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTimelineSemaphoreProperties; + void * pNext = {}; + uint64_t maxTimelineSemaphoreValueDifference = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTimelineSemaphoreProperties; + }; + + using PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties; + + // wrapper struct for struct VkPhysicalDeviceToolProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceToolProperties.html + struct PhysicalDeviceToolProperties + { + using NativeType = VkPhysicalDeviceToolProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceToolProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolProperties( std::array const & name_ = {}, + std::array const & version_ = {}, + VULKAN_HPP_NAMESPACE::ToolPurposeFlags purposes_ = {}, + std::array const & description_ = {}, + std::array const & layer_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , name{ name_ } + , version{ version_ } + , purposes{ purposes_ } + , description{ description_ } + , layer{ layer_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolProperties( PhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceToolProperties( VkPhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceToolProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceToolProperties & operator=( PhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceToolProperties & operator=( VkPhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceToolProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceToolProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceToolProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceToolProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ToolPurposeFlags const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, name, version, purposes, description, layer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( name, rhs.name ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( version, rhs.version ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = purposes <=> rhs.purposes; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( layer, rhs.layer ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( strcmp( name, rhs.name ) == 0 ) && ( strcmp( version, rhs.version ) == 0 ) && + ( purposes == rhs.purposes ) && ( strcmp( description, rhs.description ) == 0 ) && ( strcmp( layer, rhs.layer ) == 0 ); + } + + bool operator!=( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceToolProperties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D version = {}; + VULKAN_HPP_NAMESPACE::ToolPurposeFlags purposes = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D layer = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceToolProperties; + }; + + using PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolProperties; + + // wrapper struct for struct VkPhysicalDeviceTransformFeedbackFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTransformFeedbackFeaturesEXT.html + struct PhysicalDeviceTransformFeedbackFeaturesEXT + { + using NativeType = VkPhysicalDeviceTransformFeedbackFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 transformFeedback_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 geometryStreams_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , transformFeedback{ transformFeedback_ } + , geometryStreams{ geometryStreams_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackFeaturesEXT( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTransformFeedbackFeaturesEXT( VkPhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTransformFeedbackFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTransformFeedbackFeaturesEXT & operator=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTransformFeedbackFeaturesEXT & operator=( VkPhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & + setTransformFeedback( VULKAN_HPP_NAMESPACE::Bool32 transformFeedback_ ) VULKAN_HPP_NOEXCEPT + { + transformFeedback = transformFeedback_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & setGeometryStreams( VULKAN_HPP_NAMESPACE::Bool32 geometryStreams_ ) VULKAN_HPP_NOEXCEPT + { + geometryStreams = geometryStreams_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceTransformFeedbackFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTransformFeedbackFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTransformFeedbackFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTransformFeedbackFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, transformFeedback, geometryStreams ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTransformFeedbackFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transformFeedback == rhs.transformFeedback ) && ( geometryStreams == rhs.geometryStreams ); +# endif + } + + bool operator!=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedback = {}; + VULKAN_HPP_NAMESPACE::Bool32 geometryStreams = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTransformFeedbackFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceTransformFeedbackPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceTransformFeedbackPropertiesEXT.html + struct PhysicalDeviceTransformFeedbackPropertiesEXT + { + using NativeType = VkPhysicalDeviceTransformFeedbackPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackPropertiesEXT( uint32_t maxTransformFeedbackStreams_ = {}, + uint32_t maxTransformFeedbackBuffers_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxTransformFeedbackBufferSize_ = {}, + uint32_t maxTransformFeedbackStreamDataSize_ = {}, + uint32_t maxTransformFeedbackBufferDataSize_ = {}, + uint32_t maxTransformFeedbackBufferDataStride_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackQueries_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackStreamsLinesTriangles_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackRasterizationStreamSelect_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackDraw_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxTransformFeedbackStreams{ maxTransformFeedbackStreams_ } + , maxTransformFeedbackBuffers{ maxTransformFeedbackBuffers_ } + , maxTransformFeedbackBufferSize{ maxTransformFeedbackBufferSize_ } + , maxTransformFeedbackStreamDataSize{ maxTransformFeedbackStreamDataSize_ } + , maxTransformFeedbackBufferDataSize{ maxTransformFeedbackBufferDataSize_ } + , maxTransformFeedbackBufferDataStride{ maxTransformFeedbackBufferDataStride_ } + , transformFeedbackQueries{ transformFeedbackQueries_ } + , transformFeedbackStreamsLinesTriangles{ transformFeedbackStreamsLinesTriangles_ } + , transformFeedbackRasterizationStreamSelect{ transformFeedbackRasterizationStreamSelect_ } + , transformFeedbackDraw{ transformFeedbackDraw_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceTransformFeedbackPropertiesEXT( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceTransformFeedbackPropertiesEXT( VkPhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceTransformFeedbackPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceTransformFeedbackPropertiesEXT & operator=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceTransformFeedbackPropertiesEXT & operator=( VkPhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceTransformFeedbackPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTransformFeedbackPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTransformFeedbackPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceTransformFeedbackPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + maxTransformFeedbackStreams, + maxTransformFeedbackBuffers, + maxTransformFeedbackBufferSize, + maxTransformFeedbackStreamDataSize, + maxTransformFeedbackBufferDataSize, + maxTransformFeedbackBufferDataStride, + transformFeedbackQueries, + transformFeedbackStreamsLinesTriangles, + transformFeedbackRasterizationStreamSelect, + transformFeedbackDraw ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceTransformFeedbackPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxTransformFeedbackStreams == rhs.maxTransformFeedbackStreams ) && + ( maxTransformFeedbackBuffers == rhs.maxTransformFeedbackBuffers ) && ( maxTransformFeedbackBufferSize == rhs.maxTransformFeedbackBufferSize ) && + ( maxTransformFeedbackStreamDataSize == rhs.maxTransformFeedbackStreamDataSize ) && + ( maxTransformFeedbackBufferDataSize == rhs.maxTransformFeedbackBufferDataSize ) && + ( maxTransformFeedbackBufferDataStride == rhs.maxTransformFeedbackBufferDataStride ) && + ( transformFeedbackQueries == rhs.transformFeedbackQueries ) && + ( transformFeedbackStreamsLinesTriangles == rhs.transformFeedbackStreamsLinesTriangles ) && + ( transformFeedbackRasterizationStreamSelect == rhs.transformFeedbackRasterizationStreamSelect ) && + ( transformFeedbackDraw == rhs.transformFeedbackDraw ); +# endif + } + + bool operator!=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT; + void * pNext = {}; + uint32_t maxTransformFeedbackStreams = {}; + uint32_t maxTransformFeedbackBuffers = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxTransformFeedbackBufferSize = {}; + uint32_t maxTransformFeedbackStreamDataSize = {}; + uint32_t maxTransformFeedbackBufferDataSize = {}; + uint32_t maxTransformFeedbackBufferDataStride = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackQueries = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackStreamsLinesTriangles = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackRasterizationStreamSelect = {}; + VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackDraw = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceTransformFeedbackPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR.html + struct PhysicalDeviceUnifiedImageLayoutsFeaturesKHR + { + using NativeType = VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceUnifiedImageLayoutsFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 unifiedImageLayouts_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 unifiedImageLayoutsVideo_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , unifiedImageLayouts{ unifiedImageLayouts_ } + , unifiedImageLayoutsVideo{ unifiedImageLayoutsVideo_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceUnifiedImageLayoutsFeaturesKHR( PhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceUnifiedImageLayoutsFeaturesKHR( VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceUnifiedImageLayoutsFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceUnifiedImageLayoutsFeaturesKHR & operator=( PhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceUnifiedImageLayoutsFeaturesKHR & operator=( VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUnifiedImageLayoutsFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUnifiedImageLayoutsFeaturesKHR & + setUnifiedImageLayouts( VULKAN_HPP_NAMESPACE::Bool32 unifiedImageLayouts_ ) VULKAN_HPP_NOEXCEPT + { + unifiedImageLayouts = unifiedImageLayouts_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUnifiedImageLayoutsFeaturesKHR & + setUnifiedImageLayoutsVideo( VULKAN_HPP_NAMESPACE::Bool32 unifiedImageLayoutsVideo_ ) VULKAN_HPP_NOEXCEPT + { + unifiedImageLayoutsVideo = unifiedImageLayoutsVideo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, unifiedImageLayouts, unifiedImageLayoutsVideo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( unifiedImageLayouts == rhs.unifiedImageLayouts ) && + ( unifiedImageLayoutsVideo == rhs.unifiedImageLayoutsVideo ); +# endif + } + + bool operator!=( PhysicalDeviceUnifiedImageLayoutsFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 unifiedImageLayouts = {}; + VULKAN_HPP_NAMESPACE::Bool32 unifiedImageLayoutsVideo = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.html + struct PhysicalDeviceUniformBufferStandardLayoutFeatures + { + using NativeType = VkPhysicalDeviceUniformBufferStandardLayoutFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceUniformBufferStandardLayoutFeatures( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , uniformBufferStandardLayout{ uniformBufferStandardLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceUniformBufferStandardLayoutFeatures( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceUniformBufferStandardLayoutFeatures( VkPhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceUniformBufferStandardLayoutFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceUniformBufferStandardLayoutFeatures & + operator=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceUniformBufferStandardLayoutFeatures & operator=( VkPhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures & + setUniformBufferStandardLayout( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ ) VULKAN_HPP_NOEXCEPT + { + uniformBufferStandardLayout = uniformBufferStandardLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, uniformBufferStandardLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceUniformBufferStandardLayoutFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( uniformBufferStandardLayout == rhs.uniformBufferStandardLayout ); +# endif + } + + bool operator!=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceUniformBufferStandardLayoutFeatures; + }; + + using PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR = PhysicalDeviceUniformBufferStandardLayoutFeatures; + + // wrapper struct for struct VkPhysicalDeviceVariablePointersFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVariablePointersFeatures.html + struct PhysicalDeviceVariablePointersFeatures + { + using NativeType = VkPhysicalDeviceVariablePointersFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVariablePointersFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVariablePointersFeatures( VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , variablePointersStorageBuffer{ variablePointersStorageBuffer_ } + , variablePointers{ variablePointers_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVariablePointersFeatures( PhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVariablePointersFeatures( VkPhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVariablePointersFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVariablePointersFeatures & operator=( PhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVariablePointersFeatures & operator=( VkPhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & + setVariablePointersStorageBuffer( VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ ) VULKAN_HPP_NOEXCEPT + { + variablePointersStorageBuffer = variablePointersStorageBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT + { + variablePointers = variablePointers_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVariablePointersFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVariablePointersFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVariablePointersFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVariablePointersFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, variablePointersStorageBuffer, variablePointers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVariablePointersFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceVariablePointersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( variablePointersStorageBuffer == rhs.variablePointersStorageBuffer ) && + ( variablePointers == rhs.variablePointers ); +# endif + } + + bool operator!=( PhysicalDeviceVariablePointersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVariablePointersFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 variablePointers = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVariablePointersFeatures; + }; + + using PhysicalDeviceVariablePointerFeatures = PhysicalDeviceVariablePointersFeatures; + using PhysicalDeviceVariablePointerFeaturesKHR = PhysicalDeviceVariablePointersFeatures; + using PhysicalDeviceVariablePointersFeaturesKHR = PhysicalDeviceVariablePointersFeatures; + + // wrapper struct for struct VkPhysicalDeviceVertexAttributeDivisorFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVertexAttributeDivisorFeatures.html + struct PhysicalDeviceVertexAttributeDivisorFeatures + { + using NativeType = VkPhysicalDeviceVertexAttributeDivisorFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexAttributeDivisorFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeDivisorFeatures( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexAttributeInstanceRateDivisor{ vertexAttributeInstanceRateDivisor_ } + , vertexAttributeInstanceRateZeroDivisor{ vertexAttributeInstanceRateZeroDivisor_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeDivisorFeatures( PhysicalDeviceVertexAttributeDivisorFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVertexAttributeDivisorFeatures( VkPhysicalDeviceVertexAttributeDivisorFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVertexAttributeDivisorFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVertexAttributeDivisorFeatures & operator=( PhysicalDeviceVertexAttributeDivisorFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVertexAttributeDivisorFeatures & operator=( VkPhysicalDeviceVertexAttributeDivisorFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeatures & + setVertexAttributeInstanceRateDivisor( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeInstanceRateDivisor = vertexAttributeInstanceRateDivisor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeatures & + setVertexAttributeInstanceRateZeroDivisor( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeInstanceRateZeroDivisor = vertexAttributeInstanceRateZeroDivisor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVertexAttributeDivisorFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexAttributeInstanceRateDivisor, vertexAttributeInstanceRateZeroDivisor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVertexAttributeDivisorFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceVertexAttributeDivisorFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexAttributeInstanceRateDivisor == rhs.vertexAttributeInstanceRateDivisor ) && + ( vertexAttributeInstanceRateZeroDivisor == rhs.vertexAttributeInstanceRateZeroDivisor ); +# endif + } + + bool operator!=( PhysicalDeviceVertexAttributeDivisorFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexAttributeDivisorFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVertexAttributeDivisorFeatures; + }; + + using PhysicalDeviceVertexAttributeDivisorFeaturesEXT = PhysicalDeviceVertexAttributeDivisorFeatures; + using PhysicalDeviceVertexAttributeDivisorFeaturesKHR = PhysicalDeviceVertexAttributeDivisorFeatures; + + // wrapper struct for struct VkPhysicalDeviceVertexAttributeDivisorProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVertexAttributeDivisorProperties.html + struct PhysicalDeviceVertexAttributeDivisorProperties + { + using NativeType = VkPhysicalDeviceVertexAttributeDivisorProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexAttributeDivisorProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeDivisorProperties( uint32_t maxVertexAttribDivisor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 supportsNonZeroFirstInstance_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxVertexAttribDivisor{ maxVertexAttribDivisor_ } + , supportsNonZeroFirstInstance{ supportsNonZeroFirstInstance_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVertexAttributeDivisorProperties( PhysicalDeviceVertexAttributeDivisorProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVertexAttributeDivisorProperties( VkPhysicalDeviceVertexAttributeDivisorProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVertexAttributeDivisorProperties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVertexAttributeDivisorProperties & operator=( PhysicalDeviceVertexAttributeDivisorProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVertexAttributeDivisorProperties & operator=( VkPhysicalDeviceVertexAttributeDivisorProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceVertexAttributeDivisorProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxVertexAttribDivisor, supportsNonZeroFirstInstance ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVertexAttributeDivisorProperties const & ) const = default; +#else + bool operator==( PhysicalDeviceVertexAttributeDivisorProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVertexAttribDivisor == rhs.maxVertexAttribDivisor ) && + ( supportsNonZeroFirstInstance == rhs.supportsNonZeroFirstInstance ); +# endif + } + + bool operator!=( PhysicalDeviceVertexAttributeDivisorProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexAttributeDivisorProperties; + void * pNext = {}; + uint32_t maxVertexAttribDivisor = {}; + VULKAN_HPP_NAMESPACE::Bool32 supportsNonZeroFirstInstance = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVertexAttributeDivisorProperties; + }; + + using PhysicalDeviceVertexAttributeDivisorPropertiesKHR = PhysicalDeviceVertexAttributeDivisorProperties; + + // wrapper struct for struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.html + struct PhysicalDeviceVertexAttributeDivisorPropertiesEXT + { + using NativeType = VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeDivisorPropertiesEXT( uint32_t maxVertexAttribDivisor_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxVertexAttribDivisor{ maxVertexAttribDivisor_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVertexAttributeDivisorPropertiesEXT( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVertexAttributeDivisorPropertiesEXT( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVertexAttributeDivisorPropertiesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVertexAttributeDivisorPropertiesEXT & + operator=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVertexAttributeDivisorPropertiesEXT & operator=( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxVertexAttribDivisor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVertexAttribDivisor == rhs.maxVertexAttribDivisor ); +# endif + } + + bool operator!=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT; + void * pNext = {}; + uint32_t maxVertexAttribDivisor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVertexAttributeDivisorPropertiesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT.html + struct PhysicalDeviceVertexAttributeRobustnessFeaturesEXT + { + using NativeType = VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexAttributeRobustnessFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeRobustness_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexAttributeRobustness{ vertexAttributeRobustness_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVertexAttributeRobustnessFeaturesEXT( PhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVertexAttributeRobustnessFeaturesEXT( VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVertexAttributeRobustnessFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVertexAttributeRobustnessFeaturesEXT & + operator=( PhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVertexAttributeRobustnessFeaturesEXT & operator=( VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeRobustnessFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeRobustnessFeaturesEXT & + setVertexAttributeRobustness( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeRobustness_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeRobustness = vertexAttributeRobustness_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexAttributeRobustness ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexAttributeRobustness == rhs.vertexAttributeRobustness ); +# endif + } + + bool operator!=( PhysicalDeviceVertexAttributeRobustnessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeRobustness = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.html + struct PhysicalDeviceVertexInputDynamicStateFeaturesEXT + { + using NativeType = VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVertexInputDynamicStateFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexInputDynamicState{ vertexInputDynamicState_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVertexInputDynamicStateFeaturesEXT( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVertexInputDynamicStateFeaturesEXT( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVertexInputDynamicStateFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVertexInputDynamicStateFeaturesEXT & operator=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVertexInputDynamicStateFeaturesEXT & operator=( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT & + setVertexInputDynamicState( VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState_ ) VULKAN_HPP_NOEXCEPT + { + vertexInputDynamicState = vertexInputDynamicState_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexInputDynamicState ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexInputDynamicState == rhs.vertexInputDynamicState ); +# endif + } + + bool operator!=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVertexInputDynamicStateFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoDecodeVP9FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoDecodeVP9FeaturesKHR.html + struct PhysicalDeviceVideoDecodeVP9FeaturesKHR + { + using NativeType = VkPhysicalDeviceVideoDecodeVP9FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoDecodeVp9FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoDecodeVP9FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 videoDecodeVP9_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoDecodeVP9{ videoDecodeVP9_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoDecodeVP9FeaturesKHR( PhysicalDeviceVideoDecodeVP9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoDecodeVP9FeaturesKHR( VkPhysicalDeviceVideoDecodeVP9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoDecodeVP9FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoDecodeVP9FeaturesKHR & operator=( PhysicalDeviceVideoDecodeVP9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoDecodeVP9FeaturesKHR & operator=( VkPhysicalDeviceVideoDecodeVP9FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoDecodeVP9FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoDecodeVP9FeaturesKHR & setVideoDecodeVP9( VULKAN_HPP_NAMESPACE::Bool32 videoDecodeVP9_ ) VULKAN_HPP_NOEXCEPT + { + videoDecodeVP9 = videoDecodeVP9_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoDecodeVP9FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoDecodeVP9FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoDecodeVP9FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoDecodeVP9FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoDecodeVP9 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoDecodeVP9FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoDecodeVP9FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoDecodeVP9 == rhs.videoDecodeVP9 ); +# endif + } + + bool operator!=( PhysicalDeviceVideoDecodeVP9FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoDecodeVp9FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 videoDecodeVP9 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoDecodeVP9FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoEncodeAV1FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoEncodeAV1FeaturesKHR.html + struct PhysicalDeviceVideoEncodeAV1FeaturesKHR + { + using NativeType = VkPhysicalDeviceVideoEncodeAV1FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoEncodeAv1FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoEncodeAV1FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 videoEncodeAV1_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoEncodeAV1{ videoEncodeAV1_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoEncodeAV1FeaturesKHR( PhysicalDeviceVideoEncodeAV1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoEncodeAV1FeaturesKHR( VkPhysicalDeviceVideoEncodeAV1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoEncodeAV1FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoEncodeAV1FeaturesKHR & operator=( PhysicalDeviceVideoEncodeAV1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoEncodeAV1FeaturesKHR & operator=( VkPhysicalDeviceVideoEncodeAV1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeAV1FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeAV1FeaturesKHR & setVideoEncodeAV1( VULKAN_HPP_NAMESPACE::Bool32 videoEncodeAV1_ ) VULKAN_HPP_NOEXCEPT + { + videoEncodeAV1 = videoEncodeAV1_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoEncodeAV1FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeAV1FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeAV1FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeAV1FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoEncodeAV1 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoEncodeAV1FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoEncodeAV1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoEncodeAV1 == rhs.videoEncodeAV1 ); +# endif + } + + bool operator!=( PhysicalDeviceVideoEncodeAV1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoEncodeAv1FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 videoEncodeAV1 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoEncodeAV1FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR.html + struct PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR + { + using NativeType = VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 videoEncodeIntraRefresh_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoEncodeIntraRefresh{ videoEncodeIntraRefresh_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR( PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR( VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR & operator=( PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR & operator=( VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR & + setVideoEncodeIntraRefresh( VULKAN_HPP_NAMESPACE::Bool32 videoEncodeIntraRefresh_ ) VULKAN_HPP_NOEXCEPT + { + videoEncodeIntraRefresh = videoEncodeIntraRefresh_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoEncodeIntraRefresh ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoEncodeIntraRefresh == rhs.videoEncodeIntraRefresh ); +# endif + } + + bool operator!=( PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 videoEncodeIntraRefresh = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR; + }; + + // wrapper struct for struct VkVideoProfileInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoProfileInfoKHR.html + struct VideoProfileInfoKHR + { + using NativeType = VkVideoProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoProfileInfoKHR( + VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation_ = VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR::eNone, + VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling_ = {}, + VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth_ = {}, + VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoCodecOperation{ videoCodecOperation_ } + , chromaSubsampling{ chromaSubsampling_ } + , lumaBitDepth{ lumaBitDepth_ } + , chromaBitDepth{ chromaBitDepth_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoProfileInfoKHR( VideoProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoProfileInfoKHR( VkVideoProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoProfileInfoKHR & operator=( VideoProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoProfileInfoKHR & operator=( VkVideoProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoProfileInfoKHR & + setVideoCodecOperation( VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation_ ) VULKAN_HPP_NOEXCEPT + { + videoCodecOperation = videoCodecOperation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoProfileInfoKHR & + setChromaSubsampling( VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling_ ) VULKAN_HPP_NOEXCEPT + { + chromaSubsampling = chromaSubsampling_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoProfileInfoKHR & setLumaBitDepth( VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth_ ) VULKAN_HPP_NOEXCEPT + { + lumaBitDepth = lumaBitDepth_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoProfileInfoKHR & setChromaBitDepth( VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth_ ) VULKAN_HPP_NOEXCEPT + { + chromaBitDepth = chromaBitDepth_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoCodecOperation, chromaSubsampling, lumaBitDepth, chromaBitDepth ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoProfileInfoKHR const & ) const = default; +#else + bool operator==( VideoProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoCodecOperation == rhs.videoCodecOperation ) && + ( chromaSubsampling == rhs.chromaSubsampling ) && ( lumaBitDepth == rhs.lumaBitDepth ) && ( chromaBitDepth == rhs.chromaBitDepth ); +# endif + } + + bool operator!=( VideoProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoProfileInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation = VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR::eNone; + VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling = {}; + VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth = {}; + VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth = {}; + }; + + template <> + struct CppType + { + using Type = VideoProfileInfoKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR.html + struct PhysicalDeviceVideoEncodeQualityLevelInfoKHR + { + using NativeType = VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoEncodeQualityLevelInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoEncodeQualityLevelInfoKHR( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pVideoProfile_ = {}, + uint32_t qualityLevel_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pVideoProfile{ pVideoProfile_ } + , qualityLevel{ qualityLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoEncodeQualityLevelInfoKHR( PhysicalDeviceVideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoEncodeQualityLevelInfoKHR( VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoEncodeQualityLevelInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoEncodeQualityLevelInfoKHR & operator=( PhysicalDeviceVideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoEncodeQualityLevelInfoKHR & operator=( VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeQualityLevelInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeQualityLevelInfoKHR & + setPVideoProfile( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pVideoProfile_ ) VULKAN_HPP_NOEXCEPT + { + pVideoProfile = pVideoProfile_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeQualityLevelInfoKHR & setQualityLevel( uint32_t qualityLevel_ ) VULKAN_HPP_NOEXCEPT + { + qualityLevel = qualityLevel_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pVideoProfile, qualityLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoEncodeQualityLevelInfoKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoEncodeQualityLevelInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pVideoProfile == rhs.pVideoProfile ) && ( qualityLevel == rhs.qualityLevel ); +# endif + } + + bool operator!=( PhysicalDeviceVideoEncodeQualityLevelInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoEncodeQualityLevelInfoKHR; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pVideoProfile = {}; + uint32_t qualityLevel = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoEncodeQualityLevelInfoKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR.html + struct PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR + { + using NativeType = VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 videoEncodeQuantizationMap_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoEncodeQuantizationMap{ videoEncodeQuantizationMap_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR( PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR( VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR & + operator=( PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR & operator=( VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR & + setVideoEncodeQuantizationMap( VULKAN_HPP_NAMESPACE::Bool32 videoEncodeQuantizationMap_ ) VULKAN_HPP_NOEXCEPT + { + videoEncodeQuantizationMap = videoEncodeQuantizationMap_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoEncodeQuantizationMap ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoEncodeQuantizationMap == rhs.videoEncodeQuantizationMap ); +# endif + } + + bool operator!=( PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 videoEncodeQuantizationMap = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoFormatInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoFormatInfoKHR.html + struct PhysicalDeviceVideoFormatInfoKHR + { + using NativeType = VkPhysicalDeviceVideoFormatInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoFormatInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoFormatInfoKHR( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageUsage{ imageUsage_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoFormatInfoKHR( PhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoFormatInfoKHR( VkPhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoFormatInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoFormatInfoKHR & operator=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoFormatInfoKHR & operator=( VkPhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoFormatInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoFormatInfoKHR & setImageUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ ) VULKAN_HPP_NOEXCEPT + { + imageUsage = imageUsage_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoFormatInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoFormatInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoFormatInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoFormatInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageUsage ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoFormatInfoKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoFormatInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageUsage == rhs.imageUsage ); +# endif + } + + bool operator!=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoFormatInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoFormatInfoKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoMaintenance1FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoMaintenance1FeaturesKHR.html + struct PhysicalDeviceVideoMaintenance1FeaturesKHR + { + using NativeType = VkPhysicalDeviceVideoMaintenance1FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoMaintenance1FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoMaintenance1FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 videoMaintenance1_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoMaintenance1{ videoMaintenance1_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoMaintenance1FeaturesKHR( PhysicalDeviceVideoMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoMaintenance1FeaturesKHR( VkPhysicalDeviceVideoMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoMaintenance1FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoMaintenance1FeaturesKHR & operator=( PhysicalDeviceVideoMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoMaintenance1FeaturesKHR & operator=( VkPhysicalDeviceVideoMaintenance1FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoMaintenance1FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoMaintenance1FeaturesKHR & + setVideoMaintenance1( VULKAN_HPP_NAMESPACE::Bool32 videoMaintenance1_ ) VULKAN_HPP_NOEXCEPT + { + videoMaintenance1 = videoMaintenance1_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoMaintenance1FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoMaintenance1FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoMaintenance1FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoMaintenance1FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoMaintenance1 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoMaintenance1FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoMaintenance1 == rhs.videoMaintenance1 ); +# endif + } + + bool operator!=( PhysicalDeviceVideoMaintenance1FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoMaintenance1FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 videoMaintenance1 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoMaintenance1FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVideoMaintenance2FeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVideoMaintenance2FeaturesKHR.html + struct PhysicalDeviceVideoMaintenance2FeaturesKHR + { + using NativeType = VkPhysicalDeviceVideoMaintenance2FeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoMaintenance2FeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoMaintenance2FeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 videoMaintenance2_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoMaintenance2{ videoMaintenance2_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVideoMaintenance2FeaturesKHR( PhysicalDeviceVideoMaintenance2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVideoMaintenance2FeaturesKHR( VkPhysicalDeviceVideoMaintenance2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVideoMaintenance2FeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVideoMaintenance2FeaturesKHR & operator=( PhysicalDeviceVideoMaintenance2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVideoMaintenance2FeaturesKHR & operator=( VkPhysicalDeviceVideoMaintenance2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoMaintenance2FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoMaintenance2FeaturesKHR & + setVideoMaintenance2( VULKAN_HPP_NAMESPACE::Bool32 videoMaintenance2_ ) VULKAN_HPP_NOEXCEPT + { + videoMaintenance2 = videoMaintenance2_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVideoMaintenance2FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoMaintenance2FeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoMaintenance2FeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVideoMaintenance2FeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoMaintenance2 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVideoMaintenance2FeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceVideoMaintenance2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoMaintenance2 == rhs.videoMaintenance2 ); +# endif + } + + bool operator!=( PhysicalDeviceVideoMaintenance2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVideoMaintenance2FeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 videoMaintenance2 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVideoMaintenance2FeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan11Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan11Features.html + struct PhysicalDeviceVulkan11Features + { + using NativeType = VkPhysicalDeviceVulkan11Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan11Features( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiview_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , storageBuffer16BitAccess{ storageBuffer16BitAccess_ } + , uniformAndStorageBuffer16BitAccess{ uniformAndStorageBuffer16BitAccess_ } + , storagePushConstant16{ storagePushConstant16_ } + , storageInputOutput16{ storageInputOutput16_ } + , multiview{ multiview_ } + , multiviewGeometryShader{ multiviewGeometryShader_ } + , multiviewTessellationShader{ multiviewTessellationShader_ } + , variablePointersStorageBuffer{ variablePointersStorageBuffer_ } + , variablePointers{ variablePointers_ } + , protectedMemory{ protectedMemory_ } + , samplerYcbcrConversion{ samplerYcbcrConversion_ } + , shaderDrawParameters{ shaderDrawParameters_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan11Features( PhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan11Features( VkPhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan11Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan11Features & operator=( PhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan11Features & operator=( VkPhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & + setStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + storageBuffer16BitAccess = storageBuffer16BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & + setUniformAndStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setStoragePushConstant16( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ ) VULKAN_HPP_NOEXCEPT + { + storagePushConstant16 = storagePushConstant16_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setStorageInputOutput16( VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ ) VULKAN_HPP_NOEXCEPT + { + storageInputOutput16 = storageInputOutput16_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT + { + multiview = multiview_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & + setMultiviewGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ ) VULKAN_HPP_NOEXCEPT + { + multiviewGeometryShader = multiviewGeometryShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & + setMultiviewTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ ) VULKAN_HPP_NOEXCEPT + { + multiviewTessellationShader = multiviewTessellationShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & + setVariablePointersStorageBuffer( VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ ) VULKAN_HPP_NOEXCEPT + { + variablePointersStorageBuffer = variablePointersStorageBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT + { + variablePointers = variablePointers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT + { + protectedMemory = protectedMemory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & + setSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ ) VULKAN_HPP_NOEXCEPT + { + samplerYcbcrConversion = samplerYcbcrConversion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setShaderDrawParameters( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ ) VULKAN_HPP_NOEXCEPT + { + shaderDrawParameters = shaderDrawParameters_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVulkan11Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan11Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan11Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan11Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + storageBuffer16BitAccess, + uniformAndStorageBuffer16BitAccess, + storagePushConstant16, + storageInputOutput16, + multiview, + multiviewGeometryShader, + multiviewTessellationShader, + variablePointersStorageBuffer, + variablePointers, + protectedMemory, + samplerYcbcrConversion, + shaderDrawParameters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan11Features const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan11Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess ) && + ( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess ) && ( storagePushConstant16 == rhs.storagePushConstant16 ) && + ( storageInputOutput16 == rhs.storageInputOutput16 ) && ( multiview == rhs.multiview ) && + ( multiviewGeometryShader == rhs.multiviewGeometryShader ) && ( multiviewTessellationShader == rhs.multiviewTessellationShader ) && + ( variablePointersStorageBuffer == rhs.variablePointersStorageBuffer ) && ( variablePointers == rhs.variablePointers ) && + ( protectedMemory == rhs.protectedMemory ) && ( samplerYcbcrConversion == rhs.samplerYcbcrConversion ) && + ( shaderDrawParameters == rhs.shaderDrawParameters ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan11Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan11Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiview = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader = {}; + VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 variablePointers = {}; + VULKAN_HPP_NAMESPACE::Bool32 protectedMemory = {}; + VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan11Features; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan11Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan11Properties.html + struct PhysicalDeviceVulkan11Properties + { + using NativeType = VkPhysicalDeviceVulkan11Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Properties( + std::array const & deviceUUID_ = {}, + std::array const & driverUUID_ = {}, + std::array const & deviceLUID_ = {}, + uint32_t deviceNodeMask_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid_ = {}, + uint32_t subgroupSize_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags subgroupSupportedStages_ = {}, + VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags subgroupSupportedOperations_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 subgroupQuadOperationsInAllStages_ = {}, + VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior_ = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes, + uint32_t maxMultiviewViewCount_ = {}, + uint32_t maxMultiviewInstanceIndex_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault_ = {}, + uint32_t maxPerSetDescriptors_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , deviceUUID{ deviceUUID_ } + , driverUUID{ driverUUID_ } + , deviceLUID{ deviceLUID_ } + , deviceNodeMask{ deviceNodeMask_ } + , deviceLUIDValid{ deviceLUIDValid_ } + , subgroupSize{ subgroupSize_ } + , subgroupSupportedStages{ subgroupSupportedStages_ } + , subgroupSupportedOperations{ subgroupSupportedOperations_ } + , subgroupQuadOperationsInAllStages{ subgroupQuadOperationsInAllStages_ } + , pointClippingBehavior{ pointClippingBehavior_ } + , maxMultiviewViewCount{ maxMultiviewViewCount_ } + , maxMultiviewInstanceIndex{ maxMultiviewInstanceIndex_ } + , protectedNoFault{ protectedNoFault_ } + , maxPerSetDescriptors{ maxPerSetDescriptors_ } + , maxMemoryAllocationSize{ maxMemoryAllocationSize_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Properties( PhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan11Properties( VkPhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan11Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan11Properties & operator=( PhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan11Properties & operator=( VkPhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceVulkan11Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan11Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan11Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan11Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ShaderStageFlags const &, + VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::PointClippingBehavior const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::DeviceSize const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + deviceUUID, + driverUUID, + deviceLUID, + deviceNodeMask, + deviceLUIDValid, + subgroupSize, + subgroupSupportedStages, + subgroupSupportedOperations, + subgroupQuadOperationsInAllStages, + pointClippingBehavior, + maxMultiviewViewCount, + maxMultiviewInstanceIndex, + protectedNoFault, + maxPerSetDescriptors, + maxMemoryAllocationSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan11Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan11Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceUUID == rhs.deviceUUID ) && ( driverUUID == rhs.driverUUID ) && + ( deviceLUID == rhs.deviceLUID ) && ( deviceNodeMask == rhs.deviceNodeMask ) && ( deviceLUIDValid == rhs.deviceLUIDValid ) && + ( subgroupSize == rhs.subgroupSize ) && ( subgroupSupportedStages == rhs.subgroupSupportedStages ) && + ( subgroupSupportedOperations == rhs.subgroupSupportedOperations ) && + ( subgroupQuadOperationsInAllStages == rhs.subgroupQuadOperationsInAllStages ) && ( pointClippingBehavior == rhs.pointClippingBehavior ) && + ( maxMultiviewViewCount == rhs.maxMultiviewViewCount ) && ( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex ) && + ( protectedNoFault == rhs.protectedNoFault ) && ( maxPerSetDescriptors == rhs.maxPerSetDescriptors ) && + ( maxMemoryAllocationSize == rhs.maxMemoryAllocationSize ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan11Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan11Properties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceUUID = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverUUID = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D deviceLUID = {}; + uint32_t deviceNodeMask = {}; + VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid = {}; + uint32_t subgroupSize = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags subgroupSupportedStages = {}; + VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags subgroupSupportedOperations = {}; + VULKAN_HPP_NAMESPACE::Bool32 subgroupQuadOperationsInAllStages = {}; + VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior = VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes; + uint32_t maxMultiviewViewCount = {}; + uint32_t maxMultiviewInstanceIndex = {}; + VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault = {}; + uint32_t maxPerSetDescriptors = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan11Properties; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan12Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan12Features.html + struct PhysicalDeviceVulkan12Features + { + using NativeType = VkPhysicalDeviceVulkan12Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan12Features( VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , samplerMirrorClampToEdge{ samplerMirrorClampToEdge_ } + , drawIndirectCount{ drawIndirectCount_ } + , storageBuffer8BitAccess{ storageBuffer8BitAccess_ } + , uniformAndStorageBuffer8BitAccess{ uniformAndStorageBuffer8BitAccess_ } + , storagePushConstant8{ storagePushConstant8_ } + , shaderBufferInt64Atomics{ shaderBufferInt64Atomics_ } + , shaderSharedInt64Atomics{ shaderSharedInt64Atomics_ } + , shaderFloat16{ shaderFloat16_ } + , shaderInt8{ shaderInt8_ } + , descriptorIndexing{ descriptorIndexing_ } + , shaderInputAttachmentArrayDynamicIndexing{ shaderInputAttachmentArrayDynamicIndexing_ } + , shaderUniformTexelBufferArrayDynamicIndexing{ shaderUniformTexelBufferArrayDynamicIndexing_ } + , shaderStorageTexelBufferArrayDynamicIndexing{ shaderStorageTexelBufferArrayDynamicIndexing_ } + , shaderUniformBufferArrayNonUniformIndexing{ shaderUniformBufferArrayNonUniformIndexing_ } + , shaderSampledImageArrayNonUniformIndexing{ shaderSampledImageArrayNonUniformIndexing_ } + , shaderStorageBufferArrayNonUniformIndexing{ shaderStorageBufferArrayNonUniformIndexing_ } + , shaderStorageImageArrayNonUniformIndexing{ shaderStorageImageArrayNonUniformIndexing_ } + , shaderInputAttachmentArrayNonUniformIndexing{ shaderInputAttachmentArrayNonUniformIndexing_ } + , shaderUniformTexelBufferArrayNonUniformIndexing{ shaderUniformTexelBufferArrayNonUniformIndexing_ } + , shaderStorageTexelBufferArrayNonUniformIndexing{ shaderStorageTexelBufferArrayNonUniformIndexing_ } + , descriptorBindingUniformBufferUpdateAfterBind{ descriptorBindingUniformBufferUpdateAfterBind_ } + , descriptorBindingSampledImageUpdateAfterBind{ descriptorBindingSampledImageUpdateAfterBind_ } + , descriptorBindingStorageImageUpdateAfterBind{ descriptorBindingStorageImageUpdateAfterBind_ } + , descriptorBindingStorageBufferUpdateAfterBind{ descriptorBindingStorageBufferUpdateAfterBind_ } + , descriptorBindingUniformTexelBufferUpdateAfterBind{ descriptorBindingUniformTexelBufferUpdateAfterBind_ } + , descriptorBindingStorageTexelBufferUpdateAfterBind{ descriptorBindingStorageTexelBufferUpdateAfterBind_ } + , descriptorBindingUpdateUnusedWhilePending{ descriptorBindingUpdateUnusedWhilePending_ } + , descriptorBindingPartiallyBound{ descriptorBindingPartiallyBound_ } + , descriptorBindingVariableDescriptorCount{ descriptorBindingVariableDescriptorCount_ } + , runtimeDescriptorArray{ runtimeDescriptorArray_ } + , samplerFilterMinmax{ samplerFilterMinmax_ } + , scalarBlockLayout{ scalarBlockLayout_ } + , imagelessFramebuffer{ imagelessFramebuffer_ } + , uniformBufferStandardLayout{ uniformBufferStandardLayout_ } + , shaderSubgroupExtendedTypes{ shaderSubgroupExtendedTypes_ } + , separateDepthStencilLayouts{ separateDepthStencilLayouts_ } + , hostQueryReset{ hostQueryReset_ } + , timelineSemaphore{ timelineSemaphore_ } + , bufferDeviceAddress{ bufferDeviceAddress_ } + , bufferDeviceAddressCaptureReplay{ bufferDeviceAddressCaptureReplay_ } + , bufferDeviceAddressMultiDevice{ bufferDeviceAddressMultiDevice_ } + , vulkanMemoryModel{ vulkanMemoryModel_ } + , vulkanMemoryModelDeviceScope{ vulkanMemoryModelDeviceScope_ } + , vulkanMemoryModelAvailabilityVisibilityChains{ vulkanMemoryModelAvailabilityVisibilityChains_ } + , shaderOutputViewportIndex{ shaderOutputViewportIndex_ } + , shaderOutputLayer{ shaderOutputLayer_ } + , subgroupBroadcastDynamicId{ subgroupBroadcastDynamicId_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan12Features( PhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan12Features( VkPhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan12Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan12Features & operator=( PhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan12Features & operator=( VkPhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setSamplerMirrorClampToEdge( VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge_ ) VULKAN_HPP_NOEXCEPT + { + samplerMirrorClampToEdge = samplerMirrorClampToEdge_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDrawIndirectCount( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount_ ) VULKAN_HPP_NOEXCEPT + { + drawIndirectCount = drawIndirectCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + storageBuffer8BitAccess = storageBuffer8BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setUniformAndStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setStoragePushConstant8( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ ) VULKAN_HPP_NOEXCEPT + { + storagePushConstant8 = storagePushConstant8_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderBufferInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderBufferInt64Atomics = shaderBufferInt64Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderSharedInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ ) VULKAN_HPP_NOEXCEPT + { + shaderSharedInt64Atomics = shaderSharedInt64Atomics_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloat16 = shaderFloat16_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT + { + shaderInt8 = shaderInt8_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorIndexing( VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing_ ) VULKAN_HPP_NOEXCEPT + { + descriptorIndexing = descriptorIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderInputAttachmentArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderUniformTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderStorageTexelBufferArrayDynamicIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderUniformBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderSampledImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderStorageBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderStorageImageArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderInputAttachmentArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderUniformTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderStorageTexelBufferArrayNonUniformIndexing( VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT + { + shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingUniformBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingSampledImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingStorageImageUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingStorageBufferUpdateAfterBind( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingUniformTexelBufferUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingStorageTexelBufferUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingUpdateUnusedWhilePending( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingPartiallyBound( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingPartiallyBound = descriptorBindingPartiallyBound_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setDescriptorBindingVariableDescriptorCount( VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setRuntimeDescriptorArray( VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ ) VULKAN_HPP_NOEXCEPT + { + runtimeDescriptorArray = runtimeDescriptorArray_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setSamplerFilterMinmax( VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax_ ) VULKAN_HPP_NOEXCEPT + { + samplerFilterMinmax = samplerFilterMinmax_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT + { + scalarBlockLayout = scalarBlockLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setImagelessFramebuffer( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ ) VULKAN_HPP_NOEXCEPT + { + imagelessFramebuffer = imagelessFramebuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setUniformBufferStandardLayout( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ ) VULKAN_HPP_NOEXCEPT + { + uniformBufferStandardLayout = uniformBufferStandardLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderSubgroupExtendedTypes( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setSeparateDepthStencilLayouts( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ ) VULKAN_HPP_NOEXCEPT + { + separateDepthStencilLayouts = separateDepthStencilLayouts_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT + { + hostQueryReset = hostQueryReset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT + { + timelineSemaphore = timelineSemaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddress = bufferDeviceAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setBufferDeviceAddressCaptureReplay( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setBufferDeviceAddressMultiDevice( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT + { + bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT + { + vulkanMemoryModel = vulkanMemoryModel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setVulkanMemoryModelDeviceScope( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ ) VULKAN_HPP_NOEXCEPT + { + vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setVulkanMemoryModelAvailabilityVisibilityChains( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ ) VULKAN_HPP_NOEXCEPT + { + vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setShaderOutputViewportIndex( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex_ ) VULKAN_HPP_NOEXCEPT + { + shaderOutputViewportIndex = shaderOutputViewportIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderOutputLayer( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer_ ) VULKAN_HPP_NOEXCEPT + { + shaderOutputLayer = shaderOutputLayer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & + setSubgroupBroadcastDynamicId( VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId_ ) VULKAN_HPP_NOEXCEPT + { + subgroupBroadcastDynamicId = subgroupBroadcastDynamicId_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVulkan12Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan12Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan12Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan12Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + samplerMirrorClampToEdge, + drawIndirectCount, + storageBuffer8BitAccess, + uniformAndStorageBuffer8BitAccess, + storagePushConstant8, + shaderBufferInt64Atomics, + shaderSharedInt64Atomics, + shaderFloat16, + shaderInt8, + descriptorIndexing, + shaderInputAttachmentArrayDynamicIndexing, + shaderUniformTexelBufferArrayDynamicIndexing, + shaderStorageTexelBufferArrayDynamicIndexing, + shaderUniformBufferArrayNonUniformIndexing, + shaderSampledImageArrayNonUniformIndexing, + shaderStorageBufferArrayNonUniformIndexing, + shaderStorageImageArrayNonUniformIndexing, + shaderInputAttachmentArrayNonUniformIndexing, + shaderUniformTexelBufferArrayNonUniformIndexing, + shaderStorageTexelBufferArrayNonUniformIndexing, + descriptorBindingUniformBufferUpdateAfterBind, + descriptorBindingSampledImageUpdateAfterBind, + descriptorBindingStorageImageUpdateAfterBind, + descriptorBindingStorageBufferUpdateAfterBind, + descriptorBindingUniformTexelBufferUpdateAfterBind, + descriptorBindingStorageTexelBufferUpdateAfterBind, + descriptorBindingUpdateUnusedWhilePending, + descriptorBindingPartiallyBound, + descriptorBindingVariableDescriptorCount, + runtimeDescriptorArray, + samplerFilterMinmax, + scalarBlockLayout, + imagelessFramebuffer, + uniformBufferStandardLayout, + shaderSubgroupExtendedTypes, + separateDepthStencilLayouts, + hostQueryReset, + timelineSemaphore, + bufferDeviceAddress, + bufferDeviceAddressCaptureReplay, + bufferDeviceAddressMultiDevice, + vulkanMemoryModel, + vulkanMemoryModelDeviceScope, + vulkanMemoryModelAvailabilityVisibilityChains, + shaderOutputViewportIndex, + shaderOutputLayer, + subgroupBroadcastDynamicId ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan12Features const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan12Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( samplerMirrorClampToEdge == rhs.samplerMirrorClampToEdge ) && + ( drawIndirectCount == rhs.drawIndirectCount ) && ( storageBuffer8BitAccess == rhs.storageBuffer8BitAccess ) && + ( uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess ) && ( storagePushConstant8 == rhs.storagePushConstant8 ) && + ( shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics ) && ( shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics ) && + ( shaderFloat16 == rhs.shaderFloat16 ) && ( shaderInt8 == rhs.shaderInt8 ) && ( descriptorIndexing == rhs.descriptorIndexing ) && + ( shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing ) && + ( shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing ) && + ( shaderStorageTexelBufferArrayDynamicIndexing == rhs.shaderStorageTexelBufferArrayDynamicIndexing ) && + ( shaderUniformBufferArrayNonUniformIndexing == rhs.shaderUniformBufferArrayNonUniformIndexing ) && + ( shaderSampledImageArrayNonUniformIndexing == rhs.shaderSampledImageArrayNonUniformIndexing ) && + ( shaderStorageBufferArrayNonUniformIndexing == rhs.shaderStorageBufferArrayNonUniformIndexing ) && + ( shaderStorageImageArrayNonUniformIndexing == rhs.shaderStorageImageArrayNonUniformIndexing ) && + ( shaderInputAttachmentArrayNonUniformIndexing == rhs.shaderInputAttachmentArrayNonUniformIndexing ) && + ( shaderUniformTexelBufferArrayNonUniformIndexing == rhs.shaderUniformTexelBufferArrayNonUniformIndexing ) && + ( shaderStorageTexelBufferArrayNonUniformIndexing == rhs.shaderStorageTexelBufferArrayNonUniformIndexing ) && + ( descriptorBindingUniformBufferUpdateAfterBind == rhs.descriptorBindingUniformBufferUpdateAfterBind ) && + ( descriptorBindingSampledImageUpdateAfterBind == rhs.descriptorBindingSampledImageUpdateAfterBind ) && + ( descriptorBindingStorageImageUpdateAfterBind == rhs.descriptorBindingStorageImageUpdateAfterBind ) && + ( descriptorBindingStorageBufferUpdateAfterBind == rhs.descriptorBindingStorageBufferUpdateAfterBind ) && + ( descriptorBindingUniformTexelBufferUpdateAfterBind == rhs.descriptorBindingUniformTexelBufferUpdateAfterBind ) && + ( descriptorBindingStorageTexelBufferUpdateAfterBind == rhs.descriptorBindingStorageTexelBufferUpdateAfterBind ) && + ( descriptorBindingUpdateUnusedWhilePending == rhs.descriptorBindingUpdateUnusedWhilePending ) && + ( descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound ) && + ( descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount ) && + ( runtimeDescriptorArray == rhs.runtimeDescriptorArray ) && ( samplerFilterMinmax == rhs.samplerFilterMinmax ) && + ( scalarBlockLayout == rhs.scalarBlockLayout ) && ( imagelessFramebuffer == rhs.imagelessFramebuffer ) && + ( uniformBufferStandardLayout == rhs.uniformBufferStandardLayout ) && ( shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes ) && + ( separateDepthStencilLayouts == rhs.separateDepthStencilLayouts ) && ( hostQueryReset == rhs.hostQueryReset ) && + ( timelineSemaphore == rhs.timelineSemaphore ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) && + ( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) && + ( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice ) && ( vulkanMemoryModel == rhs.vulkanMemoryModel ) && + ( vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope ) && + ( vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains ) && + ( shaderOutputViewportIndex == rhs.shaderOutputViewportIndex ) && ( shaderOutputLayer == rhs.shaderOutputLayer ) && + ( subgroupBroadcastDynamicId == rhs.subgroupBroadcastDynamicId ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan12Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan12Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge = {}; + VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInt8 = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray = {}; + VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax = {}; + VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout = {}; + VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes = {}; + VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts = {}; + VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset = {}; + VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {}; + VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {}; + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel = {}; + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope = {}; + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer = {}; + VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan12Features; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan12Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan12Properties.html + struct PhysicalDeviceVulkan12Properties + { + using NativeType = VkPhysicalDeviceVulkan12Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Properties( + VULKAN_HPP_NAMESPACE::DriverId driverID_ = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary, + std::array const & driverName_ = {}, + std::array const & driverInfo_ = {}, + VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion_ = {}, + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence_ = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly, + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64_ = {}, + uint32_t maxUpdateAfterBindDescriptorsInAllPools_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 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_ = {}, + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes_ = {}, + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 independentResolve_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping_ = {}, + uint64_t maxTimelineSemaphoreValueDifference_ = {}, + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferIntegerColorSampleCounts_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , driverID{ driverID_ } + , driverName{ driverName_ } + , driverInfo{ driverInfo_ } + , conformanceVersion{ conformanceVersion_ } + , denormBehaviorIndependence{ denormBehaviorIndependence_ } + , roundingModeIndependence{ roundingModeIndependence_ } + , shaderSignedZeroInfNanPreserveFloat16{ shaderSignedZeroInfNanPreserveFloat16_ } + , shaderSignedZeroInfNanPreserveFloat32{ shaderSignedZeroInfNanPreserveFloat32_ } + , shaderSignedZeroInfNanPreserveFloat64{ shaderSignedZeroInfNanPreserveFloat64_ } + , shaderDenormPreserveFloat16{ shaderDenormPreserveFloat16_ } + , shaderDenormPreserveFloat32{ shaderDenormPreserveFloat32_ } + , shaderDenormPreserveFloat64{ shaderDenormPreserveFloat64_ } + , shaderDenormFlushToZeroFloat16{ shaderDenormFlushToZeroFloat16_ } + , shaderDenormFlushToZeroFloat32{ shaderDenormFlushToZeroFloat32_ } + , shaderDenormFlushToZeroFloat64{ shaderDenormFlushToZeroFloat64_ } + , shaderRoundingModeRTEFloat16{ shaderRoundingModeRTEFloat16_ } + , shaderRoundingModeRTEFloat32{ shaderRoundingModeRTEFloat32_ } + , shaderRoundingModeRTEFloat64{ shaderRoundingModeRTEFloat64_ } + , shaderRoundingModeRTZFloat16{ shaderRoundingModeRTZFloat16_ } + , shaderRoundingModeRTZFloat32{ shaderRoundingModeRTZFloat32_ } + , shaderRoundingModeRTZFloat64{ shaderRoundingModeRTZFloat64_ } + , maxUpdateAfterBindDescriptorsInAllPools{ maxUpdateAfterBindDescriptorsInAllPools_ } + , shaderUniformBufferArrayNonUniformIndexingNative{ shaderUniformBufferArrayNonUniformIndexingNative_ } + , shaderSampledImageArrayNonUniformIndexingNative{ shaderSampledImageArrayNonUniformIndexingNative_ } + , shaderStorageBufferArrayNonUniformIndexingNative{ shaderStorageBufferArrayNonUniformIndexingNative_ } + , shaderStorageImageArrayNonUniformIndexingNative{ shaderStorageImageArrayNonUniformIndexingNative_ } + , shaderInputAttachmentArrayNonUniformIndexingNative{ shaderInputAttachmentArrayNonUniformIndexingNative_ } + , robustBufferAccessUpdateAfterBind{ robustBufferAccessUpdateAfterBind_ } + , quadDivergentImplicitLod{ quadDivergentImplicitLod_ } + , maxPerStageDescriptorUpdateAfterBindSamplers{ maxPerStageDescriptorUpdateAfterBindSamplers_ } + , maxPerStageDescriptorUpdateAfterBindUniformBuffers{ maxPerStageDescriptorUpdateAfterBindUniformBuffers_ } + , maxPerStageDescriptorUpdateAfterBindStorageBuffers{ maxPerStageDescriptorUpdateAfterBindStorageBuffers_ } + , maxPerStageDescriptorUpdateAfterBindSampledImages{ maxPerStageDescriptorUpdateAfterBindSampledImages_ } + , maxPerStageDescriptorUpdateAfterBindStorageImages{ maxPerStageDescriptorUpdateAfterBindStorageImages_ } + , maxPerStageDescriptorUpdateAfterBindInputAttachments{ maxPerStageDescriptorUpdateAfterBindInputAttachments_ } + , maxPerStageUpdateAfterBindResources{ maxPerStageUpdateAfterBindResources_ } + , maxDescriptorSetUpdateAfterBindSamplers{ maxDescriptorSetUpdateAfterBindSamplers_ } + , maxDescriptorSetUpdateAfterBindUniformBuffers{ maxDescriptorSetUpdateAfterBindUniformBuffers_ } + , maxDescriptorSetUpdateAfterBindUniformBuffersDynamic{ maxDescriptorSetUpdateAfterBindUniformBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindStorageBuffers{ maxDescriptorSetUpdateAfterBindStorageBuffers_ } + , maxDescriptorSetUpdateAfterBindStorageBuffersDynamic{ maxDescriptorSetUpdateAfterBindStorageBuffersDynamic_ } + , maxDescriptorSetUpdateAfterBindSampledImages{ maxDescriptorSetUpdateAfterBindSampledImages_ } + , maxDescriptorSetUpdateAfterBindStorageImages{ maxDescriptorSetUpdateAfterBindStorageImages_ } + , maxDescriptorSetUpdateAfterBindInputAttachments{ maxDescriptorSetUpdateAfterBindInputAttachments_ } + , supportedDepthResolveModes{ supportedDepthResolveModes_ } + , supportedStencilResolveModes{ supportedStencilResolveModes_ } + , independentResolveNone{ independentResolveNone_ } + , independentResolve{ independentResolve_ } + , filterMinmaxSingleComponentFormats{ filterMinmaxSingleComponentFormats_ } + , filterMinmaxImageComponentMapping{ filterMinmaxImageComponentMapping_ } + , maxTimelineSemaphoreValueDifference{ maxTimelineSemaphoreValueDifference_ } + , framebufferIntegerColorSampleCounts{ framebufferIntegerColorSampleCounts_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Properties( PhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan12Properties( VkPhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan12Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan12Properties & operator=( PhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan12Properties & operator=( VkPhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceVulkan12Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan12Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan12Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan12Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::ConformanceVersion const &, + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &, + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + uint32_t const &, + VULKAN_HPP_NAMESPACE::ResolveModeFlags const &, + VULKAN_HPP_NAMESPACE::ResolveModeFlags const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + uint64_t const &, + VULKAN_HPP_NAMESPACE::SampleCountFlags const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + driverID, + driverName, + driverInfo, + conformanceVersion, + denormBehaviorIndependence, + roundingModeIndependence, + shaderSignedZeroInfNanPreserveFloat16, + shaderSignedZeroInfNanPreserveFloat32, + shaderSignedZeroInfNanPreserveFloat64, + shaderDenormPreserveFloat16, + shaderDenormPreserveFloat32, + shaderDenormPreserveFloat64, + shaderDenormFlushToZeroFloat16, + shaderDenormFlushToZeroFloat32, + shaderDenormFlushToZeroFloat64, + shaderRoundingModeRTEFloat16, + shaderRoundingModeRTEFloat32, + shaderRoundingModeRTEFloat64, + shaderRoundingModeRTZFloat16, + shaderRoundingModeRTZFloat32, + shaderRoundingModeRTZFloat64, + maxUpdateAfterBindDescriptorsInAllPools, + shaderUniformBufferArrayNonUniformIndexingNative, + shaderSampledImageArrayNonUniformIndexingNative, + shaderStorageBufferArrayNonUniformIndexingNative, + shaderStorageImageArrayNonUniformIndexingNative, + shaderInputAttachmentArrayNonUniformIndexingNative, + robustBufferAccessUpdateAfterBind, + quadDivergentImplicitLod, + maxPerStageDescriptorUpdateAfterBindSamplers, + maxPerStageDescriptorUpdateAfterBindUniformBuffers, + maxPerStageDescriptorUpdateAfterBindStorageBuffers, + maxPerStageDescriptorUpdateAfterBindSampledImages, + maxPerStageDescriptorUpdateAfterBindStorageImages, + maxPerStageDescriptorUpdateAfterBindInputAttachments, + maxPerStageUpdateAfterBindResources, + maxDescriptorSetUpdateAfterBindSamplers, + maxDescriptorSetUpdateAfterBindUniformBuffers, + maxDescriptorSetUpdateAfterBindUniformBuffersDynamic, + maxDescriptorSetUpdateAfterBindStorageBuffers, + maxDescriptorSetUpdateAfterBindStorageBuffersDynamic, + maxDescriptorSetUpdateAfterBindSampledImages, + maxDescriptorSetUpdateAfterBindStorageImages, + maxDescriptorSetUpdateAfterBindInputAttachments, + supportedDepthResolveModes, + supportedStencilResolveModes, + independentResolveNone, + independentResolve, + filterMinmaxSingleComponentFormats, + filterMinmaxImageComponentMapping, + maxTimelineSemaphoreValueDifference, + framebufferIntegerColorSampleCounts ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = driverID <=> rhs.driverID; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( driverName, rhs.driverName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( driverInfo, rhs.driverInfo ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = conformanceVersion <=> rhs.conformanceVersion; cmp != 0 ) + return cmp; + if ( auto cmp = denormBehaviorIndependence <=> rhs.denormBehaviorIndependence; cmp != 0 ) + return cmp; + if ( auto cmp = roundingModeIndependence <=> rhs.roundingModeIndependence; cmp != 0 ) + return cmp; + if ( auto cmp = shaderSignedZeroInfNanPreserveFloat16 <=> rhs.shaderSignedZeroInfNanPreserveFloat16; cmp != 0 ) + return cmp; + if ( auto cmp = shaderSignedZeroInfNanPreserveFloat32 <=> rhs.shaderSignedZeroInfNanPreserveFloat32; cmp != 0 ) + return cmp; + if ( auto cmp = shaderSignedZeroInfNanPreserveFloat64 <=> rhs.shaderSignedZeroInfNanPreserveFloat64; cmp != 0 ) + return cmp; + if ( auto cmp = shaderDenormPreserveFloat16 <=> rhs.shaderDenormPreserveFloat16; cmp != 0 ) + return cmp; + if ( auto cmp = shaderDenormPreserveFloat32 <=> rhs.shaderDenormPreserveFloat32; cmp != 0 ) + return cmp; + if ( auto cmp = shaderDenormPreserveFloat64 <=> rhs.shaderDenormPreserveFloat64; cmp != 0 ) + return cmp; + if ( auto cmp = shaderDenormFlushToZeroFloat16 <=> rhs.shaderDenormFlushToZeroFloat16; cmp != 0 ) + return cmp; + if ( auto cmp = shaderDenormFlushToZeroFloat32 <=> rhs.shaderDenormFlushToZeroFloat32; cmp != 0 ) + return cmp; + if ( auto cmp = shaderDenormFlushToZeroFloat64 <=> rhs.shaderDenormFlushToZeroFloat64; cmp != 0 ) + return cmp; + if ( auto cmp = shaderRoundingModeRTEFloat16 <=> rhs.shaderRoundingModeRTEFloat16; cmp != 0 ) + return cmp; + if ( auto cmp = shaderRoundingModeRTEFloat32 <=> rhs.shaderRoundingModeRTEFloat32; cmp != 0 ) + return cmp; + if ( auto cmp = shaderRoundingModeRTEFloat64 <=> rhs.shaderRoundingModeRTEFloat64; cmp != 0 ) + return cmp; + if ( auto cmp = shaderRoundingModeRTZFloat16 <=> rhs.shaderRoundingModeRTZFloat16; cmp != 0 ) + return cmp; + if ( auto cmp = shaderRoundingModeRTZFloat32 <=> rhs.shaderRoundingModeRTZFloat32; cmp != 0 ) + return cmp; + if ( auto cmp = shaderRoundingModeRTZFloat64 <=> rhs.shaderRoundingModeRTZFloat64; cmp != 0 ) + return cmp; + if ( auto cmp = maxUpdateAfterBindDescriptorsInAllPools <=> rhs.maxUpdateAfterBindDescriptorsInAllPools; cmp != 0 ) + return cmp; + if ( auto cmp = shaderUniformBufferArrayNonUniformIndexingNative <=> rhs.shaderUniformBufferArrayNonUniformIndexingNative; cmp != 0 ) + return cmp; + if ( auto cmp = shaderSampledImageArrayNonUniformIndexingNative <=> rhs.shaderSampledImageArrayNonUniformIndexingNative; cmp != 0 ) + return cmp; + if ( auto cmp = shaderStorageBufferArrayNonUniformIndexingNative <=> rhs.shaderStorageBufferArrayNonUniformIndexingNative; cmp != 0 ) + return cmp; + if ( auto cmp = shaderStorageImageArrayNonUniformIndexingNative <=> rhs.shaderStorageImageArrayNonUniformIndexingNative; cmp != 0 ) + return cmp; + if ( auto cmp = shaderInputAttachmentArrayNonUniformIndexingNative <=> rhs.shaderInputAttachmentArrayNonUniformIndexingNative; cmp != 0 ) + return cmp; + if ( auto cmp = robustBufferAccessUpdateAfterBind <=> rhs.robustBufferAccessUpdateAfterBind; cmp != 0 ) + return cmp; + if ( auto cmp = quadDivergentImplicitLod <=> rhs.quadDivergentImplicitLod; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageDescriptorUpdateAfterBindSamplers <=> rhs.maxPerStageDescriptorUpdateAfterBindSamplers; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageDescriptorUpdateAfterBindUniformBuffers <=> rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageDescriptorUpdateAfterBindStorageBuffers <=> rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageDescriptorUpdateAfterBindSampledImages <=> rhs.maxPerStageDescriptorUpdateAfterBindSampledImages; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageDescriptorUpdateAfterBindStorageImages <=> rhs.maxPerStageDescriptorUpdateAfterBindStorageImages; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageDescriptorUpdateAfterBindInputAttachments <=> rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments; cmp != 0 ) + return cmp; + if ( auto cmp = maxPerStageUpdateAfterBindResources <=> rhs.maxPerStageUpdateAfterBindResources; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindSamplers <=> rhs.maxDescriptorSetUpdateAfterBindSamplers; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindUniformBuffers <=> rhs.maxDescriptorSetUpdateAfterBindUniformBuffers; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindUniformBuffersDynamic <=> rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindStorageBuffers <=> rhs.maxDescriptorSetUpdateAfterBindStorageBuffers; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindStorageBuffersDynamic <=> rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindSampledImages <=> rhs.maxDescriptorSetUpdateAfterBindSampledImages; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindStorageImages <=> rhs.maxDescriptorSetUpdateAfterBindStorageImages; cmp != 0 ) + return cmp; + if ( auto cmp = maxDescriptorSetUpdateAfterBindInputAttachments <=> rhs.maxDescriptorSetUpdateAfterBindInputAttachments; cmp != 0 ) + return cmp; + if ( auto cmp = supportedDepthResolveModes <=> rhs.supportedDepthResolveModes; cmp != 0 ) + return cmp; + if ( auto cmp = supportedStencilResolveModes <=> rhs.supportedStencilResolveModes; cmp != 0 ) + return cmp; + if ( auto cmp = independentResolveNone <=> rhs.independentResolveNone; cmp != 0 ) + return cmp; + if ( auto cmp = independentResolve <=> rhs.independentResolve; cmp != 0 ) + return cmp; + if ( auto cmp = filterMinmaxSingleComponentFormats <=> rhs.filterMinmaxSingleComponentFormats; cmp != 0 ) + return cmp; + if ( auto cmp = filterMinmaxImageComponentMapping <=> rhs.filterMinmaxImageComponentMapping; cmp != 0 ) + return cmp; + if ( auto cmp = maxTimelineSemaphoreValueDifference <=> rhs.maxTimelineSemaphoreValueDifference; cmp != 0 ) + return cmp; + if ( auto cmp = framebufferIntegerColorSampleCounts <=> rhs.framebufferIntegerColorSampleCounts; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( driverID == rhs.driverID ) && ( strcmp( driverName, rhs.driverName ) == 0 ) && + ( strcmp( driverInfo, rhs.driverInfo ) == 0 ) && ( conformanceVersion == rhs.conformanceVersion ) && + ( denormBehaviorIndependence == rhs.denormBehaviorIndependence ) && ( roundingModeIndependence == rhs.roundingModeIndependence ) && + ( shaderSignedZeroInfNanPreserveFloat16 == rhs.shaderSignedZeroInfNanPreserveFloat16 ) && + ( shaderSignedZeroInfNanPreserveFloat32 == rhs.shaderSignedZeroInfNanPreserveFloat32 ) && + ( shaderSignedZeroInfNanPreserveFloat64 == rhs.shaderSignedZeroInfNanPreserveFloat64 ) && + ( shaderDenormPreserveFloat16 == rhs.shaderDenormPreserveFloat16 ) && ( shaderDenormPreserveFloat32 == rhs.shaderDenormPreserveFloat32 ) && + ( shaderDenormPreserveFloat64 == rhs.shaderDenormPreserveFloat64 ) && ( shaderDenormFlushToZeroFloat16 == rhs.shaderDenormFlushToZeroFloat16 ) && + ( shaderDenormFlushToZeroFloat32 == rhs.shaderDenormFlushToZeroFloat32 ) && + ( shaderDenormFlushToZeroFloat64 == rhs.shaderDenormFlushToZeroFloat64 ) && ( shaderRoundingModeRTEFloat16 == rhs.shaderRoundingModeRTEFloat16 ) && + ( shaderRoundingModeRTEFloat32 == rhs.shaderRoundingModeRTEFloat32 ) && ( shaderRoundingModeRTEFloat64 == rhs.shaderRoundingModeRTEFloat64 ) && + ( shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16 ) && ( shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32 ) && + ( shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64 ) && + ( maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools ) && + ( shaderUniformBufferArrayNonUniformIndexingNative == rhs.shaderUniformBufferArrayNonUniformIndexingNative ) && + ( shaderSampledImageArrayNonUniformIndexingNative == rhs.shaderSampledImageArrayNonUniformIndexingNative ) && + ( shaderStorageBufferArrayNonUniformIndexingNative == rhs.shaderStorageBufferArrayNonUniformIndexingNative ) && + ( shaderStorageImageArrayNonUniformIndexingNative == rhs.shaderStorageImageArrayNonUniformIndexingNative ) && + ( shaderInputAttachmentArrayNonUniformIndexingNative == rhs.shaderInputAttachmentArrayNonUniformIndexingNative ) && + ( robustBufferAccessUpdateAfterBind == rhs.robustBufferAccessUpdateAfterBind ) && ( quadDivergentImplicitLod == rhs.quadDivergentImplicitLod ) && + ( maxPerStageDescriptorUpdateAfterBindSamplers == rhs.maxPerStageDescriptorUpdateAfterBindSamplers ) && + ( maxPerStageDescriptorUpdateAfterBindUniformBuffers == rhs.maxPerStageDescriptorUpdateAfterBindUniformBuffers ) && + ( maxPerStageDescriptorUpdateAfterBindStorageBuffers == rhs.maxPerStageDescriptorUpdateAfterBindStorageBuffers ) && + ( maxPerStageDescriptorUpdateAfterBindSampledImages == rhs.maxPerStageDescriptorUpdateAfterBindSampledImages ) && + ( maxPerStageDescriptorUpdateAfterBindStorageImages == rhs.maxPerStageDescriptorUpdateAfterBindStorageImages ) && + ( maxPerStageDescriptorUpdateAfterBindInputAttachments == rhs.maxPerStageDescriptorUpdateAfterBindInputAttachments ) && + ( maxPerStageUpdateAfterBindResources == rhs.maxPerStageUpdateAfterBindResources ) && + ( maxDescriptorSetUpdateAfterBindSamplers == rhs.maxDescriptorSetUpdateAfterBindSamplers ) && + ( maxDescriptorSetUpdateAfterBindUniformBuffers == rhs.maxDescriptorSetUpdateAfterBindUniformBuffers ) && + ( maxDescriptorSetUpdateAfterBindUniformBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindStorageBuffers == rhs.maxDescriptorSetUpdateAfterBindStorageBuffers ) && + ( maxDescriptorSetUpdateAfterBindStorageBuffersDynamic == rhs.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic ) && + ( maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages ) && + ( maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages ) && + ( maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments ) && + ( supportedDepthResolveModes == rhs.supportedDepthResolveModes ) && ( supportedStencilResolveModes == rhs.supportedStencilResolveModes ) && + ( independentResolveNone == rhs.independentResolveNone ) && ( independentResolve == rhs.independentResolve ) && + ( filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats ) && + ( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping ) && + ( maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference ) && + ( framebufferIntegerColorSampleCounts == rhs.framebufferIntegerColorSampleCounts ); + } + + bool operator!=( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan12Properties; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DriverId driverID = VULKAN_HPP_NAMESPACE::DriverId::eAmdProprietary; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverName = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D driverInfo = {}; + VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion = {}; + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence denormBehaviorIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; + VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence roundingModeIndependence = VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence::e32BitOnly; + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSignedZeroInfNanPreserveFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormPreserveFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDenormFlushToZeroFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTEFloat64 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat16 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64 = {}; + uint32_t maxUpdateAfterBindDescriptorsInAllPools = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccessUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 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 = {}; + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedDepthResolveModes = {}; + VULKAN_HPP_NAMESPACE::ResolveModeFlags supportedStencilResolveModes = {}; + VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone = {}; + VULKAN_HPP_NAMESPACE::Bool32 independentResolve = {}; + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats = {}; + VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping = {}; + uint64_t maxTimelineSemaphoreValueDifference = {}; + VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferIntegerColorSampleCounts = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan12Properties; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan13Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan13Features.html + struct PhysicalDeviceVulkan13Features + { + using NativeType = VkPhysicalDeviceVulkan13Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan13Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Features( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , robustImageAccess{ robustImageAccess_ } + , inlineUniformBlock{ inlineUniformBlock_ } + , descriptorBindingInlineUniformBlockUpdateAfterBind{ descriptorBindingInlineUniformBlockUpdateAfterBind_ } + , pipelineCreationCacheControl{ pipelineCreationCacheControl_ } + , privateData{ privateData_ } + , shaderDemoteToHelperInvocation{ shaderDemoteToHelperInvocation_ } + , shaderTerminateInvocation{ shaderTerminateInvocation_ } + , subgroupSizeControl{ subgroupSizeControl_ } + , computeFullSubgroups{ computeFullSubgroups_ } + , synchronization2{ synchronization2_ } + , textureCompressionASTC_HDR{ textureCompressionASTC_HDR_ } + , shaderZeroInitializeWorkgroupMemory{ shaderZeroInitializeWorkgroupMemory_ } + , dynamicRendering{ dynamicRendering_ } + , shaderIntegerDotProduct{ shaderIntegerDotProduct_ } + , maintenance4{ maintenance4_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Features( PhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan13Features( VkPhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan13Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan13Features & operator=( PhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan13Features & operator=( VkPhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT + { + robustImageAccess = robustImageAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setInlineUniformBlock( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ ) VULKAN_HPP_NOEXCEPT + { + inlineUniformBlock = inlineUniformBlock_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setDescriptorBindingInlineUniformBlockUpdateAfterBind( + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT + { + descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & + setPipelineCreationCacheControl( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCreationCacheControl = pipelineCreationCacheControl_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT + { + privateData = privateData_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & + setShaderDemoteToHelperInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ ) VULKAN_HPP_NOEXCEPT + { + shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & + setShaderTerminateInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ ) VULKAN_HPP_NOEXCEPT + { + shaderTerminateInvocation = shaderTerminateInvocation_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setSubgroupSizeControl( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ ) VULKAN_HPP_NOEXCEPT + { + subgroupSizeControl = subgroupSizeControl_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setComputeFullSubgroups( VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ ) VULKAN_HPP_NOEXCEPT + { + computeFullSubgroups = computeFullSubgroups_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT + { + synchronization2 = synchronization2_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & + setTextureCompressionASTC_HDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ ) VULKAN_HPP_NOEXCEPT + { + textureCompressionASTC_HDR = textureCompressionASTC_HDR_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & + setShaderZeroInitializeWorkgroupMemory( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ ) VULKAN_HPP_NOEXCEPT + { + shaderZeroInitializeWorkgroupMemory = shaderZeroInitializeWorkgroupMemory_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setDynamicRendering( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ ) VULKAN_HPP_NOEXCEPT + { + dynamicRendering = dynamicRendering_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & + setShaderIntegerDotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ ) VULKAN_HPP_NOEXCEPT + { + shaderIntegerDotProduct = shaderIntegerDotProduct_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setMaintenance4( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ ) VULKAN_HPP_NOEXCEPT + { + maintenance4 = maintenance4_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVulkan13Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan13Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan13Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan13Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + robustImageAccess, + inlineUniformBlock, + descriptorBindingInlineUniformBlockUpdateAfterBind, + pipelineCreationCacheControl, + privateData, + shaderDemoteToHelperInvocation, + shaderTerminateInvocation, + subgroupSizeControl, + computeFullSubgroups, + synchronization2, + textureCompressionASTC_HDR, + shaderZeroInitializeWorkgroupMemory, + dynamicRendering, + shaderIntegerDotProduct, + maintenance4 ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan13Features const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan13Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustImageAccess == rhs.robustImageAccess ) && + ( inlineUniformBlock == rhs.inlineUniformBlock ) && + ( descriptorBindingInlineUniformBlockUpdateAfterBind == rhs.descriptorBindingInlineUniformBlockUpdateAfterBind ) && + ( pipelineCreationCacheControl == rhs.pipelineCreationCacheControl ) && ( privateData == rhs.privateData ) && + ( shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation ) && ( shaderTerminateInvocation == rhs.shaderTerminateInvocation ) && + ( subgroupSizeControl == rhs.subgroupSizeControl ) && ( computeFullSubgroups == rhs.computeFullSubgroups ) && + ( synchronization2 == rhs.synchronization2 ) && ( textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR ) && + ( shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory ) && ( dynamicRendering == rhs.dynamicRendering ) && + ( shaderIntegerDotProduct == rhs.shaderIntegerDotProduct ) && ( maintenance4 == rhs.maintenance4 ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan13Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan13Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {}; + VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl = {}; + VULKAN_HPP_NAMESPACE::Bool32 privateData = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation = {}; + VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {}; + VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups = {}; + VULKAN_HPP_NAMESPACE::Bool32 synchronization2 = {}; + VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance4 = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan13Features; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan13Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan13Properties.html + struct PhysicalDeviceVulkan13Properties + { + using NativeType = VkPhysicalDeviceVulkan13Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan13Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceVulkan13Properties( uint32_t minSubgroupSize_ = {}, + uint32_t maxSubgroupSize_ = {}, + uint32_t maxComputeWorkgroupSubgroups_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages_ = {}, + uint32_t maxInlineUniformBlockSize_ = {}, + uint32_t maxPerStageDescriptorInlineUniformBlocks_ = {}, + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ = {}, + uint32_t maxDescriptorSetInlineUniformBlocks_ = {}, + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ = {}, + uint32_t maxInlineUniformTotalSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minSubgroupSize{ minSubgroupSize_ } + , maxSubgroupSize{ maxSubgroupSize_ } + , maxComputeWorkgroupSubgroups{ maxComputeWorkgroupSubgroups_ } + , requiredSubgroupSizeStages{ requiredSubgroupSizeStages_ } + , maxInlineUniformBlockSize{ maxInlineUniformBlockSize_ } + , maxPerStageDescriptorInlineUniformBlocks{ maxPerStageDescriptorInlineUniformBlocks_ } + , maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks{ maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ } + , maxDescriptorSetInlineUniformBlocks{ maxDescriptorSetInlineUniformBlocks_ } + , maxDescriptorSetUpdateAfterBindInlineUniformBlocks{ maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ } + , maxInlineUniformTotalSize{ maxInlineUniformTotalSize_ } + , integerDotProduct8BitUnsignedAccelerated{ integerDotProduct8BitUnsignedAccelerated_ } + , integerDotProduct8BitSignedAccelerated{ integerDotProduct8BitSignedAccelerated_ } + , integerDotProduct8BitMixedSignednessAccelerated{ integerDotProduct8BitMixedSignednessAccelerated_ } + , integerDotProduct4x8BitPackedUnsignedAccelerated{ integerDotProduct4x8BitPackedUnsignedAccelerated_ } + , integerDotProduct4x8BitPackedSignedAccelerated{ integerDotProduct4x8BitPackedSignedAccelerated_ } + , integerDotProduct4x8BitPackedMixedSignednessAccelerated{ integerDotProduct4x8BitPackedMixedSignednessAccelerated_ } + , integerDotProduct16BitUnsignedAccelerated{ integerDotProduct16BitUnsignedAccelerated_ } + , integerDotProduct16BitSignedAccelerated{ integerDotProduct16BitSignedAccelerated_ } + , integerDotProduct16BitMixedSignednessAccelerated{ integerDotProduct16BitMixedSignednessAccelerated_ } + , integerDotProduct32BitUnsignedAccelerated{ integerDotProduct32BitUnsignedAccelerated_ } + , integerDotProduct32BitSignedAccelerated{ integerDotProduct32BitSignedAccelerated_ } + , integerDotProduct32BitMixedSignednessAccelerated{ integerDotProduct32BitMixedSignednessAccelerated_ } + , integerDotProduct64BitUnsignedAccelerated{ integerDotProduct64BitUnsignedAccelerated_ } + , integerDotProduct64BitSignedAccelerated{ integerDotProduct64BitSignedAccelerated_ } + , integerDotProduct64BitMixedSignednessAccelerated{ integerDotProduct64BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating8BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating8BitSignedAccelerated{ integerDotProductAccumulatingSaturating8BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated{ integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated{ integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ } + , integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating16BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating16BitSignedAccelerated{ integerDotProductAccumulatingSaturating16BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating32BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating32BitSignedAccelerated{ integerDotProductAccumulatingSaturating32BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ } + , integerDotProductAccumulatingSaturating64BitUnsignedAccelerated{ integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ } + , integerDotProductAccumulatingSaturating64BitSignedAccelerated{ integerDotProductAccumulatingSaturating64BitSignedAccelerated_ } + , integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated{ integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ } + , storageTexelBufferOffsetAlignmentBytes{ storageTexelBufferOffsetAlignmentBytes_ } + , storageTexelBufferOffsetSingleTexelAlignment{ storageTexelBufferOffsetSingleTexelAlignment_ } + , uniformTexelBufferOffsetAlignmentBytes{ uniformTexelBufferOffsetAlignmentBytes_ } + , uniformTexelBufferOffsetSingleTexelAlignment{ uniformTexelBufferOffsetSingleTexelAlignment_ } + , maxBufferSize{ maxBufferSize_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Properties( PhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan13Properties( VkPhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan13Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan13Properties & operator=( PhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan13Properties & operator=( VkPhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceVulkan13Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan13Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan13Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan13Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + minSubgroupSize, + maxSubgroupSize, + maxComputeWorkgroupSubgroups, + requiredSubgroupSizeStages, + maxInlineUniformBlockSize, + maxPerStageDescriptorInlineUniformBlocks, + maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, + maxDescriptorSetInlineUniformBlocks, + maxDescriptorSetUpdateAfterBindInlineUniformBlocks, + maxInlineUniformTotalSize, + integerDotProduct8BitUnsignedAccelerated, + integerDotProduct8BitSignedAccelerated, + integerDotProduct8BitMixedSignednessAccelerated, + integerDotProduct4x8BitPackedUnsignedAccelerated, + integerDotProduct4x8BitPackedSignedAccelerated, + integerDotProduct4x8BitPackedMixedSignednessAccelerated, + integerDotProduct16BitUnsignedAccelerated, + integerDotProduct16BitSignedAccelerated, + integerDotProduct16BitMixedSignednessAccelerated, + integerDotProduct32BitUnsignedAccelerated, + integerDotProduct32BitSignedAccelerated, + integerDotProduct32BitMixedSignednessAccelerated, + integerDotProduct64BitUnsignedAccelerated, + integerDotProduct64BitSignedAccelerated, + integerDotProduct64BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating8BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating8BitSignedAccelerated, + integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated, + integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated, + integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating16BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating16BitSignedAccelerated, + integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating32BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating32BitSignedAccelerated, + integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated, + integerDotProductAccumulatingSaturating64BitUnsignedAccelerated, + integerDotProductAccumulatingSaturating64BitSignedAccelerated, + integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated, + storageTexelBufferOffsetAlignmentBytes, + storageTexelBufferOffsetSingleTexelAlignment, + uniformTexelBufferOffsetAlignmentBytes, + uniformTexelBufferOffsetSingleTexelAlignment, + maxBufferSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan13Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan13Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSubgroupSize == rhs.minSubgroupSize ) && ( maxSubgroupSize == rhs.maxSubgroupSize ) && + ( maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups ) && ( requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages ) && + ( maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize ) && + ( maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks ) && + ( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks == rhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ) && + ( maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks ) && + ( maxDescriptorSetUpdateAfterBindInlineUniformBlocks == rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ) && + ( maxInlineUniformTotalSize == rhs.maxInlineUniformTotalSize ) && + ( integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated ) && + ( integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated ) && + ( integerDotProduct8BitMixedSignednessAccelerated == rhs.integerDotProduct8BitMixedSignednessAccelerated ) && + ( integerDotProduct4x8BitPackedUnsignedAccelerated == rhs.integerDotProduct4x8BitPackedUnsignedAccelerated ) && + ( integerDotProduct4x8BitPackedSignedAccelerated == rhs.integerDotProduct4x8BitPackedSignedAccelerated ) && + ( integerDotProduct4x8BitPackedMixedSignednessAccelerated == rhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated ) && + ( integerDotProduct16BitUnsignedAccelerated == rhs.integerDotProduct16BitUnsignedAccelerated ) && + ( integerDotProduct16BitSignedAccelerated == rhs.integerDotProduct16BitSignedAccelerated ) && + ( integerDotProduct16BitMixedSignednessAccelerated == rhs.integerDotProduct16BitMixedSignednessAccelerated ) && + ( integerDotProduct32BitUnsignedAccelerated == rhs.integerDotProduct32BitUnsignedAccelerated ) && + ( integerDotProduct32BitSignedAccelerated == rhs.integerDotProduct32BitSignedAccelerated ) && + ( integerDotProduct32BitMixedSignednessAccelerated == rhs.integerDotProduct32BitMixedSignednessAccelerated ) && + ( integerDotProduct64BitUnsignedAccelerated == rhs.integerDotProduct64BitUnsignedAccelerated ) && + ( integerDotProduct64BitSignedAccelerated == rhs.integerDotProduct64BitSignedAccelerated ) && + ( integerDotProduct64BitMixedSignednessAccelerated == rhs.integerDotProduct64BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating8BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated == + rhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated == + rhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating16BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating32BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ) && + ( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ) && + ( integerDotProductAccumulatingSaturating64BitSignedAccelerated == rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated ) && + ( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated == + rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ) && + ( storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes ) && + ( storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment ) && + ( uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes ) && + ( uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment ) && ( maxBufferSize == rhs.maxBufferSize ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan13Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan13Properties; + void * pNext = {}; + uint32_t minSubgroupSize = {}; + uint32_t maxSubgroupSize = {}; + uint32_t maxComputeWorkgroupSubgroups = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages = {}; + uint32_t maxInlineUniformBlockSize = {}; + uint32_t maxPerStageDescriptorInlineUniformBlocks = {}; + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = {}; + uint32_t maxDescriptorSetInlineUniformBlocks = {}; + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks = {}; + uint32_t maxInlineUniformTotalSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated = {}; + VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = {}; + VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes = {}; + VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes = {}; + VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan13Properties; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan14Features, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan14Features.html + struct PhysicalDeviceVulkan14Features + { + using NativeType = VkPhysicalDeviceVulkan14Features; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan14Features; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan14Features( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotate_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotateClustered_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderFloatControls2_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 shaderExpectAssume_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalRead_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 maintenance5_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 maintenance6_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineProtectedAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hostImageCopy_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 pushDescriptor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , globalPriorityQuery{ globalPriorityQuery_ } + , shaderSubgroupRotate{ shaderSubgroupRotate_ } + , shaderSubgroupRotateClustered{ shaderSubgroupRotateClustered_ } + , shaderFloatControls2{ shaderFloatControls2_ } + , shaderExpectAssume{ shaderExpectAssume_ } + , rectangularLines{ rectangularLines_ } + , bresenhamLines{ bresenhamLines_ } + , smoothLines{ smoothLines_ } + , stippledRectangularLines{ stippledRectangularLines_ } + , stippledBresenhamLines{ stippledBresenhamLines_ } + , stippledSmoothLines{ stippledSmoothLines_ } + , vertexAttributeInstanceRateDivisor{ vertexAttributeInstanceRateDivisor_ } + , vertexAttributeInstanceRateZeroDivisor{ vertexAttributeInstanceRateZeroDivisor_ } + , indexTypeUint8{ indexTypeUint8_ } + , dynamicRenderingLocalRead{ dynamicRenderingLocalRead_ } + , maintenance5{ maintenance5_ } + , maintenance6{ maintenance6_ } + , pipelineProtectedAccess{ pipelineProtectedAccess_ } + , pipelineRobustness{ pipelineRobustness_ } + , hostImageCopy{ hostImageCopy_ } + , pushDescriptor{ pushDescriptor_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan14Features( PhysicalDeviceVulkan14Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan14Features( VkPhysicalDeviceVulkan14Features const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan14Features( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan14Features & operator=( PhysicalDeviceVulkan14Features const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan14Features & operator=( VkPhysicalDeviceVulkan14Features const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setGlobalPriorityQuery( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ ) VULKAN_HPP_NOEXCEPT + { + globalPriorityQuery = globalPriorityQuery_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setShaderSubgroupRotate( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotate_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupRotate = shaderSubgroupRotate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setShaderSubgroupRotateClustered( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotateClustered_ ) VULKAN_HPP_NOEXCEPT + { + shaderSubgroupRotateClustered = shaderSubgroupRotateClustered_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setShaderFloatControls2( VULKAN_HPP_NAMESPACE::Bool32 shaderFloatControls2_ ) VULKAN_HPP_NOEXCEPT + { + shaderFloatControls2 = shaderFloatControls2_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setShaderExpectAssume( VULKAN_HPP_NAMESPACE::Bool32 shaderExpectAssume_ ) VULKAN_HPP_NOEXCEPT + { + shaderExpectAssume = shaderExpectAssume_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ ) VULKAN_HPP_NOEXCEPT + { + rectangularLines = rectangularLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ ) VULKAN_HPP_NOEXCEPT + { + bresenhamLines = bresenhamLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ ) VULKAN_HPP_NOEXCEPT + { + smoothLines = smoothLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setStippledRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ ) VULKAN_HPP_NOEXCEPT + { + stippledRectangularLines = stippledRectangularLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setStippledBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ ) VULKAN_HPP_NOEXCEPT + { + stippledBresenhamLines = stippledBresenhamLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setStippledSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ ) VULKAN_HPP_NOEXCEPT + { + stippledSmoothLines = stippledSmoothLines_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setVertexAttributeInstanceRateDivisor( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeInstanceRateDivisor = vertexAttributeInstanceRateDivisor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setVertexAttributeInstanceRateZeroDivisor( VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ ) VULKAN_HPP_NOEXCEPT + { + vertexAttributeInstanceRateZeroDivisor = vertexAttributeInstanceRateZeroDivisor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setIndexTypeUint8( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ ) VULKAN_HPP_NOEXCEPT + { + indexTypeUint8 = indexTypeUint8_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setDynamicRenderingLocalRead( VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalRead_ ) VULKAN_HPP_NOEXCEPT + { + dynamicRenderingLocalRead = dynamicRenderingLocalRead_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setMaintenance5( VULKAN_HPP_NAMESPACE::Bool32 maintenance5_ ) VULKAN_HPP_NOEXCEPT + { + maintenance5 = maintenance5_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setMaintenance6( VULKAN_HPP_NAMESPACE::Bool32 maintenance6_ ) VULKAN_HPP_NOEXCEPT + { + maintenance6 = maintenance6_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & + setPipelineProtectedAccess( VULKAN_HPP_NAMESPACE::Bool32 pipelineProtectedAccess_ ) VULKAN_HPP_NOEXCEPT + { + pipelineProtectedAccess = pipelineProtectedAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setPipelineRobustness( VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness_ ) VULKAN_HPP_NOEXCEPT + { + pipelineRobustness = pipelineRobustness_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setHostImageCopy( VULKAN_HPP_NAMESPACE::Bool32 hostImageCopy_ ) VULKAN_HPP_NOEXCEPT + { + hostImageCopy = hostImageCopy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Features & setPushDescriptor( VULKAN_HPP_NAMESPACE::Bool32 pushDescriptor_ ) VULKAN_HPP_NOEXCEPT + { + pushDescriptor = pushDescriptor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVulkan14Features const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan14Features &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan14Features const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan14Features *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + globalPriorityQuery, + shaderSubgroupRotate, + shaderSubgroupRotateClustered, + shaderFloatControls2, + shaderExpectAssume, + rectangularLines, + bresenhamLines, + smoothLines, + stippledRectangularLines, + stippledBresenhamLines, + stippledSmoothLines, + vertexAttributeInstanceRateDivisor, + vertexAttributeInstanceRateZeroDivisor, + indexTypeUint8, + dynamicRenderingLocalRead, + maintenance5, + maintenance6, + pipelineProtectedAccess, + pipelineRobustness, + hostImageCopy, + pushDescriptor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan14Features const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan14Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriorityQuery == rhs.globalPriorityQuery ) && + ( shaderSubgroupRotate == rhs.shaderSubgroupRotate ) && ( shaderSubgroupRotateClustered == rhs.shaderSubgroupRotateClustered ) && + ( shaderFloatControls2 == rhs.shaderFloatControls2 ) && ( shaderExpectAssume == rhs.shaderExpectAssume ) && + ( rectangularLines == rhs.rectangularLines ) && ( bresenhamLines == rhs.bresenhamLines ) && ( smoothLines == rhs.smoothLines ) && + ( stippledRectangularLines == rhs.stippledRectangularLines ) && ( stippledBresenhamLines == rhs.stippledBresenhamLines ) && + ( stippledSmoothLines == rhs.stippledSmoothLines ) && ( vertexAttributeInstanceRateDivisor == rhs.vertexAttributeInstanceRateDivisor ) && + ( vertexAttributeInstanceRateZeroDivisor == rhs.vertexAttributeInstanceRateZeroDivisor ) && ( indexTypeUint8 == rhs.indexTypeUint8 ) && + ( dynamicRenderingLocalRead == rhs.dynamicRenderingLocalRead ) && ( maintenance5 == rhs.maintenance5 ) && ( maintenance6 == rhs.maintenance6 ) && + ( pipelineProtectedAccess == rhs.pipelineProtectedAccess ) && ( pipelineRobustness == rhs.pipelineRobustness ) && + ( hostImageCopy == rhs.hostImageCopy ) && ( pushDescriptor == rhs.pushDescriptor ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan14Features const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan14Features; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotate = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupRotateClustered = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderFloatControls2 = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderExpectAssume = {}; + VULKAN_HPP_NAMESPACE::Bool32 rectangularLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 smoothLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor = {}; + VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor = {}; + VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8 = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalRead = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance5 = {}; + VULKAN_HPP_NAMESPACE::Bool32 maintenance6 = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineProtectedAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 pipelineRobustness = {}; + VULKAN_HPP_NAMESPACE::Bool32 hostImageCopy = {}; + VULKAN_HPP_NAMESPACE::Bool32 pushDescriptor = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan14Features; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkan14Properties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkan14Properties.html + struct PhysicalDeviceVulkan14Properties + { + using NativeType = VkPhysicalDeviceVulkan14Properties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan14Properties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Properties( + uint32_t lineSubPixelPrecisionBits_ = {}, + uint32_t maxVertexAttribDivisor_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 supportsNonZeroFirstInstance_ = {}, + uint32_t maxPushDescriptors_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalReadDepthStencilAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalReadMultisampledAttachments_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentMultisampleCoverageAfterSampleCounting_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentSampleMaskTestBeforeSampleCounting_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthStencilSwizzleOneSupport_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 polygonModePointSize_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nonStrictSinglePixelWideLinesUseParallelogram_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nonStrictWideLinesUseParallelogram_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 blockTexelViewCompatibleMultipleLayers_ = {}, + uint32_t maxCombinedImageSamplerDescriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateClampCombinerInputs_ = {}, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers_ = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers_ = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessVertexInputs_ = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior defaultRobustnessImages_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior::eDeviceDefault, + uint32_t copySrcLayoutCount_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout * pCopySrcLayouts_ = {}, + uint32_t copyDstLayoutCount_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout * pCopyDstLayouts_ = {}, + std::array const & optimalTilingLayoutUUID_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryTypeRequirements_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , lineSubPixelPrecisionBits{ lineSubPixelPrecisionBits_ } + , maxVertexAttribDivisor{ maxVertexAttribDivisor_ } + , supportsNonZeroFirstInstance{ supportsNonZeroFirstInstance_ } + , maxPushDescriptors{ maxPushDescriptors_ } + , dynamicRenderingLocalReadDepthStencilAttachments{ dynamicRenderingLocalReadDepthStencilAttachments_ } + , dynamicRenderingLocalReadMultisampledAttachments{ dynamicRenderingLocalReadMultisampledAttachments_ } + , earlyFragmentMultisampleCoverageAfterSampleCounting{ earlyFragmentMultisampleCoverageAfterSampleCounting_ } + , earlyFragmentSampleMaskTestBeforeSampleCounting{ earlyFragmentSampleMaskTestBeforeSampleCounting_ } + , depthStencilSwizzleOneSupport{ depthStencilSwizzleOneSupport_ } + , polygonModePointSize{ polygonModePointSize_ } + , nonStrictSinglePixelWideLinesUseParallelogram{ nonStrictSinglePixelWideLinesUseParallelogram_ } + , nonStrictWideLinesUseParallelogram{ nonStrictWideLinesUseParallelogram_ } + , blockTexelViewCompatibleMultipleLayers{ blockTexelViewCompatibleMultipleLayers_ } + , maxCombinedImageSamplerDescriptorCount{ maxCombinedImageSamplerDescriptorCount_ } + , fragmentShadingRateClampCombinerInputs{ fragmentShadingRateClampCombinerInputs_ } + , defaultRobustnessStorageBuffers{ defaultRobustnessStorageBuffers_ } + , defaultRobustnessUniformBuffers{ defaultRobustnessUniformBuffers_ } + , defaultRobustnessVertexInputs{ defaultRobustnessVertexInputs_ } + , defaultRobustnessImages{ defaultRobustnessImages_ } + , copySrcLayoutCount{ copySrcLayoutCount_ } + , pCopySrcLayouts{ pCopySrcLayouts_ } + , copyDstLayoutCount{ copyDstLayoutCount_ } + , pCopyDstLayouts{ pCopyDstLayouts_ } + , optimalTilingLayoutUUID{ optimalTilingLayoutUUID_ } + , identicalMemoryTypeRequirements{ identicalMemoryTypeRequirements_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan14Properties( PhysicalDeviceVulkan14Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkan14Properties( VkPhysicalDeviceVulkan14Properties const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkan14Properties( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkan14Properties & operator=( PhysicalDeviceVulkan14Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkan14Properties & operator=( VkPhysicalDeviceVulkan14Properties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPhysicalDeviceVulkan14Properties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan14Properties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan14Properties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkan14Properties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + lineSubPixelPrecisionBits, + maxVertexAttribDivisor, + supportsNonZeroFirstInstance, + maxPushDescriptors, + dynamicRenderingLocalReadDepthStencilAttachments, + dynamicRenderingLocalReadMultisampledAttachments, + earlyFragmentMultisampleCoverageAfterSampleCounting, + earlyFragmentSampleMaskTestBeforeSampleCounting, + depthStencilSwizzleOneSupport, + polygonModePointSize, + nonStrictSinglePixelWideLinesUseParallelogram, + nonStrictWideLinesUseParallelogram, + blockTexelViewCompatibleMultipleLayers, + maxCombinedImageSamplerDescriptorCount, + fragmentShadingRateClampCombinerInputs, + defaultRobustnessStorageBuffers, + defaultRobustnessUniformBuffers, + defaultRobustnessVertexInputs, + defaultRobustnessImages, + copySrcLayoutCount, + pCopySrcLayouts, + copyDstLayoutCount, + pCopyDstLayouts, + optimalTilingLayoutUUID, + identicalMemoryTypeRequirements ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkan14Properties const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkan14Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( lineSubPixelPrecisionBits == rhs.lineSubPixelPrecisionBits ) && + ( maxVertexAttribDivisor == rhs.maxVertexAttribDivisor ) && ( supportsNonZeroFirstInstance == rhs.supportsNonZeroFirstInstance ) && + ( maxPushDescriptors == rhs.maxPushDescriptors ) && + ( dynamicRenderingLocalReadDepthStencilAttachments == rhs.dynamicRenderingLocalReadDepthStencilAttachments ) && + ( dynamicRenderingLocalReadMultisampledAttachments == rhs.dynamicRenderingLocalReadMultisampledAttachments ) && + ( earlyFragmentMultisampleCoverageAfterSampleCounting == rhs.earlyFragmentMultisampleCoverageAfterSampleCounting ) && + ( earlyFragmentSampleMaskTestBeforeSampleCounting == rhs.earlyFragmentSampleMaskTestBeforeSampleCounting ) && + ( depthStencilSwizzleOneSupport == rhs.depthStencilSwizzleOneSupport ) && ( polygonModePointSize == rhs.polygonModePointSize ) && + ( nonStrictSinglePixelWideLinesUseParallelogram == rhs.nonStrictSinglePixelWideLinesUseParallelogram ) && + ( nonStrictWideLinesUseParallelogram == rhs.nonStrictWideLinesUseParallelogram ) && + ( blockTexelViewCompatibleMultipleLayers == rhs.blockTexelViewCompatibleMultipleLayers ) && + ( maxCombinedImageSamplerDescriptorCount == rhs.maxCombinedImageSamplerDescriptorCount ) && + ( fragmentShadingRateClampCombinerInputs == rhs.fragmentShadingRateClampCombinerInputs ) && + ( defaultRobustnessStorageBuffers == rhs.defaultRobustnessStorageBuffers ) && + ( defaultRobustnessUniformBuffers == rhs.defaultRobustnessUniformBuffers ) && + ( defaultRobustnessVertexInputs == rhs.defaultRobustnessVertexInputs ) && ( defaultRobustnessImages == rhs.defaultRobustnessImages ) && + ( copySrcLayoutCount == rhs.copySrcLayoutCount ) && ( pCopySrcLayouts == rhs.pCopySrcLayouts ) && + ( copyDstLayoutCount == rhs.copyDstLayoutCount ) && ( pCopyDstLayouts == rhs.pCopyDstLayouts ) && + ( optimalTilingLayoutUUID == rhs.optimalTilingLayoutUUID ) && ( identicalMemoryTypeRequirements == rhs.identicalMemoryTypeRequirements ); +# endif + } + + bool operator!=( PhysicalDeviceVulkan14Properties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan14Properties; + void * pNext = {}; + uint32_t lineSubPixelPrecisionBits = {}; + uint32_t maxVertexAttribDivisor = {}; + VULKAN_HPP_NAMESPACE::Bool32 supportsNonZeroFirstInstance = {}; + uint32_t maxPushDescriptors = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalReadDepthStencilAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 dynamicRenderingLocalReadMultisampledAttachments = {}; + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentMultisampleCoverageAfterSampleCounting = {}; + VULKAN_HPP_NAMESPACE::Bool32 earlyFragmentSampleMaskTestBeforeSampleCounting = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthStencilSwizzleOneSupport = {}; + VULKAN_HPP_NAMESPACE::Bool32 polygonModePointSize = {}; + VULKAN_HPP_NAMESPACE::Bool32 nonStrictSinglePixelWideLinesUseParallelogram = {}; + VULKAN_HPP_NAMESPACE::Bool32 nonStrictWideLinesUseParallelogram = {}; + VULKAN_HPP_NAMESPACE::Bool32 blockTexelViewCompatibleMultipleLayers = {}; + uint32_t maxCombinedImageSamplerDescriptorCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateClampCombinerInputs = {}; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior defaultRobustnessVertexInputs = + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior defaultRobustnessImages = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior::eDeviceDefault; + uint32_t copySrcLayoutCount = {}; + VULKAN_HPP_NAMESPACE::ImageLayout * pCopySrcLayouts = {}; + uint32_t copyDstLayoutCount = {}; + VULKAN_HPP_NAMESPACE::ImageLayout * pCopyDstLayouts = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D optimalTilingLayoutUUID = {}; + VULKAN_HPP_NAMESPACE::Bool32 identicalMemoryTypeRequirements = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkan14Properties; + }; + + // wrapper struct for struct VkPhysicalDeviceVulkanMemoryModelFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceVulkanMemoryModelFeatures.html + struct PhysicalDeviceVulkanMemoryModelFeatures + { + using NativeType = VkPhysicalDeviceVulkanMemoryModelFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkanMemoryModelFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkanMemoryModelFeatures( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vulkanMemoryModel{ vulkanMemoryModel_ } + , vulkanMemoryModelDeviceScope{ vulkanMemoryModelDeviceScope_ } + , vulkanMemoryModelAvailabilityVisibilityChains{ vulkanMemoryModelAvailabilityVisibilityChains_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkanMemoryModelFeatures( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceVulkanMemoryModelFeatures( VkPhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceVulkanMemoryModelFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceVulkanMemoryModelFeatures & operator=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceVulkanMemoryModelFeatures & operator=( VkPhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & + setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT + { + vulkanMemoryModel = vulkanMemoryModel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & + setVulkanMemoryModelDeviceScope( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ ) VULKAN_HPP_NOEXCEPT + { + vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & + setVulkanMemoryModelAvailabilityVisibilityChains( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ ) VULKAN_HPP_NOEXCEPT + { + vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceVulkanMemoryModelFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkanMemoryModelFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkanMemoryModelFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceVulkanMemoryModelFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vulkanMemoryModel, vulkanMemoryModelDeviceScope, vulkanMemoryModelAvailabilityVisibilityChains ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceVulkanMemoryModelFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vulkanMemoryModel == rhs.vulkanMemoryModel ) && + ( vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope ) && + ( vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains ); +# endif + } + + bool operator!=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkanMemoryModelFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel = {}; + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope = {}; + VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceVulkanMemoryModelFeatures; + }; + + using PhysicalDeviceVulkanMemoryModelFeaturesKHR = PhysicalDeviceVulkanMemoryModelFeatures; + + // wrapper struct for struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.html + struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR + { + using NativeType = VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , workgroupMemoryExplicitLayout{ workgroupMemoryExplicitLayout_ } + , workgroupMemoryExplicitLayoutScalarBlockLayout{ workgroupMemoryExplicitLayoutScalarBlockLayout_ } + , workgroupMemoryExplicitLayout8BitAccess{ workgroupMemoryExplicitLayout8BitAccess_ } + , workgroupMemoryExplicitLayout16BitAccess{ workgroupMemoryExplicitLayout16BitAccess_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & + operator=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & + operator=( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & + setWorkgroupMemoryExplicitLayout( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout_ ) VULKAN_HPP_NOEXCEPT + { + workgroupMemoryExplicitLayout = workgroupMemoryExplicitLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & + setWorkgroupMemoryExplicitLayoutScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT + { + workgroupMemoryExplicitLayoutScalarBlockLayout = workgroupMemoryExplicitLayoutScalarBlockLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & + setWorkgroupMemoryExplicitLayout8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + workgroupMemoryExplicitLayout8BitAccess = workgroupMemoryExplicitLayout8BitAccess_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & + setWorkgroupMemoryExplicitLayout16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess_ ) VULKAN_HPP_NOEXCEPT + { + workgroupMemoryExplicitLayout16BitAccess = workgroupMemoryExplicitLayout16BitAccess_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + workgroupMemoryExplicitLayout, + workgroupMemoryExplicitLayoutScalarBlockLayout, + workgroupMemoryExplicitLayout8BitAccess, + workgroupMemoryExplicitLayout16BitAccess ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & ) const = default; +#else + bool operator==( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( workgroupMemoryExplicitLayout == rhs.workgroupMemoryExplicitLayout ) && + ( workgroupMemoryExplicitLayoutScalarBlockLayout == rhs.workgroupMemoryExplicitLayoutScalarBlockLayout ) && + ( workgroupMemoryExplicitLayout8BitAccess == rhs.workgroupMemoryExplicitLayout8BitAccess ) && + ( workgroupMemoryExplicitLayout16BitAccess == rhs.workgroupMemoryExplicitLayout16BitAccess ); +# endif + } + + bool operator!=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout = {}; + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout = {}; + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess = {}; + VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; + }; + + // wrapper struct for struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.html + struct PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT + { + using NativeType = VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , ycbcr2plane444Formats{ ycbcr2plane444Formats_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & operator=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & operator=( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & + setYcbcr2plane444Formats( VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats_ ) VULKAN_HPP_NOEXCEPT + { + ycbcr2plane444Formats = ycbcr2plane444Formats_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, ycbcr2plane444Formats ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcr2plane444Formats == rhs.ycbcr2plane444Formats ); +# endif + } + + bool operator!=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceYcbcrDegammaFeaturesQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceYcbcrDegammaFeaturesQCOM.html + struct PhysicalDeviceYcbcrDegammaFeaturesQCOM + { + using NativeType = VkPhysicalDeviceYcbcrDegammaFeaturesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceYcbcrDegammaFeaturesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcrDegammaFeaturesQCOM( VULKAN_HPP_NAMESPACE::Bool32 ycbcrDegamma_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , ycbcrDegamma{ ycbcrDegamma_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcrDegammaFeaturesQCOM( PhysicalDeviceYcbcrDegammaFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceYcbcrDegammaFeaturesQCOM( VkPhysicalDeviceYcbcrDegammaFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceYcbcrDegammaFeaturesQCOM( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceYcbcrDegammaFeaturesQCOM & operator=( PhysicalDeviceYcbcrDegammaFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceYcbcrDegammaFeaturesQCOM & operator=( VkPhysicalDeviceYcbcrDegammaFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrDegammaFeaturesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrDegammaFeaturesQCOM & setYcbcrDegamma( VULKAN_HPP_NAMESPACE::Bool32 ycbcrDegamma_ ) VULKAN_HPP_NOEXCEPT + { + ycbcrDegamma = ycbcrDegamma_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceYcbcrDegammaFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcrDegammaFeaturesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcrDegammaFeaturesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcrDegammaFeaturesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, ycbcrDegamma ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceYcbcrDegammaFeaturesQCOM const & ) const = default; +#else + bool operator==( PhysicalDeviceYcbcrDegammaFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcrDegamma == rhs.ycbcrDegamma ); +# endif + } + + bool operator!=( PhysicalDeviceYcbcrDegammaFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceYcbcrDegammaFeaturesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 ycbcrDegamma = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceYcbcrDegammaFeaturesQCOM; + }; + + // wrapper struct for struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.html + struct PhysicalDeviceYcbcrImageArraysFeaturesEXT + { + using NativeType = VkPhysicalDeviceYcbcrImageArraysFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcrImageArraysFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , ycbcrImageArrays{ ycbcrImageArrays_ } + { + } + + VULKAN_HPP_CONSTEXPR PhysicalDeviceYcbcrImageArraysFeaturesEXT( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceYcbcrImageArraysFeaturesEXT( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceYcbcrImageArraysFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceYcbcrImageArraysFeaturesEXT & operator=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceYcbcrImageArraysFeaturesEXT & operator=( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT & + setYcbcrImageArrays( VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays_ ) VULKAN_HPP_NOEXCEPT + { + ycbcrImageArrays = ycbcrImageArrays_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, ycbcrImageArrays ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcrImageArrays == rhs.ycbcrImageArrays ); +# endif + } + + bool operator!=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceYcbcrImageArraysFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT.html + struct PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT + { + using NativeType = VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 zeroInitializeDeviceMemory_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , zeroInitializeDeviceMemory{ zeroInitializeDeviceMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT( PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT( VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT & + operator=( PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT & operator=( VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT & + setZeroInitializeDeviceMemory( VULKAN_HPP_NAMESPACE::Bool32 zeroInitializeDeviceMemory_ ) VULKAN_HPP_NOEXCEPT + { + zeroInitializeDeviceMemory = zeroInitializeDeviceMemory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, zeroInitializeDeviceMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & ) const = default; +#else + bool operator==( PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( zeroInitializeDeviceMemory == rhs.zeroInitializeDeviceMemory ); +# endif + } + + bool operator!=( PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 zeroInitializeDeviceMemory = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + }; + + // wrapper struct for struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures.html + struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures + { + using NativeType = VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shaderZeroInitializeWorkgroupMemory{ shaderZeroInitializeWorkgroupMemory_ } + { + } + + VULKAN_HPP_CONSTEXPR + PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + : PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures( *reinterpret_cast( &rhs ) ) + { + } + + PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & + operator=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & operator=( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures & + setShaderZeroInitializeWorkgroupMemory( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ ) VULKAN_HPP_NOEXCEPT + { + shaderZeroInitializeWorkgroupMemory = shaderZeroInitializeWorkgroupMemory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shaderZeroInitializeWorkgroupMemory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & ) const = default; +#else + bool operator==( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory ); +# endif + } + + bool operator!=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory = {}; + }; + + template <> + struct CppType + { + using Type = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + }; + + using PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures; + + // wrapper struct for struct VkPipelineBinaryKeyKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryKeyKHR.html + struct PipelineBinaryKeyKHR + { + using NativeType = VkPipelineBinaryKeyKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineBinaryKeyKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeyKHR( uint32_t keySize_ = {}, + std::array const & key_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , keySize{ keySize_ } + , key{ key_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeyKHR( PipelineBinaryKeyKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryKeyKHR( VkPipelineBinaryKeyKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryKeyKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineBinaryKeyKHR & operator=( PipelineBinaryKeyKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryKeyKHR & operator=( VkPipelineBinaryKeyKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeyKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeyKHR & setKeySize( uint32_t keySize_ ) VULKAN_HPP_NOEXCEPT + { + keySize = keySize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeyKHR & setKey( std::array key_ ) VULKAN_HPP_NOEXCEPT + { + key = key_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryKeyKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryKeyKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryKeyKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryKeyKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, keySize, key ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryKeyKHR const & ) const = default; +#else + bool operator==( PipelineBinaryKeyKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( keySize == rhs.keySize ) && ( key == rhs.key ); +# endif + } + + bool operator!=( PipelineBinaryKeyKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineBinaryKeyKHR; + void * pNext = {}; + uint32_t keySize = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D key = {}; + }; + + template <> + struct CppType + { + using Type = PipelineBinaryKeyKHR; + }; + + // wrapper struct for struct VkPipelineBinaryDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryDataKHR.html + struct PipelineBinaryDataKHR + { + using NativeType = VkPipelineBinaryDataKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineBinaryDataKHR( size_t dataSize_ = {}, void * pData_ = {} ) VULKAN_HPP_NOEXCEPT + : dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineBinaryDataKHR( PipelineBinaryDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryDataKHR( VkPipelineBinaryDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryDataKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + PipelineBinaryDataKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) : dataSize( data_.size() * sizeof( T ) ), pData( data_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineBinaryDataKHR & operator=( PipelineBinaryDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryDataKHR & operator=( VkPipelineBinaryDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryDataKHR & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = dataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryDataKHR & setPData( void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + PipelineBinaryDataKHR & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = data_.size() * sizeof( T ); + pData = data_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryDataKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryDataKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryDataKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryDataKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( dataSize, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryDataKHR const & ) const = default; +#else + bool operator==( PipelineBinaryDataKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); +# endif + } + + bool operator!=( PipelineBinaryDataKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + size_t dataSize = {}; + void * pData = {}; + }; + + // wrapper struct for struct VkPipelineBinaryKeysAndDataKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryKeysAndDataKHR.html + struct PipelineBinaryKeysAndDataKHR + { + using NativeType = VkPipelineBinaryKeysAndDataKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeysAndDataKHR( uint32_t binaryCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR * pPipelineBinaryKeys_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineBinaryDataKHR * pPipelineBinaryData_ = {} ) VULKAN_HPP_NOEXCEPT + : binaryCount{ binaryCount_ } + , pPipelineBinaryKeys{ pPipelineBinaryKeys_ } + , pPipelineBinaryData{ pPipelineBinaryData_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeysAndDataKHR( PipelineBinaryKeysAndDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryKeysAndDataKHR( VkPipelineBinaryKeysAndDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryKeysAndDataKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryKeysAndDataKHR( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaryKeys_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaryData_ = {} ) + : binaryCount( static_cast( pipelineBinaryKeys_.size() ) ) + , pPipelineBinaryKeys( pipelineBinaryKeys_.data() ) + , pPipelineBinaryData( pipelineBinaryData_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( pipelineBinaryKeys_.size() == pipelineBinaryData_.size() ); +# else + if ( pipelineBinaryKeys_.size() != pipelineBinaryData_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::PipelineBinaryKeysAndDataKHR::PipelineBinaryKeysAndDataKHR: pipelineBinaryKeys_.size() != pipelineBinaryData_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineBinaryKeysAndDataKHR & operator=( PipelineBinaryKeysAndDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryKeysAndDataKHR & operator=( VkPipelineBinaryKeysAndDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeysAndDataKHR & setBinaryCount( uint32_t binaryCount_ ) VULKAN_HPP_NOEXCEPT + { + binaryCount = binaryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeysAndDataKHR & + setPPipelineBinaryKeys( const VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR * pPipelineBinaryKeys_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineBinaryKeys = pPipelineBinaryKeys_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryKeysAndDataKHR & setPipelineBinaryKeys( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaryKeys_ ) VULKAN_HPP_NOEXCEPT + { + binaryCount = static_cast( pipelineBinaryKeys_.size() ); + pPipelineBinaryKeys = pipelineBinaryKeys_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryKeysAndDataKHR & + setPPipelineBinaryData( const VULKAN_HPP_NAMESPACE::PipelineBinaryDataKHR * pPipelineBinaryData_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineBinaryData = pPipelineBinaryData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryKeysAndDataKHR & setPipelineBinaryData( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaryData_ ) VULKAN_HPP_NOEXCEPT + { + binaryCount = static_cast( pipelineBinaryData_.size() ); + pPipelineBinaryData = pipelineBinaryData_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryKeysAndDataKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryKeysAndDataKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryKeysAndDataKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryKeysAndDataKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( binaryCount, pPipelineBinaryKeys, pPipelineBinaryData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryKeysAndDataKHR const & ) const = default; +#else + bool operator==( PipelineBinaryKeysAndDataKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( binaryCount == rhs.binaryCount ) && ( pPipelineBinaryKeys == rhs.pPipelineBinaryKeys ) && ( pPipelineBinaryData == rhs.pPipelineBinaryData ); +# endif + } + + bool operator!=( PipelineBinaryKeysAndDataKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t binaryCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineBinaryKeyKHR * pPipelineBinaryKeys = {}; + const VULKAN_HPP_NAMESPACE::PipelineBinaryDataKHR * pPipelineBinaryData = {}; + }; + + // wrapper struct for struct VkPipelineCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreateInfoKHR.html + struct PipelineCreateInfoKHR + { + using NativeType = VkPipelineCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCreateInfoKHR( void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR PipelineCreateInfoKHR( PipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCreateInfoKHR( VkPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCreateInfoKHR & operator=( PipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCreateInfoKHR & operator=( VkPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCreateInfoKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCreateInfoKHR const & ) const = default; +#else + bool operator==( PipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( PipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCreateInfoKHR; + void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCreateInfoKHR; + }; + + // wrapper struct for struct VkPipelineBinaryCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryCreateInfoKHR.html + struct PipelineBinaryCreateInfoKHR + { + using NativeType = VkPipelineBinaryCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineBinaryCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryCreateInfoKHR( const VULKAN_HPP_NAMESPACE::PipelineBinaryKeysAndDataKHR * pKeysAndDataInfo_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineCreateInfoKHR * pPipelineCreateInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pKeysAndDataInfo{ pKeysAndDataInfo_ } + , pipeline{ pipeline_ } + , pPipelineCreateInfo{ pPipelineCreateInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryCreateInfoKHR( PipelineBinaryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryCreateInfoKHR( VkPipelineBinaryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineBinaryCreateInfoKHR & operator=( PipelineBinaryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryCreateInfoKHR & operator=( VkPipelineBinaryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryCreateInfoKHR & + setPKeysAndDataInfo( const VULKAN_HPP_NAMESPACE::PipelineBinaryKeysAndDataKHR * pKeysAndDataInfo_ ) VULKAN_HPP_NOEXCEPT + { + pKeysAndDataInfo = pKeysAndDataInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryCreateInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryCreateInfoKHR & + setPPipelineCreateInfo( const VULKAN_HPP_NAMESPACE::PipelineCreateInfoKHR * pPipelineCreateInfo_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineCreateInfo = pPipelineCreateInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pKeysAndDataInfo, pipeline, pPipelineCreateInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryCreateInfoKHR const & ) const = default; +#else + bool operator==( PipelineBinaryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pKeysAndDataInfo == rhs.pKeysAndDataInfo ) && ( pipeline == rhs.pipeline ) && + ( pPipelineCreateInfo == rhs.pPipelineCreateInfo ); +# endif + } + + bool operator!=( PipelineBinaryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineBinaryCreateInfoKHR; + const void * pNext = {}; + const VULKAN_HPP_NAMESPACE::PipelineBinaryKeysAndDataKHR * pKeysAndDataInfo = {}; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + const VULKAN_HPP_NAMESPACE::PipelineCreateInfoKHR * pPipelineCreateInfo = {}; + }; + + template <> + struct CppType + { + using Type = PipelineBinaryCreateInfoKHR; + }; + + // wrapper struct for struct VkPipelineBinaryDataInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryDataInfoKHR.html + struct PipelineBinaryDataInfoKHR + { + using NativeType = VkPipelineBinaryDataInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineBinaryDataInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineBinaryDataInfoKHR( VULKAN_HPP_NAMESPACE::PipelineBinaryKHR pipelineBinary_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBinary{ pipelineBinary_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineBinaryDataInfoKHR( PipelineBinaryDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryDataInfoKHR( VkPipelineBinaryDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryDataInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineBinaryDataInfoKHR & operator=( PipelineBinaryDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryDataInfoKHR & operator=( VkPipelineBinaryDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryDataInfoKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryDataInfoKHR & setPipelineBinary( VULKAN_HPP_NAMESPACE::PipelineBinaryKHR pipelineBinary_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBinary = pipelineBinary_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryDataInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryDataInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryDataInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryDataInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineBinary ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryDataInfoKHR const & ) const = default; +#else + bool operator==( PipelineBinaryDataInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBinary == rhs.pipelineBinary ); +# endif + } + + bool operator!=( PipelineBinaryDataInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineBinaryDataInfoKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR pipelineBinary = {}; + }; + + template <> + struct CppType + { + using Type = PipelineBinaryDataInfoKHR; + }; + + // wrapper struct for struct VkPipelineBinaryHandlesInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryHandlesInfoKHR.html + struct PipelineBinaryHandlesInfoKHR + { + using NativeType = VkPipelineBinaryHandlesInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineBinaryHandlesInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineBinaryHandlesInfoKHR( uint32_t pipelineBinaryCount_ = {}, + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR * pPipelineBinaries_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBinaryCount{ pipelineBinaryCount_ } + , pPipelineBinaries{ pPipelineBinaries_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineBinaryHandlesInfoKHR( PipelineBinaryHandlesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryHandlesInfoKHR( VkPipelineBinaryHandlesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryHandlesInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryHandlesInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaries_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), pipelineBinaryCount( static_cast( pipelineBinaries_.size() ) ), pPipelineBinaries( pipelineBinaries_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineBinaryHandlesInfoKHR & operator=( PipelineBinaryHandlesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryHandlesInfoKHR & operator=( VkPipelineBinaryHandlesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryHandlesInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryHandlesInfoKHR & setPipelineBinaryCount( uint32_t pipelineBinaryCount_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBinaryCount = pipelineBinaryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryHandlesInfoKHR & + setPPipelineBinaries( VULKAN_HPP_NAMESPACE::PipelineBinaryKHR * pPipelineBinaries_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineBinaries = pPipelineBinaries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryHandlesInfoKHR & setPipelineBinaries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaries_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBinaryCount = static_cast( pipelineBinaries_.size() ); + pPipelineBinaries = pipelineBinaries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryHandlesInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryHandlesInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryHandlesInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryHandlesInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineBinaryCount, pPipelineBinaries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryHandlesInfoKHR const & ) const = default; +#else + bool operator==( PipelineBinaryHandlesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBinaryCount == rhs.pipelineBinaryCount ) && + ( pPipelineBinaries == rhs.pPipelineBinaries ); +# endif + } + + bool operator!=( PipelineBinaryHandlesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineBinaryHandlesInfoKHR; + const void * pNext = {}; + uint32_t pipelineBinaryCount = {}; + VULKAN_HPP_NAMESPACE::PipelineBinaryKHR * pPipelineBinaries = {}; + }; + + template <> + struct CppType + { + using Type = PipelineBinaryHandlesInfoKHR; + }; + + // wrapper struct for struct VkPipelineBinaryInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineBinaryInfoKHR.html + struct PipelineBinaryInfoKHR + { + using NativeType = VkPipelineBinaryInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineBinaryInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineBinaryInfoKHR( uint32_t binaryCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineBinaryKHR * pPipelineBinaries_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , binaryCount{ binaryCount_ } + , pPipelineBinaries{ pPipelineBinaries_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineBinaryInfoKHR( PipelineBinaryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineBinaryInfoKHR( VkPipelineBinaryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineBinaryInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaries_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), binaryCount( static_cast( pipelineBinaries_.size() ) ), pPipelineBinaries( pipelineBinaries_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineBinaryInfoKHR & operator=( PipelineBinaryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineBinaryInfoKHR & operator=( VkPipelineBinaryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryInfoKHR & setBinaryCount( uint32_t binaryCount_ ) VULKAN_HPP_NOEXCEPT + { + binaryCount = binaryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineBinaryInfoKHR & + setPPipelineBinaries( const VULKAN_HPP_NAMESPACE::PipelineBinaryKHR * pPipelineBinaries_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineBinaries = pPipelineBinaries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineBinaryInfoKHR & setPipelineBinaries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineBinaries_ ) VULKAN_HPP_NOEXCEPT + { + binaryCount = static_cast( pipelineBinaries_.size() ); + pPipelineBinaries = pipelineBinaries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineBinaryInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineBinaryInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineBinaryInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, binaryCount, pPipelineBinaries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineBinaryInfoKHR const & ) const = default; +#else + bool operator==( PipelineBinaryInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( binaryCount == rhs.binaryCount ) && ( pPipelineBinaries == rhs.pPipelineBinaries ); +# endif + } + + bool operator!=( PipelineBinaryInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineBinaryInfoKHR; + const void * pNext = {}; + uint32_t binaryCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineBinaryKHR * pPipelineBinaries = {}; + }; + + template <> + struct CppType + { + using Type = PipelineBinaryInfoKHR; + }; + + // wrapper struct for struct VkPipelineCacheCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCacheCreateInfo.html + struct PipelineCacheCreateInfo + { + using NativeType = VkPipelineCacheCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCacheCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCacheCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ = {}, + size_t initialDataSize_ = {}, + const void * pInitialData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , initialDataSize{ initialDataSize_ } + , pInitialData{ pInitialData_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCacheCreateInfo( PipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCacheCreateInfo( VkPipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCacheCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + PipelineCacheCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), initialDataSize( initialData_.size() * sizeof( T ) ), pInitialData( initialData_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineCacheCreateInfo & operator=( PipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCacheCreateInfo & operator=( VkPipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT + { + initialDataSize = initialDataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT + { + pInitialData = pInitialData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + PipelineCacheCreateInfo & setInitialData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_ ) VULKAN_HPP_NOEXCEPT + { + initialDataSize = initialData_.size() * sizeof( T ); + pInitialData = initialData_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCacheCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCacheCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCacheCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCacheCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, initialDataSize, pInitialData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCacheCreateInfo const & ) const = default; +#else + bool operator==( PipelineCacheCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( initialDataSize == rhs.initialDataSize ) && + ( pInitialData == rhs.pInitialData ); +# endif + } + + bool operator!=( PipelineCacheCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCacheCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags = {}; + size_t initialDataSize = {}; + const void * pInitialData = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCacheCreateInfo; + }; + + // wrapper struct for struct VkPipelineCacheHeaderVersionOne, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCacheHeaderVersionOne.html + struct PipelineCacheHeaderVersionOne + { + using NativeType = VkPipelineCacheHeaderVersionOne; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + PipelineCacheHeaderVersionOne( uint32_t headerSize_ = {}, + VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion_ = VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion::eOne, + uint32_t vendorID_ = {}, + uint32_t deviceID_ = {}, + std::array const & pipelineCacheUUID_ = {} ) VULKAN_HPP_NOEXCEPT + : headerSize{ headerSize_ } + , headerVersion{ headerVersion_ } + , vendorID{ vendorID_ } + , deviceID{ deviceID_ } + , pipelineCacheUUID{ pipelineCacheUUID_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne( PipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCacheHeaderVersionOne( VkPipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCacheHeaderVersionOne( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCacheHeaderVersionOne & operator=( PipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCacheHeaderVersionOne & operator=( VkPipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setHeaderSize( uint32_t headerSize_ ) VULKAN_HPP_NOEXCEPT + { + headerSize = headerSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & + setHeaderVersion( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion_ ) VULKAN_HPP_NOEXCEPT + { + headerVersion = headerVersion_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setVendorID( uint32_t vendorID_ ) VULKAN_HPP_NOEXCEPT + { + vendorID = vendorID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setDeviceID( uint32_t deviceID_ ) VULKAN_HPP_NOEXCEPT + { + deviceID = deviceID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setPipelineCacheUUID( std::array pipelineCacheUUID_ ) VULKAN_HPP_NOEXCEPT + { + pipelineCacheUUID = pipelineCacheUUID_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCacheHeaderVersionOne const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCacheHeaderVersionOne &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCacheHeaderVersionOne const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCacheHeaderVersionOne *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( headerSize, headerVersion, vendorID, deviceID, pipelineCacheUUID ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCacheHeaderVersionOne const & ) const = default; +#else + bool operator==( PipelineCacheHeaderVersionOne const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( headerSize == rhs.headerSize ) && ( headerVersion == rhs.headerVersion ) && ( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && + ( pipelineCacheUUID == rhs.pipelineCacheUUID ); +# endif + } + + bool operator!=( PipelineCacheHeaderVersionOne const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t headerSize = {}; + VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion = VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion::eOne; + uint32_t vendorID = {}; + uint32_t deviceID = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineCacheUUID = {}; + }; + + // wrapper struct for struct VkPipelineColorBlendAdvancedStateCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineColorBlendAdvancedStateCreateInfoEXT.html + struct PipelineColorBlendAdvancedStateCreateInfoEXT + { + using NativeType = VkPipelineColorBlendAdvancedStateCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PipelineColorBlendAdvancedStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ = {}, + VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcPremultiplied{ srcPremultiplied_ } + , dstPremultiplied{ dstPremultiplied_ } + , blendOverlap{ blendOverlap_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineColorBlendAdvancedStateCreateInfoEXT( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineColorBlendAdvancedStateCreateInfoEXT( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineColorBlendAdvancedStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineColorBlendAdvancedStateCreateInfoEXT & operator=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineColorBlendAdvancedStateCreateInfoEXT & operator=( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & + setSrcPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ ) VULKAN_HPP_NOEXCEPT + { + srcPremultiplied = srcPremultiplied_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & + setDstPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ ) VULKAN_HPP_NOEXCEPT + { + dstPremultiplied = dstPremultiplied_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT & + setBlendOverlap( VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ ) VULKAN_HPP_NOEXCEPT + { + blendOverlap = blendOverlap_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineColorBlendAdvancedStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorBlendAdvancedStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorBlendAdvancedStateCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineColorBlendAdvancedStateCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcPremultiplied, dstPremultiplied, blendOverlap ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineColorBlendAdvancedStateCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcPremultiplied == rhs.srcPremultiplied ) && ( dstPremultiplied == rhs.dstPremultiplied ) && + ( blendOverlap == rhs.blendOverlap ); +# endif + } + + bool operator!=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied = {}; + VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied = {}; + VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated; + }; + + template <> + struct CppType + { + using Type = PipelineColorBlendAdvancedStateCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineColorWriteCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineColorWriteCreateInfoEXT.html + struct PipelineColorWriteCreateInfoEXT + { + using NativeType = VkPipelineColorWriteCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorWriteCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineColorWriteCreateInfoEXT( uint32_t attachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachmentCount{ attachmentCount_ } + , pColorWriteEnables{ pColorWriteEnables_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineColorWriteCreateInfoEXT( PipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineColorWriteCreateInfoEXT( VkPipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineColorWriteCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineColorWriteCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorWriteEnables_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), attachmentCount( static_cast( colorWriteEnables_.size() ) ), pColorWriteEnables( colorWriteEnables_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineColorWriteCreateInfoEXT & operator=( PipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineColorWriteCreateInfoEXT & operator=( VkPipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = attachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & + setPColorWriteEnables( const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables_ ) VULKAN_HPP_NOEXCEPT + { + pColorWriteEnables = pColorWriteEnables_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineColorWriteCreateInfoEXT & + setColorWriteEnables( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorWriteEnables_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = static_cast( colorWriteEnables_.size() ); + pColorWriteEnables = colorWriteEnables_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineColorWriteCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorWriteCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineColorWriteCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineColorWriteCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, attachmentCount, pColorWriteEnables ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineColorWriteCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineColorWriteCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentCount == rhs.attachmentCount ) && ( pColorWriteEnables == rhs.pColorWriteEnables ); +# endif + } + + bool operator!=( PipelineColorWriteCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineColorWriteCreateInfoEXT; + const void * pNext = {}; + uint32_t attachmentCount = {}; + const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables = {}; + }; + + template <> + struct CppType + { + using Type = PipelineColorWriteCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineCompilerControlCreateInfoAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCompilerControlCreateInfoAMD.html + struct PipelineCompilerControlCreateInfoAMD + { + using NativeType = VkPipelineCompilerControlCreateInfoAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCompilerControlCreateInfoAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCompilerControlCreateInfoAMD( VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , compilerControlFlags{ compilerControlFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCompilerControlCreateInfoAMD( PipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCompilerControlCreateInfoAMD( VkPipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCompilerControlCreateInfoAMD( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCompilerControlCreateInfoAMD & operator=( PipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCompilerControlCreateInfoAMD & operator=( VkPipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD & + setCompilerControlFlags( VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags_ ) VULKAN_HPP_NOEXCEPT + { + compilerControlFlags = compilerControlFlags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCompilerControlCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCompilerControlCreateInfoAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCompilerControlCreateInfoAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCompilerControlCreateInfoAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, compilerControlFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCompilerControlCreateInfoAMD const & ) const = default; +#else + bool operator==( PipelineCompilerControlCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compilerControlFlags == rhs.compilerControlFlags ); +# endif + } + + bool operator!=( PipelineCompilerControlCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCompilerControlCreateInfoAMD; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCompilerControlCreateInfoAMD; + }; + + // wrapper struct for struct VkPipelineCoverageModulationStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCoverageModulationStateCreateInfoNV.html + struct PipelineCoverageModulationStateCreateInfoNV + { + using NativeType = VkPipelineCoverageModulationStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCoverageModulationStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCoverageModulationStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_ = {}, + VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_ = VULKAN_HPP_NAMESPACE::CoverageModulationModeNV::eNone, + VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_ = {}, + uint32_t coverageModulationTableCount_ = {}, + const float * pCoverageModulationTable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , coverageModulationMode{ coverageModulationMode_ } + , coverageModulationTableEnable{ coverageModulationTableEnable_ } + , coverageModulationTableCount{ coverageModulationTableCount_ } + , pCoverageModulationTable{ pCoverageModulationTable_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCoverageModulationStateCreateInfoNV( PipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCoverageModulationStateCreateInfoNV( VkPipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCoverageModulationStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineCoverageModulationStateCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_, + VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_, + VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & coverageModulationTable_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , coverageModulationMode( coverageModulationMode_ ) + , coverageModulationTableEnable( coverageModulationTableEnable_ ) + , coverageModulationTableCount( static_cast( coverageModulationTable_.size() ) ) + , pCoverageModulationTable( coverageModulationTable_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineCoverageModulationStateCreateInfoNV & operator=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCoverageModulationStateCreateInfoNV & operator=( VkPipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & + setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & + setCoverageModulationMode( VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_ ) VULKAN_HPP_NOEXCEPT + { + coverageModulationMode = coverageModulationMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & + setCoverageModulationTableEnable( VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_ ) VULKAN_HPP_NOEXCEPT + { + coverageModulationTableEnable = coverageModulationTableEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & + setCoverageModulationTableCount( uint32_t coverageModulationTableCount_ ) VULKAN_HPP_NOEXCEPT + { + coverageModulationTableCount = coverageModulationTableCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & + setPCoverageModulationTable( const float * pCoverageModulationTable_ ) VULKAN_HPP_NOEXCEPT + { + pCoverageModulationTable = pCoverageModulationTable_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineCoverageModulationStateCreateInfoNV & + setCoverageModulationTable( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & coverageModulationTable_ ) VULKAN_HPP_NOEXCEPT + { + coverageModulationTableCount = static_cast( coverageModulationTable_.size() ); + pCoverageModulationTable = coverageModulationTable_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCoverageModulationStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCoverageModulationStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCoverageModulationStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCoverageModulationStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, coverageModulationMode, coverageModulationTableEnable, coverageModulationTableCount, pCoverageModulationTable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCoverageModulationStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineCoverageModulationStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( coverageModulationMode == rhs.coverageModulationMode ) && + ( coverageModulationTableEnable == rhs.coverageModulationTableEnable ) && ( coverageModulationTableCount == rhs.coverageModulationTableCount ) && + ( pCoverageModulationTable == rhs.pCoverageModulationTable ); +# endif + } + + bool operator!=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCoverageModulationStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags = {}; + VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode = VULKAN_HPP_NAMESPACE::CoverageModulationModeNV::eNone; + VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable = {}; + uint32_t coverageModulationTableCount = {}; + const float * pCoverageModulationTable = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCoverageModulationStateCreateInfoNV; + }; + + // wrapper struct for struct VkPipelineCoverageReductionStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCoverageReductionStateCreateInfoNV.html + struct PipelineCoverageReductionStateCreateInfoNV + { + using NativeType = VkPipelineCoverageReductionStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCoverageReductionStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCoverageReductionStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags_ = {}, + VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , coverageReductionMode{ coverageReductionMode_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCoverageReductionStateCreateInfoNV( PipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCoverageReductionStateCreateInfoNV( VkPipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCoverageReductionStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCoverageReductionStateCreateInfoNV & operator=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCoverageReductionStateCreateInfoNV & operator=( VkPipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & + setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & + setCoverageReductionMode( VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ ) VULKAN_HPP_NOEXCEPT + { + coverageReductionMode = coverageReductionMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCoverageReductionStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCoverageReductionStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCoverageReductionStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCoverageReductionStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, coverageReductionMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCoverageReductionStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineCoverageReductionStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( coverageReductionMode == rhs.coverageReductionMode ); +# endif + } + + bool operator!=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCoverageReductionStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags = {}; + VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode = VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge; + }; + + template <> + struct CppType + { + using Type = PipelineCoverageReductionStateCreateInfoNV; + }; + + // wrapper struct for struct VkPipelineCoverageToColorStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCoverageToColorStateCreateInfoNV.html + struct PipelineCoverageToColorStateCreateInfoNV + { + using NativeType = VkPipelineCoverageToColorStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCoverageToColorStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCoverageToColorStateCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable_ = {}, + uint32_t coverageToColorLocation_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , coverageToColorEnable{ coverageToColorEnable_ } + , coverageToColorLocation{ coverageToColorLocation_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCoverageToColorStateCreateInfoNV( PipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCoverageToColorStateCreateInfoNV( VkPipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCoverageToColorStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCoverageToColorStateCreateInfoNV & operator=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCoverageToColorStateCreateInfoNV & operator=( VkPipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & + setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & + setCoverageToColorEnable( VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable_ ) VULKAN_HPP_NOEXCEPT + { + coverageToColorEnable = coverageToColorEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV & setCoverageToColorLocation( uint32_t coverageToColorLocation_ ) VULKAN_HPP_NOEXCEPT + { + coverageToColorLocation = coverageToColorLocation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCoverageToColorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCoverageToColorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCoverageToColorStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCoverageToColorStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, coverageToColorEnable, coverageToColorLocation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCoverageToColorStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineCoverageToColorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( coverageToColorEnable == rhs.coverageToColorEnable ) && + ( coverageToColorLocation == rhs.coverageToColorLocation ); +# endif + } + + bool operator!=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCoverageToColorStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags = {}; + VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable = {}; + uint32_t coverageToColorLocation = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCoverageToColorStateCreateInfoNV; + }; + + // wrapper struct for struct VkPipelineCreateFlags2CreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreateFlags2CreateInfo.html + struct PipelineCreateFlags2CreateInfo + { + using NativeType = VkPipelineCreateFlags2CreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCreateFlags2CreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCreateFlags2CreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags2 flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCreateFlags2CreateInfo( PipelineCreateFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCreateFlags2CreateInfo( VkPipelineCreateFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCreateFlags2CreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCreateFlags2CreateInfo & operator=( PipelineCreateFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCreateFlags2CreateInfo & operator=( VkPipelineCreateFlags2CreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCreateFlags2CreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCreateFlags2CreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags2 flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCreateFlags2CreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreateFlags2CreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreateFlags2CreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCreateFlags2CreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCreateFlags2CreateInfo const & ) const = default; +#else + bool operator==( PipelineCreateFlags2CreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( PipelineCreateFlags2CreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCreateFlags2CreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags2 flags = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCreateFlags2CreateInfo; + }; + + using PipelineCreateFlags2CreateInfoKHR = PipelineCreateFlags2CreateInfo; + + // wrapper struct for struct VkPipelineCreationFeedback, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreationFeedback.html + struct PipelineCreationFeedback + { + using NativeType = VkPipelineCreationFeedback; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCreationFeedback( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags flags_ = {}, + uint64_t duration_ = {} ) VULKAN_HPP_NOEXCEPT + : flags{ flags_ } + , duration{ duration_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCreationFeedback( PipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCreationFeedback( VkPipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCreationFeedback( *reinterpret_cast( &rhs ) ) + { + } + + PipelineCreationFeedback & operator=( PipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCreationFeedback & operator=( VkPipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPipelineCreationFeedback const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreationFeedback &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreationFeedback const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCreationFeedback *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( flags, duration ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCreationFeedback const & ) const = default; +#else + bool operator==( PipelineCreationFeedback const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( flags == rhs.flags ) && ( duration == rhs.duration ); +# endif + } + + bool operator!=( PipelineCreationFeedback const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags flags = {}; + uint64_t duration = {}; + }; + + using PipelineCreationFeedbackEXT = PipelineCreationFeedback; + + // wrapper struct for struct VkPipelineCreationFeedbackCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineCreationFeedbackCreateInfo.html + struct PipelineCreationFeedbackCreateInfo + { + using NativeType = VkPipelineCreationFeedbackCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCreationFeedbackCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_ = {}, + uint32_t pipelineStageCreationFeedbackCount_ = {}, + VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pPipelineCreationFeedback{ pPipelineCreationFeedback_ } + , pipelineStageCreationFeedbackCount{ pipelineStageCreationFeedbackCount_ } + , pPipelineStageCreationFeedbacks{ pPipelineStageCreationFeedbacks_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfo( PipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineCreationFeedbackCreateInfo( VkPipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineCreationFeedbackCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineCreationFeedbackCreateInfo( + VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineStageCreationFeedbacks_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , pPipelineCreationFeedback( pPipelineCreationFeedback_ ) + , pipelineStageCreationFeedbackCount( static_cast( pipelineStageCreationFeedbacks_.size() ) ) + , pPipelineStageCreationFeedbacks( pipelineStageCreationFeedbacks_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineCreationFeedbackCreateInfo & operator=( PipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineCreationFeedbackCreateInfo & operator=( VkPipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & + setPPipelineCreationFeedback( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineCreationFeedback = pPipelineCreationFeedback_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & + setPipelineStageCreationFeedbackCount( uint32_t pipelineStageCreationFeedbackCount_ ) VULKAN_HPP_NOEXCEPT + { + pipelineStageCreationFeedbackCount = pipelineStageCreationFeedbackCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & + setPPipelineStageCreationFeedbacks( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks_ ) VULKAN_HPP_NOEXCEPT + { + pPipelineStageCreationFeedbacks = pPipelineStageCreationFeedbacks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineCreationFeedbackCreateInfo & setPipelineStageCreationFeedbacks( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pipelineStageCreationFeedbacks_ ) + VULKAN_HPP_NOEXCEPT + { + pipelineStageCreationFeedbackCount = static_cast( pipelineStageCreationFeedbacks_.size() ); + pPipelineStageCreationFeedbacks = pipelineStageCreationFeedbacks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineCreationFeedbackCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreationFeedbackCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineCreationFeedbackCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineCreationFeedbackCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pPipelineCreationFeedback, pipelineStageCreationFeedbackCount, pPipelineStageCreationFeedbacks ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineCreationFeedbackCreateInfo const & ) const = default; +#else + bool operator==( PipelineCreationFeedbackCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pPipelineCreationFeedback == rhs.pPipelineCreationFeedback ) && + ( pipelineStageCreationFeedbackCount == rhs.pipelineStageCreationFeedbackCount ) && + ( pPipelineStageCreationFeedbacks == rhs.pPipelineStageCreationFeedbacks ); +# endif + } + + bool operator!=( PipelineCreationFeedbackCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCreationFeedbackCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback = {}; + uint32_t pipelineStageCreationFeedbackCount = {}; + VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks = {}; + }; + + template <> + struct CppType + { + using Type = PipelineCreationFeedbackCreateInfo; + }; + + using PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfo; + + // wrapper struct for struct VkPipelineDiscardRectangleStateCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineDiscardRectangleStateCreateInfoEXT.html + struct PipelineDiscardRectangleStateCreateInfoEXT + { + using NativeType = VkPipelineDiscardRectangleStateCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDiscardRectangleStateCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineDiscardRectangleStateCreateInfoEXT( + VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_ = VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT::eInclusive, + uint32_t discardRectangleCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , discardRectangleMode{ discardRectangleMode_ } + , discardRectangleCount{ discardRectangleCount_ } + , pDiscardRectangles{ pDiscardRectangles_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineDiscardRectangleStateCreateInfoEXT( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineDiscardRectangleStateCreateInfoEXT( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineDiscardRectangleStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineDiscardRectangleStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & discardRectangles_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , discardRectangleMode( discardRectangleMode_ ) + , discardRectangleCount( static_cast( discardRectangles_.size() ) ) + , pDiscardRectangles( discardRectangles_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineDiscardRectangleStateCreateInfoEXT & operator=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineDiscardRectangleStateCreateInfoEXT & operator=( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & + setFlags( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & + setDiscardRectangleMode( VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_ ) VULKAN_HPP_NOEXCEPT + { + discardRectangleMode = discardRectangleMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & setDiscardRectangleCount( uint32_t discardRectangleCount_ ) VULKAN_HPP_NOEXCEPT + { + discardRectangleCount = discardRectangleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT & + setPDiscardRectangles( const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles_ ) VULKAN_HPP_NOEXCEPT + { + pDiscardRectangles = pDiscardRectangles_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineDiscardRectangleStateCreateInfoEXT & + setDiscardRectangles( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & discardRectangles_ ) VULKAN_HPP_NOEXCEPT + { + discardRectangleCount = static_cast( discardRectangles_.size() ); + pDiscardRectangles = discardRectangles_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineDiscardRectangleStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineDiscardRectangleStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineDiscardRectangleStateCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineDiscardRectangleStateCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, discardRectangleMode, discardRectangleCount, pDiscardRectangles ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineDiscardRectangleStateCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( discardRectangleMode == rhs.discardRectangleMode ) && + ( discardRectangleCount == rhs.discardRectangleCount ) && ( pDiscardRectangles == rhs.pDiscardRectangles ); +# endif + } + + bool operator!=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineDiscardRectangleStateCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode = VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT::eInclusive; + uint32_t discardRectangleCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles = {}; + }; + + template <> + struct CppType + { + using Type = PipelineDiscardRectangleStateCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineExecutableInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineExecutableInfoKHR.html + struct PipelineExecutableInfoKHR + { + using NativeType = VkPipelineExecutableInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineExecutableInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, + uint32_t executableIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipeline{ pipeline_ } + , executableIndex{ executableIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineExecutableInfoKHR( PipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineExecutableInfoKHR( VkPipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineExecutableInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineExecutableInfoKHR & operator=( PipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineExecutableInfoKHR & operator=( VkPipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setExecutableIndex( uint32_t executableIndex_ ) VULKAN_HPP_NOEXCEPT + { + executableIndex = executableIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineExecutableInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineExecutableInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipeline, executableIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineExecutableInfoKHR const & ) const = default; +#else + bool operator==( PipelineExecutableInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ) && ( executableIndex == rhs.executableIndex ); +# endif + } + + bool operator!=( PipelineExecutableInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + uint32_t executableIndex = {}; + }; + + template <> + struct CppType + { + using Type = PipelineExecutableInfoKHR; + }; + + // wrapper struct for struct VkPipelineExecutableInternalRepresentationKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineExecutableInternalRepresentationKHR.html + struct PipelineExecutableInternalRepresentationKHR + { + using NativeType = VkPipelineExecutableInternalRepresentationKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableInternalRepresentationKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInternalRepresentationKHR( std::array const & name_ = {}, + std::array const & description_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 isText_ = {}, + size_t dataSize_ = {}, + void * pData_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , name{ name_ } + , description{ description_ } + , isText{ isText_ } + , dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PipelineExecutableInternalRepresentationKHR( PipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineExecutableInternalRepresentationKHR( VkPipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineExecutableInternalRepresentationKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineExecutableInternalRepresentationKHR & operator=( PipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineExecutableInternalRepresentationKHR & operator=( VkPipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPipelineExecutableInternalRepresentationKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableInternalRepresentationKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableInternalRepresentationKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineExecutableInternalRepresentationKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + size_t const &, + void * const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, name, description, isText, dataSize, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( name, rhs.name ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = isText <=> rhs.isText; cmp != 0 ) + return cmp; + if ( auto cmp = dataSize <=> rhs.dataSize; cmp != 0 ) + return cmp; + if ( auto cmp = pData <=> rhs.pData; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( strcmp( name, rhs.name ) == 0 ) && ( strcmp( description, rhs.description ) == 0 ) && + ( isText == rhs.isText ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); + } + + bool operator!=( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableInternalRepresentationKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + VULKAN_HPP_NAMESPACE::Bool32 isText = {}; + size_t dataSize = {}; + void * pData = {}; + }; + + template <> + struct CppType + { + using Type = PipelineExecutableInternalRepresentationKHR; + }; + + // wrapper struct for struct VkPipelineExecutablePropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineExecutablePropertiesKHR.html + struct PipelineExecutablePropertiesKHR + { + using NativeType = VkPipelineExecutablePropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutablePropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineExecutablePropertiesKHR( VULKAN_HPP_NAMESPACE::ShaderStageFlags stages_ = {}, + std::array const & name_ = {}, + std::array const & description_ = {}, + uint32_t subgroupSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stages{ stages_ } + , name{ name_ } + , description{ description_ } + , subgroupSize{ subgroupSize_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutablePropertiesKHR( PipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineExecutablePropertiesKHR( VkPipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineExecutablePropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineExecutablePropertiesKHR & operator=( PipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineExecutablePropertiesKHR & operator=( VkPipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPipelineExecutablePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutablePropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutablePropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineExecutablePropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stages, name, description, subgroupSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = stages <=> rhs.stages; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( name, rhs.name ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = subgroupSize <=> rhs.subgroupSize; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stages == rhs.stages ) && ( strcmp( name, rhs.name ) == 0 ) && + ( strcmp( description, rhs.description ) == 0 ) && ( subgroupSize == rhs.subgroupSize ); + } + + bool operator!=( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutablePropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stages = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + uint32_t subgroupSize = {}; + }; + + template <> + struct CppType + { + using Type = PipelineExecutablePropertiesKHR; + }; + + union PipelineExecutableStatisticValueKHR + { + using NativeType = VkPipelineExecutableStatisticValueKHR; +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS ) + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( VULKAN_HPP_NAMESPACE::Bool32 b32_ = {} ) : b32( b32_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( int64_t i64_ ) : i64( i64_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( uint64_t u64_ ) : u64( u64_ ) {} + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( double f64_ ) : f64( f64_ ) {} +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_UNION_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setB32( VULKAN_HPP_NAMESPACE::Bool32 b32_ ) VULKAN_HPP_NOEXCEPT + { + b32 = b32_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setI64( int64_t i64_ ) VULKAN_HPP_NOEXCEPT + { + i64 = i64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setU64( uint64_t u64_ ) VULKAN_HPP_NOEXCEPT + { + u64 = u64_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setF64( double f64_ ) VULKAN_HPP_NOEXCEPT + { + f64 = f64_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineExecutableStatisticValueKHR const &() const + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableStatisticValueKHR &() + { + return *reinterpret_cast( this ); + } + +#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS + VULKAN_HPP_NAMESPACE::Bool32 b32; + int64_t i64; + uint64_t u64; + double f64; +#else + VkBool32 b32; + int64_t i64; + uint64_t u64; + double f64; +#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/ + }; + + // wrapper struct for struct VkPipelineExecutableStatisticKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineExecutableStatisticKHR.html + struct PipelineExecutableStatisticKHR + { + using NativeType = VkPipelineExecutableStatisticKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableStatisticKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticKHR( + std::array const & name_ = {}, + std::array const & description_ = {}, + VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR format_ = VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32, + VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , name{ name_ } + , description{ description_ } + , format{ format_ } + , value{ value_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticKHR( PipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineExecutableStatisticKHR( VkPipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineExecutableStatisticKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineExecutableStatisticKHR & operator=( PipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineExecutableStatisticKHR & operator=( VkPipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPipelineExecutableStatisticKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableStatisticKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineExecutableStatisticKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineExecutableStatisticKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::ArrayWrapper1D const &, + VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR const &, + VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, name, description, format, value ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableStatisticKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D name = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR format = VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32; + VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value = {}; + }; + + template <> + struct CppType + { + using Type = PipelineExecutableStatisticKHR; + }; + + // wrapper struct for struct VkPipelineFragmentDensityMapLayeredCreateInfoVALVE, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineFragmentDensityMapLayeredCreateInfoVALVE.html + struct PipelineFragmentDensityMapLayeredCreateInfoVALVE + { + using NativeType = VkPipelineFragmentDensityMapLayeredCreateInfoVALVE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineFragmentDensityMapLayeredCreateInfoVALVE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineFragmentDensityMapLayeredCreateInfoVALVE( uint32_t maxFragmentDensityMapLayers_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxFragmentDensityMapLayers{ maxFragmentDensityMapLayers_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineFragmentDensityMapLayeredCreateInfoVALVE( PipelineFragmentDensityMapLayeredCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineFragmentDensityMapLayeredCreateInfoVALVE( VkPipelineFragmentDensityMapLayeredCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineFragmentDensityMapLayeredCreateInfoVALVE( *reinterpret_cast( &rhs ) ) + { + } + + PipelineFragmentDensityMapLayeredCreateInfoVALVE & operator=( PipelineFragmentDensityMapLayeredCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineFragmentDensityMapLayeredCreateInfoVALVE & operator=( VkPipelineFragmentDensityMapLayeredCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentDensityMapLayeredCreateInfoVALVE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentDensityMapLayeredCreateInfoVALVE & + setMaxFragmentDensityMapLayers( uint32_t maxFragmentDensityMapLayers_ ) VULKAN_HPP_NOEXCEPT + { + maxFragmentDensityMapLayers = maxFragmentDensityMapLayers_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineFragmentDensityMapLayeredCreateInfoVALVE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineFragmentDensityMapLayeredCreateInfoVALVE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineFragmentDensityMapLayeredCreateInfoVALVE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineFragmentDensityMapLayeredCreateInfoVALVE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxFragmentDensityMapLayers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineFragmentDensityMapLayeredCreateInfoVALVE const & ) const = default; +#else + bool operator==( PipelineFragmentDensityMapLayeredCreateInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxFragmentDensityMapLayers == rhs.maxFragmentDensityMapLayers ); +# endif + } + + bool operator!=( PipelineFragmentDensityMapLayeredCreateInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineFragmentDensityMapLayeredCreateInfoVALVE; + const void * pNext = {}; + uint32_t maxFragmentDensityMapLayers = {}; + }; + + template <> + struct CppType + { + using Type = PipelineFragmentDensityMapLayeredCreateInfoVALVE; + }; + + // wrapper struct for struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineFragmentShadingRateEnumStateCreateInfoNV.html + struct PipelineFragmentShadingRateEnumStateCreateInfoNV + { + using NativeType = VkPipelineFragmentShadingRateEnumStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType_ = VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV::eFragmentSize, + VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate_ = VULKAN_HPP_NAMESPACE::FragmentShadingRateNV::e1InvocationPerPixel, + std::array const & + combinerOps_ = { { VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep, VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep } }, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shadingRateType{ shadingRateType_ } + , shadingRate{ shadingRate_ } + , combinerOps{ combinerOps_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PipelineFragmentShadingRateEnumStateCreateInfoNV( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineFragmentShadingRateEnumStateCreateInfoNV( VkPipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineFragmentShadingRateEnumStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + PipelineFragmentShadingRateEnumStateCreateInfoNV & operator=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineFragmentShadingRateEnumStateCreateInfoNV & operator=( VkPipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & + setShadingRateType( VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType_ ) VULKAN_HPP_NOEXCEPT + { + shadingRateType = shadingRateType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & + setShadingRate( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate_ ) VULKAN_HPP_NOEXCEPT + { + shadingRate = shadingRate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & + setCombinerOps( std::array combinerOps_ ) VULKAN_HPP_NOEXCEPT + { + combinerOps = combinerOps_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shadingRateType, shadingRate, combinerOps ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineFragmentShadingRateEnumStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateType == rhs.shadingRateType ) && ( shadingRate == rhs.shadingRate ) && + ( combinerOps == rhs.combinerOps ); +# endif + } + + bool operator!=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType = VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV::eFragmentSize; + VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate = VULKAN_HPP_NAMESPACE::FragmentShadingRateNV::e1InvocationPerPixel; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D combinerOps = {}; + }; + + template <> + struct CppType + { + using Type = PipelineFragmentShadingRateEnumStateCreateInfoNV; + }; + + // wrapper struct for struct VkPipelineFragmentShadingRateStateCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineFragmentShadingRateStateCreateInfoKHR.html + struct PipelineFragmentShadingRateStateCreateInfoKHR + { + using NativeType = VkPipelineFragmentShadingRateStateCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR( + VULKAN_HPP_NAMESPACE::Extent2D fragmentSize_ = {}, + std::array const & + combinerOps_ = { { VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep, VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR::eKeep } }, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentSize{ fragmentSize_ } + , combinerOps{ combinerOps_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 + PipelineFragmentShadingRateStateCreateInfoKHR( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineFragmentShadingRateStateCreateInfoKHR( VkPipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineFragmentShadingRateStateCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PipelineFragmentShadingRateStateCreateInfoKHR & operator=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineFragmentShadingRateStateCreateInfoKHR & operator=( VkPipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & + setFragmentSize( VULKAN_HPP_NAMESPACE::Extent2D const & fragmentSize_ ) VULKAN_HPP_NOEXCEPT + { + fragmentSize = fragmentSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & + setCombinerOps( std::array combinerOps_ ) VULKAN_HPP_NOEXCEPT + { + combinerOps = combinerOps_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineFragmentShadingRateStateCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineFragmentShadingRateStateCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineFragmentShadingRateStateCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineFragmentShadingRateStateCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentSize, combinerOps ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineFragmentShadingRateStateCreateInfoKHR const & ) const = default; +#else + bool operator==( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentSize == rhs.fragmentSize ) && ( combinerOps == rhs.combinerOps ); +# endif + } + + bool operator!=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D fragmentSize = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D combinerOps = {}; + }; + + template <> + struct CppType + { + using Type = PipelineFragmentShadingRateStateCreateInfoKHR; + }; + + // wrapper struct for struct VkPipelineIndirectDeviceAddressInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineIndirectDeviceAddressInfoNV.html + struct PipelineIndirectDeviceAddressInfoNV + { + using NativeType = VkPipelineIndirectDeviceAddressInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineIndirectDeviceAddressInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PipelineIndirectDeviceAddressInfoNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , pipeline{ pipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineIndirectDeviceAddressInfoNV( PipelineIndirectDeviceAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineIndirectDeviceAddressInfoNV( VkPipelineIndirectDeviceAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineIndirectDeviceAddressInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + PipelineIndirectDeviceAddressInfoNV & operator=( PipelineIndirectDeviceAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineIndirectDeviceAddressInfoNV & operator=( VkPipelineIndirectDeviceAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineIndirectDeviceAddressInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineIndirectDeviceAddressInfoNV & + setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineIndirectDeviceAddressInfoNV & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineIndirectDeviceAddressInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineIndirectDeviceAddressInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineIndirectDeviceAddressInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineIndirectDeviceAddressInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineBindPoint, pipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineIndirectDeviceAddressInfoNV const & ) const = default; +#else + bool operator==( PipelineIndirectDeviceAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( pipeline == rhs.pipeline ); +# endif + } + + bool operator!=( PipelineIndirectDeviceAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineIndirectDeviceAddressInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + }; + + template <> + struct CppType + { + using Type = PipelineIndirectDeviceAddressInfoNV; + }; + + // wrapper struct for struct VkPipelineInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineInfoKHR.html + struct PipelineInfoKHR + { + using NativeType = VkPipelineInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipeline{ pipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineInfoKHR( PipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineInfoKHR( VkPipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PipelineInfoKHR( *reinterpret_cast( &rhs ) ) {} + + PipelineInfoKHR & operator=( PipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineInfoKHR & operator=( VkPipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineInfoKHR const & ) const = default; +#else + bool operator==( PipelineInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ); +# endif + } + + bool operator!=( PipelineInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + }; + + template <> + struct CppType + { + using Type = PipelineInfoKHR; + }; + + using PipelineInfoEXT = PipelineInfoKHR; + + // wrapper struct for struct VkPipelineLayoutCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineLayoutCreateInfo.html + struct PipelineLayoutCreateInfo + { + using NativeType = VkPipelineLayoutCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLayoutCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineLayoutCreateInfo( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_ = {}, + uint32_t setLayoutCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ = {}, + uint32_t pushConstantRangeCount_ = {}, + const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , setLayoutCount{ setLayoutCount_ } + , pSetLayouts{ pSetLayouts_ } + , pushConstantRangeCount{ pushConstantRangeCount_ } + , pPushConstantRanges{ pPushConstantRanges_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineLayoutCreateInfo( PipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineLayoutCreateInfo( VkPipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineLayoutCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineLayoutCreateInfo( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , setLayoutCount( static_cast( setLayouts_.size() ) ) + , pSetLayouts( setLayouts_.data() ) + , pushConstantRangeCount( static_cast( pushConstantRanges_.size() ) ) + , pPushConstantRanges( pushConstantRanges_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineLayoutCreateInfo & operator=( PipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineLayoutCreateInfo & operator=( VkPipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setSetLayoutCount( uint32_t setLayoutCount_ ) VULKAN_HPP_NOEXCEPT + { + setLayoutCount = setLayoutCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pSetLayouts = pSetLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineLayoutCreateInfo & + setSetLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ ) VULKAN_HPP_NOEXCEPT + { + setLayoutCount = static_cast( setLayouts_.size() ); + pSetLayouts = setLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPushConstantRangeCount( uint32_t pushConstantRangeCount_ ) VULKAN_HPP_NOEXCEPT + { + pushConstantRangeCount = pushConstantRangeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & + setPPushConstantRanges( const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ ) VULKAN_HPP_NOEXCEPT + { + pPushConstantRanges = pPushConstantRanges_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineLayoutCreateInfo & setPushConstantRanges( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ ) VULKAN_HPP_NOEXCEPT + { + pushConstantRangeCount = static_cast( pushConstantRanges_.size() ); + pPushConstantRanges = pushConstantRanges_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineLayoutCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineLayoutCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, setLayoutCount, pSetLayouts, pushConstantRangeCount, pPushConstantRanges ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineLayoutCreateInfo const & ) const = default; +#else + bool operator==( PipelineLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( setLayoutCount == rhs.setLayoutCount ) && + ( pSetLayouts == rhs.pSetLayouts ) && ( pushConstantRangeCount == rhs.pushConstantRangeCount ) && + ( pPushConstantRanges == rhs.pPushConstantRanges ); +# endif + } + + bool operator!=( PipelineLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineLayoutCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags = {}; + uint32_t setLayoutCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {}; + uint32_t pushConstantRangeCount = {}; + const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges = {}; + }; + + template <> + struct CppType + { + using Type = PipelineLayoutCreateInfo; + }; + + // wrapper struct for struct VkPipelinePropertiesIdentifierEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelinePropertiesIdentifierEXT.html + struct PipelinePropertiesIdentifierEXT + { + using NativeType = VkPipelinePropertiesIdentifierEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelinePropertiesIdentifierEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 PipelinePropertiesIdentifierEXT( std::array const & pipelineIdentifier_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipelineIdentifier{ pipelineIdentifier_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 PipelinePropertiesIdentifierEXT( PipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelinePropertiesIdentifierEXT( VkPipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelinePropertiesIdentifierEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelinePropertiesIdentifierEXT & operator=( PipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelinePropertiesIdentifierEXT & operator=( VkPipelinePropertiesIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPipelinePropertiesIdentifierEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelinePropertiesIdentifierEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelinePropertiesIdentifierEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelinePropertiesIdentifierEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipelineIdentifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelinePropertiesIdentifierEXT const & ) const = default; +#else + bool operator==( PipelinePropertiesIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineIdentifier == rhs.pipelineIdentifier ); +# endif + } + + bool operator!=( PipelinePropertiesIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelinePropertiesIdentifierEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D pipelineIdentifier = {}; + }; + + template <> + struct CppType + { + using Type = PipelinePropertiesIdentifierEXT; + }; + + // wrapper struct for struct VkPipelineRasterizationConservativeStateCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationConservativeStateCreateInfoEXT.html + struct PipelineRasterizationConservativeStateCreateInfoEXT + { + using NativeType = VkPipelineRasterizationConservativeStateCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationConservativeStateCreateInfoEXT( + VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode_ = VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT::eDisabled, + float extraPrimitiveOverestimationSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , conservativeRasterizationMode{ conservativeRasterizationMode_ } + , extraPrimitiveOverestimationSize{ extraPrimitiveOverestimationSize_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineRasterizationConservativeStateCreateInfoEXT( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationConservativeStateCreateInfoEXT( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationConservativeStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationConservativeStateCreateInfoEXT & + operator=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationConservativeStateCreateInfoEXT & operator=( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & + setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & + setConservativeRasterizationMode( VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode_ ) VULKAN_HPP_NOEXCEPT + { + conservativeRasterizationMode = conservativeRasterizationMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & + setExtraPrimitiveOverestimationSize( float extraPrimitiveOverestimationSize_ ) VULKAN_HPP_NOEXCEPT + { + extraPrimitiveOverestimationSize = extraPrimitiveOverestimationSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationConservativeStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationConservativeStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationConservativeStateCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationConservativeStateCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, conservativeRasterizationMode, extraPrimitiveOverestimationSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationConservativeStateCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( conservativeRasterizationMode == rhs.conservativeRasterizationMode ) && + ( extraPrimitiveOverestimationSize == rhs.extraPrimitiveOverestimationSize ); +# endif + } + + bool operator!=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode = VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT::eDisabled; + float extraPrimitiveOverestimationSize = {}; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationConservativeStateCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineRasterizationDepthClipStateCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationDepthClipStateCreateInfoEXT.html + struct PipelineRasterizationDepthClipStateCreateInfoEXT + { + using NativeType = VkPipelineRasterizationDepthClipStateCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationDepthClipStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , depthClipEnable{ depthClipEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineRasterizationDepthClipStateCreateInfoEXT( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationDepthClipStateCreateInfoEXT( VkPipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationDepthClipStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationDepthClipStateCreateInfoEXT & operator=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationDepthClipStateCreateInfoEXT & operator=( VkPipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT & + setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT & + setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT + { + depthClipEnable = depthClipEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationDepthClipStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationDepthClipStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationDepthClipStateCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationDepthClipStateCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, depthClipEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationDepthClipStateCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( depthClipEnable == rhs.depthClipEnable ); +# endif + } + + bool operator!=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable = {}; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationDepthClipStateCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineRasterizationLineStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationLineStateCreateInfo.html + struct PipelineRasterizationLineStateCreateInfo + { + using NativeType = VkPipelineRasterizationLineStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationLineStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationLineStateCreateInfo( + VULKAN_HPP_NAMESPACE::LineRasterizationMode lineRasterizationMode_ = VULKAN_HPP_NAMESPACE::LineRasterizationMode::eDefault, + VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable_ = {}, + uint32_t lineStippleFactor_ = {}, + uint16_t lineStipplePattern_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , lineRasterizationMode{ lineRasterizationMode_ } + , stippledLineEnable{ stippledLineEnable_ } + , lineStippleFactor{ lineStippleFactor_ } + , lineStipplePattern{ lineStipplePattern_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineRasterizationLineStateCreateInfo( PipelineRasterizationLineStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationLineStateCreateInfo( VkPipelineRasterizationLineStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationLineStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationLineStateCreateInfo & operator=( PipelineRasterizationLineStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationLineStateCreateInfo & operator=( VkPipelineRasterizationLineStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfo & + setLineRasterizationMode( VULKAN_HPP_NAMESPACE::LineRasterizationMode lineRasterizationMode_ ) VULKAN_HPP_NOEXCEPT + { + lineRasterizationMode = lineRasterizationMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfo & + setStippledLineEnable( VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable_ ) VULKAN_HPP_NOEXCEPT + { + stippledLineEnable = stippledLineEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfo & setLineStippleFactor( uint32_t lineStippleFactor_ ) VULKAN_HPP_NOEXCEPT + { + lineStippleFactor = lineStippleFactor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfo & setLineStipplePattern( uint16_t lineStipplePattern_ ) VULKAN_HPP_NOEXCEPT + { + lineStipplePattern = lineStipplePattern_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationLineStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationLineStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationLineStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationLineStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, lineRasterizationMode, stippledLineEnable, lineStippleFactor, lineStipplePattern ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationLineStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineRasterizationLineStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( lineRasterizationMode == rhs.lineRasterizationMode ) && + ( stippledLineEnable == rhs.stippledLineEnable ) && ( lineStippleFactor == rhs.lineStippleFactor ) && + ( lineStipplePattern == rhs.lineStipplePattern ); +# endif + } + + bool operator!=( PipelineRasterizationLineStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationLineStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::LineRasterizationMode lineRasterizationMode = VULKAN_HPP_NAMESPACE::LineRasterizationMode::eDefault; + VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable = {}; + uint32_t lineStippleFactor = {}; + uint16_t lineStipplePattern = {}; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationLineStateCreateInfo; + }; + + using PipelineRasterizationLineStateCreateInfoEXT = PipelineRasterizationLineStateCreateInfo; + using PipelineRasterizationLineStateCreateInfoKHR = PipelineRasterizationLineStateCreateInfo; + + // wrapper struct for struct VkPipelineRasterizationProvokingVertexStateCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.html + struct PipelineRasterizationProvokingVertexStateCreateInfoEXT + { + using NativeType = VkPipelineRasterizationProvokingVertexStateCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationProvokingVertexStateCreateInfoEXT( + VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode_ = VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT::eFirstVertex, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , provokingVertexMode{ provokingVertexMode_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineRasterizationProvokingVertexStateCreateInfoEXT( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationProvokingVertexStateCreateInfoEXT( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationProvokingVertexStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationProvokingVertexStateCreateInfoEXT & + operator=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationProvokingVertexStateCreateInfoEXT & + operator=( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT & + setProvokingVertexMode( VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode_ ) VULKAN_HPP_NOEXCEPT + { + provokingVertexMode = provokingVertexMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, provokingVertexMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexMode == rhs.provokingVertexMode ); +# endif + } + + bool operator!=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode = VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT::eFirstVertex; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationProvokingVertexStateCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineRasterizationStateRasterizationOrderAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationStateRasterizationOrderAMD.html + struct PipelineRasterizationStateRasterizationOrderAMD + { + using NativeType = VkPipelineRasterizationStateRasterizationOrderAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationStateRasterizationOrderAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationStateRasterizationOrderAMD( + VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder_ = VULKAN_HPP_NAMESPACE::RasterizationOrderAMD::eStrict, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , rasterizationOrder{ rasterizationOrder_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineRasterizationStateRasterizationOrderAMD( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationStateRasterizationOrderAMD( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationStateRasterizationOrderAMD( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationStateRasterizationOrderAMD & operator=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationStateRasterizationOrderAMD & operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD & + setRasterizationOrder( VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationOrder = rasterizationOrder_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationStateRasterizationOrderAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateRasterizationOrderAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateRasterizationOrderAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateRasterizationOrderAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, rasterizationOrder ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationStateRasterizationOrderAMD const & ) const = default; +#else + bool operator==( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rasterizationOrder == rhs.rasterizationOrder ); +# endif + } + + bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationStateRasterizationOrderAMD; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder = VULKAN_HPP_NAMESPACE::RasterizationOrderAMD::eStrict; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationStateRasterizationOrderAMD; + }; + + // wrapper struct for struct VkPipelineRasterizationStateStreamCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRasterizationStateStreamCreateInfoEXT.html + struct PipelineRasterizationStateStreamCreateInfoEXT + { + using NativeType = VkPipelineRasterizationStateStreamCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRasterizationStateStreamCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRasterizationStateStreamCreateInfoEXT( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags_ = {}, + uint32_t rasterizationStream_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , rasterizationStream{ rasterizationStream_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineRasterizationStateStreamCreateInfoEXT( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRasterizationStateStreamCreateInfoEXT( VkPipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRasterizationStateStreamCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRasterizationStateStreamCreateInfoEXT & operator=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRasterizationStateStreamCreateInfoEXT & operator=( VkPipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT & + setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT & setRasterizationStream( uint32_t rasterizationStream_ ) VULKAN_HPP_NOEXCEPT + { + rasterizationStream = rasterizationStream_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRasterizationStateStreamCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateStreamCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateStreamCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRasterizationStateStreamCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, rasterizationStream ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRasterizationStateStreamCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rasterizationStream == rhs.rasterizationStream ); +# endif + } + + bool operator!=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRasterizationStateStreamCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags = {}; + uint32_t rasterizationStream = {}; + }; + + template <> + struct CppType + { + using Type = PipelineRasterizationStateStreamCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineRenderingCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRenderingCreateInfo.html + struct PipelineRenderingCreateInfo + { + using NativeType = VkPipelineRenderingCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRenderingCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRenderingCreateInfo( uint32_t viewMask_ = {}, + uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {}, + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , viewMask{ viewMask_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachmentFormats{ pColorAttachmentFormats_ } + , depthAttachmentFormat{ depthAttachmentFormat_ } + , stencilAttachmentFormat{ stencilAttachmentFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineRenderingCreateInfo( PipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRenderingCreateInfo( VkPipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRenderingCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineRenderingCreateInfo( uint32_t viewMask_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_, + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , viewMask( viewMask_ ) + , colorAttachmentCount( static_cast( colorAttachmentFormats_.size() ) ) + , pColorAttachmentFormats( colorAttachmentFormats_.data() ) + , depthAttachmentFormat( depthAttachmentFormat_ ) + , stencilAttachmentFormat( stencilAttachmentFormat_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineRenderingCreateInfo & operator=( PipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRenderingCreateInfo & operator=( VkPipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT + { + viewMask = viewMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & + setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachmentFormats = pColorAttachmentFormats_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineRenderingCreateInfo & setColorAttachmentFormats( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachmentFormats_.size() ); + pColorAttachmentFormats = colorAttachmentFormats_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT + { + depthAttachmentFormat = depthAttachmentFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & + setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT + { + stencilAttachmentFormat = stencilAttachmentFormat_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRenderingCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRenderingCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRenderingCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRenderingCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, viewMask, colorAttachmentCount, pColorAttachmentFormats, depthAttachmentFormat, stencilAttachmentFormat ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRenderingCreateInfo const & ) const = default; +#else + bool operator==( PipelineRenderingCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewMask == rhs.viewMask ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) && ( depthAttachmentFormat == rhs.depthAttachmentFormat ) && + ( stencilAttachmentFormat == rhs.stencilAttachmentFormat ); +# endif + } + + bool operator!=( PipelineRenderingCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRenderingCreateInfo; + const void * pNext = {}; + uint32_t viewMask = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {}; + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = PipelineRenderingCreateInfo; + }; + + using PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfo; + + // wrapper struct for struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.html + struct PipelineRepresentativeFragmentTestStateCreateInfoNV + { + using NativeType = VkPipelineRepresentativeFragmentTestStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRepresentativeFragmentTestStateCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , representativeFragmentTestEnable{ representativeFragmentTestEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineRepresentativeFragmentTestStateCreateInfoNV( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRepresentativeFragmentTestStateCreateInfoNV( VkPipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRepresentativeFragmentTestStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRepresentativeFragmentTestStateCreateInfoNV & + operator=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRepresentativeFragmentTestStateCreateInfoNV & operator=( VkPipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV & + setRepresentativeFragmentTestEnable( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable_ ) VULKAN_HPP_NOEXCEPT + { + representativeFragmentTestEnable = representativeFragmentTestEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, representativeFragmentTestEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRepresentativeFragmentTestStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( representativeFragmentTestEnable == rhs.representativeFragmentTestEnable ); +# endif + } + + bool operator!=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable = {}; + }; + + template <> + struct CppType + { + using Type = PipelineRepresentativeFragmentTestStateCreateInfoNV; + }; + + // wrapper struct for struct VkPipelineRobustnessCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineRobustnessCreateInfo.html + struct PipelineRobustnessCreateInfo + { + using NativeType = VkPipelineRobustnessCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRobustnessCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineRobustnessCreateInfo( + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior storageBuffers_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior uniformBuffers_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior vertexInputs_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault, + VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior images_ = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior::eDeviceDefault, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , storageBuffers{ storageBuffers_ } + , uniformBuffers{ uniformBuffers_ } + , vertexInputs{ vertexInputs_ } + , images{ images_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineRobustnessCreateInfo( PipelineRobustnessCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineRobustnessCreateInfo( VkPipelineRobustnessCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineRobustnessCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineRobustnessCreateInfo & operator=( PipelineRobustnessCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineRobustnessCreateInfo & operator=( VkPipelineRobustnessCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfo & + setStorageBuffers( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior storageBuffers_ ) VULKAN_HPP_NOEXCEPT + { + storageBuffers = storageBuffers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfo & + setUniformBuffers( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior uniformBuffers_ ) VULKAN_HPP_NOEXCEPT + { + uniformBuffers = uniformBuffers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfo & + setVertexInputs( VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior vertexInputs_ ) VULKAN_HPP_NOEXCEPT + { + vertexInputs = vertexInputs_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineRobustnessCreateInfo & setImages( VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior images_ ) VULKAN_HPP_NOEXCEPT + { + images = images_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineRobustnessCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRobustnessCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineRobustnessCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineRobustnessCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, storageBuffers, uniformBuffers, vertexInputs, images ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineRobustnessCreateInfo const & ) const = default; +#else + bool operator==( PipelineRobustnessCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( storageBuffers == rhs.storageBuffers ) && ( uniformBuffers == rhs.uniformBuffers ) && + ( vertexInputs == rhs.vertexInputs ) && ( images == rhs.images ); +# endif + } + + bool operator!=( PipelineRobustnessCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRobustnessCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior storageBuffers = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior uniformBuffers = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior vertexInputs = VULKAN_HPP_NAMESPACE::PipelineRobustnessBufferBehavior::eDeviceDefault; + VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior images = VULKAN_HPP_NAMESPACE::PipelineRobustnessImageBehavior::eDeviceDefault; + }; + + template <> + struct CppType + { + using Type = PipelineRobustnessCreateInfo; + }; + + using PipelineRobustnessCreateInfoEXT = PipelineRobustnessCreateInfo; + + // wrapper struct for struct VkPipelineSampleLocationsStateCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineSampleLocationsStateCreateInfoEXT.html + struct PipelineSampleLocationsStateCreateInfoEXT + { + using NativeType = VkPipelineSampleLocationsStateCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineSampleLocationsStateCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineSampleLocationsStateCreateInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable_ = {}, + VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sampleLocationsEnable{ sampleLocationsEnable_ } + , sampleLocationsInfo{ sampleLocationsInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineSampleLocationsStateCreateInfoEXT( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineSampleLocationsStateCreateInfoEXT( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineSampleLocationsStateCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineSampleLocationsStateCreateInfoEXT & operator=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineSampleLocationsStateCreateInfoEXT & operator=( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & + setSampleLocationsEnable( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsEnable = sampleLocationsEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & + setSampleLocationsInfo( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsInfo = sampleLocationsInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineSampleLocationsStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineSampleLocationsStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineSampleLocationsStateCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineSampleLocationsStateCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sampleLocationsEnable, sampleLocationsInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineSampleLocationsStateCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleLocationsEnable == rhs.sampleLocationsEnable ) && + ( sampleLocationsInfo == rhs.sampleLocationsInfo ); +# endif + } + + bool operator!=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineSampleLocationsStateCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable = {}; + VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {}; + }; + + template <> + struct CppType + { + using Type = PipelineSampleLocationsStateCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineShaderStageModuleIdentifierCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageModuleIdentifierCreateInfoEXT.html + struct PipelineShaderStageModuleIdentifierCreateInfoEXT + { + using NativeType = VkPipelineShaderStageModuleIdentifierCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageModuleIdentifierCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineShaderStageModuleIdentifierCreateInfoEXT( uint32_t identifierSize_ = {}, + const uint8_t * pIdentifier_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , identifierSize{ identifierSize_ } + , pIdentifier{ pIdentifier_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineShaderStageModuleIdentifierCreateInfoEXT( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineShaderStageModuleIdentifierCreateInfoEXT( VkPipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineShaderStageModuleIdentifierCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineShaderStageModuleIdentifierCreateInfoEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & identifier_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), identifierSize( static_cast( identifier_.size() ) ), pIdentifier( identifier_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineShaderStageModuleIdentifierCreateInfoEXT & operator=( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineShaderStageModuleIdentifierCreateInfoEXT & operator=( VkPipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageModuleIdentifierCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageModuleIdentifierCreateInfoEXT & setIdentifierSize( uint32_t identifierSize_ ) VULKAN_HPP_NOEXCEPT + { + identifierSize = identifierSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageModuleIdentifierCreateInfoEXT & setPIdentifier( const uint8_t * pIdentifier_ ) VULKAN_HPP_NOEXCEPT + { + pIdentifier = pIdentifier_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineShaderStageModuleIdentifierCreateInfoEXT & + setIdentifier( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & identifier_ ) VULKAN_HPP_NOEXCEPT + { + identifierSize = static_cast( identifier_.size() ); + pIdentifier = identifier_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineShaderStageModuleIdentifierCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageModuleIdentifierCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageModuleIdentifierCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineShaderStageModuleIdentifierCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, identifierSize, pIdentifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineShaderStageModuleIdentifierCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( identifierSize == rhs.identifierSize ) && ( pIdentifier == rhs.pIdentifier ); +# endif + } + + bool operator!=( PipelineShaderStageModuleIdentifierCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageModuleIdentifierCreateInfoEXT; + const void * pNext = {}; + uint32_t identifierSize = {}; + const uint8_t * pIdentifier = {}; + }; + + template <> + struct CppType + { + using Type = PipelineShaderStageModuleIdentifierCreateInfoEXT; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkPipelineShaderStageNodeCreateInfoAMDX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageNodeCreateInfoAMDX.html + struct PipelineShaderStageNodeCreateInfoAMDX + { + using NativeType = VkPipelineShaderStageNodeCreateInfoAMDX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageNodeCreateInfoAMDX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PipelineShaderStageNodeCreateInfoAMDX( const char * pName_ = {}, uint32_t index_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pName{ pName_ } + , index{ index_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineShaderStageNodeCreateInfoAMDX( PipelineShaderStageNodeCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineShaderStageNodeCreateInfoAMDX( VkPipelineShaderStageNodeCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineShaderStageNodeCreateInfoAMDX( *reinterpret_cast( &rhs ) ) + { + } + + PipelineShaderStageNodeCreateInfoAMDX & operator=( PipelineShaderStageNodeCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineShaderStageNodeCreateInfoAMDX & operator=( VkPipelineShaderStageNodeCreateInfoAMDX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageNodeCreateInfoAMDX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageNodeCreateInfoAMDX & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT + { + pName = pName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageNodeCreateInfoAMDX & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT + { + index = index_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineShaderStageNodeCreateInfoAMDX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageNodeCreateInfoAMDX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageNodeCreateInfoAMDX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineShaderStageNodeCreateInfoAMDX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pName, index ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PipelineShaderStageNodeCreateInfoAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( pName != rhs.pName ) + if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = index <=> rhs.index; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( PipelineShaderStageNodeCreateInfoAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ) && ( index == rhs.index ); + } + + bool operator!=( PipelineShaderStageNodeCreateInfoAMDX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageNodeCreateInfoAMDX; + const void * pNext = {}; + const char * pName = {}; + uint32_t index = {}; + }; + + template <> + struct CppType + { + using Type = PipelineShaderStageNodeCreateInfoAMDX; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineShaderStageRequiredSubgroupSizeCreateInfo.html + struct PipelineShaderStageRequiredSubgroupSizeCreateInfo + { + using NativeType = VkPipelineShaderStageRequiredSubgroupSizeCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineShaderStageRequiredSubgroupSizeCreateInfo( uint32_t requiredSubgroupSize_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , requiredSubgroupSize{ requiredSubgroupSize_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineShaderStageRequiredSubgroupSizeCreateInfo( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineShaderStageRequiredSubgroupSizeCreateInfo( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineShaderStageRequiredSubgroupSizeCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineShaderStageRequiredSubgroupSizeCreateInfo & + operator=( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineShaderStageRequiredSubgroupSizeCreateInfo & operator=( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, requiredSubgroupSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & ) const = default; +#else + bool operator==( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( requiredSubgroupSize == rhs.requiredSubgroupSize ); +# endif + } + + bool operator!=( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo; + void * pNext = {}; + uint32_t requiredSubgroupSize = {}; + }; + + template <> + struct CppType + { + using Type = PipelineShaderStageRequiredSubgroupSizeCreateInfo; + }; + + using PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo; + using ShaderRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo; + + // wrapper struct for struct VkPipelineTessellationDomainOriginStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineTessellationDomainOriginStateCreateInfo.html + struct PipelineTessellationDomainOriginStateCreateInfo + { + using NativeType = VkPipelineTessellationDomainOriginStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineTessellationDomainOriginStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineTessellationDomainOriginStateCreateInfo( + VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin_ = VULKAN_HPP_NAMESPACE::TessellationDomainOrigin::eUpperLeft, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , domainOrigin{ domainOrigin_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineTessellationDomainOriginStateCreateInfo( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineTessellationDomainOriginStateCreateInfo( VkPipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineTessellationDomainOriginStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PipelineTessellationDomainOriginStateCreateInfo & operator=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineTessellationDomainOriginStateCreateInfo & operator=( VkPipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo & + setDomainOrigin( VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin_ ) VULKAN_HPP_NOEXCEPT + { + domainOrigin = domainOrigin_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineTessellationDomainOriginStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineTessellationDomainOriginStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineTessellationDomainOriginStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineTessellationDomainOriginStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, domainOrigin ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineTessellationDomainOriginStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( domainOrigin == rhs.domainOrigin ); +# endif + } + + bool operator!=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineTessellationDomainOriginStateCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin = VULKAN_HPP_NAMESPACE::TessellationDomainOrigin::eUpperLeft; + }; + + template <> + struct CppType + { + using Type = PipelineTessellationDomainOriginStateCreateInfo; + }; + + using PipelineTessellationDomainOriginStateCreateInfoKHR = PipelineTessellationDomainOriginStateCreateInfo; + + // wrapper struct for struct VkVertexInputBindingDivisorDescription, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVertexInputBindingDivisorDescription.html + struct VertexInputBindingDivisorDescription + { + using NativeType = VkVertexInputBindingDivisorDescription; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VertexInputBindingDivisorDescription( uint32_t binding_ = {}, uint32_t divisor_ = {} ) VULKAN_HPP_NOEXCEPT + : binding{ binding_ } + , divisor{ divisor_ } + { + } + + VULKAN_HPP_CONSTEXPR VertexInputBindingDivisorDescription( VertexInputBindingDivisorDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VertexInputBindingDivisorDescription( VkVertexInputBindingDivisorDescription const & rhs ) VULKAN_HPP_NOEXCEPT + : VertexInputBindingDivisorDescription( *reinterpret_cast( &rhs ) ) + { + } + + VertexInputBindingDivisorDescription & operator=( VertexInputBindingDivisorDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VertexInputBindingDivisorDescription & operator=( VkVertexInputBindingDivisorDescription const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescription & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT + { + divisor = divisor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVertexInputBindingDivisorDescription const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputBindingDivisorDescription &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputBindingDivisorDescription const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVertexInputBindingDivisorDescription *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( binding, divisor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VertexInputBindingDivisorDescription const & ) const = default; +#else + bool operator==( VertexInputBindingDivisorDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( binding == rhs.binding ) && ( divisor == rhs.divisor ); +# endif + } + + bool operator!=( VertexInputBindingDivisorDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t binding = {}; + uint32_t divisor = {}; + }; + + using VertexInputBindingDivisorDescriptionEXT = VertexInputBindingDivisorDescription; + using VertexInputBindingDivisorDescriptionKHR = VertexInputBindingDivisorDescription; + + // wrapper struct for struct VkPipelineVertexInputDivisorStateCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineVertexInputDivisorStateCreateInfo.html + struct PipelineVertexInputDivisorStateCreateInfo + { + using NativeType = VkPipelineVertexInputDivisorStateCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineVertexInputDivisorStateCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + PipelineVertexInputDivisorStateCreateInfo( uint32_t vertexBindingDivisorCount_ = {}, + const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescription * pVertexBindingDivisors_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , vertexBindingDivisorCount{ vertexBindingDivisorCount_ } + , pVertexBindingDivisors{ pVertexBindingDivisors_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineVertexInputDivisorStateCreateInfo( PipelineVertexInputDivisorStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineVertexInputDivisorStateCreateInfo( VkPipelineVertexInputDivisorStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineVertexInputDivisorStateCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineVertexInputDivisorStateCreateInfo( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDivisors_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , vertexBindingDivisorCount( static_cast( vertexBindingDivisors_.size() ) ) + , pVertexBindingDivisors( vertexBindingDivisors_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineVertexInputDivisorStateCreateInfo & operator=( PipelineVertexInputDivisorStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineVertexInputDivisorStateCreateInfo & operator=( VkPipelineVertexInputDivisorStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfo & setVertexBindingDivisorCount( uint32_t vertexBindingDivisorCount_ ) VULKAN_HPP_NOEXCEPT + { + vertexBindingDivisorCount = vertexBindingDivisorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfo & + setPVertexBindingDivisors( const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescription * pVertexBindingDivisors_ ) VULKAN_HPP_NOEXCEPT + { + pVertexBindingDivisors = pVertexBindingDivisors_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineVertexInputDivisorStateCreateInfo & setVertexBindingDivisors( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & vertexBindingDivisors_ ) + VULKAN_HPP_NOEXCEPT + { + vertexBindingDivisorCount = static_cast( vertexBindingDivisors_.size() ); + pVertexBindingDivisors = vertexBindingDivisors_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineVertexInputDivisorStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineVertexInputDivisorStateCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineVertexInputDivisorStateCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineVertexInputDivisorStateCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, vertexBindingDivisorCount, pVertexBindingDivisors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineVertexInputDivisorStateCreateInfo const & ) const = default; +#else + bool operator==( PipelineVertexInputDivisorStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexBindingDivisorCount == rhs.vertexBindingDivisorCount ) && + ( pVertexBindingDivisors == rhs.pVertexBindingDivisors ); +# endif + } + + bool operator!=( PipelineVertexInputDivisorStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineVertexInputDivisorStateCreateInfo; + const void * pNext = {}; + uint32_t vertexBindingDivisorCount = {}; + const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescription * pVertexBindingDivisors = {}; + }; + + template <> + struct CppType + { + using Type = PipelineVertexInputDivisorStateCreateInfo; + }; + + using PipelineVertexInputDivisorStateCreateInfoEXT = PipelineVertexInputDivisorStateCreateInfo; + using PipelineVertexInputDivisorStateCreateInfoKHR = PipelineVertexInputDivisorStateCreateInfo; + + // wrapper struct for struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.html + struct PipelineViewportCoarseSampleOrderStateCreateInfoNV + { + using NativeType = VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportCoarseSampleOrderStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_ = VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV::eDefault, + uint32_t customSampleOrderCount_ = {}, + const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sampleOrderType{ sampleOrderType_ } + , customSampleOrderCount{ customSampleOrderCount_ } + , pCustomSampleOrders{ pCustomSampleOrders_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineViewportCoarseSampleOrderStateCreateInfoNV( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportCoarseSampleOrderStateCreateInfoNV( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportCoarseSampleOrderStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportCoarseSampleOrderStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & customSampleOrders_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , sampleOrderType( sampleOrderType_ ) + , customSampleOrderCount( static_cast( customSampleOrders_.size() ) ) + , pCustomSampleOrders( customSampleOrders_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineViewportCoarseSampleOrderStateCreateInfoNV & + operator=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportCoarseSampleOrderStateCreateInfoNV & operator=( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & + setSampleOrderType( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_ ) VULKAN_HPP_NOEXCEPT + { + sampleOrderType = sampleOrderType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & + setCustomSampleOrderCount( uint32_t customSampleOrderCount_ ) VULKAN_HPP_NOEXCEPT + { + customSampleOrderCount = customSampleOrderCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & + setPCustomSampleOrders( const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders_ ) VULKAN_HPP_NOEXCEPT + { + pCustomSampleOrders = pCustomSampleOrders_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportCoarseSampleOrderStateCreateInfoNV & setCustomSampleOrders( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & customSampleOrders_ ) VULKAN_HPP_NOEXCEPT + { + customSampleOrderCount = static_cast( customSampleOrders_.size() ); + pCustomSampleOrders = customSampleOrders_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sampleOrderType, customSampleOrderCount, pCustomSampleOrders ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleOrderType == rhs.sampleOrderType ) && + ( customSampleOrderCount == rhs.customSampleOrderCount ) && ( pCustomSampleOrders == rhs.pCustomSampleOrders ); +# endif + } + + bool operator!=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType = VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV::eDefault; + uint32_t customSampleOrderCount = {}; + const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportCoarseSampleOrderStateCreateInfoNV; + }; + + // wrapper struct for struct VkPipelineViewportDepthClampControlCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportDepthClampControlCreateInfoEXT.html + struct PipelineViewportDepthClampControlCreateInfoEXT + { + using NativeType = VkPipelineViewportDepthClampControlCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportDepthClampControlCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportDepthClampControlCreateInfoEXT( + VULKAN_HPP_NAMESPACE::DepthClampModeEXT depthClampMode_ = VULKAN_HPP_NAMESPACE::DepthClampModeEXT::eViewportRange, + const VULKAN_HPP_NAMESPACE::DepthClampRangeEXT * pDepthClampRange_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthClampMode{ depthClampMode_ } + , pDepthClampRange{ pDepthClampRange_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineViewportDepthClampControlCreateInfoEXT( PipelineViewportDepthClampControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportDepthClampControlCreateInfoEXT( VkPipelineViewportDepthClampControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportDepthClampControlCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineViewportDepthClampControlCreateInfoEXT & operator=( PipelineViewportDepthClampControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportDepthClampControlCreateInfoEXT & operator=( VkPipelineViewportDepthClampControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClampControlCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClampControlCreateInfoEXT & + setDepthClampMode( VULKAN_HPP_NAMESPACE::DepthClampModeEXT depthClampMode_ ) VULKAN_HPP_NOEXCEPT + { + depthClampMode = depthClampMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClampControlCreateInfoEXT & + setPDepthClampRange( const VULKAN_HPP_NAMESPACE::DepthClampRangeEXT * pDepthClampRange_ ) VULKAN_HPP_NOEXCEPT + { + pDepthClampRange = pDepthClampRange_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportDepthClampControlCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportDepthClampControlCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportDepthClampControlCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportDepthClampControlCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthClampMode, pDepthClampRange ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportDepthClampControlCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineViewportDepthClampControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClampMode == rhs.depthClampMode ) && ( pDepthClampRange == rhs.pDepthClampRange ); +# endif + } + + bool operator!=( PipelineViewportDepthClampControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportDepthClampControlCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DepthClampModeEXT depthClampMode = VULKAN_HPP_NAMESPACE::DepthClampModeEXT::eViewportRange; + const VULKAN_HPP_NAMESPACE::DepthClampRangeEXT * pDepthClampRange = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportDepthClampControlCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineViewportDepthClipControlCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportDepthClipControlCreateInfoEXT.html + struct PipelineViewportDepthClipControlCreateInfoEXT + { + using NativeType = VkPipelineViewportDepthClipControlCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportDepthClipControlCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportDepthClipControlCreateInfoEXT( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , negativeOneToOne{ negativeOneToOne_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineViewportDepthClipControlCreateInfoEXT( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportDepthClipControlCreateInfoEXT( VkPipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportDepthClipControlCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + PipelineViewportDepthClipControlCreateInfoEXT & operator=( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportDepthClipControlCreateInfoEXT & operator=( VkPipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClipControlCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClipControlCreateInfoEXT & + setNegativeOneToOne( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne_ ) VULKAN_HPP_NOEXCEPT + { + negativeOneToOne = negativeOneToOne_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportDepthClipControlCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportDepthClipControlCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportDepthClipControlCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportDepthClipControlCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, negativeOneToOne ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportDepthClipControlCreateInfoEXT const & ) const = default; +#else + bool operator==( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( negativeOneToOne == rhs.negativeOneToOne ); +# endif + } + + bool operator!=( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportDepthClipControlCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportDepthClipControlCreateInfoEXT; + }; + + // wrapper struct for struct VkPipelineViewportExclusiveScissorStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportExclusiveScissorStateCreateInfoNV.html + struct PipelineViewportExclusiveScissorStateCreateInfoNV + { + using NativeType = VkPipelineViewportExclusiveScissorStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportExclusiveScissorStateCreateInfoNV( uint32_t exclusiveScissorCount_ = {}, + const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , exclusiveScissorCount{ exclusiveScissorCount_ } + , pExclusiveScissors{ pExclusiveScissors_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineViewportExclusiveScissorStateCreateInfoNV( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportExclusiveScissorStateCreateInfoNV( VkPipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportExclusiveScissorStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportExclusiveScissorStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & exclusiveScissors_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), exclusiveScissorCount( static_cast( exclusiveScissors_.size() ) ), pExclusiveScissors( exclusiveScissors_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineViewportExclusiveScissorStateCreateInfoNV & + operator=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportExclusiveScissorStateCreateInfoNV & operator=( VkPipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV & setExclusiveScissorCount( uint32_t exclusiveScissorCount_ ) VULKAN_HPP_NOEXCEPT + { + exclusiveScissorCount = exclusiveScissorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV & + setPExclusiveScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors_ ) VULKAN_HPP_NOEXCEPT + { + pExclusiveScissors = pExclusiveScissors_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportExclusiveScissorStateCreateInfoNV & + setExclusiveScissors( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & exclusiveScissors_ ) VULKAN_HPP_NOEXCEPT + { + exclusiveScissorCount = static_cast( exclusiveScissors_.size() ); + pExclusiveScissors = exclusiveScissors_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportExclusiveScissorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportExclusiveScissorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportExclusiveScissorStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportExclusiveScissorStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, exclusiveScissorCount, pExclusiveScissors ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportExclusiveScissorStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exclusiveScissorCount == rhs.exclusiveScissorCount ) && + ( pExclusiveScissors == rhs.pExclusiveScissors ); +# endif + } + + bool operator!=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV; + const void * pNext = {}; + uint32_t exclusiveScissorCount = {}; + const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportExclusiveScissorStateCreateInfoNV; + }; + + // wrapper struct for struct VkShadingRatePaletteNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShadingRatePaletteNV.html + struct ShadingRatePaletteNV + { + using NativeType = VkShadingRatePaletteNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ShadingRatePaletteNV( uint32_t shadingRatePaletteEntryCount_ = {}, + const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries_ = {} ) VULKAN_HPP_NOEXCEPT + : shadingRatePaletteEntryCount{ shadingRatePaletteEntryCount_ } + , pShadingRatePaletteEntries{ pShadingRatePaletteEntries_ } + { + } + + VULKAN_HPP_CONSTEXPR ShadingRatePaletteNV( ShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShadingRatePaletteNV( VkShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT + : ShadingRatePaletteNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ShadingRatePaletteNV( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePaletteEntries_ ) + : shadingRatePaletteEntryCount( static_cast( shadingRatePaletteEntries_.size() ) ) + , pShadingRatePaletteEntries( shadingRatePaletteEntries_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ShadingRatePaletteNV & operator=( ShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShadingRatePaletteNV & operator=( VkShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV & setShadingRatePaletteEntryCount( uint32_t shadingRatePaletteEntryCount_ ) VULKAN_HPP_NOEXCEPT + { + shadingRatePaletteEntryCount = shadingRatePaletteEntryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV & + setPShadingRatePaletteEntries( const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries_ ) VULKAN_HPP_NOEXCEPT + { + pShadingRatePaletteEntries = pShadingRatePaletteEntries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ShadingRatePaletteNV & setShadingRatePaletteEntries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePaletteEntries_ ) + VULKAN_HPP_NOEXCEPT + { + shadingRatePaletteEntryCount = static_cast( shadingRatePaletteEntries_.size() ); + pShadingRatePaletteEntries = shadingRatePaletteEntries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkShadingRatePaletteNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShadingRatePaletteNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShadingRatePaletteNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShadingRatePaletteNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( shadingRatePaletteEntryCount, pShadingRatePaletteEntries ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShadingRatePaletteNV const & ) const = default; +#else + bool operator==( ShadingRatePaletteNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( shadingRatePaletteEntryCount == rhs.shadingRatePaletteEntryCount ) && ( pShadingRatePaletteEntries == rhs.pShadingRatePaletteEntries ); +# endif + } + + bool operator!=( ShadingRatePaletteNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t shadingRatePaletteEntryCount = {}; + const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries = {}; + }; + + // wrapper struct for struct VkPipelineViewportShadingRateImageStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportShadingRateImageStateCreateInfoNV.html + struct PipelineViewportShadingRateImageStateCreateInfoNV + { + using NativeType = VkPipelineViewportShadingRateImageStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportShadingRateImageStateCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_ = {}, + uint32_t viewportCount_ = {}, + const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , shadingRateImageEnable{ shadingRateImageEnable_ } + , viewportCount{ viewportCount_ } + , pShadingRatePalettes{ pShadingRatePalettes_ } + { + } + + VULKAN_HPP_CONSTEXPR + PipelineViewportShadingRateImageStateCreateInfoNV( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportShadingRateImageStateCreateInfoNV( VkPipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportShadingRateImageStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportShadingRateImageStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePalettes_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , shadingRateImageEnable( shadingRateImageEnable_ ) + , viewportCount( static_cast( shadingRatePalettes_.size() ) ) + , pShadingRatePalettes( shadingRatePalettes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineViewportShadingRateImageStateCreateInfoNV & + operator=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportShadingRateImageStateCreateInfoNV & operator=( VkPipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & + setShadingRateImageEnable( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_ ) VULKAN_HPP_NOEXCEPT + { + shadingRateImageEnable = shadingRateImageEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = viewportCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & + setPShadingRatePalettes( const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes_ ) VULKAN_HPP_NOEXCEPT + { + pShadingRatePalettes = pShadingRatePalettes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportShadingRateImageStateCreateInfoNV & setShadingRatePalettes( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & shadingRatePalettes_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = static_cast( shadingRatePalettes_.size() ); + pShadingRatePalettes = shadingRatePalettes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportShadingRateImageStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportShadingRateImageStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportShadingRateImageStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportShadingRateImageStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, shadingRateImageEnable, viewportCount, pShadingRatePalettes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportShadingRateImageStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateImageEnable == rhs.shadingRateImageEnable ) && + ( viewportCount == rhs.viewportCount ) && ( pShadingRatePalettes == rhs.pShadingRatePalettes ); +# endif + } + + bool operator!=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable = {}; + uint32_t viewportCount = {}; + const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportShadingRateImageStateCreateInfoNV; + }; + + // wrapper struct for struct VkViewportSwizzleNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkViewportSwizzleNV.html + struct ViewportSwizzleNV + { + using NativeType = VkViewportSwizzleNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ViewportSwizzleNV( + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX, + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX, + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX, + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w_ = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX ) VULKAN_HPP_NOEXCEPT + : x{ x_ } + , y{ y_ } + , z{ z_ } + , w{ w_ } + { + } + + VULKAN_HPP_CONSTEXPR ViewportSwizzleNV( ViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ViewportSwizzleNV( VkViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT : ViewportSwizzleNV( *reinterpret_cast( &rhs ) ) {} + + ViewportSwizzleNV & operator=( ViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ViewportSwizzleNV & operator=( VkViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setX( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ ) VULKAN_HPP_NOEXCEPT + { + x = x_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setY( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y_ ) VULKAN_HPP_NOEXCEPT + { + y = y_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setZ( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z_ ) VULKAN_HPP_NOEXCEPT + { + z = z_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV & setW( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w_ ) VULKAN_HPP_NOEXCEPT + { + w = w_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkViewportSwizzleNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViewportSwizzleNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViewportSwizzleNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkViewportSwizzleNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( x, y, z, w ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ViewportSwizzleNV const & ) const = default; +#else + bool operator==( ViewportSwizzleNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ) && ( w == rhs.w ); +# endif + } + + bool operator!=( ViewportSwizzleNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; + VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX; + }; + + // wrapper struct for struct VkPipelineViewportSwizzleStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportSwizzleStateCreateInfoNV.html + struct PipelineViewportSwizzleStateCreateInfoNV + { + using NativeType = VkPipelineViewportSwizzleStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportSwizzleStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportSwizzleStateCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_ = {}, + uint32_t viewportCount_ = {}, + const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , viewportCount{ viewportCount_ } + , pViewportSwizzles{ pViewportSwizzles_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineViewportSwizzleStateCreateInfoNV( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportSwizzleStateCreateInfoNV( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportSwizzleStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportSwizzleStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportSwizzles_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), viewportCount( static_cast( viewportSwizzles_.size() ) ), pViewportSwizzles( viewportSwizzles_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineViewportSwizzleStateCreateInfoNV & operator=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportSwizzleStateCreateInfoNV & operator=( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & + setFlags( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = viewportCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV & + setPViewportSwizzles( const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles_ ) VULKAN_HPP_NOEXCEPT + { + pViewportSwizzles = pViewportSwizzles_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportSwizzleStateCreateInfoNV & setViewportSwizzles( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportSwizzles_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = static_cast( viewportSwizzles_.size() ); + pViewportSwizzles = viewportSwizzles_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportSwizzleStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportSwizzleStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportSwizzleStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportSwizzleStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, viewportCount, pViewportSwizzles ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportSwizzleStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( viewportCount == rhs.viewportCount ) && + ( pViewportSwizzles == rhs.pViewportSwizzles ); +# endif + } + + bool operator!=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportSwizzleStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags = {}; + uint32_t viewportCount = {}; + const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportSwizzleStateCreateInfoNV; + }; + + // wrapper struct for struct VkViewportWScalingNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkViewportWScalingNV.html + struct ViewportWScalingNV + { + using NativeType = VkViewportWScalingNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ViewportWScalingNV( float xcoeff_ = {}, float ycoeff_ = {} ) VULKAN_HPP_NOEXCEPT + : xcoeff{ xcoeff_ } + , ycoeff{ ycoeff_ } + { + } + + VULKAN_HPP_CONSTEXPR ViewportWScalingNV( ViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ViewportWScalingNV( VkViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT : ViewportWScalingNV( *reinterpret_cast( &rhs ) ) {} + + ViewportWScalingNV & operator=( ViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ViewportWScalingNV & operator=( VkViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV & setXcoeff( float xcoeff_ ) VULKAN_HPP_NOEXCEPT + { + xcoeff = xcoeff_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV & setYcoeff( float ycoeff_ ) VULKAN_HPP_NOEXCEPT + { + ycoeff = ycoeff_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkViewportWScalingNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViewportWScalingNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViewportWScalingNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkViewportWScalingNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( xcoeff, ycoeff ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ViewportWScalingNV const & ) const = default; +#else + bool operator==( ViewportWScalingNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( xcoeff == rhs.xcoeff ) && ( ycoeff == rhs.ycoeff ); +# endif + } + + bool operator!=( ViewportWScalingNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + float xcoeff = {}; + float ycoeff = {}; + }; + + // wrapper struct for struct VkPipelineViewportWScalingStateCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPipelineViewportWScalingStateCreateInfoNV.html + struct PipelineViewportWScalingStateCreateInfoNV + { + using NativeType = VkPipelineViewportWScalingStateCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportWScalingStateCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PipelineViewportWScalingStateCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_ = {}, + uint32_t viewportCount_ = {}, + const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , viewportWScalingEnable{ viewportWScalingEnable_ } + , viewportCount{ viewportCount_ } + , pViewportWScalings{ pViewportWScalings_ } + { + } + + VULKAN_HPP_CONSTEXPR PipelineViewportWScalingStateCreateInfoNV( PipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PipelineViewportWScalingStateCreateInfoNV( VkPipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : PipelineViewportWScalingStateCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportWScalingStateCreateInfoNV( + VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportWScalings_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , viewportWScalingEnable( viewportWScalingEnable_ ) + , viewportCount( static_cast( viewportWScalings_.size() ) ) + , pViewportWScalings( viewportWScalings_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PipelineViewportWScalingStateCreateInfoNV & operator=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PipelineViewportWScalingStateCreateInfoNV & operator=( VkPipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & + setViewportWScalingEnable( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_ ) VULKAN_HPP_NOEXCEPT + { + viewportWScalingEnable = viewportWScalingEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = viewportCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV & + setPViewportWScalings( const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings_ ) VULKAN_HPP_NOEXCEPT + { + pViewportWScalings = pViewportWScalings_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PipelineViewportWScalingStateCreateInfoNV & setViewportWScalings( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewportWScalings_ ) VULKAN_HPP_NOEXCEPT + { + viewportCount = static_cast( viewportWScalings_.size() ); + pViewportWScalings = viewportWScalings_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPipelineViewportWScalingStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportWScalingStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPipelineViewportWScalingStateCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPipelineViewportWScalingStateCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, viewportWScalingEnable, viewportCount, pViewportWScalings ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PipelineViewportWScalingStateCreateInfoNV const & ) const = default; +#else + bool operator==( PipelineViewportWScalingStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewportWScalingEnable == rhs.viewportWScalingEnable ) && + ( viewportCount == rhs.viewportCount ) && ( pViewportWScalings == rhs.pViewportWScalings ); +# endif + } + + bool operator!=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportWScalingStateCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable = {}; + uint32_t viewportCount = {}; + const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings = {}; + }; + + template <> + struct CppType + { + using Type = PipelineViewportWScalingStateCreateInfoNV; + }; + +#if defined( VK_USE_PLATFORM_GGP ) + // wrapper struct for struct VkPresentFrameTokenGGP, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentFrameTokenGGP.html + struct PresentFrameTokenGGP + { + using NativeType = VkPresentFrameTokenGGP; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentFrameTokenGGP; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentFrameTokenGGP( GgpFrameToken frameToken_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , frameToken{ frameToken_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentFrameTokenGGP( PresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentFrameTokenGGP( VkPresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT + : PresentFrameTokenGGP( *reinterpret_cast( &rhs ) ) + { + } + + PresentFrameTokenGGP & operator=( PresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentFrameTokenGGP & operator=( VkPresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP & setFrameToken( GgpFrameToken frameToken_ ) VULKAN_HPP_NOEXCEPT + { + frameToken = frameToken_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentFrameTokenGGP const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentFrameTokenGGP &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentFrameTokenGGP const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentFrameTokenGGP *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, frameToken ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &frameToken, &rhs.frameToken, sizeof( GgpFrameToken ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &frameToken, &rhs.frameToken, sizeof( GgpFrameToken ) ) == 0 ); + } + + bool operator!=( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentFrameTokenGGP; + const void * pNext = {}; + GgpFrameToken frameToken = {}; + }; + + template <> + struct CppType + { + using Type = PresentFrameTokenGGP; + }; +#endif /*VK_USE_PLATFORM_GGP*/ + + // wrapper struct for struct VkPresentId2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentId2KHR.html + struct PresentId2KHR + { + using NativeType = VkPresentId2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentId2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentId2KHR( uint32_t swapchainCount_ = {}, const uint64_t * pPresentIds_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pPresentIds{ pPresentIds_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentId2KHR( PresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentId2KHR( VkPresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentId2KHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentId2KHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentIds_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( presentIds_.size() ) ), pPresentIds( presentIds_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PresentId2KHR & operator=( PresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentId2KHR & operator=( VkPresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentId2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentId2KHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentId2KHR & setPPresentIds( const uint64_t * pPresentIds_ ) VULKAN_HPP_NOEXCEPT + { + pPresentIds = pPresentIds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentId2KHR & setPresentIds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentIds_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( presentIds_.size() ); + pPresentIds = presentIds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentId2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentId2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentId2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentId2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pPresentIds ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentId2KHR const & ) const = default; +#else + bool operator==( PresentId2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pPresentIds == rhs.pPresentIds ); +# endif + } + + bool operator!=( PresentId2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentId2KHR; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const uint64_t * pPresentIds = {}; + }; + + template <> + struct CppType + { + using Type = PresentId2KHR; + }; + + // wrapper struct for struct VkPresentIdKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentIdKHR.html + struct PresentIdKHR + { + using NativeType = VkPresentIdKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentIdKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentIdKHR( uint32_t swapchainCount_ = {}, const uint64_t * pPresentIds_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pPresentIds{ pPresentIds_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentIdKHR( PresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentIdKHR( VkPresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentIdKHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentIdKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentIds_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( presentIds_.size() ) ), pPresentIds( presentIds_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PresentIdKHR & operator=( PresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentIdKHR & operator=( VkPresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setPPresentIds( const uint64_t * pPresentIds_ ) VULKAN_HPP_NOEXCEPT + { + pPresentIds = pPresentIds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentIdKHR & setPresentIds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentIds_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( presentIds_.size() ); + pPresentIds = presentIds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentIdKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentIdKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentIdKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentIdKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pPresentIds ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentIdKHR const & ) const = default; +#else + bool operator==( PresentIdKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pPresentIds == rhs.pPresentIds ); +# endif + } + + bool operator!=( PresentIdKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentIdKHR; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const uint64_t * pPresentIds = {}; + }; + + template <> + struct CppType + { + using Type = PresentIdKHR; + }; + + // wrapper struct for struct VkPresentInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentInfoKHR.html + struct PresentInfoKHR + { + using NativeType = VkPresentInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentInfoKHR( uint32_t waitSemaphoreCount_ = {}, + const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ = {}, + uint32_t swapchainCount_ = {}, + const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains_ = {}, + const uint32_t * pImageIndices_ = {}, + VULKAN_HPP_NAMESPACE::Result * pResults_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , waitSemaphoreCount{ waitSemaphoreCount_ } + , pWaitSemaphores{ pWaitSemaphores_ } + , swapchainCount{ swapchainCount_ } + , pSwapchains{ pSwapchains_ } + , pImageIndices{ pImageIndices_ } + , pResults{ pResults_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentInfoKHR( PresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentInfoKHR( VkPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentInfoKHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & swapchains_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageIndices_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & results_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , waitSemaphoreCount( static_cast( waitSemaphores_.size() ) ) + , pWaitSemaphores( waitSemaphores_.data() ) + , swapchainCount( static_cast( swapchains_.size() ) ) + , pSwapchains( swapchains_.data() ) + , pImageIndices( imageIndices_.data() ) + , pResults( results_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( swapchains_.size() == imageIndices_.size() ); + VULKAN_HPP_ASSERT( results_.empty() || ( swapchains_.size() == results_.size() ) ); + VULKAN_HPP_ASSERT( results_.empty() || ( imageIndices_.size() == results_.size() ) ); +# else + if ( swapchains_.size() != imageIndices_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::PresentInfoKHR::PresentInfoKHR: swapchains_.size() != imageIndices_.size()" ); + } + if ( !results_.empty() && ( swapchains_.size() != results_.size() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::PresentInfoKHR::PresentInfoKHR: !results_.empty() && ( swapchains_.size() != results_.size() )" ); + } + if ( !results_.empty() && ( imageIndices_.size() != results_.size() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::PresentInfoKHR::PresentInfoKHR: !results_.empty() && ( imageIndices_.size() != results_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PresentInfoKHR & operator=( PresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentInfoKHR & operator=( VkPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = waitSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphores = pWaitSemaphores_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentInfoKHR & + setWaitSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = static_cast( waitSemaphores_.size() ); + pWaitSemaphores = waitSemaphores_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPSwapchains( const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains_ ) VULKAN_HPP_NOEXCEPT + { + pSwapchains = pSwapchains_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentInfoKHR & + setSwapchains( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & swapchains_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( swapchains_.size() ); + pSwapchains = swapchains_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPImageIndices( const uint32_t * pImageIndices_ ) VULKAN_HPP_NOEXCEPT + { + pImageIndices = pImageIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentInfoKHR & setImageIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageIndices_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( imageIndices_.size() ); + pImageIndices = imageIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPResults( VULKAN_HPP_NAMESPACE::Result * pResults_ ) VULKAN_HPP_NOEXCEPT + { + pResults = pResults_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentInfoKHR & setResults( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & results_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( results_.size() ); + pResults = results_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, waitSemaphoreCount, pWaitSemaphores, swapchainCount, pSwapchains, pImageIndices, pResults ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentInfoKHR const & ) const = default; +#else + bool operator==( PresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && + ( pWaitSemaphores == rhs.pWaitSemaphores ) && ( swapchainCount == rhs.swapchainCount ) && ( pSwapchains == rhs.pSwapchains ) && + ( pImageIndices == rhs.pImageIndices ) && ( pResults == rhs.pResults ); +# endif + } + + bool operator!=( PresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentInfoKHR; + const void * pNext = {}; + uint32_t waitSemaphoreCount = {}; + const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores = {}; + uint32_t swapchainCount = {}; + const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains = {}; + const uint32_t * pImageIndices = {}; + VULKAN_HPP_NAMESPACE::Result * pResults = {}; + }; + + template <> + struct CppType + { + using Type = PresentInfoKHR; + }; + + // wrapper struct for struct VkRectLayerKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRectLayerKHR.html + struct RectLayerKHR + { + using NativeType = VkRectLayerKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + RectLayerKHR( VULKAN_HPP_NAMESPACE::Offset2D offset_ = {}, VULKAN_HPP_NAMESPACE::Extent2D extent_ = {}, uint32_t layer_ = {} ) VULKAN_HPP_NOEXCEPT + : offset{ offset_ } + , extent{ extent_ } + , layer{ layer_ } + { + } + + VULKAN_HPP_CONSTEXPR RectLayerKHR( RectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RectLayerKHR( VkRectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT : RectLayerKHR( *reinterpret_cast( &rhs ) ) {} + + explicit RectLayerKHR( Rect2D const & rect2D, uint32_t layer_ = {} ) : offset( rect2D.offset ), extent( rect2D.extent ), layer( layer_ ) {} + + RectLayerKHR & operator=( RectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RectLayerKHR & operator=( VkRectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT + { + extent = extent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setLayer( uint32_t layer_ ) VULKAN_HPP_NOEXCEPT + { + layer = layer_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRectLayerKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRectLayerKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRectLayerKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRectLayerKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( offset, extent, layer ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RectLayerKHR const & ) const = default; +#else + bool operator==( RectLayerKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( offset == rhs.offset ) && ( extent == rhs.extent ) && ( layer == rhs.layer ); +# endif + } + + bool operator!=( RectLayerKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Offset2D offset = {}; + VULKAN_HPP_NAMESPACE::Extent2D extent = {}; + uint32_t layer = {}; + }; + + // wrapper struct for struct VkPresentRegionKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentRegionKHR.html + struct PresentRegionKHR + { + using NativeType = VkPresentRegionKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentRegionKHR( uint32_t rectangleCount_ = {}, const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles_ = {} ) VULKAN_HPP_NOEXCEPT + : rectangleCount{ rectangleCount_ } + , pRectangles{ pRectangles_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentRegionKHR( PresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentRegionKHR( VkPresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentRegionKHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentRegionKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & rectangles_ ) + : rectangleCount( static_cast( rectangles_.size() ) ), pRectangles( rectangles_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PresentRegionKHR & operator=( PresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentRegionKHR & operator=( VkPresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR & setRectangleCount( uint32_t rectangleCount_ ) VULKAN_HPP_NOEXCEPT + { + rectangleCount = rectangleCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR & setPRectangles( const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles_ ) VULKAN_HPP_NOEXCEPT + { + pRectangles = pRectangles_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentRegionKHR & + setRectangles( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & rectangles_ ) VULKAN_HPP_NOEXCEPT + { + rectangleCount = static_cast( rectangles_.size() ); + pRectangles = rectangles_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentRegionKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentRegionKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentRegionKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentRegionKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( rectangleCount, pRectangles ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentRegionKHR const & ) const = default; +#else + bool operator==( PresentRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( rectangleCount == rhs.rectangleCount ) && ( pRectangles == rhs.pRectangles ); +# endif + } + + bool operator!=( PresentRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t rectangleCount = {}; + const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles = {}; + }; + + // wrapper struct for struct VkPresentRegionsKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentRegionsKHR.html + struct PresentRegionsKHR + { + using NativeType = VkPresentRegionsKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentRegionsKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentRegionsKHR( uint32_t swapchainCount_ = {}, + const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentRegionsKHR( PresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentRegionsKHR( VkPresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentRegionsKHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentRegionsKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( regions_.size() ) ), pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PresentRegionsKHR & operator=( PresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentRegionsKHR & operator=( VkPresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setPRegions( const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentRegionsKHR & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentRegionsKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentRegionsKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentRegionsKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentRegionsKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentRegionsKHR const & ) const = default; +#else + bool operator==( PresentRegionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( PresentRegionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentRegionsKHR; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = PresentRegionsKHR; + }; + + // wrapper struct for struct VkPresentTimeGOOGLE, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentTimeGOOGLE.html + struct PresentTimeGOOGLE + { + using NativeType = VkPresentTimeGOOGLE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentTimeGOOGLE( uint32_t presentID_ = {}, uint64_t desiredPresentTime_ = {} ) VULKAN_HPP_NOEXCEPT + : presentID{ presentID_ } + , desiredPresentTime{ desiredPresentTime_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentTimeGOOGLE( PresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentTimeGOOGLE( VkPresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT : PresentTimeGOOGLE( *reinterpret_cast( &rhs ) ) {} + + PresentTimeGOOGLE & operator=( PresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentTimeGOOGLE & operator=( VkPresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE & setPresentID( uint32_t presentID_ ) VULKAN_HPP_NOEXCEPT + { + presentID = presentID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE & setDesiredPresentTime( uint64_t desiredPresentTime_ ) VULKAN_HPP_NOEXCEPT + { + desiredPresentTime = desiredPresentTime_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentTimeGOOGLE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentTimeGOOGLE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentTimeGOOGLE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentTimeGOOGLE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( presentID, desiredPresentTime ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentTimeGOOGLE const & ) const = default; +#else + bool operator==( PresentTimeGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( presentID == rhs.presentID ) && ( desiredPresentTime == rhs.desiredPresentTime ); +# endif + } + + bool operator!=( PresentTimeGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t presentID = {}; + uint64_t desiredPresentTime = {}; + }; + + // wrapper struct for struct VkPresentTimesInfoGOOGLE, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentTimesInfoGOOGLE.html + struct PresentTimesInfoGOOGLE + { + using NativeType = VkPresentTimesInfoGOOGLE; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentTimesInfoGOOGLE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentTimesInfoGOOGLE( uint32_t swapchainCount_ = {}, + const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pTimes{ pTimes_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentTimesInfoGOOGLE( PresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentTimesInfoGOOGLE( VkPresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + : PresentTimesInfoGOOGLE( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentTimesInfoGOOGLE( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & times_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( times_.size() ) ), pTimes( times_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PresentTimesInfoGOOGLE & operator=( PresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentTimesInfoGOOGLE & operator=( VkPresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setPTimes( const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes_ ) VULKAN_HPP_NOEXCEPT + { + pTimes = pTimes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PresentTimesInfoGOOGLE & + setTimes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & times_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( times_.size() ); + pTimes = times_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentTimesInfoGOOGLE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentTimesInfoGOOGLE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentTimesInfoGOOGLE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentTimesInfoGOOGLE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pTimes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentTimesInfoGOOGLE const & ) const = default; +#else + bool operator==( PresentTimesInfoGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pTimes == rhs.pTimes ); +# endif + } + + bool operator!=( PresentTimesInfoGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentTimesInfoGOOGLE; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes = {}; + }; + + template <> + struct CppType + { + using Type = PresentTimesInfoGOOGLE; + }; + + // wrapper struct for struct VkPresentWait2InfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPresentWait2InfoKHR.html + struct PresentWait2InfoKHR + { + using NativeType = VkPresentWait2InfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentWait2InfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PresentWait2InfoKHR( uint64_t presentId_ = {}, uint64_t timeout_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentId{ presentId_ } + , timeout{ timeout_ } + { + } + + VULKAN_HPP_CONSTEXPR PresentWait2InfoKHR( PresentWait2InfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PresentWait2InfoKHR( VkPresentWait2InfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : PresentWait2InfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + PresentWait2InfoKHR & operator=( PresentWait2InfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PresentWait2InfoKHR & operator=( VkPresentWait2InfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PresentWait2InfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentWait2InfoKHR & setPresentId( uint64_t presentId_ ) VULKAN_HPP_NOEXCEPT + { + presentId = presentId_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PresentWait2InfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT + { + timeout = timeout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPresentWait2InfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentWait2InfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPresentWait2InfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPresentWait2InfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentId, timeout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PresentWait2InfoKHR const & ) const = default; +#else + bool operator==( PresentWait2InfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentId == rhs.presentId ) && ( timeout == rhs.timeout ); +# endif + } + + bool operator!=( PresentWait2InfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentWait2InfoKHR; + const void * pNext = {}; + uint64_t presentId = {}; + uint64_t timeout = {}; + }; + + template <> + struct CppType + { + using Type = PresentWait2InfoKHR; + }; + + // wrapper struct for struct VkPrivateDataSlotCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPrivateDataSlotCreateInfo.html + struct PrivateDataSlotCreateInfo + { + using NativeType = VkPrivateDataSlotCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePrivateDataSlotCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PrivateDataSlotCreateInfo( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR PrivateDataSlotCreateInfo( PrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PrivateDataSlotCreateInfo( VkPrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PrivateDataSlotCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PrivateDataSlotCreateInfo & operator=( PrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PrivateDataSlotCreateInfo & operator=( VkPrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPrivateDataSlotCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPrivateDataSlotCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPrivateDataSlotCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPrivateDataSlotCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PrivateDataSlotCreateInfo const & ) const = default; +#else + bool operator==( PrivateDataSlotCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( PrivateDataSlotCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePrivateDataSlotCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags = {}; + }; + + template <> + struct CppType + { + using Type = PrivateDataSlotCreateInfo; + }; + + using PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfo; + + // wrapper struct for struct VkProtectedSubmitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkProtectedSubmitInfo.html + struct ProtectedSubmitInfo + { + using NativeType = VkProtectedSubmitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eProtectedSubmitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ProtectedSubmitInfo( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , protectedSubmit{ protectedSubmit_ } + { + } + + VULKAN_HPP_CONSTEXPR ProtectedSubmitInfo( ProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ProtectedSubmitInfo( VkProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : ProtectedSubmitInfo( *reinterpret_cast( &rhs ) ) + { + } + + ProtectedSubmitInfo & operator=( ProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ProtectedSubmitInfo & operator=( VkProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo & setProtectedSubmit( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ ) VULKAN_HPP_NOEXCEPT + { + protectedSubmit = protectedSubmit_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkProtectedSubmitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkProtectedSubmitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkProtectedSubmitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkProtectedSubmitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, protectedSubmit ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ProtectedSubmitInfo const & ) const = default; +#else + bool operator==( ProtectedSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedSubmit == rhs.protectedSubmit ); +# endif + } + + bool operator!=( ProtectedSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eProtectedSubmitInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit = {}; + }; + + template <> + struct CppType + { + using Type = ProtectedSubmitInfo; + }; + + // wrapper struct for struct VkPushConstantsInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPushConstantsInfo.html + struct PushConstantsInfo + { + using NativeType = VkPushConstantsInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePushConstantsInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PushConstantsInfo( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, + uint32_t offset_ = {}, + uint32_t size_ = {}, + const void * pValues_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , layout{ layout_ } + , stageFlags{ stageFlags_ } + , offset{ offset_ } + , size{ size_ } + , pValues{ pValues_ } + { + } + + VULKAN_HPP_CONSTEXPR PushConstantsInfo( PushConstantsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PushConstantsInfo( VkPushConstantsInfo const & rhs ) VULKAN_HPP_NOEXCEPT : PushConstantsInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + PushConstantsInfo( VULKAN_HPP_NAMESPACE::PipelineLayout layout_, + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_, + uint32_t offset_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , layout( layout_ ) + , stageFlags( stageFlags_ ) + , offset( offset_ ) + , size( static_cast( values_.size() * sizeof( T ) ) ) + , pValues( values_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PushConstantsInfo & operator=( PushConstantsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PushConstantsInfo & operator=( VkPushConstantsInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PushConstantsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantsInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantsInfo & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantsInfo & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantsInfo & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushConstantsInfo & setPValues( const void * pValues_ ) VULKAN_HPP_NOEXCEPT + { + pValues = pValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + PushConstantsInfo & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + size = static_cast( values_.size() * sizeof( T ) ); + pValues = values_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPushConstantsInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushConstantsInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushConstantsInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPushConstantsInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, layout, stageFlags, offset, size, pValues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PushConstantsInfo const & ) const = default; +#else + bool operator==( PushConstantsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( layout == rhs.layout ) && ( stageFlags == rhs.stageFlags ) && ( offset == rhs.offset ) && + ( size == rhs.size ) && ( pValues == rhs.pValues ); +# endif + } + + bool operator!=( PushConstantsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePushConstantsInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + uint32_t offset = {}; + uint32_t size = {}; + const void * pValues = {}; + }; + + template <> + struct CppType + { + using Type = PushConstantsInfo; + }; + + using PushConstantsInfoKHR = PushConstantsInfo; + + // wrapper struct for struct VkWriteDescriptorSet, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteDescriptorSet.html + struct WriteDescriptorSet + { + using NativeType = VkWriteDescriptorSet; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSet; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ = {}, + uint32_t dstBinding_ = {}, + uint32_t dstArrayElement_ = {}, + uint32_t descriptorCount_ = {}, + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler, + const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo_ = {}, + const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dstSet{ dstSet_ } + , dstBinding{ dstBinding_ } + , dstArrayElement{ dstArrayElement_ } + , descriptorCount{ descriptorCount_ } + , descriptorType{ descriptorType_ } + , pImageInfo{ pImageInfo_ } + , pBufferInfo{ pBufferInfo_ } + , pTexelBufferView{ pTexelBufferView_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteDescriptorSet( WriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteDescriptorSet( VkWriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT : WriteDescriptorSet( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_, + uint32_t dstBinding_, + uint32_t dstArrayElement_, + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageInfo_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferInfo_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & texelBufferView_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , dstSet( dstSet_ ) + , dstBinding( dstBinding_ ) + , dstArrayElement( dstArrayElement_ ) + , descriptorCount( static_cast( !imageInfo_.empty() ? imageInfo_.size() + : !bufferInfo_.empty() ? bufferInfo_.size() + : texelBufferView_.size() ) ) + , descriptorType( descriptorType_ ) + , pImageInfo( imageInfo_.data() ) + , pBufferInfo( bufferInfo_.data() ) + , pTexelBufferView( texelBufferView_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( ( !imageInfo_.empty() + !bufferInfo_.empty() + !texelBufferView_.empty() ) <= 1 ); +# else + if ( 1 < ( !imageInfo_.empty() + !bufferInfo_.empty() + !texelBufferView_.empty() ) ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::WriteDescriptorSet::WriteDescriptorSet: 1 < ( !imageInfo_.empty() + !bufferInfo_.empty() + !texelBufferView_.empty() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + WriteDescriptorSet & operator=( WriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteDescriptorSet & operator=( VkWriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT + { + dstSet = dstSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT + { + dstBinding = dstBinding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT + { + dstArrayElement = dstArrayElement_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = descriptorCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT + { + descriptorType = descriptorType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPImageInfo( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo_ ) VULKAN_HPP_NOEXCEPT + { + pImageInfo = pImageInfo_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSet & + setImageInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageInfo_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = static_cast( imageInfo_.size() ); + pImageInfo = imageInfo_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPBufferInfo( const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo_ ) VULKAN_HPP_NOEXCEPT + { + pBufferInfo = pBufferInfo_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSet & + setBufferInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferInfo_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = static_cast( bufferInfo_.size() ); + pBufferInfo = bufferInfo_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPTexelBufferView( const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView_ ) VULKAN_HPP_NOEXCEPT + { + pTexelBufferView = pTexelBufferView_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSet & + setTexelBufferView( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & texelBufferView_ ) VULKAN_HPP_NOEXCEPT + { + descriptorCount = static_cast( texelBufferView_.size() ); + pTexelBufferView = texelBufferView_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteDescriptorSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteDescriptorSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dstSet, dstBinding, dstArrayElement, descriptorCount, descriptorType, pImageInfo, pBufferInfo, pTexelBufferView ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteDescriptorSet const & ) const = default; +#else + bool operator==( WriteDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dstSet == rhs.dstSet ) && ( dstBinding == rhs.dstBinding ) && + ( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount ) && ( descriptorType == rhs.descriptorType ) && + ( pImageInfo == rhs.pImageInfo ) && ( pBufferInfo == rhs.pBufferInfo ) && ( pTexelBufferView == rhs.pTexelBufferView ); +# endif + } + + bool operator!=( WriteDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSet; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorSet dstSet = {}; + uint32_t dstBinding = {}; + uint32_t dstArrayElement = {}; + uint32_t descriptorCount = {}; + VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler; + const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo = {}; + const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo = {}; + const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView = {}; + }; + + template <> + struct CppType + { + using Type = WriteDescriptorSet; + }; + + // wrapper struct for struct VkPushDescriptorSetInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkPushDescriptorSetInfo.html + struct PushDescriptorSetInfo + { + using NativeType = VkPushDescriptorSetInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePushDescriptorSetInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PushDescriptorSetInfo( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + uint32_t set_ = {}, + uint32_t descriptorWriteCount_ = {}, + const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stageFlags{ stageFlags_ } + , layout{ layout_ } + , set{ set_ } + , descriptorWriteCount{ descriptorWriteCount_ } + , pDescriptorWrites{ pDescriptorWrites_ } + { + } + + VULKAN_HPP_CONSTEXPR PushDescriptorSetInfo( PushDescriptorSetInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PushDescriptorSetInfo( VkPushDescriptorSetInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PushDescriptorSetInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PushDescriptorSetInfo( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_, + uint32_t set_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorWrites_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stageFlags( stageFlags_ ) + , layout( layout_ ) + , set( set_ ) + , descriptorWriteCount( static_cast( descriptorWrites_.size() ) ) + , pDescriptorWrites( descriptorWrites_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + PushDescriptorSetInfo & operator=( PushDescriptorSetInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PushDescriptorSetInfo & operator=( VkPushDescriptorSetInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetInfo & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetInfo & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT + { + set = set_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetInfo & setDescriptorWriteCount( uint32_t descriptorWriteCount_ ) VULKAN_HPP_NOEXCEPT + { + descriptorWriteCount = descriptorWriteCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetInfo & + setPDescriptorWrites( const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites_ ) VULKAN_HPP_NOEXCEPT + { + pDescriptorWrites = pDescriptorWrites_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + PushDescriptorSetInfo & setDescriptorWrites( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & descriptorWrites_ ) VULKAN_HPP_NOEXCEPT + { + descriptorWriteCount = static_cast( descriptorWrites_.size() ); + pDescriptorWrites = descriptorWrites_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPushDescriptorSetInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushDescriptorSetInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushDescriptorSetInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPushDescriptorSetInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stageFlags, layout, set, descriptorWriteCount, pDescriptorWrites ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PushDescriptorSetInfo const & ) const = default; +#else + bool operator==( PushDescriptorSetInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageFlags == rhs.stageFlags ) && ( layout == rhs.layout ) && ( set == rhs.set ) && + ( descriptorWriteCount == rhs.descriptorWriteCount ) && ( pDescriptorWrites == rhs.pDescriptorWrites ); +# endif + } + + bool operator!=( PushDescriptorSetInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePushDescriptorSetInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + uint32_t set = {}; + uint32_t descriptorWriteCount = {}; + const VULKAN_HPP_NAMESPACE::WriteDescriptorSet * pDescriptorWrites = {}; + }; + + template <> + struct CppType + { + using Type = PushDescriptorSetInfo; + }; + + using PushDescriptorSetInfoKHR = PushDescriptorSetInfo; + + // wrapper struct for struct VkPushDescriptorSetWithTemplateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkPushDescriptorSetWithTemplateInfo.html + struct PushDescriptorSetWithTemplateInfo + { + using NativeType = VkPushDescriptorSetWithTemplateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePushDescriptorSetWithTemplateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR PushDescriptorSetWithTemplateInfo( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + uint32_t set_ = {}, + const void * pData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , descriptorUpdateTemplate{ descriptorUpdateTemplate_ } + , layout{ layout_ } + , set{ set_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR PushDescriptorSetWithTemplateInfo( PushDescriptorSetWithTemplateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + PushDescriptorSetWithTemplateInfo( VkPushDescriptorSetWithTemplateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : PushDescriptorSetWithTemplateInfo( *reinterpret_cast( &rhs ) ) + { + } + + PushDescriptorSetWithTemplateInfo & operator=( PushDescriptorSetWithTemplateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + PushDescriptorSetWithTemplateInfo & operator=( VkPushDescriptorSetWithTemplateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetWithTemplateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetWithTemplateInfo & + setDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate_ ) VULKAN_HPP_NOEXCEPT + { + descriptorUpdateTemplate = descriptorUpdateTemplate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetWithTemplateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetWithTemplateInfo & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT + { + set = set_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 PushDescriptorSetWithTemplateInfo & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkPushDescriptorSetWithTemplateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushDescriptorSetWithTemplateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkPushDescriptorSetWithTemplateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkPushDescriptorSetWithTemplateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, descriptorUpdateTemplate, layout, set, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( PushDescriptorSetWithTemplateInfo const & ) const = default; +#else + bool operator==( PushDescriptorSetWithTemplateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorUpdateTemplate == rhs.descriptorUpdateTemplate ) && ( layout == rhs.layout ) && + ( set == rhs.set ) && ( pData == rhs.pData ); +# endif + } + + bool operator!=( PushDescriptorSetWithTemplateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePushDescriptorSetWithTemplateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + uint32_t set = {}; + const void * pData = {}; + }; + + template <> + struct CppType + { + using Type = PushDescriptorSetWithTemplateInfo; + }; + + using PushDescriptorSetWithTemplateInfoKHR = PushDescriptorSetWithTemplateInfo; + + // wrapper struct for struct VkQueryLowLatencySupportNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryLowLatencySupportNV.html + struct QueryLowLatencySupportNV + { + using NativeType = VkQueryLowLatencySupportNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryLowLatencySupportNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueryLowLatencySupportNV( void * pQueriedLowLatencyData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pQueriedLowLatencyData{ pQueriedLowLatencyData_ } + { + } + + VULKAN_HPP_CONSTEXPR QueryLowLatencySupportNV( QueryLowLatencySupportNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueryLowLatencySupportNV( VkQueryLowLatencySupportNV const & rhs ) VULKAN_HPP_NOEXCEPT + : QueryLowLatencySupportNV( *reinterpret_cast( &rhs ) ) + { + } + + QueryLowLatencySupportNV & operator=( QueryLowLatencySupportNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueryLowLatencySupportNV & operator=( VkQueryLowLatencySupportNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueryLowLatencySupportNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryLowLatencySupportNV & setPQueriedLowLatencyData( void * pQueriedLowLatencyData_ ) VULKAN_HPP_NOEXCEPT + { + pQueriedLowLatencyData = pQueriedLowLatencyData_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueryLowLatencySupportNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryLowLatencySupportNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryLowLatencySupportNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueryLowLatencySupportNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pQueriedLowLatencyData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueryLowLatencySupportNV const & ) const = default; +#else + bool operator==( QueryLowLatencySupportNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pQueriedLowLatencyData == rhs.pQueriedLowLatencyData ); +# endif + } + + bool operator!=( QueryLowLatencySupportNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryLowLatencySupportNV; + const void * pNext = {}; + void * pQueriedLowLatencyData = {}; + }; + + template <> + struct CppType + { + using Type = QueryLowLatencySupportNV; + }; + + // wrapper struct for struct VkQueryPoolCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolCreateInfo.html + struct QueryPoolCreateInfo + { + using NativeType = VkQueryPoolCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueryPoolCreateInfo( VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::QueryType queryType_ = VULKAN_HPP_NAMESPACE::QueryType::eOcclusion, + uint32_t queryCount_ = {}, + VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , queryType{ queryType_ } + , queryCount{ queryCount_ } + , pipelineStatistics{ pipelineStatistics_ } + { + } + + VULKAN_HPP_CONSTEXPR QueryPoolCreateInfo( QueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueryPoolCreateInfo( VkQueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : QueryPoolCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + QueryPoolCreateInfo & operator=( QueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueryPoolCreateInfo & operator=( VkQueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setQueryType( VULKAN_HPP_NAMESPACE::QueryType queryType_ ) VULKAN_HPP_NOEXCEPT + { + queryType = queryType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setQueryCount( uint32_t queryCount_ ) VULKAN_HPP_NOEXCEPT + { + queryCount = queryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & + setPipelineStatistics( VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ ) VULKAN_HPP_NOEXCEPT + { + pipelineStatistics = pipelineStatistics_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueryPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueryPoolCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, queryType, queryCount, pipelineStatistics ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueryPoolCreateInfo const & ) const = default; +#else + bool operator==( QueryPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( queryType == rhs.queryType ) && ( queryCount == rhs.queryCount ) && + ( pipelineStatistics == rhs.pipelineStatistics ); +# endif + } + + bool operator!=( QueryPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::QueryType queryType = VULKAN_HPP_NAMESPACE::QueryType::eOcclusion; + uint32_t queryCount = {}; + VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics = {}; + }; + + template <> + struct CppType + { + using Type = QueryPoolCreateInfo; + }; + + // wrapper struct for struct VkQueryPoolPerformanceCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolPerformanceCreateInfoKHR.html + struct QueryPoolPerformanceCreateInfoKHR + { + using NativeType = VkQueryPoolPerformanceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolPerformanceCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueryPoolPerformanceCreateInfoKHR( uint32_t queueFamilyIndex_ = {}, + uint32_t counterIndexCount_ = {}, + const uint32_t * pCounterIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queueFamilyIndex{ queueFamilyIndex_ } + , counterIndexCount{ counterIndexCount_ } + , pCounterIndices{ pCounterIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR QueryPoolPerformanceCreateInfoKHR( QueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueryPoolPerformanceCreateInfoKHR( VkQueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : QueryPoolPerformanceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + QueryPoolPerformanceCreateInfoKHR( uint32_t queueFamilyIndex_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & counterIndices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , queueFamilyIndex( queueFamilyIndex_ ) + , counterIndexCount( static_cast( counterIndices_.size() ) ) + , pCounterIndices( counterIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + QueryPoolPerformanceCreateInfoKHR & operator=( QueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueryPoolPerformanceCreateInfoKHR & operator=( VkQueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndex = queueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setCounterIndexCount( uint32_t counterIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + counterIndexCount = counterIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setPCounterIndices( const uint32_t * pCounterIndices_ ) VULKAN_HPP_NOEXCEPT + { + pCounterIndices = pCounterIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + QueryPoolPerformanceCreateInfoKHR & + setCounterIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & counterIndices_ ) VULKAN_HPP_NOEXCEPT + { + counterIndexCount = static_cast( counterIndices_.size() ); + pCounterIndices = counterIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueryPoolPerformanceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolPerformanceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolPerformanceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueryPoolPerformanceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queueFamilyIndex, counterIndexCount, pCounterIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueryPoolPerformanceCreateInfoKHR const & ) const = default; +#else + bool operator==( QueryPoolPerformanceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && + ( counterIndexCount == rhs.counterIndexCount ) && ( pCounterIndices == rhs.pCounterIndices ); +# endif + } + + bool operator!=( QueryPoolPerformanceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolPerformanceCreateInfoKHR; + const void * pNext = {}; + uint32_t queueFamilyIndex = {}; + uint32_t counterIndexCount = {}; + const uint32_t * pCounterIndices = {}; + }; + + template <> + struct CppType + { + using Type = QueryPoolPerformanceCreateInfoKHR; + }; + + // wrapper struct for struct VkQueryPoolPerformanceQueryCreateInfoINTEL, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolPerformanceQueryCreateInfoINTEL.html + struct QueryPoolPerformanceQueryCreateInfoINTEL + { + using NativeType = VkQueryPoolPerformanceQueryCreateInfoINTEL; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueryPoolPerformanceQueryCreateInfoINTEL( + VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling_ = VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL::eManual, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , performanceCountersSampling{ performanceCountersSampling_ } + { + } + + VULKAN_HPP_CONSTEXPR QueryPoolPerformanceQueryCreateInfoINTEL( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueryPoolPerformanceQueryCreateInfoINTEL( VkQueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + : QueryPoolPerformanceQueryCreateInfoINTEL( *reinterpret_cast( &rhs ) ) + { + } + + QueryPoolPerformanceQueryCreateInfoINTEL & operator=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueryPoolPerformanceQueryCreateInfoINTEL & operator=( VkQueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL & + setPerformanceCountersSampling( VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling_ ) VULKAN_HPP_NOEXCEPT + { + performanceCountersSampling = performanceCountersSampling_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueryPoolPerformanceQueryCreateInfoINTEL const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolPerformanceQueryCreateInfoINTEL &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolPerformanceQueryCreateInfoINTEL const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueryPoolPerformanceQueryCreateInfoINTEL *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, performanceCountersSampling ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueryPoolPerformanceQueryCreateInfoINTEL const & ) const = default; +#else + bool operator==( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( performanceCountersSampling == rhs.performanceCountersSampling ); +# endif + } + + bool operator!=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling = VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL::eManual; + }; + + template <> + struct CppType + { + using Type = QueryPoolPerformanceQueryCreateInfoINTEL; + }; + + using QueryPoolCreateInfoINTEL = QueryPoolPerformanceQueryCreateInfoINTEL; + + // wrapper struct for struct VkQueryPoolVideoEncodeFeedbackCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueryPoolVideoEncodeFeedbackCreateInfoKHR.html + struct QueryPoolVideoEncodeFeedbackCreateInfoKHR + { + using NativeType = VkQueryPoolVideoEncodeFeedbackCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolVideoEncodeFeedbackCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueryPoolVideoEncodeFeedbackCreateInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagsKHR encodeFeedbackFlags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , encodeFeedbackFlags{ encodeFeedbackFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR QueryPoolVideoEncodeFeedbackCreateInfoKHR( QueryPoolVideoEncodeFeedbackCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueryPoolVideoEncodeFeedbackCreateInfoKHR( VkQueryPoolVideoEncodeFeedbackCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : QueryPoolVideoEncodeFeedbackCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + QueryPoolVideoEncodeFeedbackCreateInfoKHR & operator=( QueryPoolVideoEncodeFeedbackCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueryPoolVideoEncodeFeedbackCreateInfoKHR & operator=( VkQueryPoolVideoEncodeFeedbackCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueryPoolVideoEncodeFeedbackCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueryPoolVideoEncodeFeedbackCreateInfoKHR & + setEncodeFeedbackFlags( VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagsKHR encodeFeedbackFlags_ ) VULKAN_HPP_NOEXCEPT + { + encodeFeedbackFlags = encodeFeedbackFlags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueryPoolVideoEncodeFeedbackCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolVideoEncodeFeedbackCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueryPoolVideoEncodeFeedbackCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueryPoolVideoEncodeFeedbackCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, encodeFeedbackFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueryPoolVideoEncodeFeedbackCreateInfoKHR const & ) const = default; +#else + bool operator==( QueryPoolVideoEncodeFeedbackCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( encodeFeedbackFlags == rhs.encodeFeedbackFlags ); +# endif + } + + bool operator!=( QueryPoolVideoEncodeFeedbackCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueryPoolVideoEncodeFeedbackCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagsKHR encodeFeedbackFlags = {}; + }; + + template <> + struct CppType + { + using Type = QueryPoolVideoEncodeFeedbackCreateInfoKHR; + }; + + // wrapper struct for struct VkQueueFamilyCheckpointProperties2NV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyCheckpointProperties2NV.html + struct QueueFamilyCheckpointProperties2NV + { + using NativeType = VkQueueFamilyCheckpointProperties2NV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyCheckpointProperties2NV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointProperties2NV( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 checkpointExecutionStageMask_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , checkpointExecutionStageMask{ checkpointExecutionStageMask_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointProperties2NV( QueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyCheckpointProperties2NV( VkQueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyCheckpointProperties2NV( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyCheckpointProperties2NV & operator=( QueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyCheckpointProperties2NV & operator=( VkQueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyCheckpointProperties2NV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyCheckpointProperties2NV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyCheckpointProperties2NV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyCheckpointProperties2NV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, checkpointExecutionStageMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyCheckpointProperties2NV const & ) const = default; +#else + bool operator==( QueueFamilyCheckpointProperties2NV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( checkpointExecutionStageMask == rhs.checkpointExecutionStageMask ); +# endif + } + + bool operator!=( QueueFamilyCheckpointProperties2NV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyCheckpointProperties2NV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 checkpointExecutionStageMask = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyCheckpointProperties2NV; + }; + + // wrapper struct for struct VkQueueFamilyCheckpointPropertiesNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyCheckpointPropertiesNV.html + struct QueueFamilyCheckpointPropertiesNV + { + using NativeType = VkQueueFamilyCheckpointPropertiesNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyCheckpointPropertiesNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointPropertiesNV( VULKAN_HPP_NAMESPACE::PipelineStageFlags checkpointExecutionStageMask_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , checkpointExecutionStageMask{ checkpointExecutionStageMask_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointPropertiesNV( QueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyCheckpointPropertiesNV( VkQueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyCheckpointPropertiesNV( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyCheckpointPropertiesNV & operator=( QueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyCheckpointPropertiesNV & operator=( VkQueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyCheckpointPropertiesNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyCheckpointPropertiesNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyCheckpointPropertiesNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyCheckpointPropertiesNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, checkpointExecutionStageMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyCheckpointPropertiesNV const & ) const = default; +#else + bool operator==( QueueFamilyCheckpointPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( checkpointExecutionStageMask == rhs.checkpointExecutionStageMask ); +# endif + } + + bool operator!=( QueueFamilyCheckpointPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyCheckpointPropertiesNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags checkpointExecutionStageMask = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyCheckpointPropertiesNV; + }; + + // wrapper struct for struct VkQueueFamilyDataGraphProcessingEnginePropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyDataGraphProcessingEnginePropertiesARM.html + struct QueueFamilyDataGraphProcessingEnginePropertiesARM + { + using NativeType = VkQueueFamilyDataGraphProcessingEnginePropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyDataGraphProcessingEnginePropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + QueueFamilyDataGraphProcessingEnginePropertiesARM( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes_ = {}, + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags foreignMemoryHandleTypes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , foreignSemaphoreHandleTypes{ foreignSemaphoreHandleTypes_ } + , foreignMemoryHandleTypes{ foreignMemoryHandleTypes_ } + { + } + + VULKAN_HPP_CONSTEXPR + QueueFamilyDataGraphProcessingEnginePropertiesARM( QueueFamilyDataGraphProcessingEnginePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyDataGraphProcessingEnginePropertiesARM( VkQueueFamilyDataGraphProcessingEnginePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyDataGraphProcessingEnginePropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyDataGraphProcessingEnginePropertiesARM & + operator=( QueueFamilyDataGraphProcessingEnginePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyDataGraphProcessingEnginePropertiesARM & operator=( VkQueueFamilyDataGraphProcessingEnginePropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphProcessingEnginePropertiesARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphProcessingEnginePropertiesARM & + setForeignSemaphoreHandleTypes( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes_ ) VULKAN_HPP_NOEXCEPT + { + foreignSemaphoreHandleTypes = foreignSemaphoreHandleTypes_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphProcessingEnginePropertiesARM & + setForeignMemoryHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags foreignMemoryHandleTypes_ ) VULKAN_HPP_NOEXCEPT + { + foreignMemoryHandleTypes = foreignMemoryHandleTypes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueueFamilyDataGraphProcessingEnginePropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyDataGraphProcessingEnginePropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyDataGraphProcessingEnginePropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyDataGraphProcessingEnginePropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, foreignSemaphoreHandleTypes, foreignMemoryHandleTypes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyDataGraphProcessingEnginePropertiesARM const & ) const = default; +#else + bool operator==( QueueFamilyDataGraphProcessingEnginePropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( foreignSemaphoreHandleTypes == rhs.foreignSemaphoreHandleTypes ) && + ( foreignMemoryHandleTypes == rhs.foreignMemoryHandleTypes ); +# endif + } + + bool operator!=( QueueFamilyDataGraphProcessingEnginePropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyDataGraphProcessingEnginePropertiesARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes = {}; + VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags foreignMemoryHandleTypes = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyDataGraphProcessingEnginePropertiesARM; + }; + + // wrapper struct for struct VkQueueFamilyDataGraphPropertiesARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyDataGraphPropertiesARM.html + struct QueueFamilyDataGraphPropertiesARM + { + using NativeType = VkQueueFamilyDataGraphPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyDataGraphPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphPropertiesARM( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM engine_ = {}, + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationSupportARM operation_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , engine{ engine_ } + , operation{ operation_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphPropertiesARM( QueueFamilyDataGraphPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyDataGraphPropertiesARM( VkQueueFamilyDataGraphPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyDataGraphPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyDataGraphPropertiesARM & operator=( QueueFamilyDataGraphPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyDataGraphPropertiesARM & operator=( VkQueueFamilyDataGraphPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphPropertiesARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphPropertiesARM & + setEngine( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM const & engine_ ) VULKAN_HPP_NOEXCEPT + { + engine = engine_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 QueueFamilyDataGraphPropertiesARM & + setOperation( VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationSupportARM const & operation_ ) VULKAN_HPP_NOEXCEPT + { + operation = operation_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkQueueFamilyDataGraphPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyDataGraphPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyDataGraphPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyDataGraphPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, engine, operation ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyDataGraphPropertiesARM const & ) const = default; +#else + bool operator==( QueueFamilyDataGraphPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( engine == rhs.engine ) && ( operation == rhs.operation ); +# endif + } + + bool operator!=( QueueFamilyDataGraphPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyDataGraphPropertiesARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphProcessingEngineARM engine = {}; + VULKAN_HPP_NAMESPACE::PhysicalDeviceDataGraphOperationSupportARM operation = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyDataGraphPropertiesARM; + }; + + // wrapper struct for struct VkQueueFamilyGlobalPriorityProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyGlobalPriorityProperties.html + struct QueueFamilyGlobalPriorityProperties + { + using NativeType = VkQueueFamilyGlobalPriorityProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyGlobalPriorityProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityProperties( uint32_t priorityCount_ = {}, + std::array const & + priorities_ = { { VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow, + VULKAN_HPP_NAMESPACE::QueueGlobalPriority::eLow } }, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , priorityCount{ priorityCount_ } + , priorities{ priorities_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityProperties( QueueFamilyGlobalPriorityProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyGlobalPriorityProperties( VkQueueFamilyGlobalPriorityProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyGlobalPriorityProperties( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyGlobalPriorityProperties & operator=( QueueFamilyGlobalPriorityProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyGlobalPriorityProperties & operator=( VkQueueFamilyGlobalPriorityProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyGlobalPriorityProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyGlobalPriorityProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyGlobalPriorityProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyGlobalPriorityProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, priorityCount, priorities ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( QueueFamilyGlobalPriorityProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = priorityCount <=> rhs.priorityCount; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < priorityCount; ++i ) + { + if ( auto cmp = priorities[i] <=> rhs.priorities[i]; cmp != 0 ) + return cmp; + } + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( QueueFamilyGlobalPriorityProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( priorityCount == rhs.priorityCount ) && + ( memcmp( priorities, rhs.priorities, priorityCount * sizeof( VULKAN_HPP_NAMESPACE::QueueGlobalPriority ) ) == 0 ); + } + + bool operator!=( QueueFamilyGlobalPriorityProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyGlobalPriorityProperties; + void * pNext = {}; + uint32_t priorityCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D priorities = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyGlobalPriorityProperties; + }; + + using QueueFamilyGlobalPriorityPropertiesEXT = QueueFamilyGlobalPriorityProperties; + using QueueFamilyGlobalPriorityPropertiesKHR = QueueFamilyGlobalPriorityProperties; + + // wrapper struct for struct VkQueueFamilyOwnershipTransferPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyOwnershipTransferPropertiesKHR.html + struct QueueFamilyOwnershipTransferPropertiesKHR + { + using NativeType = VkQueueFamilyOwnershipTransferPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyOwnershipTransferPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyOwnershipTransferPropertiesKHR( uint32_t optimalImageTransferToQueueFamilies_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , optimalImageTransferToQueueFamilies{ optimalImageTransferToQueueFamilies_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyOwnershipTransferPropertiesKHR( QueueFamilyOwnershipTransferPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyOwnershipTransferPropertiesKHR( VkQueueFamilyOwnershipTransferPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyOwnershipTransferPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyOwnershipTransferPropertiesKHR & operator=( QueueFamilyOwnershipTransferPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyOwnershipTransferPropertiesKHR & operator=( VkQueueFamilyOwnershipTransferPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyOwnershipTransferPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyOwnershipTransferPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyOwnershipTransferPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyOwnershipTransferPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, optimalImageTransferToQueueFamilies ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyOwnershipTransferPropertiesKHR const & ) const = default; +#else + bool operator==( QueueFamilyOwnershipTransferPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( optimalImageTransferToQueueFamilies == rhs.optimalImageTransferToQueueFamilies ); +# endif + } + + bool operator!=( QueueFamilyOwnershipTransferPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyOwnershipTransferPropertiesKHR; + void * pNext = {}; + uint32_t optimalImageTransferToQueueFamilies = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyOwnershipTransferPropertiesKHR; + }; + + // wrapper struct for struct VkQueueFamilyProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyProperties.html + struct QueueFamilyProperties + { + using NativeType = VkQueueFamilyProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyProperties( VULKAN_HPP_NAMESPACE::QueueFlags queueFlags_ = {}, + uint32_t queueCount_ = {}, + uint32_t timestampValidBits_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D minImageTransferGranularity_ = {} ) VULKAN_HPP_NOEXCEPT + : queueFlags{ queueFlags_ } + , queueCount{ queueCount_ } + , timestampValidBits{ timestampValidBits_ } + , minImageTransferGranularity{ minImageTransferGranularity_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyProperties( QueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyProperties( VkQueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyProperties( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyProperties & operator=( QueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyProperties & operator=( VkQueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( queueFlags, queueCount, timestampValidBits, minImageTransferGranularity ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyProperties const & ) const = default; +#else + bool operator==( QueueFamilyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( queueFlags == rhs.queueFlags ) && ( queueCount == rhs.queueCount ) && ( timestampValidBits == rhs.timestampValidBits ) && + ( minImageTransferGranularity == rhs.minImageTransferGranularity ); +# endif + } + + bool operator!=( QueueFamilyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::QueueFlags queueFlags = {}; + uint32_t queueCount = {}; + uint32_t timestampValidBits = {}; + VULKAN_HPP_NAMESPACE::Extent3D minImageTransferGranularity = {}; + }; + + // wrapper struct for struct VkQueueFamilyProperties2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyProperties2.html + struct QueueFamilyProperties2 + { + using NativeType = VkQueueFamilyProperties2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyProperties2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyProperties2( VULKAN_HPP_NAMESPACE::QueueFamilyProperties queueFamilyProperties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queueFamilyProperties{ queueFamilyProperties_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyProperties2( QueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyProperties2( VkQueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyProperties2( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyProperties2 & operator=( QueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyProperties2 & operator=( VkQueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyProperties2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyProperties2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyProperties2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyProperties2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queueFamilyProperties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyProperties2 const & ) const = default; +#else + bool operator==( QueueFamilyProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyProperties == rhs.queueFamilyProperties ); +# endif + } + + bool operator!=( QueueFamilyProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyProperties2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::QueueFamilyProperties queueFamilyProperties = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyProperties2; + }; + + using QueueFamilyProperties2KHR = QueueFamilyProperties2; + + // wrapper struct for struct VkQueueFamilyQueryResultStatusPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyQueryResultStatusPropertiesKHR.html + struct QueueFamilyQueryResultStatusPropertiesKHR + { + using NativeType = VkQueueFamilyQueryResultStatusPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyQueryResultStatusPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyQueryResultStatusPropertiesKHR( VULKAN_HPP_NAMESPACE::Bool32 queryResultStatusSupport_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queryResultStatusSupport{ queryResultStatusSupport_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyQueryResultStatusPropertiesKHR( QueueFamilyQueryResultStatusPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyQueryResultStatusPropertiesKHR( VkQueueFamilyQueryResultStatusPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyQueryResultStatusPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyQueryResultStatusPropertiesKHR & operator=( QueueFamilyQueryResultStatusPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyQueryResultStatusPropertiesKHR & operator=( VkQueueFamilyQueryResultStatusPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyQueryResultStatusPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyQueryResultStatusPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyQueryResultStatusPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyQueryResultStatusPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queryResultStatusSupport ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyQueryResultStatusPropertiesKHR const & ) const = default; +#else + bool operator==( QueueFamilyQueryResultStatusPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queryResultStatusSupport == rhs.queryResultStatusSupport ); +# endif + } + + bool operator!=( QueueFamilyQueryResultStatusPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyQueryResultStatusPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 queryResultStatusSupport = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyQueryResultStatusPropertiesKHR; + }; + + // wrapper struct for struct VkQueueFamilyVideoPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkQueueFamilyVideoPropertiesKHR.html + struct QueueFamilyVideoPropertiesKHR + { + using NativeType = VkQueueFamilyVideoPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyVideoPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR QueueFamilyVideoPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoCodecOperations{ videoCodecOperations_ } + { + } + + VULKAN_HPP_CONSTEXPR QueueFamilyVideoPropertiesKHR( QueueFamilyVideoPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + QueueFamilyVideoPropertiesKHR( VkQueueFamilyVideoPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : QueueFamilyVideoPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + QueueFamilyVideoPropertiesKHR & operator=( QueueFamilyVideoPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + QueueFamilyVideoPropertiesKHR & operator=( VkQueueFamilyVideoPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkQueueFamilyVideoPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyVideoPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkQueueFamilyVideoPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkQueueFamilyVideoPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoCodecOperations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( QueueFamilyVideoPropertiesKHR const & ) const = default; +#else + bool operator==( QueueFamilyVideoPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoCodecOperations == rhs.videoCodecOperations ); +# endif + } + + bool operator!=( QueueFamilyVideoPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyVideoPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations = {}; + }; + + template <> + struct CppType + { + using Type = QueueFamilyVideoPropertiesKHR; + }; + + // wrapper struct for struct VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV.html + struct RayTracingPipelineClusterAccelerationStructureCreateInfoNV + { + using NativeType = VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RayTracingPipelineClusterAccelerationStructureCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 allowClusterAccelerationStructure_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , allowClusterAccelerationStructure{ allowClusterAccelerationStructure_ } + { + } + + VULKAN_HPP_CONSTEXPR RayTracingPipelineClusterAccelerationStructureCreateInfoNV( RayTracingPipelineClusterAccelerationStructureCreateInfoNV const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + RayTracingPipelineClusterAccelerationStructureCreateInfoNV( VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : RayTracingPipelineClusterAccelerationStructureCreateInfoNV( + *reinterpret_cast( &rhs ) ) + { + } + + RayTracingPipelineClusterAccelerationStructureCreateInfoNV & + operator=( RayTracingPipelineClusterAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RayTracingPipelineClusterAccelerationStructureCreateInfoNV & + operator=( VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineClusterAccelerationStructureCreateInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineClusterAccelerationStructureCreateInfoNV & + setAllowClusterAccelerationStructure( VULKAN_HPP_NAMESPACE::Bool32 allowClusterAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT + { + allowClusterAccelerationStructure = allowClusterAccelerationStructure_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, allowClusterAccelerationStructure ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RayTracingPipelineClusterAccelerationStructureCreateInfoNV const & ) const = default; +#else + bool operator==( RayTracingPipelineClusterAccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allowClusterAccelerationStructure == rhs.allowClusterAccelerationStructure ); +# endif + } + + bool operator!=( RayTracingPipelineClusterAccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 allowClusterAccelerationStructure = {}; + }; + + template <> + struct CppType + { + using Type = RayTracingPipelineClusterAccelerationStructureCreateInfoNV; + }; + + // wrapper struct for struct VkRayTracingShaderGroupCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingShaderGroupCreateInfoKHR.html + struct RayTracingShaderGroupCreateInfoKHR + { + using NativeType = VkRayTracingShaderGroupCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingShaderGroupCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoKHR( + VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral, + uint32_t generalShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR, + uint32_t closestHitShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR, + uint32_t anyHitShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR, + uint32_t intersectionShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR, + const void * pShaderGroupCaptureReplayHandle_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , generalShader{ generalShader_ } + , closestHitShader{ closestHitShader_ } + , anyHitShader{ anyHitShader_ } + , intersectionShader{ intersectionShader_ } + , pShaderGroupCaptureReplayHandle{ pShaderGroupCaptureReplayHandle_ } + { + } + + VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoKHR( RayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RayTracingShaderGroupCreateInfoKHR( VkRayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : RayTracingShaderGroupCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + RayTracingShaderGroupCreateInfoKHR & operator=( RayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RayTracingShaderGroupCreateInfoKHR & operator=( VkRayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT + { + generalShader = generalShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT + { + closestHitShader = closestHitShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT + { + anyHitShader = anyHitShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT + { + intersectionShader = intersectionShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & + setPShaderGroupCaptureReplayHandle( const void * pShaderGroupCaptureReplayHandle_ ) VULKAN_HPP_NOEXCEPT + { + pShaderGroupCaptureReplayHandle = pShaderGroupCaptureReplayHandle_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRayTracingShaderGroupCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingShaderGroupCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingShaderGroupCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRayTracingShaderGroupCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, generalShader, closestHitShader, anyHitShader, intersectionShader, pShaderGroupCaptureReplayHandle ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RayTracingShaderGroupCreateInfoKHR const & ) const = default; +#else + bool operator==( RayTracingShaderGroupCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( generalShader == rhs.generalShader ) && + ( closestHitShader == rhs.closestHitShader ) && ( anyHitShader == rhs.anyHitShader ) && ( intersectionShader == rhs.intersectionShader ) && + ( pShaderGroupCaptureReplayHandle == rhs.pShaderGroupCaptureReplayHandle ); +# endif + } + + bool operator!=( RayTracingShaderGroupCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingShaderGroupCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral; + uint32_t generalShader = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR; + uint32_t closestHitShader = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR; + uint32_t anyHitShader = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR; + uint32_t intersectionShader = VULKAN_HPP_NAMESPACE::ShaderUnusedKHR; + const void * pShaderGroupCaptureReplayHandle = {}; + }; + + template <> + struct CppType + { + using Type = RayTracingShaderGroupCreateInfoKHR; + }; + + // wrapper struct for struct VkRayTracingPipelineInterfaceCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingPipelineInterfaceCreateInfoKHR.html + struct RayTracingPipelineInterfaceCreateInfoKHR + { + using NativeType = VkRayTracingPipelineInterfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineInterfaceCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RayTracingPipelineInterfaceCreateInfoKHR( uint32_t maxPipelineRayPayloadSize_ = {}, + uint32_t maxPipelineRayHitAttributeSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxPipelineRayPayloadSize{ maxPipelineRayPayloadSize_ } + , maxPipelineRayHitAttributeSize{ maxPipelineRayHitAttributeSize_ } + { + } + + VULKAN_HPP_CONSTEXPR RayTracingPipelineInterfaceCreateInfoKHR( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RayTracingPipelineInterfaceCreateInfoKHR( VkRayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : RayTracingPipelineInterfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + RayTracingPipelineInterfaceCreateInfoKHR & operator=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RayTracingPipelineInterfaceCreateInfoKHR & operator=( VkRayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR & setMaxPipelineRayPayloadSize( uint32_t maxPipelineRayPayloadSize_ ) VULKAN_HPP_NOEXCEPT + { + maxPipelineRayPayloadSize = maxPipelineRayPayloadSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR & + setMaxPipelineRayHitAttributeSize( uint32_t maxPipelineRayHitAttributeSize_ ) VULKAN_HPP_NOEXCEPT + { + maxPipelineRayHitAttributeSize = maxPipelineRayHitAttributeSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRayTracingPipelineInterfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineInterfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineInterfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRayTracingPipelineInterfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxPipelineRayPayloadSize, maxPipelineRayHitAttributeSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RayTracingPipelineInterfaceCreateInfoKHR const & ) const = default; +#else + bool operator==( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPipelineRayPayloadSize == rhs.maxPipelineRayPayloadSize ) && + ( maxPipelineRayHitAttributeSize == rhs.maxPipelineRayHitAttributeSize ); +# endif + } + + bool operator!=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineInterfaceCreateInfoKHR; + const void * pNext = {}; + uint32_t maxPipelineRayPayloadSize = {}; + uint32_t maxPipelineRayHitAttributeSize = {}; + }; + + template <> + struct CppType + { + using Type = RayTracingPipelineInterfaceCreateInfoKHR; + }; + + // wrapper struct for struct VkRayTracingPipelineCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingPipelineCreateInfoKHR.html + struct RayTracingPipelineCreateInfoKHR + { + using NativeType = VkRayTracingPipelineCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoKHR( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, + uint32_t stageCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, + uint32_t groupCount_ = {}, + const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups_ = {}, + uint32_t maxPipelineRayRecursionDepth_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ = {}, + const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stageCount{ stageCount_ } + , pStages{ pStages_ } + , groupCount{ groupCount_ } + , pGroups{ pGroups_ } + , maxPipelineRayRecursionDepth{ maxPipelineRayRecursionDepth_ } + , pLibraryInfo{ pLibraryInfo_ } + , pLibraryInterface{ pLibraryInterface_ } + , pDynamicState{ pDynamicState_ } + , layout{ layout_ } + , basePipelineHandle{ basePipelineHandle_ } + , basePipelineIndex{ basePipelineIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoKHR( RayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RayTracingPipelineCreateInfoKHR( VkRayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : RayTracingPipelineCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RayTracingPipelineCreateInfoKHR( + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ = {}, + uint32_t maxPipelineRayRecursionDepth_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ = {}, + const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , stageCount( static_cast( stages_.size() ) ) + , pStages( stages_.data() ) + , groupCount( static_cast( groups_.size() ) ) + , pGroups( groups_.data() ) + , maxPipelineRayRecursionDepth( maxPipelineRayRecursionDepth_ ) + , pLibraryInfo( pLibraryInfo_ ) + , pLibraryInterface( pLibraryInterface_ ) + , pDynamicState( pDynamicState_ ) + , layout( layout_ ) + , basePipelineHandle( basePipelineHandle_ ) + , basePipelineIndex( basePipelineIndex_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RayTracingPipelineCreateInfoKHR & operator=( RayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RayTracingPipelineCreateInfoKHR & operator=( VkRayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = stageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & + setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT + { + pStages = pStages_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RayTracingPipelineCreateInfoKHR & + setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = static_cast( stages_.size() ); + pStages = stages_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT + { + groupCount = groupCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & + setPGroups( const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups_ ) VULKAN_HPP_NOEXCEPT + { + pGroups = pGroups_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RayTracingPipelineCreateInfoKHR & setGroups( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ ) VULKAN_HPP_NOEXCEPT + { + groupCount = static_cast( groups_.size() ); + pGroups = groups_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setMaxPipelineRayRecursionDepth( uint32_t maxPipelineRayRecursionDepth_ ) VULKAN_HPP_NOEXCEPT + { + maxPipelineRayRecursionDepth = maxPipelineRayRecursionDepth_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & + setPLibraryInfo( const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ ) VULKAN_HPP_NOEXCEPT + { + pLibraryInfo = pLibraryInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & + setPLibraryInterface( const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ ) VULKAN_HPP_NOEXCEPT + { + pLibraryInterface = pLibraryInterface_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & + setPDynamicState( const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ ) VULKAN_HPP_NOEXCEPT + { + pDynamicState = pDynamicState_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineHandle = basePipelineHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineIndex = basePipelineIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRayTracingPipelineCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRayTracingPipelineCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + stageCount, + pStages, + groupCount, + pGroups, + maxPipelineRayRecursionDepth, + pLibraryInfo, + pLibraryInterface, + pDynamicState, + layout, + basePipelineHandle, + basePipelineIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RayTracingPipelineCreateInfoKHR const & ) const = default; +#else + bool operator==( RayTracingPipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && + ( groupCount == rhs.groupCount ) && ( pGroups == rhs.pGroups ) && ( maxPipelineRayRecursionDepth == rhs.maxPipelineRayRecursionDepth ) && + ( pLibraryInfo == rhs.pLibraryInfo ) && ( pLibraryInterface == rhs.pLibraryInterface ) && ( pDynamicState == rhs.pDynamicState ) && + ( layout == rhs.layout ) && ( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex ); +# endif + } + + bool operator!=( RayTracingPipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; + uint32_t stageCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; + uint32_t groupCount = {}; + const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups = {}; + uint32_t maxPipelineRayRecursionDepth = {}; + const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo = {}; + const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface = {}; + const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; + int32_t basePipelineIndex = {}; + }; + + template <> + struct CppType + { + using Type = RayTracingPipelineCreateInfoKHR; + }; + + // wrapper struct for struct VkRayTracingShaderGroupCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingShaderGroupCreateInfoNV.html + struct RayTracingShaderGroupCreateInfoNV + { + using NativeType = VkRayTracingShaderGroupCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingShaderGroupCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoNV( + VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral, + uint32_t generalShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedNV, + uint32_t closestHitShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedNV, + uint32_t anyHitShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedNV, + uint32_t intersectionShader_ = VULKAN_HPP_NAMESPACE::ShaderUnusedNV, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , type{ type_ } + , generalShader{ generalShader_ } + , closestHitShader{ closestHitShader_ } + , anyHitShader{ anyHitShader_ } + , intersectionShader{ intersectionShader_ } + { + } + + VULKAN_HPP_CONSTEXPR RayTracingShaderGroupCreateInfoNV( RayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RayTracingShaderGroupCreateInfoNV( VkRayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : RayTracingShaderGroupCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + RayTracingShaderGroupCreateInfoNV & operator=( RayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RayTracingShaderGroupCreateInfoNV & operator=( VkRayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT + { + type = type_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT + { + generalShader = generalShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT + { + closestHitShader = closestHitShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT + { + anyHitShader = anyHitShader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT + { + intersectionShader = intersectionShader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRayTracingShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingShaderGroupCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRayTracingShaderGroupCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, type, generalShader, closestHitShader, anyHitShader, intersectionShader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RayTracingShaderGroupCreateInfoNV const & ) const = default; +#else + bool operator==( RayTracingShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( generalShader == rhs.generalShader ) && + ( closestHitShader == rhs.closestHitShader ) && ( anyHitShader == rhs.anyHitShader ) && ( intersectionShader == rhs.intersectionShader ); +# endif + } + + bool operator!=( RayTracingShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingShaderGroupCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type = VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR::eGeneral; + uint32_t generalShader = VULKAN_HPP_NAMESPACE::ShaderUnusedNV; + uint32_t closestHitShader = VULKAN_HPP_NAMESPACE::ShaderUnusedNV; + uint32_t anyHitShader = VULKAN_HPP_NAMESPACE::ShaderUnusedNV; + uint32_t intersectionShader = VULKAN_HPP_NAMESPACE::ShaderUnusedNV; + }; + + template <> + struct CppType + { + using Type = RayTracingShaderGroupCreateInfoNV; + }; + + // wrapper struct for struct VkRayTracingPipelineCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRayTracingPipelineCreateInfoNV.html + struct RayTracingPipelineCreateInfoNV + { + using NativeType = VkRayTracingPipelineCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoNV( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {}, + uint32_t stageCount_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ = {}, + uint32_t groupCount_ = {}, + const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups_ = {}, + uint32_t maxRecursionDepth_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stageCount{ stageCount_ } + , pStages{ pStages_ } + , groupCount{ groupCount_ } + , pGroups{ pGroups_ } + , maxRecursionDepth{ maxRecursionDepth_ } + , layout{ layout_ } + , basePipelineHandle{ basePipelineHandle_ } + , basePipelineIndex{ basePipelineIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoNV( RayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RayTracingPipelineCreateInfoNV( VkRayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : RayTracingPipelineCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RayTracingPipelineCreateInfoNV( + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ = {}, + uint32_t maxRecursionDepth_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ = {}, + int32_t basePipelineIndex_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , stageCount( static_cast( stages_.size() ) ) + , pStages( stages_.data() ) + , groupCount( static_cast( groups_.size() ) ) + , pGroups( groups_.data() ) + , maxRecursionDepth( maxRecursionDepth_ ) + , layout( layout_ ) + , basePipelineHandle( basePipelineHandle_ ) + , basePipelineIndex( basePipelineIndex_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RayTracingPipelineCreateInfoNV & operator=( RayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RayTracingPipelineCreateInfoNV & operator=( VkRayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = stageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & + setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT + { + pStages = pStages_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RayTracingPipelineCreateInfoNV & + setStages( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stages_ ) VULKAN_HPP_NOEXCEPT + { + stageCount = static_cast( stages_.size() ); + pStages = stages_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT + { + groupCount = groupCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & + setPGroups( const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups_ ) VULKAN_HPP_NOEXCEPT + { + pGroups = pGroups_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RayTracingPipelineCreateInfoNV & setGroups( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & groups_ ) VULKAN_HPP_NOEXCEPT + { + groupCount = static_cast( groups_.size() ); + pGroups = groups_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setMaxRecursionDepth( uint32_t maxRecursionDepth_ ) VULKAN_HPP_NOEXCEPT + { + maxRecursionDepth = maxRecursionDepth_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineHandle = basePipelineHandle_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT + { + basePipelineIndex = basePipelineIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRayTracingPipelineCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRayTracingPipelineCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRayTracingPipelineCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, stageCount, pStages, groupCount, pGroups, maxRecursionDepth, layout, basePipelineHandle, basePipelineIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RayTracingPipelineCreateInfoNV const & ) const = default; +#else + bool operator==( RayTracingPipelineCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && + ( groupCount == rhs.groupCount ) && ( pGroups == rhs.pGroups ) && ( maxRecursionDepth == rhs.maxRecursionDepth ) && ( layout == rhs.layout ) && + ( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex ); +# endif + } + + bool operator!=( RayTracingPipelineCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRayTracingPipelineCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags = {}; + uint32_t stageCount = {}; + const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages = {}; + uint32_t groupCount = {}; + const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups = {}; + uint32_t maxRecursionDepth = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {}; + int32_t basePipelineIndex = {}; + }; + + template <> + struct CppType + { + using Type = RayTracingPipelineCreateInfoNV; + }; + + // wrapper struct for struct VkRefreshCycleDurationGOOGLE, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRefreshCycleDurationGOOGLE.html + struct RefreshCycleDurationGOOGLE + { + using NativeType = VkRefreshCycleDurationGOOGLE; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RefreshCycleDurationGOOGLE( uint64_t refreshDuration_ = {} ) VULKAN_HPP_NOEXCEPT : refreshDuration{ refreshDuration_ } {} + + VULKAN_HPP_CONSTEXPR RefreshCycleDurationGOOGLE( RefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RefreshCycleDurationGOOGLE( VkRefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + : RefreshCycleDurationGOOGLE( *reinterpret_cast( &rhs ) ) + { + } + + RefreshCycleDurationGOOGLE & operator=( RefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RefreshCycleDurationGOOGLE & operator=( VkRefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkRefreshCycleDurationGOOGLE const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRefreshCycleDurationGOOGLE &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRefreshCycleDurationGOOGLE const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRefreshCycleDurationGOOGLE *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( refreshDuration ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RefreshCycleDurationGOOGLE const & ) const = default; +#else + bool operator==( RefreshCycleDurationGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( refreshDuration == rhs.refreshDuration ); +# endif + } + + bool operator!=( RefreshCycleDurationGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint64_t refreshDuration = {}; + }; + + // wrapper struct for struct VkReleaseCapturedPipelineDataInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkReleaseCapturedPipelineDataInfoKHR.html + struct ReleaseCapturedPipelineDataInfoKHR + { + using NativeType = VkReleaseCapturedPipelineDataInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eReleaseCapturedPipelineDataInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ReleaseCapturedPipelineDataInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pipeline{ pipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR ReleaseCapturedPipelineDataInfoKHR( ReleaseCapturedPipelineDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ReleaseCapturedPipelineDataInfoKHR( VkReleaseCapturedPipelineDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ReleaseCapturedPipelineDataInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + ReleaseCapturedPipelineDataInfoKHR & operator=( ReleaseCapturedPipelineDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ReleaseCapturedPipelineDataInfoKHR & operator=( VkReleaseCapturedPipelineDataInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ReleaseCapturedPipelineDataInfoKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ReleaseCapturedPipelineDataInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkReleaseCapturedPipelineDataInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkReleaseCapturedPipelineDataInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkReleaseCapturedPipelineDataInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkReleaseCapturedPipelineDataInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ReleaseCapturedPipelineDataInfoKHR const & ) const = default; +#else + bool operator==( ReleaseCapturedPipelineDataInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ); +# endif + } + + bool operator!=( ReleaseCapturedPipelineDataInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eReleaseCapturedPipelineDataInfoKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + }; + + template <> + struct CppType + { + using Type = ReleaseCapturedPipelineDataInfoKHR; + }; + + // wrapper struct for struct VkReleaseSwapchainImagesInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkReleaseSwapchainImagesInfoKHR.html + struct ReleaseSwapchainImagesInfoKHR + { + using NativeType = VkReleaseSwapchainImagesInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eReleaseSwapchainImagesInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ReleaseSwapchainImagesInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {}, + uint32_t imageIndexCount_ = {}, + const uint32_t * pImageIndices_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchain{ swapchain_ } + , imageIndexCount{ imageIndexCount_ } + , pImageIndices{ pImageIndices_ } + { + } + + VULKAN_HPP_CONSTEXPR ReleaseSwapchainImagesInfoKHR( ReleaseSwapchainImagesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ReleaseSwapchainImagesInfoKHR( VkReleaseSwapchainImagesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : ReleaseSwapchainImagesInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ReleaseSwapchainImagesInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageIndices_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchain( swapchain_ ), imageIndexCount( static_cast( imageIndices_.size() ) ), pImageIndices( imageIndices_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ReleaseSwapchainImagesInfoKHR & operator=( ReleaseSwapchainImagesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ReleaseSwapchainImagesInfoKHR & operator=( VkReleaseSwapchainImagesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ReleaseSwapchainImagesInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ReleaseSwapchainImagesInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT + { + swapchain = swapchain_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ReleaseSwapchainImagesInfoKHR & setImageIndexCount( uint32_t imageIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + imageIndexCount = imageIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ReleaseSwapchainImagesInfoKHR & setPImageIndices( const uint32_t * pImageIndices_ ) VULKAN_HPP_NOEXCEPT + { + pImageIndices = pImageIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ReleaseSwapchainImagesInfoKHR & setImageIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & imageIndices_ ) VULKAN_HPP_NOEXCEPT + { + imageIndexCount = static_cast( imageIndices_.size() ); + pImageIndices = imageIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkReleaseSwapchainImagesInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkReleaseSwapchainImagesInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkReleaseSwapchainImagesInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkReleaseSwapchainImagesInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchain, imageIndexCount, pImageIndices ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ReleaseSwapchainImagesInfoKHR const & ) const = default; +#else + bool operator==( ReleaseSwapchainImagesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) && ( imageIndexCount == rhs.imageIndexCount ) && + ( pImageIndices == rhs.pImageIndices ); +# endif + } + + bool operator!=( ReleaseSwapchainImagesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eReleaseSwapchainImagesInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {}; + uint32_t imageIndexCount = {}; + const uint32_t * pImageIndices = {}; + }; + + template <> + struct CppType + { + using Type = ReleaseSwapchainImagesInfoKHR; + }; + + using ReleaseSwapchainImagesInfoEXT = ReleaseSwapchainImagesInfoKHR; + + // wrapper struct for struct VkRenderPassAttachmentBeginInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassAttachmentBeginInfo.html + struct RenderPassAttachmentBeginInfo + { + using NativeType = VkRenderPassAttachmentBeginInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassAttachmentBeginInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassAttachmentBeginInfo( uint32_t attachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachmentCount{ attachmentCount_ } + , pAttachments{ pAttachments_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassAttachmentBeginInfo( RenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassAttachmentBeginInfo( VkRenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassAttachmentBeginInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassAttachmentBeginInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), attachmentCount( static_cast( attachments_.size() ) ), pAttachments( attachments_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassAttachmentBeginInfo & operator=( RenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassAttachmentBeginInfo & operator=( VkRenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = attachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pAttachments = pAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassAttachmentBeginInfo & + setAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = static_cast( attachments_.size() ); + pAttachments = attachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassAttachmentBeginInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassAttachmentBeginInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassAttachmentBeginInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassAttachmentBeginInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, attachmentCount, pAttachments ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassAttachmentBeginInfo const & ) const = default; +#else + bool operator==( RenderPassAttachmentBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ); +# endif + } + + bool operator!=( RenderPassAttachmentBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassAttachmentBeginInfo; + const void * pNext = {}; + uint32_t attachmentCount = {}; + const VULKAN_HPP_NAMESPACE::ImageView * pAttachments = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassAttachmentBeginInfo; + }; + + using RenderPassAttachmentBeginInfoKHR = RenderPassAttachmentBeginInfo; + + // wrapper struct for struct VkRenderPassBeginInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassBeginInfo.html + struct RenderPassBeginInfo + { + using NativeType = VkRenderPassBeginInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassBeginInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, + VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ = {}, + VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {}, + uint32_t clearValueCount_ = {}, + const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , renderPass{ renderPass_ } + , framebuffer{ framebuffer_ } + , renderArea{ renderArea_ } + , clearValueCount{ clearValueCount_ } + , pClearValues{ pClearValues_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo( RenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassBeginInfo( VkRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT : RenderPassBeginInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassBeginInfo( VULKAN_HPP_NAMESPACE::RenderPass renderPass_, + VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_, + VULKAN_HPP_NAMESPACE::Rect2D renderArea_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & clearValues_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , renderPass( renderPass_ ) + , framebuffer( framebuffer_ ) + , renderArea( renderArea_ ) + , clearValueCount( static_cast( clearValues_.size() ) ) + , pClearValues( clearValues_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassBeginInfo & operator=( RenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassBeginInfo & operator=( VkRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT + { + renderPass = renderPass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT + { + framebuffer = framebuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT + { + renderArea = renderArea_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setClearValueCount( uint32_t clearValueCount_ ) VULKAN_HPP_NOEXCEPT + { + clearValueCount = clearValueCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setPClearValues( const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues_ ) VULKAN_HPP_NOEXCEPT + { + pClearValues = pClearValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassBeginInfo & + setClearValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & clearValues_ ) VULKAN_HPP_NOEXCEPT + { + clearValueCount = static_cast( clearValues_.size() ); + pClearValues = clearValues_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassBeginInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassBeginInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, renderPass, framebuffer, renderArea, clearValueCount, pClearValues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassBeginInfo const & ) const = default; +#else + bool operator==( RenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) && ( framebuffer == rhs.framebuffer ) && + ( renderArea == rhs.renderArea ) && ( clearValueCount == rhs.clearValueCount ) && ( pClearValues == rhs.pClearValues ); +# endif + } + + bool operator!=( RenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassBeginInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; + VULKAN_HPP_NAMESPACE::Framebuffer framebuffer = {}; + VULKAN_HPP_NAMESPACE::Rect2D renderArea = {}; + uint32_t clearValueCount = {}; + const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassBeginInfo; + }; + + // wrapper struct for struct VkSubpassDescription, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDescription.html + struct SubpassDescription + { + using NativeType = VkSubpassDescription; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassDescription( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + uint32_t inputAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments_ = {}, + uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ = {}, + uint32_t preserveAttachmentCount_ = {}, + const uint32_t * pPreserveAttachments_ = {} ) VULKAN_HPP_NOEXCEPT + : flags{ flags_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , inputAttachmentCount{ inputAttachmentCount_ } + , pInputAttachments{ pInputAttachments_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachments{ pColorAttachments_ } + , pResolveAttachments{ pResolveAttachments_ } + , pDepthStencilAttachment{ pDepthStencilAttachment_ } + , preserveAttachmentCount{ preserveAttachmentCount_ } + , pPreserveAttachments{ pPreserveAttachments_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassDescription( SubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassDescription( VkSubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDescription( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ = {} ) + : flags( flags_ ) + , pipelineBindPoint( pipelineBindPoint_ ) + , inputAttachmentCount( static_cast( inputAttachments_.size() ) ) + , pInputAttachments( inputAttachments_.data() ) + , colorAttachmentCount( static_cast( colorAttachments_.size() ) ) + , pColorAttachments( colorAttachments_.data() ) + , pResolveAttachments( resolveAttachments_.data() ) + , pDepthStencilAttachment( pDepthStencilAttachment_ ) + , preserveAttachmentCount( static_cast( preserveAttachments_.size() ) ) + , pPreserveAttachments( preserveAttachments_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( resolveAttachments_.empty() || ( colorAttachments_.size() == resolveAttachments_.size() ) ); +# else + if ( !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() ) ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::SubpassDescription::SubpassDescription: !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SubpassDescription & operator=( SubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassDescription & operator=( VkSubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + inputAttachmentCount = inputAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & + setPInputAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pInputAttachments = pInputAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription & setInputAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_ ) VULKAN_HPP_NOEXCEPT + { + inputAttachmentCount = static_cast( inputAttachments_.size() ); + pInputAttachments = inputAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & + setPColorAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachments = pColorAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription & setColorAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachments_.size() ); + pColorAttachments = colorAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & + setPResolveAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pResolveAttachments = pResolveAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription & setResolveAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( resolveAttachments_.size() ); + pResolveAttachments = resolveAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & + setPDepthStencilAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ ) VULKAN_HPP_NOEXCEPT + { + pDepthStencilAttachment = pDepthStencilAttachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + preserveAttachmentCount = preserveAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pPreserveAttachments = pPreserveAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription & + setPreserveAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + preserveAttachmentCount = static_cast( preserveAttachments_.size() ); + pPreserveAttachments = preserveAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassDescription const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDescription &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDescription const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassDescription *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( flags, + pipelineBindPoint, + inputAttachmentCount, + pInputAttachments, + colorAttachmentCount, + pColorAttachments, + pResolveAttachments, + pDepthStencilAttachment, + preserveAttachmentCount, + pPreserveAttachments ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassDescription const & ) const = default; +#else + bool operator==( SubpassDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && ( inputAttachmentCount == rhs.inputAttachmentCount ) && + ( pInputAttachments == rhs.pInputAttachments ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachments == rhs.pColorAttachments ) && ( pResolveAttachments == rhs.pResolveAttachments ) && + ( pDepthStencilAttachment == rhs.pDepthStencilAttachment ) && ( preserveAttachmentCount == rhs.preserveAttachmentCount ) && + ( pPreserveAttachments == rhs.pPreserveAttachments ); +# endif + } + + bool operator!=( SubpassDescription const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + uint32_t inputAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment = {}; + uint32_t preserveAttachmentCount = {}; + const uint32_t * pPreserveAttachments = {}; + }; + + // wrapper struct for struct VkSubpassDependency, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDependency.html + struct SubpassDependency + { + using NativeType = VkSubpassDependency; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassDependency( uint32_t srcSubpass_ = {}, + uint32_t dstSubpass_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {} ) VULKAN_HPP_NOEXCEPT + : srcSubpass{ srcSubpass_ } + , dstSubpass{ dstSubpass_ } + , srcStageMask{ srcStageMask_ } + , dstStageMask{ dstStageMask_ } + , srcAccessMask{ srcAccessMask_ } + , dstAccessMask{ dstAccessMask_ } + , dependencyFlags{ dependencyFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassDependency( SubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassDependency( VkSubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDependency( *reinterpret_cast( &rhs ) ) {} + + SubpassDependency & operator=( SubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassDependency & operator=( VkSubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT + { + srcSubpass = srcSubpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT + { + dstSubpass = dstSubpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT + { + srcStageMask = srcStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + dstStageMask = dstStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT + { + dependencyFlags = dependencyFlags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassDependency const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDependency &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDependency const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassDependency *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( srcSubpass, dstSubpass, srcStageMask, dstStageMask, srcAccessMask, dstAccessMask, dependencyFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassDependency const & ) const = default; +#else + bool operator==( SubpassDependency const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( srcSubpass == rhs.srcSubpass ) && ( dstSubpass == rhs.dstSubpass ) && ( srcStageMask == rhs.srcStageMask ) && + ( dstStageMask == rhs.dstStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) && + ( dependencyFlags == rhs.dependencyFlags ); +# endif + } + + bool operator!=( SubpassDependency const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t srcSubpass = {}; + uint32_t dstSubpass = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {}; + }; + + // wrapper struct for struct VkRenderPassCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreateInfo.html + struct RenderPassCreateInfo + { + using NativeType = VkRenderPassCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassCreateInfo( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ = {}, + uint32_t attachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments_ = {}, + uint32_t subpassCount_ = {}, + const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses_ = {}, + uint32_t dependencyCount_ = {}, + const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , attachmentCount{ attachmentCount_ } + , pAttachments{ pAttachments_ } + , subpassCount{ subpassCount_ } + , pSubpasses{ pSubpasses_ } + , dependencyCount{ dependencyCount_ } + , pDependencies{ pDependencies_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassCreateInfo( RenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassCreateInfo( VkRenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , attachmentCount( static_cast( attachments_.size() ) ) + , pAttachments( attachments_.data() ) + , subpassCount( static_cast( subpasses_.size() ) ) + , pSubpasses( subpasses_.data() ) + , dependencyCount( static_cast( dependencies_.size() ) ) + , pDependencies( dependencies_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassCreateInfo & operator=( RenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassCreateInfo & operator=( VkRenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = attachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pAttachments = pAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo & setAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = static_cast( attachments_.size() ); + pAttachments = attachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT + { + subpassCount = subpassCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPSubpasses( const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses_ ) VULKAN_HPP_NOEXCEPT + { + pSubpasses = pSubpasses_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo & + setSubpasses( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ ) VULKAN_HPP_NOEXCEPT + { + subpassCount = static_cast( subpasses_.size() ); + pSubpasses = subpasses_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT + { + dependencyCount = dependencyCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPDependencies( const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies_ ) VULKAN_HPP_NOEXCEPT + { + pDependencies = pDependencies_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo & + setDependencies( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ ) VULKAN_HPP_NOEXCEPT + { + dependencyCount = static_cast( dependencies_.size() ); + pDependencies = dependencies_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, attachmentCount, pAttachments, subpassCount, pSubpasses, dependencyCount, pDependencies ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassCreateInfo const & ) const = default; +#else + bool operator==( RenderPassCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( attachmentCount == rhs.attachmentCount ) && + ( pAttachments == rhs.pAttachments ) && ( subpassCount == rhs.subpassCount ) && ( pSubpasses == rhs.pSubpasses ) && + ( dependencyCount == rhs.dependencyCount ) && ( pDependencies == rhs.pDependencies ); +# endif + } + + bool operator!=( RenderPassCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags = {}; + uint32_t attachmentCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments = {}; + uint32_t subpassCount = {}; + const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses = {}; + uint32_t dependencyCount = {}; + const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassCreateInfo; + }; + + // wrapper struct for struct VkSubpassDescription2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDescription2.html + struct SubpassDescription2 + { + using NativeType = VkSubpassDescription2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDescription2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassDescription2( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics, + uint32_t viewMask_ = {}, + uint32_t inputAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments_ = {}, + uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ = {}, + uint32_t preserveAttachmentCount_ = {}, + const uint32_t * pPreserveAttachments_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , pipelineBindPoint{ pipelineBindPoint_ } + , viewMask{ viewMask_ } + , inputAttachmentCount{ inputAttachmentCount_ } + , pInputAttachments{ pInputAttachments_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachments{ pColorAttachments_ } + , pResolveAttachments{ pResolveAttachments_ } + , pDepthStencilAttachment{ pDepthStencilAttachment_ } + , preserveAttachmentCount{ preserveAttachmentCount_ } + , pPreserveAttachments{ pPreserveAttachments_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassDescription2( SubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassDescription2( VkSubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDescription2( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription2( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_, + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_, + uint32_t viewMask_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , pipelineBindPoint( pipelineBindPoint_ ) + , viewMask( viewMask_ ) + , inputAttachmentCount( static_cast( inputAttachments_.size() ) ) + , pInputAttachments( inputAttachments_.data() ) + , colorAttachmentCount( static_cast( colorAttachments_.size() ) ) + , pColorAttachments( colorAttachments_.data() ) + , pResolveAttachments( resolveAttachments_.data() ) + , pDepthStencilAttachment( pDepthStencilAttachment_ ) + , preserveAttachmentCount( static_cast( preserveAttachments_.size() ) ) + , pPreserveAttachments( preserveAttachments_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( resolveAttachments_.empty() || ( colorAttachments_.size() == resolveAttachments_.size() ) ); +# else + if ( !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() ) ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::SubpassDescription2::SubpassDescription2: !resolveAttachments_.empty() && ( colorAttachments_.size() != resolveAttachments_.size() )" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SubpassDescription2 & operator=( SubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassDescription2 & operator=( VkSubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT + { + pipelineBindPoint = pipelineBindPoint_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT + { + viewMask = viewMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + inputAttachmentCount = inputAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & + setPInputAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pInputAttachments = pInputAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription2 & setInputAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & inputAttachments_ ) VULKAN_HPP_NOEXCEPT + { + inputAttachmentCount = static_cast( inputAttachments_.size() ); + pInputAttachments = inputAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & + setPColorAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachments = pColorAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription2 & setColorAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachments_.size() ); + pColorAttachments = colorAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & + setPResolveAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pResolveAttachments = pResolveAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription2 & setResolveAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & resolveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( resolveAttachments_.size() ); + pResolveAttachments = resolveAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & + setPDepthStencilAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ ) VULKAN_HPP_NOEXCEPT + { + pDepthStencilAttachment = pDepthStencilAttachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + preserveAttachmentCount = preserveAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pPreserveAttachments = pPreserveAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubpassDescription2 & + setPreserveAttachments( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & preserveAttachments_ ) VULKAN_HPP_NOEXCEPT + { + preserveAttachmentCount = static_cast( preserveAttachments_.size() ); + pPreserveAttachments = preserveAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassDescription2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDescription2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDescription2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassDescription2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + pipelineBindPoint, + viewMask, + inputAttachmentCount, + pInputAttachments, + colorAttachmentCount, + pColorAttachments, + pResolveAttachments, + pDepthStencilAttachment, + preserveAttachmentCount, + pPreserveAttachments ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassDescription2 const & ) const = default; +#else + bool operator==( SubpassDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) && + ( viewMask == rhs.viewMask ) && ( inputAttachmentCount == rhs.inputAttachmentCount ) && ( pInputAttachments == rhs.pInputAttachments ) && + ( colorAttachmentCount == rhs.colorAttachmentCount ) && ( pColorAttachments == rhs.pColorAttachments ) && + ( pResolveAttachments == rhs.pResolveAttachments ) && ( pDepthStencilAttachment == rhs.pDepthStencilAttachment ) && + ( preserveAttachmentCount == rhs.preserveAttachmentCount ) && ( pPreserveAttachments == rhs.pPreserveAttachments ); +# endif + } + + bool operator!=( SubpassDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassDescription2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags = {}; + VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint = VULKAN_HPP_NAMESPACE::PipelineBindPoint::eGraphics; + uint32_t viewMask = {}; + uint32_t inputAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments = {}; + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment = {}; + uint32_t preserveAttachmentCount = {}; + const uint32_t * pPreserveAttachments = {}; + }; + + template <> + struct CppType + { + using Type = SubpassDescription2; + }; + + using SubpassDescription2KHR = SubpassDescription2; + + // wrapper struct for struct VkSubpassDependency2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDependency2.html + struct SubpassDependency2 + { + using NativeType = VkSubpassDependency2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDependency2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassDependency2( uint32_t srcSubpass_ = {}, + uint32_t dstSubpass_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {}, + int32_t viewOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcSubpass{ srcSubpass_ } + , dstSubpass{ dstSubpass_ } + , srcStageMask{ srcStageMask_ } + , dstStageMask{ dstStageMask_ } + , srcAccessMask{ srcAccessMask_ } + , dstAccessMask{ dstAccessMask_ } + , dependencyFlags{ dependencyFlags_ } + , viewOffset{ viewOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassDependency2( SubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassDependency2( VkSubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassDependency2( *reinterpret_cast( &rhs ) ) {} + + SubpassDependency2 & operator=( SubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassDependency2 & operator=( VkSubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT + { + srcSubpass = srcSubpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT + { + dstSubpass = dstSubpass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT + { + srcStageMask = srcStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + dstStageMask = dstStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT + { + dependencyFlags = dependencyFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setViewOffset( int32_t viewOffset_ ) VULKAN_HPP_NOEXCEPT + { + viewOffset = viewOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassDependency2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDependency2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDependency2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassDependency2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcSubpass, dstSubpass, srcStageMask, dstStageMask, srcAccessMask, dstAccessMask, dependencyFlags, viewOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassDependency2 const & ) const = default; +#else + bool operator==( SubpassDependency2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubpass == rhs.srcSubpass ) && ( dstSubpass == rhs.dstSubpass ) && + ( srcStageMask == rhs.srcStageMask ) && ( dstStageMask == rhs.dstStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && + ( dstAccessMask == rhs.dstAccessMask ) && ( dependencyFlags == rhs.dependencyFlags ) && ( viewOffset == rhs.viewOffset ); +# endif + } + + bool operator!=( SubpassDependency2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassDependency2; + const void * pNext = {}; + uint32_t srcSubpass = {}; + uint32_t dstSubpass = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {}; + VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {}; + int32_t viewOffset = {}; + }; + + template <> + struct CppType + { + using Type = SubpassDependency2; + }; + + using SubpassDependency2KHR = SubpassDependency2; + + // wrapper struct for struct VkRenderPassCreateInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreateInfo2.html + struct RenderPassCreateInfo2 + { + using NativeType = VkRenderPassCreateInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassCreateInfo2( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ = {}, + uint32_t attachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments_ = {}, + uint32_t subpassCount_ = {}, + const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses_ = {}, + uint32_t dependencyCount_ = {}, + const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies_ = {}, + uint32_t correlatedViewMaskCount_ = {}, + const uint32_t * pCorrelatedViewMasks_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , attachmentCount{ attachmentCount_ } + , pAttachments{ pAttachments_ } + , subpassCount{ subpassCount_ } + , pSubpasses{ pSubpasses_ } + , dependencyCount{ dependencyCount_ } + , pDependencies{ pDependencies_ } + , correlatedViewMaskCount{ correlatedViewMaskCount_ } + , pCorrelatedViewMasks{ pCorrelatedViewMasks_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassCreateInfo2( RenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassCreateInfo2( VkRenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassCreateInfo2( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo2( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlatedViewMasks_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , attachmentCount( static_cast( attachments_.size() ) ) + , pAttachments( attachments_.data() ) + , subpassCount( static_cast( subpasses_.size() ) ) + , pSubpasses( subpasses_.data() ) + , dependencyCount( static_cast( dependencies_.size() ) ) + , pDependencies( dependencies_.data() ) + , correlatedViewMaskCount( static_cast( correlatedViewMasks_.size() ) ) + , pCorrelatedViewMasks( correlatedViewMasks_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassCreateInfo2 & operator=( RenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassCreateInfo2 & operator=( VkRenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = attachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPAttachments( const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pAttachments = pAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo2 & setAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachments_ ) VULKAN_HPP_NOEXCEPT + { + attachmentCount = static_cast( attachments_.size() ); + pAttachments = attachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT + { + subpassCount = subpassCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPSubpasses( const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses_ ) VULKAN_HPP_NOEXCEPT + { + pSubpasses = pSubpasses_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo2 & + setSubpasses( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & subpasses_ ) VULKAN_HPP_NOEXCEPT + { + subpassCount = static_cast( subpasses_.size() ); + pSubpasses = subpasses_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT + { + dependencyCount = dependencyCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPDependencies( const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies_ ) VULKAN_HPP_NOEXCEPT + { + pDependencies = pDependencies_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo2 & + setDependencies( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & dependencies_ ) VULKAN_HPP_NOEXCEPT + { + dependencyCount = static_cast( dependencies_.size() ); + pDependencies = dependencies_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setCorrelatedViewMaskCount( uint32_t correlatedViewMaskCount_ ) VULKAN_HPP_NOEXCEPT + { + correlatedViewMaskCount = correlatedViewMaskCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPCorrelatedViewMasks( const uint32_t * pCorrelatedViewMasks_ ) VULKAN_HPP_NOEXCEPT + { + pCorrelatedViewMasks = pCorrelatedViewMasks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassCreateInfo2 & + setCorrelatedViewMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlatedViewMasks_ ) VULKAN_HPP_NOEXCEPT + { + correlatedViewMaskCount = static_cast( correlatedViewMasks_.size() ); + pCorrelatedViewMasks = correlatedViewMasks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassCreateInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreateInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreateInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassCreateInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + attachmentCount, + pAttachments, + subpassCount, + pSubpasses, + dependencyCount, + pDependencies, + correlatedViewMaskCount, + pCorrelatedViewMasks ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassCreateInfo2 const & ) const = default; +#else + bool operator==( RenderPassCreateInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( attachmentCount == rhs.attachmentCount ) && + ( pAttachments == rhs.pAttachments ) && ( subpassCount == rhs.subpassCount ) && ( pSubpasses == rhs.pSubpasses ) && + ( dependencyCount == rhs.dependencyCount ) && ( pDependencies == rhs.pDependencies ) && + ( correlatedViewMaskCount == rhs.correlatedViewMaskCount ) && ( pCorrelatedViewMasks == rhs.pCorrelatedViewMasks ); +# endif + } + + bool operator!=( RenderPassCreateInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreateInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags = {}; + uint32_t attachmentCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments = {}; + uint32_t subpassCount = {}; + const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses = {}; + uint32_t dependencyCount = {}; + const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies = {}; + uint32_t correlatedViewMaskCount = {}; + const uint32_t * pCorrelatedViewMasks = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassCreateInfo2; + }; + + using RenderPassCreateInfo2KHR = RenderPassCreateInfo2; + + // wrapper struct for struct VkRenderPassCreationControlEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreationControlEXT.html + struct RenderPassCreationControlEXT + { + using NativeType = VkRenderPassCreationControlEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreationControlEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassCreationControlEXT( VULKAN_HPP_NAMESPACE::Bool32 disallowMerging_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , disallowMerging{ disallowMerging_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassCreationControlEXT( RenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassCreationControlEXT( VkRenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassCreationControlEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassCreationControlEXT & operator=( RenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassCreationControlEXT & operator=( VkRenderPassCreationControlEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassCreationControlEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreationControlEXT & setDisallowMerging( VULKAN_HPP_NAMESPACE::Bool32 disallowMerging_ ) VULKAN_HPP_NOEXCEPT + { + disallowMerging = disallowMerging_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassCreationControlEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreationControlEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreationControlEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassCreationControlEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, disallowMerging ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassCreationControlEXT const & ) const = default; +#else + bool operator==( RenderPassCreationControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( disallowMerging == rhs.disallowMerging ); +# endif + } + + bool operator!=( RenderPassCreationControlEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreationControlEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 disallowMerging = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassCreationControlEXT; + }; + + // wrapper struct for struct VkRenderPassCreationFeedbackInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreationFeedbackInfoEXT.html + struct RenderPassCreationFeedbackInfoEXT + { + using NativeType = VkRenderPassCreationFeedbackInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackInfoEXT( uint32_t postMergeSubpassCount_ = {} ) VULKAN_HPP_NOEXCEPT + : postMergeSubpassCount{ postMergeSubpassCount_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackInfoEXT( RenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassCreationFeedbackInfoEXT( VkRenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassCreationFeedbackInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassCreationFeedbackInfoEXT & operator=( RenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassCreationFeedbackInfoEXT & operator=( VkRenderPassCreationFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkRenderPassCreationFeedbackInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreationFeedbackInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreationFeedbackInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassCreationFeedbackInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( postMergeSubpassCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassCreationFeedbackInfoEXT const & ) const = default; +#else + bool operator==( RenderPassCreationFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( postMergeSubpassCount == rhs.postMergeSubpassCount ); +# endif + } + + bool operator!=( RenderPassCreationFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t postMergeSubpassCount = {}; + }; + + // wrapper struct for struct VkRenderPassCreationFeedbackCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassCreationFeedbackCreateInfoEXT.html + struct RenderPassCreationFeedbackCreateInfoEXT + { + using NativeType = VkRenderPassCreationFeedbackCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreationFeedbackCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT * pRenderPassFeedback_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pRenderPassFeedback{ pRenderPassFeedback_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassCreationFeedbackCreateInfoEXT( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassCreationFeedbackCreateInfoEXT( VkRenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassCreationFeedbackCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassCreationFeedbackCreateInfoEXT & operator=( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassCreationFeedbackCreateInfoEXT & operator=( VkRenderPassCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassCreationFeedbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassCreationFeedbackCreateInfoEXT & + setPRenderPassFeedback( VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT * pRenderPassFeedback_ ) VULKAN_HPP_NOEXCEPT + { + pRenderPassFeedback = pRenderPassFeedback_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassCreationFeedbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreationFeedbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassCreationFeedbackCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassCreationFeedbackCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pRenderPassFeedback ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassCreationFeedbackCreateInfoEXT const & ) const = default; +#else + bool operator==( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pRenderPassFeedback == rhs.pRenderPassFeedback ); +# endif + } + + bool operator!=( RenderPassCreationFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassCreationFeedbackCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPassCreationFeedbackInfoEXT * pRenderPassFeedback = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassCreationFeedbackCreateInfoEXT; + }; + + // wrapper struct for struct VkRenderPassFragmentDensityMapCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassFragmentDensityMapCreateInfoEXT.html + struct RenderPassFragmentDensityMapCreateInfoEXT + { + using NativeType = VkRenderPassFragmentDensityMapCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassFragmentDensityMapCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassFragmentDensityMapCreateInfoEXT( VULKAN_HPP_NAMESPACE::AttachmentReference fragmentDensityMapAttachment_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityMapAttachment{ fragmentDensityMapAttachment_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassFragmentDensityMapCreateInfoEXT( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassFragmentDensityMapCreateInfoEXT( VkRenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassFragmentDensityMapCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassFragmentDensityMapCreateInfoEXT & operator=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassFragmentDensityMapCreateInfoEXT & operator=( VkRenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT & + setFragmentDensityMapAttachment( VULKAN_HPP_NAMESPACE::AttachmentReference const & fragmentDensityMapAttachment_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityMapAttachment = fragmentDensityMapAttachment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassFragmentDensityMapCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassFragmentDensityMapCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassFragmentDensityMapCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassFragmentDensityMapCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityMapAttachment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassFragmentDensityMapCreateInfoEXT const & ) const = default; +#else + bool operator==( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMapAttachment == rhs.fragmentDensityMapAttachment ); +# endif + } + + bool operator!=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassFragmentDensityMapCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::AttachmentReference fragmentDensityMapAttachment = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassFragmentDensityMapCreateInfoEXT; + }; + + // wrapper struct for struct VkRenderPassFragmentDensityMapOffsetEndInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassFragmentDensityMapOffsetEndInfoEXT.html + struct RenderPassFragmentDensityMapOffsetEndInfoEXT + { + using NativeType = VkRenderPassFragmentDensityMapOffsetEndInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassFragmentDensityMapOffsetEndInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassFragmentDensityMapOffsetEndInfoEXT( uint32_t fragmentDensityOffsetCount_ = {}, + const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fragmentDensityOffsetCount{ fragmentDensityOffsetCount_ } + , pFragmentDensityOffsets{ pFragmentDensityOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassFragmentDensityMapOffsetEndInfoEXT( RenderPassFragmentDensityMapOffsetEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassFragmentDensityMapOffsetEndInfoEXT( VkRenderPassFragmentDensityMapOffsetEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassFragmentDensityMapOffsetEndInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassFragmentDensityMapOffsetEndInfoEXT( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fragmentDensityOffsets_, const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , fragmentDensityOffsetCount( static_cast( fragmentDensityOffsets_.size() ) ) + , pFragmentDensityOffsets( fragmentDensityOffsets_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassFragmentDensityMapOffsetEndInfoEXT & operator=( RenderPassFragmentDensityMapOffsetEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassFragmentDensityMapOffsetEndInfoEXT & operator=( VkRenderPassFragmentDensityMapOffsetEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapOffsetEndInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapOffsetEndInfoEXT & + setFragmentDensityOffsetCount( uint32_t fragmentDensityOffsetCount_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityOffsetCount = fragmentDensityOffsetCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapOffsetEndInfoEXT & + setPFragmentDensityOffsets( const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pFragmentDensityOffsets = pFragmentDensityOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassFragmentDensityMapOffsetEndInfoEXT & setFragmentDensityOffsets( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fragmentDensityOffsets_ ) VULKAN_HPP_NOEXCEPT + { + fragmentDensityOffsetCount = static_cast( fragmentDensityOffsets_.size() ); + pFragmentDensityOffsets = fragmentDensityOffsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassFragmentDensityMapOffsetEndInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassFragmentDensityMapOffsetEndInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassFragmentDensityMapOffsetEndInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassFragmentDensityMapOffsetEndInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fragmentDensityOffsetCount, pFragmentDensityOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassFragmentDensityMapOffsetEndInfoEXT const & ) const = default; +#else + bool operator==( RenderPassFragmentDensityMapOffsetEndInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityOffsetCount == rhs.fragmentDensityOffsetCount ) && + ( pFragmentDensityOffsets == rhs.pFragmentDensityOffsets ); +# endif + } + + bool operator!=( RenderPassFragmentDensityMapOffsetEndInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassFragmentDensityMapOffsetEndInfoEXT; + const void * pNext = {}; + uint32_t fragmentDensityOffsetCount = {}; + const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassFragmentDensityMapOffsetEndInfoEXT; + }; + + using SubpassFragmentDensityMapOffsetEndInfoQCOM = RenderPassFragmentDensityMapOffsetEndInfoEXT; + + // wrapper struct for struct VkRenderPassInputAttachmentAspectCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassInputAttachmentAspectCreateInfo.html + struct RenderPassInputAttachmentAspectCreateInfo + { + using NativeType = VkRenderPassInputAttachmentAspectCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassInputAttachmentAspectCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassInputAttachmentAspectCreateInfo( uint32_t aspectReferenceCount_ = {}, + const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , aspectReferenceCount{ aspectReferenceCount_ } + , pAspectReferences{ pAspectReferences_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassInputAttachmentAspectCreateInfo( RenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassInputAttachmentAspectCreateInfo( VkRenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassInputAttachmentAspectCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassInputAttachmentAspectCreateInfo( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & aspectReferences_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), aspectReferenceCount( static_cast( aspectReferences_.size() ) ), pAspectReferences( aspectReferences_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassInputAttachmentAspectCreateInfo & operator=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassInputAttachmentAspectCreateInfo & operator=( VkRenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & setAspectReferenceCount( uint32_t aspectReferenceCount_ ) VULKAN_HPP_NOEXCEPT + { + aspectReferenceCount = aspectReferenceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & + setPAspectReferences( const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences_ ) VULKAN_HPP_NOEXCEPT + { + pAspectReferences = pAspectReferences_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassInputAttachmentAspectCreateInfo & setAspectReferences( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & aspectReferences_ ) VULKAN_HPP_NOEXCEPT + { + aspectReferenceCount = static_cast( aspectReferences_.size() ); + pAspectReferences = aspectReferences_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassInputAttachmentAspectCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassInputAttachmentAspectCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassInputAttachmentAspectCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassInputAttachmentAspectCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, aspectReferenceCount, pAspectReferences ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassInputAttachmentAspectCreateInfo const & ) const = default; +#else + bool operator==( RenderPassInputAttachmentAspectCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( aspectReferenceCount == rhs.aspectReferenceCount ) && + ( pAspectReferences == rhs.pAspectReferences ); +# endif + } + + bool operator!=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassInputAttachmentAspectCreateInfo; + const void * pNext = {}; + uint32_t aspectReferenceCount = {}; + const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassInputAttachmentAspectCreateInfo; + }; + + using RenderPassInputAttachmentAspectCreateInfoKHR = RenderPassInputAttachmentAspectCreateInfo; + + // wrapper struct for struct VkRenderPassMultiviewCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassMultiviewCreateInfo.html + struct RenderPassMultiviewCreateInfo + { + using NativeType = VkRenderPassMultiviewCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassMultiviewCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassMultiviewCreateInfo( uint32_t subpassCount_ = {}, + const uint32_t * pViewMasks_ = {}, + uint32_t dependencyCount_ = {}, + const int32_t * pViewOffsets_ = {}, + uint32_t correlationMaskCount_ = {}, + const uint32_t * pCorrelationMasks_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subpassCount{ subpassCount_ } + , pViewMasks{ pViewMasks_ } + , dependencyCount{ dependencyCount_ } + , pViewOffsets{ pViewOffsets_ } + , correlationMaskCount{ correlationMaskCount_ } + , pCorrelationMasks{ pCorrelationMasks_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassMultiviewCreateInfo( RenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassMultiviewCreateInfo( VkRenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassMultiviewCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassMultiviewCreateInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewMasks_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewOffsets_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlationMasks_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , subpassCount( static_cast( viewMasks_.size() ) ) + , pViewMasks( viewMasks_.data() ) + , dependencyCount( static_cast( viewOffsets_.size() ) ) + , pViewOffsets( viewOffsets_.data() ) + , correlationMaskCount( static_cast( correlationMasks_.size() ) ) + , pCorrelationMasks( correlationMasks_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassMultiviewCreateInfo & operator=( RenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassMultiviewCreateInfo & operator=( VkRenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT + { + subpassCount = subpassCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPViewMasks( const uint32_t * pViewMasks_ ) VULKAN_HPP_NOEXCEPT + { + pViewMasks = pViewMasks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassMultiviewCreateInfo & setViewMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewMasks_ ) VULKAN_HPP_NOEXCEPT + { + subpassCount = static_cast( viewMasks_.size() ); + pViewMasks = viewMasks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT + { + dependencyCount = dependencyCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPViewOffsets( const int32_t * pViewOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pViewOffsets = pViewOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassMultiviewCreateInfo & setViewOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & viewOffsets_ ) VULKAN_HPP_NOEXCEPT + { + dependencyCount = static_cast( viewOffsets_.size() ); + pViewOffsets = viewOffsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setCorrelationMaskCount( uint32_t correlationMaskCount_ ) VULKAN_HPP_NOEXCEPT + { + correlationMaskCount = correlationMaskCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPCorrelationMasks( const uint32_t * pCorrelationMasks_ ) VULKAN_HPP_NOEXCEPT + { + pCorrelationMasks = pCorrelationMasks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassMultiviewCreateInfo & + setCorrelationMasks( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & correlationMasks_ ) VULKAN_HPP_NOEXCEPT + { + correlationMaskCount = static_cast( correlationMasks_.size() ); + pCorrelationMasks = correlationMasks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassMultiviewCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassMultiviewCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassMultiviewCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassMultiviewCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subpassCount, pViewMasks, dependencyCount, pViewOffsets, correlationMaskCount, pCorrelationMasks ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassMultiviewCreateInfo const & ) const = default; +#else + bool operator==( RenderPassMultiviewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassCount == rhs.subpassCount ) && ( pViewMasks == rhs.pViewMasks ) && + ( dependencyCount == rhs.dependencyCount ) && ( pViewOffsets == rhs.pViewOffsets ) && ( correlationMaskCount == rhs.correlationMaskCount ) && + ( pCorrelationMasks == rhs.pCorrelationMasks ); +# endif + } + + bool operator!=( RenderPassMultiviewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassMultiviewCreateInfo; + const void * pNext = {}; + uint32_t subpassCount = {}; + const uint32_t * pViewMasks = {}; + uint32_t dependencyCount = {}; + const int32_t * pViewOffsets = {}; + uint32_t correlationMaskCount = {}; + const uint32_t * pCorrelationMasks = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassMultiviewCreateInfo; + }; + + using RenderPassMultiviewCreateInfoKHR = RenderPassMultiviewCreateInfo; + + // wrapper struct for struct VkSubpassSampleLocationsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassSampleLocationsEXT.html + struct SubpassSampleLocationsEXT + { + using NativeType = VkSubpassSampleLocationsEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassSampleLocationsEXT( uint32_t subpassIndex_ = {}, + VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo_ = {} ) VULKAN_HPP_NOEXCEPT + : subpassIndex{ subpassIndex_ } + , sampleLocationsInfo{ sampleLocationsInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassSampleLocationsEXT( SubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassSampleLocationsEXT( VkSubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SubpassSampleLocationsEXT( *reinterpret_cast( &rhs ) ) + { + } + + SubpassSampleLocationsEXT & operator=( SubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassSampleLocationsEXT & operator=( VkSubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT & setSubpassIndex( uint32_t subpassIndex_ ) VULKAN_HPP_NOEXCEPT + { + subpassIndex = subpassIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT & + setSampleLocationsInfo( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT + { + sampleLocationsInfo = sampleLocationsInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassSampleLocationsEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassSampleLocationsEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( subpassIndex, sampleLocationsInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassSampleLocationsEXT const & ) const = default; +#else + bool operator==( SubpassSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( subpassIndex == rhs.subpassIndex ) && ( sampleLocationsInfo == rhs.sampleLocationsInfo ); +# endif + } + + bool operator!=( SubpassSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t subpassIndex = {}; + VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {}; + }; + + // wrapper struct for struct VkRenderPassSampleLocationsBeginInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassSampleLocationsBeginInfoEXT.html + struct RenderPassSampleLocationsBeginInfoEXT + { + using NativeType = VkRenderPassSampleLocationsBeginInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassSampleLocationsBeginInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + RenderPassSampleLocationsBeginInfoEXT( uint32_t attachmentInitialSampleLocationsCount_ = {}, + const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations_ = {}, + uint32_t postSubpassSampleLocationsCount_ = {}, + const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , attachmentInitialSampleLocationsCount{ attachmentInitialSampleLocationsCount_ } + , pAttachmentInitialSampleLocations{ pAttachmentInitialSampleLocations_ } + , postSubpassSampleLocationsCount{ postSubpassSampleLocationsCount_ } + , pPostSubpassSampleLocations{ pPostSubpassSampleLocations_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassSampleLocationsBeginInfoEXT( RenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassSampleLocationsBeginInfoEXT( VkRenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassSampleLocationsBeginInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassSampleLocationsBeginInfoEXT( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentInitialSampleLocations_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & postSubpassSampleLocations_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , attachmentInitialSampleLocationsCount( static_cast( attachmentInitialSampleLocations_.size() ) ) + , pAttachmentInitialSampleLocations( attachmentInitialSampleLocations_.data() ) + , postSubpassSampleLocationsCount( static_cast( postSubpassSampleLocations_.size() ) ) + , pPostSubpassSampleLocations( postSubpassSampleLocations_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassSampleLocationsBeginInfoEXT & operator=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassSampleLocationsBeginInfoEXT & operator=( VkRenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & + setAttachmentInitialSampleLocationsCount( uint32_t attachmentInitialSampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT + { + attachmentInitialSampleLocationsCount = attachmentInitialSampleLocationsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & + setPAttachmentInitialSampleLocations( const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations_ ) VULKAN_HPP_NOEXCEPT + { + pAttachmentInitialSampleLocations = pAttachmentInitialSampleLocations_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassSampleLocationsBeginInfoEXT & setAttachmentInitialSampleLocations( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & attachmentInitialSampleLocations_ ) + VULKAN_HPP_NOEXCEPT + { + attachmentInitialSampleLocationsCount = static_cast( attachmentInitialSampleLocations_.size() ); + pAttachmentInitialSampleLocations = attachmentInitialSampleLocations_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & + setPostSubpassSampleLocationsCount( uint32_t postSubpassSampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT + { + postSubpassSampleLocationsCount = postSubpassSampleLocationsCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & + setPPostSubpassSampleLocations( const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations_ ) VULKAN_HPP_NOEXCEPT + { + pPostSubpassSampleLocations = pPostSubpassSampleLocations_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassSampleLocationsBeginInfoEXT & setPostSubpassSampleLocations( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & postSubpassSampleLocations_ ) + VULKAN_HPP_NOEXCEPT + { + postSubpassSampleLocationsCount = static_cast( postSubpassSampleLocations_.size() ); + pPostSubpassSampleLocations = postSubpassSampleLocations_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassSampleLocationsBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassSampleLocationsBeginInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassSampleLocationsBeginInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassSampleLocationsBeginInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, attachmentInitialSampleLocationsCount, pAttachmentInitialSampleLocations, postSubpassSampleLocationsCount, pPostSubpassSampleLocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassSampleLocationsBeginInfoEXT const & ) const = default; +#else + bool operator==( RenderPassSampleLocationsBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentInitialSampleLocationsCount == rhs.attachmentInitialSampleLocationsCount ) && + ( pAttachmentInitialSampleLocations == rhs.pAttachmentInitialSampleLocations ) && + ( postSubpassSampleLocationsCount == rhs.postSubpassSampleLocationsCount ) && ( pPostSubpassSampleLocations == rhs.pPostSubpassSampleLocations ); +# endif + } + + bool operator!=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassSampleLocationsBeginInfoEXT; + const void * pNext = {}; + uint32_t attachmentInitialSampleLocationsCount = {}; + const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations = {}; + uint32_t postSubpassSampleLocationsCount = {}; + const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassSampleLocationsBeginInfoEXT; + }; + + // wrapper struct for struct VkRenderPassStripeInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassStripeInfoARM.html + struct RenderPassStripeInfoARM + { + using NativeType = VkRenderPassStripeInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassStripeInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassStripeInfoARM( VULKAN_HPP_NAMESPACE::Rect2D stripeArea_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stripeArea{ stripeArea_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassStripeInfoARM( RenderPassStripeInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassStripeInfoARM( VkRenderPassStripeInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassStripeInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassStripeInfoARM & operator=( RenderPassStripeInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassStripeInfoARM & operator=( VkRenderPassStripeInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeInfoARM & setStripeArea( VULKAN_HPP_NAMESPACE::Rect2D const & stripeArea_ ) VULKAN_HPP_NOEXCEPT + { + stripeArea = stripeArea_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassStripeInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassStripeInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassStripeInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassStripeInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stripeArea ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassStripeInfoARM const & ) const = default; +#else + bool operator==( RenderPassStripeInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stripeArea == rhs.stripeArea ); +# endif + } + + bool operator!=( RenderPassStripeInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassStripeInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Rect2D stripeArea = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassStripeInfoARM; + }; + + // wrapper struct for struct VkRenderPassStripeBeginInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassStripeBeginInfoARM.html + struct RenderPassStripeBeginInfoARM + { + using NativeType = VkRenderPassStripeBeginInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassStripeBeginInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassStripeBeginInfoARM( uint32_t stripeInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::RenderPassStripeInfoARM * pStripeInfos_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stripeInfoCount{ stripeInfoCount_ } + , pStripeInfos{ pStripeInfos_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassStripeBeginInfoARM( RenderPassStripeBeginInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassStripeBeginInfoARM( VkRenderPassStripeBeginInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassStripeBeginInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassStripeBeginInfoARM( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stripeInfos_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), stripeInfoCount( static_cast( stripeInfos_.size() ) ), pStripeInfos( stripeInfos_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassStripeBeginInfoARM & operator=( RenderPassStripeBeginInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassStripeBeginInfoARM & operator=( VkRenderPassStripeBeginInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeBeginInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeBeginInfoARM & setStripeInfoCount( uint32_t stripeInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + stripeInfoCount = stripeInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeBeginInfoARM & + setPStripeInfos( const VULKAN_HPP_NAMESPACE::RenderPassStripeInfoARM * pStripeInfos_ ) VULKAN_HPP_NOEXCEPT + { + pStripeInfos = pStripeInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassStripeBeginInfoARM & setStripeInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stripeInfos_ ) VULKAN_HPP_NOEXCEPT + { + stripeInfoCount = static_cast( stripeInfos_.size() ); + pStripeInfos = stripeInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassStripeBeginInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassStripeBeginInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassStripeBeginInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassStripeBeginInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stripeInfoCount, pStripeInfos ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassStripeBeginInfoARM const & ) const = default; +#else + bool operator==( RenderPassStripeBeginInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stripeInfoCount == rhs.stripeInfoCount ) && ( pStripeInfos == rhs.pStripeInfos ); +# endif + } + + bool operator!=( RenderPassStripeBeginInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassStripeBeginInfoARM; + const void * pNext = {}; + uint32_t stripeInfoCount = {}; + const VULKAN_HPP_NAMESPACE::RenderPassStripeInfoARM * pStripeInfos = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassStripeBeginInfoARM; + }; + + // wrapper struct for struct VkSemaphoreSubmitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreSubmitInfo.html + struct SemaphoreSubmitInfo + { + using NativeType = VkSemaphoreSubmitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSubmitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfo( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + uint64_t value_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask_ = {}, + uint32_t deviceIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , value{ value_ } + , stageMask{ stageMask_ } + , deviceIndex{ deviceIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfo( SemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreSubmitInfo( VkSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreSubmitInfo( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreSubmitInfo & operator=( SemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreSubmitInfo & operator=( VkSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT + { + value = value_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask_ ) VULKAN_HPP_NOEXCEPT + { + stageMask = stageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setDeviceIndex( uint32_t deviceIndex_ ) VULKAN_HPP_NOEXCEPT + { + deviceIndex = deviceIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreSubmitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreSubmitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, value, stageMask, deviceIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreSubmitInfo const & ) const = default; +#else + bool operator==( SemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( value == rhs.value ) && ( stageMask == rhs.stageMask ) && + ( deviceIndex == rhs.deviceIndex ); +# endif + } + + bool operator!=( SemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreSubmitInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + uint64_t value = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask = {}; + uint32_t deviceIndex = {}; + }; + + template <> + struct CppType + { + using Type = SemaphoreSubmitInfo; + }; + + using SemaphoreSubmitInfoKHR = SemaphoreSubmitInfo; + + // wrapper struct for struct VkRenderPassStripeSubmitInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassStripeSubmitInfoARM.html + struct RenderPassStripeSubmitInfoARM + { + using NativeType = VkRenderPassStripeSubmitInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassStripeSubmitInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassStripeSubmitInfoARM( uint32_t stripeSemaphoreInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pStripeSemaphoreInfos_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stripeSemaphoreInfoCount{ stripeSemaphoreInfoCount_ } + , pStripeSemaphoreInfos{ pStripeSemaphoreInfos_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassStripeSubmitInfoARM( RenderPassStripeSubmitInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassStripeSubmitInfoARM( VkRenderPassStripeSubmitInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassStripeSubmitInfoARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassStripeSubmitInfoARM( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stripeSemaphoreInfos_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stripeSemaphoreInfoCount( static_cast( stripeSemaphoreInfos_.size() ) ) + , pStripeSemaphoreInfos( stripeSemaphoreInfos_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderPassStripeSubmitInfoARM & operator=( RenderPassStripeSubmitInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassStripeSubmitInfoARM & operator=( VkRenderPassStripeSubmitInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeSubmitInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeSubmitInfoARM & setStripeSemaphoreInfoCount( uint32_t stripeSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + stripeSemaphoreInfoCount = stripeSemaphoreInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassStripeSubmitInfoARM & + setPStripeSemaphoreInfos( const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pStripeSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT + { + pStripeSemaphoreInfos = pStripeSemaphoreInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderPassStripeSubmitInfoARM & setStripeSemaphoreInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stripeSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT + { + stripeSemaphoreInfoCount = static_cast( stripeSemaphoreInfos_.size() ); + pStripeSemaphoreInfos = stripeSemaphoreInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassStripeSubmitInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassStripeSubmitInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassStripeSubmitInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassStripeSubmitInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stripeSemaphoreInfoCount, pStripeSemaphoreInfos ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassStripeSubmitInfoARM const & ) const = default; +#else + bool operator==( RenderPassStripeSubmitInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stripeSemaphoreInfoCount == rhs.stripeSemaphoreInfoCount ) && + ( pStripeSemaphoreInfos == rhs.pStripeSemaphoreInfos ); +# endif + } + + bool operator!=( RenderPassStripeSubmitInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassStripeSubmitInfoARM; + const void * pNext = {}; + uint32_t stripeSemaphoreInfoCount = {}; + const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pStripeSemaphoreInfos = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassStripeSubmitInfoARM; + }; + + // wrapper struct for struct VkRenderPassSubpassFeedbackInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassSubpassFeedbackInfoEXT.html + struct RenderPassSubpassFeedbackInfoEXT + { + using NativeType = VkRenderPassSubpassFeedbackInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 + RenderPassSubpassFeedbackInfoEXT( VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT subpassMergeStatus_ = VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT::eMerged, + std::array const & description_ = {}, + uint32_t postMergeIndex_ = {} ) VULKAN_HPP_NOEXCEPT + : subpassMergeStatus{ subpassMergeStatus_ } + , description{ description_ } + , postMergeIndex{ postMergeIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackInfoEXT( RenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassSubpassFeedbackInfoEXT( VkRenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassSubpassFeedbackInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassSubpassFeedbackInfoEXT & operator=( RenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassSubpassFeedbackInfoEXT & operator=( VkRenderPassSubpassFeedbackInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkRenderPassSubpassFeedbackInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassSubpassFeedbackInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassSubpassFeedbackInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassSubpassFeedbackInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple const &, uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( subpassMergeStatus, description, postMergeIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( RenderPassSubpassFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = subpassMergeStatus <=> rhs.subpassMergeStatus; cmp != 0 ) + return cmp; + if ( auto cmp = strcmp( description, rhs.description ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = postMergeIndex <=> rhs.postMergeIndex; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( RenderPassSubpassFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( subpassMergeStatus == rhs.subpassMergeStatus ) && ( strcmp( description, rhs.description ) == 0 ) && ( postMergeIndex == rhs.postMergeIndex ); + } + + bool operator!=( RenderPassSubpassFeedbackInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT subpassMergeStatus = VULKAN_HPP_NAMESPACE::SubpassMergeStatusEXT::eMerged; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D description = {}; + uint32_t postMergeIndex = {}; + }; + + // wrapper struct for struct VkRenderPassSubpassFeedbackCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassSubpassFeedbackCreateInfoEXT.html + struct RenderPassSubpassFeedbackCreateInfoEXT + { + using NativeType = VkRenderPassSubpassFeedbackCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassSubpassFeedbackCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT * pSubpassFeedback_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pSubpassFeedback{ pSubpassFeedback_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassSubpassFeedbackCreateInfoEXT( VkRenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassSubpassFeedbackCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassSubpassFeedbackCreateInfoEXT & operator=( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassSubpassFeedbackCreateInfoEXT & operator=( VkRenderPassSubpassFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassSubpassFeedbackCreateInfoEXT & + setPSubpassFeedback( VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT * pSubpassFeedback_ ) VULKAN_HPP_NOEXCEPT + { + pSubpassFeedback = pSubpassFeedback_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassSubpassFeedbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassSubpassFeedbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassSubpassFeedbackCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassSubpassFeedbackCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pSubpassFeedback ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassSubpassFeedbackCreateInfoEXT const & ) const = default; +#else + bool operator==( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pSubpassFeedback == rhs.pSubpassFeedback ); +# endif + } + + bool operator!=( RenderPassSubpassFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassSubpassFeedbackCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPassSubpassFeedbackInfoEXT * pSubpassFeedback = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassSubpassFeedbackCreateInfoEXT; + }; + + // wrapper struct for struct VkRenderPassTileShadingCreateInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassTileShadingCreateInfoQCOM.html + struct RenderPassTileShadingCreateInfoQCOM + { + using NativeType = VkRenderPassTileShadingCreateInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassTileShadingCreateInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassTileShadingCreateInfoQCOM( VULKAN_HPP_NAMESPACE::TileShadingRenderPassFlagsQCOM flags_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D tileApronSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , tileApronSize{ tileApronSize_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassTileShadingCreateInfoQCOM( RenderPassTileShadingCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassTileShadingCreateInfoQCOM( VkRenderPassTileShadingCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassTileShadingCreateInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassTileShadingCreateInfoQCOM & operator=( RenderPassTileShadingCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassTileShadingCreateInfoQCOM & operator=( VkRenderPassTileShadingCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassTileShadingCreateInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassTileShadingCreateInfoQCOM & setFlags( VULKAN_HPP_NAMESPACE::TileShadingRenderPassFlagsQCOM flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassTileShadingCreateInfoQCOM & setTileApronSize( VULKAN_HPP_NAMESPACE::Extent2D const & tileApronSize_ ) VULKAN_HPP_NOEXCEPT + { + tileApronSize = tileApronSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassTileShadingCreateInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassTileShadingCreateInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassTileShadingCreateInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassTileShadingCreateInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, tileApronSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassTileShadingCreateInfoQCOM const & ) const = default; +#else + bool operator==( RenderPassTileShadingCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( tileApronSize == rhs.tileApronSize ); +# endif + } + + bool operator!=( RenderPassTileShadingCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassTileShadingCreateInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TileShadingRenderPassFlagsQCOM flags = {}; + VULKAN_HPP_NAMESPACE::Extent2D tileApronSize = {}; + }; + + template <> + struct CppType + { + using Type = RenderPassTileShadingCreateInfoQCOM; + }; + + // wrapper struct for struct VkRenderPassTransformBeginInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderPassTransformBeginInfoQCOM.html + struct RenderPassTransformBeginInfoQCOM + { + using NativeType = VkRenderPassTransformBeginInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassTransformBeginInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderPassTransformBeginInfoQCOM( + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , transform{ transform_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderPassTransformBeginInfoQCOM( RenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderPassTransformBeginInfoQCOM( VkRenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderPassTransformBeginInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + RenderPassTransformBeginInfoQCOM & operator=( RenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderPassTransformBeginInfoQCOM & operator=( VkRenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM & setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT + { + transform = transform_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderPassTransformBeginInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassTransformBeginInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderPassTransformBeginInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderPassTransformBeginInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, transform ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderPassTransformBeginInfoQCOM const & ) const = default; +#else + bool operator==( RenderPassTransformBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ); +# endif + } + + bool operator!=( RenderPassTransformBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderPassTransformBeginInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + }; + + template <> + struct CppType + { + using Type = RenderPassTransformBeginInfoQCOM; + }; + + // wrapper struct for struct VkRenderingAreaInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingAreaInfo.html + struct RenderingAreaInfo + { + using NativeType = VkRenderingAreaInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingAreaInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderingAreaInfo( uint32_t viewMask_ = {}, + uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {}, + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , viewMask{ viewMask_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachmentFormats{ pColorAttachmentFormats_ } + , depthAttachmentFormat{ depthAttachmentFormat_ } + , stencilAttachmentFormat{ stencilAttachmentFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderingAreaInfo( RenderingAreaInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingAreaInfo( VkRenderingAreaInfo const & rhs ) VULKAN_HPP_NOEXCEPT : RenderingAreaInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingAreaInfo( uint32_t viewMask_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_, + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , viewMask( viewMask_ ) + , colorAttachmentCount( static_cast( colorAttachmentFormats_.size() ) ) + , pColorAttachmentFormats( colorAttachmentFormats_.data() ) + , depthAttachmentFormat( depthAttachmentFormat_ ) + , stencilAttachmentFormat( stencilAttachmentFormat_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderingAreaInfo & operator=( RenderingAreaInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingAreaInfo & operator=( VkRenderingAreaInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingAreaInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAreaInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT + { + viewMask = viewMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAreaInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAreaInfo & setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachmentFormats = pColorAttachmentFormats_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingAreaInfo & setColorAttachmentFormats( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachmentFormats_.size() ); + pColorAttachmentFormats = colorAttachmentFormats_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderingAreaInfo & setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT + { + depthAttachmentFormat = depthAttachmentFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAreaInfo & setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT + { + stencilAttachmentFormat = stencilAttachmentFormat_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingAreaInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingAreaInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingAreaInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingAreaInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, viewMask, colorAttachmentCount, pColorAttachmentFormats, depthAttachmentFormat, stencilAttachmentFormat ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingAreaInfo const & ) const = default; +#else + bool operator==( RenderingAreaInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewMask == rhs.viewMask ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) && ( depthAttachmentFormat == rhs.depthAttachmentFormat ) && + ( stencilAttachmentFormat == rhs.stencilAttachmentFormat ); +# endif + } + + bool operator!=( RenderingAreaInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingAreaInfo; + const void * pNext = {}; + uint32_t viewMask = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {}; + VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = RenderingAreaInfo; + }; + + using RenderingAreaInfoKHR = RenderingAreaInfo; + + // wrapper struct for struct VkRenderingAttachmentInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingAttachmentInfo.html + struct RenderingAttachmentInfo + { + using NativeType = VkRenderingAttachmentInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingAttachmentInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone, + VULKAN_HPP_NAMESPACE::ImageView resolveImageView_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad, + VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore, + VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageView{ imageView_ } + , imageLayout{ imageLayout_ } + , resolveMode{ resolveMode_ } + , resolveImageView{ resolveImageView_ } + , resolveImageLayout{ resolveImageLayout_ } + , loadOp{ loadOp_ } + , storeOp{ storeOp_ } + , clearValue{ clearValue_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo( RenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingAttachmentInfo( VkRenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderingAttachmentInfo( *reinterpret_cast( &rhs ) ) + { + } + + RenderingAttachmentInfo & operator=( RenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingAttachmentInfo & operator=( VkRenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT + { + imageLayout = imageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode_ ) VULKAN_HPP_NOEXCEPT + { + resolveMode = resolveMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setResolveImageView( VULKAN_HPP_NAMESPACE::ImageView resolveImageView_ ) VULKAN_HPP_NOEXCEPT + { + resolveImageView = resolveImageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setResolveImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + resolveImageLayout = resolveImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT + { + loadOp = loadOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT + { + storeOp = storeOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT + { + clearValue = clearValue_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingAttachmentInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingAttachmentInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingAttachmentInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingAttachmentInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageView, imageLayout, resolveMode, resolveImageView, resolveImageLayout, loadOp, storeOp, clearValue ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingAttachmentInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone; + VULKAN_HPP_NAMESPACE::ImageView resolveImageView = {}; + VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad; + VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore; + VULKAN_HPP_NAMESPACE::ClearValue clearValue = {}; + }; + + template <> + struct CppType + { + using Type = RenderingAttachmentInfo; + }; + + using RenderingAttachmentInfoKHR = RenderingAttachmentInfo; + + // wrapper struct for struct VkRenderingAttachmentLocationInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingAttachmentLocationInfo.html + struct RenderingAttachmentLocationInfo + { + using NativeType = VkRenderingAttachmentLocationInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingAttachmentLocationInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderingAttachmentLocationInfo( uint32_t colorAttachmentCount_ = {}, + const uint32_t * pColorAttachmentLocations_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachmentLocations{ pColorAttachmentLocations_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderingAttachmentLocationInfo( RenderingAttachmentLocationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingAttachmentLocationInfo( VkRenderingAttachmentLocationInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderingAttachmentLocationInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingAttachmentLocationInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentLocations_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , colorAttachmentCount( static_cast( colorAttachmentLocations_.size() ) ) + , pColorAttachmentLocations( colorAttachmentLocations_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderingAttachmentLocationInfo & operator=( RenderingAttachmentLocationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingAttachmentLocationInfo & operator=( VkRenderingAttachmentLocationInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentLocationInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentLocationInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentLocationInfo & setPColorAttachmentLocations( const uint32_t * pColorAttachmentLocations_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachmentLocations = pColorAttachmentLocations_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingAttachmentLocationInfo & + setColorAttachmentLocations( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentLocations_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachmentLocations_.size() ); + pColorAttachmentLocations = colorAttachmentLocations_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingAttachmentLocationInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingAttachmentLocationInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingAttachmentLocationInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingAttachmentLocationInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, colorAttachmentCount, pColorAttachmentLocations ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingAttachmentLocationInfo const & ) const = default; +#else + bool operator==( RenderingAttachmentLocationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachmentLocations == rhs.pColorAttachmentLocations ); +# endif + } + + bool operator!=( RenderingAttachmentLocationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingAttachmentLocationInfo; + const void * pNext = {}; + uint32_t colorAttachmentCount = {}; + const uint32_t * pColorAttachmentLocations = {}; + }; + + template <> + struct CppType + { + using Type = RenderingAttachmentLocationInfo; + }; + + using RenderingAttachmentLocationInfoKHR = RenderingAttachmentLocationInfo; + + // wrapper struct for struct VkRenderingEndInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingEndInfoEXT.html + struct RenderingEndInfoEXT + { + using NativeType = VkRenderingEndInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingEndInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderingEndInfoEXT( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR RenderingEndInfoEXT( RenderingEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingEndInfoEXT( VkRenderingEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : RenderingEndInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderingEndInfoEXT & operator=( RenderingEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingEndInfoEXT & operator=( VkRenderingEndInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingEndInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingEndInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingEndInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingEndInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingEndInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingEndInfoEXT const & ) const = default; +#else + bool operator==( RenderingEndInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( RenderingEndInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingEndInfoEXT; + const void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = RenderingEndInfoEXT; + }; + + // wrapper struct for struct VkRenderingFragmentDensityMapAttachmentInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingFragmentDensityMapAttachmentInfoEXT.html + struct RenderingFragmentDensityMapAttachmentInfoEXT + { + using NativeType = VkRenderingFragmentDensityMapAttachmentInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + RenderingFragmentDensityMapAttachmentInfoEXT( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageView{ imageView_ } + , imageLayout{ imageLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderingFragmentDensityMapAttachmentInfoEXT( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingFragmentDensityMapAttachmentInfoEXT( VkRenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderingFragmentDensityMapAttachmentInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + RenderingFragmentDensityMapAttachmentInfoEXT & operator=( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingFragmentDensityMapAttachmentInfoEXT & operator=( VkRenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT + { + imageLayout = imageLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingFragmentDensityMapAttachmentInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingFragmentDensityMapAttachmentInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingFragmentDensityMapAttachmentInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingFragmentDensityMapAttachmentInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageView, imageLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingFragmentDensityMapAttachmentInfoEXT const & ) const = default; +#else + bool operator==( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout ); +# endif + } + + bool operator!=( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + }; + + template <> + struct CppType + { + using Type = RenderingFragmentDensityMapAttachmentInfoEXT; + }; + + // wrapper struct for struct VkRenderingFragmentShadingRateAttachmentInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingFragmentShadingRateAttachmentInfoKHR.html + struct RenderingFragmentShadingRateAttachmentInfoKHR + { + using NativeType = VkRenderingFragmentShadingRateAttachmentInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + RenderingFragmentShadingRateAttachmentInfoKHR( VULKAN_HPP_NAMESPACE::ImageView imageView_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , imageView{ imageView_ } + , imageLayout{ imageLayout_ } + , shadingRateAttachmentTexelSize{ shadingRateAttachmentTexelSize_ } + { + } + + VULKAN_HPP_CONSTEXPR + RenderingFragmentShadingRateAttachmentInfoKHR( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingFragmentShadingRateAttachmentInfoKHR( VkRenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderingFragmentShadingRateAttachmentInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + RenderingFragmentShadingRateAttachmentInfoKHR & operator=( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingFragmentShadingRateAttachmentInfoKHR & operator=( VkRenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT + { + imageView = imageView_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT + { + imageLayout = imageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & + setShadingRateAttachmentTexelSize( VULKAN_HPP_NAMESPACE::Extent2D const & shadingRateAttachmentTexelSize_ ) VULKAN_HPP_NOEXCEPT + { + shadingRateAttachmentTexelSize = shadingRateAttachmentTexelSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingFragmentShadingRateAttachmentInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingFragmentShadingRateAttachmentInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, imageView, imageLayout, shadingRateAttachmentTexelSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingFragmentShadingRateAttachmentInfoKHR const & ) const = default; +#else + bool operator==( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout ) && + ( shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize ); +# endif + } + + bool operator!=( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageView imageView = {}; + VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize = {}; + }; + + template <> + struct CppType + { + using Type = RenderingFragmentShadingRateAttachmentInfoKHR; + }; + + // wrapper struct for struct VkRenderingInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingInfo.html + struct RenderingInfo + { + using NativeType = VkRenderingInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 RenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {}, + uint32_t layerCount_ = {}, + uint32_t viewMask_ = {}, + uint32_t colorAttachmentCount_ = {}, + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments_ = {}, + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ = {}, + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , renderArea{ renderArea_ } + , layerCount{ layerCount_ } + , viewMask{ viewMask_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachments{ pColorAttachments_ } + , pDepthAttachment{ pDepthAttachment_ } + , pStencilAttachment{ pStencilAttachment_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo( RenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingInfo( VkRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT : RenderingInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingInfo( VULKAN_HPP_NAMESPACE::RenderingFlags flags_, + VULKAN_HPP_NAMESPACE::Rect2D renderArea_, + uint32_t layerCount_, + uint32_t viewMask_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_, + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ = {}, + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , renderArea( renderArea_ ) + , layerCount( layerCount_ ) + , viewMask( viewMask_ ) + , colorAttachmentCount( static_cast( colorAttachments_.size() ) ) + , pColorAttachments( colorAttachments_.data() ) + , pDepthAttachment( pDepthAttachment_ ) + , pStencilAttachment( pStencilAttachment_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderingInfo & operator=( RenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingInfo & operator=( VkRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT + { + renderArea = renderArea_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = layerCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT + { + viewMask = viewMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPColorAttachments( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachments = pColorAttachments_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingInfo & setColorAttachments( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachments_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachments_.size() ); + pColorAttachments = colorAttachments_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPDepthAttachment( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ ) VULKAN_HPP_NOEXCEPT + { + pDepthAttachment = pDepthAttachment_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInfo & + setPStencilAttachment( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ ) VULKAN_HPP_NOEXCEPT + { + pStencilAttachment = pStencilAttachment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, renderArea, layerCount, viewMask, colorAttachmentCount, pColorAttachments, pDepthAttachment, pStencilAttachment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingInfo const & ) const = default; +#else + bool operator==( RenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( renderArea == rhs.renderArea ) && + ( layerCount == rhs.layerCount ) && ( viewMask == rhs.viewMask ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachments == rhs.pColorAttachments ) && ( pDepthAttachment == rhs.pDepthAttachment ) && ( pStencilAttachment == rhs.pStencilAttachment ); +# endif + } + + bool operator!=( RenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderingFlags flags = {}; + VULKAN_HPP_NAMESPACE::Rect2D renderArea = {}; + uint32_t layerCount = {}; + uint32_t viewMask = {}; + uint32_t colorAttachmentCount = {}; + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments = {}; + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment = {}; + const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment = {}; + }; + + template <> + struct CppType + { + using Type = RenderingInfo; + }; + + using RenderingInfoKHR = RenderingInfo; + + // wrapper struct for struct VkRenderingInputAttachmentIndexInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkRenderingInputAttachmentIndexInfo.html + struct RenderingInputAttachmentIndexInfo + { + using NativeType = VkRenderingInputAttachmentIndexInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingInputAttachmentIndexInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR RenderingInputAttachmentIndexInfo( uint32_t colorAttachmentCount_ = {}, + const uint32_t * pColorAttachmentInputIndices_ = {}, + const uint32_t * pDepthInputAttachmentIndex_ = {}, + const uint32_t * pStencilInputAttachmentIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , colorAttachmentCount{ colorAttachmentCount_ } + , pColorAttachmentInputIndices{ pColorAttachmentInputIndices_ } + , pDepthInputAttachmentIndex{ pDepthInputAttachmentIndex_ } + , pStencilInputAttachmentIndex{ pStencilInputAttachmentIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR RenderingInputAttachmentIndexInfo( RenderingInputAttachmentIndexInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + RenderingInputAttachmentIndexInfo( VkRenderingInputAttachmentIndexInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : RenderingInputAttachmentIndexInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingInputAttachmentIndexInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentInputIndices_, + const uint32_t * pDepthInputAttachmentIndex_ = {}, + const uint32_t * pStencilInputAttachmentIndex_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , colorAttachmentCount( static_cast( colorAttachmentInputIndices_.size() ) ) + , pColorAttachmentInputIndices( colorAttachmentInputIndices_.data() ) + , pDepthInputAttachmentIndex( pDepthInputAttachmentIndex_ ) + , pStencilInputAttachmentIndex( pStencilInputAttachmentIndex_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + RenderingInputAttachmentIndexInfo & operator=( RenderingInputAttachmentIndexInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + RenderingInputAttachmentIndexInfo & operator=( VkRenderingInputAttachmentIndexInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 RenderingInputAttachmentIndexInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInputAttachmentIndexInfo & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = colorAttachmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInputAttachmentIndexInfo & + setPColorAttachmentInputIndices( const uint32_t * pColorAttachmentInputIndices_ ) VULKAN_HPP_NOEXCEPT + { + pColorAttachmentInputIndices = pColorAttachmentInputIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + RenderingInputAttachmentIndexInfo & + setColorAttachmentInputIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & colorAttachmentInputIndices_ ) VULKAN_HPP_NOEXCEPT + { + colorAttachmentCount = static_cast( colorAttachmentInputIndices_.size() ); + pColorAttachmentInputIndices = colorAttachmentInputIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 RenderingInputAttachmentIndexInfo & + setPDepthInputAttachmentIndex( const uint32_t * pDepthInputAttachmentIndex_ ) VULKAN_HPP_NOEXCEPT + { + pDepthInputAttachmentIndex = pDepthInputAttachmentIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 RenderingInputAttachmentIndexInfo & + setPStencilInputAttachmentIndex( const uint32_t * pStencilInputAttachmentIndex_ ) VULKAN_HPP_NOEXCEPT + { + pStencilInputAttachmentIndex = pStencilInputAttachmentIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkRenderingInputAttachmentIndexInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingInputAttachmentIndexInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkRenderingInputAttachmentIndexInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkRenderingInputAttachmentIndexInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, colorAttachmentCount, pColorAttachmentInputIndices, pDepthInputAttachmentIndex, pStencilInputAttachmentIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( RenderingInputAttachmentIndexInfo const & ) const = default; +#else + bool operator==( RenderingInputAttachmentIndexInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) && + ( pColorAttachmentInputIndices == rhs.pColorAttachmentInputIndices ) && ( pDepthInputAttachmentIndex == rhs.pDepthInputAttachmentIndex ) && + ( pStencilInputAttachmentIndex == rhs.pStencilInputAttachmentIndex ); +# endif + } + + bool operator!=( RenderingInputAttachmentIndexInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingInputAttachmentIndexInfo; + const void * pNext = {}; + uint32_t colorAttachmentCount = {}; + const uint32_t * pColorAttachmentInputIndices = {}; + const uint32_t * pDepthInputAttachmentIndex = {}; + const uint32_t * pStencilInputAttachmentIndex = {}; + }; + + template <> + struct CppType + { + using Type = RenderingInputAttachmentIndexInfo; + }; + + using RenderingInputAttachmentIndexInfoKHR = RenderingInputAttachmentIndexInfo; + + // wrapper struct for struct VkResolveImageInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkResolveImageInfo2.html + struct ResolveImageInfo2 + { + using NativeType = VkResolveImageInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eResolveImageInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ResolveImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + VULKAN_HPP_NAMESPACE::Image dstImage_ = {}, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined, + uint32_t regionCount_ = {}, + const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcImage{ srcImage_ } + , srcImageLayout{ srcImageLayout_ } + , dstImage{ dstImage_ } + , dstImageLayout{ dstImageLayout_ } + , regionCount{ regionCount_ } + , pRegions{ pRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR ResolveImageInfo2( ResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ResolveImageInfo2( VkResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : ResolveImageInfo2( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ResolveImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_, + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_, + VULKAN_HPP_NAMESPACE::Image dstImage_, + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , srcImage( srcImage_ ) + , srcImageLayout( srcImageLayout_ ) + , dstImage( dstImage_ ) + , dstImageLayout( dstImageLayout_ ) + , regionCount( static_cast( regions_.size() ) ) + , pRegions( regions_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ResolveImageInfo2 & operator=( ResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ResolveImageInfo2 & operator=( VkResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT + { + srcImage = srcImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + srcImageLayout = srcImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT + { + dstImage = dstImage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT + { + dstImageLayout = dstImageLayout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = regionCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setPRegions( const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions_ ) VULKAN_HPP_NOEXCEPT + { + pRegions = pRegions_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ResolveImageInfo2 & + setRegions( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & regions_ ) VULKAN_HPP_NOEXCEPT + { + regionCount = static_cast( regions_.size() ); + pRegions = regions_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkResolveImageInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkResolveImageInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkResolveImageInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkResolveImageInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ResolveImageInfo2 const & ) const = default; +#else + bool operator==( ResolveImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) && ( srcImageLayout == rhs.srcImageLayout ) && + ( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions ); +# endif + } + + bool operator!=( ResolveImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eResolveImageInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Image srcImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + VULKAN_HPP_NAMESPACE::Image dstImage = {}; + VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined; + uint32_t regionCount = {}; + const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions = {}; + }; + + template <> + struct CppType + { + using Type = ResolveImageInfo2; + }; + + using ResolveImageInfo2KHR = ResolveImageInfo2; + + // wrapper struct for struct VkSamplerBlockMatchWindowCreateInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerBlockMatchWindowCreateInfoQCOM.html + struct SamplerBlockMatchWindowCreateInfoQCOM + { + using NativeType = VkSamplerBlockMatchWindowCreateInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerBlockMatchWindowCreateInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerBlockMatchWindowCreateInfoQCOM( + VULKAN_HPP_NAMESPACE::Extent2D windowExtent_ = {}, + VULKAN_HPP_NAMESPACE::BlockMatchWindowCompareModeQCOM windowCompareMode_ = VULKAN_HPP_NAMESPACE::BlockMatchWindowCompareModeQCOM::eMin, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , windowExtent{ windowExtent_ } + , windowCompareMode{ windowCompareMode_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerBlockMatchWindowCreateInfoQCOM( SamplerBlockMatchWindowCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerBlockMatchWindowCreateInfoQCOM( VkSamplerBlockMatchWindowCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerBlockMatchWindowCreateInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + SamplerBlockMatchWindowCreateInfoQCOM & operator=( SamplerBlockMatchWindowCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerBlockMatchWindowCreateInfoQCOM & operator=( VkSamplerBlockMatchWindowCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerBlockMatchWindowCreateInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerBlockMatchWindowCreateInfoQCOM & setWindowExtent( VULKAN_HPP_NAMESPACE::Extent2D const & windowExtent_ ) VULKAN_HPP_NOEXCEPT + { + windowExtent = windowExtent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerBlockMatchWindowCreateInfoQCOM & + setWindowCompareMode( VULKAN_HPP_NAMESPACE::BlockMatchWindowCompareModeQCOM windowCompareMode_ ) VULKAN_HPP_NOEXCEPT + { + windowCompareMode = windowCompareMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerBlockMatchWindowCreateInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerBlockMatchWindowCreateInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerBlockMatchWindowCreateInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerBlockMatchWindowCreateInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, windowExtent, windowCompareMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerBlockMatchWindowCreateInfoQCOM const & ) const = default; +#else + bool operator==( SamplerBlockMatchWindowCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( windowExtent == rhs.windowExtent ) && ( windowCompareMode == rhs.windowCompareMode ); +# endif + } + + bool operator!=( SamplerBlockMatchWindowCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerBlockMatchWindowCreateInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D windowExtent = {}; + VULKAN_HPP_NAMESPACE::BlockMatchWindowCompareModeQCOM windowCompareMode = VULKAN_HPP_NAMESPACE::BlockMatchWindowCompareModeQCOM::eMin; + }; + + template <> + struct CppType + { + using Type = SamplerBlockMatchWindowCreateInfoQCOM; + }; + + // wrapper struct for struct VkSamplerBorderColorComponentMappingCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerBorderColorComponentMappingCreateInfoEXT.html + struct SamplerBorderColorComponentMappingCreateInfoEXT + { + using NativeType = VkSamplerBorderColorComponentMappingCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerBorderColorComponentMappingCreateInfoEXT( VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 srgb_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , components{ components_ } + , srgb{ srgb_ } + { + } + + VULKAN_HPP_CONSTEXPR + SamplerBorderColorComponentMappingCreateInfoEXT( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerBorderColorComponentMappingCreateInfoEXT( VkSamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerBorderColorComponentMappingCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + SamplerBorderColorComponentMappingCreateInfoEXT & operator=( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerBorderColorComponentMappingCreateInfoEXT & operator=( VkSamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT & + setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT + { + components = components_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT & setSrgb( VULKAN_HPP_NAMESPACE::Bool32 srgb_ ) VULKAN_HPP_NOEXCEPT + { + srgb = srgb_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerBorderColorComponentMappingCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerBorderColorComponentMappingCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerBorderColorComponentMappingCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerBorderColorComponentMappingCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, components, srgb ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerBorderColorComponentMappingCreateInfoEXT const & ) const = default; +#else + bool operator==( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( components == rhs.components ) && ( srgb == rhs.srgb ); +# endif + } + + bool operator!=( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ComponentMapping components = {}; + VULKAN_HPP_NAMESPACE::Bool32 srgb = {}; + }; + + template <> + struct CppType + { + using Type = SamplerBorderColorComponentMappingCreateInfoEXT; + }; + + // wrapper struct for struct VkSamplerCaptureDescriptorDataInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerCaptureDescriptorDataInfoEXT.html + struct SamplerCaptureDescriptorDataInfoEXT + { + using NativeType = VkSamplerCaptureDescriptorDataInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCaptureDescriptorDataInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerCaptureDescriptorDataInfoEXT( VULKAN_HPP_NAMESPACE::Sampler sampler_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sampler{ sampler_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerCaptureDescriptorDataInfoEXT( SamplerCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerCaptureDescriptorDataInfoEXT( VkSamplerCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerCaptureDescriptorDataInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + SamplerCaptureDescriptorDataInfoEXT & operator=( SamplerCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerCaptureDescriptorDataInfoEXT & operator=( VkSamplerCaptureDescriptorDataInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerCaptureDescriptorDataInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCaptureDescriptorDataInfoEXT & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT + { + sampler = sampler_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerCaptureDescriptorDataInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCaptureDescriptorDataInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCaptureDescriptorDataInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerCaptureDescriptorDataInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sampler ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerCaptureDescriptorDataInfoEXT const & ) const = default; +#else + bool operator==( SamplerCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampler == rhs.sampler ); +# endif + } + + bool operator!=( SamplerCaptureDescriptorDataInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCaptureDescriptorDataInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Sampler sampler = {}; + }; + + template <> + struct CppType + { + using Type = SamplerCaptureDescriptorDataInfoEXT; + }; + + // wrapper struct for struct VkSamplerCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerCreateInfo.html + struct SamplerCreateInfo + { + using NativeType = VkSamplerCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerCreateInfo( VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags_ = {}, + VULKAN_HPP_NAMESPACE::Filter magFilter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, + VULKAN_HPP_NAMESPACE::Filter minFilter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, + VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode_ = VULKAN_HPP_NAMESPACE::SamplerMipmapMode::eNearest, + VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU_ = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat, + VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV_ = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat, + VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW_ = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat, + float mipLodBias_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable_ = {}, + float maxAnisotropy_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 compareEnable_ = {}, + VULKAN_HPP_NAMESPACE::CompareOp compareOp_ = VULKAN_HPP_NAMESPACE::CompareOp::eNever, + float minLod_ = {}, + float maxLod_ = {}, + VULKAN_HPP_NAMESPACE::BorderColor borderColor_ = VULKAN_HPP_NAMESPACE::BorderColor::eFloatTransparentBlack, + VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , magFilter{ magFilter_ } + , minFilter{ minFilter_ } + , mipmapMode{ mipmapMode_ } + , addressModeU{ addressModeU_ } + , addressModeV{ addressModeV_ } + , addressModeW{ addressModeW_ } + , mipLodBias{ mipLodBias_ } + , anisotropyEnable{ anisotropyEnable_ } + , maxAnisotropy{ maxAnisotropy_ } + , compareEnable{ compareEnable_ } + , compareOp{ compareOp_ } + , minLod{ minLod_ } + , maxLod{ maxLod_ } + , borderColor{ borderColor_ } + , unnormalizedCoordinates{ unnormalizedCoordinates_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerCreateInfo( SamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerCreateInfo( VkSamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SamplerCreateInfo( *reinterpret_cast( &rhs ) ) {} + + SamplerCreateInfo & operator=( SamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerCreateInfo & operator=( VkSamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMagFilter( VULKAN_HPP_NAMESPACE::Filter magFilter_ ) VULKAN_HPP_NOEXCEPT + { + magFilter = magFilter_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMinFilter( VULKAN_HPP_NAMESPACE::Filter minFilter_ ) VULKAN_HPP_NOEXCEPT + { + minFilter = minFilter_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMipmapMode( VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode_ ) VULKAN_HPP_NOEXCEPT + { + mipmapMode = mipmapMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAddressModeU( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU_ ) VULKAN_HPP_NOEXCEPT + { + addressModeU = addressModeU_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAddressModeV( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV_ ) VULKAN_HPP_NOEXCEPT + { + addressModeV = addressModeV_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAddressModeW( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW_ ) VULKAN_HPP_NOEXCEPT + { + addressModeW = addressModeW_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMipLodBias( float mipLodBias_ ) VULKAN_HPP_NOEXCEPT + { + mipLodBias = mipLodBias_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setAnisotropyEnable( VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable_ ) VULKAN_HPP_NOEXCEPT + { + anisotropyEnable = anisotropyEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMaxAnisotropy( float maxAnisotropy_ ) VULKAN_HPP_NOEXCEPT + { + maxAnisotropy = maxAnisotropy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setCompareEnable( VULKAN_HPP_NAMESPACE::Bool32 compareEnable_ ) VULKAN_HPP_NOEXCEPT + { + compareEnable = compareEnable_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT + { + compareOp = compareOp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT + { + minLod = minLod_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMaxLod( float maxLod_ ) VULKAN_HPP_NOEXCEPT + { + maxLod = maxLod_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setBorderColor( VULKAN_HPP_NAMESPACE::BorderColor borderColor_ ) VULKAN_HPP_NOEXCEPT + { + borderColor = borderColor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setUnnormalizedCoordinates( VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates_ ) VULKAN_HPP_NOEXCEPT + { + unnormalizedCoordinates = unnormalizedCoordinates_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + magFilter, + minFilter, + mipmapMode, + addressModeU, + addressModeV, + addressModeW, + mipLodBias, + anisotropyEnable, + maxAnisotropy, + compareEnable, + compareOp, + minLod, + maxLod, + borderColor, + unnormalizedCoordinates ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerCreateInfo const & ) const = default; +#else + bool operator==( SamplerCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( magFilter == rhs.magFilter ) && ( minFilter == rhs.minFilter ) && + ( mipmapMode == rhs.mipmapMode ) && ( addressModeU == rhs.addressModeU ) && ( addressModeV == rhs.addressModeV ) && + ( addressModeW == rhs.addressModeW ) && ( mipLodBias == rhs.mipLodBias ) && ( anisotropyEnable == rhs.anisotropyEnable ) && + ( maxAnisotropy == rhs.maxAnisotropy ) && ( compareEnable == rhs.compareEnable ) && ( compareOp == rhs.compareOp ) && ( minLod == rhs.minLod ) && + ( maxLod == rhs.maxLod ) && ( borderColor == rhs.borderColor ) && ( unnormalizedCoordinates == rhs.unnormalizedCoordinates ); +# endif + } + + bool operator!=( SamplerCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags = {}; + VULKAN_HPP_NAMESPACE::Filter magFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest; + VULKAN_HPP_NAMESPACE::Filter minFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest; + VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode = VULKAN_HPP_NAMESPACE::SamplerMipmapMode::eNearest; + VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat; + VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat; + VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW = VULKAN_HPP_NAMESPACE::SamplerAddressMode::eRepeat; + float mipLodBias = {}; + VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable = {}; + float maxAnisotropy = {}; + VULKAN_HPP_NAMESPACE::Bool32 compareEnable = {}; + VULKAN_HPP_NAMESPACE::CompareOp compareOp = VULKAN_HPP_NAMESPACE::CompareOp::eNever; + float minLod = {}; + float maxLod = {}; + VULKAN_HPP_NAMESPACE::BorderColor borderColor = VULKAN_HPP_NAMESPACE::BorderColor::eFloatTransparentBlack; + VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates = {}; + }; + + template <> + struct CppType + { + using Type = SamplerCreateInfo; + }; + + // wrapper struct for struct VkSamplerCubicWeightsCreateInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerCubicWeightsCreateInfoQCOM.html + struct SamplerCubicWeightsCreateInfoQCOM + { + using NativeType = VkSamplerCubicWeightsCreateInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCubicWeightsCreateInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SamplerCubicWeightsCreateInfoQCOM( VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM cubicWeights_ = VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM::eCatmullRom, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , cubicWeights{ cubicWeights_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerCubicWeightsCreateInfoQCOM( SamplerCubicWeightsCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerCubicWeightsCreateInfoQCOM( VkSamplerCubicWeightsCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerCubicWeightsCreateInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + SamplerCubicWeightsCreateInfoQCOM & operator=( SamplerCubicWeightsCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerCubicWeightsCreateInfoQCOM & operator=( VkSamplerCubicWeightsCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerCubicWeightsCreateInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCubicWeightsCreateInfoQCOM & + setCubicWeights( VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM cubicWeights_ ) VULKAN_HPP_NOEXCEPT + { + cubicWeights = cubicWeights_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerCubicWeightsCreateInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCubicWeightsCreateInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCubicWeightsCreateInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerCubicWeightsCreateInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, cubicWeights ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerCubicWeightsCreateInfoQCOM const & ) const = default; +#else + bool operator==( SamplerCubicWeightsCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cubicWeights == rhs.cubicWeights ); +# endif + } + + bool operator!=( SamplerCubicWeightsCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCubicWeightsCreateInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM cubicWeights = VULKAN_HPP_NAMESPACE::CubicFilterWeightsQCOM::eCatmullRom; + }; + + template <> + struct CppType + { + using Type = SamplerCubicWeightsCreateInfoQCOM; + }; + + // wrapper struct for struct VkSamplerCustomBorderColorCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerCustomBorderColorCreateInfoEXT.html + struct SamplerCustomBorderColorCreateInfoEXT + { + using NativeType = VkSamplerCustomBorderColorCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCustomBorderColorCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT( VULKAN_HPP_NAMESPACE::ClearColorValue customBorderColor_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , customBorderColor{ customBorderColor_ } + , format{ format_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT( SamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerCustomBorderColorCreateInfoEXT( VkSamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerCustomBorderColorCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + SamplerCustomBorderColorCreateInfoEXT & operator=( SamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerCustomBorderColorCreateInfoEXT & operator=( VkSamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & + setCustomBorderColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & customBorderColor_ ) VULKAN_HPP_NOEXCEPT + { + customBorderColor = customBorderColor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerCustomBorderColorCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCustomBorderColorCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerCustomBorderColorCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerCustomBorderColorCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, customBorderColor, format ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCustomBorderColorCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ClearColorValue customBorderColor = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = SamplerCustomBorderColorCreateInfoEXT; + }; + + // wrapper struct for struct VkSamplerReductionModeCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerReductionModeCreateInfo.html + struct SamplerReductionModeCreateInfo + { + using NativeType = VkSamplerReductionModeCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerReductionModeCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SamplerReductionModeCreateInfo( VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode_ = VULKAN_HPP_NAMESPACE::SamplerReductionMode::eWeightedAverage, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , reductionMode{ reductionMode_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerReductionModeCreateInfo( SamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerReductionModeCreateInfo( VkSamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerReductionModeCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + SamplerReductionModeCreateInfo & operator=( SamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerReductionModeCreateInfo & operator=( VkSamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo & setReductionMode( VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode_ ) VULKAN_HPP_NOEXCEPT + { + reductionMode = reductionMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerReductionModeCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerReductionModeCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerReductionModeCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerReductionModeCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, reductionMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerReductionModeCreateInfo const & ) const = default; +#else + bool operator==( SamplerReductionModeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( reductionMode == rhs.reductionMode ); +# endif + } + + bool operator!=( SamplerReductionModeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerReductionModeCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode = VULKAN_HPP_NAMESPACE::SamplerReductionMode::eWeightedAverage; + }; + + template <> + struct CppType + { + using Type = SamplerReductionModeCreateInfo; + }; + + using SamplerReductionModeCreateInfoEXT = SamplerReductionModeCreateInfo; + + // wrapper struct for struct VkSamplerYcbcrConversionCreateInfo, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrConversionCreateInfo.html + struct SamplerYcbcrConversionCreateInfo + { + using NativeType = VkSamplerYcbcrConversionCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionCreateInfo( + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, + VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {}, + VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::Filter chromaFilter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest, + VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , ycbcrModel{ ycbcrModel_ } + , ycbcrRange{ ycbcrRange_ } + , components{ components_ } + , xChromaOffset{ xChromaOffset_ } + , yChromaOffset{ yChromaOffset_ } + , chromaFilter{ chromaFilter_ } + , forceExplicitReconstruction{ forceExplicitReconstruction_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionCreateInfo( SamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerYcbcrConversionCreateInfo( VkSamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerYcbcrConversionCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + SamplerYcbcrConversionCreateInfo & operator=( SamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerYcbcrConversionCreateInfo & operator=( VkSamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & + setYcbcrModel( VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel_ ) VULKAN_HPP_NOEXCEPT + { + ycbcrModel = ycbcrModel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setYcbcrRange( VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange_ ) VULKAN_HPP_NOEXCEPT + { + ycbcrRange = ycbcrRange_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT + { + components = components_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setXChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset_ ) VULKAN_HPP_NOEXCEPT + { + xChromaOffset = xChromaOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setYChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset_ ) VULKAN_HPP_NOEXCEPT + { + yChromaOffset = yChromaOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setChromaFilter( VULKAN_HPP_NAMESPACE::Filter chromaFilter_ ) VULKAN_HPP_NOEXCEPT + { + chromaFilter = chromaFilter_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & + setForceExplicitReconstruction( VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction_ ) VULKAN_HPP_NOEXCEPT + { + forceExplicitReconstruction = forceExplicitReconstruction_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerYcbcrConversionCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, format, ycbcrModel, ycbcrRange, components, xChromaOffset, yChromaOffset, chromaFilter, forceExplicitReconstruction ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerYcbcrConversionCreateInfo const & ) const = default; +#else + bool operator==( SamplerYcbcrConversionCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( ycbcrModel == rhs.ycbcrModel ) && + ( ycbcrRange == rhs.ycbcrRange ) && ( components == rhs.components ) && ( xChromaOffset == rhs.xChromaOffset ) && + ( yChromaOffset == rhs.yChromaOffset ) && ( chromaFilter == rhs.chromaFilter ) && + ( forceExplicitReconstruction == rhs.forceExplicitReconstruction ); +# endif + } + + bool operator!=( SamplerYcbcrConversionCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; + VULKAN_HPP_NAMESPACE::ComponentMapping components = {}; + VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::Filter chromaFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest; + VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction = {}; + }; + + template <> + struct CppType + { + using Type = SamplerYcbcrConversionCreateInfo; + }; + + using SamplerYcbcrConversionCreateInfoKHR = SamplerYcbcrConversionCreateInfo; + + // wrapper struct for struct VkSamplerYcbcrConversionImageFormatProperties, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrConversionImageFormatProperties.html + struct SamplerYcbcrConversionImageFormatProperties + { + using NativeType = VkSamplerYcbcrConversionImageFormatProperties; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionImageFormatProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionImageFormatProperties( uint32_t combinedImageSamplerDescriptorCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , combinedImageSamplerDescriptorCount{ combinedImageSamplerDescriptorCount_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionImageFormatProperties( SamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerYcbcrConversionImageFormatProperties( VkSamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerYcbcrConversionImageFormatProperties( *reinterpret_cast( &rhs ) ) + { + } + + SamplerYcbcrConversionImageFormatProperties & operator=( SamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerYcbcrConversionImageFormatProperties & operator=( VkSamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSamplerYcbcrConversionImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionImageFormatProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionImageFormatProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionImageFormatProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, combinedImageSamplerDescriptorCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerYcbcrConversionImageFormatProperties const & ) const = default; +#else + bool operator==( SamplerYcbcrConversionImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( combinedImageSamplerDescriptorCount == rhs.combinedImageSamplerDescriptorCount ); +# endif + } + + bool operator!=( SamplerYcbcrConversionImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionImageFormatProperties; + void * pNext = {}; + uint32_t combinedImageSamplerDescriptorCount = {}; + }; + + template <> + struct CppType + { + using Type = SamplerYcbcrConversionImageFormatProperties; + }; + + using SamplerYcbcrConversionImageFormatPropertiesKHR = SamplerYcbcrConversionImageFormatProperties; + + // wrapper struct for struct VkSamplerYcbcrConversionInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrConversionInfo.html + struct SamplerYcbcrConversionInfo + { + using NativeType = VkSamplerYcbcrConversionInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionInfo( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , conversion{ conversion_ } + { + } + + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionInfo( SamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerYcbcrConversionInfo( VkSamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerYcbcrConversionInfo( *reinterpret_cast( &rhs ) ) + { + } + + SamplerYcbcrConversionInfo & operator=( SamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerYcbcrConversionInfo & operator=( VkSamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo & setConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion_ ) VULKAN_HPP_NOEXCEPT + { + conversion = conversion_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerYcbcrConversionInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, conversion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerYcbcrConversionInfo const & ) const = default; +#else + bool operator==( SamplerYcbcrConversionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conversion == rhs.conversion ); +# endif + } + + bool operator!=( SamplerYcbcrConversionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion = {}; + }; + + template <> + struct CppType + { + using Type = SamplerYcbcrConversionInfo; + }; + + using SamplerYcbcrConversionInfoKHR = SamplerYcbcrConversionInfo; + + // wrapper struct for struct VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.html + struct SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM + { + using NativeType = VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM( VULKAN_HPP_NAMESPACE::Bool32 enableYDegamma_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 enableCbCrDegamma_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , enableYDegamma{ enableYDegamma_ } + , enableCbCrDegamma{ enableCbCrDegamma_ } + { + } + + VULKAN_HPP_CONSTEXPR + SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM( SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM( VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM & operator=( SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM & operator=( VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM & + setEnableYDegamma( VULKAN_HPP_NAMESPACE::Bool32 enableYDegamma_ ) VULKAN_HPP_NOEXCEPT + { + enableYDegamma = enableYDegamma_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM & + setEnableCbCrDegamma( VULKAN_HPP_NAMESPACE::Bool32 enableCbCrDegamma_ ) VULKAN_HPP_NOEXCEPT + { + enableCbCrDegamma = enableCbCrDegamma_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, enableYDegamma, enableCbCrDegamma ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & ) const = default; +#else + bool operator==( SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( enableYDegamma == rhs.enableYDegamma ) && ( enableCbCrDegamma == rhs.enableCbCrDegamma ); +# endif + } + + bool operator!=( SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 enableYDegamma = {}; + VULKAN_HPP_NAMESPACE::Bool32 enableCbCrDegamma = {}; + }; + + template <> + struct CppType + { + using Type = SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM; + }; + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + // wrapper struct for struct VkScreenBufferFormatPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkScreenBufferFormatPropertiesQNX.html + struct ScreenBufferFormatPropertiesQNX + { + using NativeType = VkScreenBufferFormatPropertiesQNX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eScreenBufferFormatPropertiesQNX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ScreenBufferFormatPropertiesQNX( + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint64_t externalFormat_ = {}, + uint64_t screenUsage_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ = {}, + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {}, + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity, + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , externalFormat{ externalFormat_ } + , screenUsage{ screenUsage_ } + , formatFeatures{ formatFeatures_ } + , samplerYcbcrConversionComponents{ samplerYcbcrConversionComponents_ } + , suggestedYcbcrModel{ suggestedYcbcrModel_ } + , suggestedYcbcrRange{ suggestedYcbcrRange_ } + , suggestedXChromaOffset{ suggestedXChromaOffset_ } + , suggestedYChromaOffset{ suggestedYChromaOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR ScreenBufferFormatPropertiesQNX( ScreenBufferFormatPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ScreenBufferFormatPropertiesQNX( VkScreenBufferFormatPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT + : ScreenBufferFormatPropertiesQNX( *reinterpret_cast( &rhs ) ) + { + } + + ScreenBufferFormatPropertiesQNX & operator=( ScreenBufferFormatPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ScreenBufferFormatPropertiesQNX & operator=( VkScreenBufferFormatPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkScreenBufferFormatPropertiesQNX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkScreenBufferFormatPropertiesQNX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkScreenBufferFormatPropertiesQNX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkScreenBufferFormatPropertiesQNX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + format, + externalFormat, + screenUsage, + formatFeatures, + samplerYcbcrConversionComponents, + suggestedYcbcrModel, + suggestedYcbcrRange, + suggestedXChromaOffset, + suggestedYChromaOffset ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ScreenBufferFormatPropertiesQNX const & ) const = default; +# else + bool operator==( ScreenBufferFormatPropertiesQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( externalFormat == rhs.externalFormat ) && + ( screenUsage == rhs.screenUsage ) && ( formatFeatures == rhs.formatFeatures ) && + ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) && ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && + ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) && ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) && + ( suggestedYChromaOffset == rhs.suggestedYChromaOffset ); +# endif + } + + bool operator!=( ScreenBufferFormatPropertiesQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eScreenBufferFormatPropertiesQNX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint64_t externalFormat = {}; + uint64_t screenUsage = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures = {}; + VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {}; + VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel = VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity; + VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven; + }; + + template <> + struct CppType + { + using Type = ScreenBufferFormatPropertiesQNX; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + // wrapper struct for struct VkScreenBufferPropertiesQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkScreenBufferPropertiesQNX.html + struct ScreenBufferPropertiesQNX + { + using NativeType = VkScreenBufferPropertiesQNX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eScreenBufferPropertiesQNX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ScreenBufferPropertiesQNX( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ = {}, + uint32_t memoryTypeBits_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , allocationSize{ allocationSize_ } + , memoryTypeBits{ memoryTypeBits_ } + { + } + + VULKAN_HPP_CONSTEXPR ScreenBufferPropertiesQNX( ScreenBufferPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ScreenBufferPropertiesQNX( VkScreenBufferPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT + : ScreenBufferPropertiesQNX( *reinterpret_cast( &rhs ) ) + { + } + + ScreenBufferPropertiesQNX & operator=( ScreenBufferPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ScreenBufferPropertiesQNX & operator=( VkScreenBufferPropertiesQNX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkScreenBufferPropertiesQNX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkScreenBufferPropertiesQNX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkScreenBufferPropertiesQNX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkScreenBufferPropertiesQNX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, allocationSize, memoryTypeBits ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ScreenBufferPropertiesQNX const & ) const = default; +# else + bool operator==( ScreenBufferPropertiesQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) && ( memoryTypeBits == rhs.memoryTypeBits ); +# endif + } + + bool operator!=( ScreenBufferPropertiesQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eScreenBufferPropertiesQNX; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {}; + uint32_t memoryTypeBits = {}; + }; + + template <> + struct CppType + { + using Type = ScreenBufferPropertiesQNX; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + // wrapper struct for struct VkScreenSurfaceCreateInfoQNX, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkScreenSurfaceCreateInfoQNX.html + struct ScreenSurfaceCreateInfoQNX + { + using NativeType = VkScreenSurfaceCreateInfoQNX; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eScreenSurfaceCreateInfoQNX; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ScreenSurfaceCreateInfoQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ = {}, + struct _screen_context * context_ = {}, + struct _screen_window * window_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , context{ context_ } + , window{ window_ } + { + } + + VULKAN_HPP_CONSTEXPR ScreenSurfaceCreateInfoQNX( ScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ScreenSurfaceCreateInfoQNX( VkScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT + : ScreenSurfaceCreateInfoQNX( *reinterpret_cast( &rhs ) ) + { + } + + ScreenSurfaceCreateInfoQNX & operator=( ScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ScreenSurfaceCreateInfoQNX & operator=( VkScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setFlags( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setContext( struct _screen_context * context_ ) VULKAN_HPP_NOEXCEPT + { + context = context_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setWindow( struct _screen_window * window_ ) VULKAN_HPP_NOEXCEPT + { + window = window_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkScreenSurfaceCreateInfoQNX const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkScreenSurfaceCreateInfoQNX &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkScreenSurfaceCreateInfoQNX const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkScreenSurfaceCreateInfoQNX *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, context, window ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ScreenSurfaceCreateInfoQNX const & ) const = default; +# else + bool operator==( ScreenSurfaceCreateInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( context == rhs.context ) && ( window == rhs.window ); +# endif + } + + bool operator!=( ScreenSurfaceCreateInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eScreenSurfaceCreateInfoQNX; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags = {}; + struct _screen_context * context = {}; + struct _screen_window * window = {}; + }; + + template <> + struct CppType + { + using Type = ScreenSurfaceCreateInfoQNX; + }; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + // wrapper struct for struct VkSemaphoreCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreCreateInfo.html + struct SemaphoreCreateInfo + { + using NativeType = VkSemaphoreCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreCreateInfo( VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreCreateInfo( SemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreCreateInfo( VkSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreCreateInfo & operator=( SemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreCreateInfo & operator=( VkSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreCreateInfo const & ) const = default; +#else + bool operator==( SemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( SemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags = {}; + }; + + template <> + struct CppType + { + using Type = SemaphoreCreateInfo; + }; + + // wrapper struct for struct VkSemaphoreGetFdInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreGetFdInfoKHR.html + struct SemaphoreGetFdInfoKHR + { + using NativeType = VkSemaphoreGetFdInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetFdInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreGetFdInfoKHR( + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreGetFdInfoKHR( SemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreGetFdInfoKHR( VkSemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SemaphoreGetFdInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreGetFdInfoKHR & operator=( SemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreGetFdInfoKHR & operator=( VkSemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreGetFdInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreGetFdInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, handleType ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreGetFdInfoKHR const & ) const = default; +#else + bool operator==( SemaphoreGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( SemaphoreGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreGetFdInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = SemaphoreGetFdInfoKHR; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkSemaphoreGetWin32HandleInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreGetWin32HandleInfoKHR.html + struct SemaphoreGetWin32HandleInfoKHR + { + using NativeType = VkSemaphoreGetWin32HandleInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetWin32HandleInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreGetWin32HandleInfoKHR( + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreGetWin32HandleInfoKHR( SemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreGetWin32HandleInfoKHR( VkSemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SemaphoreGetWin32HandleInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreGetWin32HandleInfoKHR & operator=( SemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreGetWin32HandleInfoKHR & operator=( VkSemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreGetWin32HandleInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreGetWin32HandleInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, handleType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreGetWin32HandleInfoKHR const & ) const = default; +# else + bool operator==( SemaphoreGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( SemaphoreGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreGetWin32HandleInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = SemaphoreGetWin32HandleInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + // wrapper struct for struct VkSemaphoreGetZirconHandleInfoFUCHSIA, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreGetZirconHandleInfoFUCHSIA.html + struct SemaphoreGetZirconHandleInfoFUCHSIA + { + using NativeType = VkSemaphoreGetZirconHandleInfoFUCHSIA; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreGetZirconHandleInfoFUCHSIA( + VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , handleType{ handleType_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreGetZirconHandleInfoFUCHSIA( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreGetZirconHandleInfoFUCHSIA( VkSemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + : SemaphoreGetZirconHandleInfoFUCHSIA( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreGetZirconHandleInfoFUCHSIA & operator=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreGetZirconHandleInfoFUCHSIA & operator=( VkSemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & + setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT + { + handleType = handleType_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreGetZirconHandleInfoFUCHSIA const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreGetZirconHandleInfoFUCHSIA *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, handleType ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreGetZirconHandleInfoFUCHSIA const & ) const = default; +# else + bool operator==( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( handleType == rhs.handleType ); +# endif + } + + bool operator!=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType = VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd; + }; + + template <> + struct CppType + { + using Type = SemaphoreGetZirconHandleInfoFUCHSIA; + }; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + // wrapper struct for struct VkSemaphoreSignalInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreSignalInfo.html + struct SemaphoreSignalInfo + { + using NativeType = VkSemaphoreSignalInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSignalInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SemaphoreSignalInfo( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {}, uint64_t value_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphore{ semaphore_ } + , value{ value_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreSignalInfo( SemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreSignalInfo( VkSemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreSignalInfo( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreSignalInfo & operator=( SemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreSignalInfo & operator=( VkSemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT + { + semaphore = semaphore_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT + { + value = value_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreSignalInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreSignalInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreSignalInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreSignalInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphore, value ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreSignalInfo const & ) const = default; +#else + bool operator==( SemaphoreSignalInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) && ( value == rhs.value ); +# endif + } + + bool operator!=( SemaphoreSignalInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreSignalInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Semaphore semaphore = {}; + uint64_t value = {}; + }; + + template <> + struct CppType + { + using Type = SemaphoreSignalInfo; + }; + + using SemaphoreSignalInfoKHR = SemaphoreSignalInfo; + + // wrapper struct for struct VkSemaphoreTypeCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreTypeCreateInfo.html + struct SemaphoreTypeCreateInfo + { + using NativeType = VkSemaphoreTypeCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreTypeCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreTypeCreateInfo( VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType_ = VULKAN_HPP_NAMESPACE::SemaphoreType::eBinary, + uint64_t initialValue_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , semaphoreType{ semaphoreType_ } + , initialValue{ initialValue_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreTypeCreateInfo( SemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreTypeCreateInfo( VkSemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : SemaphoreTypeCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + + SemaphoreTypeCreateInfo & operator=( SemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreTypeCreateInfo & operator=( VkSemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setSemaphoreType( VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType_ ) VULKAN_HPP_NOEXCEPT + { + semaphoreType = semaphoreType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setInitialValue( uint64_t initialValue_ ) VULKAN_HPP_NOEXCEPT + { + initialValue = initialValue_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreTypeCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreTypeCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreTypeCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreTypeCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, semaphoreType, initialValue ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreTypeCreateInfo const & ) const = default; +#else + bool operator==( SemaphoreTypeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphoreType == rhs.semaphoreType ) && ( initialValue == rhs.initialValue ); +# endif + } + + bool operator!=( SemaphoreTypeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreTypeCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType = VULKAN_HPP_NAMESPACE::SemaphoreType::eBinary; + uint64_t initialValue = {}; + }; + + template <> + struct CppType + { + using Type = SemaphoreTypeCreateInfo; + }; + + using SemaphoreTypeCreateInfoKHR = SemaphoreTypeCreateInfo; + + // wrapper struct for struct VkSemaphoreWaitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSemaphoreWaitInfo.html + struct SemaphoreWaitInfo + { + using NativeType = VkSemaphoreWaitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreWaitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SemaphoreWaitInfo( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ = {}, + uint32_t semaphoreCount_ = {}, + const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores_ = {}, + const uint64_t * pValues_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , semaphoreCount{ semaphoreCount_ } + , pSemaphores{ pSemaphores_ } + , pValues{ pValues_ } + { + } + + VULKAN_HPP_CONSTEXPR SemaphoreWaitInfo( SemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SemaphoreWaitInfo( VkSemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SemaphoreWaitInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SemaphoreWaitInfo( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & semaphores_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , semaphoreCount( static_cast( semaphores_.size() ) ) + , pSemaphores( semaphores_.data() ) + , pValues( values_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( semaphores_.size() == values_.size() ); +# else + if ( semaphores_.size() != values_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::SemaphoreWaitInfo::SemaphoreWaitInfo: semaphores_.size() != values_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SemaphoreWaitInfo & operator=( SemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SemaphoreWaitInfo & operator=( VkSemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setSemaphoreCount( uint32_t semaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + semaphoreCount = semaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + pSemaphores = pSemaphores_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SemaphoreWaitInfo & + setSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & semaphores_ ) VULKAN_HPP_NOEXCEPT + { + semaphoreCount = static_cast( semaphores_.size() ); + pSemaphores = semaphores_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPValues( const uint64_t * pValues_ ) VULKAN_HPP_NOEXCEPT + { + pValues = pValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SemaphoreWaitInfo & setValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & values_ ) VULKAN_HPP_NOEXCEPT + { + semaphoreCount = static_cast( values_.size() ); + pValues = values_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSemaphoreWaitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreWaitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSemaphoreWaitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSemaphoreWaitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, semaphoreCount, pSemaphores, pValues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SemaphoreWaitInfo const & ) const = default; +#else + bool operator==( SemaphoreWaitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( semaphoreCount == rhs.semaphoreCount ) && + ( pSemaphores == rhs.pSemaphores ) && ( pValues == rhs.pValues ); +# endif + } + + bool operator!=( SemaphoreWaitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreWaitInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags = {}; + uint32_t semaphoreCount = {}; + const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores = {}; + const uint64_t * pValues = {}; + }; + + template <> + struct CppType + { + using Type = SemaphoreWaitInfo; + }; + + using SemaphoreWaitInfoKHR = SemaphoreWaitInfo; + + // wrapper struct for struct VkSetDescriptorBufferOffsetsInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSetDescriptorBufferOffsetsInfoEXT.html + struct SetDescriptorBufferOffsetsInfoEXT + { + using NativeType = VkSetDescriptorBufferOffsetsInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSetDescriptorBufferOffsetsInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SetDescriptorBufferOffsetsInfoEXT( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {}, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_ = {}, + uint32_t firstSet_ = {}, + uint32_t setCount_ = {}, + const uint32_t * pBufferIndices_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stageFlags{ stageFlags_ } + , layout{ layout_ } + , firstSet{ firstSet_ } + , setCount{ setCount_ } + , pBufferIndices{ pBufferIndices_ } + , pOffsets{ pOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR SetDescriptorBufferOffsetsInfoEXT( SetDescriptorBufferOffsetsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SetDescriptorBufferOffsetsInfoEXT( VkSetDescriptorBufferOffsetsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SetDescriptorBufferOffsetsInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SetDescriptorBufferOffsetsInfoEXT( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_, + VULKAN_HPP_NAMESPACE::PipelineLayout layout_, + uint32_t firstSet_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferIndices_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & offsets_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stageFlags( stageFlags_ ) + , layout( layout_ ) + , firstSet( firstSet_ ) + , setCount( static_cast( bufferIndices_.size() ) ) + , pBufferIndices( bufferIndices_.data() ) + , pOffsets( offsets_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( bufferIndices_.size() == offsets_.size() ); +# else + if ( bufferIndices_.size() != offsets_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::SetDescriptorBufferOffsetsInfoEXT::SetDescriptorBufferOffsetsInfoEXT: bufferIndices_.size() != offsets_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SetDescriptorBufferOffsetsInfoEXT & operator=( SetDescriptorBufferOffsetsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SetDescriptorBufferOffsetsInfoEXT & operator=( VkSetDescriptorBufferOffsetsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT + { + stageFlags = stageFlags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT + { + layout = layout_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setFirstSet( uint32_t firstSet_ ) VULKAN_HPP_NOEXCEPT + { + firstSet = firstSet_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setSetCount( uint32_t setCount_ ) VULKAN_HPP_NOEXCEPT + { + setCount = setCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setPBufferIndices( const uint32_t * pBufferIndices_ ) VULKAN_HPP_NOEXCEPT + { + pBufferIndices = pBufferIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SetDescriptorBufferOffsetsInfoEXT & + setBufferIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & bufferIndices_ ) VULKAN_HPP_NOEXCEPT + { + setCount = static_cast( bufferIndices_.size() ); + pBufferIndices = bufferIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SetDescriptorBufferOffsetsInfoEXT & setPOffsets( const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pOffsets = pOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SetDescriptorBufferOffsetsInfoEXT & + setOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & offsets_ ) VULKAN_HPP_NOEXCEPT + { + setCount = static_cast( offsets_.size() ); + pOffsets = offsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSetDescriptorBufferOffsetsInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetDescriptorBufferOffsetsInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetDescriptorBufferOffsetsInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSetDescriptorBufferOffsetsInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stageFlags, layout, firstSet, setCount, pBufferIndices, pOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SetDescriptorBufferOffsetsInfoEXT const & ) const = default; +#else + bool operator==( SetDescriptorBufferOffsetsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageFlags == rhs.stageFlags ) && ( layout == rhs.layout ) && ( firstSet == rhs.firstSet ) && + ( setCount == rhs.setCount ) && ( pBufferIndices == rhs.pBufferIndices ) && ( pOffsets == rhs.pOffsets ); +# endif + } + + bool operator!=( SetDescriptorBufferOffsetsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSetDescriptorBufferOffsetsInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {}; + VULKAN_HPP_NAMESPACE::PipelineLayout layout = {}; + uint32_t firstSet = {}; + uint32_t setCount = {}; + const uint32_t * pBufferIndices = {}; + const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets = {}; + }; + + template <> + struct CppType + { + using Type = SetDescriptorBufferOffsetsInfoEXT; + }; + + // wrapper struct for struct VkSetLatencyMarkerInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSetLatencyMarkerInfoNV.html + struct SetLatencyMarkerInfoNV + { + using NativeType = VkSetLatencyMarkerInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSetLatencyMarkerInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SetLatencyMarkerInfoNV( uint64_t presentID_ = {}, + VULKAN_HPP_NAMESPACE::LatencyMarkerNV marker_ = VULKAN_HPP_NAMESPACE::LatencyMarkerNV::eSimulationStart, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentID{ presentID_ } + , marker{ marker_ } + { + } + + VULKAN_HPP_CONSTEXPR SetLatencyMarkerInfoNV( SetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SetLatencyMarkerInfoNV( VkSetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : SetLatencyMarkerInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + SetLatencyMarkerInfoNV & operator=( SetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SetLatencyMarkerInfoNV & operator=( VkSetLatencyMarkerInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SetLatencyMarkerInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetLatencyMarkerInfoNV & setPresentID( uint64_t presentID_ ) VULKAN_HPP_NOEXCEPT + { + presentID = presentID_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetLatencyMarkerInfoNV & setMarker( VULKAN_HPP_NAMESPACE::LatencyMarkerNV marker_ ) VULKAN_HPP_NOEXCEPT + { + marker = marker_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSetLatencyMarkerInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetLatencyMarkerInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetLatencyMarkerInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSetLatencyMarkerInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentID, marker ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SetLatencyMarkerInfoNV const & ) const = default; +#else + bool operator==( SetLatencyMarkerInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentID == rhs.presentID ) && ( marker == rhs.marker ); +# endif + } + + bool operator!=( SetLatencyMarkerInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSetLatencyMarkerInfoNV; + const void * pNext = {}; + uint64_t presentID = {}; + VULKAN_HPP_NAMESPACE::LatencyMarkerNV marker = VULKAN_HPP_NAMESPACE::LatencyMarkerNV::eSimulationStart; + }; + + template <> + struct CppType + { + using Type = SetLatencyMarkerInfoNV; + }; + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + // wrapper struct for struct VkSetPresentConfigNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSetPresentConfigNV.html + struct SetPresentConfigNV + { + using NativeType = VkSetPresentConfigNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSetPresentConfigNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SetPresentConfigNV( uint32_t numFramesPerBatch_ = {}, uint32_t presentConfigFeedback_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , numFramesPerBatch{ numFramesPerBatch_ } + , presentConfigFeedback{ presentConfigFeedback_ } + { + } + + VULKAN_HPP_CONSTEXPR SetPresentConfigNV( SetPresentConfigNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SetPresentConfigNV( VkSetPresentConfigNV const & rhs ) VULKAN_HPP_NOEXCEPT : SetPresentConfigNV( *reinterpret_cast( &rhs ) ) {} + + SetPresentConfigNV & operator=( SetPresentConfigNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SetPresentConfigNV & operator=( VkSetPresentConfigNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SetPresentConfigNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetPresentConfigNV & setNumFramesPerBatch( uint32_t numFramesPerBatch_ ) VULKAN_HPP_NOEXCEPT + { + numFramesPerBatch = numFramesPerBatch_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SetPresentConfigNV & setPresentConfigFeedback( uint32_t presentConfigFeedback_ ) VULKAN_HPP_NOEXCEPT + { + presentConfigFeedback = presentConfigFeedback_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSetPresentConfigNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetPresentConfigNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetPresentConfigNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSetPresentConfigNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, numFramesPerBatch, presentConfigFeedback ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SetPresentConfigNV const & ) const = default; +# else + bool operator==( SetPresentConfigNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( numFramesPerBatch == rhs.numFramesPerBatch ) && + ( presentConfigFeedback == rhs.presentConfigFeedback ); +# endif + } + + bool operator!=( SetPresentConfigNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSetPresentConfigNV; + const void * pNext = {}; + uint32_t numFramesPerBatch = {}; + uint32_t presentConfigFeedback = {}; + }; + + template <> + struct CppType + { + using Type = SetPresentConfigNV; + }; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + // wrapper struct for struct VkSetStateFlagsIndirectCommandNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSetStateFlagsIndirectCommandNV.html + struct SetStateFlagsIndirectCommandNV + { + using NativeType = VkSetStateFlagsIndirectCommandNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SetStateFlagsIndirectCommandNV( uint32_t data_ = {} ) VULKAN_HPP_NOEXCEPT : data{ data_ } {} + + VULKAN_HPP_CONSTEXPR SetStateFlagsIndirectCommandNV( SetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SetStateFlagsIndirectCommandNV( VkSetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + : SetStateFlagsIndirectCommandNV( *reinterpret_cast( &rhs ) ) + { + } + + SetStateFlagsIndirectCommandNV & operator=( SetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SetStateFlagsIndirectCommandNV & operator=( VkSetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SetStateFlagsIndirectCommandNV & setData( uint32_t data_ ) VULKAN_HPP_NOEXCEPT + { + data = data_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSetStateFlagsIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetStateFlagsIndirectCommandNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSetStateFlagsIndirectCommandNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSetStateFlagsIndirectCommandNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( data ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SetStateFlagsIndirectCommandNV const & ) const = default; +#else + bool operator==( SetStateFlagsIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( data == rhs.data ); +# endif + } + + bool operator!=( SetStateFlagsIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t data = {}; + }; + + // wrapper struct for struct VkShaderCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderCreateInfoEXT.html + struct ShaderCreateInfoEXT + { + using NativeType = VkShaderCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ShaderCreateInfoEXT( VULKAN_HPP_NAMESPACE::ShaderCreateFlagsEXT flags_ = {}, + VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ = VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex, + VULKAN_HPP_NAMESPACE::ShaderStageFlags nextStage_ = {}, + VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT codeType_ = VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT::eBinary, + size_t codeSize_ = {}, + const void * pCode_ = {}, + const char * pName_ = {}, + uint32_t setLayoutCount_ = {}, + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ = {}, + uint32_t pushConstantRangeCount_ = {}, + const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ = {}, + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , stage{ stage_ } + , nextStage{ nextStage_ } + , codeType{ codeType_ } + , codeSize{ codeSize_ } + , pCode{ pCode_ } + , pName{ pName_ } + , setLayoutCount{ setLayoutCount_ } + , pSetLayouts{ pSetLayouts_ } + , pushConstantRangeCount{ pushConstantRangeCount_ } + , pPushConstantRanges{ pPushConstantRanges_ } + , pSpecializationInfo{ pSpecializationInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR ShaderCreateInfoEXT( ShaderCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShaderCreateInfoEXT( VkShaderCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT : ShaderCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + ShaderCreateInfoEXT( VULKAN_HPP_NAMESPACE::ShaderCreateFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_, + VULKAN_HPP_NAMESPACE::ShaderStageFlags nextStage_, + VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT codeType_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & code_, + const char * pName_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ = {}, + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , stage( stage_ ) + , nextStage( nextStage_ ) + , codeType( codeType_ ) + , codeSize( code_.size() * sizeof( T ) ) + , pCode( code_.data() ) + , pName( pName_ ) + , setLayoutCount( static_cast( setLayouts_.size() ) ) + , pSetLayouts( setLayouts_.data() ) + , pushConstantRangeCount( static_cast( pushConstantRanges_.size() ) ) + , pPushConstantRanges( pushConstantRanges_.data() ) + , pSpecializationInfo( pSpecializationInfo_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ShaderCreateInfoEXT & operator=( ShaderCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShaderCreateInfoEXT & operator=( VkShaderCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::ShaderCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setStage( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ ) VULKAN_HPP_NOEXCEPT + { + stage = stage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setNextStage( VULKAN_HPP_NAMESPACE::ShaderStageFlags nextStage_ ) VULKAN_HPP_NOEXCEPT + { + nextStage = nextStage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setCodeType( VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT codeType_ ) VULKAN_HPP_NOEXCEPT + { + codeType = codeType_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setCodeSize( size_t codeSize_ ) VULKAN_HPP_NOEXCEPT + { + codeSize = codeSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setPCode( const void * pCode_ ) VULKAN_HPP_NOEXCEPT + { + pCode = pCode_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + ShaderCreateInfoEXT & setCode( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & code_ ) VULKAN_HPP_NOEXCEPT + { + codeSize = code_.size() * sizeof( T ); + pCode = code_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT + { + pName = pName_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setSetLayoutCount( uint32_t setLayoutCount_ ) VULKAN_HPP_NOEXCEPT + { + setLayoutCount = setLayoutCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT + { + pSetLayouts = pSetLayouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ShaderCreateInfoEXT & + setSetLayouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & setLayouts_ ) VULKAN_HPP_NOEXCEPT + { + setLayoutCount = static_cast( setLayouts_.size() ); + pSetLayouts = setLayouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & setPushConstantRangeCount( uint32_t pushConstantRangeCount_ ) VULKAN_HPP_NOEXCEPT + { + pushConstantRangeCount = pushConstantRangeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & + setPPushConstantRanges( const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ ) VULKAN_HPP_NOEXCEPT + { + pPushConstantRanges = pPushConstantRanges_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ShaderCreateInfoEXT & setPushConstantRanges( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & pushConstantRanges_ ) VULKAN_HPP_NOEXCEPT + { + pushConstantRangeCount = static_cast( pushConstantRanges_.size() ); + pPushConstantRanges = pushConstantRanges_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ShaderCreateInfoEXT & + setPSpecializationInfo( const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ ) VULKAN_HPP_NOEXCEPT + { + pSpecializationInfo = pSpecializationInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkShaderCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShaderCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + stage, + nextStage, + codeType, + codeSize, + pCode, + pName, + setLayoutCount, + pSetLayouts, + pushConstantRangeCount, + pPushConstantRanges, + pSpecializationInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ShaderCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = stage <=> rhs.stage; cmp != 0 ) + return cmp; + if ( auto cmp = nextStage <=> rhs.nextStage; cmp != 0 ) + return cmp; + if ( auto cmp = codeType <=> rhs.codeType; cmp != 0 ) + return cmp; + if ( auto cmp = codeSize <=> rhs.codeSize; cmp != 0 ) + return cmp; + if ( auto cmp = pCode <=> rhs.pCode; cmp != 0 ) + return cmp; + if ( pName != rhs.pName ) + if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = setLayoutCount <=> rhs.setLayoutCount; cmp != 0 ) + return cmp; + if ( auto cmp = pSetLayouts <=> rhs.pSetLayouts; cmp != 0 ) + return cmp; + if ( auto cmp = pushConstantRangeCount <=> rhs.pushConstantRangeCount; cmp != 0 ) + return cmp; + if ( auto cmp = pPushConstantRanges <=> rhs.pPushConstantRanges; cmp != 0 ) + return cmp; + if ( auto cmp = pSpecializationInfo <=> rhs.pSpecializationInfo; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( ShaderCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) && ( nextStage == rhs.nextStage ) && + ( codeType == rhs.codeType ) && ( codeSize == rhs.codeSize ) && ( pCode == rhs.pCode ) && + ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ) && ( setLayoutCount == rhs.setLayoutCount ) && + ( pSetLayouts == rhs.pSetLayouts ) && ( pushConstantRangeCount == rhs.pushConstantRangeCount ) && + ( pPushConstantRanges == rhs.pPushConstantRanges ) && ( pSpecializationInfo == rhs.pSpecializationInfo ); + } + + bool operator!=( ShaderCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderCreateFlagsEXT flags = {}; + VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage = VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eVertex; + VULKAN_HPP_NAMESPACE::ShaderStageFlags nextStage = {}; + VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT codeType = VULKAN_HPP_NAMESPACE::ShaderCodeTypeEXT::eBinary; + size_t codeSize = {}; + const void * pCode = {}; + const char * pName = {}; + uint32_t setLayoutCount = {}; + const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {}; + uint32_t pushConstantRangeCount = {}; + const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges = {}; + const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo = {}; + }; + + template <> + struct CppType + { + using Type = ShaderCreateInfoEXT; + }; + + // wrapper struct for struct VkShaderModuleCreateInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderModuleCreateInfo.html + struct ShaderModuleCreateInfo + { + using NativeType = VkShaderModuleCreateInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleCreateInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ShaderModuleCreateInfo( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ = {}, + size_t codeSize_ = {}, + const uint32_t * pCode_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , codeSize{ codeSize_ } + , pCode{ pCode_ } + { + } + + VULKAN_HPP_CONSTEXPR ShaderModuleCreateInfo( ShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShaderModuleCreateInfo( VkShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : ShaderModuleCreateInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ShaderModuleCreateInfo( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & code_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), codeSize( code_.size() * 4 ), pCode( code_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ShaderModuleCreateInfo & operator=( ShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShaderModuleCreateInfo & operator=( VkShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setCodeSize( size_t codeSize_ ) VULKAN_HPP_NOEXCEPT + { + codeSize = codeSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setPCode( const uint32_t * pCode_ ) VULKAN_HPP_NOEXCEPT + { + pCode = pCode_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ShaderModuleCreateInfo & setCode( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & code_ ) VULKAN_HPP_NOEXCEPT + { + codeSize = code_.size() * 4; + pCode = code_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkShaderModuleCreateInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderModuleCreateInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderModuleCreateInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShaderModuleCreateInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, codeSize, pCode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShaderModuleCreateInfo const & ) const = default; +#else + bool operator==( ShaderModuleCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( codeSize == rhs.codeSize ) && ( pCode == rhs.pCode ); +# endif + } + + bool operator!=( ShaderModuleCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderModuleCreateInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags = {}; + size_t codeSize = {}; + const uint32_t * pCode = {}; + }; + + template <> + struct CppType + { + using Type = ShaderModuleCreateInfo; + }; + + // wrapper struct for struct VkShaderModuleIdentifierEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderModuleIdentifierEXT.html + struct ShaderModuleIdentifierEXT + { + using NativeType = VkShaderModuleIdentifierEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleIdentifierEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ShaderModuleIdentifierEXT( uint32_t identifierSize_ = {}, + std::array const & identifier_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , identifierSize{ identifierSize_ } + , identifier{ identifier_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ShaderModuleIdentifierEXT( ShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShaderModuleIdentifierEXT( VkShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ShaderModuleIdentifierEXT( *reinterpret_cast( &rhs ) ) + { + } + + ShaderModuleIdentifierEXT & operator=( ShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShaderModuleIdentifierEXT & operator=( VkShaderModuleIdentifierEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkShaderModuleIdentifierEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderModuleIdentifierEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderModuleIdentifierEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShaderModuleIdentifierEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, identifierSize, identifier ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( ShaderModuleIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = identifierSize <=> rhs.identifierSize; cmp != 0 ) + return cmp; + for ( size_t i = 0; i < identifierSize; ++i ) + { + if ( auto cmp = identifier[i] <=> rhs.identifier[i]; cmp != 0 ) + return cmp; + } + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( ShaderModuleIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( identifierSize == rhs.identifierSize ) && + ( memcmp( identifier, rhs.identifier, identifierSize * sizeof( uint8_t ) ) == 0 ); + } + + bool operator!=( ShaderModuleIdentifierEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderModuleIdentifierEXT; + void * pNext = {}; + uint32_t identifierSize = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D identifier = {}; + }; + + template <> + struct CppType + { + using Type = ShaderModuleIdentifierEXT; + }; + + // wrapper struct for struct VkShaderModuleValidationCacheCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderModuleValidationCacheCreateInfoEXT.html + struct ShaderModuleValidationCacheCreateInfoEXT + { + using NativeType = VkShaderModuleValidationCacheCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleValidationCacheCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ShaderModuleValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , validationCache{ validationCache_ } + { + } + + VULKAN_HPP_CONSTEXPR ShaderModuleValidationCacheCreateInfoEXT( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShaderModuleValidationCacheCreateInfoEXT( VkShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ShaderModuleValidationCacheCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + ShaderModuleValidationCacheCreateInfoEXT & operator=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShaderModuleValidationCacheCreateInfoEXT & operator=( VkShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT & + setValidationCache( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache_ ) VULKAN_HPP_NOEXCEPT + { + validationCache = validationCache_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkShaderModuleValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderModuleValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderModuleValidationCacheCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShaderModuleValidationCacheCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, validationCache ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShaderModuleValidationCacheCreateInfoEXT const & ) const = default; +#else + bool operator==( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( validationCache == rhs.validationCache ); +# endif + } + + bool operator!=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eShaderModuleValidationCacheCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache = {}; + }; + + template <> + struct CppType + { + using Type = ShaderModuleValidationCacheCreateInfoEXT; + }; + + // wrapper struct for struct VkShaderResourceUsageAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderResourceUsageAMD.html + struct ShaderResourceUsageAMD + { + using NativeType = VkShaderResourceUsageAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ShaderResourceUsageAMD( uint32_t numUsedVgprs_ = {}, + uint32_t numUsedSgprs_ = {}, + uint32_t ldsSizePerLocalWorkGroup_ = {}, + size_t ldsUsageSizeInBytes_ = {}, + size_t scratchMemUsageInBytes_ = {} ) VULKAN_HPP_NOEXCEPT + : numUsedVgprs{ numUsedVgprs_ } + , numUsedSgprs{ numUsedSgprs_ } + , ldsSizePerLocalWorkGroup{ ldsSizePerLocalWorkGroup_ } + , ldsUsageSizeInBytes{ ldsUsageSizeInBytes_ } + , scratchMemUsageInBytes{ scratchMemUsageInBytes_ } + { + } + + VULKAN_HPP_CONSTEXPR ShaderResourceUsageAMD( ShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShaderResourceUsageAMD( VkShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : ShaderResourceUsageAMD( *reinterpret_cast( &rhs ) ) + { + } + + ShaderResourceUsageAMD & operator=( ShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShaderResourceUsageAMD & operator=( VkShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkShaderResourceUsageAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderResourceUsageAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderResourceUsageAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShaderResourceUsageAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( numUsedVgprs, numUsedSgprs, ldsSizePerLocalWorkGroup, ldsUsageSizeInBytes, scratchMemUsageInBytes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShaderResourceUsageAMD const & ) const = default; +#else + bool operator==( ShaderResourceUsageAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( numUsedVgprs == rhs.numUsedVgprs ) && ( numUsedSgprs == rhs.numUsedSgprs ) && ( ldsSizePerLocalWorkGroup == rhs.ldsSizePerLocalWorkGroup ) && + ( ldsUsageSizeInBytes == rhs.ldsUsageSizeInBytes ) && ( scratchMemUsageInBytes == rhs.scratchMemUsageInBytes ); +# endif + } + + bool operator!=( ShaderResourceUsageAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t numUsedVgprs = {}; + uint32_t numUsedSgprs = {}; + uint32_t ldsSizePerLocalWorkGroup = {}; + size_t ldsUsageSizeInBytes = {}; + size_t scratchMemUsageInBytes = {}; + }; + + // wrapper struct for struct VkShaderStatisticsInfoAMD, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkShaderStatisticsInfoAMD.html + struct ShaderStatisticsInfoAMD + { + using NativeType = VkShaderStatisticsInfoAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 ShaderStatisticsInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStageMask_ = {}, + VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD resourceUsage_ = {}, + uint32_t numPhysicalVgprs_ = {}, + uint32_t numPhysicalSgprs_ = {}, + uint32_t numAvailableVgprs_ = {}, + uint32_t numAvailableSgprs_ = {}, + std::array const & computeWorkGroupSize_ = {} ) VULKAN_HPP_NOEXCEPT + : shaderStageMask{ shaderStageMask_ } + , resourceUsage{ resourceUsage_ } + , numPhysicalVgprs{ numPhysicalVgprs_ } + , numPhysicalSgprs{ numPhysicalSgprs_ } + , numAvailableVgprs{ numAvailableVgprs_ } + , numAvailableSgprs{ numAvailableSgprs_ } + , computeWorkGroupSize{ computeWorkGroupSize_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 ShaderStatisticsInfoAMD( ShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ShaderStatisticsInfoAMD( VkShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : ShaderStatisticsInfoAMD( *reinterpret_cast( &rhs ) ) + { + } + + ShaderStatisticsInfoAMD & operator=( ShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ShaderStatisticsInfoAMD & operator=( VkShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkShaderStatisticsInfoAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderStatisticsInfoAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkShaderStatisticsInfoAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkShaderStatisticsInfoAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( shaderStageMask, resourceUsage, numPhysicalVgprs, numPhysicalSgprs, numAvailableVgprs, numAvailableSgprs, computeWorkGroupSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ShaderStatisticsInfoAMD const & ) const = default; +#else + bool operator==( ShaderStatisticsInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( shaderStageMask == rhs.shaderStageMask ) && ( resourceUsage == rhs.resourceUsage ) && ( numPhysicalVgprs == rhs.numPhysicalVgprs ) && + ( numPhysicalSgprs == rhs.numPhysicalSgprs ) && ( numAvailableVgprs == rhs.numAvailableVgprs ) && ( numAvailableSgprs == rhs.numAvailableSgprs ) && + ( computeWorkGroupSize == rhs.computeWorkGroupSize ); +# endif + } + + bool operator!=( ShaderStatisticsInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStageMask = {}; + VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD resourceUsage = {}; + uint32_t numPhysicalVgprs = {}; + uint32_t numPhysicalSgprs = {}; + uint32_t numAvailableVgprs = {}; + uint32_t numAvailableSgprs = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D computeWorkGroupSize = {}; + }; + + // wrapper struct for struct VkSharedPresentSurfaceCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSharedPresentSurfaceCapabilitiesKHR.html + struct SharedPresentSurfaceCapabilitiesKHR + { + using NativeType = VkSharedPresentSurfaceCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSharedPresentSurfaceCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SharedPresentSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::ImageUsageFlags sharedPresentSupportedUsageFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , sharedPresentSupportedUsageFlags{ sharedPresentSupportedUsageFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR SharedPresentSurfaceCapabilitiesKHR( SharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SharedPresentSurfaceCapabilitiesKHR( VkSharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SharedPresentSurfaceCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + SharedPresentSurfaceCapabilitiesKHR & operator=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SharedPresentSurfaceCapabilitiesKHR & operator=( VkSharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSharedPresentSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSharedPresentSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSharedPresentSurfaceCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSharedPresentSurfaceCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, sharedPresentSupportedUsageFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SharedPresentSurfaceCapabilitiesKHR const & ) const = default; +#else + bool operator==( SharedPresentSurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sharedPresentSupportedUsageFlags == rhs.sharedPresentSupportedUsageFlags ); +# endif + } + + bool operator!=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSharedPresentSurfaceCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags sharedPresentSupportedUsageFlags = {}; + }; + + template <> + struct CppType + { + using Type = SharedPresentSurfaceCapabilitiesKHR; + }; + + // wrapper struct for struct VkSparseImageFormatProperties, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageFormatProperties.html + struct SparseImageFormatProperties + { + using NativeType = VkSparseImageFormatProperties; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageFormatProperties( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {}, + VULKAN_HPP_NAMESPACE::Extent3D imageGranularity_ = {}, + VULKAN_HPP_NAMESPACE::SparseImageFormatFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT + : aspectMask{ aspectMask_ } + , imageGranularity{ imageGranularity_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageFormatProperties( SparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageFormatProperties( VkSparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageFormatProperties( *reinterpret_cast( &rhs ) ) + { + } + + SparseImageFormatProperties & operator=( SparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageFormatProperties & operator=( VkSparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSparseImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageFormatProperties &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageFormatProperties const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageFormatProperties *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( aspectMask, imageGranularity, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageFormatProperties const & ) const = default; +#else + bool operator==( SparseImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( aspectMask == rhs.aspectMask ) && ( imageGranularity == rhs.imageGranularity ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( SparseImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {}; + VULKAN_HPP_NAMESPACE::Extent3D imageGranularity = {}; + VULKAN_HPP_NAMESPACE::SparseImageFormatFlags flags = {}; + }; + + // wrapper struct for struct VkSparseImageFormatProperties2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageFormatProperties2.html + struct SparseImageFormatProperties2 + { + using NativeType = VkSparseImageFormatProperties2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageFormatProperties2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageFormatProperties2( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties properties_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , properties{ properties_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageFormatProperties2( SparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageFormatProperties2( VkSparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageFormatProperties2( *reinterpret_cast( &rhs ) ) + { + } + + SparseImageFormatProperties2 & operator=( SparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageFormatProperties2 & operator=( VkSparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSparseImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageFormatProperties2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageFormatProperties2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, properties ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageFormatProperties2 const & ) const = default; +#else + bool operator==( SparseImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties ); +# endif + } + + bool operator!=( SparseImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSparseImageFormatProperties2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SparseImageFormatProperties properties = {}; + }; + + template <> + struct CppType + { + using Type = SparseImageFormatProperties2; + }; + + using SparseImageFormatProperties2KHR = SparseImageFormatProperties2; + + // wrapper struct for struct VkSparseImageMemoryRequirements, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageMemoryRequirements.html + struct SparseImageMemoryRequirements + { + using NativeType = VkSparseImageMemoryRequirements; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties formatProperties_ = {}, + uint32_t imageMipTailFirstLod_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailStride_ = {} ) VULKAN_HPP_NOEXCEPT + : formatProperties{ formatProperties_ } + , imageMipTailFirstLod{ imageMipTailFirstLod_ } + , imageMipTailSize{ imageMipTailSize_ } + , imageMipTailOffset{ imageMipTailOffset_ } + , imageMipTailStride{ imageMipTailStride_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements( SparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageMemoryRequirements( VkSparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageMemoryRequirements( *reinterpret_cast( &rhs ) ) + { + } + + SparseImageMemoryRequirements & operator=( SparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageMemoryRequirements & operator=( VkSparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSparseImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryRequirements const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageMemoryRequirements *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( formatProperties, imageMipTailFirstLod, imageMipTailSize, imageMipTailOffset, imageMipTailStride ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageMemoryRequirements const & ) const = default; +#else + bool operator==( SparseImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( formatProperties == rhs.formatProperties ) && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod ) && + ( imageMipTailSize == rhs.imageMipTailSize ) && ( imageMipTailOffset == rhs.imageMipTailOffset ) && + ( imageMipTailStride == rhs.imageMipTailStride ); +# endif + } + + bool operator!=( SparseImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::SparseImageFormatProperties formatProperties = {}; + uint32_t imageMipTailFirstLod = {}; + VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailStride = {}; + }; + + // wrapper struct for struct VkSparseImageMemoryRequirements2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSparseImageMemoryRequirements2.html + struct SparseImageMemoryRequirements2 + { + using NativeType = VkSparseImageMemoryRequirements2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageMemoryRequirements2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements2( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements memoryRequirements_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryRequirements{ memoryRequirements_ } + { + } + + VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements2( SparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SparseImageMemoryRequirements2( VkSparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT + : SparseImageMemoryRequirements2( *reinterpret_cast( &rhs ) ) + { + } + + SparseImageMemoryRequirements2 & operator=( SparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SparseImageMemoryRequirements2 & operator=( VkSparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSparseImageMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSparseImageMemoryRequirements2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSparseImageMemoryRequirements2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryRequirements ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SparseImageMemoryRequirements2 const & ) const = default; +#else + bool operator==( SparseImageMemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryRequirements == rhs.memoryRequirements ); +# endif + } + + bool operator!=( SparseImageMemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSparseImageMemoryRequirements2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements memoryRequirements = {}; + }; + + template <> + struct CppType + { + using Type = SparseImageMemoryRequirements2; + }; + + using SparseImageMemoryRequirements2KHR = SparseImageMemoryRequirements2; + +#if defined( VK_USE_PLATFORM_GGP ) + // wrapper struct for struct VkStreamDescriptorSurfaceCreateInfoGGP, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkStreamDescriptorSurfaceCreateInfoGGP.html + struct StreamDescriptorSurfaceCreateInfoGGP + { + using NativeType = VkStreamDescriptorSurfaceCreateInfoGGP; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eStreamDescriptorSurfaceCreateInfoGGP; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR StreamDescriptorSurfaceCreateInfoGGP( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags_ = {}, + GgpStreamDescriptor streamDescriptor_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , streamDescriptor{ streamDescriptor_ } + { + } + + VULKAN_HPP_CONSTEXPR StreamDescriptorSurfaceCreateInfoGGP( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + StreamDescriptorSurfaceCreateInfoGGP( VkStreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT + : StreamDescriptorSurfaceCreateInfoGGP( *reinterpret_cast( &rhs ) ) + { + } + + StreamDescriptorSurfaceCreateInfoGGP & operator=( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + StreamDescriptorSurfaceCreateInfoGGP & operator=( VkStreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & + setFlags( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & setStreamDescriptor( GgpStreamDescriptor streamDescriptor_ ) VULKAN_HPP_NOEXCEPT + { + streamDescriptor = streamDescriptor_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkStreamDescriptorSurfaceCreateInfoGGP const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStreamDescriptorSurfaceCreateInfoGGP &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkStreamDescriptorSurfaceCreateInfoGGP const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkStreamDescriptorSurfaceCreateInfoGGP *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, streamDescriptor ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &streamDescriptor, &rhs.streamDescriptor, sizeof( GgpStreamDescriptor ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( memcmp( &streamDescriptor, &rhs.streamDescriptor, sizeof( GgpStreamDescriptor ) ) == 0 ); + } + + bool operator!=( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eStreamDescriptorSurfaceCreateInfoGGP; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags = {}; + GgpStreamDescriptor streamDescriptor = {}; + }; + + template <> + struct CppType + { + using Type = StreamDescriptorSurfaceCreateInfoGGP; + }; +#endif /*VK_USE_PLATFORM_GGP*/ + + // wrapper struct for struct VkSubmitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubmitInfo.html + struct SubmitInfo + { + using NativeType = VkSubmitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubmitInfo( uint32_t waitSemaphoreCount_ = {}, + const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ = {}, + const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask_ = {}, + uint32_t commandBufferCount_ = {}, + const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers_ = {}, + uint32_t signalSemaphoreCount_ = {}, + const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , waitSemaphoreCount{ waitSemaphoreCount_ } + , pWaitSemaphores{ pWaitSemaphores_ } + , pWaitDstStageMask{ pWaitDstStageMask_ } + , commandBufferCount{ commandBufferCount_ } + , pCommandBuffers{ pCommandBuffers_ } + , signalSemaphoreCount{ signalSemaphoreCount_ } + , pSignalSemaphores{ pSignalSemaphores_ } + { + } + + VULKAN_HPP_CONSTEXPR SubmitInfo( SubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubmitInfo( VkSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SubmitInfo( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitDstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBuffers_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , waitSemaphoreCount( static_cast( waitSemaphores_.size() ) ) + , pWaitSemaphores( waitSemaphores_.data() ) + , pWaitDstStageMask( waitDstStageMask_.data() ) + , commandBufferCount( static_cast( commandBuffers_.size() ) ) + , pCommandBuffers( commandBuffers_.data() ) + , signalSemaphoreCount( static_cast( signalSemaphores_.size() ) ) + , pSignalSemaphores( signalSemaphores_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( waitSemaphores_.size() == waitDstStageMask_.size() ); +# else + if ( waitSemaphores_.size() != waitDstStageMask_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING "::SubmitInfo::SubmitInfo: waitSemaphores_.size() != waitDstStageMask_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SubmitInfo & operator=( SubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubmitInfo & operator=( VkSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = waitSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphores = pWaitSemaphores_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo & + setWaitSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = static_cast( waitSemaphores_.size() ); + pWaitSemaphores = waitSemaphores_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPWaitDstStageMask( const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + pWaitDstStageMask = pWaitDstStageMask_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo & setWaitDstStageMask( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitDstStageMask_ ) + VULKAN_HPP_NOEXCEPT + { + waitSemaphoreCount = static_cast( waitDstStageMask_.size() ); + pWaitDstStageMask = waitDstStageMask_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferCount = commandBufferCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers_ ) VULKAN_HPP_NOEXCEPT + { + pCommandBuffers = pCommandBuffers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo & + setCommandBuffers( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBuffers_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferCount = static_cast( commandBuffers_.size() ); + pCommandBuffers = commandBuffers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreCount = signalSemaphoreCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + pSignalSemaphores = pSignalSemaphores_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo & + setSignalSemaphores( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphores_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreCount = static_cast( signalSemaphores_.size() ); + pSignalSemaphores = signalSemaphores_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubmitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubmitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubmitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubmitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, waitSemaphoreCount, pWaitSemaphores, pWaitDstStageMask, commandBufferCount, pCommandBuffers, signalSemaphoreCount, pSignalSemaphores ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubmitInfo const & ) const = default; +#else + bool operator==( SubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) && + ( pWaitSemaphores == rhs.pWaitSemaphores ) && ( pWaitDstStageMask == rhs.pWaitDstStageMask ) && ( commandBufferCount == rhs.commandBufferCount ) && + ( pCommandBuffers == rhs.pCommandBuffers ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) && + ( pSignalSemaphores == rhs.pSignalSemaphores ); +# endif + } + + bool operator!=( SubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubmitInfo; + const void * pNext = {}; + uint32_t waitSemaphoreCount = {}; + const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores = {}; + const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask = {}; + uint32_t commandBufferCount = {}; + const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers = {}; + uint32_t signalSemaphoreCount = {}; + const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores = {}; + }; + + template <> + struct CppType + { + using Type = SubmitInfo; + }; + + // wrapper struct for struct VkSubmitInfo2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubmitInfo2.html + struct SubmitInfo2 + { + using NativeType = VkSubmitInfo2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubmitInfo2( VULKAN_HPP_NAMESPACE::SubmitFlags flags_ = {}, + uint32_t waitSemaphoreInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos_ = {}, + uint32_t commandBufferInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos_ = {}, + uint32_t signalSemaphoreInfoCount_ = {}, + const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , waitSemaphoreInfoCount{ waitSemaphoreInfoCount_ } + , pWaitSemaphoreInfos{ pWaitSemaphoreInfos_ } + , commandBufferInfoCount{ commandBufferInfoCount_ } + , pCommandBufferInfos{ pCommandBufferInfos_ } + , signalSemaphoreInfoCount{ signalSemaphoreInfoCount_ } + , pSignalSemaphoreInfos{ pSignalSemaphoreInfos_ } + { + } + + VULKAN_HPP_CONSTEXPR SubmitInfo2( SubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubmitInfo2( VkSubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubmitInfo2( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo2( VULKAN_HPP_NAMESPACE::SubmitFlags flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreInfos_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferInfos_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreInfos_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , waitSemaphoreInfoCount( static_cast( waitSemaphoreInfos_.size() ) ) + , pWaitSemaphoreInfos( waitSemaphoreInfos_.data() ) + , commandBufferInfoCount( static_cast( commandBufferInfos_.size() ) ) + , pCommandBufferInfos( commandBufferInfos_.data() ) + , signalSemaphoreInfoCount( static_cast( signalSemaphoreInfos_.size() ) ) + , pSignalSemaphoreInfos( signalSemaphoreInfos_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SubmitInfo2 & operator=( SubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubmitInfo2 & operator=( VkSubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setFlags( VULKAN_HPP_NAMESPACE::SubmitFlags flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setWaitSemaphoreInfoCount( uint32_t waitSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreInfoCount = waitSemaphoreInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPWaitSemaphoreInfos( const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphoreInfos = pWaitSemaphoreInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo2 & setWaitSemaphoreInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreInfoCount = static_cast( waitSemaphoreInfos_.size() ); + pWaitSemaphoreInfos = waitSemaphoreInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setCommandBufferInfoCount( uint32_t commandBufferInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferInfoCount = commandBufferInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & + setPCommandBufferInfos( const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos_ ) VULKAN_HPP_NOEXCEPT + { + pCommandBufferInfos = pCommandBufferInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo2 & setCommandBufferInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & commandBufferInfos_ ) VULKAN_HPP_NOEXCEPT + { + commandBufferInfoCount = static_cast( commandBufferInfos_.size() ); + pCommandBufferInfos = commandBufferInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setSignalSemaphoreInfoCount( uint32_t signalSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreInfoCount = signalSemaphoreInfoCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & + setPSignalSemaphoreInfos( const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT + { + pSignalSemaphoreInfos = pSignalSemaphoreInfos_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SubmitInfo2 & setSignalSemaphoreInfos( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreInfoCount = static_cast( signalSemaphoreInfos_.size() ); + pSignalSemaphoreInfos = signalSemaphoreInfos_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubmitInfo2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubmitInfo2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubmitInfo2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubmitInfo2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + waitSemaphoreInfoCount, + pWaitSemaphoreInfos, + commandBufferInfoCount, + pCommandBufferInfos, + signalSemaphoreInfoCount, + pSignalSemaphoreInfos ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubmitInfo2 const & ) const = default; +#else + bool operator==( SubmitInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( waitSemaphoreInfoCount == rhs.waitSemaphoreInfoCount ) && + ( pWaitSemaphoreInfos == rhs.pWaitSemaphoreInfos ) && ( commandBufferInfoCount == rhs.commandBufferInfoCount ) && + ( pCommandBufferInfos == rhs.pCommandBufferInfos ) && ( signalSemaphoreInfoCount == rhs.signalSemaphoreInfoCount ) && + ( pSignalSemaphoreInfos == rhs.pSignalSemaphoreInfos ); +# endif + } + + bool operator!=( SubmitInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubmitInfo2; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SubmitFlags flags = {}; + uint32_t waitSemaphoreInfoCount = {}; + const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos = {}; + uint32_t commandBufferInfoCount = {}; + const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos = {}; + uint32_t signalSemaphoreInfoCount = {}; + const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos = {}; + }; + + template <> + struct CppType + { + using Type = SubmitInfo2; + }; + + using SubmitInfo2KHR = SubmitInfo2; + + // wrapper struct for struct VkSubpassBeginInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassBeginInfo.html + struct SubpassBeginInfo + { + using NativeType = VkSubpassBeginInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassBeginInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassBeginInfo( VULKAN_HPP_NAMESPACE::SubpassContents contents_ = VULKAN_HPP_NAMESPACE::SubpassContents::eInline, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , contents{ contents_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassBeginInfo( SubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassBeginInfo( VkSubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassBeginInfo( *reinterpret_cast( &rhs ) ) {} + + SubpassBeginInfo & operator=( SubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassBeginInfo & operator=( VkSubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo & setContents( VULKAN_HPP_NAMESPACE::SubpassContents contents_ ) VULKAN_HPP_NOEXCEPT + { + contents = contents_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassBeginInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassBeginInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassBeginInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassBeginInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, contents ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassBeginInfo const & ) const = default; +#else + bool operator==( SubpassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( contents == rhs.contents ); +# endif + } + + bool operator!=( SubpassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassBeginInfo; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SubpassContents contents = VULKAN_HPP_NAMESPACE::SubpassContents::eInline; + }; + + template <> + struct CppType + { + using Type = SubpassBeginInfo; + }; + + using SubpassBeginInfoKHR = SubpassBeginInfo; + + // wrapper struct for struct VkSubpassDescriptionDepthStencilResolve, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassDescriptionDepthStencilResolve.html + struct SubpassDescriptionDepthStencilResolve + { + using NativeType = VkSubpassDescriptionDepthStencilResolve; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDescriptionDepthStencilResolve; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SubpassDescriptionDepthStencilResolve( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone, + VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone, + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , depthResolveMode{ depthResolveMode_ } + , stencilResolveMode{ stencilResolveMode_ } + , pDepthStencilResolveAttachment{ pDepthStencilResolveAttachment_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassDescriptionDepthStencilResolve( SubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassDescriptionDepthStencilResolve( VkSubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT + : SubpassDescriptionDepthStencilResolve( *reinterpret_cast( &rhs ) ) + { + } + + SubpassDescriptionDepthStencilResolve & operator=( SubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassDescriptionDepthStencilResolve & operator=( VkSubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & + setDepthResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode_ ) VULKAN_HPP_NOEXCEPT + { + depthResolveMode = depthResolveMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & + setStencilResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode_ ) VULKAN_HPP_NOEXCEPT + { + stencilResolveMode = stencilResolveMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & + setPDepthStencilResolveAttachment( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment_ ) VULKAN_HPP_NOEXCEPT + { + pDepthStencilResolveAttachment = pDepthStencilResolveAttachment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassDescriptionDepthStencilResolve const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDescriptionDepthStencilResolve &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassDescriptionDepthStencilResolve const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassDescriptionDepthStencilResolve *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, depthResolveMode, stencilResolveMode, pDepthStencilResolveAttachment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassDescriptionDepthStencilResolve const & ) const = default; +#else + bool operator==( SubpassDescriptionDepthStencilResolve const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthResolveMode == rhs.depthResolveMode ) && + ( stencilResolveMode == rhs.stencilResolveMode ) && ( pDepthStencilResolveAttachment == rhs.pDepthStencilResolveAttachment ); +# endif + } + + bool operator!=( SubpassDescriptionDepthStencilResolve const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassDescriptionDepthStencilResolve; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone; + VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone; + const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment = {}; + }; + + template <> + struct CppType + { + using Type = SubpassDescriptionDepthStencilResolve; + }; + + using SubpassDescriptionDepthStencilResolveKHR = SubpassDescriptionDepthStencilResolve; + + // wrapper struct for struct VkSubpassEndInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassEndInfo.html + struct SubpassEndInfo + { + using NativeType = VkSubpassEndInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassEndInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassEndInfo( const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT : pNext{ pNext_ } {} + + VULKAN_HPP_CONSTEXPR SubpassEndInfo( SubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassEndInfo( VkSubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT : SubpassEndInfo( *reinterpret_cast( &rhs ) ) {} + + SubpassEndInfo & operator=( SubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassEndInfo & operator=( VkSubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassEndInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassEndInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassEndInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassEndInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassEndInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassEndInfo const & ) const = default; +#else + bool operator==( SubpassEndInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ); +# endif + } + + bool operator!=( SubpassEndInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassEndInfo; + const void * pNext = {}; + }; + + template <> + struct CppType + { + using Type = SubpassEndInfo; + }; + + using SubpassEndInfoKHR = SubpassEndInfo; + + // wrapper struct for struct VkSubpassResolvePerformanceQueryEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassResolvePerformanceQueryEXT.html + struct SubpassResolvePerformanceQueryEXT + { + using NativeType = VkSubpassResolvePerformanceQueryEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassResolvePerformanceQueryEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassResolvePerformanceQueryEXT( VULKAN_HPP_NAMESPACE::Bool32 optimal_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , optimal{ optimal_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassResolvePerformanceQueryEXT( SubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassResolvePerformanceQueryEXT( VkSubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SubpassResolvePerformanceQueryEXT( *reinterpret_cast( &rhs ) ) + { + } + + SubpassResolvePerformanceQueryEXT & operator=( SubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassResolvePerformanceQueryEXT & operator=( VkSubpassResolvePerformanceQueryEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSubpassResolvePerformanceQueryEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassResolvePerformanceQueryEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassResolvePerformanceQueryEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassResolvePerformanceQueryEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, optimal ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassResolvePerformanceQueryEXT const & ) const = default; +#else + bool operator==( SubpassResolvePerformanceQueryEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( optimal == rhs.optimal ); +# endif + } + + bool operator!=( SubpassResolvePerformanceQueryEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassResolvePerformanceQueryEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 optimal = {}; + }; + + template <> + struct CppType + { + using Type = SubpassResolvePerformanceQueryEXT; + }; + + // wrapper struct for struct VkSubpassShadingPipelineCreateInfoHUAWEI, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubpassShadingPipelineCreateInfoHUAWEI.html + struct SubpassShadingPipelineCreateInfoHUAWEI + { + using NativeType = VkSubpassShadingPipelineCreateInfoHUAWEI; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassShadingPipelineCreateInfoHUAWEI; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubpassShadingPipelineCreateInfoHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ = {}, + uint32_t subpass_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , renderPass{ renderPass_ } + , subpass{ subpass_ } + { + } + + VULKAN_HPP_CONSTEXPR SubpassShadingPipelineCreateInfoHUAWEI( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubpassShadingPipelineCreateInfoHUAWEI( VkSubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + : SubpassShadingPipelineCreateInfoHUAWEI( *reinterpret_cast( &rhs ) ) + { + } + + SubpassShadingPipelineCreateInfoHUAWEI & operator=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubpassShadingPipelineCreateInfoHUAWEI & operator=( VkSubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SubpassShadingPipelineCreateInfoHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassShadingPipelineCreateInfoHUAWEI & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT + { + renderPass = renderPass_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SubpassShadingPipelineCreateInfoHUAWEI & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT + { + subpass = subpass_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSubpassShadingPipelineCreateInfoHUAWEI const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassShadingPipelineCreateInfoHUAWEI &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubpassShadingPipelineCreateInfoHUAWEI const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubpassShadingPipelineCreateInfoHUAWEI *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, renderPass, subpass ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubpassShadingPipelineCreateInfoHUAWEI const & ) const = default; +#else + bool operator==( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) && ( subpass == rhs.subpass ); +# endif + } + + bool operator!=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassShadingPipelineCreateInfoHUAWEI; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::RenderPass renderPass = {}; + uint32_t subpass = {}; + }; + + template <> + struct CppType + { + using Type = SubpassShadingPipelineCreateInfoHUAWEI; + }; + + // wrapper struct for struct VkSubresourceHostMemcpySize, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubresourceHostMemcpySize.html + struct SubresourceHostMemcpySize + { + using NativeType = VkSubresourceHostMemcpySize; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubresourceHostMemcpySize; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubresourceHostMemcpySize( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR SubresourceHostMemcpySize( SubresourceHostMemcpySize const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubresourceHostMemcpySize( VkSubresourceHostMemcpySize const & rhs ) VULKAN_HPP_NOEXCEPT + : SubresourceHostMemcpySize( *reinterpret_cast( &rhs ) ) + { + } + + SubresourceHostMemcpySize & operator=( SubresourceHostMemcpySize const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubresourceHostMemcpySize & operator=( VkSubresourceHostMemcpySize const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSubresourceHostMemcpySize const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubresourceHostMemcpySize &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubresourceHostMemcpySize const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubresourceHostMemcpySize *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubresourceHostMemcpySize const & ) const = default; +#else + bool operator==( SubresourceHostMemcpySize const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( size == rhs.size ); +# endif + } + + bool operator!=( SubresourceHostMemcpySize const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubresourceHostMemcpySize; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = SubresourceHostMemcpySize; + }; + + using SubresourceHostMemcpySizeEXT = SubresourceHostMemcpySize; + + // wrapper struct for struct VkSubresourceLayout2, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSubresourceLayout2.html + struct SubresourceLayout2 + { + using NativeType = VkSubresourceLayout2; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubresourceLayout2; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SubresourceLayout2( VULKAN_HPP_NAMESPACE::SubresourceLayout subresourceLayout_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , subresourceLayout{ subresourceLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR SubresourceLayout2( SubresourceLayout2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SubresourceLayout2( VkSubresourceLayout2 const & rhs ) VULKAN_HPP_NOEXCEPT : SubresourceLayout2( *reinterpret_cast( &rhs ) ) {} + + SubresourceLayout2 & operator=( SubresourceLayout2 const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SubresourceLayout2 & operator=( VkSubresourceLayout2 const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSubresourceLayout2 const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubresourceLayout2 &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSubresourceLayout2 const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSubresourceLayout2 *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, subresourceLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SubresourceLayout2 const & ) const = default; +#else + bool operator==( SubresourceLayout2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subresourceLayout == rhs.subresourceLayout ); +# endif + } + + bool operator!=( SubresourceLayout2 const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubresourceLayout2; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SubresourceLayout subresourceLayout = {}; + }; + + template <> + struct CppType + { + using Type = SubresourceLayout2; + }; + + using SubresourceLayout2EXT = SubresourceLayout2; + using SubresourceLayout2KHR = SubresourceLayout2; + + // wrapper struct for struct VkSurfaceCapabilities2EXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilities2EXT.html + struct SurfaceCapabilities2EXT + { + using NativeType = VkSurfaceCapabilities2EXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2EXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilities2EXT( + uint32_t minImageCount_ = {}, + uint32_t maxImageCount_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D currentExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minImageExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent_ = {}, + uint32_t maxImageArrayLayers_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha_ = {}, + VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT supportedSurfaceCounters_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minImageCount{ minImageCount_ } + , maxImageCount{ maxImageCount_ } + , currentExtent{ currentExtent_ } + , minImageExtent{ minImageExtent_ } + , maxImageExtent{ maxImageExtent_ } + , maxImageArrayLayers{ maxImageArrayLayers_ } + , supportedTransforms{ supportedTransforms_ } + , currentTransform{ currentTransform_ } + , supportedCompositeAlpha{ supportedCompositeAlpha_ } + , supportedUsageFlags{ supportedUsageFlags_ } + , supportedSurfaceCounters{ supportedSurfaceCounters_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilities2EXT( SurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilities2EXT( VkSurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilities2EXT( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilities2EXT & operator=( SurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilities2EXT & operator=( VkSurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceCapabilities2EXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilities2EXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilities2EXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilities2EXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + minImageCount, + maxImageCount, + currentExtent, + minImageExtent, + maxImageExtent, + maxImageArrayLayers, + supportedTransforms, + currentTransform, + supportedCompositeAlpha, + supportedUsageFlags, + supportedSurfaceCounters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilities2EXT const & ) const = default; +#else + bool operator==( SurfaceCapabilities2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minImageCount == rhs.minImageCount ) && ( maxImageCount == rhs.maxImageCount ) && + ( currentExtent == rhs.currentExtent ) && ( minImageExtent == rhs.minImageExtent ) && ( maxImageExtent == rhs.maxImageExtent ) && + ( maxImageArrayLayers == rhs.maxImageArrayLayers ) && ( supportedTransforms == rhs.supportedTransforms ) && + ( currentTransform == rhs.currentTransform ) && ( supportedCompositeAlpha == rhs.supportedCompositeAlpha ) && + ( supportedUsageFlags == rhs.supportedUsageFlags ) && ( supportedSurfaceCounters == rhs.supportedSurfaceCounters ); +# endif + } + + bool operator!=( SurfaceCapabilities2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilities2EXT; + void * pNext = {}; + uint32_t minImageCount = {}; + uint32_t maxImageCount = {}; + VULKAN_HPP_NAMESPACE::Extent2D currentExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D minImageExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent = {}; + uint32_t maxImageArrayLayers = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags = {}; + VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT supportedSurfaceCounters = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceCapabilities2EXT; + }; + + // wrapper struct for struct VkSurfaceCapabilitiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilitiesKHR.html + struct SurfaceCapabilitiesKHR + { + using NativeType = VkSurfaceCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesKHR( + uint32_t minImageCount_ = {}, + uint32_t maxImageCount_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D currentExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minImageExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent_ = {}, + uint32_t maxImageArrayLayers_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha_ = {}, + VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags_ = {} ) VULKAN_HPP_NOEXCEPT + : minImageCount{ minImageCount_ } + , maxImageCount{ maxImageCount_ } + , currentExtent{ currentExtent_ } + , minImageExtent{ minImageExtent_ } + , maxImageExtent{ maxImageExtent_ } + , maxImageArrayLayers{ maxImageArrayLayers_ } + , supportedTransforms{ supportedTransforms_ } + , currentTransform{ currentTransform_ } + , supportedCompositeAlpha{ supportedCompositeAlpha_ } + , supportedUsageFlags{ supportedUsageFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesKHR( SurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilitiesKHR( VkSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilitiesKHR & operator=( SurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilitiesKHR & operator=( VkSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( minImageCount, + maxImageCount, + currentExtent, + minImageExtent, + maxImageExtent, + maxImageArrayLayers, + supportedTransforms, + currentTransform, + supportedCompositeAlpha, + supportedUsageFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilitiesKHR const & ) const = default; +#else + bool operator==( SurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( minImageCount == rhs.minImageCount ) && ( maxImageCount == rhs.maxImageCount ) && ( currentExtent == rhs.currentExtent ) && + ( minImageExtent == rhs.minImageExtent ) && ( maxImageExtent == rhs.maxImageExtent ) && ( maxImageArrayLayers == rhs.maxImageArrayLayers ) && + ( supportedTransforms == rhs.supportedTransforms ) && ( currentTransform == rhs.currentTransform ) && + ( supportedCompositeAlpha == rhs.supportedCompositeAlpha ) && ( supportedUsageFlags == rhs.supportedUsageFlags ); +# endif + } + + bool operator!=( SurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t minImageCount = {}; + uint32_t maxImageCount = {}; + VULKAN_HPP_NAMESPACE::Extent2D currentExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D minImageExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxImageExtent = {}; + uint32_t maxImageArrayLayers = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR supportedTransforms = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR currentTransform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags = {}; + }; + + // wrapper struct for struct VkSurfaceCapabilities2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilities2KHR.html + struct SurfaceCapabilities2KHR + { + using NativeType = VkSurfaceCapabilities2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilities2KHR( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , surfaceCapabilities{ surfaceCapabilities_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilities2KHR( SurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilities2KHR( VkSurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilities2KHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilities2KHR & operator=( SurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilities2KHR & operator=( VkSurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilities2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilities2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilities2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, surfaceCapabilities ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilities2KHR const & ) const = default; +#else + bool operator==( SurfaceCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceCapabilities == rhs.surfaceCapabilities ); +# endif + } + + bool operator!=( SurfaceCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilities2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceCapabilities2KHR; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkSurfaceCapabilitiesFullScreenExclusiveEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilitiesFullScreenExclusiveEXT.html + struct SurfaceCapabilitiesFullScreenExclusiveEXT + { + using NativeType = VkSurfaceCapabilitiesFullScreenExclusiveEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesFullScreenExclusiveEXT( VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fullScreenExclusiveSupported{ fullScreenExclusiveSupported_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesFullScreenExclusiveEXT( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilitiesFullScreenExclusiveEXT( VkSurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilitiesFullScreenExclusiveEXT( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilitiesFullScreenExclusiveEXT & operator=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilitiesFullScreenExclusiveEXT & operator=( VkSurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceCapabilitiesFullScreenExclusiveEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesFullScreenExclusiveEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesFullScreenExclusiveEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesFullScreenExclusiveEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fullScreenExclusiveSupported ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilitiesFullScreenExclusiveEXT const & ) const = default; +# else + bool operator==( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fullScreenExclusiveSupported == rhs.fullScreenExclusiveSupported ); +# endif + } + + bool operator!=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceCapabilitiesFullScreenExclusiveEXT; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkSurfaceCapabilitiesPresentBarrierNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilitiesPresentBarrierNV.html + struct SurfaceCapabilitiesPresentBarrierNV + { + using NativeType = VkSurfaceCapabilitiesPresentBarrierNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilitiesPresentBarrierNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesPresentBarrierNV( VULKAN_HPP_NAMESPACE::Bool32 presentBarrierSupported_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentBarrierSupported{ presentBarrierSupported_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesPresentBarrierNV( SurfaceCapabilitiesPresentBarrierNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilitiesPresentBarrierNV( VkSurfaceCapabilitiesPresentBarrierNV const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilitiesPresentBarrierNV( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilitiesPresentBarrierNV & operator=( SurfaceCapabilitiesPresentBarrierNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilitiesPresentBarrierNV & operator=( VkSurfaceCapabilitiesPresentBarrierNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceCapabilitiesPresentBarrierNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentBarrierNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentBarrierNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentBarrierNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentBarrierSupported ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilitiesPresentBarrierNV const & ) const = default; +#else + bool operator==( SurfaceCapabilitiesPresentBarrierNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentBarrierSupported == rhs.presentBarrierSupported ); +# endif + } + + bool operator!=( SurfaceCapabilitiesPresentBarrierNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilitiesPresentBarrierNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentBarrierSupported = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceCapabilitiesPresentBarrierNV; + }; + + // wrapper struct for struct VkSurfaceCapabilitiesPresentId2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilitiesPresentId2KHR.html + struct SurfaceCapabilitiesPresentId2KHR + { + using NativeType = VkSurfaceCapabilitiesPresentId2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilitiesPresentId2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesPresentId2KHR( VULKAN_HPP_NAMESPACE::Bool32 presentId2Supported_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentId2Supported{ presentId2Supported_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesPresentId2KHR( SurfaceCapabilitiesPresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilitiesPresentId2KHR( VkSurfaceCapabilitiesPresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilitiesPresentId2KHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilitiesPresentId2KHR & operator=( SurfaceCapabilitiesPresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilitiesPresentId2KHR & operator=( VkSurfaceCapabilitiesPresentId2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesPresentId2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesPresentId2KHR & setPresentId2Supported( VULKAN_HPP_NAMESPACE::Bool32 presentId2Supported_ ) VULKAN_HPP_NOEXCEPT + { + presentId2Supported = presentId2Supported_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfaceCapabilitiesPresentId2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentId2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentId2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentId2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentId2Supported ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilitiesPresentId2KHR const & ) const = default; +#else + bool operator==( SurfaceCapabilitiesPresentId2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentId2Supported == rhs.presentId2Supported ); +# endif + } + + bool operator!=( SurfaceCapabilitiesPresentId2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilitiesPresentId2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentId2Supported = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceCapabilitiesPresentId2KHR; + }; + + // wrapper struct for struct VkSurfaceCapabilitiesPresentWait2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceCapabilitiesPresentWait2KHR.html + struct SurfaceCapabilitiesPresentWait2KHR + { + using NativeType = VkSurfaceCapabilitiesPresentWait2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilitiesPresentWait2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesPresentWait2KHR( VULKAN_HPP_NAMESPACE::Bool32 presentWait2Supported_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentWait2Supported{ presentWait2Supported_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceCapabilitiesPresentWait2KHR( SurfaceCapabilitiesPresentWait2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceCapabilitiesPresentWait2KHR( VkSurfaceCapabilitiesPresentWait2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceCapabilitiesPresentWait2KHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceCapabilitiesPresentWait2KHR & operator=( SurfaceCapabilitiesPresentWait2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceCapabilitiesPresentWait2KHR & operator=( VkSurfaceCapabilitiesPresentWait2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesPresentWait2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesPresentWait2KHR & + setPresentWait2Supported( VULKAN_HPP_NAMESPACE::Bool32 presentWait2Supported_ ) VULKAN_HPP_NOEXCEPT + { + presentWait2Supported = presentWait2Supported_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfaceCapabilitiesPresentWait2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentWait2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentWait2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceCapabilitiesPresentWait2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentWait2Supported ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceCapabilitiesPresentWait2KHR const & ) const = default; +#else + bool operator==( SurfaceCapabilitiesPresentWait2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentWait2Supported == rhs.presentWait2Supported ); +# endif + } + + bool operator!=( SurfaceCapabilitiesPresentWait2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceCapabilitiesPresentWait2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentWait2Supported = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceCapabilitiesPresentWait2KHR; + }; + + // wrapper struct for struct VkSurfaceFormatKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceFormatKHR.html + struct SurfaceFormatKHR + { + using NativeType = VkSurfaceFormatKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SurfaceFormatKHR( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::ColorSpaceKHR colorSpace_ = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear ) VULKAN_HPP_NOEXCEPT + : format{ format_ } + , colorSpace{ colorSpace_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceFormatKHR( SurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceFormatKHR( VkSurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT : SurfaceFormatKHR( *reinterpret_cast( &rhs ) ) {} + + SurfaceFormatKHR & operator=( SurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceFormatKHR & operator=( VkSurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceFormatKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFormatKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFormatKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceFormatKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( format, colorSpace ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceFormatKHR const & ) const = default; +#else + bool operator==( SurfaceFormatKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( format == rhs.format ) && ( colorSpace == rhs.colorSpace ); +# endif + } + + bool operator!=( SurfaceFormatKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::ColorSpaceKHR colorSpace = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear; + }; + + // wrapper struct for struct VkSurfaceFormat2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceFormat2KHR.html + struct SurfaceFormat2KHR + { + using NativeType = VkSurfaceFormat2KHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFormat2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceFormat2KHR( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR surfaceFormat_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , surfaceFormat{ surfaceFormat_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceFormat2KHR( SurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceFormat2KHR( VkSurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT : SurfaceFormat2KHR( *reinterpret_cast( &rhs ) ) {} + + SurfaceFormat2KHR & operator=( SurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceFormat2KHR & operator=( VkSurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceFormat2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFormat2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFormat2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceFormat2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, surfaceFormat ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceFormat2KHR const & ) const = default; +#else + bool operator==( SurfaceFormat2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceFormat == rhs.surfaceFormat ); +# endif + } + + bool operator!=( SurfaceFormat2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceFormat2KHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceFormatKHR surfaceFormat = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceFormat2KHR; + }; + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkSurfaceFullScreenExclusiveInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceFullScreenExclusiveInfoEXT.html + struct SurfaceFullScreenExclusiveInfoEXT + { + using NativeType = VkSurfaceFullScreenExclusiveInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFullScreenExclusiveInfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveInfoEXT( + VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive_ = VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT::eDefault, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , fullScreenExclusive{ fullScreenExclusive_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveInfoEXT( SurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceFullScreenExclusiveInfoEXT( VkSurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceFullScreenExclusiveInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceFullScreenExclusiveInfoEXT & operator=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceFullScreenExclusiveInfoEXT & operator=( VkSurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT & + setFullScreenExclusive( VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive_ ) VULKAN_HPP_NOEXCEPT + { + fullScreenExclusive = fullScreenExclusive_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfaceFullScreenExclusiveInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFullScreenExclusiveInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFullScreenExclusiveInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceFullScreenExclusiveInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, fullScreenExclusive ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceFullScreenExclusiveInfoEXT const & ) const = default; +# else + bool operator==( SurfaceFullScreenExclusiveInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fullScreenExclusive == rhs.fullScreenExclusive ); +# endif + } + + bool operator!=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceFullScreenExclusiveInfoEXT; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive = VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT::eDefault; + }; + + template <> + struct CppType + { + using Type = SurfaceFullScreenExclusiveInfoEXT; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkSurfaceFullScreenExclusiveWin32InfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceFullScreenExclusiveWin32InfoEXT.html + struct SurfaceFullScreenExclusiveWin32InfoEXT + { + using NativeType = VkSurfaceFullScreenExclusiveWin32InfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveWin32InfoEXT( HMONITOR hmonitor_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hmonitor{ hmonitor_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceFullScreenExclusiveWin32InfoEXT( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceFullScreenExclusiveWin32InfoEXT( VkSurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceFullScreenExclusiveWin32InfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceFullScreenExclusiveWin32InfoEXT & operator=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceFullScreenExclusiveWin32InfoEXT & operator=( VkSurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT & setHmonitor( HMONITOR hmonitor_ ) VULKAN_HPP_NOEXCEPT + { + hmonitor = hmonitor_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfaceFullScreenExclusiveWin32InfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFullScreenExclusiveWin32InfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceFullScreenExclusiveWin32InfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceFullScreenExclusiveWin32InfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hmonitor ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceFullScreenExclusiveWin32InfoEXT const & ) const = default; +# else + bool operator==( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hmonitor == rhs.hmonitor ); +# endif + } + + bool operator!=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT; + const void * pNext = {}; + HMONITOR hmonitor = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceFullScreenExclusiveWin32InfoEXT; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkSurfacePresentModeCompatibilityKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfacePresentModeCompatibilityKHR.html + struct SurfacePresentModeCompatibilityKHR + { + using NativeType = VkSurfacePresentModeCompatibilityKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfacePresentModeCompatibilityKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfacePresentModeCompatibilityKHR( uint32_t presentModeCount_ = {}, + VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentModeCount{ presentModeCount_ } + , pPresentModes{ pPresentModes_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfacePresentModeCompatibilityKHR( SurfacePresentModeCompatibilityKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfacePresentModeCompatibilityKHR( VkSurfacePresentModeCompatibilityKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfacePresentModeCompatibilityKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SurfacePresentModeCompatibilityKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_, + void * pNext_ = nullptr ) + : pNext( pNext_ ), presentModeCount( static_cast( presentModes_.size() ) ), pPresentModes( presentModes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SurfacePresentModeCompatibilityKHR & operator=( SurfacePresentModeCompatibilityKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfacePresentModeCompatibilityKHR & operator=( VkSurfacePresentModeCompatibilityKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfacePresentModeCompatibilityKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentModeCompatibilityKHR & setPresentModeCount( uint32_t presentModeCount_ ) VULKAN_HPP_NOEXCEPT + { + presentModeCount = presentModeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentModeCompatibilityKHR & setPPresentModes( VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ ) VULKAN_HPP_NOEXCEPT + { + pPresentModes = pPresentModes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SurfacePresentModeCompatibilityKHR & + setPresentModes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_ ) VULKAN_HPP_NOEXCEPT + { + presentModeCount = static_cast( presentModes_.size() ); + pPresentModes = presentModes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfacePresentModeCompatibilityKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfacePresentModeCompatibilityKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfacePresentModeCompatibilityKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfacePresentModeCompatibilityKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentModeCount, pPresentModes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfacePresentModeCompatibilityKHR const & ) const = default; +#else + bool operator==( SurfacePresentModeCompatibilityKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentModeCount == rhs.presentModeCount ) && ( pPresentModes == rhs.pPresentModes ); +# endif + } + + bool operator!=( SurfacePresentModeCompatibilityKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfacePresentModeCompatibilityKHR; + void * pNext = {}; + uint32_t presentModeCount = {}; + VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes = {}; + }; + + template <> + struct CppType + { + using Type = SurfacePresentModeCompatibilityKHR; + }; + + using SurfacePresentModeCompatibilityEXT = SurfacePresentModeCompatibilityKHR; + + // wrapper struct for struct VkSurfacePresentModeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfacePresentModeKHR.html + struct SurfacePresentModeKHR + { + using NativeType = VkSurfacePresentModeKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfacePresentModeKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfacePresentModeKHR( VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentMode{ presentMode_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfacePresentModeKHR( SurfacePresentModeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfacePresentModeKHR( VkSurfacePresentModeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfacePresentModeKHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfacePresentModeKHR & operator=( SurfacePresentModeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfacePresentModeKHR & operator=( VkSurfacePresentModeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfacePresentModeKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentModeKHR & setPresentMode( VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ ) VULKAN_HPP_NOEXCEPT + { + presentMode = presentMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfacePresentModeKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfacePresentModeKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfacePresentModeKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfacePresentModeKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfacePresentModeKHR const & ) const = default; +#else + bool operator==( SurfacePresentModeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentMode == rhs.presentMode ); +# endif + } + + bool operator!=( SurfacePresentModeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfacePresentModeKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate; + }; + + template <> + struct CppType + { + using Type = SurfacePresentModeKHR; + }; + + using SurfacePresentModeEXT = SurfacePresentModeKHR; + + // wrapper struct for struct VkSurfacePresentScalingCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfacePresentScalingCapabilitiesKHR.html + struct SurfacePresentScalingCapabilitiesKHR + { + using NativeType = VkSurfacePresentScalingCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfacePresentScalingCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfacePresentScalingCapabilitiesKHR( VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR supportedPresentScaling_ = {}, + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR supportedPresentGravityX_ = {}, + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR supportedPresentGravityY_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minScaledImageExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxScaledImageExtent_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportedPresentScaling{ supportedPresentScaling_ } + , supportedPresentGravityX{ supportedPresentGravityX_ } + , supportedPresentGravityY{ supportedPresentGravityY_ } + , minScaledImageExtent{ minScaledImageExtent_ } + , maxScaledImageExtent{ maxScaledImageExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfacePresentScalingCapabilitiesKHR( SurfacePresentScalingCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfacePresentScalingCapabilitiesKHR( VkSurfacePresentScalingCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfacePresentScalingCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfacePresentScalingCapabilitiesKHR & operator=( SurfacePresentScalingCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfacePresentScalingCapabilitiesKHR & operator=( VkSurfacePresentScalingCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SurfacePresentScalingCapabilitiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentScalingCapabilitiesKHR & + setSupportedPresentScaling( VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR supportedPresentScaling_ ) VULKAN_HPP_NOEXCEPT + { + supportedPresentScaling = supportedPresentScaling_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentScalingCapabilitiesKHR & + setSupportedPresentGravityX( VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR supportedPresentGravityX_ ) VULKAN_HPP_NOEXCEPT + { + supportedPresentGravityX = supportedPresentGravityX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentScalingCapabilitiesKHR & + setSupportedPresentGravityY( VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR supportedPresentGravityY_ ) VULKAN_HPP_NOEXCEPT + { + supportedPresentGravityY = supportedPresentGravityY_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentScalingCapabilitiesKHR & + setMinScaledImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & minScaledImageExtent_ ) VULKAN_HPP_NOEXCEPT + { + minScaledImageExtent = minScaledImageExtent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SurfacePresentScalingCapabilitiesKHR & + setMaxScaledImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & maxScaledImageExtent_ ) VULKAN_HPP_NOEXCEPT + { + maxScaledImageExtent = maxScaledImageExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSurfacePresentScalingCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfacePresentScalingCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfacePresentScalingCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfacePresentScalingCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supportedPresentScaling, supportedPresentGravityX, supportedPresentGravityY, minScaledImageExtent, maxScaledImageExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfacePresentScalingCapabilitiesKHR const & ) const = default; +#else + bool operator==( SurfacePresentScalingCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportedPresentScaling == rhs.supportedPresentScaling ) && + ( supportedPresentGravityX == rhs.supportedPresentGravityX ) && ( supportedPresentGravityY == rhs.supportedPresentGravityY ) && + ( minScaledImageExtent == rhs.minScaledImageExtent ) && ( maxScaledImageExtent == rhs.maxScaledImageExtent ); +# endif + } + + bool operator!=( SurfacePresentScalingCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfacePresentScalingCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR supportedPresentScaling = {}; + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR supportedPresentGravityX = {}; + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR supportedPresentGravityY = {}; + VULKAN_HPP_NAMESPACE::Extent2D minScaledImageExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxScaledImageExtent = {}; + }; + + template <> + struct CppType + { + using Type = SurfacePresentScalingCapabilitiesKHR; + }; + + using SurfacePresentScalingCapabilitiesEXT = SurfacePresentScalingCapabilitiesKHR; + + // wrapper struct for struct VkSurfaceProtectedCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSurfaceProtectedCapabilitiesKHR.html + struct SurfaceProtectedCapabilitiesKHR + { + using NativeType = VkSurfaceProtectedCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceProtectedCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SurfaceProtectedCapabilitiesKHR( VULKAN_HPP_NAMESPACE::Bool32 supportsProtected_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportsProtected{ supportsProtected_ } + { + } + + VULKAN_HPP_CONSTEXPR SurfaceProtectedCapabilitiesKHR( SurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SurfaceProtectedCapabilitiesKHR( VkSurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SurfaceProtectedCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + SurfaceProtectedCapabilitiesKHR & operator=( SurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SurfaceProtectedCapabilitiesKHR & operator=( VkSurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkSurfaceProtectedCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceProtectedCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSurfaceProtectedCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSurfaceProtectedCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supportsProtected ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SurfaceProtectedCapabilitiesKHR const & ) const = default; +#else + bool operator==( SurfaceProtectedCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportsProtected == rhs.supportsProtected ); +# endif + } + + bool operator!=( SurfaceProtectedCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSurfaceProtectedCapabilitiesKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 supportsProtected = {}; + }; + + template <> + struct CppType + { + using Type = SurfaceProtectedCapabilitiesKHR; + }; + + // wrapper struct for struct VkSwapchainCounterCreateInfoEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainCounterCreateInfoEXT.html + struct SwapchainCounterCreateInfoEXT + { + using NativeType = VkSwapchainCounterCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCounterCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainCounterCreateInfoEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , surfaceCounters{ surfaceCounters_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainCounterCreateInfoEXT( SwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainCounterCreateInfoEXT( VkSwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainCounterCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + + SwapchainCounterCreateInfoEXT & operator=( SwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainCounterCreateInfoEXT & operator=( VkSwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT & + setSurfaceCounters( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters_ ) VULKAN_HPP_NOEXCEPT + { + surfaceCounters = surfaceCounters_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainCounterCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainCounterCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainCounterCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainCounterCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, surfaceCounters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainCounterCreateInfoEXT const & ) const = default; +#else + bool operator==( SwapchainCounterCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceCounters == rhs.surfaceCounters ); +# endif + } + + bool operator!=( SwapchainCounterCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainCounterCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainCounterCreateInfoEXT; + }; + + // wrapper struct for struct VkSwapchainCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainCreateInfoKHR.html + struct SwapchainCreateInfoKHR + { + using NativeType = VkSwapchainCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + SwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ = {}, + uint32_t minImageCount_ = {}, + VULKAN_HPP_NAMESPACE::Format imageFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_ = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear, + VULKAN_HPP_NAMESPACE::Extent2D imageExtent_ = {}, + uint32_t imageArrayLayers_ = {}, + VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ = {}, + VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive, + uint32_t queueFamilyIndexCount_ = {}, + const uint32_t * pQueueFamilyIndices_ = {}, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ = VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR::eOpaque, + VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate, + VULKAN_HPP_NAMESPACE::Bool32 clipped_ = {}, + VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , surface{ surface_ } + , minImageCount{ minImageCount_ } + , imageFormat{ imageFormat_ } + , imageColorSpace{ imageColorSpace_ } + , imageExtent{ imageExtent_ } + , imageArrayLayers{ imageArrayLayers_ } + , imageUsage{ imageUsage_ } + , imageSharingMode{ imageSharingMode_ } + , queueFamilyIndexCount{ queueFamilyIndexCount_ } + , pQueueFamilyIndices{ pQueueFamilyIndices_ } + , preTransform{ preTransform_ } + , compositeAlpha{ compositeAlpha_ } + , presentMode{ presentMode_ } + , clipped{ clipped_ } + , oldSwapchain{ oldSwapchain_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainCreateInfoKHR( SwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainCreateInfoKHR( VkSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainCreateInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_, + VULKAN_HPP_NAMESPACE::SurfaceKHR surface_, + uint32_t minImageCount_, + VULKAN_HPP_NAMESPACE::Format imageFormat_, + VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_, + VULKAN_HPP_NAMESPACE::Extent2D imageExtent_, + uint32_t imageArrayLayers_, + VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_, + VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_, + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity, + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ = VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR::eOpaque, + VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate, + VULKAN_HPP_NAMESPACE::Bool32 clipped_ = {}, + VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , surface( surface_ ) + , minImageCount( minImageCount_ ) + , imageFormat( imageFormat_ ) + , imageColorSpace( imageColorSpace_ ) + , imageExtent( imageExtent_ ) + , imageArrayLayers( imageArrayLayers_ ) + , imageUsage( imageUsage_ ) + , imageSharingMode( imageSharingMode_ ) + , queueFamilyIndexCount( static_cast( queueFamilyIndices_.size() ) ) + , pQueueFamilyIndices( queueFamilyIndices_.data() ) + , preTransform( preTransform_ ) + , compositeAlpha( compositeAlpha_ ) + , presentMode( presentMode_ ) + , clipped( clipped_ ) + , oldSwapchain( oldSwapchain_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SwapchainCreateInfoKHR & operator=( SwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainCreateInfoKHR & operator=( VkSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT + { + surface = surface_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setMinImageCount( uint32_t minImageCount_ ) VULKAN_HPP_NOEXCEPT + { + minImageCount = minImageCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageFormat( VULKAN_HPP_NAMESPACE::Format imageFormat_ ) VULKAN_HPP_NOEXCEPT + { + imageFormat = imageFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageColorSpace( VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_ ) VULKAN_HPP_NOEXCEPT + { + imageColorSpace = imageColorSpace_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT + { + imageExtent = imageExtent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageArrayLayers( uint32_t imageArrayLayers_ ) VULKAN_HPP_NOEXCEPT + { + imageArrayLayers = imageArrayLayers_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ ) VULKAN_HPP_NOEXCEPT + { + imageUsage = imageUsage_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setImageSharingMode( VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_ ) VULKAN_HPP_NOEXCEPT + { + imageSharingMode = imageSharingMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = queueFamilyIndexCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + pQueueFamilyIndices = pQueueFamilyIndices_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainCreateInfoKHR & + setQueueFamilyIndices( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndexCount = static_cast( queueFamilyIndices_.size() ); + pQueueFamilyIndices = queueFamilyIndices_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPreTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ ) VULKAN_HPP_NOEXCEPT + { + preTransform = preTransform_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setCompositeAlpha( VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ ) VULKAN_HPP_NOEXCEPT + { + compositeAlpha = compositeAlpha_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPresentMode( VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ ) VULKAN_HPP_NOEXCEPT + { + presentMode = presentMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setClipped( VULKAN_HPP_NAMESPACE::Bool32 clipped_ ) VULKAN_HPP_NOEXCEPT + { + clipped = clipped_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setOldSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ ) VULKAN_HPP_NOEXCEPT + { + oldSwapchain = oldSwapchain_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + surface, + minImageCount, + imageFormat, + imageColorSpace, + imageExtent, + imageArrayLayers, + imageUsage, + imageSharingMode, + queueFamilyIndexCount, + pQueueFamilyIndices, + preTransform, + compositeAlpha, + presentMode, + clipped, + oldSwapchain ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainCreateInfoKHR const & ) const = default; +#else + bool operator==( SwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( surface == rhs.surface ) && + ( minImageCount == rhs.minImageCount ) && ( imageFormat == rhs.imageFormat ) && ( imageColorSpace == rhs.imageColorSpace ) && + ( imageExtent == rhs.imageExtent ) && ( imageArrayLayers == rhs.imageArrayLayers ) && ( imageUsage == rhs.imageUsage ) && + ( imageSharingMode == rhs.imageSharingMode ) && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) && + ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && ( preTransform == rhs.preTransform ) && ( compositeAlpha == rhs.compositeAlpha ) && + ( presentMode == rhs.presentMode ) && ( clipped == rhs.clipped ) && ( oldSwapchain == rhs.oldSwapchain ); +# endif + } + + bool operator!=( SwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::SurfaceKHR surface = {}; + uint32_t minImageCount = {}; + VULKAN_HPP_NAMESPACE::Format imageFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear; + VULKAN_HPP_NAMESPACE::Extent2D imageExtent = {}; + uint32_t imageArrayLayers = {}; + VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage = {}; + VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive; + uint32_t queueFamilyIndexCount = {}; + const uint32_t * pQueueFamilyIndices = {}; + VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform = VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity; + VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha = VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR::eOpaque; + VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode = VULKAN_HPP_NAMESPACE::PresentModeKHR::eImmediate; + VULKAN_HPP_NAMESPACE::Bool32 clipped = {}; + VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainCreateInfoKHR; + }; + + // wrapper struct for struct VkSwapchainDisplayNativeHdrCreateInfoAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainDisplayNativeHdrCreateInfoAMD.html + struct SwapchainDisplayNativeHdrCreateInfoAMD + { + using NativeType = VkSwapchainDisplayNativeHdrCreateInfoAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainDisplayNativeHdrCreateInfoAMD( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , localDimmingEnable{ localDimmingEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainDisplayNativeHdrCreateInfoAMD( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainDisplayNativeHdrCreateInfoAMD( VkSwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainDisplayNativeHdrCreateInfoAMD( *reinterpret_cast( &rhs ) ) + { + } + + SwapchainDisplayNativeHdrCreateInfoAMD & operator=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainDisplayNativeHdrCreateInfoAMD & operator=( VkSwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD & + setLocalDimmingEnable( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable_ ) VULKAN_HPP_NOEXCEPT + { + localDimmingEnable = localDimmingEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainDisplayNativeHdrCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainDisplayNativeHdrCreateInfoAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainDisplayNativeHdrCreateInfoAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainDisplayNativeHdrCreateInfoAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, localDimmingEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainDisplayNativeHdrCreateInfoAMD const & ) const = default; +#else + bool operator==( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( localDimmingEnable == rhs.localDimmingEnable ); +# endif + } + + bool operator!=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainDisplayNativeHdrCreateInfoAMD; + }; + + // wrapper struct for struct VkSwapchainLatencyCreateInfoNV, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainLatencyCreateInfoNV.html + struct SwapchainLatencyCreateInfoNV + { + using NativeType = VkSwapchainLatencyCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainLatencyCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainLatencyCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 latencyModeEnable_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , latencyModeEnable{ latencyModeEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainLatencyCreateInfoNV( SwapchainLatencyCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainLatencyCreateInfoNV( VkSwapchainLatencyCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainLatencyCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + SwapchainLatencyCreateInfoNV & operator=( SwapchainLatencyCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainLatencyCreateInfoNV & operator=( VkSwapchainLatencyCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainLatencyCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainLatencyCreateInfoNV & setLatencyModeEnable( VULKAN_HPP_NAMESPACE::Bool32 latencyModeEnable_ ) VULKAN_HPP_NOEXCEPT + { + latencyModeEnable = latencyModeEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainLatencyCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainLatencyCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainLatencyCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainLatencyCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, latencyModeEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainLatencyCreateInfoNV const & ) const = default; +#else + bool operator==( SwapchainLatencyCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( latencyModeEnable == rhs.latencyModeEnable ); +# endif + } + + bool operator!=( SwapchainLatencyCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainLatencyCreateInfoNV; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 latencyModeEnable = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainLatencyCreateInfoNV; + }; + + // wrapper struct for struct VkSwapchainPresentBarrierCreateInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainPresentBarrierCreateInfoNV.html + struct SwapchainPresentBarrierCreateInfoNV + { + using NativeType = VkSwapchainPresentBarrierCreateInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainPresentBarrierCreateInfoNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainPresentBarrierCreateInfoNV( VULKAN_HPP_NAMESPACE::Bool32 presentBarrierEnable_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentBarrierEnable{ presentBarrierEnable_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainPresentBarrierCreateInfoNV( SwapchainPresentBarrierCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainPresentBarrierCreateInfoNV( VkSwapchainPresentBarrierCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainPresentBarrierCreateInfoNV( *reinterpret_cast( &rhs ) ) + { + } + + SwapchainPresentBarrierCreateInfoNV & operator=( SwapchainPresentBarrierCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainPresentBarrierCreateInfoNV & operator=( VkSwapchainPresentBarrierCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentBarrierCreateInfoNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentBarrierCreateInfoNV & + setPresentBarrierEnable( VULKAN_HPP_NAMESPACE::Bool32 presentBarrierEnable_ ) VULKAN_HPP_NOEXCEPT + { + presentBarrierEnable = presentBarrierEnable_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainPresentBarrierCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentBarrierCreateInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentBarrierCreateInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainPresentBarrierCreateInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentBarrierEnable ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainPresentBarrierCreateInfoNV const & ) const = default; +#else + bool operator==( SwapchainPresentBarrierCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentBarrierEnable == rhs.presentBarrierEnable ); +# endif + } + + bool operator!=( SwapchainPresentBarrierCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainPresentBarrierCreateInfoNV; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 presentBarrierEnable = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainPresentBarrierCreateInfoNV; + }; + + // wrapper struct for struct VkSwapchainPresentFenceInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainPresentFenceInfoKHR.html + struct SwapchainPresentFenceInfoKHR + { + using NativeType = VkSwapchainPresentFenceInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainPresentFenceInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainPresentFenceInfoKHR( uint32_t swapchainCount_ = {}, + const VULKAN_HPP_NAMESPACE::Fence * pFences_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pFences{ pFences_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainPresentFenceInfoKHR( SwapchainPresentFenceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainPresentFenceInfoKHR( VkSwapchainPresentFenceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainPresentFenceInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainPresentFenceInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fences_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( fences_.size() ) ), pFences( fences_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SwapchainPresentFenceInfoKHR & operator=( SwapchainPresentFenceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainPresentFenceInfoKHR & operator=( VkSwapchainPresentFenceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentFenceInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentFenceInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentFenceInfoKHR & setPFences( const VULKAN_HPP_NAMESPACE::Fence * pFences_ ) VULKAN_HPP_NOEXCEPT + { + pFences = pFences_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainPresentFenceInfoKHR & + setFences( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & fences_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( fences_.size() ); + pFences = fences_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainPresentFenceInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentFenceInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentFenceInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainPresentFenceInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pFences ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainPresentFenceInfoKHR const & ) const = default; +#else + bool operator==( SwapchainPresentFenceInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pFences == rhs.pFences ); +# endif + } + + bool operator!=( SwapchainPresentFenceInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainPresentFenceInfoKHR; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const VULKAN_HPP_NAMESPACE::Fence * pFences = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainPresentFenceInfoKHR; + }; + + using SwapchainPresentFenceInfoEXT = SwapchainPresentFenceInfoKHR; + + // wrapper struct for struct VkSwapchainPresentModeInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainPresentModeInfoKHR.html + struct SwapchainPresentModeInfoKHR + { + using NativeType = VkSwapchainPresentModeInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainPresentModeInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainPresentModeInfoKHR( uint32_t swapchainCount_ = {}, + const VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , swapchainCount{ swapchainCount_ } + , pPresentModes{ pPresentModes_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainPresentModeInfoKHR( SwapchainPresentModeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainPresentModeInfoKHR( VkSwapchainPresentModeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainPresentModeInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainPresentModeInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), swapchainCount( static_cast( presentModes_.size() ) ), pPresentModes( presentModes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SwapchainPresentModeInfoKHR & operator=( SwapchainPresentModeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainPresentModeInfoKHR & operator=( VkSwapchainPresentModeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentModeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentModeInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = swapchainCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentModeInfoKHR & setPPresentModes( const VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ ) VULKAN_HPP_NOEXCEPT + { + pPresentModes = pPresentModes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainPresentModeInfoKHR & + setPresentModes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_ ) VULKAN_HPP_NOEXCEPT + { + swapchainCount = static_cast( presentModes_.size() ); + pPresentModes = presentModes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainPresentModeInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentModeInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentModeInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainPresentModeInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, swapchainCount, pPresentModes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainPresentModeInfoKHR const & ) const = default; +#else + bool operator==( SwapchainPresentModeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) && ( pPresentModes == rhs.pPresentModes ); +# endif + } + + bool operator!=( SwapchainPresentModeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainPresentModeInfoKHR; + const void * pNext = {}; + uint32_t swapchainCount = {}; + const VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainPresentModeInfoKHR; + }; + + using SwapchainPresentModeInfoEXT = SwapchainPresentModeInfoKHR; + + // wrapper struct for struct VkSwapchainPresentModesCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainPresentModesCreateInfoKHR.html + struct SwapchainPresentModesCreateInfoKHR + { + using NativeType = VkSwapchainPresentModesCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainPresentModesCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainPresentModesCreateInfoKHR( uint32_t presentModeCount_ = {}, + const VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , presentModeCount{ presentModeCount_ } + , pPresentModes{ pPresentModes_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainPresentModesCreateInfoKHR( SwapchainPresentModesCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainPresentModesCreateInfoKHR( VkSwapchainPresentModesCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainPresentModesCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainPresentModesCreateInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), presentModeCount( static_cast( presentModes_.size() ) ), pPresentModes( presentModes_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + SwapchainPresentModesCreateInfoKHR & operator=( SwapchainPresentModesCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainPresentModesCreateInfoKHR & operator=( VkSwapchainPresentModesCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentModesCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentModesCreateInfoKHR & setPresentModeCount( uint32_t presentModeCount_ ) VULKAN_HPP_NOEXCEPT + { + presentModeCount = presentModeCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentModesCreateInfoKHR & + setPPresentModes( const VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes_ ) VULKAN_HPP_NOEXCEPT + { + pPresentModes = pPresentModes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + SwapchainPresentModesCreateInfoKHR & + setPresentModes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & presentModes_ ) VULKAN_HPP_NOEXCEPT + { + presentModeCount = static_cast( presentModes_.size() ); + pPresentModes = presentModes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainPresentModesCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentModesCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentModesCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainPresentModesCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, presentModeCount, pPresentModes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainPresentModesCreateInfoKHR const & ) const = default; +#else + bool operator==( SwapchainPresentModesCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentModeCount == rhs.presentModeCount ) && ( pPresentModes == rhs.pPresentModes ); +# endif + } + + bool operator!=( SwapchainPresentModesCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainPresentModesCreateInfoKHR; + const void * pNext = {}; + uint32_t presentModeCount = {}; + const VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainPresentModesCreateInfoKHR; + }; + + using SwapchainPresentModesCreateInfoEXT = SwapchainPresentModesCreateInfoKHR; + + // wrapper struct for struct VkSwapchainPresentScalingCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkSwapchainPresentScalingCreateInfoKHR.html + struct SwapchainPresentScalingCreateInfoKHR + { + using NativeType = VkSwapchainPresentScalingCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainPresentScalingCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR SwapchainPresentScalingCreateInfoKHR( VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR scalingBehavior_ = {}, + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR presentGravityX_ = {}, + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR presentGravityY_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , scalingBehavior{ scalingBehavior_ } + , presentGravityX{ presentGravityX_ } + , presentGravityY{ presentGravityY_ } + { + } + + VULKAN_HPP_CONSTEXPR SwapchainPresentScalingCreateInfoKHR( SwapchainPresentScalingCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + SwapchainPresentScalingCreateInfoKHR( VkSwapchainPresentScalingCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : SwapchainPresentScalingCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + SwapchainPresentScalingCreateInfoKHR & operator=( SwapchainPresentScalingCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + SwapchainPresentScalingCreateInfoKHR & operator=( VkSwapchainPresentScalingCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentScalingCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentScalingCreateInfoKHR & + setScalingBehavior( VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR scalingBehavior_ ) VULKAN_HPP_NOEXCEPT + { + scalingBehavior = scalingBehavior_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentScalingCreateInfoKHR & + setPresentGravityX( VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR presentGravityX_ ) VULKAN_HPP_NOEXCEPT + { + presentGravityX = presentGravityX_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 SwapchainPresentScalingCreateInfoKHR & + setPresentGravityY( VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR presentGravityY_ ) VULKAN_HPP_NOEXCEPT + { + presentGravityY = presentGravityY_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkSwapchainPresentScalingCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentScalingCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkSwapchainPresentScalingCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkSwapchainPresentScalingCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, scalingBehavior, presentGravityX, presentGravityY ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( SwapchainPresentScalingCreateInfoKHR const & ) const = default; +#else + bool operator==( SwapchainPresentScalingCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( scalingBehavior == rhs.scalingBehavior ) && ( presentGravityX == rhs.presentGravityX ) && + ( presentGravityY == rhs.presentGravityY ); +# endif + } + + bool operator!=( SwapchainPresentScalingCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSwapchainPresentScalingCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PresentScalingFlagsKHR scalingBehavior = {}; + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR presentGravityX = {}; + VULKAN_HPP_NAMESPACE::PresentGravityFlagsKHR presentGravityY = {}; + }; + + template <> + struct CppType + { + using Type = SwapchainPresentScalingCreateInfoKHR; + }; + + using SwapchainPresentScalingCreateInfoEXT = SwapchainPresentScalingCreateInfoKHR; + + // wrapper struct for struct VkTensorCaptureDescriptorDataInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorCaptureDescriptorDataInfoARM.html + struct TensorCaptureDescriptorDataInfoARM + { + using NativeType = VkTensorCaptureDescriptorDataInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorCaptureDescriptorDataInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorCaptureDescriptorDataInfoARM( VULKAN_HPP_NAMESPACE::TensorARM tensor_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensor{ tensor_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorCaptureDescriptorDataInfoARM( TensorCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorCaptureDescriptorDataInfoARM( VkTensorCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorCaptureDescriptorDataInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorCaptureDescriptorDataInfoARM & operator=( TensorCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorCaptureDescriptorDataInfoARM & operator=( VkTensorCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorCaptureDescriptorDataInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorCaptureDescriptorDataInfoARM & setTensor( VULKAN_HPP_NAMESPACE::TensorARM tensor_ ) VULKAN_HPP_NOEXCEPT + { + tensor = tensor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorCaptureDescriptorDataInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorCaptureDescriptorDataInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorCaptureDescriptorDataInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorCaptureDescriptorDataInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorCaptureDescriptorDataInfoARM const & ) const = default; +#else + bool operator==( TensorCaptureDescriptorDataInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensor == rhs.tensor ); +# endif + } + + bool operator!=( TensorCaptureDescriptorDataInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorCaptureDescriptorDataInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorARM tensor = {}; + }; + + template <> + struct CppType + { + using Type = TensorCaptureDescriptorDataInfoARM; + }; + + // wrapper struct for struct VkTensorMemoryBarrierARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorMemoryBarrierARM.html + struct TensorMemoryBarrierARM + { + using NativeType = VkTensorMemoryBarrierARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorMemoryBarrierARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorMemoryBarrierARM( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {}, + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {}, + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {}, + uint32_t srcQueueFamilyIndex_ = {}, + uint32_t dstQueueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::TensorARM tensor_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , srcStageMask{ srcStageMask_ } + , srcAccessMask{ srcAccessMask_ } + , dstStageMask{ dstStageMask_ } + , dstAccessMask{ dstAccessMask_ } + , srcQueueFamilyIndex{ srcQueueFamilyIndex_ } + , dstQueueFamilyIndex{ dstQueueFamilyIndex_ } + , tensor{ tensor_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorMemoryBarrierARM( TensorMemoryBarrierARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorMemoryBarrierARM( VkTensorMemoryBarrierARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorMemoryBarrierARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorMemoryBarrierARM & operator=( TensorMemoryBarrierARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorMemoryBarrierARM & operator=( VkTensorMemoryBarrierARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT + { + srcStageMask = srcStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + srcAccessMask = srcAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT + { + dstStageMask = dstStageMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT + { + dstAccessMask = dstAccessMask_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + srcQueueFamilyIndex = srcQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + dstQueueFamilyIndex = dstQueueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryBarrierARM & setTensor( VULKAN_HPP_NAMESPACE::TensorARM tensor_ ) VULKAN_HPP_NOEXCEPT + { + tensor = tensor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorMemoryBarrierARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorMemoryBarrierARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorMemoryBarrierARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorMemoryBarrierARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, srcStageMask, srcAccessMask, dstStageMask, dstAccessMask, srcQueueFamilyIndex, dstQueueFamilyIndex, tensor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorMemoryBarrierARM const & ) const = default; +#else + bool operator==( TensorMemoryBarrierARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) && + ( dstStageMask == rhs.dstStageMask ) && ( dstAccessMask == rhs.dstAccessMask ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) && + ( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( tensor == rhs.tensor ); +# endif + } + + bool operator!=( TensorMemoryBarrierARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorMemoryBarrierARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {}; + VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {}; + VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {}; + uint32_t srcQueueFamilyIndex = {}; + uint32_t dstQueueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::TensorARM tensor = {}; + }; + + template <> + struct CppType + { + using Type = TensorMemoryBarrierARM; + }; + + // wrapper struct for struct VkTensorDependencyInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorDependencyInfoARM.html + struct TensorDependencyInfoARM + { + using NativeType = VkTensorDependencyInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorDependencyInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorDependencyInfoARM( uint32_t tensorMemoryBarrierCount_ = {}, + const VULKAN_HPP_NAMESPACE::TensorMemoryBarrierARM * pTensorMemoryBarriers_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorMemoryBarrierCount{ tensorMemoryBarrierCount_ } + , pTensorMemoryBarriers{ pTensorMemoryBarriers_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorDependencyInfoARM( TensorDependencyInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorDependencyInfoARM( VkTensorDependencyInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorDependencyInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorDependencyInfoARM & operator=( TensorDependencyInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorDependencyInfoARM & operator=( VkTensorDependencyInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorDependencyInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorDependencyInfoARM & setTensorMemoryBarrierCount( uint32_t tensorMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT + { + tensorMemoryBarrierCount = tensorMemoryBarrierCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorDependencyInfoARM & + setPTensorMemoryBarriers( const VULKAN_HPP_NAMESPACE::TensorMemoryBarrierARM * pTensorMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT + { + pTensorMemoryBarriers = pTensorMemoryBarriers_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorDependencyInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorDependencyInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorDependencyInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorDependencyInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensorMemoryBarrierCount, pTensorMemoryBarriers ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorDependencyInfoARM const & ) const = default; +#else + bool operator==( TensorDependencyInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorMemoryBarrierCount == rhs.tensorMemoryBarrierCount ) && + ( pTensorMemoryBarriers == rhs.pTensorMemoryBarriers ); +# endif + } + + bool operator!=( TensorDependencyInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorDependencyInfoARM; + const void * pNext = {}; + uint32_t tensorMemoryBarrierCount = {}; + const VULKAN_HPP_NAMESPACE::TensorMemoryBarrierARM * pTensorMemoryBarriers = {}; + }; + + template <> + struct CppType + { + using Type = TensorDependencyInfoARM; + }; + + // wrapper struct for struct VkTensorFormatPropertiesARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorFormatPropertiesARM.html + struct TensorFormatPropertiesARM + { + using NativeType = VkTensorFormatPropertiesARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorFormatPropertiesARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorFormatPropertiesARM( VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingTensorFeatures_ = {}, + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingTensorFeatures_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , optimalTilingTensorFeatures{ optimalTilingTensorFeatures_ } + , linearTilingTensorFeatures{ linearTilingTensorFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorFormatPropertiesARM( TensorFormatPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorFormatPropertiesARM( VkTensorFormatPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorFormatPropertiesARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorFormatPropertiesARM & operator=( TensorFormatPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorFormatPropertiesARM & operator=( VkTensorFormatPropertiesARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkTensorFormatPropertiesARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorFormatPropertiesARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorFormatPropertiesARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorFormatPropertiesARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, optimalTilingTensorFeatures, linearTilingTensorFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorFormatPropertiesARM const & ) const = default; +#else + bool operator==( TensorFormatPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( optimalTilingTensorFeatures == rhs.optimalTilingTensorFeatures ) && + ( linearTilingTensorFeatures == rhs.linearTilingTensorFeatures ); +# endif + } + + bool operator!=( TensorFormatPropertiesARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorFormatPropertiesARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingTensorFeatures = {}; + VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingTensorFeatures = {}; + }; + + template <> + struct CppType + { + using Type = TensorFormatPropertiesARM; + }; + + // wrapper struct for struct VkTensorMemoryRequirementsInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorMemoryRequirementsInfoARM.html + struct TensorMemoryRequirementsInfoARM + { + using NativeType = VkTensorMemoryRequirementsInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorMemoryRequirementsInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorMemoryRequirementsInfoARM( VULKAN_HPP_NAMESPACE::TensorARM tensor_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensor{ tensor_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorMemoryRequirementsInfoARM( TensorMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorMemoryRequirementsInfoARM( VkTensorMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorMemoryRequirementsInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorMemoryRequirementsInfoARM & operator=( TensorMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorMemoryRequirementsInfoARM & operator=( VkTensorMemoryRequirementsInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorMemoryRequirementsInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorMemoryRequirementsInfoARM & setTensor( VULKAN_HPP_NAMESPACE::TensorARM tensor_ ) VULKAN_HPP_NOEXCEPT + { + tensor = tensor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorMemoryRequirementsInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorMemoryRequirementsInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorMemoryRequirementsInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorMemoryRequirementsInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorMemoryRequirementsInfoARM const & ) const = default; +#else + bool operator==( TensorMemoryRequirementsInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensor == rhs.tensor ); +# endif + } + + bool operator!=( TensorMemoryRequirementsInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorMemoryRequirementsInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorARM tensor = {}; + }; + + template <> + struct CppType + { + using Type = TensorMemoryRequirementsInfoARM; + }; + + // wrapper struct for struct VkTensorViewCaptureDescriptorDataInfoARM, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorViewCaptureDescriptorDataInfoARM.html + struct TensorViewCaptureDescriptorDataInfoARM + { + using NativeType = VkTensorViewCaptureDescriptorDataInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorViewCaptureDescriptorDataInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorViewCaptureDescriptorDataInfoARM( VULKAN_HPP_NAMESPACE::TensorViewARM tensorView_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorView{ tensorView_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorViewCaptureDescriptorDataInfoARM( TensorViewCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorViewCaptureDescriptorDataInfoARM( VkTensorViewCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorViewCaptureDescriptorDataInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorViewCaptureDescriptorDataInfoARM & operator=( TensorViewCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorViewCaptureDescriptorDataInfoARM & operator=( VkTensorViewCaptureDescriptorDataInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorViewCaptureDescriptorDataInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorViewCaptureDescriptorDataInfoARM & setTensorView( VULKAN_HPP_NAMESPACE::TensorViewARM tensorView_ ) VULKAN_HPP_NOEXCEPT + { + tensorView = tensorView_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorViewCaptureDescriptorDataInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorViewCaptureDescriptorDataInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorViewCaptureDescriptorDataInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorViewCaptureDescriptorDataInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensorView ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorViewCaptureDescriptorDataInfoARM const & ) const = default; +#else + bool operator==( TensorViewCaptureDescriptorDataInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorView == rhs.tensorView ); +# endif + } + + bool operator!=( TensorViewCaptureDescriptorDataInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorViewCaptureDescriptorDataInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorViewARM tensorView = {}; + }; + + template <> + struct CppType + { + using Type = TensorViewCaptureDescriptorDataInfoARM; + }; + + // wrapper struct for struct VkTensorViewCreateInfoARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTensorViewCreateInfoARM.html + struct TensorViewCreateInfoARM + { + using NativeType = VkTensorViewCreateInfoARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTensorViewCreateInfoARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TensorViewCreateInfoARM( VULKAN_HPP_NAMESPACE::TensorViewCreateFlagsARM flags_ = {}, + VULKAN_HPP_NAMESPACE::TensorARM tensor_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , tensor{ tensor_ } + , format{ format_ } + { + } + + VULKAN_HPP_CONSTEXPR TensorViewCreateInfoARM( TensorViewCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TensorViewCreateInfoARM( VkTensorViewCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + : TensorViewCreateInfoARM( *reinterpret_cast( &rhs ) ) + { + } + + TensorViewCreateInfoARM & operator=( TensorViewCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TensorViewCreateInfoARM & operator=( VkTensorViewCreateInfoARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TensorViewCreateInfoARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorViewCreateInfoARM & setFlags( VULKAN_HPP_NAMESPACE::TensorViewCreateFlagsARM flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorViewCreateInfoARM & setTensor( VULKAN_HPP_NAMESPACE::TensorARM tensor_ ) VULKAN_HPP_NOEXCEPT + { + tensor = tensor_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TensorViewCreateInfoARM & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTensorViewCreateInfoARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorViewCreateInfoARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTensorViewCreateInfoARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTensorViewCreateInfoARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, tensor, format ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TensorViewCreateInfoARM const & ) const = default; +#else + bool operator==( TensorViewCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( tensor == rhs.tensor ) && ( format == rhs.format ); +# endif + } + + bool operator!=( TensorViewCreateInfoARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTensorViewCreateInfoARM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::TensorViewCreateFlagsARM flags = {}; + VULKAN_HPP_NAMESPACE::TensorARM tensor = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + }; + + template <> + struct CppType + { + using Type = TensorViewCreateInfoARM; + }; + + // wrapper struct for struct VkTextureLODGatherFormatPropertiesAMD, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkTextureLODGatherFormatPropertiesAMD.html + struct TextureLODGatherFormatPropertiesAMD + { + using NativeType = VkTextureLODGatherFormatPropertiesAMD; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTextureLodGatherFormatPropertiesAMD; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TextureLODGatherFormatPropertiesAMD( VULKAN_HPP_NAMESPACE::Bool32 supportsTextureGatherLODBiasAMD_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , supportsTextureGatherLODBiasAMD{ supportsTextureGatherLODBiasAMD_ } + { + } + + VULKAN_HPP_CONSTEXPR TextureLODGatherFormatPropertiesAMD( TextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TextureLODGatherFormatPropertiesAMD( VkTextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + : TextureLODGatherFormatPropertiesAMD( *reinterpret_cast( &rhs ) ) + { + } + + TextureLODGatherFormatPropertiesAMD & operator=( TextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TextureLODGatherFormatPropertiesAMD & operator=( VkTextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkTextureLODGatherFormatPropertiesAMD const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTextureLODGatherFormatPropertiesAMD &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTextureLODGatherFormatPropertiesAMD const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTextureLODGatherFormatPropertiesAMD *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, supportsTextureGatherLODBiasAMD ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TextureLODGatherFormatPropertiesAMD const & ) const = default; +#else + bool operator==( TextureLODGatherFormatPropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportsTextureGatherLODBiasAMD == rhs.supportsTextureGatherLODBiasAMD ); +# endif + } + + bool operator!=( TextureLODGatherFormatPropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTextureLodGatherFormatPropertiesAMD; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 supportsTextureGatherLODBiasAMD = {}; + }; + + template <> + struct CppType + { + using Type = TextureLODGatherFormatPropertiesAMD; + }; + + // wrapper struct for struct VkTileMemoryBindInfoQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTileMemoryBindInfoQCOM.html + struct TileMemoryBindInfoQCOM + { + using NativeType = VkTileMemoryBindInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTileMemoryBindInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TileMemoryBindInfoQCOM( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memory{ memory_ } + { + } + + VULKAN_HPP_CONSTEXPR TileMemoryBindInfoQCOM( TileMemoryBindInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TileMemoryBindInfoQCOM( VkTileMemoryBindInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : TileMemoryBindInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + TileMemoryBindInfoQCOM & operator=( TileMemoryBindInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TileMemoryBindInfoQCOM & operator=( VkTileMemoryBindInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TileMemoryBindInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TileMemoryBindInfoQCOM & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT + { + memory = memory_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTileMemoryBindInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTileMemoryBindInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTileMemoryBindInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTileMemoryBindInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memory ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TileMemoryBindInfoQCOM const & ) const = default; +#else + bool operator==( TileMemoryBindInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ); +# endif + } + + bool operator!=( TileMemoryBindInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTileMemoryBindInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceMemory memory = {}; + }; + + template <> + struct CppType + { + using Type = TileMemoryBindInfoQCOM; + }; + + // wrapper struct for struct VkTileMemoryRequirementsQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTileMemoryRequirementsQCOM.html + struct TileMemoryRequirementsQCOM + { + using NativeType = VkTileMemoryRequirementsQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTileMemoryRequirementsQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TileMemoryRequirementsQCOM( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize alignment_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , size{ size_ } + , alignment{ alignment_ } + { + } + + VULKAN_HPP_CONSTEXPR TileMemoryRequirementsQCOM( TileMemoryRequirementsQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TileMemoryRequirementsQCOM( VkTileMemoryRequirementsQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : TileMemoryRequirementsQCOM( *reinterpret_cast( &rhs ) ) + { + } + + TileMemoryRequirementsQCOM & operator=( TileMemoryRequirementsQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TileMemoryRequirementsQCOM & operator=( VkTileMemoryRequirementsQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TileMemoryRequirementsQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TileMemoryRequirementsQCOM & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TileMemoryRequirementsQCOM & setAlignment( VULKAN_HPP_NAMESPACE::DeviceSize alignment_ ) VULKAN_HPP_NOEXCEPT + { + alignment = alignment_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTileMemoryRequirementsQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTileMemoryRequirementsQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTileMemoryRequirementsQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTileMemoryRequirementsQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, size, alignment ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TileMemoryRequirementsQCOM const & ) const = default; +#else + bool operator==( TileMemoryRequirementsQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( size == rhs.size ) && ( alignment == rhs.alignment ); +# endif + } + + bool operator!=( TileMemoryRequirementsQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTileMemoryRequirementsQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + VULKAN_HPP_NAMESPACE::DeviceSize alignment = {}; + }; + + template <> + struct CppType + { + using Type = TileMemoryRequirementsQCOM; + }; + + // wrapper struct for struct VkTileMemorySizeInfoQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTileMemorySizeInfoQCOM.html + struct TileMemorySizeInfoQCOM + { + using NativeType = VkTileMemorySizeInfoQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTileMemorySizeInfoQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TileMemorySizeInfoQCOM( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , size{ size_ } + { + } + + VULKAN_HPP_CONSTEXPR TileMemorySizeInfoQCOM( TileMemorySizeInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TileMemorySizeInfoQCOM( VkTileMemorySizeInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + : TileMemorySizeInfoQCOM( *reinterpret_cast( &rhs ) ) + { + } + + TileMemorySizeInfoQCOM & operator=( TileMemorySizeInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TileMemorySizeInfoQCOM & operator=( VkTileMemorySizeInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TileMemorySizeInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TileMemorySizeInfoQCOM & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT + { + size = size_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTileMemorySizeInfoQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTileMemorySizeInfoQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTileMemorySizeInfoQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTileMemorySizeInfoQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, size ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TileMemorySizeInfoQCOM const & ) const = default; +#else + bool operator==( TileMemorySizeInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( size == rhs.size ); +# endif + } + + bool operator!=( TileMemorySizeInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTileMemorySizeInfoQCOM; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::DeviceSize size = {}; + }; + + template <> + struct CppType + { + using Type = TileMemorySizeInfoQCOM; + }; + + // wrapper struct for struct VkTilePropertiesQCOM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTilePropertiesQCOM.html + struct TilePropertiesQCOM + { + using NativeType = VkTilePropertiesQCOM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTilePropertiesQCOM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TilePropertiesQCOM( VULKAN_HPP_NAMESPACE::Extent3D tileSize_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D apronSize_ = {}, + VULKAN_HPP_NAMESPACE::Offset2D origin_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tileSize{ tileSize_ } + , apronSize{ apronSize_ } + , origin{ origin_ } + { + } + + VULKAN_HPP_CONSTEXPR TilePropertiesQCOM( TilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TilePropertiesQCOM( VkTilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT : TilePropertiesQCOM( *reinterpret_cast( &rhs ) ) {} + + TilePropertiesQCOM & operator=( TilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TilePropertiesQCOM & operator=( VkTilePropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setTileSize( VULKAN_HPP_NAMESPACE::Extent3D const & tileSize_ ) VULKAN_HPP_NOEXCEPT + { + tileSize = tileSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setApronSize( VULKAN_HPP_NAMESPACE::Extent2D const & apronSize_ ) VULKAN_HPP_NOEXCEPT + { + apronSize = apronSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TilePropertiesQCOM & setOrigin( VULKAN_HPP_NAMESPACE::Offset2D const & origin_ ) VULKAN_HPP_NOEXCEPT + { + origin = origin_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTilePropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTilePropertiesQCOM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTilePropertiesQCOM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTilePropertiesQCOM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tileSize, apronSize, origin ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TilePropertiesQCOM const & ) const = default; +#else + bool operator==( TilePropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tileSize == rhs.tileSize ) && ( apronSize == rhs.apronSize ) && ( origin == rhs.origin ); +# endif + } + + bool operator!=( TilePropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTilePropertiesQCOM; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent3D tileSize = {}; + VULKAN_HPP_NAMESPACE::Extent2D apronSize = {}; + VULKAN_HPP_NAMESPACE::Offset2D origin = {}; + }; + + template <> + struct CppType + { + using Type = TilePropertiesQCOM; + }; + + // wrapper struct for struct VkTimelineSemaphoreSubmitInfo, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTimelineSemaphoreSubmitInfo.html + struct TimelineSemaphoreSubmitInfo + { + using NativeType = VkTimelineSemaphoreSubmitInfo; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTimelineSemaphoreSubmitInfo; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TimelineSemaphoreSubmitInfo( uint32_t waitSemaphoreValueCount_ = {}, + const uint64_t * pWaitSemaphoreValues_ = {}, + uint32_t signalSemaphoreValueCount_ = {}, + const uint64_t * pSignalSemaphoreValues_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , waitSemaphoreValueCount{ waitSemaphoreValueCount_ } + , pWaitSemaphoreValues{ pWaitSemaphoreValues_ } + , signalSemaphoreValueCount{ signalSemaphoreValueCount_ } + , pSignalSemaphoreValues{ pSignalSemaphoreValues_ } + { + } + + VULKAN_HPP_CONSTEXPR TimelineSemaphoreSubmitInfo( TimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TimelineSemaphoreSubmitInfo( VkTimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + : TimelineSemaphoreSubmitInfo( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TimelineSemaphoreSubmitInfo( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , waitSemaphoreValueCount( static_cast( waitSemaphoreValues_.size() ) ) + , pWaitSemaphoreValues( waitSemaphoreValues_.data() ) + , signalSemaphoreValueCount( static_cast( signalSemaphoreValues_.size() ) ) + , pSignalSemaphoreValues( signalSemaphoreValues_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + TimelineSemaphoreSubmitInfo & operator=( TimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TimelineSemaphoreSubmitInfo & operator=( VkTimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setWaitSemaphoreValueCount( uint32_t waitSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreValueCount = waitSemaphoreValueCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + pWaitSemaphoreValues = pWaitSemaphoreValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TimelineSemaphoreSubmitInfo & + setWaitSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & waitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + waitSemaphoreValueCount = static_cast( waitSemaphoreValues_.size() ); + pWaitSemaphoreValues = waitSemaphoreValues_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setSignalSemaphoreValueCount( uint32_t signalSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreValueCount = signalSemaphoreValueCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + pSignalSemaphoreValues = pSignalSemaphoreValues_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + TimelineSemaphoreSubmitInfo & + setSignalSemaphoreValues( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & signalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT + { + signalSemaphoreValueCount = static_cast( signalSemaphoreValues_.size() ); + pSignalSemaphoreValues = signalSemaphoreValues_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTimelineSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTimelineSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTimelineSemaphoreSubmitInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTimelineSemaphoreSubmitInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, waitSemaphoreValueCount, pWaitSemaphoreValues, signalSemaphoreValueCount, pSignalSemaphoreValues ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TimelineSemaphoreSubmitInfo const & ) const = default; +#else + bool operator==( TimelineSemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreValueCount == rhs.waitSemaphoreValueCount ) && + ( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues ) && ( signalSemaphoreValueCount == rhs.signalSemaphoreValueCount ) && + ( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues ); +# endif + } + + bool operator!=( TimelineSemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eTimelineSemaphoreSubmitInfo; + const void * pNext = {}; + uint32_t waitSemaphoreValueCount = {}; + const uint64_t * pWaitSemaphoreValues = {}; + uint32_t signalSemaphoreValueCount = {}; + const uint64_t * pSignalSemaphoreValues = {}; + }; + + template <> + struct CppType + { + using Type = TimelineSemaphoreSubmitInfo; + }; + + using TimelineSemaphoreSubmitInfoKHR = TimelineSemaphoreSubmitInfo; + + // wrapper struct for struct VkTraceRaysIndirectCommand2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTraceRaysIndirectCommand2KHR.html + struct TraceRaysIndirectCommand2KHR + { + using NativeType = VkTraceRaysIndirectCommand2KHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommand2KHR( VULKAN_HPP_NAMESPACE::DeviceAddress raygenShaderRecordAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderRecordSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress missShaderBindingTableAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress hitShaderBindingTableAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableStride_ = {}, + VULKAN_HPP_NAMESPACE::DeviceAddress callableShaderBindingTableAddress_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableSize_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableStride_ = {}, + uint32_t width_ = {}, + uint32_t height_ = {}, + uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT + : raygenShaderRecordAddress{ raygenShaderRecordAddress_ } + , raygenShaderRecordSize{ raygenShaderRecordSize_ } + , missShaderBindingTableAddress{ missShaderBindingTableAddress_ } + , missShaderBindingTableSize{ missShaderBindingTableSize_ } + , missShaderBindingTableStride{ missShaderBindingTableStride_ } + , hitShaderBindingTableAddress{ hitShaderBindingTableAddress_ } + , hitShaderBindingTableSize{ hitShaderBindingTableSize_ } + , hitShaderBindingTableStride{ hitShaderBindingTableStride_ } + , callableShaderBindingTableAddress{ callableShaderBindingTableAddress_ } + , callableShaderBindingTableSize{ callableShaderBindingTableSize_ } + , callableShaderBindingTableStride{ callableShaderBindingTableStride_ } + , width{ width_ } + , height{ height_ } + , depth{ depth_ } + { + } + + VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommand2KHR( TraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TraceRaysIndirectCommand2KHR( VkTraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + : TraceRaysIndirectCommand2KHR( *reinterpret_cast( &rhs ) ) + { + } + + TraceRaysIndirectCommand2KHR & operator=( TraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TraceRaysIndirectCommand2KHR & operator=( VkTraceRaysIndirectCommand2KHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setRaygenShaderRecordAddress( VULKAN_HPP_NAMESPACE::DeviceAddress raygenShaderRecordAddress_ ) VULKAN_HPP_NOEXCEPT + { + raygenShaderRecordAddress = raygenShaderRecordAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setRaygenShaderRecordSize( VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderRecordSize_ ) VULKAN_HPP_NOEXCEPT + { + raygenShaderRecordSize = raygenShaderRecordSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setMissShaderBindingTableAddress( VULKAN_HPP_NAMESPACE::DeviceAddress missShaderBindingTableAddress_ ) VULKAN_HPP_NOEXCEPT + { + missShaderBindingTableAddress = missShaderBindingTableAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setMissShaderBindingTableSize( VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableSize_ ) VULKAN_HPP_NOEXCEPT + { + missShaderBindingTableSize = missShaderBindingTableSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setMissShaderBindingTableStride( VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableStride_ ) VULKAN_HPP_NOEXCEPT + { + missShaderBindingTableStride = missShaderBindingTableStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setHitShaderBindingTableAddress( VULKAN_HPP_NAMESPACE::DeviceAddress hitShaderBindingTableAddress_ ) VULKAN_HPP_NOEXCEPT + { + hitShaderBindingTableAddress = hitShaderBindingTableAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setHitShaderBindingTableSize( VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableSize_ ) VULKAN_HPP_NOEXCEPT + { + hitShaderBindingTableSize = hitShaderBindingTableSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setHitShaderBindingTableStride( VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableStride_ ) VULKAN_HPP_NOEXCEPT + { + hitShaderBindingTableStride = hitShaderBindingTableStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setCallableShaderBindingTableAddress( VULKAN_HPP_NAMESPACE::DeviceAddress callableShaderBindingTableAddress_ ) VULKAN_HPP_NOEXCEPT + { + callableShaderBindingTableAddress = callableShaderBindingTableAddress_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setCallableShaderBindingTableSize( VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableSize_ ) VULKAN_HPP_NOEXCEPT + { + callableShaderBindingTableSize = callableShaderBindingTableSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & + setCallableShaderBindingTableStride( VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableStride_ ) VULKAN_HPP_NOEXCEPT + { + callableShaderBindingTableStride = callableShaderBindingTableStride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommand2KHR & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT + { + depth = depth_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTraceRaysIndirectCommand2KHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTraceRaysIndirectCommand2KHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTraceRaysIndirectCommand2KHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTraceRaysIndirectCommand2KHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( raygenShaderRecordAddress, + raygenShaderRecordSize, + missShaderBindingTableAddress, + missShaderBindingTableSize, + missShaderBindingTableStride, + hitShaderBindingTableAddress, + hitShaderBindingTableSize, + hitShaderBindingTableStride, + callableShaderBindingTableAddress, + callableShaderBindingTableSize, + callableShaderBindingTableStride, + width, + height, + depth ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TraceRaysIndirectCommand2KHR const & ) const = default; +#else + bool operator==( TraceRaysIndirectCommand2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( raygenShaderRecordAddress == rhs.raygenShaderRecordAddress ) && ( raygenShaderRecordSize == rhs.raygenShaderRecordSize ) && + ( missShaderBindingTableAddress == rhs.missShaderBindingTableAddress ) && ( missShaderBindingTableSize == rhs.missShaderBindingTableSize ) && + ( missShaderBindingTableStride == rhs.missShaderBindingTableStride ) && ( hitShaderBindingTableAddress == rhs.hitShaderBindingTableAddress ) && + ( hitShaderBindingTableSize == rhs.hitShaderBindingTableSize ) && ( hitShaderBindingTableStride == rhs.hitShaderBindingTableStride ) && + ( callableShaderBindingTableAddress == rhs.callableShaderBindingTableAddress ) && + ( callableShaderBindingTableSize == rhs.callableShaderBindingTableSize ) && + ( callableShaderBindingTableStride == rhs.callableShaderBindingTableStride ) && ( width == rhs.width ) && ( height == rhs.height ) && + ( depth == rhs.depth ); +# endif + } + + bool operator!=( TraceRaysIndirectCommand2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::DeviceAddress raygenShaderRecordAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize raygenShaderRecordSize = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress missShaderBindingTableAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize missShaderBindingTableStride = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress hitShaderBindingTableAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize hitShaderBindingTableStride = {}; + VULKAN_HPP_NAMESPACE::DeviceAddress callableShaderBindingTableAddress = {}; + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableSize = {}; + VULKAN_HPP_NAMESPACE::DeviceSize callableShaderBindingTableStride = {}; + uint32_t width = {}; + uint32_t height = {}; + uint32_t depth = {}; + }; + + // wrapper struct for struct VkTraceRaysIndirectCommandKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkTraceRaysIndirectCommandKHR.html + struct TraceRaysIndirectCommandKHR + { + using NativeType = VkTraceRaysIndirectCommandKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommandKHR( uint32_t width_ = {}, uint32_t height_ = {}, uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT + : width{ width_ } + , height{ height_ } + , depth{ depth_ } + { + } + + VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommandKHR( TraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + TraceRaysIndirectCommandKHR( VkTraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : TraceRaysIndirectCommandKHR( *reinterpret_cast( &rhs ) ) + { + } + + explicit TraceRaysIndirectCommandKHR( Extent2D const & extent2D, uint32_t depth_ = {} ) + : width( extent2D.width ), height( extent2D.height ), depth( depth_ ) + { + } + + TraceRaysIndirectCommandKHR & operator=( TraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + TraceRaysIndirectCommandKHR & operator=( VkTraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT + { + width = width_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT + { + height = height_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT + { + depth = depth_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkTraceRaysIndirectCommandKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTraceRaysIndirectCommandKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkTraceRaysIndirectCommandKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkTraceRaysIndirectCommandKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( width, height, depth ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( TraceRaysIndirectCommandKHR const & ) const = default; +#else + bool operator==( TraceRaysIndirectCommandKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( width == rhs.width ) && ( height == rhs.height ) && ( depth == rhs.depth ); +# endif + } + + bool operator!=( TraceRaysIndirectCommandKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t width = {}; + uint32_t height = {}; + uint32_t depth = {}; + }; + + // wrapper struct for struct VkValidationCacheCreateInfoEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationCacheCreateInfoEXT.html + struct ValidationCacheCreateInfoEXT + { + using NativeType = VkValidationCacheCreateInfoEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationCacheCreateInfoEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ = {}, + size_t initialDataSize_ = {}, + const void * pInitialData_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , initialDataSize{ initialDataSize_ } + , pInitialData{ pInitialData_ } + { + } + + VULKAN_HPP_CONSTEXPR ValidationCacheCreateInfoEXT( ValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ValidationCacheCreateInfoEXT( VkValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ValidationCacheCreateInfoEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + ValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), flags( flags_ ), initialDataSize( initialData_.size() * sizeof( T ) ), pInitialData( initialData_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ValidationCacheCreateInfoEXT & operator=( ValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ValidationCacheCreateInfoEXT & operator=( VkValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT + { + initialDataSize = initialDataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT + { + pInitialData = pInitialData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + ValidationCacheCreateInfoEXT & setInitialData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & initialData_ ) VULKAN_HPP_NOEXCEPT + { + initialDataSize = initialData_.size() * sizeof( T ); + pInitialData = initialData_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkValidationCacheCreateInfoEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkValidationCacheCreateInfoEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, initialDataSize, pInitialData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ValidationCacheCreateInfoEXT const & ) const = default; +#else + bool operator==( ValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( initialDataSize == rhs.initialDataSize ) && + ( pInitialData == rhs.pInitialData ); +# endif + } + + bool operator!=( ValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eValidationCacheCreateInfoEXT; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags = {}; + size_t initialDataSize = {}; + const void * pInitialData = {}; + }; + + template <> + struct CppType + { + using Type = ValidationCacheCreateInfoEXT; + }; + + // wrapper struct for struct VkValidationFeaturesEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationFeaturesEXT.html + struct ValidationFeaturesEXT + { + using NativeType = VkValidationFeaturesEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFeaturesEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ValidationFeaturesEXT( uint32_t enabledValidationFeatureCount_ = {}, + const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures_ = {}, + uint32_t disabledValidationFeatureCount_ = {}, + const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , enabledValidationFeatureCount{ enabledValidationFeatureCount_ } + , pEnabledValidationFeatures{ pEnabledValidationFeatures_ } + , disabledValidationFeatureCount{ disabledValidationFeatureCount_ } + , pDisabledValidationFeatures{ pDisabledValidationFeatures_ } + { + } + + VULKAN_HPP_CONSTEXPR ValidationFeaturesEXT( ValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ValidationFeaturesEXT( VkValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : ValidationFeaturesEXT( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ValidationFeaturesEXT( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & enabledValidationFeatures_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationFeatures_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , enabledValidationFeatureCount( static_cast( enabledValidationFeatures_.size() ) ) + , pEnabledValidationFeatures( enabledValidationFeatures_.data() ) + , disabledValidationFeatureCount( static_cast( disabledValidationFeatures_.size() ) ) + , pDisabledValidationFeatures( disabledValidationFeatures_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ValidationFeaturesEXT & operator=( ValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ValidationFeaturesEXT & operator=( VkValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setEnabledValidationFeatureCount( uint32_t enabledValidationFeatureCount_ ) VULKAN_HPP_NOEXCEPT + { + enabledValidationFeatureCount = enabledValidationFeatureCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & + setPEnabledValidationFeatures( const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures_ ) VULKAN_HPP_NOEXCEPT + { + pEnabledValidationFeatures = pEnabledValidationFeatures_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ValidationFeaturesEXT & setEnabledValidationFeatures( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & enabledValidationFeatures_ ) + VULKAN_HPP_NOEXCEPT + { + enabledValidationFeatureCount = static_cast( enabledValidationFeatures_.size() ); + pEnabledValidationFeatures = enabledValidationFeatures_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setDisabledValidationFeatureCount( uint32_t disabledValidationFeatureCount_ ) VULKAN_HPP_NOEXCEPT + { + disabledValidationFeatureCount = disabledValidationFeatureCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & + setPDisabledValidationFeatures( const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures_ ) VULKAN_HPP_NOEXCEPT + { + pDisabledValidationFeatures = pDisabledValidationFeatures_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ValidationFeaturesEXT & setDisabledValidationFeatures( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationFeatures_ ) + VULKAN_HPP_NOEXCEPT + { + disabledValidationFeatureCount = static_cast( disabledValidationFeatures_.size() ); + pDisabledValidationFeatures = disabledValidationFeatures_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkValidationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkValidationFeaturesEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkValidationFeaturesEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkValidationFeaturesEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, enabledValidationFeatureCount, pEnabledValidationFeatures, disabledValidationFeatureCount, pDisabledValidationFeatures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ValidationFeaturesEXT const & ) const = default; +#else + bool operator==( ValidationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( enabledValidationFeatureCount == rhs.enabledValidationFeatureCount ) && + ( pEnabledValidationFeatures == rhs.pEnabledValidationFeatures ) && ( disabledValidationFeatureCount == rhs.disabledValidationFeatureCount ) && + ( pDisabledValidationFeatures == rhs.pDisabledValidationFeatures ); +# endif + } + + bool operator!=( ValidationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eValidationFeaturesEXT; + const void * pNext = {}; + uint32_t enabledValidationFeatureCount = {}; + const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures = {}; + uint32_t disabledValidationFeatureCount = {}; + const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures = {}; + }; + + template <> + struct CppType + { + using Type = ValidationFeaturesEXT; + }; + + // wrapper struct for struct VkValidationFlagsEXT, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkValidationFlagsEXT.html + struct ValidationFlagsEXT + { + using NativeType = VkValidationFlagsEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFlagsEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR ValidationFlagsEXT( uint32_t disabledValidationCheckCount_ = {}, + const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , disabledValidationCheckCount{ disabledValidationCheckCount_ } + , pDisabledValidationChecks{ pDisabledValidationChecks_ } + { + } + + VULKAN_HPP_CONSTEXPR ValidationFlagsEXT( ValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ValidationFlagsEXT( VkValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT : ValidationFlagsEXT( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ValidationFlagsEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationChecks_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , disabledValidationCheckCount( static_cast( disabledValidationChecks_.size() ) ) + , pDisabledValidationChecks( disabledValidationChecks_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + ValidationFlagsEXT & operator=( ValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ValidationFlagsEXT & operator=( VkValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ ) VULKAN_HPP_NOEXCEPT + { + disabledValidationCheckCount = disabledValidationCheckCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & + setPDisabledValidationChecks( const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks_ ) VULKAN_HPP_NOEXCEPT + { + pDisabledValidationChecks = pDisabledValidationChecks_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ValidationFlagsEXT & setDisabledValidationChecks( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & disabledValidationChecks_ ) VULKAN_HPP_NOEXCEPT + { + disabledValidationCheckCount = static_cast( disabledValidationChecks_.size() ); + pDisabledValidationChecks = disabledValidationChecks_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkValidationFlagsEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkValidationFlagsEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkValidationFlagsEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkValidationFlagsEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, disabledValidationCheckCount, pDisabledValidationChecks ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ValidationFlagsEXT const & ) const = default; +#else + bool operator==( ValidationFlagsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( disabledValidationCheckCount == rhs.disabledValidationCheckCount ) && + ( pDisabledValidationChecks == rhs.pDisabledValidationChecks ); +# endif + } + + bool operator!=( ValidationFlagsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eValidationFlagsEXT; + const void * pNext = {}; + uint32_t disabledValidationCheckCount = {}; + const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks = {}; + }; + + template <> + struct CppType + { + using Type = ValidationFlagsEXT; + }; + + // wrapper struct for struct VkVertexInputAttributeDescription2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVertexInputAttributeDescription2EXT.html + struct VertexInputAttributeDescription2EXT + { + using NativeType = VkVertexInputAttributeDescription2EXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVertexInputAttributeDescription2EXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription2EXT( uint32_t location_ = {}, + uint32_t binding_ = {}, + VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint32_t offset_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , location{ location_ } + , binding{ binding_ } + , format{ format_ } + , offset{ offset_ } + { + } + + VULKAN_HPP_CONSTEXPR VertexInputAttributeDescription2EXT( VertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VertexInputAttributeDescription2EXT( VkVertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + : VertexInputAttributeDescription2EXT( *reinterpret_cast( &rhs ) ) + { + } + + VertexInputAttributeDescription2EXT & operator=( VertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VertexInputAttributeDescription2EXT & operator=( VkVertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT + { + location = location_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT + { + format = format_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT + { + offset = offset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVertexInputAttributeDescription2EXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputAttributeDescription2EXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputAttributeDescription2EXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVertexInputAttributeDescription2EXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, location, binding, format, offset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VertexInputAttributeDescription2EXT const & ) const = default; +#else + bool operator==( VertexInputAttributeDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( location == rhs.location ) && ( binding == rhs.binding ) && ( format == rhs.format ) && + ( offset == rhs.offset ); +# endif + } + + bool operator!=( VertexInputAttributeDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVertexInputAttributeDescription2EXT; + void * pNext = {}; + uint32_t location = {}; + uint32_t binding = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint32_t offset = {}; + }; + + template <> + struct CppType + { + using Type = VertexInputAttributeDescription2EXT; + }; + + // wrapper struct for struct VkVertexInputBindingDescription2EXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVertexInputBindingDescription2EXT.html + struct VertexInputBindingDescription2EXT + { + using NativeType = VkVertexInputBindingDescription2EXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVertexInputBindingDescription2EXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VertexInputBindingDescription2EXT( uint32_t binding_ = {}, + uint32_t stride_ = {}, + VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex, + uint32_t divisor_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , binding{ binding_ } + , stride{ stride_ } + , inputRate{ inputRate_ } + , divisor{ divisor_ } + { + } + + VULKAN_HPP_CONSTEXPR VertexInputBindingDescription2EXT( VertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VertexInputBindingDescription2EXT( VkVertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + : VertexInputBindingDescription2EXT( *reinterpret_cast( &rhs ) ) + { + } + + VertexInputBindingDescription2EXT & operator=( VertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VertexInputBindingDescription2EXT & operator=( VkVertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT + { + binding = binding_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT + { + stride = stride_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT + { + inputRate = inputRate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT + { + divisor = divisor_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVertexInputBindingDescription2EXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputBindingDescription2EXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVertexInputBindingDescription2EXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVertexInputBindingDescription2EXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, binding, stride, inputRate, divisor ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VertexInputBindingDescription2EXT const & ) const = default; +#else + bool operator==( VertexInputBindingDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( binding == rhs.binding ) && ( stride == rhs.stride ) && ( inputRate == rhs.inputRate ) && + ( divisor == rhs.divisor ); +# endif + } + + bool operator!=( VertexInputBindingDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVertexInputBindingDescription2EXT; + void * pNext = {}; + uint32_t binding = {}; + uint32_t stride = {}; + VULKAN_HPP_NAMESPACE::VertexInputRate inputRate = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex; + uint32_t divisor = {}; + }; + + template <> + struct CppType + { + using Type = VertexInputBindingDescription2EXT; + }; + +#if defined( VK_USE_PLATFORM_VI_NN ) + // wrapper struct for struct VkViSurfaceCreateInfoNN, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkViSurfaceCreateInfoNN.html + struct ViSurfaceCreateInfoNN + { + using NativeType = VkViSurfaceCreateInfoNN; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eViSurfaceCreateInfoNN; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + ViSurfaceCreateInfoNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ = {}, void * window_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , window{ window_ } + { + } + + VULKAN_HPP_CONSTEXPR ViSurfaceCreateInfoNN( ViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + ViSurfaceCreateInfoNN( VkViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT + : ViSurfaceCreateInfoNN( *reinterpret_cast( &rhs ) ) + { + } + + ViSurfaceCreateInfoNN & operator=( ViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + ViSurfaceCreateInfoNN & operator=( VkViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setFlags( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setWindow( void * window_ ) VULKAN_HPP_NOEXCEPT + { + window = window_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkViSurfaceCreateInfoNN const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViSurfaceCreateInfoNN &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkViSurfaceCreateInfoNN const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkViSurfaceCreateInfoNN *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, window ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( ViSurfaceCreateInfoNN const & ) const = default; +# else + bool operator==( ViSurfaceCreateInfoNN const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window ); +# endif + } + + bool operator!=( ViSurfaceCreateInfoNN const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eViSurfaceCreateInfoNN; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags = {}; + void * window = {}; + }; + + template <> + struct CppType + { + using Type = ViSurfaceCreateInfoNN; + }; +#endif /*VK_USE_PLATFORM_VI_NN*/ + + // wrapper struct for struct VkVideoPictureResourceInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoPictureResourceInfoKHR.html + struct VideoPictureResourceInfoKHR + { + using NativeType = VkVideoPictureResourceInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoPictureResourceInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoPictureResourceInfoKHR( VULKAN_HPP_NAMESPACE::Offset2D codedOffset_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D codedExtent_ = {}, + uint32_t baseArrayLayer_ = {}, + VULKAN_HPP_NAMESPACE::ImageView imageViewBinding_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , codedOffset{ codedOffset_ } + , codedExtent{ codedExtent_ } + , baseArrayLayer{ baseArrayLayer_ } + , imageViewBinding{ imageViewBinding_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoPictureResourceInfoKHR( VideoPictureResourceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoPictureResourceInfoKHR( VkVideoPictureResourceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoPictureResourceInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoPictureResourceInfoKHR & operator=( VideoPictureResourceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoPictureResourceInfoKHR & operator=( VkVideoPictureResourceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceInfoKHR & setCodedOffset( VULKAN_HPP_NAMESPACE::Offset2D const & codedOffset_ ) VULKAN_HPP_NOEXCEPT + { + codedOffset = codedOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceInfoKHR & setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT + { + codedExtent = codedExtent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceInfoKHR & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT + { + baseArrayLayer = baseArrayLayer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceInfoKHR & setImageViewBinding( VULKAN_HPP_NAMESPACE::ImageView imageViewBinding_ ) VULKAN_HPP_NOEXCEPT + { + imageViewBinding = imageViewBinding_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoPictureResourceInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoPictureResourceInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoPictureResourceInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoPictureResourceInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, codedOffset, codedExtent, baseArrayLayer, imageViewBinding ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoPictureResourceInfoKHR const & ) const = default; +#else + bool operator==( VideoPictureResourceInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( codedOffset == rhs.codedOffset ) && ( codedExtent == rhs.codedExtent ) && + ( baseArrayLayer == rhs.baseArrayLayer ) && ( imageViewBinding == rhs.imageViewBinding ); +# endif + } + + bool operator!=( VideoPictureResourceInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoPictureResourceInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Offset2D codedOffset = {}; + VULKAN_HPP_NAMESPACE::Extent2D codedExtent = {}; + uint32_t baseArrayLayer = {}; + VULKAN_HPP_NAMESPACE::ImageView imageViewBinding = {}; + }; + + template <> + struct CppType + { + using Type = VideoPictureResourceInfoKHR; + }; + + // wrapper struct for struct VkVideoReferenceSlotInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoReferenceSlotInfoKHR.html + struct VideoReferenceSlotInfoKHR + { + using NativeType = VkVideoReferenceSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoReferenceSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoReferenceSlotInfoKHR( int32_t slotIndex_ = {}, + const VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR * pPictureResource_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , slotIndex{ slotIndex_ } + , pPictureResource{ pPictureResource_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoReferenceSlotInfoKHR( VideoReferenceSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoReferenceSlotInfoKHR( VkVideoReferenceSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoReferenceSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoReferenceSlotInfoKHR & operator=( VideoReferenceSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoReferenceSlotInfoKHR & operator=( VkVideoReferenceSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotInfoKHR & setSlotIndex( int32_t slotIndex_ ) VULKAN_HPP_NOEXCEPT + { + slotIndex = slotIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotInfoKHR & + setPPictureResource( const VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR * pPictureResource_ ) VULKAN_HPP_NOEXCEPT + { + pPictureResource = pPictureResource_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoReferenceSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoReferenceSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoReferenceSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoReferenceSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, slotIndex, pPictureResource ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoReferenceSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoReferenceSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) && ( pPictureResource == rhs.pPictureResource ); +# endif + } + + bool operator!=( VideoReferenceSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoReferenceSlotInfoKHR; + const void * pNext = {}; + int32_t slotIndex = {}; + const VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR * pPictureResource = {}; + }; + + template <> + struct CppType + { + using Type = VideoReferenceSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoBeginCodingInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoBeginCodingInfoKHR.html + struct VideoBeginCodingInfoKHR + { + using NativeType = VkVideoBeginCodingInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBeginCodingInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoBeginCodingInfoKHR( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ = {}, + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ = {}, + uint32_t referenceSlotCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , videoSession{ videoSession_ } + , videoSessionParameters{ videoSessionParameters_ } + , referenceSlotCount{ referenceSlotCount_ } + , pReferenceSlots{ pReferenceSlots_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoBeginCodingInfoKHR( VideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoBeginCodingInfoKHR( VkVideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoBeginCodingInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoBeginCodingInfoKHR( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_, + VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_, + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , videoSession( videoSession_ ) + , videoSessionParameters( videoSessionParameters_ ) + , referenceSlotCount( static_cast( referenceSlots_.size() ) ) + , pReferenceSlots( referenceSlots_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoBeginCodingInfoKHR & operator=( VideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoBeginCodingInfoKHR & operator=( VkVideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT + { + videoSession = videoSession_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & + setVideoSessionParameters( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ ) VULKAN_HPP_NOEXCEPT + { + videoSessionParameters = videoSessionParameters_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT + { + referenceSlotCount = referenceSlotCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & + setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT + { + pReferenceSlots = pReferenceSlots_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoBeginCodingInfoKHR & setReferenceSlots( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_ ) VULKAN_HPP_NOEXCEPT + { + referenceSlotCount = static_cast( referenceSlots_.size() ); + pReferenceSlots = referenceSlots_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoBeginCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoBeginCodingInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoBeginCodingInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoBeginCodingInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, videoSession, videoSessionParameters, referenceSlotCount, pReferenceSlots ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoBeginCodingInfoKHR const & ) const = default; +#else + bool operator==( VideoBeginCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( videoSession == rhs.videoSession ) && + ( videoSessionParameters == rhs.videoSessionParameters ) && ( referenceSlotCount == rhs.referenceSlotCount ) && + ( pReferenceSlots == rhs.pReferenceSlots ); +# endif + } + + bool operator!=( VideoBeginCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoBeginCodingInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession = {}; + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters = {}; + uint32_t referenceSlotCount = {}; + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots = {}; + }; + + template <> + struct CppType + { + using Type = VideoBeginCodingInfoKHR; + }; + + // wrapper struct for struct VkVideoCapabilitiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCapabilitiesKHR.html + struct VideoCapabilitiesKHR + { + using NativeType = VkVideoCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 VideoCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferOffsetAlignment_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferSizeAlignment_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D pictureAccessGranularity_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minCodedExtent_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxCodedExtent_ = {}, + uint32_t maxDpbSlots_ = {}, + uint32_t maxActiveReferencePictures_ = {}, + VULKAN_HPP_NAMESPACE::ExtensionProperties stdHeaderVersion_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , minBitstreamBufferOffsetAlignment{ minBitstreamBufferOffsetAlignment_ } + , minBitstreamBufferSizeAlignment{ minBitstreamBufferSizeAlignment_ } + , pictureAccessGranularity{ pictureAccessGranularity_ } + , minCodedExtent{ minCodedExtent_ } + , maxCodedExtent{ maxCodedExtent_ } + , maxDpbSlots{ maxDpbSlots_ } + , maxActiveReferencePictures{ maxActiveReferencePictures_ } + , stdHeaderVersion{ stdHeaderVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 VideoCapabilitiesKHR( VideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoCapabilitiesKHR( VkVideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoCapabilitiesKHR & operator=( VideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoCapabilitiesKHR & operator=( VkVideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + minBitstreamBufferOffsetAlignment, + minBitstreamBufferSizeAlignment, + pictureAccessGranularity, + minCodedExtent, + maxCodedExtent, + maxDpbSlots, + maxActiveReferencePictures, + stdHeaderVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( minBitstreamBufferOffsetAlignment == rhs.minBitstreamBufferOffsetAlignment ) && + ( minBitstreamBufferSizeAlignment == rhs.minBitstreamBufferSizeAlignment ) && ( pictureAccessGranularity == rhs.pictureAccessGranularity ) && + ( minCodedExtent == rhs.minCodedExtent ) && ( maxCodedExtent == rhs.maxCodedExtent ) && ( maxDpbSlots == rhs.maxDpbSlots ) && + ( maxActiveReferencePictures == rhs.maxActiveReferencePictures ) && ( stdHeaderVersion == rhs.stdHeaderVersion ); +# endif + } + + bool operator!=( VideoCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferOffsetAlignment = {}; + VULKAN_HPP_NAMESPACE::DeviceSize minBitstreamBufferSizeAlignment = {}; + VULKAN_HPP_NAMESPACE::Extent2D pictureAccessGranularity = {}; + VULKAN_HPP_NAMESPACE::Extent2D minCodedExtent = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxCodedExtent = {}; + uint32_t maxDpbSlots = {}; + uint32_t maxActiveReferencePictures = {}; + VULKAN_HPP_NAMESPACE::ExtensionProperties stdHeaderVersion = {}; + }; + + template <> + struct CppType + { + using Type = VideoCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoCodingControlInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoCodingControlInfoKHR.html + struct VideoCodingControlInfoKHR + { + using NativeType = VkVideoCodingControlInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCodingControlInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoCodingControlInfoKHR( VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoCodingControlInfoKHR( VideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoCodingControlInfoKHR( VkVideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoCodingControlInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoCodingControlInfoKHR & operator=( VideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoCodingControlInfoKHR & operator=( VkVideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoCodingControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoCodingControlInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoCodingControlInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoCodingControlInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoCodingControlInfoKHR const & ) const = default; +#else + bool operator==( VideoCodingControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( VideoCodingControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoCodingControlInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags = {}; + }; + + template <> + struct CppType + { + using Type = VideoCodingControlInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeAV1CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeAV1CapabilitiesKHR.html + struct VideoDecodeAV1CapabilitiesKHR + { + using NativeType = VkVideoDecodeAV1CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeAv1CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeAV1CapabilitiesKHR( StdVideoAV1Level maxLevel_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxLevel{ maxLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeAV1CapabilitiesKHR( VideoDecodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeAV1CapabilitiesKHR( VkVideoDecodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeAV1CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeAV1CapabilitiesKHR & operator=( VideoDecodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeAV1CapabilitiesKHR & operator=( VkVideoDecodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoDecodeAV1CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeAV1CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoAV1Level ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeAV1CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoAV1Level ) ) == 0 ); + } + + bool operator!=( VideoDecodeAV1CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeAv1CapabilitiesKHR; + void * pNext = {}; + StdVideoAV1Level maxLevel = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeAV1CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoDecodeAV1DpbSlotInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeAV1DpbSlotInfoKHR.html + struct VideoDecodeAV1DpbSlotInfoKHR + { + using NativeType = VkVideoDecodeAV1DpbSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeAv1DpbSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeAV1DpbSlotInfoKHR( const StdVideoDecodeAV1ReferenceInfo * pStdReferenceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdReferenceInfo{ pStdReferenceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeAV1DpbSlotInfoKHR( VideoDecodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeAV1DpbSlotInfoKHR( VkVideoDecodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeAV1DpbSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeAV1DpbSlotInfoKHR & operator=( VideoDecodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeAV1DpbSlotInfoKHR & operator=( VkVideoDecodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1DpbSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1DpbSlotInfoKHR & setPStdReferenceInfo( const StdVideoDecodeAV1ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdReferenceInfo = pStdReferenceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeAV1DpbSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1DpbSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1DpbSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1DpbSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdReferenceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeAV1DpbSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeAV1DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); +# endif + } + + bool operator!=( VideoDecodeAV1DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeAv1DpbSlotInfoKHR; + const void * pNext = {}; + const StdVideoDecodeAV1ReferenceInfo * pStdReferenceInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeAV1DpbSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeAV1InlineSessionParametersInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeAV1InlineSessionParametersInfoKHR.html + struct VideoDecodeAV1InlineSessionParametersInfoKHR + { + using NativeType = VkVideoDecodeAV1InlineSessionParametersInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeAv1InlineSessionParametersInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeAV1InlineSessionParametersInfoKHR( const StdVideoAV1SequenceHeader * pStdSequenceHeader_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdSequenceHeader{ pStdSequenceHeader_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeAV1InlineSessionParametersInfoKHR( VideoDecodeAV1InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeAV1InlineSessionParametersInfoKHR( VkVideoDecodeAV1InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeAV1InlineSessionParametersInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeAV1InlineSessionParametersInfoKHR & operator=( VideoDecodeAV1InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeAV1InlineSessionParametersInfoKHR & operator=( VkVideoDecodeAV1InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1InlineSessionParametersInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1InlineSessionParametersInfoKHR & + setPStdSequenceHeader( const StdVideoAV1SequenceHeader * pStdSequenceHeader_ ) VULKAN_HPP_NOEXCEPT + { + pStdSequenceHeader = pStdSequenceHeader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeAV1InlineSessionParametersInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1InlineSessionParametersInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1InlineSessionParametersInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1InlineSessionParametersInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdSequenceHeader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeAV1InlineSessionParametersInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeAV1InlineSessionParametersInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdSequenceHeader == rhs.pStdSequenceHeader ); +# endif + } + + bool operator!=( VideoDecodeAV1InlineSessionParametersInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeAv1InlineSessionParametersInfoKHR; + const void * pNext = {}; + const StdVideoAV1SequenceHeader * pStdSequenceHeader = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeAV1InlineSessionParametersInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeAV1PictureInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeAV1PictureInfoKHR.html + struct VideoDecodeAV1PictureInfoKHR + { + using NativeType = VkVideoDecodeAV1PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeAv1PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR( const StdVideoDecodeAV1PictureInfo * pStdPictureInfo_ = {}, + std::array const & referenceNameSlotIndices_ = {}, + uint32_t frameHeaderOffset_ = {}, + uint32_t tileCount_ = {}, + const uint32_t * pTileOffsets_ = {}, + const uint32_t * pTileSizes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdPictureInfo{ pStdPictureInfo_ } + , referenceNameSlotIndices{ referenceNameSlotIndices_ } + , frameHeaderOffset{ frameHeaderOffset_ } + , tileCount{ tileCount_ } + , pTileOffsets{ pTileOffsets_ } + , pTileSizes{ pTileSizes_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR( VideoDecodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeAV1PictureInfoKHR( VkVideoDecodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeAV1PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeAV1PictureInfoKHR( const StdVideoDecodeAV1PictureInfo * pStdPictureInfo_, + std::array const & referenceNameSlotIndices_, + uint32_t frameHeaderOffset_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tileOffsets_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tileSizes_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , pStdPictureInfo( pStdPictureInfo_ ) + , referenceNameSlotIndices( referenceNameSlotIndices_ ) + , frameHeaderOffset( frameHeaderOffset_ ) + , tileCount( static_cast( tileOffsets_.size() ) ) + , pTileOffsets( tileOffsets_.data() ) + , pTileSizes( tileSizes_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( tileOffsets_.size() == tileSizes_.size() ); +# else + if ( tileOffsets_.size() != tileSizes_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::VideoDecodeAV1PictureInfoKHR::VideoDecodeAV1PictureInfoKHR: tileOffsets_.size() != tileSizes_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoDecodeAV1PictureInfoKHR & operator=( VideoDecodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeAV1PictureInfoKHR & operator=( VkVideoDecodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & setPStdPictureInfo( const StdVideoDecodeAV1PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & + setReferenceNameSlotIndices( std::array referenceNameSlotIndices_ ) VULKAN_HPP_NOEXCEPT + { + referenceNameSlotIndices = referenceNameSlotIndices_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & setFrameHeaderOffset( uint32_t frameHeaderOffset_ ) VULKAN_HPP_NOEXCEPT + { + frameHeaderOffset = frameHeaderOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & setTileCount( uint32_t tileCount_ ) VULKAN_HPP_NOEXCEPT + { + tileCount = tileCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & setPTileOffsets( const uint32_t * pTileOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pTileOffsets = pTileOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeAV1PictureInfoKHR & setTileOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tileOffsets_ ) VULKAN_HPP_NOEXCEPT + { + tileCount = static_cast( tileOffsets_.size() ); + pTileOffsets = tileOffsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1PictureInfoKHR & setPTileSizes( const uint32_t * pTileSizes_ ) VULKAN_HPP_NOEXCEPT + { + pTileSizes = pTileSizes_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeAV1PictureInfoKHR & setTileSizes( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tileSizes_ ) VULKAN_HPP_NOEXCEPT + { + tileCount = static_cast( tileSizes_.size() ); + pTileSizes = tileSizes_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeAV1PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + uint32_t const &, + const uint32_t * const &, + const uint32_t * const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdPictureInfo, referenceNameSlotIndices, frameHeaderOffset, tileCount, pTileOffsets, pTileSizes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeAV1PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeAV1PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && + ( referenceNameSlotIndices == rhs.referenceNameSlotIndices ) && ( frameHeaderOffset == rhs.frameHeaderOffset ) && ( tileCount == rhs.tileCount ) && + ( pTileOffsets == rhs.pTileOffsets ) && ( pTileSizes == rhs.pTileSizes ); +# endif + } + + bool operator!=( VideoDecodeAV1PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeAv1PictureInfoKHR; + const void * pNext = {}; + const StdVideoDecodeAV1PictureInfo * pStdPictureInfo = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D referenceNameSlotIndices = {}; + uint32_t frameHeaderOffset = {}; + uint32_t tileCount = {}; + const uint32_t * pTileOffsets = {}; + const uint32_t * pTileSizes = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeAV1PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeAV1ProfileInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeAV1ProfileInfoKHR.html + struct VideoDecodeAV1ProfileInfoKHR + { + using NativeType = VkVideoDecodeAV1ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeAv1ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeAV1ProfileInfoKHR( StdVideoAV1Profile stdProfile_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 filmGrainSupport_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfile{ stdProfile_ } + , filmGrainSupport{ filmGrainSupport_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeAV1ProfileInfoKHR( VideoDecodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeAV1ProfileInfoKHR( VkVideoDecodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeAV1ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeAV1ProfileInfoKHR & operator=( VideoDecodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeAV1ProfileInfoKHR & operator=( VkVideoDecodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1ProfileInfoKHR & setStdProfile( StdVideoAV1Profile stdProfile_ ) VULKAN_HPP_NOEXCEPT + { + stdProfile = stdProfile_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1ProfileInfoKHR & setFilmGrainSupport( VULKAN_HPP_NAMESPACE::Bool32 filmGrainSupport_ ) VULKAN_HPP_NOEXCEPT + { + filmGrainSupport = filmGrainSupport_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeAV1ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfile, filmGrainSupport ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeAV1ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfile, &rhs.stdProfile, sizeof( StdVideoAV1Profile ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = filmGrainSupport <=> rhs.filmGrainSupport; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeAV1ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfile, &rhs.stdProfile, sizeof( StdVideoAV1Profile ) ) == 0 ) && + ( filmGrainSupport == rhs.filmGrainSupport ); + } + + bool operator!=( VideoDecodeAV1ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeAv1ProfileInfoKHR; + const void * pNext = {}; + StdVideoAV1Profile stdProfile = {}; + VULKAN_HPP_NAMESPACE::Bool32 filmGrainSupport = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeAV1ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeAV1SessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeAV1SessionParametersCreateInfoKHR.html + struct VideoDecodeAV1SessionParametersCreateInfoKHR + { + using NativeType = VkVideoDecodeAV1SessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeAv1SessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeAV1SessionParametersCreateInfoKHR( const StdVideoAV1SequenceHeader * pStdSequenceHeader_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdSequenceHeader{ pStdSequenceHeader_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeAV1SessionParametersCreateInfoKHR( VideoDecodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeAV1SessionParametersCreateInfoKHR( VkVideoDecodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeAV1SessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeAV1SessionParametersCreateInfoKHR & operator=( VideoDecodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeAV1SessionParametersCreateInfoKHR & operator=( VkVideoDecodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1SessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeAV1SessionParametersCreateInfoKHR & + setPStdSequenceHeader( const StdVideoAV1SequenceHeader * pStdSequenceHeader_ ) VULKAN_HPP_NOEXCEPT + { + pStdSequenceHeader = pStdSequenceHeader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeAV1SessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1SessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1SessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeAV1SessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdSequenceHeader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeAV1SessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeAV1SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdSequenceHeader == rhs.pStdSequenceHeader ); +# endif + } + + bool operator!=( VideoDecodeAV1SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeAv1SessionParametersCreateInfoKHR; + const void * pNext = {}; + const StdVideoAV1SequenceHeader * pStdSequenceHeader = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeAV1SessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeCapabilitiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeCapabilitiesKHR.html + struct VideoDecodeCapabilitiesKHR + { + using NativeType = VkVideoDecodeCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoDecodeCapabilityFlagsKHR flags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeCapabilitiesKHR( VideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeCapabilitiesKHR( VkVideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeCapabilitiesKHR & operator=( VideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeCapabilitiesKHR & operator=( VkVideoDecodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoDecodeCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoDecodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( VideoDecodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoDecodeCapabilityFlagsKHR flags = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264CapabilitiesKHR.html + struct VideoDecodeH264CapabilitiesKHR + { + using NativeType = VkVideoDecodeH264CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH264CapabilitiesKHR( StdVideoH264LevelIdc maxLevelIdc_ = {}, + VULKAN_HPP_NAMESPACE::Offset2D fieldOffsetGranularity_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxLevelIdc{ maxLevelIdc_ } + , fieldOffsetGranularity{ fieldOffsetGranularity_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH264CapabilitiesKHR( VideoDecodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264CapabilitiesKHR( VkVideoDecodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH264CapabilitiesKHR & operator=( VideoDecodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264CapabilitiesKHR & operator=( VkVideoDecodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoDecodeH264CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxLevelIdc, fieldOffsetGranularity ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeH264CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH264LevelIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = fieldOffsetGranularity <=> rhs.fieldOffsetGranularity; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeH264CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH264LevelIdc ) ) == 0 ) && + ( fieldOffsetGranularity == rhs.fieldOffsetGranularity ); + } + + bool operator!=( VideoDecodeH264CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264CapabilitiesKHR; + void * pNext = {}; + StdVideoH264LevelIdc maxLevelIdc = {}; + VULKAN_HPP_NAMESPACE::Offset2D fieldOffsetGranularity = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264DpbSlotInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264DpbSlotInfoKHR.html + struct VideoDecodeH264DpbSlotInfoKHR + { + using NativeType = VkVideoDecodeH264DpbSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264DpbSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH264DpbSlotInfoKHR( const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdReferenceInfo{ pStdReferenceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH264DpbSlotInfoKHR( VideoDecodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264DpbSlotInfoKHR( VkVideoDecodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264DpbSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH264DpbSlotInfoKHR & operator=( VideoDecodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264DpbSlotInfoKHR & operator=( VkVideoDecodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoKHR & + setPStdReferenceInfo( const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdReferenceInfo = pStdReferenceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH264DpbSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264DpbSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264DpbSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264DpbSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdReferenceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH264DpbSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH264DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); +# endif + } + + bool operator!=( VideoDecodeH264DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264DpbSlotInfoKHR; + const void * pNext = {}; + const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264DpbSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264InlineSessionParametersInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264InlineSessionParametersInfoKHR.html + struct VideoDecodeH264InlineSessionParametersInfoKHR + { + using NativeType = VkVideoDecodeH264InlineSessionParametersInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264InlineSessionParametersInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH264InlineSessionParametersInfoKHR( const StdVideoH264SequenceParameterSet * pStdSPS_ = {}, + const StdVideoH264PictureParameterSet * pStdPPS_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdSPS{ pStdSPS_ } + , pStdPPS{ pStdPPS_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoDecodeH264InlineSessionParametersInfoKHR( VideoDecodeH264InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264InlineSessionParametersInfoKHR( VkVideoDecodeH264InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264InlineSessionParametersInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH264InlineSessionParametersInfoKHR & operator=( VideoDecodeH264InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264InlineSessionParametersInfoKHR & operator=( VkVideoDecodeH264InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264InlineSessionParametersInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264InlineSessionParametersInfoKHR & setPStdSPS( const StdVideoH264SequenceParameterSet * pStdSPS_ ) VULKAN_HPP_NOEXCEPT + { + pStdSPS = pStdSPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264InlineSessionParametersInfoKHR & setPStdPPS( const StdVideoH264PictureParameterSet * pStdPPS_ ) VULKAN_HPP_NOEXCEPT + { + pStdPPS = pStdPPS_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH264InlineSessionParametersInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264InlineSessionParametersInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264InlineSessionParametersInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264InlineSessionParametersInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdSPS, pStdPPS ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH264InlineSessionParametersInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH264InlineSessionParametersInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdSPS == rhs.pStdSPS ) && ( pStdPPS == rhs.pStdPPS ); +# endif + } + + bool operator!=( VideoDecodeH264InlineSessionParametersInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264InlineSessionParametersInfoKHR; + const void * pNext = {}; + const StdVideoH264SequenceParameterSet * pStdSPS = {}; + const StdVideoH264PictureParameterSet * pStdPPS = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264InlineSessionParametersInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264PictureInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264PictureInfoKHR.html + struct VideoDecodeH264PictureInfoKHR + { + using NativeType = VkVideoDecodeH264PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureInfoKHR( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_ = {}, + uint32_t sliceCount_ = {}, + const uint32_t * pSliceOffsets_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdPictureInfo{ pStdPictureInfo_ } + , sliceCount{ sliceCount_ } + , pSliceOffsets{ pSliceOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureInfoKHR( VideoDecodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264PictureInfoKHR( VkVideoDecodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH264PictureInfoKHR( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sliceOffsets_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), pStdPictureInfo( pStdPictureInfo_ ), sliceCount( static_cast( sliceOffsets_.size() ) ), pSliceOffsets( sliceOffsets_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoDecodeH264PictureInfoKHR & operator=( VideoDecodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264PictureInfoKHR & operator=( VkVideoDecodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoKHR & setPStdPictureInfo( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoKHR & setSliceCount( uint32_t sliceCount_ ) VULKAN_HPP_NOEXCEPT + { + sliceCount = sliceCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoKHR & setPSliceOffsets( const uint32_t * pSliceOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pSliceOffsets = pSliceOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH264PictureInfoKHR & setSliceOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sliceOffsets_ ) VULKAN_HPP_NOEXCEPT + { + sliceCount = static_cast( sliceOffsets_.size() ); + pSliceOffsets = sliceOffsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH264PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdPictureInfo, sliceCount, pSliceOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH264PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH264PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && ( sliceCount == rhs.sliceCount ) && + ( pSliceOffsets == rhs.pSliceOffsets ); +# endif + } + + bool operator!=( VideoDecodeH264PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264PictureInfoKHR; + const void * pNext = {}; + const StdVideoDecodeH264PictureInfo * pStdPictureInfo = {}; + uint32_t sliceCount = {}; + const uint32_t * pSliceOffsets = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264ProfileInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264ProfileInfoKHR.html + struct VideoDecodeH264ProfileInfoKHR + { + using NativeType = VkVideoDecodeH264ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH264ProfileInfoKHR( StdVideoH264ProfileIdc stdProfileIdc_ = {}, + VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout_ = + VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagBitsKHR::eProgressive, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfileIdc{ stdProfileIdc_ } + , pictureLayout{ pictureLayout_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH264ProfileInfoKHR( VideoDecodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264ProfileInfoKHR( VkVideoDecodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH264ProfileInfoKHR & operator=( VideoDecodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264ProfileInfoKHR & operator=( VkVideoDecodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileInfoKHR & setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT + { + stdProfileIdc = stdProfileIdc_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileInfoKHR & + setPictureLayout( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout_ ) VULKAN_HPP_NOEXCEPT + { + pictureLayout = pictureLayout_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH264ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfileIdc, pictureLayout ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeH264ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = pictureLayout <=> rhs.pictureLayout; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeH264ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ) == 0 ) && + ( pictureLayout == rhs.pictureLayout ); + } + + bool operator!=( VideoDecodeH264ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264ProfileInfoKHR; + const void * pNext = {}; + StdVideoH264ProfileIdc stdProfileIdc = {}; + VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout = VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagBitsKHR::eProgressive; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264SessionParametersAddInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264SessionParametersAddInfoKHR.html + struct VideoDecodeH264SessionParametersAddInfoKHR + { + using NativeType = VkVideoDecodeH264SessionParametersAddInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264SessionParametersAddInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH264SessionParametersAddInfoKHR( uint32_t stdSPSCount_ = {}, + const StdVideoH264SequenceParameterSet * pStdSPSs_ = {}, + uint32_t stdPPSCount_ = {}, + const StdVideoH264PictureParameterSet * pStdPPSs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdSPSCount{ stdSPSCount_ } + , pStdSPSs{ pStdSPSs_ } + , stdPPSCount{ stdPPSCount_ } + , pStdPPSs{ pStdPPSs_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH264SessionParametersAddInfoKHR( VideoDecodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264SessionParametersAddInfoKHR( VkVideoDecodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264SessionParametersAddInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH264SessionParametersAddInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stdSPSCount( static_cast( stdSPSs_.size() ) ) + , pStdSPSs( stdSPSs_.data() ) + , stdPPSCount( static_cast( stdPPSs_.size() ) ) + , pStdPPSs( stdPPSs_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoDecodeH264SessionParametersAddInfoKHR & operator=( VideoDecodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264SessionParametersAddInfoKHR & operator=( VkVideoDecodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoKHR & setStdSPSCount( uint32_t stdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = stdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoKHR & setPStdSPSs( const StdVideoH264SequenceParameterSet * pStdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdSPSs = pStdSPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH264SessionParametersAddInfoKHR & + setStdSPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = static_cast( stdSPSs_.size() ); + pStdSPSs = stdSPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoKHR & setStdPPSCount( uint32_t stdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = stdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoKHR & setPStdPPSs( const StdVideoH264PictureParameterSet * pStdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdPPSs = pStdPPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH264SessionParametersAddInfoKHR & + setStdPPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = static_cast( stdPPSs_.size() ); + pStdPPSs = stdPPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH264SessionParametersAddInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264SessionParametersAddInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264SessionParametersAddInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264SessionParametersAddInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdSPSCount, pStdSPSs, stdPPSCount, pStdPPSs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH264SessionParametersAddInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH264SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stdSPSCount == rhs.stdSPSCount ) && ( pStdSPSs == rhs.pStdSPSs ) && + ( stdPPSCount == rhs.stdPPSCount ) && ( pStdPPSs == rhs.pStdPPSs ); +# endif + } + + bool operator!=( VideoDecodeH264SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264SessionParametersAddInfoKHR; + const void * pNext = {}; + uint32_t stdSPSCount = {}; + const StdVideoH264SequenceParameterSet * pStdSPSs = {}; + uint32_t stdPPSCount = {}; + const StdVideoH264PictureParameterSet * pStdPPSs = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264SessionParametersAddInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH264SessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH264SessionParametersCreateInfoKHR.html + struct VideoDecodeH264SessionParametersCreateInfoKHR + { + using NativeType = VkVideoDecodeH264SessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264SessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoDecodeH264SessionParametersCreateInfoKHR( uint32_t maxStdSPSCount_ = {}, + uint32_t maxStdPPSCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoKHR * pParametersAddInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxStdSPSCount{ maxStdSPSCount_ } + , maxStdPPSCount{ maxStdPPSCount_ } + , pParametersAddInfo{ pParametersAddInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoDecodeH264SessionParametersCreateInfoKHR( VideoDecodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH264SessionParametersCreateInfoKHR( VkVideoDecodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH264SessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH264SessionParametersCreateInfoKHR & operator=( VideoDecodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH264SessionParametersCreateInfoKHR & operator=( VkVideoDecodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoKHR & setMaxStdSPSCount( uint32_t maxStdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdSPSCount = maxStdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoKHR & setMaxStdPPSCount( uint32_t maxStdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdPPSCount = maxStdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoKHR & + setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoKHR * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT + { + pParametersAddInfo = pParametersAddInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH264SessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264SessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH264SessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH264SessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxStdSPSCount, maxStdPPSCount, pParametersAddInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH264SessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH264SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxStdSPSCount == rhs.maxStdSPSCount ) && ( maxStdPPSCount == rhs.maxStdPPSCount ) && + ( pParametersAddInfo == rhs.pParametersAddInfo ); +# endif + } + + bool operator!=( VideoDecodeH264SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264SessionParametersCreateInfoKHR; + const void * pNext = {}; + uint32_t maxStdSPSCount = {}; + uint32_t maxStdPPSCount = {}; + const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoKHR * pParametersAddInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH264SessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265CapabilitiesKHR.html + struct VideoDecodeH265CapabilitiesKHR + { + using NativeType = VkVideoDecodeH265CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH265CapabilitiesKHR( StdVideoH265LevelIdc maxLevelIdc_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxLevelIdc{ maxLevelIdc_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH265CapabilitiesKHR( VideoDecodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265CapabilitiesKHR( VkVideoDecodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH265CapabilitiesKHR & operator=( VideoDecodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265CapabilitiesKHR & operator=( VkVideoDecodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoDecodeH265CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxLevelIdc ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeH265CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH265LevelIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeH265CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH265LevelIdc ) ) == 0 ); + } + + bool operator!=( VideoDecodeH265CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265CapabilitiesKHR; + void * pNext = {}; + StdVideoH265LevelIdc maxLevelIdc = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265DpbSlotInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265DpbSlotInfoKHR.html + struct VideoDecodeH265DpbSlotInfoKHR + { + using NativeType = VkVideoDecodeH265DpbSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265DpbSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH265DpbSlotInfoKHR( const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdReferenceInfo{ pStdReferenceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH265DpbSlotInfoKHR( VideoDecodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265DpbSlotInfoKHR( VkVideoDecodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265DpbSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH265DpbSlotInfoKHR & operator=( VideoDecodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265DpbSlotInfoKHR & operator=( VkVideoDecodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoKHR & + setPStdReferenceInfo( const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdReferenceInfo = pStdReferenceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH265DpbSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265DpbSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265DpbSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265DpbSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdReferenceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH265DpbSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH265DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); +# endif + } + + bool operator!=( VideoDecodeH265DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265DpbSlotInfoKHR; + const void * pNext = {}; + const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265DpbSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265InlineSessionParametersInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265InlineSessionParametersInfoKHR.html + struct VideoDecodeH265InlineSessionParametersInfoKHR + { + using NativeType = VkVideoDecodeH265InlineSessionParametersInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265InlineSessionParametersInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH265InlineSessionParametersInfoKHR( const StdVideoH265VideoParameterSet * pStdVPS_ = {}, + const StdVideoH265SequenceParameterSet * pStdSPS_ = {}, + const StdVideoH265PictureParameterSet * pStdPPS_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdVPS{ pStdVPS_ } + , pStdSPS{ pStdSPS_ } + , pStdPPS{ pStdPPS_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoDecodeH265InlineSessionParametersInfoKHR( VideoDecodeH265InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265InlineSessionParametersInfoKHR( VkVideoDecodeH265InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265InlineSessionParametersInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH265InlineSessionParametersInfoKHR & operator=( VideoDecodeH265InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265InlineSessionParametersInfoKHR & operator=( VkVideoDecodeH265InlineSessionParametersInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265InlineSessionParametersInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265InlineSessionParametersInfoKHR & setPStdVPS( const StdVideoH265VideoParameterSet * pStdVPS_ ) VULKAN_HPP_NOEXCEPT + { + pStdVPS = pStdVPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265InlineSessionParametersInfoKHR & setPStdSPS( const StdVideoH265SequenceParameterSet * pStdSPS_ ) VULKAN_HPP_NOEXCEPT + { + pStdSPS = pStdSPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265InlineSessionParametersInfoKHR & setPStdPPS( const StdVideoH265PictureParameterSet * pStdPPS_ ) VULKAN_HPP_NOEXCEPT + { + pStdPPS = pStdPPS_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH265InlineSessionParametersInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265InlineSessionParametersInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265InlineSessionParametersInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265InlineSessionParametersInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdVPS, pStdSPS, pStdPPS ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH265InlineSessionParametersInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH265InlineSessionParametersInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdVPS == rhs.pStdVPS ) && ( pStdSPS == rhs.pStdSPS ) && ( pStdPPS == rhs.pStdPPS ); +# endif + } + + bool operator!=( VideoDecodeH265InlineSessionParametersInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265InlineSessionParametersInfoKHR; + const void * pNext = {}; + const StdVideoH265VideoParameterSet * pStdVPS = {}; + const StdVideoH265SequenceParameterSet * pStdSPS = {}; + const StdVideoH265PictureParameterSet * pStdPPS = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265InlineSessionParametersInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265PictureInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265PictureInfoKHR.html + struct VideoDecodeH265PictureInfoKHR + { + using NativeType = VkVideoDecodeH265PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH265PictureInfoKHR( const StdVideoDecodeH265PictureInfo * pStdPictureInfo_ = {}, + uint32_t sliceSegmentCount_ = {}, + const uint32_t * pSliceSegmentOffsets_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdPictureInfo{ pStdPictureInfo_ } + , sliceSegmentCount{ sliceSegmentCount_ } + , pSliceSegmentOffsets{ pSliceSegmentOffsets_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH265PictureInfoKHR( VideoDecodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265PictureInfoKHR( VkVideoDecodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH265PictureInfoKHR( const StdVideoDecodeH265PictureInfo * pStdPictureInfo_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sliceSegmentOffsets_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , pStdPictureInfo( pStdPictureInfo_ ) + , sliceSegmentCount( static_cast( sliceSegmentOffsets_.size() ) ) + , pSliceSegmentOffsets( sliceSegmentOffsets_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoDecodeH265PictureInfoKHR & operator=( VideoDecodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265PictureInfoKHR & operator=( VkVideoDecodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoKHR & setPStdPictureInfo( const StdVideoDecodeH265PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoKHR & setSliceSegmentCount( uint32_t sliceSegmentCount_ ) VULKAN_HPP_NOEXCEPT + { + sliceSegmentCount = sliceSegmentCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoKHR & setPSliceSegmentOffsets( const uint32_t * pSliceSegmentOffsets_ ) VULKAN_HPP_NOEXCEPT + { + pSliceSegmentOffsets = pSliceSegmentOffsets_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH265PictureInfoKHR & + setSliceSegmentOffsets( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & sliceSegmentOffsets_ ) VULKAN_HPP_NOEXCEPT + { + sliceSegmentCount = static_cast( sliceSegmentOffsets_.size() ); + pSliceSegmentOffsets = sliceSegmentOffsets_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH265PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdPictureInfo, sliceSegmentCount, pSliceSegmentOffsets ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH265PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH265PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && ( sliceSegmentCount == rhs.sliceSegmentCount ) && + ( pSliceSegmentOffsets == rhs.pSliceSegmentOffsets ); +# endif + } + + bool operator!=( VideoDecodeH265PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265PictureInfoKHR; + const void * pNext = {}; + const StdVideoDecodeH265PictureInfo * pStdPictureInfo = {}; + uint32_t sliceSegmentCount = {}; + const uint32_t * pSliceSegmentOffsets = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265ProfileInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265ProfileInfoKHR.html + struct VideoDecodeH265ProfileInfoKHR + { + using NativeType = VkVideoDecodeH265ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH265ProfileInfoKHR( StdVideoH265ProfileIdc stdProfileIdc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfileIdc{ stdProfileIdc_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH265ProfileInfoKHR( VideoDecodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265ProfileInfoKHR( VkVideoDecodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH265ProfileInfoKHR & operator=( VideoDecodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265ProfileInfoKHR & operator=( VkVideoDecodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileInfoKHR & setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT + { + stdProfileIdc = stdProfileIdc_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH265ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfileIdc ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeH265ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeH265ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ) == 0 ); + } + + bool operator!=( VideoDecodeH265ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265ProfileInfoKHR; + const void * pNext = {}; + StdVideoH265ProfileIdc stdProfileIdc = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265SessionParametersAddInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265SessionParametersAddInfoKHR.html + struct VideoDecodeH265SessionParametersAddInfoKHR + { + using NativeType = VkVideoDecodeH265SessionParametersAddInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265SessionParametersAddInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeH265SessionParametersAddInfoKHR( uint32_t stdVPSCount_ = {}, + const StdVideoH265VideoParameterSet * pStdVPSs_ = {}, + uint32_t stdSPSCount_ = {}, + const StdVideoH265SequenceParameterSet * pStdSPSs_ = {}, + uint32_t stdPPSCount_ = {}, + const StdVideoH265PictureParameterSet * pStdPPSs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdVPSCount{ stdVPSCount_ } + , pStdVPSs{ pStdVPSs_ } + , stdSPSCount{ stdSPSCount_ } + , pStdSPSs{ pStdSPSs_ } + , stdPPSCount{ stdPPSCount_ } + , pStdPPSs{ pStdPPSs_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeH265SessionParametersAddInfoKHR( VideoDecodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265SessionParametersAddInfoKHR( VkVideoDecodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265SessionParametersAddInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH265SessionParametersAddInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdVPSs_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stdVPSCount( static_cast( stdVPSs_.size() ) ) + , pStdVPSs( stdVPSs_.data() ) + , stdSPSCount( static_cast( stdSPSs_.size() ) ) + , pStdSPSs( stdSPSs_.data() ) + , stdPPSCount( static_cast( stdPPSs_.size() ) ) + , pStdPPSs( stdPPSs_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoDecodeH265SessionParametersAddInfoKHR & operator=( VideoDecodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265SessionParametersAddInfoKHR & operator=( VkVideoDecodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setStdVPSCount( uint32_t stdVPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdVPSCount = stdVPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setPStdVPSs( const StdVideoH265VideoParameterSet * pStdVPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdVPSs = pStdVPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH265SessionParametersAddInfoKHR & + setStdVPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdVPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdVPSCount = static_cast( stdVPSs_.size() ); + pStdVPSs = stdVPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setStdSPSCount( uint32_t stdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = stdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setPStdSPSs( const StdVideoH265SequenceParameterSet * pStdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdSPSs = pStdSPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH265SessionParametersAddInfoKHR & + setStdSPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = static_cast( stdSPSs_.size() ); + pStdSPSs = stdSPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setStdPPSCount( uint32_t stdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = stdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoKHR & setPStdPPSs( const StdVideoH265PictureParameterSet * pStdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdPPSs = pStdPPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeH265SessionParametersAddInfoKHR & + setStdPPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = static_cast( stdPPSs_.size() ); + pStdPPSs = stdPPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH265SessionParametersAddInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265SessionParametersAddInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265SessionParametersAddInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265SessionParametersAddInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdVPSCount, pStdVPSs, stdSPSCount, pStdSPSs, stdPPSCount, pStdPPSs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH265SessionParametersAddInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH265SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stdVPSCount == rhs.stdVPSCount ) && ( pStdVPSs == rhs.pStdVPSs ) && + ( stdSPSCount == rhs.stdSPSCount ) && ( pStdSPSs == rhs.pStdSPSs ) && ( stdPPSCount == rhs.stdPPSCount ) && ( pStdPPSs == rhs.pStdPPSs ); +# endif + } + + bool operator!=( VideoDecodeH265SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265SessionParametersAddInfoKHR; + const void * pNext = {}; + uint32_t stdVPSCount = {}; + const StdVideoH265VideoParameterSet * pStdVPSs = {}; + uint32_t stdSPSCount = {}; + const StdVideoH265SequenceParameterSet * pStdSPSs = {}; + uint32_t stdPPSCount = {}; + const StdVideoH265PictureParameterSet * pStdPPSs = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265SessionParametersAddInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeH265SessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeH265SessionParametersCreateInfoKHR.html + struct VideoDecodeH265SessionParametersCreateInfoKHR + { + using NativeType = VkVideoDecodeH265SessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265SessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoDecodeH265SessionParametersCreateInfoKHR( uint32_t maxStdVPSCount_ = {}, + uint32_t maxStdSPSCount_ = {}, + uint32_t maxStdPPSCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoKHR * pParametersAddInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxStdVPSCount{ maxStdVPSCount_ } + , maxStdSPSCount{ maxStdSPSCount_ } + , maxStdPPSCount{ maxStdPPSCount_ } + , pParametersAddInfo{ pParametersAddInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoDecodeH265SessionParametersCreateInfoKHR( VideoDecodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeH265SessionParametersCreateInfoKHR( VkVideoDecodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeH265SessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeH265SessionParametersCreateInfoKHR & operator=( VideoDecodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeH265SessionParametersCreateInfoKHR & operator=( VkVideoDecodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoKHR & setMaxStdVPSCount( uint32_t maxStdVPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdVPSCount = maxStdVPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoKHR & setMaxStdSPSCount( uint32_t maxStdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdSPSCount = maxStdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoKHR & setMaxStdPPSCount( uint32_t maxStdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdPPSCount = maxStdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoKHR & + setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoKHR * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT + { + pParametersAddInfo = pParametersAddInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeH265SessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265SessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeH265SessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeH265SessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxStdVPSCount, maxStdSPSCount, maxStdPPSCount, pParametersAddInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeH265SessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeH265SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxStdVPSCount == rhs.maxStdVPSCount ) && ( maxStdSPSCount == rhs.maxStdSPSCount ) && + ( maxStdPPSCount == rhs.maxStdPPSCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo ); +# endif + } + + bool operator!=( VideoDecodeH265SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265SessionParametersCreateInfoKHR; + const void * pNext = {}; + uint32_t maxStdVPSCount = {}; + uint32_t maxStdSPSCount = {}; + uint32_t maxStdPPSCount = {}; + const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoKHR * pParametersAddInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeH265SessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeInfoKHR.html + struct VideoDecodeInfoKHR + { + using NativeType = VkVideoDecodeInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_ = {}, + VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR dstPictureResource_ = {}, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot_ = {}, + uint32_t referenceSlotCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , srcBuffer{ srcBuffer_ } + , srcBufferOffset{ srcBufferOffset_ } + , srcBufferRange{ srcBufferRange_ } + , dstPictureResource{ dstPictureResource_ } + , pSetupReferenceSlot{ pSetupReferenceSlot_ } + , referenceSlotCount{ referenceSlotCount_ } + , pReferenceSlots{ pReferenceSlots_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeInfoKHR( VideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeInfoKHR( VkVideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoDecodeInfoKHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_, + VULKAN_HPP_NAMESPACE::Buffer srcBuffer_, + VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_, + VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_, + VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR dstPictureResource_, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , srcBuffer( srcBuffer_ ) + , srcBufferOffset( srcBufferOffset_ ) + , srcBufferRange( srcBufferRange_ ) + , dstPictureResource( dstPictureResource_ ) + , pSetupReferenceSlot( pSetupReferenceSlot_ ) + , referenceSlotCount( static_cast( referenceSlots_.size() ) ) + , pReferenceSlots( referenceSlots_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoDecodeInfoKHR & operator=( VideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeInfoKHR & operator=( VkVideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT + { + srcBuffer = srcBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setSrcBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_ ) VULKAN_HPP_NOEXCEPT + { + srcBufferOffset = srcBufferOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setSrcBufferRange( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_ ) VULKAN_HPP_NOEXCEPT + { + srcBufferRange = srcBufferRange_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & + setDstPictureResource( VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR const & dstPictureResource_ ) VULKAN_HPP_NOEXCEPT + { + dstPictureResource = dstPictureResource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & + setPSetupReferenceSlot( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot_ ) VULKAN_HPP_NOEXCEPT + { + pSetupReferenceSlot = pSetupReferenceSlot_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT + { + referenceSlotCount = referenceSlotCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & + setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT + { + pReferenceSlots = pReferenceSlots_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoDecodeInfoKHR & setReferenceSlots( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_ ) VULKAN_HPP_NOEXCEPT + { + referenceSlotCount = static_cast( referenceSlots_.size() ); + pReferenceSlots = referenceSlots_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( + sType, pNext, flags, srcBuffer, srcBufferOffset, srcBufferRange, dstPictureResource, pSetupReferenceSlot, referenceSlotCount, pReferenceSlots ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( srcBuffer == rhs.srcBuffer ) && + ( srcBufferOffset == rhs.srcBufferOffset ) && ( srcBufferRange == rhs.srcBufferRange ) && ( dstPictureResource == rhs.dstPictureResource ) && + ( pSetupReferenceSlot == rhs.pSetupReferenceSlot ) && ( referenceSlotCount == rhs.referenceSlotCount ) && + ( pReferenceSlots == rhs.pReferenceSlots ); +# endif + } + + bool operator!=( VideoDecodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange = {}; + VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR dstPictureResource = {}; + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot = {}; + uint32_t referenceSlotCount = {}; + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeUsageInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeUsageInfoKHR.html + struct VideoDecodeUsageInfoKHR + { + using NativeType = VkVideoDecodeUsageInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeUsageInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeUsageInfoKHR( VULKAN_HPP_NAMESPACE::VideoDecodeUsageFlagsKHR videoUsageHints_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoUsageHints{ videoUsageHints_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeUsageInfoKHR( VideoDecodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeUsageInfoKHR( VkVideoDecodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeUsageInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeUsageInfoKHR & operator=( VideoDecodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeUsageInfoKHR & operator=( VkVideoDecodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeUsageInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeUsageInfoKHR & setVideoUsageHints( VULKAN_HPP_NAMESPACE::VideoDecodeUsageFlagsKHR videoUsageHints_ ) VULKAN_HPP_NOEXCEPT + { + videoUsageHints = videoUsageHints_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeUsageInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeUsageInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeUsageInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeUsageInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoUsageHints ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeUsageInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeUsageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoUsageHints == rhs.videoUsageHints ); +# endif + } + + bool operator!=( VideoDecodeUsageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeUsageInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoDecodeUsageFlagsKHR videoUsageHints = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeUsageInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeVP9CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeVP9CapabilitiesKHR.html + struct VideoDecodeVP9CapabilitiesKHR + { + using NativeType = VkVideoDecodeVP9CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeVp9CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeVP9CapabilitiesKHR( StdVideoVP9Level maxLevel_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxLevel{ maxLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeVP9CapabilitiesKHR( VideoDecodeVP9CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeVP9CapabilitiesKHR( VkVideoDecodeVP9CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeVP9CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeVP9CapabilitiesKHR & operator=( VideoDecodeVP9CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeVP9CapabilitiesKHR & operator=( VkVideoDecodeVP9CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoDecodeVP9CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeVP9CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoVP9Level ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeVP9CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoVP9Level ) ) == 0 ); + } + + bool operator!=( VideoDecodeVP9CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeVp9CapabilitiesKHR; + void * pNext = {}; + StdVideoVP9Level maxLevel = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeVP9CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoDecodeVP9PictureInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeVP9PictureInfoKHR.html + struct VideoDecodeVP9PictureInfoKHR + { + using NativeType = VkVideoDecodeVP9PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeVp9PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR( const StdVideoDecodeVP9PictureInfo * pStdPictureInfo_ = {}, + std::array const & referenceNameSlotIndices_ = {}, + uint32_t uncompressedHeaderOffset_ = {}, + uint32_t compressedHeaderOffset_ = {}, + uint32_t tilesOffset_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdPictureInfo{ pStdPictureInfo_ } + , referenceNameSlotIndices{ referenceNameSlotIndices_ } + , uncompressedHeaderOffset{ uncompressedHeaderOffset_ } + , compressedHeaderOffset{ compressedHeaderOffset_ } + , tilesOffset{ tilesOffset_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR( VideoDecodeVP9PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeVP9PictureInfoKHR( VkVideoDecodeVP9PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeVP9PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeVP9PictureInfoKHR & operator=( VideoDecodeVP9PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeVP9PictureInfoKHR & operator=( VkVideoDecodeVP9PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR & setPStdPictureInfo( const StdVideoDecodeVP9PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR & + setReferenceNameSlotIndices( std::array referenceNameSlotIndices_ ) VULKAN_HPP_NOEXCEPT + { + referenceNameSlotIndices = referenceNameSlotIndices_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR & setUncompressedHeaderOffset( uint32_t uncompressedHeaderOffset_ ) VULKAN_HPP_NOEXCEPT + { + uncompressedHeaderOffset = uncompressedHeaderOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR & setCompressedHeaderOffset( uint32_t compressedHeaderOffset_ ) VULKAN_HPP_NOEXCEPT + { + compressedHeaderOffset = compressedHeaderOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9PictureInfoKHR & setTilesOffset( uint32_t tilesOffset_ ) VULKAN_HPP_NOEXCEPT + { + tilesOffset = tilesOffset_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeVP9PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + uint32_t const &, + uint32_t const &, + uint32_t const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdPictureInfo, referenceNameSlotIndices, uncompressedHeaderOffset, compressedHeaderOffset, tilesOffset ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoDecodeVP9PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoDecodeVP9PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && + ( referenceNameSlotIndices == rhs.referenceNameSlotIndices ) && ( uncompressedHeaderOffset == rhs.uncompressedHeaderOffset ) && + ( compressedHeaderOffset == rhs.compressedHeaderOffset ) && ( tilesOffset == rhs.tilesOffset ); +# endif + } + + bool operator!=( VideoDecodeVP9PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeVp9PictureInfoKHR; + const void * pNext = {}; + const StdVideoDecodeVP9PictureInfo * pStdPictureInfo = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D referenceNameSlotIndices = {}; + uint32_t uncompressedHeaderOffset = {}; + uint32_t compressedHeaderOffset = {}; + uint32_t tilesOffset = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeVP9PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoDecodeVP9ProfileInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoDecodeVP9ProfileInfoKHR.html + struct VideoDecodeVP9ProfileInfoKHR + { + using NativeType = VkVideoDecodeVP9ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeVp9ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoDecodeVP9ProfileInfoKHR( StdVideoVP9Profile stdProfile_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfile{ stdProfile_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoDecodeVP9ProfileInfoKHR( VideoDecodeVP9ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoDecodeVP9ProfileInfoKHR( VkVideoDecodeVP9ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoDecodeVP9ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoDecodeVP9ProfileInfoKHR & operator=( VideoDecodeVP9ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoDecodeVP9ProfileInfoKHR & operator=( VkVideoDecodeVP9ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoDecodeVP9ProfileInfoKHR & setStdProfile( StdVideoVP9Profile stdProfile_ ) VULKAN_HPP_NOEXCEPT + { + stdProfile = stdProfile_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoDecodeVP9ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoDecodeVP9ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfile ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoDecodeVP9ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfile, &rhs.stdProfile, sizeof( StdVideoVP9Profile ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoDecodeVP9ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfile, &rhs.stdProfile, sizeof( StdVideoVP9Profile ) ) == 0 ); + } + + bool operator!=( VideoDecodeVP9ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeVp9ProfileInfoKHR; + const void * pNext = {}; + StdVideoVP9Profile stdProfile = {}; + }; + + template <> + struct CppType + { + using Type = VideoDecodeVP9ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1CapabilitiesKHR.html + struct VideoEncodeAV1CapabilitiesKHR + { + using NativeType = VkVideoEncodeAV1CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1CapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilityFlagsKHR flags_ = {}, + StdVideoAV1Level maxLevel_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D codedPictureAlignment_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxTiles_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D minTileSize_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxTileSize_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes_ = {}, + uint32_t maxSingleReferenceCount_ = {}, + uint32_t singleReferenceNameMask_ = {}, + uint32_t maxUnidirectionalCompoundReferenceCount_ = {}, + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount_ = {}, + uint32_t unidirectionalCompoundReferenceNameMask_ = {}, + uint32_t maxBidirectionalCompoundReferenceCount_ = {}, + uint32_t maxBidirectionalCompoundGroup1ReferenceCount_ = {}, + uint32_t maxBidirectionalCompoundGroup2ReferenceCount_ = {}, + uint32_t bidirectionalCompoundReferenceNameMask_ = {}, + uint32_t maxTemporalLayerCount_ = {}, + uint32_t maxSpatialLayerCount_ = {}, + uint32_t maxOperatingPoints_ = {}, + uint32_t minQIndex_ = {}, + uint32_t maxQIndex_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersGopRemainingFrames_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 requiresGopRemainingFrames_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1StdFlagsKHR stdSyntaxFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , maxLevel{ maxLevel_ } + , codedPictureAlignment{ codedPictureAlignment_ } + , maxTiles{ maxTiles_ } + , minTileSize{ minTileSize_ } + , maxTileSize{ maxTileSize_ } + , superblockSizes{ superblockSizes_ } + , maxSingleReferenceCount{ maxSingleReferenceCount_ } + , singleReferenceNameMask{ singleReferenceNameMask_ } + , maxUnidirectionalCompoundReferenceCount{ maxUnidirectionalCompoundReferenceCount_ } + , maxUnidirectionalCompoundGroup1ReferenceCount{ maxUnidirectionalCompoundGroup1ReferenceCount_ } + , unidirectionalCompoundReferenceNameMask{ unidirectionalCompoundReferenceNameMask_ } + , maxBidirectionalCompoundReferenceCount{ maxBidirectionalCompoundReferenceCount_ } + , maxBidirectionalCompoundGroup1ReferenceCount{ maxBidirectionalCompoundGroup1ReferenceCount_ } + , maxBidirectionalCompoundGroup2ReferenceCount{ maxBidirectionalCompoundGroup2ReferenceCount_ } + , bidirectionalCompoundReferenceNameMask{ bidirectionalCompoundReferenceNameMask_ } + , maxTemporalLayerCount{ maxTemporalLayerCount_ } + , maxSpatialLayerCount{ maxSpatialLayerCount_ } + , maxOperatingPoints{ maxOperatingPoints_ } + , minQIndex{ minQIndex_ } + , maxQIndex{ maxQIndex_ } + , prefersGopRemainingFrames{ prefersGopRemainingFrames_ } + , requiresGopRemainingFrames{ requiresGopRemainingFrames_ } + , stdSyntaxFlags{ stdSyntaxFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1CapabilitiesKHR( VideoEncodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1CapabilitiesKHR( VkVideoEncodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1CapabilitiesKHR & operator=( VideoEncodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1CapabilitiesKHR & operator=( VkVideoEncodeAV1CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeAV1CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + maxLevel, + codedPictureAlignment, + maxTiles, + minTileSize, + maxTileSize, + superblockSizes, + maxSingleReferenceCount, + singleReferenceNameMask, + maxUnidirectionalCompoundReferenceCount, + maxUnidirectionalCompoundGroup1ReferenceCount, + unidirectionalCompoundReferenceNameMask, + maxBidirectionalCompoundReferenceCount, + maxBidirectionalCompoundGroup1ReferenceCount, + maxBidirectionalCompoundGroup2ReferenceCount, + bidirectionalCompoundReferenceNameMask, + maxTemporalLayerCount, + maxSpatialLayerCount, + maxOperatingPoints, + minQIndex, + maxQIndex, + prefersGopRemainingFrames, + requiresGopRemainingFrames, + stdSyntaxFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeAV1CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoAV1Level ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = codedPictureAlignment <=> rhs.codedPictureAlignment; cmp != 0 ) + return cmp; + if ( auto cmp = maxTiles <=> rhs.maxTiles; cmp != 0 ) + return cmp; + if ( auto cmp = minTileSize <=> rhs.minTileSize; cmp != 0 ) + return cmp; + if ( auto cmp = maxTileSize <=> rhs.maxTileSize; cmp != 0 ) + return cmp; + if ( auto cmp = superblockSizes <=> rhs.superblockSizes; cmp != 0 ) + return cmp; + if ( auto cmp = maxSingleReferenceCount <=> rhs.maxSingleReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = singleReferenceNameMask <=> rhs.singleReferenceNameMask; cmp != 0 ) + return cmp; + if ( auto cmp = maxUnidirectionalCompoundReferenceCount <=> rhs.maxUnidirectionalCompoundReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxUnidirectionalCompoundGroup1ReferenceCount <=> rhs.maxUnidirectionalCompoundGroup1ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = unidirectionalCompoundReferenceNameMask <=> rhs.unidirectionalCompoundReferenceNameMask; cmp != 0 ) + return cmp; + if ( auto cmp = maxBidirectionalCompoundReferenceCount <=> rhs.maxBidirectionalCompoundReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxBidirectionalCompoundGroup1ReferenceCount <=> rhs.maxBidirectionalCompoundGroup1ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxBidirectionalCompoundGroup2ReferenceCount <=> rhs.maxBidirectionalCompoundGroup2ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = bidirectionalCompoundReferenceNameMask <=> rhs.bidirectionalCompoundReferenceNameMask; cmp != 0 ) + return cmp; + if ( auto cmp = maxTemporalLayerCount <=> rhs.maxTemporalLayerCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxSpatialLayerCount <=> rhs.maxSpatialLayerCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxOperatingPoints <=> rhs.maxOperatingPoints; cmp != 0 ) + return cmp; + if ( auto cmp = minQIndex <=> rhs.minQIndex; cmp != 0 ) + return cmp; + if ( auto cmp = maxQIndex <=> rhs.maxQIndex; cmp != 0 ) + return cmp; + if ( auto cmp = prefersGopRemainingFrames <=> rhs.prefersGopRemainingFrames; cmp != 0 ) + return cmp; + if ( auto cmp = requiresGopRemainingFrames <=> rhs.requiresGopRemainingFrames; cmp != 0 ) + return cmp; + if ( auto cmp = stdSyntaxFlags <=> rhs.stdSyntaxFlags; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeAV1CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoAV1Level ) ) == 0 ) && ( codedPictureAlignment == rhs.codedPictureAlignment ) && + ( maxTiles == rhs.maxTiles ) && ( minTileSize == rhs.minTileSize ) && ( maxTileSize == rhs.maxTileSize ) && + ( superblockSizes == rhs.superblockSizes ) && ( maxSingleReferenceCount == rhs.maxSingleReferenceCount ) && + ( singleReferenceNameMask == rhs.singleReferenceNameMask ) && + ( maxUnidirectionalCompoundReferenceCount == rhs.maxUnidirectionalCompoundReferenceCount ) && + ( maxUnidirectionalCompoundGroup1ReferenceCount == rhs.maxUnidirectionalCompoundGroup1ReferenceCount ) && + ( unidirectionalCompoundReferenceNameMask == rhs.unidirectionalCompoundReferenceNameMask ) && + ( maxBidirectionalCompoundReferenceCount == rhs.maxBidirectionalCompoundReferenceCount ) && + ( maxBidirectionalCompoundGroup1ReferenceCount == rhs.maxBidirectionalCompoundGroup1ReferenceCount ) && + ( maxBidirectionalCompoundGroup2ReferenceCount == rhs.maxBidirectionalCompoundGroup2ReferenceCount ) && + ( bidirectionalCompoundReferenceNameMask == rhs.bidirectionalCompoundReferenceNameMask ) && + ( maxTemporalLayerCount == rhs.maxTemporalLayerCount ) && ( maxSpatialLayerCount == rhs.maxSpatialLayerCount ) && + ( maxOperatingPoints == rhs.maxOperatingPoints ) && ( minQIndex == rhs.minQIndex ) && ( maxQIndex == rhs.maxQIndex ) && + ( prefersGopRemainingFrames == rhs.prefersGopRemainingFrames ) && ( requiresGopRemainingFrames == rhs.requiresGopRemainingFrames ) && + ( stdSyntaxFlags == rhs.stdSyntaxFlags ); + } + + bool operator!=( VideoEncodeAV1CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1CapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1CapabilityFlagsKHR flags = {}; + StdVideoAV1Level maxLevel = {}; + VULKAN_HPP_NAMESPACE::Extent2D codedPictureAlignment = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxTiles = {}; + VULKAN_HPP_NAMESPACE::Extent2D minTileSize = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxTileSize = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes = {}; + uint32_t maxSingleReferenceCount = {}; + uint32_t singleReferenceNameMask = {}; + uint32_t maxUnidirectionalCompoundReferenceCount = {}; + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount = {}; + uint32_t unidirectionalCompoundReferenceNameMask = {}; + uint32_t maxBidirectionalCompoundReferenceCount = {}; + uint32_t maxBidirectionalCompoundGroup1ReferenceCount = {}; + uint32_t maxBidirectionalCompoundGroup2ReferenceCount = {}; + uint32_t bidirectionalCompoundReferenceNameMask = {}; + uint32_t maxTemporalLayerCount = {}; + uint32_t maxSpatialLayerCount = {}; + uint32_t maxOperatingPoints = {}; + uint32_t minQIndex = {}; + uint32_t maxQIndex = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersGopRemainingFrames = {}; + VULKAN_HPP_NAMESPACE::Bool32 requiresGopRemainingFrames = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1StdFlagsKHR stdSyntaxFlags = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1DpbSlotInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1DpbSlotInfoKHR.html + struct VideoEncodeAV1DpbSlotInfoKHR + { + using NativeType = VkVideoEncodeAV1DpbSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1DpbSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1DpbSlotInfoKHR( const StdVideoEncodeAV1ReferenceInfo * pStdReferenceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdReferenceInfo{ pStdReferenceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1DpbSlotInfoKHR( VideoEncodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1DpbSlotInfoKHR( VkVideoEncodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1DpbSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1DpbSlotInfoKHR & operator=( VideoEncodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1DpbSlotInfoKHR & operator=( VkVideoEncodeAV1DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1DpbSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1DpbSlotInfoKHR & setPStdReferenceInfo( const StdVideoEncodeAV1ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdReferenceInfo = pStdReferenceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1DpbSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1DpbSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1DpbSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1DpbSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdReferenceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1DpbSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); +# endif + } + + bool operator!=( VideoEncodeAV1DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1DpbSlotInfoKHR; + const void * pNext = {}; + const StdVideoEncodeAV1ReferenceInfo * pStdReferenceInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1DpbSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1FrameSizeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1FrameSizeKHR.html + struct VideoEncodeAV1FrameSizeKHR + { + using NativeType = VkVideoEncodeAV1FrameSizeKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeAV1FrameSizeKHR( uint32_t intraFrameSize_ = {}, uint32_t predictiveFrameSize_ = {}, uint32_t bipredictiveFrameSize_ = {} ) VULKAN_HPP_NOEXCEPT + : intraFrameSize{ intraFrameSize_ } + , predictiveFrameSize{ predictiveFrameSize_ } + , bipredictiveFrameSize{ bipredictiveFrameSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1FrameSizeKHR( VideoEncodeAV1FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1FrameSizeKHR( VkVideoEncodeAV1FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1FrameSizeKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1FrameSizeKHR & operator=( VideoEncodeAV1FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1FrameSizeKHR & operator=( VkVideoEncodeAV1FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1FrameSizeKHR & setIntraFrameSize( uint32_t intraFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + intraFrameSize = intraFrameSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1FrameSizeKHR & setPredictiveFrameSize( uint32_t predictiveFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + predictiveFrameSize = predictiveFrameSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1FrameSizeKHR & setBipredictiveFrameSize( uint32_t bipredictiveFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + bipredictiveFrameSize = bipredictiveFrameSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1FrameSizeKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1FrameSizeKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1FrameSizeKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1FrameSizeKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( intraFrameSize, predictiveFrameSize, bipredictiveFrameSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1FrameSizeKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1FrameSizeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( intraFrameSize == rhs.intraFrameSize ) && ( predictiveFrameSize == rhs.predictiveFrameSize ) && + ( bipredictiveFrameSize == rhs.bipredictiveFrameSize ); +# endif + } + + bool operator!=( VideoEncodeAV1FrameSizeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t intraFrameSize = {}; + uint32_t predictiveFrameSize = {}; + uint32_t bipredictiveFrameSize = {}; + }; + + // wrapper struct for struct VkVideoEncodeAV1GopRemainingFrameInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1GopRemainingFrameInfoKHR.html + struct VideoEncodeAV1GopRemainingFrameInfoKHR + { + using NativeType = VkVideoEncodeAV1GopRemainingFrameInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1GopRemainingFrameInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1GopRemainingFrameInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames_ = {}, + uint32_t gopRemainingIntra_ = {}, + uint32_t gopRemainingPredictive_ = {}, + uint32_t gopRemainingBipredictive_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useGopRemainingFrames{ useGopRemainingFrames_ } + , gopRemainingIntra{ gopRemainingIntra_ } + , gopRemainingPredictive{ gopRemainingPredictive_ } + , gopRemainingBipredictive{ gopRemainingBipredictive_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1GopRemainingFrameInfoKHR( VideoEncodeAV1GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1GopRemainingFrameInfoKHR( VkVideoEncodeAV1GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1GopRemainingFrameInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1GopRemainingFrameInfoKHR & operator=( VideoEncodeAV1GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1GopRemainingFrameInfoKHR & operator=( VkVideoEncodeAV1GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1GopRemainingFrameInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1GopRemainingFrameInfoKHR & + setUseGopRemainingFrames( VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames_ ) VULKAN_HPP_NOEXCEPT + { + useGopRemainingFrames = useGopRemainingFrames_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1GopRemainingFrameInfoKHR & setGopRemainingIntra( uint32_t gopRemainingIntra_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingIntra = gopRemainingIntra_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1GopRemainingFrameInfoKHR & setGopRemainingPredictive( uint32_t gopRemainingPredictive_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingPredictive = gopRemainingPredictive_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1GopRemainingFrameInfoKHR & setGopRemainingBipredictive( uint32_t gopRemainingBipredictive_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingBipredictive = gopRemainingBipredictive_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1GopRemainingFrameInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1GopRemainingFrameInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1GopRemainingFrameInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1GopRemainingFrameInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useGopRemainingFrames, gopRemainingIntra, gopRemainingPredictive, gopRemainingBipredictive ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1GopRemainingFrameInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1GopRemainingFrameInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useGopRemainingFrames == rhs.useGopRemainingFrames ) && + ( gopRemainingIntra == rhs.gopRemainingIntra ) && ( gopRemainingPredictive == rhs.gopRemainingPredictive ) && + ( gopRemainingBipredictive == rhs.gopRemainingBipredictive ); +# endif + } + + bool operator!=( VideoEncodeAV1GopRemainingFrameInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1GopRemainingFrameInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames = {}; + uint32_t gopRemainingIntra = {}; + uint32_t gopRemainingPredictive = {}; + uint32_t gopRemainingBipredictive = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1GopRemainingFrameInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1PictureInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1PictureInfoKHR.html + struct VideoEncodeAV1PictureInfoKHR + { + using NativeType = VkVideoEncodeAV1PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR( + VULKAN_HPP_NAMESPACE::VideoEncodeAV1PredictionModeKHR predictionMode_ = VULKAN_HPP_NAMESPACE::VideoEncodeAV1PredictionModeKHR::eIntraOnly, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlGroupKHR rateControlGroup_ = VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlGroupKHR::eIntra, + uint32_t constantQIndex_ = {}, + const StdVideoEncodeAV1PictureInfo * pStdPictureInfo_ = {}, + std::array const & referenceNameSlotIndices_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 primaryReferenceCdfOnly_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 generateObuExtensionHeader_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , predictionMode{ predictionMode_ } + , rateControlGroup{ rateControlGroup_ } + , constantQIndex{ constantQIndex_ } + , pStdPictureInfo{ pStdPictureInfo_ } + , referenceNameSlotIndices{ referenceNameSlotIndices_ } + , primaryReferenceCdfOnly{ primaryReferenceCdfOnly_ } + , generateObuExtensionHeader{ generateObuExtensionHeader_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR( VideoEncodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1PictureInfoKHR( VkVideoEncodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1PictureInfoKHR & operator=( VideoEncodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1PictureInfoKHR & operator=( VkVideoEncodeAV1PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & + setPredictionMode( VULKAN_HPP_NAMESPACE::VideoEncodeAV1PredictionModeKHR predictionMode_ ) VULKAN_HPP_NOEXCEPT + { + predictionMode = predictionMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & + setRateControlGroup( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlGroupKHR rateControlGroup_ ) VULKAN_HPP_NOEXCEPT + { + rateControlGroup = rateControlGroup_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & setConstantQIndex( uint32_t constantQIndex_ ) VULKAN_HPP_NOEXCEPT + { + constantQIndex = constantQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & setPStdPictureInfo( const StdVideoEncodeAV1PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & + setReferenceNameSlotIndices( std::array referenceNameSlotIndices_ ) VULKAN_HPP_NOEXCEPT + { + referenceNameSlotIndices = referenceNameSlotIndices_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & + setPrimaryReferenceCdfOnly( VULKAN_HPP_NAMESPACE::Bool32 primaryReferenceCdfOnly_ ) VULKAN_HPP_NOEXCEPT + { + primaryReferenceCdfOnly = primaryReferenceCdfOnly_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1PictureInfoKHR & + setGenerateObuExtensionHeader( VULKAN_HPP_NAMESPACE::Bool32 generateObuExtensionHeader_ ) VULKAN_HPP_NOEXCEPT + { + generateObuExtensionHeader = generateObuExtensionHeader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple const &, + VULKAN_HPP_NAMESPACE::Bool32 const &, + VULKAN_HPP_NAMESPACE::Bool32 const &> +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + predictionMode, + rateControlGroup, + constantQIndex, + pStdPictureInfo, + referenceNameSlotIndices, + primaryReferenceCdfOnly, + generateObuExtensionHeader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( predictionMode == rhs.predictionMode ) && ( rateControlGroup == rhs.rateControlGroup ) && + ( constantQIndex == rhs.constantQIndex ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && + ( referenceNameSlotIndices == rhs.referenceNameSlotIndices ) && ( primaryReferenceCdfOnly == rhs.primaryReferenceCdfOnly ) && + ( generateObuExtensionHeader == rhs.generateObuExtensionHeader ); +# endif + } + + bool operator!=( VideoEncodeAV1PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1PictureInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1PredictionModeKHR predictionMode = VULKAN_HPP_NAMESPACE::VideoEncodeAV1PredictionModeKHR::eIntraOnly; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlGroupKHR rateControlGroup = VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlGroupKHR::eIntra; + uint32_t constantQIndex = {}; + const StdVideoEncodeAV1PictureInfo * pStdPictureInfo = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D referenceNameSlotIndices = {}; + VULKAN_HPP_NAMESPACE::Bool32 primaryReferenceCdfOnly = {}; + VULKAN_HPP_NAMESPACE::Bool32 generateObuExtensionHeader = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1ProfileInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1ProfileInfoKHR.html + struct VideoEncodeAV1ProfileInfoKHR + { + using NativeType = VkVideoEncodeAV1ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1ProfileInfoKHR( StdVideoAV1Profile stdProfile_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfile{ stdProfile_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1ProfileInfoKHR( VideoEncodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1ProfileInfoKHR( VkVideoEncodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1ProfileInfoKHR & operator=( VideoEncodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1ProfileInfoKHR & operator=( VkVideoEncodeAV1ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1ProfileInfoKHR & setStdProfile( StdVideoAV1Profile stdProfile_ ) VULKAN_HPP_NOEXCEPT + { + stdProfile = stdProfile_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfile ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeAV1ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfile, &rhs.stdProfile, sizeof( StdVideoAV1Profile ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeAV1ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfile, &rhs.stdProfile, sizeof( StdVideoAV1Profile ) ) == 0 ); + } + + bool operator!=( VideoEncodeAV1ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1ProfileInfoKHR; + const void * pNext = {}; + StdVideoAV1Profile stdProfile = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1QIndexKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1QIndexKHR.html + struct VideoEncodeAV1QIndexKHR + { + using NativeType = VkVideoEncodeAV1QIndexKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeAV1QIndexKHR( uint32_t intraQIndex_ = {}, uint32_t predictiveQIndex_ = {}, uint32_t bipredictiveQIndex_ = {} ) VULKAN_HPP_NOEXCEPT + : intraQIndex{ intraQIndex_ } + , predictiveQIndex{ predictiveQIndex_ } + , bipredictiveQIndex{ bipredictiveQIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1QIndexKHR( VideoEncodeAV1QIndexKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1QIndexKHR( VkVideoEncodeAV1QIndexKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1QIndexKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1QIndexKHR & operator=( VideoEncodeAV1QIndexKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1QIndexKHR & operator=( VkVideoEncodeAV1QIndexKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1QIndexKHR & setIntraQIndex( uint32_t intraQIndex_ ) VULKAN_HPP_NOEXCEPT + { + intraQIndex = intraQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1QIndexKHR & setPredictiveQIndex( uint32_t predictiveQIndex_ ) VULKAN_HPP_NOEXCEPT + { + predictiveQIndex = predictiveQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1QIndexKHR & setBipredictiveQIndex( uint32_t bipredictiveQIndex_ ) VULKAN_HPP_NOEXCEPT + { + bipredictiveQIndex = bipredictiveQIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1QIndexKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QIndexKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QIndexKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QIndexKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( intraQIndex, predictiveQIndex, bipredictiveQIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1QIndexKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1QIndexKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( intraQIndex == rhs.intraQIndex ) && ( predictiveQIndex == rhs.predictiveQIndex ) && ( bipredictiveQIndex == rhs.bipredictiveQIndex ); +# endif + } + + bool operator!=( VideoEncodeAV1QIndexKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t intraQIndex = {}; + uint32_t predictiveQIndex = {}; + uint32_t bipredictiveQIndex = {}; + }; + + // wrapper struct for struct VkVideoEncodeAV1QualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1QualityLevelPropertiesKHR.html + struct VideoEncodeAV1QualityLevelPropertiesKHR + { + using NativeType = VkVideoEncodeAV1QualityLevelPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1QualityLevelPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1QualityLevelPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags_ = {}, + uint32_t preferredGopFrameCount_ = {}, + uint32_t preferredKeyFramePeriod_ = {}, + uint32_t preferredConsecutiveBipredictiveFrameCount_ = {}, + uint32_t preferredTemporalLayerCount_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR preferredConstantQIndex_ = {}, + uint32_t preferredMaxSingleReferenceCount_ = {}, + uint32_t preferredSingleReferenceNameMask_ = {}, + uint32_t preferredMaxUnidirectionalCompoundReferenceCount_ = {}, + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount_ = {}, + uint32_t preferredUnidirectionalCompoundReferenceNameMask_ = {}, + uint32_t preferredMaxBidirectionalCompoundReferenceCount_ = {}, + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount_ = {}, + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount_ = {}, + uint32_t preferredBidirectionalCompoundReferenceNameMask_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , preferredRateControlFlags{ preferredRateControlFlags_ } + , preferredGopFrameCount{ preferredGopFrameCount_ } + , preferredKeyFramePeriod{ preferredKeyFramePeriod_ } + , preferredConsecutiveBipredictiveFrameCount{ preferredConsecutiveBipredictiveFrameCount_ } + , preferredTemporalLayerCount{ preferredTemporalLayerCount_ } + , preferredConstantQIndex{ preferredConstantQIndex_ } + , preferredMaxSingleReferenceCount{ preferredMaxSingleReferenceCount_ } + , preferredSingleReferenceNameMask{ preferredSingleReferenceNameMask_ } + , preferredMaxUnidirectionalCompoundReferenceCount{ preferredMaxUnidirectionalCompoundReferenceCount_ } + , preferredMaxUnidirectionalCompoundGroup1ReferenceCount{ preferredMaxUnidirectionalCompoundGroup1ReferenceCount_ } + , preferredUnidirectionalCompoundReferenceNameMask{ preferredUnidirectionalCompoundReferenceNameMask_ } + , preferredMaxBidirectionalCompoundReferenceCount{ preferredMaxBidirectionalCompoundReferenceCount_ } + , preferredMaxBidirectionalCompoundGroup1ReferenceCount{ preferredMaxBidirectionalCompoundGroup1ReferenceCount_ } + , preferredMaxBidirectionalCompoundGroup2ReferenceCount{ preferredMaxBidirectionalCompoundGroup2ReferenceCount_ } + , preferredBidirectionalCompoundReferenceNameMask{ preferredBidirectionalCompoundReferenceNameMask_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1QualityLevelPropertiesKHR( VideoEncodeAV1QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1QualityLevelPropertiesKHR( VkVideoEncodeAV1QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1QualityLevelPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1QualityLevelPropertiesKHR & operator=( VideoEncodeAV1QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1QualityLevelPropertiesKHR & operator=( VkVideoEncodeAV1QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeAV1QualityLevelPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QualityLevelPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QualityLevelPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QualityLevelPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + preferredRateControlFlags, + preferredGopFrameCount, + preferredKeyFramePeriod, + preferredConsecutiveBipredictiveFrameCount, + preferredTemporalLayerCount, + preferredConstantQIndex, + preferredMaxSingleReferenceCount, + preferredSingleReferenceNameMask, + preferredMaxUnidirectionalCompoundReferenceCount, + preferredMaxUnidirectionalCompoundGroup1ReferenceCount, + preferredUnidirectionalCompoundReferenceNameMask, + preferredMaxBidirectionalCompoundReferenceCount, + preferredMaxBidirectionalCompoundGroup1ReferenceCount, + preferredMaxBidirectionalCompoundGroup2ReferenceCount, + preferredBidirectionalCompoundReferenceNameMask ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1QualityLevelPropertiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1QualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( preferredRateControlFlags == rhs.preferredRateControlFlags ) && + ( preferredGopFrameCount == rhs.preferredGopFrameCount ) && ( preferredKeyFramePeriod == rhs.preferredKeyFramePeriod ) && + ( preferredConsecutiveBipredictiveFrameCount == rhs.preferredConsecutiveBipredictiveFrameCount ) && + ( preferredTemporalLayerCount == rhs.preferredTemporalLayerCount ) && ( preferredConstantQIndex == rhs.preferredConstantQIndex ) && + ( preferredMaxSingleReferenceCount == rhs.preferredMaxSingleReferenceCount ) && + ( preferredSingleReferenceNameMask == rhs.preferredSingleReferenceNameMask ) && + ( preferredMaxUnidirectionalCompoundReferenceCount == rhs.preferredMaxUnidirectionalCompoundReferenceCount ) && + ( preferredMaxUnidirectionalCompoundGroup1ReferenceCount == rhs.preferredMaxUnidirectionalCompoundGroup1ReferenceCount ) && + ( preferredUnidirectionalCompoundReferenceNameMask == rhs.preferredUnidirectionalCompoundReferenceNameMask ) && + ( preferredMaxBidirectionalCompoundReferenceCount == rhs.preferredMaxBidirectionalCompoundReferenceCount ) && + ( preferredMaxBidirectionalCompoundGroup1ReferenceCount == rhs.preferredMaxBidirectionalCompoundGroup1ReferenceCount ) && + ( preferredMaxBidirectionalCompoundGroup2ReferenceCount == rhs.preferredMaxBidirectionalCompoundGroup2ReferenceCount ) && + ( preferredBidirectionalCompoundReferenceNameMask == rhs.preferredBidirectionalCompoundReferenceNameMask ); +# endif + } + + bool operator!=( VideoEncodeAV1QualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1QualityLevelPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags = {}; + uint32_t preferredGopFrameCount = {}; + uint32_t preferredKeyFramePeriod = {}; + uint32_t preferredConsecutiveBipredictiveFrameCount = {}; + uint32_t preferredTemporalLayerCount = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR preferredConstantQIndex = {}; + uint32_t preferredMaxSingleReferenceCount = {}; + uint32_t preferredSingleReferenceNameMask = {}; + uint32_t preferredMaxUnidirectionalCompoundReferenceCount = {}; + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount = {}; + uint32_t preferredUnidirectionalCompoundReferenceNameMask = {}; + uint32_t preferredMaxBidirectionalCompoundReferenceCount = {}; + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount = {}; + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount = {}; + uint32_t preferredBidirectionalCompoundReferenceNameMask = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1QualityLevelPropertiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1QuantizationMapCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1QuantizationMapCapabilitiesKHR.html + struct VideoEncodeAV1QuantizationMapCapabilitiesKHR + { + using NativeType = VkVideoEncodeAV1QuantizationMapCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1QuantizationMapCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeAV1QuantizationMapCapabilitiesKHR( int32_t minQIndexDelta_ = {}, int32_t maxQIndexDelta_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minQIndexDelta{ minQIndexDelta_ } + , maxQIndexDelta{ maxQIndexDelta_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1QuantizationMapCapabilitiesKHR( VideoEncodeAV1QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1QuantizationMapCapabilitiesKHR( VkVideoEncodeAV1QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1QuantizationMapCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1QuantizationMapCapabilitiesKHR & operator=( VideoEncodeAV1QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1QuantizationMapCapabilitiesKHR & operator=( VkVideoEncodeAV1QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeAV1QuantizationMapCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QuantizationMapCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QuantizationMapCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1QuantizationMapCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minQIndexDelta, maxQIndexDelta ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1QuantizationMapCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1QuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minQIndexDelta == rhs.minQIndexDelta ) && ( maxQIndexDelta == rhs.maxQIndexDelta ); +# endif + } + + bool operator!=( VideoEncodeAV1QuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1QuantizationMapCapabilitiesKHR; + void * pNext = {}; + int32_t minQIndexDelta = {}; + int32_t maxQIndexDelta = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1QuantizationMapCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1RateControlInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1RateControlInfoKHR.html + struct VideoEncodeAV1RateControlInfoKHR + { + using NativeType = VkVideoEncodeAV1RateControlInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1RateControlInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1RateControlInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagsKHR flags_ = {}, + uint32_t gopFrameCount_ = {}, + uint32_t keyFramePeriod_ = {}, + uint32_t consecutiveBipredictiveFrameCount_ = {}, + uint32_t temporalLayerCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , gopFrameCount{ gopFrameCount_ } + , keyFramePeriod{ keyFramePeriod_ } + , consecutiveBipredictiveFrameCount{ consecutiveBipredictiveFrameCount_ } + , temporalLayerCount{ temporalLayerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1RateControlInfoKHR( VideoEncodeAV1RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1RateControlInfoKHR( VkVideoEncodeAV1RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1RateControlInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1RateControlInfoKHR & operator=( VideoEncodeAV1RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1RateControlInfoKHR & operator=( VkVideoEncodeAV1RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlInfoKHR & setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT + { + gopFrameCount = gopFrameCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlInfoKHR & setKeyFramePeriod( uint32_t keyFramePeriod_ ) VULKAN_HPP_NOEXCEPT + { + keyFramePeriod = keyFramePeriod_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlInfoKHR & + setConsecutiveBipredictiveFrameCount( uint32_t consecutiveBipredictiveFrameCount_ ) VULKAN_HPP_NOEXCEPT + { + consecutiveBipredictiveFrameCount = consecutiveBipredictiveFrameCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlInfoKHR & setTemporalLayerCount( uint32_t temporalLayerCount_ ) VULKAN_HPP_NOEXCEPT + { + temporalLayerCount = temporalLayerCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1RateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1RateControlInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1RateControlInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1RateControlInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, gopFrameCount, keyFramePeriod, consecutiveBipredictiveFrameCount, temporalLayerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1RateControlInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1RateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( gopFrameCount == rhs.gopFrameCount ) && + ( keyFramePeriod == rhs.keyFramePeriod ) && ( consecutiveBipredictiveFrameCount == rhs.consecutiveBipredictiveFrameCount ) && + ( temporalLayerCount == rhs.temporalLayerCount ); +# endif + } + + bool operator!=( VideoEncodeAV1RateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1RateControlInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1RateControlFlagsKHR flags = {}; + uint32_t gopFrameCount = {}; + uint32_t keyFramePeriod = {}; + uint32_t consecutiveBipredictiveFrameCount = {}; + uint32_t temporalLayerCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1RateControlInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1RateControlLayerInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1RateControlLayerInfoKHR.html + struct VideoEncodeAV1RateControlLayerInfoKHR + { + using NativeType = VkVideoEncodeAV1RateControlLayerInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1RateControlLayerInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1RateControlLayerInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useMinQIndex_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR minQIndex_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 useMaxQIndex_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR maxQIndex_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeAV1FrameSizeKHR maxFrameSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useMinQIndex{ useMinQIndex_ } + , minQIndex{ minQIndex_ } + , useMaxQIndex{ useMaxQIndex_ } + , maxQIndex{ maxQIndex_ } + , useMaxFrameSize{ useMaxFrameSize_ } + , maxFrameSize{ maxFrameSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1RateControlLayerInfoKHR( VideoEncodeAV1RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1RateControlLayerInfoKHR( VkVideoEncodeAV1RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1RateControlLayerInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1RateControlLayerInfoKHR & operator=( VideoEncodeAV1RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1RateControlLayerInfoKHR & operator=( VkVideoEncodeAV1RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & setUseMinQIndex( VULKAN_HPP_NAMESPACE::Bool32 useMinQIndex_ ) VULKAN_HPP_NOEXCEPT + { + useMinQIndex = useMinQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & + setMinQIndex( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR const & minQIndex_ ) VULKAN_HPP_NOEXCEPT + { + minQIndex = minQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & setUseMaxQIndex( VULKAN_HPP_NAMESPACE::Bool32 useMaxQIndex_ ) VULKAN_HPP_NOEXCEPT + { + useMaxQIndex = useMaxQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & + setMaxQIndex( VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR const & maxQIndex_ ) VULKAN_HPP_NOEXCEPT + { + maxQIndex = maxQIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + useMaxFrameSize = useMaxFrameSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1RateControlLayerInfoKHR & + setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeAV1FrameSizeKHR const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + maxFrameSize = maxFrameSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1RateControlLayerInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1RateControlLayerInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1RateControlLayerInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1RateControlLayerInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useMinQIndex, minQIndex, useMaxQIndex, maxQIndex, useMaxFrameSize, maxFrameSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1RateControlLayerInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1RateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useMinQIndex == rhs.useMinQIndex ) && ( minQIndex == rhs.minQIndex ) && + ( useMaxQIndex == rhs.useMaxQIndex ) && ( maxQIndex == rhs.maxQIndex ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) && + ( maxFrameSize == rhs.maxFrameSize ); +# endif + } + + bool operator!=( VideoEncodeAV1RateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1RateControlLayerInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMinQIndex = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR minQIndex = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxQIndex = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1QIndexKHR maxQIndex = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1FrameSizeKHR maxFrameSize = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1RateControlLayerInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1SessionCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1SessionCreateInfoKHR.html + struct VideoEncodeAV1SessionCreateInfoKHR + { + using NativeType = VkVideoEncodeAV1SessionCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1SessionCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1SessionCreateInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useMaxLevel_ = {}, + StdVideoAV1Level maxLevel_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useMaxLevel{ useMaxLevel_ } + , maxLevel{ maxLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1SessionCreateInfoKHR( VideoEncodeAV1SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1SessionCreateInfoKHR( VkVideoEncodeAV1SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1SessionCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeAV1SessionCreateInfoKHR & operator=( VideoEncodeAV1SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1SessionCreateInfoKHR & operator=( VkVideoEncodeAV1SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionCreateInfoKHR & setUseMaxLevel( VULKAN_HPP_NAMESPACE::Bool32 useMaxLevel_ ) VULKAN_HPP_NOEXCEPT + { + useMaxLevel = useMaxLevel_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionCreateInfoKHR & setMaxLevel( StdVideoAV1Level maxLevel_ ) VULKAN_HPP_NOEXCEPT + { + maxLevel = maxLevel_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1SessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1SessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1SessionCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1SessionCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useMaxLevel, maxLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeAV1SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = useMaxLevel <=> rhs.useMaxLevel; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoAV1Level ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeAV1SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useMaxLevel == rhs.useMaxLevel ) && + ( memcmp( &maxLevel, &rhs.maxLevel, sizeof( StdVideoAV1Level ) ) == 0 ); + } + + bool operator!=( VideoEncodeAV1SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1SessionCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxLevel = {}; + StdVideoAV1Level maxLevel = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1SessionCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeAV1SessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeAV1SessionParametersCreateInfoKHR.html + struct VideoEncodeAV1SessionParametersCreateInfoKHR + { + using NativeType = VkVideoEncodeAV1SessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeAv1SessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeAV1SessionParametersCreateInfoKHR( const StdVideoAV1SequenceHeader * pStdSequenceHeader_ = {}, + const StdVideoEncodeAV1DecoderModelInfo * pStdDecoderModelInfo_ = {}, + uint32_t stdOperatingPointCount_ = {}, + const StdVideoEncodeAV1OperatingPointInfo * pStdOperatingPoints_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdSequenceHeader{ pStdSequenceHeader_ } + , pStdDecoderModelInfo{ pStdDecoderModelInfo_ } + , stdOperatingPointCount{ stdOperatingPointCount_ } + , pStdOperatingPoints{ pStdOperatingPoints_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeAV1SessionParametersCreateInfoKHR( VideoEncodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeAV1SessionParametersCreateInfoKHR( VkVideoEncodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeAV1SessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeAV1SessionParametersCreateInfoKHR( + const StdVideoAV1SequenceHeader * pStdSequenceHeader_, + const StdVideoEncodeAV1DecoderModelInfo * pStdDecoderModelInfo_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdOperatingPoints_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , pStdSequenceHeader( pStdSequenceHeader_ ) + , pStdDecoderModelInfo( pStdDecoderModelInfo_ ) + , stdOperatingPointCount( static_cast( stdOperatingPoints_.size() ) ) + , pStdOperatingPoints( stdOperatingPoints_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeAV1SessionParametersCreateInfoKHR & operator=( VideoEncodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeAV1SessionParametersCreateInfoKHR & operator=( VkVideoEncodeAV1SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionParametersCreateInfoKHR & + setPStdSequenceHeader( const StdVideoAV1SequenceHeader * pStdSequenceHeader_ ) VULKAN_HPP_NOEXCEPT + { + pStdSequenceHeader = pStdSequenceHeader_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionParametersCreateInfoKHR & + setPStdDecoderModelInfo( const StdVideoEncodeAV1DecoderModelInfo * pStdDecoderModelInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdDecoderModelInfo = pStdDecoderModelInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionParametersCreateInfoKHR & setStdOperatingPointCount( uint32_t stdOperatingPointCount_ ) VULKAN_HPP_NOEXCEPT + { + stdOperatingPointCount = stdOperatingPointCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeAV1SessionParametersCreateInfoKHR & + setPStdOperatingPoints( const StdVideoEncodeAV1OperatingPointInfo * pStdOperatingPoints_ ) VULKAN_HPP_NOEXCEPT + { + pStdOperatingPoints = pStdOperatingPoints_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeAV1SessionParametersCreateInfoKHR & setStdOperatingPoints( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdOperatingPoints_ ) VULKAN_HPP_NOEXCEPT + { + stdOperatingPointCount = static_cast( stdOperatingPoints_.size() ); + pStdOperatingPoints = stdOperatingPoints_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeAV1SessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1SessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1SessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeAV1SessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdSequenceHeader, pStdDecoderModelInfo, stdOperatingPointCount, pStdOperatingPoints ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeAV1SessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeAV1SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdSequenceHeader == rhs.pStdSequenceHeader ) && + ( pStdDecoderModelInfo == rhs.pStdDecoderModelInfo ) && ( stdOperatingPointCount == rhs.stdOperatingPointCount ) && + ( pStdOperatingPoints == rhs.pStdOperatingPoints ); +# endif + } + + bool operator!=( VideoEncodeAV1SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeAv1SessionParametersCreateInfoKHR; + const void * pNext = {}; + const StdVideoAV1SequenceHeader * pStdSequenceHeader = {}; + const StdVideoEncodeAV1DecoderModelInfo * pStdDecoderModelInfo = {}; + uint32_t stdOperatingPointCount = {}; + const StdVideoEncodeAV1OperatingPointInfo * pStdOperatingPoints = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeAV1SessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeCapabilitiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeCapabilitiesKHR.html + struct VideoEncodeCapabilitiesKHR + { + using NativeType = VkVideoEncodeCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeCapabilityFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagsKHR rateControlModes_ = {}, + uint32_t maxRateControlLayers_ = {}, + uint64_t maxBitrate_ = {}, + uint32_t maxQualityLevels_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D encodeInputPictureGranularity_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , rateControlModes{ rateControlModes_ } + , maxRateControlLayers{ maxRateControlLayers_ } + , maxBitrate{ maxBitrate_ } + , maxQualityLevels{ maxQualityLevels_ } + , encodeInputPictureGranularity{ encodeInputPictureGranularity_ } + , supportedEncodeFeedbackFlags{ supportedEncodeFeedbackFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeCapabilitiesKHR( VideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeCapabilitiesKHR( VkVideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeCapabilitiesKHR & operator=( VideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeCapabilitiesKHR & operator=( VkVideoEncodeCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + rateControlModes, + maxRateControlLayers, + maxBitrate, + maxQualityLevels, + encodeInputPictureGranularity, + supportedEncodeFeedbackFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rateControlModes == rhs.rateControlModes ) && + ( maxRateControlLayers == rhs.maxRateControlLayers ) && ( maxBitrate == rhs.maxBitrate ) && ( maxQualityLevels == rhs.maxQualityLevels ) && + ( encodeInputPictureGranularity == rhs.encodeInputPictureGranularity ) && ( supportedEncodeFeedbackFlags == rhs.supportedEncodeFeedbackFlags ); +# endif + } + + bool operator!=( VideoEncodeCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeCapabilityFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagsKHR rateControlModes = {}; + uint32_t maxRateControlLayers = {}; + uint64_t maxBitrate = {}; + uint32_t maxQualityLevels = {}; + VULKAN_HPP_NAMESPACE::Extent2D encodeInputPictureGranularity = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264CapabilitiesKHR.html + struct VideoEncodeH264CapabilitiesKHR + { + using NativeType = VkVideoEncodeH264CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsKHR flags_ = {}, + StdVideoH264LevelIdc maxLevelIdc_ = {}, + uint32_t maxSliceCount_ = {}, + uint32_t maxPPictureL0ReferenceCount_ = {}, + uint32_t maxBPictureL0ReferenceCount_ = {}, + uint32_t maxL1ReferenceCount_ = {}, + uint32_t maxTemporalLayerCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 expectDyadicTemporalLayerPattern_ = {}, + int32_t minQp_ = {}, + int32_t maxQp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersGopRemainingFrames_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 requiresGopRemainingFrames_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH264StdFlagsKHR stdSyntaxFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , maxLevelIdc{ maxLevelIdc_ } + , maxSliceCount{ maxSliceCount_ } + , maxPPictureL0ReferenceCount{ maxPPictureL0ReferenceCount_ } + , maxBPictureL0ReferenceCount{ maxBPictureL0ReferenceCount_ } + , maxL1ReferenceCount{ maxL1ReferenceCount_ } + , maxTemporalLayerCount{ maxTemporalLayerCount_ } + , expectDyadicTemporalLayerPattern{ expectDyadicTemporalLayerPattern_ } + , minQp{ minQp_ } + , maxQp{ maxQp_ } + , prefersGopRemainingFrames{ prefersGopRemainingFrames_ } + , requiresGopRemainingFrames{ requiresGopRemainingFrames_ } + , stdSyntaxFlags{ stdSyntaxFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilitiesKHR( VideoEncodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264CapabilitiesKHR( VkVideoEncodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264CapabilitiesKHR & operator=( VideoEncodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264CapabilitiesKHR & operator=( VkVideoEncodeH264CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH264CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + maxLevelIdc, + maxSliceCount, + maxPPictureL0ReferenceCount, + maxBPictureL0ReferenceCount, + maxL1ReferenceCount, + maxTemporalLayerCount, + expectDyadicTemporalLayerPattern, + minQp, + maxQp, + prefersGopRemainingFrames, + requiresGopRemainingFrames, + stdSyntaxFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeH264CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH264LevelIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = maxSliceCount <=> rhs.maxSliceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxPPictureL0ReferenceCount <=> rhs.maxPPictureL0ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxBPictureL0ReferenceCount <=> rhs.maxBPictureL0ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxL1ReferenceCount <=> rhs.maxL1ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxTemporalLayerCount <=> rhs.maxTemporalLayerCount; cmp != 0 ) + return cmp; + if ( auto cmp = expectDyadicTemporalLayerPattern <=> rhs.expectDyadicTemporalLayerPattern; cmp != 0 ) + return cmp; + if ( auto cmp = minQp <=> rhs.minQp; cmp != 0 ) + return cmp; + if ( auto cmp = maxQp <=> rhs.maxQp; cmp != 0 ) + return cmp; + if ( auto cmp = prefersGopRemainingFrames <=> rhs.prefersGopRemainingFrames; cmp != 0 ) + return cmp; + if ( auto cmp = requiresGopRemainingFrames <=> rhs.requiresGopRemainingFrames; cmp != 0 ) + return cmp; + if ( auto cmp = stdSyntaxFlags <=> rhs.stdSyntaxFlags; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeH264CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH264LevelIdc ) ) == 0 ) && ( maxSliceCount == rhs.maxSliceCount ) && + ( maxPPictureL0ReferenceCount == rhs.maxPPictureL0ReferenceCount ) && ( maxBPictureL0ReferenceCount == rhs.maxBPictureL0ReferenceCount ) && + ( maxL1ReferenceCount == rhs.maxL1ReferenceCount ) && ( maxTemporalLayerCount == rhs.maxTemporalLayerCount ) && + ( expectDyadicTemporalLayerPattern == rhs.expectDyadicTemporalLayerPattern ) && ( minQp == rhs.minQp ) && ( maxQp == rhs.maxQp ) && + ( prefersGopRemainingFrames == rhs.prefersGopRemainingFrames ) && ( requiresGopRemainingFrames == rhs.requiresGopRemainingFrames ) && + ( stdSyntaxFlags == rhs.stdSyntaxFlags ); + } + + bool operator!=( VideoEncodeH264CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264CapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsKHR flags = {}; + StdVideoH264LevelIdc maxLevelIdc = {}; + uint32_t maxSliceCount = {}; + uint32_t maxPPictureL0ReferenceCount = {}; + uint32_t maxBPictureL0ReferenceCount = {}; + uint32_t maxL1ReferenceCount = {}; + uint32_t maxTemporalLayerCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 expectDyadicTemporalLayerPattern = {}; + int32_t minQp = {}; + int32_t maxQp = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersGopRemainingFrames = {}; + VULKAN_HPP_NAMESPACE::Bool32 requiresGopRemainingFrames = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264StdFlagsKHR stdSyntaxFlags = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264DpbSlotInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264DpbSlotInfoKHR.html + struct VideoEncodeH264DpbSlotInfoKHR + { + using NativeType = VkVideoEncodeH264DpbSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264DpbSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264DpbSlotInfoKHR( const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdReferenceInfo{ pStdReferenceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264DpbSlotInfoKHR( VideoEncodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264DpbSlotInfoKHR( VkVideoEncodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264DpbSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264DpbSlotInfoKHR & operator=( VideoEncodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264DpbSlotInfoKHR & operator=( VkVideoEncodeH264DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoKHR & + setPStdReferenceInfo( const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdReferenceInfo = pStdReferenceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264DpbSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264DpbSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264DpbSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264DpbSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdReferenceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264DpbSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); +# endif + } + + bool operator!=( VideoEncodeH264DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264DpbSlotInfoKHR; + const void * pNext = {}; + const StdVideoEncodeH264ReferenceInfo * pStdReferenceInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264DpbSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264FrameSizeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264FrameSizeKHR.html + struct VideoEncodeH264FrameSizeKHR + { + using NativeType = VkVideoEncodeH264FrameSizeKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264FrameSizeKHR( uint32_t frameISize_ = {}, uint32_t framePSize_ = {}, uint32_t frameBSize_ = {} ) VULKAN_HPP_NOEXCEPT + : frameISize{ frameISize_ } + , framePSize{ framePSize_ } + , frameBSize{ frameBSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264FrameSizeKHR( VideoEncodeH264FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264FrameSizeKHR( VkVideoEncodeH264FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264FrameSizeKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264FrameSizeKHR & operator=( VideoEncodeH264FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264FrameSizeKHR & operator=( VkVideoEncodeH264FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeKHR & setFrameISize( uint32_t frameISize_ ) VULKAN_HPP_NOEXCEPT + { + frameISize = frameISize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeKHR & setFramePSize( uint32_t framePSize_ ) VULKAN_HPP_NOEXCEPT + { + framePSize = framePSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeKHR & setFrameBSize( uint32_t frameBSize_ ) VULKAN_HPP_NOEXCEPT + { + frameBSize = frameBSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264FrameSizeKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264FrameSizeKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264FrameSizeKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264FrameSizeKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( frameISize, framePSize, frameBSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264FrameSizeKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264FrameSizeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( frameISize == rhs.frameISize ) && ( framePSize == rhs.framePSize ) && ( frameBSize == rhs.frameBSize ); +# endif + } + + bool operator!=( VideoEncodeH264FrameSizeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t frameISize = {}; + uint32_t framePSize = {}; + uint32_t frameBSize = {}; + }; + + // wrapper struct for struct VkVideoEncodeH264GopRemainingFrameInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264GopRemainingFrameInfoKHR.html + struct VideoEncodeH264GopRemainingFrameInfoKHR + { + using NativeType = VkVideoEncodeH264GopRemainingFrameInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264GopRemainingFrameInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264GopRemainingFrameInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames_ = {}, + uint32_t gopRemainingI_ = {}, + uint32_t gopRemainingP_ = {}, + uint32_t gopRemainingB_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useGopRemainingFrames{ useGopRemainingFrames_ } + , gopRemainingI{ gopRemainingI_ } + , gopRemainingP{ gopRemainingP_ } + , gopRemainingB{ gopRemainingB_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264GopRemainingFrameInfoKHR( VideoEncodeH264GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264GopRemainingFrameInfoKHR( VkVideoEncodeH264GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264GopRemainingFrameInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264GopRemainingFrameInfoKHR & operator=( VideoEncodeH264GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264GopRemainingFrameInfoKHR & operator=( VkVideoEncodeH264GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264GopRemainingFrameInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264GopRemainingFrameInfoKHR & + setUseGopRemainingFrames( VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames_ ) VULKAN_HPP_NOEXCEPT + { + useGopRemainingFrames = useGopRemainingFrames_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264GopRemainingFrameInfoKHR & setGopRemainingI( uint32_t gopRemainingI_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingI = gopRemainingI_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264GopRemainingFrameInfoKHR & setGopRemainingP( uint32_t gopRemainingP_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingP = gopRemainingP_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264GopRemainingFrameInfoKHR & setGopRemainingB( uint32_t gopRemainingB_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingB = gopRemainingB_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264GopRemainingFrameInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264GopRemainingFrameInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264GopRemainingFrameInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264GopRemainingFrameInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useGopRemainingFrames, gopRemainingI, gopRemainingP, gopRemainingB ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264GopRemainingFrameInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264GopRemainingFrameInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useGopRemainingFrames == rhs.useGopRemainingFrames ) && + ( gopRemainingI == rhs.gopRemainingI ) && ( gopRemainingP == rhs.gopRemainingP ) && ( gopRemainingB == rhs.gopRemainingB ); +# endif + } + + bool operator!=( VideoEncodeH264GopRemainingFrameInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264GopRemainingFrameInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames = {}; + uint32_t gopRemainingI = {}; + uint32_t gopRemainingP = {}; + uint32_t gopRemainingB = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264GopRemainingFrameInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264NaluSliceInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264NaluSliceInfoKHR.html + struct VideoEncodeH264NaluSliceInfoKHR + { + using NativeType = VkVideoEncodeH264NaluSliceInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264NaluSliceInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264NaluSliceInfoKHR( int32_t constantQp_ = {}, + const StdVideoEncodeH264SliceHeader * pStdSliceHeader_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , constantQp{ constantQp_ } + , pStdSliceHeader{ pStdSliceHeader_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264NaluSliceInfoKHR( VideoEncodeH264NaluSliceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264NaluSliceInfoKHR( VkVideoEncodeH264NaluSliceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264NaluSliceInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264NaluSliceInfoKHR & operator=( VideoEncodeH264NaluSliceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264NaluSliceInfoKHR & operator=( VkVideoEncodeH264NaluSliceInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceInfoKHR & setConstantQp( int32_t constantQp_ ) VULKAN_HPP_NOEXCEPT + { + constantQp = constantQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceInfoKHR & setPStdSliceHeader( const StdVideoEncodeH264SliceHeader * pStdSliceHeader_ ) VULKAN_HPP_NOEXCEPT + { + pStdSliceHeader = pStdSliceHeader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264NaluSliceInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264NaluSliceInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264NaluSliceInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264NaluSliceInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, constantQp, pStdSliceHeader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264NaluSliceInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264NaluSliceInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( constantQp == rhs.constantQp ) && ( pStdSliceHeader == rhs.pStdSliceHeader ); +# endif + } + + bool operator!=( VideoEncodeH264NaluSliceInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264NaluSliceInfoKHR; + const void * pNext = {}; + int32_t constantQp = {}; + const StdVideoEncodeH264SliceHeader * pStdSliceHeader = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264NaluSliceInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264PictureInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264PictureInfoKHR.html + struct VideoEncodeH264PictureInfoKHR + { + using NativeType = VkVideoEncodeH264PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264PictureInfoKHR( uint32_t naluSliceEntryCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceInfoKHR * pNaluSliceEntries_ = {}, + const StdVideoEncodeH264PictureInfo * pStdPictureInfo_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 generatePrefixNalu_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , naluSliceEntryCount{ naluSliceEntryCount_ } + , pNaluSliceEntries{ pNaluSliceEntries_ } + , pStdPictureInfo{ pStdPictureInfo_ } + , generatePrefixNalu{ generatePrefixNalu_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264PictureInfoKHR( VideoEncodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264PictureInfoKHR( VkVideoEncodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH264PictureInfoKHR( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceEntries_, + const StdVideoEncodeH264PictureInfo * pStdPictureInfo_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 generatePrefixNalu_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , naluSliceEntryCount( static_cast( naluSliceEntries_.size() ) ) + , pNaluSliceEntries( naluSliceEntries_.data() ) + , pStdPictureInfo( pStdPictureInfo_ ) + , generatePrefixNalu( generatePrefixNalu_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeH264PictureInfoKHR & operator=( VideoEncodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264PictureInfoKHR & operator=( VkVideoEncodeH264PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264PictureInfoKHR & setNaluSliceEntryCount( uint32_t naluSliceEntryCount_ ) VULKAN_HPP_NOEXCEPT + { + naluSliceEntryCount = naluSliceEntryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264PictureInfoKHR & + setPNaluSliceEntries( const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceInfoKHR * pNaluSliceEntries_ ) VULKAN_HPP_NOEXCEPT + { + pNaluSliceEntries = pNaluSliceEntries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH264PictureInfoKHR & setNaluSliceEntries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceEntries_ ) VULKAN_HPP_NOEXCEPT + { + naluSliceEntryCount = static_cast( naluSliceEntries_.size() ); + pNaluSliceEntries = naluSliceEntries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264PictureInfoKHR & setPStdPictureInfo( const StdVideoEncodeH264PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264PictureInfoKHR & setGeneratePrefixNalu( VULKAN_HPP_NAMESPACE::Bool32 generatePrefixNalu_ ) VULKAN_HPP_NOEXCEPT + { + generatePrefixNalu = generatePrefixNalu_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, naluSliceEntryCount, pNaluSliceEntries, pStdPictureInfo, generatePrefixNalu ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( naluSliceEntryCount == rhs.naluSliceEntryCount ) && + ( pNaluSliceEntries == rhs.pNaluSliceEntries ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) && ( generatePrefixNalu == rhs.generatePrefixNalu ); +# endif + } + + bool operator!=( VideoEncodeH264PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264PictureInfoKHR; + const void * pNext = {}; + uint32_t naluSliceEntryCount = {}; + const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceInfoKHR * pNaluSliceEntries = {}; + const StdVideoEncodeH264PictureInfo * pStdPictureInfo = {}; + VULKAN_HPP_NAMESPACE::Bool32 generatePrefixNalu = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264ProfileInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264ProfileInfoKHR.html + struct VideoEncodeH264ProfileInfoKHR + { + using NativeType = VkVideoEncodeH264ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264ProfileInfoKHR( StdVideoH264ProfileIdc stdProfileIdc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfileIdc{ stdProfileIdc_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264ProfileInfoKHR( VideoEncodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264ProfileInfoKHR( VkVideoEncodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264ProfileInfoKHR & operator=( VideoEncodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264ProfileInfoKHR & operator=( VkVideoEncodeH264ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileInfoKHR & setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT + { + stdProfileIdc = stdProfileIdc_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfileIdc ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeH264ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeH264ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ) == 0 ); + } + + bool operator!=( VideoEncodeH264ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264ProfileInfoKHR; + const void * pNext = {}; + StdVideoH264ProfileIdc stdProfileIdc = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264QpKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264QpKHR.html + struct VideoEncodeH264QpKHR + { + using NativeType = VkVideoEncodeH264QpKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264QpKHR( int32_t qpI_ = {}, int32_t qpP_ = {}, int32_t qpB_ = {} ) VULKAN_HPP_NOEXCEPT + : qpI{ qpI_ } + , qpP{ qpP_ } + , qpB{ qpB_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264QpKHR( VideoEncodeH264QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264QpKHR( VkVideoEncodeH264QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264QpKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264QpKHR & operator=( VideoEncodeH264QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264QpKHR & operator=( VkVideoEncodeH264QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpKHR & setQpI( int32_t qpI_ ) VULKAN_HPP_NOEXCEPT + { + qpI = qpI_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpKHR & setQpP( int32_t qpP_ ) VULKAN_HPP_NOEXCEPT + { + qpP = qpP_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpKHR & setQpB( int32_t qpB_ ) VULKAN_HPP_NOEXCEPT + { + qpB = qpB_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264QpKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QpKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QpKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QpKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( qpI, qpP, qpB ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264QpKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264QpKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( qpI == rhs.qpI ) && ( qpP == rhs.qpP ) && ( qpB == rhs.qpB ); +# endif + } + + bool operator!=( VideoEncodeH264QpKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + int32_t qpI = {}; + int32_t qpP = {}; + int32_t qpB = {}; + }; + + // wrapper struct for struct VkVideoEncodeH264QualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264QualityLevelPropertiesKHR.html + struct VideoEncodeH264QualityLevelPropertiesKHR + { + using NativeType = VkVideoEncodeH264QualityLevelPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264QualityLevelPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264QualityLevelPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagsKHR preferredRateControlFlags_ = {}, + uint32_t preferredGopFrameCount_ = {}, + uint32_t preferredIdrPeriod_ = {}, + uint32_t preferredConsecutiveBFrameCount_ = {}, + uint32_t preferredTemporalLayerCount_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR preferredConstantQp_ = {}, + uint32_t preferredMaxL0ReferenceCount_ = {}, + uint32_t preferredMaxL1ReferenceCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 preferredStdEntropyCodingModeFlag_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , preferredRateControlFlags{ preferredRateControlFlags_ } + , preferredGopFrameCount{ preferredGopFrameCount_ } + , preferredIdrPeriod{ preferredIdrPeriod_ } + , preferredConsecutiveBFrameCount{ preferredConsecutiveBFrameCount_ } + , preferredTemporalLayerCount{ preferredTemporalLayerCount_ } + , preferredConstantQp{ preferredConstantQp_ } + , preferredMaxL0ReferenceCount{ preferredMaxL0ReferenceCount_ } + , preferredMaxL1ReferenceCount{ preferredMaxL1ReferenceCount_ } + , preferredStdEntropyCodingModeFlag{ preferredStdEntropyCodingModeFlag_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264QualityLevelPropertiesKHR( VideoEncodeH264QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264QualityLevelPropertiesKHR( VkVideoEncodeH264QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264QualityLevelPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264QualityLevelPropertiesKHR & operator=( VideoEncodeH264QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264QualityLevelPropertiesKHR & operator=( VkVideoEncodeH264QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH264QualityLevelPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QualityLevelPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QualityLevelPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QualityLevelPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + preferredRateControlFlags, + preferredGopFrameCount, + preferredIdrPeriod, + preferredConsecutiveBFrameCount, + preferredTemporalLayerCount, + preferredConstantQp, + preferredMaxL0ReferenceCount, + preferredMaxL1ReferenceCount, + preferredStdEntropyCodingModeFlag ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264QualityLevelPropertiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264QualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( preferredRateControlFlags == rhs.preferredRateControlFlags ) && + ( preferredGopFrameCount == rhs.preferredGopFrameCount ) && ( preferredIdrPeriod == rhs.preferredIdrPeriod ) && + ( preferredConsecutiveBFrameCount == rhs.preferredConsecutiveBFrameCount ) && ( preferredTemporalLayerCount == rhs.preferredTemporalLayerCount ) && + ( preferredConstantQp == rhs.preferredConstantQp ) && ( preferredMaxL0ReferenceCount == rhs.preferredMaxL0ReferenceCount ) && + ( preferredMaxL1ReferenceCount == rhs.preferredMaxL1ReferenceCount ) && + ( preferredStdEntropyCodingModeFlag == rhs.preferredStdEntropyCodingModeFlag ); +# endif + } + + bool operator!=( VideoEncodeH264QualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264QualityLevelPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagsKHR preferredRateControlFlags = {}; + uint32_t preferredGopFrameCount = {}; + uint32_t preferredIdrPeriod = {}; + uint32_t preferredConsecutiveBFrameCount = {}; + uint32_t preferredTemporalLayerCount = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR preferredConstantQp = {}; + uint32_t preferredMaxL0ReferenceCount = {}; + uint32_t preferredMaxL1ReferenceCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 preferredStdEntropyCodingModeFlag = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264QualityLevelPropertiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264QuantizationMapCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264QuantizationMapCapabilitiesKHR.html + struct VideoEncodeH264QuantizationMapCapabilitiesKHR + { + using NativeType = VkVideoEncodeH264QuantizationMapCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264QuantizationMapCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeH264QuantizationMapCapabilitiesKHR( int32_t minQpDelta_ = {}, int32_t maxQpDelta_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minQpDelta{ minQpDelta_ } + , maxQpDelta{ maxQpDelta_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoEncodeH264QuantizationMapCapabilitiesKHR( VideoEncodeH264QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264QuantizationMapCapabilitiesKHR( VkVideoEncodeH264QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264QuantizationMapCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264QuantizationMapCapabilitiesKHR & operator=( VideoEncodeH264QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264QuantizationMapCapabilitiesKHR & operator=( VkVideoEncodeH264QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH264QuantizationMapCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QuantizationMapCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QuantizationMapCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264QuantizationMapCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minQpDelta, maxQpDelta ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264QuantizationMapCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264QuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minQpDelta == rhs.minQpDelta ) && ( maxQpDelta == rhs.maxQpDelta ); +# endif + } + + bool operator!=( VideoEncodeH264QuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264QuantizationMapCapabilitiesKHR; + void * pNext = {}; + int32_t minQpDelta = {}; + int32_t maxQpDelta = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264QuantizationMapCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264RateControlInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264RateControlInfoKHR.html + struct VideoEncodeH264RateControlInfoKHR + { + using NativeType = VkVideoEncodeH264RateControlInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264RateControlInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagsKHR flags_ = {}, + uint32_t gopFrameCount_ = {}, + uint32_t idrPeriod_ = {}, + uint32_t consecutiveBFrameCount_ = {}, + uint32_t temporalLayerCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , gopFrameCount{ gopFrameCount_ } + , idrPeriod{ idrPeriod_ } + , consecutiveBFrameCount{ consecutiveBFrameCount_ } + , temporalLayerCount{ temporalLayerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlInfoKHR( VideoEncodeH264RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264RateControlInfoKHR( VkVideoEncodeH264RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264RateControlInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264RateControlInfoKHR & operator=( VideoEncodeH264RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264RateControlInfoKHR & operator=( VkVideoEncodeH264RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoKHR & setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT + { + gopFrameCount = gopFrameCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoKHR & setIdrPeriod( uint32_t idrPeriod_ ) VULKAN_HPP_NOEXCEPT + { + idrPeriod = idrPeriod_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoKHR & setConsecutiveBFrameCount( uint32_t consecutiveBFrameCount_ ) VULKAN_HPP_NOEXCEPT + { + consecutiveBFrameCount = consecutiveBFrameCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoKHR & setTemporalLayerCount( uint32_t temporalLayerCount_ ) VULKAN_HPP_NOEXCEPT + { + temporalLayerCount = temporalLayerCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264RateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264RateControlInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264RateControlInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264RateControlInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, gopFrameCount, idrPeriod, consecutiveBFrameCount, temporalLayerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264RateControlInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264RateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( gopFrameCount == rhs.gopFrameCount ) && + ( idrPeriod == rhs.idrPeriod ) && ( consecutiveBFrameCount == rhs.consecutiveBFrameCount ) && ( temporalLayerCount == rhs.temporalLayerCount ); +# endif + } + + bool operator!=( VideoEncodeH264RateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264RateControlInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlFlagsKHR flags = {}; + uint32_t gopFrameCount = {}; + uint32_t idrPeriod = {}; + uint32_t consecutiveBFrameCount = {}; + uint32_t temporalLayerCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264RateControlInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264RateControlLayerInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264RateControlLayerInfoKHR.html + struct VideoEncodeH264RateControlLayerInfoKHR + { + using NativeType = VkVideoEncodeH264RateControlLayerInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264RateControlLayerInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlLayerInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR minQp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR maxQp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeKHR maxFrameSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useMinQp{ useMinQp_ } + , minQp{ minQp_ } + , useMaxQp{ useMaxQp_ } + , maxQp{ maxQp_ } + , useMaxFrameSize{ useMaxFrameSize_ } + , maxFrameSize{ maxFrameSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlLayerInfoKHR( VideoEncodeH264RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264RateControlLayerInfoKHR( VkVideoEncodeH264RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264RateControlLayerInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264RateControlLayerInfoKHR & operator=( VideoEncodeH264RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264RateControlLayerInfoKHR & operator=( VkVideoEncodeH264RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & setUseMinQp( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ ) VULKAN_HPP_NOEXCEPT + { + useMinQp = useMinQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & setMinQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR const & minQp_ ) VULKAN_HPP_NOEXCEPT + { + minQp = minQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & setUseMaxQp( VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ ) VULKAN_HPP_NOEXCEPT + { + useMaxQp = useMaxQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & setMaxQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR const & maxQp_ ) VULKAN_HPP_NOEXCEPT + { + maxQp = maxQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + useMaxFrameSize = useMaxFrameSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoKHR & + setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeKHR const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + maxFrameSize = maxFrameSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264RateControlLayerInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264RateControlLayerInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264RateControlLayerInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264RateControlLayerInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useMinQp, minQp, useMaxQp, maxQp, useMaxFrameSize, maxFrameSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264RateControlLayerInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264RateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useMinQp == rhs.useMinQp ) && ( minQp == rhs.minQp ) && ( useMaxQp == rhs.useMaxQp ) && + ( maxQp == rhs.maxQp ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) && ( maxFrameSize == rhs.maxFrameSize ); +# endif + } + + bool operator!=( VideoEncodeH264RateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264RateControlLayerInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMinQp = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR minQp = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxQp = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264QpKHR maxQp = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeKHR maxFrameSize = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264RateControlLayerInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264SessionCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264SessionCreateInfoKHR.html + struct VideoEncodeH264SessionCreateInfoKHR + { + using NativeType = VkVideoEncodeH264SessionCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionCreateInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useMaxLevelIdc_ = {}, + StdVideoH264LevelIdc maxLevelIdc_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useMaxLevelIdc{ useMaxLevelIdc_ } + , maxLevelIdc{ maxLevelIdc_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionCreateInfoKHR( VideoEncodeH264SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264SessionCreateInfoKHR( VkVideoEncodeH264SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264SessionCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264SessionCreateInfoKHR & operator=( VideoEncodeH264SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264SessionCreateInfoKHR & operator=( VkVideoEncodeH264SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoKHR & setUseMaxLevelIdc( VULKAN_HPP_NAMESPACE::Bool32 useMaxLevelIdc_ ) VULKAN_HPP_NOEXCEPT + { + useMaxLevelIdc = useMaxLevelIdc_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoKHR & setMaxLevelIdc( StdVideoH264LevelIdc maxLevelIdc_ ) VULKAN_HPP_NOEXCEPT + { + maxLevelIdc = maxLevelIdc_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264SessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useMaxLevelIdc, maxLevelIdc ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeH264SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = useMaxLevelIdc <=> rhs.useMaxLevelIdc; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH264LevelIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeH264SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useMaxLevelIdc == rhs.useMaxLevelIdc ) && + ( memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH264LevelIdc ) ) == 0 ); + } + + bool operator!=( VideoEncodeH264SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxLevelIdc = {}; + StdVideoH264LevelIdc maxLevelIdc = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264SessionCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264SessionParametersAddInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264SessionParametersAddInfoKHR.html + struct VideoEncodeH264SessionParametersAddInfoKHR + { + using NativeType = VkVideoEncodeH264SessionParametersAddInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionParametersAddInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersAddInfoKHR( uint32_t stdSPSCount_ = {}, + const StdVideoH264SequenceParameterSet * pStdSPSs_ = {}, + uint32_t stdPPSCount_ = {}, + const StdVideoH264PictureParameterSet * pStdPPSs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdSPSCount{ stdSPSCount_ } + , pStdSPSs{ pStdSPSs_ } + , stdPPSCount{ stdPPSCount_ } + , pStdPPSs{ pStdPPSs_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersAddInfoKHR( VideoEncodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264SessionParametersAddInfoKHR( VkVideoEncodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264SessionParametersAddInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH264SessionParametersAddInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stdSPSCount( static_cast( stdSPSs_.size() ) ) + , pStdSPSs( stdSPSs_.data() ) + , stdPPSCount( static_cast( stdPPSs_.size() ) ) + , pStdPPSs( stdPPSs_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeH264SessionParametersAddInfoKHR & operator=( VideoEncodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264SessionParametersAddInfoKHR & operator=( VkVideoEncodeH264SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoKHR & setStdSPSCount( uint32_t stdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = stdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoKHR & setPStdSPSs( const StdVideoH264SequenceParameterSet * pStdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdSPSs = pStdSPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH264SessionParametersAddInfoKHR & + setStdSPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = static_cast( stdSPSs_.size() ); + pStdSPSs = stdSPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoKHR & setStdPPSCount( uint32_t stdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = stdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoKHR & setPStdPPSs( const StdVideoH264PictureParameterSet * pStdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdPPSs = pStdPPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH264SessionParametersAddInfoKHR & + setStdPPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = static_cast( stdPPSs_.size() ); + pStdPPSs = stdPPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264SessionParametersAddInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersAddInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersAddInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersAddInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdSPSCount, pStdSPSs, stdPPSCount, pStdPPSs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264SessionParametersAddInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stdSPSCount == rhs.stdSPSCount ) && ( pStdSPSs == rhs.pStdSPSs ) && + ( stdPPSCount == rhs.stdPPSCount ) && ( pStdPPSs == rhs.pStdPPSs ); +# endif + } + + bool operator!=( VideoEncodeH264SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionParametersAddInfoKHR; + const void * pNext = {}; + uint32_t stdSPSCount = {}; + const StdVideoH264SequenceParameterSet * pStdSPSs = {}; + uint32_t stdPPSCount = {}; + const StdVideoH264PictureParameterSet * pStdPPSs = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264SessionParametersAddInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264SessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264SessionParametersCreateInfoKHR.html + struct VideoEncodeH264SessionParametersCreateInfoKHR + { + using NativeType = VkVideoEncodeH264SessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeH264SessionParametersCreateInfoKHR( uint32_t maxStdSPSCount_ = {}, + uint32_t maxStdPPSCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoKHR * pParametersAddInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxStdSPSCount{ maxStdSPSCount_ } + , maxStdPPSCount{ maxStdPPSCount_ } + , pParametersAddInfo{ pParametersAddInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoEncodeH264SessionParametersCreateInfoKHR( VideoEncodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264SessionParametersCreateInfoKHR( VkVideoEncodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264SessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264SessionParametersCreateInfoKHR & operator=( VideoEncodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264SessionParametersCreateInfoKHR & operator=( VkVideoEncodeH264SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoKHR & setMaxStdSPSCount( uint32_t maxStdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdSPSCount = maxStdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoKHR & setMaxStdPPSCount( uint32_t maxStdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdPPSCount = maxStdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoKHR & + setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoKHR * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT + { + pParametersAddInfo = pParametersAddInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264SessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxStdSPSCount, maxStdPPSCount, pParametersAddInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264SessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxStdSPSCount == rhs.maxStdSPSCount ) && ( maxStdPPSCount == rhs.maxStdPPSCount ) && + ( pParametersAddInfo == rhs.pParametersAddInfo ); +# endif + } + + bool operator!=( VideoEncodeH264SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionParametersCreateInfoKHR; + const void * pNext = {}; + uint32_t maxStdSPSCount = {}; + uint32_t maxStdPPSCount = {}; + const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoKHR * pParametersAddInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264SessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264SessionParametersFeedbackInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264SessionParametersFeedbackInfoKHR.html + struct VideoEncodeH264SessionParametersFeedbackInfoKHR + { + using NativeType = VkVideoEncodeH264SessionParametersFeedbackInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionParametersFeedbackInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersFeedbackInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 hasStdSPSOverrides_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hasStdPPSOverrides_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hasStdSPSOverrides{ hasStdSPSOverrides_ } + , hasStdPPSOverrides{ hasStdPPSOverrides_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoEncodeH264SessionParametersFeedbackInfoKHR( VideoEncodeH264SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264SessionParametersFeedbackInfoKHR( VkVideoEncodeH264SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264SessionParametersFeedbackInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264SessionParametersFeedbackInfoKHR & operator=( VideoEncodeH264SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264SessionParametersFeedbackInfoKHR & operator=( VkVideoEncodeH264SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH264SessionParametersFeedbackInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersFeedbackInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersFeedbackInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersFeedbackInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hasStdSPSOverrides, hasStdPPSOverrides ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264SessionParametersFeedbackInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264SessionParametersFeedbackInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hasStdSPSOverrides == rhs.hasStdSPSOverrides ) && + ( hasStdPPSOverrides == rhs.hasStdPPSOverrides ); +# endif + } + + bool operator!=( VideoEncodeH264SessionParametersFeedbackInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionParametersFeedbackInfoKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasStdSPSOverrides = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasStdPPSOverrides = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264SessionParametersFeedbackInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH264SessionParametersGetInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH264SessionParametersGetInfoKHR.html + struct VideoEncodeH264SessionParametersGetInfoKHR + { + using NativeType = VkVideoEncodeH264SessionParametersGetInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264SessionParametersGetInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersGetInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 writeStdSPS_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 writeStdPPS_ = {}, + uint32_t stdSPSId_ = {}, + uint32_t stdPPSId_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , writeStdSPS{ writeStdSPS_ } + , writeStdPPS{ writeStdPPS_ } + , stdSPSId{ stdSPSId_ } + , stdPPSId{ stdPPSId_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH264SessionParametersGetInfoKHR( VideoEncodeH264SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH264SessionParametersGetInfoKHR( VkVideoEncodeH264SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH264SessionParametersGetInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH264SessionParametersGetInfoKHR & operator=( VideoEncodeH264SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH264SessionParametersGetInfoKHR & operator=( VkVideoEncodeH264SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersGetInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersGetInfoKHR & setWriteStdSPS( VULKAN_HPP_NAMESPACE::Bool32 writeStdSPS_ ) VULKAN_HPP_NOEXCEPT + { + writeStdSPS = writeStdSPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersGetInfoKHR & setWriteStdPPS( VULKAN_HPP_NAMESPACE::Bool32 writeStdPPS_ ) VULKAN_HPP_NOEXCEPT + { + writeStdPPS = writeStdPPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersGetInfoKHR & setStdSPSId( uint32_t stdSPSId_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSId = stdSPSId_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersGetInfoKHR & setStdPPSId( uint32_t stdPPSId_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSId = stdPPSId_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH264SessionParametersGetInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersGetInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersGetInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH264SessionParametersGetInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, writeStdSPS, writeStdPPS, stdSPSId, stdPPSId ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH264SessionParametersGetInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH264SessionParametersGetInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( writeStdSPS == rhs.writeStdSPS ) && ( writeStdPPS == rhs.writeStdPPS ) && + ( stdSPSId == rhs.stdSPSId ) && ( stdPPSId == rhs.stdPPSId ); +# endif + } + + bool operator!=( VideoEncodeH264SessionParametersGetInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264SessionParametersGetInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 writeStdSPS = {}; + VULKAN_HPP_NAMESPACE::Bool32 writeStdPPS = {}; + uint32_t stdSPSId = {}; + uint32_t stdPPSId = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH264SessionParametersGetInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265CapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265CapabilitiesKHR.html + struct VideoEncodeH265CapabilitiesKHR + { + using NativeType = VkVideoEncodeH265CapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265CapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsKHR flags_ = {}, + StdVideoH265LevelIdc maxLevelIdc_ = {}, + uint32_t maxSliceSegmentCount_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D maxTiles_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsKHR ctbSizes_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes_ = {}, + uint32_t maxPPictureL0ReferenceCount_ = {}, + uint32_t maxBPictureL0ReferenceCount_ = {}, + uint32_t maxL1ReferenceCount_ = {}, + uint32_t maxSubLayerCount_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 expectDyadicTemporalSubLayerPattern_ = {}, + int32_t minQp_ = {}, + int32_t maxQp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 prefersGopRemainingFrames_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 requiresGopRemainingFrames_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265StdFlagsKHR stdSyntaxFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , maxLevelIdc{ maxLevelIdc_ } + , maxSliceSegmentCount{ maxSliceSegmentCount_ } + , maxTiles{ maxTiles_ } + , ctbSizes{ ctbSizes_ } + , transformBlockSizes{ transformBlockSizes_ } + , maxPPictureL0ReferenceCount{ maxPPictureL0ReferenceCount_ } + , maxBPictureL0ReferenceCount{ maxBPictureL0ReferenceCount_ } + , maxL1ReferenceCount{ maxL1ReferenceCount_ } + , maxSubLayerCount{ maxSubLayerCount_ } + , expectDyadicTemporalSubLayerPattern{ expectDyadicTemporalSubLayerPattern_ } + , minQp{ minQp_ } + , maxQp{ maxQp_ } + , prefersGopRemainingFrames{ prefersGopRemainingFrames_ } + , requiresGopRemainingFrames{ requiresGopRemainingFrames_ } + , stdSyntaxFlags{ stdSyntaxFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265CapabilitiesKHR( VideoEncodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265CapabilitiesKHR( VkVideoEncodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265CapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265CapabilitiesKHR & operator=( VideoEncodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265CapabilitiesKHR & operator=( VkVideoEncodeH265CapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH265CapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265CapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265CapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265CapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + maxLevelIdc, + maxSliceSegmentCount, + maxTiles, + ctbSizes, + transformBlockSizes, + maxPPictureL0ReferenceCount, + maxBPictureL0ReferenceCount, + maxL1ReferenceCount, + maxSubLayerCount, + expectDyadicTemporalSubLayerPattern, + minQp, + maxQp, + prefersGopRemainingFrames, + requiresGopRemainingFrames, + stdSyntaxFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeH265CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH265LevelIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + if ( auto cmp = maxSliceSegmentCount <=> rhs.maxSliceSegmentCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxTiles <=> rhs.maxTiles; cmp != 0 ) + return cmp; + if ( auto cmp = ctbSizes <=> rhs.ctbSizes; cmp != 0 ) + return cmp; + if ( auto cmp = transformBlockSizes <=> rhs.transformBlockSizes; cmp != 0 ) + return cmp; + if ( auto cmp = maxPPictureL0ReferenceCount <=> rhs.maxPPictureL0ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxBPictureL0ReferenceCount <=> rhs.maxBPictureL0ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxL1ReferenceCount <=> rhs.maxL1ReferenceCount; cmp != 0 ) + return cmp; + if ( auto cmp = maxSubLayerCount <=> rhs.maxSubLayerCount; cmp != 0 ) + return cmp; + if ( auto cmp = expectDyadicTemporalSubLayerPattern <=> rhs.expectDyadicTemporalSubLayerPattern; cmp != 0 ) + return cmp; + if ( auto cmp = minQp <=> rhs.minQp; cmp != 0 ) + return cmp; + if ( auto cmp = maxQp <=> rhs.maxQp; cmp != 0 ) + return cmp; + if ( auto cmp = prefersGopRemainingFrames <=> rhs.prefersGopRemainingFrames; cmp != 0 ) + return cmp; + if ( auto cmp = requiresGopRemainingFrames <=> rhs.requiresGopRemainingFrames; cmp != 0 ) + return cmp; + if ( auto cmp = stdSyntaxFlags <=> rhs.stdSyntaxFlags; cmp != 0 ) + return cmp; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeH265CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH265LevelIdc ) ) == 0 ) && ( maxSliceSegmentCount == rhs.maxSliceSegmentCount ) && + ( maxTiles == rhs.maxTiles ) && ( ctbSizes == rhs.ctbSizes ) && ( transformBlockSizes == rhs.transformBlockSizes ) && + ( maxPPictureL0ReferenceCount == rhs.maxPPictureL0ReferenceCount ) && ( maxBPictureL0ReferenceCount == rhs.maxBPictureL0ReferenceCount ) && + ( maxL1ReferenceCount == rhs.maxL1ReferenceCount ) && ( maxSubLayerCount == rhs.maxSubLayerCount ) && + ( expectDyadicTemporalSubLayerPattern == rhs.expectDyadicTemporalSubLayerPattern ) && ( minQp == rhs.minQp ) && ( maxQp == rhs.maxQp ) && + ( prefersGopRemainingFrames == rhs.prefersGopRemainingFrames ) && ( requiresGopRemainingFrames == rhs.requiresGopRemainingFrames ) && + ( stdSyntaxFlags == rhs.stdSyntaxFlags ); + } + + bool operator!=( VideoEncodeH265CapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265CapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsKHR flags = {}; + StdVideoH265LevelIdc maxLevelIdc = {}; + uint32_t maxSliceSegmentCount = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxTiles = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsKHR ctbSizes = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes = {}; + uint32_t maxPPictureL0ReferenceCount = {}; + uint32_t maxBPictureL0ReferenceCount = {}; + uint32_t maxL1ReferenceCount = {}; + uint32_t maxSubLayerCount = {}; + VULKAN_HPP_NAMESPACE::Bool32 expectDyadicTemporalSubLayerPattern = {}; + int32_t minQp = {}; + int32_t maxQp = {}; + VULKAN_HPP_NAMESPACE::Bool32 prefersGopRemainingFrames = {}; + VULKAN_HPP_NAMESPACE::Bool32 requiresGopRemainingFrames = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265StdFlagsKHR stdSyntaxFlags = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265CapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265DpbSlotInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265DpbSlotInfoKHR.html + struct VideoEncodeH265DpbSlotInfoKHR + { + using NativeType = VkVideoEncodeH265DpbSlotInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265DpbSlotInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265DpbSlotInfoKHR( const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , pStdReferenceInfo{ pStdReferenceInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265DpbSlotInfoKHR( VideoEncodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265DpbSlotInfoKHR( VkVideoEncodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265DpbSlotInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265DpbSlotInfoKHR & operator=( VideoEncodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265DpbSlotInfoKHR & operator=( VkVideoEncodeH265DpbSlotInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoKHR & + setPStdReferenceInfo( const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdReferenceInfo = pStdReferenceInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265DpbSlotInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265DpbSlotInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265DpbSlotInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265DpbSlotInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, pStdReferenceInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265DpbSlotInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo ); +# endif + } + + bool operator!=( VideoEncodeH265DpbSlotInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265DpbSlotInfoKHR; + const void * pNext = {}; + const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265DpbSlotInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265FrameSizeKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265FrameSizeKHR.html + struct VideoEncodeH265FrameSizeKHR + { + using NativeType = VkVideoEncodeH265FrameSizeKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265FrameSizeKHR( uint32_t frameISize_ = {}, uint32_t framePSize_ = {}, uint32_t frameBSize_ = {} ) VULKAN_HPP_NOEXCEPT + : frameISize{ frameISize_ } + , framePSize{ framePSize_ } + , frameBSize{ frameBSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265FrameSizeKHR( VideoEncodeH265FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265FrameSizeKHR( VkVideoEncodeH265FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265FrameSizeKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265FrameSizeKHR & operator=( VideoEncodeH265FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265FrameSizeKHR & operator=( VkVideoEncodeH265FrameSizeKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeKHR & setFrameISize( uint32_t frameISize_ ) VULKAN_HPP_NOEXCEPT + { + frameISize = frameISize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeKHR & setFramePSize( uint32_t framePSize_ ) VULKAN_HPP_NOEXCEPT + { + framePSize = framePSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeKHR & setFrameBSize( uint32_t frameBSize_ ) VULKAN_HPP_NOEXCEPT + { + frameBSize = frameBSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265FrameSizeKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265FrameSizeKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265FrameSizeKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265FrameSizeKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( frameISize, framePSize, frameBSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265FrameSizeKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265FrameSizeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( frameISize == rhs.frameISize ) && ( framePSize == rhs.framePSize ) && ( frameBSize == rhs.frameBSize ); +# endif + } + + bool operator!=( VideoEncodeH265FrameSizeKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + uint32_t frameISize = {}; + uint32_t framePSize = {}; + uint32_t frameBSize = {}; + }; + + // wrapper struct for struct VkVideoEncodeH265GopRemainingFrameInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265GopRemainingFrameInfoKHR.html + struct VideoEncodeH265GopRemainingFrameInfoKHR + { + using NativeType = VkVideoEncodeH265GopRemainingFrameInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265GopRemainingFrameInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265GopRemainingFrameInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames_ = {}, + uint32_t gopRemainingI_ = {}, + uint32_t gopRemainingP_ = {}, + uint32_t gopRemainingB_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useGopRemainingFrames{ useGopRemainingFrames_ } + , gopRemainingI{ gopRemainingI_ } + , gopRemainingP{ gopRemainingP_ } + , gopRemainingB{ gopRemainingB_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265GopRemainingFrameInfoKHR( VideoEncodeH265GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265GopRemainingFrameInfoKHR( VkVideoEncodeH265GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265GopRemainingFrameInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265GopRemainingFrameInfoKHR & operator=( VideoEncodeH265GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265GopRemainingFrameInfoKHR & operator=( VkVideoEncodeH265GopRemainingFrameInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265GopRemainingFrameInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265GopRemainingFrameInfoKHR & + setUseGopRemainingFrames( VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames_ ) VULKAN_HPP_NOEXCEPT + { + useGopRemainingFrames = useGopRemainingFrames_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265GopRemainingFrameInfoKHR & setGopRemainingI( uint32_t gopRemainingI_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingI = gopRemainingI_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265GopRemainingFrameInfoKHR & setGopRemainingP( uint32_t gopRemainingP_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingP = gopRemainingP_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265GopRemainingFrameInfoKHR & setGopRemainingB( uint32_t gopRemainingB_ ) VULKAN_HPP_NOEXCEPT + { + gopRemainingB = gopRemainingB_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265GopRemainingFrameInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265GopRemainingFrameInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265GopRemainingFrameInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265GopRemainingFrameInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useGopRemainingFrames, gopRemainingI, gopRemainingP, gopRemainingB ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265GopRemainingFrameInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265GopRemainingFrameInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useGopRemainingFrames == rhs.useGopRemainingFrames ) && + ( gopRemainingI == rhs.gopRemainingI ) && ( gopRemainingP == rhs.gopRemainingP ) && ( gopRemainingB == rhs.gopRemainingB ); +# endif + } + + bool operator!=( VideoEncodeH265GopRemainingFrameInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265GopRemainingFrameInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useGopRemainingFrames = {}; + uint32_t gopRemainingI = {}; + uint32_t gopRemainingP = {}; + uint32_t gopRemainingB = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265GopRemainingFrameInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265NaluSliceSegmentInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265NaluSliceSegmentInfoKHR.html + struct VideoEncodeH265NaluSliceSegmentInfoKHR + { + using NativeType = VkVideoEncodeH265NaluSliceSegmentInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265NaluSliceSegmentInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265NaluSliceSegmentInfoKHR( int32_t constantQp_ = {}, + const StdVideoEncodeH265SliceSegmentHeader * pStdSliceSegmentHeader_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , constantQp{ constantQp_ } + , pStdSliceSegmentHeader{ pStdSliceSegmentHeader_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265NaluSliceSegmentInfoKHR( VideoEncodeH265NaluSliceSegmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265NaluSliceSegmentInfoKHR( VkVideoEncodeH265NaluSliceSegmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265NaluSliceSegmentInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265NaluSliceSegmentInfoKHR & operator=( VideoEncodeH265NaluSliceSegmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265NaluSliceSegmentInfoKHR & operator=( VkVideoEncodeH265NaluSliceSegmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentInfoKHR & setConstantQp( int32_t constantQp_ ) VULKAN_HPP_NOEXCEPT + { + constantQp = constantQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentInfoKHR & + setPStdSliceSegmentHeader( const StdVideoEncodeH265SliceSegmentHeader * pStdSliceSegmentHeader_ ) VULKAN_HPP_NOEXCEPT + { + pStdSliceSegmentHeader = pStdSliceSegmentHeader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265NaluSliceSegmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265NaluSliceSegmentInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265NaluSliceSegmentInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265NaluSliceSegmentInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, constantQp, pStdSliceSegmentHeader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265NaluSliceSegmentInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265NaluSliceSegmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( constantQp == rhs.constantQp ) && ( pStdSliceSegmentHeader == rhs.pStdSliceSegmentHeader ); +# endif + } + + bool operator!=( VideoEncodeH265NaluSliceSegmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265NaluSliceSegmentInfoKHR; + const void * pNext = {}; + int32_t constantQp = {}; + const StdVideoEncodeH265SliceSegmentHeader * pStdSliceSegmentHeader = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265NaluSliceSegmentInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265PictureInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265PictureInfoKHR.html + struct VideoEncodeH265PictureInfoKHR + { + using NativeType = VkVideoEncodeH265PictureInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265PictureInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265PictureInfoKHR( uint32_t naluSliceSegmentEntryCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentInfoKHR * pNaluSliceSegmentEntries_ = {}, + const StdVideoEncodeH265PictureInfo * pStdPictureInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , naluSliceSegmentEntryCount{ naluSliceSegmentEntryCount_ } + , pNaluSliceSegmentEntries{ pNaluSliceSegmentEntries_ } + , pStdPictureInfo{ pStdPictureInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265PictureInfoKHR( VideoEncodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265PictureInfoKHR( VkVideoEncodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265PictureInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH265PictureInfoKHR( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceSegmentEntries_, + const StdVideoEncodeH265PictureInfo * pStdPictureInfo_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , naluSliceSegmentEntryCount( static_cast( naluSliceSegmentEntries_.size() ) ) + , pNaluSliceSegmentEntries( naluSliceSegmentEntries_.data() ) + , pStdPictureInfo( pStdPictureInfo_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeH265PictureInfoKHR & operator=( VideoEncodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265PictureInfoKHR & operator=( VkVideoEncodeH265PictureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265PictureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265PictureInfoKHR & setNaluSliceSegmentEntryCount( uint32_t naluSliceSegmentEntryCount_ ) VULKAN_HPP_NOEXCEPT + { + naluSliceSegmentEntryCount = naluSliceSegmentEntryCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265PictureInfoKHR & + setPNaluSliceSegmentEntries( const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentInfoKHR * pNaluSliceSegmentEntries_ ) VULKAN_HPP_NOEXCEPT + { + pNaluSliceSegmentEntries = pNaluSliceSegmentEntries_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH265PictureInfoKHR & setNaluSliceSegmentEntries( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & naluSliceSegmentEntries_ ) + VULKAN_HPP_NOEXCEPT + { + naluSliceSegmentEntryCount = static_cast( naluSliceSegmentEntries_.size() ); + pNaluSliceSegmentEntries = naluSliceSegmentEntries_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265PictureInfoKHR & setPStdPictureInfo( const StdVideoEncodeH265PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT + { + pStdPictureInfo = pStdPictureInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265PictureInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265PictureInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265PictureInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265PictureInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, naluSliceSegmentEntryCount, pNaluSliceSegmentEntries, pStdPictureInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265PictureInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( naluSliceSegmentEntryCount == rhs.naluSliceSegmentEntryCount ) && + ( pNaluSliceSegmentEntries == rhs.pNaluSliceSegmentEntries ) && ( pStdPictureInfo == rhs.pStdPictureInfo ); +# endif + } + + bool operator!=( VideoEncodeH265PictureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265PictureInfoKHR; + const void * pNext = {}; + uint32_t naluSliceSegmentEntryCount = {}; + const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentInfoKHR * pNaluSliceSegmentEntries = {}; + const StdVideoEncodeH265PictureInfo * pStdPictureInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265PictureInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265ProfileInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265ProfileInfoKHR.html + struct VideoEncodeH265ProfileInfoKHR + { + using NativeType = VkVideoEncodeH265ProfileInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265ProfileInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265ProfileInfoKHR( StdVideoH265ProfileIdc stdProfileIdc_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdProfileIdc{ stdProfileIdc_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265ProfileInfoKHR( VideoEncodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265ProfileInfoKHR( VkVideoEncodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265ProfileInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265ProfileInfoKHR & operator=( VideoEncodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265ProfileInfoKHR & operator=( VkVideoEncodeH265ProfileInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ProfileInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ProfileInfoKHR & setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT + { + stdProfileIdc = stdProfileIdc_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265ProfileInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265ProfileInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265ProfileInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265ProfileInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdProfileIdc ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeH265ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeH265ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ) == 0 ); + } + + bool operator!=( VideoEncodeH265ProfileInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265ProfileInfoKHR; + const void * pNext = {}; + StdVideoH265ProfileIdc stdProfileIdc = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265ProfileInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265QpKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265QpKHR.html + struct VideoEncodeH265QpKHR + { + using NativeType = VkVideoEncodeH265QpKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265QpKHR( int32_t qpI_ = {}, int32_t qpP_ = {}, int32_t qpB_ = {} ) VULKAN_HPP_NOEXCEPT + : qpI{ qpI_ } + , qpP{ qpP_ } + , qpB{ qpB_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265QpKHR( VideoEncodeH265QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265QpKHR( VkVideoEncodeH265QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265QpKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265QpKHR & operator=( VideoEncodeH265QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265QpKHR & operator=( VkVideoEncodeH265QpKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpKHR & setQpI( int32_t qpI_ ) VULKAN_HPP_NOEXCEPT + { + qpI = qpI_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpKHR & setQpP( int32_t qpP_ ) VULKAN_HPP_NOEXCEPT + { + qpP = qpP_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpKHR & setQpB( int32_t qpB_ ) VULKAN_HPP_NOEXCEPT + { + qpB = qpB_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265QpKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QpKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QpKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QpKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( qpI, qpP, qpB ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265QpKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265QpKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( qpI == rhs.qpI ) && ( qpP == rhs.qpP ) && ( qpB == rhs.qpB ); +# endif + } + + bool operator!=( VideoEncodeH265QpKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + int32_t qpI = {}; + int32_t qpP = {}; + int32_t qpB = {}; + }; + + // wrapper struct for struct VkVideoEncodeH265QualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265QualityLevelPropertiesKHR.html + struct VideoEncodeH265QualityLevelPropertiesKHR + { + using NativeType = VkVideoEncodeH265QualityLevelPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265QualityLevelPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265QualityLevelPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagsKHR preferredRateControlFlags_ = {}, + uint32_t preferredGopFrameCount_ = {}, + uint32_t preferredIdrPeriod_ = {}, + uint32_t preferredConsecutiveBFrameCount_ = {}, + uint32_t preferredSubLayerCount_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR preferredConstantQp_ = {}, + uint32_t preferredMaxL0ReferenceCount_ = {}, + uint32_t preferredMaxL1ReferenceCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , preferredRateControlFlags{ preferredRateControlFlags_ } + , preferredGopFrameCount{ preferredGopFrameCount_ } + , preferredIdrPeriod{ preferredIdrPeriod_ } + , preferredConsecutiveBFrameCount{ preferredConsecutiveBFrameCount_ } + , preferredSubLayerCount{ preferredSubLayerCount_ } + , preferredConstantQp{ preferredConstantQp_ } + , preferredMaxL0ReferenceCount{ preferredMaxL0ReferenceCount_ } + , preferredMaxL1ReferenceCount{ preferredMaxL1ReferenceCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265QualityLevelPropertiesKHR( VideoEncodeH265QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265QualityLevelPropertiesKHR( VkVideoEncodeH265QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265QualityLevelPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265QualityLevelPropertiesKHR & operator=( VideoEncodeH265QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265QualityLevelPropertiesKHR & operator=( VkVideoEncodeH265QualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH265QualityLevelPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QualityLevelPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QualityLevelPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QualityLevelPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + preferredRateControlFlags, + preferredGopFrameCount, + preferredIdrPeriod, + preferredConsecutiveBFrameCount, + preferredSubLayerCount, + preferredConstantQp, + preferredMaxL0ReferenceCount, + preferredMaxL1ReferenceCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265QualityLevelPropertiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265QualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( preferredRateControlFlags == rhs.preferredRateControlFlags ) && + ( preferredGopFrameCount == rhs.preferredGopFrameCount ) && ( preferredIdrPeriod == rhs.preferredIdrPeriod ) && + ( preferredConsecutiveBFrameCount == rhs.preferredConsecutiveBFrameCount ) && ( preferredSubLayerCount == rhs.preferredSubLayerCount ) && + ( preferredConstantQp == rhs.preferredConstantQp ) && ( preferredMaxL0ReferenceCount == rhs.preferredMaxL0ReferenceCount ) && + ( preferredMaxL1ReferenceCount == rhs.preferredMaxL1ReferenceCount ); +# endif + } + + bool operator!=( VideoEncodeH265QualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265QualityLevelPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagsKHR preferredRateControlFlags = {}; + uint32_t preferredGopFrameCount = {}; + uint32_t preferredIdrPeriod = {}; + uint32_t preferredConsecutiveBFrameCount = {}; + uint32_t preferredSubLayerCount = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR preferredConstantQp = {}; + uint32_t preferredMaxL0ReferenceCount = {}; + uint32_t preferredMaxL1ReferenceCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265QualityLevelPropertiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265QuantizationMapCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265QuantizationMapCapabilitiesKHR.html + struct VideoEncodeH265QuantizationMapCapabilitiesKHR + { + using NativeType = VkVideoEncodeH265QuantizationMapCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265QuantizationMapCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeH265QuantizationMapCapabilitiesKHR( int32_t minQpDelta_ = {}, int32_t maxQpDelta_ = {}, void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , minQpDelta{ minQpDelta_ } + , maxQpDelta{ maxQpDelta_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoEncodeH265QuantizationMapCapabilitiesKHR( VideoEncodeH265QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265QuantizationMapCapabilitiesKHR( VkVideoEncodeH265QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265QuantizationMapCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265QuantizationMapCapabilitiesKHR & operator=( VideoEncodeH265QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265QuantizationMapCapabilitiesKHR & operator=( VkVideoEncodeH265QuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH265QuantizationMapCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QuantizationMapCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QuantizationMapCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265QuantizationMapCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, minQpDelta, maxQpDelta ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265QuantizationMapCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265QuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minQpDelta == rhs.minQpDelta ) && ( maxQpDelta == rhs.maxQpDelta ); +# endif + } + + bool operator!=( VideoEncodeH265QuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265QuantizationMapCapabilitiesKHR; + void * pNext = {}; + int32_t minQpDelta = {}; + int32_t maxQpDelta = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265QuantizationMapCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265RateControlInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265RateControlInfoKHR.html + struct VideoEncodeH265RateControlInfoKHR + { + using NativeType = VkVideoEncodeH265RateControlInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265RateControlInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagsKHR flags_ = {}, + uint32_t gopFrameCount_ = {}, + uint32_t idrPeriod_ = {}, + uint32_t consecutiveBFrameCount_ = {}, + uint32_t subLayerCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , gopFrameCount{ gopFrameCount_ } + , idrPeriod{ idrPeriod_ } + , consecutiveBFrameCount{ consecutiveBFrameCount_ } + , subLayerCount{ subLayerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlInfoKHR( VideoEncodeH265RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265RateControlInfoKHR( VkVideoEncodeH265RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265RateControlInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265RateControlInfoKHR & operator=( VideoEncodeH265RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265RateControlInfoKHR & operator=( VkVideoEncodeH265RateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoKHR & setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT + { + gopFrameCount = gopFrameCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoKHR & setIdrPeriod( uint32_t idrPeriod_ ) VULKAN_HPP_NOEXCEPT + { + idrPeriod = idrPeriod_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoKHR & setConsecutiveBFrameCount( uint32_t consecutiveBFrameCount_ ) VULKAN_HPP_NOEXCEPT + { + consecutiveBFrameCount = consecutiveBFrameCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoKHR & setSubLayerCount( uint32_t subLayerCount_ ) VULKAN_HPP_NOEXCEPT + { + subLayerCount = subLayerCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265RateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265RateControlInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265RateControlInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265RateControlInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, gopFrameCount, idrPeriod, consecutiveBFrameCount, subLayerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265RateControlInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265RateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( gopFrameCount == rhs.gopFrameCount ) && + ( idrPeriod == rhs.idrPeriod ) && ( consecutiveBFrameCount == rhs.consecutiveBFrameCount ) && ( subLayerCount == rhs.subLayerCount ); +# endif + } + + bool operator!=( VideoEncodeH265RateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265RateControlInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlFlagsKHR flags = {}; + uint32_t gopFrameCount = {}; + uint32_t idrPeriod = {}; + uint32_t consecutiveBFrameCount = {}; + uint32_t subLayerCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265RateControlInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265RateControlLayerInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265RateControlLayerInfoKHR.html + struct VideoEncodeH265RateControlLayerInfoKHR + { + using NativeType = VkVideoEncodeH265RateControlLayerInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265RateControlLayerInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlLayerInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR minQp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR maxQp_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeKHR maxFrameSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useMinQp{ useMinQp_ } + , minQp{ minQp_ } + , useMaxQp{ useMaxQp_ } + , maxQp{ maxQp_ } + , useMaxFrameSize{ useMaxFrameSize_ } + , maxFrameSize{ maxFrameSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlLayerInfoKHR( VideoEncodeH265RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265RateControlLayerInfoKHR( VkVideoEncodeH265RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265RateControlLayerInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265RateControlLayerInfoKHR & operator=( VideoEncodeH265RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265RateControlLayerInfoKHR & operator=( VkVideoEncodeH265RateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & setUseMinQp( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ ) VULKAN_HPP_NOEXCEPT + { + useMinQp = useMinQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & setMinQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR const & minQp_ ) VULKAN_HPP_NOEXCEPT + { + minQp = minQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & setUseMaxQp( VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ ) VULKAN_HPP_NOEXCEPT + { + useMaxQp = useMaxQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & setMaxQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR const & maxQp_ ) VULKAN_HPP_NOEXCEPT + { + maxQp = maxQp_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + useMaxFrameSize = useMaxFrameSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoKHR & + setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeKHR const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT + { + maxFrameSize = maxFrameSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265RateControlLayerInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265RateControlLayerInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265RateControlLayerInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265RateControlLayerInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useMinQp, minQp, useMaxQp, maxQp, useMaxFrameSize, maxFrameSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265RateControlLayerInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265RateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useMinQp == rhs.useMinQp ) && ( minQp == rhs.minQp ) && ( useMaxQp == rhs.useMaxQp ) && + ( maxQp == rhs.maxQp ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) && ( maxFrameSize == rhs.maxFrameSize ); +# endif + } + + bool operator!=( VideoEncodeH265RateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265RateControlLayerInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMinQp = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR minQp = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxQp = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265QpKHR maxQp = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeKHR maxFrameSize = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265RateControlLayerInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265SessionCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265SessionCreateInfoKHR.html + struct VideoEncodeH265SessionCreateInfoKHR + { + using NativeType = VkVideoEncodeH265SessionCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionCreateInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 useMaxLevelIdc_ = {}, + StdVideoH265LevelIdc maxLevelIdc_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , useMaxLevelIdc{ useMaxLevelIdc_ } + , maxLevelIdc{ maxLevelIdc_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionCreateInfoKHR( VideoEncodeH265SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265SessionCreateInfoKHR( VkVideoEncodeH265SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265SessionCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265SessionCreateInfoKHR & operator=( VideoEncodeH265SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265SessionCreateInfoKHR & operator=( VkVideoEncodeH265SessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoKHR & setUseMaxLevelIdc( VULKAN_HPP_NAMESPACE::Bool32 useMaxLevelIdc_ ) VULKAN_HPP_NOEXCEPT + { + useMaxLevelIdc = useMaxLevelIdc_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoKHR & setMaxLevelIdc( StdVideoH265LevelIdc maxLevelIdc_ ) VULKAN_HPP_NOEXCEPT + { + maxLevelIdc = maxLevelIdc_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265SessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, useMaxLevelIdc, maxLevelIdc ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( VideoEncodeH265SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = useMaxLevelIdc <=> rhs.useMaxLevelIdc; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH265LevelIdc ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +#endif + + bool operator==( VideoEncodeH265SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( useMaxLevelIdc == rhs.useMaxLevelIdc ) && + ( memcmp( &maxLevelIdc, &rhs.maxLevelIdc, sizeof( StdVideoH265LevelIdc ) ) == 0 ); + } + + bool operator!=( VideoEncodeH265SessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 useMaxLevelIdc = {}; + StdVideoH265LevelIdc maxLevelIdc = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265SessionCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265SessionParametersAddInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265SessionParametersAddInfoKHR.html + struct VideoEncodeH265SessionParametersAddInfoKHR + { + using NativeType = VkVideoEncodeH265SessionParametersAddInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionParametersAddInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersAddInfoKHR( uint32_t stdVPSCount_ = {}, + const StdVideoH265VideoParameterSet * pStdVPSs_ = {}, + uint32_t stdSPSCount_ = {}, + const StdVideoH265SequenceParameterSet * pStdSPSs_ = {}, + uint32_t stdPPSCount_ = {}, + const StdVideoH265PictureParameterSet * pStdPPSs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , stdVPSCount{ stdVPSCount_ } + , pStdVPSs{ pStdVPSs_ } + , stdSPSCount{ stdSPSCount_ } + , pStdSPSs{ pStdSPSs_ } + , stdPPSCount{ stdPPSCount_ } + , pStdPPSs{ pStdPPSs_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersAddInfoKHR( VideoEncodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265SessionParametersAddInfoKHR( VkVideoEncodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265SessionParametersAddInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH265SessionParametersAddInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdVPSs_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , stdVPSCount( static_cast( stdVPSs_.size() ) ) + , pStdVPSs( stdVPSs_.data() ) + , stdSPSCount( static_cast( stdSPSs_.size() ) ) + , pStdSPSs( stdSPSs_.data() ) + , stdPPSCount( static_cast( stdPPSs_.size() ) ) + , pStdPPSs( stdPPSs_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeH265SessionParametersAddInfoKHR & operator=( VideoEncodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265SessionParametersAddInfoKHR & operator=( VkVideoEncodeH265SessionParametersAddInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setStdVPSCount( uint32_t stdVPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdVPSCount = stdVPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setPStdVPSs( const StdVideoH265VideoParameterSet * pStdVPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdVPSs = pStdVPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH265SessionParametersAddInfoKHR & + setStdVPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdVPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdVPSCount = static_cast( stdVPSs_.size() ); + pStdVPSs = stdVPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setStdSPSCount( uint32_t stdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = stdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setPStdSPSs( const StdVideoH265SequenceParameterSet * pStdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdSPSs = pStdSPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH265SessionParametersAddInfoKHR & + setStdSPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdSPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSCount = static_cast( stdSPSs_.size() ); + pStdSPSs = stdSPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setStdPPSCount( uint32_t stdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = stdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoKHR & setPStdPPSs( const StdVideoH265PictureParameterSet * pStdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + pStdPPSs = pStdPPSs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeH265SessionParametersAddInfoKHR & + setStdPPSs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & stdPPSs_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSCount = static_cast( stdPPSs_.size() ); + pStdPPSs = stdPPSs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265SessionParametersAddInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersAddInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersAddInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersAddInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, stdVPSCount, pStdVPSs, stdSPSCount, pStdSPSs, stdPPSCount, pStdPPSs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265SessionParametersAddInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stdVPSCount == rhs.stdVPSCount ) && ( pStdVPSs == rhs.pStdVPSs ) && + ( stdSPSCount == rhs.stdSPSCount ) && ( pStdSPSs == rhs.pStdSPSs ) && ( stdPPSCount == rhs.stdPPSCount ) && ( pStdPPSs == rhs.pStdPPSs ); +# endif + } + + bool operator!=( VideoEncodeH265SessionParametersAddInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersAddInfoKHR; + const void * pNext = {}; + uint32_t stdVPSCount = {}; + const StdVideoH265VideoParameterSet * pStdVPSs = {}; + uint32_t stdSPSCount = {}; + const StdVideoH265SequenceParameterSet * pStdSPSs = {}; + uint32_t stdPPSCount = {}; + const StdVideoH265PictureParameterSet * pStdPPSs = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265SessionParametersAddInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265SessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265SessionParametersCreateInfoKHR.html + struct VideoEncodeH265SessionParametersCreateInfoKHR + { + using NativeType = VkVideoEncodeH265SessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeH265SessionParametersCreateInfoKHR( uint32_t maxStdVPSCount_ = {}, + uint32_t maxStdSPSCount_ = {}, + uint32_t maxStdPPSCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoKHR * pParametersAddInfo_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxStdVPSCount{ maxStdVPSCount_ } + , maxStdSPSCount{ maxStdSPSCount_ } + , maxStdPPSCount{ maxStdPPSCount_ } + , pParametersAddInfo{ pParametersAddInfo_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoEncodeH265SessionParametersCreateInfoKHR( VideoEncodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265SessionParametersCreateInfoKHR( VkVideoEncodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265SessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265SessionParametersCreateInfoKHR & operator=( VideoEncodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265SessionParametersCreateInfoKHR & operator=( VkVideoEncodeH265SessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoKHR & setMaxStdVPSCount( uint32_t maxStdVPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdVPSCount = maxStdVPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoKHR & setMaxStdSPSCount( uint32_t maxStdSPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdSPSCount = maxStdSPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoKHR & setMaxStdPPSCount( uint32_t maxStdPPSCount_ ) VULKAN_HPP_NOEXCEPT + { + maxStdPPSCount = maxStdPPSCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoKHR & + setPParametersAddInfo( const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoKHR * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT + { + pParametersAddInfo = pParametersAddInfo_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265SessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxStdVPSCount, maxStdSPSCount, maxStdPPSCount, pParametersAddInfo ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265SessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxStdVPSCount == rhs.maxStdVPSCount ) && ( maxStdSPSCount == rhs.maxStdSPSCount ) && + ( maxStdPPSCount == rhs.maxStdPPSCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo ); +# endif + } + + bool operator!=( VideoEncodeH265SessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersCreateInfoKHR; + const void * pNext = {}; + uint32_t maxStdVPSCount = {}; + uint32_t maxStdSPSCount = {}; + uint32_t maxStdPPSCount = {}; + const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoKHR * pParametersAddInfo = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265SessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265SessionParametersFeedbackInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265SessionParametersFeedbackInfoKHR.html + struct VideoEncodeH265SessionParametersFeedbackInfoKHR + { + using NativeType = VkVideoEncodeH265SessionParametersFeedbackInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionParametersFeedbackInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersFeedbackInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 hasStdVPSOverrides_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hasStdSPSOverrides_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 hasStdPPSOverrides_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hasStdVPSOverrides{ hasStdVPSOverrides_ } + , hasStdSPSOverrides{ hasStdSPSOverrides_ } + , hasStdPPSOverrides{ hasStdPPSOverrides_ } + { + } + + VULKAN_HPP_CONSTEXPR + VideoEncodeH265SessionParametersFeedbackInfoKHR( VideoEncodeH265SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265SessionParametersFeedbackInfoKHR( VkVideoEncodeH265SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265SessionParametersFeedbackInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265SessionParametersFeedbackInfoKHR & operator=( VideoEncodeH265SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265SessionParametersFeedbackInfoKHR & operator=( VkVideoEncodeH265SessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeH265SessionParametersFeedbackInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersFeedbackInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersFeedbackInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersFeedbackInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hasStdVPSOverrides, hasStdSPSOverrides, hasStdPPSOverrides ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265SessionParametersFeedbackInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265SessionParametersFeedbackInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hasStdVPSOverrides == rhs.hasStdVPSOverrides ) && + ( hasStdSPSOverrides == rhs.hasStdSPSOverrides ) && ( hasStdPPSOverrides == rhs.hasStdPPSOverrides ); +# endif + } + + bool operator!=( VideoEncodeH265SessionParametersFeedbackInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersFeedbackInfoKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasStdVPSOverrides = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasStdSPSOverrides = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasStdPPSOverrides = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265SessionParametersFeedbackInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeH265SessionParametersGetInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeH265SessionParametersGetInfoKHR.html + struct VideoEncodeH265SessionParametersGetInfoKHR + { + using NativeType = VkVideoEncodeH265SessionParametersGetInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265SessionParametersGetInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersGetInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 writeStdVPS_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 writeStdSPS_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 writeStdPPS_ = {}, + uint32_t stdVPSId_ = {}, + uint32_t stdSPSId_ = {}, + uint32_t stdPPSId_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , writeStdVPS{ writeStdVPS_ } + , writeStdSPS{ writeStdSPS_ } + , writeStdPPS{ writeStdPPS_ } + , stdVPSId{ stdVPSId_ } + , stdSPSId{ stdSPSId_ } + , stdPPSId{ stdPPSId_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersGetInfoKHR( VideoEncodeH265SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeH265SessionParametersGetInfoKHR( VkVideoEncodeH265SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeH265SessionParametersGetInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeH265SessionParametersGetInfoKHR & operator=( VideoEncodeH265SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeH265SessionParametersGetInfoKHR & operator=( VkVideoEncodeH265SessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setWriteStdVPS( VULKAN_HPP_NAMESPACE::Bool32 writeStdVPS_ ) VULKAN_HPP_NOEXCEPT + { + writeStdVPS = writeStdVPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setWriteStdSPS( VULKAN_HPP_NAMESPACE::Bool32 writeStdSPS_ ) VULKAN_HPP_NOEXCEPT + { + writeStdSPS = writeStdSPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setWriteStdPPS( VULKAN_HPP_NAMESPACE::Bool32 writeStdPPS_ ) VULKAN_HPP_NOEXCEPT + { + writeStdPPS = writeStdPPS_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setStdVPSId( uint32_t stdVPSId_ ) VULKAN_HPP_NOEXCEPT + { + stdVPSId = stdVPSId_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setStdSPSId( uint32_t stdSPSId_ ) VULKAN_HPP_NOEXCEPT + { + stdSPSId = stdSPSId_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersGetInfoKHR & setStdPPSId( uint32_t stdPPSId_ ) VULKAN_HPP_NOEXCEPT + { + stdPPSId = stdPPSId_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeH265SessionParametersGetInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersGetInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersGetInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeH265SessionParametersGetInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, writeStdVPS, writeStdSPS, writeStdPPS, stdVPSId, stdSPSId, stdPPSId ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeH265SessionParametersGetInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeH265SessionParametersGetInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( writeStdVPS == rhs.writeStdVPS ) && ( writeStdSPS == rhs.writeStdSPS ) && + ( writeStdPPS == rhs.writeStdPPS ) && ( stdVPSId == rhs.stdVPSId ) && ( stdSPSId == rhs.stdSPSId ) && ( stdPPSId == rhs.stdPPSId ); +# endif + } + + bool operator!=( VideoEncodeH265SessionParametersGetInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersGetInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 writeStdVPS = {}; + VULKAN_HPP_NAMESPACE::Bool32 writeStdSPS = {}; + VULKAN_HPP_NAMESPACE::Bool32 writeStdPPS = {}; + uint32_t stdVPSId = {}; + uint32_t stdSPSId = {}; + uint32_t stdPPSId = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeH265SessionParametersGetInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeInfoKHR.html + struct VideoEncodeInfoKHR + { + using NativeType = VkVideoEncodeInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize dstBufferOffset_ = {}, + VULKAN_HPP_NAMESPACE::DeviceSize dstBufferRange_ = {}, + VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR srcPictureResource_ = {}, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot_ = {}, + uint32_t referenceSlotCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots_ = {}, + uint32_t precedingExternallyEncodedBytes_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , dstBuffer{ dstBuffer_ } + , dstBufferOffset{ dstBufferOffset_ } + , dstBufferRange{ dstBufferRange_ } + , srcPictureResource{ srcPictureResource_ } + , pSetupReferenceSlot{ pSetupReferenceSlot_ } + , referenceSlotCount{ referenceSlotCount_ } + , pReferenceSlots{ pReferenceSlots_ } + , precedingExternallyEncodedBytes{ precedingExternallyEncodedBytes_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeInfoKHR( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeInfoKHR( VkVideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT : VideoEncodeInfoKHR( *reinterpret_cast( &rhs ) ) {} + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_, + VULKAN_HPP_NAMESPACE::Buffer dstBuffer_, + VULKAN_HPP_NAMESPACE::DeviceSize dstBufferOffset_, + VULKAN_HPP_NAMESPACE::DeviceSize dstBufferRange_, + VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR srcPictureResource_, + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_, + uint32_t precedingExternallyEncodedBytes_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , dstBuffer( dstBuffer_ ) + , dstBufferOffset( dstBufferOffset_ ) + , dstBufferRange( dstBufferRange_ ) + , srcPictureResource( srcPictureResource_ ) + , pSetupReferenceSlot( pSetupReferenceSlot_ ) + , referenceSlotCount( static_cast( referenceSlots_.size() ) ) + , pReferenceSlots( referenceSlots_.data() ) + , precedingExternallyEncodedBytes( precedingExternallyEncodedBytes_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeInfoKHR & operator=( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeInfoKHR & operator=( VkVideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT + { + dstBuffer = dstBuffer_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setDstBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstBufferOffset_ ) VULKAN_HPP_NOEXCEPT + { + dstBufferOffset = dstBufferOffset_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setDstBufferRange( VULKAN_HPP_NAMESPACE::DeviceSize dstBufferRange_ ) VULKAN_HPP_NOEXCEPT + { + dstBufferRange = dstBufferRange_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & + setSrcPictureResource( VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR const & srcPictureResource_ ) VULKAN_HPP_NOEXCEPT + { + srcPictureResource = srcPictureResource_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & + setPSetupReferenceSlot( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot_ ) VULKAN_HPP_NOEXCEPT + { + pSetupReferenceSlot = pSetupReferenceSlot_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT + { + referenceSlotCount = referenceSlotCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & + setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT + { + pReferenceSlots = pReferenceSlots_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeInfoKHR & setReferenceSlots( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & referenceSlots_ ) VULKAN_HPP_NOEXCEPT + { + referenceSlotCount = static_cast( referenceSlots_.size() ); + pReferenceSlots = referenceSlots_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPrecedingExternallyEncodedBytes( uint32_t precedingExternallyEncodedBytes_ ) VULKAN_HPP_NOEXCEPT + { + precedingExternallyEncodedBytes = precedingExternallyEncodedBytes_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + flags, + dstBuffer, + dstBufferOffset, + dstBufferRange, + srcPictureResource, + pSetupReferenceSlot, + referenceSlotCount, + pReferenceSlots, + precedingExternallyEncodedBytes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dstBuffer == rhs.dstBuffer ) && + ( dstBufferOffset == rhs.dstBufferOffset ) && ( dstBufferRange == rhs.dstBufferRange ) && ( srcPictureResource == rhs.srcPictureResource ) && + ( pSetupReferenceSlot == rhs.pSetupReferenceSlot ) && ( referenceSlotCount == rhs.referenceSlotCount ) && + ( pReferenceSlots == rhs.pReferenceSlots ) && ( precedingExternallyEncodedBytes == rhs.precedingExternallyEncodedBytes ); +# endif + } + + bool operator!=( VideoEncodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {}; + VULKAN_HPP_NAMESPACE::DeviceSize dstBufferOffset = {}; + VULKAN_HPP_NAMESPACE::DeviceSize dstBufferRange = {}; + VULKAN_HPP_NAMESPACE::VideoPictureResourceInfoKHR srcPictureResource = {}; + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pSetupReferenceSlot = {}; + uint32_t referenceSlotCount = {}; + const VULKAN_HPP_NAMESPACE::VideoReferenceSlotInfoKHR * pReferenceSlots = {}; + uint32_t precedingExternallyEncodedBytes = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeIntraRefreshCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeIntraRefreshCapabilitiesKHR.html + struct VideoEncodeIntraRefreshCapabilitiesKHR + { + using NativeType = VkVideoEncodeIntraRefreshCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeIntraRefreshCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeIntraRefreshCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes_ = {}, + uint32_t maxIntraRefreshCycleDuration_ = {}, + uint32_t maxIntraRefreshActiveReferencePictures_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 partitionIndependentIntraRefreshRegions_ = {}, + VULKAN_HPP_NAMESPACE::Bool32 nonRectangularIntraRefreshRegions_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , intraRefreshModes{ intraRefreshModes_ } + , maxIntraRefreshCycleDuration{ maxIntraRefreshCycleDuration_ } + , maxIntraRefreshActiveReferencePictures{ maxIntraRefreshActiveReferencePictures_ } + , partitionIndependentIntraRefreshRegions{ partitionIndependentIntraRefreshRegions_ } + , nonRectangularIntraRefreshRegions{ nonRectangularIntraRefreshRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeIntraRefreshCapabilitiesKHR( VideoEncodeIntraRefreshCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeIntraRefreshCapabilitiesKHR( VkVideoEncodeIntraRefreshCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeIntraRefreshCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeIntraRefreshCapabilitiesKHR & operator=( VideoEncodeIntraRefreshCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeIntraRefreshCapabilitiesKHR & operator=( VkVideoEncodeIntraRefreshCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeIntraRefreshCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeIntraRefreshCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeIntraRefreshCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeIntraRefreshCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + intraRefreshModes, + maxIntraRefreshCycleDuration, + maxIntraRefreshActiveReferencePictures, + partitionIndependentIntraRefreshRegions, + nonRectangularIntraRefreshRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeIntraRefreshCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeIntraRefreshCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( intraRefreshModes == rhs.intraRefreshModes ) && + ( maxIntraRefreshCycleDuration == rhs.maxIntraRefreshCycleDuration ) && + ( maxIntraRefreshActiveReferencePictures == rhs.maxIntraRefreshActiveReferencePictures ) && + ( partitionIndependentIntraRefreshRegions == rhs.partitionIndependentIntraRefreshRegions ) && + ( nonRectangularIntraRefreshRegions == rhs.nonRectangularIntraRefreshRegions ); +# endif + } + + bool operator!=( VideoEncodeIntraRefreshCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeIntraRefreshCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes = {}; + uint32_t maxIntraRefreshCycleDuration = {}; + uint32_t maxIntraRefreshActiveReferencePictures = {}; + VULKAN_HPP_NAMESPACE::Bool32 partitionIndependentIntraRefreshRegions = {}; + VULKAN_HPP_NAMESPACE::Bool32 nonRectangularIntraRefreshRegions = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeIntraRefreshCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeIntraRefreshInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeIntraRefreshInfoKHR.html + struct VideoEncodeIntraRefreshInfoKHR + { + using NativeType = VkVideoEncodeIntraRefreshInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeIntraRefreshInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeIntraRefreshInfoKHR( uint32_t intraRefreshCycleDuration_ = {}, + uint32_t intraRefreshIndex_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , intraRefreshCycleDuration{ intraRefreshCycleDuration_ } + , intraRefreshIndex{ intraRefreshIndex_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeIntraRefreshInfoKHR( VideoEncodeIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeIntraRefreshInfoKHR( VkVideoEncodeIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeIntraRefreshInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeIntraRefreshInfoKHR & operator=( VideoEncodeIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeIntraRefreshInfoKHR & operator=( VkVideoEncodeIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeIntraRefreshInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeIntraRefreshInfoKHR & setIntraRefreshCycleDuration( uint32_t intraRefreshCycleDuration_ ) VULKAN_HPP_NOEXCEPT + { + intraRefreshCycleDuration = intraRefreshCycleDuration_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeIntraRefreshInfoKHR & setIntraRefreshIndex( uint32_t intraRefreshIndex_ ) VULKAN_HPP_NOEXCEPT + { + intraRefreshIndex = intraRefreshIndex_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeIntraRefreshInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeIntraRefreshInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeIntraRefreshInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeIntraRefreshInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, intraRefreshCycleDuration, intraRefreshIndex ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeIntraRefreshInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeIntraRefreshInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( intraRefreshCycleDuration == rhs.intraRefreshCycleDuration ) && + ( intraRefreshIndex == rhs.intraRefreshIndex ); +# endif + } + + bool operator!=( VideoEncodeIntraRefreshInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeIntraRefreshInfoKHR; + const void * pNext = {}; + uint32_t intraRefreshCycleDuration = {}; + uint32_t intraRefreshIndex = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeIntraRefreshInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeQualityLevelInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeQualityLevelInfoKHR.html + struct VideoEncodeQualityLevelInfoKHR + { + using NativeType = VkVideoEncodeQualityLevelInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeQualityLevelInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeQualityLevelInfoKHR( uint32_t qualityLevel_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , qualityLevel{ qualityLevel_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeQualityLevelInfoKHR( VideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeQualityLevelInfoKHR( VkVideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeQualityLevelInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeQualityLevelInfoKHR & operator=( VideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeQualityLevelInfoKHR & operator=( VkVideoEncodeQualityLevelInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQualityLevelInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQualityLevelInfoKHR & setQualityLevel( uint32_t qualityLevel_ ) VULKAN_HPP_NOEXCEPT + { + qualityLevel = qualityLevel_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeQualityLevelInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQualityLevelInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQualityLevelInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeQualityLevelInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, qualityLevel ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeQualityLevelInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeQualityLevelInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( qualityLevel == rhs.qualityLevel ); +# endif + } + + bool operator!=( VideoEncodeQualityLevelInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeQualityLevelInfoKHR; + const void * pNext = {}; + uint32_t qualityLevel = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeQualityLevelInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeQualityLevelPropertiesKHR.html + struct VideoEncodeQualityLevelPropertiesKHR + { + using NativeType = VkVideoEncodeQualityLevelPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeQualityLevelPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeQualityLevelPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode_ = + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eDefault, + uint32_t preferredRateControlLayerCount_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , preferredRateControlMode{ preferredRateControlMode_ } + , preferredRateControlLayerCount{ preferredRateControlLayerCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeQualityLevelPropertiesKHR( VideoEncodeQualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeQualityLevelPropertiesKHR( VkVideoEncodeQualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeQualityLevelPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeQualityLevelPropertiesKHR & operator=( VideoEncodeQualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeQualityLevelPropertiesKHR & operator=( VkVideoEncodeQualityLevelPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeQualityLevelPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQualityLevelPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQualityLevelPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeQualityLevelPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, preferredRateControlMode, preferredRateControlLayerCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeQualityLevelPropertiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeQualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( preferredRateControlMode == rhs.preferredRateControlMode ) && + ( preferredRateControlLayerCount == rhs.preferredRateControlLayerCount ); +# endif + } + + bool operator!=( VideoEncodeQualityLevelPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeQualityLevelPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode = + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eDefault; + uint32_t preferredRateControlLayerCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeQualityLevelPropertiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeQuantizationMapCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeQuantizationMapCapabilitiesKHR.html + struct VideoEncodeQuantizationMapCapabilitiesKHR + { + using NativeType = VkVideoEncodeQuantizationMapCapabilitiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeQuantizationMapCapabilitiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeQuantizationMapCapabilitiesKHR( VULKAN_HPP_NAMESPACE::Extent2D maxQuantizationMapExtent_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , maxQuantizationMapExtent{ maxQuantizationMapExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeQuantizationMapCapabilitiesKHR( VideoEncodeQuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeQuantizationMapCapabilitiesKHR( VkVideoEncodeQuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeQuantizationMapCapabilitiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeQuantizationMapCapabilitiesKHR & operator=( VideoEncodeQuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeQuantizationMapCapabilitiesKHR & operator=( VkVideoEncodeQuantizationMapCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeQuantizationMapCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapCapabilitiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapCapabilitiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, maxQuantizationMapExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeQuantizationMapCapabilitiesKHR const & ) const = default; +#else + bool operator==( VideoEncodeQuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxQuantizationMapExtent == rhs.maxQuantizationMapExtent ); +# endif + } + + bool operator!=( VideoEncodeQuantizationMapCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeQuantizationMapCapabilitiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D maxQuantizationMapExtent = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeQuantizationMapCapabilitiesKHR; + }; + + // wrapper struct for struct VkVideoEncodeQuantizationMapInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeQuantizationMapInfoKHR.html + struct VideoEncodeQuantizationMapInfoKHR + { + using NativeType = VkVideoEncodeQuantizationMapInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeQuantizationMapInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeQuantizationMapInfoKHR( VULKAN_HPP_NAMESPACE::ImageView quantizationMap_ = {}, + VULKAN_HPP_NAMESPACE::Extent2D quantizationMapExtent_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , quantizationMap{ quantizationMap_ } + , quantizationMapExtent{ quantizationMapExtent_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeQuantizationMapInfoKHR( VideoEncodeQuantizationMapInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeQuantizationMapInfoKHR( VkVideoEncodeQuantizationMapInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeQuantizationMapInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeQuantizationMapInfoKHR & operator=( VideoEncodeQuantizationMapInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeQuantizationMapInfoKHR & operator=( VkVideoEncodeQuantizationMapInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQuantizationMapInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQuantizationMapInfoKHR & setQuantizationMap( VULKAN_HPP_NAMESPACE::ImageView quantizationMap_ ) VULKAN_HPP_NOEXCEPT + { + quantizationMap = quantizationMap_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQuantizationMapInfoKHR & + setQuantizationMapExtent( VULKAN_HPP_NAMESPACE::Extent2D const & quantizationMapExtent_ ) VULKAN_HPP_NOEXCEPT + { + quantizationMapExtent = quantizationMapExtent_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeQuantizationMapInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, quantizationMap, quantizationMapExtent ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeQuantizationMapInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeQuantizationMapInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( quantizationMap == rhs.quantizationMap ) && + ( quantizationMapExtent == rhs.quantizationMapExtent ); +# endif + } + + bool operator!=( VideoEncodeQuantizationMapInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeQuantizationMapInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::ImageView quantizationMap = {}; + VULKAN_HPP_NAMESPACE::Extent2D quantizationMapExtent = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeQuantizationMapInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR.html + struct VideoEncodeQuantizationMapSessionParametersCreateInfoKHR + { + using NativeType = VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeQuantizationMapSessionParametersCreateInfoKHR( VULKAN_HPP_NAMESPACE::Extent2D quantizationMapTexelSize_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , quantizationMapTexelSize{ quantizationMapTexelSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeQuantizationMapSessionParametersCreateInfoKHR( VideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & rhs ) + VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeQuantizationMapSessionParametersCreateInfoKHR( VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeQuantizationMapSessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeQuantizationMapSessionParametersCreateInfoKHR & + operator=( VideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeQuantizationMapSessionParametersCreateInfoKHR & + operator=( VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQuantizationMapSessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeQuantizationMapSessionParametersCreateInfoKHR & + setQuantizationMapTexelSize( VULKAN_HPP_NAMESPACE::Extent2D const & quantizationMapTexelSize_ ) VULKAN_HPP_NOEXCEPT + { + quantizationMapTexelSize = quantizationMapTexelSize_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, quantizationMapTexelSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( quantizationMapTexelSize == rhs.quantizationMapTexelSize ); +# endif + } + + bool operator!=( VideoEncodeQuantizationMapSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D quantizationMapTexelSize = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeRateControlLayerInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeRateControlLayerInfoKHR.html + struct VideoEncodeRateControlLayerInfoKHR + { + using NativeType = VkVideoEncodeRateControlLayerInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeRateControlLayerInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeRateControlLayerInfoKHR( uint64_t averageBitrate_ = {}, + uint64_t maxBitrate_ = {}, + uint32_t frameRateNumerator_ = {}, + uint32_t frameRateDenominator_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , averageBitrate{ averageBitrate_ } + , maxBitrate{ maxBitrate_ } + , frameRateNumerator{ frameRateNumerator_ } + , frameRateDenominator{ frameRateDenominator_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeRateControlLayerInfoKHR( VideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeRateControlLayerInfoKHR( VkVideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeRateControlLayerInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeRateControlLayerInfoKHR & operator=( VideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeRateControlLayerInfoKHR & operator=( VkVideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setAverageBitrate( uint64_t averageBitrate_ ) VULKAN_HPP_NOEXCEPT + { + averageBitrate = averageBitrate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setMaxBitrate( uint64_t maxBitrate_ ) VULKAN_HPP_NOEXCEPT + { + maxBitrate = maxBitrate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setFrameRateNumerator( uint32_t frameRateNumerator_ ) VULKAN_HPP_NOEXCEPT + { + frameRateNumerator = frameRateNumerator_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setFrameRateDenominator( uint32_t frameRateDenominator_ ) VULKAN_HPP_NOEXCEPT + { + frameRateDenominator = frameRateDenominator_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeRateControlLayerInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeRateControlLayerInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeRateControlLayerInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeRateControlLayerInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, averageBitrate, maxBitrate, frameRateNumerator, frameRateDenominator ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeRateControlLayerInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeRateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( averageBitrate == rhs.averageBitrate ) && ( maxBitrate == rhs.maxBitrate ) && + ( frameRateNumerator == rhs.frameRateNumerator ) && ( frameRateDenominator == rhs.frameRateDenominator ); +# endif + } + + bool operator!=( VideoEncodeRateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeRateControlLayerInfoKHR; + const void * pNext = {}; + uint64_t averageBitrate = {}; + uint64_t maxBitrate = {}; + uint32_t frameRateNumerator = {}; + uint32_t frameRateDenominator = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeRateControlLayerInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeRateControlInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeRateControlInfoKHR.html + struct VideoEncodeRateControlInfoKHR + { + using NativeType = VkVideoEncodeRateControlInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeRateControlInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeRateControlInfoKHR( + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ = VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eDefault, + uint32_t layerCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayers_ = {}, + uint32_t virtualBufferSizeInMs_ = {}, + uint32_t initialVirtualBufferSizeInMs_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , rateControlMode{ rateControlMode_ } + , layerCount{ layerCount_ } + , pLayers{ pLayers_ } + , virtualBufferSizeInMs{ virtualBufferSizeInMs_ } + , initialVirtualBufferSizeInMs{ initialVirtualBufferSizeInMs_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeRateControlInfoKHR( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeRateControlInfoKHR( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeRateControlInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeRateControlInfoKHR( + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_, + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & layers_, + uint32_t virtualBufferSizeInMs_ = {}, + uint32_t initialVirtualBufferSizeInMs_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , flags( flags_ ) + , rateControlMode( rateControlMode_ ) + , layerCount( static_cast( layers_.size() ) ) + , pLayers( layers_.data() ) + , virtualBufferSizeInMs( virtualBufferSizeInMs_ ) + , initialVirtualBufferSizeInMs( initialVirtualBufferSizeInMs_ ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoEncodeRateControlInfoKHR & operator=( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeRateControlInfoKHR & operator=( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & + setRateControlMode( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ ) VULKAN_HPP_NOEXCEPT + { + rateControlMode = rateControlMode_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = layerCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & + setPLayers( const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayers_ ) VULKAN_HPP_NOEXCEPT + { + pLayers = pLayers_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoEncodeRateControlInfoKHR & setLayers( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & layers_ ) VULKAN_HPP_NOEXCEPT + { + layerCount = static_cast( layers_.size() ); + pLayers = layers_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setVirtualBufferSizeInMs( uint32_t virtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT + { + virtualBufferSizeInMs = virtualBufferSizeInMs_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setInitialVirtualBufferSizeInMs( uint32_t initialVirtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT + { + initialVirtualBufferSizeInMs = initialVirtualBufferSizeInMs_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeRateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeRateControlInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeRateControlInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeRateControlInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, rateControlMode, layerCount, pLayers, virtualBufferSizeInMs, initialVirtualBufferSizeInMs ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeRateControlInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeRateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( rateControlMode == rhs.rateControlMode ) && + ( layerCount == rhs.layerCount ) && ( pLayers == rhs.pLayers ) && ( virtualBufferSizeInMs == rhs.virtualBufferSizeInMs ) && + ( initialVirtualBufferSizeInMs == rhs.initialVirtualBufferSizeInMs ); +# endif + } + + bool operator!=( VideoEncodeRateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeRateControlInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode = VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eDefault; + uint32_t layerCount = {}; + const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayers = {}; + uint32_t virtualBufferSizeInMs = {}; + uint32_t initialVirtualBufferSizeInMs = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeRateControlInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeSessionIntraRefreshCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeSessionIntraRefreshCreateInfoKHR.html + struct VideoEncodeSessionIntraRefreshCreateInfoKHR + { + using NativeType = VkVideoEncodeSessionIntraRefreshCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeSessionIntraRefreshCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeSessionIntraRefreshCreateInfoKHR( + VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode_ = VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagBitsKHR::eNone, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , intraRefreshMode{ intraRefreshMode_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeSessionIntraRefreshCreateInfoKHR( VideoEncodeSessionIntraRefreshCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeSessionIntraRefreshCreateInfoKHR( VkVideoEncodeSessionIntraRefreshCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeSessionIntraRefreshCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeSessionIntraRefreshCreateInfoKHR & operator=( VideoEncodeSessionIntraRefreshCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeSessionIntraRefreshCreateInfoKHR & operator=( VkVideoEncodeSessionIntraRefreshCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeSessionIntraRefreshCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeSessionIntraRefreshCreateInfoKHR & + setIntraRefreshMode( VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode_ ) VULKAN_HPP_NOEXCEPT + { + intraRefreshMode = intraRefreshMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeSessionIntraRefreshCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionIntraRefreshCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionIntraRefreshCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionIntraRefreshCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, intraRefreshMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeSessionIntraRefreshCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeSessionIntraRefreshCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( intraRefreshMode == rhs.intraRefreshMode ); +# endif + } + + bool operator!=( VideoEncodeSessionIntraRefreshCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeSessionIntraRefreshCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode = VULKAN_HPP_NAMESPACE::VideoEncodeIntraRefreshModeFlagBitsKHR::eNone; + }; + + template <> + struct CppType + { + using Type = VideoEncodeSessionIntraRefreshCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeSessionParametersFeedbackInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeSessionParametersFeedbackInfoKHR.html + struct VideoEncodeSessionParametersFeedbackInfoKHR + { + using NativeType = VkVideoEncodeSessionParametersFeedbackInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeSessionParametersFeedbackInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeSessionParametersFeedbackInfoKHR( VULKAN_HPP_NAMESPACE::Bool32 hasOverrides_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , hasOverrides{ hasOverrides_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeSessionParametersFeedbackInfoKHR( VideoEncodeSessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeSessionParametersFeedbackInfoKHR( VkVideoEncodeSessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeSessionParametersFeedbackInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeSessionParametersFeedbackInfoKHR & operator=( VideoEncodeSessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeSessionParametersFeedbackInfoKHR & operator=( VkVideoEncodeSessionParametersFeedbackInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoEncodeSessionParametersFeedbackInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionParametersFeedbackInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionParametersFeedbackInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionParametersFeedbackInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, hasOverrides ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeSessionParametersFeedbackInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeSessionParametersFeedbackInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hasOverrides == rhs.hasOverrides ); +# endif + } + + bool operator!=( VideoEncodeSessionParametersFeedbackInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeSessionParametersFeedbackInfoKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Bool32 hasOverrides = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeSessionParametersFeedbackInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeSessionParametersGetInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeSessionParametersGetInfoKHR.html + struct VideoEncodeSessionParametersGetInfoKHR + { + using NativeType = VkVideoEncodeSessionParametersGetInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeSessionParametersGetInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEncodeSessionParametersGetInfoKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoSessionParameters{ videoSessionParameters_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeSessionParametersGetInfoKHR( VideoEncodeSessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeSessionParametersGetInfoKHR( VkVideoEncodeSessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeSessionParametersGetInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeSessionParametersGetInfoKHR & operator=( VideoEncodeSessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeSessionParametersGetInfoKHR & operator=( VkVideoEncodeSessionParametersGetInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeSessionParametersGetInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeSessionParametersGetInfoKHR & + setVideoSessionParameters( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ ) VULKAN_HPP_NOEXCEPT + { + videoSessionParameters = videoSessionParameters_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeSessionParametersGetInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionParametersGetInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionParametersGetInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeSessionParametersGetInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoSessionParameters ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeSessionParametersGetInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeSessionParametersGetInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoSessionParameters == rhs.videoSessionParameters ); +# endif + } + + bool operator!=( VideoEncodeSessionParametersGetInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeSessionParametersGetInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters = {}; + }; + + template <> + struct CppType + { + using Type = VideoEncodeSessionParametersGetInfoKHR; + }; + + // wrapper struct for struct VkVideoEncodeUsageInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEncodeUsageInfoKHR.html + struct VideoEncodeUsageInfoKHR + { + using NativeType = VkVideoEncodeUsageInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeUsageInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + VideoEncodeUsageInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeUsageFlagsKHR videoUsageHints_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeContentFlagsKHR videoContentHints_ = {}, + VULKAN_HPP_NAMESPACE::VideoEncodeTuningModeKHR tuningMode_ = VULKAN_HPP_NAMESPACE::VideoEncodeTuningModeKHR::eDefault, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , videoUsageHints{ videoUsageHints_ } + , videoContentHints{ videoContentHints_ } + , tuningMode{ tuningMode_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEncodeUsageInfoKHR( VideoEncodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEncodeUsageInfoKHR( VkVideoEncodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEncodeUsageInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEncodeUsageInfoKHR & operator=( VideoEncodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEncodeUsageInfoKHR & operator=( VkVideoEncodeUsageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEncodeUsageInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeUsageInfoKHR & setVideoUsageHints( VULKAN_HPP_NAMESPACE::VideoEncodeUsageFlagsKHR videoUsageHints_ ) VULKAN_HPP_NOEXCEPT + { + videoUsageHints = videoUsageHints_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeUsageInfoKHR & + setVideoContentHints( VULKAN_HPP_NAMESPACE::VideoEncodeContentFlagsKHR videoContentHints_ ) VULKAN_HPP_NOEXCEPT + { + videoContentHints = videoContentHints_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEncodeUsageInfoKHR & setTuningMode( VULKAN_HPP_NAMESPACE::VideoEncodeTuningModeKHR tuningMode_ ) VULKAN_HPP_NOEXCEPT + { + tuningMode = tuningMode_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEncodeUsageInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeUsageInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEncodeUsageInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEncodeUsageInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, videoUsageHints, videoContentHints, tuningMode ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEncodeUsageInfoKHR const & ) const = default; +#else + bool operator==( VideoEncodeUsageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoUsageHints == rhs.videoUsageHints ) && ( videoContentHints == rhs.videoContentHints ) && + ( tuningMode == rhs.tuningMode ); +# endif + } + + bool operator!=( VideoEncodeUsageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeUsageInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeUsageFlagsKHR videoUsageHints = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeContentFlagsKHR videoContentHints = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeTuningModeKHR tuningMode = VULKAN_HPP_NAMESPACE::VideoEncodeTuningModeKHR::eDefault; + }; + + template <> + struct CppType + { + using Type = VideoEncodeUsageInfoKHR; + }; + + // wrapper struct for struct VkVideoEndCodingInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoEndCodingInfoKHR.html + struct VideoEndCodingInfoKHR + { + using NativeType = VkVideoEndCodingInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEndCodingInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoEndCodingInfoKHR( VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoEndCodingInfoKHR( VideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoEndCodingInfoKHR( VkVideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoEndCodingInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoEndCodingInfoKHR & operator=( VideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoEndCodingInfoKHR & operator=( VkVideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoEndCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEndCodingInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoEndCodingInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoEndCodingInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoEndCodingInfoKHR const & ) const = default; +#else + bool operator==( VideoEndCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ); +# endif + } + + bool operator!=( VideoEndCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEndCodingInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags = {}; + }; + + template <> + struct CppType + { + using Type = VideoEndCodingInfoKHR; + }; + + // wrapper struct for struct VkVideoFormatAV1QuantizationMapPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoFormatAV1QuantizationMapPropertiesKHR.html + struct VideoFormatAV1QuantizationMapPropertiesKHR + { + using NativeType = VkVideoFormatAV1QuantizationMapPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatAv1QuantizationMapPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoFormatAV1QuantizationMapPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , compatibleSuperblockSizes{ compatibleSuperblockSizes_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoFormatAV1QuantizationMapPropertiesKHR( VideoFormatAV1QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoFormatAV1QuantizationMapPropertiesKHR( VkVideoFormatAV1QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoFormatAV1QuantizationMapPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoFormatAV1QuantizationMapPropertiesKHR & operator=( VideoFormatAV1QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoFormatAV1QuantizationMapPropertiesKHR & operator=( VkVideoFormatAV1QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoFormatAV1QuantizationMapPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatAV1QuantizationMapPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatAV1QuantizationMapPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoFormatAV1QuantizationMapPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, compatibleSuperblockSizes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoFormatAV1QuantizationMapPropertiesKHR const & ) const = default; +#else + bool operator==( VideoFormatAV1QuantizationMapPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compatibleSuperblockSizes == rhs.compatibleSuperblockSizes ); +# endif + } + + bool operator!=( VideoFormatAV1QuantizationMapPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoFormatAv1QuantizationMapPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes = {}; + }; + + template <> + struct CppType + { + using Type = VideoFormatAV1QuantizationMapPropertiesKHR; + }; + + // wrapper struct for struct VkVideoFormatH265QuantizationMapPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoFormatH265QuantizationMapPropertiesKHR.html + struct VideoFormatH265QuantizationMapPropertiesKHR + { + using NativeType = VkVideoFormatH265QuantizationMapPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatH265QuantizationMapPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoFormatH265QuantizationMapPropertiesKHR( VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , compatibleCtbSizes{ compatibleCtbSizes_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoFormatH265QuantizationMapPropertiesKHR( VideoFormatH265QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoFormatH265QuantizationMapPropertiesKHR( VkVideoFormatH265QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoFormatH265QuantizationMapPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoFormatH265QuantizationMapPropertiesKHR & operator=( VideoFormatH265QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoFormatH265QuantizationMapPropertiesKHR & operator=( VkVideoFormatH265QuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoFormatH265QuantizationMapPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatH265QuantizationMapPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatH265QuantizationMapPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoFormatH265QuantizationMapPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, compatibleCtbSizes ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoFormatH265QuantizationMapPropertiesKHR const & ) const = default; +#else + bool operator==( VideoFormatH265QuantizationMapPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compatibleCtbSizes == rhs.compatibleCtbSizes ); +# endif + } + + bool operator!=( VideoFormatH265QuantizationMapPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoFormatH265QuantizationMapPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes = {}; + }; + + template <> + struct CppType + { + using Type = VideoFormatH265QuantizationMapPropertiesKHR; + }; + + // wrapper struct for struct VkVideoFormatPropertiesKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoFormatPropertiesKHR.html + struct VideoFormatPropertiesKHR + { + using NativeType = VkVideoFormatPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoFormatPropertiesKHR( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::ComponentMapping componentMapping_ = {}, + VULKAN_HPP_NAMESPACE::ImageCreateFlags imageCreateFlags_ = {}, + VULKAN_HPP_NAMESPACE::ImageType imageType_ = VULKAN_HPP_NAMESPACE::ImageType::e1D, + VULKAN_HPP_NAMESPACE::ImageTiling imageTiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal, + VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsageFlags_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , format{ format_ } + , componentMapping{ componentMapping_ } + , imageCreateFlags{ imageCreateFlags_ } + , imageType{ imageType_ } + , imageTiling{ imageTiling_ } + , imageUsageFlags{ imageUsageFlags_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoFormatPropertiesKHR( VideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoFormatPropertiesKHR( VkVideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoFormatPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoFormatPropertiesKHR & operator=( VideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoFormatPropertiesKHR & operator=( VkVideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoFormatPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoFormatPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, format, componentMapping, imageCreateFlags, imageType, imageTiling, imageUsageFlags ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoFormatPropertiesKHR const & ) const = default; +#else + bool operator==( VideoFormatPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( componentMapping == rhs.componentMapping ) && + ( imageCreateFlags == rhs.imageCreateFlags ) && ( imageType == rhs.imageType ) && ( imageTiling == rhs.imageTiling ) && + ( imageUsageFlags == rhs.imageUsageFlags ); +# endif + } + + bool operator!=( VideoFormatPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoFormatPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::ComponentMapping componentMapping = {}; + VULKAN_HPP_NAMESPACE::ImageCreateFlags imageCreateFlags = {}; + VULKAN_HPP_NAMESPACE::ImageType imageType = VULKAN_HPP_NAMESPACE::ImageType::e1D; + VULKAN_HPP_NAMESPACE::ImageTiling imageTiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal; + VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsageFlags = {}; + }; + + template <> + struct CppType + { + using Type = VideoFormatPropertiesKHR; + }; + + // wrapper struct for struct VkVideoFormatQuantizationMapPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoFormatQuantizationMapPropertiesKHR.html + struct VideoFormatQuantizationMapPropertiesKHR + { + using NativeType = VkVideoFormatQuantizationMapPropertiesKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatQuantizationMapPropertiesKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoFormatQuantizationMapPropertiesKHR( VULKAN_HPP_NAMESPACE::Extent2D quantizationMapTexelSize_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , quantizationMapTexelSize{ quantizationMapTexelSize_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoFormatQuantizationMapPropertiesKHR( VideoFormatQuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoFormatQuantizationMapPropertiesKHR( VkVideoFormatQuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoFormatQuantizationMapPropertiesKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoFormatQuantizationMapPropertiesKHR & operator=( VideoFormatQuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoFormatQuantizationMapPropertiesKHR & operator=( VkVideoFormatQuantizationMapPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoFormatQuantizationMapPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatQuantizationMapPropertiesKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoFormatQuantizationMapPropertiesKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoFormatQuantizationMapPropertiesKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, quantizationMapTexelSize ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoFormatQuantizationMapPropertiesKHR const & ) const = default; +#else + bool operator==( VideoFormatQuantizationMapPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( quantizationMapTexelSize == rhs.quantizationMapTexelSize ); +# endif + } + + bool operator!=( VideoFormatQuantizationMapPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoFormatQuantizationMapPropertiesKHR; + void * pNext = {}; + VULKAN_HPP_NAMESPACE::Extent2D quantizationMapTexelSize = {}; + }; + + template <> + struct CppType + { + using Type = VideoFormatQuantizationMapPropertiesKHR; + }; + + // wrapper struct for struct VkVideoInlineQueryInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoInlineQueryInfoKHR.html + struct VideoInlineQueryInfoKHR + { + using NativeType = VkVideoInlineQueryInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoInlineQueryInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoInlineQueryInfoKHR( VULKAN_HPP_NAMESPACE::QueryPool queryPool_ = {}, + uint32_t firstQuery_ = {}, + uint32_t queryCount_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queryPool{ queryPool_ } + , firstQuery{ firstQuery_ } + , queryCount{ queryCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoInlineQueryInfoKHR( VideoInlineQueryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoInlineQueryInfoKHR( VkVideoInlineQueryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoInlineQueryInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoInlineQueryInfoKHR & operator=( VideoInlineQueryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoInlineQueryInfoKHR & operator=( VkVideoInlineQueryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoInlineQueryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoInlineQueryInfoKHR & setQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool_ ) VULKAN_HPP_NOEXCEPT + { + queryPool = queryPool_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoInlineQueryInfoKHR & setFirstQuery( uint32_t firstQuery_ ) VULKAN_HPP_NOEXCEPT + { + firstQuery = firstQuery_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoInlineQueryInfoKHR & setQueryCount( uint32_t queryCount_ ) VULKAN_HPP_NOEXCEPT + { + queryCount = queryCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoInlineQueryInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoInlineQueryInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoInlineQueryInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoInlineQueryInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, queryPool, firstQuery, queryCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoInlineQueryInfoKHR const & ) const = default; +#else + bool operator==( VideoInlineQueryInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queryPool == rhs.queryPool ) && ( firstQuery == rhs.firstQuery ) && + ( queryCount == rhs.queryCount ); +# endif + } + + bool operator!=( VideoInlineQueryInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoInlineQueryInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::QueryPool queryPool = {}; + uint32_t firstQuery = {}; + uint32_t queryCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoInlineQueryInfoKHR; + }; + + // wrapper struct for struct VkVideoProfileListInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoProfileListInfoKHR.html + struct VideoProfileListInfoKHR + { + using NativeType = VkVideoProfileListInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfileListInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoProfileListInfoKHR( uint32_t profileCount_ = {}, + const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pProfiles_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , profileCount{ profileCount_ } + , pProfiles{ pProfiles_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoProfileListInfoKHR( VideoProfileListInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoProfileListInfoKHR( VkVideoProfileListInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoProfileListInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoProfileListInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & profiles_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), profileCount( static_cast( profiles_.size() ) ), pProfiles( profiles_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VideoProfileListInfoKHR & operator=( VideoProfileListInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoProfileListInfoKHR & operator=( VkVideoProfileListInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoProfileListInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoProfileListInfoKHR & setProfileCount( uint32_t profileCount_ ) VULKAN_HPP_NOEXCEPT + { + profileCount = profileCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoProfileListInfoKHR & setPProfiles( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pProfiles_ ) VULKAN_HPP_NOEXCEPT + { + pProfiles = pProfiles_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + VideoProfileListInfoKHR & + setProfiles( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & profiles_ ) VULKAN_HPP_NOEXCEPT + { + profileCount = static_cast( profiles_.size() ); + pProfiles = profiles_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoProfileListInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoProfileListInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoProfileListInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoProfileListInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, profileCount, pProfiles ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoProfileListInfoKHR const & ) const = default; +#else + bool operator==( VideoProfileListInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( profileCount == rhs.profileCount ) && ( pProfiles == rhs.pProfiles ); +# endif + } + + bool operator!=( VideoProfileListInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoProfileListInfoKHR; + const void * pNext = {}; + uint32_t profileCount = {}; + const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pProfiles = {}; + }; + + template <> + struct CppType + { + using Type = VideoProfileListInfoKHR; + }; + + // wrapper struct for struct VkVideoReferenceIntraRefreshInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoReferenceIntraRefreshInfoKHR.html + struct VideoReferenceIntraRefreshInfoKHR + { + using NativeType = VkVideoReferenceIntraRefreshInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoReferenceIntraRefreshInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoReferenceIntraRefreshInfoKHR( uint32_t dirtyIntraRefreshRegions_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dirtyIntraRefreshRegions{ dirtyIntraRefreshRegions_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoReferenceIntraRefreshInfoKHR( VideoReferenceIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoReferenceIntraRefreshInfoKHR( VkVideoReferenceIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoReferenceIntraRefreshInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoReferenceIntraRefreshInfoKHR & operator=( VideoReferenceIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoReferenceIntraRefreshInfoKHR & operator=( VkVideoReferenceIntraRefreshInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoReferenceIntraRefreshInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoReferenceIntraRefreshInfoKHR & setDirtyIntraRefreshRegions( uint32_t dirtyIntraRefreshRegions_ ) VULKAN_HPP_NOEXCEPT + { + dirtyIntraRefreshRegions = dirtyIntraRefreshRegions_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoReferenceIntraRefreshInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoReferenceIntraRefreshInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoReferenceIntraRefreshInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoReferenceIntraRefreshInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dirtyIntraRefreshRegions ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoReferenceIntraRefreshInfoKHR const & ) const = default; +#else + bool operator==( VideoReferenceIntraRefreshInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dirtyIntraRefreshRegions == rhs.dirtyIntraRefreshRegions ); +# endif + } + + bool operator!=( VideoReferenceIntraRefreshInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoReferenceIntraRefreshInfoKHR; + const void * pNext = {}; + uint32_t dirtyIntraRefreshRegions = {}; + }; + + template <> + struct CppType + { + using Type = VideoReferenceIntraRefreshInfoKHR; + }; + + // wrapper struct for struct VkVideoSessionCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionCreateInfoKHR.html + struct VideoSessionCreateInfoKHR + { + using NativeType = VkVideoSessionCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR( uint32_t queueFamilyIndex_ = {}, + VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags_ = {}, + const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pVideoProfile_ = {}, + VULKAN_HPP_NAMESPACE::Format pictureFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + VULKAN_HPP_NAMESPACE::Extent2D maxCodedExtent_ = {}, + VULKAN_HPP_NAMESPACE::Format referencePictureFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined, + uint32_t maxDpbSlots_ = {}, + uint32_t maxActiveReferencePictures_ = {}, + const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdHeaderVersion_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , queueFamilyIndex{ queueFamilyIndex_ } + , flags{ flags_ } + , pVideoProfile{ pVideoProfile_ } + , pictureFormat{ pictureFormat_ } + , maxCodedExtent{ maxCodedExtent_ } + , referencePictureFormat{ referencePictureFormat_ } + , maxDpbSlots{ maxDpbSlots_ } + , maxActiveReferencePictures{ maxActiveReferencePictures_ } + , pStdHeaderVersion{ pStdHeaderVersion_ } + { + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR( VideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoSessionCreateInfoKHR( VkVideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoSessionCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoSessionCreateInfoKHR & operator=( VideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoSessionCreateInfoKHR & operator=( VkVideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT + { + queueFamilyIndex = queueFamilyIndex_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPVideoProfile( const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pVideoProfile_ ) VULKAN_HPP_NOEXCEPT + { + pVideoProfile = pVideoProfile_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPictureFormat( VULKAN_HPP_NAMESPACE::Format pictureFormat_ ) VULKAN_HPP_NOEXCEPT + { + pictureFormat = pictureFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setMaxCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & maxCodedExtent_ ) VULKAN_HPP_NOEXCEPT + { + maxCodedExtent = maxCodedExtent_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setReferencePictureFormat( VULKAN_HPP_NAMESPACE::Format referencePictureFormat_ ) VULKAN_HPP_NOEXCEPT + { + referencePictureFormat = referencePictureFormat_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setMaxDpbSlots( uint32_t maxDpbSlots_ ) VULKAN_HPP_NOEXCEPT + { + maxDpbSlots = maxDpbSlots_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setMaxActiveReferencePictures( uint32_t maxActiveReferencePictures_ ) VULKAN_HPP_NOEXCEPT + { + maxActiveReferencePictures = maxActiveReferencePictures_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & + setPStdHeaderVersion( const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdHeaderVersion_ ) VULKAN_HPP_NOEXCEPT + { + pStdHeaderVersion = pStdHeaderVersion_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoSessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoSessionCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, + pNext, + queueFamilyIndex, + flags, + pVideoProfile, + pictureFormat, + maxCodedExtent, + referencePictureFormat, + maxDpbSlots, + maxActiveReferencePictures, + pStdHeaderVersion ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoSessionCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoSessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) && ( flags == rhs.flags ) && + ( pVideoProfile == rhs.pVideoProfile ) && ( pictureFormat == rhs.pictureFormat ) && ( maxCodedExtent == rhs.maxCodedExtent ) && + ( referencePictureFormat == rhs.referencePictureFormat ) && ( maxDpbSlots == rhs.maxDpbSlots ) && + ( maxActiveReferencePictures == rhs.maxActiveReferencePictures ) && ( pStdHeaderVersion == rhs.pStdHeaderVersion ); +# endif + } + + bool operator!=( VideoSessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionCreateInfoKHR; + const void * pNext = {}; + uint32_t queueFamilyIndex = {}; + VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags = {}; + const VULKAN_HPP_NAMESPACE::VideoProfileInfoKHR * pVideoProfile = {}; + VULKAN_HPP_NAMESPACE::Format pictureFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + VULKAN_HPP_NAMESPACE::Extent2D maxCodedExtent = {}; + VULKAN_HPP_NAMESPACE::Format referencePictureFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined; + uint32_t maxDpbSlots = {}; + uint32_t maxActiveReferencePictures = {}; + const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdHeaderVersion = {}; + }; + + template <> + struct CppType + { + using Type = VideoSessionCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoSessionMemoryRequirementsKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionMemoryRequirementsKHR.html + struct VideoSessionMemoryRequirementsKHR + { + using NativeType = VkVideoSessionMemoryRequirementsKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionMemoryRequirementsKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoSessionMemoryRequirementsKHR( uint32_t memoryBindIndex_ = {}, + VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , memoryBindIndex{ memoryBindIndex_ } + , memoryRequirements{ memoryRequirements_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoSessionMemoryRequirementsKHR( VideoSessionMemoryRequirementsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoSessionMemoryRequirementsKHR( VkVideoSessionMemoryRequirementsKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoSessionMemoryRequirementsKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoSessionMemoryRequirementsKHR & operator=( VideoSessionMemoryRequirementsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoSessionMemoryRequirementsKHR & operator=( VkVideoSessionMemoryRequirementsKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + + operator VkVideoSessionMemoryRequirementsKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionMemoryRequirementsKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionMemoryRequirementsKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoSessionMemoryRequirementsKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, memoryBindIndex, memoryRequirements ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoSessionMemoryRequirementsKHR const & ) const = default; +#else + bool operator==( VideoSessionMemoryRequirementsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryBindIndex == rhs.memoryBindIndex ) && ( memoryRequirements == rhs.memoryRequirements ); +# endif + } + + bool operator!=( VideoSessionMemoryRequirementsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionMemoryRequirementsKHR; + void * pNext = {}; + uint32_t memoryBindIndex = {}; + VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements = {}; + }; + + template <> + struct CppType + { + using Type = VideoSessionMemoryRequirementsKHR; + }; + + // wrapper struct for struct VkVideoSessionParametersCreateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionParametersCreateInfoKHR.html + struct VideoSessionParametersCreateInfoKHR + { + using NativeType = VkVideoSessionParametersCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionParametersCreateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoSessionParametersCreateInfoKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateFlagsKHR flags_ = {}, + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate_ = {}, + VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , videoSessionParametersTemplate{ videoSessionParametersTemplate_ } + , videoSession{ videoSession_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoSessionParametersCreateInfoKHR( VideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoSessionParametersCreateInfoKHR( VkVideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoSessionParametersCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoSessionParametersCreateInfoKHR & operator=( VideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoSessionParametersCreateInfoKHR & operator=( VkVideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & + setFlags( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & + setVideoSessionParametersTemplate( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate_ ) VULKAN_HPP_NOEXCEPT + { + videoSessionParametersTemplate = videoSessionParametersTemplate_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT + { + videoSession = videoSession_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoSessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionParametersCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoSessionParametersCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, videoSessionParametersTemplate, videoSession ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoSessionParametersCreateInfoKHR const & ) const = default; +#else + bool operator==( VideoSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && + ( videoSessionParametersTemplate == rhs.videoSessionParametersTemplate ) && ( videoSession == rhs.videoSession ); +# endif + } + + bool operator!=( VideoSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionParametersCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateFlagsKHR flags = {}; + VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate = {}; + VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession = {}; + }; + + template <> + struct CppType + { + using Type = VideoSessionParametersCreateInfoKHR; + }; + + // wrapper struct for struct VkVideoSessionParametersUpdateInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkVideoSessionParametersUpdateInfoKHR.html + struct VideoSessionParametersUpdateInfoKHR + { + using NativeType = VkVideoSessionParametersUpdateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionParametersUpdateInfoKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR VideoSessionParametersUpdateInfoKHR( uint32_t updateSequenceCount_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , updateSequenceCount{ updateSequenceCount_ } + { + } + + VULKAN_HPP_CONSTEXPR VideoSessionParametersUpdateInfoKHR( VideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + VideoSessionParametersUpdateInfoKHR( VkVideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : VideoSessionParametersUpdateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + VideoSessionParametersUpdateInfoKHR & operator=( VideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + VideoSessionParametersUpdateInfoKHR & operator=( VkVideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR & setUpdateSequenceCount( uint32_t updateSequenceCount_ ) VULKAN_HPP_NOEXCEPT + { + updateSequenceCount = updateSequenceCount_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkVideoSessionParametersUpdateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionParametersUpdateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkVideoSessionParametersUpdateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkVideoSessionParametersUpdateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, updateSequenceCount ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( VideoSessionParametersUpdateInfoKHR const & ) const = default; +#else + bool operator==( VideoSessionParametersUpdateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( updateSequenceCount == rhs.updateSequenceCount ); +# endif + } + + bool operator!=( VideoSessionParametersUpdateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoSessionParametersUpdateInfoKHR; + const void * pNext = {}; + uint32_t updateSequenceCount = {}; + }; + + template <> + struct CppType + { + using Type = VideoSessionParametersUpdateInfoKHR; + }; + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + // wrapper struct for struct VkWaylandSurfaceCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkWaylandSurfaceCreateInfoKHR.html + struct WaylandSurfaceCreateInfoKHR + { + using NativeType = VkWaylandSurfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWaylandSurfaceCreateInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WaylandSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ = {}, + struct wl_display * display_ = {}, + struct wl_surface * surface_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , display{ display_ } + , surface{ surface_ } + { + } + + VULKAN_HPP_CONSTEXPR WaylandSurfaceCreateInfoKHR( WaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WaylandSurfaceCreateInfoKHR( VkWaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : WaylandSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + WaylandSurfaceCreateInfoKHR & operator=( WaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WaylandSurfaceCreateInfoKHR & operator=( VkWaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setDisplay( struct wl_display * display_ ) VULKAN_HPP_NOEXCEPT + { + display = display_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setSurface( struct wl_surface * surface_ ) VULKAN_HPP_NOEXCEPT + { + surface = surface_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWaylandSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWaylandSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWaylandSurfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWaylandSurfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, display, surface ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WaylandSurfaceCreateInfoKHR const & ) const = default; +# else + bool operator==( WaylandSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( display == rhs.display ) && ( surface == rhs.surface ); +# endif + } + + bool operator!=( WaylandSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWaylandSurfaceCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags = {}; + struct wl_display * display = {}; + struct wl_surface * surface = {}; + }; + + template <> + struct CppType + { + using Type = WaylandSurfaceCreateInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkWin32KeyedMutexAcquireReleaseInfoKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWin32KeyedMutexAcquireReleaseInfoKHR.html + struct Win32KeyedMutexAcquireReleaseInfoKHR + { + using NativeType = VkWin32KeyedMutexAcquireReleaseInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoKHR( uint32_t acquireCount_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ = {}, + const uint64_t * pAcquireKeys_ = {}, + const uint32_t * pAcquireTimeouts_ = {}, + uint32_t releaseCount_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ = {}, + const uint64_t * pReleaseKeys_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , acquireCount{ acquireCount_ } + , pAcquireSyncs{ pAcquireSyncs_ } + , pAcquireKeys{ pAcquireKeys_ } + , pAcquireTimeouts{ pAcquireTimeouts_ } + , releaseCount{ releaseCount_ } + , pReleaseSyncs{ pReleaseSyncs_ } + , pReleaseKeys{ pReleaseKeys_ } + { + } + + VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoKHR( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Win32KeyedMutexAcquireReleaseInfoKHR( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : Win32KeyedMutexAcquireReleaseInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoKHR( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeouts_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , acquireCount( static_cast( acquireSyncs_.size() ) ) + , pAcquireSyncs( acquireSyncs_.data() ) + , pAcquireKeys( acquireKeys_.data() ) + , pAcquireTimeouts( acquireTimeouts_.data() ) + , releaseCount( static_cast( releaseSyncs_.size() ) ) + , pReleaseSyncs( releaseSyncs_.data() ) + , pReleaseKeys( releaseKeys_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireKeys_.size() ); + VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireTimeouts_.size() ); + VULKAN_HPP_ASSERT( acquireKeys_.size() == acquireTimeouts_.size() ); +# else + if ( acquireSyncs_.size() != acquireKeys_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: acquireSyncs_.size() != acquireKeys_.size()" ); + } + if ( acquireSyncs_.size() != acquireTimeouts_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: acquireSyncs_.size() != acquireTimeouts_.size()" ); + } + if ( acquireKeys_.size() != acquireTimeouts_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: acquireKeys_.size() != acquireTimeouts_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( releaseSyncs_.size() == releaseKeys_.size() ); +# else + if ( releaseSyncs_.size() != releaseKeys_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoKHR::Win32KeyedMutexAcquireReleaseInfoKHR: releaseSyncs_.size() != releaseKeys_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + Win32KeyedMutexAcquireReleaseInfoKHR & operator=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Win32KeyedMutexAcquireReleaseInfoKHR & operator=( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = acquireCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & + setPAcquireSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ ) VULKAN_HPP_NOEXCEPT + { + pAcquireSyncs = pAcquireSyncs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoKHR & + setAcquireSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = static_cast( acquireSyncs_.size() ); + pAcquireSyncs = acquireSyncs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT + { + pAcquireKeys = pAcquireKeys_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoKHR & + setAcquireKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = static_cast( acquireKeys_.size() ); + pAcquireKeys = acquireKeys_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPAcquireTimeouts( const uint32_t * pAcquireTimeouts_ ) VULKAN_HPP_NOEXCEPT + { + pAcquireTimeouts = pAcquireTimeouts_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoKHR & + setAcquireTimeouts( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeouts_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = static_cast( acquireTimeouts_.size() ); + pAcquireTimeouts = acquireTimeouts_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT + { + releaseCount = releaseCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & + setPReleaseSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ ) VULKAN_HPP_NOEXCEPT + { + pReleaseSyncs = pReleaseSyncs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoKHR & + setReleaseSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ ) VULKAN_HPP_NOEXCEPT + { + releaseCount = static_cast( releaseSyncs_.size() ); + pReleaseSyncs = releaseSyncs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT + { + pReleaseKeys = pReleaseKeys_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoKHR & + setReleaseKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ ) VULKAN_HPP_NOEXCEPT + { + releaseCount = static_cast( releaseKeys_.size() ); + pReleaseKeys = releaseKeys_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWin32KeyedMutexAcquireReleaseInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWin32KeyedMutexAcquireReleaseInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWin32KeyedMutexAcquireReleaseInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWin32KeyedMutexAcquireReleaseInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, acquireCount, pAcquireSyncs, pAcquireKeys, pAcquireTimeouts, releaseCount, pReleaseSyncs, pReleaseKeys ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Win32KeyedMutexAcquireReleaseInfoKHR const & ) const = default; +# else + bool operator==( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireCount == rhs.acquireCount ) && ( pAcquireSyncs == rhs.pAcquireSyncs ) && + ( pAcquireKeys == rhs.pAcquireKeys ) && ( pAcquireTimeouts == rhs.pAcquireTimeouts ) && ( releaseCount == rhs.releaseCount ) && + ( pReleaseSyncs == rhs.pReleaseSyncs ) && ( pReleaseKeys == rhs.pReleaseKeys ); +# endif + } + + bool operator!=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR; + const void * pNext = {}; + uint32_t acquireCount = {}; + const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs = {}; + const uint64_t * pAcquireKeys = {}; + const uint32_t * pAcquireTimeouts = {}; + uint32_t releaseCount = {}; + const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs = {}; + const uint64_t * pReleaseKeys = {}; + }; + + template <> + struct CppType + { + using Type = Win32KeyedMutexAcquireReleaseInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkWin32KeyedMutexAcquireReleaseInfoNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWin32KeyedMutexAcquireReleaseInfoNV.html + struct Win32KeyedMutexAcquireReleaseInfoNV + { + using NativeType = VkWin32KeyedMutexAcquireReleaseInfoNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32KeyedMutexAcquireReleaseInfoNV; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoNV( uint32_t acquireCount_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ = {}, + const uint64_t * pAcquireKeys_ = {}, + const uint32_t * pAcquireTimeoutMilliseconds_ = {}, + uint32_t releaseCount_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ = {}, + const uint64_t * pReleaseKeys_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , acquireCount{ acquireCount_ } + , pAcquireSyncs{ pAcquireSyncs_ } + , pAcquireKeys{ pAcquireKeys_ } + , pAcquireTimeoutMilliseconds{ pAcquireTimeoutMilliseconds_ } + , releaseCount{ releaseCount_ } + , pReleaseSyncs{ pReleaseSyncs_ } + , pReleaseKeys{ pReleaseKeys_ } + { + } + + VULKAN_HPP_CONSTEXPR Win32KeyedMutexAcquireReleaseInfoNV( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Win32KeyedMutexAcquireReleaseInfoNV( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + : Win32KeyedMutexAcquireReleaseInfoNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoNV( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeoutMilliseconds_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ = {}, + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ = {}, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , acquireCount( static_cast( acquireSyncs_.size() ) ) + , pAcquireSyncs( acquireSyncs_.data() ) + , pAcquireKeys( acquireKeys_.data() ) + , pAcquireTimeoutMilliseconds( acquireTimeoutMilliseconds_.data() ) + , releaseCount( static_cast( releaseSyncs_.size() ) ) + , pReleaseSyncs( releaseSyncs_.data() ) + , pReleaseKeys( releaseKeys_.data() ) + { +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireKeys_.size() ); + VULKAN_HPP_ASSERT( acquireSyncs_.size() == acquireTimeoutMilliseconds_.size() ); + VULKAN_HPP_ASSERT( acquireKeys_.size() == acquireTimeoutMilliseconds_.size() ); +# else + if ( acquireSyncs_.size() != acquireKeys_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: acquireSyncs_.size() != acquireKeys_.size()" ); + } + if ( acquireSyncs_.size() != acquireTimeoutMilliseconds_.size() ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: acquireSyncs_.size() != acquireTimeoutMilliseconds_.size()" ); + } + if ( acquireKeys_.size() != acquireTimeoutMilliseconds_.size() ) + { + throw LogicError( + VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: acquireKeys_.size() != acquireTimeoutMilliseconds_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + +# ifdef VULKAN_HPP_NO_EXCEPTIONS + VULKAN_HPP_ASSERT( releaseSyncs_.size() == releaseKeys_.size() ); +# else + if ( releaseSyncs_.size() != releaseKeys_.size() ) + { + throw LogicError( VULKAN_HPP_NAMESPACE_STRING + "::Win32KeyedMutexAcquireReleaseInfoNV::Win32KeyedMutexAcquireReleaseInfoNV: releaseSyncs_.size() != releaseKeys_.size()" ); + } +# endif /*VULKAN_HPP_NO_EXCEPTIONS*/ + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + Win32KeyedMutexAcquireReleaseInfoNV & operator=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Win32KeyedMutexAcquireReleaseInfoNV & operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = acquireCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & + setPAcquireSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ ) VULKAN_HPP_NOEXCEPT + { + pAcquireSyncs = pAcquireSyncs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoNV & + setAcquireSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireSyncs_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = static_cast( acquireSyncs_.size() ); + pAcquireSyncs = acquireSyncs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT + { + pAcquireKeys = pAcquireKeys_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoNV & + setAcquireKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireKeys_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = static_cast( acquireKeys_.size() ); + pAcquireKeys = acquireKeys_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & + setPAcquireTimeoutMilliseconds( const uint32_t * pAcquireTimeoutMilliseconds_ ) VULKAN_HPP_NOEXCEPT + { + pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoNV & + setAcquireTimeoutMilliseconds( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & acquireTimeoutMilliseconds_ ) VULKAN_HPP_NOEXCEPT + { + acquireCount = static_cast( acquireTimeoutMilliseconds_.size() ); + pAcquireTimeoutMilliseconds = acquireTimeoutMilliseconds_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT + { + releaseCount = releaseCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & + setPReleaseSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ ) VULKAN_HPP_NOEXCEPT + { + pReleaseSyncs = pReleaseSyncs_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoNV & + setReleaseSyncs( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseSyncs_ ) VULKAN_HPP_NOEXCEPT + { + releaseCount = static_cast( releaseSyncs_.size() ); + pReleaseSyncs = releaseSyncs_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT + { + pReleaseKeys = pReleaseKeys_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + Win32KeyedMutexAcquireReleaseInfoNV & + setReleaseKeys( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & releaseKeys_ ) VULKAN_HPP_NOEXCEPT + { + releaseCount = static_cast( releaseKeys_.size() ); + pReleaseKeys = releaseKeys_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWin32KeyedMutexAcquireReleaseInfoNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWin32KeyedMutexAcquireReleaseInfoNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWin32KeyedMutexAcquireReleaseInfoNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWin32KeyedMutexAcquireReleaseInfoNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, acquireCount, pAcquireSyncs, pAcquireKeys, pAcquireTimeoutMilliseconds, releaseCount, pReleaseSyncs, pReleaseKeys ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Win32KeyedMutexAcquireReleaseInfoNV const & ) const = default; +# else + bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireCount == rhs.acquireCount ) && ( pAcquireSyncs == rhs.pAcquireSyncs ) && + ( pAcquireKeys == rhs.pAcquireKeys ) && ( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds ) && + ( releaseCount == rhs.releaseCount ) && ( pReleaseSyncs == rhs.pReleaseSyncs ) && ( pReleaseKeys == rhs.pReleaseKeys ); +# endif + } + + bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWin32KeyedMutexAcquireReleaseInfoNV; + const void * pNext = {}; + uint32_t acquireCount = {}; + const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs = {}; + const uint64_t * pAcquireKeys = {}; + const uint32_t * pAcquireTimeoutMilliseconds = {}; + uint32_t releaseCount = {}; + const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs = {}; + const uint64_t * pReleaseKeys = {}; + }; + + template <> + struct CppType + { + using Type = Win32KeyedMutexAcquireReleaseInfoNV; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + // wrapper struct for struct VkWin32SurfaceCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkWin32SurfaceCreateInfoKHR.html + struct Win32SurfaceCreateInfoKHR + { + using NativeType = VkWin32SurfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32SurfaceCreateInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR Win32SurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ = {}, + HINSTANCE hinstance_ = {}, + HWND hwnd_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , hinstance{ hinstance_ } + , hwnd{ hwnd_ } + { + } + + VULKAN_HPP_CONSTEXPR Win32SurfaceCreateInfoKHR( Win32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + Win32SurfaceCreateInfoKHR( VkWin32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : Win32SurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + Win32SurfaceCreateInfoKHR & operator=( Win32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + Win32SurfaceCreateInfoKHR & operator=( VkWin32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setHinstance( HINSTANCE hinstance_ ) VULKAN_HPP_NOEXCEPT + { + hinstance = hinstance_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setHwnd( HWND hwnd_ ) VULKAN_HPP_NOEXCEPT + { + hwnd = hwnd_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWin32SurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWin32SurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWin32SurfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWin32SurfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, hinstance, hwnd ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( Win32SurfaceCreateInfoKHR const & ) const = default; +# else + bool operator==( Win32SurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( hinstance == rhs.hinstance ) && ( hwnd == rhs.hwnd ); +# endif + } + + bool operator!=( Win32SurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +# endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWin32SurfaceCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags = {}; + HINSTANCE hinstance = {}; + HWND hwnd = {}; + }; + + template <> + struct CppType + { + using Type = Win32SurfaceCreateInfoKHR; + }; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + // wrapper struct for struct VkWriteDescriptorSetAccelerationStructureKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteDescriptorSetAccelerationStructureKHR.html + struct WriteDescriptorSetAccelerationStructureKHR + { + using NativeType = VkWriteDescriptorSetAccelerationStructureKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetAccelerationStructureKHR; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureKHR( uint32_t accelerationStructureCount_ = {}, + const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructureCount{ accelerationStructureCount_ } + , pAccelerationStructures{ pAccelerationStructures_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureKHR( WriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteDescriptorSetAccelerationStructureKHR( VkWriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteDescriptorSetAccelerationStructureKHR( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetAccelerationStructureKHR( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , accelerationStructureCount( static_cast( accelerationStructures_.size() ) ) + , pAccelerationStructures( accelerationStructures_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + WriteDescriptorSetAccelerationStructureKHR & operator=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteDescriptorSetAccelerationStructureKHR & operator=( VkWriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & + setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCount = accelerationStructureCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & + setPAccelerationStructures( const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT + { + pAccelerationStructures = pAccelerationStructures_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetAccelerationStructureKHR & setAccelerationStructures( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCount = static_cast( accelerationStructures_.size() ); + pAccelerationStructures = accelerationStructures_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteDescriptorSetAccelerationStructureKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetAccelerationStructureKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetAccelerationStructureKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetAccelerationStructureKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteDescriptorSetAccelerationStructureKHR const & ) const = default; +#else + bool operator==( WriteDescriptorSetAccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureCount == rhs.accelerationStructureCount ) && + ( pAccelerationStructures == rhs.pAccelerationStructures ); +# endif + } + + bool operator!=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetAccelerationStructureKHR; + const void * pNext = {}; + uint32_t accelerationStructureCount = {}; + const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures = {}; + }; + + template <> + struct CppType + { + using Type = WriteDescriptorSetAccelerationStructureKHR; + }; + + // wrapper struct for struct VkWriteDescriptorSetAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteDescriptorSetAccelerationStructureNV.html + struct WriteDescriptorSetAccelerationStructureNV + { + using NativeType = VkWriteDescriptorSetAccelerationStructureNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetAccelerationStructureNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureNV( uint32_t accelerationStructureCount_ = {}, + const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructureCount{ accelerationStructureCount_ } + , pAccelerationStructures{ pAccelerationStructures_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteDescriptorSetAccelerationStructureNV( WriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteDescriptorSetAccelerationStructureNV( VkWriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteDescriptorSetAccelerationStructureNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetAccelerationStructureNV( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ) + , accelerationStructureCount( static_cast( accelerationStructures_.size() ) ) + , pAccelerationStructures( accelerationStructures_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + WriteDescriptorSetAccelerationStructureNV & operator=( WriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteDescriptorSetAccelerationStructureNV & operator=( VkWriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & + setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCount = accelerationStructureCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & + setPAccelerationStructures( const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT + { + pAccelerationStructures = pAccelerationStructures_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetAccelerationStructureNV & setAccelerationStructures( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCount = static_cast( accelerationStructures_.size() ); + pAccelerationStructures = accelerationStructures_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteDescriptorSetAccelerationStructureNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetAccelerationStructureNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetAccelerationStructureNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetAccelerationStructureNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std:: + tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteDescriptorSetAccelerationStructureNV const & ) const = default; +#else + bool operator==( WriteDescriptorSetAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureCount == rhs.accelerationStructureCount ) && + ( pAccelerationStructures == rhs.pAccelerationStructures ); +# endif + } + + bool operator!=( WriteDescriptorSetAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetAccelerationStructureNV; + const void * pNext = {}; + uint32_t accelerationStructureCount = {}; + const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures = {}; + }; + + template <> + struct CppType + { + using Type = WriteDescriptorSetAccelerationStructureNV; + }; + + // wrapper struct for struct VkWriteDescriptorSetInlineUniformBlock, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteDescriptorSetInlineUniformBlock.html + struct WriteDescriptorSetInlineUniformBlock + { + using NativeType = VkWriteDescriptorSetInlineUniformBlock; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetInlineUniformBlock; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR + WriteDescriptorSetInlineUniformBlock( uint32_t dataSize_ = {}, const void * pData_ = {}, const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , dataSize{ dataSize_ } + , pData{ pData_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteDescriptorSetInlineUniformBlock( WriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteDescriptorSetInlineUniformBlock( VkWriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteDescriptorSetInlineUniformBlock( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + WriteDescriptorSetInlineUniformBlock( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_, const void * pNext_ = nullptr ) + : pNext( pNext_ ), dataSize( static_cast( data_.size() * sizeof( T ) ) ), pData( data_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + WriteDescriptorSetInlineUniformBlock & operator=( WriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteDescriptorSetInlineUniformBlock & operator=( VkWriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setDataSize( uint32_t dataSize_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = dataSize_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT + { + pData = pData_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + template + WriteDescriptorSetInlineUniformBlock & setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & data_ ) VULKAN_HPP_NOEXCEPT + { + dataSize = static_cast( data_.size() * sizeof( T ) ); + pData = data_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteDescriptorSetInlineUniformBlock const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetInlineUniformBlock &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetInlineUniformBlock const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetInlineUniformBlock *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, dataSize, pData ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteDescriptorSetInlineUniformBlock const & ) const = default; +#else + bool operator==( WriteDescriptorSetInlineUniformBlock const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData ); +# endif + } + + bool operator!=( WriteDescriptorSetInlineUniformBlock const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetInlineUniformBlock; + const void * pNext = {}; + uint32_t dataSize = {}; + const void * pData = {}; + }; + + template <> + struct CppType + { + using Type = WriteDescriptorSetInlineUniformBlock; + }; + + using WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlock; + + // wrapper struct for struct VkWriteDescriptorSetPartitionedAccelerationStructureNV, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteDescriptorSetPartitionedAccelerationStructureNV.html + struct WriteDescriptorSetPartitionedAccelerationStructureNV + { + using NativeType = VkWriteDescriptorSetPartitionedAccelerationStructureNV; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetPartitionedAccelerationStructureNV; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteDescriptorSetPartitionedAccelerationStructureNV( uint32_t accelerationStructureCount_ = {}, + const VULKAN_HPP_NAMESPACE::DeviceAddress * pAccelerationStructures_ = {}, + void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , accelerationStructureCount{ accelerationStructureCount_ } + , pAccelerationStructures{ pAccelerationStructures_ } + { + } + + VULKAN_HPP_CONSTEXPR + WriteDescriptorSetPartitionedAccelerationStructureNV( WriteDescriptorSetPartitionedAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteDescriptorSetPartitionedAccelerationStructureNV( VkWriteDescriptorSetPartitionedAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteDescriptorSetPartitionedAccelerationStructureNV( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetPartitionedAccelerationStructureNV( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_, void * pNext_ = nullptr ) + : pNext( pNext_ ) + , accelerationStructureCount( static_cast( accelerationStructures_.size() ) ) + , pAccelerationStructures( accelerationStructures_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + WriteDescriptorSetPartitionedAccelerationStructureNV & + operator=( WriteDescriptorSetPartitionedAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteDescriptorSetPartitionedAccelerationStructureNV & operator=( VkWriteDescriptorSetPartitionedAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetPartitionedAccelerationStructureNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetPartitionedAccelerationStructureNV & + setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCount = accelerationStructureCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetPartitionedAccelerationStructureNV & + setPAccelerationStructures( const VULKAN_HPP_NAMESPACE::DeviceAddress * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT + { + pAccelerationStructures = pAccelerationStructures_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetPartitionedAccelerationStructureNV & setAccelerationStructures( + VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & accelerationStructures_ ) VULKAN_HPP_NOEXCEPT + { + accelerationStructureCount = static_cast( accelerationStructures_.size() ); + pAccelerationStructures = accelerationStructures_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteDescriptorSetPartitionedAccelerationStructureNV const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetPartitionedAccelerationStructureNV &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetPartitionedAccelerationStructureNV const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetPartitionedAccelerationStructureNV *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteDescriptorSetPartitionedAccelerationStructureNV const & ) const = default; +#else + bool operator==( WriteDescriptorSetPartitionedAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructureCount == rhs.accelerationStructureCount ) && + ( pAccelerationStructures == rhs.pAccelerationStructures ); +# endif + } + + bool operator!=( WriteDescriptorSetPartitionedAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetPartitionedAccelerationStructureNV; + void * pNext = {}; + uint32_t accelerationStructureCount = {}; + const VULKAN_HPP_NAMESPACE::DeviceAddress * pAccelerationStructures = {}; + }; + + template <> + struct CppType + { + using Type = WriteDescriptorSetPartitionedAccelerationStructureNV; + }; + + // wrapper struct for struct VkWriteDescriptorSetTensorARM, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteDescriptorSetTensorARM.html + struct WriteDescriptorSetTensorARM + { + using NativeType = VkWriteDescriptorSetTensorARM; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSetTensorARM; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteDescriptorSetTensorARM( uint32_t tensorViewCount_ = {}, + const VULKAN_HPP_NAMESPACE::TensorViewARM * pTensorViews_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , tensorViewCount{ tensorViewCount_ } + , pTensorViews{ pTensorViews_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteDescriptorSetTensorARM( WriteDescriptorSetTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteDescriptorSetTensorARM( VkWriteDescriptorSetTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteDescriptorSetTensorARM( *reinterpret_cast( &rhs ) ) + { + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetTensorARM( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tensorViews_, + const void * pNext_ = nullptr ) + : pNext( pNext_ ), tensorViewCount( static_cast( tensorViews_.size() ) ), pTensorViews( tensorViews_.data() ) + { + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ + + WriteDescriptorSetTensorARM & operator=( WriteDescriptorSetTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteDescriptorSetTensorARM & operator=( VkWriteDescriptorSetTensorARM const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetTensorARM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetTensorARM & setTensorViewCount( uint32_t tensorViewCount_ ) VULKAN_HPP_NOEXCEPT + { + tensorViewCount = tensorViewCount_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetTensorARM & setPTensorViews( const VULKAN_HPP_NAMESPACE::TensorViewARM * pTensorViews_ ) VULKAN_HPP_NOEXCEPT + { + pTensorViews = pTensorViews_; + return *this; + } + +# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + WriteDescriptorSetTensorARM & + setTensorViews( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries const & tensorViews_ ) VULKAN_HPP_NOEXCEPT + { + tensorViewCount = static_cast( tensorViews_.size() ); + pTensorViews = tensorViews_.data(); + return *this; + } +# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteDescriptorSetTensorARM const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetTensorARM &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetTensorARM const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteDescriptorSetTensorARM *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, tensorViewCount, pTensorViews ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteDescriptorSetTensorARM const & ) const = default; +#else + bool operator==( WriteDescriptorSetTensorARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tensorViewCount == rhs.tensorViewCount ) && ( pTensorViews == rhs.pTensorViews ); +# endif + } + + bool operator!=( WriteDescriptorSetTensorARM const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetTensorARM; + const void * pNext = {}; + uint32_t tensorViewCount = {}; + const VULKAN_HPP_NAMESPACE::TensorViewARM * pTensorViews = {}; + }; + + template <> + struct CppType + { + using Type = WriteDescriptorSetTensorARM; + }; + + // wrapper struct for struct VkWriteIndirectExecutionSetPipelineEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteIndirectExecutionSetPipelineEXT.html + struct WriteIndirectExecutionSetPipelineEXT + { + using NativeType = VkWriteIndirectExecutionSetPipelineEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteIndirectExecutionSetPipelineEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteIndirectExecutionSetPipelineEXT( uint32_t index_ = {}, + VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , index{ index_ } + , pipeline{ pipeline_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteIndirectExecutionSetPipelineEXT( WriteIndirectExecutionSetPipelineEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteIndirectExecutionSetPipelineEXT( VkWriteIndirectExecutionSetPipelineEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteIndirectExecutionSetPipelineEXT( *reinterpret_cast( &rhs ) ) + { + } + + WriteIndirectExecutionSetPipelineEXT & operator=( WriteIndirectExecutionSetPipelineEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteIndirectExecutionSetPipelineEXT & operator=( VkWriteIndirectExecutionSetPipelineEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteIndirectExecutionSetPipelineEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteIndirectExecutionSetPipelineEXT & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT + { + index = index_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteIndirectExecutionSetPipelineEXT & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT + { + pipeline = pipeline_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteIndirectExecutionSetPipelineEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteIndirectExecutionSetPipelineEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteIndirectExecutionSetPipelineEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteIndirectExecutionSetPipelineEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, index, pipeline ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteIndirectExecutionSetPipelineEXT const & ) const = default; +#else + bool operator==( WriteIndirectExecutionSetPipelineEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( index == rhs.index ) && ( pipeline == rhs.pipeline ); +# endif + } + + bool operator!=( WriteIndirectExecutionSetPipelineEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteIndirectExecutionSetPipelineEXT; + const void * pNext = {}; + uint32_t index = {}; + VULKAN_HPP_NAMESPACE::Pipeline pipeline = {}; + }; + + template <> + struct CppType + { + using Type = WriteIndirectExecutionSetPipelineEXT; + }; + + // wrapper struct for struct VkWriteIndirectExecutionSetShaderEXT, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/VkWriteIndirectExecutionSetShaderEXT.html + struct WriteIndirectExecutionSetShaderEXT + { + using NativeType = VkWriteIndirectExecutionSetShaderEXT; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteIndirectExecutionSetShaderEXT; + +#if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR WriteIndirectExecutionSetShaderEXT( uint32_t index_ = {}, + VULKAN_HPP_NAMESPACE::ShaderEXT shader_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , index{ index_ } + , shader{ shader_ } + { + } + + VULKAN_HPP_CONSTEXPR WriteIndirectExecutionSetShaderEXT( WriteIndirectExecutionSetShaderEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + WriteIndirectExecutionSetShaderEXT( VkWriteIndirectExecutionSetShaderEXT const & rhs ) VULKAN_HPP_NOEXCEPT + : WriteIndirectExecutionSetShaderEXT( *reinterpret_cast( &rhs ) ) + { + } + + WriteIndirectExecutionSetShaderEXT & operator=( WriteIndirectExecutionSetShaderEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default; +#endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + WriteIndirectExecutionSetShaderEXT & operator=( VkWriteIndirectExecutionSetShaderEXT const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +#if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 WriteIndirectExecutionSetShaderEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteIndirectExecutionSetShaderEXT & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT + { + index = index_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 WriteIndirectExecutionSetShaderEXT & setShader( VULKAN_HPP_NAMESPACE::ShaderEXT shader_ ) VULKAN_HPP_NOEXCEPT + { + shader = shader_; + return *this; + } +#endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkWriteIndirectExecutionSetShaderEXT const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteIndirectExecutionSetShaderEXT &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkWriteIndirectExecutionSetShaderEXT const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkWriteIndirectExecutionSetShaderEXT *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +#if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, index, shader ); + } +#endif + +#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + auto operator<=>( WriteIndirectExecutionSetShaderEXT const & ) const = default; +#else + bool operator==( WriteIndirectExecutionSetShaderEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { +# if defined( VULKAN_HPP_USE_REFLECT ) + return this->reflect() == rhs.reflect(); +# else + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( index == rhs.index ) && ( shader == rhs.shader ); +# endif + } + + bool operator!=( WriteIndirectExecutionSetShaderEXT const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteIndirectExecutionSetShaderEXT; + const void * pNext = {}; + uint32_t index = {}; + VULKAN_HPP_NAMESPACE::ShaderEXT shader = {}; + }; + + template <> + struct CppType + { + using Type = WriteIndirectExecutionSetShaderEXT; + }; + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + // wrapper struct for struct VkXcbSurfaceCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkXcbSurfaceCreateInfoKHR.html + struct XcbSurfaceCreateInfoKHR + { + using NativeType = VkXcbSurfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXcbSurfaceCreateInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR XcbSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ = {}, + xcb_connection_t * connection_ = {}, + xcb_window_t window_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , connection{ connection_ } + , window{ window_ } + { + } + + VULKAN_HPP_CONSTEXPR XcbSurfaceCreateInfoKHR( XcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + XcbSurfaceCreateInfoKHR( VkXcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : XcbSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + XcbSurfaceCreateInfoKHR & operator=( XcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + XcbSurfaceCreateInfoKHR & operator=( VkXcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setConnection( xcb_connection_t * connection_ ) VULKAN_HPP_NOEXCEPT + { + connection = connection_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setWindow( xcb_window_t window_ ) VULKAN_HPP_NOEXCEPT + { + window = window_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkXcbSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkXcbSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkXcbSurfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkXcbSurfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, connection, window ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = connection <=> rhs.connection; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &window, &rhs.window, sizeof( xcb_window_t ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( connection == rhs.connection ) && + ( memcmp( &window, &rhs.window, sizeof( xcb_window_t ) ) == 0 ); + } + + bool operator!=( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eXcbSurfaceCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags = {}; + xcb_connection_t * connection = {}; + xcb_window_t window = {}; + }; + + template <> + struct CppType + { + using Type = XcbSurfaceCreateInfoKHR; + }; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + // wrapper struct for struct VkXlibSurfaceCreateInfoKHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/VkXlibSurfaceCreateInfoKHR.html + struct XlibSurfaceCreateInfoKHR + { + using NativeType = VkXlibSurfaceCreateInfoKHR; + + static const bool allowDuplicate = false; + static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXlibSurfaceCreateInfoKHR; + +# if !defined( VULKAN_HPP_NO_CONSTRUCTORS ) && !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS ) + VULKAN_HPP_CONSTEXPR XlibSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ = {}, + Display * dpy_ = {}, + Window window_ = {}, + const void * pNext_ = nullptr ) VULKAN_HPP_NOEXCEPT + : pNext{ pNext_ } + , flags{ flags_ } + , dpy{ dpy_ } + , window{ window_ } + { + } + + VULKAN_HPP_CONSTEXPR XlibSurfaceCreateInfoKHR( XlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; + + XlibSurfaceCreateInfoKHR( VkXlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + : XlibSurfaceCreateInfoKHR( *reinterpret_cast( &rhs ) ) + { + } + + XlibSurfaceCreateInfoKHR & operator=( XlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default; +# endif /*VULKAN_HPP_NO_CONSTRUCTORS*/ + + XlibSurfaceCreateInfoKHR & operator=( VkXlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT + { + *this = *reinterpret_cast( &rhs ); + return *this; + } + +# if !defined( VULKAN_HPP_NO_SETTERS ) && !defined( VULKAN_HPP_NO_STRUCT_SETTERS ) + VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT + { + pNext = pNext_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT + { + flags = flags_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setDpy( Display * dpy_ ) VULKAN_HPP_NOEXCEPT + { + dpy = dpy_; + return *this; + } + + VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setWindow( Window window_ ) VULKAN_HPP_NOEXCEPT + { + window = window_; + return *this; + } +# endif /*VULKAN_HPP_NO_SETTERS*/ + + operator VkXlibSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkXlibSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator VkXlibSurfaceCreateInfoKHR const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator VkXlibSurfaceCreateInfoKHR *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + +# if defined( VULKAN_HPP_USE_REFLECT ) +# if 14 <= VULKAN_HPP_CPP_VERSION + auto +# else + std::tuple +# endif + reflect() const VULKAN_HPP_NOEXCEPT + { + return std::tie( sType, pNext, flags, dpy, window ); + } +# endif + +# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR ) + std::strong_ordering operator<=>( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + if ( auto cmp = sType <=> rhs.sType; cmp != 0 ) + return cmp; + if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 ) + return cmp; + if ( auto cmp = flags <=> rhs.flags; cmp != 0 ) + return cmp; + if ( auto cmp = dpy <=> rhs.dpy; cmp != 0 ) + return cmp; + if ( auto cmp = memcmp( &window, &rhs.window, sizeof( Window ) ); cmp != 0 ) + return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater; + + return std::strong_ordering::equivalent; + } +# endif + + bool operator==( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dpy == rhs.dpy ) && + ( memcmp( &window, &rhs.window, sizeof( Window ) ) == 0 ); + } + + bool operator!=( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eXlibSurfaceCreateInfoKHR; + const void * pNext = {}; + VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags = {}; + Display * dpy = {}; + Window window = {}; + }; + + template <> + struct CppType + { + using Type = XlibSurfaceCreateInfoKHR; + }; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_to_string.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_to_string.hpp new file mode 100644 index 0000000000..e54d553a5c --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_to_string.hpp @@ -0,0 +1,10500 @@ +// Copyright 2015-2025 The Khronos Group Inc. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_TO_STRING_HPP +#define VULKAN_TO_STRING_HPP + +#include + +// ignore warnings on using deprecated enum values in this header +#if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#elif defined( _MSC_VER ) +# pragma warning( push ) +# pragma warning( disable : 4996 ) +#endif + +#if defined( VULKAN_HPP_ENABLE_STD_MODULE ) && defined( VULKAN_HPP_STD_MODULE ) +import VULKAN_HPP_STD_MODULE; +#else +# if __cpp_lib_format +# include // std::format +# else +# include // std::stringstream +# endif +#endif + +namespace VULKAN_HPP_NAMESPACE +{ + + //========================== + //=== BITMASKs to_string === + //========================== + + //=== VK_VERSION_1_0 === + + VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlags value ) + { + std::string result = "{"; + if ( value & FormatFeatureFlagBits::eSampledImage ) + result += " SampledImage |"; + if ( value & FormatFeatureFlagBits::eStorageImage ) + result += " StorageImage |"; + if ( value & FormatFeatureFlagBits::eStorageImageAtomic ) + result += " StorageImageAtomic |"; + if ( value & FormatFeatureFlagBits::eUniformTexelBuffer ) + result += " UniformTexelBuffer |"; + if ( value & FormatFeatureFlagBits::eStorageTexelBuffer ) + result += " StorageTexelBuffer |"; + if ( value & FormatFeatureFlagBits::eStorageTexelBufferAtomic ) + result += " StorageTexelBufferAtomic |"; + if ( value & FormatFeatureFlagBits::eVertexBuffer ) + result += " VertexBuffer |"; + if ( value & FormatFeatureFlagBits::eColorAttachment ) + result += " ColorAttachment |"; + if ( value & FormatFeatureFlagBits::eColorAttachmentBlend ) + result += " ColorAttachmentBlend |"; + if ( value & FormatFeatureFlagBits::eDepthStencilAttachment ) + result += " DepthStencilAttachment |"; + if ( value & FormatFeatureFlagBits::eBlitSrc ) + result += " BlitSrc |"; + if ( value & FormatFeatureFlagBits::eBlitDst ) + result += " BlitDst |"; + if ( value & FormatFeatureFlagBits::eSampledImageFilterLinear ) + result += " SampledImageFilterLinear |"; + if ( value & FormatFeatureFlagBits::eTransferSrc ) + result += " TransferSrc |"; + if ( value & FormatFeatureFlagBits::eTransferDst ) + result += " TransferDst |"; + if ( value & FormatFeatureFlagBits::eMidpointChromaSamples ) + result += " MidpointChromaSamples |"; + if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilter ) + result += " SampledImageYcbcrConversionLinearFilter |"; + if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilter ) + result += " SampledImageYcbcrConversionSeparateReconstructionFilter |"; + if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicit ) + result += " SampledImageYcbcrConversionChromaReconstructionExplicit |"; + if ( value & FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) + result += " SampledImageYcbcrConversionChromaReconstructionExplicitForceable |"; + if ( value & FormatFeatureFlagBits::eDisjoint ) + result += " Disjoint |"; + if ( value & FormatFeatureFlagBits::eCositedChromaSamples ) + result += " CositedChromaSamples |"; + if ( value & FormatFeatureFlagBits::eSampledImageFilterMinmax ) + result += " SampledImageFilterMinmax |"; + if ( value & FormatFeatureFlagBits::eVideoDecodeOutputKHR ) + result += " VideoDecodeOutputKHR |"; + if ( value & FormatFeatureFlagBits::eVideoDecodeDpbKHR ) + result += " VideoDecodeDpbKHR |"; + if ( value & FormatFeatureFlagBits::eAccelerationStructureVertexBufferKHR ) + result += " AccelerationStructureVertexBufferKHR |"; + if ( value & FormatFeatureFlagBits::eSampledImageFilterCubicEXT ) + result += " SampledImageFilterCubicEXT |"; + if ( value & FormatFeatureFlagBits::eFragmentDensityMapEXT ) + result += " FragmentDensityMapEXT |"; + if ( value & FormatFeatureFlagBits::eFragmentShadingRateAttachmentKHR ) + result += " FragmentShadingRateAttachmentKHR |"; + if ( value & FormatFeatureFlagBits::eVideoEncodeInputKHR ) + result += " VideoEncodeInputKHR |"; + if ( value & FormatFeatureFlagBits::eVideoEncodeDpbKHR ) + result += " VideoEncodeDpbKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ImageCreateFlags value ) + { + std::string result = "{"; + if ( value & ImageCreateFlagBits::eSparseBinding ) + result += " SparseBinding |"; + if ( value & ImageCreateFlagBits::eSparseResidency ) + result += " SparseResidency |"; + if ( value & ImageCreateFlagBits::eSparseAliased ) + result += " SparseAliased |"; + if ( value & ImageCreateFlagBits::eMutableFormat ) + result += " MutableFormat |"; + if ( value & ImageCreateFlagBits::eCubeCompatible ) + result += " CubeCompatible |"; + if ( value & ImageCreateFlagBits::eAlias ) + result += " Alias |"; + if ( value & ImageCreateFlagBits::eSplitInstanceBindRegions ) + result += " SplitInstanceBindRegions |"; + if ( value & ImageCreateFlagBits::e2DArrayCompatible ) + result += " 2DArrayCompatible |"; + if ( value & ImageCreateFlagBits::eBlockTexelViewCompatible ) + result += " BlockTexelViewCompatible |"; + if ( value & ImageCreateFlagBits::eExtendedUsage ) + result += " ExtendedUsage |"; + if ( value & ImageCreateFlagBits::eProtected ) + result += " Protected |"; + if ( value & ImageCreateFlagBits::eDisjoint ) + result += " Disjoint |"; + if ( value & ImageCreateFlagBits::eCornerSampledNV ) + result += " CornerSampledNV |"; + if ( value & ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT ) + result += " SampleLocationsCompatibleDepthEXT |"; + if ( value & ImageCreateFlagBits::eSubsampledEXT ) + result += " SubsampledEXT |"; + if ( value & ImageCreateFlagBits::eDescriptorBufferCaptureReplayEXT ) + result += " DescriptorBufferCaptureReplayEXT |"; + if ( value & ImageCreateFlagBits::eMultisampledRenderToSingleSampledEXT ) + result += " MultisampledRenderToSingleSampledEXT |"; + if ( value & ImageCreateFlagBits::e2DViewCompatibleEXT ) + result += " 2DViewCompatibleEXT |"; + if ( value & ImageCreateFlagBits::eVideoProfileIndependentKHR ) + result += " VideoProfileIndependentKHR |"; + if ( value & ImageCreateFlagBits::eFragmentDensityMapOffsetEXT ) + result += " FragmentDensityMapOffsetEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ImageUsageFlags value ) + { + std::string result = "{"; + if ( value & ImageUsageFlagBits::eTransferSrc ) + result += " TransferSrc |"; + if ( value & ImageUsageFlagBits::eTransferDst ) + result += " TransferDst |"; + if ( value & ImageUsageFlagBits::eSampled ) + result += " Sampled |"; + if ( value & ImageUsageFlagBits::eStorage ) + result += " Storage |"; + if ( value & ImageUsageFlagBits::eColorAttachment ) + result += " ColorAttachment |"; + if ( value & ImageUsageFlagBits::eDepthStencilAttachment ) + result += " DepthStencilAttachment |"; + if ( value & ImageUsageFlagBits::eTransientAttachment ) + result += " TransientAttachment |"; + if ( value & ImageUsageFlagBits::eInputAttachment ) + result += " InputAttachment |"; + if ( value & ImageUsageFlagBits::eHostTransfer ) + result += " HostTransfer |"; + if ( value & ImageUsageFlagBits::eVideoDecodeDstKHR ) + result += " VideoDecodeDstKHR |"; + if ( value & ImageUsageFlagBits::eVideoDecodeSrcKHR ) + result += " VideoDecodeSrcKHR |"; + if ( value & ImageUsageFlagBits::eVideoDecodeDpbKHR ) + result += " VideoDecodeDpbKHR |"; + if ( value & ImageUsageFlagBits::eFragmentDensityMapEXT ) + result += " FragmentDensityMapEXT |"; + if ( value & ImageUsageFlagBits::eFragmentShadingRateAttachmentKHR ) + result += " FragmentShadingRateAttachmentKHR |"; + if ( value & ImageUsageFlagBits::eVideoEncodeDstKHR ) + result += " VideoEncodeDstKHR |"; + if ( value & ImageUsageFlagBits::eVideoEncodeSrcKHR ) + result += " VideoEncodeSrcKHR |"; + if ( value & ImageUsageFlagBits::eVideoEncodeDpbKHR ) + result += " VideoEncodeDpbKHR |"; + if ( value & ImageUsageFlagBits::eAttachmentFeedbackLoopEXT ) + result += " AttachmentFeedbackLoopEXT |"; + if ( value & ImageUsageFlagBits::eInvocationMaskHUAWEI ) + result += " InvocationMaskHUAWEI |"; + if ( value & ImageUsageFlagBits::eSampleWeightQCOM ) + result += " SampleWeightQCOM |"; + if ( value & ImageUsageFlagBits::eSampleBlockMatchQCOM ) + result += " SampleBlockMatchQCOM |"; + if ( value & ImageUsageFlagBits::eTensorAliasingARM ) + result += " TensorAliasingARM |"; + if ( value & ImageUsageFlagBits::eTileMemoryQCOM ) + result += " TileMemoryQCOM |"; + if ( value & ImageUsageFlagBits::eVideoEncodeQuantizationDeltaMapKHR ) + result += " VideoEncodeQuantizationDeltaMapKHR |"; + if ( value & ImageUsageFlagBits::eVideoEncodeEmphasisMapKHR ) + result += " VideoEncodeEmphasisMapKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( InstanceCreateFlags value ) + { + std::string result = "{"; + if ( value & InstanceCreateFlagBits::eEnumeratePortabilityKHR ) + result += " EnumeratePortabilityKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( MemoryHeapFlags value ) + { + std::string result = "{"; + if ( value & MemoryHeapFlagBits::eDeviceLocal ) + result += " DeviceLocal |"; + if ( value & MemoryHeapFlagBits::eMultiInstance ) + result += " MultiInstance |"; + if ( value & MemoryHeapFlagBits::eTileMemoryQCOM ) + result += " TileMemoryQCOM |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( MemoryPropertyFlags value ) + { + std::string result = "{"; + if ( value & MemoryPropertyFlagBits::eDeviceLocal ) + result += " DeviceLocal |"; + if ( value & MemoryPropertyFlagBits::eHostVisible ) + result += " HostVisible |"; + if ( value & MemoryPropertyFlagBits::eHostCoherent ) + result += " HostCoherent |"; + if ( value & MemoryPropertyFlagBits::eHostCached ) + result += " HostCached |"; + if ( value & MemoryPropertyFlagBits::eLazilyAllocated ) + result += " LazilyAllocated |"; + if ( value & MemoryPropertyFlagBits::eProtected ) + result += " Protected |"; + if ( value & MemoryPropertyFlagBits::eDeviceCoherentAMD ) + result += " DeviceCoherentAMD |"; + if ( value & MemoryPropertyFlagBits::eDeviceUncachedAMD ) + result += " DeviceUncachedAMD |"; + if ( value & MemoryPropertyFlagBits::eRdmaCapableNV ) + result += " RdmaCapableNV |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( QueueFlags value ) + { + std::string result = "{"; + if ( value & QueueFlagBits::eGraphics ) + result += " Graphics |"; + if ( value & QueueFlagBits::eCompute ) + result += " Compute |"; + if ( value & QueueFlagBits::eTransfer ) + result += " Transfer |"; + if ( value & QueueFlagBits::eSparseBinding ) + result += " SparseBinding |"; + if ( value & QueueFlagBits::eProtected ) + result += " Protected |"; + if ( value & QueueFlagBits::eVideoDecodeKHR ) + result += " VideoDecodeKHR |"; + if ( value & QueueFlagBits::eVideoEncodeKHR ) + result += " VideoEncodeKHR |"; + if ( value & QueueFlagBits::eOpticalFlowNV ) + result += " OpticalFlowNV |"; + if ( value & QueueFlagBits::eDataGraphARM ) + result += " DataGraphARM |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SampleCountFlags value ) + { + std::string result = "{"; + if ( value & SampleCountFlagBits::e1 ) + result += " 1 |"; + if ( value & SampleCountFlagBits::e2 ) + result += " 2 |"; + if ( value & SampleCountFlagBits::e4 ) + result += " 4 |"; + if ( value & SampleCountFlagBits::e8 ) + result += " 8 |"; + if ( value & SampleCountFlagBits::e16 ) + result += " 16 |"; + if ( value & SampleCountFlagBits::e32 ) + result += " 32 |"; + if ( value & SampleCountFlagBits::e64 ) + result += " 64 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( DeviceQueueCreateFlags value ) + { + std::string result = "{"; + if ( value & DeviceQueueCreateFlagBits::eProtected ) + result += " Protected |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineStageFlags value ) + { + std::string result = "{"; + if ( value & PipelineStageFlagBits::eTopOfPipe ) + result += " TopOfPipe |"; + if ( value & PipelineStageFlagBits::eDrawIndirect ) + result += " DrawIndirect |"; + if ( value & PipelineStageFlagBits::eVertexInput ) + result += " VertexInput |"; + if ( value & PipelineStageFlagBits::eVertexShader ) + result += " VertexShader |"; + if ( value & PipelineStageFlagBits::eTessellationControlShader ) + result += " TessellationControlShader |"; + if ( value & PipelineStageFlagBits::eTessellationEvaluationShader ) + result += " TessellationEvaluationShader |"; + if ( value & PipelineStageFlagBits::eGeometryShader ) + result += " GeometryShader |"; + if ( value & PipelineStageFlagBits::eFragmentShader ) + result += " FragmentShader |"; + if ( value & PipelineStageFlagBits::eEarlyFragmentTests ) + result += " EarlyFragmentTests |"; + if ( value & PipelineStageFlagBits::eLateFragmentTests ) + result += " LateFragmentTests |"; + if ( value & PipelineStageFlagBits::eColorAttachmentOutput ) + result += " ColorAttachmentOutput |"; + if ( value & PipelineStageFlagBits::eComputeShader ) + result += " ComputeShader |"; + if ( value & PipelineStageFlagBits::eTransfer ) + result += " Transfer |"; + if ( value & PipelineStageFlagBits::eBottomOfPipe ) + result += " BottomOfPipe |"; + if ( value & PipelineStageFlagBits::eHost ) + result += " Host |"; + if ( value & PipelineStageFlagBits::eAllGraphics ) + result += " AllGraphics |"; + if ( value & PipelineStageFlagBits::eAllCommands ) + result += " AllCommands |"; + if ( value & PipelineStageFlagBits::eTransformFeedbackEXT ) + result += " TransformFeedbackEXT |"; + if ( value & PipelineStageFlagBits::eConditionalRenderingEXT ) + result += " ConditionalRenderingEXT |"; + if ( value & PipelineStageFlagBits::eAccelerationStructureBuildKHR ) + result += " AccelerationStructureBuildKHR |"; + if ( value & PipelineStageFlagBits::eRayTracingShaderKHR ) + result += " RayTracingShaderKHR |"; + if ( value & PipelineStageFlagBits::eFragmentDensityProcessEXT ) + result += " FragmentDensityProcessEXT |"; + if ( value & PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR ) + result += " FragmentShadingRateAttachmentKHR |"; + if ( value & PipelineStageFlagBits::eTaskShaderEXT ) + result += " TaskShaderEXT |"; + if ( value & PipelineStageFlagBits::eMeshShaderEXT ) + result += " MeshShaderEXT |"; + if ( value & PipelineStageFlagBits::eCommandPreprocessEXT ) + result += " CommandPreprocessEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( MemoryMapFlags value ) + { + std::string result = "{"; + if ( value & MemoryMapFlagBits::ePlacedEXT ) + result += " PlacedEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ImageAspectFlags value ) + { + std::string result = "{"; + if ( value & ImageAspectFlagBits::eColor ) + result += " Color |"; + if ( value & ImageAspectFlagBits::eDepth ) + result += " Depth |"; + if ( value & ImageAspectFlagBits::eStencil ) + result += " Stencil |"; + if ( value & ImageAspectFlagBits::eMetadata ) + result += " Metadata |"; + if ( value & ImageAspectFlagBits::ePlane0 ) + result += " Plane0 |"; + if ( value & ImageAspectFlagBits::ePlane1 ) + result += " Plane1 |"; + if ( value & ImageAspectFlagBits::ePlane2 ) + result += " Plane2 |"; + if ( value & ImageAspectFlagBits::eMemoryPlane0EXT ) + result += " MemoryPlane0EXT |"; + if ( value & ImageAspectFlagBits::eMemoryPlane1EXT ) + result += " MemoryPlane1EXT |"; + if ( value & ImageAspectFlagBits::eMemoryPlane2EXT ) + result += " MemoryPlane2EXT |"; + if ( value & ImageAspectFlagBits::eMemoryPlane3EXT ) + result += " MemoryPlane3EXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SparseImageFormatFlags value ) + { + std::string result = "{"; + if ( value & SparseImageFormatFlagBits::eSingleMiptail ) + result += " SingleMiptail |"; + if ( value & SparseImageFormatFlagBits::eAlignedMipSize ) + result += " AlignedMipSize |"; + if ( value & SparseImageFormatFlagBits::eNonstandardBlockSize ) + result += " NonstandardBlockSize |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SparseMemoryBindFlags value ) + { + std::string result = "{"; + if ( value & SparseMemoryBindFlagBits::eMetadata ) + result += " Metadata |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( FenceCreateFlags value ) + { + std::string result = "{"; + if ( value & FenceCreateFlagBits::eSignaled ) + result += " Signaled |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SemaphoreCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( EventCreateFlags value ) + { + std::string result = "{"; + if ( value & EventCreateFlagBits::eDeviceOnly ) + result += " DeviceOnly |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( QueryPipelineStatisticFlags value ) + { + std::string result = "{"; + if ( value & QueryPipelineStatisticFlagBits::eInputAssemblyVertices ) + result += " InputAssemblyVertices |"; + if ( value & QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives ) + result += " InputAssemblyPrimitives |"; + if ( value & QueryPipelineStatisticFlagBits::eVertexShaderInvocations ) + result += " VertexShaderInvocations |"; + if ( value & QueryPipelineStatisticFlagBits::eGeometryShaderInvocations ) + result += " GeometryShaderInvocations |"; + if ( value & QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives ) + result += " GeometryShaderPrimitives |"; + if ( value & QueryPipelineStatisticFlagBits::eClippingInvocations ) + result += " ClippingInvocations |"; + if ( value & QueryPipelineStatisticFlagBits::eClippingPrimitives ) + result += " ClippingPrimitives |"; + if ( value & QueryPipelineStatisticFlagBits::eFragmentShaderInvocations ) + result += " FragmentShaderInvocations |"; + if ( value & QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches ) + result += " TessellationControlShaderPatches |"; + if ( value & QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations ) + result += " TessellationEvaluationShaderInvocations |"; + if ( value & QueryPipelineStatisticFlagBits::eComputeShaderInvocations ) + result += " ComputeShaderInvocations |"; + if ( value & QueryPipelineStatisticFlagBits::eTaskShaderInvocationsEXT ) + result += " TaskShaderInvocationsEXT |"; + if ( value & QueryPipelineStatisticFlagBits::eMeshShaderInvocationsEXT ) + result += " MeshShaderInvocationsEXT |"; + if ( value & QueryPipelineStatisticFlagBits::eClusterCullingShaderInvocationsHUAWEI ) + result += " ClusterCullingShaderInvocationsHUAWEI |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( QueryPoolCreateFlags value ) + { + std::string result = "{"; + if ( value & QueryPoolCreateFlagBits::eResetKHR ) + result += " ResetKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( QueryResultFlags value ) + { + std::string result = "{"; + if ( value & QueryResultFlagBits::e64 ) + result += " 64 |"; + if ( value & QueryResultFlagBits::eWait ) + result += " Wait |"; + if ( value & QueryResultFlagBits::eWithAvailability ) + result += " WithAvailability |"; + if ( value & QueryResultFlagBits::ePartial ) + result += " Partial |"; + if ( value & QueryResultFlagBits::eWithStatusKHR ) + result += " WithStatusKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( BufferCreateFlags value ) + { + std::string result = "{"; + if ( value & BufferCreateFlagBits::eSparseBinding ) + result += " SparseBinding |"; + if ( value & BufferCreateFlagBits::eSparseResidency ) + result += " SparseResidency |"; + if ( value & BufferCreateFlagBits::eSparseAliased ) + result += " SparseAliased |"; + if ( value & BufferCreateFlagBits::eProtected ) + result += " Protected |"; + if ( value & BufferCreateFlagBits::eDeviceAddressCaptureReplay ) + result += " DeviceAddressCaptureReplay |"; + if ( value & BufferCreateFlagBits::eDescriptorBufferCaptureReplayEXT ) + result += " DescriptorBufferCaptureReplayEXT |"; + if ( value & BufferCreateFlagBits::eVideoProfileIndependentKHR ) + result += " VideoProfileIndependentKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( BufferUsageFlags value ) + { + std::string result = "{"; + if ( value & BufferUsageFlagBits::eTransferSrc ) + result += " TransferSrc |"; + if ( value & BufferUsageFlagBits::eTransferDst ) + result += " TransferDst |"; + if ( value & BufferUsageFlagBits::eUniformTexelBuffer ) + result += " UniformTexelBuffer |"; + if ( value & BufferUsageFlagBits::eStorageTexelBuffer ) + result += " StorageTexelBuffer |"; + if ( value & BufferUsageFlagBits::eUniformBuffer ) + result += " UniformBuffer |"; + if ( value & BufferUsageFlagBits::eStorageBuffer ) + result += " StorageBuffer |"; + if ( value & BufferUsageFlagBits::eIndexBuffer ) + result += " IndexBuffer |"; + if ( value & BufferUsageFlagBits::eVertexBuffer ) + result += " VertexBuffer |"; + if ( value & BufferUsageFlagBits::eIndirectBuffer ) + result += " IndirectBuffer |"; + if ( value & BufferUsageFlagBits::eShaderDeviceAddress ) + result += " ShaderDeviceAddress |"; + if ( value & BufferUsageFlagBits::eVideoDecodeSrcKHR ) + result += " VideoDecodeSrcKHR |"; + if ( value & BufferUsageFlagBits::eVideoDecodeDstKHR ) + result += " VideoDecodeDstKHR |"; + if ( value & BufferUsageFlagBits::eTransformFeedbackBufferEXT ) + result += " TransformFeedbackBufferEXT |"; + if ( value & BufferUsageFlagBits::eTransformFeedbackCounterBufferEXT ) + result += " TransformFeedbackCounterBufferEXT |"; + if ( value & BufferUsageFlagBits::eConditionalRenderingEXT ) + result += " ConditionalRenderingEXT |"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + if ( value & BufferUsageFlagBits::eExecutionGraphScratchAMDX ) + result += " ExecutionGraphScratchAMDX |"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + if ( value & BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR ) + result += " AccelerationStructureBuildInputReadOnlyKHR |"; + if ( value & BufferUsageFlagBits::eAccelerationStructureStorageKHR ) + result += " AccelerationStructureStorageKHR |"; + if ( value & BufferUsageFlagBits::eShaderBindingTableKHR ) + result += " ShaderBindingTableKHR |"; + if ( value & BufferUsageFlagBits::eVideoEncodeDstKHR ) + result += " VideoEncodeDstKHR |"; + if ( value & BufferUsageFlagBits::eVideoEncodeSrcKHR ) + result += " VideoEncodeSrcKHR |"; + if ( value & BufferUsageFlagBits::eSamplerDescriptorBufferEXT ) + result += " SamplerDescriptorBufferEXT |"; + if ( value & BufferUsageFlagBits::eResourceDescriptorBufferEXT ) + result += " ResourceDescriptorBufferEXT |"; + if ( value & BufferUsageFlagBits::ePushDescriptorsDescriptorBufferEXT ) + result += " PushDescriptorsDescriptorBufferEXT |"; + if ( value & BufferUsageFlagBits::eMicromapBuildInputReadOnlyEXT ) + result += " MicromapBuildInputReadOnlyEXT |"; + if ( value & BufferUsageFlagBits::eMicromapStorageEXT ) + result += " MicromapStorageEXT |"; + if ( value & BufferUsageFlagBits::eTileMemoryQCOM ) + result += " TileMemoryQCOM |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BufferViewCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( ImageViewCreateFlags value ) + { + std::string result = "{"; + if ( value & ImageViewCreateFlagBits::eFragmentDensityMapDynamicEXT ) + result += " FragmentDensityMapDynamicEXT |"; + if ( value & ImageViewCreateFlagBits::eDescriptorBufferCaptureReplayEXT ) + result += " DescriptorBufferCaptureReplayEXT |"; + if ( value & ImageViewCreateFlagBits::eFragmentDensityMapDeferredEXT ) + result += " FragmentDensityMapDeferredEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderModuleCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineCacheCreateFlags value ) + { + std::string result = "{"; + if ( value & PipelineCacheCreateFlagBits::eExternallySynchronized ) + result += " ExternallySynchronized |"; + if ( value & PipelineCacheCreateFlagBits::eInternallySynchronizedMergeKHR ) + result += " InternallySynchronizedMergeKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ColorComponentFlags value ) + { + std::string result = "{"; + if ( value & ColorComponentFlagBits::eR ) + result += " R |"; + if ( value & ColorComponentFlagBits::eG ) + result += " G |"; + if ( value & ColorComponentFlagBits::eB ) + result += " B |"; + if ( value & ColorComponentFlagBits::eA ) + result += " A |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( CullModeFlags value ) + { + std::string result = "{"; + if ( value & CullModeFlagBits::eFront ) + result += " Front |"; + if ( value & CullModeFlagBits::eBack ) + result += " Back |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlags value ) + { + std::string result = "{"; + if ( value & PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessEXT ) + result += " RasterizationOrderAttachmentAccessEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineCreateFlags value ) + { + std::string result = "{"; + if ( value & PipelineCreateFlagBits::eDisableOptimization ) + result += " DisableOptimization |"; + if ( value & PipelineCreateFlagBits::eAllowDerivatives ) + result += " AllowDerivatives |"; + if ( value & PipelineCreateFlagBits::eDerivative ) + result += " Derivative |"; + if ( value & PipelineCreateFlagBits::eViewIndexFromDeviceIndex ) + result += " ViewIndexFromDeviceIndex |"; + if ( value & PipelineCreateFlagBits::eDispatchBase ) + result += " DispatchBase |"; + if ( value & PipelineCreateFlagBits::eFailOnPipelineCompileRequired ) + result += " FailOnPipelineCompileRequired |"; + if ( value & PipelineCreateFlagBits::eEarlyReturnOnFailure ) + result += " EarlyReturnOnFailure |"; + if ( value & PipelineCreateFlagBits::eNoProtectedAccess ) + result += " NoProtectedAccess |"; + if ( value & PipelineCreateFlagBits::eProtectedAccessOnly ) + result += " ProtectedAccessOnly |"; + if ( value & PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR ) + result += " RayTracingNoNullAnyHitShadersKHR |"; + if ( value & PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR ) + result += " RayTracingNoNullClosestHitShadersKHR |"; + if ( value & PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR ) + result += " RayTracingNoNullMissShadersKHR |"; + if ( value & PipelineCreateFlagBits::eRayTracingNoNullIntersectionShadersKHR ) + result += " RayTracingNoNullIntersectionShadersKHR |"; + if ( value & PipelineCreateFlagBits::eRayTracingSkipTrianglesKHR ) + result += " RayTracingSkipTrianglesKHR |"; + if ( value & PipelineCreateFlagBits::eRayTracingSkipAabbsKHR ) + result += " RayTracingSkipAabbsKHR |"; + if ( value & PipelineCreateFlagBits::eRayTracingShaderGroupHandleCaptureReplayKHR ) + result += " RayTracingShaderGroupHandleCaptureReplayKHR |"; + if ( value & PipelineCreateFlagBits::eDeferCompileNV ) + result += " DeferCompileNV |"; + if ( value & PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT ) + result += " RenderingFragmentDensityMapAttachmentEXT |"; + if ( value & PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR ) + result += " RenderingFragmentShadingRateAttachmentKHR |"; + if ( value & PipelineCreateFlagBits::eCaptureStatisticsKHR ) + result += " CaptureStatisticsKHR |"; + if ( value & PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR ) + result += " CaptureInternalRepresentationsKHR |"; + if ( value & PipelineCreateFlagBits::eIndirectBindableNV ) + result += " IndirectBindableNV |"; + if ( value & PipelineCreateFlagBits::eLibraryKHR ) + result += " LibraryKHR |"; + if ( value & PipelineCreateFlagBits::eDescriptorBufferEXT ) + result += " DescriptorBufferEXT |"; + if ( value & PipelineCreateFlagBits::eRetainLinkTimeOptimizationInfoEXT ) + result += " RetainLinkTimeOptimizationInfoEXT |"; + if ( value & PipelineCreateFlagBits::eLinkTimeOptimizationEXT ) + result += " LinkTimeOptimizationEXT |"; + if ( value & PipelineCreateFlagBits::eRayTracingAllowMotionNV ) + result += " RayTracingAllowMotionNV |"; + if ( value & PipelineCreateFlagBits::eColorAttachmentFeedbackLoopEXT ) + result += " ColorAttachmentFeedbackLoopEXT |"; + if ( value & PipelineCreateFlagBits::eDepthStencilAttachmentFeedbackLoopEXT ) + result += " DepthStencilAttachmentFeedbackLoopEXT |"; + if ( value & PipelineCreateFlagBits::eRayTracingOpacityMicromapEXT ) + result += " RayTracingOpacityMicromapEXT |"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + if ( value & PipelineCreateFlagBits::eRayTracingDisplacementMicromapNV ) + result += " RayTracingDisplacementMicromapNV |"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlags value ) + { + std::string result = "{"; + if ( value & PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessEXT ) + result += " RasterizationOrderAttachmentDepthAccessEXT |"; + if ( value & PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessEXT ) + result += " RasterizationOrderAttachmentStencilAccessEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineDynamicStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineInputAssemblyStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineLayoutCreateFlags value ) + { + std::string result = "{"; + if ( value & PipelineLayoutCreateFlagBits::eIndependentSetsEXT ) + result += " IndependentSetsEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineMultisampleStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineShaderStageCreateFlags value ) + { + std::string result = "{"; + if ( value & PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize ) + result += " AllowVaryingSubgroupSize |"; + if ( value & PipelineShaderStageCreateFlagBits::eRequireFullSubgroups ) + result += " RequireFullSubgroups |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineTessellationStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineVertexInputStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineViewportStateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( ShaderStageFlags value ) + { + std::string result = "{"; + if ( value & ShaderStageFlagBits::eVertex ) + result += " Vertex |"; + if ( value & ShaderStageFlagBits::eTessellationControl ) + result += " TessellationControl |"; + if ( value & ShaderStageFlagBits::eTessellationEvaluation ) + result += " TessellationEvaluation |"; + if ( value & ShaderStageFlagBits::eGeometry ) + result += " Geometry |"; + if ( value & ShaderStageFlagBits::eFragment ) + result += " Fragment |"; + if ( value & ShaderStageFlagBits::eCompute ) + result += " Compute |"; + if ( value & ShaderStageFlagBits::eRaygenKHR ) + result += " RaygenKHR |"; + if ( value & ShaderStageFlagBits::eAnyHitKHR ) + result += " AnyHitKHR |"; + if ( value & ShaderStageFlagBits::eClosestHitKHR ) + result += " ClosestHitKHR |"; + if ( value & ShaderStageFlagBits::eMissKHR ) + result += " MissKHR |"; + if ( value & ShaderStageFlagBits::eIntersectionKHR ) + result += " IntersectionKHR |"; + if ( value & ShaderStageFlagBits::eCallableKHR ) + result += " CallableKHR |"; + if ( value & ShaderStageFlagBits::eTaskEXT ) + result += " TaskEXT |"; + if ( value & ShaderStageFlagBits::eMeshEXT ) + result += " MeshEXT |"; + if ( value & ShaderStageFlagBits::eSubpassShadingHUAWEI ) + result += " SubpassShadingHUAWEI |"; + if ( value & ShaderStageFlagBits::eClusterCullingHUAWEI ) + result += " ClusterCullingHUAWEI |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SamplerCreateFlags value ) + { + std::string result = "{"; + if ( value & SamplerCreateFlagBits::eSubsampledEXT ) + result += " SubsampledEXT |"; + if ( value & SamplerCreateFlagBits::eSubsampledCoarseReconstructionEXT ) + result += " SubsampledCoarseReconstructionEXT |"; + if ( value & SamplerCreateFlagBits::eDescriptorBufferCaptureReplayEXT ) + result += " DescriptorBufferCaptureReplayEXT |"; + if ( value & SamplerCreateFlagBits::eNonSeamlessCubeMapEXT ) + result += " NonSeamlessCubeMapEXT |"; + if ( value & SamplerCreateFlagBits::eImageProcessingQCOM ) + result += " ImageProcessingQCOM |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( DescriptorPoolCreateFlags value ) + { + std::string result = "{"; + if ( value & DescriptorPoolCreateFlagBits::eFreeDescriptorSet ) + result += " FreeDescriptorSet |"; + if ( value & DescriptorPoolCreateFlagBits::eUpdateAfterBind ) + result += " UpdateAfterBind |"; + if ( value & DescriptorPoolCreateFlagBits::eHostOnlyEXT ) + result += " HostOnlyEXT |"; + if ( value & DescriptorPoolCreateFlagBits::eAllowOverallocationSetsNV ) + result += " AllowOverallocationSetsNV |"; + if ( value & DescriptorPoolCreateFlagBits::eAllowOverallocationPoolsNV ) + result += " AllowOverallocationPoolsNV |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorPoolResetFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( DescriptorSetLayoutCreateFlags value ) + { + std::string result = "{"; + if ( value & DescriptorSetLayoutCreateFlagBits::eUpdateAfterBindPool ) + result += " UpdateAfterBindPool |"; + if ( value & DescriptorSetLayoutCreateFlagBits::ePushDescriptor ) + result += " PushDescriptor |"; + if ( value & DescriptorSetLayoutCreateFlagBits::eDescriptorBufferEXT ) + result += " DescriptorBufferEXT |"; + if ( value & DescriptorSetLayoutCreateFlagBits::eEmbeddedImmutableSamplersEXT ) + result += " EmbeddedImmutableSamplersEXT |"; + if ( value & DescriptorSetLayoutCreateFlagBits::eIndirectBindableNV ) + result += " IndirectBindableNV |"; + if ( value & DescriptorSetLayoutCreateFlagBits::eHostOnlyPoolEXT ) + result += " HostOnlyPoolEXT |"; + if ( value & DescriptorSetLayoutCreateFlagBits::ePerStageNV ) + result += " PerStageNV |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( AccessFlags value ) + { + std::string result = "{"; + if ( value & AccessFlagBits::eIndirectCommandRead ) + result += " IndirectCommandRead |"; + if ( value & AccessFlagBits::eIndexRead ) + result += " IndexRead |"; + if ( value & AccessFlagBits::eVertexAttributeRead ) + result += " VertexAttributeRead |"; + if ( value & AccessFlagBits::eUniformRead ) + result += " UniformRead |"; + if ( value & AccessFlagBits::eInputAttachmentRead ) + result += " InputAttachmentRead |"; + if ( value & AccessFlagBits::eShaderRead ) + result += " ShaderRead |"; + if ( value & AccessFlagBits::eShaderWrite ) + result += " ShaderWrite |"; + if ( value & AccessFlagBits::eColorAttachmentRead ) + result += " ColorAttachmentRead |"; + if ( value & AccessFlagBits::eColorAttachmentWrite ) + result += " ColorAttachmentWrite |"; + if ( value & AccessFlagBits::eDepthStencilAttachmentRead ) + result += " DepthStencilAttachmentRead |"; + if ( value & AccessFlagBits::eDepthStencilAttachmentWrite ) + result += " DepthStencilAttachmentWrite |"; + if ( value & AccessFlagBits::eTransferRead ) + result += " TransferRead |"; + if ( value & AccessFlagBits::eTransferWrite ) + result += " TransferWrite |"; + if ( value & AccessFlagBits::eHostRead ) + result += " HostRead |"; + if ( value & AccessFlagBits::eHostWrite ) + result += " HostWrite |"; + if ( value & AccessFlagBits::eMemoryRead ) + result += " MemoryRead |"; + if ( value & AccessFlagBits::eMemoryWrite ) + result += " MemoryWrite |"; + if ( value & AccessFlagBits::eTransformFeedbackWriteEXT ) + result += " TransformFeedbackWriteEXT |"; + if ( value & AccessFlagBits::eTransformFeedbackCounterReadEXT ) + result += " TransformFeedbackCounterReadEXT |"; + if ( value & AccessFlagBits::eTransformFeedbackCounterWriteEXT ) + result += " TransformFeedbackCounterWriteEXT |"; + if ( value & AccessFlagBits::eConditionalRenderingReadEXT ) + result += " ConditionalRenderingReadEXT |"; + if ( value & AccessFlagBits::eColorAttachmentReadNoncoherentEXT ) + result += " ColorAttachmentReadNoncoherentEXT |"; + if ( value & AccessFlagBits::eAccelerationStructureReadKHR ) + result += " AccelerationStructureReadKHR |"; + if ( value & AccessFlagBits::eAccelerationStructureWriteKHR ) + result += " AccelerationStructureWriteKHR |"; + if ( value & AccessFlagBits::eFragmentDensityMapReadEXT ) + result += " FragmentDensityMapReadEXT |"; + if ( value & AccessFlagBits::eFragmentShadingRateAttachmentReadKHR ) + result += " FragmentShadingRateAttachmentReadKHR |"; + if ( value & AccessFlagBits::eCommandPreprocessReadEXT ) + result += " CommandPreprocessReadEXT |"; + if ( value & AccessFlagBits::eCommandPreprocessWriteEXT ) + result += " CommandPreprocessWriteEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( AttachmentDescriptionFlags value ) + { + std::string result = "{"; + if ( value & AttachmentDescriptionFlagBits::eMayAlias ) + result += " MayAlias |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( DependencyFlags value ) + { + std::string result = "{"; + if ( value & DependencyFlagBits::eByRegion ) + result += " ByRegion |"; + if ( value & DependencyFlagBits::eDeviceGroup ) + result += " DeviceGroup |"; + if ( value & DependencyFlagBits::eViewLocal ) + result += " ViewLocal |"; + if ( value & DependencyFlagBits::eFeedbackLoopEXT ) + result += " FeedbackLoopEXT |"; + if ( value & DependencyFlagBits::eQueueFamilyOwnershipTransferUseAllStagesKHR ) + result += " QueueFamilyOwnershipTransferUseAllStagesKHR |"; + if ( value & DependencyFlagBits::eAsymmetricEventKHR ) + result += " AsymmetricEventKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( FramebufferCreateFlags value ) + { + std::string result = "{"; + if ( value & FramebufferCreateFlagBits::eImageless ) + result += " Imageless |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( RenderPassCreateFlags value ) + { + std::string result = "{"; + if ( value & RenderPassCreateFlagBits::eTransformQCOM ) + result += " TransformQCOM |"; + if ( value & RenderPassCreateFlagBits::ePerLayerFragmentDensityVALVE ) + result += " PerLayerFragmentDensityVALVE |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SubpassDescriptionFlags value ) + { + std::string result = "{"; + if ( value & SubpassDescriptionFlagBits::ePerViewAttributesNVX ) + result += " PerViewAttributesNVX |"; + if ( value & SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX ) + result += " PerViewPositionXOnlyNVX |"; + if ( value & SubpassDescriptionFlagBits::eFragmentRegionQCOM ) + result += " FragmentRegionQCOM |"; + if ( value & SubpassDescriptionFlagBits::eShaderResolveQCOM ) + result += " ShaderResolveQCOM |"; + if ( value & SubpassDescriptionFlagBits::eTileShadingApronQCOM ) + result += " TileShadingApronQCOM |"; + if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessEXT ) + result += " RasterizationOrderAttachmentColorAccessEXT |"; + if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessEXT ) + result += " RasterizationOrderAttachmentDepthAccessEXT |"; + if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessEXT ) + result += " RasterizationOrderAttachmentStencilAccessEXT |"; + if ( value & SubpassDescriptionFlagBits::eEnableLegacyDitheringEXT ) + result += " EnableLegacyDitheringEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( CommandPoolCreateFlags value ) + { + std::string result = "{"; + if ( value & CommandPoolCreateFlagBits::eTransient ) + result += " Transient |"; + if ( value & CommandPoolCreateFlagBits::eResetCommandBuffer ) + result += " ResetCommandBuffer |"; + if ( value & CommandPoolCreateFlagBits::eProtected ) + result += " Protected |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( CommandPoolResetFlags value ) + { + std::string result = "{"; + if ( value & CommandPoolResetFlagBits::eReleaseResources ) + result += " ReleaseResources |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( CommandBufferResetFlags value ) + { + std::string result = "{"; + if ( value & CommandBufferResetFlagBits::eReleaseResources ) + result += " ReleaseResources |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( CommandBufferUsageFlags value ) + { + std::string result = "{"; + if ( value & CommandBufferUsageFlagBits::eOneTimeSubmit ) + result += " OneTimeSubmit |"; + if ( value & CommandBufferUsageFlagBits::eRenderPassContinue ) + result += " RenderPassContinue |"; + if ( value & CommandBufferUsageFlagBits::eSimultaneousUse ) + result += " SimultaneousUse |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( QueryControlFlags value ) + { + std::string result = "{"; + if ( value & QueryControlFlagBits::ePrecise ) + result += " Precise |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( StencilFaceFlags value ) + { + std::string result = "{"; + if ( value & StencilFaceFlagBits::eFront ) + result += " Front |"; + if ( value & StencilFaceFlagBits::eBack ) + result += " Back |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_VERSION_1_1 === + + VULKAN_HPP_INLINE std::string to_string( SubgroupFeatureFlags value ) + { + std::string result = "{"; + if ( value & SubgroupFeatureFlagBits::eBasic ) + result += " Basic |"; + if ( value & SubgroupFeatureFlagBits::eVote ) + result += " Vote |"; + if ( value & SubgroupFeatureFlagBits::eArithmetic ) + result += " Arithmetic |"; + if ( value & SubgroupFeatureFlagBits::eBallot ) + result += " Ballot |"; + if ( value & SubgroupFeatureFlagBits::eShuffle ) + result += " Shuffle |"; + if ( value & SubgroupFeatureFlagBits::eShuffleRelative ) + result += " ShuffleRelative |"; + if ( value & SubgroupFeatureFlagBits::eClustered ) + result += " Clustered |"; + if ( value & SubgroupFeatureFlagBits::eQuad ) + result += " Quad |"; + if ( value & SubgroupFeatureFlagBits::eRotate ) + result += " Rotate |"; + if ( value & SubgroupFeatureFlagBits::eRotateClustered ) + result += " RotateClustered |"; + if ( value & SubgroupFeatureFlagBits::ePartitionedNV ) + result += " PartitionedNV |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PeerMemoryFeatureFlags value ) + { + std::string result = "{"; + if ( value & PeerMemoryFeatureFlagBits::eCopySrc ) + result += " CopySrc |"; + if ( value & PeerMemoryFeatureFlagBits::eCopyDst ) + result += " CopyDst |"; + if ( value & PeerMemoryFeatureFlagBits::eGenericSrc ) + result += " GenericSrc |"; + if ( value & PeerMemoryFeatureFlagBits::eGenericDst ) + result += " GenericDst |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( MemoryAllocateFlags value ) + { + std::string result = "{"; + if ( value & MemoryAllocateFlagBits::eDeviceMask ) + result += " DeviceMask |"; + if ( value & MemoryAllocateFlagBits::eDeviceAddress ) + result += " DeviceAddress |"; + if ( value & MemoryAllocateFlagBits::eDeviceAddressCaptureReplay ) + result += " DeviceAddressCaptureReplay |"; + if ( value & MemoryAllocateFlagBits::eZeroInitializeEXT ) + result += " ZeroInitializeEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandPoolTrimFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorUpdateTemplateCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalMemoryHandleTypeFlags value ) + { + std::string result = "{"; + if ( value & ExternalMemoryHandleTypeFlagBits::eOpaqueFd ) + result += " OpaqueFd |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eOpaqueWin32 ) + result += " OpaqueWin32 |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eOpaqueWin32Kmt ) + result += " OpaqueWin32Kmt |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eD3D11Texture ) + result += " D3D11Texture |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eD3D11TextureKmt ) + result += " D3D11TextureKmt |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eD3D12Heap ) + result += " D3D12Heap |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eD3D12Resource ) + result += " D3D12Resource |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eDmaBufEXT ) + result += " DmaBufEXT |"; +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + if ( value & ExternalMemoryHandleTypeFlagBits::eAndroidHardwareBufferANDROID ) + result += " AndroidHardwareBufferANDROID |"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + if ( value & ExternalMemoryHandleTypeFlagBits::eHostAllocationEXT ) + result += " HostAllocationEXT |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eHostMappedForeignMemoryEXT ) + result += " HostMappedForeignMemoryEXT |"; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + if ( value & ExternalMemoryHandleTypeFlagBits::eZirconVmoFUCHSIA ) + result += " ZirconVmoFUCHSIA |"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + if ( value & ExternalMemoryHandleTypeFlagBits::eRdmaAddressNV ) + result += " RdmaAddressNV |"; +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + if ( value & ExternalMemoryHandleTypeFlagBits::eScreenBufferQNX ) + result += " ScreenBufferQNX |"; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + if ( value & ExternalMemoryHandleTypeFlagBits::eMtlbufferEXT ) + result += " MtlbufferEXT |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eMtltextureEXT ) + result += " MtltextureEXT |"; + if ( value & ExternalMemoryHandleTypeFlagBits::eMtlheapEXT ) + result += " MtlheapEXT |"; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalMemoryFeatureFlags value ) + { + std::string result = "{"; + if ( value & ExternalMemoryFeatureFlagBits::eDedicatedOnly ) + result += " DedicatedOnly |"; + if ( value & ExternalMemoryFeatureFlagBits::eExportable ) + result += " Exportable |"; + if ( value & ExternalMemoryFeatureFlagBits::eImportable ) + result += " Importable |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalFenceHandleTypeFlags value ) + { + std::string result = "{"; + if ( value & ExternalFenceHandleTypeFlagBits::eOpaqueFd ) + result += " OpaqueFd |"; + if ( value & ExternalFenceHandleTypeFlagBits::eOpaqueWin32 ) + result += " OpaqueWin32 |"; + if ( value & ExternalFenceHandleTypeFlagBits::eOpaqueWin32Kmt ) + result += " OpaqueWin32Kmt |"; + if ( value & ExternalFenceHandleTypeFlagBits::eSyncFd ) + result += " SyncFd |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalFenceFeatureFlags value ) + { + std::string result = "{"; + if ( value & ExternalFenceFeatureFlagBits::eExportable ) + result += " Exportable |"; + if ( value & ExternalFenceFeatureFlagBits::eImportable ) + result += " Importable |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( FenceImportFlags value ) + { + std::string result = "{"; + if ( value & FenceImportFlagBits::eTemporary ) + result += " Temporary |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SemaphoreImportFlags value ) + { + std::string result = "{"; + if ( value & SemaphoreImportFlagBits::eTemporary ) + result += " Temporary |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalSemaphoreHandleTypeFlags value ) + { + std::string result = "{"; + if ( value & ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd ) + result += " OpaqueFd |"; + if ( value & ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32 ) + result += " OpaqueWin32 |"; + if ( value & ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32Kmt ) + result += " OpaqueWin32Kmt |"; + if ( value & ExternalSemaphoreHandleTypeFlagBits::eD3D12Fence ) + result += " D3D12Fence |"; + if ( value & ExternalSemaphoreHandleTypeFlagBits::eSyncFd ) + result += " SyncFd |"; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + if ( value & ExternalSemaphoreHandleTypeFlagBits::eZirconEventFUCHSIA ) + result += " ZirconEventFUCHSIA |"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalSemaphoreFeatureFlags value ) + { + std::string result = "{"; + if ( value & ExternalSemaphoreFeatureFlagBits::eExportable ) + result += " Exportable |"; + if ( value & ExternalSemaphoreFeatureFlagBits::eImportable ) + result += " Importable |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_VERSION_1_2 === + + VULKAN_HPP_INLINE std::string to_string( DescriptorBindingFlags value ) + { + std::string result = "{"; + if ( value & DescriptorBindingFlagBits::eUpdateAfterBind ) + result += " UpdateAfterBind |"; + if ( value & DescriptorBindingFlagBits::eUpdateUnusedWhilePending ) + result += " UpdateUnusedWhilePending |"; + if ( value & DescriptorBindingFlagBits::ePartiallyBound ) + result += " PartiallyBound |"; + if ( value & DescriptorBindingFlagBits::eVariableDescriptorCount ) + result += " VariableDescriptorCount |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ResolveModeFlags value ) + { + std::string result = "{"; + if ( value & ResolveModeFlagBits::eSampleZero ) + result += " SampleZero |"; + if ( value & ResolveModeFlagBits::eAverage ) + result += " Average |"; + if ( value & ResolveModeFlagBits::eMin ) + result += " Min |"; + if ( value & ResolveModeFlagBits::eMax ) + result += " Max |"; +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + if ( value & ResolveModeFlagBits::eExternalFormatDownsampleANDROID ) + result += " ExternalFormatDownsampleANDROID |"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SemaphoreWaitFlags value ) + { + std::string result = "{"; + if ( value & SemaphoreWaitFlagBits::eAny ) + result += " Any |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_VERSION_1_3 === + + VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlags value ) + { + std::string result = "{"; + if ( value & PipelineCreationFeedbackFlagBits::eValid ) + result += " Valid |"; + if ( value & PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit ) + result += " ApplicationPipelineCacheHit |"; + if ( value & PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration ) + result += " BasePipelineAcceleration |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlags value ) + { + std::string result = "{"; + if ( value & ToolPurposeFlagBits::eValidation ) + result += " Validation |"; + if ( value & ToolPurposeFlagBits::eProfiling ) + result += " Profiling |"; + if ( value & ToolPurposeFlagBits::eTracing ) + result += " Tracing |"; + if ( value & ToolPurposeFlagBits::eAdditionalFeatures ) + result += " AdditionalFeatures |"; + if ( value & ToolPurposeFlagBits::eModifyingFeatures ) + result += " ModifyingFeatures |"; + if ( value & ToolPurposeFlagBits::eDebugReportingEXT ) + result += " DebugReportingEXT |"; + if ( value & ToolPurposeFlagBits::eDebugMarkersEXT ) + result += " DebugMarkersEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PrivateDataSlotCreateFlags ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineStageFlags2 value ) + { + std::string result = "{"; + if ( value & PipelineStageFlagBits2::eTopOfPipe ) + result += " TopOfPipe |"; + if ( value & PipelineStageFlagBits2::eDrawIndirect ) + result += " DrawIndirect |"; + if ( value & PipelineStageFlagBits2::eVertexInput ) + result += " VertexInput |"; + if ( value & PipelineStageFlagBits2::eVertexShader ) + result += " VertexShader |"; + if ( value & PipelineStageFlagBits2::eTessellationControlShader ) + result += " TessellationControlShader |"; + if ( value & PipelineStageFlagBits2::eTessellationEvaluationShader ) + result += " TessellationEvaluationShader |"; + if ( value & PipelineStageFlagBits2::eGeometryShader ) + result += " GeometryShader |"; + if ( value & PipelineStageFlagBits2::eFragmentShader ) + result += " FragmentShader |"; + if ( value & PipelineStageFlagBits2::eEarlyFragmentTests ) + result += " EarlyFragmentTests |"; + if ( value & PipelineStageFlagBits2::eLateFragmentTests ) + result += " LateFragmentTests |"; + if ( value & PipelineStageFlagBits2::eColorAttachmentOutput ) + result += " ColorAttachmentOutput |"; + if ( value & PipelineStageFlagBits2::eComputeShader ) + result += " ComputeShader |"; + if ( value & PipelineStageFlagBits2::eAllTransfer ) + result += " AllTransfer |"; + if ( value & PipelineStageFlagBits2::eBottomOfPipe ) + result += " BottomOfPipe |"; + if ( value & PipelineStageFlagBits2::eHost ) + result += " Host |"; + if ( value & PipelineStageFlagBits2::eAllGraphics ) + result += " AllGraphics |"; + if ( value & PipelineStageFlagBits2::eAllCommands ) + result += " AllCommands |"; + if ( value & PipelineStageFlagBits2::eCopy ) + result += " Copy |"; + if ( value & PipelineStageFlagBits2::eResolve ) + result += " Resolve |"; + if ( value & PipelineStageFlagBits2::eBlit ) + result += " Blit |"; + if ( value & PipelineStageFlagBits2::eClear ) + result += " Clear |"; + if ( value & PipelineStageFlagBits2::eIndexInput ) + result += " IndexInput |"; + if ( value & PipelineStageFlagBits2::eVertexAttributeInput ) + result += " VertexAttributeInput |"; + if ( value & PipelineStageFlagBits2::ePreRasterizationShaders ) + result += " PreRasterizationShaders |"; + if ( value & PipelineStageFlagBits2::eVideoDecodeKHR ) + result += " VideoDecodeKHR |"; + if ( value & PipelineStageFlagBits2::eVideoEncodeKHR ) + result += " VideoEncodeKHR |"; + if ( value & PipelineStageFlagBits2::eTransformFeedbackEXT ) + result += " TransformFeedbackEXT |"; + if ( value & PipelineStageFlagBits2::eConditionalRenderingEXT ) + result += " ConditionalRenderingEXT |"; + if ( value & PipelineStageFlagBits2::eCommandPreprocessEXT ) + result += " CommandPreprocessEXT |"; + if ( value & PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR ) + result += " FragmentShadingRateAttachmentKHR |"; + if ( value & PipelineStageFlagBits2::eAccelerationStructureBuildKHR ) + result += " AccelerationStructureBuildKHR |"; + if ( value & PipelineStageFlagBits2::eRayTracingShaderKHR ) + result += " RayTracingShaderKHR |"; + if ( value & PipelineStageFlagBits2::eFragmentDensityProcessEXT ) + result += " FragmentDensityProcessEXT |"; + if ( value & PipelineStageFlagBits2::eTaskShaderEXT ) + result += " TaskShaderEXT |"; + if ( value & PipelineStageFlagBits2::eMeshShaderEXT ) + result += " MeshShaderEXT |"; + if ( value & PipelineStageFlagBits2::eSubpassShaderHUAWEI ) + result += " SubpassShaderHUAWEI |"; + if ( value & PipelineStageFlagBits2::eInvocationMaskHUAWEI ) + result += " InvocationMaskHUAWEI |"; + if ( value & PipelineStageFlagBits2::eAccelerationStructureCopyKHR ) + result += " AccelerationStructureCopyKHR |"; + if ( value & PipelineStageFlagBits2::eMicromapBuildEXT ) + result += " MicromapBuildEXT |"; + if ( value & PipelineStageFlagBits2::eClusterCullingShaderHUAWEI ) + result += " ClusterCullingShaderHUAWEI |"; + if ( value & PipelineStageFlagBits2::eOpticalFlowNV ) + result += " OpticalFlowNV |"; + if ( value & PipelineStageFlagBits2::eConvertCooperativeVectorMatrixNV ) + result += " ConvertCooperativeVectorMatrixNV |"; + if ( value & PipelineStageFlagBits2::eDataGraphARM ) + result += " DataGraphARM |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( AccessFlags2 value ) + { + std::string result = "{"; + if ( value & AccessFlagBits2::eIndirectCommandRead ) + result += " IndirectCommandRead |"; + if ( value & AccessFlagBits2::eIndexRead ) + result += " IndexRead |"; + if ( value & AccessFlagBits2::eVertexAttributeRead ) + result += " VertexAttributeRead |"; + if ( value & AccessFlagBits2::eUniformRead ) + result += " UniformRead |"; + if ( value & AccessFlagBits2::eInputAttachmentRead ) + result += " InputAttachmentRead |"; + if ( value & AccessFlagBits2::eShaderRead ) + result += " ShaderRead |"; + if ( value & AccessFlagBits2::eShaderWrite ) + result += " ShaderWrite |"; + if ( value & AccessFlagBits2::eColorAttachmentRead ) + result += " ColorAttachmentRead |"; + if ( value & AccessFlagBits2::eColorAttachmentWrite ) + result += " ColorAttachmentWrite |"; + if ( value & AccessFlagBits2::eDepthStencilAttachmentRead ) + result += " DepthStencilAttachmentRead |"; + if ( value & AccessFlagBits2::eDepthStencilAttachmentWrite ) + result += " DepthStencilAttachmentWrite |"; + if ( value & AccessFlagBits2::eTransferRead ) + result += " TransferRead |"; + if ( value & AccessFlagBits2::eTransferWrite ) + result += " TransferWrite |"; + if ( value & AccessFlagBits2::eHostRead ) + result += " HostRead |"; + if ( value & AccessFlagBits2::eHostWrite ) + result += " HostWrite |"; + if ( value & AccessFlagBits2::eMemoryRead ) + result += " MemoryRead |"; + if ( value & AccessFlagBits2::eMemoryWrite ) + result += " MemoryWrite |"; + if ( value & AccessFlagBits2::eShaderSampledRead ) + result += " ShaderSampledRead |"; + if ( value & AccessFlagBits2::eShaderStorageRead ) + result += " ShaderStorageRead |"; + if ( value & AccessFlagBits2::eShaderStorageWrite ) + result += " ShaderStorageWrite |"; + if ( value & AccessFlagBits2::eVideoDecodeReadKHR ) + result += " VideoDecodeReadKHR |"; + if ( value & AccessFlagBits2::eVideoDecodeWriteKHR ) + result += " VideoDecodeWriteKHR |"; + if ( value & AccessFlagBits2::eVideoEncodeReadKHR ) + result += " VideoEncodeReadKHR |"; + if ( value & AccessFlagBits2::eVideoEncodeWriteKHR ) + result += " VideoEncodeWriteKHR |"; + if ( value & AccessFlagBits2::eShaderTileAttachmentReadQCOM ) + result += " ShaderTileAttachmentReadQCOM |"; + if ( value & AccessFlagBits2::eShaderTileAttachmentWriteQCOM ) + result += " ShaderTileAttachmentWriteQCOM |"; + if ( value & AccessFlagBits2::eTransformFeedbackWriteEXT ) + result += " TransformFeedbackWriteEXT |"; + if ( value & AccessFlagBits2::eTransformFeedbackCounterReadEXT ) + result += " TransformFeedbackCounterReadEXT |"; + if ( value & AccessFlagBits2::eTransformFeedbackCounterWriteEXT ) + result += " TransformFeedbackCounterWriteEXT |"; + if ( value & AccessFlagBits2::eConditionalRenderingReadEXT ) + result += " ConditionalRenderingReadEXT |"; + if ( value & AccessFlagBits2::eCommandPreprocessReadEXT ) + result += " CommandPreprocessReadEXT |"; + if ( value & AccessFlagBits2::eCommandPreprocessWriteEXT ) + result += " CommandPreprocessWriteEXT |"; + if ( value & AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR ) + result += " FragmentShadingRateAttachmentReadKHR |"; + if ( value & AccessFlagBits2::eAccelerationStructureReadKHR ) + result += " AccelerationStructureReadKHR |"; + if ( value & AccessFlagBits2::eAccelerationStructureWriteKHR ) + result += " AccelerationStructureWriteKHR |"; + if ( value & AccessFlagBits2::eFragmentDensityMapReadEXT ) + result += " FragmentDensityMapReadEXT |"; + if ( value & AccessFlagBits2::eColorAttachmentReadNoncoherentEXT ) + result += " ColorAttachmentReadNoncoherentEXT |"; + if ( value & AccessFlagBits2::eDescriptorBufferReadEXT ) + result += " DescriptorBufferReadEXT |"; + if ( value & AccessFlagBits2::eInvocationMaskReadHUAWEI ) + result += " InvocationMaskReadHUAWEI |"; + if ( value & AccessFlagBits2::eShaderBindingTableReadKHR ) + result += " ShaderBindingTableReadKHR |"; + if ( value & AccessFlagBits2::eMicromapReadEXT ) + result += " MicromapReadEXT |"; + if ( value & AccessFlagBits2::eMicromapWriteEXT ) + result += " MicromapWriteEXT |"; + if ( value & AccessFlagBits2::eOpticalFlowReadNV ) + result += " OpticalFlowReadNV |"; + if ( value & AccessFlagBits2::eOpticalFlowWriteNV ) + result += " OpticalFlowWriteNV |"; + if ( value & AccessFlagBits2::eDataGraphReadARM ) + result += " DataGraphReadARM |"; + if ( value & AccessFlagBits2::eDataGraphWriteARM ) + result += " DataGraphWriteARM |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( SubmitFlags value ) + { + std::string result = "{"; + if ( value & SubmitFlagBits::eProtected ) + result += " Protected |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( RenderingFlags value ) + { + std::string result = "{"; + if ( value & RenderingFlagBits::eContentsSecondaryCommandBuffers ) + result += " ContentsSecondaryCommandBuffers |"; + if ( value & RenderingFlagBits::eSuspending ) + result += " Suspending |"; + if ( value & RenderingFlagBits::eResuming ) + result += " Resuming |"; + if ( value & RenderingFlagBits::eEnableLegacyDitheringEXT ) + result += " EnableLegacyDitheringEXT |"; + if ( value & RenderingFlagBits::eContentsInlineKHR ) + result += " ContentsInlineKHR |"; + if ( value & RenderingFlagBits::ePerLayerFragmentDensityVALVE ) + result += " PerLayerFragmentDensityVALVE |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlags2 value ) + { + std::string result = "{"; + if ( value & FormatFeatureFlagBits2::eSampledImage ) + result += " SampledImage |"; + if ( value & FormatFeatureFlagBits2::eStorageImage ) + result += " StorageImage |"; + if ( value & FormatFeatureFlagBits2::eStorageImageAtomic ) + result += " StorageImageAtomic |"; + if ( value & FormatFeatureFlagBits2::eUniformTexelBuffer ) + result += " UniformTexelBuffer |"; + if ( value & FormatFeatureFlagBits2::eStorageTexelBuffer ) + result += " StorageTexelBuffer |"; + if ( value & FormatFeatureFlagBits2::eStorageTexelBufferAtomic ) + result += " StorageTexelBufferAtomic |"; + if ( value & FormatFeatureFlagBits2::eVertexBuffer ) + result += " VertexBuffer |"; + if ( value & FormatFeatureFlagBits2::eColorAttachment ) + result += " ColorAttachment |"; + if ( value & FormatFeatureFlagBits2::eColorAttachmentBlend ) + result += " ColorAttachmentBlend |"; + if ( value & FormatFeatureFlagBits2::eDepthStencilAttachment ) + result += " DepthStencilAttachment |"; + if ( value & FormatFeatureFlagBits2::eBlitSrc ) + result += " BlitSrc |"; + if ( value & FormatFeatureFlagBits2::eBlitDst ) + result += " BlitDst |"; + if ( value & FormatFeatureFlagBits2::eSampledImageFilterLinear ) + result += " SampledImageFilterLinear |"; + if ( value & FormatFeatureFlagBits2::eTransferSrc ) + result += " TransferSrc |"; + if ( value & FormatFeatureFlagBits2::eTransferDst ) + result += " TransferDst |"; + if ( value & FormatFeatureFlagBits2::eSampledImageFilterMinmax ) + result += " SampledImageFilterMinmax |"; + if ( value & FormatFeatureFlagBits2::eMidpointChromaSamples ) + result += " MidpointChromaSamples |"; + if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter ) + result += " SampledImageYcbcrConversionLinearFilter |"; + if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter ) + result += " SampledImageYcbcrConversionSeparateReconstructionFilter |"; + if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit ) + result += " SampledImageYcbcrConversionChromaReconstructionExplicit |"; + if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) + result += " SampledImageYcbcrConversionChromaReconstructionExplicitForceable |"; + if ( value & FormatFeatureFlagBits2::eDisjoint ) + result += " Disjoint |"; + if ( value & FormatFeatureFlagBits2::eCositedChromaSamples ) + result += " CositedChromaSamples |"; + if ( value & FormatFeatureFlagBits2::eStorageReadWithoutFormat ) + result += " StorageReadWithoutFormat |"; + if ( value & FormatFeatureFlagBits2::eStorageWriteWithoutFormat ) + result += " StorageWriteWithoutFormat |"; + if ( value & FormatFeatureFlagBits2::eSampledImageDepthComparison ) + result += " SampledImageDepthComparison |"; + if ( value & FormatFeatureFlagBits2::eSampledImageFilterCubic ) + result += " SampledImageFilterCubic |"; + if ( value & FormatFeatureFlagBits2::eHostImageTransfer ) + result += " HostImageTransfer |"; + if ( value & FormatFeatureFlagBits2::eVideoDecodeOutputKHR ) + result += " VideoDecodeOutputKHR |"; + if ( value & FormatFeatureFlagBits2::eVideoDecodeDpbKHR ) + result += " VideoDecodeDpbKHR |"; + if ( value & FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR ) + result += " AccelerationStructureVertexBufferKHR |"; + if ( value & FormatFeatureFlagBits2::eFragmentDensityMapEXT ) + result += " FragmentDensityMapEXT |"; + if ( value & FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR ) + result += " FragmentShadingRateAttachmentKHR |"; + if ( value & FormatFeatureFlagBits2::eVideoEncodeInputKHR ) + result += " VideoEncodeInputKHR |"; + if ( value & FormatFeatureFlagBits2::eVideoEncodeDpbKHR ) + result += " VideoEncodeDpbKHR |"; + if ( value & FormatFeatureFlagBits2::eAccelerationStructureRadiusBufferNV ) + result += " AccelerationStructureRadiusBufferNV |"; + if ( value & FormatFeatureFlagBits2::eLinearColorAttachmentNV ) + result += " LinearColorAttachmentNV |"; + if ( value & FormatFeatureFlagBits2::eWeightImageQCOM ) + result += " WeightImageQCOM |"; + if ( value & FormatFeatureFlagBits2::eWeightSampledImageQCOM ) + result += " WeightSampledImageQCOM |"; + if ( value & FormatFeatureFlagBits2::eBlockMatchingQCOM ) + result += " BlockMatchingQCOM |"; + if ( value & FormatFeatureFlagBits2::eBoxFilterSampledQCOM ) + result += " BoxFilterSampledQCOM |"; + if ( value & FormatFeatureFlagBits2::eTensorShaderARM ) + result += " TensorShaderARM |"; + if ( value & FormatFeatureFlagBits2::eTensorImageAliasingARM ) + result += " TensorImageAliasingARM |"; + if ( value & FormatFeatureFlagBits2::eOpticalFlowImageNV ) + result += " OpticalFlowImageNV |"; + if ( value & FormatFeatureFlagBits2::eOpticalFlowVectorNV ) + result += " OpticalFlowVectorNV |"; + if ( value & FormatFeatureFlagBits2::eOpticalFlowCostNV ) + result += " OpticalFlowCostNV |"; + if ( value & FormatFeatureFlagBits2::eTensorDataGraphARM ) + result += " TensorDataGraphARM |"; + if ( value & FormatFeatureFlagBits2::eVideoEncodeQuantizationDeltaMapKHR ) + result += " VideoEncodeQuantizationDeltaMapKHR |"; + if ( value & FormatFeatureFlagBits2::eVideoEncodeEmphasisMapKHR ) + result += " VideoEncodeEmphasisMapKHR |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_VERSION_1_4 === + + VULKAN_HPP_INLINE std::string to_string( MemoryUnmapFlags value ) + { + std::string result = "{"; + if ( value & MemoryUnmapFlagBits::eReserveEXT ) + result += " ReserveEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PipelineCreateFlags2 value ) + { + std::string result = "{"; + if ( value & PipelineCreateFlagBits2::eDisableOptimization ) + result += " DisableOptimization |"; + if ( value & PipelineCreateFlagBits2::eAllowDerivatives ) + result += " AllowDerivatives |"; + if ( value & PipelineCreateFlagBits2::eDerivative ) + result += " Derivative |"; + if ( value & PipelineCreateFlagBits2::eViewIndexFromDeviceIndex ) + result += " ViewIndexFromDeviceIndex |"; + if ( value & PipelineCreateFlagBits2::eDispatchBase ) + result += " DispatchBase |"; + if ( value & PipelineCreateFlagBits2::eFailOnPipelineCompileRequired ) + result += " FailOnPipelineCompileRequired |"; + if ( value & PipelineCreateFlagBits2::eEarlyReturnOnFailure ) + result += " EarlyReturnOnFailure |"; + if ( value & PipelineCreateFlagBits2::eNoProtectedAccess ) + result += " NoProtectedAccess |"; + if ( value & PipelineCreateFlagBits2::eProtectedAccessOnly ) + result += " ProtectedAccessOnly |"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + if ( value & PipelineCreateFlagBits2::eExecutionGraphAMDX ) + result += " ExecutionGraphAMDX |"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + if ( value & PipelineCreateFlagBits2::eRayTracingAllowSpheresAndLinearSweptSpheresNV ) + result += " RayTracingAllowSpheresAndLinearSweptSpheresNV |"; + if ( value & PipelineCreateFlagBits2::eEnableLegacyDitheringEXT ) + result += " EnableLegacyDitheringEXT |"; + if ( value & PipelineCreateFlagBits2::eDeferCompileNV ) + result += " DeferCompileNV |"; + if ( value & PipelineCreateFlagBits2::eCaptureStatisticsKHR ) + result += " CaptureStatisticsKHR |"; + if ( value & PipelineCreateFlagBits2::eCaptureInternalRepresentationsKHR ) + result += " CaptureInternalRepresentationsKHR |"; + if ( value & PipelineCreateFlagBits2::eLinkTimeOptimizationEXT ) + result += " LinkTimeOptimizationEXT |"; + if ( value & PipelineCreateFlagBits2::eRetainLinkTimeOptimizationInfoEXT ) + result += " RetainLinkTimeOptimizationInfoEXT |"; + if ( value & PipelineCreateFlagBits2::eLibraryKHR ) + result += " LibraryKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingSkipTrianglesKHR ) + result += " RayTracingSkipTrianglesKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingSkipAabbsKHR ) + result += " RayTracingSkipAabbsKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingNoNullAnyHitShadersKHR ) + result += " RayTracingNoNullAnyHitShadersKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingNoNullClosestHitShadersKHR ) + result += " RayTracingNoNullClosestHitShadersKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingNoNullMissShadersKHR ) + result += " RayTracingNoNullMissShadersKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingNoNullIntersectionShadersKHR ) + result += " RayTracingNoNullIntersectionShadersKHR |"; + if ( value & PipelineCreateFlagBits2::eRayTracingShaderGroupHandleCaptureReplayKHR ) + result += " RayTracingShaderGroupHandleCaptureReplayKHR |"; + if ( value & PipelineCreateFlagBits2::eIndirectBindableNV ) + result += " IndirectBindableNV |"; + if ( value & PipelineCreateFlagBits2::eRayTracingAllowMotionNV ) + result += " RayTracingAllowMotionNV |"; + if ( value & PipelineCreateFlagBits2::eRenderingFragmentShadingRateAttachmentKHR ) + result += " RenderingFragmentShadingRateAttachmentKHR |"; + if ( value & PipelineCreateFlagBits2::eRenderingFragmentDensityMapAttachmentEXT ) + result += " RenderingFragmentDensityMapAttachmentEXT |"; + if ( value & PipelineCreateFlagBits2::eRayTracingOpacityMicromapEXT ) + result += " RayTracingOpacityMicromapEXT |"; + if ( value & PipelineCreateFlagBits2::eColorAttachmentFeedbackLoopEXT ) + result += " ColorAttachmentFeedbackLoopEXT |"; + if ( value & PipelineCreateFlagBits2::eDepthStencilAttachmentFeedbackLoopEXT ) + result += " DepthStencilAttachmentFeedbackLoopEXT |"; + if ( value & PipelineCreateFlagBits2::eRayTracingDisplacementMicromapNV ) + result += " RayTracingDisplacementMicromapNV |"; + if ( value & PipelineCreateFlagBits2::eDescriptorBufferEXT ) + result += " DescriptorBufferEXT |"; + if ( value & PipelineCreateFlagBits2::eDisallowOpacityMicromapARM ) + result += " DisallowOpacityMicromapARM |"; + if ( value & PipelineCreateFlagBits2::eCaptureDataKHR ) + result += " CaptureDataKHR |"; + if ( value & PipelineCreateFlagBits2::eIndirectBindableEXT ) + result += " IndirectBindableEXT |"; + if ( value & PipelineCreateFlagBits2::ePerLayerFragmentDensityVALVE ) + result += " PerLayerFragmentDensityVALVE |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( BufferUsageFlags2 value ) + { + std::string result = "{"; + if ( value & BufferUsageFlagBits2::eTransferSrc ) + result += " TransferSrc |"; + if ( value & BufferUsageFlagBits2::eTransferDst ) + result += " TransferDst |"; + if ( value & BufferUsageFlagBits2::eUniformTexelBuffer ) + result += " UniformTexelBuffer |"; + if ( value & BufferUsageFlagBits2::eStorageTexelBuffer ) + result += " StorageTexelBuffer |"; + if ( value & BufferUsageFlagBits2::eUniformBuffer ) + result += " UniformBuffer |"; + if ( value & BufferUsageFlagBits2::eStorageBuffer ) + result += " StorageBuffer |"; + if ( value & BufferUsageFlagBits2::eIndexBuffer ) + result += " IndexBuffer |"; + if ( value & BufferUsageFlagBits2::eVertexBuffer ) + result += " VertexBuffer |"; + if ( value & BufferUsageFlagBits2::eIndirectBuffer ) + result += " IndirectBuffer |"; + if ( value & BufferUsageFlagBits2::eShaderDeviceAddress ) + result += " ShaderDeviceAddress |"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + if ( value & BufferUsageFlagBits2::eExecutionGraphScratchAMDX ) + result += " ExecutionGraphScratchAMDX |"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + if ( value & BufferUsageFlagBits2::eConditionalRenderingEXT ) + result += " ConditionalRenderingEXT |"; + if ( value & BufferUsageFlagBits2::eShaderBindingTableKHR ) + result += " ShaderBindingTableKHR |"; + if ( value & BufferUsageFlagBits2::eTransformFeedbackBufferEXT ) + result += " TransformFeedbackBufferEXT |"; + if ( value & BufferUsageFlagBits2::eTransformFeedbackCounterBufferEXT ) + result += " TransformFeedbackCounterBufferEXT |"; + if ( value & BufferUsageFlagBits2::eVideoDecodeSrcKHR ) + result += " VideoDecodeSrcKHR |"; + if ( value & BufferUsageFlagBits2::eVideoDecodeDstKHR ) + result += " VideoDecodeDstKHR |"; + if ( value & BufferUsageFlagBits2::eVideoEncodeDstKHR ) + result += " VideoEncodeDstKHR |"; + if ( value & BufferUsageFlagBits2::eVideoEncodeSrcKHR ) + result += " VideoEncodeSrcKHR |"; + if ( value & BufferUsageFlagBits2::eAccelerationStructureBuildInputReadOnlyKHR ) + result += " AccelerationStructureBuildInputReadOnlyKHR |"; + if ( value & BufferUsageFlagBits2::eAccelerationStructureStorageKHR ) + result += " AccelerationStructureStorageKHR |"; + if ( value & BufferUsageFlagBits2::eSamplerDescriptorBufferEXT ) + result += " SamplerDescriptorBufferEXT |"; + if ( value & BufferUsageFlagBits2::eResourceDescriptorBufferEXT ) + result += " ResourceDescriptorBufferEXT |"; + if ( value & BufferUsageFlagBits2::ePushDescriptorsDescriptorBufferEXT ) + result += " PushDescriptorsDescriptorBufferEXT |"; + if ( value & BufferUsageFlagBits2::eMicromapBuildInputReadOnlyEXT ) + result += " MicromapBuildInputReadOnlyEXT |"; + if ( value & BufferUsageFlagBits2::eMicromapStorageEXT ) + result += " MicromapStorageEXT |"; + if ( value & BufferUsageFlagBits2::eDataGraphForeignDescriptorARM ) + result += " DataGraphForeignDescriptorARM |"; + if ( value & BufferUsageFlagBits2::eTileMemoryQCOM ) + result += " TileMemoryQCOM |"; + if ( value & BufferUsageFlagBits2::ePreprocessBufferEXT ) + result += " PreprocessBufferEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( HostImageCopyFlags value ) + { + std::string result = "{"; + if ( value & HostImageCopyFlagBits::eMemcpy ) + result += " Memcpy |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_surface === + + VULKAN_HPP_INLINE std::string to_string( CompositeAlphaFlagsKHR value ) + { + std::string result = "{"; + if ( value & CompositeAlphaFlagBitsKHR::eOpaque ) + result += " Opaque |"; + if ( value & CompositeAlphaFlagBitsKHR::ePreMultiplied ) + result += " PreMultiplied |"; + if ( value & CompositeAlphaFlagBitsKHR::ePostMultiplied ) + result += " PostMultiplied |"; + if ( value & CompositeAlphaFlagBitsKHR::eInherit ) + result += " Inherit |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_swapchain === + + VULKAN_HPP_INLINE std::string to_string( SwapchainCreateFlagsKHR value ) + { + std::string result = "{"; + if ( value & SwapchainCreateFlagBitsKHR::eSplitInstanceBindRegions ) + result += " SplitInstanceBindRegions |"; + if ( value & SwapchainCreateFlagBitsKHR::eProtected ) + result += " Protected |"; + if ( value & SwapchainCreateFlagBitsKHR::eMutableFormat ) + result += " MutableFormat |"; + if ( value & SwapchainCreateFlagBitsKHR::ePresentId2 ) + result += " PresentId2 |"; + if ( value & SwapchainCreateFlagBitsKHR::ePresentWait2 ) + result += " PresentWait2 |"; + if ( value & SwapchainCreateFlagBitsKHR::eDeferredMemoryAllocation ) + result += " DeferredMemoryAllocation |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( DeviceGroupPresentModeFlagsKHR value ) + { + std::string result = "{"; + if ( value & DeviceGroupPresentModeFlagBitsKHR::eLocal ) + result += " Local |"; + if ( value & DeviceGroupPresentModeFlagBitsKHR::eRemote ) + result += " Remote |"; + if ( value & DeviceGroupPresentModeFlagBitsKHR::eSum ) + result += " Sum |"; + if ( value & DeviceGroupPresentModeFlagBitsKHR::eLocalMultiDevice ) + result += " LocalMultiDevice |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_display === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplayModeCreateFlagsKHR ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( DisplayPlaneAlphaFlagsKHR value ) + { + std::string result = "{"; + if ( value & DisplayPlaneAlphaFlagBitsKHR::eOpaque ) + result += " Opaque |"; + if ( value & DisplayPlaneAlphaFlagBitsKHR::eGlobal ) + result += " Global |"; + if ( value & DisplayPlaneAlphaFlagBitsKHR::ePerPixel ) + result += " PerPixel |"; + if ( value & DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied ) + result += " PerPixelPremultiplied |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplaySurfaceCreateFlagsKHR ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( SurfaceTransformFlagsKHR value ) + { + std::string result = "{"; + if ( value & SurfaceTransformFlagBitsKHR::eIdentity ) + result += " Identity |"; + if ( value & SurfaceTransformFlagBitsKHR::eRotate90 ) + result += " Rotate90 |"; + if ( value & SurfaceTransformFlagBitsKHR::eRotate180 ) + result += " Rotate180 |"; + if ( value & SurfaceTransformFlagBitsKHR::eRotate270 ) + result += " Rotate270 |"; + if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirror ) + result += " HorizontalMirror |"; + if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90 ) + result += " HorizontalMirrorRotate90 |"; + if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180 ) + result += " HorizontalMirrorRotate180 |"; + if ( value & SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270 ) + result += " HorizontalMirrorRotate270 |"; + if ( value & SurfaceTransformFlagBitsKHR::eInherit ) + result += " Inherit |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( XlibSurfaceCreateFlagsKHR ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( XcbSurfaceCreateFlagsKHR ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( WaylandSurfaceCreateFlagsKHR ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AndroidSurfaceCreateFlagsKHR ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( Win32SurfaceCreateFlagsKHR ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + VULKAN_HPP_INLINE std::string to_string( DebugReportFlagsEXT value ) + { + std::string result = "{"; + if ( value & DebugReportFlagBitsEXT::eInformation ) + result += " Information |"; + if ( value & DebugReportFlagBitsEXT::eWarning ) + result += " Warning |"; + if ( value & DebugReportFlagBitsEXT::ePerformanceWarning ) + result += " PerformanceWarning |"; + if ( value & DebugReportFlagBitsEXT::eError ) + result += " Error |"; + if ( value & DebugReportFlagBitsEXT::eDebug ) + result += " Debug |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_video_queue === + + VULKAN_HPP_INLINE std::string to_string( VideoCodecOperationFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoCodecOperationFlagBitsKHR::eEncodeH264 ) + result += " EncodeH264 |"; + if ( value & VideoCodecOperationFlagBitsKHR::eEncodeH265 ) + result += " EncodeH265 |"; + if ( value & VideoCodecOperationFlagBitsKHR::eDecodeH264 ) + result += " DecodeH264 |"; + if ( value & VideoCodecOperationFlagBitsKHR::eDecodeH265 ) + result += " DecodeH265 |"; + if ( value & VideoCodecOperationFlagBitsKHR::eDecodeAv1 ) + result += " DecodeAv1 |"; + if ( value & VideoCodecOperationFlagBitsKHR::eEncodeAv1 ) + result += " EncodeAv1 |"; + if ( value & VideoCodecOperationFlagBitsKHR::eDecodeVp9 ) + result += " DecodeVp9 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoChromaSubsamplingFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoChromaSubsamplingFlagBitsKHR::eMonochrome ) + result += " Monochrome |"; + if ( value & VideoChromaSubsamplingFlagBitsKHR::e420 ) + result += " 420 |"; + if ( value & VideoChromaSubsamplingFlagBitsKHR::e422 ) + result += " 422 |"; + if ( value & VideoChromaSubsamplingFlagBitsKHR::e444 ) + result += " 444 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Invalid"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoComponentBitDepthFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoComponentBitDepthFlagBitsKHR::e8 ) + result += " 8 |"; + if ( value & VideoComponentBitDepthFlagBitsKHR::e10 ) + result += " 10 |"; + if ( value & VideoComponentBitDepthFlagBitsKHR::e12 ) + result += " 12 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Invalid"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoCapabilityFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoCapabilityFlagBitsKHR::eProtectedContent ) + result += " ProtectedContent |"; + if ( value & VideoCapabilityFlagBitsKHR::eSeparateReferenceImages ) + result += " SeparateReferenceImages |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoSessionCreateFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoSessionCreateFlagBitsKHR::eProtectedContent ) + result += " ProtectedContent |"; + if ( value & VideoSessionCreateFlagBitsKHR::eAllowEncodeParameterOptimizations ) + result += " AllowEncodeParameterOptimizations |"; + if ( value & VideoSessionCreateFlagBitsKHR::eInlineQueries ) + result += " InlineQueries |"; + if ( value & VideoSessionCreateFlagBitsKHR::eAllowEncodeQuantizationDeltaMap ) + result += " AllowEncodeQuantizationDeltaMap |"; + if ( value & VideoSessionCreateFlagBitsKHR::eAllowEncodeEmphasisMap ) + result += " AllowEncodeEmphasisMap |"; + if ( value & VideoSessionCreateFlagBitsKHR::eInlineSessionParameters ) + result += " InlineSessionParameters |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoSessionParametersCreateFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoSessionParametersCreateFlagBitsKHR::eQuantizationMapCompatible ) + result += " QuantizationMapCompatible |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoBeginCodingFlagsKHR ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEndCodingFlagsKHR ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( VideoCodingControlFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoCodingControlFlagBitsKHR::eReset ) + result += " Reset |"; + if ( value & VideoCodingControlFlagBitsKHR::eEncodeRateControl ) + result += " EncodeRateControl |"; + if ( value & VideoCodingControlFlagBitsKHR::eEncodeQualityLevel ) + result += " EncodeQualityLevel |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_video_decode_queue === + + VULKAN_HPP_INLINE std::string to_string( VideoDecodeCapabilityFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputCoincide ) + result += " DpbAndOutputCoincide |"; + if ( value & VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputDistinct ) + result += " DpbAndOutputDistinct |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoDecodeUsageFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoDecodeUsageFlagBitsKHR::eTranscoding ) + result += " Transcoding |"; + if ( value & VideoDecodeUsageFlagBitsKHR::eOffline ) + result += " Offline |"; + if ( value & VideoDecodeUsageFlagBitsKHR::eStreaming ) + result += " Streaming |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Default"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoDecodeFlagsKHR ) + { + return "{}"; + } + + //=== VK_EXT_transform_feedback === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationStateStreamCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_KHR_video_encode_h264 === + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264CapabilityFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eHrdCompliance ) + result += " HrdCompliance |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::ePredictionWeightTableGenerated ) + result += " PredictionWeightTableGenerated |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eRowUnalignedSlice ) + result += " RowUnalignedSlice |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eDifferentSliceType ) + result += " DifferentSliceType |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eBFrameInL0List ) + result += " BFrameInL0List |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eBFrameInL1List ) + result += " BFrameInL1List |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::ePerPictureTypeMinMaxQp ) + result += " PerPictureTypeMinMaxQp |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::ePerSliceConstantQp ) + result += " PerSliceConstantQp |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eGeneratePrefixNalu ) + result += " GeneratePrefixNalu |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eBPictureIntraRefresh ) + result += " BPictureIntraRefresh |"; + if ( value & VideoEncodeH264CapabilityFlagBitsKHR::eMbQpDiffWraparound ) + result += " MbQpDiffWraparound |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264StdFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eSeparateColorPlaneFlagSet ) + result += " SeparateColorPlaneFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eQpprimeYZeroTransformBypassFlagSet ) + result += " QpprimeYZeroTransformBypassFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eScalingMatrixPresentFlagSet ) + result += " ScalingMatrixPresentFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eChromaQpIndexOffset ) + result += " ChromaQpIndexOffset |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eSecondChromaQpIndexOffset ) + result += " SecondChromaQpIndexOffset |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::ePicInitQpMinus26 ) + result += " PicInitQpMinus26 |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eWeightedPredFlagSet ) + result += " WeightedPredFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eWeightedBipredIdcExplicit ) + result += " WeightedBipredIdcExplicit |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eWeightedBipredIdcImplicit ) + result += " WeightedBipredIdcImplicit |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eTransform8X8ModeFlagSet ) + result += " Transform8X8ModeFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eDirectSpatialMvPredFlagUnset ) + result += " DirectSpatialMvPredFlagUnset |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eEntropyCodingModeFlagUnset ) + result += " EntropyCodingModeFlagUnset |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eEntropyCodingModeFlagSet ) + result += " EntropyCodingModeFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eDirect8X8InferenceFlagUnset ) + result += " Direct8X8InferenceFlagUnset |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eConstrainedIntraPredFlagSet ) + result += " ConstrainedIntraPredFlagSet |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterDisabled ) + result += " DeblockingFilterDisabled |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterEnabled ) + result += " DeblockingFilterEnabled |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterPartial ) + result += " DeblockingFilterPartial |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eSliceQpDelta ) + result += " SliceQpDelta |"; + if ( value & VideoEncodeH264StdFlagBitsKHR::eDifferentSliceQpDelta ) + result += " DifferentSliceQpDelta |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264RateControlFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH264RateControlFlagBitsKHR::eAttemptHrdCompliance ) + result += " AttemptHrdCompliance |"; + if ( value & VideoEncodeH264RateControlFlagBitsKHR::eRegularGop ) + result += " RegularGop |"; + if ( value & VideoEncodeH264RateControlFlagBitsKHR::eReferencePatternFlat ) + result += " ReferencePatternFlat |"; + if ( value & VideoEncodeH264RateControlFlagBitsKHR::eReferencePatternDyadic ) + result += " ReferencePatternDyadic |"; + if ( value & VideoEncodeH264RateControlFlagBitsKHR::eTemporalLayerPatternDyadic ) + result += " TemporalLayerPatternDyadic |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_video_encode_h265 === + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CapabilityFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eHrdCompliance ) + result += " HrdCompliance |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::ePredictionWeightTableGenerated ) + result += " PredictionWeightTableGenerated |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eRowUnalignedSliceSegment ) + result += " RowUnalignedSliceSegment |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eDifferentSliceSegmentType ) + result += " DifferentSliceSegmentType |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eBFrameInL0List ) + result += " BFrameInL0List |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eBFrameInL1List ) + result += " BFrameInL1List |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::ePerPictureTypeMinMaxQp ) + result += " PerPictureTypeMinMaxQp |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::ePerSliceSegmentConstantQp ) + result += " PerSliceSegmentConstantQp |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eMultipleTilesPerSliceSegment ) + result += " MultipleTilesPerSliceSegment |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eMultipleSliceSegmentsPerTile ) + result += " MultipleSliceSegmentsPerTile |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eBPictureIntraRefresh ) + result += " BPictureIntraRefresh |"; + if ( value & VideoEncodeH265CapabilityFlagBitsKHR::eCuQpDiffWraparound ) + result += " CuQpDiffWraparound |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265StdFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eSeparateColorPlaneFlagSet ) + result += " SeparateColorPlaneFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eSampleAdaptiveOffsetEnabledFlagSet ) + result += " SampleAdaptiveOffsetEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eScalingListDataPresentFlagSet ) + result += " ScalingListDataPresentFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::ePcmEnabledFlagSet ) + result += " PcmEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eSpsTemporalMvpEnabledFlagSet ) + result += " SpsTemporalMvpEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eInitQpMinus26 ) + result += " InitQpMinus26 |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eWeightedPredFlagSet ) + result += " WeightedPredFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eWeightedBipredFlagSet ) + result += " WeightedBipredFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eLog2ParallelMergeLevelMinus2 ) + result += " Log2ParallelMergeLevelMinus2 |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eSignDataHidingEnabledFlagSet ) + result += " SignDataHidingEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eTransformSkipEnabledFlagSet ) + result += " TransformSkipEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eTransformSkipEnabledFlagUnset ) + result += " TransformSkipEnabledFlagUnset |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::ePpsSliceChromaQpOffsetsPresentFlagSet ) + result += " PpsSliceChromaQpOffsetsPresentFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eTransquantBypassEnabledFlagSet ) + result += " TransquantBypassEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eConstrainedIntraPredFlagSet ) + result += " ConstrainedIntraPredFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eEntropyCodingSyncEnabledFlagSet ) + result += " EntropyCodingSyncEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eDeblockingFilterOverrideEnabledFlagSet ) + result += " DeblockingFilterOverrideEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eDependentSliceSegmentsEnabledFlagSet ) + result += " DependentSliceSegmentsEnabledFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eDependentSliceSegmentFlagSet ) + result += " DependentSliceSegmentFlagSet |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eSliceQpDelta ) + result += " SliceQpDelta |"; + if ( value & VideoEncodeH265StdFlagBitsKHR::eDifferentSliceQpDelta ) + result += " DifferentSliceQpDelta |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CtbSizeFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH265CtbSizeFlagBitsKHR::e16 ) + result += " 16 |"; + if ( value & VideoEncodeH265CtbSizeFlagBitsKHR::e32 ) + result += " 32 |"; + if ( value & VideoEncodeH265CtbSizeFlagBitsKHR::e64 ) + result += " 64 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265TransformBlockSizeFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH265TransformBlockSizeFlagBitsKHR::e4 ) + result += " 4 |"; + if ( value & VideoEncodeH265TransformBlockSizeFlagBitsKHR::e8 ) + result += " 8 |"; + if ( value & VideoEncodeH265TransformBlockSizeFlagBitsKHR::e16 ) + result += " 16 |"; + if ( value & VideoEncodeH265TransformBlockSizeFlagBitsKHR::e32 ) + result += " 32 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265RateControlFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeH265RateControlFlagBitsKHR::eAttemptHrdCompliance ) + result += " AttemptHrdCompliance |"; + if ( value & VideoEncodeH265RateControlFlagBitsKHR::eRegularGop ) + result += " RegularGop |"; + if ( value & VideoEncodeH265RateControlFlagBitsKHR::eReferencePatternFlat ) + result += " ReferencePatternFlat |"; + if ( value & VideoEncodeH265RateControlFlagBitsKHR::eReferencePatternDyadic ) + result += " ReferencePatternDyadic |"; + if ( value & VideoEncodeH265RateControlFlagBitsKHR::eTemporalSubLayerPatternDyadic ) + result += " TemporalSubLayerPatternDyadic |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_video_decode_h264 === + + VULKAN_HPP_INLINE std::string to_string( VideoDecodeH264PictureLayoutFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoDecodeH264PictureLayoutFlagBitsKHR::eInterlacedInterleavedLines ) + result += " InterlacedInterleavedLines |"; + if ( value & VideoDecodeH264PictureLayoutFlagBitsKHR::eInterlacedSeparatePlanes ) + result += " InterlacedSeparatePlanes |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Progressive"; + return result; + } + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( StreamDescriptorSurfaceCreateFlagsGGP ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + + VULKAN_HPP_INLINE std::string to_string( ExternalMemoryHandleTypeFlagsNV value ) + { + std::string result = "{"; + if ( value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32 ) + result += " OpaqueWin32 |"; + if ( value & ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt ) + result += " OpaqueWin32Kmt |"; + if ( value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image ) + result += " D3D11Image |"; + if ( value & ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt ) + result += " D3D11ImageKmt |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ExternalMemoryFeatureFlagsNV value ) + { + std::string result = "{"; + if ( value & ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly ) + result += " DedicatedOnly |"; + if ( value & ExternalMemoryFeatureFlagBitsNV::eExportable ) + result += " Exportable |"; + if ( value & ExternalMemoryFeatureFlagBitsNV::eImportable ) + result += " Importable |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ViSurfaceCreateFlagsNN ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_conditional_rendering === + + VULKAN_HPP_INLINE std::string to_string( ConditionalRenderingFlagsEXT value ) + { + std::string result = "{"; + if ( value & ConditionalRenderingFlagBitsEXT::eInverted ) + result += " Inverted |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_EXT_display_surface_counter === + + VULKAN_HPP_INLINE std::string to_string( SurfaceCounterFlagsEXT value ) + { + std::string result = "{"; + if ( value & SurfaceCounterFlagBitsEXT::eVblank ) + result += " Vblank |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_NV_viewport_swizzle === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineViewportSwizzleStateCreateFlagsNV ) + { + return "{}"; + } + + //=== VK_EXT_discard_rectangles === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineDiscardRectangleStateCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_EXT_conservative_rasterization === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationConservativeStateCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_EXT_depth_clip_enable === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationDepthClipStateCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_KHR_performance_query === + + VULKAN_HPP_INLINE std::string to_string( PerformanceCounterDescriptionFlagsKHR value ) + { + std::string result = "{"; + if ( value & PerformanceCounterDescriptionFlagBitsKHR::ePerformanceImpacting ) + result += " PerformanceImpacting |"; + if ( value & PerformanceCounterDescriptionFlagBitsKHR::eConcurrentlyImpacted ) + result += " ConcurrentlyImpacted |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AcquireProfilingLockFlagsKHR ) + { + return "{}"; + } + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IOSSurfaceCreateFlagsMVK ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MacOSSurfaceCreateFlagsMVK ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessageSeverityFlagsEXT value ) + { + std::string result = "{"; + if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eVerbose ) + result += " Verbose |"; + if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eInfo ) + result += " Info |"; + if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eWarning ) + result += " Warning |"; + if ( value & DebugUtilsMessageSeverityFlagBitsEXT::eError ) + result += " Error |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( DebugUtilsMessageTypeFlagsEXT value ) + { + std::string result = "{"; + if ( value & DebugUtilsMessageTypeFlagBitsEXT::eGeneral ) + result += " General |"; + if ( value & DebugUtilsMessageTypeFlagBitsEXT::eValidation ) + result += " Validation |"; + if ( value & DebugUtilsMessageTypeFlagBitsEXT::ePerformance ) + result += " Performance |"; + if ( value & DebugUtilsMessageTypeFlagBitsEXT::eDeviceAddressBinding ) + result += " DeviceAddressBinding |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugUtilsMessengerCallbackDataFlagsEXT ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugUtilsMessengerCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_NV_fragment_coverage_to_color === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCoverageToColorStateCreateFlagsNV ) + { + return "{}"; + } + + //=== VK_KHR_acceleration_structure === + + VULKAN_HPP_INLINE std::string to_string( GeometryFlagsKHR value ) + { + std::string result = "{"; + if ( value & GeometryFlagBitsKHR::eOpaque ) + result += " Opaque |"; + if ( value & GeometryFlagBitsKHR::eNoDuplicateAnyHitInvocation ) + result += " NoDuplicateAnyHitInvocation |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( GeometryInstanceFlagsKHR value ) + { + std::string result = "{"; + if ( value & GeometryInstanceFlagBitsKHR::eTriangleFacingCullDisable ) + result += " TriangleFacingCullDisable |"; + if ( value & GeometryInstanceFlagBitsKHR::eTriangleFlipFacing ) + result += " TriangleFlipFacing |"; + if ( value & GeometryInstanceFlagBitsKHR::eForceOpaque ) + result += " ForceOpaque |"; + if ( value & GeometryInstanceFlagBitsKHR::eForceNoOpaque ) + result += " ForceNoOpaque |"; + if ( value & GeometryInstanceFlagBitsKHR::eForceOpacityMicromap2StateEXT ) + result += " ForceOpacityMicromap2StateEXT |"; + if ( value & GeometryInstanceFlagBitsKHR::eDisableOpacityMicromapsEXT ) + result += " DisableOpacityMicromapsEXT |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( BuildAccelerationStructureFlagsKHR value ) + { + std::string result = "{"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowUpdate ) + result += " AllowUpdate |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowCompaction ) + result += " AllowCompaction |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace ) + result += " PreferFastTrace |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild ) + result += " PreferFastBuild |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eLowMemory ) + result += " LowMemory |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eMotionNV ) + result += " MotionNV |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowOpacityMicromapUpdateEXT ) + result += " AllowOpacityMicromapUpdateEXT |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowDisableOpacityMicromapsEXT ) + result += " AllowDisableOpacityMicromapsEXT |"; + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowOpacityMicromapDataUpdateEXT ) + result += " AllowOpacityMicromapDataUpdateEXT |"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowDisplacementMicromapUpdateNV ) + result += " AllowDisplacementMicromapUpdateNV |"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + if ( value & BuildAccelerationStructureFlagBitsKHR::eAllowDataAccess ) + result += " AllowDataAccess |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( AccelerationStructureCreateFlagsKHR value ) + { + std::string result = "{"; + if ( value & AccelerationStructureCreateFlagBitsKHR::eDeviceAddressCaptureReplay ) + result += " DeviceAddressCaptureReplay |"; + if ( value & AccelerationStructureCreateFlagBitsKHR::eDescriptorBufferCaptureReplayEXT ) + result += " DescriptorBufferCaptureReplayEXT |"; + if ( value & AccelerationStructureCreateFlagBitsKHR::eMotionNV ) + result += " MotionNV |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_NV_framebuffer_mixed_samples === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCoverageModulationStateCreateFlagsNV ) + { + return "{}"; + } + + //=== VK_EXT_validation_cache === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ValidationCacheCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_AMD_pipeline_compiler_control === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCompilerControlFlagsAMD ) + { + return "{}"; + } + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImagePipeSurfaceCreateFlagsFUCHSIA ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MetalSurfaceCreateFlagsEXT ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_AMD_shader_core_properties2 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderCorePropertiesFlagsAMD ) + { + return "{}"; + } + + //=== VK_NV_coverage_reduction_mode === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCoverageReductionStateCreateFlagsNV ) + { + return "{}"; + } + + //=== VK_EXT_headless_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( HeadlessSurfaceCreateFlagsEXT ) + { + return "{}"; + } + + //=== VK_NV_device_generated_commands === + + VULKAN_HPP_INLINE std::string to_string( IndirectStateFlagsNV value ) + { + std::string result = "{"; + if ( value & IndirectStateFlagBitsNV::eFlagFrontface ) + result += " FlagFrontface |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( IndirectCommandsLayoutUsageFlagsNV value ) + { + std::string result = "{"; + if ( value & IndirectCommandsLayoutUsageFlagBitsNV::eExplicitPreprocess ) + result += " ExplicitPreprocess |"; + if ( value & IndirectCommandsLayoutUsageFlagBitsNV::eIndexedSequences ) + result += " IndexedSequences |"; + if ( value & IndirectCommandsLayoutUsageFlagBitsNV::eUnorderedSequences ) + result += " UnorderedSequences |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_EXT_device_memory_report === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceMemoryReportFlagsEXT ) + { + return "{}"; + } + + //=== VK_KHR_video_encode_queue === + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeFlagBitsKHR::eIntraRefresh ) + result += " IntraRefresh |"; + if ( value & VideoEncodeFlagBitsKHR::eWithQuantizationDeltaMap ) + result += " WithQuantizationDeltaMap |"; + if ( value & VideoEncodeFlagBitsKHR::eWithEmphasisMap ) + result += " WithEmphasisMap |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeCapabilityFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeCapabilityFlagBitsKHR::ePrecedingExternallyEncodedBytes ) + result += " PrecedingExternallyEncodedBytes |"; + if ( value & VideoEncodeCapabilityFlagBitsKHR::eInsufficientBitstreamBufferRangeDetection ) + result += " InsufficientBitstreamBufferRangeDetection |"; + if ( value & VideoEncodeCapabilityFlagBitsKHR::eQuantizationDeltaMap ) + result += " QuantizationDeltaMap |"; + if ( value & VideoEncodeCapabilityFlagBitsKHR::eEmphasisMap ) + result += " EmphasisMap |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeFeedbackFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeFeedbackFlagBitsKHR::eBitstreamBufferOffset ) + result += " BitstreamBufferOffset |"; + if ( value & VideoEncodeFeedbackFlagBitsKHR::eBitstreamBytesWritten ) + result += " BitstreamBytesWritten |"; + if ( value & VideoEncodeFeedbackFlagBitsKHR::eBitstreamHasOverrides ) + result += " BitstreamHasOverrides |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeUsageFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeUsageFlagBitsKHR::eTranscoding ) + result += " Transcoding |"; + if ( value & VideoEncodeUsageFlagBitsKHR::eStreaming ) + result += " Streaming |"; + if ( value & VideoEncodeUsageFlagBitsKHR::eRecording ) + result += " Recording |"; + if ( value & VideoEncodeUsageFlagBitsKHR::eConferencing ) + result += " Conferencing |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Default"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeContentFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeContentFlagBitsKHR::eCamera ) + result += " Camera |"; + if ( value & VideoEncodeContentFlagBitsKHR::eDesktop ) + result += " Desktop |"; + if ( value & VideoEncodeContentFlagBitsKHR::eRendered ) + result += " Rendered |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Default"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeRateControlFlagsKHR ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeRateControlModeFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeRateControlModeFlagBitsKHR::eDisabled ) + result += " Disabled |"; + if ( value & VideoEncodeRateControlModeFlagBitsKHR::eCbr ) + result += " Cbr |"; + if ( value & VideoEncodeRateControlModeFlagBitsKHR::eVbr ) + result += " Vbr |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Default"; + return result; + } + + //=== VK_NV_device_diagnostics_config === + + VULKAN_HPP_INLINE std::string to_string( DeviceDiagnosticsConfigFlagsNV value ) + { + std::string result = "{"; + if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderDebugInfo ) + result += " EnableShaderDebugInfo |"; + if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableResourceTracking ) + result += " EnableResourceTracking |"; + if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableAutomaticCheckpoints ) + result += " EnableAutomaticCheckpoints |"; + if ( value & DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderErrorReporting ) + result += " EnableShaderErrorReporting |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_QCOM_tile_shading === + + VULKAN_HPP_INLINE std::string to_string( TileShadingRenderPassFlagsQCOM value ) + { + std::string result = "{"; + if ( value & TileShadingRenderPassFlagBitsQCOM::eEnable ) + result += " Enable |"; + if ( value & TileShadingRenderPassFlagBitsQCOM::ePerTileExecution ) + result += " PerTileExecution |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + VULKAN_HPP_INLINE std::string to_string( ExportMetalObjectTypeFlagsEXT value ) + { + std::string result = "{"; + if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalDevice ) + result += " MetalDevice |"; + if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalCommandQueue ) + result += " MetalCommandQueue |"; + if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalBuffer ) + result += " MetalBuffer |"; + if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalTexture ) + result += " MetalTexture |"; + if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalIosurface ) + result += " MetalIosurface |"; + if ( value & ExportMetalObjectTypeFlagBitsEXT::eMetalSharedEvent ) + result += " MetalSharedEvent |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_graphics_pipeline_library === + + VULKAN_HPP_INLINE std::string to_string( GraphicsPipelineLibraryFlagsEXT value ) + { + std::string result = "{"; + if ( value & GraphicsPipelineLibraryFlagBitsEXT::eVertexInputInterface ) + result += " VertexInputInterface |"; + if ( value & GraphicsPipelineLibraryFlagBitsEXT::ePreRasterizationShaders ) + result += " PreRasterizationShaders |"; + if ( value & GraphicsPipelineLibraryFlagBitsEXT::eFragmentShader ) + result += " FragmentShader |"; + if ( value & GraphicsPipelineLibraryFlagBitsEXT::eFragmentOutputInterface ) + result += " FragmentOutputInterface |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_NV_ray_tracing_motion_blur === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureMotionInfoFlagsNV ) + { + return "{}"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureMotionInstanceFlagsNV ) + { + return "{}"; + } + + //=== VK_EXT_image_compression_control === + + VULKAN_HPP_INLINE std::string to_string( ImageCompressionFlagsEXT value ) + { + std::string result = "{"; + if ( value & ImageCompressionFlagBitsEXT::eFixedRateDefault ) + result += " FixedRateDefault |"; + if ( value & ImageCompressionFlagBitsEXT::eFixedRateExplicit ) + result += " FixedRateExplicit |"; + if ( value & ImageCompressionFlagBitsEXT::eDisabled ) + result += " Disabled |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Default"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ImageCompressionFixedRateFlagsEXT value ) + { + std::string result = "{"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e1Bpc ) + result += " 1Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e2Bpc ) + result += " 2Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e3Bpc ) + result += " 3Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e4Bpc ) + result += " 4Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e5Bpc ) + result += " 5Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e6Bpc ) + result += " 6Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e7Bpc ) + result += " 7Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e8Bpc ) + result += " 8Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e9Bpc ) + result += " 9Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e10Bpc ) + result += " 10Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e11Bpc ) + result += " 11Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e12Bpc ) + result += " 12Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e13Bpc ) + result += " 13Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e14Bpc ) + result += " 14Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e15Bpc ) + result += " 15Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e16Bpc ) + result += " 16Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e17Bpc ) + result += " 17Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e18Bpc ) + result += " 18Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e19Bpc ) + result += " 19Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e20Bpc ) + result += " 20Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e21Bpc ) + result += " 21Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e22Bpc ) + result += " 22Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e23Bpc ) + result += " 23Bpc |"; + if ( value & ImageCompressionFixedRateFlagBitsEXT::e24Bpc ) + result += " 24Bpc |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DirectFBSurfaceCreateFlagsEXT ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_device_address_binding_report === + + VULKAN_HPP_INLINE std::string to_string( DeviceAddressBindingFlagsEXT value ) + { + std::string result = "{"; + if ( value & DeviceAddressBindingFlagBitsEXT::eInternalObject ) + result += " InternalObject |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageFormatConstraintsFlagsFUCHSIA ) + { + return "{}"; + } + + VULKAN_HPP_INLINE std::string to_string( ImageConstraintsInfoFlagsFUCHSIA value ) + { + std::string result = "{"; + if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely ) + result += " CpuReadRarely |"; + if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften ) + result += " CpuReadOften |"; + if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely ) + result += " CpuWriteRarely |"; + if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften ) + result += " CpuWriteOften |"; + if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional ) + result += " ProtectedOptional |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_frame_boundary === + + VULKAN_HPP_INLINE std::string to_string( FrameBoundaryFlagsEXT value ) + { + std::string result = "{"; + if ( value & FrameBoundaryFlagBitsEXT::eFrameEnd ) + result += " FrameEnd |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ScreenSurfaceCreateFlagsQNX ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_opacity_micromap === + + VULKAN_HPP_INLINE std::string to_string( BuildMicromapFlagsEXT value ) + { + std::string result = "{"; + if ( value & BuildMicromapFlagBitsEXT::ePreferFastTrace ) + result += " PreferFastTrace |"; + if ( value & BuildMicromapFlagBitsEXT::ePreferFastBuild ) + result += " PreferFastBuild |"; + if ( value & BuildMicromapFlagBitsEXT::eAllowCompaction ) + result += " AllowCompaction |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( MicromapCreateFlagsEXT value ) + { + std::string result = "{"; + if ( value & MicromapCreateFlagBitsEXT::eDeviceAddressCaptureReplay ) + result += " DeviceAddressCaptureReplay |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_ARM_scheduling_controls === + + VULKAN_HPP_INLINE std::string to_string( PhysicalDeviceSchedulingControlsFlagsARM value ) + { + std::string result = "{"; + if ( value & PhysicalDeviceSchedulingControlsFlagBitsARM::eShaderCoreCount ) + result += " ShaderCoreCount |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_NV_memory_decompression === + + VULKAN_HPP_INLINE std::string to_string( MemoryDecompressionMethodFlagsNV value ) + { + std::string result = "{"; + if ( value & MemoryDecompressionMethodFlagBitsNV::eGdeflate10 ) + result += " Gdeflate10 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_LUNARG_direct_driver_loading === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DirectDriverLoadingFlagsLUNARG ) + { + return "{}"; + } + + //=== VK_ARM_tensors === + + VULKAN_HPP_INLINE std::string to_string( TensorCreateFlagsARM value ) + { + std::string result = "{"; + if ( value & TensorCreateFlagBitsARM::eMutableFormat ) + result += " MutableFormat |"; + if ( value & TensorCreateFlagBitsARM::eProtected ) + result += " Protected |"; + if ( value & TensorCreateFlagBitsARM::eDescriptorBufferCaptureReplay ) + result += " DescriptorBufferCaptureReplay |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( TensorViewCreateFlagsARM value ) + { + std::string result = "{"; + if ( value & TensorViewCreateFlagBitsARM::eDescriptorBufferCaptureReplay ) + result += " DescriptorBufferCaptureReplay |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( TensorUsageFlagsARM value ) + { + std::string result = "{"; + if ( value & TensorUsageFlagBitsARM::eShader ) + result += " Shader |"; + if ( value & TensorUsageFlagBitsARM::eTransferSrc ) + result += " TransferSrc |"; + if ( value & TensorUsageFlagBitsARM::eTransferDst ) + result += " TransferDst |"; + if ( value & TensorUsageFlagBitsARM::eImageAliasing ) + result += " ImageAliasing |"; + if ( value & TensorUsageFlagBitsARM::eDataGraph ) + result += " DataGraph |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_NV_optical_flow === + + VULKAN_HPP_INLINE std::string to_string( OpticalFlowUsageFlagsNV value ) + { + std::string result = "{"; + if ( value & OpticalFlowUsageFlagBitsNV::eInput ) + result += " Input |"; + if ( value & OpticalFlowUsageFlagBitsNV::eOutput ) + result += " Output |"; + if ( value & OpticalFlowUsageFlagBitsNV::eHint ) + result += " Hint |"; + if ( value & OpticalFlowUsageFlagBitsNV::eCost ) + result += " Cost |"; + if ( value & OpticalFlowUsageFlagBitsNV::eGlobalFlow ) + result += " GlobalFlow |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Unknown"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( OpticalFlowGridSizeFlagsNV value ) + { + std::string result = "{"; + if ( value & OpticalFlowGridSizeFlagBitsNV::e1X1 ) + result += " 1X1 |"; + if ( value & OpticalFlowGridSizeFlagBitsNV::e2X2 ) + result += " 2X2 |"; + if ( value & OpticalFlowGridSizeFlagBitsNV::e4X4 ) + result += " 4X4 |"; + if ( value & OpticalFlowGridSizeFlagBitsNV::e8X8 ) + result += " 8X8 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "Unknown"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( OpticalFlowSessionCreateFlagsNV value ) + { + std::string result = "{"; + if ( value & OpticalFlowSessionCreateFlagBitsNV::eEnableHint ) + result += " EnableHint |"; + if ( value & OpticalFlowSessionCreateFlagBitsNV::eEnableCost ) + result += " EnableCost |"; + if ( value & OpticalFlowSessionCreateFlagBitsNV::eEnableGlobalFlow ) + result += " EnableGlobalFlow |"; + if ( value & OpticalFlowSessionCreateFlagBitsNV::eAllowRegions ) + result += " AllowRegions |"; + if ( value & OpticalFlowSessionCreateFlagBitsNV::eBothDirections ) + result += " BothDirections |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( OpticalFlowExecuteFlagsNV value ) + { + std::string result = "{"; + if ( value & OpticalFlowExecuteFlagBitsNV::eDisableTemporalHints ) + result += " DisableTemporalHints |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_EXT_shader_object === + + VULKAN_HPP_INLINE std::string to_string( ShaderCreateFlagsEXT value ) + { + std::string result = "{"; + if ( value & ShaderCreateFlagBitsEXT::eLinkStage ) + result += " LinkStage |"; + if ( value & ShaderCreateFlagBitsEXT::eAllowVaryingSubgroupSize ) + result += " AllowVaryingSubgroupSize |"; + if ( value & ShaderCreateFlagBitsEXT::eRequireFullSubgroups ) + result += " RequireFullSubgroups |"; + if ( value & ShaderCreateFlagBitsEXT::eNoTaskShader ) + result += " NoTaskShader |"; + if ( value & ShaderCreateFlagBitsEXT::eDispatchBase ) + result += " DispatchBase |"; + if ( value & ShaderCreateFlagBitsEXT::eFragmentShadingRateAttachment ) + result += " FragmentShadingRateAttachment |"; + if ( value & ShaderCreateFlagBitsEXT::eFragmentDensityMapAttachment ) + result += " FragmentDensityMapAttachment |"; + if ( value & ShaderCreateFlagBitsEXT::eIndirectBindable ) + result += " IndirectBindable |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_surface_maintenance1 === + + VULKAN_HPP_INLINE std::string to_string( PresentScalingFlagsKHR value ) + { + std::string result = "{"; + if ( value & PresentScalingFlagBitsKHR::eOneToOne ) + result += " OneToOne |"; + if ( value & PresentScalingFlagBitsKHR::eAspectRatioStretch ) + result += " AspectRatioStretch |"; + if ( value & PresentScalingFlagBitsKHR::eStretch ) + result += " Stretch |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( PresentGravityFlagsKHR value ) + { + std::string result = "{"; + if ( value & PresentGravityFlagBitsKHR::eMin ) + result += " Min |"; + if ( value & PresentGravityFlagBitsKHR::eMax ) + result += " Max |"; + if ( value & PresentGravityFlagBitsKHR::eCentered ) + result += " Centered |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_ARM_data_graph === + + VULKAN_HPP_INLINE std::string to_string( DataGraphPipelineSessionCreateFlagsARM value ) + { + std::string result = "{"; + if ( value & DataGraphPipelineSessionCreateFlagBitsARM::eProtected ) + result += " Protected |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DataGraphPipelineDispatchFlagsARM ) + { + return "{}"; + } + + //=== VK_KHR_video_encode_av1 === + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeAV1CapabilityFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeAV1CapabilityFlagBitsKHR::ePerRateControlGroupMinMaxQIndex ) + result += " PerRateControlGroupMinMaxQIndex |"; + if ( value & VideoEncodeAV1CapabilityFlagBitsKHR::eGenerateObuExtensionHeader ) + result += " GenerateObuExtensionHeader |"; + if ( value & VideoEncodeAV1CapabilityFlagBitsKHR::ePrimaryReferenceCdfOnly ) + result += " PrimaryReferenceCdfOnly |"; + if ( value & VideoEncodeAV1CapabilityFlagBitsKHR::eFrameSizeOverride ) + result += " FrameSizeOverride |"; + if ( value & VideoEncodeAV1CapabilityFlagBitsKHR::eMotionVectorScaling ) + result += " MotionVectorScaling |"; + if ( value & VideoEncodeAV1CapabilityFlagBitsKHR::eCompoundPredictionIntraRefresh ) + result += " CompoundPredictionIntraRefresh |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeAV1StdFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeAV1StdFlagBitsKHR::eUniformTileSpacingFlagSet ) + result += " UniformTileSpacingFlagSet |"; + if ( value & VideoEncodeAV1StdFlagBitsKHR::eSkipModePresentUnset ) + result += " SkipModePresentUnset |"; + if ( value & VideoEncodeAV1StdFlagBitsKHR::ePrimaryRefFrame ) + result += " PrimaryRefFrame |"; + if ( value & VideoEncodeAV1StdFlagBitsKHR::eDeltaQ ) + result += " DeltaQ |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeAV1SuperblockSizeFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeAV1SuperblockSizeFlagBitsKHR::e64 ) + result += " 64 |"; + if ( value & VideoEncodeAV1SuperblockSizeFlagBitsKHR::e128 ) + result += " 128 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeAV1RateControlFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeAV1RateControlFlagBitsKHR::eRegularGop ) + result += " RegularGop |"; + if ( value & VideoEncodeAV1RateControlFlagBitsKHR::eTemporalLayerPatternDyadic ) + result += " TemporalLayerPatternDyadic |"; + if ( value & VideoEncodeAV1RateControlFlagBitsKHR::eReferencePatternFlat ) + result += " ReferencePatternFlat |"; + if ( value & VideoEncodeAV1RateControlFlagBitsKHR::eReferencePatternDyadic ) + result += " ReferencePatternDyadic |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_video_encode_intra_refresh === + + VULKAN_HPP_INLINE std::string to_string( VideoEncodeIntraRefreshModeFlagsKHR value ) + { + std::string result = "{"; + if ( value & VideoEncodeIntraRefreshModeFlagBitsKHR::ePerPicturePartition ) + result += " PerPicturePartition |"; + if ( value & VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockBased ) + result += " BlockBased |"; + if ( value & VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockRowBased ) + result += " BlockRowBased |"; + if ( value & VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockColumnBased ) + result += " BlockColumnBased |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + //=== VK_NV_cluster_acceleration_structure === + + VULKAN_HPP_INLINE std::string to_string( ClusterAccelerationStructureClusterFlagsNV value ) + { + std::string result = "{"; + if ( value & ClusterAccelerationStructureClusterFlagBitsNV::eAllowDisableOpacityMicromaps ) + result += " AllowDisableOpacityMicromaps |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ClusterAccelerationStructureGeometryFlagsNV value ) + { + std::string result = "{"; + if ( value & ClusterAccelerationStructureGeometryFlagBitsNV::eCullDisable ) + result += " CullDisable |"; + if ( value & ClusterAccelerationStructureGeometryFlagBitsNV::eNoDuplicateAnyhitInvocation ) + result += " NoDuplicateAnyhitInvocation |"; + if ( value & ClusterAccelerationStructureGeometryFlagBitsNV::eOpaque ) + result += " Opaque |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ClusterAccelerationStructureAddressResolutionFlagsNV value ) + { + std::string result = "{"; + if ( value & ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstImplicitData ) + result += " IndirectedDstImplicitData |"; + if ( value & ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedScratchData ) + result += " IndirectedScratchData |"; + if ( value & ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstAddressArray ) + result += " IndirectedDstAddressArray |"; + if ( value & ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstSizesArray ) + result += " IndirectedDstSizesArray |"; + if ( value & ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedSrcInfosArray ) + result += " IndirectedSrcInfosArray |"; + if ( value & ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedSrcInfosCount ) + result += " IndirectedSrcInfosCount |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "None"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( ClusterAccelerationStructureIndexFormatFlagsNV value ) + { + std::string result = "{"; + if ( value & ClusterAccelerationStructureIndexFormatFlagBitsNV::e8 ) + result += " 8 |"; + if ( value & ClusterAccelerationStructureIndexFormatFlagBitsNV::e16 ) + result += " 16 |"; + if ( value & ClusterAccelerationStructureIndexFormatFlagBitsNV::e32 ) + result += " 32 |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_NV_partitioned_acceleration_structure === + + VULKAN_HPP_INLINE std::string to_string( PartitionedAccelerationStructureInstanceFlagsNV value ) + { + std::string result = "{"; + if ( value & PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagTriangleFacingCullDisable ) + result += " FlagTriangleFacingCullDisable |"; + if ( value & PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagTriangleFlipFacing ) + result += " FlagTriangleFlipFacing |"; + if ( value & PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagForceOpaque ) + result += " FlagForceOpaque |"; + if ( value & PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagForceNoOpaque ) + result += " FlagForceNoOpaque |"; + if ( value & PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagEnableExplicitBoundingBox ) + result += " FlagEnableExplicitBoundingBox |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_EXT_device_generated_commands === + + VULKAN_HPP_INLINE std::string to_string( IndirectCommandsLayoutUsageFlagsEXT value ) + { + std::string result = "{"; + if ( value & IndirectCommandsLayoutUsageFlagBitsEXT::eExplicitPreprocess ) + result += " ExplicitPreprocess |"; + if ( value & IndirectCommandsLayoutUsageFlagBitsEXT::eUnorderedSequences ) + result += " UnorderedSequences |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + VULKAN_HPP_INLINE std::string to_string( IndirectCommandsInputModeFlagsEXT value ) + { + std::string result = "{"; + if ( value & IndirectCommandsInputModeFlagBitsEXT::eVulkanIndexBuffer ) + result += " VulkanIndexBuffer |"; + if ( value & IndirectCommandsInputModeFlagBitsEXT::eDxgiIndexBuffer ) + result += " DxgiIndexBuffer |"; + + if ( result.size() > 1 ) + result.back() = '}'; + else + result = "{}"; + return result; + } + + //=== VK_KHR_maintenance8 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccessFlags3KHR ) + { + return "None"; + } + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SurfaceCreateFlagsOHOS ) + { + return "{}"; + } +#endif /*VK_USE_PLATFORM_OHOS*/ + + //======================= + //=== ENUMs to_string === + //======================= + + VULKAN_HPP_INLINE std::string toHexString( uint32_t value ) + { +#if __cpp_lib_format + return std::format( "{:x}", value ); +#else + std::stringstream stream; + stream << std::hex << value; + return stream.str(); +#endif + } + + //=== VK_VERSION_1_0 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( Result value ) + { + switch ( value ) + { + case Result::eSuccess : return "Success"; + case Result::eNotReady : return "NotReady"; + case Result::eTimeout : return "Timeout"; + case Result::eEventSet : return "EventSet"; + case Result::eEventReset : return "EventReset"; + case Result::eIncomplete : return "Incomplete"; + case Result::eErrorOutOfHostMemory : return "ErrorOutOfHostMemory"; + case Result::eErrorOutOfDeviceMemory : return "ErrorOutOfDeviceMemory"; + case Result::eErrorInitializationFailed : return "ErrorInitializationFailed"; + case Result::eErrorDeviceLost : return "ErrorDeviceLost"; + case Result::eErrorMemoryMapFailed : return "ErrorMemoryMapFailed"; + case Result::eErrorLayerNotPresent : return "ErrorLayerNotPresent"; + case Result::eErrorExtensionNotPresent : return "ErrorExtensionNotPresent"; + case Result::eErrorFeatureNotPresent : return "ErrorFeatureNotPresent"; + case Result::eErrorIncompatibleDriver : return "ErrorIncompatibleDriver"; + case Result::eErrorTooManyObjects : return "ErrorTooManyObjects"; + case Result::eErrorFormatNotSupported : return "ErrorFormatNotSupported"; + case Result::eErrorFragmentedPool : return "ErrorFragmentedPool"; + case Result::eErrorUnknown : return "ErrorUnknown"; + case Result::eErrorOutOfPoolMemory : return "ErrorOutOfPoolMemory"; + case Result::eErrorInvalidExternalHandle : return "ErrorInvalidExternalHandle"; + case Result::eErrorFragmentation : return "ErrorFragmentation"; + case Result::eErrorInvalidOpaqueCaptureAddress : return "ErrorInvalidOpaqueCaptureAddress"; + case Result::ePipelineCompileRequired : return "PipelineCompileRequired"; + case Result::eErrorNotPermitted : return "ErrorNotPermitted"; + case Result::eErrorSurfaceLostKHR : return "ErrorSurfaceLostKHR"; + case Result::eErrorNativeWindowInUseKHR : return "ErrorNativeWindowInUseKHR"; + case Result::eSuboptimalKHR : return "SuboptimalKHR"; + case Result::eErrorOutOfDateKHR : return "ErrorOutOfDateKHR"; + case Result::eErrorIncompatibleDisplayKHR : return "ErrorIncompatibleDisplayKHR"; + case Result::eErrorValidationFailedEXT : return "ErrorValidationFailedEXT"; + case Result::eErrorInvalidShaderNV : return "ErrorInvalidShaderNV"; + case Result::eErrorImageUsageNotSupportedKHR : return "ErrorImageUsageNotSupportedKHR"; + case Result::eErrorVideoPictureLayoutNotSupportedKHR : return "ErrorVideoPictureLayoutNotSupportedKHR"; + case Result::eErrorVideoProfileOperationNotSupportedKHR : return "ErrorVideoProfileOperationNotSupportedKHR"; + case Result::eErrorVideoProfileFormatNotSupportedKHR : return "ErrorVideoProfileFormatNotSupportedKHR"; + case Result::eErrorVideoProfileCodecNotSupportedKHR : return "ErrorVideoProfileCodecNotSupportedKHR"; + case Result::eErrorVideoStdVersionNotSupportedKHR : return "ErrorVideoStdVersionNotSupportedKHR"; + case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT: return "ErrorInvalidDrmFormatModifierPlaneLayoutEXT"; +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case Result::eErrorFullScreenExclusiveModeLostEXT: return "ErrorFullScreenExclusiveModeLostEXT"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case Result::eThreadIdleKHR : return "ThreadIdleKHR"; + case Result::eThreadDoneKHR : return "ThreadDoneKHR"; + case Result::eOperationDeferredKHR : return "OperationDeferredKHR"; + case Result::eOperationNotDeferredKHR : return "OperationNotDeferredKHR"; + case Result::eErrorInvalidVideoStdParametersKHR: return "ErrorInvalidVideoStdParametersKHR"; + case Result::eErrorCompressionExhaustedEXT : return "ErrorCompressionExhaustedEXT"; + case Result::eIncompatibleShaderBinaryEXT : return "IncompatibleShaderBinaryEXT"; + case Result::ePipelineBinaryMissingKHR : return "PipelineBinaryMissingKHR"; + case Result::eErrorNotEnoughSpaceKHR : return "ErrorNotEnoughSpaceKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( StructureType value ) + { + switch ( value ) + { + case StructureType::eApplicationInfo : return "ApplicationInfo"; + case StructureType::eInstanceCreateInfo : return "InstanceCreateInfo"; + case StructureType::eDeviceQueueCreateInfo : return "DeviceQueueCreateInfo"; + case StructureType::eDeviceCreateInfo : return "DeviceCreateInfo"; + case StructureType::eSubmitInfo : return "SubmitInfo"; + case StructureType::eMemoryAllocateInfo : return "MemoryAllocateInfo"; + case StructureType::eMappedMemoryRange : return "MappedMemoryRange"; + case StructureType::eBindSparseInfo : return "BindSparseInfo"; + case StructureType::eFenceCreateInfo : return "FenceCreateInfo"; + case StructureType::eSemaphoreCreateInfo : return "SemaphoreCreateInfo"; + case StructureType::eEventCreateInfo : return "EventCreateInfo"; + case StructureType::eQueryPoolCreateInfo : return "QueryPoolCreateInfo"; + case StructureType::eBufferCreateInfo : return "BufferCreateInfo"; + case StructureType::eBufferViewCreateInfo : return "BufferViewCreateInfo"; + case StructureType::eImageCreateInfo : return "ImageCreateInfo"; + case StructureType::eImageViewCreateInfo : return "ImageViewCreateInfo"; + case StructureType::eShaderModuleCreateInfo : return "ShaderModuleCreateInfo"; + case StructureType::ePipelineCacheCreateInfo : return "PipelineCacheCreateInfo"; + case StructureType::ePipelineShaderStageCreateInfo : return "PipelineShaderStageCreateInfo"; + case StructureType::ePipelineVertexInputStateCreateInfo : return "PipelineVertexInputStateCreateInfo"; + case StructureType::ePipelineInputAssemblyStateCreateInfo : return "PipelineInputAssemblyStateCreateInfo"; + case StructureType::ePipelineTessellationStateCreateInfo : return "PipelineTessellationStateCreateInfo"; + case StructureType::ePipelineViewportStateCreateInfo : return "PipelineViewportStateCreateInfo"; + case StructureType::ePipelineRasterizationStateCreateInfo : return "PipelineRasterizationStateCreateInfo"; + case StructureType::ePipelineMultisampleStateCreateInfo : return "PipelineMultisampleStateCreateInfo"; + case StructureType::ePipelineDepthStencilStateCreateInfo : return "PipelineDepthStencilStateCreateInfo"; + case StructureType::ePipelineColorBlendStateCreateInfo : return "PipelineColorBlendStateCreateInfo"; + case StructureType::ePipelineDynamicStateCreateInfo : return "PipelineDynamicStateCreateInfo"; + case StructureType::eGraphicsPipelineCreateInfo : return "GraphicsPipelineCreateInfo"; + case StructureType::eComputePipelineCreateInfo : return "ComputePipelineCreateInfo"; + case StructureType::ePipelineLayoutCreateInfo : return "PipelineLayoutCreateInfo"; + case StructureType::eSamplerCreateInfo : return "SamplerCreateInfo"; + case StructureType::eDescriptorSetLayoutCreateInfo : return "DescriptorSetLayoutCreateInfo"; + case StructureType::eDescriptorPoolCreateInfo : return "DescriptorPoolCreateInfo"; + case StructureType::eDescriptorSetAllocateInfo : return "DescriptorSetAllocateInfo"; + case StructureType::eWriteDescriptorSet : return "WriteDescriptorSet"; + case StructureType::eCopyDescriptorSet : return "CopyDescriptorSet"; + case StructureType::eFramebufferCreateInfo : return "FramebufferCreateInfo"; + case StructureType::eRenderPassCreateInfo : return "RenderPassCreateInfo"; + case StructureType::eCommandPoolCreateInfo : return "CommandPoolCreateInfo"; + case StructureType::eCommandBufferAllocateInfo : return "CommandBufferAllocateInfo"; + case StructureType::eCommandBufferInheritanceInfo : return "CommandBufferInheritanceInfo"; + case StructureType::eCommandBufferBeginInfo : return "CommandBufferBeginInfo"; + case StructureType::eRenderPassBeginInfo : return "RenderPassBeginInfo"; + case StructureType::eBufferMemoryBarrier : return "BufferMemoryBarrier"; + case StructureType::eImageMemoryBarrier : return "ImageMemoryBarrier"; + case StructureType::eMemoryBarrier : return "MemoryBarrier"; + case StructureType::eLoaderInstanceCreateInfo : return "LoaderInstanceCreateInfo"; + case StructureType::eLoaderDeviceCreateInfo : return "LoaderDeviceCreateInfo"; + case StructureType::ePhysicalDeviceSubgroupProperties : return "PhysicalDeviceSubgroupProperties"; + case StructureType::eBindBufferMemoryInfo : return "BindBufferMemoryInfo"; + case StructureType::eBindImageMemoryInfo : return "BindImageMemoryInfo"; + case StructureType::ePhysicalDevice16BitStorageFeatures : return "PhysicalDevice16BitStorageFeatures"; + case StructureType::eMemoryDedicatedRequirements : return "MemoryDedicatedRequirements"; + case StructureType::eMemoryDedicatedAllocateInfo : return "MemoryDedicatedAllocateInfo"; + case StructureType::eMemoryAllocateFlagsInfo : return "MemoryAllocateFlagsInfo"; + case StructureType::eDeviceGroupRenderPassBeginInfo : return "DeviceGroupRenderPassBeginInfo"; + case StructureType::eDeviceGroupCommandBufferBeginInfo : return "DeviceGroupCommandBufferBeginInfo"; + case StructureType::eDeviceGroupSubmitInfo : return "DeviceGroupSubmitInfo"; + case StructureType::eDeviceGroupBindSparseInfo : return "DeviceGroupBindSparseInfo"; + case StructureType::eBindBufferMemoryDeviceGroupInfo : return "BindBufferMemoryDeviceGroupInfo"; + case StructureType::eBindImageMemoryDeviceGroupInfo : return "BindImageMemoryDeviceGroupInfo"; + case StructureType::ePhysicalDeviceGroupProperties : return "PhysicalDeviceGroupProperties"; + case StructureType::eDeviceGroupDeviceCreateInfo : return "DeviceGroupDeviceCreateInfo"; + case StructureType::eBufferMemoryRequirementsInfo2 : return "BufferMemoryRequirementsInfo2"; + case StructureType::eImageMemoryRequirementsInfo2 : return "ImageMemoryRequirementsInfo2"; + case StructureType::eImageSparseMemoryRequirementsInfo2 : return "ImageSparseMemoryRequirementsInfo2"; + case StructureType::eMemoryRequirements2 : return "MemoryRequirements2"; + case StructureType::eSparseImageMemoryRequirements2 : return "SparseImageMemoryRequirements2"; + case StructureType::ePhysicalDeviceFeatures2 : return "PhysicalDeviceFeatures2"; + case StructureType::ePhysicalDeviceProperties2 : return "PhysicalDeviceProperties2"; + case StructureType::eFormatProperties2 : return "FormatProperties2"; + case StructureType::eImageFormatProperties2 : return "ImageFormatProperties2"; + case StructureType::ePhysicalDeviceImageFormatInfo2 : return "PhysicalDeviceImageFormatInfo2"; + case StructureType::eQueueFamilyProperties2 : return "QueueFamilyProperties2"; + case StructureType::ePhysicalDeviceMemoryProperties2 : return "PhysicalDeviceMemoryProperties2"; + case StructureType::eSparseImageFormatProperties2 : return "SparseImageFormatProperties2"; + case StructureType::ePhysicalDeviceSparseImageFormatInfo2 : return "PhysicalDeviceSparseImageFormatInfo2"; + case StructureType::ePhysicalDevicePointClippingProperties : return "PhysicalDevicePointClippingProperties"; + case StructureType::eRenderPassInputAttachmentAspectCreateInfo : return "RenderPassInputAttachmentAspectCreateInfo"; + case StructureType::eImageViewUsageCreateInfo : return "ImageViewUsageCreateInfo"; + case StructureType::ePipelineTessellationDomainOriginStateCreateInfo : return "PipelineTessellationDomainOriginStateCreateInfo"; + case StructureType::eRenderPassMultiviewCreateInfo : return "RenderPassMultiviewCreateInfo"; + case StructureType::ePhysicalDeviceMultiviewFeatures : return "PhysicalDeviceMultiviewFeatures"; + case StructureType::ePhysicalDeviceMultiviewProperties : return "PhysicalDeviceMultiviewProperties"; + case StructureType::ePhysicalDeviceVariablePointersFeatures : return "PhysicalDeviceVariablePointersFeatures"; + case StructureType::eProtectedSubmitInfo : return "ProtectedSubmitInfo"; + case StructureType::ePhysicalDeviceProtectedMemoryFeatures : return "PhysicalDeviceProtectedMemoryFeatures"; + case StructureType::ePhysicalDeviceProtectedMemoryProperties : return "PhysicalDeviceProtectedMemoryProperties"; + case StructureType::eDeviceQueueInfo2 : return "DeviceQueueInfo2"; + case StructureType::eSamplerYcbcrConversionCreateInfo : return "SamplerYcbcrConversionCreateInfo"; + case StructureType::eSamplerYcbcrConversionInfo : return "SamplerYcbcrConversionInfo"; + case StructureType::eBindImagePlaneMemoryInfo : return "BindImagePlaneMemoryInfo"; + case StructureType::eImagePlaneMemoryRequirementsInfo : return "ImagePlaneMemoryRequirementsInfo"; + case StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures : return "PhysicalDeviceSamplerYcbcrConversionFeatures"; + case StructureType::eSamplerYcbcrConversionImageFormatProperties : return "SamplerYcbcrConversionImageFormatProperties"; + case StructureType::eDescriptorUpdateTemplateCreateInfo : return "DescriptorUpdateTemplateCreateInfo"; + case StructureType::ePhysicalDeviceExternalImageFormatInfo : return "PhysicalDeviceExternalImageFormatInfo"; + case StructureType::eExternalImageFormatProperties : return "ExternalImageFormatProperties"; + case StructureType::ePhysicalDeviceExternalBufferInfo : return "PhysicalDeviceExternalBufferInfo"; + case StructureType::eExternalBufferProperties : return "ExternalBufferProperties"; + case StructureType::ePhysicalDeviceIdProperties : return "PhysicalDeviceIdProperties"; + case StructureType::eExternalMemoryBufferCreateInfo : return "ExternalMemoryBufferCreateInfo"; + case StructureType::eExternalMemoryImageCreateInfo : return "ExternalMemoryImageCreateInfo"; + case StructureType::eExportMemoryAllocateInfo : return "ExportMemoryAllocateInfo"; + case StructureType::ePhysicalDeviceExternalFenceInfo : return "PhysicalDeviceExternalFenceInfo"; + case StructureType::eExternalFenceProperties : return "ExternalFenceProperties"; + case StructureType::eExportFenceCreateInfo : return "ExportFenceCreateInfo"; + case StructureType::eExportSemaphoreCreateInfo : return "ExportSemaphoreCreateInfo"; + case StructureType::ePhysicalDeviceExternalSemaphoreInfo : return "PhysicalDeviceExternalSemaphoreInfo"; + case StructureType::eExternalSemaphoreProperties : return "ExternalSemaphoreProperties"; + case StructureType::ePhysicalDeviceMaintenance3Properties : return "PhysicalDeviceMaintenance3Properties"; + case StructureType::eDescriptorSetLayoutSupport : return "DescriptorSetLayoutSupport"; + case StructureType::ePhysicalDeviceShaderDrawParametersFeatures : return "PhysicalDeviceShaderDrawParametersFeatures"; + case StructureType::ePhysicalDeviceVulkan11Features : return "PhysicalDeviceVulkan11Features"; + case StructureType::ePhysicalDeviceVulkan11Properties : return "PhysicalDeviceVulkan11Properties"; + case StructureType::ePhysicalDeviceVulkan12Features : return "PhysicalDeviceVulkan12Features"; + case StructureType::ePhysicalDeviceVulkan12Properties : return "PhysicalDeviceVulkan12Properties"; + case StructureType::eImageFormatListCreateInfo : return "ImageFormatListCreateInfo"; + case StructureType::eAttachmentDescription2 : return "AttachmentDescription2"; + case StructureType::eAttachmentReference2 : return "AttachmentReference2"; + case StructureType::eSubpassDescription2 : return "SubpassDescription2"; + case StructureType::eSubpassDependency2 : return "SubpassDependency2"; + case StructureType::eRenderPassCreateInfo2 : return "RenderPassCreateInfo2"; + case StructureType::eSubpassBeginInfo : return "SubpassBeginInfo"; + case StructureType::eSubpassEndInfo : return "SubpassEndInfo"; + case StructureType::ePhysicalDevice8BitStorageFeatures : return "PhysicalDevice8BitStorageFeatures"; + case StructureType::ePhysicalDeviceDriverProperties : return "PhysicalDeviceDriverProperties"; + case StructureType::ePhysicalDeviceShaderAtomicInt64Features : return "PhysicalDeviceShaderAtomicInt64Features"; + case StructureType::ePhysicalDeviceShaderFloat16Int8Features : return "PhysicalDeviceShaderFloat16Int8Features"; + case StructureType::ePhysicalDeviceFloatControlsProperties : return "PhysicalDeviceFloatControlsProperties"; + case StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo : return "DescriptorSetLayoutBindingFlagsCreateInfo"; + case StructureType::ePhysicalDeviceDescriptorIndexingFeatures : return "PhysicalDeviceDescriptorIndexingFeatures"; + case StructureType::ePhysicalDeviceDescriptorIndexingProperties : return "PhysicalDeviceDescriptorIndexingProperties"; + case StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo : return "DescriptorSetVariableDescriptorCountAllocateInfo"; + case StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport : return "DescriptorSetVariableDescriptorCountLayoutSupport"; + case StructureType::ePhysicalDeviceDepthStencilResolveProperties : return "PhysicalDeviceDepthStencilResolveProperties"; + case StructureType::eSubpassDescriptionDepthStencilResolve : return "SubpassDescriptionDepthStencilResolve"; + case StructureType::ePhysicalDeviceScalarBlockLayoutFeatures : return "PhysicalDeviceScalarBlockLayoutFeatures"; + case StructureType::eImageStencilUsageCreateInfo : return "ImageStencilUsageCreateInfo"; + case StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties : return "PhysicalDeviceSamplerFilterMinmaxProperties"; + case StructureType::eSamplerReductionModeCreateInfo : return "SamplerReductionModeCreateInfo"; + case StructureType::ePhysicalDeviceVulkanMemoryModelFeatures : return "PhysicalDeviceVulkanMemoryModelFeatures"; + case StructureType::ePhysicalDeviceImagelessFramebufferFeatures : return "PhysicalDeviceImagelessFramebufferFeatures"; + case StructureType::eFramebufferAttachmentsCreateInfo : return "FramebufferAttachmentsCreateInfo"; + case StructureType::eFramebufferAttachmentImageInfo : return "FramebufferAttachmentImageInfo"; + case StructureType::eRenderPassAttachmentBeginInfo : return "RenderPassAttachmentBeginInfo"; + case StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures : return "PhysicalDeviceUniformBufferStandardLayoutFeatures"; + case StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures : return "PhysicalDeviceShaderSubgroupExtendedTypesFeatures"; + case StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures : return "PhysicalDeviceSeparateDepthStencilLayoutsFeatures"; + case StructureType::eAttachmentReferenceStencilLayout : return "AttachmentReferenceStencilLayout"; + case StructureType::eAttachmentDescriptionStencilLayout : return "AttachmentDescriptionStencilLayout"; + case StructureType::ePhysicalDeviceHostQueryResetFeatures : return "PhysicalDeviceHostQueryResetFeatures"; + case StructureType::ePhysicalDeviceTimelineSemaphoreFeatures : return "PhysicalDeviceTimelineSemaphoreFeatures"; + case StructureType::ePhysicalDeviceTimelineSemaphoreProperties : return "PhysicalDeviceTimelineSemaphoreProperties"; + case StructureType::eSemaphoreTypeCreateInfo : return "SemaphoreTypeCreateInfo"; + case StructureType::eTimelineSemaphoreSubmitInfo : return "TimelineSemaphoreSubmitInfo"; + case StructureType::eSemaphoreWaitInfo : return "SemaphoreWaitInfo"; + case StructureType::eSemaphoreSignalInfo : return "SemaphoreSignalInfo"; + case StructureType::ePhysicalDeviceBufferDeviceAddressFeatures : return "PhysicalDeviceBufferDeviceAddressFeatures"; + case StructureType::eBufferDeviceAddressInfo : return "BufferDeviceAddressInfo"; + case StructureType::eBufferOpaqueCaptureAddressCreateInfo : return "BufferOpaqueCaptureAddressCreateInfo"; + case StructureType::eMemoryOpaqueCaptureAddressAllocateInfo : return "MemoryOpaqueCaptureAddressAllocateInfo"; + case StructureType::eDeviceMemoryOpaqueCaptureAddressInfo : return "DeviceMemoryOpaqueCaptureAddressInfo"; + case StructureType::ePhysicalDeviceVulkan13Features : return "PhysicalDeviceVulkan13Features"; + case StructureType::ePhysicalDeviceVulkan13Properties : return "PhysicalDeviceVulkan13Properties"; + case StructureType::ePipelineCreationFeedbackCreateInfo : return "PipelineCreationFeedbackCreateInfo"; + case StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures : return "PhysicalDeviceShaderTerminateInvocationFeatures"; + case StructureType::ePhysicalDeviceToolProperties : return "PhysicalDeviceToolProperties"; + case StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures: return "PhysicalDeviceShaderDemoteToHelperInvocationFeatures"; + case StructureType::ePhysicalDevicePrivateDataFeatures : return "PhysicalDevicePrivateDataFeatures"; + case StructureType::eDevicePrivateDataCreateInfo : return "DevicePrivateDataCreateInfo"; + case StructureType::ePrivateDataSlotCreateInfo : return "PrivateDataSlotCreateInfo"; + case StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures : return "PhysicalDevicePipelineCreationCacheControlFeatures"; + case StructureType::eMemoryBarrier2 : return "MemoryBarrier2"; + case StructureType::eBufferMemoryBarrier2 : return "BufferMemoryBarrier2"; + case StructureType::eImageMemoryBarrier2 : return "ImageMemoryBarrier2"; + case StructureType::eDependencyInfo : return "DependencyInfo"; + case StructureType::eSubmitInfo2 : return "SubmitInfo2"; + case StructureType::eSemaphoreSubmitInfo : return "SemaphoreSubmitInfo"; + case StructureType::eCommandBufferSubmitInfo : return "CommandBufferSubmitInfo"; + case StructureType::ePhysicalDeviceSynchronization2Features : return "PhysicalDeviceSynchronization2Features"; + case StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures : return "PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures"; + case StructureType::ePhysicalDeviceImageRobustnessFeatures : return "PhysicalDeviceImageRobustnessFeatures"; + case StructureType::eCopyBufferInfo2 : return "CopyBufferInfo2"; + case StructureType::eCopyImageInfo2 : return "CopyImageInfo2"; + case StructureType::eCopyBufferToImageInfo2 : return "CopyBufferToImageInfo2"; + case StructureType::eCopyImageToBufferInfo2 : return "CopyImageToBufferInfo2"; + case StructureType::eBlitImageInfo2 : return "BlitImageInfo2"; + case StructureType::eResolveImageInfo2 : return "ResolveImageInfo2"; + case StructureType::eBufferCopy2 : return "BufferCopy2"; + case StructureType::eImageCopy2 : return "ImageCopy2"; + case StructureType::eImageBlit2 : return "ImageBlit2"; + case StructureType::eBufferImageCopy2 : return "BufferImageCopy2"; + case StructureType::eImageResolve2 : return "ImageResolve2"; + case StructureType::ePhysicalDeviceSubgroupSizeControlProperties : return "PhysicalDeviceSubgroupSizeControlProperties"; + case StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo : return "PipelineShaderStageRequiredSubgroupSizeCreateInfo"; + case StructureType::ePhysicalDeviceSubgroupSizeControlFeatures : return "PhysicalDeviceSubgroupSizeControlFeatures"; + case StructureType::ePhysicalDeviceInlineUniformBlockFeatures : return "PhysicalDeviceInlineUniformBlockFeatures"; + case StructureType::ePhysicalDeviceInlineUniformBlockProperties : return "PhysicalDeviceInlineUniformBlockProperties"; + case StructureType::eWriteDescriptorSetInlineUniformBlock : return "WriteDescriptorSetInlineUniformBlock"; + case StructureType::eDescriptorPoolInlineUniformBlockCreateInfo : return "DescriptorPoolInlineUniformBlockCreateInfo"; + case StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures : return "PhysicalDeviceTextureCompressionAstcHdrFeatures"; + case StructureType::eRenderingInfo : return "RenderingInfo"; + case StructureType::eRenderingAttachmentInfo : return "RenderingAttachmentInfo"; + case StructureType::ePipelineRenderingCreateInfo : return "PipelineRenderingCreateInfo"; + case StructureType::ePhysicalDeviceDynamicRenderingFeatures : return "PhysicalDeviceDynamicRenderingFeatures"; + case StructureType::eCommandBufferInheritanceRenderingInfo : return "CommandBufferInheritanceRenderingInfo"; + case StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures : return "PhysicalDeviceShaderIntegerDotProductFeatures"; + case StructureType::ePhysicalDeviceShaderIntegerDotProductProperties : return "PhysicalDeviceShaderIntegerDotProductProperties"; + case StructureType::ePhysicalDeviceTexelBufferAlignmentProperties : return "PhysicalDeviceTexelBufferAlignmentProperties"; + case StructureType::eFormatProperties3 : return "FormatProperties3"; + case StructureType::ePhysicalDeviceMaintenance4Features : return "PhysicalDeviceMaintenance4Features"; + case StructureType::ePhysicalDeviceMaintenance4Properties : return "PhysicalDeviceMaintenance4Properties"; + case StructureType::eDeviceBufferMemoryRequirements : return "DeviceBufferMemoryRequirements"; + case StructureType::eDeviceImageMemoryRequirements : return "DeviceImageMemoryRequirements"; + case StructureType::ePhysicalDeviceVulkan14Features : return "PhysicalDeviceVulkan14Features"; + case StructureType::ePhysicalDeviceVulkan14Properties : return "PhysicalDeviceVulkan14Properties"; + case StructureType::eDeviceQueueGlobalPriorityCreateInfo : return "DeviceQueueGlobalPriorityCreateInfo"; + case StructureType::ePhysicalDeviceGlobalPriorityQueryFeatures : return "PhysicalDeviceGlobalPriorityQueryFeatures"; + case StructureType::eQueueFamilyGlobalPriorityProperties : return "QueueFamilyGlobalPriorityProperties"; + case StructureType::ePhysicalDeviceShaderSubgroupRotateFeatures : return "PhysicalDeviceShaderSubgroupRotateFeatures"; + case StructureType::ePhysicalDeviceShaderFloatControls2Features : return "PhysicalDeviceShaderFloatControls2Features"; + case StructureType::ePhysicalDeviceShaderExpectAssumeFeatures : return "PhysicalDeviceShaderExpectAssumeFeatures"; + case StructureType::ePhysicalDeviceLineRasterizationFeatures : return "PhysicalDeviceLineRasterizationFeatures"; + case StructureType::ePipelineRasterizationLineStateCreateInfo : return "PipelineRasterizationLineStateCreateInfo"; + case StructureType::ePhysicalDeviceLineRasterizationProperties : return "PhysicalDeviceLineRasterizationProperties"; + case StructureType::ePhysicalDeviceVertexAttributeDivisorProperties : return "PhysicalDeviceVertexAttributeDivisorProperties"; + case StructureType::ePipelineVertexInputDivisorStateCreateInfo : return "PipelineVertexInputDivisorStateCreateInfo"; + case StructureType::ePhysicalDeviceVertexAttributeDivisorFeatures : return "PhysicalDeviceVertexAttributeDivisorFeatures"; + case StructureType::ePhysicalDeviceIndexTypeUint8Features : return "PhysicalDeviceIndexTypeUint8Features"; + case StructureType::eMemoryMapInfo : return "MemoryMapInfo"; + case StructureType::eMemoryUnmapInfo : return "MemoryUnmapInfo"; + case StructureType::ePhysicalDeviceMaintenance5Features : return "PhysicalDeviceMaintenance5Features"; + case StructureType::ePhysicalDeviceMaintenance5Properties : return "PhysicalDeviceMaintenance5Properties"; + case StructureType::eRenderingAreaInfo : return "RenderingAreaInfo"; + case StructureType::eDeviceImageSubresourceInfo : return "DeviceImageSubresourceInfo"; + case StructureType::eSubresourceLayout2 : return "SubresourceLayout2"; + case StructureType::eImageSubresource2 : return "ImageSubresource2"; + case StructureType::ePipelineCreateFlags2CreateInfo : return "PipelineCreateFlags2CreateInfo"; + case StructureType::eBufferUsageFlags2CreateInfo : return "BufferUsageFlags2CreateInfo"; + case StructureType::ePhysicalDevicePushDescriptorProperties : return "PhysicalDevicePushDescriptorProperties"; + case StructureType::ePhysicalDeviceDynamicRenderingLocalReadFeatures : return "PhysicalDeviceDynamicRenderingLocalReadFeatures"; + case StructureType::eRenderingAttachmentLocationInfo : return "RenderingAttachmentLocationInfo"; + case StructureType::eRenderingInputAttachmentIndexInfo : return "RenderingInputAttachmentIndexInfo"; + case StructureType::ePhysicalDeviceMaintenance6Features : return "PhysicalDeviceMaintenance6Features"; + case StructureType::ePhysicalDeviceMaintenance6Properties : return "PhysicalDeviceMaintenance6Properties"; + case StructureType::eBindMemoryStatus : return "BindMemoryStatus"; + case StructureType::eBindDescriptorSetsInfo : return "BindDescriptorSetsInfo"; + case StructureType::ePushConstantsInfo : return "PushConstantsInfo"; + case StructureType::ePushDescriptorSetInfo : return "PushDescriptorSetInfo"; + case StructureType::ePushDescriptorSetWithTemplateInfo : return "PushDescriptorSetWithTemplateInfo"; + case StructureType::ePhysicalDevicePipelineProtectedAccessFeatures : return "PhysicalDevicePipelineProtectedAccessFeatures"; + case StructureType::ePipelineRobustnessCreateInfo : return "PipelineRobustnessCreateInfo"; + case StructureType::ePhysicalDevicePipelineRobustnessFeatures : return "PhysicalDevicePipelineRobustnessFeatures"; + case StructureType::ePhysicalDevicePipelineRobustnessProperties : return "PhysicalDevicePipelineRobustnessProperties"; + case StructureType::ePhysicalDeviceHostImageCopyFeatures : return "PhysicalDeviceHostImageCopyFeatures"; + case StructureType::ePhysicalDeviceHostImageCopyProperties : return "PhysicalDeviceHostImageCopyProperties"; + case StructureType::eMemoryToImageCopy : return "MemoryToImageCopy"; + case StructureType::eImageToMemoryCopy : return "ImageToMemoryCopy"; + case StructureType::eCopyImageToMemoryInfo : return "CopyImageToMemoryInfo"; + case StructureType::eCopyMemoryToImageInfo : return "CopyMemoryToImageInfo"; + case StructureType::eHostImageLayoutTransitionInfo : return "HostImageLayoutTransitionInfo"; + case StructureType::eCopyImageToImageInfo : return "CopyImageToImageInfo"; + case StructureType::eSubresourceHostMemcpySize : return "SubresourceHostMemcpySize"; + case StructureType::eHostImageCopyDevicePerformanceQuery : return "HostImageCopyDevicePerformanceQuery"; + case StructureType::eSwapchainCreateInfoKHR : return "SwapchainCreateInfoKHR"; + case StructureType::ePresentInfoKHR : return "PresentInfoKHR"; + case StructureType::eDeviceGroupPresentCapabilitiesKHR : return "DeviceGroupPresentCapabilitiesKHR"; + case StructureType::eImageSwapchainCreateInfoKHR : return "ImageSwapchainCreateInfoKHR"; + case StructureType::eBindImageMemorySwapchainInfoKHR : return "BindImageMemorySwapchainInfoKHR"; + case StructureType::eAcquireNextImageInfoKHR : return "AcquireNextImageInfoKHR"; + case StructureType::eDeviceGroupPresentInfoKHR : return "DeviceGroupPresentInfoKHR"; + case StructureType::eDeviceGroupSwapchainCreateInfoKHR : return "DeviceGroupSwapchainCreateInfoKHR"; + case StructureType::eDisplayModeCreateInfoKHR : return "DisplayModeCreateInfoKHR"; + case StructureType::eDisplaySurfaceCreateInfoKHR : return "DisplaySurfaceCreateInfoKHR"; + case StructureType::eDisplayPresentInfoKHR : return "DisplayPresentInfoKHR"; +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + case StructureType::eXlibSurfaceCreateInfoKHR: return "XlibSurfaceCreateInfoKHR"; +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ +#if defined( VK_USE_PLATFORM_XCB_KHR ) + case StructureType::eXcbSurfaceCreateInfoKHR: return "XcbSurfaceCreateInfoKHR"; +#endif /*VK_USE_PLATFORM_XCB_KHR*/ +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + case StructureType::eWaylandSurfaceCreateInfoKHR: return "WaylandSurfaceCreateInfoKHR"; +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + case StructureType::eAndroidSurfaceCreateInfoKHR: return "AndroidSurfaceCreateInfoKHR"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case StructureType::eWin32SurfaceCreateInfoKHR: return "Win32SurfaceCreateInfoKHR"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case StructureType::eDebugReportCallbackCreateInfoEXT : return "DebugReportCallbackCreateInfoEXT"; + case StructureType::ePipelineRasterizationStateRasterizationOrderAMD: return "PipelineRasterizationStateRasterizationOrderAMD"; + case StructureType::eDebugMarkerObjectNameInfoEXT : return "DebugMarkerObjectNameInfoEXT"; + case StructureType::eDebugMarkerObjectTagInfoEXT : return "DebugMarkerObjectTagInfoEXT"; + case StructureType::eDebugMarkerMarkerInfoEXT : return "DebugMarkerMarkerInfoEXT"; + case StructureType::eVideoProfileInfoKHR : return "VideoProfileInfoKHR"; + case StructureType::eVideoCapabilitiesKHR : return "VideoCapabilitiesKHR"; + case StructureType::eVideoPictureResourceInfoKHR : return "VideoPictureResourceInfoKHR"; + case StructureType::eVideoSessionMemoryRequirementsKHR : return "VideoSessionMemoryRequirementsKHR"; + case StructureType::eBindVideoSessionMemoryInfoKHR : return "BindVideoSessionMemoryInfoKHR"; + case StructureType::eVideoSessionCreateInfoKHR : return "VideoSessionCreateInfoKHR"; + case StructureType::eVideoSessionParametersCreateInfoKHR : return "VideoSessionParametersCreateInfoKHR"; + case StructureType::eVideoSessionParametersUpdateInfoKHR : return "VideoSessionParametersUpdateInfoKHR"; + case StructureType::eVideoBeginCodingInfoKHR : return "VideoBeginCodingInfoKHR"; + case StructureType::eVideoEndCodingInfoKHR : return "VideoEndCodingInfoKHR"; + case StructureType::eVideoCodingControlInfoKHR : return "VideoCodingControlInfoKHR"; + case StructureType::eVideoReferenceSlotInfoKHR : return "VideoReferenceSlotInfoKHR"; + case StructureType::eQueueFamilyVideoPropertiesKHR : return "QueueFamilyVideoPropertiesKHR"; + case StructureType::eVideoProfileListInfoKHR : return "VideoProfileListInfoKHR"; + case StructureType::ePhysicalDeviceVideoFormatInfoKHR : return "PhysicalDeviceVideoFormatInfoKHR"; + case StructureType::eVideoFormatPropertiesKHR : return "VideoFormatPropertiesKHR"; + case StructureType::eQueueFamilyQueryResultStatusPropertiesKHR : return "QueueFamilyQueryResultStatusPropertiesKHR"; + case StructureType::eVideoDecodeInfoKHR : return "VideoDecodeInfoKHR"; + case StructureType::eVideoDecodeCapabilitiesKHR : return "VideoDecodeCapabilitiesKHR"; + case StructureType::eVideoDecodeUsageInfoKHR : return "VideoDecodeUsageInfoKHR"; + case StructureType::eDedicatedAllocationImageCreateInfoNV : return "DedicatedAllocationImageCreateInfoNV"; + case StructureType::eDedicatedAllocationBufferCreateInfoNV : return "DedicatedAllocationBufferCreateInfoNV"; + case StructureType::eDedicatedAllocationMemoryAllocateInfoNV : return "DedicatedAllocationMemoryAllocateInfoNV"; + case StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT : return "PhysicalDeviceTransformFeedbackFeaturesEXT"; + case StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT : return "PhysicalDeviceTransformFeedbackPropertiesEXT"; + case StructureType::ePipelineRasterizationStateStreamCreateInfoEXT : return "PipelineRasterizationStateStreamCreateInfoEXT"; + case StructureType::eCuModuleCreateInfoNVX : return "CuModuleCreateInfoNVX"; + case StructureType::eCuFunctionCreateInfoNVX : return "CuFunctionCreateInfoNVX"; + case StructureType::eCuLaunchInfoNVX : return "CuLaunchInfoNVX"; + case StructureType::eCuModuleTexturingModeCreateInfoNVX : return "CuModuleTexturingModeCreateInfoNVX"; + case StructureType::eImageViewHandleInfoNVX : return "ImageViewHandleInfoNVX"; + case StructureType::eImageViewAddressPropertiesNVX : return "ImageViewAddressPropertiesNVX"; + case StructureType::eVideoEncodeH264CapabilitiesKHR : return "VideoEncodeH264CapabilitiesKHR"; + case StructureType::eVideoEncodeH264SessionParametersCreateInfoKHR : return "VideoEncodeH264SessionParametersCreateInfoKHR"; + case StructureType::eVideoEncodeH264SessionParametersAddInfoKHR : return "VideoEncodeH264SessionParametersAddInfoKHR"; + case StructureType::eVideoEncodeH264PictureInfoKHR : return "VideoEncodeH264PictureInfoKHR"; + case StructureType::eVideoEncodeH264DpbSlotInfoKHR : return "VideoEncodeH264DpbSlotInfoKHR"; + case StructureType::eVideoEncodeH264NaluSliceInfoKHR : return "VideoEncodeH264NaluSliceInfoKHR"; + case StructureType::eVideoEncodeH264GopRemainingFrameInfoKHR : return "VideoEncodeH264GopRemainingFrameInfoKHR"; + case StructureType::eVideoEncodeH264ProfileInfoKHR : return "VideoEncodeH264ProfileInfoKHR"; + case StructureType::eVideoEncodeH264RateControlInfoKHR : return "VideoEncodeH264RateControlInfoKHR"; + case StructureType::eVideoEncodeH264RateControlLayerInfoKHR : return "VideoEncodeH264RateControlLayerInfoKHR"; + case StructureType::eVideoEncodeH264SessionCreateInfoKHR : return "VideoEncodeH264SessionCreateInfoKHR"; + case StructureType::eVideoEncodeH264QualityLevelPropertiesKHR : return "VideoEncodeH264QualityLevelPropertiesKHR"; + case StructureType::eVideoEncodeH264SessionParametersGetInfoKHR : return "VideoEncodeH264SessionParametersGetInfoKHR"; + case StructureType::eVideoEncodeH264SessionParametersFeedbackInfoKHR: return "VideoEncodeH264SessionParametersFeedbackInfoKHR"; + case StructureType::eVideoEncodeH265CapabilitiesKHR : return "VideoEncodeH265CapabilitiesKHR"; + case StructureType::eVideoEncodeH265SessionParametersCreateInfoKHR : return "VideoEncodeH265SessionParametersCreateInfoKHR"; + case StructureType::eVideoEncodeH265SessionParametersAddInfoKHR : return "VideoEncodeH265SessionParametersAddInfoKHR"; + case StructureType::eVideoEncodeH265PictureInfoKHR : return "VideoEncodeH265PictureInfoKHR"; + case StructureType::eVideoEncodeH265DpbSlotInfoKHR : return "VideoEncodeH265DpbSlotInfoKHR"; + case StructureType::eVideoEncodeH265NaluSliceSegmentInfoKHR : return "VideoEncodeH265NaluSliceSegmentInfoKHR"; + case StructureType::eVideoEncodeH265GopRemainingFrameInfoKHR : return "VideoEncodeH265GopRemainingFrameInfoKHR"; + case StructureType::eVideoEncodeH265ProfileInfoKHR : return "VideoEncodeH265ProfileInfoKHR"; + case StructureType::eVideoEncodeH265RateControlInfoKHR : return "VideoEncodeH265RateControlInfoKHR"; + case StructureType::eVideoEncodeH265RateControlLayerInfoKHR : return "VideoEncodeH265RateControlLayerInfoKHR"; + case StructureType::eVideoEncodeH265SessionCreateInfoKHR : return "VideoEncodeH265SessionCreateInfoKHR"; + case StructureType::eVideoEncodeH265QualityLevelPropertiesKHR : return "VideoEncodeH265QualityLevelPropertiesKHR"; + case StructureType::eVideoEncodeH265SessionParametersGetInfoKHR : return "VideoEncodeH265SessionParametersGetInfoKHR"; + case StructureType::eVideoEncodeH265SessionParametersFeedbackInfoKHR: return "VideoEncodeH265SessionParametersFeedbackInfoKHR"; + case StructureType::eVideoDecodeH264CapabilitiesKHR : return "VideoDecodeH264CapabilitiesKHR"; + case StructureType::eVideoDecodeH264PictureInfoKHR : return "VideoDecodeH264PictureInfoKHR"; + case StructureType::eVideoDecodeH264ProfileInfoKHR : return "VideoDecodeH264ProfileInfoKHR"; + case StructureType::eVideoDecodeH264SessionParametersCreateInfoKHR : return "VideoDecodeH264SessionParametersCreateInfoKHR"; + case StructureType::eVideoDecodeH264SessionParametersAddInfoKHR : return "VideoDecodeH264SessionParametersAddInfoKHR"; + case StructureType::eVideoDecodeH264DpbSlotInfoKHR : return "VideoDecodeH264DpbSlotInfoKHR"; + case StructureType::eTextureLodGatherFormatPropertiesAMD : return "TextureLodGatherFormatPropertiesAMD"; +#if defined( VK_USE_PLATFORM_GGP ) + case StructureType::eStreamDescriptorSurfaceCreateInfoGGP: return "StreamDescriptorSurfaceCreateInfoGGP"; +#endif /*VK_USE_PLATFORM_GGP*/ + case StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV: return "PhysicalDeviceCornerSampledImageFeaturesNV"; + case StructureType::eExternalMemoryImageCreateInfoNV : return "ExternalMemoryImageCreateInfoNV"; + case StructureType::eExportMemoryAllocateInfoNV : return "ExportMemoryAllocateInfoNV"; +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case StructureType::eImportMemoryWin32HandleInfoNV : return "ImportMemoryWin32HandleInfoNV"; + case StructureType::eExportMemoryWin32HandleInfoNV : return "ExportMemoryWin32HandleInfoNV"; + case StructureType::eWin32KeyedMutexAcquireReleaseInfoNV: return "Win32KeyedMutexAcquireReleaseInfoNV"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case StructureType::eValidationFlagsEXT: return "ValidationFlagsEXT"; +#if defined( VK_USE_PLATFORM_VI_NN ) + case StructureType::eViSurfaceCreateInfoNN: return "ViSurfaceCreateInfoNN"; +#endif /*VK_USE_PLATFORM_VI_NN*/ + case StructureType::eImageViewAstcDecodeModeEXT : return "ImageViewAstcDecodeModeEXT"; + case StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT: return "PhysicalDeviceAstcDecodeFeaturesEXT"; +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case StructureType::eImportMemoryWin32HandleInfoKHR: return "ImportMemoryWin32HandleInfoKHR"; + case StructureType::eExportMemoryWin32HandleInfoKHR: return "ExportMemoryWin32HandleInfoKHR"; + case StructureType::eMemoryWin32HandlePropertiesKHR: return "MemoryWin32HandlePropertiesKHR"; + case StructureType::eMemoryGetWin32HandleInfoKHR : return "MemoryGetWin32HandleInfoKHR"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case StructureType::eImportMemoryFdInfoKHR: return "ImportMemoryFdInfoKHR"; + case StructureType::eMemoryFdPropertiesKHR: return "MemoryFdPropertiesKHR"; + case StructureType::eMemoryGetFdInfoKHR : return "MemoryGetFdInfoKHR"; +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR: return "Win32KeyedMutexAcquireReleaseInfoKHR"; + case StructureType::eImportSemaphoreWin32HandleInfoKHR : return "ImportSemaphoreWin32HandleInfoKHR"; + case StructureType::eExportSemaphoreWin32HandleInfoKHR : return "ExportSemaphoreWin32HandleInfoKHR"; + case StructureType::eD3D12FenceSubmitInfoKHR : return "D3D12FenceSubmitInfoKHR"; + case StructureType::eSemaphoreGetWin32HandleInfoKHR : return "SemaphoreGetWin32HandleInfoKHR"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case StructureType::eImportSemaphoreFdInfoKHR : return "ImportSemaphoreFdInfoKHR"; + case StructureType::eSemaphoreGetFdInfoKHR : return "SemaphoreGetFdInfoKHR"; + case StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT : return "CommandBufferInheritanceConditionalRenderingInfoEXT"; + case StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT : return "PhysicalDeviceConditionalRenderingFeaturesEXT"; + case StructureType::eConditionalRenderingBeginInfoEXT : return "ConditionalRenderingBeginInfoEXT"; + case StructureType::ePresentRegionsKHR : return "PresentRegionsKHR"; + case StructureType::ePipelineViewportWScalingStateCreateInfoNV : return "PipelineViewportWScalingStateCreateInfoNV"; + case StructureType::eSurfaceCapabilities2EXT : return "SurfaceCapabilities2EXT"; + case StructureType::eDisplayPowerInfoEXT : return "DisplayPowerInfoEXT"; + case StructureType::eDeviceEventInfoEXT : return "DeviceEventInfoEXT"; + case StructureType::eDisplayEventInfoEXT : return "DisplayEventInfoEXT"; + case StructureType::eSwapchainCounterCreateInfoEXT : return "SwapchainCounterCreateInfoEXT"; + case StructureType::ePresentTimesInfoGOOGLE : return "PresentTimesInfoGOOGLE"; + case StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX: return "PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX"; + case StructureType::eMultiviewPerViewAttributesInfoNVX : return "MultiviewPerViewAttributesInfoNVX"; + case StructureType::ePipelineViewportSwizzleStateCreateInfoNV : return "PipelineViewportSwizzleStateCreateInfoNV"; + case StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT : return "PhysicalDeviceDiscardRectanglePropertiesEXT"; + case StructureType::ePipelineDiscardRectangleStateCreateInfoEXT : return "PipelineDiscardRectangleStateCreateInfoEXT"; + case StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT : return "PhysicalDeviceConservativeRasterizationPropertiesEXT"; + case StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT : return "PipelineRasterizationConservativeStateCreateInfoEXT"; + case StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT : return "PhysicalDeviceDepthClipEnableFeaturesEXT"; + case StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT : return "PipelineRasterizationDepthClipStateCreateInfoEXT"; + case StructureType::eHdrMetadataEXT : return "HdrMetadataEXT"; + case StructureType::ePhysicalDeviceRelaxedLineRasterizationFeaturesIMG : return "PhysicalDeviceRelaxedLineRasterizationFeaturesIMG"; + case StructureType::eSharedPresentSurfaceCapabilitiesKHR : return "SharedPresentSurfaceCapabilitiesKHR"; +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case StructureType::eImportFenceWin32HandleInfoKHR: return "ImportFenceWin32HandleInfoKHR"; + case StructureType::eExportFenceWin32HandleInfoKHR: return "ExportFenceWin32HandleInfoKHR"; + case StructureType::eFenceGetWin32HandleInfoKHR : return "FenceGetWin32HandleInfoKHR"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case StructureType::eImportFenceFdInfoKHR : return "ImportFenceFdInfoKHR"; + case StructureType::eFenceGetFdInfoKHR : return "FenceGetFdInfoKHR"; + case StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR : return "PhysicalDevicePerformanceQueryFeaturesKHR"; + case StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR: return "PhysicalDevicePerformanceQueryPropertiesKHR"; + case StructureType::eQueryPoolPerformanceCreateInfoKHR : return "QueryPoolPerformanceCreateInfoKHR"; + case StructureType::ePerformanceQuerySubmitInfoKHR : return "PerformanceQuerySubmitInfoKHR"; + case StructureType::eAcquireProfilingLockInfoKHR : return "AcquireProfilingLockInfoKHR"; + case StructureType::ePerformanceCounterKHR : return "PerformanceCounterKHR"; + case StructureType::ePerformanceCounterDescriptionKHR : return "PerformanceCounterDescriptionKHR"; + case StructureType::ePhysicalDeviceSurfaceInfo2KHR : return "PhysicalDeviceSurfaceInfo2KHR"; + case StructureType::eSurfaceCapabilities2KHR : return "SurfaceCapabilities2KHR"; + case StructureType::eSurfaceFormat2KHR : return "SurfaceFormat2KHR"; + case StructureType::eDisplayProperties2KHR : return "DisplayProperties2KHR"; + case StructureType::eDisplayPlaneProperties2KHR : return "DisplayPlaneProperties2KHR"; + case StructureType::eDisplayModeProperties2KHR : return "DisplayModeProperties2KHR"; + case StructureType::eDisplayPlaneInfo2KHR : return "DisplayPlaneInfo2KHR"; + case StructureType::eDisplayPlaneCapabilities2KHR : return "DisplayPlaneCapabilities2KHR"; +#if defined( VK_USE_PLATFORM_IOS_MVK ) + case StructureType::eIosSurfaceCreateInfoMVK: return "IosSurfaceCreateInfoMVK"; +#endif /*VK_USE_PLATFORM_IOS_MVK*/ +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + case StructureType::eMacosSurfaceCreateInfoMVK: return "MacosSurfaceCreateInfoMVK"; +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + case StructureType::eDebugUtilsObjectNameInfoEXT : return "DebugUtilsObjectNameInfoEXT"; + case StructureType::eDebugUtilsObjectTagInfoEXT : return "DebugUtilsObjectTagInfoEXT"; + case StructureType::eDebugUtilsLabelEXT : return "DebugUtilsLabelEXT"; + case StructureType::eDebugUtilsMessengerCallbackDataEXT: return "DebugUtilsMessengerCallbackDataEXT"; + case StructureType::eDebugUtilsMessengerCreateInfoEXT : return "DebugUtilsMessengerCreateInfoEXT"; +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + case StructureType::eAndroidHardwareBufferUsageANDROID : return "AndroidHardwareBufferUsageANDROID"; + case StructureType::eAndroidHardwareBufferPropertiesANDROID : return "AndroidHardwareBufferPropertiesANDROID"; + case StructureType::eAndroidHardwareBufferFormatPropertiesANDROID : return "AndroidHardwareBufferFormatPropertiesANDROID"; + case StructureType::eImportAndroidHardwareBufferInfoANDROID : return "ImportAndroidHardwareBufferInfoANDROID"; + case StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID : return "MemoryGetAndroidHardwareBufferInfoANDROID"; + case StructureType::eExternalFormatANDROID : return "ExternalFormatANDROID"; + case StructureType::eAndroidHardwareBufferFormatProperties2ANDROID: return "AndroidHardwareBufferFormatProperties2ANDROID"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case StructureType::ePhysicalDeviceShaderEnqueueFeaturesAMDX : return "PhysicalDeviceShaderEnqueueFeaturesAMDX"; + case StructureType::ePhysicalDeviceShaderEnqueuePropertiesAMDX: return "PhysicalDeviceShaderEnqueuePropertiesAMDX"; + case StructureType::eExecutionGraphPipelineScratchSizeAMDX : return "ExecutionGraphPipelineScratchSizeAMDX"; + case StructureType::eExecutionGraphPipelineCreateInfoAMDX : return "ExecutionGraphPipelineCreateInfoAMDX"; + case StructureType::ePipelineShaderStageNodeCreateInfoAMDX : return "PipelineShaderStageNodeCreateInfoAMDX"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case StructureType::eAttachmentSampleCountInfoAMD : return "AttachmentSampleCountInfoAMD"; + case StructureType::ePhysicalDeviceShaderBfloat16FeaturesKHR : return "PhysicalDeviceShaderBfloat16FeaturesKHR"; + case StructureType::eSampleLocationsInfoEXT : return "SampleLocationsInfoEXT"; + case StructureType::eRenderPassSampleLocationsBeginInfoEXT : return "RenderPassSampleLocationsBeginInfoEXT"; + case StructureType::ePipelineSampleLocationsStateCreateInfoEXT : return "PipelineSampleLocationsStateCreateInfoEXT"; + case StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT : return "PhysicalDeviceSampleLocationsPropertiesEXT"; + case StructureType::eMultisamplePropertiesEXT : return "MultisamplePropertiesEXT"; + case StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT : return "PhysicalDeviceBlendOperationAdvancedFeaturesEXT"; + case StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT: return "PhysicalDeviceBlendOperationAdvancedPropertiesEXT"; + case StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT : return "PipelineColorBlendAdvancedStateCreateInfoEXT"; + case StructureType::ePipelineCoverageToColorStateCreateInfoNV : return "PipelineCoverageToColorStateCreateInfoNV"; + case StructureType::eWriteDescriptorSetAccelerationStructureKHR : return "WriteDescriptorSetAccelerationStructureKHR"; + case StructureType::eAccelerationStructureBuildGeometryInfoKHR : return "AccelerationStructureBuildGeometryInfoKHR"; + case StructureType::eAccelerationStructureDeviceAddressInfoKHR : return "AccelerationStructureDeviceAddressInfoKHR"; + case StructureType::eAccelerationStructureGeometryAabbsDataKHR : return "AccelerationStructureGeometryAabbsDataKHR"; + case StructureType::eAccelerationStructureGeometryInstancesDataKHR : return "AccelerationStructureGeometryInstancesDataKHR"; + case StructureType::eAccelerationStructureGeometryTrianglesDataKHR : return "AccelerationStructureGeometryTrianglesDataKHR"; + case StructureType::eAccelerationStructureGeometryKHR : return "AccelerationStructureGeometryKHR"; + case StructureType::eAccelerationStructureVersionInfoKHR : return "AccelerationStructureVersionInfoKHR"; + case StructureType::eCopyAccelerationStructureInfoKHR : return "CopyAccelerationStructureInfoKHR"; + case StructureType::eCopyAccelerationStructureToMemoryInfoKHR : return "CopyAccelerationStructureToMemoryInfoKHR"; + case StructureType::eCopyMemoryToAccelerationStructureInfoKHR : return "CopyMemoryToAccelerationStructureInfoKHR"; + case StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR : return "PhysicalDeviceAccelerationStructureFeaturesKHR"; + case StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR : return "PhysicalDeviceAccelerationStructurePropertiesKHR"; + case StructureType::eAccelerationStructureCreateInfoKHR : return "AccelerationStructureCreateInfoKHR"; + case StructureType::eAccelerationStructureBuildSizesInfoKHR : return "AccelerationStructureBuildSizesInfoKHR"; + case StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR : return "PhysicalDeviceRayTracingPipelineFeaturesKHR"; + case StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR : return "PhysicalDeviceRayTracingPipelinePropertiesKHR"; + case StructureType::eRayTracingPipelineCreateInfoKHR : return "RayTracingPipelineCreateInfoKHR"; + case StructureType::eRayTracingShaderGroupCreateInfoKHR : return "RayTracingShaderGroupCreateInfoKHR"; + case StructureType::eRayTracingPipelineInterfaceCreateInfoKHR : return "RayTracingPipelineInterfaceCreateInfoKHR"; + case StructureType::ePhysicalDeviceRayQueryFeaturesKHR : return "PhysicalDeviceRayQueryFeaturesKHR"; + case StructureType::ePipelineCoverageModulationStateCreateInfoNV : return "PipelineCoverageModulationStateCreateInfoNV"; + case StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV : return "PhysicalDeviceShaderSmBuiltinsFeaturesNV"; + case StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV : return "PhysicalDeviceShaderSmBuiltinsPropertiesNV"; + case StructureType::eDrmFormatModifierPropertiesListEXT : return "DrmFormatModifierPropertiesListEXT"; + case StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT : return "PhysicalDeviceImageDrmFormatModifierInfoEXT"; + case StructureType::eImageDrmFormatModifierListCreateInfoEXT : return "ImageDrmFormatModifierListCreateInfoEXT"; + case StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT : return "ImageDrmFormatModifierExplicitCreateInfoEXT"; + case StructureType::eImageDrmFormatModifierPropertiesEXT : return "ImageDrmFormatModifierPropertiesEXT"; + case StructureType::eDrmFormatModifierPropertiesList2EXT : return "DrmFormatModifierPropertiesList2EXT"; + case StructureType::eValidationCacheCreateInfoEXT : return "ValidationCacheCreateInfoEXT"; + case StructureType::eShaderModuleValidationCacheCreateInfoEXT : return "ShaderModuleValidationCacheCreateInfoEXT"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR : return "PhysicalDevicePortabilitySubsetFeaturesKHR"; + case StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR: return "PhysicalDevicePortabilitySubsetPropertiesKHR"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV : return "PipelineViewportShadingRateImageStateCreateInfoNV"; + case StructureType::ePhysicalDeviceShadingRateImageFeaturesNV : return "PhysicalDeviceShadingRateImageFeaturesNV"; + case StructureType::ePhysicalDeviceShadingRateImagePropertiesNV : return "PhysicalDeviceShadingRateImagePropertiesNV"; + case StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV : return "PipelineViewportCoarseSampleOrderStateCreateInfoNV"; + case StructureType::eRayTracingPipelineCreateInfoNV : return "RayTracingPipelineCreateInfoNV"; + case StructureType::eAccelerationStructureCreateInfoNV : return "AccelerationStructureCreateInfoNV"; + case StructureType::eGeometryNV : return "GeometryNV"; + case StructureType::eGeometryTrianglesNV : return "GeometryTrianglesNV"; + case StructureType::eGeometryAabbNV : return "GeometryAabbNV"; + case StructureType::eBindAccelerationStructureMemoryInfoNV : return "BindAccelerationStructureMemoryInfoNV"; + case StructureType::eWriteDescriptorSetAccelerationStructureNV : return "WriteDescriptorSetAccelerationStructureNV"; + case StructureType::eAccelerationStructureMemoryRequirementsInfoNV : return "AccelerationStructureMemoryRequirementsInfoNV"; + case StructureType::ePhysicalDeviceRayTracingPropertiesNV : return "PhysicalDeviceRayTracingPropertiesNV"; + case StructureType::eRayTracingShaderGroupCreateInfoNV : return "RayTracingShaderGroupCreateInfoNV"; + case StructureType::eAccelerationStructureInfoNV : return "AccelerationStructureInfoNV"; + case StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV : return "PhysicalDeviceRepresentativeFragmentTestFeaturesNV"; + case StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV: return "PipelineRepresentativeFragmentTestStateCreateInfoNV"; + case StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT : return "PhysicalDeviceImageViewImageFormatInfoEXT"; + case StructureType::eFilterCubicImageViewImageFormatPropertiesEXT : return "FilterCubicImageViewImageFormatPropertiesEXT"; + case StructureType::eImportMemoryHostPointerInfoEXT : return "ImportMemoryHostPointerInfoEXT"; + case StructureType::eMemoryHostPointerPropertiesEXT : return "MemoryHostPointerPropertiesEXT"; + case StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT : return "PhysicalDeviceExternalMemoryHostPropertiesEXT"; + case StructureType::ePhysicalDeviceShaderClockFeaturesKHR : return "PhysicalDeviceShaderClockFeaturesKHR"; + case StructureType::ePipelineCompilerControlCreateInfoAMD : return "PipelineCompilerControlCreateInfoAMD"; + case StructureType::ePhysicalDeviceShaderCorePropertiesAMD : return "PhysicalDeviceShaderCorePropertiesAMD"; + case StructureType::eVideoDecodeH265CapabilitiesKHR : return "VideoDecodeH265CapabilitiesKHR"; + case StructureType::eVideoDecodeH265SessionParametersCreateInfoKHR : return "VideoDecodeH265SessionParametersCreateInfoKHR"; + case StructureType::eVideoDecodeH265SessionParametersAddInfoKHR : return "VideoDecodeH265SessionParametersAddInfoKHR"; + case StructureType::eVideoDecodeH265ProfileInfoKHR : return "VideoDecodeH265ProfileInfoKHR"; + case StructureType::eVideoDecodeH265PictureInfoKHR : return "VideoDecodeH265PictureInfoKHR"; + case StructureType::eVideoDecodeH265DpbSlotInfoKHR : return "VideoDecodeH265DpbSlotInfoKHR"; + case StructureType::eDeviceMemoryOverallocationCreateInfoAMD : return "DeviceMemoryOverallocationCreateInfoAMD"; + case StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT : return "PhysicalDeviceVertexAttributeDivisorPropertiesEXT"; +#if defined( VK_USE_PLATFORM_GGP ) + case StructureType::ePresentFrameTokenGGP: return "PresentFrameTokenGGP"; +#endif /*VK_USE_PLATFORM_GGP*/ + case StructureType::ePhysicalDeviceMeshShaderFeaturesNV : return "PhysicalDeviceMeshShaderFeaturesNV"; + case StructureType::ePhysicalDeviceMeshShaderPropertiesNV : return "PhysicalDeviceMeshShaderPropertiesNV"; + case StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV : return "PhysicalDeviceShaderImageFootprintFeaturesNV"; + case StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV : return "PipelineViewportExclusiveScissorStateCreateInfoNV"; + case StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV : return "PhysicalDeviceExclusiveScissorFeaturesNV"; + case StructureType::eCheckpointDataNV : return "CheckpointDataNV"; + case StructureType::eQueueFamilyCheckpointPropertiesNV : return "QueueFamilyCheckpointPropertiesNV"; + case StructureType::eQueueFamilyCheckpointProperties2NV : return "QueueFamilyCheckpointProperties2NV"; + case StructureType::eCheckpointData2NV : return "CheckpointData2NV"; + case StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL: return "PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL"; + case StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL : return "QueryPoolPerformanceQueryCreateInfoINTEL"; + case StructureType::eInitializePerformanceApiInfoINTEL : return "InitializePerformanceApiInfoINTEL"; + case StructureType::ePerformanceMarkerInfoINTEL : return "PerformanceMarkerInfoINTEL"; + case StructureType::ePerformanceStreamMarkerInfoINTEL : return "PerformanceStreamMarkerInfoINTEL"; + case StructureType::ePerformanceOverrideInfoINTEL : return "PerformanceOverrideInfoINTEL"; + case StructureType::ePerformanceConfigurationAcquireInfoINTEL : return "PerformanceConfigurationAcquireInfoINTEL"; + case StructureType::ePhysicalDevicePciBusInfoPropertiesEXT : return "PhysicalDevicePciBusInfoPropertiesEXT"; + case StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD : return "DisplayNativeHdrSurfaceCapabilitiesAMD"; + case StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD : return "SwapchainDisplayNativeHdrCreateInfoAMD"; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + case StructureType::eImagepipeSurfaceCreateInfoFUCHSIA: return "ImagepipeSurfaceCreateInfoFUCHSIA"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + case StructureType::eMetalSurfaceCreateInfoEXT: return "MetalSurfaceCreateInfoEXT"; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + case StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT : return "PhysicalDeviceFragmentDensityMapFeaturesEXT"; + case StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT : return "PhysicalDeviceFragmentDensityMapPropertiesEXT"; + case StructureType::eRenderPassFragmentDensityMapCreateInfoEXT : return "RenderPassFragmentDensityMapCreateInfoEXT"; + case StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT : return "RenderingFragmentDensityMapAttachmentInfoEXT"; + case StructureType::eFragmentShadingRateAttachmentInfoKHR : return "FragmentShadingRateAttachmentInfoKHR"; + case StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR : return "PipelineFragmentShadingRateStateCreateInfoKHR"; + case StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR : return "PhysicalDeviceFragmentShadingRatePropertiesKHR"; + case StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR : return "PhysicalDeviceFragmentShadingRateFeaturesKHR"; + case StructureType::ePhysicalDeviceFragmentShadingRateKHR : return "PhysicalDeviceFragmentShadingRateKHR"; + case StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR : return "RenderingFragmentShadingRateAttachmentInfoKHR"; + case StructureType::ePhysicalDeviceShaderCoreProperties2AMD : return "PhysicalDeviceShaderCoreProperties2AMD"; + case StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD : return "PhysicalDeviceCoherentMemoryFeaturesAMD"; + case StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT : return "PhysicalDeviceShaderImageAtomicInt64FeaturesEXT"; + case StructureType::ePhysicalDeviceShaderQuadControlFeaturesKHR : return "PhysicalDeviceShaderQuadControlFeaturesKHR"; + case StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT : return "PhysicalDeviceMemoryBudgetPropertiesEXT"; + case StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT : return "PhysicalDeviceMemoryPriorityFeaturesEXT"; + case StructureType::eMemoryPriorityAllocateInfoEXT : return "MemoryPriorityAllocateInfoEXT"; + case StructureType::eSurfaceProtectedCapabilitiesKHR : return "SurfaceProtectedCapabilitiesKHR"; + case StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV: return "PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV"; + case StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT : return "PhysicalDeviceBufferDeviceAddressFeaturesEXT"; + case StructureType::eBufferDeviceAddressCreateInfoEXT : return "BufferDeviceAddressCreateInfoEXT"; + case StructureType::eValidationFeaturesEXT : return "ValidationFeaturesEXT"; + case StructureType::ePhysicalDevicePresentWaitFeaturesKHR : return "PhysicalDevicePresentWaitFeaturesKHR"; + case StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV : return "PhysicalDeviceCooperativeMatrixFeaturesNV"; + case StructureType::eCooperativeMatrixPropertiesNV : return "CooperativeMatrixPropertiesNV"; + case StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV : return "PhysicalDeviceCooperativeMatrixPropertiesNV"; + case StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV : return "PhysicalDeviceCoverageReductionModeFeaturesNV"; + case StructureType::ePipelineCoverageReductionStateCreateInfoNV : return "PipelineCoverageReductionStateCreateInfoNV"; + case StructureType::eFramebufferMixedSamplesCombinationNV : return "FramebufferMixedSamplesCombinationNV"; + case StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT : return "PhysicalDeviceFragmentShaderInterlockFeaturesEXT"; + case StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT : return "PhysicalDeviceYcbcrImageArraysFeaturesEXT"; + case StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT : return "PhysicalDeviceProvokingVertexFeaturesEXT"; + case StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT : return "PipelineRasterizationProvokingVertexStateCreateInfoEXT"; + case StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT : return "PhysicalDeviceProvokingVertexPropertiesEXT"; +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + case StructureType::eSurfaceFullScreenExclusiveInfoEXT : return "SurfaceFullScreenExclusiveInfoEXT"; + case StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT: return "SurfaceCapabilitiesFullScreenExclusiveEXT"; + case StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT : return "SurfaceFullScreenExclusiveWin32InfoEXT"; +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + case StructureType::eHeadlessSurfaceCreateInfoEXT : return "HeadlessSurfaceCreateInfoEXT"; + case StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT : return "PhysicalDeviceShaderAtomicFloatFeaturesEXT"; + case StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT : return "PhysicalDeviceExtendedDynamicStateFeaturesEXT"; + case StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR: return "PhysicalDevicePipelineExecutablePropertiesFeaturesKHR"; + case StructureType::ePipelineInfoKHR : return "PipelineInfoKHR"; + case StructureType::ePipelineExecutablePropertiesKHR : return "PipelineExecutablePropertiesKHR"; + case StructureType::ePipelineExecutableInfoKHR : return "PipelineExecutableInfoKHR"; + case StructureType::ePipelineExecutableStatisticKHR : return "PipelineExecutableStatisticKHR"; + case StructureType::ePipelineExecutableInternalRepresentationKHR : return "PipelineExecutableInternalRepresentationKHR"; + case StructureType::ePhysicalDeviceMapMemoryPlacedFeaturesEXT : return "PhysicalDeviceMapMemoryPlacedFeaturesEXT"; + case StructureType::ePhysicalDeviceMapMemoryPlacedPropertiesEXT : return "PhysicalDeviceMapMemoryPlacedPropertiesEXT"; + case StructureType::eMemoryMapPlacedInfoEXT : return "MemoryMapPlacedInfoEXT"; + case StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT : return "PhysicalDeviceShaderAtomicFloat2FeaturesEXT"; + case StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV : return "PhysicalDeviceDeviceGeneratedCommandsPropertiesNV"; + case StructureType::eGraphicsShaderGroupCreateInfoNV : return "GraphicsShaderGroupCreateInfoNV"; + case StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV : return "GraphicsPipelineShaderGroupsCreateInfoNV"; + case StructureType::eIndirectCommandsLayoutTokenNV : return "IndirectCommandsLayoutTokenNV"; + case StructureType::eIndirectCommandsLayoutCreateInfoNV : return "IndirectCommandsLayoutCreateInfoNV"; + case StructureType::eGeneratedCommandsInfoNV : return "GeneratedCommandsInfoNV"; + case StructureType::eGeneratedCommandsMemoryRequirementsInfoNV : return "GeneratedCommandsMemoryRequirementsInfoNV"; + case StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV : return "PhysicalDeviceDeviceGeneratedCommandsFeaturesNV"; + case StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV : return "PhysicalDeviceInheritedViewportScissorFeaturesNV"; + case StructureType::eCommandBufferInheritanceViewportScissorInfoNV : return "CommandBufferInheritanceViewportScissorInfoNV"; + case StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT : return "PhysicalDeviceTexelBufferAlignmentFeaturesEXT"; + case StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM : return "CommandBufferInheritanceRenderPassTransformInfoQCOM"; + case StructureType::eRenderPassTransformBeginInfoQCOM : return "RenderPassTransformBeginInfoQCOM"; + case StructureType::ePhysicalDeviceDepthBiasControlFeaturesEXT : return "PhysicalDeviceDepthBiasControlFeaturesEXT"; + case StructureType::eDepthBiasInfoEXT : return "DepthBiasInfoEXT"; + case StructureType::eDepthBiasRepresentationInfoEXT : return "DepthBiasRepresentationInfoEXT"; + case StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT : return "PhysicalDeviceDeviceMemoryReportFeaturesEXT"; + case StructureType::eDeviceDeviceMemoryReportCreateInfoEXT : return "DeviceDeviceMemoryReportCreateInfoEXT"; + case StructureType::eDeviceMemoryReportCallbackDataEXT : return "DeviceMemoryReportCallbackDataEXT"; + case StructureType::eSamplerCustomBorderColorCreateInfoEXT : return "SamplerCustomBorderColorCreateInfoEXT"; + case StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT : return "PhysicalDeviceCustomBorderColorPropertiesEXT"; + case StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT : return "PhysicalDeviceCustomBorderColorFeaturesEXT"; + case StructureType::ePipelineLibraryCreateInfoKHR : return "PipelineLibraryCreateInfoKHR"; + case StructureType::ePhysicalDevicePresentBarrierFeaturesNV : return "PhysicalDevicePresentBarrierFeaturesNV"; + case StructureType::eSurfaceCapabilitiesPresentBarrierNV : return "SurfaceCapabilitiesPresentBarrierNV"; + case StructureType::eSwapchainPresentBarrierCreateInfoNV : return "SwapchainPresentBarrierCreateInfoNV"; + case StructureType::ePresentIdKHR : return "PresentIdKHR"; + case StructureType::ePhysicalDevicePresentIdFeaturesKHR : return "PhysicalDevicePresentIdFeaturesKHR"; + case StructureType::eVideoEncodeInfoKHR : return "VideoEncodeInfoKHR"; + case StructureType::eVideoEncodeRateControlInfoKHR : return "VideoEncodeRateControlInfoKHR"; + case StructureType::eVideoEncodeRateControlLayerInfoKHR : return "VideoEncodeRateControlLayerInfoKHR"; + case StructureType::eVideoEncodeCapabilitiesKHR : return "VideoEncodeCapabilitiesKHR"; + case StructureType::eVideoEncodeUsageInfoKHR : return "VideoEncodeUsageInfoKHR"; + case StructureType::eQueryPoolVideoEncodeFeedbackCreateInfoKHR : return "QueryPoolVideoEncodeFeedbackCreateInfoKHR"; + case StructureType::ePhysicalDeviceVideoEncodeQualityLevelInfoKHR : return "PhysicalDeviceVideoEncodeQualityLevelInfoKHR"; + case StructureType::eVideoEncodeQualityLevelPropertiesKHR : return "VideoEncodeQualityLevelPropertiesKHR"; + case StructureType::eVideoEncodeQualityLevelInfoKHR : return "VideoEncodeQualityLevelInfoKHR"; + case StructureType::eVideoEncodeSessionParametersGetInfoKHR : return "VideoEncodeSessionParametersGetInfoKHR"; + case StructureType::eVideoEncodeSessionParametersFeedbackInfoKHR : return "VideoEncodeSessionParametersFeedbackInfoKHR"; + case StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV : return "PhysicalDeviceDiagnosticsConfigFeaturesNV"; + case StructureType::eDeviceDiagnosticsConfigCreateInfoNV : return "DeviceDiagnosticsConfigCreateInfoNV"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case StructureType::eCudaModuleCreateInfoNV : return "CudaModuleCreateInfoNV"; + case StructureType::eCudaFunctionCreateInfoNV : return "CudaFunctionCreateInfoNV"; + case StructureType::eCudaLaunchInfoNV : return "CudaLaunchInfoNV"; + case StructureType::ePhysicalDeviceCudaKernelLaunchFeaturesNV : return "PhysicalDeviceCudaKernelLaunchFeaturesNV"; + case StructureType::ePhysicalDeviceCudaKernelLaunchPropertiesNV: return "PhysicalDeviceCudaKernelLaunchPropertiesNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case StructureType::ePhysicalDeviceTileShadingFeaturesQCOM : return "PhysicalDeviceTileShadingFeaturesQCOM"; + case StructureType::ePhysicalDeviceTileShadingPropertiesQCOM: return "PhysicalDeviceTileShadingPropertiesQCOM"; + case StructureType::eRenderPassTileShadingCreateInfoQCOM : return "RenderPassTileShadingCreateInfoQCOM"; + case StructureType::ePerTileBeginInfoQCOM : return "PerTileBeginInfoQCOM"; + case StructureType::ePerTileEndInfoQCOM : return "PerTileEndInfoQCOM"; + case StructureType::eDispatchTileInfoQCOM : return "DispatchTileInfoQCOM"; + case StructureType::eQueryLowLatencySupportNV : return "QueryLowLatencySupportNV"; +#if defined( VK_USE_PLATFORM_METAL_EXT ) + case StructureType::eExportMetalObjectCreateInfoEXT: return "ExportMetalObjectCreateInfoEXT"; + case StructureType::eExportMetalObjectsInfoEXT : return "ExportMetalObjectsInfoEXT"; + case StructureType::eExportMetalDeviceInfoEXT : return "ExportMetalDeviceInfoEXT"; + case StructureType::eExportMetalCommandQueueInfoEXT: return "ExportMetalCommandQueueInfoEXT"; + case StructureType::eExportMetalBufferInfoEXT : return "ExportMetalBufferInfoEXT"; + case StructureType::eImportMetalBufferInfoEXT : return "ImportMetalBufferInfoEXT"; + case StructureType::eExportMetalTextureInfoEXT : return "ExportMetalTextureInfoEXT"; + case StructureType::eImportMetalTextureInfoEXT : return "ImportMetalTextureInfoEXT"; + case StructureType::eExportMetalIoSurfaceInfoEXT : return "ExportMetalIoSurfaceInfoEXT"; + case StructureType::eImportMetalIoSurfaceInfoEXT : return "ImportMetalIoSurfaceInfoEXT"; + case StructureType::eExportMetalSharedEventInfoEXT : return "ExportMetalSharedEventInfoEXT"; + case StructureType::eImportMetalSharedEventInfoEXT : return "ImportMetalSharedEventInfoEXT"; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + case StructureType::ePhysicalDeviceDescriptorBufferPropertiesEXT : return "PhysicalDeviceDescriptorBufferPropertiesEXT"; + case StructureType::ePhysicalDeviceDescriptorBufferDensityMapPropertiesEXT : return "PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT"; + case StructureType::ePhysicalDeviceDescriptorBufferFeaturesEXT : return "PhysicalDeviceDescriptorBufferFeaturesEXT"; + case StructureType::eDescriptorAddressInfoEXT : return "DescriptorAddressInfoEXT"; + case StructureType::eDescriptorGetInfoEXT : return "DescriptorGetInfoEXT"; + case StructureType::eBufferCaptureDescriptorDataInfoEXT : return "BufferCaptureDescriptorDataInfoEXT"; + case StructureType::eImageCaptureDescriptorDataInfoEXT : return "ImageCaptureDescriptorDataInfoEXT"; + case StructureType::eImageViewCaptureDescriptorDataInfoEXT : return "ImageViewCaptureDescriptorDataInfoEXT"; + case StructureType::eSamplerCaptureDescriptorDataInfoEXT : return "SamplerCaptureDescriptorDataInfoEXT"; + case StructureType::eOpaqueCaptureDescriptorDataCreateInfoEXT : return "OpaqueCaptureDescriptorDataCreateInfoEXT"; + case StructureType::eDescriptorBufferBindingInfoEXT : return "DescriptorBufferBindingInfoEXT"; + case StructureType::eDescriptorBufferBindingPushDescriptorBufferHandleEXT : return "DescriptorBufferBindingPushDescriptorBufferHandleEXT"; + case StructureType::eAccelerationStructureCaptureDescriptorDataInfoEXT : return "AccelerationStructureCaptureDescriptorDataInfoEXT"; + case StructureType::ePhysicalDeviceGraphicsPipelineLibraryFeaturesEXT : return "PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT"; + case StructureType::ePhysicalDeviceGraphicsPipelineLibraryPropertiesEXT : return "PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT"; + case StructureType::eGraphicsPipelineLibraryCreateInfoEXT : return "GraphicsPipelineLibraryCreateInfoEXT"; + case StructureType::ePhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD : return "PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD"; + case StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesKHR : return "PhysicalDeviceFragmentShaderBarycentricFeaturesKHR"; + case StructureType::ePhysicalDeviceFragmentShaderBarycentricPropertiesKHR : return "PhysicalDeviceFragmentShaderBarycentricPropertiesKHR"; + case StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR: return "PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR"; + case StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV : return "PhysicalDeviceFragmentShadingRateEnumsPropertiesNV"; + case StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV : return "PhysicalDeviceFragmentShadingRateEnumsFeaturesNV"; + case StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV : return "PipelineFragmentShadingRateEnumStateCreateInfoNV"; + case StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV : return "AccelerationStructureGeometryMotionTrianglesDataNV"; + case StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV : return "PhysicalDeviceRayTracingMotionBlurFeaturesNV"; + case StructureType::eAccelerationStructureMotionInfoNV : return "AccelerationStructureMotionInfoNV"; + case StructureType::ePhysicalDeviceMeshShaderFeaturesEXT : return "PhysicalDeviceMeshShaderFeaturesEXT"; + case StructureType::ePhysicalDeviceMeshShaderPropertiesEXT : return "PhysicalDeviceMeshShaderPropertiesEXT"; + case StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT : return "PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT"; + case StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT : return "PhysicalDeviceFragmentDensityMap2FeaturesEXT"; + case StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT : return "PhysicalDeviceFragmentDensityMap2PropertiesEXT"; + case StructureType::eCopyCommandTransformInfoQCOM : return "CopyCommandTransformInfoQCOM"; + case StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR : return "PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR"; + case StructureType::ePhysicalDeviceImageCompressionControlFeaturesEXT : return "PhysicalDeviceImageCompressionControlFeaturesEXT"; + case StructureType::eImageCompressionControlEXT : return "ImageCompressionControlEXT"; + case StructureType::eImageCompressionPropertiesEXT : return "ImageCompressionPropertiesEXT"; + case StructureType::ePhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT : return "PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT"; + case StructureType::ePhysicalDevice4444FormatsFeaturesEXT : return "PhysicalDevice4444FormatsFeaturesEXT"; + case StructureType::ePhysicalDeviceFaultFeaturesEXT : return "PhysicalDeviceFaultFeaturesEXT"; + case StructureType::eDeviceFaultCountsEXT : return "DeviceFaultCountsEXT"; + case StructureType::eDeviceFaultInfoEXT : return "DeviceFaultInfoEXT"; + case StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT : return "PhysicalDeviceRgba10X6FormatsFeaturesEXT"; +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + case StructureType::eDirectfbSurfaceCreateInfoEXT: return "DirectfbSurfaceCreateInfoEXT"; +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + case StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT : return "PhysicalDeviceVertexInputDynamicStateFeaturesEXT"; + case StructureType::eVertexInputBindingDescription2EXT : return "VertexInputBindingDescription2EXT"; + case StructureType::eVertexInputAttributeDescription2EXT : return "VertexInputAttributeDescription2EXT"; + case StructureType::ePhysicalDeviceDrmPropertiesEXT : return "PhysicalDeviceDrmPropertiesEXT"; + case StructureType::ePhysicalDeviceAddressBindingReportFeaturesEXT : return "PhysicalDeviceAddressBindingReportFeaturesEXT"; + case StructureType::eDeviceAddressBindingCallbackDataEXT : return "DeviceAddressBindingCallbackDataEXT"; + case StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT : return "PhysicalDeviceDepthClipControlFeaturesEXT"; + case StructureType::ePipelineViewportDepthClipControlCreateInfoEXT : return "PipelineViewportDepthClipControlCreateInfoEXT"; + case StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT: return "PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT"; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + case StructureType::eImportMemoryZirconHandleInfoFUCHSIA : return "ImportMemoryZirconHandleInfoFUCHSIA"; + case StructureType::eMemoryZirconHandlePropertiesFUCHSIA : return "MemoryZirconHandlePropertiesFUCHSIA"; + case StructureType::eMemoryGetZirconHandleInfoFUCHSIA : return "MemoryGetZirconHandleInfoFUCHSIA"; + case StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA : return "ImportSemaphoreZirconHandleInfoFUCHSIA"; + case StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA : return "SemaphoreGetZirconHandleInfoFUCHSIA"; + case StructureType::eBufferCollectionCreateInfoFUCHSIA : return "BufferCollectionCreateInfoFUCHSIA"; + case StructureType::eImportMemoryBufferCollectionFUCHSIA : return "ImportMemoryBufferCollectionFUCHSIA"; + case StructureType::eBufferCollectionImageCreateInfoFUCHSIA : return "BufferCollectionImageCreateInfoFUCHSIA"; + case StructureType::eBufferCollectionPropertiesFUCHSIA : return "BufferCollectionPropertiesFUCHSIA"; + case StructureType::eBufferConstraintsInfoFUCHSIA : return "BufferConstraintsInfoFUCHSIA"; + case StructureType::eBufferCollectionBufferCreateInfoFUCHSIA: return "BufferCollectionBufferCreateInfoFUCHSIA"; + case StructureType::eImageConstraintsInfoFUCHSIA : return "ImageConstraintsInfoFUCHSIA"; + case StructureType::eImageFormatConstraintsInfoFUCHSIA : return "ImageFormatConstraintsInfoFUCHSIA"; + case StructureType::eSysmemColorSpaceFUCHSIA : return "SysmemColorSpaceFUCHSIA"; + case StructureType::eBufferCollectionConstraintsInfoFUCHSIA : return "BufferCollectionConstraintsInfoFUCHSIA"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + case StructureType::eSubpassShadingPipelineCreateInfoHUAWEI : return "SubpassShadingPipelineCreateInfoHUAWEI"; + case StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI : return "PhysicalDeviceSubpassShadingFeaturesHUAWEI"; + case StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI : return "PhysicalDeviceSubpassShadingPropertiesHUAWEI"; + case StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI : return "PhysicalDeviceInvocationMaskFeaturesHUAWEI"; + case StructureType::eMemoryGetRemoteAddressInfoNV : return "MemoryGetRemoteAddressInfoNV"; + case StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV : return "PhysicalDeviceExternalMemoryRdmaFeaturesNV"; + case StructureType::ePipelinePropertiesIdentifierEXT : return "PipelinePropertiesIdentifierEXT"; + case StructureType::ePhysicalDevicePipelinePropertiesFeaturesEXT : return "PhysicalDevicePipelinePropertiesFeaturesEXT"; + case StructureType::ePhysicalDeviceFrameBoundaryFeaturesEXT : return "PhysicalDeviceFrameBoundaryFeaturesEXT"; + case StructureType::eFrameBoundaryEXT : return "FrameBoundaryEXT"; + case StructureType::ePhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT: return "PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT"; + case StructureType::eSubpassResolvePerformanceQueryEXT : return "SubpassResolvePerformanceQueryEXT"; + case StructureType::eMultisampledRenderToSingleSampledInfoEXT : return "MultisampledRenderToSingleSampledInfoEXT"; + case StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT : return "PhysicalDeviceExtendedDynamicState2FeaturesEXT"; +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + case StructureType::eScreenSurfaceCreateInfoQNX: return "ScreenSurfaceCreateInfoQNX"; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + case StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT : return "PhysicalDeviceColorWriteEnableFeaturesEXT"; + case StructureType::ePipelineColorWriteCreateInfoEXT : return "PipelineColorWriteCreateInfoEXT"; + case StructureType::ePhysicalDevicePrimitivesGeneratedQueryFeaturesEXT: return "PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT"; + case StructureType::ePhysicalDeviceRayTracingMaintenance1FeaturesKHR : return "PhysicalDeviceRayTracingMaintenance1FeaturesKHR"; + case StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT : return "PhysicalDeviceImageViewMinLodFeaturesEXT"; + case StructureType::eImageViewMinLodCreateInfoEXT : return "ImageViewMinLodCreateInfoEXT"; + case StructureType::ePhysicalDeviceMultiDrawFeaturesEXT : return "PhysicalDeviceMultiDrawFeaturesEXT"; + case StructureType::ePhysicalDeviceMultiDrawPropertiesEXT : return "PhysicalDeviceMultiDrawPropertiesEXT"; + case StructureType::ePhysicalDeviceImage2DViewOf3DFeaturesEXT : return "PhysicalDeviceImage2DViewOf3DFeaturesEXT"; + case StructureType::ePhysicalDeviceShaderTileImageFeaturesEXT : return "PhysicalDeviceShaderTileImageFeaturesEXT"; + case StructureType::ePhysicalDeviceShaderTileImagePropertiesEXT : return "PhysicalDeviceShaderTileImagePropertiesEXT"; + case StructureType::eMicromapBuildInfoEXT : return "MicromapBuildInfoEXT"; + case StructureType::eMicromapVersionInfoEXT : return "MicromapVersionInfoEXT"; + case StructureType::eCopyMicromapInfoEXT : return "CopyMicromapInfoEXT"; + case StructureType::eCopyMicromapToMemoryInfoEXT : return "CopyMicromapToMemoryInfoEXT"; + case StructureType::eCopyMemoryToMicromapInfoEXT : return "CopyMemoryToMicromapInfoEXT"; + case StructureType::ePhysicalDeviceOpacityMicromapFeaturesEXT : return "PhysicalDeviceOpacityMicromapFeaturesEXT"; + case StructureType::ePhysicalDeviceOpacityMicromapPropertiesEXT : return "PhysicalDeviceOpacityMicromapPropertiesEXT"; + case StructureType::eMicromapCreateInfoEXT : return "MicromapCreateInfoEXT"; + case StructureType::eMicromapBuildSizesInfoEXT : return "MicromapBuildSizesInfoEXT"; + case StructureType::eAccelerationStructureTrianglesOpacityMicromapEXT : return "AccelerationStructureTrianglesOpacityMicromapEXT"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case StructureType::ePhysicalDeviceDisplacementMicromapFeaturesNV : return "PhysicalDeviceDisplacementMicromapFeaturesNV"; + case StructureType::ePhysicalDeviceDisplacementMicromapPropertiesNV : return "PhysicalDeviceDisplacementMicromapPropertiesNV"; + case StructureType::eAccelerationStructureTrianglesDisplacementMicromapNV: return "AccelerationStructureTrianglesDisplacementMicromapNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case StructureType::ePhysicalDeviceClusterCullingShaderFeaturesHUAWEI : return "PhysicalDeviceClusterCullingShaderFeaturesHUAWEI"; + case StructureType::ePhysicalDeviceClusterCullingShaderPropertiesHUAWEI : return "PhysicalDeviceClusterCullingShaderPropertiesHUAWEI"; + case StructureType::ePhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI : return "PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI"; + case StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT : return "PhysicalDeviceBorderColorSwizzleFeaturesEXT"; + case StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT : return "SamplerBorderColorComponentMappingCreateInfoEXT"; + case StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT : return "PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT"; + case StructureType::ePhysicalDeviceShaderCorePropertiesARM : return "PhysicalDeviceShaderCorePropertiesARM"; + case StructureType::eDeviceQueueShaderCoreControlCreateInfoARM : return "DeviceQueueShaderCoreControlCreateInfoARM"; + case StructureType::ePhysicalDeviceSchedulingControlsFeaturesARM : return "PhysicalDeviceSchedulingControlsFeaturesARM"; + case StructureType::ePhysicalDeviceSchedulingControlsPropertiesARM : return "PhysicalDeviceSchedulingControlsPropertiesARM"; + case StructureType::ePhysicalDeviceImageSlicedViewOf3DFeaturesEXT : return "PhysicalDeviceImageSlicedViewOf3DFeaturesEXT"; + case StructureType::eImageViewSlicedCreateInfoEXT : return "ImageViewSlicedCreateInfoEXT"; + case StructureType::ePhysicalDeviceDescriptorSetHostMappingFeaturesVALVE : return "PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE"; + case StructureType::eDescriptorSetBindingReferenceVALVE : return "DescriptorSetBindingReferenceVALVE"; + case StructureType::eDescriptorSetLayoutHostMappingInfoVALVE : return "DescriptorSetLayoutHostMappingInfoVALVE"; + case StructureType::ePhysicalDeviceNonSeamlessCubeMapFeaturesEXT : return "PhysicalDeviceNonSeamlessCubeMapFeaturesEXT"; + case StructureType::ePhysicalDeviceRenderPassStripedFeaturesARM : return "PhysicalDeviceRenderPassStripedFeaturesARM"; + case StructureType::ePhysicalDeviceRenderPassStripedPropertiesARM : return "PhysicalDeviceRenderPassStripedPropertiesARM"; + case StructureType::eRenderPassStripeBeginInfoARM : return "RenderPassStripeBeginInfoARM"; + case StructureType::eRenderPassStripeInfoARM : return "RenderPassStripeInfoARM"; + case StructureType::eRenderPassStripeSubmitInfoARM : return "RenderPassStripeSubmitInfoARM"; + case StructureType::ePhysicalDeviceCopyMemoryIndirectFeaturesNV : return "PhysicalDeviceCopyMemoryIndirectFeaturesNV"; + case StructureType::ePhysicalDeviceCopyMemoryIndirectPropertiesNV : return "PhysicalDeviceCopyMemoryIndirectPropertiesNV"; + case StructureType::ePhysicalDeviceMemoryDecompressionFeaturesNV : return "PhysicalDeviceMemoryDecompressionFeaturesNV"; + case StructureType::ePhysicalDeviceMemoryDecompressionPropertiesNV : return "PhysicalDeviceMemoryDecompressionPropertiesNV"; + case StructureType::ePhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV : return "PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV"; + case StructureType::eComputePipelineIndirectBufferInfoNV : return "ComputePipelineIndirectBufferInfoNV"; + case StructureType::ePipelineIndirectDeviceAddressInfoNV : return "PipelineIndirectDeviceAddressInfoNV"; + case StructureType::ePhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV : return "PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV"; + case StructureType::eAccelerationStructureGeometryLinearSweptSpheresDataNV : return "AccelerationStructureGeometryLinearSweptSpheresDataNV"; + case StructureType::eAccelerationStructureGeometrySpheresDataNV : return "AccelerationStructureGeometrySpheresDataNV"; + case StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV : return "PhysicalDeviceLinearColorAttachmentFeaturesNV"; + case StructureType::ePhysicalDeviceShaderMaximalReconvergenceFeaturesKHR : return "PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR"; + case StructureType::ePhysicalDeviceImageCompressionControlSwapchainFeaturesEXT : return "PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT"; + case StructureType::ePhysicalDeviceImageProcessingFeaturesQCOM : return "PhysicalDeviceImageProcessingFeaturesQCOM"; + case StructureType::ePhysicalDeviceImageProcessingPropertiesQCOM : return "PhysicalDeviceImageProcessingPropertiesQCOM"; + case StructureType::eImageViewSampleWeightCreateInfoQCOM : return "ImageViewSampleWeightCreateInfoQCOM"; + case StructureType::ePhysicalDeviceNestedCommandBufferFeaturesEXT : return "PhysicalDeviceNestedCommandBufferFeaturesEXT"; + case StructureType::ePhysicalDeviceNestedCommandBufferPropertiesEXT : return "PhysicalDeviceNestedCommandBufferPropertiesEXT"; + case StructureType::eExternalMemoryAcquireUnmodifiedEXT : return "ExternalMemoryAcquireUnmodifiedEXT"; + case StructureType::ePhysicalDeviceExtendedDynamicState3FeaturesEXT : return "PhysicalDeviceExtendedDynamicState3FeaturesEXT"; + case StructureType::ePhysicalDeviceExtendedDynamicState3PropertiesEXT : return "PhysicalDeviceExtendedDynamicState3PropertiesEXT"; + case StructureType::ePhysicalDeviceSubpassMergeFeedbackFeaturesEXT : return "PhysicalDeviceSubpassMergeFeedbackFeaturesEXT"; + case StructureType::eRenderPassCreationControlEXT : return "RenderPassCreationControlEXT"; + case StructureType::eRenderPassCreationFeedbackCreateInfoEXT : return "RenderPassCreationFeedbackCreateInfoEXT"; + case StructureType::eRenderPassSubpassFeedbackCreateInfoEXT : return "RenderPassSubpassFeedbackCreateInfoEXT"; + case StructureType::eDirectDriverLoadingInfoLUNARG : return "DirectDriverLoadingInfoLUNARG"; + case StructureType::eDirectDriverLoadingListLUNARG : return "DirectDriverLoadingListLUNARG"; + case StructureType::eTensorCreateInfoARM : return "TensorCreateInfoARM"; + case StructureType::eTensorViewCreateInfoARM : return "TensorViewCreateInfoARM"; + case StructureType::eBindTensorMemoryInfoARM : return "BindTensorMemoryInfoARM"; + case StructureType::eWriteDescriptorSetTensorARM : return "WriteDescriptorSetTensorARM"; + case StructureType::ePhysicalDeviceTensorPropertiesARM : return "PhysicalDeviceTensorPropertiesARM"; + case StructureType::eTensorFormatPropertiesARM : return "TensorFormatPropertiesARM"; + case StructureType::eTensorDescriptionARM : return "TensorDescriptionARM"; + case StructureType::eTensorMemoryRequirementsInfoARM : return "TensorMemoryRequirementsInfoARM"; + case StructureType::eTensorMemoryBarrierARM : return "TensorMemoryBarrierARM"; + case StructureType::ePhysicalDeviceTensorFeaturesARM : return "PhysicalDeviceTensorFeaturesARM"; + case StructureType::eDeviceTensorMemoryRequirementsARM : return "DeviceTensorMemoryRequirementsARM"; + case StructureType::eCopyTensorInfoARM : return "CopyTensorInfoARM"; + case StructureType::eTensorCopyARM : return "TensorCopyARM"; + case StructureType::eTensorDependencyInfoARM : return "TensorDependencyInfoARM"; + case StructureType::eMemoryDedicatedAllocateInfoTensorARM : return "MemoryDedicatedAllocateInfoTensorARM"; + case StructureType::ePhysicalDeviceExternalTensorInfoARM : return "PhysicalDeviceExternalTensorInfoARM"; + case StructureType::eExternalTensorPropertiesARM : return "ExternalTensorPropertiesARM"; + case StructureType::eExternalMemoryTensorCreateInfoARM : return "ExternalMemoryTensorCreateInfoARM"; + case StructureType::ePhysicalDeviceDescriptorBufferTensorFeaturesARM : return "PhysicalDeviceDescriptorBufferTensorFeaturesARM"; + case StructureType::ePhysicalDeviceDescriptorBufferTensorPropertiesARM : return "PhysicalDeviceDescriptorBufferTensorPropertiesARM"; + case StructureType::eDescriptorGetTensorInfoARM : return "DescriptorGetTensorInfoARM"; + case StructureType::eTensorCaptureDescriptorDataInfoARM : return "TensorCaptureDescriptorDataInfoARM"; + case StructureType::eTensorViewCaptureDescriptorDataInfoARM : return "TensorViewCaptureDescriptorDataInfoARM"; + case StructureType::eFrameBoundaryTensorsARM : return "FrameBoundaryTensorsARM"; + case StructureType::ePhysicalDeviceShaderModuleIdentifierFeaturesEXT : return "PhysicalDeviceShaderModuleIdentifierFeaturesEXT"; + case StructureType::ePhysicalDeviceShaderModuleIdentifierPropertiesEXT : return "PhysicalDeviceShaderModuleIdentifierPropertiesEXT"; + case StructureType::ePipelineShaderStageModuleIdentifierCreateInfoEXT : return "PipelineShaderStageModuleIdentifierCreateInfoEXT"; + case StructureType::eShaderModuleIdentifierEXT : return "ShaderModuleIdentifierEXT"; + case StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT: return "PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT"; + case StructureType::ePhysicalDeviceOpticalFlowFeaturesNV : return "PhysicalDeviceOpticalFlowFeaturesNV"; + case StructureType::ePhysicalDeviceOpticalFlowPropertiesNV : return "PhysicalDeviceOpticalFlowPropertiesNV"; + case StructureType::eOpticalFlowImageFormatInfoNV : return "OpticalFlowImageFormatInfoNV"; + case StructureType::eOpticalFlowImageFormatPropertiesNV : return "OpticalFlowImageFormatPropertiesNV"; + case StructureType::eOpticalFlowSessionCreateInfoNV : return "OpticalFlowSessionCreateInfoNV"; + case StructureType::eOpticalFlowExecuteInfoNV : return "OpticalFlowExecuteInfoNV"; + case StructureType::eOpticalFlowSessionCreatePrivateDataInfoNV : return "OpticalFlowSessionCreatePrivateDataInfoNV"; + case StructureType::ePhysicalDeviceLegacyDitheringFeaturesEXT : return "PhysicalDeviceLegacyDitheringFeaturesEXT"; +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + case StructureType::ePhysicalDeviceExternalFormatResolveFeaturesANDROID : return "PhysicalDeviceExternalFormatResolveFeaturesANDROID"; + case StructureType::ePhysicalDeviceExternalFormatResolvePropertiesANDROID: return "PhysicalDeviceExternalFormatResolvePropertiesANDROID"; + case StructureType::eAndroidHardwareBufferFormatResolvePropertiesANDROID : return "AndroidHardwareBufferFormatResolvePropertiesANDROID"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + case StructureType::ePhysicalDeviceAntiLagFeaturesAMD : return "PhysicalDeviceAntiLagFeaturesAMD"; + case StructureType::eAntiLagDataAMD : return "AntiLagDataAMD"; + case StructureType::eAntiLagPresentationInfoAMD : return "AntiLagPresentationInfoAMD"; + case StructureType::eSurfaceCapabilitiesPresentId2KHR : return "SurfaceCapabilitiesPresentId2KHR"; + case StructureType::ePresentId2KHR : return "PresentId2KHR"; + case StructureType::ePhysicalDevicePresentId2FeaturesKHR : return "PhysicalDevicePresentId2FeaturesKHR"; + case StructureType::eSurfaceCapabilitiesPresentWait2KHR : return "SurfaceCapabilitiesPresentWait2KHR"; + case StructureType::ePhysicalDevicePresentWait2FeaturesKHR : return "PhysicalDevicePresentWait2FeaturesKHR"; + case StructureType::ePresentWait2InfoKHR : return "PresentWait2InfoKHR"; + case StructureType::ePhysicalDeviceRayTracingPositionFetchFeaturesKHR : return "PhysicalDeviceRayTracingPositionFetchFeaturesKHR"; + case StructureType::ePhysicalDeviceShaderObjectFeaturesEXT : return "PhysicalDeviceShaderObjectFeaturesEXT"; + case StructureType::ePhysicalDeviceShaderObjectPropertiesEXT : return "PhysicalDeviceShaderObjectPropertiesEXT"; + case StructureType::eShaderCreateInfoEXT : return "ShaderCreateInfoEXT"; + case StructureType::ePhysicalDevicePipelineBinaryFeaturesKHR : return "PhysicalDevicePipelineBinaryFeaturesKHR"; + case StructureType::ePipelineBinaryCreateInfoKHR : return "PipelineBinaryCreateInfoKHR"; + case StructureType::ePipelineBinaryInfoKHR : return "PipelineBinaryInfoKHR"; + case StructureType::ePipelineBinaryKeyKHR : return "PipelineBinaryKeyKHR"; + case StructureType::ePhysicalDevicePipelineBinaryPropertiesKHR : return "PhysicalDevicePipelineBinaryPropertiesKHR"; + case StructureType::eReleaseCapturedPipelineDataInfoKHR : return "ReleaseCapturedPipelineDataInfoKHR"; + case StructureType::ePipelineBinaryDataInfoKHR : return "PipelineBinaryDataInfoKHR"; + case StructureType::ePipelineCreateInfoKHR : return "PipelineCreateInfoKHR"; + case StructureType::eDevicePipelineBinaryInternalCacheControlKHR : return "DevicePipelineBinaryInternalCacheControlKHR"; + case StructureType::ePipelineBinaryHandlesInfoKHR : return "PipelineBinaryHandlesInfoKHR"; + case StructureType::ePhysicalDeviceTilePropertiesFeaturesQCOM : return "PhysicalDeviceTilePropertiesFeaturesQCOM"; + case StructureType::eTilePropertiesQCOM : return "TilePropertiesQCOM"; + case StructureType::ePhysicalDeviceAmigoProfilingFeaturesSEC : return "PhysicalDeviceAmigoProfilingFeaturesSEC"; + case StructureType::eAmigoProfilingSubmitInfoSEC : return "AmigoProfilingSubmitInfoSEC"; + case StructureType::eSurfacePresentModeKHR : return "SurfacePresentModeKHR"; + case StructureType::eSurfacePresentScalingCapabilitiesKHR : return "SurfacePresentScalingCapabilitiesKHR"; + case StructureType::eSurfacePresentModeCompatibilityKHR : return "SurfacePresentModeCompatibilityKHR"; + case StructureType::ePhysicalDeviceSwapchainMaintenance1FeaturesKHR : return "PhysicalDeviceSwapchainMaintenance1FeaturesKHR"; + case StructureType::eSwapchainPresentFenceInfoKHR : return "SwapchainPresentFenceInfoKHR"; + case StructureType::eSwapchainPresentModesCreateInfoKHR : return "SwapchainPresentModesCreateInfoKHR"; + case StructureType::eSwapchainPresentModeInfoKHR : return "SwapchainPresentModeInfoKHR"; + case StructureType::eSwapchainPresentScalingCreateInfoKHR : return "SwapchainPresentScalingCreateInfoKHR"; + case StructureType::eReleaseSwapchainImagesInfoKHR : return "ReleaseSwapchainImagesInfoKHR"; + case StructureType::ePhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM : return "PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM"; + case StructureType::ePhysicalDeviceRayTracingInvocationReorderFeaturesNV : return "PhysicalDeviceRayTracingInvocationReorderFeaturesNV"; + case StructureType::ePhysicalDeviceRayTracingInvocationReorderPropertiesNV : return "PhysicalDeviceRayTracingInvocationReorderPropertiesNV"; + case StructureType::ePhysicalDeviceCooperativeVectorFeaturesNV : return "PhysicalDeviceCooperativeVectorFeaturesNV"; + case StructureType::ePhysicalDeviceCooperativeVectorPropertiesNV : return "PhysicalDeviceCooperativeVectorPropertiesNV"; + case StructureType::eCooperativeVectorPropertiesNV : return "CooperativeVectorPropertiesNV"; + case StructureType::eConvertCooperativeVectorMatrixInfoNV : return "ConvertCooperativeVectorMatrixInfoNV"; + case StructureType::ePhysicalDeviceExtendedSparseAddressSpaceFeaturesNV : return "PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV"; + case StructureType::ePhysicalDeviceExtendedSparseAddressSpacePropertiesNV : return "PhysicalDeviceExtendedSparseAddressSpacePropertiesNV"; + case StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesEXT : return "PhysicalDeviceMutableDescriptorTypeFeaturesEXT"; + case StructureType::eMutableDescriptorTypeCreateInfoEXT : return "MutableDescriptorTypeCreateInfoEXT"; + case StructureType::ePhysicalDeviceLegacyVertexAttributesFeaturesEXT : return "PhysicalDeviceLegacyVertexAttributesFeaturesEXT"; + case StructureType::ePhysicalDeviceLegacyVertexAttributesPropertiesEXT : return "PhysicalDeviceLegacyVertexAttributesPropertiesEXT"; + case StructureType::eLayerSettingsCreateInfoEXT : return "LayerSettingsCreateInfoEXT"; + case StructureType::ePhysicalDeviceShaderCoreBuiltinsFeaturesARM : return "PhysicalDeviceShaderCoreBuiltinsFeaturesARM"; + case StructureType::ePhysicalDeviceShaderCoreBuiltinsPropertiesARM : return "PhysicalDeviceShaderCoreBuiltinsPropertiesARM"; + case StructureType::ePhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT : return "PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT"; + case StructureType::ePhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT : return "PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT"; + case StructureType::eLatencySleepModeInfoNV : return "LatencySleepModeInfoNV"; + case StructureType::eLatencySleepInfoNV : return "LatencySleepInfoNV"; + case StructureType::eSetLatencyMarkerInfoNV : return "SetLatencyMarkerInfoNV"; + case StructureType::eGetLatencyMarkerInfoNV : return "GetLatencyMarkerInfoNV"; + case StructureType::eLatencyTimingsFrameReportNV : return "LatencyTimingsFrameReportNV"; + case StructureType::eLatencySubmissionPresentIdNV : return "LatencySubmissionPresentIdNV"; + case StructureType::eOutOfBandQueueTypeInfoNV : return "OutOfBandQueueTypeInfoNV"; + case StructureType::eSwapchainLatencyCreateInfoNV : return "SwapchainLatencyCreateInfoNV"; + case StructureType::eLatencySurfaceCapabilitiesNV : return "LatencySurfaceCapabilitiesNV"; + case StructureType::ePhysicalDeviceCooperativeMatrixFeaturesKHR : return "PhysicalDeviceCooperativeMatrixFeaturesKHR"; + case StructureType::eCooperativeMatrixPropertiesKHR : return "CooperativeMatrixPropertiesKHR"; + case StructureType::ePhysicalDeviceCooperativeMatrixPropertiesKHR : return "PhysicalDeviceCooperativeMatrixPropertiesKHR"; + case StructureType::eDataGraphPipelineCreateInfoARM : return "DataGraphPipelineCreateInfoARM"; + case StructureType::eDataGraphPipelineSessionCreateInfoARM : return "DataGraphPipelineSessionCreateInfoARM"; + case StructureType::eDataGraphPipelineResourceInfoARM : return "DataGraphPipelineResourceInfoARM"; + case StructureType::eDataGraphPipelineConstantARM : return "DataGraphPipelineConstantARM"; + case StructureType::eDataGraphPipelineSessionMemoryRequirementsInfoARM : return "DataGraphPipelineSessionMemoryRequirementsInfoARM"; + case StructureType::eBindDataGraphPipelineSessionMemoryInfoARM : return "BindDataGraphPipelineSessionMemoryInfoARM"; + case StructureType::ePhysicalDeviceDataGraphFeaturesARM : return "PhysicalDeviceDataGraphFeaturesARM"; + case StructureType::eDataGraphPipelineShaderModuleCreateInfoARM : return "DataGraphPipelineShaderModuleCreateInfoARM"; + case StructureType::eDataGraphPipelinePropertyQueryResultARM : return "DataGraphPipelinePropertyQueryResultARM"; + case StructureType::eDataGraphPipelineInfoARM : return "DataGraphPipelineInfoARM"; + case StructureType::eDataGraphPipelineCompilerControlCreateInfoARM : return "DataGraphPipelineCompilerControlCreateInfoARM"; + case StructureType::eDataGraphPipelineSessionBindPointRequirementsInfoARM : return "DataGraphPipelineSessionBindPointRequirementsInfoARM"; + case StructureType::eDataGraphPipelineSessionBindPointRequirementARM : return "DataGraphPipelineSessionBindPointRequirementARM"; + case StructureType::eDataGraphPipelineIdentifierCreateInfoARM : return "DataGraphPipelineIdentifierCreateInfoARM"; + case StructureType::eDataGraphPipelineDispatchInfoARM : return "DataGraphPipelineDispatchInfoARM"; + case StructureType::eDataGraphProcessingEngineCreateInfoARM : return "DataGraphProcessingEngineCreateInfoARM"; + case StructureType::eQueueFamilyDataGraphProcessingEnginePropertiesARM : return "QueueFamilyDataGraphProcessingEnginePropertiesARM"; + case StructureType::eQueueFamilyDataGraphPropertiesARM : return "QueueFamilyDataGraphPropertiesARM"; + case StructureType::ePhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM : return "PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM"; + case StructureType::eDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM: return "DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM"; + case StructureType::ePhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM : return "PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM"; + case StructureType::eMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM : return "MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM"; + case StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesKHR : return "PhysicalDeviceComputeShaderDerivativesFeaturesKHR"; + case StructureType::ePhysicalDeviceComputeShaderDerivativesPropertiesKHR : return "PhysicalDeviceComputeShaderDerivativesPropertiesKHR"; + case StructureType::eVideoDecodeAv1CapabilitiesKHR : return "VideoDecodeAv1CapabilitiesKHR"; + case StructureType::eVideoDecodeAv1PictureInfoKHR : return "VideoDecodeAv1PictureInfoKHR"; + case StructureType::eVideoDecodeAv1ProfileInfoKHR : return "VideoDecodeAv1ProfileInfoKHR"; + case StructureType::eVideoDecodeAv1SessionParametersCreateInfoKHR : return "VideoDecodeAv1SessionParametersCreateInfoKHR"; + case StructureType::eVideoDecodeAv1DpbSlotInfoKHR : return "VideoDecodeAv1DpbSlotInfoKHR"; + case StructureType::eVideoEncodeAv1CapabilitiesKHR : return "VideoEncodeAv1CapabilitiesKHR"; + case StructureType::eVideoEncodeAv1SessionParametersCreateInfoKHR : return "VideoEncodeAv1SessionParametersCreateInfoKHR"; + case StructureType::eVideoEncodeAv1PictureInfoKHR : return "VideoEncodeAv1PictureInfoKHR"; + case StructureType::eVideoEncodeAv1DpbSlotInfoKHR : return "VideoEncodeAv1DpbSlotInfoKHR"; + case StructureType::ePhysicalDeviceVideoEncodeAv1FeaturesKHR : return "PhysicalDeviceVideoEncodeAv1FeaturesKHR"; + case StructureType::eVideoEncodeAv1ProfileInfoKHR : return "VideoEncodeAv1ProfileInfoKHR"; + case StructureType::eVideoEncodeAv1RateControlInfoKHR : return "VideoEncodeAv1RateControlInfoKHR"; + case StructureType::eVideoEncodeAv1RateControlLayerInfoKHR : return "VideoEncodeAv1RateControlLayerInfoKHR"; + case StructureType::eVideoEncodeAv1QualityLevelPropertiesKHR : return "VideoEncodeAv1QualityLevelPropertiesKHR"; + case StructureType::eVideoEncodeAv1SessionCreateInfoKHR : return "VideoEncodeAv1SessionCreateInfoKHR"; + case StructureType::eVideoEncodeAv1GopRemainingFrameInfoKHR : return "VideoEncodeAv1GopRemainingFrameInfoKHR"; + case StructureType::ePhysicalDeviceVideoDecodeVp9FeaturesKHR : return "PhysicalDeviceVideoDecodeVp9FeaturesKHR"; + case StructureType::eVideoDecodeVp9CapabilitiesKHR : return "VideoDecodeVp9CapabilitiesKHR"; + case StructureType::eVideoDecodeVp9PictureInfoKHR : return "VideoDecodeVp9PictureInfoKHR"; + case StructureType::eVideoDecodeVp9ProfileInfoKHR : return "VideoDecodeVp9ProfileInfoKHR"; + case StructureType::ePhysicalDeviceVideoMaintenance1FeaturesKHR : return "PhysicalDeviceVideoMaintenance1FeaturesKHR"; + case StructureType::eVideoInlineQueryInfoKHR : return "VideoInlineQueryInfoKHR"; + case StructureType::ePhysicalDevicePerStageDescriptorSetFeaturesNV : return "PhysicalDevicePerStageDescriptorSetFeaturesNV"; + case StructureType::ePhysicalDeviceImageProcessing2FeaturesQCOM : return "PhysicalDeviceImageProcessing2FeaturesQCOM"; + case StructureType::ePhysicalDeviceImageProcessing2PropertiesQCOM : return "PhysicalDeviceImageProcessing2PropertiesQCOM"; + case StructureType::eSamplerBlockMatchWindowCreateInfoQCOM : return "SamplerBlockMatchWindowCreateInfoQCOM"; + case StructureType::eSamplerCubicWeightsCreateInfoQCOM : return "SamplerCubicWeightsCreateInfoQCOM"; + case StructureType::ePhysicalDeviceCubicWeightsFeaturesQCOM : return "PhysicalDeviceCubicWeightsFeaturesQCOM"; + case StructureType::eBlitImageCubicWeightsInfoQCOM : return "BlitImageCubicWeightsInfoQCOM"; + case StructureType::ePhysicalDeviceYcbcrDegammaFeaturesQCOM : return "PhysicalDeviceYcbcrDegammaFeaturesQCOM"; + case StructureType::eSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM : return "SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM"; + case StructureType::ePhysicalDeviceCubicClampFeaturesQCOM : return "PhysicalDeviceCubicClampFeaturesQCOM"; + case StructureType::ePhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT : return "PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT"; + case StructureType::ePhysicalDeviceUnifiedImageLayoutsFeaturesKHR : return "PhysicalDeviceUnifiedImageLayoutsFeaturesKHR"; + case StructureType::eAttachmentFeedbackLoopInfoEXT : return "AttachmentFeedbackLoopInfoEXT"; +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + case StructureType::eScreenBufferPropertiesQNX : return "ScreenBufferPropertiesQNX"; + case StructureType::eScreenBufferFormatPropertiesQNX : return "ScreenBufferFormatPropertiesQNX"; + case StructureType::eImportScreenBufferInfoQNX : return "ImportScreenBufferInfoQNX"; + case StructureType::eExternalFormatQNX : return "ExternalFormatQNX"; + case StructureType::ePhysicalDeviceExternalMemoryScreenBufferFeaturesQNX: return "PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX"; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + case StructureType::ePhysicalDeviceLayeredDriverPropertiesMSFT : return "PhysicalDeviceLayeredDriverPropertiesMSFT"; + case StructureType::eCalibratedTimestampInfoKHR : return "CalibratedTimestampInfoKHR"; + case StructureType::eSetDescriptorBufferOffsetsInfoEXT : return "SetDescriptorBufferOffsetsInfoEXT"; + case StructureType::eBindDescriptorBufferEmbeddedSamplersInfoEXT : return "BindDescriptorBufferEmbeddedSamplersInfoEXT"; + case StructureType::ePhysicalDeviceDescriptorPoolOverallocationFeaturesNV : return "PhysicalDeviceDescriptorPoolOverallocationFeaturesNV"; + case StructureType::ePhysicalDeviceTileMemoryHeapFeaturesQCOM : return "PhysicalDeviceTileMemoryHeapFeaturesQCOM"; + case StructureType::ePhysicalDeviceTileMemoryHeapPropertiesQCOM : return "PhysicalDeviceTileMemoryHeapPropertiesQCOM"; + case StructureType::eTileMemoryRequirementsQCOM : return "TileMemoryRequirementsQCOM"; + case StructureType::eTileMemoryBindInfoQCOM : return "TileMemoryBindInfoQCOM"; + case StructureType::eTileMemorySizeInfoQCOM : return "TileMemorySizeInfoQCOM"; + case StructureType::eDisplaySurfaceStereoCreateInfoNV : return "DisplaySurfaceStereoCreateInfoNV"; + case StructureType::eDisplayModeStereoPropertiesNV : return "DisplayModeStereoPropertiesNV"; + case StructureType::eVideoEncodeIntraRefreshCapabilitiesKHR : return "VideoEncodeIntraRefreshCapabilitiesKHR"; + case StructureType::eVideoEncodeSessionIntraRefreshCreateInfoKHR : return "VideoEncodeSessionIntraRefreshCreateInfoKHR"; + case StructureType::eVideoEncodeIntraRefreshInfoKHR : return "VideoEncodeIntraRefreshInfoKHR"; + case StructureType::eVideoReferenceIntraRefreshInfoKHR : return "VideoReferenceIntraRefreshInfoKHR"; + case StructureType::ePhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR : return "PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR"; + case StructureType::eVideoEncodeQuantizationMapCapabilitiesKHR : return "VideoEncodeQuantizationMapCapabilitiesKHR"; + case StructureType::eVideoFormatQuantizationMapPropertiesKHR : return "VideoFormatQuantizationMapPropertiesKHR"; + case StructureType::eVideoEncodeQuantizationMapInfoKHR : return "VideoEncodeQuantizationMapInfoKHR"; + case StructureType::eVideoEncodeQuantizationMapSessionParametersCreateInfoKHR : return "VideoEncodeQuantizationMapSessionParametersCreateInfoKHR"; + case StructureType::ePhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR : return "PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR"; + case StructureType::eVideoEncodeH264QuantizationMapCapabilitiesKHR : return "VideoEncodeH264QuantizationMapCapabilitiesKHR"; + case StructureType::eVideoEncodeH265QuantizationMapCapabilitiesKHR : return "VideoEncodeH265QuantizationMapCapabilitiesKHR"; + case StructureType::eVideoFormatH265QuantizationMapPropertiesKHR : return "VideoFormatH265QuantizationMapPropertiesKHR"; + case StructureType::eVideoEncodeAv1QuantizationMapCapabilitiesKHR : return "VideoEncodeAv1QuantizationMapCapabilitiesKHR"; + case StructureType::eVideoFormatAv1QuantizationMapPropertiesKHR : return "VideoFormatAv1QuantizationMapPropertiesKHR"; + case StructureType::ePhysicalDeviceRawAccessChainsFeaturesNV : return "PhysicalDeviceRawAccessChainsFeaturesNV"; + case StructureType::eExternalComputeQueueDeviceCreateInfoNV : return "ExternalComputeQueueDeviceCreateInfoNV"; + case StructureType::eExternalComputeQueueCreateInfoNV : return "ExternalComputeQueueCreateInfoNV"; + case StructureType::eExternalComputeQueueDataParamsNV : return "ExternalComputeQueueDataParamsNV"; + case StructureType::ePhysicalDeviceExternalComputeQueuePropertiesNV : return "PhysicalDeviceExternalComputeQueuePropertiesNV"; + case StructureType::ePhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR : return "PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR"; + case StructureType::ePhysicalDeviceCommandBufferInheritanceFeaturesNV : return "PhysicalDeviceCommandBufferInheritanceFeaturesNV"; + case StructureType::ePhysicalDeviceMaintenance7FeaturesKHR : return "PhysicalDeviceMaintenance7FeaturesKHR"; + case StructureType::ePhysicalDeviceMaintenance7PropertiesKHR : return "PhysicalDeviceMaintenance7PropertiesKHR"; + case StructureType::ePhysicalDeviceLayeredApiPropertiesListKHR : return "PhysicalDeviceLayeredApiPropertiesListKHR"; + case StructureType::ePhysicalDeviceLayeredApiPropertiesKHR : return "PhysicalDeviceLayeredApiPropertiesKHR"; + case StructureType::ePhysicalDeviceLayeredApiVulkanPropertiesKHR : return "PhysicalDeviceLayeredApiVulkanPropertiesKHR"; + case StructureType::ePhysicalDeviceShaderAtomicFloat16VectorFeaturesNV : return "PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV"; + case StructureType::ePhysicalDeviceShaderReplicatedCompositesFeaturesEXT : return "PhysicalDeviceShaderReplicatedCompositesFeaturesEXT"; + case StructureType::ePhysicalDeviceShaderFloat8FeaturesEXT : return "PhysicalDeviceShaderFloat8FeaturesEXT"; + case StructureType::ePhysicalDeviceRayTracingValidationFeaturesNV : return "PhysicalDeviceRayTracingValidationFeaturesNV"; + case StructureType::ePhysicalDeviceClusterAccelerationStructureFeaturesNV : return "PhysicalDeviceClusterAccelerationStructureFeaturesNV"; + case StructureType::ePhysicalDeviceClusterAccelerationStructurePropertiesNV : return "PhysicalDeviceClusterAccelerationStructurePropertiesNV"; + case StructureType::eClusterAccelerationStructureClustersBottomLevelInputNV : return "ClusterAccelerationStructureClustersBottomLevelInputNV"; + case StructureType::eClusterAccelerationStructureTriangleClusterInputNV : return "ClusterAccelerationStructureTriangleClusterInputNV"; + case StructureType::eClusterAccelerationStructureMoveObjectsInputNV : return "ClusterAccelerationStructureMoveObjectsInputNV"; + case StructureType::eClusterAccelerationStructureInputInfoNV : return "ClusterAccelerationStructureInputInfoNV"; + case StructureType::eClusterAccelerationStructureCommandsInfoNV : return "ClusterAccelerationStructureCommandsInfoNV"; + case StructureType::eRayTracingPipelineClusterAccelerationStructureCreateInfoNV: return "RayTracingPipelineClusterAccelerationStructureCreateInfoNV"; + case StructureType::ePhysicalDevicePartitionedAccelerationStructureFeaturesNV : return "PhysicalDevicePartitionedAccelerationStructureFeaturesNV"; + case StructureType::ePhysicalDevicePartitionedAccelerationStructurePropertiesNV: return "PhysicalDevicePartitionedAccelerationStructurePropertiesNV"; + case StructureType::eWriteDescriptorSetPartitionedAccelerationStructureNV : return "WriteDescriptorSetPartitionedAccelerationStructureNV"; + case StructureType::ePartitionedAccelerationStructureInstancesInputNV : return "PartitionedAccelerationStructureInstancesInputNV"; + case StructureType::eBuildPartitionedAccelerationStructureInfoNV : return "BuildPartitionedAccelerationStructureInfoNV"; + case StructureType::ePartitionedAccelerationStructureFlagsNV : return "PartitionedAccelerationStructureFlagsNV"; + case StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesEXT : return "PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT"; + case StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesEXT : return "PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT"; + case StructureType::eGeneratedCommandsMemoryRequirementsInfoEXT : return "GeneratedCommandsMemoryRequirementsInfoEXT"; + case StructureType::eIndirectExecutionSetCreateInfoEXT : return "IndirectExecutionSetCreateInfoEXT"; + case StructureType::eGeneratedCommandsInfoEXT : return "GeneratedCommandsInfoEXT"; + case StructureType::eIndirectCommandsLayoutCreateInfoEXT : return "IndirectCommandsLayoutCreateInfoEXT"; + case StructureType::eIndirectCommandsLayoutTokenEXT : return "IndirectCommandsLayoutTokenEXT"; + case StructureType::eWriteIndirectExecutionSetPipelineEXT : return "WriteIndirectExecutionSetPipelineEXT"; + case StructureType::eWriteIndirectExecutionSetShaderEXT : return "WriteIndirectExecutionSetShaderEXT"; + case StructureType::eIndirectExecutionSetPipelineInfoEXT : return "IndirectExecutionSetPipelineInfoEXT"; + case StructureType::eIndirectExecutionSetShaderInfoEXT : return "IndirectExecutionSetShaderInfoEXT"; + case StructureType::eIndirectExecutionSetShaderLayoutInfoEXT : return "IndirectExecutionSetShaderLayoutInfoEXT"; + case StructureType::eGeneratedCommandsPipelineInfoEXT : return "GeneratedCommandsPipelineInfoEXT"; + case StructureType::eGeneratedCommandsShaderInfoEXT : return "GeneratedCommandsShaderInfoEXT"; + case StructureType::ePhysicalDeviceMaintenance8FeaturesKHR : return "PhysicalDeviceMaintenance8FeaturesKHR"; + case StructureType::eMemoryBarrierAccessFlags3KHR : return "MemoryBarrierAccessFlags3KHR"; + case StructureType::ePhysicalDeviceImageAlignmentControlFeaturesMESA : return "PhysicalDeviceImageAlignmentControlFeaturesMESA"; + case StructureType::ePhysicalDeviceImageAlignmentControlPropertiesMESA : return "PhysicalDeviceImageAlignmentControlPropertiesMESA"; + case StructureType::eImageAlignmentControlCreateInfoMESA : return "ImageAlignmentControlCreateInfoMESA"; + case StructureType::ePhysicalDeviceDepthClampControlFeaturesEXT : return "PhysicalDeviceDepthClampControlFeaturesEXT"; + case StructureType::ePipelineViewportDepthClampControlCreateInfoEXT : return "PipelineViewportDepthClampControlCreateInfoEXT"; + case StructureType::ePhysicalDeviceMaintenance9FeaturesKHR : return "PhysicalDeviceMaintenance9FeaturesKHR"; + case StructureType::ePhysicalDeviceMaintenance9PropertiesKHR : return "PhysicalDeviceMaintenance9PropertiesKHR"; + case StructureType::eQueueFamilyOwnershipTransferPropertiesKHR : return "QueueFamilyOwnershipTransferPropertiesKHR"; + case StructureType::ePhysicalDeviceVideoMaintenance2FeaturesKHR : return "PhysicalDeviceVideoMaintenance2FeaturesKHR"; + case StructureType::eVideoDecodeH264InlineSessionParametersInfoKHR : return "VideoDecodeH264InlineSessionParametersInfoKHR"; + case StructureType::eVideoDecodeH265InlineSessionParametersInfoKHR : return "VideoDecodeH265InlineSessionParametersInfoKHR"; + case StructureType::eVideoDecodeAv1InlineSessionParametersInfoKHR : return "VideoDecodeAv1InlineSessionParametersInfoKHR"; +#if defined( VK_USE_PLATFORM_OHOS ) + case StructureType::eOhSurfaceCreateInfoOHOS: return "OhSurfaceCreateInfoOHOS"; +#endif /*VK_USE_PLATFORM_OHOS*/ + case StructureType::ePhysicalDeviceHdrVividFeaturesHUAWEI : return "PhysicalDeviceHdrVividFeaturesHUAWEI"; + case StructureType::eHdrVividDynamicMetadataHUAWEI : return "HdrVividDynamicMetadataHUAWEI"; + case StructureType::ePhysicalDeviceCooperativeMatrix2FeaturesNV : return "PhysicalDeviceCooperativeMatrix2FeaturesNV"; + case StructureType::eCooperativeMatrixFlexibleDimensionsPropertiesNV : return "CooperativeMatrixFlexibleDimensionsPropertiesNV"; + case StructureType::ePhysicalDeviceCooperativeMatrix2PropertiesNV : return "PhysicalDeviceCooperativeMatrix2PropertiesNV"; + case StructureType::ePhysicalDevicePipelineOpacityMicromapFeaturesARM: return "PhysicalDevicePipelineOpacityMicromapFeaturesARM"; +#if defined( VK_USE_PLATFORM_METAL_EXT ) + case StructureType::eImportMemoryMetalHandleInfoEXT: return "ImportMemoryMetalHandleInfoEXT"; + case StructureType::eMemoryMetalHandlePropertiesEXT: return "MemoryMetalHandlePropertiesEXT"; + case StructureType::eMemoryGetMetalHandleInfoEXT : return "MemoryGetMetalHandleInfoEXT"; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + case StructureType::ePhysicalDeviceDepthClampZeroOneFeaturesKHR : return "PhysicalDeviceDepthClampZeroOneFeaturesKHR"; + case StructureType::ePhysicalDeviceVertexAttributeRobustnessFeaturesEXT : return "PhysicalDeviceVertexAttributeRobustnessFeaturesEXT"; + case StructureType::ePhysicalDeviceFormatPackFeaturesARM : return "PhysicalDeviceFormatPackFeaturesARM"; + case StructureType::ePhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE : return "PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE"; + case StructureType::ePhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE: return "PhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE"; + case StructureType::ePipelineFragmentDensityMapLayeredCreateInfoVALVE : return "PipelineFragmentDensityMapLayeredCreateInfoVALVE"; + case StructureType::ePhysicalDeviceRobustness2FeaturesKHR : return "PhysicalDeviceRobustness2FeaturesKHR"; + case StructureType::ePhysicalDeviceRobustness2PropertiesKHR : return "PhysicalDeviceRobustness2PropertiesKHR"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case StructureType::eSetPresentConfigNV : return "SetPresentConfigNV"; + case StructureType::ePhysicalDevicePresentMeteringFeaturesNV: return "PhysicalDevicePresentMeteringFeaturesNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesEXT : return "PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT"; + case StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesEXT : return "PhysicalDeviceFragmentDensityMapOffsetPropertiesEXT"; + case StructureType::eRenderPassFragmentDensityMapOffsetEndInfoEXT : return "RenderPassFragmentDensityMapOffsetEndInfoEXT"; + case StructureType::eRenderingEndInfoEXT : return "RenderingEndInfoEXT"; + case StructureType::ePhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT : return "PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT"; + case StructureType::ePhysicalDevicePresentModeFifoLatestReadyFeaturesKHR : return "PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR"; + case StructureType::ePhysicalDevicePipelineCacheIncrementalModeFeaturesSEC: return "PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCacheHeaderVersion value ) + { + switch ( value ) + { + case PipelineCacheHeaderVersion::eOne: return "One"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ObjectType value ) + { + switch ( value ) + { + case ObjectType::eUnknown : return "Unknown"; + case ObjectType::eInstance : return "Instance"; + case ObjectType::ePhysicalDevice : return "PhysicalDevice"; + case ObjectType::eDevice : return "Device"; + case ObjectType::eQueue : return "Queue"; + case ObjectType::eSemaphore : return "Semaphore"; + case ObjectType::eCommandBuffer : return "CommandBuffer"; + case ObjectType::eFence : return "Fence"; + case ObjectType::eDeviceMemory : return "DeviceMemory"; + case ObjectType::eBuffer : return "Buffer"; + case ObjectType::eImage : return "Image"; + case ObjectType::eEvent : return "Event"; + case ObjectType::eQueryPool : return "QueryPool"; + case ObjectType::eBufferView : return "BufferView"; + case ObjectType::eImageView : return "ImageView"; + case ObjectType::eShaderModule : return "ShaderModule"; + case ObjectType::ePipelineCache : return "PipelineCache"; + case ObjectType::ePipelineLayout : return "PipelineLayout"; + case ObjectType::eRenderPass : return "RenderPass"; + case ObjectType::ePipeline : return "Pipeline"; + case ObjectType::eDescriptorSetLayout : return "DescriptorSetLayout"; + case ObjectType::eSampler : return "Sampler"; + case ObjectType::eDescriptorPool : return "DescriptorPool"; + case ObjectType::eDescriptorSet : return "DescriptorSet"; + case ObjectType::eFramebuffer : return "Framebuffer"; + case ObjectType::eCommandPool : return "CommandPool"; + case ObjectType::eSamplerYcbcrConversion : return "SamplerYcbcrConversion"; + case ObjectType::eDescriptorUpdateTemplate : return "DescriptorUpdateTemplate"; + case ObjectType::ePrivateDataSlot : return "PrivateDataSlot"; + case ObjectType::eSurfaceKHR : return "SurfaceKHR"; + case ObjectType::eSwapchainKHR : return "SwapchainKHR"; + case ObjectType::eDisplayKHR : return "DisplayKHR"; + case ObjectType::eDisplayModeKHR : return "DisplayModeKHR"; + case ObjectType::eDebugReportCallbackEXT : return "DebugReportCallbackEXT"; + case ObjectType::eVideoSessionKHR : return "VideoSessionKHR"; + case ObjectType::eVideoSessionParametersKHR : return "VideoSessionParametersKHR"; + case ObjectType::eCuModuleNVX : return "CuModuleNVX"; + case ObjectType::eCuFunctionNVX : return "CuFunctionNVX"; + case ObjectType::eDebugUtilsMessengerEXT : return "DebugUtilsMessengerEXT"; + case ObjectType::eAccelerationStructureKHR : return "AccelerationStructureKHR"; + case ObjectType::eValidationCacheEXT : return "ValidationCacheEXT"; + case ObjectType::eAccelerationStructureNV : return "AccelerationStructureNV"; + case ObjectType::ePerformanceConfigurationINTEL: return "PerformanceConfigurationINTEL"; + case ObjectType::eDeferredOperationKHR : return "DeferredOperationKHR"; + case ObjectType::eIndirectCommandsLayoutNV : return "IndirectCommandsLayoutNV"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case ObjectType::eCudaModuleNV : return "CudaModuleNV"; + case ObjectType::eCudaFunctionNV: return "CudaFunctionNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ +#if defined( VK_USE_PLATFORM_FUCHSIA ) + case ObjectType::eBufferCollectionFUCHSIA: return "BufferCollectionFUCHSIA"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + case ObjectType::eMicromapEXT : return "MicromapEXT"; + case ObjectType::eTensorARM : return "TensorARM"; + case ObjectType::eTensorViewARM : return "TensorViewARM"; + case ObjectType::eOpticalFlowSessionNV : return "OpticalFlowSessionNV"; + case ObjectType::eShaderEXT : return "ShaderEXT"; + case ObjectType::ePipelineBinaryKHR : return "PipelineBinaryKHR"; + case ObjectType::eDataGraphPipelineSessionARM: return "DataGraphPipelineSessionARM"; + case ObjectType::eExternalComputeQueueNV : return "ExternalComputeQueueNV"; + case ObjectType::eIndirectCommandsLayoutEXT : return "IndirectCommandsLayoutEXT"; + case ObjectType::eIndirectExecutionSetEXT : return "IndirectExecutionSetEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VendorId value ) + { + switch ( value ) + { + case VendorId::eKhronos : return "Khronos"; + case VendorId::eVIV : return "VIV"; + case VendorId::eVSI : return "VSI"; + case VendorId::eKazan : return "Kazan"; + case VendorId::eCodeplay: return "Codeplay"; + case VendorId::eMESA : return "MESA"; + case VendorId::ePocl : return "Pocl"; + case VendorId::eMobileye: return "Mobileye"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( Format value ) + { + switch ( value ) + { + case Format::eUndefined : return "Undefined"; + case Format::eR4G4UnormPack8 : return "R4G4UnormPack8"; + case Format::eR4G4B4A4UnormPack16 : return "R4G4B4A4UnormPack16"; + case Format::eB4G4R4A4UnormPack16 : return "B4G4R4A4UnormPack16"; + case Format::eR5G6B5UnormPack16 : return "R5G6B5UnormPack16"; + case Format::eB5G6R5UnormPack16 : return "B5G6R5UnormPack16"; + case Format::eR5G5B5A1UnormPack16 : return "R5G5B5A1UnormPack16"; + case Format::eB5G5R5A1UnormPack16 : return "B5G5R5A1UnormPack16"; + case Format::eA1R5G5B5UnormPack16 : return "A1R5G5B5UnormPack16"; + case Format::eR8Unorm : return "R8Unorm"; + case Format::eR8Snorm : return "R8Snorm"; + case Format::eR8Uscaled : return "R8Uscaled"; + case Format::eR8Sscaled : return "R8Sscaled"; + case Format::eR8Uint : return "R8Uint"; + case Format::eR8Sint : return "R8Sint"; + case Format::eR8Srgb : return "R8Srgb"; + case Format::eR8G8Unorm : return "R8G8Unorm"; + case Format::eR8G8Snorm : return "R8G8Snorm"; + case Format::eR8G8Uscaled : return "R8G8Uscaled"; + case Format::eR8G8Sscaled : return "R8G8Sscaled"; + case Format::eR8G8Uint : return "R8G8Uint"; + case Format::eR8G8Sint : return "R8G8Sint"; + case Format::eR8G8Srgb : return "R8G8Srgb"; + case Format::eR8G8B8Unorm : return "R8G8B8Unorm"; + case Format::eR8G8B8Snorm : return "R8G8B8Snorm"; + case Format::eR8G8B8Uscaled : return "R8G8B8Uscaled"; + case Format::eR8G8B8Sscaled : return "R8G8B8Sscaled"; + case Format::eR8G8B8Uint : return "R8G8B8Uint"; + case Format::eR8G8B8Sint : return "R8G8B8Sint"; + case Format::eR8G8B8Srgb : return "R8G8B8Srgb"; + case Format::eB8G8R8Unorm : return "B8G8R8Unorm"; + case Format::eB8G8R8Snorm : return "B8G8R8Snorm"; + case Format::eB8G8R8Uscaled : return "B8G8R8Uscaled"; + case Format::eB8G8R8Sscaled : return "B8G8R8Sscaled"; + case Format::eB8G8R8Uint : return "B8G8R8Uint"; + case Format::eB8G8R8Sint : return "B8G8R8Sint"; + case Format::eB8G8R8Srgb : return "B8G8R8Srgb"; + case Format::eR8G8B8A8Unorm : return "R8G8B8A8Unorm"; + case Format::eR8G8B8A8Snorm : return "R8G8B8A8Snorm"; + case Format::eR8G8B8A8Uscaled : return "R8G8B8A8Uscaled"; + case Format::eR8G8B8A8Sscaled : return "R8G8B8A8Sscaled"; + case Format::eR8G8B8A8Uint : return "R8G8B8A8Uint"; + case Format::eR8G8B8A8Sint : return "R8G8B8A8Sint"; + case Format::eR8G8B8A8Srgb : return "R8G8B8A8Srgb"; + case Format::eB8G8R8A8Unorm : return "B8G8R8A8Unorm"; + case Format::eB8G8R8A8Snorm : return "B8G8R8A8Snorm"; + case Format::eB8G8R8A8Uscaled : return "B8G8R8A8Uscaled"; + case Format::eB8G8R8A8Sscaled : return "B8G8R8A8Sscaled"; + case Format::eB8G8R8A8Uint : return "B8G8R8A8Uint"; + case Format::eB8G8R8A8Sint : return "B8G8R8A8Sint"; + case Format::eB8G8R8A8Srgb : return "B8G8R8A8Srgb"; + case Format::eA8B8G8R8UnormPack32 : return "A8B8G8R8UnormPack32"; + case Format::eA8B8G8R8SnormPack32 : return "A8B8G8R8SnormPack32"; + case Format::eA8B8G8R8UscaledPack32 : return "A8B8G8R8UscaledPack32"; + case Format::eA8B8G8R8SscaledPack32 : return "A8B8G8R8SscaledPack32"; + case Format::eA8B8G8R8UintPack32 : return "A8B8G8R8UintPack32"; + case Format::eA8B8G8R8SintPack32 : return "A8B8G8R8SintPack32"; + case Format::eA8B8G8R8SrgbPack32 : return "A8B8G8R8SrgbPack32"; + case Format::eA2R10G10B10UnormPack32 : return "A2R10G10B10UnormPack32"; + case Format::eA2R10G10B10SnormPack32 : return "A2R10G10B10SnormPack32"; + case Format::eA2R10G10B10UscaledPack32 : return "A2R10G10B10UscaledPack32"; + case Format::eA2R10G10B10SscaledPack32 : return "A2R10G10B10SscaledPack32"; + case Format::eA2R10G10B10UintPack32 : return "A2R10G10B10UintPack32"; + case Format::eA2R10G10B10SintPack32 : return "A2R10G10B10SintPack32"; + case Format::eA2B10G10R10UnormPack32 : return "A2B10G10R10UnormPack32"; + case Format::eA2B10G10R10SnormPack32 : return "A2B10G10R10SnormPack32"; + case Format::eA2B10G10R10UscaledPack32 : return "A2B10G10R10UscaledPack32"; + case Format::eA2B10G10R10SscaledPack32 : return "A2B10G10R10SscaledPack32"; + case Format::eA2B10G10R10UintPack32 : return "A2B10G10R10UintPack32"; + case Format::eA2B10G10R10SintPack32 : return "A2B10G10R10SintPack32"; + case Format::eR16Unorm : return "R16Unorm"; + case Format::eR16Snorm : return "R16Snorm"; + case Format::eR16Uscaled : return "R16Uscaled"; + case Format::eR16Sscaled : return "R16Sscaled"; + case Format::eR16Uint : return "R16Uint"; + case Format::eR16Sint : return "R16Sint"; + case Format::eR16Sfloat : return "R16Sfloat"; + case Format::eR16G16Unorm : return "R16G16Unorm"; + case Format::eR16G16Snorm : return "R16G16Snorm"; + case Format::eR16G16Uscaled : return "R16G16Uscaled"; + case Format::eR16G16Sscaled : return "R16G16Sscaled"; + case Format::eR16G16Uint : return "R16G16Uint"; + case Format::eR16G16Sint : return "R16G16Sint"; + case Format::eR16G16Sfloat : return "R16G16Sfloat"; + case Format::eR16G16B16Unorm : return "R16G16B16Unorm"; + case Format::eR16G16B16Snorm : return "R16G16B16Snorm"; + case Format::eR16G16B16Uscaled : return "R16G16B16Uscaled"; + case Format::eR16G16B16Sscaled : return "R16G16B16Sscaled"; + case Format::eR16G16B16Uint : return "R16G16B16Uint"; + case Format::eR16G16B16Sint : return "R16G16B16Sint"; + case Format::eR16G16B16Sfloat : return "R16G16B16Sfloat"; + case Format::eR16G16B16A16Unorm : return "R16G16B16A16Unorm"; + case Format::eR16G16B16A16Snorm : return "R16G16B16A16Snorm"; + case Format::eR16G16B16A16Uscaled : return "R16G16B16A16Uscaled"; + case Format::eR16G16B16A16Sscaled : return "R16G16B16A16Sscaled"; + case Format::eR16G16B16A16Uint : return "R16G16B16A16Uint"; + case Format::eR16G16B16A16Sint : return "R16G16B16A16Sint"; + case Format::eR16G16B16A16Sfloat : return "R16G16B16A16Sfloat"; + case Format::eR32Uint : return "R32Uint"; + case Format::eR32Sint : return "R32Sint"; + case Format::eR32Sfloat : return "R32Sfloat"; + case Format::eR32G32Uint : return "R32G32Uint"; + case Format::eR32G32Sint : return "R32G32Sint"; + case Format::eR32G32Sfloat : return "R32G32Sfloat"; + case Format::eR32G32B32Uint : return "R32G32B32Uint"; + case Format::eR32G32B32Sint : return "R32G32B32Sint"; + case Format::eR32G32B32Sfloat : return "R32G32B32Sfloat"; + case Format::eR32G32B32A32Uint : return "R32G32B32A32Uint"; + case Format::eR32G32B32A32Sint : return "R32G32B32A32Sint"; + case Format::eR32G32B32A32Sfloat : return "R32G32B32A32Sfloat"; + case Format::eR64Uint : return "R64Uint"; + case Format::eR64Sint : return "R64Sint"; + case Format::eR64Sfloat : return "R64Sfloat"; + case Format::eR64G64Uint : return "R64G64Uint"; + case Format::eR64G64Sint : return "R64G64Sint"; + case Format::eR64G64Sfloat : return "R64G64Sfloat"; + case Format::eR64G64B64Uint : return "R64G64B64Uint"; + case Format::eR64G64B64Sint : return "R64G64B64Sint"; + case Format::eR64G64B64Sfloat : return "R64G64B64Sfloat"; + case Format::eR64G64B64A64Uint : return "R64G64B64A64Uint"; + case Format::eR64G64B64A64Sint : return "R64G64B64A64Sint"; + case Format::eR64G64B64A64Sfloat : return "R64G64B64A64Sfloat"; + case Format::eB10G11R11UfloatPack32 : return "B10G11R11UfloatPack32"; + case Format::eE5B9G9R9UfloatPack32 : return "E5B9G9R9UfloatPack32"; + case Format::eD16Unorm : return "D16Unorm"; + case Format::eX8D24UnormPack32 : return "X8D24UnormPack32"; + case Format::eD32Sfloat : return "D32Sfloat"; + case Format::eS8Uint : return "S8Uint"; + case Format::eD16UnormS8Uint : return "D16UnormS8Uint"; + case Format::eD24UnormS8Uint : return "D24UnormS8Uint"; + case Format::eD32SfloatS8Uint : return "D32SfloatS8Uint"; + case Format::eBc1RgbUnormBlock : return "Bc1RgbUnormBlock"; + case Format::eBc1RgbSrgbBlock : return "Bc1RgbSrgbBlock"; + case Format::eBc1RgbaUnormBlock : return "Bc1RgbaUnormBlock"; + case Format::eBc1RgbaSrgbBlock : return "Bc1RgbaSrgbBlock"; + case Format::eBc2UnormBlock : return "Bc2UnormBlock"; + case Format::eBc2SrgbBlock : return "Bc2SrgbBlock"; + case Format::eBc3UnormBlock : return "Bc3UnormBlock"; + case Format::eBc3SrgbBlock : return "Bc3SrgbBlock"; + case Format::eBc4UnormBlock : return "Bc4UnormBlock"; + case Format::eBc4SnormBlock : return "Bc4SnormBlock"; + case Format::eBc5UnormBlock : return "Bc5UnormBlock"; + case Format::eBc5SnormBlock : return "Bc5SnormBlock"; + case Format::eBc6HUfloatBlock : return "Bc6HUfloatBlock"; + case Format::eBc6HSfloatBlock : return "Bc6HSfloatBlock"; + case Format::eBc7UnormBlock : return "Bc7UnormBlock"; + case Format::eBc7SrgbBlock : return "Bc7SrgbBlock"; + case Format::eEtc2R8G8B8UnormBlock : return "Etc2R8G8B8UnormBlock"; + case Format::eEtc2R8G8B8SrgbBlock : return "Etc2R8G8B8SrgbBlock"; + case Format::eEtc2R8G8B8A1UnormBlock : return "Etc2R8G8B8A1UnormBlock"; + case Format::eEtc2R8G8B8A1SrgbBlock : return "Etc2R8G8B8A1SrgbBlock"; + case Format::eEtc2R8G8B8A8UnormBlock : return "Etc2R8G8B8A8UnormBlock"; + case Format::eEtc2R8G8B8A8SrgbBlock : return "Etc2R8G8B8A8SrgbBlock"; + case Format::eEacR11UnormBlock : return "EacR11UnormBlock"; + case Format::eEacR11SnormBlock : return "EacR11SnormBlock"; + case Format::eEacR11G11UnormBlock : return "EacR11G11UnormBlock"; + case Format::eEacR11G11SnormBlock : return "EacR11G11SnormBlock"; + case Format::eAstc4x4UnormBlock : return "Astc4x4UnormBlock"; + case Format::eAstc4x4SrgbBlock : return "Astc4x4SrgbBlock"; + case Format::eAstc5x4UnormBlock : return "Astc5x4UnormBlock"; + case Format::eAstc5x4SrgbBlock : return "Astc5x4SrgbBlock"; + case Format::eAstc5x5UnormBlock : return "Astc5x5UnormBlock"; + case Format::eAstc5x5SrgbBlock : return "Astc5x5SrgbBlock"; + case Format::eAstc6x5UnormBlock : return "Astc6x5UnormBlock"; + case Format::eAstc6x5SrgbBlock : return "Astc6x5SrgbBlock"; + case Format::eAstc6x6UnormBlock : return "Astc6x6UnormBlock"; + case Format::eAstc6x6SrgbBlock : return "Astc6x6SrgbBlock"; + case Format::eAstc8x5UnormBlock : return "Astc8x5UnormBlock"; + case Format::eAstc8x5SrgbBlock : return "Astc8x5SrgbBlock"; + case Format::eAstc8x6UnormBlock : return "Astc8x6UnormBlock"; + case Format::eAstc8x6SrgbBlock : return "Astc8x6SrgbBlock"; + case Format::eAstc8x8UnormBlock : return "Astc8x8UnormBlock"; + case Format::eAstc8x8SrgbBlock : return "Astc8x8SrgbBlock"; + case Format::eAstc10x5UnormBlock : return "Astc10x5UnormBlock"; + case Format::eAstc10x5SrgbBlock : return "Astc10x5SrgbBlock"; + case Format::eAstc10x6UnormBlock : return "Astc10x6UnormBlock"; + case Format::eAstc10x6SrgbBlock : return "Astc10x6SrgbBlock"; + case Format::eAstc10x8UnormBlock : return "Astc10x8UnormBlock"; + case Format::eAstc10x8SrgbBlock : return "Astc10x8SrgbBlock"; + case Format::eAstc10x10UnormBlock : return "Astc10x10UnormBlock"; + case Format::eAstc10x10SrgbBlock : return "Astc10x10SrgbBlock"; + case Format::eAstc12x10UnormBlock : return "Astc12x10UnormBlock"; + case Format::eAstc12x10SrgbBlock : return "Astc12x10SrgbBlock"; + case Format::eAstc12x12UnormBlock : return "Astc12x12UnormBlock"; + case Format::eAstc12x12SrgbBlock : return "Astc12x12SrgbBlock"; + case Format::eG8B8G8R8422Unorm : return "G8B8G8R8422Unorm"; + case Format::eB8G8R8G8422Unorm : return "B8G8R8G8422Unorm"; + case Format::eG8B8R83Plane420Unorm : return "G8B8R83Plane420Unorm"; + case Format::eG8B8R82Plane420Unorm : return "G8B8R82Plane420Unorm"; + case Format::eG8B8R83Plane422Unorm : return "G8B8R83Plane422Unorm"; + case Format::eG8B8R82Plane422Unorm : return "G8B8R82Plane422Unorm"; + case Format::eG8B8R83Plane444Unorm : return "G8B8R83Plane444Unorm"; + case Format::eR10X6UnormPack16 : return "R10X6UnormPack16"; + case Format::eR10X6G10X6Unorm2Pack16 : return "R10X6G10X6Unorm2Pack16"; + case Format::eR10X6G10X6B10X6A10X6Unorm4Pack16 : return "R10X6G10X6B10X6A10X6Unorm4Pack16"; + case Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16 : return "G10X6B10X6G10X6R10X6422Unorm4Pack16"; + case Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16 : return "B10X6G10X6R10X6G10X6422Unorm4Pack16"; + case Format::eG10X6B10X6R10X63Plane420Unorm3Pack16 : return "G10X6B10X6R10X63Plane420Unorm3Pack16"; + case Format::eG10X6B10X6R10X62Plane420Unorm3Pack16 : return "G10X6B10X6R10X62Plane420Unorm3Pack16"; + case Format::eG10X6B10X6R10X63Plane422Unorm3Pack16 : return "G10X6B10X6R10X63Plane422Unorm3Pack16"; + case Format::eG10X6B10X6R10X62Plane422Unorm3Pack16 : return "G10X6B10X6R10X62Plane422Unorm3Pack16"; + case Format::eG10X6B10X6R10X63Plane444Unorm3Pack16 : return "G10X6B10X6R10X63Plane444Unorm3Pack16"; + case Format::eR12X4UnormPack16 : return "R12X4UnormPack16"; + case Format::eR12X4G12X4Unorm2Pack16 : return "R12X4G12X4Unorm2Pack16"; + case Format::eR12X4G12X4B12X4A12X4Unorm4Pack16 : return "R12X4G12X4B12X4A12X4Unorm4Pack16"; + case Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16 : return "G12X4B12X4G12X4R12X4422Unorm4Pack16"; + case Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16 : return "B12X4G12X4R12X4G12X4422Unorm4Pack16"; + case Format::eG12X4B12X4R12X43Plane420Unorm3Pack16 : return "G12X4B12X4R12X43Plane420Unorm3Pack16"; + case Format::eG12X4B12X4R12X42Plane420Unorm3Pack16 : return "G12X4B12X4R12X42Plane420Unorm3Pack16"; + case Format::eG12X4B12X4R12X43Plane422Unorm3Pack16 : return "G12X4B12X4R12X43Plane422Unorm3Pack16"; + case Format::eG12X4B12X4R12X42Plane422Unorm3Pack16 : return "G12X4B12X4R12X42Plane422Unorm3Pack16"; + case Format::eG12X4B12X4R12X43Plane444Unorm3Pack16 : return "G12X4B12X4R12X43Plane444Unorm3Pack16"; + case Format::eG16B16G16R16422Unorm : return "G16B16G16R16422Unorm"; + case Format::eB16G16R16G16422Unorm : return "B16G16R16G16422Unorm"; + case Format::eG16B16R163Plane420Unorm : return "G16B16R163Plane420Unorm"; + case Format::eG16B16R162Plane420Unorm : return "G16B16R162Plane420Unorm"; + case Format::eG16B16R163Plane422Unorm : return "G16B16R163Plane422Unorm"; + case Format::eG16B16R162Plane422Unorm : return "G16B16R162Plane422Unorm"; + case Format::eG16B16R163Plane444Unorm : return "G16B16R163Plane444Unorm"; + case Format::eG8B8R82Plane444Unorm : return "G8B8R82Plane444Unorm"; + case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16 : return "G10X6B10X6R10X62Plane444Unorm3Pack16"; + case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16 : return "G12X4B12X4R12X42Plane444Unorm3Pack16"; + case Format::eG16B16R162Plane444Unorm : return "G16B16R162Plane444Unorm"; + case Format::eA4R4G4B4UnormPack16 : return "A4R4G4B4UnormPack16"; + case Format::eA4B4G4R4UnormPack16 : return "A4B4G4R4UnormPack16"; + case Format::eAstc4x4SfloatBlock : return "Astc4x4SfloatBlock"; + case Format::eAstc5x4SfloatBlock : return "Astc5x4SfloatBlock"; + case Format::eAstc5x5SfloatBlock : return "Astc5x5SfloatBlock"; + case Format::eAstc6x5SfloatBlock : return "Astc6x5SfloatBlock"; + case Format::eAstc6x6SfloatBlock : return "Astc6x6SfloatBlock"; + case Format::eAstc8x5SfloatBlock : return "Astc8x5SfloatBlock"; + case Format::eAstc8x6SfloatBlock : return "Astc8x6SfloatBlock"; + case Format::eAstc8x8SfloatBlock : return "Astc8x8SfloatBlock"; + case Format::eAstc10x5SfloatBlock : return "Astc10x5SfloatBlock"; + case Format::eAstc10x6SfloatBlock : return "Astc10x6SfloatBlock"; + case Format::eAstc10x8SfloatBlock : return "Astc10x8SfloatBlock"; + case Format::eAstc10x10SfloatBlock : return "Astc10x10SfloatBlock"; + case Format::eAstc12x10SfloatBlock : return "Astc12x10SfloatBlock"; + case Format::eAstc12x12SfloatBlock : return "Astc12x12SfloatBlock"; + case Format::eA1B5G5R5UnormPack16 : return "A1B5G5R5UnormPack16"; + case Format::eA8Unorm : return "A8Unorm"; + case Format::ePvrtc12BppUnormBlockIMG : return "Pvrtc12BppUnormBlockIMG"; + case Format::ePvrtc14BppUnormBlockIMG : return "Pvrtc14BppUnormBlockIMG"; + case Format::ePvrtc22BppUnormBlockIMG : return "Pvrtc22BppUnormBlockIMG"; + case Format::ePvrtc24BppUnormBlockIMG : return "Pvrtc24BppUnormBlockIMG"; + case Format::ePvrtc12BppSrgbBlockIMG : return "Pvrtc12BppSrgbBlockIMG"; + case Format::ePvrtc14BppSrgbBlockIMG : return "Pvrtc14BppSrgbBlockIMG"; + case Format::ePvrtc22BppSrgbBlockIMG : return "Pvrtc22BppSrgbBlockIMG"; + case Format::ePvrtc24BppSrgbBlockIMG : return "Pvrtc24BppSrgbBlockIMG"; + case Format::eR8BoolARM : return "R8BoolARM"; + case Format::eR16G16Sfixed5NV : return "R16G16Sfixed5NV"; + case Format::eR10X6UintPack16ARM : return "R10X6UintPack16ARM"; + case Format::eR10X6G10X6Uint2Pack16ARM : return "R10X6G10X6Uint2Pack16ARM"; + case Format::eR10X6G10X6B10X6A10X6Uint4Pack16ARM : return "R10X6G10X6B10X6A10X6Uint4Pack16ARM"; + case Format::eR12X4UintPack16ARM : return "R12X4UintPack16ARM"; + case Format::eR12X4G12X4Uint2Pack16ARM : return "R12X4G12X4Uint2Pack16ARM"; + case Format::eR12X4G12X4B12X4A12X4Uint4Pack16ARM : return "R12X4G12X4B12X4A12X4Uint4Pack16ARM"; + case Format::eR14X2UintPack16ARM : return "R14X2UintPack16ARM"; + case Format::eR14X2G14X2Uint2Pack16ARM : return "R14X2G14X2Uint2Pack16ARM"; + case Format::eR14X2G14X2B14X2A14X2Uint4Pack16ARM : return "R14X2G14X2B14X2A14X2Uint4Pack16ARM"; + case Format::eR14X2UnormPack16ARM : return "R14X2UnormPack16ARM"; + case Format::eR14X2G14X2Unorm2Pack16ARM : return "R14X2G14X2Unorm2Pack16ARM"; + case Format::eR14X2G14X2B14X2A14X2Unorm4Pack16ARM : return "R14X2G14X2B14X2A14X2Unorm4Pack16ARM"; + case Format::eG14X2B14X2R14X22Plane420Unorm3Pack16ARM: return "G14X2B14X2R14X22Plane420Unorm3Pack16ARM"; + case Format::eG14X2B14X2R14X22Plane422Unorm3Pack16ARM: return "G14X2B14X2R14X22Plane422Unorm3Pack16ARM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FormatFeatureFlagBits value ) + { + switch ( value ) + { + case FormatFeatureFlagBits::eSampledImage : return "SampledImage"; + case FormatFeatureFlagBits::eStorageImage : return "StorageImage"; + case FormatFeatureFlagBits::eStorageImageAtomic : return "StorageImageAtomic"; + case FormatFeatureFlagBits::eUniformTexelBuffer : return "UniformTexelBuffer"; + case FormatFeatureFlagBits::eStorageTexelBuffer : return "StorageTexelBuffer"; + case FormatFeatureFlagBits::eStorageTexelBufferAtomic : return "StorageTexelBufferAtomic"; + case FormatFeatureFlagBits::eVertexBuffer : return "VertexBuffer"; + case FormatFeatureFlagBits::eColorAttachment : return "ColorAttachment"; + case FormatFeatureFlagBits::eColorAttachmentBlend : return "ColorAttachmentBlend"; + case FormatFeatureFlagBits::eDepthStencilAttachment : return "DepthStencilAttachment"; + case FormatFeatureFlagBits::eBlitSrc : return "BlitSrc"; + case FormatFeatureFlagBits::eBlitDst : return "BlitDst"; + case FormatFeatureFlagBits::eSampledImageFilterLinear : return "SampledImageFilterLinear"; + case FormatFeatureFlagBits::eTransferSrc : return "TransferSrc"; + case FormatFeatureFlagBits::eTransferDst : return "TransferDst"; + case FormatFeatureFlagBits::eMidpointChromaSamples : return "MidpointChromaSamples"; + case FormatFeatureFlagBits::eSampledImageYcbcrConversionLinearFilter : return "SampledImageYcbcrConversionLinearFilter"; + case FormatFeatureFlagBits::eSampledImageYcbcrConversionSeparateReconstructionFilter: return "SampledImageYcbcrConversionSeparateReconstructionFilter"; + case FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicit: return "SampledImageYcbcrConversionChromaReconstructionExplicit"; + case FormatFeatureFlagBits::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable: + return "SampledImageYcbcrConversionChromaReconstructionExplicitForceable"; + case FormatFeatureFlagBits::eDisjoint : return "Disjoint"; + case FormatFeatureFlagBits::eCositedChromaSamples : return "CositedChromaSamples"; + case FormatFeatureFlagBits::eSampledImageFilterMinmax : return "SampledImageFilterMinmax"; + case FormatFeatureFlagBits::eVideoDecodeOutputKHR : return "VideoDecodeOutputKHR"; + case FormatFeatureFlagBits::eVideoDecodeDpbKHR : return "VideoDecodeDpbKHR"; + case FormatFeatureFlagBits::eAccelerationStructureVertexBufferKHR: return "AccelerationStructureVertexBufferKHR"; + case FormatFeatureFlagBits::eSampledImageFilterCubicEXT : return "SampledImageFilterCubicEXT"; + case FormatFeatureFlagBits::eFragmentDensityMapEXT : return "FragmentDensityMapEXT"; + case FormatFeatureFlagBits::eFragmentShadingRateAttachmentKHR : return "FragmentShadingRateAttachmentKHR"; + case FormatFeatureFlagBits::eVideoEncodeInputKHR : return "VideoEncodeInputKHR"; + case FormatFeatureFlagBits::eVideoEncodeDpbKHR : return "VideoEncodeDpbKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageCreateFlagBits value ) + { + switch ( value ) + { + case ImageCreateFlagBits::eSparseBinding : return "SparseBinding"; + case ImageCreateFlagBits::eSparseResidency : return "SparseResidency"; + case ImageCreateFlagBits::eSparseAliased : return "SparseAliased"; + case ImageCreateFlagBits::eMutableFormat : return "MutableFormat"; + case ImageCreateFlagBits::eCubeCompatible : return "CubeCompatible"; + case ImageCreateFlagBits::eAlias : return "Alias"; + case ImageCreateFlagBits::eSplitInstanceBindRegions : return "SplitInstanceBindRegions"; + case ImageCreateFlagBits::e2DArrayCompatible : return "2DArrayCompatible"; + case ImageCreateFlagBits::eBlockTexelViewCompatible : return "BlockTexelViewCompatible"; + case ImageCreateFlagBits::eExtendedUsage : return "ExtendedUsage"; + case ImageCreateFlagBits::eProtected : return "Protected"; + case ImageCreateFlagBits::eDisjoint : return "Disjoint"; + case ImageCreateFlagBits::eCornerSampledNV : return "CornerSampledNV"; + case ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT : return "SampleLocationsCompatibleDepthEXT"; + case ImageCreateFlagBits::eSubsampledEXT : return "SubsampledEXT"; + case ImageCreateFlagBits::eDescriptorBufferCaptureReplayEXT : return "DescriptorBufferCaptureReplayEXT"; + case ImageCreateFlagBits::eMultisampledRenderToSingleSampledEXT: return "MultisampledRenderToSingleSampledEXT"; + case ImageCreateFlagBits::e2DViewCompatibleEXT : return "2DViewCompatibleEXT"; + case ImageCreateFlagBits::eVideoProfileIndependentKHR : return "VideoProfileIndependentKHR"; + case ImageCreateFlagBits::eFragmentDensityMapOffsetEXT : return "FragmentDensityMapOffsetEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageTiling value ) + { + switch ( value ) + { + case ImageTiling::eOptimal : return "Optimal"; + case ImageTiling::eLinear : return "Linear"; + case ImageTiling::eDrmFormatModifierEXT: return "DrmFormatModifierEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageType value ) + { + switch ( value ) + { + case ImageType::e1D: return "1D"; + case ImageType::e2D: return "2D"; + case ImageType::e3D: return "3D"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageUsageFlagBits value ) + { + switch ( value ) + { + case ImageUsageFlagBits::eTransferSrc : return "TransferSrc"; + case ImageUsageFlagBits::eTransferDst : return "TransferDst"; + case ImageUsageFlagBits::eSampled : return "Sampled"; + case ImageUsageFlagBits::eStorage : return "Storage"; + case ImageUsageFlagBits::eColorAttachment : return "ColorAttachment"; + case ImageUsageFlagBits::eDepthStencilAttachment : return "DepthStencilAttachment"; + case ImageUsageFlagBits::eTransientAttachment : return "TransientAttachment"; + case ImageUsageFlagBits::eInputAttachment : return "InputAttachment"; + case ImageUsageFlagBits::eHostTransfer : return "HostTransfer"; + case ImageUsageFlagBits::eVideoDecodeDstKHR : return "VideoDecodeDstKHR"; + case ImageUsageFlagBits::eVideoDecodeSrcKHR : return "VideoDecodeSrcKHR"; + case ImageUsageFlagBits::eVideoDecodeDpbKHR : return "VideoDecodeDpbKHR"; + case ImageUsageFlagBits::eFragmentDensityMapEXT : return "FragmentDensityMapEXT"; + case ImageUsageFlagBits::eFragmentShadingRateAttachmentKHR : return "FragmentShadingRateAttachmentKHR"; + case ImageUsageFlagBits::eVideoEncodeDstKHR : return "VideoEncodeDstKHR"; + case ImageUsageFlagBits::eVideoEncodeSrcKHR : return "VideoEncodeSrcKHR"; + case ImageUsageFlagBits::eVideoEncodeDpbKHR : return "VideoEncodeDpbKHR"; + case ImageUsageFlagBits::eAttachmentFeedbackLoopEXT : return "AttachmentFeedbackLoopEXT"; + case ImageUsageFlagBits::eInvocationMaskHUAWEI : return "InvocationMaskHUAWEI"; + case ImageUsageFlagBits::eSampleWeightQCOM : return "SampleWeightQCOM"; + case ImageUsageFlagBits::eSampleBlockMatchQCOM : return "SampleBlockMatchQCOM"; + case ImageUsageFlagBits::eTensorAliasingARM : return "TensorAliasingARM"; + case ImageUsageFlagBits::eTileMemoryQCOM : return "TileMemoryQCOM"; + case ImageUsageFlagBits::eVideoEncodeQuantizationDeltaMapKHR: return "VideoEncodeQuantizationDeltaMapKHR"; + case ImageUsageFlagBits::eVideoEncodeEmphasisMapKHR : return "VideoEncodeEmphasisMapKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( InstanceCreateFlagBits value ) + { + switch ( value ) + { + case InstanceCreateFlagBits::eEnumeratePortabilityKHR: return "EnumeratePortabilityKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( InternalAllocationType value ) + { + switch ( value ) + { + case InternalAllocationType::eExecutable: return "Executable"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryHeapFlagBits value ) + { + switch ( value ) + { + case MemoryHeapFlagBits::eDeviceLocal : return "DeviceLocal"; + case MemoryHeapFlagBits::eMultiInstance : return "MultiInstance"; + case MemoryHeapFlagBits::eTileMemoryQCOM: return "TileMemoryQCOM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryPropertyFlagBits value ) + { + switch ( value ) + { + case MemoryPropertyFlagBits::eDeviceLocal : return "DeviceLocal"; + case MemoryPropertyFlagBits::eHostVisible : return "HostVisible"; + case MemoryPropertyFlagBits::eHostCoherent : return "HostCoherent"; + case MemoryPropertyFlagBits::eHostCached : return "HostCached"; + case MemoryPropertyFlagBits::eLazilyAllocated : return "LazilyAllocated"; + case MemoryPropertyFlagBits::eProtected : return "Protected"; + case MemoryPropertyFlagBits::eDeviceCoherentAMD: return "DeviceCoherentAMD"; + case MemoryPropertyFlagBits::eDeviceUncachedAMD: return "DeviceUncachedAMD"; + case MemoryPropertyFlagBits::eRdmaCapableNV : return "RdmaCapableNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PhysicalDeviceType value ) + { + switch ( value ) + { + case PhysicalDeviceType::eOther : return "Other"; + case PhysicalDeviceType::eIntegratedGpu: return "IntegratedGpu"; + case PhysicalDeviceType::eDiscreteGpu : return "DiscreteGpu"; + case PhysicalDeviceType::eVirtualGpu : return "VirtualGpu"; + case PhysicalDeviceType::eCpu : return "Cpu"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueueFlagBits value ) + { + switch ( value ) + { + case QueueFlagBits::eGraphics : return "Graphics"; + case QueueFlagBits::eCompute : return "Compute"; + case QueueFlagBits::eTransfer : return "Transfer"; + case QueueFlagBits::eSparseBinding : return "SparseBinding"; + case QueueFlagBits::eProtected : return "Protected"; + case QueueFlagBits::eVideoDecodeKHR: return "VideoDecodeKHR"; + case QueueFlagBits::eVideoEncodeKHR: return "VideoEncodeKHR"; + case QueueFlagBits::eOpticalFlowNV : return "OpticalFlowNV"; + case QueueFlagBits::eDataGraphARM : return "DataGraphARM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SampleCountFlagBits value ) + { + switch ( value ) + { + case SampleCountFlagBits::e1 : return "1"; + case SampleCountFlagBits::e2 : return "2"; + case SampleCountFlagBits::e4 : return "4"; + case SampleCountFlagBits::e8 : return "8"; + case SampleCountFlagBits::e16: return "16"; + case SampleCountFlagBits::e32: return "32"; + case SampleCountFlagBits::e64: return "64"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SystemAllocationScope value ) + { + switch ( value ) + { + case SystemAllocationScope::eCommand : return "Command"; + case SystemAllocationScope::eObject : return "Object"; + case SystemAllocationScope::eCache : return "Cache"; + case SystemAllocationScope::eDevice : return "Device"; + case SystemAllocationScope::eInstance: return "Instance"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceQueueCreateFlagBits value ) + { + switch ( value ) + { + case DeviceQueueCreateFlagBits::eProtected: return "Protected"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineStageFlagBits value ) + { + switch ( value ) + { + case PipelineStageFlagBits::eTopOfPipe : return "TopOfPipe"; + case PipelineStageFlagBits::eDrawIndirect : return "DrawIndirect"; + case PipelineStageFlagBits::eVertexInput : return "VertexInput"; + case PipelineStageFlagBits::eVertexShader : return "VertexShader"; + case PipelineStageFlagBits::eTessellationControlShader : return "TessellationControlShader"; + case PipelineStageFlagBits::eTessellationEvaluationShader : return "TessellationEvaluationShader"; + case PipelineStageFlagBits::eGeometryShader : return "GeometryShader"; + case PipelineStageFlagBits::eFragmentShader : return "FragmentShader"; + case PipelineStageFlagBits::eEarlyFragmentTests : return "EarlyFragmentTests"; + case PipelineStageFlagBits::eLateFragmentTests : return "LateFragmentTests"; + case PipelineStageFlagBits::eColorAttachmentOutput : return "ColorAttachmentOutput"; + case PipelineStageFlagBits::eComputeShader : return "ComputeShader"; + case PipelineStageFlagBits::eTransfer : return "Transfer"; + case PipelineStageFlagBits::eBottomOfPipe : return "BottomOfPipe"; + case PipelineStageFlagBits::eHost : return "Host"; + case PipelineStageFlagBits::eAllGraphics : return "AllGraphics"; + case PipelineStageFlagBits::eAllCommands : return "AllCommands"; + case PipelineStageFlagBits::eNone : return "None"; + case PipelineStageFlagBits::eTransformFeedbackEXT : return "TransformFeedbackEXT"; + case PipelineStageFlagBits::eConditionalRenderingEXT : return "ConditionalRenderingEXT"; + case PipelineStageFlagBits::eAccelerationStructureBuildKHR : return "AccelerationStructureBuildKHR"; + case PipelineStageFlagBits::eRayTracingShaderKHR : return "RayTracingShaderKHR"; + case PipelineStageFlagBits::eFragmentDensityProcessEXT : return "FragmentDensityProcessEXT"; + case PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; + case PipelineStageFlagBits::eTaskShaderEXT : return "TaskShaderEXT"; + case PipelineStageFlagBits::eMeshShaderEXT : return "MeshShaderEXT"; + case PipelineStageFlagBits::eCommandPreprocessEXT : return "CommandPreprocessEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryMapFlagBits value ) + { + switch ( value ) + { + case MemoryMapFlagBits::ePlacedEXT: return "PlacedEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageAspectFlagBits value ) + { + switch ( value ) + { + case ImageAspectFlagBits::eColor : return "Color"; + case ImageAspectFlagBits::eDepth : return "Depth"; + case ImageAspectFlagBits::eStencil : return "Stencil"; + case ImageAspectFlagBits::eMetadata : return "Metadata"; + case ImageAspectFlagBits::ePlane0 : return "Plane0"; + case ImageAspectFlagBits::ePlane1 : return "Plane1"; + case ImageAspectFlagBits::ePlane2 : return "Plane2"; + case ImageAspectFlagBits::eNone : return "None"; + case ImageAspectFlagBits::eMemoryPlane0EXT: return "MemoryPlane0EXT"; + case ImageAspectFlagBits::eMemoryPlane1EXT: return "MemoryPlane1EXT"; + case ImageAspectFlagBits::eMemoryPlane2EXT: return "MemoryPlane2EXT"; + case ImageAspectFlagBits::eMemoryPlane3EXT: return "MemoryPlane3EXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SparseImageFormatFlagBits value ) + { + switch ( value ) + { + case SparseImageFormatFlagBits::eSingleMiptail : return "SingleMiptail"; + case SparseImageFormatFlagBits::eAlignedMipSize : return "AlignedMipSize"; + case SparseImageFormatFlagBits::eNonstandardBlockSize: return "NonstandardBlockSize"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SparseMemoryBindFlagBits value ) + { + switch ( value ) + { + case SparseMemoryBindFlagBits::eMetadata: return "Metadata"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FenceCreateFlagBits value ) + { + switch ( value ) + { + case FenceCreateFlagBits::eSignaled: return "Signaled"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SemaphoreCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( EventCreateFlagBits value ) + { + switch ( value ) + { + case EventCreateFlagBits::eDeviceOnly: return "DeviceOnly"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryPipelineStatisticFlagBits value ) + { + switch ( value ) + { + case QueryPipelineStatisticFlagBits::eInputAssemblyVertices : return "InputAssemblyVertices"; + case QueryPipelineStatisticFlagBits::eInputAssemblyPrimitives : return "InputAssemblyPrimitives"; + case QueryPipelineStatisticFlagBits::eVertexShaderInvocations : return "VertexShaderInvocations"; + case QueryPipelineStatisticFlagBits::eGeometryShaderInvocations : return "GeometryShaderInvocations"; + case QueryPipelineStatisticFlagBits::eGeometryShaderPrimitives : return "GeometryShaderPrimitives"; + case QueryPipelineStatisticFlagBits::eClippingInvocations : return "ClippingInvocations"; + case QueryPipelineStatisticFlagBits::eClippingPrimitives : return "ClippingPrimitives"; + case QueryPipelineStatisticFlagBits::eFragmentShaderInvocations : return "FragmentShaderInvocations"; + case QueryPipelineStatisticFlagBits::eTessellationControlShaderPatches : return "TessellationControlShaderPatches"; + case QueryPipelineStatisticFlagBits::eTessellationEvaluationShaderInvocations: return "TessellationEvaluationShaderInvocations"; + case QueryPipelineStatisticFlagBits::eComputeShaderInvocations : return "ComputeShaderInvocations"; + case QueryPipelineStatisticFlagBits::eTaskShaderInvocationsEXT : return "TaskShaderInvocationsEXT"; + case QueryPipelineStatisticFlagBits::eMeshShaderInvocationsEXT : return "MeshShaderInvocationsEXT"; + case QueryPipelineStatisticFlagBits::eClusterCullingShaderInvocationsHUAWEI : return "ClusterCullingShaderInvocationsHUAWEI"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryPoolCreateFlagBits value ) + { + switch ( value ) + { + case QueryPoolCreateFlagBits::eResetKHR: return "ResetKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryResultFlagBits value ) + { + switch ( value ) + { + case QueryResultFlagBits::e64 : return "64"; + case QueryResultFlagBits::eWait : return "Wait"; + case QueryResultFlagBits::eWithAvailability: return "WithAvailability"; + case QueryResultFlagBits::ePartial : return "Partial"; + case QueryResultFlagBits::eWithStatusKHR : return "WithStatusKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryType value ) + { + switch ( value ) + { + case QueryType::eOcclusion : return "Occlusion"; + case QueryType::ePipelineStatistics : return "PipelineStatistics"; + case QueryType::eTimestamp : return "Timestamp"; + case QueryType::eResultStatusOnlyKHR : return "ResultStatusOnlyKHR"; + case QueryType::eTransformFeedbackStreamEXT : return "TransformFeedbackStreamEXT"; + case QueryType::ePerformanceQueryKHR : return "PerformanceQueryKHR"; + case QueryType::eAccelerationStructureCompactedSizeKHR : return "AccelerationStructureCompactedSizeKHR"; + case QueryType::eAccelerationStructureSerializationSizeKHR : return "AccelerationStructureSerializationSizeKHR"; + case QueryType::eAccelerationStructureCompactedSizeNV : return "AccelerationStructureCompactedSizeNV"; + case QueryType::ePerformanceQueryINTEL : return "PerformanceQueryINTEL"; + case QueryType::eVideoEncodeFeedbackKHR : return "VideoEncodeFeedbackKHR"; + case QueryType::eMeshPrimitivesGeneratedEXT : return "MeshPrimitivesGeneratedEXT"; + case QueryType::ePrimitivesGeneratedEXT : return "PrimitivesGeneratedEXT"; + case QueryType::eAccelerationStructureSerializationBottomLevelPointersKHR: return "AccelerationStructureSerializationBottomLevelPointersKHR"; + case QueryType::eAccelerationStructureSizeKHR : return "AccelerationStructureSizeKHR"; + case QueryType::eMicromapSerializationSizeEXT : return "MicromapSerializationSizeEXT"; + case QueryType::eMicromapCompactedSizeEXT : return "MicromapCompactedSizeEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BufferCreateFlagBits value ) + { + switch ( value ) + { + case BufferCreateFlagBits::eSparseBinding : return "SparseBinding"; + case BufferCreateFlagBits::eSparseResidency : return "SparseResidency"; + case BufferCreateFlagBits::eSparseAliased : return "SparseAliased"; + case BufferCreateFlagBits::eProtected : return "Protected"; + case BufferCreateFlagBits::eDeviceAddressCaptureReplay : return "DeviceAddressCaptureReplay"; + case BufferCreateFlagBits::eDescriptorBufferCaptureReplayEXT: return "DescriptorBufferCaptureReplayEXT"; + case BufferCreateFlagBits::eVideoProfileIndependentKHR : return "VideoProfileIndependentKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BufferUsageFlagBits value ) + { + switch ( value ) + { + case BufferUsageFlagBits::eTransferSrc : return "TransferSrc"; + case BufferUsageFlagBits::eTransferDst : return "TransferDst"; + case BufferUsageFlagBits::eUniformTexelBuffer : return "UniformTexelBuffer"; + case BufferUsageFlagBits::eStorageTexelBuffer : return "StorageTexelBuffer"; + case BufferUsageFlagBits::eUniformBuffer : return "UniformBuffer"; + case BufferUsageFlagBits::eStorageBuffer : return "StorageBuffer"; + case BufferUsageFlagBits::eIndexBuffer : return "IndexBuffer"; + case BufferUsageFlagBits::eVertexBuffer : return "VertexBuffer"; + case BufferUsageFlagBits::eIndirectBuffer : return "IndirectBuffer"; + case BufferUsageFlagBits::eShaderDeviceAddress : return "ShaderDeviceAddress"; + case BufferUsageFlagBits::eVideoDecodeSrcKHR : return "VideoDecodeSrcKHR"; + case BufferUsageFlagBits::eVideoDecodeDstKHR : return "VideoDecodeDstKHR"; + case BufferUsageFlagBits::eTransformFeedbackBufferEXT : return "TransformFeedbackBufferEXT"; + case BufferUsageFlagBits::eTransformFeedbackCounterBufferEXT: return "TransformFeedbackCounterBufferEXT"; + case BufferUsageFlagBits::eConditionalRenderingEXT : return "ConditionalRenderingEXT"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case BufferUsageFlagBits::eExecutionGraphScratchAMDX: return "ExecutionGraphScratchAMDX"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR: return "AccelerationStructureBuildInputReadOnlyKHR"; + case BufferUsageFlagBits::eAccelerationStructureStorageKHR : return "AccelerationStructureStorageKHR"; + case BufferUsageFlagBits::eShaderBindingTableKHR : return "ShaderBindingTableKHR"; + case BufferUsageFlagBits::eVideoEncodeDstKHR : return "VideoEncodeDstKHR"; + case BufferUsageFlagBits::eVideoEncodeSrcKHR : return "VideoEncodeSrcKHR"; + case BufferUsageFlagBits::eSamplerDescriptorBufferEXT : return "SamplerDescriptorBufferEXT"; + case BufferUsageFlagBits::eResourceDescriptorBufferEXT : return "ResourceDescriptorBufferEXT"; + case BufferUsageFlagBits::ePushDescriptorsDescriptorBufferEXT : return "PushDescriptorsDescriptorBufferEXT"; + case BufferUsageFlagBits::eMicromapBuildInputReadOnlyEXT : return "MicromapBuildInputReadOnlyEXT"; + case BufferUsageFlagBits::eMicromapStorageEXT : return "MicromapStorageEXT"; + case BufferUsageFlagBits::eTileMemoryQCOM : return "TileMemoryQCOM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SharingMode value ) + { + switch ( value ) + { + case SharingMode::eExclusive : return "Exclusive"; + case SharingMode::eConcurrent: return "Concurrent"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BufferViewCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageLayout value ) + { + switch ( value ) + { + case ImageLayout::eUndefined : return "Undefined"; + case ImageLayout::eGeneral : return "General"; + case ImageLayout::eColorAttachmentOptimal : return "ColorAttachmentOptimal"; + case ImageLayout::eDepthStencilAttachmentOptimal : return "DepthStencilAttachmentOptimal"; + case ImageLayout::eDepthStencilReadOnlyOptimal : return "DepthStencilReadOnlyOptimal"; + case ImageLayout::eShaderReadOnlyOptimal : return "ShaderReadOnlyOptimal"; + case ImageLayout::eTransferSrcOptimal : return "TransferSrcOptimal"; + case ImageLayout::eTransferDstOptimal : return "TransferDstOptimal"; + case ImageLayout::ePreinitialized : return "Preinitialized"; + case ImageLayout::eDepthReadOnlyStencilAttachmentOptimal : return "DepthReadOnlyStencilAttachmentOptimal"; + case ImageLayout::eDepthAttachmentStencilReadOnlyOptimal : return "DepthAttachmentStencilReadOnlyOptimal"; + case ImageLayout::eDepthAttachmentOptimal : return "DepthAttachmentOptimal"; + case ImageLayout::eDepthReadOnlyOptimal : return "DepthReadOnlyOptimal"; + case ImageLayout::eStencilAttachmentOptimal : return "StencilAttachmentOptimal"; + case ImageLayout::eStencilReadOnlyOptimal : return "StencilReadOnlyOptimal"; + case ImageLayout::eReadOnlyOptimal : return "ReadOnlyOptimal"; + case ImageLayout::eAttachmentOptimal : return "AttachmentOptimal"; + case ImageLayout::eRenderingLocalRead : return "RenderingLocalRead"; + case ImageLayout::ePresentSrcKHR : return "PresentSrcKHR"; + case ImageLayout::eVideoDecodeDstKHR : return "VideoDecodeDstKHR"; + case ImageLayout::eVideoDecodeSrcKHR : return "VideoDecodeSrcKHR"; + case ImageLayout::eVideoDecodeDpbKHR : return "VideoDecodeDpbKHR"; + case ImageLayout::eSharedPresentKHR : return "SharedPresentKHR"; + case ImageLayout::eFragmentDensityMapOptimalEXT : return "FragmentDensityMapOptimalEXT"; + case ImageLayout::eFragmentShadingRateAttachmentOptimalKHR: return "FragmentShadingRateAttachmentOptimalKHR"; + case ImageLayout::eVideoEncodeDstKHR : return "VideoEncodeDstKHR"; + case ImageLayout::eVideoEncodeSrcKHR : return "VideoEncodeSrcKHR"; + case ImageLayout::eVideoEncodeDpbKHR : return "VideoEncodeDpbKHR"; + case ImageLayout::eAttachmentFeedbackLoopOptimalEXT : return "AttachmentFeedbackLoopOptimalEXT"; + case ImageLayout::eTensorAliasingARM : return "TensorAliasingARM"; + case ImageLayout::eVideoEncodeQuantizationMapKHR : return "VideoEncodeQuantizationMapKHR"; + case ImageLayout::eZeroInitializedEXT : return "ZeroInitializedEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ComponentSwizzle value ) + { + switch ( value ) + { + case ComponentSwizzle::eIdentity: return "Identity"; + case ComponentSwizzle::eZero : return "Zero"; + case ComponentSwizzle::eOne : return "One"; + case ComponentSwizzle::eR : return "R"; + case ComponentSwizzle::eG : return "G"; + case ComponentSwizzle::eB : return "B"; + case ComponentSwizzle::eA : return "A"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageViewCreateFlagBits value ) + { + switch ( value ) + { + case ImageViewCreateFlagBits::eFragmentDensityMapDynamicEXT : return "FragmentDensityMapDynamicEXT"; + case ImageViewCreateFlagBits::eDescriptorBufferCaptureReplayEXT: return "DescriptorBufferCaptureReplayEXT"; + case ImageViewCreateFlagBits::eFragmentDensityMapDeferredEXT : return "FragmentDensityMapDeferredEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageViewType value ) + { + switch ( value ) + { + case ImageViewType::e1D : return "1D"; + case ImageViewType::e2D : return "2D"; + case ImageViewType::e3D : return "3D"; + case ImageViewType::eCube : return "Cube"; + case ImageViewType::e1DArray : return "1DArray"; + case ImageViewType::e2DArray : return "2DArray"; + case ImageViewType::eCubeArray: return "CubeArray"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderModuleCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCacheCreateFlagBits value ) + { + switch ( value ) + { + case PipelineCacheCreateFlagBits::eExternallySynchronized : return "ExternallySynchronized"; + case PipelineCacheCreateFlagBits::eInternallySynchronizedMergeKHR: return "InternallySynchronizedMergeKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BlendFactor value ) + { + switch ( value ) + { + case BlendFactor::eZero : return "Zero"; + case BlendFactor::eOne : return "One"; + case BlendFactor::eSrcColor : return "SrcColor"; + case BlendFactor::eOneMinusSrcColor : return "OneMinusSrcColor"; + case BlendFactor::eDstColor : return "DstColor"; + case BlendFactor::eOneMinusDstColor : return "OneMinusDstColor"; + case BlendFactor::eSrcAlpha : return "SrcAlpha"; + case BlendFactor::eOneMinusSrcAlpha : return "OneMinusSrcAlpha"; + case BlendFactor::eDstAlpha : return "DstAlpha"; + case BlendFactor::eOneMinusDstAlpha : return "OneMinusDstAlpha"; + case BlendFactor::eConstantColor : return "ConstantColor"; + case BlendFactor::eOneMinusConstantColor: return "OneMinusConstantColor"; + case BlendFactor::eConstantAlpha : return "ConstantAlpha"; + case BlendFactor::eOneMinusConstantAlpha: return "OneMinusConstantAlpha"; + case BlendFactor::eSrcAlphaSaturate : return "SrcAlphaSaturate"; + case BlendFactor::eSrc1Color : return "Src1Color"; + case BlendFactor::eOneMinusSrc1Color : return "OneMinusSrc1Color"; + case BlendFactor::eSrc1Alpha : return "Src1Alpha"; + case BlendFactor::eOneMinusSrc1Alpha : return "OneMinusSrc1Alpha"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BlendOp value ) + { + switch ( value ) + { + case BlendOp::eAdd : return "Add"; + case BlendOp::eSubtract : return "Subtract"; + case BlendOp::eReverseSubtract : return "ReverseSubtract"; + case BlendOp::eMin : return "Min"; + case BlendOp::eMax : return "Max"; + case BlendOp::eZeroEXT : return "ZeroEXT"; + case BlendOp::eSrcEXT : return "SrcEXT"; + case BlendOp::eDstEXT : return "DstEXT"; + case BlendOp::eSrcOverEXT : return "SrcOverEXT"; + case BlendOp::eDstOverEXT : return "DstOverEXT"; + case BlendOp::eSrcInEXT : return "SrcInEXT"; + case BlendOp::eDstInEXT : return "DstInEXT"; + case BlendOp::eSrcOutEXT : return "SrcOutEXT"; + case BlendOp::eDstOutEXT : return "DstOutEXT"; + case BlendOp::eSrcAtopEXT : return "SrcAtopEXT"; + case BlendOp::eDstAtopEXT : return "DstAtopEXT"; + case BlendOp::eXorEXT : return "XorEXT"; + case BlendOp::eMultiplyEXT : return "MultiplyEXT"; + case BlendOp::eScreenEXT : return "ScreenEXT"; + case BlendOp::eOverlayEXT : return "OverlayEXT"; + case BlendOp::eDarkenEXT : return "DarkenEXT"; + case BlendOp::eLightenEXT : return "LightenEXT"; + case BlendOp::eColordodgeEXT : return "ColordodgeEXT"; + case BlendOp::eColorburnEXT : return "ColorburnEXT"; + case BlendOp::eHardlightEXT : return "HardlightEXT"; + case BlendOp::eSoftlightEXT : return "SoftlightEXT"; + case BlendOp::eDifferenceEXT : return "DifferenceEXT"; + case BlendOp::eExclusionEXT : return "ExclusionEXT"; + case BlendOp::eInvertEXT : return "InvertEXT"; + case BlendOp::eInvertRgbEXT : return "InvertRgbEXT"; + case BlendOp::eLineardodgeEXT : return "LineardodgeEXT"; + case BlendOp::eLinearburnEXT : return "LinearburnEXT"; + case BlendOp::eVividlightEXT : return "VividlightEXT"; + case BlendOp::eLinearlightEXT : return "LinearlightEXT"; + case BlendOp::ePinlightEXT : return "PinlightEXT"; + case BlendOp::eHardmixEXT : return "HardmixEXT"; + case BlendOp::eHslHueEXT : return "HslHueEXT"; + case BlendOp::eHslSaturationEXT : return "HslSaturationEXT"; + case BlendOp::eHslColorEXT : return "HslColorEXT"; + case BlendOp::eHslLuminosityEXT : return "HslLuminosityEXT"; + case BlendOp::ePlusEXT : return "PlusEXT"; + case BlendOp::ePlusClampedEXT : return "PlusClampedEXT"; + case BlendOp::ePlusClampedAlphaEXT: return "PlusClampedAlphaEXT"; + case BlendOp::ePlusDarkerEXT : return "PlusDarkerEXT"; + case BlendOp::eMinusEXT : return "MinusEXT"; + case BlendOp::eMinusClampedEXT : return "MinusClampedEXT"; + case BlendOp::eContrastEXT : return "ContrastEXT"; + case BlendOp::eInvertOvgEXT : return "InvertOvgEXT"; + case BlendOp::eRedEXT : return "RedEXT"; + case BlendOp::eGreenEXT : return "GreenEXT"; + case BlendOp::eBlueEXT : return "BlueEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ColorComponentFlagBits value ) + { + switch ( value ) + { + case ColorComponentFlagBits::eR: return "R"; + case ColorComponentFlagBits::eG: return "G"; + case ColorComponentFlagBits::eB: return "B"; + case ColorComponentFlagBits::eA: return "A"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CompareOp value ) + { + switch ( value ) + { + case CompareOp::eNever : return "Never"; + case CompareOp::eLess : return "Less"; + case CompareOp::eEqual : return "Equal"; + case CompareOp::eLessOrEqual : return "LessOrEqual"; + case CompareOp::eGreater : return "Greater"; + case CompareOp::eNotEqual : return "NotEqual"; + case CompareOp::eGreaterOrEqual: return "GreaterOrEqual"; + case CompareOp::eAlways : return "Always"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CullModeFlagBits value ) + { + switch ( value ) + { + case CullModeFlagBits::eNone : return "None"; + case CullModeFlagBits::eFront : return "Front"; + case CullModeFlagBits::eBack : return "Back"; + case CullModeFlagBits::eFrontAndBack: return "FrontAndBack"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DynamicState value ) + { + switch ( value ) + { + case DynamicState::eViewport : return "Viewport"; + case DynamicState::eScissor : return "Scissor"; + case DynamicState::eLineWidth : return "LineWidth"; + case DynamicState::eDepthBias : return "DepthBias"; + case DynamicState::eBlendConstants : return "BlendConstants"; + case DynamicState::eDepthBounds : return "DepthBounds"; + case DynamicState::eStencilCompareMask : return "StencilCompareMask"; + case DynamicState::eStencilWriteMask : return "StencilWriteMask"; + case DynamicState::eStencilReference : return "StencilReference"; + case DynamicState::eCullMode : return "CullMode"; + case DynamicState::eFrontFace : return "FrontFace"; + case DynamicState::ePrimitiveTopology : return "PrimitiveTopology"; + case DynamicState::eViewportWithCount : return "ViewportWithCount"; + case DynamicState::eScissorWithCount : return "ScissorWithCount"; + case DynamicState::eVertexInputBindingStride : return "VertexInputBindingStride"; + case DynamicState::eDepthTestEnable : return "DepthTestEnable"; + case DynamicState::eDepthWriteEnable : return "DepthWriteEnable"; + case DynamicState::eDepthCompareOp : return "DepthCompareOp"; + case DynamicState::eDepthBoundsTestEnable : return "DepthBoundsTestEnable"; + case DynamicState::eStencilTestEnable : return "StencilTestEnable"; + case DynamicState::eStencilOp : return "StencilOp"; + case DynamicState::eRasterizerDiscardEnable : return "RasterizerDiscardEnable"; + case DynamicState::eDepthBiasEnable : return "DepthBiasEnable"; + case DynamicState::ePrimitiveRestartEnable : return "PrimitiveRestartEnable"; + case DynamicState::eLineStipple : return "LineStipple"; + case DynamicState::eViewportWScalingNV : return "ViewportWScalingNV"; + case DynamicState::eDiscardRectangleEXT : return "DiscardRectangleEXT"; + case DynamicState::eDiscardRectangleEnableEXT : return "DiscardRectangleEnableEXT"; + case DynamicState::eDiscardRectangleModeEXT : return "DiscardRectangleModeEXT"; + case DynamicState::eSampleLocationsEXT : return "SampleLocationsEXT"; + case DynamicState::eRayTracingPipelineStackSizeKHR : return "RayTracingPipelineStackSizeKHR"; + case DynamicState::eViewportShadingRatePaletteNV : return "ViewportShadingRatePaletteNV"; + case DynamicState::eViewportCoarseSampleOrderNV : return "ViewportCoarseSampleOrderNV"; + case DynamicState::eExclusiveScissorEnableNV : return "ExclusiveScissorEnableNV"; + case DynamicState::eExclusiveScissorNV : return "ExclusiveScissorNV"; + case DynamicState::eFragmentShadingRateKHR : return "FragmentShadingRateKHR"; + case DynamicState::eVertexInputEXT : return "VertexInputEXT"; + case DynamicState::ePatchControlPointsEXT : return "PatchControlPointsEXT"; + case DynamicState::eLogicOpEXT : return "LogicOpEXT"; + case DynamicState::eColorWriteEnableEXT : return "ColorWriteEnableEXT"; + case DynamicState::eDepthClampEnableEXT : return "DepthClampEnableEXT"; + case DynamicState::ePolygonModeEXT : return "PolygonModeEXT"; + case DynamicState::eRasterizationSamplesEXT : return "RasterizationSamplesEXT"; + case DynamicState::eSampleMaskEXT : return "SampleMaskEXT"; + case DynamicState::eAlphaToCoverageEnableEXT : return "AlphaToCoverageEnableEXT"; + case DynamicState::eAlphaToOneEnableEXT : return "AlphaToOneEnableEXT"; + case DynamicState::eLogicOpEnableEXT : return "LogicOpEnableEXT"; + case DynamicState::eColorBlendEnableEXT : return "ColorBlendEnableEXT"; + case DynamicState::eColorBlendEquationEXT : return "ColorBlendEquationEXT"; + case DynamicState::eColorWriteMaskEXT : return "ColorWriteMaskEXT"; + case DynamicState::eTessellationDomainOriginEXT : return "TessellationDomainOriginEXT"; + case DynamicState::eRasterizationStreamEXT : return "RasterizationStreamEXT"; + case DynamicState::eConservativeRasterizationModeEXT : return "ConservativeRasterizationModeEXT"; + case DynamicState::eExtraPrimitiveOverestimationSizeEXT: return "ExtraPrimitiveOverestimationSizeEXT"; + case DynamicState::eDepthClipEnableEXT : return "DepthClipEnableEXT"; + case DynamicState::eSampleLocationsEnableEXT : return "SampleLocationsEnableEXT"; + case DynamicState::eColorBlendAdvancedEXT : return "ColorBlendAdvancedEXT"; + case DynamicState::eProvokingVertexModeEXT : return "ProvokingVertexModeEXT"; + case DynamicState::eLineRasterizationModeEXT : return "LineRasterizationModeEXT"; + case DynamicState::eLineStippleEnableEXT : return "LineStippleEnableEXT"; + case DynamicState::eDepthClipNegativeOneToOneEXT : return "DepthClipNegativeOneToOneEXT"; + case DynamicState::eViewportWScalingEnableNV : return "ViewportWScalingEnableNV"; + case DynamicState::eViewportSwizzleNV : return "ViewportSwizzleNV"; + case DynamicState::eCoverageToColorEnableNV : return "CoverageToColorEnableNV"; + case DynamicState::eCoverageToColorLocationNV : return "CoverageToColorLocationNV"; + case DynamicState::eCoverageModulationModeNV : return "CoverageModulationModeNV"; + case DynamicState::eCoverageModulationTableEnableNV : return "CoverageModulationTableEnableNV"; + case DynamicState::eCoverageModulationTableNV : return "CoverageModulationTableNV"; + case DynamicState::eShadingRateImageEnableNV : return "ShadingRateImageEnableNV"; + case DynamicState::eRepresentativeFragmentTestEnableNV : return "RepresentativeFragmentTestEnableNV"; + case DynamicState::eCoverageReductionModeNV : return "CoverageReductionModeNV"; + case DynamicState::eAttachmentFeedbackLoopEnableEXT : return "AttachmentFeedbackLoopEnableEXT"; + case DynamicState::eDepthClampRangeEXT : return "DepthClampRangeEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FrontFace value ) + { + switch ( value ) + { + case FrontFace::eCounterClockwise: return "CounterClockwise"; + case FrontFace::eClockwise : return "Clockwise"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( LogicOp value ) + { + switch ( value ) + { + case LogicOp::eClear : return "Clear"; + case LogicOp::eAnd : return "And"; + case LogicOp::eAndReverse : return "AndReverse"; + case LogicOp::eCopy : return "Copy"; + case LogicOp::eAndInverted : return "AndInverted"; + case LogicOp::eNoOp : return "NoOp"; + case LogicOp::eXor : return "Xor"; + case LogicOp::eOr : return "Or"; + case LogicOp::eNor : return "Nor"; + case LogicOp::eEquivalent : return "Equivalent"; + case LogicOp::eInvert : return "Invert"; + case LogicOp::eOrReverse : return "OrReverse"; + case LogicOp::eCopyInverted: return "CopyInverted"; + case LogicOp::eOrInverted : return "OrInverted"; + case LogicOp::eNand : return "Nand"; + case LogicOp::eSet : return "Set"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCreateFlagBits value ) + { + switch ( value ) + { + case PipelineCreateFlagBits::eDisableOptimization : return "DisableOptimization"; + case PipelineCreateFlagBits::eAllowDerivatives : return "AllowDerivatives"; + case PipelineCreateFlagBits::eDerivative : return "Derivative"; + case PipelineCreateFlagBits::eViewIndexFromDeviceIndex : return "ViewIndexFromDeviceIndex"; + case PipelineCreateFlagBits::eDispatchBase : return "DispatchBase"; + case PipelineCreateFlagBits::eFailOnPipelineCompileRequired : return "FailOnPipelineCompileRequired"; + case PipelineCreateFlagBits::eEarlyReturnOnFailure : return "EarlyReturnOnFailure"; + case PipelineCreateFlagBits::eNoProtectedAccess : return "NoProtectedAccess"; + case PipelineCreateFlagBits::eProtectedAccessOnly : return "ProtectedAccessOnly"; + case PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR : return "RayTracingNoNullAnyHitShadersKHR"; + case PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR : return "RayTracingNoNullClosestHitShadersKHR"; + case PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR : return "RayTracingNoNullMissShadersKHR"; + case PipelineCreateFlagBits::eRayTracingNoNullIntersectionShadersKHR : return "RayTracingNoNullIntersectionShadersKHR"; + case PipelineCreateFlagBits::eRayTracingSkipTrianglesKHR : return "RayTracingSkipTrianglesKHR"; + case PipelineCreateFlagBits::eRayTracingSkipAabbsKHR : return "RayTracingSkipAabbsKHR"; + case PipelineCreateFlagBits::eRayTracingShaderGroupHandleCaptureReplayKHR: return "RayTracingShaderGroupHandleCaptureReplayKHR"; + case PipelineCreateFlagBits::eDeferCompileNV : return "DeferCompileNV"; + case PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT : return "RenderingFragmentDensityMapAttachmentEXT"; + case PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR : return "RenderingFragmentShadingRateAttachmentKHR"; + case PipelineCreateFlagBits::eCaptureStatisticsKHR : return "CaptureStatisticsKHR"; + case PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR : return "CaptureInternalRepresentationsKHR"; + case PipelineCreateFlagBits::eIndirectBindableNV : return "IndirectBindableNV"; + case PipelineCreateFlagBits::eLibraryKHR : return "LibraryKHR"; + case PipelineCreateFlagBits::eDescriptorBufferEXT : return "DescriptorBufferEXT"; + case PipelineCreateFlagBits::eRetainLinkTimeOptimizationInfoEXT : return "RetainLinkTimeOptimizationInfoEXT"; + case PipelineCreateFlagBits::eLinkTimeOptimizationEXT : return "LinkTimeOptimizationEXT"; + case PipelineCreateFlagBits::eRayTracingAllowMotionNV : return "RayTracingAllowMotionNV"; + case PipelineCreateFlagBits::eColorAttachmentFeedbackLoopEXT : return "ColorAttachmentFeedbackLoopEXT"; + case PipelineCreateFlagBits::eDepthStencilAttachmentFeedbackLoopEXT : return "DepthStencilAttachmentFeedbackLoopEXT"; + case PipelineCreateFlagBits::eRayTracingOpacityMicromapEXT : return "RayTracingOpacityMicromapEXT"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case PipelineCreateFlagBits::eRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineShaderStageCreateFlagBits value ) + { + switch ( value ) + { + case PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize: return "AllowVaryingSubgroupSize"; + case PipelineShaderStageCreateFlagBits::eRequireFullSubgroups : return "RequireFullSubgroups"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PolygonMode value ) + { + switch ( value ) + { + case PolygonMode::eFill : return "Fill"; + case PolygonMode::eLine : return "Line"; + case PolygonMode::ePoint : return "Point"; + case PolygonMode::eFillRectangleNV: return "FillRectangleNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PrimitiveTopology value ) + { + switch ( value ) + { + case PrimitiveTopology::ePointList : return "PointList"; + case PrimitiveTopology::eLineList : return "LineList"; + case PrimitiveTopology::eLineStrip : return "LineStrip"; + case PrimitiveTopology::eTriangleList : return "TriangleList"; + case PrimitiveTopology::eTriangleStrip : return "TriangleStrip"; + case PrimitiveTopology::eTriangleFan : return "TriangleFan"; + case PrimitiveTopology::eLineListWithAdjacency : return "LineListWithAdjacency"; + case PrimitiveTopology::eLineStripWithAdjacency : return "LineStripWithAdjacency"; + case PrimitiveTopology::eTriangleListWithAdjacency : return "TriangleListWithAdjacency"; + case PrimitiveTopology::eTriangleStripWithAdjacency: return "TriangleStripWithAdjacency"; + case PrimitiveTopology::ePatchList : return "PatchList"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderStageFlagBits value ) + { + switch ( value ) + { + case ShaderStageFlagBits::eVertex : return "Vertex"; + case ShaderStageFlagBits::eTessellationControl : return "TessellationControl"; + case ShaderStageFlagBits::eTessellationEvaluation: return "TessellationEvaluation"; + case ShaderStageFlagBits::eGeometry : return "Geometry"; + case ShaderStageFlagBits::eFragment : return "Fragment"; + case ShaderStageFlagBits::eCompute : return "Compute"; + case ShaderStageFlagBits::eAllGraphics : return "AllGraphics"; + case ShaderStageFlagBits::eAll : return "All"; + case ShaderStageFlagBits::eRaygenKHR : return "RaygenKHR"; + case ShaderStageFlagBits::eAnyHitKHR : return "AnyHitKHR"; + case ShaderStageFlagBits::eClosestHitKHR : return "ClosestHitKHR"; + case ShaderStageFlagBits::eMissKHR : return "MissKHR"; + case ShaderStageFlagBits::eIntersectionKHR : return "IntersectionKHR"; + case ShaderStageFlagBits::eCallableKHR : return "CallableKHR"; + case ShaderStageFlagBits::eTaskEXT : return "TaskEXT"; + case ShaderStageFlagBits::eMeshEXT : return "MeshEXT"; + case ShaderStageFlagBits::eSubpassShadingHUAWEI : return "SubpassShadingHUAWEI"; + case ShaderStageFlagBits::eClusterCullingHUAWEI : return "ClusterCullingHUAWEI"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( StencilOp value ) + { + switch ( value ) + { + case StencilOp::eKeep : return "Keep"; + case StencilOp::eZero : return "Zero"; + case StencilOp::eReplace : return "Replace"; + case StencilOp::eIncrementAndClamp: return "IncrementAndClamp"; + case StencilOp::eDecrementAndClamp: return "DecrementAndClamp"; + case StencilOp::eInvert : return "Invert"; + case StencilOp::eIncrementAndWrap : return "IncrementAndWrap"; + case StencilOp::eDecrementAndWrap : return "DecrementAndWrap"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VertexInputRate value ) + { + switch ( value ) + { + case VertexInputRate::eVertex : return "Vertex"; + case VertexInputRate::eInstance: return "Instance"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineColorBlendStateCreateFlagBits value ) + { + switch ( value ) + { + case PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessEXT: return "RasterizationOrderAttachmentAccessEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineDepthStencilStateCreateFlagBits value ) + { + switch ( value ) + { + case PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessEXT : return "RasterizationOrderAttachmentDepthAccessEXT"; + case PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessEXT: return "RasterizationOrderAttachmentStencilAccessEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineDynamicStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineInputAssemblyStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineLayoutCreateFlagBits value ) + { + switch ( value ) + { + case PipelineLayoutCreateFlagBits::eIndependentSetsEXT: return "IndependentSetsEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineMultisampleStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineTessellationStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineVertexInputStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineViewportStateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BorderColor value ) + { + switch ( value ) + { + case BorderColor::eFloatTransparentBlack: return "FloatTransparentBlack"; + case BorderColor::eIntTransparentBlack : return "IntTransparentBlack"; + case BorderColor::eFloatOpaqueBlack : return "FloatOpaqueBlack"; + case BorderColor::eIntOpaqueBlack : return "IntOpaqueBlack"; + case BorderColor::eFloatOpaqueWhite : return "FloatOpaqueWhite"; + case BorderColor::eIntOpaqueWhite : return "IntOpaqueWhite"; + case BorderColor::eFloatCustomEXT : return "FloatCustomEXT"; + case BorderColor::eIntCustomEXT : return "IntCustomEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( Filter value ) + { + switch ( value ) + { + case Filter::eNearest : return "Nearest"; + case Filter::eLinear : return "Linear"; + case Filter::eCubicEXT: return "CubicEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SamplerAddressMode value ) + { + switch ( value ) + { + case SamplerAddressMode::eRepeat : return "Repeat"; + case SamplerAddressMode::eMirroredRepeat : return "MirroredRepeat"; + case SamplerAddressMode::eClampToEdge : return "ClampToEdge"; + case SamplerAddressMode::eClampToBorder : return "ClampToBorder"; + case SamplerAddressMode::eMirrorClampToEdge: return "MirrorClampToEdge"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SamplerCreateFlagBits value ) + { + switch ( value ) + { + case SamplerCreateFlagBits::eSubsampledEXT : return "SubsampledEXT"; + case SamplerCreateFlagBits::eSubsampledCoarseReconstructionEXT: return "SubsampledCoarseReconstructionEXT"; + case SamplerCreateFlagBits::eDescriptorBufferCaptureReplayEXT : return "DescriptorBufferCaptureReplayEXT"; + case SamplerCreateFlagBits::eNonSeamlessCubeMapEXT : return "NonSeamlessCubeMapEXT"; + case SamplerCreateFlagBits::eImageProcessingQCOM : return "ImageProcessingQCOM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SamplerMipmapMode value ) + { + switch ( value ) + { + case SamplerMipmapMode::eNearest: return "Nearest"; + case SamplerMipmapMode::eLinear : return "Linear"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorPoolCreateFlagBits value ) + { + switch ( value ) + { + case DescriptorPoolCreateFlagBits::eFreeDescriptorSet : return "FreeDescriptorSet"; + case DescriptorPoolCreateFlagBits::eUpdateAfterBind : return "UpdateAfterBind"; + case DescriptorPoolCreateFlagBits::eHostOnlyEXT : return "HostOnlyEXT"; + case DescriptorPoolCreateFlagBits::eAllowOverallocationSetsNV : return "AllowOverallocationSetsNV"; + case DescriptorPoolCreateFlagBits::eAllowOverallocationPoolsNV: return "AllowOverallocationPoolsNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorSetLayoutCreateFlagBits value ) + { + switch ( value ) + { + case DescriptorSetLayoutCreateFlagBits::eUpdateAfterBindPool : return "UpdateAfterBindPool"; + case DescriptorSetLayoutCreateFlagBits::ePushDescriptor : return "PushDescriptor"; + case DescriptorSetLayoutCreateFlagBits::eDescriptorBufferEXT : return "DescriptorBufferEXT"; + case DescriptorSetLayoutCreateFlagBits::eEmbeddedImmutableSamplersEXT: return "EmbeddedImmutableSamplersEXT"; + case DescriptorSetLayoutCreateFlagBits::eIndirectBindableNV : return "IndirectBindableNV"; + case DescriptorSetLayoutCreateFlagBits::eHostOnlyPoolEXT : return "HostOnlyPoolEXT"; + case DescriptorSetLayoutCreateFlagBits::ePerStageNV : return "PerStageNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorType value ) + { + switch ( value ) + { + case DescriptorType::eSampler : return "Sampler"; + case DescriptorType::eCombinedImageSampler : return "CombinedImageSampler"; + case DescriptorType::eSampledImage : return "SampledImage"; + case DescriptorType::eStorageImage : return "StorageImage"; + case DescriptorType::eUniformTexelBuffer : return "UniformTexelBuffer"; + case DescriptorType::eStorageTexelBuffer : return "StorageTexelBuffer"; + case DescriptorType::eUniformBuffer : return "UniformBuffer"; + case DescriptorType::eStorageBuffer : return "StorageBuffer"; + case DescriptorType::eUniformBufferDynamic : return "UniformBufferDynamic"; + case DescriptorType::eStorageBufferDynamic : return "StorageBufferDynamic"; + case DescriptorType::eInputAttachment : return "InputAttachment"; + case DescriptorType::eInlineUniformBlock : return "InlineUniformBlock"; + case DescriptorType::eAccelerationStructureKHR : return "AccelerationStructureKHR"; + case DescriptorType::eAccelerationStructureNV : return "AccelerationStructureNV"; + case DescriptorType::eSampleWeightImageQCOM : return "SampleWeightImageQCOM"; + case DescriptorType::eBlockMatchImageQCOM : return "BlockMatchImageQCOM"; + case DescriptorType::eTensorARM : return "TensorARM"; + case DescriptorType::eMutableEXT : return "MutableEXT"; + case DescriptorType::ePartitionedAccelerationStructureNV: return "PartitionedAccelerationStructureNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorPoolResetFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccessFlagBits value ) + { + switch ( value ) + { + case AccessFlagBits::eIndirectCommandRead : return "IndirectCommandRead"; + case AccessFlagBits::eIndexRead : return "IndexRead"; + case AccessFlagBits::eVertexAttributeRead : return "VertexAttributeRead"; + case AccessFlagBits::eUniformRead : return "UniformRead"; + case AccessFlagBits::eInputAttachmentRead : return "InputAttachmentRead"; + case AccessFlagBits::eShaderRead : return "ShaderRead"; + case AccessFlagBits::eShaderWrite : return "ShaderWrite"; + case AccessFlagBits::eColorAttachmentRead : return "ColorAttachmentRead"; + case AccessFlagBits::eColorAttachmentWrite : return "ColorAttachmentWrite"; + case AccessFlagBits::eDepthStencilAttachmentRead : return "DepthStencilAttachmentRead"; + case AccessFlagBits::eDepthStencilAttachmentWrite : return "DepthStencilAttachmentWrite"; + case AccessFlagBits::eTransferRead : return "TransferRead"; + case AccessFlagBits::eTransferWrite : return "TransferWrite"; + case AccessFlagBits::eHostRead : return "HostRead"; + case AccessFlagBits::eHostWrite : return "HostWrite"; + case AccessFlagBits::eMemoryRead : return "MemoryRead"; + case AccessFlagBits::eMemoryWrite : return "MemoryWrite"; + case AccessFlagBits::eNone : return "None"; + case AccessFlagBits::eTransformFeedbackWriteEXT : return "TransformFeedbackWriteEXT"; + case AccessFlagBits::eTransformFeedbackCounterReadEXT : return "TransformFeedbackCounterReadEXT"; + case AccessFlagBits::eTransformFeedbackCounterWriteEXT : return "TransformFeedbackCounterWriteEXT"; + case AccessFlagBits::eConditionalRenderingReadEXT : return "ConditionalRenderingReadEXT"; + case AccessFlagBits::eColorAttachmentReadNoncoherentEXT : return "ColorAttachmentReadNoncoherentEXT"; + case AccessFlagBits::eAccelerationStructureReadKHR : return "AccelerationStructureReadKHR"; + case AccessFlagBits::eAccelerationStructureWriteKHR : return "AccelerationStructureWriteKHR"; + case AccessFlagBits::eFragmentDensityMapReadEXT : return "FragmentDensityMapReadEXT"; + case AccessFlagBits::eFragmentShadingRateAttachmentReadKHR: return "FragmentShadingRateAttachmentReadKHR"; + case AccessFlagBits::eCommandPreprocessReadEXT : return "CommandPreprocessReadEXT"; + case AccessFlagBits::eCommandPreprocessWriteEXT : return "CommandPreprocessWriteEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AttachmentDescriptionFlagBits value ) + { + switch ( value ) + { + case AttachmentDescriptionFlagBits::eMayAlias: return "MayAlias"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AttachmentLoadOp value ) + { + switch ( value ) + { + case AttachmentLoadOp::eLoad : return "Load"; + case AttachmentLoadOp::eClear : return "Clear"; + case AttachmentLoadOp::eDontCare: return "DontCare"; + case AttachmentLoadOp::eNone : return "None"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AttachmentStoreOp value ) + { + switch ( value ) + { + case AttachmentStoreOp::eStore : return "Store"; + case AttachmentStoreOp::eDontCare: return "DontCare"; + case AttachmentStoreOp::eNone : return "None"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DependencyFlagBits value ) + { + switch ( value ) + { + case DependencyFlagBits::eByRegion : return "ByRegion"; + case DependencyFlagBits::eDeviceGroup : return "DeviceGroup"; + case DependencyFlagBits::eViewLocal : return "ViewLocal"; + case DependencyFlagBits::eFeedbackLoopEXT : return "FeedbackLoopEXT"; + case DependencyFlagBits::eQueueFamilyOwnershipTransferUseAllStagesKHR: return "QueueFamilyOwnershipTransferUseAllStagesKHR"; + case DependencyFlagBits::eAsymmetricEventKHR : return "AsymmetricEventKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FramebufferCreateFlagBits value ) + { + switch ( value ) + { + case FramebufferCreateFlagBits::eImageless: return "Imageless"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineBindPoint value ) + { + switch ( value ) + { + case PipelineBindPoint::eGraphics: return "Graphics"; + case PipelineBindPoint::eCompute : return "Compute"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case PipelineBindPoint::eExecutionGraphAMDX: return "ExecutionGraphAMDX"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case PipelineBindPoint::eRayTracingKHR : return "RayTracingKHR"; + case PipelineBindPoint::eSubpassShadingHUAWEI: return "SubpassShadingHUAWEI"; + case PipelineBindPoint::eDataGraphARM : return "DataGraphARM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RenderPassCreateFlagBits value ) + { + switch ( value ) + { + case RenderPassCreateFlagBits::eTransformQCOM : return "TransformQCOM"; + case RenderPassCreateFlagBits::ePerLayerFragmentDensityVALVE: return "PerLayerFragmentDensityVALVE"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SubpassDescriptionFlagBits value ) + { + switch ( value ) + { + case SubpassDescriptionFlagBits::ePerViewAttributesNVX : return "PerViewAttributesNVX"; + case SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX : return "PerViewPositionXOnlyNVX"; + case SubpassDescriptionFlagBits::eFragmentRegionQCOM : return "FragmentRegionQCOM"; + case SubpassDescriptionFlagBits::eShaderResolveQCOM : return "ShaderResolveQCOM"; + case SubpassDescriptionFlagBits::eTileShadingApronQCOM : return "TileShadingApronQCOM"; + case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessEXT : return "RasterizationOrderAttachmentColorAccessEXT"; + case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessEXT : return "RasterizationOrderAttachmentDepthAccessEXT"; + case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessEXT: return "RasterizationOrderAttachmentStencilAccessEXT"; + case SubpassDescriptionFlagBits::eEnableLegacyDitheringEXT : return "EnableLegacyDitheringEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandPoolCreateFlagBits value ) + { + switch ( value ) + { + case CommandPoolCreateFlagBits::eTransient : return "Transient"; + case CommandPoolCreateFlagBits::eResetCommandBuffer: return "ResetCommandBuffer"; + case CommandPoolCreateFlagBits::eProtected : return "Protected"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandPoolResetFlagBits value ) + { + switch ( value ) + { + case CommandPoolResetFlagBits::eReleaseResources: return "ReleaseResources"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandBufferLevel value ) + { + switch ( value ) + { + case CommandBufferLevel::ePrimary : return "Primary"; + case CommandBufferLevel::eSecondary: return "Secondary"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandBufferResetFlagBits value ) + { + switch ( value ) + { + case CommandBufferResetFlagBits::eReleaseResources: return "ReleaseResources"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandBufferUsageFlagBits value ) + { + switch ( value ) + { + case CommandBufferUsageFlagBits::eOneTimeSubmit : return "OneTimeSubmit"; + case CommandBufferUsageFlagBits::eRenderPassContinue: return "RenderPassContinue"; + case CommandBufferUsageFlagBits::eSimultaneousUse : return "SimultaneousUse"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryControlFlagBits value ) + { + switch ( value ) + { + case QueryControlFlagBits::ePrecise: return "Precise"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndexType value ) + { + switch ( value ) + { + case IndexType::eUint16 : return "Uint16"; + case IndexType::eUint32 : return "Uint32"; + case IndexType::eUint8 : return "Uint8"; + case IndexType::eNoneKHR: return "NoneKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( StencilFaceFlagBits value ) + { + switch ( value ) + { + case StencilFaceFlagBits::eFront : return "Front"; + case StencilFaceFlagBits::eBack : return "Back"; + case StencilFaceFlagBits::eFrontAndBack: return "FrontAndBack"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SubpassContents value ) + { + switch ( value ) + { + case SubpassContents::eInline : return "Inline"; + case SubpassContents::eSecondaryCommandBuffers : return "SecondaryCommandBuffers"; + case SubpassContents::eInlineAndSecondaryCommandBuffersKHR: return "InlineAndSecondaryCommandBuffersKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_VERSION_1_1 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SubgroupFeatureFlagBits value ) + { + switch ( value ) + { + case SubgroupFeatureFlagBits::eBasic : return "Basic"; + case SubgroupFeatureFlagBits::eVote : return "Vote"; + case SubgroupFeatureFlagBits::eArithmetic : return "Arithmetic"; + case SubgroupFeatureFlagBits::eBallot : return "Ballot"; + case SubgroupFeatureFlagBits::eShuffle : return "Shuffle"; + case SubgroupFeatureFlagBits::eShuffleRelative: return "ShuffleRelative"; + case SubgroupFeatureFlagBits::eClustered : return "Clustered"; + case SubgroupFeatureFlagBits::eQuad : return "Quad"; + case SubgroupFeatureFlagBits::eRotate : return "Rotate"; + case SubgroupFeatureFlagBits::eRotateClustered: return "RotateClustered"; + case SubgroupFeatureFlagBits::ePartitionedNV : return "PartitionedNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PeerMemoryFeatureFlagBits value ) + { + switch ( value ) + { + case PeerMemoryFeatureFlagBits::eCopySrc : return "CopySrc"; + case PeerMemoryFeatureFlagBits::eCopyDst : return "CopyDst"; + case PeerMemoryFeatureFlagBits::eGenericSrc: return "GenericSrc"; + case PeerMemoryFeatureFlagBits::eGenericDst: return "GenericDst"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryAllocateFlagBits value ) + { + switch ( value ) + { + case MemoryAllocateFlagBits::eDeviceMask : return "DeviceMask"; + case MemoryAllocateFlagBits::eDeviceAddress : return "DeviceAddress"; + case MemoryAllocateFlagBits::eDeviceAddressCaptureReplay: return "DeviceAddressCaptureReplay"; + case MemoryAllocateFlagBits::eZeroInitializeEXT : return "ZeroInitializeEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CommandPoolTrimFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PointClippingBehavior value ) + { + switch ( value ) + { + case PointClippingBehavior::eAllClipPlanes : return "AllClipPlanes"; + case PointClippingBehavior::eUserClipPlanesOnly: return "UserClipPlanesOnly"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TessellationDomainOrigin value ) + { + switch ( value ) + { + case TessellationDomainOrigin::eUpperLeft: return "UpperLeft"; + case TessellationDomainOrigin::eLowerLeft: return "LowerLeft"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SamplerYcbcrModelConversion value ) + { + switch ( value ) + { + case SamplerYcbcrModelConversion::eRgbIdentity : return "RgbIdentity"; + case SamplerYcbcrModelConversion::eYcbcrIdentity: return "YcbcrIdentity"; + case SamplerYcbcrModelConversion::eYcbcr709 : return "Ycbcr709"; + case SamplerYcbcrModelConversion::eYcbcr601 : return "Ycbcr601"; + case SamplerYcbcrModelConversion::eYcbcr2020 : return "Ycbcr2020"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SamplerYcbcrRange value ) + { + switch ( value ) + { + case SamplerYcbcrRange::eItuFull : return "ItuFull"; + case SamplerYcbcrRange::eItuNarrow: return "ItuNarrow"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ChromaLocation value ) + { + switch ( value ) + { + case ChromaLocation::eCositedEven: return "CositedEven"; + case ChromaLocation::eMidpoint : return "Midpoint"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorUpdateTemplateType value ) + { + switch ( value ) + { + case DescriptorUpdateTemplateType::eDescriptorSet : return "DescriptorSet"; + case DescriptorUpdateTemplateType::ePushDescriptors: return "PushDescriptors"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorUpdateTemplateCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalMemoryHandleTypeFlagBits value ) + { + switch ( value ) + { + case ExternalMemoryHandleTypeFlagBits::eOpaqueFd : return "OpaqueFd"; + case ExternalMemoryHandleTypeFlagBits::eOpaqueWin32 : return "OpaqueWin32"; + case ExternalMemoryHandleTypeFlagBits::eOpaqueWin32Kmt : return "OpaqueWin32Kmt"; + case ExternalMemoryHandleTypeFlagBits::eD3D11Texture : return "D3D11Texture"; + case ExternalMemoryHandleTypeFlagBits::eD3D11TextureKmt: return "D3D11TextureKmt"; + case ExternalMemoryHandleTypeFlagBits::eD3D12Heap : return "D3D12Heap"; + case ExternalMemoryHandleTypeFlagBits::eD3D12Resource : return "D3D12Resource"; + case ExternalMemoryHandleTypeFlagBits::eDmaBufEXT : return "DmaBufEXT"; +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + case ExternalMemoryHandleTypeFlagBits::eAndroidHardwareBufferANDROID: return "AndroidHardwareBufferANDROID"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + case ExternalMemoryHandleTypeFlagBits::eHostAllocationEXT : return "HostAllocationEXT"; + case ExternalMemoryHandleTypeFlagBits::eHostMappedForeignMemoryEXT: return "HostMappedForeignMemoryEXT"; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + case ExternalMemoryHandleTypeFlagBits::eZirconVmoFUCHSIA: return "ZirconVmoFUCHSIA"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + case ExternalMemoryHandleTypeFlagBits::eRdmaAddressNV: return "RdmaAddressNV"; +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + case ExternalMemoryHandleTypeFlagBits::eScreenBufferQNX: return "ScreenBufferQNX"; +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ +#if defined( VK_USE_PLATFORM_METAL_EXT ) + case ExternalMemoryHandleTypeFlagBits::eMtlbufferEXT : return "MtlbufferEXT"; + case ExternalMemoryHandleTypeFlagBits::eMtltextureEXT: return "MtltextureEXT"; + case ExternalMemoryHandleTypeFlagBits::eMtlheapEXT : return "MtlheapEXT"; +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalMemoryFeatureFlagBits value ) + { + switch ( value ) + { + case ExternalMemoryFeatureFlagBits::eDedicatedOnly: return "DedicatedOnly"; + case ExternalMemoryFeatureFlagBits::eExportable : return "Exportable"; + case ExternalMemoryFeatureFlagBits::eImportable : return "Importable"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalFenceHandleTypeFlagBits value ) + { + switch ( value ) + { + case ExternalFenceHandleTypeFlagBits::eOpaqueFd : return "OpaqueFd"; + case ExternalFenceHandleTypeFlagBits::eOpaqueWin32 : return "OpaqueWin32"; + case ExternalFenceHandleTypeFlagBits::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; + case ExternalFenceHandleTypeFlagBits::eSyncFd : return "SyncFd"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalFenceFeatureFlagBits value ) + { + switch ( value ) + { + case ExternalFenceFeatureFlagBits::eExportable: return "Exportable"; + case ExternalFenceFeatureFlagBits::eImportable: return "Importable"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FenceImportFlagBits value ) + { + switch ( value ) + { + case FenceImportFlagBits::eTemporary: return "Temporary"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SemaphoreImportFlagBits value ) + { + switch ( value ) + { + case SemaphoreImportFlagBits::eTemporary: return "Temporary"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalSemaphoreHandleTypeFlagBits value ) + { + switch ( value ) + { + case ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd : return "OpaqueFd"; + case ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32 : return "OpaqueWin32"; + case ExternalSemaphoreHandleTypeFlagBits::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; + case ExternalSemaphoreHandleTypeFlagBits::eD3D12Fence : return "D3D12Fence"; + case ExternalSemaphoreHandleTypeFlagBits::eSyncFd : return "SyncFd"; +#if defined( VK_USE_PLATFORM_FUCHSIA ) + case ExternalSemaphoreHandleTypeFlagBits::eZirconEventFUCHSIA: return "ZirconEventFUCHSIA"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalSemaphoreFeatureFlagBits value ) + { + switch ( value ) + { + case ExternalSemaphoreFeatureFlagBits::eExportable: return "Exportable"; + case ExternalSemaphoreFeatureFlagBits::eImportable: return "Importable"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_VERSION_1_2 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DriverId value ) + { + switch ( value ) + { + case DriverId::eAmdProprietary : return "AmdProprietary"; + case DriverId::eAmdOpenSource : return "AmdOpenSource"; + case DriverId::eMesaRadv : return "MesaRadv"; + case DriverId::eNvidiaProprietary : return "NvidiaProprietary"; + case DriverId::eIntelProprietaryWindows : return "IntelProprietaryWindows"; + case DriverId::eIntelOpenSourceMESA : return "IntelOpenSourceMESA"; + case DriverId::eImaginationProprietary : return "ImaginationProprietary"; + case DriverId::eQualcommProprietary : return "QualcommProprietary"; + case DriverId::eArmProprietary : return "ArmProprietary"; + case DriverId::eGoogleSwiftshader : return "GoogleSwiftshader"; + case DriverId::eGgpProprietary : return "GgpProprietary"; + case DriverId::eBroadcomProprietary : return "BroadcomProprietary"; + case DriverId::eMesaLlvmpipe : return "MesaLlvmpipe"; + case DriverId::eMoltenvk : return "Moltenvk"; + case DriverId::eCoreaviProprietary : return "CoreaviProprietary"; + case DriverId::eJuiceProprietary : return "JuiceProprietary"; + case DriverId::eVerisiliconProprietary : return "VerisiliconProprietary"; + case DriverId::eMesaTurnip : return "MesaTurnip"; + case DriverId::eMesaV3Dv : return "MesaV3Dv"; + case DriverId::eMesaPanvk : return "MesaPanvk"; + case DriverId::eSamsungProprietary : return "SamsungProprietary"; + case DriverId::eMesaVenus : return "MesaVenus"; + case DriverId::eMesaDozen : return "MesaDozen"; + case DriverId::eMesaNvk : return "MesaNvk"; + case DriverId::eImaginationOpenSourceMESA: return "ImaginationOpenSourceMESA"; + case DriverId::eMesaHoneykrisp : return "MesaHoneykrisp"; + case DriverId::eVulkanScEmulationOnVulkan: return "VulkanScEmulationOnVulkan"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderFloatControlsIndependence value ) + { + switch ( value ) + { + case ShaderFloatControlsIndependence::e32BitOnly: return "32BitOnly"; + case ShaderFloatControlsIndependence::eAll : return "All"; + case ShaderFloatControlsIndependence::eNone : return "None"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DescriptorBindingFlagBits value ) + { + switch ( value ) + { + case DescriptorBindingFlagBits::eUpdateAfterBind : return "UpdateAfterBind"; + case DescriptorBindingFlagBits::eUpdateUnusedWhilePending: return "UpdateUnusedWhilePending"; + case DescriptorBindingFlagBits::ePartiallyBound : return "PartiallyBound"; + case DescriptorBindingFlagBits::eVariableDescriptorCount : return "VariableDescriptorCount"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ResolveModeFlagBits value ) + { + switch ( value ) + { + case ResolveModeFlagBits::eNone : return "None"; + case ResolveModeFlagBits::eSampleZero: return "SampleZero"; + case ResolveModeFlagBits::eAverage : return "Average"; + case ResolveModeFlagBits::eMin : return "Min"; + case ResolveModeFlagBits::eMax : return "Max"; +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + case ResolveModeFlagBits::eExternalFormatDownsampleANDROID: return "ExternalFormatDownsampleANDROID"; +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SamplerReductionMode value ) + { + switch ( value ) + { + case SamplerReductionMode::eWeightedAverage : return "WeightedAverage"; + case SamplerReductionMode::eMin : return "Min"; + case SamplerReductionMode::eMax : return "Max"; + case SamplerReductionMode::eWeightedAverageRangeclampQCOM: return "WeightedAverageRangeclampQCOM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SemaphoreType value ) + { + switch ( value ) + { + case SemaphoreType::eBinary : return "Binary"; + case SemaphoreType::eTimeline: return "Timeline"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SemaphoreWaitFlagBits value ) + { + switch ( value ) + { + case SemaphoreWaitFlagBits::eAny: return "Any"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_VERSION_1_3 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCreationFeedbackFlagBits value ) + { + switch ( value ) + { + case PipelineCreationFeedbackFlagBits::eValid : return "Valid"; + case PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit: return "ApplicationPipelineCacheHit"; + case PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration : return "BasePipelineAcceleration"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ToolPurposeFlagBits value ) + { + switch ( value ) + { + case ToolPurposeFlagBits::eValidation : return "Validation"; + case ToolPurposeFlagBits::eProfiling : return "Profiling"; + case ToolPurposeFlagBits::eTracing : return "Tracing"; + case ToolPurposeFlagBits::eAdditionalFeatures: return "AdditionalFeatures"; + case ToolPurposeFlagBits::eModifyingFeatures : return "ModifyingFeatures"; + case ToolPurposeFlagBits::eDebugReportingEXT : return "DebugReportingEXT"; + case ToolPurposeFlagBits::eDebugMarkersEXT : return "DebugMarkersEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PrivateDataSlotCreateFlagBits ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineStageFlagBits2 value ) + { + switch ( value ) + { + case PipelineStageFlagBits2::eNone : return "None"; + case PipelineStageFlagBits2::eTopOfPipe : return "TopOfPipe"; + case PipelineStageFlagBits2::eDrawIndirect : return "DrawIndirect"; + case PipelineStageFlagBits2::eVertexInput : return "VertexInput"; + case PipelineStageFlagBits2::eVertexShader : return "VertexShader"; + case PipelineStageFlagBits2::eTessellationControlShader : return "TessellationControlShader"; + case PipelineStageFlagBits2::eTessellationEvaluationShader : return "TessellationEvaluationShader"; + case PipelineStageFlagBits2::eGeometryShader : return "GeometryShader"; + case PipelineStageFlagBits2::eFragmentShader : return "FragmentShader"; + case PipelineStageFlagBits2::eEarlyFragmentTests : return "EarlyFragmentTests"; + case PipelineStageFlagBits2::eLateFragmentTests : return "LateFragmentTests"; + case PipelineStageFlagBits2::eColorAttachmentOutput : return "ColorAttachmentOutput"; + case PipelineStageFlagBits2::eComputeShader : return "ComputeShader"; + case PipelineStageFlagBits2::eAllTransfer : return "AllTransfer"; + case PipelineStageFlagBits2::eBottomOfPipe : return "BottomOfPipe"; + case PipelineStageFlagBits2::eHost : return "Host"; + case PipelineStageFlagBits2::eAllGraphics : return "AllGraphics"; + case PipelineStageFlagBits2::eAllCommands : return "AllCommands"; + case PipelineStageFlagBits2::eCopy : return "Copy"; + case PipelineStageFlagBits2::eResolve : return "Resolve"; + case PipelineStageFlagBits2::eBlit : return "Blit"; + case PipelineStageFlagBits2::eClear : return "Clear"; + case PipelineStageFlagBits2::eIndexInput : return "IndexInput"; + case PipelineStageFlagBits2::eVertexAttributeInput : return "VertexAttributeInput"; + case PipelineStageFlagBits2::ePreRasterizationShaders : return "PreRasterizationShaders"; + case PipelineStageFlagBits2::eVideoDecodeKHR : return "VideoDecodeKHR"; + case PipelineStageFlagBits2::eVideoEncodeKHR : return "VideoEncodeKHR"; + case PipelineStageFlagBits2::eTransformFeedbackEXT : return "TransformFeedbackEXT"; + case PipelineStageFlagBits2::eConditionalRenderingEXT : return "ConditionalRenderingEXT"; + case PipelineStageFlagBits2::eCommandPreprocessEXT : return "CommandPreprocessEXT"; + case PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR"; + case PipelineStageFlagBits2::eAccelerationStructureBuildKHR : return "AccelerationStructureBuildKHR"; + case PipelineStageFlagBits2::eRayTracingShaderKHR : return "RayTracingShaderKHR"; + case PipelineStageFlagBits2::eFragmentDensityProcessEXT : return "FragmentDensityProcessEXT"; + case PipelineStageFlagBits2::eTaskShaderEXT : return "TaskShaderEXT"; + case PipelineStageFlagBits2::eMeshShaderEXT : return "MeshShaderEXT"; + case PipelineStageFlagBits2::eSubpassShaderHUAWEI : return "SubpassShaderHUAWEI"; + case PipelineStageFlagBits2::eInvocationMaskHUAWEI : return "InvocationMaskHUAWEI"; + case PipelineStageFlagBits2::eAccelerationStructureCopyKHR : return "AccelerationStructureCopyKHR"; + case PipelineStageFlagBits2::eMicromapBuildEXT : return "MicromapBuildEXT"; + case PipelineStageFlagBits2::eClusterCullingShaderHUAWEI : return "ClusterCullingShaderHUAWEI"; + case PipelineStageFlagBits2::eOpticalFlowNV : return "OpticalFlowNV"; + case PipelineStageFlagBits2::eConvertCooperativeVectorMatrixNV: return "ConvertCooperativeVectorMatrixNV"; + case PipelineStageFlagBits2::eDataGraphARM : return "DataGraphARM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccessFlagBits2 value ) + { + switch ( value ) + { + case AccessFlagBits2::eNone : return "None"; + case AccessFlagBits2::eIndirectCommandRead : return "IndirectCommandRead"; + case AccessFlagBits2::eIndexRead : return "IndexRead"; + case AccessFlagBits2::eVertexAttributeRead : return "VertexAttributeRead"; + case AccessFlagBits2::eUniformRead : return "UniformRead"; + case AccessFlagBits2::eInputAttachmentRead : return "InputAttachmentRead"; + case AccessFlagBits2::eShaderRead : return "ShaderRead"; + case AccessFlagBits2::eShaderWrite : return "ShaderWrite"; + case AccessFlagBits2::eColorAttachmentRead : return "ColorAttachmentRead"; + case AccessFlagBits2::eColorAttachmentWrite : return "ColorAttachmentWrite"; + case AccessFlagBits2::eDepthStencilAttachmentRead : return "DepthStencilAttachmentRead"; + case AccessFlagBits2::eDepthStencilAttachmentWrite : return "DepthStencilAttachmentWrite"; + case AccessFlagBits2::eTransferRead : return "TransferRead"; + case AccessFlagBits2::eTransferWrite : return "TransferWrite"; + case AccessFlagBits2::eHostRead : return "HostRead"; + case AccessFlagBits2::eHostWrite : return "HostWrite"; + case AccessFlagBits2::eMemoryRead : return "MemoryRead"; + case AccessFlagBits2::eMemoryWrite : return "MemoryWrite"; + case AccessFlagBits2::eShaderSampledRead : return "ShaderSampledRead"; + case AccessFlagBits2::eShaderStorageRead : return "ShaderStorageRead"; + case AccessFlagBits2::eShaderStorageWrite : return "ShaderStorageWrite"; + case AccessFlagBits2::eVideoDecodeReadKHR : return "VideoDecodeReadKHR"; + case AccessFlagBits2::eVideoDecodeWriteKHR : return "VideoDecodeWriteKHR"; + case AccessFlagBits2::eVideoEncodeReadKHR : return "VideoEncodeReadKHR"; + case AccessFlagBits2::eVideoEncodeWriteKHR : return "VideoEncodeWriteKHR"; + case AccessFlagBits2::eShaderTileAttachmentReadQCOM : return "ShaderTileAttachmentReadQCOM"; + case AccessFlagBits2::eShaderTileAttachmentWriteQCOM : return "ShaderTileAttachmentWriteQCOM"; + case AccessFlagBits2::eTransformFeedbackWriteEXT : return "TransformFeedbackWriteEXT"; + case AccessFlagBits2::eTransformFeedbackCounterReadEXT : return "TransformFeedbackCounterReadEXT"; + case AccessFlagBits2::eTransformFeedbackCounterWriteEXT : return "TransformFeedbackCounterWriteEXT"; + case AccessFlagBits2::eConditionalRenderingReadEXT : return "ConditionalRenderingReadEXT"; + case AccessFlagBits2::eCommandPreprocessReadEXT : return "CommandPreprocessReadEXT"; + case AccessFlagBits2::eCommandPreprocessWriteEXT : return "CommandPreprocessWriteEXT"; + case AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR: return "FragmentShadingRateAttachmentReadKHR"; + case AccessFlagBits2::eAccelerationStructureReadKHR : return "AccelerationStructureReadKHR"; + case AccessFlagBits2::eAccelerationStructureWriteKHR : return "AccelerationStructureWriteKHR"; + case AccessFlagBits2::eFragmentDensityMapReadEXT : return "FragmentDensityMapReadEXT"; + case AccessFlagBits2::eColorAttachmentReadNoncoherentEXT : return "ColorAttachmentReadNoncoherentEXT"; + case AccessFlagBits2::eDescriptorBufferReadEXT : return "DescriptorBufferReadEXT"; + case AccessFlagBits2::eInvocationMaskReadHUAWEI : return "InvocationMaskReadHUAWEI"; + case AccessFlagBits2::eShaderBindingTableReadKHR : return "ShaderBindingTableReadKHR"; + case AccessFlagBits2::eMicromapReadEXT : return "MicromapReadEXT"; + case AccessFlagBits2::eMicromapWriteEXT : return "MicromapWriteEXT"; + case AccessFlagBits2::eOpticalFlowReadNV : return "OpticalFlowReadNV"; + case AccessFlagBits2::eOpticalFlowWriteNV : return "OpticalFlowWriteNV"; + case AccessFlagBits2::eDataGraphReadARM : return "DataGraphReadARM"; + case AccessFlagBits2::eDataGraphWriteARM : return "DataGraphWriteARM"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SubmitFlagBits value ) + { + switch ( value ) + { + case SubmitFlagBits::eProtected: return "Protected"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RenderingFlagBits value ) + { + switch ( value ) + { + case RenderingFlagBits::eContentsSecondaryCommandBuffers: return "ContentsSecondaryCommandBuffers"; + case RenderingFlagBits::eSuspending : return "Suspending"; + case RenderingFlagBits::eResuming : return "Resuming"; + case RenderingFlagBits::eEnableLegacyDitheringEXT : return "EnableLegacyDitheringEXT"; + case RenderingFlagBits::eContentsInlineKHR : return "ContentsInlineKHR"; + case RenderingFlagBits::ePerLayerFragmentDensityVALVE : return "PerLayerFragmentDensityVALVE"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FormatFeatureFlagBits2 value ) + { + switch ( value ) + { + case FormatFeatureFlagBits2::eSampledImage : return "SampledImage"; + case FormatFeatureFlagBits2::eStorageImage : return "StorageImage"; + case FormatFeatureFlagBits2::eStorageImageAtomic : return "StorageImageAtomic"; + case FormatFeatureFlagBits2::eUniformTexelBuffer : return "UniformTexelBuffer"; + case FormatFeatureFlagBits2::eStorageTexelBuffer : return "StorageTexelBuffer"; + case FormatFeatureFlagBits2::eStorageTexelBufferAtomic : return "StorageTexelBufferAtomic"; + case FormatFeatureFlagBits2::eVertexBuffer : return "VertexBuffer"; + case FormatFeatureFlagBits2::eColorAttachment : return "ColorAttachment"; + case FormatFeatureFlagBits2::eColorAttachmentBlend : return "ColorAttachmentBlend"; + case FormatFeatureFlagBits2::eDepthStencilAttachment : return "DepthStencilAttachment"; + case FormatFeatureFlagBits2::eBlitSrc : return "BlitSrc"; + case FormatFeatureFlagBits2::eBlitDst : return "BlitDst"; + case FormatFeatureFlagBits2::eSampledImageFilterLinear : return "SampledImageFilterLinear"; + case FormatFeatureFlagBits2::eTransferSrc : return "TransferSrc"; + case FormatFeatureFlagBits2::eTransferDst : return "TransferDst"; + case FormatFeatureFlagBits2::eSampledImageFilterMinmax : return "SampledImageFilterMinmax"; + case FormatFeatureFlagBits2::eMidpointChromaSamples : return "MidpointChromaSamples"; + case FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter : return "SampledImageYcbcrConversionLinearFilter"; + case FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter: return "SampledImageYcbcrConversionSeparateReconstructionFilter"; + case FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit: return "SampledImageYcbcrConversionChromaReconstructionExplicit"; + case FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable: + return "SampledImageYcbcrConversionChromaReconstructionExplicitForceable"; + case FormatFeatureFlagBits2::eDisjoint : return "Disjoint"; + case FormatFeatureFlagBits2::eCositedChromaSamples : return "CositedChromaSamples"; + case FormatFeatureFlagBits2::eStorageReadWithoutFormat : return "StorageReadWithoutFormat"; + case FormatFeatureFlagBits2::eStorageWriteWithoutFormat : return "StorageWriteWithoutFormat"; + case FormatFeatureFlagBits2::eSampledImageDepthComparison : return "SampledImageDepthComparison"; + case FormatFeatureFlagBits2::eSampledImageFilterCubic : return "SampledImageFilterCubic"; + case FormatFeatureFlagBits2::eHostImageTransfer : return "HostImageTransfer"; + case FormatFeatureFlagBits2::eVideoDecodeOutputKHR : return "VideoDecodeOutputKHR"; + case FormatFeatureFlagBits2::eVideoDecodeDpbKHR : return "VideoDecodeDpbKHR"; + case FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR: return "AccelerationStructureVertexBufferKHR"; + case FormatFeatureFlagBits2::eFragmentDensityMapEXT : return "FragmentDensityMapEXT"; + case FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR : return "FragmentShadingRateAttachmentKHR"; + case FormatFeatureFlagBits2::eVideoEncodeInputKHR : return "VideoEncodeInputKHR"; + case FormatFeatureFlagBits2::eVideoEncodeDpbKHR : return "VideoEncodeDpbKHR"; + case FormatFeatureFlagBits2::eAccelerationStructureRadiusBufferNV : return "AccelerationStructureRadiusBufferNV"; + case FormatFeatureFlagBits2::eLinearColorAttachmentNV : return "LinearColorAttachmentNV"; + case FormatFeatureFlagBits2::eWeightImageQCOM : return "WeightImageQCOM"; + case FormatFeatureFlagBits2::eWeightSampledImageQCOM : return "WeightSampledImageQCOM"; + case FormatFeatureFlagBits2::eBlockMatchingQCOM : return "BlockMatchingQCOM"; + case FormatFeatureFlagBits2::eBoxFilterSampledQCOM : return "BoxFilterSampledQCOM"; + case FormatFeatureFlagBits2::eTensorShaderARM : return "TensorShaderARM"; + case FormatFeatureFlagBits2::eTensorImageAliasingARM : return "TensorImageAliasingARM"; + case FormatFeatureFlagBits2::eOpticalFlowImageNV : return "OpticalFlowImageNV"; + case FormatFeatureFlagBits2::eOpticalFlowVectorNV : return "OpticalFlowVectorNV"; + case FormatFeatureFlagBits2::eOpticalFlowCostNV : return "OpticalFlowCostNV"; + case FormatFeatureFlagBits2::eTensorDataGraphARM : return "TensorDataGraphARM"; + case FormatFeatureFlagBits2::eVideoEncodeQuantizationDeltaMapKHR : return "VideoEncodeQuantizationDeltaMapKHR"; + case FormatFeatureFlagBits2::eVideoEncodeEmphasisMapKHR : return "VideoEncodeEmphasisMapKHR"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_VERSION_1_4 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueueGlobalPriority value ) + { + switch ( value ) + { + case QueueGlobalPriority::eLow : return "Low"; + case QueueGlobalPriority::eMedium : return "Medium"; + case QueueGlobalPriority::eHigh : return "High"; + case QueueGlobalPriority::eRealtime: return "Realtime"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( LineRasterizationMode value ) + { + switch ( value ) + { + case LineRasterizationMode::eDefault : return "Default"; + case LineRasterizationMode::eRectangular : return "Rectangular"; + case LineRasterizationMode::eBresenham : return "Bresenham"; + case LineRasterizationMode::eRectangularSmooth: return "RectangularSmooth"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryUnmapFlagBits value ) + { + switch ( value ) + { + case MemoryUnmapFlagBits::eReserveEXT: return "ReserveEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCreateFlagBits2 value ) + { + switch ( value ) + { + case PipelineCreateFlagBits2::eDisableOptimization : return "DisableOptimization"; + case PipelineCreateFlagBits2::eAllowDerivatives : return "AllowDerivatives"; + case PipelineCreateFlagBits2::eDerivative : return "Derivative"; + case PipelineCreateFlagBits2::eViewIndexFromDeviceIndex : return "ViewIndexFromDeviceIndex"; + case PipelineCreateFlagBits2::eDispatchBase : return "DispatchBase"; + case PipelineCreateFlagBits2::eFailOnPipelineCompileRequired: return "FailOnPipelineCompileRequired"; + case PipelineCreateFlagBits2::eEarlyReturnOnFailure : return "EarlyReturnOnFailure"; + case PipelineCreateFlagBits2::eNoProtectedAccess : return "NoProtectedAccess"; + case PipelineCreateFlagBits2::eProtectedAccessOnly : return "ProtectedAccessOnly"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case PipelineCreateFlagBits2::eExecutionGraphAMDX: return "ExecutionGraphAMDX"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case PipelineCreateFlagBits2::eRayTracingAllowSpheresAndLinearSweptSpheresNV: return "RayTracingAllowSpheresAndLinearSweptSpheresNV"; + case PipelineCreateFlagBits2::eEnableLegacyDitheringEXT : return "EnableLegacyDitheringEXT"; + case PipelineCreateFlagBits2::eDeferCompileNV : return "DeferCompileNV"; + case PipelineCreateFlagBits2::eCaptureStatisticsKHR : return "CaptureStatisticsKHR"; + case PipelineCreateFlagBits2::eCaptureInternalRepresentationsKHR : return "CaptureInternalRepresentationsKHR"; + case PipelineCreateFlagBits2::eLinkTimeOptimizationEXT : return "LinkTimeOptimizationEXT"; + case PipelineCreateFlagBits2::eRetainLinkTimeOptimizationInfoEXT : return "RetainLinkTimeOptimizationInfoEXT"; + case PipelineCreateFlagBits2::eLibraryKHR : return "LibraryKHR"; + case PipelineCreateFlagBits2::eRayTracingSkipTrianglesKHR : return "RayTracingSkipTrianglesKHR"; + case PipelineCreateFlagBits2::eRayTracingSkipAabbsKHR : return "RayTracingSkipAabbsKHR"; + case PipelineCreateFlagBits2::eRayTracingNoNullAnyHitShadersKHR : return "RayTracingNoNullAnyHitShadersKHR"; + case PipelineCreateFlagBits2::eRayTracingNoNullClosestHitShadersKHR : return "RayTracingNoNullClosestHitShadersKHR"; + case PipelineCreateFlagBits2::eRayTracingNoNullMissShadersKHR : return "RayTracingNoNullMissShadersKHR"; + case PipelineCreateFlagBits2::eRayTracingNoNullIntersectionShadersKHR : return "RayTracingNoNullIntersectionShadersKHR"; + case PipelineCreateFlagBits2::eRayTracingShaderGroupHandleCaptureReplayKHR : return "RayTracingShaderGroupHandleCaptureReplayKHR"; + case PipelineCreateFlagBits2::eIndirectBindableNV : return "IndirectBindableNV"; + case PipelineCreateFlagBits2::eRayTracingAllowMotionNV : return "RayTracingAllowMotionNV"; + case PipelineCreateFlagBits2::eRenderingFragmentShadingRateAttachmentKHR : return "RenderingFragmentShadingRateAttachmentKHR"; + case PipelineCreateFlagBits2::eRenderingFragmentDensityMapAttachmentEXT : return "RenderingFragmentDensityMapAttachmentEXT"; + case PipelineCreateFlagBits2::eRayTracingOpacityMicromapEXT : return "RayTracingOpacityMicromapEXT"; + case PipelineCreateFlagBits2::eColorAttachmentFeedbackLoopEXT : return "ColorAttachmentFeedbackLoopEXT"; + case PipelineCreateFlagBits2::eDepthStencilAttachmentFeedbackLoopEXT : return "DepthStencilAttachmentFeedbackLoopEXT"; + case PipelineCreateFlagBits2::eRayTracingDisplacementMicromapNV : return "RayTracingDisplacementMicromapNV"; + case PipelineCreateFlagBits2::eDescriptorBufferEXT : return "DescriptorBufferEXT"; + case PipelineCreateFlagBits2::eDisallowOpacityMicromapARM : return "DisallowOpacityMicromapARM"; + case PipelineCreateFlagBits2::eCaptureDataKHR : return "CaptureDataKHR"; + case PipelineCreateFlagBits2::eIndirectBindableEXT : return "IndirectBindableEXT"; + case PipelineCreateFlagBits2::ePerLayerFragmentDensityVALVE : return "PerLayerFragmentDensityVALVE"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BufferUsageFlagBits2 value ) + { + switch ( value ) + { + case BufferUsageFlagBits2::eTransferSrc : return "TransferSrc"; + case BufferUsageFlagBits2::eTransferDst : return "TransferDst"; + case BufferUsageFlagBits2::eUniformTexelBuffer : return "UniformTexelBuffer"; + case BufferUsageFlagBits2::eStorageTexelBuffer : return "StorageTexelBuffer"; + case BufferUsageFlagBits2::eUniformBuffer : return "UniformBuffer"; + case BufferUsageFlagBits2::eStorageBuffer : return "StorageBuffer"; + case BufferUsageFlagBits2::eIndexBuffer : return "IndexBuffer"; + case BufferUsageFlagBits2::eVertexBuffer : return "VertexBuffer"; + case BufferUsageFlagBits2::eIndirectBuffer : return "IndirectBuffer"; + case BufferUsageFlagBits2::eShaderDeviceAddress: return "ShaderDeviceAddress"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case BufferUsageFlagBits2::eExecutionGraphScratchAMDX: return "ExecutionGraphScratchAMDX"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case BufferUsageFlagBits2::eConditionalRenderingEXT : return "ConditionalRenderingEXT"; + case BufferUsageFlagBits2::eShaderBindingTableKHR : return "ShaderBindingTableKHR"; + case BufferUsageFlagBits2::eTransformFeedbackBufferEXT : return "TransformFeedbackBufferEXT"; + case BufferUsageFlagBits2::eTransformFeedbackCounterBufferEXT : return "TransformFeedbackCounterBufferEXT"; + case BufferUsageFlagBits2::eVideoDecodeSrcKHR : return "VideoDecodeSrcKHR"; + case BufferUsageFlagBits2::eVideoDecodeDstKHR : return "VideoDecodeDstKHR"; + case BufferUsageFlagBits2::eVideoEncodeDstKHR : return "VideoEncodeDstKHR"; + case BufferUsageFlagBits2::eVideoEncodeSrcKHR : return "VideoEncodeSrcKHR"; + case BufferUsageFlagBits2::eAccelerationStructureBuildInputReadOnlyKHR: return "AccelerationStructureBuildInputReadOnlyKHR"; + case BufferUsageFlagBits2::eAccelerationStructureStorageKHR : return "AccelerationStructureStorageKHR"; + case BufferUsageFlagBits2::eSamplerDescriptorBufferEXT : return "SamplerDescriptorBufferEXT"; + case BufferUsageFlagBits2::eResourceDescriptorBufferEXT : return "ResourceDescriptorBufferEXT"; + case BufferUsageFlagBits2::ePushDescriptorsDescriptorBufferEXT : return "PushDescriptorsDescriptorBufferEXT"; + case BufferUsageFlagBits2::eMicromapBuildInputReadOnlyEXT : return "MicromapBuildInputReadOnlyEXT"; + case BufferUsageFlagBits2::eMicromapStorageEXT : return "MicromapStorageEXT"; + case BufferUsageFlagBits2::eDataGraphForeignDescriptorARM : return "DataGraphForeignDescriptorARM"; + case BufferUsageFlagBits2::eTileMemoryQCOM : return "TileMemoryQCOM"; + case BufferUsageFlagBits2::ePreprocessBufferEXT : return "PreprocessBufferEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRobustnessBufferBehavior value ) + { + switch ( value ) + { + case PipelineRobustnessBufferBehavior::eDeviceDefault : return "DeviceDefault"; + case PipelineRobustnessBufferBehavior::eDisabled : return "Disabled"; + case PipelineRobustnessBufferBehavior::eRobustBufferAccess : return "RobustBufferAccess"; + case PipelineRobustnessBufferBehavior::eRobustBufferAccess2: return "RobustBufferAccess2"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRobustnessImageBehavior value ) + { + switch ( value ) + { + case PipelineRobustnessImageBehavior::eDeviceDefault : return "DeviceDefault"; + case PipelineRobustnessImageBehavior::eDisabled : return "Disabled"; + case PipelineRobustnessImageBehavior::eRobustImageAccess : return "RobustImageAccess"; + case PipelineRobustnessImageBehavior::eRobustImageAccess2: return "RobustImageAccess2"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( HostImageCopyFlagBits value ) + { + switch ( value ) + { + case HostImageCopyFlagBits::eMemcpy: return "Memcpy"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SurfaceTransformFlagBitsKHR value ) + { + switch ( value ) + { + case SurfaceTransformFlagBitsKHR::eIdentity : return "Identity"; + case SurfaceTransformFlagBitsKHR::eRotate90 : return "Rotate90"; + case SurfaceTransformFlagBitsKHR::eRotate180 : return "Rotate180"; + case SurfaceTransformFlagBitsKHR::eRotate270 : return "Rotate270"; + case SurfaceTransformFlagBitsKHR::eHorizontalMirror : return "HorizontalMirror"; + case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate90 : return "HorizontalMirrorRotate90"; + case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate180: return "HorizontalMirrorRotate180"; + case SurfaceTransformFlagBitsKHR::eHorizontalMirrorRotate270: return "HorizontalMirrorRotate270"; + case SurfaceTransformFlagBitsKHR::eInherit : return "Inherit"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PresentModeKHR value ) + { + switch ( value ) + { + case PresentModeKHR::eImmediate : return "Immediate"; + case PresentModeKHR::eMailbox : return "Mailbox"; + case PresentModeKHR::eFifo : return "Fifo"; + case PresentModeKHR::eFifoRelaxed : return "FifoRelaxed"; + case PresentModeKHR::eSharedDemandRefresh : return "SharedDemandRefresh"; + case PresentModeKHR::eSharedContinuousRefresh: return "SharedContinuousRefresh"; + case PresentModeKHR::eFifoLatestReady : return "FifoLatestReady"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ColorSpaceKHR value ) + { + switch ( value ) + { + case ColorSpaceKHR::eSrgbNonlinear : return "SrgbNonlinear"; + case ColorSpaceKHR::eDisplayP3NonlinearEXT : return "DisplayP3NonlinearEXT"; + case ColorSpaceKHR::eExtendedSrgbLinearEXT : return "ExtendedSrgbLinearEXT"; + case ColorSpaceKHR::eDisplayP3LinearEXT : return "DisplayP3LinearEXT"; + case ColorSpaceKHR::eDciP3NonlinearEXT : return "DciP3NonlinearEXT"; + case ColorSpaceKHR::eBt709LinearEXT : return "Bt709LinearEXT"; + case ColorSpaceKHR::eBt709NonlinearEXT : return "Bt709NonlinearEXT"; + case ColorSpaceKHR::eBt2020LinearEXT : return "Bt2020LinearEXT"; + case ColorSpaceKHR::eHdr10St2084EXT : return "Hdr10St2084EXT"; + case ColorSpaceKHR::eDolbyvisionEXT : return "DolbyvisionEXT"; + case ColorSpaceKHR::eHdr10HlgEXT : return "Hdr10HlgEXT"; + case ColorSpaceKHR::eAdobergbLinearEXT : return "AdobergbLinearEXT"; + case ColorSpaceKHR::eAdobergbNonlinearEXT : return "AdobergbNonlinearEXT"; + case ColorSpaceKHR::ePassThroughEXT : return "PassThroughEXT"; + case ColorSpaceKHR::eExtendedSrgbNonlinearEXT: return "ExtendedSrgbNonlinearEXT"; + case ColorSpaceKHR::eDisplayNativeAMD : return "DisplayNativeAMD"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CompositeAlphaFlagBitsKHR value ) + { + switch ( value ) + { + case CompositeAlphaFlagBitsKHR::eOpaque : return "Opaque"; + case CompositeAlphaFlagBitsKHR::ePreMultiplied : return "PreMultiplied"; + case CompositeAlphaFlagBitsKHR::ePostMultiplied: return "PostMultiplied"; + case CompositeAlphaFlagBitsKHR::eInherit : return "Inherit"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_swapchain === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SwapchainCreateFlagBitsKHR value ) + { + switch ( value ) + { + case SwapchainCreateFlagBitsKHR::eSplitInstanceBindRegions: return "SplitInstanceBindRegions"; + case SwapchainCreateFlagBitsKHR::eProtected : return "Protected"; + case SwapchainCreateFlagBitsKHR::eMutableFormat : return "MutableFormat"; + case SwapchainCreateFlagBitsKHR::ePresentId2 : return "PresentId2"; + case SwapchainCreateFlagBitsKHR::ePresentWait2 : return "PresentWait2"; + case SwapchainCreateFlagBitsKHR::eDeferredMemoryAllocation: return "DeferredMemoryAllocation"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceGroupPresentModeFlagBitsKHR value ) + { + switch ( value ) + { + case DeviceGroupPresentModeFlagBitsKHR::eLocal : return "Local"; + case DeviceGroupPresentModeFlagBitsKHR::eRemote : return "Remote"; + case DeviceGroupPresentModeFlagBitsKHR::eSum : return "Sum"; + case DeviceGroupPresentModeFlagBitsKHR::eLocalMultiDevice: return "LocalMultiDevice"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_display === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplayPlaneAlphaFlagBitsKHR value ) + { + switch ( value ) + { + case DisplayPlaneAlphaFlagBitsKHR::eOpaque : return "Opaque"; + case DisplayPlaneAlphaFlagBitsKHR::eGlobal : return "Global"; + case DisplayPlaneAlphaFlagBitsKHR::ePerPixel : return "PerPixel"; + case DisplayPlaneAlphaFlagBitsKHR::ePerPixelPremultiplied: return "PerPixelPremultiplied"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplayModeCreateFlagBitsKHR ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplaySurfaceCreateFlagBitsKHR ) + { + return "(void)"; + } + +#if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( XlibSurfaceCreateFlagBitsKHR ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_XLIB_KHR*/ + +#if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( XcbSurfaceCreateFlagBitsKHR ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_XCB_KHR*/ + +#if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( WaylandSurfaceCreateFlagBitsKHR ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + +#if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AndroidSurfaceCreateFlagBitsKHR ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( Win32SurfaceCreateFlagBitsKHR ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_debug_report === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugReportFlagBitsEXT value ) + { + switch ( value ) + { + case DebugReportFlagBitsEXT::eInformation : return "Information"; + case DebugReportFlagBitsEXT::eWarning : return "Warning"; + case DebugReportFlagBitsEXT::ePerformanceWarning: return "PerformanceWarning"; + case DebugReportFlagBitsEXT::eError : return "Error"; + case DebugReportFlagBitsEXT::eDebug : return "Debug"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugReportObjectTypeEXT value ) + { + switch ( value ) + { + case DebugReportObjectTypeEXT::eUnknown : return "Unknown"; + case DebugReportObjectTypeEXT::eInstance : return "Instance"; + case DebugReportObjectTypeEXT::ePhysicalDevice : return "PhysicalDevice"; + case DebugReportObjectTypeEXT::eDevice : return "Device"; + case DebugReportObjectTypeEXT::eQueue : return "Queue"; + case DebugReportObjectTypeEXT::eSemaphore : return "Semaphore"; + case DebugReportObjectTypeEXT::eCommandBuffer : return "CommandBuffer"; + case DebugReportObjectTypeEXT::eFence : return "Fence"; + case DebugReportObjectTypeEXT::eDeviceMemory : return "DeviceMemory"; + case DebugReportObjectTypeEXT::eBuffer : return "Buffer"; + case DebugReportObjectTypeEXT::eImage : return "Image"; + case DebugReportObjectTypeEXT::eEvent : return "Event"; + case DebugReportObjectTypeEXT::eQueryPool : return "QueryPool"; + case DebugReportObjectTypeEXT::eBufferView : return "BufferView"; + case DebugReportObjectTypeEXT::eImageView : return "ImageView"; + case DebugReportObjectTypeEXT::eShaderModule : return "ShaderModule"; + case DebugReportObjectTypeEXT::ePipelineCache : return "PipelineCache"; + case DebugReportObjectTypeEXT::ePipelineLayout : return "PipelineLayout"; + case DebugReportObjectTypeEXT::eRenderPass : return "RenderPass"; + case DebugReportObjectTypeEXT::ePipeline : return "Pipeline"; + case DebugReportObjectTypeEXT::eDescriptorSetLayout : return "DescriptorSetLayout"; + case DebugReportObjectTypeEXT::eSampler : return "Sampler"; + case DebugReportObjectTypeEXT::eDescriptorPool : return "DescriptorPool"; + case DebugReportObjectTypeEXT::eDescriptorSet : return "DescriptorSet"; + case DebugReportObjectTypeEXT::eFramebuffer : return "Framebuffer"; + case DebugReportObjectTypeEXT::eCommandPool : return "CommandPool"; + case DebugReportObjectTypeEXT::eSurfaceKHR : return "SurfaceKHR"; + case DebugReportObjectTypeEXT::eSwapchainKHR : return "SwapchainKHR"; + case DebugReportObjectTypeEXT::eDebugReportCallbackEXT : return "DebugReportCallbackEXT"; + case DebugReportObjectTypeEXT::eDisplayKHR : return "DisplayKHR"; + case DebugReportObjectTypeEXT::eDisplayModeKHR : return "DisplayModeKHR"; + case DebugReportObjectTypeEXT::eValidationCacheEXT : return "ValidationCacheEXT"; + case DebugReportObjectTypeEXT::eSamplerYcbcrConversion : return "SamplerYcbcrConversion"; + case DebugReportObjectTypeEXT::eDescriptorUpdateTemplate: return "DescriptorUpdateTemplate"; + case DebugReportObjectTypeEXT::eCuModuleNVX : return "CuModuleNVX"; + case DebugReportObjectTypeEXT::eCuFunctionNVX : return "CuFunctionNVX"; + case DebugReportObjectTypeEXT::eAccelerationStructureKHR: return "AccelerationStructureKHR"; + case DebugReportObjectTypeEXT::eAccelerationStructureNV : return "AccelerationStructureNV"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case DebugReportObjectTypeEXT::eCudaModuleNV : return "CudaModuleNV"; + case DebugReportObjectTypeEXT::eCudaFunctionNV: return "CudaFunctionNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ +#if defined( VK_USE_PLATFORM_FUCHSIA ) + case DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA: return "BufferCollectionFUCHSIA"; +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_AMD_rasterization_order === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RasterizationOrderAMD value ) + { + switch ( value ) + { + case RasterizationOrderAMD::eStrict : return "Strict"; + case RasterizationOrderAMD::eRelaxed: return "Relaxed"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_video_queue === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoCodecOperationFlagBitsKHR value ) + { + switch ( value ) + { + case VideoCodecOperationFlagBitsKHR::eNone : return "None"; + case VideoCodecOperationFlagBitsKHR::eEncodeH264: return "EncodeH264"; + case VideoCodecOperationFlagBitsKHR::eEncodeH265: return "EncodeH265"; + case VideoCodecOperationFlagBitsKHR::eDecodeH264: return "DecodeH264"; + case VideoCodecOperationFlagBitsKHR::eDecodeH265: return "DecodeH265"; + case VideoCodecOperationFlagBitsKHR::eDecodeAv1 : return "DecodeAv1"; + case VideoCodecOperationFlagBitsKHR::eEncodeAv1 : return "EncodeAv1"; + case VideoCodecOperationFlagBitsKHR::eDecodeVp9 : return "DecodeVp9"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoChromaSubsamplingFlagBitsKHR value ) + { + switch ( value ) + { + case VideoChromaSubsamplingFlagBitsKHR::eInvalid : return "Invalid"; + case VideoChromaSubsamplingFlagBitsKHR::eMonochrome: return "Monochrome"; + case VideoChromaSubsamplingFlagBitsKHR::e420 : return "420"; + case VideoChromaSubsamplingFlagBitsKHR::e422 : return "422"; + case VideoChromaSubsamplingFlagBitsKHR::e444 : return "444"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoComponentBitDepthFlagBitsKHR value ) + { + switch ( value ) + { + case VideoComponentBitDepthFlagBitsKHR::eInvalid: return "Invalid"; + case VideoComponentBitDepthFlagBitsKHR::e8 : return "8"; + case VideoComponentBitDepthFlagBitsKHR::e10 : return "10"; + case VideoComponentBitDepthFlagBitsKHR::e12 : return "12"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoCapabilityFlagBitsKHR value ) + { + switch ( value ) + { + case VideoCapabilityFlagBitsKHR::eProtectedContent : return "ProtectedContent"; + case VideoCapabilityFlagBitsKHR::eSeparateReferenceImages: return "SeparateReferenceImages"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoSessionCreateFlagBitsKHR value ) + { + switch ( value ) + { + case VideoSessionCreateFlagBitsKHR::eProtectedContent : return "ProtectedContent"; + case VideoSessionCreateFlagBitsKHR::eAllowEncodeParameterOptimizations: return "AllowEncodeParameterOptimizations"; + case VideoSessionCreateFlagBitsKHR::eInlineQueries : return "InlineQueries"; + case VideoSessionCreateFlagBitsKHR::eAllowEncodeQuantizationDeltaMap : return "AllowEncodeQuantizationDeltaMap"; + case VideoSessionCreateFlagBitsKHR::eAllowEncodeEmphasisMap : return "AllowEncodeEmphasisMap"; + case VideoSessionCreateFlagBitsKHR::eInlineSessionParameters : return "InlineSessionParameters"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoCodingControlFlagBitsKHR value ) + { + switch ( value ) + { + case VideoCodingControlFlagBitsKHR::eReset : return "Reset"; + case VideoCodingControlFlagBitsKHR::eEncodeRateControl : return "EncodeRateControl"; + case VideoCodingControlFlagBitsKHR::eEncodeQualityLevel: return "EncodeQualityLevel"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryResultStatusKHR value ) + { + switch ( value ) + { + case QueryResultStatusKHR::eError : return "Error"; + case QueryResultStatusKHR::eNotReady : return "NotReady"; + case QueryResultStatusKHR::eComplete : return "Complete"; + case QueryResultStatusKHR::eInsufficientBitstreamBufferRange: return "InsufficientBitstreamBufferRange"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoSessionParametersCreateFlagBitsKHR value ) + { + switch ( value ) + { + case VideoSessionParametersCreateFlagBitsKHR::eQuantizationMapCompatible: return "QuantizationMapCompatible"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoBeginCodingFlagBitsKHR ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEndCodingFlagBitsKHR ) + { + return "(void)"; + } + + //=== VK_KHR_video_decode_queue === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoDecodeCapabilityFlagBitsKHR value ) + { + switch ( value ) + { + case VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputCoincide: return "DpbAndOutputCoincide"; + case VideoDecodeCapabilityFlagBitsKHR::eDpbAndOutputDistinct: return "DpbAndOutputDistinct"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoDecodeUsageFlagBitsKHR value ) + { + switch ( value ) + { + case VideoDecodeUsageFlagBitsKHR::eDefault : return "Default"; + case VideoDecodeUsageFlagBitsKHR::eTranscoding: return "Transcoding"; + case VideoDecodeUsageFlagBitsKHR::eOffline : return "Offline"; + case VideoDecodeUsageFlagBitsKHR::eStreaming : return "Streaming"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoDecodeFlagBitsKHR ) + { + return "(void)"; + } + + //=== VK_EXT_transform_feedback === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationStateStreamCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_KHR_video_encode_h264 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH264CapabilityFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH264CapabilityFlagBitsKHR::eHrdCompliance : return "HrdCompliance"; + case VideoEncodeH264CapabilityFlagBitsKHR::ePredictionWeightTableGenerated: return "PredictionWeightTableGenerated"; + case VideoEncodeH264CapabilityFlagBitsKHR::eRowUnalignedSlice : return "RowUnalignedSlice"; + case VideoEncodeH264CapabilityFlagBitsKHR::eDifferentSliceType : return "DifferentSliceType"; + case VideoEncodeH264CapabilityFlagBitsKHR::eBFrameInL0List : return "BFrameInL0List"; + case VideoEncodeH264CapabilityFlagBitsKHR::eBFrameInL1List : return "BFrameInL1List"; + case VideoEncodeH264CapabilityFlagBitsKHR::ePerPictureTypeMinMaxQp : return "PerPictureTypeMinMaxQp"; + case VideoEncodeH264CapabilityFlagBitsKHR::ePerSliceConstantQp : return "PerSliceConstantQp"; + case VideoEncodeH264CapabilityFlagBitsKHR::eGeneratePrefixNalu : return "GeneratePrefixNalu"; + case VideoEncodeH264CapabilityFlagBitsKHR::eBPictureIntraRefresh : return "BPictureIntraRefresh"; + case VideoEncodeH264CapabilityFlagBitsKHR::eMbQpDiffWraparound : return "MbQpDiffWraparound"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH264StdFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH264StdFlagBitsKHR::eSeparateColorPlaneFlagSet : return "SeparateColorPlaneFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eQpprimeYZeroTransformBypassFlagSet: return "QpprimeYZeroTransformBypassFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eScalingMatrixPresentFlagSet : return "ScalingMatrixPresentFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eChromaQpIndexOffset : return "ChromaQpIndexOffset"; + case VideoEncodeH264StdFlagBitsKHR::eSecondChromaQpIndexOffset : return "SecondChromaQpIndexOffset"; + case VideoEncodeH264StdFlagBitsKHR::ePicInitQpMinus26 : return "PicInitQpMinus26"; + case VideoEncodeH264StdFlagBitsKHR::eWeightedPredFlagSet : return "WeightedPredFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eWeightedBipredIdcExplicit : return "WeightedBipredIdcExplicit"; + case VideoEncodeH264StdFlagBitsKHR::eWeightedBipredIdcImplicit : return "WeightedBipredIdcImplicit"; + case VideoEncodeH264StdFlagBitsKHR::eTransform8X8ModeFlagSet : return "Transform8X8ModeFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eDirectSpatialMvPredFlagUnset : return "DirectSpatialMvPredFlagUnset"; + case VideoEncodeH264StdFlagBitsKHR::eEntropyCodingModeFlagUnset : return "EntropyCodingModeFlagUnset"; + case VideoEncodeH264StdFlagBitsKHR::eEntropyCodingModeFlagSet : return "EntropyCodingModeFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eDirect8X8InferenceFlagUnset : return "Direct8X8InferenceFlagUnset"; + case VideoEncodeH264StdFlagBitsKHR::eConstrainedIntraPredFlagSet : return "ConstrainedIntraPredFlagSet"; + case VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterDisabled : return "DeblockingFilterDisabled"; + case VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterEnabled : return "DeblockingFilterEnabled"; + case VideoEncodeH264StdFlagBitsKHR::eDeblockingFilterPartial : return "DeblockingFilterPartial"; + case VideoEncodeH264StdFlagBitsKHR::eSliceQpDelta : return "SliceQpDelta"; + case VideoEncodeH264StdFlagBitsKHR::eDifferentSliceQpDelta : return "DifferentSliceQpDelta"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH264RateControlFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH264RateControlFlagBitsKHR::eAttemptHrdCompliance : return "AttemptHrdCompliance"; + case VideoEncodeH264RateControlFlagBitsKHR::eRegularGop : return "RegularGop"; + case VideoEncodeH264RateControlFlagBitsKHR::eReferencePatternFlat : return "ReferencePatternFlat"; + case VideoEncodeH264RateControlFlagBitsKHR::eReferencePatternDyadic : return "ReferencePatternDyadic"; + case VideoEncodeH264RateControlFlagBitsKHR::eTemporalLayerPatternDyadic: return "TemporalLayerPatternDyadic"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_video_encode_h265 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH265CapabilityFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH265CapabilityFlagBitsKHR::eHrdCompliance : return "HrdCompliance"; + case VideoEncodeH265CapabilityFlagBitsKHR::ePredictionWeightTableGenerated: return "PredictionWeightTableGenerated"; + case VideoEncodeH265CapabilityFlagBitsKHR::eRowUnalignedSliceSegment : return "RowUnalignedSliceSegment"; + case VideoEncodeH265CapabilityFlagBitsKHR::eDifferentSliceSegmentType : return "DifferentSliceSegmentType"; + case VideoEncodeH265CapabilityFlagBitsKHR::eBFrameInL0List : return "BFrameInL0List"; + case VideoEncodeH265CapabilityFlagBitsKHR::eBFrameInL1List : return "BFrameInL1List"; + case VideoEncodeH265CapabilityFlagBitsKHR::ePerPictureTypeMinMaxQp : return "PerPictureTypeMinMaxQp"; + case VideoEncodeH265CapabilityFlagBitsKHR::ePerSliceSegmentConstantQp : return "PerSliceSegmentConstantQp"; + case VideoEncodeH265CapabilityFlagBitsKHR::eMultipleTilesPerSliceSegment : return "MultipleTilesPerSliceSegment"; + case VideoEncodeH265CapabilityFlagBitsKHR::eMultipleSliceSegmentsPerTile : return "MultipleSliceSegmentsPerTile"; + case VideoEncodeH265CapabilityFlagBitsKHR::eBPictureIntraRefresh : return "BPictureIntraRefresh"; + case VideoEncodeH265CapabilityFlagBitsKHR::eCuQpDiffWraparound : return "CuQpDiffWraparound"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH265StdFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH265StdFlagBitsKHR::eSeparateColorPlaneFlagSet : return "SeparateColorPlaneFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eSampleAdaptiveOffsetEnabledFlagSet : return "SampleAdaptiveOffsetEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eScalingListDataPresentFlagSet : return "ScalingListDataPresentFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::ePcmEnabledFlagSet : return "PcmEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eSpsTemporalMvpEnabledFlagSet : return "SpsTemporalMvpEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eInitQpMinus26 : return "InitQpMinus26"; + case VideoEncodeH265StdFlagBitsKHR::eWeightedPredFlagSet : return "WeightedPredFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eWeightedBipredFlagSet : return "WeightedBipredFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eLog2ParallelMergeLevelMinus2 : return "Log2ParallelMergeLevelMinus2"; + case VideoEncodeH265StdFlagBitsKHR::eSignDataHidingEnabledFlagSet : return "SignDataHidingEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eTransformSkipEnabledFlagSet : return "TransformSkipEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eTransformSkipEnabledFlagUnset : return "TransformSkipEnabledFlagUnset"; + case VideoEncodeH265StdFlagBitsKHR::ePpsSliceChromaQpOffsetsPresentFlagSet : return "PpsSliceChromaQpOffsetsPresentFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eTransquantBypassEnabledFlagSet : return "TransquantBypassEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eConstrainedIntraPredFlagSet : return "ConstrainedIntraPredFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eEntropyCodingSyncEnabledFlagSet : return "EntropyCodingSyncEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eDeblockingFilterOverrideEnabledFlagSet: return "DeblockingFilterOverrideEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eDependentSliceSegmentsEnabledFlagSet : return "DependentSliceSegmentsEnabledFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eDependentSliceSegmentFlagSet : return "DependentSliceSegmentFlagSet"; + case VideoEncodeH265StdFlagBitsKHR::eSliceQpDelta : return "SliceQpDelta"; + case VideoEncodeH265StdFlagBitsKHR::eDifferentSliceQpDelta : return "DifferentSliceQpDelta"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH265CtbSizeFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH265CtbSizeFlagBitsKHR::e16: return "16"; + case VideoEncodeH265CtbSizeFlagBitsKHR::e32: return "32"; + case VideoEncodeH265CtbSizeFlagBitsKHR::e64: return "64"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH265TransformBlockSizeFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH265TransformBlockSizeFlagBitsKHR::e4 : return "4"; + case VideoEncodeH265TransformBlockSizeFlagBitsKHR::e8 : return "8"; + case VideoEncodeH265TransformBlockSizeFlagBitsKHR::e16: return "16"; + case VideoEncodeH265TransformBlockSizeFlagBitsKHR::e32: return "32"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeH265RateControlFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeH265RateControlFlagBitsKHR::eAttemptHrdCompliance : return "AttemptHrdCompliance"; + case VideoEncodeH265RateControlFlagBitsKHR::eRegularGop : return "RegularGop"; + case VideoEncodeH265RateControlFlagBitsKHR::eReferencePatternFlat : return "ReferencePatternFlat"; + case VideoEncodeH265RateControlFlagBitsKHR::eReferencePatternDyadic : return "ReferencePatternDyadic"; + case VideoEncodeH265RateControlFlagBitsKHR::eTemporalSubLayerPatternDyadic: return "TemporalSubLayerPatternDyadic"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_video_decode_h264 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoDecodeH264PictureLayoutFlagBitsKHR value ) + { + switch ( value ) + { + case VideoDecodeH264PictureLayoutFlagBitsKHR::eProgressive : return "Progressive"; + case VideoDecodeH264PictureLayoutFlagBitsKHR::eInterlacedInterleavedLines: return "InterlacedInterleavedLines"; + case VideoDecodeH264PictureLayoutFlagBitsKHR::eInterlacedSeparatePlanes : return "InterlacedSeparatePlanes"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_AMD_shader_info === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderInfoTypeAMD value ) + { + switch ( value ) + { + case ShaderInfoTypeAMD::eStatistics : return "Statistics"; + case ShaderInfoTypeAMD::eBinary : return "Binary"; + case ShaderInfoTypeAMD::eDisassembly: return "Disassembly"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( StreamDescriptorSurfaceCreateFlagBitsGGP ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_GGP*/ + + //=== VK_NV_external_memory_capabilities === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalMemoryHandleTypeFlagBitsNV value ) + { + switch ( value ) + { + case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32 : return "OpaqueWin32"; + case ExternalMemoryHandleTypeFlagBitsNV::eOpaqueWin32Kmt: return "OpaqueWin32Kmt"; + case ExternalMemoryHandleTypeFlagBitsNV::eD3D11Image : return "D3D11Image"; + case ExternalMemoryHandleTypeFlagBitsNV::eD3D11ImageKmt : return "D3D11ImageKmt"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExternalMemoryFeatureFlagBitsNV value ) + { + switch ( value ) + { + case ExternalMemoryFeatureFlagBitsNV::eDedicatedOnly: return "DedicatedOnly"; + case ExternalMemoryFeatureFlagBitsNV::eExportable : return "Exportable"; + case ExternalMemoryFeatureFlagBitsNV::eImportable : return "Importable"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_validation_flags === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ValidationCheckEXT value ) + { + switch ( value ) + { + case ValidationCheckEXT::eAll : return "All"; + case ValidationCheckEXT::eShaders: return "Shaders"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ViSurfaceCreateFlagBitsNN ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_VI_NN*/ + + //=== VK_EXT_conditional_rendering === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ConditionalRenderingFlagBitsEXT value ) + { + switch ( value ) + { + case ConditionalRenderingFlagBitsEXT::eInverted: return "Inverted"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_display_surface_counter === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SurfaceCounterFlagBitsEXT value ) + { + switch ( value ) + { + case SurfaceCounterFlagBitsEXT::eVblank: return "Vblank"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_display_control === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplayPowerStateEXT value ) + { + switch ( value ) + { + case DisplayPowerStateEXT::eOff : return "Off"; + case DisplayPowerStateEXT::eSuspend: return "Suspend"; + case DisplayPowerStateEXT::eOn : return "On"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceEventTypeEXT value ) + { + switch ( value ) + { + case DeviceEventTypeEXT::eDisplayHotplug: return "DisplayHotplug"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplayEventTypeEXT value ) + { + switch ( value ) + { + case DisplayEventTypeEXT::eFirstPixelOut: return "FirstPixelOut"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_viewport_swizzle === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ViewportCoordinateSwizzleNV value ) + { + switch ( value ) + { + case ViewportCoordinateSwizzleNV::ePositiveX: return "PositiveX"; + case ViewportCoordinateSwizzleNV::eNegativeX: return "NegativeX"; + case ViewportCoordinateSwizzleNV::ePositiveY: return "PositiveY"; + case ViewportCoordinateSwizzleNV::eNegativeY: return "NegativeY"; + case ViewportCoordinateSwizzleNV::ePositiveZ: return "PositiveZ"; + case ViewportCoordinateSwizzleNV::eNegativeZ: return "NegativeZ"; + case ViewportCoordinateSwizzleNV::ePositiveW: return "PositiveW"; + case ViewportCoordinateSwizzleNV::eNegativeW: return "NegativeW"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineViewportSwizzleStateCreateFlagBitsNV ) + { + return "(void)"; + } + + //=== VK_EXT_discard_rectangles === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DiscardRectangleModeEXT value ) + { + switch ( value ) + { + case DiscardRectangleModeEXT::eInclusive: return "Inclusive"; + case DiscardRectangleModeEXT::eExclusive: return "Exclusive"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineDiscardRectangleStateCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_EXT_conservative_rasterization === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ConservativeRasterizationModeEXT value ) + { + switch ( value ) + { + case ConservativeRasterizationModeEXT::eDisabled : return "Disabled"; + case ConservativeRasterizationModeEXT::eOverestimate : return "Overestimate"; + case ConservativeRasterizationModeEXT::eUnderestimate: return "Underestimate"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationConservativeStateCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_EXT_depth_clip_enable === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineRasterizationDepthClipStateCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_KHR_performance_query === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceCounterDescriptionFlagBitsKHR value ) + { + switch ( value ) + { + case PerformanceCounterDescriptionFlagBitsKHR::ePerformanceImpacting: return "PerformanceImpacting"; + case PerformanceCounterDescriptionFlagBitsKHR::eConcurrentlyImpacted: return "ConcurrentlyImpacted"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceCounterScopeKHR value ) + { + switch ( value ) + { + case PerformanceCounterScopeKHR::eCommandBuffer: return "CommandBuffer"; + case PerformanceCounterScopeKHR::eRenderPass : return "RenderPass"; + case PerformanceCounterScopeKHR::eCommand : return "Command"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceCounterStorageKHR value ) + { + switch ( value ) + { + case PerformanceCounterStorageKHR::eInt32 : return "Int32"; + case PerformanceCounterStorageKHR::eInt64 : return "Int64"; + case PerformanceCounterStorageKHR::eUint32 : return "Uint32"; + case PerformanceCounterStorageKHR::eUint64 : return "Uint64"; + case PerformanceCounterStorageKHR::eFloat32: return "Float32"; + case PerformanceCounterStorageKHR::eFloat64: return "Float64"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceCounterUnitKHR value ) + { + switch ( value ) + { + case PerformanceCounterUnitKHR::eGeneric : return "Generic"; + case PerformanceCounterUnitKHR::ePercentage : return "Percentage"; + case PerformanceCounterUnitKHR::eNanoseconds : return "Nanoseconds"; + case PerformanceCounterUnitKHR::eBytes : return "Bytes"; + case PerformanceCounterUnitKHR::eBytesPerSecond: return "BytesPerSecond"; + case PerformanceCounterUnitKHR::eKelvin : return "Kelvin"; + case PerformanceCounterUnitKHR::eWatts : return "Watts"; + case PerformanceCounterUnitKHR::eVolts : return "Volts"; + case PerformanceCounterUnitKHR::eAmps : return "Amps"; + case PerformanceCounterUnitKHR::eHertz : return "Hertz"; + case PerformanceCounterUnitKHR::eCycles : return "Cycles"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AcquireProfilingLockFlagBitsKHR ) + { + return "(void)"; + } + +#if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IOSSurfaceCreateFlagBitsMVK ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_IOS_MVK*/ + +#if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MacOSSurfaceCreateFlagBitsMVK ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_MACOS_MVK*/ + + //=== VK_EXT_debug_utils === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugUtilsMessageSeverityFlagBitsEXT value ) + { + switch ( value ) + { + case DebugUtilsMessageSeverityFlagBitsEXT::eVerbose: return "Verbose"; + case DebugUtilsMessageSeverityFlagBitsEXT::eInfo : return "Info"; + case DebugUtilsMessageSeverityFlagBitsEXT::eWarning: return "Warning"; + case DebugUtilsMessageSeverityFlagBitsEXT::eError : return "Error"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugUtilsMessageTypeFlagBitsEXT value ) + { + switch ( value ) + { + case DebugUtilsMessageTypeFlagBitsEXT::eGeneral : return "General"; + case DebugUtilsMessageTypeFlagBitsEXT::eValidation : return "Validation"; + case DebugUtilsMessageTypeFlagBitsEXT::ePerformance : return "Performance"; + case DebugUtilsMessageTypeFlagBitsEXT::eDeviceAddressBinding: return "DeviceAddressBinding"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugUtilsMessengerCallbackDataFlagBitsEXT ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DebugUtilsMessengerCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_EXT_blend_operation_advanced === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BlendOverlapEXT value ) + { + switch ( value ) + { + case BlendOverlapEXT::eUncorrelated: return "Uncorrelated"; + case BlendOverlapEXT::eDisjoint : return "Disjoint"; + case BlendOverlapEXT::eConjoint : return "Conjoint"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_fragment_coverage_to_color === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCoverageToColorStateCreateFlagBitsNV ) + { + return "(void)"; + } + + //=== VK_KHR_acceleration_structure === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureTypeKHR value ) + { + switch ( value ) + { + case AccelerationStructureTypeKHR::eTopLevel : return "TopLevel"; + case AccelerationStructureTypeKHR::eBottomLevel: return "BottomLevel"; + case AccelerationStructureTypeKHR::eGeneric : return "Generic"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureBuildTypeKHR value ) + { + switch ( value ) + { + case AccelerationStructureBuildTypeKHR::eHost : return "Host"; + case AccelerationStructureBuildTypeKHR::eDevice : return "Device"; + case AccelerationStructureBuildTypeKHR::eHostOrDevice: return "HostOrDevice"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( GeometryFlagBitsKHR value ) + { + switch ( value ) + { + case GeometryFlagBitsKHR::eOpaque : return "Opaque"; + case GeometryFlagBitsKHR::eNoDuplicateAnyHitInvocation: return "NoDuplicateAnyHitInvocation"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( GeometryInstanceFlagBitsKHR value ) + { + switch ( value ) + { + case GeometryInstanceFlagBitsKHR::eTriangleFacingCullDisable : return "TriangleFacingCullDisable"; + case GeometryInstanceFlagBitsKHR::eTriangleFlipFacing : return "TriangleFlipFacing"; + case GeometryInstanceFlagBitsKHR::eForceOpaque : return "ForceOpaque"; + case GeometryInstanceFlagBitsKHR::eForceNoOpaque : return "ForceNoOpaque"; + case GeometryInstanceFlagBitsKHR::eForceOpacityMicromap2StateEXT: return "ForceOpacityMicromap2StateEXT"; + case GeometryInstanceFlagBitsKHR::eDisableOpacityMicromapsEXT : return "DisableOpacityMicromapsEXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BuildAccelerationStructureFlagBitsKHR value ) + { + switch ( value ) + { + case BuildAccelerationStructureFlagBitsKHR::eAllowUpdate : return "AllowUpdate"; + case BuildAccelerationStructureFlagBitsKHR::eAllowCompaction : return "AllowCompaction"; + case BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace : return "PreferFastTrace"; + case BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild : return "PreferFastBuild"; + case BuildAccelerationStructureFlagBitsKHR::eLowMemory : return "LowMemory"; + case BuildAccelerationStructureFlagBitsKHR::eMotionNV : return "MotionNV"; + case BuildAccelerationStructureFlagBitsKHR::eAllowOpacityMicromapUpdateEXT : return "AllowOpacityMicromapUpdateEXT"; + case BuildAccelerationStructureFlagBitsKHR::eAllowDisableOpacityMicromapsEXT : return "AllowDisableOpacityMicromapsEXT"; + case BuildAccelerationStructureFlagBitsKHR::eAllowOpacityMicromapDataUpdateEXT: return "AllowOpacityMicromapDataUpdateEXT"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case BuildAccelerationStructureFlagBitsKHR::eAllowDisplacementMicromapUpdateNV: return "AllowDisplacementMicromapUpdateNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + case BuildAccelerationStructureFlagBitsKHR::eAllowDataAccess: return "AllowDataAccess"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CopyAccelerationStructureModeKHR value ) + { + switch ( value ) + { + case CopyAccelerationStructureModeKHR::eClone : return "Clone"; + case CopyAccelerationStructureModeKHR::eCompact : return "Compact"; + case CopyAccelerationStructureModeKHR::eSerialize : return "Serialize"; + case CopyAccelerationStructureModeKHR::eDeserialize: return "Deserialize"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( GeometryTypeKHR value ) + { + switch ( value ) + { + case GeometryTypeKHR::eTriangles : return "Triangles"; + case GeometryTypeKHR::eAabbs : return "Aabbs"; + case GeometryTypeKHR::eInstances : return "Instances"; + case GeometryTypeKHR::eSpheresNV : return "SpheresNV"; + case GeometryTypeKHR::eLinearSweptSpheresNV: return "LinearSweptSpheresNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureCompatibilityKHR value ) + { + switch ( value ) + { + case AccelerationStructureCompatibilityKHR::eCompatible : return "Compatible"; + case AccelerationStructureCompatibilityKHR::eIncompatible: return "Incompatible"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureCreateFlagBitsKHR value ) + { + switch ( value ) + { + case AccelerationStructureCreateFlagBitsKHR::eDeviceAddressCaptureReplay : return "DeviceAddressCaptureReplay"; + case AccelerationStructureCreateFlagBitsKHR::eDescriptorBufferCaptureReplayEXT: return "DescriptorBufferCaptureReplayEXT"; + case AccelerationStructureCreateFlagBitsKHR::eMotionNV : return "MotionNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BuildAccelerationStructureModeKHR value ) + { + switch ( value ) + { + case BuildAccelerationStructureModeKHR::eBuild : return "Build"; + case BuildAccelerationStructureModeKHR::eUpdate: return "Update"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_ray_tracing_pipeline === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RayTracingShaderGroupTypeKHR value ) + { + switch ( value ) + { + case RayTracingShaderGroupTypeKHR::eGeneral : return "General"; + case RayTracingShaderGroupTypeKHR::eTrianglesHitGroup : return "TrianglesHitGroup"; + case RayTracingShaderGroupTypeKHR::eProceduralHitGroup: return "ProceduralHitGroup"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderGroupShaderKHR value ) + { + switch ( value ) + { + case ShaderGroupShaderKHR::eGeneral : return "General"; + case ShaderGroupShaderKHR::eClosestHit : return "ClosestHit"; + case ShaderGroupShaderKHR::eAnyHit : return "AnyHit"; + case ShaderGroupShaderKHR::eIntersection: return "Intersection"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_framebuffer_mixed_samples === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CoverageModulationModeNV value ) + { + switch ( value ) + { + case CoverageModulationModeNV::eNone : return "None"; + case CoverageModulationModeNV::eRgb : return "Rgb"; + case CoverageModulationModeNV::eAlpha: return "Alpha"; + case CoverageModulationModeNV::eRgba : return "Rgba"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCoverageModulationStateCreateFlagBitsNV ) + { + return "(void)"; + } + + //=== VK_EXT_validation_cache === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ValidationCacheHeaderVersionEXT value ) + { + switch ( value ) + { + case ValidationCacheHeaderVersionEXT::eOne: return "One"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ValidationCacheCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_NV_shading_rate_image === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShadingRatePaletteEntryNV value ) + { + switch ( value ) + { + case ShadingRatePaletteEntryNV::eNoInvocations : return "NoInvocations"; + case ShadingRatePaletteEntryNV::e16InvocationsPerPixel : return "16InvocationsPerPixel"; + case ShadingRatePaletteEntryNV::e8InvocationsPerPixel : return "8InvocationsPerPixel"; + case ShadingRatePaletteEntryNV::e4InvocationsPerPixel : return "4InvocationsPerPixel"; + case ShadingRatePaletteEntryNV::e2InvocationsPerPixel : return "2InvocationsPerPixel"; + case ShadingRatePaletteEntryNV::e1InvocationPerPixel : return "1InvocationPerPixel"; + case ShadingRatePaletteEntryNV::e1InvocationPer2X1Pixels: return "1InvocationPer2X1Pixels"; + case ShadingRatePaletteEntryNV::e1InvocationPer1X2Pixels: return "1InvocationPer1X2Pixels"; + case ShadingRatePaletteEntryNV::e1InvocationPer2X2Pixels: return "1InvocationPer2X2Pixels"; + case ShadingRatePaletteEntryNV::e1InvocationPer4X2Pixels: return "1InvocationPer4X2Pixels"; + case ShadingRatePaletteEntryNV::e1InvocationPer2X4Pixels: return "1InvocationPer2X4Pixels"; + case ShadingRatePaletteEntryNV::e1InvocationPer4X4Pixels: return "1InvocationPer4X4Pixels"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CoarseSampleOrderTypeNV value ) + { + switch ( value ) + { + case CoarseSampleOrderTypeNV::eDefault : return "Default"; + case CoarseSampleOrderTypeNV::eCustom : return "Custom"; + case CoarseSampleOrderTypeNV::ePixelMajor : return "PixelMajor"; + case CoarseSampleOrderTypeNV::eSampleMajor: return "SampleMajor"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_ray_tracing === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureMemoryRequirementsTypeNV value ) + { + switch ( value ) + { + case AccelerationStructureMemoryRequirementsTypeNV::eObject : return "Object"; + case AccelerationStructureMemoryRequirementsTypeNV::eBuildScratch : return "BuildScratch"; + case AccelerationStructureMemoryRequirementsTypeNV::eUpdateScratch: return "UpdateScratch"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_AMD_pipeline_compiler_control === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCompilerControlFlagBitsAMD ) + { + return "(void)"; + } + + //=== VK_AMD_memory_overallocation_behavior === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryOverallocationBehaviorAMD value ) + { + switch ( value ) + { + case MemoryOverallocationBehaviorAMD::eDefault : return "Default"; + case MemoryOverallocationBehaviorAMD::eAllowed : return "Allowed"; + case MemoryOverallocationBehaviorAMD::eDisallowed: return "Disallowed"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_INTEL_performance_query === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceConfigurationTypeINTEL value ) + { + switch ( value ) + { + case PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated: return "CommandQueueMetricsDiscoveryActivated"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( QueryPoolSamplingModeINTEL value ) + { + switch ( value ) + { + case QueryPoolSamplingModeINTEL::eManual: return "Manual"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceOverrideTypeINTEL value ) + { + switch ( value ) + { + case PerformanceOverrideTypeINTEL::eNullHardware : return "NullHardware"; + case PerformanceOverrideTypeINTEL::eFlushGpuCaches: return "FlushGpuCaches"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceParameterTypeINTEL value ) + { + switch ( value ) + { + case PerformanceParameterTypeINTEL::eHwCountersSupported : return "HwCountersSupported"; + case PerformanceParameterTypeINTEL::eStreamMarkerValidBits: return "StreamMarkerValidBits"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PerformanceValueTypeINTEL value ) + { + switch ( value ) + { + case PerformanceValueTypeINTEL::eUint32: return "Uint32"; + case PerformanceValueTypeINTEL::eUint64: return "Uint64"; + case PerformanceValueTypeINTEL::eFloat : return "Float"; + case PerformanceValueTypeINTEL::eBool : return "Bool"; + case PerformanceValueTypeINTEL::eString: return "String"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImagePipeSurfaceCreateFlagBitsFUCHSIA ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MetalSurfaceCreateFlagBitsEXT ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_KHR_fragment_shading_rate === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FragmentShadingRateCombinerOpKHR value ) + { + switch ( value ) + { + case FragmentShadingRateCombinerOpKHR::eKeep : return "Keep"; + case FragmentShadingRateCombinerOpKHR::eReplace: return "Replace"; + case FragmentShadingRateCombinerOpKHR::eMin : return "Min"; + case FragmentShadingRateCombinerOpKHR::eMax : return "Max"; + case FragmentShadingRateCombinerOpKHR::eMul : return "Mul"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_AMD_shader_core_properties2 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderCorePropertiesFlagBitsAMD ) + { + return "(void)"; + } + + //=== VK_EXT_validation_features === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ValidationFeatureEnableEXT value ) + { + switch ( value ) + { + case ValidationFeatureEnableEXT::eGpuAssisted : return "GpuAssisted"; + case ValidationFeatureEnableEXT::eGpuAssistedReserveBindingSlot: return "GpuAssistedReserveBindingSlot"; + case ValidationFeatureEnableEXT::eBestPractices : return "BestPractices"; + case ValidationFeatureEnableEXT::eDebugPrintf : return "DebugPrintf"; + case ValidationFeatureEnableEXT::eSynchronizationValidation : return "SynchronizationValidation"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ValidationFeatureDisableEXT value ) + { + switch ( value ) + { + case ValidationFeatureDisableEXT::eAll : return "All"; + case ValidationFeatureDisableEXT::eShaders : return "Shaders"; + case ValidationFeatureDisableEXT::eThreadSafety : return "ThreadSafety"; + case ValidationFeatureDisableEXT::eApiParameters : return "ApiParameters"; + case ValidationFeatureDisableEXT::eObjectLifetimes : return "ObjectLifetimes"; + case ValidationFeatureDisableEXT::eCoreChecks : return "CoreChecks"; + case ValidationFeatureDisableEXT::eUniqueHandles : return "UniqueHandles"; + case ValidationFeatureDisableEXT::eShaderValidationCache: return "ShaderValidationCache"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_coverage_reduction_mode === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CoverageReductionModeNV value ) + { + switch ( value ) + { + case CoverageReductionModeNV::eMerge : return "Merge"; + case CoverageReductionModeNV::eTruncate: return "Truncate"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineCoverageReductionStateCreateFlagBitsNV ) + { + return "(void)"; + } + + //=== VK_EXT_provoking_vertex === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ProvokingVertexModeEXT value ) + { + switch ( value ) + { + case ProvokingVertexModeEXT::eFirstVertex: return "FirstVertex"; + case ProvokingVertexModeEXT::eLastVertex : return "LastVertex"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FullScreenExclusiveEXT value ) + { + switch ( value ) + { + case FullScreenExclusiveEXT::eDefault : return "Default"; + case FullScreenExclusiveEXT::eAllowed : return "Allowed"; + case FullScreenExclusiveEXT::eDisallowed : return "Disallowed"; + case FullScreenExclusiveEXT::eApplicationControlled: return "ApplicationControlled"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } +#endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( HeadlessSurfaceCreateFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_KHR_pipeline_executable_properties === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PipelineExecutableStatisticFormatKHR value ) + { + switch ( value ) + { + case PipelineExecutableStatisticFormatKHR::eBool32 : return "Bool32"; + case PipelineExecutableStatisticFormatKHR::eInt64 : return "Int64"; + case PipelineExecutableStatisticFormatKHR::eUint64 : return "Uint64"; + case PipelineExecutableStatisticFormatKHR::eFloat64: return "Float64"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_device_generated_commands === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectStateFlagBitsNV value ) + { + switch ( value ) + { + case IndirectStateFlagBitsNV::eFlagFrontface: return "FlagFrontface"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectCommandsTokenTypeNV value ) + { + switch ( value ) + { + case IndirectCommandsTokenTypeNV::eShaderGroup : return "ShaderGroup"; + case IndirectCommandsTokenTypeNV::eStateFlags : return "StateFlags"; + case IndirectCommandsTokenTypeNV::eIndexBuffer : return "IndexBuffer"; + case IndirectCommandsTokenTypeNV::eVertexBuffer : return "VertexBuffer"; + case IndirectCommandsTokenTypeNV::ePushConstant : return "PushConstant"; + case IndirectCommandsTokenTypeNV::eDrawIndexed : return "DrawIndexed"; + case IndirectCommandsTokenTypeNV::eDraw : return "Draw"; + case IndirectCommandsTokenTypeNV::eDrawTasks : return "DrawTasks"; + case IndirectCommandsTokenTypeNV::eDrawMeshTasks: return "DrawMeshTasks"; + case IndirectCommandsTokenTypeNV::ePipeline : return "Pipeline"; + case IndirectCommandsTokenTypeNV::eDispatch : return "Dispatch"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectCommandsLayoutUsageFlagBitsNV value ) + { + switch ( value ) + { + case IndirectCommandsLayoutUsageFlagBitsNV::eExplicitPreprocess: return "ExplicitPreprocess"; + case IndirectCommandsLayoutUsageFlagBitsNV::eIndexedSequences : return "IndexedSequences"; + case IndirectCommandsLayoutUsageFlagBitsNV::eUnorderedSequences: return "UnorderedSequences"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_depth_bias_control === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DepthBiasRepresentationEXT value ) + { + switch ( value ) + { + case DepthBiasRepresentationEXT::eLeastRepresentableValueFormat : return "LeastRepresentableValueFormat"; + case DepthBiasRepresentationEXT::eLeastRepresentableValueForceUnorm: return "LeastRepresentableValueForceUnorm"; + case DepthBiasRepresentationEXT::eFloat : return "Float"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_device_memory_report === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceMemoryReportEventTypeEXT value ) + { + switch ( value ) + { + case DeviceMemoryReportEventTypeEXT::eAllocate : return "Allocate"; + case DeviceMemoryReportEventTypeEXT::eFree : return "Free"; + case DeviceMemoryReportEventTypeEXT::eImport : return "Import"; + case DeviceMemoryReportEventTypeEXT::eUnimport : return "Unimport"; + case DeviceMemoryReportEventTypeEXT::eAllocationFailed: return "AllocationFailed"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceMemoryReportFlagBitsEXT ) + { + return "(void)"; + } + + //=== VK_KHR_video_encode_queue === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeCapabilityFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeCapabilityFlagBitsKHR::ePrecedingExternallyEncodedBytes : return "PrecedingExternallyEncodedBytes"; + case VideoEncodeCapabilityFlagBitsKHR::eInsufficientBitstreamBufferRangeDetection: return "InsufficientBitstreamBufferRangeDetection"; + case VideoEncodeCapabilityFlagBitsKHR::eQuantizationDeltaMap : return "QuantizationDeltaMap"; + case VideoEncodeCapabilityFlagBitsKHR::eEmphasisMap : return "EmphasisMap"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeFeedbackFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeFeedbackFlagBitsKHR::eBitstreamBufferOffset: return "BitstreamBufferOffset"; + case VideoEncodeFeedbackFlagBitsKHR::eBitstreamBytesWritten: return "BitstreamBytesWritten"; + case VideoEncodeFeedbackFlagBitsKHR::eBitstreamHasOverrides: return "BitstreamHasOverrides"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeUsageFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeUsageFlagBitsKHR::eDefault : return "Default"; + case VideoEncodeUsageFlagBitsKHR::eTranscoding : return "Transcoding"; + case VideoEncodeUsageFlagBitsKHR::eStreaming : return "Streaming"; + case VideoEncodeUsageFlagBitsKHR::eRecording : return "Recording"; + case VideoEncodeUsageFlagBitsKHR::eConferencing: return "Conferencing"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeContentFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeContentFlagBitsKHR::eDefault : return "Default"; + case VideoEncodeContentFlagBitsKHR::eCamera : return "Camera"; + case VideoEncodeContentFlagBitsKHR::eDesktop : return "Desktop"; + case VideoEncodeContentFlagBitsKHR::eRendered: return "Rendered"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeTuningModeKHR value ) + { + switch ( value ) + { + case VideoEncodeTuningModeKHR::eDefault : return "Default"; + case VideoEncodeTuningModeKHR::eHighQuality : return "HighQuality"; + case VideoEncodeTuningModeKHR::eLowLatency : return "LowLatency"; + case VideoEncodeTuningModeKHR::eUltraLowLatency: return "UltraLowLatency"; + case VideoEncodeTuningModeKHR::eLossless : return "Lossless"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeRateControlModeFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeRateControlModeFlagBitsKHR::eDefault : return "Default"; + case VideoEncodeRateControlModeFlagBitsKHR::eDisabled: return "Disabled"; + case VideoEncodeRateControlModeFlagBitsKHR::eCbr : return "Cbr"; + case VideoEncodeRateControlModeFlagBitsKHR::eVbr : return "Vbr"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeFlagBitsKHR::eIntraRefresh : return "IntraRefresh"; + case VideoEncodeFlagBitsKHR::eWithQuantizationDeltaMap: return "WithQuantizationDeltaMap"; + case VideoEncodeFlagBitsKHR::eWithEmphasisMap : return "WithEmphasisMap"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeRateControlFlagBitsKHR ) + { + return "(void)"; + } + + //=== VK_NV_device_diagnostics_config === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceDiagnosticsConfigFlagBitsNV value ) + { + switch ( value ) + { + case DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderDebugInfo : return "EnableShaderDebugInfo"; + case DeviceDiagnosticsConfigFlagBitsNV::eEnableResourceTracking : return "EnableResourceTracking"; + case DeviceDiagnosticsConfigFlagBitsNV::eEnableAutomaticCheckpoints: return "EnableAutomaticCheckpoints"; + case DeviceDiagnosticsConfigFlagBitsNV::eEnableShaderErrorReporting: return "EnableShaderErrorReporting"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_QCOM_tile_shading === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TileShadingRenderPassFlagBitsQCOM value ) + { + switch ( value ) + { + case TileShadingRenderPassFlagBitsQCOM::eEnable : return "Enable"; + case TileShadingRenderPassFlagBitsQCOM::ePerTileExecution: return "PerTileExecution"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_objects === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ExportMetalObjectTypeFlagBitsEXT value ) + { + switch ( value ) + { + case ExportMetalObjectTypeFlagBitsEXT::eMetalDevice : return "MetalDevice"; + case ExportMetalObjectTypeFlagBitsEXT::eMetalCommandQueue: return "MetalCommandQueue"; + case ExportMetalObjectTypeFlagBitsEXT::eMetalBuffer : return "MetalBuffer"; + case ExportMetalObjectTypeFlagBitsEXT::eMetalTexture : return "MetalTexture"; + case ExportMetalObjectTypeFlagBitsEXT::eMetalIosurface : return "MetalIosurface"; + case ExportMetalObjectTypeFlagBitsEXT::eMetalSharedEvent : return "MetalSharedEvent"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } +#endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_graphics_pipeline_library === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( GraphicsPipelineLibraryFlagBitsEXT value ) + { + switch ( value ) + { + case GraphicsPipelineLibraryFlagBitsEXT::eVertexInputInterface : return "VertexInputInterface"; + case GraphicsPipelineLibraryFlagBitsEXT::ePreRasterizationShaders: return "PreRasterizationShaders"; + case GraphicsPipelineLibraryFlagBitsEXT::eFragmentShader : return "FragmentShader"; + case GraphicsPipelineLibraryFlagBitsEXT::eFragmentOutputInterface: return "FragmentOutputInterface"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_fragment_shading_rate_enums === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FragmentShadingRateNV value ) + { + switch ( value ) + { + case FragmentShadingRateNV::e1InvocationPerPixel : return "1InvocationPerPixel"; + case FragmentShadingRateNV::e1InvocationPer1X2Pixels: return "1InvocationPer1X2Pixels"; + case FragmentShadingRateNV::e1InvocationPer2X1Pixels: return "1InvocationPer2X1Pixels"; + case FragmentShadingRateNV::e1InvocationPer2X2Pixels: return "1InvocationPer2X2Pixels"; + case FragmentShadingRateNV::e1InvocationPer2X4Pixels: return "1InvocationPer2X4Pixels"; + case FragmentShadingRateNV::e1InvocationPer4X2Pixels: return "1InvocationPer4X2Pixels"; + case FragmentShadingRateNV::e1InvocationPer4X4Pixels: return "1InvocationPer4X4Pixels"; + case FragmentShadingRateNV::e2InvocationsPerPixel : return "2InvocationsPerPixel"; + case FragmentShadingRateNV::e4InvocationsPerPixel : return "4InvocationsPerPixel"; + case FragmentShadingRateNV::e8InvocationsPerPixel : return "8InvocationsPerPixel"; + case FragmentShadingRateNV::e16InvocationsPerPixel : return "16InvocationsPerPixel"; + case FragmentShadingRateNV::eNoInvocations : return "NoInvocations"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FragmentShadingRateTypeNV value ) + { + switch ( value ) + { + case FragmentShadingRateTypeNV::eFragmentSize: return "FragmentSize"; + case FragmentShadingRateTypeNV::eEnums : return "Enums"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_ray_tracing_motion_blur === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureMotionInstanceTypeNV value ) + { + switch ( value ) + { + case AccelerationStructureMotionInstanceTypeNV::eStatic : return "Static"; + case AccelerationStructureMotionInstanceTypeNV::eMatrixMotion: return "MatrixMotion"; + case AccelerationStructureMotionInstanceTypeNV::eSrtMotion : return "SrtMotion"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureMotionInfoFlagBitsNV ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccelerationStructureMotionInstanceFlagBitsNV ) + { + return "(void)"; + } + + //=== VK_EXT_image_compression_control === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageCompressionFlagBitsEXT value ) + { + switch ( value ) + { + case ImageCompressionFlagBitsEXT::eDefault : return "Default"; + case ImageCompressionFlagBitsEXT::eFixedRateDefault : return "FixedRateDefault"; + case ImageCompressionFlagBitsEXT::eFixedRateExplicit: return "FixedRateExplicit"; + case ImageCompressionFlagBitsEXT::eDisabled : return "Disabled"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageCompressionFixedRateFlagBitsEXT value ) + { + switch ( value ) + { + case ImageCompressionFixedRateFlagBitsEXT::eNone : return "None"; + case ImageCompressionFixedRateFlagBitsEXT::e1Bpc : return "1Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e2Bpc : return "2Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e3Bpc : return "3Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e4Bpc : return "4Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e5Bpc : return "5Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e6Bpc : return "6Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e7Bpc : return "7Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e8Bpc : return "8Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e9Bpc : return "9Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e10Bpc: return "10Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e11Bpc: return "11Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e12Bpc: return "12Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e13Bpc: return "13Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e14Bpc: return "14Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e15Bpc: return "15Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e16Bpc: return "16Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e17Bpc: return "17Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e18Bpc: return "18Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e19Bpc: return "19Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e20Bpc: return "20Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e21Bpc: return "21Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e22Bpc: return "22Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e23Bpc: return "23Bpc"; + case ImageCompressionFixedRateFlagBitsEXT::e24Bpc: return "24Bpc"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_device_fault === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceFaultAddressTypeEXT value ) + { + switch ( value ) + { + case DeviceFaultAddressTypeEXT::eNone : return "None"; + case DeviceFaultAddressTypeEXT::eReadInvalid : return "ReadInvalid"; + case DeviceFaultAddressTypeEXT::eWriteInvalid : return "WriteInvalid"; + case DeviceFaultAddressTypeEXT::eExecuteInvalid : return "ExecuteInvalid"; + case DeviceFaultAddressTypeEXT::eInstructionPointerUnknown: return "InstructionPointerUnknown"; + case DeviceFaultAddressTypeEXT::eInstructionPointerInvalid: return "InstructionPointerInvalid"; + case DeviceFaultAddressTypeEXT::eInstructionPointerFault : return "InstructionPointerFault"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceFaultVendorBinaryHeaderVersionEXT value ) + { + switch ( value ) + { + case DeviceFaultVendorBinaryHeaderVersionEXT::eOne: return "One"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DirectFBSurfaceCreateFlagBitsEXT ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_device_address_binding_report === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceAddressBindingFlagBitsEXT value ) + { + switch ( value ) + { + case DeviceAddressBindingFlagBitsEXT::eInternalObject: return "InternalObject"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DeviceAddressBindingTypeEXT value ) + { + switch ( value ) + { + case DeviceAddressBindingTypeEXT::eBind : return "Bind"; + case DeviceAddressBindingTypeEXT::eUnbind: return "Unbind"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_buffer_collection === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageConstraintsInfoFlagBitsFUCHSIA value ) + { + switch ( value ) + { + case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely : return "CpuReadRarely"; + case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften : return "CpuReadOften"; + case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely : return "CpuWriteRarely"; + case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften : return "CpuWriteOften"; + case ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional: return "ProtectedOptional"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ImageFormatConstraintsFlagBitsFUCHSIA ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_EXT_frame_boundary === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( FrameBoundaryFlagBitsEXT value ) + { + switch ( value ) + { + case FrameBoundaryFlagBitsEXT::eFrameEnd: return "FrameEnd"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ScreenSurfaceCreateFlagBitsQNX ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_SCREEN_QNX*/ + + //=== VK_EXT_opacity_micromap === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MicromapTypeEXT value ) + { + switch ( value ) + { + case MicromapTypeEXT::eOpacityMicromap: return "OpacityMicromap"; +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + case MicromapTypeEXT::eDisplacementMicromapNV: return "DisplacementMicromapNV"; +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BuildMicromapFlagBitsEXT value ) + { + switch ( value ) + { + case BuildMicromapFlagBitsEXT::ePreferFastTrace: return "PreferFastTrace"; + case BuildMicromapFlagBitsEXT::ePreferFastBuild: return "PreferFastBuild"; + case BuildMicromapFlagBitsEXT::eAllowCompaction: return "AllowCompaction"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CopyMicromapModeEXT value ) + { + switch ( value ) + { + case CopyMicromapModeEXT::eClone : return "Clone"; + case CopyMicromapModeEXT::eSerialize : return "Serialize"; + case CopyMicromapModeEXT::eDeserialize: return "Deserialize"; + case CopyMicromapModeEXT::eCompact : return "Compact"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MicromapCreateFlagBitsEXT value ) + { + switch ( value ) + { + case MicromapCreateFlagBitsEXT::eDeviceAddressCaptureReplay: return "DeviceAddressCaptureReplay"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BuildMicromapModeEXT value ) + { + switch ( value ) + { + case BuildMicromapModeEXT::eBuild: return "Build"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpacityMicromapFormatEXT value ) + { + switch ( value ) + { + case OpacityMicromapFormatEXT::e2State: return "2State"; + case OpacityMicromapFormatEXT::e4State: return "4State"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpacityMicromapSpecialIndexEXT value ) + { + switch ( value ) + { + case OpacityMicromapSpecialIndexEXT::eFullyTransparent : return "FullyTransparent"; + case OpacityMicromapSpecialIndexEXT::eFullyOpaque : return "FullyOpaque"; + case OpacityMicromapSpecialIndexEXT::eFullyUnknownTransparent : return "FullyUnknownTransparent"; + case OpacityMicromapSpecialIndexEXT::eFullyUnknownOpaque : return "FullyUnknownOpaque"; + case OpacityMicromapSpecialIndexEXT::eClusterGeometryDisableOpacityMicromapNV: return "ClusterGeometryDisableOpacityMicromapNV"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_NV_displacement_micromap === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplacementMicromapFormatNV value ) + { + switch ( value ) + { + case DisplacementMicromapFormatNV::e64Triangles64Bytes : return "64Triangles64Bytes"; + case DisplacementMicromapFormatNV::e256Triangles128Bytes : return "256Triangles128Bytes"; + case DisplacementMicromapFormatNV::e1024Triangles128Bytes: return "1024Triangles128Bytes"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } +#endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_ARM_scheduling_controls === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PhysicalDeviceSchedulingControlsFlagBitsARM value ) + { + switch ( value ) + { + case PhysicalDeviceSchedulingControlsFlagBitsARM::eShaderCoreCount: return "ShaderCoreCount"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_memory_decompression === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( MemoryDecompressionMethodFlagBitsNV value ) + { + switch ( value ) + { + case MemoryDecompressionMethodFlagBitsNV::eGdeflate10: return "Gdeflate10"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_ray_tracing_linear_swept_spheres === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RayTracingLssIndexingModeNV value ) + { + switch ( value ) + { + case RayTracingLssIndexingModeNV::eList : return "List"; + case RayTracingLssIndexingModeNV::eSuccessive: return "Successive"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RayTracingLssPrimitiveEndCapsModeNV value ) + { + switch ( value ) + { + case RayTracingLssPrimitiveEndCapsModeNV::eNone : return "None"; + case RayTracingLssPrimitiveEndCapsModeNV::eChained: return "Chained"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_subpass_merge_feedback === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SubpassMergeStatusEXT value ) + { + switch ( value ) + { + case SubpassMergeStatusEXT::eMerged : return "Merged"; + case SubpassMergeStatusEXT::eDisallowed : return "Disallowed"; + case SubpassMergeStatusEXT::eNotMergedSideEffects : return "NotMergedSideEffects"; + case SubpassMergeStatusEXT::eNotMergedSamplesMismatch : return "NotMergedSamplesMismatch"; + case SubpassMergeStatusEXT::eNotMergedViewsMismatch : return "NotMergedViewsMismatch"; + case SubpassMergeStatusEXT::eNotMergedAliasing : return "NotMergedAliasing"; + case SubpassMergeStatusEXT::eNotMergedDependencies : return "NotMergedDependencies"; + case SubpassMergeStatusEXT::eNotMergedIncompatibleInputAttachment: return "NotMergedIncompatibleInputAttachment"; + case SubpassMergeStatusEXT::eNotMergedTooManyAttachments : return "NotMergedTooManyAttachments"; + case SubpassMergeStatusEXT::eNotMergedInsufficientStorage : return "NotMergedInsufficientStorage"; + case SubpassMergeStatusEXT::eNotMergedDepthStencilCount : return "NotMergedDepthStencilCount"; + case SubpassMergeStatusEXT::eNotMergedResolveAttachmentReuse : return "NotMergedResolveAttachmentReuse"; + case SubpassMergeStatusEXT::eNotMergedSingleSubpass : return "NotMergedSingleSubpass"; + case SubpassMergeStatusEXT::eNotMergedUnspecified : return "NotMergedUnspecified"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_LUNARG_direct_driver_loading === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DirectDriverLoadingModeLUNARG value ) + { + switch ( value ) + { + case DirectDriverLoadingModeLUNARG::eExclusive: return "Exclusive"; + case DirectDriverLoadingModeLUNARG::eInclusive: return "Inclusive"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DirectDriverLoadingFlagBitsLUNARG ) + { + return "(void)"; + } + + //=== VK_ARM_tensors === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TensorCreateFlagBitsARM value ) + { + switch ( value ) + { + case TensorCreateFlagBitsARM::eMutableFormat : return "MutableFormat"; + case TensorCreateFlagBitsARM::eProtected : return "Protected"; + case TensorCreateFlagBitsARM::eDescriptorBufferCaptureReplay: return "DescriptorBufferCaptureReplay"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TensorViewCreateFlagBitsARM value ) + { + switch ( value ) + { + case TensorViewCreateFlagBitsARM::eDescriptorBufferCaptureReplay: return "DescriptorBufferCaptureReplay"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TensorUsageFlagBitsARM value ) + { + switch ( value ) + { + case TensorUsageFlagBitsARM::eShader : return "Shader"; + case TensorUsageFlagBitsARM::eTransferSrc : return "TransferSrc"; + case TensorUsageFlagBitsARM::eTransferDst : return "TransferDst"; + case TensorUsageFlagBitsARM::eImageAliasing: return "ImageAliasing"; + case TensorUsageFlagBitsARM::eDataGraph : return "DataGraph"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TensorTilingARM value ) + { + switch ( value ) + { + case TensorTilingARM::eOptimal: return "Optimal"; + case TensorTilingARM::eLinear : return "Linear"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_optical_flow === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpticalFlowUsageFlagBitsNV value ) + { + switch ( value ) + { + case OpticalFlowUsageFlagBitsNV::eUnknown : return "Unknown"; + case OpticalFlowUsageFlagBitsNV::eInput : return "Input"; + case OpticalFlowUsageFlagBitsNV::eOutput : return "Output"; + case OpticalFlowUsageFlagBitsNV::eHint : return "Hint"; + case OpticalFlowUsageFlagBitsNV::eCost : return "Cost"; + case OpticalFlowUsageFlagBitsNV::eGlobalFlow: return "GlobalFlow"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpticalFlowGridSizeFlagBitsNV value ) + { + switch ( value ) + { + case OpticalFlowGridSizeFlagBitsNV::eUnknown: return "Unknown"; + case OpticalFlowGridSizeFlagBitsNV::e1X1 : return "1X1"; + case OpticalFlowGridSizeFlagBitsNV::e2X2 : return "2X2"; + case OpticalFlowGridSizeFlagBitsNV::e4X4 : return "4X4"; + case OpticalFlowGridSizeFlagBitsNV::e8X8 : return "8X8"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpticalFlowPerformanceLevelNV value ) + { + switch ( value ) + { + case OpticalFlowPerformanceLevelNV::eUnknown: return "Unknown"; + case OpticalFlowPerformanceLevelNV::eSlow : return "Slow"; + case OpticalFlowPerformanceLevelNV::eMedium : return "Medium"; + case OpticalFlowPerformanceLevelNV::eFast : return "Fast"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpticalFlowSessionBindingPointNV value ) + { + switch ( value ) + { + case OpticalFlowSessionBindingPointNV::eUnknown : return "Unknown"; + case OpticalFlowSessionBindingPointNV::eInput : return "Input"; + case OpticalFlowSessionBindingPointNV::eReference : return "Reference"; + case OpticalFlowSessionBindingPointNV::eHint : return "Hint"; + case OpticalFlowSessionBindingPointNV::eFlowVector : return "FlowVector"; + case OpticalFlowSessionBindingPointNV::eBackwardFlowVector: return "BackwardFlowVector"; + case OpticalFlowSessionBindingPointNV::eCost : return "Cost"; + case OpticalFlowSessionBindingPointNV::eBackwardCost : return "BackwardCost"; + case OpticalFlowSessionBindingPointNV::eGlobalFlow : return "GlobalFlow"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpticalFlowSessionCreateFlagBitsNV value ) + { + switch ( value ) + { + case OpticalFlowSessionCreateFlagBitsNV::eEnableHint : return "EnableHint"; + case OpticalFlowSessionCreateFlagBitsNV::eEnableCost : return "EnableCost"; + case OpticalFlowSessionCreateFlagBitsNV::eEnableGlobalFlow: return "EnableGlobalFlow"; + case OpticalFlowSessionCreateFlagBitsNV::eAllowRegions : return "AllowRegions"; + case OpticalFlowSessionCreateFlagBitsNV::eBothDirections : return "BothDirections"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OpticalFlowExecuteFlagBitsNV value ) + { + switch ( value ) + { + case OpticalFlowExecuteFlagBitsNV::eDisableTemporalHints: return "DisableTemporalHints"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_AMD_anti_lag === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AntiLagModeAMD value ) + { + switch ( value ) + { + case AntiLagModeAMD::eDriverControl: return "DriverControl"; + case AntiLagModeAMD::eOn : return "On"; + case AntiLagModeAMD::eOff : return "Off"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AntiLagStageAMD value ) + { + switch ( value ) + { + case AntiLagStageAMD::eInput : return "Input"; + case AntiLagStageAMD::ePresent: return "Present"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_shader_object === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderCreateFlagBitsEXT value ) + { + switch ( value ) + { + case ShaderCreateFlagBitsEXT::eLinkStage : return "LinkStage"; + case ShaderCreateFlagBitsEXT::eAllowVaryingSubgroupSize : return "AllowVaryingSubgroupSize"; + case ShaderCreateFlagBitsEXT::eRequireFullSubgroups : return "RequireFullSubgroups"; + case ShaderCreateFlagBitsEXT::eNoTaskShader : return "NoTaskShader"; + case ShaderCreateFlagBitsEXT::eDispatchBase : return "DispatchBase"; + case ShaderCreateFlagBitsEXT::eFragmentShadingRateAttachment: return "FragmentShadingRateAttachment"; + case ShaderCreateFlagBitsEXT::eFragmentDensityMapAttachment : return "FragmentDensityMapAttachment"; + case ShaderCreateFlagBitsEXT::eIndirectBindable : return "IndirectBindable"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ShaderCodeTypeEXT value ) + { + switch ( value ) + { + case ShaderCodeTypeEXT::eBinary: return "Binary"; + case ShaderCodeTypeEXT::eSpirv : return "Spirv"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_surface_maintenance1 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PresentScalingFlagBitsKHR value ) + { + switch ( value ) + { + case PresentScalingFlagBitsKHR::eOneToOne : return "OneToOne"; + case PresentScalingFlagBitsKHR::eAspectRatioStretch: return "AspectRatioStretch"; + case PresentScalingFlagBitsKHR::eStretch : return "Stretch"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PresentGravityFlagBitsKHR value ) + { + switch ( value ) + { + case PresentGravityFlagBitsKHR::eMin : return "Min"; + case PresentGravityFlagBitsKHR::eMax : return "Max"; + case PresentGravityFlagBitsKHR::eCentered: return "Centered"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_ray_tracing_invocation_reorder === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( RayTracingInvocationReorderModeNV value ) + { + switch ( value ) + { + case RayTracingInvocationReorderModeNV::eNone : return "None"; + case RayTracingInvocationReorderModeNV::eReorder: return "Reorder"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_cooperative_vector === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CooperativeVectorMatrixLayoutNV value ) + { + switch ( value ) + { + case CooperativeVectorMatrixLayoutNV::eRowMajor : return "RowMajor"; + case CooperativeVectorMatrixLayoutNV::eColumnMajor : return "ColumnMajor"; + case CooperativeVectorMatrixLayoutNV::eInferencingOptimal: return "InferencingOptimal"; + case CooperativeVectorMatrixLayoutNV::eTrainingOptimal : return "TrainingOptimal"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ComponentTypeKHR value ) + { + switch ( value ) + { + case ComponentTypeKHR::eFloat16 : return "Float16"; + case ComponentTypeKHR::eFloat32 : return "Float32"; + case ComponentTypeKHR::eFloat64 : return "Float64"; + case ComponentTypeKHR::eSint8 : return "Sint8"; + case ComponentTypeKHR::eSint16 : return "Sint16"; + case ComponentTypeKHR::eSint32 : return "Sint32"; + case ComponentTypeKHR::eSint64 : return "Sint64"; + case ComponentTypeKHR::eUint8 : return "Uint8"; + case ComponentTypeKHR::eUint16 : return "Uint16"; + case ComponentTypeKHR::eUint32 : return "Uint32"; + case ComponentTypeKHR::eUint64 : return "Uint64"; + case ComponentTypeKHR::eBfloat16 : return "Bfloat16"; + case ComponentTypeKHR::eSint8PackedNV: return "Sint8PackedNV"; + case ComponentTypeKHR::eUint8PackedNV: return "Uint8PackedNV"; + case ComponentTypeKHR::eFloat8E4M3EXT: return "Float8E4M3EXT"; + case ComponentTypeKHR::eFloat8E5M2EXT: return "Float8E5M2EXT"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_layer_settings === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( LayerSettingTypeEXT value ) + { + switch ( value ) + { + case LayerSettingTypeEXT::eBool32 : return "Bool32"; + case LayerSettingTypeEXT::eInt32 : return "Int32"; + case LayerSettingTypeEXT::eInt64 : return "Int64"; + case LayerSettingTypeEXT::eUint32 : return "Uint32"; + case LayerSettingTypeEXT::eUint64 : return "Uint64"; + case LayerSettingTypeEXT::eFloat32: return "Float32"; + case LayerSettingTypeEXT::eFloat64: return "Float64"; + case LayerSettingTypeEXT::eString : return "String"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_low_latency2 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( LatencyMarkerNV value ) + { + switch ( value ) + { + case LatencyMarkerNV::eSimulationStart : return "SimulationStart"; + case LatencyMarkerNV::eSimulationEnd : return "SimulationEnd"; + case LatencyMarkerNV::eRendersubmitStart : return "RendersubmitStart"; + case LatencyMarkerNV::eRendersubmitEnd : return "RendersubmitEnd"; + case LatencyMarkerNV::ePresentStart : return "PresentStart"; + case LatencyMarkerNV::ePresentEnd : return "PresentEnd"; + case LatencyMarkerNV::eInputSample : return "InputSample"; + case LatencyMarkerNV::eTriggerFlash : return "TriggerFlash"; + case LatencyMarkerNV::eOutOfBandRendersubmitStart: return "OutOfBandRendersubmitStart"; + case LatencyMarkerNV::eOutOfBandRendersubmitEnd : return "OutOfBandRendersubmitEnd"; + case LatencyMarkerNV::eOutOfBandPresentStart : return "OutOfBandPresentStart"; + case LatencyMarkerNV::eOutOfBandPresentEnd : return "OutOfBandPresentEnd"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( OutOfBandQueueTypeNV value ) + { + switch ( value ) + { + case OutOfBandQueueTypeNV::eRender : return "Render"; + case OutOfBandQueueTypeNV::ePresent: return "Present"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_cooperative_matrix === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ScopeKHR value ) + { + switch ( value ) + { + case ScopeKHR::eDevice : return "Device"; + case ScopeKHR::eWorkgroup : return "Workgroup"; + case ScopeKHR::eSubgroup : return "Subgroup"; + case ScopeKHR::eQueueFamily: return "QueueFamily"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_ARM_data_graph === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DataGraphPipelineSessionBindPointARM value ) + { + switch ( value ) + { + case DataGraphPipelineSessionBindPointARM::eTransient: return "Transient"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DataGraphPipelineSessionBindPointTypeARM value ) + { + switch ( value ) + { + case DataGraphPipelineSessionBindPointTypeARM::eMemory: return "Memory"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DataGraphPipelineSessionCreateFlagBitsARM value ) + { + switch ( value ) + { + case DataGraphPipelineSessionCreateFlagBitsARM::eProtected: return "Protected"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DataGraphPipelinePropertyARM value ) + { + switch ( value ) + { + case DataGraphPipelinePropertyARM::eCreationLog: return "CreationLog"; + case DataGraphPipelinePropertyARM::eIdentifier : return "Identifier"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DataGraphPipelineDispatchFlagBitsARM ) + { + return "(void)"; + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PhysicalDeviceDataGraphProcessingEngineTypeARM value ) + { + switch ( value ) + { + case PhysicalDeviceDataGraphProcessingEngineTypeARM::eDefault: return "Default"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PhysicalDeviceDataGraphOperationTypeARM value ) + { + switch ( value ) + { + case PhysicalDeviceDataGraphOperationTypeARM::eSpirvExtendedInstructionSet: return "SpirvExtendedInstructionSet"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_video_encode_av1 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeAV1PredictionModeKHR value ) + { + switch ( value ) + { + case VideoEncodeAV1PredictionModeKHR::eIntraOnly : return "IntraOnly"; + case VideoEncodeAV1PredictionModeKHR::eSingleReference : return "SingleReference"; + case VideoEncodeAV1PredictionModeKHR::eUnidirectionalCompound: return "UnidirectionalCompound"; + case VideoEncodeAV1PredictionModeKHR::eBidirectionalCompound : return "BidirectionalCompound"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeAV1RateControlGroupKHR value ) + { + switch ( value ) + { + case VideoEncodeAV1RateControlGroupKHR::eIntra : return "Intra"; + case VideoEncodeAV1RateControlGroupKHR::ePredictive : return "Predictive"; + case VideoEncodeAV1RateControlGroupKHR::eBipredictive: return "Bipredictive"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeAV1CapabilityFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeAV1CapabilityFlagBitsKHR::ePerRateControlGroupMinMaxQIndex: return "PerRateControlGroupMinMaxQIndex"; + case VideoEncodeAV1CapabilityFlagBitsKHR::eGenerateObuExtensionHeader : return "GenerateObuExtensionHeader"; + case VideoEncodeAV1CapabilityFlagBitsKHR::ePrimaryReferenceCdfOnly : return "PrimaryReferenceCdfOnly"; + case VideoEncodeAV1CapabilityFlagBitsKHR::eFrameSizeOverride : return "FrameSizeOverride"; + case VideoEncodeAV1CapabilityFlagBitsKHR::eMotionVectorScaling : return "MotionVectorScaling"; + case VideoEncodeAV1CapabilityFlagBitsKHR::eCompoundPredictionIntraRefresh : return "CompoundPredictionIntraRefresh"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeAV1StdFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeAV1StdFlagBitsKHR::eUniformTileSpacingFlagSet: return "UniformTileSpacingFlagSet"; + case VideoEncodeAV1StdFlagBitsKHR::eSkipModePresentUnset : return "SkipModePresentUnset"; + case VideoEncodeAV1StdFlagBitsKHR::ePrimaryRefFrame : return "PrimaryRefFrame"; + case VideoEncodeAV1StdFlagBitsKHR::eDeltaQ : return "DeltaQ"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeAV1SuperblockSizeFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeAV1SuperblockSizeFlagBitsKHR::e64 : return "64"; + case VideoEncodeAV1SuperblockSizeFlagBitsKHR::e128: return "128"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeAV1RateControlFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeAV1RateControlFlagBitsKHR::eRegularGop : return "RegularGop"; + case VideoEncodeAV1RateControlFlagBitsKHR::eTemporalLayerPatternDyadic: return "TemporalLayerPatternDyadic"; + case VideoEncodeAV1RateControlFlagBitsKHR::eReferencePatternFlat : return "ReferencePatternFlat"; + case VideoEncodeAV1RateControlFlagBitsKHR::eReferencePatternDyadic : return "ReferencePatternDyadic"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_QCOM_image_processing2 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( BlockMatchWindowCompareModeQCOM value ) + { + switch ( value ) + { + case BlockMatchWindowCompareModeQCOM::eMin: return "Min"; + case BlockMatchWindowCompareModeQCOM::eMax: return "Max"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_QCOM_filter_cubic_weights === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( CubicFilterWeightsQCOM value ) + { + switch ( value ) + { + case CubicFilterWeightsQCOM::eCatmullRom : return "CatmullRom"; + case CubicFilterWeightsQCOM::eZeroTangentCardinal: return "ZeroTangentCardinal"; + case CubicFilterWeightsQCOM::eBSpline : return "BSpline"; + case CubicFilterWeightsQCOM::eMitchellNetravali : return "MitchellNetravali"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_MSFT_layered_driver === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( LayeredDriverUnderlyingApiMSFT value ) + { + switch ( value ) + { + case LayeredDriverUnderlyingApiMSFT::eNone : return "None"; + case LayeredDriverUnderlyingApiMSFT::eD3D12: return "D3D12"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_calibrated_timestamps === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( TimeDomainKHR value ) + { + switch ( value ) + { + case TimeDomainKHR::eDevice : return "Device"; + case TimeDomainKHR::eClockMonotonic : return "ClockMonotonic"; + case TimeDomainKHR::eClockMonotonicRaw : return "ClockMonotonicRaw"; + case TimeDomainKHR::eQueryPerformanceCounter: return "QueryPerformanceCounter"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_display_stereo === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DisplaySurfaceStereoTypeNV value ) + { + switch ( value ) + { + case DisplaySurfaceStereoTypeNV::eNone : return "None"; + case DisplaySurfaceStereoTypeNV::eOnboardDin : return "OnboardDin"; + case DisplaySurfaceStereoTypeNV::eHdmi3D : return "Hdmi3D"; + case DisplaySurfaceStereoTypeNV::eInbandDisplayport: return "InbandDisplayport"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_video_encode_intra_refresh === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( VideoEncodeIntraRefreshModeFlagBitsKHR value ) + { + switch ( value ) + { + case VideoEncodeIntraRefreshModeFlagBitsKHR::eNone : return "None"; + case VideoEncodeIntraRefreshModeFlagBitsKHR::ePerPicturePartition: return "PerPicturePartition"; + case VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockBased : return "BlockBased"; + case VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockRowBased : return "BlockRowBased"; + case VideoEncodeIntraRefreshModeFlagBitsKHR::eBlockColumnBased : return "BlockColumnBased"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_maintenance7 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PhysicalDeviceLayeredApiKHR value ) + { + switch ( value ) + { + case PhysicalDeviceLayeredApiKHR::eVulkan : return "Vulkan"; + case PhysicalDeviceLayeredApiKHR::eD3D12 : return "D3D12"; + case PhysicalDeviceLayeredApiKHR::eMetal : return "Metal"; + case PhysicalDeviceLayeredApiKHR::eOpengl : return "Opengl"; + case PhysicalDeviceLayeredApiKHR::eOpengles: return "Opengles"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_cluster_acceleration_structure === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureClusterFlagBitsNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureClusterFlagBitsNV::eAllowDisableOpacityMicromaps: return "AllowDisableOpacityMicromaps"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureGeometryFlagBitsNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureGeometryFlagBitsNV::eCullDisable : return "CullDisable"; + case ClusterAccelerationStructureGeometryFlagBitsNV::eNoDuplicateAnyhitInvocation: return "NoDuplicateAnyhitInvocation"; + case ClusterAccelerationStructureGeometryFlagBitsNV::eOpaque : return "Opaque"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureAddressResolutionFlagBitsNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eNone : return "None"; + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstImplicitData: return "IndirectedDstImplicitData"; + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedScratchData : return "IndirectedScratchData"; + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstAddressArray: return "IndirectedDstAddressArray"; + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedDstSizesArray : return "IndirectedDstSizesArray"; + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedSrcInfosArray : return "IndirectedSrcInfosArray"; + case ClusterAccelerationStructureAddressResolutionFlagBitsNV::eIndirectedSrcInfosCount : return "IndirectedSrcInfosCount"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureIndexFormatFlagBitsNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureIndexFormatFlagBitsNV::e8 : return "8"; + case ClusterAccelerationStructureIndexFormatFlagBitsNV::e16: return "16"; + case ClusterAccelerationStructureIndexFormatFlagBitsNV::e32: return "32"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureTypeNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureTypeNV::eClustersBottomLevel : return "ClustersBottomLevel"; + case ClusterAccelerationStructureTypeNV::eTriangleCluster : return "TriangleCluster"; + case ClusterAccelerationStructureTypeNV::eTriangleClusterTemplate: return "TriangleClusterTemplate"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureOpTypeNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureOpTypeNV::eMoveObjects : return "MoveObjects"; + case ClusterAccelerationStructureOpTypeNV::eBuildClustersBottomLevel : return "BuildClustersBottomLevel"; + case ClusterAccelerationStructureOpTypeNV::eBuildTriangleCluster : return "BuildTriangleCluster"; + case ClusterAccelerationStructureOpTypeNV::eBuildTriangleClusterTemplate: return "BuildTriangleClusterTemplate"; + case ClusterAccelerationStructureOpTypeNV::eInstantiateTriangleCluster : return "InstantiateTriangleCluster"; + case ClusterAccelerationStructureOpTypeNV::eGetClusterTemplateIndices : return "GetClusterTemplateIndices"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( ClusterAccelerationStructureOpModeNV value ) + { + switch ( value ) + { + case ClusterAccelerationStructureOpModeNV::eImplicitDestinations: return "ImplicitDestinations"; + case ClusterAccelerationStructureOpModeNV::eExplicitDestinations: return "ExplicitDestinations"; + case ClusterAccelerationStructureOpModeNV::eComputeSizes : return "ComputeSizes"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_NV_partitioned_acceleration_structure === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PartitionedAccelerationStructureOpTypeNV value ) + { + switch ( value ) + { + case PartitionedAccelerationStructureOpTypeNV::eWriteInstance : return "WriteInstance"; + case PartitionedAccelerationStructureOpTypeNV::eUpdateInstance : return "UpdateInstance"; + case PartitionedAccelerationStructureOpTypeNV::eWritePartitionTranslation: return "WritePartitionTranslation"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( PartitionedAccelerationStructureInstanceFlagBitsNV value ) + { + switch ( value ) + { + case PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagTriangleFacingCullDisable: return "FlagTriangleFacingCullDisable"; + case PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagTriangleFlipFacing : return "FlagTriangleFlipFacing"; + case PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagForceOpaque : return "FlagForceOpaque"; + case PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagForceNoOpaque : return "FlagForceNoOpaque"; + case PartitionedAccelerationStructureInstanceFlagBitsNV::eFlagEnableExplicitBoundingBox: return "FlagEnableExplicitBoundingBox"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_device_generated_commands === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectCommandsTokenTypeEXT value ) + { + switch ( value ) + { + case IndirectCommandsTokenTypeEXT::eExecutionSet : return "ExecutionSet"; + case IndirectCommandsTokenTypeEXT::ePushConstant : return "PushConstant"; + case IndirectCommandsTokenTypeEXT::eSequenceIndex : return "SequenceIndex"; + case IndirectCommandsTokenTypeEXT::eIndexBuffer : return "IndexBuffer"; + case IndirectCommandsTokenTypeEXT::eVertexBuffer : return "VertexBuffer"; + case IndirectCommandsTokenTypeEXT::eDrawIndexed : return "DrawIndexed"; + case IndirectCommandsTokenTypeEXT::eDraw : return "Draw"; + case IndirectCommandsTokenTypeEXT::eDrawIndexedCount : return "DrawIndexedCount"; + case IndirectCommandsTokenTypeEXT::eDrawCount : return "DrawCount"; + case IndirectCommandsTokenTypeEXT::eDispatch : return "Dispatch"; + case IndirectCommandsTokenTypeEXT::eDrawMeshTasksNV : return "DrawMeshTasksNV"; + case IndirectCommandsTokenTypeEXT::eDrawMeshTasksCountNV: return "DrawMeshTasksCountNV"; + case IndirectCommandsTokenTypeEXT::eDrawMeshTasks : return "DrawMeshTasks"; + case IndirectCommandsTokenTypeEXT::eDrawMeshTasksCount : return "DrawMeshTasksCount"; + case IndirectCommandsTokenTypeEXT::eTraceRays2 : return "TraceRays2"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectExecutionSetInfoTypeEXT value ) + { + switch ( value ) + { + case IndirectExecutionSetInfoTypeEXT::ePipelines : return "Pipelines"; + case IndirectExecutionSetInfoTypeEXT::eShaderObjects: return "ShaderObjects"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectCommandsLayoutUsageFlagBitsEXT value ) + { + switch ( value ) + { + case IndirectCommandsLayoutUsageFlagBitsEXT::eExplicitPreprocess: return "ExplicitPreprocess"; + case IndirectCommandsLayoutUsageFlagBitsEXT::eUnorderedSequences: return "UnorderedSequences"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( IndirectCommandsInputModeFlagBitsEXT value ) + { + switch ( value ) + { + case IndirectCommandsInputModeFlagBitsEXT::eVulkanIndexBuffer: return "VulkanIndexBuffer"; + case IndirectCommandsInputModeFlagBitsEXT::eDxgiIndexBuffer : return "DxgiIndexBuffer"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_maintenance8 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( AccessFlagBits3KHR value ) + { + switch ( value ) + { + case AccessFlagBits3KHR::eNone: return "None"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_EXT_depth_clamp_control === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DepthClampModeEXT value ) + { + switch ( value ) + { + case DepthClampModeEXT::eViewportRange : return "ViewportRange"; + case DepthClampModeEXT::eUserDefinedRange: return "UserDefinedRange"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + + //=== VK_KHR_maintenance9 === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( DefaultVertexAttributeValueKHR value ) + { + switch ( value ) + { + case DefaultVertexAttributeValueKHR::eZeroZeroZeroZero: return "ZeroZeroZeroZero"; + case DefaultVertexAttributeValueKHR::eZeroZeroZeroOne : return "ZeroZeroZeroOne"; + default : return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast( value ) ) + " )"; + } + } + +#if defined( VK_USE_PLATFORM_OHOS ) + //=== VK_OHOS_surface === + + VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_20 std::string to_string( SurfaceCreateFlagBitsOHOS ) + { + return "(void)"; + } +#endif /*VK_USE_PLATFORM_OHOS*/ + +} // namespace VULKAN_HPP_NAMESPACE + +#if defined( __clang__ ) || defined( __GNUC__ ) +# pragma GCC diagnostic pop +#elif defined( _MSC_VER ) +# pragma warning( pop ) +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_vi.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_vi.h new file mode 100644 index 0000000000..5a52a17dff --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_vi.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_VI_H_ +#define VULKAN_VI_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_NN_vi_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_NN_vi_surface 1 +#define VK_NN_VI_SURFACE_SPEC_VERSION 1 +#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface" +typedef VkFlags VkViSurfaceCreateFlagsNN; +typedef struct VkViSurfaceCreateInfoNN { + VkStructureType sType; + const void* pNext; + VkViSurfaceCreateFlagsNN flags; + void* window; +} VkViSurfaceCreateInfoNN; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( + VkInstance instance, + const VkViSurfaceCreateInfoNN* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.cppm b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.cppm new file mode 100644 index 0000000000..04cd62f37d --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.cppm @@ -0,0 +1,171 @@ +// Copyright 2021-2025 The Khronos Group Inc. +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +// Note: This module is still in an experimental state. +// Any feedback is welcome on https://github.com/KhronosGroup/Vulkan-Hpp/issues. + +module; + +#include + +#if defined( __cpp_lib_modules ) && !defined( VULKAN_HPP_ENABLE_STD_MODULE ) +# define VULKAN_HPP_ENABLE_STD_MODULE +#endif + +#include + +export module vulkan_video_hpp; + +export namespace VULKAN_HPP_NAMESPACE +{ + namespace VULKAN_HPP_VIDEO_NAMESPACE + { + + //============= + //=== ENUMs === + //============= + + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ChromaSamplePosition; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorPrimaries; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameRestorationType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1InterpolationFilter; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Level; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1MatrixCoefficients; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Profile; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ReferenceName; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TransferCharacteristics; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TxMode; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264FieldOrderCount; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264AspectRatioIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264CabacInitIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ChromaFormatIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264DisableDeblockingFilterIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264LevelIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264MemMgmtControlOp; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ModificationOfPicNumsIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264NonVclNaluType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PictureType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PocType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ProfileIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SliceType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264WeightedBipredIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265AspectRatioIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ChromaFormatIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265LevelIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PictureType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileIdc; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SliceType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorSpace; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9FrameType; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9InterpolationFilter; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Level; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Profile; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ReferenceName; + + //=============== + //=== STRUCTS === + //=============== + + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1CDEF; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorConfig; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorConfigFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FilmGrain; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FilmGrainFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1GlobalMotion; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopFilter; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopFilterFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopRestoration; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Quantization; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1QuantizationFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Segmentation; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1SequenceHeader; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1SequenceHeaderFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TileInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TileInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TimingInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TimingInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeAV1PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeAV1PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeAV1ReferenceInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeAV1ReferenceInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264ReferenceInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264ReferenceInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265ReferenceInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265ReferenceInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeVP9PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeVP9PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1DecoderModelInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ExtensionHeader; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1OperatingPointInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1OperatingPointInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ReferenceInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ReferenceInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceListsInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceListsInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264RefListModEntry; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264RefPicMarkingEntry; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264SliceHeader; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264SliceHeaderFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264WeightTable; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264WeightTableFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265LongTermRefPics; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265PictureInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265PictureInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceListsInfo; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceListsInfoFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265SliceSegmentHeader; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265SliceSegmentHeaderFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265WeightTable; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265WeightTableFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264HrdParameters; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PictureParameterSet; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PpsFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ScalingLists; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SequenceParameterSet; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SequenceParameterSetVui; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SpsFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SpsVuiFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265DecPicBufMgr; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265HrdFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265HrdParameters; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265LongTermRefPicsSps; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PictureParameterSet; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PpsFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PredictorPaletteEntries; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileTierLevel; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileTierLevelFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ScalingLists; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SequenceParameterSet; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SequenceParameterSetVui; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ShortTermRefPicSet; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ShortTermRefPicSetFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SpsFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SpsVuiFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SubLayerHrdParameters; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265VideoParameterSet; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265VpsFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorConfig; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorConfigFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9LoopFilter; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9LoopFilterFlags; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Segmentation; + using VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9SegmentationFlags; + + } // namespace VULKAN_HPP_VIDEO_NAMESPACE +} // namespace VULKAN_HPP_NAMESPACE diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.hpp b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.hpp new file mode 100644 index 0000000000..0c904ee18c --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_video.hpp @@ -0,0 +1,5410 @@ +// Copyright 2021-2025 The Khronos Group Inc. +// SPDX-License-Identifier: Apache-2.0 OR MIT +// + +// This header is generated from the Khronos Vulkan XML API Registry. + +#ifndef VULKAN_VIDEO_HPP +#define VULKAN_VIDEO_HPP + +// clang-format off +#include +// clang-format on + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined( VULKAN_HPP_VIDEO_NAMESPACE ) +# define VULKAN_HPP_VIDEO_NAMESPACE video +#endif + +namespace VULKAN_HPP_NAMESPACE +{ + namespace VULKAN_HPP_VIDEO_NAMESPACE + { + + //============= + //=== ENUMs === + //============= + +#if defined( VULKAN_VIDEO_CODEC_H264STD_H_ ) + //=== vulkan_video_codec_h264std === + + enum class H264ChromaFormatIdc + { + eMonochrome = STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME, + e420 = STD_VIDEO_H264_CHROMA_FORMAT_IDC_420, + e422 = STD_VIDEO_H264_CHROMA_FORMAT_IDC_422, + e444 = STD_VIDEO_H264_CHROMA_FORMAT_IDC_444, + eInvalid = STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID + }; + + enum class H264ProfileIdc + { + eBaseline = STD_VIDEO_H264_PROFILE_IDC_BASELINE, + eMain = STD_VIDEO_H264_PROFILE_IDC_MAIN, + eHigh = STD_VIDEO_H264_PROFILE_IDC_HIGH, + eHigh444Predictive = STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE, + eInvalid = STD_VIDEO_H264_PROFILE_IDC_INVALID + }; + + enum class H264LevelIdc + { + e1_0 = STD_VIDEO_H264_LEVEL_IDC_1_0, + e1_1 = STD_VIDEO_H264_LEVEL_IDC_1_1, + e1_2 = STD_VIDEO_H264_LEVEL_IDC_1_2, + e1_3 = STD_VIDEO_H264_LEVEL_IDC_1_3, + e2_0 = STD_VIDEO_H264_LEVEL_IDC_2_0, + e2_1 = STD_VIDEO_H264_LEVEL_IDC_2_1, + e2_2 = STD_VIDEO_H264_LEVEL_IDC_2_2, + e3_0 = STD_VIDEO_H264_LEVEL_IDC_3_0, + e3_1 = STD_VIDEO_H264_LEVEL_IDC_3_1, + e3_2 = STD_VIDEO_H264_LEVEL_IDC_3_2, + e4_0 = STD_VIDEO_H264_LEVEL_IDC_4_0, + e4_1 = STD_VIDEO_H264_LEVEL_IDC_4_1, + e4_2 = STD_VIDEO_H264_LEVEL_IDC_4_2, + e5_0 = STD_VIDEO_H264_LEVEL_IDC_5_0, + e5_1 = STD_VIDEO_H264_LEVEL_IDC_5_1, + e5_2 = STD_VIDEO_H264_LEVEL_IDC_5_2, + e6_0 = STD_VIDEO_H264_LEVEL_IDC_6_0, + e6_1 = STD_VIDEO_H264_LEVEL_IDC_6_1, + e6_2 = STD_VIDEO_H264_LEVEL_IDC_6_2, + eInvalid = STD_VIDEO_H264_LEVEL_IDC_INVALID + }; + + enum class H264PocType + { + e0 = STD_VIDEO_H264_POC_TYPE_0, + e1 = STD_VIDEO_H264_POC_TYPE_1, + e2 = STD_VIDEO_H264_POC_TYPE_2, + eInvalid = STD_VIDEO_H264_POC_TYPE_INVALID + }; + + enum class H264AspectRatioIdc + { + eUnspecified = STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED, + eSquare = STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE, + e12_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11, + e10_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11, + e16_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11, + e40_33 = STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33, + e24_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11, + e20_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11, + e32_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11, + e80_33 = STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33, + e18_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11, + e15_11 = STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11, + e64_33 = STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33, + e160_99 = STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99, + e4_3 = STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3, + e3_2 = STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2, + e2_1 = STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1, + eExtendedSar = STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR, + eInvalid = STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID + }; + + enum class H264WeightedBipredIdc + { + eDefault = STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT, + eExplicit = STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT, + eImplicit = STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT, + eInvalid = STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID + }; + + enum class H264ModificationOfPicNumsIdc + { + eShortTermSubtract = STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT, + eShortTermAdd = STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD, + eLongTerm = STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM, + eEnd = STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END, + eInvalid = STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID + }; + + enum class H264MemMgmtControlOp + { + eEnd = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END, + eUnmarkShortTerm = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM, + eUnmarkLongTerm = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM, + eMarkLongTerm = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM, + eSetMaxLongTermIndex = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX, + eUnmarkAll = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL, + eMarkCurrentAsLongTerm = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM, + eInvalid = STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID + }; + + enum class H264CabacInitIdc + { + e0 = STD_VIDEO_H264_CABAC_INIT_IDC_0, + e1 = STD_VIDEO_H264_CABAC_INIT_IDC_1, + e2 = STD_VIDEO_H264_CABAC_INIT_IDC_2, + eInvalid = STD_VIDEO_H264_CABAC_INIT_IDC_INVALID + }; + + enum class H264DisableDeblockingFilterIdc + { + eDisabled = STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED, + eEnabled = STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED, + ePartial = STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL, + eInvalid = STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID + }; + + enum class H264SliceType + { + eP = STD_VIDEO_H264_SLICE_TYPE_P, + eB = STD_VIDEO_H264_SLICE_TYPE_B, + eI = STD_VIDEO_H264_SLICE_TYPE_I, + eInvalid = STD_VIDEO_H264_SLICE_TYPE_INVALID + }; + + enum class H264PictureType + { + eP = STD_VIDEO_H264_PICTURE_TYPE_P, + eB = STD_VIDEO_H264_PICTURE_TYPE_B, + eI = STD_VIDEO_H264_PICTURE_TYPE_I, + eIdr = STD_VIDEO_H264_PICTURE_TYPE_IDR, + eInvalid = STD_VIDEO_H264_PICTURE_TYPE_INVALID + }; + + enum class H264NonVclNaluType + { + eSps = STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS, + ePps = STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS, + eAud = STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD, + ePrefix = STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX, + eEndOfSequence = STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE, + eEndOfStream = STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM, + ePrecoded = STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED, + eInvalid = STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ ) + //=== vulkan_video_codec_h264std_decode === + + enum class DecodeH264FieldOrderCount + { + eTop = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP, + eBottom = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM, + eInvalid = STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H265STD_H_ ) + //=== vulkan_video_codec_h265std === + + enum class H265ChromaFormatIdc + { + eMonochrome = STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME, + e420 = STD_VIDEO_H265_CHROMA_FORMAT_IDC_420, + e422 = STD_VIDEO_H265_CHROMA_FORMAT_IDC_422, + e444 = STD_VIDEO_H265_CHROMA_FORMAT_IDC_444, + eInvalid = STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID + }; + + enum class H265ProfileIdc + { + eMain = STD_VIDEO_H265_PROFILE_IDC_MAIN, + eMain10 = STD_VIDEO_H265_PROFILE_IDC_MAIN_10, + eMainStillPicture = STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE, + eFormatRangeExtensions = STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS, + eSccExtensions = STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS, + eInvalid = STD_VIDEO_H265_PROFILE_IDC_INVALID + }; + + enum class H265LevelIdc + { + e1_0 = STD_VIDEO_H265_LEVEL_IDC_1_0, + e2_0 = STD_VIDEO_H265_LEVEL_IDC_2_0, + e2_1 = STD_VIDEO_H265_LEVEL_IDC_2_1, + e3_0 = STD_VIDEO_H265_LEVEL_IDC_3_0, + e3_1 = STD_VIDEO_H265_LEVEL_IDC_3_1, + e4_0 = STD_VIDEO_H265_LEVEL_IDC_4_0, + e4_1 = STD_VIDEO_H265_LEVEL_IDC_4_1, + e5_0 = STD_VIDEO_H265_LEVEL_IDC_5_0, + e5_1 = STD_VIDEO_H265_LEVEL_IDC_5_1, + e5_2 = STD_VIDEO_H265_LEVEL_IDC_5_2, + e6_0 = STD_VIDEO_H265_LEVEL_IDC_6_0, + e6_1 = STD_VIDEO_H265_LEVEL_IDC_6_1, + e6_2 = STD_VIDEO_H265_LEVEL_IDC_6_2, + eInvalid = STD_VIDEO_H265_LEVEL_IDC_INVALID + }; + + enum class H265SliceType + { + eB = STD_VIDEO_H265_SLICE_TYPE_B, + eP = STD_VIDEO_H265_SLICE_TYPE_P, + eI = STD_VIDEO_H265_SLICE_TYPE_I, + eInvalid = STD_VIDEO_H265_SLICE_TYPE_INVALID + }; + + enum class H265PictureType + { + eP = STD_VIDEO_H265_PICTURE_TYPE_P, + eB = STD_VIDEO_H265_PICTURE_TYPE_B, + eI = STD_VIDEO_H265_PICTURE_TYPE_I, + eIdr = STD_VIDEO_H265_PICTURE_TYPE_IDR, + eInvalid = STD_VIDEO_H265_PICTURE_TYPE_INVALID + }; + + enum class H265AspectRatioIdc + { + eUnspecified = STD_VIDEO_H265_ASPECT_RATIO_IDC_UNSPECIFIED, + eSquare = STD_VIDEO_H265_ASPECT_RATIO_IDC_SQUARE, + e12_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_12_11, + e10_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_10_11, + e16_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_16_11, + e40_33 = STD_VIDEO_H265_ASPECT_RATIO_IDC_40_33, + e24_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_24_11, + e20_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_20_11, + e32_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_32_11, + e80_33 = STD_VIDEO_H265_ASPECT_RATIO_IDC_80_33, + e18_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_18_11, + e15_11 = STD_VIDEO_H265_ASPECT_RATIO_IDC_15_11, + e64_33 = STD_VIDEO_H265_ASPECT_RATIO_IDC_64_33, + e160_99 = STD_VIDEO_H265_ASPECT_RATIO_IDC_160_99, + e4_3 = STD_VIDEO_H265_ASPECT_RATIO_IDC_4_3, + e3_2 = STD_VIDEO_H265_ASPECT_RATIO_IDC_3_2, + e2_1 = STD_VIDEO_H265_ASPECT_RATIO_IDC_2_1, + eExtendedSar = STD_VIDEO_H265_ASPECT_RATIO_IDC_EXTENDED_SAR, + eInvalid = STD_VIDEO_H265_ASPECT_RATIO_IDC_INVALID + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_VP9STD_H_ ) + //=== vulkan_video_codec_vp9std === + + enum class VP9Profile + { + e0 = STD_VIDEO_VP9_PROFILE_0, + e1 = STD_VIDEO_VP9_PROFILE_1, + e2 = STD_VIDEO_VP9_PROFILE_2, + e3 = STD_VIDEO_VP9_PROFILE_3, + eInvalid = STD_VIDEO_VP9_PROFILE_INVALID + }; + + enum class VP9Level + { + e1_0 = STD_VIDEO_VP9_LEVEL_1_0, + e1_1 = STD_VIDEO_VP9_LEVEL_1_1, + e2_0 = STD_VIDEO_VP9_LEVEL_2_0, + e2_1 = STD_VIDEO_VP9_LEVEL_2_1, + e3_0 = STD_VIDEO_VP9_LEVEL_3_0, + e3_1 = STD_VIDEO_VP9_LEVEL_3_1, + e4_0 = STD_VIDEO_VP9_LEVEL_4_0, + e4_1 = STD_VIDEO_VP9_LEVEL_4_1, + e5_0 = STD_VIDEO_VP9_LEVEL_5_0, + e5_1 = STD_VIDEO_VP9_LEVEL_5_1, + e5_2 = STD_VIDEO_VP9_LEVEL_5_2, + e6_0 = STD_VIDEO_VP9_LEVEL_6_0, + e6_1 = STD_VIDEO_VP9_LEVEL_6_1, + e6_2 = STD_VIDEO_VP9_LEVEL_6_2, + eInvalid = STD_VIDEO_VP9_LEVEL_INVALID + }; + + enum class VP9FrameType + { + eKey = STD_VIDEO_VP9_FRAME_TYPE_KEY, + eNonKey = STD_VIDEO_VP9_FRAME_TYPE_NON_KEY, + eInvalid = STD_VIDEO_VP9_FRAME_TYPE_INVALID + }; + + enum class VP9ReferenceName + { + eIntraFrame = STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME, + eLastFrame = STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME, + eGoldenFrame = STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME, + eAltrefFrame = STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME, + eInvalid = STD_VIDEO_VP9_REFERENCE_NAME_INVALID + }; + + enum class VP9InterpolationFilter + { + eEighttap = STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP, + eEighttapSmooth = STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH, + eEighttapSharp = STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP, + eBilinear = STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR, + eSwitchable = STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE, + eInvalid = STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID + }; + + enum class VP9ColorSpace + { + eUnknown = STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN, + eBt601 = STD_VIDEO_VP9_COLOR_SPACE_BT_601, + eBt709 = STD_VIDEO_VP9_COLOR_SPACE_BT_709, + eSmpte170 = STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170, + eSmpte240 = STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240, + eBt2020 = STD_VIDEO_VP9_COLOR_SPACE_BT_2020, + eReserved = STD_VIDEO_VP9_COLOR_SPACE_RESERVED, + eRgb = STD_VIDEO_VP9_COLOR_SPACE_RGB, + eInvalid = STD_VIDEO_VP9_COLOR_SPACE_INVALID + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_AV1STD_H_ ) + //=== vulkan_video_codec_av1std === + + enum class AV1Profile + { + eMain = STD_VIDEO_AV1_PROFILE_MAIN, + eHigh = STD_VIDEO_AV1_PROFILE_HIGH, + eProfessional = STD_VIDEO_AV1_PROFILE_PROFESSIONAL, + eInvalid = STD_VIDEO_AV1_PROFILE_INVALID + }; + + enum class AV1Level + { + e2_0 = STD_VIDEO_AV1_LEVEL_2_0, + e2_1 = STD_VIDEO_AV1_LEVEL_2_1, + e2_2 = STD_VIDEO_AV1_LEVEL_2_2, + e2_3 = STD_VIDEO_AV1_LEVEL_2_3, + e3_0 = STD_VIDEO_AV1_LEVEL_3_0, + e3_1 = STD_VIDEO_AV1_LEVEL_3_1, + e3_2 = STD_VIDEO_AV1_LEVEL_3_2, + e3_3 = STD_VIDEO_AV1_LEVEL_3_3, + e4_0 = STD_VIDEO_AV1_LEVEL_4_0, + e4_1 = STD_VIDEO_AV1_LEVEL_4_1, + e4_2 = STD_VIDEO_AV1_LEVEL_4_2, + e4_3 = STD_VIDEO_AV1_LEVEL_4_3, + e5_0 = STD_VIDEO_AV1_LEVEL_5_0, + e5_1 = STD_VIDEO_AV1_LEVEL_5_1, + e5_2 = STD_VIDEO_AV1_LEVEL_5_2, + e5_3 = STD_VIDEO_AV1_LEVEL_5_3, + e6_0 = STD_VIDEO_AV1_LEVEL_6_0, + e6_1 = STD_VIDEO_AV1_LEVEL_6_1, + e6_2 = STD_VIDEO_AV1_LEVEL_6_2, + e6_3 = STD_VIDEO_AV1_LEVEL_6_3, + e7_0 = STD_VIDEO_AV1_LEVEL_7_0, + e7_1 = STD_VIDEO_AV1_LEVEL_7_1, + e7_2 = STD_VIDEO_AV1_LEVEL_7_2, + e7_3 = STD_VIDEO_AV1_LEVEL_7_3, + eInvalid = STD_VIDEO_AV1_LEVEL_INVALID + }; + + enum class AV1FrameType + { + eKey = STD_VIDEO_AV1_FRAME_TYPE_KEY, + eInter = STD_VIDEO_AV1_FRAME_TYPE_INTER, + eIntraOnly = STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY, + eSwitch = STD_VIDEO_AV1_FRAME_TYPE_SWITCH, + eInvalid = STD_VIDEO_AV1_FRAME_TYPE_INVALID + }; + + enum class AV1ReferenceName + { + eIntraFrame = STD_VIDEO_AV1_REFERENCE_NAME_INTRA_FRAME, + eLastFrame = STD_VIDEO_AV1_REFERENCE_NAME_LAST_FRAME, + eLast2Frame = STD_VIDEO_AV1_REFERENCE_NAME_LAST2_FRAME, + eLast3Frame = STD_VIDEO_AV1_REFERENCE_NAME_LAST3_FRAME, + eGoldenFrame = STD_VIDEO_AV1_REFERENCE_NAME_GOLDEN_FRAME, + eBwdrefFrame = STD_VIDEO_AV1_REFERENCE_NAME_BWDREF_FRAME, + eAltref2Frame = STD_VIDEO_AV1_REFERENCE_NAME_ALTREF2_FRAME, + eAltrefFrame = STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME, + eInvalid = STD_VIDEO_AV1_REFERENCE_NAME_INVALID + }; + + enum class AV1InterpolationFilter + { + eEighttap = STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP, + eEighttapSmooth = STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH, + eEighttapSharp = STD_VIDEO_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP, + eBilinear = STD_VIDEO_AV1_INTERPOLATION_FILTER_BILINEAR, + eSwitchable = STD_VIDEO_AV1_INTERPOLATION_FILTER_SWITCHABLE, + eInvalid = STD_VIDEO_AV1_INTERPOLATION_FILTER_INVALID + }; + + enum class AV1TxMode + { + eOnly4X4 = STD_VIDEO_AV1_TX_MODE_ONLY_4X4, + eLargest = STD_VIDEO_AV1_TX_MODE_LARGEST, + eSelect = STD_VIDEO_AV1_TX_MODE_SELECT, + eInvalid = STD_VIDEO_AV1_TX_MODE_INVALID + }; + + enum class AV1FrameRestorationType + { + eNone = STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_NONE, + eWiener = STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_WIENER, + eSgrproj = STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SGRPROJ, + eSwitchable = STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SWITCHABLE, + eInvalid = STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_INVALID + }; + + enum class AV1ColorPrimaries + { + eBt709 = STD_VIDEO_AV1_COLOR_PRIMARIES_BT_709, + eUnspecified = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED, + eBtUnspecified VULKAN_HPP_DEPRECATED_17( "eBtUnspecified is deprecated, eUnspecified should be used instead." ) = + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED, + eBt470M = STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_M, + eBt470BG = STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_B_G, + eBt601 = STD_VIDEO_AV1_COLOR_PRIMARIES_BT_601, + eSmpte240 = STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_240, + eGenericFilm = STD_VIDEO_AV1_COLOR_PRIMARIES_GENERIC_FILM, + eBt2020 = STD_VIDEO_AV1_COLOR_PRIMARIES_BT_2020, + eXyz = STD_VIDEO_AV1_COLOR_PRIMARIES_XYZ, + eSmpte431 = STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_431, + eSmpte432 = STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432, + eEbu3213 = STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213, + eInvalid = STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID + }; + + enum class AV1TransferCharacteristics + { + eReserved0 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_0, + eBt709 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_709, + eUnspecified = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_UNSPECIFIED, + eReserved3 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_RESERVED_3, + eBt470M = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_M, + eBt470BG = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_470_B_G, + eBt601 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_601, + eSmpte240 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_240, + eLinear = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LINEAR, + eLog100 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100, + eLog100Sqrt10 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_LOG_100_SQRT10, + eIec61966 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_IEC_61966, + eBt1361 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_1361, + eSrgb = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SRGB, + eBt2020_10Bit = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_10_BIT, + eBt2020_12Bit = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_BT_2020_12_BIT, + eSmpte2084 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_2084, + eSmpte428 = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_SMPTE_428, + eHlg = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_HLG, + eInvalid = STD_VIDEO_AV1_TRANSFER_CHARACTERISTICS_INVALID + }; + + enum class AV1MatrixCoefficients + { + eIdentity = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_IDENTITY, + eBt709 = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_709, + eUnspecified = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_UNSPECIFIED, + eReserved3 = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_RESERVED_3, + eFcc = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_FCC, + eBt470BG = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_470_B_G, + eBt601 = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_601, + eSmpte240 = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_240, + eSmpteYcgco = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_YCGCO, + eBt2020Ncl = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_NCL, + eBt2020Cl = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_BT_2020_CL, + eSmpte2085 = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_SMPTE_2085, + eChromatNcl = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_NCL, + eChromatCl = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_CHROMAT_CL, + eIctcp = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_ICTCP, + eInvalid = STD_VIDEO_AV1_MATRIX_COEFFICIENTS_INVALID + }; + + enum class AV1ChromaSamplePosition + { + eUnknown = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_UNKNOWN, + eVertical = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_VERTICAL, + eColocated = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_COLOCATED, + eReserved = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_RESERVED, + eInvalid = STD_VIDEO_AV1_CHROMA_SAMPLE_POSITION_INVALID + }; +#endif + + //=============== + //=== STRUCTS === + //=============== + +#if defined( VULKAN_VIDEO_CODEC_H264STD_H_ ) + //=== vulkan_video_codec_h264std === + + struct H264SpsVuiFlags + { + using NativeType = StdVideoH264SpsVuiFlags; + + operator StdVideoH264SpsVuiFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SpsVuiFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SpsVuiFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264SpsVuiFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264SpsVuiFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( aspect_ratio_info_present_flag == rhs.aspect_ratio_info_present_flag ) && ( overscan_info_present_flag == rhs.overscan_info_present_flag ) && + ( overscan_appropriate_flag == rhs.overscan_appropriate_flag ) && ( video_signal_type_present_flag == rhs.video_signal_type_present_flag ) && + ( video_full_range_flag == rhs.video_full_range_flag ) && ( color_description_present_flag == rhs.color_description_present_flag ) && + ( chroma_loc_info_present_flag == rhs.chroma_loc_info_present_flag ) && ( timing_info_present_flag == rhs.timing_info_present_flag ) && + ( fixed_frame_rate_flag == rhs.fixed_frame_rate_flag ) && ( bitstream_restriction_flag == rhs.bitstream_restriction_flag ) && + ( nal_hrd_parameters_present_flag == rhs.nal_hrd_parameters_present_flag ) && + ( vcl_hrd_parameters_present_flag == rhs.vcl_hrd_parameters_present_flag ); + } + + bool operator!=( H264SpsVuiFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t color_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t timing_info_present_flag : 1; + uint32_t fixed_frame_rate_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; + }; + + struct H264HrdParameters + { + using NativeType = StdVideoH264HrdParameters; + + operator StdVideoH264HrdParameters const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264HrdParameters &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264HrdParameters const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264HrdParameters *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264HrdParameters const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( cpb_cnt_minus1 == rhs.cpb_cnt_minus1 ) && ( bit_rate_scale == rhs.bit_rate_scale ) && ( cpb_size_scale == rhs.cpb_size_scale ) && + ( reserved1 == rhs.reserved1 ) && ( bit_rate_value_minus1 == rhs.bit_rate_value_minus1 ) && + ( cpb_size_value_minus1 == rhs.cpb_size_value_minus1 ) && ( cbr_flag == rhs.cbr_flag ) && + ( initial_cpb_removal_delay_length_minus1 == rhs.initial_cpb_removal_delay_length_minus1 ) && + ( cpb_removal_delay_length_minus1 == rhs.cpb_removal_delay_length_minus1 ) && + ( dpb_output_delay_length_minus1 == rhs.dpb_output_delay_length_minus1 ) && ( time_offset_length == rhs.time_offset_length ); + } + + bool operator!=( H264HrdParameters const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint8_t cpb_cnt_minus1 = {}; + uint8_t bit_rate_scale = {}; + uint8_t cpb_size_scale = {}; + uint8_t reserved1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D bit_rate_value_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cpb_size_value_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cbr_flag = {}; + uint32_t initial_cpb_removal_delay_length_minus1 = {}; + uint32_t cpb_removal_delay_length_minus1 = {}; + uint32_t dpb_output_delay_length_minus1 = {}; + uint32_t time_offset_length = {}; + }; + + struct H264SequenceParameterSetVui + { + using NativeType = StdVideoH264SequenceParameterSetVui; + + operator StdVideoH264SequenceParameterSetVui const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SequenceParameterSetVui &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SequenceParameterSetVui const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264SequenceParameterSetVui *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264SequenceParameterSetVui const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( aspect_ratio_idc == rhs.aspect_ratio_idc ) && ( sar_width == rhs.sar_width ) && ( sar_height == rhs.sar_height ) && + ( video_format == rhs.video_format ) && ( colour_primaries == rhs.colour_primaries ) && + ( transfer_characteristics == rhs.transfer_characteristics ) && ( matrix_coefficients == rhs.matrix_coefficients ) && + ( num_units_in_tick == rhs.num_units_in_tick ) && ( time_scale == rhs.time_scale ) && ( max_num_reorder_frames == rhs.max_num_reorder_frames ) && + ( max_dec_frame_buffering == rhs.max_dec_frame_buffering ) && ( chroma_sample_loc_type_top_field == rhs.chroma_sample_loc_type_top_field ) && + ( chroma_sample_loc_type_bottom_field == rhs.chroma_sample_loc_type_bottom_field ) && ( reserved1 == rhs.reserved1 ) && + ( pHrdParameters == rhs.pHrdParameters ); + } + + bool operator!=( H264SequenceParameterSetVui const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SpsVuiFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264AspectRatioIdc aspect_ratio_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264AspectRatioIdc::eUnspecified; + uint16_t sar_width = {}; + uint16_t sar_height = {}; + uint8_t video_format = {}; + uint8_t colour_primaries = {}; + uint8_t transfer_characteristics = {}; + uint8_t matrix_coefficients = {}; + uint32_t num_units_in_tick = {}; + uint32_t time_scale = {}; + uint8_t max_num_reorder_frames = {}; + uint8_t max_dec_frame_buffering = {}; + uint8_t chroma_sample_loc_type_top_field = {}; + uint8_t chroma_sample_loc_type_bottom_field = {}; + uint32_t reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264HrdParameters * pHrdParameters = {}; + }; + + struct H264SpsFlags + { + using NativeType = StdVideoH264SpsFlags; + + operator StdVideoH264SpsFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SpsFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SpsFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264SpsFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264SpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( constraint_set0_flag == rhs.constraint_set0_flag ) && ( constraint_set1_flag == rhs.constraint_set1_flag ) && + ( constraint_set2_flag == rhs.constraint_set2_flag ) && ( constraint_set3_flag == rhs.constraint_set3_flag ) && + ( constraint_set4_flag == rhs.constraint_set4_flag ) && ( constraint_set5_flag == rhs.constraint_set5_flag ) && + ( direct_8x8_inference_flag == rhs.direct_8x8_inference_flag ) && ( mb_adaptive_frame_field_flag == rhs.mb_adaptive_frame_field_flag ) && + ( frame_mbs_only_flag == rhs.frame_mbs_only_flag ) && ( delta_pic_order_always_zero_flag == rhs.delta_pic_order_always_zero_flag ) && + ( separate_colour_plane_flag == rhs.separate_colour_plane_flag ) && + ( gaps_in_frame_num_value_allowed_flag == rhs.gaps_in_frame_num_value_allowed_flag ) && + ( qpprime_y_zero_transform_bypass_flag == rhs.qpprime_y_zero_transform_bypass_flag ) && ( frame_cropping_flag == rhs.frame_cropping_flag ) && + ( seq_scaling_matrix_present_flag == rhs.seq_scaling_matrix_present_flag ) && ( vui_parameters_present_flag == rhs.vui_parameters_present_flag ); + } + + bool operator!=( H264SpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t constraint_set0_flag : 1; + uint32_t constraint_set1_flag : 1; + uint32_t constraint_set2_flag : 1; + uint32_t constraint_set3_flag : 1; + uint32_t constraint_set4_flag : 1; + uint32_t constraint_set5_flag : 1; + uint32_t direct_8x8_inference_flag : 1; + uint32_t mb_adaptive_frame_field_flag : 1; + uint32_t frame_mbs_only_flag : 1; + uint32_t delta_pic_order_always_zero_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t gaps_in_frame_num_value_allowed_flag : 1; + uint32_t qpprime_y_zero_transform_bypass_flag : 1; + uint32_t frame_cropping_flag : 1; + uint32_t seq_scaling_matrix_present_flag : 1; + uint32_t vui_parameters_present_flag : 1; + }; + + struct H264ScalingLists + { + using NativeType = StdVideoH264ScalingLists; + + operator StdVideoH264ScalingLists const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264ScalingLists &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264ScalingLists const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264ScalingLists *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264ScalingLists const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( scaling_list_present_mask == rhs.scaling_list_present_mask ) && ( use_default_scaling_matrix_mask == rhs.use_default_scaling_matrix_mask ) && + ( ScalingList4x4 == rhs.ScalingList4x4 ) && ( ScalingList8x8 == rhs.ScalingList8x8 ); + } + + bool operator!=( H264ScalingLists const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint16_t scaling_list_present_mask = {}; + uint16_t use_default_scaling_matrix_mask = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D + ScalingList4x4 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D + ScalingList8x8 = {}; + }; + + struct H264SequenceParameterSet + { + using NativeType = StdVideoH264SequenceParameterSet; + + operator StdVideoH264SequenceParameterSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SequenceParameterSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264SequenceParameterSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264SequenceParameterSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264SequenceParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( profile_idc == rhs.profile_idc ) && ( level_idc == rhs.level_idc ) && + ( chroma_format_idc == rhs.chroma_format_idc ) && ( seq_parameter_set_id == rhs.seq_parameter_set_id ) && + ( bit_depth_luma_minus8 == rhs.bit_depth_luma_minus8 ) && ( bit_depth_chroma_minus8 == rhs.bit_depth_chroma_minus8 ) && + ( log2_max_frame_num_minus4 == rhs.log2_max_frame_num_minus4 ) && ( pic_order_cnt_type == rhs.pic_order_cnt_type ) && + ( offset_for_non_ref_pic == rhs.offset_for_non_ref_pic ) && ( offset_for_top_to_bottom_field == rhs.offset_for_top_to_bottom_field ) && + ( log2_max_pic_order_cnt_lsb_minus4 == rhs.log2_max_pic_order_cnt_lsb_minus4 ) && + ( num_ref_frames_in_pic_order_cnt_cycle == rhs.num_ref_frames_in_pic_order_cnt_cycle ) && ( max_num_ref_frames == rhs.max_num_ref_frames ) && + ( reserved1 == rhs.reserved1 ) && ( pic_width_in_mbs_minus1 == rhs.pic_width_in_mbs_minus1 ) && + ( pic_height_in_map_units_minus1 == rhs.pic_height_in_map_units_minus1 ) && ( frame_crop_left_offset == rhs.frame_crop_left_offset ) && + ( frame_crop_right_offset == rhs.frame_crop_right_offset ) && ( frame_crop_top_offset == rhs.frame_crop_top_offset ) && + ( frame_crop_bottom_offset == rhs.frame_crop_bottom_offset ) && ( reserved2 == rhs.reserved2 ) && + ( pOffsetForRefFrame == rhs.pOffsetForRefFrame ) && ( pScalingLists == rhs.pScalingLists ) && + ( pSequenceParameterSetVui == rhs.pSequenceParameterSetVui ); + } + + bool operator!=( H264SequenceParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SpsFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ProfileIdc profile_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ProfileIdc::eBaseline; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264LevelIdc level_idc = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264LevelIdc::e1_0; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ChromaFormatIdc chroma_format_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ChromaFormatIdc::eMonochrome; + uint8_t seq_parameter_set_id = {}; + uint8_t bit_depth_luma_minus8 = {}; + uint8_t bit_depth_chroma_minus8 = {}; + uint8_t log2_max_frame_num_minus4 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PocType pic_order_cnt_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PocType::e0; + int32_t offset_for_non_ref_pic = {}; + int32_t offset_for_top_to_bottom_field = {}; + uint8_t log2_max_pic_order_cnt_lsb_minus4 = {}; + uint8_t num_ref_frames_in_pic_order_cnt_cycle = {}; + uint8_t max_num_ref_frames = {}; + uint8_t reserved1 = {}; + uint32_t pic_width_in_mbs_minus1 = {}; + uint32_t pic_height_in_map_units_minus1 = {}; + uint32_t frame_crop_left_offset = {}; + uint32_t frame_crop_right_offset = {}; + uint32_t frame_crop_top_offset = {}; + uint32_t frame_crop_bottom_offset = {}; + uint32_t reserved2 = {}; + const int32_t * pOffsetForRefFrame = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ScalingLists * pScalingLists = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SequenceParameterSetVui * pSequenceParameterSetVui = {}; + }; + + struct H264PpsFlags + { + using NativeType = StdVideoH264PpsFlags; + + operator StdVideoH264PpsFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264PpsFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264PpsFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264PpsFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264PpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( transform_8x8_mode_flag == rhs.transform_8x8_mode_flag ) && ( redundant_pic_cnt_present_flag == rhs.redundant_pic_cnt_present_flag ) && + ( constrained_intra_pred_flag == rhs.constrained_intra_pred_flag ) && + ( deblocking_filter_control_present_flag == rhs.deblocking_filter_control_present_flag ) && ( weighted_pred_flag == rhs.weighted_pred_flag ) && + ( bottom_field_pic_order_in_frame_present_flag == rhs.bottom_field_pic_order_in_frame_present_flag ) && + ( entropy_coding_mode_flag == rhs.entropy_coding_mode_flag ) && ( pic_scaling_matrix_present_flag == rhs.pic_scaling_matrix_present_flag ); + } + + bool operator!=( H264PpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t transform_8x8_mode_flag : 1; + uint32_t redundant_pic_cnt_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t bottom_field_pic_order_in_frame_present_flag : 1; + uint32_t entropy_coding_mode_flag : 1; + uint32_t pic_scaling_matrix_present_flag : 1; + }; + + struct H264PictureParameterSet + { + using NativeType = StdVideoH264PictureParameterSet; + + operator StdVideoH264PictureParameterSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264PictureParameterSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH264PictureParameterSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH264PictureParameterSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H264PictureParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( seq_parameter_set_id == rhs.seq_parameter_set_id ) && ( pic_parameter_set_id == rhs.pic_parameter_set_id ) && + ( num_ref_idx_l0_default_active_minus1 == rhs.num_ref_idx_l0_default_active_minus1 ) && + ( num_ref_idx_l1_default_active_minus1 == rhs.num_ref_idx_l1_default_active_minus1 ) && ( weighted_bipred_idc == rhs.weighted_bipred_idc ) && + ( pic_init_qp_minus26 == rhs.pic_init_qp_minus26 ) && ( pic_init_qs_minus26 == rhs.pic_init_qs_minus26 ) && + ( chroma_qp_index_offset == rhs.chroma_qp_index_offset ) && ( second_chroma_qp_index_offset == rhs.second_chroma_qp_index_offset ) && + ( pScalingLists == rhs.pScalingLists ); + } + + bool operator!=( H264PictureParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PpsFlags flags = {}; + uint8_t seq_parameter_set_id = {}; + uint8_t pic_parameter_set_id = {}; + uint8_t num_ref_idx_l0_default_active_minus1 = {}; + uint8_t num_ref_idx_l1_default_active_minus1 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264WeightedBipredIdc weighted_bipred_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264WeightedBipredIdc::eDefault; + int8_t pic_init_qp_minus26 = {}; + int8_t pic_init_qs_minus26 = {}; + int8_t chroma_qp_index_offset = {}; + int8_t second_chroma_qp_index_offset = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ScalingLists * pScalingLists = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ ) + //=== vulkan_video_codec_h264std_decode === + + struct DecodeH264PictureInfoFlags + { + using NativeType = StdVideoDecodeH264PictureInfoFlags; + + operator StdVideoDecodeH264PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH264PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH264PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( field_pic_flag == rhs.field_pic_flag ) && ( is_intra == rhs.is_intra ) && ( IdrPicFlag == rhs.IdrPicFlag ) && + ( bottom_field_flag == rhs.bottom_field_flag ) && ( is_reference == rhs.is_reference ) && + ( complementary_field_pair == rhs.complementary_field_pair ); + } + + bool operator!=( DecodeH264PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t field_pic_flag : 1; + uint32_t is_intra : 1; + uint32_t IdrPicFlag : 1; + uint32_t bottom_field_flag : 1; + uint32_t is_reference : 1; + uint32_t complementary_field_pair : 1; + }; + + struct DecodeH264PictureInfo + { + using NativeType = StdVideoDecodeH264PictureInfo; + + operator StdVideoDecodeH264PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH264PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH264PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( seq_parameter_set_id == rhs.seq_parameter_set_id ) && ( pic_parameter_set_id == rhs.pic_parameter_set_id ) && + ( reserved1 == rhs.reserved1 ) && ( reserved2 == rhs.reserved2 ) && ( frame_num == rhs.frame_num ) && ( idr_pic_id == rhs.idr_pic_id ) && + ( PicOrderCnt == rhs.PicOrderCnt ); + } + + bool operator!=( DecodeH264PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264PictureInfoFlags flags = {}; + uint8_t seq_parameter_set_id = {}; + uint8_t pic_parameter_set_id = {}; + uint8_t reserved1 = {}; + uint8_t reserved2 = {}; + uint16_t frame_num = {}; + uint16_t idr_pic_id = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D PicOrderCnt = {}; + }; + + struct DecodeH264ReferenceInfoFlags + { + using NativeType = StdVideoDecodeH264ReferenceInfoFlags; + + operator StdVideoDecodeH264ReferenceInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264ReferenceInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264ReferenceInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH264ReferenceInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH264ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( top_field_flag == rhs.top_field_flag ) && ( bottom_field_flag == rhs.bottom_field_flag ) && + ( used_for_long_term_reference == rhs.used_for_long_term_reference ) && ( is_non_existing == rhs.is_non_existing ); + } + + bool operator!=( DecodeH264ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t top_field_flag : 1; + uint32_t bottom_field_flag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t is_non_existing : 1; + }; + + struct DecodeH264ReferenceInfo + { + using NativeType = StdVideoDecodeH264ReferenceInfo; + + operator StdVideoDecodeH264ReferenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264ReferenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH264ReferenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH264ReferenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH264ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( FrameNum == rhs.FrameNum ) && ( reserved == rhs.reserved ) && ( PicOrderCnt == rhs.PicOrderCnt ); + } + + bool operator!=( DecodeH264ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH264ReferenceInfoFlags flags = {}; + uint16_t FrameNum = {}; + uint16_t reserved = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D PicOrderCnt = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ ) + //=== vulkan_video_codec_h264std_encode === + + struct EncodeH264WeightTableFlags + { + using NativeType = StdVideoEncodeH264WeightTableFlags; + + operator StdVideoEncodeH264WeightTableFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264WeightTableFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264WeightTableFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264WeightTableFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264WeightTableFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( luma_weight_l0_flag == rhs.luma_weight_l0_flag ) && ( chroma_weight_l0_flag == rhs.chroma_weight_l0_flag ) && + ( luma_weight_l1_flag == rhs.luma_weight_l1_flag ) && ( chroma_weight_l1_flag == rhs.chroma_weight_l1_flag ); + } + + bool operator!=( EncodeH264WeightTableFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t luma_weight_l0_flag = {}; + uint32_t chroma_weight_l0_flag = {}; + uint32_t luma_weight_l1_flag = {}; + uint32_t chroma_weight_l1_flag = {}; + }; + + struct EncodeH264WeightTable + { + using NativeType = StdVideoEncodeH264WeightTable; + + operator StdVideoEncodeH264WeightTable const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264WeightTable &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264WeightTable const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264WeightTable *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264WeightTable const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( luma_log2_weight_denom == rhs.luma_log2_weight_denom ) && + ( chroma_log2_weight_denom == rhs.chroma_log2_weight_denom ) && ( luma_weight_l0 == rhs.luma_weight_l0 ) && + ( luma_offset_l0 == rhs.luma_offset_l0 ) && ( chroma_weight_l0 == rhs.chroma_weight_l0 ) && ( chroma_offset_l0 == rhs.chroma_offset_l0 ) && + ( luma_weight_l1 == rhs.luma_weight_l1 ) && ( luma_offset_l1 == rhs.luma_offset_l1 ) && ( chroma_weight_l1 == rhs.chroma_weight_l1 ) && + ( chroma_offset_l1 == rhs.chroma_offset_l1 ); + } + + bool operator!=( EncodeH264WeightTable const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264WeightTableFlags flags = {}; + uint8_t luma_log2_weight_denom = {}; + uint8_t chroma_log2_weight_denom = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D luma_weight_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D luma_offset_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D chroma_weight_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D chroma_offset_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D luma_weight_l1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D luma_offset_l1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D chroma_weight_l1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D chroma_offset_l1 = {}; + }; + + struct EncodeH264SliceHeaderFlags + { + using NativeType = StdVideoEncodeH264SliceHeaderFlags; + + operator StdVideoEncodeH264SliceHeaderFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264SliceHeaderFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264SliceHeaderFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264SliceHeaderFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264SliceHeaderFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( direct_spatial_mv_pred_flag == rhs.direct_spatial_mv_pred_flag ) && + ( num_ref_idx_active_override_flag == rhs.num_ref_idx_active_override_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH264SliceHeaderFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t direct_spatial_mv_pred_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t reserved : 30; + }; + + struct EncodeH264PictureInfoFlags + { + using NativeType = StdVideoEncodeH264PictureInfoFlags; + + operator StdVideoEncodeH264PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( IdrPicFlag == rhs.IdrPicFlag ) && ( is_reference == rhs.is_reference ) && + ( no_output_of_prior_pics_flag == rhs.no_output_of_prior_pics_flag ) && ( long_term_reference_flag == rhs.long_term_reference_flag ) && + ( adaptive_ref_pic_marking_mode_flag == rhs.adaptive_ref_pic_marking_mode_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH264PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t IdrPicFlag : 1; + uint32_t is_reference : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t long_term_reference_flag : 1; + uint32_t adaptive_ref_pic_marking_mode_flag : 1; + uint32_t reserved : 27; + }; + + struct EncodeH264ReferenceInfoFlags + { + using NativeType = StdVideoEncodeH264ReferenceInfoFlags; + + operator StdVideoEncodeH264ReferenceInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( used_for_long_term_reference == rhs.used_for_long_term_reference ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH264ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t used_for_long_term_reference : 1; + uint32_t reserved : 31; + }; + + struct EncodeH264ReferenceListsInfoFlags + { + using NativeType = StdVideoEncodeH264ReferenceListsInfoFlags; + + operator StdVideoEncodeH264ReferenceListsInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceListsInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceListsInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceListsInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264ReferenceListsInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( ref_pic_list_modification_flag_l0 == rhs.ref_pic_list_modification_flag_l0 ) && + ( ref_pic_list_modification_flag_l1 == rhs.ref_pic_list_modification_flag_l1 ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH264ReferenceListsInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; + }; + + struct EncodeH264RefListModEntry + { + using NativeType = StdVideoEncodeH264RefListModEntry; + + operator StdVideoEncodeH264RefListModEntry const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264RefListModEntry &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264RefListModEntry const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264RefListModEntry *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264RefListModEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( modification_of_pic_nums_idc == rhs.modification_of_pic_nums_idc ) && ( abs_diff_pic_num_minus1 == rhs.abs_diff_pic_num_minus1 ) && + ( long_term_pic_num == rhs.long_term_pic_num ); + } + + bool operator!=( EncodeH264RefListModEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ModificationOfPicNumsIdc modification_of_pic_nums_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264ModificationOfPicNumsIdc::eShortTermSubtract; + uint16_t abs_diff_pic_num_minus1 = {}; + uint16_t long_term_pic_num = {}; + }; + + struct EncodeH264RefPicMarkingEntry + { + using NativeType = StdVideoEncodeH264RefPicMarkingEntry; + + operator StdVideoEncodeH264RefPicMarkingEntry const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264RefPicMarkingEntry &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264RefPicMarkingEntry const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264RefPicMarkingEntry *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264RefPicMarkingEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( memory_management_control_operation == rhs.memory_management_control_operation ) && + ( difference_of_pic_nums_minus1 == rhs.difference_of_pic_nums_minus1 ) && ( long_term_pic_num == rhs.long_term_pic_num ) && + ( long_term_frame_idx == rhs.long_term_frame_idx ) && ( max_long_term_frame_idx_plus1 == rhs.max_long_term_frame_idx_plus1 ); + } + + bool operator!=( EncodeH264RefPicMarkingEntry const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264MemMgmtControlOp memory_management_control_operation = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264MemMgmtControlOp::eEnd; + uint16_t difference_of_pic_nums_minus1 = {}; + uint16_t long_term_pic_num = {}; + uint16_t long_term_frame_idx = {}; + uint16_t max_long_term_frame_idx_plus1 = {}; + }; + + struct EncodeH264ReferenceListsInfo + { + using NativeType = StdVideoEncodeH264ReferenceListsInfo; + + operator StdVideoEncodeH264ReferenceListsInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceListsInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceListsInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceListsInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264ReferenceListsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( num_ref_idx_l0_active_minus1 == rhs.num_ref_idx_l0_active_minus1 ) && + ( num_ref_idx_l1_active_minus1 == rhs.num_ref_idx_l1_active_minus1 ) && ( RefPicList0 == rhs.RefPicList0 ) && + ( RefPicList1 == rhs.RefPicList1 ) && ( refList0ModOpCount == rhs.refList0ModOpCount ) && ( refList1ModOpCount == rhs.refList1ModOpCount ) && + ( refPicMarkingOpCount == rhs.refPicMarkingOpCount ) && ( reserved1 == rhs.reserved1 ) && + ( pRefList0ModOperations == rhs.pRefList0ModOperations ) && ( pRefList1ModOperations == rhs.pRefList1ModOperations ) && + ( pRefPicMarkingOperations == rhs.pRefPicMarkingOperations ); + } + + bool operator!=( EncodeH264ReferenceListsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceListsInfoFlags flags = {}; + uint8_t num_ref_idx_l0_active_minus1 = {}; + uint8_t num_ref_idx_l1_active_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicList0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicList1 = {}; + uint8_t refList0ModOpCount = {}; + uint8_t refList1ModOpCount = {}; + uint8_t refPicMarkingOpCount = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264RefListModEntry * pRefList0ModOperations = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264RefListModEntry * pRefList1ModOperations = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264RefPicMarkingEntry * pRefPicMarkingOperations = {}; + }; + + struct EncodeH264PictureInfo + { + using NativeType = StdVideoEncodeH264PictureInfo; + + operator StdVideoEncodeH264PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( seq_parameter_set_id == rhs.seq_parameter_set_id ) && ( pic_parameter_set_id == rhs.pic_parameter_set_id ) && + ( idr_pic_id == rhs.idr_pic_id ) && ( primary_pic_type == rhs.primary_pic_type ) && ( frame_num == rhs.frame_num ) && + ( PicOrderCnt == rhs.PicOrderCnt ) && ( temporal_id == rhs.temporal_id ) && ( reserved1 == rhs.reserved1 ) && ( pRefLists == rhs.pRefLists ); + } + + bool operator!=( EncodeH264PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264PictureInfoFlags flags = {}; + uint8_t seq_parameter_set_id = {}; + uint8_t pic_parameter_set_id = {}; + uint16_t idr_pic_id = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PictureType primary_pic_type = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PictureType::eP; + uint32_t frame_num = {}; + int32_t PicOrderCnt = {}; + uint8_t temporal_id = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceListsInfo * pRefLists = {}; + }; + + struct EncodeH264ReferenceInfo + { + using NativeType = StdVideoEncodeH264ReferenceInfo; + + operator StdVideoEncodeH264ReferenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264ReferenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( primary_pic_type == rhs.primary_pic_type ) && ( FrameNum == rhs.FrameNum ) && ( PicOrderCnt == rhs.PicOrderCnt ) && + ( long_term_pic_num == rhs.long_term_pic_num ) && ( long_term_frame_idx == rhs.long_term_frame_idx ) && ( temporal_id == rhs.temporal_id ); + } + + bool operator!=( EncodeH264ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264ReferenceInfoFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PictureType primary_pic_type = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264PictureType::eP; + uint32_t FrameNum = {}; + int32_t PicOrderCnt = {}; + uint16_t long_term_pic_num = {}; + uint16_t long_term_frame_idx = {}; + uint8_t temporal_id = {}; + }; + + struct EncodeH264SliceHeader + { + using NativeType = StdVideoEncodeH264SliceHeader; + + operator StdVideoEncodeH264SliceHeader const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264SliceHeader &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH264SliceHeader const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH264SliceHeader *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH264SliceHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( first_mb_in_slice == rhs.first_mb_in_slice ) && ( slice_type == rhs.slice_type ) && + ( slice_alpha_c0_offset_div2 == rhs.slice_alpha_c0_offset_div2 ) && ( slice_beta_offset_div2 == rhs.slice_beta_offset_div2 ) && + ( slice_qp_delta == rhs.slice_qp_delta ) && ( reserved1 == rhs.reserved1 ) && ( cabac_init_idc == rhs.cabac_init_idc ) && + ( disable_deblocking_filter_idc == rhs.disable_deblocking_filter_idc ) && ( pWeightTable == rhs.pWeightTable ); + } + + bool operator!=( EncodeH264SliceHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264SliceHeaderFlags flags = {}; + uint32_t first_mb_in_slice = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SliceType slice_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264SliceType::eP; + int8_t slice_alpha_c0_offset_div2 = {}; + int8_t slice_beta_offset_div2 = {}; + int8_t slice_qp_delta = {}; + uint8_t reserved1 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264CabacInitIdc cabac_init_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264CabacInitIdc::e0; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264DisableDeblockingFilterIdc disable_deblocking_filter_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H264DisableDeblockingFilterIdc::eDisabled; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH264WeightTable * pWeightTable = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H265STD_H_ ) + //=== vulkan_video_codec_h265std === + + struct H265DecPicBufMgr + { + using NativeType = StdVideoH265DecPicBufMgr; + + operator StdVideoH265DecPicBufMgr const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265DecPicBufMgr &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265DecPicBufMgr const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265DecPicBufMgr *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265DecPicBufMgr const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( max_latency_increase_plus1 == rhs.max_latency_increase_plus1 ) && ( max_dec_pic_buffering_minus1 == rhs.max_dec_pic_buffering_minus1 ) && + ( max_num_reorder_pics == rhs.max_num_reorder_pics ); + } + + bool operator!=( H265DecPicBufMgr const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D max_latency_increase_plus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D max_dec_pic_buffering_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D max_num_reorder_pics = {}; + }; + + struct H265SubLayerHrdParameters + { + using NativeType = StdVideoH265SubLayerHrdParameters; + + operator StdVideoH265SubLayerHrdParameters const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SubLayerHrdParameters &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SubLayerHrdParameters const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265SubLayerHrdParameters *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265SubLayerHrdParameters const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( bit_rate_value_minus1 == rhs.bit_rate_value_minus1 ) && ( cpb_size_value_minus1 == rhs.cpb_size_value_minus1 ) && + ( cpb_size_du_value_minus1 == rhs.cpb_size_du_value_minus1 ) && ( bit_rate_du_value_minus1 == rhs.bit_rate_du_value_minus1 ) && + ( cbr_flag == rhs.cbr_flag ); + } + + bool operator!=( H265SubLayerHrdParameters const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D bit_rate_value_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cpb_size_value_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cpb_size_du_value_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D bit_rate_du_value_minus1 = {}; + uint32_t cbr_flag = {}; + }; + + struct H265HrdFlags + { + using NativeType = StdVideoH265HrdFlags; + + operator StdVideoH265HrdFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265HrdFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265HrdFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265HrdFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265HrdFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( nal_hrd_parameters_present_flag == rhs.nal_hrd_parameters_present_flag ) && + ( vcl_hrd_parameters_present_flag == rhs.vcl_hrd_parameters_present_flag ) && + ( sub_pic_hrd_params_present_flag == rhs.sub_pic_hrd_params_present_flag ) && + ( sub_pic_cpb_params_in_pic_timing_sei_flag == rhs.sub_pic_cpb_params_in_pic_timing_sei_flag ) && + ( fixed_pic_rate_general_flag == rhs.fixed_pic_rate_general_flag ) && ( fixed_pic_rate_within_cvs_flag == rhs.fixed_pic_rate_within_cvs_flag ) && + ( low_delay_hrd_flag == rhs.low_delay_hrd_flag ); + } + + bool operator!=( H265HrdFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t nal_hrd_parameters_present_flag : 1; + uint32_t vcl_hrd_parameters_present_flag : 1; + uint32_t sub_pic_hrd_params_present_flag : 1; + uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1; + uint32_t fixed_pic_rate_general_flag : 8; + uint32_t fixed_pic_rate_within_cvs_flag : 8; + uint32_t low_delay_hrd_flag : 8; + }; + + struct H265HrdParameters + { + using NativeType = StdVideoH265HrdParameters; + + operator StdVideoH265HrdParameters const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265HrdParameters &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265HrdParameters const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265HrdParameters *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265HrdParameters const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( tick_divisor_minus2 == rhs.tick_divisor_minus2 ) && + ( du_cpb_removal_delay_increment_length_minus1 == rhs.du_cpb_removal_delay_increment_length_minus1 ) && + ( dpb_output_delay_du_length_minus1 == rhs.dpb_output_delay_du_length_minus1 ) && ( bit_rate_scale == rhs.bit_rate_scale ) && + ( cpb_size_scale == rhs.cpb_size_scale ) && ( cpb_size_du_scale == rhs.cpb_size_du_scale ) && + ( initial_cpb_removal_delay_length_minus1 == rhs.initial_cpb_removal_delay_length_minus1 ) && + ( au_cpb_removal_delay_length_minus1 == rhs.au_cpb_removal_delay_length_minus1 ) && + ( dpb_output_delay_length_minus1 == rhs.dpb_output_delay_length_minus1 ) && ( cpb_cnt_minus1 == rhs.cpb_cnt_minus1 ) && + ( elemental_duration_in_tc_minus1 == rhs.elemental_duration_in_tc_minus1 ) && ( reserved == rhs.reserved ) && + ( pSubLayerHrdParametersNal == rhs.pSubLayerHrdParametersNal ) && ( pSubLayerHrdParametersVcl == rhs.pSubLayerHrdParametersVcl ); + } + + bool operator!=( H265HrdParameters const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265HrdFlags flags = {}; + uint8_t tick_divisor_minus2 = {}; + uint8_t du_cpb_removal_delay_increment_length_minus1 = {}; + uint8_t dpb_output_delay_du_length_minus1 = {}; + uint8_t bit_rate_scale = {}; + uint8_t cpb_size_scale = {}; + uint8_t cpb_size_du_scale = {}; + uint8_t initial_cpb_removal_delay_length_minus1 = {}; + uint8_t au_cpb_removal_delay_length_minus1 = {}; + uint8_t dpb_output_delay_length_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cpb_cnt_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D elemental_duration_in_tc_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SubLayerHrdParameters * pSubLayerHrdParametersNal = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SubLayerHrdParameters * pSubLayerHrdParametersVcl = {}; + }; + + struct H265VpsFlags + { + using NativeType = StdVideoH265VpsFlags; + + operator StdVideoH265VpsFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265VpsFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265VpsFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265VpsFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265VpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( vps_temporal_id_nesting_flag == rhs.vps_temporal_id_nesting_flag ) && + ( vps_sub_layer_ordering_info_present_flag == rhs.vps_sub_layer_ordering_info_present_flag ) && + ( vps_timing_info_present_flag == rhs.vps_timing_info_present_flag ) && + ( vps_poc_proportional_to_timing_flag == rhs.vps_poc_proportional_to_timing_flag ); + } + + bool operator!=( H265VpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t vps_temporal_id_nesting_flag : 1; + uint32_t vps_sub_layer_ordering_info_present_flag : 1; + uint32_t vps_timing_info_present_flag : 1; + uint32_t vps_poc_proportional_to_timing_flag : 1; + }; + + struct H265ProfileTierLevelFlags + { + using NativeType = StdVideoH265ProfileTierLevelFlags; + + operator StdVideoH265ProfileTierLevelFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ProfileTierLevelFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ProfileTierLevelFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265ProfileTierLevelFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265ProfileTierLevelFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( general_tier_flag == rhs.general_tier_flag ) && ( general_progressive_source_flag == rhs.general_progressive_source_flag ) && + ( general_interlaced_source_flag == rhs.general_interlaced_source_flag ) && + ( general_non_packed_constraint_flag == rhs.general_non_packed_constraint_flag ) && + ( general_frame_only_constraint_flag == rhs.general_frame_only_constraint_flag ); + } + + bool operator!=( H265ProfileTierLevelFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t general_tier_flag : 1; + uint32_t general_progressive_source_flag : 1; + uint32_t general_interlaced_source_flag : 1; + uint32_t general_non_packed_constraint_flag : 1; + uint32_t general_frame_only_constraint_flag : 1; + }; + + struct H265ProfileTierLevel + { + using NativeType = StdVideoH265ProfileTierLevel; + + operator StdVideoH265ProfileTierLevel const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ProfileTierLevel &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ProfileTierLevel const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265ProfileTierLevel *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265ProfileTierLevel const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( general_profile_idc == rhs.general_profile_idc ) && ( general_level_idc == rhs.general_level_idc ); + } + + bool operator!=( H265ProfileTierLevel const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileTierLevelFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileIdc general_profile_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileIdc::eMain; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265LevelIdc general_level_idc = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265LevelIdc::e1_0; + }; + + struct H265VideoParameterSet + { + using NativeType = StdVideoH265VideoParameterSet; + + operator StdVideoH265VideoParameterSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265VideoParameterSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265VideoParameterSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265VideoParameterSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265VideoParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( vps_video_parameter_set_id == rhs.vps_video_parameter_set_id ) && + ( vps_max_sub_layers_minus1 == rhs.vps_max_sub_layers_minus1 ) && ( reserved1 == rhs.reserved1 ) && ( reserved2 == rhs.reserved2 ) && + ( vps_num_units_in_tick == rhs.vps_num_units_in_tick ) && ( vps_time_scale == rhs.vps_time_scale ) && + ( vps_num_ticks_poc_diff_one_minus1 == rhs.vps_num_ticks_poc_diff_one_minus1 ) && ( reserved3 == rhs.reserved3 ) && + ( pDecPicBufMgr == rhs.pDecPicBufMgr ) && ( pHrdParameters == rhs.pHrdParameters ) && ( pProfileTierLevel == rhs.pProfileTierLevel ); + } + + bool operator!=( H265VideoParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265VpsFlags flags = {}; + uint8_t vps_video_parameter_set_id = {}; + uint8_t vps_max_sub_layers_minus1 = {}; + uint8_t reserved1 = {}; + uint8_t reserved2 = {}; + uint32_t vps_num_units_in_tick = {}; + uint32_t vps_time_scale = {}; + uint32_t vps_num_ticks_poc_diff_one_minus1 = {}; + uint32_t reserved3 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265DecPicBufMgr * pDecPicBufMgr = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265HrdParameters * pHrdParameters = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileTierLevel * pProfileTierLevel = {}; + }; + + struct H265ScalingLists + { + using NativeType = StdVideoH265ScalingLists; + + operator StdVideoH265ScalingLists const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ScalingLists &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ScalingLists const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265ScalingLists *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265ScalingLists const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( ScalingList4x4 == rhs.ScalingList4x4 ) && ( ScalingList8x8 == rhs.ScalingList8x8 ) && ( ScalingList16x16 == rhs.ScalingList16x16 ) && + ( ScalingList32x32 == rhs.ScalingList32x32 ) && ( ScalingListDCCoef16x16 == rhs.ScalingListDCCoef16x16 ) && + ( ScalingListDCCoef32x32 == rhs.ScalingListDCCoef32x32 ); + } + + bool operator!=( H265ScalingLists const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper2D + ScalingList4x4 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D + ScalingList8x8 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D + ScalingList16x16 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D + ScalingList32x32 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ScalingListDCCoef16x16 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ScalingListDCCoef32x32 = {}; + }; + + struct H265SpsVuiFlags + { + using NativeType = StdVideoH265SpsVuiFlags; + + operator StdVideoH265SpsVuiFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SpsVuiFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SpsVuiFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265SpsVuiFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265SpsVuiFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( aspect_ratio_info_present_flag == rhs.aspect_ratio_info_present_flag ) && ( overscan_info_present_flag == rhs.overscan_info_present_flag ) && + ( overscan_appropriate_flag == rhs.overscan_appropriate_flag ) && ( video_signal_type_present_flag == rhs.video_signal_type_present_flag ) && + ( video_full_range_flag == rhs.video_full_range_flag ) && ( colour_description_present_flag == rhs.colour_description_present_flag ) && + ( chroma_loc_info_present_flag == rhs.chroma_loc_info_present_flag ) && + ( neutral_chroma_indication_flag == rhs.neutral_chroma_indication_flag ) && ( field_seq_flag == rhs.field_seq_flag ) && + ( frame_field_info_present_flag == rhs.frame_field_info_present_flag ) && ( default_display_window_flag == rhs.default_display_window_flag ) && + ( vui_timing_info_present_flag == rhs.vui_timing_info_present_flag ) && + ( vui_poc_proportional_to_timing_flag == rhs.vui_poc_proportional_to_timing_flag ) && + ( vui_hrd_parameters_present_flag == rhs.vui_hrd_parameters_present_flag ) && ( bitstream_restriction_flag == rhs.bitstream_restriction_flag ) && + ( tiles_fixed_structure_flag == rhs.tiles_fixed_structure_flag ) && + ( motion_vectors_over_pic_boundaries_flag == rhs.motion_vectors_over_pic_boundaries_flag ) && + ( restricted_ref_pic_lists_flag == rhs.restricted_ref_pic_lists_flag ); + } + + bool operator!=( H265SpsVuiFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t aspect_ratio_info_present_flag : 1; + uint32_t overscan_info_present_flag : 1; + uint32_t overscan_appropriate_flag : 1; + uint32_t video_signal_type_present_flag : 1; + uint32_t video_full_range_flag : 1; + uint32_t colour_description_present_flag : 1; + uint32_t chroma_loc_info_present_flag : 1; + uint32_t neutral_chroma_indication_flag : 1; + uint32_t field_seq_flag : 1; + uint32_t frame_field_info_present_flag : 1; + uint32_t default_display_window_flag : 1; + uint32_t vui_timing_info_present_flag : 1; + uint32_t vui_poc_proportional_to_timing_flag : 1; + uint32_t vui_hrd_parameters_present_flag : 1; + uint32_t bitstream_restriction_flag : 1; + uint32_t tiles_fixed_structure_flag : 1; + uint32_t motion_vectors_over_pic_boundaries_flag : 1; + uint32_t restricted_ref_pic_lists_flag : 1; + }; + + struct H265SequenceParameterSetVui + { + using NativeType = StdVideoH265SequenceParameterSetVui; + + operator StdVideoH265SequenceParameterSetVui const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SequenceParameterSetVui &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SequenceParameterSetVui const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265SequenceParameterSetVui *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265SequenceParameterSetVui const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( aspect_ratio_idc == rhs.aspect_ratio_idc ) && ( sar_width == rhs.sar_width ) && ( sar_height == rhs.sar_height ) && + ( video_format == rhs.video_format ) && ( colour_primaries == rhs.colour_primaries ) && + ( transfer_characteristics == rhs.transfer_characteristics ) && ( matrix_coeffs == rhs.matrix_coeffs ) && + ( chroma_sample_loc_type_top_field == rhs.chroma_sample_loc_type_top_field ) && + ( chroma_sample_loc_type_bottom_field == rhs.chroma_sample_loc_type_bottom_field ) && ( reserved1 == rhs.reserved1 ) && + ( reserved2 == rhs.reserved2 ) && ( def_disp_win_left_offset == rhs.def_disp_win_left_offset ) && + ( def_disp_win_right_offset == rhs.def_disp_win_right_offset ) && ( def_disp_win_top_offset == rhs.def_disp_win_top_offset ) && + ( def_disp_win_bottom_offset == rhs.def_disp_win_bottom_offset ) && ( vui_num_units_in_tick == rhs.vui_num_units_in_tick ) && + ( vui_time_scale == rhs.vui_time_scale ) && ( vui_num_ticks_poc_diff_one_minus1 == rhs.vui_num_ticks_poc_diff_one_minus1 ) && + ( min_spatial_segmentation_idc == rhs.min_spatial_segmentation_idc ) && ( reserved3 == rhs.reserved3 ) && + ( max_bytes_per_pic_denom == rhs.max_bytes_per_pic_denom ) && ( max_bits_per_min_cu_denom == rhs.max_bits_per_min_cu_denom ) && + ( log2_max_mv_length_horizontal == rhs.log2_max_mv_length_horizontal ) && ( log2_max_mv_length_vertical == rhs.log2_max_mv_length_vertical ) && + ( pHrdParameters == rhs.pHrdParameters ); + } + + bool operator!=( H265SequenceParameterSetVui const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SpsVuiFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265AspectRatioIdc aspect_ratio_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265AspectRatioIdc::eUnspecified; + uint16_t sar_width = {}; + uint16_t sar_height = {}; + uint8_t video_format = {}; + uint8_t colour_primaries = {}; + uint8_t transfer_characteristics = {}; + uint8_t matrix_coeffs = {}; + uint8_t chroma_sample_loc_type_top_field = {}; + uint8_t chroma_sample_loc_type_bottom_field = {}; + uint8_t reserved1 = {}; + uint8_t reserved2 = {}; + uint16_t def_disp_win_left_offset = {}; + uint16_t def_disp_win_right_offset = {}; + uint16_t def_disp_win_top_offset = {}; + uint16_t def_disp_win_bottom_offset = {}; + uint32_t vui_num_units_in_tick = {}; + uint32_t vui_time_scale = {}; + uint32_t vui_num_ticks_poc_diff_one_minus1 = {}; + uint16_t min_spatial_segmentation_idc = {}; + uint16_t reserved3 = {}; + uint8_t max_bytes_per_pic_denom = {}; + uint8_t max_bits_per_min_cu_denom = {}; + uint8_t log2_max_mv_length_horizontal = {}; + uint8_t log2_max_mv_length_vertical = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265HrdParameters * pHrdParameters = {}; + }; + + struct H265PredictorPaletteEntries + { + using NativeType = StdVideoH265PredictorPaletteEntries; + + operator StdVideoH265PredictorPaletteEntries const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265PredictorPaletteEntries &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265PredictorPaletteEntries const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265PredictorPaletteEntries *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265PredictorPaletteEntries const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( PredictorPaletteEntries == rhs.PredictorPaletteEntries ); + } + + bool operator!=( H265PredictorPaletteEntries const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE:: + ArrayWrapper2D + PredictorPaletteEntries = {}; + }; + + struct H265SpsFlags + { + using NativeType = StdVideoH265SpsFlags; + + operator StdVideoH265SpsFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SpsFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SpsFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265SpsFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265SpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( sps_temporal_id_nesting_flag == rhs.sps_temporal_id_nesting_flag ) && ( separate_colour_plane_flag == rhs.separate_colour_plane_flag ) && + ( conformance_window_flag == rhs.conformance_window_flag ) && + ( sps_sub_layer_ordering_info_present_flag == rhs.sps_sub_layer_ordering_info_present_flag ) && + ( scaling_list_enabled_flag == rhs.scaling_list_enabled_flag ) && + ( sps_scaling_list_data_present_flag == rhs.sps_scaling_list_data_present_flag ) && ( amp_enabled_flag == rhs.amp_enabled_flag ) && + ( sample_adaptive_offset_enabled_flag == rhs.sample_adaptive_offset_enabled_flag ) && ( pcm_enabled_flag == rhs.pcm_enabled_flag ) && + ( pcm_loop_filter_disabled_flag == rhs.pcm_loop_filter_disabled_flag ) && + ( long_term_ref_pics_present_flag == rhs.long_term_ref_pics_present_flag ) && + ( sps_temporal_mvp_enabled_flag == rhs.sps_temporal_mvp_enabled_flag ) && + ( strong_intra_smoothing_enabled_flag == rhs.strong_intra_smoothing_enabled_flag ) && + ( vui_parameters_present_flag == rhs.vui_parameters_present_flag ) && ( sps_extension_present_flag == rhs.sps_extension_present_flag ) && + ( sps_range_extension_flag == rhs.sps_range_extension_flag ) && + ( transform_skip_rotation_enabled_flag == rhs.transform_skip_rotation_enabled_flag ) && + ( transform_skip_context_enabled_flag == rhs.transform_skip_context_enabled_flag ) && + ( implicit_rdpcm_enabled_flag == rhs.implicit_rdpcm_enabled_flag ) && ( explicit_rdpcm_enabled_flag == rhs.explicit_rdpcm_enabled_flag ) && + ( extended_precision_processing_flag == rhs.extended_precision_processing_flag ) && + ( intra_smoothing_disabled_flag == rhs.intra_smoothing_disabled_flag ) && + ( high_precision_offsets_enabled_flag == rhs.high_precision_offsets_enabled_flag ) && + ( persistent_rice_adaptation_enabled_flag == rhs.persistent_rice_adaptation_enabled_flag ) && + ( cabac_bypass_alignment_enabled_flag == rhs.cabac_bypass_alignment_enabled_flag ) && ( sps_scc_extension_flag == rhs.sps_scc_extension_flag ) && + ( sps_curr_pic_ref_enabled_flag == rhs.sps_curr_pic_ref_enabled_flag ) && ( palette_mode_enabled_flag == rhs.palette_mode_enabled_flag ) && + ( sps_palette_predictor_initializers_present_flag == rhs.sps_palette_predictor_initializers_present_flag ) && + ( intra_boundary_filtering_disabled_flag == rhs.intra_boundary_filtering_disabled_flag ); + } + + bool operator!=( H265SpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t sps_temporal_id_nesting_flag : 1; + uint32_t separate_colour_plane_flag : 1; + uint32_t conformance_window_flag : 1; + uint32_t sps_sub_layer_ordering_info_present_flag : 1; + uint32_t scaling_list_enabled_flag : 1; + uint32_t sps_scaling_list_data_present_flag : 1; + uint32_t amp_enabled_flag : 1; + uint32_t sample_adaptive_offset_enabled_flag : 1; + uint32_t pcm_enabled_flag : 1; + uint32_t pcm_loop_filter_disabled_flag : 1; + uint32_t long_term_ref_pics_present_flag : 1; + uint32_t sps_temporal_mvp_enabled_flag : 1; + uint32_t strong_intra_smoothing_enabled_flag : 1; + uint32_t vui_parameters_present_flag : 1; + uint32_t sps_extension_present_flag : 1; + uint32_t sps_range_extension_flag : 1; + uint32_t transform_skip_rotation_enabled_flag : 1; + uint32_t transform_skip_context_enabled_flag : 1; + uint32_t implicit_rdpcm_enabled_flag : 1; + uint32_t explicit_rdpcm_enabled_flag : 1; + uint32_t extended_precision_processing_flag : 1; + uint32_t intra_smoothing_disabled_flag : 1; + uint32_t high_precision_offsets_enabled_flag : 1; + uint32_t persistent_rice_adaptation_enabled_flag : 1; + uint32_t cabac_bypass_alignment_enabled_flag : 1; + uint32_t sps_scc_extension_flag : 1; + uint32_t sps_curr_pic_ref_enabled_flag : 1; + uint32_t palette_mode_enabled_flag : 1; + uint32_t sps_palette_predictor_initializers_present_flag : 1; + uint32_t intra_boundary_filtering_disabled_flag : 1; + }; + + struct H265ShortTermRefPicSetFlags + { + using NativeType = StdVideoH265ShortTermRefPicSetFlags; + + operator StdVideoH265ShortTermRefPicSetFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ShortTermRefPicSetFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ShortTermRefPicSetFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265ShortTermRefPicSetFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265ShortTermRefPicSetFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( inter_ref_pic_set_prediction_flag == rhs.inter_ref_pic_set_prediction_flag ) && ( delta_rps_sign == rhs.delta_rps_sign ); + } + + bool operator!=( H265ShortTermRefPicSetFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t inter_ref_pic_set_prediction_flag : 1; + uint32_t delta_rps_sign : 1; + }; + + struct H265ShortTermRefPicSet + { + using NativeType = StdVideoH265ShortTermRefPicSet; + + operator StdVideoH265ShortTermRefPicSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ShortTermRefPicSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265ShortTermRefPicSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265ShortTermRefPicSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265ShortTermRefPicSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( delta_idx_minus1 == rhs.delta_idx_minus1 ) && ( use_delta_flag == rhs.use_delta_flag ) && + ( abs_delta_rps_minus1 == rhs.abs_delta_rps_minus1 ) && ( used_by_curr_pic_flag == rhs.used_by_curr_pic_flag ) && + ( used_by_curr_pic_s0_flag == rhs.used_by_curr_pic_s0_flag ) && ( used_by_curr_pic_s1_flag == rhs.used_by_curr_pic_s1_flag ) && + ( reserved1 == rhs.reserved1 ) && ( reserved2 == rhs.reserved2 ) && ( reserved3 == rhs.reserved3 ) && + ( num_negative_pics == rhs.num_negative_pics ) && ( num_positive_pics == rhs.num_positive_pics ) && + ( delta_poc_s0_minus1 == rhs.delta_poc_s0_minus1 ) && ( delta_poc_s1_minus1 == rhs.delta_poc_s1_minus1 ); + } + + bool operator!=( H265ShortTermRefPicSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ShortTermRefPicSetFlags flags = {}; + uint32_t delta_idx_minus1 = {}; + uint16_t use_delta_flag = {}; + uint16_t abs_delta_rps_minus1 = {}; + uint16_t used_by_curr_pic_flag = {}; + uint16_t used_by_curr_pic_s0_flag = {}; + uint16_t used_by_curr_pic_s1_flag = {}; + uint16_t reserved1 = {}; + uint8_t reserved2 = {}; + uint8_t reserved3 = {}; + uint8_t num_negative_pics = {}; + uint8_t num_positive_pics = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_poc_s0_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_poc_s1_minus1 = {}; + }; + + struct H265LongTermRefPicsSps + { + using NativeType = StdVideoH265LongTermRefPicsSps; + + operator StdVideoH265LongTermRefPicsSps const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265LongTermRefPicsSps &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265LongTermRefPicsSps const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265LongTermRefPicsSps *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265LongTermRefPicsSps const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( used_by_curr_pic_lt_sps_flag == rhs.used_by_curr_pic_lt_sps_flag ) && ( lt_ref_pic_poc_lsb_sps == rhs.lt_ref_pic_poc_lsb_sps ); + } + + bool operator!=( H265LongTermRefPicsSps const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t used_by_curr_pic_lt_sps_flag = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D lt_ref_pic_poc_lsb_sps = {}; + }; + + struct H265SequenceParameterSet + { + using NativeType = StdVideoH265SequenceParameterSet; + + operator StdVideoH265SequenceParameterSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SequenceParameterSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265SequenceParameterSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265SequenceParameterSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265SequenceParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( chroma_format_idc == rhs.chroma_format_idc ) && ( pic_width_in_luma_samples == rhs.pic_width_in_luma_samples ) && + ( pic_height_in_luma_samples == rhs.pic_height_in_luma_samples ) && ( sps_video_parameter_set_id == rhs.sps_video_parameter_set_id ) && + ( sps_max_sub_layers_minus1 == rhs.sps_max_sub_layers_minus1 ) && ( sps_seq_parameter_set_id == rhs.sps_seq_parameter_set_id ) && + ( bit_depth_luma_minus8 == rhs.bit_depth_luma_minus8 ) && ( bit_depth_chroma_minus8 == rhs.bit_depth_chroma_minus8 ) && + ( log2_max_pic_order_cnt_lsb_minus4 == rhs.log2_max_pic_order_cnt_lsb_minus4 ) && + ( log2_min_luma_coding_block_size_minus3 == rhs.log2_min_luma_coding_block_size_minus3 ) && + ( log2_diff_max_min_luma_coding_block_size == rhs.log2_diff_max_min_luma_coding_block_size ) && + ( log2_min_luma_transform_block_size_minus2 == rhs.log2_min_luma_transform_block_size_minus2 ) && + ( log2_diff_max_min_luma_transform_block_size == rhs.log2_diff_max_min_luma_transform_block_size ) && + ( max_transform_hierarchy_depth_inter == rhs.max_transform_hierarchy_depth_inter ) && + ( max_transform_hierarchy_depth_intra == rhs.max_transform_hierarchy_depth_intra ) && + ( num_short_term_ref_pic_sets == rhs.num_short_term_ref_pic_sets ) && ( num_long_term_ref_pics_sps == rhs.num_long_term_ref_pics_sps ) && + ( pcm_sample_bit_depth_luma_minus1 == rhs.pcm_sample_bit_depth_luma_minus1 ) && + ( pcm_sample_bit_depth_chroma_minus1 == rhs.pcm_sample_bit_depth_chroma_minus1 ) && + ( log2_min_pcm_luma_coding_block_size_minus3 == rhs.log2_min_pcm_luma_coding_block_size_minus3 ) && + ( log2_diff_max_min_pcm_luma_coding_block_size == rhs.log2_diff_max_min_pcm_luma_coding_block_size ) && ( reserved1 == rhs.reserved1 ) && + ( reserved2 == rhs.reserved2 ) && ( palette_max_size == rhs.palette_max_size ) && + ( delta_palette_max_predictor_size == rhs.delta_palette_max_predictor_size ) && + ( motion_vector_resolution_control_idc == rhs.motion_vector_resolution_control_idc ) && + ( sps_num_palette_predictor_initializers_minus1 == rhs.sps_num_palette_predictor_initializers_minus1 ) && + ( conf_win_left_offset == rhs.conf_win_left_offset ) && ( conf_win_right_offset == rhs.conf_win_right_offset ) && + ( conf_win_top_offset == rhs.conf_win_top_offset ) && ( conf_win_bottom_offset == rhs.conf_win_bottom_offset ) && + ( pProfileTierLevel == rhs.pProfileTierLevel ) && ( pDecPicBufMgr == rhs.pDecPicBufMgr ) && ( pScalingLists == rhs.pScalingLists ) && + ( pShortTermRefPicSet == rhs.pShortTermRefPicSet ) && ( pLongTermRefPicsSps == rhs.pLongTermRefPicsSps ) && + ( pSequenceParameterSetVui == rhs.pSequenceParameterSetVui ) && ( pPredictorPaletteEntries == rhs.pPredictorPaletteEntries ); + } + + bool operator!=( H265SequenceParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SpsFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ChromaFormatIdc chroma_format_idc = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ChromaFormatIdc::eMonochrome; + uint32_t pic_width_in_luma_samples = {}; + uint32_t pic_height_in_luma_samples = {}; + uint8_t sps_video_parameter_set_id = {}; + uint8_t sps_max_sub_layers_minus1 = {}; + uint8_t sps_seq_parameter_set_id = {}; + uint8_t bit_depth_luma_minus8 = {}; + uint8_t bit_depth_chroma_minus8 = {}; + uint8_t log2_max_pic_order_cnt_lsb_minus4 = {}; + uint8_t log2_min_luma_coding_block_size_minus3 = {}; + uint8_t log2_diff_max_min_luma_coding_block_size = {}; + uint8_t log2_min_luma_transform_block_size_minus2 = {}; + uint8_t log2_diff_max_min_luma_transform_block_size = {}; + uint8_t max_transform_hierarchy_depth_inter = {}; + uint8_t max_transform_hierarchy_depth_intra = {}; + uint8_t num_short_term_ref_pic_sets = {}; + uint8_t num_long_term_ref_pics_sps = {}; + uint8_t pcm_sample_bit_depth_luma_minus1 = {}; + uint8_t pcm_sample_bit_depth_chroma_minus1 = {}; + uint8_t log2_min_pcm_luma_coding_block_size_minus3 = {}; + uint8_t log2_diff_max_min_pcm_luma_coding_block_size = {}; + uint8_t reserved1 = {}; + uint8_t reserved2 = {}; + uint8_t palette_max_size = {}; + uint8_t delta_palette_max_predictor_size = {}; + uint8_t motion_vector_resolution_control_idc = {}; + uint8_t sps_num_palette_predictor_initializers_minus1 = {}; + uint32_t conf_win_left_offset = {}; + uint32_t conf_win_right_offset = {}; + uint32_t conf_win_top_offset = {}; + uint32_t conf_win_bottom_offset = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ProfileTierLevel * pProfileTierLevel = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265DecPicBufMgr * pDecPicBufMgr = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ScalingLists * pScalingLists = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ShortTermRefPicSet * pShortTermRefPicSet = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265LongTermRefPicsSps * pLongTermRefPicsSps = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SequenceParameterSetVui * pSequenceParameterSetVui = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PredictorPaletteEntries * pPredictorPaletteEntries = {}; + }; + + struct H265PpsFlags + { + using NativeType = StdVideoH265PpsFlags; + + operator StdVideoH265PpsFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265PpsFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265PpsFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265PpsFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265PpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( dependent_slice_segments_enabled_flag == rhs.dependent_slice_segments_enabled_flag ) && + ( output_flag_present_flag == rhs.output_flag_present_flag ) && ( sign_data_hiding_enabled_flag == rhs.sign_data_hiding_enabled_flag ) && + ( cabac_init_present_flag == rhs.cabac_init_present_flag ) && ( constrained_intra_pred_flag == rhs.constrained_intra_pred_flag ) && + ( transform_skip_enabled_flag == rhs.transform_skip_enabled_flag ) && ( cu_qp_delta_enabled_flag == rhs.cu_qp_delta_enabled_flag ) && + ( pps_slice_chroma_qp_offsets_present_flag == rhs.pps_slice_chroma_qp_offsets_present_flag ) && + ( weighted_pred_flag == rhs.weighted_pred_flag ) && ( weighted_bipred_flag == rhs.weighted_bipred_flag ) && + ( transquant_bypass_enabled_flag == rhs.transquant_bypass_enabled_flag ) && ( tiles_enabled_flag == rhs.tiles_enabled_flag ) && + ( entropy_coding_sync_enabled_flag == rhs.entropy_coding_sync_enabled_flag ) && ( uniform_spacing_flag == rhs.uniform_spacing_flag ) && + ( loop_filter_across_tiles_enabled_flag == rhs.loop_filter_across_tiles_enabled_flag ) && + ( pps_loop_filter_across_slices_enabled_flag == rhs.pps_loop_filter_across_slices_enabled_flag ) && + ( deblocking_filter_control_present_flag == rhs.deblocking_filter_control_present_flag ) && + ( deblocking_filter_override_enabled_flag == rhs.deblocking_filter_override_enabled_flag ) && + ( pps_deblocking_filter_disabled_flag == rhs.pps_deblocking_filter_disabled_flag ) && + ( pps_scaling_list_data_present_flag == rhs.pps_scaling_list_data_present_flag ) && + ( lists_modification_present_flag == rhs.lists_modification_present_flag ) && + ( slice_segment_header_extension_present_flag == rhs.slice_segment_header_extension_present_flag ) && + ( pps_extension_present_flag == rhs.pps_extension_present_flag ) && + ( cross_component_prediction_enabled_flag == rhs.cross_component_prediction_enabled_flag ) && + ( chroma_qp_offset_list_enabled_flag == rhs.chroma_qp_offset_list_enabled_flag ) && + ( pps_curr_pic_ref_enabled_flag == rhs.pps_curr_pic_ref_enabled_flag ) && + ( residual_adaptive_colour_transform_enabled_flag == rhs.residual_adaptive_colour_transform_enabled_flag ) && + ( pps_slice_act_qp_offsets_present_flag == rhs.pps_slice_act_qp_offsets_present_flag ) && + ( pps_palette_predictor_initializers_present_flag == rhs.pps_palette_predictor_initializers_present_flag ) && + ( monochrome_palette_flag == rhs.monochrome_palette_flag ) && ( pps_range_extension_flag == rhs.pps_range_extension_flag ); + } + + bool operator!=( H265PpsFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t dependent_slice_segments_enabled_flag : 1; + uint32_t output_flag_present_flag : 1; + uint32_t sign_data_hiding_enabled_flag : 1; + uint32_t cabac_init_present_flag : 1; + uint32_t constrained_intra_pred_flag : 1; + uint32_t transform_skip_enabled_flag : 1; + uint32_t cu_qp_delta_enabled_flag : 1; + uint32_t pps_slice_chroma_qp_offsets_present_flag : 1; + uint32_t weighted_pred_flag : 1; + uint32_t weighted_bipred_flag : 1; + uint32_t transquant_bypass_enabled_flag : 1; + uint32_t tiles_enabled_flag : 1; + uint32_t entropy_coding_sync_enabled_flag : 1; + uint32_t uniform_spacing_flag : 1; + uint32_t loop_filter_across_tiles_enabled_flag : 1; + uint32_t pps_loop_filter_across_slices_enabled_flag : 1; + uint32_t deblocking_filter_control_present_flag : 1; + uint32_t deblocking_filter_override_enabled_flag : 1; + uint32_t pps_deblocking_filter_disabled_flag : 1; + uint32_t pps_scaling_list_data_present_flag : 1; + uint32_t lists_modification_present_flag : 1; + uint32_t slice_segment_header_extension_present_flag : 1; + uint32_t pps_extension_present_flag : 1; + uint32_t cross_component_prediction_enabled_flag : 1; + uint32_t chroma_qp_offset_list_enabled_flag : 1; + uint32_t pps_curr_pic_ref_enabled_flag : 1; + uint32_t residual_adaptive_colour_transform_enabled_flag : 1; + uint32_t pps_slice_act_qp_offsets_present_flag : 1; + uint32_t pps_palette_predictor_initializers_present_flag : 1; + uint32_t monochrome_palette_flag : 1; + uint32_t pps_range_extension_flag : 1; + }; + + struct H265PictureParameterSet + { + using NativeType = StdVideoH265PictureParameterSet; + + operator StdVideoH265PictureParameterSet const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265PictureParameterSet &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoH265PictureParameterSet const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoH265PictureParameterSet *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( H265PictureParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( pps_pic_parameter_set_id == rhs.pps_pic_parameter_set_id ) && + ( pps_seq_parameter_set_id == rhs.pps_seq_parameter_set_id ) && ( sps_video_parameter_set_id == rhs.sps_video_parameter_set_id ) && + ( num_extra_slice_header_bits == rhs.num_extra_slice_header_bits ) && + ( num_ref_idx_l0_default_active_minus1 == rhs.num_ref_idx_l0_default_active_minus1 ) && + ( num_ref_idx_l1_default_active_minus1 == rhs.num_ref_idx_l1_default_active_minus1 ) && ( init_qp_minus26 == rhs.init_qp_minus26 ) && + ( diff_cu_qp_delta_depth == rhs.diff_cu_qp_delta_depth ) && ( pps_cb_qp_offset == rhs.pps_cb_qp_offset ) && + ( pps_cr_qp_offset == rhs.pps_cr_qp_offset ) && ( pps_beta_offset_div2 == rhs.pps_beta_offset_div2 ) && + ( pps_tc_offset_div2 == rhs.pps_tc_offset_div2 ) && ( log2_parallel_merge_level_minus2 == rhs.log2_parallel_merge_level_minus2 ) && + ( log2_max_transform_skip_block_size_minus2 == rhs.log2_max_transform_skip_block_size_minus2 ) && + ( diff_cu_chroma_qp_offset_depth == rhs.diff_cu_chroma_qp_offset_depth ) && + ( chroma_qp_offset_list_len_minus1 == rhs.chroma_qp_offset_list_len_minus1 ) && ( cb_qp_offset_list == rhs.cb_qp_offset_list ) && + ( cr_qp_offset_list == rhs.cr_qp_offset_list ) && ( log2_sao_offset_scale_luma == rhs.log2_sao_offset_scale_luma ) && + ( log2_sao_offset_scale_chroma == rhs.log2_sao_offset_scale_chroma ) && ( pps_act_y_qp_offset_plus5 == rhs.pps_act_y_qp_offset_plus5 ) && + ( pps_act_cb_qp_offset_plus5 == rhs.pps_act_cb_qp_offset_plus5 ) && ( pps_act_cr_qp_offset_plus3 == rhs.pps_act_cr_qp_offset_plus3 ) && + ( pps_num_palette_predictor_initializers == rhs.pps_num_palette_predictor_initializers ) && + ( luma_bit_depth_entry_minus8 == rhs.luma_bit_depth_entry_minus8 ) && ( chroma_bit_depth_entry_minus8 == rhs.chroma_bit_depth_entry_minus8 ) && + ( num_tile_columns_minus1 == rhs.num_tile_columns_minus1 ) && ( num_tile_rows_minus1 == rhs.num_tile_rows_minus1 ) && + ( reserved1 == rhs.reserved1 ) && ( reserved2 == rhs.reserved2 ) && ( column_width_minus1 == rhs.column_width_minus1 ) && + ( row_height_minus1 == rhs.row_height_minus1 ) && ( reserved3 == rhs.reserved3 ) && ( pScalingLists == rhs.pScalingLists ) && + ( pPredictorPaletteEntries == rhs.pPredictorPaletteEntries ); + } + + bool operator!=( H265PictureParameterSet const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PpsFlags flags = {}; + uint8_t pps_pic_parameter_set_id = {}; + uint8_t pps_seq_parameter_set_id = {}; + uint8_t sps_video_parameter_set_id = {}; + uint8_t num_extra_slice_header_bits = {}; + uint8_t num_ref_idx_l0_default_active_minus1 = {}; + uint8_t num_ref_idx_l1_default_active_minus1 = {}; + int8_t init_qp_minus26 = {}; + uint8_t diff_cu_qp_delta_depth = {}; + int8_t pps_cb_qp_offset = {}; + int8_t pps_cr_qp_offset = {}; + int8_t pps_beta_offset_div2 = {}; + int8_t pps_tc_offset_div2 = {}; + uint8_t log2_parallel_merge_level_minus2 = {}; + uint8_t log2_max_transform_skip_block_size_minus2 = {}; + uint8_t diff_cu_chroma_qp_offset_depth = {}; + uint8_t chroma_qp_offset_list_len_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cb_qp_offset_list = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cr_qp_offset_list = {}; + uint8_t log2_sao_offset_scale_luma = {}; + uint8_t log2_sao_offset_scale_chroma = {}; + int8_t pps_act_y_qp_offset_plus5 = {}; + int8_t pps_act_cb_qp_offset_plus5 = {}; + int8_t pps_act_cr_qp_offset_plus3 = {}; + uint8_t pps_num_palette_predictor_initializers = {}; + uint8_t luma_bit_depth_entry_minus8 = {}; + uint8_t chroma_bit_depth_entry_minus8 = {}; + uint8_t num_tile_columns_minus1 = {}; + uint8_t num_tile_rows_minus1 = {}; + uint8_t reserved1 = {}; + uint8_t reserved2 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D column_width_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D row_height_minus1 = {}; + uint32_t reserved3 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ScalingLists * pScalingLists = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PredictorPaletteEntries * pPredictorPaletteEntries = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ ) + //=== vulkan_video_codec_h265std_decode === + + struct DecodeH265PictureInfoFlags + { + using NativeType = StdVideoDecodeH265PictureInfoFlags; + + operator StdVideoDecodeH265PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH265PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH265PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( IrapPicFlag == rhs.IrapPicFlag ) && ( IdrPicFlag == rhs.IdrPicFlag ) && ( IsReference == rhs.IsReference ) && + ( short_term_ref_pic_set_sps_flag == rhs.short_term_ref_pic_set_sps_flag ); + } + + bool operator!=( DecodeH265PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t IrapPicFlag : 1; + uint32_t IdrPicFlag : 1; + uint32_t IsReference : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; + }; + + struct DecodeH265PictureInfo + { + using NativeType = StdVideoDecodeH265PictureInfo; + + operator StdVideoDecodeH265PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH265PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH265PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( sps_video_parameter_set_id == rhs.sps_video_parameter_set_id ) && + ( pps_seq_parameter_set_id == rhs.pps_seq_parameter_set_id ) && ( pps_pic_parameter_set_id == rhs.pps_pic_parameter_set_id ) && + ( NumDeltaPocsOfRefRpsIdx == rhs.NumDeltaPocsOfRefRpsIdx ) && ( PicOrderCntVal == rhs.PicOrderCntVal ) && + ( NumBitsForSTRefPicSetInSlice == rhs.NumBitsForSTRefPicSetInSlice ) && ( reserved == rhs.reserved ) && + ( RefPicSetStCurrBefore == rhs.RefPicSetStCurrBefore ) && ( RefPicSetStCurrAfter == rhs.RefPicSetStCurrAfter ) && + ( RefPicSetLtCurr == rhs.RefPicSetLtCurr ); + } + + bool operator!=( DecodeH265PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265PictureInfoFlags flags = {}; + uint8_t sps_video_parameter_set_id = {}; + uint8_t pps_seq_parameter_set_id = {}; + uint8_t pps_pic_parameter_set_id = {}; + uint8_t NumDeltaPocsOfRefRpsIdx = {}; + int32_t PicOrderCntVal = {}; + uint16_t NumBitsForSTRefPicSetInSlice = {}; + uint16_t reserved = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicSetStCurrBefore = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicSetStCurrAfter = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicSetLtCurr = {}; + }; + + struct DecodeH265ReferenceInfoFlags + { + using NativeType = StdVideoDecodeH265ReferenceInfoFlags; + + operator StdVideoDecodeH265ReferenceInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265ReferenceInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265ReferenceInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH265ReferenceInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH265ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( used_for_long_term_reference == rhs.used_for_long_term_reference ) && ( unused_for_reference == rhs.unused_for_reference ); + } + + bool operator!=( DecodeH265ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; + }; + + struct DecodeH265ReferenceInfo + { + using NativeType = StdVideoDecodeH265ReferenceInfo; + + operator StdVideoDecodeH265ReferenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265ReferenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeH265ReferenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeH265ReferenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeH265ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( PicOrderCntVal == rhs.PicOrderCntVal ); + } + + bool operator!=( DecodeH265ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeH265ReferenceInfoFlags flags = {}; + int32_t PicOrderCntVal = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ ) + //=== vulkan_video_codec_h265std_encode === + + struct EncodeH265WeightTableFlags + { + using NativeType = StdVideoEncodeH265WeightTableFlags; + + operator StdVideoEncodeH265WeightTableFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265WeightTableFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265WeightTableFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265WeightTableFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265WeightTableFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( luma_weight_l0_flag == rhs.luma_weight_l0_flag ) && ( chroma_weight_l0_flag == rhs.chroma_weight_l0_flag ) && + ( luma_weight_l1_flag == rhs.luma_weight_l1_flag ) && ( chroma_weight_l1_flag == rhs.chroma_weight_l1_flag ); + } + + bool operator!=( EncodeH265WeightTableFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint16_t luma_weight_l0_flag = {}; + uint16_t chroma_weight_l0_flag = {}; + uint16_t luma_weight_l1_flag = {}; + uint16_t chroma_weight_l1_flag = {}; + }; + + struct EncodeH265WeightTable + { + using NativeType = StdVideoEncodeH265WeightTable; + + operator StdVideoEncodeH265WeightTable const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265WeightTable &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265WeightTable const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265WeightTable *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265WeightTable const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( luma_log2_weight_denom == rhs.luma_log2_weight_denom ) && + ( delta_chroma_log2_weight_denom == rhs.delta_chroma_log2_weight_denom ) && ( delta_luma_weight_l0 == rhs.delta_luma_weight_l0 ) && + ( luma_offset_l0 == rhs.luma_offset_l0 ) && ( delta_chroma_weight_l0 == rhs.delta_chroma_weight_l0 ) && + ( delta_chroma_offset_l0 == rhs.delta_chroma_offset_l0 ) && ( delta_luma_weight_l1 == rhs.delta_luma_weight_l1 ) && + ( luma_offset_l1 == rhs.luma_offset_l1 ) && ( delta_chroma_weight_l1 == rhs.delta_chroma_weight_l1 ) && + ( delta_chroma_offset_l1 == rhs.delta_chroma_offset_l1 ); + } + + bool operator!=( EncodeH265WeightTable const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265WeightTableFlags flags = {}; + uint8_t luma_log2_weight_denom = {}; + int8_t delta_chroma_log2_weight_denom = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_luma_weight_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D luma_offset_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D delta_chroma_weight_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D delta_chroma_offset_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_luma_weight_l1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D luma_offset_l1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D delta_chroma_weight_l1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D delta_chroma_offset_l1 = {}; + }; + + struct EncodeH265SliceSegmentHeaderFlags + { + using NativeType = StdVideoEncodeH265SliceSegmentHeaderFlags; + + operator StdVideoEncodeH265SliceSegmentHeaderFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265SliceSegmentHeaderFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265SliceSegmentHeaderFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265SliceSegmentHeaderFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265SliceSegmentHeaderFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( first_slice_segment_in_pic_flag == rhs.first_slice_segment_in_pic_flag ) && + ( dependent_slice_segment_flag == rhs.dependent_slice_segment_flag ) && ( slice_sao_luma_flag == rhs.slice_sao_luma_flag ) && + ( slice_sao_chroma_flag == rhs.slice_sao_chroma_flag ) && ( num_ref_idx_active_override_flag == rhs.num_ref_idx_active_override_flag ) && + ( mvd_l1_zero_flag == rhs.mvd_l1_zero_flag ) && ( cabac_init_flag == rhs.cabac_init_flag ) && + ( cu_chroma_qp_offset_enabled_flag == rhs.cu_chroma_qp_offset_enabled_flag ) && + ( deblocking_filter_override_flag == rhs.deblocking_filter_override_flag ) && + ( slice_deblocking_filter_disabled_flag == rhs.slice_deblocking_filter_disabled_flag ) && + ( collocated_from_l0_flag == rhs.collocated_from_l0_flag ) && + ( slice_loop_filter_across_slices_enabled_flag == rhs.slice_loop_filter_across_slices_enabled_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH265SliceSegmentHeaderFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t first_slice_segment_in_pic_flag : 1; + uint32_t dependent_slice_segment_flag : 1; + uint32_t slice_sao_luma_flag : 1; + uint32_t slice_sao_chroma_flag : 1; + uint32_t num_ref_idx_active_override_flag : 1; + uint32_t mvd_l1_zero_flag : 1; + uint32_t cabac_init_flag : 1; + uint32_t cu_chroma_qp_offset_enabled_flag : 1; + uint32_t deblocking_filter_override_flag : 1; + uint32_t slice_deblocking_filter_disabled_flag : 1; + uint32_t collocated_from_l0_flag : 1; + uint32_t slice_loop_filter_across_slices_enabled_flag : 1; + uint32_t reserved : 20; + }; + + struct EncodeH265SliceSegmentHeader + { + using NativeType = StdVideoEncodeH265SliceSegmentHeader; + + operator StdVideoEncodeH265SliceSegmentHeader const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265SliceSegmentHeader &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265SliceSegmentHeader const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265SliceSegmentHeader *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265SliceSegmentHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( slice_type == rhs.slice_type ) && ( slice_segment_address == rhs.slice_segment_address ) && + ( collocated_ref_idx == rhs.collocated_ref_idx ) && ( MaxNumMergeCand == rhs.MaxNumMergeCand ) && + ( slice_cb_qp_offset == rhs.slice_cb_qp_offset ) && ( slice_cr_qp_offset == rhs.slice_cr_qp_offset ) && + ( slice_beta_offset_div2 == rhs.slice_beta_offset_div2 ) && ( slice_tc_offset_div2 == rhs.slice_tc_offset_div2 ) && + ( slice_act_y_qp_offset == rhs.slice_act_y_qp_offset ) && ( slice_act_cb_qp_offset == rhs.slice_act_cb_qp_offset ) && + ( slice_act_cr_qp_offset == rhs.slice_act_cr_qp_offset ) && ( slice_qp_delta == rhs.slice_qp_delta ) && ( reserved1 == rhs.reserved1 ) && + ( pWeightTable == rhs.pWeightTable ); + } + + bool operator!=( EncodeH265SliceSegmentHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265SliceSegmentHeaderFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SliceType slice_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265SliceType::eB; + uint32_t slice_segment_address = {}; + uint8_t collocated_ref_idx = {}; + uint8_t MaxNumMergeCand = {}; + int8_t slice_cb_qp_offset = {}; + int8_t slice_cr_qp_offset = {}; + int8_t slice_beta_offset_div2 = {}; + int8_t slice_tc_offset_div2 = {}; + int8_t slice_act_y_qp_offset = {}; + int8_t slice_act_cb_qp_offset = {}; + int8_t slice_act_cr_qp_offset = {}; + int8_t slice_qp_delta = {}; + uint16_t reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265WeightTable * pWeightTable = {}; + }; + + struct EncodeH265ReferenceListsInfoFlags + { + using NativeType = StdVideoEncodeH265ReferenceListsInfoFlags; + + operator StdVideoEncodeH265ReferenceListsInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceListsInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceListsInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceListsInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265ReferenceListsInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( ref_pic_list_modification_flag_l0 == rhs.ref_pic_list_modification_flag_l0 ) && + ( ref_pic_list_modification_flag_l1 == rhs.ref_pic_list_modification_flag_l1 ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH265ReferenceListsInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t ref_pic_list_modification_flag_l0 : 1; + uint32_t ref_pic_list_modification_flag_l1 : 1; + uint32_t reserved : 30; + }; + + struct EncodeH265ReferenceListsInfo + { + using NativeType = StdVideoEncodeH265ReferenceListsInfo; + + operator StdVideoEncodeH265ReferenceListsInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceListsInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceListsInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceListsInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265ReferenceListsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( num_ref_idx_l0_active_minus1 == rhs.num_ref_idx_l0_active_minus1 ) && + ( num_ref_idx_l1_active_minus1 == rhs.num_ref_idx_l1_active_minus1 ) && ( RefPicList0 == rhs.RefPicList0 ) && + ( RefPicList1 == rhs.RefPicList1 ) && ( list_entry_l0 == rhs.list_entry_l0 ) && ( list_entry_l1 == rhs.list_entry_l1 ); + } + + bool operator!=( EncodeH265ReferenceListsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceListsInfoFlags flags = {}; + uint8_t num_ref_idx_l0_active_minus1 = {}; + uint8_t num_ref_idx_l1_active_minus1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicList0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D RefPicList1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D list_entry_l0 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D list_entry_l1 = {}; + }; + + struct EncodeH265PictureInfoFlags + { + using NativeType = StdVideoEncodeH265PictureInfoFlags; + + operator StdVideoEncodeH265PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( is_reference == rhs.is_reference ) && ( IrapPicFlag == rhs.IrapPicFlag ) && + ( used_for_long_term_reference == rhs.used_for_long_term_reference ) && ( discardable_flag == rhs.discardable_flag ) && + ( cross_layer_bla_flag == rhs.cross_layer_bla_flag ) && ( pic_output_flag == rhs.pic_output_flag ) && + ( no_output_of_prior_pics_flag == rhs.no_output_of_prior_pics_flag ) && + ( short_term_ref_pic_set_sps_flag == rhs.short_term_ref_pic_set_sps_flag ) && + ( slice_temporal_mvp_enabled_flag == rhs.slice_temporal_mvp_enabled_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH265PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t is_reference : 1; + uint32_t IrapPicFlag : 1; + uint32_t used_for_long_term_reference : 1; + uint32_t discardable_flag : 1; + uint32_t cross_layer_bla_flag : 1; + uint32_t pic_output_flag : 1; + uint32_t no_output_of_prior_pics_flag : 1; + uint32_t short_term_ref_pic_set_sps_flag : 1; + uint32_t slice_temporal_mvp_enabled_flag : 1; + uint32_t reserved : 23; + }; + + struct EncodeH265LongTermRefPics + { + using NativeType = StdVideoEncodeH265LongTermRefPics; + + operator StdVideoEncodeH265LongTermRefPics const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265LongTermRefPics &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265LongTermRefPics const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265LongTermRefPics *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265LongTermRefPics const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( num_long_term_sps == rhs.num_long_term_sps ) && ( num_long_term_pics == rhs.num_long_term_pics ) && ( lt_idx_sps == rhs.lt_idx_sps ) && + ( poc_lsb_lt == rhs.poc_lsb_lt ) && ( used_by_curr_pic_lt_flag == rhs.used_by_curr_pic_lt_flag ) && + ( delta_poc_msb_present_flag == rhs.delta_poc_msb_present_flag ) && ( delta_poc_msb_cycle_lt == rhs.delta_poc_msb_cycle_lt ); + } + + bool operator!=( EncodeH265LongTermRefPics const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint8_t num_long_term_sps = {}; + uint8_t num_long_term_pics = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D lt_idx_sps = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D poc_lsb_lt = {}; + uint16_t used_by_curr_pic_lt_flag = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_poc_msb_present_flag = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_poc_msb_cycle_lt = {}; + }; + + struct EncodeH265PictureInfo + { + using NativeType = StdVideoEncodeH265PictureInfo; + + operator StdVideoEncodeH265PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( pic_type == rhs.pic_type ) && ( sps_video_parameter_set_id == rhs.sps_video_parameter_set_id ) && + ( pps_seq_parameter_set_id == rhs.pps_seq_parameter_set_id ) && ( pps_pic_parameter_set_id == rhs.pps_pic_parameter_set_id ) && + ( short_term_ref_pic_set_idx == rhs.short_term_ref_pic_set_idx ) && ( PicOrderCntVal == rhs.PicOrderCntVal ) && + ( TemporalId == rhs.TemporalId ) && ( reserved1 == rhs.reserved1 ) && ( pRefLists == rhs.pRefLists ) && + ( pShortTermRefPicSet == rhs.pShortTermRefPicSet ) && ( pLongTermRefPics == rhs.pLongTermRefPics ); + } + + bool operator!=( EncodeH265PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265PictureInfoFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PictureType pic_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PictureType::eP; + uint8_t sps_video_parameter_set_id = {}; + uint8_t pps_seq_parameter_set_id = {}; + uint8_t pps_pic_parameter_set_id = {}; + uint8_t short_term_ref_pic_set_idx = {}; + int32_t PicOrderCntVal = {}; + uint8_t TemporalId = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceListsInfo * pRefLists = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265ShortTermRefPicSet * pShortTermRefPicSet = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265LongTermRefPics * pLongTermRefPics = {}; + }; + + struct EncodeH265ReferenceInfoFlags + { + using NativeType = StdVideoEncodeH265ReferenceInfoFlags; + + operator StdVideoEncodeH265ReferenceInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( used_for_long_term_reference == rhs.used_for_long_term_reference ) && ( unused_for_reference == rhs.unused_for_reference ) && + ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeH265ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t used_for_long_term_reference : 1; + uint32_t unused_for_reference : 1; + uint32_t reserved : 30; + }; + + struct EncodeH265ReferenceInfo + { + using NativeType = StdVideoEncodeH265ReferenceInfo; + + operator StdVideoEncodeH265ReferenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeH265ReferenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeH265ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( pic_type == rhs.pic_type ) && ( PicOrderCntVal == rhs.PicOrderCntVal ) && ( TemporalId == rhs.TemporalId ); + } + + bool operator!=( EncodeH265ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeH265ReferenceInfoFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PictureType pic_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::H265PictureType::eP; + int32_t PicOrderCntVal = {}; + uint8_t TemporalId = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_VP9STD_H_ ) + //=== vulkan_video_codec_vp9std === + + struct VP9ColorConfigFlags + { + using NativeType = StdVideoVP9ColorConfigFlags; + + operator StdVideoVP9ColorConfigFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9ColorConfigFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9ColorConfigFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoVP9ColorConfigFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( VP9ColorConfigFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( color_range == rhs.color_range ) && ( reserved == rhs.reserved ); + } + + bool operator!=( VP9ColorConfigFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t color_range : 1; + uint32_t reserved : 31; + }; + + struct VP9ColorConfig + { + using NativeType = StdVideoVP9ColorConfig; + + operator StdVideoVP9ColorConfig const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9ColorConfig &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9ColorConfig const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoVP9ColorConfig *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( VP9ColorConfig const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( BitDepth == rhs.BitDepth ) && ( subsampling_x == rhs.subsampling_x ) && ( subsampling_y == rhs.subsampling_y ) && + ( reserved1 == rhs.reserved1 ) && ( color_space == rhs.color_space ); + } + + bool operator!=( VP9ColorConfig const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorConfigFlags flags = {}; + uint8_t BitDepth = {}; + uint8_t subsampling_x = {}; + uint8_t subsampling_y = {}; + uint8_t reserved1 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorSpace color_space = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorSpace::eUnknown; + }; + + struct VP9LoopFilterFlags + { + using NativeType = StdVideoVP9LoopFilterFlags; + + operator StdVideoVP9LoopFilterFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9LoopFilterFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9LoopFilterFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoVP9LoopFilterFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( VP9LoopFilterFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( loop_filter_delta_enabled == rhs.loop_filter_delta_enabled ) && ( loop_filter_delta_update == rhs.loop_filter_delta_update ) && + ( reserved == rhs.reserved ); + } + + bool operator!=( VP9LoopFilterFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; + }; + + struct VP9LoopFilter + { + using NativeType = StdVideoVP9LoopFilter; + + operator StdVideoVP9LoopFilter const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9LoopFilter &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9LoopFilter const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoVP9LoopFilter *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( VP9LoopFilter const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( loop_filter_level == rhs.loop_filter_level ) && ( loop_filter_sharpness == rhs.loop_filter_sharpness ) && + ( update_ref_delta == rhs.update_ref_delta ) && ( loop_filter_ref_deltas == rhs.loop_filter_ref_deltas ) && + ( update_mode_delta == rhs.update_mode_delta ) && ( loop_filter_mode_deltas == rhs.loop_filter_mode_deltas ); + } + + bool operator!=( VP9LoopFilter const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9LoopFilterFlags flags = {}; + uint8_t loop_filter_level = {}; + uint8_t loop_filter_sharpness = {}; + uint8_t update_ref_delta = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D loop_filter_ref_deltas = {}; + uint8_t update_mode_delta = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D loop_filter_mode_deltas = {}; + }; + + struct VP9SegmentationFlags + { + using NativeType = StdVideoVP9SegmentationFlags; + + operator StdVideoVP9SegmentationFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9SegmentationFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9SegmentationFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoVP9SegmentationFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( VP9SegmentationFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( segmentation_update_map == rhs.segmentation_update_map ) && ( segmentation_temporal_update == rhs.segmentation_temporal_update ) && + ( segmentation_update_data == rhs.segmentation_update_data ) && ( segmentation_abs_or_delta_update == rhs.segmentation_abs_or_delta_update ) && + ( reserved == rhs.reserved ); + } + + bool operator!=( VP9SegmentationFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t segmentation_abs_or_delta_update : 1; + uint32_t reserved : 28; + }; + + struct VP9Segmentation + { + using NativeType = StdVideoVP9Segmentation; + + operator StdVideoVP9Segmentation const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9Segmentation &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoVP9Segmentation const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoVP9Segmentation *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( VP9Segmentation const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( segmentation_tree_probs == rhs.segmentation_tree_probs ) && + ( segmentation_pred_prob == rhs.segmentation_pred_prob ) && ( FeatureEnabled == rhs.FeatureEnabled ) && ( FeatureData == rhs.FeatureData ); + } + + bool operator!=( VP9Segmentation const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9SegmentationFlags flags = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D segmentation_tree_probs = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D segmentation_pred_prob = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D FeatureEnabled = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D FeatureData = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ ) + //=== vulkan_video_codec_vp9std_decode === + + struct DecodeVP9PictureInfoFlags + { + using NativeType = StdVideoDecodeVP9PictureInfoFlags; + + operator StdVideoDecodeVP9PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeVP9PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeVP9PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeVP9PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeVP9PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( error_resilient_mode == rhs.error_resilient_mode ) && ( intra_only == rhs.intra_only ) && + ( allow_high_precision_mv == rhs.allow_high_precision_mv ) && ( refresh_frame_context == rhs.refresh_frame_context ) && + ( frame_parallel_decoding_mode == rhs.frame_parallel_decoding_mode ) && ( segmentation_enabled == rhs.segmentation_enabled ) && + ( show_frame == rhs.show_frame ) && ( UsePrevFrameMvs == rhs.UsePrevFrameMvs ) && ( reserved == rhs.reserved ); + } + + bool operator!=( DecodeVP9PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t error_resilient_mode : 1; + uint32_t intra_only : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t refresh_frame_context : 1; + uint32_t frame_parallel_decoding_mode : 1; + uint32_t segmentation_enabled : 1; + uint32_t show_frame : 1; + uint32_t UsePrevFrameMvs : 1; + uint32_t reserved : 24; + }; + + struct DecodeVP9PictureInfo + { + using NativeType = StdVideoDecodeVP9PictureInfo; + + operator StdVideoDecodeVP9PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeVP9PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeVP9PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeVP9PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeVP9PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( profile == rhs.profile ) && ( frame_type == rhs.frame_type ) && ( frame_context_idx == rhs.frame_context_idx ) && + ( reset_frame_context == rhs.reset_frame_context ) && ( refresh_frame_flags == rhs.refresh_frame_flags ) && + ( ref_frame_sign_bias_mask == rhs.ref_frame_sign_bias_mask ) && ( interpolation_filter == rhs.interpolation_filter ) && + ( base_q_idx == rhs.base_q_idx ) && ( delta_q_y_dc == rhs.delta_q_y_dc ) && ( delta_q_uv_dc == rhs.delta_q_uv_dc ) && + ( delta_q_uv_ac == rhs.delta_q_uv_ac ) && ( tile_cols_log2 == rhs.tile_cols_log2 ) && ( tile_rows_log2 == rhs.tile_rows_log2 ) && + ( reserved1 == rhs.reserved1 ) && ( pColorConfig == rhs.pColorConfig ) && ( pLoopFilter == rhs.pLoopFilter ) && + ( pSegmentation == rhs.pSegmentation ); + } + + bool operator!=( DecodeVP9PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeVP9PictureInfoFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Profile profile = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Profile::e0; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9FrameType frame_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9FrameType::eKey; + uint8_t frame_context_idx = {}; + uint8_t reset_frame_context = {}; + uint8_t refresh_frame_flags = {}; + uint8_t ref_frame_sign_bias_mask = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9InterpolationFilter interpolation_filter = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9InterpolationFilter::eEighttap; + uint8_t base_q_idx = {}; + int8_t delta_q_y_dc = {}; + int8_t delta_q_uv_dc = {}; + int8_t delta_q_uv_ac = {}; + uint8_t tile_cols_log2 = {}; + uint8_t tile_rows_log2 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9ColorConfig * pColorConfig = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9LoopFilter * pLoopFilter = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::VP9Segmentation * pSegmentation = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_AV1STD_H_ ) + //=== vulkan_video_codec_av1std === + + struct AV1ColorConfigFlags + { + using NativeType = StdVideoAV1ColorConfigFlags; + + operator StdVideoAV1ColorConfigFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1ColorConfigFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1ColorConfigFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1ColorConfigFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1ColorConfigFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( mono_chrome == rhs.mono_chrome ) && ( color_range == rhs.color_range ) && ( separate_uv_delta_q == rhs.separate_uv_delta_q ) && + ( color_description_present_flag == rhs.color_description_present_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( AV1ColorConfigFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t mono_chrome : 1; + uint32_t color_range : 1; + uint32_t separate_uv_delta_q : 1; + uint32_t color_description_present_flag : 1; + uint32_t reserved : 28; + }; + + struct AV1ColorConfig + { + using NativeType = StdVideoAV1ColorConfig; + + operator StdVideoAV1ColorConfig const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1ColorConfig &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1ColorConfig const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1ColorConfig *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1ColorConfig const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( BitDepth == rhs.BitDepth ) && ( subsampling_x == rhs.subsampling_x ) && ( subsampling_y == rhs.subsampling_y ) && + ( reserved1 == rhs.reserved1 ) && ( color_primaries == rhs.color_primaries ) && ( transfer_characteristics == rhs.transfer_characteristics ) && + ( matrix_coefficients == rhs.matrix_coefficients ) && ( chroma_sample_position == rhs.chroma_sample_position ); + } + + bool operator!=( AV1ColorConfig const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorConfigFlags flags = {}; + uint8_t BitDepth = {}; + uint8_t subsampling_x = {}; + uint8_t subsampling_y = {}; + uint8_t reserved1 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorPrimaries color_primaries = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorPrimaries::eBt709; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TransferCharacteristics transfer_characteristics = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TransferCharacteristics::eReserved0; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1MatrixCoefficients matrix_coefficients = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1MatrixCoefficients::eIdentity; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ChromaSamplePosition chroma_sample_position = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ChromaSamplePosition::eUnknown; + }; + + struct AV1TimingInfoFlags + { + using NativeType = StdVideoAV1TimingInfoFlags; + + operator StdVideoAV1TimingInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TimingInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TimingInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1TimingInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1TimingInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( equal_picture_interval == rhs.equal_picture_interval ) && ( reserved == rhs.reserved ); + } + + bool operator!=( AV1TimingInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t equal_picture_interval : 1; + uint32_t reserved : 31; + }; + + struct AV1TimingInfo + { + using NativeType = StdVideoAV1TimingInfo; + + operator StdVideoAV1TimingInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TimingInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TimingInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1TimingInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1TimingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( num_units_in_display_tick == rhs.num_units_in_display_tick ) && ( time_scale == rhs.time_scale ) && + ( num_ticks_per_picture_minus_1 == rhs.num_ticks_per_picture_minus_1 ); + } + + bool operator!=( AV1TimingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TimingInfoFlags flags = {}; + uint32_t num_units_in_display_tick = {}; + uint32_t time_scale = {}; + uint32_t num_ticks_per_picture_minus_1 = {}; + }; + + struct AV1LoopFilterFlags + { + using NativeType = StdVideoAV1LoopFilterFlags; + + operator StdVideoAV1LoopFilterFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1LoopFilterFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1LoopFilterFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1LoopFilterFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1LoopFilterFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( loop_filter_delta_enabled == rhs.loop_filter_delta_enabled ) && ( loop_filter_delta_update == rhs.loop_filter_delta_update ) && + ( reserved == rhs.reserved ); + } + + bool operator!=( AV1LoopFilterFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; + }; + + struct AV1LoopFilter + { + using NativeType = StdVideoAV1LoopFilter; + + operator StdVideoAV1LoopFilter const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1LoopFilter &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1LoopFilter const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1LoopFilter *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1LoopFilter const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( loop_filter_level == rhs.loop_filter_level ) && ( loop_filter_sharpness == rhs.loop_filter_sharpness ) && + ( update_ref_delta == rhs.update_ref_delta ) && ( loop_filter_ref_deltas == rhs.loop_filter_ref_deltas ) && + ( update_mode_delta == rhs.update_mode_delta ) && ( loop_filter_mode_deltas == rhs.loop_filter_mode_deltas ); + } + + bool operator!=( AV1LoopFilter const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopFilterFlags flags = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D loop_filter_level = {}; + uint8_t loop_filter_sharpness = {}; + uint8_t update_ref_delta = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D loop_filter_ref_deltas = {}; + uint8_t update_mode_delta = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D loop_filter_mode_deltas = {}; + }; + + struct AV1QuantizationFlags + { + using NativeType = StdVideoAV1QuantizationFlags; + + operator StdVideoAV1QuantizationFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1QuantizationFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1QuantizationFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1QuantizationFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1QuantizationFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( using_qmatrix == rhs.using_qmatrix ) && ( diff_uv_delta == rhs.diff_uv_delta ) && ( reserved == rhs.reserved ); + } + + bool operator!=( AV1QuantizationFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t using_qmatrix : 1; + uint32_t diff_uv_delta : 1; + uint32_t reserved : 30; + }; + + struct AV1Quantization + { + using NativeType = StdVideoAV1Quantization; + + operator StdVideoAV1Quantization const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1Quantization &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1Quantization const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1Quantization *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1Quantization const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( base_q_idx == rhs.base_q_idx ) && ( DeltaQYDc == rhs.DeltaQYDc ) && ( DeltaQUDc == rhs.DeltaQUDc ) && + ( DeltaQUAc == rhs.DeltaQUAc ) && ( DeltaQVDc == rhs.DeltaQVDc ) && ( DeltaQVAc == rhs.DeltaQVAc ) && ( qm_y == rhs.qm_y ) && + ( qm_u == rhs.qm_u ) && ( qm_v == rhs.qm_v ); + } + + bool operator!=( AV1Quantization const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1QuantizationFlags flags = {}; + uint8_t base_q_idx = {}; + int8_t DeltaQYDc = {}; + int8_t DeltaQUDc = {}; + int8_t DeltaQUAc = {}; + int8_t DeltaQVDc = {}; + int8_t DeltaQVAc = {}; + uint8_t qm_y = {}; + uint8_t qm_u = {}; + uint8_t qm_v = {}; + }; + + struct AV1Segmentation + { + using NativeType = StdVideoAV1Segmentation; + + operator StdVideoAV1Segmentation const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1Segmentation &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1Segmentation const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1Segmentation *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1Segmentation const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( FeatureEnabled == rhs.FeatureEnabled ) && ( FeatureData == rhs.FeatureData ); + } + + bool operator!=( AV1Segmentation const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D FeatureEnabled = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D FeatureData = {}; + }; + + struct AV1TileInfoFlags + { + using NativeType = StdVideoAV1TileInfoFlags; + + operator StdVideoAV1TileInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TileInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TileInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1TileInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1TileInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( uniform_tile_spacing_flag == rhs.uniform_tile_spacing_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( AV1TileInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t uniform_tile_spacing_flag : 1; + uint32_t reserved : 31; + }; + + struct AV1TileInfo + { + using NativeType = StdVideoAV1TileInfo; + + operator StdVideoAV1TileInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TileInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1TileInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1TileInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1TileInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( TileCols == rhs.TileCols ) && ( TileRows == rhs.TileRows ) && + ( context_update_tile_id == rhs.context_update_tile_id ) && ( tile_size_bytes_minus_1 == rhs.tile_size_bytes_minus_1 ) && + ( reserved1 == rhs.reserved1 ) && ( pMiColStarts == rhs.pMiColStarts ) && ( pMiRowStarts == rhs.pMiRowStarts ) && + ( pWidthInSbsMinus1 == rhs.pWidthInSbsMinus1 ) && ( pHeightInSbsMinus1 == rhs.pHeightInSbsMinus1 ); + } + + bool operator!=( AV1TileInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TileInfoFlags flags = {}; + uint8_t TileCols = {}; + uint8_t TileRows = {}; + uint16_t context_update_tile_id = {}; + uint8_t tile_size_bytes_minus_1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const uint16_t * pMiColStarts = {}; + const uint16_t * pMiRowStarts = {}; + const uint16_t * pWidthInSbsMinus1 = {}; + const uint16_t * pHeightInSbsMinus1 = {}; + }; + + struct AV1CDEF + { + using NativeType = StdVideoAV1CDEF; + + operator StdVideoAV1CDEF const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1CDEF &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1CDEF const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1CDEF *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1CDEF const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( cdef_damping_minus_3 == rhs.cdef_damping_minus_3 ) && ( cdef_bits == rhs.cdef_bits ) && ( cdef_y_pri_strength == rhs.cdef_y_pri_strength ) && + ( cdef_y_sec_strength == rhs.cdef_y_sec_strength ) && ( cdef_uv_pri_strength == rhs.cdef_uv_pri_strength ) && + ( cdef_uv_sec_strength == rhs.cdef_uv_sec_strength ); + } + + bool operator!=( AV1CDEF const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint8_t cdef_damping_minus_3 = {}; + uint8_t cdef_bits = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cdef_y_pri_strength = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cdef_y_sec_strength = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cdef_uv_pri_strength = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D cdef_uv_sec_strength = {}; + }; + + struct AV1LoopRestoration + { + using NativeType = StdVideoAV1LoopRestoration; + + operator StdVideoAV1LoopRestoration const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1LoopRestoration &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1LoopRestoration const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1LoopRestoration *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1LoopRestoration const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( FrameRestorationType == rhs.FrameRestorationType ) && ( LoopRestorationSize == rhs.LoopRestorationSize ); + } + + bool operator!=( AV1LoopRestoration const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D FrameRestorationType = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D LoopRestorationSize = {}; + }; + + struct AV1GlobalMotion + { + using NativeType = StdVideoAV1GlobalMotion; + + operator StdVideoAV1GlobalMotion const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1GlobalMotion &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1GlobalMotion const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1GlobalMotion *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1GlobalMotion const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( GmType == rhs.GmType ) && ( gm_params == rhs.gm_params ); + } + + bool operator!=( AV1GlobalMotion const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::ArrayWrapper1D GmType = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper2D gm_params = {}; + }; + + struct AV1FilmGrainFlags + { + using NativeType = StdVideoAV1FilmGrainFlags; + + operator StdVideoAV1FilmGrainFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1FilmGrainFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1FilmGrainFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1FilmGrainFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1FilmGrainFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( chroma_scaling_from_luma == rhs.chroma_scaling_from_luma ) && ( overlap_flag == rhs.overlap_flag ) && + ( clip_to_restricted_range == rhs.clip_to_restricted_range ) && ( update_grain == rhs.update_grain ) && ( reserved == rhs.reserved ); + } + + bool operator!=( AV1FilmGrainFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t chroma_scaling_from_luma : 1; + uint32_t overlap_flag : 1; + uint32_t clip_to_restricted_range : 1; + uint32_t update_grain : 1; + uint32_t reserved : 28; + }; + + struct AV1FilmGrain + { + using NativeType = StdVideoAV1FilmGrain; + + operator StdVideoAV1FilmGrain const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1FilmGrain &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1FilmGrain const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1FilmGrain *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1FilmGrain const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( grain_scaling_minus_8 == rhs.grain_scaling_minus_8 ) && ( ar_coeff_lag == rhs.ar_coeff_lag ) && + ( ar_coeff_shift_minus_6 == rhs.ar_coeff_shift_minus_6 ) && ( grain_scale_shift == rhs.grain_scale_shift ) && ( grain_seed == rhs.grain_seed ) && + ( film_grain_params_ref_idx == rhs.film_grain_params_ref_idx ) && ( num_y_points == rhs.num_y_points ) && + ( point_y_value == rhs.point_y_value ) && ( point_y_scaling == rhs.point_y_scaling ) && ( num_cb_points == rhs.num_cb_points ) && + ( point_cb_value == rhs.point_cb_value ) && ( point_cb_scaling == rhs.point_cb_scaling ) && ( num_cr_points == rhs.num_cr_points ) && + ( point_cr_value == rhs.point_cr_value ) && ( point_cr_scaling == rhs.point_cr_scaling ) && + ( ar_coeffs_y_plus_128 == rhs.ar_coeffs_y_plus_128 ) && ( ar_coeffs_cb_plus_128 == rhs.ar_coeffs_cb_plus_128 ) && + ( ar_coeffs_cr_plus_128 == rhs.ar_coeffs_cr_plus_128 ) && ( cb_mult == rhs.cb_mult ) && ( cb_luma_mult == rhs.cb_luma_mult ) && + ( cb_offset == rhs.cb_offset ) && ( cr_mult == rhs.cr_mult ) && ( cr_luma_mult == rhs.cr_luma_mult ) && ( cr_offset == rhs.cr_offset ); + } + + bool operator!=( AV1FilmGrain const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FilmGrainFlags flags = {}; + uint8_t grain_scaling_minus_8 = {}; + uint8_t ar_coeff_lag = {}; + uint8_t ar_coeff_shift_minus_6 = {}; + uint8_t grain_scale_shift = {}; + uint16_t grain_seed = {}; + uint8_t film_grain_params_ref_idx = {}; + uint8_t num_y_points = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D point_y_value = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D point_y_scaling = {}; + uint8_t num_cb_points = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D point_cb_value = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D point_cb_scaling = {}; + uint8_t num_cr_points = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D point_cr_value = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D point_cr_scaling = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ar_coeffs_y_plus_128 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ar_coeffs_cb_plus_128 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ar_coeffs_cr_plus_128 = {}; + uint8_t cb_mult = {}; + uint8_t cb_luma_mult = {}; + uint16_t cb_offset = {}; + uint8_t cr_mult = {}; + uint8_t cr_luma_mult = {}; + uint16_t cr_offset = {}; + }; + + struct AV1SequenceHeaderFlags + { + using NativeType = StdVideoAV1SequenceHeaderFlags; + + operator StdVideoAV1SequenceHeaderFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1SequenceHeaderFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1SequenceHeaderFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1SequenceHeaderFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1SequenceHeaderFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( still_picture == rhs.still_picture ) && ( reduced_still_picture_header == rhs.reduced_still_picture_header ) && + ( use_128x128_superblock == rhs.use_128x128_superblock ) && ( enable_filter_intra == rhs.enable_filter_intra ) && + ( enable_intra_edge_filter == rhs.enable_intra_edge_filter ) && ( enable_interintra_compound == rhs.enable_interintra_compound ) && + ( enable_masked_compound == rhs.enable_masked_compound ) && ( enable_warped_motion == rhs.enable_warped_motion ) && + ( enable_dual_filter == rhs.enable_dual_filter ) && ( enable_order_hint == rhs.enable_order_hint ) && + ( enable_jnt_comp == rhs.enable_jnt_comp ) && ( enable_ref_frame_mvs == rhs.enable_ref_frame_mvs ) && + ( frame_id_numbers_present_flag == rhs.frame_id_numbers_present_flag ) && ( enable_superres == rhs.enable_superres ) && + ( enable_cdef == rhs.enable_cdef ) && ( enable_restoration == rhs.enable_restoration ) && + ( film_grain_params_present == rhs.film_grain_params_present ) && ( timing_info_present_flag == rhs.timing_info_present_flag ) && + ( initial_display_delay_present_flag == rhs.initial_display_delay_present_flag ) && ( reserved == rhs.reserved ); + } + + bool operator!=( AV1SequenceHeaderFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t still_picture : 1; + uint32_t reduced_still_picture_header : 1; + uint32_t use_128x128_superblock : 1; + uint32_t enable_filter_intra : 1; + uint32_t enable_intra_edge_filter : 1; + uint32_t enable_interintra_compound : 1; + uint32_t enable_masked_compound : 1; + uint32_t enable_warped_motion : 1; + uint32_t enable_dual_filter : 1; + uint32_t enable_order_hint : 1; + uint32_t enable_jnt_comp : 1; + uint32_t enable_ref_frame_mvs : 1; + uint32_t frame_id_numbers_present_flag : 1; + uint32_t enable_superres : 1; + uint32_t enable_cdef : 1; + uint32_t enable_restoration : 1; + uint32_t film_grain_params_present : 1; + uint32_t timing_info_present_flag : 1; + uint32_t initial_display_delay_present_flag : 1; + uint32_t reserved : 13; + }; + + struct AV1SequenceHeader + { + using NativeType = StdVideoAV1SequenceHeader; + + operator StdVideoAV1SequenceHeader const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1SequenceHeader &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoAV1SequenceHeader const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoAV1SequenceHeader *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( AV1SequenceHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( seq_profile == rhs.seq_profile ) && ( frame_width_bits_minus_1 == rhs.frame_width_bits_minus_1 ) && + ( frame_height_bits_minus_1 == rhs.frame_height_bits_minus_1 ) && ( max_frame_width_minus_1 == rhs.max_frame_width_minus_1 ) && + ( max_frame_height_minus_1 == rhs.max_frame_height_minus_1 ) && ( delta_frame_id_length_minus_2 == rhs.delta_frame_id_length_minus_2 ) && + ( additional_frame_id_length_minus_1 == rhs.additional_frame_id_length_minus_1 ) && ( order_hint_bits_minus_1 == rhs.order_hint_bits_minus_1 ) && + ( seq_force_integer_mv == rhs.seq_force_integer_mv ) && ( seq_force_screen_content_tools == rhs.seq_force_screen_content_tools ) && + ( reserved1 == rhs.reserved1 ) && ( pColorConfig == rhs.pColorConfig ) && ( pTimingInfo == rhs.pTimingInfo ); + } + + bool operator!=( AV1SequenceHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1SequenceHeaderFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Profile seq_profile = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Profile::eMain; + uint8_t frame_width_bits_minus_1 = {}; + uint8_t frame_height_bits_minus_1 = {}; + uint16_t max_frame_width_minus_1 = {}; + uint16_t max_frame_height_minus_1 = {}; + uint8_t delta_frame_id_length_minus_2 = {}; + uint8_t additional_frame_id_length_minus_1 = {}; + uint8_t order_hint_bits_minus_1 = {}; + uint8_t seq_force_integer_mv = {}; + uint8_t seq_force_screen_content_tools = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1ColorConfig * pColorConfig = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TimingInfo * pTimingInfo = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ ) + //=== vulkan_video_codec_av1std_decode === + + struct DecodeAV1PictureInfoFlags + { + using NativeType = StdVideoDecodeAV1PictureInfoFlags; + + operator StdVideoDecodeAV1PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeAV1PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( error_resilient_mode == rhs.error_resilient_mode ) && ( disable_cdf_update == rhs.disable_cdf_update ) && + ( use_superres == rhs.use_superres ) && ( render_and_frame_size_different == rhs.render_and_frame_size_different ) && + ( allow_screen_content_tools == rhs.allow_screen_content_tools ) && ( is_filter_switchable == rhs.is_filter_switchable ) && + ( force_integer_mv == rhs.force_integer_mv ) && ( frame_size_override_flag == rhs.frame_size_override_flag ) && + ( buffer_removal_time_present_flag == rhs.buffer_removal_time_present_flag ) && ( allow_intrabc == rhs.allow_intrabc ) && + ( frame_refs_short_signaling == rhs.frame_refs_short_signaling ) && ( allow_high_precision_mv == rhs.allow_high_precision_mv ) && + ( is_motion_mode_switchable == rhs.is_motion_mode_switchable ) && ( use_ref_frame_mvs == rhs.use_ref_frame_mvs ) && + ( disable_frame_end_update_cdf == rhs.disable_frame_end_update_cdf ) && ( allow_warped_motion == rhs.allow_warped_motion ) && + ( reduced_tx_set == rhs.reduced_tx_set ) && ( reference_select == rhs.reference_select ) && ( skip_mode_present == rhs.skip_mode_present ) && + ( delta_q_present == rhs.delta_q_present ) && ( delta_lf_present == rhs.delta_lf_present ) && ( delta_lf_multi == rhs.delta_lf_multi ) && + ( segmentation_enabled == rhs.segmentation_enabled ) && ( segmentation_update_map == rhs.segmentation_update_map ) && + ( segmentation_temporal_update == rhs.segmentation_temporal_update ) && ( segmentation_update_data == rhs.segmentation_update_data ) && + ( UsesLr == rhs.UsesLr ) && ( usesChromaLr == rhs.usesChromaLr ) && ( apply_grain == rhs.apply_grain ) && ( reserved == rhs.reserved ); + } + + bool operator!=( DecodeAV1PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t reference_select : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t apply_grain : 1; + uint32_t reserved : 3; + }; + + struct DecodeAV1PictureInfo + { + using NativeType = StdVideoDecodeAV1PictureInfo; + + operator StdVideoDecodeAV1PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeAV1PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( frame_type == rhs.frame_type ) && ( current_frame_id == rhs.current_frame_id ) && ( OrderHint == rhs.OrderHint ) && + ( primary_ref_frame == rhs.primary_ref_frame ) && ( refresh_frame_flags == rhs.refresh_frame_flags ) && ( reserved1 == rhs.reserved1 ) && + ( interpolation_filter == rhs.interpolation_filter ) && ( TxMode == rhs.TxMode ) && ( delta_q_res == rhs.delta_q_res ) && + ( delta_lf_res == rhs.delta_lf_res ) && ( SkipModeFrame == rhs.SkipModeFrame ) && ( coded_denom == rhs.coded_denom ) && + ( reserved2 == rhs.reserved2 ) && ( OrderHints == rhs.OrderHints ) && ( expectedFrameId == rhs.expectedFrameId ) && + ( pTileInfo == rhs.pTileInfo ) && ( pQuantization == rhs.pQuantization ) && ( pSegmentation == rhs.pSegmentation ) && + ( pLoopFilter == rhs.pLoopFilter ) && ( pCDEF == rhs.pCDEF ) && ( pLoopRestoration == rhs.pLoopRestoration ) && + ( pGlobalMotion == rhs.pGlobalMotion ) && ( pFilmGrain == rhs.pFilmGrain ); + } + + bool operator!=( DecodeAV1PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeAV1PictureInfoFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType frame_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType::eKey; + uint32_t current_frame_id = {}; + uint8_t OrderHint = {}; + uint8_t primary_ref_frame = {}; + uint8_t refresh_frame_flags = {}; + uint8_t reserved1 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1InterpolationFilter interpolation_filter = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1InterpolationFilter::eEighttap; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TxMode TxMode = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TxMode::eOnly4X4; + uint8_t delta_q_res = {}; + uint8_t delta_lf_res = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D SkipModeFrame = {}; + uint8_t coded_denom = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved2 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D OrderHints = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D expectedFrameId = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TileInfo * pTileInfo = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Quantization * pQuantization = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Segmentation * pSegmentation = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopFilter * pLoopFilter = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1CDEF * pCDEF = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopRestoration * pLoopRestoration = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1GlobalMotion * pGlobalMotion = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FilmGrain * pFilmGrain = {}; + }; + + struct DecodeAV1ReferenceInfoFlags + { + using NativeType = StdVideoDecodeAV1ReferenceInfoFlags; + + operator StdVideoDecodeAV1ReferenceInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1ReferenceInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1ReferenceInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1ReferenceInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeAV1ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( disable_frame_end_update_cdf == rhs.disable_frame_end_update_cdf ) && ( segmentation_enabled == rhs.segmentation_enabled ) && + ( reserved == rhs.reserved ); + } + + bool operator!=( DecodeAV1ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; + }; + + struct DecodeAV1ReferenceInfo + { + using NativeType = StdVideoDecodeAV1ReferenceInfo; + + operator StdVideoDecodeAV1ReferenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1ReferenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1ReferenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoDecodeAV1ReferenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( DecodeAV1ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( frame_type == rhs.frame_type ) && ( RefFrameSignBias == rhs.RefFrameSignBias ) && ( OrderHint == rhs.OrderHint ) && + ( SavedOrderHints == rhs.SavedOrderHints ); + } + + bool operator!=( DecodeAV1ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::DecodeAV1ReferenceInfoFlags flags = {}; + uint8_t frame_type = {}; + uint8_t RefFrameSignBias = {}; + uint8_t OrderHint = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D SavedOrderHints = {}; + }; +#endif + +#if defined( VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ ) + //=== vulkan_video_codec_av1std_encode === + + struct EncodeAV1DecoderModelInfo + { + using NativeType = StdVideoEncodeAV1DecoderModelInfo; + + operator StdVideoEncodeAV1DecoderModelInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1DecoderModelInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1DecoderModelInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1DecoderModelInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1DecoderModelInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( buffer_delay_length_minus_1 == rhs.buffer_delay_length_minus_1 ) && + ( buffer_removal_time_length_minus_1 == rhs.buffer_removal_time_length_minus_1 ) && + ( frame_presentation_time_length_minus_1 == rhs.frame_presentation_time_length_minus_1 ) && ( reserved1 == rhs.reserved1 ) && + ( num_units_in_decoding_tick == rhs.num_units_in_decoding_tick ); + } + + bool operator!=( EncodeAV1DecoderModelInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint8_t buffer_delay_length_minus_1 = {}; + uint8_t buffer_removal_time_length_minus_1 = {}; + uint8_t frame_presentation_time_length_minus_1 = {}; + uint8_t reserved1 = {}; + uint32_t num_units_in_decoding_tick = {}; + }; + + struct EncodeAV1ExtensionHeader + { + using NativeType = StdVideoEncodeAV1ExtensionHeader; + + operator StdVideoEncodeAV1ExtensionHeader const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ExtensionHeader &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ExtensionHeader const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ExtensionHeader *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1ExtensionHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( temporal_id == rhs.temporal_id ) && ( spatial_id == rhs.spatial_id ); + } + + bool operator!=( EncodeAV1ExtensionHeader const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint8_t temporal_id = {}; + uint8_t spatial_id = {}; + }; + + struct EncodeAV1OperatingPointInfoFlags + { + using NativeType = StdVideoEncodeAV1OperatingPointInfoFlags; + + operator StdVideoEncodeAV1OperatingPointInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1OperatingPointInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1OperatingPointInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1OperatingPointInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1OperatingPointInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( decoder_model_present_for_this_op == rhs.decoder_model_present_for_this_op ) && ( low_delay_mode_flag == rhs.low_delay_mode_flag ) && + ( initial_display_delay_present_for_this_op == rhs.initial_display_delay_present_for_this_op ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeAV1OperatingPointInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t decoder_model_present_for_this_op : 1; + uint32_t low_delay_mode_flag : 1; + uint32_t initial_display_delay_present_for_this_op : 1; + uint32_t reserved : 29; + }; + + struct EncodeAV1OperatingPointInfo + { + using NativeType = StdVideoEncodeAV1OperatingPointInfo; + + operator StdVideoEncodeAV1OperatingPointInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1OperatingPointInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1OperatingPointInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1OperatingPointInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1OperatingPointInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( operating_point_idc == rhs.operating_point_idc ) && ( seq_level_idx == rhs.seq_level_idx ) && + ( seq_tier == rhs.seq_tier ) && ( decoder_buffer_delay == rhs.decoder_buffer_delay ) && ( encoder_buffer_delay == rhs.encoder_buffer_delay ) && + ( initial_display_delay_minus_1 == rhs.initial_display_delay_minus_1 ); + } + + bool operator!=( EncodeAV1OperatingPointInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1OperatingPointInfoFlags flags = {}; + uint16_t operating_point_idc = {}; + uint8_t seq_level_idx = {}; + uint8_t seq_tier = {}; + uint32_t decoder_buffer_delay = {}; + uint32_t encoder_buffer_delay = {}; + uint8_t initial_display_delay_minus_1 = {}; + }; + + struct EncodeAV1PictureInfoFlags + { + using NativeType = StdVideoEncodeAV1PictureInfoFlags; + + operator StdVideoEncodeAV1PictureInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1PictureInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1PictureInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1PictureInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( error_resilient_mode == rhs.error_resilient_mode ) && ( disable_cdf_update == rhs.disable_cdf_update ) && + ( use_superres == rhs.use_superres ) && ( render_and_frame_size_different == rhs.render_and_frame_size_different ) && + ( allow_screen_content_tools == rhs.allow_screen_content_tools ) && ( is_filter_switchable == rhs.is_filter_switchable ) && + ( force_integer_mv == rhs.force_integer_mv ) && ( frame_size_override_flag == rhs.frame_size_override_flag ) && + ( buffer_removal_time_present_flag == rhs.buffer_removal_time_present_flag ) && ( allow_intrabc == rhs.allow_intrabc ) && + ( frame_refs_short_signaling == rhs.frame_refs_short_signaling ) && ( allow_high_precision_mv == rhs.allow_high_precision_mv ) && + ( is_motion_mode_switchable == rhs.is_motion_mode_switchable ) && ( use_ref_frame_mvs == rhs.use_ref_frame_mvs ) && + ( disable_frame_end_update_cdf == rhs.disable_frame_end_update_cdf ) && ( allow_warped_motion == rhs.allow_warped_motion ) && + ( reduced_tx_set == rhs.reduced_tx_set ) && ( skip_mode_present == rhs.skip_mode_present ) && ( delta_q_present == rhs.delta_q_present ) && + ( delta_lf_present == rhs.delta_lf_present ) && ( delta_lf_multi == rhs.delta_lf_multi ) && + ( segmentation_enabled == rhs.segmentation_enabled ) && ( segmentation_update_map == rhs.segmentation_update_map ) && + ( segmentation_temporal_update == rhs.segmentation_temporal_update ) && ( segmentation_update_data == rhs.segmentation_update_data ) && + ( UsesLr == rhs.UsesLr ) && ( usesChromaLr == rhs.usesChromaLr ) && ( show_frame == rhs.show_frame ) && + ( showable_frame == rhs.showable_frame ) && ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeAV1PictureInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t show_frame : 1; + uint32_t showable_frame : 1; + uint32_t reserved : 3; + }; + + struct EncodeAV1PictureInfo + { + using NativeType = StdVideoEncodeAV1PictureInfo; + + operator StdVideoEncodeAV1PictureInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1PictureInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1PictureInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1PictureInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( frame_type == rhs.frame_type ) && ( frame_presentation_time == rhs.frame_presentation_time ) && + ( current_frame_id == rhs.current_frame_id ) && ( order_hint == rhs.order_hint ) && ( primary_ref_frame == rhs.primary_ref_frame ) && + ( refresh_frame_flags == rhs.refresh_frame_flags ) && ( coded_denom == rhs.coded_denom ) && + ( render_width_minus_1 == rhs.render_width_minus_1 ) && ( render_height_minus_1 == rhs.render_height_minus_1 ) && + ( interpolation_filter == rhs.interpolation_filter ) && ( TxMode == rhs.TxMode ) && ( delta_q_res == rhs.delta_q_res ) && + ( delta_lf_res == rhs.delta_lf_res ) && ( ref_order_hint == rhs.ref_order_hint ) && ( ref_frame_idx == rhs.ref_frame_idx ) && + ( reserved1 == rhs.reserved1 ) && ( delta_frame_id_minus_1 == rhs.delta_frame_id_minus_1 ) && ( pTileInfo == rhs.pTileInfo ) && + ( pQuantization == rhs.pQuantization ) && ( pSegmentation == rhs.pSegmentation ) && ( pLoopFilter == rhs.pLoopFilter ) && + ( pCDEF == rhs.pCDEF ) && ( pLoopRestoration == rhs.pLoopRestoration ) && ( pGlobalMotion == rhs.pGlobalMotion ) && + ( pExtensionHeader == rhs.pExtensionHeader ) && ( pBufferRemovalTimes == rhs.pBufferRemovalTimes ); + } + + bool operator!=( EncodeAV1PictureInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1PictureInfoFlags flags = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType frame_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType::eKey; + uint32_t frame_presentation_time = {}; + uint32_t current_frame_id = {}; + uint8_t order_hint = {}; + uint8_t primary_ref_frame = {}; + uint8_t refresh_frame_flags = {}; + uint8_t coded_denom = {}; + uint16_t render_width_minus_1 = {}; + uint16_t render_height_minus_1 = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1InterpolationFilter interpolation_filter = + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1InterpolationFilter::eEighttap; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TxMode TxMode = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TxMode::eOnly4X4; + uint8_t delta_q_res = {}; + uint8_t delta_lf_res = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ref_order_hint = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D ref_frame_idx = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D delta_frame_id_minus_1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1TileInfo * pTileInfo = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Quantization * pQuantization = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1Segmentation * pSegmentation = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopFilter * pLoopFilter = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1CDEF * pCDEF = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1LoopRestoration * pLoopRestoration = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1GlobalMotion * pGlobalMotion = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ExtensionHeader * pExtensionHeader = {}; + const uint32_t * pBufferRemovalTimes = {}; + }; + + struct EncodeAV1ReferenceInfoFlags + { + using NativeType = StdVideoEncodeAV1ReferenceInfoFlags; + + operator StdVideoEncodeAV1ReferenceInfoFlags const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ReferenceInfoFlags &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ReferenceInfoFlags const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ReferenceInfoFlags *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( disable_frame_end_update_cdf == rhs.disable_frame_end_update_cdf ) && ( segmentation_enabled == rhs.segmentation_enabled ) && + ( reserved == rhs.reserved ); + } + + bool operator!=( EncodeAV1ReferenceInfoFlags const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; + }; + + struct EncodeAV1ReferenceInfo + { + using NativeType = StdVideoEncodeAV1ReferenceInfo; + + operator StdVideoEncodeAV1ReferenceInfo const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ReferenceInfo &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ReferenceInfo const *() const VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + operator StdVideoEncodeAV1ReferenceInfo *() VULKAN_HPP_NOEXCEPT + { + return reinterpret_cast( this ); + } + + bool operator==( EncodeAV1ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ( flags == rhs.flags ) && ( RefFrameId == rhs.RefFrameId ) && ( frame_type == rhs.frame_type ) && ( OrderHint == rhs.OrderHint ) && + ( reserved1 == rhs.reserved1 ) && ( pExtensionHeader == rhs.pExtensionHeader ); + } + + bool operator!=( EncodeAV1ReferenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } + + public: + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ReferenceInfoFlags flags = {}; + uint32_t RefFrameId = {}; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType frame_type = VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::AV1FrameType::eKey; + uint8_t OrderHint = {}; + VULKAN_HPP_NAMESPACE::ArrayWrapper1D reserved1 = {}; + const VULKAN_HPP_NAMESPACE::VULKAN_HPP_VIDEO_NAMESPACE::EncodeAV1ExtensionHeader * pExtensionHeader = {}; + }; +#endif + + } // namespace VULKAN_HPP_VIDEO_NAMESPACE +} // namespace VULKAN_HPP_NAMESPACE +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_wayland.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_wayland.h new file mode 100644 index 0000000000..3172badb20 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_wayland.h @@ -0,0 +1,59 @@ +#ifndef VULKAN_WAYLAND_H_ +#define VULKAN_WAYLAND_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_KHR_wayland_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_wayland_surface 1 +#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6 +#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface" +typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; +typedef struct VkWaylandSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkWaylandSurfaceCreateFlagsKHR flags; + struct wl_display* display; + struct wl_surface* surface; +} VkWaylandSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( + VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display* display); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_win32.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_win32.h new file mode 100644 index 0000000000..beee808fba --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_win32.h @@ -0,0 +1,372 @@ +#ifndef VULKAN_WIN32_H_ +#define VULKAN_WIN32_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_KHR_win32_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_win32_surface 1 +#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6 +#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface" +typedef VkFlags VkWin32SurfaceCreateFlagsKHR; +typedef struct VkWin32SurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkWin32SurfaceCreateFlagsKHR flags; + HINSTANCE hinstance; + HWND hwnd; +} VkWin32SurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( + VkInstance instance, + const VkWin32SurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex); +#endif +#endif + + +// VK_KHR_external_memory_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_memory_win32 1 +#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32" +typedef struct VkImportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportMemoryWin32HandleInfoKHR; + +typedef struct VkExportMemoryWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportMemoryWin32HandleInfoKHR; + +typedef struct VkMemoryWin32HandlePropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryWin32HandlePropertiesKHR; + +typedef struct VkMemoryGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetWin32HandleInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( + VkDevice device, + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); +#endif +#endif + + +// VK_KHR_win32_keyed_mutex is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_win32_keyed_mutex 1 +#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1 +#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex" +typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t acquireCount; + const VkDeviceMemory* pAcquireSyncs; + const uint64_t* pAcquireKeys; + const uint32_t* pAcquireTimeouts; + uint32_t releaseCount; + const VkDeviceMemory* pReleaseSyncs; + const uint64_t* pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoKHR; + + + +// VK_KHR_external_semaphore_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_semaphore_win32 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32" +typedef struct VkImportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkSemaphoreImportFlags flags; + VkExternalSemaphoreHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportSemaphoreWin32HandleInfoKHR; + +typedef struct VkExportSemaphoreWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportSemaphoreWin32HandleInfoKHR; + +typedef struct VkD3D12FenceSubmitInfoKHR { + VkStructureType sType; + const void* pNext; + uint32_t waitSemaphoreValuesCount; + const uint64_t* pWaitSemaphoreValues; + uint32_t signalSemaphoreValuesCount; + const uint64_t* pSignalSemaphoreValues; +} VkD3D12FenceSubmitInfoKHR; + +typedef struct VkSemaphoreGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkSemaphore semaphore; + VkExternalSemaphoreHandleTypeFlagBits handleType; +} VkSemaphoreGetWin32HandleInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( + VkDevice device, + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( + VkDevice device, + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif +#endif + + +// VK_KHR_external_fence_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_external_fence_win32 1 +#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1 +#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32" +typedef struct VkImportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkFenceImportFlags flags; + VkExternalFenceHandleTypeFlagBits handleType; + HANDLE handle; + LPCWSTR name; +} VkImportFenceWin32HandleInfoKHR; + +typedef struct VkExportFenceWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; + LPCWSTR name; +} VkExportFenceWin32HandleInfoKHR; + +typedef struct VkFenceGetWin32HandleInfoKHR { + VkStructureType sType; + const void* pNext; + VkFence fence; + VkExternalFenceHandleTypeFlagBits handleType; +} VkFenceGetWin32HandleInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); +typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( + VkDevice device, + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( + VkDevice device, + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle); +#endif +#endif + + +// VK_NV_external_memory_win32 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_memory_win32 1 +#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32" +typedef struct VkImportMemoryWin32HandleInfoNV { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagsNV handleType; + HANDLE handle; +} VkImportMemoryWin32HandleInfoNV; + +typedef struct VkExportMemoryWin32HandleInfoNV { + VkStructureType sType; + const void* pNext; + const SECURITY_ATTRIBUTES* pAttributes; + DWORD dwAccess; +} VkExportMemoryWin32HandleInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( + VkDevice device, + VkDeviceMemory memory, + VkExternalMemoryHandleTypeFlagsNV handleType, + HANDLE* pHandle); +#endif +#endif + + +// VK_NV_win32_keyed_mutex is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_win32_keyed_mutex 1 +#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2 +#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex" +typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t acquireCount; + const VkDeviceMemory* pAcquireSyncs; + const uint64_t* pAcquireKeys; + const uint32_t* pAcquireTimeoutMilliseconds; + uint32_t releaseCount; + const VkDeviceMemory* pReleaseSyncs; + const uint64_t* pReleaseKeys; +} VkWin32KeyedMutexAcquireReleaseInfoNV; + + + +// VK_EXT_full_screen_exclusive is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_full_screen_exclusive 1 +#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4 +#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive" + +typedef enum VkFullScreenExclusiveEXT { + VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0, + VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1, + VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2, + VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3, + VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF +} VkFullScreenExclusiveEXT; +typedef struct VkSurfaceFullScreenExclusiveInfoEXT { + VkStructureType sType; + void* pNext; + VkFullScreenExclusiveEXT fullScreenExclusive; +} VkSurfaceFullScreenExclusiveInfoEXT; + +typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT { + VkStructureType sType; + void* pNext; + VkBool32 fullScreenExclusiveSupported; +} VkSurfaceCapabilitiesFullScreenExclusiveEXT; + +typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT { + VkStructureType sType; + const void* pNext; + HMONITOR hmonitor; +} VkSurfaceFullScreenExclusiveWin32InfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); +typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); +typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); +typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes); +#endif +#endif + + +// VK_NV_acquire_winrt_display is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_acquire_winrt_display 1 +#define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1 +#define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display" +typedef VkResult (VKAPI_PTR *PFN_vkAcquireWinrtDisplayNV)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); +typedef VkResult (VKAPI_PTR *PFN_vkGetWinrtDisplayNV)(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + uint32_t deviceRelativeId, + VkDisplayKHR* pDisplay); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xcb.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xcb.h new file mode 100644 index 0000000000..e6acb9c300 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xcb.h @@ -0,0 +1,60 @@ +#ifndef VULKAN_XCB_H_ +#define VULKAN_XCB_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_KHR_xcb_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_xcb_surface 1 +#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 +#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface" +typedef VkFlags VkXcbSurfaceCreateFlagsKHR; +typedef struct VkXcbSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkXcbSurfaceCreateFlagsKHR flags; + xcb_connection_t* connection; + xcb_window_t window; +} VkXcbSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( + VkInstance instance, + const VkXcbSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t* connection, + xcb_visualid_t visual_id); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib.h new file mode 100644 index 0000000000..e2593fc7bf --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib.h @@ -0,0 +1,60 @@ +#ifndef VULKAN_XLIB_H_ +#define VULKAN_XLIB_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_KHR_xlib_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_xlib_surface 1 +#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 +#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface" +typedef VkFlags VkXlibSurfaceCreateFlagsKHR; +typedef struct VkXlibSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkXlibSurfaceCreateFlagsKHR flags; + Display* dpy; + Window window; +} VkXlibSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( + VkInstance instance, + const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib_xrandr.h b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib_xrandr.h new file mode 100644 index 0000000000..88b643f7d3 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/include/vulkan/vulkan_xlib_xrandr.h @@ -0,0 +1,50 @@ +#ifndef VULKAN_XLIB_XRANDR_H_ +#define VULKAN_XLIB_XRANDR_H_ 1 + +/* +** Copyright 2015-2025 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 + + + +// VK_EXT_acquire_xlib_display is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_acquire_xlib_display 1 +#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1 +#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display" +typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display); +typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay); + +#ifndef VK_NO_PROTOTYPES +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( + VkPhysicalDevice physicalDevice, + Display* dpy, + VkDisplayKHR display); +#endif + +#ifndef VK_ONLY_EXPORTED_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( + VkPhysicalDevice physicalDevice, + Display* dpy, + RROutput rrOutput, + VkDisplayKHR* pDisplay); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-headers/source/registry/apiconventions.py b/local/recipes/libs/vulkan-headers/source/registry/apiconventions.py new file mode 100644 index 0000000000..da734fa308 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/apiconventions.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2021-2025 The Khronos Group Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Generic alias for working group-specific API conventions interface. + +# This import should be changed at the repository / working group level to +# specify the correct API's conventions. + + +import os + +defaultAPI = 'vulkan' + +VulkanAPI = os.getenv('VULKAN_API', default=defaultAPI) + +if VulkanAPI == 'vulkansc': + from vkconventions import VulkanSCConventions as APIConventions +else: + from vkconventions import VulkanConventions as APIConventions diff --git a/local/recipes/libs/vulkan-headers/source/registry/base_generator.py b/local/recipes/libs/vulkan-headers/source/registry/base_generator.py new file mode 100644 index 0000000000..b14a165a14 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/base_generator.py @@ -0,0 +1,977 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2023-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +import pickle +import os +import tempfile +from vulkan_object import (VulkanObject, + Extension, Version, Deprecate, Handle, Param, Queues, CommandScope, Command, + EnumField, Enum, Flag, Bitmask, ExternSync, Flags, Member, Struct, + Constant, FormatComponent, FormatPlane, Format, + SyncSupport, SyncEquivalent, SyncStage, SyncAccess, SyncPipelineStage, SyncPipeline, + SpirvEnables, Spirv) + +# These live in the Vulkan-Docs repo, but are pulled in via the +# Vulkan-Headers/registry folder +from generator import OutputGenerator, GeneratorOptions, write +from vkconventions import VulkanConventions + +# An API style convention object +vulkanConventions = VulkanConventions() + +# Helpers to keep things cleaner +def splitIfGet(elem, name): + return elem.get(name).split(',') if elem.get(name) is not None and elem.get(name) != '' else None + +def textIfFind(elem, name): + return elem.find(name).text if elem.find(name) is not None else None + +def intIfGet(elem, name): + return None if elem.get(name) is None else int(elem.get(name), 0) + +def boolGet(elem, name) -> bool: + return elem.get(name) is not None and elem.get(name) == "true" + +def externSyncGet(elem): + value = elem.get('externsync') + if value is None: + return (ExternSync.NONE, None) + if value == 'true': + return (ExternSync.ALWAYS, None) + if value == 'maybe': + return (ExternSync.MAYBE, None) + + # There are no cases where multiple members of the param are marked as + # externsync. Supporting that with maybe: requires more than + # ExternSync.SUBTYPE_MAYBE (which is only one bit of information), which is + # not currently done as there are no users. + # + # If this assert is hit, please consider simplifying the design such that + # externsync can move to the struct itself and so external synchronization + # requirements do not depend on the context. + assert ',' not in value + + if value.startswith('maybe:'): + return (ExternSync.SUBTYPE_MAYBE, value.removeprefix('maybe:')) + return (ExternSync.SUBTYPE, value) + + +def getQueues(elem) -> Queues: + queues = 0 + queues_list = splitIfGet(elem, 'queues') + if queues_list is not None: + queues |= Queues.TRANSFER if 'transfer' in queues_list else 0 + queues |= Queues.GRAPHICS if 'graphics' in queues_list else 0 + queues |= Queues.COMPUTE if 'compute' in queues_list else 0 + queues |= Queues.PROTECTED if 'protected' in queues_list else 0 + queues |= Queues.SPARSE_BINDING if 'sparse_binding' in queues_list else 0 + queues |= Queues.OPTICAL_FLOW if 'opticalflow' in queues_list else 0 + queues |= Queues.DECODE if 'decode' in queues_list else 0 + queues |= Queues.ENCODE if 'encode' in queues_list else 0 + queues |= Queues.DATA_GRAPH if 'data_graph' in queues_list else 0 + return queues + +# Shared object used by Sync elements that do not have ones +maxSyncSupport = SyncSupport(None, None, True) +maxSyncEquivalent = SyncEquivalent(None, None, True) + +# Helpers to set GeneratorOptions options globally +def SetOutputFileName(fileName: str) -> None: + global globalFileName + globalFileName = fileName + +def SetOutputDirectory(directory: str) -> None: + global globalDirectory + globalDirectory = directory + +def SetTargetApiName(apiname: str) -> None: + global globalApiName + globalApiName = apiname + +def SetMergedApiNames(names: str) -> None: + global mergedApiNames + mergedApiNames = names + +cachingEnabled = False +def EnableCaching() -> None: + global cachingEnabled + cachingEnabled = True + +# This class is a container for any source code, data, or other behavior that is necessary to +# customize the generator script for a specific target API variant (e.g. Vulkan SC). As such, +# all of these API-specific interfaces and their use in the generator script are part of the +# contract between this repository and its downstream users. Changing or removing any of these +# interfaces or their use in the generator script will have downstream effects and thus +# should be avoided unless absolutely necessary. +class APISpecific: + # Version object factory method + @staticmethod + def createApiVersion(targetApiName: str, name: str) -> Version: + match targetApiName: + + # Vulkan SC specific API version creation + case 'vulkansc': + nameApi = name.replace('VK_', 'VK_API_') + nameApi = nameApi.replace('VKSC_', 'VKSC_API_') + nameString = f'"{name}"' + return Version(name, nameString, nameApi) + + # Vulkan specific API version creation + case 'vulkan': + nameApi = name.replace('VK_', 'VK_API_') + nameString = f'"{name}"' + return Version(name, nameString, nameApi) + + # TODO - Currently genType in reg.py does not provide a good way to get this string to apply the C-macro + # We do our best to emulate the answer here the way the spec/headers will with goal to have a proper fix before these assumptions break + @staticmethod + def createHeaderVersion(targetApiName: str, vk: VulkanObject) -> str: + match targetApiName: + case 'vulkan': + major_version = 1 + minor_version = 4 + case 'vulkansc': + major_version = 1 + minor_version = 0 + return f'{major_version}.{minor_version}.{vk.headerVersion}' + + +# This Generator Option is used across all generators. +# After years of use, it has shown that most the options are unified across each generator (file) +# as it is easier to modify things per-file that need the difference +class BaseGeneratorOptions(GeneratorOptions): + def __init__(self, + customFileName = None, + customDirectory = None, + customApiName = None): + GeneratorOptions.__init__(self, + conventions = vulkanConventions, + filename = customFileName if customFileName else globalFileName, + directory = customDirectory if customDirectory else globalDirectory, + apiname = customApiName if customApiName else globalApiName, + mergeApiNames = mergedApiNames, + defaultExtensions = customApiName if customApiName else globalApiName, + emitExtensions = '.*', + emitSpirv = '.*', + emitFormats = '.*') + # These are used by the generator.py script + self.apicall = 'VKAPI_ATTR ' + self.apientry = 'VKAPI_CALL ' + self.apientryp = 'VKAPI_PTR *' + self.alignFuncParam = 48 + +# +# This object handles all the parsing from reg.py generator scripts in the Vulkan-Headers +# It will grab all the data and form it into a single object the rest of the generators will use +class BaseGenerator(OutputGenerator): + def __init__(self): + OutputGenerator.__init__(self, None, None, None) + self.vk = VulkanObject() + self.targetApiName = globalApiName + + # reg.py has a `self.featureName` but this is nicer because + # it will be either the Version or Extension object + self.currentExtension = None + self.currentVersion = None + + # We need to flag extensions that we ignore because they are disabled or not + # supported in the target API(s) + self.unsupportedExtension = False + + # Will map alias to promoted name + # ex. ['VK_FILTER_CUBIC_IMG' : 'VK_FILTER_CUBIC_EXT'] + # When generating any code, there is no reason so use the old name + self.enumAliasMap = dict() + self.enumFieldAliasMap = dict() + self.bitmaskAliasMap = dict() + self.flagAliasMap = dict() + self.flagsAliasMap = dict() + self.structAliasMap = dict() + self.handleAliasMap = dict() + + # We track all enum constants and flag bits so that we can apply their aliases in the end + self.enumFieldMap: dict[str, EnumField] = dict() + self.flagMap: dict[str, Flag] = dict() + + # De-aliases a definition name based on the specified alias map. + # There are aliases of aliases. + # e.g. VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR aliases + # VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR which itself aliases + # But it is also common for EXT types promoted to KHR then to core. + # We should not make assumptions about the nesting level of aliases, instead we resolve any + # level of alias aliasing. + def dealias(self, name: str, aliasMap: dict): + while name in aliasMap: + name = aliasMap[name] + return name + + def write(self, data): + # Prevents having to check before writing + if data is not None and data != "": + write(data, file=self.outFile) + + def beginFile(self, genOpts): + OutputGenerator.beginFile(self, genOpts) + self.filename = genOpts.filename + + # No gen*() command to get these, so do it manually + for platform in self.registry.tree.findall('platforms/platform'): + self.vk.platforms[platform.get('name')] = platform.get('protect') + + for tags in self.registry.tree.findall('tags'): + for tag in tags.findall('tag'): + self.vk.vendorTags.append(tag.get('name')) + + # No way known to get this from the XML + self.vk.queueBits[Queues.TRANSFER] = 'VK_QUEUE_TRANSFER_BIT' + self.vk.queueBits[Queues.GRAPHICS] = 'VK_QUEUE_GRAPHICS_BIT' + self.vk.queueBits[Queues.COMPUTE] = 'VK_QUEUE_COMPUTE_BIT' + self.vk.queueBits[Queues.PROTECTED] = 'VK_QUEUE_PROTECTED_BIT' + self.vk.queueBits[Queues.SPARSE_BINDING] = 'VK_QUEUE_SPARSE_BINDING_BIT' + self.vk.queueBits[Queues.OPTICAL_FLOW] = 'VK_QUEUE_OPTICAL_FLOW_BIT_NV' + self.vk.queueBits[Queues.DECODE] = 'VK_QUEUE_VIDEO_DECODE_BIT_KHR' + self.vk.queueBits[Queues.ENCODE] = 'VK_QUEUE_VIDEO_ENCODE_BIT_KHR' + + # This function should be overloaded + def generate(self): + print("WARNING: This should not be called from the child class") + return + + # This function is dense, it does all the magic to set the right extensions dependencies! + # + # The issue is if 2 extension expose a command, genCmd() will only + # show one of the extension, at endFile() we can finally go through + # and update which things depend on which extensions + # + # self.featureDictionary is built for use in the reg.py framework + # Details found in Vulkan-Docs/scripts/scriptgenerator.py + def applyExtensionDependency(self): + for extension in self.vk.extensions.values(): + # dict.key() can be None, so need to double loop + dict = self.featureDictionary[extension.name]['command'] + + # "required" == None + # or + # an additional feature dependency, which is a boolean expression of + # one or more extension and/or core version names + for required in dict: + for commandName in dict[required]: + # Skip commands removed in the target API + # This check is needed because parts of the base generator code bypass the + # dependency resolution logic in the registry tooling and thus the generator + # may attempt to generate code for commands which are not supported in the + # target API variant, thus this check needs to happen even if any specific + # target API variant may not specifically need it + if not commandName in self.vk.commands: + continue + + command = self.vk.commands[commandName] + # Make sure list is unique + command.extensions.extend([extension.name] if extension.name not in command.extensions else []) + extension.commands.extend([command] if command not in extension.commands else []) + + # While genGroup() will call twice with aliased value, it does not provide all the information we need + dict = self.featureDictionary[extension.name]['enumconstant'] + for required in dict: + # group can be a Enum or Bitmask + for group in dict[required]: + if group in self.vk.handles: + handle = self.vk.handles[group] + # Make sure list is unique + handle.extensions.extend([extension.name] if extension.name not in handle.extensions else []) + extension.handles[group].extend([handle] if handle not in extension.handles[group] else []) + if group in self.vk.enums: + if group not in extension.enumFields: + extension.enumFields[group] = [] # Dict needs init + enum = self.vk.enums[group] + # Need to convert all alias so they match what is in EnumField + enumList = list(map(lambda x: x if x not in self.enumFieldAliasMap else self.dealias(x, self.enumFieldAliasMap), dict[required][group])) + + for enumField in [x for x in enum.fields if x.name in enumList]: + # Make sure list is unique + enum.fieldExtensions.extend([extension.name] if extension.name not in enum.fieldExtensions else []) + enumField.extensions.extend([extension.name] if extension.name not in enumField.extensions else []) + extension.enumFields[group].extend([enumField] if enumField not in extension.enumFields[group] else []) + if group in self.vk.bitmasks: + if group not in extension.flagBits: + extension.flagBits[group] = [] # Dict needs init + bitmask = self.vk.bitmasks[group] + # Need to convert all alias so they match what is in Flags + flagList = list(map(lambda x: x if x not in self.flagAliasMap else self.dealias(x, self.flagAliasMap), dict[required][group])) + + for flags in [x for x in bitmask.flags if x.name in flagList]: + # Make sure list is unique + bitmask.flagExtensions.extend([extension.name] if extension.name not in bitmask.flagExtensions else []) + flags.extensions.extend([extension.name] if extension.name not in flags.extensions else []) + extension.flagBits[group].extend([flags] if flags not in extension.flagBits[group] else []) + if group in self.vk.flags: + flags = self.vk.flags[group] + # Make sure list is unique + flags.extensions.extend([extension.name] if extension.name not in flags.extensions else []) + extension.flags.extend([flags] if flags not in extension.flags[group] else []) + + # Need to do 'enum'/'bitmask' after 'enumconstant' has applied everything so we can add implicit extensions + # + # Sometimes two extensions enable an Enum, but the newer extension version has extra flags allowed + # This information seems to be implicit, so need to update it here + # Go through each Flag and append the Enum extension to it + # + # ex. VkAccelerationStructureTypeKHR where GENERIC_KHR is not allowed with just VK_NV_ray_tracing + # This only works because the values are aliased as well, making the KHR a superset enum + for extension in self.vk.extensions.values(): + dict = self.featureDictionary[extension.name]['enum'] + for required in dict: + for group in dict[required]: + for enumName in dict[required][group]: + isAlias = enumName in self.enumAliasMap + enumName = self.dealias(enumName, self.enumAliasMap) + if enumName in self.vk.enums: + enum = self.vk.enums[enumName] + enum.extensions.extend([extension.name] if extension.name not in enum.extensions else []) + extension.enums.extend([enum] if enum not in extension.enums else []) + # Update fields with implicit base extension + if isAlias: + continue + enum.fieldExtensions.extend([extension.name] if extension.name not in enum.fieldExtensions else []) + for enumField in [x for x in enum.fields if (not x.extensions or (x.extensions and all(e in enum.extensions for e in x.extensions)))]: + enumField.extensions.extend([extension.name] if extension.name not in enumField.extensions else []) + if enumName not in extension.enumFields: + extension.enumFields[enumName] = [] # Dict needs init + extension.enumFields[enumName].extend([enumField] if enumField not in extension.enumFields[enumName] else []) + + dict = self.featureDictionary[extension.name]['bitmask'] + for required in dict: + for group in dict[required]: + for bitmaskName in dict[required][group]: + bitmaskName = bitmaskName.replace('Flags', 'FlagBits') # Works since Flags is not repeated in name + isAlias = bitmaskName in self.bitmaskAliasMap + bitmaskName = self.dealias(bitmaskName, self.bitmaskAliasMap) + if bitmaskName in self.vk.bitmasks: + bitmask = self.vk.bitmasks[bitmaskName] + bitmask.extensions.extend([extension.name] if extension.name not in bitmask.extensions else []) + extension.bitmasks.extend([bitmask] if bitmask not in extension.bitmasks else []) + # Update flags with implicit base extension + if isAlias: + continue + bitmask.flagExtensions.extend([extension.name] if extension.name not in bitmask.flagExtensions else []) + for flag in [x for x in bitmask.flags if (not x.extensions or (x.extensions and all(e in bitmask.extensions for e in x.extensions)))]: + flag.extensions.extend([extension.name] if extension.name not in flag.extensions else []) + if bitmaskName not in extension.flagBits: + extension.flagBits[bitmaskName] = [] # Dict needs init + extension.flagBits[bitmaskName].extend([flag] if flag not in extension.flagBits[bitmaskName] else []) + + # Some structs (ex VkAttachmentSampleCountInfoAMD) can have multiple alias pointing to same extension + for extension in self.vk.extensions.values(): + dict = self.featureDictionary[extension.name]['struct'] + for required in dict: + for group in dict[required]: + for structName in dict[required][group]: + isAlias = structName in self.structAliasMap + structName = self.dealias(structName, self.structAliasMap) + if structName in self.vk.structs: + struct = self.vk.structs[structName] + struct.extensions.extend([extension.name] if extension.name not in struct.extensions else []) + + # While we update struct alias inside other structs, the command itself might have the struct as a first level param. + # We use this time to update params to have the promoted name + # Example - https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/9322 + # TODO: It is unclear why only structs need dealiasing here, but not other types, so this probably needs revisiting + for command in self.vk.commands.values(): + for member in command.params: + if member.type in self.structAliasMap: + member.type = self.dealias(member.type, self.structAliasMap) + # Replace string with Version class now we have all version created + if command.deprecate and command.deprecate.version: + command.deprecate.version = self.vk.versions[command.deprecate.version] + + # Could build up a reverse lookup map, but since these are not too large of list, just do here + # (Need to be done after we have found all the aliases) + for key, value in self.structAliasMap.items(): + self.vk.structs[self.dealias(value, self.structAliasMap)].aliases.append(key) + for key, value in self.enumFieldAliasMap.items(): + self.enumFieldMap[self.dealias(value, self.enumFieldAliasMap)].aliases.append(key) + for key, value in self.enumAliasMap.items(): + self.vk.enums[self.dealias(value, self.enumAliasMap)].aliases.append(key) + for key, value in self.flagAliasMap.items(): + self.flagMap[self.dealias(value, self.flagAliasMap)].aliases.append(key) + for key, value in self.bitmaskAliasMap.items(): + self.vk.bitmasks[self.dealias(value, self.bitmaskAliasMap)].aliases.append(key) + for key, value in self.flagsAliasMap.items(): + self.vk.flags[self.dealias(value, self.flagsAliasMap)].aliases.append(key) + for key, value in self.handleAliasMap.items(): + self.vk.handles[self.dealias(value, self.handleAliasMap)].aliases.append(key) + + + def addConstants(self): + for constantName in [k for k,v in self.registry.enumvaluedict.items() if v == 'API Constants']: + enumInfo = self.registry.enumdict[constantName] + typeName = enumInfo.type + valueStr = enumInfo.elem.get('value') + # These values are represented in c-style + if valueStr.upper().endswith('F'): + value = float(valueStr[:-1]) + elif valueStr.upper().endswith('U)'): + inner_number = int(valueStr.removeprefix("(~").removesuffix(")")[:-1]) + value = (~inner_number) & ((1 << 32) - 1) + elif valueStr.upper().endswith('ULL)'): + inner_number = int(valueStr.removeprefix("(~").removesuffix(")")[:-3]) + value = (~0) & ((1 << 64) - 1) + else: + value = int(valueStr) + self.vk.constants[constantName] = Constant(constantName, typeName, value, valueStr) + + def endFile(self): + # This is the point were reg.py has ran, everything is collected + # We do some post processing now + self.applyExtensionDependency() + + self.addConstants() + + self.vk.headerVersionComplete = APISpecific.createHeaderVersion(self.targetApiName, self.vk) + + # Use structs and commands to find which things are returnedOnly + for struct in [x for x in self.vk.structs.values() if not x.returnedOnly]: + for enum in [self.vk.enums[x.type] for x in struct.members if x.type in self.vk.enums]: + enum.returnedOnly = False + for bitmask in [self.vk.bitmasks[x.type] for x in struct.members if x.type in self.vk.bitmasks]: + bitmask.returnedOnly = False + for flags in [self.vk.flags[x.type] for x in struct.members if x.type in self.vk.flags]: + flags.returnedOnly = False + if flags.bitmaskName is not None: + self.vk.bitmasks[flags.bitmaskName].returnedOnly = False + for command in self.vk.commands.values(): + for enum in [self.vk.enums[x.type] for x in command.params if x.type in self.vk.enums]: + enum.returnedOnly = False + for bitmask in [self.vk.bitmasks[x.type] for x in command.params if x.type in self.vk.bitmasks]: + bitmask.returnedOnly = False + for flags in [self.vk.flags[x.type] for x in command.params if x.type in self.vk.flags]: + flags.returnedOnly = False + if flags.bitmaskName is not None: + self.vk.bitmasks[flags.bitmaskName].returnedOnly = False + + # Turn handle parents into pointers to classes + for handle in [x for x in self.vk.handles.values() if x.parent is not None]: + handle.parent = self.vk.handles[handle.parent] + # search up parent chain to see if instance or device + for handle in [x for x in self.vk.handles.values()]: + next_parent = handle.parent + while (not handle.instance and not handle.device): + handle.instance = next_parent.name == 'VkInstance' + handle.device = next_parent.name == 'VkDevice' + next_parent = next_parent.parent + + # This use to be Queues.ALL, but there is no real concept of "all" + # Found this just needs to be something non-None + maxSyncSupport.queues = Queues.TRANSFER + + maxSyncSupport.stages = self.vk.bitmasks['VkPipelineStageFlagBits2'].flags + maxSyncEquivalent.accesses = self.vk.bitmasks['VkAccessFlagBits2'].flags + maxSyncEquivalent.stages = self.vk.bitmasks['VkPipelineStageFlagBits2'].flags + + # All inherited generators should run from here + self.generate() + + if cachingEnabled: + cachePath = os.path.join(tempfile.gettempdir(), f'vkobject_{os.getpid()}') + if not os.path.isfile(cachePath): + cacheFile = open(cachePath, 'wb') + pickle.dump(self.vk, cacheFile) + cacheFile.close() + + # This should not have to do anything but call into OutputGenerator + OutputGenerator.endFile(self) + + # + # Bypass the entire processing and load in the VkObject data + # Still need to handle the beingFile/endFile for reg.py + def generateFromCache(self, cacheVkObjectData, genOpts): + OutputGenerator.beginFile(self, genOpts) + self.filename = genOpts.filename + self.vk = cacheVkObjectData + self.generate() + OutputGenerator.endFile(self) + + # + # Processing point at beginning of each extension definition + def beginFeature(self, interface, emit): + OutputGenerator.beginFeature(self, interface, emit) + platform = interface.get('platform') + self.featureExtraProtec = self.vk.platforms[platform] if platform in self.vk.platforms else None + protect = self.vk.platforms[platform] if platform in self.vk.platforms else None + name = interface.get('name') + + if interface.tag == 'extension': + # Generator scripts built on BaseGenerator do not handle the `supported` attribute of extensions + # therefore historically the `generate_source.py` in individual ecosystem components hacked the + # registry by removing non-applicable or disabled extensions from the loaded XML already before + # reg.py parsed it. That broke the general behavior of reg.py for certain use cases so we now + # filter extensions here instead (after parsing) in order to no longer need the filtering hack + # in downstream `generate_source.py` scripts. + enabledApiList = [ globalApiName ] + ([] if mergedApiNames is None else mergedApiNames.split(',')) + if (sup := interface.get('supported')) is not None and all(api not in sup.split(',') for api in enabledApiList): + self.unsupportedExtension = True + return + + instance = interface.get('type') == 'instance' + device = not instance + depends = interface.get('depends') + vendorTag = interface.get('author') + platform = interface.get('platform') + provisional = boolGet(interface, 'provisional') + promotedto = interface.get('promotedto') + deprecatedby = interface.get('deprecatedby') + obsoletedby = interface.get('obsoletedby') + specialuse = splitIfGet(interface, 'specialuse') + ratifiedApis = splitIfGet(interface, 'ratified') + ratified = True if ratifiedApis is not None and self.genOpts.apiname in ratifiedApis else False + + # Not sure if better way to get this info + specVersion = self.featureDictionary[name]['enumconstant'][None][None][0] + nameString = self.featureDictionary[name]['enumconstant'][None][None][1] + + self.currentExtension = Extension(name, nameString, specVersion, instance, device, depends, vendorTag, + platform, protect, provisional, promotedto, deprecatedby, + obsoletedby, specialuse, ratified) + self.vk.extensions[name] = self.currentExtension + else: # version + number = interface.get('number') + if number != '1.0': + self.currentVersion = APISpecific.createApiVersion(self.targetApiName, name) + self.vk.versions[name] = self.currentVersion + + def endFeature(self): + OutputGenerator.endFeature(self) + self.currentExtension = None + self.currentVersion = None + self.unsupportedExtension = False + + # + # All from XML + def genCmd(self, cmdinfo, name, alias): + OutputGenerator.genCmd(self, cmdinfo, name, alias) + + # Do not include APIs from unsupported extensions + if self.unsupportedExtension: + return + + params = [] + for param in cmdinfo.elem.findall('param'): + paramName = param.find('name').text + paramType = textIfFind(param, 'type') + paramAlias = param.get('alias') + + cdecl = self.makeCParamDecl(param, 0) + paramFullType = ' '.join(cdecl.split()[:-1]) + pointer = '*' in cdecl or paramType.startswith('PFN_') + paramConst = 'const' in cdecl + fixedSizeArray = [x[:-1] for x in cdecl.split('[') if x.endswith(']')] + + paramNoautovalidity = boolGet(param, 'noautovalidity') + + nullTerminated = False + length = param.get('altlen') if param.get('altlen') is not None else param.get('len') + if length: + # we will either find it like "null-terminated" or "enabledExtensionCount,null-terminated" + # This finds both + nullTerminated = 'null-terminated' in length + length = length.replace(',null-terminated', '') if 'null-terminated' in length else length + length = None if length == 'null-terminated' else length + + if fixedSizeArray and not length: + length = ','.join(fixedSizeArray) + + # See Member::optional code for details of this + optionalValues = splitIfGet(param, 'optional') + optional = optionalValues is not None and optionalValues[0].lower() == "true" + optionalPointer = optionalValues is not None and len(optionalValues) > 1 and optionalValues[1].lower() == "true" + + # externsync will be 'true', 'maybe', '' or 'maybe:' + (externSync, externSyncPointer) = externSyncGet(param) + + params.append(Param(paramName, paramAlias, paramType, paramFullType, paramNoautovalidity, + paramConst, length, nullTerminated, pointer, fixedSizeArray, + optional, optionalPointer, + externSync, externSyncPointer, cdecl)) + + attrib = cmdinfo.elem.attrib + alias = attrib.get('alias') + tasks = splitIfGet(attrib, 'tasks') + + queues = getQueues(attrib) + allowNoQueues = boolGet(attrib, 'allownoqueues') + successcodes = splitIfGet(attrib, 'successcodes') + errorcodes = splitIfGet(attrib, 'errorcodes') + cmdbufferlevel = attrib.get('cmdbufferlevel') + primary = cmdbufferlevel is not None and 'primary' in cmdbufferlevel + secondary = cmdbufferlevel is not None and 'secondary' in cmdbufferlevel + + renderpass = attrib.get('renderpass') + renderpass = CommandScope.NONE if renderpass is None else getattr(CommandScope, renderpass.upper()) + videocoding = attrib.get('videocoding') + videocoding = CommandScope.NONE if videocoding is None else getattr(CommandScope, videocoding.upper()) + + protoElem = cmdinfo.elem.find('proto') + returnType = textIfFind(protoElem, 'type') + + decls = self.makeCDecls(cmdinfo.elem) + cPrototype = decls[0] + cFunctionPointer = decls[1] + + deprecate = None + if cmdinfo.deprecatedlink: + deprecate = Deprecate(cmdinfo.deprecatedlink, + cmdinfo.deprecatedbyversion, # is just the string, will update to class later + cmdinfo.deprecatedbyextensions) + + protect = self.currentExtension.protect if self.currentExtension is not None else None + + # These coammds have no way from the XML to detect they would be an instance command + specialInstanceCommand = ['vkCreateInstance', 'vkEnumerateInstanceExtensionProperties','vkEnumerateInstanceLayerProperties', 'vkEnumerateInstanceVersion'] + instance = len(params) > 0 and (params[0].type == 'VkInstance' or params[0].type == 'VkPhysicalDevice' or name in specialInstanceCommand) + device = not instance + + implicitElem = cmdinfo.elem.find('implicitexternsyncparams') + implicitExternSyncParams = [x.text for x in implicitElem.findall('param')] if implicitElem else [] + + self.vk.commands[name] = Command(name, alias, protect, [], self.currentVersion, + returnType, params, instance, device, + tasks, queues, allowNoQueues, successcodes, errorcodes, + primary, secondary, renderpass, videocoding, + implicitExternSyncParams, deprecate, cPrototype, cFunctionPointer) + + # + # List the enum for the commands + # TODO - Seems empty groups like `VkDeviceDeviceMemoryReportCreateInfoEXT` do not show up in here + def genGroup(self, groupinfo, groupName, alias): + # Do not include APIs from unsupported extensions + if self.unsupportedExtension: + return + + # There can be case where the Enum/Bitmask is in a protect, but the individual + # fields also have their own protect + groupProtect = self.currentExtension.protect if hasattr(self.currentExtension, 'protect') and self.currentExtension.protect is not None else None + enumElem = groupinfo.elem + bitwidth = 32 if enumElem.get('bitwidth') is None else int(enumElem.get('bitwidth')) + fields = [] + if enumElem.get('type') == "enum": + if alias is not None: + self.enumAliasMap[groupName] = alias + return + + for elem in enumElem.findall('enum'): + fieldName = elem.get('name') + + # Do not include non-required enum constants + # reg.py emits the enum constants of the entire type, even constants that are part of unsupported + # extensions or those that are removed by elements in a given API. reg.py correctly tracks + # down these and also alias dependencies and marks the enum constants that are actually required + # with the 'required' attribute. Therefore we also have to verify that here to make sure we only + # include enum constants that are actually required in the target API(s). + if elem.get('required') is None: + continue + + if elem.get('alias') is not None: + self.enumFieldAliasMap[fieldName] = elem.get('alias') + continue + + negative = elem.get('dir') is not None + protect = elem.get('protect') + (valueInt, valueStr) = self.enumToValue(elem, True, bitwidth) + + # Some values have multiple extensions (ex VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR) + # genGroup() lists them twice + if next((x for x in fields if x.name == fieldName), None) is None: + self.enumFieldMap[fieldName] = EnumField(fieldName, [], protect, negative, valueInt, valueStr, []) + fields.append(self.enumFieldMap[fieldName]) + + self.vk.enums[groupName] = Enum(groupName, [], groupProtect, bitwidth, True, fields, [], []) + + else: # "bitmask" + if alias is not None: + self.bitmaskAliasMap[groupName] = alias + return + + for elem in enumElem.findall('enum'): + flagName = elem.get('name') + + # Do not include non-required enum constants + # reg.py emits the enum constants of the entire type, even constants that are part of unsupported + # extensions or those that are removed by elements in a given API. reg.py correctly tracks + # down these and also alias dependencies and marks the enum constants that are actually required + # with the 'required' attribute. Therefore we also have to verify that here to make sure we only + # include enum constants that are actually required in the target API(s). + if elem.get('required') is None: + continue + + if elem.get('alias') is not None: + self.flagAliasMap[flagName] = elem.get('alias') + continue + + protect = elem.get('protect') + + (valueInt, valueStr) = self.enumToValue(elem, True, bitwidth) + flagZero = valueInt == 0 + flagMultiBit = False + # if flag uses 'value' instead of 'bitpos', will be zero or a mask + if elem.get('bitpos') is None and elem.get('value'): + flagMultiBit = valueInt != 0 + + # Some values have multiple extensions (ex VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT) + # genGroup() lists them twice + if next((x for x in fields if x.name == flagName), None) is None: + self.flagMap[flagName] = Flag(flagName, [], protect, valueInt, valueStr, flagMultiBit, flagZero, []) + fields.append(self.flagMap[flagName]) + + flagName = groupName.replace('FlagBits', 'Flags') + self.vk.bitmasks[groupName] = Bitmask(groupName, [], flagName, groupProtect, bitwidth, True, fields, [], []) + + def genType(self, typeInfo, typeName, alias): + OutputGenerator.genType(self, typeInfo, typeName, alias) + + # Do not include APIs from unsupported extensions + if self.unsupportedExtension: + return + + typeElem = typeInfo.elem + protect = self.currentExtension.protect if hasattr(self.currentExtension, 'protect') and self.currentExtension.protect is not None else None + extension = [self.currentExtension] if self.currentExtension is not None else [] + category = typeElem.get('category') + if (category == 'struct' or category == 'union'): + if alias is not None: + self.structAliasMap[typeName] = alias + return + + union = category == 'union' + + returnedOnly = boolGet(typeElem, 'returnedonly') + allowDuplicate = boolGet(typeElem, 'allowduplicate') + + extends = splitIfGet(typeElem, 'structextends') + extendedBy = self.registry.validextensionstructs[typeName] if len(self.registry.validextensionstructs[typeName]) > 0 else None + + membersElem = typeInfo.elem.findall('.//member') + members = [] + sType = None + + for member in membersElem: + for comment in member.findall('comment'): + member.remove(comment) + + name = textIfFind(member, 'name') + type = textIfFind(member, 'type') + sType = member.get('values') if member.get('values') is not None else sType + noautovalidity = boolGet(member, 'noautovalidity') + limittype = member.get('limittype') + + (externSync, externSyncPointer) = externSyncGet(member) + # No cases currently where a subtype of a struct is marked as externally synchronized. + assert externSyncPointer is None + + nullTerminated = False + length = member.get('altlen') if member.get('altlen') is not None else member.get('len') + if length: + # we will either find it like "null-terminated" or "enabledExtensionCount,null-terminated" + # This finds both + nullTerminated = 'null-terminated' in length + length = length.replace(',null-terminated', '') if 'null-terminated' in length else length + length = None if length == 'null-terminated' else length + + cdecl = self.makeCParamDecl(member, 0) + fullType = ' '.join(cdecl[:cdecl.rfind(name)].split()) + pointer = '*' in cdecl or type.startswith('PFN_') + const = 'const' in cdecl + # Some structs like VkTransformMatrixKHR have a 2D array + fixedSizeArray = [x[:-1] for x in cdecl.split('[') if x.endswith(']')] + + if fixedSizeArray and not length: + length = ','.join(fixedSizeArray) + + # if a pointer, this can be a something like: + # optional="true,false" for ppGeometries + # optional="false,true" for pPhysicalDeviceCount + # the first is if the variable itself is optional + # the second is the value of the pointer is optional; + optionalValues = splitIfGet(member, 'optional') + optional = optionalValues is not None and optionalValues[0].lower() == "true" + optionalPointer = optionalValues is not None and len(optionalValues) > 1 and optionalValues[1].lower() == "true" + + members.append(Member(name, type, fullType, noautovalidity, limittype, + const, length, nullTerminated, pointer, fixedSizeArray, + optional, optionalPointer, + externSync, cdecl)) + + self.vk.structs[typeName] = Struct(typeName, [], extension, self.currentVersion, protect, members, + union, returnedOnly, sType, allowDuplicate, extends, extendedBy) + + elif category == 'handle': + if alias is not None: + self.handleAliasMap[typeName] = alias + return + type = typeElem.get('objtypeenum') + + # will resolve these later, the VulkanObjectType does not list things in dependent order + parent = typeElem.get('parent') + instance = typeName == 'VkInstance' + device = typeName == 'VkDevice' + + dispatchable = typeElem.find('type').text == 'VK_DEFINE_HANDLE' + + self.vk.handles[typeName] = Handle(typeName, [], type, protect, parent, instance, device, dispatchable, extension) + + elif category == 'define': + if typeName == 'VK_HEADER_VERSION': + self.vk.headerVersion = typeElem.find('name').tail.strip() + + elif category == 'bitmask': + if alias is not None: + self.flagsAliasMap[typeName] = alias + return + + # Bitmask types, i.e. flags + baseFlagsType = typeElem.find('type').text + bitWidth = 64 if baseFlagsType == 'VkFlags64' else 32 + + # Bitmask enum type is either in the 'requires' or 'bitvalues' attribute + # (for some reason there are two conventions) + bitmaskName = typeElem.get('bitvalues') + if bitmaskName is None: + bitmaskName = typeElem.get('requires') + + self.vk.flags[typeName] = Flags(typeName, [], bitmaskName, protect, baseFlagsType, bitWidth, True, extension) + + else: + # not all categories are used + # 'group'/'enum' are routed to genGroup instead + # 'basetype'/'include' are only for headers + # 'funcpointer` ignore until needed + return + + def genSpirv(self, spirvinfo, spirvName, alias): + OutputGenerator.genSpirv(self, spirvinfo, spirvName, alias) + spirvElem = spirvinfo.elem + name = spirvElem.get('name') + extension = True if spirvElem.tag == 'spirvextension' else False + capability = not extension + + enables = [] + for elem in spirvElem: + version = elem.attrib.get('version') + extensionEnable = elem.attrib.get('extension') + struct = elem.attrib.get('struct') + feature = elem.attrib.get('feature') + requires = elem.attrib.get('requires') + propertyEnable = elem.attrib.get('property') + member = elem.attrib.get('member') + value = elem.attrib.get('value') + enables.append(SpirvEnables(version, extensionEnable, struct, feature, + requires, propertyEnable, member, value)) + + self.vk.spirv.append(Spirv(name, extension, capability, enables)) + + def genFormat(self, format, formatinfo, alias): + OutputGenerator.genFormat(self, format, formatinfo, alias) + formatElem = format.elem + name = formatElem.get('name') + + components = [] + for component in formatElem.iterfind('component'): + type = component.get('name') + bits = component.get('bits') + numericFormat = component.get('numericFormat') + planeIndex = intIfGet(component, 'planeIndex') + components.append(FormatComponent(type, bits, numericFormat, planeIndex)) + + planes = [] + for plane in formatElem.iterfind('plane'): + index = int(plane.get('index')) + widthDivisor = int(plane.get('widthDivisor')) + heightDivisor = int(plane.get('heightDivisor')) + compatible = plane.get('compatible') + planes.append(FormatPlane(index, widthDivisor, heightDivisor, compatible)) + + className = formatElem.get('class') + blockSize = int(formatElem.get('blockSize')) + texelsPerBlock = int(formatElem.get('texelsPerBlock')) + blockExtent = splitIfGet(formatElem, 'blockExtent') + packed = intIfGet(formatElem, 'packed') + chroma = formatElem.get('chroma') + compressed = formatElem.get('compressed') + spirvImageFormat = formatElem.find('spirvimageformat') + if spirvImageFormat is not None: + spirvImageFormat = spirvImageFormat.get('name') + + self.vk.formats[name] = Format(name, className, blockSize, texelsPerBlock, + blockExtent, packed, chroma, compressed, + components, planes, spirvImageFormat) + + def genSyncStage(self, sync): + OutputGenerator.genSyncStage(self, sync) + syncElem = sync.elem + + support = maxSyncSupport + supportElem = syncElem.find('syncsupport') + if supportElem is not None: + queues = getQueues(supportElem) + stageNames = splitIfGet(supportElem, 'stage') + stages = [x for x in self.vk.bitmasks['VkPipelineStageFlagBits2'].flags if x.name in stageNames] if stageNames is not None else None + support = SyncSupport(queues, stages, False) + + equivalent = maxSyncEquivalent + equivalentElem = syncElem.find('syncequivalent') + if equivalentElem is not None: + stageNames = splitIfGet(equivalentElem, 'stage') + stages = [x for x in self.vk.bitmasks['VkPipelineStageFlagBits2'].flags if x.name in stageNames] if stageNames is not None else None + accessNames = splitIfGet(equivalentElem, 'access') + accesses = [x for x in self.vk.bitmasks['VkAccessFlagBits2'].flags if x.name in accessNames] if accessNames is not None else None + equivalent = SyncEquivalent(stages, accesses, False) + + flagName = syncElem.get('name') + flag = [x for x in self.vk.bitmasks['VkPipelineStageFlagBits2'].flags if x.name == flagName] + # This check is needed because not all API variants have VK_KHR_synchronization2 + if flag: + self.vk.syncStage.append(SyncStage(flag[0], support, equivalent)) + + def genSyncAccess(self, sync): + OutputGenerator.genSyncAccess(self, sync) + syncElem = sync.elem + + support = maxSyncSupport + supportElem = syncElem.find('syncsupport') + if supportElem is not None: + queues = getQueues(supportElem) + stageNames = splitIfGet(supportElem, 'stage') + stages = [x for x in self.vk.bitmasks['VkPipelineStageFlagBits2'].flags if x.name in stageNames] if stageNames is not None else None + support = SyncSupport(queues, stages, False) + + equivalent = maxSyncEquivalent + equivalentElem = syncElem.find('syncequivalent') + if equivalentElem is not None: + stageNames = splitIfGet(equivalentElem, 'stage') + stages = [x for x in self.vk.bitmasks['VkPipelineStageFlagBits2'].flags if x.name in stageNames] if stageNames is not None else None + accessNames = splitIfGet(equivalentElem, 'access') + accesses = [x for x in self.vk.bitmasks['VkAccessFlagBits2'].flags if x.name in accessNames] if accessNames is not None else None + equivalent = SyncEquivalent(stages, accesses, False) + + flagName = syncElem.get('name') + flag = [x for x in self.vk.bitmasks['VkAccessFlagBits2'].flags if x.name == flagName] + # This check is needed because not all API variants have VK_KHR_synchronization2 + if flag: + self.vk.syncAccess.append(SyncAccess(flag[0], support, equivalent)) + + def genSyncPipeline(self, sync): + OutputGenerator.genSyncPipeline(self, sync) + syncElem = sync.elem + name = syncElem.get('name') + depends = splitIfGet(syncElem, 'depends') + stages = [] + for stageElem in syncElem.findall('syncpipelinestage'): + order = stageElem.get('order') + before = stageElem.get('before') + after = stageElem.get('after') + value = stageElem.text + stages.append(SyncPipelineStage(order, before, after, value)) + + self.vk.syncPipeline.append(SyncPipeline(name, depends, stages)) diff --git a/local/recipes/libs/vulkan-headers/source/registry/cgenerator.py b/local/recipes/libs/vulkan-headers/source/registry/cgenerator.py new file mode 100644 index 0000000000..1660f4dd82 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/cgenerator.py @@ -0,0 +1,549 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2013-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +import os +import re + +from generator import (GeneratorOptions, + MissingGeneratorOptionsConventionsError, + MissingGeneratorOptionsError, MissingRegistryError, + OutputGenerator, noneStr, regSortFeatures, write) + +class CGeneratorOptions(GeneratorOptions): + """CGeneratorOptions - subclass of GeneratorOptions. + + Adds options used by COutputGenerator objects during C language header + generation.""" + + def __init__(self, + prefixText='', + genFuncPointers=True, + protectFile=True, + protectFeature=True, + protectProto=None, + protectProtoStr=None, + protectExtensionProto=None, + protectExtensionProtoStr=None, + protectExportName=None, + protectExportProtoStr=None, + apicall='', + apientry='', + apientryp='', + indentFuncProto=True, + indentFuncPointer=False, + alignFuncParam=0, + genEnumBeginEndRange=False, + genAliasMacro=False, + genStructExtendsComment=False, + aliasMacro='', + misracstyle=False, + misracppstyle=False, + **kwargs + ): + """Constructor. + Additional parameters beyond parent class: + + - prefixText - list of strings to prefix generated header with + (usually a copyright statement + calling convention macros) + - protectFile - True if multiple inclusion protection should be + generated (based on the filename) around the entire header + - protectFeature - True if #ifndef..#endif protection should be + generated around a feature interface in the header file + - genFuncPointers - True if function pointer typedefs should be + generated + - protectProto - If conditional protection should be generated + around prototype declarations, set to either '#ifdef' + to require opt-in (#ifdef protectProtoStr) or '#ifndef' + to require opt-out (#ifndef protectProtoStr). Otherwise + set to None. + - protectProtoStr - #ifdef/#ifndef symbol to use around prototype + declarations, if protectProto is set + - protectExtensionProto - If conditional protection should be generated + around extension prototype declarations, set to either '#ifdef' + to require opt-in (#ifdef protectExtensionProtoStr) or '#ifndef' + to require opt-out (#ifndef protectExtensionProtoStr). Otherwise + set to None + - protectExtensionProtoStr - #ifdef/#ifndef symbol to use around + extension prototype declarations, if protectExtensionProto is set + - protectExportName - name used to determine if a command is + exported matching an entry in the XML 'export' attribute. + Set to None if no matching should be done. + - protectExportProtoStr - #ifndef symbol to use around prototypes + for commands that are not exported. + Set to None if no protection is wanted. + - apicall - string to use for the function declaration prefix, + such as APICALL on Windows + - apientry - string to use for the calling convention macro, + in typedefs, such as APIENTRY + - apientryp - string to use for the calling convention macro + in function pointer typedefs, such as APIENTRYP + - indentFuncProto - True if prototype declarations should put each + parameter on a separate line + - indentFuncPointer - True if typedefed function pointers should put each + parameter on a separate line + - alignFuncParam - if nonzero and parameters are being put on a + separate line, align parameter names at the specified column + - genEnumBeginEndRange - True if BEGIN_RANGE / END_RANGE macros should + be generated for enumerated types + - genAliasMacro - True if the OpenXR alias macro should be generated + for aliased types (unclear what other circumstances this is useful) + - genStructExtendsComment - True if comments showing the structures + whose pNext chain a structure extends are included before its + definition + - aliasMacro - alias macro to inject when genAliasMacro is True + - misracstyle - generate MISRA C-friendly headers + - misracppstyle - generate MISRA C++-friendly headers""" + + GeneratorOptions.__init__(self, **kwargs) + + self.prefixText = prefixText + """list of strings to prefix generated header with (usually a copyright statement + calling convention macros).""" + + self.genFuncPointers = genFuncPointers + """True if function pointer typedefs should be generated""" + + self.protectFile = protectFile + """True if multiple inclusion protection should be generated (based on the filename) around the entire header.""" + + self.protectFeature = protectFeature + """True if #ifndef..#endif protection should be generated around a feature interface in the header file.""" + + self.protectProto = protectProto + """If conditional protection should be generated around prototype declarations, set to either '#ifdef' to require opt-in (#ifdef protectProtoStr) or '#ifndef' to require opt-out (#ifndef protectProtoStr). Otherwise set to None.""" + + self.protectProtoStr = protectProtoStr + """#ifdef/#ifndef symbol to use around prototype declarations, if protectProto is set""" + + self.protectExtensionProto = protectExtensionProto + """If conditional protection should be generated around extension prototype declarations, set to either '#ifdef' to require opt-in (#ifdef protectExtensionProtoStr) or '#ifndef' to require opt-out (#ifndef protectExtensionProtoStr). Otherwise set to None.""" + + self.protectExtensionProtoStr = protectExtensionProtoStr + """#ifdef/#ifndef symbol to use around extension prototype declarations, if protectExtensionProto is set""" + + self.protectExportName = protectExportName + """Export name for commands which are exported""" + + self.protectExportProtoStr = protectExportProtoStr + """#ifndef symbol to use around prototypes for commands which are not exported""" + + self.apicall = apicall + """string to use for the function declaration prefix, such as APICALL on Windows.""" + + self.apientry = apientry + """string to use for the calling convention macro, in typedefs, such as APIENTRY.""" + + self.apientryp = apientryp + """string to use for the calling convention macro in function pointer typedefs, such as APIENTRYP.""" + + self.indentFuncProto = indentFuncProto + """True if prototype declarations should put each parameter on a separate line""" + + self.indentFuncPointer = indentFuncPointer + """True if typedefed function pointers should put each parameter on a separate line""" + + self.alignFuncParam = alignFuncParam + """if nonzero and parameters are being put on a separate line, align parameter names at the specified column""" + + self.genEnumBeginEndRange = genEnumBeginEndRange + """True if BEGIN_RANGE / END_RANGE macros should be generated for enumerated types""" + + self.genAliasMacro = genAliasMacro + """True if the OpenXR alias macro should be generated for aliased types (unclear what other circumstances this is useful)""" + + self.genStructExtendsComment = genStructExtendsComment + """True if comments showing the structures whose pNext chain a structure extends are included before its definition""" + + self.aliasMacro = aliasMacro + """alias macro to inject when genAliasMacro is True""" + + self.misracstyle = misracstyle + """generate MISRA C-friendly headers""" + + self.misracppstyle = misracppstyle + """generate MISRA C++-friendly headers""" + + self.codeGenerator = True + """True if this generator makes compilable code""" + + +class COutputGenerator(OutputGenerator): + """Generates C-language API interfaces.""" + + # This is an ordered list of sections in the header file. + TYPE_SECTIONS = ['include', 'define', 'basetype', 'handle', 'enum', + 'group', 'bitmask', 'funcpointer', 'struct'] + ALL_SECTIONS = TYPE_SECTIONS + ['commandPointer', 'command'] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Internal state - accumulators for different inner block text + self.sections = {section: [] for section in self.ALL_SECTIONS} + self.feature_not_empty = False + self.may_alias = None + + def beginFile(self, genOpts): + OutputGenerator.beginFile(self, genOpts) + if self.genOpts is None: + raise MissingGeneratorOptionsError() + # C-specific + # + # Multiple inclusion protection & C++ wrappers. + if self.genOpts.protectFile and self.genOpts.filename: + headerSym = re.sub(r'\.h', '_h_', + os.path.basename(self.genOpts.filename)).upper() + write('#ifndef', headerSym, file=self.outFile) + write('#define', headerSym, '1', file=self.outFile) + self.newline() + + # User-supplied prefix text, if any (list of strings) + if genOpts.prefixText: + for s in genOpts.prefixText: + write(s, file=self.outFile) + + # C++ extern wrapper - after prefix lines so they can add includes. + self.newline() + write('#ifdef __cplusplus', file=self.outFile) + write('extern "C" {', file=self.outFile) + write('#endif', file=self.outFile) + self.newline() + + def endFile(self): + # C-specific + # Finish C++ wrapper and multiple inclusion protection + if self.genOpts is None: + raise MissingGeneratorOptionsError() + self.newline() + write('#ifdef __cplusplus', file=self.outFile) + write('}', file=self.outFile) + write('#endif', file=self.outFile) + if self.genOpts.protectFile and self.genOpts.filename: + self.newline() + write('#endif', file=self.outFile) + # Finish processing in superclass + OutputGenerator.endFile(self) + + def beginFeature(self, interface, emit): + # Start processing in superclass + OutputGenerator.beginFeature(self, interface, emit) + # C-specific + # Accumulate includes, defines, types, enums, function pointer typedefs, + # end function prototypes separately for this feature. They are only + # printed in endFeature(). + self.sections = {section: [] for section in self.ALL_SECTIONS} + self.feature_not_empty = False + + def _endProtectComment(self, protect_str, protect_directive='#ifdef'): + if protect_directive is None or protect_str is None: + raise RuntimeError('Should not call in here without something to protect') + + # Do not put comments after #endif closing blocks if this is not set + if not self.genOpts.conventions.protectProtoComment: + return '' + elif 'ifdef' in protect_directive: + return f' /* {protect_str} */' + else: + return f' /* !{protect_str} */' + + def endFeature(self): + "Actually write the interface to the output file." + # C-specific + if self.emit: + if self.feature_not_empty: + if self.genOpts is None: + raise MissingGeneratorOptionsError() + if self.genOpts.conventions is None: + raise MissingGeneratorOptionsConventionsError() + is_core = self.featureName and self.featureName.startswith(f"{self.conventions.api_prefix}VERSION_") + if self.genOpts.conventions.writeFeature(self.featureName, self.featureExtraProtect, self.genOpts.filename): + self.newline() + if self.genOpts.protectFeature: + write('#ifndef', self.featureName, file=self.outFile) + + # If type declarations are needed by other features based on + # this one, it may be necessary to suppress the ExtraProtect, + # or move it below the 'for section...' loop. + if self.featureExtraProtect is not None: + write('#ifdef', self.featureExtraProtect, file=self.outFile) + self.newline() + + # Generate warning of possible use in IDEs + write(f'// {self.featureName} is a preprocessor guard. Do not pass it to API calls.', file=self.outFile) + write('#define', self.featureName, '1', file=self.outFile) + for section in self.TYPE_SECTIONS: + contents = self.sections[section] + if contents: + write('\n'.join(contents), file=self.outFile) + + if self.genOpts.genFuncPointers and self.sections['commandPointer']: + write('\n'.join(self.sections['commandPointer']), file=self.outFile) + self.newline() + + if self.sections['command']: + if self.genOpts.protectProto: + write(self.genOpts.protectProto, + self.genOpts.protectProtoStr, file=self.outFile) + if self.genOpts.protectExtensionProto and not is_core: + write(self.genOpts.protectExtensionProto, + self.genOpts.protectExtensionProtoStr, file=self.outFile) + write('\n'.join(self.sections['command']), end='', file=self.outFile) + if self.genOpts.protectExtensionProto and not is_core: + write('#endif' + + self._endProtectComment(protect_directive=self.genOpts.protectExtensionProto, + protect_str=self.genOpts.protectExtensionProtoStr), + file=self.outFile) + if self.genOpts.protectProto: + write('#endif' + + self._endProtectComment(protect_directive=self.genOpts.protectProto, + protect_str=self.genOpts.protectProtoStr), + file=self.outFile) + else: + self.newline() + + if self.featureExtraProtect is not None: + write('#endif' + + self._endProtectComment(protect_str=self.featureExtraProtect), + file=self.outFile) + + if self.genOpts.protectFeature: + write('#endif' + + self._endProtectComment(protect_str=self.featureName), + file=self.outFile) + # Finish processing in superclass + OutputGenerator.endFeature(self) + + def appendSection(self, section, text): + "Append a definition to the specified section" + + if section is None: + self.logMsg('error', 'Missing section in appendSection (probably a element missing its \'category\' attribute. Text:', text) + exit(1) + + self.sections[section].append(text) + self.feature_not_empty = True + + def genType(self, typeinfo, name, alias): + "Generate type." + OutputGenerator.genType(self, typeinfo, name, alias) + typeElem = typeinfo.elem + + # Vulkan: + # Determine the category of the type, and the type section to add + # its definition to. + # 'funcpointer' is added to the 'struct' section as a workaround for + # internal issue #877, since structures and function pointer types + # can have cross-dependencies. + category = typeElem.get('category') + if category == 'funcpointer': + section = 'struct' + else: + section = category + + if category in ('struct', 'union'): + # If the type is a struct type, generate it using the + # special-purpose generator. + self.genStruct(typeinfo, name, alias) + else: + if self.genOpts is None: + raise MissingGeneratorOptionsError() + + body = self.deprecationComment(typeElem) + + # OpenXR: this section was not under 'else:' previously, just fell through + if alias: + # If the type is an alias, just emit a typedef declaration + body += f"typedef {alias} {name};\n" + else: + # Replace tags with an APIENTRY-style string + # (from self.genOpts). Copy other text through unchanged. + # If the resulting text is an empty string, do not emit it. + body += noneStr(typeElem.text) + for elem in typeElem: + if elem.tag == 'apientry': + body += self.genOpts.apientry + noneStr(elem.tail) + else: + body += noneStr(elem.text) + noneStr(elem.tail) + if category == 'define' and self.misracppstyle(): + body = body.replace("(uint32_t)", "static_cast") + if body: + # Add extra newline after multi-line entries. + if '\n' in body[0:-1]: + body += '\n' + self.appendSection(section, body) + + def genProtectString(self, protect_str): + """Generate protection string. + + Protection strings are the strings defining the OS/Platform/Graphics + requirements for a given API command. When generating the + language header files, we need to make sure the items specific to a + graphics API or OS platform are properly wrapped in #ifs.""" + protect_if_str = '' + protect_end_str = '' + if not protect_str: + return (protect_if_str, protect_end_str) + + if ',' in protect_str: + protect_list = protect_str.split(',') + protect_defs = (f'defined({d})' for d in protect_list) + protect_def_str = ' && '.join(protect_defs) + protect_if_str = f'#if {protect_def_str}\n' + protect_end_str = f'#endif // {protect_def_str}\n' + else: + protect_if_str = f'#ifdef {protect_str}\n' + protect_end_str = f'#endif // {protect_str}\n' + + return (protect_if_str, protect_end_str) + + def typeMayAlias(self, typeName): + if not self.may_alias: + if self.registry is None: + raise MissingRegistryError() + # First time we have asked if a type may alias. + # So, populate the set of all names of types that may. + + # Everyone with an explicit mayalias="true" + self.may_alias = set(typeName + for typeName, data in self.registry.typedict.items() + if data.elem.get('mayalias') == 'true') + + # Every type mentioned in some other type's parentstruct attribute. + polymorphic_bases = (otherType.elem.get('parentstruct') + for otherType in self.registry.typedict.values()) + self.may_alias.update(set(x for x in polymorphic_bases + if x is not None)) + return typeName in self.may_alias + + def genStruct(self, typeinfo, typeName, alias): + """Generate struct (e.g. C "struct" type). + + This is a special case of the tag where the contents are + interpreted as a set of tags instead of freeform C + C type declarations. The tags are just like + tags - they are a declaration of a struct or union member. + Only simple member declarations are supported (no nested + structs etc.) + + If alias is not None, then this struct aliases another; just + generate a typedef of that alias.""" + OutputGenerator.genStruct(self, typeinfo, typeName, alias) + + if self.genOpts is None: + raise MissingGeneratorOptionsError() + + typeElem = typeinfo.elem + body = self.deprecationComment(typeElem) + + if alias: + body += f"typedef {alias} {typeName};\n" + else: + (protect_begin, protect_end) = self.genProtectString(typeElem.get('protect')) + if protect_begin: + body += protect_begin + + if self.genOpts.genStructExtendsComment: + structextends = typeElem.get('structextends') + body += f"// {typeName} extends {structextends}\n" if structextends else '' + + body += f"typedef {typeElem.get('category')}" + + # This is an OpenXR-specific alternative where aliasing refers + # to an inheritance hierarchy of types rather than C-level type + # aliases. + if self.genOpts.genAliasMacro and self.typeMayAlias(typeName): + body += f" {self.genOpts.aliasMacro}" + + body += f" {typeName} {{\n" + + targetLen = self.getMaxCParamTypeLength(typeinfo) + for member in typeElem.findall('.//member'): + body += self.deprecationComment(member, indent = 4) + body += self.makeCParamDecl(member, targetLen + 4) + body += ';\n' + body += f"}} {typeName};\n" + if protect_end: + body += protect_end + + self.appendSection('struct', body) + + def genGroup(self, groupinfo, groupName, alias=None): + """Generate groups (e.g. C "enum" type). + + These are concatenated together with other types. + + If alias is not None, it is the name of another group type + which aliases this type; just generate that alias.""" + OutputGenerator.genGroup(self, groupinfo, groupName, alias) + groupElem = groupinfo.elem + + # After either enumerated type or alias paths, add the declaration + # to the appropriate section for the group being defined. + if groupElem.get('type') == 'bitmask': + section = 'bitmask' + else: + section = 'group' + + if alias: + # If the group name is aliased, just emit a typedef declaration + # for the alias. + body = f"typedef {alias} {groupName};\n" + self.appendSection(section, body) + else: + if self.genOpts is None: + raise MissingGeneratorOptionsError() + (section, body) = self.buildEnumCDecl(self.genOpts.genEnumBeginEndRange, groupinfo, groupName) + self.appendSection(section, f"\n{body}") + + def genEnum(self, enuminfo, name, alias): + """Generate the C declaration for a constant (a single value). + + tags may specify their values in several ways, but are usually + just integers.""" + + OutputGenerator.genEnum(self, enuminfo, name, alias) + + body = self.deprecationComment(enuminfo.elem) + body += self.buildConstantCDecl(enuminfo, name, alias) + self.appendSection('enum', body) + + def genCmd(self, cmdinfo, name, alias): + "Command generation" + OutputGenerator.genCmd(self, cmdinfo, name, alias) + + # if alias: + # prefix = '// ' + name + ' is an alias of command ' + alias + '\n' + # else: + # prefix = '' + if self.genOpts is None: + raise MissingGeneratorOptionsError() + + prefix = '' + decls = self.makeCDecls(cmdinfo.elem) + + # If the 'export' attribute is not set for this command, or does not + # match the export name selected during generation, wrap the command + # prototype in a C conditional which can be enabled to make the + # prototype not appear at compile time. + + export = cmdinfo.elem.get('export','') + protect_prefix = protect_suffix = '' + if export is None or self.genOpts.protectExportName not in export.split(','): + if self.genOpts.protectExportProtoStr is not None: + # Command is not exported, so should not be visible if + # suppressed by this symbol + protect_prefix = f'#ifndef {self.genOpts.protectExportProtoStr}\n' + protect_suffix = '\n#endif' + + decls[0] = protect_prefix + decls[0] + protect_suffix + + self.appendSection('command', f"{prefix + decls[0]}\n") + if self.genOpts.genFuncPointers: + self.appendSection('commandPointer', decls[1]) + + def misracstyle(self): + return self.genOpts.misracstyle + + def misracppstyle(self): + return self.genOpts.misracppstyle diff --git a/local/recipes/libs/vulkan-headers/source/registry/generator.py b/local/recipes/libs/vulkan-headers/source/registry/generator.py new file mode 100644 index 0000000000..5d369a3614 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/generator.py @@ -0,0 +1,1424 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2013-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 +"""Base class for source/header/doc generators, as well as some utility functions.""" + +from __future__ import unicode_literals + +import io +import os +import pdb +import re +import shutil +import sys +import tempfile +try: + from pathlib import Path +except ImportError: + from pathlib2 import Path # type: ignore + +from spec_tools.util import getElemName, getElemType + + +def write(*args, **kwargs): + file = kwargs.pop('file', sys.stdout) + end = kwargs.pop('end', '\n') + file.write(' '.join(str(arg) for arg in args)) + file.write(end) + + +def noneStr(s): + """Return string argument, or "" if argument is None. + + Used in converting etree Elements into text. + s - string to convert""" + if s: + return s + return "" + + +def enquote(s): + """Return string argument with surrounding quotes, + for serialization into Python code.""" + if s: + if isinstance(s, str): + return f"'{s}'" + else: + return s + return None + + +def regSortCategoryKey(feature): + """Sort key for regSortFeatures. + Sorts by category of the feature name string: + + - Core API features (those defined with a `` tag) + - (sort VKSC after VK - this is Vulkan-specific) + - ARB/KHR/OES (Khronos extensions) + - other (EXT/vendor extensions)""" + + if feature.elem.tag == 'feature': + if feature.name.startswith('VKSC'): + return 0.5 + else: + return 0 + + if feature.category.upper() in ('ARB', 'KHR', 'OES'): + return 1 + + return 2 + + +def regSortOrderKey(feature): + """Sort key for regSortFeatures - key is the sortorder attribute.""" + + return feature.sortorder + + +def regSortNameKey(feature): + """Sort key for regSortFeatures - key is the extension name.""" + + return feature.name + + +def regSortFeatureVersionKey(feature): + """Sort key for regSortFeatures - key is the feature version. + `` elements all have version number 0.""" + + return float(feature.versionNumber) + + +def regSortExtensionNumberKey(feature): + """Sort key for regSortFeatures - key is the extension number. + `` elements all have extension number 0.""" + + return int(feature.number) + + +def regSortFeatures(featureList): + """Default sort procedure for features. + + - Sorts by explicit sort order (default 0) relative to other features + - then by feature category ('feature' or 'extension'), + - then by version number (for features) + - then by extension number (for extensions)""" + featureList.sort(key=regSortExtensionNumberKey) + featureList.sort(key=regSortFeatureVersionKey) + featureList.sort(key=regSortCategoryKey) + featureList.sort(key=regSortOrderKey) + + +class MissingGeneratorOptionsError(RuntimeError): + """Error raised when a Generator tries to do something that requires GeneratorOptions but it is None.""" + + def __init__(self, msg=None): + full_msg = 'Missing generator options object self.genOpts' + if msg: + full_msg += f": {msg}" + super().__init__(full_msg) + + +class MissingRegistryError(RuntimeError): + """Error raised when a Generator tries to do something that requires a Registry object but it is None.""" + + def __init__(self, msg=None): + full_msg = 'Missing Registry object self.registry' + if msg: + full_msg += f": {msg}" + super().__init__(full_msg) + + +class MissingGeneratorOptionsConventionsError(RuntimeError): + """Error raised when a Generator tries to do something that requires a Conventions object but it is None.""" + + def __init__(self, msg=None): + full_msg = 'Missing Conventions object self.genOpts.conventions' + if msg: + full_msg += f": {msg}" + super().__init__(full_msg) + + +class GeneratorOptions: + """Base class for options used during header/documentation production. + + These options are target language independent, and used by + Registry.apiGen() and by base OutputGenerator objects.""" + + def __init__(self, + conventions=None, + filename=None, + directory='.', + genpath=None, + apiname=None, + mergeApiNames=None, + profile=None, + versions='.*', + emitversions='.*', + defaultExtensions=None, + addExtensions=None, + removeExtensions=None, + emitExtensions=None, + emitSpirv=None, + emitFormats=None, + reparentEnums=True, + sortProcedure=regSortFeatures, + requireCommandAliases=False, + requireDepends=True, + ): + """Constructor. + + Arguments: + + - conventions - may be mandatory for some generators: + an object that implements ConventionsBase + - filename - basename of file to generate, or None to write to stdout. + - directory - directory in which to generate filename + - genpath - path to previously generated files, such as apimap.py + - apiname - string matching `` 'apiname' attribute, e.g. 'gl'. + - mergeApiNames - If not None, a comma separated list of API names + to merge into the API specified by 'apiname' + - profile - string specifying API profile , e.g. 'core', or None. + - versions - regex matching API versions to process interfaces for. + Normally `'.*'` or `'[0-9][.][0-9]'` to match all defined versions. + - emitversions - regex matching API versions to actually emit + interfaces for (though all requested versions are considered + when deciding which interfaces to generate). For GL 4.3 glext.h, + this might be `'1[.][2-5]|[2-4][.][0-9]'`. + - defaultExtensions - If not None, a string which must in its + entirety match the pattern in the "supported" attribute of + the ``. Defaults to None. Usually the same as apiname. + - addExtensions - regex matching names of additional extensions + to include. Defaults to None. + - removeExtensions - regex matching names of extensions to + remove (after defaultExtensions and addExtensions). Defaults + to None. + - emitExtensions - regex matching names of extensions to actually emit + interfaces for (though all requested versions are considered when + deciding which interfaces to generate). Defaults to None. + - emitSpirv - regex matching names of extensions and capabilities + to actually emit interfaces for. + - emitFormats - regex matching names of formats to actually emit + interfaces for. + - reparentEnums - move elements which extend an enumerated + type from or elements to the target + element. This is required for almost all purposes, but the + InterfaceGenerator relies on the list of interfaces in the + or being complete. Defaults to True. + - sortProcedure - takes a list of FeatureInfo objects and sorts + them in place to a preferred order in the generated output. + - requireCommandAliases - if True, treat command aliases + as required dependencies. + - requireDepends - whether to follow API dependencies when emitting + APIs. + + Default is + - core API versions + - Khronos (ARB/KHR/OES) extensions + - All other extensions + - By core API version number or extension number in each group. + + The regex patterns can be None or empty, in which case they match + nothing.""" + self.conventions = conventions + """may be mandatory for some generators: + an object that implements ConventionsBase""" + + self.filename = filename + "basename of file to generate, or None to write to stdout." + + self.genpath = genpath + """path to previously generated files, such as apimap.py""" + + self.directory = directory + "directory in which to generate filename" + + self.apiname = apiname + "string matching `` 'apiname' attribute, e.g. 'gl'." + + self.mergeApiNames = mergeApiNames + "comma separated list of API names to merge into the API specified by 'apiname'" + + self.profile = profile + "string specifying API profile , e.g. 'core', or None." + + self.versions = self.emptyRegex(versions) + """regex matching API versions to process interfaces for. + Normally `'.*'` or `'[0-9][.][0-9]'` to match all defined versions.""" + + self.emitversions = self.emptyRegex(emitversions) + """regex matching API versions to actually emit + interfaces for (though all requested versions are considered + when deciding which interfaces to generate). For GL 4.3 glext.h, + this might be `'1[.][2-5]|[2-4][.][0-9]'`.""" + + self.defaultExtensions = defaultExtensions + """If not None, a string which must in its + entirety match the pattern in the "supported" attribute of + the ``. Defaults to None. Usually the same as apiname.""" + + self.addExtensions = self.emptyRegex(addExtensions) + """regex matching names of additional extensions + to include. Defaults to None.""" + + self.removeExtensions = self.emptyRegex(removeExtensions) + """regex matching names of extensions to + remove (after defaultExtensions and addExtensions). Defaults + to None.""" + + self.emitExtensions = self.emptyRegex(emitExtensions) + """regex matching names of extensions to actually emit + interfaces for (though all requested versions are considered when + deciding which interfaces to generate).""" + + self.emitSpirv = self.emptyRegex(emitSpirv) + """regex matching names of extensions and capabilities + to actually emit interfaces for.""" + + self.emitFormats = self.emptyRegex(emitFormats) + """regex matching names of formats + to actually emit interfaces for.""" + + self.reparentEnums = reparentEnums + """boolean specifying whether to remove elements from + or when extending an type.""" + + self.sortProcedure = sortProcedure + """takes a list of FeatureInfo objects and sorts + them in place to a preferred order in the generated output. + Default is core API versions, ARB/KHR/OES extensions, all + other extensions, alphabetically within each group.""" + + self.codeGenerator = False + """True if this generator makes compilable code""" + + self.registry = None + """Populated later with the registry object.""" + + self.requireCommandAliases = requireCommandAliases + """True if alias= attributes of tags are transitively + required.""" + + self.requireDepends = requireDepends + """True if dependencies of API tags are transitively required.""" + + def emptyRegex(self, pat): + """Substitute a regular expression which matches no version + or extension names for None or the empty string.""" + if not pat: + return '_nomatch_^' + + return pat + + +class OutputGenerator: + """Generate specified API interfaces in a specific style, such as a C header. + + Base class for generating API interfaces. + Manages basic logic, logging, and output file control. + Derived classes actually generate formatted output. + """ + + # categoryToPath - map XML 'category' to include file directory name + categoryToPath = { + 'bitmask': 'flags', + 'enum': 'enums', + 'funcpointer': 'funcpointers', + 'handle': 'handles', + 'define': 'defines', + 'basetype': 'basetypes', + } + + def breakName(self, name, msg): + """Break into debugger if this is a special name""" + + # List of string names to break on + bad = ( + ) + + if name in bad and True: + print(f'breakName {name}: {msg}') + pdb.set_trace() + + def __init__(self, errFile=sys.stderr, warnFile=sys.stderr, diagFile=sys.stdout): + """Constructor + + - errFile, warnFile, diagFile - file handles to write errors, + warnings, diagnostics to. May be None to not write.""" + self.outFile = None + self.errFile = errFile + self.warnFile = warnFile + self.diagFile = diagFile + # Internal state + self.featureName = None + """The current feature name being generated.""" + + self.genOpts = None + """The GeneratorOptions subclass instance.""" + + self.registry = None + """The specification registry object.""" + + self.featureDictionary = {} + """The dictionary of dictionaries of API features.""" + + # Used for extension enum value generation + self.extBase = 1000000000 + self.extBlockSize = 1000 + self.madeDirs = {} + + # API dictionary, which may be loaded by the beginFile method of + # derived generators. + self.apidict = None + + # File suffix for generated files, set in beginFile below. + self.file_suffix = '' + + def logMsg(self, level, *args): + """Write a message of different categories to different + destinations. + + - `level` + - 'diag' (diagnostic, voluminous) + - 'warn' (warning) + - 'error' (fatal error - raises exception after logging) + + - `*args` - print()-style arguments to direct to corresponding log""" + if level == 'error': + strfile = io.StringIO() + write('ERROR:', *args, file=strfile) + if self.errFile is not None: + write(strfile.getvalue(), file=self.errFile) + raise UserWarning(strfile.getvalue()) + elif level == 'warn': + if self.warnFile is not None: + write('WARNING:', *args, file=self.warnFile) + elif level == 'diag': + if self.diagFile is not None: + write('DIAG:', *args, file=self.diagFile) + else: + raise UserWarning( + f"*** FATAL ERROR in Generator.logMsg: unknown level:{level}") + + def enumToValue(self, elem, needsNum, bitwidth = 32, + forceSuffix = False, parent_for_alias_dereference=None): + """Parse and convert an `` tag into a value. + + - elem - Element + - needsNum - generate a numeric representation of the element value + - bitwidth - size of the numeric representation in bits (32 or 64) + - forceSuffix - if True, always use a 'U' / 'ULL' suffix on integers + - parent_for_alias_dereference - if not None, an Element containing + the parent of elem, used to look for elements this is an alias of + + Returns a list: + + - first element - integer representation of the value, or None + if needsNum is False. The value must be a legal number + if needsNum is True. + - second element - string representation of the value + + There are several possible representations of values. + + - A 'value' attribute simply contains the value. + - A 'bitpos' attribute defines a value by specifying the bit + position which is set in that value. + - An 'offset','extbase','extends' triplet specifies a value + as an offset to a base value defined by the specified + 'extbase' extension name, which is then cast to the + typename specified by 'extends'. This requires probing + the registry database, and imbeds knowledge of the + API extension enum scheme in this function. + - An 'alias' attribute contains the name of another enum + which this is an alias of. The other enum must be + declared first when emitting this enum.""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + if self.genOpts.conventions is None: + raise MissingGeneratorOptionsConventionsError() + + name = elem.get('name') + numVal = None + if 'value' in elem.keys(): + value = elem.get('value') + # print('About to translate value =', value, 'type =', type(value)) + if needsNum: + numVal = int(value, 0) + # If there is a non-integer, numeric 'type' attribute (e.g. 'u' or + # 'ull'), append it to the string value. + # t = enuminfo.elem.get('type') + # if t is not None and t != '' and t != 'i' and t != 's': + # value += enuminfo.type + if forceSuffix: + if bitwidth == 64: + value = f"{value}ULL" + else: + value = f"{value}U" + self.logMsg('diag', 'Enum', name, '-> value [', numVal, ',', value, ']') + return [numVal, value] + if 'bitpos' in elem.keys(): + value = elem.get('bitpos') + bitpos = int(value, 0) + numVal = 1 << bitpos + value = f'0x{numVal:08x}' + if bitwidth == 64 or bitpos >= 32: + value = f"{value}ULL" + elif forceSuffix: + value = f"{value}U" + self.logMsg('diag', 'Enum', name, '-> bitpos [', numVal, ',', value, ']') + return [numVal, value] + if 'offset' in elem.keys(): + # Obtain values in the mapping from the attributes + enumNegative = False + offset = int(elem.get('offset'), 0) + extnumber = int(elem.get('extnumber'), 0) + extends = elem.get('extends') + if 'dir' in elem.keys(): + enumNegative = True + self.logMsg('diag', 'Enum', name, 'offset =', offset, + 'extnumber =', extnumber, 'extends =', extends, + 'enumNegative =', enumNegative) + # Now determine the actual enumerant value, as defined + # in the "Layers and Extensions" appendix of the spec. + numVal = self.extBase + (extnumber - 1) * self.extBlockSize + offset + if enumNegative: + numVal *= -1 + value = '%d' % numVal + # More logic needed! + self.logMsg('diag', 'Enum', name, '-> offset [', numVal, ',', value, ']') + return [numVal, value] + if 'alias' in elem.keys(): + alias_of = elem.get('alias') + if parent_for_alias_dereference is None: + return (None, alias_of) + siblings = parent_for_alias_dereference.findall('enum') + for sib in siblings: + sib_name = sib.get('name') + if sib_name == alias_of: + return self.enumToValue(sib, needsNum) + raise RuntimeError("Could not find the aliased enum value") + return [None, None] + + def checkDuplicateEnums(self, enums): + """Check enumerated values for duplicates. + + - enums - list of `` Elements + + returns the list with duplicates stripped""" + # Dictionaries indexed by name and numeric value. + # Entries are [ Element, numVal, strVal ] matching name or value + + nameMap = {} + valueMap = {} + + stripped = [] + for elem in enums: + name = elem.get('name') + (numVal, strVal) = self.enumToValue(elem, True) + + if name in nameMap: + # Duplicate name found; check values + (name2, numVal2, strVal2) = nameMap[name] + + # Duplicate enum values for the same name are benign. This + # happens when defining the same enum conditionally in + # several extension blocks. + if (strVal2 == strVal or (numVal is not None + and numVal == numVal2)): + True + # self.logMsg('info', 'checkDuplicateEnums: Duplicate enum (' + name + + # ') found with the same value:' + strVal) + else: + self.logMsg('warn', 'checkDuplicateEnums: Duplicate enum (' + name + + ') found with different values:' + strVal + + ' and ' + strVal2) + + # Do not add the duplicate to the returned list + continue + elif numVal in valueMap: + # Duplicate value found (such as an alias); report it, but + # still add this enum to the list. + (name2, numVal2, strVal2) = valueMap[numVal] + + msg = 'Two enums found with the same value: {} = {} = {}'.format( + name, name2.get('name'), strVal) + self.logMsg('error', msg) + + # Track this enum to detect followon duplicates + nameMap[name] = [elem, numVal, strVal] + if numVal is not None: + valueMap[numVal] = [elem, numVal, strVal] + + # Add this enum to the list + stripped.append(elem) + + # Return the list + return stripped + + def misracstyle(self): + return False; + + def misracppstyle(self): + return False; + + def deprecationComment(self, elem, indent = 0): + """If an API element is marked deprecated, return a brief comment + describing why. + Otherwise, return an empty string. + + - elem - Element of the API. + API name is determined depending on the element tag. + - indent - number of spaces to indent the comment""" + + reason = elem.get('deprecated') + + # This is almost always the path taken. + if reason == None: + return '' + + # There is actually a deprecated attribute. + padding = indent * ' ' + + # Determine the API name. + if elem.tag == 'member' or elem.tag == 'param': + name = elem.find('.//name').text + else: + name = elem.get('name') + + if reason == 'aliased': + return f'{padding}// {name} is a deprecated alias\n' + elif reason == 'ignored': + return f'{padding}// {name} is deprecated and should not be used\n' + elif reason == 'true': + return f'{padding}// {name} is deprecated, but no reason was given in the API XML\n' + else: + # This can be caught by schema validation + self.logMsg('error', f"{name} has an unknown deprecation attribute value '{reason}'") + exit(1) + + def buildEnumCDecl(self, expand, groupinfo, groupName): + """Generate the C declaration for an enum""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + if self.genOpts.conventions is None: + raise MissingGeneratorOptionsConventionsError() + + groupElem = groupinfo.elem + + # Determine the required bit width for the enum group. + # 32 is the default, which generates C enum types for the values. + bitwidth = 32 + + # If the constFlagBits preference is set, 64 is the default for bitmasks + if self.genOpts.conventions.constFlagBits and groupElem.get('type') == 'bitmask': + bitwidth = 64 + + # Check for an explicitly defined bitwidth, which will override any defaults. + if groupElem.get('bitwidth'): + try: + bitwidth = int(groupElem.get('bitwidth')) + except ValueError as ve: + self.logMsg('error', 'Invalid value for bitwidth attribute (', groupElem.get('bitwidth'), ') for ', groupName, ' - must be an integer value\n') + exit(1) + + usebitmask = False + usedefine = False + + # Bitmask flags can be generated as either "static const uint{32,64}_t" values, + # or as 32-bit C enums. 64-bit types must use uint64_t values. + if groupElem.get('type') == 'bitmask': + if bitwidth > 32 or self.misracppstyle(): + usebitmask = True + if self.misracstyle(): + usedefine = True + + if usedefine or usebitmask: + # Validate the bitwidth and generate values appropriately + if bitwidth > 64: + self.logMsg('error', 'Invalid value for bitwidth attribute (', groupElem.get('bitwidth'), ') for bitmask type ', groupName, ' - must be less than or equal to 64\n') + exit(1) + else: + return self.buildEnumCDecl_BitmaskOrDefine(groupinfo, groupName, bitwidth, usedefine) + else: + # Validate the bitwidth and generate values appropriately + if bitwidth > 32: + self.logMsg('error', 'Invalid value for bitwidth attribute (', groupElem.get('bitwidth'), ') for enum type ', groupName, ' - must be less than or equal to 32\n') + exit(1) + else: + return self.buildEnumCDecl_Enum(expand, groupinfo, groupName) + + def buildEnumCDecl_BitmaskOrDefine(self, groupinfo, groupName, bitwidth, usedefine): + """Generate the C declaration for an "enum" that is actually a + set of flag bits""" + groupElem = groupinfo.elem + flagTypeName = groupElem.get('name') + + # Prefix + body = f"// Flag bits for {flagTypeName}\n" + + if bitwidth == 64: + body += f"typedef VkFlags64 {flagTypeName};\n"; + else: + body += f"typedef VkFlags {flagTypeName};\n"; + + # Maximum allowable value for a flag (unsigned 64-bit integer) + maxValidValue = 2**(64) - 1 + minValidValue = 0 + + # Get a list of nested 'enum' tags. + enums = groupElem.findall('enum') + + # Check for and report duplicates, and return a list with them + # removed. + enums = self.checkDuplicateEnums(enums) + + # Accumulate non-numeric enumerant values separately and append + # them following the numeric values, to allow for aliases. + # NOTE: this does not do a topological sort yet, so aliases of + # aliases can still get in the wrong order. + aliasText = '' + + # Loop over the nested 'enum' tags. + for elem in enums: + # Convert the value to an integer and use that to track min/max. + # Values of form -(number) are accepted but nothing more complex. + # Should catch exceptions here for more complex constructs. Not yet. + (numVal, strVal) = self.enumToValue(elem, True, bitwidth, True) + name = elem.get('name') + + # Range check for the enum value + if numVal is not None and (numVal > maxValidValue or numVal < minValidValue): + self.logMsg('error', 'Allowable range for flag types in C is [', minValidValue, ',', maxValidValue, '], but', name, 'flag has a value outside of this (', strVal, ')\n') + exit(1) + + decl = self.genRequirements(name, mustBeFound = False) + + if self.isEnumRequired(elem): + protect = elem.get('protect') + if protect is not None: + body += f'#ifdef {protect}\n' + + body += self.deprecationComment(elem, indent = 0) + + if usedefine: + decl += f"#define {name} {strVal}\n" + elif self.misracppstyle(): + decl += f"static constexpr {flagTypeName} {name} {{{strVal}}};\n" + else: + # Some C compilers only allow initializing a 'static const' variable with a literal value. + # So initializing an alias from another 'static const' value would fail to compile. + # Work around this by chasing the aliases to get the actual value. + while numVal is None: + alias = self.registry.tree.find(f"enums/enum[@name='{strVal}']") + if alias is not None: + (numVal, strVal) = self.enumToValue(alias, True, bitwidth, True) + else: + self.logMsg('error', f'No such alias {strVal} for enum {name}') + decl += f"static const {flagTypeName} {name} = {strVal};\n" + + if numVal is not None: + body += decl + else: + aliasText += decl + + if protect is not None: + body += '#endif\n' + + # Now append the non-numeric enumerant values + body += aliasText + + # Postfix + + return ("bitmask", body) + + def buildEnumCDecl_Enum(self, expand, groupinfo, groupName): + """Generate the C declaration for an enumerated type""" + groupElem = groupinfo.elem + + # Break the group name into prefix and suffix portions for range + # enum generation + expandName = re.sub(r'([0-9]+|[a-z_])([A-Z0-9])', r'\1_\2', groupName).upper() + expandPrefix = expandName + expandSuffix = '' + expandSuffixMatch = re.search(r'[A-Z][A-Z]+$', groupName) + if expandSuffixMatch: + expandSuffix = f"_{expandSuffixMatch.group()}" + # Strip off the suffix from the prefix + expandPrefix = expandName.rsplit(expandSuffix, 1)[0] + + # Prefix + body = ["typedef enum %s {" % groupName] + + # @@ Should use the type="bitmask" attribute instead + isEnum = ('FLAG_BITS' not in expandPrefix) + + # Allowable range for a C enum - which is that of a signed 32-bit integer + maxValidValue = 2**(32 - 1) - 1 + minValidValue = (maxValidValue * -1) - 1 + + # Get a list of nested 'enum' tags. + enums = groupElem.findall('enum') + + # Check for and report duplicates, and return a list with them + # removed. + enums = self.checkDuplicateEnums(enums) + + # Loop over the nested 'enum' tags. Keep track of the minimum and + # maximum numeric values, if they can be determined; but only for + # core API enumerants, not extension enumerants. This is inferred + # by looking for 'extends' attributes. + minName = None + + # Accumulate non-numeric enumerant values separately and append + # them following the numeric values, to allow for aliases. + # NOTE: this does not do a topological sort yet, so aliases of + # aliases can still get in the wrong order. + aliasText = [] + + maxName = None + minValue = None + maxValue = None + for elem in enums: + # Convert the value to an integer and use that to track min/max. + # Values of form -(number) are accepted but nothing more complex. + # Should catch exceptions here for more complex constructs. Not yet. + (numVal, strVal) = self.enumToValue(elem, True) + name = elem.get('name') + + # Extension enumerants are only included if they are required + if self.isEnumRequired(elem): + decl = '' + + protect = elem.get('protect') + if protect is not None: + decl += f'#ifdef {protect}\n' + + + decl += self.genRequirements(name, mustBeFound = False, indent = 2) + decl += self.deprecationComment(elem, indent = 2) + decl += f' {name} = {strVal},' + + if protect is not None: + decl += '\n#endif' + + if numVal is not None: + body.append(decl) + else: + aliasText.append(decl) + + # Range check for the enum value + if numVal is not None and (numVal > maxValidValue or numVal < minValidValue): + self.logMsg('error', 'Allowable range for C enum types is [', minValidValue, ',', maxValidValue, '], but', name, 'has a value outside of this (', strVal, ')\n') + exit(1) + + # Do not track min/max for non-numbers (numVal is None) + if isEnum and numVal is not None and elem.get('extends') is None: + if minName is None: + minName = maxName = name + minValue = maxValue = numVal + elif minValue is None or numVal < minValue: + minName = name + minValue = numVal + elif maxValue is None or numVal > maxValue: + maxName = name + maxValue = numVal + + # Now append the non-numeric enumerant values + body.extend(aliasText) + + # Generate min/max value tokens - legacy use case. + if isEnum and expand: + body.extend((f' {expandPrefix}_BEGIN_RANGE{expandSuffix} = {minName},', + f' {expandPrefix}_END_RANGE{expandSuffix} = {maxName},', + f' {expandPrefix}_RANGE_SIZE{expandSuffix} = ({maxName} - {minName} + 1),')) + + # Generate a range-padding value to ensure the enum is 32 bits, but + # only in code generators, so it does not appear in documentation + if (self.genOpts.codeGenerator or + self.conventions.generate_max_enum_in_docs): + body.append(f' {expandPrefix}_MAX_ENUM{expandSuffix} = 0x7FFFFFFF') + + # Postfix + body.append("} %s;" % groupName) + + # Determine appropriate section for this declaration + if groupElem.get('type') == 'bitmask': + section = 'bitmask' + else: + section = 'group' + + return (section, '\n'.join(body)) + + def buildConstantCDecl(self, enuminfo, name, alias): + """Generate the C declaration for a constant (a single + value). + + tags may specify their values in several ways, but are + usually just integers or floating-point numbers.""" + + (_, strVal) = self.enumToValue(enuminfo.elem, False) + + if self.misracppstyle() and enuminfo.elem.get('type') and not alias: + # Generate e.g.: static constexpr uint32_t x = ~static_cast(1U); + # This appeases MISRA "underlying type" rules. + typeStr = enuminfo.elem.get('type'); + invert = '~' in strVal + number = strVal.strip("()~UL") + if typeStr != "float": + number += 'U' + strVal = "~" if invert else "" + strVal += f"static_cast<{typeStr}>({number})" + body = f"static constexpr {typeStr.ljust(9)}{name.ljust(33)} {{{strVal}}};" + elif enuminfo.elem.get('type') and not alias: + # Generate e.g.: #define x (~0ULL) + typeStr = enuminfo.elem.get('type'); + invert = '~' in strVal + paren = '(' in strVal + number = strVal.strip("()~UL") + if typeStr != "float": + if typeStr == "uint64_t": + number += 'ULL' + else: + number += 'U' + strVal = "~" if invert else "" + strVal += number + if paren: + strVal = f"({strVal})"; + body = f"#define {name.ljust(33)} {strVal}"; + else: + body = f"#define {name.ljust(33)} {strVal}" + + return body + + def makeDir(self, path): + """Create a directory, if not already done. + + Generally called from derived generators creating hierarchies.""" + self.logMsg('diag', 'OutputGenerator::makeDir(', path, ')') + if path not in self.madeDirs: + # This can get race conditions with multiple writers, see + # https://stackoverflow.com/questions/273192/ + if not os.path.exists(path): + os.makedirs(path) + self.madeDirs[path] = None + + def beginFile(self, genOpts): + """Start a new interface file + + - genOpts - GeneratorOptions controlling what is generated and how""" + + self.genOpts = genOpts + if self.genOpts is None: + raise MissingGeneratorOptionsError() + if self.genOpts.conventions is None: + raise MissingGeneratorOptionsConventionsError() + self.should_insert_may_alias_macro = \ + self.genOpts.conventions.should_insert_may_alias_macro(self.genOpts) + self.file_suffix = self.genOpts.conventions.file_suffix + + # Try to import the API dictionary, apimap.py, if it exists. Nothing + # in apimap.py cannot be extracted directly from the XML, and in the + # future we should do that. + if self.genOpts.genpath is not None: + try: + sys.path.insert(0, self.genOpts.genpath) + import apimap + self.apidict = apimap + except ImportError: + self.apidict = None + + self.conventions = genOpts.conventions + + # Open a temporary file for accumulating output. + if self.genOpts.filename is not None: + self.outFile = tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', newline='\n', delete=False) + else: + self.outFile = sys.stdout + + def endFile(self): + if self.errFile: + self.errFile.flush() + if self.warnFile: + self.warnFile.flush() + if self.diagFile: + self.diagFile.flush() + if self.outFile: + self.outFile.flush() + if self.outFile != sys.stdout and self.outFile != sys.stderr: + self.outFile.close() + + if self.genOpts is None: + raise MissingGeneratorOptionsError() + + # On successfully generating output, move the temporary file to the + # target file. + if self.genOpts.filename is not None: + directory = Path(self.genOpts.directory) + if sys.platform == 'win32': + if not Path.exists(directory): + os.makedirs(directory) + shutil.copy(self.outFile.name, directory / self.genOpts.filename) + os.remove(self.outFile.name) + self.genOpts = None + + def beginFeature(self, interface, emit): + """Write interface for a feature and tag generated features as having been done. + + - interface - element for the `` / `` to generate + - emit - actually write to the header only when True""" + self.emit = emit + self.featureName = interface.get('name') + # If there is an additional 'protect' attribute in the feature, save it + self.featureExtraProtect = interface.get('protect') + + def endFeature(self): + """Finish an interface file, closing it when done. + + Derived classes responsible for emitting feature""" + self.featureName = None + self.featureExtraProtect = None + + def genRequirements(self, name, mustBeFound = True, indent = 0): + """Generate text showing what core versions and extensions introduce + an API. This exists in the base Generator class because it is used by + the shared enumerant-generating interfaces (buildEnumCDecl, etc.). + Here it returns an empty string for most generators, but can be + overridden by e.g. DocGenerator. + + - name - name of the API + - mustBeFound - If True, when requirements for 'name' cannot be + determined, a warning comment is generated. + """ + + return '' + + def validateFeature(self, featureType, featureName): + """Validate we are generating something only inside a `` tag""" + if self.featureName is None: + raise UserWarning('Attempt to generate', featureType, + featureName, 'when not in feature') + + def genType(self, typeinfo, name, alias): + """Generate interface for a type + + - typeinfo - TypeInfo for a type + + Extend to generate as desired in your derived class.""" + self.validateFeature('type', name) + + def genStruct(self, typeinfo, typeName, alias): + """Generate interface for a C "struct" type. + + - typeinfo - TypeInfo for a type interpreted as a struct + + Extend to generate as desired in your derived class.""" + self.validateFeature('struct', typeName) + + # The mixed-mode tags may contain no-op tags. + # It is convenient to remove them here where all output generators + # will benefit. + for member in typeinfo.elem.findall('.//member'): + for comment in member.findall('comment'): + member.remove(comment) + + def genGroup(self, groupinfo, groupName, alias): + """Generate interface for a group of enums (C "enum") + + - groupinfo - GroupInfo for a group. + + Extend to generate as desired in your derived class.""" + + self.validateFeature('group', groupName) + + def genEnum(self, enuminfo, typeName, alias): + """Generate interface for an enum (constant). + + - enuminfo - EnumInfo for an enum + - name - enum name + + Extend to generate as desired in your derived class.""" + self.validateFeature('enum', typeName) + + def genCmd(self, cmd, cmdinfo, alias): + """Generate interface for a command. + + - cmdinfo - CmdInfo for a command + + Extend to generate as desired in your derived class.""" + self.validateFeature('command', cmdinfo) + + def genSpirv(self, spirv, spirvinfo, alias): + """Generate interface for a spirv element. + + - spirvinfo - SpirvInfo for a command + + Extend to generate as desired in your derived class.""" + return + + def genFormat(self, format, formatinfo, alias): + """Generate interface for a format element. + + - formatinfo - FormatInfo + + Extend to generate as desired in your derived class.""" + return + + def genSyncStage(self, stageinfo): + """Generate interface for a sync stage element. + + - stageinfo - SyncStageInfo + + Extend to generate as desired in your derived class.""" + return + + def genSyncAccess(self, accessinfo): + """Generate interface for a sync stage element. + + - accessinfo - AccessInfo + + Extend to generate as desired in your derived class.""" + return + + def genSyncPipeline(self, pipelineinfo): + """Generate interface for a sync stage element. + + - pipelineinfo - SyncPipelineInfo + + Extend to generate as desired in your derived class.""" + return + + def makeProtoName(self, name, tail): + """Turn a `` `` into C-language prototype + and typedef declarations for that name. + + - name - contents of `` tag + - tail - whatever text follows that tag in the Element""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + return self.genOpts.apientry + name + tail + + def makeTypedefName(self, name, tail): + """Make the function-pointer typedef name for a command.""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + return f"({self.genOpts.apientryp}PFN_{name}{tail})" + + def makeCParamDecl(self, param, aligncol): + """Return a string which is an indented, formatted + declaration for a `` or `` block (e.g. function parameter + or structure/union member). + + - param - Element (`` or ``) to format + - aligncol - if non-zero, attempt to align the nested `` element + at this column""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + if self.genOpts.conventions is None: + raise MissingGeneratorOptionsConventionsError() + indent = ' ' + paramdecl = indent + prefix = noneStr(param.text) + + for elem in param: + text = noneStr(elem.text) + tail = noneStr(elem.tail) + + if self.should_insert_may_alias_macro and self.genOpts.conventions.is_voidpointer_alias(elem.tag, text, tail): + # OpenXR-specific macro insertion - but not in apiinc for the spec + tail = self.genOpts.conventions.make_voidpointer_alias(tail) + if elem.tag == 'name' and aligncol > 0: + self.logMsg('diag', 'Aligning parameter', elem.text, 'to column', self.genOpts.alignFuncParam) + # Align at specified column, if possible + paramdecl = paramdecl.rstrip() + oldLen = len(paramdecl) + # This works around a problem where very long type names - + # longer than the alignment column - would run into the tail + # text. + paramdecl = f"{paramdecl.ljust(aligncol - 1)} " + newLen = len(paramdecl) + self.logMsg('diag', 'Adjust length of parameter decl from', oldLen, 'to', newLen, ':', paramdecl) + + if (self.misracppstyle() and prefix.find('const ') != -1): + # Change pointer type order from e.g. "const void *" to "void const *". + # If the string starts with 'const', reorder it to be after the first type. + paramdecl += f"{prefix.replace('const ', '') + text} const{tail}" + else: + paramdecl += prefix + text + tail + + # Clear prefix for subsequent iterations + prefix = '' + + paramdecl = paramdecl + prefix + + if aligncol == 0: + # Squeeze out multiple spaces other than the indentation + paramdecl = indent + ' '.join(paramdecl.split()) + return paramdecl + + def getCParamTypeLength(self, param): + """Return the length of the type field is an indented, formatted + declaration for a `` or `` block (e.g. function parameter + or structure/union member). + + - param - Element (`` or ``) to identify""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + if self.genOpts.conventions is None: + raise MissingGeneratorOptionsConventionsError() + + # Allow for missing tag + newLen = 0 + paramdecl = f" {noneStr(param.text)}" + for elem in param: + text = noneStr(elem.text) + tail = noneStr(elem.tail) + + if self.should_insert_may_alias_macro and self.genOpts.conventions.is_voidpointer_alias(elem.tag, text, tail): + # OpenXR-specific macro insertion + tail = self.genOpts.conventions.make_voidpointer_alias(tail) + if elem.tag == 'name': + # Align at specified column, if possible + newLen = len(paramdecl.rstrip()) + self.logMsg('diag', 'Identifying length of', elem.text, 'as', newLen) + paramdecl += text + tail + + return newLen + + def getMaxCParamTypeLength(self, info): + """Return the length of the longest type field for a member/parameter. + + - info - TypeInfo or CommandInfo. + """ + lengths = (self.getCParamTypeLength(member) + for member in info.getMembers()) + return max(lengths) + + def getHandleParent(self, typename): + """Get the parent of a handle object.""" + if self.registry is None: + raise MissingRegistryError() + + info = self.registry.typedict.get(typename) + if info is None: + return None + + elem = info.elem + if elem is not None: + return elem.get('parent') + + return None + + def iterateHandleAncestors(self, typename): + """Iterate through the ancestors of a handle type.""" + current = self.getHandleParent(typename) + while current is not None: + yield current + current = self.getHandleParent(current) + + def getHandleAncestors(self, typename): + """Get the ancestors of a handle object.""" + return list(self.iterateHandleAncestors(typename)) + + def getTypeCategory(self, typename): + """Get the category of a type.""" + if self.registry is None: + raise MissingRegistryError() + + info = self.registry.typedict.get(typename) + if info is None: + return None + + elem = info.elem + if elem is not None: + return elem.get('category') + return None + + def isStructAlwaysValid(self, structname): + """Try to do check if a structure is always considered valid (i.e. there is no rules to its acceptance).""" + # A conventions object is required for this call. + if not self.conventions: + raise RuntimeError("To use isStructAlwaysValid, be sure your options include a Conventions object.") + if self.registry is None: + raise MissingRegistryError() + + if self.conventions.type_always_valid(structname): + return True + + category = self.getTypeCategory(structname) + if self.conventions.category_requires_validation(category): + return False + + info = self.registry.typedict.get(structname) + if info is None: + self.logMsg('error', f'isStructAlwaysValid({structname}) - structure not found in typedict') + + members = info.getMembers() + + for member in members: + member_name = getElemName(member) + if member_name in (self.conventions.structtype_member_name, + self.conventions.nextpointer_member_name): + return False + + if member.get('noautovalidity'): + return False + + member_type = getElemType(member) + + if member_type in ('void', 'char') or self.paramIsArray(member) or self.paramIsPointer(member): + return False + + if self.conventions.type_always_valid(member_type): + continue + + member_category = self.getTypeCategory(member_type) + + if self.conventions.category_requires_validation(member_category): + return False + + if member_category in ('struct', 'union'): + if self.isStructAlwaysValid(member_type) is False: + return False + + return True + + def paramIsArray(self, param): + """Check if the parameter passed in is a pointer to an array. + + param the XML information for the param + """ + return param.get('len') is not None + + def paramIsPointer(self, param): + """Check if the parameter passed in is a pointer. + + param the XML information for the param + """ + tail = param.find('type').tail + return tail is not None and '*' in tail + + def isEnumRequired(self, elem): + """Return True if this `` element is + required, False otherwise + + - elem - `` element to test""" + required = elem.get('required') is not None + self.logMsg('diag', 'isEnumRequired:', elem.get('name'), + '->', required) + return required + + # @@@ This code is overridden by equivalent code now run in + # @@@ Registry.generateFeature + + required = False + + extname = elem.get('extname') + if extname is not None: + # 'supported' attribute was injected when the element was + # moved into the group in Registry.parseTree() + if self.genOpts.defaultExtensions == elem.get('supported'): + required = True + elif re.match(self.genOpts.addExtensions, extname) is not None: + required = True + elif elem.get('version') is not None: + required = re.match(self.genOpts.emitversions, elem.get('version')) is not None + else: + required = True + + return required + + def makeCDecls(self, cmd): + """Return C prototype and function pointer typedef for a + `` Element, as a two-element list of strings. + + - cmd - Element containing a `` tag""" + if self.genOpts is None: + raise MissingGeneratorOptionsError() + proto = cmd.find('proto') + params = cmd.findall('param') + # Begin accumulating prototype and typedef strings + pdecl = self.genOpts.apicall + tdecl = 'typedef ' + + # Insert the function return type/name. + # For prototypes, add APIENTRY macro before the name + # For typedefs, add (APIENTRY *) around the name and + # use the PFN_cmdnameproc naming convention. + # Done by walking the tree for element by element. + # etree has elem.text followed by (elem[i], elem[i].tail) + # for each child element and any following text + # Leading text + pdecl += noneStr(proto.text) + tdecl += noneStr(proto.text) + # For each child element, if it is a wrap in appropriate + # declaration. Otherwise append its contents and tail contents. + for elem in proto: + text = noneStr(elem.text) + tail = noneStr(elem.tail) + if elem.tag == 'name': + pdecl += self.makeProtoName(text, tail) + tdecl += self.makeTypedefName(text, tail) + else: + pdecl += text + tail + tdecl += text + tail + + if self.genOpts.alignFuncParam == 0: + # Squeeze out multiple spaces - there is no indentation + pdecl = ' '.join(pdecl.split()) + tdecl = ' '.join(tdecl.split()) + + # Now add the parameter declaration list, which is identical + # for prototypes and typedefs. Concatenate all the text from + # a node without the tags. No tree walking required + # since all tags are ignored. + # Uses: self.indentFuncProto + # self.indentFuncPointer + # self.alignFuncParam + n = len(params) + # Indented parameters + if n > 0: + indentdecl = '(\n' + indentdecl += ',\n'.join(self.makeCParamDecl(p, self.genOpts.alignFuncParam) + for p in params) + indentdecl += ');' + else: + indentdecl = '(void);' + # Non-indented parameters + paramdecl = '(' + if n > 0: + paramnames = [] + if self.misracppstyle(): + for p in params: + param = '' + firstIter = True; + for t in p.itertext(): + if (firstIter): + prefix = t + firstIter = False + else: + # Change pointer type order from e.g. "const void *" to "void const *". + # If the string starts with 'const', reorder it to be after the first type. + if (prefix.find('const ') != -1): + param += f"{prefix.replace('const ', '') + t} const " + else: + param += prefix + t + # Clear prefix for subsequent iterations + prefix = '' + paramnames.append(param); + else: + paramnames = (''.join(t for t in p.itertext()) + for p in params) + paramdecl += ', '.join(paramnames) + else: + paramdecl += 'void' + paramdecl += ");" + + return [pdecl + indentdecl, tdecl + paramdecl] + + def newline(self): + """Print a newline to the output file (utility function)""" + write('', file=self.outFile) + + def setRegistry(self, registry): + self.registry = registry diff --git a/local/recipes/libs/vulkan-headers/source/registry/parse_dependency.py b/local/recipes/libs/vulkan-headers/source/registry/parse_dependency.py new file mode 100755 index 0000000000..37bd682660 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/parse_dependency.py @@ -0,0 +1,404 @@ +#!/usr/bin/env python3 + +# Copyright 2022-2025 The Khronos Group Inc. +# Copyright 2003-2019 Paul McGuire +# SPDX-License-Identifier: MIT + +# apirequirements.py - parse 'depends' expressions in API XML +# Supported methods: +# dependency - the expression string +# +# evaluateDependency(dependency, isSupported) evaluates the expression, +# returning a boolean result. isSupported takes an extension or version name +# string and returns a boolean. +# +# dependencyLanguage(dependency) returns an English string equivalent +# to the expression, suitable for header file comments. +# +# dependencyNames(dependency) returns a set of the extension and +# version names in the expression. +# +# dependencyMarkup(dependency) returns a string containing asciidoctor +# markup for English equivalent to the expression, suitable for extension +# appendices. +# +# All may throw a ParseException if the expression cannot be parsed or is +# not completely consumed by parsing. + +# Supported expressions at present: +# - extension names +# - '+' as AND connector +# - ',' as OR connector +# - parenthesization for grouping + +# Based on `examples/fourFn.py` from the +# https://github.com/pyparsing/pyparsing/ repository. + +from pyparsing import ( + Literal, + Word, + Group, + Forward, + alphas, + alphanums, + Regex, + ParseException, + CaselessKeyword, + Suppress, + delimitedList, + infixNotation, +) +import math +import operator +import pyparsing as pp +import re + +from apiconventions import APIConventions as APIConventions +conventions = APIConventions() + +def markupPassthrough(name): + """Pass a name (leaf or operator) through without applying markup""" + return name + +def leafMarkupAsciidoc(name): + """Markup a leaf name as an asciidoc link to an API version or extension + anchor. + + - name - version or extension name""" + + return conventions.formatVersionOrExtension(name) + +def leafMarkupC(name): + """Markup a leaf name as a C expression, using conventions of the + Vulkan Validation Layers + + - name - version or extension name""" + + (apivariant, major, minor) = apiVersionNameMatch(name) + + if apivariant is not None: + return name + else: + return f'ext.{name}' + +opMarkupAsciidocMap = { '+' : 'and', ',' : 'or' } + +def opMarkupAsciidoc(op): + """Markup an operator as an asciidoc spec markup equivalent + + - op - operator ('+' or ',')""" + + return opMarkupAsciidocMap[op] + +opMarkupCMap = { '+' : '&&', ',' : '||' } + +def opMarkupC(op): + """Markup an operator as a C language equivalent + + - op - operator ('+' or ',')""" + + return opMarkupCMap[op] + + +# Unfortunately global to be used in pyparsing +exprStack = [] + +def push_first(toks): + """Push a token on the global stack + + - toks - first element is the token to push""" + + exprStack.append(toks[0]) + +# An identifier (version, feature boolean, or extension name) +dependencyIdent = Word(f"{alphanums}_:") + +# Infix expression for depends expressions +dependencyExpr = pp.infixNotation(dependencyIdent, + [ (pp.oneOf(', +'), 2, pp.opAssoc.LEFT), ]) + +# BNF grammar for depends expressions +_bnf = None +def dependencyBNF(): + """ + boolop :: '+' | ',' + extname :: Char(alphas) + atom :: extname | '(' expr ')' + expr :: atom [ boolop atom ]* + """ + global _bnf + if _bnf is None: + and_, or_ = map(Literal, '+,') + lpar, rpar = map(Suppress, '()') + boolop = and_ | or_ + + expr = Forward() + expr_list = delimitedList(Group(expr)) + atom = ( + boolop[...] + + ( + (dependencyIdent).setParseAction(push_first) + | Group(lpar + expr + rpar) + ) + ) + + expr <<= atom + (boolop + atom).setParseAction(push_first)[...] + _bnf = expr + return _bnf + + +# map operator symbols to corresponding arithmetic operations +_opn = { + '+': operator.and_, + ',': operator.or_, +} + +def evaluateStack(stack, isSupported): + """Evaluate an expression stack, returning a boolean result. + + - stack - the stack + - isSupported - function taking a version or extension name string and + returning True or False if that name is supported or not.""" + + op, num_args = stack.pop(), 0 + if isinstance(op, tuple): + op, num_args = op + + if op in '+,': + # Note: operands are pushed onto the stack in reverse order + op2 = evaluateStack(stack, isSupported) + op1 = evaluateStack(stack, isSupported) + return _opn[op](op1, op2) + elif op[0].isalpha(): + return isSupported(op) + else: + raise Exception(f'invalid op: {op}') + +def evaluateDependency(dependency, isSupported): + """Evaluate a dependency expression, returning a boolean result. + + - dependency - the expression + - isSupported - function taking a version or extension name string and + returning True or False if that name is supported or not.""" + + global exprStack + exprStack = [] + results = dependencyBNF().parseString(dependency, parseAll=True) + val = evaluateStack(exprStack[:], isSupported) + return val + +def evalDependencyLanguage(stack, leafMarkup, opMarkup, parenthesize, root): + """Evaluate an expression stack, returning an English equivalent + + - stack - the stack + - leafMarkup, opMarkup, parenthesize - same as dependencyLanguage + - root - True only if this is the outer (root) expression level""" + + op, num_args = stack.pop(), 0 + if isinstance(op, tuple): + op, num_args = op + if op in '+,': + # Could parenthesize, not needed yet + rhs = evalDependencyLanguage(stack, leafMarkup, opMarkup, parenthesize, root = False) + opname = opMarkup(op) + lhs = evalDependencyLanguage(stack, leafMarkup, opMarkup, parenthesize, root = False) + if parenthesize and not root: + return f'({lhs} {opname} {rhs})' + else: + return f'{lhs} {opname} {rhs}' + elif op[0].isalpha(): + # This is an extension or feature name + return leafMarkup(op) + else: + raise Exception(f'invalid op: {op}') + +def dependencyLanguage(dependency, leafMarkup, opMarkup, parenthesize): + """Return an API dependency expression translated to a form suitable for + asciidoctor conditionals or header file comments. + + - dependency - the expression + - leafMarkup - function taking an extension / version name and + returning an equivalent marked up version + - opMarkup - function taking an operator ('+' / ',') name name and + returning an equivalent marked up version + - parenthesize - True if parentheses should be used in the resulting + expression, False otherwise""" + + global exprStack + exprStack = [] + results = dependencyBNF().parseString(dependency, parseAll=True) + return evalDependencyLanguage(exprStack, leafMarkup, opMarkup, parenthesize, root = True) + +# aka specmacros = False +def dependencyLanguageComment(dependency): + """Return dependency expression translated to a form suitable for + comments in headers of emitted C code, as used by the + docgenerator.""" + return dependencyLanguage(dependency, leafMarkup = markupPassthrough, opMarkup = opMarkupAsciidoc, parenthesize = True) + +# aka specmacros = True +def dependencyLanguageSpecMacros(dependency): + """Return dependency expression translated to a form suitable for + comments in headers of emitted C code, as used by the + interfacegenerator.""" + return dependencyLanguage(dependency, leafMarkup = leafMarkupAsciidoc, opMarkup = opMarkupAsciidoc, parenthesize = False) + +def dependencyLanguageC(dependency): + """Return dependency expression translated to a form suitable for + use in C expressions""" + return dependencyLanguage(dependency, leafMarkup = leafMarkupC, opMarkup = opMarkupC, parenthesize = True) + +def evalDependencyNames(stack): + """Evaluate an expression stack, returning the set of extension and + feature names used in the expression. + + - stack - the stack""" + + op, num_args = stack.pop(), 0 + if isinstance(op, tuple): + op, num_args = op + if op in '+,': + # Do not evaluate the operation. We only care about the names. + return evalDependencyNames(stack) | evalDependencyNames(stack) + elif op[0].isalpha(): + return { op } + else: + raise Exception(f'invalid op: {op}') + +def dependencyNames(dependency): + """Return a set of the extension and version names in an API dependency + expression. Used when determining transitive dependencies for spec + generation with specific extensions included. + + - dependency - the expression""" + + global exprStack + exprStack = [] + results = dependencyBNF().parseString(dependency, parseAll=True) + # print(f'names(): stack = {exprStack}') + return evalDependencyNames(exprStack) + +def markupTraverse(expr, level = 0, root = True): + """Recursively process a dependency in infix form, transforming it into + asciidoctor markup with expression nesting indicated by indentation + level. + + - expr - expression to process + - level - indentation level to render expression at + - root - True only on initial call""" + + if level > 0: + prefix = f"{'{nbsp}{nbsp}' * level * 2} " + else: + prefix = '' + str = '' + + for elem in expr: + if isinstance(elem, pp.ParseResults): + if not root: + nextlevel = level + 1 + else: + # Do not indent the outer expression + nextlevel = level + + str = str + markupTraverse(elem, level = nextlevel, root = False) + elif elem in ('+', ','): + str = f"{str}{prefix}{opMarkupAsciidoc(elem)} +\n" + else: + str = f"{str}{prefix}{leafMarkupAsciidoc(elem)} +\n" + + return str + +def dependencyMarkup(dependency): + """Return asciidoctor markup for a human-readable equivalent of an API + dependency expression, suitable for use in extension appendix + metadata. + + - dependency - the expression""" + + parsed = dependencyExpr.parseString(dependency) + return markupTraverse(parsed) + +if __name__ == "__main__": + for str in [ 'VK_VERSION_1_0', 'cl_khr_extension_name', 'XR_VERSION_3_2', 'CL_VERSION_1_0' ]: + print(f'{str} -> {conventions.formatVersionOrExtension(str)}') + import sys + sys.exit(0) + + termdict = { + 'VK_VERSION_1_1' : True, + 'false' : False, + 'true' : True, + } + termSupported = lambda name: name in termdict and termdict[name] + + def test(dependency, expected): + val = False + try: + val = evaluateDependency(dependency, termSupported) + except ParseException as pe: + print(dependency, f'failed parse: {dependency}') + except Exception as e: + print(dependency, f'failed eval: {dependency}') + + if val == expected: + True + # print(f'{dependency} = {val} (as expected)') + else: + print(f'{dependency} ERROR: {val} != {expected}') + + # Verify expressions are evaluated left-to-right + + test('false,false+false', False) + test('false,false+true', False) + test('false,true+false', False) + test('false,true+true', True) + test('true,false+false', False) + test('true,false+true', True) + test('true,true+false', False) + test('true,true+true', True) + + test('false,(false+false)', False) + test('false,(false+true)', False) + test('false,(true+false)', False) + test('false,(true+true)', True) + test('true,(false+false)', True) + test('true,(false+true)', True) + test('true,(true+false)', True) + test('true,(true+true)', True) + + + test('false+false,false', False) + test('false+false,true', True) + test('false+true,false', False) + test('false+true,true', True) + test('true+false,false', False) + test('true+false,true', True) + test('true+true,false', True) + test('true+true,true', True) + + test('false+(false,false)', False) + test('false+(false,true)', False) + test('false+(true,false)', False) + test('false+(true,true)', False) + test('true+(false,false)', False) + test('true+(false,true)', True) + test('true+(true,false)', True) + test('true+(true,true)', True) + + # Check formatting + for dependency in [ + #'true', + #'true+true+false', + 'true+false', + 'true+(true+false),(false,true)', + #'true+((true+false),(false,true))', + 'VK_VERSION_1_0+VK_KHR_display', + #'VK_VERSION_1_1+(true,false)', + ]: + print(f'expr = {dependency}\n{dependencyMarkup(dependency)}') + print(f' spec language = {dependencyLanguageSpecMacros(dependency)}') + print(f' comment language = {dependencyLanguageComment(dependency)}') + print(f' C language = {dependencyLanguageC(dependency)}') + print(f' names = {dependencyNames(dependency)}') + print(f' value = {evaluateDependency(dependency, termSupported)}') diff --git a/local/recipes/libs/vulkan-headers/source/registry/profiles/VP_KHR_roadmap.json b/local/recipes/libs/vulkan-headers/source/registry/profiles/VP_KHR_roadmap.json new file mode 100644 index 0000000000..e7a8500556 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/profiles/VP_KHR_roadmap.json @@ -0,0 +1,390 @@ +{ + "$schema": "https://schema.khronos.org/vulkan/profiles-0.8.2-276.json#", + "capabilities": { + "vulkan10requirements": { + "features": { + "VkPhysicalDeviceFeatures": { + "robustBufferAccess": true + } + } + }, + "vulkan11requirements": { + "features": { + "VkPhysicalDeviceVulkan11Features": { + "multiview": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan11Properties": { + "maxMultiviewViewCount": 6, + "maxMultiviewInstanceIndex": 134217727 + } + } + }, + "vulkan12requirements": { + "features": { + "VkPhysicalDeviceVulkan12Features": { + "uniformBufferStandardLayout": true, + "subgroupBroadcastDynamicId": true, + "imagelessFramebuffer": true, + "separateDepthStencilLayouts": true, + "hostQueryReset": true, + "timelineSemaphore": true, + "shaderSubgroupExtendedTypes": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan12Properties": { + "maxTimelineSemaphoreValueDifference": 2147483647 + } + } + }, + "vulkan13requirements": { + "features": { + "VkPhysicalDeviceVulkan12Features": { + "vulkanMemoryModel": true, + "vulkanMemoryModelDeviceScope": true, + "bufferDeviceAddress": true + }, + "VkPhysicalDeviceVulkan13Features": { + "robustImageAccess": true, + "shaderTerminateInvocation": true, + "shaderZeroInitializeWorkgroupMemory": true, + "synchronization2": true, + "shaderIntegerDotProduct": true, + "maintenance4": true, + "pipelineCreationCacheControl": true, + "subgroupSizeControl": true, + "computeFullSubgroups": true, + "shaderDemoteToHelperInvocation": true, + "inlineUniformBlock": true, + "dynamicRendering": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan13Properties": { + "maxBufferSize": 1073741824, + "maxInlineUniformBlockSize": 256, + "maxPerStageDescriptorInlineUniformBlocks": 4, + "maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks": 4, + "maxDescriptorSetInlineUniformBlocks": 4, + "maxDescriptorSetUpdateAfterBindInlineUniformBlocks": 4, + "maxInlineUniformTotalSize": 256 + } + } + }, + "vulkan10requirements_roadmap2022": { + "features": { + "VkPhysicalDeviceFeatures": { + "fullDrawIndexUint32": true, + "imageCubeArray": true, + "independentBlend": true, + "sampleRateShading": true, + "drawIndirectFirstInstance": true, + "depthClamp": true, + "depthBiasClamp": true, + "samplerAnisotropy": true, + "occlusionQueryPrecise": true, + "fragmentStoresAndAtomics": true, + "shaderStorageImageExtendedFormats": true, + "shaderUniformBufferArrayDynamicIndexing": true, + "shaderSampledImageArrayDynamicIndexing": true, + "shaderStorageBufferArrayDynamicIndexing": true, + "shaderStorageImageArrayDynamicIndexing": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { + "maxImageDimension1D": 8192, + "maxImageDimension2D": 8192, + "maxImageDimensionCube": 8192, + "maxImageArrayLayers": 2048, + "maxUniformBufferRange": 65536, + "bufferImageGranularity": 4096, + "maxPerStageDescriptorSamplers": 64, + "maxPerStageDescriptorUniformBuffers": 15, + "maxPerStageDescriptorStorageBuffers": 30, + "maxPerStageDescriptorSampledImages": 200, + "maxPerStageDescriptorStorageImages": 16, + "maxPerStageResources": 200, + "maxDescriptorSetSamplers": 576, + "maxDescriptorSetUniformBuffers": 90, + "maxDescriptorSetStorageBuffers": 96, + "maxDescriptorSetSampledImages": 1800, + "maxDescriptorSetStorageImages": 144, + "maxFragmentCombinedOutputResources": 16, + "maxComputeWorkGroupInvocations": 256, + "maxComputeWorkGroupSize": [ 256, 256, 64 ], + "subTexelPrecisionBits": 8, + "mipmapPrecisionBits": 6, + "maxSamplerLodBias": 14, + "standardSampleLocations": true, + "maxColorAttachments": 7 + } + } + } + }, + "vulkan10optionals_roadmap2022": { + "features": { + "VkPhysicalDeviceFeatures": { + "largePoints": true, + "wideLines": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { + "pointSizeGranularity": 0.125, + "lineWidthGranularity": 0.5 + } + } + } + }, + "vulkan11requirements_roadmap2022": { + "features": { + "VkPhysicalDeviceVulkan11Features": { + "samplerYcbcrConversion": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan11Properties": { + "subgroupSize": 4, + "subgroupSupportedStages": [ "VK_SHADER_STAGE_COMPUTE_BIT", "VK_SHADER_STAGE_FRAGMENT_BIT" ], + "subgroupSupportedOperations": [ "VK_SUBGROUP_FEATURE_BASIC_BIT", "VK_SUBGROUP_FEATURE_VOTE_BIT", "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT", "VK_SUBGROUP_FEATURE_BALLOT_BIT", "VK_SUBGROUP_FEATURE_SHUFFLE_BIT", "VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT", "VK_SUBGROUP_FEATURE_QUAD_BIT" ] + } + } + }, + "vulkan12requirements_roadmap2022": { + "features": { + "VkPhysicalDeviceVulkan12Features": { + "samplerMirrorClampToEdge": true, + "descriptorIndexing": true, + "shaderUniformTexelBufferArrayDynamicIndexing": true, + "shaderStorageTexelBufferArrayDynamicIndexing": true, + "shaderUniformBufferArrayNonUniformIndexing": true, + "shaderSampledImageArrayNonUniformIndexing": true, + "shaderStorageBufferArrayNonUniformIndexing": true, + "shaderStorageImageArrayNonUniformIndexing": true, + "shaderUniformTexelBufferArrayNonUniformIndexing": true, + "shaderStorageTexelBufferArrayNonUniformIndexing": true, + "descriptorBindingSampledImageUpdateAfterBind": true, + "descriptorBindingStorageImageUpdateAfterBind": true, + "descriptorBindingStorageBufferUpdateAfterBind": true, + "descriptorBindingUniformTexelBufferUpdateAfterBind": true, + "descriptorBindingStorageTexelBufferUpdateAfterBind": true, + "descriptorBindingUpdateUnusedWhilePending": true, + "descriptorBindingPartiallyBound": true, + "descriptorBindingVariableDescriptorCount": true, + "runtimeDescriptorArray": true, + "scalarBlockLayout": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan12Properties": { + "shaderSignedZeroInfNanPreserveFloat16": true, + "shaderSignedZeroInfNanPreserveFloat32": true, + "maxPerStageDescriptorUpdateAfterBindSamplers": 500000, + "maxPerStageDescriptorUpdateAfterBindUniformBuffers": 12, + "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 500000, + "maxPerStageDescriptorUpdateAfterBindSampledImages": 500000, + "maxPerStageDescriptorUpdateAfterBindStorageImages": 500000, + "maxPerStageDescriptorUpdateAfterBindInputAttachments": 7, + "maxPerStageUpdateAfterBindResources": 500000, + "maxDescriptorSetUpdateAfterBindSamplers": 500000, + "maxDescriptorSetUpdateAfterBindUniformBuffers": 72, + "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic": 8, + "maxDescriptorSetUpdateAfterBindStorageBuffers": 500000, + "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic": 4, + "maxDescriptorSetUpdateAfterBindSampledImages": 500000, + "maxDescriptorSetUpdateAfterBindStorageImages": 500000, + "maxDescriptorSetUpdateAfterBindInputAttachments": 7 + } + } + }, + "vulkan13requirements_roadmap2022": { + "extensions": { + "VK_KHR_global_priority": 1 + }, + "features": { + "VkPhysicalDeviceVulkan13Features": { + "descriptorBindingInlineUniformBlockUpdateAfterBind": true + } + } + }, + "vulkan10requirements_roadmap2024": { + "features": { + "VkPhysicalDeviceFeatures": { + "multiDrawIndirect": true, + "shaderInt16": true, + "shaderImageGatherExtended": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { + "timestampComputeAndGraphics": true, + "maxColorAttachments": 8, + "maxBoundDescriptorSets": 7 + } + } + } + }, + "vulkan11requirements_roadmap2024": { + "features": { + "VkPhysicalDeviceVulkan11Features": { + "shaderDrawParameters": true, + "storageBuffer16BitAccess": true + } + } + }, + "vulkan12requirements_roadmap2024": { + "features": { + "VkPhysicalDeviceVulkan12Features": { + "shaderInt8": true, + "shaderFloat16": true, + "storageBuffer8BitAccess": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan12Properties": { + "shaderRoundingModeRTEFloat16": true, + "shaderRoundingModeRTEFloat32": true + } + } + }, + "vulkan13requirements_roadmap2024": { + "features": { + "VkPhysicalDeviceVulkan13Features": { + } + }, + "properties": { + "VkPhysicalDeviceVulkan13Properties": { + } + } + }, + "vulkanextensionrequirements_roadmap2024": { + "extensions": { + "VK_KHR_dynamic_rendering_local_read": 1, + "VK_KHR_load_store_op_none": 1, + "VK_KHR_shader_quad_control": 1, + "VK_KHR_shader_maximal_reconvergence": 1, + "VK_KHR_shader_subgroup_uniform_control_flow": 1, + "VK_KHR_shader_subgroup_rotate": 1, + "VK_KHR_shader_float_controls2": 1, + "VK_KHR_shader_expect_assume": 1, + "VK_KHR_line_rasterization": 1, + "VK_KHR_vertex_attribute_divisor": 1, + "VK_KHR_index_type_uint8": 1, + "VK_KHR_map_memory2": 1, + "VK_KHR_maintenance5": 1, + "VK_KHR_push_descriptor": 1 + } + } + }, + "profiles": { + "VP_KHR_roadmap_2024": { + "version": 1, + "api-version": "1.3.276", + "label": "Khronos Vulkan Roadmap 2024 profile", + "description": "This roadmap profile is intended to be supported by newer devices shipping in 2024 across mainstream smartphone, tablet, laptops, console and desktop devices.", + "profiles": [ + "VP_KHR_roadmap_2022" + ], + "capabilities": [ + "vulkan10requirements_roadmap2024", + "vulkan11requirements_roadmap2024", + "vulkan12requirements_roadmap2024", + "vulkan13requirements_roadmap2024", + "vulkanextensionrequirements_roadmap2024" + ] + }, + "VP_KHR_roadmap_2022": { + "version": 1, + "api-version": "1.3.204", + "label": "Khronos Vulkan Roadmap 2022 profile", + "description": "This roadmap profile is intended to be supported by newer devices shipping in 2022 across mainstream smartphone, tablet, laptops, console and desktop devices.", + "contributors": { + "Tobias Hector": { + "company": "AMD", + "email": "tobias.hector@amd.com", + "contact": true + }, + "Christophe Riccio": { + "company": "LunarG", + "email": "christophe@lunarg.com", + "contact": true + } + }, + "history": [ + { + "revision": 9, + "date": "2024-01-16", + "author": "Tobias Hector", + "comment": "Add Roadmap 2024 profile" + }, + { + "revision": 8, + "date": "2023-11-02", + "author": "Christophe Riccio", + "comment": "Remove unreferenced capabilities blocks that were written against Vulkan 1.2 for testing before Vulkan 1.3 was released" + }, + { + "revision": 7, + "date": "2022-11-16", + "author": "Christophe Riccio", + "comment": "Fix wideLines and largePoints that are optionals" + }, + { + "revision": 6, + "date": "2022-11-02", + "author": "Christophe Riccio", + "comment": "Fix roadmap 2022 maxInlineUniformTotalSize limit, 256 instead of 4" + }, + { + "revision": 5, + "date": "2022-05-02", + "author": "Christophe Riccio", + "comment": "Add missing dynamicRendering that is a Vulkan 1.3 requirement" + }, + { + "revision": 4, + "date": "2022-03-08", + "author": "Christophe Riccio", + "comment": "Refactor requirements per Vulkan API version" + }, + { + "revision": 3, + "date": "2022-03-08", + "author": "Christophe Riccio", + "comment": "Fix Vulkan 1.3.204 API version requirement" + }, + { + "revision": 2, + "date": "2022-01-03", + "author": "Christophe Riccio", + "comment": "Rebase against Vulkan 1.3.203 revision" + }, + { + "revision": 1, + "date": "2021-12-08", + "author": "Christophe Riccio", + "comment": "Initial revision" + } + ], + "capabilities": [ + "vulkan10requirements", + "vulkan10requirements_roadmap2022", + "vulkan11requirements", + "vulkan11requirements_roadmap2022", + "vulkan12requirements", + "vulkan12requirements_roadmap2022", + "vulkan13requirements", + "vulkan13requirements_roadmap2022" + ], + "optionals": [ + "vulkan10optionals_roadmap2022" + ] + } + } +} diff --git a/local/recipes/libs/vulkan-headers/source/registry/reg.py b/local/recipes/libs/vulkan-headers/source/registry/reg.py new file mode 100644 index 0000000000..14183af15f --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/reg.py @@ -0,0 +1,1885 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2013-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +"""Types and classes for manipulating an API registry.""" + +import copy +import re +import sys +import xml.etree.ElementTree as etree +from collections import defaultdict, deque, namedtuple + +from generator import GeneratorOptions, OutputGenerator, noneStr, write +from apiconventions import APIConventions + +def apiNameMatch(str, supported): + """Return whether a required api name matches a pattern specified for an + XML 'api' attribute or 'supported' attribute. + + - str - API name such as 'vulkan' or 'openxr'. May be None, in which + case it never matches (this should not happen). + - supported - comma-separated list of XML API names. May be None, in + which case str always matches (this is the usual case).""" + + if str is not None: + return supported is None or str in supported.split(',') + + # Fallthrough case - either str is None or the test failed + return False + +def matchAPIProfile(api, profile, elem): + """Return whether an API and profile + being generated matches an element's profile + + - api - string naming the API to match + - profile - string naming the profile to match + - elem - Element which (may) have 'api' and 'profile' + attributes to match to. + + If a tag is not present in the Element, the corresponding API + or profile always matches. + + Otherwise, the tag must exactly match the API or profile. + + Thus, if 'profile' = core: + + - `` with no attribute will match + - `` will match + - `` will not match + + Possible match conditions: + + ``` + Requested Element + Profile Profile + --------- -------- + None None Always matches + 'string' None Always matches + None 'string' Does not match. Cannot generate multiple APIs + or profiles, so if an API/profile constraint + is present, it must be asked for explicitly. + 'string' 'string' Strings must match + ``` + + ** In the future, we will allow regexes for the attributes, + not just strings, so that `api="^(gl|gles2)"` will match. Even + this is not really quite enough, we might prefer something + like `"gl(core)|gles1(common-lite)"`.""" + # Match 'api', if present + elem_api = elem.get('api') + if elem_api: + if api is None: + raise UserWarning("No API requested, but 'api' attribute is present with value '" + + elem_api + "'") + elif api != elem_api: + # Requested API does not match attribute + return False + elem_profile = elem.get('profile') + if elem_profile: + if profile is None: + raise UserWarning("No profile requested, but 'profile' attribute is present with value '" + + elem_profile + "'") + elif profile != elem_profile: + # Requested profile does not match attribute + return False + return True + + +def mergeAPIs(tree, fromApiNames, toApiName): + """Merge multiple APIs using the precedence order specified in apiNames. + Also deletes elements. + + tree - Element at the root of the hierarchy to merge. + apiNames - list of strings of API names.""" + + stack = deque() + stack.append(tree) + + while len(stack) > 0: + parent = stack.pop() + + for child in parent.findall('*'): + if child.tag == 'remove': + # Remove elements + parent.remove(child) + else: + stack.append(child) + + supportedList = child.get('supported') + if supportedList: + supportedList = supportedList.split(',') + for apiName in [toApiName] + fromApiNames: + if apiName in supportedList: + child.set('supported', toApiName) + + if child.get('api'): + definitionName = None + definitionVariants = [] + + # Keep only one definition with the same name if there are multiple definitions + if child.tag in ['type']: + if child.get('name') is not None: + definitionName = child.get('name') + definitionVariants = parent.findall(f"{child.tag}[@name='{definitionName}']") + else: + definitionName = child.find('name').text + definitionVariants = parent.findall(f"{child.tag}/name[.='{definitionName}']/..") + elif child.tag in ['member', 'param']: + definitionName = child.find('name').text + definitionVariants = parent.findall(f"{child.tag}/name[.='{definitionName}']/..") + elif child.tag in ['enum', 'feature']: + definitionName = child.get('name') + definitionVariants = parent.findall(f"{child.tag}[@name='{definitionName}']") + elif child.tag in ['require']: + # No way to correlate require tags because they do not have a definite identifier in the way they + # are used in the latest forms of the XML so the best we can do is simply enable all of them + if child.get('api') in fromApiNames: + child.set('api', toApiName) + elif child.tag in ['command']: + definitionName = child.find('proto/name').text + definitionVariants = parent.findall(f"{child.tag}/proto/name[.='{definitionName}']/../..") + + if definitionName: + bestMatchApi = None + requires = None + for apiName in [toApiName] + fromApiNames: + for variant in definitionVariants: + # Keep any requires attributes from the target API + if variant.get('requires') and variant.get('api') == apiName: + requires = variant.get('requires') + # Find the best matching definition + if apiName in variant.get('api').split(',') and bestMatchApi is None: + bestMatchApi = variant.get('api') + + if bestMatchApi: + for variant in definitionVariants: + if variant.get('api') != bestMatchApi: + # Only keep best matching definition + parent.remove(variant) + else: + # Add requires attribute from the target API if it is not overridden + if requires is not None and variant.get('requires') is None: + variant.set('requires', requires) + variant.set('api', toApiName) + + +def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True): + """Remove tree Elements with 'api' attributes matching apiName. + + tree - Element at the root of the hierarchy to strip. Only its + children can actually be removed, not the tree itself. + apiName - string which much match a command-separated component of + the 'api' attribute. + actuallyDelete - only delete matching elements if True.""" + + stack = deque() + stack.append(tree) + + while len(stack) > 0: + parent = stack.pop() + + for child in parent.findall('*'): + api = child.get('api') + + if apiNameMatch(apiName, api): + # Add child to the queue + stack.append(child) + elif not apiNameMatch(apiName, api): + # Child does not match requested api. Remove it. + if actuallyDelete: + parent.remove(child) + + +class BaseInfo: + """Base class for information about a registry feature + (type/group/enum/command/API/extension). + + Represents the state of a registry feature, used during API generation. + """ + + def __init__(self, elem): + self.required = False + """should this feature be defined during header generation + (has it been removed by a profile or version)?""" + + self.declared = False + "has this feature been defined already?" + + self.elem = elem + "etree Element for this feature" + + self.deprecatedbyversion = None + self.deprecatedbyextensions = [] + self.deprecatedlink = None + + def resetState(self): + """Reset required/declared to initial values. Used + prior to generating a new API interface.""" + self.required = False + self.declared = False + + def compareKeys(self, info, key, required = False): + """Return True if self.elem and info.elem have the same attribute + value for key. + If 'required' is not True, also returns True if neither element + has an attribute value for key.""" + + if required and key not in self.elem.keys(): + return False + return self.elem.get(key) == info.elem.get(key) + + def compareElem(self, info, infoName): + """Return True if self.elem and info.elem have the same definition. + info - the other object + infoName - 'type' / 'group' / 'enum' / 'command' / 'feature' / + 'extension'""" + + if infoName == 'enum': + if self.compareKeys(info, 'extends'): + # Either both extend the same type, or no type + if (self.compareKeys(info, 'value', required = True) or + self.compareKeys(info, 'bitpos', required = True)): + # If both specify the same value or bit position, + # they are equal + return True + elif (self.compareKeys(info, 'extnumber') and + self.compareKeys(info, 'offset') and + self.compareKeys(info, 'dir')): + # If both specify the same relative offset, they are equal + return True + elif (self.compareKeys(info, 'alias')): + # If both are aliases of the same value + return True + else: + return False + else: + # The same enum cannot extend two different types + return False + else: + # Non-s should never be redefined + return False + + +class TypeInfo(BaseInfo): + """Registry information about a type. No additional state + beyond BaseInfo is required.""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + self.additionalValidity = [] + self.removedValidity = [] + + def getMembers(self): + """Get a collection of all member elements for this type, if any.""" + return self.elem.findall('member') + + def resetState(self): + BaseInfo.resetState(self) + self.additionalValidity = [] + self.removedValidity = [] + + +class GroupInfo(BaseInfo): + """Registry information about a group of related enums + in an block, generally corresponding to a C "enum" type.""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + + +class EnumInfo(BaseInfo): + """Registry information about an enum""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + self.type = elem.get('type') + """numeric type of the value of the tag + ( '' for GLint, 'u' for GLuint, 'ull' for GLuint64 )""" + if self.type is None: + self.type = '' + + +class CmdInfo(BaseInfo): + """Registry information about a command""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + self.additionalValidity = [] + self.removedValidity = [] + + def getParams(self): + """Get a collection of all param elements for this command, if any.""" + return self.elem.findall('param') + + def resetState(self): + BaseInfo.resetState(self) + self.additionalValidity = [] + self.removedValidity = [] + + +class FeatureInfo(BaseInfo): + """Registry information about an API + or .""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + self.name = elem.get('name') + "feature name string (e.g. 'VK_KHR_surface')" + + self.emit = False + "has this feature been defined already?" + + self.sortorder = int(elem.get('sortorder', 0)) + """explicit numeric sort key within feature and extension groups. + Defaults to 0.""" + + # Determine element category (vendor). Only works + # for elements. + if elem.tag == 'feature': + # Element category (vendor) is meaningless for + self.category = 'VERSION' + """category, e.g. VERSION or khr/vendor tag""" + + self.version = elem.get('name') + """feature name string""" + + self.versionNumber = elem.get('number') + """versionNumber - API version number, taken from the 'number' + attribute of . Extensions do not have API version + numbers and are assigned number 0.""" + + self.number = 0 + self.supported = None + + self.deprecates = elem.findall('deprecate') + else: + # Extract vendor portion of __ + self.category = self.name.split('_', 2)[1] + self.version = "0" + self.versionNumber = "0" + + self.number = int(elem.get('number','0')) + """extension number, used for ordering and for assigning + enumerant offsets. features do not have extension + numbers and are assigned number 0, as are extensions without + numbers, so sorting works.""" + + self.supported = elem.get('supported', 'disabled') + +class SpirvInfo(BaseInfo): + """Registry information about an API + or .""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + +class FormatInfo(BaseInfo): + """Registry information about an API .""" + + def __init__(self, elem, condition): + BaseInfo.__init__(self, elem) + # Need to save the condition here when it is known + self.condition = condition + +class SyncStageInfo(BaseInfo): + """Registry information about .""" + + def __init__(self, elem, condition): + BaseInfo.__init__(self, elem) + # Need to save the condition here when it is known + self.condition = condition + +class SyncAccessInfo(BaseInfo): + """Registry information about .""" + + def __init__(self, elem, condition): + BaseInfo.__init__(self, elem) + # Need to save the condition here when it is known + self.condition = condition + +class SyncPipelineInfo(BaseInfo): + """Registry information about .""" + + def __init__(self, elem): + BaseInfo.__init__(self, elem) + +class Registry: + """Object representing an API registry, loaded from an XML file.""" + + def __init__(self, gen=None, genOpts=None): + if gen is None: + # If not specified, give a default object so messaging will work + self.gen = OutputGenerator() + else: + self.gen = gen + "Output generator used to write headers / messages" + + if genOpts is None: + # If no generator is provided, we may still need the XML API name + # (for example, in genRef.py). + self.genOpts = GeneratorOptions(apiname = APIConventions().xml_api_name) + else: + self.genOpts = genOpts + "Options controlling features to write and how to format them" + + self.gen.registry = self + self.gen.genOpts = self.genOpts + self.gen.genOpts.registry = self + + self.tree = None + "ElementTree containing the root ``" + + self.typedict = {} + "dictionary of TypeInfo objects keyed by type name" + + self.groupdict = {} + "dictionary of GroupInfo objects keyed by group name" + + self.enumdict = {} + "dictionary of EnumInfo objects keyed by enum name" + + self.cmddict = {} + "dictionary of CmdInfo objects keyed by command name" + + self.aliasdict = {} + "dictionary of type and command names mapped to their alias, such as VkFooKHR -> VkFoo" + + self.enumvaluedict = {} + "dictionary of enum values mapped to their type, such as VK_FOO_VALUE -> VkFoo" + + self.apidict = {} + "dictionary of FeatureInfo objects for `` elements keyed by API name" + + self.extensions = [] + "list of `` Elements" + + self.extdict = {} + "dictionary of FeatureInfo objects for `` elements keyed by extension name" + + self.spirvextdict = {} + "dictionary of FeatureInfo objects for `` elements keyed by spirv extension name" + + self.spirvcapdict = {} + "dictionary of FeatureInfo objects for `` elements keyed by spirv capability name" + + self.formatsdict = {} + "dictionary of FeatureInfo objects for `` elements keyed by VkFormat name" + + self.syncstagedict = {} + "dictionary of Sync*Info objects for `` elements keyed by VkPipelineStageFlagBits2 name" + + self.syncaccessdict = {} + "dictionary of Sync*Info objects for `` elements keyed by VkAccessFlagBits2 name" + + self.syncpipelinedict = {} + "dictionary of Sync*Info objects for `` elements keyed by pipeline type name" + + self.emitFeatures = False + """True to actually emit features for a version / extension, + or False to just treat them as emitted""" + + self.breakPat = None + "regexp pattern to break on when generating names" + # self.breakPat = re.compile('VkFenceImportFlagBits.*') + + self.requiredextensions = [] # Hack - can remove it after validity generator goes away + + # ** Global types for automatic source generation ** + # Length Member data + self.commandextensiontuple = namedtuple('commandextensiontuple', + ['command', # The name of the command being modified + 'value', # The value to append to the command + 'extension']) # The name of the extension that added it + self.validextensionstructs = defaultdict(list) + self.commandextensionsuccesses = [] + self.commandextensionerrors = [] + + self.filename = None + + def loadElementTree(self, tree): + """Load ElementTree into a Registry object and parse it.""" + self.tree = tree + self.parseTree() + + def loadFile(self, file): + """Load an API registry XML file into a Registry object and parse it""" + self.filename = file + self.tree = etree.parse(file) + self.parseTree() + + def setGenerator(self, gen): + """Specify output generator object. + + `None` restores the default generator.""" + self.gen = gen + self.gen.setRegistry(self) + + def addElementInfo(self, elem, info, infoName, dictionary): + """Add information about an element to the corresponding dictionary. + + Intended for internal use only. + + - elem - ``/``/``/``/``/``/``/``/``/``/``/`` Element + - info - corresponding {Type|Group|Enum|Cmd|Feature|Spirv|Format|SyncStage|SyncAccess|SyncPipeline}Info object + - infoName - 'type' / 'group' / 'enum' / 'command' / 'feature' / 'extension' / 'spirvextension' / 'spirvcapability' / 'format' / 'syncstage' / 'syncaccess' / 'syncpipeline' + - dictionary - self.{type|group|enum|cmd|api|ext|format|spirvext|spirvcap|sync}dict + + The dictionary key is the element 'name' attribute.""" + + # self.gen.logMsg('diag', 'Adding ElementInfo.required =', + # info.required, 'name =', elem.get('name')) + key = elem.get('name') + if key in dictionary: + if not dictionary[key].compareElem(info, infoName): + self.gen.logMsg('warn', 'Attempt to redefine', key, + '(this should not happen)') + else: + dictionary[key] = info + + def lookupElementInfo(self, fname, dictionary): + """Find a {Type|Enum|Cmd}Info object by name. + + Intended for internal use only. + + If an object qualified by API name exists, use that. + + - fname - name of type / enum / command + - dictionary - self.{type|enum|cmd}dict""" + key = (fname, self.genOpts.apiname) + if key in dictionary: + # self.gen.logMsg('diag', 'Found API-specific element for feature', fname) + return dictionary[key] + if fname in dictionary: + # self.gen.logMsg('diag', 'Found generic element for feature', fname) + return dictionary[fname] + + return None + + def breakOnName(self, regexp): + """Specify a feature name regexp to break on when generating features.""" + self.breakPat = re.compile(regexp) + + def addEnumValue(self, enum, type_name): + """Track aliasing and map back from enum values to their type""" + # Record alias, if any + value = enum.get('name') + alias = enum.get('alias') + if alias: + self.aliasdict[value] = alias + # Map the value back to the type + if type_name in self.aliasdict: + type_name = self.aliasdict[type_name] + if value in self.enumvaluedict: + # Some times the same enum is defined by multiple extensions + assert(type_name == self.enumvaluedict[value]) + else: + self.enumvaluedict[value] = type_name + + def parseTree(self): + """Parse the registry Element, once created""" + # This must be the Element for the root + if self.tree is None: + raise RuntimeError("Tree not initialized!") + self.reg = self.tree.getroot() + + # Preprocess the tree in one of the following ways: + # - either merge a set of APIs to another API based on their 'api' attributes + # - or remove all elements with non-matching 'api' attributes + # The preprocessing happens through a breath-first tree traversal. + # This is a blunt hammer, but eliminates the need to track and test + # the apis deeper in processing to select the correct elements and + # avoid duplicates. + # Schema validation should prevent duplicate elements with + # overlapping api attributes, or where one element has an api + # attribute and the other does not. + + if self.genOpts.mergeApiNames: + mergeAPIs(self.reg, self.genOpts.mergeApiNames.split(','), self.genOpts.apiname) + else: + stripNonmatchingAPIs(self.reg, self.genOpts.apiname, actuallyDelete = True) + + self.aliasdict = {} + self.enumvaluedict = {} + + # Create dictionary of registry types from toplevel tags + # and add 'name' attribute to each tag (where missing) + # based on its element. + # + # There is usually one block; more are OK + # Required attributes: 'name' or nested tag contents + self.typedict = {} + for type_elem in self.reg.findall('types/type'): + # If the does not already have a 'name' attribute, set + # it from contents of its tag. + name = type_elem.get('name') + if name is None: + name_elem = type_elem.find('name') + if name_elem is None or not name_elem.text: + raise RuntimeError("Type without a name!") + name = name_elem.text + type_elem.set('name', name) + self.addElementInfo(type_elem, TypeInfo(type_elem), 'type', self.typedict) + + # Record alias, if any + alias = type_elem.get('alias') + if alias: + self.aliasdict[name] = alias + + # Create dictionary of registry enum groups from tags. + # + # Required attributes: 'name'. If no name is given, one is + # generated, but that group cannot be identified and turned into an + # enum type definition - it is just a container for tags. + self.groupdict = {} + for group in self.reg.findall('enums'): + self.addElementInfo(group, GroupInfo(group), 'group', self.groupdict) + + # Create dictionary of registry enums from tags + # + # tags usually define different namespaces for the values + # defined in those tags, but the actual names all share the + # same dictionary. + # Required attributes: 'name', 'value' + # For containing which have type="enum" or type="bitmask", + # tag all contained s are required. This is a stopgap until + # a better scheme for tagging core and extension enums is created. + self.enumdict = {} + for enums in self.reg.findall('enums'): + required = (enums.get('type') is not None) + type_name = enums.get('name') + # Enum values are defined only for the type that is not aliased to something else. + assert(type_name not in self.aliasdict) + for enum in enums.findall('enum'): + enumInfo = EnumInfo(enum) + enumInfo.required = required + self.addElementInfo(enum, enumInfo, 'enum', self.enumdict) + self.addEnumValue(enum, type_name) + + # Create dictionary of registry commands from tags + # and add 'name' attribute to each tag (where missing) + # based on its element. + # + # There is usually only one block; more are OK. + # Required attributes: 'name' or tag contents + self.cmddict = {} + # List of commands which alias others. Contains + # [ name, aliasName, element ] + # for each alias + cmdAlias = [] + for cmd in self.reg.findall('commands/command'): + # If the does not already have a 'name' attribute, set + # it from contents of its tag. + name = cmd.get('name') + if name is None: + name_elem = cmd.find('proto/name') + if name_elem is None or not name_elem.text: + raise RuntimeError("Command without a name!") + name = cmd.set('name', name_elem.text) + ci = CmdInfo(cmd) + self.addElementInfo(cmd, ci, 'command', self.cmddict) + alias = cmd.get('alias') + if alias: + cmdAlias.append([name, alias, cmd]) + self.aliasdict[name] = alias + + # Now loop over aliases, injecting a copy of the aliased command's + # Element with the aliased prototype name replaced with the command + # name - if it exists. + # Copy the 'export' sttribute (whether it exists or not) from the + # original, aliased command, since that can be different for a + # command and its alias. + for (name, alias, cmd) in cmdAlias: + if alias in self.cmddict: + aliasInfo = self.cmddict[alias] + cmdElem = copy.deepcopy(aliasInfo.elem) + cmdElem.find('proto/name').text = name + cmdElem.set('name', name) + cmdElem.set('alias', alias) + export = cmd.get('export') + if export is not None: + # Replicate the command's 'export' attribute + cmdElem.set('export', export) + elif cmdElem.get('export') is not None: + # Remove the 'export' attribute, if the alias has one but + # the command does not. + del cmdElem.attrib['export'] + ci = CmdInfo(cmdElem) + # Replace the dictionary entry for the CmdInfo element + self.cmddict[name] = ci + + # @ newString = etree.tostring(base, encoding="unicode").replace(aliasValue, aliasName) + # @elem.append(etree.fromstring(replacement)) + else: + self.gen.logMsg('warn', 'No matching found for command', + cmd.get('name'), 'alias', alias) + + # Create dictionaries of API and extension interfaces + # from toplevel and tags. + self.apidict = {} + format_condition = dict() + for feature in self.reg.findall('feature'): + featureInfo = FeatureInfo(feature) + self.addElementInfo(feature, featureInfo, 'feature', self.apidict) + + # Add additional enums defined only in tags + # to the corresponding enumerated type. + # When seen here, the element, processed to contain the + # numeric enum value, is added to the corresponding + # element, as well as adding to the enum dictionary. It is no + # longer removed from the element it is introduced in. + # Instead, generateRequiredInterface ignores elements + # that extend enumerated types. + # + # For tags which are actually just constants, if there is + # no 'extends' tag but there is a 'value' or 'bitpos' tag, just + # add an EnumInfo record to the dictionary. That works because + # output generation of constants is purely dependency-based, and + # does not need to iterate through the XML tags. + for elem in feature.findall('require'): + for enum in elem.findall('enum'): + addEnumInfo = False + groupName = enum.get('extends') + if groupName is not None: + # self.gen.logMsg('diag', 'Found extension enum', + # enum.get('name')) + # Add version number attribute to the element + enum.set('version', featureInfo.version) + # Look up the GroupInfo with matching groupName + if groupName in self.groupdict: + # self.gen.logMsg('diag', 'Matching group', + # groupName, 'found, adding element...') + gi = self.groupdict[groupName] + gi.elem.append(copy.deepcopy(enum)) + else: + self.gen.logMsg('warn', 'NO matching group', + groupName, 'for enum', enum.get('name'), 'found.') + if groupName == "VkFormat": + format_name = enum.get('name') + if enum.get('alias'): + format_name = enum.get('alias') + format_condition[format_name] = featureInfo.name + addEnumInfo = True + elif enum.get('value') or enum.get('bitpos') or enum.get('alias'): + # self.gen.logMsg('diag', 'Adding extension constant "enum"', + # enum.get('name')) + addEnumInfo = True + if addEnumInfo: + enumInfo = EnumInfo(enum) + self.addElementInfo(enum, enumInfo, 'enum', self.enumdict) + self.addEnumValue(enum, groupName) + + sync_pipeline_stage_condition = dict() + sync_access_condition = dict() + + self.extensions = self.reg.findall('extensions/extension') + self.extdict = {} + for feature in self.extensions: + featureInfo = FeatureInfo(feature) + self.addElementInfo(feature, featureInfo, 'extension', self.extdict) + + # Add additional enums defined only in tags + # to the corresponding core type. + # Algorithm matches that of enums in a "feature" tag as above. + # + # This code also adds a 'extnumber' attribute containing the + # extension number, used for enumerant value calculation. + for elem in feature.findall('require'): + for enum in elem.findall('enum'): + addEnumInfo = False + groupName = enum.get('extends') + if groupName is not None: + # self.gen.logMsg('diag', 'Found extension enum', + # enum.get('name')) + + # Add block's extension number attribute to + # the element unless specified explicitly, such + # as when redefining an enum in another extension. + extnumber = enum.get('extnumber') + if not extnumber: + enum.set('extnumber', str(featureInfo.number)) + + enum.set('extname', featureInfo.name) + enum.set('supported', noneStr(featureInfo.supported)) + # Look up the GroupInfo with matching groupName + if groupName in self.groupdict: + # self.gen.logMsg('diag', 'Matching group', + # groupName, 'found, adding element...') + gi = self.groupdict[groupName] + gi.elem.append(copy.deepcopy(enum)) + else: + self.gen.logMsg('warn', 'NO matching group', + groupName, 'for enum', enum.get('name'), 'found.') + # This is Vulkan-specific + if groupName == "VkFormat": + format_name = enum.get('name') + if enum.get('alias'): + format_name = enum.get('alias') + if format_name in format_condition: + format_condition[format_name] += f",{featureInfo.name}" + else: + format_condition[format_name] = featureInfo.name + elif groupName == "VkPipelineStageFlagBits2": + stage_flag = enum.get('name') + if enum.get('alias'): + stage_flag = enum.get('alias') + featureName = elem.get('depends') if elem.get('depends') is not None else featureInfo.name + if stage_flag in sync_pipeline_stage_condition: + sync_pipeline_stage_condition[stage_flag] += f",{featureName}" + else: + sync_pipeline_stage_condition[stage_flag] = featureName + elif groupName == "VkAccessFlagBits2": + access_flag = enum.get('name') + if enum.get('alias'): + access_flag = enum.get('alias') + featureName = elem.get('depends') if elem.get('depends') is not None else featureInfo.name + if access_flag in sync_access_condition: + sync_access_condition[access_flag] += f",{featureName}" + else: + sync_access_condition[access_flag] = featureName + + addEnumInfo = True + elif enum.get('value') or enum.get('bitpos') or enum.get('alias'): + # self.gen.logMsg('diag', 'Adding extension constant "enum"', + # enum.get('name')) + addEnumInfo = True + if addEnumInfo: + enumInfo = EnumInfo(enum) + self.addElementInfo(enum, enumInfo, 'enum', self.enumdict) + self.addEnumValue(enum, groupName) + + # Parse out all spirv tags in dictionaries + # Use addElementInfo to catch duplicates + for spirv in self.reg.findall('spirvextensions/spirvextension'): + spirvInfo = SpirvInfo(spirv) + self.addElementInfo(spirv, spirvInfo, 'spirvextension', self.spirvextdict) + for spirv in self.reg.findall('spirvcapabilities/spirvcapability'): + spirvInfo = SpirvInfo(spirv) + self.addElementInfo(spirv, spirvInfo, 'spirvcapability', self.spirvcapdict) + + for format in self.reg.findall('formats/format'): + condition = None + format_name = format.get('name') + if format_name in format_condition: + condition = format_condition[format_name] + formatInfo = FormatInfo(format, condition) + self.addElementInfo(format, formatInfo, 'format', self.formatsdict) + + for stage in self.reg.findall('sync/syncstage'): + condition = None + stage_flag = stage.get('name') + if stage_flag in sync_pipeline_stage_condition: + condition = sync_pipeline_stage_condition[stage_flag] + syncInfo = SyncStageInfo(stage, condition) + self.addElementInfo(stage, syncInfo, 'syncstage', self.syncstagedict) + + for access in self.reg.findall('sync/syncaccess'): + condition = None + access_flag = access.get('name') + if access_flag in sync_access_condition: + condition = sync_access_condition[access_flag] + syncInfo = SyncAccessInfo(access, condition) + self.addElementInfo(access, syncInfo, 'syncaccess', self.syncaccessdict) + + for pipeline in self.reg.findall('sync/syncpipeline'): + syncInfo = SyncPipelineInfo(pipeline) + self.addElementInfo(pipeline, syncInfo, 'syncpipeline', self.syncpipelinedict) + + def dumpReg(self, maxlen=120, filehandle=sys.stdout): + """Dump all the dictionaries constructed from the Registry object. + + Diagnostic to dump the dictionaries to specified file handle (default stdout). + Truncates type / enum / command elements to maxlen characters (default 120)""" + write('***************************************', file=filehandle) + write(' ** Dumping Registry contents **', file=filehandle) + write('***************************************', file=filehandle) + write('// Types', file=filehandle) + for name in self.typedict: + tobj = self.typedict[name] + write(' Type', name, '->', etree.tostring(tobj.elem)[0:maxlen], file=filehandle) + write('// Groups', file=filehandle) + for name in self.groupdict: + gobj = self.groupdict[name] + write(' Group', name, '->', etree.tostring(gobj.elem)[0:maxlen], file=filehandle) + write('// Enums', file=filehandle) + for name in self.enumdict: + eobj = self.enumdict[name] + write(' Enum', name, '->', etree.tostring(eobj.elem)[0:maxlen], file=filehandle) + write('// Commands', file=filehandle) + for name in self.cmddict: + cobj = self.cmddict[name] + write(' Command', name, '->', etree.tostring(cobj.elem)[0:maxlen], file=filehandle) + write('// APIs', file=filehandle) + for key in self.apidict: + write(' API Version ', key, '->', + etree.tostring(self.apidict[key].elem)[0:maxlen], file=filehandle) + write('// Extensions', file=filehandle) + for key in self.extdict: + write(' Extension', key, '->', + etree.tostring(self.extdict[key].elem)[0:maxlen], file=filehandle) + write('// SPIR-V', file=filehandle) + for key in self.spirvextdict: + write(' SPIR-V Extension', key, '->', + etree.tostring(self.spirvextdict[key].elem)[0:maxlen], file=filehandle) + for key in self.spirvcapdict: + write(' SPIR-V Capability', key, '->', + etree.tostring(self.spirvcapdict[key].elem)[0:maxlen], file=filehandle) + write('// VkFormat', file=filehandle) + for key in self.formatsdict: + write(' VkFormat', key, '->', + etree.tostring(self.formatsdict[key].elem)[0:maxlen], file=filehandle) + + def markTypeRequired(self, typename, required): + """Require (along with its dependencies) or remove (but not its dependencies) a type. + + - typename - name of type + - required - boolean (to tag features as required or not) + """ + self.gen.logMsg('diag', 'tagging type:', typename, '-> required =', required) + + # Get TypeInfo object for tag corresponding to typename + typeinfo = self.lookupElementInfo(typename, self.typedict) + if typeinfo is not None: + if required: + # Tag type dependencies in 'alias' and 'required' attributes as + # required. This does not un-tag dependencies in a + # tag. See comments in markRequired() below for the reason. + for attrib_name in ['requires', 'alias']: + depname = typeinfo.elem.get(attrib_name) + if depname: + self.gen.logMsg('diag', 'Generating dependent type', + depname, 'for', attrib_name, 'type', typename) + # Do not recurse on self-referential structures. + if typename != depname: + self.markTypeRequired(depname, required) + else: + self.gen.logMsg('diag', 'type', typename, 'is self-referential') + # Tag types used in defining this type (e.g. in nested + # tags) + # Look for in entire tree, + # not just immediate children + for subtype in typeinfo.elem.findall('.//type'): + self.gen.logMsg('diag', 'markRequired: type requires dependent ', subtype.text) + if typename != subtype.text: + self.markTypeRequired(subtype.text, required) + else: + self.gen.logMsg('diag', 'type', typename, 'is self-referential') + # Tag enums used in defining this type, for example in + # member[MEMBER_SIZE] + for subenum in typeinfo.elem.findall('.//enum'): + self.gen.logMsg('diag', 'markRequired: type requires dependent ', subenum.text) + self.markEnumRequired(subenum.text, required) + # Tag type dependency in 'bitvalues' attributes as + # required. This ensures that the bit values for a flag + # are emitted + depType = typeinfo.elem.get('bitvalues') + if depType: + self.gen.logMsg('diag', 'Generating bitflag type', + depType, 'for type', typename) + self.markTypeRequired(depType, required) + group = self.lookupElementInfo(depType, self.groupdict) + if group is not None: + group.flagType = typeinfo + + typeinfo.required = required + elif '.h' not in typename: + self.gen.logMsg('warn', 'type:', typename, 'IS NOT DEFINED') + + def markEnumRequired(self, enumname, required): + """Mark an enum as required or not. + + - enumname - name of enum + - required - boolean (to tag features as required or not)""" + + self.gen.logMsg('diag', 'markEnumRequired: tagging enum:', enumname, '-> required =', required) + enum = self.lookupElementInfo(enumname, self.enumdict) + if enum is not None: + # If the enum is part of a group, and is being removed, then + # look it up in that tag and remove the Element there, + # so that it is not visible to generators (which traverse the + # tag elements rather than using the dictionaries). + if not required: + groupName = enum.elem.get('extends') + if groupName is not None: + self.gen.logMsg('diag', f'markEnumRequired: Removing extending enum {enum.elem.get("name")}') + + # Look up the Info with matching groupName + if groupName in self.groupdict: + gi = self.groupdict[groupName] + gienum = gi.elem.find(f"enum[@name='{enumname}']") + if gienum is not None: + # Remove copy of this enum from the group + gi.elem.remove(gienum) + else: + self.gen.logMsg('warn', 'markEnumRequired: Cannot remove enum', + enumname, 'not found in group', + groupName) + else: + self.gen.logMsg('warn', 'markEnumRequired: Cannot remove enum', + enumname, 'from nonexistent group', + groupName) + else: + # This enum is not an extending enum. + # The XML tree must be searched for all that + # might have it, so we know the parent to delete from. + + enumName = enum.elem.get('name') + + self.gen.logMsg('diag', f'markEnumRequired: Removing non-extending enum {enumName}') + + count = 0 + for enums in self.reg.findall('enums'): + for thisEnum in enums.findall('enum'): + if thisEnum.get('name') == enumName: + # Actually remove it + count = count + 1 + enums.remove(thisEnum) + + if count == 0: + self.gen.logMsg('warn', f'markEnumRequired: {enumName}) not found in any tag') + + enum.required = required + # Tag enum dependencies in 'alias' attribute as required + depname = enum.elem.get('alias') + if depname: + self.gen.logMsg('diag', 'markEnumRequired: Generating dependent enum', + depname, 'for alias', enumname, 'required =', enum.required) + self.markEnumRequired(depname, required) + else: + self.gen.logMsg('warn', f'markEnumRequired: {enumname} IS NOT DEFINED') + + def markCmdRequired(self, cmdname, required): + """Mark a command as required or not. + + - cmdname - name of command + - required - boolean (to tag features as required or not)""" + self.gen.logMsg('diag', 'tagging command:', cmdname, '-> required =', required) + cmd = self.lookupElementInfo(cmdname, self.cmddict) + if cmd is not None: + cmd.required = required + + # Tag command dependencies in 'alias' attribute as required + # + # This is usually not done, because command 'aliases' are not + # actual C language aliases like type and enum aliases. Instead + # they are just duplicates of the function signature of the + # alias. This means that there is no dependency of a command + # alias on what it aliases. One exception is validity includes, + # where the spec markup needs the promoted-to validity include + # even if only the promoted-from command is being built. + if self.genOpts.requireCommandAliases: + depname = cmd.elem.get('alias') + if depname: + self.gen.logMsg('diag', 'Generating dependent command', + depname, 'for alias', cmdname) + self.markCmdRequired(depname, required) + + # Tag all parameter types of this command as required. + # This does not remove types of commands in a + # tag, because many other commands may use the same type. + # We could be more clever and reference count types, + # instead of using a boolean. + if required: + # Look for in entire tree, + # not just immediate children + for type_elem in cmd.elem.findall('.//type'): + self.gen.logMsg('diag', 'markRequired: command implicitly requires dependent type', type_elem.text) + self.markTypeRequired(type_elem.text, required) + else: + self.gen.logMsg('warn', 'command:', cmdname, 'IS NOT DEFINED') + + def markRequired(self, featurename, feature, required): + """Require or remove features specified in the Element. + + - featurename - name of the feature + - feature - Element for `` or `` tag + - required - boolean (to tag features as required or not)""" + self.gen.logMsg('diag', 'markRequired (feature = , required =', required, ')') + + # Loop over types, enums, and commands in the tag + # @@ It would be possible to respect 'api' and 'profile' attributes + # in individual features, but that is not done yet. + for typeElem in feature.findall('type'): + self.markTypeRequired(typeElem.get('name'), required) + for enumElem in feature.findall('enum'): + self.markEnumRequired(enumElem.get('name'), required) + + for cmdElem in feature.findall('command'): + self.markCmdRequired(cmdElem.get('name'), required) + + # Extensions may need to extend existing commands or other items in the future. + # So, look for extend tags. + for extendElem in feature.findall('extend'): + extendType = extendElem.get('type') + if extendType == 'command': + commandName = extendElem.get('name') + successExtends = extendElem.get('successcodes') + if successExtends is not None: + for success in successExtends.split(','): + self.commandextensionsuccesses.append(self.commandextensiontuple(command=commandName, + value=success, + extension=featurename)) + errorExtends = extendElem.get('errorcodes') + if errorExtends is not None: + for error in errorExtends.split(','): + self.commandextensionerrors.append(self.commandextensiontuple(command=commandName, + value=error, + extension=featurename)) + else: + self.gen.logMsg('warn', 'extend type:', extendType, 'IS NOT SUPPORTED') + + def getAlias(self, elem, dict): + """Check for an alias in the same require block. + + - elem - Element to check for an alias""" + + # Try to find an alias + alias = elem.get('alias') + if alias is None: + name = elem.get('name') + typeinfo = self.lookupElementInfo(name, dict) + if not typeinfo: + self.gen.logMsg('error', name, 'is not a known name') + alias = typeinfo.elem.get('alias') + + return alias + + def checkForCorrectionAliases(self, alias, require, tag): + """Check for an alias in the same require block. + + - alias - String name of the alias + - require - `` block from the registry + - tag - tag to look for in the require block""" + + # For the time being, the code below is bypassed. It has the effect + # of excluding "spelling aliases" created to comply with the style + # guide, but this leaves references out of the specification and + # causes broken internal links. + # + # if alias and require.findall(tag + "[@name='" + alias + "']"): + # return True + + return False + + def fillFeatureDictionary(self, interface, featurename, api, profile): + """Capture added interfaces for a `` or ``. + + - interface - Element for `` or ``, containing + `` and `` tags + - featurename - name of the feature + - api - string specifying API name being generated + - profile - string specifying API profile being generated""" + + # Explicitly initialize known types - errors for unhandled categories + self.gen.featureDictionary[featurename] = { + "enumconstant": {}, + "command": {}, + "enum": {}, + "struct": {}, + "handle": {}, + "basetype": {}, + "include": {}, + "define": {}, + "bitmask": {}, + "union": {}, + "funcpointer": {}, + } + + # marks things that are required by this version/profile + for require in interface.findall('require'): + if matchAPIProfile(api, profile, require): + + # Determine the required extension or version needed for a require block + # Assumes that only one of these is specified + # 'extension', and therefore 'required_key', may be a boolean + # expression of extension names. + # 'required_key' is used only as a dictionary key at + # present, and passed through to the script generators, so + # they must be prepared to parse that boolean expression. + required_key = require.get('depends') + + # Loop over types, enums, and commands in the tag + for typeElem in require.findall('type'): + typename = typeElem.get('name') + typeinfo = self.lookupElementInfo(typename, self.typedict) + + if typeinfo: + # Remove aliases in the same extension/feature; these are always added as a correction. Do not need the original to be visible. + alias = self.getAlias(typeElem, self.typedict) + if not self.checkForCorrectionAliases(alias, require, 'type'): + # Resolve the type info to the actual type, so we get an accurate read for 'structextends' + while alias: + typeinfo = self.lookupElementInfo(alias, self.typedict) + if not typeinfo: + raise RuntimeError(f"Missing alias {alias}") + alias = typeinfo.elem.get('alias') + + typecat = typeinfo.elem.get('category') + typeextends = typeinfo.elem.get('structextends') + if not required_key in self.gen.featureDictionary[featurename][typecat]: + self.gen.featureDictionary[featurename][typecat][required_key] = {} + if not typeextends in self.gen.featureDictionary[featurename][typecat][required_key]: + self.gen.featureDictionary[featurename][typecat][required_key][typeextends] = [] + self.gen.featureDictionary[featurename][typecat][required_key][typeextends].append(typename) + else: + self.gen.logMsg('warn', f'fillFeatureDictionary: NOT filling for {typename}') + + + for enumElem in require.findall('enum'): + enumname = enumElem.get('name') + typeinfo = self.lookupElementInfo(enumname, self.enumdict) + + # Remove aliases in the same extension/feature; these are always added as a correction. Do not need the original to be visible. + alias = self.getAlias(enumElem, self.enumdict) + if not self.checkForCorrectionAliases(alias, require, 'enum'): + enumextends = enumElem.get('extends') + if not required_key in self.gen.featureDictionary[featurename]['enumconstant']: + self.gen.featureDictionary[featurename]['enumconstant'][required_key] = {} + if not enumextends in self.gen.featureDictionary[featurename]['enumconstant'][required_key]: + self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends] = [] + self.gen.featureDictionary[featurename]['enumconstant'][required_key][enumextends].append(enumname) + else: + self.gen.logMsg('warn', f'fillFeatureDictionary: NOT filling for {typename}') + + for cmdElem in require.findall('command'): + # Remove aliases in the same extension/feature; these are always added as a correction. Do not need the original to be visible. + alias = self.getAlias(cmdElem, self.cmddict) + if not self.checkForCorrectionAliases(alias, require, 'command'): + if not required_key in self.gen.featureDictionary[featurename]['command']: + self.gen.featureDictionary[featurename]['command'][required_key] = [] + self.gen.featureDictionary[featurename]['command'][required_key].append(cmdElem.get('name')) + else: + self.gen.logMsg('warn', f'fillFeatureDictionary: NOT filling for {typename}') + + def requireFeatures(self, interface, featurename, api, profile): + """Process `` tags for a `` or ``. + + - interface - Element for `` or ``, containing + `` tags + - featurename - name of the feature + - api - string specifying API name being generated + - profile - string specifying API profile being generated""" + + # marks things that are required by this version/profile + for feature in interface.findall('require'): + if matchAPIProfile(api, profile, feature): + self.markRequired(featurename, feature, True) + + def deprecateFeatures(self, interface, featurename, api, profile): + """Process `` tags for a `` or ``. + + - interface - Element for `` or ``, containing + `` tags + - featurename - name of the feature + - api - string specifying API name being generated + - profile - string specifying API profile being generated""" + + versionmatch = APIConventions().is_api_version_name(featurename) + + # marks things that are deprecated by this version/profile + for deprecation in interface.findall('deprecate'): + if matchAPIProfile(api, profile, deprecation): + for typeElem in deprecation.findall('type'): + type = self.lookupElementInfo(typeElem.get('name'), self.typedict) + if type: + if versionmatch is not False: + type.deprecatedbyversion = featurename + else: + type.deprecatedbyextensions.append(featurename) + type.deprecatedlink = deprecation.get('explanationlink') + else: + self.gen.logMsg('error', typeElem.get('name'), ' is tagged for deprecation but not present in registry') + for enumElem in deprecation.findall('enum'): + enum = self.lookupElementInfo(enumElem.get('name'), self.enumdict) + if enum: + if versionmatch is not False: + enum.deprecatedbyversion = featurename + else: + enum.deprecatedbyextensions.append(featurename) + enum.deprecatedlink = deprecation.get('explanationlink') + else: + self.gen.logMsg('error', enumElem.get('name'), ' is tagged for deprecation but not present in registry') + for cmdElem in deprecation.findall('command'): + cmd = self.lookupElementInfo(cmdElem.get('name'), self.cmddict) + if cmd: + if versionmatch is not False: + cmd.deprecatedbyversion = featurename + else: + cmd.deprecatedbyextensions.append(featurename) + cmd.deprecatedlink = deprecation.get('explanationlink') + else: + self.gen.logMsg('error', cmdElem.get('name'), ' is tagged for deprecation but not present in registry') + + def removeFeatures(self, interface, featurename, api, profile): + """Process `` tags for a `` or ``. + + - interface - Element for `` or ``, containing + `` tags + - featurename - name of the feature + - api - string specifying API name being generated + - profile - string specifying API profile being generated""" + + # marks things that are removed by this version/profile + for feature in interface.findall('remove'): + if matchAPIProfile(api, profile, feature): + self.markRequired(featurename, feature, False) + + def assignAdditionalValidity(self, interface, api, profile): + # Loop over all usage inside all tags. + for feature in interface.findall('require'): + if matchAPIProfile(api, profile, feature): + for v in feature.findall('usage'): + if v.get('command'): + self.cmddict[v.get('command')].additionalValidity.append(copy.deepcopy(v)) + if v.get('struct'): + self.typedict[v.get('struct')].additionalValidity.append(copy.deepcopy(v)) + + def removeAdditionalValidity(self, interface, api, profile): + # Loop over all usage inside all tags. + for feature in interface.findall('remove'): + if matchAPIProfile(api, profile, feature): + for v in feature.findall('usage'): + if v.get('command'): + self.cmddict[v.get('command')].removedValidity.append(copy.deepcopy(v)) + if v.get('struct'): + self.typedict[v.get('struct')].removedValidity.append(copy.deepcopy(v)) + + def generateFeature(self, fname, ftype, dictionary, explicit=False): + """Generate a single type / enum group / enum / command, + and all its dependencies as needed. + + - fname - name of feature (``/``/``) + - ftype - type of feature, 'type' | 'enum' | 'command' + - dictionary - of *Info objects - self.{type|enum|cmd}dict + - explicit - True if this is explicitly required by the top-level + XML tag, False if it is a dependency of an explicit + requirement.""" + + self.gen.logMsg('diag', 'generateFeature: generating', ftype, fname) + + if not (explicit or self.genOpts.requireDepends): + self.gen.logMsg('diag', 'generateFeature: NOT generating', ftype, fname, 'because generator does not require dependencies') + return + + f = self.lookupElementInfo(fname, dictionary) + if f is None: + # No such feature. This is an error, but reported earlier + self.gen.logMsg('diag', 'No entry found for feature', fname, + 'returning!') + return + + # If feature is not required, or has already been declared, return + if not f.required: + self.gen.logMsg('diag', 'Skipping', ftype, fname, '(not required)') + return + if f.declared: + self.gen.logMsg('diag', 'Skipping', ftype, fname, '(already declared)') + return + # Always mark feature declared, as though actually emitted + f.declared = True + + # Determine if this is an alias, and of what, if so + alias = f.elem.get('alias') + if alias: + self.gen.logMsg('diag', fname, 'is an alias of', alias) + + # Pull in dependent declaration(s) of the feature. + # For types, there may be one type in the 'requires' attribute of + # the element, one in the 'alias' attribute, and many in + # embedded and tags within the element. + # For commands, there may be many in tags within the element. + # For enums, no dependencies are allowed (though perhaps if you + # have a uint64 enum, it should require that type). + genProc = None + followupFeature = None + if ftype == 'type': + genProc = self.gen.genType + + # Generate type dependencies in 'alias' and 'requires' attributes + if alias: + self.generateFeature(alias, 'type', self.typedict) + requires = f.elem.get('requires') + if requires: + self.gen.logMsg('diag', 'Generating required dependent type', + requires) + self.generateFeature(requires, 'type', self.typedict) + + # Generate types used in defining this type (e.g. in nested + # tags) + # Look for in entire tree, + # not just immediate children + for subtype in f.elem.findall('.//type'): + self.gen.logMsg('diag', 'Generating required dependent ', + subtype.text) + self.generateFeature(subtype.text, 'type', self.typedict) + + # Generate enums used in defining this type, for example in + # member[MEMBER_SIZE] + for subtype in f.elem.findall('.//enum'): + self.gen.logMsg('diag', 'Generating required dependent ', + subtype.text) + self.generateFeature(subtype.text, 'enum', self.enumdict) + + # If the type is an enum group, look up the corresponding + # group in the group dictionary and generate that instead. + if f.elem.get('category') == 'enum': + self.gen.logMsg('diag', 'Type', fname, 'is an enum group, so generate that instead') + group = self.lookupElementInfo(fname, self.groupdict) + if alias is not None: + # An alias of another group name. + # Pass to genGroup with 'alias' parameter = aliased name + self.gen.logMsg('diag', 'Generating alias', fname, + 'for enumerated type', alias) + # Now, pass the *aliased* GroupInfo to the genGroup, but + # with an additional parameter which is the alias name. + genProc = self.gen.genGroup + f = self.lookupElementInfo(alias, self.groupdict) + elif group is None: + self.gen.logMsg('warn', 'Skipping enum type', fname, + ': No matching enumerant group') + return + else: + genProc = self.gen.genGroup + f = group + + # @ The enum group is not ready for generation. At this + # @ point, it contains all tags injected by + # @ tags without any verification of whether + # @ they are required or not. It may also contain + # @ duplicates injected by multiple consistent + # @ definitions of an . + + # @ Pass over each enum, marking its enumdict[] entry as + # @ required or not. Mark aliases of enums as required, + # @ too. + + enums = group.elem.findall('enum') + + self.gen.logMsg('diag', 'generateFeature: checking enums for group', fname) + + # Check for required enums, including aliases + # LATER - Check for, report, and remove duplicates? + enumAliases = [] + for elem in enums: + name = elem.get('name') + + required = False + + extname = elem.get('extname') + version = elem.get('version') + if extname is not None: + # 'supported' attribute was injected when the element was + # moved into the group in Registry.parseTree() + supported_list = elem.get('supported').split(",") + if self.genOpts.defaultExtensions in supported_list: + required = True + elif re.match(self.genOpts.addExtensions, extname) is not None: + required = True + elif version is not None: + required = re.match(self.genOpts.emitversions, version) is not None + else: + required = True + + self.gen.logMsg('diag', '* required =', required, 'for', name) + if required: + # Mark this element as required (in the element, not the EnumInfo) + elem.set('required', 'true') + # If it is an alias, track that for later use + enumAlias = elem.get('alias') + if enumAlias: + enumAliases.append(enumAlias) + for elem in enums: + name = elem.get('name') + if name in enumAliases: + elem.set('required', 'true') + self.gen.logMsg('diag', '* also need to require alias', name) + if f is None: + raise RuntimeError("Should not get here") + if f.elem.get('category') == 'bitmask': + followupFeature = f.elem.get('bitvalues') + elif ftype == 'command': + # Generate command dependencies in 'alias' attribute + if alias: + self.generateFeature(alias, 'command', self.cmddict) + + genProc = self.gen.genCmd + for type_elem in f.elem.findall('.//type'): + depname = type_elem.text + self.gen.logMsg('diag', 'Generating required parameter type', + depname) + self.generateFeature(depname, 'type', self.typedict) + elif ftype == 'enum': + # Generate enum dependencies in 'alias' attribute + if alias: + self.generateFeature(alias, 'enum', self.enumdict) + genProc = self.gen.genEnum + + # Actually generate the type only if emitting declarations + if self.emitFeatures: + self.gen.logMsg('diag', 'Emitting', ftype, 'decl for', fname) + if genProc is None: + raise RuntimeError("genProc is None when we should be emitting") + genProc(f, fname, alias) + else: + self.gen.logMsg('diag', 'Skipping', ftype, fname, + '(should not be emitted)') + + if followupFeature: + self.gen.logMsg('diag', 'Generating required bitvalues ', + followupFeature) + self.generateFeature(followupFeature, "type", self.typedict) + + def generateRequiredInterface(self, interface): + """Generate all interfaces required by an API version or extension. + + - interface - Element for `` or ``""" + + # Loop over all features inside all tags. + for features in interface.findall('require'): + for t in features.findall('type'): + self.generateFeature(t.get('name'), 'type', self.typedict, explicit=True) + for e in features.findall('enum'): + # If this is an enum extending an enumerated type, do not + # generate it - this has already been done in reg.parseTree, + # by copying this element into the enumerated type. + enumextends = e.get('extends') + if not enumextends: + self.generateFeature(e.get('name'), 'enum', self.enumdict, explicit=True) + for c in features.findall('command'): + self.generateFeature(c.get('name'), 'command', self.cmddict, explicit=True) + + def generateSpirv(self, spirv, dictionary): + if spirv is None: + self.gen.logMsg('diag', 'No entry found for element', name, + 'returning!') + return + + name = spirv.elem.get('name') + # No known alias for spirv elements + alias = None + if spirv.emit: + genProc = self.gen.genSpirv + genProc(spirv, name, alias) + + def stripUnsupportedAPIs(self, dictionary, attribute, supportedDictionary): + """Strip unsupported APIs from attributes of APIs. + dictionary - *Info dictionary of APIs to be updated + attribute - attribute name to look for in each API + supportedDictionary - dictionary in which to look for supported + API elements in the attribute""" + + for key in dictionary: + eleminfo = dictionary[key] + attribstring = eleminfo.elem.get(attribute) + if attribstring is not None: + apis = [] + stripped = False + for api in attribstring.split(','): + ##print('Checking API {} referenced by {}'.format(api, key)) + if api in supportedDictionary and supportedDictionary[api].required: + apis.append(api) + else: + stripped = True + ##print('\t**STRIPPING API {} from {}'.format(api, key)) + + # Update the attribute after stripping stuff. + # Could sort apis before joining, but it is not a clear win + if stripped: + eleminfo.elem.set(attribute, ','.join(apis)) + + def stripUnsupportedAPIsFromList(self, dictionary, supportedDictionary): + """Strip unsupported APIs from attributes of APIs. + dictionary - dictionary of list of structure name strings + supportedDictionary - dictionary in which to look for supported + API elements in the attribute""" + + for key in dictionary: + attribstring = dictionary[key] + if attribstring is not None: + apis = [] + stripped = False + for api in attribstring: + ##print('Checking API {} referenced by {}'.format(api, key)) + if supportedDictionary[api].required: + apis.append(api) + else: + stripped = True + ##print('\t**STRIPPING API {} from {}'.format(api, key)) + + # Update the attribute after stripping stuff. + # Could sort apis before joining, but it is not a clear win + if stripped: + dictionary[key] = apis + + def generateFormat(self, format, dictionary): + if format is None: + self.gen.logMsg('diag', 'No entry found for format element', + 'returning!') + return + + name = format.elem.get('name') + # No known alias for VkFormat elements + alias = None + if format.emit: + genProc = self.gen.genFormat + genProc(format, name, alias) + + def generateSyncStage(self, sync): + genProc = self.gen.genSyncStage + genProc(sync) + + def generateSyncAccess(self, sync): + genProc = self.gen.genSyncAccess + genProc(sync) + + def generateSyncPipeline(self, sync): + genProc = self.gen.genSyncPipeline + genProc(sync) + + def tagValidExtensionStructs(self): + """Construct a "validextensionstructs" list for parent structures + based on "structextends" tags in child structures. + Only do this for structures tagged as required.""" + + for typeinfo in self.typedict.values(): + type_elem = typeinfo.elem + if typeinfo.required and type_elem.get('category') == 'struct': + struct_extends = type_elem.get('structextends') + if struct_extends is not None: + for parent in struct_extends.split(','): + # self.gen.logMsg('diag', type_elem.get('name'), 'extends', parent) + self.validextensionstructs[parent].append(type_elem.get('name')) + + # Sort the lists so they do not depend on the XML order + for parent in self.validextensionstructs: + self.validextensionstructs[parent].sort() + + def apiGen(self): + """Generate interface for specified versions using the current + generator and generator options""" + + self.gen.logMsg('diag', '*******************************************') + self.gen.logMsg('diag', ' Registry.apiGen file:', self.genOpts.filename, + 'api:', self.genOpts.apiname, + 'profile:', self.genOpts.profile) + self.gen.logMsg('diag', '*******************************************') + + # Could reset required/declared flags for all features here. + # This has been removed as never used. The initial motivation was + # the idea of calling apiGen() repeatedly for different targets, but + # this has never been done. The 20% or so build-time speedup that + # might result is not worth the effort to make it actually work. + # + # self.apiReset() + + # Compile regexps used to select versions & extensions + regVersions = re.compile(self.genOpts.versions) + regEmitVersions = re.compile(self.genOpts.emitversions) + regAddExtensions = re.compile(self.genOpts.addExtensions) + regRemoveExtensions = re.compile(self.genOpts.removeExtensions) + regEmitExtensions = re.compile(self.genOpts.emitExtensions) + regEmitSpirv = re.compile(self.genOpts.emitSpirv) + regEmitFormats = re.compile(self.genOpts.emitFormats) + + # Get all matching API feature names & add to list of FeatureInfo + # Note we used to select on feature version attributes, not names. + features = [] + apiMatch = False + for key in self.apidict: + fi = self.apidict[key] + api = fi.elem.get('api') + if apiNameMatch(self.genOpts.apiname, api): + apiMatch = True + if regVersions.match(fi.name): + # Matches API & version #s being generated. Mark for + # emission and add to the features[] list . + # @@ Could use 'declared' instead of 'emit'? + fi.emit = (regEmitVersions.match(fi.name) is not None) + features.append(fi) + if not fi.emit: + self.gen.logMsg('diag', 'NOT tagging feature api =', api, + 'name =', fi.name, 'version =', fi.version, + 'for emission (does not match emitversions pattern)') + else: + self.gen.logMsg('diag', 'Including feature api =', api, + 'name =', fi.name, 'version =', fi.version, + 'for emission (matches emitversions pattern)') + else: + self.gen.logMsg('diag', 'NOT including feature api =', api, + 'name =', fi.name, 'version =', fi.version, + '(does not match requested versions)') + else: + self.gen.logMsg('diag', 'NOT including feature api =', api, + 'name =', fi.name, + '(does not match requested API)') + if not apiMatch: + self.gen.logMsg('warn', 'No matching API versions found!') + + # Get all matching extensions, in order by their extension number, + # and add to the list of features. + # Start with extensions whose 'supported' attributes match the API + # being generated. Add extensions matching the pattern specified in + # regExtensions, then remove extensions matching the pattern + # specified in regRemoveExtensions + for (extName, ei) in sorted(self.extdict.items(), key=lambda x: x[1].number if x[1].number is not None else '0'): + extName = ei.name + include = False + + # Include extension if defaultExtensions is not None and is + # exactly matched by the 'supported' attribute. + if apiNameMatch(self.genOpts.defaultExtensions, + ei.elem.get('supported')): + self.gen.logMsg('diag', 'Including extension', + extName, "(defaultExtensions matches the 'supported' attribute)") + include = True + + # Include additional extensions if the extension name matches + # the regexp specified in the generator options. This allows + # forcing extensions into an interface even if they are not + # tagged appropriately in the registry. + # However, we still respect the 'supported' attribute. + if regAddExtensions.match(extName) is not None: + if not apiNameMatch(self.genOpts.apiname, ei.elem.get('supported')): + self.gen.logMsg('diag', 'NOT including extension', + extName, '(matches explicitly requested, but does not match the \'supported\' attribute)') + include = False + else: + self.gen.logMsg('diag', 'Including extension', + extName, '(matches explicitly requested extensions to add)') + include = True + # Remove extensions if the name matches the regexp specified + # in generator options. This allows forcing removal of + # extensions from an interface even if they are tagged that + # way in the registry. + if regRemoveExtensions.match(extName) is not None: + self.gen.logMsg('diag', 'Removing extension', + extName, '(matches explicitly requested extensions to remove)') + include = False + + # If the extension is to be included, add it to the + # extension features list. + if include: + ei.emit = (regEmitExtensions.match(extName) is not None) + features.append(ei) + if not ei.emit: + self.gen.logMsg('diag', 'NOT tagging extension', + extName, + 'for emission (does not match emitextensions pattern)') + + # Hack - can be removed when validity generator goes away + # (Jon) I am not sure what this does, or if it should + # respect the ei.emit flag above. + self.requiredextensions.append(extName) + else: + self.gen.logMsg('diag', 'NOT including extension', + extName, '(does not match api attribute or explicitly requested extensions)') + + # Add all spirv elements to list + # generators decide to emit them all or not + # Currently no filtering as no client of these elements needs filtering + spirvexts = [] + for key in self.spirvextdict: + si = self.spirvextdict[key] + si.emit = (regEmitSpirv.match(key) is not None) + spirvexts.append(si) + spirvcaps = [] + for key in self.spirvcapdict: + si = self.spirvcapdict[key] + si.emit = (regEmitSpirv.match(key) is not None) + spirvcaps.append(si) + + formats = [] + for key in self.formatsdict: + si = self.formatsdict[key] + si.emit = (regEmitFormats.match(key) is not None) + formats.append(si) + + # Sort the features list, if a sort procedure is defined + if self.genOpts.sortProcedure: + self.genOpts.sortProcedure(features) + + # Passes 1+2: loop over requested API versions and extensions tagging + # types/commands/features as required (in an block) or no + # longer required (in an block). s are processed + # after all s, so removals win. + # If a profile other than 'None' is being generated, it must + # match the profile attribute (if any) of the and + # tags. + self.gen.logMsg('diag', 'PASS 1: TAG FEATURES') + for f in features: + self.gen.logMsg('diag', 'PASS 1: Tagging required and features for', f.name) + self.fillFeatureDictionary(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile) + self.requireFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile) + self.deprecateFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile) + self.assignAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile) + + for f in features: + self.gen.logMsg('diag', 'PASS 2: Tagging removed features for', f.name) + self.removeFeatures(f.elem, f.name, self.genOpts.apiname, self.genOpts.profile) + self.removeAdditionalValidity(f.elem, self.genOpts.apiname, self.genOpts.profile) + + # Now, strip references to APIs that are not required. + # At present such references may occur in: + # Structs in 'structextends' attributes + # Enums in 'successcodes' and 'errorcodes' attributes + self.stripUnsupportedAPIs(self.typedict, 'structextends', self.typedict) + self.stripUnsupportedAPIs(self.cmddict, 'successcodes', self.enumdict) + self.stripUnsupportedAPIs(self.cmddict, 'errorcodes', self.enumdict) + self.stripUnsupportedAPIsFromList(self.validextensionstructs, self.typedict) + + # Construct lists of valid extension structures + self.tagValidExtensionStructs() + + # @@May need to strip / + # tags of these forms: + # + # + # + # + + # Pass 3: loop over specified API versions and extensions printing + # declarations for required things which have not already been + # generated. + self.gen.logMsg('diag', 'PASS 3: GENERATE INTERFACES FOR FEATURES') + self.gen.beginFile(self.genOpts) + for f in features: + self.gen.logMsg('diag', 'PASS 3: Generating interface for', + f.name) + emit = self.emitFeatures = f.emit + if not emit: + self.gen.logMsg('diag', 'PASS 3: NOT declaring feature', + f.elem.get('name'), 'because it is not tagged for emission') + # Generate the interface (or just tag its elements as having been + # emitted, if they have not been). + self.gen.beginFeature(f.elem, emit) + self.generateRequiredInterface(f.elem) + self.gen.endFeature() + # Generate spirv elements + for s in spirvexts: + self.generateSpirv(s, self.spirvextdict) + for s in spirvcaps: + self.generateSpirv(s, self.spirvcapdict) + for s in formats: + self.generateFormat(s, self.formatsdict) + for s in self.syncstagedict: + self.generateSyncStage(self.syncstagedict[s]) + for s in self.syncaccessdict: + self.generateSyncAccess(self.syncaccessdict[s]) + for s in self.syncpipelinedict: + self.generateSyncPipeline(self.syncpipelinedict[s]) + self.gen.endFile() + + def apiReset(self): + """Reset type/enum/command dictionaries before generating another API. + + Use between apiGen() calls to reset internal state.""" + for datatype in self.typedict: + self.typedict[datatype].resetState() + for enum in self.enumdict: + self.enumdict[enum].resetState() + for cmd in self.cmddict: + self.cmddict[cmd].resetState() + for cmd in self.apidict: + self.apidict[cmd].resetState() diff --git a/local/recipes/libs/vulkan-headers/source/registry/spec_tools/conventions.py b/local/recipes/libs/vulkan-headers/source/registry/spec_tools/conventions.py new file mode 100644 index 0000000000..7d827caaa3 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/spec_tools/conventions.py @@ -0,0 +1,562 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2013-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +# Base class for working-group-specific style conventions, +# used in generation. + +from enum import Enum +import abc +import re + +# Type categories that respond "False" to isStructAlwaysValid +# basetype is home to typedefs like ..Bool32 +CATEGORIES_REQUIRING_VALIDATION = set(('handle', + 'enum', + 'bitmask', + 'basetype', + None)) + +# These are basic C types pulled in via openxr_platform_defines.h +TYPES_KNOWN_ALWAYS_VALID = set(('char', + 'float', + 'int8_t', 'uint8_t', + 'int16_t', 'uint16_t', + 'int32_t', 'uint32_t', + 'int64_t', 'uint64_t', + 'size_t', + 'intptr_t', 'uintptr_t', + 'int', + )) + +# Split an extension name into vendor ID and name portions +EXT_NAME_DECOMPOSE_RE = re.compile(r'(?P[A-Za-z]+)_(?P[A-Za-z]+)_(?P[\w_]+)') + +# Match an API version name. +# Match object includes API prefix, major, and minor version numbers. +# This could be refined further for specific APIs. +API_VERSION_NAME_RE = re.compile(r'(?P[A-Za-z]+)_VERSION_(?P[0-9]+)_(?P[0-9]+)') + +class ProseListFormats(Enum): + """A connective, possibly with a quantifier.""" + AND = 0 + EACH_AND = 1 + OR = 2 + ANY_OR = 3 + + @classmethod + def from_string(cls, s): + if s == 'or': + return cls.OR + if s == 'and': + return cls.AND + raise RuntimeError(f"Unrecognized string connective: {s}") + + @property + def connective(self): + if self in (ProseListFormats.OR, ProseListFormats.ANY_OR): + return 'or' + return 'and' + + def quantifier(self, n): + """Return the desired quantifier for a list of a given length.""" + if self == ProseListFormats.ANY_OR: + if n > 1: + return 'any of ' + elif self == ProseListFormats.EACH_AND: + if n > 2: + return 'each of ' + if n == 2: + return 'both of ' + return '' + + +class ConventionsBase(abc.ABC): + """WG-specific conventions.""" + + def __init__(self): + self._command_prefix = None + self._type_prefix = None + + def formatVersionOrExtension(self, name): + """Mark up an API version or extension name as a link in the spec.""" + + # Is this a version name? + match = API_VERSION_NAME_RE.match(name) + if match is not None: + return self.formatVersion(name, + match.group('apivariant'), + match.group('major'), + match.group('minor')) + else: + # If not, assumed to be an extension name. Might be worth checking. + return self.formatExtension(name) + + def formatVersion(self, name, apivariant, major, minor): + """Mark up an API version name as a link in the spec.""" + return f'`<<{name}>>`' + + def formatExtension(self, name): + """Mark up an extension name as a link in the spec.""" + return f'`<<{name}>>`' + + def formatSPIRVlink(self, name): + """Mark up a SPIR-V extension name as an external link in the spec. + Since these are external links, the formatting probably will be + the same for all APIs creating such links, so long as they use + the asciidoctor {spirv} attribute for the base path to the SPIR-V + extensions.""" + + (vendor, _) = self.extension_name_split(name) + + return f'{{spirv}}/{vendor}/{name}.html[{name}]' + + @property + @abc.abstractmethod + def null(self): + """Preferred spelling of NULL.""" + raise NotImplementedError + + def makeProseList(self, elements, fmt=ProseListFormats.AND, with_verb=False, *args, **kwargs): + """Make a (comma-separated) list for use in prose. + + Adds a connective (by default, 'and') + before the last element if there are more than 1. + + Adds the right one of "is" or "are" to the end if with_verb is true. + + Optionally adds a quantifier (like 'any') before a list of 2 or more, + if specified by fmt. + + Override with a different method or different call to + _implMakeProseList if you want to add a comma for two elements, + or not use a serial comma. + """ + return self._implMakeProseList(elements, fmt, with_verb, *args, **kwargs) + + @property + def struct_macro(self): + """Get the appropriate format macro for a structure. + + May override. + """ + return 'slink:' + + @property + def external_macro(self): + """Get the appropriate format macro for an external type like uint32_t. + + May override. + """ + return 'code:' + + @property + def allows_x_number_suffix(self): + """Whether vendor tags can be suffixed with X and a number to mark experimental extensions.""" + return False + + @property + @abc.abstractmethod + def structtype_member_name(self): + """Return name of the structure type member. + + Must implement. + """ + raise NotImplementedError() + + @property + @abc.abstractmethod + def nextpointer_member_name(self): + """Return name of the structure pointer chain member. + + Must implement. + """ + raise NotImplementedError() + + @property + @abc.abstractmethod + def xml_api_name(self): + """Return the name used in the default API XML registry for the default API""" + raise NotImplementedError() + + @abc.abstractmethod + def generate_structure_type_from_name(self, structname): + """Generate a structure type name, like XR_TYPE_CREATE_INSTANCE_INFO. + + Must implement. + """ + raise NotImplementedError() + + def makeStructName(self, name): + """Prepend the appropriate format macro for a structure to a structure type name. + + Uses struct_macro, so just override that if you want to change behavior. + """ + return self.struct_macro + name + + def makeExternalTypeName(self, name): + """Prepend the appropriate format macro for an external type like uint32_t to a type name. + + Uses external_macro, so just override that if you want to change behavior. + """ + return self.external_macro + name + + def _implMakeProseList(self, elements, fmt, with_verb, comma_for_two_elts=False, serial_comma=True): + """Internal-use implementation to make a (comma-separated) list for use in prose. + + Adds a connective (by default, 'and') + before the last element if there are more than 1, + and only includes commas if there are more than 2 + (if comma_for_two_elts is False). + + Adds the right one of "is" or "are" to the end if with_verb is true. + + Optionally adds a quantifier (like 'any') before a list of 2 or more, + if specified by fmt. + + Do not edit these defaults, override self.makeProseList(). + """ + assert serial_comma # did not implement what we did not need + if isinstance(fmt, str): + fmt = ProseListFormats.from_string(fmt) + + my_elts = list(elements) + if len(my_elts) > 1: + my_elts[-1] = f'{fmt.connective} {my_elts[-1]}' + + if not comma_for_two_elts and len(my_elts) <= 2: + prose = ' '.join(my_elts) + else: + prose = ', '.join(my_elts) + + quantifier = fmt.quantifier(len(my_elts)) + + parts = [quantifier, prose] + + if with_verb: + if len(my_elts) > 1: + parts.append(' are') + else: + parts.append(' is') + return ''.join(parts) + + @property + @abc.abstractmethod + def file_suffix(self): + """Return suffix of generated Asciidoctor files""" + raise NotImplementedError + + @abc.abstractmethod + def api_name(self, spectype=None): + """Return API or specification name for citations in ref pages. + + spectype is the spec this refpage is for. + 'api' (the default value) is the main API Specification. + If an unrecognized spectype is given, returns None. + + Must implement.""" + raise NotImplementedError + + def should_insert_may_alias_macro(self, genOpts): + """Return true if we should insert a "may alias" macro in this file. + + Only used by OpenXR right now.""" + return False + + @property + def command_prefix(self): + """Return the expected prefix of commands/functions. + + Implemented in terms of api_prefix.""" + if not self._command_prefix: + self._command_prefix = self.api_prefix[:].replace('_', '').lower() + return self._command_prefix + + @property + def type_prefix(self): + """Return the expected prefix of type names. + + Implemented in terms of command_prefix (and in turn, api_prefix).""" + if not self._type_prefix: + self._type_prefix = ''.join( + (self.command_prefix[0:1].upper(), self.command_prefix[1:])) + return self._type_prefix + + @property + @abc.abstractmethod + def api_prefix(self): + """Return API token prefix. + + Typically two uppercase letters followed by an underscore. + + Must implement.""" + raise NotImplementedError + + @property + def extension_name_prefix(self): + """Return extension name prefix. + + Typically two uppercase letters followed by an underscore. + + Assumed to be the same as api_prefix, but some APIs use different + case conventions.""" + + return self.api_prefix + + def extension_short_description(self, elem): + """Return a short description of an extension for use in refpages. + + elem is an ElementTree for the tag in the XML. + The default behavior is to use the 'type' field of this tag, but not + all APIs support this field.""" + + ext_type = elem.get('type') + + if ext_type is not None: + return f'{ext_type} extension' + else: + return '' + + @property + def write_contacts(self): + """Return whether contact list should be written to extension appendices""" + return False + + @property + def write_extension_type(self): + """Return whether extension type should be written to extension appendices""" + return True + + @property + def write_extension_number(self): + """Return whether extension number should be written to extension appendices""" + return True + + @property + def write_extension_revision(self): + """Return whether extension revision number should be written to extension appendices""" + return True + + @property + def write_refpage_include(self): + """Return whether refpage include should be written to extension appendices""" + return True + + @property + def api_version_prefix(self): + """Return API core version token prefix. + + Implemented in terms of api_prefix. + + May override.""" + return f"{self.api_prefix}VERSION_" + + @property + def KHR_prefix(self): + """Return extension name prefix for KHR extensions. + + Implemented in terms of api_prefix. + + May override.""" + return f"{self.api_prefix}KHR_" + + @property + def EXT_prefix(self): + """Return extension name prefix for EXT extensions. + + Implemented in terms of api_prefix. + + May override.""" + return f"{self.api_prefix}EXT_" + + def writeFeature(self, featureName, featureExtraProtect, filename): + """Return True if OutputGenerator.endFeature should write this feature. + + Defaults to always True. + Used in COutputGenerator. + + May override.""" + return True + + def requires_error_validation(self, return_type): + """Return True if the return_type element is an API result code + requiring error validation. + + Defaults to always False. + + May override.""" + return False + + @property + def required_errors(self): + """Return a list of required error codes for validation. + + Defaults to an empty list. + + May override.""" + return [] + + def is_voidpointer_alias(self, tag, text, tail): + """Return True if the declaration components (tag,text,tail) of an + element represents a void * type. + + Defaults to a reasonable implementation. + + May override.""" + return tag == 'type' and text == 'void' and tail.startswith('*') + + def make_voidpointer_alias(self, tail): + """Reformat a void * declaration to include the API alias macro. + + Defaults to a no-op. + + Must override if you actually want to use this feature in your project.""" + return tail + + def category_requires_validation(self, category): + """Return True if the given type 'category' always requires validation. + + Defaults to a reasonable implementation. + + May override.""" + return category in CATEGORIES_REQUIRING_VALIDATION + + def type_always_valid(self, typename): + """Return True if the given type name is always valid (never requires validation). + + This is for things like integers. + + Defaults to a reasonable implementation. + + May override.""" + return typename in TYPES_KNOWN_ALWAYS_VALID + + @property + def should_skip_checking_codes(self): + """Return True if more than the basic validation of return codes should + be skipped for a command.""" + + return False + + @property + def generate_index_terms(self): + """Return True if asiidoctor index terms should be generated as part + of an API interface from the docgenerator.""" + + return False + + @property + def generate_enum_table(self): + """Return True if asciidoctor tables describing enumerants in a + group should be generated as part of group generation.""" + return False + + @property + def generate_max_enum_in_docs(self): + """Return True if MAX_ENUM tokens should be generated in + documentation includes.""" + return False + + def extension_name_split(self, name): + """Split an extension name, returning (vendor, rest of name). + The API prefix of the name is ignored.""" + + match = EXT_NAME_DECOMPOSE_RE.match(name) + vendor = match.group('vendor') + bare_name = match.group('name') + + return (vendor, bare_name) + + @abc.abstractmethod + def extension_file_path(self, name): + """Return file path to an extension appendix relative to a directory + containing all such appendices. + - name - extension name + + Must implement.""" + raise NotImplementedError + + def extension_include_string(self, name): + """Return format string for include:: line for an extension appendix + file. + - name - extension name""" + + return f'include::{{appendices}}/{self.extension_file_path(name)}[]' + + @property + def provisional_extension_warning(self): + """Return True if a warning should be included in extension + appendices for provisional extensions.""" + return True + + @property + def generated_include_path(self): + """Return path relative to the generated reference pages, to the + generated API include files.""" + + return '{generated}' + + @property + def include_extension_appendix_in_refpage(self): + """Return True if generating extension refpages by embedding + extension appendix content (default), False otherwise + (OpenXR).""" + + return True + + def valid_flag_bit(self, bitpos): + """Return True if bitpos is an allowed numeric bit position for + an API flag. + + Behavior depends on the data type used for flags (which may be 32 + or 64 bits), and may depend on assumptions about compiler + handling of sign bits in enumerated types, as well.""" + return True + + @property + def duplicate_aliased_structs(self): + """ + Should aliased structs have the original struct definition listed in the + generated docs snippet? + """ + return False + + @property + def protectProtoComment(self): + """Return True if generated #endif should have a comment matching + the protection symbol used in the opening #ifdef/#ifndef.""" + return False + + @property + def extra_refpage_headers(self): + """Return any extra headers (preceding the title) for generated + reference pages.""" + return '' + + @property + def extra_refpage_body(self): + """Return any extra text (following the title) for generated + reference pages.""" + return '' + + def is_api_version_name(self, name): + """Return True if name is an API version name.""" + + return API_VERSION_NAME_RE.match(name) is not None + + @property + def docgen_language(self): + """Return the language to be used in docgenerator [source] + blocks.""" + + return 'c++' + + @property + def docgen_source_options(self): + """Return block options to be used in docgenerator [source] blocks, + which are appended to the 'source' block type. + Can be empty.""" + + return '%unbreakable' diff --git a/local/recipes/libs/vulkan-headers/source/registry/spec_tools/util.py b/local/recipes/libs/vulkan-headers/source/registry/spec_tools/util.py new file mode 100644 index 0000000000..e50df9bd64 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/spec_tools/util.py @@ -0,0 +1,58 @@ +"""Utility functions not closely tied to other spec_tools types.""" +# Copyright (c) 2018-2019 Collabora, Ltd. +# Copyright 2013-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + + +def getElemName(elem, default=None): + """Get the name associated with an element, either a name child or name attribute.""" + name_elem = elem.find('name') + if name_elem is not None: + return name_elem.text + # Fallback if there is no child. + return elem.get('name', default) + + +def getElemType(elem, default=None): + """Get the type associated with an element, either a type child or type attribute.""" + type_elem = elem.find('type') + if type_elem is not None: + return type_elem.text + # Fallback if there is no child. + return elem.get('type', default) + + +def findFirstWithPredicate(collection, pred): + """Return the first element that satisfies the predicate, or None if none exist. + + NOTE: Some places where this is used might be better served by changing to a dictionary. + """ + for elt in collection: + if pred(elt): + return elt + return None + + +def findNamedElem(elems, name): + """Traverse a collection of elements with 'name' nodes or attributes, looking for and returning one with the right name. + + NOTE: Many places where this is used might be better served by changing to a dictionary. + """ + return findFirstWithPredicate(elems, lambda elem: getElemName(elem) == name) + + +def findTypedElem(elems, typename): + """Traverse a collection of elements with 'type' nodes or attributes, looking for and returning one with the right typename. + + NOTE: Many places where this is used might be better served by changing to a dictionary. + """ + return findFirstWithPredicate(elems, lambda elem: getElemType(elem) == typename) + + +def findNamedObject(collection, name): + """Traverse a collection of elements with 'name' attributes, looking for and returning one with the right name. + + NOTE: Many places where this is used might be better served by changing to a dictionary. + """ + return findFirstWithPredicate(collection, lambda elt: elt.name == name) diff --git a/local/recipes/libs/vulkan-headers/source/registry/stripAPI.py b/local/recipes/libs/vulkan-headers/source/registry/stripAPI.py new file mode 100755 index 0000000000..e0fe9e2d1e --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/stripAPI.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# +# Copyright 2023-2025 The Khronos Group Inc. +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import xml.etree.ElementTree as etree +from reg import stripNonmatchingAPIs + +if __name__ == '__main__': + parser = argparse.ArgumentParser(prog='stripAPI', + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +Filters out elements with non-matching explicit 'api' attributes from API XML. +To remove Vulkan SC-only elements from the combined API XML: + python3 scripts/stripAPI.py -input xml/vk.xml -output vulkan-only.xml -keepAPI vulkan +To remove Vulkan-only elements: + python3 scripts/stripAPI.py -input xml/vk.xml -output vulkansc-only.xml -keepAPI vulkansc +If you are parsing the XML yourself but using the xml.etree package, the +equivalent runtime code is: + import reg + reg.stripNonmatchingAPIs(tree.getroot(), keepAPI, actuallyDelete=True) +where 'tree' is an ElementTree created from the XML file using + etree.parse(filename)''') + + parser.add_argument('-input', action='store', + required=True, + help='Specify input registry XML') + parser.add_argument('-output', action='store', + required=True, + help='Specify output registry XML') + parser.add_argument('-keepAPI', action='store', + default=None, + help='Specify API name whose \'api\' tags are kept') + + args = parser.parse_args() + + tree = etree.parse(args.input) + if args.keepAPI is not None: + stripNonmatchingAPIs(tree.getroot(), args.keepAPI, actuallyDelete = True) + tree.write(args.output) + diff --git a/local/recipes/libs/vulkan-headers/source/registry/validusage.json b/local/recipes/libs/vulkan-headers/source/registry/validusage.json new file mode 100644 index 0000000000..2fb7dd767d --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/validusage.json @@ -0,0 +1,113641 @@ +{ + "version info": { + "schema version": 2, + "api version": "1.4.321", + "comment": "from git branch: github-main commit: dad857284bf63d027ac9d6a97e9a1689831bab0d", + "date": "2025-07-03 23:45:04Z" + }, + "validation": { + "vkGetInstanceProcAddr": { + "core": [ + { + "vuid": "VUID-vkGetInstanceProcAddr-instance-parameter", + "text": "If instance is not NULL, instance must be a valid VkInstance handle", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkGetInstanceProcAddr-pName-parameter", + "text": "pName must be a null-terminated UTF-8 string", + "page": "chapters/initialization.html" + } + ] + }, + "vkGetDeviceProcAddr": { + "core": [ + { + "vuid": "VUID-vkGetDeviceProcAddr-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkGetDeviceProcAddr-pName-parameter", + "text": "pName must be a null-terminated UTF-8 string", + "page": "chapters/initialization.html" + } + ] + }, + "vkEnumerateInstanceVersion": { + "core": [ + { + "vuid": "VUID-vkEnumerateInstanceVersion-pApiVersion-parameter", + "text": "pApiVersion must be a valid pointer to a uint32_t value", + "page": "chapters/initialization.html" + } + ] + }, + "vkCreateInstance": { + "core": [ + { + "vuid": "VUID-vkCreateInstance-ppEnabledExtensionNames-01388", + "text": "All required extensions for each extension in the VkInstanceCreateInfo::ppEnabledExtensionNames list must also be present in that list", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkCreateInstance-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkInstanceCreateInfo structure", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkCreateInstance-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkCreateInstance-pInstance-parameter", + "text": "pInstance must be a valid pointer to a VkInstance handle", + "page": "chapters/initialization.html" + } + ] + }, + "VkInstanceCreateInfo": { + "core": [ + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-04925", + "text": "If the pNext chain of VkInstanceCreateInfo includes a VkDebugReportCallbackCreateInfoEXT structure, the list of enabled extensions in ppEnabledExtensionNames must contain VK_EXT_debug_report", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-04926", + "text": "If the pNext chain of VkInstanceCreateInfo includes a VkDebugUtilsMessengerCreateInfoEXT structure, the list of enabled extensions in ppEnabledExtensionNames must contain VK_EXT_debug_utils", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-06779", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be either VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT or VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-flags-06559", + "text": "If flags has the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit set, the list of enabled extensions in ppEnabledExtensionNames must contain VK_KHR_portability_enumeration", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-09400", + "text": "If the pNext chain of VkInstanceCreateInfo includes a VkDirectDriverLoadingListLUNARG structure, the list of enabled extensions in ppEnabledExtensionNames must contain VK_LUNARG_direct_driver_loading", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-10242", + "text": "If the pNext chain of VkInstanceCreateInfo includes a VkLayerSettingsCreateInfoEXT structure, the list of enabled extensions in ppEnabledExtensionNames must contain VK_EXT_layer_settings", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-10243", + "text": "If the pNext chain of VkInstanceCreateInfo includes a VkValidationFeaturesEXT structure, the list of enabled extensions in ppEnabledExtensionNames must contain VK_EXT_validation_features", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-10244", + "text": "If the pNext chain of VkInstanceCreateInfo includes a VkValidationFlagsEXT structure, the list of enabled extensions in ppEnabledExtensionNames must contain VK_EXT_validation_flags", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDebugReportCallbackCreateInfoEXT, VkDebugUtilsMessengerCreateInfoEXT, VkDirectDriverLoadingListLUNARG, VkExportMetalObjectCreateInfoEXT, VkLayerSettingsCreateInfoEXT, VkValidationFeaturesEXT, or VkValidationFlagsEXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkDebugUtilsMessengerCreateInfoEXT, VkExportMetalObjectCreateInfoEXT, or VkLayerSettingsCreateInfoEXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkInstanceCreateFlagBits values", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-pApplicationInfo-parameter", + "text": "If pApplicationInfo is not NULL, pApplicationInfo must be a valid pointer to a valid VkApplicationInfo structure", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-ppEnabledLayerNames-parameter", + "text": "If enabledLayerCount is not 0, ppEnabledLayerNames must be a valid pointer to an array of enabledLayerCount null-terminated UTF-8 strings", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkInstanceCreateInfo-ppEnabledExtensionNames-parameter", + "text": "If enabledExtensionCount is not 0, ppEnabledExtensionNames must be a valid pointer to an array of enabledExtensionCount null-terminated UTF-8 strings", + "page": "chapters/initialization.html" + } + ] + }, + "VkValidationFlagsEXT": { + "core": [ + { + "vuid": "VUID-VkValidationFlagsEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkValidationFlagsEXT-pDisabledValidationChecks-parameter", + "text": "pDisabledValidationChecks must be a valid pointer to an array of disabledValidationCheckCount valid VkValidationCheckEXT values", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkValidationFlagsEXT-disabledValidationCheckCount-arraylength", + "text": "disabledValidationCheckCount must be greater than 0", + "page": "chapters/initialization.html" + } + ] + }, + "VkValidationFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02967", + "text": "If the pEnabledValidationFeatures array contains VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, then it must also contain VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT or VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkValidationFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-parameter", + "text": "If enabledValidationFeatureCount is not 0, pEnabledValidationFeatures must be a valid pointer to an array of enabledValidationFeatureCount valid VkValidationFeatureEnableEXT values", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkValidationFeaturesEXT-pDisabledValidationFeatures-parameter", + "text": "If disabledValidationFeatureCount is not 0, pDisabledValidationFeatures must be a valid pointer to an array of disabledValidationFeatureCount valid VkValidationFeatureDisableEXT values", + "page": "chapters/initialization.html" + } + ] + }, + "VkLayerSettingsCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkLayerSettingsCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkLayerSettingsCreateInfoEXT-pSettings-parameter", + "text": "If settingCount is not 0, pSettings must be a valid pointer to an array of settingCount valid VkLayerSettingEXT structures", + "page": "chapters/initialization.html" + } + ] + }, + "VkLayerSettingEXT": { + "core": [ + { + "vuid": "VUID-VkLayerSettingEXT-valueCount-10070", + "text": "If valueCount is not 0, pValues must be a valid pointer to an array of valueCount values of the type indicated by type", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkLayerSettingEXT-pLayerName-parameter", + "text": "pLayerName must be a null-terminated UTF-8 string", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkLayerSettingEXT-pSettingName-parameter", + "text": "pSettingName must be a null-terminated UTF-8 string", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkLayerSettingEXT-type-parameter", + "text": "type must be a valid VkLayerSettingTypeEXT value", + "page": "chapters/initialization.html" + } + ] + }, + "VkDirectDriverLoadingListLUNARG": { + "core": [ + { + "vuid": "VUID-VkDirectDriverLoadingListLUNARG-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkDirectDriverLoadingListLUNARG-mode-parameter", + "text": "mode must be a valid VkDirectDriverLoadingModeLUNARG value", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkDirectDriverLoadingListLUNARG-pDrivers-parameter", + "text": "pDrivers must be a valid pointer to an array of driverCount valid VkDirectDriverLoadingInfoLUNARG structures", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkDirectDriverLoadingListLUNARG-driverCount-arraylength", + "text": "driverCount must be greater than 0", + "page": "chapters/initialization.html" + } + ] + }, + "VkDirectDriverLoadingInfoLUNARG": { + "core": [ + { + "vuid": "VUID-VkDirectDriverLoadingInfoLUNARG-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkDirectDriverLoadingInfoLUNARG-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/initialization.html" + } + ] + }, + "VkApplicationInfo": { + "core": [ + { + "vuid": "VUID-VkApplicationInfo-apiVersion-04010", + "text": "If apiVersion is not 0, then it must be greater than or equal to VK_API_VERSION_1_0", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkApplicationInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_APPLICATION_INFO", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkApplicationInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkApplicationInfo-pApplicationName-parameter", + "text": "If pApplicationName is not NULL, pApplicationName must be a null-terminated UTF-8 string", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-VkApplicationInfo-pEngineName-parameter", + "text": "If pEngineName is not NULL, pEngineName must be a null-terminated UTF-8 string", + "page": "chapters/initialization.html" + } + ] + }, + "vkDestroyInstance": { + "core": [ + { + "vuid": "VUID-vkDestroyInstance-instance-00629", + "text": "All child objects that were created with instance or with a VkPhysicalDevice retrieved from it, and that can be destroyed or freed, must have been destroyed or freed prior to destroying instance", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkDestroyInstance-instance-00630", + "text": "If VkAllocationCallbacks were provided when instance was created, a compatible set of callbacks must be provided here", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkDestroyInstance-instance-00631", + "text": "If no VkAllocationCallbacks were provided when instance was created, pAllocator must be NULL", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkDestroyInstance-instance-parameter", + "text": "If instance is not NULL, instance must be a valid VkInstance handle", + "page": "chapters/initialization.html" + }, + { + "vuid": "VUID-vkDestroyInstance-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/initialization.html" + } + ] + }, + "vkEnumeratePhysicalDevices": { + "core": [ + { + "vuid": "VUID-vkEnumeratePhysicalDevices-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter", + "text": "pPhysicalDeviceCount must be a valid pointer to a uint32_t value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDevices-pPhysicalDevices-parameter", + "text": "If the value referenced by pPhysicalDeviceCount is not 0, and pPhysicalDevices is not NULL, pPhysicalDevices must be a valid pointer to an array of pPhysicalDeviceCount VkPhysicalDevice handles", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkGetPhysicalDeviceProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceProperties-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkPhysicalDeviceProperties structure", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkGetPhysicalDeviceProperties2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceProperties2-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkPhysicalDeviceProperties2 structure", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceProperties2": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceProperties2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceProperties2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPhysicalDeviceAccelerationStructurePropertiesKHR, VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT, VkPhysicalDeviceClusterAccelerationStructurePropertiesNV, VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI, VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR, VkPhysicalDeviceConservativeRasterizationPropertiesEXT, VkPhysicalDeviceCooperativeMatrix2PropertiesNV, VkPhysicalDeviceCooperativeMatrixPropertiesKHR, VkPhysicalDeviceCooperativeMatrixPropertiesNV, VkPhysicalDeviceCooperativeVectorPropertiesNV, VkPhysicalDeviceCopyMemoryIndirectPropertiesNV, VkPhysicalDeviceCudaKernelLaunchPropertiesNV, VkPhysicalDeviceCustomBorderColorPropertiesEXT, VkPhysicalDeviceDepthStencilResolveProperties, VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT, VkPhysicalDeviceDescriptorBufferPropertiesEXT, VkPhysicalDeviceDescriptorBufferTensorPropertiesARM, VkPhysicalDeviceDescriptorIndexingProperties, VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT, VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV, VkPhysicalDeviceDiscardRectanglePropertiesEXT, VkPhysicalDeviceDisplacementMicromapPropertiesNV, VkPhysicalDeviceDriverProperties, VkPhysicalDeviceDrmPropertiesEXT, VkPhysicalDeviceExtendedDynamicState3PropertiesEXT, VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV, VkPhysicalDeviceExternalComputeQueuePropertiesNV, VkPhysicalDeviceExternalFormatResolvePropertiesANDROID, VkPhysicalDeviceExternalMemoryHostPropertiesEXT, VkPhysicalDeviceFloatControlsProperties, VkPhysicalDeviceFragmentDensityMap2PropertiesEXT, VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE, VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT, VkPhysicalDeviceFragmentDensityMapPropertiesEXT, VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR, VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV, VkPhysicalDeviceFragmentShadingRatePropertiesKHR, VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT, VkPhysicalDeviceHostImageCopyProperties, VkPhysicalDeviceIDProperties, VkPhysicalDeviceImageAlignmentControlPropertiesMESA, VkPhysicalDeviceImageProcessing2PropertiesQCOM, VkPhysicalDeviceImageProcessingPropertiesQCOM, VkPhysicalDeviceInlineUniformBlockProperties, VkPhysicalDeviceLayeredApiPropertiesListKHR, VkPhysicalDeviceLayeredDriverPropertiesMSFT, VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT, VkPhysicalDeviceLineRasterizationProperties, VkPhysicalDeviceMaintenance3Properties, VkPhysicalDeviceMaintenance4Properties, VkPhysicalDeviceMaintenance5Properties, VkPhysicalDeviceMaintenance6Properties, VkPhysicalDeviceMaintenance7PropertiesKHR, VkPhysicalDeviceMaintenance9PropertiesKHR, VkPhysicalDeviceMapMemoryPlacedPropertiesEXT, VkPhysicalDeviceMemoryDecompressionPropertiesNV, VkPhysicalDeviceMeshShaderPropertiesEXT, VkPhysicalDeviceMeshShaderPropertiesNV, VkPhysicalDeviceMultiDrawPropertiesEXT, VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX, VkPhysicalDeviceMultiviewProperties, VkPhysicalDeviceNestedCommandBufferPropertiesEXT, VkPhysicalDeviceOpacityMicromapPropertiesEXT, VkPhysicalDeviceOpticalFlowPropertiesNV, VkPhysicalDevicePCIBusInfoPropertiesEXT, VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV, VkPhysicalDevicePerformanceQueryPropertiesKHR, VkPhysicalDevicePipelineBinaryPropertiesKHR, VkPhysicalDevicePipelineRobustnessProperties, VkPhysicalDevicePointClippingProperties, VkPhysicalDevicePortabilitySubsetPropertiesKHR, VkPhysicalDeviceProtectedMemoryProperties, VkPhysicalDeviceProvokingVertexPropertiesEXT, VkPhysicalDevicePushDescriptorProperties, VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV, VkPhysicalDeviceRayTracingPipelinePropertiesKHR, VkPhysicalDeviceRayTracingPropertiesNV, VkPhysicalDeviceRenderPassStripedPropertiesARM, VkPhysicalDeviceRobustness2PropertiesKHR, VkPhysicalDeviceSampleLocationsPropertiesEXT, VkPhysicalDeviceSamplerFilterMinmaxProperties, VkPhysicalDeviceSchedulingControlsPropertiesARM, VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM, VkPhysicalDeviceShaderCoreProperties2AMD, VkPhysicalDeviceShaderCorePropertiesAMD, VkPhysicalDeviceShaderCorePropertiesARM, VkPhysicalDeviceShaderEnqueuePropertiesAMDX, VkPhysicalDeviceShaderIntegerDotProductProperties, VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT, VkPhysicalDeviceShaderObjectPropertiesEXT, VkPhysicalDeviceShaderSMBuiltinsPropertiesNV, VkPhysicalDeviceShaderTileImagePropertiesEXT, VkPhysicalDeviceShadingRateImagePropertiesNV, VkPhysicalDeviceSubgroupProperties, VkPhysicalDeviceSubgroupSizeControlProperties, VkPhysicalDeviceSubpassShadingPropertiesHUAWEI, VkPhysicalDeviceTensorPropertiesARM, VkPhysicalDeviceTexelBufferAlignmentProperties, VkPhysicalDeviceTileMemoryHeapPropertiesQCOM, VkPhysicalDeviceTileShadingPropertiesQCOM, VkPhysicalDeviceTimelineSemaphoreProperties, VkPhysicalDeviceTransformFeedbackPropertiesEXT, VkPhysicalDeviceVertexAttributeDivisorProperties, VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT, VkPhysicalDeviceVulkan11Properties, VkPhysicalDeviceVulkan12Properties, VkPhysicalDeviceVulkan13Properties, or VkPhysicalDeviceVulkan14Properties", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceProperties2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceVulkan11Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan11Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceVulkan12Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan12Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceVulkan13Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan13Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceVulkan14Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan14Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceIDProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceIDProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceDriverProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDriverProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDevicePCIBusInfoPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePCIBusInfoPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceDrmPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDrmPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceShaderIntegerDotProductProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderIntegerDotProductProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceImageProcessingPropertiesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageProcessingPropertiesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceShaderTileImagePropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderTileImagePropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceImageProcessing2PropertiesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageProcessing2PropertiesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceLayeredDriverPropertiesMSFT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLayeredDriverPropertiesMSFT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceSchedulingControlsPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSchedulingControlsPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkGetPhysicalDeviceQueueFamilyProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-pQueueFamilyPropertyCount-parameter", + "text": "pQueueFamilyPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties-pQueueFamilyProperties-parameter", + "text": "If the value referenced by pQueueFamilyPropertyCount is not 0, and pQueueFamilyProperties is not NULL, pQueueFamilyProperties must be a valid pointer to an array of pQueueFamilyPropertyCount VkQueueFamilyProperties structures", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkGetPhysicalDeviceQueueFamilyProperties2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties2-pQueueFamilyPropertyCount-parameter", + "text": "pQueueFamilyPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyProperties2-pQueueFamilyProperties-parameter", + "text": "If the value referenced by pQueueFamilyPropertyCount is not 0, and pQueueFamilyProperties is not NULL, pQueueFamilyProperties must be a valid pointer to an array of pQueueFamilyPropertyCount VkQueueFamilyProperties2 structures", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyProperties2": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyProperties2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkQueueFamilyProperties2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkQueueFamilyCheckpointProperties2NV, VkQueueFamilyCheckpointPropertiesNV, VkQueueFamilyGlobalPriorityProperties, VkQueueFamilyOwnershipTransferPropertiesKHR, VkQueueFamilyQueryResultStatusPropertiesKHR, or VkQueueFamilyVideoPropertiesKHR", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkQueueFamilyProperties2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyGlobalPriorityProperties": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyGlobalPriorityProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyCheckpointProperties2NV": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyCheckpointProperties2NV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyCheckpointPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyCheckpointPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyVideoPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyVideoPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyQueryResultStatusPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyQueryResultStatusPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR": { + "core": [ + { + "vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounterCount-parameter", + "text": "pCounterCount must be a valid pointer to a uint32_t value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounters-parameter", + "text": "If the value referenced by pCounterCount is not 0, and pCounters is not NULL, pCounters must be a valid pointer to an array of pCounterCount VkPerformanceCounterKHR structures", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounterDescriptions-parameter", + "text": "If the value referenced by pCounterCount is not 0, and pCounterDescriptions is not NULL, pCounterDescriptions must be a valid pointer to an array of pCounterCount VkPerformanceCounterDescriptionKHR structures", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPerformanceCounterKHR": { + "core": [ + { + "vuid": "VUID-VkPerformanceCounterKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkPerformanceCounterKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPerformanceCounterDescriptionKHR": { + "core": [ + { + "vuid": "VUID-VkPerformanceCounterDescriptionKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkPerformanceCounterDescriptionKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkQueueFamilyOwnershipTransferPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyOwnershipTransferPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkEnumeratePhysicalDeviceGroups": { + "core": [ + { + "vuid": "VUID-vkEnumeratePhysicalDeviceGroups-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDeviceGroups-pPhysicalDeviceGroupCount-parameter", + "text": "pPhysicalDeviceGroupCount must be a valid pointer to a uint32_t value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkEnumeratePhysicalDeviceGroups-pPhysicalDeviceGroupProperties-parameter", + "text": "If the value referenced by pPhysicalDeviceGroupCount is not 0, and pPhysicalDeviceGroupProperties is not NULL, pPhysicalDeviceGroupProperties must be a valid pointer to an array of pPhysicalDeviceGroupCount VkPhysicalDeviceGroupProperties structures", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkPhysicalDeviceGroupProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceGroupProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceGroupProperties-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkCreateDevice": { + "core": [ + { + "vuid": "VUID-vkCreateDevice-ppEnabledExtensionNames-01387", + "text": "All required device extensions for each extension in the VkDeviceCreateInfo::ppEnabledExtensionNames list must also be present in that list.", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkCreateDevice-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkCreateDevice-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDeviceCreateInfo structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkCreateDevice-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkCreateDevice-pDevice-parameter", + "text": "pDevice must be a valid pointer to a VkDevice handle", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceCreateInfo-queueFamilyIndex-02802", + "text": "The queueFamilyIndex member of each element of pQueueCreateInfos must be unique within pQueueCreateInfos , except that two members can share the same queueFamilyIndex if one describes protected-capable queues and one describes queues that are not protected-capable", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pQueueCreateInfos-06755", + "text": "If multiple elements of pQueueCreateInfos share the same queueFamilyIndex, the sum of their queueCount members must be less than or equal to the queueCount member of the VkQueueFamilyProperties structure, as returned by vkGetPhysicalDeviceQueueFamilyProperties in the pQueueFamilyProperties[queueFamilyIndex]", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pQueueCreateInfos-06654", + "text": "If multiple elements of pQueueCreateInfos share the same queueFamilyIndex, then all of such elements must have the same global priority level, which can be specified explicitly by the including a VkDeviceQueueGlobalPriorityCreateInfo structure in the pNext chain, or by the implicit default value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-00373", + "text": "If the pNext chain includes a VkPhysicalDeviceFeatures2 structure, then pEnabledFeatures must be NULL", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840", + "text": "If VkPhysicalDeviceProperties::apiVersion advertises Vulkan 1.1 or later, ppEnabledExtensionNames must not contain VK_AMD_negative_viewport_height", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374", + "text": "ppEnabledExtensionNames must not contain both VK_KHR_maintenance1 and VK_AMD_negative_viewport_height", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328", + "text": "ppEnabledExtensionNames must not contain both VK_KHR_buffer_device_address and VK_EXT_buffer_device_address", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-04748", + "text": "If the pNext chain includes a VkPhysicalDeviceVulkan12Features structure and VkPhysicalDeviceVulkan12Features::bufferDeviceAddress is VK_TRUE, ppEnabledExtensionNames must not contain VK_EXT_buffer_device_address", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-02829", + "text": "If the pNext chain includes a VkPhysicalDeviceVulkan11Features structure, then it must not include a VkPhysicalDevice16BitStorageFeatures, VkPhysicalDeviceMultiviewFeatures, VkPhysicalDeviceVariablePointersFeatures, VkPhysicalDeviceProtectedMemoryFeatures, VkPhysicalDeviceSamplerYcbcrConversionFeatures, or VkPhysicalDeviceShaderDrawParametersFeatures structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-02830", + "text": "If the pNext chain includes a VkPhysicalDeviceVulkan12Features structure, then it must not include a VkPhysicalDevice8BitStorageFeatures, VkPhysicalDeviceShaderAtomicInt64Features, VkPhysicalDeviceShaderFloat16Int8Features, VkPhysicalDeviceDescriptorIndexingFeatures, VkPhysicalDeviceScalarBlockLayoutFeatures, VkPhysicalDeviceImagelessFramebufferFeatures, VkPhysicalDeviceUniformBufferStandardLayoutFeatures, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, VkPhysicalDeviceHostQueryResetFeatures, VkPhysicalDeviceTimelineSemaphoreFeatures, VkPhysicalDeviceBufferDeviceAddressFeatures, or VkPhysicalDeviceVulkanMemoryModelFeatures structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-04476", + "text": "If ppEnabledExtensionNames contains \"VK_KHR_shader_draw_parameters\" and the pNext chain includes a VkPhysicalDeviceVulkan11Features structure, then VkPhysicalDeviceVulkan11Features::shaderDrawParameters must be VK_TRUE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02831", + "text": "If ppEnabledExtensionNames contains \"VK_KHR_draw_indirect_count\" and the pNext chain includes a VkPhysicalDeviceVulkan12Features structure, then VkPhysicalDeviceVulkan12Features::drawIndirectCount must be VK_TRUE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02832", + "text": "If ppEnabledExtensionNames contains \"VK_KHR_sampler_mirror_clamp_to_edge\" and the pNext chain includes a VkPhysicalDeviceVulkan12Features structure, then VkPhysicalDeviceVulkan12Features::samplerMirrorClampToEdge must be VK_TRUE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02833", + "text": "If ppEnabledExtensionNames contains \"VK_EXT_descriptor_indexing\" and the pNext chain includes a VkPhysicalDeviceVulkan12Features structure, then VkPhysicalDeviceVulkan12Features::descriptorIndexing must be VK_TRUE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02834", + "text": "If ppEnabledExtensionNames contains \"VK_EXT_sampler_filter_minmax\" and the pNext chain includes a VkPhysicalDeviceVulkan12Features structure, then VkPhysicalDeviceVulkan12Features::samplerFilterMinmax must be VK_TRUE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02835", + "text": "If ppEnabledExtensionNames contains \"VK_EXT_shader_viewport_index_layer\" and the pNext chain includes a VkPhysicalDeviceVulkan12Features structure, then VkPhysicalDeviceVulkan12Features::shaderOutputViewportIndex and VkPhysicalDeviceVulkan12Features::shaderOutputLayer must both be VK_TRUE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-06532", + "text": "If the pNext chain includes a VkPhysicalDeviceVulkan13Features structure, then it must not include a VkPhysicalDeviceDynamicRenderingFeatures, VkPhysicalDeviceImageRobustnessFeatures, VkPhysicalDeviceInlineUniformBlockFeatures, VkPhysicalDeviceMaintenance4Features, VkPhysicalDevicePipelineCreationCacheControlFeatures, VkPhysicalDevicePrivateDataFeatures, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures, VkPhysicalDeviceShaderIntegerDotProductFeatures, VkPhysicalDeviceShaderTerminateInvocationFeatures, VkPhysicalDeviceSubgroupSizeControlFeatures, VkPhysicalDeviceSynchronization2Features, VkPhysicalDeviceTextureCompressionASTCHDRFeatures, or VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-10360", + "text": "If the pNext chain includes a VkPhysicalDeviceVulkan14Features structure, then it must not include a VkPhysicalDeviceGlobalPriorityQueryFeatures, VkPhysicalDeviceShaderSubgroupRotateFeatures, VkPhysicalDeviceShaderFloatControls2Features, VkPhysicalDeviceShaderExpectAssumeFeatures, VkPhysicalDeviceLineRasterizationFeatures, VkPhysicalDeviceVertexAttributeDivisorFeatures, VkPhysicalDeviceIndexTypeUint8Features, VkPhysicalDeviceDynamicRenderingLocalReadFeatures, VkPhysicalDeviceMaintenance5Features, VkPhysicalDeviceMaintenance6Features, VkPhysicalDevicePipelineProtectedAccessFeatures, VkPhysicalDevicePipelineRobustnessFeatures, or VkPhysicalDeviceHostImageCopyFeatures structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pProperties-04451", + "text": "If the VK_KHR_portability_subset extension is included in pProperties of vkEnumerateDeviceExtensionProperties, ppEnabledExtensionNames must include \"VK_KHR_portability_subset\"", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-shadingRateImage-04478", + "text": "If the shadingRateImage feature is enabled, the pipelineFragmentShadingRate feature must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-shadingRateImage-04479", + "text": "If the shadingRateImage feature is enabled, the primitiveFragmentShadingRate feature must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-shadingRateImage-04480", + "text": "If the shadingRateImage feature is enabled, the attachmentFragmentShadingRate feature must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-fragmentDensityMap-04481", + "text": "If the fragmentDensityMap feature is enabled, the pipelineFragmentShadingRate feature must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-fragmentDensityMap-04482", + "text": "If the fragmentDensityMap feature is enabled, the primitiveFragmentShadingRate feature must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-fragmentDensityMap-04483", + "text": "If the fragmentDensityMap feature is enabled, the attachmentFragmentShadingRate feature must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-None-04896", + "text": "If the sparseImageInt64Atomics feature is enabled, shaderImageInt64Atomics must be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-None-04897", + "text": "If the sparseImageFloat32Atomics feature is enabled, shaderImageFloat32Atomics must be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-None-04898", + "text": "If the sparseImageFloat32AtomicAdd feature is enabled, shaderImageFloat32AtomicAdd must be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-sparseImageFloat32AtomicMinMax-04975", + "text": "If the sparseImageFloat32AtomicMinMax feature is enabled, shaderImageFloat32AtomicMinMax must be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-robustBufferAccess-10247", + "text": "If the robustBufferAccess feature is enabled, and robustBufferAccessUpdateAfterBind is VK_FALSE, then descriptorBindingUniformBufferUpdateAfterBind, descriptorBindingStorageBufferUpdateAfterBind, descriptorBindingUniformTexelBufferUpdateAfterBind, and descriptorBindingStorageTexelBufferUpdateAfterBind must not be enabled", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-None-08095", + "text": "If the descriptorBuffer feature is enabled, ppEnabledExtensionNames must not contain VK_AMD_shader_fragment_mask", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-09396", + "text": "If the pNext chain includes a VkDeviceQueueShaderCoreControlCreateInfoARM structure, then it must not be included in the pNext chain of any of the VkDeviceQueueCreateInfo structures in pQueueCreateInfos", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-09397", + "text": "If the pNext chain includes a VkDeviceQueueShaderCoreControlCreateInfoARM structure then VkPhysicalDeviceSchedulingControlsPropertiesARM::schedulingControlsFlags must contain VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-None-10778", + "text": "If the maintenance9 feature is not supported, queueCreateInfoCount must be greater than 0", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceDeviceMemoryReportCreateInfoEXT, VkDeviceDiagnosticsConfigCreateInfoNV, VkDeviceGroupDeviceCreateInfo, VkDeviceMemoryOverallocationCreateInfoAMD, VkDevicePipelineBinaryInternalCacheControlKHR, VkDevicePrivateDataCreateInfo, VkDeviceQueueShaderCoreControlCreateInfoARM, VkExternalComputeQueueDeviceCreateInfoNV, VkPhysicalDevice16BitStorageFeatures, VkPhysicalDevice4444FormatsFeaturesEXT, VkPhysicalDevice8BitStorageFeatures, VkPhysicalDeviceASTCDecodeFeaturesEXT, VkPhysicalDeviceAccelerationStructureFeaturesKHR, VkPhysicalDeviceAddressBindingReportFeaturesEXT, VkPhysicalDeviceAmigoProfilingFeaturesSEC, VkPhysicalDeviceAntiLagFeaturesAMD, VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT, VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT, VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, VkPhysicalDeviceBufferDeviceAddressFeatures, VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, VkPhysicalDeviceClusterAccelerationStructureFeaturesNV, VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI, VkPhysicalDeviceCoherentMemoryFeaturesAMD, VkPhysicalDeviceColorWriteEnableFeaturesEXT, VkPhysicalDeviceCommandBufferInheritanceFeaturesNV, VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR, VkPhysicalDeviceConditionalRenderingFeaturesEXT, VkPhysicalDeviceCooperativeMatrix2FeaturesNV, VkPhysicalDeviceCooperativeMatrixFeaturesKHR, VkPhysicalDeviceCooperativeMatrixFeaturesNV, VkPhysicalDeviceCooperativeVectorFeaturesNV, VkPhysicalDeviceCopyMemoryIndirectFeaturesNV, VkPhysicalDeviceCornerSampledImageFeaturesNV, VkPhysicalDeviceCoverageReductionModeFeaturesNV, VkPhysicalDeviceCubicClampFeaturesQCOM, VkPhysicalDeviceCubicWeightsFeaturesQCOM, VkPhysicalDeviceCudaKernelLaunchFeaturesNV, VkPhysicalDeviceCustomBorderColorFeaturesEXT, VkPhysicalDeviceDataGraphFeaturesARM, VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV, VkPhysicalDeviceDepthBiasControlFeaturesEXT, VkPhysicalDeviceDepthClampControlFeaturesEXT, VkPhysicalDeviceDepthClampZeroOneFeaturesKHR, VkPhysicalDeviceDepthClipControlFeaturesEXT, VkPhysicalDeviceDepthClipEnableFeaturesEXT, VkPhysicalDeviceDescriptorBufferFeaturesEXT, VkPhysicalDeviceDescriptorBufferTensorFeaturesARM, VkPhysicalDeviceDescriptorIndexingFeatures, VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV, VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE, VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV, VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT, VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV, VkPhysicalDeviceDeviceMemoryReportFeaturesEXT, VkPhysicalDeviceDiagnosticsConfigFeaturesNV, VkPhysicalDeviceDisplacementMicromapFeaturesNV, VkPhysicalDeviceDynamicRenderingFeatures, VkPhysicalDeviceDynamicRenderingLocalReadFeatures, VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT, VkPhysicalDeviceExclusiveScissorFeaturesNV, VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV, VkPhysicalDeviceExternalFormatResolveFeaturesANDROID, VkPhysicalDeviceExternalMemoryRDMAFeaturesNV, VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX, VkPhysicalDeviceFaultFeaturesEXT, VkPhysicalDeviceFeatures2, VkPhysicalDeviceFormatPackFeaturesARM, VkPhysicalDeviceFragmentDensityMap2FeaturesEXT, VkPhysicalDeviceFragmentDensityMapFeaturesEXT, VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE, VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT, VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR, VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, VkPhysicalDeviceFragmentShadingRateFeaturesKHR, VkPhysicalDeviceFrameBoundaryFeaturesEXT, VkPhysicalDeviceGlobalPriorityQueryFeatures, VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT, VkPhysicalDeviceHdrVividFeaturesHUAWEI, VkPhysicalDeviceHostImageCopyFeatures, VkPhysicalDeviceHostQueryResetFeatures, VkPhysicalDeviceImage2DViewOf3DFeaturesEXT, VkPhysicalDeviceImageAlignmentControlFeaturesMESA, VkPhysicalDeviceImageCompressionControlFeaturesEXT, VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT, VkPhysicalDeviceImageProcessing2FeaturesQCOM, VkPhysicalDeviceImageProcessingFeaturesQCOM, VkPhysicalDeviceImageRobustnessFeatures, VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT, VkPhysicalDeviceImageViewMinLodFeaturesEXT, VkPhysicalDeviceImagelessFramebufferFeatures, VkPhysicalDeviceIndexTypeUint8Features, VkPhysicalDeviceInheritedViewportScissorFeaturesNV, VkPhysicalDeviceInlineUniformBlockFeatures, VkPhysicalDeviceInvocationMaskFeaturesHUAWEI, VkPhysicalDeviceLegacyDitheringFeaturesEXT, VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT, VkPhysicalDeviceLineRasterizationFeatures, VkPhysicalDeviceLinearColorAttachmentFeaturesNV, VkPhysicalDeviceMaintenance4Features, VkPhysicalDeviceMaintenance5Features, VkPhysicalDeviceMaintenance6Features, VkPhysicalDeviceMaintenance7FeaturesKHR, VkPhysicalDeviceMaintenance8FeaturesKHR, VkPhysicalDeviceMaintenance9FeaturesKHR, VkPhysicalDeviceMapMemoryPlacedFeaturesEXT, VkPhysicalDeviceMemoryDecompressionFeaturesNV, VkPhysicalDeviceMemoryPriorityFeaturesEXT, VkPhysicalDeviceMeshShaderFeaturesEXT, VkPhysicalDeviceMeshShaderFeaturesNV, VkPhysicalDeviceMultiDrawFeaturesEXT, VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT, VkPhysicalDeviceMultiviewFeatures, VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM, VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT, VkPhysicalDeviceNestedCommandBufferFeaturesEXT, VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT, VkPhysicalDeviceOpacityMicromapFeaturesEXT, VkPhysicalDeviceOpticalFlowFeaturesNV, VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT, VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV, VkPhysicalDevicePerStageDescriptorSetFeaturesNV, VkPhysicalDevicePerformanceQueryFeaturesKHR, VkPhysicalDevicePipelineBinaryFeaturesKHR, VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC, VkPhysicalDevicePipelineCreationCacheControlFeatures, VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR, VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT, VkPhysicalDevicePipelineOpacityMicromapFeaturesARM, VkPhysicalDevicePipelinePropertiesFeaturesEXT, VkPhysicalDevicePipelineProtectedAccessFeatures, VkPhysicalDevicePipelineRobustnessFeatures, VkPhysicalDevicePortabilitySubsetFeaturesKHR, VkPhysicalDevicePresentBarrierFeaturesNV, VkPhysicalDevicePresentId2FeaturesKHR, VkPhysicalDevicePresentIdFeaturesKHR, VkPhysicalDevicePresentMeteringFeaturesNV, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR, VkPhysicalDevicePresentWait2FeaturesKHR, VkPhysicalDevicePresentWaitFeaturesKHR, VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT, VkPhysicalDevicePrivateDataFeatures, VkPhysicalDeviceProtectedMemoryFeatures, VkPhysicalDeviceProvokingVertexFeaturesEXT, VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT, VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT, VkPhysicalDeviceRawAccessChainsFeaturesNV, VkPhysicalDeviceRayQueryFeaturesKHR, VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV, VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV, VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR, VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, VkPhysicalDeviceRayTracingPipelineFeaturesKHR, VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR, VkPhysicalDeviceRayTracingValidationFeaturesNV, VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG, VkPhysicalDeviceRenderPassStripedFeaturesARM, VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV, VkPhysicalDeviceRobustness2FeaturesKHR, VkPhysicalDeviceSamplerYcbcrConversionFeatures, VkPhysicalDeviceScalarBlockLayoutFeatures, VkPhysicalDeviceSchedulingControlsFeaturesARM, VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV, VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, VkPhysicalDeviceShaderAtomicInt64Features, VkPhysicalDeviceShaderBfloat16FeaturesKHR, VkPhysicalDeviceShaderClockFeaturesKHR, VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM, VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures, VkPhysicalDeviceShaderDrawParametersFeatures, VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD, VkPhysicalDeviceShaderEnqueueFeaturesAMDX, VkPhysicalDeviceShaderExpectAssumeFeatures, VkPhysicalDeviceShaderFloat16Int8Features, VkPhysicalDeviceShaderFloat8FeaturesEXT, VkPhysicalDeviceShaderFloatControls2Features, VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, VkPhysicalDeviceShaderImageFootprintFeaturesNV, VkPhysicalDeviceShaderIntegerDotProductFeatures, VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL, VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR, VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT, VkPhysicalDeviceShaderObjectFeaturesEXT, VkPhysicalDeviceShaderQuadControlFeaturesKHR, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR, VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT, VkPhysicalDeviceShaderSMBuiltinsFeaturesNV, VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, VkPhysicalDeviceShaderSubgroupRotateFeatures, VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR, VkPhysicalDeviceShaderTerminateInvocationFeatures, VkPhysicalDeviceShaderTileImageFeaturesEXT, VkPhysicalDeviceShadingRateImageFeaturesNV, VkPhysicalDeviceSubgroupSizeControlFeatures, VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT, VkPhysicalDeviceSubpassShadingFeaturesHUAWEI, VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR, VkPhysicalDeviceSynchronization2Features, VkPhysicalDeviceTensorFeaturesARM, VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT, VkPhysicalDeviceTextureCompressionASTCHDRFeatures, VkPhysicalDeviceTileMemoryHeapFeaturesQCOM, VkPhysicalDeviceTilePropertiesFeaturesQCOM, VkPhysicalDeviceTileShadingFeaturesQCOM, VkPhysicalDeviceTimelineSemaphoreFeatures, VkPhysicalDeviceTransformFeedbackFeaturesEXT, VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR, VkPhysicalDeviceUniformBufferStandardLayoutFeatures, VkPhysicalDeviceVariablePointersFeatures, VkPhysicalDeviceVertexAttributeDivisorFeatures, VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT, VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT, VkPhysicalDeviceVideoDecodeVP9FeaturesKHR, VkPhysicalDeviceVideoEncodeAV1FeaturesKHR, VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR, VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR, VkPhysicalDeviceVideoMaintenance1FeaturesKHR, VkPhysicalDeviceVideoMaintenance2FeaturesKHR, VkPhysicalDeviceVulkan11Features, VkPhysicalDeviceVulkan12Features, VkPhysicalDeviceVulkan13Features, VkPhysicalDeviceVulkan14Features, VkPhysicalDeviceVulkanMemoryModelFeatures, VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT, VkPhysicalDeviceYcbcrDegammaFeaturesQCOM, VkPhysicalDeviceYcbcrImageArraysFeaturesEXT, VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT, or VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkDeviceDeviceMemoryReportCreateInfoEXT or VkDevicePrivateDataCreateInfo", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pQueueCreateInfos-parameter", + "text": "If queueCreateInfoCount is not 0, pQueueCreateInfos must be a valid pointer to an array of queueCreateInfoCount valid VkDeviceQueueCreateInfo structures", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledLayerNames-parameter", + "text": "If enabledLayerCount is not 0, ppEnabledLayerNames must be a valid pointer to an array of enabledLayerCount null-terminated UTF-8 strings", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-parameter", + "text": "If enabledExtensionCount is not 0, ppEnabledExtensionNames must be a valid pointer to an array of enabledExtensionCount null-terminated UTF-8 strings", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceCreateInfo-pEnabledFeatures-parameter", + "text": "If pEnabledFeatures is not NULL, pEnabledFeatures must be a valid pointer to a valid VkPhysicalDeviceFeatures structure", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceGroupDeviceCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00375", + "text": "Each element of pPhysicalDevices must be unique", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00376", + "text": "All elements of pPhysicalDevices must be in the same device group as enumerated by vkEnumeratePhysicalDeviceGroups", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-physicalDeviceCount-00377", + "text": "If physicalDeviceCount is not 0, the physicalDevice parameter of vkCreateDevice must be an element of pPhysicalDevices", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-parameter", + "text": "If physicalDeviceCount is not 0, pPhysicalDevices must be a valid pointer to an array of physicalDeviceCount valid VkPhysicalDevice handles", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceMemoryOverallocationCreateInfoAMD": { + "core": [ + { + "vuid": "VUID-VkDeviceMemoryOverallocationCreateInfoAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceMemoryOverallocationCreateInfoAMD-overallocationBehavior-parameter", + "text": "overallocationBehavior must be a valid VkMemoryOverallocationBehaviorAMD value", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceDiagnosticsConfigCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkDeviceDiagnosticsConfigCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceDiagnosticsConfigCreateInfoNV-flags-parameter", + "text": "flags must be a valid combination of VkDeviceDiagnosticsConfigFlagBitsNV values", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceDeviceMemoryReportCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-pfnUserCallback-parameter", + "text": "pfnUserCallback must be a valid PFN_vkDeviceMemoryReportCallbackEXT value", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-pUserData-parameter", + "text": "pUserData must be a pointer value", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceMemoryReportCallbackDataEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceMemoryReportCallbackDataEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceMemoryReportCallbackDataEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDevicePrivateDataCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDevicePrivateDataCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDevicePipelineBinaryInternalCacheControlKHR": { + "core": [ + { + "vuid": "VUID-VkDevicePipelineBinaryInternalCacheControlKHR-disableInternalCache-09602", + "text": "If VkPhysicalDevicePipelineBinaryPropertiesKHR::pipelineBinaryInternalCacheControl is VK_FALSE, disableInternalCache must be VK_FALSE", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDevicePipelineBinaryInternalCacheControlKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_PIPELINE_BINARY_INTERNAL_CACHE_CONTROL_KHR", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkDestroyDevice": { + "core": [ + { + "vuid": "VUID-vkDestroyDevice-device-05137", + "text": "All child objects created on device that can be destroyed or freed must have been destroyed or freed prior to destroying device", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkDestroyDevice-device-00379", + "text": "If VkAllocationCallbacks were provided when device was created, a compatible set of callbacks must be provided here", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkDestroyDevice-device-00380", + "text": "If no VkAllocationCallbacks were provided when device was created, pAllocator must be NULL", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkDestroyDevice-device-parameter", + "text": "If device is not NULL, device must be a valid VkDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkDestroyDevice-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceQueueCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-queueCount-00382", + "text": "queueCount must be less than or equal to the queueCount member of the VkQueueFamilyProperties structure, as returned by vkGetPhysicalDeviceQueueFamilyProperties in the pQueueFamilyProperties[queueFamilyIndex]", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383", + "text": "Each element of pQueuePriorities must be between 0.0 and 1.0 inclusive", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-flags-02861", + "text": "If the protectedMemory feature is not enabled, the VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit of flags must not be set", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-flags-06449", + "text": "If flags includes VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, queueFamilyIndex must be the index of a queue family that includes the VK_QUEUE_PROTECTED_BIT capability", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-pNext-09398", + "text": "If the pNext chain includes a VkDeviceQueueShaderCoreControlCreateInfoARM structure then VkPhysicalDeviceSchedulingControlsPropertiesARM::schedulingControlsFlags must contain VK_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceQueueGlobalPriorityCreateInfo or VkDeviceQueueShaderCoreControlCreateInfoARM", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkDeviceQueueCreateFlagBits values", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter", + "text": "pQueuePriorities must be a valid pointer to an array of queueCount float values", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueCreateInfo-queueCount-arraylength", + "text": "queueCount must be greater than 0", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceQueueGlobalPriorityCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceQueueGlobalPriorityCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueGlobalPriorityCreateInfo-globalPriority-parameter", + "text": "globalPriority must be a valid VkQueueGlobalPriority value", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceQueueShaderCoreControlCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDeviceQueueShaderCoreControlCreateInfoARM-shaderCoreCount-09399", + "text": "shaderCoreCount must be greater than 0 and less than or equal to the total number of shader cores as reported via VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM::shaderCoreCount", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueShaderCoreControlCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkGetDeviceQueue": { + "core": [ + { + "vuid": "VUID-vkGetDeviceQueue-queueFamilyIndex-00384", + "text": "queueFamilyIndex must be one of the queue family indices specified when device was created, via the VkDeviceQueueCreateInfo structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetDeviceQueue-queueIndex-00385", + "text": "queueIndex must be less than the value of VkDeviceQueueCreateInfo::queueCount for the queue family indicated by queueFamilyIndex when device was created", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetDeviceQueue-flags-01841", + "text": "VkDeviceQueueCreateInfo::flags must have been zero when device was created", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetDeviceQueue-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetDeviceQueue-pQueue-parameter", + "text": "pQueue must be a valid pointer to a VkQueue handle", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkGetDeviceQueue2": { + "core": [ + { + "vuid": "VUID-vkGetDeviceQueue2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetDeviceQueue2-pQueueInfo-parameter", + "text": "pQueueInfo must be a valid pointer to a valid VkDeviceQueueInfo2 structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-vkGetDeviceQueue2-pQueue-parameter", + "text": "pQueue must be a valid pointer to a VkQueue handle", + "page": "chapters/devsandqueues.html" + } + ] + }, + "VkDeviceQueueInfo2": { + "core": [ + { + "vuid": "VUID-VkDeviceQueueInfo2-queueFamilyIndex-01842", + "text": "queueFamilyIndex must be one of the queue family indices specified when device was created, via the VkDeviceQueueCreateInfo structure", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueInfo2-flags-06225", + "text": "flags must be equal to VkDeviceQueueCreateInfo::flags for a VkDeviceQueueCreateInfo structure for the queue family indicated by queueFamilyIndex when device was created", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueInfo2-queueIndex-01843", + "text": "queueIndex must be less than VkDeviceQueueCreateInfo::queueCount for the corresponding queue family and flags indicated by queueFamilyIndex and flags when device was created", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/devsandqueues.html" + }, + { + "vuid": "VUID-VkDeviceQueueInfo2-flags-parameter", + "text": "flags must be a valid combination of VkDeviceQueueCreateFlagBits values", + "page": "chapters/devsandqueues.html" + } + ] + }, + "vkCreateCommandPool": { + "core": [ + { + "vuid": "VUID-vkCreateCommandPool-queueFamilyIndex-01937", + "text": "pCreateInfo->queueFamilyIndex must be the index of a queue family available in the logical device device", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCreateCommandPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCreateCommandPool-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkCommandPoolCreateInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCreateCommandPool-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCreateCommandPool-pCommandPool-parameter", + "text": "pCommandPool must be a valid pointer to a VkCommandPool handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCreateCommandPool-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandPoolCreateInfo": { + "core": [ + { + "vuid": "VUID-VkCommandPoolCreateInfo-flags-02860", + "text": "If the protectedMemory feature is not enabled, the VK_COMMAND_POOL_CREATE_PROTECTED_BIT bit of flags must not be set", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandPoolCreateInfo-pNext-09908", + "text": "If the pNext chain includes a VkDataGraphProcessingEngineCreateInfoARM structure, then queueFamilyIndex must designate a queue family that supports VK_QUEUE_DATA_GRAPH_BIT_ARM", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandPoolCreateInfo-pNext-09909", + "text": "If the pNext chain includes a VkDataGraphProcessingEngineCreateInfoARM structure, then the queue family designated by queueFamilyIndex must support the data graph processing engines specified in the VkDataGraphProcessingEngineCreateInfoARM structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandPoolCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandPoolCreateInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDataGraphProcessingEngineCreateInfoARM", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandPoolCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandPoolCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkCommandPoolCreateFlagBits values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkTrimCommandPool": { + "core": [ + { + "vuid": "VUID-vkTrimCommandPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkTrimCommandPool-commandPool-parameter", + "text": "commandPool must be a valid VkCommandPool handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkTrimCommandPool-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkTrimCommandPool-commandPool-parent", + "text": "commandPool must have been created, allocated, or retrieved from device", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkResetCommandPool": { + "core": [ + { + "vuid": "VUID-vkResetCommandPool-commandPool-00040", + "text": "All VkCommandBuffer objects allocated from commandPool must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandPool-commandPool-parameter", + "text": "commandPool must be a valid VkCommandPool handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandPool-flags-parameter", + "text": "flags must be a valid combination of VkCommandPoolResetFlagBits values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandPool-commandPool-parent", + "text": "commandPool must have been created, allocated, or retrieved from device", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkDestroyCommandPool": { + "core": [ + { + "vuid": "VUID-vkDestroyCommandPool-commandPool-00041", + "text": "All VkCommandBuffer objects allocated from commandPool must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkDestroyCommandPool-commandPool-00042", + "text": "If VkAllocationCallbacks were provided when commandPool was created, a compatible set of callbacks must be provided here", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkDestroyCommandPool-commandPool-00043", + "text": "If no VkAllocationCallbacks were provided when commandPool was created, pAllocator must be NULL", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkDestroyCommandPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkDestroyCommandPool-commandPool-parameter", + "text": "If commandPool is not VK_NULL_HANDLE, commandPool must be a valid VkCommandPool handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkDestroyCommandPool-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkDestroyCommandPool-commandPool-parent", + "text": "If commandPool is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkAllocateCommandBuffers": { + "core": [ + { + "vuid": "VUID-vkAllocateCommandBuffers-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkAllocateCommandBuffers-pAllocateInfo-parameter", + "text": "pAllocateInfo must be a valid pointer to a valid VkCommandBufferAllocateInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkAllocateCommandBuffers-pCommandBuffers-parameter", + "text": "pCommandBuffers must be a valid pointer to an array of pAllocateInfo->commandBufferCount VkCommandBuffer handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkAllocateCommandBuffers-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkAllocateCommandBuffers-pAllocateInfo::commandBufferCount-arraylength", + "text": "pAllocateInfo->commandBufferCount must be greater than 0", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkCommandBufferAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferAllocateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferAllocateInfo-commandPool-parameter", + "text": "commandPool must be a valid VkCommandPool handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferAllocateInfo-level-parameter", + "text": "level must be a valid VkCommandBufferLevel value", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkResetCommandBuffer": { + "core": [ + { + "vuid": "VUID-vkResetCommandBuffer-commandBuffer-00045", + "text": "commandBuffer must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandBuffer-commandBuffer-00046", + "text": "commandBuffer must have been allocated from a pool that was created with the VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkResetCommandBuffer-flags-parameter", + "text": "flags must be a valid combination of VkCommandBufferResetFlagBits values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkFreeCommandBuffers": { + "core": [ + { + "vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-00047", + "text": "All elements of pCommandBuffers must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-00048", + "text": "pCommandBuffers must be a valid pointer to an array of commandBufferCount VkCommandBuffer handles, each element of which must either be a valid handle or NULL", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkFreeCommandBuffers-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkFreeCommandBuffers-commandPool-parameter", + "text": "commandPool must be a valid VkCommandPool handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkFreeCommandBuffers-commandBufferCount-arraylength", + "text": "commandBufferCount must be greater than 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkFreeCommandBuffers-commandPool-parent", + "text": "commandPool must have been created, allocated, or retrieved from device", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkFreeCommandBuffers-pCommandBuffers-parent", + "text": "Each element of pCommandBuffers that is a valid handle must have been created, allocated, or retrieved from commandPool", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkBeginCommandBuffer": { + "core": [ + { + "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00049", + "text": "commandBuffer must not be in the recording or pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00050", + "text": "If commandBuffer was allocated from a VkCommandPool which did not have the VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT flag set, commandBuffer must be in the initial state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00051", + "text": "If commandBuffer is a secondary command buffer, the pInheritanceInfo member of pBeginInfo must be a valid VkCommandBufferInheritanceInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-00052", + "text": "If commandBuffer is a secondary command buffer and either the occlusionQueryEnable member of the pInheritanceInfo member of pBeginInfo is VK_FALSE, or the occlusionQueryPrecise feature is not enabled, then pBeginInfo->pInheritanceInfo->queryFlags must not contain VK_QUERY_CONTROL_PRECISE_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-02840", + "text": "If commandBuffer is a primary command buffer, then pBeginInfo->flags must not set both the VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT and the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flags", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkBeginCommandBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkBeginCommandBuffer-pBeginInfo-parameter", + "text": "pBeginInfo must be a valid pointer to a valid VkCommandBufferBeginInfo structure", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferBeginInfo": { + "core": [ + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-09123", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-00055", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the framebuffer member of pInheritanceInfo must be either VK_NULL_HANDLE, or a valid VkFramebuffer that is compatible with the renderPass member of pInheritanceInfo", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-09240", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the dynamicRendering feature is not enabled, the renderPass member of pInheritanceInfo must not be VK_NULL_HANDLE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-06002", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the renderPass member of pInheritanceInfo is VK_NULL_HANDLE, the pNext chain of pInheritanceInfo must include a VkCommandBufferInheritanceRenderingInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-06003", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the renderPass member of pInheritanceInfo is VK_NULL_HANDLE, and the pNext chain of pInheritanceInfo includes a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, the colorAttachmentCount member of that structure must be equal to the value of VkCommandBufferInheritanceRenderingInfo::colorAttachmentCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-06000", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the renderPass member of pInheritanceInfo is not VK_NULL_HANDLE, the renderPass member of pInheritanceInfo must be a valid VkRenderPass", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-06001", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT and the renderPass member of pInheritanceInfo is not VK_NULL_HANDLE, the subpass member of pInheritanceInfo must be a valid subpass index within the renderPass member of pInheritanceInfo", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-10617", + "text": "If flags contains VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT , the renderPass member of pInheritanceInfo is not VK_NULL_HANDLE, and renderPass was created with tile shading enabled, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-10618", + "text": "If flags does not contain VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT , the renderPass member of pInheritanceInfo is VK_NULL_HANDLE, or renderPass was not created with tile shading enabled, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-10619", + "text": "If VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM is included in VkRenderPassTileShadingCreateInfoQCOM::flags, VkRenderPassTileShadingCreateInfoQCOM::tileApronSize must be equal to the tileApronSize used to create renderPass", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDeviceGroupCommandBufferBeginInfo", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferBeginInfo-flags-parameter", + "text": "flags must be a valid combination of VkCommandBufferUsageFlagBits values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferInheritanceInfo": { + "core": [ + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056", + "text": "If the inheritedQueries feature is not enabled, occlusionQueryEnable must be VK_FALSE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-queryFlags-00057", + "text": "If the inheritedQueries feature is enabled, queryFlags must be a valid combination of VkQueryControlFlagBits values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-queryFlags-02788", + "text": "If the inheritedQueries feature is not enabled, queryFlags must be 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-02789", + "text": "If the pipelineStatisticsQuery feature is enabled, pipelineStatistics must be a valid combination of VkQueryPipelineStatisticFlagBits values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058", + "text": "If the pipelineStatisticsQuery feature is not enabled, pipelineStatistics must be 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAttachmentSampleCountInfoAMD, VkCommandBufferInheritanceConditionalRenderingInfoEXT, VkCommandBufferInheritanceRenderPassTransformInfoQCOM, VkCommandBufferInheritanceRenderingInfo, VkCommandBufferInheritanceViewportScissorInfoNV, VkExternalFormatANDROID, VkMultiviewPerViewAttributesInfoNVX, VkRenderPassTileShadingCreateInfoQCOM, VkRenderingAttachmentLocationInfo, VkRenderingInputAttachmentIndexInfo, or VkTileMemoryBindInfoQCOM", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceInfo-commonparent", + "text": "Both of framebuffer, and renderPass that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferInheritanceConditionalRenderingInfoEXT": { + "core": [ + { + "vuid": "VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-conditionalRenderingEnable-01977", + "text": "If the inheritedConditionalRendering feature is not enabled, conditionalRenderingEnable must be VK_FALSE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferInheritanceRenderPassTransformInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-transform-02864", + "text": "transform must be VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferInheritanceViewportScissorInfoNV": { + "core": [ + { + "vuid": "VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04782", + "text": "If the inheritedViewportScissor2D feature is not enabled, viewportScissor2D must be VK_FALSE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04783", + "text": "If the multiViewport feature is not enabled and viewportScissor2D is VK_TRUE, then viewportDepthCount must be 1", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04784", + "text": "If viewportScissor2D is VK_TRUE, then viewportDepthCount must be greater than 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04785", + "text": "If viewportScissor2D is VK_TRUE, then pViewportDepths must be a valid pointer to an array of viewportDepthCount valid VkViewport structures, except any requirements on x, y, width, and height do not apply", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceViewportScissorInfoNV-viewportScissor2D-04786", + "text": "If viewportScissor2D is VK_TRUE, then the command buffer must be recorded with the VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceViewportScissorInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferInheritanceRenderingInfo": { + "core": [ + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-colorAttachmentCount-06004", + "text": "If colorAttachmentCount is not 0, rasterizationSamples must be a valid VkSampleCountFlagBits value", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-variableMultisampleRate-06005", + "text": "If the variableMultisampleRate feature is not enabled, rasterizationSamples must be a valid VkSampleCountFlagBits value", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06540", + "text": "If depthAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format that includes a depth component", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06007", + "text": "If depthAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format with potential format features that include VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-pColorAttachmentFormats-06492", + "text": "If any element of pColorAttachmentFormats is not VK_FORMAT_UNDEFINED, it must be a format with potential format features that include VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT , or VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV if the linearColorAttachment feature is enabled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-06541", + "text": "If stencilAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format that includes a stencil aspect", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-06199", + "text": "If stencilAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format with potential format features that include VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-06200", + "text": "If depthAttachmentFormat is not VK_FORMAT_UNDEFINED and stencilAttachmentFormat is not VK_FORMAT_UNDEFINED, depthAttachmentFormat must equal stencilAttachmentFormat", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-multiview-06008", + "text": "If the multiview feature is not enabled, viewMask must be 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-viewMask-06009", + "text": "The index of the most significant bit in viewMask must be less than maxMultiviewViewCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-flags-parameter", + "text": "flags must be a valid combination of VkRenderingFlagBits values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-pColorAttachmentFormats-parameter", + "text": "If colorAttachmentCount is not 0, pColorAttachmentFormats must be a valid pointer to an array of colorAttachmentCount valid VkFormat values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-depthAttachmentFormat-parameter", + "text": "depthAttachmentFormat must be a valid VkFormat value", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-stencilAttachmentFormat-parameter", + "text": "stencilAttachmentFormat must be a valid VkFormat value", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferInheritanceRenderingInfo-rasterizationSamples-parameter", + "text": "If rasterizationSamples is not 0, rasterizationSamples must be a valid VkSampleCountFlagBits value", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkAttachmentSampleCountInfoAMD": { + "core": [ + { + "vuid": "VUID-VkAttachmentSampleCountInfoAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkEndCommandBuffer": { + "core": [ + { + "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00059", + "text": "commandBuffer must be in the recording state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00060", + "text": "If commandBuffer is a primary command buffer, there must not be an active render pass instance", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00061", + "text": "All queries made active during the recording of commandBuffer must have been made inactive", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-None-01978", + "text": "Conditional rendering must not be active", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-None-06991", + "text": "There must be no video session object bound", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-commandBuffer-01815", + "text": "If commandBuffer is a secondary command buffer, there must not be an outstanding vkCmdBeginDebugUtilsLabelEXT command recorded to commandBuffer that has not previously been ended by a call to vkCmdEndDebugUtilsLabelEXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-commandBuffer-00062", + "text": "If commandBuffer is a secondary command buffer, there must not be an outstanding vkCmdDebugMarkerBeginEXT command recorded to commandBuffer that has not previously been ended by a call to vkCmdDebugMarkerEndEXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkEndCommandBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkQueueSubmit2": { + "core": [ + { + "vuid": "VUID-vkQueueSubmit2-fence-04894", + "text": "If fence is not VK_NULL_HANDLE, fence must be unsignaled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-fence-04895", + "text": "If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-synchronization2-03866", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03867", + "text": "If a command recorded into the commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits referenced a VkEvent, that event must not be referenced by a command that has been submitted to another queue and is still in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-semaphore-03868", + "text": "The semaphore member of any binary semaphore element of the pSignalSemaphoreInfos member of any element of pSubmits must be unsignaled when the semaphore signal operation it defines is executed on the device", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-stageMask-03869", + "text": "The stageMask member of any element of the pSignalSemaphoreInfos member of any element of pSubmits must only include pipeline stages that are supported by the queue family which queue belongs to", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-stageMask-03870", + "text": "The stageMask member of any element of the pWaitSemaphoreInfos member of any element of pSubmits must only include pipeline stages that are supported by the queue family which queue belongs to", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-semaphore-03871", + "text": "When a semaphore wait operation for a binary semaphore is executed, as defined by the semaphore member of any element of the pWaitSemaphoreInfos member of any element of pSubmits, there must be no other queues waiting on the same semaphore", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-semaphore-03873", + "text": "The semaphore member of any element of the pWaitSemaphoreInfos member of any element of pSubmits that was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY must reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends must have also been submitted for execution", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03874", + "text": "The commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits must be in the pending or executable state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03875", + "text": "If a command recorded into the commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03876", + "text": "Any secondary command buffers recorded into the commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits must be in the pending or executable state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03877", + "text": "If any secondary command buffers recorded into the commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03878", + "text": "The commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits must have been allocated from a VkCommandPool that was created for the same queue family queue belongs to", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03879", + "text": "If a command recorded into the commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits includes a Queue Family Ownership Transfer Acquire Operation, there must exist a previously submitted Queue Family Ownership Transfer Release Operation on a queue in the queue family identified by the acquire operation, with parameters matching the acquire operation as defined in the definition of such acquire operations, and which happens before the acquire operation", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commandBuffer-03880", + "text": "If a command recorded into the commandBuffer member of any element of the pCommandBufferInfos member of any element of pSubmits was a vkCmdBeginQuery whose queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the profiling lock must have been held continuously on the VkDevice that queue was retrieved from, throughout recording of those command buffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-queue-06447", + "text": "If queue was not created with VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, the flags member of any element of pSubmits must not include VK_SUBMIT_PROTECTED_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-pSubmits-parameter", + "text": "If submitCount is not 0, pSubmits must be a valid pointer to an array of submitCount valid VkSubmitInfo2 structures", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-fence-parameter", + "text": "If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit2-commonparent", + "text": "Both of fence, and queue that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkSubmitInfo2": { + "core": [ + { + "vuid": "VUID-VkSubmitInfo2-semaphore-03881", + "text": "If the same semaphore is used as the semaphore member of both an element of pSignalSemaphoreInfos and pWaitSemaphoreInfos, and that semaphore is a timeline semaphore, the value member of the pSignalSemaphoreInfos element must be greater than the value member of the pWaitSemaphoreInfos element", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-semaphore-03882", + "text": "If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value greater than the current value of the semaphore when the semaphore signal operation is executed", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-semaphore-03883", + "text": "If the semaphore member of any element of pSignalSemaphoreInfos is a timeline semaphore, the value member of that element must have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on that semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-semaphore-03884", + "text": "If the semaphore member of any element of pWaitSemaphoreInfos is a timeline semaphore, the value member of that element must have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on that semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-flags-03886", + "text": "If flags includes VK_SUBMIT_PROTECTED_BIT, all elements of pCommandBuffers must be protected command buffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-flags-03887", + "text": "If flags does not include VK_SUBMIT_PROTECTED_BIT, each element of pCommandBuffers must not be a protected command buffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-commandBuffer-06192", + "text": "If any commandBuffer member of an element of pCommandBufferInfos contains any resumed render pass instances, they must be suspended by a render pass instance earlier in submission order within pCommandBufferInfos", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-commandBuffer-06010", + "text": "If any commandBuffer member of an element of pCommandBufferInfos contains any suspended render pass instances, they must be resumed by a render pass instance later in submission order within pCommandBufferInfos", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-commandBuffer-06011", + "text": "If any commandBuffer member of an element of pCommandBufferInfos contains any suspended render pass instances, there must be no action or synchronization commands between that render pass instance and the render pass instance that resumes it", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-commandBuffer-06012", + "text": "If any commandBuffer member of an element of pCommandBufferInfos contains any suspended render pass instances, there must be no render pass instances between that render pass instance and the render pass instance that resumes it", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-variableSampleLocations-06013", + "text": "If the variableSampleLocations limit is not supported, and any commandBuffer member of an element of pCommandBufferInfos contains any suspended render pass instances, where a graphics pipeline has been bound, any pipelines bound in the render pass instance that resumes it, or any subsequent render pass instances that resume from that one and so on, must use the same sample locations", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-pNext-09682", + "text": "If the pNext chain of this structure includes a VkFrameBoundaryTensorsARM structure then it must also include a VkFrameBoundaryEXT structure.", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-pCommandBufferInfos-09933", + "text": "If at least one VkCommandBufferSubmitInfo structure in pCommandBufferInfos references a commandBuffer allocated from a pool that was created with a VkDataGraphProcessingEngineCreateInfoARM structure in the pNext chain of VkCommandPoolCreateInfo that included a foreign data graph processing engine in its pProcessingEngines member, then pWaitSemaphoreInfos and pSignalSemaphoreInfos must only reference semaphore objects that were created from external handle types reported as supported in a VkQueueFamilyDataGraphProcessingEnginePropertiesARM::foreignSemaphoreHandleTypes structure via vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM with a queueFamilyIndex matching the one the command pool was created for, for all the foreign data graph processing engines that were part of the VkDataGraphProcessingEngineCreateInfoARM used to create the command pool", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBMIT_INFO_2", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkFrameBoundaryEXT, VkFrameBoundaryTensorsARM, VkLatencySubmissionPresentIdNV, VkPerformanceQuerySubmitInfoKHR, VkWin32KeyedMutexAcquireReleaseInfoKHR, or VkWin32KeyedMutexAcquireReleaseInfoNV", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-flags-parameter", + "text": "flags must be a valid combination of VkSubmitFlagBits values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-pWaitSemaphoreInfos-parameter", + "text": "If waitSemaphoreInfoCount is not 0, pWaitSemaphoreInfos must be a valid pointer to an array of waitSemaphoreInfoCount valid VkSemaphoreSubmitInfo structures", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-pCommandBufferInfos-parameter", + "text": "If commandBufferInfoCount is not 0, pCommandBufferInfos must be a valid pointer to an array of commandBufferInfoCount valid VkCommandBufferSubmitInfo structures", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo2-pSignalSemaphoreInfos-parameter", + "text": "If signalSemaphoreInfoCount is not 0, pSignalSemaphoreInfos must be a valid pointer to an array of signalSemaphoreInfoCount valid VkSemaphoreSubmitInfo structures", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkSemaphoreSubmitInfo": { + "core": [ + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03929", + "text": "If the geometryShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03930", + "text": "If the tessellationShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03931", + "text": "If the conditionalRendering feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03933", + "text": "If the transformFeedback feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03934", + "text": "If the meshShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-03935", + "text": "If the taskShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, stageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-04957", + "text": "If the subpassShading feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-04995", + "text": "If the invocationMask feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, stageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-10751", + "text": "If the accelerationStructure feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-10753", + "text": "If the micromap feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-device-03888", + "text": "If the device that semaphore was created on is not a device group, deviceIndex must be 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-device-03889", + "text": "If the device that semaphore was created on is a device group, deviceIndex must be a valid device index", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSemaphoreSubmitInfo-stageMask-parameter", + "text": "stageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkCommandBufferSubmitInfo": { + "core": [ + { + "vuid": "VUID-VkCommandBufferSubmitInfo-commandBuffer-03890", + "text": "commandBuffer must not have been allocated with VK_COMMAND_BUFFER_LEVEL_SECONDARY", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-deviceMask-03891", + "text": "If deviceMask is not 0, it must be a valid device mask", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-commandBuffer-09445", + "text": "If any render pass instance in commandBuffer was recorded with a VkRenderPassStripeBeginInfoARM structure in its pNext chain and did not specify the VK_RENDERING_RESUMING_BIT flag, a VkRenderPassStripeSubmitInfoARM must be included in the pNext chain", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-pNext-09446", + "text": "If a VkRenderPassStripeSubmitInfoARM is included in the pNext chain, the value of VkRenderPassStripeSubmitInfoARM::stripeSemaphoreInfoCount must be equal to the sum of the VkRenderPassStripeBeginInfoARM::stripeInfoCount parameters provided to render pass instances recorded in commandBuffer that did not specify the VK_RENDERING_RESUMING_BIT flag", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkRenderPassStripeSubmitInfoARM", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkCommandBufferSubmitInfo-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkRenderPassStripeSubmitInfoARM": { + "core": [ + { + "vuid": "VUID-VkRenderPassStripeSubmitInfoARM-semaphore-09447", + "text": "The semaphore member of each element of pStripeSemaphoreInfos must have been created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkRenderPassStripeSubmitInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkRenderPassStripeSubmitInfoARM-pStripeSemaphoreInfos-parameter", + "text": "pStripeSemaphoreInfos must be a valid pointer to an array of stripeSemaphoreInfoCount valid VkSemaphoreSubmitInfo structures", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkRenderPassStripeSubmitInfoARM-stripeSemaphoreInfoCount-arraylength", + "text": "stripeSemaphoreInfoCount must be greater than 0", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkQueueSubmit": { + "core": [ + { + "vuid": "VUID-vkQueueSubmit-fence-00063", + "text": "If fence is not VK_NULL_HANDLE, fence must be unsignaled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-fence-00064", + "text": "If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00065", + "text": "Any calls to vkCmdSetEvent, vkCmdResetEvent or vkCmdWaitEvents that have been recorded into any of the command buffer elements of the pCommandBuffers member of any element of pSubmits, must not reference any VkEvent that is referenced by any of those commands in a command buffer that has been submitted to another queue and is still in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pWaitDstStageMask-00066", + "text": "Any stage flag included in any element of the pWaitDstStageMask member of any element of pSubmits must be a pipeline stage supported by one of the capabilities of queue, as specified in the table of supported pipeline stages", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pSignalSemaphores-00067", + "text": "Each binary semaphore element of the pSignalSemaphores member of any element of pSubmits must be unsignaled when the semaphore signal operation it defines is executed on the device", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pWaitSemaphores-00068", + "text": "When a semaphore wait operation referring to a binary semaphore defined by any element of the pWaitSemaphores member of any element of pSubmits executes on queue, there must be no other queues waiting on the same semaphore", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pWaitSemaphores-03238", + "text": "All elements of the pWaitSemaphores member of all elements of pSubmits created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY must reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends must have also been submitted for execution", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00070", + "text": "Each element of the pCommandBuffers member of each element of pSubmits must be in the pending or executable state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00071", + "text": "If any element of the pCommandBuffers member of any element of pSubmits was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00072", + "text": "Any secondary command buffers recorded into any element of the pCommandBuffers member of any element of pSubmits must be in the pending or executable state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00073", + "text": "If any secondary command buffers recorded into any element of the pCommandBuffers member of any element of pSubmits was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-00074", + "text": "Each element of the pCommandBuffers member of each element of pSubmits must have been allocated from a VkCommandPool that was created for the same queue family queue belongs to", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pSubmits-02207", + "text": "If any element of pSubmits->pCommandBuffers includes a Queue Family Ownership Transfer Acquire Operation, there must exist a previously submitted Queue Family Ownership Transfer Release Operation on a queue in the queue family identified by the acquire operation, with parameters matching the acquire operation as defined in the definition of such acquire operations, and which happens-before the acquire operation", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pCommandBuffers-03220", + "text": "If a command recorded into any element of pCommandBuffers was a vkCmdBeginQuery whose queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the profiling lock must have been held continuously on the VkDevice that queue was retrieved from, throughout recording of those command buffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pSubmits-02808", + "text": "Any resource created with VK_SHARING_MODE_EXCLUSIVE that is read by an operation specified by pSubmits must not be owned by any queue family other than the one which queue belongs to, at the time it is executed", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pSubmits-04626", + "text": "Any resource created with VK_SHARING_MODE_CONCURRENT that is accessed by an operation specified by pSubmits must have included the queue family of queue at resource creation time", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-queue-06448", + "text": "If queue was not created with VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT, there must be no element of pSubmits that includes a VkProtectedSubmitInfo structure in its pNext chain with protectedSubmit equal to VK_TRUE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-pSubmits-parameter", + "text": "If submitCount is not 0, pSubmits must be a valid pointer to an array of submitCount valid VkSubmitInfo structures", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-fence-parameter", + "text": "If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkQueueSubmit-commonparent", + "text": "Both of fence, and queue that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkSubmitInfo": { + "core": [ + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04090", + "text": "If the geometryShader feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04091", + "text": "If the tessellationShader feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04094", + "text": "If the transformFeedback feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04095", + "text": "If the meshShader feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-04096", + "text": "If the taskShader feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-03937", + "text": "If the synchronization2 feature is not enabled, pWaitDstStageMask must not be 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, pWaitDstStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBuffers-00075", + "text": "Each element of pCommandBuffers must not have been allocated with VK_COMMAND_BUFFER_LEVEL_SECONDARY", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-00078", + "text": "Each element of pWaitDstStageMask must not include VK_PIPELINE_STAGE_HOST_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitSemaphores-03239", + "text": "If any element of pWaitSemaphores or pSignalSemaphores was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE, then the pNext chain must include a VkTimelineSemaphoreSubmitInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pNext-03240", + "text": "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure and any element of pWaitSemaphores was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE, then its waitSemaphoreValueCount member must equal waitSemaphoreCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pNext-03241", + "text": "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure and any element of pSignalSemaphores was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE, then its signalSemaphoreValueCount member must equal signalSemaphoreCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pSignalSemaphores-03242", + "text": "For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value greater than the current value of the semaphore when the semaphore signal operation is executed", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitSemaphores-03243", + "text": "For each element of pWaitSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pWaitSemaphoreValues must have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on that semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pSignalSemaphores-03244", + "text": "For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on that semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pNext-04120", + "text": "If the pNext chain of this structure does not include a VkProtectedSubmitInfo structure with protectedSubmit set to VK_TRUE, then each element of the pCommandBuffers array must be an unprotected command buffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pNext-04148", + "text": "If the pNext chain of this structure includes a VkProtectedSubmitInfo structure with protectedSubmit set to VK_TRUE, then each element of the pCommandBuffers array must be a protected command buffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBuffers-06193", + "text": "If pCommandBuffers contains any resumed render pass instances, they must be suspended by a render pass instance earlier in submission order within pCommandBuffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBuffers-06014", + "text": "If pCommandBuffers contains any suspended render pass instances, they must be resumed by a render pass instance later in submission order within pCommandBuffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBuffers-06015", + "text": "If pCommandBuffers contains any suspended render pass instances, there must be no action or synchronization commands executed in a primary or secondary command buffer between that render pass instance and the render pass instance that resumes it", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBuffers-06016", + "text": "If pCommandBuffers contains any suspended render pass instances, there must be no render pass instances between that render pass instance and the render pass instance that resumes it", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-variableSampleLocations-06017", + "text": "If the variableSampleLocations limit is not supported, and any element of pCommandBuffers contains any suspended render pass instances, where a graphics pipeline has been bound, any pipelines bound in the render pass instance that resumes it, or any subsequent render pass instances that resume from that one and so on, must use the same sample locations", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pNext-09683", + "text": "If the pNext chain of this structure includes a VkFrameBoundaryTensorsARM structure then it must also include a VkFrameBoundaryEXT structure.", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBufferInfos-09942", + "text": "If at least one VkCommandBufferSubmitInfo structure in pCommandBufferInfos references a commandBuffer allocated from a pool that was created with a VkDataGraphProcessingEngineCreateInfoARM structure in the pNext chain of VkCommandPoolCreateInfo that included a foreign data graph processing engine in its pProcessingEngines member, then pWaitSemaphoreInfos and pSignalSemaphoreInfos must only reference semaphore objects that were created from external handle types reported as supported in a VkQueueFamilyDataGraphProcessingEnginePropertiesARM::foreignSemaphoreHandleTypes structure via vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM with a queueFamilyIndex matching the one the command pool was created for, for all the foreign data graph processing engines that were part of the VkDataGraphProcessingEngineCreateInfoARM used to create the command pool", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBMIT_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAmigoProfilingSubmitInfoSEC, VkD3D12FenceSubmitInfoKHR, VkDeviceGroupSubmitInfo, VkFrameBoundaryEXT, VkFrameBoundaryTensorsARM, VkLatencySubmissionPresentIdNV, VkPerformanceQuerySubmitInfoKHR, VkProtectedSubmitInfo, VkTimelineSemaphoreSubmitInfo, VkWin32KeyedMutexAcquireReleaseInfoKHR, or VkWin32KeyedMutexAcquireReleaseInfoNV", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitSemaphores-parameter", + "text": "If waitSemaphoreCount is not 0, pWaitSemaphores must be a valid pointer to an array of waitSemaphoreCount valid VkSemaphore handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pWaitDstStageMask-parameter", + "text": "If waitSemaphoreCount is not 0, pWaitDstStageMask must be a valid pointer to an array of waitSemaphoreCount valid combinations of VkPipelineStageFlagBits values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pCommandBuffers-parameter", + "text": "If commandBufferCount is not 0, pCommandBuffers must be a valid pointer to an array of commandBufferCount valid VkCommandBuffer handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-pSignalSemaphores-parameter", + "text": "If signalSemaphoreCount is not 0, pSignalSemaphores must be a valid pointer to an array of signalSemaphoreCount valid VkSemaphore handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkSubmitInfo-commonparent", + "text": "Each of the elements of pCommandBuffers, the elements of pSignalSemaphores, and the elements of pWaitSemaphores that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkTimelineSemaphoreSubmitInfo": { + "core": [ + { + "vuid": "VUID-VkTimelineSemaphoreSubmitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkTimelineSemaphoreSubmitInfo-pWaitSemaphoreValues-parameter", + "text": "If waitSemaphoreValueCount is not 0, and pWaitSemaphoreValues is not NULL, pWaitSemaphoreValues must be a valid pointer to an array of waitSemaphoreValueCount uint64_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkTimelineSemaphoreSubmitInfo-pSignalSemaphoreValues-parameter", + "text": "If signalSemaphoreValueCount is not 0, and pSignalSemaphoreValues is not NULL, pSignalSemaphoreValues must be a valid pointer to an array of signalSemaphoreValueCount uint64_t values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkD3D12FenceSubmitInfoKHR": { + "core": [ + { + "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-waitSemaphoreValuesCount-00079", + "text": "waitSemaphoreValuesCount must be the same value as VkSubmitInfo::waitSemaphoreCount, where this structure is in the pNext chain of a VkSubmitInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080", + "text": "signalSemaphoreValuesCount must be the same value as VkSubmitInfo::signalSemaphoreCount, where this structure is in the pNext chain of a VkSubmitInfo structure", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-pWaitSemaphoreValues-parameter", + "text": "If waitSemaphoreValuesCount is not 0, and pWaitSemaphoreValues is not NULL, pWaitSemaphoreValues must be a valid pointer to an array of waitSemaphoreValuesCount uint64_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkD3D12FenceSubmitInfoKHR-pSignalSemaphoreValues-parameter", + "text": "If signalSemaphoreValuesCount is not 0, and pSignalSemaphoreValues is not NULL, pSignalSemaphoreValues must be a valid pointer to an array of signalSemaphoreValuesCount uint64_t values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkWin32KeyedMutexAcquireReleaseInfoKHR": { + "core": [ + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-00081", + "text": "Each member of pAcquireSyncs and pReleaseSyncs must be a device memory object imported by setting VkImportMemoryWin32HandleInfoKHR::handleType to VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-parameter", + "text": "If acquireCount is not 0, pAcquireSyncs must be a valid pointer to an array of acquireCount valid VkDeviceMemory handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireKeys-parameter", + "text": "If acquireCount is not 0, pAcquireKeys must be a valid pointer to an array of acquireCount uint64_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireTimeouts-parameter", + "text": "If acquireCount is not 0, pAcquireTimeouts must be a valid pointer to an array of acquireCount uint32_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseSyncs-parameter", + "text": "If releaseCount is not 0, pReleaseSyncs must be a valid pointer to an array of releaseCount valid VkDeviceMemory handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseKeys-parameter", + "text": "If releaseCount is not 0, pReleaseKeys must be a valid pointer to an array of releaseCount uint64_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-commonparent", + "text": "Both of the elements of pAcquireSyncs, and the elements of pReleaseSyncs that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkWin32KeyedMutexAcquireReleaseInfoNV": { + "core": [ + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireSyncs-parameter", + "text": "If acquireCount is not 0, pAcquireSyncs must be a valid pointer to an array of acquireCount valid VkDeviceMemory handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireKeys-parameter", + "text": "If acquireCount is not 0, pAcquireKeys must be a valid pointer to an array of acquireCount uint64_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireTimeoutMilliseconds-parameter", + "text": "If acquireCount is not 0, pAcquireTimeoutMilliseconds must be a valid pointer to an array of acquireCount uint32_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseSyncs-parameter", + "text": "If releaseCount is not 0, pReleaseSyncs must be a valid pointer to an array of releaseCount valid VkDeviceMemory handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseKeys-parameter", + "text": "If releaseCount is not 0, pReleaseKeys must be a valid pointer to an array of releaseCount uint64_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-commonparent", + "text": "Both of the elements of pAcquireSyncs, and the elements of pReleaseSyncs that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkProtectedSubmitInfo": { + "core": [ + { + "vuid": "VUID-VkProtectedSubmitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkDeviceGroupSubmitInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-waitSemaphoreCount-00082", + "text": "waitSemaphoreCount must equal VkSubmitInfo::waitSemaphoreCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-commandBufferCount-00083", + "text": "commandBufferCount must equal VkSubmitInfo::commandBufferCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-signalSemaphoreCount-00084", + "text": "signalSemaphoreCount must equal VkSubmitInfo::signalSemaphoreCount", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-00085", + "text": "All elements of pWaitSemaphoreDeviceIndices and pSignalSemaphoreDeviceIndices must be valid device indices", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-00086", + "text": "All elements of pCommandBufferDeviceMasks must be valid device masks", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-parameter", + "text": "If waitSemaphoreCount is not 0, pWaitSemaphoreDeviceIndices must be a valid pointer to an array of waitSemaphoreCount uint32_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-parameter", + "text": "If commandBufferCount is not 0, pCommandBufferDeviceMasks must be a valid pointer to an array of commandBufferCount uint32_t values", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupSubmitInfo-pSignalSemaphoreDeviceIndices-parameter", + "text": "If signalSemaphoreCount is not 0, pSignalSemaphoreDeviceIndices must be a valid pointer to an array of signalSemaphoreCount uint32_t values", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkPerformanceQuerySubmitInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPerformanceQuerySubmitInfoKHR-counterPassIndex-03221", + "text": "counterPassIndex must be less than the number of counter passes required by any queries within the batch. The required number of counter passes for a performance query is obtained by calling vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkPerformanceQuerySubmitInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkCmdExecuteCommands": { + "core": [ + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00088", + "text": "Each element of pCommandBuffers must have been allocated with a level of VK_COMMAND_BUFFER_LEVEL_SECONDARY", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00089", + "text": "Each element of pCommandBuffers must be in the pending or executable state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00091", + "text": "If any element of pCommandBuffers was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must not be in the pending state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00092", + "text": "If any element of pCommandBuffers was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must not have already been recorded to commandBuffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00093", + "text": "If any element of pCommandBuffers was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must not appear more than once in pCommandBuffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00094", + "text": "Each element of pCommandBuffers must have been allocated from a VkCommandPool that was created for the same queue family as the VkCommandPool from which commandBuffer was allocated", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00096", + "text": "If vkCmdExecuteCommands is being called within a render pass instance, each element of pCommandBuffers must have been recorded with the VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00099", + "text": "If vkCmdExecuteCommands is being called within a render pass instance, and any element of pCommandBuffers was recorded with VkCommandBufferInheritanceInfo::framebuffer not equal to VK_NULL_HANDLE, that VkFramebuffer must match the VkFramebuffer used in the current render pass instance", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-contents-09680", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRenderPass, and vkCmdNextSubpass has not been called in the current render pass instance, the contents parameter of vkCmdBeginRenderPass must have been VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS , or VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-None-09681", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRenderPass, and vkCmdNextSubpass has been called in the current render pass instance, the contents parameter of the last call to vkCmdNextSubpass must have been VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS , or VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-06019", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRenderPass, each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceInfo::subpass set to the index of the subpass which the given command buffer will be executed in", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pBeginInfo-06020", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRenderPass, the render passes specified in the pBeginInfo->pInheritanceInfo->renderPass members of the vkBeginCommandBuffer commands used to begin recording each element of pCommandBuffers must be compatible with the current render pass", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-02865", + "text": "If vkCmdExecuteCommands is being called within a render pass instance that included VkRenderPassTransformBeginInfoQCOM in the pNext chain of VkRenderPassBeginInfo, then each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceRenderPassTransformInfoQCOM in the pNext chain of VkCommandBufferBeginInfo", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-02866", + "text": "If vkCmdExecuteCommands is being called within a render pass instance that included VkRenderPassTransformBeginInfoQCOM in the pNext chain of VkRenderPassBeginInfo, then each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceRenderPassTransformInfoQCOM::transform identical to VkRenderPassTransformBeginInfoQCOM::transform", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-02867", + "text": "If vkCmdExecuteCommands is being called within a render pass instance that included VkRenderPassTransformBeginInfoQCOM in the pNext chain of VkRenderPassBeginInfo, then each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceRenderPassTransformInfoQCOM::renderArea identical to VkRenderPassBeginInfo::renderArea", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00100", + "text": "If vkCmdExecuteCommands is not being called within a render pass instance, each element of pCommandBuffers must not have been recorded with the VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00101", + "text": "If the inheritedQueries feature is not enabled, commandBuffer must not have any queries active", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00102", + "text": "If commandBuffer has a VK_QUERY_TYPE_OCCLUSION query active, then each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceInfo::occlusionQueryEnable set to VK_TRUE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00103", + "text": "If commandBuffer has a VK_QUERY_TYPE_OCCLUSION query active, then each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceInfo::queryFlags having all bits set that are set for the query", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-00104", + "text": "If commandBuffer has a VK_QUERY_TYPE_PIPELINE_STATISTICS query active, then each element of pCommandBuffers must have been recorded with VkCommandBufferInheritanceInfo::pipelineStatistics having all bits set that are set in the VkQueryPool the query uses", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-00105", + "text": "Each element of pCommandBuffers must not begin any query types that are active in commandBuffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-07594", + "text": "commandBuffer must not have any queries other than VK_QUERY_TYPE_OCCLUSION and VK_QUERY_TYPE_PIPELINE_STATISTICS active", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-01820", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, each element of pCommandBuffers must be a protected command buffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-01821", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, each element of pCommandBuffers must be an unprotected command buffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-None-02286", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-06533", + "text": "If vkCmdExecuteCommands is being called within a render pass instance and any recorded command in commandBuffer in the current subpass will write to an image subresource as an attachment, commands recorded in elements of pCommandBuffers must not read from the memory backing that image subresource in any other way", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-06534", + "text": "If vkCmdExecuteCommands is being called within a render pass instance and any recorded command in commandBuffer in the current subpass will read from an image subresource used as an attachment in any way other than as an attachment, commands recorded in elements of pCommandBuffers must not write to that image subresource as an attachment", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-06535", + "text": "If vkCmdExecuteCommands is being called within a render pass instance and any recorded command in a given element of pCommandBuffers will write to an image subresource as an attachment, commands recorded in elements of pCommandBuffers at a higher index must not read from the memory backing that image subresource in any other way", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-06536", + "text": "If vkCmdExecuteCommands is being called within a render pass instance and any recorded command in a given element of pCommandBuffers will read from an image subresource used as an attachment in any way other than as an attachment, commands recorded in elements of pCommandBuffers at a higher index must not write to that image subresource as an attachment", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-06021", + "text": "If pCommandBuffers contains any suspended render pass instances, there must be no action or synchronization commands between that render pass instance and any render pass instance that resumes it", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-06022", + "text": "If pCommandBuffers contains any suspended render pass instances, there must be no render pass instances between that render pass instance and any render pass instance that resumes it", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-variableSampleLocations-06023", + "text": "If the variableSampleLocations limit is not supported, and any element of pCommandBuffers contains any suspended render pass instances, where a graphics pipeline has been bound, any pipelines bound in the render pass instance that resumes it, or any subsequent render pass instances that resume from that one and so on, must use the same sample locations", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-flags-06024", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must have included VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pBeginInfo-06025", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, the render passes specified in the pBeginInfo->pInheritanceInfo->renderPass members of the vkBeginCommandBuffer commands used to begin recording each element of pCommandBuffers must be VK_NULL_HANDLE", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-flags-06026", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, the flags member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the VkRenderingInfo::flags parameter to vkCmdBeginRendering, excluding VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-colorAttachmentCount-06027", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, the colorAttachmentCount member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the VkRenderingInfo::colorAttachmentCount parameter to vkCmdBeginRendering", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-imageView-06028", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, if the imageView member of an element of the VkRenderingInfo::pColorAttachments parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the corresponding element of the pColorAttachmentFormats member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the format used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-imageView-07606", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, if the imageView member of an element of the VkRenderingInfo::pColorAttachments parameter to vkCmdBeginRendering is VK_NULL_HANDLE, the corresponding element of the pColorAttachmentFormats member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be VK_FORMAT_UNDEFINED", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pDepthAttachment-06029", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, if the VkRenderingInfo::pDepthAttachment->imageView parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of the depthAttachmentFormat member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the format used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pStencilAttachment-06030", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, if the VkRenderingInfo::pStencilAttachment->imageView parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of the stencilAttachmentFormat member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the format used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pDepthAttachment-06774", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the VkRenderingInfo::pDepthAttachment->imageView parameter to vkCmdBeginRendering was VK_NULL_HANDLE, the value of the depthAttachmentFormat member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be VK_FORMAT_UNDEFINED", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pStencilAttachment-06775", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the VkRenderingInfo::pStencilAttachment->imageView parameter to vkCmdBeginRendering was VK_NULL_HANDLE, the value of the stencilAttachmentFormat member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be VK_FORMAT_UNDEFINED", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-viewMask-06031", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, the viewMask member of the VkCommandBufferInheritanceRenderingInfo structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the VkRenderingInfo::viewMask parameter to vkCmdBeginRendering", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-06032", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the pNext chain of VkCommandBufferInheritanceInfo includes a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, if the imageView member of an element of the VkRenderingInfo::pColorAttachments parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the corresponding element of the pColorAttachmentSamples member of the VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the sample count used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-06033", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the pNext chain of VkCommandBufferInheritanceInfo includes a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, if the VkRenderingInfo::pDepthAttachment->imageView parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of the VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the sample count used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-06034", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the pNext chain of VkCommandBufferInheritanceInfo includes a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, if the VkRenderingInfo::pStencilAttachment->imageView parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of the VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the sample count used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-06035", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the pNext chain of VkCommandBufferInheritanceInfo does not include a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, if the imageView member of an element of the VkRenderingInfo::pColorAttachments parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of VkCommandBufferInheritanceRenderingInfo::rasterizationSamples must be equal to the sample count used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-06036", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the pNext chain of VkCommandBufferInheritanceInfo does not include a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, if the VkRenderingInfo::pDepthAttachment->imageView parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of VkCommandBufferInheritanceRenderingInfo::rasterizationSamples must be equal to the sample count used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-06037", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering and the pNext chain of VkCommandBufferInheritanceInfo does not include a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, if the VkRenderingInfo::pStencilAttachment->imageView parameter to vkCmdBeginRendering is not VK_NULL_HANDLE, the value of VkCommandBufferInheritanceRenderingInfo::rasterizationSamples must be equal to the sample count used to create that image view", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-09299", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, with any color attachment using a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, the pNext chain of VkCommandBufferInheritanceInfo used to create each element of pCommandBuffers must include a VkExternalFormatANDROID structure with an externalFormat matching that used to create the resolve attachment in the render pass", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pNext-09300", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering with any color attachment using a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and the pNext chain of VkCommandBufferInheritanceInfo does not include a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, the value of VkCommandBufferInheritanceRenderingInfo::rasterizationSamples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-09375", + "text": "commandBuffer must not be a secondary command buffer unless the nestedCommandBuffer feature is enabled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-nestedCommandBuffer-09376", + "text": "If the nestedCommandBuffer feature is enabled, and commandBuffer is a secondary command buffer, the command buffer nesting level of each element of pCommandBuffers must be less than maxCommandBufferNestingLevel", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-nestedCommandBufferRendering-09377", + "text": "If the nestedCommandBufferRendering feature is not enabled, and commandBuffer is a secondary command buffer, commandBuffer must not have been recorded with VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-nestedCommandBufferSimultaneousUse-09378", + "text": "If the nestedCommandBufferSimultaneousUse feature is not enabled, and commandBuffer is a secondary command buffer, each element of pCommandBuffers must not have been recorded with VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-09504", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, the color attachment mapping state specified by VkRenderingAttachmentLocationInfo in the inheritance info of each element of pCommandBuffers and in the current state of commandBuffer must match", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-09505", + "text": "If vkCmdExecuteCommands is being called within a render pass instance begun with vkCmdBeginRendering, the input attachment mapping state specified by VkRenderingInputAttachmentIndexInfo in the inheritance info of each element of pCommandBuffers and in the current state of commandBuffer must match", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-memory-10724", + "text": "If vkCmdExecuteCommands is being called within a render pass instance, the size of memory member of the VkTileMemoryBindInfoQCOM structure included in the pNext chain of VkCommandBufferBeginInfo::pInheritanceInfo used to begin recording each element of pCommandBuffers must be equal to the active bound bound tile memory object in commandBuffer", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-10620", + "text": "If this command is being recorded within a render pass instance with tile shading enabled, all elements of pCommandBuffers must have been recorded with VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-10621", + "text": "If the per-tile execution model is enabled, all elements of pCommandBuffers must have been recorded with VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-tileApronSize-10622", + "text": "If this command is being recorded within a render pass instance, the tileApronSize used to create the render pass instance must equal the VkRenderPassTileShadingCreateInfoQCOM::tileApronSize used to record all elements of pCommandBuffers", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-10623", + "text": "If any element of pCommandBuffers was recorded with VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM included in VkRenderPassTileShadingCreateInfoQCOM::flags, this command must be recorded in a render pass that has tile shading enabled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-10624", + "text": "If any element of pCommandBuffers was recorded with VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM included in VkRenderPassTileShadingCreateInfoQCOM::flags, per-tile execution model must be enabled", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-tileApronSize-10625", + "text": "If this command is not being recorded into a render pass instance, the VkRenderPassTileShadingCreateInfoQCOM::tileApronSize that was recorded into all elements of pCommandBuffers must equal (0,0)", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-pCommandBuffers-parameter", + "text": "pCommandBuffers must be a valid pointer to an array of commandBufferCount valid VkCommandBuffer handles", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commandBufferCount-arraylength", + "text": "commandBufferCount must be greater than 0", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdExecuteCommands-commonparent", + "text": "Both of commandBuffer, and the elements of pCommandBuffers must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkDeviceGroupCommandBufferBeginInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00106", + "text": "deviceMask must be a valid device mask value", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00107", + "text": "deviceMask must not be zero", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-VkDeviceGroupCommandBufferBeginInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "vkCmdSetDeviceMask": { + "core": [ + { + "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00108", + "text": "deviceMask must be a valid device mask value", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00109", + "text": "deviceMask must not be zero", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00110", + "text": "deviceMask must not include any set bits that were not in the VkDeviceGroupCommandBufferBeginInfo::deviceMask value when the command buffer began recording", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdSetDeviceMask-deviceMask-00111", + "text": "If vkCmdSetDeviceMask is called inside a render pass instance, deviceMask must not include any set bits that were not in the VkDeviceGroupRenderPassBeginInfo::deviceMask value when the render pass instance began recording", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/cmdbuffers.html" + }, + { + "vuid": "VUID-vkCmdSetDeviceMask-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or transfer operations", + "page": "chapters/cmdbuffers.html" + } + ] + }, + "VkMemoryBarrierAccessFlags3KHR": { + "core": [ + { + "vuid": "VUID-VkMemoryBarrierAccessFlags3KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrierAccessFlags3KHR-srcAccessMask3-parameter", + "text": "srcAccessMask3 must be a valid combination of VkAccessFlagBits3KHR values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrierAccessFlags3KHR-dstAccessMask3-parameter", + "text": "dstAccessMask3 must be a valid combination of VkAccessFlagBits3KHR values", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCreateFence": { + "core": [ + { + "vuid": "VUID-vkCreateFence-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateFence-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkFenceCreateInfo structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateFence-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateFence-pFence-parameter", + "text": "pFence must be a valid pointer to a VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateFence-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/synchronization.html" + } + ] + }, + "VkFenceCreateInfo": { + "core": [ + { + "vuid": "VUID-VkFenceCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExportFenceCreateInfo or VkExportFenceWin32HandleInfoKHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkFenceCreateFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "VkExportFenceCreateInfo": { + "core": [ + { + "vuid": "VUID-VkExportFenceCreateInfo-handleTypes-01446", + "text": "The bits in handleTypes must be supported and compatible, as reported by VkExternalFenceProperties", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportFenceCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportFenceCreateInfo-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalFenceHandleTypeFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "VkExportFenceWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkExportFenceWin32HandleInfoKHR-handleTypes-01447", + "text": "If VkExportFenceCreateInfo::handleTypes does not include VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, a VkExportFenceWin32HandleInfoKHR structure must not be included in the pNext chain of VkFenceCreateInfo", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportFenceWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportFenceWin32HandleInfoKHR-pAttributes-parameter", + "text": "If pAttributes is not NULL, pAttributes must be a valid pointer to a valid SECURITY_ATTRIBUTES value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetFenceWin32HandleKHR": { + "core": [ + { + "vuid": "VUID-vkGetFenceWin32HandleKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetFenceWin32HandleKHR-pGetWin32HandleInfo-parameter", + "text": "pGetWin32HandleInfo must be a valid pointer to a valid VkFenceGetWin32HandleInfoKHR structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetFenceWin32HandleKHR-pHandle-parameter", + "text": "pHandle must be a valid pointer to a HANDLE value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkFenceGetWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01448", + "text": "handleType must have been included in VkExportFenceCreateInfo::handleTypes when the fence’s current payload was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01449", + "text": "If handleType is defined as an NT handle, vkGetFenceWin32HandleKHR must be called no more than once for each valid unique combination of fence and handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-fence-01450", + "text": "fence must not currently have its payload replaced by an imported payload as described below in Importing Fence Payloads unless that imported payload’s handle type was included in VkExternalFenceProperties::exportFromImportedHandleTypes for handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01451", + "text": "If handleType refers to a handle type with copy payload transference semantics, fence must be signaled, or have an associated fence signal operation pending execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-01452", + "text": "handleType must be defined as an NT handle or a global share handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-fence-parameter", + "text": "fence must be a valid VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetWin32HandleInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalFenceHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetFenceFdKHR": { + "core": [ + { + "vuid": "VUID-vkGetFenceFdKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetFenceFdKHR-pGetFdInfo-parameter", + "text": "pGetFdInfo must be a valid pointer to a valid VkFenceGetFdInfoKHR structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetFenceFdKHR-pFd-parameter", + "text": "pFd must be a valid pointer to an int value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkFenceGetFdInfoKHR": { + "core": [ + { + "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01453", + "text": "handleType must have been included in VkExportFenceCreateInfo::handleTypes when fence’s current payload was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01454", + "text": "If handleType refers to a handle type with copy payload transference semantics, fence must be signaled, or have an associated fence signal operation pending execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-fence-01455", + "text": "fence must not currently have its payload replaced by an imported payload as described below in Importing Fence Payloads unless that imported payload’s handle type was included in VkExternalFenceProperties::exportFromImportedHandleTypes for handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-01456", + "text": "handleType must be defined as a POSIX file descriptor handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-fence-parameter", + "text": "fence must be a valid VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkFenceGetFdInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalFenceHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkDestroyFence": { + "core": [ + { + "vuid": "VUID-vkDestroyFence-fence-01120", + "text": "All queue submission commands that refer to fence must have completed execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyFence-fence-01121", + "text": "If VkAllocationCallbacks were provided when fence was created, a compatible set of callbacks must be provided here", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyFence-fence-01122", + "text": "If no VkAllocationCallbacks were provided when fence was created, pAllocator must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyFence-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyFence-fence-parameter", + "text": "If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyFence-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyFence-fence-parent", + "text": "If fence is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetFenceStatus": { + "core": [ + { + "vuid": "VUID-vkGetFenceStatus-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetFenceStatus-fence-parameter", + "text": "fence must be a valid VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetFenceStatus-fence-parent", + "text": "fence must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkResetFences": { + "core": [ + { + "vuid": "VUID-vkResetFences-pFences-01123", + "text": "Each element of pFences must not be currently associated with any queue command that has not yet completed execution on that queue", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetFences-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetFences-pFences-parameter", + "text": "pFences must be a valid pointer to an array of fenceCount valid VkFence handles", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetFences-fenceCount-arraylength", + "text": "fenceCount must be greater than 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetFences-pFences-parent", + "text": "Each element of pFences must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkWaitForFences": { + "core": [ + { + "vuid": "VUID-vkWaitForFences-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkWaitForFences-pFences-parameter", + "text": "pFences must be a valid pointer to an array of fenceCount valid VkFence handles", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkWaitForFences-fenceCount-arraylength", + "text": "fenceCount must be greater than 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkWaitForFences-pFences-parent", + "text": "Each element of pFences must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkRegisterDeviceEventEXT": { + "core": [ + { + "vuid": "VUID-vkRegisterDeviceEventEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDeviceEventEXT-pDeviceEventInfo-parameter", + "text": "pDeviceEventInfo must be a valid pointer to a valid VkDeviceEventInfoEXT structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDeviceEventEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDeviceEventEXT-pFence-parameter", + "text": "pFence must be a valid pointer to a VkFence handle", + "page": "chapters/synchronization.html" + } + ] + }, + "VkDeviceEventInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceEventInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDeviceEventInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDeviceEventInfoEXT-deviceEvent-parameter", + "text": "deviceEvent must be a valid VkDeviceEventTypeEXT value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkRegisterDisplayEventEXT": { + "core": [ + { + "vuid": "VUID-vkRegisterDisplayEventEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDisplayEventEXT-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDisplayEventEXT-pDisplayEventInfo-parameter", + "text": "pDisplayEventInfo must be a valid pointer to a valid VkDisplayEventInfoEXT structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDisplayEventEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDisplayEventEXT-pFence-parameter", + "text": "pFence must be a valid pointer to a VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkRegisterDisplayEventEXT-commonparent", + "text": "Both of device, and display must have been created, allocated, or retrieved from the same VkPhysicalDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "VkDisplayEventInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDisplayEventInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDisplayEventInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDisplayEventInfoEXT-displayEvent-parameter", + "text": "displayEvent must be a valid VkDisplayEventTypeEXT value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkImportFenceWin32HandleKHR": { + "core": [ + { + "vuid": "VUID-vkImportFenceWin32HandleKHR-fence-04448", + "text": "fence must not be associated with any queue command that has not yet completed execution on that queue", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportFenceWin32HandleKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportFenceWin32HandleKHR-pImportFenceWin32HandleInfo-parameter", + "text": "pImportFenceWin32HandleInfo must be a valid pointer to a valid VkImportFenceWin32HandleInfoKHR structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImportFenceWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01457", + "text": "handleType must be a value included in the Handle Types Supported by VkImportFenceWin32HandleInfoKHR table", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01459", + "text": "If handleType is not VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, name must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460", + "text": "If handle is NULL, name must name a valid synchronization primitive of the type specified by handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461", + "text": "If name is NULL, handle must be a valid handle of the type specified by handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handle-01462", + "text": "If handle is not NULL, name must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-handle-01539", + "text": "If handle is not NULL, it must obey any requirements listed for handleType in external fence handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-name-01540", + "text": "If name is not NULL, it must obey any requirements listed for handleType in external fence handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-fence-parameter", + "text": "fence must be a valid VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceWin32HandleInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkFenceImportFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "vkImportFenceFdKHR": { + "core": [ + { + "vuid": "VUID-vkImportFenceFdKHR-fence-01463", + "text": "fence must not be associated with any queue command that has not yet completed execution on that queue", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportFenceFdKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportFenceFdKHR-pImportFenceFdInfo-parameter", + "text": "pImportFenceFdInfo must be a valid pointer to a valid VkImportFenceFdInfoKHR structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImportFenceFdInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImportFenceFdInfoKHR-handleType-01464", + "text": "handleType must be a value included in the Handle Types Supported by VkImportFenceFdInfoKHR table", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-fd-01541", + "text": "fd must obey any requirements listed for handleType in external fence handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-handleType-07306", + "text": "If handleType refers to a handle type with copy payload transference semantics, flags must contain VK_FENCE_IMPORT_TEMPORARY_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-fence-parameter", + "text": "fence must be a valid VkFence handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkFenceImportFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportFenceFdInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalFenceHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCreateSemaphore": { + "core": [ + { + "vuid": "VUID-vkCreateSemaphore-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateSemaphore-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkSemaphoreCreateInfo structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateSemaphore-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateSemaphore-pSemaphore-parameter", + "text": "pSemaphore must be a valid pointer to a VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateSemaphore-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreCreateInfo": { + "core": [ + { + "vuid": "VUID-VkSemaphoreCreateInfo-pNext-06789", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExportMetalObjectCreateInfoEXT, VkExportSemaphoreCreateInfo, VkExportSemaphoreWin32HandleInfoKHR, VkImportMetalSharedEventInfoEXT, VkQueryLowLatencySupportNV, or VkSemaphoreTypeCreateInfo", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalObjectCreateInfoEXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreTypeCreateInfo": { + "core": [ + { + "vuid": "VUID-VkSemaphoreTypeCreateInfo-timelineSemaphore-03252", + "text": "If the timelineSemaphore feature is not enabled, semaphoreType must not equal VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreTypeCreateInfo-semaphoreType-03279", + "text": "If semaphoreType is VK_SEMAPHORE_TYPE_BINARY, initialValue must be zero", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreTypeCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreTypeCreateInfo-semaphoreType-parameter", + "text": "semaphoreType must be a valid VkSemaphoreType value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkExportSemaphoreCreateInfo": { + "core": [ + { + "vuid": "VUID-VkExportSemaphoreCreateInfo-handleTypes-01124", + "text": "The bits in handleTypes must be supported and compatible, as reported by VkExternalSemaphoreProperties", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportSemaphoreCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportSemaphoreCreateInfo-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalSemaphoreHandleTypeFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "VkExportSemaphoreWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-handleTypes-01125", + "text": "If VkExportSemaphoreCreateInfo::handleTypes does not include VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, VkExportSemaphoreWin32HandleInfoKHR must not be included in the pNext chain of VkSemaphoreCreateInfo", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExportSemaphoreWin32HandleInfoKHR-pAttributes-parameter", + "text": "If pAttributes is not NULL, pAttributes must be a valid pointer to a valid SECURITY_ATTRIBUTES value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetSemaphoreWin32HandleKHR": { + "core": [ + { + "vuid": "VUID-vkGetSemaphoreWin32HandleKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pGetWin32HandleInfo-parameter", + "text": "pGetWin32HandleInfo must be a valid pointer to a valid VkSemaphoreGetWin32HandleInfoKHR structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreWin32HandleKHR-pHandle-parameter", + "text": "pHandle must be a valid pointer to a HANDLE value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreGetWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01126", + "text": "handleType must have been included in VkExportSemaphoreCreateInfo::handleTypes when the semaphore’s current payload was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01127", + "text": "If handleType is defined as an NT handle, vkGetSemaphoreWin32HandleKHR must be called no more than once for each valid unique combination of semaphore and handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-01128", + "text": "semaphore must not currently have its payload replaced by an imported payload as described below in Importing Semaphore Payloads unless that imported payload’s handle type was included in VkExternalSemaphoreProperties::exportFromImportedHandleTypes for handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01129", + "text": "If handleType refers to a handle type with copy payload transference semantics, as defined below in Importing Semaphore Payloads, there must be no queue waiting on semaphore", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01130", + "text": "If handleType refers to a handle type with copy payload transference semantics, semaphore must be signaled, or have an associated semaphore signal operation pending execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01131", + "text": "handleType must be defined as an NT handle or a global share handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalSemaphoreHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkQueryLowLatencySupportNV": { + "core": [ + { + "vuid": "VUID-VkQueryLowLatencySupportNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkQueryLowLatencySupportNV-pQueriedLowLatencyData-parameter", + "text": "pQueriedLowLatencyData must be a pointer value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetSemaphoreFdKHR": { + "core": [ + { + "vuid": "VUID-vkGetSemaphoreFdKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreFdKHR-pGetFdInfo-parameter", + "text": "pGetFdInfo must be a valid pointer to a valid VkSemaphoreGetFdInfoKHR structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreFdKHR-pFd-parameter", + "text": "pFd must be a valid pointer to an int value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreGetFdInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01132", + "text": "handleType must have been included in VkExportSemaphoreCreateInfo::handleTypes when semaphore’s current payload was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-semaphore-01133", + "text": "semaphore must not currently have its payload replaced by an imported payload as described below in Importing Semaphore Payloads unless that imported payload’s handle type was included in VkExternalSemaphoreProperties::exportFromImportedHandleTypes for handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01134", + "text": "If handleType refers to a handle type with copy payload transference semantics, as defined below in Importing Semaphore Payloads, there must be no queue waiting on semaphore", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01135", + "text": "If handleType refers to a handle type with copy payload transference semantics, semaphore must be signaled, or have an associated semaphore signal operation pending execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-01136", + "text": "handleType must be defined as a POSIX file descriptor handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-03253", + "text": "If handleType refers to a handle type with copy payload transference semantics, semaphore must have been created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-03254", + "text": "If handleType refers to a handle type with copy payload transference semantics, semaphore must have an associated semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends must have also been submitted for execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetFdInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalSemaphoreHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetSemaphoreZirconHandleFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkGetSemaphoreZirconHandleFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreZirconHandleFUCHSIA-pGetZirconHandleInfo-parameter", + "text": "pGetZirconHandleInfo must be a valid pointer to a valid VkSemaphoreGetZirconHandleInfoFUCHSIA structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreZirconHandleFUCHSIA-pZirconHandle-parameter", + "text": "pZirconHandle must be a valid pointer to a zx_handle_t value", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreGetZirconHandleInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04758", + "text": "handleType must have been included in VkExportSemaphoreCreateInfo::handleTypes when semaphore’s current payload was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-04759", + "text": "semaphore must not currently have its payload replaced by an imported payload as described below in Importing Semaphore Payloads unless that imported payload’s handle type was included in VkExternalSemaphoreProperties::exportFromImportedHandleTypes for handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04760", + "text": "If handleType refers to a handle type with copy payload transference semantics, as defined below in Importing Semaphore Payloads, there must be no queue waiting on semaphore", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04761", + "text": "If handleType refers to a handle type with copy payload transference semantics, semaphore must be signaled, or have an associated semaphore signal operation pending execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-04762", + "text": "handleType must be defined as a Zircon event handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-04763", + "text": "semaphore must have been created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreGetZirconHandleInfoFUCHSIA-handleType-parameter", + "text": "handleType must be a valid VkExternalSemaphoreHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkDestroySemaphore": { + "core": [ + { + "vuid": "VUID-vkDestroySemaphore-semaphore-05149", + "text": "All submitted batches that refer to semaphore must have completed execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroySemaphore-semaphore-01138", + "text": "If VkAllocationCallbacks were provided when semaphore was created, a compatible set of callbacks must be provided here", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroySemaphore-semaphore-01139", + "text": "If no VkAllocationCallbacks were provided when semaphore was created, pAllocator must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroySemaphore-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroySemaphore-semaphore-parameter", + "text": "If semaphore is not VK_NULL_HANDLE, semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroySemaphore-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroySemaphore-semaphore-parent", + "text": "If semaphore is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetSemaphoreCounterValue": { + "core": [ + { + "vuid": "VUID-vkGetSemaphoreCounterValue-semaphore-03255", + "text": "semaphore must have been created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreCounterValue-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreCounterValue-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreCounterValue-pValue-parameter", + "text": "pValue must be a valid pointer to a uint64_t value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetSemaphoreCounterValue-semaphore-parent", + "text": "semaphore must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkWaitSemaphores": { + "core": [ + { + "vuid": "VUID-vkWaitSemaphores-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkWaitSemaphores-pWaitInfo-parameter", + "text": "pWaitInfo must be a valid pointer to a valid VkSemaphoreWaitInfo structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreWaitInfo": { + "core": [ + { + "vuid": "VUID-VkSemaphoreWaitInfo-pSemaphores-03256", + "text": "All of the elements of pSemaphores must reference a semaphore that was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreWaitInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreWaitInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreWaitInfo-flags-parameter", + "text": "flags must be a valid combination of VkSemaphoreWaitFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreWaitInfo-pSemaphores-parameter", + "text": "pSemaphores must be a valid pointer to an array of semaphoreCount valid VkSemaphore handles", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreWaitInfo-pValues-parameter", + "text": "pValues must be a valid pointer to an array of semaphoreCount uint64_t values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreWaitInfo-semaphoreCount-arraylength", + "text": "semaphoreCount must be greater than 0", + "page": "chapters/synchronization.html" + } + ] + }, + "vkSignalSemaphore": { + "core": [ + { + "vuid": "VUID-vkSignalSemaphore-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkSignalSemaphore-pSignalInfo-parameter", + "text": "pSignalInfo must be a valid pointer to a valid VkSemaphoreSignalInfo structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkSemaphoreSignalInfo": { + "core": [ + { + "vuid": "VUID-VkSemaphoreSignalInfo-semaphore-03257", + "text": "semaphore must have been created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreSignalInfo-value-03258", + "text": "value must have a value greater than the current value of the semaphore", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreSignalInfo-value-03259", + "text": "value must be less than the value of any pending semaphore signal operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreSignalInfo-value-03260", + "text": "value must have a value which does not differ from the current value of the semaphore or the value of any outstanding semaphore wait or signal operation on semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreSignalInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreSignalInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkSemaphoreSignalInfo-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + } + ] + }, + "vkImportSemaphoreWin32HandleKHR": { + "core": [ + { + "vuid": "VUID-vkImportSemaphoreWin32HandleKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportSemaphoreWin32HandleKHR-pImportSemaphoreWin32HandleInfo-parameter", + "text": "pImportSemaphoreWin32HandleInfo must be a valid pointer to a valid VkImportSemaphoreWin32HandleInfoKHR structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImportSemaphoreWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01140", + "text": "handleType must be a value included in the Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR table", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01466", + "text": "If handleType is not VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, name must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467", + "text": "If handle is NULL, name must name a valid synchronization primitive of the type specified by handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468", + "text": "If name is NULL, handle must be a valid handle of the type specified by handleType", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469", + "text": "If handle is not NULL, name must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01542", + "text": "If handle is not NULL, it must obey any requirements listed for handleType in external semaphore handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-name-01543", + "text": "If name is not NULL, it must obey any requirements listed for handleType in external semaphore handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03261", + "text": "If handleType is VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, the VkSemaphoreCreateInfo::flags field must match that of the semaphore from which handle or name was exported", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03262", + "text": "If handleType is VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT or VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, the VkSemaphoreTypeCreateInfo::semaphoreType field must match that of the semaphore from which handle or name was exported", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-03322", + "text": "If flags contains VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the VkSemaphoreTypeCreateInfo::semaphoreType field of the semaphore from which handle or name was exported must not be VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkSemaphoreImportFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "vkImportSemaphoreFdKHR": { + "core": [ + { + "vuid": "VUID-vkImportSemaphoreFdKHR-semaphore-01142", + "text": "semaphore must not be associated with any queue command that has not yet completed execution on that queue", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportSemaphoreFdKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportSemaphoreFdKHR-pImportSemaphoreFdInfo-parameter", + "text": "pImportSemaphoreFdInfo must be a valid pointer to a valid VkImportSemaphoreFdInfoKHR structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImportSemaphoreFdInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-01143", + "text": "handleType must be a value included in the Handle Types Supported by VkImportSemaphoreFdInfoKHR table", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-fd-01544", + "text": "fd must obey any requirements listed for handleType in external semaphore handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-03263", + "text": "If handleType is VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the VkSemaphoreCreateInfo::flags field must match that of the semaphore from which fd was exported", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-07307", + "text": "If handleType refers to a handle type with copy payload transference semantics, flags must contain VK_SEMAPHORE_IMPORT_TEMPORARY_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-03264", + "text": "If handleType is VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the VkSemaphoreTypeCreateInfo::semaphoreType field must match that of the semaphore from which fd was exported", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-flags-03323", + "text": "If flags contains VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the VkSemaphoreTypeCreateInfo::semaphoreType field of the semaphore from which fd was exported must not be VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkSemaphoreImportFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreFdInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalSemaphoreHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkImportSemaphoreZirconHandleFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkImportSemaphoreZirconHandleFUCHSIA-semaphore-04764", + "text": "semaphore must not be associated with any queue command that has not yet completed execution on that queue", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportSemaphoreZirconHandleFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkImportSemaphoreZirconHandleFUCHSIA-pImportSemaphoreZirconHandleInfo-parameter", + "text": "pImportSemaphoreZirconHandleInfo must be a valid pointer to a valid VkImportSemaphoreZirconHandleInfoFUCHSIA structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImportSemaphoreZirconHandleInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-handleType-04765", + "text": "handleType must be a value included in the Handle Types Supported by VkImportSemaphoreZirconHandleInfoFUCHSIA table", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-zirconHandle-04766", + "text": "zirconHandle must obey any requirements listed for handleType in external semaphore handle types compatibility", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-zirconHandle-04767", + "text": "zirconHandle must have ZX_RIGHTS_BASIC and ZX_RIGHTS_SIGNAL rights", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-semaphoreType-04768", + "text": "The VkSemaphoreTypeCreateInfo::semaphoreType field must not be VK_SEMAPHORE_TYPE_TIMELINE", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-semaphore-parameter", + "text": "semaphore must be a valid VkSemaphore handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-flags-parameter", + "text": "flags must be a valid combination of VkSemaphoreImportFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImportSemaphoreZirconHandleInfoFUCHSIA-handleType-parameter", + "text": "handleType must be a valid VkExternalSemaphoreHandleTypeFlagBits value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCreateEvent": { + "core": [ + { + "vuid": "VUID-vkCreateEvent-device-09672", + "text": "device must support at least one queue family with one of the VK_QUEUE_VIDEO_ENCODE_BIT_KHR, VK_QUEUE_VIDEO_DECODE_BIT_KHR, VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateEvent-events-04468", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::events is VK_FALSE, then the implementation does not support events, and vkCreateEvent must not be used", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateEvent-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateEvent-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkEventCreateInfo structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateEvent-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateEvent-pEvent-parameter", + "text": "pEvent must be a valid pointer to a VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCreateEvent-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/synchronization.html" + } + ] + }, + "VkEventCreateInfo": { + "core": [ + { + "vuid": "VUID-VkEventCreateInfo-pNext-06790", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkEventCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkEventCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExportMetalObjectCreateInfoEXT or VkImportMetalSharedEventInfoEXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkEventCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalObjectCreateInfoEXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkEventCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkEventCreateFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "vkDestroyEvent": { + "core": [ + { + "vuid": "VUID-vkDestroyEvent-event-01145", + "text": "All submitted commands that refer to event must have completed execution", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyEvent-event-01146", + "text": "If VkAllocationCallbacks were provided when event was created, a compatible set of callbacks must be provided here", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyEvent-event-01147", + "text": "If no VkAllocationCallbacks were provided when event was created, pAllocator must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyEvent-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyEvent-event-parameter", + "text": "If event is not VK_NULL_HANDLE, event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyEvent-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkDestroyEvent-event-parent", + "text": "If event is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetEventStatus": { + "core": [ + { + "vuid": "VUID-vkGetEventStatus-event-03940", + "text": "event must not have been created with VK_EVENT_CREATE_DEVICE_ONLY_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetEventStatus-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetEventStatus-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetEventStatus-event-parent", + "text": "event must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkSetEvent": { + "core": [ + { + "vuid": "VUID-vkSetEvent-event-03941", + "text": "event must not have been created with VK_EVENT_CREATE_DEVICE_ONLY_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkSetEvent-event-09543", + "text": "event must not be waited on by a command buffer in the pending state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkSetEvent-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkSetEvent-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkSetEvent-event-parent", + "text": "event must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkResetEvent": { + "core": [ + { + "vuid": "VUID-vkResetEvent-event-03821", + "text": "There must be an execution dependency between vkResetEvent and the execution of any vkCmdWaitEvents that includes event in its pEvents parameter", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetEvent-event-03822", + "text": "There must be an execution dependency between vkResetEvent and the execution of any vkCmdWaitEvents2 that includes event in its pEvents parameter", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetEvent-event-03823", + "text": "event must not have been created with VK_EVENT_CREATE_DEVICE_ONLY_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetEvent-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetEvent-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkResetEvent-event-parent", + "text": "event must have been created, allocated, or retrieved from device", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdSetEvent2": { + "core": [ + { + "vuid": "VUID-vkCmdSetEvent2-synchronization2-03824", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-dependencyFlags-03825", + "text": "The dependencyFlags member of pDependencyInfo must be 0 or VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-srcStageMask-09391", + "text": "The srcStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfo must not include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-dstStageMask-09392", + "text": "The dstStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfo must not include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-commandBuffer-03826", + "text": "The current device mask of commandBuffer must include exactly one physical device", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-srcStageMask-03827", + "text": "The srcStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfo must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-dstStageMask-03828", + "text": "The dstStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfo must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-dependencyFlags-10785", + "text": "If the dependencyFlags member of pDependencyInfo includes VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR, the bufferMemoryBarrierCount and imageMemoryBarrierCount members of pDependencyInfo must be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-dependencyFlags-10786", + "text": "If the dependencyFlags member of pDependencyInfo includes VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR, the memoryBarrierCount member of pDependencyInfo must be 1", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-dependencyFlags-10787", + "text": "If the dependencyFlags member of pDependencyInfo includes VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR, the srcAccessMask, dstStageMask, and dstAccessMask members of pDependencyInfo->pMemoryBarriers[0] must be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-pDependencyInfo-parameter", + "text": "pDependencyInfo must be a valid pointer to a valid VkDependencyInfo structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent2-commonparent", + "text": "Both of commandBuffer, and event must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "VkDependencyInfo": { + "core": [ + { + "vuid": "VUID-VkDependencyInfo-pMemoryBarriers-10605", + "text": "For each element of pMemoryBarriers, the sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-pMemoryBarriers-10606", + "text": "For each element of pMemoryBarriers, pNext must be either NULL or a pointer to a valid instance of VkMemoryBarrierAccessFlags3KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-pNext-09754", + "text": "If a VkTensorDependencyInfoARM structure is included in the pNext chain, a VkTensorMemoryBarrierARM structure must not be included in the pNext chain", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEPENDENCY_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkTensorDependencyInfoARM or VkTensorMemoryBarrierARM", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-dependencyFlags-parameter", + "text": "dependencyFlags must be a valid combination of VkDependencyFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-pMemoryBarriers-parameter", + "text": "If memoryBarrierCount is not 0, pMemoryBarriers must be a valid pointer to an array of memoryBarrierCount valid VkMemoryBarrier2 structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-pBufferMemoryBarriers-parameter", + "text": "If bufferMemoryBarrierCount is not 0, pBufferMemoryBarriers must be a valid pointer to an array of bufferMemoryBarrierCount valid VkBufferMemoryBarrier2 structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkDependencyInfo-pImageMemoryBarriers-parameter", + "text": "If imageMemoryBarrierCount is not 0, pImageMemoryBarriers must be a valid pointer to an array of imageMemoryBarrierCount valid VkImageMemoryBarrier2 structures", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdSetEvent": { + "core": [ + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04090", + "text": "If the geometryShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04091", + "text": "If the tessellationShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04092", + "text": "If the conditionalRendering feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04094", + "text": "If the transformFeedback feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04095", + "text": "If the meshShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-04096", + "text": "If the taskShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, stageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-03937", + "text": "If the synchronization2 feature is not enabled, stageMask must not be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, stageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-10754", + "text": "If the accelerationStructure feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-06457", + "text": "Any pipeline stage included in stageMask must be supported by the capabilities of the queue family specified by the queueFamilyIndex member of the VkCommandPoolCreateInfo structure that was used to create the VkCommandPool that commandBuffer was allocated from, as specified in the table of supported pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-01149", + "text": "stageMask must not include VK_PIPELINE_STAGE_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-commandBuffer-01152", + "text": "The current device mask of commandBuffer must include exactly one physical device", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-stageMask-parameter", + "text": "stageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdSetEvent-commonparent", + "text": "Both of commandBuffer, and event must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdResetEvent2": { + "core": [ + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03929", + "text": "If the geometryShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03930", + "text": "If the tessellationShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03931", + "text": "If the conditionalRendering feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03933", + "text": "If the transformFeedback feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03934", + "text": "If the meshShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03935", + "text": "If the taskShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, stageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-04957", + "text": "If the subpassShading feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-04995", + "text": "If the invocationMask feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, stageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-10751", + "text": "If the accelerationStructure feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-10753", + "text": "If the micromap feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-synchronization2-03829", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-03830", + "text": "stageMask must not include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-event-03831", + "text": "There must be an execution dependency between vkCmdResetEvent2 and the execution of any vkCmdWaitEvents that includes event in its pEvents parameter", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-event-03832", + "text": "There must be an execution dependency between vkCmdResetEvent2 and the execution of any vkCmdWaitEvents2 that includes event in its pEvents parameter", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-commandBuffer-03833", + "text": "commandBuffer’s current device mask must include exactly one physical device", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-stageMask-parameter", + "text": "stageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent2-commonparent", + "text": "Both of commandBuffer, and event must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdResetEvent": { + "core": [ + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04090", + "text": "If the geometryShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04091", + "text": "If the tessellationShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04092", + "text": "If the conditionalRendering feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04094", + "text": "If the transformFeedback feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04095", + "text": "If the meshShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-04096", + "text": "If the taskShader feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, stageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-03937", + "text": "If the synchronization2 feature is not enabled, stageMask must not be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, stageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-10754", + "text": "If the accelerationStructure feature is not enabled, stageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-06458", + "text": "Any pipeline stage included in stageMask must be supported by the capabilities of the queue family specified by the queueFamilyIndex member of the VkCommandPoolCreateInfo structure that was used to create the VkCommandPool that commandBuffer was allocated from, as specified in the table of supported pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-01153", + "text": "stageMask must not include VK_PIPELINE_STAGE_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-event-03834", + "text": "There must be an execution dependency between vkCmdResetEvent and the execution of any vkCmdWaitEvents that includes event in its pEvents parameter", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-event-03835", + "text": "There must be an execution dependency between vkCmdResetEvent and the execution of any vkCmdWaitEvents2 that includes event in its pEvents parameter", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-commandBuffer-01157", + "text": "commandBuffer’s current device mask must include exactly one physical device", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-event-parameter", + "text": "event must be a valid VkEvent handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-stageMask-parameter", + "text": "stageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdResetEvent-commonparent", + "text": "Both of commandBuffer, and event must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdWaitEvents2": { + "core": [ + { + "vuid": "VUID-vkCmdWaitEvents2-synchronization2-03836", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-03837", + "text": "Members of pEvents must not have been signaled by vkCmdSetEvent", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-10788", + "text": "For any element i of pEvents, if the dependencyFlags member of the ith element of pDependencyInfos does not include VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR, and if that event is signaled by vkCmdSetEvent2, that command’s dependencyInfo parameter must be exactly equal to the ith element of pDependencyInfos", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-10789", + "text": "For any element i of pEvents, if the dependencyFlags member of the ith element of pDependencyInfos includes VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR, that event must be signaled by vkCmdSetEvent2 with VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-10790", + "text": "For any element i of pEvents, if the dependencyFlags member of the ith element of pDependencyInfos includes VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR, the union of srcStageMask members of all elements of pMemoryBarriers, pBufferMemoryBarriers, and pImageMemoryBarriers of the ith element of pDependencyInfos must equal pDependencyInfos->pMemoryBarriers[0].srcStageMask in the vkCmdSetEvent2 command", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-03839", + "text": "For any element i of pEvents, if that event is signaled by vkSetEvent, barriers in the ith element of pDependencyInfos must include only host operations in their first synchronization scope", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-03840", + "text": "For any element i of pEvents, if barriers in the ith element of pDependencyInfos include only host operations, the ith element of pEvents must be signaled before vkCmdWaitEvents2 is executed", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-03841", + "text": "For any element i of pEvents, if barriers in the ith element of pDependencyInfos do not include host operations, the ith element of pEvents must be signaled by a corresponding vkCmdSetEvent2 that occurred earlier in submission order", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-srcStageMask-03842", + "text": "The srcStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfos must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-dstStageMask-03843", + "text": "The dstStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfos must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-dependencyFlags-10394", + "text": "The dependencyFlags member of any element of pDependencyInfo must not include any of the following bits:
\n
    \n
  • \n

    VK_DEPENDENCY_BY_REGION_BIT

    \n
  • \n
  • \n

    VK_DEPENDENCY_DEVICE_GROUP_BIT

    \n
  • \n
  • \n

    VK_DEPENDENCY_VIEW_LOCAL_BIT

    \n
  • \n
  • \n

    VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT

    \n
  • \n
\n
", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-maintenance8-10205", + "text": "If the maintenance8 feature is not enabled, the dependencyFlags members of any element of pDependencyInfos must not include VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-dependencyFlags-03844", + "text": "If vkCmdWaitEvents2 is being called inside a render pass instance, the srcStageMask member of any element of the pMemoryBarriers, pBufferMemoryBarriers, or pImageMemoryBarriers members of pDependencyInfos must not include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-commandBuffer-03846", + "text": "commandBuffer’s current device mask must include exactly one physical device", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-None-10654", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pEvents-parameter", + "text": "pEvents must be a valid pointer to an array of eventCount valid VkEvent handles", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-pDependencyInfos-parameter", + "text": "pDependencyInfos must be a valid pointer to an array of eventCount valid VkDependencyInfo structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-eventCount-arraylength", + "text": "eventCount must be greater than 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents2-commonparent", + "text": "Both of commandBuffer, and the elements of pEvents must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdWaitEvents": { + "core": [ + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04090", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04091", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04094", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04095", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-04096", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-03937", + "text": "If the synchronization2 feature is not enabled, srcStageMask must not be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcAccessMask-06257", + "text": "If the rayQuery feature is not enabled and a memory barrier srcAccessMask includes VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04090", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04091", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04094", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04095", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-04096", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-03937", + "text": "If the synchronization2 feature is not enabled, dstStageMask must not be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstAccessMask-06257", + "text": "If the rayQuery feature is not enabled and a memory barrier dstAccessMask includes VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcAccessMask-02815", + "text": "The srcAccessMask member of each element of pMemoryBarriers must only include access flags that are supported by one or more of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstAccessMask-02816", + "text": "The dstAccessMask member of each element of pMemoryBarriers must only include access flags that are supported by one or more of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02817", + "text": "For any element of pBufferMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its srcQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its srcAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02818", + "text": "For any element of pBufferMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its dstQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its dstAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-02819", + "text": "For any element of pImageMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its srcQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its srcAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-02820", + "text": "For any element of pImageMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its dstQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its dstAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-06459", + "text": "Any pipeline stage included in srcStageMask must be supported by the capabilities of the queue family specified by the queueFamilyIndex member of the VkCommandPoolCreateInfo structure that was used to create the VkCommandPool that commandBuffer was allocated from, as specified in the table of supported pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-06460", + "text": "Any pipeline stage included in dstStageMask must be supported by the capabilities of the queue family specified by the queueFamilyIndex member of the VkCommandPoolCreateInfo structure that was used to create the VkCommandPool that commandBuffer was allocated from, as specified in the table of supported pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-01158", + "text": "srcStageMask must be the bitwise OR of the stageMask parameter used in previous calls to vkCmdSetEvent with any of the elements of pEvents and VK_PIPELINE_STAGE_HOST_BIT if any of the elements of pEvents was set using vkSetEvent", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-07308", + "text": "If vkCmdWaitEvents is being called inside a render pass instance, srcStageMask must not include VK_PIPELINE_STAGE_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcQueueFamilyIndex-02803", + "text": "The srcQueueFamilyIndex and dstQueueFamilyIndex members of any element of pBufferMemoryBarriers or pImageMemoryBarriers must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-commandBuffer-01167", + "text": "commandBuffer’s current device mask must include exactly one physical device", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pEvents-03847", + "text": "Elements of pEvents must not have been signaled by vkCmdSetEvent2", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-None-10655", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pEvents-parameter", + "text": "pEvents must be a valid pointer to an array of eventCount valid VkEvent handles", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pMemoryBarriers-parameter", + "text": "If memoryBarrierCount is not 0, pMemoryBarriers must be a valid pointer to an array of memoryBarrierCount valid VkMemoryBarrier structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pBufferMemoryBarriers-parameter", + "text": "If bufferMemoryBarrierCount is not 0, pBufferMemoryBarriers must be a valid pointer to an array of bufferMemoryBarrierCount valid VkBufferMemoryBarrier structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-pImageMemoryBarriers-parameter", + "text": "If imageMemoryBarrierCount is not 0, pImageMemoryBarriers must be a valid pointer to an array of imageMemoryBarrierCount valid VkImageMemoryBarrier structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-eventCount-arraylength", + "text": "eventCount must be greater than 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdWaitEvents-commonparent", + "text": "Both of commandBuffer, and the elements of pEvents must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdPipelineBarrier2": { + "core": [ + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-07889", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance using a VkRenderPass object, the render pass must have been created with at least one subpass dependency that expresses a dependency from the current subpass to itself, does not include VK_DEPENDENCY_BY_REGION_BIT if this command does not, does not include VK_DEPENDENCY_VIEW_LOCAL_BIT if this command does not, and has synchronization scopes and access scopes that are all supersets of the scopes defined in this command", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-bufferMemoryBarrierCount-01178", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance using a VkRenderPass object, it must not include any buffer memory barriers", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-image-04073", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance using a VkRenderPass object, the image member of any image memory barrier included in this command must be an attachment used in the current subpass both as an input attachment, and as either a color, color resolve, or depth/stencil attachment", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-image-09373", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance using a VkRenderPass object, and the image member of any image memory barrier is a color resolve attachment, the corresponding color attachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-image-09374", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance using a VkRenderPass object, and the image member of any image memory barrier is a color resolve attachment, it must have been created with a non-zero VkExternalFormatANDROID::externalFormat value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-oldLayout-01181", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance, the oldLayout and newLayout members of any image memory barrier included in this command must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-srcQueueFamilyIndex-01182", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance, the srcQueueFamilyIndex and dstQueueFamilyIndex members of any memory barrier included in this command must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-07890", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance, and the source stage masks of any memory barriers include framebuffer-space stages, destination stage masks of all memory barriers must only include framebuffer-space stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-dependencyFlags-07891", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance, and the source stage masks of any memory barriers include framebuffer-space stages, then dependencyFlags must include VK_DEPENDENCY_BY_REGION_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-07892", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance, the source and destination stage masks of any memory barriers must only include graphics pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-dependencyFlags-01186", + "text": "If vkCmdPipelineBarrier2 is called outside of a render pass instance, the dependency flags must not include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-07893", + "text": "If vkCmdPipelineBarrier2 is called inside a render pass instance, and there is more than one view in the current subpass, dependency flags must include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-09553", + "text": "If none of the shaderTileImageColorReadAccess, shaderTileImageStencilReadAccess, or shaderTileImageDepthReadAccess features are enabled, and the dynamicRenderingLocalRead feature is not enabled, vkCmdPipelineBarrier2 must not be called within a render pass instance started with vkCmdBeginRendering", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-09554", + "text": "If the dynamicRenderingLocalRead feature is not enabled, and vkCmdPipelineBarrier2 is called within a render pass instance started with vkCmdBeginRendering, there must be no buffer or image memory barriers specified by this command", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-None-09586", + "text": "If the dynamicRenderingLocalRead feature is not enabled, and vkCmdPipelineBarrier2 is called within a render pass instance started with vkCmdBeginRendering, memory barriers specified by this command must only include VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, or VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT in their access masks", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-image-09555", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance started with vkCmdBeginRendering, and the image member of any image memory barrier is used as an attachment in the current render pass instance, it must be in the VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ or VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-srcStageMask-09556", + "text": "If vkCmdPipelineBarrier2 is called within a render pass instance started with vkCmdBeginRendering, this command must only specify framebuffer-space stages in srcStageMask and dstStageMask", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-synchronization2-03848", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-srcStageMask-09673", + "text": "The srcStageMask member of any element of the pMemoryBarriers member of pDependencyInfo must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-dstStageMask-09674", + "text": "The dstStageMask member of any element of the pMemoryBarriers member of pDependencyInfo must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-srcStageMask-09675", + "text": "If a buffer or image memory barrier does not specify an acquire operation, or if it does but pDependencyInfo->dependencyFlags includes VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR, the respective srcStageMask member of the element of the pBufferMemoryBarriers or pImageMemoryBarriers members of pDependencyInfo must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-dstStageMask-09676", + "text": "If a buffer or image memory barrier does not specify an release operation, or if it does but pDependencyInfo->dependencyFlags includes VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR, the respective dstStageMask member of the element of the pBufferMemoryBarriers or pImageMemoryBarriers members of pDependencyInfo must only include pipeline stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-srcQueueFamilyIndex-10387", + "text": "If a buffer or image memory barrier specifies a queue family ownership transfer operation, either the srcQueueFamilyIndex or dstQueueFamilyIndex member of the element of the pBufferMemoryBarriers or pImageMemoryBarriers members of pDependencyInfo and the queue family index that was used to create the command pool that commandBuffer was allocated from must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-pDependencyInfo-parameter", + "text": "pDependencyInfo must be a valid pointer to a valid VkDependencyInfo structure", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdPipelineBarrier": { + "core": [ + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04090", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04091", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04094", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04095", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-04096", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-03937", + "text": "If the synchronization2 feature is not enabled, srcStageMask must not be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcAccessMask-06257", + "text": "If the rayQuery feature is not enabled and a memory barrier srcAccessMask includes VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04090", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04091", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04094", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04095", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-04096", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-03937", + "text": "If the synchronization2 feature is not enabled, dstStageMask must not be 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstAccessMask-06257", + "text": "If the rayQuery feature is not enabled and a memory barrier dstAccessMask includes VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcAccessMask-02815", + "text": "The srcAccessMask member of each element of pMemoryBarriers must only include access flags that are supported by one or more of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstAccessMask-02816", + "text": "The dstAccessMask member of each element of pMemoryBarriers must only include access flags that are supported by one or more of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02817", + "text": "For any element of pBufferMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its srcQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its srcAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02818", + "text": "For any element of pBufferMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its dstQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its dstAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02819", + "text": "For any element of pImageMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its srcQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its srcAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02820", + "text": "For any element of pImageMemoryBarriers, if its srcQueueFamilyIndex and dstQueueFamilyIndex members are equal, or if its dstQueueFamilyIndex is the queue family index that was used to create the command pool that commandBuffer was allocated from, then its dstAccessMask member must only contain access flags that are supported by one or more of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-07889", + "text": "If vkCmdPipelineBarrier is called within a render pass instance using a VkRenderPass object, the render pass must have been created with at least one subpass dependency that expresses a dependency from the current subpass to itself, does not include VK_DEPENDENCY_BY_REGION_BIT if this command does not, does not include VK_DEPENDENCY_VIEW_LOCAL_BIT if this command does not, and has synchronization scopes and access scopes that are all supersets of the scopes defined in this command", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178", + "text": "If vkCmdPipelineBarrier is called within a render pass instance using a VkRenderPass object, it must not include any buffer memory barriers", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-image-04073", + "text": "If vkCmdPipelineBarrier is called within a render pass instance using a VkRenderPass object, the image member of any image memory barrier included in this command must be an attachment used in the current subpass both as an input attachment, and as either a color, color resolve, or depth/stencil attachment", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-image-09373", + "text": "If vkCmdPipelineBarrier is called within a render pass instance using a VkRenderPass object, and the image member of any image memory barrier is a color resolve attachment, the corresponding color attachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-image-09374", + "text": "If vkCmdPipelineBarrier is called within a render pass instance using a VkRenderPass object, and the image member of any image memory barrier is a color resolve attachment, it must have been created with a non-zero VkExternalFormatANDROID::externalFormat value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-oldLayout-01181", + "text": "If vkCmdPipelineBarrier is called within a render pass instance, the oldLayout and newLayout members of any image memory barrier included in this command must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182", + "text": "If vkCmdPipelineBarrier is called within a render pass instance, the srcQueueFamilyIndex and dstQueueFamilyIndex members of any memory barrier included in this command must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-07890", + "text": "If vkCmdPipelineBarrier is called within a render pass instance, and the source stage masks of any memory barriers include framebuffer-space stages, destination stage masks of all memory barriers must only include framebuffer-space stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-07891", + "text": "If vkCmdPipelineBarrier is called within a render pass instance, and the source stage masks of any memory barriers include framebuffer-space stages, then dependencyFlags must include VK_DEPENDENCY_BY_REGION_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-07892", + "text": "If vkCmdPipelineBarrier is called within a render pass instance, the source and destination stage masks of any memory barriers must only include graphics pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-01186", + "text": "If vkCmdPipelineBarrier is called outside of a render pass instance, the dependency flags must not include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-07893", + "text": "If vkCmdPipelineBarrier is called inside a render pass instance, and there is more than one view in the current subpass, dependency flags must include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-09553", + "text": "If none of the shaderTileImageColorReadAccess, shaderTileImageStencilReadAccess, or shaderTileImageDepthReadAccess features are enabled, and the dynamicRenderingLocalRead feature is not enabled, vkCmdPipelineBarrier must not be called within a render pass instance started with vkCmdBeginRendering", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-09554", + "text": "If the dynamicRenderingLocalRead feature is not enabled, and vkCmdPipelineBarrier is called within a render pass instance started with vkCmdBeginRendering, there must be no buffer or image memory barriers specified by this command", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-None-09586", + "text": "If the dynamicRenderingLocalRead feature is not enabled, and vkCmdPipelineBarrier is called within a render pass instance started with vkCmdBeginRendering, memory barriers specified by this command must only include VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, or VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT in their access masks", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-image-09555", + "text": "If vkCmdPipelineBarrier is called within a render pass instance started with vkCmdBeginRendering, and the image member of any image memory barrier is used as an attachment in the current render pass instance, it must be in the VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ or VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-09556", + "text": "If vkCmdPipelineBarrier is called within a render pass instance started with vkCmdBeginRendering, this command must only specify framebuffer-space stages in srcStageMask and dstStageMask", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-oldLayout-10758", + "text": "If called within a render pass instance using a VkRenderPass object, the oldLayout member of any image memory barrier included in this command must be equal to the layout that the corresponding attachment uses during the subpass", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-oldLayout-10759", + "text": "If called within a render pass instance started with vkCmdBeginRendering, the oldLayout member of any image memory barrier included in this command must be equal to the layout that the corresponding attachment uses during the render pass instance", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-06461", + "text": "Any pipeline stage included in srcStageMask must be supported by the capabilities of the queue family specified by the queueFamilyIndex member of the VkCommandPoolCreateInfo structure that was used to create the VkCommandPool that commandBuffer was allocated from, as specified in the table of supported pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-06462", + "text": "Any pipeline stage included in dstStageMask must be supported by the capabilities of the queue family specified by the queueFamilyIndex member of the VkCommandPoolCreateInfo structure that was used to create the VkCommandPool that commandBuffer was allocated from, as specified in the table of supported pipeline stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-09633", + "text": "If either srcStageMask or dstStageMask includes VK_PIPELINE_STAGE_HOST_BIT, for any element of pImageMemoryBarriers, srcQueueFamilyIndex and dstQueueFamilyIndex must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-09634", + "text": "If either srcStageMask or dstStageMask includes VK_PIPELINE_STAGE_HOST_BIT, for any element of pBufferMemoryBarriers, srcQueueFamilyIndex and dstQueueFamilyIndex must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-10388", + "text": "If a buffer or image memory barrier specifies a queue family ownership transfer operation, either the srcQueueFamilyIndex or dstQueueFamilyIndex member and the queue family index that was used to create the command pool that commandBuffer was allocated from must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-maintenance8-10206", + "text": "If the maintenance8 feature is not enabled, dependencyFlags must not include VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-dependencyFlags-parameter", + "text": "dependencyFlags must be a valid combination of VkDependencyFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pMemoryBarriers-parameter", + "text": "If memoryBarrierCount is not 0, pMemoryBarriers must be a valid pointer to an array of memoryBarrierCount valid VkMemoryBarrier structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-parameter", + "text": "If bufferMemoryBarrierCount is not 0, pBufferMemoryBarriers must be a valid pointer to an array of bufferMemoryBarrierCount valid VkBufferMemoryBarrier structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-parameter", + "text": "If imageMemoryBarrierCount is not 0, pImageMemoryBarriers must be a valid pointer to an array of imageMemoryBarrierCount valid VkImageMemoryBarrier structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkCmdPipelineBarrier-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, or encode operations", + "page": "chapters/synchronization.html" + } + ] + }, + "VkMemoryBarrier2": { + "core": [ + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03929", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03930", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03931", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03933", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03934", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-03935", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-04957", + "text": "If the subpassShading feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-04995", + "text": "If the invocationMask feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-10751", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-10753", + "text": "If the micromap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03900", + "text": "If srcAccessMask includes VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03901", + "text": "If srcAccessMask includes VK_ACCESS_2_INDEX_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03902", + "text": "If srcAccessMask includes VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03903", + "text": "If srcAccessMask includes VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03904", + "text": "If srcAccessMask includes VK_ACCESS_2_UNIFORM_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03905", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03906", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_STORAGE_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03907", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-07454", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03909", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03910", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03911", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03912", + "text": "If srcAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03913", + "text": "If srcAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03914", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFER_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03915", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFER_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_CLEAR_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03916", + "text": "If srcAccessMask includes VK_ACCESS_2_HOST_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03917", + "text": "If srcAccessMask includes VK_ACCESS_2_HOST_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03918", + "text": "If srcAccessMask includes VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03919", + "text": "If srcAccessMask includes VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03920", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-04747", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03922", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03923", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-04994", + "text": "If srcAccessMask includes VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, srcStageMask must include VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03924", + "text": "If srcAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03925", + "text": "If srcAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03926", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03927", + "text": "If srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-03928", + "text": "If srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-06256", + "text": "If the rayQuery feature is not enabled and srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-07272", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-04858", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-04859", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-04860", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-04861", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-07455", + "text": "If srcAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-07456", + "text": "If srcAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-07457", + "text": "If srcAccessMask includes VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-07458", + "text": "If srcAccessMask includes VK_ACCESS_2_MICROMAP_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-08118", + "text": "If srcAccessMask includes VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-10670", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-10671", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03929", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03930", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03931", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03933", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03934", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-03935", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-04957", + "text": "If the subpassShading feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-04995", + "text": "If the invocationMask feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-10751", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-10753", + "text": "If the micromap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03900", + "text": "If dstAccessMask includes VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03901", + "text": "If dstAccessMask includes VK_ACCESS_2_INDEX_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03902", + "text": "If dstAccessMask includes VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03903", + "text": "If dstAccessMask includes VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03904", + "text": "If dstAccessMask includes VK_ACCESS_2_UNIFORM_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03905", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03906", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_STORAGE_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03907", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-07454", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03909", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03910", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03911", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03912", + "text": "If dstAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03913", + "text": "If dstAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03914", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFER_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03915", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFER_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_CLEAR_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03916", + "text": "If dstAccessMask includes VK_ACCESS_2_HOST_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03917", + "text": "If dstAccessMask includes VK_ACCESS_2_HOST_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03918", + "text": "If dstAccessMask includes VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03919", + "text": "If dstAccessMask includes VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03920", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-04747", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03922", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03923", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-04994", + "text": "If dstAccessMask includes VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, dstStageMask must include VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03924", + "text": "If dstAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03925", + "text": "If dstAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03926", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03927", + "text": "If dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-03928", + "text": "If dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-06256", + "text": "If the rayQuery feature is not enabled and dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-07272", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-04858", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-04859", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-04860", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-04861", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-07455", + "text": "If dstAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-07456", + "text": "If dstAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-07457", + "text": "If dstAccessMask includes VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-07458", + "text": "If dstAccessMask includes VK_ACCESS_2_MICROMAP_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-08118", + "text": "If dstAccessMask includes VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-10670", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-10671", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_BARRIER_2", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier2-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + } + ] + }, + "VkMemoryBarrier": { + "core": [ + { + "vuid": "VUID-VkMemoryBarrier-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_BARRIER", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkMemoryBarrier-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits values", + "page": "chapters/synchronization.html" + } + ] + }, + "VkBufferMemoryBarrier2": { + "core": [ + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03929", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03930", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03931", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03933", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03934", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03935", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-04957", + "text": "If the subpassShading feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-04995", + "text": "If the invocationMask feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-10751", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-10753", + "text": "If the micromap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03900", + "text": "If srcAccessMask includes VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03901", + "text": "If srcAccessMask includes VK_ACCESS_2_INDEX_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03902", + "text": "If srcAccessMask includes VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03903", + "text": "If srcAccessMask includes VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03904", + "text": "If srcAccessMask includes VK_ACCESS_2_UNIFORM_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03905", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03906", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_STORAGE_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03907", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-07454", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03909", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03910", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03911", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03912", + "text": "If srcAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03913", + "text": "If srcAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03914", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFER_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03915", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFER_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_CLEAR_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03916", + "text": "If srcAccessMask includes VK_ACCESS_2_HOST_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03917", + "text": "If srcAccessMask includes VK_ACCESS_2_HOST_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03918", + "text": "If srcAccessMask includes VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03919", + "text": "If srcAccessMask includes VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03920", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-04747", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03922", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03923", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-04994", + "text": "If srcAccessMask includes VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, srcStageMask must include VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03924", + "text": "If srcAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03925", + "text": "If srcAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03926", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03927", + "text": "If srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-03928", + "text": "If srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-06256", + "text": "If the rayQuery feature is not enabled and srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-07272", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-04858", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-04859", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-04860", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-04861", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-07455", + "text": "If srcAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-07456", + "text": "If srcAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-07457", + "text": "If srcAccessMask includes VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-07458", + "text": "If srcAccessMask includes VK_ACCESS_2_MICROMAP_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-08118", + "text": "If srcAccessMask includes VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-10670", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-10671", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03929", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03930", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03931", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03933", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03934", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-03935", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-04957", + "text": "If the subpassShading feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-04995", + "text": "If the invocationMask feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-10751", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-10753", + "text": "If the micromap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03900", + "text": "If dstAccessMask includes VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03901", + "text": "If dstAccessMask includes VK_ACCESS_2_INDEX_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03902", + "text": "If dstAccessMask includes VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03903", + "text": "If dstAccessMask includes VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03904", + "text": "If dstAccessMask includes VK_ACCESS_2_UNIFORM_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03905", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03906", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_STORAGE_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03907", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-07454", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03909", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03910", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03911", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03912", + "text": "If dstAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03913", + "text": "If dstAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03914", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFER_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03915", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFER_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_CLEAR_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03916", + "text": "If dstAccessMask includes VK_ACCESS_2_HOST_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03917", + "text": "If dstAccessMask includes VK_ACCESS_2_HOST_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03918", + "text": "If dstAccessMask includes VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03919", + "text": "If dstAccessMask includes VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03920", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-04747", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03922", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03923", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-04994", + "text": "If dstAccessMask includes VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, dstStageMask must include VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03924", + "text": "If dstAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03925", + "text": "If dstAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03926", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03927", + "text": "If dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-03928", + "text": "If dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-06256", + "text": "If the rayQuery feature is not enabled and dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-07272", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-04858", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-04859", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-04860", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-04861", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-07455", + "text": "If dstAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-07456", + "text": "If dstAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-07457", + "text": "If dstAccessMask includes VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-07458", + "text": "If dstAccessMask includes VK_ACCESS_2_MICROMAP_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-08118", + "text": "If dstAccessMask includes VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-10670", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-10671", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-offset-01187", + "text": "offset must be less than the size of buffer", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-size-01188", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be greater than 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-size-01189", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be less than or equal to than the size of buffer minus offset", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-buffer-01931", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-buffer-09095", + "text": "If buffer was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, srcQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-buffer-09096", + "text": "If buffer was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, dstQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-None-09097", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-None-09098", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcQueueFamilyIndex-09099", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstQueueFamilyIndex-09100", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-03851", + "text": "If either srcStageMask or dstStageMask includes VK_PIPELINE_STAGE_2_HOST_BIT, srcQueueFamilyIndex and dstQueueFamilyIndex must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExternalMemoryAcquireUnmodifiedEXT or VkMemoryBarrierAccessFlags3KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier2-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/synchronization.html" + } + ] + }, + "VkBufferMemoryBarrier": { + "core": [ + { + "vuid": "VUID-VkBufferMemoryBarrier-offset-01187", + "text": "offset must be less than the size of buffer", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-size-01188", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be greater than 0", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-size-01189", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be less than or equal to than the size of buffer minus offset", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-buffer-01931", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-buffer-09095", + "text": "If buffer was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, srcQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-buffer-09096", + "text": "If buffer was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, dstQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-None-09097", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-None-09098", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-srcQueueFamilyIndex-09099", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-dstQueueFamilyIndex-09100", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-None-09049", + "text": "If the synchronization2 feature is not enabled, and buffer was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, at least one of srcQueueFamilyIndex and dstQueueFamilyIndex must be VK_QUEUE_FAMILY_IGNORED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-None-09050", + "text": "If the synchronization2 feature is not enabled, and buffer was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, srcQueueFamilyIndex must be VK_QUEUE_FAMILY_IGNORED or VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-None-09051", + "text": "If the synchronization2 feature is not enabled, and buffer was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, dstQueueFamilyIndex must be VK_QUEUE_FAMILY_IGNORED or VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkExternalMemoryAcquireUnmodifiedEXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkBufferMemoryBarrier-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImageMemoryBarrier2": { + "core": [ + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03929", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03930", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03931", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03933", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03934", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03935", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-04957", + "text": "If the subpassShading feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-04995", + "text": "If the invocationMask feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-10751", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-10753", + "text": "If the micromap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03900", + "text": "If srcAccessMask includes VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03901", + "text": "If srcAccessMask includes VK_ACCESS_2_INDEX_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03902", + "text": "If srcAccessMask includes VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03903", + "text": "If srcAccessMask includes VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03904", + "text": "If srcAccessMask includes VK_ACCESS_2_UNIFORM_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03905", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03906", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_STORAGE_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03907", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-07454", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03909", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03910", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03911", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03912", + "text": "If srcAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03913", + "text": "If srcAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03914", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFER_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03915", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFER_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_CLEAR_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03916", + "text": "If srcAccessMask includes VK_ACCESS_2_HOST_READ_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03917", + "text": "If srcAccessMask includes VK_ACCESS_2_HOST_WRITE_BIT, srcStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03918", + "text": "If srcAccessMask includes VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03919", + "text": "If srcAccessMask includes VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03920", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-04747", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03922", + "text": "If srcAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03923", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-04994", + "text": "If srcAccessMask includes VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, srcStageMask must include VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03924", + "text": "If srcAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03925", + "text": "If srcAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03926", + "text": "If srcAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03927", + "text": "If srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-03928", + "text": "If srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-06256", + "text": "If the rayQuery feature is not enabled and srcAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, srcStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-07272", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-04858", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-04859", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-04860", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-04861", + "text": "If srcAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, srcStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-07455", + "text": "If srcAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-07456", + "text": "If srcAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, srcStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-07457", + "text": "If srcAccessMask includes VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-07458", + "text": "If srcAccessMask includes VK_ACCESS_2_MICROMAP_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-08118", + "text": "If srcAccessMask includes VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, srcStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-10670", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-10671", + "text": "If srcAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, srcStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03929", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03930", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03931", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03932", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03933", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03934", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-03935", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-04957", + "text": "If the subpassShading feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-04995", + "text": "If the invocationMask feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-10751", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-10753", + "text": "If the micromap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03900", + "text": "If dstAccessMask includes VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03901", + "text": "If dstAccessMask includes VK_ACCESS_2_INDEX_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03902", + "text": "If dstAccessMask includes VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT, VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03903", + "text": "If dstAccessMask includes VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03904", + "text": "If dstAccessMask includes VK_ACCESS_2_UNIFORM_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03905", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_SAMPLED_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03906", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_STORAGE_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03907", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-07454", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03909", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03910", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03911", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03912", + "text": "If dstAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03913", + "text": "If dstAccessMask includes VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03914", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFER_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03915", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFER_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_COPY_BIT, VK_PIPELINE_STAGE_2_BLIT_BIT, VK_PIPELINE_STAGE_2_RESOLVE_BIT, VK_PIPELINE_STAGE_2_CLEAR_BIT, VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03916", + "text": "If dstAccessMask includes VK_ACCESS_2_HOST_READ_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03917", + "text": "If dstAccessMask includes VK_ACCESS_2_HOST_WRITE_BIT, dstStageMask must include VK_PIPELINE_STAGE_2_HOST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03918", + "text": "If dstAccessMask includes VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03919", + "text": "If dstAccessMask includes VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03920", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-04747", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03922", + "text": "If dstAccessMask includes VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03923", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-04994", + "text": "If dstAccessMask includes VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI, dstStageMask must include VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03924", + "text": "If dstAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03925", + "text": "If dstAccessMask includes VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03926", + "text": "If dstAccessMask includes VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03927", + "text": "If dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of the VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-03928", + "text": "If dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR, VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR or VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-06256", + "text": "If the rayQuery feature is not enabled and dstAccessMask includes VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR, dstStageMask must not include any of the VK_PIPELINE_STAGE_*_SHADER_BIT stages except VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-07272", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT or VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-04858", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-04859", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-04860", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-04861", + "text": "If dstAccessMask includes VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR, dstStageMask must include VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-07455", + "text": "If dstAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-07456", + "text": "If dstAccessMask includes VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV, dstStageMask must include VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-07457", + "text": "If dstAccessMask includes VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-07458", + "text": "If dstAccessMask includes VK_ACCESS_2_MICROMAP_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT or VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-08118", + "text": "If dstAccessMask includes VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT, dstStageMask must include VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, or one of VK_PIPELINE_STAGE_*_SHADER_BIT stages", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-10670", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-10671", + "text": "If dstAccessMask includes VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM, dstStageMask must include VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT or VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01208", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01209", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01210", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01211", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then image must have been created with VK_IMAGE_USAGE_SAMPLED_BIT or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01212", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then image must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01213", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then image must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01197", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, oldLayout must be VK_IMAGE_LAYOUT_UNDEFINED or the current layout of the image subresources affected by the barrier", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-10767", + "text": "If the zeroInitializeDeviceMemory feature is not enabled, oldLayout must not be VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-10768", + "text": "If oldLayout is VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, then all subresources must be included in the barrier", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-newLayout-01198", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, newLayout must not be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01658", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-01659", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-04065", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL then image must have been created with at least one of VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_SAMPLED_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-04066", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-04067", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then image must have been created with at least one of VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_SAMPLED_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-04068", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-synchronization2-07793", + "text": "If the synchronization2 feature is not enabled, oldLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-synchronization2-07794", + "text": "If the synchronization2 feature is not enabled, newLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-03938", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, image must have been created with VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-03939", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, image must have been created with at least one of VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_SAMPLED_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-02088", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR then image must have been created with VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR set", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-09117", + "text": "If image was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, srcQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-09118", + "text": "If image was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, dstQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-None-09119", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-None-09120", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-09121", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstQueueFamilyIndex-09122", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07120", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07121", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07122", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07123", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07124", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07125", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-10287", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07006", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then image must have been created with either the VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bits, and the VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or VK_IMAGE_USAGE_SAMPLED_BIT usage bits, and the VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-attachmentFeedbackLoopLayout-07313", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, newLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-09550", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ then image must have been created with either VK_IMAGE_USAGE_STORAGE_BIT, or with both VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT and either of VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dynamicRenderingLocalRead-09551", + "text": "If the dynamicRenderingLocalRead feature is not enabled, oldLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dynamicRenderingLocalRead-09552", + "text": "If the dynamicRenderingLocalRead feature is not enabled, newLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-subresourceRange-01486", + "text": "subresourceRange.baseMipLevel must be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-subresourceRange-01724", + "text": "If subresourceRange.levelCount is not VK_REMAINING_MIP_LEVELS, subresourceRange.baseMipLevel + subresourceRange.levelCount must be less than or equal to the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-subresourceRange-01488", + "text": "If image is not a 3D image or was created without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or the maintenance9 feature is not enabled, subresourceRange.baseArrayLayer must be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-maintenance9-10798", + "text": "If the maintenance9 feature is enabled and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, subresourceRange.baseArrayLayer must be less than the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-maintenance9-10799", + "text": "If the maintenance9 feature is enabled and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set and either subresourceRange.baseArrayLayer is not equal to 0 or subresourceRange.layerCount is not equal to VK_REMAINING_ARRAY_LAYERS, subresourceRange.levelCount must be 1", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-subresourceRange-01725", + "text": "If image is not a 3D image or was created without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or the maintenance9 feature is not enabled, and subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-maintenance9-10800", + "text": "If the maintenance9 feature is enabled, subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-01932", + "text": "If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-09241", + "text": "If image has a color format that is single-plane, then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-09242", + "text": "If image has a color format and is not disjoint, then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-01672", + "text": "If image has a multi-planar format and the image is disjoint, then the aspectMask member of subresourceRange must include at least one multi-planar aspect mask bit or VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-03320", + "text": "If image has a depth/stencil format with both depth and stencil and the separateDepthStencilLayouts feature is not enabled, then the aspectMask member of subresourceRange must include both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-03319", + "text": "If image has a depth/stencil format with both depth and stencil and the separateDepthStencilLayouts feature is enabled, then the aspectMask member of subresourceRange must include either or both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-10749", + "text": "If image has a depth-only format then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_DEPTH_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-10750", + "text": "If image has a stencil-only format then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-aspectMask-08702", + "text": "If the aspectMask member of subresourceRange includes VK_IMAGE_ASPECT_DEPTH_BIT, oldLayout and newLayout must not be one of VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-aspectMask-08703", + "text": "If the aspectMask member of subresourceRange includes VK_IMAGE_ASPECT_STENCIL_BIT, oldLayout and newLayout must not be one of VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-subresourceRange-09601", + "text": "subresourceRange.aspectMask must be valid for the format the image was created with", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03854", + "text": "If either srcStageMask or dstStageMask includes VK_PIPELINE_STAGE_2_HOST_BIT, srcQueueFamilyIndex and dstQueueFamilyIndex must be equal", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-03855", + "text": "If srcStageMask includes VK_PIPELINE_STAGE_2_HOST_BIT, and srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, oldLayout must be one of VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, VK_IMAGE_LAYOUT_UNDEFINED, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExternalMemoryAcquireUnmodifiedEXT, VkMemoryBarrierAccessFlags3KHR, or VkSampleLocationsInfoEXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-oldLayout-parameter", + "text": "oldLayout must be a valid VkImageLayout value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-newLayout-parameter", + "text": "newLayout must be a valid VkImageLayout value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier2-subresourceRange-parameter", + "text": "subresourceRange must be a valid VkImageSubresourceRange structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkImageMemoryBarrier": { + "core": [ + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01208", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01209", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01210", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01211", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then image must have been created with VK_IMAGE_USAGE_SAMPLED_BIT or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01212", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then image must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01213", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then image must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01197", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, oldLayout must be VK_IMAGE_LAYOUT_UNDEFINED or the current layout of the image subresources affected by the barrier", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-10767", + "text": "If the zeroInitializeDeviceMemory feature is not enabled, oldLayout must not be VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-10768", + "text": "If oldLayout is VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, then all subresources must be included in the barrier", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-newLayout-01198", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, newLayout must not be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01658", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-01659", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04065", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL then image must have been created with at least one of VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_SAMPLED_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04066", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04067", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then image must have been created with at least one of VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_SAMPLED_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04068", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL then image must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-synchronization2-07793", + "text": "If the synchronization2 feature is not enabled, oldLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-synchronization2-07794", + "text": "If the synchronization2 feature is not enabled, newLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-03938", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, image must have been created with VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-03939", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, image must have been created with at least one of VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_SAMPLED_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-02088", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR then image must have been created with VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR set", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-09117", + "text": "If image was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, srcQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-09118", + "text": "If image was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not equal, dstQueueFamilyIndex must be VK_QUEUE_FAMILY_EXTERNAL, VK_QUEUE_FAMILY_FOREIGN_EXT, or a valid queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-None-09119", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-None-09120", + "text": "If the VK_KHR_external_memory extension is not enabled, and the value of VkApplicationInfo::apiVersion used to create the VkInstance is not greater than or equal to Version 1.1, dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-09121", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled srcQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-dstQueueFamilyIndex-09122", + "text": "If the VK_EXT_queue_family_foreign extension is not enabled dstQueueFamilyIndex must not be VK_QUEUE_FAMILY_FOREIGN_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07120", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07121", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07122", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07123", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07124", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07125", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-10287", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-07006", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then image must have been created with either the VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bits, and the VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or VK_IMAGE_USAGE_SAMPLED_BIT usage bits, and the VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-attachmentFeedbackLoopLayout-07313", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, newLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-09550", + "text": "If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ then image must have been created with either VK_IMAGE_USAGE_STORAGE_BIT, or with both VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT and either of VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-dynamicRenderingLocalRead-09551", + "text": "If the dynamicRenderingLocalRead feature is not enabled, oldLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-dynamicRenderingLocalRead-09552", + "text": "If the dynamicRenderingLocalRead feature is not enabled, newLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01486", + "text": "subresourceRange.baseMipLevel must be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01724", + "text": "If subresourceRange.levelCount is not VK_REMAINING_MIP_LEVELS, subresourceRange.baseMipLevel + subresourceRange.levelCount must be less than or equal to the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01488", + "text": "If image is not a 3D image or was created without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or the maintenance9 feature is not enabled, subresourceRange.baseArrayLayer must be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-maintenance9-10798", + "text": "If the maintenance9 feature is enabled and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, subresourceRange.baseArrayLayer must be less than the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-maintenance9-10799", + "text": "If the maintenance9 feature is enabled and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set and either subresourceRange.baseArrayLayer is not equal to 0 or subresourceRange.layerCount is not equal to VK_REMAINING_ARRAY_LAYERS, subresourceRange.levelCount must be 1", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-01725", + "text": "If image is not a 3D image or was created without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or the maintenance9 feature is not enabled, and subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-maintenance9-10800", + "text": "If the maintenance9 feature is enabled, subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-01932", + "text": "If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-09241", + "text": "If image has a color format that is single-plane, then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-09242", + "text": "If image has a color format and is not disjoint, then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-01672", + "text": "If image has a multi-planar format and the image is disjoint, then the aspectMask member of subresourceRange must include at least one multi-planar aspect mask bit or VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-03320", + "text": "If image has a depth/stencil format with both depth and stencil and the separateDepthStencilLayouts feature is not enabled, then the aspectMask member of subresourceRange must include both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-03319", + "text": "If image has a depth/stencil format with both depth and stencil and the separateDepthStencilLayouts feature is enabled, then the aspectMask member of subresourceRange must include either or both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-10749", + "text": "If image has a depth-only format then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_DEPTH_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-10750", + "text": "If image has a stencil-only format then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-aspectMask-08702", + "text": "If the aspectMask member of subresourceRange includes VK_IMAGE_ASPECT_DEPTH_BIT, oldLayout and newLayout must not be one of VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-aspectMask-08703", + "text": "If the aspectMask member of subresourceRange includes VK_IMAGE_ASPECT_STENCIL_BIT, oldLayout and newLayout must not be one of VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-09601", + "text": "subresourceRange.aspectMask must be valid for the format the image was created with", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-None-09052", + "text": "If the synchronization2 feature is not enabled, and image was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, at least one of srcQueueFamilyIndex and dstQueueFamilyIndex must be VK_QUEUE_FAMILY_IGNORED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-None-09053", + "text": "If the synchronization2 feature is not enabled, and image was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, srcQueueFamilyIndex must be VK_QUEUE_FAMILY_IGNORED or VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-None-09054", + "text": "If the synchronization2 feature is not enabled, and image was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, dstQueueFamilyIndex must be VK_QUEUE_FAMILY_IGNORED or VK_QUEUE_FAMILY_EXTERNAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExternalMemoryAcquireUnmodifiedEXT or VkSampleLocationsInfoEXT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-oldLayout-parameter", + "text": "oldLayout must be a valid VkImageLayout value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-newLayout-parameter", + "text": "newLayout must be a valid VkImageLayout value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkImageMemoryBarrier-subresourceRange-parameter", + "text": "subresourceRange must be a valid VkImageSubresourceRange structure", + "page": "chapters/synchronization.html" + } + ] + }, + "vkTransitionImageLayout": { + "core": [ + { + "vuid": "VUID-vkTransitionImageLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkTransitionImageLayout-pTransitions-parameter", + "text": "pTransitions must be a valid pointer to an array of transitionCount valid VkHostImageLayoutTransitionInfo structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkTransitionImageLayout-transitionCount-arraylength", + "text": "transitionCount must be greater than 0", + "page": "chapters/synchronization.html" + } + ] + }, + "VkHostImageLayoutTransitionInfo": { + "core": [ + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-09055", + "text": "image must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-subresourceRange-01486", + "text": "subresourceRange.baseMipLevel must be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-subresourceRange-01724", + "text": "If subresourceRange.levelCount is not VK_REMAINING_MIP_LEVELS, subresourceRange.baseMipLevel + subresourceRange.levelCount must be less than or equal to the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-subresourceRange-01488", + "text": "If image is not a 3D image or was created without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or the maintenance9 feature is not enabled, subresourceRange.baseArrayLayer must be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-maintenance9-10798", + "text": "If the maintenance9 feature is enabled and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, subresourceRange.baseArrayLayer must be less than the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-maintenance9-10799", + "text": "If the maintenance9 feature is enabled and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set and either subresourceRange.baseArrayLayer is not equal to 0 or subresourceRange.layerCount is not equal to VK_REMAINING_ARRAY_LAYERS, subresourceRange.levelCount must be 1", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-subresourceRange-01725", + "text": "If image is not a 3D image or was created without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, or the maintenance9 feature is not enabled, and subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-maintenance9-10800", + "text": "If the maintenance9 feature is enabled, subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, and image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-01932", + "text": "If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-09241", + "text": "If image has a color format that is single-plane, then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-09242", + "text": "If image has a color format and is not disjoint, then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-01672", + "text": "If image has a multi-planar format and the image is disjoint, then the aspectMask member of subresourceRange must include at least one multi-planar aspect mask bit or VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-03320", + "text": "If image has a depth/stencil format with both depth and stencil and the separateDepthStencilLayouts feature is not enabled, then the aspectMask member of subresourceRange must include both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-03319", + "text": "If image has a depth/stencil format with both depth and stencil and the separateDepthStencilLayouts feature is enabled, then the aspectMask member of subresourceRange must include either or both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-10749", + "text": "If image has a depth-only format then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_DEPTH_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-10750", + "text": "If image has a stencil-only format then the aspectMask member of subresourceRange must be VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-aspectMask-08702", + "text": "If the aspectMask member of subresourceRange includes VK_IMAGE_ASPECT_DEPTH_BIT, oldLayout and newLayout must not be one of VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-aspectMask-08703", + "text": "If the aspectMask member of subresourceRange includes VK_IMAGE_ASPECT_STENCIL_BIT, oldLayout and newLayout must not be one of VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-subresourceRange-09601", + "text": "subresourceRange.aspectMask must be valid for the format the image was created with", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-oldLayout-09229", + "text": "oldLayout must be either VK_IMAGE_LAYOUT_UNDEFINED or the current layout of the image subresources as specified in subresourceRange", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-oldLayout-09230", + "text": "If oldLayout is not VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, or VK_IMAGE_LAYOUT_PREINITIALIZED, it must be one of the layouts in VkPhysicalDeviceHostImageCopyProperties::pCopySrcLayouts", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-newLayout-09057", + "text": "newLayout must be one of the layouts in VkPhysicalDeviceHostImageCopyProperties::pCopyDstLayouts", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-oldLayout-parameter", + "text": "oldLayout must be a valid VkImageLayout value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-newLayout-parameter", + "text": "newLayout must be a valid VkImageLayout value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkHostImageLayoutTransitionInfo-subresourceRange-parameter", + "text": "subresourceRange must be a valid VkImageSubresourceRange structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkTensorMemoryBarrierARM": { + "core": [ + { + "vuid": "VUID-VkTensorMemoryBarrierARM-tensor-09755", + "text": "If tensor was created with a sharing mode of VK_SHARING_MODE_CONCURRENT, srcQueueFamilyIndex and dstQueueFamilyIndex must both be VK_QUEUE_FAMILY_IGNORED", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-tensor-09756", + "text": "If tensor was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, srcQueueFamilyIndex and dstQueueFamilyIndex must both be either VK_QUEUE_FAMILY_IGNORED, or a valid queue family (see Queue Family Properties)", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-tensor-09757", + "text": "If tensor was created with a sharing mode of VK_SHARING_MODE_EXCLUSIVE, and srcQueueFamilyIndex and dstQueueFamilyIndex are not VK_QUEUE_FAMILY_IGNORED, at least one of them must be the same as the family of the queue that will execute this barrier", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-tensor-09758", + "text": "If tensor is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits2 values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorMemoryBarrierARM-tensor-parameter", + "text": "tensor must be a valid VkTensorARM handle", + "page": "chapters/synchronization.html" + } + ] + }, + "VkTensorDependencyInfoARM": { + "core": [ + { + "vuid": "VUID-VkTensorDependencyInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkTensorDependencyInfoARM-pTensorMemoryBarriers-parameter", + "text": "pTensorMemoryBarriers must be a valid pointer to a valid VkTensorMemoryBarrierARM structure", + "page": "chapters/synchronization.html" + } + ] + }, + "VkExternalMemoryAcquireUnmodifiedEXT": { + "core": [ + { + "vuid": "VUID-VkExternalMemoryAcquireUnmodifiedEXT-acquireUnmodifiedMemory-08922", + "text": "If acquireUnmodifiedMemory is VK_TRUE, and the memory barrier’s srcQueueFamilyIndex is a special queue family reserved for external memory ownership transfers (as described in Queue Family Ownership Transfer), then each range of VkDeviceMemory bound to the resource must have remained unmodified during all time since the resource’s most recent release of ownership to the queue family", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkExternalMemoryAcquireUnmodifiedEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT", + "page": "chapters/synchronization.html" + } + ] + }, + "vkQueueWaitIdle": { + "core": [ + { + "vuid": "VUID-vkQueueWaitIdle-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/synchronization.html" + } + ] + }, + "vkDeviceWaitIdle": { + "core": [ + { + "vuid": "VUID-vkDeviceWaitIdle-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + } + ] + }, + "vkGetCalibratedTimestampsKHR": { + "core": [ + { + "vuid": "VUID-vkGetCalibratedTimestampsKHR-timeDomain-09246", + "text": "The timeDomain value of each VkCalibratedTimestampInfoKHR in pTimestampInfos must be unique", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetCalibratedTimestampsKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetCalibratedTimestampsKHR-pTimestampInfos-parameter", + "text": "pTimestampInfos must be a valid pointer to an array of timestampCount valid VkCalibratedTimestampInfoKHR structures", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetCalibratedTimestampsKHR-pTimestamps-parameter", + "text": "pTimestamps must be a valid pointer to an array of timestampCount uint64_t values", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetCalibratedTimestampsKHR-pMaxDeviation-parameter", + "text": "pMaxDeviation must be a valid pointer to a uint64_t value", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-vkGetCalibratedTimestampsKHR-timestampCount-arraylength", + "text": "timestampCount must be greater than 0", + "page": "chapters/synchronization.html" + } + ] + }, + "VkCalibratedTimestampInfoKHR": { + "core": [ + { + "vuid": "VUID-VkCalibratedTimestampInfoKHR-timeDomain-02354", + "text": "timeDomain must be one of the VkTimeDomainKHR values returned by vkGetPhysicalDeviceCalibrateableTimeDomainsKHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkCalibratedTimestampInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkCalibratedTimestampInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/synchronization.html" + }, + { + "vuid": "VUID-VkCalibratedTimestampInfoKHR-timeDomain-parameter", + "text": "timeDomain must be a valid VkTimeDomainKHR value", + "page": "chapters/synchronization.html" + } + ] + }, + "vkCmdBeginRendering": { + "core": [ + { + "vuid": "VUID-vkCmdBeginRendering-dynamicRendering-06446", + "text": "The dynamicRendering feature must be enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-commandBuffer-06068", + "text": "If commandBuffer is a secondary command buffer, and the nestedCommandBuffer feature is not enabled, pRenderingInfo->flags must not include VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-09588", + "text": "If pRenderingInfo->pDepthAttachment is not NULL and pRenderingInfo->pDepthAttachment->imageView is not VK_NULL_HANDLE, pRenderingInfo->pDepthAttachment->imageView must be in the layout specified by pRenderingInfo->pDepthAttachment->imageLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-09589", + "text": "If pRenderingInfo->pDepthAttachment is not NULL, pRenderingInfo->pDepthAttachment->imageView is not VK_NULL_HANDLE, pRenderingInfo->pDepthAttachment->imageResolveMode is not VK_RESOLVE_MODE_NONE, and pRenderingInfo->pDepthAttachment->resolveImageView is not VK_NULL_HANDLE, pRenderingInfo->pDepthAttachment->resolveImageView must be in the layout specified by pRenderingInfo->pDepthAttachment->resolveImageLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-09590", + "text": "If pRenderingInfo->pStencilAttachment is not NULL and pRenderingInfo->pStencilAttachment->imageView is not VK_NULL_HANDLE, pRenderingInfo->pStencilAttachment->imageView must be in the layout specified by pRenderingInfo->pStencilAttachment->imageLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-09591", + "text": "If pRenderingInfo->pStencilAttachment is not NULL, pRenderingInfo->pStencilAttachment->imageView is not VK_NULL_HANDLE, pRenderingInfo->pStencilAttachment->imageResolveMode is not VK_RESOLVE_MODE_NONE, and pRenderingInfo->pStencilAttachment->resolveImageView is not VK_NULL_HANDLE, pRenderingInfo->pStencilAttachment->resolveImageView must be in the layout specified by pRenderingInfo->pStencilAttachment->resolveImageLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-09592", + "text": "For any element of pRenderingInfo->pColorAttachments, if imageView is not VK_NULL_HANDLE, that image view must be in the layout specified by imageLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-09593", + "text": "For any element of pRenderingInfo->pColorAttachments, if either imageResolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, or imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, and resolveImageView is not VK_NULL_HANDLE, resolveImageView must be in the layout specified by resolveImageLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-flags-10641", + "text": "If VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM is included in VkRenderPassTileShadingCreateInfoQCOM::flags, commandBuffer must not have been created with VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-flags-10642", + "text": "VkRenderPassTileShadingCreateInfoQCOM::flags must not include VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-pRenderingInfo-parameter", + "text": "pRenderingInfo must be a valid pointer to a valid VkRenderingInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRendering-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderingInfo": { + "core": [ + { + "vuid": "VUID-VkRenderingInfo-viewMask-06069", + "text": "If viewMask is 0, layerCount must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-multisampledRenderToSingleSampled-06857", + "text": "imageView members of pDepthAttachment, pStencilAttachment, and elements of pColorAttachments that are not VK_NULL_HANDLE must have been created with the same sampleCount , if none of the following are enabled:
\n\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-09429", + "text": "imageView members of elements of pColorAttachments that are not VK_NULL_HANDLE must have been created with the same sampleCount , if the multisampledRenderToSingleSampled feature is not enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-None-08994", + "text": "If VkDeviceGroupRenderPassBeginInfo::deviceRenderAreaCount is 0, renderArea.extent.width must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-None-08995", + "text": "If VkDeviceGroupRenderPassBeginInfo::deviceRenderAreaCount is 0, renderArea.extent.height must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06858", + "text": "If multisampled-render-to-single-sampled is enabled, then all attachments referenced by imageView members of pDepthAttachment, pStencilAttachment, and elements of pColorAttachments that are not VK_NULL_HANDLE must have a sample count that is either VK_SAMPLE_COUNT_1_BIT or equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06859", + "text": "If multisampled-render-to-single-sampled is enabled, then all attachments referenced by imageView members of pDepthAttachment, pStencilAttachment, and elements of pColorAttachments that are not VK_NULL_HANDLE and have a sample count of VK_SAMPLE_COUNT_1_BIT must have been created with VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT in their VkImageCreateInfo::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06077", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.offset.x must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06078", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.offset.y must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-07815", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, the sum of renderArea.extent.width and renderArea.offset.x must be less than or equal to maxFramebufferWidth", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-07816", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, the sum of renderArea.extent.height and renderArea.offset.y must be less than or equal to maxFramebufferHeight", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06079", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, the width of the imageView member of any element of pColorAttachments, pDepthAttachment, or pStencilAttachment that is not VK_NULL_HANDLE must be greater than or equal to renderArea.offset.x + renderArea.extent.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06080", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, the height of the imageView member of any element of pColorAttachments, pDepthAttachment, or pStencilAttachment that is not VK_NULL_HANDLE must be greater than or equal to renderArea.offset.y + renderArea.extent.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06083", + "text": "If the pNext chain contains VkDeviceGroupRenderPassBeginInfo, the width of the imageView member of any element of pColorAttachments, pDepthAttachment, or pStencilAttachment that is not VK_NULL_HANDLE must be greater than or equal to the sum of the offset.x and extent.width members of each element of pDeviceRenderAreas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06084", + "text": "If the pNext chain contains VkDeviceGroupRenderPassBeginInfo, the height of the imageView member of any element of pColorAttachments, pDepthAttachment, or pStencilAttachment that is not VK_NULL_HANDLE must be greater than or equal to the sum of the offset.y and extent.height members of each element of pDeviceRenderAreas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06085", + "text": "If neither pDepthAttachment or pStencilAttachment are NULL and the imageView member of either structure is not VK_NULL_HANDLE, the imageView member of each structure must be the same", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06086", + "text": "If neither pDepthAttachment or pStencilAttachment are NULL, and the resolveMode member of each is not VK_RESOLVE_MODE_NONE, the resolveImageView member of each structure must be the same", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06087", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, that imageView must have been created with VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-09476", + "text": "If colorAttachmentCount is not 0 and there is an element of pColorAttachments with either its resolveMode member set to VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, or its imageView member not VK_NULL_HANDLE, and its resolveMode member not set to VK_RESOLVE_MODE_NONE, the resolveImageView member of that element of pColorAttachments must have been created with VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06547", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->imageView is not VK_NULL_HANDLE, pDepthAttachment->imageView must have been created with a format that includes a depth component", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06088", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->imageView is not VK_NULL_HANDLE, pDepthAttachment->imageView must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-09477", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pDepthAttachment->resolveImageView must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-06548", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->imageView is not VK_NULL_HANDLE, pStencilAttachment->imageView must have been created with a format that includes a stencil aspect", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-06089", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->imageView is not VK_NULL_HANDLE, pStencilAttachment->imageView must have been created with a stencil usage including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-09478", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pStencilAttachment->resolveImageView must have been created with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06090", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, the layout member of that element of pColorAttachments must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06091", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, if the resolveMode member of that element of pColorAttachments is not VK_RESOLVE_MODE_NONE, its resolveImageLayout member must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06092", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->imageView is not VK_NULL_HANDLE, pDepthAttachment->layout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06093", + "text": "If pDepthAttachment is not NULL, pDepthAttachment->imageView is not VK_NULL_HANDLE, and pDepthAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pDepthAttachment->resolveImageLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-06094", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->imageView is not VK_NULL_HANDLE, pStencilAttachment->layout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-06095", + "text": "If pStencilAttachment is not NULL, pStencilAttachment->imageView is not VK_NULL_HANDLE, and pStencilAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pStencilAttachment->resolveImageLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06096", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, the layout member of that element of pColorAttachments must not be VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06097", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, if the resolveMode member of that element of pColorAttachments is not VK_RESOLVE_MODE_NONE, its resolveImageLayout member must not be VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06098", + "text": "If pDepthAttachment is not NULL, pDepthAttachment->imageView is not VK_NULL_HANDLE, and pDepthAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pDepthAttachment->resolveImageLayout must not be VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-06099", + "text": "If pStencilAttachment is not NULL, pStencilAttachment->imageView is not VK_NULL_HANDLE, and pStencilAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pStencilAttachment->resolveImageLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06100", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, the layout member of that element of pColorAttachments must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06101", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, if the resolveMode member of that element of pColorAttachments is not VK_RESOLVE_MODE_NONE, its resolveImageLayout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-07732", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->imageView is not VK_NULL_HANDLE, pDepthAttachment->layout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-07733", + "text": "If pDepthAttachment is not NULL, pDepthAttachment->imageView is not VK_NULL_HANDLE, and pDepthAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pDepthAttachment->resolveImageLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-07734", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->imageView is not VK_NULL_HANDLE, pStencilAttachment->layout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-07735", + "text": "If pStencilAttachment is not NULL, pStencilAttachment->imageView is not VK_NULL_HANDLE, and pStencilAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pStencilAttachment->resolveImageLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06102", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->imageView is not VK_NULL_HANDLE, pDepthAttachment->resolveMode must be one of the bits set in VkPhysicalDeviceDepthStencilResolveProperties::supportedDepthResolveModes", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-06103", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->imageView is not VK_NULL_HANDLE, pStencilAttachment->resolveMode must be one of the bits set in VkPhysicalDeviceDepthStencilResolveProperties::supportedStencilResolveModes", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06104", + "text": "If pDepthAttachment or pStencilAttachment are both not NULL, pDepthAttachment->imageView and pStencilAttachment->imageView are both not VK_NULL_HANDLE, and VkPhysicalDeviceDepthStencilResolveProperties::independentResolveNone is VK_FALSE, the resolveMode of both structures must be the same value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-06105", + "text": "If pDepthAttachment or pStencilAttachment are both not NULL, pDepthAttachment->imageView and pStencilAttachment->imageView are both not VK_NULL_HANDLE, VkPhysicalDeviceDepthStencilResolveProperties::independentResolve is VK_FALSE, and the resolveMode of neither structure is VK_RESOLVE_MODE_NONE, the resolveMode of both structures must be the same value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-06106", + "text": "colorAttachmentCount must be less than or equal to VkPhysicalDeviceLimits::maxColorAttachments", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06107", + "text": "If the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, and the fragmentDensityMapNonSubsampledImages feature is not enabled, valid imageView and resolveImageView members of pDepthAttachment, pStencilAttachment, and each element of pColorAttachments must be a VkImageView created with VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06108", + "text": "If the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, and viewMask is not 0, imageView must have a layerCount greater than or equal to the index of the most significant bit in viewMask", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06109", + "text": "If the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, and viewMask is 0, imageView must have a layerCount equal to 1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06112", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0 and the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a width greater than or equal to \\(\\left\\lceil{\\frac{renderArea_{x}+renderArea_{width}}{maxFragmentDensityTexelSize_{width}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06114", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0 and the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a height greater than or equal to \\(\\left\\lceil{\\frac{renderArea_{y}+renderArea_{height}}{maxFragmentDensityTexelSize_{height}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06113", + "text": "If the pNext chain contains a VkDeviceGroupRenderPassBeginInfo structure, its deviceRenderAreaCount member is not 0, and the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a width greater than or equal to \\(\\left\\lceil{\\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{maxFragmentDensityTexelSize_{width}}}\\right\\rceil\\) for each element of pDeviceRenderAreas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06115", + "text": "If the pNext chain contains a VkDeviceGroupRenderPassBeginInfo structure, its deviceRenderAreaCount member is not 0, and the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a height greater than or equal to \\(\\left\\lceil{\\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{maxFragmentDensityTexelSize_{height}}}\\right\\rceil\\) for each element of pDeviceRenderAreas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06116", + "text": "If the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, it must not be equal to the imageView or resolveImageView member of pDepthAttachment, pStencilAttachment, or any element of pColorAttachments", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-flags-10826", + "text": "If flags contains VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then layerCount must be less than or equal to maxFragmentDensityMapLayers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-fragmentDensityMapLayered-10827", + "text": "If the fragmentDensityMapLayered feature is not enabled, flags must not contain VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06119", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, and the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a width greater than or equal to \\(\\left\\lceil{\\frac{renderArea_{x}+renderArea_{width}}{shadingRateAttachmentTexelSize_{width}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06121", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0 and the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a height greater than or equal to \\(\\left\\lceil{\\frac{renderArea_{y}+renderArea_{height}}{shadingRateAttachmentTexelSize_{height}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06120", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, the pNext chain contains a VkDeviceGroupRenderPassBeginInfo structure, its deviceRenderAreaCount member is not 0, and the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a width greater than or equal to \\(\\left\\lceil{\\frac{pDeviceRenderAreas_{x}+pDeviceRenderAreas_{width}}{shadingRateAttachmentTexelSize_{width}}}\\right\\rceil\\) for each element of pDeviceRenderAreas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-06122", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, the pNext chain contains a VkDeviceGroupRenderPassBeginInfo structure, its deviceRenderAreaCount member is not 0, and the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, imageView must have a height greater than or equal to \\(\\left\\lceil{\\frac{pDeviceRenderAreas_{y}+pDeviceRenderAreas_{height}}{shadingRateAttachmentTexelSize_{height}}}\\right\\rceil\\) for each element of pDeviceRenderAreas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-layerCount-07817", + "text": "layerCount must be less than or equal to maxFramebufferLayers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06123", + "text": "If the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, and viewMask is 0, imageView must have a layerCount that is either equal to 1 or greater than or equal to layerCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06124", + "text": "If the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, and viewMask is not 0, imageView must have a layerCount that either equal to 1 or greater than or equal to the index of the most significant bit in viewMask", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06125", + "text": "If the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, it must not be equal to the imageView or resolveImageView member of pDepthAttachment, pStencilAttachment, or any element of pColorAttachments", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-06126", + "text": "If the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, it must not be equal to the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-multiview-06127", + "text": "If the multiview feature is not enabled, viewMask must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-viewMask-06128", + "text": "The index of the most significant bit in viewMask must be less than maxMultiviewViewCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-perViewRenderAreaCount-07857", + "text": "If the perViewRenderAreaCount member of a VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure included in the pNext chain is not 0, then the multiviewPerViewRenderAreas feature must be enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-perViewRenderAreaCount-07858", + "text": "If the perViewRenderAreaCount member of a VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure included in the pNext chain is not 0, then renderArea must specify a render area that includes the union of all per view render areas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-None-09044", + "text": "Valid attachments specified by this structure must not be bound to memory locations that are bound to any other valid attachments specified by this structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-flags-10012", + "text": "If flags includes VK_RENDERING_CONTENTS_INLINE_BIT_KHR then at least one of the following features must be enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-09318", + "text": "pDepthAttachment->resolveMode must not be VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-09319", + "text": "pStencilAttachment->resolveMode must not be VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-09320", + "text": "If colorAttachmentCount is not 1, the resolveMode member of any element of pColorAttachments must not be VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-resolveMode-09321", + "text": "If the resolveMode of any element of pColorAttachments is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView must be VK_NULL_HANDLE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-resolveMode-09322", + "text": "If the resolveMode of any element of pColorAttachments is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView must be VK_NULL_HANDLE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-09535", + "text": "If the pNext chain contains a VkRenderPassStripeBeginInfoARM structure, the union of stripe areas defined by the elements of VkRenderPassStripeBeginInfoARM::pStripeInfos must cover the renderArea", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-09479", + "text": "If colorAttachmentCount is not 0 and the imageView member of an element of pColorAttachments is not VK_NULL_HANDLE, that imageView must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-colorAttachmentCount-09480", + "text": "If colorAttachmentCount is not 0, and there is an element of pColorAttachments with either its resolveMode member set to VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, or its imageView member not set to VK_NULL_HANDLE and its resolveMode member not set to VK_RESOLVE_MODE_NONE, the resolveImageView member of that element of pColorAttachments must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-09481", + "text": "If pDepthAttachment is not NULL and pDepthAttachment->imageView is not VK_NULL_HANDLE, pDepthAttachment->imageView must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-09482", + "text": "If pDepthAttachment is not NULL, pDepthAttachment->imageView is not VK_NULL_HANDLE, and pDepthAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pDepthAttachment->resolveImageView must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-09483", + "text": "If pStencilAttachment is not NULL and pStencilAttachment->imageView is not VK_NULL_HANDLE, pStencilAttachment->imageView must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-09484", + "text": "If pStencilAttachment is not NULL, pStencilAttachment->imageView is not VK_NULL_HANDLE, and pStencilAttachment->resolveMode is not VK_RESOLVE_MODE_NONE, pStencilAttachment->resolveImageView must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-09485", + "text": "If the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure included in the pNext chain is not VK_NULL_HANDLE, it must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-09486", + "text": "If the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, it must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-imageView-10643", + "text": "If the imageView member of a VkRenderingFragmentDensityMapAttachmentInfoEXT structure included in the pNext chain is not VK_NULL_HANDLE, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-resolveMode-10644", + "text": "If the resolveMode of any element of pColorAttachments is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceGroupRenderPassBeginInfo, VkMultisampledRenderToSingleSampledInfoEXT, VkMultiviewPerViewAttributesInfoNVX, VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM, VkRenderPassStripeBeginInfoARM, VkRenderPassTileShadingCreateInfoQCOM, VkRenderingFragmentDensityMapAttachmentInfoEXT, VkRenderingFragmentShadingRateAttachmentInfoKHR, or VkTileMemorySizeInfoQCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-flags-parameter", + "text": "flags must be a valid combination of VkRenderingFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pColorAttachments-parameter", + "text": "If colorAttachmentCount is not 0, pColorAttachments must be a valid pointer to an array of colorAttachmentCount valid VkRenderingAttachmentInfo structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pDepthAttachment-parameter", + "text": "If pDepthAttachment is not NULL, pDepthAttachment must be a valid pointer to a valid VkRenderingAttachmentInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingInfo-pStencilAttachment-parameter", + "text": "If pStencilAttachment is not NULL, pStencilAttachment must be a valid pointer to a valid VkRenderingAttachmentInfo structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderingAttachmentInfo": { + "core": [ + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06129", + "text": "If imageView is not VK_NULL_HANDLE and has a non-integer color format, resolveMode must be VK_RESOLVE_MODE_NONE or VK_RESOLVE_MODE_AVERAGE_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06130", + "text": "If imageView is not VK_NULL_HANDLE and has an integer color format, resolveMode must be VK_RESOLVE_MODE_NONE or VK_RESOLVE_MODE_SAMPLE_ZERO_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06861", + "text": "imageView must not have a sample count of VK_SAMPLE_COUNT_1_BIT if all of the following hold:
\n\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06862", + "text": "resolveImageView must not be VK_NULL_HANDLE if all of the following hold:
\n\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06863", + "text": "If imageView is not VK_NULL_HANDLE, resolveMode is not VK_RESOLVE_MODE_NONE, the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with the multisampledRenderToSingleSampledEnable field equal to VK_TRUE, and imageView has a sample count of VK_SAMPLE_COUNT_1_BIT, resolveImageView must be VK_NULL_HANDLE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06864", + "text": "If imageView is not VK_NULL_HANDLE, resolveImageView is not VK_NULL_HANDLE, and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageView must have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06865", + "text": "If imageView is not VK_NULL_HANDLE, resolveImageView is not VK_NULL_HANDLE, and resolveMode is not VK_RESOLVE_MODE_NONE, imageView and resolveImageView must have the same VkFormat", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06135", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must not be VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06136", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06137", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06138", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must not be VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06139", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06140", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must not be VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06141", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06142", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06143", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must not be VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06144", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-10780", + "text": "If feedback loop is enabled for the attachment identified by imageView, then imageView must have been created with a usage value including VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT, either VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and either VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or VK_IMAGE_USAGE_SAMPLED_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06145", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must not be VK_IMAGE_LAYOUT_PRESENT_SRC_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-06146", + "text": "If imageView is not VK_NULL_HANDLE and resolveMode is not VK_RESOLVE_MODE_NONE, resolveImageLayout must not be VK_IMAGE_LAYOUT_PRESENT_SRC_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-externalFormatResolve-09323", + "text": "If the externalFormatResolve feature is not enabled, resolveMode must not be VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-09324", + "text": "If resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, resolveImageView must be a valid image view", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-nullColorAttachmentWithExternalFormatResolve-09325", + "text": "If the nullColorAttachmentWithExternalFormatResolve property is VK_TRUE and resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, resolveImageView must have been created with an image with a samples value of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-09326", + "text": "If resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, resolveImageView must have been created with an external format specified by VkExternalFormatANDROID", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-09327", + "text": "If resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, resolveImageView must have been created with a subresourceRange.layerCount of 1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-09328", + "text": "If resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID and nullColorAttachmentWithExternalFormatResolve is VK_TRUE, imageView must be VK_NULL_HANDLE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-09329", + "text": "If resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID and nullColorAttachmentWithExternalFormatResolve is VK_FALSE, imageView must be a valid VkImageView", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-09330", + "text": "If resolveMode is VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID and nullColorAttachmentWithExternalFormatResolve is VK_FALSE, imageView must have a format equal to the value of VkAndroidHardwareBufferFormatResolvePropertiesANDROID::colorAttachmentFormat as returned by a call to vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware buffer that was used to create resolveImageView", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveImageView-10728", + "text": "If resolveImageView is not VK_NULL_HANDLE, the underlying resource must not be bound to a VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property.", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkAttachmentFeedbackLoopInfoEXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageView-parameter", + "text": "If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveMode-parameter", + "text": "If resolveMode is not 0, resolveMode must be a valid VkResolveModeFlagBits value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveImageView-parameter", + "text": "If resolveImageView is not VK_NULL_HANDLE, resolveImageView must be a valid VkImageView handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-resolveImageLayout-parameter", + "text": "resolveImageLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-loadOp-parameter", + "text": "loadOp must be a valid VkAttachmentLoadOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-storeOp-parameter", + "text": "storeOp must be a valid VkAttachmentStoreOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-clearValue-parameter", + "text": "clearValue must be a valid VkClearValue union", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentInfo-commonparent", + "text": "Both of imageView, and resolveImageView that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentFeedbackLoopInfoEXT": { + "core": [ + { + "vuid": "VUID-VkAttachmentFeedbackLoopInfoEXT-unifiedImageLayouts-10782", + "text": "If the unifiedImageLayouts feature is not enabled, feedbackLoopEnable must be VK_FALSE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentFeedbackLoopInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderingFragmentShadingRateAttachmentInfoKHR": { + "core": [ + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06147", + "text": "If imageView is not VK_NULL_HANDLE, layout must be VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06148", + "text": "If imageView is not VK_NULL_HANDLE, it must have been created with VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06149", + "text": "If imageView is not VK_NULL_HANDLE, shadingRateAttachmentTexelSize.width must be a power of two value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06150", + "text": "If imageView is not VK_NULL_HANDLE, shadingRateAttachmentTexelSize.width must be less than or equal to maxFragmentShadingRateAttachmentTexelSize.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06151", + "text": "If imageView is not VK_NULL_HANDLE, shadingRateAttachmentTexelSize.width must be greater than or equal to minFragmentShadingRateAttachmentTexelSize.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06152", + "text": "If imageView is not VK_NULL_HANDLE, shadingRateAttachmentTexelSize.height must be a power of two value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06153", + "text": "If imageView is not VK_NULL_HANDLE, shadingRateAttachmentTexelSize.height must be less than or equal to maxFragmentShadingRateAttachmentTexelSize.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06154", + "text": "If imageView is not VK_NULL_HANDLE, shadingRateAttachmentTexelSize.height must be greater than or equal to minFragmentShadingRateAttachmentTexelSize.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06155", + "text": "If imageView is not VK_NULL_HANDLE, the quotient of shadingRateAttachmentTexelSize.width and shadingRateAttachmentTexelSize.height must be less than or equal to maxFragmentShadingRateAttachmentTexelSizeAspectRatio", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-06156", + "text": "If imageView is not VK_NULL_HANDLE, the quotient of shadingRateAttachmentTexelSize.height and shadingRateAttachmentTexelSize.width must be less than or equal to maxFragmentShadingRateAttachmentTexelSizeAspectRatio", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageView-parameter", + "text": "If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentShadingRateAttachmentInfoKHR-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderingFragmentDensityMapAttachmentInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06157", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must be VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06158", + "text": "If imageView is not VK_NULL_HANDLE, it must have been created with VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-06159", + "text": "If imageView is not VK_NULL_HANDLE, it must not have been created with VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-apiVersion-07908", + "text": "If the multiview feature is not enabled, VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and imageView is not VK_NULL_HANDLE, it must have a layerCount equal to 1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageView-parameter", + "text": "imageView must be a valid VkImageView handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingFragmentDensityMapAttachmentInfoEXT-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "vkGetRenderingAreaGranularity": { + "core": [ + { + "vuid": "VUID-vkGetRenderingAreaGranularity-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetRenderingAreaGranularity-pRenderingAreaInfo-parameter", + "text": "pRenderingAreaInfo must be a valid pointer to a valid VkRenderingAreaInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetRenderingAreaGranularity-pGranularity-parameter", + "text": "pGranularity must be a valid pointer to a VkExtent2D structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderingAreaInfo": { + "core": [ + { + "vuid": "VUID-VkRenderingAreaInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_AREA_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingAreaInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassStripeBeginInfoARM": { + "core": [ + { + "vuid": "VUID-VkRenderPassStripeBeginInfoARM-stripeInfoCount-09450", + "text": "stripeInfoCount must be less than or equal to VkPhysicalDeviceRenderPassStripedPropertiesARM::maxRenderPassStripes", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeBeginInfoARM-stripeArea-09451", + "text": "The stripeArea defined by each element of pStripeInfos must not overlap the stripeArea of any other element", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeBeginInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeBeginInfoARM-pStripeInfos-parameter", + "text": "pStripeInfos must be a valid pointer to an array of stripeInfoCount valid VkRenderPassStripeInfoARM structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeBeginInfoARM-stripeInfoCount-arraylength", + "text": "stripeInfoCount must be greater than 0", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassStripeInfoARM": { + "core": [ + { + "vuid": "VUID-VkRenderPassStripeInfoARM-stripeArea-09452", + "text": "stripeArea.offset.x must be a multiple of VkPhysicalDeviceRenderPassStripedPropertiesARM::renderPassStripeGranularity.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeInfoARM-stripeArea-09453", + "text": "stripeArea.extent.width must be a multiple of VkPhysicalDeviceRenderPassStripedPropertiesARM::renderPassStripeGranularity.width, or the sum of stripeArea.offset.x and stripeArea.extent.width must be equal to the renderArea.extent.width of the render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeInfoARM-stripeArea-09454", + "text": "stripeArea.offset.y must be a multiple of VkPhysicalDeviceRenderPassStripedPropertiesARM::renderPassStripeGranularity.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeInfoARM-stripeArea-09455", + "text": "stripeArea.extent.height must be a multiple of VkPhysicalDeviceRenderPassStripedPropertiesARM::renderPassStripeGranularity.height, or the sum of stripeArea.offset.y and stripeArea.extent.height must be equal to the renderArea.extent.height of the render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassStripeInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdEndRendering": { + "core": [ + { + "vuid": "VUID-vkCmdEndRendering-None-06161", + "text": "The current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-commandBuffer-06162", + "text": "The current render pass instance must have been begun in commandBuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-None-06781", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-None-06999", + "text": "If vkCmdBeginQuery* was called within the render pass, the corresponding vkCmdEndQuery* must have been called subsequently within the same subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-None-10645", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdEndRendering2EXT": { + "core": [ + { + "vuid": "VUID-vkCmdEndRendering2EXT-None-10610", + "text": "The current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-commandBuffer-10611", + "text": "The current render pass instance must have been begun in commandBuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-None-10612", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-None-10613", + "text": "If vkCmdBeginQuery* was called within the render pass, the corresponding vkCmdEndQuery* must have been called subsequently within the same subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-pRenderingEndInfo-parameter", + "text": "If pRenderingEndInfo is not NULL, pRenderingEndInfo must be a valid pointer to a valid VkRenderingEndInfoEXT structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRendering2EXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderingEndInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderingEndInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingEndInfoEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkRenderPassFragmentDensityMapOffsetEndInfoEXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderingEndInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + } + ] + }, + "VkTilePropertiesQCOM": { + "core": [ + { + "vuid": "VUID-VkTilePropertiesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkTilePropertiesQCOM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + } + ] + }, + "vkGetDynamicRenderingTilePropertiesQCOM": { + "core": [ + { + "vuid": "VUID-vkGetDynamicRenderingTilePropertiesQCOM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetDynamicRenderingTilePropertiesQCOM-pRenderingInfo-parameter", + "text": "pRenderingInfo must be a valid pointer to a valid VkRenderingInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetDynamicRenderingTilePropertiesQCOM-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkTilePropertiesQCOM structure", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCreateRenderPass": { + "core": [ + { + "vuid": "VUID-vkCreateRenderPass-device-10000", + "text": "device must support at least one queue family with the VK_QUEUE_GRAPHICS_BIT capability", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass-flags-10646", + "text": "VkRenderPassTileShadingCreateInfoQCOM::flags must not include VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkRenderPassCreateInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass-pRenderPass-parameter", + "text": "pRenderPass must be a valid pointer to a VkRenderPass handle", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassCreateInfo": { + "core": [ + { + "vuid": "VUID-VkRenderPassCreateInfo-attachment-00834", + "text": "If the attachment member of any element of pInputAttachments, pColorAttachments, pResolveAttachments or pDepthStencilAttachment, or any element of pPreserveAttachments in any element of pSubpasses is not VK_ATTACHMENT_UNUSED, then it must be less than attachmentCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-fragmentDensityMapAttachment-06471", + "text": "If the pNext chain includes a VkRenderPassFragmentDensityMapCreateInfoEXT structure and the fragmentDensityMapAttachment member is not VK_ATTACHMENT_UNUSED, then attachment must be less than attachmentCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-fragmentDensityMapLayered-10828", + "text": "If the fragmentDensityMapLayered feature is not enabled, flags must not contain VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-00836", + "text": "For any member of pAttachments with a loadOp equal to VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment must not specify a layout equal to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-02511", + "text": "For any member of pAttachments with a stencilLoadOp equal to VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment must not specify a layout equal to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-01566", + "text": "For any member of pAttachments with a loadOp equal to VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment must not specify a layout equal to VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-01567", + "text": "For any member of pAttachments with a stencilLoadOp equal to VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment must not specify a layout equal to VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-01926", + "text": "If the pNext chain includes a VkRenderPassInputAttachmentAspectCreateInfo structure, the subpass member of each element of its pAspectReferences member must be less than subpassCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-01927", + "text": "If the pNext chain includes a VkRenderPassInputAttachmentAspectCreateInfo structure, the inputAttachmentIndex member of each element of its pAspectReferences member must be less than the value of inputAttachmentCount in the element of pSubpasses identified by its subpass member", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-01963", + "text": "If the pNext chain includes a VkRenderPassInputAttachmentAspectCreateInfo structure, for any element of the pInputAttachments member of any element of pSubpasses where the attachment member is not VK_ATTACHMENT_UNUSED, the aspectMask member of the corresponding element of VkRenderPassInputAttachmentAspectCreateInfo::pAspectReferences must only include aspects that are present in images of the format specified by the element of pAttachments at attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-01928", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, and its subpassCount member is not zero, that member must be equal to the value of subpassCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-01929", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, if its dependencyCount member is not zero, it must be equal to dependencyCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-01930", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, for each non-zero element of pViewOffsets, the srcSubpass and dstSubpass members of pDependencies at the same index must not be equal", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-02512", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, for any element of pDependencies with a dependencyFlags member that does not include VK_DEPENDENCY_VIEW_LOCAL_BIT, the corresponding element of the pViewOffsets member of that VkRenderPassMultiviewCreateInfo instance must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-02513", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, elements of its pViewMasks member must either all be 0, or all not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-02514", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, and each element of its pViewMasks member is 0, the dependencyFlags member of each element of pDependencies must not include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-02515", + "text": "If the pNext chain includes a VkRenderPassMultiviewCreateInfo structure, and each element of its pViewMasks member is 0, its correlationMaskCount member must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-00837", + "text": "For any element of pDependencies, if the srcSubpass is not VK_SUBPASS_EXTERNAL, all stage flags included in the srcStageMask member of that dependency must be VK_PIPELINE_STAGE_ALL_COMMANDS_BIT or a pipeline stage supported by the pipeline identified by the pipelineBindPoint member of the source subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-00838", + "text": "For any element of pDependencies, if the dstSubpass is not VK_SUBPASS_EXTERNAL, all stage flags included in the dstStageMask member of that dependency must be VK_PIPELINE_STAGE_ALL_COMMANDS_BIT or a pipeline stage supported by the pipeline identified by the pipelineBindPoint member of the destination subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-06866", + "text": "For any element of pDependencies, if its srcSubpass is not VK_SUBPASS_EXTERNAL, it must be less than subpassCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-06867", + "text": "For any element of pDependencies, if its dstSubpass is not VK_SUBPASS_EXTERNAL, it must be less than subpassCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pResolveAttachments-10647", + "text": "If any element of pResolveAttachments of any element of pSubpasses references an attachment description with a format of VK_FORMAT_UNDEFINED, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-fragmentDensityMapAttachment-10648", + "text": "If VkRenderPassFragmentDensityMapCreateInfoEXT::fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkRenderPassFragmentDensityMapCreateInfoEXT, VkRenderPassInputAttachmentAspectCreateInfo, VkRenderPassMultiviewCreateInfo, VkRenderPassTileShadingCreateInfoQCOM, or VkTileMemorySizeInfoQCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkRenderPassCreateFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pAttachments-parameter", + "text": "If attachmentCount is not 0, pAttachments must be a valid pointer to an array of attachmentCount valid VkAttachmentDescription structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pSubpasses-parameter", + "text": "pSubpasses must be a valid pointer to an array of subpassCount valid VkSubpassDescription structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-pDependencies-parameter", + "text": "If dependencyCount is not 0, pDependencies must be a valid pointer to an array of dependencyCount valid VkSubpassDependency structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo-subpassCount-arraylength", + "text": "subpassCount must be greater than 0", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassMultiviewCreateInfo": { + "core": [ + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-00841", + "text": "Each view index must not be set in more than one element of pCorrelationMasks", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-multiview-06555", + "text": "If the multiview feature is not enabled, each element of pViewMasks must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pViewMasks-06697", + "text": "The index of the most significant bit in each element of pViewMasks must be less than maxMultiviewViewCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pViewMasks-parameter", + "text": "If subpassCount is not 0, pViewMasks must be a valid pointer to an array of subpassCount uint32_t values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pViewOffsets-parameter", + "text": "If dependencyCount is not 0, pViewOffsets must be a valid pointer to an array of dependencyCount int32_t values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-parameter", + "text": "If correlationMaskCount is not 0, pCorrelationMasks must be a valid pointer to an array of correlationMaskCount uint32_t values", + "page": "chapters/renderpass.html" + } + ] + }, + "VkMultiviewPerViewAttributesInfoNVX": { + "core": [ + { + "vuid": "VUID-VkMultiviewPerViewAttributesInfoNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassFragmentDensityMapCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02548", + "text": "If fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED, fragmentDensityMapAttachment must not be an element of VkSubpassDescription::pInputAttachments, VkSubpassDescription::pColorAttachments, VkSubpassDescription::pResolveAttachments, VkSubpassDescription::pDepthStencilAttachment, or VkSubpassDescription::pPreserveAttachments for any subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02549", + "text": "If fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED, layout must be equal to VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02550", + "text": "If fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED, fragmentDensityMapAttachment must reference an attachment with a loadOp equal to VK_ATTACHMENT_LOAD_OP_LOAD or VK_ATTACHMENT_LOAD_OP_DONT_CARE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02551", + "text": "If fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED, fragmentDensityMapAttachment must reference an attachment with a storeOp equal to VK_ATTACHMENT_STORE_OP_DONT_CARE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-parameter", + "text": "fragmentDensityMapAttachment must be a valid VkAttachmentReference structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentDescription": { + "core": [ + { + "vuid": "VUID-VkAttachmentDescription-format-06699", + "text": "If format includes a color or depth component and loadOp is VK_ATTACHMENT_LOAD_OP_LOAD, then initialLayout must not be VK_IMAGE_LAYOUT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-finalLayout-00843", + "text": "finalLayout must not be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03280", + "text": "If format is a color format, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03281", + "text": "If format is a depth/stencil format, initialLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03282", + "text": "If format is a color format, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03283", + "text": "If format is a depth/stencil format, finalLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06487", + "text": "If format is a color format, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06488", + "text": "If format is a color format, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-separateDepthStencilLayouts-03284", + "text": "If the separateDepthStencilLayouts feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-separateDepthStencilLayouts-03285", + "text": "If the separateDepthStencilLayouts feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03286", + "text": "If format is a color format, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03287", + "text": "If format is a color format, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06906", + "text": "If format is a depth/stencil format which includes both depth and stencil components, initialLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06907", + "text": "If format is a depth/stencil format which includes both depth and stencil components, finalLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03290", + "text": "If format is a depth/stencil format which includes only the depth component, initialLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03291", + "text": "If format is a depth/stencil format which includes only the depth component, finalLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-synchronization2-06908", + "text": "If the synchronization2 feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-synchronization2-06909", + "text": "If the synchronization2 feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-attachmentFeedbackLoopLayout-07309", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-attachmentFeedbackLoopLayout-07310", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-samples-08745", + "text": "samples must be a valid VkSampleCountFlagBits value that is set in imageCreateSampleCounts (as defined in Image Creation Limits) for the given format", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-dynamicRenderingLocalRead-09544", + "text": "If the dynamicRenderingLocalRead feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-dynamicRenderingLocalRead-09545", + "text": "If the dynamicRenderingLocalRead feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06698", + "text": "format must not be VK_FORMAT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06700", + "text": "If format includes a stencil component and stencilLoadOp is VK_ATTACHMENT_LOAD_OP_LOAD, then initialLayout must not be VK_IMAGE_LAYOUT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03292", + "text": "If format is a depth/stencil format which includes only the stencil component, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-03293", + "text": "If format is a depth/stencil format which includes only the stencil component, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06242", + "text": "If format is a depth/stencil format which includes both depth and stencil components, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-06243", + "text": "If format is a depth/stencil format which includes both depth and stencil components, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-flags-parameter", + "text": "flags must be a valid combination of VkAttachmentDescriptionFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-loadOp-parameter", + "text": "loadOp must be a valid VkAttachmentLoadOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-storeOp-parameter", + "text": "storeOp must be a valid VkAttachmentStoreOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-stencilLoadOp-parameter", + "text": "stencilLoadOp must be a valid VkAttachmentLoadOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-stencilStoreOp-parameter", + "text": "stencilStoreOp must be a valid VkAttachmentStoreOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-initialLayout-parameter", + "text": "initialLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription-finalLayout-parameter", + "text": "finalLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassInputAttachmentAspectCreateInfo": { + "core": [ + { + "vuid": "VUID-VkRenderPassInputAttachmentAspectCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassInputAttachmentAspectCreateInfo-pAspectReferences-parameter", + "text": "pAspectReferences must be a valid pointer to an array of aspectReferenceCount valid VkInputAttachmentAspectReference structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassInputAttachmentAspectCreateInfo-aspectReferenceCount-arraylength", + "text": "aspectReferenceCount must be greater than 0", + "page": "chapters/renderpass.html" + } + ] + }, + "VkInputAttachmentAspectReference": { + "core": [ + { + "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-01964", + "text": "aspectMask must not include VK_IMAGE_ASPECT_METADATA_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-02250", + "text": "aspectMask must not include VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT for any index i", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-parameter", + "text": "aspectMask must be a valid combination of VkImageAspectFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkInputAttachmentAspectReference-aspectMask-requiredbitmask", + "text": "aspectMask must not be 0", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassDescription": { + "core": [ + { + "vuid": "VUID-VkSubpassDescription-attachment-06912", + "text": "If the attachment member of an element of pInputAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06913", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06914", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06915", + "text": "If the attachment member of pDepthStencilAttachment is not VK_ATTACHMENT_UNUSED, ts layout member must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06916", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06917", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06918", + "text": "If the attachment member of an element of pInputAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06919", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06920", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06921", + "text": "If the attachment member of an element of pInputAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06922", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-06923", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-10755", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, the underlying resource must not be bound to a VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property.", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-flags-10683", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM, the render pass must have been created with a VkRenderPassTileShadingCreateInfoQCOM::tileApronSize greater than (0,0)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pipelineBindPoint-04952", + "text": "pipelineBindPoint must be VK_PIPELINE_BIND_POINT_GRAPHICS or VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-colorAttachmentCount-00845", + "text": "colorAttachmentCount must be less than or equal to VkPhysicalDeviceLimits::maxColorAttachments", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-loadOp-00846", + "text": "If the first use of an attachment in this render pass is as an input attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then loadOp must not be VK_ATTACHMENT_LOAD_OP_CLEAR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00847", + "text": "If pResolveAttachments is not NULL, for each resolve attachment that is not VK_ATTACHMENT_UNUSED, the corresponding color attachment must not be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00848", + "text": "If pResolveAttachments is not NULL, for each resolve attachment that is not VK_ATTACHMENT_UNUSED, the corresponding color attachment must not have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00849", + "text": "If pResolveAttachments is not NULL, each resolve attachment that is not VK_ATTACHMENT_UNUSED must have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pResolveAttachments-00850", + "text": "If pResolveAttachments is not NULL, each resolve attachment that is not VK_ATTACHMENT_UNUSED must have the same VkFormat as its corresponding color attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pColorAttachments-09430", + "text": "All attachments in pColorAttachments that are not VK_ATTACHMENT_UNUSED must have the same sample count", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pInputAttachments-02647", + "text": "All attachments in pInputAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features contain at least VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pColorAttachments-02648", + "text": "All attachments in pColorAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pResolveAttachments-02649", + "text": "All attachments in pResolveAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-02650", + "text": "If pDepthStencilAttachment is not NULL and the attachment is not VK_ATTACHMENT_UNUSED then it must have an image format whose potential format features contain VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-linearColorAttachment-06496", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, all attachments in pInputAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-linearColorAttachment-06497", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, all attachments in pColorAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-linearColorAttachment-06498", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, all attachments in pResolveAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-None-09431", + "text": "If either of the following is enabled:
\n\n
\n
\n

all attachments in pColorAttachments that are not\nVK_ATTACHMENT_UNUSED must have a sample count that is smaller than or\nequal to the sample count of pDepthStencilAttachment if it is not\nVK_ATTACHMENT_UNUSED

\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-01418", + "text": "If pDepthStencilAttachment is not VK_ATTACHMENT_UNUSED and any attachments in pColorAttachments are not VK_ATTACHMENT_UNUSED, they must have the same sample count , if none of the following are enabled:
\n\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-attachment-00853", + "text": "Each element of pPreserveAttachments must not be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pPreserveAttachments-00854", + "text": "Each element of pPreserveAttachments must not also be an element of any other member of the subpass description", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-layout-02519", + "text": "If any attachment is used by more than one VkAttachmentReference member, then each use must use the same layout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-flags-00856", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must also include VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-flags-03341", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if pResolveAttachments is not NULL, then each resolve attachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-flags-03343", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass must be the last subpass in a subpass dependency chain", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pInputAttachments-02868", + "text": "If the render pass is created with VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM each of the elements of pInputAttachments must be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-04438", + "text": "pDepthStencilAttachment and pColorAttachments must not contain references to the same attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-flags-parameter", + "text": "flags must be a valid combination of VkSubpassDescriptionFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pInputAttachments-parameter", + "text": "If inputAttachmentCount is not 0, pInputAttachments must be a valid pointer to an array of inputAttachmentCount valid VkAttachmentReference structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pColorAttachments-parameter", + "text": "If colorAttachmentCount is not 0, pColorAttachments must be a valid pointer to an array of colorAttachmentCount valid VkAttachmentReference structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pResolveAttachments-parameter", + "text": "If colorAttachmentCount is not 0, and pResolveAttachments is not NULL, pResolveAttachments must be a valid pointer to an array of colorAttachmentCount valid VkAttachmentReference structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pDepthStencilAttachment-parameter", + "text": "If pDepthStencilAttachment is not NULL, pDepthStencilAttachment must be a valid pointer to a valid VkAttachmentReference structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription-pPreserveAttachments-parameter", + "text": "If preserveAttachmentCount is not 0, pPreserveAttachments must be a valid pointer to an array of preserveAttachmentCount uint32_t values", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentReference": { + "core": [ + { + "vuid": "VUID-VkAttachmentReference-layout-03077", + "text": "If attachment is not VK_ATTACHMENT_UNUSED, layout must not be VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, VK_IMAGE_LAYOUT_PREINITIALIZED, or VK_IMAGE_LAYOUT_PRESENT_SRC_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference-separateDepthStencilLayouts-03313", + "text": "If the separateDepthStencilLayouts feature is not enabled, and attachment is not VK_ATTACHMENT_UNUSED, layout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference-synchronization2-06910", + "text": "If the synchronization2 feature is not enabled, layout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference-attachmentFeedbackLoopLayout-07311", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, layout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference-dynamicRenderingLocalRead-09546", + "text": "If the dynamicRenderingLocalRead feature is not enabled, layout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference-layout-parameter", + "text": "layout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassDependency": { + "core": [ + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04090", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04091", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04094", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04095", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-04096", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-03937", + "text": "If the synchronization2 feature is not enabled, srcStageMask must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04090", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04091", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04094", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04095", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-04096", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-03937", + "text": "If the synchronization2 feature is not enabled, dstStageMask must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcSubpass-00864", + "text": "srcSubpass must be less than or equal to dstSubpass, unless one of them is VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies and ensure a valid execution order", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcSubpass-00865", + "text": "srcSubpass and dstSubpass must not both be equal to VK_SUBPASS_EXTERNAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcSubpass-06809", + "text": "If srcSubpass is equal to dstSubpass and srcStageMask includes a framebuffer-space stage, dstStageMask must only contain framebuffer-space stages", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcAccessMask-00868", + "text": "Any access flag included in srcAccessMask must be supported by one of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstAccessMask-00869", + "text": "Any access flag included in dstAccessMask must be supported by one of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcSubpass-02243", + "text": "If srcSubpass equals dstSubpass, and srcStageMask and dstStageMask both include a framebuffer-space stage, then dependencyFlags must include VK_DEPENDENCY_BY_REGION_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dependencyFlags-02520", + "text": "If dependencyFlags includes VK_DEPENDENCY_VIEW_LOCAL_BIT, srcSubpass must not be equal to VK_SUBPASS_EXTERNAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dependencyFlags-02521", + "text": "If dependencyFlags includes VK_DEPENDENCY_VIEW_LOCAL_BIT, dstSubpass must not be equal to VK_SUBPASS_EXTERNAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcSubpass-00872", + "text": "If srcSubpass equals dstSubpass and that subpass has more than one bit set in the view mask, then dependencyFlags must include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dependencyFlags-10203", + "text": "dependencyFlags must not include VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency-dependencyFlags-parameter", + "text": "dependencyFlags must be a valid combination of VkDependencyFlagBits values", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdSetAttachmentFeedbackLoopEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-attachmentFeedbackLoopDynamicState-08862", + "text": "The attachmentFeedbackLoopDynamicState feature must be enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-aspectMask-08863", + "text": "aspectMask must only include VK_IMAGE_ASPECT_NONE, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_ASPECT_DEPTH_BIT, and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-attachmentFeedbackLoopLayout-08864", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, aspectMask must be VK_IMAGE_ASPECT_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-aspectMask-parameter", + "text": "aspectMask must be a valid combination of VkImageAspectFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCreateRenderPass2": { + "core": [ + { + "vuid": "VUID-vkCreateRenderPass2-device-10001", + "text": "device must support at least one queue family with the VK_QUEUE_GRAPHICS_BIT capability", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass2-flags-10649", + "text": "VkRenderPassTileShadingCreateInfoQCOM::flags must not include VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass2-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkRenderPassCreateInfo2 structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass2-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateRenderPass2-pRenderPass-parameter", + "text": "pRenderPass must be a valid pointer to a VkRenderPass handle", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassCreateInfo2": { + "core": [ + { + "vuid": "VUID-VkRenderPassCreateInfo2-None-03049", + "text": "If any two subpasses operate on attachments with overlapping ranges of the same VkDeviceMemory object, and at least one subpass writes to that area of VkDeviceMemory, a subpass dependency must be included (either directly or via some intermediate subpasses) between them", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-attachment-03050", + "text": "If the attachment member of any element of pInputAttachments, pColorAttachments, pResolveAttachments or pDepthStencilAttachment, or the attachment indexed by any element of pPreserveAttachments in any element of pSubpasses is bound to a range of a VkDeviceMemory object that overlaps with any other attachment in any subpass (including the same subpass), the VkAttachmentDescription2 structures describing them must include VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT in flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-attachment-03051", + "text": "If the attachment member of any element of pInputAttachments, pColorAttachments, pResolveAttachments or pDepthStencilAttachment, or any element of pPreserveAttachments in any element of pSubpasses is not VK_ATTACHMENT_UNUSED, then it must be less than attachmentCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-fragmentDensityMapAttachment-06472", + "text": "If the pNext chain includes a VkRenderPassFragmentDensityMapCreateInfoEXT structure and the fragmentDensityMapAttachment member is not VK_ATTACHMENT_UNUSED, then attachment must be less than attachmentCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-fragmentDensityMapLayered-10829", + "text": "If the fragmentDensityMapLayered feature is not enabled, flags must not contain VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pSubpasses-06473", + "text": "If the pSubpasses pNext chain includes a VkSubpassDescriptionDepthStencilResolve structure and the pDepthStencilResolveAttachment member is not NULL and does not have the value VK_ATTACHMENT_UNUSED, then attachment must be less than attachmentCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-02522", + "text": "For any member of pAttachments with a loadOp equal to VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment must not specify a layout equal to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-02523", + "text": "For any member of pAttachments with a stencilLoadOp equal to VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment must not specify a layout equal to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-03054", + "text": "For any element of pDependencies, if the srcSubpass is not VK_SUBPASS_EXTERNAL, all stage flags included in the srcStageMask member of that dependency must be VK_PIPELINE_STAGE_ALL_COMMANDS_BIT or a pipeline stage supported by the pipeline identified by the pipelineBindPoint member of the source subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-03055", + "text": "For any element of pDependencies, if the dstSubpass is not VK_SUBPASS_EXTERNAL, all stage flags included in the dstStageMask member of that dependency must be VK_PIPELINE_STAGE_ALL_COMMANDS_BIT or a pipeline stage supported by the pipeline identified by the pipelineBindPoint member of the destination subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-03056", + "text": "The set of bits included in any element of pCorrelatedViewMasks must not overlap with the set of bits included in any other element of pCorrelatedViewMasks", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-viewMask-03057", + "text": "If the VkSubpassDescription2::viewMask member of all elements of pSubpasses is 0, correlatedViewMaskCount must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-viewMask-03058", + "text": "The VkSubpassDescription2::viewMask member of all elements of pSubpasses must either all be 0, or all not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-viewMask-03059", + "text": "If the VkSubpassDescription2::viewMask member of all elements of pSubpasses is 0, the dependencyFlags member of any element of pDependencies must not include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-03060", + "text": "For any element of pDependencies where its srcSubpass member equals its dstSubpass member, if the viewMask member of the corresponding element of pSubpasses includes more than one bit, its dependencyFlags member must include VK_DEPENDENCY_VIEW_LOCAL_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-attachment-02525", + "text": "If the attachment member of any element of the pInputAttachments member of any element of pSubpasses is not VK_ATTACHMENT_UNUSED, the aspectMask member of that element of pInputAttachments must only include aspects that are present in images of the format specified by the element of pAttachments specified by attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-srcSubpass-02526", + "text": "The srcSubpass member of each element of pDependencies must be less than subpassCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-dstSubpass-02527", + "text": "The dstSubpass member of each element of pDependencies must be less than subpassCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-04585", + "text": "If any element of pAttachments is used as a fragment shading rate attachment in any subpass, it must not be used as any other attachment in the render pass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-09387", + "text": "If any element of pAttachments is used as a fragment shading rate attachment, the loadOp for that attachment must not be VK_ATTACHMENT_LOAD_OP_CLEAR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-flags-04521", + "text": "If flags includes VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM, an element of pSubpasses includes an instance of VkFragmentShadingRateAttachmentInfoKHR in its pNext chain, and the pFragmentShadingRateAttachment member of that structure is not equal to NULL, the attachment member of pFragmentShadingRateAttachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-04586", + "text": "If any element of pAttachments is used as a fragment shading rate attachment in any subpass, it must have an image format whose potential format features contain VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-attachment-06244", + "text": "If the attachment member of the pDepthStencilAttachment member of an element of pSubpasses is not VK_ATTACHMENT_UNUSED, the layout member of that same structure is either VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, and the pNext chain of that structure does not include a VkAttachmentReferenceStencilLayout structure, then the element of pAttachments with an index equal to attachment must not have a format that includes both depth and stencil components", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-attachment-06245", + "text": "If the attachment member of the pDepthStencilAttachment member of an element of pSubpasses is not VK_ATTACHMENT_UNUSED and the layout member of that same structure is either VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, then the element of pAttachments with an index equal to attachment must have a format that includes only a stencil component", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-attachment-06246", + "text": "If the attachment member of the pDepthStencilAttachment member of an element of pSubpasses is not VK_ATTACHMENT_UNUSED and the layout member of that same structure is either VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, then the element of pAttachments with an index equal to attachment must not have a format that includes only a stencil component", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pResolveAttachments-09331", + "text": "If any element of pResolveAttachments of any element of pSubpasses references an attachment description with a format of VK_FORMAT_UNDEFINED, VkRenderPassFragmentDensityMapCreateInfoEXT::fragmentDensityMapAttachment->attachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pResolveAttachments-10650", + "text": "If any element of pResolveAttachments of any element of pSubpasses references an attachment description with a format of VK_FORMAT_UNDEFINED, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-fragmentDensityMapAttachment-10651", + "text": "If VkRenderPassFragmentDensityMapCreateInfoEXT::fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in VkRenderPassTileShadingCreateInfoQCOM::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkRenderPassCreationControlEXT, VkRenderPassCreationFeedbackCreateInfoEXT, VkRenderPassFragmentDensityMapCreateInfoEXT, VkRenderPassTileShadingCreateInfoQCOM, or VkTileMemorySizeInfoQCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-flags-parameter", + "text": "flags must be a valid combination of VkRenderPassCreateFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pAttachments-parameter", + "text": "If attachmentCount is not 0, pAttachments must be a valid pointer to an array of attachmentCount valid VkAttachmentDescription2 structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pSubpasses-parameter", + "text": "pSubpasses must be a valid pointer to an array of subpassCount valid VkSubpassDescription2 structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pDependencies-parameter", + "text": "If dependencyCount is not 0, pDependencies must be a valid pointer to an array of dependencyCount valid VkSubpassDependency2 structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-parameter", + "text": "If correlatedViewMaskCount is not 0, pCorrelatedViewMasks must be a valid pointer to an array of correlatedViewMaskCount uint32_t values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreateInfo2-subpassCount-arraylength", + "text": "subpassCount must be greater than 0", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentDescription2": { + "core": [ + { + "vuid": "VUID-VkAttachmentDescription2-format-06699", + "text": "If format includes a color or depth component and loadOp is VK_ATTACHMENT_LOAD_OP_LOAD, then initialLayout must not be VK_IMAGE_LAYOUT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-finalLayout-00843", + "text": "finalLayout must not be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03280", + "text": "If format is a color format, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03281", + "text": "If format is a depth/stencil format, initialLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03282", + "text": "If format is a color format, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03283", + "text": "If format is a depth/stencil format, finalLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06487", + "text": "If format is a color format, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06488", + "text": "If format is a color format, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03284", + "text": "If the separateDepthStencilLayouts feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03285", + "text": "If the separateDepthStencilLayouts feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03286", + "text": "If format is a color format, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03287", + "text": "If format is a color format, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06906", + "text": "If format is a depth/stencil format which includes both depth and stencil components, initialLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06907", + "text": "If format is a depth/stencil format which includes both depth and stencil components, finalLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03290", + "text": "If format is a depth/stencil format which includes only the depth component, initialLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-03291", + "text": "If format is a depth/stencil format which includes only the depth component, finalLayout must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-synchronization2-06908", + "text": "If the synchronization2 feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-synchronization2-06909", + "text": "If the synchronization2 feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-attachmentFeedbackLoopLayout-07309", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-attachmentFeedbackLoopLayout-07310", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-samples-08745", + "text": "samples must be a valid VkSampleCountFlagBits value that is set in imageCreateSampleCounts (as defined in Image Creation Limits) for the given format", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-dynamicRenderingLocalRead-09544", + "text": "If the dynamicRenderingLocalRead feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-dynamicRenderingLocalRead-09545", + "text": "If the dynamicRenderingLocalRead feature is not enabled, finalLayout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-pNext-06704", + "text": "If the pNext chain does not include a VkAttachmentDescriptionStencilLayout structure, format includes a stencil component, and stencilLoadOp is VK_ATTACHMENT_LOAD_OP_LOAD, then initialLayout must not be VK_IMAGE_LAYOUT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-pNext-06705", + "text": "If the pNext chain includes a VkAttachmentDescriptionStencilLayout structure, format includes a stencil component, and stencilLoadOp is VK_ATTACHMENT_LOAD_OP_LOAD, then VkAttachmentDescriptionStencilLayout::stencilInitialLayout must not be VK_IMAGE_LAYOUT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06249", + "text": "If format is a depth/stencil format which includes both depth and stencil components, and initialLayout is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pNext chain must include a VkAttachmentDescriptionStencilLayout structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06250", + "text": "If format is a depth/stencil format which includes both depth and stencil components, and finalLayout is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pNext chain must include a VkAttachmentDescriptionStencilLayout structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06247", + "text": "If the pNext chain does not include a VkAttachmentDescriptionStencilLayout structure and format only includes a stencil component, initialLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-06248", + "text": "If the pNext chain does not include a VkAttachmentDescriptionStencilLayout structure and format only includes a stencil component, finalLayout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-09332", + "text": "If the externalFormatResolve feature is not enabled, format must not be VK_FORMAT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-09334", + "text": "If format is VK_FORMAT_UNDEFINED, there must be a VkExternalFormatANDROID structure in the pNext chain with a externalFormat that is not equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAttachmentDescriptionStencilLayout or VkExternalFormatANDROID", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-flags-parameter", + "text": "flags must be a valid combination of VkAttachmentDescriptionFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-loadOp-parameter", + "text": "loadOp must be a valid VkAttachmentLoadOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-storeOp-parameter", + "text": "storeOp must be a valid VkAttachmentStoreOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-stencilLoadOp-parameter", + "text": "stencilLoadOp must be a valid VkAttachmentLoadOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-stencilStoreOp-parameter", + "text": "stencilStoreOp must be a valid VkAttachmentStoreOp value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-initialLayout-parameter", + "text": "initialLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescription2-finalLayout-parameter", + "text": "finalLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentDescriptionStencilLayout": { + "core": [ + { + "vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-03308", + "text": "stencilInitialLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03309", + "text": "stencilFinalLayout must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03310", + "text": "stencilFinalLayout must not be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescriptionStencilLayout-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-parameter", + "text": "stencilInitialLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-parameter", + "text": "stencilFinalLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassDescription2": { + "core": [ + { + "vuid": "VUID-VkSubpassDescription2-attachment-06912", + "text": "If the attachment member of an element of pInputAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06913", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06914", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06915", + "text": "If the attachment member of pDepthStencilAttachment is not VK_ATTACHMENT_UNUSED, ts layout member must not be VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06916", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06917", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06918", + "text": "If the attachment member of an element of pInputAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06919", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06920", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06921", + "text": "If the attachment member of an element of pInputAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06922", + "text": "If the attachment member of an element of pColorAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06923", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, its layout member must not be VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-10755", + "text": "If the attachment member of an element of pResolveAttachments is not VK_ATTACHMENT_UNUSED, the underlying resource must not be bound to a VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property.", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-flags-10683", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM, the render pass must have been created with a VkRenderPassTileShadingCreateInfoQCOM::tileApronSize greater than (0,0)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-06251", + "text": "If the attachment member of pDepthStencilAttachment is not VK_ATTACHMENT_UNUSED and its pNext chain includes a VkAttachmentReferenceStencilLayout structure, the layout member of pDepthStencilAttachment must not be VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pipelineBindPoint-04953", + "text": "pipelineBindPoint must be VK_PIPELINE_BIND_POINT_GRAPHICS or VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-colorAttachmentCount-03063", + "text": "colorAttachmentCount must be less than or equal to VkPhysicalDeviceLimits::maxColorAttachments", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-loadOp-03064", + "text": "If the first use of an attachment in this render pass is as an input attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then loadOp must not be VK_ATTACHMENT_LOAD_OP_CLEAR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pResolveAttachments-03067", + "text": "If pResolveAttachments is not NULL, each resolve attachment that is not VK_ATTACHMENT_UNUSED must have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09335", + "text": "If the externalFormatResolve feature is not enabled and pResolveAttachments is not NULL, for each resolve attachment that does not have the value VK_ATTACHMENT_UNUSED, the corresponding color attachment must not have the value VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-nullColorAttachmentWithExternalFormatResolve-09336", + "text": "If the nullColorAttachmentWithExternalFormatResolve property is VK_FALSE and pResolveAttachments is not NULL, for each resolve attachment that has a format of VK_FORMAT_UNDEFINED, the corresponding color attachment must not have the value VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-nullColorAttachmentWithExternalFormatResolve-09337", + "text": "If the nullColorAttachmentWithExternalFormatResolve property is VK_TRUE and pResolveAttachments is not NULL, for each resolve attachment that has a format of VK_FORMAT_UNDEFINED, the corresponding color attachment must have the value VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09338", + "text": "If the externalFormatResolve feature is not enabled and pResolveAttachments is not NULL, for each resolve attachment that is not VK_ATTACHMENT_UNUSED, the corresponding color attachment must not have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09339", + "text": "If the externalFormatResolve feature is not enabled, each element of pResolveAttachments must have the same VkFormat as its corresponding color attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-multisampledRenderToSingleSampled-06869", + "text": "If the multisampledRenderToSingleSampled feature is not enabled, all attachments in pColorAttachments that are not VK_ATTACHMENT_UNUSED must have the same sample count", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pInputAttachments-02897", + "text": "All attachments in pInputAttachments that are not VK_ATTACHMENT_UNUSED and any of the following is true:
\n\n
\n
\n

must have image formats whose potential format\nfeatures contain at least VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or\nVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pColorAttachments-02898", + "text": "All attachments in pColorAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pResolveAttachments-09343", + "text": "All attachments in pResolveAttachments that are not VK_ATTACHMENT_UNUSED and do not have an image format of VK_FORMAT_UNDEFINED must have image formats whose potential format features contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pDepthStencilAttachment-02900", + "text": "If pDepthStencilAttachment is not NULL and the attachment is not VK_ATTACHMENT_UNUSED then it must have an image format whose potential format features contain VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-linearColorAttachment-06499", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, all attachments in pInputAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-linearColorAttachment-06500", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, all attachments in pColorAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-linearColorAttachment-06501", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, all attachments in pResolveAttachments that are not VK_ATTACHMENT_UNUSED must have image formats whose potential format features must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-None-09456", + "text": "If either of the following is enabled:
\n\n
\n
\n

all attachments in pColorAttachments that are not\nVK_ATTACHMENT_UNUSED must have a sample count that is smaller than or\nequal to the sample count of pDepthStencilAttachment if it is not\nVK_ATTACHMENT_UNUSED

\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pNext-06870", + "text": "If the pNext chain includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then all attachments in pColorAttachments and pDepthStencilAttachment that are not VK_ATTACHMENT_UNUSED must have a sample count that is either VK_SAMPLE_COUNT_1_BIT or equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pNext-06871", + "text": "If the pNext chain includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, and pDepthStencilAttachment is not NULL, does not have the value VK_ATTACHMENT_UNUSED, and has a sample count of VK_SAMPLE_COUNT_1_BIT, the pNext chain must also include a VkSubpassDescriptionDepthStencilResolve structure with pDepthStencilResolveAttachment that is either NULL or has the value VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-multisampledRenderToSingleSampled-06872", + "text": "All attachments in pDepthStencilAttachment or pColorAttachments that are not VK_ATTACHMENT_UNUSED must have the same sample count , if none of the following are enabled:
\n\n
", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-03073", + "text": "Each element of pPreserveAttachments must not be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pPreserveAttachments-03074", + "text": "Each element of pPreserveAttachments must not also be an element of any other member of the subpass description", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-layout-02528", + "text": "If any attachment is used by more than one VkAttachmentReference2 member, then each use must use the same layout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-flags-03076", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must also include VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-02799", + "text": "If the attachment member of any element of pInputAttachments is not VK_ATTACHMENT_UNUSED, then the aspectMask member must be a valid combination of VkImageAspectFlagBits", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-02800", + "text": "If the attachment member of any element of pInputAttachments is not VK_ATTACHMENT_UNUSED, then the aspectMask member must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-02801", + "text": "If the attachment member of any element of pInputAttachments is not VK_ATTACHMENT_UNUSED, then the aspectMask member must not include VK_IMAGE_ASPECT_METADATA_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-attachment-04563", + "text": "If the attachment member of any element of pInputAttachments is not VK_ATTACHMENT_UNUSED, then the aspectMask member must not include VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT for any index i", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pDepthStencilAttachment-04440", + "text": "An attachment must not be used in both pDepthStencilAttachment and pColorAttachments", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-multiview-06558", + "text": "If the multiview feature is not enabled, viewMask must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-viewMask-06706", + "text": "The index of the most significant bit in viewMask must be less than maxMultiviewViewCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09344", + "text": "If the externalFormatResolve feature is enabled, pResolveAttachments is not NULL, and colorAttachmentCount is not 1, any element of pResolveAttachments that is not VK_ATTACHMENT_UNUSED, must not have a format of VK_FORMAT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09345", + "text": "If the externalFormatResolve feature is enabled, pResolveAttachments is not NULL, any element of pResolveAttachments is not VK_ATTACHMENT_UNUSED and has a format of VK_FORMAT_UNDEFINED, and the corresponding element of pColorAttachments is not VK_ATTACHMENT_UNUSED, the color attachment must have a samples value of 1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09346", + "text": "If the externalFormatResolve feature is enabled, pResolveAttachments is not NULL, and any element of pResolveAttachments is not VK_ATTACHMENT_UNUSED and has a format of VK_FORMAT_UNDEFINED, viewMask must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09347", + "text": "If the externalFormatResolve feature is enabled, pResolveAttachments is not NULL, and any element of pResolveAttachments is not VK_ATTACHMENT_UNUSED and has a format of VK_FORMAT_UNDEFINED, VkFragmentShadingRateAttachmentInfoKHR::pFragmentShadingRateAttachment must either be NULL or a VkAttachmentReference2 structure with an attachment value of VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-externalFormatResolve-09348", + "text": "If the externalFormatResolve feature is enabled, pResolveAttachments is not NULL, and any element of pResolveAttachments is not VK_ATTACHMENT_UNUSED and has a format of VK_FORMAT_UNDEFINED, elements of pInputAttachments referencing either a color attachment or resolve attachment used in this subpass must not include VK_IMAGE_ASPECT_PLANE_i_BIT for any index i in its aspectMask", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-flags-04907", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if pResolveAttachments is not NULL, then each resolve attachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-flags-04908", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, and if pDepthStencilResolveAttachment is not NULL, then the depth/stencil resolve attachment must be VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-flags-04909", + "text": "If flags includes VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM, then the subpass must be the last subpass in a subpass dependency chain", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkFragmentShadingRateAttachmentInfoKHR, VkMultisampledRenderToSingleSampledInfoEXT, VkRenderPassCreationControlEXT, VkRenderPassSubpassFeedbackCreateInfoEXT, or VkSubpassDescriptionDepthStencilResolve", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-flags-parameter", + "text": "flags must be a valid combination of VkSubpassDescriptionFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pInputAttachments-parameter", + "text": "If inputAttachmentCount is not 0, pInputAttachments must be a valid pointer to an array of inputAttachmentCount valid VkAttachmentReference2 structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pColorAttachments-parameter", + "text": "If colorAttachmentCount is not 0, pColorAttachments must be a valid pointer to an array of colorAttachmentCount valid VkAttachmentReference2 structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pResolveAttachments-parameter", + "text": "If colorAttachmentCount is not 0, and pResolveAttachments is not NULL, pResolveAttachments must be a valid pointer to an array of colorAttachmentCount valid VkAttachmentReference2 structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pDepthStencilAttachment-parameter", + "text": "If pDepthStencilAttachment is not NULL, pDepthStencilAttachment must be a valid pointer to a valid VkAttachmentReference2 structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescription2-pPreserveAttachments-parameter", + "text": "If preserveAttachmentCount is not 0, pPreserveAttachments must be a valid pointer to an array of preserveAttachmentCount uint32_t values", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassDescriptionDepthStencilResolve": { + "core": [ + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03177", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, pDepthStencilAttachment must not be NULL or have the value VK_ATTACHMENT_UNUSED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03179", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, pDepthStencilAttachment must not have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03180", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, pDepthStencilResolveAttachment must have a sample count of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-02651", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED then it must have an image format whose potential format features contain VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03181", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED and VkFormat of pDepthStencilResolveAttachment has a depth component, then the VkFormat of pDepthStencilAttachment must have a depth component with the same number of bits and numeric format", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03182", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, and VkFormat of pDepthStencilResolveAttachment has a stencil component, then the VkFormat of pDepthStencilAttachment must have a stencil component with the same number of bits and numeric format", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03178", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, depthResolveMode and stencilResolveMode must not both be VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-03183", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED and the VkFormat of pDepthStencilResolveAttachment has a depth component, then the value of depthResolveMode must be one of the bits set in VkPhysicalDeviceDepthStencilResolveProperties::supportedDepthResolveModes or VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-03184", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED and the VkFormat of pDepthStencilResolveAttachment has a stencil component, then the value of stencilResolveMode must be one of the bits set in VkPhysicalDeviceDepthStencilResolveProperties::supportedStencilResolveModes or VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03185", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, the VkFormat of pDepthStencilResolveAttachment has both depth and stencil components, VkPhysicalDeviceDepthStencilResolveProperties::independentResolve is VK_FALSE, and VkPhysicalDeviceDepthStencilResolveProperties::independentResolveNone is VK_FALSE, then the values of depthResolveMode and stencilResolveMode must be identical", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03186", + "text": "If pDepthStencilResolveAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, the VkFormat of pDepthStencilResolveAttachment has both depth and stencil components, VkPhysicalDeviceDepthStencilResolveProperties::independentResolve is VK_FALSE and VkPhysicalDeviceDepthStencilResolveProperties::independentResolveNone is VK_TRUE, then the values of depthResolveMode and stencilResolveMode must be identical or one of them must be VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06873", + "text": "If the pNext chain of VkSubpassDescription2 includes a VkMultisampledRenderToSingleSampledInfoEXT structure, the multisampledRenderToSingleSampledEnable field is VK_TRUE, and pDepthStencilAttachment is not NULL and does not have the value VK_ATTACHMENT_UNUSED, depthResolveMode and stencilResolveMode must not both be VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06874", + "text": "If the pNext chain of VkSubpassDescription2 includes a VkMultisampledRenderToSingleSampledInfoEXT structure whose multisampledRenderToSingleSampledEnable field is VK_TRUE, and pDepthStencilAttachment is not NULL, does not have the value VK_ATTACHMENT_UNUSED, and has a VkFormat that has a depth component, then the value of depthResolveMode must be one of the bits set in VkPhysicalDeviceDepthStencilResolveProperties::supportedDepthResolveModes or VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06875", + "text": "If the pNext chain of VkSubpassDescription2 includes a VkMultisampledRenderToSingleSampledInfoEXT structure whose multisampledRenderToSingleSampledEnable field is VK_TRUE, and pDepthStencilAttachment is not NULL, does not have the value VK_ATTACHMENT_UNUSED, and has a VkFormat with a stencil component, then the value of stencilResolveMode must be one of the bits set in VkPhysicalDeviceDepthStencilResolveProperties::supportedStencilResolveModes or VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06876", + "text": "If the pNext chain of VkSubpassDescription2 includes a VkMultisampledRenderToSingleSampledInfoEXT structure whose multisampledRenderToSingleSampledEnable field is VK_TRUE, pDepthStencilAttachment is not NULL, does not have the value VK_ATTACHMENT_UNUSED, and has a VkFormat with both depth and stencil components, and both VkPhysicalDeviceDepthStencilResolveProperties::independentResolve and VkPhysicalDeviceDepthStencilResolveProperties::independentResolveNone are VK_FALSE, then the values of depthResolveMode and stencilResolveMode must be identical", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pNext-06877", + "text": "If the pNext chain of VkSubpassDescription2 includes a VkMultisampledRenderToSingleSampledInfoEXT structure whose multisampledRenderToSingleSampledEnable field is VK_TRUE, pDepthStencilAttachment is not NULL, does not have the value VK_ATTACHMENT_UNUSED, and has a VkFormat with both depth and stencil components, VkPhysicalDeviceDepthStencilResolveProperties::independentResolve is VK_FALSE, and VkPhysicalDeviceDepthStencilResolveProperties::independentResolveNone is VK_TRUE, then the values of depthResolveMode and stencilResolveMode must be identical or one of them must be VK_RESOLVE_MODE_NONE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-parameter", + "text": "If pDepthStencilResolveAttachment is not NULL, pDepthStencilResolveAttachment must be a valid pointer to a valid VkAttachmentReference2 structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkFragmentShadingRateAttachmentInfoKHR": { + "core": [ + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04524", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, its layout member must be equal to VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04525", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, shadingRateAttachmentTexelSize.width must be a power of two value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04526", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, shadingRateAttachmentTexelSize.width must be less than or equal to maxFragmentShadingRateAttachmentTexelSize.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04527", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, shadingRateAttachmentTexelSize.width must be greater than or equal to minFragmentShadingRateAttachmentTexelSize.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04528", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, shadingRateAttachmentTexelSize.height must be a power of two value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04529", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, shadingRateAttachmentTexelSize.height must be less than or equal to maxFragmentShadingRateAttachmentTexelSize.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04530", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, shadingRateAttachmentTexelSize.height must be greater than or equal to minFragmentShadingRateAttachmentTexelSize.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04531", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, the quotient of shadingRateAttachmentTexelSize.width and shadingRateAttachmentTexelSize.height must be less than or equal to maxFragmentShadingRateAttachmentTexelSizeAspectRatio", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04532", + "text": "If pFragmentShadingRateAttachment is not NULL and its attachment member is not VK_ATTACHMENT_UNUSED, the quotient of shadingRateAttachmentTexelSize.height and shadingRateAttachmentTexelSize.width must be less than or equal to maxFragmentShadingRateAttachmentTexelSizeAspectRatio", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-parameter", + "text": "If pFragmentShadingRateAttachment is not NULL, pFragmentShadingRateAttachment must be a valid pointer to a valid VkAttachmentReference2 structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkMultisampledRenderToSingleSampledInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMultisampledRenderToSingleSampledInfoEXT-rasterizationSamples-06878", + "text": "The value of rasterizationSamples must not be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultisampledRenderToSingleSampledInfoEXT-pNext-06880", + "text": "If added to the pNext chain of VkRenderingInfo, each imageView member of any element of VkRenderingInfo::pColorAttachments, VkRenderingInfo::pDepthAttachment, or VkRenderingInfo::pStencilAttachment that is not VK_NULL_HANDLE must have a format that supports the sample count specified in rasterizationSamples", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultisampledRenderToSingleSampledInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultisampledRenderToSingleSampledInfoEXT-rasterizationSamples-parameter", + "text": "rasterizationSamples must be a valid VkSampleCountFlagBits value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentReference2": { + "core": [ + { + "vuid": "VUID-VkAttachmentReference2-layout-03077", + "text": "If attachment is not VK_ATTACHMENT_UNUSED, layout must not be VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT, VK_IMAGE_LAYOUT_PREINITIALIZED, or VK_IMAGE_LAYOUT_PRESENT_SRC_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-separateDepthStencilLayouts-03313", + "text": "If the separateDepthStencilLayouts feature is not enabled, and attachment is not VK_ATTACHMENT_UNUSED, layout must not be VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-synchronization2-06910", + "text": "If the synchronization2 feature is not enabled, layout must not be VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR or VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-attachmentFeedbackLoopLayout-07311", + "text": "If the attachmentFeedbackLoopLayout feature is not enabled, layout must not be VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-dynamicRenderingLocalRead-09546", + "text": "If the dynamicRenderingLocalRead feature is not enabled, layout must not be VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkAttachmentReferenceStencilLayout", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReference2-layout-parameter", + "text": "layout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentReferenceStencilLayout": { + "core": [ + { + "vuid": "VUID-VkAttachmentReferenceStencilLayout-stencilLayout-03318", + "text": "stencilLayout must not be VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_PRESENT_SRC_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReferenceStencilLayout-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentReferenceStencilLayout-stencilLayout-parameter", + "text": "stencilLayout must be a valid VkImageLayout value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassDependency2": { + "core": [ + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04090", + "text": "If the geometryShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04091", + "text": "If the tessellationShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04094", + "text": "If the transformFeedback feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04095", + "text": "If the meshShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-04096", + "text": "If the taskShader feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-03937", + "text": "If the synchronization2 feature is not enabled, srcStageMask must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, srcStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, srcStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04090", + "text": "If the geometryShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04091", + "text": "If the tessellationShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04092", + "text": "If the conditionalRendering feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04093", + "text": "If the fragmentDensityMap feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04094", + "text": "If the transformFeedback feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04095", + "text": "If the meshShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-04096", + "text": "If the taskShader feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-07318", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-03937", + "text": "If the synchronization2 feature is not enabled, dstStageMask must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-07949", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, dstStageMask must not contain VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-10754", + "text": "If the accelerationStructure feature is not enabled, dstStageMask must not contain VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcSubpass-03084", + "text": "srcSubpass must be less than or equal to dstSubpass, unless one of them is VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies and ensure a valid execution order", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcSubpass-03085", + "text": "srcSubpass and dstSubpass must not both be equal to VK_SUBPASS_EXTERNAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcSubpass-06810", + "text": "If srcSubpass is equal to dstSubpass and srcStageMask includes a framebuffer-space stage, dstStageMask must only contain framebuffer-space stages", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcAccessMask-03088", + "text": "Any access flag included in srcAccessMask must be supported by one of the pipeline stages in srcStageMask, as specified in the table of supported access types", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstAccessMask-03089", + "text": "Any access flag included in dstAccessMask must be supported by one of the pipeline stages in dstStageMask, as specified in the table of supported access types", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dependencyFlags-03090", + "text": "If dependencyFlags includes VK_DEPENDENCY_VIEW_LOCAL_BIT, srcSubpass must not be equal to VK_SUBPASS_EXTERNAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dependencyFlags-03091", + "text": "If dependencyFlags includes VK_DEPENDENCY_VIEW_LOCAL_BIT, dstSubpass must not be equal to VK_SUBPASS_EXTERNAL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcSubpass-02245", + "text": "If srcSubpass equals dstSubpass, and srcStageMask and dstStageMask both include a framebuffer-space stage, then dependencyFlags must include VK_DEPENDENCY_BY_REGION_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-viewOffset-02530", + "text": "If viewOffset is not equal to 0, srcSubpass must not be equal to dstSubpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dependencyFlags-03092", + "text": "If dependencyFlags does not include VK_DEPENDENCY_VIEW_LOCAL_BIT, viewOffset must be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dependencyFlags-10204", + "text": "dependencyFlags must not include VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkMemoryBarrier2 or VkMemoryBarrierAccessFlags3KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcStageMask-parameter", + "text": "srcStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstStageMask-parameter", + "text": "dstStageMask must be a valid combination of VkPipelineStageFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-srcAccessMask-parameter", + "text": "srcAccessMask must be a valid combination of VkAccessFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dstAccessMask-parameter", + "text": "dstAccessMask must be a valid combination of VkAccessFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassDependency2-dependencyFlags-parameter", + "text": "dependencyFlags must be a valid combination of VkDependencyFlagBits values", + "page": "chapters/renderpass.html" + } + ] + }, + "vkDestroyRenderPass": { + "core": [ + { + "vuid": "VUID-vkDestroyRenderPass-renderPass-00873", + "text": "All submitted commands that refer to renderPass must have completed execution", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyRenderPass-renderPass-00874", + "text": "If VkAllocationCallbacks were provided when renderPass was created, a compatible set of callbacks must be provided here", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyRenderPass-renderPass-00875", + "text": "If no VkAllocationCallbacks were provided when renderPass was created, pAllocator must be NULL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyRenderPass-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyRenderPass-renderPass-parameter", + "text": "If renderPass is not VK_NULL_HANDLE, renderPass must be a valid VkRenderPass handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyRenderPass-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyRenderPass-renderPass-parent", + "text": "If renderPass is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCreateFramebuffer": { + "core": [ + { + "vuid": "VUID-vkCreateFramebuffer-device-10002", + "text": "device must support at least one queue family with the VK_QUEUE_GRAPHICS_BIT capability", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateFramebuffer-pCreateInfo-02777", + "text": "If pCreateInfo->flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and attachmentCount is not 0, each element of pCreateInfo->pAttachments must have been created on device", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateFramebuffer-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateFramebuffer-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkFramebufferCreateInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateFramebuffer-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateFramebuffer-pFramebuffer-parameter", + "text": "pFramebuffer must be a valid pointer to a VkFramebuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCreateFramebuffer-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/renderpass.html" + } + ] + }, + "VkFramebufferCreateInfo": { + "core": [ + { + "vuid": "VUID-VkFramebufferCreateInfo-attachmentCount-00876", + "text": "attachmentCount must be equal to the attachment count specified in renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-02778", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT and attachmentCount is not 0, pAttachments must be a valid pointer to an array of attachmentCount valid VkImageView handles", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00877", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as a color attachment or resolve attachment by renderPass must have been created with a usage value including VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02633", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as a depth/stencil attachment by renderPass must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02634", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as a depth/stencil resolve attachment by renderPass must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00879", + "text": "If renderpass is not VK_NULL_HANDLE, flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as an input attachment by renderPass must have been created with a usage value including VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02552", + "text": "Each element of pAttachments that is used as a fragment density map attachment by renderPass must not have been created with a flags value including VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-02553", + "text": "If renderPass has a fragment density map attachment and the fragmentDensityMapNonSubsampledImages feature is not enabled, each element of pAttachments must have been created with a flags value including VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT unless that element is the fragment density map attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-10830", + "text": "If renderPass was created with VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then layers must be less than or equal to maxFragmentDensityMapLayers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00880", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments must have been created with a VkFormat value that matches the VkFormat specified by the corresponding VkAttachmentDescription in renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00881", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments must have been created with a samples value that matches the samples value specified by the corresponding VkAttachmentDescription in renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04533", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as an input, color, resolve, or depth/stencil attachment by renderPass must have been created with a VkImageCreateInfo::extent.width greater than or equal to width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04534", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as an input, color, resolve, or depth/stencil attachment by renderPass must have been created with a VkImageCreateInfo::extent.height greater than or equal to height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04535", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as an input, color, resolve, or depth/stencil attachment by renderPass must have been created with a VkImageViewCreateInfo::subresourceRange.layerCount greater than or equal to layers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-04536", + "text": "If renderPass was specified with non-zero view masks, each element of pAttachments that is used as an input, color, resolve, or depth/stencil attachment by renderPass must have a layerCount greater than the index of the most significant bit set in any of those view masks", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-02746", + "text": "Each element of pAttachments that is referenced by fragmentDensityMapAttachment must have a layerCount equal to 1 or if renderPass was specified with non-zero view masks, greater than the index of the most significant bit set in any of those view masks", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02555", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of pAttachments that is referenced by fragmentDensityMapAttachment must have a width at least as large as \\(\\left\\lceil{\\frac{width}{maxFragmentDensityTexelSize_{width}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-02556", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of pAttachments that is referenced by fragmentDensityMapAttachment must have a height at least as large as \\(\\left\\lceil{\\frac{height}{maxFragmentDensityTexelSize_{height}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04537", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and renderPass was specified with non-zero view masks, each element of pAttachments that is used as a fragment shading rate attachment by renderPass must have a layerCount that is either 1, or greater than the index of the most significant bit set in any of those view masks", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04538", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and renderPass was not specified with non-zero view masks, each element of pAttachments that is used as a fragment shading rate attachment by renderPass must have a layerCount that is either 1, or greater than layers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04539", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of pAttachments that is used as a fragment shading rate attachment must have a width at least as large as ⌈width / texelWidth⌉, where texelWidth is the largest value of shadingRateAttachmentTexelSize.width in a VkFragmentShadingRateAttachmentInfoKHR which references that attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04540", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, an element of pAttachments that is used as a fragment shading rate attachment must have a height at least as large as ⌈height / texelHeight⌉, where texelHeight is the largest value of shadingRateAttachmentTexelSize.height in a VkFragmentShadingRateAttachmentInfoKHR which references that attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00883", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments must only specify a single mip level", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00884", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-width-00885", + "text": "width must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-width-00886", + "text": "width must be less than or equal to maxFramebufferWidth", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-height-00887", + "text": "height must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-height-00888", + "text": "height must be less than or equal to maxFramebufferHeight", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-layers-00889", + "text": "layers must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-layers-00890", + "text": "layers must be less than or equal to maxFramebufferLayers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-02531", + "text": "If renderPass was specified with non-zero view masks, layers must be 1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-00891", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is a 2D or 2D array image view taken from a 3D image must not be a depth/stencil format", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03189", + "text": "If the imagelessFramebuffer feature is not enabled, flags must not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03190", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the pNext chain must include a VkFramebufferAttachmentsCreateInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03191", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the attachmentImageInfoCount member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain must be equal to either zero or attachmentCount", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04541", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the width member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as an input, color, resolve or depth/stencil attachment in renderPass must be greater than or equal to width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04542", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the height member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as an input, color, resolve or depth/stencil attachment in renderPass must be greater than or equal to height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03196", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the width member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is referenced by VkRenderPassFragmentDensityMapCreateInfoEXT::fragmentDensityMapAttachment in renderPass must be greater than or equal to \\(\\left\\lceil{\\frac{width}{maxFragmentDensityTexelSize_{width}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03197", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the height member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain that is referenced by VkRenderPassFragmentDensityMapCreateInfoEXT::fragmentDensityMapAttachment in renderPass must be greater than or equal to \\(\\left\\lceil{\\frac{height}{maxFragmentDensityTexelSize_{height}}}\\right\\rceil\\)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04543", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, and flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the width member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as a fragment shading rate attachment must be greater than or equal to ⌈width / texelWidth⌉, where texelWidth is the largest value of shadingRateAttachmentTexelSize.width in a VkFragmentShadingRateAttachmentInfoKHR which references that attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04544", + "text": "If the maintenance7 feature is not enabled or the robustFragmentShadingRateAttachmentAccess limit is VK_FALSE or the imageView member of a VkRenderingFragmentShadingRateAttachmentInfoKHR structure was created with VkImageSubresourceRange::baseMipLevel greater than 0, and flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the height member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as a fragment shading rate attachment must be greater than or equal to ⌈height / texelHeight⌉, where texelHeight is the largest value of shadingRateAttachmentTexelSize.height in a VkFragmentShadingRateAttachmentInfoKHR which references that attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04545", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the layerCount member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as a fragment shading rate attachment must be either 1, or greater than or equal to layers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04587", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT and renderPass was specified with non-zero view masks, the layerCount member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as a fragment shading rate attachment must be either 1, or greater than the index of the most significant bit set in any of those view masks", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-03198", + "text": "If multiview is enabled for renderPass and flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the layerCount member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain used as an input, color, resolve, or depth/stencil attachment in renderPass must be greater than the maximum bit index set in the view mask in the subpasses in which it is used in renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-04546", + "text": "If multiview is not enabled for renderPass and flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the layerCount member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain used as an input, color, resolve, or depth/stencil attachment in renderPass must be greater than or equal to layers", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03201", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the usage member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain that refers to an attachment used as a color attachment or resolve attachment by renderPass must include VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03202", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the usage member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain that refers to an attachment used as a depth/stencil attachment by renderPass must include VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03203", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the usage member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain that refers to an attachment used as a depth/stencil resolve attachment by renderPass must include VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03204", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the usage member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain that refers to an attachment used as an input attachment by renderPass must include VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-03205", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, at least one element of the pViewFormats member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain must be equal to the corresponding value of VkAttachmentDescription::format used to create renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04113", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments must have been created with VkImageViewCreateInfo::viewType not equal to VK_IMAGE_VIEW_TYPE_3D", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04548", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments that is used as a fragment shading rate attachment by renderPass must have been created with a usage value including VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-04549", + "text": "If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the usage member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure included in the pNext chain that refers to an attachment used as a fragment shading rate attachment by renderPass must include VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-samples-06881", + "text": "If multisampled-render-to-single-sampled is enabled for any subpass, all color, depth/stencil and input attachments used in that subpass which have VkAttachmentDescription::samples or VkAttachmentDescription2::samples equal to VK_SAMPLE_COUNT_1_BIT must have been created with VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT in their VkImageCreateInfo::flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-samples-07009", + "text": "If multisampled-render-to-single-sampled is enabled for any subpass, all color, depth/stencil and input attachments used in that subpass which have VkAttachmentDescription::samples or VkAttachmentDescription2::samples equal to VK_SAMPLE_COUNT_1_BIT must have a format that supports the sample count specified in VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-nullColorAttachmentWithExternalFormatResolve-09349", + "text": "If the nullColorAttachmentWithExternalFormatResolve is VK_FALSE, and flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the format of the color attachment for each subpass in renderPass that includes an external format image as a resolve attachment must have a format equal to the value of VkAndroidHardwareBufferFormatResolvePropertiesANDROID::colorAttachmentFormat as returned by a call to vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware buffer that was used to create the image view use as its resolve attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pAttachments-09350", + "text": "If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, then if an element of pAttachments has a format of VK_FORMAT_UNDEFINED, it must have been created with a VkExternalFormatANDROID::externalFormat value identical to that provided in the VkExternalFormatANDROID::externalFormat specified by the corresponding VkAttachmentDescription2 in renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkFramebufferAttachmentsCreateInfo", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkFramebufferCreateFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-renderPass-parameter", + "text": "renderPass must be a valid VkRenderPass handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferCreateInfo-commonparent", + "text": "Both of renderPass, and the elements of pAttachments that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/renderpass.html" + } + ] + }, + "VkFramebufferAttachmentsCreateInfo": { + "core": [ + { + "vuid": "VUID-VkFramebufferAttachmentsCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentsCreateInfo-pAttachmentImageInfos-parameter", + "text": "If attachmentImageInfoCount is not 0, pAttachmentImageInfos must be a valid pointer to an array of attachmentImageInfoCount valid VkFramebufferAttachmentImageInfo structures", + "page": "chapters/renderpass.html" + } + ] + }, + "VkFramebufferAttachmentImageInfo": { + "core": [ + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-viewFormatCount-09536", + "text": "If viewFormatCount is not 0, and the render pass is not being used with an external format resolve attachment, each element of pViewFormats must not be VK_FORMAT_UNDEFINED", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-flags-parameter", + "text": "flags must be a valid combination of VkImageCreateFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkFramebufferAttachmentImageInfo-pViewFormats-parameter", + "text": "If viewFormatCount is not 0, pViewFormats must be a valid pointer to an array of viewFormatCount valid VkFormat values", + "page": "chapters/renderpass.html" + } + ] + }, + "vkDestroyFramebuffer": { + "core": [ + { + "vuid": "VUID-vkDestroyFramebuffer-framebuffer-00892", + "text": "All submitted commands that refer to framebuffer must have completed execution", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyFramebuffer-framebuffer-00893", + "text": "If VkAllocationCallbacks were provided when framebuffer was created, a compatible set of callbacks must be provided here", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyFramebuffer-framebuffer-00894", + "text": "If no VkAllocationCallbacks were provided when framebuffer was created, pAllocator must be NULL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyFramebuffer-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyFramebuffer-framebuffer-parameter", + "text": "If framebuffer is not VK_NULL_HANDLE, framebuffer must be a valid VkFramebuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyFramebuffer-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkDestroyFramebuffer-framebuffer-parent", + "text": "If framebuffer is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdBeginRenderPass": { + "core": [ + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00895", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-01758", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-02842", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-stencilInitialLayout-02843", + "text": "If any of the stencilInitialLayout or stencilFinalLayout member of the VkAttachmentDescriptionStencilLayout structures or the stencilLayout member of the VkAttachmentReferenceStencilLayout structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00897", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_SAMPLED_BIT or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00898", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_TRANSFER_SRC_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00899", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_TRANSFER_DST_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-00900", + "text": "If the initialLayout member of any of the VkAttachmentDescription structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is not VK_IMAGE_LAYOUT_UNDEFINED, then each such initialLayout must be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in the framebuffer member of pRenderPassBegin", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-srcStageMask-06451", + "text": "The srcStageMask members of any element of the pDependencies member of VkRenderPassCreateInfo used to create renderPass must be supported by the capabilities of the queue family identified by the queueFamilyIndex member of the VkCommandPoolCreateInfo used to create the command pool which commandBuffer was allocated from", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-dstStageMask-06452", + "text": "The dstStageMask members of any element of the pDependencies member of VkRenderPassCreateInfo used to create renderPass must be supported by the capabilities of the queue family identified by the queueFamilyIndex member of the VkCommandPoolCreateInfo used to create the command pool which commandBuffer was allocated from", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-framebuffer-02532", + "text": "For any attachment in framebuffer that is used by renderPass and is bound to memory locations that are also bound to another attachment used by renderPass, and if at least one of those uses causes either attachment to be written to, both attachments must have had the VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT set", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-framebuffer-09045", + "text": "If any attachments specified in framebuffer are used by renderPass and are bound to overlapping memory locations, there must be only one that is used as a color attachment, depth/stencil, or resolve attachment in any subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-07000", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including either the VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT and either the VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or VK_IMAGE_USAGE_SAMPLED_BIT usage bits", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-07001", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value the VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-initialLayout-09537", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including either VK_IMAGE_USAGE_STORAGE_BIT, or both VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT and either of VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-contents-09640", + "text": "If contents is VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR, then at least one of the following features must be enabled:", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter", + "text": "pRenderPassBegin must be a valid pointer to a valid VkRenderPassBeginInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-contents-parameter", + "text": "contents must be a valid VkSubpassContents value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdBeginRenderPass2": { + "core": [ + { + "vuid": "VUID-vkCmdBeginRenderPass2-framebuffer-02779", + "text": "Both the framebuffer and renderPass members of pRenderPassBegin must have been created on the same VkDevice that commandBuffer was allocated on", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03094", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03096", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-02844", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-stencilInitialLayout-02845", + "text": "If any of the stencilInitialLayout or stencilFinalLayout member of the VkAttachmentDescriptionStencilLayout structures or the stencilLayout member of the VkAttachmentReferenceStencilLayout structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, or VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03097", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_SAMPLED_BIT or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03098", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_TRANSFER_SRC_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03099", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including VK_IMAGE_USAGE_TRANSFER_DST_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-03100", + "text": "If the initialLayout member of any of the VkAttachmentDescription structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is not VK_IMAGE_LAYOUT_UNDEFINED, then each such initialLayout must be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in the framebuffer member of pRenderPassBegin", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-srcStageMask-06453", + "text": "The srcStageMask members of any element of the pDependencies member of VkRenderPassCreateInfo used to create renderPass must be supported by the capabilities of the queue family identified by the queueFamilyIndex member of the VkCommandPoolCreateInfo used to create the command pool which commandBuffer was allocated from", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-dstStageMask-06454", + "text": "The dstStageMask members of any element of the pDependencies member of VkRenderPassCreateInfo used to create renderPass must be supported by the capabilities of the queue family identified by the queueFamilyIndex member of the VkCommandPoolCreateInfo used to create the command pool which commandBuffer was allocated from", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-framebuffer-02533", + "text": "For any attachment in framebuffer that is used by renderPass and is bound to memory locations that are also bound to another attachment used by renderPass, and if at least one of those uses causes either attachment to be written to, both attachments must have had the VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT set", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-framebuffer-09046", + "text": "If any attachments specified in framebuffer are used by renderPass and are bound to overlapping memory locations, there must be only one that is used as a color attachment, depth/stencil, or resolve attachment in any subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-07002", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including either the VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT and either the VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or VK_IMAGE_USAGE_SAMPLED_BIT usage bits", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-07003", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value the VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT usage bit", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-initialLayout-09538", + "text": "If any of the initialLayout or finalLayout member of the VkAttachmentDescription structures or the layout member of the VkAttachmentReference structures specified when creating the render pass specified in the renderPass member of pRenderPassBegin is VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ then the corresponding attachment image view of the framebuffer specified in the framebuffer member of pRenderPassBegin must have been created with a usage value including either VK_IMAGE_USAGE_STORAGE_BIT, or both VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT and either of VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-flags-10652", + "text": "If VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM was included in the VkRenderPassTileShadingCreateInfoQCOM::flags used to create the renderPass, commandBuffer must not have been created with VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-pRenderPassBegin-parameter", + "text": "pRenderPassBegin must be a valid pointer to a valid VkRenderPassBeginInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-pSubpassBeginInfo-parameter", + "text": "pSubpassBeginInfo must be a valid pointer to a valid VkSubpassBeginInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginRenderPass2-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassBeginInfo": { + "core": [ + { + "vuid": "VUID-VkRenderPassBeginInfo-clearValueCount-00902", + "text": "clearValueCount must be greater than the largest attachment index in renderPass specifying a loadOp (or stencilLoadOp, if the attachment has a depth/stencil format) of VK_ATTACHMENT_LOAD_OP_CLEAR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-clearValueCount-04962", + "text": "If clearValueCount is not 0, pClearValues must be a valid pointer to an array of clearValueCount VkClearValue unions", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-renderPass-00904", + "text": "renderPass must be compatible with the renderPass member of the VkFramebufferCreateInfo structure specified when creating framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-None-08996", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.extent.width must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-None-08997", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.extent.height must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02850", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.offset.x must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02851", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.offset.y must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02852", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.offset.x + renderArea.extent.width must be less than or equal to VkFramebufferCreateInfo::width the framebuffer was created with", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02853", + "text": "If the pNext chain does not contain VkDeviceGroupRenderPassBeginInfo or its deviceRenderAreaCount member is equal to 0, renderArea.offset.y + renderArea.extent.height must be less than or equal to VkFramebufferCreateInfo::height the framebuffer was created with", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02856", + "text": "If the pNext chain contains VkDeviceGroupRenderPassBeginInfo, offset.x + extent.width of each element of pDeviceRenderAreas must be less than or equal to VkFramebufferCreateInfo::width the framebuffer was created with", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02857", + "text": "If the pNext chain contains VkDeviceGroupRenderPassBeginInfo, offset.y + extent.height of each element of pDeviceRenderAreas must be less than or equal to VkFramebufferCreateInfo::height the framebuffer was created with", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03207", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that did not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and the pNext chain includes a VkRenderPassAttachmentBeginInfo structure, its attachmentCount must be zero", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03208", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the attachmentCount of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be equal to the value of VkFramebufferAttachmentsCreateInfo::attachmentImageInfoCount used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-02780", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must have been created on the same VkDevice as framebuffer and renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03209", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a value of VkImageCreateInfo::flags equal to the flags member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-04627", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView with an inherited usage equal to the usage member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03211", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView with a width equal to the width member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03212", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView with a height equal to the height member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03213", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a value of VkImageViewCreateInfo::subresourceRange.layerCount equal to the layerCount member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03214", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a value of VkImageFormatListCreateInfo::viewFormatCount equal to the viewFormatCount member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03215", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a set of elements in VkImageFormatListCreateInfo::pViewFormats equal to the set of elements in the pViewFormats member of the corresponding element of VkFramebufferAttachmentsCreateInfo::pAttachmentImageInfos used to create framebuffer", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-03216", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a value of VkImageViewCreateInfo::format equal to the corresponding value of VkAttachmentDescription::format in renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-09353", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, and the nullColorAttachmentWithExternalFormatResolve is VK_FALSE, the format of the color attachment for each subpass that includes an external format image as a resolve attachment must have a format equal to the value of VkAndroidHardwareBufferFormatResolvePropertiesANDROID::colorAttachmentFormat as returned by a call to vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware buffer that was used to create the image view use as its resolve attachment", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-09354", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a value of VkExternalFormatANDROID::externalFormat equal to VkExternalFormatANDROID::externalFormat in the pNext chain of the corresponding VkAttachmentDescription2 structure used to create renderPass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-09047", + "text": "If framebuffer was created with a VkFramebufferCreateInfo::flags value that included VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of the pAttachments member of a VkRenderPassAttachmentBeginInfo structure included in the pNext chain must be a VkImageView of an image created with a value of VkImageCreateInfo::samples equal to the corresponding value of VkAttachmentDescription::samples in renderPass , or VK_SAMPLE_COUNT_1_BIT if renderPass was created with VkMultisampledRenderToSingleSampledInfoEXT structure in the pNext chain with multisampledRenderToSingleSampledEnable equal to VK_TRUE", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02869", + "text": "If the pNext chain includes VkRenderPassTransformBeginInfoQCOM, renderArea.offset must equal (0,0)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-02870", + "text": "If the pNext chain includes VkRenderPassTransformBeginInfoQCOM, renderArea.extent transformed by VkRenderPassTransformBeginInfoQCOM::transform must equal the framebuffer dimensions", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-perViewRenderAreaCount-07859", + "text": "If the perViewRenderAreaCount member of a VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure included in the pNext chain is not 0, then the multiviewPerViewRenderAreas feature must be enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-perViewRenderAreaCount-07860", + "text": "If the perViewRenderAreaCount member of a VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM structure included in the pNext chain is not 0, then renderArea must specify a render area that includes the union of all per view render areas", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-09539", + "text": "If the pNext chain contains a VkRenderPassStripeBeginInfoARM structure, the union of stripe areas defined by the elements of VkRenderPassStripeBeginInfoARM::pStripeInfos must cover the renderArea", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceGroupRenderPassBeginInfo, VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM, VkRenderPassAttachmentBeginInfo, VkRenderPassSampleLocationsBeginInfoEXT, VkRenderPassStripeBeginInfoARM, or VkRenderPassTransformBeginInfoQCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-renderPass-parameter", + "text": "renderPass must be a valid VkRenderPass handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-framebuffer-parameter", + "text": "framebuffer must be a valid VkFramebuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassBeginInfo-commonparent", + "text": "Both of framebuffer, and renderPass must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassSampleLocationsBeginInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-pAttachmentInitialSampleLocations-parameter", + "text": "If attachmentInitialSampleLocationsCount is not 0, pAttachmentInitialSampleLocations must be a valid pointer to an array of attachmentInitialSampleLocationsCount valid VkAttachmentSampleLocationsEXT structures", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassSampleLocationsBeginInfoEXT-pPostSubpassSampleLocations-parameter", + "text": "If postSubpassSampleLocationsCount is not 0, pPostSubpassSampleLocations must be a valid pointer to an array of postSubpassSampleLocationsCount valid VkSubpassSampleLocationsEXT structures", + "page": "chapters/renderpass.html" + } + ] + }, + "VkAttachmentSampleLocationsEXT": { + "core": [ + { + "vuid": "VUID-VkAttachmentSampleLocationsEXT-attachmentIndex-01531", + "text": "attachmentIndex must be less than the attachmentCount specified in VkRenderPassCreateInfo the render pass specified by VkRenderPassBeginInfo::renderPass was created with", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkAttachmentSampleLocationsEXT-sampleLocationsInfo-parameter", + "text": "sampleLocationsInfo must be a valid VkSampleLocationsInfoEXT structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassSampleLocationsEXT": { + "core": [ + { + "vuid": "VUID-VkSubpassSampleLocationsEXT-subpassIndex-01532", + "text": "subpassIndex must be less than the subpassCount specified in VkRenderPassCreateInfo the render pass specified by VkRenderPassBeginInfo::renderPass was created with", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassSampleLocationsEXT-sampleLocationsInfo-parameter", + "text": "sampleLocationsInfo must be a valid VkSampleLocationsInfoEXT structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassTransformBeginInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkRenderPassTransformBeginInfoQCOM-transform-02871", + "text": "transform must be VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTransformBeginInfoQCOM-flags-02872", + "text": "The renderpass must have been created with VkRenderPassCreateInfo::flags containing VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTransformBeginInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM", + "page": "chapters/renderpass.html" + } + ] + }, + "VkTileMemorySizeInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkTileMemorySizeInfoQCOM-size-10729", + "text": "size must be less than or equal to the largest size memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkTileMemorySizeInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassBeginInfo": { + "core": [ + { + "vuid": "VUID-VkSubpassBeginInfo-contents-09382", + "text": "If contents is VK_SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR, then at least one of the following features must be enabled:", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassBeginInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassBeginInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassBeginInfo-contents-parameter", + "text": "contents must be a valid VkSubpassContents value", + "page": "chapters/renderpass.html" + } + ] + }, + "VkDeviceGroupRenderPassBeginInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00905", + "text": "deviceMask must be a valid device mask value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00906", + "text": "deviceMask must not be zero", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00907", + "text": "deviceMask must be a subset of the command buffer’s initial device mask", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908", + "text": "deviceRenderAreaCount must either be zero or equal to the number of physical devices in the logical device", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-offset-06166", + "text": "The offset.x member of any element of pDeviceRenderAreas must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-offset-06167", + "text": "The offset.y member of any element of pDeviceRenderAreas must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-offset-06168", + "text": "The sum of the offset.x and extent.width members of any element of pDeviceRenderAreas must be less than or equal to maxFramebufferWidth", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-offset-06169", + "text": "The sum of the offset.y and extent.height members of any element of pDeviceRenderAreas must be less than or equal to maxFramebufferHeight", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-extent-08998", + "text": "The extent.width member of any element of pDeviceRenderAreas must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-extent-08999", + "text": "The extent.height member of any element of pDeviceRenderAreas must be greater than 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkDeviceGroupRenderPassBeginInfo-pDeviceRenderAreas-parameter", + "text": "If deviceRenderAreaCount is not 0, pDeviceRenderAreas must be a valid pointer to an array of deviceRenderAreaCount VkRect2D structures", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassAttachmentBeginInfo": { + "core": [ + { + "vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03218", + "text": "Each element of pAttachments must only specify a single mip level", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03219", + "text": "Each element of pAttachments must have been created with the identity swizzle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-04114", + "text": "Each element of pAttachments must have been created with VkImageViewCreateInfo::viewType not equal to VK_IMAGE_VIEW_TYPE_3D", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-07010", + "text": "If multisampled-render-to-single-sampled is enabled for any subpass, all element of pAttachments which have a sample count equal to VK_SAMPLE_COUNT_1_BIT must have a format that supports the sample count specified in VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassAttachmentBeginInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassAttachmentBeginInfo-pAttachments-parameter", + "text": "If attachmentCount is not 0, pAttachments must be a valid pointer to an array of attachmentCount valid VkImageView handles", + "page": "chapters/renderpass.html" + } + ] + }, + "VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07861", + "text": "The offset.x member of any element of pPerViewRenderAreas must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07862", + "text": "The offset.y member of any element of pPerViewRenderAreas must be greater than or equal to 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07863", + "text": "The sum of the offset.x and extent.width members of any element of pPerViewRenderAreas must be less than or equal to maxFramebufferWidth", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-offset-07864", + "text": "The sum of the offset.y and extent.height members of any element of pPerViewRenderAreas must be less than or equal to maxFramebufferHeight", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-pNext-07865", + "text": "If this structure is in the pNext chain of VkRenderPassBeginInfo and if the render pass object included an element in VkRenderPassMultiviewCreateInfo::pViewMasks that set bit n, then perViewRenderAreaCount must be at least equal to n+1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-pNext-07866", + "text": "If this structure is in the pNext chain of VkRenderingInfo and if VkRenderingInfo::viewMask set bit n, then perViewRenderAreaCount must be at least equal to n+1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM-pPerViewRenderAreas-parameter", + "text": "If perViewRenderAreaCount is not 0, pPerViewRenderAreas must be a valid pointer to an array of perViewRenderAreaCount VkRect2D structures", + "page": "chapters/renderpass.html" + } + ] + }, + "vkGetRenderAreaGranularity": { + "core": [ + { + "vuid": "VUID-vkGetRenderAreaGranularity-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parameter", + "text": "renderPass must be a valid VkRenderPass handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetRenderAreaGranularity-pGranularity-parameter", + "text": "pGranularity must be a valid pointer to a VkExtent2D structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkGetRenderAreaGranularity-renderPass-parent", + "text": "renderPass must have been created, allocated, or retrieved from device", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdNextSubpass": { + "core": [ + { + "vuid": "VUID-vkCmdNextSubpass-None-00909", + "text": "The current subpass index must be less than the number of subpasses in the render pass minus one", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-None-02349", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-contents-parameter", + "text": "contents must be a valid VkSubpassContents value", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdNextSubpass2": { + "core": [ + { + "vuid": "VUID-vkCmdNextSubpass2-None-03102", + "text": "The current subpass index must be less than the number of subpasses in the render pass minus one", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-None-02350", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-pSubpassBeginInfo-parameter", + "text": "pSubpassBeginInfo must be a valid pointer to a valid VkSubpassBeginInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-pSubpassEndInfo-parameter", + "text": "pSubpassEndInfo must be a valid pointer to a valid VkSubpassEndInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdNextSubpass2-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdEndRenderPass": { + "core": [ + { + "vuid": "VUID-vkCmdEndRenderPass-None-00910", + "text": "The current subpass index must be equal to the number of subpasses in the render pass minus one", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-None-02351", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-None-06170", + "text": "The current render pass instance must not have been begun with vkCmdBeginRendering", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-None-07004", + "text": "If vkCmdBeginQuery* was called within a subpass of the render pass, the corresponding vkCmdEndQuery* must have been called subsequently within the same subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-None-10653", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdEndRenderPass2": { + "core": [ + { + "vuid": "VUID-vkCmdEndRenderPass2-None-03103", + "text": "The current subpass index must be equal to the number of subpasses in the render pass minus one", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-None-02352", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-None-06171", + "text": "The current render pass instance must not have been begun with vkCmdBeginRendering", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-None-07005", + "text": "If vkCmdBeginQuery* was called within a subpass of the render pass, the corresponding vkCmdEndQuery* must have been called subsequently within the same subpass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-pSubpassEndInfo-parameter", + "text": "pSubpassEndInfo must be a valid pointer to a valid VkSubpassEndInfo structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndRenderPass2-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/renderpass.html" + } + ] + }, + "VkSubpassEndInfo": { + "core": [ + { + "vuid": "VUID-VkSubpassEndInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_END_INFO", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassEndInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkRenderPassFragmentDensityMapOffsetEndInfoEXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkSubpassEndInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassFragmentDensityMapOffsetEndInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-fragmentDensityMapOffsets-06503", + "text": "If the fragmentDensityMapOffset feature is not enabled or fragment density map is not enabled in the render pass, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-fragmentDensityMapAttachment-06504", + "text": "If VkRenderPassFragmentDensityMapCreateInfoEXT::fragmentDensityMapAttachment is not VK_ATTACHMENT_UNUSED and was not created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pDepthStencilAttachment-06505", + "text": "If the depth or stencil attachments for the render pass are used and were not created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pInputAttachments-06506", + "text": "If any used input attachments for the render pass were not created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pColorAttachments-06507", + "text": "If any used color attachments for the render pass were not created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pResolveAttachments-06508", + "text": "If any used resolve attachments for the render pass were not created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pPreserveAttachments-06509", + "text": "If any used preserve attachments for the render pass were not created with VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, fragmentDensityOffsetCount must equal 0", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-fragmentDensityOffsetCount-06510", + "text": "If fragmentDensityOffsetCount is not 0 and multiview is enabled for the render pass, fragmentDensityOffsetCount must equal the layerCount that was specified in creating the fragment density map attachment view", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-fragmentDensityOffsetCount-06511", + "text": "If fragmentDensityOffsetCount is not 0 and multiview is not enabled for the render pass, fragmentDensityOffsetCount must equal 1", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-x-06512", + "text": "The x component of each element of pFragmentDensityOffsets must be an integer multiple of fragmentDensityOffsetGranularity.width", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-y-06513", + "text": "The y component of each element of pFragmentDensityOffsets must be an integer multiple of fragmentDensityOffsetGranularity.height", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pFragmentDensityOffsets-10730", + "text": "Each element of pFragmentDensityOffsets must be identical for every vkCmdEndRendering2EXT call made in a render pass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassFragmentDensityMapOffsetEndInfoEXT-pFragmentDensityOffsets-parameter", + "text": "If fragmentDensityOffsetCount is not 0, pFragmentDensityOffsets must be a valid pointer to an array of fragmentDensityOffsetCount VkOffset2D structures", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassCreationControlEXT": { + "core": [ + { + "vuid": "VUID-VkRenderPassCreationControlEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_CONTROL_EXT", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassCreationFeedbackCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderPassCreationFeedbackCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassCreationFeedbackCreateInfoEXT-pRenderPassFeedback-parameter", + "text": "pRenderPassFeedback must be a valid pointer to a VkRenderPassCreationFeedbackInfoEXT structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassSubpassFeedbackCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkRenderPassSubpassFeedbackCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassSubpassFeedbackCreateInfoEXT-pSubpassFeedback-parameter", + "text": "pSubpassFeedback must be a valid pointer to a VkRenderPassSubpassFeedbackInfoEXT structure", + "page": "chapters/renderpass.html" + } + ] + }, + "VkRenderPassTileShadingCreateInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-tileShading-10658", + "text": "If the tileShading feature is not enabled, VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM must not be included in flags", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-flags-10659", + "text": "If VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM is not included in flags or the tileShadingApron feature is not enabled, tileApronSize must be (0,0)", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-flags-10660", + "text": "If VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM is not included in flags, or neither the tileShadingPerTileDispatch and tileShadingPerTileDraw features are enabled, flags must not include VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-tileShadingAnisotropicApron-10661", + "text": "If the tileShadingAnisotropicApron feature is not enabled, tileApronSize.x and must be equal to tileApronSize.y", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-tileApronSize-10662", + "text": "tileApronSize.x must be less than or equal to maxApronSize", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-tileApronSize-10663", + "text": "tileApronSize.y must be less than or equal to maxApronSize", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkRenderPassTileShadingCreateInfoQCOM-flags-parameter", + "text": "flags must be a valid combination of VkTileShadingRenderPassFlagBitsQCOM values", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdBeginPerTileExecutionQCOM": { + "core": [ + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-None-10664", + "text": "The current render pass must be a tile shading render pass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-None-10665", + "text": "The tileShadingPerTileDispatch or tileShadingPerTileDraw feature must be enabled", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-pPerTileBeginInfo-parameter", + "text": "pPerTileBeginInfo must be a valid pointer to a valid VkPerTileBeginInfoQCOM structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdBeginPerTileExecutionQCOM-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + } + ] + }, + "VkPerTileBeginInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkPerTileBeginInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PER_TILE_BEGIN_INFO_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkPerTileBeginInfoQCOM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCmdEndPerTileExecutionQCOM": { + "core": [ + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-None-10666", + "text": "The per-tile execution model must have been enabled in the current render pass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-None-10667", + "text": "The current render pass must be a tile shading render pass", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-pPerTileEndInfo-parameter", + "text": "pPerTileEndInfo must be a valid pointer to a valid VkPerTileEndInfoQCOM structure", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-vkCmdEndPerTileExecutionQCOM-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/renderpass.html" + } + ] + }, + "VkPerTileEndInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkPerTileEndInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM", + "page": "chapters/renderpass.html" + }, + { + "vuid": "VUID-VkPerTileEndInfoQCOM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/renderpass.html" + } + ] + }, + "vkCreateShadersEXT": { + "core": [ + { + "vuid": "VUID-vkCreateShadersEXT-stage-09670", + "text": "If the stage member of any element of pCreateInfos is VK_SHADER_STAGE_COMPUTE_BIT, device must support at least one queue family with the VK_QUEUE_COMPUTE_BIT capability", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-stage-09671", + "text": "If the stage member of any element of pCreateInfos is VK_SHADER_STAGE_TASK_BIT_EXT, VK_SHADER_STAGE_MESH_BIT_EXT, VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, or VK_SHADER_STAGE_FRAGMENT_BIT, device must support at least one queue family with the VK_QUEUE_GRAPHICS_BIT capability", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-None-08400", + "text": "The shaderObject feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08402", + "text": "If the flags member of any element of pCreateInfos includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the flags member of all other elements of pCreateInfos whose stage is VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, or VK_SHADER_STAGE_FRAGMENT_BIT must also include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08403", + "text": "If the flags member of any element of pCreateInfos includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the flags member of all other elements of pCreateInfos whose stage is VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT must also include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08404", + "text": "If the flags member of any element of pCreateInfos whose stage is VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, there must be no member of pCreateInfos whose stage is VK_SHADER_STAGE_VERTEX_BIT and whose flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08405", + "text": "If there is any element of pCreateInfos whose stage is VK_SHADER_STAGE_MESH_BIT_EXT and whose flags member includes both VK_SHADER_CREATE_LINK_STAGE_BIT_EXT and VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT, there must be no element of pCreateInfos whose stage is VK_SHADER_STAGE_TASK_BIT_EXT and whose flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08409", + "text": "For each element of pCreateInfos whose flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, if there is any other element of pCreateInfos whose stage is logically later than the stage of the former and whose flags member also includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the nextStage of the former must be equal to the stage of the element with the logically earliest stage following the stage of the former whose flags member also includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08410", + "text": "The stage member of each element of pCreateInfos whose flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT must be unique", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08411", + "text": "The codeType member of all elements of pCreateInfos whose flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXT must be the same", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08867", + "text": "If pCreateInfos contains elements with both VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements' flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage’s pCode contains an OpExecutionMode instruction specifying the type of subdivision, it must match the subdivision type specified in the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08868", + "text": "If pCreateInfos contains elements with both VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements' flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage’s pCode contains an OpExecutionMode instruction specifying the orientation of triangles, it must match the triangle orientation specified in the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08869", + "text": "If pCreateInfos contains elements with both VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements' flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage’s pCode contains an OpExecutionMode instruction specifying PointMode, the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage must also contain an OpExecutionMode instruction specifying PointMode", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08870", + "text": "If pCreateInfos contains elements with both VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements' flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage’s pCode contains an OpExecutionMode instruction specifying the spacing of segments on the edges of tessellated primitives, it must match the segment spacing specified in the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-08871", + "text": "If pCreateInfos contains elements with both VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements' flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage’s pCode contains an OpExecutionMode instruction specifying the output patch size, it must match the output patch size specified in the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-09632", + "text": "If pCreateInfos contains a VK_SHADER_STAGE_MESH_BIT_EXT with codeType of VK_SHADER_CODE_TYPE_SPIRV_EXT and VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT is not set, then the mesh shader’s entry point must not declare a variable with a DrawIndex BuiltIn decoration", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkShaderCreateInfoEXT structures", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-pShaders-parameter", + "text": "pShaders must be a valid pointer to an array of createInfoCount VkShaderEXT handles", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShadersEXT-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/shaders.html" + } + ] + }, + "VkShaderCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeSize-08735", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, codeSize must be a multiple of 4", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08736", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pCode must point to valid SPIR-V code, formatted and packed as described by the Khronos SPIR-V Specification", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08737", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pCode must adhere to the validation rules described by the Validation Rules within a Module section of the SPIR-V Environment appendix", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08738", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pCode must declare the Shader capability for SPIR-V code", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08739", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pCode must not declare any capability that is not supported by the API, as described by the Capabilities section of the SPIR-V Environment appendix", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08740", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08741", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pCode must not declare any SPIR-V extension that is not supported by the API, as described by the Extension section of the SPIR-V Environment appendix", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08742", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and pCode declares any of the SPIR-V extensions listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08412", + "text": "If stage is not VK_SHADER_STAGE_TASK_BIT_EXT, VK_SHADER_STAGE_MESH_BIT_EXT, VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, or VK_SHADER_STAGE_FRAGMENT_BIT, flags must not include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08486", + "text": "If stage is not VK_SHADER_STAGE_FRAGMENT_BIT, flags must not include VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08487", + "text": "If the attachmentFragmentShadingRate feature is not enabled, flags must not include VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08488", + "text": "If stage is not VK_SHADER_STAGE_FRAGMENT_BIT, flags must not include VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08489", + "text": "If the fragmentDensityMap feature is not enabled, flags must not include VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-09404", + "text": "If flags includes VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, the subgroupSizeControl feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-09405", + "text": "If flags includes VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, the computeFullSubgroups feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-11005", + "text": "If flags includes VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT, then the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-11006", + "text": "If flags includes VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT, then the identified entry point must not specify Xfb execution mode", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08992", + "text": "If flags includes VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, stage must be one of VK_SHADER_STAGE_MESH_BIT_EXT, VK_SHADER_STAGE_TASK_BIT_EXT, or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08485", + "text": "If stage is not VK_SHADER_STAGE_COMPUTE_BIT, flags must not include VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08414", + "text": "If stage is not VK_SHADER_STAGE_MESH_BIT_EXT, flags must not include VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08416", + "text": "If flags includes both VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT and VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT, the local workgroup size in the X dimension of the shader must be a multiple of maxSubgroupSize", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-08417", + "text": "If flags includes VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT but not VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT and no VkShaderRequiredSubgroupSizeCreateInfoEXT structure is included in the pNext chain, the local workgroup size in the X dimension of the shader must be a multiple of subgroupSize", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08418", + "text": "stage must not be VK_SHADER_STAGE_ALL_GRAPHICS or VK_SHADER_STAGE_ALL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08419", + "text": "If the tessellationShader feature is not enabled, stage must not be VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08420", + "text": "If the geometryShader feature is not enabled, stage must not be VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08421", + "text": "If the taskShader feature is not enabled, stage must not be VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08422", + "text": "If the meshShader feature is not enabled, stage must not be VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08425", + "text": "stage must not be VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-08426", + "text": "stage must not be VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08427", + "text": "If stage is VK_SHADER_STAGE_VERTEX_BIT, nextStage must not include any bits other than VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, and VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08428", + "text": "If the tessellationShader feature is not enabled, nextStage must not include VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08429", + "text": "If the geometryShader feature is not enabled, nextStage must not include VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08430", + "text": "If stage is VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, nextStage must not include any bits other than VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08431", + "text": "If stage is VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, nextStage must not include any bits other than VK_SHADER_STAGE_GEOMETRY_BIT and VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08433", + "text": "If stage is VK_SHADER_STAGE_GEOMETRY_BIT, nextStage must not include any bits other than VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08434", + "text": "If stage is VK_SHADER_STAGE_FRAGMENT_BIT or VK_SHADER_STAGE_COMPUTE_BIT, nextStage must be 0", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08435", + "text": "If stage is VK_SHADER_STAGE_TASK_BIT_EXT, nextStage must not include any bits other than VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-08436", + "text": "If stage is VK_SHADER_STAGE_MESH_BIT_EXT, nextStage must not include any bits other than VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pName-08440", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pName must be the name of an OpEntryPoint in pCode with an execution model that matches stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08492", + "text": "If codeType is VK_SHADER_CODE_TYPE_BINARY_EXT, pCode must be aligned to 16 bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08493", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, pCode must be aligned to 4 bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08448", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the identified entry point includes any variable in its interface that is declared with the ClipDistance BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxClipDistances", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08449", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the identified entry point includes any variable in its interface that is declared with the CullDistance BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxCullDistances", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08450", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the identified entry point includes variables in its interface that are declared with the ClipDistance BuiltIn decoration and variables in its interface that are declared with the CullDistance BuiltIn decoration, those variables must not have array sizes which sum to more than VkPhysicalDeviceLimits::maxCombinedClipAndCullDistances", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08451", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and the identified entry point includes any variable in its interface that is declared with the SampleMask BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxSampleMaskWords", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08453", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified entry point has an OpExecutionMode instruction specifying a patch size with OutputVertices, the patch size must be greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxTessellationPatchSize", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08454", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry point must have an OpExecutionMode instruction specifying a maximum output vertex count that is greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxGeometryOutputVertices", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08455", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry point must have an OpExecutionMode instruction specifying an invocation count that is greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxGeometryShaderInvocations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08456", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is a pre-rasterization shader stage, and the identified entry point writes to Layer for any primitive, it must write the same value to Layer for all vertices of a given primitive", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08457", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is a pre-rasterization shader stage, and the identified entry point writes to ViewportIndex for any primitive, it must write the same value to ViewportIndex for all vertices of a given primitive", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08459", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_FRAGMENT_BIT, and the identified entry point writes to FragDepth in any execution path, all execution paths that are not exclusive to helper invocations must either discard the fragment, or write or initialize the value of FragDepth", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-08460", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, the shader code in pCode must be valid as described by the Khronos SPIR-V Specification after applying the specializations provided in pSpecializationInfo, if any, and then converting all specialization constants into fixed constants", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-08872", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, pCode must contain an OpExecutionMode instruction specifying the type of subdivision", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-08873", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, pCode must contain an OpExecutionMode instruction specifying the orientation of triangles generated by the tessellator", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-08874", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, pCode must contain an OpExecutionMode instruction specifying the spacing of segments on the edges of tessellated primitives", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-08875", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and stage is VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, pCode must contain an OpExecutionMode instruction specifying the output patch size", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pPushConstantRanges-10063", + "text": "Any two elements of pPushConstantRanges must not include the same stage in stageFlags", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-10064", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and if a push constant block is declared in a shader, then an element of pPushConstantRanges::stageFlags must match stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-10065", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and if a push constant block is declared in a shader, the block must be contained inside the element of pPushConstantRanges that matches the stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-10383", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and a resource variable is declared in a shader, the corresponding descriptor set in pSetLayouts must match the shader stage", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-10384", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and a resource variable is declared in a shader, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set in pSetLayouts must match the descriptor type", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-10385", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and a resource variable is declared in a shader as an array, the corresponding descriptor set in pSetLayouts must match the descriptor count", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-10386", + "text": "If codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and a resource variable is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineShaderStageRequiredSubgroupSizeCreateInfo or VkValidationFeaturesEXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-flags-parameter", + "text": "flags must be a valid combination of VkShaderCreateFlagBitsEXT values", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-stage-parameter", + "text": "stage must be a valid VkShaderStageFlagBits value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-nextStage-parameter", + "text": "nextStage must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeType-parameter", + "text": "codeType must be a valid VkShaderCodeTypeEXT value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pCode-parameter", + "text": "pCode must be a valid pointer to an array of codeSize bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pName-parameter", + "text": "If pName is not NULL, pName must be a null-terminated UTF-8 string", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pSetLayouts-parameter", + "text": "If setLayoutCount is not 0, and pSetLayouts is not NULL, pSetLayouts must be a valid pointer to an array of setLayoutCount valid VkDescriptorSetLayout handles", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pPushConstantRanges-parameter", + "text": "If pushConstantRangeCount is not 0, and pPushConstantRanges is not NULL, pPushConstantRanges must be a valid pointer to an array of pushConstantRangeCount valid VkPushConstantRange structures", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-pSpecializationInfo-parameter", + "text": "If pSpecializationInfo is not NULL, pSpecializationInfo must be a valid pointer to a valid VkSpecializationInfo structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderCreateInfoEXT-codeSize-arraylength", + "text": "codeSize must be greater than 0", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetShaderBinaryDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-None-08461", + "text": "The shaderObject feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-None-08499", + "text": "If pData is not NULL, it must be aligned to 16 bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-shader-parameter", + "text": "shader must be a valid VkShaderEXT handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-pDataSize-parameter", + "text": "pDataSize must be a valid pointer to a size_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-pData-parameter", + "text": "If the value referenced by pDataSize is not 0, and pData is not NULL, pData must be a valid pointer to an array of pDataSize bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderBinaryDataEXT-shader-parent", + "text": "shader must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkCmdBindShadersEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBindShadersEXT-None-08462", + "text": "The shaderObject feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pStages-08463", + "text": "Every element of pStages must be unique", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pStages-08464", + "text": "pStages must not contain VK_SHADER_STAGE_ALL_GRAPHICS or VK_SHADER_STAGE_ALL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pStages-08465", + "text": "pStages must not contain VK_SHADER_STAGE_RAYGEN_BIT_KHR, VK_SHADER_STAGE_ANY_HIT_BIT_KHR, VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, VK_SHADER_STAGE_MISS_BIT_KHR, VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or VK_SHADER_STAGE_CALLABLE_BIT_KHR", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pStages-08467", + "text": "pStages must not contain VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pStages-08468", + "text": "pStages must not contain VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-08469", + "text": "For each element of pStages, if pShaders is not NULL, and the element of the pShaders array with the same index is not VK_NULL_HANDLE, it must have been created with a stage equal to the corresponding element of pStages", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-08470", + "text": "If pStages contains both VK_SHADER_STAGE_TASK_BIT_EXT and VK_SHADER_STAGE_VERTEX_BIT, and pShaders is not NULL, and the same index in pShaders as VK_SHADER_STAGE_TASK_BIT_EXT in pStages is not VK_NULL_HANDLE, the same index in pShaders as VK_SHADER_STAGE_VERTEX_BIT in pStages must be VK_NULL_HANDLE", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-08471", + "text": "If pStages contains both VK_SHADER_STAGE_MESH_BIT_EXT and VK_SHADER_STAGE_VERTEX_BIT, and pShaders is not NULL, and the same index in pShaders as VK_SHADER_STAGE_MESH_BIT_EXT in pStages is not VK_NULL_HANDLE, the same index in pShaders as VK_SHADER_STAGE_VERTEX_BIT in pStages must be VK_NULL_HANDLE", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-08476", + "text": "If pStages contains VK_SHADER_STAGE_COMPUTE_BIT, the VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-08477", + "text": "If pStages contains VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, or VK_SHADER_STAGE_FRAGMENT_BIT, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-08478", + "text": "If pStages contains VK_SHADER_STAGE_MESH_BIT_EXT or VK_SHADER_STAGE_TASK_BIT_EXT, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pStages-parameter", + "text": "pStages must be a valid pointer to an array of stageCount valid VkShaderStageFlagBits values", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-pShaders-parameter", + "text": "If pShaders is not NULL, pShaders must be a valid pointer to an array of stageCount valid or VK_NULL_HANDLE VkShaderEXT handles", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-stageCount-arraylength", + "text": "stageCount must be greater than 0", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdBindShadersEXT-commonparent", + "text": "Both of commandBuffer, and the elements of pShaders that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/shaders.html" + } + ] + }, + "vkDestroyShaderEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyShaderEXT-None-08481", + "text": "The shaderObject feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-shader-08482", + "text": "All submitted commands that refer to shader must have completed execution", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-pAllocator-08483", + "text": "If VkAllocationCallbacks were provided when shader was created, a compatible set of callbacks must be provided here", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-pAllocator-08484", + "text": "If no VkAllocationCallbacks were provided when shader was created, pAllocator must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-shader-parameter", + "text": "If shader is not VK_NULL_HANDLE, shader must be a valid VkShaderEXT handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderEXT-shader-parent", + "text": "If shader is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkCreateShaderModule": { + "core": [ + { + "vuid": "VUID-vkCreateShaderModule-pCreateInfo-06904", + "text": "If pCreateInfo is not NULL, pCreateInfo->pNext must be NULL or a pointer to a valid instance of", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShaderModule-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShaderModule-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkShaderModuleCreateInfo structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShaderModule-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateShaderModule-pShaderModule-parameter", + "text": "pShaderModule must be a valid pointer to a VkShaderModule handle", + "page": "chapters/shaders.html" + } + ] + }, + "VkShaderModuleCreateInfo": { + "core": [ + { + "vuid": "VUID-VkShaderModuleCreateInfo-codeSize-08735", + "text": "If pCode is a pointer to SPIR-V code, codeSize must be a multiple of 4", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08736", + "text": "If pCode is a pointer to SPIR-V code, pCode must point to valid SPIR-V code, formatted and packed as described by the Khronos SPIR-V Specification", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08737", + "text": "If pCode is a pointer to SPIR-V code, pCode must adhere to the validation rules described by the Validation Rules within a Module section of the SPIR-V Environment appendix", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08738", + "text": "If pCode is a pointer to SPIR-V code, pCode must declare the Shader capability for SPIR-V code", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08739", + "text": "If pCode is a pointer to SPIR-V code, pCode must not declare any capability that is not supported by the API, as described by the Capabilities section of the SPIR-V Environment appendix", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08740", + "text": "If pCode is a pointer to SPIR-V code, and pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08741", + "text": "If pCode is a pointer to SPIR-V code, pCode must not declare any SPIR-V extension that is not supported by the API, as described by the Extension section of the SPIR-V Environment appendix", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-08742", + "text": "If pCode is a pointer to SPIR-V code, and pCode declares any of the SPIR-V extensions listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-07912", + "text": "If the VK_NV_glsl_shader extension is not enabled, pCode must be a pointer to SPIR-V code", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-01379", + "text": "If pCode is a pointer to GLSL code, it must be valid GLSL code written to the GL_KHR_vulkan_glsl GLSL extension specification", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-codeSize-01085", + "text": "codeSize must be greater than 0", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleCreateInfo-pCode-parameter", + "text": "pCode must be a valid pointer to an array of \\(\\textrm{codeSize} \\over 4\\) uint32_t values", + "page": "chapters/shaders.html" + } + ] + }, + "VkShaderModuleValidationCacheCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkShaderModuleValidationCacheCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleValidationCacheCreateInfoEXT-validationCache-parameter", + "text": "validationCache must be a valid VkValidationCacheEXT handle", + "page": "chapters/shaders.html" + } + ] + }, + "vkDestroyShaderModule": { + "core": [ + { + "vuid": "VUID-vkDestroyShaderModule-shaderModule-01092", + "text": "If VkAllocationCallbacks were provided when shaderModule was created, a compatible set of callbacks must be provided here", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderModule-shaderModule-01093", + "text": "If no VkAllocationCallbacks were provided when shaderModule was created, pAllocator must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderModule-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderModule-shaderModule-parameter", + "text": "If shaderModule is not VK_NULL_HANDLE, shaderModule must be a valid VkShaderModule handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderModule-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyShaderModule-shaderModule-parent", + "text": "If shaderModule is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetShaderModuleIdentifierEXT": { + "core": [ + { + "vuid": "VUID-vkGetShaderModuleIdentifierEXT-shaderModuleIdentifier-06884", + "text": "shaderModuleIdentifier feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleIdentifierEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleIdentifierEXT-shaderModule-parameter", + "text": "shaderModule must be a valid VkShaderModule handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleIdentifierEXT-pIdentifier-parameter", + "text": "pIdentifier must be a valid pointer to a VkShaderModuleIdentifierEXT structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleIdentifierEXT-shaderModule-parent", + "text": "shaderModule must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetShaderModuleCreateInfoIdentifierEXT": { + "core": [ + { + "vuid": "VUID-vkGetShaderModuleCreateInfoIdentifierEXT-shaderModuleIdentifier-06885", + "text": "shaderModuleIdentifier feature must be enabled", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleCreateInfoIdentifierEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleCreateInfoIdentifierEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkShaderModuleCreateInfo structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetShaderModuleCreateInfoIdentifierEXT-pIdentifier-parameter", + "text": "pIdentifier must be a valid pointer to a VkShaderModuleIdentifierEXT structure", + "page": "chapters/shaders.html" + } + ] + }, + "VkShaderModuleIdentifierEXT": { + "core": [ + { + "vuid": "VUID-VkShaderModuleIdentifierEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SHADER_MODULE_IDENTIFIER_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkShaderModuleIdentifierEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + } + ] + }, + "vkCmdSetPatchControlPointsEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetPatchControlPointsEXT-None-09422", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdSetPatchControlPointsEXT-patchControlPoints-04874", + "text": "patchControlPoints must be greater than zero and less than or equal to VkPhysicalDeviceLimits::maxTessellationPatchSize", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdSetPatchControlPointsEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdSetPatchControlPointsEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdSetPatchControlPointsEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdSetPatchControlPointsEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkCooperativeMatrixPropertiesKHR structures", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkCooperativeMatrixFlexibleDimensionsPropertiesNV structures", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkCooperativeMatrixPropertiesNV structures", + "page": "chapters/shaders.html" + } + ] + }, + "VkCooperativeMatrixPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkCooperativeMatrixPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_KHR", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeMatrixPropertiesKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + } + ] + }, + "VkCooperativeMatrixFlexibleDimensionsPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkCooperativeMatrixFlexibleDimensionsPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeMatrixFlexibleDimensionsPropertiesNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + } + ] + }, + "VkCooperativeMatrixPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkCooperativeMatrixPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeMatrixPropertiesNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetPhysicalDeviceCooperativeVectorPropertiesNV": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeVectorPropertiesNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeVectorPropertiesNV-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCooperativeVectorPropertiesNV-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkCooperativeVectorPropertiesNV structures", + "page": "chapters/shaders.html" + } + ] + }, + "VkCooperativeVectorPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-inputType-parameter", + "text": "inputType must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-inputInterpretation-parameter", + "text": "inputInterpretation must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-matrixInterpretation-parameter", + "text": "matrixInterpretation must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-biasInterpretation-parameter", + "text": "biasInterpretation must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCooperativeVectorPropertiesNV-resultType-parameter", + "text": "resultType must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + } + ] + }, + "vkConvertCooperativeVectorMatrixNV": { + "core": [ + { + "vuid": "VUID-vkConvertCooperativeVectorMatrixNV-pInfo-10073", + "text": "If pInfo->srcData.hostAddress is NULL, then pInfo->dstData.hostAddress must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkConvertCooperativeVectorMatrixNV-pInfo-10074", + "text": "If pInfo->srcData.hostAddress is not NULL, then pInfo->srcSize must be large enough to contain the source matrix, based either on the standard matrix layout or based on the size filled out by this command", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkConvertCooperativeVectorMatrixNV-pInfo-10075", + "text": "If pInfo->dstData.hostAddress is not NULL, then the value pointed to by pInfo->pDstSize must be large enough to contain the destination matrix, based either on the standard matrix layout or based on the size filled out by this command", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkConvertCooperativeVectorMatrixNV-pInfo-10076", + "text": "If pInfo->dstData.hostAddress is not NULL, the source and destination memory ranges must not overlap", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkConvertCooperativeVectorMatrixNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkConvertCooperativeVectorMatrixNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkConvertCooperativeVectorMatrixInfoNV structure", + "page": "chapters/shaders.html" + } + ] + }, + "VkConvertCooperativeVectorMatrixInfoNV": { + "core": [ + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-srcLayout-10077", + "text": "If srcLayout is row-major or column-major, then srcStride must be greater than the length of a row/column, and a multiple of the element size", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-dstLayout-10078", + "text": "If dstLayout is row-major or column-major, then dstStride must be greater than the length of a row/column, and a multiple of the element size", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-srcComponentType-10079", + "text": "If srcComponentType is not a supported VkCooperativeVectorPropertiesNV::matrixInterpretation value as reported by vkGetPhysicalDeviceCooperativeVectorPropertiesNV, then srcComponentType must be VK_COMPONENT_TYPE_FLOAT32_KHR", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-dstComponentType-10080", + "text": "If dstComponentType is not a supported VkCooperativeVectorPropertiesNV::matrixInterpretation value as reported by vkGetPhysicalDeviceCooperativeVectorPropertiesNV, then dstComponentType must be VK_COMPONENT_TYPE_FLOAT32_KHR", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-srcComponentType-10081", + "text": "If srcComponentType and dstComponentType are not equal, then one must be VK_COMPONENT_TYPE_FLOAT32_KHR or VK_COMPONENT_TYPE_FLOAT16_KHR and the other must be a lower-precision floating-point type", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-dstComponentType-10082", + "text": "If dstComponentType is VK_COMPONENT_TYPE_FLOAT_E4M3_NV or VK_COMPONENT_TYPE_FLOAT_E5M2_NV, then dstLayout must be VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV or VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CONVERT_COOPERATIVE_VECTOR_MATRIX_INFO_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-srcData-parameter", + "text": "srcData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-pDstSize-parameter", + "text": "pDstSize must be a valid pointer to a size_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-dstData-parameter", + "text": "dstData must be a valid VkDeviceOrHostAddressKHR union", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-srcComponentType-parameter", + "text": "srcComponentType must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-dstComponentType-parameter", + "text": "dstComponentType must be a valid VkComponentTypeKHR value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-srcLayout-parameter", + "text": "srcLayout must be a valid VkCooperativeVectorMatrixLayoutNV value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkConvertCooperativeVectorMatrixInfoNV-dstLayout-parameter", + "text": "dstLayout must be a valid VkCooperativeVectorMatrixLayoutNV value", + "page": "chapters/shaders.html" + } + ] + }, + "vkCmdConvertCooperativeVectorMatrixNV": { + "core": [ + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-pInfo-10083", + "text": "For each element of pInfo, srcData::deviceAddress and dstData::deviceAddress must be valid device addresses", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-pInfo-10084", + "text": "For each element of pInfo, srcData::deviceAddress must be 64 byte aligned", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-pInfo-10085", + "text": "For each element of pInfo, dstData::deviceAddress must be 64 byte aligned", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-pInfo-10086", + "text": "For each element of pInfo, srcSize must be large enough to contain the source matrix, based either on the standard matrix layout or based on the size filled out by vkConvertCooperativeVectorMatrixNV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-pInfo-10087", + "text": "For each element of pInfo, the value pointed to by pDstSize must be large enough to contain the destination matrix, based either on the standard matrix layout or based on the size filled out by vkConvertCooperativeVectorMatrixNV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-None-10088", + "text": "Memory accessed by the sources and destinations of all of the conversions must not overlap", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-pInfos-parameter", + "text": "pInfos must be a valid pointer to an array of infoCount valid VkConvertCooperativeVectorMatrixInfoNV structures", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCmdConvertCooperativeVectorMatrixNV-infoCount-arraylength", + "text": "infoCount must be greater than 0", + "page": "chapters/shaders.html" + } + ] + }, + "vkCreateValidationCacheEXT": { + "core": [ + { + "vuid": "VUID-vkCreateValidationCacheEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateValidationCacheEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkValidationCacheCreateInfoEXT structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateValidationCacheEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateValidationCacheEXT-pValidationCache-parameter", + "text": "pValidationCache must be a valid pointer to a VkValidationCacheEXT handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateValidationCacheEXT-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/shaders.html" + } + ] + }, + "VkValidationCacheCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01534", + "text": "If initialDataSize is not 0, it must be equal to the size of pInitialData, as returned by vkGetValidationCacheDataEXT when pInitialData was originally retrieved", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01535", + "text": "If initialDataSize is not 0, pInitialData must have been retrieved from a previous call to vkGetValidationCacheDataEXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkValidationCacheCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkValidationCacheCreateInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkValidationCacheCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkValidationCacheCreateInfoEXT-pInitialData-parameter", + "text": "If initialDataSize is not 0, pInitialData must be a valid pointer to an array of initialDataSize bytes", + "page": "chapters/shaders.html" + } + ] + }, + "vkMergeValidationCachesEXT": { + "core": [ + { + "vuid": "VUID-vkMergeValidationCachesEXT-dstCache-01536", + "text": "dstCache must not appear in the list of source caches", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkMergeValidationCachesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parameter", + "text": "dstCache must be a valid VkValidationCacheEXT handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkMergeValidationCachesEXT-pSrcCaches-parameter", + "text": "pSrcCaches must be a valid pointer to an array of srcCacheCount valid VkValidationCacheEXT handles", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkMergeValidationCachesEXT-srcCacheCount-arraylength", + "text": "srcCacheCount must be greater than 0", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkMergeValidationCachesEXT-dstCache-parent", + "text": "dstCache must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkMergeValidationCachesEXT-pSrcCaches-parent", + "text": "Each element of pSrcCaches must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetValidationCacheDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetValidationCacheDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parameter", + "text": "validationCache must be a valid VkValidationCacheEXT handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetValidationCacheDataEXT-pDataSize-parameter", + "text": "pDataSize must be a valid pointer to a size_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetValidationCacheDataEXT-pData-parameter", + "text": "If the value referenced by pDataSize is not 0, and pData is not NULL, pData must be a valid pointer to an array of pDataSize bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetValidationCacheDataEXT-validationCache-parent", + "text": "validationCache must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkDestroyValidationCacheEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-01537", + "text": "If VkAllocationCallbacks were provided when validationCache was created, a compatible set of callbacks must be provided here", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-01538", + "text": "If no VkAllocationCallbacks were provided when validationCache was created, pAllocator must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyValidationCacheEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-parameter", + "text": "If validationCache is not VK_NULL_HANDLE, validationCache must be a valid VkValidationCacheEXT handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyValidationCacheEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyValidationCacheEXT-validationCache-parent", + "text": "If validationCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkCreateCudaModuleNV": { + "core": [ + { + "vuid": "VUID-vkCreateCudaModuleNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaModuleNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkCudaModuleCreateInfoNV structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaModuleNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaModuleNV-pModule-parameter", + "text": "pModule must be a valid pointer to a VkCudaModuleNV handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaModuleNV-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/shaders.html" + } + ] + }, + "VkCudaModuleCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkCudaModuleCreateInfoNV-dataSize-09413", + "text": "dataSize must be the total size in bytes of the PTX files or binary cache passed to pData", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaModuleCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaModuleCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaModuleCreateInfoNV-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaModuleCreateInfoNV-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/shaders.html" + } + ] + }, + "vkCreateCudaFunctionNV": { + "core": [ + { + "vuid": "VUID-vkCreateCudaFunctionNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaFunctionNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkCudaFunctionCreateInfoNV structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaFunctionNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaFunctionNV-pFunction-parameter", + "text": "pFunction must be a valid pointer to a VkCudaFunctionNV handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkCreateCudaFunctionNV-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/shaders.html" + } + ] + }, + "VkCudaFunctionCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkCudaFunctionCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaFunctionCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaFunctionCreateInfoNV-module-parameter", + "text": "module must be a valid VkCudaModuleNV handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-VkCudaFunctionCreateInfoNV-pName-parameter", + "text": "pName must be a null-terminated UTF-8 string", + "page": "chapters/shaders.html" + } + ] + }, + "vkDestroyCudaFunctionNV": { + "core": [ + { + "vuid": "VUID-vkDestroyCudaFunctionNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyCudaFunctionNV-function-parameter", + "text": "function must be a valid VkCudaFunctionNV handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyCudaFunctionNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyCudaFunctionNV-function-parent", + "text": "function must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkDestroyCudaModuleNV": { + "core": [ + { + "vuid": "VUID-vkDestroyCudaModuleNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyCudaModuleNV-module-parameter", + "text": "module must be a valid VkCudaModuleNV handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyCudaModuleNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkDestroyCudaModuleNV-module-parent", + "text": "module must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkGetCudaModuleCacheNV": { + "core": [ + { + "vuid": "VUID-vkGetCudaModuleCacheNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetCudaModuleCacheNV-module-parameter", + "text": "module must be a valid VkCudaModuleNV handle", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetCudaModuleCacheNV-pCacheSize-parameter", + "text": "pCacheSize must be a valid pointer to a size_t value", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetCudaModuleCacheNV-pCacheData-parameter", + "text": "If the value referenced by pCacheSize is not 0, and pCacheData is not NULL, pCacheData must be a valid pointer to an array of pCacheSize bytes", + "page": "chapters/shaders.html" + }, + { + "vuid": "VUID-vkGetCudaModuleCacheNV-module-parent", + "text": "module must have been created, allocated, or retrieved from device", + "page": "chapters/shaders.html" + } + ] + }, + "vkCreateComputePipelines": { + "core": [ + { + "vuid": "VUID-vkCreateComputePipelines-device-09661", + "text": "device must support at least one queue family with the VK_QUEUE_COMPUTE_BIT capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-flags-00695", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the basePipelineIndex member of that same element is not -1, basePipelineIndex must be less than the index into pCreateInfos that corresponds to that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-flags-00696", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pipelineCache-02873", + "text": "If pipelineCache was created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access to pipelineCache must be externally synchronized", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pNext-09616", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pNext-09617", + "text": "If a VkPipelineCreateFlags2CreateInfoKHR structure with the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag set is included in the pNext chain of any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-binaryCount-09620", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-binaryCount-09621", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-binaryCount-09622", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkComputePipelineCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pPipelines-parameter", + "text": "pPipelines must be a valid pointer to an array of createInfoCount VkPipeline handles", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateComputePipelines-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkComputePipelineCreateInfo": { + "core": [ + { + "vuid": "VUID-VkComputePipelineCreateInfo-None-09497", + "text": "If the pNext chain does not include a VkPipelineCreateFlags2CreateInfo structure, flags must be a valid combination of VkPipelineCreateFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-07984", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is -1, basePipelineHandle must be a valid compute VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-07985", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is VK_NULL_HANDLE, basePipelineIndex must be a valid index into the calling command’s pCreateInfos parameter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-07986", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, basePipelineIndex must be -1 or basePipelineHandle must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-07987", + "text": "If a push constant block is declared in a shader, a push constant range in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-10069", + "text": "If a push constant block is declared in a shader, the block must be contained inside the push constant range in layout that matches the stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-07988", + "text": "If a resource variable is declared in a shader, the corresponding descriptor set in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-07990", + "text": "If a resource variable is declared in a shader, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set in layout must match the descriptor type", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-07991", + "text": "If a resource variable is declared in a shader as an array, the corresponding descriptor set in layout must match the descriptor count", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-None-10391", + "text": "If a resource variables is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03365", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03366", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03367", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03368", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03369", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03370", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-03576", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-04945", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-09007", + "text": "If the VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature is not enabled, flags must not include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-09008", + "text": "If flags includes VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the pNext chain must include a pointer to a valid instance of VkComputePipelineIndirectBufferInfoNV specifying the address where the pipeline’s metadata will be saved", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-11007", + "text": "If flags includes VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT, then the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-pipelineCreationCacheControl-02875", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-stage-00701", + "text": "The stage member of stage must be VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-stage-00702", + "text": "The shader code for the entry point identified by stage and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-01687", + "text": "The number of resources in layout accessible to the compute shader stage must be less than or equal to VkPhysicalDeviceLimits::maxPerStageResources", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-shaderEnqueue-09177", + "text": "If the shaderEnqueue feature is not enabled, flags must not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-09178", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the shader specified by stage must not declare the ShaderEnqueueAMDX capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-pipelineStageCreationFeedbackCount-06566", + "text": "If VkPipelineCreationFeedbackCreateInfo::pipelineStageCreationFeedbackCount is not 0, it must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-07367", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-flags-07996", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkComputePipelineIndirectBufferInfoNV, VkPipelineBinaryInfoKHR, VkPipelineCompilerControlCreateInfoAMD, VkPipelineCreateFlags2CreateInfo, VkPipelineCreationFeedbackCreateInfo, VkPipelineRobustnessCreateInfo, or VkSubpassShadingPipelineCreateInfoHUAWEI", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-stage-parameter", + "text": "stage must be a valid VkPipelineShaderStageCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineCreateInfo-commonparent", + "text": "Both of basePipelineHandle, and layout that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineShaderStageCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00704", + "text": "If the geometryShader feature is not enabled, stage must not be VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00705", + "text": "If the tessellationShader feature is not enabled, stage must not be VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02091", + "text": "If the meshShaders feature is not enabled, stage must not be VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02092", + "text": "If the taskShaders feature is not enabled, stage must not be VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-clustercullingShader-07813", + "text": "If the clustercullingShader feature is not enabled, stage must not be VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00706", + "text": "stage must not be VK_SHADER_STAGE_ALL_GRAPHICS, or VK_SHADER_STAGE_ALL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pName-00707", + "text": "pName must be the name of an OpEntryPoint in module with an execution model that matches stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708", + "text": "If the identified entry point includes any variable in its interface that is declared with the ClipDistance BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxClipDistances", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709", + "text": "If the identified entry point includes any variable in its interface that is declared with the CullDistance BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxCullDistances", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710", + "text": "If the identified entry point includes variables in its interface that are declared with the ClipDistance BuiltIn decoration and variables in its interface that are declared with the CullDistance BuiltIn decoration, those variables must not have array sizes which sum to more than VkPhysicalDeviceLimits::maxCombinedClipAndCullDistances", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711", + "text": "If the identified entry point includes any variable in its interface that is declared with the SampleMask BuiltIn decoration, that variable must not have an array size greater than VkPhysicalDeviceLimits::maxSampleMaskWords", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00713", + "text": "If stage is VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified entry point has an OpExecutionMode instruction specifying a patch size with OutputVertices, the patch size must be greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxTessellationPatchSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00714", + "text": "If stage is VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry point must have an OpExecutionMode instruction specifying a maximum output vertex count that is greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxGeometryOutputVertices", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-00715", + "text": "If stage is VK_SHADER_STAGE_GEOMETRY_BIT, the identified entry point must have an OpExecutionMode instruction specifying an invocation count that is greater than 0 and less than or equal to VkPhysicalDeviceLimits::maxGeometryShaderInvocations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02596", + "text": "If stage is either VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point writes to Layer for any primitive, it must write the same value to Layer for all vertices of a given primitive", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-02597", + "text": "If stage is either VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or VK_SHADER_STAGE_GEOMETRY_BIT, and the identified entry point writes to ViewportIndex for any primitive, it must write the same value to ViewportIndex for all vertices of a given primitive", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-06685", + "text": "If stage is VK_SHADER_STAGE_FRAGMENT_BIT, and the identified entry point writes to FragDepth in any execution path, all execution paths that are not exclusive to helper invocations must either discard the fragment, or write or initialize the value of FragDepth", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-06686", + "text": "If stage is VK_SHADER_STAGE_FRAGMENT_BIT, and the identified entry point writes to FragStencilRefEXT in any execution path, all execution paths that are not exclusive to helper invocations must either discard the fragment, or write or initialize the value of FragStencilRefEXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02784", + "text": "If flags has the VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT flag set, the subgroupSizeControl feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02785", + "text": "If flags has the VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag set, the computeFullSubgroups feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-08988", + "text": "If flags includes VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT, stage must be one of VK_SHADER_STAGE_MESH_BIT_EXT, VK_SHADER_STAGE_TASK_BIT_EXT, or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02754", + "text": "If a VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is included in the pNext chain, flags must not have the VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02755", + "text": "If a VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is included in the pNext chain, the subgroupSizeControl feature must be enabled, and stage must be a valid bit specified in requiredSubgroupSizeStages", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02756", + "text": "If a VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is included in the pNext chain and stage is VK_SHADER_STAGE_COMPUTE_BIT, VK_SHADER_STAGE_MESH_BIT_EXT, or VK_SHADER_STAGE_TASK_BIT_EXT, the local workgroup size of the shader must be less than or equal to the product of VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::requiredSubgroupSize and maxComputeWorkgroupSubgroups", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-02757", + "text": "If a VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is included in the pNext chain, and flags has the VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag set, the local workgroup size in the X dimension of the pipeline must be a multiple of VkPipelineShaderStageRequiredSubgroupSizeCreateInfo::requiredSubgroupSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02758", + "text": "If flags has both the VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT and VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT flags set, the local workgroup size in the X dimension of the pipeline must be a multiple of maxSubgroupSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-02759", + "text": "If flags has the VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag set and flags does not have the VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT flag set and no VkPipelineShaderStageRequiredSubgroupSizeCreateInfo structure is included in the pNext chain, the local workgroup size in the X dimension of the pipeline must be a multiple of subgroupSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-module-08987", + "text": "If module uses the OpTypeCooperativeMatrixKHR instruction with a Scope equal to Subgroup, then the local workgroup size in the X dimension of the pipeline must be a multiple of the effective subgroup size.", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-module-10169", + "text": "If module uses the OpTypeCooperativeMatrixKHR instruction with a Scope equal to Workgroup, then the local workgroup size in the X dimension of the pipeline must be a multiple of the effective subgroup size and the total local workgroup size must be a power of two multiple of the effective subgroup size and must be less than or equal to cooperativeMatrixWorkgroupScopeMaxWorkgroupSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-08771", + "text": "If a shader module identifier is not specified for this stage, module must be a valid VkShaderModule , or the pNext chain of the parent Vk*CreateInfo structure must set VkPipelineBinaryInfoKHR::binaryCount to a value greater than 0, if none of the following features are enabled:", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-06845", + "text": "If a shader module identifier is not specified for this stage, module must be a valid VkShaderModule, or there must be a valid VkShaderModuleCreateInfo structure in the pNext chain , or the pNext chain of the parent Vk*CreateInfo structure must set VkPipelineBinaryInfoKHR::binaryCount to a value greater than 0,", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-06844", + "text": "If a shader module identifier is specified for this stage, the pNext chain must not include a VkShaderModuleCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-06848", + "text": "If a shader module identifier is specified for this stage, module must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-06849", + "text": "If a shader module identifier is not specified, the shader code used by the pipeline must be valid as described by the Khronos SPIR-V Specification after applying the specializations provided in pSpecializationInfo, if any, and then converting all specialization constants into fixed constants", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDebugUtilsObjectNameInfoEXT, VkPipelineRobustnessCreateInfo, VkPipelineShaderStageModuleIdentifierCreateInfoEXT, VkPipelineShaderStageNodeCreateInfoAMDX, VkPipelineShaderStageRequiredSubgroupSizeCreateInfo, VkShaderModuleCreateInfo, or VkShaderModuleValidationCacheCreateInfoEXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkPipelineShaderStageCreateFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-stage-parameter", + "text": "stage must be a valid VkShaderStageFlagBits value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-module-parameter", + "text": "If module is not VK_NULL_HANDLE, module must be a valid VkShaderModule handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pName-parameter", + "text": "pName must be a null-terminated UTF-8 string", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-parameter", + "text": "If pSpecializationInfo is not NULL, pSpecializationInfo must be a valid pointer to a valid VkSpecializationInfo structure", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineShaderStageRequiredSubgroupSizeCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02760", + "text": "requiredSubgroupSize must be a power-of-two integer", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02761", + "text": "requiredSubgroupSize must be greater or equal to minSubgroupSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-requiredSubgroupSize-02762", + "text": "requiredSubgroupSize must be less than or equal to maxSubgroupSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO", + "page": "chapters/pipelines.html" + } + ] + }, + "VkSubpassShadingPipelineCreateInfoHUAWEI": { + "core": [ + { + "vuid": "VUID-VkSubpassShadingPipelineCreateInfoHUAWEI-subpass-04946", + "text": "subpass must be created with VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI bind point", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkSubpassShadingPipelineCreateInfoHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkSubpassShadingPipelineCreateInfoHUAWEI-renderPass-parameter", + "text": "renderPass must be a valid VkRenderPass handle", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI": { + "core": [ + { + "vuid": "VUID-vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI-renderpass-parameter", + "text": "renderpass must be a valid VkRenderPass handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI-pMaxWorkgroupSize-parameter", + "text": "pMaxWorkgroupSize must be a valid pointer to VkExtent2D structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI-renderpass-parent", + "text": "renderpass must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineRobustnessCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06926", + "text": "If the pipelineRobustness feature is not enabled, storageBuffers must be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06927", + "text": "If the pipelineRobustness feature is not enabled, uniformBuffers must be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06928", + "text": "If the pipelineRobustness feature is not enabled, vertexInputs must be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06929", + "text": "If the pipelineRobustness feature is not enabled, images must be VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-robustImageAccess-06930", + "text": "If the robustImageAccess feature is not supported, images must not be VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06931", + "text": "If the robustBufferAccess2 feature is not supported, storageBuffers must not be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06932", + "text": "If the robustBufferAccess2 feature is not supported, uniformBuffers must not be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06933", + "text": "If the robustBufferAccess2 feature is not supported, vertexInputs must not be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-robustImageAccess2-06934", + "text": "If the robustImageAccess2 feature is not supported, images must not be VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-storageBuffers-10636", + "text": "If storageBuffers is VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, and either the descriptorBindingStorageBufferUpdateAfterBind feature or the descriptorBindingStorageTexelBufferUpdateAfterBind feature is enabled on the device, robustBufferAccessUpdateAfterBind must be VK_TRUE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-uniformBuffers-10637", + "text": "If uniformBuffers is VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, and either the descriptorBindingInlineUniformBlockUpdateAfterBind feature, the descriptorBindingUniformBufferUpdateAfterBind feature, or the descriptorBindingUniformTexelBufferUpdateAfterBind feature is enabled on the device, robustBufferAccessUpdateAfterBind must be VK_TRUE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-images-10638", + "text": "If images is VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS or VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, and either the descriptorBindingStorageImageUpdateAfterBind feature or the descriptorBindingSampledImageUpdateAfterBind feature is enabled on the device, robustBufferAccessUpdateAfterBind must be VK_TRUE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-storageBuffers-parameter", + "text": "storageBuffers must be a valid VkPipelineRobustnessBufferBehavior value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-uniformBuffers-parameter", + "text": "uniformBuffers must be a valid VkPipelineRobustnessBufferBehavior value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-vertexInputs-parameter", + "text": "vertexInputs must be a valid VkPipelineRobustnessBufferBehavior value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRobustnessCreateInfo-images-parameter", + "text": "images must be a valid VkPipelineRobustnessImageBehavior value", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineShaderStageModuleIdentifierCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pNext-06850", + "text": "If this structure is included in a pNext chain and identifierSize is not equal to 0, the shaderModuleIdentifier feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pNext-06851", + "text": "If this structure is included in a pNext chain of VkPipelineShaderStageCreateInfo and identifierSize is not equal to 0, the pipeline must be created with the VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-identifierSize-06852", + "text": "identifierSize must be less-or-equal to VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageModuleIdentifierCreateInfoEXT-pIdentifier-parameter", + "text": "If identifierSize is not 0, pIdentifier must be a valid pointer to an array of identifierSize uint8_t values", + "page": "chapters/pipelines.html" + } + ] + }, + "VkComputePipelineIndirectBufferInfoNV": { + "core": [ + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-deviceGeneratedComputePipelines-09009", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-flags-09010", + "text": "The pipeline creation flags in VkComputePipelineCreateInfo::flags must include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-deviceAddress-09011", + "text": "deviceAddress must be aligned to the VkMemoryRequirements2::memoryRequirements.alignment, as returned by vkGetPipelineIndirectMemoryRequirementsNV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-deviceAddress-09012", + "text": "deviceAddress must have been allocated from a buffer that was created with usage VK_BUFFER_USAGE_TRANSFER_DST_BIT and VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-size-09013", + "text": "size must be greater than or equal to the VkMemoryRequirements2::memoryRequirements.size, as returned by vkGetPipelineIndirectMemoryRequirementsNV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09014", + "text": "If pipelineDeviceAddressCaptureReplay is non-zero then the VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputeCaptureReplay feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09015", + "text": "If pipelineDeviceAddressCaptureReplay is non-zero then that address must have been allocated with flag VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09016", + "text": "If pipelineDeviceAddressCaptureReplay is non-zero, the pipeline must have been recreated for replay", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-pipelineDeviceAddressCaptureReplay-09017", + "text": "pipelineDeviceAddressCaptureReplay must satisfy the alignment and size requirements similar to deviceAddress", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkComputePipelineIndirectBufferInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCmdUpdatePipelineIndirectBufferNV": { + "core": [ + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-pipelineBindPoint-09018", + "text": "pipelineBindPoint must be VK_PIPELINE_BIND_POINT_COMPUTE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-09019", + "text": "pipeline must have been created with VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-09020", + "text": "pipeline must have been created with VkComputePipelineIndirectBufferInfoNV structure specifying a valid address where its metadata will be saved", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-deviceGeneratedComputePipelines-09021", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdUpdatePipelineIndirectBufferNV-commonparent", + "text": "Both of commandBuffer, and pipeline must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCreateGraphicsPipelines": { + "core": [ + { + "vuid": "VUID-vkCreateGraphicsPipelines-device-09662", + "text": "device must support at least one queue family with the VK_QUEUE_GRAPHICS_BIT capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-flags-00720", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the basePipelineIndex member of that same element is not -1, basePipelineIndex must be less than the index into pCreateInfos that corresponds to that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-flags-00721", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-02876", + "text": "If pipelineCache was created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access to pipelineCache must be externally synchronized", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pNext-09616", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pNext-09617", + "text": "If a VkPipelineCreateFlags2CreateInfoKHR structure with the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag set is included in the pNext chain of any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-binaryCount-09620", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-binaryCount-09621", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-binaryCount-09622", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkGraphicsPipelineCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pPipelines-parameter", + "text": "pPipelines must be a valid pointer to an array of createInfoCount VkPipeline handles", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateGraphicsPipelines-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkGraphicsPipelineCreateInfo": { + "core": [ + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-09497", + "text": "If the pNext chain does not include a VkPipelineCreateFlags2CreateInfo structure, flags must be a valid combination of VkPipelineCreateFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-07984", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is -1, basePipelineHandle must be a valid graphics VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-07985", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is VK_NULL_HANDLE, basePipelineIndex must be a valid index into the calling command’s pCreateInfos parameter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-07986", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, basePipelineIndex must be -1 or basePipelineHandle must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-07987", + "text": "If a push constant block is declared in a shader, a push constant range in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-10069", + "text": "If a push constant block is declared in a shader, the block must be contained inside the push constant range in layout that matches the stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-07988", + "text": "If a resource variable is declared in a shader, the corresponding descriptor set in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-07990", + "text": "If a resource variable is declared in a shader, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set in layout must match the descriptor type", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-07991", + "text": "If a resource variable is declared in a shader as an array, the corresponding descriptor set in layout must match the descriptor count", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-10391", + "text": "If a resource variables is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-02096", + "text": "If the pipeline requires pre-rasterization shader state the stage member of one element of pStages must be VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02095", + "text": "If the pipeline requires pre-rasterization shader state the geometric shader stages provided in pStages must be either from the mesh shading pipeline (stage is VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT) or from the primitive shading pipeline (stage is VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, or VK_SHADER_STAGE_GEOMETRY_BIT)", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-09631", + "text": "If the pipeline requires pre-rasterization shader state and pStages contains both VK_SHADER_STAGE_TASK_BIT_EXT and VK_SHADER_STAGE_MESH_BIT_EXT, then the mesh shader’s entry point must not declare a variable with a DrawIndex BuiltIn decoration", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-TaskNV-07063", + "text": "The shader stages for VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT must use either the TaskNV and MeshNV Execution Model or the TaskEXT and MeshEXT Execution Model, but must not use both", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00729", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes a tessellation control shader stage, it must include a tessellation evaluation shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00730", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes a tessellation evaluation shader stage, it must include a tessellation control shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-09022", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes a tessellation control shader stage, and the VK_EXT_extended_dynamic_state3 extension is not enabled or the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state is not set, pTessellationState must be a valid pointer to a valid VkPipelineTessellationStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pTessellationState-09023", + "text": "If pTessellationState is not NULL it must be a pointer to a valid VkPipelineTessellationStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00732", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes tessellation shader stages, the shader code of at least one stage must contain an OpExecutionMode instruction specifying the type of subdivision in the pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00733", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes tessellation shader stages, and the shader code of both stages contain an OpExecutionMode instruction specifying the type of subdivision in the pipeline, they must both specify the same subdivision mode", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00734", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes tessellation shader stages, the shader code of at least one stage must contain an OpExecutionMode instruction specifying the output patch size in the pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00735", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes tessellation shader stages, and the shader code of both contain an OpExecutionMode instruction specifying the out patch size in the pipeline, they must both specify the same patch size", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-08888", + "text": "If the pipeline is being created with pre-rasterization shader state and vertex input state and pStages includes tessellation shader stages, and either VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is not enabled or dynamicPrimitiveTopologyUnrestricted is VK_FALSE, the topology member of pInputAssembly must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-topology-08889", + "text": "If the pipeline is being created with pre-rasterization shader state and vertex input state and the topology member of pInputAssembly is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, and either VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is not enabled or dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then pStages must include tessellation shader stages", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-TessellationEvaluation-07723", + "text": "If the pipeline is being created with a TessellationEvaluation Execution Model, no Geometry Execution Model, uses the PointMode Execution Mode, and the shaderTessellationAndGeometryPointSize feature is enabled, a PointSize decorated variable must be written to if the maintenance5 feature is not enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-topology-08773", + "text": "If the pipeline is being created with a Vertex Execution Model and no TessellationEvaluation or Geometry Execution Model, and the topology member of pInputAssembly is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, and either VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is not enabled or dynamicPrimitiveTopologyUnrestricted is VK_FALSE, a PointSize decorated variable must be written to if the maintenance5 feature is not enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-maintenance5-08775", + "text": "If the maintenance5 feature is enabled and a PointSize decorated variable is written to, all execution paths must write to a PointSize decorated variable", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-TessellationEvaluation-07724", + "text": "If the pipeline is being created with a TessellationEvaluation Execution Model, no Geometry Execution Model, uses the PointMode Execution Mode, and the shaderTessellationAndGeometryPointSize feature is not enabled, a PointSize decorated variable must not be written to", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-shaderTessellationAndGeometryPointSize-08776", + "text": "If the pipeline is being created with a Geometry Execution Model, uses the OutputPoints Execution Mode, and the shaderTessellationAndGeometryPointSize feature is enabled, a PointSize decorated variable must be written to for every vertex emitted if the maintenance5 feature is not enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-Geometry-07726", + "text": "If the pipeline is being created with a Geometry Execution Model, uses the OutputPoints Execution Mode, and the shaderTessellationAndGeometryPointSize feature is not enabled, a PointSize decorated variable must not be written to", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00738", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes a geometry shader stage, and does not include any tessellation shader stages, its shader code must contain an OpExecutionMode instruction specifying an input primitive type that is compatible with the primitive topology specified in pInputAssembly", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00739", + "text": "If the pipeline requires pre-rasterization shader state and pStages includes a geometry shader stage, and also includes tessellation shader stages, its shader code must contain an OpExecutionMode instruction specifying an input primitive type that is compatible with the primitive topology that is output by the tessellation stages", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00740", + "text": "If the pipeline requires pre-rasterization shader state and fragment shader state, it includes both a fragment shader and a geometry shader, and the fragment shader code reads from an input variable that is decorated with PrimitiveId, then the geometry shader code must write to a matching output variable, decorated with PrimitiveId, in all execution paths", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264", + "text": "If the pipeline requires pre-rasterization shader state, it includes a mesh shader and the fragment shader code reads from an input variable that is decorated with PrimitiveId, then the mesh shader code must write to a matching output variable, decorated with PrimitiveId, in all execution paths", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06038", + "text": "If renderPass is not VK_NULL_HANDLE and the pipeline is being created with fragment shader state the fragment shader must not read from any input attachment that is defined as VK_ATTACHMENT_UNUSED in subpass", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-00742", + "text": "If the pipeline requires pre-rasterization shader state and multiple pre-rasterization shader stages are included in pStages, the shader code for the entry points identified by those pStages and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-04889", + "text": "If the pipeline requires pre-rasterization shader state and fragment shader state, the fragment shader and last pre-rasterization shader stage and any relevant state must adhere to the pipeline linking rules described in the Shader Interfaces chapter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06041", + "text": "If renderPass is not VK_NULL_HANDLE, and the pipeline is being created with fragment output interface state, then for each color attachment in the subpass, if the potential format features of the format of the corresponding attachment description do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the blendEnable member of the corresponding element of the pAttachments member of pColorBlendState must be VK_FALSE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-07609", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline is being created with fragment output interface state, the pColorBlendState pointer is not NULL, the attachmentCount member of pColorBlendState is not ignored, and the subpass uses color attachments, the attachmentCount member of pColorBlendState must be equal to the colorAttachmentCount used to create subpass", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130", + "text": "If the pipeline requires pre-rasterization shader state, and pViewportState->pViewports is not dynamic, then pViewportState->pViewports must be a valid pointer to an array of pViewportState->viewportCount valid VkViewport structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131", + "text": "If the pipeline requires pre-rasterization shader state, and pViewportState->pScissors is not dynamic, then pViewportState->pScissors must be a valid pointer to an array of pViewportState->scissorCount VkRect2D structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749", + "text": "If the pipeline requires pre-rasterization shader state, and the wideLines feature is not enabled, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_LINE_WIDTH, the lineWidth member of pRasterizationState must be 1.0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-09024", + "text": "If the pipeline requires pre-rasterization shader state, and the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state is enabled or the rasterizerDiscardEnable member of pRasterizationState is VK_FALSE, and related dynamic state is not set, pViewportState must be a valid pointer to a valid VkPipelineViewportStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pViewportState-09025", + "text": "If pViewportState is not NULL it must be a valid pointer to a valid VkPipelineViewportStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-09026", + "text": "If the pipeline requires fragment output interface state, and the VK_EXT_extended_dynamic_state3 extension is not enabled or any of the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is not set, or the alphaToOne feature is enabled and VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set, pMultisampleState must be a valid pointer to a valid VkPipelineMultisampleStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pMultisampleState-09027", + "text": "If pMultisampleState is not NULL it must be a valid pointer to a valid VkPipelineMultisampleStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-alphaToCoverageEnable-08891", + "text": "If the pipeline is being created with fragment shader state, the VkPipelineMultisampleStateCreateInfo::alphaToCoverageEnable is not ignored and is VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09028", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline is being created with fragment shader state, and subpass uses a depth/stencil attachment, and related dynamic state is not set, pDepthStencilState must be a valid pointer to a valid VkPipelineDepthStencilStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09029", + "text": "If pDepthStencilState is not NULL it must be a valid pointer to a valid VkPipelineDepthStencilStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09030", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline is being created with fragment output interface state, and subpass uses color attachments, and related dynamic state is not set, pColorBlendState must be a valid pointer to a valid VkPipelineColorBlendStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754", + "text": "If the pipeline requires pre-rasterization shader state, the depthBiasClamp feature is not enabled, no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_DEPTH_BIAS, and the depthBiasEnable member of pRasterizationState is VK_TRUE, the depthBiasClamp member of pRasterizationState must be 0.0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510", + "text": "If the pipeline requires fragment shader state, the VK_EXT_depth_range_unrestricted extension is not enabled and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the depthBoundsTestEnable member of pDepthStencilState is VK_TRUE, the minDepthBounds and maxDepthBounds members of pDepthStencilState must be between 0.0 and 1.0, inclusive", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07610", + "text": "If the pipeline requires fragment shader state or fragment output interface state, and rasterizationSamples and sampleLocationsInfo are not dynamic, and VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable included in the pNext chain of pMultisampleState is VK_TRUE, sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07611", + "text": "If the pipeline requires fragment shader state or fragment output interface state, and rasterizationSamples and sampleLocationsInfo are not dynamic, and VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable the included in the pNext chain of pMultisampleState is VK_TRUE or VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT is used, sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07612", + "text": "If the pipeline requires fragment shader state or fragment output interface state, and rasterizationSamples and sampleLocationsInfo are not dynamic, and VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable included in the pNext chain of pMultisampleState is VK_TRUE or VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT is used, sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524", + "text": "If the pipeline requires fragment shader state, and the sampleLocationsEnable member of a VkPipelineSampleLocationsStateCreateInfoEXT structure included in the pNext chain of pMultisampleState is VK_TRUE, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-multisampledRenderToSingleSampled-06853", + "text": "If the pipeline requires fragment output interface state, and none of the VK_AMD_mixed_attachment_samples extension, the VK_NV_framebuffer_mixed_samples extension, or the multisampledRenderToSingleSampled feature are enabled, rasterizationSamples is not dynamic, and if subpass uses color and/or depth/stencil attachments, then the rasterizationSamples member of pMultisampleState must be the same as the sample count for those subpass attachments", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01505", + "text": "If the pipeline requires fragment output interface state, and the VK_AMD_mixed_attachment_samples extension is enabled, rasterizationSamples is not dynamic, and if subpass uses color and/or depth/stencil attachments, then the rasterizationSamples member of pMultisampleState must equal the maximum of the sample counts of those subpass attachments", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06854", + "text": "If renderPass is not VK_NULL_HANDLE, the VK_EXT_multisampled_render_to_single_sampled extension is enabled, rasterizationSamples is not dynamic, and subpass has a VkMultisampledRenderToSingleSampledInfoEXT structure included in the VkSubpassDescription2::pNext chain with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples member of pMultisampleState must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01411", + "text": "If the pipeline requires fragment output interface state, the VK_NV_framebuffer_mixed_samples extension is enabled, rasterizationSamples is not dynamic, and if subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled, then the rasterizationSamples member of pMultisampleState must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-01412", + "text": "If the pipeline requires fragment output interface state, the VK_NV_framebuffer_mixed_samples extension is enabled, rasterizationSamples is not dynamic, and if subpass has any color attachments, then the rasterizationSamples member of pMultisampleState must be greater than or equal to the sample count for those subpass attachments", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722", + "text": "If the pipeline requires fragment output interface state, the coverageReductionMode feature is enabled, and rasterizationSamples is not dynamic, the coverage reduction mode specified by VkPipelineCoverageReductionStateCreateInfoNV::coverageReductionMode, the rasterizationSamples member of pMultisampleState and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-subpass-00758", + "text": "If the pipeline requires fragment output interface state, rasterizationSamples is not dynamic, and subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples member of pMultisampleState must follow the rules for a zero-attachment subpass", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06046", + "text": "If renderPass is not VK_NULL_HANDLE, subpass must be a valid subpass within renderPass", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06047", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, subpass viewMask is not 0, and multiviewTessellationShader is not enabled, then pStages must not include tessellation shaders", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06048", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, subpass viewMask is not 0, and multiviewGeometryShader is not enabled, then pStages must not include a geometry shader", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06050", + "text": "If renderPass is not VK_NULL_HANDLE and the pipeline is being created with pre-rasterization shader state, and subpass viewMask is not 0, then all of the shaders in the pipeline must not include variables decorated with the Layer built-in decoration in their interfaces", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-07064", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, subpass viewMask is not 0, and multiviewMeshShader is not enabled, then pStages must not include a mesh shader", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-00764", + "text": "flags must not contain the VK_PIPELINE_CREATE_DISPATCH_BASE_BIT flag", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-01565", + "text": "If the pipeline requires fragment shader state and an input attachment was referenced by an aspectMask at renderPass creation time, the fragment shader must only read from the aspects that were specified for that input attachment", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-01688", + "text": "The number of resources in layout accessible to each shader stage that is used by the pipeline must be less than or equal to VkPhysicalDeviceLimits::maxPerStageResources", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715", + "text": "If the pipeline requires pre-rasterization shader state, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, and the viewportWScalingEnable member of a VkPipelineViewportWScalingStateCreateInfoNV structure, included in the pNext chain of pViewportState, is VK_TRUE, the pViewportWScalings member of the VkPipelineViewportWScalingStateCreateInfoNV must be a pointer to an array of VkPipelineViewportWScalingStateCreateInfoNV::viewportCount valid VkViewportWScalingNV structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056", + "text": "If the pipeline requires pre-rasterization shader state, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, and if pViewportState->pNext chain includes a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure, and if its exclusiveScissorCount member is not 0, then its pExclusiveScissors member must be a valid pointer to an array of exclusiveScissorCount VkRect2D structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07854", + "text": "If VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV is included in the pDynamicStates array then the implementation must support at least specVersion 2 of the VK_NV_scissor_exclusive extension", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057", + "text": "If the pipeline requires pre-rasterization shader state, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, and if pViewportState->pNext chain includes a VkPipelineViewportShadingRateImageStateCreateInfoNV structure, then its pShadingRatePalettes member must be a valid pointer to an array of viewportCount valid VkShadingRatePaletteNV structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058", + "text": "If the pipeline requires pre-rasterization shader state, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, and if pNext chain includes a VkPipelineDiscardRectangleStateCreateInfoEXT structure, and if its discardRectangleCount member is not 0, then its pDiscardRectangles member must be a valid pointer to an array of discardRectangleCount VkRect2D structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07855", + "text": "If VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT is included in the pDynamicStates array then the implementation must support at least specVersion 2 of the VK_EXT_discard_rectangles extension", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07856", + "text": "If VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT is included in the pDynamicStates array then the implementation must support at least specVersion 2 of the VK_EXT_discard_rectangles extension", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02097", + "text": "If the pipeline requires vertex input state, and pVertexInputState is not dynamic, then pVertexInputState must be a valid pointer to a valid VkPipelineVertexInputStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-Input-07904", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and the pipeline is being created with vertex input state and pVertexInputState is not dynamic, then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription::location", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-Input-08733", + "text": "If the pipeline requires vertex input state and pVertexInputState is not dynamic, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription::format", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-08929", + "text": "If the pipeline is being created with vertex input state and pVertexInputState is not dynamic, and VkVertexInputAttributeDescription::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-08930", + "text": "If the pipeline is being created with vertex input state and pVertexInputState is not dynamic, and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription::format must have a 64-bit component", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pVertexInputState-09198", + "text": "If the pipeline is being created with vertex input state and pVertexInputState is not dynamic, and VkVertexInputAttributeDescription::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-dynamicPrimitiveTopologyUnrestricted-09031", + "text": "If the pipeline requires vertex input state, and related dynamic state is not set, pInputAssemblyState must be a valid pointer to a valid VkPipelineInputAssemblyStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pInputAssemblyState-09032", + "text": "If pInputAssemblyState is not NULL it must be a valid pointer to a valid VkPipelineInputAssemblyStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02317", + "text": "If the pipeline requires pre-rasterization shader state, the Xfb execution mode can be specified by no more than one shader stage in pStages", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-02318", + "text": "If the pipeline requires pre-rasterization shader state, and any shader stage in pStages specifies Xfb execution mode it must be the last pre-rasterization shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319", + "text": "If the pipeline requires pre-rasterization shader state, and a VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream value other than zero is specified, all variables in the output interface of the entry point being compiled decorated with Position, PointSize, ClipDistance, or CullDistance must be decorated with identical Stream values that match the rasterizationStream", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320", + "text": "If the pipeline requires pre-rasterization shader state, and VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream is zero, or not specified, all variables in the output interface of the entry point being compiled decorated with Position, PointSize, ClipDistance, or CullDistance must be decorated with a Stream value of zero, or must not specify the Stream decoration", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321", + "text": "If the pipeline requires pre-rasterization shader state, and the last pre-rasterization shader stage is a geometry shader, and that geometry shader uses the GeometryStreams capability, then VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-02322", + "text": "If the pipeline requires pre-rasterization shader state, and there are any mesh shader stages in the pipeline there must not be any shader stage in the pipeline with a Xfb execution mode", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766", + "text": "If the pipeline requires pre-rasterization shader state and at least one of fragment output interface state or fragment shader state, and pMultisampleState is not NULL, the lineRasterizationMode member of a VkPipelineRasterizationLineStateCreateInfo structure included in the pNext chain of pRasterizationState is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the alphaToCoverageEnable, alphaToOneEnable, and sampleShadingEnable members of pMultisampleState must all be VK_FALSE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767", + "text": "If the pipeline requires pre-rasterization shader state, the stippledLineEnable member of VkPipelineRasterizationLineStateCreateInfo is VK_TRUE, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_LINE_STIPPLE, then the lineStippleFactor member of VkPipelineRasterizationLineStateCreateInfo must be in the range [1,256]", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-shaderMeshEnqueue-10187", + "text": "If the shaderMeshEnqueue feature is not enabled, shaders specified by pStages must not declare the ShaderEnqueueAMDX capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-10188", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, shaders specified by pStages must not declare the ShaderEnqueueAMDX capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-10189", + "text": "If any shader stages in pStages declare the ShaderEnqueueAMDX capability, VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX and VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR must be included in flags", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-10190", + "text": "If VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX is included in flags, and the pipeline requires pre-rasterization shader state, there must not be a task or vertex shader specified in pStages", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-10191", + "text": "If VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX is included in flags, all elements of VkPipelineLibraryCreateInfoKHR::pLibraries must have been created with VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03372", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03373", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03374", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03375", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03376", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03377", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-03577", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-04947", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378", + "text": "If the extendedDynamicState feature is not enabled, and the minimum value of VkApplicationInfo::apiVersion used to create the VkInstance and apiVersion supported by the physical device is less than Version 1.3 there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_CULL_MODE, VK_DYNAMIC_STATE_FRONT_FACE, VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE, VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, or VK_DYNAMIC_STATE_STENCIL_OP", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379", + "text": "If the pipeline requires pre-rasterization shader state, and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the pDynamicStates array then viewportCount must be zero", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380", + "text": "If the pipeline requires pre-rasterization shader state, and VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the pDynamicStates array then scissorCount must be zero", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132", + "text": "If the pipeline requires pre-rasterization shader state, and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is included in the pDynamicStates array then VK_DYNAMIC_STATE_VIEWPORT must not be present", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133", + "text": "If the pipeline requires pre-rasterization shader state, and VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT is included in the pDynamicStates array then VK_DYNAMIC_STATE_SCISSOR must not be present", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07065", + "text": "If the pipeline requires pre-rasterization shader state, and includes a mesh shader, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, or VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04868", + "text": "If the extendedDynamicState2 feature is not enabled, and the minimum value of VkApplicationInfo::apiVersion used to create the VkInstance and apiVersion supported by the physical device is less than Version 1.3 there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04869", + "text": "If the extendedDynamicState2LogicOp feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_LOGIC_OP_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04870", + "text": "If the extendedDynamicState2PatchControlPoints feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07066", + "text": "If the pipeline requires pre-rasterization shader state, and includes a mesh shader, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, or VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-02877", + "text": "If flags includes VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-02966", + "text": "If the pipeline requires pre-rasterization shader state and flags includes VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then all stages must not specify Xfb execution mode", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-libraryCount-06648", + "text": "If the pipeline is not created with a complete set of state, or VkPipelineLibraryCreateInfoKHR::libraryCount is not 0, VkGraphicsPipelineShaderGroupsCreateInfoNV::groupCount and VkGraphicsPipelineShaderGroupsCreateInfoNV::pipelineCount must be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-libraryCount-06649", + "text": "If the pipeline is created with a complete set of state, and VkPipelineLibraryCreateInfoKHR::libraryCount is 0, and the pNext chain includes an instance of VkGraphicsPipelineShaderGroupsCreateInfoNV, VkGraphicsPipelineShaderGroupsCreateInfoNV::groupCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-11000", + "text": "If flags includes VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT, then the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-11001", + "text": "If the pipeline requires pre-rasterization shader state and flags includes VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT, then all stages must not specify Xfb execution mode", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pipelineProtectedAccess-07368", + "text": "If the pipelineProtectedAccess feature is not enabled, flags must not include VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT or VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-07369", + "text": "flags must not include both VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT and VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.width must be greater than or equal to 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.height must be greater than or equal to 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.width must be a power-of-two value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.height must be a power-of-two value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.width must be less than or equal to 4", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.height must be less than or equal to 4", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the pipelineFragmentShadingRate feature is not enabled, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.width and VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.height must both be equal to 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06567", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::combinerOps[0] must be a valid VkFragmentShadingRateCombinerOpKHR value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06568", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateStateCreateInfoKHR::combinerOps[1] must be a valid VkFragmentShadingRateCombinerOpKHR value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the primitiveFragmentShadingRate feature is not enabled, VkPipelineFragmentShadingRateStateCreateInfoKHR::combinerOps[0] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the attachmentFragmentShadingRate feature is not enabled, VkPipelineFragmentShadingRateStateCreateInfoKHR::combinerOps[1] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503", + "text": "If the pipeline requires pre-rasterization shader state and the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT is not included in pDynamicState->pDynamicStates, and VkPipelineViewportStateCreateInfo::viewportCount is greater than 1, entry points specified in pStages must not write to the PrimitiveShadingRateKHR built-in", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504", + "text": "If the pipeline requires pre-rasterization shader state and the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and entry points specified in pStages write to the ViewportIndex built-in, they must not also write to the PrimitiveShadingRateKHR built-in", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505", + "text": "If the pipeline requires pre-rasterization shader state and the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and entry points specified in pStages write to the ViewportMaskNV built-in, they must not also write to the PrimitiveShadingRateKHR built-in", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state, the fragmentShadingRateNonTrivialCombinerOps limit is not supported, and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, elements of VkPipelineFragmentShadingRateStateCreateInfoKHR::combinerOps must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-06569", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::shadingRateType must be a valid VkFragmentShadingRateTypeNV value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06570", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::shadingRate must be a valid VkFragmentShadingRateNV value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06571", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::combinerOps[0] must be a valid VkFragmentShadingRateCombinerOpKHR value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-06572", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::combinerOps[1] must be a valid VkFragmentShadingRateCombinerOpKHR value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the fragmentShadingRateEnums feature is not enabled, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::shadingRateType must be equal to VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the pipelineFragmentShadingRate feature is not enabled, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::shadingRate must be equal to VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the primitiveFragmentShadingRate feature is not enabled, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::combinerOps[0] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572", + "text": "If the pipeline requires fragment shader state and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, and the attachmentFragmentShadingRate feature is not enabled, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::combinerOps[1] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573", + "text": "If the pipeline requires fragment shader state, and the fragmentShadingRateNonTrivialCombinerOps limit is not supported and VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR is not included in pDynamicState->pDynamicStates, elements of VkPipelineFragmentShadingRateEnumStateCreateInfoNV::combinerOps must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-04574", + "text": "If the pipeline requires fragment shader state, and the supersampleFragmentShadingRates feature is not enabled, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::shadingRate must not be equal to VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-04575", + "text": "If the pipeline requires fragment shader state, and the noInvocationFragmentShadingRates feature is not enabled, VkPipelineFragmentShadingRateEnumStateCreateInfoNV::shadingRate must not be equal to VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03578", + "text": "All elements of the pDynamicStates member of pDynamicState must not be VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04807", + "text": "If the pipeline requires pre-rasterization shader state and the vertexInputDynamicState feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_VERTEX_INPUT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07067", + "text": "If the pipeline requires pre-rasterization shader state, and includes a mesh shader, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_VERTEX_INPUT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04800", + "text": "If the colorWriteEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-rasterizationSamples-04899", + "text": "If the pipeline requires fragment shader state, and the VK_QCOM_render_pass_shader_resolve extension is enabled, rasterizationSamples is not dynamic, and if subpass has any input attachments, and if the subpass description contains VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the sample count of the input attachments must equal rasterizationSamples", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-sampleShadingEnable-04900", + "text": "If the pipeline requires fragment shader state, and the VK_QCOM_render_pass_shader_resolve extension is enabled, and if the subpass description contains VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then sampleShadingEnable must be false", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576", + "text": "If the dynamicRendering feature is not enabled and the pipeline requires pre-rasterization shader state, fragment shader state, or fragment output interface state, renderPass must not be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-multiview-06577", + "text": "If the multiview feature is not enabled, the pipeline requires pre-rasterization shader state, fragment shader state, or fragment output interface state, and renderPass is VK_NULL_HANDLE, VkPipelineRenderingCreateInfo::viewMask must be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06578", + "text": "If the pipeline requires pre-rasterization shader state, fragment shader state, or fragment output interface state, and renderPass is VK_NULL_HANDLE, the index of the most significant bit in VkPipelineRenderingCreateInfo::viewMask must be less than maxMultiviewViewCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06579", + "text": "If the pipeline requires fragment output interface state, and renderPass is VK_NULL_HANDLE, and VkPipelineRenderingCreateInfo::colorAttachmentCount is not 0, VkPipelineRenderingCreateInfo::pColorAttachmentFormats must be a valid pointer to an array of colorAttachmentCount valid VkFormat values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06580", + "text": "If the pipeline requires fragment output interface state, and renderPass is VK_NULL_HANDLE, each element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats must be a valid VkFormat value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06582", + "text": "If the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and any element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats is not VK_FORMAT_UNDEFINED, that format must be a format with potential format features that include VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06583", + "text": "If the pipeline requires fragment output interface state, and renderPass is VK_NULL_HANDLE, VkPipelineRenderingCreateInfo::depthAttachmentFormat must be a valid VkFormat value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06584", + "text": "If the pipeline requires fragment output interface state, and renderPass is VK_NULL_HANDLE, VkPipelineRenderingCreateInfo::stencilAttachmentFormat must be a valid VkFormat value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06585", + "text": "If the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkPipelineRenderingCreateInfo::depthAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format with potential format features that include VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06586", + "text": "If the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkPipelineRenderingCreateInfo::stencilAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format with potential format features that include VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06587", + "text": "If the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkPipelineRenderingCreateInfo::depthAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format that includes a depth component", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06588", + "text": "If the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkPipelineRenderingCreateInfo::stencilAttachmentFormat is not VK_FORMAT_UNDEFINED, it must be a format that includes a stencil component", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06589", + "text": "If the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, VkPipelineRenderingCreateInfo::depthAttachmentFormat is not VK_FORMAT_UNDEFINED, and VkPipelineRenderingCreateInfo::stencilAttachmentFormat is not VK_FORMAT_UNDEFINED, depthAttachmentFormat must equal stencilAttachmentFormat", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09033", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with fragment shader state and fragment output interface state, and either of VkPipelineRenderingCreateInfo::depthAttachmentFormat or VkPipelineRenderingCreateInfo::stencilAttachmentFormat are not VK_FORMAT_UNDEFINED, and the VK_EXT_extended_dynamic_state3 extension is not enabled or any of the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_OP, or VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set, pDepthStencilState must be a valid pointer to a valid VkPipelineDepthStencilStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09034", + "text": "If pDepthStencilState is not NULL it must be a valid pointer to a valid VkPipelineDepthStencilStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09035", + "text": "If renderPass is VK_NULL_HANDLE and the pipeline is being created with fragment shader state but not fragment output interface state, and the VK_EXT_extended_dynamic_state3 extension is not enabled, or any of the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, VK_DYNAMIC_STATE_DEPTH_COMPARE_OP, VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_OP, or VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states are not set, pDepthStencilState must be a valid pointer to a valid VkPipelineDepthStencilStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDepthStencilState-09036", + "text": "If pDepthStencilState is not NULL it must be a valid pointer to a valid VkPipelineDepthStencilStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09037", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with fragment output interface state, and any element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats is not VK_FORMAT_UNDEFINED, and the VK_EXT_extended_dynamic_state3 extension is not enabled, or any of the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT, VK_DYNAMIC_STATE_LOGIC_OP_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, or VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states are not set, pColorBlendState must be a valid pointer to a valid VkPipelineColorBlendStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pColorBlendState-09038", + "text": "If pColorBlendState is not NULL it must be a valid pointer to a valid VkPipelineColorBlendStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06055", + "text": "If renderPass is VK_NULL_HANDLE, pColorBlendState is not dynamic, and the pipeline is being created with fragment output interface state, pColorBlendState->attachmentCount must be equal to VkPipelineRenderingCreateInfo::colorAttachmentCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06057", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, VkPipelineRenderingCreateInfo::viewMask is not 0, and the multiviewTessellationShader feature is not enabled, then pStages must not include tessellation shaders", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06058", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, VkPipelineRenderingCreateInfo::viewMask is not 0, and the multiviewGeometryShader feature is not enabled, then pStages must not include a geometry shader", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06059", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, and VkPipelineRenderingCreateInfo::viewMask is not 0, all of the shaders in the pipeline must not include variables decorated with the Layer built-in decoration in their interfaces", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-07720", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state, and VkPipelineRenderingCreateInfo::viewMask is not 0, and multiviewMeshShader is not enabled, then pStages must not include a mesh shader", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06061", + "text": "If the dynamicRenderingLocalRead feature is not enabled, the pipeline requires fragment shader state, and renderPass is VK_NULL_HANDLE, fragment shaders in pStages must not include the InputAttachment capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-08710", + "text": "If the pipeline requires fragment shader state and renderPass is not VK_NULL_HANDLE, fragment shaders in pStages must not include any of the TileImageColorReadAccessEXT, TileImageDepthReadAccessEXT, or TileImageStencilReadAccessEXT capabilities", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06062", + "text": "If the pipeline requires fragment output interface state and renderPass is VK_NULL_HANDLE, for each color attachment format defined by the pColorAttachmentFormats member of VkPipelineRenderingCreateInfo, if its potential format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the blendEnable member of the corresponding element of the pAttachments member of pColorBlendState must be VK_FALSE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06063", + "text": "If the pipeline requires fragment output interface state and renderPass is VK_NULL_HANDLE, if the pNext chain includes VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV, the colorAttachmentCount member of that structure must be equal to the value of VkPipelineRenderingCreateInfo::colorAttachmentCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06591", + "text": "If pStages includes a fragment shader stage, and the fragment shader declares the EarlyFragmentTests execution mode, the flags member of VkPipelineDepthStencilStateCreateInfo must not include VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT or VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06482", + "text": "If the dynamicRenderingLocalRead feature is not enabled, the pipeline requires fragment output interface state, and the flags member of VkPipelineColorBlendStateCreateInfo includes VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT, renderPass must not be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-09526", + "text": "If the dynamicRenderingLocalRead feature is not enabled, the pipeline requires fragment output interface state, and the flags member of VkPipelineDepthStencilStateCreateInfo includes VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT or VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, renderPass must not be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pColorAttachmentSamples-06592", + "text": "If the fragment output interface state, elements of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV must be valid VkSampleCountFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-depthStencilAttachmentSamples-06593", + "text": "If the fragment output interface state and the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV is not 0, it must be a valid VkSampleCountFlagBits value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09527", + "text": "If the pipeline requires fragment output interface state, renderPass is not VK_NULL_HANDLE, and the flags member of VkPipelineColorBlendStateCreateInfo includes VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT subpass must have been created with VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09528", + "text": "If the pipeline requires fragment shader state, renderPass is not VK_NULL_HANDLE, and the flags member of VkPipelineDepthStencilStateCreateInfo includes VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT, subpass must have been created with VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09529", + "text": "If the pipeline requires fragment shader state, renderPass is not VK_NULL_HANDLE, and the flags member of VkPipelineDepthStencilStateCreateInfo includes VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT, subpass must have been created with VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pipelineStageCreationFeedbackCount-06594", + "text": "If VkPipelineCreationFeedbackCreateInfo::pipelineStageCreationFeedbackCount is not 0, it must be equal to stageCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06595", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline is being created with pre-rasterization shader state or fragment shader state, and VkMultiviewPerViewAttributesInfoNVX::perViewAttributesPositionXOnly is VK_TRUE then VkMultiviewPerViewAttributesInfoNVX::perViewAttributes must also be VK_TRUE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06596", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other flag, the value of VkMultiviewPerViewAttributesInfoNVX::perViewAttributes specified in both this pipeline and the library must be equal", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06597", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the value of VkMultiviewPerViewAttributesInfoNVX::perViewAttributes specified in both libraries must be equal", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06598", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other flag, the value of VkMultiviewPerViewAttributesInfoNVX::perViewAttributesPositionXOnly specified in both this pipeline and the library must be equal", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06599", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the value of VkMultiviewPerViewAttributesInfoNVX::perViewAttributesPositionXOnly specified in both libraries must be equal", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-06600", + "text": "If the pipeline requires pre-rasterization shader state or fragment shader state, pStages must be a valid pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-stageCount-09587", + "text": "If the pipeline does not require pre-rasterization shader state or fragment shader state, stageCount must be zero", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-06601", + "text": "If the pipeline requires pre-rasterization shader state, and related dynamic state is not set, pRasterizationState must be a valid pointer to a valid VkPipelineRasterizationStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09039", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, and related dynamic state is not set, then pMultisampleState must be a valid pointer to a valid VkPipelineMultisampleStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-09040", + "text": "If pRasterizationState is not NULL it must be a valid pointer to a valid VkPipelineRasterizationStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-06602", + "text": "If the pipeline requires fragment shader state or pre-rasterization shader state, layout must be a valid VkPipelineLayout handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-06603", + "text": "If the pipeline requires pre-rasterization shader state, fragment shader state, or fragment output state, and renderPass is not VK_NULL_HANDLE, renderPass must be a valid VkRenderPass handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-stageCount-09530", + "text": "If the pipeline requires pre-rasterization shader state, stageCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-graphicsPipelineLibrary-06606", + "text": "If the graphicsPipelineLibrary feature is not enabled, and if the shaderMeshEnqueue feature is not enabled, flags must not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06608", + "text": "If the shaderMeshEnqueue feature is not enabled, and the pipeline is being created with all possible state subsets, flags must not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06609", + "text": "If flags includes VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, pipeline libraries included via VkPipelineLibraryCreateInfoKHR must have been created with VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-09245", + "text": "If flags includes VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, flags must also include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06610", + "text": "If flags includes VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT, pipeline libraries included via VkPipelineLibraryCreateInfoKHR must have been created with VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06611", + "text": "Any pipeline libraries included via VkPipelineLibraryCreateInfoKHR::pLibraries must not include any state subset already defined by this structure or defined by any other pipeline library in VkPipelineLibraryCreateInfoKHR::pLibraries", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06612", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other flag, and layout was not created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the layout used by this pipeline and the library must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06613", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the layout specified by either library was not created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the layout used by each library must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06614", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other subset, and layout was created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the layout used by the library must also have been created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06615", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the layout specified by either library was created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then the layout used by both libraries must have been created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06616", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other subset, and layout was created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, elements of the pSetLayouts array which layout was created with that are not VK_NULL_HANDLE must be identically defined to the element at the same index of pSetLayouts used to create the library’s layout", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06617", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and the layout specified by either library was created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, elements of the pSetLayouts array which either layout was created with that are not VK_NULL_HANDLE must be identically defined to the element at the same index of pSetLayouts used to create the other library’s layout", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06618", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other flag, any descriptor set layout N specified by layout in both this pipeline and the library which include bindings accessed by shader stages in each must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06619", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, any descriptor set layout N specified by layout in both libraries which include bindings accessed by shader stages in each must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06620", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other flag, push constants specified in layout in both this pipeline and the library which are available to shader stages in each must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06621", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, push constants specified in layout in both this pipeline and the library which are available to shader stages in each must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06679", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other subset, any element of the pSetLayouts array when layout was created and the corresponding element of the pSetLayouts array used to create the library’s layout must not both be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and any element of the pSetLayouts array used to create each library’s layout was VK_NULL_HANDLE, then the corresponding element of the pSetLayouts array used to create the other library’s layout must not be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06756", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other subset, and any element of the pSetLayouts array which layout was created with was VK_NULL_HANDLE, then the corresponding element of the pSetLayouts array used to create the library’s layout must not have shader bindings for shaders in the other subset", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06757", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other subset, and any element of the pSetLayouts array used to create the library’s layout was VK_NULL_HANDLE, then the corresponding element of the pSetLayouts array used to create this pipeline’s layout must not have shader bindings for shaders in the other subset", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06758", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and any element of the pSetLayouts array used to create each library’s layout was VK_NULL_HANDLE, then the corresponding element of the pSetLayouts array used to create the other library’s layout must not have shader bindings for shaders in the other subset", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06682", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes both VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, layout must have been created with no elements of the pSetLayouts array set to VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06683", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and pRasterizationState->rasterizerDiscardEnable is VK_TRUE, layout must have been created with no elements of the pSetLayouts array set to VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06684", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, the value of subpass must be equal to that used to create the library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06623", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and another element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, the value of subpass used to create each library must be identical", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderpass-06624", + "text": "If renderpass is not VK_NULL_HANDLE, VkGraphicsPipelineLibraryCreateInfoEXT::flags includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, renderPass must be compatible with that used to create the library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderpass-06625", + "text": "If renderpass is VK_NULL_HANDLE, VkGraphicsPipelineLibraryCreateInfoEXT::flags includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, the value of renderPass used to create that library must also be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06626", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, and renderPass is VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::viewMask used by this pipeline and that specified by the library must be identical", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06627", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, another element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, and renderPass was VK_NULL_HANDLE for both libraries, the value of VkPipelineRenderingCreateInfo::viewMask set by each library must be identical", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06628", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes at least one of and no more than two of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and another element of VkPipelineLibraryCreateInfoKHR::pLibraries includes one of the other flags, the renderPass objects used to create each library must be compatible or all equal to VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderpass-06631", + "text": "If renderPass is not VK_NULL_HANDLE, the pipeline requires fragment shader state, and the VK_EXT_extended_dynamic_state3 extension is not enabled or any of the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is not set, or the alphaToOne feature is enabled and VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set, then pMultisampleState must be a valid pointer to a valid VkPipelineMultisampleStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-Input-06632", + "text": "If the pipeline requires fragment shader state with a fragment shader that either enables sample shading or decorates any variable in the Input storage class with Sample, and the VK_EXT_extended_dynamic_state3 extension is not enabled or any of the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, or VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic states is not set, or the alphaToOne feature is enabled and VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT is not set, then pMultisampleState must be a valid pointer to a valid VkPipelineMultisampleStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06633", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a pMultisampleState that was not NULL, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, pMultisampleState must be identically defined to that used to create the library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06634", + "text": "If an element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a pMultisampleState that was not NULL, and if VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, pMultisampleState must be identically defined to that used to create the library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06635", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT with a pMultisampleState that was not NULL, and if a different element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, the pMultisampleState used to create each library must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06636", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT and a value of pMultisampleState->sampleShadingEnable equal VK_TRUE, and if a different element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, the pMultisampleState used to create each library must be identically defined", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06637", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, pMultisampleState->sampleShadingEnable is VK_TRUE, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pMultisampleState must be identically defined to that used to create the library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-09567", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries was created with VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT and a value of pMultisampleState->sampleShadingEnable equal VK_TRUE, and if VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pMultisampleState must be identically defined to that used to create the library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06638", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes only one of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and an element of VkPipelineLibraryCreateInfoKHR::pLibraries includes the other flag, values specified in VkPipelineFragmentShadingRateStateCreateInfoKHR for both this pipeline and that library must be identical", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06639", + "text": "If one element of VkPipelineLibraryCreateInfoKHR::pLibraries includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT and another element includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, values specified in VkPipelineFragmentShadingRateStateCreateInfoKHR for both this pipeline and that library must be identical", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06640", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pStages must be a valid pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06642", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, layout must be a valid VkPipelineLayout handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06643", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and renderPass is not VK_NULL_HANDLE, renderPass must be a valid VkRenderPass handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06644", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT or VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, stageCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06645", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags is non-zero, if flags includes VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, any libraries must have also been created with VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06646", + "text": "If VkPipelineLibraryCreateInfoKHR::pLibraries includes more than one library, and any library was created with VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, all libraries must have also been created with VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pLibraries-06647", + "text": "If VkPipelineLibraryCreateInfoKHR::pLibraries includes at least one library, VkGraphicsPipelineLibraryCreateInfoEXT::flags is non-zero, and any library was created with VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR, flags must include VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-07826", + "text": "If the pipeline includes a complete set of state, and there are no libraries included in VkPipelineLibraryCreateInfoKHR::pLibraries, then VkPipelineLayout must be a valid pipeline layout", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-layout-07827", + "text": "If the pipeline includes a complete set of state specified entirely by libraries, and each library was created with a VkPipelineLayout created without VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then layout must be compatible with the layouts in those libraries", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06729", + "text": "If flags includes VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, the pipeline includes a complete set of state specified entirely by libraries, and each library was created with a VkPipelineLayout created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then layout must be compatible with the union of the libraries' pipeline layouts other than the inclusion/exclusion of VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-06730", + "text": "If flags does not include VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT, the pipeline includes a complete set of state specified entirely by libraries, and each library was created with a VkPipelineLayout created with VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT, then layout must be compatible with the union of the libraries' pipeline layouts", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-08892", + "text": "If conservativePointAndLineRasterization is not supported; the pipeline is being created with vertex input state and pre-rasterization shader state; the pipeline does not include a geometry shader; and the value of VkPipelineInputAssemblyStateCreateInfo::topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, or VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, and either VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state is not enabled or dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then VkPipelineRasterizationConservativeStateCreateInfoEXT::conservativeRasterizationMode must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06760", + "text": "If conservativePointAndLineRasterization is not supported, the pipeline requires pre-rasterization shader state, and the pipeline includes a geometry shader with either the OutputPoints or OutputLineStrip execution modes, VkPipelineRasterizationConservativeStateCreateInfoEXT::conservativeRasterizationMode must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-conservativePointAndLineRasterization-06761", + "text": "If conservativePointAndLineRasterization is not supported, the pipeline requires pre-rasterization shader state, and the pipeline includes a mesh shader with either the OutputPoints or OutputLinesNV execution modes, VkPipelineRasterizationConservativeStateCreateInfoEXT::conservativeRasterizationMode must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-06894", + "text": "If the pipeline requires pre-rasterization shader state but not fragment shader state, elements of pStages must not have stage set to VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-06895", + "text": "If the pipeline requires fragment shader state but not pre-rasterization shader state, elements of pStages must not have stage set to a shader stage which participates in pre-rasterization", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-06896", + "text": "If the pipeline requires pre-rasterization shader state, all elements of pStages must have a stage set to a shader stage which participates in fragment shader state or pre-rasterization shader state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-stage-06897", + "text": "If the pipeline requires fragment shader state and/or pre-rasterization shader state, any value of stage must not be set in more than one element of pStages", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3TessellationDomainOrigin-07370", + "text": "If the extendedDynamicState3TessellationDomainOrigin feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClampEnable-07371", + "text": "If the extendedDynamicState3DepthClampEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3PolygonMode-07372", + "text": "If the extendedDynamicState3PolygonMode feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_POLYGON_MODE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RasterizationSamples-07373", + "text": "If the extendedDynamicState3RasterizationSamples feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3SampleMask-07374", + "text": "If the extendedDynamicState3SampleMask feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_SAMPLE_MASK_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3AlphaToCoverageEnable-07375", + "text": "If the extendedDynamicState3AlphaToCoverageEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3AlphaToOneEnable-07376", + "text": "If the extendedDynamicState3AlphaToOneEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LogicOpEnable-07377", + "text": "If the extendedDynamicState3LogicOpEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendEnable-07378", + "text": "If the extendedDynamicState3ColorBlendEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendEquation-07379", + "text": "If the extendedDynamicState3ColorBlendEquation feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorWriteMask-07380", + "text": "If the extendedDynamicState3ColorWriteMask feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RasterizationStream-07381", + "text": "If the extendedDynamicState3RasterizationStream feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ConservativeRasterizationMode-07382", + "text": "If the extendedDynamicState3ConservativeRasterizationMode feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ExtraPrimitiveOverestimationSize-07383", + "text": "If the extendedDynamicState3ExtraPrimitiveOverestimationSize feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-09639", + "text": "If the pipeline requires pre-rasterization shader state, pDynamicState includes VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT, and pDynamicState does not include VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT, pRasterizationState must include a VkPipelineRasterizationConservativeStateCreateInfoEXT in its pNext chain", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClipEnable-07384", + "text": "If the extendedDynamicState3DepthClipEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3SampleLocationsEnable-07385", + "text": "If the extendedDynamicState3SampleLocationsEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ColorBlendAdvanced-07386", + "text": "If the extendedDynamicState3ColorBlendAdvanced feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ProvokingVertexMode-07387", + "text": "If the extendedDynamicState3ProvokingVertexMode feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LineRasterizationMode-07388", + "text": "If the extendedDynamicState3LineRasterizationMode feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3LineStippleEnable-07389", + "text": "If the extendedDynamicState3LineStippleEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3DepthClipNegativeOneToOne-07390", + "text": "If the extendedDynamicState3DepthClipNegativeOneToOne feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ViewportWScalingEnable-07391", + "text": "If the extendedDynamicState3ViewportWScalingEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ViewportSwizzle-07392", + "text": "If the extendedDynamicState3ViewportSwizzle feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageToColorEnable-07393", + "text": "If the extendedDynamicState3CoverageToColorEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageToColorLocation-07394", + "text": "If the extendedDynamicState3CoverageToColorLocation feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationMode-07395", + "text": "If the extendedDynamicState3CoverageModulationMode feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationTableEnable-07396", + "text": "If the extendedDynamicState3CoverageModulationTableEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageModulationTable-07397", + "text": "If the extendedDynamicState3CoverageModulationTable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3CoverageReductionMode-07398", + "text": "If the extendedDynamicState3CoverageReductionMode feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3RepresentativeFragmentTestEnable-07399", + "text": "If the extendedDynamicState3RepresentativeFragmentTestEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-extendedDynamicState3ShadingRateImageEnable-07400", + "text": "If the extendedDynamicState3ShadingRateImageEnable feature is not enabled, there must be no element of the pDynamicStates member of pDynamicState set to VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-07401", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-07997", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07730", + "text": "If the pipeline requires pre-rasterization shader state, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_VIEWPORT or VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, and if the multiviewPerViewViewports feature is enabled, then the index of the most significant bit in each element of VkRenderPassMultiviewCreateInfo::pViewMasks must be less than pViewportState->viewportCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-07731", + "text": "If the pipeline requires pre-rasterization shader state, and no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_SCISSOR or VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT, and if the multiviewPerViewViewports feature is enabled, then the index of the most significant bit in each element of VkRenderPassMultiviewCreateInfo::pViewMasks must be less than pViewportState->scissorCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-08711", + "text": "If pStages includes a fragment shader stage, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE is not set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable member of VkPipelineDepthStencilStateCreateInfo must be VK_FALSE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pStages-08712", + "text": "If pStages includes a fragment shader stage, VK_DYNAMIC_STATE_STENCIL_WRITE_MASK is not set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the value of VkStencilOpState::writeMask for both front and back in VkPipelineDepthStencilStateCreateInfo must be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-08744", + "text": "If renderPass is VK_NULL_HANDLE, the pipeline requires fragment output state or fragment shader state, the pipeline enables sample shading, rasterizationSamples is not dynamic, and the pNext chain includes a VkPipelineRenderingCreateInfo structure, rasterizationSamples must be a valid VkSampleCountFlagBits value that is set in imageCreateSampleCounts (as defined in Image Creation Limits) for every element of depthAttachmentFormat, stencilAttachmentFormat and the pColorAttachmentFormats array which is not VK_FORMAT_UNDEFINED", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08897", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT, pre-rasterization shader state is specified either in a library or by the inclusion of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, and that state includes a vertex shader stage in pStages, the pipeline must define vertex input state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08898", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT, and pre-rasterization shader state is not specified, the pipeline must define vertex input state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08899", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pre-rasterization shader state is specified either in a library or by the inclusion of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, and that state includes a vertex shader stage in pStages, the pipeline must either define vertex input state or include that state in a linked pipeline library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08900", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT the pipeline must define pre-rasterization shader state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08901", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the pipeline must either define pre-rasterization shader state or include that state in a linked pipeline library", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08903", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pre-rasterization shader state is specified either in a library or by the inclusion of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, and that state either includes VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or has pRasterizationState->rasterizerDiscardEnable set to VK_FALSE, the pipeline must define fragment shader state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08904", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and pre-rasterization shader state is not specified, the pipeline must define fragment shader state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08906", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, pre-rasterization shader state is specified either in a library or by the inclusion of VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT, and that state either includes VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or has pRasterizationState->rasterizerDiscardEnable set to VK_FALSE, the pipeline must define fragment output interface state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08907", + "text": "If VkGraphicsPipelineLibraryCreateInfoEXT::flags includes VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT, and pre-rasterization shader state is not specified, the pipeline must define fragment output interface state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-flags-08909", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pre-rasterization shader state is specified either in a library or by the inclusion of VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT, and that state either includes VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE or has pRasterizationState->rasterizerDiscardEnable set to VK_FALSE, the pipeline must define fragment output interface state and fragment shader state or include those states in linked pipeline libraries", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-None-09043", + "text": "If pDynamicState->pDynamicStates does not include VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the colorWriteMask member of the corresponding element of pColorBlendState->pAttachments must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09301", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, VkPipelineRenderingCreateInfo::viewMask must be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09304", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, VkExternalFormatANDROID::externalFormat is not 0, and rasterizationSamples is not dynamic, VkPipelineMultisampleStateCreateInfo::rasterizationSamples must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09305", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, and blendEnable is not dynamic, the blendEnable member of each element of pColorBlendState->pAttachments must be VK_FALSE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09306", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, and pDynamicState->pDynamicStates does not include VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.width must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09307", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, and pDynamicState->pDynamicStates does not include VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.height must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09308", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires pre-rasterization shader state and fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, the last pre-rasterization shader stage must not statically use a variable with the PrimitiveShadingRateKHR built-in", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09309", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, VkPipelineRenderingCreateInfo::colorAttachmentCount must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09310", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment shader state and fragment output interface state, renderPass is VK_NULL_HANDLE, and VkExternalFormatANDROID::externalFormat is not 0, the fragment shader must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09313", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is not VK_NULL_HANDLE, subpass includes an external format resolve attachment, and rasterizationSamples is not dynamic, VkPipelineMultisampleStateCreateInfo::rasterizationSamples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09314", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is not VK_NULL_HANDLE, subpass includes an external format resolve attachment, and blendEnable is not dynamic, the blendEnable member of each element of pColorBlendState->pAttachments must be VK_FALSE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09315", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is not VK_NULL_HANDLE, subpass includes an external format resolve attachment, and pDynamicState->pDynamicStates does not include VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.width must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09316", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires fragment output interface state, renderPass is not VK_NULL_HANDLE, subpass includes an external format resolve attachment, and pDynamicState->pDynamicStates does not include VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, VkPipelineFragmentShadingRateStateCreateInfoKHR::fragmentSize.height must be 1", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-externalFormatResolve-09317", + "text": "If the externalFormatResolve feature is enabled, the pipeline requires pre-rasterization shader state and fragment output interface state, renderPass is not VK_NULL_HANDLE, and subpass includes an external format resolve attachment, the last pre-rasterization shader stage must not statically use a variable with the PrimitiveShadingRateKHR built-in", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09531", + "text": "If the pipeline is being created with fragment shader state and fragment output state, the value of renderPass is VK_NULL_HANDLE, and VkRenderingInputAttachmentIndexInfo is included, VkRenderingInputAttachmentIndexInfo::colorAttachmentCount must be equal to VkPipelineRenderingCreateInfo::colorAttachmentCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09652", + "text": "If the pipeline is being created with fragment shader state and fragment output state, the value of renderPass is VK_NULL_HANDLE, and VkRenderingInputAttachmentIndexInfo is not included, the fragment shader must not contain any input attachments with a InputAttachmentIndex greater than or equal to VkPipelineRenderingCreateInfo::colorAttachmentCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-renderPass-09532", + "text": "If the pipeline is being created with fragment output state, and the value of renderPass is VK_NULL_HANDLE, VkRenderingAttachmentLocationInfo::colorAttachmentCount must be equal to VkPipelineRenderingCreateInfo::colorAttachmentCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAttachmentSampleCountInfoAMD, VkExternalFormatANDROID, VkGraphicsPipelineLibraryCreateInfoEXT, VkGraphicsPipelineShaderGroupsCreateInfoNV, VkMultiviewPerViewAttributesInfoNVX, VkPipelineBinaryInfoKHR, VkPipelineCompilerControlCreateInfoAMD, VkPipelineCreateFlags2CreateInfo, VkPipelineCreationFeedbackCreateInfo, VkPipelineDiscardRectangleStateCreateInfoEXT, VkPipelineFragmentDensityMapLayeredCreateInfoVALVE, VkPipelineFragmentShadingRateEnumStateCreateInfoNV, VkPipelineFragmentShadingRateStateCreateInfoKHR, VkPipelineLibraryCreateInfoKHR, VkPipelineRenderingCreateInfo, VkPipelineRepresentativeFragmentTestStateCreateInfoNV, VkPipelineRobustnessCreateInfo, VkRenderingAttachmentLocationInfo, or VkRenderingInputAttachmentIndexInfo", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-pDynamicState-parameter", + "text": "If pDynamicState is not NULL, pDynamicState must be a valid pointer to a valid VkPipelineDynamicStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineCreateInfo-commonparent", + "text": "Each of basePipelineHandle, layout, and renderPass that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineFragmentDensityMapLayeredCreateInfoVALVE": { + "core": [ + { + "vuid": "VUID-VkPipelineFragmentDensityMapLayeredCreateInfoVALVE-maxFragmentDensityMapLayers-10825", + "text": "maxFragmentDensityMapLayers must be less than or equal to maxFragmentDensityMapLayers", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineFragmentDensityMapLayeredCreateInfoVALVE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_DENSITY_MAP_LAYERED_CREATE_INFO_VALVE", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineRenderingCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineRenderingCreateInfo-colorAttachmentCount-09533", + "text": "colorAttachmentCount must be less than or equal to maxColorAttachments", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineRenderingCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineCreateFlags2CreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineCreateFlags2CreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCreateFlags2CreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkPipelineCreateFlagBits2 values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCreateFlags2CreateInfo-flags-requiredbitmask", + "text": "flags must not be 0", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryInfoKHR-binaryCount-09603", + "text": "binaryCount and the order of the elements in pPipelineBinaries must exactly match that returned by vkCreatePipelineBinariesKHR for the matching Vk*PipelineCreateInfo structure and its pNext chain, ignoring the presence of the VkPipelineBinaryInfoKHR structure, the presence of the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag, and absence of any shader module identifiers or shader modules, for the same global pipeline key, from either:
\n\n
", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_BINARY_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryInfoKHR-pPipelineBinaries-parameter", + "text": "If binaryCount is not 0, pPipelineBinaries must be a valid pointer to an array of binaryCount valid VkPipelineBinaryKHR handles", + "page": "chapters/pipelines.html" + } + ] + }, + "VkGraphicsPipelineLibraryCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkGraphicsPipelineLibraryCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineLibraryCreateInfoEXT-flags-parameter", + "text": "flags must be a valid combination of VkGraphicsPipelineLibraryFlagBitsEXT values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineLibraryCreateInfoEXT-flags-requiredbitmask", + "text": "flags must not be 0", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineDynamicStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442", + "text": "Each element of pDynamicStates must be unique", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineDynamicStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineDynamicStateCreateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineDynamicStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-parameter", + "text": "If dynamicStateCount is not 0, pDynamicStates must be a valid pointer to an array of dynamicStateCount valid VkDynamicState values", + "page": "chapters/pipelines.html" + } + ] + }, + "VkGraphicsPipelineShaderGroupsCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879", + "text": "groupCount must be at least 1 and as maximum VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxGraphicsShaderGroupCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880", + "text": "The sum of groupCount including those groups added from referenced pPipelines must also be as maximum VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxGraphicsShaderGroupCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881", + "text": "The state of the first element of pGroups must match its equivalent within the parent’s VkGraphicsPipelineCreateInfo", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882", + "text": "Each element of pGroups must in combination with the rest of the pipeline state yield a valid state configuration", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884", + "text": "All elements of pGroups must use the same shader stage combinations unless any mesh shader stage is used, then either combination of task and mesh or just mesh shader is valid", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885", + "text": "Mesh and regular primitive shading stages cannot be mixed across pGroups", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886", + "text": "Each element of pPipelines must have been created with identical state to the pipeline currently created except the state that can be overridden by VkGraphicsShaderGroupCreateInfoNV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-parameter", + "text": "If groupCount is not 0, pGroups must be a valid pointer to an array of groupCount valid VkGraphicsShaderGroupCreateInfoNV structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-parameter", + "text": "If pipelineCount is not 0, pPipelines must be a valid pointer to an array of pipelineCount valid VkPipeline handles", + "page": "chapters/pipelines.html" + } + ] + }, + "VkGraphicsShaderGroupCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888", + "text": "For stageCount, the same restrictions as in VkGraphicsPipelineCreateInfo::stageCount apply", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889", + "text": "For pStages, the same restrictions as in VkGraphicsPipelineCreateInfo::pStages apply", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890", + "text": "For pVertexInputState, the same restrictions as in VkGraphicsPipelineCreateInfo::pVertexInputState apply", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891", + "text": "For pTessellationState, the same restrictions as in VkGraphicsPipelineCreateInfo::pTessellationState apply", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-parameter", + "text": "pStages must be a valid pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-arraylength", + "text": "stageCount must be greater than 0", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCreateRayTracingPipelinesNV": { + "core": [ + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-device-09677", + "text": "device must support at least one queue family with the VK_QUEUE_COMPUTE_BIT capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-flags-03415", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the basePipelineIndex member of that same element is not -1, basePipelineIndex must be less than the index into pCreateInfos that corresponds to that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-flags-03416", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-flags-03816", + "text": "flags must not contain the VK_PIPELINE_CREATE_DISPATCH_BASE_BIT flag", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pipelineCache-02903", + "text": "If pipelineCache was created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access to pipelineCache must be externally synchronized", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pNext-09616", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pNext-09617", + "text": "If a VkPipelineCreateFlags2CreateInfoKHR structure with the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag set is included in the pNext chain of any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-binaryCount-09620", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-binaryCount-09621", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-binaryCount-09622", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pNext-10150", + "text": "If a VkPipelineCreateFlags2CreateInfoKHR structure is included in the pNext chain of any element of pCreateInfos, VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag must not be set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkRayTracingPipelineCreateInfoNV structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pPipelines-parameter", + "text": "pPipelines must be a valid pointer to an array of createInfoCount VkPipeline handles", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesNV-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCreateRayTracingPipelinesKHR": { + "core": [ + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-device-09677", + "text": "device must support at least one queue family with the VK_QUEUE_COMPUTE_BIT capability", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-flags-03415", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the basePipelineIndex member of that same element is not -1, basePipelineIndex must be less than the index into pCreateInfos that corresponds to that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-flags-03416", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-flags-03816", + "text": "flags must not contain the VK_PIPELINE_CREATE_DISPATCH_BASE_BIT flag", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-02903", + "text": "If pipelineCache was created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access to pipelineCache must be externally synchronized", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pNext-09616", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pNext-09617", + "text": "If a VkPipelineCreateFlags2CreateInfoKHR structure with the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag set is included in the pNext chain of any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-binaryCount-09620", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-binaryCount-09621", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-binaryCount-09622", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT must not be set in the flags of that element", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-rayTracingPipeline-03586", + "text": "The rayTracingPipeline feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-03587", + "text": "If deferredOperation is not VK_NULL_HANDLE, the flags member of elements of pCreateInfos must not include VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkRayTracingPipelineCreateInfoKHR structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pPipelines-parameter", + "text": "pPipelines must be a valid pointer to an array of createInfoCount VkPipeline handles", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkRayTracingPipelineCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-None-09497", + "text": "If the pNext chain does not include a VkPipelineCreateFlags2CreateInfo structure, flags must be a valid combination of VkPipelineCreateFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-07984", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is -1, basePipelineHandle must be a valid ray tracing VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-07985", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is VK_NULL_HANDLE, basePipelineIndex must be a valid index into the calling command’s pCreateInfos parameter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-07986", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, basePipelineIndex must be -1 or basePipelineHandle must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-07987", + "text": "If a push constant block is declared in a shader, a push constant range in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-10069", + "text": "If a push constant block is declared in a shader, the block must be contained inside the push constant range in layout that matches the stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-07988", + "text": "If a resource variable is declared in a shader, the corresponding descriptor set in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-07990", + "text": "If a resource variable is declared in a shader, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set in layout must match the descriptor type", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-07991", + "text": "If a resource variable is declared in a shader as an array, the corresponding descriptor set in layout must match the descriptor count", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-None-10391", + "text": "If a resource variables is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pStages-03426", + "text": "The shader code for the entry points identified by pStages, and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-03428", + "text": "The number of resources in layout accessible to each shader stage that is used by the pipeline must be less than or equal to VkPhysicalDeviceLimits::maxPerStageResources", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-02904", + "text": "flags must not include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pipelineCreationCacheControl-02905", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-stage-06232", + "text": "The stage member of at least one element of pStages must be VK_SHADER_STAGE_RAYGEN_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03456", + "text": "flags must not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-maxRecursionDepth-03457", + "text": "maxRecursionDepth must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxRecursionDepth", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03458", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03459", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03460", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03461", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03462", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03463", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-03588", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-04948", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-02957", + "text": "flags must not include both VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV and VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT at the same time", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pipelineStageCreationFeedbackCount-06651", + "text": "If VkPipelineCreationFeedbackCreateInfo::pipelineStageCreationFeedbackCount is not 0, it must be equal to stageCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-stage-06898", + "text": "The stage value in all pStages elements must be one of VK_SHADER_STAGE_RAYGEN_BIT_KHR, VK_SHADER_STAGE_ANY_HIT_BIT_KHR, VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, VK_SHADER_STAGE_MISS_BIT_KHR, VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or VK_SHADER_STAGE_CALLABLE_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-07402", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-07998", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-flags-11008", + "text": "flags must not include VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineCreateFlags2CreateInfo or VkPipelineCreationFeedbackCreateInfo", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pStages-parameter", + "text": "pStages must be a valid pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-pGroups-parameter", + "text": "pGroups must be a valid pointer to an array of groupCount valid VkRayTracingShaderGroupCreateInfoNV structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-stageCount-arraylength", + "text": "stageCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-groupCount-arraylength", + "text": "groupCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoNV-commonparent", + "text": "Both of basePipelineHandle, and layout that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "VkRayTracingPipelineCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-None-09497", + "text": "If the pNext chain does not include a VkPipelineCreateFlags2CreateInfo structure, flags must be a valid combination of VkPipelineCreateFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-07984", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is -1, basePipelineHandle must be a valid ray tracing VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-07985", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is VK_NULL_HANDLE, basePipelineIndex must be a valid index into the calling command’s pCreateInfos parameter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-07986", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, basePipelineIndex must be -1 or basePipelineHandle must be VK_NULL_HANDLE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-07987", + "text": "If a push constant block is declared in a shader, a push constant range in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-10069", + "text": "If a push constant block is declared in a shader, the block must be contained inside the push constant range in layout that matches the stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-07988", + "text": "If a resource variable is declared in a shader, the corresponding descriptor set in layout must match the shader stage", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-07990", + "text": "If a resource variable is declared in a shader, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set in layout must match the descriptor type", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-07991", + "text": "If a resource variable is declared in a shader as an array, the corresponding descriptor set in layout must match the descriptor count", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-None-10391", + "text": "If a resource variables is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pStages-03426", + "text": "The shader code for the entry points identified by pStages, and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-03428", + "text": "The number of resources in layout accessible to each shader stage that is used by the pipeline must be less than or equal to VkPhysicalDeviceLimits::maxPerStageResources", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-02904", + "text": "flags must not include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pipelineCreationCacheControl-02905", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, the stage member of at least one element of pStages, including those implicitly added by pLibraryInfo, must be VK_SHADER_STAGE_RAYGEN_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-maxPipelineRayRecursionDepth-03589", + "text": "maxPipelineRayRecursionDepth must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayRecursionDepth", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465", + "text": "If flags includes VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, pLibraryInterface must not be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03590", + "text": "If pLibraryInfo is not NULL and its libraryCount member is greater than 0, pLibraryInterface must not be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03591", + "text": "Each element of pLibraryInfo->pLibraries must have been created with the value of maxPipelineRayRecursionDepth equal to that in this pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03592", + "text": "If pLibraryInfo is not NULL, each element of its pLibraries member must have been created with a layout that is compatible with the layout in this pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03593", + "text": "If pLibraryInfo is not NULL, each element of its pLibraries member must have been created with values of the maxPipelineRayPayloadSize and maxPipelineRayHitAttributeSize members of pLibraryInterface equal to those in this pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03594", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-04718", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-04719", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-04720", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-04721", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-04722", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-04723", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-03595", + "text": "If the VK_KHR_pipeline_library extension is not enabled, pLibraryInfo and pLibraryInterface must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, for any element of pGroups with a type of VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the anyHitShader of that element must not be VK_SHADER_UNUSED_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, for any element of pGroups with a type of VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR or VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, the closestHitShader of that element must not be VK_SHADER_UNUSED_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03596", + "text": "If the rayTraversalPrimitiveCulling feature is not enabled, flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-rayTraversalPrimitiveCulling-03597", + "text": "If the rayTraversalPrimitiveCulling feature is not enabled, flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-06546", + "text": "flags must not include both VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR and VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-03598", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR, rayTracingPipelineShaderGroupHandleCaptureReplay must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03599", + "text": "If VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineShaderGroupHandleCaptureReplay is VK_TRUE and the pShaderGroupCaptureReplayHandle member of any element of pGroups is not NULL, flags must include VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-07999", + "text": "If pLibraryInfo is NULL or its libraryCount is 0, stageCount must not be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-08700", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR and either pLibraryInfo is NULL or its libraryCount is 0, groupCount must not be 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicStates-03602", + "text": "Any element of the pDynamicStates member of pDynamicState must be VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pipelineStageCreationFeedbackCount-06652", + "text": "If VkPipelineCreationFeedbackCreateInfo::pipelineStageCreationFeedbackCount is not 0, it must be equal to stageCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-stage-06899", + "text": "The stage value in all pStages elements must be one of VK_SHADER_STAGE_RAYGEN_BIT_KHR, VK_SHADER_STAGE_ANY_HIT_BIT_KHR, VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, VK_SHADER_STAGE_MISS_BIT_KHR, VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or VK_SHADER_STAGE_CALLABLE_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-07403", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-08701", + "text": "If flags includes VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV, each element of pLibraryInfo->pLibraries must have been created with the VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV bit set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-flags-10392", + "text": "If the pNext chain includes a VkPipelineCreateFlags2CreateInfo structure, flags must not include both VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT and VK_PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineBinaryInfoKHR, VkPipelineCreateFlags2CreateInfo, VkPipelineCreationFeedbackCreateInfo, VkPipelineRobustnessCreateInfo, or VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pStages-parameter", + "text": "If stageCount is not 0, pStages must be a valid pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pGroups-parameter", + "text": "If groupCount is not 0, pGroups must be a valid pointer to an array of groupCount valid VkRayTracingShaderGroupCreateInfoKHR structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInfo-parameter", + "text": "If pLibraryInfo is not NULL, pLibraryInfo must be a valid pointer to a valid VkPipelineLibraryCreateInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInterface-parameter", + "text": "If pLibraryInterface is not NULL, pLibraryInterface must be a valid pointer to a valid VkRayTracingPipelineInterfaceCreateInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-pDynamicState-parameter", + "text": "If pDynamicState is not NULL, pDynamicState must be a valid pointer to a valid VkPipelineDynamicStateCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineCreateInfoKHR-commonparent", + "text": "Both of basePipelineHandle, and layout that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV-clusterAccelerationStructure-10576", + "text": "The VkPhysicalDeviceClusterAccelerationStructureFeaturesNV::clusterAccelerationStructure feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CLUSTER_ACCELERATION_STRUCTURE_CREATE_INFO_NV", + "page": "chapters/pipelines.html" + } + ] + }, + "VkRayTracingShaderGroupCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02413", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then generalShader must be a valid index into VkRayTracingPipelineCreateInfoNV::pStages referring to a shader of VK_SHADER_STAGE_RAYGEN_BIT_NV, VK_SHADER_STAGE_MISS_BIT_NV, or VK_SHADER_STAGE_CALLABLE_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02414", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV then closestHitShader, anyHitShader, and intersectionShader must be VK_SHADER_UNUSED_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02415", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV then intersectionShader must be a valid index into VkRayTracingPipelineCreateInfoNV::pStages referring to a shader of VK_SHADER_STAGE_INTERSECTION_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-02416", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV then intersectionShader must be VK_SHADER_UNUSED_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-closestHitShader-02417", + "text": "closestHitShader must be either VK_SHADER_UNUSED_NV or a valid index into VkRayTracingPipelineCreateInfoNV::pStages referring to a shader of VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-anyHitShader-02418", + "text": "anyHitShader must be either VK_SHADER_UNUSED_NV or a valid index into VkRayTracingPipelineCreateInfoNV::pStages referring to a shader of VK_SHADER_STAGE_ANY_HIT_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoNV-type-parameter", + "text": "type must be a valid VkRayTracingShaderGroupTypeKHR value", + "page": "chapters/pipelines.html" + } + ] + }, + "VkRayTracingShaderGroupCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then generalShader must be a valid index into VkRayTracingPipelineCreateInfoKHR::pStages referring to a shader of VK_SHADER_STAGE_RAYGEN_BIT_KHR, VK_SHADER_STAGE_MISS_BIT_KHR, or VK_SHADER_STAGE_CALLABLE_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR then closestHitShader, anyHitShader, and intersectionShader must be VK_SHADER_UNUSED_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR then intersectionShader must be a valid index into VkRayTracingPipelineCreateInfoKHR::pStages referring to a shader of VK_SHADER_STAGE_INTERSECTION_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477", + "text": "If type is VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR then intersectionShader must be VK_SHADER_UNUSED_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478", + "text": "closestHitShader must be either VK_SHADER_UNUSED_KHR or a valid index into VkRayTracingPipelineCreateInfoKHR::pStages referring to a shader of VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479", + "text": "anyHitShader must be either VK_SHADER_UNUSED_KHR or a valid index into VkRayTracingPipelineCreateInfoKHR::pStages referring to a shader of VK_SHADER_STAGE_ANY_HIT_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03603", + "text": "If VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineShaderGroupHandleCaptureReplayMixed is VK_FALSE then pShaderGroupCaptureReplayHandle must not be provided if it has not been provided on a previous call to ray tracing pipeline creation", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03604", + "text": "If VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineShaderGroupHandleCaptureReplayMixed is VK_FALSE then the caller must guarantee that no ray tracing pipeline creation commands with pShaderGroupCaptureReplayHandle provided execute simultaneously with ray tracing pipeline creation commands without pShaderGroupCaptureReplayHandle provided", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingShaderGroupCreateInfoKHR-type-parameter", + "text": "type must be a valid VkRayTracingShaderGroupTypeKHR value", + "page": "chapters/pipelines.html" + } + ] + }, + "VkRayTracingPipelineInterfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-maxPipelineRayHitAttributeSize-03605", + "text": "maxPipelineRayHitAttributeSize must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayHitAttributeSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkRayTracingPipelineInterfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetRayTracingShaderGroupHandlesKHR": { + "core": [ + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-04619", + "text": "pipeline must be a ray tracing pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050", + "text": "firstGroup must be less than the number of shader groups in pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419", + "text": "The sum of firstGroup and groupCount must be less than or equal to the number of shader groups in pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420", + "text": "dataSize must be at least VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleSize × groupCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-07828", + "text": "If the pipelineLibraryGroupHandles feature is not enabled, pipeline must not have been created with VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parent", + "text": "pipeline must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR": { + "core": [ + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-04620", + "text": "pipeline must be a ray tracing pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051", + "text": "firstGroup must be less than the number of shader groups in pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483", + "text": "The sum of firstGroup and groupCount must be less than or equal to the number of shader groups in pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484", + "text": "dataSize must be at least VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleCaptureReplaySize × groupCount", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingPipelineShaderGroupHandleCaptureReplay-03606", + "text": "VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipelineShaderGroupHandleCaptureReplay must be enabled to call this function", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-03607", + "text": "pipeline must have been created with a flags that included VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-07829", + "text": "If the pipelineLibraryGroupHandles feature is not enabled, pipeline must not have been created with VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parent", + "text": "pipeline must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCompileDeferredNV": { + "core": [ + { + "vuid": "VUID-vkCompileDeferredNV-pipeline-04621", + "text": "pipeline must be a ray tracing pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCompileDeferredNV-pipeline-02237", + "text": "pipeline must have been created with VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCompileDeferredNV-shader-02238", + "text": "shader must not have been called as a deferred compile before", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCompileDeferredNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCompileDeferredNV-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCompileDeferredNV-pipeline-parent", + "text": "pipeline must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetRayTracingShaderGroupStackSizeKHR": { + "core": [ + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-04622", + "text": "pipeline must be a ray tracing pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-group-03608", + "text": "The value of group must be less than the number of shader groups in pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-03609", + "text": "The shader identified by groupShader in group must not be VK_SHADER_UNUSED_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-groupShader-parameter", + "text": "groupShader must be a valid VkShaderGroupShaderKHR value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetRayTracingShaderGroupStackSizeKHR-pipeline-parent", + "text": "pipeline must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCmdSetRayTracingPipelineStackSizeKHR": { + "core": [ + { + "vuid": "VUID-vkCmdSetRayTracingPipelineStackSizeKHR-pipelineStackSize-03610", + "text": "pipelineStackSize must be large enough for any dynamic execution through the shaders in the ray tracing pipeline used by a subsequent trace call", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdSetRayTracingPipelineStackSizeKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdSetRayTracingPipelineStackSizeKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdSetRayTracingPipelineStackSizeKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdSetRayTracingPipelineStackSizeKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdSetRayTracingPipelineStackSizeKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/pipelines.html" + } + ] + }, + "vkDestroyPipeline": { + "core": [ + { + "vuid": "VUID-vkDestroyPipeline-pipeline-00765", + "text": "All submitted commands that refer to pipeline must have completed execution", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipeline-pipeline-00766", + "text": "If VkAllocationCallbacks were provided when pipeline was created, a compatible set of callbacks must be provided here", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipeline-pipeline-00767", + "text": "If no VkAllocationCallbacks were provided when pipeline was created, pAllocator must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipeline-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipeline-pipeline-parameter", + "text": "If pipeline is not VK_NULL_HANDLE, pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipeline-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipeline-pipeline-parent", + "text": "If pipeline is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCreatePipelineCache": { + "core": [ + { + "vuid": "VUID-vkCreatePipelineCache-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreatePipelineCache-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkPipelineCacheCreateInfo structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreatePipelineCache-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreatePipelineCache-pPipelineCache-parameter", + "text": "pPipelineCache must be a valid pointer to a VkPipelineCache handle", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineCacheCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineCacheCreateInfo-initialDataSize-00768", + "text": "If initialDataSize is not 0, it must be equal to the size of pInitialData, as returned by vkGetPipelineCacheData when pInitialData was originally retrieved", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-initialDataSize-00769", + "text": "If initialDataSize is not 0, pInitialData must have been retrieved from a previous call to vkGetPipelineCacheData", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-pipelineCreationCacheControl-02892", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-maintenance8-10200", + "text": "If the maintenance8 feature is not enabled, flags must not include VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-flags-10201", + "text": "If flags includes VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, it must not include VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkPipelineCacheCreateFlagBits values", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheCreateInfo-pInitialData-parameter", + "text": "If initialDataSize is not 0, pInitialData must be a valid pointer to an array of initialDataSize bytes", + "page": "chapters/pipelines.html" + } + ] + }, + "vkMergePipelineCaches": { + "core": [ + { + "vuid": "VUID-vkMergePipelineCaches-dstCache-00770", + "text": "dstCache must not appear in the list of source caches", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-dstCache-10202", + "text": "Host access to dstCache must be externally synchronized if it was not created with VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-dstCache-parameter", + "text": "dstCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-pSrcCaches-parameter", + "text": "pSrcCaches must be a valid pointer to an array of srcCacheCount valid VkPipelineCache handles", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-srcCacheCount-arraylength", + "text": "srcCacheCount must be greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-dstCache-parent", + "text": "dstCache must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkMergePipelineCaches-pSrcCaches-parent", + "text": "Each element of pSrcCaches must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelineCacheData": { + "core": [ + { + "vuid": "VUID-vkGetPipelineCacheData-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parameter", + "text": "pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineCacheData-pDataSize-parameter", + "text": "pDataSize must be a valid pointer to a size_t value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineCacheData-pData-parameter", + "text": "If the value referenced by pDataSize is not 0, and pData is not NULL, pData must be a valid pointer to an array of pDataSize bytes", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineCacheData-pipelineCache-parent", + "text": "pipelineCache must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineCacheHeaderVersionOne": { + "core": [ + { + "vuid": "VUID-VkPipelineCacheHeaderVersionOne-headerSize-04967", + "text": "headerSize must be 32", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheHeaderVersionOne-headerVersion-04968", + "text": "headerVersion must be VK_PIPELINE_CACHE_HEADER_VERSION_ONE", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheHeaderVersionOne-headerSize-08990", + "text": "headerSize must not exceed the size of the pipeline cache", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCacheHeaderVersionOne-headerVersion-parameter", + "text": "headerVersion must be a valid VkPipelineCacheHeaderVersion value", + "page": "chapters/pipelines.html" + } + ] + }, + "vkDestroyPipelineCache": { + "core": [ + { + "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-00771", + "text": "If VkAllocationCallbacks were provided when pipelineCache was created, a compatible set of callbacks must be provided here", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-00772", + "text": "If no VkAllocationCallbacks were provided when pipelineCache was created, pAllocator must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineCache-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineCache-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineCache-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelineKeyKHR": { + "core": [ + { + "vuid": "VUID-vkGetPipelineKeyKHR-pNext-09605", + "text": "The pNext chain of pPipelineCreateInfo must not set VkPipelineBinaryInfoKHR::binaryCount to a value greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineKeyKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineKeyKHR-pPipelineCreateInfo-parameter", + "text": "If pPipelineCreateInfo is not NULL, pPipelineCreateInfo must be a valid pointer to a valid VkPipelineCreateInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineKeyKHR-pPipelineKey-parameter", + "text": "pPipelineKey must be a valid pointer to a VkPipelineBinaryKeyKHR structure", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineCreateInfoKHR-pNext-09604", + "text": "pNext must be pointer to a valid instance of VkGraphicsPipelineCreateInfo, VkExecutionGraphPipelineCreateInfoAMDX, VkRayTracingPipelineCreateInfoKHR, or VkComputePipelineCreateInfo", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_CREATE_INFO_KHR", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryKeyKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryKeyKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_BINARY_KEY_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryKeyKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCreatePipelineBinariesKHR": { + "core": [ + { + "vuid": "VUID-vkCreatePipelineBinariesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreatePipelineBinariesKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkPipelineBinaryCreateInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreatePipelineBinariesKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCreatePipelineBinariesKHR-pBinaries-parameter", + "text": "pBinaries must be a valid pointer to a VkPipelineBinaryHandlesInfoKHR structure", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryHandlesInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryHandlesInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_BINARY_HANDLES_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryHandlesInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryHandlesInfoKHR-pPipelineBinaries-parameter", + "text": "If pipelineBinaryCount is not 0, and pPipelineBinaries is not NULL, pPipelineBinaries must be a valid pointer to an array of pipelineBinaryCount VkPipelineBinaryKHR handles", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pipeline-09607", + "text": "If pipeline is not VK_NULL_HANDLE, pipeline must have been created with VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pipeline-09608", + "text": "If pipeline is not VK_NULL_HANDLE, vkReleaseCapturedPipelineDataKHR must not have been called on pipeline prior to this command", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pipelineBinaryInternalCache-09609", + "text": "If pipelineBinaryInternalCache is VK_FALSE pPipelineCreateInfo must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-device-09610", + "text": "If device was created with VkDevicePipelineBinaryInternalCacheControlKHR::disableInternalCache set to VK_TRUE, pPipelineCreateInfo must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pKeysAndDataInfo-09619", + "text": "One and only one of pKeysAndDataInfo, pipeline, or pPipelineCreateInfo must be non-NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pPipelineCreateInfo-09606", + "text": "If pPipelineCreateInfo is not NULL, the pNext chain of pPipelineCreateInfo must not set VkPipelineBinaryInfoKHR::binaryCount to a value greater than 0", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_BINARY_CREATE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pKeysAndDataInfo-parameter", + "text": "If pKeysAndDataInfo is not NULL, pKeysAndDataInfo must be a valid pointer to a valid VkPipelineBinaryKeysAndDataKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pipeline-parameter", + "text": "If pipeline is not VK_NULL_HANDLE, pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryCreateInfoKHR-pPipelineCreateInfo-parameter", + "text": "If pPipelineCreateInfo is not NULL, pPipelineCreateInfo must be a valid pointer to a valid VkPipelineCreateInfoKHR structure", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryKeysAndDataKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryKeysAndDataKHR-pPipelineBinaryKeys-parameter", + "text": "pPipelineBinaryKeys must be a valid pointer to an array of binaryCount valid VkPipelineBinaryKeyKHR structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryKeysAndDataKHR-pPipelineBinaryData-parameter", + "text": "pPipelineBinaryData must be a valid pointer to an array of binaryCount valid VkPipelineBinaryDataKHR structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryKeysAndDataKHR-binaryCount-arraylength", + "text": "binaryCount must be greater than 0", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryDataKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryDataKHR-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryDataKHR-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelineBinaryDataKHR": { + "core": [ + { + "vuid": "VUID-vkGetPipelineBinaryDataKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineBinaryDataKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkPipelineBinaryDataInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineBinaryDataKHR-pPipelineBinaryKey-parameter", + "text": "pPipelineBinaryKey must be a valid pointer to a VkPipelineBinaryKeyKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineBinaryDataKHR-pPipelineBinaryDataSize-parameter", + "text": "pPipelineBinaryDataSize must be a valid pointer to a size_t value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineBinaryDataKHR-pPipelineBinaryData-parameter", + "text": "If the value referenced by pPipelineBinaryDataSize is not 0, and pPipelineBinaryData is not NULL, pPipelineBinaryData must be a valid pointer to an array of pPipelineBinaryDataSize bytes", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineBinaryDataInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineBinaryDataInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_BINARY_DATA_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryDataInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineBinaryDataInfoKHR-pipelineBinary-parameter", + "text": "pipelineBinary must be a valid VkPipelineBinaryKHR handle", + "page": "chapters/pipelines.html" + } + ] + }, + "vkReleaseCapturedPipelineDataKHR": { + "core": [ + { + "vuid": "VUID-vkReleaseCapturedPipelineDataKHR-pipeline-09611", + "text": "If VkAllocationCallbacks were provided when pipeline was created, a compatible set of callbacks must be provided in pAllocator", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkReleaseCapturedPipelineDataKHR-pipeline-09612", + "text": "If no VkAllocationCallbacks were provided when pipeline was created, pAllocator must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkReleaseCapturedPipelineDataKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkReleaseCapturedPipelineDataKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkReleaseCapturedPipelineDataInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkReleaseCapturedPipelineDataKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + } + ] + }, + "VkReleaseCapturedPipelineDataInfoKHR": { + "core": [ + { + "vuid": "VUID-VkReleaseCapturedPipelineDataInfoKHR-pipeline-09613", + "text": "pipeline must have been created with VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkReleaseCapturedPipelineDataInfoKHR-pipeline-09618", + "text": "pipeline must not have been used in a previous call to vkReleaseCapturedPipelineDataKHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkReleaseCapturedPipelineDataInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RELEASE_CAPTURED_PIPELINE_DATA_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkReleaseCapturedPipelineDataInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkReleaseCapturedPipelineDataInfoKHR-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + } + ] + }, + "vkDestroyPipelineBinaryKHR": { + "core": [ + { + "vuid": "VUID-vkDestroyPipelineBinaryKHR-pipelineBinary-09614", + "text": "If VkAllocationCallbacks were provided when pipelineBinary was created, a compatible set of callbacks must be provided here", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineBinaryKHR-pipelineBinary-09615", + "text": "If no VkAllocationCallbacks were provided when pipelineBinary was created, pAllocator must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineBinaryKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineBinaryKHR-pipelineBinary-parameter", + "text": "If pipelineBinary is not VK_NULL_HANDLE, pipelineBinary must be a valid VkPipelineBinaryKHR handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineBinaryKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkDestroyPipelineBinaryKHR-pipelineBinary-parent", + "text": "If pipelineBinary is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkSpecializationInfo": { + "core": [ + { + "vuid": "VUID-VkSpecializationInfo-offset-00773", + "text": "The offset member of each element of pMapEntries must be less than dataSize", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkSpecializationInfo-pMapEntries-00774", + "text": "The size member of each element of pMapEntries must be less than or equal to dataSize minus offset", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkSpecializationInfo-constantID-04911", + "text": "The constantID value of each element of pMapEntries must be unique within pMapEntries", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkSpecializationInfo-pMapEntries-parameter", + "text": "If mapEntryCount is not 0, pMapEntries must be a valid pointer to an array of mapEntryCount valid VkSpecializationMapEntry structures", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkSpecializationInfo-pData-parameter", + "text": "If dataSize is not 0, pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/pipelines.html" + } + ] + }, + "VkSpecializationMapEntry": { + "core": [ + { + "vuid": "VUID-VkSpecializationMapEntry-constantID-00776", + "text": "For a constantID specialization constant declared in a shader, size must match the byte size of the constantID. If the specialization constant is of type boolean, size must be the byte size of VkBool32", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineLibraryCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-03381", + "text": "Each element of pLibraries must have been created with VK_PIPELINE_CREATE_LIBRARY_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-06855", + "text": "If any library in pLibraries was created with a shader stage with VkPipelineShaderStageModuleIdentifierCreateInfoEXT and identifierSize not equal to 0, the pipeline must be created with the VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT flag set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-08096", + "text": "If any element of pLibraries was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, all elements must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07404", + "text": "If pipeline is being created with VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, every element of pLibraries must have been created with VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07405", + "text": "If pipeline is being created without VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, every element of pLibraries must have been created without VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07406", + "text": "If pipeline is being created with VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT, every element of pLibraries must have been created with VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pipeline-07407", + "text": "If pipeline is being created without VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT, every element of pLibraries must have been created without VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-parameter", + "text": "If libraryCount is not 0, pLibraries must be a valid pointer to an array of libraryCount valid VkPipeline handles", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCmdBindPipeline": { + "core": [ + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00777", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_COMPUTE, the VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00778", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_GRAPHICS, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00779", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_COMPUTE, pipeline must be a compute pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-00780", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline must be a graphics pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipeline-00781", + "text": "If the variableMultisampleRate feature is not supported, pipeline is a graphics pipeline, the current subpass uses no attachments, and this is not the first call to this function with a graphics pipeline after transitioning to the current subpass, then the sample count specified by this pipeline must match that set in the previous pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-variableSampleLocations-01525", + "text": "If VkPhysicalDeviceSampleLocationsPropertiesEXT::variableSampleLocations is VK_FALSE, and pipeline is a graphics pipeline created with a VkPipelineSampleLocationsStateCreateInfoEXT structure having its sampleLocationsEnable member set to VK_TRUE but without VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT enabled then the current render pass instance must have been begun by specifying a VkRenderPassSampleLocationsBeginInfoEXT structure whose pPostSubpassSampleLocations member contains an element with a subpassIndex matching the current subpass index and the sampleLocationsInfo member of that element must match the sampleLocationsInfo specified in VkPipelineSampleLocationsStateCreateInfoEXT when the pipeline was created", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-None-02323", + "text": "This command must not be recorded when transform feedback is active", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-02391", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, the VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-02392", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, pipeline must be a ray tracing pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-06721", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, commandBuffer must not be a protected command buffer", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineProtectedAccess-07408", + "text": "If the pipelineProtectedAccess feature is enabled, and commandBuffer is a protected command buffer, pipeline must have been created without VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineProtectedAccess-07409", + "text": "If the pipelineProtectedAccess feature is enabled, and commandBuffer is not a protected command buffer, pipeline must have been created without VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipeline-03382", + "text": "pipeline must not have been created with VK_PIPELINE_CREATE_LIBRARY_BIT_KHR set", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-commandBuffer-04808", + "text": "If commandBuffer is a secondary command buffer with VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled and pipelineBindPoint is VK_PIPELINE_BIND_POINT_GRAPHICS, then the pipeline must have been created with VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT or VK_DYNAMIC_STATE_VIEWPORT, and VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT or VK_DYNAMIC_STATE_SCISSOR enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-commandBuffer-04809", + "text": "If commandBuffer is a secondary command buffer with VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled and pipelineBindPoint is VK_PIPELINE_BIND_POINT_GRAPHICS and pipeline was created with VkPipelineDiscardRectangleStateCreateInfoEXT structure and its discardRectangleCount member is not 0, or the pipeline was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT enabled, then the pipeline must have been created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-04881", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_GRAPHICS and the provokingVertexModePerPipeline limit is VK_FALSE, then pipeline’s VkPipelineRasterizationProvokingVertexStateCreateInfoEXT::provokingVertexMode must be the same as that of any other pipelines previously bound to this bind point within the current render pass instance, including any pipeline already bound when beginning the render pass instance", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-04949", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, the VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-04950", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, pipeline must be a subpass shading pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-09910", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM, the VkCommandPool that commandBuffer was allocated from must have been created for a queue family that supports VK_QUEUE_DATA_GRAPH_BIT_ARM", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-09911", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM, pipeline must be a data graph pipeline", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipeline-09912", + "text": "If pipeline is a data graph pipeline and the VkDataGraphPipelineCreateInfoARM structure used to create it had a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain that specified any foreign data processing engines, then the command pool from which commandBuffer was allocated must have been created with a VkCommandPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure specifying a superset of the foreign data graph processing engines specified at pipeline creation time in its pNext chain", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipeline-09913", + "text": "If pipeline is a data graph pipeline and the VkDataGraphPipelineCreateInfoARM structure used to create it did not have a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain, then the command pool from which commandBuffer was allocated must not have been created with a VkCommandPoolCreateInfo that had a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or data_graph operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipeline-commonparent", + "text": "Both of commandBuffer, and pipeline must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "vkCmdBindPipelineShaderGroupNV": { + "core": [ + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893", + "text": "groupIndex must be 0 or less than the effective VkGraphicsPipelineShaderGroupsCreateInfoNV::groupCount including the referenced pipelines", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894", + "text": "The pipelineBindPoint must be VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895", + "text": "The same restrictions as vkCmdBindPipeline apply as if the bound pipeline was created only with the Shader Group from the groupIndex information", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkCmdBindPipelineShaderGroupNV-commonparent", + "text": "Both of commandBuffer, and pipeline must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelineExecutablePropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pipelineExecutableInfo-03270", + "text": "The pipelineExecutableInfo feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271", + "text": "The pipeline member of pPipelineInfo must have been created with device", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pPipelineInfo-parameter", + "text": "pPipelineInfo must be a valid pointer to a valid VkPipelineInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pExecutableCount-parameter", + "text": "pExecutableCount must be a valid pointer to a uint32_t value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutablePropertiesKHR-pProperties-parameter", + "text": "If the value referenced by pExecutableCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pExecutableCount VkPipelineExecutablePropertiesKHR structures", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineExecutablePropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineExecutablePropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineExecutablePropertiesKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelinePropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkGetPipelinePropertiesEXT-pipeline-06738", + "text": "The pipeline member of pPipelineInfo must have been created with device", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelinePropertiesEXT-pPipelineProperties-06739", + "text": "pPipelineProperties must be a valid pointer to a VkPipelinePropertiesIdentifierEXT structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelinePropertiesEXT-None-06766", + "text": "The pipelinePropertiesIdentifier feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelinePropertiesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelinePropertiesEXT-pPipelineInfo-parameter", + "text": "pPipelineInfo must be a valid pointer to a valid VkPipelineInfoEXT structure", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelinePropertiesIdentifierEXT": { + "core": [ + { + "vuid": "VUID-VkPipelinePropertiesIdentifierEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_PROPERTIES_IDENTIFIER_EXT", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelinePropertiesIdentifierEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineInfoKHR-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelineExecutableStatisticsKHR": { + "core": [ + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pipelineExecutableInfo-03272", + "text": "The pipelineExecutableInfo feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273", + "text": "The pipeline member of pExecutableInfo must have been created with device", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274", + "text": "The pipeline member of pExecutableInfo must have been created with VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pExecutableInfo-parameter", + "text": "pExecutableInfo must be a valid pointer to a valid VkPipelineExecutableInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pStatisticCount-parameter", + "text": "pStatisticCount must be a valid pointer to a uint32_t value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableStatisticsKHR-pStatistics-parameter", + "text": "If the value referenced by pStatisticCount is not 0, and pStatistics is not NULL, pStatistics must be a valid pointer to an array of pStatisticCount VkPipelineExecutableStatisticKHR structures", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineExecutableInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineExecutableInfoKHR-executableIndex-03275", + "text": "executableIndex must be less than the number of pipeline executables associated with pipeline as returned in the pExecutableCount parameter of vkGetPipelineExecutablePropertiesKHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineExecutableInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineExecutableInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineExecutableInfoKHR-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineExecutableStatisticKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineExecutableStatisticKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineExecutableStatisticKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetPipelineExecutableInternalRepresentationsKHR": { + "core": [ + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipelineExecutableInfo-03276", + "text": "The pipelineExecutableInfo feature must be enabled", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277", + "text": "The pipeline member of pExecutableInfo must have been created with device", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278", + "text": "The pipeline member of pExecutableInfo must have been created with VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pExecutableInfo-parameter", + "text": "pExecutableInfo must be a valid pointer to a valid VkPipelineExecutableInfoKHR structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pInternalRepresentationCount-parameter", + "text": "pInternalRepresentationCount must be a valid pointer to a uint32_t value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pInternalRepresentations-parameter", + "text": "If the value referenced by pInternalRepresentationCount is not 0, and pInternalRepresentations is not NULL, pInternalRepresentations must be a valid pointer to an array of pInternalRepresentationCount VkPipelineExecutableInternalRepresentationKHR structures", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineExecutableInternalRepresentationKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineExecutableInternalRepresentationKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineExecutableInternalRepresentationKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/pipelines.html" + } + ] + }, + "vkGetShaderInfoAMD": { + "core": [ + { + "vuid": "VUID-vkGetShaderInfoAMD-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetShaderInfoAMD-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetShaderInfoAMD-shaderStage-parameter", + "text": "shaderStage must be a valid VkShaderStageFlagBits value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetShaderInfoAMD-infoType-parameter", + "text": "infoType must be a valid VkShaderInfoTypeAMD value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetShaderInfoAMD-pInfoSize-parameter", + "text": "pInfoSize must be a valid pointer to a size_t value", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetShaderInfoAMD-pInfo-parameter", + "text": "If the value referenced by pInfoSize is not 0, and pInfo is not NULL, pInfo must be a valid pointer to an array of pInfoSize bytes", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-vkGetShaderInfoAMD-pipeline-parent", + "text": "pipeline must have been created, allocated, or retrieved from device", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineCompilerControlCreateInfoAMD": { + "core": [ + { + "vuid": "VUID-VkPipelineCompilerControlCreateInfoAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCompilerControlCreateInfoAMD-compilerControlFlags-zerobitmask", + "text": "compilerControlFlags must be 0", + "page": "chapters/pipelines.html" + } + ] + }, + "VkPipelineCreationFeedbackCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineCreationFeedbackCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCreationFeedbackCreateInfo-pPipelineCreationFeedback-parameter", + "text": "pPipelineCreationFeedback must be a valid pointer to a VkPipelineCreationFeedback structure", + "page": "chapters/pipelines.html" + }, + { + "vuid": "VUID-VkPipelineCreationFeedbackCreateInfo-pPipelineStageCreationFeedbacks-parameter", + "text": "If pipelineStageCreationFeedbackCount is not 0, pPipelineStageCreationFeedbacks must be a valid pointer to an array of pipelineStageCreationFeedbackCount VkPipelineCreationFeedback structures", + "page": "chapters/pipelines.html" + } + ] + }, + "VkAllocationCallbacks": { + "core": [ + { + "vuid": "VUID-VkAllocationCallbacks-pfnAllocation-00632", + "text": "pfnAllocation must be a valid pointer to a valid application-defined PFN_vkAllocationFunction", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkAllocationCallbacks-pfnReallocation-00633", + "text": "pfnReallocation must be a valid pointer to a valid application-defined PFN_vkReallocationFunction", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkAllocationCallbacks-pfnFree-00634", + "text": "pfnFree must be a valid pointer to a valid application-defined PFN_vkFreeFunction", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkAllocationCallbacks-pfnInternalAllocation-00635", + "text": "If either of pfnInternalAllocation or pfnInternalFree is not NULL, both must be valid callbacks", + "page": "chapters/memory.html" + } + ] + }, + "vkGetPhysicalDeviceMemoryProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties-pMemoryProperties-parameter", + "text": "pMemoryProperties must be a valid pointer to a VkPhysicalDeviceMemoryProperties structure", + "page": "chapters/memory.html" + } + ] + }, + "vkGetPhysicalDeviceMemoryProperties2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceMemoryProperties2-pMemoryProperties-parameter", + "text": "pMemoryProperties must be a valid pointer to a VkPhysicalDeviceMemoryProperties2 structure", + "page": "chapters/memory.html" + } + ] + }, + "VkPhysicalDeviceMemoryProperties2": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMemoryProperties2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceMemoryProperties2-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPhysicalDeviceMemoryBudgetPropertiesEXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceMemoryProperties2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/memory.html" + } + ] + }, + "VkPhysicalDeviceMemoryBudgetPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMemoryBudgetPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT", + "page": "chapters/memory.html" + } + ] + }, + "vkAllocateMemory": { + "core": [ + { + "vuid": "VUID-vkAllocateMemory-pAllocateInfo-01713", + "text": "pAllocateInfo->allocationSize must be less than or equal to VkPhysicalDeviceMemoryProperties::memoryHeaps[memindex].size where memindex = VkPhysicalDeviceMemoryProperties::memoryTypes[pAllocateInfo->memoryTypeIndex].heapIndex as returned by vkGetPhysicalDeviceMemoryProperties for the VkPhysicalDevice that device was created from", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-pAllocateInfo-01714", + "text": "pAllocateInfo->memoryTypeIndex must be less than VkPhysicalDeviceMemoryProperties::memoryTypeCount as returned by vkGetPhysicalDeviceMemoryProperties for the VkPhysicalDevice that device was created from", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-deviceCoherentMemory-02790", + "text": "If the deviceCoherentMemory feature is not enabled, pAllocateInfo->memoryTypeIndex must not identify a memory type supporting VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-maxMemoryAllocationCount-04101", + "text": "There must be less than VkPhysicalDeviceLimits::maxMemoryAllocationCount device memory allocations currently allocated on the device", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkTileMemoryBindInfoQCOM-memoryTypeIndex", + "text": "If the tileMemoryHeap feature is not enabled, pAllocateInfo->memoryTypeIndex must not identify a memory type that corresponds to a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-pAllocateInfo-parameter", + "text": "pAllocateInfo must be a valid pointer to a valid VkMemoryAllocateInfo structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-pMemory-parameter", + "text": "pMemory must be a valid pointer to a VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkAllocateMemory-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-07897", + "text": "If the parameters do not define an import or export operation, allocationSize must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-None-06657", + "text": "The parameters must not define more than one import operation", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-07899", + "text": "If the parameters define an export operation and the handle type is not VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID , allocationSize must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-buffer-06380", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA, and VkMemoryDedicatedAllocateInfo::buffer is present and non-NULL, VkImportMemoryBufferCollectionFUCHSIA::collection and VkImportMemoryBufferCollectionFUCHSIA::index must match VkBufferCollectionBufferCreateInfoFUCHSIA::collection and VkBufferCollectionBufferCreateInfoFUCHSIA::index, respectively, of the VkBufferCollectionBufferCreateInfoFUCHSIA structure used to create the VkMemoryDedicatedAllocateInfo::buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-image-06381", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA, and VkMemoryDedicatedAllocateInfo::image is present and non-NULL, VkImportMemoryBufferCollectionFUCHSIA::collection and VkImportMemoryBufferCollectionFUCHSIA::index must match VkBufferCollectionImageCreateInfoFUCHSIA::collection and VkBufferCollectionImageCreateInfoFUCHSIA::index, respectively, of the VkBufferCollectionImageCreateInfoFUCHSIA structure used to create the VkMemoryDedicatedAllocateInfo::image", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-06382", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA, allocationSize must match VkMemoryRequirements::size value retrieved by vkGetImageMemoryRequirements or vkGetBufferMemoryRequirements for image-based or buffer-based collections respectively", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-06383", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA, the pNext chain must include a VkMemoryDedicatedAllocateInfo structure with either its image or buffer field set to a value other than VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-image-06384", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA and VkMemoryDedicatedAllocateInfo::image is not VK_NULL_HANDLE, the image must be created with a VkBufferCollectionImageCreateInfoFUCHSIA structure chained to its VkImageCreateInfo::pNext pointer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-buffer-06385", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA and VkMemoryDedicatedAllocateInfo::buffer is not VK_NULL_HANDLE, the buffer must be created with a VkBufferCollectionBufferCreateInfoFUCHSIA structure chained to its VkBufferCreateInfo::pNext pointer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-06386", + "text": "If the parameters define an import operation from an VkBufferCollectionFUCHSIA, memoryTypeIndex must be from VkBufferCollectionPropertiesFUCHSIA as retrieved by vkGetBufferCollectionPropertiesFUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-00639", + "text": "If the pNext chain includes a VkExportMemoryAllocateInfo structure, and any of the handle types specified in VkExportMemoryAllocateInfo::handleTypes require a dedicated allocation, as reported by vkGetPhysicalDeviceImageFormatProperties2 in VkExternalImageFormatProperties::externalMemoryProperties.externalMemoryFeatures, or by vkGetPhysicalDeviceExternalBufferProperties in VkExternalBufferProperties::externalMemoryProperties.externalMemoryFeatures, the pNext chain must include a VkMemoryDedicatedAllocateInfo or VkDedicatedAllocationMemoryAllocateInfoNV structure with either its image or buffer member set to a value other than VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-09858", + "text": "If the pNext chain includes a VkExportMemoryAllocateInfo structure, and any of the handle types specified in VkExportMemoryAllocateInfo::handleTypes require a dedicated allocation, as reported by vkGetPhysicalDeviceExternalTensorPropertiesARM in VkExternalTensorPropertiesARM::externalMemoryProperties.externalMemoryFeatures, the pNext chain must include a VkMemoryDedicatedAllocateInfoTensorARM structure with its tensor member set to a value other than VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-00640", + "text": "If the pNext chain includes a VkExportMemoryAllocateInfo structure, it must not include a VkExportMemoryAllocateInfoNV or VkExportMemoryWin32HandleInfoNV structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-00641", + "text": "If the pNext chain includes a VkImportMemoryWin32HandleInfoKHR structure, it must not include a VkImportMemoryWin32HandleInfoNV structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01742", + "text": "If the parameters define an import operation, the external handle specified was created by the Vulkan API, and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, then the values of allocationSize and memoryTypeIndex must match those specified when the payload being imported was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-None-00643", + "text": "If the parameters define an import operation and the external handle specified was created by the Vulkan API, the device mask specified by VkMemoryAllocateFlagsInfo must match the mask specified when the payload being imported was allocated", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-None-00644", + "text": "If the parameters define an import operation and the external handle specified was created by the Vulkan API, the list of physical devices that comprise the logical device passed to vkAllocateMemory must match the list of physical devices that comprise the logical device on which the payload was originally allocated", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645", + "text": "If the parameters define an import operation and the external handle is an NT handle or a global share handle created outside of the Vulkan API, the value of memoryTypeIndex must be one of those returned by vkGetMemoryWin32HandlePropertiesKHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01743", + "text": "If the parameters define an import operation, the external handle was created by the Vulkan API, and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, then the values of allocationSize and memoryTypeIndex must match those specified when the payload being imported was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-00647", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, allocationSize must match the size specified when creating the Direct3D 12 heap from which the payload was extracted", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648", + "text": "If the parameters define an import operation and the external handle is a POSIX file descriptor created outside of the Vulkan API, the value of memoryTypeIndex must be one of those returned by vkGetMemoryFdPropertiesKHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-01872", + "text": "If the protectedMemory feature is not enabled, the VkMemoryAllocateInfo::memoryTypeIndex must not indicate a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-01744", + "text": "If the parameters define an import operation and the external handle is a host pointer, the value of memoryTypeIndex must be one of those returned by vkGetMemoryHostPointerPropertiesEXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-01745", + "text": "If the parameters define an import operation and the external handle is a host pointer, allocationSize must be an integer multiple of VkPhysicalDeviceExternalMemoryHostPropertiesEXT::minImportedHostPointerAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02805", + "text": "If the parameters define an import operation and the external handle is a host pointer, the pNext chain must not include a VkDedicatedAllocationMemoryAllocateInfoNV structure with either its image or buffer field set to a value other than VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02806", + "text": "If the parameters define an import operation and the external handle is a host pointer, the pNext chain must not include a VkMemoryDedicatedAllocateInfo structure with either its image or buffer field set to a value other than VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-02383", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, allocationSize must be the size returned by vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02384", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, and the pNext chain does not include a VkMemoryDedicatedAllocateInfo structure or VkMemoryDedicatedAllocateInfo::image is VK_NULL_HANDLE, the Android hardware buffer must have a AHardwareBuffer_Desc::format of AHARDWAREBUFFER_FORMAT_BLOB and a AHardwareBuffer_Desc::usage that includes AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-02385", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, memoryTypeIndex must be one of those returned by vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-01874", + "text": "If the parameters do not define an import operation, and the pNext chain includes a VkExportMemoryAllocateInfo structure with VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID included in its handleTypes member, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image not equal to VK_NULL_HANDLE, then allocationSize must be 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-07900", + "text": "If the parameters define an export operation, the handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, and the pNext does not include a VkMemoryDedicatedAllocateInfo structure, allocationSize must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-07901", + "text": "If the parameters define an export operation, the handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with buffer set to a valid VkBuffer object, allocationSize must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02386", + "text": "If the parameters define an import operation, the external handle is an Android hardware buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo with image that is not VK_NULL_HANDLE, the Android hardware buffer’s AHardwareBuffer::usage must include at least one of AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE or AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02387", + "text": "If the parameters define an import operation, the external handle is an Android hardware buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo with image that is not VK_NULL_HANDLE, the format of image must be VK_FORMAT_UNDEFINED or the format returned by vkGetAndroidHardwareBufferPropertiesANDROID in VkAndroidHardwareBufferFormatPropertiesANDROID::format for the Android hardware buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02388", + "text": "If the parameters define an import operation, the external handle is an Android hardware buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, the width, height, and array layer dimensions of image and the Android hardware buffer’s AHardwareBuffer_Desc must be identical", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02389", + "text": "If the parameters define an import operation, the external handle is an Android hardware buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, and the Android hardware buffer’s AHardwareBuffer::usage includes AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the image must have a complete mipmap chain", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02586", + "text": "If the parameters define an import operation, the external handle is an Android hardware buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, and the Android hardware buffer’s AHardwareBuffer::usage does not include AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the image must have exactly one mipmap level", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-02390", + "text": "If the parameters define an import operation, the external handle is an Android hardware buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, each bit set in the usage of image must be listed in AHardwareBuffer Usage Equivalence, and if there is a corresponding AHARDWAREBUFFER_USAGE bit listed that bit must be included in the Android hardware buffer’s AHardwareBuffer_Desc::usage", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-screenBufferImport-08941", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX, VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX::screenBufferImport must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-08942", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX, allocationSize must be the size returned by vkGetScreenBufferPropertiesQNX for the QNX Screen buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-memoryTypeIndex-08943", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX, memoryTypeIndex must be one of those returned by vkGetScreenBufferPropertiesQNX for the QNX Screen buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-08944", + "text": "If the parameters define an import operation, the external handle is a QNX Screen buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo with image that is not VK_NULL_HANDLE, the QNX Screen’s buffer must be a valid QNX Screen buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-08945", + "text": "If the parameters define an import operation, the external handle is an QNX Screen buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo with image that is not VK_NULL_HANDLE, the format of image must be VK_FORMAT_UNDEFINED or the format returned by vkGetScreenBufferPropertiesQNX in VkScreenBufferFormatPropertiesQNX::format for the QNX Screen buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-08946", + "text": "If the parameters define an import operation, the external handle is a QNX Screen buffer, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, the width, height, and array layer dimensions of image and the QNX Screen buffer’s _screen_buffer must be identical", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-10395", + "text": "If the parameters define an import operation and the external handle is a VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT, then pNext must include a VkMemoryDedicatedAllocateInfo with image that is not VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-10396", + "text": "If the parameters define an import operation, the external handle is a Metal MTLTexture, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, the width, height, array layer dimensions, and mipmap levels of image and the Metal MTLTexture’s must be identical", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-10397", + "text": "If the parameters define an import operation, the external handle is a Metal MTLTexture, and the pNext chain includes a VkMemoryDedicatedAllocateInfo structure with image that is not VK_NULL_HANDLE, allocationSize must be 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03329", + "text": "If VkMemoryOpaqueCaptureAddressAllocateInfo::opaqueCaptureAddress is not zero, VkMemoryAllocateFlagsInfo::flags must include VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-flags-03330", + "text": "If VkMemoryAllocateFlagsInfo::flags includes VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the bufferDeviceAddressCaptureReplay feature must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-flags-03331", + "text": "If VkMemoryAllocateFlagsInfo::flags includes VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, the bufferDeviceAddress feature must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-03332", + "text": "If the pNext chain includes a VkImportMemoryHostPointerInfoEXT structure, VkMemoryOpaqueCaptureAddressAllocateInfo::opaqueCaptureAddress must be zero", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03333", + "text": "If the parameters define an import operation, VkMemoryOpaqueCaptureAddressAllocateInfo::opaqueCaptureAddress must be zero", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-None-04749", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the value of memoryTypeIndex must be an index identifying a memory type from the memoryTypeBits field of the VkMemoryZirconHandlePropertiesFUCHSIA structure populated by a call to vkGetMemoryZirconHandlePropertiesFUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-07902", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the value of allocationSize must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-allocationSize-07903", + "text": "If the parameters define an import operation and the external handle type is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the value of allocationSize must be less than or equal to the size of the VMO as determined by zx_vmo_get_size(handle) where handle is the VMO handle to the imported external memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-06780", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDedicatedAllocationMemoryAllocateInfoNV, VkExportMemoryAllocateInfo, VkExportMemoryAllocateInfoNV, VkExportMemoryWin32HandleInfoKHR, VkExportMemoryWin32HandleInfoNV, VkExportMetalObjectCreateInfoEXT, VkImportAndroidHardwareBufferInfoANDROID, VkImportMemoryBufferCollectionFUCHSIA, VkImportMemoryFdInfoKHR, VkImportMemoryHostPointerInfoEXT, VkImportMemoryMetalHandleInfoEXT, VkImportMemoryWin32HandleInfoKHR, VkImportMemoryWin32HandleInfoNV, VkImportMemoryZirconHandleInfoFUCHSIA, VkImportMetalBufferInfoEXT, VkImportScreenBufferInfoQNX, VkMemoryAllocateFlagsInfo, VkMemoryDedicatedAllocateInfo, VkMemoryDedicatedAllocateInfoTensorARM, VkMemoryOpaqueCaptureAddressAllocateInfo, or VkMemoryPriorityAllocateInfoEXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalObjectCreateInfoEXT", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryDedicatedAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01432", + "text": "At least one of image and buffer must be VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-02964", + "text": "If image is not VK_NULL_HANDLE and the memory is not an imported Android Hardware Buffer or an imported QNX Screen buffer , VkMemoryAllocateInfo::allocationSize must equal the VkMemoryRequirements::size of the image", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01434", + "text": "If image is not VK_NULL_HANDLE, image must have been created without VK_IMAGE_CREATE_SPARSE_BINDING_BIT set in VkImageCreateInfo::flags", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-02965", + "text": "If buffer is not VK_NULL_HANDLE and the memory is not an imported Android Hardware Buffer or an imported QNX Screen buffer , VkMemoryAllocateInfo::allocationSize must equal the VkMemoryRequirements::size of the buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01436", + "text": "If buffer is not VK_NULL_HANDLE, buffer must have been created without VK_BUFFER_CREATE_SPARSE_BINDING_BIT set in VkBufferCreateInfo::flags", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01876", + "text": "If image is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, and the external handle was created by the Vulkan API, then the memory being imported must also be a dedicated image allocation and image must be identical to the image associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01877", + "text": "If buffer is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, and the external handle was created by the Vulkan API, then the memory being imported must also be a dedicated buffer allocation and buffer must be identical to the buffer associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01878", + "text": "If image is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory being imported must also be a dedicated image allocation and image must be identical to the image associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-01879", + "text": "If buffer is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory being imported must also be a dedicated buffer allocation and buffer must be identical to the buffer associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-01797", + "text": "If image is not VK_NULL_HANDLE, image must not have been created with VK_IMAGE_CREATE_DISJOINT_BIT set in VkImageCreateInfo::flags", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-04751", + "text": "If image is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the memory being imported must also be a dedicated image allocation and image must be identical to the image associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-04752", + "text": "If buffer is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA, the memory being imported must also be a dedicated buffer allocation and buffer must be identical to the buffer associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-image-parameter", + "text": "If image is not VK_NULL_HANDLE, image must be a valid VkImage handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-buffer-parameter", + "text": "If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfo-commonparent", + "text": "Both of buffer, and image that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/memory.html" + } + ] + }, + "vkCmdBindTileMemoryQCOM": { + "core": [ + { + "vuid": "VUID-vkCmdBindTileMemoryQCOM-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkCmdBindTileMemoryQCOM-pTileMemoryBindInfo-parameter", + "text": "If pTileMemoryBindInfo is not NULL, pTileMemoryBindInfo must be a valid pointer to a valid VkTileMemoryBindInfoQCOM structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkCmdBindTileMemoryQCOM-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkCmdBindTileMemoryQCOM-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkCmdBindTileMemoryQCOM-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkCmdBindTileMemoryQCOM-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/memory.html" + } + ] + }, + "VkTileMemoryBindInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkTileMemoryBindInfoQCOM-memory-10726", + "text": "memory must have been allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkTileMemoryBindInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkTileMemoryBindInfoQCOM-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryDedicatedAllocateInfoTensorARM": { + "core": [ + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfoTensorARM-allocationSize-09710", + "text": "VkMemoryAllocateInfo::allocationSize must equal the VkMemoryRequirements::size of the tensor", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfoTensorARM-tensor-09859", + "text": "If VkMemoryAllocateInfo defines a memory import operation with handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, the memory being imported must also be a dedicated tensor allocation and tensor must be identical to the tensor associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfoTensorARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryDedicatedAllocateInfoTensorARM-tensor-parameter", + "text": "tensor must be a valid VkTensorARM handle", + "page": "chapters/memory.html" + } + ] + }, + "VkDedicatedAllocationMemoryAllocateInfoNV": { + "core": [ + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649", + "text": "At least one of image and buffer must be VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650", + "text": "If image is not VK_NULL_HANDLE, the image must have been created with VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation equal to VK_TRUE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651", + "text": "If buffer is not VK_NULL_HANDLE, the buffer must have been created with VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation equal to VK_TRUE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652", + "text": "If image is not VK_NULL_HANDLE, VkMemoryAllocateInfo::allocationSize must equal the VkMemoryRequirements::size of the image", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653", + "text": "If buffer is not VK_NULL_HANDLE, VkMemoryAllocateInfo::allocationSize must equal the VkMemoryRequirements::size of the buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654", + "text": "If image is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation, the memory being imported must also be a dedicated image allocation and image must be identical to the image associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655", + "text": "If buffer is not VK_NULL_HANDLE and VkMemoryAllocateInfo defines a memory import operation, the memory being imported must also be a dedicated buffer allocation and buffer must be identical to the buffer associated with the imported memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-parameter", + "text": "If image is not VK_NULL_HANDLE, image must be a valid VkImage handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-parameter", + "text": "If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationMemoryAllocateInfoNV-commonparent", + "text": "Both of buffer, and image that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryPriorityAllocateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMemoryPriorityAllocateInfoEXT-priority-02602", + "text": "priority must be between 0 and 1, inclusive", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryPriorityAllocateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT", + "page": "chapters/memory.html" + } + ] + }, + "vkSetDeviceMemoryPriorityEXT": { + "core": [ + { + "vuid": "VUID-vkSetDeviceMemoryPriorityEXT-priority-06258", + "text": "priority must be between 0 and 1, inclusive", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkSetDeviceMemoryPriorityEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkSetDeviceMemoryPriorityEXT-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkSetDeviceMemoryPriorityEXT-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMemoryAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkExportMemoryAllocateInfo-handleTypes-09860", + "text": "The bits in handleTypes must be supported and compatible, as reported by VkExternalTensorPropertiesARM, VkExternalImageFormatProperties, or VkExternalBufferProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMemoryAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMemoryAllocateInfo-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBits values", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMemoryAllocateInfoNV": { + "core": [ + { + "vuid": "VUID-VkExportMemoryAllocateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMemoryAllocateInfoNV-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBitsNV values", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMemoryWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-handleTypes-00657", + "text": "If VkExportMemoryAllocateInfo::handleTypes does not include VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, a VkExportMemoryWin32HandleInfoKHR structure must not be included in the pNext chain of VkMemoryAllocateInfo", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMemoryWin32HandleInfoKHR-pAttributes-parameter", + "text": "If pAttributes is not NULL, pAttributes must be a valid pointer to a valid SECURITY_ATTRIBUTES value", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMemoryWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-09861", + "text": "If handleType is not 0, it must be supported for import, as reported by VkExternalTensorPropertiesARM, VkExternalImageFormatProperties, or VkExternalBufferProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-00659", + "text": "The memory from which handle was exported, or the memory named by name must have been created on the same underlying physical device as device", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00660", + "text": "If handleType is not 0, it must be defined as an NT handle or a global share handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01439", + "text": "If handleType is not VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, or VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, name must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01440", + "text": "If handleType is not 0 and handle is NULL, name must name a valid memory resource of the type specified by handleType", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00661", + "text": "If handleType is not 0 and name is NULL, handle must be a valid handle of the type specified by handleType", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-01441", + "text": "If handle is not NULL, name must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handle-01518", + "text": "If handle is not NULL, it must obey any requirements listed for handleType in external memory handle types compatibility", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-name-01519", + "text": "If name is not NULL, it must obey any requirements listed for handleType in external memory handle types compatibility", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoKHR-handleType-parameter", + "text": "If handleType is not 0, handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryWin32HandleKHR": { + "core": [ + { + "vuid": "VUID-vkGetMemoryWin32HandleKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleKHR-pGetWin32HandleInfo-parameter", + "text": "pGetWin32HandleInfo must be a valid pointer to a valid VkMemoryGetWin32HandleInfoKHR structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleKHR-pHandle-parameter", + "text": "pHandle must be a valid pointer to a HANDLE value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryGetWin32HandleInfoKHR": { + "core": [ + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00662", + "text": "handleType must have been included in VkExportMemoryAllocateInfo::handleTypes when memory was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00663", + "text": "If handleType is defined as an NT handle, vkGetMemoryWin32HandleKHR must be called no more than once for each valid unique combination of memory and handleType", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00664", + "text": "handleType must be defined as an NT handle or a global share handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetWin32HandleInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryWin32HandlePropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handle-00665", + "text": "handle must point to a valid Windows memory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666", + "text": "handleType must not be one of the handle types defined as opaque", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandlePropertiesKHR-pMemoryWin32HandleProperties-parameter", + "text": "pMemoryWin32HandleProperties must be a valid pointer to a VkMemoryWin32HandlePropertiesKHR structure", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryWin32HandlePropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkMemoryWin32HandlePropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryWin32HandlePropertiesKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMemoryWin32HandleInfoNV": { + "core": [ + { + "vuid": "VUID-VkExportMemoryWin32HandleInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMemoryWin32HandleInfoNV-pAttributes-parameter", + "text": "If pAttributes is not NULL, pAttributes must be a valid pointer to a valid SECURITY_ATTRIBUTES value", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMemoryWin32HandleInfoNV": { + "core": [ + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327", + "text": "handleType must not have more than one bit set", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-handle-01328", + "text": "handle must be a valid handle to memory, obtained as specified by handleType", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryWin32HandleInfoNV-handleType-parameter", + "text": "handleType must be a valid combination of VkExternalMemoryHandleTypeFlagBitsNV values", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryWin32HandleNV": { + "core": [ + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-handleType-01326", + "text": "handleType must be a flag specified in VkExportMemoryAllocateInfoNV::handleTypes when allocating memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-handleType-parameter", + "text": "handleType must be a valid combination of VkExternalMemoryHandleTypeFlagBitsNV values", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-handleType-requiredbitmask", + "text": "handleType must not be 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-pHandle-parameter", + "text": "pHandle must be a valid pointer to a HANDLE value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryWin32HandleNV-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMemoryFdInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-09862", + "text": "If handleType is not 0, it must be supported for import, as reported by VkExternalTensorPropertiesARM, VkExternalImageFormatProperties or VkExternalBufferProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-fd-00668", + "text": "The memory from which fd was exported must have been created on the same underlying physical device as device", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00669", + "text": "If handleType is not 0, it must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-00670", + "text": "If handleType is not 0, fd must be a valid handle of the type specified by handleType", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01746", + "text": "The memory represented by fd must have been created from a physical device and driver that is compatible with device and handleType, as described in External Memory Handle Types Compatibility", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-fd-01520", + "text": "fd must obey any requirements listed for handleType in external memory handle types compatibility", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryFdInfoKHR-handleType-parameter", + "text": "If handleType is not 0, handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryFdKHR": { + "core": [ + { + "vuid": "VUID-vkGetMemoryFdKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryFdKHR-pGetFdInfo-parameter", + "text": "pGetFdInfo must be a valid pointer to a valid VkMemoryGetFdInfoKHR structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryFdKHR-pFd-parameter", + "text": "pFd must be a valid pointer to an int value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryGetFdInfoKHR": { + "core": [ + { + "vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-00671", + "text": "handleType must have been included in VkExportMemoryAllocateInfo::handleTypes when memory was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-00672", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetFdInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetFdInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetFdInfoKHR-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetFdInfoKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryFdPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetMemoryFdPropertiesKHR-fd-00673", + "text": "fd must point to a valid POSIX file descriptor memory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryFdPropertiesKHR-handleType-00674", + "text": "handleType must not be VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryFdPropertiesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryFdPropertiesKHR-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryFdPropertiesKHR-pMemoryFdProperties-parameter", + "text": "pMemoryFdProperties must be a valid pointer to a VkMemoryFdPropertiesKHR structure", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryFdPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkMemoryFdPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryFdPropertiesKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMemoryHostPointerInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01747", + "text": "If handleType is not 0, it must be supported for import, as reported in VkExternalMemoryProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01748", + "text": "If handleType is not 0, it must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-01749", + "text": "pHostPointer must be a pointer aligned to an integer multiple of VkPhysicalDeviceExternalMemoryHostPropertiesEXT::minImportedHostPointerAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01750", + "text": "If handleType is VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, pHostPointer must be a pointer to allocationSize number of bytes of host memory, where allocationSize is the member of the VkMemoryAllocateInfo structure this structure is chained to", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-01751", + "text": "If handleType is VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT, pHostPointer must be a pointer to allocationSize number of bytes of host mapped foreign memory, where allocationSize is the member of the VkMemoryAllocateInfo structure this structure is chained to", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-parameter", + "text": "pHostPointer must be a pointer value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryHostPointerPropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01752", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-01753", + "text": "pHostPointer must be a pointer aligned to an integer multiple of VkPhysicalDeviceExternalMemoryHostPropertiesEXT::minImportedHostPointerAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01754", + "text": "If handleType is VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, pHostPointer must be a pointer to host memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01755", + "text": "If handleType is VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT, pHostPointer must be a pointer to host mapped foreign memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-parameter", + "text": "pHostPointer must be a pointer value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryHostPointerPropertiesEXT-pMemoryHostPointerProperties-parameter", + "text": "pMemoryHostPointerProperties must be a valid pointer to a VkMemoryHostPointerPropertiesEXT structure", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryHostPointerPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkMemoryHostPointerPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryHostPointerPropertiesEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + } + ] + }, + "VkImportAndroidHardwareBufferInfoANDROID": { + "core": [ + { + "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-09863", + "text": "If buffer is not NULL, Android hardware buffers must be supported for import, as reported by VkExternalTensorPropertiesARM, VkExternalImageFormatProperties, or VkExternalBufferProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01881", + "text": "If buffer is not NULL, it must be a valid Android hardware buffer object with AHardwareBuffer_Desc::usage compatible with Vulkan as described in Android Hardware Buffers", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-parameter", + "text": "buffer must be a valid pointer to an AHardwareBuffer value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryAndroidHardwareBufferANDROID": { + "core": [ + { + "vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkMemoryGetAndroidHardwareBufferInfoANDROID structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryAndroidHardwareBufferANDROID-pBuffer-parameter", + "text": "pBuffer must be a valid pointer to a valid pointer to an AHardwareBuffer value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryGetAndroidHardwareBufferInfoANDROID": { + "core": [ + { + "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-handleTypes-01882", + "text": "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must have been included in VkExportMemoryAllocateInfo::handleTypes when memory was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883", + "text": "If the pNext chain of the VkMemoryAllocateInfo used to allocate memory included a VkMemoryDedicatedAllocateInfo with non-NULL image member, then that image must already be bound to memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "vkGetAndroidHardwareBufferPropertiesANDROID": { + "core": [ + { + "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-01884", + "text": "buffer must be a valid Android hardware buffer object with at least one of the AHARDWAREBUFFER_USAGE_GPU_* flags in its AHardwareBuffer_Desc::usage", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-parameter", + "text": "buffer must be a valid pointer to a valid AHardwareBuffer value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetAndroidHardwareBufferPropertiesANDROID-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkAndroidHardwareBufferPropertiesANDROID structure", + "page": "chapters/memory.html" + } + ] + }, + "VkAndroidHardwareBufferPropertiesANDROID": { + "core": [ + { + "vuid": "VUID-VkAndroidHardwareBufferPropertiesANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkAndroidHardwareBufferPropertiesANDROID-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAndroidHardwareBufferFormatProperties2ANDROID, VkAndroidHardwareBufferFormatPropertiesANDROID, or VkAndroidHardwareBufferFormatResolvePropertiesANDROID", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkAndroidHardwareBufferPropertiesANDROID-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/memory.html" + } + ] + }, + "VkAndroidHardwareBufferFormatPropertiesANDROID": { + "core": [ + { + "vuid": "VUID-VkAndroidHardwareBufferFormatPropertiesANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID", + "page": "chapters/memory.html" + } + ] + }, + "VkAndroidHardwareBufferFormatProperties2ANDROID": { + "core": [ + { + "vuid": "VUID-VkAndroidHardwareBufferFormatProperties2ANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID", + "page": "chapters/memory.html" + } + ] + }, + "VkAndroidHardwareBufferFormatResolvePropertiesANDROID": { + "core": [ + { + "vuid": "VUID-VkAndroidHardwareBufferFormatResolvePropertiesANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryRemoteAddressNV": { + "core": [ + { + "vuid": "VUID-vkGetMemoryRemoteAddressNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryRemoteAddressNV-pMemoryGetRemoteAddressInfo-parameter", + "text": "pMemoryGetRemoteAddressInfo must be a valid pointer to a valid VkMemoryGetRemoteAddressInfoNV structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryRemoteAddressNV-pAddress-parameter", + "text": "pAddress must be a valid pointer to a VkRemoteAddressNV value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryGetRemoteAddressInfoNV": { + "core": [ + { + "vuid": "VUID-VkMemoryGetRemoteAddressInfoNV-handleType-04966", + "text": "handleType must have been included in VkExportMemoryAllocateInfo::handleTypes when memory was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetRemoteAddressInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetRemoteAddressInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetRemoteAddressInfoNV-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetRemoteAddressInfoNV-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMemoryZirconHandleInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handleType-04771", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handle-04772", + "text": "handle must be a valid VMO handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryZirconHandleInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryZirconHandleInfoFUCHSIA-handleType-parameter", + "text": "If handleType is not 0, handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryZirconHandlePropertiesFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-handleType-04773", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-zirconHandle-04774", + "text": "zirconHandle must reference a valid VMO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-pMemoryZirconHandleProperties-parameter", + "text": "pMemoryZirconHandleProperties must be a valid pointer to a VkMemoryZirconHandlePropertiesFUCHSIA structure", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryZirconHandlePropertiesFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkMemoryZirconHandlePropertiesFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryZirconHandlePropertiesFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryZirconHandleFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkGetMemoryZirconHandleFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryZirconHandleFUCHSIA-pGetZirconHandleInfo-parameter", + "text": "pGetZirconHandleInfo must be a valid pointer to a valid VkMemoryGetZirconHandleInfoFUCHSIA structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryZirconHandleFUCHSIA-pZirconHandle-parameter", + "text": "pZirconHandle must be a valid pointer to a zx_handle_t value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryGetZirconHandleInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-04775", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-04776", + "text": "handleType must have been included in the handleTypes field of the VkExportMemoryAllocateInfo structure when the external memory was allocated", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetZirconHandleInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetZirconHandleInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetZirconHandleInfoFUCHSIA-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetZirconHandleInfoFUCHSIA-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalObjectCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalObjectCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectCreateInfoEXT-exportObjectType-parameter", + "text": "If exportObjectType is not 0, exportObjectType must be a valid VkExportMetalObjectTypeFlagBitsEXT value", + "page": "chapters/memory.html" + } + ] + }, + "vkExportMetalObjectsEXT": { + "core": [ + { + "vuid": "VUID-vkExportMetalObjectsEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkExportMetalObjectsEXT-pMetalObjectsInfo-parameter", + "text": "pMetalObjectsInfo must be a valid pointer to a VkExportMetalObjectsInfoEXT structure", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalObjectsInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06791", + "text": "If the pNext chain includes a VkExportMetalDeviceInfoEXT structure, the VkInstance must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkInstanceCreateInfo structure in the vkCreateInstance command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06792", + "text": "If the pNext chain includes a VkExportMetalCommandQueueInfoEXT structure, the VkInstance must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkInstanceCreateInfo structure in the vkCreateInstance command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06793", + "text": "If the pNext chain includes a VkExportMetalBufferInfoEXT structure, the VkDeviceMemory in its memory member must have been allocated with VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkMemoryAllocateInfo structure in the vkAllocateMemory command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06794", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, exactly one of its image, imageView, or bufferView members must not be VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06795", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and its image member is not VK_NULL_HANDLE, the VkImage in its image member must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkImageCreateInfo structure in the vkCreateImage command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06796", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and its imageView member is not VK_NULL_HANDLE, the VkImageView in its imageView member must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkImageViewCreateInfo structure in the vkCreateImageView command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06797", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and its bufferView member is not VK_NULL_HANDLE, the VkBufferView in its bufferView member must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkBufferViewCreateInfo structure in the vkCreateBufferView command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06798", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and if either its image or imageView member is not VK_NULL_HANDLE, then plane must be VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT, or VK_IMAGE_ASPECT_PLANE_2_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06799", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and if the VkImage in its image member does not have a multi-planar format, then its plane member must be VK_IMAGE_ASPECT_PLANE_0_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06800", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and if the VkImage in its image member has a multi-planar format with only two planes, then its plane member must not be VK_IMAGE_ASPECT_PLANE_2_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06801", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and if the VkImageView in its imageView member does not have a multi-planar format, then its plane member must be VK_IMAGE_ASPECT_PLANE_0_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06802", + "text": "If the pNext chain includes a VkExportMetalTextureInfoEXT structure, and if the VkImageView in its imageView member has a multi-planar format with only two planes, then its plane member must not be VK_IMAGE_ASPECT_PLANE_2_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06803", + "text": "If the pNext chain includes a VkExportMetalIOSurfaceInfoEXT structure, the VkImage in its image member must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkImageCreateInfo structure in the vkCreateImage command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06804", + "text": "If the pNext chain includes a VkExportMetalSharedEventInfoEXT structure, exactly one of its semaphore or event members must not be VK_NULL_HANDLE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06805", + "text": "If the pNext chain includes a VkExportMetalSharedEventInfoEXT structure, and its semaphore member is not VK_NULL_HANDLE, the VkSemaphore in its semaphore member must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkSemaphoreCreateInfo structure in the vkCreateSemaphore command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-06806", + "text": "If the pNext chain includes a VkExportMetalSharedEventInfoEXT structure, and its event member is not VK_NULL_HANDLE, the VkEvent in its event member must have been created with VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT in the exportObjectType member of a VkExportMetalObjectCreateInfoEXT structure in the pNext chain of the VkEventCreateInfo structure in the vkCreateEvent command", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExportMetalBufferInfoEXT, VkExportMetalCommandQueueInfoEXT, VkExportMetalDeviceInfoEXT, VkExportMetalIOSurfaceInfoEXT, VkExportMetalSharedEventInfoEXT, or VkExportMetalTextureInfoEXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalObjectsInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalBufferInfoEXT, VkExportMetalCommandQueueInfoEXT, VkExportMetalIOSurfaceInfoEXT, VkExportMetalSharedEventInfoEXT, or VkExportMetalTextureInfoEXT", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalDeviceInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalDeviceInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalCommandQueueInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalCommandQueueInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalCommandQueueInfoEXT-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalBufferInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalBufferInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalBufferInfoEXT-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMetalBufferInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImportMetalBufferInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalTextureInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalTextureInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalTextureInfoEXT-image-parameter", + "text": "If image is not VK_NULL_HANDLE, image must be a valid VkImage handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalTextureInfoEXT-imageView-parameter", + "text": "If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalTextureInfoEXT-bufferView-parameter", + "text": "If bufferView is not VK_NULL_HANDLE, bufferView must be a valid VkBufferView handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalTextureInfoEXT-plane-parameter", + "text": "plane must be a valid VkImageAspectFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalTextureInfoEXT-commonparent", + "text": "Each of bufferView, image, and imageView that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMetalTextureInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImportMetalTextureInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMetalTextureInfoEXT-plane-parameter", + "text": "plane must be a valid VkImageAspectFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalIOSurfaceInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalIOSurfaceInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalIOSurfaceInfoEXT-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMetalIOSurfaceInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImportMetalIOSurfaceInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT", + "page": "chapters/memory.html" + } + ] + }, + "VkExportMetalSharedEventInfoEXT": { + "core": [ + { + "vuid": "VUID-VkExportMetalSharedEventInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalSharedEventInfoEXT-semaphore-parameter", + "text": "If semaphore is not VK_NULL_HANDLE, semaphore must be a valid VkSemaphore handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalSharedEventInfoEXT-event-parameter", + "text": "If event is not VK_NULL_HANDLE, event must be a valid VkEvent handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkExportMetalSharedEventInfoEXT-commonparent", + "text": "Both of event, and semaphore that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMetalSharedEventInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImportMetalSharedEventInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT", + "page": "chapters/memory.html" + } + ] + }, + "VkImportScreenBufferInfoQNX": { + "core": [ + { + "vuid": "VUID-VkImportScreenBufferInfoQNX-buffer-08966", + "text": "If buffer is not NULL, QNX Screen Buffers must be supported for import, as reported by VkExternalImageFormatProperties or VkExternalBufferProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportScreenBufferInfoQNX-buffer-08967", + "text": "buffer is not NULL, it must be a pointer to valid QNX Screen buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportScreenBufferInfoQNX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX", + "page": "chapters/memory.html" + } + ] + }, + "vkGetScreenBufferPropertiesQNX": { + "core": [ + { + "vuid": "VUID-vkGetScreenBufferPropertiesQNX-buffer-08968", + "text": "buffer must be a valid QNX Screen buffer", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetScreenBufferPropertiesQNX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetScreenBufferPropertiesQNX-buffer-parameter", + "text": "buffer must be a valid pointer to a valid _screen_buffer value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetScreenBufferPropertiesQNX-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkScreenBufferPropertiesQNX structure", + "page": "chapters/memory.html" + } + ] + }, + "VkScreenBufferPropertiesQNX": { + "core": [ + { + "vuid": "VUID-VkScreenBufferPropertiesQNX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkScreenBufferPropertiesQNX-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkScreenBufferFormatPropertiesQNX", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkScreenBufferPropertiesQNX-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/memory.html" + } + ] + }, + "VkScreenBufferFormatPropertiesQNX": { + "core": [ + { + "vuid": "VUID-VkScreenBufferFormatPropertiesQNX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX", + "page": "chapters/memory.html" + } + ] + }, + "VkImportMemoryMetalHandleInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-handleType-10408", + "text": "If handleType is not 0, it must be supported for import, as reported by VkExternalImageFormatProperties or VkExternalBufferProperties", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-handle-10409", + "text": "The memory from which handle was exported must have been created on the same underlying physical device as device", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-handleType-10410", + "text": "If handleType is not 0, it must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-handleType-10411", + "text": "If handleType is not 0 , handle must be a valid non-NULL handle of the type specified by handleType", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-handle-10412", + "text": "handle must obey any requirements listed for handleType in external memory handle types compatibility", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkImportMemoryMetalHandleInfoEXT-handleType-parameter", + "text": "If handleType is not 0, handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryMetalHandleEXT": { + "core": [ + { + "vuid": "VUID-vkGetMemoryMetalHandleEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandleEXT-pGetMetalHandleInfo-parameter", + "text": "pGetMetalHandleInfo must be a valid pointer to a valid VkMemoryGetMetalHandleInfoEXT structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandleEXT-pHandle-parameter", + "text": "pHandle must be a valid pointer to a pointer value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryGetMetalHandleInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-memory-10413", + "text": "memory must have been created with a valid VkExportMemoryAllocateInfo", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-handleType-10414", + "text": "handleType must have been included in VkExportMemoryAllocateInfo::handleTypes when memory was created", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-handleType-10415", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryGetMetalHandleInfoEXT-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetMemoryMetalHandlePropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkGetMemoryMetalHandlePropertiesEXT-handle-10416", + "text": "pHandle must point to a valid id<MTLBuffer>, id<MTLTexture> or id<MTLDevice>", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandlePropertiesEXT-handleType-10417", + "text": "handleType must be VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandlePropertiesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandlePropertiesEXT-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandlePropertiesEXT-pHandle-parameter", + "text": "pHandle must be a pointer value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetMemoryMetalHandlePropertiesEXT-pMemoryMetalHandleProperties-parameter", + "text": "pMemoryMetalHandleProperties must be a valid pointer to a VkMemoryMetalHandlePropertiesEXT structure", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryMetalHandlePropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkMemoryMetalHandlePropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMetalHandlePropertiesEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryAllocateFlagsInfo": { + "core": [ + { + "vuid": "VUID-VkMemoryAllocateFlagsInfo-deviceMask-00675", + "text": "If VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set, deviceMask must be a valid device mask", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateFlagsInfo-deviceMask-00676", + "text": "If VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT is set, deviceMask must not be zero", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateFlagsInfo-flags-10760", + "text": "If the allocation is performing a memory import operation, then flags must not contain VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateFlagsInfo-flags-10761", + "text": "If the allocation uses protected memory, then flags must not contain VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateFlagsInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryAllocateFlagsInfo-flags-parameter", + "text": "flags must be a valid combination of VkMemoryAllocateFlagBits values", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryOpaqueCaptureAddressAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkMemoryOpaqueCaptureAddressAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO", + "page": "chapters/memory.html" + } + ] + }, + "vkFreeMemory": { + "core": [ + { + "vuid": "VUID-vkFreeMemory-memory-00677", + "text": "All submitted commands that refer to memory (via images or buffers) must have completed execution", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkFreeMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkFreeMemory-memory-parameter", + "text": "If memory is not VK_NULL_HANDLE, memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkFreeMemory-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkFreeMemory-memory-parent", + "text": "If memory is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/memory.html" + } + ] + }, + "vkMapMemory": { + "core": [ + { + "vuid": "VUID-vkMapMemory-memory-00678", + "text": "memory must not be currently host mapped", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-offset-00679", + "text": "offset must be less than the size of memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-size-00680", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-size-00681", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be less than or equal to the size of the memory minus offset", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-memory-00682", + "text": "memory must have been created with a memory type that reports VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-memory-00683", + "text": "memory must not have been allocated with multiple instances", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-flags-09568", + "text": "VK_MEMORY_MAP_PLACED_BIT_EXT must not be set in flags", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-flags-parameter", + "text": "flags must be a valid combination of VkMemoryMapFlagBits values", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-ppData-parameter", + "text": "ppData must be a valid pointer to a pointer value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/memory.html" + } + ] + }, + "vkMapMemory2": { + "core": [ + { + "vuid": "VUID-vkMapMemory2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory2-pMemoryMapInfo-parameter", + "text": "pMemoryMapInfo must be a valid pointer to a valid VkMemoryMapInfo structure", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkMapMemory2-ppData-parameter", + "text": "ppData must be a valid pointer to a pointer value", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryMapInfo": { + "core": [ + { + "vuid": "VUID-VkMemoryMapInfo-memory-07958", + "text": "memory must not be currently host mapped", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-offset-07959", + "text": "offset must be less than the size of memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-size-07960", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be greater than 0", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-size-07961", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be less than or equal to the size of the memory minus offset", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-memory-07962", + "text": "memory must have been created with a memory type that reports VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-memory-07963", + "text": "memory must not have been allocated with multiple instances", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09569", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags, the memoryMapPlaced feature must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09570", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags, the pNext chain must include a VkMemoryMapPlacedInfoEXT structure and VkMemoryMapPlacedInfoEXT::pPlacedAddress must not be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09571", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags and the memoryMapRangePlaced feature is not enabled, offset must be zero", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09572", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags and the memoryMapRangePlaced feature is not enabled, size must be VK_WHOLE_SIZE or VkMemoryAllocateInfo::allocationSize", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09573", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags and the memoryMapRangePlaced feature is enabled, offset must be aligned to an integer multiple of VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::minPlacedMemoryMapAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09574", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags and size is not VK_WHOLE_SIZE, size must be aligned to an integer multiple of VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::minPlacedMemoryMapAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09651", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags and size is VK_WHOLE_SIZE, VkMemoryAllocateInfo::allocationSize must be aligned to an integer multiple of VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::minPlacedMemoryMapAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-09575", + "text": "If VK_MEMORY_MAP_PLACED_BIT_EXT is set in flags, the memory object must not have been imported from a handle type of VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_MAP_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkMemoryMapPlacedInfoEXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-flags-parameter", + "text": "flags must be a valid combination of VkMemoryMapFlagBits values", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapInfo-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryMapPlacedInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMemoryMapPlacedInfoEXT-flags-09576", + "text": "If VkMemoryMapInfo::flags contains VK_MEMORY_MAP_PLACED_BIT_EXT, pPlacedAddress must not be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapPlacedInfoEXT-pPlacedAddress-09577", + "text": "pPlacedAddress must be aligned to an integer multiple of VkPhysicalDeviceMapMemoryPlacedPropertiesEXT::minPlacedMemoryMapAlignment", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapPlacedInfoEXT-pPlacedAddress-09578", + "text": "The address range specified by pPlacedAddress and VkMemoryMapInfo::size must not overlap any existing Vulkan memory object mapping", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryMapPlacedInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_MAP_PLACED_INFO_EXT", + "page": "chapters/memory.html" + } + ] + }, + "vkFlushMappedMemoryRanges": { + "core": [ + { + "vuid": "VUID-vkFlushMappedMemoryRanges-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkFlushMappedMemoryRanges-pMemoryRanges-parameter", + "text": "pMemoryRanges must be a valid pointer to an array of memoryRangeCount valid VkMappedMemoryRange structures", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkFlushMappedMemoryRanges-memoryRangeCount-arraylength", + "text": "memoryRangeCount must be greater than 0", + "page": "chapters/memory.html" + } + ] + }, + "vkInvalidateMappedMemoryRanges": { + "core": [ + { + "vuid": "VUID-vkInvalidateMappedMemoryRanges-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkInvalidateMappedMemoryRanges-pMemoryRanges-parameter", + "text": "pMemoryRanges must be a valid pointer to an array of memoryRangeCount valid VkMappedMemoryRange structures", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkInvalidateMappedMemoryRanges-memoryRangeCount-arraylength", + "text": "memoryRangeCount must be greater than 0", + "page": "chapters/memory.html" + } + ] + }, + "VkMappedMemoryRange": { + "core": [ + { + "vuid": "VUID-VkMappedMemoryRange-memory-00684", + "text": "memory must be currently host mapped", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-size-00685", + "text": "If size is not equal to VK_WHOLE_SIZE, offset and size must specify a range contained within the currently mapped range of memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-size-00686", + "text": "If size is equal to VK_WHOLE_SIZE, offset must be within the currently mapped range of memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-offset-00687", + "text": "offset must be a multiple of VkPhysicalDeviceLimits::nonCoherentAtomSize", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-size-01389", + "text": "If size is equal to VK_WHOLE_SIZE, the end of the current mapping of memory must either be a multiple of VkPhysicalDeviceLimits::nonCoherentAtomSize bytes from the beginning of the memory object, or be equal to the end of the memory object", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-size-01390", + "text": "If size is not equal to VK_WHOLE_SIZE, size must either be a multiple of VkPhysicalDeviceLimits::nonCoherentAtomSize, or offset plus size must equal the size of memory", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMappedMemoryRange-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "vkUnmapMemory": { + "core": [ + { + "vuid": "VUID-vkUnmapMemory-memory-00689", + "text": "memory must be currently host mapped", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkUnmapMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkUnmapMemory-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkUnmapMemory-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/memory.html" + } + ] + }, + "vkUnmapMemory2": { + "core": [ + { + "vuid": "VUID-vkUnmapMemory2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkUnmapMemory2-pMemoryUnmapInfo-parameter", + "text": "pMemoryUnmapInfo must be a valid pointer to a valid VkMemoryUnmapInfo structure", + "page": "chapters/memory.html" + } + ] + }, + "VkMemoryUnmapInfo": { + "core": [ + { + "vuid": "VUID-VkMemoryUnmapInfo-memory-07964", + "text": "memory must be currently host mapped", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryUnmapInfo-flags-09579", + "text": "If VK_MEMORY_UNMAP_RESERVE_BIT_EXT is set in flags, the memoryUnmapReserve must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryUnmapInfo-flags-09580", + "text": "If VK_MEMORY_UNMAP_RESERVE_BIT_EXT is set in flags, the memory object must not have been imported from a handle type of VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT or VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryUnmapInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryUnmapInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryUnmapInfo-flags-parameter", + "text": "flags must be a valid combination of VkMemoryUnmapFlagBits values", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkMemoryUnmapInfo-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "vkGetDeviceMemoryCommitment": { + "core": [ + { + "vuid": "VUID-vkGetDeviceMemoryCommitment-memory-00690", + "text": "memory must have been created with a memory type that reports VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryCommitment-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryCommitment-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryCommitment-pCommittedMemoryInBytes-parameter", + "text": "pCommittedMemoryInBytes must be a valid pointer to a VkDeviceSize value", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryCommitment-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/memory.html" + } + ] + }, + "vkGetDeviceGroupPeerMemoryFeatures": { + "core": [ + { + "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-heapIndex-00691", + "text": "heapIndex must be less than memoryHeapCount", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00692", + "text": "localDeviceIndex must be a valid device index", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-remoteDeviceIndex-00693", + "text": "remoteDeviceIndex must be a valid device index", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00694", + "text": "localDeviceIndex must not equal remoteDeviceIndex", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupPeerMemoryFeatures-pPeerMemoryFeatures-parameter", + "text": "pPeerMemoryFeatures must be a valid pointer to a VkPeerMemoryFeatureFlags value", + "page": "chapters/memory.html" + } + ] + }, + "vkGetDeviceMemoryOpaqueCaptureAddress": { + "core": [ + { + "vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-None-03334", + "text": "The bufferDeviceAddress and bufferDeviceAddressCaptureReplay features must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-pInfo-10727", + "text": "pInfo::memory must have been allocated using the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-03335", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-vkGetDeviceMemoryOpaqueCaptureAddress-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDeviceMemoryOpaqueCaptureAddressInfo structure", + "page": "chapters/memory.html" + } + ] + }, + "VkDeviceMemoryOpaqueCaptureAddressInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-03336", + "text": "memory must have been allocated with VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/memory.html" + }, + { + "vuid": "VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/memory.html" + } + ] + }, + "vkCreateBuffer": { + "core": [ + { + "vuid": "VUID-vkCreateBuffer-device-09664", + "text": "device must support at least one queue family with one of the VK_QUEUE_VIDEO_ENCODE_BIT_KHR, VK_QUEUE_VIDEO_DECODE_BIT_KHR, VK_QUEUE_SPARSE_BINDING_BIT, VK_QUEUE_TRANSFER_BIT, VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-flags-00911", + "text": "If the flags member of pCreateInfo includes VK_BUFFER_CREATE_SPARSE_BINDING_BIT, and the extendedSparseAddressSpace feature is not enabled, creating this VkBuffer must not cause the total required sparse memory for all currently valid sparse resources on the device to exceed VkPhysicalDeviceLimits::sparseAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-flags-09383", + "text": "If the flags member of pCreateInfo includes VK_BUFFER_CREATE_SPARSE_BINDING_BIT, the extendedSparseAddressSpace feature is enabled, and the usage member of pCreateInfo contains bits not in VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseBufferUsageFlags, creating this VkBuffer must not cause the total required sparse memory for all currently valid sparse resources on the device, excluding VkBuffer created with usage member of pCreateInfo containing bits in VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseBufferUsageFlags and VkImage created with usage member of pCreateInfo containing bits in VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseImageUsageFlags, to exceed VkPhysicalDeviceLimits::sparseAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-flags-09384", + "text": "If the flags member of pCreateInfo includes VK_BUFFER_CREATE_SPARSE_BINDING_BIT and the extendedSparseAddressSpace feature is enabled, creating this VkBuffer must not cause the total required sparse memory for all currently valid sparse resources on the device to exceed VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-pNext-06387", + "text": "If using the VkBuffer for an import operation from a VkBufferCollectionFUCHSIA where a VkBufferCollectionBufferCreateInfoFUCHSIA has been chained to pNext, pCreateInfo must match the VkBufferConstraintsInfoFUCHSIA::createInfo used when setting the constraints on the buffer collection with vkSetBufferCollectionBufferConstraintsFUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkBufferCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-pBuffer-parameter", + "text": "pBuffer must be a valid pointer to a VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBuffer-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferCreateInfo": { + "core": [ + { + "vuid": "VUID-VkBufferCreateInfo-None-09499", + "text": "If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must be a valid combination of VkBufferUsageFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-None-09500", + "text": "If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must not be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-size-00912", + "text": "size must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-sharingMode-00913", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a valid pointer to an array of queueFamilyIndexCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-sharingMode-00914", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-sharingMode-01419", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, each element of pQueueFamilyIndices must be unique and must be less than pQueueFamilyPropertyCount returned by either vkGetPhysicalDeviceQueueFamilyProperties2 or vkGetPhysicalDeviceQueueFamilyProperties for the physicalDevice that was used to create device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-00915", + "text": "If the sparseBinding feature is not enabled, flags must not contain VK_BUFFER_CREATE_SPARSE_BINDING_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-00916", + "text": "If the sparseResidencyBuffer feature is not enabled, flags must not contain VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-00917", + "text": "If the sparseResidencyAliased feature is not enabled, flags must not contain VK_BUFFER_CREATE_SPARSE_ALIASED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-00918", + "text": "If flags contains VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must also contain VK_BUFFER_CREATE_SPARSE_BINDING_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-pNext-00920", + "text": "If the pNext chain includes a VkExternalMemoryBufferCreateInfo structure, its handleTypes member must only contain bits that are also in VkExternalBufferProperties::externalMemoryProperties.compatibleHandleTypes, as returned by vkGetPhysicalDeviceExternalBufferProperties with pExternalBufferInfo->handleType equal to any one of the handle types specified in VkExternalMemoryBufferCreateInfo::handleTypes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-01887", + "text": "If the protectedMemory feature is not enabled, flags must not contain VK_BUFFER_CREATE_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-None-01888", + "text": "If any of the bits VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT are set, VK_BUFFER_CREATE_PROTECTED_BIT must not also be set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-pNext-01571", + "text": "If the pNext chain includes a VkDedicatedAllocationBufferCreateInfoNV structure, and the dedicatedAllocation member of the chained structure is VK_TRUE, then flags must not include VK_BUFFER_CREATE_SPARSE_BINDING_BIT, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or VK_BUFFER_CREATE_SPARSE_ALIASED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-deviceAddress-02604", + "text": "If VkBufferDeviceAddressCreateInfoEXT::deviceAddress is not zero, flags must include VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-opaqueCaptureAddress-03337", + "text": "If VkBufferOpaqueCaptureAddressCreateInfo::opaqueCaptureAddress is not zero, flags must include VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-03338", + "text": "If flags includes VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, the VkPhysicalDeviceBufferDeviceAddressFeaturesEXT:bufferDeviceAddressCaptureReplay feature or the bufferDeviceAddressCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-04813", + "text": "If usage includes VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR or VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR, and flags does not include VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0 and pProfiles including at least one VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying a decode operation", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-04814", + "text": "If usage includes VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR or VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, and flags does not include VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0 and pProfiles including at least one VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying an encode operation", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-08325", + "text": "If flags includes VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then videoMaintenance1 must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-pNext-10783", + "text": "If the pNext chain includes a VkVideoProfileListInfoKHR structure and for any element of its pProfiles member videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the videoDecodeVP9 feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-pNext-10249", + "text": "If the pNext chain includes a VkVideoProfileListInfoKHR structure and for any element of its pProfiles member videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the videoEncodeAV1 feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-size-06409", + "text": "size must be less than or equal to VkPhysicalDeviceMaintenance4Properties::maxBufferSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-08097", + "text": "If usage includes VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, creating this VkBuffer must not cause the total required space for all currently valid buffers using this flag on the device to exceed VkPhysicalDeviceDescriptorBufferPropertiesEXT::samplerDescriptorBufferAddressSpaceSize or VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-08098", + "text": "If usage includes VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, creating this VkBuffer must not cause the total required space for all currently valid buffers using this flag on the device to exceed VkPhysicalDeviceDescriptorBufferPropertiesEXT::resourceDescriptorBufferAddressSpaceSize or VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-08099", + "text": "If flags includes VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-pNext-08100", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flags must contain VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-08101", + "text": "If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, the descriptorBufferPushDescriptors feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-08102", + "text": "If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT VkPhysicalDeviceDescriptorBufferPropertiesEXT::bufferlessPushDescriptors must be VK_FALSE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-08103", + "text": "If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, usage must contain at least one of VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT or VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-tileMemoryHeap-10762", + "text": "If the tileMemoryHeap feature is not enabled, usage must not include VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-10763", + "text": "If usage includes VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM, then flags must not contain any of the following bits
\n
    \n
  • \n

    VK_BUFFER_CREATE_SPARSE_BINDING_BIT

    \n
  • \n
  • \n

    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT

    \n
  • \n
  • \n

    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT

    \n
  • \n
  • \n

    VK_BUFFER_CREATE_PROTECTED_BIT

    \n
  • \n
  • \n

    VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT

    \n
  • \n
  • \n

    VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR

    \n
  • \n
\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-usage-10764", + "text": "If usage includes VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM, then only the following usages may be set:
\n
    \n
  • \n

    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT

    \n
  • \n
  • \n

    and if\nVkPhysicalDeviceTileMemoryHeapPropertiesQCOM::tileBufferTransfers\nis VK_TRUE then additionally\nVK_BUFFER_USAGE_TRANSFER_SRC_BIT or\nVK_BUFFER_USAGE_TRANSFER_DST_BIT

    \n
  • \n
\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-09641", + "text": "If flags includes VK_BUFFER_CREATE_PROTECTED_BIT, then usage must not contain any of the following bits
\n
    \n
  • \n

    VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT

    \n
  • \n
  • \n

    VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT

    \n
  • \n
\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkBufferCollectionBufferCreateInfoFUCHSIA, VkBufferDeviceAddressCreateInfoEXT, VkBufferOpaqueCaptureAddressCreateInfo, VkBufferUsageFlags2CreateInfo, VkDedicatedAllocationBufferCreateInfoNV, VkExternalMemoryBufferCreateInfo, VkOpaqueCaptureDescriptorDataCreateInfoEXT, or VkVideoProfileListInfoKHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkBufferCreateFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCreateInfo-sharingMode-parameter", + "text": "sharingMode must be a valid VkSharingMode value", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferUsageFlags2CreateInfo": { + "core": [ + { + "vuid": "VUID-VkBufferUsageFlags2CreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferUsageFlags2CreateInfo-usage-parameter", + "text": "usage must be a valid combination of VkBufferUsageFlagBits2 values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferUsageFlags2CreateInfo-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/resources.html" + } + ] + }, + "VkDedicatedAllocationBufferCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkDedicatedAllocationBufferCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV", + "page": "chapters/resources.html" + } + ] + }, + "VkExternalMemoryBufferCreateInfo": { + "core": [ + { + "vuid": "VUID-VkExternalMemoryBufferCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkExternalMemoryBufferCreateInfo-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBits values", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferOpaqueCaptureAddressCreateInfo": { + "core": [ + { + "vuid": "VUID-VkBufferOpaqueCaptureAddressCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferDeviceAddressCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkBufferDeviceAddressCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferCollectionBufferCreateInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkBufferCollectionBufferCreateInfoFUCHSIA-index-06388", + "text": "index must be less than VkBufferCollectionPropertiesFUCHSIA::bufferCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionBufferCreateInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionBufferCreateInfoFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyBuffer": { + "core": [ + { + "vuid": "VUID-vkDestroyBuffer-buffer-00922", + "text": "All submitted commands that refer to buffer, either directly or via a VkBufferView, must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBuffer-buffer-00923", + "text": "If VkAllocationCallbacks were provided when buffer was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBuffer-buffer-00924", + "text": "If no VkAllocationCallbacks were provided when buffer was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBuffer-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBuffer-buffer-parameter", + "text": "If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBuffer-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBuffer-buffer-parent", + "text": "If buffer is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateBufferView": { + "core": [ + { + "vuid": "VUID-vkCreateBufferView-device-09665", + "text": "device must support at least one queue family with one of the VK_QUEUE_COMPUTE_BIT or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferView-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferView-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkBufferViewCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferView-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferView-pView-parameter", + "text": "pView must be a valid pointer to a VkBufferView handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferView-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferViewCreateInfo": { + "core": [ + { + "vuid": "VUID-VkBufferViewCreateInfo-offset-00925", + "text": "offset must be less than the size of buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-range-00928", + "text": "If range is not equal to VK_WHOLE_SIZE, range must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-range-00929", + "text": "If range is not equal to VK_WHOLE_SIZE, range must be an integer multiple of the texel block size of format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-range-00930", + "text": "If range is not equal to VK_WHOLE_SIZE, the number of texel buffer elements given by (⌊range / (texel block size)⌋ × (texels per block)) where texel block size and texels per block are as defined in the Compatible Formats table for format, must be less than or equal to VkPhysicalDeviceLimits::maxTexelBufferElements", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-offset-00931", + "text": "If range is not equal to VK_WHOLE_SIZE, the sum of offset and range must be less than or equal to the size of buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-range-04059", + "text": "If range is equal to VK_WHOLE_SIZE, the number of texel buffer elements given by (⌊(size - offset) / (texel block size)⌋ × (texels per block)) where size is the size of buffer, and texel block size and texels per block are as defined in the Compatible Formats table for format, must be less than or equal to VkPhysicalDeviceLimits::maxTexelBufferElements", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-buffer-00932", + "text": "buffer must have been created with a usage value containing at least one of VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-format-08778", + "text": "If the buffer view usage contains VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, then format features of format must contain VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-format-08779", + "text": "If the buffer view usage contains VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, then format features of format must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-buffer-00935", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-offset-02749", + "text": "If the texelBufferAlignment feature is not enabled, offset must be a multiple of VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-buffer-02750", + "text": "If the texelBufferAlignment feature is enabled and if buffer was created with usage containing VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, offset must be a multiple of the lesser of VkPhysicalDeviceTexelBufferAlignmentProperties::storageTexelBufferOffsetAlignmentBytes or, if VkPhysicalDeviceTexelBufferAlignmentProperties::storageTexelBufferOffsetSingleTexelAlignment is VK_TRUE, the size of a texel of the requested format. If the size of a texel is a multiple of three bytes, then the size of a single component of format is used instead", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-buffer-02751", + "text": "If the texelBufferAlignment feature is enabled and if buffer was created with usage containing VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, offset must be a multiple of the lesser of VkPhysicalDeviceTexelBufferAlignmentProperties::uniformTexelBufferOffsetAlignmentBytes or, if VkPhysicalDeviceTexelBufferAlignmentProperties::uniformTexelBufferOffsetSingleTexelAlignment is VK_TRUE, the size of a texel of the requested format. If the size of a texel is a multiple of three bytes, then the size of a single component of format is used instead", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-pNext-06782", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-pNext-08780", + "text": "If the pNext chain includes a VkBufferUsageFlags2CreateInfo, its usage must not contain any other bit than VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT or VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-pNext-08781", + "text": "If the pNext chain includes a VkBufferUsageFlags2CreateInfo, its usage must be a subset of the VkBufferCreateInfo::usage specified or VkBufferUsageFlags2CreateInfo::usage from VkBufferCreateInfo::pNext when creating buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkBufferUsageFlags2CreateInfo or VkExportMetalObjectCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalObjectCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferViewCreateInfo-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyBufferView": { + "core": [ + { + "vuid": "VUID-vkDestroyBufferView-bufferView-00936", + "text": "All submitted commands that refer to bufferView must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferView-bufferView-00937", + "text": "If VkAllocationCallbacks were provided when bufferView was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferView-bufferView-00938", + "text": "If no VkAllocationCallbacks were provided when bufferView was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferView-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferView-bufferView-parameter", + "text": "If bufferView is not VK_NULL_HANDLE, bufferView must be a valid VkBufferView handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferView-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferView-bufferView-parent", + "text": "If bufferView is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetBufferDeviceAddress": { + "core": [ + { + "vuid": "VUID-vkGetBufferDeviceAddress-bufferDeviceAddress-03324", + "text": "The bufferDeviceAddress feature or the VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddress feature must be enabled, and at least one of the following conditions must be met
\n\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferDeviceAddress-device-03325", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice or VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferDeviceAddress-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferDeviceAddress-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkBufferDeviceAddressInfo structure", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferDeviceAddressInfo": { + "core": [ + { + "vuid": "VUID-VkBufferDeviceAddressInfo-buffer-02601", + "text": "buffer must have been created with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferDeviceAddressInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferDeviceAddressInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferDeviceAddressInfo-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + } + ] + }, + "vkGetBufferOpaqueCaptureAddress": { + "core": [ + { + "vuid": "VUID-vkGetBufferOpaqueCaptureAddress-None-03326", + "text": "The bufferDeviceAddress and bufferDeviceAddressCaptureReplay features must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureAddress-pInfo-10725", + "text": "pInfo::buffer must have been created with the VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT flag", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureAddress-device-03327", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureAddress-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureAddress-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkBufferDeviceAddressInfo structure", + "page": "chapters/resources.html" + } + ] + }, + "VkStridedDeviceAddressRegionKHR": { + "core": [ + { + "vuid": "VUID-VkStridedDeviceAddressRegionKHR-size-04631", + "text": "If size is not zero, all addresses between deviceAddress and deviceAddress + size - 1 must be in the buffer device address range of the same buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkStridedDeviceAddressRegionKHR-size-04632", + "text": "If size is not zero, stride must be less than or equal to the size of the buffer from which deviceAddress was queried", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateImage": { + "core": [ + { + "vuid": "VUID-vkCreateImage-device-09666", + "text": "device must support at least one queue family with one of the VK_QUEUE_VIDEO_ENCODE_BIT_KHR, VK_QUEUE_VIDEO_DECODE_BIT_KHR, VK_QUEUE_OPTICAL_FLOW_BIT_NV, VK_QUEUE_SPARSE_BINDING_BIT, VK_QUEUE_TRANSFER_BIT, VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-flags-00939", + "text": "If the flags member of pCreateInfo includes VK_IMAGE_CREATE_SPARSE_BINDING_BIT, and the extendedSparseAddressSpace feature is not enabled, creating this VkImage must not cause the total required sparse memory for all currently valid sparse resources on the device to exceed VkPhysicalDeviceLimits::sparseAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-flags-09385", + "text": "If the flags member of pCreateInfo includes VK_IMAGE_CREATE_SPARSE_BINDING_BIT, the extendedSparseAddressSpace feature is enabled, and the usage member of pCreateInfo contains bits not in VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseImageUsageFlags, creating this VkImage must not cause the total required sparse memory for all currently valid sparse resources on the device, excluding VkBuffer created with usage member of pCreateInfo containing bits in VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseBufferUsageFlags and VkImage created with usage member of pCreateInfo containing bits in VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseImageUsageFlags, to exceed VkPhysicalDeviceLimits::sparseAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-flags-09386", + "text": "If the flags member of pCreateInfo includes VK_IMAGE_CREATE_SPARSE_BINDING_BIT and the extendedSparseAddressSpace feature is enabled, creating this VkImage must not cause the total required sparse memory for all currently valid sparse resources on the device to exceed VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV::extendedSparseAddressSpaceSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-pNext-06389", + "text": "If a VkBufferCollectionImageCreateInfoFUCHSIA has been chained to pNext, pCreateInfo must match the Sysmem chosen VkImageCreateInfo excepting members VkImageCreateInfo::extent and VkImageCreateInfo::usage in the match criteria", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkImageCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-pImage-parameter", + "text": "pImage must be a valid pointer to a VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImage-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkImageCreateInfo": { + "core": [ + { + "vuid": "VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251", + "text": "Each of the following values (as described in Image Creation Limits) must not be undefined : imageCreateMaxMipLevels, imageCreateMaxArrayLayers, imageCreateMaxExtent, and imageCreateSampleCounts", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-sharingMode-00941", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a valid pointer to an array of queueFamilyIndexCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-sharingMode-00942", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-sharingMode-01420", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, each element of pQueueFamilyIndices must be unique and must be less than pQueueFamilyPropertyCount returned by either vkGetPhysicalDeviceQueueFamilyProperties or vkGetPhysicalDeviceQueueFamilyProperties2 for the physicalDevice that was used to create device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-01974", + "text": "If the pNext chain includes a VkExternalFormatANDROID structure, and its externalFormat member is non-zero the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-01975", + "text": "If the pNext chain does not include a VkExternalFormatANDROID structure, or does and its externalFormat member is 0, the format must not be VK_FORMAT_UNDEFINED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-extent-00944", + "text": "extent.width must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-extent-00945", + "text": "extent.height must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-extent-00946", + "text": "extent.depth must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-mipLevels-00947", + "text": "mipLevels must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-arrayLayers-00948", + "text": "arrayLayers must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-00949", + "text": "If flags contains VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-08865", + "text": "If flags contains VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, extent.width and extent.height must be equal", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-08866", + "text": "If flags contains VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, arrayLayers must be greater than or equal to 6", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-initialLayout-10765", + "text": "If the zeroInitializeDeviceMemory feature is not enabled, initialLayout must not be VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02557", + "text": "If flags contains VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-00950", + "text": "If flags contains VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, imageType must be VK_IMAGE_TYPE_3D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-09403", + "text": "If flags contains VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, flags must not include VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, VK_IMAGE_CREATE_SPARSE_BINDING_BIT, or VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-07755", + "text": "If flags contains VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT, imageType must be VK_IMAGE_TYPE_3D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-10197", + "text": "If flags contains VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT and either the maintenance9 feature is not enabled on the device or image2DViewOf3DSparse is VK_FALSE , flags must not include VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, VK_IMAGE_CREATE_SPARSE_BINDING_BIT, or VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-extent-02252", + "text": "extent.width must be less than or equal to imageCreateMaxExtent.width (as defined in Image Creation Limits)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-extent-02253", + "text": "extent.height must be less than or equal to imageCreateMaxExtent.height (as defined in Image Creation Limits)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-extent-02254", + "text": "extent.depth must be less than or equal to imageCreateMaxExtent.depth (as defined in Image Creation Limits)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00956", + "text": "If imageType is VK_IMAGE_TYPE_1D, both extent.height and extent.depth must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00957", + "text": "If imageType is VK_IMAGE_TYPE_2D, extent.depth must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-mipLevels-00958", + "text": "mipLevels must be less than or equal to the number of levels in the complete mipmap chain based on extent.width, extent.height, and extent.depth", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-mipLevels-02255", + "text": "mipLevels must be less than or equal to imageCreateMaxMipLevels (as defined in Image Creation Limits)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-arrayLayers-02256", + "text": "arrayLayers must be less than or equal to imageCreateMaxArrayLayers (as defined in Image Creation Limits)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00961", + "text": "If imageType is VK_IMAGE_TYPE_3D, arrayLayers must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-samples-02257", + "text": "If samples is not VK_SAMPLE_COUNT_1_BIT, then imageType must be VK_IMAGE_TYPE_2D, flags must not contain VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, mipLevels must be equal to 1, and imageCreateMaybeLinear (as defined in Image Creation Limits) must be VK_FALSE,", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-samples-02558", + "text": "If samples is not VK_SAMPLE_COUNT_1_BIT, usage must not contain VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-00963", + "text": "If usage includes VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, then bits other than VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT must not be set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-00964", + "text": "If usage includes VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, extent.width must be less than or equal to VkPhysicalDeviceLimits::maxFramebufferWidth", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-00965", + "text": "If usage includes VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, extent.height must be less than or equal to VkPhysicalDeviceLimits::maxFramebufferHeight", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-fragmentDensityMapOffset-06514", + "text": "If the fragmentDensityMapOffset feature is not enabled and usage includes VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, extent.width must be less than or equal to \\(\\left\\lceil{\\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\\right\\rceil\\)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-fragmentDensityMapOffset-06515", + "text": "If the fragmentDensityMapOffset feature is not enabled and usage includes VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, extent.height must be less than or equal to \\(\\left\\lceil{\\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\\right\\rceil\\)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-00966", + "text": "If usage includes VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, usage must also contain at least one of VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-samples-02258", + "text": "samples must be a valid VkSampleCountFlagBits value that is set in imageCreateSampleCounts (as defined in Image Creation Limits)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-00968", + "text": "If the shaderStorageImageMultisample feature is not enabled, and usage contains VK_IMAGE_USAGE_STORAGE_BIT, samples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-00969", + "text": "If the sparseBinding feature is not enabled, flags must not contain VK_IMAGE_CREATE_SPARSE_BINDING_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-01924", + "text": "If the sparseResidencyAliased feature is not enabled, flags must not contain VK_IMAGE_CREATE_SPARSE_ALIASED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-tiling-04121", + "text": "If tiling is VK_IMAGE_TILING_LINEAR, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00970", + "text": "If imageType is VK_IMAGE_TYPE_1D, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00971", + "text": "If the sparseResidencyImage2D feature is not enabled, and imageType is VK_IMAGE_TYPE_2D, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00972", + "text": "If the sparseResidencyImage3D feature is not enabled, and imageType is VK_IMAGE_TYPE_3D, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00973", + "text": "If the sparseResidency2Samples feature is not enabled, imageType is VK_IMAGE_TYPE_2D, and samples is VK_SAMPLE_COUNT_2_BIT, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00974", + "text": "If the sparseResidency4Samples feature is not enabled, imageType is VK_IMAGE_TYPE_2D, and samples is VK_SAMPLE_COUNT_4_BIT, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00975", + "text": "If the sparseResidency8Samples feature is not enabled, imageType is VK_IMAGE_TYPE_2D, and samples is VK_SAMPLE_COUNT_8_BIT, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-00976", + "text": "If the sparseResidency16Samples feature is not enabled, imageType is VK_IMAGE_TYPE_2D, and samples is VK_SAMPLE_COUNT_16_BIT, flags must not contain VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-00987", + "text": "If flags contains VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must also contain VK_IMAGE_CREATE_SPARSE_BINDING_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-None-01925", + "text": "If any of the bits VK_IMAGE_CREATE_SPARSE_BINDING_BIT, VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT must not also be set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-01890", + "text": "If the protectedMemory feature is not enabled, flags must not contain VK_IMAGE_CREATE_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-None-01891", + "text": "If any of the bits VK_IMAGE_CREATE_SPARSE_BINDING_BIT, VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or VK_IMAGE_CREATE_SPARSE_ALIASED_BIT are set, VK_IMAGE_CREATE_PROTECTED_BIT must not also be set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-00988", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfoNV structure, it must not contain a VkExternalMemoryImageCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-00990", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfo structure, its handleTypes member must only contain bits that are also in VkExternalImageFormatProperties::externalMemoryProperties.compatibleHandleTypes, as returned by vkGetPhysicalDeviceImageFormatProperties2 with format, imageType, tiling, usage, and flags equal to those in this structure, and with a VkPhysicalDeviceExternalImageFormatInfo structure included in the pNext chain, with a handleType equal to any one of the handle types specified in VkExternalMemoryImageCreateInfo::handleTypes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-00991", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfoNV structure, its handleTypes member must only contain bits that are also in VkExternalImageFormatPropertiesNV::externalMemoryFeatures.compatibleHandleTypes, as returned by vkGetPhysicalDeviceExternalImageFormatPropertiesNV with format, imageType, tiling, usage, and flags equal to those in this structure, and with externalHandleType equal to any one of the handle types specified in VkExternalMemoryImageCreateInfoNV::handleTypes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-physicalDeviceCount-01421", + "text": "If the logical device was created with VkDeviceGroupDeviceCreateInfo::physicalDeviceCount equal to 1, flags must not contain VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02259", + "text": "If flags contains VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, then mipLevels must be one, arrayLayers must be one, imageType must be VK_IMAGE_TYPE_2D. and imageCreateMaybeLinear (as defined in Image Creation Limits) must be VK_FALSE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-01572", + "text": "If flags contains VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, then format must be a compressed image format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-01573", + "text": "If flags contains VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, then flags must also contain VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-initialLayout-00993", + "text": "initialLayout must be VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT or VK_IMAGE_LAYOUT_PREINITIALIZED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-01443", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfo or VkExternalMemoryImageCreateInfoNV structure whose handleTypes member is not 0, initialLayout must be VK_IMAGE_LAYOUT_UNDEFINED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-06410", + "text": "If the image format is one of the formats that require a sampler Y′CBCR conversion, mipLevels must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-06411", + "text": "If the image format is one of the formats that require a sampler Y′CBCR conversion, samples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-06412", + "text": "If the image format is one of the formats that require a sampler Y′CBCR conversion, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageCreateFormatFeatures-02260", + "text": "If format is a multi-planar format, and if imageCreateFormatFeatures (as defined in Image Creation Limits) does not contain VK_FORMAT_FEATURE_DISJOINT_BIT, then flags must not contain VK_IMAGE_CREATE_DISJOINT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-01577", + "text": "If format is not a multi-planar format, and flags does not include VK_IMAGE_CREATE_ALIAS_BIT, flags must not contain VK_IMAGE_CREATE_DISJOINT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-04712", + "text": "If format has a _422 or _420 suffix, extent.width must be a multiple of 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-04713", + "text": "If format has a _420 suffix, extent.height must be a multiple of 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-09583", + "text": "If format is one of the VK_FORMAT_PVTRC1_*_IMG formats, extent.width must be a power of 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-09584", + "text": "If format is one of the VK_FORMAT_PVTRC1_*_IMG formats, extent.height must be a power of 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-tiling-02261", + "text": "If tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then the pNext chain must include exactly one of VkImageDrmFormatModifierListCreateInfoEXT or VkImageDrmFormatModifierExplicitCreateInfoEXT structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-02262", + "text": "If the pNext chain includes a VkImageDrmFormatModifierListCreateInfoEXT or VkImageDrmFormatModifierExplicitCreateInfoEXT structure, then tiling must be VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-tiling-02353", + "text": "If tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and flags contains VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the pNext chain must include a VkImageFormatListCreateInfo structure with non-zero viewFormatCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-01533", + "text": "If flags contains VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT format must be a depth or depth/stencil format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-02393", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfo structure whose handleTypes member includes VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-02394", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfo structure whose handleTypes member includes VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID, mipLevels must either be 1 or equal to the number of levels in the complete mipmap chain based on extent.width, extent.height, and extent.depth", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-02396", + "text": "If the pNext chain includes a VkExternalFormatANDROID structure whose externalFormat member is not 0, flags must not include VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-02397", + "text": "If the pNext chain includes a VkExternalFormatANDROID structure whose externalFormat member is not 0, usage must not include any usages except VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, or VK_IMAGE_USAGE_SAMPLED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-09457", + "text": "If the pNext chain includes a VkExternalFormatANDROID structure whose externalFormat member is not 0, and externalFormatResolve feature is not enabled, usage must not include VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT or VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-02398", + "text": "If the pNext chain includes a VkExternalFormatANDROID structure whose externalFormat member is not 0, tiling must be VK_IMAGE_TILING_OPTIMAL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-08951", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfo structure whose handleTypes member includes VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-08952", + "text": "If the pNext chain includes a VkExternalMemoryImageCreateInfo structure whose handleTypes member includes VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX, mipLevels must either be 1 or equal to the number of levels in the complete mipmap chain based on extent.width, extent.height, and extent.depth", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-08953", + "text": "If the pNext chain includes a VkExternalFormatQNX structure whose externalFormat member is not 0, flags must not include VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-08954", + "text": "If the pNext chain includes a VkExternalFormatQNX structure whose externalFormat member is not 0, usage must not include any usages except VK_IMAGE_USAGE_SAMPLED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-08955", + "text": "If the pNext chain includes a VkExternalFormatQNX structure whose externalFormat member is not 0, tiling must be VK_IMAGE_TILING_OPTIMAL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-02795", + "text": "If format is a depth-stencil format, usage includes VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and the pNext chain includes a VkImageStencilUsageCreateInfo structure, then its VkImageStencilUsageCreateInfo::stencilUsage member must also include VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-02796", + "text": "If format is a depth-stencil format, usage does not include VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and the pNext chain includes a VkImageStencilUsageCreateInfo structure, then its VkImageStencilUsageCreateInfo::stencilUsage member must also not include VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-02797", + "text": "If format is a depth-stencil format, usage includes VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, and the pNext chain includes a VkImageStencilUsageCreateInfo structure, then its VkImageStencilUsageCreateInfo::stencilUsage member must also include VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-02798", + "text": "If format is a depth-stencil format, usage does not include VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, and the pNext chain includes a VkImageStencilUsageCreateInfo structure, then its VkImageStencilUsageCreateInfo::stencilUsage member must also not include VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-Format-02536", + "text": "If Format is a depth-stencil format and the pNext chain includes a VkImageStencilUsageCreateInfo structure with its stencilUsage member including VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, extent.width must be less than or equal to VkPhysicalDeviceLimits::maxFramebufferWidth", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-02537", + "text": "If format is a depth-stencil format and the pNext chain includes a VkImageStencilUsageCreateInfo structure with its stencilUsage member including VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, extent.height must be less than or equal to VkPhysicalDeviceLimits::maxFramebufferHeight", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-02538", + "text": "If the shaderStorageImageMultisample feature is not enabled, format is a depth-stencil format and the pNext chain includes a VkImageStencilUsageCreateInfo structure with its stencilUsage including VK_IMAGE_USAGE_STORAGE_BIT, samples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02050", + "text": "If flags contains VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, imageType must be VK_IMAGE_TYPE_2D or VK_IMAGE_TYPE_3D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02051", + "text": "If flags contains VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV, it must not contain VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT and the format must not be a depth/stencil format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02052", + "text": "If flags contains VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV and imageType is VK_IMAGE_TYPE_2D, extent.width and extent.height must be greater than 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02053", + "text": "If flags contains VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV and imageType is VK_IMAGE_TYPE_3D, extent.width, extent.height, and extent.depth must be greater than 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-02082", + "text": "If usage includes VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-samples-02083", + "text": "If usage includes VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, samples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-shadingRateImage-07727", + "text": "If the shadingRateImage feature is enabled and usage includes VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, tiling must be VK_IMAGE_TILING_OPTIMAL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02565", + "text": "If flags contains VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT, tiling must be VK_IMAGE_TILING_OPTIMAL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02566", + "text": "If flags contains VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02567", + "text": "If flags contains VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT, flags must not contain VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-02568", + "text": "If flags contains VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT, mipLevels must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-04992", + "text": "If usage includes VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI, tiling must be VK_IMAGE_TILING_LINEAR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageView2DOn3DImage-04459", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::imageView2DOn3DImage is VK_FALSE, flags must not contain VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-multisampleArrayImage-04460", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::multisampleArrayImage is VK_FALSE, and samples is not VK_SAMPLE_COUNT_1_BIT, then arrayLayers must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06722", + "text": "If a VkImageFormatListCreateInfo structure was included in the pNext chain and format is not a multi-planar format and VkImageFormatListCreateInfo::viewFormatCount is not zero, then each format in VkImageFormatListCreateInfo::pViewFormats must either be compatible with the format as described in the compatibility table or, if flags contains VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, be an uncompressed format that is size-compatible with format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-10062", + "text": "If a VkImageFormatListCreateInfo structure was included in the pNext chain and format is a multi-planar format and flags contains VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and VkImageFormatListCreateInfo::viewFormatCount is not zero, then each format in VkImageFormatListCreateInfo::pViewFormats must be compatible with the VkFormat for the plane of the image format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-04738", + "text": "If flags does not contain VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and the pNext chain includes a VkImageFormatListCreateInfo structure, then VkImageFormatListCreateInfo::viewFormatCount must be 0 or 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-04815", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, or VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, and flags does not include VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0 and pProfiles including at least one VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying a decode operation", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-04816", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR, or VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, and flags does not include VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0 and pProfiles including at least one VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying an encode operation", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-08328", + "text": "If flags includes VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then videoMaintenance1 must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-08329", + "text": "If flags includes VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR and usage does not include VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, then usage must not include VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-08331", + "text": "If flags includes VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then usage must not include VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, or VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06811", + "text": "If the pNext chain includes a VkVideoProfileListInfoKHR structure with profileCount greater than 0, then supportedVideoFormat must be VK_TRUE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-10784", + "text": "If the pNext chain includes a VkVideoProfileListInfoKHR structure and for any element of its pProfiles member videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the videoDecodeVP9 feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-10250", + "text": "If the pNext chain includes a VkVideoProfileListInfoKHR structure and for any element of its pProfiles member videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the videoEncodeAV1 feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10251", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, then the videoEncodeQuantizationMap feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10252", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, imageType must be VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10253", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, samples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10254", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, then the pNext chain must include a VkVideoProfileListInfoKHR structure with profileCount equal to 1 and pProfiles pointing to a VkVideoProfileInfoKHR structure with a videoCodecOperation member specifying an encode operation", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10255", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, then VkVideoEncodeCapabilitiesKHR::flags must include VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in the pProfiles member of the VkVideoProfileListInfoKHR structure included in the pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10256", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, then VkVideoEncodeCapabilitiesKHR::flags must include VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in the pProfiles member of the VkVideoProfileListInfoKHR structure included in the pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10257", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, extent.width must be less than or equal to VkVideoEncodeQuantizationMapCapabilitiesKHR::maxQuantizationMapExtent.width, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in the pProfiles member of the VkVideoProfileListInfoKHR structure included in the pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10258", + "text": "If usage includes VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, extent.height must be less than or equal to VkVideoEncodeQuantizationMapCapabilitiesKHR::maxQuantizationMapExtent.height, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in the pProfiles member of the VkVideoProfileListInfoKHR structure included in the pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06390", + "text": "If the VkImage is to be used to import memory from a VkBufferCollectionFUCHSIA, a VkBufferCollectionImageCreateInfoFUCHSIA structure must be chained to pNext", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-multisampledRenderToSingleSampled-06882", + "text": "If the multisampledRenderToSingleSampled feature is not enabled, flags must not contain VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-06883", + "text": "If flags contains VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT, samples must be VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06743", + "text": "If the pNext chain includes a VkImageCompressionControlEXT structure, format is a multi-planar format, and VkImageCompressionControlEXT::flags includes VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, then VkImageCompressionControlEXT::compressionControlPlaneCount must be equal to the number of planes in format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06744", + "text": "If the pNext chain includes a VkImageCompressionControlEXT structure, format is not a multi-planar format, and VkImageCompressionControlEXT::flags includes VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, then VkImageCompressionControlEXT::compressionControlPlaneCount must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06746", + "text": "If the pNext chain includes a VkImageCompressionControlEXT structure, it must not contain a VkImageDrmFormatModifierExplicitCreateInfoEXT structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-08104", + "text": "If flags includes VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-08105", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flags must contain VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06783", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be either VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT or VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06784", + "text": "If the pNext chain includes a VkImportMetalTextureInfoEXT structure its plane member must be VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT, or VK_IMAGE_ASPECT_PLANE_2_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06785", + "text": "If the pNext chain includes a VkImportMetalTextureInfoEXT structure and the image does not have a multi-planar format, then VkImportMetalTextureInfoEXT::plane must be VK_IMAGE_ASPECT_PLANE_0_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-06786", + "text": "If the pNext chain includes a VkImportMetalTextureInfoEXT structure and the image has a multi-planar format with only two planes, then VkImportMetalTextureInfoEXT::plane must not be VK_IMAGE_ASPECT_PLANE_2_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageCreateFormatFeatures-09048", + "text": "If imageCreateFormatFeatures (as defined in Image Creation Limits) does not contain VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT, then usage must not contain VK_IMAGE_USAGE_HOST_TRANSFER_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-10245", + "text": "If usage includes VK_IMAGE_USAGE_HOST_TRANSFER_BIT, then the hostImageCopy feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-tileMemoryHeap-10766", + "text": "If the tileMemoryHeap feature is not enabled, usage must not include VK_IMAGE_USAGE_TILE_MEMORY_BIT_QCOM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-09653", + "text": "If the pNext chain contains a VkImageAlignmentControlCreateInfoMESA structure, tiling must be VK_IMAGE_TILING_OPTIMAL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-09654", + "text": "If the pNext chain contains a VkImageAlignmentControlCreateInfoMESA structure, it must not contain a VkExternalMemoryImageCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-tiling-09711", + "text": "If tiling is VK_IMAGE_TILING_LINEAR then VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARM must not be set in usage.", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkBufferCollectionImageCreateInfoFUCHSIA, VkDedicatedAllocationImageCreateInfoNV, VkExportMetalObjectCreateInfoEXT, VkExternalFormatANDROID, VkExternalFormatQNX, VkExternalMemoryImageCreateInfo, VkExternalMemoryImageCreateInfoNV, VkImageAlignmentControlCreateInfoMESA, VkImageCompressionControlEXT, VkImageDrmFormatModifierExplicitCreateInfoEXT, VkImageDrmFormatModifierListCreateInfoEXT, VkImageFormatListCreateInfo, VkImageStencilUsageCreateInfo, VkImageSwapchainCreateInfoKHR, VkImportMetalIOSurfaceInfoEXT, VkImportMetalTextureInfoEXT, VkOpaqueCaptureDescriptorDataCreateInfoEXT, VkOpticalFlowImageFormatInfoNV, or VkVideoProfileListInfoKHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalObjectCreateInfoEXT or VkImportMetalTextureInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkImageCreateFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-imageType-parameter", + "text": "imageType must be a valid VkImageType value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-tiling-parameter", + "text": "tiling must be a valid VkImageTiling value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-sharingMode-parameter", + "text": "sharingMode must be a valid VkSharingMode value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCreateInfo-initialLayout-parameter", + "text": "initialLayout must be a valid VkImageLayout value", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferCollectionImageCreateInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkBufferCollectionImageCreateInfoFUCHSIA-index-06391", + "text": "index must be less than VkBufferCollectionPropertiesFUCHSIA::bufferCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionImageCreateInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionImageCreateInfoFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + } + ] + }, + "VkImageStencilUsageCreateInfo": { + "core": [ + { + "vuid": "VUID-VkImageStencilUsageCreateInfo-stencilUsage-02539", + "text": "If stencilUsage includes VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, it must not include bits other than VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageStencilUsageCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageStencilUsageCreateInfo-stencilUsage-parameter", + "text": "stencilUsage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageStencilUsageCreateInfo-stencilUsage-requiredbitmask", + "text": "stencilUsage must not be 0", + "page": "chapters/resources.html" + } + ] + }, + "VkDedicatedAllocationImageCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994", + "text": "If dedicatedAllocation is VK_TRUE, VkImageCreateInfo::flags must not include VK_IMAGE_CREATE_SPARSE_BINDING_BIT, VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or VK_IMAGE_CREATE_SPARSE_ALIASED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDedicatedAllocationImageCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV", + "page": "chapters/resources.html" + } + ] + }, + "VkExternalMemoryImageCreateInfo": { + "core": [ + { + "vuid": "VUID-VkExternalMemoryImageCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkExternalMemoryImageCreateInfo-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBits values", + "page": "chapters/resources.html" + } + ] + }, + "VkExternalMemoryImageCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkExternalMemoryImageCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkExternalMemoryImageCreateInfoNV-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBitsNV values", + "page": "chapters/resources.html" + } + ] + }, + "VkExternalFormatANDROID": { + "core": [ + { + "vuid": "VUID-VkExternalFormatANDROID-externalFormat-01894", + "text": "externalFormat must be 0 or a value returned in the externalFormat member of VkAndroidHardwareBufferFormatPropertiesANDROID by an earlier call to vkGetAndroidHardwareBufferPropertiesANDROID", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkExternalFormatANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID", + "page": "chapters/resources.html" + } + ] + }, + "VkExternalFormatQNX": { + "core": [ + { + "vuid": "VUID-VkExternalFormatQNX-externalFormat-08956", + "text": "externalFormat must be 0 or a value returned in the externalFormat member of VkScreenBufferFormatPropertiesQNX by an earlier call to vkGetScreenBufferPropertiesQNX", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkExternalFormatQNX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX", + "page": "chapters/resources.html" + } + ] + }, + "VkImageSwapchainCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkImageSwapchainCreateInfoKHR-swapchain-00995", + "text": "If swapchain is not VK_NULL_HANDLE, the fields of VkImageCreateInfo must match the implied image creation parameters of the swapchain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSwapchainCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSwapchainCreateInfoKHR-swapchain-parameter", + "text": "If swapchain is not VK_NULL_HANDLE, swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/resources.html" + } + ] + }, + "VkImageFormatListCreateInfo": { + "core": [ + { + "vuid": "VUID-VkImageFormatListCreateInfo-viewFormatCount-09540", + "text": "If viewFormatCount is not 0, each element of pViewFormats must not be VK_FORMAT_UNDEFINED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatListCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatListCreateInfo-pViewFormats-parameter", + "text": "If viewFormatCount is not 0, pViewFormats must be a valid pointer to an array of viewFormatCount valid VkFormat values", + "page": "chapters/resources.html" + } + ] + }, + "VkImageDrmFormatModifierListCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-02263", + "text": "Each modifier in pDrmFormatModifiers must be compatible with the parameters in VkImageCreateInfo and its pNext chain, as determined by querying VkPhysicalDeviceImageFormatInfo2 extended with VkPhysicalDeviceImageDrmFormatModifierInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-parameter", + "text": "pDrmFormatModifiers must be a valid pointer to an array of drmFormatModifierCount uint64_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierListCreateInfoEXT-drmFormatModifierCount-arraylength", + "text": "drmFormatModifierCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkImageDrmFormatModifierExplicitCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifier-02264", + "text": "drmFormatModifier must be compatible with the parameters in VkImageCreateInfo and its pNext chain, as determined by querying VkPhysicalDeviceImageFormatInfo2 extended with VkPhysicalDeviceImageDrmFormatModifierInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-02265", + "text": "drmFormatModifierPlaneCount must be equal to the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with VkImageCreateInfo::format and drmFormatModifier, as found by querying VkDrmFormatModifierPropertiesListEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-size-02267", + "text": "For each element of pPlaneLayouts, size must be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-arrayPitch-02268", + "text": "For each element of pPlaneLayouts, arrayPitch must be 0 if VkImageCreateInfo::arrayLayers is 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-depthPitch-02269", + "text": "For each element of pPlaneLayouts, depthPitch must be 0 if VkImageCreateInfo::extent.depth is 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-pPlaneLayouts-parameter", + "text": "pPlaneLayouts must be a valid pointer to an array of drmFormatModifierPlaneCount VkSubresourceLayout structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-arraylength", + "text": "drmFormatModifierPlaneCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkImageCompressionControlEXT": { + "core": [ + { + "vuid": "VUID-VkImageCompressionControlEXT-flags-06747", + "text": "flags must be one of VK_IMAGE_COMPRESSION_DEFAULT_EXT, VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT, VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, or VK_IMAGE_COMPRESSION_DISABLED_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCompressionControlEXT-flags-06748", + "text": "If flags includes VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, pFixedRateFlags must not be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageCompressionControlEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT", + "page": "chapters/resources.html" + } + ] + }, + "VkImageCompressionPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkImageCompressionPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT", + "page": "chapters/resources.html" + } + ] + }, + "VkImageAlignmentControlCreateInfoMESA": { + "core": [ + { + "vuid": "VUID-VkImageAlignmentControlCreateInfoMESA-maximumRequestedAlignment-09655", + "text": "If maximumRequestedAlignment is not 0, maximumRequestedAlignment must be a power of two", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageAlignmentControlCreateInfoMESA-maximumRequestedAlignment-09656", + "text": "If maximumRequestedAlignment is not 0, the bitwise-and of maximumRequestedAlignment and supportedImageAlignmentMask must be non-zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageAlignmentControlCreateInfoMESA-imageAlignmentControl-09657", + "text": "imageAlignmentControl must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageAlignmentControlCreateInfoMESA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageSubresourceLayout": { + "core": [ + { + "vuid": "VUID-vkGetImageSubresourceLayout-image-07790", + "text": "image must have been created with tiling equal to VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-aspectMask-00997", + "text": "The aspectMask member of pSubresource must only have a single bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-mipLevel-01716", + "text": "The mipLevel member of pSubresource must be less than the mipLevels specified in image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-arrayLayer-01717", + "text": "The arrayLayer member of pSubresource must be less than the arrayLayers specified in image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-format-08886", + "text": "If format of the image is a color format that is not a multi-planar format, and tiling of the image is VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_OPTIMAL, the aspectMask member of pSubresource must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-format-04462", + "text": "If format of the image has a depth component, the aspectMask member of pSubresource must contain VK_IMAGE_ASPECT_DEPTH_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-format-04463", + "text": "If format of the image has a stencil component, the aspectMask member of pSubresource must contain VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-format-04464", + "text": "If format of the image does not contain a stencil or depth component, the aspectMask member of pSubresource must not contain VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-tiling-08717", + "text": "If the tiling of the image is VK_IMAGE_TILING_LINEAR and has a multi-planar format, then the aspectMask member of pSubresource must be a single valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-image-09432", + "text": "If image was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then image must be bound to memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-tiling-09433", + "text": "If the tiling of the image is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then the aspectMask member of pSubresource must be VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT and the index i must be less than the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with the image’s format and VkImageDrmFormatModifierPropertiesEXT::drmFormatModifier", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-pSubresource-parameter", + "text": "pSubresource must be a valid pointer to a valid VkImageSubresource structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-pLayout-parameter", + "text": "pLayout must be a valid pointer to a VkSubresourceLayout structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout-image-parent", + "text": "image must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkImageSubresource": { + "core": [ + { + "vuid": "VUID-VkImageSubresource-aspectMask-parameter", + "text": "aspectMask must be a valid combination of VkImageAspectFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresource-aspectMask-requiredbitmask", + "text": "aspectMask must not be 0", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageSubresourceLayout2": { + "core": [ + { + "vuid": "VUID-vkGetImageSubresourceLayout2-aspectMask-00997", + "text": "The aspectMask member of pSubresource must only have a single bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-mipLevel-01716", + "text": "The mipLevel member of pSubresource must be less than the mipLevels specified in image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-arrayLayer-01717", + "text": "The arrayLayer member of pSubresource must be less than the arrayLayers specified in image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-format-08886", + "text": "If format of the image is a color format that is not a multi-planar format, and tiling of the image is VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_OPTIMAL, the aspectMask member of pSubresource must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-format-04462", + "text": "If format of the image has a depth component, the aspectMask member of pSubresource must contain VK_IMAGE_ASPECT_DEPTH_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-format-04463", + "text": "If format of the image has a stencil component, the aspectMask member of pSubresource must contain VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-format-04464", + "text": "If format of the image does not contain a stencil or depth component, the aspectMask member of pSubresource must not contain VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-tiling-08717", + "text": "If the tiling of the image is VK_IMAGE_TILING_LINEAR and has a multi-planar format, then the aspectMask member of pSubresource must be a single valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-image-09434", + "text": "If image was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then image must be bound to memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-tiling-09435", + "text": "If the tiling of the image is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then the aspectMask member of pSubresource must be VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT and the index i must be less than the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with the image’s format and VkImageDrmFormatModifierPropertiesEXT::drmFormatModifier", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-pSubresource-parameter", + "text": "pSubresource must be a valid pointer to a valid VkImageSubresource2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-pLayout-parameter", + "text": "pLayout must be a valid pointer to a VkSubresourceLayout2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageSubresourceLayout2-image-parent", + "text": "image must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkImageSubresource2": { + "core": [ + { + "vuid": "VUID-VkImageSubresource2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresource2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresource2-imageSubresource-parameter", + "text": "imageSubresource must be a valid VkImageSubresource structure", + "page": "chapters/resources.html" + } + ] + }, + "VkSubresourceLayout2": { + "core": [ + { + "vuid": "VUID-VkSubresourceLayout2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkSubresourceLayout2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkImageCompressionPropertiesEXT or VkSubresourceHostMemcpySize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkSubresourceLayout2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + } + ] + }, + "VkSubresourceHostMemcpySize": { + "core": [ + { + "vuid": "VUID-VkSubresourceHostMemcpySize-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE", + "page": "chapters/resources.html" + } + ] + }, + "vkGetDeviceImageSubresourceLayout": { + "core": [ + { + "vuid": "VUID-vkGetDeviceImageSubresourceLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceImageSubresourceLayout-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDeviceImageSubresourceInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceImageSubresourceLayout-pLayout-parameter", + "text": "pLayout must be a valid pointer to a VkSubresourceLayout2 structure", + "page": "chapters/resources.html" + } + ] + }, + "VkDeviceImageSubresourceInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-aspectMask-00997", + "text": "The aspectMask member of pSubresource must only have a single bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-mipLevel-01716", + "text": "The mipLevel member of pSubresource must be less than the mipLevels specified in pCreateInfo", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-arrayLayer-01717", + "text": "The arrayLayer member of pSubresource must be less than the arrayLayers specified in pCreateInfo", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-format-08886", + "text": "If format of the image is a color format that is not a multi-planar format, and tiling of the pCreateInfo is VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_OPTIMAL, the aspectMask member of pSubresource must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-format-04462", + "text": "If format of the pCreateInfo has a depth component, the aspectMask member of pSubresource must contain VK_IMAGE_ASPECT_DEPTH_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-format-04463", + "text": "If format of the pCreateInfo has a stencil component, the aspectMask member of pSubresource must contain VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-format-04464", + "text": "If format of the pCreateInfo does not contain a stencil or depth component, the aspectMask member of pSubresource must not contain VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-tiling-08717", + "text": "If the tiling of the pCreateInfo is VK_IMAGE_TILING_LINEAR and has a multi-planar format, then the aspectMask member of pSubresource must be a single valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkImageCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageSubresourceInfo-pSubresource-parameter", + "text": "pSubresource must be a valid pointer to a valid VkImageSubresource2 structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageDrmFormatModifierPropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-02272", + "text": "image must have been created with tiling equal to VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkImageDrmFormatModifierPropertiesEXT structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-parent", + "text": "image must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkImageDrmFormatModifierPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkImageDrmFormatModifierPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageDrmFormatModifierPropertiesEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyImage": { + "core": [ + { + "vuid": "VUID-vkDestroyImage-image-01000", + "text": "All submitted commands that refer to image, either directly or via a VkImageView, must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-image-01001", + "text": "If VkAllocationCallbacks were provided when image was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-image-01002", + "text": "If no VkAllocationCallbacks were provided when image was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-image-04882", + "text": "image must not have been acquired from vkGetSwapchainImagesKHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-image-parameter", + "text": "If image is not VK_NULL_HANDLE, image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImage-image-parent", + "text": "If image is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateImageView": { + "core": [ + { + "vuid": "VUID-vkCreateImageView-device-09667", + "text": "device must support at least one queue family with one of the VK_QUEUE_VIDEO_ENCODE_BIT_KHR, VK_QUEUE_VIDEO_DECODE_BIT_KHR, VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImageView-image-09179", + "text": "VkImageViewCreateInfo::image must have been created from device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImageView-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImageView-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkImageViewCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImageView-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImageView-pView-parameter", + "text": "pView must be a valid pointer to a VkImageView handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateImageView-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewCreateInfo": { + "core": [ + { + "vuid": "VUID-VkImageViewCreateInfo-image-01003", + "text": "If image was not created with VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT then viewType must not be VK_IMAGE_VIEW_TYPE_CUBE or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-viewType-01004", + "text": "If the imageCubeArray feature is not enabled, viewType must not be VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-06723", + "text": "If image was created with VK_IMAGE_TYPE_3D but without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set then viewType must not be VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-06728", + "text": "If image was created with VK_IMAGE_TYPE_3D but without VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT or VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set, then viewType must not be VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-04970", + "text": "If image was created with VK_IMAGE_TYPE_3D and viewType is VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY then subresourceRange.levelCount must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-04972", + "text": "If image was created with a samples value not equal to VK_SAMPLE_COUNT_1_BIT then viewType must be either VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-04441", + "text": "image must have been created with a usage value containing at least one of the usages defined in the valid image usage list for image views", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-None-02273", + "text": "The format features of the resultant image view must contain at least one bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-02274", + "text": "If usage contains VK_IMAGE_USAGE_SAMPLED_BIT, then the format features of the resultant image view must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-02275", + "text": "If usage contains VK_IMAGE_USAGE_STORAGE_BIT, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-08931", + "text": "If usage contains VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then the image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-02277", + "text": "If usage contains VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, then the image view’s format features must contain VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08333", + "text": "If image was created with VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR and usage contains VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08334", + "text": "If image was created with VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR and usage contains VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08335", + "text": "If image was created with VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then usage must not include VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08336", + "text": "If image was created with VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR and usage contains VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08337", + "text": "If image was created with VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR and usage contains VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08338", + "text": "If image was created with VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR, then usage must not include VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-10259", + "text": "If usage contains VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-10260", + "text": "If usage contains VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-08932", + "text": "If usage contains VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, and any of the following is true:
\n\n
\n
\n

then the image view’s format\nfeatures must contain at least one of\nVK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or\nVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT\n or VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV

\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01478", + "text": "subresourceRange.baseMipLevel must be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-01718", + "text": "If subresourceRange.levelCount is not VK_REMAINING_MIP_LEVELS, subresourceRange.baseMipLevel + subresourceRange.levelCount must be less than or equal to the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02571", + "text": "If image was created with usage containing VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, subresourceRange.levelCount must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-06724", + "text": "If image is not a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT or VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set, or viewType is not VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY, subresourceRange.baseArrayLayer must be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-06725", + "text": "If subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, image is not a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT or VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set, or viewType is not VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY, subresourceRange.layerCount must be non-zero and subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02724", + "text": "If image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, and viewType is VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY, subresourceRange.baseArrayLayer must be less than the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-02725", + "text": "If subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, image is a 3D image created with VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT set, and viewType is VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY, subresourceRange.layerCount must be non-zero and subresourceRange.baseArrayLayer + subresourceRange.layerCount must be less than or equal to the depth computed from baseMipLevel and extent.depth specified in VkImageCreateInfo when image was created, according to the formula defined in Image Mip Level Sizing", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-01761", + "text": "If image was created with the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, but without the VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, and if the format of the image is not a multi-planar format, format must be compatible with the format used to create image, as defined in Format Compatibility Classes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-01583", + "text": "If image was created with the VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, format must be compatible with, or must be an uncompressed format that is size-compatible with, the format used to create image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-07072", + "text": "If image was created with the VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag and format is a non-compressed format, the levelCount member of subresourceRange must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-09487", + "text": "If image was created with the VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag, the VkPhysicalDeviceMaintenance6Properties::blockTexelViewCompatibleMultipleLayers property is not VK_TRUE, and format is a non-compressed format, then the layerCount member of subresourceRange must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-01585", + "text": "If a VkImageFormatListCreateInfo structure was included in the pNext chain of the VkImageCreateInfo structure used when creating image and VkImageFormatListCreateInfo::viewFormatCount is not zero then format must be one of the formats in VkImageFormatListCreateInfo::pViewFormats", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-01586", + "text": "If image was created with the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, if the format of the image is a multi-planar format, and if subresourceRange.aspectMask is one of the multi-planar aspect mask bits, then format must be compatible with the VkFormat for the plane of the image format indicated by subresourceRange.aspectMask, as defined in Compatible Formats of Planes of Multi-Planar Formats", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-07818", + "text": "subresourceRange.aspectMask must only have at most 1 valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-01762", + "text": "If image was not created with the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, or if the format of the image is a multi-planar format and if subresourceRange.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, format must be identical to the format used to create image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-format-06415", + "text": "If the image view requires a sampler Y′CBCR conversion and usage contains VK_IMAGE_USAGE_SAMPLED_BIT, then the pNext chain must include a VkSamplerYcbcrConversionInfo structure with a conversion value other than VK_NULL_HANDLE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-format-04714", + "text": "If format has a _422 or _420 suffix then image must have been created with a width that is a multiple of 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-format-04715", + "text": "If format has a _420 suffix then image must have been created with a height that is a multiple of 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-01970", + "text": "If the pNext chain includes a VkSamplerYcbcrConversionInfo structure with a conversion value other than VK_NULL_HANDLE, all members of components must have the identity swizzle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06658", + "text": "If the pNext chain includes a VkSamplerYcbcrConversionInfo structure with a conversion value other than VK_NULL_HANDLE, format must be the same used in VkSamplerYcbcrConversionCreateInfo::format", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-01020", + "text": "If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subResourceRange-01021", + "text": "viewType must be compatible with the type of image as shown in the view type compatibility table", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02399", + "text": "If image has an Android external format, format must be VK_FORMAT_UNDEFINED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02400", + "text": "If image has an Android external format, the pNext chain must include a VkSamplerYcbcrConversionInfo structure with a conversion object created with the same external format as image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02401", + "text": "If image has an Android external format, all members of components must be the identity swizzle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08957", + "text": "If image has an QNX Screen external format, format must be VK_FORMAT_UNDEFINED", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08958", + "text": "If image has an QNX Screen external format, the pNext chain must include a VkSamplerYcbcrConversionInfo structure with a conversion object created with the same external format as image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-08959", + "text": "If image has an QNX Screen external format, all members of components must be the identity swizzle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02086", + "text": "If image was created with usage containing VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, viewType must be VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-02087", + "text": "If the shadingRateImage feature is enabled, and If image was created with usage containing VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, format must be VK_FORMAT_R8_UINT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-04550", + "text": "If the attachmentFragmentShadingRate feature is enabled, and the usage for the image view includes VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, then the image view’s format features must contain VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-usage-04551", + "text": "If the attachmentFragmentShadingRate feature is enabled, the usage for the image view includes VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, and layeredShadingRateAttachments is VK_FALSE, subresourceRange.layerCount must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-flags-02572", + "text": "If the fragmentDensityMapDynamic feature is not enabled, flags must not contain VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-flags-03567", + "text": "If the fragmentDensityMapDeferred feature is not enabled, flags must not contain VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-flags-03568", + "text": "If flags contains VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT, flags must not contain VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-03569", + "text": "If image was created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT and usage containing VK_IMAGE_USAGE_SAMPLED_BIT, subresourceRange.layerCount must be less than or equal to VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::maxSubsampledArrayLayers", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-invocationMask-04993", + "text": "If the invocationMask feature is enabled, and if image was created with usage containing VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI, format must be VK_FORMAT_R8_UINT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-flags-04116", + "text": "If flags does not contain VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT and image was created with usage containing VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT, its flags must not contain any of VK_IMAGE_CREATE_PROTECTED_BIT, VK_IMAGE_CREATE_SPARSE_BINDING_BIT, VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or VK_IMAGE_CREATE_SPARSE_ALIASED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-02662", + "text": "If the pNext chain includes a VkImageViewUsageCreateInfo structure, and image was not created with a VkImageStencilUsageCreateInfo structure included in the pNext chain of VkImageCreateInfo, its usage member must not include any bits that were not set in the usage member of the VkImageCreateInfo structure used to create image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-02663", + "text": "If the pNext chain includes a VkImageViewUsageCreateInfo structure, image was created with a VkImageStencilUsageCreateInfo structure included in the pNext chain of VkImageCreateInfo, and subresourceRange.aspectMask includes VK_IMAGE_ASPECT_STENCIL_BIT, the usage member of the VkImageViewUsageCreateInfo structure must not include any bits that were not set in the usage member of the VkImageStencilUsageCreateInfo structure used to create image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-02664", + "text": "If the pNext chain includes a VkImageViewUsageCreateInfo structure, image was created with a VkImageStencilUsageCreateInfo structure included in the pNext chain of VkImageCreateInfo, and subresourceRange.aspectMask includes bits other than VK_IMAGE_ASPECT_STENCIL_BIT, the usage member of the VkImageViewUsageCreateInfo structure must not include any bits that were not set in the usage member of the VkImageCreateInfo structure used to create image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-imageViewType-04973", + "text": "If viewType is VK_IMAGE_VIEW_TYPE_1D, VK_IMAGE_VIEW_TYPE_2D, or VK_IMAGE_VIEW_TYPE_3D; and subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, then subresourceRange.layerCount must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-imageViewType-04974", + "text": "If viewType is VK_IMAGE_VIEW_TYPE_1D, VK_IMAGE_VIEW_TYPE_2D, or VK_IMAGE_VIEW_TYPE_3D; and subresourceRange.layerCount is VK_REMAINING_ARRAY_LAYERS, then the remaining number of layers must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-viewType-02960", + "text": "If viewType is VK_IMAGE_VIEW_TYPE_CUBE and subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, subresourceRange.layerCount must be 6", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-viewType-02961", + "text": "If viewType is VK_IMAGE_VIEW_TYPE_CUBE_ARRAY and subresourceRange.layerCount is not VK_REMAINING_ARRAY_LAYERS, subresourceRange.layerCount must be a multiple of 6", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-viewType-02962", + "text": "If viewType is VK_IMAGE_VIEW_TYPE_CUBE and subresourceRange.layerCount is VK_REMAINING_ARRAY_LAYERS, the remaining number of layers must be 6", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-viewType-02963", + "text": "If viewType is VK_IMAGE_VIEW_TYPE_CUBE_ARRAY and subresourceRange.layerCount is VK_REMAINING_ARRAY_LAYERS, the remaining number of layers must be a multiple of 6", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-imageViewFormatSwizzle-04465", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::imageViewFormatSwizzle is VK_FALSE, all elements of components must have the identity swizzle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-imageViewFormatReinterpretation-04466", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::imageViewFormatReinterpretation is VK_FALSE, the VkFormat in format must not contain a different number of components, or a different number of bits in each component, than the format of the VkImage in image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-04817", + "text": "If image was created with usage containing VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR, or VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, then the viewType must be VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-04818", + "text": "If image was created with usage containing VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR, VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, or VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, then the viewType must be VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-10261", + "text": "If image was created with usage containing VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR, then viewType must be VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-flags-08106", + "text": "If flags includes VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-08107", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flags must contain VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06787", + "text": "If the pNext chain includes a VkExportMetalObjectCreateInfoEXT structure, its exportObjectType member must be VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06944", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure, then textureSampleWeighted feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06945", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure, then image must have been created with usage containing VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06946", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure, then components must be VK_COMPONENT_SWIZZLE_IDENTITY for all components", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06947", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure, then subresourceRange.aspectMask must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06948", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure, then subresourceRange.levelCount must be 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06949", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure, then viewType must be VK_IMAGE_VIEW_TYPE_1D_ARRAY or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06950", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and if viewType is VK_IMAGE_VIEW_TYPE_1D_ARRAY, then image must have been created with imageType VK_IMAGE_TYPE_1D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06951", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and viewType is VK_IMAGE_VIEW_TYPE_1D_ARRAY, then subresourceRange.layerCount must be equal to 2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06952", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and viewType is VK_IMAGE_VIEW_TYPE_1D_ARRAY, then image must have been created with width equal to or greater than \\((numPhases \\times \\mathbin{max}\\left( \\mathbin{align}\\left(filterSize.width,4\\right), filterSize.height\\right))\\)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06953", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and if viewType is VK_IMAGE_VIEW_TYPE_2D_ARRAY, then image must have been created with imageType VK_IMAGE_TYPE_2D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06954", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and viewType is VK_IMAGE_VIEW_TYPE_2D_ARRAY, then subresourceRange.layerCount must be equal or greater than numPhases", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06955", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and viewType is VK_IMAGE_VIEW_TYPE_2D_ARRAY, then image must have been created with width equal to or greater than filterSize.width", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06956", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure and viewType is VK_IMAGE_VIEW_TYPE_2D_ARRAY, then image must have been created with height equal to or greater than filterSize.height", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-06957", + "text": "If the pNext chain includes VkImageViewSampleWeightCreateInfoQCOM structure then VkImageViewSampleWeightCreateInfoQCOM::filterSize.height must be less than or equal to VkPhysicalDeviceImageProcessingPropertiesQCOM::maxWeightFilterDimension.height", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-09594", + "text": "subresourceRange.aspectMask must be valid for the format the image was created with", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExportMetalObjectCreateInfoEXT, VkImageViewASTCDecodeModeEXT, VkImageViewMinLodCreateInfoEXT, VkImageViewSampleWeightCreateInfoQCOM, VkImageViewSlicedCreateInfoEXT, VkImageViewUsageCreateInfo, VkOpaqueCaptureDescriptorDataCreateInfoEXT, or VkSamplerYcbcrConversionInfo", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkExportMetalObjectCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkImageViewCreateFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-viewType-parameter", + "text": "viewType must be a valid VkImageViewType value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-components-parameter", + "text": "components must be a valid VkComponentMapping structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewCreateInfo-subresourceRange-parameter", + "text": "subresourceRange must be a valid VkImageSubresourceRange structure", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewUsageCreateInfo": { + "core": [ + { + "vuid": "VUID-VkImageViewUsageCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewUsageCreateInfo-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewUsageCreateInfo-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewSlicedCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-sliceOffset-07867", + "text": "sliceOffset must be less than the effective view depth as specified in Image Mip Level Sizing", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-sliceCount-07868", + "text": "If sliceCount is not VK_REMAINING_3D_SLICES_EXT, it must be non-zero and sliceOffset + sliceCount must be less than or equal to the effective view depth as specified in Image Mip Level Sizing", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-image-07869", + "text": "image must have been created with imageType equal to VK_IMAGE_TYPE_3D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-viewType-07909", + "text": "viewType must be VK_IMAGE_VIEW_TYPE_3D", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-None-07870", + "text": "The image view must reference exactly 1 mip level", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-None-07871", + "text": "The imageSlicedViewOf3D feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSlicedCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT", + "page": "chapters/resources.html" + } + ] + }, + "VkImageSubresourceRange": { + "core": [ + { + "vuid": "VUID-VkImageSubresourceRange-levelCount-01720", + "text": "If levelCount is not VK_REMAINING_MIP_LEVELS, it must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresourceRange-layerCount-01721", + "text": "If layerCount is not VK_REMAINING_ARRAY_LAYERS, it must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresourceRange-aspectMask-01670", + "text": "If aspectMask includes VK_IMAGE_ASPECT_COLOR_BIT, then it must not include any of VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT, or VK_IMAGE_ASPECT_PLANE_2_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresourceRange-aspectMask-02278", + "text": "aspectMask must not include VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT for any index i", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresourceRange-aspectMask-parameter", + "text": "aspectMask must be a valid combination of VkImageAspectFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageSubresourceRange-aspectMask-requiredbitmask", + "text": "aspectMask must not be 0", + "page": "chapters/resources.html" + } + ] + }, + "VkComponentMapping": { + "core": [ + { + "vuid": "VUID-VkComponentMapping-r-parameter", + "text": "r must be a valid VkComponentSwizzle value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkComponentMapping-g-parameter", + "text": "g must be a valid VkComponentSwizzle value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkComponentMapping-b-parameter", + "text": "b must be a valid VkComponentSwizzle value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkComponentMapping-a-parameter", + "text": "a must be a valid VkComponentSwizzle value", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewASTCDecodeModeEXT": { + "core": [ + { + "vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02230", + "text": "decodeMode must be one of VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R8G8B8A8_UNORM, or VK_FORMAT_E5B9G9R9_UFLOAT_PACK32", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02231", + "text": "If the decodeModeSharedExponent feature is not enabled, decodeMode must not be VK_FORMAT_E5B9G9R9_UFLOAT_PACK32", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02232", + "text": "If decodeMode is VK_FORMAT_R8G8B8A8_UNORM the image view must not include blocks using any of the ASTC HDR modes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewASTCDecodeModeEXT-format-04084", + "text": "format of the image view must be one of the ASTC Compressed Image Formats", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewASTCDecodeModeEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewASTCDecodeModeEXT-decodeMode-parameter", + "text": "decodeMode must be a valid VkFormat value", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewSampleWeightCreateInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-filterSize-06958", + "text": "filterSize.width must be less than or equal to VkPhysicalDeviceImageProcessingPropertiesQCOM::maxWeightFilterDimension.width", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-filterSize-06959", + "text": "filterSize.height must be less than or equal to VkPhysicalDeviceImageProcessingPropertiesQCOM::maxWeightFilterDimension.height", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-filterCenter-06960", + "text": "filterCenter.x must be less than or equal to (filterSize.width - 1)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-filterCenter-06961", + "text": "filterCenter.y must be less than or equal to (filterSize.height - 1)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-numPhases-06962", + "text": "numPhases must be a power of two squared value (i.e., 1, 4, 16, 64, 256, etc.)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-numPhases-06963", + "text": "numPhases must be less than or equal to VkPhysicalDeviceImageProcessingPropertiesQCOM::maxWeightFilterPhases", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewSampleWeightCreateInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyImageView": { + "core": [ + { + "vuid": "VUID-vkDestroyImageView-imageView-01026", + "text": "All submitted commands that refer to imageView must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImageView-imageView-01027", + "text": "If VkAllocationCallbacks were provided when imageView was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImageView-imageView-01028", + "text": "If no VkAllocationCallbacks were provided when imageView was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImageView-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImageView-imageView-parameter", + "text": "If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImageView-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyImageView-imageView-parent", + "text": "If imageView is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageViewHandleNVX": { + "core": [ + { + "vuid": "VUID-vkGetImageViewHandleNVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageViewHandleNVX-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkImageViewHandleInfoNVX structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageViewHandle64NVX": { + "core": [ + { + "vuid": "VUID-vkGetImageViewHandle64NVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageViewHandle64NVX-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkImageViewHandleInfoNVX structure", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewHandleInfoNVX": { + "core": [ + { + "vuid": "VUID-VkImageViewHandleInfoNVX-descriptorType-02654", + "text": "descriptorType must be VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-sampler-02655", + "text": "sampler must be a valid VkSampler if descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-imageView-02656", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the image that imageView was created from must have been created with the VK_IMAGE_USAGE_SAMPLED_BIT usage bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-imageView-02657", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the image that imageView was created from must have been created with the VK_IMAGE_USAGE_STORAGE_BIT usage bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-imageView-parameter", + "text": "imageView must be a valid VkImageView handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-descriptorType-parameter", + "text": "descriptorType must be a valid VkDescriptorType value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-sampler-parameter", + "text": "If sampler is not VK_NULL_HANDLE, sampler must be a valid VkSampler handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewHandleInfoNVX-commonparent", + "text": "Both of imageView, and sampler that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageViewAddressNVX": { + "core": [ + { + "vuid": "VUID-vkGetImageViewAddressNVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageViewAddressNVX-imageView-parameter", + "text": "imageView must be a valid VkImageView handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageViewAddressNVX-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkImageViewAddressPropertiesNVX structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageViewAddressNVX-imageView-parent", + "text": "imageView must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewAddressPropertiesNVX": { + "core": [ + { + "vuid": "VUID-VkImageViewAddressPropertiesNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewAddressPropertiesNVX-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "VkImageViewMinLodCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImageViewMinLodCreateInfoEXT-minLod-06455", + "text": "If the minLod feature is not enabled, minLod must be 0.0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewMinLodCreateInfoEXT-minLod-06456", + "text": "minLod must be less or equal to the index of the last mipmap level accessible to the view", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageViewMinLodCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-accelerationStructure-03611", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-deviceAddress-03488", + "text": "If VkAccelerationStructureCreateInfoKHR::deviceAddress is not zero, the accelerationStructureCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-device-03489", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkAccelerationStructureCreateInfoKHR structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-pAccelerationStructure-parameter", + "text": "pAccelerationStructure must be a valid pointer to a VkAccelerationStructureKHR handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureKHR-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03612", + "text": "If deviceAddress is not zero, createFlags must include VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-09488", + "text": "If deviceAddress is not zero, it must have been retrieved from an identically created acceleration structure, except for buffer and deviceAddress", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-09489", + "text": "If deviceAddress is not zero, buffer must have been created identically to the buffer used to create the acceleration structure from which deviceAddress was retrieved, except for VkBufferOpaqueCaptureAddressCreateInfo::opaqueCaptureAddress", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-09490", + "text": "If deviceAddress is not zero, buffer must have been created with a VkBufferOpaqueCaptureAddressCreateInfo::opaqueCaptureAddress that was retrieved from vkGetBufferOpaqueCaptureAddress for the buffer that was used to create the acceleration structure from which deviceAddress was retrieved", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-10393", + "text": "If deviceAddress is not zero, it must be a valid device address obtained from vkGetAccelerationStructureDeviceAddressKHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-createFlags-03613", + "text": "If createFlags includes VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR, VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureCaptureReplay must be VK_TRUE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-buffer-03614", + "text": "buffer must have been created with a usage value containing VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-buffer-03615", + "text": "buffer must not have been created with VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-offset-03616", + "text": "The sum of offset and size must be less than or equal to the size of buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-offset-03734", + "text": "offset must be a multiple of 256 bytes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-createFlags-04954", + "text": "If VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV is set in createFlags and type is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, one member of the pNext chain must be a pointer to a valid instance of VkAccelerationStructureMotionInfoNV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-createFlags-04955", + "text": "If any geometry includes VkAccelerationStructureGeometryMotionTrianglesDataNV then createFlags must contain VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-createFlags-08108", + "text": "If createFlags includes VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-pNext-08109", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, createFlags must contain VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAccelerationStructureMotionInfoNV or VkOpaqueCaptureDescriptorDataCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-createFlags-parameter", + "text": "createFlags must be a valid combination of VkAccelerationStructureCreateFlagBitsKHR values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoKHR-type-parameter", + "text": "type must be a valid VkAccelerationStructureTypeKHR value", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureMotionInfoNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureMotionInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMotionInfoNV-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/resources.html" + } + ] + }, + "vkGetAccelerationStructureBuildSizesKHR": { + "core": [ + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-accelerationStructure-08933", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-device-03618", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03619", + "text": "If pBuildInfo->geometryCount is not 0, pMaxPrimitiveCounts must be a valid pointer to an array of pBuildInfo->geometryCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-03785", + "text": "If pBuildInfo->pGeometries or pBuildInfo->ppGeometries has a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, each pMaxPrimitiveCounts[i] must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxInstanceCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-buildType-parameter", + "text": "buildType must be a valid VkAccelerationStructureBuildTypeKHR value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-pBuildInfo-parameter", + "text": "pBuildInfo must be a valid pointer to a valid VkAccelerationStructureBuildGeometryInfoKHR structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-pMaxPrimitiveCounts-parameter", + "text": "If pMaxPrimitiveCounts is not NULL, pMaxPrimitiveCounts must be a valid pointer to an array of pBuildInfo->geometryCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureBuildSizesKHR-pSizeInfo-parameter", + "text": "pSizeInfo must be a valid pointer to a VkAccelerationStructureBuildSizesInfoKHR structure", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureBuildSizesInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureBuildSizesInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildSizesInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateAccelerationStructureNV": { + "core": [ + { + "vuid": "VUID-vkCreateAccelerationStructureNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkAccelerationStructureCreateInfoNV structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureNV-pAccelerationStructure-parameter", + "text": "pAccelerationStructure must be a valid pointer to a VkAccelerationStructureNV handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateAccelerationStructureNV-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureCreateInfoNV-compactedSize-02421", + "text": "If compactedSize is not 0 then both info.geometryCount and info.instanceCount must be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkOpaqueCaptureDescriptorDataCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoNV-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCreateInfoNV-info-parameter", + "text": "info must be a valid VkAccelerationStructureInfoNV structure", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureInfoNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureInfoNV-geometryCount-02422", + "text": "geometryCount must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxGeometryCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-instanceCount-02423", + "text": "instanceCount must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxInstanceCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-maxTriangleCount-02424", + "text": "The total number of triangles in all geometries must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxTriangleCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-type-02425", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV then geometryCount must be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-type-02426", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV then instanceCount must be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-type-02786", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV then the geometryType member of each geometry in pGeometries must be the same", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-type-04623", + "text": "type must not be VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-flags-02592", + "text": "If flags has the VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV bit set, then it must not have the VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-scratch-02781", + "text": "scratch must have been created with VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-instanceData-02782", + "text": "If instanceData is not VK_NULL_HANDLE, instanceData must have been created with VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-type-parameter", + "text": "type must be a valid VkAccelerationStructureTypeNV value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-flags-parameter", + "text": "flags must be a valid combination of VkBuildAccelerationStructureFlagBitsNV values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureInfoNV-pGeometries-parameter", + "text": "If geometryCount is not 0, pGeometries must be a valid pointer to an array of geometryCount valid VkGeometryNV structures", + "page": "chapters/resources.html" + } + ] + }, + "VkGeometryNV": { + "core": [ + { + "vuid": "VUID-VkGeometryNV-geometryType-03503", + "text": "geometryType must be VK_GEOMETRY_TYPE_TRIANGLES_NV or VK_GEOMETRY_TYPE_AABBS_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GEOMETRY_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryNV-geometryType-parameter", + "text": "geometryType must be a valid VkGeometryTypeKHR value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryNV-geometry-parameter", + "text": "geometry must be a valid VkGeometryDataNV structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryNV-flags-parameter", + "text": "flags must be a valid combination of VkGeometryFlagBitsKHR values", + "page": "chapters/resources.html" + } + ] + }, + "VkGeometryDataNV": { + "core": [ + { + "vuid": "VUID-VkGeometryDataNV-triangles-parameter", + "text": "triangles must be a valid VkGeometryTrianglesNV structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryDataNV-aabbs-parameter", + "text": "aabbs must be a valid VkGeometryAABBNV structure", + "page": "chapters/resources.html" + } + ] + }, + "VkGeometryTrianglesNV": { + "core": [ + { + "vuid": "VUID-VkGeometryTrianglesNV-vertexOffset-02428", + "text": "vertexOffset must be less than the size of vertexData", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-vertexOffset-02429", + "text": "vertexOffset must be a multiple of the component size of vertexFormat", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-vertexFormat-02430", + "text": "vertexFormat must be one of VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16_SNORM, or VK_FORMAT_R16G16B16_SNORM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-vertexStride-03818", + "text": "vertexStride must be less than or equal to 232-1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexOffset-02431", + "text": "indexOffset must be less than the size of indexData", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexOffset-02432", + "text": "indexOffset must be a multiple of the element size of indexType", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexType-02433", + "text": "indexType must be VK_INDEX_TYPE_UINT16, VK_INDEX_TYPE_UINT32, or VK_INDEX_TYPE_NONE_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexData-02434", + "text": "indexData must be VK_NULL_HANDLE if indexType is VK_INDEX_TYPE_NONE_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexData-02435", + "text": "indexData must be a valid VkBuffer handle if indexType is not VK_INDEX_TYPE_NONE_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexCount-02436", + "text": "indexCount must be 0 if indexType is VK_INDEX_TYPE_NONE_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-transformOffset-02437", + "text": "transformOffset must be less than the size of transformData", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-transformOffset-02438", + "text": "transformOffset must be a multiple of 16", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-vertexData-parameter", + "text": "If vertexData is not VK_NULL_HANDLE, vertexData must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-vertexFormat-parameter", + "text": "vertexFormat must be a valid VkFormat value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexData-parameter", + "text": "If indexData is not VK_NULL_HANDLE, indexData must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-transformData-parameter", + "text": "If transformData is not VK_NULL_HANDLE, transformData must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryTrianglesNV-commonparent", + "text": "Each of indexData, transformData, and vertexData that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/resources.html" + } + ] + }, + "VkGeometryAABBNV": { + "core": [ + { + "vuid": "VUID-VkGeometryAABBNV-offset-02439", + "text": "offset must be less than the size of aabbData", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryAABBNV-offset-02440", + "text": "offset must be a multiple of 8", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryAABBNV-stride-02441", + "text": "stride must be a multiple of 8", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryAABBNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryAABBNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkGeometryAABBNV-aabbData-parameter", + "text": "If aabbData is not VK_NULL_HANDLE, aabbData must be a valid VkBuffer handle", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-08934", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02442", + "text": "All submitted commands that refer to accelerationStructure must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02443", + "text": "If VkAllocationCallbacks were provided when accelerationStructure was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02444", + "text": "If no VkAllocationCallbacks were provided when accelerationStructure was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parameter", + "text": "If accelerationStructure is not VK_NULL_HANDLE, accelerationStructure must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parent", + "text": "If accelerationStructure is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyAccelerationStructureNV": { + "core": [ + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03752", + "text": "All submitted commands that refer to accelerationStructure must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03753", + "text": "If VkAllocationCallbacks were provided when accelerationStructure was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-accelerationStructure-03754", + "text": "If no VkAllocationCallbacks were provided when accelerationStructure was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-accelerationStructure-parameter", + "text": "If accelerationStructure is not VK_NULL_HANDLE, accelerationStructure must be a valid VkAccelerationStructureNV handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyAccelerationStructureNV-accelerationStructure-parent", + "text": "If accelerationStructure is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetAccelerationStructureMemoryRequirementsNV": { + "core": [ + { + "vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkAccelerationStructureMemoryRequirementsInfoNV structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureMemoryRequirementsNV-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2KHR structure", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureMemoryRequirementsInfoNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-type-parameter", + "text": "type must be a valid VkAccelerationStructureMemoryRequirementsTypeNV value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMemoryRequirementsInfoNV-accelerationStructure-parameter", + "text": "accelerationStructure must be a valid VkAccelerationStructureNV handle", + "page": "chapters/resources.html" + } + ] + }, + "vkBindAccelerationStructureMemoryNV": { + "core": [ + { + "vuid": "VUID-vkBindAccelerationStructureMemoryNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindAccelerationStructureMemoryNV-pBindInfos-parameter", + "text": "pBindInfos must be a valid pointer to an array of bindInfoCount valid VkBindAccelerationStructureMemoryInfoNV structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindAccelerationStructureMemoryNV-bindInfoCount-arraylength", + "text": "bindInfoCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkBindAccelerationStructureMemoryInfoNV": { + "core": [ + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-accelerationStructure-03620", + "text": "accelerationStructure must not already be backed by a memory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-03621", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-memory-03622", + "text": "memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetAccelerationStructureMemoryRequirementsNV with accelerationStructure and type of VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-03623", + "text": "memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetAccelerationStructureMemoryRequirementsNV with accelerationStructure and type of VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-size-03624", + "text": "The size member of the VkMemoryRequirements structure returned from a call to vkGetAccelerationStructureMemoryRequirementsNV with accelerationStructure and type of VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-accelerationStructure-parameter", + "text": "accelerationStructure must be a valid VkAccelerationStructureNV handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-pDeviceIndices-parameter", + "text": "If deviceIndexCount is not 0, pDeviceIndices must be a valid pointer to an array of deviceIndexCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindAccelerationStructureMemoryInfoNV-commonparent", + "text": "Both of accelerationStructure, and memory must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/resources.html" + } + ] + }, + "vkGetAccelerationStructureHandleNV": { + "core": [ + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-dataSize-02240", + "text": "dataSize must be large enough to contain the result of the query, as described above", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-02787", + "text": "accelerationStructure must be bound completely and contiguously to a single VkDeviceMemory object via vkBindAccelerationStructureMemoryNV", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-parameter", + "text": "accelerationStructure must be a valid VkAccelerationStructureNV handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-parent", + "text": "accelerationStructure must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetAccelerationStructureDeviceAddressKHR": { + "core": [ + { + "vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-accelerationStructure-08935", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-device-03504", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-pInfo-09541", + "text": "If the buffer on which pInfo->accelerationStructure was placed is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-pInfo-09542", + "text": "The buffer on which pInfo->accelerationStructure was placed must have been created with the VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT usage flag", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureDeviceAddressKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkAccelerationStructureDeviceAddressInfoKHR structure", + "page": "chapters/resources.html" + } + ] + }, + "VkAccelerationStructureDeviceAddressInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureDeviceAddressInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureDeviceAddressInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkAccelerationStructureDeviceAddressInfoKHR-accelerationStructure-parameter", + "text": "accelerationStructure must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateMicromapEXT": { + "core": [ + { + "vuid": "VUID-vkCreateMicromapEXT-micromap-07430", + "text": "The micromap feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-deviceAddress-07431", + "text": "If VkMicromapCreateInfoEXT::deviceAddress is not zero, the micromapCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-device-07432", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkMicromapCreateInfoEXT structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-pMicromap-parameter", + "text": "pMicromap must be a valid pointer to a VkMicromapEXT handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateMicromapEXT-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkMicromapCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMicromapCreateInfoEXT-deviceAddress-07433", + "text": "If deviceAddress is not zero, createFlags must include VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-createFlags-07434", + "text": "If createFlags includes VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT, VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapCaptureReplay must be VK_TRUE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-buffer-07435", + "text": "buffer must have been created with a usage value containing VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-buffer-07436", + "text": "buffer must not have been created with VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-offset-07437", + "text": "The sum of offset and size must be less than or equal to the size of buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-offset-07438", + "text": "offset must be a multiple of 256 bytes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MICROMAP_CREATE_INFO_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-createFlags-parameter", + "text": "createFlags must be a valid combination of VkMicromapCreateFlagBitsEXT values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapCreateInfoEXT-type-parameter", + "text": "type must be a valid VkMicromapTypeEXT value", + "page": "chapters/resources.html" + } + ] + }, + "vkGetMicromapBuildSizesEXT": { + "core": [ + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-dstMicromap-09180", + "text": "VkMicromapBuildInfoEXT::dstMicromap must have been created from device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-micromap-07439", + "text": "The micromap feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-device-07440", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-buildType-parameter", + "text": "buildType must be a valid VkAccelerationStructureBuildTypeKHR value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-pBuildInfo-parameter", + "text": "pBuildInfo must be a valid pointer to a valid VkMicromapBuildInfoEXT structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetMicromapBuildSizesEXT-pSizeInfo-parameter", + "text": "pSizeInfo must be a valid pointer to a VkMicromapBuildSizesInfoEXT structure", + "page": "chapters/resources.html" + } + ] + }, + "VkMicromapBuildSizesInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMicromapBuildSizesInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MICROMAP_BUILD_SIZES_INFO_EXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMicromapBuildSizesInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyMicromapEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyMicromapEXT-micromap-10382", + "text": "The micromap feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-micromap-07441", + "text": "All submitted commands that refer to micromap must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-micromap-07442", + "text": "If VkAllocationCallbacks were provided when micromap was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-micromap-07443", + "text": "If no VkAllocationCallbacks were provided when micromap was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-micromap-parameter", + "text": "If micromap is not VK_NULL_HANDLE, micromap must be a valid VkMicromapEXT handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyMicromapEXT-micromap-parent", + "text": "If micromap is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetBufferMemoryRequirements": { + "core": [ + { + "vuid": "VUID-vkGetBufferMemoryRequirements-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferMemoryRequirements-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferMemoryRequirements-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferMemoryRequirements-buffer-parent", + "text": "buffer must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageMemoryRequirements": { + "core": [ + { + "vuid": "VUID-vkGetImageMemoryRequirements-image-01588", + "text": "image must not have been created with the VK_IMAGE_CREATE_DISJOINT_BIT flag set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements-image-04004", + "text": "If image was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then image must be bound to memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements-image-08960", + "text": "If image was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX external memory handle type, then image must be bound to memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements-image-parent", + "text": "image must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkGetTensorMemoryRequirementsARM": { + "core": [ + { + "vuid": "VUID-vkGetTensorMemoryRequirementsARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetTensorMemoryRequirementsARM-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkTensorMemoryRequirementsInfoARM structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetTensorMemoryRequirementsARM-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/resources.html" + } + ] + }, + "VkTensorMemoryRequirementsInfoARM": { + "core": [ + { + "vuid": "VUID-VkTensorMemoryRequirementsInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorMemoryRequirementsInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorMemoryRequirementsInfoARM-tensor-parameter", + "text": "tensor must be a valid VkTensorARM handle", + "page": "chapters/resources.html" + } + ] + }, + "vkGetDeviceTensorMemoryRequirementsARM": { + "core": [ + { + "vuid": "VUID-vkGetDeviceTensorMemoryRequirementsARM-tensors-09831", + "text": "The tensors feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceTensorMemoryRequirementsARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceTensorMemoryRequirementsARM-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDeviceTensorMemoryRequirementsARM structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceTensorMemoryRequirementsARM-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/resources.html" + } + ] + }, + "VkDeviceTensorMemoryRequirementsARM": { + "core": [ + { + "vuid": "VUID-VkDeviceTensorMemoryRequirementsARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceTensorMemoryRequirementsARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceTensorMemoryRequirementsARM-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkTensorCreateInfoARM structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetBufferMemoryRequirements2": { + "core": [ + { + "vuid": "VUID-vkGetBufferMemoryRequirements2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferMemoryRequirements2-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkBufferMemoryRequirementsInfo2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferMemoryRequirements2-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetDeviceBufferMemoryRequirements": { + "core": [ + { + "vuid": "VUID-vkGetDeviceBufferMemoryRequirements-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceBufferMemoryRequirements-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDeviceBufferMemoryRequirements structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceBufferMemoryRequirements-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferMemoryRequirementsInfo2": { + "core": [ + { + "vuid": "VUID-VkBufferMemoryRequirementsInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferMemoryRequirementsInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferMemoryRequirementsInfo2-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + } + ] + }, + "VkDeviceBufferMemoryRequirements": { + "core": [ + { + "vuid": "VUID-VkDeviceBufferMemoryRequirements-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceBufferMemoryRequirements-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceBufferMemoryRequirements-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkBufferCreateInfo structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetImageMemoryRequirements2": { + "core": [ + { + "vuid": "VUID-vkGetImageMemoryRequirements2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements2-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkImageMemoryRequirementsInfo2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetImageMemoryRequirements2-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetDeviceImageMemoryRequirements": { + "core": [ + { + "vuid": "VUID-vkGetDeviceImageMemoryRequirements-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceImageMemoryRequirements-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDeviceImageMemoryRequirements structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetDeviceImageMemoryRequirements-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/resources.html" + } + ] + }, + "VkImageMemoryRequirementsInfo2": { + "core": [ + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01589", + "text": "If image was created with a multi-planar format and the VK_IMAGE_CREATE_DISJOINT_BIT flag, there must be a VkImagePlaneMemoryRequirementsInfo included in the pNext chain of the VkImageMemoryRequirementsInfo2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-02279", + "text": "If image was created with VK_IMAGE_CREATE_DISJOINT_BIT and with VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then there must be a VkImagePlaneMemoryRequirementsInfo included in the pNext chain of the VkImageMemoryRequirementsInfo2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01590", + "text": "If image was not created with the VK_IMAGE_CREATE_DISJOINT_BIT flag, there must not be a VkImagePlaneMemoryRequirementsInfo included in the pNext chain of the VkImageMemoryRequirementsInfo2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-02280", + "text": "If image was created with a single-plane format and with any tiling other than VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then there must not be a VkImagePlaneMemoryRequirementsInfo included in the pNext chain of the VkImageMemoryRequirementsInfo2 structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-01897", + "text": "If image was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID external memory handle type, then image must be bound to memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-08961", + "text": "If image was created with the VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX external memory handle type, then image must be bound to memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkImagePlaneMemoryRequirementsInfo", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageMemoryRequirementsInfo2-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + } + ] + }, + "VkDeviceImageMemoryRequirements": { + "core": [ + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06416", + "text": "The pCreateInfo->pNext chain must not contain a VkImageSwapchainCreateInfoKHR structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06776", + "text": "The pCreateInfo->pNext chain must not contain a VkImageDrmFormatModifierExplicitCreateInfoEXT structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pNext-06996", + "text": "Applications also must not call vkGetDeviceImageMemoryRequirements with a VkImageCreateInfo whose pNext chain includes a VkExternalFormatANDROID structure with non-zero externalFormat", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pNext-08962", + "text": "Applications also must not call vkGetDeviceImageMemoryRequirements with a VkImageCreateInfo whose pNext chain includes a VkExternalFormatQNX structure with non-zero externalFormat", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06417", + "text": "If pCreateInfo->format specifies a multi-planar format and pCreateInfo->flags has VK_IMAGE_CREATE_DISJOINT_BIT set then planeAspect must not be VK_IMAGE_ASPECT_NONE_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06419", + "text": "If pCreateInfo->flags has VK_IMAGE_CREATE_DISJOINT_BIT set and if the pCreateInfo->tiling is VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_OPTIMAL, then planeAspect must be a single valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pCreateInfo-06420", + "text": "If pCreateInfo->tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then planeAspect must be a single valid memory plane for the image (that is, aspectMask must specify a plane index that is less than the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with the image’s format and VkImageDrmFormatModifierPropertiesEXT::drmFormatModifier)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkImageCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkDeviceImageMemoryRequirements-planeAspect-parameter", + "text": "If planeAspect is not 0, planeAspect must be a valid VkImageAspectFlagBits value", + "page": "chapters/resources.html" + } + ] + }, + "VkImagePlaneMemoryRequirementsInfo": { + "core": [ + { + "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02281", + "text": "If the image’s tiling is VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_OPTIMAL, then planeAspect must be a single valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02282", + "text": "If the image’s tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then planeAspect must be a single valid memory plane for the image (that is, aspectMask must specify a plane index that is less than the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with the image’s format and VkImageDrmFormatModifierPropertiesEXT::drmFormatModifier)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-parameter", + "text": "planeAspect must be a valid VkImageAspectFlagBits value", + "page": "chapters/resources.html" + } + ] + }, + "VkTileMemoryRequirementsQCOM": { + "core": [ + { + "vuid": "VUID-VkTileMemoryRequirementsQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM", + "page": "chapters/resources.html" + } + ] + }, + "VkMemoryRequirements2": { + "core": [ + { + "vuid": "VUID-VkMemoryRequirements2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMemoryRequirements2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkMemoryDedicatedRequirements or VkTileMemoryRequirementsQCOM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkMemoryRequirements2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + } + ] + }, + "VkMemoryDedicatedRequirements": { + "core": [ + { + "vuid": "VUID-VkMemoryDedicatedRequirements-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS", + "page": "chapters/resources.html" + } + ] + }, + "vkBindBufferMemory": { + "core": [ + { + "vuid": "VUID-vkBindBufferMemory-buffer-07459", + "text": "buffer must not have been bound to a memory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-01030", + "text": "buffer must not have been created with any sparse memory binding flags", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memoryOffset-01031", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-01035", + "text": "memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-None-10739", + "text": "If memory was not allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-10740", + "text": "If memory was allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, memoryOffset must be an integer multiple of the alignment member of the VkTileMemoryRequirementsQCOM structure returned from a call to vkGetBufferMemoryRequirements with buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-None-10741", + "text": "If memory was not allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, size member of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with buffer must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-10742", + "text": "If memory was allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, size member of the VkTileMemoryRequirementsQCOM structure returned from a call to vkGetBufferMemoryRequirements with buffer must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-01444", + "text": "If buffer requires a dedicated allocation (as reported by vkGetBufferMemoryRequirements2 in VkMemoryDedicatedRequirements::requiresDedicatedAllocation for buffer), memory must have been allocated with VkMemoryDedicatedAllocateInfo::buffer equal to buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-01508", + "text": "If the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfo structure in its pNext chain, and VkMemoryDedicatedAllocateInfo::buffer was not VK_NULL_HANDLE, then buffer must equal VkMemoryDedicatedAllocateInfo::buffer, and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-None-01898", + "text": "If buffer was created with the VK_BUFFER_CREATE_PROTECTED_BIT bit set, the buffer must be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-None-01899", + "text": "If buffer was created with the VK_BUFFER_CREATE_PROTECTED_BIT bit not set, the buffer must not be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-01038", + "text": "If buffer was created with VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must have been allocated with VkDedicatedAllocationMemoryAllocateInfoNV::buffer equal to a buffer handle created with identical creation parameters to buffer and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-apiVersion-07920", + "text": "If the VK_KHR_dedicated_allocation extension is not enabled, VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and buffer was not created with VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must not have been allocated dedicated for a specific buffer or image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-02726", + "text": "If the value of VkExportMemoryAllocateInfo::handleTypes used to allocate memory is not 0, it must include at least one of the handles set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-02985", + "text": "If memory was allocated by a memory import operation, that is not VkImportAndroidHardwareBufferInfoANDROID with a non-NULL buffer value, the external handle type of the imported memory must also have been set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-02986", + "text": "If memory was allocated with the VkImportAndroidHardwareBufferInfoANDROID memory import operation with a non-NULL buffer value, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must also have been set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-bufferDeviceAddress-03339", + "text": "If the VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress feature is enabled and buffer was created with the VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-bufferDeviceAddressCaptureReplay-09200", + "text": "If the VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddressCaptureReplay feature is enabled and buffer was created with the VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-06408", + "text": "If buffer was created with VkBufferCollectionBufferCreateInfoFUCHSIA chained to VkBufferCreateInfo::pNext, memory must be allocated with a VkImportMemoryBufferCollectionFUCHSIA chained to VkMemoryAllocateInfo::pNext", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-descriptorBufferCaptureReplay-08112", + "text": "If the buffer was created with the VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-09201", + "text": "If the buffer was created with the VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-buffer-parent", + "text": "buffer must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkBindBufferMemory2": { + "core": [ + { + "vuid": "VUID-vkBindBufferMemory2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory2-pBindInfos-parameter", + "text": "pBindInfos must be a valid pointer to an array of bindInfoCount valid VkBindBufferMemoryInfo structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindBufferMemory2-bindInfoCount-arraylength", + "text": "bindInfoCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkBindBufferMemoryInfo": { + "core": [ + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-07459", + "text": "buffer must not have been bound to a memory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01030", + "text": "buffer must not have been created with any sparse memory binding flags", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memoryOffset-01031", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-01035", + "text": "memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-None-10739", + "text": "If memory was not allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-10740", + "text": "If memory was allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, memoryOffset must be an integer multiple of the alignment member of the VkTileMemoryRequirementsQCOM structure returned from a call to vkGetBufferMemoryRequirements with buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-None-10741", + "text": "If memory was not allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, size member of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with buffer must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-10742", + "text": "If memory was allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, size member of the VkTileMemoryRequirementsQCOM structure returned from a call to vkGetBufferMemoryRequirements with buffer must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01444", + "text": "If buffer requires a dedicated allocation (as reported by vkGetBufferMemoryRequirements2 in VkMemoryDedicatedRequirements::requiresDedicatedAllocation for buffer), memory must have been allocated with VkMemoryDedicatedAllocateInfo::buffer equal to buffer", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-01508", + "text": "If the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfo structure in its pNext chain, and VkMemoryDedicatedAllocateInfo::buffer was not VK_NULL_HANDLE, then buffer must equal VkMemoryDedicatedAllocateInfo::buffer, and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-None-01898", + "text": "If buffer was created with the VK_BUFFER_CREATE_PROTECTED_BIT bit set, the buffer must be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-None-01899", + "text": "If buffer was created with the VK_BUFFER_CREATE_PROTECTED_BIT bit not set, the buffer must not be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-01038", + "text": "If buffer was created with VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must have been allocated with VkDedicatedAllocationMemoryAllocateInfoNV::buffer equal to a buffer handle created with identical creation parameters to buffer and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-apiVersion-07920", + "text": "If the VK_KHR_dedicated_allocation extension is not enabled, VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and buffer was not created with VkDedicatedAllocationBufferCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must not have been allocated dedicated for a specific buffer or image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-02726", + "text": "If the value of VkExportMemoryAllocateInfo::handleTypes used to allocate memory is not 0, it must include at least one of the handles set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-02985", + "text": "If memory was allocated by a memory import operation, that is not VkImportAndroidHardwareBufferInfoANDROID with a non-NULL buffer value, the external handle type of the imported memory must also have been set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-02986", + "text": "If memory was allocated with the VkImportAndroidHardwareBufferInfoANDROID memory import operation with a non-NULL buffer value, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must also have been set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-bufferDeviceAddress-03339", + "text": "If the VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress feature is enabled and buffer was created with the VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-bufferDeviceAddressCaptureReplay-09200", + "text": "If the VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddressCaptureReplay feature is enabled and buffer was created with the VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-06408", + "text": "If buffer was created with VkBufferCollectionBufferCreateInfoFUCHSIA chained to VkBufferCreateInfo::pNext, memory must be allocated with a VkImportMemoryBufferCollectionFUCHSIA chained to VkMemoryAllocateInfo::pNext", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-descriptorBufferCaptureReplay-08112", + "text": "If the buffer was created with the VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-09201", + "text": "If the buffer was created with the VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-pNext-01605", + "text": "If the pNext chain includes a VkBindBufferMemoryDeviceGroupInfo structure, all instances of memory specified by VkBindBufferMemoryDeviceGroupInfo::pDeviceIndices must have been allocated", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkBindBufferMemoryDeviceGroupInfo or VkBindMemoryStatus", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryInfo-commonparent", + "text": "Both of buffer, and memory must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/resources.html" + } + ] + }, + "VkBindBufferMemoryDeviceGroupInfo": { + "core": [ + { + "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-deviceIndexCount-01606", + "text": "deviceIndexCount must either be zero or equal to the number of physical devices in the logical device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-01607", + "text": "All elements of pDeviceIndices must be valid device indices", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-parameter", + "text": "If deviceIndexCount is not 0, pDeviceIndices must be a valid pointer to an array of deviceIndexCount uint32_t values", + "page": "chapters/resources.html" + } + ] + }, + "VkBindMemoryStatus": { + "core": [ + { + "vuid": "VUID-VkBindMemoryStatus-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindMemoryStatus-pResult-parameter", + "text": "pResult must be a valid pointer to a VkResult value", + "page": "chapters/resources.html" + } + ] + }, + "vkBindImageMemory": { + "core": [ + { + "vuid": "VUID-vkBindImageMemory-image-07460", + "text": "image must not have been bound to a memory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-01045", + "text": "image must not have been created with any sparse memory binding flags", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memoryOffset-01046", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-01445", + "text": "If image requires a dedicated allocation (as reported by vkGetImageMemoryRequirements2 in VkMemoryDedicatedRequirements::requiresDedicatedAllocation for image), memory must have been created with VkMemoryDedicatedAllocateInfo::image equal to image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-02628", + "text": "If the dedicatedAllocationImageAliasing feature is not enabled, and the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfo structure in its pNext chain, and VkMemoryDedicatedAllocateInfo::image was not VK_NULL_HANDLE, then image must equal VkMemoryDedicatedAllocateInfo::image and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-02629", + "text": "If the dedicatedAllocationImageAliasing feature is enabled, and the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfo structure in its pNext chain, and VkMemoryDedicatedAllocateInfo::image was not VK_NULL_HANDLE, then memoryOffset must be zero, and image must be either equal to VkMemoryDedicatedAllocateInfo::image or an image that was created using the same parameters in VkImageCreateInfo, with the exception that extent and arrayLayers may differ subject to the following restrictions: every dimension in the extent parameter of the image being bound must be equal to or smaller than the original image for which the allocation was created; and the arrayLayers parameter of the image being bound must be equal to or smaller than the original image for which the allocation was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-None-01901", + "text": "If image was created with the VK_IMAGE_CREATE_PROTECTED_BIT bit set, the image must be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-None-01902", + "text": "If image was created with the VK_IMAGE_CREATE_PROTECTED_BIT bit not set, the image must not be bound to a memory object created with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-01050", + "text": "If image was created with VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must have been created with VkDedicatedAllocationMemoryAllocateInfoNV::image equal to an image handle created with identical creation parameters to image and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-apiVersion-07921", + "text": "If the VK_KHR_dedicated_allocation extension is not enabled, VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and image was not created with VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must not have been allocated dedicated for a specific buffer or image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-02728", + "text": "If the value of VkExportMemoryAllocateInfo::handleTypes used to allocate memory is not 0, it must include at least one of the handles set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-02989", + "text": "If memory was created by a memory import operation, that is not VkImportAndroidHardwareBufferInfoANDROID with a non-NULL buffer value, the external handle type of the imported memory must also have been set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-02990", + "text": "If memory was created with the VkImportAndroidHardwareBufferInfoANDROID memory import operation with a non-NULL buffer value, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must also have been set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-descriptorBufferCaptureReplay-08113", + "text": "If the image was created with the VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-09202", + "text": "If the image was created with the VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-01608", + "text": "image must not have been created with the VK_IMAGE_CREATE_DISJOINT_BIT set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-01047", + "text": "memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements with image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-None-10735", + "text": "If memory was not allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements with image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-10736", + "text": "If memory was allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, memoryOffset must be an integer multiple of the alignment member of the VkTileMemoryRequirementsQCOM structure returned from a call to vkGetImageMemoryRequirements with image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-None-10737", + "text": "If memory was not allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, size member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements with image must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-10738", + "text": "If memory was allocated from a memory heap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property set, size member of the VkTileMemoryRequirementsQCOM structure returned from a call to vkGetImageMemoryRequirements with image must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-06392", + "text": "If image was created with VkBufferCollectionImageCreateInfoFUCHSIA chained to VkImageCreateInfo::pNext, memory must be allocated with a VkImportMemoryBufferCollectionFUCHSIA chained to VkMemoryAllocateInfo::pNext", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-image-parent", + "text": "image must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory-memory-parent", + "text": "memory must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkBindImageMemory2": { + "core": [ + { + "vuid": "VUID-vkBindImageMemory2-pBindInfos-02858", + "text": "If any VkBindImageMemoryInfo::image was created with VK_IMAGE_CREATE_DISJOINT_BIT then all planes of VkBindImageMemoryInfo::image must be bound individually in separate pBindInfos", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory2-pBindInfos-04006", + "text": "pBindInfos must not refer to the same image subresource more than once", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory2-pBindInfos-parameter", + "text": "pBindInfos must be a valid pointer to an array of bindInfoCount valid VkBindImageMemoryInfo structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindImageMemory2-bindInfoCount-arraylength", + "text": "bindInfoCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkBindImageMemoryInfo": { + "core": [ + { + "vuid": "VUID-VkBindImageMemoryInfo-image-07460", + "text": "image must not have been bound to a memory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-01045", + "text": "image must not have been created with any sparse memory binding flags", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-memoryOffset-01046", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-01445", + "text": "If image requires a dedicated allocation (as reported by vkGetImageMemoryRequirements2 in VkMemoryDedicatedRequirements::requiresDedicatedAllocation for image), memory must have been created with VkMemoryDedicatedAllocateInfo::image equal to image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-memory-02628", + "text": "If the dedicatedAllocationImageAliasing feature is not enabled, and the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfo structure in its pNext chain, and VkMemoryDedicatedAllocateInfo::image was not VK_NULL_HANDLE, then image must equal VkMemoryDedicatedAllocateInfo::image and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-memory-02629", + "text": "If the dedicatedAllocationImageAliasing feature is enabled, and the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfo structure in its pNext chain, and VkMemoryDedicatedAllocateInfo::image was not VK_NULL_HANDLE, then memoryOffset must be zero, and image must be either equal to VkMemoryDedicatedAllocateInfo::image or an image that was created using the same parameters in VkImageCreateInfo, with the exception that extent and arrayLayers may differ subject to the following restrictions: every dimension in the extent parameter of the image being bound must be equal to or smaller than the original image for which the allocation was created; and the arrayLayers parameter of the image being bound must be equal to or smaller than the original image for which the allocation was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-None-01901", + "text": "If image was created with the VK_IMAGE_CREATE_PROTECTED_BIT bit set, the image must be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-None-01902", + "text": "If image was created with the VK_IMAGE_CREATE_PROTECTED_BIT bit not set, the image must not be bound to a memory object created with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-01050", + "text": "If image was created with VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must have been created with VkDedicatedAllocationMemoryAllocateInfoNV::image equal to an image handle created with identical creation parameters to image and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-apiVersion-07921", + "text": "If the VK_KHR_dedicated_allocation extension is not enabled, VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and image was not created with VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation equal to VK_TRUE, memory must not have been allocated dedicated for a specific buffer or image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-memory-02728", + "text": "If the value of VkExportMemoryAllocateInfo::handleTypes used to allocate memory is not 0, it must include at least one of the handles set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-memory-02989", + "text": "If memory was created by a memory import operation, that is not VkImportAndroidHardwareBufferInfoANDROID with a non-NULL buffer value, the external handle type of the imported memory must also have been set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-memory-02990", + "text": "If memory was created with the VkImportAndroidHardwareBufferInfoANDROID memory import operation with a non-NULL buffer value, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must also have been set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-descriptorBufferCaptureReplay-08113", + "text": "If the image was created with the VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-09202", + "text": "If the image was created with the VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT bit set, memory must have been allocated with the VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01615", + "text": "If the pNext chain does not include a VkBindImagePlaneMemoryInfo structure, memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01616", + "text": "If the pNext chain does not include a VkBindImagePlaneMemoryInfo structure, memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01617", + "text": "If the pNext chain does not include a VkBindImagePlaneMemoryInfo structure, the difference of the size of memory and memoryOffset must be greater than or equal to the size member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with the same image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01618", + "text": "If the pNext chain includes a VkBindImagePlaneMemoryInfo structure, image must have been created with the VK_IMAGE_CREATE_DISJOINT_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-07736", + "text": "If image was created with the VK_IMAGE_CREATE_DISJOINT_BIT bit set, then the pNext chain must include a VkBindImagePlaneMemoryInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01619", + "text": "If the pNext chain includes a VkBindImagePlaneMemoryInfo structure, memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with image and where VkBindImagePlaneMemoryInfo::planeAspect corresponds to the VkImagePlaneMemoryRequirementsInfo::planeAspect in the VkImageMemoryRequirementsInfo2 structure’s pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01620", + "text": "If the pNext chain includes a VkBindImagePlaneMemoryInfo structure, memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with image and where VkBindImagePlaneMemoryInfo::planeAspect corresponds to the VkImagePlaneMemoryRequirementsInfo::planeAspect in the VkImageMemoryRequirementsInfo2 structure’s pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01621", + "text": "If the pNext chain includes a VkBindImagePlaneMemoryInfo structure, the difference of the size of memory and memoryOffset must be greater than or equal to the size member of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements2 with the same image and where VkBindImagePlaneMemoryInfo::planeAspect corresponds to the VkImagePlaneMemoryRequirementsInfo::planeAspect in the VkImageMemoryRequirementsInfo2 structure’s pNext chain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01626", + "text": "If the pNext chain includes a VkBindImageMemoryDeviceGroupInfo structure, all instances of memory specified by VkBindImageMemoryDeviceGroupInfo::pDeviceIndices must have been allocated", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01627", + "text": "If the pNext chain includes a VkBindImageMemoryDeviceGroupInfo structure, and VkBindImageMemoryDeviceGroupInfo::splitInstanceBindRegionCount is not zero, then image must have been created with the VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT bit set", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01628", + "text": "If the pNext chain includes a VkBindImageMemoryDeviceGroupInfo structure, all elements of VkBindImageMemoryDeviceGroupInfo::pSplitInstanceBindRegions must be valid rectangles contained within the dimensions of image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01629", + "text": "If the pNext chain includes a VkBindImageMemoryDeviceGroupInfo structure, the union of the areas of all elements of VkBindImageMemoryDeviceGroupInfo::pSplitInstanceBindRegions that correspond to the same instance of image must cover the entire image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-01630", + "text": "If image was created with a valid swapchain handle in VkImageSwapchainCreateInfoKHR::swapchain, then the pNext chain must include a VkBindImageMemorySwapchainInfoKHR structure containing the same swapchain handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01631", + "text": "If the pNext chain includes a VkBindImageMemorySwapchainInfoKHR structure, memory must be VK_NULL_HANDLE", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-01632", + "text": "If the pNext chain does not include a VkBindImageMemorySwapchainInfoKHR structure, memory must be a valid VkDeviceMemory handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkBindImageMemoryDeviceGroupInfo, VkBindImageMemorySwapchainInfoKHR, VkBindImagePlaneMemoryInfo, or VkBindMemoryStatus", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryInfo-commonparent", + "text": "Both of image, and memory that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/resources.html" + } + ] + }, + "VkBindImageMemoryDeviceGroupInfo": { + "core": [ + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633", + "text": "At least one of deviceIndexCount and splitInstanceBindRegionCount must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01634", + "text": "deviceIndexCount must either be zero or equal to the number of physical devices in the logical device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-01635", + "text": "All elements of pDeviceIndices must be valid device indices", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-01636", + "text": "splitInstanceBindRegionCount must either be zero or equal to the number of physical devices in the logical device squared", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-01637", + "text": "Elements of pSplitInstanceBindRegions that correspond to the same instance of an image must not overlap", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-offset-01638", + "text": "The offset.x member of any element of pSplitInstanceBindRegions must be a multiple of the sparse image block width (VkSparseImageFormatProperties::imageGranularity.width) of all non-metadata aspects of the image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-offset-01639", + "text": "The offset.y member of any element of pSplitInstanceBindRegions must be a multiple of the sparse image block height (VkSparseImageFormatProperties::imageGranularity.height) of all non-metadata aspects of the image", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-extent-01640", + "text": "The extent.width member of any element of pSplitInstanceBindRegions must either be a multiple of the sparse image block width of all non-metadata aspects of the image, or else extent.width + offset.x must equal the width of the image subresource", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-extent-01641", + "text": "The extent.height member of any element of pSplitInstanceBindRegions must either be a multiple of the sparse image block height of all non-metadata aspects of the image, or else extent.height + offset.y must equal the height of the image subresource", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-parameter", + "text": "If deviceIndexCount is not 0, pDeviceIndices must be a valid pointer to an array of deviceIndexCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-parameter", + "text": "If splitInstanceBindRegionCount is not 0, pSplitInstanceBindRegions must be a valid pointer to an array of splitInstanceBindRegionCount VkRect2D structures", + "page": "chapters/resources.html" + } + ] + }, + "VkBindImageMemorySwapchainInfoKHR": { + "core": [ + { + "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644", + "text": "imageIndex must be less than the number of images in swapchain", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-07756", + "text": "If the swapchain has been created with VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR, imageIndex must be one that has previously been returned by vkAcquireNextImageKHR or vkAcquireNextImage2KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/resources.html" + } + ] + }, + "VkBindImagePlaneMemoryInfo": { + "core": [ + { + "vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-02283", + "text": "If the image’s tiling is VK_IMAGE_TILING_LINEAR or VK_IMAGE_TILING_OPTIMAL, then planeAspect must be a single valid multi-planar aspect mask bit", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-02284", + "text": "If the image’s tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, then planeAspect must be a single valid memory plane for the image (that is, aspectMask must specify a plane index that is less than the VkDrmFormatModifierPropertiesEXT::drmFormatModifierPlaneCount associated with the image’s format and VkImageDrmFormatModifierPropertiesEXT::drmFormatModifier)", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImagePlaneMemoryInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindImagePlaneMemoryInfo-planeAspect-parameter", + "text": "planeAspect must be a valid VkImageAspectFlagBits value", + "page": "chapters/resources.html" + } + ] + }, + "vkBindTensorMemoryARM": { + "core": [ + { + "vuid": "VUID-vkBindTensorMemoryARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindTensorMemoryARM-pBindInfos-parameter", + "text": "pBindInfos must be a valid pointer to an array of bindInfoCount valid VkBindTensorMemoryInfoARM structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkBindTensorMemoryARM-bindInfoCount-arraylength", + "text": "bindInfoCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkBindTensorMemoryInfoARM": { + "core": [ + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-tensor-09712", + "text": "tensor must not already be backed by a memory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memoryOffset-09713", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memory-09714", + "text": "memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetTensorMemoryRequirementsARM with tensor", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memoryOffset-09715", + "text": "memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetTensorMemoryRequirementsARM with tensor", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-size-09716", + "text": "The size member of the VkMemoryRequirements structure returned from a call to vkGetTensorMemoryRequirementsARM with tensor must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-tensor-09717", + "text": "If tensor requires a dedicated allocation (as reported by vkGetTensorMemoryRequirementsARM in VkMemoryDedicatedRequirements::requiresDedicatedAllocation for tensor), memory must have been created with VkMemoryDedicatedAllocateInfoTensorARM::tensor equal to tensor", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memory-09806", + "text": "If the VkMemoryAllocateInfo provided when memory was allocated included a VkMemoryDedicatedAllocateInfoTensorARM structure in its pNext chain, and VkMemoryDedicatedAllocateInfoTensorARM::tensor was not VK_NULL_HANDLE, then tensor must equal VkMemoryDedicatedAllocateInfoTensorARM::tensor, and memoryOffset must be zero", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memory-09895", + "text": "If the value of VkExportMemoryAllocateInfo::handleTypes used to allocate memory is not 0, it must include at least one of the handles set in VkExternalMemoryTensorCreateInfoARM::handleTypes when tensor was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memory-09896", + "text": "If memory was allocated by a memory import operation, that is not VkImportAndroidHardwareBufferInfoANDROID with a non-NULL buffer value, the external handle type of the imported memory must also have been set in VkExternalMemoryTensorCreateInfoARM::handleTypes when tensor was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memory-09897", + "text": "If memory was allocated with the VkImportAndroidHardwareBufferInfoANDROID memory import operation with a non-NULL buffer value, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID must also have been set in VkExternalMemoryTensorCreateInfoARM::handleTypes when tensor was created", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-tensor-09718", + "text": "If tensor was created with the VK_TENSOR_CREATE_PROTECTED_BIT_ARM bit set, the tensor must be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-tensor-09719", + "text": "If tensor was created with the VK_TENSOR_CREATE_PROTECTED_BIT_ARM bit not set, the tensor must not be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-tensor-parameter", + "text": "tensor must be a valid VkTensorARM handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBindTensorMemoryInfoARM-commonparent", + "text": "Both of memory, and tensor must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateBufferCollectionFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkCreateBufferCollectionFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferCollectionFUCHSIA-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkBufferCollectionCreateInfoFUCHSIA structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferCollectionFUCHSIA-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferCollectionFUCHSIA-pCollection-parameter", + "text": "pCollection must be a valid pointer to a VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateBufferCollectionFUCHSIA-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferCollectionCreateInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkBufferCollectionCreateInfoFUCHSIA-collectionToken-06393", + "text": "collectionToken must be a valid zx_handle_t to a Zircon channel allocated from Sysmem (fuchsia.sysmem.Allocator/AllocateSharedCollection) with ZX_DEFAULT_CHANNEL_RIGHTS rights", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionCreateInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionCreateInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "vkSetBufferCollectionImageConstraintsFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-collection-06394", + "text": "vkSetBufferCollectionImageConstraintsFUCHSIA or vkSetBufferCollectionBufferConstraintsFUCHSIA must not have already been called on collection", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-pImageConstraintsInfo-parameter", + "text": "pImageConstraintsInfo must be a valid pointer to a valid VkImageConstraintsInfoFUCHSIA structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-collection-parent", + "text": "collection must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkImageConstraintsInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06395", + "text": "All elements of pFormatConstraints must have at least one bit set in its VkImageFormatConstraintsInfoFUCHSIA::requiredFormatFeatures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06396", + "text": "If pFormatConstraints->imageCreateInfo->usage contains VK_IMAGE_USAGE_SAMPLED_BIT, then pFormatConstraints->requiredFormatFeatures must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06397", + "text": "If pFormatConstraints->imageCreateInfo->usage contains VK_IMAGE_USAGE_STORAGE_BIT, then pFormatConstraints->requiredFormatFeatures must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06398", + "text": "If pFormatConstraints->imageCreateInfo->usage contains VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, then pFormatConstraints->requiredFormatFeatures must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06399", + "text": "If pFormatConstraints->imageCreateInfo->usage contains VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, then pFormatConstraints->requiredFormatFeatures must contain VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-06400", + "text": "If pFormatConstraints->imageCreateInfo->usage contains VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, then pFormatConstraints->requiredFormatFeatures must contain at least one of VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-attachmentFragmentShadingRate-06401", + "text": "If the attachmentFragmentShadingRate feature is enabled, and pFormatConstraints->imageCreateInfo->usage contains VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, then pFormatConstraints->requiredFormatFeatures must contain VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-pFormatConstraints-parameter", + "text": "pFormatConstraints must be a valid pointer to an array of formatConstraintsCount valid VkImageFormatConstraintsInfoFUCHSIA structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-bufferCollectionConstraints-parameter", + "text": "bufferCollectionConstraints must be a valid VkBufferCollectionConstraintsInfoFUCHSIA structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-flags-parameter", + "text": "flags must be a valid combination of VkImageConstraintsInfoFlagBitsFUCHSIA values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageConstraintsInfoFUCHSIA-formatConstraintsCount-arraylength", + "text": "formatConstraintsCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkImageFormatConstraintsInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-imageCreateInfo-parameter", + "text": "imageCreateInfo must be a valid VkImageCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-requiredFormatFeatures-parameter", + "text": "requiredFormatFeatures must be a valid combination of VkFormatFeatureFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-requiredFormatFeatures-requiredbitmask", + "text": "requiredFormatFeatures must not be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-pColorSpaces-parameter", + "text": "pColorSpaces must be a valid pointer to an array of colorSpaceCount valid VkSysmemColorSpaceFUCHSIA structures", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImageFormatConstraintsInfoFUCHSIA-colorSpaceCount-arraylength", + "text": "colorSpaceCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferCollectionConstraintsInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkBufferCollectionConstraintsInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionConstraintsInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "VkSysmemColorSpaceFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkSysmemColorSpaceFUCHSIA-colorSpace-06402", + "text": "colorSpace must be a ColorSpaceType as defined in fuchsia.sysmem/image_formats.fidl", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkSysmemColorSpaceFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkSysmemColorSpaceFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "vkSetBufferCollectionBufferConstraintsFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-collection-06403", + "text": "vkSetBufferCollectionImageConstraintsFUCHSIA or vkSetBufferCollectionBufferConstraintsFUCHSIA must not have already been called on collection", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-pBufferConstraintsInfo-parameter", + "text": "pBufferConstraintsInfo must be a valid pointer to a valid VkBufferConstraintsInfoFUCHSIA structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-collection-parent", + "text": "collection must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferConstraintsInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkBufferConstraintsInfoFUCHSIA-requiredFormatFeatures-06404", + "text": "The requiredFormatFeatures bitmask of VkFormatFeatureFlagBits must be chosen from among the buffer compatible format features listed in buffer compatible format features", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferConstraintsInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferConstraintsInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferConstraintsInfoFUCHSIA-createInfo-parameter", + "text": "createInfo must be a valid VkBufferCreateInfo structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferConstraintsInfoFUCHSIA-requiredFormatFeatures-parameter", + "text": "requiredFormatFeatures must be a valid combination of VkFormatFeatureFlagBits values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferConstraintsInfoFUCHSIA-bufferCollectionConstraints-parameter", + "text": "bufferCollectionConstraints must be a valid VkBufferCollectionConstraintsInfoFUCHSIA structure", + "page": "chapters/resources.html" + } + ] + }, + "vkGetBufferCollectionPropertiesFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkGetBufferCollectionPropertiesFUCHSIA-None-06405", + "text": "Prior to calling vkGetBufferCollectionPropertiesFUCHSIA, the constraints on the buffer collection must have been set by either vkSetBufferCollectionImageConstraintsFUCHSIA or vkSetBufferCollectionBufferConstraintsFUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferCollectionPropertiesFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferCollectionPropertiesFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferCollectionPropertiesFUCHSIA-pProperties-parameter", + "text": "pProperties must be a valid pointer to a VkBufferCollectionPropertiesFUCHSIA structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkGetBufferCollectionPropertiesFUCHSIA-collection-parent", + "text": "collection must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkBufferCollectionPropertiesFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkBufferCollectionPropertiesFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkBufferCollectionPropertiesFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/resources.html" + } + ] + }, + "VkImportMemoryBufferCollectionFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkImportMemoryBufferCollectionFUCHSIA-index-06406", + "text": "index must be less than the value retrieved as VkBufferCollectionPropertiesFUCHSIA:bufferCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImportMemoryBufferCollectionFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkImportMemoryBufferCollectionFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyBufferCollectionFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkDestroyBufferCollectionFUCHSIA-collection-06407", + "text": "VkImage and VkBuffer objects that referenced collection upon creation by inclusion of a VkBufferCollectionImageCreateInfoFUCHSIA or VkBufferCollectionBufferCreateInfoFUCHSIA chained to their VkImageCreateInfo or VkBufferCreateInfo structures respectively, may outlive collection", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferCollectionFUCHSIA-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferCollectionFUCHSIA-collection-parameter", + "text": "collection must be a valid VkBufferCollectionFUCHSIA handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferCollectionFUCHSIA-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyBufferCollectionFUCHSIA-collection-parent", + "text": "collection must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateTensorARM": { + "core": [ + { + "vuid": "VUID-vkCreateTensorARM-tensors-09832", + "text": "The tensors feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorARM-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkTensorCreateInfoARM structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorARM-pTensor-parameter", + "text": "pTensor must be a valid pointer to a VkTensorARM handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorARM-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkTensorCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkTensorCreateInfoARM-pDescription-09720", + "text": "If pDescription::tiling is VK_TENSOR_TILING_OPTIMAL_ARM, pDescription::pStrides must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-tensorElements-09721", + "text": "tensorElements (as defined in Tensor Creation Limits) must not be greater than VkPhysicalDeviceTensorPropertiesARM::maxTensorElements", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-sharingMode-09722", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a valid pointer to an array of queueFamilyIndexCount uint32_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-sharingMode-09723", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-sharingMode-09725", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, each element of pQueueFamilyIndices must be unique and must be less than pQueueFamilyPropertyCount returned by either vkGetPhysicalDeviceQueueFamilyProperties or vkGetPhysicalDeviceQueueFamilyProperties2 for the physicalDevice that was used to create device", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-pNext-09864", + "text": "If the pNext chain includes a VkExternalMemoryTensorCreateInfoARM structure, its handleTypes member must only contain bits that are also in VkExternalTensorPropertiesARM::externalMemoryProperties.compatibleHandleTypes, as returned by vkGetPhysicalDeviceExternalTensorPropertiesARM with pExternalTensorInfo->handleType equal to any one of the handle types specified in VkExternalMemoryTensorCreateInfoARM::handleTypes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-flags-09726", + "text": "If flags includes VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-pNext-09727", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flags must contain VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-pDescription-09728", + "text": "If pDescription::usage does not have any of the following bits set (i.e. if it is not possible to create a tensor view for this tensor), then the format features must contain the format feature flags required by the usage flags pDescription::format as indicated in the Format Feature Dependent Usage Flags section
\n
    \n
  • \n

    VK_TENSOR_USAGE_SHADER_BIT_ARM

    \n
  • \n
  • \n

    VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM

    \n
  • \n
\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-protectedMemory-09729", + "text": "If the protectedMemory feature is not enabled, flags must not contain VK_TENSOR_CREATE_PROTECTED_BIT_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExternalMemoryTensorCreateInfoARM or VkOpaqueCaptureDescriptorDataCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-flags-parameter", + "text": "flags must be a valid combination of VkTensorCreateFlagBitsARM values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-pDescription-parameter", + "text": "pDescription must be a valid pointer to a valid VkTensorDescriptionARM structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorCreateInfoARM-sharingMode-parameter", + "text": "sharingMode must be a valid VkSharingMode value", + "page": "chapters/resources.html" + } + ] + }, + "VkExternalMemoryTensorCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkExternalMemoryTensorCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkExternalMemoryTensorCreateInfoARM-handleTypes-parameter", + "text": "handleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBits values", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyTensorARM": { + "core": [ + { + "vuid": "VUID-vkDestroyTensorARM-tensor-09730", + "text": "All submitted commands that refer to tensor, either directly or via a VkTensorViewARM, must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorARM-tensor-09731", + "text": "If VkAllocationCallbacks were provided when tensor was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorARM-tensor-09732", + "text": "If no VkAllocationCallbacks were provided when tensor was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorARM-tensor-parameter", + "text": "If tensor is not VK_NULL_HANDLE, tensor must be a valid VkTensorARM handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorARM-tensor-parent", + "text": "If tensor is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "VkTensorDescriptionARM": { + "core": [ + { + "vuid": "VUID-VkTensorDescriptionARM-dimensionCount-09733", + "text": "dimensionCount must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxTensorDimensionCount", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pDimensions-09734", + "text": "For each i where i ≤ dimensionCount-1, pDimensions[i] must be greater than 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pDimensions-09883", + "text": "For each i where i ≤ dimensionCount-1, pDimensions[i] must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxPerDimensionTensorElements", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-format-09735", + "text": "format must not be VK_FORMAT_UNDEFINED and must be a one-component VkFormat", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pStrides-09736", + "text": "pStrides[dimensionCount-1] must equal the size in bytes of a tensor element", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pStrides-09737", + "text": "For each i, pStrides[i] must be a multiple of the element size", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pStrides-09738", + "text": "For each i, pStrides[i] must be greater than 0 and less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxTensorStride", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pStrides-09884", + "text": "pStrides[0] × pDimensions[0] must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxTensorSize", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pStrides-09739", + "text": "For each i greater than 0, pStrides[i-1] must be greater than or equal to pStrides[i] × pDimensions[i] so that no two elements of the tensor reference the same memory address", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-None-09740", + "text": "If the tensorNonPacked feature is not enabled, then the members of VkTensorDescriptionARM must describe a packed tensor", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-tiling-09741", + "text": "If tiling is VK_TENSOR_TILING_OPTIMAL_ARM and usage is VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM then the size of the tensor along its innermost dimension, i.e. pDimensions[dimensionCount - 1], must be less than or equal to 4", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-tiling-09742", + "text": "If tiling is VK_TENSOR_TILING_LINEAR_ARM then VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM must not be set in usage", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-tiling-parameter", + "text": "tiling must be a valid VkTensorTilingARM value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pDimensions-parameter", + "text": "pDimensions must be a valid pointer to an array of dimensionCount int64_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-pStrides-parameter", + "text": "If pStrides is not NULL, pStrides must be a valid pointer to an array of dimensionCount int64_t values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-usage-parameter", + "text": "usage must be a valid combination of VkTensorUsageFlagBitsARM values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorDescriptionARM-dimensionCount-arraylength", + "text": "dimensionCount must be greater than 0", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateTensorViewARM": { + "core": [ + { + "vuid": "VUID-vkCreateTensorViewARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorViewARM-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkTensorViewCreateInfoARM structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorViewARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorViewARM-pView-parameter", + "text": "pView must be a valid pointer to a VkTensorViewARM handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkCreateTensorViewARM-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/resources.html" + } + ] + }, + "VkTensorViewCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkTensorViewCreateInfoARM-tensor-09743", + "text": "If tensor was not created with VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM flag, format must be identical to the format used to create tensor", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-tensor-09744", + "text": "If tensor was created with VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM flag, format must be compatible with the format used to create tensor, as defined in Format Compatibility Classes", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-flags-09745", + "text": "If flags includes VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-pNext-09746", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flags must contain VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-usage-09747", + "text": "The usage flags of tensor must have at least one of the following bits set:
\n
    \n
  • \n

    VK_TENSOR_USAGE_SHADER_BIT_ARM

    \n
  • \n
  • \n

    VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM

    \n
  • \n
\n
", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-usage-09748", + "text": "The tensor view’s format features must contain the format feature flags required by the usage flags of tensor for format as indicated in the Format Feature Dependent Usage Flags section", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-tensor-09749", + "text": "If tensor is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkOpaqueCaptureDescriptorDataCreateInfoEXT", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-flags-parameter", + "text": "flags must be a valid combination of VkTensorViewCreateFlagBitsARM values", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-tensor-parameter", + "text": "tensor must be a valid VkTensorARM handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-VkTensorViewCreateInfoARM-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/resources.html" + } + ] + }, + "vkDestroyTensorViewARM": { + "core": [ + { + "vuid": "VUID-vkDestroyTensorViewARM-tensorView-09750", + "text": "All submitted commands that refer to tensorView must have completed execution", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorViewARM-tensorView-09751", + "text": "If VkAllocationCallbacks were provided when tensorView was created, a compatible set of callbacks must be provided here", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorViewARM-tensorView-09752", + "text": "If no VkAllocationCallbacks were provided when tensorView was created, pAllocator must be NULL", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorViewARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorViewARM-tensorView-parameter", + "text": "If tensorView is not VK_NULL_HANDLE, tensorView must be a valid VkTensorViewARM handle", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorViewARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/resources.html" + }, + { + "vuid": "VUID-vkDestroyTensorViewARM-tensorView-parent", + "text": "If tensorView is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/resources.html" + } + ] + }, + "vkCreateSampler": { + "core": [ + { + "vuid": "VUID-vkCreateSampler-device-09668", + "text": "device must support at least one queue family with one of the VK_QUEUE_COMPUTE_BIT or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSampler-maxSamplerAllocationCount-04110", + "text": "There must be less than VkPhysicalDeviceLimits::maxSamplerAllocationCount VkSampler objects currently created on the device", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSampler-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSampler-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkSamplerCreateInfo structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSampler-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSampler-pSampler-parameter", + "text": "pSampler must be a valid pointer to a VkSampler handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSampler-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerCreateInfo": { + "core": [ + { + "vuid": "VUID-VkSamplerCreateInfo-mipLodBias-01069", + "text": "The absolute value of mipLodBias must be less than or equal to VkPhysicalDeviceLimits::maxSamplerLodBias", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-samplerMipLodBias-04467", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::samplerMipLodBias is VK_FALSE, mipLodBias must be zero", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-maxLod-01973", + "text": "maxLod must be greater than or equal to minLod", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-anisotropyEnable-01070", + "text": "If the samplerAnisotropy feature is not enabled, anisotropyEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-anisotropyEnable-01071", + "text": "If anisotropyEnable is VK_TRUE, maxAnisotropy must be between 1.0 and VkPhysicalDeviceLimits::maxSamplerAnisotropy, inclusive", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-minFilter-01645", + "text": "If sampler Y′CBCR conversion is enabled and the potential format features of the sampler Y′CBCR conversion do not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, minFilter and magFilter must be equal to the sampler Y′CBCR conversion’s chromaFilter", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072", + "text": "If unnormalizedCoordinates is VK_TRUE, minFilter and magFilter must be equal", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073", + "text": "If unnormalizedCoordinates is VK_TRUE, mipmapMode must be VK_SAMPLER_MIPMAP_MODE_NEAREST", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074", + "text": "If unnormalizedCoordinates is VK_TRUE, minLod and maxLod must be zero", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075", + "text": "If unnormalizedCoordinates is VK_TRUE, addressModeU and addressModeV must each be either VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076", + "text": "If unnormalizedCoordinates is VK_TRUE, anisotropyEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077", + "text": "If unnormalizedCoordinates is VK_TRUE, compareEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01078", + "text": "If any of addressModeU, addressModeV or addressModeW are VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, borderColor must be a valid VkBorderColor value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01646", + "text": "If sampler Y′CBCR conversion is enabled, addressModeU, addressModeV, and addressModeW must be VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, anisotropyEnable must be VK_FALSE, and unnormalizedCoordinates must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-None-01647", + "text": "If sampler Y′CBCR conversion is enabled and the pNext chain includes a VkSamplerReductionModeCreateInfo structure, then the sampler reduction mode must be VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-pNext-06726", + "text": "If the samplerFilterMinmax feature is not enabled and the pNext chain includes a VkSamplerReductionModeCreateInfo structure, then the sampler reduction mode must be VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-addressModeU-01079", + "text": "If the samplerMirrorClampToEdge feature is not enabled, and if the VK_KHR_sampler_mirror_clamp_to_edge extension is not enabled, addressModeU, addressModeV and addressModeW must not be VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-compareEnable-01080", + "text": "If compareEnable is VK_TRUE, compareOp must be a valid VkCompareOp value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-magFilter-01081", + "text": "If either magFilter or minFilter is VK_FILTER_CUBIC_EXT, anisotropyEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-magFilter-07911", + "text": "If the VK_EXT_filter_cubic extension is not enabled and either magFilter or minFilter is VK_FILTER_CUBIC_IMG, the reductionMode member of VkSamplerReductionModeCreateInfo must be VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-compareEnable-01423", + "text": "If compareEnable is VK_TRUE, the reductionMode member of VkSamplerReductionModeCreateInfo must be VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02574", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then minFilter and magFilter must be equal", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02575", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then mipmapMode must be VK_SAMPLER_MIPMAP_MODE_NEAREST", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02576", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then minLod and maxLod must be zero", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02577", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then addressModeU and addressModeV must each be either VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02578", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then anisotropyEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02579", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then compareEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-02580", + "text": "If flags includes VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT, then unnormalizedCoordinates must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-nonSeamlessCubeMap-06788", + "text": "If the nonSeamlessCubeMap feature is not enabled, flags must not include VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-borderColor-04011", + "text": "If borderColor is one of VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or VK_BORDER_COLOR_INT_CUSTOM_EXT, then a VkSamplerCustomBorderColorCreateInfoEXT must be included in the pNext chain", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-customBorderColors-04085", + "text": "If the customBorderColors feature is not enabled, borderColor must not be VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or VK_BORDER_COLOR_INT_CUSTOM_EXT", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-borderColor-04442", + "text": "If borderColor is one of VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or VK_BORDER_COLOR_INT_CUSTOM_EXT, and VkSamplerCustomBorderColorCreateInfoEXT::format is not VK_FORMAT_UNDEFINED, VkSamplerCustomBorderColorCreateInfoEXT::customBorderColor must be within the range of values representable in format", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-None-04012", + "text": "The maximum number of samplers with custom border colors which can be simultaneously created on a device is implementation-dependent and specified by the maxCustomBorderColorSamplers member of the VkPhysicalDeviceCustomBorderColorPropertiesEXT structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-08110", + "text": "If flags includes VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT, the descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-pNext-08111", + "text": "If the pNext chain includes a VkOpaqueCaptureDescriptorDataCreateInfoEXT structure, flags must contain VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06964", + "text": "If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then minFilter and magFilter must be VK_FILTER_NEAREST", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06965", + "text": "If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then mipmapMode must be VK_SAMPLER_MIPMAP_MODE_NEAREST", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06966", + "text": "[If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then minLod and maxLod must be zero", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06967", + "text": "If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then addressModeU and addressModeV must each be either VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06968", + "text": "If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, and if addressModeU or addressModeV is VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, then borderColor must be VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06969", + "text": "If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then anisotropyEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-06970", + "text": "If flags includes VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM, then compareEnable must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkOpaqueCaptureDescriptorDataCreateInfoEXT, VkSamplerBlockMatchWindowCreateInfoQCOM, VkSamplerBorderColorComponentMappingCreateInfoEXT, VkSamplerCubicWeightsCreateInfoQCOM, VkSamplerCustomBorderColorCreateInfoEXT, VkSamplerReductionModeCreateInfo, or VkSamplerYcbcrConversionInfo", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkSamplerCreateFlagBits values", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-magFilter-parameter", + "text": "magFilter must be a valid VkFilter value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-minFilter-parameter", + "text": "minFilter must be a valid VkFilter value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-mipmapMode-parameter", + "text": "mipmapMode must be a valid VkSamplerMipmapMode value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-addressModeU-parameter", + "text": "addressModeU must be a valid VkSamplerAddressMode value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-addressModeV-parameter", + "text": "addressModeV must be a valid VkSamplerAddressMode value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCreateInfo-addressModeW-parameter", + "text": "addressModeW must be a valid VkSamplerAddressMode value", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerReductionModeCreateInfo": { + "core": [ + { + "vuid": "VUID-VkSamplerReductionModeCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerReductionModeCreateInfo-reductionMode-parameter", + "text": "reductionMode must be a valid VkSamplerReductionMode value", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerCubicWeightsCreateInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkSamplerCubicWeightsCreateInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCubicWeightsCreateInfoQCOM-cubicWeights-parameter", + "text": "cubicWeights must be a valid VkCubicFilterWeightsQCOM value", + "page": "chapters/samplers.html" + } + ] + }, + "vkDestroySampler": { + "core": [ + { + "vuid": "VUID-vkDestroySampler-sampler-01082", + "text": "All submitted commands that refer to sampler must have completed execution", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySampler-sampler-01083", + "text": "If VkAllocationCallbacks were provided when sampler was created, a compatible set of callbacks must be provided here", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySampler-sampler-01084", + "text": "If no VkAllocationCallbacks were provided when sampler was created, pAllocator must be NULL", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySampler-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySampler-sampler-parameter", + "text": "If sampler is not VK_NULL_HANDLE, sampler must be a valid VkSampler handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySampler-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySampler-sampler-parent", + "text": "If sampler is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerYcbcrConversionInfo": { + "core": [ + { + "vuid": "VUID-VkSamplerYcbcrConversionInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionInfo-conversion-parameter", + "text": "conversion must be a valid VkSamplerYcbcrConversion handle", + "page": "chapters/samplers.html" + } + ] + }, + "vkCreateSamplerYcbcrConversion": { + "core": [ + { + "vuid": "VUID-vkCreateSamplerYcbcrConversion-None-01648", + "text": "The samplerYcbcrConversion feature must be enabled", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSamplerYcbcrConversion-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSamplerYcbcrConversion-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkSamplerYcbcrConversionCreateInfo structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSamplerYcbcrConversion-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSamplerYcbcrConversion-pYcbcrConversion-parameter", + "text": "pYcbcrConversion must be a valid pointer to a VkSamplerYcbcrConversion handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkCreateSamplerYcbcrConversion-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerYcbcrConversionCreateInfo": { + "core": [ + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01904", + "text": "If an external format conversion is being created, format must be VK_FORMAT_UNDEFINED", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-04061", + "text": "If an external format conversion is not being created, format must represent unsigned normalized values (i.e. the format must be a UNORM format)", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-01650", + "text": "The potential format features of the sampler Y′CBCR conversion must support VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT or VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01651", + "text": "If the potential format features of the sampler Y′CBCR conversion do not support VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, xChromaOffset and yChromaOffset must not be VK_CHROMA_LOCATION_COSITED_EVEN if the corresponding components are downsampled", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01652", + "text": "If the potential format features of the sampler Y′CBCR conversion do not support VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, xChromaOffset and yChromaOffset must not be VK_CHROMA_LOCATION_MIDPOINT if the corresponding components are downsampled", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02581", + "text": "If the format has a _422 or _420 suffix, then components.g must be the identity swizzle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02582", + "text": "If the format has a _422 or _420 suffix, then components.a must be the identity swizzle, VK_COMPONENT_SWIZZLE_ONE, or VK_COMPONENT_SWIZZLE_ZERO", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02583", + "text": "If the format has a _422 or _420 suffix, then components.r must be the identity swizzle or VK_COMPONENT_SWIZZLE_B", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02584", + "text": "If the format has a _422 or _420 suffix, then components.b must be the identity swizzle or VK_COMPONENT_SWIZZLE_R", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-02585", + "text": "If the format has a _422 or _420 suffix, and if either components.r or components.b is the identity swizzle, both values must be the identity swizzle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-01655", + "text": "If ycbcrModel is not VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, then components.r, components.g, and components.b must correspond to components of the format; that is, components.r, components.g, and components.b must not be VK_COMPONENT_SWIZZLE_ZERO or VK_COMPONENT_SWIZZLE_ONE, and must not correspond to a component containing zero or one as a consequence of conversion to RGBA", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-02748", + "text": "If ycbcrRange is VK_SAMPLER_YCBCR_RANGE_ITU_NARROW then the R, G and B components obtained by applying the component swizzle to format must each have a bit-depth greater than or equal to 8", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656", + "text": "If the potential format features of the sampler Y′CBCR conversion do not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT forceExplicitReconstruction must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657", + "text": "If the potential format features of the sampler Y′CBCR conversion do not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, chromaFilter must not be VK_FILTER_LINEAR", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-pNext-09207", + "text": "If the pNext chain includes a VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure, and if the ycbcrDegamma feature is not enabled, then VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM::enableYDegamma must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-pNext-09208", + "text": "If the pNext chain includes a VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure, and if the ycbcrDegamma feature is not enabled, then VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM::enableCbCrDegamma must be VK_FALSE", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-pNext-09209", + "text": "If the pNext chain includes a VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM structure, format must be a format with 8-bit R, G, and B components", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkExternalFormatANDROID, VkExternalFormatQNX, or VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-parameter", + "text": "ycbcrModel must be a valid VkSamplerYcbcrModelConversion value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-parameter", + "text": "ycbcrRange must be a valid VkSamplerYcbcrRange value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-components-parameter", + "text": "components must be a valid VkComponentMapping structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-parameter", + "text": "xChromaOffset must be a valid VkChromaLocation value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-yChromaOffset-parameter", + "text": "yChromaOffset must be a valid VkChromaLocation value", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-parameter", + "text": "chromaFilter must be a valid VkFilter value", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM", + "page": "chapters/samplers.html" + } + ] + }, + "vkDestroySamplerYcbcrConversion": { + "core": [ + { + "vuid": "VUID-vkDestroySamplerYcbcrConversion-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parameter", + "text": "If ycbcrConversion is not VK_NULL_HANDLE, ycbcrConversion must be a valid VkSamplerYcbcrConversion handle", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySamplerYcbcrConversion-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parent", + "text": "If ycbcrConversion is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerCustomBorderColorCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-07605", + "text": "If format is not VK_FORMAT_UNDEFINED and format is not a depth/stencil format then the VkSamplerCreateInfo::borderColor type must match the sampled type of the provided format, as shown in the SPIR-V Type column of the Interpretation of Numeric Format table", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04014", + "text": "If the customBorderColorWithoutFormat feature is not enabled then format must not be VK_FORMAT_UNDEFINED", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04015", + "text": "If the sampler is used to sample an image view of VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_A1B5G5R5_UNORM_PACK16, or VK_FORMAT_B5G5R5A1_UNORM_PACK16 format then format must not be VK_FORMAT_UNDEFINED", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerBorderColorComponentMappingCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSamplerBorderColorComponentMappingCreateInfoEXT-borderColorSwizzle-06437", + "text": "The borderColorSwizzle feature must be enabled", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerBorderColorComponentMappingCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerBorderColorComponentMappingCreateInfoEXT-components-parameter", + "text": "components must be a valid VkComponentMapping structure", + "page": "chapters/samplers.html" + } + ] + }, + "VkSamplerBlockMatchWindowCreateInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkSamplerBlockMatchWindowCreateInfoQCOM-WindowExtent-09210", + "text": "WindowExtent must not be larger than VkPhysicalDeviceImageProcessing2PropertiesQCOM::maxBlockMatchWindow", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerBlockMatchWindowCreateInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM", + "page": "chapters/samplers.html" + }, + { + "vuid": "VUID-VkSamplerBlockMatchWindowCreateInfoQCOM-windowCompareMode-parameter", + "text": "windowCompareMode must be a valid VkBlockMatchWindowCompareModeQCOM value", + "page": "chapters/samplers.html" + } + ] + }, + "vkCreateDescriptorSetLayout": { + "core": [ + { + "vuid": "VUID-vkCreateDescriptorSetLayout-support-09582", + "text": "If the descriptor layout exceeds the limits reported through the physical device limits, then vkGetDescriptorSetLayoutSupport must have returned VkDescriptorSetLayoutSupport with support equal to VK_TRUE for pCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorSetLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorSetLayout-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDescriptorSetLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorSetLayout-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorSetLayout-pSetLayout-parameter", + "text": "pSetLayout must be a valid pointer to a VkDescriptorSetLayout handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetLayoutCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-binding-00279", + "text": "If the perStageDescriptorSet feature is not enabled, or flags does not contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV, then the VkDescriptorSetLayoutBinding::binding members of the elements of the pBindings array must each have different values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-10354", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, and the VK_KHR_push_descriptor extension is not enabled, pushDescriptor must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-00280", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, then all elements of pBindings must not have a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-02208", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, then all elements of pBindings must not have a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-00281", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, then the total number of elements of all bindings must be less than or equal to VkPhysicalDevicePushDescriptorProperties::maxPushDescriptors", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-04590", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, flags must not contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-04591", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, pBindings must not have a descriptorType of VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-03000", + "text": "If any binding has the VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit set, flags must include VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001", + "text": "If any binding has the VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT bit set, then all bindings must not have descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-04592", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, flags must not contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pBindings-07303", + "text": "If any element pBindings[i] has a descriptorType of VK_DESCRIPTOR_TYPE_MUTABLE_EXT, then the pNext chain must include a VkMutableDescriptorTypeCreateInfoEXT structure, and mutableDescriptorTypeListCount must be greater than i", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-04594", + "text": "If a binding has a descriptorType value of VK_DESCRIPTOR_TYPE_MUTABLE_EXT, then pImmutableSamplers must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-mutableDescriptorType-04595", + "text": "If VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType is not enabled, pBindings must not contain a descriptorType of VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-04596", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-08000", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, then all elements of pBindings must not have a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-08001", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT, flags must also contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-08002", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, then flags must not contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-08003", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, then flags must not contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-09463", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV, then perStageDescriptorSet must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-09464", + "text": "If flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV, then there must not be any two elements of the pBindings array with the same VkDescriptorSetLayoutBinding::binding value and their VkDescriptorSetLayoutBinding::stageFlags containing the same bit", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDescriptorSetLayoutBindingFlagsCreateInfo or VkMutableDescriptorTypeCreateInfoEXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkDescriptorSetLayoutCreateFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutCreateInfo-pBindings-parameter", + "text": "If bindingCount is not 0, pBindings must be a valid pointer to an array of bindingCount valid VkDescriptorSetLayoutBinding structures", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkMutableDescriptorTypeCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMutableDescriptorTypeCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeCreateInfoEXT-pMutableDescriptorTypeLists-parameter", + "text": "If mutableDescriptorTypeListCount is not 0, pMutableDescriptorTypeLists must be a valid pointer to an array of mutableDescriptorTypeListCount valid VkMutableDescriptorTypeListEXT structures", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkMutableDescriptorTypeListEXT": { + "core": [ + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-descriptorTypeCount-04597", + "text": "descriptorTypeCount must not be 0 if the corresponding binding is of VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04598", + "text": "pDescriptorTypes must be a valid pointer to an array of descriptorTypeCount valid, unique VkDescriptorType values if the given binding is of VK_DESCRIPTOR_TYPE_MUTABLE_EXT type", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-descriptorTypeCount-04599", + "text": "descriptorTypeCount must be 0 if the corresponding binding is not of VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04600", + "text": "pDescriptorTypes must not contain VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04601", + "text": "pDescriptorTypes must not contain VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04602", + "text": "pDescriptorTypes must not contain VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-04603", + "text": "pDescriptorTypes must not contain VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-09696", + "text": "pDescriptorTypes must not contain VK_DESCRIPTOR_TYPE_TENSOR_ARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkMutableDescriptorTypeListEXT-pDescriptorTypes-parameter", + "text": "If descriptorTypeCount is not 0, pDescriptorTypes must be a valid pointer to an array of descriptorTypeCount valid VkDescriptorType values", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetLayoutBinding": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-00282", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and descriptorCount is not 0 and pImmutableSamplers is not NULL, pImmutableSamplers must be a valid pointer to an array of descriptorCount valid VkSampler handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-04604", + "text": "If the inlineUniformBlock feature is not enabled, descriptorType must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-02209", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then descriptorCount must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-08004", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK and VkDescriptorSetLayoutCreateInfo::flags does not contain VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT then descriptorCount must be less than or equal to VkPhysicalDeviceInlineUniformBlockProperties::maxInlineUniformBlockSize", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-flags-08005", + "text": "If VkDescriptorSetLayoutCreateInfo::flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT, descriptorType must be VK_DESCRIPTOR_TYPE_SAMPLER", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-flags-08006", + "text": "If VkDescriptorSetLayoutCreateInfo::flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT, descriptorCount must less than or equal to 1", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-flags-08007", + "text": "If VkDescriptorSetLayoutCreateInfo::flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT, and descriptorCount is equal to 1, pImmutableSamplers must not be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorCount-09465", + "text": "If descriptorCount is not 0, stageFlags must be VK_SHADER_STAGE_ALL or a valid combination of other VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-01510", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT and descriptorCount is not 0, then stageFlags must be 0 or VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-pImmutableSamplers-04009", + "text": "The sampler objects indicated by pImmutableSamplers must not have a borderColor with one of the values VK_BORDER_COLOR_FLOAT_CUSTOM_EXT or VK_BORDER_COLOR_INT_CUSTOM_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-04605", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_MUTABLE_EXT, then pImmutableSamplers must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-flags-09466", + "text": "If VkDescriptorSetLayoutCreateInfo::flags contains VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV, and descriptorCount is not 0, then stageFlags must be a valid combination of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, VK_SHADER_STAGE_FRAGMENT_BIT and VK_SHADER_STAGE_COMPUTE_BIT values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBinding-descriptorType-parameter", + "text": "descriptorType must be a valid VkDescriptorType value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetLayoutBindingFlagsCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-bindingCount-03002", + "text": "If bindingCount is not zero, bindingCount must equal VkDescriptorSetLayoutCreateInfo::bindingCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-flags-03003", + "text": "If VkDescriptorSetLayoutCreateInfo::flags includes VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, then all elements of pBindingFlags must not include VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, or VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03004", + "text": "If an element of pBindingFlags includes VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, then it must be the element with the highest binding number", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformBufferUpdateAfterBind-03005", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingUniformBufferUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingSampledImageUpdateAfterBind-03006", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingSampledImageUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, or VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageImageUpdateAfterBind-03007", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingStorageImageUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_STORAGE_IMAGE must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageBufferUpdateAfterBind-03008", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingStorageBufferUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformTexelBufferUpdateAfterBind-03009", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingUniformTexelBufferUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageTexelBufferUpdateAfterBind-03010", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingStorageTexelBufferUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingInlineUniformBlockUpdateAfterBind-02211", + "text": "If VkPhysicalDeviceInlineUniformBlockFeatures::descriptorBindingInlineUniformBlockUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingAccelerationStructureUpdateAfterBind-03570", + "text": "If VkPhysicalDeviceAccelerationStructureFeaturesKHR::descriptorBindingAccelerationStructureUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR or VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-None-03011", + "text": "All bindings with descriptor type VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUpdateUnusedWhilePending-03012", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingUpdateUnusedWhilePending is not enabled, all elements of pBindingFlags must not include VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingPartiallyBound-03013", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingPartiallyBound is not enabled, all elements of pBindingFlags must not include VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingVariableDescriptorCount-03014", + "text": "If VkPhysicalDeviceDescriptorIndexingFeatures::descriptorBindingVariableDescriptorCount is not enabled, all elements of pBindingFlags must not include VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03015", + "text": "If an element of pBindingFlags includes VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, that element’s descriptorType must not be VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageTensorUpdateAfterBind-09697", + "text": "If VkPhysicalDeviceTensorFeaturesARM::descriptorBindingStorageTensorUpdateAfterBind is not enabled, all bindings with descriptor type VK_DESCRIPTOR_TYPE_TENSOR_ARM must not use VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-parameter", + "text": "If bindingCount is not 0, pBindingFlags must be a valid pointer to an array of bindingCount valid combinations of VkDescriptorBindingFlagBits values", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetDescriptorSetLayoutSupport": { + "core": [ + { + "vuid": "VUID-vkGetDescriptorSetLayoutSupport-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSupport-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDescriptorSetLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSupport-pSupport-parameter", + "text": "pSupport must be a valid pointer to a VkDescriptorSetLayoutSupport structure", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetLayoutSupport": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetLayoutSupport-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutSupport-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDescriptorSetVariableDescriptorCountLayoutSupport", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutSupport-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetVariableDescriptorCountLayoutSupport": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetVariableDescriptorCountLayoutSupport-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkDestroyDescriptorSetLayout": { + "core": [ + { + "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284", + "text": "If VkAllocationCallbacks were provided when descriptorSetLayout was created, a compatible set of callbacks must be provided here", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285", + "text": "If no VkAllocationCallbacks were provided when descriptorSetLayout was created, pAllocator must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorSetLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parameter", + "text": "If descriptorSetLayout is not VK_NULL_HANDLE, descriptorSetLayout must be a valid VkDescriptorSetLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorSetLayout-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parent", + "text": "If descriptorSetLayout is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCreatePipelineLayout": { + "core": [ + { + "vuid": "VUID-vkCreatePipelineLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreatePipelineLayout-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreatePipelineLayout-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreatePipelineLayout-pPipelineLayout-parameter", + "text": "pPipelineLayout must be a valid pointer to a VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkPipelineLayoutCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286", + "text": "setLayoutCount must be less than or equal to VkPhysicalDeviceLimits::maxBoundDescriptorSets", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03016", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_SAMPLER and VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorSamplers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03017", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorUniformBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03018", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorStorageBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-06939", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, and VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorSampledImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03020", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorStorageImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03021", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxPerStageDescriptorInputAttachments", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02214", + "text": "The total number of bindings in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set and with a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible to any given shader stage across all elements of pSetLayouts, must be less than or equal to VkPhysicalDeviceInlineUniformBlockProperties::maxPerStageDescriptorInlineUniformBlocks", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03022", + "text": "If the descriptorBindingSampledImageUpdateAfterBind feature is supported on the device, the total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_SAMPLER and VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindSamplers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03023", + "text": "If the descriptorBindingUniformBufferUpdateAfterBind feature is supported on the device, the total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindUniformBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03024", + "text": "If the descriptorBindingStorageBufferUpdateAfterBind feature is supported on the device, the total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindStorageBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03025", + "text": "If the descriptorBindingSampledImageUpdateAfterBind feature is supported on the device, the total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindSampledImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03026", + "text": "If the descriptorBindingStorageImageUpdateAfterBind feature is supported on the device, the total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindStorageImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03027", + "text": "If any element of pSetLayouts is created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set, the total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxPerStageDescriptorUpdateAfterBindInputAttachments", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02215", + "text": "If the descriptorBindingInlineUniformBlockUpdateAfterBind feature is supported on the device, the total number of bindings with a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceInlineUniformBlockProperties::maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03028", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_SAMPLER and VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetSamplers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03029", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetUniformBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03030", + "text": "If the maintenance7 feature is not enabled, the total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetUniformBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-maintenance7-10003", + "text": "If the maintenance7 feature is enabled, the total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceMaintenance7PropertiesKHR::maxDescriptorSetTotalUniformBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03031", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetStorageBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03032", + "text": "If the maintenance7 feature is not enabled, the total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetStorageBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-maintenance7-10004", + "text": "If the maintenance7 feature is enabled, the total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceMaintenance7PropertiesKHR::maxDescriptorSetTotalStorageBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-None-10005", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceMaintenance7PropertiesKHR::maxDescriptorSetTotalBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-10006", + "text": "If either the descriptorBindingStorageBufferUpdateAfterBind or descriptorBindingUniformBufferUpdateAfterBind feature is supported on the device, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceMaintenance7PropertiesKHR::maxDescriptorSetUpdateAfterBindTotalBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03033", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetSampledImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03034", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetStorageImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03035", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetInputAttachments", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02216", + "text": "The total number of bindings in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceInlineUniformBlockProperties::maxDescriptorSetInlineUniformBlocks", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036", + "text": "If the descriptorBindingSampledImageUpdateAfterBind feature is supported on the device, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_SAMPLER and VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindSamplers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037", + "text": "If the descriptorBindingUniformBufferUpdateAfterBind feature is supported on the device, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindUniformBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038", + "text": "If the descriptorBindingUniformBufferUpdateAfterBind feature is supported on the device, and if the maintenance7 feature is not enabled, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetUpdateAfterBindUniformBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-maintenance7-10007", + "text": "If the descriptorBindingUniformBufferUpdateAfterBind feature is supported on the device, and the maintenance7 feature is enabled, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceMaintenance7PropertiesKHR::maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039", + "text": "If the descriptorBindingStorageBufferUpdateAfterBind feature is supported on the device, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindStorageBuffers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040", + "text": "If the descriptorBindingStorageBufferUpdateAfterBind feature is supported on the device, and if the maintenance7 feature is not enabled, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceLimits::maxDescriptorSetUpdateAfterBindStorageBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-maintenance7-10008", + "text": "If the descriptorBindingStorageBufferUpdateAfterBind feature is supported on the device, and if the maintenance7 feature is enabled, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceMaintenance7PropertiesKHR::maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041", + "text": "If the descriptorBindingSampledImageUpdateAfterBind feature is supported on the device, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindSampledImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042", + "text": "If the descriptorBindingStorageImageUpdateAfterBind feature is supported on the device, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindStorageImages", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043", + "text": "If any element of pSetLayouts is created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set, the total number of descriptors of the type VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceDescriptorIndexingProperties::maxDescriptorSetUpdateAfterBindInputAttachments", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02217", + "text": "If the descriptorBindingInlineUniformBlockUpdateAfterBind feature is supported on the device, the total number of bindings with a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceInlineUniformBlockProperties::maxDescriptorSetUpdateAfterBindInlineUniformBlocks", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-06531", + "text": "The total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceVulkan13Properties::maxInlineUniformTotalSize", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292", + "text": "Any two elements of pPushConstantRanges must not include the same stage in stageFlags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293", + "text": "pSetLayouts must not contain more than one descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03571", + "text": "The total number of bindings in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxPerStageDescriptorAccelerationStructures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03572", + "text": "The total number of bindings with a descriptorType of VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxPerStageDescriptorUpdateAfterBindAccelerationStructures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03573", + "text": "The total number of bindings in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxDescriptorSetAccelerationStructures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-03574", + "text": "The total number of bindings with a descriptorType of VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxDescriptorSetUpdateAfterBindAccelerationStructures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-02381", + "text": "The total number of bindings with a descriptorType of VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxDescriptorSetAccelerationStructures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pImmutableSamplers-03566", + "text": "The total number of pImmutableSamplers created with flags containing VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT or VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceFragmentDensityMap2PropertiesEXT::maxDescriptorSetSubsampledSamplers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-04606", + "text": "Any element of pSetLayouts must not have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-graphicsPipelineLibrary-06753", + "text": "If the graphicsPipelineLibrary feature is not enabled, elements of pSetLayouts must be valid VkDescriptorSetLayout objects", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-08008", + "text": "If any element of pSetLayouts was created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set, all elements of pSetLayouts must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-09698", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_TENSOR_ARM accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxPerStageDescriptorSetStorageTensors", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-09699", + "text": "The total number of descriptors in descriptor set layouts created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set with a descriptorType of VK_DESCRIPTOR_TYPE_TENSOR_ARM accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxDescriptorSetStorageTensors", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-09878", + "text": "The total number of descriptors of the type VK_DESCRIPTOR_TYPE_TENSOR_ARM accessible across all shader stages and across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxDescriptorSetUpdateAfterBindStorageTensors", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-descriptorType-09879", + "text": "The total number of descriptors with a descriptorType of VK_DESCRIPTOR_TYPE_TENSOR_ARM accessible to any given shader stage across all elements of pSetLayouts must be less than or equal to VkPhysicalDeviceTensorPropertiesARM::maxPerStageDescriptorUpdateAfterBindStorageTensors", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkPipelineLayoutCreateFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pSetLayouts-parameter", + "text": "If setLayoutCount is not 0, pSetLayouts must be a valid pointer to an array of setLayoutCount valid or VK_NULL_HANDLE VkDescriptorSetLayout handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-parameter", + "text": "If pushConstantRangeCount is not 0, pPushConstantRanges must be a valid pointer to an array of pushConstantRangeCount valid VkPushConstantRange structures", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkPushConstantRange": { + "core": [ + { + "vuid": "VUID-VkPushConstantRange-offset-00294", + "text": "offset must be less than VkPhysicalDeviceLimits::maxPushConstantsSize", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantRange-offset-00295", + "text": "offset must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantRange-size-00296", + "text": "size must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantRange-size-00297", + "text": "size must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantRange-size-00298", + "text": "size must be less than or equal to VkPhysicalDeviceLimits::maxPushConstantsSize minus offset", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantRange-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantRange-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkDestroyPipelineLayout": { + "core": [ + { + "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-00299", + "text": "If VkAllocationCallbacks were provided when pipelineLayout was created, a compatible set of callbacks must be provided here", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-00300", + "text": "If no VkAllocationCallbacks were provided when pipelineLayout was created, pAllocator must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-02004", + "text": "pipelineLayout must not have been passed to any vkCmd* command for any command buffers that are still in the recording state when vkDestroyPipelineLayout is called", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyPipelineLayout-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-parameter", + "text": "If pipelineLayout is not VK_NULL_HANDLE, pipelineLayout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyPipelineLayout-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyPipelineLayout-pipelineLayout-parent", + "text": "If pipelineLayout is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCreateDescriptorPool": { + "core": [ + { + "vuid": "VUID-vkCreateDescriptorPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorPool-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDescriptorPoolCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorPool-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorPool-pDescriptorPool-parameter", + "text": "pDescriptorPool must be a valid pointer to a VkDescriptorPool handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorPool-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorPoolCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-descriptorPoolOverallocation-09227", + "text": "If the descriptorPoolOverallocation feature is not enabled, or flags does not have VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV set, maxSets must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-flags-09228", + "text": "If flags has the VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV or VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV bits set, then descriptorPoolOverallocation must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-flags-04607", + "text": "If flags has the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT bit set, then the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit must not be set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-mutableDescriptorType-04608", + "text": "If VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType is not enabled, pPoolSizes must not contain a descriptorType of VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-flags-04609", + "text": "If flags has the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT bit set, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-pPoolSizes-04787", + "text": "If pPoolSizes contains a descriptorType of VK_DESCRIPTOR_TYPE_MUTABLE_EXT, any other VK_DESCRIPTOR_TYPE_MUTABLE_EXT element in pPoolSizes must not have sets of supported descriptor types which partially overlap", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-pPoolSizes-09424", + "text": "If pPoolSizes contains a descriptorType of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, the pNext chain must include a VkDescriptorPoolInlineUniformBlockCreateInfo structure whose maxInlineUniformBlockBindings member is not zero", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDataGraphProcessingEngineCreateInfoARM, VkDescriptorPoolInlineUniformBlockCreateInfo, or VkMutableDescriptorTypeCreateInfoEXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkDescriptorPoolCreateFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolCreateInfo-pPoolSizes-parameter", + "text": "If poolSizeCount is not 0, pPoolSizes must be a valid pointer to an array of poolSizeCount valid VkDescriptorPoolSize structures", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorPoolInlineUniformBlockCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorPoolInlineUniformBlockCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorPoolSize": { + "core": [ + { + "vuid": "VUID-VkDescriptorPoolSize-descriptorCount-00302", + "text": "descriptorCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolSize-type-02218", + "text": "If type is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK then descriptorCount must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorPoolSize-type-parameter", + "text": "type must be a valid VkDescriptorType value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkDestroyDescriptorPool": { + "core": [ + { + "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00303", + "text": "All submitted commands that refer to descriptorPool (via any allocated descriptor sets) must have completed execution", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00304", + "text": "If VkAllocationCallbacks were provided when descriptorPool was created, a compatible set of callbacks must be provided here", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-00305", + "text": "If no VkAllocationCallbacks were provided when descriptorPool was created, pAllocator must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-parameter", + "text": "If descriptorPool is not VK_NULL_HANDLE, descriptorPool must be a valid VkDescriptorPool handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorPool-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorPool-descriptorPool-parent", + "text": "If descriptorPool is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkAllocateDescriptorSets": { + "core": [ + { + "vuid": "VUID-vkAllocateDescriptorSets-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkAllocateDescriptorSets-pAllocateInfo-parameter", + "text": "pAllocateInfo must be a valid pointer to a valid VkDescriptorSetAllocateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkAllocateDescriptorSets-pDescriptorSets-parameter", + "text": "pDescriptorSets must be a valid pointer to an array of pAllocateInfo->descriptorSetCount VkDescriptorSet handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkAllocateDescriptorSets-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkAllocateDescriptorSets-pAllocateInfo::descriptorSetCount-arraylength", + "text": "pAllocateInfo->descriptorSetCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-apiVersion-07895", + "text": "If the VK_KHR_maintenance1 extension is not enabled and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, descriptorSetCount must not be greater than the number of sets that are currently available for allocation in descriptorPool", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-apiVersion-07896", + "text": "If the VK_KHR_maintenance1 extension is not enabled and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, descriptorPool must have enough free descriptor capacity remaining to allocate the descriptor sets of the specified layouts", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308", + "text": "Each element of pSetLayouts must not have been created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044", + "text": "If any element of pSetLayouts was created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set, descriptorPool must have been created with the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-09380", + "text": "If pSetLayouts[i] was created with an element of pBindingFlags that includes VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, and VkDescriptorSetVariableDescriptorCountAllocateInfo is included in the pNext chain, and VkDescriptorSetVariableDescriptorCountAllocateInfo::descriptorSetCount is not zero, then VkDescriptorSetVariableDescriptorCountAllocateInfo::pDescriptorCounts[i] must be less than or equal to VkDescriptorSetLayoutBinding::descriptorCount for the corresponding binding used to create pSetLayouts[i]", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-04610", + "text": "If any element of pSetLayouts was created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT bit set, descriptorPool must have been created with the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-08009", + "text": "Each element of pSetLayouts must not have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDescriptorSetVariableDescriptorCountAllocateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorPool-parameter", + "text": "descriptorPool must be a valid VkDescriptorPool handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-pSetLayouts-parameter", + "text": "pSetLayouts must be a valid pointer to an array of descriptorSetCount valid VkDescriptorSetLayout handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-arraylength", + "text": "descriptorSetCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetAllocateInfo-commonparent", + "text": "Both of descriptorPool, and the elements of pSetLayouts must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorSetVariableDescriptorCountAllocateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-descriptorSetCount-03045", + "text": "If descriptorSetCount is not zero, descriptorSetCount must equal VkDescriptorSetAllocateInfo::descriptorSetCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pDescriptorCounts-parameter", + "text": "If descriptorSetCount is not 0, pDescriptorCounts must be a valid pointer to an array of descriptorSetCount uint32_t values", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkFreeDescriptorSets": { + "core": [ + { + "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00309", + "text": "All submitted commands that refer to any element of pDescriptorSets must have completed execution", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-00310", + "text": "pDescriptorSets must be a valid pointer to an array of descriptorSetCount VkDescriptorSet handles, each element of which must either be a valid handle or VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-descriptorPool-00312", + "text": "descriptorPool must have been created with the VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parameter", + "text": "descriptorPool must be a valid VkDescriptorPool handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-descriptorSetCount-arraylength", + "text": "descriptorSetCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-descriptorPool-parent", + "text": "descriptorPool must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkFreeDescriptorSets-pDescriptorSets-parent", + "text": "Each element of pDescriptorSets that is a valid handle must have been created, allocated, or retrieved from descriptorPool", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkResetDescriptorPool": { + "core": [ + { + "vuid": "VUID-vkResetDescriptorPool-descriptorPool-00313", + "text": "All uses of descriptorPool (via any allocated descriptor sets) must have completed execution", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkResetDescriptorPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkResetDescriptorPool-descriptorPool-parameter", + "text": "descriptorPool must be a valid VkDescriptorPool handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkResetDescriptorPool-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkResetDescriptorPool-descriptorPool-parent", + "text": "descriptorPool must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkUpdateDescriptorSets": { + "core": [ + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06236", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, elements of the pTexelBufferView member of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06237", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the buffer member of any element of the pBufferInfo member of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06238", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and dstSet was not allocated with a layout that included immutable samplers for dstBinding with descriptorType, the sampler member of any element of the pImageInfo member of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06239", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER the imageView member of any element of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06240", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, elements of the pAccelerationStructures member of a VkWriteDescriptorSetAccelerationStructureKHR structure in the pNext chain of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06241", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, elements of the pAccelerationStructures member of a VkWriteDescriptorSetAccelerationStructureNV structure in the pNext chain of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06940", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM or VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, the imageView member of any element of pDescriptorWrites[i] must have been created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06493", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pDescriptorWrites[i].pImageInfo must be a valid pointer to an array of pDescriptorWrites[i].descriptorCount valid VkDescriptorImageInfo structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06941", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM or VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, pDescriptorWrites[i].pImageInfo must be a valid pointer to an array of pDescriptorWrites[i].descriptorCount valid VkDescriptorImageInfo structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-None-03047", + "text": "The dstSet member of each element of pDescriptorWrites or pDescriptorCopies for bindings which were created without the VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT or VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT bits set must not be used by any command that was recorded to a command buffer which is in the pending state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-06993", + "text": "Host access to pDescriptorWrites[i].dstSet and pDescriptorCopies[i].dstSet must be externally synchronized unless explicitly denoted otherwise for specific flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorWrites-parameter", + "text": "If descriptorWriteCount is not 0, pDescriptorWrites must be a valid pointer to an array of descriptorWriteCount valid VkWriteDescriptorSet structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSets-pDescriptorCopies-parameter", + "text": "If descriptorCopyCount is not 0, pDescriptorCopies must be a valid pointer to an array of descriptorCopyCount valid VkCopyDescriptorSet structures", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkWriteDescriptorSet": { + "core": [ + { + "vuid": "VUID-VkWriteDescriptorSet-dstBinding-00315", + "text": "dstBinding must be less than or equal to the maximum value of binding of all VkDescriptorSetLayoutBinding structures specified when dstSet’s descriptor set layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-dstBinding-00316", + "text": "dstBinding must be a binding with a non-zero descriptorCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-dstBinding-10009", + "text": "dstBinding must be a binding with a non-zero VkDescriptorSetLayoutCreateInfo::bindingCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-00317", + "text": "All consecutive bindings updated via a single VkWriteDescriptorSet structure, except those with a descriptorCount of zero, must have identical descriptorType", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-10776", + "text": "All consecutive bindings updated via a single VkWriteDescriptorSet structure, except those with a descriptorCount of zero, must have identical stageFlags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-00318", + "text": "All consecutive bindings updated via a single VkWriteDescriptorSet structure, except those with a descriptorCount of zero, must all either use immutable samplers or must all not use immutable samplers", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-10777", + "text": "All consecutive bindings updated via a single VkWriteDescriptorSet structure, except those with a descriptorCount of zero, must have identical VkDescriptorBindingFlagBits", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00319", + "text": "descriptorType must match the type of dstBinding within dstSet", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-dstSet-00320", + "text": "dstSet must be a valid VkDescriptorSet handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-dstArrayElement-00321", + "text": "The sum of dstArrayElement and descriptorCount must be less than or equal to the number of array elements in the descriptor set binding specified by dstBinding, and all applicable consecutive bindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02219", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, dstArrayElement must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02220", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, descriptorCount must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02994", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, each element of pTexelBufferView must be either a valid VkBufferView handle or VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02995", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER and the nullDescriptor feature is not enabled, each element of pTexelBufferView must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00324", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pBufferInfo must be a valid pointer to an array of descriptorCount valid VkDescriptorBufferInfo structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00325", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and dstSet was not allocated with a layout that included immutable samplers for dstBinding with descriptorType, the sampler member of each element of pImageInfo must be a valid VkSampler object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02996", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the imageView member of each element of pImageInfo must be either a valid VkImageView handle or VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02997", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and the nullDescriptor feature is not enabled, the imageView member of each element of pImageInfo must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-07683", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView member of each element of pImageInfo must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02221", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, the pNext chain must include a VkWriteDescriptorSetInlineUniformBlock structure whose dataSize member equals descriptorCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02382", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, the pNext chain must include a VkWriteDescriptorSetAccelerationStructureKHR structure whose accelerationStructureCount member equals descriptorCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-03817", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, the pNext chain must include a VkWriteDescriptorSetAccelerationStructureNV structure whose accelerationStructureCount member equals descriptorCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-01946", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, then the imageView member of each pImageInfo element must have been created without a VkSamplerYcbcrConversionInfo structure in its pNext chain", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02738", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and if any element of pImageInfo has an imageView member that was created with a VkSamplerYcbcrConversionInfo structure in its pNext chain, then dstSet must have been allocated with a layout that included immutable samplers for dstBinding, and the corresponding immutable sampler must have been created with an identically defined VkSamplerYcbcrConversionInfo object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-01948", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and dstSet was allocated with a layout that included immutable samplers for dstBinding, then the imageView member of each element of pImageInfo which corresponds to an immutable sampler that enables sampler Y′CBCR conversion must have been created with a VkSamplerYcbcrConversionInfo structure in its pNext chain with an identically defined VkSamplerYcbcrConversionInfo to the corresponding immutable sampler", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-09506", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, dstSet was allocated with a layout that included immutable samplers for dstBinding, and those samplers enable sampler Y′CBCR conversion, then imageView must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00327", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the offset member of each element of pBufferInfo must be a multiple of VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00328", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the offset member of each element of pBufferInfo must be a multiple of VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00329", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, and the buffer member of any element of pBufferInfo is the handle of a non-sparse buffer, then that buffer must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00330", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the buffer member of each element of pBufferInfo must have been created with VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00331", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the buffer member of each element of pBufferInfo must have been created with VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00332", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the range member of each element of pBufferInfo, or the effective range if range is VK_WHOLE_SIZE, must be less than or equal to VkPhysicalDeviceLimits::maxUniformBufferRange", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00333", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the range member of each element of pBufferInfo, or the effective range if range is VK_WHOLE_SIZE, must be less than or equal to VkPhysicalDeviceLimits::maxStorageBufferRange", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-08765", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the pTexelBufferView buffer view usage must include VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-08766", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the pTexelBufferView buffer view usage must include VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00336", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView member of each element of pImageInfo must have been created with the identity swizzle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00337", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the imageView member of each element of pImageInfo must have been created with VK_IMAGE_USAGE_SAMPLED_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-04149", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE the imageLayout member of each element of pImageInfo must be a member of the list given in Sampled Image", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-04150", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER the imageLayout member of each element of pImageInfo must be a member of the list given in Combined Image Sampler", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-04151", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT the imageLayout member of each element of pImageInfo must be a member of the list given in Input Attachment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-04152", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE the imageLayout member of each element of pImageInfo must be a member of the list given in Storage Image", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00338", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView member of each element of pImageInfo must have been created with VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-00339", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the imageView member of each element of pImageInfo must have been created with VK_IMAGE_USAGE_STORAGE_BIT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-02752", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER, then dstSet must not have been allocated with a layout that included immutable samplers for dstBinding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-dstSet-04611", + "text": "If the VkDescriptorSetLayoutBinding for dstSet at dstBinding is VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the new active descriptor type descriptorType must exist in the corresponding pMutableDescriptorTypeLists list for dstBinding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-06450", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView member of each element of pImageInfo must have either been created without a VkImageViewMinLodCreateInfoEXT included in the pNext chain or with a VkImageViewMinLodCreateInfoEXT::minLod of 0.0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-06942", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, the imageView member of each element of pImageInfo must have been created with a view created with an image created with VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-06943", + "text": "If descriptorType is VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, the imageView member of each element of pImageInfo must have been created with a view created with an image created with VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkWriteDescriptorSetAccelerationStructureKHR, VkWriteDescriptorSetAccelerationStructureNV, VkWriteDescriptorSetInlineUniformBlock, VkWriteDescriptorSetPartitionedAccelerationStructureNV, or VkWriteDescriptorSetTensorARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorType-parameter", + "text": "descriptorType must be a valid VkDescriptorType value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-descriptorCount-arraylength", + "text": "descriptorCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSet-commonparent", + "text": "Both of dstSet, and the elements of pTexelBufferView that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorBufferInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorBufferInfo-offset-00340", + "text": "offset must be less than the size of buffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferInfo-range-00341", + "text": "If range is not equal to VK_WHOLE_SIZE, range must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferInfo-range-00342", + "text": "If range is not equal to VK_WHOLE_SIZE, range must be less than or equal to the size of buffer minus offset", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferInfo-buffer-02998", + "text": "If the nullDescriptor feature is not enabled, buffer must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferInfo-buffer-02999", + "text": "If buffer is VK_NULL_HANDLE, offset must be zero and range must be VK_WHOLE_SIZE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferInfo-buffer-parameter", + "text": "If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorImageInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorImageInfo-imageView-06712", + "text": "imageView must not be a 2D array image view created from a 3D image", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-imageView-07795", + "text": "If imageView is a 2D view created from a 3D image, then descriptorType must be VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-imageView-07796", + "text": "If imageView is a 2D view created from a 3D image, then the image must have been created with VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-descriptorType-06713", + "text": "If the image2DViewOf3D feature is not enabled or descriptorType is not VK_DESCRIPTOR_TYPE_STORAGE_IMAGE then imageView must not be a 2D view created from a 3D image", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-descriptorType-06714", + "text": "If the sampler2DViewOf3D feature is not enabled or descriptorType is not VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER then imageView must not be a 2D view created from a 3D image", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-imageView-01976", + "text": "If imageView is created from a depth/stencil image, the aspectMask used to create the imageView must include either VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT but not both", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-imageLayout-09425", + "text": "If imageLayout is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, then the aspectMask used to create imageView must not include either VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-imageLayout-09426", + "text": "If imageLayout is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, then the aspectMask used to create imageView must not include VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-imageLayout-00344", + "text": "imageLayout must match the actual VkImageLayout of each subresource accessible from imageView at the time this descriptor is accessed as defined by the image layout matching rules", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-sampler-01564", + "text": "If sampler is used and the VkFormat of the image is a multi-planar format, the image must have been created with VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, and the aspectMask of the imageView must be a valid multi-planar aspect mask bit", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-mutableComparisonSamplers-04450", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::mutableComparisonSamplers is VK_FALSE, then sampler must have been created with VkSamplerCreateInfo::compareEnable set to VK_FALSE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorImageInfo-commonparent", + "text": "Both of imageView, and sampler that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkWriteDescriptorSetInlineUniformBlock": { + "core": [ + { + "vuid": "VUID-VkWriteDescriptorSetInlineUniformBlock-dataSize-02222", + "text": "dataSize must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetInlineUniformBlock-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetInlineUniformBlock-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetInlineUniformBlock-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkWriteDescriptorSetAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03579", + "text": "Each acceleration structure in pAccelerationStructures must have been created with a type of VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-03580", + "text": "If the nullDescriptor feature is not enabled, each element of pAccelerationStructures must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-parameter", + "text": "pAccelerationStructures must be a valid pointer to an array of accelerationStructureCount valid or VK_NULL_HANDLE VkAccelerationStructureKHR handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-arraylength", + "text": "accelerationStructureCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkWriteDescriptorSetPartitionedAccelerationStructureNV": { + "core": [ + { + "vuid": "VUID-VkWriteDescriptorSetPartitionedAccelerationStructureNV-accelerationStructureCount-10511", + "text": "accelerationStructureCount must be equal to descriptorCount in the extended structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetPartitionedAccelerationStructureNV-pAccelerationStructures-10512", + "text": "Each entry in pAccelerationStructures must be a valid address of a PTLAS", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetPartitionedAccelerationStructureNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_PARTITIONED_ACCELERATION_STRUCTURE_NV", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetPartitionedAccelerationStructureNV-pAccelerationStructures-parameter", + "text": "pAccelerationStructures must be a valid pointer to an array of accelerationStructureCount or VK_NULL_HANDLE VkDeviceAddress values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetPartitionedAccelerationStructureNV-accelerationStructureCount-arraylength", + "text": "accelerationStructureCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkWriteDescriptorSetAccelerationStructureNV": { + "core": [ + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-03748", + "text": "Each acceleration structure in pAccelerationStructures must have been created with VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-03749", + "text": "If the nullDescriptor feature is not enabled, each member of pAccelerationStructures must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-parameter", + "text": "pAccelerationStructures must be a valid pointer to an array of accelerationStructureCount valid or VK_NULL_HANDLE VkAccelerationStructureNV handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetAccelerationStructureNV-accelerationStructureCount-arraylength", + "text": "accelerationStructureCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkWriteDescriptorSetTensorARM": { + "core": [ + { + "vuid": "VUID-VkWriteDescriptorSetTensorARM-tensorViewCount-09700", + "text": "tensorViewCount must be equal to descriptorCount in the VkWriteDescriptorSet structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetTensorARM-nullDescriptor-09898", + "text": "If the nullDescriptor feature is not enabled, each element of pTensorViews must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetTensorARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetTensorARM-pTensorViews-parameter", + "text": "pTensorViews must be a valid pointer to an array of tensorViewCount valid VkTensorViewARM handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkWriteDescriptorSetTensorARM-tensorViewCount-arraylength", + "text": "tensorViewCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkCopyDescriptorSet": { + "core": [ + { + "vuid": "VUID-VkCopyDescriptorSet-srcBinding-00345", + "text": "srcBinding must be a valid binding within srcSet", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcArrayElement-00346", + "text": "The sum of srcArrayElement and descriptorCount must be less than or equal to the number of array elements in the descriptor set binding specified by srcBinding, and all applicable consecutive bindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstBinding-00347", + "text": "dstBinding must be a valid binding within dstSet", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstArrayElement-00348", + "text": "The sum of dstArrayElement and descriptorCount must be less than or equal to the number of array elements in the descriptor set binding specified by dstBinding, and all applicable consecutive bindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstBinding-02632", + "text": "The type of dstBinding within dstSet must be equal to the type of srcBinding within srcSet", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-00349", + "text": "If srcSet is equal to dstSet, then the source and destination ranges of descriptors must not overlap, where the ranges may include array elements from consecutive bindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcBinding-02223", + "text": "If the descriptor type of the descriptor set binding specified by srcBinding is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, srcArrayElement must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstBinding-02224", + "text": "If the descriptor type of the descriptor set binding specified by dstBinding is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, dstArrayElement must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcBinding-02225", + "text": "If the descriptor type of the descriptor set binding specified by either srcBinding or dstBinding is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, descriptorCount must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-01918", + "text": "If srcSet’s layout was created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set, then dstSet’s layout must also have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-04885", + "text": "If srcSet’s layout was created without either the VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT flag or the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set, then dstSet’s layout must have been created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-01920", + "text": "If the descriptor pool from which srcSet was allocated was created with the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set, then the descriptor pool from which dstSet was allocated must also have been created with the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-04887", + "text": "If the descriptor pool from which srcSet was allocated was created without either the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag or the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set, then the descriptor pool from which dstSet was allocated must have been created without the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstBinding-02753", + "text": "If the descriptor type of the descriptor set binding specified by dstBinding is VK_DESCRIPTOR_TYPE_SAMPLER, then dstSet must not have been allocated with a layout that included immutable samplers for dstBinding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstSet-04612", + "text": "If VkDescriptorSetLayoutBinding for dstSet at dstBinding is VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the new active descriptor type must exist in the corresponding pMutableDescriptorTypeLists list for dstBinding if the new active descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-04613", + "text": "If VkDescriptorSetLayoutBinding for srcSet at srcBinding is VK_DESCRIPTOR_TYPE_MUTABLE_EXT and the VkDescriptorSetLayoutBinding for dstSet at dstBinding is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the active descriptor type for the source descriptor must match the descriptor type of dstBinding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstSet-04614", + "text": "If VkDescriptorSetLayoutBinding for dstSet at dstBinding is VK_DESCRIPTOR_TYPE_MUTABLE_EXT, and the new active descriptor type is VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the pMutableDescriptorTypeLists for srcBinding and dstBinding must match exactly", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-srcSet-parameter", + "text": "srcSet must be a valid VkDescriptorSet handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-dstSet-parameter", + "text": "dstSet must be a valid VkDescriptorSet handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkCopyDescriptorSet-commonparent", + "text": "Both of dstSet, and srcSet must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCreateDescriptorUpdateTemplate": { + "core": [ + { + "vuid": "VUID-vkCreateDescriptorUpdateTemplate-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorUpdateTemplate-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDescriptorUpdateTemplateCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorUpdateTemplate-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorUpdateTemplate-pDescriptorUpdateTemplate-parameter", + "text": "pDescriptorUpdateTemplate must be a valid pointer to a VkDescriptorUpdateTemplate handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCreateDescriptorUpdateTemplate-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorUpdateTemplateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00350", + "text": "If templateType is VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, descriptorSetLayout must be a valid VkDescriptorSetLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-10355", + "text": "If templateType is VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, and the VK_KHR_push_descriptor extension is not enabled, pushDescriptor must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00351", + "text": "If templateType is VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00352", + "text": "If templateType is VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, pipelineLayout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00353", + "text": "If templateType is VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, set must be the unique set number in the pipeline layout that uses a descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-04615", + "text": "If templateType is VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, descriptorSetLayout must not contain a binding with type VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-pDescriptorUpdateEntries-parameter", + "text": "pDescriptorUpdateEntries must be a valid pointer to an array of descriptorUpdateEntryCount valid VkDescriptorUpdateTemplateEntry structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-parameter", + "text": "templateType must be a valid VkDescriptorUpdateTemplateType value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-descriptorUpdateEntryCount-arraylength", + "text": "descriptorUpdateEntryCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateCreateInfo-commonparent", + "text": "Both of descriptorSetLayout, and pipelineLayout that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorUpdateTemplateEntry": { + "core": [ + { + "vuid": "VUID-VkDescriptorUpdateTemplateEntry-dstBinding-00354", + "text": "dstBinding must be a valid binding in the descriptor set layout implicitly specified when using a descriptor update template to update descriptors", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateEntry-dstArrayElement-00355", + "text": "dstArrayElement and descriptorCount must be less than or equal to the number of array elements in the descriptor set binding implicitly specified when using a descriptor update template to update descriptors, and all applicable consecutive bindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptor-02226", + "text": "If descriptor type is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, dstArrayElement must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptor-02227", + "text": "If descriptor type is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, descriptorCount must be an integer multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorUpdateTemplateEntry-descriptorType-parameter", + "text": "descriptorType must be a valid VkDescriptorType value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkDestroyDescriptorUpdateTemplate": { + "core": [ + { + "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00356", + "text": "If VkAllocationCallbacks were provided when descriptorUpdateTemplate was created, a compatible set of callbacks must be provided here", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00357", + "text": "If no VkAllocationCallbacks were provided when descriptorUpdateTemplate was created, pAllocator must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parameter", + "text": "If descriptorUpdateTemplate is not VK_NULL_HANDLE, descriptorUpdateTemplate must be a valid VkDescriptorUpdateTemplate handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parent", + "text": "If descriptorUpdateTemplate is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkUpdateDescriptorSetWithTemplate": { + "core": [ + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-pData-01685", + "text": "pData must be a valid pointer to a memory containing one or more valid instances of VkDescriptorImageInfo, VkDescriptorBufferInfo, or VkBufferView in a layout defined by descriptorUpdateTemplate when it was created with vkCreateDescriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-06995", + "text": "Host access to descriptorSet must be externally synchronized unless explicitly denoted otherwise for specific flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-parameter", + "text": "descriptorSet must be a valid VkDescriptorSet handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parameter", + "text": "descriptorUpdateTemplate must be a valid VkDescriptorUpdateTemplate handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-parent", + "text": "descriptorSet must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parent", + "text": "descriptorUpdateTemplate must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdBindDescriptorSets": { + "core": [ + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358", + "text": "Each element of pDescriptorSets that is not VK_NULL_HANDLE must have been allocated with a VkDescriptorSetLayout that matches (is the same as, or identically defined as) the VkDescriptorSetLayout at set n in layout, where n is the sum of firstSet and the index into pDescriptorSets", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359", + "text": "dynamicOffsetCount must be equal to the total number of dynamic descriptors in pDescriptorSets", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-firstSet-00360", + "text": "The sum of firstSet and descriptorSetCount must be less than or equal to VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971", + "text": "Each element of pDynamicOffsets which corresponds to a descriptor binding with type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must be a multiple of VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972", + "text": "Each element of pDynamicOffsets which corresponds to a descriptor binding with type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must be a multiple of VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979", + "text": "For each dynamic uniform or storage buffer binding in pDescriptorSets, the sum of the effective offset and the range of the binding must be less than or equal to the size of the buffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-06715", + "text": "For each dynamic uniform or storage buffer binding in pDescriptorSets, if the range was set with VK_WHOLE_SIZE then pDynamicOffsets which corresponds to the descriptor binding must be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-04616", + "text": "Each element of pDescriptorSets must not have been allocated from a VkDescriptorPool with the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-06563", + "text": "If the graphicsPipelineLibrary feature is not enabled, each element of pDescriptorSets must be a valid VkDescriptorSet", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-08010", + "text": "Each element of pDescriptorSets must have been allocated with a VkDescriptorSetLayout which was not created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-09914", + "text": "If any element of pDescriptorSets was allocated from a descriptor pool created with a VkDescriptorPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure specifying foreign data processing engines in its pNext chain, then the command pool from which commandBuffer was allocated must have been created with a VkCommandPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain specifying a superset of all the foreign data processing engines specified when creating the descriptor pools from which the elements of pDescriptorSets were allocated", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-09915", + "text": "If none of the elements of pDescriptorSets were allocated from a descriptor pool created with a VkDescriptorPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure specifying foreign data processing engines in its pNext chain, then the command pool from which commandBuffer was allocated must not have been created with a VkCommandPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361", + "text": "pipelineBindPoint must be supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter", + "text": "pDescriptorSets must be a valid pointer to an array of descriptorSetCount valid or VK_NULL_HANDLE VkDescriptorSet handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter", + "text": "If dynamicOffsetCount is not 0, pDynamicOffsets must be a valid pointer to an array of dynamicOffsetCount uint32_t values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or data_graph operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-descriptorSetCount-arraylength", + "text": "descriptorSetCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets-commonparent", + "text": "Each of commandBuffer, layout, and the elements of pDescriptorSets that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdBindDescriptorSets2": { + "core": [ + { + "vuid": "VUID-vkCmdBindDescriptorSets2-pBindDescriptorSetsInfo-09467", + "text": "Each bit in pBindDescriptorSetsInfo->stageFlags must be a stage supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets2-pBindDescriptorSetsInfo-parameter", + "text": "pBindDescriptorSetsInfo must be a valid pointer to a valid VkBindDescriptorSetsInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorSets2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkBindDescriptorSetsInfo": { + "core": [ + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-00358", + "text": "Each element of pDescriptorSets that is not VK_NULL_HANDLE must have been allocated with a VkDescriptorSetLayout that matches (is the same as, or identically defined as) the VkDescriptorSetLayout at set n in layout, where n is the sum of firstSet and the index into pDescriptorSets", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-dynamicOffsetCount-00359", + "text": "dynamicOffsetCount must be equal to the total number of dynamic descriptors in pDescriptorSets", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-firstSet-00360", + "text": "The sum of firstSet and descriptorSetCount must be less than or equal to VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDynamicOffsets-01971", + "text": "Each element of pDynamicOffsets which corresponds to a descriptor binding with type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC must be a multiple of VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDynamicOffsets-01972", + "text": "Each element of pDynamicOffsets which corresponds to a descriptor binding with type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC must be a multiple of VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-01979", + "text": "For each dynamic uniform or storage buffer binding in pDescriptorSets, the sum of the effective offset and the range of the binding must be less than or equal to the size of the buffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-06715", + "text": "For each dynamic uniform or storage buffer binding in pDescriptorSets, if the range was set with VK_WHOLE_SIZE then pDynamicOffsets which corresponds to the descriptor binding must be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-04616", + "text": "Each element of pDescriptorSets must not have been allocated from a VkDescriptorPool with the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-06563", + "text": "If the graphicsPipelineLibrary feature is not enabled, each element of pDescriptorSets must be a valid VkDescriptorSet", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-08010", + "text": "Each element of pDescriptorSets must have been allocated with a VkDescriptorSetLayout which was not created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-09914", + "text": "If any element of pDescriptorSets was allocated from a descriptor pool created with a VkDescriptorPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure specifying foreign data processing engines in its pNext chain, then the command pool from which commandBuffer was allocated must have been created with a VkCommandPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain specifying a superset of all the foreign data processing engines specified when creating the descriptor pools from which the elements of pDescriptorSets were allocated", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-09915", + "text": "If none of the elements of pDescriptorSets were allocated from a descriptor pool created with a VkDescriptorPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure specifying foreign data processing engines in its pNext chain, then the command pool from which commandBuffer was allocated must not have been created with a VkCommandPoolCreateInfo structure that had a VkDataGraphProcessingEngineCreateInfoARM structure in its pNext chain", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-None-09495", + "text": "If the dynamicPipelineLayout feature is not enabled, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-layout-09496", + "text": "If layout is VK_NULL_HANDLE, the pNext chain must include a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-layout-parameter", + "text": "If layout is not VK_NULL_HANDLE, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDescriptorSets-parameter", + "text": "pDescriptorSets must be a valid pointer to an array of descriptorSetCount valid VkDescriptorSet handles", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-pDynamicOffsets-parameter", + "text": "If dynamicOffsetCount is not 0, and pDynamicOffsets is not NULL, pDynamicOffsets must be a valid pointer to an array of dynamicOffsetCount or VK_NULL_HANDLE uint32_t values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-descriptorSetCount-arraylength", + "text": "descriptorSetCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorSetsInfo-commonparent", + "text": "Both of layout, and the elements of pDescriptorSets that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdPushDescriptorSet": { + "core": [ + { + "vuid": "VUID-vkCmdPushDescriptorSet-set-00364", + "text": "set must be less than VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-set-00365", + "text": "set must be the unique set number in the pipeline layout that uses a descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-pDescriptorWrites-06494", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pDescriptorWrites[i].pImageInfo must be a valid pointer to an array of pDescriptorWrites[i].descriptorCount valid VkDescriptorImageInfo structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-pipelineBindPoint-00363", + "text": "pipelineBindPoint must be supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-None-10356", + "text": "If the VK_KHR_push_descriptor extension is not enabled, pushDescriptor must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-pDescriptorWrites-parameter", + "text": "pDescriptorWrites must be a valid pointer to an array of descriptorWriteCount valid VkWriteDescriptorSet structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-descriptorWriteCount-arraylength", + "text": "descriptorWriteCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet-commonparent", + "text": "Both of commandBuffer, and layout must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdPushDescriptorSet2": { + "core": [ + { + "vuid": "VUID-vkCmdPushDescriptorSet2-pPushDescriptorSetInfo-09468", + "text": "Each bit in pPushDescriptorSetInfo->stageFlags must be a stage supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet2-None-10357", + "text": "If the VK_KHR_push_descriptor extension is not enabled, pushDescriptor must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet2-pPushDescriptorSetInfo-parameter", + "text": "pPushDescriptorSetInfo must be a valid pointer to a valid VkPushDescriptorSetInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSet2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkPushDescriptorSetInfo": { + "core": [ + { + "vuid": "VUID-VkPushDescriptorSetInfo-set-00364", + "text": "set must be less than VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-set-00365", + "text": "set must be the unique set number in the pipeline layout that uses a descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-pDescriptorWrites-06494", + "text": "For each element i where pDescriptorWrites[i].descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pDescriptorWrites[i].pImageInfo must be a valid pointer to an array of pDescriptorWrites[i].descriptorCount valid VkDescriptorImageInfo structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-None-09495", + "text": "If the dynamicPipelineLayout feature is not enabled, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-layout-09496", + "text": "If layout is VK_NULL_HANDLE, the pNext chain must include a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-layout-parameter", + "text": "If layout is not VK_NULL_HANDLE, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-pDescriptorWrites-parameter", + "text": "pDescriptorWrites must be a valid pointer to an array of descriptorWriteCount valid VkWriteDescriptorSet structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetInfo-descriptorWriteCount-arraylength", + "text": "descriptorWriteCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdPushDescriptorSetWithTemplate": { + "core": [ + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-commandBuffer-00366", + "text": "The pipelineBindPoint specified during the creation of the descriptor update template must be supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-pData-01686", + "text": "pData must be a valid pointer to a memory containing one or more valid instances of VkDescriptorImageInfo, VkDescriptorBufferInfo, or VkBufferView in a layout defined by descriptorUpdateTemplate when it was created with vkCreateDescriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-layout-07993", + "text": "layout must be compatible with the layout used to create descriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-descriptorUpdateTemplate-07994", + "text": "descriptorUpdateTemplate must have been created with a templateType of VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-set-07995", + "text": "set must be the same value used to create descriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-set-07304", + "text": "set must be less than VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-set-07305", + "text": "set must be the unique set number in the pipeline layout that uses a descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-None-10358", + "text": "If the VK_KHR_push_descriptor extension is not enabled, pushDescriptor must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-descriptorUpdateTemplate-parameter", + "text": "descriptorUpdateTemplate must be a valid VkDescriptorUpdateTemplate handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate-commonparent", + "text": "Each of commandBuffer, descriptorUpdateTemplate, and layout must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdPushDescriptorSetWithTemplate2": { + "core": [ + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate2-pPushDescriptorSetWithTemplateInfo-parameter", + "text": "pPushDescriptorSetWithTemplateInfo must be a valid pointer to a valid VkPushDescriptorSetWithTemplateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushDescriptorSetWithTemplate2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkPushDescriptorSetWithTemplateInfo": { + "core": [ + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-commandBuffer-00366", + "text": "The pipelineBindPoint specified during the creation of the descriptor update template must be supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-pData-01686", + "text": "pData must be a valid pointer to a memory containing one or more valid instances of VkDescriptorImageInfo, VkDescriptorBufferInfo, or VkBufferView in a layout defined by descriptorUpdateTemplate when it was created with vkCreateDescriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-layout-07993", + "text": "layout must be compatible with the layout used to create descriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-descriptorUpdateTemplate-07994", + "text": "descriptorUpdateTemplate must have been created with a templateType of VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-set-07995", + "text": "set must be the same value used to create descriptorUpdateTemplate", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-set-07304", + "text": "set must be less than VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-set-07305", + "text": "set must be the unique set number in the pipeline layout that uses a descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-None-09495", + "text": "If the dynamicPipelineLayout feature is not enabled, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-layout-09496", + "text": "If layout is VK_NULL_HANDLE, the pNext chain must include a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-None-10359", + "text": "If the VK_KHR_push_descriptor extension is not enabled, pushDescriptor must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-descriptorUpdateTemplate-parameter", + "text": "descriptorUpdateTemplate must be a valid VkDescriptorUpdateTemplate handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-layout-parameter", + "text": "If layout is not VK_NULL_HANDLE, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushDescriptorSetWithTemplateInfo-commonparent", + "text": "Both of descriptorUpdateTemplate, and layout that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdPushConstants": { + "core": [ + { + "vuid": "VUID-vkCmdPushConstants-offset-01795", + "text": "For each byte in the range specified by offset and size and for each shader stage in stageFlags, there must be a push constant range in layout that includes that byte and that stage", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-offset-01796", + "text": "For each byte in the range specified by offset and size and for each push constant range that overlaps that byte, stageFlags must include all stages in that push constant range’s VkPushConstantRange::stageFlags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-offset-00368", + "text": "offset must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-size-00369", + "text": "size must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-offset-00370", + "text": "offset must be less than VkPhysicalDeviceLimits::maxPushConstantsSize", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-size-00371", + "text": "size must be less than or equal to VkPhysicalDeviceLimits::maxPushConstantsSize minus offset", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-pValues-parameter", + "text": "pValues must be a valid pointer to an array of size bytes", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-size-arraylength", + "text": "size must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants-commonparent", + "text": "Both of commandBuffer, and layout must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdPushConstants2": { + "core": [ + { + "vuid": "VUID-vkCmdPushConstants2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants2-pPushConstantsInfo-parameter", + "text": "pPushConstantsInfo must be a valid pointer to a valid VkPushConstantsInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdPushConstants2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkPushConstantsInfo": { + "core": [ + { + "vuid": "VUID-VkPushConstantsInfo-offset-01795", + "text": "For each byte in the range specified by offset and size and for each shader stage in stageFlags, there must be a push constant range in layout that includes that byte and that stage", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-offset-01796", + "text": "For each byte in the range specified by offset and size and for each push constant range that overlaps that byte, stageFlags must include all stages in that push constant range’s VkPushConstantRange::stageFlags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-offset-00368", + "text": "offset must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-size-00369", + "text": "size must be a multiple of 4", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-offset-00370", + "text": "offset must be less than VkPhysicalDeviceLimits::maxPushConstantsSize", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-size-00371", + "text": "size must be less than or equal to VkPhysicalDeviceLimits::maxPushConstantsSize minus offset", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-None-09495", + "text": "If the dynamicPipelineLayout feature is not enabled, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-layout-09496", + "text": "If layout is VK_NULL_HANDLE, the pNext chain must include a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-layout-parameter", + "text": "If layout is not VK_NULL_HANDLE, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-pValues-parameter", + "text": "pValues must be a valid pointer to an array of size bytes", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkPushConstantsInfo-size-arraylength", + "text": "size must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetDescriptorSetLayoutSizeEXT": { + "core": [ + { + "vuid": "VUID-vkGetDescriptorSetLayoutSizeEXT-None-08011", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSizeEXT-layout-08012", + "text": "layout must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSizeEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSizeEXT-layout-parameter", + "text": "layout must be a valid VkDescriptorSetLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSizeEXT-pLayoutSizeInBytes-parameter", + "text": "pLayoutSizeInBytes must be a valid pointer to a VkDeviceSize value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutSizeEXT-layout-parent", + "text": "layout must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetDescriptorSetLayoutBindingOffsetEXT": { + "core": [ + { + "vuid": "VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-None-08013", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-layout-08014", + "text": "layout must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT flag set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-layout-parameter", + "text": "layout must be a valid VkDescriptorSetLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-pOffset-parameter", + "text": "pOffset must be a valid pointer to a VkDeviceSize value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-layout-parent", + "text": "layout must have been created, allocated, or retrieved from device", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetDescriptorEXT": { + "core": [ + { + "vuid": "VUID-vkGetDescriptorEXT-None-08015", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-dataSize-08125", + "text": "If pDescriptorInfo->type is not VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER or pDescriptorInfo->data.pCombinedImageSampler has an imageView member that was not created with a VkSamplerYcbcrConversionInfo structure in its pNext chain, dataSize must equal the size of a descriptor of type VkDescriptorGetInfoEXT::type determined by the value in VkPhysicalDeviceDescriptorBufferPropertiesEXT , or determined by VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT::combinedImageSamplerDensityMapDescriptorSize if pDescriptorInfo specifies a VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER whose VkSampler was created with VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-descriptorType-09469", + "text": "If pDescriptorInfo->type is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER and pDescriptorInfo->data.pCombinedImageSampler has an imageView member that was created with a VkSamplerYcbcrConversionInfo structure in its pNext chain, dataSize must equal the size of VkPhysicalDeviceDescriptorBufferPropertiesEXT::combinedImageSamplerDescriptorSize times VkSamplerYcbcrConversionImageFormatProperties::combinedImageSamplerDescriptorCount", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-pDescriptorInfo-09507", + "text": "If pDescriptorInfo->type is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER and it has a imageView that is VK_NULL_HANDLE then dataSize must be equal to the size of VkPhysicalDeviceDescriptorBufferPropertiesEXT::combinedImageSamplerDescriptorSize", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-pDescriptorInfo-parameter", + "text": "pDescriptorInfo must be a valid pointer to a valid VkDescriptorGetInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-pDescriptor-parameter", + "text": "pDescriptor must be a valid pointer to an array of dataSize bytes", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetDescriptorEXT-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorGetInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08018", + "text": "type must not be VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08019", + "text": "If type is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pCombinedImageSampler->sampler member of data must be a VkSampler created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08020", + "text": "If type is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pCombinedImageSampler->imageView member of data must be a VkImageView created on device, or VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08021", + "text": "If type is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pInputAttachmentImage->imageView member of data must be a VkImageView created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08022", + "text": "If type is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and if pSampledImage is not NULL, the pSampledImage->imageView member of data must be a VkImageView created on device, or VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08023", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and if pStorageImage is not NULL, the pStorageImage->imageView member of data must be a VkImageView created on device, or VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08024", + "text": "If type is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, pUniformTexelBuffer is not NULL and pUniformTexelBuffer->address is not zero, pUniformTexelBuffer->address must be an address within a VkBuffer created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08025", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pStorageTexelBuffer is not NULL and pStorageTexelBuffer->address is not zero, pStorageTexelBuffer->address must be an address within a VkBuffer created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08026", + "text": "If type is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, pUniformBuffer is not NULL and pUniformBuffer->address is not zero, pUniformBuffer->address must be an address within a VkBuffer created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08027", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, pStorageBuffer is not NULL and pStorageBuffer->address is not zero, pStorageBuffer->address must be an address within a VkBuffer created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-09427", + "text": "If type is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, pUniformBuffer is not NULL , the number of texel buffer elements given by (⌊pUniformBuffer->range / (texel block size)⌋ × (texels per block)) where texel block size and texels per block are as defined in the Compatible Formats table for pUniformBuffer->format, must be less than or equal to VkPhysicalDeviceLimits::maxTexelBufferElements", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-09428", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pStorageBuffer is not NULL , the number of texel buffer elements given by (⌊pStorageBuffer->range / (texel block size)⌋ × (texels per block)) where texel block size and texels per block are as defined in the Compatible Formats table for pStorageBuffer->format, must be less than or equal to VkPhysicalDeviceLimits::maxTexelBufferElements", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08028", + "text": "If type is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR and accelerationStructure is not 0, accelerationStructure must contain the address of a VkAccelerationStructureKHR created on device", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-08029", + "text": "If type is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV and accelerationStructure is not 0, accelerationStructure must contain the handle of a VkAccelerationStructureNV created on device, returned by vkGetAccelerationStructureHandleNV", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-09701", + "text": "If type is VK_DESCRIPTOR_TYPE_TENSOR_ARM, a VkDescriptorGetTensorInfoARM structure must be included in the pNext chain and data is ignored", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDescriptorGetTensorInfoARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-type-parameter", + "text": "type must be a valid VkDescriptorType value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pSampler-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_SAMPLER, the pSampler member of data must be a valid pointer to a valid VkSampler handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pCombinedImageSampler-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pCombinedImageSampler member of data must be a valid pointer to a valid VkDescriptorImageInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pInputAttachmentImage-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pInputAttachmentImage member of data must be a valid pointer to a valid VkDescriptorImageInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pSampledImage-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and if pSampledImage is not NULL, the pSampledImage member of data must be a valid pointer to a valid VkDescriptorImageInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pStorageImage-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and if pStorageImage is not NULL, the pStorageImage member of data must be a valid pointer to a valid VkDescriptorImageInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pUniformTexelBuffer-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, and if pUniformTexelBuffer is not NULL, the pUniformTexelBuffer member of data must be a valid pointer to a valid VkDescriptorAddressInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pStorageTexelBuffer-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and if pStorageTexelBuffer is not NULL, the pStorageTexelBuffer member of data must be a valid pointer to a valid VkDescriptorAddressInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pUniformBuffer-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, and if pUniformBuffer is not NULL, the pUniformBuffer member of data must be a valid pointer to a valid VkDescriptorAddressInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetInfoEXT-pStorageBuffer-parameter", + "text": "If type is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, and if pStorageBuffer is not NULL, the pStorageBuffer member of data must be a valid pointer to a valid VkDescriptorAddressInfoEXT structure", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorDataEXT": { + "core": [ + { + "vuid": "VUID-VkDescriptorDataEXT-type-08030", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, and pUniformBuffer->address is the address of a non-sparse buffer, then that buffer must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08031", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, and pStorageBuffer->address is the address of a non-sparse buffer, then that buffer must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08032", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, and pUniformTexelBuffer->address is the address of a non-sparse buffer, then that buffer must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08033", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and pStorageTexelBuffer->address is the address of a non-sparse buffer, then that buffer must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08034", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and the nullDescriptor feature is not enabled, pCombinedImageSampler->imageView must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08035", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and the nullDescriptor feature is not enabled, pSampledImage must not be NULL and pSampledImage->imageView must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08036", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and the nullDescriptor feature is not enabled, pStorageImage must not be NULL and pStorageImage->imageView must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08037", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, and the nullDescriptor feature is not enabled, pUniformTexelBuffer must not be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08038", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and the nullDescriptor feature is not enabled, pStorageTexelBuffer must not be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08039", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, and the nullDescriptor feature is not enabled, pUniformBuffer must not be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08040", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, and the nullDescriptor feature is not enabled, pStorageBuffer must not be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08041", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, and the nullDescriptor feature is not enabled, accelerationStructure must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorDataEXT-type-08042", + "text": "If VkDescriptorGetInfoEXT:type is VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, and the nullDescriptor feature is not enabled, accelerationStructure must not be 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorAddressInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-None-09508", + "text": "If address is not zero, and the descriptor is of type VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, then format must not be VK_FORMAT_UNDEFINED", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-address-08043", + "text": "If the nullDescriptor feature is not enabled, address must not be zero", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-nullDescriptor-08938", + "text": "If address is zero, range must be VK_WHOLE_SIZE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-nullDescriptor-08939", + "text": "If address is not zero, range must not be VK_WHOLE_SIZE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-None-08044", + "text": "If address is not zero, address must be a valid device address at an offset within a VkBuffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-range-08045", + "text": "range must be less than or equal to the size of the buffer containing address minus the offset of address from the base address of the buffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-range-08940", + "text": "range must not be zero", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorAddressInfoEXT-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorGetTensorInfoARM": { + "core": [ + { + "vuid": "VUID-VkDescriptorGetTensorInfoARM-nullDescriptor-09899", + "text": "If the nullDescriptor feature is not enabled, tensorView must not be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetTensorInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_GET_TENSOR_INFO_ARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorGetTensorInfoARM-tensorView-parameter", + "text": "tensorView must be a valid VkTensorViewARM handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdBindDescriptorBuffersEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-None-08047", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-maxSamplerDescriptorBufferBindings-08048", + "text": "There must be no more than VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxSamplerDescriptorBufferBindings elements in pBindingInfos with VkDescriptorBufferBindingInfoEXT::usage containing VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-maxResourceDescriptorBufferBindings-08049", + "text": "There must be no more than VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxResourceDescriptorBufferBindings elements in pBindingInfos with VkDescriptorBufferBindingInfoEXT::usage containing VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-None-08050", + "text": "There must be no more than 1 element in pBindingInfos with VkDescriptorBufferBindingInfoEXT::usage containing VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-bufferCount-08051", + "text": "bufferCount must be less than or equal to VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxDescriptorBufferBindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08052", + "text": "For any element of pBindingInfos, if the buffer from which address was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08053", + "text": "For any element of pBindingInfos, the buffer from which address was queried must have been created with the VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT bit set if it contains sampler descriptor data", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08054", + "text": "For any element of pBindingInfos, the buffer from which address was queried must have been created with the VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT bit set if it contains resource descriptor data", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-08055", + "text": "For any element of pBindingInfos, usage must match the buffer from which address was queried", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-pBindingInfos-parameter", + "text": "pBindingInfos must be a valid pointer to an array of bufferCount valid VkDescriptorBufferBindingInfoEXT structures", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or data_graph operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBuffersEXT-bufferCount-arraylength", + "text": "bufferCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorBufferBindingInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-None-09499", + "text": "If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must be a valid combination of VkBufferUsageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-None-09500", + "text": "If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-bufferlessPushDescriptors-08056", + "text": "If VkPhysicalDeviceDescriptorBufferPropertiesEXT::bufferlessPushDescriptors is VK_FALSE, and usage contains VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, then the pNext chain must include a VkDescriptorBufferBindingPushDescriptorBufferHandleEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-address-08057", + "text": "address must be aligned to VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-usage-08122", + "text": "If usage includes VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT, address must be an address within a valid buffer that was created with VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-usage-08123", + "text": "If usage includes VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, address must be an address within a valid buffer that was created with VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-usage-08124", + "text": "If usage includes VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT, address must be an address within a valid buffer that was created with VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkBufferUsageFlags2CreateInfo or VkDescriptorBufferBindingPushDescriptorBufferHandleEXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkDescriptorBufferBindingPushDescriptorBufferHandleEXT": { + "core": [ + { + "vuid": "VUID-VkDescriptorBufferBindingPushDescriptorBufferHandleEXT-bufferlessPushDescriptors-08059", + "text": "VkPhysicalDeviceDescriptorBufferPropertiesEXT::bufferlessPushDescriptors must be VK_FALSE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingPushDescriptorBufferHandleEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkDescriptorBufferBindingPushDescriptorBufferHandleEXT-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdSetDescriptorBufferOffsetsEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08061", + "text": "The offsets in pOffsets must be aligned to VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08063", + "text": "The offsets in pOffsets must be small enough such that any descriptor binding referenced by layout without the VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT flag computes a valid address inside the underlying VkBuffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08126", + "text": "The offsets in pOffsets must be small enough such that any location accessed by a shader as a sampler descriptor must be within VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxSamplerDescriptorBufferRange of the sampler descriptor buffer binding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-08127", + "text": "The offsets in pOffsets must be small enough such that any location accessed by a shader as a resource descriptor must be within VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxResourceDescriptorBufferRange of the resource descriptor buffer binding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pBufferIndices-08064", + "text": "Each element of pBufferIndices must be less than VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxDescriptorBufferBindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pBufferIndices-08065", + "text": "Each element of pBufferIndices must reference a valid descriptor buffer binding set by a previous call to vkCmdBindDescriptorBuffersEXT in commandBuffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-firstSet-08066", + "text": "The sum of firstSet and setCount must be less than or equal to VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-firstSet-09006", + "text": "The VkDescriptorSetLayout for each set from firstSet to firstSet + setCount when layout was created must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-None-08060", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pipelineBindPoint-08067", + "text": "pipelineBindPoint must be supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pBufferIndices-parameter", + "text": "pBufferIndices must be a valid pointer to an array of setCount uint32_t values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-pOffsets-parameter", + "text": "pOffsets must be a valid pointer to an array of setCount VkDeviceSize values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or data_graph operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-setCount-arraylength", + "text": "setCount must be greater than 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsetsEXT-commonparent", + "text": "Both of commandBuffer, and layout must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdSetDescriptorBufferOffsets2EXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-descriptorBuffer-09470", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-pSetDescriptorBufferOffsetsInfo-09471", + "text": "Each bit in pSetDescriptorBufferOffsetsInfo->stageFlags must be a stage supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-pSetDescriptorBufferOffsetsInfo-parameter", + "text": "pSetDescriptorBufferOffsetsInfo must be a valid pointer to a valid VkSetDescriptorBufferOffsetsInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or data_graph operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdSetDescriptorBufferOffsets2EXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkSetDescriptorBufferOffsetsInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08061", + "text": "The offsets in pOffsets must be aligned to VkPhysicalDeviceDescriptorBufferPropertiesEXT::descriptorBufferOffsetAlignment", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08063", + "text": "The offsets in pOffsets must be small enough such that any descriptor binding referenced by layout without the VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT flag computes a valid address inside the underlying VkBuffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08126", + "text": "The offsets in pOffsets must be small enough such that any location accessed by a shader as a sampler descriptor must be within VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxSamplerDescriptorBufferRange of the sampler descriptor buffer binding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-08127", + "text": "The offsets in pOffsets must be small enough such that any location accessed by a shader as a resource descriptor must be within VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxResourceDescriptorBufferRange of the resource descriptor buffer binding", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pBufferIndices-08064", + "text": "Each element of pBufferIndices must be less than VkPhysicalDeviceDescriptorBufferPropertiesEXT::maxDescriptorBufferBindings", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pBufferIndices-08065", + "text": "Each element of pBufferIndices must reference a valid descriptor buffer binding set by a previous call to vkCmdBindDescriptorBuffersEXT in commandBuffer", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-firstSet-08066", + "text": "The sum of firstSet and setCount must be less than or equal to VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-firstSet-09006", + "text": "The VkDescriptorSetLayout for each set from firstSet to firstSet + setCount when layout was created must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-None-09495", + "text": "If the dynamicPipelineLayout feature is not enabled, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-layout-09496", + "text": "If layout is VK_NULL_HANDLE, the pNext chain must include a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-layout-parameter", + "text": "If layout is not VK_NULL_HANDLE, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pBufferIndices-parameter", + "text": "pBufferIndices must be a valid pointer to an array of setCount uint32_t values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-pOffsets-parameter", + "text": "pOffsets must be a valid pointer to an array of setCount VkDeviceSize values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSetDescriptorBufferOffsetsInfoEXT-setCount-arraylength", + "text": "setCount must be greater than 0", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdBindDescriptorBufferEmbeddedSamplersEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-set-08070", + "text": "The VkDescriptorSetLayout at index set when layout was created must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-set-08071", + "text": "set must be less than or equal to VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-None-08068", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-pipelineBindPoint-08069", + "text": "pipelineBindPoint must be supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-commonparent", + "text": "Both of commandBuffer, and layout must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT": { + "core": [ + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-descriptorBuffer-09472", + "text": "The descriptorBuffer feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-pBindDescriptorBufferEmbeddedSamplersInfo-09473", + "text": "Each bit in pBindDescriptorBufferEmbeddedSamplersInfo->stageFlags must be a stage supported by the commandBuffer’s parent VkCommandPool’s queue family", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-pBindDescriptorBufferEmbeddedSamplersInfo-parameter", + "text": "pBindDescriptorBufferEmbeddedSamplersInfo must be a valid pointer to a valid VkBindDescriptorBufferEmbeddedSamplersInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkBindDescriptorBufferEmbeddedSamplersInfoEXT": { + "core": [ + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-set-08070", + "text": "The VkDescriptorSetLayout at index set when layout was created must have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT bit set", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-set-08071", + "text": "set must be less than or equal to VkPipelineLayoutCreateInfo::setLayoutCount provided when layout was created", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-None-09495", + "text": "If the dynamicPipelineLayout feature is not enabled, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-layout-09496", + "text": "If layout is VK_NULL_HANDLE, the pNext chain must include a valid VkPipelineLayoutCreateInfo structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-stageFlags-parameter", + "text": "stageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-stageFlags-requiredbitmask", + "text": "stageFlags must not be 0", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBindDescriptorBufferEmbeddedSamplersInfoEXT-layout-parameter", + "text": "If layout is not VK_NULL_HANDLE, layout must be a valid VkPipelineLayout handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetBufferOpaqueCaptureDescriptorDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-None-08072", + "text": "The descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-pData-08073", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferPropertiesEXT::bufferCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-device-08074", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkBufferCaptureDescriptorDataInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkBufferCaptureDescriptorDataInfoEXT": { + "core": [ + { + "vuid": "VUID-VkBufferCaptureDescriptorDataInfoEXT-buffer-08075", + "text": "buffer must have been created with VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in VkBufferCreateInfo::flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBufferCaptureDescriptorDataInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBufferCaptureDescriptorDataInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkBufferCaptureDescriptorDataInfoEXT-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetImageOpaqueCaptureDescriptorDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-None-08076", + "text": "The descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-pData-08077", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferPropertiesEXT::imageCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-device-08078", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkImageCaptureDescriptorDataInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkImageCaptureDescriptorDataInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImageCaptureDescriptorDataInfoEXT-image-08079", + "text": "image must have been created with VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in VkImageCreateInfo::flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkImageCaptureDescriptorDataInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkImageCaptureDescriptorDataInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkImageCaptureDescriptorDataInfoEXT-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetImageViewOpaqueCaptureDescriptorDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-None-08080", + "text": "The descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-pData-08081", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferPropertiesEXT::imageViewCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-device-08082", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkImageViewCaptureDescriptorDataInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkImageViewCaptureDescriptorDataInfoEXT": { + "core": [ + { + "vuid": "VUID-VkImageViewCaptureDescriptorDataInfoEXT-imageView-08083", + "text": "imageView must have been created with VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in VkImageViewCreateInfo::flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkImageViewCaptureDescriptorDataInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkImageViewCaptureDescriptorDataInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkImageViewCaptureDescriptorDataInfoEXT-imageView-parameter", + "text": "imageView must be a valid VkImageView handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetSamplerOpaqueCaptureDescriptorDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-None-08084", + "text": "The descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-pData-08085", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferPropertiesEXT::samplerCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-device-08086", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkSamplerCaptureDescriptorDataInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkSamplerCaptureDescriptorDataInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSamplerCaptureDescriptorDataInfoEXT-sampler-08087", + "text": "sampler must have been created with VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in VkSamplerCreateInfo::flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSamplerCaptureDescriptorDataInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSamplerCaptureDescriptorDataInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkSamplerCaptureDescriptorDataInfoEXT-sampler-parameter", + "text": "sampler must be a valid VkSampler handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT": { + "core": [ + { + "vuid": "VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-None-08088", + "text": "The descriptorBufferCaptureReplay feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-pData-08089", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferPropertiesEXT::accelerationStructureCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-device-08090", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkAccelerationStructureCaptureDescriptorDataInfoEXT structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkAccelerationStructureCaptureDescriptorDataInfoEXT": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructure-08091", + "text": "If accelerationStructure is not VK_NULL_HANDLE then accelerationStructure must have been created with VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in VkAccelerationStructureCreateInfoKHR::createFlags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructureNV-08092", + "text": "If accelerationStructureNV is not VK_NULL_HANDLE then accelerationStructureNV must have been created with VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT set in VkAccelerationStructureCreateInfoNV::info.flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructure-08093", + "text": "If accelerationStructure is not VK_NULL_HANDLE then accelerationStructureNV must be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructureNV-08094", + "text": "If accelerationStructureNV is not VK_NULL_HANDLE then accelerationStructure must be VK_NULL_HANDLE", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructure-parameter", + "text": "If accelerationStructure is not VK_NULL_HANDLE, accelerationStructure must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-accelerationStructureNV-parameter", + "text": "If accelerationStructureNV is not VK_NULL_HANDLE, accelerationStructureNV must be a valid VkAccelerationStructureNV handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkAccelerationStructureCaptureDescriptorDataInfoEXT-commonparent", + "text": "Both of accelerationStructure, and accelerationStructureNV that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkOpaqueCaptureDescriptorDataCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkOpaqueCaptureDescriptorDataCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkOpaqueCaptureDescriptorDataCreateInfoEXT-opaqueCaptureDescriptorData-parameter", + "text": "opaqueCaptureDescriptorData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetTensorOpaqueCaptureDescriptorDataARM": { + "core": [ + { + "vuid": "VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-descriptorBufferCaptureReplay-09702", + "text": "The descriptorBufferCaptureReplay and pname::descriptorBufferTensorDescriptors features must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-pData-09703", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferTensorPropertiesARM::tensorCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-device-09704", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkTensorCaptureDescriptorDataInfoARM structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkTensorCaptureDescriptorDataInfoARM": { + "core": [ + { + "vuid": "VUID-VkTensorCaptureDescriptorDataInfoARM-tensor-09705", + "text": "If tensor is not VK_NULL_HANDLE then tensor must have been created with VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM set in VkTensorCreateInfoARM::flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkTensorCaptureDescriptorDataInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_CAPTURE_DESCRIPTOR_DATA_INFO_ARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkTensorCaptureDescriptorDataInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkTensorCaptureDescriptorDataInfoARM-tensor-parameter", + "text": "tensor must be a valid VkTensorARM handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkGetTensorViewOpaqueCaptureDescriptorDataARM": { + "core": [ + { + "vuid": "VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-descriptorBufferCaptureReplay-09706", + "text": "The descriptorBufferCaptureReplay and pname::descriptorBufferTensorDescriptors features must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-pData-09707", + "text": "pData must point to a buffer that is at least VkPhysicalDeviceDescriptorBufferTensorPropertiesARM::tensorViewCaptureReplayDescriptorDataSize bytes in size", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-device-09708", + "text": "If device was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkTensorViewCaptureDescriptorDataInfoARM structure", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/descriptorsets.html" + } + ] + }, + "VkTensorViewCaptureDescriptorDataInfoARM": { + "core": [ + { + "vuid": "VUID-VkTensorViewCaptureDescriptorDataInfoARM-tensorView-09709", + "text": "If tensorView is not VK_NULL_HANDLE then tensorView must have been created with VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM set in VkTensorViewCreateInfoARM::flags", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkTensorViewCaptureDescriptorDataInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_ARM", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkTensorViewCaptureDescriptorDataInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/descriptorsets.html" + }, + { + "vuid": "VUID-VkTensorViewCaptureDescriptorDataInfoARM-tensorView-parameter", + "text": "tensorView must be a valid VkTensorViewARM handle", + "page": "chapters/descriptorsets.html" + } + ] + }, + "vkCmdSetRenderingAttachmentLocations": { + "core": [ + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-dynamicRenderingLocalRead-09509", + "text": "dynamicRenderingLocalRead must be enabled", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-pLocationInfo-09510", + "text": "pLocationInfo->colorAttachmentCount must be equal to the value of VkRenderingInfo::colorAttachmentCount used to begin the current render pass instance", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-commandBuffer-09511", + "text": "The current render pass instance must have been started or resumed by vkCmdBeginRendering in this commandBuffer", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-pLocationInfo-parameter", + "text": "pLocationInfo must be a valid pointer to a valid VkRenderingAttachmentLocationInfo structure", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingAttachmentLocations-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/interfaces.html" + } + ] + }, + "VkRenderingAttachmentLocationInfo": { + "core": [ + { + "vuid": "VUID-VkRenderingAttachmentLocationInfo-dynamicRenderingLocalRead-09512", + "text": "If the dynamicRenderingLocalRead feature is not enabled, and pColorAttachmentLocations is not NULL, each element must be the value of its index within the array", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentLocationInfo-pColorAttachmentLocations-09513", + "text": "Elements of pColorAttachmentLocations that are not VK_ATTACHMENT_UNUSED must each be unique", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentLocationInfo-colorAttachmentCount-09514", + "text": "colorAttachmentCount must be less than or equal to maxColorAttachments", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentLocationInfo-pColorAttachmentLocations-09515", + "text": "Each element of pColorAttachmentLocations must be less than maxColorAttachments", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingAttachmentLocationInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO", + "page": "chapters/interfaces.html" + } + ] + }, + "vkCmdSetRenderingInputAttachmentIndices": { + "core": [ + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-dynamicRenderingLocalRead-09516", + "text": "dynamicRenderingLocalRead must be enabled", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-pInputAttachmentIndexInfo-09517", + "text": "pInputAttachmentIndexInfo->colorAttachmentCount must be equal to the value of VkRenderingInfo::colorAttachmentCount used to begin the current render pass instance", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-commandBuffer-09518", + "text": "The current render pass instance must have been started or resumed by vkCmdBeginRendering in this commandBuffer", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-pInputAttachmentIndexInfo-parameter", + "text": "pInputAttachmentIndexInfo must be a valid pointer to a valid VkRenderingInputAttachmentIndexInfo structure", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-vkCmdSetRenderingInputAttachmentIndices-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/interfaces.html" + } + ] + }, + "VkRenderingInputAttachmentIndexInfo": { + "core": [ + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-dynamicRenderingLocalRead-09519", + "text": "If the dynamicRenderingLocalRead feature is not enabled, and pColorAttachmentInputIndices is not NULL, each element must be VK_ATTACHMENT_UNUSED", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-dynamicRenderingLocalRead-09520", + "text": "If the dynamicRenderingLocalRead feature is not enabled, pDepthInputAttachmentIndex must be a valid pointer to a value of VK_ATTACHMENT_UNUSED", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-dynamicRenderingLocalRead-09521", + "text": "If the dynamicRenderingLocalRead feature is not enabled, pStencilInputAttachmentIndex must be a valid pointer to a value of VK_ATTACHMENT_UNUSED", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-pColorAttachmentInputIndices-09522", + "text": "Elements of pColorAttachmentInputIndices that are not VK_ATTACHMENT_UNUSED must each be unique", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-pColorAttachmentInputIndices-09523", + "text": "Elements of pColorAttachmentInputIndices that are not VK_ATTACHMENT_UNUSED must not take the same value as the content of pDepthInputAttachmentIndex", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-pColorAttachmentInputIndices-09524", + "text": "Elements of pColorAttachmentInputIndices that are not VK_ATTACHMENT_UNUSED must not take the same value as the content of pStencilInputAttachmentIndex", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-colorAttachmentCount-09525", + "text": "colorAttachmentCount must be less than or equal to maxColorAttachments", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-pColorAttachmentInputIndices-parameter", + "text": "If colorAttachmentCount is not 0, and pColorAttachmentInputIndices is not NULL, pColorAttachmentInputIndices must be a valid pointer to an array of colorAttachmentCount uint32_t values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-pDepthInputAttachmentIndex-parameter", + "text": "If pDepthInputAttachmentIndex is not NULL, pDepthInputAttachmentIndex must be a valid pointer to a valid uint32_t value", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VkRenderingInputAttachmentIndexInfo-pStencilInputAttachmentIndex-parameter", + "text": "If pStencilInputAttachmentIndex is not NULL, pStencilInputAttachmentIndex must be a valid pointer to a valid uint32_t value", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordKHR": { + "core": [ + { + "vuid": "VUID-BaryCoordKHR-BaryCoordKHR-04154", + "text": "The BaryCoordKHR decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordKHR-BaryCoordKHR-04155", + "text": "The variable decorated with BaryCoordKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordKHR-BaryCoordKHR-04156", + "text": "The variable decorated with BaryCoordKHR must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordNoPerspAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordNoPerspAMD-BaryCoordNoPerspAMD-04157", + "text": "The BaryCoordNoPerspAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspAMD-BaryCoordNoPerspAMD-04158", + "text": "The variable decorated with BaryCoordNoPerspAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspAMD-BaryCoordNoPerspAMD-04159", + "text": "The variable decorated with BaryCoordNoPerspAMD must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordNoPerspKHR": { + "core": [ + { + "vuid": "VUID-BaryCoordNoPerspKHR-BaryCoordNoPerspKHR-04160", + "text": "The BaryCoordNoPerspKHR decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspKHR-BaryCoordNoPerspKHR-04161", + "text": "The variable decorated with BaryCoordNoPerspKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspKHR-BaryCoordNoPerspKHR-04162", + "text": "The variable decorated with BaryCoordNoPerspKHR must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordNoPerspCentroidAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordNoPerspCentroidAMD-BaryCoordNoPerspCentroidAMD-04163", + "text": "The BaryCoordNoPerspCentroidAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspCentroidAMD-BaryCoordNoPerspCentroidAMD-04164", + "text": "The variable decorated with BaryCoordNoPerspCentroidAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspCentroidAMD-BaryCoordNoPerspCentroidAMD-04165", + "text": "The variable decorated with BaryCoordNoPerspCentroidAMD must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordNoPerspSampleAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordNoPerspSampleAMD-BaryCoordNoPerspSampleAMD-04166", + "text": "The BaryCoordNoPerspSampleAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspSampleAMD-BaryCoordNoPerspSampleAMD-04167", + "text": "The variable decorated with BaryCoordNoPerspSampleAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordNoPerspSampleAMD-BaryCoordNoPerspSampleAMD-04168", + "text": "The variable decorated with BaryCoordNoPerspSampleAMD must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordPullModelAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordPullModelAMD-BaryCoordPullModelAMD-04169", + "text": "The BaryCoordPullModelAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordPullModelAMD-BaryCoordPullModelAMD-04170", + "text": "The variable decorated with BaryCoordPullModelAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordPullModelAMD-BaryCoordPullModelAMD-04171", + "text": "The variable decorated with BaryCoordPullModelAMD must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordSmoothAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordSmoothAMD-BaryCoordSmoothAMD-04172", + "text": "The BaryCoordSmoothAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordSmoothAMD-BaryCoordSmoothAMD-04173", + "text": "The variable decorated with BaryCoordSmoothAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordSmoothAMD-BaryCoordSmoothAMD-04174", + "text": "The variable decorated with BaryCoordSmoothAMD must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordSmoothCentroidAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordSmoothCentroidAMD-BaryCoordSmoothCentroidAMD-04175", + "text": "The BaryCoordSmoothCentroidAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordSmoothCentroidAMD-BaryCoordSmoothCentroidAMD-04176", + "text": "The variable decorated with BaryCoordSmoothCentroidAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordSmoothCentroidAMD-BaryCoordSmoothCentroidAMD-04177", + "text": "The variable decorated with BaryCoordSmoothCentroidAMD must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaryCoordSmoothSampleAMD": { + "core": [ + { + "vuid": "VUID-BaryCoordSmoothSampleAMD-BaryCoordSmoothSampleAMD-04178", + "text": "The BaryCoordSmoothSampleAMD decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordSmoothSampleAMD-BaryCoordSmoothSampleAMD-04179", + "text": "The variable decorated with BaryCoordSmoothSampleAMD must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaryCoordSmoothSampleAMD-BaryCoordSmoothSampleAMD-04180", + "text": "The variable decorated with BaryCoordSmoothSampleAMD must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "BaseInstance": { + "core": [ + { + "vuid": "VUID-BaseInstance-BaseInstance-04181", + "text": "The BaseInstance decoration must be used only within the Vertex Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaseInstance-BaseInstance-04182", + "text": "The variable decorated with BaseInstance must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaseInstance-BaseInstance-04183", + "text": "The variable decorated with BaseInstance must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "BaseVertex": { + "core": [ + { + "vuid": "VUID-BaseVertex-BaseVertex-04184", + "text": "The BaseVertex decoration must be used only within the Vertex Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaseVertex-BaseVertex-04185", + "text": "The variable decorated with BaseVertex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-BaseVertex-BaseVertex-04186", + "text": "The variable decorated with BaseVertex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "ClipDistance": { + "core": [ + { + "vuid": "VUID-ClipDistance-ClipDistance-04187", + "text": "The ClipDistance decoration must be used only within the MeshEXT, MeshNV, Vertex, Fragment, TessellationControl, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistance-ClipDistance-04188", + "text": "The variable decorated with ClipDistance within the MeshEXT, MeshNV, or Vertex Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistance-ClipDistance-04189", + "text": "The variable decorated with ClipDistance within the Fragment Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistance-ClipDistance-04190", + "text": "The variable decorated with ClipDistance within the TessellationControl, TessellationEvaluation, or Geometry Execution Model must not be declared in a Storage Class other than Input or Output", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistance-ClipDistance-04191", + "text": "The variable decorated with ClipDistance must be declared as an array of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "ClipDistancePerViewNV": { + "core": [ + { + "vuid": "VUID-ClipDistancePerViewNV-ClipDistancePerViewNV-04192", + "text": "The ClipDistancePerViewNV decoration must be used only within the MeshNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistancePerViewNV-ClipDistancePerViewNV-04193", + "text": "The variable decorated with ClipDistancePerViewNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistancePerViewNV-ClipDistancePerViewNV-04194", + "text": "The variable decorated with ClipDistancePerViewNV must also be decorated with the PerViewNV decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClipDistancePerViewNV-ClipDistancePerViewNV-04195", + "text": "The variable decorated with ClipDistancePerViewNV must be declared as a two-dimensional array of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "ClusterIDHUAWEI": { + "core": [ + { + "vuid": "VUID-ClusterIDHUAWEI-ClusterIDHUAWEI-07797", + "text": "The ClusterIDHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClusterIDHUAWEI-ClusterIDHUAWEI-07798", + "text": "The variable decorated with ClusterIDHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "ClusterShadingRateHUAWEI": { + "core": [ + { + "vuid": "VUID-ClusterShadingRateHUAWEI-ClusterShadingRateHUAWEI-09448", + "text": "The ClusterShadingRateHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClusterShadingRateHUAWEI-ClusterShadingRateHUAWEI-09449", + "text": "The variable decorated with ClusterShadingRateHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "CullDistance": { + "core": [ + { + "vuid": "VUID-CullDistance-CullDistance-04196", + "text": "The CullDistance decoration must be used only within the MeshEXT, MeshNV, Vertex, Fragment, TessellationControl, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistance-CullDistance-04197", + "text": "The variable decorated with CullDistance within the MeshEXT, MeshNV or Vertex Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistance-CullDistance-04198", + "text": "The variable decorated with CullDistance within the Fragment Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistance-CullDistance-04199", + "text": "The variable decorated with CullDistance within the TessellationControl, TessellationEvaluation, or Geometry Execution Model must not be declared using a Storage Class other than Input or Output", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistance-CullDistance-04200", + "text": "The variable decorated with CullDistance must be declared as an array of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "CullDistancePerViewNV": { + "core": [ + { + "vuid": "VUID-CullDistancePerViewNV-CullDistancePerViewNV-04201", + "text": "The CullDistancePerViewNV decoration must be used only within the MeshNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistancePerViewNV-CullDistancePerViewNV-04202", + "text": "The variable decorated with CullDistancePerViewNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistancePerViewNV-CullDistancePerViewNV-04203", + "text": "The variable decorated with CullDistancePerViewNV must also be decorated with the PerViewNV decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullDistancePerViewNV-CullDistancePerViewNV-04204", + "text": "The variable decorated with CullDistancePerViewNV must be declared as a two-dimensional array of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "CullPrimitiveEXT": { + "core": [ + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-07034", + "text": "The CullPrimitiveEXT decoration must be used only within the MeshEXT Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-07035", + "text": "The variable decorated with CullPrimitiveEXT must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-07036", + "text": "CullPrimitiveEXT must decorate a scalar boolean member of a structure decorated as Block, or decorate a variable of type OpTypeArray of boolean values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-10589", + "text": "If CullPrimitiveEXT is declared as an array of boolean values, the size of the array must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-10590", + "text": "If CullPrimitiveEXT decorates a member of a structure, the variable declaration of the containing Block type must have an array size that matches the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-10591", + "text": "There must be only one declaration of the CullPrimitiveEXT associated with a entry point’s interface", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullPrimitiveEXT-CullPrimitiveEXT-07038", + "text": "The variable decorated with CullPrimitiveEXT within the MeshEXT Execution Model must also be decorated with the PerPrimitiveEXT decoration", + "page": "chapters/interfaces.html" + } + ] + }, + "CullMaskKHR": { + "core": [ + { + "vuid": "VUID-CullMaskKHR-CullMaskKHR-06735", + "text": "The CullMaskKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullMaskKHR-CullMaskKHR-06736", + "text": "The variable decorated with CullMaskKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CullMaskKHR-CullMaskKHR-06737", + "text": "The variable decorated with CullMaskKHR must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "CurrentRayTimeNV": { + "core": [ + { + "vuid": "VUID-CurrentRayTimeNV-CurrentRayTimeNV-04942", + "text": "The CurrentRayTimeNV decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CurrentRayTimeNV-CurrentRayTimeNV-04943", + "text": "The variable decorated with CurrentRayTimeNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CurrentRayTimeNV-CurrentRayTimeNV-04944", + "text": "The variable decorated with CurrentRayTimeNV must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + } + ] + }, + "DeviceIndex": { + "core": [ + { + "vuid": "VUID-DeviceIndex-DeviceIndex-04205", + "text": "The variable decorated with DeviceIndex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-DeviceIndex-DeviceIndex-04206", + "text": "The variable decorated with DeviceIndex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "DrawIndex": { + "core": [ + { + "vuid": "VUID-DrawIndex-DrawIndex-04207", + "text": "The DrawIndex decoration must be used only within the Vertex, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-DrawIndex-DrawIndex-04208", + "text": "The variable decorated with DrawIndex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-DrawIndex-DrawIndex-04209", + "text": "The variable decorated with DrawIndex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "FirstIndexHUAWEI": { + "core": [ + { + "vuid": "VUID-FirstIndexHUAWEI-FirstIndexHUAWEI-07799", + "text": "The FirstIndexHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FirstIndexHUAWEI-FirstIndexHUAWEI-07800", + "text": "The variable decorated with FirstIndexHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "FragCoord": { + "core": [ + { + "vuid": "VUID-FragCoord-FragCoord-04210", + "text": "The FragCoord decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragCoord-FragCoord-04211", + "text": "The variable decorated with FragCoord must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragCoord-FragCoord-04212", + "text": "The variable decorated with FragCoord must be declared as a four-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "FragDepth": { + "core": [ + { + "vuid": "VUID-FragDepth-FragDepth-04213", + "text": "The FragDepth decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragDepth-FragDepth-04214", + "text": "The variable decorated with FragDepth must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragDepth-FragDepth-04215", + "text": "The variable decorated with FragDepth must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragDepth-FragDepth-04216", + "text": "If the shader dynamically writes to the variable decorated with FragDepth, the DepthReplacing Execution Mode must be declared", + "page": "chapters/interfaces.html" + } + ] + }, + "FirstInstanceHUAWEI": { + "core": [ + { + "vuid": "VUID-FirstInstanceHUAWEI-FirstInstanceHUAWEI-07801", + "text": "The FirstInstanceHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FirstInstanceHUAWEI-FirstInstanceHUAWEI-07802", + "text": "The variable decorated with FirstInstanceHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "FirstVertexHUAWEI": { + "core": [ + { + "vuid": "VUID-FirstVertexHUAWEI-FirstVertexHUAWEI-07803", + "text": "The FirstVertexHUAWEI decoration must be used only within the FirstVertexHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FirstVertexHUAWEI-FirstVertexHUAWEI-07804", + "text": "The variable decorated with FirstVertexHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "FragInvocationCountEXT": { + "core": [ + { + "vuid": "VUID-FragInvocationCountEXT-FragInvocationCountEXT-04217", + "text": "The FragInvocationCountEXT decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragInvocationCountEXT-FragInvocationCountEXT-04218", + "text": "The variable decorated with FragInvocationCountEXT must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragInvocationCountEXT-FragInvocationCountEXT-04219", + "text": "The variable decorated with FragInvocationCountEXT must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "FragSizeEXT": { + "core": [ + { + "vuid": "VUID-FragSizeEXT-FragSizeEXT-04220", + "text": "The FragSizeEXT decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragSizeEXT-FragSizeEXT-04221", + "text": "The variable decorated with FragSizeEXT must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragSizeEXT-FragSizeEXT-04222", + "text": "The variable decorated with FragSizeEXT must be declared as a two-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "FragStencilRefEXT": { + "core": [ + { + "vuid": "VUID-FragStencilRefEXT-FragStencilRefEXT-04223", + "text": "The FragStencilRefEXT decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragStencilRefEXT-FragStencilRefEXT-04224", + "text": "The variable decorated with FragStencilRefEXT must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragStencilRefEXT-FragStencilRefEXT-04225", + "text": "The variable decorated with FragStencilRefEXT must be declared as a scalar integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "FragmentSizeNV": { + "core": [ + { + "vuid": "VUID-FragmentSizeNV-FragmentSizeNV-04226", + "text": "The FragmentSizeNV decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragmentSizeNV-FragmentSizeNV-04227", + "text": "The variable decorated with FragmentSizeNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FragmentSizeNV-FragmentSizeNV-04228", + "text": "The variable decorated with FragmentSizeNV must be declared as a two-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "FrontFacing": { + "core": [ + { + "vuid": "VUID-FrontFacing-FrontFacing-04229", + "text": "The FrontFacing decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FrontFacing-FrontFacing-04230", + "text": "The variable decorated with FrontFacing must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FrontFacing-FrontFacing-04231", + "text": "The variable decorated with FrontFacing must be declared as a boolean value", + "page": "chapters/interfaces.html" + } + ] + }, + "FullyCoveredEXT": { + "core": [ + { + "vuid": "VUID-FullyCoveredEXT-FullyCoveredEXT-04232", + "text": "The FullyCoveredEXT decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FullyCoveredEXT-FullyCoveredEXT-04233", + "text": "The variable decorated with FullyCoveredEXT must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FullyCoveredEXT-FullyCoveredEXT-04234", + "text": "The variable decorated with FullyCoveredEXT must be declared as a boolean value", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-FullyCoveredEXT-conservativeRasterizationPostDepthCoverage-04235", + "text": "If VkPhysicalDeviceConservativeRasterizationPropertiesEXT::conservativeRasterizationPostDepthCoverage is not supported the PostDepthCoverage Execution Mode must not be declared, when a variable with the FullyCoveredEXT decoration is declared", + "page": "chapters/interfaces.html" + } + ] + }, + "GlobalInvocationId": { + "core": [ + { + "vuid": "VUID-GlobalInvocationId-GlobalInvocationId-04236", + "text": "The GlobalInvocationId decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-GlobalInvocationId-GlobalInvocationId-04237", + "text": "The variable decorated with GlobalInvocationId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-GlobalInvocationId-GlobalInvocationId-04238", + "text": "The variable decorated with GlobalInvocationId must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "HelperInvocation": { + "core": [ + { + "vuid": "VUID-HelperInvocation-HelperInvocation-04239", + "text": "The HelperInvocation decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HelperInvocation-HelperInvocation-04240", + "text": "The variable decorated with HelperInvocation must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HelperInvocation-HelperInvocation-04241", + "text": "The variable decorated with HelperInvocation must be declared as a boolean value", + "page": "chapters/interfaces.html" + } + ] + }, + "HitKindKHR": { + "core": [ + { + "vuid": "VUID-HitKindKHR-HitKindKHR-04242", + "text": "The HitKindKHR decoration must be used only within the AnyHitKHR or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitKindKHR-HitKindKHR-04243", + "text": "The variable decorated with HitKindKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitKindKHR-HitKindKHR-04244", + "text": "The variable decorated with HitKindKHR must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "HitTNV": { + "core": [ + { + "vuid": "VUID-HitTNV-HitTNV-04245", + "text": "The HitTNV decoration must be used only within the AnyHitNV or ClosestHitNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitTNV-HitTNV-04246", + "text": "The variable decorated with HitTNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitTNV-HitTNV-04247", + "text": "The variable decorated with HitTNV must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + } + ] + }, + "HitTriangleVertexPositionsKHR": { + "core": [ + { + "vuid": "VUID-HitTriangleVertexPositionsKHR-HitTriangleVertexPositionsKHR-08747", + "text": "The HitTriangleVertexPositionsKHR decoration must be used only within the AnyHitKHR or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitTriangleVertexPositionsKHR-HitTriangleVertexPositionsKHR-08748", + "text": "The variable decorated with HitTriangleVertexPositionsKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitTriangleVertexPositionsKHR-HitTriangleVertexPositionsKHR-08749", + "text": "The variable decorated with HitTriangleVertexPositionsKHR must be declared as an array of three vectors of three 32-bit float values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitTriangleVertexPositionsKHR-HitTriangleVertexPositionsKHR-08750", + "text": "The variable decorated with HitTriangleVertexPositionsKHR must be used only if the value of HitKindKHR is HitKindFrontFacingTriangleKHR or HitKindBackFacingTriangleKHR", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitTriangleVertexPositionsKHR-None-08751", + "text": "The acceleration structure corresponding to the current intersection must have been built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR", + "page": "chapters/interfaces.html" + } + ] + }, + "IncomingRayFlagsKHR": { + "core": [ + { + "vuid": "VUID-IncomingRayFlagsKHR-IncomingRayFlagsKHR-04248", + "text": "The IncomingRayFlagsKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-IncomingRayFlagsKHR-IncomingRayFlagsKHR-04249", + "text": "The variable decorated with IncomingRayFlagsKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-IncomingRayFlagsKHR-IncomingRayFlagsKHR-04250", + "text": "The variable decorated with IncomingRayFlagsKHR must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "IndexCountHUAWEI": { + "core": [ + { + "vuid": "VUID-IndexCountHUAWEI-IndexCountHUAWEI-07805", + "text": "The IndexCountHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-IndexCountHUAWEI-IndexCountHUAWEI-07806", + "text": "The variable decorated with IndexCountHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "InstanceCountHUAWEI": { + "core": [ + { + "vuid": "VUID-InstanceCountHUAWEI-InstanceCountHUAWEI-07807", + "text": "The InstanceCountHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceCountHUAWEI-InstanceCountHUAWEI-07808", + "text": "The variable decorated with InstanceCountHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "InstanceCustomIndexKHR": { + "core": [ + { + "vuid": "VUID-InstanceCustomIndexKHR-InstanceCustomIndexKHR-04251", + "text": "The InstanceCustomIndexKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceCustomIndexKHR-InstanceCustomIndexKHR-04252", + "text": "The variable decorated with InstanceCustomIndexKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceCustomIndexKHR-InstanceCustomIndexKHR-04253", + "text": "The variable decorated with InstanceCustomIndexKHR must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "InstanceId": { + "core": [ + { + "vuid": "VUID-InstanceId-InstanceId-04254", + "text": "The InstanceId decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceId-InstanceId-04255", + "text": "The variable decorated with InstanceId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceId-InstanceId-04256", + "text": "The variable decorated with InstanceId must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "InvocationId": { + "core": [ + { + "vuid": "VUID-InvocationId-InvocationId-04257", + "text": "The InvocationId decoration must be used only within the TessellationControl or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InvocationId-InvocationId-04258", + "text": "The variable decorated with InvocationId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InvocationId-InvocationId-04259", + "text": "The variable decorated with InvocationId must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "InvocationsPerPixelNV": { + "core": [ + { + "vuid": "VUID-InvocationsPerPixelNV-InvocationsPerPixelNV-04260", + "text": "The InvocationsPerPixelNV decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InvocationsPerPixelNV-InvocationsPerPixelNV-04261", + "text": "The variable decorated with InvocationsPerPixelNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InvocationsPerPixelNV-InvocationsPerPixelNV-04262", + "text": "The variable decorated with InvocationsPerPixelNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "InstanceIndex": { + "core": [ + { + "vuid": "VUID-InstanceIndex-InstanceIndex-04263", + "text": "The InstanceIndex decoration must be used only within the Vertex Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceIndex-InstanceIndex-04264", + "text": "The variable decorated with InstanceIndex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-InstanceIndex-InstanceIndex-04265", + "text": "The variable decorated with InstanceIndex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "LaunchIdKHR": { + "core": [ + { + "vuid": "VUID-LaunchIdKHR-LaunchIdKHR-04266", + "text": "The LaunchIdKHR decoration must be used only within the RayGenerationKHR, IntersectionKHR, AnyHitKHR, ClosestHitKHR, MissKHR, or CallableKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LaunchIdKHR-LaunchIdKHR-04267", + "text": "The variable decorated with LaunchIdKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LaunchIdKHR-LaunchIdKHR-04268", + "text": "The variable decorated with LaunchIdKHR must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "LaunchSizeKHR": { + "core": [ + { + "vuid": "VUID-LaunchSizeKHR-LaunchSizeKHR-04269", + "text": "The LaunchSizeKHR decoration must be used only within the RayGenerationKHR, IntersectionKHR, AnyHitKHR, ClosestHitKHR, MissKHR, or CallableKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LaunchSizeKHR-LaunchSizeKHR-04270", + "text": "The variable decorated with LaunchSizeKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LaunchSizeKHR-LaunchSizeKHR-04271", + "text": "The variable decorated with LaunchSizeKHR must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "Layer": { + "core": [ + { + "vuid": "VUID-Layer-Layer-04272", + "text": "The Layer decoration must be used only within the MeshEXT, MeshNV, Vertex, TessellationEvaluation, Geometry, or Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-04273", + "text": "If the shaderOutputLayer feature is not enabled then the Layer decoration must be used only within the Geometry or Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-04274", + "text": "The variable decorated with Layer within the MeshEXT, MeshNV, Vertex, TessellationEvaluation, or Geometry Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-04275", + "text": "The variable decorated with Layer within the Fragment Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-04276", + "text": "The variable decorated with Layer must be declared as a scalar 32-bit integer value for all supported execution models except MeshEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-07039", + "text": "The variable decorated with Layer within the MeshEXT Execution Model must also be decorated with the PerPrimitiveEXT decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-10592", + "text": "Layer within the MeshEXT Execution Model must decorate a scalar 32-bit integer member of a structure decorated as Block, or decorate a variable of type OpTypeArray of scalar 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-10593", + "text": "If Layer is declared as an array of boolean values, the size of the array must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Layer-Layer-10594", + "text": "If Layer decorates a member of a structure, the variable declaration of the containing Block type must have an array size that matches the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "LayerPerViewNV": { + "core": [ + { + "vuid": "VUID-LayerPerViewNV-LayerPerViewNV-04277", + "text": "The LayerPerViewNV decoration must be used only within the MeshNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LayerPerViewNV-LayerPerViewNV-04278", + "text": "The variable decorated with LayerPerViewNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LayerPerViewNV-LayerPerViewNV-04279", + "text": "The variable decorated with LayerPerViewNV must also be decorated with the PerViewNV decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LayerPerViewNV-LayerPerViewNV-04280", + "text": "The variable decorated with LayerPerViewNV must be declared as an array of scalar 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "LocalInvocationId": { + "core": [ + { + "vuid": "VUID-LocalInvocationId-LocalInvocationId-04281", + "text": "The LocalInvocationId decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LocalInvocationId-LocalInvocationId-04282", + "text": "The variable decorated with LocalInvocationId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LocalInvocationId-LocalInvocationId-04283", + "text": "The variable decorated with LocalInvocationId must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "LocalInvocationIndex": { + "core": [ + { + "vuid": "VUID-LocalInvocationIndex-LocalInvocationIndex-04284", + "text": "The LocalInvocationIndex decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LocalInvocationIndex-LocalInvocationIndex-04285", + "text": "The variable decorated with LocalInvocationIndex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-LocalInvocationIndex-LocalInvocationIndex-04286", + "text": "The variable decorated with LocalInvocationIndex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "MeshViewCountNV": { + "core": [ + { + "vuid": "VUID-MeshViewCountNV-MeshViewCountNV-04287", + "text": "The MeshViewCountNV decoration must be used only within the MeshNV or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-MeshViewCountNV-MeshViewCountNV-04288", + "text": "The variable decorated with MeshViewCountNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-MeshViewCountNV-MeshViewCountNV-04289", + "text": "The variable decorated with MeshViewCountNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "MeshViewIndicesNV": { + "core": [ + { + "vuid": "VUID-MeshViewIndicesNV-MeshViewIndicesNV-04290", + "text": "The MeshViewIndicesNV decoration must be used only within the MeshNV or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-MeshViewIndicesNV-MeshViewIndicesNV-04291", + "text": "The variable decorated with MeshViewIndicesNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-MeshViewIndicesNV-MeshViewIndicesNV-04292", + "text": "The variable decorated with MeshViewIndicesNV must be declared as an array of scalar 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "NumSubgroups": { + "core": [ + { + "vuid": "VUID-NumSubgroups-NumSubgroups-04293", + "text": "The NumSubgroups decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-NumSubgroups-NumSubgroups-04294", + "text": "The variable decorated with NumSubgroups must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-NumSubgroups-NumSubgroups-04295", + "text": "The variable decorated with NumSubgroups must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "NumWorkgroups": { + "core": [ + { + "vuid": "VUID-NumWorkgroups-NumWorkgroups-04296", + "text": "The NumWorkgroups decoration must be used only within the GLCompute, MeshEXT, or TaskEXT Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-NumWorkgroups-NumWorkgroups-04297", + "text": "The variable decorated with NumWorkgroups must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-NumWorkgroups-NumWorkgroups-04298", + "text": "The variable decorated with NumWorkgroups must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "ObjectRayDirectionKHR": { + "core": [ + { + "vuid": "VUID-ObjectRayDirectionKHR-ObjectRayDirectionKHR-04299", + "text": "The ObjectRayDirectionKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ObjectRayDirectionKHR-ObjectRayDirectionKHR-04300", + "text": "The variable decorated with ObjectRayDirectionKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ObjectRayDirectionKHR-ObjectRayDirectionKHR-04301", + "text": "The variable decorated with ObjectRayDirectionKHR must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "ObjectRayOriginKHR": { + "core": [ + { + "vuid": "VUID-ObjectRayOriginKHR-ObjectRayOriginKHR-04302", + "text": "The ObjectRayOriginKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ObjectRayOriginKHR-ObjectRayOriginKHR-04303", + "text": "The variable decorated with ObjectRayOriginKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ObjectRayOriginKHR-ObjectRayOriginKHR-04304", + "text": "The variable decorated with ObjectRayOriginKHR must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "ObjectToWorldKHR": { + "core": [ + { + "vuid": "VUID-ObjectToWorldKHR-ObjectToWorldKHR-04305", + "text": "The ObjectToWorldKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ObjectToWorldKHR-ObjectToWorldKHR-04306", + "text": "The variable decorated with ObjectToWorldKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ObjectToWorldKHR-ObjectToWorldKHR-04307", + "text": "The variable decorated with ObjectToWorldKHR must be declared as a matrix with four columns of three-component vectors of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "PatchVertices": { + "core": [ + { + "vuid": "VUID-PatchVertices-PatchVertices-04308", + "text": "The PatchVertices decoration must be used only within the TessellationControl or TessellationEvaluation Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PatchVertices-PatchVertices-04309", + "text": "The variable decorated with PatchVertices must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PatchVertices-PatchVertices-04310", + "text": "The variable decorated with PatchVertices must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "PointCoord": { + "core": [ + { + "vuid": "VUID-PointCoord-PointCoord-04311", + "text": "The PointCoord decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PointCoord-PointCoord-04312", + "text": "The variable decorated with PointCoord must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PointCoord-PointCoord-04313", + "text": "The variable decorated with PointCoord must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "PointSize": { + "core": [ + { + "vuid": "VUID-PointSize-PointSize-04314", + "text": "The PointSize decoration must be used only within the MeshEXT, MeshNV, Vertex, TessellationControl, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PointSize-PointSize-04315", + "text": "The variable decorated with PointSize within the MeshEXT, MeshNV, or Vertex Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PointSize-PointSize-04316", + "text": "The variable decorated with PointSize within the TessellationControl, TessellationEvaluation, or Geometry Execution Model must not be declared using a Storage Class other than Input or Output", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PointSize-PointSize-04317", + "text": "The variable decorated with PointSize must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + } + ] + }, + "Position": { + "core": [ + { + "vuid": "VUID-Position-Position-04318", + "text": "The Position decoration must be used only within the MeshEXT, MeshNV, Vertex, TessellationControl, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Position-Position-04319", + "text": "The variable decorated with Position within the MeshEXT, MeshNV, or Vertex Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Position-Position-04320", + "text": "The variable decorated with Position within the TessellationControl, TessellationEvaluation, or Geometry Execution Model must not be declared using a Storage Class other than Input or Output", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-Position-Position-04321", + "text": "The variable decorated with Position must be declared as a four-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "PositionPerViewNV": { + "core": [ + { + "vuid": "VUID-PositionPerViewNV-PositionPerViewNV-04322", + "text": "The PositionPerViewNV decoration must be used only within the MeshNV, Vertex, TessellationControl, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PositionPerViewNV-PositionPerViewNV-04323", + "text": "The variable decorated with PositionPerViewNV within the Vertex, or MeshNV Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PositionPerViewNV-PositionPerViewNV-04324", + "text": "The variable decorated with PositionPerViewNV within the TessellationControl, TessellationEvaluation, or Geometry Execution Model must not be declared using a Storage Class other than Input or Output", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PositionPerViewNV-PositionPerViewNV-04325", + "text": "The variable decorated with PositionPerViewNV must be declared as an array of four-component vector of 32-bit floating-point values with at least as many elements as the maximum view in the subpass’s view mask plus one", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PositionPerViewNV-PositionPerViewNV-04326", + "text": "The array variable decorated with PositionPerViewNV must only be indexed by a constant or specialization constant", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitiveCountNV": { + "core": [ + { + "vuid": "VUID-PrimitiveCountNV-PrimitiveCountNV-04327", + "text": "The PrimitiveCountNV decoration must be used only within the MeshNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveCountNV-PrimitiveCountNV-04328", + "text": "The variable decorated with PrimitiveCountNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveCountNV-PrimitiveCountNV-04329", + "text": "The variable decorated with PrimitiveCountNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitiveId": { + "core": [ + { + "vuid": "VUID-PrimitiveId-PrimitiveId-04330", + "text": "The PrimitiveId decoration must be used only within the MeshEXT, MeshNV, IntersectionKHR, AnyHitKHR, ClosestHitKHR, TessellationControl, TessellationEvaluation, Geometry, or Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-Fragment-04331", + "text": "If pipeline contains both the Fragment and Geometry Execution Model and a variable decorated with PrimitiveId is read from Fragment shader, then the Geometry shader must write to the output variables decorated with PrimitiveId in all execution paths", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-Fragment-04332", + "text": "If pipeline contains both the Fragment and MeshEXT or MeshNV Execution Model and a variable decorated with PrimitiveId is read from Fragment shader, then the MeshEXT or MeshNV shader must write to the output variables decorated with PrimitiveId in all execution paths", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-Fragment-04333", + "text": "If Fragment Execution Model contains a variable decorated with PrimitiveId, then either the MeshShadingEXT, MeshShadingNV, Geometry or Tessellation capability must also be declared", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-04334", + "text": "The variable decorated with PrimitiveId within the TessellationControl, TessellationEvaluation, Fragment, IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-04335", + "text": "The variable decorated with PrimitiveId within the Geometry Execution Model must be declared using the Input or Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-04336", + "text": "The variable decorated with PrimitiveId within the MeshEXT or MeshNV Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-04337", + "text": "The variable decorated with PrimitiveId must be declared as a scalar 32-bit integer value for all supported execution models except MeshEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-07040", + "text": "The variable decorated with PrimitiveId within the MeshEXT Execution Model must also be decorated with the PerPrimitiveEXT decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-10595", + "text": "PrimitiveId within the MeshEXT Execution Model must decorate a scalar 32-bit integer member of a structure decorated as Block, or decorate a variable of type OpTypeArray of 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-10596", + "text": "If PrimitiveId is declared as an array of 32-bit integer values, within the MeshEXT Execution Model, size of the array must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveId-PrimitiveId-10597", + "text": "If PrimitiveId decorates a member of a structure, the variable declaration of the containing Block type must have an array size that matches the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitiveIndicesNV": { + "core": [ + { + "vuid": "VUID-PrimitiveIndicesNV-PrimitiveIndicesNV-04338", + "text": "The PrimitiveIndicesNV decoration must be used only within the MeshNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveIndicesNV-PrimitiveIndicesNV-04339", + "text": "The variable decorated with PrimitiveIndicesNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveIndicesNV-PrimitiveIndicesNV-04340", + "text": "The variable decorated with PrimitiveIndicesNV must be declared as an array of scalar 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveIndicesNV-PrimitiveIndicesNV-04341", + "text": "All index values of the array decorated with PrimitiveIndicesNV must be in the range [0, N-1], where N is the value specified by the OutputVertices Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveIndicesNV-OutputPoints-04342", + "text": "If the Execution Mode is OutputPoints, then the array decorated with PrimitiveIndicesNV must be the size of the value specified by OutputPrimitivesNV", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveIndicesNV-OutputLinesNV-04343", + "text": "If the Execution Mode is OutputLinesNV, then the array decorated with PrimitiveIndicesNV must be the size of two times the value specified by OutputPrimitivesNV", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveIndicesNV-OutputTrianglesNV-04344", + "text": "If the Execution Mode is OutputTrianglesNV, then the array decorated with PrimitiveIndicesNV must be the size of three times the value specified by OutputPrimitivesNV", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitivePointIndicesEXT": { + "core": [ + { + "vuid": "VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07041", + "text": "The PrimitivePointIndicesEXT decoration must be used only within the MeshEXT Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07042", + "text": "The PrimitivePointIndicesEXT decoration must be used with the OutputPoints Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07043", + "text": "The variable decorated with PrimitivePointIndicesEXT must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07044", + "text": "The variable decorated with PrimitivePointIndicesEXT must be declared as an array of scalar 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07045", + "text": "All index values of the array decorated with PrimitivePointIndicesEXT must be in the range [0, N-1], where N is the value specified by the OutputVertices Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07046", + "text": "The size of the array decorated with PrimitivePointIndicesEXT must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitiveLineIndicesEXT": { + "core": [ + { + "vuid": "VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07047", + "text": "The PrimitiveLineIndicesEXT decoration must be used only within the MeshEXT Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07048", + "text": "The PrimitiveLineIndicesEXT decoration must be used with the OutputLinesEXT Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07049", + "text": "The variable decorated with PrimitiveLineIndicesEXT must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07050", + "text": "The variable decorated with PrimitiveLineIndicesEXT must be declared as an array of two component vector 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07051", + "text": "All index values of the array decorated with PrimitiveLineIndicesEXT must be in the range [0, N-1], where N is the value specified by the OutputVertices Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07052", + "text": "The size of the array decorated with PrimitiveLineIndicesEXT must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitiveTriangleIndicesEXT": { + "core": [ + { + "vuid": "VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07053", + "text": "The PrimitiveTriangleIndicesEXT decoration must be used only within the MeshEXT Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07054", + "text": "The PrimitiveTriangleIndicesEXT decoration must be used with the OutputTrianglesEXT Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07055", + "text": "The variable decorated with PrimitiveTriangleIndicesEXT must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07056", + "text": "The variable decorated with PrimitiveTriangleIndicesEXT must be declared as an array of three component vector 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07057", + "text": "All index values of the array decorated with PrimitiveTriangleIndicesEXT must be in the range [0, N-1], where N is the value specified by the OutputVertices Execution Mode", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07058", + "text": "The size of the array decorated with PrimitiveTriangleIndicesEXT must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "PrimitiveShadingRateKHR": { + "core": [ + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-04484", + "text": "The PrimitiveShadingRateKHR decoration must be used only within the MeshEXT, MeshNV, Vertex, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-04485", + "text": "The variable decorated with PrimitiveShadingRateKHR must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-04486", + "text": "The variable decorated with PrimitiveShadingRateKHR must be declared as a scalar 32-bit integer value for all supported execution models except MeshEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-04487", + "text": "The value written to PrimitiveShadingRateKHR must include no more than one of Vertical2Pixels and Vertical4Pixels", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-04488", + "text": "The value written to PrimitiveShadingRateKHR must include no more than one of Horizontal2Pixels and Horizontal4Pixels", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-04489", + "text": "The value written to PrimitiveShadingRateKHR must not have any bits set other than those defined by Fragment Shading Rate Flags enumerants in the SPIR-V specification", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-07059", + "text": "The variable decorated with PrimitiveShadingRateKHR within the MeshEXT Execution Model must also be decorated with the PerPrimitiveEXT decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-10598", + "text": "PrimitiveShadingRateKHR within the MeshEXT Execution Model must decorate a scalar 32-bit integer member of a structure decorated as Block, or decorate a variable of type OpTypeArray of 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-10599", + "text": "If PrimitiveShadingRateKHR is declared as an array of boolean values, the size of the array must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-10600", + "text": "If PrimitiveShadingRateKHR decorates a member of a structure, the variable declaration of the containing Block type must have an array size that matches the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "RayGeometryIndexKHR": { + "core": [ + { + "vuid": "VUID-RayGeometryIndexKHR-RayGeometryIndexKHR-04345", + "text": "The RayGeometryIndexKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-RayGeometryIndexKHR-RayGeometryIndexKHR-04346", + "text": "The variable decorated with RayGeometryIndexKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-RayGeometryIndexKHR-RayGeometryIndexKHR-04347", + "text": "The variable decorated with RayGeometryIndexKHR must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "RayTmaxKHR": { + "core": [ + { + "vuid": "VUID-RayTmaxKHR-RayTmaxKHR-04348", + "text": "The RayTmaxKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-RayTmaxKHR-RayTmaxKHR-04349", + "text": "The variable decorated with RayTmaxKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-RayTmaxKHR-RayTmaxKHR-04350", + "text": "The variable decorated with RayTmaxKHR must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + } + ] + }, + "RayTminKHR": { + "core": [ + { + "vuid": "VUID-RayTminKHR-RayTminKHR-04351", + "text": "The RayTminKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-RayTminKHR-RayTminKHR-04352", + "text": "The variable decorated with RayTminKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-RayTminKHR-RayTminKHR-04353", + "text": "The variable decorated with RayTminKHR must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + } + ] + }, + "SampleId": { + "core": [ + { + "vuid": "VUID-SampleId-SampleId-04354", + "text": "The SampleId decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SampleId-SampleId-04355", + "text": "The variable decorated with SampleId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SampleId-SampleId-04356", + "text": "The variable decorated with SampleId must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "SampleMask": { + "core": [ + { + "vuid": "VUID-SampleMask-SampleMask-04357", + "text": "The SampleMask decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SampleMask-SampleMask-04358", + "text": "The variable decorated with SampleMask must be declared using the Input or Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SampleMask-SampleMask-04359", + "text": "The variable decorated with SampleMask must be declared as an array of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "SamplePosition": { + "core": [ + { + "vuid": "VUID-SamplePosition-SamplePosition-04360", + "text": "The SamplePosition decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SamplePosition-SamplePosition-04361", + "text": "The variable decorated with SamplePosition must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SamplePosition-SamplePosition-04362", + "text": "The variable decorated with SamplePosition must be declared as a two-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "ShadingRateKHR": { + "core": [ + { + "vuid": "VUID-ShadingRateKHR-ShadingRateKHR-04490", + "text": "The ShadingRateKHR decoration must be used only within the Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ShadingRateKHR-ShadingRateKHR-04491", + "text": "The variable decorated with ShadingRateKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ShadingRateKHR-ShadingRateKHR-04492", + "text": "The variable decorated with ShadingRateKHR must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "SMCountNV": { + "core": [ + { + "vuid": "VUID-SMCountNV-SMCountNV-04363", + "text": "The variable decorated with SMCountNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SMCountNV-SMCountNV-04364", + "text": "The variable decorated with SMCountNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "SMIDNV": { + "core": [ + { + "vuid": "VUID-SMIDNV-SMIDNV-04365", + "text": "The variable decorated with SMIDNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SMIDNV-SMIDNV-04366", + "text": "The variable decorated with SMIDNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupId": { + "core": [ + { + "vuid": "VUID-SubgroupId-SubgroupId-04367", + "text": "The SubgroupId decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupId-SubgroupId-04368", + "text": "The variable decorated with SubgroupId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupId-SubgroupId-04369", + "text": "The variable decorated with SubgroupId must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupEqMask": { + "core": [ + { + "vuid": "VUID-SubgroupEqMask-SubgroupEqMask-04370", + "text": "The variable decorated with SubgroupEqMask must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupEqMask-SubgroupEqMask-04371", + "text": "The variable decorated with SubgroupEqMask must be declared as a four-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupGeMask": { + "core": [ + { + "vuid": "VUID-SubgroupGeMask-SubgroupGeMask-04372", + "text": "The variable decorated with SubgroupGeMask must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupGeMask-SubgroupGeMask-04373", + "text": "The variable decorated with SubgroupGeMask must be declared as a four-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupGtMask": { + "core": [ + { + "vuid": "VUID-SubgroupGtMask-SubgroupGtMask-04374", + "text": "The variable decorated with SubgroupGtMask must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupGtMask-SubgroupGtMask-04375", + "text": "The variable decorated with SubgroupGtMask must be declared as a four-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupLeMask": { + "core": [ + { + "vuid": "VUID-SubgroupLeMask-SubgroupLeMask-04376", + "text": "The variable decorated with SubgroupLeMask must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupLeMask-SubgroupLeMask-04377", + "text": "The variable decorated with SubgroupLeMask must be declared as a four-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupLtMask": { + "core": [ + { + "vuid": "VUID-SubgroupLtMask-SubgroupLtMask-04378", + "text": "The variable decorated with SubgroupLtMask must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupLtMask-SubgroupLtMask-04379", + "text": "The variable decorated with SubgroupLtMask must be declared as a four-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupLocalInvocationId": { + "core": [ + { + "vuid": "VUID-SubgroupLocalInvocationId-SubgroupLocalInvocationId-04380", + "text": "The variable decorated with SubgroupLocalInvocationId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupLocalInvocationId-SubgroupLocalInvocationId-04381", + "text": "The variable decorated with SubgroupLocalInvocationId must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "SubgroupSize": { + "core": [ + { + "vuid": "VUID-SubgroupSize-SubgroupSize-04382", + "text": "The variable decorated with SubgroupSize must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-SubgroupSize-SubgroupSize-04383", + "text": "The variable decorated with SubgroupSize must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "TaskCountNV": { + "core": [ + { + "vuid": "VUID-TaskCountNV-TaskCountNV-04384", + "text": "The TaskCountNV decoration must be used only within the TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TaskCountNV-TaskCountNV-04385", + "text": "The variable decorated with TaskCountNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TaskCountNV-TaskCountNV-04386", + "text": "The variable decorated with TaskCountNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "TessCoord": { + "core": [ + { + "vuid": "VUID-TessCoord-TessCoord-04387", + "text": "The TessCoord decoration must be used only within the TessellationEvaluation Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessCoord-TessCoord-04388", + "text": "The variable decorated with TessCoord must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessCoord-TessCoord-04389", + "text": "The variable decorated with TessCoord must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "TessLevelOuter": { + "core": [ + { + "vuid": "VUID-TessLevelOuter-TessLevelOuter-04390", + "text": "The TessLevelOuter decoration must be used only within the TessellationControl or TessellationEvaluation Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessLevelOuter-TessLevelOuter-04391", + "text": "The variable decorated with TessLevelOuter within the TessellationControl Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessLevelOuter-TessLevelOuter-04392", + "text": "The variable decorated with TessLevelOuter within the TessellationEvaluation Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessLevelOuter-TessLevelOuter-04393", + "text": "The variable decorated with TessLevelOuter must be declared as an array of size four, containing 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "TessLevelInner": { + "core": [ + { + "vuid": "VUID-TessLevelInner-TessLevelInner-04394", + "text": "The TessLevelInner decoration must be used only within the TessellationControl or TessellationEvaluation Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessLevelInner-TessLevelInner-04395", + "text": "The variable decorated with TessLevelInner within the TessellationControl Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessLevelInner-TessLevelInner-04396", + "text": "The variable decorated with TessLevelInner within the TessellationEvaluation Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TessLevelInner-TessLevelInner-04397", + "text": "The variable decorated with TessLevelInner must be declared as an array of size two, containing 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "TileOffsetQCOM": { + "core": [ + { + "vuid": "VUID-TileOffsetQCOM-TileOffsetQCOM-10626", + "text": "The TileOffsetQCOM decoration must be used only within the Fragment Execution Model or GLCompute Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TileOffsetQCOM-TileOffsetQCOM-10627", + "text": "The variable decorated with TileOffsetQCOM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TileOffsetQCOM-TileOffsetQCOM-10628", + "text": "The variable decorated with TileOffsetQCOM must be declared as a two-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "TileDimensionQCOM": { + "core": [ + { + "vuid": "VUID-TileDimensionQCOM-TileDimensionQCOM-10629", + "text": "The TileDimensionQCOM decoration must be used only within the Fragment Execution Model or GLCompute Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TileDimensionQCOM-TileDimensionQCOM-10630", + "text": "The variable decorated with TileDimensionQCOM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TileDimensionQCOM-TileDimensionQCOM-10631", + "text": "The variable decorated with TileDimensionQCOM must be declared as a two-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "TileApronSizeQCOM": { + "core": [ + { + "vuid": "VUID-TileApronSizeQCOM-TileApronSizeQCOM-10632", + "text": "The TileApronSizeQCOM decoration must be used only within the Fragment Execution Model or GLCompute Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TileApronSizeQCOM-TileApronSizeQCOM-10633", + "text": "The variable decorated with TileApronSizeQCOM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-TileApronSizeQCOM-TileApronSizeQCOM-10634", + "text": "The variable decorated with TileApronSizeQCOM must be declared as a two-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "VertexCountHUAWEI": { + "core": [ + { + "vuid": "VUID-VertexCountHUAWEI-VertexCountHUAWEI-07809", + "text": "The VertexCountHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VertexCountHUAWEI-VertexCountHUAWEI-07810", + "text": "The variable decorated with VertexCountHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "VertexIndex": { + "core": [ + { + "vuid": "VUID-VertexIndex-VertexIndex-04398", + "text": "The VertexIndex decoration must be used only within the Vertex Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VertexIndex-VertexIndex-04399", + "text": "The variable decorated with VertexIndex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VertexIndex-VertexIndex-04400", + "text": "The variable decorated with VertexIndex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "VertexOffsetHUAWEI": { + "core": [ + { + "vuid": "VUID-VertexOffsetHUAWEI-VertexOffsetHUAWEI-07811", + "text": "The VertexOffsetHUAWEI decoration must be used only within the ClusterCullingHUAWEI Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-VertexOffsetHUAWEI-VertexOffsetHUAWEI-07812", + "text": "The variable decorated with VertexOffsetHUAWEI must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "ViewIndex": { + "core": [ + { + "vuid": "VUID-ViewIndex-ViewIndex-04401", + "text": "The ViewIndex decoration must be used only within the MeshEXT, Vertex, Geometry, TessellationControl, TessellationEvaluation or Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewIndex-ViewIndex-04402", + "text": "The variable decorated with ViewIndex must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewIndex-ViewIndex-04403", + "text": "The variable decorated with ViewIndex must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "ViewportIndex": { + "core": [ + { + "vuid": "VUID-ViewportIndex-ViewportIndex-04404", + "text": "The ViewportIndex decoration must be used only within the MeshEXT, MeshNV, Vertex, TessellationEvaluation, Geometry, or Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-04405", + "text": "If the shaderOutputViewportIndex feature is not enabled then the ViewportIndex decoration must be used only within the Geometry or Fragment Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-04406", + "text": "The variable decorated with ViewportIndex within the MeshEXT, MeshNV, Vertex, TessellationEvaluation, or Geometry Execution Model must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-04407", + "text": "The variable decorated with ViewportIndex within the Fragment Execution Model must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-04408", + "text": "The variable decorated with ViewportIndex must be declared as a scalar 32-bit integer value for all supported execution models except MeshEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-07060", + "text": "The variable decorated with ViewportIndex within the MeshEXT Execution Model must also be decorated with the PerPrimitiveEXT decoration", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-10601", + "text": "ViewportIndex within the MeshEXT Execution Model must decorate a scalar boolean member of a structure decorated as Block, or decorate a variable of type OpTypeArray of boolean values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-10602", + "text": "If ViewportIndex is declared as an array of boolean values, the size of the array must match the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportIndex-ViewportIndex-10603", + "text": "If ViewportIndex decorates a member of a structure, the variable declaration of the containing Block type must have an array size that matches the value specified by OutputPrimitivesEXT", + "page": "chapters/interfaces.html" + } + ] + }, + "ViewportMaskNV": { + "core": [ + { + "vuid": "VUID-ViewportMaskNV-ViewportMaskNV-04409", + "text": "The ViewportMaskNV decoration must be used only within the Vertex, MeshNV, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskNV-ViewportMaskNV-04410", + "text": "The variable decorated with ViewportMaskNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskNV-ViewportMaskNV-04411", + "text": "The variable decorated with ViewportMaskNV must be declared as an array of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "ViewportMaskPerViewNV": { + "core": [ + { + "vuid": "VUID-ViewportMaskPerViewNV-ViewportMaskPerViewNV-04412", + "text": "The ViewportMaskPerViewNV decoration must be used only within the Vertex, MeshNV, TessellationControl, TessellationEvaluation, or Geometry Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskPerViewNV-ViewportMaskPerViewNV-04413", + "text": "The variable decorated with ViewportMaskPerViewNV must be declared using the Output Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskPerViewNV-ViewportMaskPerViewNV-04414", + "text": "The variable decorated with ViewportMaskPerViewNV must be declared as an array of 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskPerViewNV-ViewportMaskPerViewNV-04415", + "text": "The array decorated with ViewportMaskPerViewNV must be a size less than or equal to 32", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskPerViewNV-ViewportMaskPerViewNV-04416", + "text": "The array decorated with ViewportMaskPerViewNV must be a size greater than the maximum view in the subpass’s view mask", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ViewportMaskPerViewNV-ViewportMaskPerViewNV-04417", + "text": "The array variable decorated with ViewportMaskPerViewNV must only be indexed by a constant or specialization constant", + "page": "chapters/interfaces.html" + } + ] + }, + "WarpsPerSMNV": { + "core": [ + { + "vuid": "VUID-WarpsPerSMNV-WarpsPerSMNV-04418", + "text": "The variable decorated with WarpsPerSMNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WarpsPerSMNV-WarpsPerSMNV-04419", + "text": "The variable decorated with WarpsPerSMNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "WarpIDNV": { + "core": [ + { + "vuid": "VUID-WarpIDNV-WarpIDNV-04420", + "text": "The variable decorated with WarpIDNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WarpIDNV-WarpIDNV-04421", + "text": "The variable decorated with WarpIDNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "WorkgroupId": { + "core": [ + { + "vuid": "VUID-WorkgroupId-WorkgroupId-04422", + "text": "The WorkgroupId decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorkgroupId-WorkgroupId-04423", + "text": "The variable decorated with WorkgroupId must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorkgroupId-WorkgroupId-04424", + "text": "The variable decorated with WorkgroupId must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + } + ] + }, + "WorkgroupSize": { + "core": [ + { + "vuid": "VUID-WorkgroupSize-WorkgroupSize-04425", + "text": "The WorkgroupSize decoration must be used only within the GLCompute, MeshEXT, TaskEXT, MeshNV, or TaskNV Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorkgroupSize-WorkgroupSize-04426", + "text": "The variable decorated with WorkgroupSize must be a specialization constant or a constant", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorkgroupSize-WorkgroupSize-04427", + "text": "The variable decorated with WorkgroupSize must be declared as a three-component vector of 32-bit integer values", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorkgroupSize-TileShadingRateQCOM-10635", + "text": "If the TileShadingRateQCOM Execution Mode is used, variables decorated withWorkgroupSize must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + } + ] + }, + "WorldRayDirectionKHR": { + "core": [ + { + "vuid": "VUID-WorldRayDirectionKHR-WorldRayDirectionKHR-04428", + "text": "The WorldRayDirectionKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorldRayDirectionKHR-WorldRayDirectionKHR-04429", + "text": "The variable decorated with WorldRayDirectionKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorldRayDirectionKHR-WorldRayDirectionKHR-04430", + "text": "The variable decorated with WorldRayDirectionKHR must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "WorldRayOriginKHR": { + "core": [ + { + "vuid": "VUID-WorldRayOriginKHR-WorldRayOriginKHR-04431", + "text": "The WorldRayOriginKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, ClosestHitKHR, or MissKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorldRayOriginKHR-WorldRayOriginKHR-04432", + "text": "The variable decorated with WorldRayOriginKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorldRayOriginKHR-WorldRayOriginKHR-04433", + "text": "The variable decorated with WorldRayOriginKHR must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "WorldToObjectKHR": { + "core": [ + { + "vuid": "VUID-WorldToObjectKHR-WorldToObjectKHR-04434", + "text": "The WorldToObjectKHR decoration must be used only within the IntersectionKHR, AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorldToObjectKHR-WorldToObjectKHR-04435", + "text": "The variable decorated with WorldToObjectKHR must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WorldToObjectKHR-WorldToObjectKHR-04436", + "text": "The variable decorated with WorldToObjectKHR must be declared as a matrix with four columns of three-component vectors of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "HitIsSphereNV": { + "core": [ + { + "vuid": "VUID-HitIsSphereNV-HitIsSphereNV-10513", + "text": "The HitIsSphereNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitIsSphereNV-HitIsSphereNV-10514", + "text": "The variable decorated with HitIsSphereNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitIsSphereNV-HitIsSphereNV-10515", + "text": "The variable decorated with HitIsSphereNV must be declared as a boolean value", + "page": "chapters/interfaces.html" + } + ] + }, + "HitIsLSSNV": { + "core": [ + { + "vuid": "VUID-HitIsLSSNV-HitIsLSSNV-10516", + "text": "The HitIsLSSNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitIsLSSNV-HitIsLSSNV-10517", + "text": "The variable decorated with HitIsLSSNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitIsLSSNV-HitIsLSSNV-10518", + "text": "The variable decorated with HitIsLSSNV must be declared as a boolean value", + "page": "chapters/interfaces.html" + } + ] + }, + "HitSpherePositionNV": { + "core": [ + { + "vuid": "VUID-HitSpherePositionNV-HitSpherePositionNV-10519", + "text": "The HitSpherePositionNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitSpherePositionNV-HitSpherePositionNV-10520", + "text": "The variable decorated with HitSpherePositionNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitSpherePositionNV-HitSpherePositionNV-10521", + "text": "The variable decorated with HitSpherePositionNV must be declared as a three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "HitSphereRadiusNV": { + "core": [ + { + "vuid": "VUID-HitSphereRadiusNV-HitSphereRadiusNV-10522", + "text": "The HitSphereRadiusNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitSphereRadiusNV-HitSphereRadiusNV-10523", + "text": "The variable decorated with HitSphereRadiusNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitSphereRadiusNV-HitSphereRadiusNV-10524", + "text": "The variable decorated with HitSphereRadiusNV must be declared as a scalar 32-bit floating-point value", + "page": "chapters/interfaces.html" + } + ] + }, + "HitLSSPositionsNV": { + "core": [ + { + "vuid": "VUID-HitLSSPositionsNV-HitLSSPositionsNV-10525", + "text": "The HitLSSPositionsNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitLSSPositionsNV-HitLSSPositionsNV-10526", + "text": "The variable decorated with HitLSSPositionsNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitLSSPositionsNV-HitLSSPositionsNV-10527", + "text": "The variable decorated with HitLSSPositionsNV must be declared as an array of size two, containing three-component vector of 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "HitLSSRadiiNV": { + "core": [ + { + "vuid": "VUID-HitLSSRadiiNV-HitLSSRadiiNV-10528", + "text": "The HitLSSRadiiNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitLSSRadiiNV-HitLSSRadiiNV-10529", + "text": "The variable decorated with HitLSSRadiiNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-HitLSSRadiiNV-HitLSSRadiiNV-10530", + "text": "The variable decorated with HitLSSRadiiNV must be declared as an array of size two, containing 32-bit floating-point values", + "page": "chapters/interfaces.html" + } + ] + }, + "CoreCountARM": { + "core": [ + { + "vuid": "VUID-CoreCountARM-CoreCountARM-07595", + "text": "The variable decorated with CoreCountARM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CoreCountARM-CoreCountARM-07596", + "text": "The variable decorated with CoreCountARM must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "CoreMaxIDARM": { + "core": [ + { + "vuid": "VUID-CoreMaxIDARM-CoreMaxIDARM-07597", + "text": "The variable decorated with CoreMaxIDARM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CoreMaxIDARM-CoreMaxIDARM-07598", + "text": "The variable decorated with CoreMaxIDARM must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "CoreIDARM": { + "core": [ + { + "vuid": "VUID-CoreIDARM-CoreIDARM-07599", + "text": "The variable decorated with CoreIDARM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CoreIDARM-CoreIDARM-07600", + "text": "The variable decorated with CoreIDARM must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "WarpMaxIDARM": { + "core": [ + { + "vuid": "VUID-WarpMaxIDARM-WarpMaxIDARM-07601", + "text": "The variable decorated with WarpMaxIDARM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WarpMaxIDARM-WarpMaxIDARM-07602", + "text": "The variable decorated with WarpMaxIDARM must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "WarpIDARM": { + "core": [ + { + "vuid": "VUID-WarpIDARM-WarpIDARM-07603", + "text": "The variable decorated with WarpIDARM must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-WarpIDARM-WarpIDARM-07604", + "text": "The variable decorated with WarpIDARM must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "CoalescedInputCountAMDX": { + "core": [ + { + "vuid": "VUID-CoalescedInputCountAMDX-CoalescedInputCountAMDX-09172", + "text": "The variable decorated with CoalescedInputCountAMDX must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CoalescedInputCountAMDX-CoalescedInputCountAMDX-09173", + "text": "If a variable is decorated with CoalescedInputCountAMDX, the CoalescingAMDX execution mode must be declared", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-CoalescedInputCountAMDX-CoalescedInputCountAMDX-09174", + "text": "The variable decorated with CoalescedInputCountAMDX must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "ShaderIndexAMDX": { + "core": [ + { + "vuid": "VUID-ShaderIndexAMDX-ShaderIndexAMDX-09175", + "text": "The variable decorated with ShaderIndexAMDX must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ShaderIndexAMDX-ShaderIndexAMDX-09176", + "text": "The variable decorated with ShaderIndexAMDX must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "ClusterIDNV": { + "core": [ + { + "vuid": "VUID-ClusterIDNV-ClusterIDNV-10531", + "text": "The ClusterIDNV decoration must be used only within the AnyHitKHR, or ClosestHitKHR Execution Model", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClusterIDNV-ClusterIDNV-10532", + "text": "The variable decorated with ClusterIDNV must be declared using the Input Storage Class", + "page": "chapters/interfaces.html" + }, + { + "vuid": "VUID-ClusterIDNV-ClusterIDNV-10533", + "text": "The variable decorated with ClusterIDNV must be declared as a scalar 32-bit integer value", + "page": "chapters/interfaces.html" + } + ] + }, + "vkCreateQueryPool": { + "core": [ + { + "vuid": "VUID-vkCreateQueryPool-device-09663", + "text": "device must support at least one queue family with one of the VK_QUEUE_VIDEO_ENCODE_BIT_KHR, VK_QUEUE_VIDEO_DECODE_BIT_KHR, VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT capabilities", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCreateQueryPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCreateQueryPool-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkQueryPoolCreateInfo structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCreateQueryPool-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCreateQueryPool-pQueryPool-parameter", + "text": "pQueryPool must be a valid pointer to a VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCreateQueryPool-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/queries.html" + } + ] + }, + "VkQueryPoolCreateInfo": { + "core": [ + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-00791", + "text": "If the pipelineStatisticsQuery feature is not enabled, queryType must not be VK_QUERY_TYPE_PIPELINE_STATISTICS", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-meshShaderQueries-07068", + "text": "If the meshShaderQueries feature is not enabled, queryType must not be VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-meshShaderQueries-07069", + "text": "If the meshShaderQueries feature is not enabled, and queryType is VK_QUERY_TYPE_PIPELINE_STATISTICS, pipelineStatistics must not contain VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT or VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-00792", + "text": "If queryType is VK_QUERY_TYPE_PIPELINE_STATISTICS, pipelineStatistics must be a valid combination of VkQueryPipelineStatisticFlagBits values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-09534", + "text": "If queryType is VK_QUERY_TYPE_PIPELINE_STATISTICS, pipelineStatistics must not be zero", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-03222", + "text": "If queryType is VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the pNext chain must include a VkQueryPoolPerformanceCreateInfoKHR structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryCount-02763", + "text": "queryCount must be greater than 0", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-pNext-10779", + "text": "If the pNext chain includes a VkVideoProfileInfoKHR structure and its videoCodecOperation member is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the videoDecodeVP9 feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-07133", + "text": "If queryType is VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then the pNext chain must include a VkVideoProfileInfoKHR structure with videoCodecOperation specifying an encode operation", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-07906", + "text": "If queryType is VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then the pNext chain must include a VkQueryPoolVideoEncodeFeedbackCreateInfoKHR structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-07907", + "text": "If queryType is VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, and the pNext chain includes a VkVideoProfileInfoKHR structure and a VkQueryPoolVideoEncodeFeedbackCreateInfoKHR structure, then VkQueryPoolVideoEncodeFeedbackCreateInfoKHR::encodeFeedbackFlags must not contain any bits that are not set in VkVideoEncodeCapabilitiesKHR::supportedEncodeFeedbackFlags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile described by VkVideoProfileInfoKHR and its pNext chain", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-pNext-10248", + "text": "If the pNext chain includes a VkVideoProfileInfoKHR structure and its videoCodecOperation member is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the videoEncodeAV1 feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkQueryPoolPerformanceCreateInfoKHR, VkQueryPoolPerformanceQueryCreateInfoINTEL, VkQueryPoolVideoEncodeFeedbackCreateInfoKHR, VkVideoDecodeAV1ProfileInfoKHR, VkVideoDecodeH264ProfileInfoKHR, VkVideoDecodeH265ProfileInfoKHR, VkVideoDecodeUsageInfoKHR, VkVideoDecodeVP9ProfileInfoKHR, VkVideoEncodeAV1ProfileInfoKHR, VkVideoEncodeH264ProfileInfoKHR, VkVideoEncodeH265ProfileInfoKHR, VkVideoEncodeUsageInfoKHR, or VkVideoProfileInfoKHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkQueryPoolCreateFlagBits values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolCreateInfo-queryType-parameter", + "text": "queryType must be a valid VkQueryType value", + "page": "chapters/queries.html" + } + ] + }, + "VkQueryPoolPerformanceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-queueFamilyIndex-03236", + "text": "queueFamilyIndex must be a valid queue family index of the device", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-performanceCounterQueryPools-03237", + "text": "The performanceCounterQueryPools feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-03321", + "text": "Each element of pCounterIndices must be in the range of counters reported by vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR for the queue family specified in queueFamilyIndex", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-parameter", + "text": "pCounterIndices must be a valid pointer to an array of counterIndexCount uint32_t values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolPerformanceCreateInfoKHR-counterIndexCount-arraylength", + "text": "counterIndexCount must be greater than 0", + "page": "chapters/queries.html" + } + ] + }, + "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-pPerformanceQueryCreateInfo-parameter", + "text": "pPerformanceQueryCreateInfo must be a valid pointer to a valid VkQueryPoolPerformanceCreateInfoKHR structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-pNumPasses-parameter", + "text": "pNumPasses must be a valid pointer to a uint32_t value", + "page": "chapters/queries.html" + } + ] + }, + "vkDestroyQueryPool": { + "core": [ + { + "vuid": "VUID-vkDestroyQueryPool-queryPool-00793", + "text": "All submitted commands that refer to queryPool must have completed execution", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkDestroyQueryPool-queryPool-00794", + "text": "If VkAllocationCallbacks were provided when queryPool was created, a compatible set of callbacks must be provided here", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkDestroyQueryPool-queryPool-00795", + "text": "If no VkAllocationCallbacks were provided when queryPool was created, pAllocator must be NULL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkDestroyQueryPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkDestroyQueryPool-queryPool-parameter", + "text": "If queryPool is not VK_NULL_HANDLE, queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkDestroyQueryPool-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkDestroyQueryPool-queryPool-parent", + "text": "If queryPool is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdResetQueryPool": { + "core": [ + { + "vuid": "VUID-vkCmdResetQueryPool-firstQuery-09436", + "text": "firstQuery must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-firstQuery-09437", + "text": "The sum of firstQuery and queryCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-None-02841", + "text": "All queries used by the command must not be active", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-firstQuery-02862", + "text": "If queryPool was created with VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains begin commands for a query from the set of queries [firstQuery, firstQuery + queryCount - 1]", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdResetQueryPool-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkResetQueryPool": { + "core": [ + { + "vuid": "VUID-vkResetQueryPool-firstQuery-09436", + "text": "firstQuery must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-firstQuery-09437", + "text": "The sum of firstQuery and queryCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-None-02665", + "text": "The hostQueryReset feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-firstQuery-02741", + "text": "Submitted commands that refer to the range specified by firstQuery and queryCount in queryPool must have completed execution", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-firstQuery-02742", + "text": "The range of queries specified by firstQuery and queryCount in queryPool must not be in use by calls to vkGetQueryPoolResults or vkResetQueryPool in other threads", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkResetQueryPool-queryPool-parent", + "text": "queryPool must have been created, allocated, or retrieved from device", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdBeginQuery": { + "core": [ + { + "vuid": "VUID-vkCmdBeginQuery-None-00807", + "text": "All queries used by the command must be unavailable", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-02804", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_TIMESTAMP", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-04728", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-06741", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-04729", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-00800", + "text": "If the occlusionQueryPrecise feature is not enabled, or the queryType used to create queryPool was not VK_QUERY_TYPE_OCCLUSION, flags must not contain VK_QUERY_CONTROL_PRECISE_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-query-00802", + "text": "query must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-00803", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_OCCLUSION, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-00804", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the pipelineStatistics indicate graphics operations, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-00805", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the pipelineStatistics indicate compute operations, the VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-commandBuffer-01885", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-query-00808", + "text": "If called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-07126", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then the VkCommandPool that commandBuffer was allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-None-07127", + "text": "If there is a bound video session, then there must be no active queries", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-None-08370", + "text": "If there is a bound video session, then it must not have been created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-07128", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and there is a bound video session, then queryPool must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-07129", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be a bound video session", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-07130", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR and there is a bound video session, then queryPool must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-07131", + "text": "If the queryType used to create queryPool was not VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be no bound video session", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-None-10681", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-01922", + "text": "queryPool must have been created with a queryType that differs from that of any queries that are active within commandBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-07070", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-02327", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-02328", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackQueries must be supported", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-06687", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryType-06688", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT then primitivesGeneratedQuery must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-07289", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then the VkQueryPoolPerformanceCreateInfoKHR::queueFamilyIndex queryPool was created with must equal the queue family index of the VkCommandPool that commandBuffer was allocated from", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-03223", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the profiling lock must have been held before vkBeginCommandBuffer was called on commandBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-03224", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the query begin must be the first recorded command in commandBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-03225", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the begin command must not be recorded within a render pass instance", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-03226", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and another query pool with a queryType VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR has been used within commandBuffer, its parent primary command buffer or secondary command buffer recorded within the same parent primary command buffer as commandBuffer, the performanceCounterMultipleQueryPools feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-None-02863", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains a vkCmdResetQueryPool command affecting the same query", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-flags-parameter", + "text": "flags must be a valid combination of VkQueryControlFlagBits values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQuery-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdBeginQueryIndexedEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-00807", + "text": "All queries used by the command must be unavailable", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02804", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_TIMESTAMP", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-04728", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-06741", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-04729", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-00800", + "text": "If the occlusionQueryPrecise feature is not enabled, or the queryType used to create queryPool was not VK_QUERY_TYPE_OCCLUSION, flags must not contain VK_QUERY_CONTROL_PRECISE_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-query-00802", + "text": "query must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-00803", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_OCCLUSION, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-00804", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the pipelineStatistics indicate graphics operations, the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-00805", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the pipelineStatistics indicate compute operations, the VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-01885", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-query-00808", + "text": "If called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-07126", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then the VkCommandPool that commandBuffer was allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-07127", + "text": "If there is a bound video session, then there must be no active queries", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-08370", + "text": "If there is a bound video session, then it must not have been created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-07128", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and there is a bound video session, then queryPool must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-07129", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be a bound video session", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-07130", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR and there is a bound video session, then queryPool must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-07131", + "text": "If the queryType used to create queryPool was not VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be no bound video session", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-10681", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-04753", + "text": "If the queryPool was created with the same queryType as that of another active query within commandBuffer, then index must not match the index used for the active query", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02338", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02339", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the index parameter must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-06692", + "text": "If the queryType used to create queryPool was not VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT and not VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, the index must be zero", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-06689", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-06690", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the index parameter must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-06691", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT and the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled, the index parameter must be zero", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-06693", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT then primitivesGeneratedQuery must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-02341", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackQueries must be supported", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryType-07071", + "text": "The queryType used to create queryPool must not be VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-07289", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then the VkQueryPoolPerformanceCreateInfoKHR::queueFamilyIndex queryPool was created with must equal the queue family index of the VkCommandPool that commandBuffer was allocated from", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03223", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the profiling lock must have been held before vkBeginCommandBuffer was called on commandBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03224", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the query begin must be the first recorded command in commandBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03225", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the begin command must not be recorded within a render pass instance", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-03226", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and another query pool with a queryType VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR has been used within commandBuffer, its parent primary command buffer or secondary command buffer recorded within the same parent primary command buffer as commandBuffer, the performanceCounterMultipleQueryPools feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-None-02863", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains a vkCmdResetQueryPool command affecting the same query", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-flags-parameter", + "text": "flags must be a valid combination of VkQueryControlFlagBits values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdBeginQueryIndexedEXT-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdEndQuery": { + "core": [ + { + "vuid": "VUID-vkCmdEndQuery-None-01923", + "text": "All queries used by the command must be active", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-query-00810", + "text": "query must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-commandBuffer-01886", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-query-00812", + "text": "If vkCmdEndQuery is called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-queryPool-03227", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the vkCmdEndQuery must be the last recorded command in commandBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-queryPool-03228", + "text": "If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the vkCmdEndQuery must not be recorded within a render pass instance", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-None-07007", + "text": "If called within a subpass of a render pass instance, the corresponding vkCmdBeginQuery* command must have been called previously within the same subpass", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-None-10682", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQuery-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdEndQueryIndexedEXT": { + "core": [ + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-None-02342", + "text": "All queries used by the command must be active", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-query-02343", + "text": "query must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-02344", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-query-02345", + "text": "If vkCmdEndQueryIndexedEXT is called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-queryType-06694", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT or VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, the index parameter must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-queryType-06695", + "text": "If the queryType used to create queryPool was not VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT and not VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, the index must be zero", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-queryType-06696", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT or VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, index must equal the index used to begin the query", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-None-07007", + "text": "If called within a subpass of a render pass instance, the corresponding vkCmdBeginQuery* command must have been called previously within the same subpass", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-None-10682", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdEndQueryIndexedEXT-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkGetQueryPoolResults": { + "core": [ + { + "vuid": "VUID-vkGetQueryPoolResults-firstQuery-09436", + "text": "firstQuery must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-firstQuery-09437", + "text": "The sum of firstQuery and queryCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryCount-09438", + "text": "If queryCount is greater than 1, stride must not be zero", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryType-09439", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TIMESTAMP, flags must not contain VK_QUERY_RESULT_PARTIAL_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryType-09440", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, flags must not contain VK_QUERY_RESULT_WITH_AVAILABILITY_BIT, VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, VK_QUERY_RESULT_PARTIAL_BIT, or VK_QUERY_RESULT_64_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryType-09441", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the queryPool must have been recorded once for each pass as retrieved via a call to vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryType-09442", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then flags must include VK_QUERY_RESULT_WITH_STATUS_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-flags-09443", + "text": "If flags includes VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, then it must not include VK_QUERY_RESULT_WITH_AVAILABILITY_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-None-09401", + "text": "All queries used by the command must not be uninitialized", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-flags-02828", + "text": "If VK_QUERY_RESULT_64_BIT is not set in flags and the queryType used to create queryPool was not VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pData and stride must be multiples of 4", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-flags-00815", + "text": "If VK_QUERY_RESULT_64_BIT is set in flags then pData and stride must be multiples of 8", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-stride-08993", + "text": "If VK_QUERY_RESULT_WITH_AVAILABILITY_BIT is set, stride must be large enough to contain the unsigned integer representing availability or status in addition to the query result", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryType-03229", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then pData and stride must be multiples of the size of VkPerformanceCounterResultKHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryType-04519", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then stride must be large enough to contain the VkQueryPoolPerformanceCreateInfoKHR::counterIndexCount used to create queryPool times the size of VkPerformanceCounterResultKHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-dataSize-00817", + "text": "dataSize must be large enough to contain the result of each query, as described here", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-flags-parameter", + "text": "flags must be a valid combination of VkQueryResultFlagBits values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetQueryPoolResults-queryPool-parent", + "text": "queryPool must have been created, allocated, or retrieved from device", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdCopyQueryPoolResults": { + "core": [ + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-firstQuery-09436", + "text": "firstQuery must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-firstQuery-09437", + "text": "The sum of firstQuery and queryCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryCount-09438", + "text": "If queryCount is greater than 1, stride must not be zero", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-09439", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_TIMESTAMP, flags must not contain VK_QUERY_RESULT_PARTIAL_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-09440", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, flags must not contain VK_QUERY_RESULT_WITH_AVAILABILITY_BIT, VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, VK_QUERY_RESULT_PARTIAL_BIT, or VK_QUERY_RESULT_64_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-09441", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the queryPool must have been recorded once for each pass as retrieved via a call to vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-09442", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then flags must include VK_QUERY_RESULT_WITH_STATUS_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-09443", + "text": "If flags includes VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, then it must not include VK_QUERY_RESULT_WITH_AVAILABILITY_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-None-09402", + "text": "All queries used by the command must not be uninitialized when the command is executed", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-dstOffset-00819", + "text": "dstOffset must be less than the size of dstBuffer", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-00822", + "text": "If VK_QUERY_RESULT_64_BIT is not set in flags then dstOffset and stride must be multiples of 4", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-00823", + "text": "If VK_QUERY_RESULT_64_BIT is set in flags then dstOffset and stride must be multiples of 8", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824", + "text": "dstBuffer must have enough storage, from dstOffset, to contain the result of each query, as described here", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-03232", + "text": "If the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, VkPhysicalDevicePerformanceQueryPropertiesKHR::allowCommandBufferQueryCopies must be VK_TRUE", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryType-02734", + "text": "vkCmdCopyQueryPoolResults must not be called if the queryType used to create queryPool was VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-None-07429", + "text": "All queries used by the command must not be active", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-None-08752", + "text": "All queries used by the command must have been made available by prior executed commands", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-flags-parameter", + "text": "flags must be a valid combination of VkQueryResultFlagBits values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdCopyQueryPoolResults-commonparent", + "text": "Each of commandBuffer, dstBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdWriteTimestamp2": { + "core": [ + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03929", + "text": "If the geometryShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03930", + "text": "If the tessellationShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03931", + "text": "If the conditionalRendering feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03932", + "text": "If the fragmentDensityMap feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03933", + "text": "If the transformFeedback feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03934", + "text": "If the meshShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03935", + "text": "If the taskShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, stage must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-04957", + "text": "If the subpassShading feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-04995", + "text": "If the invocationMask feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, stage must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-10751", + "text": "If the accelerationStructure feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-10753", + "text": "If the micromap feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-synchronization2-03858", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03859", + "text": "stage must only include a single pipeline stage", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-03860", + "text": "stage must only include stages valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-queryPool-03861", + "text": "queryPool must have been created with a queryType of VK_QUERY_TYPE_TIMESTAMP", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-timestampValidBits-03863", + "text": "The command pool’s queue family must support a non-zero timestampValidBits", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-query-04903", + "text": "query must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-None-03864", + "text": "All queries used by the command must be unavailable", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-query-03865", + "text": "If vkCmdWriteTimestamp2 is called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-None-10639", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-stage-parameter", + "text": "stage must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, or encode operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp2-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdWriteTimestamp": { + "core": [ + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04074", + "text": "pipelineStage must be a valid stage for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04075", + "text": "If the geometryShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04076", + "text": "If the tessellationShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04077", + "text": "If the conditionalRendering feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04078", + "text": "If the fragmentDensityMap feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04079", + "text": "If the transformFeedback feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-04080", + "text": "If the meshShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-07077", + "text": "If the taskShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-shadingRateImage-07314", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, pipelineStage must not be VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-synchronization2-06489", + "text": "If the synchronization2 feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_NONE", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-rayTracingPipeline-07943", + "text": "If neither of the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, pipelineStage must not be VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-queryPool-01416", + "text": "queryPool must have been created with a queryType of VK_QUERY_TYPE_TIMESTAMP", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-timestampValidBits-00829", + "text": "The command pool’s queue family must support a non-zero timestampValidBits", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-query-04904", + "text": "query must be less than the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-None-00830", + "text": "All queries used by the command must be unavailable", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-query-00831", + "text": "If vkCmdWriteTimestamp is called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-None-10640", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-pipelineStage-parameter", + "text": "pipelineStage must be a valid VkPipelineStageFlagBits value", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdWriteTimestamp-commonparent", + "text": "Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkAcquireProfilingLockKHR": { + "core": [ + { + "vuid": "VUID-vkAcquireProfilingLockKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkAcquireProfilingLockKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkAcquireProfilingLockInfoKHR structure", + "page": "chapters/queries.html" + } + ] + }, + "VkAcquireProfilingLockInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAcquireProfilingLockInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkAcquireProfilingLockInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkAcquireProfilingLockInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/queries.html" + } + ] + }, + "vkReleaseProfilingLockKHR": { + "core": [ + { + "vuid": "VUID-vkReleaseProfilingLockKHR-device-03235", + "text": "The profiling lock of device must have been held via a previous successful call to vkAcquireProfilingLockKHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkReleaseProfilingLockKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + } + ] + }, + "vkInitializePerformanceApiINTEL": { + "core": [ + { + "vuid": "VUID-vkInitializePerformanceApiINTEL-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkInitializePerformanceApiINTEL-pInitializeInfo-parameter", + "text": "pInitializeInfo must be a valid pointer to a valid VkInitializePerformanceApiInfoINTEL structure", + "page": "chapters/queries.html" + } + ] + }, + "VkInitializePerformanceApiInfoINTEL": { + "core": [ + { + "vuid": "VUID-VkInitializePerformanceApiInfoINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkInitializePerformanceApiInfoINTEL-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/queries.html" + } + ] + }, + "vkUninitializePerformanceApiINTEL": { + "core": [ + { + "vuid": "VUID-vkUninitializePerformanceApiINTEL-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + } + ] + }, + "vkGetPerformanceParameterINTEL": { + "core": [ + { + "vuid": "VUID-vkGetPerformanceParameterINTEL-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetPerformanceParameterINTEL-parameter-parameter", + "text": "parameter must be a valid VkPerformanceParameterTypeINTEL value", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkGetPerformanceParameterINTEL-pValue-parameter", + "text": "pValue must be a valid pointer to a VkPerformanceValueINTEL structure", + "page": "chapters/queries.html" + } + ] + }, + "VkQueryPoolPerformanceQueryCreateInfoINTEL": { + "core": [ + { + "vuid": "VUID-VkQueryPoolPerformanceQueryCreateInfoINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolPerformanceQueryCreateInfoINTEL-performanceCountersSampling-parameter", + "text": "performanceCountersSampling must be a valid VkQueryPoolSamplingModeINTEL value", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdSetPerformanceMarkerINTEL": { + "core": [ + { + "vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-pMarkerInfo-parameter", + "text": "pMarkerInfo must be a valid pointer to a valid VkPerformanceMarkerInfoINTEL structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or transfer operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceMarkerINTEL-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + } + ] + }, + "VkPerformanceMarkerInfoINTEL": { + "core": [ + { + "vuid": "VUID-VkPerformanceMarkerInfoINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceMarkerInfoINTEL-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdSetPerformanceStreamMarkerINTEL": { + "core": [ + { + "vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-pMarkerInfo-parameter", + "text": "pMarkerInfo must be a valid pointer to a valid VkPerformanceStreamMarkerInfoINTEL structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or transfer operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceStreamMarkerINTEL-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + } + ] + }, + "VkPerformanceStreamMarkerInfoINTEL": { + "core": [ + { + "vuid": "VUID-VkPerformanceStreamMarkerInfoINTEL-marker-02735", + "text": "The value written by the application into marker must only used the valid bits as reported by vkGetPerformanceParameterINTEL with the VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceStreamMarkerInfoINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceStreamMarkerInfoINTEL-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdSetPerformanceOverrideINTEL": { + "core": [ + { + "vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-02736", + "text": "pOverrideInfo must not be used with a VkPerformanceOverrideTypeINTEL that is not reported available by vkGetPerformanceParameterINTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-parameter", + "text": "pOverrideInfo must be a valid pointer to a valid VkPerformanceOverrideInfoINTEL structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or transfer operations", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkCmdSetPerformanceOverrideINTEL-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/queries.html" + } + ] + }, + "VkPerformanceOverrideInfoINTEL": { + "core": [ + { + "vuid": "VUID-VkPerformanceOverrideInfoINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceOverrideInfoINTEL-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceOverrideInfoINTEL-type-parameter", + "text": "type must be a valid VkPerformanceOverrideTypeINTEL value", + "page": "chapters/queries.html" + } + ] + }, + "vkAcquirePerformanceConfigurationINTEL": { + "core": [ + { + "vuid": "VUID-vkAcquirePerformanceConfigurationINTEL-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkAcquirePerformanceConfigurationINTEL-pAcquireInfo-parameter", + "text": "pAcquireInfo must be a valid pointer to a valid VkPerformanceConfigurationAcquireInfoINTEL structure", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkAcquirePerformanceConfigurationINTEL-pConfiguration-parameter", + "text": "pConfiguration must be a valid pointer to a VkPerformanceConfigurationINTEL handle", + "page": "chapters/queries.html" + } + ] + }, + "VkPerformanceConfigurationAcquireInfoINTEL": { + "core": [ + { + "vuid": "VUID-VkPerformanceConfigurationAcquireInfoINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceConfigurationAcquireInfoINTEL-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkPerformanceConfigurationAcquireInfoINTEL-type-parameter", + "text": "type must be a valid VkPerformanceConfigurationTypeINTEL value", + "page": "chapters/queries.html" + } + ] + }, + "vkQueueSetPerformanceConfigurationINTEL": { + "core": [ + { + "vuid": "VUID-vkQueueSetPerformanceConfigurationINTEL-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkQueueSetPerformanceConfigurationINTEL-configuration-parameter", + "text": "configuration must be a valid VkPerformanceConfigurationINTEL handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkQueueSetPerformanceConfigurationINTEL-commonparent", + "text": "Both of configuration, and queue must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/queries.html" + } + ] + }, + "vkReleasePerformanceConfigurationINTEL": { + "core": [ + { + "vuid": "VUID-vkReleasePerformanceConfigurationINTEL-configuration-02737", + "text": "configuration must not be released before all command buffers submitted while the configuration was set are in pending state", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkReleasePerformanceConfigurationINTEL-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkReleasePerformanceConfigurationINTEL-configuration-parameter", + "text": "If configuration is not VK_NULL_HANDLE, configuration must be a valid VkPerformanceConfigurationINTEL handle", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-vkReleasePerformanceConfigurationINTEL-configuration-parent", + "text": "If configuration is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/queries.html" + } + ] + }, + "VkQueryPoolVideoEncodeFeedbackCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkQueryPoolVideoEncodeFeedbackCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolVideoEncodeFeedbackCreateInfoKHR-encodeFeedbackFlags-parameter", + "text": "encodeFeedbackFlags must be a valid combination of VkVideoEncodeFeedbackFlagBitsKHR values", + "page": "chapters/queries.html" + }, + { + "vuid": "VUID-VkQueryPoolVideoEncodeFeedbackCreateInfoKHR-encodeFeedbackFlags-requiredbitmask", + "text": "encodeFeedbackFlags must not be 0", + "page": "chapters/queries.html" + } + ] + }, + "vkCmdClearColorImage": { + "core": [ + { + "vuid": "VUID-vkCmdClearColorImage-image-01993", + "text": "The format features of image must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-image-00002", + "text": "image must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-image-01545", + "text": "image must not use any of the formats that require a sampler Y′CBCR conversion", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-image-00003", + "text": "If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-imageLayout-00004", + "text": "imageLayout must specify the layout of the image subresource ranges of image specified in pRanges at the time this command is executed on a VkDevice", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-imageLayout-01394", + "text": "imageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-aspectMask-02498", + "text": "The VkImageSubresourceRange::aspectMask members of the elements of the pRanges array must each only include VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-baseMipLevel-01470", + "text": "The VkImageSubresourceRange::baseMipLevel members of the elements of the pRanges array must each be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-pRanges-01692", + "text": "For each VkImageSubresourceRange element of pRanges, if the levelCount member is not VK_REMAINING_MIP_LEVELS, then baseMipLevel + levelCount must be less than or equal to the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-baseArrayLayer-01472", + "text": "The VkImageSubresourceRange::baseArrayLayer members of the elements of the pRanges array must each be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-pRanges-01693", + "text": "For each VkImageSubresourceRange element of pRanges, if the layerCount member is not VK_REMAINING_ARRAY_LAYERS, then baseArrayLayer + layerCount must be less than or equal to the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-image-00007", + "text": "image must not have a compressed or depth/stencil format", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-pColor-04961", + "text": "pColor must be a valid pointer to a VkClearColorValue union", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-commandBuffer-01805", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, image must not be a protected image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-commandBuffer-01806", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, must not be an unprotected image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-image-09678", + "text": "If image’s format has components other than R and G, it must not have a 64-bit component width", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-pRanges-parameter", + "text": "pRanges must be a valid pointer to an array of rangeCount valid VkImageSubresourceRange structures", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-rangeCount-arraylength", + "text": "rangeCount must be greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearColorImage-commonparent", + "text": "Both of commandBuffer, and image must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/clears.html" + } + ] + }, + "vkCmdClearDepthStencilImage": { + "core": [ + { + "vuid": "VUID-vkCmdClearDepthStencilImage-image-01994", + "text": "The format features of image must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-02658", + "text": "If the aspect member of any element of pRanges includes VK_IMAGE_ASPECT_STENCIL_BIT, and image was created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageStencilUsageCreateInfo::stencilUsage used to create image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-02659", + "text": "If the aspect member of any element of pRanges includes VK_IMAGE_ASPECT_STENCIL_BIT, and image was not created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageCreateInfo::usage used to create image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-02660", + "text": "If the aspect member of any element of pRanges includes VK_IMAGE_ASPECT_DEPTH_BIT, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageCreateInfo::usage used to create image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-image-00010", + "text": "If image is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-00011", + "text": "imageLayout must specify the layout of the image subresource ranges of image specified in pRanges at the time this command is executed on a VkDevice", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-00012", + "text": "imageLayout must be either of VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-aspectMask-02824", + "text": "The VkImageSubresourceRange::aspectMask member of each element of the pRanges array must not include bits other than VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-image-02825", + "text": "If the image’s format does not have a stencil component, then the VkImageSubresourceRange::aspectMask member of each element of the pRanges array must not include the VK_IMAGE_ASPECT_STENCIL_BIT bit", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-image-02826", + "text": "If the image’s format does not have a depth component, then the VkImageSubresourceRange::aspectMask member of each element of the pRanges array must not include the VK_IMAGE_ASPECT_DEPTH_BIT bit", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474", + "text": "The VkImageSubresourceRange::baseMipLevel members of the elements of the pRanges array must each be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-01694", + "text": "For each VkImageSubresourceRange element of pRanges, if the levelCount member is not VK_REMAINING_MIP_LEVELS, then baseMipLevel + levelCount must be less than or equal to the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476", + "text": "The VkImageSubresourceRange::baseArrayLayer members of the elements of the pRanges array must each be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-01695", + "text": "For each VkImageSubresourceRange element of pRanges, if the layerCount member is not VK_REMAINING_ARRAY_LAYERS, then baseArrayLayer + layerCount must be less than or equal to the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-image-00014", + "text": "image must have a depth/stencil format", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-01807", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, image must not be a protected image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-01808", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, image must not be an unprotected image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pDepthStencil-parameter", + "text": "pDepthStencil must be a valid pointer to a valid VkClearDepthStencilValue structure", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-pRanges-parameter", + "text": "pRanges must be a valid pointer to an array of rangeCount valid VkImageSubresourceRange structures", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-rangeCount-arraylength", + "text": "rangeCount must be greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearDepthStencilImage-commonparent", + "text": "Both of commandBuffer, and image must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/clears.html" + } + ] + }, + "vkCmdClearAttachments": { + "core": [ + { + "vuid": "VUID-vkCmdClearAttachments-aspectMask-07884", + "text": "If the current render pass instance does not use dynamic rendering, and the aspectMask member of any element of pAttachments contains VK_IMAGE_ASPECT_DEPTH_BIT, the current subpass instance’s depth-stencil attachment must be either VK_ATTACHMENT_UNUSED or the attachment format must contain a depth component", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-aspectMask-07885", + "text": "If the current render pass instance does not use dynamic rendering, and the aspectMask member of any element of pAttachments contains VK_IMAGE_ASPECT_STENCIL_BIT, the current subpass instance’s depth-stencil attachment must be either VK_ATTACHMENT_UNUSED or the attachment format must contain a stencil component", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-aspectMask-07271", + "text": "If the aspectMask member of any element of pAttachments contains VK_IMAGE_ASPECT_COLOR_BIT, the colorAttachment must be a valid color attachment index in the current render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-rect-02682", + "text": "The rect member of each element of pRects must have an extent.width greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-rect-02683", + "text": "The rect member of each element of pRects must have an extent.height greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-pRects-00016", + "text": "The rectangular region specified by each element of pRects must be contained within the render area of the current render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-pRects-06937", + "text": "The layers specified by each element of pRects must be contained within every attachment that pAttachments refers to, i.e. for each element of pRects, VkClearRect::baseArrayLayer + VkClearRect::layerCount must be less than or equal to the number of layers rendered to in the current render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-layerCount-01934", + "text": "The layerCount member of each element of pRects must not be 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-commandBuffer-02504", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, each attachment to be cleared must not be a protected image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-commandBuffer-02505", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, each attachment to be cleared must not be an unprotected image", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-baseArrayLayer-00018", + "text": "If the render pass instance this is recorded in uses multiview, then baseArrayLayer must be zero and layerCount must be one", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-colorAttachment-09503", + "text": "The colorAttachment member of each element of pAttachments must not identify a color attachment that is currently mapped to VK_ATTACHMENT_UNUSED in commandBuffer via VkRenderingAttachmentLocationInfo", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-aspectMask-09298", + "text": "If the subpass this is recorded in performs an external format resolve, the aspectMask member of any element of pAttachments must not include VK_IMAGE_ASPECT_PLANE_i_BIT for any index i", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-None-09679", + "text": "If the attachment format has components other than R and G, it must not have a 64-bit component width", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-None-10616", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-pAttachments-parameter", + "text": "pAttachments must be a valid pointer to an array of attachmentCount valid VkClearAttachment structures", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-pRects-parameter", + "text": "pRects must be a valid pointer to an array of rectCount VkClearRect structures", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-attachmentCount-arraylength", + "text": "attachmentCount must be greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdClearAttachments-rectCount-arraylength", + "text": "rectCount must be greater than 0", + "page": "chapters/clears.html" + } + ] + }, + "VkClearAttachment": { + "core": [ + { + "vuid": "VUID-VkClearAttachment-aspectMask-00019", + "text": "If aspectMask includes VK_IMAGE_ASPECT_COLOR_BIT, it must not include VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-VkClearAttachment-aspectMask-00020", + "text": "aspectMask must not include VK_IMAGE_ASPECT_METADATA_BIT", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-VkClearAttachment-aspectMask-02246", + "text": "aspectMask must not include VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT for any index i", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-VkClearAttachment-aspectMask-parameter", + "text": "aspectMask must be a valid combination of VkImageAspectFlagBits values", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-VkClearAttachment-aspectMask-requiredbitmask", + "text": "aspectMask must not be 0", + "page": "chapters/clears.html" + } + ] + }, + "VkClearDepthStencilValue": { + "core": [ + { + "vuid": "VUID-VkClearDepthStencilValue-depth-00022", + "text": "Unless the VK_EXT_depth_range_unrestricted extension is enabled depth must be between 0.0 and 1.0, inclusive", + "page": "chapters/clears.html" + } + ] + }, + "vkCmdFillBuffer": { + "core": [ + { + "vuid": "VUID-vkCmdFillBuffer-dstOffset-00024", + "text": "dstOffset must be less than the size of dstBuffer", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-dstOffset-00025", + "text": "dstOffset must be a multiple of 4", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-size-00026", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-size-00027", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be less than or equal to the size of dstBuffer minus dstOffset", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-size-00028", + "text": "If size is not equal to VK_WHOLE_SIZE, size must be a multiple of 4", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-dstBuffer-00029", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-apiVersion-07894", + "text": "If the VK_KHR_maintenance1 extension is not enabled and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, the VkCommandPool that commandBuffer was allocated from must support graphics or compute operations", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-dstBuffer-00031", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-commandBuffer-01811", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstBuffer must not be a protected buffer", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-commandBuffer-01812", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstBuffer must not be an unprotected buffer", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics or compute operations", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdFillBuffer-commonparent", + "text": "Both of commandBuffer, and dstBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/clears.html" + } + ] + }, + "vkCmdUpdateBuffer": { + "core": [ + { + "vuid": "VUID-vkCmdUpdateBuffer-dstOffset-00032", + "text": "dstOffset must be less than the size of dstBuffer", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dataSize-00033", + "text": "dataSize must be less than or equal to the size of dstBuffer minus dstOffset", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-00034", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-00035", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dstOffset-00036", + "text": "dstOffset must be a multiple of 4", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dataSize-00037", + "text": "dataSize must be less than or equal to 65536", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dataSize-00038", + "text": "dataSize must be a multiple of 4", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-01813", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstBuffer must not be a protected buffer", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-01814", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstBuffer must not be an unprotected buffer", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/clears.html" + }, + { + "vuid": "VUID-vkCmdUpdateBuffer-commonparent", + "text": "Both of commandBuffer, and dstBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/clears.html" + } + ] + }, + "vkCmdCopyBuffer": { + "core": [ + { + "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01822", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01823", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-01824", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstBuffer must not be an unprotected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-srcOffset-00113", + "text": "The srcOffset member of each element of pRegions must be less than the size of srcBuffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-dstOffset-00114", + "text": "The dstOffset member of each element of pRegions must be less than the size of dstBuffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-size-00115", + "text": "The size member of each element of pRegions must be less than or equal to the size of srcBuffer minus srcOffset", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-size-00116", + "text": "The size member of each element of pRegions must be less than or equal to the size of dstBuffer minus dstOffset", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-pRegions-00117", + "text": "The union of the source regions, and the union of the destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-srcBuffer-00118", + "text": "srcBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-srcBuffer-00119", + "text": "If srcBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-dstBuffer-00120", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-dstBuffer-00121", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-srcBuffer-parameter", + "text": "srcBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkBufferCopy structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer-commonparent", + "text": "Each of commandBuffer, dstBuffer, and srcBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkBufferCopy": { + "core": [ + { + "vuid": "VUID-VkBufferCopy-size-01988", + "text": "The size must be greater than 0", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyBuffer2": { + "core": [ + { + "vuid": "VUID-vkCmdCopyBuffer2-commandBuffer-01822", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-commandBuffer-01823", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-commandBuffer-01824", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstBuffer must not be an unprotected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-pCopyBufferInfo-parameter", + "text": "pCopyBufferInfo must be a valid pointer to a valid VkCopyBufferInfo2 structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBuffer2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyBufferInfo2": { + "core": [ + { + "vuid": "VUID-VkCopyBufferInfo2-srcOffset-00113", + "text": "The srcOffset member of each element of pRegions must be less than the size of srcBuffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-dstOffset-00114", + "text": "The dstOffset member of each element of pRegions must be less than the size of dstBuffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-size-00115", + "text": "The size member of each element of pRegions must be less than or equal to the size of srcBuffer minus srcOffset", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-size-00116", + "text": "The size member of each element of pRegions must be less than or equal to the size of dstBuffer minus dstOffset", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-pRegions-00117", + "text": "The union of the source regions, and the union of the destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-srcBuffer-00118", + "text": "srcBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-srcBuffer-00119", + "text": "If srcBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-dstBuffer-00120", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-dstBuffer-00121", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-srcBuffer-parameter", + "text": "srcBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkBufferCopy2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferInfo2-commonparent", + "text": "Both of dstBuffer, and srcBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkBufferCopy2": { + "core": [ + { + "vuid": "VUID-VkBufferCopy2-size-01988", + "text": "The size must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferCopy2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_COPY_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferCopy2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyImage": { + "core": [ + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-01825", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-01826", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-01827", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-10217", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pRegions, where the aspectMask member of srcSubresource is VK_IMAGE_ASPECT_COLOR_BIT, the aspectMask of dstSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-10218", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pRegions, where the aspectMask member of dstSubresource is VK_IMAGE_ASPECT_COLOR_BIT then the aspectMask of srcSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-00124", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01995", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImageLayout-00128", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImageLayout-01917", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-09460", + "text": "If srcImage and dstImage are the same, and any elements of pRegions contains the srcSubresource and dstSubresource with matching mipLevel and overlapping array layers, then the srcImageLayout and dstImageLayout must be VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-01996", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImageLayout-00133", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImageLayout-01395", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01548", + "text": "If the VkFormat of each of srcImage and dstImage is not a multi-planar format, the VkFormat of each of srcImage and dstImage must be size-compatible", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-None-01549", + "text": "In a copy to or from a plane of a multi-planar image, the VkFormat of the image and plane must be compatible according to the description of compatible planes for the plane being copied", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-09247", + "text": "If the VkFormat of each of srcImage and dstImage is a compressed image format, the formats must have the same texel block extent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-00136", + "text": "The sample count of srcImage and dstImage must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcOffset-01783", + "text": "The srcOffset and extent members of each element of pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstOffset-01784", + "text": "The dstOffset and extent members of each element of pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01551", + "text": "If neither srcImage nor dstImage has a multi-planar format and the maintenance8 feature is not enabled then for each element of pRegions, srcSubresource.aspectMask and dstSubresource.aspectMask must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcSubresource-10214", + "text": "If srcSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, then dstSubresource.aspectMask must not contain both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstSubresource-10215", + "text": "If dstSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, then srSubresource.aspectMask must not contain both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-08713", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, srcSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-08714", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, dstSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01556", + "text": "If srcImage has a multi-planar format and the dstImage does not have a multi-planar image format, then for each element of pRegions, dstSubresource.aspectMask must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-01557", + "text": "If dstImage has a multi-planar format and the srcImage does not have a multi-planar image format, then for each element of pRegions, srcSubresource.aspectMask must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcSubresource-10211", + "text": "If srcSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT and dstSubresource.aspectMask is VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT, then the VkFormat values of srcImage and dstImage must be compatible according to the list of compatible depth-stencil and color formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcSubresource-10212", + "text": "If srcSubresource.aspectMask is VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT and dstSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, then the VkFormat values of srcImage and dstImage must be compatible according to the list of compatible depth-stencil and color formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-apiVersion-07932", + "text": "If the VK_KHR_maintenance1 extension is not enabled, or VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and either srcImage or dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer and dstSubresource.baseArrayLayer must both be 0, and srcSubresource.layerCount and dstSubresource.layerCount must both be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-04443", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer must be 0 and srcSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-04444", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstSubresource.baseArrayLayer must be 0 and dstSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-aspectMask-00142", + "text": "For each element of pRegions, srcSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-aspectMask-00143", + "text": "For each element of pRegions, dstSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcOffset-00144", + "text": "For each element of pRegions, srcOffset.x and (extent.width + srcOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcOffset-00145", + "text": "For each element of pRegions, srcOffset.y and (extent.height + srcOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-00146", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcOffset-00147", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcOffset.z and (extent.depth + srcOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01785", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-01786", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01787", + "text": "If srcImage is of type VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffset.z must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-01788", + "text": "If dstImage is of type VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffset.z must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-apiVersion-07933", + "text": "If the VK_KHR_maintenance1 extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, srcImage and dstImage must have the same VkImageType", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-apiVersion-08969", + "text": "If the VK_KHR_maintenance1 extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, srcImage or dstImage is of type VK_IMAGE_TYPE_2D, then for each element of pRegions, extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-07743", + "text": "If srcImage and dstImage have a different VkImageType, and the maintenance5 feature is not enabled, one must be VK_IMAGE_TYPE_3D and the other must be VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-08793", + "text": "If srcImage and dstImage have the same VkImageType, for each element of pRegions, if neither of the layerCount members of srcSubresource or dstSubresource are VK_REMAINING_ARRAY_LAYERS, the layerCount members of srcSubresource or dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-08794", + "text": "If srcImage and dstImage have the same VkImageType, and one of the layerCount members of srcSubresource or dstSubresource is VK_REMAINING_ARRAY_LAYERS, the other member must be either VK_REMAINING_ARRAY_LAYERS or equal to the arrayLayers member of the VkImageCreateInfo used to create the image minus baseArrayLayer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01790", + "text": "If srcImage and dstImage are both of type VK_IMAGE_TYPE_2D, then for each element of pRegions, extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01791", + "text": "If srcImage is of type VK_IMAGE_TYPE_2D, and dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, extent.depth must equal srcSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-01792", + "text": "If dstImage is of type VK_IMAGE_TYPE_2D, and srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, extent.depth must equal dstSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstOffset-00150", + "text": "For each element of pRegions, dstOffset.x and (extent.width + dstOffset.x), where extent is adjusted for size-compatibility, must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstOffset-00151", + "text": "For each element of pRegions, dstOffset.y and (extent.height + dstOffset.y), where extent is adjusted for size-compatibility, must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-00152", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.y must be 0 and extent.height must be 1, where extent is adjusted for size-compatibility", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstOffset-00153", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstOffset.z and (extent.depth + dstOffset.z), where extent is adjusted for size-compatibility, must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-07278", + "text": "For each element of pRegions, srcOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-07279", + "text": "For each element of pRegions, srcOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-07280", + "text": "For each element of pRegions, srcOffset.z must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-07281", + "text": "For each element of pRegions, dstOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-07282", + "text": "For each element of pRegions, dstOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-07283", + "text": "For each element of pRegions, dstOffset.z must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01728", + "text": "For each element of pRegions, if the sum of srcOffset.x and extent.width does not equal the width of the subresource specified by srcSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01729", + "text": "For each element of pRegions, if the sum of srcOffset.y and extent.height does not equal the height of the subresource specified by srcSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-01730", + "text": "For each element of pRegions, if the sum of srcOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-aspect-06662", + "text": "If the aspect member of any element of pRegions includes any flag other than VK_IMAGE_ASPECT_STENCIL_BIT or srcImage was not created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT must have been included in the VkImageCreateInfo::usage used to create srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-aspect-06663", + "text": "If the aspect member of any element of pRegions includes any flag other than VK_IMAGE_ASPECT_STENCIL_BIT or dstImage was not created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageCreateInfo::usage used to create dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-aspect-06664", + "text": "If the aspect member of any element of pRegions includes VK_IMAGE_ASPECT_STENCIL_BIT, and srcImage was created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT must have been included in the VkImageStencilUsageCreateInfo::stencilUsage used to create srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-aspect-06665", + "text": "If the aspect member of any element of pRegions includes VK_IMAGE_ASPECT_STENCIL_BIT, and dstImage was created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageStencilUsageCreateInfo::stencilUsage used to create dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-07966", + "text": "If srcImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcSubresource-07967", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcSubresource-07968", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-07969", + "text": "srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-07966", + "text": "If dstImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstSubresource-07967", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstSubresource-07968", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-07969", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageCopy structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage-commonparent", + "text": "Each of commandBuffer, dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkImageCopy": { + "core": [ + { + "vuid": "VUID-VkImageCopy-apiVersion-07940", + "text": "If the VK_KHR_sampler_ycbcr_conversion extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, the aspectMask member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy-apiVersion-07941", + "text": "If the VK_KHR_maintenance1 extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, the layerCount member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy-extent-06668", + "text": "extent.width must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy-extent-06669", + "text": "extent.height must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy-extent-06670", + "text": "extent.depth must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy-srcSubresource-parameter", + "text": "srcSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy-dstSubresource-parameter", + "text": "dstSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "VkImageSubresourceLayers": { + "core": [ + { + "vuid": "VUID-VkImageSubresourceLayers-aspectMask-00167", + "text": "If aspectMask contains VK_IMAGE_ASPECT_COLOR_BIT, it must not contain either of VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageSubresourceLayers-aspectMask-00168", + "text": "aspectMask must not contain VK_IMAGE_ASPECT_METADATA_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageSubresourceLayers-aspectMask-02247", + "text": "aspectMask must not include VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT for any index i", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageSubresourceLayers-layerCount-09243", + "text": "If the maintenance5 feature is not enabled, layerCount must not be VK_REMAINING_ARRAY_LAYERS", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageSubresourceLayers-layerCount-01700", + "text": "If layerCount is not VK_REMAINING_ARRAY_LAYERS, it must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageSubresourceLayers-aspectMask-parameter", + "text": "aspectMask must be a valid combination of VkImageAspectFlagBits values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageSubresourceLayers-aspectMask-requiredbitmask", + "text": "aspectMask must not be 0", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyImage2": { + "core": [ + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-01825", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-01826", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-01827", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-10217", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pCopyImageInfo->pRegions, where the aspectMask member of srcSubresource is VK_IMAGE_ASPECT_COLOR_BIT, the aspectMask of dstSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-10218", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pCopyImageInfo->pRegions, where the aspectMask member of dstSubresource is VK_IMAGE_ASPECT_COLOR_BIT then the aspectMask of srcSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-pCopyImageInfo-parameter", + "text": "pCopyImageInfo must be a valid pointer to a valid VkCopyImageInfo2 structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImage2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyImageInfo2": { + "core": [ + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-00124", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01995", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImageLayout-00128", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImageLayout-01917", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-09460", + "text": "If srcImage and dstImage are the same, and any elements of pRegions contains the srcSubresource and dstSubresource with matching mipLevel and overlapping array layers, then the srcImageLayout and dstImageLayout must be VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-01996", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImageLayout-00133", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImageLayout-01395", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01548", + "text": "If the VkFormat of each of srcImage and dstImage is not a multi-planar format, the VkFormat of each of srcImage and dstImage must be size-compatible", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-None-01549", + "text": "In a copy to or from a plane of a multi-planar image, the VkFormat of the image and plane must be compatible according to the description of compatible planes for the plane being copied", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-09247", + "text": "If the VkFormat of each of srcImage and dstImage is a compressed image format, the formats must have the same texel block extent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-00136", + "text": "The sample count of srcImage and dstImage must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcOffset-01783", + "text": "The srcOffset and extent members of each element of pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstOffset-01784", + "text": "The dstOffset and extent members of each element of pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01551", + "text": "If neither srcImage nor dstImage has a multi-planar format and the maintenance8 feature is not enabled then for each element of pRegions, srcSubresource.aspectMask and dstSubresource.aspectMask must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcSubresource-10214", + "text": "If srcSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, then dstSubresource.aspectMask must not contain both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstSubresource-10215", + "text": "If dstSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, then srSubresource.aspectMask must not contain both VK_IMAGE_ASPECT_DEPTH_BIT and VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-08713", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, srcSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-08714", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, dstSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01556", + "text": "If srcImage has a multi-planar format and the dstImage does not have a multi-planar image format, then for each element of pRegions, dstSubresource.aspectMask must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-01557", + "text": "If dstImage has a multi-planar format and the srcImage does not have a multi-planar image format, then for each element of pRegions, srcSubresource.aspectMask must be VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcSubresource-10211", + "text": "If srcSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT and dstSubresource.aspectMask is VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT, then the VkFormat values of srcImage and dstImage must be compatible according to the list of compatible depth-stencil and color formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcSubresource-10212", + "text": "If srcSubresource.aspectMask is VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT and dstSubresource.aspectMask is VK_IMAGE_ASPECT_COLOR_BIT, then the VkFormat values of srcImage and dstImage must be compatible according to the list of compatible depth-stencil and color formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-apiVersion-07932", + "text": "If the VK_KHR_maintenance1 extension is not enabled, or VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, and either srcImage or dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer and dstSubresource.baseArrayLayer must both be 0, and srcSubresource.layerCount and dstSubresource.layerCount must both be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-04443", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer must be 0 and srcSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-04444", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstSubresource.baseArrayLayer must be 0 and dstSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-aspectMask-00142", + "text": "For each element of pRegions, srcSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-aspectMask-00143", + "text": "For each element of pRegions, dstSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcOffset-00144", + "text": "For each element of pRegions, srcOffset.x and (extent.width + srcOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcOffset-00145", + "text": "For each element of pRegions, srcOffset.y and (extent.height + srcOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-00146", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcOffset-00147", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcOffset.z and (extent.depth + srcOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01785", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-01786", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01787", + "text": "If srcImage is of type VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffset.z must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-01788", + "text": "If dstImage is of type VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffset.z must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-apiVersion-07933", + "text": "If the VK_KHR_maintenance1 extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, srcImage and dstImage must have the same VkImageType", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-apiVersion-08969", + "text": "If the VK_KHR_maintenance1 extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, srcImage or dstImage is of type VK_IMAGE_TYPE_2D, then for each element of pRegions, extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-07743", + "text": "If srcImage and dstImage have a different VkImageType, and the maintenance5 feature is not enabled, one must be VK_IMAGE_TYPE_3D and the other must be VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-08793", + "text": "If srcImage and dstImage have the same VkImageType, for each element of pRegions, if neither of the layerCount members of srcSubresource or dstSubresource are VK_REMAINING_ARRAY_LAYERS, the layerCount members of srcSubresource or dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-08794", + "text": "If srcImage and dstImage have the same VkImageType, and one of the layerCount members of srcSubresource or dstSubresource is VK_REMAINING_ARRAY_LAYERS, the other member must be either VK_REMAINING_ARRAY_LAYERS or equal to the arrayLayers member of the VkImageCreateInfo used to create the image minus baseArrayLayer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01790", + "text": "If srcImage and dstImage are both of type VK_IMAGE_TYPE_2D, then for each element of pRegions, extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01791", + "text": "If srcImage is of type VK_IMAGE_TYPE_2D, and dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, extent.depth must equal srcSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-01792", + "text": "If dstImage is of type VK_IMAGE_TYPE_2D, and srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, extent.depth must equal dstSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstOffset-00150", + "text": "For each element of pRegions, dstOffset.x and (extent.width + dstOffset.x), where extent is adjusted for size-compatibility, must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstOffset-00151", + "text": "For each element of pRegions, dstOffset.y and (extent.height + dstOffset.y), where extent is adjusted for size-compatibility, must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-00152", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.y must be 0 and extent.height must be 1, where extent is adjusted for size-compatibility", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstOffset-00153", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstOffset.z and (extent.depth + dstOffset.z), where extent is adjusted for size-compatibility, must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-07278", + "text": "For each element of pRegions, srcOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-07279", + "text": "For each element of pRegions, srcOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-07280", + "text": "For each element of pRegions, srcOffset.z must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-07281", + "text": "For each element of pRegions, dstOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-07282", + "text": "For each element of pRegions, dstOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-07283", + "text": "For each element of pRegions, dstOffset.z must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01728", + "text": "For each element of pRegions, if the sum of srcOffset.x and extent.width does not equal the width of the subresource specified by srcSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01729", + "text": "For each element of pRegions, if the sum of srcOffset.y and extent.height does not equal the height of the subresource specified by srcSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-01730", + "text": "For each element of pRegions, if the sum of srcOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-aspect-06662", + "text": "If the aspect member of any element of pRegions includes any flag other than VK_IMAGE_ASPECT_STENCIL_BIT or srcImage was not created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT must have been included in the VkImageCreateInfo::usage used to create srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-aspect-06663", + "text": "If the aspect member of any element of pRegions includes any flag other than VK_IMAGE_ASPECT_STENCIL_BIT or dstImage was not created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageCreateInfo::usage used to create dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-aspect-06664", + "text": "If the aspect member of any element of pRegions includes VK_IMAGE_ASPECT_STENCIL_BIT, and srcImage was created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT must have been included in the VkImageStencilUsageCreateInfo::stencilUsage used to create srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-aspect-06665", + "text": "If the aspect member of any element of pRegions includes VK_IMAGE_ASPECT_STENCIL_BIT, and dstImage was created with separate stencil usage, VK_IMAGE_USAGE_TRANSFER_DST_BIT must have been included in the VkImageStencilUsageCreateInfo::stencilUsage used to create dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-07966", + "text": "If srcImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcSubresource-07967", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcSubresource-07968", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-07969", + "text": "srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-07966", + "text": "If dstImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstSubresource-07967", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstSubresource-07968", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-07969", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageCopy2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageInfo2-commonparent", + "text": "Both of dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkImageCopy2": { + "core": [ + { + "vuid": "VUID-VkImageCopy2-apiVersion-07940", + "text": "If the VK_KHR_sampler_ycbcr_conversion extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, the aspectMask member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-apiVersion-07941", + "text": "If the VK_KHR_maintenance1 extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, the layerCount member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-extent-06668", + "text": "extent.width must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-extent-06669", + "text": "extent.height must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-extent-06670", + "text": "extent.depth must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_COPY_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-srcSubresource-parameter", + "text": "srcSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageCopy2-dstSubresource-parameter", + "text": "dstSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyBufferToImage": { + "core": [ + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07966", + "text": "If dstImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-07967", + "text": "The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-07968", + "text": "If imageSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07969", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-07971", + "text": "For each element of pRegions, imageOffset.x and (imageExtent.width + imageOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-07972", + "text": "For each element of pRegions, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07973", + "text": "dstImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-01828", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-01829", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-01830", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-07737", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, the bufferOffset member of any element of pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-07738", + "text": "The imageOffset and imageExtent members of each element of pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-07739", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pRegions, the aspectMask member of imageSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-00171", + "text": "srcBuffer must be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element of pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-00173", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-00174", + "text": "srcBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-01997", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-00176", + "text": "If srcBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00177", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-00180", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-01396", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-07931", + "text": "If VK_EXT_depth_range_unrestricted is not enabled, for each element of pRegions whose imageSubresource contains a depth aspect, the data in srcBuffer must be in the range [0,1]", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07979", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, imageOffset.y must be 0 and imageExtent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-09104", + "text": "For each element of pRegions, imageOffset.z and (imageExtent.depth + imageOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07980", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, imageOffset.z must be 0 and imageExtent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and imageOffset.x does not equal the width of the subresource specified by imageSubresource, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and imageOffset.y does not equal the height of the subresource specified by imageSubresource, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07276", + "text": "For each element of pRegions, imageOffset.z must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of imageOffset.x and extent.width does not equal the width of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of imageOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of imageOffset.x and extent.height does not equal the width of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of imageOffset.y and extent.height does not equal the height of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of imageOffset.y and extent.width does not equal the height of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of imageOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-00209", + "text": "For each element of pRegions, if the sum of imageOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-imageSubresource-09105", + "text": "For each element of pRegions, imageSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07981", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, imageSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07983", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, imageSubresource.baseArrayLayer must be 0 and imageSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-bufferRowLength-09106", + "text": "For each element of pRegions, bufferRowLength must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-bufferImageHeight-09107", + "text": "For each element of pRegions, bufferImageHeight must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-bufferRowLength-09108", + "text": "For each element of pRegions, bufferRowLength divided by the texel block extent width and then multiplied by the texel block size of dstImage must be less than or equal to 231-1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07975", + "text": "If dstImage does not have either a depth/stencil format or a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the texel block size", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07976", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the element size of the compatible format for the format and the aspectMask of the imageSubresource as defined in Compatible Formats of Planes of Multi-Planar Formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-07978", + "text": "If dstImage has a depth/stencil format, the bufferOffset member of any element of pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-srcBuffer-parameter", + "text": "srcBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkBufferImageCopy structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage-commonparent", + "text": "Each of commandBuffer, dstImage, and srcBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyImageToBuffer": { + "core": [ + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07966", + "text": "If srcImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-07967", + "text": "The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-07968", + "text": "If imageSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07969", + "text": "srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-07971", + "text": "For each element of pRegions, imageOffset.x and (imageExtent.width + imageOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-07972", + "text": "For each element of pRegions, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07973", + "text": "srcImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01831", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01832", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-01833", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstBuffer must not be an unprotected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-07746", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, the bufferOffset member of any element of pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-07747", + "text": "The imageOffset and imageExtent members of each element of pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-10216", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pRegions, the aspectMask member of imageSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-00183", + "text": "dstBuffer must be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element of pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-00184", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00186", + "text": "srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-01998", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-00191", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-00192", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-00189", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-01397", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07979", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, imageOffset.y must be 0 and imageExtent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-09104", + "text": "For each element of pRegions, imageOffset.z and (imageExtent.depth + imageOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07980", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, imageOffset.z must be 0 and imageExtent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and imageOffset.x does not equal the width of the subresource specified by imageSubresource, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and imageOffset.y does not equal the height of the subresource specified by imageSubresource, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07276", + "text": "For each element of pRegions, imageOffset.z must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of imageOffset.x and extent.width does not equal the width of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of imageOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of imageOffset.x and extent.height does not equal the width of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of imageOffset.y and extent.height does not equal the height of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of imageOffset.y and extent.width does not equal the height of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of imageOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-00209", + "text": "For each element of pRegions, if the sum of imageOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-imageSubresource-09105", + "text": "For each element of pRegions, imageSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07981", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, imageSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07983", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, imageSubresource.baseArrayLayer must be 0 and imageSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-bufferRowLength-09106", + "text": "For each element of pRegions, bufferRowLength must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-bufferImageHeight-09107", + "text": "For each element of pRegions, bufferImageHeight must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-bufferRowLength-09108", + "text": "For each element of pRegions, bufferRowLength divided by the texel block extent width and then multiplied by the texel block size of srcImage must be less than or equal to 231-1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07975", + "text": "If srcImage does not have either a depth/stencil format or a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the texel block size", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07976", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the element size of the compatible format for the format and the aspectMask of the imageSubresource as defined in Compatible Formats of Planes of Multi-Planar Formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-07978", + "text": "If srcImage has a depth/stencil format, the bufferOffset member of any element of pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkBufferImageCopy structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer-commonparent", + "text": "Each of commandBuffer, dstBuffer, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkBufferImageCopy": { + "core": [ + { + "vuid": "VUID-VkBufferImageCopy-bufferRowLength-09101", + "text": "bufferRowLength must be 0, or greater than or equal to the width member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy-bufferImageHeight-09102", + "text": "bufferImageHeight must be 0, or greater than or equal to the height member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy-aspectMask-09103", + "text": "The aspectMask member of imageSubresource must only have a single bit set", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy-imageExtent-06659", + "text": "imageExtent.width must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy-imageExtent-06660", + "text": "imageExtent.height must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy-imageExtent-06661", + "text": "imageExtent.depth must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy-imageSubresource-parameter", + "text": "imageSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyBufferToImage2": { + "core": [ + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-01828", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-01829", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-01830", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-07737", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, the bufferOffset member of any element of pCopyBufferToImageInfo->pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-imageOffset-07738", + "text": "The imageOffset and imageExtent members of each element of pCopyBufferToImageInfo->pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-07739", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pCopyBufferToImageInfo->pRegions, the aspectMask member of imageSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-pCopyBufferToImageInfo-parameter", + "text": "pCopyBufferToImageInfo must be a valid pointer to a valid VkCopyBufferToImageInfo2 structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyBufferToImage2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyBufferToImageInfo2": { + "core": [ + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-04565", + "text": "The image region specified by each element of pRegions that does not contain VkCopyCommandTransformInfoQCOM in its pNext chain must be contained within the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2KHR-pRegions-04554", + "text": "If the image region specified by each element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, the rotated destination region must be contained within dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2KHR-pRegions-04555", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then dstImage must have a 1x1x1 texel block extent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2KHR-pRegions-06203", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then dstImage must be of type VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2KHR-pRegions-06204", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then dstImage must not have a multi-planar format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-00171", + "text": "srcBuffer must be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element of pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-00173", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-srcBuffer-00174", + "text": "srcBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-01997", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-srcBuffer-00176", + "text": "If srcBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-00177", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImageLayout-00180", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImageLayout-01396", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-07931", + "text": "If VK_EXT_depth_range_unrestricted is not enabled, for each element of pRegions whose imageSubresource contains a depth aspect, the data in srcBuffer must be in the range [0,1]", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07966", + "text": "If dstImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageSubresource-07967", + "text": "The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageSubresource-07968", + "text": "If imageSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07969", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07973", + "text": "dstImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07979", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, imageOffset.y must be 0 and imageExtent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-09104", + "text": "For each element of pRegions, imageOffset.z and (imageExtent.depth + imageOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07980", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, imageOffset.z must be 0 and imageExtent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and imageOffset.x does not equal the width of the subresource specified by imageSubresource, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and imageOffset.y does not equal the height of the subresource specified by imageSubresource, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07276", + "text": "For each element of pRegions, imageOffset.z must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of imageOffset.x and extent.width does not equal the width of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of imageOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of imageOffset.x and extent.height does not equal the width of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of imageOffset.y and extent.height does not equal the height of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of imageOffset.y and extent.width does not equal the height of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of imageOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-00209", + "text": "For each element of pRegions, if the sum of imageOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-imageSubresource-09105", + "text": "For each element of pRegions, imageSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07981", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, imageSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07983", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, imageSubresource.baseArrayLayer must be 0 and imageSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-bufferRowLength-09106", + "text": "For each element of pRegions, bufferRowLength must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-bufferImageHeight-09107", + "text": "For each element of pRegions, bufferImageHeight must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-bufferRowLength-09108", + "text": "For each element of pRegions, bufferRowLength divided by the texel block extent width and then multiplied by the texel block size of dstImage must be less than or equal to 231-1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07975", + "text": "If dstImage does not have either a depth/stencil format or a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the texel block size", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07976", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the element size of the compatible format for the format and the aspectMask of the imageSubresource as defined in Compatible Formats of Planes of Multi-Planar Formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-07978", + "text": "If dstImage has a depth/stencil format, the bufferOffset member of any element of pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-06223", + "text": "For each element of pRegions not containing VkCopyCommandTransformInfoQCOM in its pNext chain, imageOffset.x and (imageExtent.width + imageOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-06224", + "text": "For each element of pRegions not containing VkCopyCommandTransformInfoQCOM in its pNext chain, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-srcBuffer-parameter", + "text": "srcBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkBufferImageCopy2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyBufferToImageInfo2-commonparent", + "text": "Both of dstImage, and srcBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyImageToBuffer2": { + "core": [ + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-01831", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-01832", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstBuffer must not be a protected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-01833", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstBuffer must not be an unprotected buffer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-07746", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, the bufferOffset member of any element of pCopyImageToBufferInfo->pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-imageOffset-07747", + "text": "The imageOffset and imageExtent members of each element of pCopyImageToBufferInfo->pRegions must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-10216", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each element of pCopyImageToBufferInfo->pRegions, the aspectMask member of imageSubresource must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-pCopyImageToBufferInfo-parameter", + "text": "pCopyImageToBufferInfo must be a valid pointer to a valid VkCopyImageToBufferInfo2 structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyImageToBuffer2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyImageToBufferInfo2": { + "core": [ + { + "vuid": "VUID-VkCopyImageToBufferInfo2-pRegions-04566", + "text": "The image region specified by each element of pRegions that does not contain VkCopyCommandTransformInfoQCOM in its pNext chain must be contained within the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2KHR-pRegions-04557", + "text": "If the image region specified by each element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, the rotated source region must be contained within srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2KHR-pRegions-04558", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then srcImage must have a 1x1x1 texel block extent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2KHR-pRegions-06205", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then srcImage must be of type VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2KHR-pRegions-06206", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then srcImage must not have a multi-planar format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-pRegions-00183", + "text": "dstBuffer must be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element of pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-pRegions-00184", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-00186", + "text": "srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-01998", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-dstBuffer-00191", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-dstBuffer-00192", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImageLayout-00189", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImageLayout-01397", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07966", + "text": "If srcImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageSubresource-07967", + "text": "The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageSubresource-07968", + "text": "If imageSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07969", + "text": "srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07973", + "text": "srcImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07979", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, imageOffset.y must be 0 and imageExtent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-09104", + "text": "For each element of pRegions, imageOffset.z and (imageExtent.depth + imageOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07980", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, imageOffset.z must be 0 and imageExtent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and imageOffset.x does not equal the width of the subresource specified by imageSubresource, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and imageOffset.y does not equal the height of the subresource specified by imageSubresource, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07276", + "text": "For each element of pRegions, imageOffset.z must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of imageOffset.x and extent.width does not equal the width of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of imageOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of imageOffset.x and extent.height does not equal the width of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of imageOffset.y and extent.height does not equal the height of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of imageOffset.y and extent.width does not equal the height of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of imageOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-00209", + "text": "For each element of pRegions, if the sum of imageOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageSubresource-09105", + "text": "For each element of pRegions, imageSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07981", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, imageSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07983", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, imageSubresource.baseArrayLayer must be 0 and imageSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-bufferRowLength-09106", + "text": "For each element of pRegions, bufferRowLength must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-bufferImageHeight-09107", + "text": "For each element of pRegions, bufferImageHeight must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-bufferRowLength-09108", + "text": "For each element of pRegions, bufferRowLength divided by the texel block extent width and then multiplied by the texel block size of srcImage must be less than or equal to 231-1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07975", + "text": "If srcImage does not have either a depth/stencil format or a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the texel block size", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07976", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, bufferOffset must be a multiple of the element size of the compatible format for the format and the aspectMask of the imageSubresource as defined in Compatible Formats of Planes of Multi-Planar Formats", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-07978", + "text": "If srcImage has a depth/stencil format, the bufferOffset member of any element of pRegions must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-00197", + "text": "For each element of pRegions not containing VkCopyCommandTransformInfoQCOM in its pNext chain, imageOffset.x and (imageExtent.width + imageOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-imageOffset-00198", + "text": "For each element of pRegions not containing VkCopyCommandTransformInfoQCOM in its pNext chain, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkBufferImageCopy2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToBufferInfo2-commonparent", + "text": "Both of dstBuffer, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkBufferImageCopy2": { + "core": [ + { + "vuid": "VUID-VkBufferImageCopy2-bufferRowLength-09101", + "text": "bufferRowLength must be 0, or greater than or equal to the width member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-bufferImageHeight-09102", + "text": "bufferImageHeight must be 0, or greater than or equal to the height member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-aspectMask-09103", + "text": "The aspectMask member of imageSubresource must only have a single bit set", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-imageExtent-06659", + "text": "imageExtent.width must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-imageExtent-06660", + "text": "imageExtent.height must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-imageExtent-06661", + "text": "imageExtent.depth must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkCopyCommandTransformInfoQCOM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBufferImageCopy2-imageSubresource-parameter", + "text": "imageSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyCommandTransformInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkCopyCommandTransformInfoQCOM-transform-04560", + "text": "transform must be VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyCommandTransformInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM", + "page": "chapters/copies.html" + } + ] + }, + "vkCopyMemoryToImage": { + "core": [ + { + "vuid": "VUID-vkCopyMemoryToImage-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCopyMemoryToImage-pCopyMemoryToImageInfo-parameter", + "text": "pCopyMemoryToImageInfo must be a valid pointer to a valid VkCopyMemoryToImageInfo structure", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyMemoryToImageInfo": { + "core": [ + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-09109", + "text": "If dstImage is sparse then all memory ranges accessed by the copy command must be bound as described in Binding Resource Memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-09111", + "text": "If the stencil aspect of dstImage is accessed, and dstImage was not created with separate stencil usage, dstImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-09112", + "text": "If the stencil aspect of dstImage is accessed, and dstImage was created with separate stencil usage, dstImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageStencilUsageCreateInfo::stencilUsage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-09113", + "text": "If non-stencil aspects of dstImage are accessed, dstImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-09114", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the x, y, and z members of the imageOffset member of each element of pRegions must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-09115", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the imageExtent member of each element of pRegions must equal the extents of dstImage identified by imageSubresource", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07966", + "text": "If dstImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageSubresource-07967", + "text": "The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageSubresource-07968", + "text": "If imageSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07969", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageSubresource-07971", + "text": "For each element of pRegions, imageOffset.x and (imageExtent.width + imageOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageSubresource-07972", + "text": "For each element of pRegions, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07973", + "text": "dstImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07979", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, imageOffset.y must be 0 and imageExtent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-09104", + "text": "For each element of pRegions, imageOffset.z and (imageExtent.depth + imageOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified imageSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07980", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, imageOffset.z must be 0 and imageExtent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and imageOffset.x does not equal the width of the subresource specified by imageSubresource, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and imageOffset.y does not equal the height of the subresource specified by imageSubresource, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07276", + "text": "For each element of pRegions, imageOffset.z must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of imageOffset.x and extent.width does not equal the width of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of imageOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of imageOffset.x and extent.height does not equal the width of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of imageOffset.y and extent.height does not equal the height of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of imageOffset.y and extent.width does not equal the height of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of imageOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-00209", + "text": "For each element of pRegions, if the sum of imageOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-imageSubresource-09105", + "text": "For each element of pRegions, imageSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07981", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, imageSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-07983", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, imageSubresource.baseArrayLayer must be 0 and imageSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-memoryRowLength-09106", + "text": "For each element of pRegions, memoryRowLength must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-memoryImageHeight-09107", + "text": "For each element of pRegions, memoryImageHeight must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-memoryRowLength-09108", + "text": "For each element of pRegions, memoryRowLength divided by the texel block extent width and then multiplied by the texel block size of dstImage must be less than or equal to 231-1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImageLayout-09059", + "text": "dstImageLayout must specify the current layout of the image subresources of dstImage specified in pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImageLayout-09060", + "text": "dstImageLayout must be one of the image layouts returned in VkPhysicalDeviceHostImageCopyProperties::pCopyDstLayouts", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-flags-09393", + "text": "If flags includes VK_HOST_IMAGE_COPY_MEMCPY_BIT, for each region in pRegions, memoryRowLength and memoryImageHeight must both be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-flags-parameter", + "text": "flags must be a valid combination of VkHostImageCopyFlagBits values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkMemoryToImageCopy structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageInfo-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + } + ] + }, + "VkMemoryToImageCopy": { + "core": [ + { + "vuid": "VUID-VkMemoryToImageCopy-pHostPointer-09061", + "text": "pHostPointer must point to memory that is large enough to contain all memory locations that are accessed according to Buffer and Image Addressing, for each element of pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-pRegions-09062", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-memoryRowLength-09101", + "text": "memoryRowLength must be 0, or greater than or equal to the width member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-memoryImageHeight-09102", + "text": "memoryImageHeight must be 0, or greater than or equal to the height member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-aspectMask-09103", + "text": "The aspectMask member of imageSubresource must only have a single bit set", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-imageExtent-06659", + "text": "imageExtent.width must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-imageExtent-06660", + "text": "imageExtent.height must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-imageExtent-06661", + "text": "imageExtent.depth must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-pHostPointer-parameter", + "text": "pHostPointer must be a pointer value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkMemoryToImageCopy-imageSubresource-parameter", + "text": "imageSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCopyImageToMemory": { + "core": [ + { + "vuid": "VUID-vkCopyImageToMemory-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCopyImageToMemory-pCopyImageToMemoryInfo-parameter", + "text": "pCopyImageToMemoryInfo must be a valid pointer to a valid VkCopyImageToMemoryInfo structure", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyImageToMemoryInfo": { + "core": [ + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-09109", + "text": "If srcImage is sparse then all memory ranges accessed by the copy command must be bound as described in Binding Resource Memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-09111", + "text": "If the stencil aspect of srcImage is accessed, and srcImage was not created with separate stencil usage, srcImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-09112", + "text": "If the stencil aspect of srcImage is accessed, and srcImage was created with separate stencil usage, srcImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageStencilUsageCreateInfo::stencilUsage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-09113", + "text": "If non-stencil aspects of srcImage are accessed, srcImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-09114", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the x, y, and z members of the imageOffset member of each element of pRegions must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-09115", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the imageExtent member of each element of pRegions must equal the extents of srcImage identified by imageSubresource", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07966", + "text": "If srcImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageSubresource-07967", + "text": "The imageSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageSubresource-07968", + "text": "If imageSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, imageSubresource.baseArrayLayer + imageSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07969", + "text": "srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageSubresource-07971", + "text": "For each element of pRegions, imageOffset.x and (imageExtent.width + imageOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageSubresource-07972", + "text": "For each element of pRegions, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07973", + "text": "srcImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07979", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, imageOffset.y must be 0 and imageExtent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-09104", + "text": "For each element of pRegions, imageOffset.z and (imageExtent.depth + imageOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified imageSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07980", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, imageOffset.z must be 0 and imageExtent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and imageOffset.x does not equal the width of the subresource specified by imageSubresource, imageOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and imageOffset.y does not equal the height of the subresource specified by imageSubresource, imageOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07276", + "text": "For each element of pRegions, imageOffset.z must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of imageOffset.x and extent.width does not equal the width of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of imageOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of imageOffset.x and extent.height does not equal the width of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of imageOffset.y and extent.height does not equal the height of the subresource specified by imageSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of imageOffset.y and extent.width does not equal the height of the subresource specified by imageSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of imageOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of imageOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-00209", + "text": "For each element of pRegions, if the sum of imageOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-imageSubresource-09105", + "text": "For each element of pRegions, imageSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07981", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, imageSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-07983", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, imageSubresource.baseArrayLayer must be 0 and imageSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-memoryRowLength-09106", + "text": "For each element of pRegions, memoryRowLength must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-memoryImageHeight-09107", + "text": "For each element of pRegions, memoryImageHeight must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-memoryRowLength-09108", + "text": "For each element of pRegions, memoryRowLength divided by the texel block extent width and then multiplied by the texel block size of srcImage must be less than or equal to 231-1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImageLayout-09064", + "text": "srcImageLayout must specify the current layout of the image subresources of srcImage specified in pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImageLayout-09065", + "text": "srcImageLayout must be one of the image layouts returned in VkPhysicalDeviceHostImageCopyProperties::pCopySrcLayouts", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-flags-09394", + "text": "If flags includes VK_HOST_IMAGE_COPY_MEMCPY_BIT, for each region in pRegions, memoryRowLength and memoryImageHeight must both be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-flags-parameter", + "text": "flags must be a valid combination of VkHostImageCopyFlagBits values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageToMemoryCopy structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToMemoryInfo-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + } + ] + }, + "VkImageToMemoryCopy": { + "core": [ + { + "vuid": "VUID-VkImageToMemoryCopy-pHostPointer-09066", + "text": "pHostPointer must point to memory that is large enough to contain all memory locations that are accessed according to Buffer and Image Addressing, for each element of pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-pRegions-09067", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-memoryRowLength-09101", + "text": "memoryRowLength must be 0, or greater than or equal to the width member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-memoryImageHeight-09102", + "text": "memoryImageHeight must be 0, or greater than or equal to the height member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-aspectMask-09103", + "text": "The aspectMask member of imageSubresource must only have a single bit set", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-imageExtent-06659", + "text": "imageExtent.width must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-imageExtent-06660", + "text": "imageExtent.height must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-imageExtent-06661", + "text": "imageExtent.depth must not be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-pHostPointer-parameter", + "text": "pHostPointer must be a pointer value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageToMemoryCopy-imageSubresource-parameter", + "text": "imageSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCopyImageToImage": { + "core": [ + { + "vuid": "VUID-vkCopyImageToImage-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCopyImageToImage-pCopyImageToImageInfo-parameter", + "text": "pCopyImageToImageInfo must be a valid pointer to a valid VkCopyImageToImageInfo structure", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyImageToImageInfo": { + "core": [ + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-09069", + "text": "srcImage and dstImage must have been created with identical image creation parameters", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-09109", + "text": "If srcImage is sparse then all memory ranges accessed by the copy command must be bound as described in Binding Resource Memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-09111", + "text": "If the stencil aspect of srcImage is accessed, and srcImage was not created with separate stencil usage, srcImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-09112", + "text": "If the stencil aspect of srcImage is accessed, and srcImage was created with separate stencil usage, srcImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageStencilUsageCreateInfo::stencilUsage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-09113", + "text": "If non-stencil aspects of srcImage are accessed, srcImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-09114", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the x, y, and z members of the srcOffset member of each element of pRegions must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-09115", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the extent member of each element of pRegions must equal the extents of srcImage identified by srcSubresource", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07966", + "text": "If srcImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcSubresource-07967", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcSubresource-07968", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07969", + "text": "srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcSubresource-07971", + "text": "For each element of pRegions, srcOffset.x and (extent.width + srcOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcSubresource-07972", + "text": "For each element of pRegions, srcOffset.y and (extent.height + srcOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07979", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-09104", + "text": "For each element of pRegions, srcOffset.z and (extent.depth + srcOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07980", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, srcOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and srcOffset.x does not equal the width of the subresource specified by srcSubresource, srcOffset.x must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, srcOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and srcOffset.y does not equal the height of the subresource specified by srcSubresource, srcOffset.y must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07276", + "text": "For each element of pRegions, srcOffset.z must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of srcOffset.x and extent.width does not equal the width of the subresource specified by srcSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of srcOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of srcOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of srcOffset.x and extent.height does not equal the width of the subresource specified by srcSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of srcOffset.y and extent.height does not equal the height of the subresource specified by srcSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of srcOffset.y and extent.width does not equal the height of the subresource specified by srcSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of srcOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of srcOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-00209", + "text": "For each element of pRegions, if the sum of srcOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcSubresource-09105", + "text": "For each element of pRegions, srcSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07981", + "text": "If srcImage has a multi-planar format, then for each element of pRegions, srcSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-07983", + "text": "If srcImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, srcSubresource.baseArrayLayer must be 0 and srcSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-09109", + "text": "If dstImage is sparse then all memory ranges accessed by the copy command must be bound as described in Binding Resource Memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-09111", + "text": "If the stencil aspect of dstImage is accessed, and dstImage was not created with separate stencil usage, dstImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-09112", + "text": "If the stencil aspect of dstImage is accessed, and dstImage was created with separate stencil usage, dstImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageStencilUsageCreateInfo::stencilUsage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-09113", + "text": "If non-stencil aspects of dstImage are accessed, dstImage must have been created with VK_IMAGE_USAGE_HOST_TRANSFER_BIT set in VkImageCreateInfo::usage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-09114", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the x, y, and z members of the dstOffset member of each element of pRegions must be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-09115", + "text": "If flags contains VK_HOST_IMAGE_COPY_MEMCPY_BIT, the extent member of each element of pRegions must equal the extents of dstImage identified by dstSubresource", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07966", + "text": "If dstImage is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstSubresource-07967", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstSubresource-07968", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07969", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstSubresource-07971", + "text": "For each element of pRegions, dstOffset.x and (extent.width + dstOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstSubresource-07972", + "text": "For each element of pRegions, dstOffset.y and (extent.height + dstOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07979", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-09104", + "text": "For each element of pRegions, dstOffset.z and (extent.depth + dstOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07980", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07274", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, dstOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10051", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and dstOffset.x does not equal the width of the subresource specified by dstSubresource, dstOffset.x must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07275", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, dstOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10052", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and dstOffset.y does not equal the height of the subresource specified by dstSubresource, dstOffset.y must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07276", + "text": "For each element of pRegions, dstOffset.z must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-00207", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of dstOffset.x and extent.width does not equal the width of the subresource specified by dstSubresource, extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10053", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of dstOffset.x and extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10054", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of dstOffset.x and extent.width must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10055", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of dstOffset.x and extent.height does not equal the width of the subresource specified by dstSubresource, extent.height must be a multiple of the texel block extent width of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-00208", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of dstOffset.y and extent.height does not equal the height of the subresource specified by dstSubresource, extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10056", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of dstOffset.y and extent.width does not equal the height of the subresource specified by dstSubresource, extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10057", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of dstOffset.y and extent.height must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstOffset-10058", + "text": "For each element of pRegions, if VkCopyCommandTransformInfoQCOM::transform is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of dstOffset.y and extent.width must be a multiple of the texel block extent height of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-00209", + "text": "For each element of pRegions, if the sum of dstOffset.z and extent.depth does not equal the depth of the subresource specified by srcSubresource, extent.depth must be a multiple of the texel block extent depth of the VkFormat of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstSubresource-09105", + "text": "For each element of pRegions, dstSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07981", + "text": "If dstImage has a multi-planar format, then for each element of pRegions, dstSubresource.aspectMask must be a single valid multi-planar aspect mask bit", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-07983", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, for each element of pRegions, dstSubresource.baseArrayLayer must be 0 and dstSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImageLayout-09070", + "text": "srcImageLayout must specify the current layout of the image subresources of srcImage specified in pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImageLayout-09071", + "text": "dstImageLayout must specify the current layout of the image subresources of dstImage specified in pRegions", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImageLayout-09072", + "text": "srcImageLayout must be one of the image layouts returned in VkPhysicalDeviceHostImageCopyProperties::pCopySrcLayouts", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImageLayout-09073", + "text": "dstImageLayout must be one of the image layouts returned in VkPhysicalDeviceHostImageCopyProperties::pCopyDstLayouts", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-flags-parameter", + "text": "flags must be a valid combination of VkHostImageCopyFlagBits values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageCopy2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyImageToImageInfo-commonparent", + "text": "Both of dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyMemoryIndirectNV": { + "core": [ + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-None-07653", + "text": "The indirectCopy feature must be enabled", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-copyBufferAddress-07654", + "text": "copyBufferAddress must be 4 byte aligned", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-stride-07655", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkCopyMemoryIndirectCommandNV)", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-commandBuffer-07656", + "text": "The VkCommandPool that commandBuffer was allocated from must support at least one of the VkPhysicalDeviceCopyMemoryIndirectPropertiesNV::supportedQueues", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryIndirectNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyMemoryIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkCopyMemoryIndirectCommandNV-srcAddress-07657", + "text": "The srcAddress must be 4 byte aligned", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryIndirectCommandNV-dstAddress-07658", + "text": "The dstAddress must be 4 byte aligned", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryIndirectCommandNV-size-07659", + "text": "The size must be 4 byte aligned", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyMemoryToImageIndirectNV": { + "core": [ + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-None-07660", + "text": "The indirectCopy feature must be enabled", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07661", + "text": "dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-aspectMask-07662", + "text": "The aspectMask member for every subresource in pImageSubresources must only have a single bit set", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07663", + "text": "The image region specified by each element in copyBufferAddress must be a region that is contained within dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07664", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07665", + "text": "If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07973", + "text": "dstImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImageLayout-07667", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImageLayout-07669", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-mipLevel-07670", + "text": "The specified mipLevel of each region must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-layerCount-08764", + "text": "If layerCount is not VK_REMAINING_ARRAY_LAYERS, the specified baseArrayLayer + layerCount of each region must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-imageOffset-07672", + "text": "The imageOffset and imageExtent members of each region must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in VkQueueFamilyProperties", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-07673", + "text": "dstImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-commandBuffer-07674", + "text": "If the queue family used to create the VkCommandPool which commandBuffer was allocated from does not support VK_QUEUE_GRAPHICS_BIT, for each region, the aspectMask member of pImageSubresources must not be VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-imageOffset-07675", + "text": "For each region in copyBufferAddress, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified subresource", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-offset-07676", + "text": "offset must be 4 byte aligned", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-stride-07677", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkCopyMemoryToImageIndirectCommandNV)", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-pImageSubresources-parameter", + "text": "pImageSubresources must be a valid pointer to an array of copyCount valid VkImageSubresourceLayers structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-copyCount-arraylength", + "text": "copyCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToImageIndirectNV-commonparent", + "text": "Both of commandBuffer, and dstImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyMemoryToImageIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkCopyMemoryToImageIndirectCommandNV-srcAddress-07678", + "text": "The srcAddress must be 4 byte aligned", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageIndirectCommandNV-bufferRowLength-07679", + "text": "bufferRowLength must be 0, or greater than or equal to the width member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageIndirectCommandNV-bufferImageHeight-07680", + "text": "bufferImageHeight must be 0, or greater than or equal to the height member of imageExtent", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageIndirectCommandNV-imageOffset-07681", + "text": "imageOffset must specify a valid offset in the destination image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageIndirectCommandNV-imageExtent-07682", + "text": "imageExtent must specify a valid region in the destination image and can be 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyMemoryToImageIndirectCommandNV-imageSubresource-parameter", + "text": "imageSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdBlitImage": { + "core": [ + { + "vuid": "VUID-vkCmdBlitImage-commandBuffer-01834", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-commandBuffer-01835", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-commandBuffer-01836", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-pRegions-00217", + "text": "The union of all destination regions, specified by the elements of pRegions, must not overlap in memory with any texel that may be sampled during the blit operation", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-01999", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_BLIT_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-06421", + "text": "srcImage must not use a format that requires a sampler Y′CBCR conversion", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00219", + "text": "srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00220", + "text": "If srcImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImageLayout-00221", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImageLayout-01398", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-09459", + "text": "If srcImage and dstImage are the same, and an elements of pRegions contains the srcSubresource and dstSubresource with matching mipLevel and overlapping array layers, then the srcImageLayout and dstImageLayout must be VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-02000", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_BLIT_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-06422", + "text": "dstImage must not use a format that requires a sampler Y′CBCR conversion", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-00224", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-00225", + "text": "If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImageLayout-00226", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImageLayout-01399", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00229", + "text": "If either of srcImage or dstImage was created with a signed integer VkFormat, the other must also have been created with a signed integer VkFormat", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00230", + "text": "If either of srcImage or dstImage was created with an unsigned integer VkFormat, the other must also have been created with an unsigned integer VkFormat", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00231", + "text": "If either of srcImage or dstImage was created with a depth/stencil format, the other must have exactly the same format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00232", + "text": "If srcImage was created with a depth/stencil format, filter must be VK_FILTER_NEAREST", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00233", + "text": "srcImage must have been created with a samples value of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-00234", + "text": "dstImage must have been created with a samples value of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-filter-02001", + "text": "If filter is VK_FILTER_LINEAR, then the format features of srcImage must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-filter-02002", + "text": "If filter is VK_FILTER_CUBIC_EXT, then the format features of srcImage must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-filter-00237", + "text": "If filter is VK_FILTER_CUBIC_EXT, srcImage must be of type VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcSubresource-01705", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstSubresource-01706", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcSubresource-01707", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstSubresource-01708", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-02545", + "text": "dstImage and srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-maintenance8-10207", + "text": "If the maintenance8 feature is enabled and srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer must be 0, and srcSubresource.layerCount and dstSubresource.layerCount must each be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-maintenance8-10208", + "text": "If the maintenance8 feature is enabled and dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstSubresource.baseArrayLayer must be 0, and srcSubresource.layerCount and dstSubresource.layerCount must each be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-maintenance8-10579", + "text": "If the maintenance8 feature is enabled, dstImage is VK_IMAGE_TYPE_3D, and srcImage is not of type VK_IMAGE_TYPE_3D, then for each element of pRegions, the absolute difference of the z member of each member of dstOffsets must equal srcSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-maintenance8-10580", + "text": "If the maintenance8 feature is enabled, srcImage is VK_IMAGE_TYPE_3D, and dstImage is not of type VK_IMAGE_TYPE_3D, then for each element of pRegions, the absolute difference of the z member of each member of srcOffsets must equal dstSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00240", + "text": "If the maintenance8 feature is not enabled and either srcImage or dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer and dstSubresource.baseArrayLayer must each be 0, and srcSubresource.layerCount and dstSubresource.layerCount must each be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-aspectMask-00241", + "text": "For each element of pRegions, srcSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-aspectMask-00242", + "text": "For each element of pRegions, dstSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcOffset-00243", + "text": "For each element of pRegions, srcOffsets[0].x and srcOffsets[1].x must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcOffset-00244", + "text": "For each element of pRegions, srcOffsets[0].y and srcOffsets[1].y must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00245", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffsets[0].y must be 0 and srcOffsets[1].y must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcOffset-00246", + "text": "For each element of pRegions, srcOffsets[0].z and srcOffsets[1].z must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-00247", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffsets[0].z must be 0 and srcOffsets[1].z must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstOffset-00248", + "text": "For each element of pRegions, dstOffsets[0].x and dstOffsets[1].x must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstOffset-00249", + "text": "For each element of pRegions, dstOffsets[0].y and dstOffsets[1].y must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-00250", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffsets[0].y must be 0 and dstOffsets[1].y must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstOffset-00251", + "text": "For each element of pRegions, dstOffsets[0].z and dstOffsets[1].z must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-00252", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffsets[0].z must be 0 and dstOffsets[1].z must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageBlit structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-filter-parameter", + "text": "filter must be a valid VkFilter value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage-commonparent", + "text": "Each of commandBuffer, dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkImageBlit": { + "core": [ + { + "vuid": "VUID-VkImageBlit-aspectMask-00238", + "text": "The aspectMask member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit-layerCount-08800", + "text": "If neither of the layerCount members of srcSubresource or dstSubresource are VK_REMAINING_ARRAY_LAYERS, the layerCount members of srcSubresource or dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit-layerCount-08801", + "text": "If one of the layerCount members of srcSubresource or dstSubresource is VK_REMAINING_ARRAY_LAYERS, the other member must be either VK_REMAINING_ARRAY_LAYERS or equal to the arrayLayers member of the VkImageCreateInfo used to create the image minus baseArrayLayer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit-srcSubresource-parameter", + "text": "srcSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit-dstSubresource-parameter", + "text": "dstSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdBlitImage2": { + "core": [ + { + "vuid": "VUID-vkCmdBlitImage2-commandBuffer-01834", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-commandBuffer-01835", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-commandBuffer-01836", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-pBlitImageInfo-parameter", + "text": "pBlitImageInfo must be a valid pointer to a valid VkBlitImageInfo2 structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdBlitImage2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkBlitImageInfo2": { + "core": [ + { + "vuid": "VUID-VkBlitImageInfo2-pRegions-00217", + "text": "The union of all destination regions, specified by the elements of pRegions, must not overlap in memory with any texel that may be sampled during the blit operation", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-01999", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_BLIT_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-06421", + "text": "srcImage must not use a format that requires a sampler Y′CBCR conversion", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00219", + "text": "srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00220", + "text": "If srcImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImageLayout-00221", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImageLayout-01398", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-09459", + "text": "If srcImage and dstImage are the same, and an elements of pRegions contains the srcSubresource and dstSubresource with matching mipLevel and overlapping array layers, then the srcImageLayout and dstImageLayout must be VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-02000", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_BLIT_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-06422", + "text": "dstImage must not use a format that requires a sampler Y′CBCR conversion", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-00224", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-00225", + "text": "If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImageLayout-00226", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImageLayout-01399", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00229", + "text": "If either of srcImage or dstImage was created with a signed integer VkFormat, the other must also have been created with a signed integer VkFormat", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00230", + "text": "If either of srcImage or dstImage was created with an unsigned integer VkFormat, the other must also have been created with an unsigned integer VkFormat", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00231", + "text": "If either of srcImage or dstImage was created with a depth/stencil format, the other must have exactly the same format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00232", + "text": "If srcImage was created with a depth/stencil format, filter must be VK_FILTER_NEAREST", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00233", + "text": "srcImage must have been created with a samples value of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-00234", + "text": "dstImage must have been created with a samples value of VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-filter-02001", + "text": "If filter is VK_FILTER_LINEAR, then the format features of srcImage must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-filter-02002", + "text": "If filter is VK_FILTER_CUBIC_EXT, then the format features of srcImage must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-filter-00237", + "text": "If filter is VK_FILTER_CUBIC_EXT, srcImage must be of type VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcSubresource-01705", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstSubresource-01706", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcSubresource-01707", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstSubresource-01708", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-02545", + "text": "dstImage and srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-maintenance8-10207", + "text": "If the maintenance8 feature is enabled and srcImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer must be 0, and srcSubresource.layerCount and dstSubresource.layerCount must each be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-maintenance8-10208", + "text": "If the maintenance8 feature is enabled and dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstSubresource.baseArrayLayer must be 0, and srcSubresource.layerCount and dstSubresource.layerCount must each be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-maintenance8-10579", + "text": "If the maintenance8 feature is enabled, dstImage is VK_IMAGE_TYPE_3D, and srcImage is not of type VK_IMAGE_TYPE_3D, then for each element of pRegions, the absolute difference of the z member of each member of dstOffsets must equal srcSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-maintenance8-10580", + "text": "If the maintenance8 feature is enabled, srcImage is VK_IMAGE_TYPE_3D, and dstImage is not of type VK_IMAGE_TYPE_3D, then for each element of pRegions, the absolute difference of the z member of each member of srcOffsets must equal dstSubresource.layerCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00240", + "text": "If the maintenance8 feature is not enabled and either srcImage or dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.baseArrayLayer and dstSubresource.baseArrayLayer must each be 0, and srcSubresource.layerCount and dstSubresource.layerCount must each be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-aspectMask-00241", + "text": "For each element of pRegions, srcSubresource.aspectMask must specify aspects present in srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-aspectMask-00242", + "text": "For each element of pRegions, dstSubresource.aspectMask must specify aspects present in dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcOffset-00243", + "text": "For each element of pRegions, srcOffsets[0].x and srcOffsets[1].x must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcOffset-00244", + "text": "For each element of pRegions, srcOffsets[0].y and srcOffsets[1].y must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00245", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffsets[0].y must be 0 and srcOffsets[1].y must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcOffset-00246", + "text": "For each element of pRegions, srcOffsets[0].z and srcOffsets[1].z must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-00247", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffsets[0].z must be 0 and srcOffsets[1].z must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstOffset-00248", + "text": "For each element of pRegions, dstOffsets[0].x and dstOffsets[1].x must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstOffset-00249", + "text": "For each element of pRegions, dstOffsets[0].y and dstOffsets[1].y must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-00250", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffsets[0].y must be 0 and dstOffsets[1].y must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstOffset-00251", + "text": "For each element of pRegions, dstOffsets[0].z and dstOffsets[1].z must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-00252", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffsets[0].z must be 0 and dstOffsets[1].z must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-pRegions-04561", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then srcImage and dstImage must not be block-compressed images", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2KHR-pRegions-06207", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then srcImage must be of type VK_IMAGE_TYPE_2D", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2KHR-pRegions-06208", + "text": "If any element of pRegions contains VkCopyCommandTransformInfoQCOM in its pNext chain, then srcImage must not have a multi-planar format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-filter-09204", + "text": "If filter is VK_FILTER_CUBIC_EXT and if the selectableCubicWeights feature is not enabled then the cubic weights must be VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkBlitImageCubicWeightsInfoQCOM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageBlit2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-filter-parameter", + "text": "filter must be a valid VkFilter value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageInfo2-commonparent", + "text": "Both of dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkBlitImageCubicWeightsInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkBlitImageCubicWeightsInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkBlitImageCubicWeightsInfoQCOM-cubicWeights-parameter", + "text": "cubicWeights must be a valid VkCubicFilterWeightsQCOM value", + "page": "chapters/copies.html" + } + ] + }, + "VkImageBlit2": { + "core": [ + { + "vuid": "VUID-VkImageBlit2-aspectMask-00238", + "text": "The aspectMask member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-layerCount-08800", + "text": "If neither of the layerCount members of srcSubresource or dstSubresource are VK_REMAINING_ARRAY_LAYERS, the layerCount members of srcSubresource or dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-layerCount-08801", + "text": "If one of the layerCount members of srcSubresource or dstSubresource is VK_REMAINING_ARRAY_LAYERS, the other member must be either VK_REMAINING_ARRAY_LAYERS or equal to the arrayLayers member of the VkImageCreateInfo used to create the image minus baseArrayLayer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_BLIT_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkCopyCommandTransformInfoQCOM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-srcSubresource-parameter", + "text": "srcSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageBlit2-dstSubresource-parameter", + "text": "dstSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdResolveImage": { + "core": [ + { + "vuid": "VUID-vkCmdResolveImage-commandBuffer-01837", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-commandBuffer-01838", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-commandBuffer-01839", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-pRegions-00255", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-00256", + "text": "If srcImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-00257", + "text": "srcImage must have a sample count equal to any valid sample count value other than VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-00258", + "text": "If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-00259", + "text": "dstImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImageLayout-00260", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImageLayout-01400", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImageLayout-00262", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImageLayout-01401", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-02003", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-linearColorAttachment-06519", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, the format features of dstImage must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-01386", + "text": "srcImage and dstImage must have been created with the same image format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcSubresource-01709", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstSubresource-01710", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcSubresource-01711", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstSubresource-01712", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-02546", + "text": "dstImage and srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-04446", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-04447", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstSubresource.baseArrayLayer must be 0 and dstSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcOffset-00269", + "text": "For each element of pRegions, srcOffset.x and (extent.width + srcOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcOffset-00270", + "text": "For each element of pRegions, srcOffset.y and (extent.height + srcOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-00271", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcOffset-00272", + "text": "For each element of pRegions, srcOffset.z and (extent.depth + srcOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-00273", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstOffset-00274", + "text": "For each element of pRegions, dstOffset.x and (extent.width + dstOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstOffset-00275", + "text": "For each element of pRegions, dstOffset.y and (extent.height + dstOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-00276", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstOffset-00277", + "text": "For each element of pRegions, dstOffset.z and (extent.depth + dstOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-00278", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-06762", + "text": "srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-06763", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-06764", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-06765", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageResolve structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage-commonparent", + "text": "Each of commandBuffer, dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkImageResolve": { + "core": [ + { + "vuid": "VUID-VkImageResolve-aspectMask-00266", + "text": "The aspectMask member of srcSubresource and dstSubresource must only contain VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve-layerCount-08803", + "text": "If neither of the layerCount members of srcSubresource or dstSubresource are VK_REMAINING_ARRAY_LAYERS, the layerCount member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve-layerCount-08804", + "text": "If one of the layerCount members of srcSubresource or dstSubresource is VK_REMAINING_ARRAY_LAYERS, the other member must be either VK_REMAINING_ARRAY_LAYERS or equal to the arrayLayers member of the VkImageCreateInfo used to create the image minus baseArrayLayer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve-srcSubresource-parameter", + "text": "srcSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve-dstSubresource-parameter", + "text": "dstSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdResolveImage2": { + "core": [ + { + "vuid": "VUID-vkCmdResolveImage2-commandBuffer-01837", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, srcImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-commandBuffer-01838", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, dstImage must not be a protected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-commandBuffer-01839", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, dstImage must not be an unprotected image", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-pResolveImageInfo-parameter", + "text": "pResolveImageInfo must be a valid pointer to a valid VkResolveImageInfo2 structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdResolveImage2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkResolveImageInfo2": { + "core": [ + { + "vuid": "VUID-VkResolveImageInfo2-pRegions-00255", + "text": "The union of all source regions, and the union of all destination regions, specified by the elements of pRegions, must not overlap in memory", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-00256", + "text": "If srcImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-00257", + "text": "srcImage must have a sample count equal to any valid sample count value other than VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-00258", + "text": "If dstImage is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-00259", + "text": "dstImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImageLayout-00260", + "text": "srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImageLayout-01400", + "text": "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImageLayout-00262", + "text": "dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImageLayout-01401", + "text": "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-02003", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-linearColorAttachment-06519", + "text": "If the linearColorAttachment feature is enabled and the image is created with VK_IMAGE_TILING_LINEAR, the format features of dstImage must contain VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-01386", + "text": "srcImage and dstImage must have been created with the same image format", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcSubresource-01709", + "text": "The srcSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstSubresource-01710", + "text": "The dstSubresource.mipLevel member of each element of pRegions must be less than the mipLevels specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcSubresource-01711", + "text": "If srcSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, srcSubresource.baseArrayLayer + srcSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when srcImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstSubresource-01712", + "text": "If dstSubresource.layerCount is not VK_REMAINING_ARRAY_LAYERS, dstSubresource.baseArrayLayer + dstSubresource.layerCount of each element of pRegions must be less than or equal to the arrayLayers specified in VkImageCreateInfo when dstImage was created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-02546", + "text": "dstImage and srcImage must not have been created with flags containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-04446", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, srcSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-04447", + "text": "If dstImage is of type VK_IMAGE_TYPE_3D, then for each element of pRegions, dstSubresource.baseArrayLayer must be 0 and dstSubresource.layerCount must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcOffset-00269", + "text": "For each element of pRegions, srcOffset.x and (extent.width + srcOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcOffset-00270", + "text": "For each element of pRegions, srcOffset.y and (extent.height + srcOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-00271", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, srcOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcOffset-00272", + "text": "For each element of pRegions, srcOffset.z and (extent.depth + srcOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified srcSubresource of srcImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-00273", + "text": "If srcImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, srcOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstOffset-00274", + "text": "For each element of pRegions, dstOffset.x and (extent.width + dstOffset.x) must both be greater than or equal to 0 and less than or equal to the width of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstOffset-00275", + "text": "For each element of pRegions, dstOffset.y and (extent.height + dstOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-00276", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D, then for each element of pRegions, dstOffset.y must be 0 and extent.height must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstOffset-00277", + "text": "For each element of pRegions, dstOffset.z and (extent.depth + dstOffset.z) must both be greater than or equal to 0 and less than or equal to the depth of the specified dstSubresource of dstImage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-00278", + "text": "If dstImage is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of pRegions, dstOffset.z must be 0 and extent.depth must be 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-06762", + "text": "srcImage must have been created with VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-06763", + "text": "The format features of srcImage must contain VK_FORMAT_FEATURE_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-06764", + "text": "dstImage must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-06765", + "text": "The format features of dstImage must contain VK_FORMAT_FEATURE_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImage-parameter", + "text": "srcImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-srcImageLayout-parameter", + "text": "srcImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImage-parameter", + "text": "dstImage must be a valid VkImage handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-dstImageLayout-parameter", + "text": "dstImageLayout must be a valid VkImageLayout value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkImageResolve2 structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkResolveImageInfo2-commonparent", + "text": "Both of dstImage, and srcImage must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkImageResolve2": { + "core": [ + { + "vuid": "VUID-VkImageResolve2-aspectMask-00266", + "text": "The aspectMask member of srcSubresource and dstSubresource must only contain VK_IMAGE_ASPECT_COLOR_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve2-layerCount-08803", + "text": "If neither of the layerCount members of srcSubresource or dstSubresource are VK_REMAINING_ARRAY_LAYERS, the layerCount member of srcSubresource and dstSubresource must match", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve2-layerCount-08804", + "text": "If one of the layerCount members of srcSubresource or dstSubresource is VK_REMAINING_ARRAY_LAYERS, the other member must be either VK_REMAINING_ARRAY_LAYERS or equal to the arrayLayers member of the VkImageCreateInfo used to create the image minus baseArrayLayer", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve2-srcSubresource-parameter", + "text": "srcSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkImageResolve2-dstSubresource-parameter", + "text": "dstSubresource must be a valid VkImageSubresourceLayers structure", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdWriteBufferMarker2AMD": { + "core": [ + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03929", + "text": "If the geometryShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03930", + "text": "If the tessellationShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03931", + "text": "If the conditionalRendering feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03932", + "text": "If the fragmentDensityMap feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03933", + "text": "If the transformFeedback feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03934", + "text": "If the meshShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03935", + "text": "If the taskShader feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-07316", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, stage must not contain VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-04957", + "text": "If the subpassShading feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-04995", + "text": "If the invocationMask feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-07946", + "text": "If neither the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, stage must not contain VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-10751", + "text": "If the accelerationStructure feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-10752", + "text": "If the rayTracingMaintenance1 feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-10753", + "text": "If the micromap feature is not enabled, stage must not contain VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-synchronization2-03893", + "text": "The synchronization2 feature must be enabled", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03894", + "text": "stage must include only a single pipeline stage", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-03895", + "text": "stage must include only stages that are valid for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03896", + "text": "dstOffset must be less than or equal to the size of dstBuffer minus 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03897", + "text": "dstBuffer must have been created with the VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-03898", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-dstOffset-03899", + "text": "dstOffset must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-stage-parameter", + "text": "stage must be a valid combination of VkPipelineStageFlagBits2 values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarker2AMD-commonparent", + "text": "Both of commandBuffer, and dstBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdWriteBufferMarkerAMD": { + "core": [ + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04074", + "text": "pipelineStage must be a valid stage for the queue family that was used to create the command pool that commandBuffer was allocated from", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04075", + "text": "If the geometryShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04076", + "text": "If the tessellationShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04077", + "text": "If the conditionalRendering feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04078", + "text": "If the fragmentDensityMap feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04079", + "text": "If the transformFeedback feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04080", + "text": "If the meshShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-07077", + "text": "If the taskShader feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-shadingRateImage-07314", + "text": "If neither of the shadingRateImage or the attachmentFragmentShadingRate features are enabled, pipelineStage must not be VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-synchronization2-06489", + "text": "If the synchronization2 feature is not enabled, pipelineStage must not be VK_PIPELINE_STAGE_NONE", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-rayTracingPipeline-07943", + "text": "If neither of the VK_NV_ray_tracing extension or the rayTracingPipeline feature are enabled, pipelineStage must not be VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798", + "text": "dstOffset must be less than or equal to the size of dstBuffer minus 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800", + "text": "If dstBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801", + "text": "dstOffset must be a multiple of 4", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-parameter", + "text": "If pipelineStage is not 0, pipelineStage must be a valid VkPipelineStageFlagBits value", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdWriteBufferMarkerAMD-commonparent", + "text": "Both of commandBuffer, and dstBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "vkCmdCopyTensorARM": { + "core": [ + { + "vuid": "VUID-vkCmdCopyTensorARM-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyTensorARM-pCopyTensorInfo-parameter", + "text": "pCopyTensorInfo must be a valid pointer to a valid VkCopyTensorInfoARM structure", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyTensorARM-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyTensorARM-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyTensorARM-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-vkCmdCopyTensorARM-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/copies.html" + } + ] + }, + "VkCopyTensorInfoARM": { + "core": [ + { + "vuid": "VUID-VkCopyTensorInfoARM-srcTensor-09684", + "text": "srcTensor and dstTensor must have been created with equal values for VkTensorDescriptionARM::dimensionCount", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-pDimensions-09685", + "text": "For each of the elements of VkTensorDescriptionARM::pDimensions, srcTensor and dstTensor must be the same size", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-regionCount-09686", + "text": "regionCount must be equal to 1", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-pSrcOffset-09687", + "text": "pRegions must point to a VkTensorCopyARM structure whose pSrcOffset is NULL or whose elements are all 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-pDstOffset-09688", + "text": "pRegions must point to a VkTensorCopyARM structure whose pDstOffset, is NULL or whose elements are all 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-pExtent-09689", + "text": "pRegions must point to a VkTensorCopyARM structure whose pExtent is NULL or equal to the VkTensorDescriptionARM::pDimensions array specified when srcTensor and dstTensor were created", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-srcTensor-09690", + "text": "The format features of srcTensor must contain VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-srcTensor-09691", + "text": "srcTensor must have been created with VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARM usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-dstTensor-09692", + "text": "The format features of dstTensor must contain VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-dstTensor-09693", + "text": "dstTensor must have been created with VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARM usage flag", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-srcTensor-09694", + "text": "If srcTensor is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-dstTensor-09695", + "text": "If dstTensor is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-srcTensor-parameter", + "text": "srcTensor must be a valid VkTensorARM handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-dstTensor-parameter", + "text": "dstTensor must be a valid VkTensorARM handle", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-pRegions-parameter", + "text": "pRegions must be a valid pointer to an array of regionCount valid VkTensorCopyARM structures", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-regionCount-arraylength", + "text": "regionCount must be greater than 0", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkCopyTensorInfoARM-commonparent", + "text": "Both of dstTensor, and srcTensor must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/copies.html" + } + ] + }, + "VkTensorCopyARM": { + "core": [ + { + "vuid": "VUID-VkTensorCopyARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_COPY_ARM", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkTensorCopyARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkTensorCopyARM-pSrcOffset-parameter", + "text": "If pSrcOffset is not NULL, pSrcOffset must be a valid pointer to an array of dimensionCount uint64_t values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkTensorCopyARM-pDstOffset-parameter", + "text": "If pDstOffset is not NULL, pDstOffset must be a valid pointer to an array of dimensionCount uint64_t values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkTensorCopyARM-pExtent-parameter", + "text": "If pExtent is not NULL, pExtent must be a valid pointer to an array of dimensionCount uint64_t values", + "page": "chapters/copies.html" + }, + { + "vuid": "VUID-VkTensorCopyARM-dimensionCount-arraylength", + "text": "dimensionCount must be greater than 0", + "page": "chapters/copies.html" + } + ] + }, + "VkPipelineInputAssemblyStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06252", + "text": "If the primitiveTopologyListRestart feature is not enabled, and topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, primitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-06253", + "text": "If the primitiveTopologyPatchListRestart feature is not enabled, and topology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, primitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429", + "text": "If the geometryShader feature is not enabled, topology must not be any of VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430", + "text": "If the tessellationShader feature is not enabled, topology must not be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-triangleFans-04452", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::triangleFans is VK_FALSE, topology must not be VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkPipelineInputAssemblyStateCreateInfo-topology-parameter", + "text": "topology must be a valid VkPrimitiveTopology value", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdSetPrimitiveRestartEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetPrimitiveRestartEnable-None-08970", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveRestartEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveRestartEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveRestartEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveRestartEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdSetPrimitiveTopology": { + "core": [ + { + "vuid": "VUID-vkCmdSetPrimitiveTopology-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveTopology-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveTopology-primitiveTopology-parameter", + "text": "primitiveTopology must be a valid VkPrimitiveTopology value", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveTopology-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveTopology-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdSetPrimitiveTopology-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdBindIndexBuffer": { + "core": [ + { + "vuid": "VUID-vkCmdBindIndexBuffer-offset-08782", + "text": "offset must be less than the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-offset-08783", + "text": "The sum of offset and the base address of the range of VkDeviceMemory object that is backing buffer, must be a multiple of the size of the type indicated by indexType", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-buffer-08784", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-buffer-08785", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-indexType-08786", + "text": "indexType must not be VK_INDEX_TYPE_NONE_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-indexType-08787", + "text": "If indexType is VK_INDEX_TYPE_UINT8, the indexTypeUint8 feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-None-09493", + "text": "If the maintenance6 feature is not enabled, buffer must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-buffer-09494", + "text": "If buffer is VK_NULL_HANDLE, offset must be zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-buffer-parameter", + "text": "If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer-commonparent", + "text": "Both of buffer, and commandBuffer that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdBindIndexBuffer2": { + "core": [ + { + "vuid": "VUID-vkCmdBindIndexBuffer2-offset-08782", + "text": "offset must be less than the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-offset-08783", + "text": "The sum of offset and the base address of the range of VkDeviceMemory object that is backing buffer, must be a multiple of the size of the type indicated by indexType", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-buffer-08784", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-buffer-08785", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-indexType-08786", + "text": "indexType must not be VK_INDEX_TYPE_NONE_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-indexType-08787", + "text": "If indexType is VK_INDEX_TYPE_UINT8, the indexTypeUint8 feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-None-09493", + "text": "If the maintenance6 feature is not enabled, buffer must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-buffer-09494", + "text": "If buffer is VK_NULL_HANDLE, offset must be zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-size-08767", + "text": "If size is not VK_WHOLE_SIZE, size must be a multiple of the size of the type indicated by indexType", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-size-08768", + "text": "If size is not VK_WHOLE_SIZE, the sum of offset and size must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-buffer-parameter", + "text": "If buffer is not VK_NULL_HANDLE, buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBindIndexBuffer2-commonparent", + "text": "Both of buffer, and commandBuffer that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDraw": { + "core": [ + { + "vuid": "VUID-vkCmdDraw-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDraw-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawIndexed": { + "core": [ + { + "vuid": "VUID-vkCmdDrawIndexed-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-07312", + "text": "If the maintenance6 feature is not enabled, a valid index buffer must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-robustBufferAccess2-08798", + "text": "If the robustBufferAccess2 feature is not enabled, (indexSize × (firstIndex + indexCount) + offset) must be less than or equal to the size of the bound index buffer, with indexSize being based on the type specified by indexType, where the index buffer, indexType, and offset are specified via vkCmdBindIndexBuffer or vkCmdBindIndexBuffer2. If vkCmdBindIndexBuffer2 is used to bind the index buffer, the size of the bound index buffer is vkCmdBindIndexBuffer2::size", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexed-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMultiEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMultiEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-None-04933", + "text": "The multiDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-drawCount-04934", + "text": "drawCount must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-drawCount-04935", + "text": "If drawCount is greater than zero, pVertexInfo must be a valid pointer to memory containing one or more valid instances of VkMultiDrawInfoEXT structures", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-drawCount-09628", + "text": "If drawCount is greater than 1, stride must be a multiple of 4 and must be greater than or equal to sizeof(VkMultiDrawInfoEXT)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMultiIndexedEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-07312", + "text": "If the maintenance6 feature is not enabled, a valid index buffer must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-robustBufferAccess2-08798", + "text": "If the robustBufferAccess2 feature is not enabled, (indexSize × (firstIndex + indexCount) + offset) must be less than or equal to the size of the bound index buffer, with indexSize being based on the type specified by indexType, where the index buffer, indexType, and offset are specified via vkCmdBindIndexBuffer or vkCmdBindIndexBuffer2. If vkCmdBindIndexBuffer2 is used to bind the index buffer, the size of the bound index buffer is vkCmdBindIndexBuffer2::size", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-None-04937", + "text": "The multiDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939", + "text": "drawCount must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04940", + "text": "If drawCount is greater than zero, pIndexInfo must be a valid pointer to memory containing one or more valid instances of VkMultiDrawIndexedInfoEXT structures", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-drawCount-09629", + "text": "If drawCount is greater than 1, stride must be a multiple of 4 and must be greater than or equal to sizeof(VkMultiDrawIndexedInfoEXT)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-pVertexOffset-parameter", + "text": "If pVertexOffset is not NULL, pVertexOffset must be a valid pointer to a valid int32_t value", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMultiIndexedEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawIndirect": { + "core": [ + { + "vuid": "VUID-vkCmdDrawIndirect-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-drawCount-02718", + "text": "If the multiDrawIndirect feature is not enabled, drawCount must be 0 or 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-drawCount-02719", + "text": "drawCount must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-drawCount-00476", + "text": "If drawCount is greater than 1, stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawIndirectCommand)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-drawCount-00487", + "text": "If drawCount is equal to 1, (offset + sizeof(VkDrawIndirectCommand)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-drawCount-00488", + "text": "If drawCount is greater than 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawIndirectCommand)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirect-commonparent", + "text": "Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "VkDrawIndirectCommand": { + "core": [ + { + "vuid": "VUID-VkDrawIndirectCommand-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawIndirectCommand-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawIndirectCommand-firstInstance-00501", + "text": "If the drawIndirectFirstInstance feature is not enabled, firstInstance must be 0", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawIndirectCount": { + "core": [ + { + "vuid": "VUID-vkCmdDrawIndirectCount-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-02714", + "text": "If countBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-02715", + "text": "countBuffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-countBufferOffset-02716", + "text": "countBufferOffset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-02717", + "text": "The count stored in countBuffer must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-countBufferOffset-04129", + "text": "(countBufferOffset + sizeof(uint32_t)) must be less than or equal to the size of countBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-None-04445", + "text": "If the drawIndirectCount feature is not enabled this function must not be used", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-stride-03110", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawIndirectCommand)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", + "text": "If maxDrawCount is greater than or equal to 1, (stride × (maxDrawCount - 1) + offset + sizeof(VkDrawIndirectCommand)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-countBuffer-parameter", + "text": "countBuffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectCount-commonparent", + "text": "Each of buffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawIndexedIndirect": { + "core": [ + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-02718", + "text": "If the multiDrawIndirect feature is not enabled, drawCount must be 0 or 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-02719", + "text": "drawCount must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-None-07312", + "text": "If the maintenance6 feature is not enabled, a valid index buffer must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", + "text": "If drawCount is greater than 1, stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawIndexedIndirectCommand)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00539", + "text": "If drawCount is equal to 1, (offset + sizeof(VkDrawIndexedIndirectCommand)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", + "text": "If drawCount is greater than 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawIndexedIndirectCommand)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirect-commonparent", + "text": "Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "VkDrawIndexedIndirectCommand": { + "core": [ + { + "vuid": "VUID-VkDrawIndexedIndirectCommand-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawIndexedIndirectCommand-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawIndexedIndirectCommand-robustBufferAccess2-08798", + "text": "If the robustBufferAccess2 feature is not enabled, (indexSize × (firstIndex + indexCount) + offset) must be less than or equal to the size of the bound index buffer, with indexSize being based on the type specified by indexType, where the index buffer, indexType, and offset are specified via vkCmdBindIndexBuffer or vkCmdBindIndexBuffer2. If vkCmdBindIndexBuffer2 is used to bind the index buffer, the size of the bound index buffer is vkCmdBindIndexBuffer2::size", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawIndexedIndirectCommand-firstInstance-00554", + "text": "If the drawIndirectFirstInstance feature is not enabled, firstInstance must be 0", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawIndexedIndirectCount": { + "core": [ + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714", + "text": "If countBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", + "text": "countBuffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBufferOffset-02716", + "text": "countBufferOffset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02717", + "text": "The count stored in countBuffer must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBufferOffset-04129", + "text": "(countBufferOffset + sizeof(uint32_t)) must be less than or equal to the size of countBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-04445", + "text": "If the drawIndirectCount feature is not enabled this function must not be used", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-None-07312", + "text": "If the maintenance6 feature is not enabled, a valid index buffer must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawIndexedIndirectCommand)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", + "text": "If maxDrawCount is greater than or equal to 1, (stride × (maxDrawCount - 1) + offset + sizeof(VkDrawIndexedIndirectCommand)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-parameter", + "text": "countBuffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndexedIndirectCount-commonparent", + "text": "Each of buffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawIndirectByteCountEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-pNext-09461", + "text": "If the bound graphics pipeline state was created with VkPipelineVertexInputDivisorStateCreateInfo in the pNext chain of VkGraphicsPipelineCreateInfo::pVertexInputState, any member of VkPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisors has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-None-09462", + "text": "If shader objects are used for drawing or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, any member of the pVertexBindingDescriptions parameter to the vkCmdSetVertexInputEXT call that sets this dynamic state has a value other than 1 in divisor, and VkPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstance is VK_FALSE, then firstInstance must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287", + "text": "VkPhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedback must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288", + "text": "The implementation must support VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-vertexStride-02289", + "text": "vertexStride must be greater than 0 and less than or equal to VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferDataStride", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567", + "text": "If counterBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290", + "text": "counterBuffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterBufferOffset-04568", + "text": "counterBufferOffset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterOffset-09474", + "text": "counterOffset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-vertexStride-09475", + "text": "vertexStride must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-parameter", + "text": "counterBuffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawIndirectByteCountEXT-commonparent", + "text": "Both of commandBuffer, and counterBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdBeginConditionalRenderingEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBeginConditionalRenderingEXT-None-01980", + "text": "Conditional rendering must not already be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBeginConditionalRenderingEXT-pConditionalRenderingBegin-parameter", + "text": "pConditionalRenderingBegin must be a valid pointer to a valid VkConditionalRenderingBeginInfoEXT structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdBeginConditionalRenderingEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "VkConditionalRenderingBeginInfoEXT": { + "core": [ + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-buffer-01981", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-buffer-01982", + "text": "buffer must have been created with the VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-offset-01983", + "text": "offset must be less than the size of buffer by at least 32 bits", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-offset-01984", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkConditionalRenderingBeginInfoEXT-flags-parameter", + "text": "flags must be a valid combination of VkConditionalRenderingFlagBitsEXT values", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdEndConditionalRenderingEXT": { + "core": [ + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-None-01985", + "text": "Conditional rendering must be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-None-01986", + "text": "If conditional rendering was made active outside of a render pass instance, it must not be ended inside a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-None-01987", + "text": "If conditional rendering was made active within a subpass it must be ended in the same subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdEndConditionalRenderingEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMeshTasksNV": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-taskCount-02119", + "text": "taskCount must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesNV::maxDrawMeshTasksCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-MeshNV-07080", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the MeshNV Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMeshTasksIndirectNV": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02718", + "text": "If the multiDrawIndirect feature is not enabled, drawCount must be 0 or 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02719", + "text": "drawCount must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02146", + "text": "If drawCount is greater than 1, stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawMeshTasksIndirectCommandNV)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02156", + "text": "If drawCount is equal to 1, (offset + sizeof(VkDrawMeshTasksIndirectCommandNV)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", + "text": "If drawCount is greater than 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawMeshTasksIndirectCommandNV)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-MeshNV-07081", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the MeshNV Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectNV-commonparent", + "text": "Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "VkDrawMeshTasksIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandNV-taskCount-02175", + "text": "taskCount must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesNV::maxDrawMeshTasksCount", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMeshTasksIndirectCountNV": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714", + "text": "If countBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715", + "text": "countBuffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBufferOffset-02716", + "text": "countBufferOffset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02717", + "text": "The count stored in countBuffer must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBufferOffset-04129", + "text": "(countBufferOffset + sizeof(uint32_t)) must be less than or equal to the size of countBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04445", + "text": "If the drawIndirectCount feature is not enabled this function must not be used", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawMeshTasksIndirectCommandNV)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", + "text": "If maxDrawCount is greater than or equal to 1, (stride × (maxDrawCount - 1) + offset + sizeof(VkDrawMeshTasksIndirectCommandNV)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-MeshNV-07082", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the MeshNV Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-parameter", + "text": "countBuffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountNV-commonparent", + "text": "Each of buffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMeshTasksEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07322", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, groupCountX must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupCount[0]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07323", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, groupCountY must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupCount[1]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07324", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupCount[2]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07325", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, The product of groupCountX, groupCountY and groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupTotalCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07326", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, groupCountX must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[0]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07327", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, groupCountY must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[1]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07328", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[2]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-TaskEXT-07329", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, The product of groupCountX, groupCountY and groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupTotalCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-MeshEXT-07087", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the MeshEXT Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMeshTasksIndirectEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-02718", + "text": "If the multiDrawIndirect feature is not enabled, drawCount must be 0 or 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-02719", + "text": "drawCount must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-07088", + "text": "If drawCount is greater than 1, stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawMeshTasksIndirectCommandEXT)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-07089", + "text": "If drawCount is equal to 1, (offset + sizeof(VkDrawMeshTasksIndirectCommandEXT)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-drawCount-07090", + "text": "If drawCount is greater than 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawMeshTasksIndirectCommandEXT)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-MeshEXT-07091", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the MeshEXT Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectEXT-commonparent", + "text": "Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "VkDrawMeshTasksIndirectCommandEXT": { + "core": [ + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07322", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, groupCountX must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupCount[0]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07323", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, groupCountY must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupCount[1]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07324", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupCount[2]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07325", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS contains a shader using the TaskEXT Execution Model, The product of groupCountX, groupCountY and groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupTotalCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07326", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, groupCountX must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[0]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07327", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, groupCountY must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[1]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07328", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[2]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-VkDrawMeshTasksIndirectCommandEXT-TaskEXT-07329", + "text": "If the current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS does not contain a shader using the TaskEXT Execution Model, The product of groupCountX, groupCountY and groupCountZ must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupTotalCount", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawMeshTasksIndirectCountEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBuffer-02714", + "text": "If countBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBuffer-02715", + "text": "countBuffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBufferOffset-02716", + "text": "countBufferOffset must be a multiple of 4", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBuffer-02717", + "text": "The count stored in countBuffer must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBufferOffset-04129", + "text": "(countBufferOffset + sizeof(uint32_t)) must be less than or equal to the size of countBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-None-04445", + "text": "If the drawIndirectCount feature is not enabled this function must not be used", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-stride-07096", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawMeshTasksIndirectCommandEXT)", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-maxDrawCount-07097", + "text": "If maxDrawCount is greater than or equal to 1, (stride × (maxDrawCount - 1) + offset + sizeof(VkDrawMeshTasksIndirectCommandEXT)) must be less than or equal to the size of buffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-MeshEXT-07100", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the MeshEXT Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-countBuffer-parameter", + "text": "countBuffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawMeshTasksIndirectCountEXT-commonparent", + "text": "Each of buffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawClusterHUAWEI": { + "core": [ + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-None-07819", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT, or VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-groupCountX-07820", + "text": "groupCountX must be less than or equal to VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::maxWorkGroupCount[0]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-groupCountY-07821", + "text": "groupCountY must be less than or equal to VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::maxWorkGroupCount[1]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-groupCountZ-07822", + "text": "groupCountZ must be less than or equal to VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::maxWorkGroupCount[2]", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-ClusterCullingHUAWEI-07823", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the ClusterCullingHUAWEI Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterHUAWEI-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + } + ] + }, + "vkCmdDrawClusterIndirectHUAWEI": { + "core": [ + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-stage-06480", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pStages-10680", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must not have last bound the pStages element of VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT with a valid shader object other than VK_NULL_HANDLE", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07074", + "text": "Transform Feedback Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-07075", + "text": "Primitives Generated Queries must not be active", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-pipelineStatistics-07076", + "text": "The pipelineStatistics member used to create any active Pipeline Statistics Query must not contain VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT, or VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08694", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created without the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-None-08695", + "text": "If there is no bound graphics pipeline, and both the taskShader and meshShader features are enabled, and a valid VkShaderEXT is bound the to the VK_SHADER_STAGE_MESH_BIT_EXT stage, and that VkShaderEXT was created with the VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must be no VkShaderEXT bound to the VK_SHADER_STAGE_TASK_BIT_EXT stage", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-drawCount-02718", + "text": "If the multiDrawIndirect feature is not enabled, drawCount must be 0 or 1", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-drawCount-02719", + "text": "drawCount must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCount", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-ClusterCullingHUAWEI-07824", + "text": "The current pipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS must contain a shader stage using the ClusterCullingHUAWEI Execution Model", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-offset-07918", + "text": "offset must be a multiple of VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI::indirectBufferOffsetAlignment", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/drawing.html" + }, + { + "vuid": "VUID-vkCmdDrawClusterIndirectHUAWEI-commonparent", + "text": "Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/drawing.html" + } + ] + }, + "VkPipelineVertexInputStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613", + "text": "vertexBindingDescriptionCount must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614", + "text": "vertexAttributeDescriptionCount must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputAttributes", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-binding-00615", + "text": "For every binding specified by each element of pVertexAttributeDescriptions, a VkVertexInputBindingDescription must exist in pVertexBindingDescriptions with the same value of binding", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616", + "text": "All elements of pVertexBindingDescriptions must describe distinct binding numbers", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617", + "text": "All elements of pVertexAttributeDescriptions must describe distinct attribute locations", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineVertexInputDivisorStateCreateInfo", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-parameter", + "text": "If vertexBindingDescriptionCount is not 0, pVertexBindingDescriptions must be a valid pointer to an array of vertexBindingDescriptionCount valid VkVertexInputBindingDescription structures", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-parameter", + "text": "If vertexAttributeDescriptionCount is not 0, pVertexAttributeDescriptions must be a valid pointer to an array of vertexAttributeDescriptionCount valid VkVertexInputAttributeDescription structures", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkVertexInputBindingDescription": { + "core": [ + { + "vuid": "VUID-VkVertexInputBindingDescription-binding-00618", + "text": "binding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription-stride-00619", + "text": "stride must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindingStride", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription-stride-04456", + "text": "If the VK_KHR_portability_subset extension is enabled, stride must be a multiple of, and at least as large as, VkPhysicalDevicePortabilitySubsetPropertiesKHR::minVertexInputBindingStrideAlignment", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription-inputRate-parameter", + "text": "inputRate must be a valid VkVertexInputRate value", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkVertexInputAttributeDescription": { + "core": [ + { + "vuid": "VUID-VkVertexInputAttributeDescription-location-00620", + "text": "location must be less than VkPhysicalDeviceLimits::maxVertexInputAttributes", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription-binding-00621", + "text": "binding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription-offset-00622", + "text": "offset must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputAttributeOffset", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription-format-00623", + "text": "The format features of format must contain VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription-vertexAttributeAccessBeyondStride-04457", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::vertexAttributeAccessBeyondStride is VK_FALSE, the sum of offset plus the size of the vertex attribute data described by format must not be greater than stride in the VkVertexInputBindingDescription referenced in binding", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/fxvertex.html" + } + ] + }, + "vkCmdSetVertexInputEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetVertexInputEXT-None-08546", + "text": "Either the vertexInputDynamicState feature or the shaderObject feature or both must be enabled", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-vertexBindingDescriptionCount-04791", + "text": "vertexBindingDescriptionCount must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-vertexAttributeDescriptionCount-04792", + "text": "vertexAttributeDescriptionCount must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputAttributes", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-binding-04793", + "text": "For every binding specified by each element of pVertexAttributeDescriptions, a VkVertexInputBindingDescription2EXT must exist in pVertexBindingDescriptions with the same value of binding", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-pVertexBindingDescriptions-04794", + "text": "All elements of pVertexBindingDescriptions must describe distinct binding numbers", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-pVertexAttributeDescriptions-04795", + "text": "All elements of pVertexAttributeDescriptions must describe distinct attribute locations", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-pVertexBindingDescriptions-parameter", + "text": "If vertexBindingDescriptionCount is not 0, pVertexBindingDescriptions must be a valid pointer to an array of vertexBindingDescriptionCount valid VkVertexInputBindingDescription2EXT structures", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-pVertexAttributeDescriptions-parameter", + "text": "If vertexAttributeDescriptionCount is not 0, pVertexAttributeDescriptions must be a valid pointer to an array of vertexAttributeDescriptionCount valid VkVertexInputAttributeDescription2EXT structures", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdSetVertexInputEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkVertexInputBindingDescription2EXT": { + "core": [ + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-binding-04796", + "text": "binding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-stride-04797", + "text": "stride must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindingStride", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-divisor-04798", + "text": "If the vertexAttributeInstanceRateZeroDivisor feature is not enabled, divisor must not be 0", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-divisor-04799", + "text": "If the vertexAttributeInstanceRateDivisor feature is not enabled, divisor must be 1", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-divisor-06226", + "text": "divisor must be a value between 0 and VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT::maxVertexAttribDivisor, inclusive", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-divisor-06227", + "text": "If divisor is not 1 then inputRate must be of type VK_VERTEX_INPUT_RATE_INSTANCE", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDescription2EXT-inputRate-parameter", + "text": "inputRate must be a valid VkVertexInputRate value", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkVertexInputAttributeDescription2EXT": { + "core": [ + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-location-06228", + "text": "location must be less than VkPhysicalDeviceLimits::maxVertexInputAttributes", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-binding-06229", + "text": "binding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-offset-06230", + "text": "offset must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputAttributeOffset", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-format-04805", + "text": "The format features of format must contain VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-vertexAttributeAccessBeyondStride-04806", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::vertexAttributeAccessBeyondStride is VK_FALSE, the sum of offset plus the size of the vertex attribute data described by format must not be greater than stride in the VkVertexInputBindingDescription2EXT referenced in binding", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputAttributeDescription2EXT-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/fxvertex.html" + } + ] + }, + "vkCmdBindVertexBuffers": { + "core": [ + { + "vuid": "VUID-vkCmdBindVertexBuffers-firstBinding-00624", + "text": "firstBinding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-firstBinding-00625", + "text": "The sum of firstBinding and bindingCount must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pOffsets-00626", + "text": "All elements of pOffsets must be less than the size of the corresponding element in pBuffers", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-00627", + "text": "All elements of pBuffers must have been created with the VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-00628", + "text": "Each element of pBuffers that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-04001", + "text": "If the nullDescriptor feature is not enabled, all elements of pBuffers must not be VK_NULL_HANDLE", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-04002", + "text": "If an element of pBuffers is VK_NULL_HANDLE, then the corresponding element of pOffsets must be zero", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pBuffers-parameter", + "text": "pBuffers must be a valid pointer to an array of bindingCount valid or VK_NULL_HANDLE VkBuffer handles", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-pOffsets-parameter", + "text": "pOffsets must be a valid pointer to an array of bindingCount VkDeviceSize values", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-bindingCount-arraylength", + "text": "bindingCount must be greater than 0", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers-commonparent", + "text": "Both of commandBuffer, and the elements of pBuffers that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/fxvertex.html" + } + ] + }, + "vkCmdBindVertexBuffers2": { + "core": [ + { + "vuid": "VUID-vkCmdBindVertexBuffers2-firstBinding-03355", + "text": "firstBinding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-firstBinding-03356", + "text": "The sum of firstBinding and bindingCount must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pOffsets-03357", + "text": "If pSizes is not NULL, all elements of pOffsets must be less than the size of the corresponding element in pBuffers", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pSizes-03358", + "text": "If pSizes is not NULL, all elements of pOffsets plus pSizes , where pSizes is not VK_WHOLE_SIZE, must be less than or equal to the size of the corresponding element in pBuffers", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pBuffers-03359", + "text": "All elements of pBuffers must have been created with the VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pBuffers-03360", + "text": "Each element of pBuffers that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pBuffers-04111", + "text": "If the nullDescriptor feature is not enabled, all elements of pBuffers must not be VK_NULL_HANDLE", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pBuffers-04112", + "text": "If an element of pBuffers is VK_NULL_HANDLE, then the corresponding element of pOffsets must be zero", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pStrides-03362", + "text": "If pStrides is not NULL each element of pStrides must be less than or equal to VkPhysicalDeviceLimits::maxVertexInputBindingStride", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pStrides-06209", + "text": "If pStrides is not NULL each element of pStrides must be either 0 or greater than or equal to the maximum extent of all vertex input attributes fetched from the corresponding binding, where the extent is calculated as the VkVertexInputAttributeDescription::offset plus VkVertexInputAttributeDescription::format size", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pBuffers-parameter", + "text": "pBuffers must be a valid pointer to an array of bindingCount valid or VK_NULL_HANDLE VkBuffer handles", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pOffsets-parameter", + "text": "pOffsets must be a valid pointer to an array of bindingCount VkDeviceSize values", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pSizes-parameter", + "text": "If pSizes is not NULL, pSizes must be a valid pointer to an array of bindingCount VkDeviceSize values", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-pStrides-parameter", + "text": "If pStrides is not NULL, pStrides must be a valid pointer to an array of bindingCount VkDeviceSize values", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-bindingCount-arraylength", + "text": "If any of pSizes, or pStrides are not NULL, bindingCount must be greater than 0", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-vkCmdBindVertexBuffers2-commonparent", + "text": "Both of commandBuffer, and the elements of pBuffers that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkPipelineVertexInputDivisorStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfo-pVertexBindingDivisors-parameter", + "text": "pVertexBindingDivisors must be a valid pointer to an array of vertexBindingDivisorCount VkVertexInputBindingDivisorDescription structures", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkPipelineVertexInputDivisorStateCreateInfo-vertexBindingDivisorCount-arraylength", + "text": "vertexBindingDivisorCount must be greater than 0", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkVertexInputBindingDivisorDescription": { + "core": [ + { + "vuid": "VUID-VkVertexInputBindingDivisorDescription-binding-01869", + "text": "binding must be less than VkPhysicalDeviceLimits::maxVertexInputBindings", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDivisorDescription-vertexAttributeInstanceRateZeroDivisor-02228", + "text": "If the vertexAttributeInstanceRateZeroDivisor feature is not enabled, divisor must not be 0", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDivisorDescription-vertexAttributeInstanceRateDivisor-02229", + "text": "If the vertexAttributeInstanceRateDivisor feature is not enabled, divisor must be 1", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDivisorDescription-divisor-01870", + "text": "divisor must be a value between 0 and VkPhysicalDeviceVertexAttributeDivisorProperties::maxVertexAttribDivisor, inclusive", + "page": "chapters/fxvertex.html" + }, + { + "vuid": "VUID-VkVertexInputBindingDivisorDescription-inputRate-01871", + "text": "VkVertexInputBindingDescription::inputRate must be of type VK_VERTEX_INPUT_RATE_INSTANCE for this binding", + "page": "chapters/fxvertex.html" + } + ] + }, + "VkPipelineTessellationStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214", + "text": "patchControlPoints must be greater than zero and less than or equal to VkPhysicalDeviceLimits::maxTessellationPatchSize", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-VkPipelineTessellationStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-VkPipelineTessellationStateCreateInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineTessellationDomainOriginStateCreateInfo", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-VkPipelineTessellationStateCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-VkPipelineTessellationStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/tessellation.html" + } + ] + }, + "VkPipelineTessellationDomainOriginStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineTessellationDomainOriginStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-VkPipelineTessellationDomainOriginStateCreateInfo-domainOrigin-parameter", + "text": "domainOrigin must be a valid VkTessellationDomainOrigin value", + "page": "chapters/tessellation.html" + } + ] + }, + "vkCmdSetTessellationDomainOriginEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetTessellationDomainOriginEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-vkCmdSetTessellationDomainOriginEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-vkCmdSetTessellationDomainOriginEXT-domainOrigin-parameter", + "text": "domainOrigin must be a valid VkTessellationDomainOrigin value", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-vkCmdSetTessellationDomainOriginEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-vkCmdSetTessellationDomainOriginEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/tessellation.html" + }, + { + "vuid": "VUID-vkCmdSetTessellationDomainOriginEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/tessellation.html" + } + ] + }, + "vkCmdBindTransformFeedbackBuffersEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-transformFeedback-02355", + "text": "VkPhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedback must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02356", + "text": "firstBinding must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02357", + "text": "The sum of firstBinding and bindingCount must be less than or equal to VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02358", + "text": "All elements of pOffsets must be less than the size of the corresponding element in pBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02359", + "text": "All elements of pOffsets must be a multiple of 4", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02360", + "text": "All elements of pBuffers must have been created with the VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT flag", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pSize-02361", + "text": "If the optional pSize array is specified, each element of pSizes must either be VK_WHOLE_SIZE, or be less than or equal to VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferSize", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pSizes-02362", + "text": "All elements of pSizes must be either VK_WHOLE_SIZE, or less than or equal to the size of the corresponding buffer in pBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02363", + "text": "All elements of pOffsets plus pSizes, where the pSizes, element is not VK_WHOLE_SIZE, must be less than or equal to the size of the corresponding buffer in pBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02364", + "text": "Each element of pBuffers that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-None-02365", + "text": "Transform feedback must not be active when the vkCmdBindTransformFeedbackBuffersEXT command is recorded", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-parameter", + "text": "pBuffers must be a valid pointer to an array of bindingCount valid VkBuffer handles", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-parameter", + "text": "pOffsets must be a valid pointer to an array of bindingCount VkDeviceSize values", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-bindingCount-arraylength", + "text": "bindingCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBindTransformFeedbackBuffersEXT-commonparent", + "text": "Both of commandBuffer, and the elements of pBuffers must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdBeginTransformFeedbackEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-transformFeedback-02366", + "text": "VkPhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedback must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-02367", + "text": "Transform feedback must not be active", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02368", + "text": "firstCounterBuffer must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02369", + "text": "The sum of firstCounterBuffer and counterBufferCount must be less than or equal to VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-counterBufferCount-02607", + "text": "If counterBufferCount is not 0, and pCounterBuffers is not NULL, pCounterBuffers must be a valid pointer to an array of counterBufferCount VkBuffer handles that are either valid or VK_NULL_HANDLE", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-02370", + "text": "For each buffer handle in the array, if it is not VK_NULL_HANDLE it must reference a buffer large enough to hold 4 bytes at the corresponding offset from the pCounterBufferOffsets array", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffer-02371", + "text": "If pCounterBuffer is NULL, then pCounterBufferOffsets must also be NULL", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffers-02372", + "text": "For each buffer handle in the pCounterBuffers array that is not VK_NULL_HANDLE it must have been created with a usage value containing VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-09630", + "text": "The sum of firstCounterBuffer and counterBufferCount must be less than or equal to the number of transform feedback buffers bound by vkCmdBindTransformFeedbackBuffersEXT", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-06233", + "text": "If the shaderObject feature is not enabled, a valid graphics pipeline must be bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-04128", + "text": "The last pre-rasterization shader stage of the bound graphics pipeline must have been declared with the Xfb execution mode", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-02373", + "text": "Transform feedback must not be made active in a render pass instance with multiview enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-None-10656", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-parameter", + "text": "If counterBufferCount is not 0, and pCounterBufferOffsets is not NULL, pCounterBufferOffsets must be a valid pointer to an array of counterBufferCount VkDeviceSize values", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdBeginTransformFeedbackEXT-commonparent", + "text": "Both of commandBuffer, and the elements of pCounterBuffers that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdEndTransformFeedbackEXT": { + "core": [ + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-transformFeedback-02374", + "text": "VkPhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedback must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-None-02375", + "text": "Transform feedback must be active", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02376", + "text": "firstCounterBuffer must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02377", + "text": "The sum of firstCounterBuffer and counterBufferCount must be less than or equal to VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-counterBufferCount-02608", + "text": "If counterBufferCount is not 0, and pCounterBuffers is not NULL, pCounterBuffers must be a valid pointer to an array of counterBufferCount VkBuffer handles that are either valid or VK_NULL_HANDLE", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-02378", + "text": "For each buffer handle in the array, if it is not VK_NULL_HANDLE it must reference a buffer large enough to hold 4 bytes at the corresponding offset from the pCounterBufferOffsets array", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffer-02379", + "text": "If pCounterBuffer is NULL, then pCounterBufferOffsets must also be NULL", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffers-02380", + "text": "For each buffer handle in the pCounterBuffers array that is not VK_NULL_HANDLE it must have been created with a usage value containing VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-None-10657", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-parameter", + "text": "If counterBufferCount is not 0, and pCounterBufferOffsets is not NULL, pCounterBufferOffsets must be a valid pointer to an array of counterBufferCount VkDeviceSize values", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdEndTransformFeedbackEXT-commonparent", + "text": "Both of commandBuffer, and the elements of pCounterBuffers that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkPipelineViewportSwizzleStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-01215", + "text": "viewportCount must be greater than or equal to the viewportCount set in VkPipelineViewportStateCreateInfo", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-pViewportSwizzles-parameter", + "text": "pViewportSwizzles must be a valid pointer to an array of viewportCount valid VkViewportSwizzleNV structures", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetViewportSwizzleNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-pViewportSwizzles-parameter", + "text": "pViewportSwizzles must be a valid pointer to an array of viewportCount valid VkViewportSwizzleNV structures", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportSwizzleNV-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkViewportSwizzleNV": { + "core": [ + { + "vuid": "VUID-VkViewportSwizzleNV-x-parameter", + "text": "x must be a valid VkViewportCoordinateSwizzleNV value", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewportSwizzleNV-y-parameter", + "text": "y must be a valid VkViewportCoordinateSwizzleNV value", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewportSwizzleNV-z-parameter", + "text": "z must be a valid VkViewportCoordinateSwizzleNV value", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewportSwizzleNV-w-parameter", + "text": "w must be a valid VkViewportCoordinateSwizzleNV value", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkPipelineRasterizationProvokingVertexStateCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationProvokingVertexStateCreateInfoEXT-provokingVertexMode-04883", + "text": "If provokingVertexMode is VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, then the provokingVertexLast feature must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationProvokingVertexStateCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationProvokingVertexStateCreateInfoEXT-provokingVertexMode-parameter", + "text": "provokingVertexMode must be a valid VkProvokingVertexModeEXT value", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetProvokingVertexModeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-provokingVertexMode-07447", + "text": "If provokingVertexMode is VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, then the provokingVertexLast feature must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-provokingVertexMode-parameter", + "text": "provokingVertexMode must be a valid VkProvokingVertexModeEXT value", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetProvokingVertexModeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetDepthClampEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthClampEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampEnableEXT-depthClamp-07449", + "text": "If the depthClamp feature is not enabled, depthClampEnable must be VK_FALSE", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetDepthClipEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthClipEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipEnableEXT-depthClipEnable-07451", + "text": "The depthClipEnable feature must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkPipelineViewportDepthClipControlCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportDepthClipControlCreateInfoEXT-negativeOneToOne-06470", + "text": "If the depthClipControl feature is not enabled, negativeOneToOne must be VK_FALSE", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportDepthClipControlCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetDepthClipNegativeOneToOneEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthClipNegativeOneToOneEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipNegativeOneToOneEXT-depthClipControl-07453", + "text": "The depthClipControl feature must be enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipNegativeOneToOneEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipNegativeOneToOneEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipNegativeOneToOneEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClipNegativeOneToOneEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkPipelineViewportWScalingStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportWScalingStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetViewportWScalingEnableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetViewportWScalingEnableNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingEnableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingEnableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingEnableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingEnableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetViewportWScalingNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-firstViewport-01324", + "text": "The sum of firstViewport and viewportCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-pViewportWScalings-parameter", + "text": "pViewportWScalings must be a valid pointer to an array of viewportCount VkViewportWScalingNV structures", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWScalingNV-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkPipelineViewportStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216", + "text": "If the multiViewport feature is not enabled, viewportCount must not be greater than 1", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217", + "text": "If the multiViewport feature is not enabled, scissorCount must not be greater than 1", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218", + "text": "viewportCount must be less than or equal to VkPhysicalDeviceLimits::maxViewports", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219", + "text": "scissorCount must be less than or equal to VkPhysicalDeviceLimits::maxViewports", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-x-02821", + "text": "The x and y members of offset member of any element of pScissors must be greater than or equal to 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-offset-02822", + "text": "Evaluation of (offset.x + extent.width) must not cause a signed integer addition overflow for any element of pScissors", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-offset-02823", + "text": "Evaluation of (offset.y + extent.height) must not cause a signed integer addition overflow for any element of pScissors", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134", + "text": "If scissorCount and viewportCount are both not dynamic, then scissorCount and viewportCount must be identical", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135", + "text": "If the graphics pipeline is being created with VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT set then viewportCount must be 0, otherwise viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-scissorCount-04136", + "text": "If the graphics pipeline is being created with VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT set then scissorCount must be 0, otherwise scissorCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726", + "text": "If the viewportWScalingEnable member of a VkPipelineViewportWScalingStateCreateInfoNV structure included in the pNext chain is VK_TRUE, the viewportCount member of the VkPipelineViewportWScalingStateCreateInfoNV structure must be greater than or equal to VkPipelineViewportStateCreateInfo::viewportCount", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineViewportCoarseSampleOrderStateCreateInfoNV, VkPipelineViewportDepthClampControlCreateInfoEXT, VkPipelineViewportDepthClipControlCreateInfoEXT, VkPipelineViewportExclusiveScissorStateCreateInfoNV, VkPipelineViewportShadingRateImageStateCreateInfoNV, VkPipelineViewportSwizzleStateCreateInfoNV, or VkPipelineViewportWScalingStateCreateInfoNV", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkPipelineViewportStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetViewportWithCount": { + "core": [ + { + "vuid": "VUID-vkCmdSetViewportWithCount-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-viewportCount-03394", + "text": "viewportCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-viewportCount-03395", + "text": "If the multiViewport feature is not enabled, viewportCount must be 1", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-commandBuffer-04819", + "text": "commandBuffer must not have VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-pViewports-parameter", + "text": "pViewports must be a valid pointer to an array of viewportCount valid VkViewport structures", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewportWithCount-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetScissorWithCount": { + "core": [ + { + "vuid": "VUID-vkCmdSetScissorWithCount-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-scissorCount-03397", + "text": "scissorCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-scissorCount-03398", + "text": "If the multiViewport feature is not enabled, scissorCount must be 1", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-x-03399", + "text": "The x and y members of offset member of any element of pScissors must be greater than or equal to 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-offset-03400", + "text": "Evaluation of (offset.x + extent.width) must not cause a signed integer addition overflow for any element of pScissors", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-offset-03401", + "text": "Evaluation of (offset.y + extent.height) must not cause a signed integer addition overflow for any element of pScissors", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-commandBuffer-04820", + "text": "commandBuffer must not have VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-pScissors-parameter", + "text": "pScissors must be a valid pointer to an array of scissorCount VkRect2D structures", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetScissorWithCount-scissorCount-arraylength", + "text": "scissorCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "vkCmdSetViewport": { + "core": [ + { + "vuid": "VUID-vkCmdSetViewport-firstViewport-01223", + "text": "The sum of firstViewport and viewportCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-firstViewport-01224", + "text": "If the multiViewport feature is not enabled, firstViewport must be 0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-viewportCount-01225", + "text": "If the multiViewport feature is not enabled, viewportCount must be 1", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-commandBuffer-04821", + "text": "commandBuffer must not have VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-pViewports-parameter", + "text": "pViewports must be a valid pointer to an array of viewportCount valid VkViewport structures", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-vkCmdSetViewport-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkViewport": { + "core": [ + { + "vuid": "VUID-VkViewport-width-01770", + "text": "width must be greater than 0.0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-width-01771", + "text": "width must be less than or equal to VkPhysicalDeviceLimits::maxViewportDimensions[0]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-apiVersion-07917", + "text": "If the VK_KHR_maintenance1 extension is not enabled, the VK_AMD_negative_viewport_height extension is not enabled, and VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.1, height must be greater than 0.0", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-height-01773", + "text": "The absolute value of height must be less than or equal to VkPhysicalDeviceLimits::maxViewportDimensions[1]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-x-01774", + "text": "x must be greater than or equal to viewportBoundsRange[0]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-x-01232", + "text": "(x + width) must be less than or equal to viewportBoundsRange[1]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-y-01775", + "text": "y must be greater than or equal to viewportBoundsRange[0]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-y-01776", + "text": "y must be less than or equal to viewportBoundsRange[1]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-y-01777", + "text": "(y + height) must be greater than or equal to viewportBoundsRange[0]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-y-01233", + "text": "(y + height) must be less than or equal to viewportBoundsRange[1]", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-minDepth-01234", + "text": "If the VK_EXT_depth_range_unrestricted extension is not enabled, minDepth must be between 0.0 and 1.0, inclusive", + "page": "chapters/vertexpostproc.html" + }, + { + "vuid": "VUID-VkViewport-maxDepth-01235", + "text": "If the VK_EXT_depth_range_unrestricted extension is not enabled, maxDepth must be between 0.0 and 1.0, inclusive", + "page": "chapters/vertexpostproc.html" + } + ] + }, + "VkPipelineRasterizationStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782", + "text": "If the depthClamp feature is not enabled, depthClampEnable must be VK_FALSE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507", + "text": "If the fillModeNonSolid feature is not enabled, polygonMode must be VK_POLYGON_MODE_FILL or VK_POLYGON_MODE_FILL_RECTANGLE_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414", + "text": "If the VK_NV_fill_rectangle extension is not enabled, polygonMode must not be VK_POLYGON_MODE_FILL_RECTANGLE_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-pointPolygons-04458", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::pointPolygons is VK_FALSE, and rasterizerDiscardEnable is VK_FALSE, polygonMode must not be VK_POLYGON_MODE_POINT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDepthBiasRepresentationInfoEXT, VkPipelineRasterizationConservativeStateCreateInfoEXT, VkPipelineRasterizationDepthClipStateCreateInfoEXT, VkPipelineRasterizationLineStateCreateInfo, VkPipelineRasterizationProvokingVertexStateCreateInfoEXT, VkPipelineRasterizationStateRasterizationOrderAMD, or VkPipelineRasterizationStateStreamCreateInfoEXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-parameter", + "text": "polygonMode must be a valid VkPolygonMode value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-cullMode-parameter", + "text": "cullMode must be a valid combination of VkCullModeFlagBits values", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateCreateInfo-frontFace-parameter", + "text": "frontFace must be a valid VkFrontFace value", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineRasterizationDepthClipStateCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationDepthClipStateCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationDepthClipStateCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineMultisampleStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784", + "text": "If the sampleRateShading feature is not enabled, sampleShadingEnable must be VK_FALSE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785", + "text": "If the alphaToOne feature is not enabled, alphaToOneEnable must be VK_FALSE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786", + "text": "minSampleShading must be in the range [0,1]", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the pNext chain does not contain VkPipelineCoverageReductionStateCreateInfoNV, or VkPipelineCoverageReductionStateCreateInfoNV::coverageReductionMode is not set to VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the subpass has any color attachments, and rasterizationSamples is greater than the number of color samples, then sample shading must not be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineCoverageModulationStateCreateInfoNV, VkPipelineCoverageReductionStateCreateInfoNV, VkPipelineCoverageToColorStateCreateInfoNV, or VkPipelineSampleLocationsStateCreateInfoEXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter", + "text": "rasterizationSamples must be a valid VkSampleCountFlagBits value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter", + "text": "If pSampleMask is not NULL, pSampleMask must be a valid pointer to an array of \\(\\lceil{\\mathit{rasterizationSamples} \\over 32}\\rceil\\) VkSampleMask values", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetRasterizerDiscardEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetRasterizerDiscardEnable-None-08970", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizerDiscardEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizerDiscardEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizerDiscardEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizerDiscardEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineRasterizationStateStreamCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-geometryStreams-02324", + "text": "VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02325", + "text": "rasterizationStream must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02326", + "text": "rasterizationStream must be zero if VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackRasterizationStreamSelect is VK_FALSE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetRasterizationStreamEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-transformFeedback-07411", + "text": "The transformFeedback feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-rasterizationStream-07412", + "text": "rasterizationStream must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-rasterizationStream-07413", + "text": "rasterizationStream must be zero if VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackRasterizationStreamSelect is VK_FALSE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationStreamEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineRasterizationStateRasterizationOrderAMD": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationStateRasterizationOrderAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationStateRasterizationOrderAMD-rasterizationOrder-parameter", + "text": "rasterizationOrder must be a valid VkRasterizationOrderAMD value", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetRasterizationSamplesEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetRasterizationSamplesEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationSamplesEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationSamplesEXT-rasterizationSamples-parameter", + "text": "rasterizationSamples must be a valid VkSampleCountFlagBits value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationSamplesEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationSamplesEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetRasterizationSamplesEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineSampleLocationsStateCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sampleLocationsInfo-parameter", + "text": "sampleLocationsInfo must be a valid VkSampleLocationsInfoEXT structure", + "page": "chapters/primsrast.html" + } + ] + }, + "VkSampleLocationsInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-01526", + "text": "sampleLocationsPerPixel must be a valid VkSampleCountFlagBits value that is set in VkPhysicalDeviceSampleLocationsPropertiesEXT::sampleLocationSampleCounts", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-01527", + "text": "sampleLocationsCount must equal sampleLocationsPerPixel × sampleLocationGridSize.width × sampleLocationGridSize.height", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkSampleLocationsInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkSampleLocationsInfoEXT-pSampleLocations-parameter", + "text": "If sampleLocationsCount is not 0, pSampleLocations must be a valid pointer to an array of sampleLocationsCount VkSampleLocationEXT structures", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetSampleLocationsEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetSampleLocationsEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetSampleLocationsEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530", + "text": "If VkPhysicalDeviceSampleLocationsPropertiesEXT::variableSampleLocations is VK_FALSE then the current render pass must have been begun by specifying a VkRenderPassSampleLocationsBeginInfoEXT structure whose pPostSubpassSampleLocations member contains an element with a subpassIndex matching the current subpass index and the sampleLocationsInfo member of that element must match the sample locations state pointed to by pSampleLocationsInfo", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEXT-pSampleLocationsInfo-parameter", + "text": "pSampleLocationsInfo must be a valid pointer to a valid VkSampleLocationsInfoEXT structure", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetSampleLocationsEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkGetPhysicalDeviceFragmentShadingRatesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-pFragmentShadingRateCount-parameter", + "text": "pFragmentShadingRateCount must be a valid pointer to a uint32_t value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-pFragmentShadingRates-parameter", + "text": "If the value referenced by pFragmentShadingRateCount is not 0, and pFragmentShadingRates is not NULL, pFragmentShadingRates must be a valid pointer to an array of pFragmentShadingRateCount VkPhysicalDeviceFragmentShadingRateKHR structures", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPhysicalDeviceFragmentShadingRateKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShadingRateKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceFragmentShadingRateKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineFragmentShadingRateStateCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPipelineFragmentShadingRateStateCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetFragmentShadingRateKHR": { + "core": [ + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04507", + "text": "If the pipelineFragmentShadingRate feature is not enabled, pFragmentSize->width must be 1", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04508", + "text": "If the pipelineFragmentShadingRate feature is not enabled, pFragmentSize->height must be 1", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04509", + "text": "One of the pipelineFragmentShadingRate, primitiveFragmentShadingRate, or attachmentFragmentShadingRate features must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-primitiveFragmentShadingRate-04510", + "text": "If the primitiveFragmentShadingRate feature is not enabled, combinerOps[0] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-attachmentFragmentShadingRate-04511", + "text": "If the attachmentFragmentShadingRate feature is not enabled, combinerOps[1] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-fragmentSizeNonTrivialCombinerOps-04512", + "text": "If the fragmentSizeNonTrivialCombinerOps limit is not supported, elements of combinerOps must be either VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04513", + "text": "pFragmentSize->width must be greater than or equal to 1", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04514", + "text": "pFragmentSize->height must be greater than or equal to 1", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04515", + "text": "pFragmentSize->width must be a power-of-two value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04516", + "text": "pFragmentSize->height must be a power-of-two value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04517", + "text": "pFragmentSize->width must be less than or equal to 4", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04518", + "text": "pFragmentSize->height must be less than or equal to 4", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-parameter", + "text": "pFragmentSize must be a valid pointer to a valid VkExtent2D structure", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-combinerOps-parameter", + "text": "Each element of combinerOps must be a valid VkFragmentShadingRateCombinerOpKHR value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineFragmentShadingRateEnumStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetFragmentShadingRateEnumNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04576", + "text": "If the pipelineFragmentShadingRate feature is not enabled, shadingRate must be VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-supersampleFragmentShadingRates-04577", + "text": "If the supersampleFragmentShadingRates feature is not enabled, shadingRate must not be VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV, or VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-noInvocationFragmentShadingRates-04578", + "text": "If the noInvocationFragmentShadingRates feature is not enabled, shadingRate must not be VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentShadingRateEnums-04579", + "text": "The fragmentShadingRateEnums feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04580", + "text": "One of the pipelineFragmentShadingRate, primitiveFragmentShadingRate, or attachmentFragmentShadingRate features must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-primitiveFragmentShadingRate-04581", + "text": "If the primitiveFragmentShadingRate feature is not enabled, combinerOps[0] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-attachmentFragmentShadingRate-04582", + "text": "If the attachmentFragmentShadingRate feature is not enabled, combinerOps[1] must be VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentSizeNonTrivialCombinerOps-04583", + "text": "If the fragmentSizeNonTrivialCombinerOps limit is not supported, elements of combinerOps must be either VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR or VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-shadingRate-parameter", + "text": "shadingRate must be a valid VkFragmentShadingRateNV value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-combinerOps-parameter", + "text": "Each element of combinerOps must be a valid VkFragmentShadingRateCombinerOpKHR value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFragmentShadingRateEnumNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineViewportShadingRateImageStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02054", + "text": "If the multiViewport feature is not enabled, viewportCount must be 0 or 1", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02055", + "text": "viewportCount must be less than or equal to VkPhysicalDeviceLimits::maxViewports", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-shadingRateImageEnable-02056", + "text": "If shadingRateImageEnable is VK_TRUE, viewportCount must be greater or equal to the viewportCount member of VkPipelineViewportStateCreateInfo", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdBindShadingRateImageNV": { + "core": [ + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-None-02058", + "text": "The shadingRateImage feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02059", + "text": "If imageView is not VK_NULL_HANDLE, it must be a valid VkImageView handle of type VK_IMAGE_VIEW_TYPE_2D or VK_IMAGE_VIEW_TYPE_2D_ARRAY", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02060", + "text": "If imageView is not VK_NULL_HANDLE, it must have a format of VK_FORMAT_R8_UINT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02061", + "text": "If imageView is not VK_NULL_HANDLE, it must have been created with a usage value including VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-02062", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must match the actual VkImageLayout of each subresource accessible from imageView at the time the subresource is accessed", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageLayout-02063", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must be VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV or VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageView-parameter", + "text": "If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdBindShadingRateImageNV-commonparent", + "text": "Both of commandBuffer, and imageView that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetShadingRateImageEnableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetShadingRateImageEnableNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetShadingRateImageEnableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetShadingRateImageEnableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetShadingRateImageEnableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetShadingRateImageEnableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetViewportShadingRatePaletteNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-None-02064", + "text": "The shadingRateImage feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02067", + "text": "The sum of firstViewport and viewportCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02068", + "text": "If the multiViewport feature is not enabled, firstViewport must be 0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-02069", + "text": "If the multiViewport feature is not enabled, viewportCount must be 1", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-pShadingRatePalettes-parameter", + "text": "pShadingRatePalettes must be a valid pointer to an array of viewportCount valid VkShadingRatePaletteNV structures", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-arraylength", + "text": "viewportCount must be greater than 0", + "page": "chapters/primsrast.html" + } + ] + }, + "VkShadingRatePaletteNV": { + "core": [ + { + "vuid": "VUID-VkShadingRatePaletteNV-shadingRatePaletteEntryCount-02071", + "text": "shadingRatePaletteEntryCount must be between 1 and VkPhysicalDeviceShadingRateImagePropertiesNV::shadingRatePaletteSize, inclusive", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkShadingRatePaletteNV-pShadingRatePaletteEntries-parameter", + "text": "pShadingRatePaletteEntries must be a valid pointer to an array of shadingRatePaletteEntryCount valid VkShadingRatePaletteEntryNV values", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkShadingRatePaletteNV-shadingRatePaletteEntryCount-arraylength", + "text": "shadingRatePaletteEntryCount must be greater than 0", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineViewportCoarseSampleOrderStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-02072", + "text": "If sampleOrderType is not VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, customSamplerOrderCount must be 0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-02234", + "text": "The array pCustomSampleOrders must not contain two structures with matching values for both the shadingRate and sampleCount members", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-parameter", + "text": "sampleOrderType must be a valid VkCoarseSampleOrderTypeNV value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-parameter", + "text": "If customSampleOrderCount is not 0, pCustomSampleOrders must be a valid pointer to an array of customSampleOrderCount valid VkCoarseSampleOrderCustomNV structures", + "page": "chapters/primsrast.html" + } + ] + }, + "VkCoarseSampleOrderCustomNV": { + "core": [ + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-shadingRate-02073", + "text": "shadingRate must be a shading rate that generates fragments with more than one pixel", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleCount-02074", + "text": "sampleCount must correspond to a sample count enumerated in VkSampleCountFlags whose corresponding bit is set in VkPhysicalDeviceLimits::framebufferNoAttachmentsSampleCounts", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02075", + "text": "sampleLocationCount must be equal to the product of sampleCount, the fragment width for shadingRate, and the fragment height for shadingRate", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02076", + "text": "sampleLocationCount must be less than or equal to the value of VkPhysicalDeviceShadingRateImagePropertiesNV::shadingRateMaxCoarseSamples", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-02077", + "text": "The array pSampleLocations must contain exactly one entry for every combination of valid values for pixelX, pixelY, and sample in the structure VkCoarseSampleOrderCustomNV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-shadingRate-parameter", + "text": "shadingRate must be a valid VkShadingRatePaletteEntryNV value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-parameter", + "text": "pSampleLocations must be a valid pointer to an array of sampleLocationCount VkCoarseSampleLocationNV structures", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-arraylength", + "text": "sampleLocationCount must be greater than 0", + "page": "chapters/primsrast.html" + } + ] + }, + "VkCoarseSampleLocationNV": { + "core": [ + { + "vuid": "VUID-VkCoarseSampleLocationNV-pixelX-02078", + "text": "pixelX must be less than the width (in pixels) of the fragment", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleLocationNV-pixelY-02079", + "text": "pixelY must be less than the height (in pixels) of the fragment", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkCoarseSampleLocationNV-sample-02080", + "text": "sample must be less than the number of coverage samples in each pixel belonging to the fragment", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetCoarseSampleOrderNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-02081", + "text": "If sampleOrderType is not VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, customSamplerOrderCount must be 0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-02235", + "text": "The array pCustomSampleOrders must not contain two structures with matching values for both the shadingRate and sampleCount members", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-parameter", + "text": "sampleOrderType must be a valid VkCoarseSampleOrderTypeNV value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-parameter", + "text": "If customSampleOrderCount is not 0, pCustomSampleOrders must be a valid pointer to an array of customSampleOrderCount valid VkCoarseSampleOrderCustomNV structures", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCoarseSampleOrderNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineRasterizationLineStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-lineRasterizationMode-02768", + "text": "If lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the rectangularLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-lineRasterizationMode-02769", + "text": "If lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the bresenhamLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-lineRasterizationMode-02770", + "text": "If lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the smoothLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-stippledLineEnable-02771", + "text": "If stippledLineEnable is VK_TRUE and lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-stippledLineEnable-02772", + "text": "If stippledLineEnable is VK_TRUE and lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-stippledLineEnable-02773", + "text": "If stippledLineEnable is VK_TRUE and lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-stippledLineEnable-02774", + "text": "If stippledLineEnable is VK_TRUE and lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationLineStateCreateInfo-lineRasterizationMode-parameter", + "text": "lineRasterizationMode must be a valid VkLineRasterizationMode value", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetLineRasterizationModeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-07418", + "text": "If lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the rectangularLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-07419", + "text": "If lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the bresenhamLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-07420", + "text": "If lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the smoothLines feature must be enabled", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-lineRasterizationMode-parameter", + "text": "lineRasterizationMode must be a valid VkLineRasterizationModeEXT value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineRasterizationModeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetLineStippleEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetLineStippleEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStippleEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStippleEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStippleEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStippleEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetLineWidth": { + "core": [ + { + "vuid": "VUID-vkCmdSetLineWidth-lineWidth-00788", + "text": "If the wideLines feature is not enabled, lineWidth must be 1.0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineWidth-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineWidth-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineWidth-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineWidth-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetLineStipple": { + "core": [ + { + "vuid": "VUID-vkCmdSetLineStipple-lineStippleFactor-02776", + "text": "lineStippleFactor must be in the range [1,256]", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStipple-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStipple-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStipple-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetLineStipple-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetFrontFace": { + "core": [ + { + "vuid": "VUID-vkCmdSetFrontFace-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFrontFace-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFrontFace-frontFace-parameter", + "text": "frontFace must be a valid VkFrontFace value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFrontFace-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFrontFace-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetFrontFace-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetCullMode": { + "core": [ + { + "vuid": "VUID-vkCmdSetCullMode-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCullMode-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCullMode-cullMode-parameter", + "text": "cullMode must be a valid combination of VkCullModeFlagBits values", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCullMode-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCullMode-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetCullMode-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetPolygonModeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-fillModeNonSolid-07424", + "text": "If the fillModeNonSolid feature is not enabled, polygonMode must be VK_POLYGON_MODE_FILL or VK_POLYGON_MODE_FILL_RECTANGLE_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-polygonMode-07425", + "text": "If the VK_NV_fill_rectangle extension is not enabled, polygonMode must not be VK_POLYGON_MODE_FILL_RECTANGLE_NV", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-polygonMode-parameter", + "text": "polygonMode must be a valid VkPolygonMode value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetPolygonModeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetDepthBiasEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthBiasEnable-None-08970", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBiasEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBiasEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBiasEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBiasEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetDepthBias": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthBias-depthBiasClamp-00790", + "text": "If the depthBiasClamp feature is not enabled, depthBiasClamp must be 0.0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkDepthBiasRepresentationInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDepthBiasRepresentationInfoEXT-leastRepresentableValueForceUnormRepresentation-08947", + "text": "If the leastRepresentableValueForceUnormRepresentation feature is not enabled, depthBiasRepresentation must not be VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasRepresentationInfoEXT-floatRepresentation-08948", + "text": "If the floatRepresentation feature is not enabled, depthBiasRepresentation must not be VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasRepresentationInfoEXT-depthBiasExact-08949", + "text": "If the depthBiasExact feature is not enabled, depthBiasExact must be VK_FALSE", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasRepresentationInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasRepresentationInfoEXT-depthBiasRepresentation-parameter", + "text": "depthBiasRepresentation must be a valid VkDepthBiasRepresentationEXT value", + "page": "chapters/primsrast.html" + } + ] + }, + "VkDepthBiasInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDepthBiasInfoEXT-depthBiasClamp-08950", + "text": "If the depthBiasClamp feature is not enabled, depthBiasClamp must be 0.0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEPTH_BIAS_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasInfoEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDepthBiasRepresentationInfoEXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkDepthBiasInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetDepthBias2EXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthBias2EXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias2EXT-pDepthBiasInfo-parameter", + "text": "pDepthBiasInfo must be a valid pointer to a valid VkDepthBiasInfoEXT structure", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias2EXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias2EXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBias2EXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineRasterizationConservativeStateCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-extraPrimitiveOverestimationSize-01769", + "text": "extraPrimitiveOverestimationSize must be in the range of 0.0 to VkPhysicalDeviceConservativeRasterizationPropertiesEXT::maxExtraPrimitiveOverestimationSize inclusive", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-conservativeRasterizationMode-parameter", + "text": "conservativeRasterizationMode must be a valid VkConservativeRasterizationModeEXT value", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetConservativeRasterizationModeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetConservativeRasterizationModeEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetConservativeRasterizationModeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetConservativeRasterizationModeEXT-conservativeRasterizationMode-parameter", + "text": "conservativeRasterizationMode must be a valid VkConservativeRasterizationModeEXT value", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetConservativeRasterizationModeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetConservativeRasterizationModeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetConservativeRasterizationModeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "vkCmdSetExtraPrimitiveOverestimationSizeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-extraPrimitiveOverestimationSize-07428", + "text": "extraPrimitiveOverestimationSize must be in the range of 0.0 to VkPhysicalDeviceConservativeRasterizationPropertiesEXT::maxExtraPrimitiveOverestimationSize inclusive", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/primsrast.html" + }, + { + "vuid": "VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/primsrast.html" + } + ] + }, + "VkPipelineDiscardRectangleStateCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleCount-00582", + "text": "discardRectangleCount must be less than or equal to VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleMode-parameter", + "text": "discardRectangleMode must be a valid VkDiscardRectangleModeEXT value", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDiscardRectangleEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585", + "text": "The sum of firstDiscardRectangle and discardRectangleCount must be less than or equal to VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-x-00587", + "text": "The x and y member of offset in each VkRect2D element of pDiscardRectangles must be greater than or equal to 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-offset-00588", + "text": "Evaluation of (offset.x + extent.width) in each VkRect2D element of pDiscardRectangles must not cause a signed integer addition overflow", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-offset-00589", + "text": "Evaluation of (offset.y + extent.height) in each VkRect2D element of pDiscardRectangles must not cause a signed integer addition overflow", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-viewportScissor2D-04788", + "text": "If this command is recorded in a secondary command buffer with VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled, then this function must not be called", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-parameter", + "text": "pDiscardRectangles must be a valid pointer to an array of discardRectangleCount VkRect2D structures", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEXT-discardRectangleCount-arraylength", + "text": "discardRectangleCount must be greater than 0", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDiscardRectangleEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDiscardRectangleEnableEXT-specVersion-07851", + "text": "The VK_EXT_discard_rectangles extension must be enabled, and the implementation must support at least specVersion 2 of this extension", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDiscardRectangleModeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDiscardRectangleModeEXT-specVersion-07852", + "text": "The VK_EXT_discard_rectangles extension must be enabled, and the implementation must support at least specVersion 2 of this extension", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleModeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleModeEXT-discardRectangleMode-parameter", + "text": "discardRectangleMode must be a valid VkDiscardRectangleModeEXT value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleModeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleModeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDiscardRectangleModeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetScissor": { + "core": [ + { + "vuid": "VUID-vkCmdSetScissor-firstScissor-00592", + "text": "The sum of firstScissor and scissorCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-firstScissor-00593", + "text": "If the multiViewport feature is not enabled, firstScissor must be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-scissorCount-00594", + "text": "If the multiViewport feature is not enabled, scissorCount must be 1", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-x-00595", + "text": "The x and y members of offset member of any element of pScissors must be greater than or equal to 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-offset-00596", + "text": "Evaluation of (offset.x + extent.width) must not cause a signed integer addition overflow for any element of pScissors", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-offset-00597", + "text": "Evaluation of (offset.y + extent.height) must not cause a signed integer addition overflow for any element of pScissors", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-viewportScissor2D-04789", + "text": "If this command is recorded in a secondary command buffer with VkCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2D enabled, then this function must not be called", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-pScissors-parameter", + "text": "pScissors must be a valid pointer to an array of scissorCount VkRect2D structures", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetScissor-scissorCount-arraylength", + "text": "scissorCount must be greater than 0", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineViewportExclusiveScissorStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02027", + "text": "If the multiViewport feature is not enabled, exclusiveScissorCount must be 0 or 1", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02028", + "text": "exclusiveScissorCount must be less than or equal to VkPhysicalDeviceLimits::maxViewports", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02029", + "text": "exclusiveScissorCount must be 0 or greater than or equal to the viewportCount member of VkPipelineViewportStateCreateInfo", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetExclusiveScissorNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-None-02031", + "text": "The exclusiveScissor feature must be enabled", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02034", + "text": "The sum of firstExclusiveScissor and exclusiveScissorCount must be between 1 and VkPhysicalDeviceLimits::maxViewports, inclusive", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02035", + "text": "If the multiViewport feature is not enabled, firstExclusiveScissor must be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-02036", + "text": "If the multiViewport feature is not enabled, exclusiveScissorCount must be 1", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-x-02037", + "text": "The x and y members of offset in each member of pExclusiveScissors must be greater than or equal to 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-offset-02038", + "text": "Evaluation of (offset.x + extent.width) for each member of pExclusiveScissors must not cause a signed integer addition overflow", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-offset-02039", + "text": "Evaluation of (offset.y + extent.height) for each member of pExclusiveScissors must not cause a signed integer addition overflow", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-pExclusiveScissors-parameter", + "text": "pExclusiveScissors must be a valid pointer to an array of exclusiveScissorCount VkRect2D structures", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-arraylength", + "text": "exclusiveScissorCount must be greater than 0", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetExclusiveScissorEnableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-exclusiveScissor-07853", + "text": "The exclusiveScissor feature must be enabled, and the implementation must support at least specVersion 2 of the VK_NV_scissor_exclusive extension", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-pExclusiveScissorEnables-parameter", + "text": "pExclusiveScissorEnables must be a valid pointer to an array of exclusiveScissorCount VkBool32 values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetExclusiveScissorEnableNV-exclusiveScissorCount-arraylength", + "text": "exclusiveScissorCount must be greater than 0", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetSampleMaskEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-pSampleMask-parameter", + "text": "pSampleMask must be a valid pointer to an array of \\(\\lceil{\\mathit{samples} \\over 32}\\rceil\\) VkSampleMask values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetSampleMaskEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetAlphaToCoverageEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetAlphaToCoverageEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToCoverageEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToCoverageEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToCoverageEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToCoverageEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetAlphaToOneEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetAlphaToOneEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToOneEnableEXT-alphaToOne-07607", + "text": "If the alphaToOne feature is not enabled, alphaToOneEnable must be VK_FALSE", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToOneEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToOneEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToOneEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetAlphaToOneEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineDepthStencilStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598", + "text": "If the depthBounds feature is not enabled, depthBoundsTestEnable must be VK_FALSE", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-separateStencilMaskRef-04453", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::separateStencilMaskRef is VK_FALSE, and the value of VkPipelineDepthStencilStateCreateInfo::stencilTestEnable is VK_TRUE, and the value of VkPipelineRasterizationStateCreateInfo::cullMode is VK_CULL_MODE_NONE, the value of reference in each of the VkStencilOpState structs in front and back must be the same", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderDepthAttachmentAccess-06463", + "text": "If the rasterizationOrderDepthAttachmentAccess feature is not enabled, flags must not include VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-rasterizationOrderStencilAttachmentAccess-06464", + "text": "If the rasterizationOrderStencilAttachmentAccess feature is not enabled, flags must not include VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkPipelineDepthStencilStateCreateFlagBits values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-depthCompareOp-parameter", + "text": "depthCompareOp must be a valid VkCompareOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-front-parameter", + "text": "front must be a valid VkStencilOpState structure", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter", + "text": "back must be a valid VkStencilOpState structure", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDepthBoundsTestEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthBoundsTestEnable-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBoundsTestEnable-depthBounds-10010", + "text": "If the depthBounds feature is not enabled, depthBoundsTestEnable must be VK_FALSE", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBoundsTestEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBoundsTestEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBoundsTestEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBoundsTestEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDepthBounds": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthBounds-minDepthBounds-00600", + "text": "If the VK_EXT_depth_range_unrestricted extension is not enabled minDepthBounds must be between 0.0 and 1.0, inclusive", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBounds-maxDepthBounds-00601", + "text": "If the VK_EXT_depth_range_unrestricted extension is not enabled maxDepthBounds must be between 0.0 and 1.0, inclusive", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBounds-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthBounds-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetStencilTestEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetStencilTestEnable-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilTestEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilTestEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilTestEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilTestEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetStencilOp": { + "core": [ + { + "vuid": "VUID-vkCmdSetStencilOp-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-faceMask-parameter", + "text": "faceMask must be a valid combination of VkStencilFaceFlagBits values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-faceMask-requiredbitmask", + "text": "faceMask must not be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-failOp-parameter", + "text": "failOp must be a valid VkStencilOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-passOp-parameter", + "text": "passOp must be a valid VkStencilOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-depthFailOp-parameter", + "text": "depthFailOp must be a valid VkStencilOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-compareOp-parameter", + "text": "compareOp must be a valid VkCompareOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilOp-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkStencilOpState": { + "core": [ + { + "vuid": "VUID-VkStencilOpState-failOp-parameter", + "text": "failOp must be a valid VkStencilOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkStencilOpState-passOp-parameter", + "text": "passOp must be a valid VkStencilOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkStencilOpState-depthFailOp-parameter", + "text": "depthFailOp must be a valid VkStencilOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkStencilOpState-compareOp-parameter", + "text": "compareOp must be a valid VkCompareOp value", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetStencilCompareMask": { + "core": [ + { + "vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilCompareMask-faceMask-parameter", + "text": "faceMask must be a valid combination of VkStencilFaceFlagBits values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilCompareMask-faceMask-requiredbitmask", + "text": "faceMask must not be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilCompareMask-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilCompareMask-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetStencilWriteMask": { + "core": [ + { + "vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilWriteMask-faceMask-parameter", + "text": "faceMask must be a valid combination of VkStencilFaceFlagBits values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilWriteMask-faceMask-requiredbitmask", + "text": "faceMask must not be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilWriteMask-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilWriteMask-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetStencilReference": { + "core": [ + { + "vuid": "VUID-vkCmdSetStencilReference-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilReference-faceMask-parameter", + "text": "faceMask must be a valid combination of VkStencilFaceFlagBits values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilReference-faceMask-requiredbitmask", + "text": "faceMask must not be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilReference-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilReference-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetStencilReference-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineViewportDepthClampControlCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineViewportDepthClampControlCreateInfoEXT-pDepthClampRange-09646", + "text": "If depthClampMode is VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT, and the pipeline is not created with VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT, then pDepthClampRange must be a valid pointer to a valid VkDepthClampRangeEXT structure", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineViewportDepthClampControlCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineViewportDepthClampControlCreateInfoEXT-depthClampMode-parameter", + "text": "depthClampMode must be a valid VkDepthClampModeEXT value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineViewportDepthClampControlCreateInfoEXT-pDepthClampRange-parameter", + "text": "If pDepthClampRange is not NULL, pDepthClampRange must be a valid pointer to a valid VkDepthClampRangeEXT structure", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDepthClampRangeEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-pDepthClampRange-09647", + "text": "If depthClampMode is VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT, then pDepthClampRange must be a valid pointer to a valid VkDepthClampRangeEXT structure", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-depthClampMode-parameter", + "text": "depthClampMode must be a valid VkDepthClampModeEXT value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-pDepthClampRange-parameter", + "text": "If pDepthClampRange is not NULL, pDepthClampRange must be a valid pointer to a valid VkDepthClampRangeEXT structure", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthClampRangeEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkDepthClampRangeEXT": { + "core": [ + { + "vuid": "VUID-VkDepthClampRangeEXT-pDepthClampRange-00999", + "text": "minDepthClamp must be less than or equal to maxDepthClamp", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkDepthClampRangeEXT-pDepthClampRange-09648", + "text": "If the VK_EXT_depth_range_unrestricted extension is not enabled, minDepthClamp must be greater than or equal to 0.0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkDepthClampRangeEXT-pDepthClampRange-09649", + "text": "If the VK_EXT_depth_range_unrestricted extension is not enabled, maxDepthClamp must be less than or equal to 1.0", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDepthTestEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthTestEnable-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthTestEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthTestEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthTestEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthTestEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDepthCompareOp": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthCompareOp-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthCompareOp-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthCompareOp-depthCompareOp-parameter", + "text": "depthCompareOp must be a valid VkCompareOp value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthCompareOp-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthCompareOp-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthCompareOp-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetDepthWriteEnable": { + "core": [ + { + "vuid": "VUID-vkCmdSetDepthWriteEnable-None-08971", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthWriteEnable-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthWriteEnable-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthWriteEnable-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetDepthWriteEnable-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineRepresentativeFragmentTestStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineRepresentativeFragmentTestStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetRepresentativeFragmentTestEnableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetRepresentativeFragmentTestEnableNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetRepresentativeFragmentTestEnableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetRepresentativeFragmentTestEnableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetRepresentativeFragmentTestEnableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetRepresentativeFragmentTestEnableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineCoverageToColorStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-coverageToColorEnable-01404", + "text": "If coverageToColorEnable is VK_TRUE, then the render pass subpass indicated by VkGraphicsPipelineCreateInfo::renderPass and VkGraphicsPipelineCreateInfo::subpass must have a color attachment at the location selected by coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageToColorStateCreateInfoNV-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetCoverageToColorEnableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoverageToColorEnableNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorEnableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorEnableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorEnableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorEnableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetCoverageToColorLocationNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoverageToColorLocationNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorLocationNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorLocationNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorLocationNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageToColorLocationNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineCoverageReductionStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineCoverageReductionStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageReductionStateCreateInfoNV-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageReductionStateCreateInfoNV-coverageReductionMode-parameter", + "text": "coverageReductionMode must be a valid VkCoverageReductionModeNV value", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetCoverageReductionModeNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoverageReductionModeNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageReductionModeNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageReductionModeNV-coverageReductionMode-parameter", + "text": "coverageReductionMode must be a valid VkCoverageReductionModeNV value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageReductionModeNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageReductionModeNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageReductionModeNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-pCombinationCount-parameter", + "text": "pCombinationCount must be a valid pointer to a uint32_t value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-pCombinations-parameter", + "text": "If the value referenced by pCombinationCount is not 0, and pCombinations is not NULL, pCombinations must be a valid pointer to an array of pCombinationCount VkFramebufferMixedSamplesCombinationNV structures", + "page": "chapters/fragops.html" + } + ] + }, + "VkFramebufferMixedSamplesCombinationNV": { + "core": [ + { + "vuid": "VUID-VkFramebufferMixedSamplesCombinationNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkFramebufferMixedSamplesCombinationNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineCoverageModulationStateCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableEnable-01405", + "text": "If coverageModulationTableEnable is VK_TRUE, coverageModulationTableCount must be equal to the number of rasterization samples divided by the number of color samples in the subpass", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationMode-parameter", + "text": "coverageModulationMode must be a valid VkCoverageModulationModeNV value", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetCoverageModulationModeNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoverageModulationModeNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationModeNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationModeNV-coverageModulationMode-parameter", + "text": "coverageModulationMode must be a valid VkCoverageModulationModeNV value", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationModeNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationModeNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationModeNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetCoverageModulationTableEnableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoverageModulationTableEnableNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableEnableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableEnableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableEnableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableEnableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + } + ] + }, + "vkCmdSetCoverageModulationTableNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-pCoverageModulationTable-parameter", + "text": "pCoverageModulationTable must be a valid pointer to an array of coverageModulationTableCount float values", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/fragops.html" + }, + { + "vuid": "VUID-vkCmdSetCoverageModulationTableNV-coverageModulationTableCount-arraylength", + "text": "coverageModulationTableCount must be greater than 0", + "page": "chapters/fragops.html" + } + ] + }, + "VkPipelineColorBlendStateCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605", + "text": "If the independentBlend feature is not enabled, all elements of pAttachments must be identical", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606", + "text": "If the logicOp feature is not enabled, logicOpEnable must be VK_FALSE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607", + "text": "If logicOpEnable is VK_TRUE, logicOp must be a valid VkLogicOp value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-rasterizationOrderColorAttachmentAccess-06465", + "text": "If the rasterizationOrderColorAttachmentAccess feature is not enabled, flags must not include VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-07353", + "text": "If attachmentCount is not 0 , and any of VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, or VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT are not set, pAttachments must be a valid pointer to an array of attachmentCount valid VkPipelineColorBlendAttachmentState structures", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineColorBlendAdvancedStateCreateInfoEXT or VkPipelineColorWriteCreateInfoEXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-flags-parameter", + "text": "flags must be a valid combination of VkPipelineColorBlendStateCreateFlagBits values", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-parameter", + "text": "If attachmentCount is not 0, and pAttachments is not NULL, pAttachments must be a valid pointer to an array of attachmentCount valid VkPipelineColorBlendAttachmentState structures", + "page": "chapters/framebuffer.html" + } + ] + }, + "VkPipelineColorBlendAttachmentState": { + "core": [ + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608", + "text": "If the dualSrcBlend feature is not enabled, srcColorBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609", + "text": "If the dualSrcBlend feature is not enabled, dstColorBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610", + "text": "If the dualSrcBlend feature is not enabled, srcAlphaBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611", + "text": "If the dualSrcBlend feature is not enabled, dstAlphaBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406", + "text": "If either of colorBlendOp or alphaBlendOp is an advanced blend operation, then colorBlendOp must equal alphaBlendOp", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407", + "text": "If VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::advancedBlendIndependentBlend is VK_FALSE and colorBlendOp is an advanced blend operation, then colorBlendOp must be the same for all attachments", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408", + "text": "If VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::advancedBlendIndependentBlend is VK_FALSE and alphaBlendOp is an advanced blend operation, then alphaBlendOp must be the same for all attachments", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409", + "text": "If VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::advancedBlendAllOperations is VK_FALSE, then colorBlendOp must not be VK_BLEND_OP_ZERO_EXT, VK_BLEND_OP_SRC_EXT, VK_BLEND_OP_DST_EXT, VK_BLEND_OP_SRC_OVER_EXT, VK_BLEND_OP_DST_OVER_EXT, VK_BLEND_OP_SRC_IN_EXT, VK_BLEND_OP_DST_IN_EXT, VK_BLEND_OP_SRC_OUT_EXT, VK_BLEND_OP_DST_OUT_EXT, VK_BLEND_OP_SRC_ATOP_EXT, VK_BLEND_OP_DST_ATOP_EXT, VK_BLEND_OP_XOR_EXT, VK_BLEND_OP_INVERT_EXT, VK_BLEND_OP_INVERT_RGB_EXT, VK_BLEND_OP_LINEARDODGE_EXT, VK_BLEND_OP_LINEARBURN_EXT, VK_BLEND_OP_VIVIDLIGHT_EXT, VK_BLEND_OP_LINEARLIGHT_EXT, VK_BLEND_OP_PINLIGHT_EXT, VK_BLEND_OP_HARDMIX_EXT, VK_BLEND_OP_PLUS_EXT, VK_BLEND_OP_PLUS_CLAMPED_EXT, VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT, VK_BLEND_OP_PLUS_DARKER_EXT, VK_BLEND_OP_MINUS_EXT, VK_BLEND_OP_MINUS_CLAMPED_EXT, VK_BLEND_OP_CONTRAST_EXT, VK_BLEND_OP_INVERT_OVG_EXT, VK_BLEND_OP_RED_EXT, VK_BLEND_OP_GREEN_EXT, or VK_BLEND_OP_BLUE_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410", + "text": "If colorBlendOp or alphaBlendOp is an advanced blend operation, then colorAttachmentCount of the subpass this pipeline is compiled against must be less than or equal to VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT::advancedBlendMaxColorAttachments", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04454", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::constantAlphaColorBlendFactors is VK_FALSE, srcColorBlendFactor must not be VK_BLEND_FACTOR_CONSTANT_ALPHA or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04455", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::constantAlphaColorBlendFactors is VK_FALSE, dstColorBlendFactor must not be VK_BLEND_FACTOR_CONSTANT_ALPHA or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-parameter", + "text": "srcColorBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-parameter", + "text": "dstColorBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-parameter", + "text": "colorBlendOp must be a valid VkBlendOp value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-parameter", + "text": "srcAlphaBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-parameter", + "text": "dstAlphaBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-alphaBlendOp-parameter", + "text": "alphaBlendOp must be a valid VkBlendOp value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAttachmentState-colorWriteMask-parameter", + "text": "colorWriteMask must be a valid combination of VkColorComponentFlagBits values", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetColorBlendEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-pColorBlendEnables-parameter", + "text": "pColorBlendEnables must be a valid pointer to an array of attachmentCount VkBool32 values", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEnableEXT-attachmentCount-arraylength", + "text": "attachmentCount must be greater than 0", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetColorBlendEquationEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-pColorBlendEquations-parameter", + "text": "pColorBlendEquations must be a valid pointer to an array of attachmentCount valid VkColorBlendEquationEXT structures", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendEquationEXT-attachmentCount-arraylength", + "text": "attachmentCount must be greater than 0", + "page": "chapters/framebuffer.html" + } + ] + }, + "VkColorBlendEquationEXT": { + "core": [ + { + "vuid": "VUID-VkColorBlendEquationEXT-dualSrcBlend-07357", + "text": "If the dualSrcBlend feature is not enabled, srcColorBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-dualSrcBlend-07358", + "text": "If the dualSrcBlend feature is not enabled, dstColorBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-dualSrcBlend-07359", + "text": "If the dualSrcBlend feature is not enabled, srcAlphaBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-dualSrcBlend-07360", + "text": "If the dualSrcBlend feature is not enabled, dstAlphaBlendFactor must not be VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-colorBlendOp-07361", + "text": "colorBlendOp and alphaBlendOp must not be VK_BLEND_OP_ZERO_EXT, VK_BLEND_OP_SRC_EXT, VK_BLEND_OP_DST_EXT, VK_BLEND_OP_SRC_OVER_EXT, VK_BLEND_OP_DST_OVER_EXT, VK_BLEND_OP_SRC_IN_EXT, VK_BLEND_OP_DST_IN_EXT, VK_BLEND_OP_SRC_OUT_EXT, VK_BLEND_OP_DST_OUT_EXT, VK_BLEND_OP_SRC_ATOP_EXT, VK_BLEND_OP_DST_ATOP_EXT, VK_BLEND_OP_XOR_EXT, VK_BLEND_OP_MULTIPLY_EXT, VK_BLEND_OP_SCREEN_EXT, VK_BLEND_OP_OVERLAY_EXT, VK_BLEND_OP_DARKEN_EXT, VK_BLEND_OP_LIGHTEN_EXT, VK_BLEND_OP_COLORDODGE_EXT, VK_BLEND_OP_COLORBURN_EXT, VK_BLEND_OP_HARDLIGHT_EXT, VK_BLEND_OP_SOFTLIGHT_EXT, VK_BLEND_OP_DIFFERENCE_EXT, VK_BLEND_OP_EXCLUSION_EXT, VK_BLEND_OP_INVERT_EXT, VK_BLEND_OP_INVERT_RGB_EXT, VK_BLEND_OP_LINEARDODGE_EXT, VK_BLEND_OP_LINEARBURN_EXT, VK_BLEND_OP_VIVIDLIGHT_EXT, VK_BLEND_OP_LINEARLIGHT_EXT, VK_BLEND_OP_PINLIGHT_EXT, VK_BLEND_OP_HARDMIX_EXT, VK_BLEND_OP_HSL_HUE_EXT, VK_BLEND_OP_HSL_SATURATION_EXT, VK_BLEND_OP_HSL_COLOR_EXT, VK_BLEND_OP_HSL_LUMINOSITY_EXT, VK_BLEND_OP_PLUS_EXT, VK_BLEND_OP_PLUS_CLAMPED_EXT, VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT, VK_BLEND_OP_PLUS_DARKER_EXT, VK_BLEND_OP_MINUS_EXT, VK_BLEND_OP_MINUS_CLAMPED_EXT, VK_BLEND_OP_CONTRAST_EXT, VK_BLEND_OP_INVERT_OVG_EXT, VK_BLEND_OP_RED_EXT, VK_BLEND_OP_GREEN_EXT, or VK_BLEND_OP_BLUE_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-constantAlphaColorBlendFactors-07362", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::constantAlphaColorBlendFactors is VK_FALSE, srcColorBlendFactor must not be VK_BLEND_FACTOR_CONSTANT_ALPHA or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-constantAlphaColorBlendFactors-07363", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::constantAlphaColorBlendFactors is VK_FALSE, dstColorBlendFactor must not be VK_BLEND_FACTOR_CONSTANT_ALPHA or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-srcColorBlendFactor-parameter", + "text": "srcColorBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-dstColorBlendFactor-parameter", + "text": "dstColorBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-colorBlendOp-parameter", + "text": "colorBlendOp must be a valid VkBlendOp value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-srcAlphaBlendFactor-parameter", + "text": "srcAlphaBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-dstAlphaBlendFactor-parameter", + "text": "dstAlphaBlendFactor must be a valid VkBlendFactor value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendEquationEXT-alphaBlendOp-parameter", + "text": "alphaBlendOp must be a valid VkBlendOp value", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetColorWriteMaskEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-pColorWriteMasks-parameter", + "text": "pColorWriteMasks must be a valid pointer to an array of attachmentCount valid combinations of VkColorComponentFlagBits values", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteMaskEXT-attachmentCount-arraylength", + "text": "attachmentCount must be greater than 0", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetBlendConstants": { + "core": [ + { + "vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetBlendConstants-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetBlendConstants-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + } + ] + }, + "VkPipelineColorBlendAdvancedStateCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-srcPremultiplied-01424", + "text": "If the non-premultiplied source color property is not supported, srcPremultiplied must be VK_TRUE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-dstPremultiplied-01425", + "text": "If the non-premultiplied destination color property is not supported, dstPremultiplied must be VK_TRUE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-01426", + "text": "If the correlated overlap property is not supported, blendOverlap must be VK_BLEND_OVERLAP_UNCORRELATED_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-parameter", + "text": "blendOverlap must be a valid VkBlendOverlapEXT value", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetColorBlendAdvancedEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-pColorBlendAdvanced-parameter", + "text": "pColorBlendAdvanced must be a valid pointer to an array of attachmentCount valid VkColorBlendAdvancedEXT structures", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorBlendAdvancedEXT-attachmentCount-arraylength", + "text": "attachmentCount must be greater than 0", + "page": "chapters/framebuffer.html" + } + ] + }, + "VkColorBlendAdvancedEXT": { + "core": [ + { + "vuid": "VUID-VkColorBlendAdvancedEXT-srcPremultiplied-07505", + "text": "If the non-premultiplied source color property is not supported, srcPremultiplied must be VK_TRUE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendAdvancedEXT-dstPremultiplied-07506", + "text": "If the non-premultiplied destination color property is not supported, dstPremultiplied must be VK_TRUE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendAdvancedEXT-blendOverlap-07507", + "text": "If the correlated overlap property is not supported, blendOverlap must be VK_BLEND_OVERLAP_UNCORRELATED_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendAdvancedEXT-advancedBlendOp-parameter", + "text": "advancedBlendOp must be a valid VkBlendOp value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkColorBlendAdvancedEXT-blendOverlap-parameter", + "text": "blendOverlap must be a valid VkBlendOverlapEXT value", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetLogicOpEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetLogicOpEnableEXT-None-09423", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEnableEXT-logicOp-07366", + "text": "If the logicOp feature is not enabled, logicOpEnable must be VK_FALSE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetLogicOpEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetLogicOpEXT-None-09422", + "text": "At least one of the following must be true:
\n\n
", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEXT-logicOp-parameter", + "text": "logicOp must be a valid VkLogicOp value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetLogicOpEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + } + ] + }, + "VkPipelineColorWriteCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPipelineColorWriteCreateInfoEXT-pAttachments-04801", + "text": "If the colorWriteEnable feature is not enabled, all elements of pColorWriteEnables must be VK_TRUE", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-07608", + "text": "If the pipeline is being created with VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, or VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic states not set, attachmentCount must be equal to the attachmentCount member of the VkPipelineColorBlendStateCreateInfo structure specified during pipeline creation", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorWriteCreateInfoEXT-attachmentCount-06655", + "text": "attachmentCount must be less than or equal to the maxColorAttachments member of VkPhysicalDeviceLimits", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorWriteCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-VkPipelineColorWriteCreateInfoEXT-pColorWriteEnables-parameter", + "text": "If attachmentCount is not 0, pColorWriteEnables must be a valid pointer to an array of attachmentCount VkBool32 values", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdSetColorWriteEnableEXT": { + "core": [ + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-None-04803", + "text": "The colorWriteEnable feature must be enabled", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-06656", + "text": "attachmentCount must be less than or equal to the maxColorAttachments member of VkPhysicalDeviceLimits", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-pColorWriteEnables-parameter", + "text": "pColorWriteEnables must be a valid pointer to an array of attachmentCount VkBool32 values", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkCmdSetColorWriteEnableEXT-attachmentCount-arraylength", + "text": "attachmentCount must be greater than 0", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkGetFramebufferTilePropertiesQCOM": { + "core": [ + { + "vuid": "VUID-vkGetFramebufferTilePropertiesQCOM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkGetFramebufferTilePropertiesQCOM-framebuffer-parameter", + "text": "framebuffer must be a valid VkFramebuffer handle", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkGetFramebufferTilePropertiesQCOM-pPropertiesCount-parameter", + "text": "pPropertiesCount must be a valid pointer to a uint32_t value", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkGetFramebufferTilePropertiesQCOM-pProperties-parameter", + "text": "If the value referenced by pPropertiesCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertiesCount VkTilePropertiesQCOM structures", + "page": "chapters/framebuffer.html" + }, + { + "vuid": "VUID-vkGetFramebufferTilePropertiesQCOM-framebuffer-parent", + "text": "framebuffer must have been created, allocated, or retrieved from device", + "page": "chapters/framebuffer.html" + } + ] + }, + "vkCmdDispatch": { + "core": [ + { + "vuid": "VUID-vkCmdDispatch-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10672", + "text": "If the per-tile execution model is not enabled, this command must be called outside of a render pass instance", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-aspectMask-10673", + "text": "If this command is recorded where per-tile execution model is enabled, and if the VkPipeline object bound to the pipeline bind point used by this command writes to a variable of storage class Storage Class TileAttachmentQCOM, the corresponding VkImageView using must not have been created with an aspectMask that contains VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10674", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10675", + "text": "Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10676", + "text": "If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-None-10743", + "text": "If there is no bound compute pipeline, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_COMPUTE_BIT stage", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-groupCountX-00386", + "text": "groupCountX must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-groupCountY-00387", + "text": "groupCountY must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-groupCountZ-00388", + "text": "groupCountZ must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatch-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/dispatch.html" + } + ] + }, + "vkCmdDispatchIndirect": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchIndirect-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10672", + "text": "If the per-tile execution model is not enabled, this command must be called outside of a render pass instance", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-aspectMask-10673", + "text": "If this command is recorded where per-tile execution model is enabled, and if the VkPipeline object bound to the pipeline bind point used by this command writes to a variable of storage class Storage Class TileAttachmentQCOM, the corresponding VkImageView using must not have been created with an aspectMask that contains VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10674", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10675", + "text": "Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10676", + "text": "If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-None-10743", + "text": "If there is no bound compute pipeline, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_COMPUTE_BIT stage", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-buffer-02708", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-buffer-02709", + "text": "buffer must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-offset-02710", + "text": "offset must be a multiple of 4", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-02711", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-offset-00407", + "text": "The sum of offset and the size of VkDispatchIndirectCommand must be less than or equal to the size of buffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchIndirect-commonparent", + "text": "Both of buffer, and commandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/dispatch.html" + } + ] + }, + "VkDispatchIndirectCommand": { + "core": [ + { + "vuid": "VUID-VkDispatchIndirectCommand-x-00417", + "text": "x must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkDispatchIndirectCommand-y-00418", + "text": "y must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkDispatchIndirectCommand-z-00419", + "text": "z must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]", + "page": "chapters/dispatch.html" + } + ] + }, + "vkCmdDispatchBase": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchBase-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10672", + "text": "If the per-tile execution model is not enabled, this command must be called outside of a render pass instance", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-aspectMask-10673", + "text": "If this command is recorded where per-tile execution model is enabled, and if the VkPipeline object bound to the pipeline bind point used by this command writes to a variable of storage class Storage Class TileAttachmentQCOM, the corresponding VkImageView using must not have been created with an aspectMask that contains VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10674", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10675", + "text": "Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10676", + "text": "If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-None-10743", + "text": "If there is no bound compute pipeline, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_COMPUTE_BIT stage", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-baseGroupX-00421", + "text": "baseGroupX must be less than VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-baseGroupX-00422", + "text": "baseGroupY must be less than VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-baseGroupZ-00423", + "text": "baseGroupZ must be less than VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-groupCountX-00424", + "text": "groupCountX must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0] minus baseGroupX", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-groupCountY-00425", + "text": "groupCountY must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1] minus baseGroupY", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-groupCountZ-00426", + "text": "groupCountZ must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2] minus baseGroupZ", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-baseGroupX-00427", + "text": "If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE_BIT flag or the bound compute shader object must have been created with the VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT flag", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchBase-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/dispatch.html" + } + ] + }, + "vkCmdDispatchTileQCOM": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchTileQCOM-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10672", + "text": "If the per-tile execution model is not enabled, this command must be called outside of a render pass instance", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-aspectMask-10673", + "text": "If this command is recorded where per-tile execution model is enabled, and if the VkPipeline object bound to the pipeline bind point used by this command writes to a variable of storage class Storage Class TileAttachmentQCOM, the corresponding VkImageView using must not have been created with an aspectMask that contains VK_IMAGE_ASPECT_DEPTH_BIT or VK_IMAGE_ASPECT_STENCIL_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10674", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10675", + "text": "Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10676", + "text": "If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10743", + "text": "If there is no bound compute pipeline, a valid VkShaderEXT must be bound to the VK_SHADER_STAGE_COMPUTE_BIT stage", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-02712", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the pipeline bind point used by this command must not be an unprotected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-02713", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in the VkPipeline object bound to the pipeline bind point used by this command must not write to any resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-04617", + "text": "If any of the shader stages of the VkPipeline bound to the pipeline bind point used by this command uses the RayQueryKHR capability, then commandBuffer must not be a protected command buffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10668", + "text": "When this command is recorded per-tile execution model must be enabled", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-None-10669", + "text": "The tileShadingDispatchTile must enabled", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-pDispatchTileInfo-parameter", + "text": "pDispatchTileInfo must be a valid pointer to a valid VkDispatchTileInfoQCOM structure", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdDispatchTileQCOM-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/dispatch.html" + } + ] + }, + "VkDispatchTileInfoQCOM": { + "core": [ + { + "vuid": "VUID-VkDispatchTileInfoQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkDispatchTileInfoQCOM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/dispatch.html" + } + ] + }, + "vkCmdSubpassShadingHUAWEI": { + "core": [ + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-None-04931", + "text": "This command must be called in a subpass with bind point VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI. No draw commands can be called in the same subpass. Only one vkCmdSubpassShadingHUAWEI command can be called in a subpass", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics operations", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdSubpassShadingHUAWEI-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/dispatch.html" + } + ] + }, + "vkCmdCudaLaunchKernelNV": { + "core": [ + { + "vuid": "VUID-vkCmdCudaLaunchKernelNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdCudaLaunchKernelNV-pLaunchInfo-parameter", + "text": "pLaunchInfo must be a valid pointer to a valid VkCudaLaunchInfoNV structure", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdCudaLaunchKernelNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdCudaLaunchKernelNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-vkCmdCudaLaunchKernelNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/dispatch.html" + } + ] + }, + "VkCudaLaunchInfoNV": { + "core": [ + { + "vuid": "VUID-VkCudaLaunchInfoNV-gridDimX-09406", + "text": "gridDimX must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-gridDimY-09407", + "text": "gridDimY must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-gridDimZ-09408", + "text": "gridDimZ must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-paramCount-09409", + "text": "paramCount must be the total amount of parameters listed in the pParams table", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-pParams-09410", + "text": "pParams must be a pointer to a table of paramCount parameters, corresponding to the arguments of function", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-extraCount-09411", + "text": "extraCount must be 0", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-pExtras-09412", + "text": "pExtras must be NULL", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/dispatch.html" + }, + { + "vuid": "VUID-VkCudaLaunchInfoNV-function-parameter", + "text": "function must be a valid VkCudaFunctionNV handle", + "page": "chapters/dispatch.html" + } + ] + }, + "vkCreateIndirectCommandsLayoutEXT": { + "core": [ + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutEXT-deviceGeneratedCommands-11089", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkIndirectCommandsLayoutCreateInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutEXT-pIndirectCommandsLayout-parameter", + "text": "pIndirectCommandsLayout must be a valid pointer to a VkIndirectCommandsLayoutEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutEXT-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsLayoutCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-indirectStride-11090", + "text": "indirectStride must be less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectCommandsIndirectStride", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11091", + "text": "shaderStages must only contain stages supported by VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-tokenCount-11092", + "text": "tokenCount must less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectCommandsTokenCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11093", + "text": "The number of tokens in the pTokens array with type equal to VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT must be less than or equal to 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11145", + "text": "The number of tokens in the pTokens array with type equal to VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT must be less than or equal to 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11094", + "text": "The number of tokens in the pTokens array with type equal to VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT must be less than or equal to 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11095", + "text": "If the action command token in the pTokens array is not an indexed draw token, then pTokens must not contain a member with type set to VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11096", + "text": "If the action command token in the pTokens array is not a non-mesh draw token, then pTokens must not contain a member with type set to VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11097", + "text": "If the pTokens array contains multiple tokens with type equal to VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT, then there must be no duplicate VkIndirectCommandsVertexBufferTokenEXT::vertexBindingUnit values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11099", + "text": "For all VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT and VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT type tokens in pTokens, there must be no overlapping ranges between any specified push constant ranges", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11100", + "text": "The action command token must be the last token in the pTokens array", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11139", + "text": "If the pTokens array contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, then this token must be the first token in the array", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11101", + "text": "For any element of pTokens, if type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT and the dynamicGeneratedPipelineLayout feature is not enabled, then the pipelineLayout must not be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11102", + "text": "For any element of pTokens, if type is either VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT and pipelineLayout is VK_NULL_HANDLE, then the pNext chain must include a VkPipelineLayoutCreateInfo struct", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11103", + "text": "For any element of pTokens, the offset must be greater than or equal to the offset member of the previous tokens", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11104", + "text": "For any element of pTokens, if type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT, or VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT, then shaderStages must contain graphics stages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11105", + "text": "For any element of pTokens, if type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT, then shaderStages must be VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11106", + "text": "For any element of pTokens, if type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT, then shaderStages must contain VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11107", + "text": "For any element of pTokens, if type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT, then the shaderStages must contain VK_SHADER_STAGE_MESH_BIT_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11108", + "text": "For any element of pTokens, if type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT, then shaderStages must contain ray tracing stages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11109", + "text": "If shaderStages contains graphics stages then the state tokens in pTokens must not include VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11110", + "text": "If shaderStages is VK_SHADER_STAGE_COMPUTE_BIT then the state tokens in pTokens must only include VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, or VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11111", + "text": "If shaderStages contains ray tracing stages then the state tokens in pTokens must only include VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, or VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11112", + "text": "The shaderStages must only contain stages from one of the following:
\n
    \n
  • \n

    graphics stages

    \n
  • \n
  • \n

    VK_SHADER_STAGE_COMPUTE_BIT

    \n
  • \n
  • \n

    mesh stages and VK_SHADER_STAGE_FRAGMENT_BIT

    \n
  • \n
  • \n

    ray tracing stages

    \n
  • \n
\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11113", + "text": "If shaderStages contains VK_SHADER_STAGE_FRAGMENT_BIT, then shaderStages must also contain VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPipelineLayoutCreateInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-flags-parameter", + "text": "flags must be a valid combination of VkIndirectCommandsLayoutUsageFlagBitsEXT values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-parameter", + "text": "shaderStages must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-requiredbitmask", + "text": "shaderStages must not be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pipelineLayout-parameter", + "text": "If pipelineLayout is not VK_NULL_HANDLE, pipelineLayout must be a valid VkPipelineLayout handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-parameter", + "text": "pTokens must be a valid pointer to an array of tokenCount valid VkIndirectCommandsLayoutTokenEXT structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoEXT-tokenCount-arraylength", + "text": "tokenCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkDestroyIndirectCommandsLayoutEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-11114", + "text": "All submitted commands that refer to indirectCommandsLayout must have completed execution", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-11115", + "text": "If VkAllocationCallbacks were provided when indirectCommandsLayout was created, a compatible set of callbacks must be provided here", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-11116", + "text": "If no VkAllocationCallbacks were provided when indirectCommandsLayout was created, pAllocator must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-parameter", + "text": "If indirectCommandsLayout is not VK_NULL_HANDLE, indirectCommandsLayout must be a valid VkIndirectCommandsLayoutEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-parent", + "text": "If indirectCommandsLayout is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkCreateIndirectCommandsLayoutNV": { + "core": [ + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutNV-deviceGeneratedCommands-02929", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkIndirectCommandsLayoutCreateInfoNV structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutNV-pIndirectCommandsLayout-parameter", + "text": "pIndirectCommandsLayout must be a valid pointer to a VkIndirectCommandsLayoutNV handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectCommandsLayoutNV-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsLayoutCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930", + "text": "The pipelineBindPoint must be VK_PIPELINE_BIND_POINT_GRAPHICS or VK_PIPELINE_BIND_POINT_COMPUTE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-02931", + "text": "tokenCount must be greater than 0 and less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsTokenCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02932", + "text": "If pTokens contains an entry of VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV it must be the first element of the array and there must be only a single element of such token type", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-09585", + "text": "If pTokens contains an entry of VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV it must be the first element of the array and there must be only a single element of such token type", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02933", + "text": "If pTokens contains an entry of VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV there must be only a single element of such token type", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02934", + "text": "All state tokens in pTokens must occur before any action command tokens (VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV , VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV )", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02935", + "text": "The content of pTokens must include one single action command token that is compatible with the pipelineBindPoint", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-02936", + "text": "streamCount must be greater than 0 and less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsStreamCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-02937", + "text": "each element of pStreamStrides must be greater than 0 and less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsStreamStride. Furthermore the alignment of each token input must be ensured", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-09088", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_COMPUTE then the VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedCompute feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-09089", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_COMPUTE then the state tokens in pTokens must only include VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV, or VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-09090", + "text": "If pipelineBindPoint is VK_PIPELINE_BIND_POINT_COMPUTE and pTokens includes VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV, then the VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-flags-parameter", + "text": "flags must be a valid combination of VkIndirectCommandsLayoutUsageFlagBitsNV values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-parameter", + "text": "pTokens must be a valid pointer to an array of tokenCount valid VkIndirectCommandsLayoutTokenNV structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-parameter", + "text": "pStreamStrides must be a valid pointer to an array of streamCount uint32_t values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-arraylength", + "text": "tokenCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-arraylength", + "text": "streamCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkDestroyIndirectCommandsLayoutNV": { + "core": [ + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02938", + "text": "All submitted commands that refer to indirectCommandsLayout must have completed execution", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02939", + "text": "If VkAllocationCallbacks were provided when indirectCommandsLayout was created, a compatible set of callbacks must be provided here", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02940", + "text": "If no VkAllocationCallbacks were provided when indirectCommandsLayout was created, pAllocator must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parameter", + "text": "If indirectCommandsLayout is not VK_NULL_HANDLE, indirectCommandsLayout must be a valid VkIndirectCommandsLayoutNV handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parent", + "text": "If indirectCommandsLayout is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkBindIndexBufferIndirectCommandEXT": { + "core": [ + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandEXT-None-11117", + "text": "The buffer’s usage flags from which the address was acquired must have the VK_BUFFER_USAGE_INDEX_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandEXT-bufferAddress-11118", + "text": "The bufferAddress must be aligned to the VkIndexType of the indexType used", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandEXT-None-11119", + "text": "Each element of the buffer from which the address was acquired and that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandEXT-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkBindVertexBufferIndirectCommandEXT": { + "core": [ + { + "vuid": "VUID-VkBindVertexBufferIndirectCommandEXT-None-11120", + "text": "The buffer’s usage flag from which the address was acquired must have the VK_BUFFER_USAGE_VERTEX_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindVertexBufferIndirectCommandEXT-None-11121", + "text": "Each element of the buffer from which the address was acquired and that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkDrawIndirectCountIndirectCommandEXT": { + "core": [ + { + "vuid": "VUID-VkDrawIndirectCountIndirectCommandEXT-None-11122", + "text": "The buffer’s usage flag from which the address was acquired must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkDrawIndirectCountIndirectCommandEXT-None-11123", + "text": "Each element of the buffer from which the address was acquired and that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsStreamNV": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsStreamNV-buffer-02942", + "text": "The buffer’s usage flag must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsStreamNV-offset-02943", + "text": "The offset must be aligned to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minIndirectCommandsBufferOffsetAlignment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsStreamNV-buffer-02975", + "text": "If buffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsStreamNV-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkBindShaderGroupIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkBindShaderGroupIndirectCommandNV-None-02944", + "text": "The current bound graphics pipeline, as well as the pipelines it may reference, must have been created with VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindShaderGroupIndirectCommandNV-index-02945", + "text": "The index must be within range of the accessible shader groups of the current bound graphics pipeline. See vkCmdBindPipelineShaderGroupNV for further details", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkBindIndexBufferIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandNV-None-02946", + "text": "The buffer’s usage flag from which the address was acquired must have the VK_BUFFER_USAGE_INDEX_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandNV-bufferAddress-02947", + "text": "The bufferAddress must be aligned to the indexType used", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandNV-None-02948", + "text": "Each element of the buffer from which the address was acquired and that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindIndexBufferIndirectCommandNV-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkBindVertexBufferIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkBindVertexBufferIndirectCommandNV-None-02949", + "text": "The buffer’s usage flag from which the address was acquired must have the VK_BUFFER_USAGE_VERTEX_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindVertexBufferIndirectCommandNV-None-02950", + "text": "Each element of the buffer from which the address was acquired and that is non-sparse must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkBindPipelineIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkBindPipelineIndirectCommandNV-deviceGeneratedComputePipelines-09091", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindPipelineIndirectCommandNV-None-09092", + "text": "The referenced pipeline must have been created with VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindPipelineIndirectCommandNV-None-09093", + "text": "The referenced pipeline must have been updated with vkCmdUpdatePipelineIndirectBufferNV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkBindPipelineIndirectCommandNV-None-09094", + "text": "The referenced pipeline’s address must have been queried with vkGetPipelineIndirectDeviceAddressNV", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsLayoutTokenEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-offset-11124", + "text": "offset must be less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectCommandsTokenOffset", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-offset-11125", + "text": "offset must be aligned to 4", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-meshShader-11126", + "text": "If meshShader or taskShader are not enabled, type must not be VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-rayTracingMaintenance1-11128", + "text": "If the rayTracingMaintenance1 feature is not enabled, type must not be VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-deviceGeneratedCommandsMultiDrawIndirectCount-11129", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::deviceGeneratedCommandsMultiDrawIndirectCount is not supported, type must not be VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-deviceGeneratedCommandsMultiDrawIndirectCount-11130", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::deviceGeneratedCommandsMultiDrawIndirectCount is not supported, type must not be VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-deviceGeneratedCommandsMultiDrawIndirectCount-11131", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::deviceGeneratedCommandsMultiDrawIndirectCount is not supported, type must not be VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-type-parameter", + "text": "type must be a valid VkIndirectCommandsTokenTypeEXT value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-pPushConstant-parameter", + "text": "If type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT or VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, the pPushConstant member of data must be a valid pointer to a valid VkIndirectCommandsPushConstantTokenEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-pVertexBuffer-parameter", + "text": "If type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT, the pVertexBuffer member of data must be a valid pointer to a valid VkIndirectCommandsVertexBufferTokenEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-pIndexBuffer-parameter", + "text": "If type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT, the pIndexBuffer member of data must be a valid pointer to a valid VkIndirectCommandsIndexBufferTokenEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenEXT-pExecutionSet-parameter", + "text": "If type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT, the pExecutionSet member of data must be a valid pointer to a valid VkIndirectCommandsExecutionSetTokenEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsPushConstantTokenEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsPushConstantTokenEXT-updateRange-11132", + "text": "updateRange must be contained within the push constant info used by VkIndirectCommandsLayoutCreateInfoEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsPushConstantTokenEXT-size-11133", + "text": "If the token type is VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, the size member of updateRange must be 4", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsPushConstantTokenEXT-updateRange-parameter", + "text": "updateRange must be a valid VkPushConstantRange structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsVertexBufferTokenEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsVertexBufferTokenEXT-vertexBindingUnit-11134", + "text": "vertexBindingUnit must be less than the total number of vertex input bindings in use by the current graphics state", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsIndexBufferTokenEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsIndexBufferTokenEXT-mode-11135", + "text": "mode must be non-zero", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsIndexBufferTokenEXT-mode-11136", + "text": "mode must be one of the bits supported in VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsInputModes", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsIndexBufferTokenEXT-mode-parameter", + "text": "mode must be a valid VkIndirectCommandsInputModeFlagBitsEXT value", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsExecutionSetTokenEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsExecutionSetTokenEXT-shaderStages-11137", + "text": "Each bit in shaderStages must be supported by VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesPipelineBinding or VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesShaderBinding", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsExecutionSetTokenEXT-type-parameter", + "text": "type must be a valid VkIndirectExecutionSetInfoTypeEXT value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsExecutionSetTokenEXT-shaderStages-parameter", + "text": "shaderStages must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsExecutionSetTokenEXT-shaderStages-requiredbitmask", + "text": "shaderStages must not be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectCommandsLayoutTokenNV": { + "core": [ + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-stream-02951", + "text": "stream must be smaller than VkIndirectCommandsLayoutCreateInfoNV::streamCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-offset-02952", + "text": "offset must be less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsTokenOffset", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-offset-06888", + "text": "offset must be aligned to the scalar alignment of tokenType or minIndirectCommandsBufferOffsetAlignment, whichever is lower", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV, vertexBindingUnit must stay within device supported limits for the appropriate commands", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, pushconstantPipelineLayout must be valid", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, pushconstantOffset must be a multiple of 4", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, pushconstantSize must be a multiple of 4", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, pushconstantOffset must be less than VkPhysicalDeviceLimits::maxPushConstantsSize", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, pushconstantSize must be less than or equal to VkPhysicalDeviceLimits::maxPushConstantsSize minus pushconstantOffset", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in the range specified by pushconstantOffset and pushconstantSize and for each shader stage in pushconstantShaderStageFlags, there must be a push constant range in pushconstantPipelineLayout that includes that byte and that stage", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in the range specified by pushconstantOffset and pushconstantSize and for each push constant range that overlaps that byte, pushconstantShaderStageFlags must include all stages in that push constant range’s VkPushConstantRange::stageFlags", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984", + "text": "If tokenType is VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV, indirectStateFlags must not be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-tokenType-parameter", + "text": "tokenType must be a valid VkIndirectCommandsTokenTypeNV value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pushconstantPipelineLayout-parameter", + "text": "If pushconstantPipelineLayout is not VK_NULL_HANDLE, pushconstantPipelineLayout must be a valid VkPipelineLayout handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pushconstantShaderStageFlags-parameter", + "text": "pushconstantShaderStageFlags must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-indirectStateFlags-parameter", + "text": "indirectStateFlags must be a valid combination of VkIndirectStateFlagBitsNV values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypes-parameter", + "text": "If indexTypeCount is not 0, pIndexTypes must be a valid pointer to an array of indexTypeCount valid VkIndexType values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypeValues-parameter", + "text": "If indexTypeCount is not 0, pIndexTypeValues must be a valid pointer to an array of indexTypeCount uint32_t values", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkGetGeneratedCommandsMemoryRequirementsEXT": { + "core": [ + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkGeneratedCommandsMemoryRequirementsInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsEXT-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkGeneratedCommandsMemoryRequirementsInfoEXT": { + "core": [ + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-maxSequencesCount-11009", + "text": "maxSequencesCount must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-11010", + "text": "If indirectCommandsLayout was created with a token sequence that contained the VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, indirectExecutionSet must not be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-11151", + "text": "If indirectCommandsLayout was created with a token sequence that contained the VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the shader stages used to create the initial shader state of indirectExecutionSet must equal the VkIndirectCommandsExecutionSetTokenEXT::shaderStages used to create indirectCommandsLayout", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-11011", + "text": "If indirectCommandsLayout was not created with a token sequence that contained the VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, indirectExecutionSet must be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-maxDrawCount-11146", + "text": "When not ignored, maxDrawCount × maxSequenceCount must be less than 2^24", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectExecutionSet-11012", + "text": "If indirectExecutionSet is VK_NULL_HANDLE, either a VkGeneratedCommandsPipelineInfoEXT or a VkGeneratedCommandsShaderInfoEXT must be included in the pNext chain", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkGeneratedCommandsPipelineInfoEXT or VkGeneratedCommandsShaderInfoEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectExecutionSet-parameter", + "text": "If indirectExecutionSet is not VK_NULL_HANDLE, indirectExecutionSet must be a valid VkIndirectExecutionSetEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-parameter", + "text": "indirectCommandsLayout must be a valid VkIndirectCommandsLayoutEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-commonparent", + "text": "Both of indirectCommandsLayout, and indirectExecutionSet that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkGeneratedCommandsPipelineInfoEXT": { + "core": [ + { + "vuid": "VUID-VkGeneratedCommandsPipelineInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsPipelineInfoEXT-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkGeneratedCommandsShaderInfoEXT": { + "core": [ + { + "vuid": "VUID-VkGeneratedCommandsShaderInfoEXT-pShaders-11127", + "text": "pShaders must not contain more than one shader object for a given VkShaderStageFlagBits stage", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsShaderInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsShaderInfoEXT-pShaders-parameter", + "text": "pShaders must be a valid pointer to an array of shaderCount valid VkShaderEXT handles", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsShaderInfoEXT-shaderCount-arraylength", + "text": "shaderCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkGetGeneratedCommandsMemoryRequirementsNV": { + "core": [ + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-deviceGeneratedCommands-02906", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pInfo-09074", + "text": "If pInfo->pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, then the VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedCompute feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkGeneratedCommandsMemoryRequirementsInfoNV structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkGeneratedCommandsMemoryRequirementsInfoNV": { + "core": [ + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-maxSequencesCount-02907", + "text": "maxSequencesCount must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectSequenceCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-09075", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_GRAPHICS, then pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-09076", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, and the indirectCommandsLayout was not created with a VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV token, then the pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-09077", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, and the indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV token, then the pipeline must be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipeline-parameter", + "text": "If pipeline is not VK_NULL_HANDLE, pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-indirectCommandsLayout-parameter", + "text": "indirectCommandsLayout must be a valid VkIndirectCommandsLayoutNV handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-commonparent", + "text": "Both of indirectCommandsLayout, and pipeline that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkGetPipelineIndirectDeviceAddressNV": { + "core": [ + { + "vuid": "VUID-vkGetPipelineIndirectDeviceAddressNV-deviceGeneratedComputePipelines-09078", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetPipelineIndirectDeviceAddressNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetPipelineIndirectDeviceAddressNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkPipelineIndirectDeviceAddressInfoNV structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkPipelineIndirectDeviceAddressInfoNV": { + "core": [ + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-pipelineBindPoint-09079", + "text": "The provided pipelineBindPoint must be of type VK_PIPELINE_BIND_POINT_COMPUTE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-pipeline-09080", + "text": "pipeline must have been created with flag VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-pipeline-09081", + "text": "pipeline must have been created with a VkComputePipelineIndirectBufferInfoNV structure specifying a valid address where its metadata will be saved", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkPipelineIndirectDeviceAddressInfoNV-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkGetPipelineIndirectMemoryRequirementsNV": { + "core": [ + { + "vuid": "VUID-vkGetPipelineIndirectMemoryRequirementsNV-deviceGeneratedComputePipelines-09082", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetPipelineIndirectMemoryRequirementsNV-pCreateInfo-09083", + "text": "pCreateInfo->flags must include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetPipelineIndirectMemoryRequirementsNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetPipelineIndirectMemoryRequirementsNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkComputePipelineCreateInfo structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkGetPipelineIndirectMemoryRequirementsNV-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkCreateIndirectExecutionSetEXT": { + "core": [ + { + "vuid": "VUID-vkCreateIndirectExecutionSetEXT-deviceGeneratedCommands-11013", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectExecutionSetEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectExecutionSetEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkIndirectExecutionSetCreateInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectExecutionSetEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectExecutionSetEXT-pIndirectExecutionSet-parameter", + "text": "pIndirectExecutionSet must be a valid pointer to a VkIndirectExecutionSetEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCreateIndirectExecutionSetEXT-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectExecutionSetCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectExecutionSetCreateInfoEXT-maxIndirectShaderObjectCount-11014", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectShaderObjectCount is zero or the shaderObject feature is not enabled type must not be VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetCreateInfoEXT-type-parameter", + "text": "type must be a valid VkIndirectExecutionSetInfoTypeEXT value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetCreateInfoEXT-pPipelineInfo-parameter", + "text": "If type is VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT, the pPipelineInfo member of info must be a valid pointer to a valid VkIndirectExecutionSetPipelineInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetCreateInfoEXT-pShaderInfo-parameter", + "text": "If type is VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT, the pShaderInfo member of info must be a valid pointer to a valid VkIndirectExecutionSetShaderInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectExecutionSetPipelineInfoEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-supportedIndirectCommandsShaderStagesPipelineBinding-11015", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesPipelineBinding does not contain VK_SHADER_STAGE_COMPUTE_BIT, the VkPipelineBindPoint of initialPipeline must not be VK_PIPELINE_BIND_POINT_COMPUTE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-supportedIndirectCommandsShaderStagesPipelineBinding-11016", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesPipelineBinding does not contain VK_SHADER_STAGE_FRAGMENT_BIT, the VkPipelineBindPoint of initialPipeline must not be VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-supportedIndirectCommandsShaderStagesPipelineBinding-11017", + "text": "If VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesPipelineBinding does not contain ray tracing stages, the VkPipelineBindPoint of initialPipeline must not be VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-maxPipelineCount-11018", + "text": "maxPipelineCount must be between 1 and VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectPipelineCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-initialPipeline-11019", + "text": "initialPipeline must not use descriptors of type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-initialPipeline-11153", + "text": "initialPipeline must have been created with VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetPipelineInfoEXT-initialPipeline-parameter", + "text": "initialPipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectExecutionSetShaderInfoEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-pInitialShaders-11020", + "text": "All members of pInitialShaders must have a stage supported by VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesShaderBinding", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-maxShaderCount-11021", + "text": "maxShaderCount must not be zero", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-maxShaderCount-11022", + "text": "maxShaderCount must be less than or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectShaderObjectCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-maxShaderCount-11036", + "text": "maxShaderCount must be greater than or equal to shaderCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-stage-11023", + "text": "The stage of each element in the pInitialShaders array must be unique", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-pInitialShaders-11154", + "text": "Each member of pInitialShaders must have been created with VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-pInitialShaders-parameter", + "text": "pInitialShaders must be a valid pointer to an array of shaderCount valid VkShaderEXT handles", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-pSetLayoutInfos-parameter", + "text": "If pSetLayoutInfos is not NULL, pSetLayoutInfos must be a valid pointer to an array of shaderCount valid VkIndirectExecutionSetShaderLayoutInfoEXT structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-pPushConstantRanges-parameter", + "text": "If pushConstantRangeCount is not 0, pPushConstantRanges must be a valid pointer to an array of pushConstantRangeCount valid VkPushConstantRange structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderInfoEXT-shaderCount-arraylength", + "text": "shaderCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkIndirectExecutionSetShaderLayoutInfoEXT": { + "core": [ + { + "vuid": "VUID-VkIndirectExecutionSetShaderLayoutInfoEXT-pSetLayouts-11024", + "text": "All members of pSetLayouts must not contain descriptors of type VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderLayoutInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkIndirectExecutionSetShaderLayoutInfoEXT-pSetLayouts-parameter", + "text": "If setLayoutCount is not 0, pSetLayouts must be a valid pointer to an array of setLayoutCount valid or VK_NULL_HANDLE VkDescriptorSetLayout handles", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkDestroyIndirectExecutionSetEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyIndirectExecutionSetEXT-indirectExecutionSet-11025", + "text": "All submitted commands that refer to indirectExecutionSet must have completed execution", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectExecutionSetEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectExecutionSetEXT-indirectExecutionSet-parameter", + "text": "If indirectExecutionSet is not VK_NULL_HANDLE, indirectExecutionSet must be a valid VkIndirectExecutionSetEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectExecutionSetEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkDestroyIndirectExecutionSetEXT-indirectExecutionSet-parent", + "text": "If indirectExecutionSet is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkWriteIndirectExecutionSetPipelineEXT": { + "core": [ + { + "vuid": "VUID-VkWriteIndirectExecutionSetPipelineEXT-index-11026", + "text": "index must be less than the value of VkIndirectExecutionSetPipelineInfoEXT::maxPipelineCount used to create the set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetPipelineEXT-pipeline-11027", + "text": "pipeline must have been created with VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetPipelineEXT-index-11029", + "text": "index must not be referenced by submitted command buffers", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetPipelineEXT-pipeline-11030", + "text": "The shader stages contained in pipeline must be supported by VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStagesPipelineBinding", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetPipelineEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetPipelineEXT-pipeline-parameter", + "text": "pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkWriteIndirectExecutionSetShaderEXT": { + "core": [ + { + "vuid": "VUID-VkWriteIndirectExecutionSetShaderEXT-index-11031", + "text": "index must be less than VkIndirectExecutionSetShaderInfoEXT::maxShaderCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetShaderEXT-shader-11032", + "text": "shader must have been created with VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetShaderEXT-pInitialShaders-11033", + "text": "A shader created with the same VkShaderStageFlagBits must have been passed in the VkIndirectExecutionSetShaderInfoEXT::pInitialShaders array", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetShaderEXT-index-11034", + "text": "index must not be in use by submitted command buffers", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetShaderEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkWriteIndirectExecutionSetShaderEXT-shader-parameter", + "text": "shader must be a valid VkShaderEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkUpdateIndirectExecutionSetPipelineEXT": { + "core": [ + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-indirectExecutionSet-11035", + "text": "indirectExecutionSet must have been created with type VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-executionSetWriteCount-11037", + "text": "executionSetWriteCount must be less than or equal to VkIndirectExecutionSetPipelineInfoEXT::maxPipelineCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-pExecutionSetWrites-11042", + "text": "Each element in the pExecutionSetWrites array must have a unique VkWriteIndirectExecutionSetPipelineEXT::index", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11038", + "text": "Each member of the Indirect Execution Set referenced by the update command must not be in use by the device", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11039", + "text": "The layout of each pipeline in pExecutionSetWrites must be compatible with the initialPipeline used to create the Indirect Execution Set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11040", + "text": "Each pipeline in the Indirect Execution Set must have identically defined static and dynamic state values to the initialPipeline used to create the Indirect Execution Set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11147", + "text": "Each pipeline in the Indirect Execution Set must have identically defined fragment outputs interface to the initialPipeline used to create the Indirect Execution Set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11152", + "text": "Each pipeline in the Indirect Execution Set must match the initialPipeline used to create the Indirect Execution Set in its included shader stages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11098", + "text": "Each pipeline in the Indirect Execution Set must match the initialPipeline used to create the Indirect Execution Set in its use of FragDepth", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11086", + "text": "Each pipeline in the Indirect Execution Set must match the initialPipeline used to create the Indirect Execution Set in its use of SampleMask", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11085", + "text": "Each pipeline in the Indirect Execution Set must match the initialPipeline used to create the Indirect Execution Set in its use of StencilExportEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-indirectExecutionSet-parameter", + "text": "indirectExecutionSet must be a valid VkIndirectExecutionSetEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-pExecutionSetWrites-parameter", + "text": "pExecutionSetWrites must be a valid pointer to an array of executionSetWriteCount valid VkWriteIndirectExecutionSetPipelineEXT structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-executionSetWriteCount-arraylength", + "text": "executionSetWriteCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetPipelineEXT-indirectExecutionSet-parent", + "text": "indirectExecutionSet must have been created, allocated, or retrieved from device", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkUpdateIndirectExecutionSetShaderEXT": { + "core": [ + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-indirectExecutionSet-11041", + "text": "indirectExecutionSet must have been created with type VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-pExecutionSetWrites-11043", + "text": "Each element in the pExecutionSetWrites array must have a unique VkWriteIndirectExecutionSetShaderEXT::index", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-None-11044", + "text": "Each member of the Indirect Execution Set referenced by the update command must not be in use by the device", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-pExecutionSetWrites-11140", + "text": "The descriptor layout of each shader in pExecutionSetWrites must be compatible with the initial layout info used to create the Indirect Execution Set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-None-11148", + "text": "Each fragment shader element in the Indirect Execution Set must have identically defined fragment outputs interface to the initial shader state used to create the Indirect Execution Set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-FragDepth-11054", + "text": "Each fragment shader element in the Indirect Execution Set must match the initial shader state used to create the Indirect Execution Set in its use of FragDepth", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-SampleMask-11050", + "text": "Each fragment shader element in the Indirect Execution Set must match the initial shader state used to create the Indirect Execution Set in its use of SampleMask", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-StencilExportEXT-11003", + "text": "Each fragment shader element in the Indirect Execution Set must match the initial shader state used to create the Indirect Execution Set in its use of StencilExportEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-indirectExecutionSet-parameter", + "text": "indirectExecutionSet must be a valid VkIndirectExecutionSetEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-pExecutionSetWrites-parameter", + "text": "pExecutionSetWrites must be a valid pointer to an array of executionSetWriteCount valid VkWriteIndirectExecutionSetShaderEXT structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-executionSetWriteCount-arraylength", + "text": "executionSetWriteCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkUpdateIndirectExecutionSetShaderEXT-indirectExecutionSet-parent", + "text": "indirectExecutionSet must have been created, allocated, or retrieved from device", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkCmdExecuteGeneratedCommandsNV": { + "core": [ + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04007", + "text": "All vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must have either valid or VK_NULL_HANDLE buffers bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04008", + "text": "If the nullDescriptor feature is not enabled, all vertex input bindings accessed via vertex input variables declared in the vertex shader entry point’s interface must not be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02721", + "text": "If the robustBufferAccess feature is not enabled, and that pipeline was created without enabling VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS for vertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in Vertex Input Description", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-format-10389", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is a packed format, and the legacyVertexAttributes feature is not enabled, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-format-10390", + "text": "For each vertex attribute accessed by this command, if its VkVertexInputAttributeDescription::format or VkVertexInputAttributeDescription2EXT::format is not a packed format, and either the legacyVertexAttributes feature is not enabled or format has 64-bit components, the value of attribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07842", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then vkCmdSetPrimitiveTopology must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-dynamicPrimitiveTopologyUnrestricted-07500", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted is VK_FALSE, then the primitiveTopology parameter of vkCmdSetPrimitiveTopology must be of the same topology class as the pipeline VkPipelineInputAssemblyStateCreateInfo::topology state", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitiveTopology-10286", + "text": "If a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage is bound, then the current value of primitiveTopology must be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitiveTopology-10747", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_PATCH_LIST prior to this drawing command, then a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage must be bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-primitiveTopology-10748", + "text": "If vkCmdSetPrimitiveTopology set primitiveTopology to VK_PRIMITIVE_TOPOLOGY_POINT_LIST prior to this drawing command, the maintenance5 feature is not enabled, both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT and VK_SHADER_STAGE_GEOMETRY_BIT stage are not bound, then the Vertex Execution Model must have a PointSize decorated variable that is statically written to", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pStrides-04913", + "text": "If the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE dynamic state enabled, but without the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled, then vkCmdBindVertexBuffers2 must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and the pStrides parameter of vkCmdBindVertexBuffers2 must not be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04914", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then vkCmdSetVertexInputEXT must have been called and not subsequently invalidated in the current command buffer prior to this draw command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-Input-07939", + "text": "If the vertexAttributeRobustness feature is not enabled, and the maintenance9 feature is not enabled, and there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled then all variables with the Input storage class decorated with Location in the Vertex Execution Model OpEntryPoint must contain a location in VkVertexInputAttributeDescription2EXT::location", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-Input-08734", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a given Input variable of the corresponding Location in the Vertex Execution Model OpEntryPoint is 64-bit, then the numeric type associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be the same as VkVertexInputAttributeDescription2EXT::format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-format-08936", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then the scalar width associated with all Input variables of the corresponding Location in the Vertex Execution Model OpEntryPoint must be 64-bit", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-format-08937", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and the scalar width associated with a Location decorated Input variable in the Vertex Execution Model OpEntryPoint is 64-bit, then the corresponding VkVertexInputAttributeDescription2EXT::format must have a 64-bit component", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09203", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled and VkVertexInputAttributeDescription2EXT::format has a 64-bit component, then all Input variables at the corresponding Location in the Vertex Execution Model OpEntryPoint must not use components that are not present in the format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04875", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage or the bound graphics pipeline state was created with both a VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT stage and the VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled, and the current value of primitiveTopology is VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, then vkCmdSetPatchControlPointsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-04879", + "text": "If there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-09637", + "text": "If the primitiveTopologyListRestart feature is not enabled, the topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, or VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to the VK_SHADER_STAGE_VERTEX_BIT stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled then vkCmdSetPrimitiveRestartEnable must be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-stage-06481", + "text": "The bound graphics pipeline must not have been created with the VkPipelineShaderStageCreateInfo::stage member of any element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-08885", + "text": "There must be no shader object bound to either of the VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXT stages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-07619", + "text": "If a shader object is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage and the VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state enabled, then vkCmdSetTessellationDomainOriginEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02970", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-isPreprocessed-02908", + "text": "If isPreprocessed is VK_TRUE then vkCmdPreprocessGeneratedCommandsNV must have already been executed on the device, using the same pGeneratedCommandsInfo content as well as the content of the input buffers it references (all except VkGeneratedCommandsInfoNV::preprocessBuffer). Furthermore pGeneratedCommandsInfo`s indirectCommandsLayout must have been created with the VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pipeline-02909", + "text": "VkGeneratedCommandsInfoNV::pipeline must match the current bound pipeline at VkGeneratedCommandsInfoNV::pipelineBindPoint", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-None-02910", + "text": "Transform feedback must not be active", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-deviceGeneratedCommands-02911", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-pGeneratedCommandsInfo-parameter", + "text": "pGeneratedCommandsInfo must be a valid pointer to a valid VkGeneratedCommandsInfoNV structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-renderpass", + "text": "This command must only be called inside of a render pass instance", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkGeneratedCommandsInfoNV": { + "core": [ + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipeline-02912", + "text": "The provided pipeline must match the pipeline bound at execution time", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02913", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then the pipeline must have been created with multiple shader groups", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02914", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then the pipeline must have been created with VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV set in VkGraphicsPipelineCreateInfo::flags", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02915", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, then the pipeline’s VkPipelineLayout must match the VkIndirectCommandsLayoutTokenNV::pushconstantPipelineLayout", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-streamCount-02916", + "text": "streamCount must match the indirectCommandsLayout’s streamCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09084", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, then the pipeline must have been created with the flag VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09085", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, then the pipeline must have been created with a VkComputePipelineIndirectBufferInfoNV structure specifying a valid address where its metadata will be saved", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09086", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, then vkCmdUpdatePipelineIndirectBufferNV must have been called on that pipeline to save its metadata to a device address", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-09087", + "text": "If pipelineBindPoint is of type VK_PIPELINE_BIND_POINT_COMPUTE, and if VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV is used, then pipeline must be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCount-02917", + "text": "sequencesCount must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectSequenceCount and VkGeneratedCommandsMemoryRequirementsInfoNV::maxSequencesCount that was used to determine the preprocessSize", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02918", + "text": "preprocessBuffer must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set in its usage flag", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessOffset-02919", + "text": "preprocessOffset must be aligned to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minIndirectCommandsBufferOffsetAlignment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02971", + "text": "If preprocessBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessSize-02920", + "text": "preprocessSize must be at least equal to the memory requirement`s size returned by vkGetGeneratedCommandsMemoryRequirementsNV using the matching inputs (indirectCommandsLayout, …​) as within this structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02921", + "text": "sequencesCountBuffer can be set if the actual used count of sequences is sourced from the provided buffer. In that case the sequencesCount serves as upper bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02922", + "text": "If sequencesCountBuffer is not VK_NULL_HANDLE, its usage flag must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02923", + "text": "If sequencesCountBuffer is not VK_NULL_HANDLE, sequencesCountOffset must be aligned to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minSequencesCountBufferOffsetAlignment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02972", + "text": "If sequencesCountBuffer is not VK_NULL_HANDLE and is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02924", + "text": "If indirectCommandsLayout’s VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV is set, sequencesIndexBuffer must be set otherwise it must be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02925", + "text": "If sequencesIndexBuffer is not VK_NULL_HANDLE, its usage flag must have the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02926", + "text": "If sequencesIndexBuffer is not VK_NULL_HANDLE, sequencesIndexOffset must be aligned to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minSequencesIndexBufferOffsetAlignment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02973", + "text": "If sequencesIndexBuffer is not VK_NULL_HANDLE and is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-07078", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV, then the pipeline must contain a shader stage using the MeshNV Execution Model", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-07079", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV, then the pipeline must contain a shader stage using the MeshEXT Execution Model", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-parameter", + "text": "pipelineBindPoint must be a valid VkPipelineBindPoint value", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pipeline-parameter", + "text": "If pipeline is not VK_NULL_HANDLE, pipeline must be a valid VkPipeline handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-parameter", + "text": "indirectCommandsLayout must be a valid VkIndirectCommandsLayoutNV handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-pStreams-parameter", + "text": "pStreams must be a valid pointer to an array of streamCount valid VkIndirectCommandsStreamNV structures", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-parameter", + "text": "preprocessBuffer must be a valid VkBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-parameter", + "text": "If sequencesCountBuffer is not VK_NULL_HANDLE, sequencesCountBuffer must be a valid VkBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-parameter", + "text": "If sequencesIndexBuffer is not VK_NULL_HANDLE, sequencesIndexBuffer must be a valid VkBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-streamCount-arraylength", + "text": "streamCount must be greater than 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoNV-commonparent", + "text": "Each of indirectCommandsLayout, pipeline, preprocessBuffer, sequencesCountBuffer, and sequencesIndexBuffer that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkCmdPreprocessGeneratedCommandsNV": { + "core": [ + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-02974", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-02927", + "text": "pGeneratedCommandsInfo`s indirectCommandsLayout must have been created with the VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-deviceGeneratedCommands-02928", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-parameter", + "text": "pGeneratedCommandsInfo must be a valid pointer to a valid VkGeneratedCommandsInfoNV structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkCmdExecuteGeneratedCommandsEXT": { + "core": [ + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-renderPass-02684", + "text": "The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-subpass-02685", + "text": "The subpass index of the current render pass must be equal to the subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07748", + "text": "If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07468", + "text": "If any shader executed by this pipeline accesses an OpTypeImage variable with a Dim operand of SubpassData, it must be decorated with an InputAttachmentIndex that corresponds to a valid input attachment in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07469", + "text": "Input attachment views accessed in a subpass must be created with the same VkFormat as the corresponding subpass definition, and be created with a VkImageView that is compatible with the attachment referenced by the subpass' pInputAttachments[InputAttachmentIndex] in the bound VkFramebuffer as specified by Fragment Input Attachment Compatibility", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthInputAttachmentIndex-09595", + "text": "Input attachment views accessed in a dynamic render pass with a InputAttachmentIndex referenced by VkRenderingInputAttachmentIndexInfo, or no InputAttachmentIndex if VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex or VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are NULL, must be created with a VkImageView that is compatible with the corresponding color, depth, or stencil attachment in VkRenderingInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthInputAttachmentIndex-09596", + "text": "Input attachment views accessed in a dynamic render pass via a shader object must have an InputAttachmentIndex if both VkRenderingInputAttachmentIndexInfo:pDepthInputAttachmentIndex and VkRenderingInputAttachmentIndexInfo:pStencilInputAttachmentIndex are non-NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-InputAttachmentIndex-09597", + "text": "If an input attachment view accessed in a dynamic render pass via a shader object has an InputAttachmentIndex, the InputAttachmentIndex must match an index in VkRenderingInputAttachmentIndexInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-06537", + "text": "Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10795", + "text": "If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is\nset on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_COLOR_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10796", + "text": "If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_DEPTH_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10797", + "text": "If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, feedback loop is not enabled for it, and either:
\n
    \n
  • \n

    \nthe\nVK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT\nis set on the bound pipeline\nor

    \n
  • \n
  • \n

    the last call to vkCmdSetAttachmentFeedbackLoopEnableEXT included\nVK_IMAGE_ASPECT_STENCIL_BIT and

    \n
    \n
      \n
    • \n

      there is no bound graphics pipeline or

      \n
    • \n
    • \n

      the bound graphics pipeline was created with\nVK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n

it must not be accessed in any way other than as an attachment by this\ncommand

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09003", + "text": "If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-06539", + "text": "If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-06886", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-06887", + "text": "If the current render pass instance uses a depth/stencil attachment with a read-only layout for the stencil aspect, both front and back writeMask are not zero, and stencil test is enabled, all stencil ops must be VK_STENCIL_OP_KEEP", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07831", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then vkCmdSetViewport must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07832", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then vkCmdSetScissor must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07833", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08617", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPolygonModeEXT in the current command buffer set polygonMode to VK_POLYGON_MODE_LINE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08618", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetPrimitiveTopology in the current command buffer set primitiveTopology to any line topology, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08619", + "text": "If a shader object that outputs line primitives is bound to the VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, vkCmdSetLineWidth must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07834", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBiasEnable is VK_TRUE, then vkCmdSetDepthBias or vkCmdSetDepthBias2EXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07835", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and an active color attachment current value of blendEnable is VK_TRUE with a blend equations where any VkBlendFactor member is VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, or VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, then vkCmdSetBlendConstants must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07836", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthBoundsTestEnable is VK_TRUE, then vkCmdSetDepthBounds must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07837", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilCompareMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07838", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilWriteMask must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07839", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, the current value of and rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilReference must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-maxMultiviewInstanceIndex-02688", + "text": "If the draw is recorded in a render pass instance with multiview enabled, the maximum instance index must be less than or equal to VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-02689", + "text": "If the bound graphics pipeline was created with VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to VK_TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07634", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleLocationsEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-06666", + "text": "If the VK_EXT_sample_locations extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of sampleLocationsEnable is VK_TRUE, then vkCmdSetSampleLocationsEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07840", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCullMode must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07841", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFrontFace must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07843", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, vkCmdSetDepthTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07844", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthWriteEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07845", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of depthTestEnable is VK_TRUE, then vkCmdSetDepthCompareOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07846", + "text": "If the depthBounds feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBoundsTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07847", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetStencilTestEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07848", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, the current value of stencilTestEnable is VK_TRUE, then vkCmdSetStencilOp must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-03417", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetViewportWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-scissorCount-03418", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, and the state is not inherited, then vkCmdSetScissorWithCount must have been called and not subsequently invalidated in the current command buffer prior to this drawing", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-03419", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with both the VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled, and the state is not inherited, then the viewportCount parameter of vkCmdSetViewportWithCount must match the scissorCount parameter of vkCmdSetScissorWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-04137", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportWScalingStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-04138", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then vkCmdSetViewportWScalingNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08636", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the current value of viewportWScalingEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportWScalingNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-04139", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportShadingRateImageStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-shadingRateImage-09233", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoarseSampleOrderNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-shadingRateImage-09234", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then vkCmdSetViewportShadingRatePaletteNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08637", + "text": "If the shadingRateImage feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of shadingRateImageEnable is VK_TRUE, then the viewportCount parameter in the last call to vkCmdSetViewportShadingRatePaletteNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-VkPipelineVieportCreateInfo-04141", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportSwizzleStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-VkPipelineVieportCreateInfo-04142", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from VkPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created with VkPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07878", + "text": "If the exclusiveScissor feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled, then vkCmdSetExclusiveScissorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07879", + "text": "If the exclusiveScissor feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled, and the most recent call to vkCmdSetExclusiveScissorEnableNV in the current command buffer set any element of pExclusiveScissorEnables to VK_TRUE, then vkCmdSetExclusiveScissorNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-04876", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled, then vkCmdSetRasterizerDiscardEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-04877", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthBiasEnable must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-logicOp-04878", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of logicOpEnable is VK_TRUE, then vkCmdSetLogicOpEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-primitiveFragmentShadingRateWithMultipleViewports-04552", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, the bound graphics pipeline was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-primitiveFragmentShadingRateWithMultipleViewports-08642", + "text": "If the primitiveFragmentShadingRateWithMultipleViewports limit is not supported, and any shader object bound to a graphics stage writes to the PrimitiveShadingRateKHR built-in, then vkCmdSetViewportWithCount must have been called in the current command buffer prior to this drawing command, and the viewportCount parameter of vkCmdSetViewportWithCount must be 1", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-blendEnable-04727", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then for each color attachment, if the corresponding image view’s format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value of blendEnable must be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08644", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and none of the following is enabled:
\n\n
\n
\n

then the current value of\nrasterizationSamples must be the same as the current color and/or\ndepth/stencil attachments

\n
", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08876", + "text": "If a shader object is bound to any graphics stage, the current render pass instance must have been begun with vkCmdBeginRendering", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06172", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06173", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06174", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06175", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06176", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pDepthAttachment is not VK_NULL_HANDLE, and the layout member of pDepthAttachment is VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06177", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the imageView member of pStencilAttachment is not VK_NULL_HANDLE, and the layout member of pStencilAttachment is VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewMask-06178", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::viewMask equal to VkRenderingInfo::viewMask", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-06179", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled and the current render pass instance was begun with vkCmdBeginRendering, the bound graphics pipeline must have been created with a VkPipelineRenderingCreateInfo::colorAttachmentCount equal to VkRenderingInfo::colorAttachmentCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08910", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08912", + "text": "If the dynamicRenderingUnusedAttachments feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView equal to VK_NULL_HANDLE must have the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound pipeline equal to VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08911", + "text": "If the dynamicRenderingUnusedAttachments feature is enabled, and the current render pass instance was begun with vkCmdBeginRendering and VkRenderingInfo::colorAttachmentCount greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with an imageView not equal to VK_NULL_HANDLE must have been created with a VkFormat equal to the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the bound graphics pipeline, or the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-09362", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, with a VkRenderingInfo::colorAttachmentCount equal to 1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a resolveImageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09363", + "text": "If there is no shader object bound to any graphics stage, the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, and a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with an image created with a VkExternalFormatANDROID::externalFormat value equal to the VkExternalFormatANDROID::externalFormat value used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09364", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, then vkCmdSetColorBlendEnableEXT must have set the blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09365", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09366", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetColorBlendEnableEXT must have set blend enable to VK_FALSE prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-09367", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetRasterizationSamplesEXT must have set rasterizationSamples to VK_SAMPLE_COUNT_1_BIT prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09368", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09369", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zero VkExternalFormatANDROID::externalFormat value and with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pFragmentSize-09370", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->width to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pFragmentSize-09371", + "text": "If there is a shader object bound to any graphics stage, and the current render pass includes a color attachment that uses the VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID resolve mode, then vkCmdSetFragmentShadingRateKHR must have set pFragmentSize->height to 1 prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07749", + "text": "If the colorWriteEnable feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetColorWriteEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-attachmentCount-07750", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then the attachmentCount parameter of vkCmdSetColorWriteEnableEXT must be greater than or equal to the VkPipelineColorBlendStateCreateInfo::attachmentCount of the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08647", + "text": "If the colorWriteEnable feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then the attachmentCount parameter of most recent call to vkCmdSetColorWriteEnableEXT in the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07751", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo included a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09236", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled and the pNext chain of VkGraphicsPipelineCreateInfo did not include a VkPipelineDiscardRectangleStateCreateInfoEXT structure, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle in VkPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07880", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDiscardRectangleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07881", + "text": "If the VK_EXT_discard_rectangles extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of discardRectangleEnable is VK_TRUE, then vkCmdSetDiscardRectangleModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08913", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08914", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08915", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pDepthAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08916", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08917", + "text": "If current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline must be equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08918", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled, VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, and the value of VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the bound graphics pipeline was not equal to the VkFormat used to create VkRenderingInfo::pStencilAttachment->imageView, the value of the format must be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06183", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentShadingRateAttachmentInfoKHR::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06184", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and VkRenderingFragmentDensityMapAttachmentInfoEXT::imageView was not VK_NULL_HANDLE, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-layers-10831", + "text": "If the current render pass instance was created with VK_RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE or VK_RENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have a layers value less than or equal to VkPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-06185", + "text": "If the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the corresponding element of the pColorAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthAttachment-06186", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pStencilAttachment-06187", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline was created with a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of the depthStencilAttachmentSamples member of VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV used to create the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07285", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun with vkCmdBeginRendering with a VkRenderingInfo::colorAttachmentCount parameter greater than 0, then each element of the VkRenderingInfo::pColorAttachments array with a imageView not equal to VK_NULL_HANDLE must have been created with a sample count equal to the value of rasterizationSamples for the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07286", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pDepthAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07287", + "text": "If the bound pipeline was created without a VkAttachmentSampleCountInfoAMD or VkAttachmentSampleCountInfoNV structure, and the multisampledRenderToSingleSampled feature is not enabled, and VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, the value of rasterizationSamples for the bound graphics pipeline must be equal to the sample count used to create VkRenderingInfo::pStencilAttachment->imageView", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pNext-07935", + "text": "If this command has been called inside a render pass instance started with vkCmdBeginRendering, and the pNext chain of VkRenderingInfo includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the value of rasterizationSamples for the bound graphics pipeline must be equal to VkMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-renderPass-06198", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, the bound pipeline must have been created with a VkGraphicsPipelineCreateInfo::renderPass equal to VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pColorAttachments-08963", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of the VkRenderingInfo::pColorAttachments->imageView was not VK_NULL_HANDLE, then the corresponding element of VkPipelineRenderingCreateInfo::pColorAttachmentFormats used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthAttachment-08964", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and the VkRenderingInfo::pDepthAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::depthAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pStencilAttachment-08965", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and the VkRenderingInfo::pStencilAttachment->imageView was not VK_NULL_HANDLE, then the VkPipelineRenderingCreateInfo::stencilAttachmentFormat used to create the pipeline must not be VK_FORMAT_UNDEFINED", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-flags-10582", + "text": "If the current render pass instance was begun with vkCmdBeginRendering, its VkRenderingInfo::flags parameter must not have VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT set unless VK_RENDERING_CONTENTS_INLINE_BIT_KHR is also set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708", + "text": "If the primitivesGeneratedQueryWithRasterizerDiscard feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, rasterization discard must not be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-primitivesGeneratedQueryWithNonZeroStreams-06709", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, the bound graphics pipeline must not have been created with a non-zero value in VkPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07620", + "text": "If the depthClamp feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetDepthClampEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07621", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetPolygonModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07622", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRasterizationSamplesEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07623", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetSampleMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-alphaToCoverageEnable-08919", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and alphaToCoverageEnable was VK_TRUE in the last call to vkCmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-alphaToCoverageEnable-08920", + "text": "If a shader object is bound to any graphics stage, and the most recent call to vkCmdSetAlphaToCoverageEnableEXT in the current command buffer set alphaToCoverageEnable to VK_TRUE, then the Fragment Output Interface must contain a variable for the alpha Component word in Location 0 at Index 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07624", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToCoverageEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07625", + "text": "If the alphaToOne feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAlphaToOneEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07626", + "text": "If the logicOp feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLogicOpEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07627", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorBlendEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07628", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08658", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the most recent call to vkCmdSetColorBlendEnableEXT for any attachment set that attachment’s value in pColorBlendEnables to VK_TRUE, then vkCmdSetColorBlendEquationEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07629", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and there are color attachments bound, then vkCmdSetColorWriteMaskEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07630", + "text": "If the geometryStreams feature is enabled, and a shader object is bound to the VK_SHADER_STAGE_GEOMETRY_BIT stage or a graphics pipeline is bound which was created with both a VK_SHADER_STAGE_GEOMETRY_BIT stage and the VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled, then vkCmdSetRasterizationStreamEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07631", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetConservativeRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07632", + "text": "If the VK_EXT_conservative_rasterization extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of conservativeRasterizationMode is VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then vkCmdSetExtraPrimitiveOverestimationSizeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07633", + "text": "If the depthClipEnable feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state, then vkCmdSetDepthClipEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07635", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09416", + "text": "If the VK_EXT_blend_operation_advanced extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then at least one of vkCmdSetColorBlendEquationEXT and vkCmdSetColorBlendAdvancedEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07636", + "text": "If the VK_EXT_provoking_vertex extension is enabled, a shader object is bound to the VK_SHADER_STAGE_VERTEX_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetProvokingVertexModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08666", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08667", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08668", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineRasterizationModeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08669", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of polygonMode is VK_POLYGON_MODE_LINE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08670", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, a VK_SHADER_STAGE_VERTEX_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of primitiveTopology is any line topology, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08671", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled, and a shader object is bound or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled, either a VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT stage is bound, the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetLineStippleEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07849", + "text": "If any of the stippledRectangularLines, stippledBresenhamLines or stippledSmoothLines features are enabled and a shader object is bound to any graphics stage, or a bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of stippledLineEnable is VK_TRUE, then vkCmdSetLineStipple must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10608", + "text": "If a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled, and the current lineRasterizationMode is VK_LINE_RASTERIZATION_MODE_BRESENHAM or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the current alphaToCoverageEnable, alphaToOneEnable and sampleShadingEnable states must all be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07639", + "text": "If the depthClipControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state enabled, then vkCmdSetDepthClipNegativeOneToOneEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09650", + "text": "If the depthClampControl feature is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT dynamic state enabled, and the current value of depthClampEnable is VK_TRUE, then vkCmdSetDepthClampRangeEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07640", + "text": "If the VK_NV_clip_space_w_scaling extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state enabled, then vkCmdSetViewportWScalingEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07641", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then vkCmdSetViewportSwizzleNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07642", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageToColorEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07643", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageToColorEnable is VK_TRUE, then vkCmdSetCoverageToColorLocationNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07644", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageModulationModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07645", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationMode is any value other than VK_COVERAGE_MODULATION_MODE_NONE_NV, then vkCmdSetCoverageModulationTableEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07646", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state enabled, the current value of rasterizerDiscardEnable is VK_FALSE, and the current value of coverageModulationTableEnable is VK_TRUE, then vkCmdSetCoverageModulationTableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07647", + "text": "If the shadingRateImage feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetShadingRateImageEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pipelineFragmentShadingRate-09238", + "text": "If the pipelineFragmentShadingRate feature is enabled, a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetFragmentShadingRateKHR must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07648", + "text": "If the representativeFragmentTest feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetRepresentativeFragmentTestEnableNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07649", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetCoverageReductionModeNV must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pColorBlendEnables-07470", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last call to vkCmdSetColorBlendEnableEXT set pColorBlendEnables for any attachment to VK_TRUE, then for those attachments in the subpass the corresponding image view’s format features must contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07471", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must follow the rules for a zero-attachment subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-samples-07472", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the VkPipelineMultisampleStateCreateInfo::rasterizationSamples parameter used to create the bound graphics pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-samples-07473", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then the samples parameter in the last call to vkCmdSetSampleMaskEXT must be greater or equal to the rasterizationSamples parameter in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07474", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09211", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes a VkMultisampledRenderToSingleSampledInfoEXT structure with multisampledRenderToSingleSampledEnable equal to VK_TRUE, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the rasterizationSamples member of that structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07476", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09417", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorBlendEnableEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEnableEXT calls must specify an enable for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07477", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09418", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and both the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE and there are color attachments bound, then vkCmdSetColorBlendEquationEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendEquationEXT calls must specify the blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07478", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09419", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, then vkCmdSetColorWriteMaskEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorWriteMaskEXT calls must specify the color write mask for all active color attachments in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07479", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled then vkCmdSetColorBlendAdvancedEXT must have been called in the current command buffer prior to this drawing command, and the attachments specified by the firstAttachment and attachmentCount parameters of vkCmdSetColorBlendAdvancedEXT calls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-advancedBlendMaxColorAttachments-07480", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and the last calls to vkCmdSetColorBlendEnableEXT and vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-primitivesGeneratedQueryWithNonZeroStreams-07481", + "text": "If the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled and the VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is active, and the bound graphics pipeline was created with VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last call to vkCmdSetRasterizationStreamEXT must have set the rasterizationStream to zero", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsPerPixel-07482", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples member of the VkPipelineMultisampleStateCreateInfo structure the bound graphics pipeline has been created with", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsPerPixel-07483", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then the sampleLocationsPerPixel member of pSampleLocationsInfo in the last call to vkCmdSetSampleLocationsEXT must equal the rasterizationSamples parameter of the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07484", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with the VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07485", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.width in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07486", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, then the sampleLocationsInfo.maxSampleLocationGridSize.height in the last call to vkCmdSetSampleLocationsEXT must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling rasterizationSamples", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07487", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if sampleLocationsEnable was VK_TRUE in the last call to vkCmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instruction InterpolateAtSample", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07936", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.width must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.width as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07937", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationGridSize.height must evenly divide VkMultisamplePropertiesEXT::maxSampleLocationGridSize.height as returned by vkGetPhysicalDeviceMultisamplePropertiesEXT with a samples parameter equaling the value of rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07938", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the current value of sampleLocationsEnable is VK_TRUE, then sampleLocationsInfo.sampleLocationsPerPixel must equal rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-coverageModulationTableEnable-07488", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state enabled, and the last call to vkCmdSetCoverageModulationTableEnableNV set coverageModulationTableEnable to VK_TRUE, then the coverageModulationTableCount parameter in the last call to vkCmdSetCoverageModulationTableNV must equal the current rasterizationSamples divided by the number of color samples in the current subpass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07489", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the current rasterizationSamples must be the same as the sample count of the depth/stencil attachment", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-coverageToColorEnable-07490", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09420", + "text": "If the VK_NV_fragment_coverage_to_color extension is enabled, and a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to vkCmdSetRasterizerDiscardEnable in the current command buffer set rasterizerDiscardEnable to VK_FALSE, and the last call to vkCmdSetCoverageToColorEnableNV set the coverageToColorEnable to VK_TRUE, then the current subpass must have a color attachment at the location selected by the last call to vkCmdSetCoverageToColorLocationNV coverageToColorLocation, with a VkFormat of VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R32_UINT, or VK_FORMAT_R32_SINT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-coverageReductionMode-07491", + "text": "If the coverageReductionMode feature is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV or VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic states enabled, then the current values of coverageReductionMode, rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned by vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-07492", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but not the VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled, then the bound graphics pipeline must have been created with VkPipelineViewportSwizzleStateCreateInfoNV::viewportCount greater or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-07493", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-09421", + "text": "If the VK_NV_viewport_swizzle extension is enabled, and a shader object is bound to any graphics stage, then the viewportCount parameter in the last call to vkCmdSetViewportSwizzleNV must be greater than or equal to the viewportCount parameter in the last call to vkCmdSetViewportWithCount", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07494", + "text": "If the VK_NV_framebuffer_mixed_samples extension is enabled, and the coverageReductionMode feature is not enabled, or the current value of coverageReductionMode is not VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value of rasterizationSamples is greater than sample count of the color attachment, then sample shading must be disabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07495", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07496", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07497", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07498", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states enabled, and if the current stippledLineEnable state is VK_TRUE and the current lineRasterizationMode state is VK_LINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled and VkPhysicalDeviceLimits::strictLines must be VK_TRUE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-conservativePointAndLineRasterization-07499", + "text": "If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then the conservativeRasterizationMode set by the last call to vkCmdSetConservativeRasterizationModeEXT must be VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-stage-07073", + "text": "If the bound pipeline was created with the VkPipelineShaderStageCreateInfo::stage member of an element of VkGraphicsPipelineCreateInfo::pStages set to VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or VK_SHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08877", + "text": "If a shader object is bound to the VK_SHADER_STAGE_FRAGMENT_BIT stage or a graphics pipeline is bound which was created with the VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state enabled, and the current value of rasterizerDiscardEnable is VK_FALSE, then vkCmdSetAttachmentFeedbackLoopEnableEXT must have been called and not subsequently invalidated in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-07850", + "text": "If dynamic state was inherited from VkCommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-nextStage-10745", + "text": "For each shader object bound to a graphics stage, except for shader object bound to the last graphics stage in the logical pipeline, it must have been created with a nextStage including the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08684", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_VERTEX_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08685", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08686", + "text": "If there is no bound graphics pipeline, and the tessellationShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08687", + "text": "If there is no bound graphics pipeline, and the geometryShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_GEOMETRY_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08688", + "text": "If there is no bound graphics pipeline, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_FRAGMENT_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08689", + "text": "If there is no bound graphics pipeline, and the taskShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_TASK_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08690", + "text": "If there is no bound graphics pipeline, and the meshShader feature is enabled, vkCmdBindShadersEXT must have been called in the current command buffer with pStages with an element of VK_SHADER_STAGE_MESH_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08693", + "text": "If there is no bound graphics pipeline, and at least one of the taskShader and meshShader features is enabled, one of the VK_SHADER_STAGE_VERTEX_BIT or VK_SHADER_STAGE_MESH_BIT_EXT stages must have a valid VkShaderEXT bound, and the other must have no VkShaderEXT bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08696", + "text": "If there is no bound graphics pipeline, and a valid VkShaderEXT is bound to the VK_SHADER_STAGE_VERTEX_BIT stage, there must be no VkShaderEXT bound to either the VK_SHADER_STAGE_TASK_BIT_EXT stage or the VK_SHADER_STAGE_MESH_BIT_EXT stage", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08698", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same vkCreateShadersEXT call must also be bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08699", + "text": "If any graphics shader is bound which was created with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between stages whose shaders which did not create a shader with the VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same vkCreateShadersEXT call must not have any VkShaderEXT bound", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08878", + "text": "All bound graphics shader objects must have been created with identical or identically defined push constant ranges", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-08879", + "text": "All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-09372", + "text": "If the current render pass instance was begun with vkCmdBeginRendering and a VkRenderingInfo::colorAttachmentCount equal to 1, a color attachment with a resolve mode of VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare the DepthReplacing or StencilRefReplacingEXT execution modes", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDynamicStates-08715", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpDepthAttachmentReadEXT, the depthWriteEnable parameter in the last call to vkCmdSetDepthWriteEnable must be VK_FALSE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pDynamicStates-08716", + "text": "If the bound graphics pipeline state includes a fragment shader stage, was created with VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in VkPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares the EarlyFragmentTests execution mode and uses OpStencilAttachmentReadEXT, the writeMask parameter in the last call to vkCmdSetStencilWriteMask must be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09116", + "text": "If a shader object is bound to any graphics stage or the bound graphics pipeline was created with VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment is VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the pColorWriteMasks parameter of vkCmdSetColorWriteMaskEXT must either include all of VK_COLOR_COMPONENT_R_BIT, VK_COLOR_COMPONENT_G_BIT, and VK_COLOR_COMPONENT_B_BIT, or none of them", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-maxFragmentDualSrcAttachments-09239", + "text": "If blending is enabled for any attachment where either the source or destination blend factors for that attachment use the secondary color input, the maximum value of Location for any output attachment statically used in the Fragment Execution Model executed by this command must be less than maxFragmentDualSrcAttachments", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09548", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element of VkRenderingAttachmentLocationInfo::pColorAttachmentLocations set by vkCmdSetRenderingAttachmentLocations must match the value set for the corresponding element in the bound pipeline", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09549", + "text": "If the current render pass was begun with vkCmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance via VkRenderingInputAttachmentIndexInfo", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09642", + "text": "If the current render pass was begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag, the bound graphics pipeline must have been created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-09643", + "text": "If the bound graphics pipeline was created with VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun with vkCmdBeginRendering with the VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT flag", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10677", + "text": "If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-10772", + "text": "If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-11045", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11046", + "text": "If isPreprocessed is VK_TRUE and vkGetGeneratedCommandsMemoryRequirementsEXT did not return a required size of zero then vkCmdPreprocessGeneratedCommandsEXT must have already been executed on the device before this command executes, and the preprocessing command must have used the same pGeneratedCommandsInfo content as well as the content of the input buffers it references (all except VkGeneratedCommandsInfoEXT::preprocessAddress)", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11047", + "text": "If isPreprocessed is VK_TRUE then the indirectCommandsLayout member of pGeneratedCommandsInfo must have been created with the VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11141", + "text": "If the indirectCommandsLayout member of pGeneratedCommandsInfo was created with the VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT bit set, then isPreprocessed must be VK_TRUE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-preprocessAddress-11142", + "text": "The contents of the preprocessAddress member of pGeneratedCommandsInfo must not have been previously used to record another vkCmdExecuteGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11048", + "text": "If isPreprocessed is VK_TRUE then the bound descriptor sets and push constants must match identically with those bound during recording of the corresponding call to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-10198", + "text": "If isPreprocessed is VK_TRUE then the conditional render state and its predicate value must match identically with the state and value set during execution of the corresponding call to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11049", + "text": "If isPreprocessed is VK_TRUE and the indirectCommandsLayout member of pGeneratedCommandsInfo contains a draw token, then the graphics state bound on commandBuffer must match identically with the graphics state bound on the stateCommandBuffer passed to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11149", + "text": "If isPreprocessed is VK_TRUE, then the queue family index of commandBuffer must be the same as the queue family index used to allocate the stateCommandBuffer passed to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11051", + "text": "If isPreprocessed is VK_TRUE and the indirectCommandsLayout member of pGeneratedCommandsInfo contains a dispatch token, then the compute state bound on commandBuffer must match identically with the compute state bound on the stateCommandBuffer passed to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11052", + "text": "If isPreprocessed is VK_TRUE and the indirectCommandsLayout member of pGeneratedCommandsInfo contains a ray tracing token, then the ray tracing state bound on commandBuffer must match identically with the ray tracing state bound on the stateCommandBuffer passed to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11150", + "text": "If isPreprocessed is VK_TRUE and the indirectCommandsLayout member of pGeneratedCommandsInfo contains a ray tracing token, the queue family index commandBuffer was allocated from must be the same queue family index used to allocate the stateCommandBuffer passed to vkCmdPreprocessGeneratedCommandsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11053", + "text": "If the token sequence of the passed VkGeneratedCommandsInfoEXT::indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the initial shader state of VkGeneratedCommandsInfoEXT::indirectExecutionSet must be bound on commandBuffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11004", + "text": "If indirectCommandsLayout was created with a token sequence that contained the VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token and indirectExecutionSet was created using VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT, every executed VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token must bind all the shader stages set in the VkIndirectCommandsExecutionSetTokenEXT::shaderStages used to create indirectCommandsLayout", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11055", + "text": "If isPreprocessed is VK_TRUE and the token sequence of the passed VkGeneratedCommandsInfoEXT::indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the members of VkGeneratedCommandsInfoEXT::indirectExecutionSet accessed by this command must not have been modified since the preprocess buffer was generated", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11056", + "text": "If the indirectCommandsLayout member of pGeneratedCommandsInfo contains a draw token, then the active render pass must not have a specified fragment density map", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-deviceGeneratedCommandsTransformFeedback-11057", + "text": "If deviceGeneratedCommandsTransformFeedback is not supported on device, transform feedback must not be active", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-indirectExecutionSet-11058", + "text": "If transform feedback is active, VkGeneratedCommandsInfoEXT::indirectExecutionSet must be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-deviceGeneratedCommands-11059", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-supportedIndirectCommandsShaderStages-11060", + "text": "The bound shader stages must be supported by VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-supportedIndirectCommandsShaderStages-11061", + "text": "Only stages specified in VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStages can be set in pGeneratedCommandsInfo->shaderStages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-None-11062", + "text": "If a rendering pass is currently active, the view mask must be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-11143", + "text": "commandBuffer must not have been created with VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-10769", + "text": "If the indirectCommandsLayout member of pGeneratedCommandsInfo contains a draw token, this command must not be called outside a render pass instance", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-pGeneratedCommandsInfo-parameter", + "text": "pGeneratedCommandsInfo must be a valid pointer to a valid VkGeneratedCommandsInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdExecuteGeneratedCommandsEXT-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "VkGeneratedCommandsInfoEXT": { + "core": [ + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11063", + "text": "If vkGetGeneratedCommandsMemoryRequirementsEXT returns a non-zero size, preprocessAddress must not be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11064", + "text": "VkDeviceMemory objects bound to the underlying buffer for preprocessAddress must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned by vkGetGeneratedCommandsMemoryRequirementsEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11065", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, then the indirectExecutionSet’s push constant layout must contain the updateRange specified in VkIndirectCommandsPushConstantTokenEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11066", + "text": "If the indirectCommandsLayout uses a token of VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, then the indirectExecutionSet’s push constant layout must contain the updateRange specified in VkIndirectCommandsPushConstantTokenEXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-maxSequenceCount-11067", + "text": "maxSequenceCount must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCount and VkGeneratedCommandsMemoryRequirementsInfoEXT::maxSequenceCount that was used to determine the preprocessSize", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11068", + "text": "If sequenceCountAddress is not NULL, the value contained in the address must be less or equal to VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCount and VkGeneratedCommandsMemoryRequirementsInfoEXT::maxSequenceCount that was used to determine the preprocessSize", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-maxSequenceCount-10246", + "text": "maxSequenceCount must not be zero", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11069", + "text": "The underlying buffer for preprocessAddress must have the VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT bit set in its usage flag", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11070", + "text": "If the underlying buffer for preprocessAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11144", + "text": "If the indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, then the descriptor and push constant layout info provided either by pipelineLayout or through a VkPipelineLayoutCreateInfo in pNext of the VkIndirectCommandsLayoutCreateInfoEXT used to create indirectCommandsLayout must be compatible with the descriptor and push constant layout info used by indirectExecutionSet", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11002", + "text": "If indirectCommandsLayout was created with a token sequence that contained the VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the shader stages used to create the initial shader state of indirectExecutionSet must equal the VkIndirectCommandsExecutionSetTokenEXT::shaderStages used to create indirectCommandsLayout", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-preprocessSize-11071", + "text": "preprocessSize must be greater than or equal to the memory requirement’s size returned by vkGetGeneratedCommandsMemoryRequirementsEXT using the matching inputs (indirectCommandsLayout, …​) as within this structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11072", + "text": "The underlying buffer for sequenceCountAddress must have the VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR bit set in its usage flag", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11073", + "text": "If sequenceCountAddress is not NULL, sequenceCountAddress must be aligned to 4", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectAddress-11074", + "text": "indirectAddress must be aligned to 4", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11075", + "text": "If the underlying buffer for sequenceCountAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectAddress-11076", + "text": "indirectAddress must not be NULL", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectAddressSize-11077", + "text": "indirectAddressSize must be greater than zero", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-maxDrawCount-11078", + "text": "When not ignored, maxDrawCount × maxSequenceCount must be less than 2^24", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11079", + "text": "If indirectCommandsLayout was created using a VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT token and shader objects are not bound then the bound graphics pipeline must have been created with VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE in pDynamicStates", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11083", + "text": "If the token sequence of the passed indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the indirectExecutionSet must not be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-10241", + "text": "If the token sequence of the passed indirectCommandsLayout does not contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the indirectExecutionSet must be VK_NULL_HANDLE", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectExecutionSet-11080", + "text": "If indirectExecutionSet is VK_NULL_HANDLE, a VkGeneratedCommandsPipelineInfoEXT or VkGeneratedCommandsShaderInfoEXT must be included in the pNext chain", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-shaderStages-parameter", + "text": "shaderStages must be a valid combination of VkShaderStageFlagBits values", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-shaderStages-requiredbitmask", + "text": "shaderStages must not be 0", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectExecutionSet-parameter", + "text": "If indirectExecutionSet is not VK_NULL_HANDLE, indirectExecutionSet must be a valid VkIndirectExecutionSetEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-parameter", + "text": "indirectCommandsLayout must be a valid VkIndirectCommandsLayoutEXT handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-VkGeneratedCommandsInfoEXT-commonparent", + "text": "Both of indirectCommandsLayout, and indirectExecutionSet that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkCmdPreprocessGeneratedCommandsEXT": { + "core": [ + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-11081", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-pGeneratedCommandsInfo-11082", + "text": "pGeneratedCommandsInfo’s indirectCommandsLayout must have been created with the VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT bit set", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-indirectCommandsLayout-11084", + "text": "If the token sequence of the passed VkGeneratedCommandsInfoEXT::indirectCommandsLayout contains a VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT token, the initial shader state of VkGeneratedCommandsInfoEXT::indirectExecutionSet must be bound on stateCommandBuffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-stateCommandBuffer-11138", + "text": "stateCommandBuffer must be in the recording state", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-deviceGeneratedCommands-11087", + "text": "The VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-supportedIndirectCommandsShaderStages-11088", + "text": "Only stages specified in VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::supportedIndirectCommandsShaderStages can be set in pGeneratedCommandsInfo->shaderStages", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-pGeneratedCommandsInfo-parameter", + "text": "pGeneratedCommandsInfo must be a valid pointer to a valid VkGeneratedCommandsInfoEXT structure", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-stateCommandBuffer-parameter", + "text": "stateCommandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/device_generated_commands/generatedcommands.html" + }, + { + "vuid": "VUID-vkCmdPreprocessGeneratedCommandsEXT-commonparent", + "text": "Both of commandBuffer, and stateCommandBuffer must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/device_generated_commands/generatedcommands.html" + } + ] + }, + "vkGetPhysicalDeviceSparseImageFormatProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094", + "text": "samples must be a valid VkSampleCountFlagBits value that is set in VkImageFormatProperties::sampleCounts returned by vkGetPhysicalDeviceImageFormatProperties with format, type, tiling, and usage equal to those in this command", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-type-parameter", + "text": "type must be a valid VkImageType value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-tiling-parameter", + "text": "tiling must be a valid VkImageTiling value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkSparseImageFormatProperties structures", + "page": "chapters/sparsemem.html" + } + ] + }, + "vkGetPhysicalDeviceSparseImageFormatProperties2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pFormatInfo-parameter", + "text": "pFormatInfo must be a valid pointer to a valid VkPhysicalDeviceSparseImageFormatInfo2 structure", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkSparseImageFormatProperties2 structures", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkPhysicalDeviceSparseImageFormatInfo2": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-01095", + "text": "samples must be a valid VkSampleCountFlagBits value that is set in VkImageFormatProperties::sampleCounts returned by vkGetPhysicalDeviceImageFormatProperties with format, type, tiling, and usage equal to those in this command", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-type-parameter", + "text": "type must be a valid VkImageType value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSparseImageFormatInfo2-tiling-parameter", + "text": "tiling must be a valid VkImageTiling value", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseImageFormatProperties2": { + "core": [ + { + "vuid": "VUID-VkSparseImageFormatProperties2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageFormatProperties2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/sparsemem.html" + } + ] + }, + "vkGetImageSparseMemoryRequirements": { + "core": [ + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirementCount-parameter", + "text": "pSparseMemoryRequirementCount must be a valid pointer to a uint32_t value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirements-parameter", + "text": "If the value referenced by pSparseMemoryRequirementCount is not 0, and pSparseMemoryRequirements is not NULL, pSparseMemoryRequirements must be a valid pointer to an array of pSparseMemoryRequirementCount VkSparseImageMemoryRequirements structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements-image-parent", + "text": "image must have been created, allocated, or retrieved from device", + "page": "chapters/sparsemem.html" + } + ] + }, + "vkGetImageSparseMemoryRequirements2": { + "core": [ + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements2-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements2-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkImageSparseMemoryRequirementsInfo2 structure", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirementCount-parameter", + "text": "pSparseMemoryRequirementCount must be a valid pointer to a uint32_t value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirements-parameter", + "text": "If the value referenced by pSparseMemoryRequirementCount is not 0, and pSparseMemoryRequirements is not NULL, pSparseMemoryRequirements must be a valid pointer to an array of pSparseMemoryRequirementCount VkSparseImageMemoryRequirements2 structures", + "page": "chapters/sparsemem.html" + } + ] + }, + "vkGetDeviceImageSparseMemoryRequirements": { + "core": [ + { + "vuid": "VUID-vkGetDeviceImageSparseMemoryRequirements-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetDeviceImageSparseMemoryRequirements-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDeviceImageMemoryRequirements structure", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetDeviceImageSparseMemoryRequirements-pSparseMemoryRequirementCount-parameter", + "text": "pSparseMemoryRequirementCount must be a valid pointer to a uint32_t value", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkGetDeviceImageSparseMemoryRequirements-pSparseMemoryRequirements-parameter", + "text": "If the value referenced by pSparseMemoryRequirementCount is not 0, and pSparseMemoryRequirements is not NULL, pSparseMemoryRequirements must be a valid pointer to an array of pSparseMemoryRequirementCount VkSparseImageMemoryRequirements2 structures", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkImageSparseMemoryRequirementsInfo2": { + "core": [ + { + "vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkImageSparseMemoryRequirementsInfo2-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseImageMemoryRequirements2": { + "core": [ + { + "vuid": "VUID-VkSparseImageMemoryRequirements2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryRequirements2-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseMemoryBind": { + "core": [ + { + "vuid": "VUID-VkSparseMemoryBind-memory-01096", + "text": "If memory is not VK_NULL_HANDLE, memory and memoryOffset must match the memory requirements of the resource, as described in section Resource Memory Association", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-resourceOffset-09491", + "text": "If the resource being bound is a VkBuffer, resourceOffset, memoryOffset and size must be an integer multiple of the alignment of the VkMemoryRequirements structure returned from a call to vkGetBufferMemoryRequirements with the buffer resource", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-resourceOffset-09492", + "text": "If the resource being bound is a VkImage, resourceOffset and memoryOffset must be an integer multiple of the alignment of the VkMemoryRequirements structure returned from a call to vkGetImageMemoryRequirements with the image resource", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-memory-01097", + "text": "If memory is not VK_NULL_HANDLE, memory must not have been created with a memory type that reports VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-size-01098", + "text": "size must be greater than 0", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-resourceOffset-01099", + "text": "resourceOffset must be less than the size of the resource", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-size-01100", + "text": "size must be less than or equal to the size of the resource minus resourceOffset", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-memoryOffset-01101", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-size-01102", + "text": "size must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-memory-02730", + "text": "If memory was created with VkExportMemoryAllocateInfo::handleTypes not equal to 0, at least one handle type it contained must also have been set in VkExternalMemoryBufferCreateInfo::handleTypes or VkExternalMemoryImageCreateInfo::handleTypes when the resource was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-memory-02731", + "text": "If memory was created by a memory import operation, the external handle type of the imported memory must also have been set in VkExternalMemoryBufferCreateInfo::handleTypes or VkExternalMemoryImageCreateInfo::handleTypes when the resource was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-memory-parameter", + "text": "If memory is not VK_NULL_HANDLE, memory must be a valid VkDeviceMemory handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseMemoryBind-flags-parameter", + "text": "flags must be a valid combination of VkSparseMemoryBindFlagBits values", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseBufferMemoryBindInfo": { + "core": [ + { + "vuid": "VUID-VkSparseBufferMemoryBindInfo-buffer-parameter", + "text": "buffer must be a valid VkBuffer handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseBufferMemoryBindInfo-pBinds-parameter", + "text": "pBinds must be a valid pointer to an array of bindCount valid VkSparseMemoryBind structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseBufferMemoryBindInfo-bindCount-arraylength", + "text": "bindCount must be greater than 0", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseImageOpaqueMemoryBindInfo": { + "core": [ + { + "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103", + "text": "If the flags member of any element of pBinds contains VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding range defined must be within the mip tail region of the metadata aspect of image", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-parameter", + "text": "pBinds must be a valid pointer to an array of bindCount valid VkSparseMemoryBind structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageOpaqueMemoryBindInfo-bindCount-arraylength", + "text": "bindCount must be greater than 0", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseImageMemoryBindInfo": { + "core": [ + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01722", + "text": "The subresource.mipLevel member of each element of pBinds must be less than the mipLevels specified in VkImageCreateInfo when image was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01723", + "text": "The subresource.arrayLayer member of each element of pBinds must be less than the arrayLayers specified in VkImageCreateInfo when image was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-subresource-01106", + "text": "The subresource.aspectMask member of each element of pBinds must be valid for the format specified in VkImageCreateInfo when image was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-image-02901", + "text": "image must have been created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT set", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-image-parameter", + "text": "image must be a valid VkImage handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-pBinds-parameter", + "text": "pBinds must be a valid pointer to an array of bindCount valid VkSparseImageMemoryBind structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBindInfo-bindCount-arraylength", + "text": "bindCount must be greater than 0", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkSparseImageMemoryBind": { + "core": [ + { + "vuid": "VUID-VkSparseImageMemoryBind-memory-01104", + "text": "If the sparseResidencyAliased feature is not enabled, and if any other resources are bound to ranges of memory, the range of memory being bound must not overlap with those bound ranges", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-memory-01105", + "text": "memory and memoryOffset must match the memory requirements of the calling command’s image, as described in section Resource Memory Association", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-offset-01107", + "text": "offset.x must be a multiple of the sparse image block width (VkSparseImageFormatProperties::imageGranularity.width) of the image", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-extent-09388", + "text": "extent.width must be greater than 0", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-extent-01108", + "text": "extent.width must either be a multiple of the sparse image block width of the image, or else (extent.width + offset.x) must equal the width of the image subresource", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-offset-01109", + "text": "offset.y must be a multiple of the sparse image block height (VkSparseImageFormatProperties::imageGranularity.height) of the image", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-extent-09389", + "text": "extent.height must be greater than 0", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-extent-01110", + "text": "extent.height must either be a multiple of the sparse image block height of the image, or else (extent.height + offset.y) must equal the height of the image subresource", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-offset-01111", + "text": "offset.z must be a multiple of the sparse image block depth (VkSparseImageFormatProperties::imageGranularity.depth) of the image", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-extent-09390", + "text": "extent.depth must be greater than 0", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-extent-01112", + "text": "extent.depth must either be a multiple of the sparse image block depth of the image, or else (extent.depth + offset.z) must equal the depth of the image subresource", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-memory-02732", + "text": "If memory was created with VkExportMemoryAllocateInfo::handleTypes not equal to 0, at least one handle type it contained must also have been set in VkExternalMemoryImageCreateInfo::handleTypes when the image was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-memory-02733", + "text": "If memory was created by a memory import operation, the external handle type of the imported memory must also have been set in VkExternalMemoryImageCreateInfo::handleTypes when image was created", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-subresource-parameter", + "text": "subresource must be a valid VkImageSubresource structure", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-memory-parameter", + "text": "If memory is not VK_NULL_HANDLE, memory must be a valid VkDeviceMemory handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkSparseImageMemoryBind-flags-parameter", + "text": "flags must be a valid combination of VkSparseMemoryBindFlagBits values", + "page": "chapters/sparsemem.html" + } + ] + }, + "vkQueueBindSparse": { + "core": [ + { + "vuid": "VUID-vkQueueBindSparse-fence-01113", + "text": "If fence is not VK_NULL_HANDLE, fence must be unsignaled", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-fence-01114", + "text": "If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-pSignalSemaphores-01115", + "text": "Each element of the pSignalSemaphores member of each element of pBindInfo must be unsignaled when the semaphore signal operation it defines is executed on the device", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-01116", + "text": "When a semaphore wait operation referring to a binary semaphore defined by any element of the pWaitSemaphores member of any element of pBindInfo executes on queue, there must be no other queues waiting on the same semaphore", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-pWaitSemaphores-03245", + "text": "All elements of the pWaitSemaphores member of all elements of pBindInfo referring to a semaphore created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY must reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends must have also been submitted for execution", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-pBindInfo-parameter", + "text": "If bindInfoCount is not 0, pBindInfo must be a valid pointer to an array of bindInfoCount valid VkBindSparseInfo structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-fence-parameter", + "text": "If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-queuetype", + "text": "The queue must support sparse binding operations", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-vkQueueBindSparse-commonparent", + "text": "Both of fence, and queue that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkBindSparseInfo": { + "core": [ + { + "vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-03246", + "text": "If any element of pWaitSemaphores or pSignalSemaphores was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE then the pNext chain must include a VkTimelineSemaphoreSubmitInfo structure", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pNext-03247", + "text": "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure and any element of pWaitSemaphores was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE then its waitSemaphoreValueCount member must equal waitSemaphoreCount", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pNext-03248", + "text": "If the pNext chain of this structure includes a VkTimelineSemaphoreSubmitInfo structure and any element of pSignalSemaphores was created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE then its signalSemaphoreValueCount member must equal signalSemaphoreCount", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-03249", + "text": "For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value greater than the current value of the semaphore when the semaphore signal operation is executed", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-03250", + "text": "For each element of pWaitSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pWaitSemaphoreValues must have a value which does not differ from the current value of the semaphore or from the value of any outstanding semaphore wait or signal operation on that semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-03251", + "text": "For each element of pSignalSemaphores created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_TIMELINE the corresponding element of VkTimelineSemaphoreSubmitInfo::pSignalSemaphoreValues must have a value which does not differ from the current value of the semaphore or from the value of any outstanding semaphore wait or signal operation on that semaphore by more than maxTimelineSemaphoreValueDifference", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pNext-09753", + "text": "If the pNext chain of this structure includes a VkFrameBoundaryTensorsARM structure then it must also include a VkFrameBoundaryEXT structure.", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceGroupBindSparseInfo, VkFrameBoundaryEXT, VkFrameBoundaryTensorsARM, or VkTimelineSemaphoreSubmitInfo", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pWaitSemaphores-parameter", + "text": "If waitSemaphoreCount is not 0, pWaitSemaphores must be a valid pointer to an array of waitSemaphoreCount valid VkSemaphore handles", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pBufferBinds-parameter", + "text": "If bufferBindCount is not 0, pBufferBinds must be a valid pointer to an array of bufferBindCount valid VkSparseBufferMemoryBindInfo structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pImageOpaqueBinds-parameter", + "text": "If imageOpaqueBindCount is not 0, pImageOpaqueBinds must be a valid pointer to an array of imageOpaqueBindCount valid VkSparseImageOpaqueMemoryBindInfo structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pImageBinds-parameter", + "text": "If imageBindCount is not 0, pImageBinds must be a valid pointer to an array of imageBindCount valid VkSparseImageMemoryBindInfo structures", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-pSignalSemaphores-parameter", + "text": "If signalSemaphoreCount is not 0, pSignalSemaphores must be a valid pointer to an array of signalSemaphoreCount valid VkSemaphore handles", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkBindSparseInfo-commonparent", + "text": "Both of the elements of pSignalSemaphores, and the elements of pWaitSemaphores that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/sparsemem.html" + } + ] + }, + "VkDeviceGroupBindSparseInfo": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupBindSparseInfo-resourceDeviceIndex-01118", + "text": "resourceDeviceIndex and memoryDeviceIndex must both be valid device indices", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkDeviceGroupBindSparseInfo-memoryDeviceIndex-01119", + "text": "Each memory allocation bound in this batch must have allocated an instance for memoryDeviceIndex", + "page": "chapters/sparsemem.html" + }, + { + "vuid": "VUID-VkDeviceGroupBindSparseInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO", + "page": "chapters/sparsemem.html" + } + ] + }, + "vkCreateAndroidSurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkCreateAndroidSurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateAndroidSurfaceKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkAndroidSurfaceCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateAndroidSurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateAndroidSurfaceKHR-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkAndroidSurfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-window-01248", + "text": "window must point to a valid Android ANativeWindow", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAndroidSurfaceCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateWaylandSurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkCreateWaylandSurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateWaylandSurfaceKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkWaylandSurfaceCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateWaylandSurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateWaylandSurfaceKHR-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkWaylandSurfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-display-01304", + "text": "display must point to a valid Wayland wl_display", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305", + "text": "surface must point to a valid Wayland wl_surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWaylandSurfaceCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateWin32SurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkCreateWin32SurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateWin32SurfaceKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkWin32SurfaceCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateWin32SurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateWin32SurfaceKHR-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkWin32SurfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307", + "text": "hinstance must be a valid Win32 HINSTANCE", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308", + "text": "hwnd must be a valid Win32 HWND", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkWin32SurfaceCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateXcbSurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkCreateXcbSurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateXcbSurfaceKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkXcbSurfaceCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateXcbSurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateXcbSurfaceKHR-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkXcbSurfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-connection-01310", + "text": "connection must point to a valid X11 xcb_connection_t", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-window-01311", + "text": "window must be a valid X11 xcb_window_t", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXcbSurfaceCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateXlibSurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkCreateXlibSurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateXlibSurfaceKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkXlibSurfaceCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateXlibSurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateXlibSurfaceKHR-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkXlibSurfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313", + "text": "dpy must point to a valid Xlib Display", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-window-01314", + "text": "window must be a valid Xlib Window", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkXlibSurfaceCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateDirectFBSurfaceEXT": { + "core": [ + { + "vuid": "VUID-vkCreateDirectFBSurfaceEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDirectFBSurfaceEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDirectFBSurfaceCreateInfoEXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDirectFBSurfaceEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDirectFBSurfaceEXT-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDirectFBSurfaceCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDirectFBSurfaceCreateInfoEXT-dfb-04117", + "text": "dfb must point to a valid DirectFB IDirectFB", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDirectFBSurfaceCreateInfoEXT-surface-04118", + "text": "surface must point to a valid DirectFB IDirectFBSurface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDirectFBSurfaceCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDirectFBSurfaceCreateInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDirectFBSurfaceCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateImagePipeSurfaceFUCHSIA": { + "core": [ + { + "vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkImagePipeSurfaceCreateInfoFUCHSIA structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateImagePipeSurfaceFUCHSIA-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkImagePipeSurfaceCreateInfoFUCHSIA": { + "core": [ + { + "vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-imagePipeHandle-04863", + "text": "imagePipeHandle must be a valid zx_handle_t", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateStreamDescriptorSurfaceGGP": { + "core": [ + { + "vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkStreamDescriptorSurfaceCreateInfoGGP structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateStreamDescriptorSurfaceGGP-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkStreamDescriptorSurfaceCreateInfoGGP": { + "core": [ + { + "vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-streamDescriptor-02681", + "text": "streamDescriptor must be a valid GgpStreamDescriptor", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkStreamDescriptorSurfaceCreateInfoGGP-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateIOSSurfaceMVK": { + "core": [ + { + "vuid": "VUID-vkCreateIOSSurfaceMVK-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateIOSSurfaceMVK-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkIOSSurfaceCreateInfoMVK structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateIOSSurfaceMVK-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateIOSSurfaceMVK-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkIOSSurfaceCreateInfoMVK": { + "core": [ + { + "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pView-04143", + "text": "If pView is a CAMetalLayer object, it must be a valid CAMetalLayer", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pView-01316", + "text": "If pView is a UIView object, it must be a valid UIView, must be backed by a CALayer object of type CAMetalLayer, and vkCreateIOSSurfaceMVK must be called on the main thread", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkIOSSurfaceCreateInfoMVK-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateMacOSSurfaceMVK": { + "core": [ + { + "vuid": "VUID-vkCreateMacOSSurfaceMVK-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateMacOSSurfaceMVK-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkMacOSSurfaceCreateInfoMVK structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateMacOSSurfaceMVK-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateMacOSSurfaceMVK-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkMacOSSurfaceCreateInfoMVK": { + "core": [ + { + "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pView-04144", + "text": "If pView is a CAMetalLayer object, it must be a valid CAMetalLayer", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317", + "text": "If pView is an NSView object, it must be a valid NSView, must be backed by a CALayer object of type CAMetalLayer, and vkCreateMacOSSurfaceMVK must be called on the main thread", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkMacOSSurfaceCreateInfoMVK-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateViSurfaceNN": { + "core": [ + { + "vuid": "VUID-vkCreateViSurfaceNN-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateViSurfaceNN-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkViSurfaceCreateInfoNN structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateViSurfaceNN-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateViSurfaceNN-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkViSurfaceCreateInfoNN": { + "core": [ + { + "vuid": "VUID-VkViSurfaceCreateInfoNN-window-01318", + "text": "window must be a valid nn::vi::NativeWindowHandle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkViSurfaceCreateInfoNN-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkViSurfaceCreateInfoNN-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkViSurfaceCreateInfoNN-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateMetalSurfaceEXT": { + "core": [ + { + "vuid": "VUID-vkCreateMetalSurfaceEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateMetalSurfaceEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkMetalSurfaceCreateInfoEXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateMetalSurfaceEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateMetalSurfaceEXT-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkMetalSurfaceCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMetalSurfaceCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkMetalSurfaceCreateInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkMetalSurfaceCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateScreenSurfaceQNX": { + "core": [ + { + "vuid": "VUID-vkCreateScreenSurfaceQNX-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateScreenSurfaceQNX-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkScreenSurfaceCreateInfoQNX structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateScreenSurfaceQNX-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateScreenSurfaceQNX-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkScreenSurfaceCreateInfoQNX": { + "core": [ + { + "vuid": "VUID-VkScreenSurfaceCreateInfoQNX-context-04741", + "text": "context must point to a valid QNX Screen struct _screen_context", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkScreenSurfaceCreateInfoQNX-window-04742", + "text": "window must point to a valid QNX Screen struct _screen_window", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkScreenSurfaceCreateInfoQNX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkScreenSurfaceCreateInfoQNX-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkScreenSurfaceCreateInfoQNX-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateSurfaceOHOS": { + "core": [ + { + "vuid": "VUID-vkCreateSurfaceOHOS-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSurfaceOHOS-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkSurfaceCreateInfoOHOS structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSurfaceOHOS-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSurfaceOHOS-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkOHSurfaceCreateInfoOHOS": { + "core": [ + { + "vuid": "VUID-VkOHSurfaceCreateInfoOHOS-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OH_SURFACE_CREATE_INFO_OHOS", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkOHSurfaceCreateInfoOHOS-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkOHSurfaceCreateInfoOHOS-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkDestroySurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkDestroySurfaceKHR-surface-01266", + "text": "All VkSwapchainKHR objects created for surface must have been destroyed prior to destroying surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySurfaceKHR-surface-01267", + "text": "If VkAllocationCallbacks were provided when surface was created, a compatible set of callbacks must be provided here", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySurfaceKHR-surface-01268", + "text": "If no VkAllocationCallbacks were provided when surface was created, pAllocator must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySurfaceKHR-surface-parameter", + "text": "If surface is not VK_NULL_HANDLE, surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySurfaceKHR-surface-parent", + "text": "If surface is a valid handle, it must have been created, allocated, or retrieved from instance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceDisplayPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkDisplayPropertiesKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceDisplayProperties2KHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayProperties2KHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayProperties2KHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkDisplayProperties2KHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayProperties2KHR": { + "core": [ + { + "vuid": "VUID-VkDisplayProperties2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayProperties2KHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAcquireXlibDisplayEXT": { + "core": [ + { + "vuid": "VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireXlibDisplayEXT-dpy-parameter", + "text": "dpy must be a valid pointer to a Display value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireXlibDisplayEXT-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireXlibDisplayEXT-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetRandROutputDisplayEXT": { + "core": [ + { + "vuid": "VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetRandROutputDisplayEXT-dpy-parameter", + "text": "dpy must be a valid pointer to a Display value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetRandROutputDisplayEXT-pDisplay-parameter", + "text": "pDisplay must be a valid pointer to a VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAcquireWinrtDisplayNV": { + "core": [ + { + "vuid": "VUID-vkAcquireWinrtDisplayNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireWinrtDisplayNV-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireWinrtDisplayNV-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetWinrtDisplayNV": { + "core": [ + { + "vuid": "VUID-vkGetWinrtDisplayNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetWinrtDisplayNV-pDisplay-parameter", + "text": "pDisplay must be a valid pointer to a VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAcquireDrmDisplayEXT": { + "core": [ + { + "vuid": "VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireDrmDisplayEXT-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireDrmDisplayEXT-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDrmDisplayEXT": { + "core": [ + { + "vuid": "VUID-vkGetDrmDisplayEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDrmDisplayEXT-display-parameter", + "text": "display must be a valid pointer to a VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkReleaseDisplayEXT": { + "core": [ + { + "vuid": "VUID-vkReleaseDisplayEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseDisplayEXT-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseDisplayEXT-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceDisplayPlanePropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkDisplayPlanePropertiesKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceDisplayPlaneProperties2KHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkDisplayPlaneProperties2KHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayPlaneProperties2KHR": { + "core": [ + { + "vuid": "VUID-VkDisplayPlaneProperties2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPlaneProperties2KHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDisplayPlaneSupportedDisplaysKHR": { + "core": [ + { + "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-planeIndex-01249", + "text": "planeIndex must be less than the number of display planes supported by the device as determined by calling vkGetPhysicalDeviceDisplayPlanePropertiesKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-pDisplayCount-parameter", + "text": "pDisplayCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneSupportedDisplaysKHR-pDisplays-parameter", + "text": "If the value referenced by pDisplayCount is not 0, and pDisplays is not NULL, pDisplays must be a valid pointer to an array of pDisplayCount VkDisplayKHR handles", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDisplayModePropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModePropertiesKHR-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModePropertiesKHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModePropertiesKHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkDisplayModePropertiesKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModePropertiesKHR-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDisplayModeProperties2KHR": { + "core": [ + { + "vuid": "VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModeProperties2KHR-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModeProperties2KHR-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModeProperties2KHR-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkDisplayModeProperties2KHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayModeProperties2KHR-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayModeProperties2KHR": { + "core": [ + { + "vuid": "VUID-VkDisplayModeProperties2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeProperties2KHR-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDisplayModeStereoPropertiesNV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeProperties2KHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayModeParametersKHR": { + "core": [ + { + "vuid": "VUID-VkDisplayModeParametersKHR-width-01990", + "text": "The width member of visibleRegion must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeParametersKHR-height-01991", + "text": "The height member of visibleRegion must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeParametersKHR-refreshRate-01992", + "text": "refreshRate must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayModeStereoPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkDisplayModeStereoPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateDisplayModeKHR": { + "core": [ + { + "vuid": "VUID-vkCreateDisplayModeKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayModeKHR-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayModeKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDisplayModeCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayModeKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayModeKHR-pMode-parameter", + "text": "pMode must be a valid pointer to a VkDisplayModeKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayModeKHR-display-parent", + "text": "display must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayModeCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkDisplayModeCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayModeCreateInfoKHR-parameters-parameter", + "text": "parameters must be a valid VkDisplayModeParametersKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDisplayPlaneCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-mode-parameter", + "text": "mode must be a valid VkDisplayModeKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-pCapabilities-parameter", + "text": "pCapabilities must be a valid pointer to a VkDisplayPlaneCapabilitiesKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneCapabilitiesKHR-mode-parent", + "text": "mode must have been created, allocated, or retrieved from physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDisplayPlaneCapabilities2KHR": { + "core": [ + { + "vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-pDisplayPlaneInfo-parameter", + "text": "pDisplayPlaneInfo must be a valid pointer to a valid VkDisplayPlaneInfo2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDisplayPlaneCapabilities2KHR-pCapabilities-parameter", + "text": "pCapabilities must be a valid pointer to a VkDisplayPlaneCapabilities2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayPlaneInfo2KHR": { + "core": [ + { + "vuid": "VUID-VkDisplayPlaneInfo2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPlaneInfo2KHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPlaneInfo2KHR-mode-parameter", + "text": "mode must be a valid VkDisplayModeKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayPlaneCapabilities2KHR": { + "core": [ + { + "vuid": "VUID-VkDisplayPlaneCapabilities2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPlaneCapabilities2KHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkDisplayPowerControlEXT": { + "core": [ + { + "vuid": "VUID-vkDisplayPowerControlEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDisplayPowerControlEXT-display-parameter", + "text": "display must be a valid VkDisplayKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDisplayPowerControlEXT-pDisplayPowerInfo-parameter", + "text": "pDisplayPowerInfo must be a valid pointer to a valid VkDisplayPowerInfoEXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDisplayPowerControlEXT-commonparent", + "text": "Both of device, and display must have been created, allocated, or retrieved from the same VkPhysicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayPowerInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDisplayPowerInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPowerInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPowerInfoEXT-powerState-parameter", + "text": "powerState must be a valid VkDisplayPowerStateEXT value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateDisplayPlaneSurfaceKHR": { + "core": [ + { + "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDisplaySurfaceCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateDisplayPlaneSurfaceKHR-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplaySurfaceCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252", + "text": "planeIndex must be less than the number of display planes supported by the device as determined by calling vkGetPhysicalDeviceDisplayPlanePropertiesKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253", + "text": "If the planeReorderPossible member of the VkDisplayPropertiesKHR structure returned by vkGetPhysicalDeviceDisplayPropertiesKHR for the display corresponding to displayMode is VK_TRUE then planeStackIndex must be less than the number of display planes supported by the device as determined by calling vkGetPhysicalDeviceDisplayPlanePropertiesKHR; otherwise planeStackIndex must equal the currentStackIndex member of VkDisplayPlanePropertiesKHR returned by vkGetPhysicalDeviceDisplayPlanePropertiesKHR for the display plane corresponding to displayMode", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254", + "text": "If alphaMode is VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR then globalAlpha must be between 0 and 1, inclusive", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255", + "text": "alphaMode must be one of the bits present in the supportedAlpha member of VkDisplayPlaneCapabilitiesKHR for the display plane corresponding to displayMode", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-transform-06740", + "text": "transform must be one of the bits present in the supportedTransforms member of VkDisplayPropertiesKHR for the display corresponding to displayMode", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-width-01256", + "text": "The width and height members of imageExtent must be less than or equal to VkPhysicalDeviceLimits::maxImageDimension2D", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-pNext-10284", + "text": "If the pNext chain includes a VkDisplaySurfaceStereoCreateInfoNV structure whose stereoType member is VK_DISPLAY_SURFACE_STEREO_TYPE_HDMI_3D_NV, then the hdmi3DSupported member of the VkDisplayModeStereoPropertiesNV structure in the pNext chain of the VkDisplayModeProperties2KHR structure returned by vkGetDisplayModeProperties2KHR for the display mode corresponding to displayMode must be VK_TRUE", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDisplaySurfaceStereoCreateInfoNV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-displayMode-parameter", + "text": "displayMode must be a valid VkDisplayModeKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-transform-parameter", + "text": "transform must be a valid VkSurfaceTransformFlagBitsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-parameter", + "text": "alphaMode must be a valid VkDisplayPlaneAlphaFlagBitsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplaySurfaceStereoCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkDisplaySurfaceStereoCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplaySurfaceStereoCreateInfoNV-stereoType-parameter", + "text": "stereoType must be a valid VkDisplaySurfaceStereoTypeNV value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateHeadlessSurfaceEXT": { + "core": [ + { + "vuid": "VUID-vkCreateHeadlessSurfaceEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateHeadlessSurfaceEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkHeadlessSurfaceCreateInfoEXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateHeadlessSurfaceEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateHeadlessSurfaceEXT-pSurface-parameter", + "text": "pSurface must be a valid pointer to a VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkHeadlessSurfaceCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkHeadlessSurfaceCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkHeadlessSurfaceCreateInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkHeadlessSurfaceCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfaceSupportKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter", + "text": "surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-pSupported-parameter", + "text": "pSupported must be a valid pointer to a VkBool32 value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceSupportKHR-commonparent", + "text": "Both of physicalDevice, and surface must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceWaylandPresentationSupportKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-display-parameter", + "text": "display must be a valid pointer to a wl_display value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceWin32PresentationSupportKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceXcbPresentationSupportKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-connection-parameter", + "text": "connection must be a valid pointer to an xcb_connection_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceXlibPresentationSupportKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-dpy-parameter", + "text": "dpy must be a valid pointer to a Display value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceDirectFBPresentationSupportEXT": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-queueFamilyIndex-04119", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-dfb-parameter", + "text": "dfb must be a valid pointer to an IDirectFB value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceScreenPresentationSupportQNX": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-queueFamilyIndex-04743", + "text": "queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-window-parameter", + "text": "window must be a valid pointer to a _screen_window value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfaceCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-06211", + "text": "surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-parameter", + "text": "surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-pSurfaceCapabilities-parameter", + "text": "pSurfaceCapabilities must be a valid pointer to a VkSurfaceCapabilitiesKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-commonparent", + "text": "Both of physicalDevice, and surface must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfaceCapabilities2KHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-06521", + "text": "If the VK_GOOGLE_surfaceless_query extension is not enabled, pSurfaceInfo->surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-06522", + "text": "If pSurfaceInfo->surface is not VK_NULL_HANDLE, pSurfaceInfo->surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-02671", + "text": "If a VkSurfaceCapabilitiesFullScreenExclusiveEXT structure is included in the pNext chain of pSurfaceCapabilities, a VkSurfaceFullScreenExclusiveWin32InfoEXT structure must be included in the pNext chain of pSurfaceInfo", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07776", + "text": "If a VkSurfacePresentModeCompatibilityKHR structure is included in the pNext chain of pSurfaceCapabilities, a VkSurfacePresentModeKHR structure must be included in the pNext chain of pSurfaceInfo", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07777", + "text": "If a VkSurfacePresentScalingCapabilitiesKHR structure is included in the pNext chain of pSurfaceCapabilities, a VkSurfacePresentModeKHR structure must be included in the pNext chain of pSurfaceInfo", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07778", + "text": "If a VkSurfacePresentModeCompatibilityKHR structure is included in the pNext chain of pSurfaceCapabilities, pSurfaceInfo->surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-07779", + "text": "If a VkSurfacePresentScalingCapabilitiesKHR structure is included in the pNext chain of pSurfaceCapabilities, pSurfaceInfo->surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-parameter", + "text": "pSurfaceInfo must be a valid pointer to a valid VkPhysicalDeviceSurfaceInfo2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceCapabilities-parameter", + "text": "pSurfaceCapabilities must be a valid pointer to a VkSurfaceCapabilities2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPhysicalDeviceSurfaceInfo2KHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-02672", + "text": "If the pNext chain includes a VkSurfaceFullScreenExclusiveInfoEXT structure with its fullScreenExclusive member set to VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, and surface was created using vkCreateWin32SurfaceKHR, a VkSurfaceFullScreenExclusiveWin32InfoEXT structure must be included in the pNext chain", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-07919", + "text": "If surface is not VK_NULL_HANDLE, and the VK_GOOGLE_surfaceless_query extension is not enabled, surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkSurfaceFullScreenExclusiveInfoEXT, VkSurfaceFullScreenExclusiveWin32InfoEXT, or VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceFullScreenExclusiveInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSurfaceFullScreenExclusiveInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceFullScreenExclusiveInfoEXT-fullScreenExclusive-parameter", + "text": "fullScreenExclusive must be a valid VkFullScreenExclusiveEXT value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceFullScreenExclusiveWin32InfoEXT": { + "core": [ + { + "vuid": "VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-hmonitor-02673", + "text": "hmonitor must be a valid HMONITOR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceCapabilities2KHR": { + "core": [ + { + "vuid": "VUID-VkSurfaceCapabilities2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceCapabilities2KHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDisplayNativeHdrSurfaceCapabilitiesAMD, VkLatencySurfaceCapabilitiesNV, VkSharedPresentSurfaceCapabilitiesKHR, VkSurfaceCapabilitiesFullScreenExclusiveEXT, VkSurfaceCapabilitiesPresentBarrierNV, VkSurfaceCapabilitiesPresentId2KHR, VkSurfaceCapabilitiesPresentWait2KHR, VkSurfacePresentModeCompatibilityKHR, VkSurfacePresentScalingCapabilitiesKHR, or VkSurfaceProtectedCapabilitiesKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceCapabilities2KHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceProtectedCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkSurfaceProtectedCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfacePresentScalingCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkSurfacePresentScalingCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfacePresentScalingCapabilitiesKHR-supportedPresentScaling-parameter", + "text": "supportedPresentScaling must be a valid combination of VkPresentScalingFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfacePresentScalingCapabilitiesKHR-supportedPresentGravityX-parameter", + "text": "supportedPresentGravityX must be a valid combination of VkPresentGravityFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfacePresentScalingCapabilitiesKHR-supportedPresentGravityY-parameter", + "text": "supportedPresentGravityY must be a valid combination of VkPresentGravityFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfacePresentModeKHR": { + "core": [ + { + "vuid": "VUID-VkSurfacePresentModeKHR-presentMode-07780", + "text": "presentMode must be a value reported by vkGetPhysicalDeviceSurfacePresentModesKHR for the specified surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfacePresentModeKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfacePresentModeKHR-presentMode-parameter", + "text": "presentMode must be a valid VkPresentModeKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfacePresentModeCompatibilityKHR": { + "core": [ + { + "vuid": "VUID-VkSurfacePresentModeCompatibilityKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfacePresentModeCompatibilityKHR-pPresentModes-parameter", + "text": "If presentModeCount is not 0, and pPresentModes is not NULL, pPresentModes must be a valid pointer to an array of presentModeCount VkPresentModeKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSharedPresentSurfaceCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkSharedPresentSurfaceCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayNativeHdrSurfaceCapabilitiesAMD": { + "core": [ + { + "vuid": "VUID-VkDisplayNativeHdrSurfaceCapabilitiesAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceCapabilitiesFullScreenExclusiveEXT": { + "core": [ + { + "vuid": "VUID-VkSurfaceCapabilitiesFullScreenExclusiveEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceCapabilitiesPresentBarrierNV": { + "core": [ + { + "vuid": "VUID-VkSurfaceCapabilitiesPresentBarrierNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceCapabilitiesPresentId2KHR": { + "core": [ + { + "vuid": "VUID-VkSurfaceCapabilitiesPresentId2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceCapabilitiesPresentWait2KHR": { + "core": [ + { + "vuid": "VUID-VkSurfaceCapabilitiesPresentWait2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfaceCapabilities2EXT": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-surface-06211", + "text": "surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-surface-parameter", + "text": "surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-pSurfaceCapabilities-parameter", + "text": "pSurfaceCapabilities must be a valid pointer to a VkSurfaceCapabilities2EXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-commonparent", + "text": "Both of physicalDevice, and surface must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceCapabilities2EXT": { + "core": [ + { + "vuid": "VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246", + "text": "supportedSurfaceCounters must not include VK_SURFACE_COUNTER_VBLANK_BIT_EXT unless the surface queried is a display surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceCapabilities2EXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceCapabilities2EXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfaceFormatsKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-06524", + "text": "If the VK_GOOGLE_surfaceless_query extension is not enabled, surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-06525", + "text": "If surface is not VK_NULL_HANDLE, surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-parameter", + "text": "If surface is not VK_NULL_HANDLE, surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormatCount-parameter", + "text": "pSurfaceFormatCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormats-parameter", + "text": "If the value referenced by pSurfaceFormatCount is not 0, and pSurfaceFormats is not NULL, pSurfaceFormats must be a valid pointer to an array of pSurfaceFormatCount VkSurfaceFormatKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-commonparent", + "text": "Both of physicalDevice, and surface that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfaceFormats2KHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-06521", + "text": "If the VK_GOOGLE_surfaceless_query extension is not enabled, pSurfaceInfo->surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-06522", + "text": "If pSurfaceInfo->surface is not VK_NULL_HANDLE, pSurfaceInfo->surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-parameter", + "text": "pSurfaceInfo must be a valid pointer to a valid VkPhysicalDeviceSurfaceInfo2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormatCount-parameter", + "text": "pSurfaceFormatCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormats-parameter", + "text": "If the value referenced by pSurfaceFormatCount is not 0, and pSurfaceFormats is not NULL, pSurfaceFormats must be a valid pointer to an array of pSurfaceFormatCount VkSurfaceFormat2KHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSurfaceFormat2KHR": { + "core": [ + { + "vuid": "VUID-VkSurfaceFormat2KHR-pNext-06750", + "text": "If the VK_EXT_image_compression_control_swapchain extension is not supported, the pNext chain must not include an VkImageCompressionPropertiesEXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceFormat2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceFormat2KHR-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkImageCompressionPropertiesEXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSurfaceFormat2KHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfacePresentModesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-06524", + "text": "If the VK_GOOGLE_surfaceless_query extension is not enabled, surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-06525", + "text": "If surface is not VK_NULL_HANDLE, surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-parameter", + "text": "If surface is not VK_NULL_HANDLE, surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModeCount-parameter", + "text": "pPresentModeCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModes-parameter", + "text": "If the value referenced by pPresentModeCount is not 0, and pPresentModes is not NULL, pPresentModes must be a valid pointer to an array of pPresentModeCount VkPresentModeKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-commonparent", + "text": "Both of physicalDevice, and surface that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDeviceSurfacePresentModes2EXT": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pSurfaceInfo-06521", + "text": "If the VK_GOOGLE_surfaceless_query extension is not enabled, pSurfaceInfo->surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pSurfaceInfo-06522", + "text": "If pSurfaceInfo->surface is not VK_NULL_HANDLE, pSurfaceInfo->surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pSurfaceInfo-parameter", + "text": "pSurfaceInfo must be a valid pointer to a valid VkPhysicalDeviceSurfaceInfo2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pPresentModeCount-parameter", + "text": "pPresentModeCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pPresentModes-parameter", + "text": "If the value referenced by pPresentModeCount is not 0, and pPresentModes is not NULL, pPresentModes must be a valid pointer to an array of pPresentModeCount VkPresentModeKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAcquireFullScreenExclusiveModeEXT": { + "core": [ + { + "vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02674", + "text": "swapchain must not be in the retired state", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02675", + "text": "swapchain must be a swapchain created with a VkSurfaceFullScreenExclusiveInfoEXT structure, with fullScreenExclusive set to VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02676", + "text": "swapchain must not currently have exclusive full-screen access", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkReleaseFullScreenExclusiveModeEXT": { + "core": [ + { + "vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02677", + "text": "swapchain must not be in the retired state", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02678", + "text": "swapchain must be a swapchain created with a VkSurfaceFullScreenExclusiveInfoEXT structure, with fullScreenExclusive set to VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDeviceGroupPresentCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupPresentCapabilitiesKHR-pDeviceGroupPresentCapabilities-parameter", + "text": "pDeviceGroupPresentCapabilities must be a valid pointer to a VkDeviceGroupPresentCapabilitiesKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDeviceGroupPresentCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupPresentCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentCapabilitiesKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDeviceGroupSurfacePresentModesKHR": { + "core": [ + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-06212", + "text": "surface must be supported by all physical devices associated with device, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-parameter", + "text": "surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-pModes-parameter", + "text": "pModes must be a valid pointer to a VkDeviceGroupPresentModeFlagsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModesKHR-commonparent", + "text": "Both of device, and surface must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetDeviceGroupSurfacePresentModes2EXT": { + "core": [ + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-06213", + "text": "pSurfaceInfo->surface must be supported by all physical devices associated with device, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-parameter", + "text": "pSurfaceInfo must be a valid pointer to a valid VkPhysicalDeviceSurfaceInfo2KHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pModes-parameter", + "text": "pModes must be a valid pointer to a VkDeviceGroupPresentModeFlagsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPhysicalDevicePresentRectanglesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-surface-06211", + "text": "surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-surface-parameter", + "text": "surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRectCount-parameter", + "text": "pRectCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRects-parameter", + "text": "If the value referenced by pRectCount is not 0, and pRects is not NULL, pRects must be a valid pointer to an array of pRectCount VkRect2D structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPhysicalDevicePresentRectanglesKHR-commonparent", + "text": "Both of physicalDevice, and surface must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetRefreshCycleDurationGOOGLE": { + "core": [ + { + "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-pDisplayTimingProperties-parameter", + "text": "pDisplayTimingProperties must be a valid pointer to a VkRefreshCycleDurationGOOGLE structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetRefreshCycleDurationGOOGLE-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetPastPresentationTimingGOOGLE": { + "core": [ + { + "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimingCount-parameter", + "text": "pPresentationTimingCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimings-parameter", + "text": "If the value referenced by pPresentationTimingCount is not 0, and pPresentationTimings is not NULL, pPresentationTimings must be a valid pointer to an array of pPresentationTimingCount VkPastPresentationTimingGOOGLE structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetPastPresentationTimingGOOGLE-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentWait2InfoKHR": { + "core": [ + { + "vuid": "VUID-VkPresentWait2InfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentWait2InfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetSwapchainStatusKHR": { + "core": [ + { + "vuid": "VUID-vkGetSwapchainStatusKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainStatusKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainStatusKHR-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateSwapchainKHR": { + "core": [ + { + "vuid": "VUID-vkCreateSwapchainKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSwapchainKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkSwapchainCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSwapchainKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSwapchainKHR-pSwapchain-parameter", + "text": "pSwapchain must be a valid pointer to a VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSwapchainKHR-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-surface-01270", + "text": "surface must be a surface that is supported by the device as determined using vkGetPhysicalDeviceSurfaceSupportKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01272", + "text": "minImageCount must be less than or equal to the value returned in the maxImageCount member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface if the returned maxImageCount is not zero", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-swapchainMaintenance1-10155", + "text": "If the swapchainMaintenance1 feature is not enabled, then the pNext chain must not include a VkSwapchainPresentModesCreateInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-02839", + "text": "If presentMode is not VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR nor VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, then minImageCount must be greater than or equal to the value returned in the minImageCount member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-minImageCount-01383", + "text": "minImageCount must be 1 if presentMode is either VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-01273", + "text": "imageFormat and imageColorSpace must match the format and colorSpace members, respectively, of one of the VkSurfaceFormatKHR structures returned by vkGetPhysicalDeviceSurfaceFormatsKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-07781", + "text": "If a VkSwapchainPresentScalingCreateInfoKHR structure was not included in the pNext chain, or it is included and VkSwapchainPresentScalingCreateInfoKHR::scalingBehavior is zero then imageExtent must be between minImageExtent and maxImageExtent, inclusive, where minImageExtent and maxImageExtent are members of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-07782", + "text": "If a VkSwapchainPresentScalingCreateInfoKHR structure was included in the pNext chain and VkSwapchainPresentScalingCreateInfoKHR::scalingBehavior is not zero then imageExtent must be between minScaledImageExtent and maxScaledImageExtent, inclusive, where minScaledImageExtent and maxScaledImageExtent are members of the VkSurfacePresentScalingCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilities2KHR for the surface and presentMode", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-swapchainMaintenance1-10157", + "text": "If the swapchainMaintenance1 feature is not enabled, then flags must not include VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageExtent-01689", + "text": "imageExtent members width and height must both be non-zero", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275", + "text": "imageArrayLayers must be greater than 0 and less than or equal to the maxImageArrayLayers member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-01427", + "text": "If presentMode is VK_PRESENT_MODE_FIFO_LATEST_READY_KHR, VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_KHR or VK_PRESENT_MODE_FIFO_RELAXED_KHR, imageUsage must be a subset of the supported usage flags present in the supportedUsageFlags member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-01384", + "text": "If presentMode is VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, imageUsage must be a subset of the supported usage flags present in the sharedPresentSupportedUsageFlags member of the VkSharedPresentSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilities2KHR for surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277", + "text": "If imageSharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a valid pointer to an array of queueFamilyIndexCount uint32_t values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278", + "text": "If imageSharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01428", + "text": "If imageSharingMode is VK_SHARING_MODE_CONCURRENT, each element of pQueueFamilyIndices must be unique and must be less than pQueueFamilyPropertyCount returned by either vkGetPhysicalDeviceQueueFamilyProperties or vkGetPhysicalDeviceQueueFamilyProperties2 for the physicalDevice that was used to create device", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-preTransform-01279", + "text": "preTransform must be one of the bits present in the supportedTransforms member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280", + "text": "compositeAlpha must be one of the bits present in the supportedCompositeAlpha member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-01281", + "text": "presentMode must be one of the VkPresentModeKHR values returned by vkGetPhysicalDeviceSurfacePresentModesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-presentModeFifoLatestReady-10161", + "text": "If the presentModeFifoLatestReady feature is not enabled, presentMode must not be VK_PRESENT_MODE_FIFO_LATEST_READY_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-physicalDeviceCount-01429", + "text": "If the logical device was created with VkDeviceGroupDeviceCreateInfo::physicalDeviceCount equal to 1, flags must not contain VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01933", + "text": "If oldSwapchain is not VK_NULL_HANDLE, oldSwapchain must be a non-retired swapchain associated with native window referred to by surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-01778", + "text": "The implied image creation parameters of the swapchain must be supported as reported by vkGetPhysicalDeviceImageFormatProperties", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-flags-03168", + "text": "If flags contains VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR then the pNext chain must include a VkImageFormatListCreateInfo structure with a viewFormatCount greater than zero and pViewFormats must have an element equal to imageFormat", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-04099", + "text": "If a VkImageFormatListCreateInfo structure was included in the pNext chain and VkImageFormatListCreateInfo::viewFormatCount is not zero then all of the formats in VkImageFormatListCreateInfo::pViewFormats must be compatible with the format as described in the compatibility table", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-flags-04100", + "text": "If flags does not contain VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR and the pNext chain include a VkImageFormatListCreateInfo structure then VkImageFormatListCreateInfo::viewFormatCount must be 0 or 1", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-flags-03187", + "text": "If flags contains VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR, then VkSurfaceProtectedCapabilitiesKHR::supportsProtected must be VK_TRUE in the VkSurfaceProtectedCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilities2KHR for surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-02679", + "text": "If the pNext chain includes a VkSurfaceFullScreenExclusiveInfoEXT structure with its fullScreenExclusive member set to VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, and surface was created using vkCreateWin32SurfaceKHR, a VkSurfaceFullScreenExclusiveWin32InfoEXT structure must be included in the pNext chain", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-06752", + "text": "If the imageCompressionControlSwapchain feature is not enabled, the pNext chain must not include an VkImageCompressionControlEXT structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceGroupSwapchainCreateInfoKHR, VkImageCompressionControlEXT, VkImageFormatListCreateInfo, VkSurfaceFullScreenExclusiveInfoEXT, VkSurfaceFullScreenExclusiveWin32InfoEXT, VkSwapchainCounterCreateInfoEXT, VkSwapchainDisplayNativeHdrCreateInfoAMD, VkSwapchainLatencyCreateInfoNV, VkSwapchainPresentBarrierCreateInfoNV, VkSwapchainPresentModesCreateInfoKHR, or VkSwapchainPresentScalingCreateInfoKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkSwapchainCreateFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-surface-parameter", + "text": "surface must be a valid VkSurfaceKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageFormat-parameter", + "text": "imageFormat must be a valid VkFormat value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageColorSpace-parameter", + "text": "imageColorSpace must be a valid VkColorSpaceKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-parameter", + "text": "imageUsage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageUsage-requiredbitmask", + "text": "imageUsage must not be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-imageSharingMode-parameter", + "text": "imageSharingMode must be a valid VkSharingMode value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-preTransform-parameter", + "text": "preTransform must be a valid VkSurfaceTransformFlagBitsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-compositeAlpha-parameter", + "text": "compositeAlpha must be a valid VkCompositeAlphaFlagBitsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-presentMode-parameter", + "text": "presentMode must be a valid VkPresentModeKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-oldSwapchain-parameter", + "text": "If oldSwapchain is not VK_NULL_HANDLE, oldSwapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCreateInfoKHR-commonparent", + "text": "Both of oldSwapchain, and surface that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkInstance", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDeviceGroupSwapchainCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupSwapchainCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupSwapchainCreateInfoKHR-modes-parameter", + "text": "modes must be a valid combination of VkDeviceGroupPresentModeFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupSwapchainCreateInfoKHR-modes-requiredbitmask", + "text": "modes must not be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainDisplayNativeHdrCreateInfoAMD": { + "core": [ + { + "vuid": "VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-localDimmingEnable-04449", + "text": "It is only valid to set localDimmingEnable to VK_TRUE if VkDisplayNativeHdrSurfaceCapabilitiesAMD::localDimmingSupport is supported", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkSetLocalDimmingAMD": { + "core": [ + { + "vuid": "VUID-vkSetLocalDimmingAMD-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLocalDimmingAMD-swapChain-parameter", + "text": "swapChain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLocalDimmingAMD-swapChain-parent", + "text": "swapChain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLocalDimmingAMD-localDimmingSupport-04618", + "text": "VkDisplayNativeHdrSurfaceCapabilitiesAMD::localDimmingSupport must be supported", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainCounterCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-01244", + "text": "The bits in surfaceCounters must be supported by VkSwapchainCreateInfoKHR::surface, as reported by vkGetPhysicalDeviceSurfaceCapabilities2EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCounterCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-parameter", + "text": "surfaceCounters must be a valid combination of VkSurfaceCounterFlagBitsEXT values", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetSwapchainCounterEXT": { + "core": [ + { + "vuid": "VUID-vkGetSwapchainCounterEXT-swapchain-01245", + "text": "One or more present commands on swapchain must have been processed by the presentation engine", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainCounterEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainCounterEXT-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainCounterEXT-counter-parameter", + "text": "counter must be a valid VkSurfaceCounterFlagBitsEXT value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainCounterEXT-pCounterValue-parameter", + "text": "pCounterValue must be a valid pointer to a uint64_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainCounterEXT-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainPresentModesCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-None-07762", + "text": "Each entry in pPresentModes must be one of the VkPresentModeKHR values returned by vkGetPhysicalDeviceSurfacePresentModesKHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-presentModeFifoLatestReady-10160", + "text": "If the presentModeFifoLatestReady feature is not enabled, pPresentModes must not contain VK_PRESENT_MODE_FIFO_LATEST_READY_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-pPresentModes-07763", + "text": "The entries in pPresentModes must be a subset of the present modes returned in VkSurfacePresentModeCompatibilityKHR::pPresentModes, given VkSwapchainCreateInfoKHR::presentMode in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-presentMode-07764", + "text": "VkSwapchainCreateInfoKHR::presentMode must be included in pPresentModes", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-pPresentModes-parameter", + "text": "pPresentModes must be a valid pointer to an array of presentModeCount valid VkPresentModeKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModesCreateInfoKHR-presentModeCount-arraylength", + "text": "presentModeCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainPresentScalingCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityX-07765", + "text": "If presentGravityX is 0, presentGravityY must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityX-07766", + "text": "If presentGravityX is not 0, presentGravityY must not be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-scalingBehavior-07767", + "text": "scalingBehavior must not have more than one bit set", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityX-07768", + "text": "presentGravityX must not have more than one bit set", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityY-07769", + "text": "presentGravityY must not have more than one bit set", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-scalingBehavior-07770", + "text": "scalingBehavior must be 0 or a valid scaling method for the surface as returned in VkSurfacePresentScalingCapabilitiesKHR::supportedPresentScaling, given VkSwapchainCreateInfoKHR::presentMode in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-scalingBehavior-07771", + "text": "If the swapchain is created with VkSwapchainPresentModesCreateInfoKHR, scalingBehavior must be 0 or a valid scaling method for the surface as returned in VkSurfacePresentScalingCapabilitiesKHR::supportedPresentScaling, given each present mode in VkSwapchainPresentModesCreateInfoKHR::pPresentModes in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityX-07772", + "text": "presentGravityX must be 0 or a valid x-axis present gravity for the surface as returned in VkSurfacePresentScalingCapabilitiesKHR::supportedPresentGravityX, given VkSwapchainCreateInfoKHR::presentMode in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityX-07773", + "text": "If the swapchain is created with VkSwapchainPresentModesCreateInfoKHR, presentGravityX must be 0 or a valid x-axis present gravity for the surface as returned in VkSurfacePresentScalingCapabilitiesKHR::supportedPresentGravityX, given each present mode in VkSwapchainPresentModesCreateInfoKHR::pPresentModes in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityY-07774", + "text": "presentGravityY must be 0 or a valid y-axis present gravity for the surface as returned in VkSurfacePresentScalingCapabilitiesKHR::supportedPresentGravityY, given VkSwapchainCreateInfoKHR::presentMode in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityY-07775", + "text": "If the swapchain is created with VkSwapchainPresentModesCreateInfoKHR, presentGravityY must be 0 or a valid y-axis present gravity for the surface as returned in VkSurfacePresentScalingCapabilitiesKHR::supportedPresentGravityY, given each present mode in VkSwapchainPresentModesCreateInfoKHR::pPresentModes in VkSurfacePresentModeKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-swapchainMaintenance1-10154", + "text": "If the swapchainMaintenance1 feature is not enabled, then scalingBehavior, presentGravityX, and presentGravityY must be 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-scalingBehavior-parameter", + "text": "scalingBehavior must be a valid combination of VkPresentScalingFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityX-parameter", + "text": "presentGravityX must be a valid combination of VkPresentGravityFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentScalingCreateInfoKHR-presentGravityY-parameter", + "text": "presentGravityY must be a valid combination of VkPresentGravityFlagBitsKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkDestroySwapchainKHR": { + "core": [ + { + "vuid": "VUID-vkDestroySwapchainKHR-swapchain-01282", + "text": "All uses of presentable images acquired from swapchain must have completed execution", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySwapchainKHR-swapchain-01283", + "text": "If VkAllocationCallbacks were provided when swapchain was created, a compatible set of callbacks must be provided here", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySwapchainKHR-swapchain-01284", + "text": "If no VkAllocationCallbacks were provided when swapchain was created, pAllocator must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySwapchainKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySwapchainKHR-swapchain-parameter", + "text": "If swapchain is not VK_NULL_HANDLE, swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySwapchainKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkDestroySwapchainKHR-swapchain-parent", + "text": "If swapchain is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateSharedSwapchainsKHR": { + "core": [ + { + "vuid": "VUID-vkCreateSharedSwapchainsKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSharedSwapchainsKHR-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of swapchainCount valid VkSwapchainCreateInfoKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSharedSwapchainsKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSharedSwapchainsKHR-pSwapchains-parameter", + "text": "pSwapchains must be a valid pointer to an array of swapchainCount VkSwapchainKHR handles", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSharedSwapchainsKHR-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkCreateSharedSwapchainsKHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetSwapchainImagesKHR": { + "core": [ + { + "vuid": "VUID-vkGetSwapchainImagesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainImagesKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainImagesKHR-pSwapchainImageCount-parameter", + "text": "pSwapchainImageCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainImagesKHR-pSwapchainImages-parameter", + "text": "If the value referenced by pSwapchainImageCount is not 0, and pSwapchainImages is not NULL, pSwapchainImages must be a valid pointer to an array of pSwapchainImageCount VkImage handles", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetSwapchainImagesKHR-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAcquireNextImageKHR": { + "core": [ + { + "vuid": "VUID-vkAcquireNextImageKHR-swapchain-01285", + "text": "swapchain must not be in the retired state", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-semaphore-01286", + "text": "If semaphore is not VK_NULL_HANDLE, it must be unsignaled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-semaphore-01779", + "text": "If semaphore is not VK_NULL_HANDLE, it must not have any uncompleted signal or wait operations pending", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-fence-01287", + "text": "If fence is not VK_NULL_HANDLE, fence must be unsignaled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-fence-10066", + "text": "If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-semaphore-01780", + "text": "semaphore and fence must not both be equal to VK_NULL_HANDLE", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-surface-07783", + "text": "If forward progress cannot be guaranteed for the surface used to create the swapchain member of pAcquireInfo, timeout must not be UINT64_MAX", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-semaphore-03265", + "text": "semaphore must have a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-semaphore-parameter", + "text": "If semaphore is not VK_NULL_HANDLE, semaphore must be a valid VkSemaphore handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-fence-parameter", + "text": "If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-pImageIndex-parameter", + "text": "pImageIndex must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-semaphore-parent", + "text": "If semaphore is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImageKHR-fence-parent", + "text": "If fence is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAcquireNextImage2KHR": { + "core": [ + { + "vuid": "VUID-vkAcquireNextImage2KHR-surface-07784", + "text": "If forward progress cannot be guaranteed for the surface used to create swapchain, the timeout member of pAcquireInfo must not be UINT64_MAX", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImage2KHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImage2KHR-pAcquireInfo-parameter", + "text": "pAcquireInfo must be a valid pointer to a valid VkAcquireNextImageInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAcquireNextImage2KHR-pImageIndex-parameter", + "text": "pImageIndex must be a valid pointer to a uint32_t value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkAcquireNextImageInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-swapchain-01675", + "text": "swapchain must not be in the retired state", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01288", + "text": "If semaphore is not VK_NULL_HANDLE, it must be unsignaled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01781", + "text": "If semaphore is not VK_NULL_HANDLE, it must not have any uncompleted signal or wait operations pending", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-fence-01289", + "text": "If fence is not VK_NULL_HANDLE, fence must be unsignaled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-fence-10067", + "text": "If fence is not VK_NULL_HANDLE, fence must not be associated with any other queue command that has not yet completed execution on that queue", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-01782", + "text": "semaphore and fence must not both be equal to VK_NULL_HANDLE", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-deviceMask-01290", + "text": "deviceMask must be a valid device mask", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-deviceMask-01291", + "text": "deviceMask must not be zero", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-03266", + "text": "semaphore must have a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-semaphore-parameter", + "text": "If semaphore is not VK_NULL_HANDLE, semaphore must be a valid VkSemaphore handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-fence-parameter", + "text": "If fence is not VK_NULL_HANDLE, fence must be a valid VkFence handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAcquireNextImageInfoKHR-commonparent", + "text": "Each of fence, semaphore, and swapchain that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkQueuePresentKHR": { + "core": [ + { + "vuid": "VUID-vkQueuePresentKHR-pSwapchains-01292", + "text": "Each element of pSwapchains member of pPresentInfo must be a swapchain that is created for a surface for which presentation is supported from queue as determined using a call to vkGetPhysicalDeviceSurfaceSupportKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-pSwapchains-01293", + "text": "If more than one member of pSwapchains was created from a display surface, all display surfaces referenced that refer to the same display must use the same display mode", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-pSwapchains-10285", + "text": "If more than one member of pSwapchains was created from a display surface, all display surfaces referenced that refer to the same display must use the same stereoType", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-01294", + "text": "When a semaphore wait operation referring to a binary semaphore defined by the elements of the pWaitSemaphores member of pPresentInfo executes on queue, there must be no other queues waiting on the same semaphore", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-03267", + "text": "All elements of the pWaitSemaphores member of pPresentInfo must be created with a VkSemaphoreType of VK_SEMAPHORE_TYPE_BINARY", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-pWaitSemaphores-03268", + "text": "All elements of the pWaitSemaphores member of pPresentInfo must reference a semaphore signal operation that has been submitted for execution and any semaphore signal operations on which it depends must have also been submitted for execution", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueuePresentKHR-pPresentInfo-parameter", + "text": "pPresentInfo must be a valid pointer to a valid VkPresentInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPresentInfoKHR-pSwapchain-09231", + "text": "Elements of pSwapchain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pImageIndices-01430", + "text": "Each element of pImageIndices must be the index of a presentable image acquired from the swapchain specified by the corresponding element of the pSwapchains array, and the presented image subresource must be in the VK_IMAGE_LAYOUT_PRESENT_SRC_KHR or VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout at the time the operation is executed on a VkDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pNext-06235", + "text": "If a VkPresentIdKHR structure is included in the pNext chain, and the presentId feature is not enabled, each presentIds entry in that structure must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-swapchainMaintenance1-10158", + "text": "If the swapchainMaintenance1 feature is not enabled, then the pNext chain must not include a VkSwapchainPresentFenceInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pSwapchains-09199", + "text": "If any element of the pSwapchains array has been created with VkSwapchainPresentModesCreateInfoKHR, all of the elements of this array must be created with VkSwapchainPresentModesCreateInfoKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pNext-09759", + "text": "If the pNext chain of this structure includes a VkFrameBoundaryTensorsARM structure then it must also include a VkFrameBoundaryEXT structure.", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pNext-10821", + "text": "If a VkPresentId2KHR structure is included in the pNext chain, and the presentId2 feature is not enabled, each presentIds entry in that structure must be zero", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-presentId2Supported-10822", + "text": "If a VkPresentId2KHR structure is included and contains non-zero presentIds, presentId2Supported must be VK_TRUE in the VkSurfaceCapabilitiesPresentId2KHR structure returned by vkGetPhysicalDeviceSurfaceCapabilities2KHR for the surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceGroupPresentInfoKHR, VkDisplayPresentInfoKHR, VkFrameBoundaryEXT, VkFrameBoundaryTensorsARM, VkPresentFrameTokenGGP, VkPresentId2KHR, VkPresentIdKHR, VkPresentRegionsKHR, VkPresentTimesInfoGOOGLE, VkSetPresentConfigNV, VkSwapchainPresentFenceInfoKHR, or VkSwapchainPresentModeInfoKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pWaitSemaphores-parameter", + "text": "If waitSemaphoreCount is not 0, pWaitSemaphores must be a valid pointer to an array of waitSemaphoreCount valid VkSemaphore handles", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pSwapchains-parameter", + "text": "pSwapchains must be a valid pointer to an array of swapchainCount valid VkSwapchainKHR handles", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pImageIndices-parameter", + "text": "pImageIndices must be a valid pointer to an array of swapchainCount uint32_t values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-pResults-parameter", + "text": "If pResults is not NULL, pResults must be a valid pointer to an array of swapchainCount VkResult values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentInfoKHR-commonparent", + "text": "Both of the elements of pSwapchains, and the elements of pWaitSemaphores that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentRegionsKHR": { + "core": [ + { + "vuid": "VUID-VkPresentRegionsKHR-swapchainCount-01260", + "text": "swapchainCount must be the same value as VkPresentInfoKHR::swapchainCount, where VkPresentInfoKHR is included in the pNext chain of this VkPresentRegionsKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentRegionsKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentRegionsKHR-pRegions-parameter", + "text": "If pRegions is not NULL, pRegions must be a valid pointer to an array of swapchainCount valid VkPresentRegionKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentRegionsKHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentRegionKHR": { + "core": [ + { + "vuid": "VUID-VkPresentRegionKHR-pRectangles-parameter", + "text": "If rectangleCount is not 0, and pRectangles is not NULL, pRectangles must be a valid pointer to an array of rectangleCount valid VkRectLayerKHR structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkRectLayerKHR": { + "core": [ + { + "vuid": "VUID-VkRectLayerKHR-offset-04864", + "text": "The sum of offset and extent, after being transformed according to the preTransform member of the VkSwapchainCreateInfoKHR structure, must be no greater than the imageExtent member of the VkSwapchainCreateInfoKHR structure passed to vkCreateSwapchainKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkRectLayerKHR-layer-01262", + "text": "layer must be less than the imageArrayLayers member of the VkSwapchainCreateInfoKHR structure passed to vkCreateSwapchainKHR", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDisplayPresentInfoKHR": { + "core": [ + { + "vuid": "VUID-VkDisplayPresentInfoKHR-srcRect-01257", + "text": "srcRect must specify a rectangular region that is a subset of the image being presented", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPresentInfoKHR-dstRect-01258", + "text": "dstRect must specify a rectangular region that is a subset of the visibleRegion parameter of the display mode the swapchain being presented uses", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPresentInfoKHR-persistentContent-01259", + "text": "If the persistentContent member of the VkDisplayPropertiesKHR structure returned by vkGetPhysicalDeviceDisplayPropertiesKHR for the display the present operation targets is VK_FALSE, then persistent must be VK_FALSE", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDisplayPresentInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkDeviceGroupPresentInfoKHR": { + "core": [ + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-swapchainCount-01297", + "text": "swapchainCount must equal 0 or VkPresentInfoKHR::swapchainCount", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01298", + "text": "If mode is VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR, then each element of pDeviceMasks must have exactly one bit set, and the corresponding element of VkDeviceGroupPresentCapabilitiesKHR::presentMask must be non-zero", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01299", + "text": "If mode is VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR, then each element of pDeviceMasks must have exactly one bit set, and some physical device in the logical device must include that bit in its VkDeviceGroupPresentCapabilitiesKHR::presentMask", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01300", + "text": "If mode is VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR, then each element of pDeviceMasks must have a value for which all set bits are set in one of the elements of VkDeviceGroupPresentCapabilitiesKHR::presentMask", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01301", + "text": "If mode is VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR, then for each bit set in each element of pDeviceMasks, the corresponding element of VkDeviceGroupPresentCapabilitiesKHR::presentMask must be non-zero", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-01302", + "text": "The value of each element of pDeviceMasks must be equal to the device mask passed in VkAcquireNextImageInfoKHR::deviceMask when the image index was last acquired", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-01303", + "text": "mode must have exactly one bit set, and that bit must have been included in VkDeviceGroupSwapchainCreateInfoKHR::modes", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-parameter", + "text": "If swapchainCount is not 0, pDeviceMasks must be a valid pointer to an array of swapchainCount uint32_t values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkDeviceGroupPresentInfoKHR-mode-parameter", + "text": "mode must be a valid VkDeviceGroupPresentModeFlagBitsKHR value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentTimesInfoGOOGLE": { + "core": [ + { + "vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247", + "text": "swapchainCount must be the same value as VkPresentInfoKHR::swapchainCount, where VkPresentInfoKHR is included in the pNext chain of this VkPresentTimesInfoGOOGLE structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentTimesInfoGOOGLE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentTimesInfoGOOGLE-pTimes-parameter", + "text": "If pTimes is not NULL, pTimes must be a valid pointer to an array of swapchainCount VkPresentTimeGOOGLE structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentTimesInfoGOOGLE-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentIdKHR": { + "core": [ + { + "vuid": "VUID-VkPresentIdKHR-swapchainCount-04998", + "text": "swapchainCount must be the same value as VkPresentInfoKHR::swapchainCount, where this VkPresentIdKHR is in the pNext chain of the VkPresentInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentIdKHR-presentIds-04999", + "text": "Each presentIds entry must be greater than any previous presentIds entry passed for the associated pSwapchains entry", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentIdKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_ID_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentIdKHR-pPresentIds-parameter", + "text": "If pPresentIds is not NULL, pPresentIds must be a valid pointer to an array of swapchainCount uint64_t values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentIdKHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkWaitForPresentKHR": { + "core": [ + { + "vuid": "VUID-vkWaitForPresentKHR-swapchain-04997", + "text": "swapchain must not be in the retired state", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresentKHR-presentWait-06234", + "text": "The presentWait feature must be enabled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresentKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresentKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresentKHR-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentId2KHR": { + "core": [ + { + "vuid": "VUID-VkPresentId2KHR-swapchainCount-10818", + "text": "swapchainCount must be the same value as VkPresentInfoKHR::swapchainCount, where this VkPresentId2KHR is in the pNext chain of the VkPresentInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentId2KHR-presentIds-10819", + "text": "Each presentIds entry must be greater than any previous presentIds entry passed for the associated pSwapchains entry", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentId2KHR-None-10820", + "text": "The swapchain must have been created with VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR bit set in the VkSwapchainCreateFlagBitsKHR field", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentId2KHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentId2KHR-pPresentIds-parameter", + "text": "If pPresentIds is not NULL, pPresentIds must be a valid pointer to an array of swapchainCount uint64_t values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentId2KHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkWaitForPresent2KHR": { + "core": [ + { + "vuid": "VUID-vkWaitForPresent2KHR-presentWait2-10814", + "text": "The presentWait2 feature must be enabled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-None-10815", + "text": "The VkSurfaceCapabilitiesPresentWait2KHR surface capability must be present for the underlying surface", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-None-10816", + "text": "The swapchain must have been created with VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR bit set in the VkSwapchainCreateFlagBitsKHR field", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-presentId-10817", + "text": "The presentId value must have been associated with a vkQueuePresentKHR request on the swapchain which returned a non-error value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-pPresentWait2Info-parameter", + "text": "pPresentWait2Info must be a valid pointer to a valid VkPresentWait2InfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkWaitForPresent2KHR-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkPresentFrameTokenGGP": { + "core": [ + { + "vuid": "VUID-VkPresentFrameTokenGGP-frameToken-02680", + "text": "frameToken must be a valid GgpFrameToken", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkPresentFrameTokenGGP-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainPresentModeInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSwapchainPresentModeInfoKHR-swapchainCount-07760", + "text": "swapchainCount must be equal to VkPresentInfoKHR::swapchainCount", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModeInfoKHR-pPresentModes-07761", + "text": "Each entry in pPresentModes must be a presentation mode specified in VkSwapchainPresentModesCreateInfoKHR::pPresentModes when creating the entry’s corresponding swapchain", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModeInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModeInfoKHR-pPresentModes-parameter", + "text": "pPresentModes must be a valid pointer to an array of swapchainCount valid VkPresentModeKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentModeInfoKHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainPresentFenceInfoKHR": { + "core": [ + { + "vuid": "VUID-VkSwapchainPresentFenceInfoKHR-swapchainCount-07757", + "text": "swapchainCount must be equal to VkPresentInfoKHR::swapchainCount", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentFenceInfoKHR-pFences-07758", + "text": "Each element of pFences that is not VK_NULL_HANDLE must be unsignaled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentFenceInfoKHR-pFences-07759", + "text": "Each element of pFences that is not VK_NULL_HANDLE must not be associated with any other queue command that has not yet completed execution on that queue", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentFenceInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentFenceInfoKHR-pFences-parameter", + "text": "pFences must be a valid pointer to an array of swapchainCount valid or VK_NULL_HANDLE VkFence handles", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSwapchainPresentFenceInfoKHR-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkReleaseSwapchainImagesKHR": { + "core": [ + { + "vuid": "VUID-vkReleaseSwapchainImagesKHR-swapchainMaintenance1-10159", + "text": "Feature swapchainMaintenance1 must be enabled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseSwapchainImagesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkReleaseSwapchainImagesKHR-pReleaseInfo-parameter", + "text": "pReleaseInfo must be a valid pointer to a valid VkReleaseSwapchainImagesInfoKHR structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkReleaseSwapchainImagesInfoKHR": { + "core": [ + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-pImageIndices-07785", + "text": "Each element of pImageIndices must be the index of a presentable image acquired from the swapchain specified by swapchain", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-pImageIndices-07786", + "text": "All uses of presentable images identified by elements of pImageIndices must have completed execution", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-pImageIndices-parameter", + "text": "pImageIndices must be a valid pointer to an array of imageIndexCount uint32_t values", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkReleaseSwapchainImagesInfoKHR-imageIndexCount-arraylength", + "text": "imageIndexCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkSetHdrMetadataEXT": { + "core": [ + { + "vuid": "VUID-vkSetHdrMetadataEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetHdrMetadataEXT-pSwapchains-parameter", + "text": "pSwapchains must be a valid pointer to an array of swapchainCount valid VkSwapchainKHR handles", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetHdrMetadataEXT-pMetadata-parameter", + "text": "pMetadata must be a valid pointer to an array of swapchainCount valid VkHdrMetadataEXT structures", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetHdrMetadataEXT-swapchainCount-arraylength", + "text": "swapchainCount must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetHdrMetadataEXT-pSwapchains-parent", + "text": "Each element of pSwapchains must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkHdrMetadataEXT": { + "core": [ + { + "vuid": "VUID-VkHdrMetadataEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_HDR_METADATA_EXT", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkHdrMetadataEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkHdrVividDynamicMetadataHUAWEI", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkHdrMetadataEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkHdrVividDynamicMetadataHUAWEI": { + "core": [ + { + "vuid": "VUID-VkHdrVividDynamicMetadataHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkHdrVividDynamicMetadataHUAWEI-pDynamicMetadata-parameter", + "text": "pDynamicMetadata must be a valid pointer to an array of dynamicMetadataSize bytes", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkHdrVividDynamicMetadataHUAWEI-dynamicMetadataSize-arraylength", + "text": "dynamicMetadataSize must be greater than 0", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkAntiLagUpdateAMD": { + "core": [ + { + "vuid": "VUID-vkAntiLagUpdateAMD-antiLag-10061", + "text": "The antiLag feature must be enabled", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAntiLagUpdateAMD-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkAntiLagUpdateAMD-pData-parameter", + "text": "pData must be a valid pointer to a valid VkAntiLagDataAMD structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkAntiLagDataAMD": { + "core": [ + { + "vuid": "VUID-VkAntiLagDataAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAntiLagDataAMD-mode-parameter", + "text": "mode must be a valid VkAntiLagModeAMD value", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAntiLagDataAMD-pPresentationInfo-parameter", + "text": "If pPresentationInfo is not NULL, pPresentationInfo must be a valid pointer to a valid VkAntiLagPresentationInfoAMD structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkAntiLagPresentationInfoAMD": { + "core": [ + { + "vuid": "VUID-VkAntiLagPresentationInfoAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkAntiLagPresentationInfoAMD-stage-parameter", + "text": "stage must be a valid VkAntiLagStageAMD value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkSetLatencySleepModeNV": { + "core": [ + { + "vuid": "VUID-vkSetLatencySleepModeNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLatencySleepModeNV-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLatencySleepModeNV-pSleepModeInfo-parameter", + "text": "pSleepModeInfo must be a valid pointer to a valid VkLatencySleepModeInfoNV structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLatencySleepModeNV-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkLatencySleepModeInfoNV": { + "core": [ + { + "vuid": "VUID-VkLatencySleepModeInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_LATENCY_SLEEP_MODE_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkLatencySleepNV": { + "core": [ + { + "vuid": "VUID-vkLatencySleepNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkLatencySleepNV-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkLatencySleepNV-pSleepInfo-parameter", + "text": "pSleepInfo must be a valid pointer to a valid VkLatencySleepInfoNV structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkLatencySleepNV-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkLatencySleepInfoNV": { + "core": [ + { + "vuid": "VUID-VkLatencySleepInfoNV-signalSemaphore-09361", + "text": "signalSemaphore must be a timeline semaphore", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkLatencySleepInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_LATENCY_SLEEP_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkLatencySleepInfoNV-signalSemaphore-parameter", + "text": "signalSemaphore must be a valid VkSemaphore handle", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkSetLatencyMarkerNV": { + "core": [ + { + "vuid": "VUID-vkSetLatencyMarkerNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLatencyMarkerNV-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLatencyMarkerNV-pLatencyMarkerInfo-parameter", + "text": "pLatencyMarkerInfo must be a valid pointer to a valid VkSetLatencyMarkerInfoNV structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkSetLatencyMarkerNV-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSetLatencyMarkerInfoNV": { + "core": [ + { + "vuid": "VUID-VkSetLatencyMarkerInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SET_LATENCY_MARKER_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSetLatencyMarkerInfoNV-marker-parameter", + "text": "marker must be a valid VkLatencyMarkerNV value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkGetLatencyTimingsNV": { + "core": [ + { + "vuid": "VUID-vkGetLatencyTimingsNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetLatencyTimingsNV-swapchain-parameter", + "text": "swapchain must be a valid VkSwapchainKHR handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetLatencyTimingsNV-pLatencyMarkerInfo-parameter", + "text": "pLatencyMarkerInfo must be a valid pointer to a VkGetLatencyMarkerInfoNV structure", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkGetLatencyTimingsNV-swapchain-parent", + "text": "swapchain must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkGetLatencyMarkerInfoNV": { + "core": [ + { + "vuid": "VUID-VkGetLatencyMarkerInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_GET_LATENCY_MARKER_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkGetLatencyMarkerInfoNV-pTimings-parameter", + "text": "If timingCount is not 0, and pTimings is not NULL, pTimings must be a valid pointer to an array of timingCount VkLatencyTimingsFrameReportNV structures", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkLatencyTimingsFrameReportNV": { + "core": [ + { + "vuid": "VUID-VkLatencyTimingsFrameReportNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_LATENCY_TIMINGS_FRAME_REPORT_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkLatencySubmissionPresentIdNV": { + "core": [ + { + "vuid": "VUID-VkLatencySubmissionPresentIdNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkQueueNotifyOutOfBandNV": { + "core": [ + { + "vuid": "VUID-vkQueueNotifyOutOfBandNV-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-vkQueueNotifyOutOfBandNV-pQueueTypeInfo-parameter", + "text": "pQueueTypeInfo must be a valid pointer to a valid VkOutOfBandQueueTypeInfoNV structure", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkOutOfBandQueueTypeInfoNV": { + "core": [ + { + "vuid": "VUID-VkOutOfBandQueueTypeInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OUT_OF_BAND_QUEUE_TYPE_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkOutOfBandQueueTypeInfoNV-queueType-parameter", + "text": "queueType must be a valid VkOutOfBandQueueTypeNV value", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainLatencyCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkSwapchainLatencyCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkLatencySurfaceCapabilitiesNV": { + "core": [ + { + "vuid": "VUID-VkLatencySurfaceCapabilitiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_LATENCY_SURFACE_CAPABILITIES_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkLatencySurfaceCapabilitiesNV-pPresentModes-parameter", + "text": "If presentModeCount is not 0, and pPresentModes is not NULL, pPresentModes must be a valid pointer to an array of presentModeCount VkPresentModeKHR values", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSwapchainPresentBarrierCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkSwapchainPresentBarrierCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "VkSetPresentConfigNV": { + "core": [ + { + "vuid": "VUID-VkSetPresentConfigNV-numFramesPerBatch-10581", + "text": "numFramesPerBatch must not be larger than 8", + "page": "chapters/VK_KHR_surface/wsi.html" + }, + { + "vuid": "VUID-VkSetPresentConfigNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV", + "page": "chapters/VK_KHR_surface/wsi.html" + } + ] + }, + "vkCreateDeferredOperationKHR": { + "core": [ + { + "vuid": "VUID-vkCreateDeferredOperationKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkCreateDeferredOperationKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkCreateDeferredOperationKHR-pDeferredOperation-parameter", + "text": "pDeferredOperation must be a valid pointer to a VkDeferredOperationKHR handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkCreateDeferredOperationKHR-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + } + ] + }, + "vkDeferredOperationJoinKHR": { + "core": [ + { + "vuid": "VUID-vkDeferredOperationJoinKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDeferredOperationJoinKHR-operation-parameter", + "text": "operation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDeferredOperationJoinKHR-operation-parent", + "text": "operation must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + } + ] + }, + "vkDestroyDeferredOperationKHR": { + "core": [ + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-operation-03434", + "text": "If VkAllocationCallbacks were provided when operation was created, a compatible set of callbacks must be provided here", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-operation-03435", + "text": "If no VkAllocationCallbacks were provided when operation was created, pAllocator must be NULL", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-operation-03436", + "text": "operation must be completed", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-operation-parameter", + "text": "If operation is not VK_NULL_HANDLE, operation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkDestroyDeferredOperationKHR-operation-parent", + "text": "If operation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + } + ] + }, + "vkGetDeferredOperationMaxConcurrencyKHR": { + "core": [ + { + "vuid": "VUID-vkGetDeferredOperationMaxConcurrencyKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkGetDeferredOperationMaxConcurrencyKHR-operation-parameter", + "text": "operation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkGetDeferredOperationMaxConcurrencyKHR-operation-parent", + "text": "operation must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + } + ] + }, + "vkGetDeferredOperationResultKHR": { + "core": [ + { + "vuid": "VUID-vkGetDeferredOperationResultKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkGetDeferredOperationResultKHR-operation-parameter", + "text": "operation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + }, + { + "vuid": "VUID-vkGetDeferredOperationResultKHR-operation-parent", + "text": "operation must have been created, allocated, or retrieved from device", + "page": "chapters/VK_KHR_deferred_host_operations/deferred_host_operations.html" + } + ] + }, + "vkCreatePrivateDataSlot": { + "core": [ + { + "vuid": "VUID-vkCreatePrivateDataSlot-privateData-04564", + "text": "The privateData feature must be enabled", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkCreatePrivateDataSlot-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkCreatePrivateDataSlot-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkPrivateDataSlotCreateInfo structure", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkCreatePrivateDataSlot-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkCreatePrivateDataSlot-pPrivateDataSlot-parameter", + "text": "pPrivateDataSlot must be a valid pointer to a VkPrivateDataSlot handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkCreatePrivateDataSlot-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_EXT_private_data.html" + } + ] + }, + "VkPrivateDataSlotCreateInfo": { + "core": [ + { + "vuid": "VUID-VkPrivateDataSlotCreateInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-VkPrivateDataSlotCreateInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-VkPrivateDataSlotCreateInfo-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_EXT_private_data.html" + } + ] + }, + "vkDestroyPrivateDataSlot": { + "core": [ + { + "vuid": "VUID-vkDestroyPrivateDataSlot-privateDataSlot-04062", + "text": "If VkAllocationCallbacks were provided when privateDataSlot was created, a compatible set of callbacks must be provided here", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkDestroyPrivateDataSlot-privateDataSlot-04063", + "text": "If no VkAllocationCallbacks were provided when privateDataSlot was created, pAllocator must be NULL", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkDestroyPrivateDataSlot-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkDestroyPrivateDataSlot-privateDataSlot-parameter", + "text": "If privateDataSlot is not VK_NULL_HANDLE, privateDataSlot must be a valid VkPrivateDataSlot handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkDestroyPrivateDataSlot-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkDestroyPrivateDataSlot-privateDataSlot-parent", + "text": "If privateDataSlot is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_private_data.html" + } + ] + }, + "vkSetPrivateData": { + "core": [ + { + "vuid": "VUID-vkSetPrivateData-objectHandle-04016", + "text": "objectHandle must be device or a child of device", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkSetPrivateData-objectHandle-04017", + "text": "objectHandle must be a valid handle to an object of type objectType", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkSetPrivateData-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkSetPrivateData-objectType-parameter", + "text": "objectType must be a valid VkObjectType value", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkSetPrivateData-privateDataSlot-parameter", + "text": "privateDataSlot must be a valid VkPrivateDataSlot handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkSetPrivateData-privateDataSlot-parent", + "text": "privateDataSlot must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_private_data.html" + } + ] + }, + "vkGetPrivateData": { + "core": [ + { + "vuid": "VUID-vkGetPrivateData-objectType-04018", + "text": "objectHandle must be device or a child of device", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkGetPrivateData-objectHandle-09498", + "text": "objectHandle must be a valid handle to an object of type objectType", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkGetPrivateData-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkGetPrivateData-objectType-parameter", + "text": "objectType must be a valid VkObjectType value", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkGetPrivateData-privateDataSlot-parameter", + "text": "privateDataSlot must be a valid VkPrivateDataSlot handle", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkGetPrivateData-pData-parameter", + "text": "pData must be a valid pointer to a uint64_t value", + "page": "chapters/VK_EXT_private_data.html" + }, + { + "vuid": "VUID-vkGetPrivateData-privateDataSlot-parent", + "text": "privateDataSlot must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_private_data.html" + } + ] + }, + "vkCmdBuildAccelerationStructureNV": { + "core": [ + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-geometryCount-02241", + "text": "geometryCount must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxGeometryCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-dst-02488", + "text": "dst must have been created with compatible VkAccelerationStructureInfoNV where VkAccelerationStructureInfoNV::type and VkAccelerationStructureInfoNV::flags are identical, VkAccelerationStructureInfoNV::instanceCount and VkAccelerationStructureInfoNV::geometryCount for dst are greater than or equal to the build size and each geometry in VkAccelerationStructureInfoNV::pGeometries for dst has greater than or equal to the number of vertices, indices, and AABBs", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02489", + "text": "If update is VK_TRUE, src must not be VK_NULL_HANDLE", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02490", + "text": "If update is VK_TRUE, src must have previously been constructed with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV set in VkAccelerationStructureInfoNV::flags in the original build", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02491", + "text": "If update is VK_FALSE, the size member of the VkMemoryRequirements structure returned from a call to vkGetAccelerationStructureMemoryRequirementsNV with VkAccelerationStructureMemoryRequirementsInfoNV::accelerationStructure set to dst and VkAccelerationStructureMemoryRequirementsInfoNV::type set to VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV must be less than or equal to the size of scratch minus scratchOffset", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-02492", + "text": "If update is VK_TRUE, the size member of the VkMemoryRequirements structure returned from a call to vkGetAccelerationStructureMemoryRequirementsNV with VkAccelerationStructureMemoryRequirementsInfoNV::accelerationStructure set to dst and VkAccelerationStructureMemoryRequirementsInfoNV::type set to VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV must be less than or equal to the size of scratch minus scratchOffset", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-scratch-03522", + "text": "scratch must have been created with VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-instanceData-03523", + "text": "If instanceData is not VK_NULL_HANDLE, instanceData must have been created with VK_BUFFER_USAGE_RAY_TRACING_BIT_NV usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-accelerationStructureReference-03786", + "text": "Each VkAccelerationStructureInstanceKHR::accelerationStructureReference value in instanceData must be a valid device address containing a value obtained from vkGetAccelerationStructureHandleNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-03524", + "text": "If update is VK_TRUE, then objects that were previously active must not be made inactive as per Inactive Primitives and Instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-03525", + "text": "If update is VK_TRUE, then objects that were previously inactive must not be made active as per Inactive Primitives and Instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-update-03526", + "text": "If update is VK_TRUE, the src and dst objects must either be the same object or not have any memory aliasing", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-dst-07787", + "text": "dst must be bound completely and contiguously to a single VkDeviceMemory object via vkBindAccelerationStructureMemoryNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkAccelerationStructureInfoNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-instanceData-parameter", + "text": "If instanceData is not VK_NULL_HANDLE, instanceData must be a valid VkBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-dst-parameter", + "text": "dst must be a valid VkAccelerationStructureNV handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-src-parameter", + "text": "If src is not VK_NULL_HANDLE, src must be a valid VkAccelerationStructureNV handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-scratch-parameter", + "text": "scratch must be a valid VkBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructureNV-commonparent", + "text": "Each of commandBuffer, dst, instanceData, scratch, and src that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdBuildAccelerationStructuresKHR": { + "core": [ + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-accelerationStructure-08923", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-mode-04628", + "text": "The mode member of each element of pInfos must be a valid VkBuildAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-srcAccelerationStructure-04629", + "text": "If the srcAccelerationStructure member of any element of pInfos is not VK_NULL_HANDLE, the srcAccelerationStructure member must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-04630", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure member must not be VK_NULL_HANDLE", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03403", + "text": "The srcAccelerationStructure member of any element of pInfos must not be the same acceleration structure as the dstAccelerationStructure member of any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03698", + "text": "The dstAccelerationStructure member of any element of pInfos must not be the same acceleration structure as the dstAccelerationStructure member of any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03800", + "text": "The dstAccelerationStructure member of any element of pInfos must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03699", + "text": "For each element of pInfos, if its type member is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its dstAccelerationStructure member must have been created with a value of VkAccelerationStructureCreateInfoKHR::type equal to either VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03700", + "text": "For each element of pInfos, if its type member is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its dstAccelerationStructure member must have been created with a value of VkAccelerationStructureCreateInfoKHR::type equal to either VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03663", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, inactive primitives in its srcAccelerationStructure member must not be made active", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03664", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives in its srcAccelerationStructure member must not be made inactive", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-None-03407", + "text": "The dstAccelerationStructure member of any element of pInfos must not be referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03701", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the srcAccelerationStructure member of any other element of pInfos with a mode equal to VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03702", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the dstAccelerationStructure member of any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03703", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any element of pInfos (including the same element), which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-scratchData-03704", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-scratchData-03705", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the srcAccelerationStructure member of any element of pInfos with a mode equal to VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the same element), which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-dstAccelerationStructure-03706", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing any acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03667", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure member must have previously been constructed with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in VkAccelerationStructureBuildGeometryInfoKHR::flags in the build", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03668", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure and dstAccelerationStructure members must either be the same VkAccelerationStructureKHR, or not have any memory aliasing", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03758", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its geometryCount member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03759", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its flags member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03760", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its type member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03761", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, its geometryType member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03762", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, its flags member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03763", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.vertexFormat member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03764", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.maxVertex member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03765", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.indexType member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03766", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles.transformData address was NULL when srcAccelerationStructure was last built, then it must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03767", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles.transformData address was not NULL when srcAccelerationStructure was last built, then it must not be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03768", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, and geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, then the value of each index referenced must be the same as the corresponding index value when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-primitiveCount-03769", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, the primitiveCount member of its corresponding VkAccelerationStructureBuildRangeInfoKHR structure must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03801", + "text": "For each element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, the corresponding ppBuildRangeInfos[i][j].primitiveCount must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxInstanceCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03707", + "text": "For each element of pInfos, the buffer used to create its dstAccelerationStructure member must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03708", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the buffer used to create its srcAccelerationStructure member must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03709", + "text": "For each element of pInfos, the buffer used to create each acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03671", + "text": "If pInfos[i].mode is VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses between pInfos[i].scratchData.deviceAddress and pInfos[i].scratchData.deviceAddress + N - 1 must be in the buffer device address range of the same buffer, where N is given by the buildScratchSize member of the VkAccelerationStructureBuildSizesInfoKHR structure returned from a call to vkGetAccelerationStructureBuildSizesKHR with an identical VkAccelerationStructureBuildGeometryInfoKHR structure and primitive count", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03672", + "text": "If pInfos[i].mode is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses between pInfos[i].scratchData.deviceAddress and pInfos[i].scratchData.deviceAddress + N - 1 must be in the buffer device address range of the same buffer, where N is given by the updateScratchSize member of the VkAccelerationStructureBuildSizesInfoKHR structure returned from a call to vkGetAccelerationStructureBuildSizesKHR with an identical VkAccelerationStructureBuildGeometryInfoKHR structure and primitive count", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-geometry-03673", + "text": "The buffers from which the buffer device addresses for all of the geometry.triangles.vertexData, geometry.triangles.indexData, geometry.triangles.transformData, geometry.aabbs.data, and geometry.instances.data members of all pInfos[i].pGeometries and pInfos[i].ppGeometries are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03674", + "text": "The buffer from which the buffer device address pInfos[i].scratchData.deviceAddress is queried must have been created with VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03802", + "text": "For each element of pInfos, its scratchData.deviceAddress member must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03803", + "text": "For each element of pInfos, if scratchData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03710", + "text": "For each element of pInfos, its scratchData.deviceAddress member must be a multiple of VkPhysicalDeviceAccelerationStructurePropertiesKHR::minAccelerationStructureScratchOffsetAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03804", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, geometry.triangles.vertexData.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03805", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.vertexData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03711", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, geometry.triangles.vertexData.deviceAddress must be aligned to the size in bytes of the smallest component of the format in vertexFormat", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03806", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, geometry.triangles.indexData.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03807", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, if geometry.triangles.indexData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03712", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, and with geometry.triangles.indexType not equal to VK_INDEX_TYPE_NONE_KHR, geometry.triangles.indexData.deviceAddress must be aligned to the size in bytes of the type in indexType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03808", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.deviceAddress is not 0, it must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03809", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03810", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.deviceAddress is not 0, it must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03811", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, geometry.aabbs.data.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03812", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, if geometry.aabbs.data.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03714", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, geometry.aabbs.data.deviceAddress must be aligned to 8 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03715", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.arrayOfPointers is VK_FALSE, geometry.instances.data.deviceAddress must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03716", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.arrayOfPointers is VK_TRUE, geometry.instances.data.deviceAddress must be aligned to 8 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03717", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.arrayOfPointers is VK_TRUE, each element of geometry.instances.data.deviceAddress in device memory must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03813", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, geometry.instances.data.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-03814", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.instances.data.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-06707", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, each VkAccelerationStructureInstanceKHR::accelerationStructureReference value in geometry.instances.data.deviceAddress must be a valid device address containing a value obtained from vkGetAccelerationStructureDeviceAddressKHR or 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-10607", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT is set in VkAccelerationStructureInstanceKHR::flags then geometry.instances.data.deviceAddress must refer to an acceleration structure that was built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT set in VkAccelerationStructureBuildGeometryInfoKHR::flags", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-commandBuffer-09547", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-10126", + "text": "For each pInfos[i], dstAccelerationStructure must have been created with a value of VkAccelerationStructureCreateInfoKHR::size greater than or equal to either:
\n
    \n
  • \n

    the memory size required by the build operation, as returned by\nvkGetAccelerationStructureBuildSizesKHR with\npBuildInfo = pInfos[i] and with each element of the\npMaxPrimitiveCounts array greater than or equal to the equivalent\nppBuildRangeInfos[i][j].primitiveCount values for j in\n[0,pInfos[i].geometryCount) or,

    \n
  • \n
  • \n

    the result of querying the corresponding\nVK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, if\nupdating a compacted acceleration structure

    \n
  • \n
\n
", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-ppBuildRangeInfos-03676", + "text": "Each element of ppBuildRangeInfos[i] must be a valid pointer to an array of pInfos[i].geometryCount VkAccelerationStructureBuildRangeInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-pInfos-parameter", + "text": "pInfos must be a valid pointer to an array of infoCount valid VkAccelerationStructureBuildGeometryInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-ppBuildRangeInfos-parameter", + "text": "ppBuildRangeInfos must be a valid pointer to an array of infoCount VkAccelerationStructureBuildRangeInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresKHR-infoCount-arraylength", + "text": "infoCount must be greater than 0", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdBuildAccelerationStructuresIndirectKHR": { + "core": [ + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-accelerationStructureIndirectBuild-03650", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureIndirectBuild feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-mode-04628", + "text": "The mode member of each element of pInfos must be a valid VkBuildAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-srcAccelerationStructure-04629", + "text": "If the srcAccelerationStructure member of any element of pInfos is not VK_NULL_HANDLE, the srcAccelerationStructure member must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-04630", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure member must not be VK_NULL_HANDLE", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03403", + "text": "The srcAccelerationStructure member of any element of pInfos must not be the same acceleration structure as the dstAccelerationStructure member of any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03698", + "text": "The dstAccelerationStructure member of any element of pInfos must not be the same acceleration structure as the dstAccelerationStructure member of any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03800", + "text": "The dstAccelerationStructure member of any element of pInfos must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03699", + "text": "For each element of pInfos, if its type member is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its dstAccelerationStructure member must have been created with a value of VkAccelerationStructureCreateInfoKHR::type equal to either VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03700", + "text": "For each element of pInfos, if its type member is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its dstAccelerationStructure member must have been created with a value of VkAccelerationStructureCreateInfoKHR::type equal to either VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03663", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, inactive primitives in its srcAccelerationStructure member must not be made active", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03664", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives in its srcAccelerationStructure member must not be made inactive", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-None-03407", + "text": "The dstAccelerationStructure member of any element of pInfos must not be referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03701", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the srcAccelerationStructure member of any other element of pInfos with a mode equal to VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03702", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the dstAccelerationStructure member of any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03703", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any element of pInfos (including the same element), which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-scratchData-03704", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-scratchData-03705", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the srcAccelerationStructure member of any element of pInfos with a mode equal to VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the same element), which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-dstAccelerationStructure-03706", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing any acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03667", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure member must have previously been constructed with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in VkAccelerationStructureBuildGeometryInfoKHR::flags in the build", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03668", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure and dstAccelerationStructure members must either be the same VkAccelerationStructureKHR, or not have any memory aliasing", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03758", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its geometryCount member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03759", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its flags member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03760", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its type member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03761", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, its geometryType member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03762", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, its flags member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03763", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.vertexFormat member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03764", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.maxVertex member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03765", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.indexType member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03766", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles.transformData address was NULL when srcAccelerationStructure was last built, then it must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03767", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles.transformData address was not NULL when srcAccelerationStructure was last built, then it must not be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03768", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, and geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, then the value of each index referenced must be the same as the corresponding index value when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-primitiveCount-03769", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, the primitiveCount member of its corresponding VkAccelerationStructureBuildRangeInfoKHR structure must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03801", + "text": "For each element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, the corresponding ppMaxPrimitiveCounts[i][j] must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxInstanceCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03707", + "text": "For each element of pInfos, the buffer used to create its dstAccelerationStructure member must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03708", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the buffer used to create its srcAccelerationStructure member must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03709", + "text": "For each element of pInfos, the buffer used to create each acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03671", + "text": "If pInfos[i].mode is VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses between pInfos[i].scratchData.deviceAddress and pInfos[i].scratchData.deviceAddress + N - 1 must be in the buffer device address range of the same buffer, where N is given by the buildScratchSize member of the VkAccelerationStructureBuildSizesInfoKHR structure returned from a call to vkGetAccelerationStructureBuildSizesKHR with an identical VkAccelerationStructureBuildGeometryInfoKHR structure and primitive count", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03672", + "text": "If pInfos[i].mode is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses between pInfos[i].scratchData.deviceAddress and pInfos[i].scratchData.deviceAddress + N - 1 must be in the buffer device address range of the same buffer, where N is given by the updateScratchSize member of the VkAccelerationStructureBuildSizesInfoKHR structure returned from a call to vkGetAccelerationStructureBuildSizesKHR with an identical VkAccelerationStructureBuildGeometryInfoKHR structure and primitive count", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-geometry-03673", + "text": "The buffers from which the buffer device addresses for all of the geometry.triangles.vertexData, geometry.triangles.indexData, geometry.triangles.transformData, geometry.aabbs.data, and geometry.instances.data members of all pInfos[i].pGeometries and pInfos[i].ppGeometries are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03674", + "text": "The buffer from which the buffer device address pInfos[i].scratchData.deviceAddress is queried must have been created with VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03802", + "text": "For each element of pInfos, its scratchData.deviceAddress member must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03803", + "text": "For each element of pInfos, if scratchData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03710", + "text": "For each element of pInfos, its scratchData.deviceAddress member must be a multiple of VkPhysicalDeviceAccelerationStructurePropertiesKHR::minAccelerationStructureScratchOffsetAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03804", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, geometry.triangles.vertexData.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03805", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.vertexData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03711", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, geometry.triangles.vertexData.deviceAddress must be aligned to the size in bytes of the smallest component of the format in vertexFormat", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03806", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, geometry.triangles.indexData.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03807", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, if geometry.triangles.indexData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03712", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, and with geometry.triangles.indexType not equal to VK_INDEX_TYPE_NONE_KHR, geometry.triangles.indexData.deviceAddress must be aligned to the size in bytes of the type in indexType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03808", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.deviceAddress is not 0, it must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03809", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03810", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.deviceAddress is not 0, it must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03811", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, geometry.aabbs.data.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03812", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, if geometry.aabbs.data.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03714", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, geometry.aabbs.data.deviceAddress must be aligned to 8 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03715", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.arrayOfPointers is VK_FALSE, geometry.instances.data.deviceAddress must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03716", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.arrayOfPointers is VK_TRUE, geometry.instances.data.deviceAddress must be aligned to 8 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03717", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.arrayOfPointers is VK_TRUE, each element of geometry.instances.data.deviceAddress in device memory must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03813", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, geometry.instances.data.deviceAddress must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03814", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if geometry.instances.data.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-06707", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, each VkAccelerationStructureInstanceKHR::accelerationStructureReference value in geometry.instances.data.deviceAddress must be a valid device address containing a value obtained from vkGetAccelerationStructureDeviceAddressKHR or 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-10607", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, if VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT is set in VkAccelerationStructureInstanceKHR::flags then geometry.instances.data.deviceAddress must refer to an acceleration structure that was built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT set in VkAccelerationStructureBuildGeometryInfoKHR::flags", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-09547", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03645", + "text": "For any element of pIndirectDeviceAddresses, if the buffer from which it was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03646", + "text": "For any element of pIndirectDeviceAddresses[i], all device addresses between pIndirectDeviceAddresses[i] and pIndirectDeviceAddresses[i] + (pInfos[i].geometryCount × pIndirectStrides[i]) - 1 must be in the buffer device address range of the same buffer", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03647", + "text": "For any element of pIndirectDeviceAddresses, the buffer from which it was queried must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03648", + "text": "Each element of pIndirectDeviceAddresses must be a multiple of 4", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-03787", + "text": "Each element of pIndirectStrides must be a multiple of 4", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-03651", + "text": "Each VkAccelerationStructureBuildRangeInfoKHR structure referenced by any element of pIndirectDeviceAddresses must be a valid VkAccelerationStructureBuildRangeInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-03652", + "text": "pInfos[i].dstAccelerationStructure must have been created with a value of VkAccelerationStructureCreateInfoKHR::size greater than or equal to the memory size required by the build operation, as returned by vkGetAccelerationStructureBuildSizesKHR with pBuildInfo = pInfos[i] and pMaxPrimitiveCounts = ppMaxPrimitiveCounts[i]", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-ppMaxPrimitiveCounts-03653", + "text": "Each ppMaxPrimitiveCounts[i][j] must be greater than or equal to the primitiveCount value specified by the VkAccelerationStructureBuildRangeInfoKHR structure located at pIndirectDeviceAddresses[i] + (j × pIndirectStrides[i])", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pInfos-parameter", + "text": "pInfos must be a valid pointer to an array of infoCount valid VkAccelerationStructureBuildGeometryInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectDeviceAddresses-parameter", + "text": "pIndirectDeviceAddresses must be a valid pointer to an array of infoCount VkDeviceAddress values", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-pIndirectStrides-parameter", + "text": "pIndirectStrides must be a valid pointer to an array of infoCount uint32_t values", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-ppMaxPrimitiveCounts-parameter", + "text": "ppMaxPrimitiveCounts must be a valid pointer to an array of infoCount uint32_t values", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildAccelerationStructuresIndirectKHR-infoCount-arraylength", + "text": "infoCount must be greater than 0", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureBuildGeometryInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03654", + "text": "type must not be VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-03788", + "text": "If geometryCount is not 0, exactly one of pGeometries or ppGeometries must be a valid pointer, the other must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03789", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, the geometryType member of elements of either pGeometries or ppGeometries must be VK_GEOMETRY_TYPE_INSTANCES_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03790", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, geometryCount must be 1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03791", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR the geometryType member of elements of either pGeometries or ppGeometries must not be VK_GEOMETRY_TYPE_INSTANCES_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03792", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR then the geometryType member of each geometry in either pGeometries or ppGeometries must be the same", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03793", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR then geometryCount must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxGeometryCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03794", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR and the geometryType member of either pGeometries or ppGeometries is VK_GEOMETRY_TYPE_AABBS_KHR, the total number of AABBs in all geometries must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxPrimitiveCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-03795", + "text": "If type is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR and the geometryType member of either pGeometries or ppGeometries is VK_GEOMETRY_TYPE_TRIANGLES_KHR, the total number of triangles in all geometries must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxPrimitiveCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-03796", + "text": "If flags has the VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR bit set, then it must not have the VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-04927", + "text": "If dstAccelerationStructure was created with VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV set in VkAccelerationStructureCreateInfoKHR::createFlags, VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV must be set in flags", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04928", + "text": "If VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV is set in flags, dstAccelerationStructure must have been created with VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV set in VkAccelerationStructureCreateInfoKHR::createFlags", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-04929", + "text": "If VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV is set in flags, type must not be VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-07334", + "text": "If flags has the VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT bit set then it must not have the VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-parameter", + "text": "type must be a valid VkAccelerationStructureTypeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkBuildAccelerationStructureFlagBitsKHR values", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-pGeometries-parameter", + "text": "If geometryCount is not 0, and pGeometries is not NULL, pGeometries must be a valid pointer to an array of geometryCount valid VkAccelerationStructureGeometryKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-ppGeometries-parameter", + "text": "If geometryCount is not 0, and ppGeometries is not NULL, ppGeometries must be a valid pointer to an array of geometryCount valid pointers to valid VkAccelerationStructureGeometryKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildGeometryInfoKHR-commonparent", + "text": "Both of dstAccelerationStructure, and srcAccelerationStructure that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometryKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAccelerationStructureGeometryLinearSweptSpheresDataNV or VkAccelerationStructureGeometrySpheresDataNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-geometryType-parameter", + "text": "geometryType must be a valid VkGeometryTypeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-triangles-parameter", + "text": "If geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, the triangles member of geometry must be a valid VkAccelerationStructureGeometryTrianglesDataKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-aabbs-parameter", + "text": "If geometryType is VK_GEOMETRY_TYPE_AABBS_KHR, the aabbs member of geometry must be a valid VkAccelerationStructureGeometryAabbsDataKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-instances-parameter", + "text": "If geometryType is VK_GEOMETRY_TYPE_INSTANCES_KHR, the instances member of geometry must be a valid VkAccelerationStructureGeometryInstancesDataKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryKHR-flags-parameter", + "text": "flags must be a valid combination of VkGeometryFlagBitsKHR values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometryTrianglesDataKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03735", + "text": "vertexStride must be a multiple of the size in bytes of the smallest component of vertexFormat", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexStride-03819", + "text": "vertexStride must be less than or equal to 232-1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-03797", + "text": "The format features of vertexFormat must contain VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-03798", + "text": "indexType must be VK_INDEX_TYPE_UINT16, VK_INDEX_TYPE_UINT32, or VK_INDEX_TYPE_NONE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAccelerationStructureGeometryMotionTrianglesDataNV, VkAccelerationStructureTrianglesDisplacementMicromapNV, or VkAccelerationStructureTrianglesOpacityMicromapEXT", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter", + "text": "vertexFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometryMotionTrianglesDataNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometryMotionTrianglesDataNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureTrianglesOpacityMicromapEXT": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-pUsageCounts-07335", + "text": "Only one of pUsageCounts or ppUsageCounts can be a valid pointer, the other must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-indexType-10719", + "text": "indexType must be VK_INDEX_TYPE_UINT16, VK_INDEX_TYPE_UINT32, or VK_INDEX_TYPE_NONE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-indexType-10720", + "text": "If indexType is VK_INDEX_TYPE_NONE_KHR, then indexBuffer must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-indexType-10721", + "text": "If indexType is not VK_INDEX_TYPE_NONE_KHR, then indexBuffer must be a valid device address obtained from vkGetBufferDeviceAddress", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-indexType-10722", + "text": "If indexType is not VK_INDEX_TYPE_NONE_KHR, then indexStride must be a multiple of the size in bytes of indexType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-indexType-10723", + "text": "If indexType is not VK_INDEX_TYPE_NONE_KHR, then indexStride must be less than or equal to 232-1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-pUsageCounts-parameter", + "text": "If usageCountsCount is not 0, and pUsageCounts is not NULL, pUsageCounts must be a valid pointer to an array of usageCountsCount VkMicromapUsageEXT structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-ppUsageCounts-parameter", + "text": "If usageCountsCount is not 0, and ppUsageCounts is not NULL, ppUsageCounts must be a valid pointer to an array of usageCountsCount valid pointers to VkMicromapUsageEXT structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesOpacityMicromapEXT-micromap-parameter", + "text": "If micromap is not VK_NULL_HANDLE, micromap must be a valid VkMicromapEXT handle", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureTrianglesDisplacementMicromapNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-displacementBiasAndScaleFormat-09501", + "text": "displacementBiasAndScaleFormat must not be VK_FORMAT_UNDEFINED", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-displacementVectorFormat-09502", + "text": "displacementVectorFormat must not be VK_FORMAT_UNDEFINED", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-pUsageCounts-07992", + "text": "Only one of pUsageCounts or ppUsageCounts can be a valid pointer, the other must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-displacementBiasAndScaleFormat-parameter", + "text": "displacementBiasAndScaleFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-displacementVectorFormat-parameter", + "text": "displacementVectorFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-pUsageCounts-parameter", + "text": "If usageCountsCount is not 0, and pUsageCounts is not NULL, pUsageCounts must be a valid pointer to an array of usageCountsCount VkMicromapUsageEXT structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-ppUsageCounts-parameter", + "text": "If usageCountsCount is not 0, and ppUsageCounts is not NULL, ppUsageCounts must be a valid pointer to an array of usageCountsCount valid pointers to VkMicromapUsageEXT structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureTrianglesDisplacementMicromapNV-micromap-parameter", + "text": "If micromap is not VK_NULL_HANDLE, micromap must be a valid VkMicromapEXT handle", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkTransformMatrixKHR": { + "core": [ + { + "vuid": "VUID-VkTransformMatrixKHR-matrix-03799", + "text": "The first three columns of matrix must define an invertible 3x3 matrix", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometryAabbsDataKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03545", + "text": "stride must be a multiple of 8", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03820", + "text": "stride must be less than or equal to 232-1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryAabbsDataKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAabbPositionsKHR": { + "core": [ + { + "vuid": "VUID-VkAabbPositionsKHR-minX-03546", + "text": "minX must be less than or equal to maxX", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAabbPositionsKHR-minY-03547", + "text": "minY must be less than or equal to maxY", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAabbPositionsKHR-minZ-03548", + "text": "minZ must be less than or equal to maxZ", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometryInstancesDataKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryInstancesDataKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureInstanceKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureInstanceKHR-flags-parameter", + "text": "flags must be a valid combination of VkGeometryInstanceFlagBitsKHR values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureMotionInstanceNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureMotionInstanceNV-type-parameter", + "text": "type must be a valid VkAccelerationStructureMotionInstanceTypeNV value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMotionInstanceNV-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMotionInstanceNV-staticInstance-parameter", + "text": "If type is VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV, the staticInstance member of data must be a valid VkAccelerationStructureInstanceKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMotionInstanceNV-matrixMotionInstance-parameter", + "text": "If type is VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, the matrixMotionInstance member of data must be a valid VkAccelerationStructureMatrixMotionInstanceNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureMotionInstanceNV-srtMotionInstance-parameter", + "text": "If type is VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV, the srtMotionInstance member of data must be a valid VkAccelerationStructureSRTMotionInstanceNV structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureMatrixMotionInstanceNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureMatrixMotionInstanceNV-flags-parameter", + "text": "flags must be a valid combination of VkGeometryInstanceFlagBitsKHR values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureSRTMotionInstanceNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureSRTMotionInstanceNV-flags-parameter", + "text": "flags must be a valid combination of VkGeometryInstanceFlagBitsKHR values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureBuildRangeInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-vertexData-10418", + "text": "The number of vertices consumed from VkAccelerationStructureGeometryTrianglesDataKHR::vertexData must be less than or equal to VkAccelerationStructureGeometryTrianglesDataKHR::maxVertex + 1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03656", + "text": "For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the geometry uses indices, the offset primitiveOffset from VkAccelerationStructureGeometryTrianglesDataKHR::indexData must be a multiple of the element size of VkAccelerationStructureGeometryTrianglesDataKHR::indexType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03657", + "text": "For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the geometry does not use indices, the offset primitiveOffset from VkAccelerationStructureGeometryTrianglesDataKHR::vertexData must be a multiple of:
\n\n
", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-maxVertex-10774", + "text": "For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the geometry uses indices, then VkAccelerationStructureGeometryTrianglesDataKHR::maxVertex must be greater than or equal to firstVertex plus the maximum index value found in the VkAccelerationStructureGeometryTrianglesDataKHR::indexData in the range [primitiveOffset, primitiveOffset
primitiveCount x 3]
", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-None-10775", + "text": "For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the geometry does not use indices, then VkAccelerationStructureGeometryTrianglesDataKHR::maxVertex must be greater than or equal to firstVertex + primitiveCount x 3 - 1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-transformOffset-03658", + "text": "For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, the offset transformOffset from VkAccelerationStructureGeometryTrianglesDataKHR::transformData must be a multiple of 16", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03659", + "text": "For geometries of type VK_GEOMETRY_TYPE_AABBS_KHR, the offset primitiveOffset from VkAccelerationStructureGeometryAabbsDataKHR::data must be a multiple of 8", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03660", + "text": "For geometries of type VK_GEOMETRY_TYPE_INSTANCES_KHR, the offset primitiveOffset from VkAccelerationStructureGeometryInstancesDataKHR::data must be a multiple of 16", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometryLinearSweptSpheresDataNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-None-10419", + "text": "The linearSweptSpheres feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-vertexData-10420", + "text": "The memory address in vertexData must not be 0 or `NULL'", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-vertexStride-10421", + "text": "vertexStride must be a multiple of:
\n\n
", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-vertexStride-10422", + "text": "vertexStride and radiusStride must be less than or equal to 232-1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-vertexFormat-10423", + "text": "The format features of vertexFormat must contain VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-radiusFormat-10424", + "text": "The format features of radiusFormat must contain VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-radiusData-10425", + "text": "The memory address in radiusData must not be 0 or `NULL'", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-radiusData-10426", + "text": "All values referenced in radiusData must be greater than or equal to 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-indexingMode-10427", + "text": "If indexingMode is VK_RAY_TRACING_LSS_INDEXING_MODE_SUCCESSIVE_NV, indexData must not be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-indexData-10428", + "text": "If indexData is not NULL, indexType must be one of VK_INDEX_TYPE_UINT16 or VK_INDEX_TYPE_UINT32", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_LINEAR_SWEPT_SPHERES_DATA_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-vertexFormat-parameter", + "text": "vertexFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-vertexData-parameter", + "text": "vertexData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-radiusFormat-parameter", + "text": "radiusFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-radiusData-parameter", + "text": "radiusData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-indexData-parameter", + "text": "indexData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-indexingMode-parameter", + "text": "indexingMode must be a valid VkRayTracingLssIndexingModeNV value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometryLinearSweptSpheresDataNV-endCapsMode-parameter", + "text": "endCapsMode must be a valid VkRayTracingLssPrimitiveEndCapsModeNV value", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureGeometrySpheresDataNV": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-None-10429", + "text": "The spheres feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-vertexData-10430", + "text": "The memory address in vertexData must not be 0 or `NULL'", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-vertexStride-10431", + "text": "vertexStride must be a multiple of:
\n\n
", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-vertexStride-10432", + "text": "vertexStride and radiusStride must be less than or equal to 232-1", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-radiusData-10433", + "text": "The memory address in radiusData must not be 0 or `NULL'", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-vertexFormat-10434", + "text": "The format features of vertexFormat must contain VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-radiusFormat-10435", + "text": "The format features of radiusFormat must contain VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-radiusData-10436", + "text": "All values referenced in radiusData must be greater than or equal to 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-indexData-10437", + "text": "If indexData is not NULL, indexType must be one of VK_INDEX_TYPE_UINT16 or VK_INDEX_TYPE_UINT32", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_SPHERES_DATA_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-vertexFormat-parameter", + "text": "vertexFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-vertexData-parameter", + "text": "vertexData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-radiusFormat-parameter", + "text": "radiusFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-radiusData-parameter", + "text": "radiusData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-indexType-parameter", + "text": "indexType must be a valid VkIndexType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureGeometrySpheresDataNV-indexData-parameter", + "text": "indexData must be a valid VkDeviceOrHostAddressConstKHR union", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdWriteAccelerationStructuresPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructure-08924", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02493", + "text": "queryPool must have been created with a queryType matching queryType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02494", + "text": "The queries identified by queryPool and firstQuery must be unavailable", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-buffer-03736", + "text": "The buffer used to create each acceleration structure in pAccelerationStructures must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-query-04880", + "text": "The sum of firstQuery plus accelerationStructureCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-04964", + "text": "All acceleration structures in pAccelerationStructures must have been built prior to the execution of this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431", + "text": "All acceleration structures in pAccelerationStructures must have been built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-06742", + "text": "queryType must be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter", + "text": "pAccelerationStructures must be a valid pointer to an array of accelerationStructureCount valid VkAccelerationStructureKHR handles", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-parameter", + "text": "queryType must be a valid VkQueryType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength", + "text": "accelerationStructureCount must be greater than 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commonparent", + "text": "Each of commandBuffer, queryPool, and the elements of pAccelerationStructures must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdWriteAccelerationStructuresPropertiesNV": { + "core": [ + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-03755", + "text": "queryPool must have been created with a queryType matching queryType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-03756", + "text": "The queries identified by queryPool and firstQuery must be unavailable", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-accelerationStructure-03757", + "text": "accelerationStructure must be bound completely and contiguously to a single VkDeviceMemory object via vkBindAccelerationStructureMemoryNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-04958", + "text": "All acceleration structures in pAccelerationStructures must have been built prior to the execution of this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-06215", + "text": "All acceleration structures in pAccelerationStructures must have been built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryType-06216", + "text": "queryType must be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-pAccelerationStructures-parameter", + "text": "pAccelerationStructures must be a valid pointer to an array of accelerationStructureCount valid VkAccelerationStructureNV handles", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryType-parameter", + "text": "queryType must be a valid VkQueryType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-accelerationStructureCount-arraylength", + "text": "accelerationStructureCount must be greater than 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdWriteAccelerationStructuresPropertiesNV-commonparent", + "text": "Each of commandBuffer, queryPool, and the elements of pAccelerationStructures must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdCopyAccelerationStructureNV": { + "core": [ + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-mode-03410", + "text": "mode must be VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR or VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-src-04963", + "text": "The source acceleration structure src must have been constructed prior to the execution of this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-src-03411", + "text": "If mode is VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, src must have been constructed with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR in the build", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-buffer-03718", + "text": "The buffer used to create src must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-buffer-03719", + "text": "The buffer used to create dst must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-dst-07791", + "text": "The range of memory backing dst that is accessed by this command must not overlap the memory backing src that is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-dst-07792", + "text": "dst must be bound completely and contiguously to a single VkDeviceMemory object via vkBindAccelerationStructureMemoryNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-dst-parameter", + "text": "dst must be a valid VkAccelerationStructureNV handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-src-parameter", + "text": "src must be a valid VkAccelerationStructureNV handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-mode-parameter", + "text": "mode must be a valid VkCopyAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureNV-commonparent", + "text": "Each of commandBuffer, dst, and src must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdCopyAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-accelerationStructure-08925", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-buffer-03737", + "text": "The buffer used to create pInfo->src must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-buffer-03738", + "text": "The buffer used to create pInfo->dst must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyAccelerationStructureInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkCopyAccelerationStructureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-mode-03410", + "text": "mode must be VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR or VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-src-04963", + "text": "The source acceleration structure src must have been constructed prior to the execution of this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-src-03411", + "text": "If mode is VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, src must have been constructed with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR in the build", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-buffer-03718", + "text": "The buffer used to create src must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-buffer-03719", + "text": "The buffer used to create dst must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-dst-07791", + "text": "The range of memory backing dst that is accessed by this command must not overlap the memory backing src that is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-src-parameter", + "text": "src must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-dst-parameter", + "text": "dst must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-mode-parameter", + "text": "mode must be a valid VkCopyAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureInfoKHR-commonparent", + "text": "Both of dst, and src must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdCopyAccelerationStructureToMemoryKHR": { + "core": [ + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-accelerationStructure-08926", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03739", + "text": "pInfo->dst.deviceAddress must be a valid device address for a buffer bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03740", + "text": "pInfo->dst.deviceAddress must be aligned to 256 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-03741", + "text": "If the buffer pointed to by pInfo->dst.deviceAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-03559", + "text": "The buffer used to create pInfo->src must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyAccelerationStructureToMemoryInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyAccelerationStructureToMemoryKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkCopyAccelerationStructureToMemoryInfoKHR": { + "core": [ + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-04959", + "text": "The source acceleration structure src must have been constructed prior to the execution of this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-03561", + "text": "The memory pointed to by dst must be at least as large as the serialization size of src, as reported by vkWriteAccelerationStructuresPropertiesKHR or vkCmdWriteAccelerationStructuresPropertiesKHR with a query type of VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-03412", + "text": "mode must be VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-parameter", + "text": "src must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-parameter", + "text": "mode must be a valid VkCopyAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdCopyMemoryToAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-accelerationStructure-08927", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03742", + "text": "pInfo->src.deviceAddress must be a valid device address for a buffer bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03743", + "text": "pInfo->src.deviceAddress must be aligned to 256 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03744", + "text": "If the buffer pointed to by pInfo->src.deviceAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-buffer-03745", + "text": "The buffer used to create pInfo->dst must be bound to device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMemoryToAccelerationStructureInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToAccelerationStructureKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkCopyMemoryToAccelerationStructureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-04960", + "text": "The source memory pointed to by src must contain data previously serialized using vkCmdCopyAccelerationStructureToMemoryKHR, potentially modified to relocate acceleration structure references as described in that command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-03413", + "text": "mode must be VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pInfo-03414", + "text": "The data in src must have a format compatible with the destination physical device as returned by vkGetDeviceAccelerationStructureCompatibilityKHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-03746", + "text": "dst must have been created with a size greater than or equal to that used to serialize the data in src", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-parameter", + "text": "dst must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-parameter", + "text": "mode must be a valid VkCopyAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkGetDeviceAccelerationStructureCompatibilityKHR": { + "core": [ + { + "vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-accelerationStructure-08928", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-pVersionInfo-parameter", + "text": "pVersionInfo must be a valid pointer to a valid VkAccelerationStructureVersionInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-pCompatibility-parameter", + "text": "pCompatibility must be a valid pointer to a VkAccelerationStructureCompatibilityKHR value", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkAccelerationStructureVersionInfoKHR": { + "core": [ + { + "vuid": "VUID-VkAccelerationStructureVersionInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureVersionInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkAccelerationStructureVersionInfoKHR-pVersionData-parameter", + "text": "pVersionData must be a valid pointer to an array of \\(2 \\times \\mathtt{VK\\_UUID\\_SIZE}\\) uint8_t values", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkGetClusterAccelerationStructureBuildSizesNV": { + "core": [ + { + "vuid": "VUID-vkGetClusterAccelerationStructureBuildSizesNV-clusterAccelerationStructure-10438", + "text": "The VkPhysicalDeviceClusterAccelerationStructureFeaturesNV::clusterAccelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetClusterAccelerationStructureBuildSizesNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetClusterAccelerationStructureBuildSizesNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkClusterAccelerationStructureInputInfoNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetClusterAccelerationStructureBuildSizesNV-pSizeInfo-parameter", + "text": "pSizeInfo must be a valid pointer to a VkAccelerationStructureBuildSizesInfoKHR structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureInputInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-flags-parameter", + "text": "flags must be a valid combination of VkBuildAccelerationStructureFlagBitsKHR values", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-opType-parameter", + "text": "opType must be a valid VkClusterAccelerationStructureOpTypeNV value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-opMode-parameter", + "text": "opMode must be a valid VkClusterAccelerationStructureOpModeNV value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-pClustersBottomLevel-parameter", + "text": "If opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV, the pClustersBottomLevel member of opInput must be a valid pointer to a VkClusterAccelerationStructureClustersBottomLevelInputNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-pTriangleClusters-parameter", + "text": "If opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV, VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV, VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV, or VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_GET_CLUSTER_TEMPLATE_INDICES_NV, the pTriangleClusters member of opInput must be a valid pointer to a VkClusterAccelerationStructureTriangleClusterInputNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInputInfoNV-pMoveObjects-parameter", + "text": "If opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV, the pMoveObjects member of opInput must be a valid pointer to a VkClusterAccelerationStructureMoveObjectsInputNV structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureClustersBottomLevelInputNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureClustersBottomLevelInputNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureClustersBottomLevelInputNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureTriangleClusterInputNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-vertexFormat-10439", + "text": "The format features of vertexFormat must contain VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-maxClusterTriangleCount-10440", + "text": "maxClusterTriangleCount must be less than or equal to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxTrianglesPerCluster", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-maxClusterVertexCount-10441", + "text": "maxClusterVertexCount must be less than or equal to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxVerticesPerCluster", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-minPositionTruncateBitCount-10442", + "text": "minPositionTruncateBitCount must be less than or equal to 32", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_TRIANGLE_CLUSTER_INPUT_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureTriangleClusterInputNV-vertexFormat-parameter", + "text": "vertexFormat must be a valid VkFormat value", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureMoveObjectsInputNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureMoveObjectsInputNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_MOVE_OBJECTS_INPUT_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureMoveObjectsInputNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureMoveObjectsInputNV-type-parameter", + "text": "type must be a valid VkClusterAccelerationStructureTypeNV value", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdBuildClusterAccelerationStructureIndirectNV": { + "core": [ + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-clusterAccelerationStructure-10443", + "text": "The VkPhysicalDeviceClusterAccelerationStructureFeaturesNV::clusterAccelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pNext-10444", + "text": "The pNext chain of the bound ray tracing pipeline must include a VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10445", + "text": "pCommandInfos->input::maxAccelerationStructureCount must be less than or equal to the value used in pInfo->maxAccelerationStructureCount in vkGetClusterAccelerationStructureBuildSizesNV to determine the memory requirements for the build operation", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-scratchData-10446", + "text": "The scratch memory of the cluster acceleration structure specified in VkClusterAccelerationStructureCommandsInfoNV::scratchData must be larger than or equal to the scratch size queried with vkGetClusterAccelerationStructureBuildSizesNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-scratchData-10447", + "text": "The scratch address of the cluster acceleration structure specified in VkClusterAccelerationStructureCommandsInfoNV::scratchData must be aligned based on the cluster acceleration structure type and its alignment properties as queried with VkPhysicalDeviceClusterAccelerationStructurePropertiesNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10448", + "text": "If pCommandInfos->input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV, pCommandInfos->srcInfosArray must be an array of VkClusterAccelerationStructureMoveObjectsInfoNV structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10449", + "text": "If pCommandInfos->input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV, pCommandInfos->srcInfosArray must be an array of VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10450", + "text": "If pCommandInfos->input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV, pCommandInfos->srcInfosArray must be an array of VkClusterAccelerationStructureBuildTriangleClusterInfoNV structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10451", + "text": "If pCommandInfos->input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV, pCommandInfos->srcInfosArray must be an array of VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10452", + "text": "If pCommandInfos->input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV, pCommandInfos->srcInfosArray must be an array of VkClusterAccelerationStructureInstantiateClusterInfoNV structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10832", + "text": "If pCommandInfos->input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_GET_CLUSTER_TEMPLATE_INDICES_NV, pCommandInfos->srcInfosArray must be an array of VkClusterAccelerationStructureGetTemplateIndicesInfoNV structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10453", + "text": "The value in pCommandInfos->srcInfosCount must be less than or equal to pCommandInfos->input::maxAccelerationStructureCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10454", + "text": "The number of inputs specified in pCommandInfos->srcInfosArray must be greater than or equal to pCommandInfos->srcInfosCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-dstAddressesArray-10455", + "text": "The memory regions specified in VkClusterAccelerationStructureCommandsInfoNV::dstAddressesArray must not overlap with each other or with pCommandInfos->scratchData", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-dstImplicitData-10456", + "text": "The memory region specified in VkClusterAccelerationStructureCommandsInfoNV::dstImplicitData for multiple acceleration structure builds must not overlap with pCommandInfos->scratchData", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10457", + "text": "The buffer from which the buffer device address for pCommandInfos->scratchData is queried must have been created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10458", + "text": "The buffers from which the buffer device addresses for pCommandInfos->srcInfosArray, pCommandInfos->srcInfosCount and pCommandInfos->addressResolutionFlags are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10459", + "text": "The buffers from which the buffer device addresses for pCommandInfos->dstImplicitData and pCommandInfos->dstAddressesArray are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10460", + "text": "If pCommandInfos->dstImplicitData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10461", + "text": "If pCommandInfos->scratchData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10462", + "text": "If pCommandInfos->srcInfosCount is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10463", + "text": "If the addresses specified in pCommandInfos->dstAddressesArray are the address of a non-sparse buffer then they each must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10464", + "text": "If the addresses specified in pCommandInfos->dstSizesArray are the address of a non-sparse buffer then they each must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-10465", + "text": "If the addresses specified in pCommandInfos->srcInfosArray are the address of a non-sparse buffer then they each must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-pCommandInfos-parameter", + "text": "pCommandInfos must be a valid pointer to a valid VkClusterAccelerationStructureCommandsInfoNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureCommandsInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10466", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV, dstImplicitData must be a valid address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10467", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV and input::opType is not VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV, the memory in dstImplicitData must be equal to or larger than the VkAccelerationStructureBuildSizesInfoKHR::accelerationStructureSize value returned from vkGetClusterAccelerationStructureBuildSizesNV with same input parameters", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10468", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV and input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV, the memory in dstImplicitData must be equal to or larger than the sum of all the built acceleration structures that are being moved", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-input-10469", + "text": "If input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV, the total memory moved must not be larger than the size provided in VkClusterAccelerationStructureMoveObjectsInputNV::maxMovedBytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10470", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_COMPUTE_SIZES_NV, dstSizesArray must be a valid address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10471", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV, the address in dstAddressesArray must be a valid address with sizes of individual buffers large enough to accommodate built or moved clusters", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10472", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV, the buffers in dstAddressesArray must not overlap", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-opMode-10473", + "text": "If VkClusterAccelerationStructureInputInfoNV::opMode is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV, the addresses in dstAddressesArray must be aligned based on the cluster acceleration structure type and its alignment properties as described in VkPhysicalDeviceClusterAccelerationStructurePropertiesNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-dstAddressesArray-10474", + "text": "The stride in dstAddressesArray must be greater than or equal to 8", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-dstSizesArray-10475", + "text": "The stride in dstSizesArray must be greater than or equal to 4", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-srcInfosArray-10476", + "text": "The stride in srcInfosArray must be greater than the type of structure the address is describing", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-input-10477", + "text": "If input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV, then depending on the VkClusterAccelerationStructureInputInfoNV::opMode, dstImplicitData or addresses specified in dstAddressesArray must be aligned to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::clusterByteAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-input-10478", + "text": "If input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV, then depending on the VkClusterAccelerationStructureInputInfoNV::opMode, dstImplicitData or addresses specified in dstAddressesArray must be aligned to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::clusterTemplateByteAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-input-10479", + "text": "If input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV, then depending on the VkClusterAccelerationStructureInputInfoNV::opMode, dstImplicitData or addresses specified in dstAddressesArray must be aligned to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::clusterByteAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-scratchData-10480", + "text": "scratchData must be aligned to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::clusterScratchByteAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-srcInfosCount-10481", + "text": "srcInfosCount must be 4-byte aligned", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-input-10482", + "text": "If input::opType is VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV, the total and per argument number of cluster acceleration structures referenced in srcInfosArray must be equal or less than the maximum values with which memory requirements were queried in vkGetClusterAccelerationStructureBuildSizesNV with VkClusterAccelerationStructureOpInputNV::pClustersBottomLevel", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-input-parameter", + "text": "input must be a valid VkClusterAccelerationStructureInputInfoNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureCommandsInfoNV-addressResolutionFlags-parameter", + "text": "addressResolutionFlags must be a valid combination of VkClusterAccelerationStructureAddressResolutionFlagBitsNV values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureMoveObjectsInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureMoveObjectsInfoNV-srcAccelerationStructure-10483", + "text": "srcAccelerationStructure must be a type of cluster acceleration structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV-clusterReferences-10484", + "text": "All cluster references in clusterReferences must be unique", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV-clusterReferences-10485", + "text": "clusterReferences must have at least clusterReferencesCount values", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV-clusterReferencesStride-10486", + "text": "clusterReferencesStride must be greater than or equal to 8", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV-reserved-10487", + "text": "reserved must be 0", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureBuildTriangleClusterInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-clusterID-10488", + "text": "clusterID must not be 0xFFFFFFFF", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-triangleCount-10489", + "text": "triangleCount must be less than or equal to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxTrianglesPerCluster", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-vertexCount-10490", + "text": "vertexCount must be less than or equal to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxVerticesPerCluster", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-indexType-10491", + "text": "indexType must only have a single bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-opacityMicromapIndexType-10492", + "text": "opacityMicromapIndexType must only have a single bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-positionTruncateBitCount-10493", + "text": "positionTruncateBitCount must be greater than or equal to VkClusterAccelerationStructureTriangleClusterInputNV::minPositionTruncateBitCount and less than or equal to 32", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-indexBufferStride-10494", + "text": "indexBufferStride must be 0 or a multiple of indexType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-vertexBufferStride-10495", + "text": "vertexBufferStride must be 0 or a multiple of value specified in VkClusterAccelerationStructureTriangleClusterInputNV::vertexFormat", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-baseGeometryIndex-10496", + "text": "The maximum geometry index after using the values in baseGeometryIndex and geometryIndexBuffer must be less than VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxClusterGeometryIndex", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-clusterFlags-parameter", + "text": "clusterFlags must be a valid combination of VkClusterAccelerationStructureClusterFlagBitsNV values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-clusterID-10497", + "text": "clusterID must not be 0xFFFFFFFF", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-triangleCount-10498", + "text": "triangleCount must be less than or equal to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxTrianglesPerCluster", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-vertexCount-10499", + "text": "vertexCount must be less than or equal to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxVerticesPerCluster", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-indexType-10500", + "text": "indexType must only have a single bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-opacityMicromapIndexType-10501", + "text": "opacityMicromapIndexType must only have a single bit set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-positionTruncateBitCount-10502", + "text": "positionTruncateBitCount must be greater than or equal to VkClusterAccelerationStructureTriangleClusterInputNV::minPositionTruncateBitCount and less than or equal to 32", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-indexBufferStride-10503", + "text": "indexBufferStride must be 0 or a multiple of indexType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-vertexBufferStride-10504", + "text": "vertexBufferStride must be 0 or a multiple of value specified in VkClusterAccelerationStructureTriangleClusterInputNV::vertexFormat", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-instantiationBoundingBoxLimit-10505", + "text": "instantiationBoundingBoxLimit must be aligned to VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::clusterTemplateBoundsByteAlignment", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-baseGeometryIndex-10506", + "text": "The maximum geometry index after using the values in baseGeometryIndex and geometryIndexBuffer must be less than VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxClusterGeometryIndex", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV-clusterFlags-parameter", + "text": "clusterFlags must be a valid combination of VkClusterAccelerationStructureClusterFlagBitsNV values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureInstantiateClusterInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureInstantiateClusterInfoNV-vertexBuffer-10507", + "text": "vertexBuffer must not be NULL if the template was built without vertex data", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInstantiateClusterInfoNV-vertexBuffer-10508", + "text": "The format in vertexBuffer must match the original format specified in VkClusterAccelerationStructureTriangleClusterInputNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInstantiateClusterInfoNV-reserved-10509", + "text": "reserved must be 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkClusterAccelerationStructureInstantiateClusterInfoNV-geometryIndexOffset-10510", + "text": "The maximum geometry index after using the value in geometryIndexOffset must be less than VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxClusterGeometryIndex", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkClusterAccelerationStructureGetTemplateIndicesInfoNV": { + "core": [ + { + "vuid": "VUID-VkClusterAccelerationStructureGetTemplateIndicesInfoNV-clusterTemplateAddress-10833", + "text": "clusterTemplateAddress must be a template cluster acceleration structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkGetPartitionedAccelerationStructuresBuildSizesNV": { + "core": [ + { + "vuid": "VUID-vkGetPartitionedAccelerationStructuresBuildSizesNV-partitionedAccelerationStructure-10534", + "text": "The VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV::partitionedAccelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetPartitionedAccelerationStructuresBuildSizesNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetPartitionedAccelerationStructuresBuildSizesNV-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkPartitionedAccelerationStructureInstancesInputNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkGetPartitionedAccelerationStructuresBuildSizesNV-pSizeInfo-parameter", + "text": "pSizeInfo must be a valid pointer to a VkAccelerationStructureBuildSizesInfoKHR structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkPartitionedAccelerationStructureInstancesInputNV": { + "core": [ + { + "vuid": "VUID-VkPartitionedAccelerationStructureInstancesInputNV-partitionCount-10535", + "text": "The sum of partitionCount and maxInstanceInGlobalPartitionCount must be less than or equal to VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV::maxPartitionCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureInstancesInputNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCES_INPUT_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureInstancesInputNV-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPartitionedAccelerationStructureFlagsNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureInstancesInputNV-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureInstancesInputNV-flags-parameter", + "text": "flags must be a valid combination of VkBuildAccelerationStructureFlagBitsKHR values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkPartitionedAccelerationStructureFlagsNV": { + "core": [ + { + "vuid": "VUID-VkPartitionedAccelerationStructureFlagsNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_FLAGS_NV", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdBuildPartitionedAccelerationStructuresNV": { + "core": [ + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-partitionedAccelerationStructure-10536", + "text": "The VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV::partitionedAccelerationStructure feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10537", + "text": "The count specified in pBuildInfo->input::instanceCount for the build operation must not exceed the value provided in pInfo->instanceCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10538", + "text": "The count specified in pBuildInfo->input::maxInstancePerPartitionCount for the build operation must not exceed the value provided in pInfo->maxInstancePerPartitionCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10539", + "text": "The count specified in pBuildInfo->input::partitionCount for the build operation must not exceed the value provided in pInfo->partitionCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10540", + "text": "The count specified in pBuildInfo->input::maxInstanceInGlobalPartitionCount for the build operation must not exceed the value provided in pInfo->maxInstanceInGlobalPartitionCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10541", + "text": "The scratch memory for the partitioned acceleration structure build specified in pBuildInfo->scratchData must be larger than or equal to the scratch size queried with vkGetPartitionedAccelerationStructuresBuildSizesNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10542", + "text": "pBuildInfo->scratchData must be aligned to 256 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10543", + "text": "The destination memory of the partitioned acceleration structure build specified in pBuildInfo->dstAccelerationStructureData must be larger than or equal to the size queried with vkGetPartitionedAccelerationStructuresBuildSizesNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10544", + "text": "pBuildInfo->srcAccelerationStructureData must be aligned to 256 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10545", + "text": "pBuildInfo->dstAccelerationStructureData must be aligned to 256 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10546", + "text": "The number of inputs specified in pBuildInfo->srcInfos must be greater than or equal to pBuildInfo->srcInfosCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10547", + "text": "The memory region containing the acceleration structure at address pBuildInfo->srcAccelerationStructureData must not overlap with scratch memory region at address pBuildInfo->scratchData", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10548", + "text": "The memory region containing the acceleration structure at address pBuildInfo->dstAccelerationStructureData must not overlap with scratch memory region at address pBuildInfo->scratchData", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10549", + "text": "The memory regions containing the acceleration structures at addresses pBuildInfo->srcAccelerationStructureData and pBuildInfo->dstAccelerationStructureData must not overlap with each other", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10550", + "text": "The buffer from which the buffer device address for pBuildInfo->scratchData is queried must have been created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10551", + "text": "The buffers from which the buffer device addresses for pBuildInfo->srcInfos and pBuildInfo->srcInfosCount are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10552", + "text": "The buffers from which the buffer device addresses for pBuildInfo->srcAccelerationStructureData and pBuildInfo->dstAccelerationStructureData are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR usage flag", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10553", + "text": "If pBuildInfo->srcAccelerationStructureData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10554", + "text": "If pBuildInfo->dstAccelerationStructureData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10555", + "text": "If pBuildInfo->scratchData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10556", + "text": "If pBuildInfo->srcInfos is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10557", + "text": "If pBuildInfo->srcInfosCount is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-parameter", + "text": "pBuildInfo must be a valid pointer to a valid VkBuildPartitionedAccelerationStructureInfoNV structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCmdBuildPartitionedAccelerationStructuresNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkBuildPartitionedAccelerationStructureInfoNV": { + "core": [ + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-scratchData-10558", + "text": "scratchData must not be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-scratchData-10559", + "text": "Memory at scratchData must be equal or larger than the VkAccelerationStructureBuildSizesInfoKHR::buildScratchSize value returned from vkGetPartitionedAccelerationStructuresBuildSizesNV with the same build parameters", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-srcAccelerationStructureData-10560", + "text": "If srcAccelerationStructureData is not NULL, it must have previously been built as a PTLAS", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-dstAccelerationStructureData-10561", + "text": "dstAccelerationStructureData must not be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-dstAccelerationStructureData-10562", + "text": "Memory at dstAccelerationStructureData must be equal or larger than the VkAccelerationStructureBuildSizesInfoKHR::accelerationStructureSize value returned from vkGetPartitionedAccelerationStructuresBuildSizesNV with the same build parameters", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-srcInfosCount-10563", + "text": "srcInfosCount must be 4-byte aligned", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-srcInfos-10564", + "text": "Each element of srcInfos array must have a unique VkBuildPartitionedAccelerationStructureIndirectCommandNV::opType", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureInfoNV-input-parameter", + "text": "input must be a valid VkPartitionedAccelerationStructureInstancesInputNV structure", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkBuildPartitionedAccelerationStructureIndirectCommandNV": { + "core": [ + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureIndirectCommandNV-argData-10565", + "text": "An instance index must not be referenced by more than one structure in argData", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkBuildPartitionedAccelerationStructureIndirectCommandNV-opType-parameter", + "text": "opType must be a valid VkPartitionedAccelerationStructureOpTypeNV value", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkPartitionedAccelerationStructureWriteInstanceDataNV": { + "core": [ + { + "vuid": "VUID-VkPartitionedAccelerationStructureWriteInstanceDataNV-instanceMask-10566", + "text": "The most significant 24 bits of instanceMask must be 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureWriteInstanceDataNV-instanceContributionToHitGroupIndex-10567", + "text": "The most significant 8 bits of instanceContributionToHitGroupIndex must be 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureWriteInstanceDataNV-instanceIndex-10568", + "text": "instanceIndex must be less than VkBuildPartitionedAccelerationStructureInfoNV::input::instanceCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureWriteInstanceDataNV-partitionIndex-10569", + "text": "partitionIndex must be less than VkBuildPartitionedAccelerationStructureInfoNV::input::partitionCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureWriteInstanceDataNV-explicitAABB-10570", + "text": "explicitAABB must be a valid bounding box if instance was created with flag VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV set", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureWriteInstanceDataNV-instanceFlags-parameter", + "text": "instanceFlags must be a valid combination of VkPartitionedAccelerationStructureInstanceFlagBitsNV values", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkPartitionedAccelerationStructureUpdateInstanceDataNV": { + "core": [ + { + "vuid": "VUID-VkPartitionedAccelerationStructureUpdateInstanceDataNV-instanceContributionToHitGroupIndex-10571", + "text": "The most significant 8 bits of instanceContributionToHitGroupIndex must be 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureUpdateInstanceDataNV-None-10572", + "text": "The instance must have either been created with flag VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV or did not have an acceleration structure assigned with VkPartitionedAccelerationStructureWriteInstanceDataNV", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureUpdateInstanceDataNV-instanceIndex-10573", + "text": "instanceIndex must be less than VkBuildPartitionedAccelerationStructureInfoNV::input::instanceCount", + "page": "chapters/accelstructures.html" + } + ] + }, + "VkPartitionedAccelerationStructureWritePartitionTranslationDataNV": { + "core": [ + { + "vuid": "VUID-VkPartitionedAccelerationStructureWritePartitionTranslationDataNV-partitionIndex-10574", + "text": "partitionIndex must be less than VkBuildPartitionedAccelerationStructureInfoNV::input::partitionCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-VkPartitionedAccelerationStructureWritePartitionTranslationDataNV-enablePartitionTranslation-10575", + "text": "The partitioned acceleration structure must have the VkPartitionedAccelerationStructureFlagsNV::enablePartitionTranslation flag set", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkBuildAccelerationStructuresKHR": { + "core": [ + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-accelerationStructureHostCommands-03581", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-mode-04628", + "text": "The mode member of each element of pInfos must be a valid VkBuildAccelerationStructureModeKHR value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-srcAccelerationStructure-04629", + "text": "If the srcAccelerationStructure member of any element of pInfos is not VK_NULL_HANDLE, the srcAccelerationStructure member must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-04630", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure member must not be VK_NULL_HANDLE", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03403", + "text": "The srcAccelerationStructure member of any element of pInfos must not be the same acceleration structure as the dstAccelerationStructure member of any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03698", + "text": "The dstAccelerationStructure member of any element of pInfos must not be the same acceleration structure as the dstAccelerationStructure member of any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03800", + "text": "The dstAccelerationStructure member of any element of pInfos must be a valid VkAccelerationStructureKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03699", + "text": "For each element of pInfos, if its type member is VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its dstAccelerationStructure member must have been created with a value of VkAccelerationStructureCreateInfoKHR::type equal to either VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03700", + "text": "For each element of pInfos, if its type member is VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its dstAccelerationStructure member must have been created with a value of VkAccelerationStructureCreateInfoKHR::type equal to either VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03663", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, inactive primitives in its srcAccelerationStructure member must not be made active", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03664", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives in its srcAccelerationStructure member must not be made inactive", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-None-03407", + "text": "The dstAccelerationStructure member of any element of pInfos must not be referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03701", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the srcAccelerationStructure member of any other element of pInfos with a mode equal to VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03702", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the dstAccelerationStructure member of any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03703", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any element of pInfos (including the same element), which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-scratchData-03704", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-scratchData-03705", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the srcAccelerationStructure member of any element of pInfos with a mode equal to VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the same element), which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-dstAccelerationStructure-03706", + "text": "The range of memory backing the dstAccelerationStructure member of any element of pInfos that is accessed by this command must not overlap the memory backing any acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos, which is accessed by this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03667", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure member must have previously been constructed with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in VkAccelerationStructureBuildGeometryInfoKHR::flags in the build", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03668", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its srcAccelerationStructure and dstAccelerationStructure members must either be the same VkAccelerationStructureKHR, or not have any memory aliasing", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03758", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its geometryCount member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03759", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its flags member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03760", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its type member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03761", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, its geometryType member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03762", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, its flags member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03763", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.vertexFormat member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03764", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.maxVertex member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03765", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.indexType member must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03766", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles.transformData address was NULL when srcAccelerationStructure was last built, then it must be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03767", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles.transformData address was not NULL when srcAccelerationStructure was last built, then it must not be NULL", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03768", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, if geometryType is VK_GEOMETRY_TYPE_TRIANGLES_KHR, and geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, then the value of each index referenced must be the same as the corresponding index value when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-primitiveCount-03769", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each VkAccelerationStructureGeometryKHR structure referred to by its pGeometries or ppGeometries members, the primitiveCount member of its corresponding VkAccelerationStructureBuildRangeInfoKHR structure must have the same value which was specified when srcAccelerationStructure was last built", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03801", + "text": "For each element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, the corresponding ppBuildRangeInfos[i][j].primitiveCount must be less than or equal to VkPhysicalDeviceAccelerationStructurePropertiesKHR::maxInstanceCount", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-10126", + "text": "For each pInfos[i], dstAccelerationStructure must have been created with a value of VkAccelerationStructureCreateInfoKHR::size greater than or equal to either:
\n
    \n
  • \n

    the memory size required by the build operation, as returned by\nvkGetAccelerationStructureBuildSizesKHR with\npBuildInfo = pInfos[i] and with each element of the\npMaxPrimitiveCounts array greater than or equal to the equivalent\nppBuildRangeInfos[i][j].primitiveCount values for j in\n[0,pInfos[i].geometryCount) or,

    \n
  • \n
  • \n

    the result of querying the corresponding\nVK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, if\nupdating a compacted acceleration structure

    \n
  • \n
\n
", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-ppBuildRangeInfos-03676", + "text": "Each element of ppBuildRangeInfos[i] must be a valid pointer to an array of pInfos[i].geometryCount VkAccelerationStructureBuildRangeInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03722", + "text": "For each element of pInfos, the buffer used to create its dstAccelerationStructure member must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03723", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the buffer used to create its srcAccelerationStructure member must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03724", + "text": "For each element of pInfos, the buffer used to create each acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03725", + "text": "If pInfos[i].mode is VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses between pInfos[i].scratchData.hostAddress and pInfos[i].scratchData.hostAddress + N - 1 must be valid host memory, where N is given by the buildScratchSize member of the VkAccelerationStructureBuildSizesInfoKHR structure returned from a call to vkGetAccelerationStructureBuildSizesKHR with an identical VkAccelerationStructureBuildGeometryInfoKHR structure and primitive count", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03726", + "text": "If pInfos[i].mode is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses between pInfos[i].scratchData.hostAddress and pInfos[i].scratchData.hostAddress + N - 1 must be valid host memory, where N is given by the updateScratchSize member of the VkAccelerationStructureBuildSizesInfoKHR structure returned from a call to vkGetAccelerationStructureBuildSizesKHR with an identical VkAccelerationStructureBuildGeometryInfoKHR structure and primitive count", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03771", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, geometry.triangles.vertexData.hostAddress must be a valid host address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03772", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.indexType is not VK_INDEX_TYPE_NONE_KHR, geometry.triangles.indexData.hostAddress must be a valid host address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03773", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR, if geometry.triangles.transformData.hostAddress is not 0, it must be a valid host address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03774", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR, geometry.aabbs.data.hostAddress must be a valid host address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03775", + "text": "For each element of pInfos, the buffer used to create its dstAccelerationStructure member must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03776", + "text": "For each element of pInfos, if its mode member is VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the buffer used to create its srcAccelerationStructure member must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03777", + "text": "For each element of pInfos, the buffer used to create each acceleration structure referenced by the geometry.instances.data member of any element of pGeometries or ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03778", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, geometry.instances.data.hostAddress must be a valid host address", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-03779", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR, each VkAccelerationStructureInstanceKHR::accelerationStructureReference value in geometry.instances.data.hostAddress must be a valid VkAccelerationStructureKHR object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-04930", + "text": "For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR with VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV set, each accelerationStructureReference in any structure in VkAccelerationStructureMotionInstanceNV value in geometry.instances.data.hostAddress must be a valid VkAccelerationStructureKHR object", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-pInfos-parameter", + "text": "pInfos must be a valid pointer to an array of infoCount valid VkAccelerationStructureBuildGeometryInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-ppBuildRangeInfos-parameter", + "text": "ppBuildRangeInfos must be a valid pointer to an array of infoCount VkAccelerationStructureBuildRangeInfoKHR structures", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-infoCount-arraylength", + "text": "infoCount must be greater than 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkBuildAccelerationStructuresKHR-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCopyAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-accelerationStructureHostCommands-03582", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-buffer-03727", + "text": "The buffer used to create pInfo->src must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-buffer-03728", + "text": "The buffer used to create pInfo->dst must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-buffer-03780", + "text": "The buffer used to create pInfo->src must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-buffer-03781", + "text": "The buffer used to create pInfo->dst must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyAccelerationStructureInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureKHR-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCopyMemoryToAccelerationStructureKHR": { + "core": [ + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-accelerationStructureHostCommands-03583", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03729", + "text": "pInfo->src.hostAddress must be a valid host pointer", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-03750", + "text": "pInfo->src.hostAddress must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03730", + "text": "The buffer used to create pInfo->dst must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-buffer-03782", + "text": "The buffer used to create pInfo->dst must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMemoryToAccelerationStructureInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyMemoryToAccelerationStructureKHR-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCopyAccelerationStructureToMemoryKHR": { + "core": [ + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-accelerationStructureHostCommands-03584", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03731", + "text": "The buffer used to create pInfo->src must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03732", + "text": "pInfo->dst.hostAddress must be a valid host pointer", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-03751", + "text": "pInfo->dst.hostAddress must be aligned to 16 bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-buffer-03783", + "text": "The buffer used to create pInfo->src must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyAccelerationStructureToMemoryInfoKHR structure", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkCopyAccelerationStructureToMemoryKHR-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkWriteAccelerationStructuresPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureHostCommands-03585", + "text": "The VkPhysicalDeviceAccelerationStructureFeaturesKHR::accelerationStructureHostCommands feature must be enabled", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-04964", + "text": "All acceleration structures in pAccelerationStructures must have been built prior to the execution of this command", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431", + "text": "All acceleration structures in pAccelerationStructures must have been built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR if queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06742", + "text": "queryType must be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03448", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then stride must be a multiple of the size of VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03449", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, then pData must point to a VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03450", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then stride must be a multiple of the size of VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03451", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, then pData must point to a VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06731", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, then stride must be a multiple of the size of VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06732", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, then pData must point to a VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06733", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, then stride must be a multiple of the size of VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-06734", + "text": "If queryType is VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, then pData must point to a VkDeviceSize", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-03452", + "text": "dataSize must be greater than or equal to accelerationStructureCount*stride", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03733", + "text": "The buffer used to create each acceleration structure in pAccelerationStructures must be bound to host-visible device memory", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-buffer-03784", + "text": "The buffer used to create each acceleration structure in pAccelerationStructures must be bound to memory that was not allocated with multiple instances", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter", + "text": "pAccelerationStructures must be a valid pointer to an array of accelerationStructureCount valid VkAccelerationStructureKHR handles", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-parameter", + "text": "queryType must be a valid VkQueryType value", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength", + "text": "accelerationStructureCount must be greater than 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/accelstructures.html" + }, + { + "vuid": "VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parent", + "text": "Each element of pAccelerationStructures must have been created, allocated, or retrieved from device", + "page": "chapters/accelstructures.html" + } + ] + }, + "vkCmdBuildMicromapsEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07461", + "text": "For each pInfos[i], dstMicromap must have been created with a value of VkMicromapCreateInfoEXT::size greater than or equal to the memory size required by the build operation, as returned by vkGetMicromapBuildSizesEXT with pBuildInfo = pInfos[i]", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-mode-07462", + "text": "The mode member of each element of pInfos must be a valid VkBuildMicromapModeEXT value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-dstMicromap-07463", + "text": "The dstMicromap member of any element of pInfos must be a valid VkMicromapEXT handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07464", + "text": "For each element of pInfos its type member must match the value of VkMicromapCreateInfoEXT::type when its dstMicromap was created", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-dstMicromap-07465", + "text": "The range of memory backing the dstMicromap member of any element of pInfos that is accessed by this command must not overlap the memory backing the dstMicromap member of any other element of pInfos, which is accessed by this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-dstMicromap-07466", + "text": "The range of memory backing the dstMicromap member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any element of pInfos (including the same element), which is accessed by this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-scratchData-07467", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any other element of pInfos, which is accessed by this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07508", + "text": "For each element of pInfos, the buffer used to create its dstMicromap member must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07509", + "text": "If pInfos[i].mode is VK_BUILD_MICROMAP_MODE_BUILD_EXT, all addresses between pInfos[i].scratchData.deviceAddress and pInfos[i].scratchData.deviceAddress + N - 1 must be in the buffer device address range of the same buffer, where N is given by the buildScratchSize member of the VkMicromapBuildSizesInfoEXT structure returned from a call to vkGetMicromapBuildSizesEXT with an identical VkMicromapBuildInfoEXT structure and primitive count", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-data-07510", + "text": "The buffers from which the buffer device addresses for all of the data and triangleArray members of all pInfos[i] are queried must have been created with the VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT usage flag", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07511", + "text": "For each element of pInfos[i] the buffer from which the buffer device address pInfos[i].scratchData.deviceAddress is queried must have been created with VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07512", + "text": "For each element of pInfos, its scratchData.deviceAddress, data.deviceAddress, and triangleArray.deviceAddress members must be valid device addresses obtained from vkGetBufferDeviceAddress", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07513", + "text": "For each element of pInfos, if scratchData.deviceAddress, data.deviceAddress, or triangleArray.deviceAddress is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07514", + "text": "For each element of pInfos, its scratchData.deviceAddress member must be a multiple of VkPhysicalDeviceAccelerationStructurePropertiesKHR::minAccelerationStructureScratchOffsetAlignment", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-07515", + "text": "For each element of pInfos, its triangleArray.deviceAddress and data.deviceAddress members must be a multiple of 256", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-pInfos-parameter", + "text": "pInfos must be a valid pointer to an array of infoCount valid VkMicromapBuildInfoEXT structures", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdBuildMicromapsEXT-infoCount-arraylength", + "text": "infoCount must be greater than 0", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkMicromapBuildInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMicromapBuildInfoEXT-pUsageCounts-07516", + "text": "Only one of pUsageCounts or ppUsageCounts can be a valid pointer, the other must be NULL", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-type-07517", + "text": "If type is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT the format member of VkMicromapUsageEXT must be a valid value from VkOpacityMicromapFormatEXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-type-07518", + "text": "If type is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT the format member of VkMicromapTriangleEXT must be a valid value from VkOpacityMicromapFormatEXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-type-08704", + "text": "If type is VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV the format member of VkMicromapUsageEXT must be a valid value from VkDisplacementMicromapFormatNV", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-type-08705", + "text": "If type is VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV the format member of VkMicromapTriangleEXT must be a valid value from VkDisplacementMicromapFormatNV", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MICROMAP_BUILD_INFO_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-type-parameter", + "text": "type must be a valid VkMicromapTypeEXT value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-flags-parameter", + "text": "flags must be a valid combination of VkBuildMicromapFlagBitsEXT values", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-pUsageCounts-parameter", + "text": "If usageCountsCount is not 0, and pUsageCounts is not NULL, pUsageCounts must be a valid pointer to an array of usageCountsCount VkMicromapUsageEXT structures", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapBuildInfoEXT-ppUsageCounts-parameter", + "text": "If usageCountsCount is not 0, and ppUsageCounts is not NULL, ppUsageCounts must be a valid pointer to an array of usageCountsCount valid pointers to VkMicromapUsageEXT structures", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkMicromapUsageEXT": { + "core": [ + { + "vuid": "VUID-VkMicromapUsageEXT-format-07519", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT then format must be VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT or VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapUsageEXT-format-07520", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and format is VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT then subdivisionLevel must be less than or equal to VkPhysicalDeviceOpacityMicromapPropertiesEXT::maxOpacity2StateSubdivisionLevel", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapUsageEXT-format-07521", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and format is VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT then subdivisionLevel must be less than or equal to VkPhysicalDeviceOpacityMicromapPropertiesEXT::maxOpacity4StateSubdivisionLevel", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapUsageEXT-format-08706", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then format must be VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV, VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV or VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapUsageEXT-subdivisionLevel-08707", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then subdivisionLevel must be less than or equal to VkPhysicalDeviceDisplacementMicromapPropertiesNV::maxDisplacementMicromapSubdivisionLevel", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkMicromapTriangleEXT": { + "core": [ + { + "vuid": "VUID-VkMicromapTriangleEXT-format-07522", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT then format must be VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT or VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapTriangleEXT-format-07523", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and format is VK_OPACITY_MICROMAP_FORMAT_2_STATE_EXT then subdivisionLevel must be less than or equal to VkPhysicalDeviceOpacityMicromapPropertiesEXT::maxOpacity2StateSubdivisionLevel", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapTriangleEXT-format-07524", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT and format is VK_OPACITY_MICROMAP_FORMAT_4_STATE_EXT then subdivisionLevel must be less than or equal to VkPhysicalDeviceOpacityMicromapPropertiesEXT::maxOpacity4StateSubdivisionLevel", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapTriangleEXT-format-08708", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then format must be VK_DISPLACEMENT_MICROMAP_FORMAT_64_TRIANGLES_64_BYTES_NV, VK_DISPLACEMENT_MICROMAP_FORMAT_256_TRIANGLES_128_BYTES_NV or VK_DISPLACEMENT_MICROMAP_FORMAT_1024_TRIANGLES_128_BYTES_NV", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapTriangleEXT-subdivisionLevel-08709", + "text": "If the VkMicromapTypeEXT of the micromap is VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV then subdivisionLevel must be less than or equal to VkPhysicalDeviceDisplacementMicromapPropertiesNV::maxDisplacementMicromapSubdivisionLevel", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCmdWriteMicromapsPropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-queryPool-07525", + "text": "queryPool must have been created with a queryType matching queryType", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-queryPool-07526", + "text": "The queries identified by queryPool and firstQuery must be unavailable", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-buffer-07527", + "text": "The buffer used to create each micromap in pMicrmaps must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-query-07528", + "text": "The sum of query plus micromapCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-pMicromaps-07501", + "text": "All micromaps in pMicromaps must have been constructed prior to the execution of this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-pMicromaps-07502", + "text": "All micromaps in pMicromaps must have been constructed with VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT if queryType is VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-queryType-07503", + "text": "queryType must be VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT or VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-pMicromaps-parameter", + "text": "pMicromaps must be a valid pointer to an array of micromapCount valid VkMicromapEXT handles", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-queryType-parameter", + "text": "queryType must be a valid VkQueryType value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-queryPool-parameter", + "text": "queryPool must be a valid VkQueryPool handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-micromapCount-arraylength", + "text": "micromapCount must be greater than 0", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdWriteMicromapsPropertiesEXT-commonparent", + "text": "Each of commandBuffer, queryPool, and the elements of pMicromaps must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCmdCopyMicromapEXT": { + "core": [ + { + "vuid": "VUID-vkCmdCopyMicromapEXT-buffer-07529", + "text": "The buffer used to create pInfo->src must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-buffer-07530", + "text": "The buffer used to create pInfo->dst must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMicromapInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkCopyMicromapInfoEXT": { + "core": [ + { + "vuid": "VUID-VkCopyMicromapInfoEXT-mode-07531", + "text": "mode must be VK_COPY_MICROMAP_MODE_COMPACT_EXT or VK_COPY_MICROMAP_MODE_CLONE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-src-07532", + "text": "The source acceleration structure src must have been constructed prior to the execution of this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-mode-07533", + "text": "If mode is VK_COPY_MICROMAP_MODE_COMPACT_EXT, src must have been constructed with VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT in the build", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-buffer-07534", + "text": "The buffer used to create src must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-buffer-07535", + "text": "The buffer used to create dst must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_MICROMAP_INFO_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-src-parameter", + "text": "src must be a valid VkMicromapEXT handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-dst-parameter", + "text": "dst must be a valid VkMicromapEXT handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-mode-parameter", + "text": "mode must be a valid VkCopyMicromapModeEXT value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapInfoEXT-commonparent", + "text": "Both of dst, and src must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCmdCopyMicromapToMemoryEXT": { + "core": [ + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-07536", + "text": "pInfo->dst.deviceAddress must be a valid device address for a buffer bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-07537", + "text": "pInfo->dst.deviceAddress must be aligned to 256 bytes", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-07538", + "text": "If the buffer pointed to by pInfo->dst.deviceAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-buffer-07539", + "text": "The buffer used to create pInfo->src must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMicromapToMemoryInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMicromapToMemoryEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkCopyMicromapToMemoryInfoEXT": { + "core": [ + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-src-07540", + "text": "The source micromap src must have been constructed prior to the execution of this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-dst-07541", + "text": "The memory pointed to by dst must be at least as large as the serialization size of src, as reported by vkWriteMicromapsPropertiesEXT or vkCmdWriteMicromapsPropertiesEXT with a query type of VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-mode-07542", + "text": "mode must be VK_COPY_MICROMAP_MODE_SERIALIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_MICROMAP_TO_MEMORY_INFO_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-src-parameter", + "text": "src must be a valid VkMicromapEXT handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMicromapToMemoryInfoEXT-mode-parameter", + "text": "mode must be a valid VkCopyMicromapModeEXT value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCmdCopyMemoryToMicromapEXT": { + "core": [ + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-07543", + "text": "pInfo->src.deviceAddress must be a valid device address for a buffer bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-07544", + "text": "pInfo->src.deviceAddress must be aligned to 256 bytes", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-07545", + "text": "If the buffer pointed to by pInfo->src.deviceAddress is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-buffer-07546", + "text": "The buffer used to create pInfo->dst must be bound to device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMemoryToMicromapInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCmdCopyMemoryToMicromapEXT-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkCopyMemoryToMicromapInfoEXT": { + "core": [ + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-src-07547", + "text": "The source memory pointed to by src must contain data previously serialized using vkCmdCopyMicromapToMemoryEXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-mode-07548", + "text": "mode must be VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-src-07549", + "text": "The data in src must have a format compatible with the destination physical device as returned by vkGetDeviceMicromapCompatibilityEXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-dst-07550", + "text": "dst must have been created with a size greater than or equal to that used to serialize the data in src", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_COPY_MEMORY_TO_MICROMAP_INFO_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-dst-parameter", + "text": "dst must be a valid VkMicromapEXT handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkCopyMemoryToMicromapInfoEXT-mode-parameter", + "text": "mode must be a valid VkCopyMicromapModeEXT value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkGetDeviceMicromapCompatibilityEXT": { + "core": [ + { + "vuid": "VUID-vkGetDeviceMicromapCompatibilityEXT-micromap-07551", + "text": "The micromap feature must be enabled", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkGetDeviceMicromapCompatibilityEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkGetDeviceMicromapCompatibilityEXT-pVersionInfo-parameter", + "text": "pVersionInfo must be a valid pointer to a valid VkMicromapVersionInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkGetDeviceMicromapCompatibilityEXT-pCompatibility-parameter", + "text": "pCompatibility must be a valid pointer to a VkAccelerationStructureCompatibilityKHR value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "VkMicromapVersionInfoEXT": { + "core": [ + { + "vuid": "VUID-VkMicromapVersionInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MICROMAP_VERSION_INFO_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapVersionInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-VkMicromapVersionInfoEXT-pVersionData-parameter", + "text": "pVersionData must be a valid pointer to an array of \\(2 \\times \\mathtt{VK\\_UUID\\_SIZE}\\) uint8_t values", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkBuildMicromapsEXT": { + "core": [ + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07461", + "text": "For each pInfos[i], dstMicromap must have been created with a value of VkMicromapCreateInfoEXT::size greater than or equal to the memory size required by the build operation, as returned by vkGetMicromapBuildSizesEXT with pBuildInfo = pInfos[i]", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-mode-07462", + "text": "The mode member of each element of pInfos must be a valid VkBuildMicromapModeEXT value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-dstMicromap-07463", + "text": "The dstMicromap member of any element of pInfos must be a valid VkMicromapEXT handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07464", + "text": "For each element of pInfos its type member must match the value of VkMicromapCreateInfoEXT::type when its dstMicromap was created", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-dstMicromap-07465", + "text": "The range of memory backing the dstMicromap member of any element of pInfos that is accessed by this command must not overlap the memory backing the dstMicromap member of any other element of pInfos, which is accessed by this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-dstMicromap-07466", + "text": "The range of memory backing the dstMicromap member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any element of pInfos (including the same element), which is accessed by this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-scratchData-07467", + "text": "The range of memory backing the scratchData member of any element of pInfos that is accessed by this command must not overlap the memory backing the scratchData member of any other element of pInfos, which is accessed by this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07552", + "text": "For each element of pInfos, the buffer used to create its dstMicromap member must be bound to host-visible device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07553", + "text": "For each element of pInfos, all referenced addresses of pInfos[i].data.hostAddress must be valid host memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07554", + "text": "For each element of pInfos, all referenced addresses of pInfos[i].triangleArray.hostAddress must be valid host memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-micromapHostCommands-07555", + "text": "The VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapHostCommands feature must be enabled", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07556", + "text": "If pInfos[i].mode is VK_BUILD_MICROMAP_MODE_BUILD_EXT, all addresses between pInfos[i].scratchData.hostAddress and pInfos[i].scratchData.hostAddress + N - 1 must be valid host memory, where N is given by the buildScratchSize member of the VkMicromapBuildSizesInfoEXT structure returned from a call to vkGetMicromapBuildSizesEXT with an identical VkMicromapBuildInfoEXT structure and primitive count", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-07557", + "text": "For each element of pInfos, the buffer used to create its dstMicromap member must be bound to memory that was not allocated with multiple instances", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-pInfos-parameter", + "text": "pInfos must be a valid pointer to an array of infoCount valid VkMicromapBuildInfoEXT structures", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-infoCount-arraylength", + "text": "infoCount must be greater than 0", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkBuildMicromapsEXT-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCopyMicromapEXT": { + "core": [ + { + "vuid": "VUID-vkCopyMicromapEXT-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-buffer-07558", + "text": "The buffer used to create pInfo->src must be bound to host-visible device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-buffer-07559", + "text": "The buffer used to create pInfo->dst must be bound to host-visible device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-micromapHostCommands-07560", + "text": "The VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapHostCommands feature must be enabled", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-buffer-07561", + "text": "The buffer used to create pInfo->src must be bound to memory that was not allocated with multiple instances", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-buffer-07562", + "text": "The buffer used to create pInfo->dst must be bound to memory that was not allocated with multiple instances", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMicromapInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapEXT-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCopyMemoryToMicromapEXT": { + "core": [ + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-pInfo-07563", + "text": "pInfo->src.hostAddress must be a valid host pointer", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-pInfo-07564", + "text": "pInfo->src.hostAddress must be aligned to 16 bytes", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-buffer-07565", + "text": "The buffer used to create pInfo->dst must be bound to host-visible device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-micromapHostCommands-07566", + "text": "The VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapHostCommands feature must be enabled", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-buffer-07567", + "text": "The buffer used to create pInfo->dst must be bound to memory that was not allocated with multiple instances", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMemoryToMicromapInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMemoryToMicromapEXT-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCopyMicromapToMemoryEXT": { + "core": [ + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-deferredOperation-03678", + "text": "Any previous deferred operation that was associated with deferredOperation must be complete", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-buffer-07568", + "text": "The buffer used to create pInfo->src must be bound to host-visible device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-pInfo-07569", + "text": "pInfo->dst.hostAddress must be a valid host pointer", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-pInfo-07570", + "text": "pInfo->dst.hostAddress must be aligned to 16 bytes", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-micromapHostCommands-07571", + "text": "The VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapHostCommands feature must be enabled", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-buffer-07572", + "text": "The buffer used to create pInfo->src must be bound to memory that was not allocated with multiple instances", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkCopyMicromapToMemoryInfoEXT structure", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkCopyMicromapToMemoryEXT-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkWriteMicromapsPropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-pMicromaps-07501", + "text": "All micromaps in pMicromaps must have been constructed prior to the execution of this command", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-pMicromaps-07502", + "text": "All micromaps in pMicromaps must have been constructed with VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT if queryType is VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-queryType-07503", + "text": "queryType must be VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT or VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-queryType-10071", + "text": "If queryType is VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT or VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT then stride must be a multiple of the size of VkDeviceSize", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-queryType-10072", + "text": "If queryType is VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT or VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT then pData must point to a VkDeviceSize", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-dataSize-07576", + "text": "dataSize must be greater than or equal to micromapCount*stride", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-buffer-07577", + "text": "The buffer used to create each micromap in pMicromaps must be bound to host-visible device memory", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-micromapHostCommands-07578", + "text": "The VkPhysicalDeviceOpacityMicromapFeaturesEXT::micromapHostCommands feature must be enabled", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-buffer-07579", + "text": "The buffer used to create each micromap in pMicromaps must be bound to memory that was not allocated with multiple instances", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-pMicromaps-parameter", + "text": "pMicromaps must be a valid pointer to an array of micromapCount valid VkMicromapEXT handles", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-queryType-parameter", + "text": "queryType must be a valid VkQueryType value", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-pData-parameter", + "text": "pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-micromapCount-arraylength", + "text": "micromapCount must be greater than 0", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-dataSize-arraylength", + "text": "dataSize must be greater than 0", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + }, + { + "vuid": "VUID-vkWriteMicromapsPropertiesEXT-pMicromaps-parent", + "text": "Each element of pMicromaps must have been created, allocated, or retrieved from device", + "page": "chapters/VK_EXT_opacity_micromap/micromaps.html" + } + ] + }, + "vkCmdTraceRaysNV": { + "core": [ + { + "vuid": "VUID-vkCmdTraceRaysNV-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-03429", + "text": "Any shader group handle referenced by this call must have been queried from the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-None-09458", + "text": "If the bound ray tracing pipeline state was created with the VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR dynamic state enabled then vkCmdSetRayTracingPipelineStackSizeKHR must have been called in the current command buffer prior to this trace command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-04624", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-maxRecursionDepth-03625", + "text": "This command must not cause a pipeline trace ray instruction to be executed from a shader invocation with a recursion depth greater than the value of maxRecursionDepth used to create the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-04042", + "text": "If raygenShaderBindingTableBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455", + "text": "raygenShaderBindingOffset must be less than the size of raygenShaderBindingTableBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02456", + "text": "raygenShaderBindingOffset must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-04043", + "text": "If missShaderBindingTableBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457", + "text": "missShaderBindingOffset must be less than the size of missShaderBindingTableBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02458", + "text": "missShaderBindingOffset must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-04044", + "text": "If hitShaderBindingTableBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459", + "text": "hitShaderBindingOffset must be less than the size of hitShaderBindingTableBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02460", + "text": "hitShaderBindingOffset must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-04045", + "text": "If callableShaderBindingTableBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461", + "text": "callableShaderBindingOffset must be less than the size of callableShaderBindingTableBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02462", + "text": "callableShaderBindingOffset must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingStride-02463", + "text": "missShaderBindingStride must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupHandleSize", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02464", + "text": "hitShaderBindingStride must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupHandleSize", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02465", + "text": "callableShaderBindingStride must be a multiple of VkPhysicalDeviceRayTracingPropertiesNV::shaderGroupHandleSize", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingStride-02466", + "text": "missShaderBindingStride must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02467", + "text": "hitShaderBindingStride must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02468", + "text": "callableShaderBindingStride must be less than or equal to VkPhysicalDeviceRayTracingPropertiesNV::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-width-02469", + "text": "width must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-height-02470", + "text": "height must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-depth-02471", + "text": "depth must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-allowClusterAccelerationStructure-10577", + "text": "If the traced geometry contains a cluster acceleration structure, then VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV::allowClusterAccelerationStructure must have been set for that pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-parameter", + "text": "raygenShaderBindingTableBuffer must be a valid VkBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-parameter", + "text": "If missShaderBindingTableBuffer is not VK_NULL_HANDLE, missShaderBindingTableBuffer must be a valid VkBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-parameter", + "text": "If hitShaderBindingTableBuffer is not VK_NULL_HANDLE, hitShaderBindingTableBuffer must be a valid VkBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-parameter", + "text": "If callableShaderBindingTableBuffer is not VK_NULL_HANDLE, callableShaderBindingTableBuffer must be a valid VkBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysNV-commonparent", + "text": "Each of callableShaderBindingTableBuffer, commandBuffer, hitShaderBindingTableBuffer, missShaderBindingTableBuffer, and raygenShaderBindingTableBuffer that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/raytracing.html" + } + ] + }, + "vkCmdTraceRaysKHR": { + "core": [ + { + "vuid": "VUID-vkCmdTraceRaysKHR-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-03429", + "text": "Any shader group handle referenced by this call must have been queried from the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-None-09458", + "text": "If the bound ray tracing pipeline state was created with the VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR dynamic state enabled then vkCmdSetRayTracingPipelineStackSizeKHR must have been called in the current command buffer prior to this trace command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-maxPipelineRayRecursionDepth-03679", + "text": "This command must not cause a shader call instruction to be executed from a shader invocation with a recursion depth greater than the value of maxPipelineRayRecursionDepth used to create the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-03635", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-size-04023", + "text": "The size member of pRayGenShaderBindingTable must be equal to its stride member", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03680", + "text": "If the buffer from which pRayGenShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03681", + "text": "The buffer from which the pRayGenShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-03682", + "text": "pRayGenShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03683", + "text": "If the buffer from which pMissShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03684", + "text": "The buffer from which the pMissShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-03685", + "text": "pMissShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-stride-03686", + "text": "pMissShaderBindingTable->stride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-stride-04029", + "text": "pMissShaderBindingTable->stride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03687", + "text": "If the buffer from which pHitShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03688", + "text": "The buffer from which the pHitShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-03689", + "text": "pHitShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-stride-03690", + "text": "pHitShaderBindingTable->stride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-stride-04035", + "text": "pHitShaderBindingTable->stride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03691", + "text": "If the buffer from which pCallableShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03692", + "text": "The buffer from which the pCallableShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-03693", + "text": "pCallableShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-stride-03694", + "text": "pCallableShaderBindingTable->stride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-stride-04041", + "text": "pCallableShaderBindingTable->stride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-03696", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, pHitShaderBindingTable->deviceAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-03697", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, pHitShaderBindingTable->deviceAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-03511", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, the shader group handle identified by pMissShaderBindingTable->deviceAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-03512", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, entries in the table identified by pHitShaderBindingTable->deviceAddress accessed as a result of this command in order to execute an any-hit shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-03513", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, entries in the table identified by pHitShaderBindingTable->deviceAddress accessed as a result of this command in order to execute a closest hit shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-flags-03514", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, entries in the table identified by pHitShaderBindingTable->deviceAddress accessed as a result of this command in order to execute an intersection shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04735", + "text": "Any non-zero hit shader group entries in the table identified by pHitShaderBindingTable->deviceAddress accessed by this call from a geometry with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR must have been created with VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04736", + "text": "Any non-zero hit shader group entries in the table identified by pHitShaderBindingTable->deviceAddress accessed by this call from a geometry with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR must have been created with VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-width-03638", + "text": "width must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[0]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-height-03639", + "text": "height must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[1]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-depth-03640", + "text": "depth must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[2]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-width-03641", + "text": "width × height × depth must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayDispatchInvocationCount", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-allowClusterAccelerationStructure-10578", + "text": "If the traced geometry contains a cluster acceleration structure, then VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV::allowClusterAccelerationStructure must have been set for that pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pRaygenShaderBindingTable-parameter", + "text": "pRaygenShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-parameter", + "text": "pMissShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-parameter", + "text": "pHitShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-parameter", + "text": "pCallableShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/raytracing.html" + } + ] + }, + "vkCmdBindInvocationMaskHUAWEI": { + "core": [ + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-None-04976", + "text": "The invocationMask feature must be enabled", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04977", + "text": "If imageView is not VK_NULL_HANDLE, it must be a valid VkImageView handle of type VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04978", + "text": "If imageView is not VK_NULL_HANDLE, it must have a format of VK_FORMAT_R8_UINT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04979", + "text": "If imageView is not VK_NULL_HANDLE, it must have been created with VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI set", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-imageView-04980", + "text": "If imageView is not VK_NULL_HANDLE, imageLayout must be VK_IMAGE_LAYOUT_GENERAL", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-width-04981", + "text": "Thread mask image resolution must match the width and height in vkCmdTraceRaysKHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-None-04982", + "text": "Each element in the invocation mask image must have the value 0 or 1. The value 1 means the invocation is active", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-depth-04983", + "text": "depth in vkCmdTraceRaysKHR must be 1", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-imageView-parameter", + "text": "If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-imageLayout-parameter", + "text": "imageLayout must be a valid VkImageLayout value", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdBindInvocationMaskHUAWEI-commonparent", + "text": "Both of commandBuffer, and imageView that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/raytracing.html" + } + ] + }, + "vkCmdTraceRaysIndirectKHR": { + "core": [ + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-03429", + "text": "Any shader group handle referenced by this call must have been queried from the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-None-09458", + "text": "If the bound ray tracing pipeline state was created with the VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR dynamic state enabled then vkCmdSetRayTracingPipelineStackSizeKHR must have been called in the current command buffer prior to this trace command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-maxPipelineRayRecursionDepth-03679", + "text": "This command must not cause a shader call instruction to be executed from a shader invocation with a recursion depth greater than the value of maxPipelineRayRecursionDepth used to create the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-size-04023", + "text": "The size member of pRayGenShaderBindingTable must be equal to its stride member", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03680", + "text": "If the buffer from which pRayGenShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03681", + "text": "The buffer from which the pRayGenShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-03682", + "text": "pRayGenShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03683", + "text": "If the buffer from which pMissShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03684", + "text": "The buffer from which the pMissShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-03685", + "text": "pMissShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-03686", + "text": "pMissShaderBindingTable->stride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04029", + "text": "pMissShaderBindingTable->stride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03687", + "text": "If the buffer from which pHitShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03688", + "text": "The buffer from which the pHitShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-03689", + "text": "pHitShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-03690", + "text": "pHitShaderBindingTable->stride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04035", + "text": "pHitShaderBindingTable->stride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03691", + "text": "If the buffer from which pCallableShaderBindingTable->deviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03692", + "text": "The buffer from which the pCallableShaderBindingTable->deviceAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-03693", + "text": "pCallableShaderBindingTable->deviceAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-03694", + "text": "pCallableShaderBindingTable->stride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-stride-04041", + "text": "pCallableShaderBindingTable->stride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03696", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, pHitShaderBindingTable->deviceAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03697", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, pHitShaderBindingTable->deviceAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03511", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, the shader group handle identified by pMissShaderBindingTable->deviceAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03512", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, entries in the table identified by pHitShaderBindingTable->deviceAddress accessed as a result of this command in order to execute an any-hit shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03513", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, entries in the table identified by pHitShaderBindingTable->deviceAddress accessed as a result of this command in order to execute a closest hit shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-flags-03514", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, entries in the table identified by pHitShaderBindingTable->deviceAddress accessed as a result of this command in order to execute an intersection shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04735", + "text": "Any non-zero hit shader group entries in the table identified by pHitShaderBindingTable->deviceAddress accessed by this call from a geometry with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR must have been created with VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04736", + "text": "Any non-zero hit shader group entries in the table identified by pHitShaderBindingTable->deviceAddress accessed by this call from a geometry with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR must have been created with VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632", + "text": "If the buffer from which indirectDeviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633", + "text": "The buffer from which indirectDeviceAddress was queried must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03634", + "text": "indirectDeviceAddress must be a multiple of 4", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03636", + "text": "All device addresses between indirectDeviceAddress and indirectDeviceAddress + sizeof(VkTraceRaysIndirectCommandKHR) - 1 must be in the buffer device address range of the same buffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-rayTracingPipelineTraceRaysIndirect-03637", + "text": "The rayTracingPipelineTraceRaysIndirect feature must be enabled", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-rayTracingMotionBlurPipelineTraceRaysIndirect-04951", + "text": "If the bound ray tracing pipeline was created with VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::rayTracingMotionBlurPipelineTraceRaysIndirect feature must be enabled", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pRaygenShaderBindingTable-parameter", + "text": "pRaygenShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-parameter", + "text": "pMissShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-parameter", + "text": "pHitShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-parameter", + "text": "pCallableShaderBindingTable must be a valid pointer to a valid VkStridedDeviceAddressRegionKHR structure", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirectKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/raytracing.html" + } + ] + }, + "VkTraceRaysIndirectCommandKHR": { + "core": [ + { + "vuid": "VUID-VkTraceRaysIndirectCommandKHR-width-03638", + "text": "width must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[0]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommandKHR-height-03639", + "text": "height must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[1]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommandKHR-depth-03640", + "text": "depth must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[2]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommandKHR-width-03641", + "text": "width × height × depth must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayDispatchInvocationCount", + "page": "chapters/raytracing.html" + } + ] + }, + "vkCmdTraceRaysIndirect2KHR": { + "core": [ + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-03429", + "text": "Any shader group handle referenced by this call must have been queried from the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-None-09458", + "text": "If the bound ray tracing pipeline state was created with the VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR dynamic state enabled then vkCmdSetRayTracingPipelineStackSizeKHR must have been called in the current command buffer prior to this trace command", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-maxPipelineRayRecursionDepth-03679", + "text": "This command must not cause a shader call instruction to be executed from a shader invocation with a recursion depth greater than the value of maxPipelineRayRecursionDepth used to create the bound ray tracing pipeline", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-03635", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03632", + "text": "If the buffer from which indirectDeviceAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03633", + "text": "The buffer from which indirectDeviceAddress was queried must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03634", + "text": "indirectDeviceAddress must be a multiple of 4", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-indirectDeviceAddress-03636", + "text": "All device addresses between indirectDeviceAddress and indirectDeviceAddress + sizeof(VkTraceRaysIndirectCommand2KHR) - 1 must be in the buffer device address range of the same buffer", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-rayTracingPipelineTraceRaysIndirect2-03637", + "text": "The rayTracingPipelineTraceRaysIndirect2 feature must be enabled", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-rayTracingMotionBlurPipelineTraceRaysIndirect-04951", + "text": "If the bound ray tracing pipeline was created with VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::rayTracingMotionBlurPipelineTraceRaysIndirect feature must be enabled", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support compute operations", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-vkCmdTraceRaysIndirect2KHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/raytracing.html" + } + ] + }, + "VkTraceRaysIndirectCommand2KHR": { + "core": [ + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pRayGenShaderBindingTable-03680", + "text": "If the buffer from which raygenShaderRecordAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pRayGenShaderBindingTable-03681", + "text": "The buffer from which the raygenShaderRecordAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pRayGenShaderBindingTable-03682", + "text": "raygenShaderRecordAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pMissShaderBindingTable-03683", + "text": "If the buffer from which missShaderBindingTableAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pMissShaderBindingTable-03684", + "text": "The buffer from which the missShaderBindingTableAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pMissShaderBindingTable-03685", + "text": "missShaderBindingTableAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-stride-03686", + "text": "missShaderBindingTableStride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-stride-04029", + "text": "missShaderBindingTableStride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-03687", + "text": "If the buffer from which hitShaderBindingTableAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-03688", + "text": "The buffer from which the hitShaderBindingTableAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-03689", + "text": "hitShaderBindingTableAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-stride-03690", + "text": "hitShaderBindingTableStride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-stride-04035", + "text": "hitShaderBindingTableStride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pCallableShaderBindingTable-03691", + "text": "If the buffer from which callableShaderBindingTableAddress was queried is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pCallableShaderBindingTable-03692", + "text": "The buffer from which the callableShaderBindingTableAddress is queried must have been created with the VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR usage flag", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pCallableShaderBindingTable-03693", + "text": "callableShaderBindingTableAddress must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupBaseAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-stride-03694", + "text": "callableShaderBindingTableStride must be a multiple of VkPhysicalDeviceRayTracingPipelinePropertiesKHR::shaderGroupHandleAlignment", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-stride-04041", + "text": "callableShaderBindingTableStride must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxShaderGroupStride", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-flags-03696", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, hitShaderBindingTableAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-flags-03697", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, hitShaderBindingTableAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-flags-03511", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR, the shader group handle identified by missShaderBindingTableAddress must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-flags-03512", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, entries in the table identified by hitShaderBindingTableAddress accessed as a result of this command in order to execute an any-hit shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-flags-03513", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, entries in the table identified by hitShaderBindingTableAddress accessed as a result of this command in order to execute a closest hit shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-flags-03514", + "text": "If the bound ray tracing pipeline was created with flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, entries in the table identified by hitShaderBindingTableAddress accessed as a result of this command in order to execute an intersection shader must not be zero", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-04735", + "text": "Any non-zero hit shader group entries in the table identified by hitShaderBindingTableAddress accessed by this call from a geometry with a geometryType of VK_GEOMETRY_TYPE_TRIANGLES_KHR must have been created with VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-pHitShaderBindingTable-04736", + "text": "Any non-zero hit shader group entries in the table identified by hitShaderBindingTableAddress accessed by this call from a geometry with a geometryType of VK_GEOMETRY_TYPE_AABBS_KHR must have been created with VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-width-03638", + "text": "width must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[0] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[0]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-height-03639", + "text": "height must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[1] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[1]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-depth-03640", + "text": "depth must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupCount[2] × VkPhysicalDeviceLimits::maxComputeWorkGroupSize[2]", + "page": "chapters/raytracing.html" + }, + { + "vuid": "VUID-VkTraceRaysIndirectCommand2KHR-width-03641", + "text": "width × height × depth must be less than or equal to VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayDispatchInvocationCount", + "page": "chapters/raytracing.html" + } + ] + }, + "vkCmdDecompressMemoryNV": { + "core": [ + { + "vuid": "VUID-vkCmdDecompressMemoryNV-None-07684", + "text": "The memoryDecompression feature must be enabled", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-pDecompressMemoryRegions-parameter", + "text": "pDecompressMemoryRegions must be a valid pointer to an array of decompressRegionCount valid VkDecompressMemoryRegionNV structures", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryNV-decompressRegionCount-arraylength", + "text": "decompressRegionCount must be greater than 0", + "page": "chapters/VK_NV_memory_decompression.html" + } + ] + }, + "VkDecompressMemoryRegionNV": { + "core": [ + { + "vuid": "VUID-VkDecompressMemoryRegionNV-srcAddress-07685", + "text": "The srcAddress must be 4 byte aligned", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-srcAddress-07686", + "text": "The memory in range srcAddress and srcAddress + compressedSize must be valid and bound to a VkDeviceMemory object", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-dstAddress-07687", + "text": "The dstAddress must be 4 byte aligned", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-decompressionMethod-09395", + "text": "If decompressionMethod is VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV, then decompressedSize must be less than or equal to 65536 bytes", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-dstAddress-07688", + "text": "The memory in range dstAddress and dstAddress + decompressedSize must be valid and bound to a VkDeviceMemory object", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-decompressedSize-07689", + "text": "The decompressedSize must be large enough to hold the decompressed data based on the decompressionMethod", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-decompressionMethod-07690", + "text": "The decompressionMethod must have a single bit set", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-srcAddress-07691", + "text": "The srcAddress to srcAddress + compressedSize region must not overlap with the dstAddress and dstAddress + decompressedSize region", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-decompressionMethod-parameter", + "text": "decompressionMethod must be a valid combination of VkMemoryDecompressionMethodFlagBitsNV values", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-VkDecompressMemoryRegionNV-decompressionMethod-requiredbitmask", + "text": "decompressionMethod must not be 0", + "page": "chapters/VK_NV_memory_decompression.html" + } + ] + }, + "vkCmdDecompressMemoryIndirectCountNV": { + "core": [ + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-None-07692", + "text": "The memoryDecompression feature must be enabled", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07693", + "text": "If indirectCommandsAddress comes from a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07694", + "text": "The VkBuffer that indirectCommandsAddress comes from must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-offset-07695", + "text": "offset must be a multiple of 4", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07696", + "text": "If indirectCommandsCountAddress comes from a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07697", + "text": "The VkBuffer that indirectCommandsCountAddress comes from must have been created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07698", + "text": "indirectCommandsCountAddress must be a multiple of 4", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07699", + "text": "The count stored in indirectCommandsCountAddress must be less than or equal to VkPhysicalDeviceMemoryDecompressionPropertiesNV::maxDecompressionIndirectCount", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-stride-07700", + "text": "stride must be a multiple of 4 and must be greater than or equal to sizeof(VkDecompressMemoryRegionNV)", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07701", + "text": "If the count stored in indirectCommandsCountAddress is equal to 1, (offset + sizeof(VkDecompressMemoryRegionNV)) must be less than or equal to the size of the VkBuffer that indirectCommandsAddress comes from", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07702", + "text": "If the count stored in indirectCommandsCountAddress is greater than 1, indirectCommandsAddress + sizeof(VkDecompressMemoryRegionNV) + (stride × (count stored in countBuffer - 1)) must be less than or equal to the last valid address in the VkBuffer that indirectCommandsAddress was created from", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_NV_memory_decompression.html" + }, + { + "vuid": "VUID-vkCmdDecompressMemoryIndirectCountNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_NV_memory_decompression.html" + } + ] + }, + "VkVideoPictureResourceInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoPictureResourceInfoKHR-baseArrayLayer-07175", + "text": "baseArrayLayer must be less than the VkImageViewCreateInfo::subresourceRange.layerCount specified when the image view imageViewBinding was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoPictureResourceInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoPictureResourceInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoPictureResourceInfoKHR-imageViewBinding-parameter", + "text": "imageViewBinding must be a valid VkImageView handle", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoProfileInfoKHR-chromaSubsampling-07013", + "text": "chromaSubsampling must have a single bit set", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-lumaBitDepth-07014", + "text": "lumaBitDepth must have a single bit set", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-chromaSubsampling-07015", + "text": "If chromaSubsampling is not VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR, then chromaBitDepth must have a single bit set", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-07179", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pNext chain must include a VkVideoDecodeH264ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-07180", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pNext chain must include a VkVideoDecodeH265ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-10791", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the pNext chain must include a VkVideoDecodeVP9ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-09256", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pNext chain must include a VkVideoDecodeAV1ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-07181", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain must include a VkVideoEncodeH264ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-07182", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain must include a VkVideoEncodeH265ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-10262", + "text": "If videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the pNext chain must include a VkVideoEncodeAV1ProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-videoCodecOperation-parameter", + "text": "videoCodecOperation must be a valid VkVideoCodecOperationFlagBitsKHR value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-chromaSubsampling-parameter", + "text": "chromaSubsampling must be a valid combination of VkVideoChromaSubsamplingFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-chromaSubsampling-requiredbitmask", + "text": "chromaSubsampling must not be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-lumaBitDepth-parameter", + "text": "lumaBitDepth must be a valid combination of VkVideoComponentBitDepthFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-lumaBitDepth-requiredbitmask", + "text": "lumaBitDepth must not be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileInfoKHR-chromaBitDepth-parameter", + "text": "chromaBitDepth must be a valid combination of VkVideoComponentBitDepthFlagBitsKHR values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeUsageInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeUsageInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_USAGE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeUsageInfoKHR-videoUsageHints-parameter", + "text": "videoUsageHints must be a valid combination of VkVideoDecodeUsageFlagBitsKHR values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeUsageInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeUsageInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_USAGE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeUsageInfoKHR-videoUsageHints-parameter", + "text": "videoUsageHints must be a valid combination of VkVideoEncodeUsageFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeUsageInfoKHR-videoContentHints-parameter", + "text": "videoContentHints must be a valid combination of VkVideoEncodeContentFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeUsageInfoKHR-tuningMode-parameter", + "text": "If tuningMode is not 0, tuningMode must be a valid VkVideoEncodeTuningModeKHR value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoProfileListInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoProfileListInfoKHR-pProfiles-06813", + "text": "pProfiles must not contain more than one element whose videoCodecOperation member specifies a decode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileListInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoProfileListInfoKHR-pProfiles-parameter", + "text": "If profileCount is not 0, pProfiles must be a valid pointer to an array of profileCount valid VkVideoProfileInfoKHR structures", + "page": "chapters/videocoding.html" + } + ] + }, + "vkGetPhysicalDeviceVideoCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07183", + "text": "If pVideoProfile->videoCodecOperation specifies a decode operation, then the pNext chain of pCapabilities must include a VkVideoDecodeCapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07184", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoDecodeH264CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07185", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoDecodeH265CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-10792", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoDecodeVP9CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-09257", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoDecodeAV1CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07186", + "text": "If pVideoProfile->videoCodecOperation specifies an encode operation, then the pNext chain of pCapabilities must include a VkVideoEncodeCapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07187", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoEncodeH264CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-07188", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoEncodeH265CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-10263", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the pNext chain of pCapabilities must include a VkVideoEncodeAV1CapabilitiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pVideoProfile-parameter", + "text": "pVideoProfile must be a valid pointer to a valid VkVideoProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-pCapabilities-parameter", + "text": "pCapabilities must be a valid pointer to a VkVideoCapabilitiesKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCapabilitiesKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoDecodeAV1CapabilitiesKHR, VkVideoDecodeCapabilitiesKHR, VkVideoDecodeH264CapabilitiesKHR, VkVideoDecodeH265CapabilitiesKHR, VkVideoDecodeVP9CapabilitiesKHR, VkVideoEncodeAV1CapabilitiesKHR, VkVideoEncodeAV1QuantizationMapCapabilitiesKHR, VkVideoEncodeCapabilitiesKHR, VkVideoEncodeH264CapabilitiesKHR, VkVideoEncodeH264QuantizationMapCapabilitiesKHR, VkVideoEncodeH265CapabilitiesKHR, VkVideoEncodeH265QuantizationMapCapabilitiesKHR, VkVideoEncodeIntraRefreshCapabilitiesKHR, or VkVideoEncodeQuantizationMapCapabilitiesKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCapabilitiesKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + } + ] + }, + "vkGetPhysicalDeviceVideoFormatPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-pNext-06812", + "text": "The pNext chain of pVideoFormatInfo must include a VkVideoProfileListInfoKHR structure with profileCount greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-pVideoFormatInfo-parameter", + "text": "pVideoFormatInfo must be a valid pointer to a valid VkPhysicalDeviceVideoFormatInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-pVideoFormatPropertyCount-parameter", + "text": "pVideoFormatPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-pVideoFormatProperties-parameter", + "text": "If the value referenced by pVideoFormatPropertyCount is not 0, and pVideoFormatProperties is not NULL, pVideoFormatProperties must be a valid pointer to an array of pVideoFormatPropertyCount VkVideoFormatPropertiesKHR structures", + "page": "chapters/videocoding.html" + } + ] + }, + "VkPhysicalDeviceVideoFormatInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoFormatInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoFormatInfoKHR-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkVideoProfileListInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoFormatInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoFormatInfoKHR-imageUsage-parameter", + "text": "imageUsage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoFormatInfoKHR-imageUsage-requiredbitmask", + "text": "imageUsage must not be 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoFormatPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoFormatPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoFormatPropertiesKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoFormatAV1QuantizationMapPropertiesKHR, VkVideoFormatH265QuantizationMapPropertiesKHR, or VkVideoFormatQuantizationMapPropertiesKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoFormatPropertiesKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCreateVideoSessionKHR": { + "core": [ + { + "vuid": "VUID-vkCreateVideoSessionKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkVideoSessionCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionKHR-pVideoSession-parameter", + "text": "pVideoSession must be a valid pointer to a VkVideoSessionKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionKHR-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoSessionCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-protectedMemory-07189", + "text": "If the protectedMemory feature is not enabled or if VkVideoCapabilitiesKHR::flags does not include VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile, then flags must not include VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-08371", + "text": "If flags includes VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, then videoMaintenance1 must be enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10398", + "text": "If flags includes VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, then videoMaintenance2 must be enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10399", + "text": "If flags includes VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, then pVideoProfile->videoCodecOperation must specify a decode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10264", + "text": "If flags includes VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR, then the videoEncodeQuantizationMap feature must be enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10265", + "text": "If flags includes VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR, then pVideoProfile->videoCodecOperation must specify an encode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10266", + "text": "If flags includes VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, then it must not also include VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10267", + "text": "If VkVideoEncodeCapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile, then flags must not include VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-10268", + "text": "If VkVideoEncodeCapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile, then flags must not include VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-04845", + "text": "pVideoProfile must be a supported video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-maxDpbSlots-04847", + "text": "maxDpbSlots must be less than or equal to VkVideoCapabilitiesKHR::maxDpbSlots, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-maxActiveReferencePictures-04849", + "text": "maxActiveReferencePictures must be less than or equal to VkVideoCapabilitiesKHR::maxActiveReferencePictures, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-maxDpbSlots-04850", + "text": "If either maxDpbSlots or maxActiveReferencePictures is 0, then both must be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-maxCodedExtent-04851", + "text": "maxCodedExtent must be between VkVideoCapabilitiesKHR::minCodedExtent and VkVideoCapabilitiesKHR::maxCodedExtent, inclusive, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-referencePictureFormat-04852", + "text": "If pVideoProfile->videoCodecOperation specifies a decode operation and maxActiveReferencePictures is greater than 0, then referencePictureFormat must be one of the supported decode DPB formats, as returned by vkGetPhysicalDeviceVideoFormatPropertiesKHR in VkVideoFormatPropertiesKHR::format when called with the imageUsage member of its pVideoFormatInfo parameter containing VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR, and with a VkVideoProfileListInfoKHR structure specified in the pNext chain of its pVideoFormatInfo parameter whose pProfiles member contains an element matching pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-referencePictureFormat-06814", + "text": "If pVideoProfile->videoCodecOperation specifies an encode operation and maxActiveReferencePictures is greater than 0, then referencePictureFormat must be one of the supported decode DPB formats, as returned by then referencePictureFormat must be one of the supported encode DPB formats, as returned by vkGetPhysicalDeviceVideoFormatPropertiesKHR in VkVideoFormatPropertiesKHR::format when called with the imageUsage member of its pVideoFormatInfo parameter containing VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, and with a VkVideoProfileListInfoKHR structure specified in the pNext chain of its pVideoFormatInfo parameter whose pProfiles member contains an element matching pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04853", + "text": "If pVideoProfile->videoCodecOperation specifies a decode operation, then pictureFormat must be one of the supported decode output formats, as returned by vkGetPhysicalDeviceVideoFormatPropertiesKHR in VkVideoFormatPropertiesKHR::format when called with the imageUsage member of its pVideoFormatInfo parameter containing VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR, and with a VkVideoProfileListInfoKHR structure specified in the pNext chain of its pVideoFormatInfo parameter whose pProfiles member contains an element matching pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pictureFormat-04854", + "text": "If pVideoProfile->videoCodecOperation specifies an encode operation, then pictureFormat must be one of the supported encode input formats, as returned by vkGetPhysicalDeviceVideoFormatPropertiesKHR in VkVideoFormatPropertiesKHR::format when called with the imageUsage member of its pVideoFormatInfo parameter containing VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, and with a VkVideoProfileListInfoKHR structure specified in the pNext chain of its pVideoFormatInfo parameter whose pProfiles member contains an element matching pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-10835", + "text": "If pVideoProfile->videoCodecOperation specifies an encode operation, the pNext chain of this structure includes a VkVideoEncodeSessionIntraRefreshCreateInfoKHR structure, and its intraRefreshMode member is not VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR, then the videoEncodeIntraRefresh feature must be enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-10836", + "text": "If pVideoProfile->videoCodecOperation specifies an encode operation, the pNext chain of this structure includes a VkVideoEncodeSessionIntraRefreshCreateInfoKHR structure, and its intraRefreshMode member is not VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR, then intraRefreshMode must specify one of the bits included in VkVideoEncodeIntraRefreshCapabilitiesKHR::intraRefreshModes, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pStdHeaderVersion-07190", + "text": "pStdHeaderVersion->extensionName must match VkVideoCapabilitiesKHR::stdHeaderVersion.extensionName, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pStdHeaderVersion-07191", + "text": "pStdHeaderVersion->specVersion must be less than or equal to VkVideoCapabilitiesKHR::stdHeaderVersion.specVersion, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified by pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-10793", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the videoDecodeVP9 feature must be enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-08251", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and the pNext chain of this structure includes a VkVideoEncodeH264SessionCreateInfoKHR structure, then its maxLevelIdc member must be less than or equal to VkVideoEncodeH264CapabilitiesKHR::maxLevelIdc, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-08252", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the pNext chain of this structure includes a VkVideoEncodeH265SessionCreateInfoKHR structure, then its maxLevelIdc member must be less than or equal to VkVideoEncodeH265CapabilitiesKHR::maxLevelIdc, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-10269", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the videoEncodeAV1 feature must be enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-10270", + "text": "If pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pNext chain of this structure includes a VkVideoEncodeAV1SessionCreateInfoKHR structure, then its maxLevel member must be less than or equal to VkVideoEncodeAV1CapabilitiesKHR::maxLevel, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeAV1SessionCreateInfoKHR, VkVideoEncodeH264SessionCreateInfoKHR, VkVideoEncodeH265SessionCreateInfoKHR, or VkVideoEncodeSessionIntraRefreshCreateInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoSessionCreateFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pVideoProfile-parameter", + "text": "pVideoProfile must be a valid pointer to a valid VkVideoProfileInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pictureFormat-parameter", + "text": "pictureFormat must be a valid VkFormat value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-referencePictureFormat-parameter", + "text": "referencePictureFormat must be a valid VkFormat value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionCreateInfoKHR-pStdHeaderVersion-parameter", + "text": "pStdHeaderVersion must be a valid pointer to a valid VkExtensionProperties structure", + "page": "chapters/videocoding.html" + } + ] + }, + "vkDestroyVideoSessionKHR": { + "core": [ + { + "vuid": "VUID-vkDestroyVideoSessionKHR-videoSession-07192", + "text": "All submitted commands that refer to videoSession must have completed execution", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionKHR-videoSession-07193", + "text": "If VkAllocationCallbacks were provided when videoSession was created, a compatible set of callbacks must be provided here", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionKHR-videoSession-07194", + "text": "If no VkAllocationCallbacks were provided when videoSession was created, pAllocator must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionKHR-videoSession-parameter", + "text": "If videoSession is not VK_NULL_HANDLE, videoSession must be a valid VkVideoSessionKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionKHR-videoSession-parent", + "text": "If videoSession is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/videocoding.html" + } + ] + }, + "vkGetVideoSessionMemoryRequirementsKHR": { + "core": [ + { + "vuid": "VUID-vkGetVideoSessionMemoryRequirementsKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetVideoSessionMemoryRequirementsKHR-videoSession-parameter", + "text": "videoSession must be a valid VkVideoSessionKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetVideoSessionMemoryRequirementsKHR-pMemoryRequirementsCount-parameter", + "text": "pMemoryRequirementsCount must be a valid pointer to a uint32_t value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetVideoSessionMemoryRequirementsKHR-pMemoryRequirements-parameter", + "text": "If the value referenced by pMemoryRequirementsCount is not 0, and pMemoryRequirements is not NULL, pMemoryRequirements must be a valid pointer to an array of pMemoryRequirementsCount VkVideoSessionMemoryRequirementsKHR structures", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetVideoSessionMemoryRequirementsKHR-videoSession-parent", + "text": "videoSession must have been created, allocated, or retrieved from device", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoSessionMemoryRequirementsKHR": { + "core": [ + { + "vuid": "VUID-VkVideoSessionMemoryRequirementsKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionMemoryRequirementsKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + } + ] + }, + "vkBindVideoSessionMemoryKHR": { + "core": [ + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-videoSession-07195", + "text": "The memory binding of videoSession identified by the memoryBindIndex member of any element of pBindSessionMemoryInfos must not already be backed by a memory object", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-memoryBindIndex-07196", + "text": "The memoryBindIndex member of each element of pBindSessionMemoryInfos must be unique within pBindSessionMemoryInfos", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07197", + "text": "Each element of pBindSessionMemoryInfos must have a corresponding VkMemoryRequirements structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07198", + "text": "If an element of pBindSessionMemoryInfos has a corresponding VkMemoryRequirements structure, then the memory member of that element of pBindSessionMemoryInfos must have been allocated using one of the memory types allowed in the memoryTypeBits member of the corresponding VkMemoryRequirements structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07199", + "text": "If an element of pBindSessionMemoryInfos has a corresponding VkMemoryRequirements structure, then the memoryOffset member of that element of pBindSessionMemoryInfos must be an integer multiple of the alignment member of the corresponding VkMemoryRequirements structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-07200", + "text": "If an element of pBindSessionMemoryInfos has a corresponding VkMemoryRequirements structure, then the memorySize member of that element of pBindSessionMemoryInfos must equal the size member of the corresponding VkMemoryRequirements structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-videoSession-parameter", + "text": "videoSession must be a valid VkVideoSessionKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-pBindSessionMemoryInfos-parameter", + "text": "pBindSessionMemoryInfos must be a valid pointer to an array of bindSessionMemoryInfoCount valid VkBindVideoSessionMemoryInfoKHR structures", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-bindSessionMemoryInfoCount-arraylength", + "text": "bindSessionMemoryInfoCount must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkBindVideoSessionMemoryKHR-videoSession-parent", + "text": "videoSession must have been created, allocated, or retrieved from device", + "page": "chapters/videocoding.html" + } + ] + }, + "VkBindVideoSessionMemoryInfoKHR": { + "core": [ + { + "vuid": "VUID-VkBindVideoSessionMemoryInfoKHR-memoryOffset-07201", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkBindVideoSessionMemoryInfoKHR-memorySize-07202", + "text": "memorySize must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkBindVideoSessionMemoryInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkBindVideoSessionMemoryInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkBindVideoSessionMemoryInfoKHR-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCreateVideoSessionParametersKHR": { + "core": [ + { + "vuid": "VUID-vkCreateVideoSessionParametersKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionParametersKHR-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkVideoSessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionParametersKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionParametersKHR-pVideoSessionParameters-parameter", + "text": "pVideoSessionParameters must be a valid pointer to a VkVideoSessionParametersKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCreateVideoSessionParametersKHR-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoSessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-04855", + "text": "If videoSessionParametersTemplate is not VK_NULL_HANDLE, it must have been created against videoSession", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-08310", + "text": "If videoSessionParametersTemplate is not VK_NULL_HANDLE and videoSession was created with an encode operation, then qualityLevel must equal the video encode quality level videoSessionParametersTemplate was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-flags-10271", + "text": "If flags includes VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR, then videoSession must have been created with VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-flags-10272", + "text": "If flags includes VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR, then the pNext chain must include a VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-flags-10273", + "text": "If flags includes VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR and videoSession was created with VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR, then the list of video format properties supported for the image usage flag VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR must have an element for which VkVideoFormatQuantizationMapPropertiesKHR::quantizationMapTexelSize equals the quantizationMapTexelSize member of the VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-flags-10274", + "text": "If flags includes VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR and videoSession was created with VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR, then the list of video format properties supported for the image usage flag VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR must have an element for which VkVideoFormatQuantizationMapPropertiesKHR::quantizationMapTexelSize equals the quantizationMapTexelSize member of the VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-10275", + "text": "If videoSessionParametersTemplate is not VK_NULL_HANDLE and flags includes VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR, then videoSessionParametersTemplate must have been created with VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-10276", + "text": "If videoSessionParametersTemplate is not VK_NULL_HANDLE and flags includes VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR, then videoSessionParametersTemplate must have been created with the same quantization map texel size as the one specified in the quantizationMapTexelSize member of the VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-10277", + "text": "If videoSessionParametersTemplate is not VK_NULL_HANDLE and flags does not include VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR, then videoSessionParametersTemplate must have been created without VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07203", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pNext chain must include a VkVideoDecodeH264SessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07204", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the number of elements of spsAddList must be less than or equal to the maxStdSPSCount specified in the VkVideoDecodeH264SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07205", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the number of elements of ppsAddList must be less than or equal to the maxStdPPSCount specified in the VkVideoDecodeH264SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07206", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pNext chain must include a VkVideoDecodeH265SessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07207", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of elements of vpsAddList must be less than or equal to the maxStdVPSCount specified in the VkVideoDecodeH265SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07208", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of elements of spsAddList must be less than or equal to the maxStdSPSCount specified in the VkVideoDecodeH265SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07209", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of elements of ppsAddList must be less than or equal to the maxStdPPSCount specified in the VkVideoDecodeH265SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-10794", + "text": "videoSession must not have been created with the codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-09258", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then videoSessionParametersTemplate must be VK_NULL_HANDLE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-09259", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pNext chain must include a VkVideoDecodeAV1SessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07210", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain must include a VkVideoEncodeH264SessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-04839", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the number of elements of spsAddList must be less than or equal to the maxStdSPSCount specified in the VkVideoEncodeH264SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-04840", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the number of elements of ppsAddList must be less than or equal to the maxStdPPSCount specified in the VkVideoEncodeH264SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-07211", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain must include a VkVideoEncodeH265SessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-04841", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the number of elements of vpsAddList must be less than or equal to the maxStdVPSCount specified in the VkVideoEncodeH265SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-04842", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the number of elements of spsAddList must be less than or equal to the maxStdSPSCount specified in the VkVideoEncodeH265SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-04843", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the number of elements of ppsAddList must be less than or equal to the maxStdPPSCount specified in the VkVideoEncodeH265SessionParametersCreateInfoKHR structure included in the pNext chain", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-08319", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then num_tile_columns_minus1 must be less than VkVideoEncodeH265CapabilitiesKHR::maxTiles.width, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile videoSession was created with, for each element of ppsAddList", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-08320", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then num_tile_rows_minus1 must be less than VkVideoEncodeH265CapabilitiesKHR::maxTiles.height, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile videoSession was created with, for each element of ppsAddList", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-10278", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then videoSessionParametersTemplate must be VK_NULL_HANDLE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-10279", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the pNext chain must include a VkVideoEncodeAV1SessionParametersCreateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-10280", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the stdOperatingPointCount member of the VkVideoEncodeAV1SessionParametersCreateInfoKHR structure included in the pNext chain must be less than or equal to VkVideoEncodeAV1CapabilitiesKHR::maxOperatingPoints, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile videoSession was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoDecodeAV1SessionParametersCreateInfoKHR, VkVideoDecodeH264SessionParametersCreateInfoKHR, VkVideoDecodeH265SessionParametersCreateInfoKHR, VkVideoEncodeAV1SessionParametersCreateInfoKHR, VkVideoEncodeH264SessionParametersCreateInfoKHR, VkVideoEncodeH265SessionParametersCreateInfoKHR, VkVideoEncodeQualityLevelInfoKHR, or VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoSessionParametersCreateFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-parameter", + "text": "If videoSessionParametersTemplate is not VK_NULL_HANDLE, videoSessionParametersTemplate must be a valid VkVideoSessionParametersKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSession-parameter", + "text": "videoSession must be a valid VkVideoSessionKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-videoSessionParametersTemplate-parent", + "text": "If videoSessionParametersTemplate is a valid handle, it must have been created, allocated, or retrieved from videoSession", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersCreateInfoKHR-commonparent", + "text": "Both of videoSession, and videoSessionParametersTemplate that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "vkDestroyVideoSessionParametersKHR": { + "core": [ + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-07212", + "text": "All submitted commands that refer to videoSessionParameters must have completed execution", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-07213", + "text": "If VkAllocationCallbacks were provided when videoSessionParameters was created, a compatible set of callbacks must be provided here", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-07214", + "text": "If no VkAllocationCallbacks were provided when videoSessionParameters was created, pAllocator must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-parameter", + "text": "If videoSessionParameters is not VK_NULL_HANDLE, videoSessionParameters must be a valid VkVideoSessionParametersKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkDestroyVideoSessionParametersKHR-videoSessionParameters-parent", + "text": "If videoSessionParameters is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/videocoding.html" + } + ] + }, + "vkUpdateVideoSessionParametersKHR": { + "core": [ + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-pUpdateInfo-07215", + "text": "pUpdateInfo->updateSequenceCount must equal the current update sequence counter of videoSessionParameters plus one", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07216", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoDecodeH264SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH264SequenceParameterSet entry with seq_parameter_set_id matching any of the elements of VkVideoDecodeH264SessionParametersAddInfoKHR::pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07217", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the number of StdVideoH264SequenceParameterSet entries already stored in it plus the value of the stdSPSCount member of the VkVideoDecodeH264SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoDecodeH264SessionParametersCreateInfoKHR::maxStdSPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07218", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoDecodeH264SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH264PictureParameterSet entry with both seq_parameter_set_id and pic_parameter_set_id matching any of the elements of VkVideoDecodeH264SessionParametersAddInfoKHR::pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07219", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the number of StdVideoH264PictureParameterSet entries already stored in it plus the value of the stdPPSCount member of the VkVideoDecodeH264SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoDecodeH264SessionParametersCreateInfoKHR::maxStdPPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07220", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoDecodeH265SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH265VideoParameterSet entry with vps_video_parameter_set_id matching any of the elements of VkVideoDecodeH265SessionParametersAddInfoKHR::pStdVPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07221", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of StdVideoH265VideoParameterSet entries already stored in it plus the value of the stdVPSCount member of the VkVideoDecodeH265SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoDecodeH265SessionParametersCreateInfoKHR::maxStdVPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07222", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoDecodeH265SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH265SequenceParameterSet entry with both sps_video_parameter_set_id and sps_seq_parameter_set_id matching any of the elements of VkVideoDecodeH265SessionParametersAddInfoKHR::pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07223", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of StdVideoH265SequenceParameterSet entries already stored in it plus the value of the stdSPSCount member of the VkVideoDecodeH265SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoDecodeH265SessionParametersCreateInfoKHR::maxStdSPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07224", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoDecodeH265SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH265PictureParameterSet entry with sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id all matching any of the elements of VkVideoDecodeH265SessionParametersAddInfoKHR::pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07225", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the number of StdVideoH265PictureParameterSet entries already stored in it plus the value of the stdPPSCount member of the VkVideoDecodeH265SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoDecodeH265SessionParametersCreateInfoKHR::maxStdPPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-09260", + "text": "videoSessionParameters must not have been created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07226", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH264SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH264SequenceParameterSet entry with seq_parameter_set_id matching any of the elements of VkVideoEncodeH264SessionParametersAddInfoKHR::pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-06441", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the number of StdVideoH264SequenceParameterSet entries already stored in it plus the value of the stdSPSCount member of the VkVideoEncodeH264SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoEncodeH264SessionParametersCreateInfoKHR::maxStdSPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07227", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH264SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH264PictureParameterSet entry with both seq_parameter_set_id and pic_parameter_set_id matching any of the elements of VkVideoEncodeH264SessionParametersAddInfoKHR::pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-06442", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the number of StdVideoH264PictureParameterSet entries already stored in it plus the value of the stdPPSCount member of the VkVideoEncodeH264SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoEncodeH264SessionParametersCreateInfoKHR::maxStdPPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07228", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH265SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH265VideoParameterSet entry with vps_video_parameter_set_id matching any of the elements of VkVideoEncodeH265SessionParametersAddInfoKHR::pStdVPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-06443", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the number of StdVideoH265VideoParameterSet entries already stored in it plus the value of the stdVPSCount member of the VkVideoEncodeH265SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoEncodeH265SessionParametersCreateInfoKHR::maxStdVPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07229", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH265SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH265SequenceParameterSet entry with both sps_video_parameter_set_id and sps_seq_parameter_set_id matching any of the elements of VkVideoEncodeH265SessionParametersAddInfoKHR::pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-06444", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the number of StdVideoH265SequenceParameterSet entries already stored in it plus the value of the stdSPSCount member of the VkVideoEncodeH265SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoEncodeH265SessionParametersCreateInfoKHR::maxStdSPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-07230", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH265SessionParametersAddInfoKHR structure, then videoSessionParameters must not already contain a StdVideoH265PictureParameterSet entry with sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id all matching any of the elements of VkVideoEncodeH265SessionParametersAddInfoKHR::pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-06445", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the number of StdVideoH265PictureParameterSet entries already stored in it plus the value of the stdPPSCount member of the VkVideoEncodeH265SessionParametersAddInfoKHR structure included in the pUpdateInfo->pNext chain must be less than or equal to the VkVideoEncodeH265SessionParametersCreateInfoKHR::maxStdPPSCount videoSessionParameters was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-08321", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH265SessionParametersAddInfoKHR structure, then num_tile_columns_minus1 must be less than VkVideoEncodeH265CapabilitiesKHR::maxTiles.width, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile videoSessionParameters was created with, for each element of VkVideoEncodeH265SessionParametersAddInfoKHR::pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-08322", + "text": "If videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the pNext chain of pUpdateInfo includes a VkVideoEncodeH265SessionParametersAddInfoKHR structure, then num_tile_rows_minus1 must be less than VkVideoEncodeH265CapabilitiesKHR::maxTiles.height, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile videoSessionParameters was created with, for each element of VkVideoEncodeH265SessionParametersAddInfoKHR::pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-10281", + "text": "videoSessionParameters must not have been created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-parameter", + "text": "videoSessionParameters must be a valid VkVideoSessionParametersKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-pUpdateInfo-parameter", + "text": "pUpdateInfo must be a valid pointer to a valid VkVideoSessionParametersUpdateInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkUpdateVideoSessionParametersKHR-videoSessionParameters-parent", + "text": "videoSessionParameters must have been created, allocated, or retrieved from device", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoSessionParametersUpdateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoSessionParametersUpdateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersUpdateInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoDecodeH264SessionParametersAddInfoKHR, VkVideoDecodeH265SessionParametersAddInfoKHR, VkVideoEncodeH264SessionParametersAddInfoKHR, or VkVideoEncodeH265SessionParametersAddInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoSessionParametersUpdateInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCmdBeginVideoCodingKHR": { + "core": [ + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07231", + "text": "The VkCommandPool that commandBuffer was allocated from must support the video codec operation pBeginInfo->videoSession was created with, as returned by vkGetPhysicalDeviceQueueFamilyProperties2 in VkQueueFamilyVideoPropertiesKHR::videoCodecOperations", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-None-07232", + "text": "There must be no active queries", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07233", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, then pBeginInfo->videoSession must not have been created with VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07234", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, then pBeginInfo->videoSession must have been created with VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07235", + "text": "If commandBuffer is an unprotected command buffer, protectedNoFault is not supported, and the pPictureResource member of any element of pBeginInfo->pReferenceSlots is not NULL, then pPictureResource->imageViewBinding for that element must not specify an image view created from a protected image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-07236", + "text": "If commandBuffer is a protected command buffer protectedNoFault is not supported, and the pPictureResource member of any element of pBeginInfo->pReferenceSlots is not NULL, then pPictureResource->imageViewBinding for that element must specify an image view created from a protected image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-slotIndex-07239", + "text": "If the slotIndex member of any element of pBeginInfo->pReferenceSlots is not negative, then it must specify the index of a DPB slot that is in the active state in pBeginInfo->videoSession at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pPictureResource-07265", + "text": "Each video picture resource specified by any non-NULL pPictureResource member specified in the elements of pBeginInfo->pReferenceSlots for which slotIndex is not negative must match one of the video picture resources currently associated with the DPB slot index of pBeginInfo->videoSession specified by slotIndex at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pBeginInfo-08253", + "text": "If pBeginInfo->videoSession was created with a video encode operation and the pNext chain of pBeginInfo does not include an instance of the VkVideoEncodeRateControlInfoKHR structure, then the rate control mode configured for pBeginInfo->videoSession at the time the command is executed on the device must be VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pBeginInfo-08254", + "text": "If pBeginInfo->videoSession was created with a video encode operation and the pNext chain of pBeginInfo includes an instance of the VkVideoEncodeRateControlInfoKHR structure, then it must match the rate control state configured for pBeginInfo->videoSession at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pBeginInfo-08255", + "text": "If pBeginInfo->videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, the current rate control mode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, and VkVideoEncodeH264CapabilitiesKHR::requiresGopRemainingFrames is VK_TRUE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the pBeginInfo->videoSession was created with, then the pNext chain of pBeginInfo must include an instance of the VkVideoEncodeH264GopRemainingFrameInfoKHR with its useGopRemainingFrames member set to VK_TRUE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pBeginInfo-08256", + "text": "If pBeginInfo->videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, the current rate control mode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, and VkVideoEncodeH265CapabilitiesKHR::requiresGopRemainingFrames is VK_TRUE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the pBeginInfo->videoSession was created with, then the pNext chain of pBeginInfo must include an instance of the VkVideoEncodeH265GopRemainingFrameInfoKHR with its useGopRemainingFrames member set to VK_TRUE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pBeginInfo-10282", + "text": "If pBeginInfo->videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, the current rate control mode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, and VkVideoEncodeAV1CapabilitiesKHR::requiresGopRemainingFrames is VK_TRUE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the pBeginInfo->videoSession was created with, then the pNext chain of pBeginInfo must include an instance of the VkVideoEncodeAV1GopRemainingFrameInfoKHR with its useGopRemainingFrames member set to VK_TRUE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-pBeginInfo-parameter", + "text": "pBeginInfo must be a valid pointer to a valid VkVideoBeginCodingInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support decode, or encode operations", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdBeginVideoCodingKHR-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoBeginCodingInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-07237", + "text": "videoSession must have memory bound to all of its memory bindings returned by vkGetVideoSessionMemoryRequirementsKHR for videoSession", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-slotIndex-04856", + "text": "Each non-negative VkVideoReferenceSlotInfoKHR::slotIndex specified in the elements of pReferenceSlots must be less than the VkVideoSessionCreateInfoKHR::maxDpbSlots specified when videoSession was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07238", + "text": "Each video picture resource corresponding to any non-NULL pPictureResource member specified in the elements of pReferenceSlots must be unique within pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07240", + "text": "If the pPictureResource member of any element of pReferenceSlots is not NULL, then the image view specified in pPictureResource->imageViewBinding for that element must be compatible with the video profile videoSession was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07241", + "text": "If the pPictureResource member of any element of pReferenceSlots is not NULL, then the format of the image view specified in pPictureResource->imageViewBinding for that element must match the VkVideoSessionCreateInfoKHR::referencePictureFormat videoSession was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07242", + "text": "If the pPictureResource member of any element of pReferenceSlots is not NULL, then its codedOffset member must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pPictureResource-07243", + "text": "If the pPictureResource member of any element of pReferenceSlots is not NULL, then its codedExtent member must be between minCodedExtent and maxCodedExtent, inclusive, videoSession was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-flags-07244", + "text": "If VkVideoCapabilitiesKHR::flags does not include VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile videoSession was created with, then pPictureResource->imageViewBinding of all elements of pReferenceSlots with a non-NULL pPictureResource member must specify image views created from the same image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-slotIndex-07245", + "text": "If videoSession was created with a decode operation and the slotIndex member of any element of pReferenceSlots is not negative, then the image view specified in pPictureResource->imageViewBinding for that element must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-slotIndex-07246", + "text": "If videoSession was created with an encode operation and the slotIndex member of any element of pReferenceSlots is not negative, then the image view specified in pPictureResource->imageViewBinding for that element must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-07247", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then videoSessionParameters must not be VK_NULL_HANDLE , unless the videoMaintenance2 feature is enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-07248", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then videoSessionParameters must not be VK_NULL_HANDLE , unless the videoMaintenance2 feature is enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-09261", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then videoSessionParameters must not be VK_NULL_HANDLE , unless the videoMaintenance2 feature is enabled", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-07249", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then videoSessionParameters must not be VK_NULL_HANDLE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-07250", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then videoSessionParameters must not be VK_NULL_HANDLE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-10283", + "text": "If videoSession was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then videoSessionParameters must not be VK_NULL_HANDLE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-04857", + "text": "If videoSessionParameters is not VK_NULL_HANDLE, it must have been created with videoSession specified in VkVideoSessionParametersCreateInfoKHR::videoSession", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeAV1GopRemainingFrameInfoKHR, VkVideoEncodeAV1RateControlInfoKHR, VkVideoEncodeH264GopRemainingFrameInfoKHR, VkVideoEncodeH264RateControlInfoKHR, VkVideoEncodeH265GopRemainingFrameInfoKHR, VkVideoEncodeH265RateControlInfoKHR, or VkVideoEncodeRateControlInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSession-parameter", + "text": "videoSession must be a valid VkVideoSessionKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-parameter", + "text": "If videoSessionParameters is not VK_NULL_HANDLE, videoSessionParameters must be a valid VkVideoSessionParametersKHR handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-pReferenceSlots-parameter", + "text": "If referenceSlotCount is not 0, pReferenceSlots must be a valid pointer to an array of referenceSlotCount valid VkVideoReferenceSlotInfoKHR structures", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-videoSessionParameters-parent", + "text": "If videoSessionParameters is a valid handle, it must have been created, allocated, or retrieved from videoSession", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoBeginCodingInfoKHR-commonparent", + "text": "Both of videoSession, and videoSessionParameters that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoReferenceSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoReferenceSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoReferenceSlotInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoDecodeAV1DpbSlotInfoKHR, VkVideoDecodeH264DpbSlotInfoKHR, VkVideoDecodeH265DpbSlotInfoKHR, VkVideoEncodeAV1DpbSlotInfoKHR, VkVideoEncodeH264DpbSlotInfoKHR, VkVideoEncodeH265DpbSlotInfoKHR, or VkVideoReferenceIntraRefreshInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoReferenceSlotInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoReferenceSlotInfoKHR-pPictureResource-parameter", + "text": "If pPictureResource is not NULL, pPictureResource must be a valid pointer to a valid VkVideoPictureResourceInfoKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCmdEndVideoCodingKHR": { + "core": [ + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-None-07251", + "text": "There must be no active queries", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-pEndCodingInfo-parameter", + "text": "pEndCodingInfo must be a valid pointer to a valid VkVideoEndCodingInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support decode, or encode operations", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-videocoding", + "text": "This command must only be called inside of a video coding scope", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEndVideoCodingKHR-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEndCodingInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEndCodingInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEndCodingInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEndCodingInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCmdControlVideoCodingKHR": { + "core": [ + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-flags-07017", + "text": "If pCodingControlInfo->flags does not include VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR, then the bound video session must not be in uninitialized state at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-pCodingControlInfo-08243", + "text": "If the bound video session was not created with an encode operation, then pCodingControlInfo->flags must not include VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR or VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-pCodingControlInfo-parameter", + "text": "pCodingControlInfo must be a valid pointer to a valid VkVideoCodingControlInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support decode, or encode operations", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-videocoding", + "text": "This command must only be called inside of a video coding scope", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdControlVideoCodingKHR-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoCodingControlInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-flags-07018", + "text": "If flags includes VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR, then the pNext chain must include a VkVideoEncodeRateControlInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-flags-08349", + "text": "If flags includes VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR, then the pNext chain must include a VkVideoEncodeQualityLevelInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeAV1RateControlInfoKHR, VkVideoEncodeH264RateControlInfoKHR, VkVideoEncodeH265RateControlInfoKHR, VkVideoEncodeQualityLevelInfoKHR, or VkVideoEncodeRateControlInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoCodingControlFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoCodingControlInfoKHR-flags-requiredbitmask", + "text": "flags must not be 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoInlineQueryInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoInlineQueryInfoKHR-queryPool-08372", + "text": "If queryPool is not VK_NULL_HANDLE, then firstQuery must be less than the number of queries in queryPool", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoInlineQueryInfoKHR-queryPool-08373", + "text": "If queryPool is not VK_NULL_HANDLE, then the sum of firstQuery and queryCount must be less than or equal to the number of queries in queryPool", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoInlineQueryInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoInlineQueryInfoKHR-queryPool-parameter", + "text": "If queryPool is not VK_NULL_HANDLE, queryPool must be a valid VkQueryPool handle", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCmdDecodeVideoKHR": { + "core": [ + { + "vuid": "VUID-vkCmdDecodeVideoKHR-None-08249", + "text": "The bound video session must have been created with a decode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-None-07011", + "text": "The bound video session must not be in uninitialized state at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-opCount-07134", + "text": "For each active query, the active query index corresponding to the query type of that query plus opCount must be less than or equal to the last activatable query index corresponding to the query type of that query plus one", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-08365", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoInlineQueryInfoKHR structure with its queryPool member specifying a valid VkQueryPool handle, then VkVideoInlineQueryInfoKHR::queryCount must equal opCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-08366", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoInlineQueryInfoKHR structure with its queryPool member specifying a valid VkQueryPool handle, then all the queries used by the command, as specified by the VkVideoInlineQueryInfoKHR structure, must be unavailable", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-queryType-08367", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, then the queryType used to create the queryPool specified in the VkVideoInlineQueryInfoKHR structure included in the pNext chain of pDecodeInfo must be VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-queryPool-08368", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, then the queryPool specified in the VkVideoInlineQueryInfoKHR structure included in the pNext chain of pDecodeInfo must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-queryType-08369", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, and the queryType used to create the queryPool specified in the VkVideoInlineQueryInfoKHR structure included in the pNext chain of pDecodeInfo is VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then the VkCommandPool that commandBuffer was allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07135", + "text": "pDecodeInfo->srcBuffer must be compatible with the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-commandBuffer-07136", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, then pDecodeInfo->srcBuffer must not be a protected buffer", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07138", + "text": "pDecodeInfo->srcBufferOffset must be an integer multiple of VkVideoCapabilitiesKHR::minBitstreamBufferOffsetAlignment, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07139", + "text": "pDecodeInfo->srcBufferRange must be an integer multiple of VkVideoCapabilitiesKHR::minBitstreamBufferSizeAlignment, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07140", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL and VkVideoDecodeCapabilitiesKHR::flags does not include VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the video picture resources specified by pDecodeInfo->dstPictureResource and pDecodeInfo->pSetupReferenceSlot->pPictureResource must not match", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07141", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL and none of the following is true:
\n\n
\n
\n

then the video picture resources specified by\npDecodeInfo->dstPictureResource and\npDecodeInfo->pSetupReferenceSlot->pPictureResource must\nmatch

\n
", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07142", + "text": "pDecodeInfo->dstPictureResource.imageViewBinding must be compatible with the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07143", + "text": "The format of pDecodeInfo->dstPictureResource.imageViewBinding must match the VkVideoSessionCreateInfoKHR::pictureFormat the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07144", + "text": "pDecodeInfo->dstPictureResource.codedOffset must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07145", + "text": "pDecodeInfo->dstPictureResource.codedExtent must be between minCodedExtent and maxCodedExtent, inclusive, the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07146", + "text": "pDecodeInfo->dstPictureResource.imageViewBinding must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-commandBuffer-07147", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, then pDecodeInfo->dstPictureResource.imageViewBinding must not have been created from a protected image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-commandBuffer-07148", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, then pDecodeInfo->dstPictureResource.imageViewBinding must have been created from a protected image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-08376", + "text": "pDecodeInfo->pSetupReferenceSlot must not be NULL unless the bound video session was created with VkVideoSessionCreateInfoKHR::maxDpbSlots equal to zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07170", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL, then pDecodeInfo->pSetupReferenceSlot->slotIndex must be less than the VkVideoSessionCreateInfoKHR::maxDpbSlots specified when the bound video session was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07173", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL, then pDecodeInfo->pSetupReferenceSlot->pPictureResource->codedOffset must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07149", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL, then pDecodeInfo->pSetupReferenceSlot->pPictureResource must match one of the bound reference picture resource", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-activeReferencePictureCount-07150", + "text": "activeReferencePictureCount must be less than or equal to the VkVideoSessionCreateInfoKHR::maxActiveReferencePictures specified when the bound video session was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-slotIndex-07256", + "text": "The slotIndex member of each element of pDecodeInfo->pReferenceSlots must be less than the VkVideoSessionCreateInfoKHR::maxDpbSlots specified when the bound video session was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-codedOffset-07257", + "text": "The codedOffset member of the VkVideoPictureResourceInfoKHR structure pointed to by the pPictureResource member of each element of pDecodeInfo->pReferenceSlots must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07151", + "text": "The pPictureResource member of each element of pDecodeInfo->pReferenceSlots must match one of the bound reference picture resource associated with the DPB slot index specified in the slotIndex member of that element", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07264", + "text": "Each video picture resource corresponding to the pPictureResource member specified in the elements of pDecodeInfo->pReferenceSlots must be unique within pDecodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-dpbFrameUseCount-07176", + "text": "All elements of dpbFrameUseCount must be less than or equal to 1", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-dpbTopFieldUseCount-07177", + "text": "All elements of dpbTopFieldUseCount must be less than or equal to 1", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-dpbBottomFieldUseCount-07178", + "text": "All elements of dpbBottomFieldUseCount must be less than or equal to 1", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-10801", + "text": "If pDecodeInfo->pSetupReferenceSlot is NULL or pDecodeInfo->pSetupReferenceSlot->pPictureResource does not refer to the same image subresource as pDecodeInfo->dstPictureResource, then the image subresource referred to by pDecodeInfo->dstPictureResource must be in the VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR layout at the time the video decode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-10802", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL and pDecodeInfo->pSetupReferenceSlot->pPictureResource refers to the same image subresource as pDecodeInfo->dstPictureResource, then the image subresource referred to by pDecodeInfo->dstPictureResource must be in the VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout at the time the video decode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-10803", + "text": "If pDecodeInfo->pSetupReferenceSlot is not NULL, then the image subresource referred to by pDecodeInfo->pSetupReferenceSlot->pPictureResource must be in the VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout at the time the video decode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pPictureResource-10804", + "text": "The image subresource referred to by the pPictureResource member of each element of pDecodeInfo->pReferenceSlots must be in the VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR layout at the time the video decode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-07152", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pNext chain of pDecodeInfo must include a VkVideoDecodeH264PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-None-07258", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR but was not created with interlaced frame support, then the decode output picture must represent a frame", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pSliceOffsets-07153", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then all elements of the pSliceOffsets member of the VkVideoDecodeH264PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-None-10400", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then there must be a bound video session parameters object if any of the following conditions are not met:
\n\n
", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-StdVideoH264SequenceParameterSet-07154", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the bound video session parameters object must contain a StdVideoH264SequenceParameterSet entry with seq_parameter_set_id matching StdVideoDecodeH264PictureInfo::seq_parameter_set_id that is provided in the pStdPictureInfo member of the VkVideoDecodeH264PictureInfoKHR structure included in the pNext chain of pDecodeInfo , unless the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR and the pNext chain of pDecodeInfo includes a VkVideoDecodeH264InlineSessionParametersInfoKHR structure, and its pStdSPS member is not equal to NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-10401", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoDecodeH264InlineSessionParametersInfoKHR structure with a non-NULL pStdSPS member, then pStdSPS->seq_parameter_set_id must equal StdVideoDecodeH264PictureInfo::seq_parameter_set_id provided in the pStdPictureInfo member of the VkVideoDecodeH264PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-StdVideoH264PictureParameterSet-07155", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the bound video session parameters object must contain a StdVideoH264PictureParameterSet entry with seq_parameter_set_id and pic_parameter_set_id matching StdVideoDecodeH264PictureInfo::seq_parameter_set_id and StdVideoDecodeH264PictureInfo::pic_parameter_set_id, respectively, that are provided in the pStdPictureInfo member of the VkVideoDecodeH264PictureInfoKHR structure included in the pNext chain of pDecodeInfo , unless the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR and the pNext chain of pDecodeInfo includes a VkVideoDecodeH264InlineSessionParametersInfoKHR structure, and its pStdPPS member is not equal to NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-10402", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoDecodeH264InlineSessionParametersInfoKHR structure with a non-NULL pStdPPS member, then pStdPPS->seq_parameter_set_id and pStdPPS->pic_parameter_set_id must equal StdVideoDecodeH264PictureInfo::seq_parameter_set_id and StdVideoDecodeH264PictureInfo::pic_parameter_set_id, respectively, provided in the pStdPictureInfo member of the VkVideoDecodeH264PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07156", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and pDecodeInfo->pSetupReferenceSlot is not NULL, then the pNext chain of pDecodeInfo->pSetupReferenceSlot must include a VkVideoDecodeH264DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07259", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR but was not created with interlaced frame support, and pDecodeInfo->pSetupReferenceSlot is not NULL, then the reconstructed picture must represent a frame", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-07157", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, then the pNext chain of each element of pDecodeInfo->pReferenceSlots must include a VkVideoDecodeH264DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07260", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR but was not created with interlaced frame support, then each active reference picture corresponding to the elements of pDecodeInfo->pReferenceSlots must represent a frame", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07261", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, pDecodeInfo->pSetupReferenceSlot is not NULL, and the decode output picture represents a frame, then the reconstructed picture must also represent a frame", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07262", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, pDecodeInfo->pSetupReferenceSlot is not NULL, and the decode output picture represents a top field, then the reconstructed picture must also represent a top field", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07263", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR, pDecodeInfo->pSetupReferenceSlot is not NULL, and the decode output picture represents a bottom field, then the reconstructed picture must also represent a bottom field", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07266", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and an active reference picture corresponding to any element of pDecodeInfo->pReferenceSlots represents a frame, then the DPB slot index of the bound video session specified by the slotIndex member of that element must be currently associated with a frame picture matching the video picture resource specified by the pPictureResource member of the same element at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07267", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and an active reference picture corresponding to any element of pDecodeInfo->pReferenceSlots represents a top field, then the DPB slot index of the bound video session specified by the slotIndex member of that element must be currently associated with a top field picture matching the video picture resource specified by the pPictureResource member of the same element at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07268", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR and an active reference picture corresponding to any element of pDecodeInfo->pReferenceSlots represents a bottom field, then the DPB slot index of the bound video session specified by the slotIndex member of that element must be currently associated with a bottom field picture matching the video picture resource specified by the pPictureResource member of the same element at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-07158", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pNext chain of pDecodeInfo must include a VkVideoDecodeH265PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pSliceSegmentOffsets-07159", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then all elements of the pSliceSegmentOffsets member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-None-10403", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then there must be a bound video session parameters object if any of the following conditions are not met:
\n\n
", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-StdVideoH265VideoParameterSet-07160", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the bound video session parameters object must contain a StdVideoH265VideoParameterSet entry with vps_video_parameter_set_id matching StdVideoDecodeH265PictureInfo::sps_video_parameter_set_id that is provided in the pStdPictureInfo member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo , unless the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR and the pNext chain of pDecodeInfo includes a VkVideoDecodeH265InlineSessionParametersInfoKHR structure, and its pStdVPS member is not equal to NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-10404", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoDecodeH265InlineSessionParametersInfoKHR structure with a non-NULL pStdVPS member, then pStdVPS->vps_video_parameter_set_id must equal StdVideoDecodeH265PictureInfo::sps_video_parameter_set_id provided in the pStdPictureInfo member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-StdVideoH265SequenceParameterSet-07161", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the bound video session parameters object must contain a StdVideoH265SequenceParameterSet entry with sps_video_parameter_set_id and sps_seq_parameter_set_id matching StdVideoDecodeH265PictureInfo::sps_video_parameter_set_id and StdVideoDecodeH265PictureInfo::pps_seq_parameter_set_id, respectively, that are provided in the pStdPictureInfo member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo , unless the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR and the pNext chain of pDecodeInfo includes a VkVideoDecodeH265InlineSessionParametersInfoKHR structure, and its pStdSPS member is not equal to NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-10405", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoDecodeH265InlineSessionParametersInfoKHR structure with a non-NULL pStdSPS member, then pStdSPS->sps_video_parameter_set_id and pStdSPS->sps_seq_parameter_set_id must equal StdVideoDecodeH265PictureInfo::sps_video_parameter_set_id and StdVideoDecodeH265PictureInfo::pps_seq_parameter_set_id, respectively, provided in the pStdPictureInfo member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-StdVideoH265PictureParameterSet-07162", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the bound video session parameters object must contain a StdVideoH265PictureParameterSet entry with sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id matching StdVideoDecodeH265PictureInfo::sps_video_parameter_set_id, StdVideoDecodeH265PictureInfo::pps_seq_parameter_set_id, and StdVideoDecodeH265PictureInfo::pps_pic_parameter_set_id, respectively, that are provided in the pStdPictureInfo member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo , unless the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR and the pNext chain of pDecodeInfo includes a VkVideoDecodeH265InlineSessionParametersInfoKHR structure, and its pStdPPS member is not equal to NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-10406", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and with VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR, and the pNext chain of pDecodeInfo includes a VkVideoDecodeH265InlineSessionParametersInfoKHR structure with a non-NULL pStdPPS member, then pStdPPS->sps_video_parameter_set_id, pStdPPS->pps_seq_parameter_set_id, and pStdPPS->pps_pic_parameter_set_id must equal StdVideoDecodeH265PictureInfo::sps_video_parameter_set_id, StdVideoDecodeH265PictureInfo::pps_seq_parameter_set_id, and StdVideoDecodeH265PictureInfo::pps_pic_parameter_set_id, respectively, provided in the pStdPictureInfo member of the VkVideoDecodeH265PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07163", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR and pDecodeInfo->pSetupReferenceSlot is not NULL, then the pNext chain of pDecodeInfo->pSetupReferenceSlot must include a VkVideoDecodeH265DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-07164", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR, then the pNext chain of each element of pDecodeInfo->pReferenceSlots must include a VkVideoDecodeH265DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-10805", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the pNext chain of pDecodeInfo must include a VkVideoDecodeVP9PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-uncompressedHeaderOffset-10806", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the uncompressedHeaderOffset member of the VkVideoDecodeVP9PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-compressedHeaderOffset-10807", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the compressedHeaderOffset member of the VkVideoDecodeVP9PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-tilesOffset-10808", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the tilesOffset member of the VkVideoDecodeVP9PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-referenceNameSlotIndices-10809", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then each element of the referenceNameSlotIndices array member of the VkVideoDecodeVP9PictureInfoKHR structure included in the pNext chain of pDecodeInfo must either be negative or must equal the slotIndex member of one of the elements of pDecodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-slotIndex-10810", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR, then the slotIndex member of each element of pDecodeInfo->pReferenceSlots must equal one of the elements of the referenceNameSlotIndices array member of the VkVideoDecodeVP9PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-filmGrainSupport-09248", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR and VkVideoDecodeAV1ProfileInfoKHR::filmGrainSupport set to VK_FALSE, then film grain must not be enabled for the decoded picture", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-09249", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, pDecodeInfo->pSetupReferenceSlot is not NULL, and film grain is enabled for the decoded picture, then the video picture resources specified by pDecodeInfo->dstPictureResource and pDecodeInfo->pSetupReferenceSlot->pPictureResource must not match", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-09250", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pNext chain of pDecodeInfo must include a VkVideoDecodeAV1PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-frameHeaderOffset-09251", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the frameHeaderOffset member of the VkVideoDecodeAV1PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pTileOffsets-09253", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then all elements of the pTileOffsets member of the VkVideoDecodeAV1PictureInfoKHR structure included in the pNext chain of pDecodeInfo must be less than pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pTileOffsets-09252", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then for each element i of the pTileOffsets and pTileSizes members of the VkVideoDecodeAV1PictureInfoKHR structure included in the pNext chain of pDecodeInfo the sum of pTileOffsets[i] and pTileSizes[i] must be less than or equal to pDecodeInfo->srcBufferRange", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-09254", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR and pDecodeInfo->pSetupReferenceSlot is not NULL, then the pNext chain of pDecodeInfo->pSetupReferenceSlot must include a VkVideoDecodeAV1DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pNext-09255", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the pNext chain of each element of pDecodeInfo->pReferenceSlots must include a VkVideoDecodeAV1DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-referenceNameSlotIndices-09262", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then each element of the referenceNameSlotIndices array member of the VkVideoDecodeAV1PictureInfoKHR structure included in the pNext chain of pDecodeInfo must either be negative or must equal the slotIndex member of one of the elements of pDecodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-slotIndex-09263", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then the slotIndex member of each element of pDecodeInfo->pReferenceSlots must equal one of the elements of the referenceNameSlotIndices array member of the VkVideoDecodeAV1PictureInfoKHR structure included in the pNext chain of pDecodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-None-10407", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR, then there must be a bound video session parameters object if any of the following conditions are not met:
\n\n
", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-pDecodeInfo-parameter", + "text": "pDecodeInfo must be a valid pointer to a valid VkVideoDecodeInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support decode operations", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-videocoding", + "text": "This command must only be called inside of a video coding scope", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdDecodeVideoKHR-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeInfoKHR-srcBuffer-07165", + "text": "srcBuffer must have been created with VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR set", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-srcBufferOffset-07166", + "text": "srcBufferOffset must be less than the size of srcBuffer", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-srcBufferRange-07167", + "text": "srcBufferRange must be less than or equal to the size of srcBuffer minus srcBufferOffset", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-pSetupReferenceSlot-07168", + "text": "If pSetupReferenceSlot is not NULL, then its slotIndex member must not be negative", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-pSetupReferenceSlot-07169", + "text": "If pSetupReferenceSlot is not NULL, then its pPictureResource must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-slotIndex-07171", + "text": "The slotIndex member of each element of pReferenceSlots must not be negative", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-pPictureResource-07172", + "text": "The pPictureResource member of each element of pReferenceSlots must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoDecodeAV1InlineSessionParametersInfoKHR, VkVideoDecodeAV1PictureInfoKHR, VkVideoDecodeH264InlineSessionParametersInfoKHR, VkVideoDecodeH264PictureInfoKHR, VkVideoDecodeH265InlineSessionParametersInfoKHR, VkVideoDecodeH265PictureInfoKHR, VkVideoDecodeVP9PictureInfoKHR, or VkVideoInlineQueryInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-srcBuffer-parameter", + "text": "srcBuffer must be a valid VkBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-dstPictureResource-parameter", + "text": "dstPictureResource must be a valid VkVideoPictureResourceInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-pSetupReferenceSlot-parameter", + "text": "If pSetupReferenceSlot is not NULL, pSetupReferenceSlot must be a valid pointer to a valid VkVideoReferenceSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeInfoKHR-pReferenceSlots-parameter", + "text": "If referenceSlotCount is not 0, pReferenceSlots must be a valid pointer to an array of referenceSlotCount valid VkVideoReferenceSlotInfoKHR structures", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264ProfileInfoKHR-pictureLayout-parameter", + "text": "If pictureLayout is not 0, pictureLayout must be a valid VkVideoDecodeH264PictureLayoutFlagBitsKHR value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264SessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersCreateInfoKHR-pParametersAddInfo-parameter", + "text": "If pParametersAddInfo is not NULL, pParametersAddInfo must be a valid pointer to a valid VkVideoDecodeH264SessionParametersAddInfoKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264SessionParametersAddInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-None-04825", + "text": "The seq_parameter_set_id member of each StdVideoH264SequenceParameterSet structure specified in the elements of pStdSPSs must be unique within pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-None-04826", + "text": "The pair constructed from the seq_parameter_set_id and pic_parameter_set_id members of each StdVideoH264PictureParameterSet structure specified in the elements of pStdPPSs must be unique within pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-pStdSPSs-parameter", + "text": "If stdSPSCount is not 0, pStdSPSs must be a valid pointer to an array of stdSPSCount StdVideoH264SequenceParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264SessionParametersAddInfoKHR-pStdPPSs-parameter", + "text": "If stdPPSCount is not 0, pStdPPSs must be a valid pointer to an array of stdPPSCount StdVideoH264PictureParameterSet values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264InlineSessionParametersInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264InlineSessionParametersInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264InlineSessionParametersInfoKHR-pStdSPS-parameter", + "text": "If pStdSPS is not NULL, pStdSPS must be a valid pointer to a valid StdVideoH264SequenceParameterSet value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264InlineSessionParametersInfoKHR-pStdPPS-parameter", + "text": "If pStdPPS is not NULL, pStdPPS must be a valid pointer to a valid StdVideoH264PictureParameterSet value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoDecodeH264PictureInfo value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264PictureInfoKHR-pSliceOffsets-parameter", + "text": "pSliceOffsets must be a valid pointer to an array of sliceCount uint32_t values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264PictureInfoKHR-sliceCount-arraylength", + "text": "sliceCount must be greater than 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH264DpbSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH264DpbSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH264DpbSlotInfoKHR-pStdReferenceInfo-parameter", + "text": "pStdReferenceInfo must be a valid pointer to a valid StdVideoDecodeH264ReferenceInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265SessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersCreateInfoKHR-pParametersAddInfo-parameter", + "text": "If pParametersAddInfo is not NULL, pParametersAddInfo must be a valid pointer to a valid VkVideoDecodeH265SessionParametersAddInfoKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265SessionParametersAddInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-None-04833", + "text": "The vps_video_parameter_set_id member of each StdVideoH265VideoParameterSet structure specified in the elements of pStdVPSs must be unique within pStdVPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-None-04834", + "text": "The pair constructed from the sps_video_parameter_set_id and sps_seq_parameter_set_id members of each StdVideoH265SequenceParameterSet structure specified in the elements of pStdSPSs must be unique within pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-None-04835", + "text": "The triplet constructed from the sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id members of each StdVideoH265PictureParameterSet structure specified in the elements of pStdPPSs must be unique within pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-pStdVPSs-parameter", + "text": "If stdVPSCount is not 0, pStdVPSs must be a valid pointer to an array of stdVPSCount StdVideoH265VideoParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-pStdSPSs-parameter", + "text": "If stdSPSCount is not 0, pStdSPSs must be a valid pointer to an array of stdSPSCount StdVideoH265SequenceParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265SessionParametersAddInfoKHR-pStdPPSs-parameter", + "text": "If stdPPSCount is not 0, pStdPPSs must be a valid pointer to an array of stdPPSCount StdVideoH265PictureParameterSet values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265InlineSessionParametersInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265InlineSessionParametersInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265InlineSessionParametersInfoKHR-pStdVPS-parameter", + "text": "If pStdVPS is not NULL, pStdVPS must be a valid pointer to a valid StdVideoH265VideoParameterSet value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265InlineSessionParametersInfoKHR-pStdSPS-parameter", + "text": "If pStdSPS is not NULL, pStdSPS must be a valid pointer to a valid StdVideoH265SequenceParameterSet value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265InlineSessionParametersInfoKHR-pStdPPS-parameter", + "text": "If pStdPPS is not NULL, pStdPPS must be a valid pointer to a valid StdVideoH265PictureParameterSet value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoDecodeH265PictureInfo value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265PictureInfoKHR-pSliceSegmentOffsets-parameter", + "text": "pSliceSegmentOffsets must be a valid pointer to an array of sliceSegmentCount uint32_t values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265PictureInfoKHR-sliceSegmentCount-arraylength", + "text": "sliceSegmentCount must be greater than 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeH265DpbSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeH265DpbSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeH265DpbSlotInfoKHR-pStdReferenceInfo-parameter", + "text": "pStdReferenceInfo must be a valid pointer to a valid StdVideoDecodeH265ReferenceInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeVP9ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeVP9ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeVP9CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeVP9CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeVP9PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeVP9PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeVP9PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoDecodeVP9PictureInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeAV1ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeAV1ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeAV1CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeAV1CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeAV1SessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeAV1SessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1SessionParametersCreateInfoKHR-pStdSequenceHeader-parameter", + "text": "pStdSequenceHeader must be a valid pointer to a valid StdVideoAV1SequenceHeader value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeAV1InlineSessionParametersInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeAV1InlineSessionParametersInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1InlineSessionParametersInfoKHR-pStdSequenceHeader-parameter", + "text": "If pStdSequenceHeader is not NULL, pStdSequenceHeader must be a valid pointer to a valid StdVideoAV1SequenceHeader value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeAV1PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeAV1PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoDecodeAV1PictureInfo value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1PictureInfoKHR-pTileOffsets-parameter", + "text": "pTileOffsets must be a valid pointer to an array of tileCount uint32_t values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1PictureInfoKHR-pTileSizes-parameter", + "text": "pTileSizes must be a valid pointer to an array of tileCount uint32_t values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1PictureInfoKHR-tileCount-arraylength", + "text": "tileCount must be greater than 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoDecodeAV1DpbSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoDecodeAV1DpbSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoDecodeAV1DpbSlotInfoKHR-pStdReferenceInfo-parameter", + "text": "pStdReferenceInfo must be a valid pointer to a valid StdVideoDecodeAV1ReferenceInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-pQualityLevelInfo-08257", + "text": "If pQualityLevelInfo->pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain of pQualityLevelProperties must include a VkVideoEncodeH264QualityLevelPropertiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-pQualityLevelInfo-08258", + "text": "If pQualityLevelInfo->pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain of pQualityLevelProperties must include a VkVideoEncodeH265QualityLevelPropertiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-pQualityLevelInfo-10305", + "text": "If pQualityLevelInfo->pVideoProfile->videoCodecOperation is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the pNext chain of pQualityLevelProperties must include a VkVideoEncodeAV1QualityLevelPropertiesKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-pQualityLevelInfo-parameter", + "text": "pQualityLevelInfo must be a valid pointer to a valid VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-pQualityLevelProperties-parameter", + "text": "pQualityLevelProperties must be a valid pointer to a VkVideoEncodeQualityLevelPropertiesKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR-pVideoProfile-08259", + "text": "pVideoProfile must be a supported video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR-pVideoProfile-08260", + "text": "pVideoProfile->videoCodecOperation must specify an encode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR-qualityLevel-08261", + "text": "qualityLevel must be less than VkVideoEncodeCapabilitiesKHR::maxQualityLevels, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile specified in pVideoProfile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR-pVideoProfile-parameter", + "text": "pVideoProfile must be a valid pointer to a valid VkVideoProfileInfoKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeQualityLevelPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeQualityLevelPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeQualityLevelPropertiesKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeAV1QualityLevelPropertiesKHR, VkVideoEncodeH264QualityLevelPropertiesKHR, or VkVideoEncodeH265QualityLevelPropertiesKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeQualityLevelPropertiesKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeQualityLevelInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeQualityLevelInfoKHR-qualityLevel-08311", + "text": "qualityLevel must be less than VkVideoEncodeCapabilitiesKHR::maxQualityLevels, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeQualityLevelInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "vkGetEncodedVideoSessionParametersKHR": { + "core": [ + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08359", + "text": "pVideoSessionParametersInfo->videoSessionParameters must have been created with an encode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08262", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain of pVideoSessionParametersInfo must include a VkVideoEncodeH264SessionParametersGetInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08263", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then for the VkVideoEncodeH264SessionParametersGetInfoKHR structure included in the pNext chain of pVideoSessionParametersInfo, if its writeStdSPS member is VK_TRUE, then pVideoSessionParametersInfo->videoSessionParameters must contain a StdVideoH264SequenceParameterSet entry with seq_parameter_set_id matching VkVideoEncodeH264SessionParametersGetInfoKHR::stdSPSId", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08264", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then for the VkVideoEncodeH264SessionParametersGetInfoKHR structure included in the pNext chain of pVideoSessionParametersInfo, if its writeStdPPS member is VK_TRUE, then pVideoSessionParametersInfo->videoSessionParameters must contain a StdVideoH264PictureParameterSet entry with seq_parameter_set_id and pic_parameter_set_id matching VkVideoEncodeH264SessionParametersGetInfoKHR::stdSPSId and VkVideoEncodeH264SessionParametersGetInfoKHR::stdPPSId, respectively", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08265", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain of pVideoSessionParametersInfo must include a VkVideoEncodeH265SessionParametersGetInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08266", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then for the VkVideoEncodeH265SessionParametersGetInfoKHR structure included in the pNext chain of pVideoSessionParametersInfo, if its writeStdVPS member is VK_TRUE, then pVideoSessionParametersInfo->videoSessionParameters must contain a StdVideoH265VideoParameterSet entry with vps_video_parameter_set_id matching VkVideoEncodeH265SessionParametersGetInfoKHR::stdVPSId", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08267", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then for the VkVideoEncodeH265SessionParametersGetInfoKHR structure included in the pNext chain of pVideoSessionParametersInfo, if its writeStdSPS member is VK_TRUE, then pVideoSessionParametersInfo->videoSessionParameters must contain a StdVideoH265SequenceParameterSet entry with sps_video_parameter_set_id and sps_seq_parameter_set_id matching VkVideoEncodeH265SessionParametersGetInfoKHR::stdVPSId and VkVideoEncodeH265SessionParametersGetInfoKHR::stdSPSId, respectively", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-08268", + "text": "If pVideoSessionParametersInfo->videoSessionParameters was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then for the VkVideoEncodeH265SessionParametersGetInfoKHR structure included in the pNext chain of pVideoSessionParametersInfo, if its writeStdPPS member is VK_TRUE, then pVideoSessionParametersInfo->videoSessionParameters must contain a StdVideoH265PictureParameterSet entry with sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id matching VkVideoEncodeH265SessionParametersGetInfoKHR::stdVPSId, VkVideoEncodeH265SessionParametersGetInfoKHR::stdSPSId, and VkVideoEncodeH265SessionParametersGetInfoKHR::stdPPSId, respectively", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pVideoSessionParametersInfo-parameter", + "text": "pVideoSessionParametersInfo must be a valid pointer to a valid VkVideoEncodeSessionParametersGetInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pFeedbackInfo-parameter", + "text": "If pFeedbackInfo is not NULL, pFeedbackInfo must be a valid pointer to a VkVideoEncodeSessionParametersFeedbackInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pDataSize-parameter", + "text": "pDataSize must be a valid pointer to a size_t value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkGetEncodedVideoSessionParametersKHR-pData-parameter", + "text": "If the value referenced by pDataSize is not 0, and pData is not NULL, pData must be a valid pointer to an array of pDataSize bytes", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeSessionParametersGetInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeSessionParametersGetInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeSessionParametersGetInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeH264SessionParametersGetInfoKHR or VkVideoEncodeH265SessionParametersGetInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeSessionParametersGetInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeSessionParametersGetInfoKHR-videoSessionParameters-parameter", + "text": "videoSessionParameters must be a valid VkVideoSessionParametersKHR handle", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeSessionParametersFeedbackInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeSessionParametersFeedbackInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeSessionParametersFeedbackInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeH264SessionParametersFeedbackInfoKHR or VkVideoEncodeH265SessionParametersFeedbackInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeSessionParametersFeedbackInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + } + ] + }, + "vkCmdEncodeVideoKHR": { + "core": [ + { + "vuid": "VUID-vkCmdEncodeVideoKHR-None-08250", + "text": "The bound video session must have been created with an encode operation", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-None-07012", + "text": "The bound video session must not be in uninitialized state at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-None-08318", + "text": "If there is a bound video session parameters object, then it must have been created with the currently set video encode quality level for the bound video session at the time the command is executed on the device", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-opCount-07174", + "text": "For each active query, the active query index corresponding to the query type of that query plus opCount must be less than or equal to the last activatable query index corresponding to the query type of that query plus one", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08360", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, and the pNext chain of pEncodeInfo includes a VkVideoInlineQueryInfoKHR structure with its queryPool member specifying a valid VkQueryPool handle, then VkVideoInlineQueryInfoKHR::queryCount must equal opCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08361", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, and the pNext chain of pEncodeInfo includes a VkVideoInlineQueryInfoKHR structure with its queryPool member specifying a valid VkQueryPool handle, then all the queries used by the command, as specified by the VkVideoInlineQueryInfoKHR structure, must be unavailable", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-queryType-08362", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, then the queryType used to create the queryPool specified in the VkVideoInlineQueryInfoKHR structure included in the pNext chain of pEncodeInfo must be VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-queryPool-08363", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, then the queryPool specified in the VkVideoInlineQueryInfoKHR structure included in the pNext chain of pEncodeInfo must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-queryType-08364", + "text": "If the bound video session was created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR, and the queryType used to create the queryPool specified in the VkVideoInlineQueryInfoKHR structure included in the pNext chain of pEncodeInfo is VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then the VkCommandPool that commandBuffer was allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08201", + "text": "pEncodeInfo->dstBuffer must be compatible with the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-commandBuffer-08202", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, then pEncodeInfo->dstBuffer must not be a protected buffer", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-commandBuffer-08203", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, then pEncodeInfo->dstBuffer must be a protected buffer", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08204", + "text": "pEncodeInfo->dstBufferOffset must be an integer multiple of VkVideoCapabilitiesKHR::minBitstreamBufferOffsetAlignment, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08205", + "text": "pEncodeInfo->dstBufferRange must be an integer multiple of VkVideoCapabilitiesKHR::minBitstreamBufferSizeAlignment, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08206", + "text": "pEncodeInfo->srcPictureResource.imageViewBinding must be compatible with the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08207", + "text": "The format of pEncodeInfo->srcPictureResource.imageViewBinding must match the VkVideoSessionCreateInfoKHR::pictureFormat the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08208", + "text": "pEncodeInfo->srcPictureResource.codedOffset must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08209", + "text": "pEncodeInfo->srcPictureResource.codedExtent must be between minCodedExtent and maxCodedExtent, inclusive, the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08210", + "text": "pEncodeInfo->srcPictureResource.imageViewBinding must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-commandBuffer-08211", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, then pEncodeInfo->srcPictureResource.imageViewBinding must not have been created from a protected image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08377", + "text": "pEncodeInfo->pSetupReferenceSlot must not be NULL unless the bound video session was created with VkVideoSessionCreateInfoKHR::maxDpbSlots equal to zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08213", + "text": "If pEncodeInfo->pSetupReferenceSlot is not NULL, then pEncodeInfo->pSetupReferenceSlot->slotIndex must be less than the VkVideoSessionCreateInfoKHR::maxDpbSlots specified when the bound video session was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08214", + "text": "If pEncodeInfo->pSetupReferenceSlot is not NULL, then pEncodeInfo->pSetupReferenceSlot->pPictureResource->codedOffset must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08215", + "text": "If pEncodeInfo->pSetupReferenceSlot is not NULL, then pEncodeInfo->pSetupReferenceSlot->pPictureResource must match one of the bound reference picture resource", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-activeReferencePictureCount-08216", + "text": "activeReferencePictureCount must be less than or equal to the VkVideoSessionCreateInfoKHR::maxActiveReferencePictures specified when the bound video session was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-slotIndex-08217", + "text": "The slotIndex member of each element of pEncodeInfo->pReferenceSlots must be less than the VkVideoSessionCreateInfoKHR::maxDpbSlots specified when the bound video session was created", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-codedOffset-08218", + "text": "The codedOffset member of the VkVideoPictureResourceInfoKHR structure pointed to by the pPictureResource member of each element of pEncodeInfo->pReferenceSlots must be an integer multiple of codedOffsetGranularity", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pPictureResource-08219", + "text": "The pPictureResource member of each element of pEncodeInfo->pReferenceSlots must match one of the bound reference picture resource associated with the DPB slot index specified in the slotIndex member of that element", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pPictureResource-08220", + "text": "Each video picture resource corresponding to the pPictureResource member specified in the elements of pEncodeInfo->pReferenceSlots must be unique within pEncodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-dpbFrameUseCount-08221", + "text": "All elements of dpbFrameUseCount must be less than or equal to 1", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10811", + "text": "The image subresource referred to by pEncodeInfo->srcPictureResource must be in the VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR layout at the time the video encode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10812", + "text": "If pEncodeInfo->pSetupReferenceSlot is not NULL, then the image subresource referred to by pEncodeInfo->pSetupReferenceSlot->pPictureResource must be in the VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR layout at the time the video encode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pPictureResource-10813", + "text": "The image subresource referred to by the pPictureResource member of each element of pEncodeInfo->pReferenceSlots must be in the VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR layout at the time the video encode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10306", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR, then the bound video session must have been created with VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10307", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR, then the bound video session must have been created with VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10308", + "text": "If the current rate control mode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then pEncodeInfo->flags must not include VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10309", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR, then the pNext chain of pEncodeInfo must include a VkVideoEncodeQuantizationMapInfoKHR structure with its quantizationMap member specifying a valid VkImageView handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10310", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR or VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR, then the VkImageView specified by the quantizationMap member of the VkVideoEncodeQuantizationMapInfoKHR structure included in the pNext chain must be compatible with the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10311", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR, then the VkImageView specified by the quantizationMap member of the VkVideoEncodeQuantizationMapInfoKHR structure included in the pNext chain of pEncodeInfo must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10312", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR, then the VkImageView specified by the quantizationMap member of the VkVideoEncodeQuantizationMapInfoKHR structure included in the pNext chain of pEncodeInfo must have been created with VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10313", + "text": "If an instance of the VkVideoEncodeQuantizationMapInfoKHR structure is included in the pNext chain of pEncodeInfo, its quantizationMap member is not VK_NULL_HANDLE, commandBuffer is an unprotected command buffer, and protectedNoFault is not supported, then VkVideoEncodeQuantizationMapInfoKHR::quantizationMap must not have been created from a protected image", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10314", + "text": "If an instance of the VkVideoEncodeQuantizationMapInfoKHR structure is included in the pNext chain of pEncodeInfo and its quantizationMap member is not VK_NULL_HANDLE, then the image subresource range referenced by quantizationMap must be in the VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR layout at the time the video encode operation is executed on the device , unless the unifiedImageLayoutsVideo feature is enabled, in which case it may be in the VK_IMAGE_LAYOUT_GENERAL layout", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10315", + "text": "If an instance of the VkVideoEncodeQuantizationMapInfoKHR structure is included in the pNext chain of pEncodeInfo and its quantizationMap member is not VK_NULL_HANDLE, and there is a bound video session parameters object, then the bound video session parameters object must have been created with VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10316", + "text": "If an instance of the VkVideoEncodeQuantizationMapInfoKHR structure is included in the pNext chain of pEncodeInfo, its quantizationMap member is not VK_NULL_HANDLE, and there is a bound video session parameters object created with VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR, then quantizationMapExtent must equal ⌈pEncodeInfo->srcPictureResource.codedExtent / quantizationMapTexelSize⌉", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10837", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then the intra refresh mode the bound video session was created with must not be VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_NONE_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10838", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then pEncodeInfo->activeReferencePictureCount must be less than or equal to VkVideoEncodeIntraRefreshCapabilitiesKHR::maxIntraRefreshActiveReferencePictures, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10839", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then the pNext chain of pEncodeInfo must include a VkVideoEncodeIntraRefreshInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10840", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then the intraRefreshCycleDuration member of the VkVideoEncodeIntraRefreshInfoKHR structure included in the pNext chain of pEncodeInfo must not be zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10841", + "text": "If pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then the intraRefreshIndex member of the VkVideoEncodeIntraRefreshInfoKHR structure included in the pNext chain of pEncodeInfo must be less than VkVideoEncodeIntraRefreshInfoKHR::intraRefreshCycleDuration", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10842", + "text": "If the pNext chain of any element of pEncodeInfo->pReferenceSlots includes a VkVideoReferenceIntraRefreshInfoKHR structure with a non-zero dirtyIntraRefreshRegions member, then pEncodeInfo->flags must include VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10843", + "text": "If the pNext chain of any element of pEncodeInfo->pReferenceSlots includes a VkVideoReferenceIntraRefreshInfoKHR structure with a non-zero dirtyIntraRefreshRegions member, then for each such element dirtyIntraRefreshRegions must equal intraRefreshCycleDuration minus intraRefreshIndex where intraRefreshCycleDuration and intraRefreshIndex are the members of the VkVideoEncodeIntraRefreshInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10844", + "text": "If the pNext chain of pEncodeInfo includes a VkVideoEncodeIntraRefreshInfoKHR structure, then its intraRefreshCycleDuration member must be zero or must be between 2 and VkVideoEncodeIntraRefreshCapabilitiesKHR::maxIntraRefreshCycleDuration, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08225", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain of pEncodeInfo must include a VkVideoEncodeH264PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-StdVideoH264SequenceParameterSet-08226", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the bound video session parameters object must contain a StdVideoH264SequenceParameterSet entry with seq_parameter_set_id matching StdVideoEncodeH264PictureInfo::seq_parameter_set_id that is provided in the pStdPictureInfo member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-StdVideoH264PictureParameterSet-08227", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the bound video session parameters object must contain a StdVideoH264PictureParameterSet entry with seq_parameter_set_id and pic_parameter_set_id matching StdVideoEncodeH264PictureInfo::seq_parameter_set_id and StdVideoEncodeH264PictureInfo::pic_parameter_set_id, respectively, that are provided in the pStdPictureInfo member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08228", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and pEncodeInfo->pSetupReferenceSlot is not NULL, then the pNext chain of pEncodeInfo->pSetupReferenceSlot must include a VkVideoEncodeH264DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08229", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the pNext chain of each element of pEncodeInfo->pReferenceSlots must include a VkVideoEncodeH264DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQp-08269", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and the current rate control mode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then VkVideoEncodeH264NaluSliceInfoKHR::constantQp must be zero for each element of the pNaluSliceEntries member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQp-08270", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and the current rate control mode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then VkVideoEncodeH264NaluSliceInfoKHR::constantQp must be between VkVideoEncodeH264CapabilitiesKHR::minQp and VkVideoEncodeH264CapabilitiesKHR::maxQp, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, for each element of the pNaluSliceEntries member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQp-08271", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then VkVideoEncodeH264NaluSliceInfoKHR::constantQp must have the same value for each element of the pNaluSliceEntries member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-naluSliceEntryCount-08302", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, then the naluSliceEntryCount member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be less than or equal to minCodingBlockExtent.width multiplied by minCodingBlockExtent.height", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-naluSliceEntryCount-08312", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the naluSliceEntryCount member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be less than or equal to minCodingBlockExtent.height", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10845", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and with an intra refresh mode other than VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, and VkVideoEncodeIntraRefreshCapabilitiesKHR::partitionIndependentIntraRefreshRegions is VK_FALSE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the naluSliceEntryCount member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo must equal 1", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10846", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and with the intra refresh mode VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, and pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then the naluSliceEntryCount member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo must equal the intraRefreshCycleDuration member of the VkVideoEncodeIntraRefreshInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-intraRefreshH264SliceIndex-10847", + "text": "If intraRefreshH264SliceIndex is defined, then pNaluSliceEntries[intraRefreshH264SliceIndex].pStdSliceHeader->slice_type must be STD_VIDEO_H264_SLICE_TYPE_I in the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10848", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and with the intra refresh mode VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, and VkVideoEncodeIntraRefreshCapabilitiesKHR::nonRectangularIntraRefreshRegions is VK_FALSE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the naluSliceEntryCount member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be less than or equal to minCodingBlockExtent.height", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-h264PictureType-10849", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, h264PictureType is STD_VIDEO_H264_PICTURE_TYPE_B, and VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR, then pEncodeInfo->flags must not include VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-10850", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_KHR, then pNaluSliceEntries[i].pStdSliceHeader->slice_type must be identical for all elements i of the pNaluSliceEntries member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo , except for element index i equal to intraRefreshH264SliceIndex, if intraRefreshH264SliceIndex is defined", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08352", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, the pNext chain of pEncodeInfo includes a VkVideoEncodeH264PictureInfoKHR structure, and pEncodeInfo->referenceSlotCount is greater than zero, then VkVideoEncodeH264PictureInfoKHR::pStdPictureInfo->pRefLists must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08339", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, the pNext chain of pEncodeInfo includes a VkVideoEncodeH264PictureInfoKHR structure, and VkVideoEncodeH264PictureInfoKHR::pStdPictureInfo->pRefLists is not NULL, then each element of the RefPicList0 and RefPicList1 array members of the StdVideoEncodeH264ReferenceListsInfo structure pointed to by VkVideoEncodeH264PictureInfoKHR::pStdPictureInfo->pRefLists must either be STD_VIDEO_H264_NO_REFERENCE_PICTURE or must equal the slotIndex member of one of the elements of pEncodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08353", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, the pNext chain of pEncodeInfo includes a VkVideoEncodeH264PictureInfoKHR structure, and pEncodeInfo->referenceSlotCount is greater than zero, then the slotIndex member of each element of pEncodeInfo->pReferenceSlots must equal one of the elements of the RefPicList0 or RefPicList1 array members of the StdVideoEncodeH264ReferenceListsInfo structure pointed to by VkVideoEncodeH264PictureInfoKHR::pStdPictureInfo->pRefLists", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxPPictureL0ReferenceCount-08340", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::maxPPictureL0ReferenceCount is zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then h264PictureType and each element of h264L0PictureTypes and h264L1PictureTypes must not be STD_VIDEO_H264_PICTURE_TYPE_P", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxBPictureL0ReferenceCount-08341", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::maxBPictureL0ReferenceCount and VkVideoEncodeH264CapabilitiesKHR::maxL1ReferenceCount are both zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then h264PictureType and each element of h264L0PictureTypes and h264L1PictureTypes must not be STD_VIDEO_H264_PICTURE_TYPE_B", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-08342", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then each element of h264L0PictureTypes must not be STD_VIDEO_H264_PICTURE_TYPE_B", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-08343", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR and VkVideoEncodeH264CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then each element of h264L1PictureTypes must not be STD_VIDEO_H264_PICTURE_TYPE_B", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08230", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain of pEncodeInfo must include a VkVideoEncodeH265PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-StdVideoH265VideoParameterSet-08231", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the bound video session parameters object must contain a StdVideoH265VideoParameterSet entry with vps_video_parameter_set_id matching StdVideoEncodeH265PictureInfo::sps_video_parameter_set_id that is provided in the pStdPictureInfo member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-StdVideoH265SequenceParameterSet-08232", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the bound video session parameters object must contain a StdVideoH265SequenceParameterSet entry with sps_video_parameter_set_id and sps_seq_parameter_set_id matching StdVideoEncodeH265PictureInfo::sps_video_parameter_set_id and StdVideoEncodeH265PictureInfo::pps_seq_parameter_set_id, respectively, that are provided in the pStdPictureInfo member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-StdVideoH265PictureParameterSet-08233", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the bound video session parameters object must contain a StdVideoH265PictureParameterSet entry with sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id matching StdVideoEncodeH265PictureInfo::sps_video_parameter_set_id, StdVideoEncodeH265PictureInfo::pps_seq_parameter_set_id, and StdVideoEncodeH265PictureInfo::pps_pic_parameter_set_id, respectively, that are provided in the pStdPictureInfo member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08234", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and pEncodeInfo->pSetupReferenceSlot is not NULL, then the pNext chain of pEncodeInfo->pSetupReferenceSlot must include a VkVideoEncodeH265DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08235", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the pNext chain of each element of pEncodeInfo->pReferenceSlots must include a VkVideoEncodeH265DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQp-08272", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the current rate control mode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then VkVideoEncodeH265NaluSliceSegmentInfoKHR::constantQp must be zero for each element of the pNaluSliceSegmentEntries member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQp-08273", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and the current rate control mode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then VkVideoEncodeH265NaluSliceSegmentInfoKHR::constantQp must be between VkVideoEncodeH265CapabilitiesKHR::minQp and VkVideoEncodeH265CapabilitiesKHR::maxQp, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, for each element of the pNaluSliceSegmentEntries member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQp-08274", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then VkVideoEncodeH265NaluSliceSegmentInfoKHR::constantQp must have the same value for each element of the pNaluSliceSegmentEntries member of the VkVideoEncodeH264PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-naluSliceSegmentEntryCount-08307", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, then the naluSliceSegmentEntryCount member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be less than or equal to minCodingBlockExtent.width multiplied by minCodingBlockExtent.height", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-naluSliceSegmentEntryCount-08313", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H265_CAPABILITY_ROW_UNALIGNED_SLICE_SEGMENT_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the naluSliceSegmentEntryCount member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be less than or equal to minCodingBlockExtent.height", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10851", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and with an intra refresh mode other than VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, and VkVideoEncodeIntraRefreshCapabilitiesKHR::partitionIndependentIntraRefreshRegions is VK_FALSE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the naluSliceSegmentEntryCount member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo must equal 1", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10852", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and with the intra refresh mode VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, and pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, then the naluSliceSegmentEntryCount member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo must equal VkVideoEncodeIntraRefreshInfoKHR::intraRefreshCycleDuration", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-intraRefreshH265SliceSegmentIndex-10853", + "text": "If intraRefreshH265SliceSegmentIndex is defined, then pNaluSliceSegmentEntries[intraRefreshH265SliceSegmentIndex].pStdSliceSegmentHeader->slice_type must be STD_VIDEO_H265_SLICE_TYPE_I in the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10854", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and with the intra refresh mode VK_VIDEO_ENCODE_INTRA_REFRESH_MODE_PER_PICTURE_PARTITION_BIT_KHR, pEncodeInfo->flags includes VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR, and VkVideoEncodeIntraRefreshCapabilitiesKHR::nonRectangularIntraRefreshRegions is VK_FALSE, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the naluSliceSegmentEntryCount member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be less than or equal to minCodingBlockExtent.height", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-h265PictureType-10855", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, h265PictureType is STD_VIDEO_H265_PICTURE_TYPE_B, and VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_B_PICTURE_INTRA_REFRESH_BIT_KHR, then pEncodeInfo->flags must not include VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-10856", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_DIFFERENT_SLICE_SEGMENT_TYPE_BIT_KHR, then pNaluSliceSegmentEntries[i].pStdSliceSegmentHeader->slice_type must be identical for all elements i of the pNaluSliceSegmentEntries member of the VkVideoEncodeH265PictureInfoKHR structure included in the pNext chain of pEncodeInfo , except for element index i equal to intraRefreshH265SliceSegmentIndex, if intraRefreshH265SliceSegmentIndex is defined", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08354", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, the pNext chain of pEncodeInfo includes a VkVideoEncodeH265PictureInfoKHR structure, and pEncodeInfo->referenceSlotCount is greater than zero, then VkVideoEncodeH265PictureInfoKHR::pStdPictureInfo->pRefLists must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08344", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, the pNext chain of pEncodeInfo includes a VkVideoEncodeH265PictureInfoKHR structure, and VkVideoEncodeH265PictureInfoKHR::pStdPictureInfo->pRefLists is not NULL, then each element of the RefPicList0 and RefPicList1 array members of the StdVideoEncodeH265ReferenceListsInfo structure pointed to by VkVideoEncodeH265PictureInfoKHR::pStdPictureInfo->pRefLists must either be STD_VIDEO_H265_NO_REFERENCE_PICTURE or must equal the slotIndex member of one of the elements of pEncodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-08355", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, the pNext chain of pEncodeInfo includes a VkVideoEncodeH265PictureInfoKHR structure, and pEncodeInfo->referenceSlotCount is greater than zero, then the slotIndex member of each element of pEncodeInfo->pReferenceSlots must equal one of the elements of the RefPicList0 or RefPicList1 array members of the StdVideoEncodeH265ReferenceListsInfo structure pointed to by VkVideoEncodeH265PictureInfoKHR::pStdPictureInfo->pRefLists", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxPPictureL0ReferenceCount-08345", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::maxPPictureL0ReferenceCount is zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then h265PictureType and each element of h265L0PictureTypes and h265L1PictureTypes must not be STD_VIDEO_H265_PICTURE_TYPE_P", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxBPictureL0ReferenceCount-08346", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::maxBPictureL0ReferenceCount and VkVideoEncodeH265CapabilitiesKHR::maxL1ReferenceCount are both zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then h265PictureType and each element of h265L0PictureTypes and h265L1PictureTypes must not be STD_VIDEO_H265_PICTURE_TYPE_B", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-08347", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then each element of h265L0PictureTypes must not be STD_VIDEO_H264_PICTURE_TYPE_B", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-08348", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR and VkVideoEncodeH265CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_H265_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then each element of h265L1PictureTypes must not be STD_VIDEO_H265_PICTURE_TYPE_B", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10317", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the pNext chain of pEncodeInfo must include a VkVideoEncodeAV1PictureInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10318", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and pEncodeInfo->pSetupReferenceSlot is not NULL, then the pNext chain of pEncodeInfo->pSetupReferenceSlot must include a VkVideoEncodeAV1DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pNext-10319", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the pNext chain of each element of pEncodeInfo->pReferenceSlots must include a VkVideoEncodeAV1DpbSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQIndex-10320", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the current rate control mode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then the constantQIndex member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-constantQIndex-10321", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the current rate control mode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then the constantQIndex member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be between VkVideoEncodeAV1CapabilitiesKHR::minQIndex and VkVideoEncodeAV1CapabilitiesKHR::maxQIndex, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-10322", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo->flags.frame_size_override_flag must be zero for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-10323", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then pEncodeInfo->srcPictureResource.codedExtent.width must equal StdVideoAV1SequenceHeader::max_frame_width_minus_1 + 1 of the active AV1 sequence header", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-10324", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then pEncodeInfo->srcPictureResource.codedExtent.height must equal StdVideoAV1SequenceHeader::max_frame_height_minus_1 + 1 of the active AV1 sequence header", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-flags-10325", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::flags does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_MOTION_VECTOR_SCALING_BIT_KHR, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then for each element i of pEncodeInfo->pReferenceSlots pEncodeInfo->pReferenceSlots[i].pPictureResource->codedExtent must match pEncodeInfo->srcPictureResource.codedExtent", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-predictionMode-10326", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR, then VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo->frame_type must be STD_VIDEO_AV1_FRAME_TYPE_KEY or STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pStdPictureInfo-10327", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and pStdPictureInfo->frame_type for the pStdPictureInfo member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is STD_VIDEO_AV1_FRAME_TYPE_KEY or STD_VIDEO_AV1_FRAME_TYPE_INTRA_ONLY, then VkVideoEncodeAV1PictureInfoKHR::predictionMode must be VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxSingleReferenceCount-10328", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::maxSingleReferenceCount is zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must not be VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-predictionMode-10329", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR, then there must be at least one non-negative element of VkVideoEncodeAV1PictureInfoKHR::referenceNameSlotIndices with element index i that does not equal cdfOnlyReferenceIndex and for which bit index i is set in VkVideoEncodeAV1CapabilitiesKHR::singleReferenceNameMask, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxUnidirectionalCompoundReferenceCount-10330", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::maxUnidirectionalCompoundReferenceCount is zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must not be VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-predictionMode-10331", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR, then there must be at least two non-negative elements of VkVideoEncodeAV1PictureInfoKHR::referenceNameSlotIndices with element indices i and j where (i,j) ∈ {(0,1),(0,2),(0,3),(4,6)}, such that neither element equals cdfOnlyReferenceIndex and for which bit indices i and j are set in VkVideoEncodeAV1CapabilitiesKHR::unidirectionalCompoundReferenceNameMask, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-maxBidirectionalCompoundReferenceCount-10332", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and VkVideoEncodeAV1CapabilitiesKHR::maxBidirectionalCompoundReferenceCount is zero, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, then the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must not be VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-predictionMode-10333", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR, then there must be at least two non-negative elements of VkVideoEncodeAV1PictureInfoKHR::referenceNameSlotIndices with element indices i ∈ {0,1,2,3} and j ∈ {4,5,6}, respectively, such that neither element equals cdfOnlyReferenceIndex, and for which bit indices i and j are set in VkVideoEncodeAV1CapabilitiesKHR::bidirectionalCompoundReferenceNameMask, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-predictionMode-10857", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, the predictionMode member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR or VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR, and VkVideoEncodeAV1CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with, does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_COMPOUND_PREDICTION_INTRA_REFRESH_BIT_KHR, then pEncodeInfo->flags must not include VK_VIDEO_ENCODE_INTRA_REFRESH_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-referenceNameSlotIndices-10334", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then each element of the referenceNameSlotIndices array member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must either be negative or must equal the slotIndex member of one of the elements of pEncodeInfo->pReferenceSlots", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-slotIndex-10335", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then the slotIndex member of each element of pEncodeInfo->pReferenceSlots must equal one of the elements of the referenceNameSlotIndices array member of the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pExtensionHeader-10336", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pExtensionHeader member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then pExtensionHeader->temporal_id must be less than VkVideoEncodeAV1CapabilitiesKHR::maxTemporalLayerCount, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pExtensionHeader-10337", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pExtensionHeader member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then pExtensionHeader->spatial_id must be less than VkVideoEncodeAV1CapabilitiesKHR::maxSpatialLayerCount, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10338", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and pEncodeInfo->pSetupReferenceSlot is not NULL, then the pExtensionHeader member of VkVideoEncodeAV1DpbSlotInfoKHR::pStdReferenceInfo for the VkVideoEncodeAV1DpbSlotInfoKHR structure included in the pNext chain of pEncodeInfo->pSetupReferenceSlot and the pExtensionHeader member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must both be NULL or not NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10339", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, pEncodeInfo->pSetupReferenceSlot is not NULL, and the pExtensionHeader member of VkVideoEncodeAV1DpbSlotInfoKHR::pStdReferenceInfo for the VkVideoEncodeAV1DpbSlotInfoKHR structure included in the pNext chain of pEncodeInfo->pSetupReferenceSlot is not NULL, then pExtensionHeader->temporal_id must equal pStdPictureInfo->pExtensionHeader->temporal_id in the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-10340", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, pEncodeInfo->pSetupReferenceSlot is not NULL, and the pExtensionHeader member of VkVideoEncodeAV1DpbSlotInfoKHR::pStdReferenceInfo for the VkVideoEncodeAV1DpbSlotInfoKHR structure included in the pNext chain of pEncodeInfo->pSetupReferenceSlot is not NULL, then pExtensionHeader->spatial_id must equal pStdPictureInfo->pExtensionHeader->spatial_id in the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pExtensionHeader-10341", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pExtensionHeader member of VkVideoEncodeAV1DpbSlotInfoKHR::pStdReferenceInfo for any of the VkVideoEncodeAV1DpbSlotInfoKHR structures included in the pNext chain of any element of pEncodeInfo->pReferenceSlots is not NULL, then pExtensionHeader->temporal_id must be less than VkVideoEncodeAV1CapabilitiesKHR::maxTemporalLayerCount, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pExtensionHeader-10342", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pExtensionHeader member of VkVideoEncodeAV1DpbSlotInfoKHR::pStdReferenceInfo for any of the VkVideoEncodeAV1DpbSlotInfoKHR structures included in the pNext chain of any element of pEncodeInfo->pReferenceSlots is not NULL, then pExtensionHeader->spatial_id must be less than VkVideoEncodeAV1CapabilitiesKHR::maxSpatialLayerCount, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pTileInfo-10343", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pTileInfo member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then pTileInfo->TileCols must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pTileInfo-10344", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pTileInfo member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then pTileInfo->TileRows must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pTileInfo-10345", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pTileInfo member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then pTileInfo->TileCols must be less than or equal to VkVideoEncodeAV1CapabilitiesKHR::maxTiles.width, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pTileInfo-10346", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pTileInfo member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then pTileInfo->TileRows must be less than or equal to VkVideoEncodeAV1CapabilitiesKHR::maxTiles.height, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pTileInfo-10347", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pTileInfo member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then ⌈pEncodeInfo->srcPictureResource.codedExtent.width / pTileInfo->TileCols⌉ must be between VkVideoEncodeAV1CapabilitiesKHR::minTileSize.width and VkVideoEncodeAV1CapabilitiesKHR::maxTileSize.width, inclusive, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pTileInfo-10348", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR and the pTileInfo member of VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo is not NULL, then ⌈pEncodeInfo->srcPictureResource.codedExtent.height / pTileInfo->TileRows⌉ must be between VkVideoEncodeAV1CapabilitiesKHR::minTileSize.height and VkVideoEncodeAV1CapabilitiesKHR::maxTileSize.height, inclusive, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the video profile the bound video session was created with", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pStdPictureInfo-10349", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo->flags.segmentation_enabled for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pStdPictureInfo-10350", + "text": "If the bound video session was created with the video codec operation VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, then VkVideoEncodeAV1PictureInfoKHR::pStdPictureInfo->pSegmentation for the VkVideoEncodeAV1PictureInfoKHR structure included in the pNext chain of pEncodeInfo must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-pEncodeInfo-parameter", + "text": "pEncodeInfo must be a valid pointer to a valid VkVideoEncodeInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support encode operations", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-videocoding", + "text": "This command must only be called inside of a video coding scope", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-vkCmdEncodeVideoKHR-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeInfoKHR-dstBuffer-08236", + "text": "dstBuffer must have been created with VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR set", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-dstBufferOffset-08237", + "text": "dstBufferOffset must be less than the size of dstBuffer", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-dstBufferRange-08238", + "text": "dstBufferRange must be less than or equal to the size of dstBuffer minus dstBufferOffset", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-pSetupReferenceSlot-08239", + "text": "If pSetupReferenceSlot is not NULL, then its slotIndex member must not be negative", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-pSetupReferenceSlot-08240", + "text": "If pSetupReferenceSlot is not NULL, then its pPictureResource must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-slotIndex-08241", + "text": "The slotIndex member of each element of pReferenceSlots must not be negative", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-pPictureResource-08242", + "text": "The pPictureResource member of each element of pReferenceSlots must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeAV1PictureInfoKHR, VkVideoEncodeH264PictureInfoKHR, VkVideoEncodeH265PictureInfoKHR, VkVideoEncodeIntraRefreshInfoKHR, VkVideoEncodeQuantizationMapInfoKHR, or VkVideoInlineQueryInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoEncodeFlagBitsKHR values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-dstBuffer-parameter", + "text": "dstBuffer must be a valid VkBuffer handle", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-srcPictureResource-parameter", + "text": "srcPictureResource must be a valid VkVideoPictureResourceInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-pSetupReferenceSlot-parameter", + "text": "If pSetupReferenceSlot is not NULL, pSetupReferenceSlot must be a valid pointer to a valid VkVideoReferenceSlotInfoKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeInfoKHR-pReferenceSlots-parameter", + "text": "If referenceSlotCount is not 0, pReferenceSlots must be a valid pointer to an array of referenceSlotCount valid VkVideoReferenceSlotInfoKHR structures", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeIntraRefreshCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeIntraRefreshCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeSessionIntraRefreshCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeSessionIntraRefreshCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_INTRA_REFRESH_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeSessionIntraRefreshCreateInfoKHR-intraRefreshMode-parameter", + "text": "If intraRefreshMode is not 0, intraRefreshMode must be a valid VkVideoEncodeIntraRefreshModeFlagBitsKHR value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeIntraRefreshInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeIntraRefreshInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_INTRA_REFRESH_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoReferenceIntraRefreshInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoReferenceIntraRefreshInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeRateControlInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-rateControlMode-08248", + "text": "If rateControlMode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR or VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR, then layerCount must be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-rateControlMode-08275", + "text": "If rateControlMode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR or VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR, then layerCount must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-rateControlMode-08244", + "text": "If rateControlMode is not VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR, then it must specify one of the bits included in VkVideoEncodeCapabilitiesKHR::rateControlModes, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-layerCount-08245", + "text": "layerCount member must be less than or equal to VkVideoEncodeCapabilitiesKHR::maxRateControlLayers, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-pLayers-08276", + "text": "For each element of pLayers, its averageBitrate member must be between 1 and VkVideoEncodeCapabilitiesKHR::maxBitrate, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-pLayers-08277", + "text": "For each element of pLayers, its maxBitrate member must be between 1 and VkVideoEncodeCapabilitiesKHR::maxBitrate, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-rateControlMode-08356", + "text": "If rateControlMode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR, then for each element of pLayers, its averageBitrate member must equal its maxBitrate member", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-rateControlMode-08278", + "text": "If rateControlMode is VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR, then for each element of pLayers, its averageBitrate member must be less than or equal to its maxBitrate member", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-layerCount-08357", + "text": "If layerCount is not zero, then virtualBufferSizeInMs must be greater than zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-layerCount-08358", + "text": "If layerCount is not zero, then initialVirtualBufferSizeInMs must be less than or equal to virtualBufferSizeInMs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-videoCodecOperation-07022", + "text": "If the videoCodecOperation of the used video profile is VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR, the pNext chain this structure is included in also includes an instance of the VkVideoEncodeH264RateControlInfoKHR structure, and layerCount is greater than 1, then layerCount must equal VkVideoEncodeH264RateControlInfoKHR::temporalLayerCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-videoCodecOperation-07025", + "text": "If the videoCodecOperation of the used video profile is VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR, the pNext chain this structure is included in also includes an instance of the VkVideoEncodeH265RateControlInfoKHR structure, and layerCount is greater than 1, then layerCount must equal VkVideoEncodeH265RateControlInfoKHR::subLayerCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-videoCodecOperation-10351", + "text": "If the videoCodecOperation of the used video profile is VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR, the pNext chain this structure is included in also includes an instance of the VkVideoEncodeAV1RateControlInfoKHR structure, and layerCount is greater than 1, then layerCount must equal VkVideoEncodeAV1RateControlInfoKHR::temporalLayerCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-rateControlMode-parameter", + "text": "If rateControlMode is not 0, rateControlMode must be a valid VkVideoEncodeRateControlModeFlagBitsKHR value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlInfoKHR-pLayers-parameter", + "text": "If layerCount is not 0, pLayers must be a valid pointer to an array of layerCount valid VkVideoEncodeRateControlLayerInfoKHR structures", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeRateControlLayerInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeRateControlLayerInfoKHR-frameRateNumerator-08350", + "text": "frameRateNumerator must be greater than zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlLayerInfoKHR-frameRateDenominator-08351", + "text": "frameRateDenominator must be greater than zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlLayerInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlLayerInfoKHR-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkVideoEncodeAV1RateControlLayerInfoKHR, VkVideoEncodeH264RateControlLayerInfoKHR, or VkVideoEncodeH265RateControlLayerInfoKHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeRateControlLayerInfoKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeQuantizationMapCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeQuantizationMapCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264QuantizationMapCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264QuantizationMapCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUANTIZATION_MAP_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265QuantizationMapCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265QuantizationMapCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1QuantizationMapCapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1QuantizationMapCapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUANTIZATION_MAP_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoFormatQuantizationMapPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoFormatQuantizationMapPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_FORMAT_QUANTIZATION_MAP_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoFormatH265QuantizationMapPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoFormatH265QuantizationMapPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_FORMAT_H265_QUANTIZATION_MAP_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoFormatAV1QuantizationMapPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoFormatAV1QuantizationMapPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_FORMAT_AV1_QUANTIZATION_MAP_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeQuantizationMapInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeQuantizationMapInfoKHR-quantizationMapExtent-10352", + "text": "quantizationMapExtent.width must be less than or equal to the width of quantizationMap", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeQuantizationMapInfoKHR-quantizationMapExtent-10353", + "text": "quantizationMapExtent.height must be less than or equal to the height of quantizationMap", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeQuantizationMapInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeQuantizationMapInfoKHR-quantizationMap-parameter", + "text": "If quantizationMap is not VK_NULL_HANDLE, quantizationMap must be a valid VkImageView handle", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264QualityLevelPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264QualityLevelPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264SessionCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264SessionCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264SessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersCreateInfoKHR-pParametersAddInfo-parameter", + "text": "If pParametersAddInfo is not NULL, pParametersAddInfo must be a valid pointer to a valid VkVideoEncodeH264SessionParametersAddInfoKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264SessionParametersAddInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersAddInfoKHR-None-04837", + "text": "The seq_parameter_set_id member of each StdVideoH264SequenceParameterSet structure specified in the elements of pStdSPSs must be unique within pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersAddInfoKHR-None-04838", + "text": "The pair constructed from the seq_parameter_set_id and pic_parameter_set_id members of each StdVideoH264PictureParameterSet structure specified in the elements of pStdPPSs must be unique within pStdPPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersAddInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersAddInfoKHR-pStdSPSs-parameter", + "text": "If stdSPSCount is not 0, and pStdSPSs is not NULL, pStdSPSs must be a valid pointer to an array of stdSPSCount StdVideoH264SequenceParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersAddInfoKHR-pStdPPSs-parameter", + "text": "If stdPPSCount is not 0, and pStdPPSs is not NULL, pStdPPSs must be a valid pointer to an array of stdPPSCount StdVideoH264PictureParameterSet values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264SessionParametersGetInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersGetInfoKHR-writeStdSPS-08279", + "text": "At least one of writeStdSPS and writeStdPPS must be VK_TRUE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersGetInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264SessionParametersFeedbackInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264SessionParametersFeedbackInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-naluSliceEntryCount-08301", + "text": "naluSliceEntryCount must be between 1 and VkVideoEncodeH264CapabilitiesKHR::maxSliceCount, inclusive, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-flags-08304", + "text": "If VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR, then generatePrefixNalu must be VK_FALSE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-flags-08314", + "text": "If VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR and the slice corresponding to any element of pNaluSliceEntries uses explicit weighted sample prediction, then VkVideoEncodeH264NaluSliceInfoKHR::pStdSliceHeader->pWeightTable must not be NULL for that element of pNaluSliceEntries", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-pNaluSliceEntries-parameter", + "text": "pNaluSliceEntries must be a valid pointer to an array of naluSliceEntryCount valid VkVideoEncodeH264NaluSliceInfoKHR structures", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoEncodeH264PictureInfo value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264PictureInfoKHR-naluSliceEntryCount-arraylength", + "text": "naluSliceEntryCount must be greater than 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264NaluSliceInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264NaluSliceInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264NaluSliceInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264NaluSliceInfoKHR-pStdSliceHeader-parameter", + "text": "pStdSliceHeader must be a valid pointer to a valid StdVideoEncodeH264SliceHeader value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264DpbSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264DpbSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264DpbSlotInfoKHR-pStdReferenceInfo-parameter", + "text": "pStdReferenceInfo must be a valid pointer to a valid StdVideoEncodeH264ReferenceInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264RateControlInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-flags-08280", + "text": "If VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_KHR, then flags must not contain VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-flags-08281", + "text": "If flags contains VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR or VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR, then it must also contain VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-flags-08282", + "text": "If flags contains VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR, then it must not also contain VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-flags-08283", + "text": "If flags contains VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_KHR, then gopFrameCount must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-idrPeriod-08284", + "text": "If idrPeriod is not 0, then it must be greater than or equal to gopFrameCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-consecutiveBFrameCount-08285", + "text": "If consecutiveBFrameCount is not 0, then it must be less than gopFrameCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoEncodeH264RateControlFlagBitsKHR values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264RateControlLayerInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-useMinQp-08286", + "text": "If useMinQp is VK_TRUE, then the qpI, qpP, and qpB members of minQp must all be between VkVideoEncodeH264CapabilitiesKHR::minQp and VkVideoEncodeH264CapabilitiesKHR::maxQp, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-useMaxQp-08287", + "text": "If useMaxQp is VK_TRUE, then the qpI, qpP, and qpB members of maxQp must all be between VkVideoEncodeH264CapabilitiesKHR::minQp and VkVideoEncodeH264CapabilitiesKHR::maxQp, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-useMinQp-08288", + "text": "If useMinQp is VK_TRUE and VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR, then the qpI, qpP, and qpB members of minQp must all specify the same value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-useMaxQp-08289", + "text": "If useMaxQp is VK_TRUE and VkVideoEncodeH264CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR, then the qpI, qpP, and qpB members of maxQp must all specify the same value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-useMinQp-08374", + "text": "If useMinQp and useMaxQp are both VK_TRUE, then the qpI, qpP, and qpB members of minQp must all be less than or equal to the respective members of maxQp", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-minQp-parameter", + "text": "minQp must be a valid VkVideoEncodeH264QpKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-maxQp-parameter", + "text": "maxQp must be a valid VkVideoEncodeH264QpKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH264RateControlLayerInfoKHR-maxFrameSize-parameter", + "text": "maxFrameSize must be a valid VkVideoEncodeH264FrameSizeKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH264GopRemainingFrameInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH264GopRemainingFrameInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265QualityLevelPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265QualityLevelPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265SessionCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265SessionCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265SessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersCreateInfoKHR-pParametersAddInfo-parameter", + "text": "If pParametersAddInfo is not NULL, pParametersAddInfo must be a valid pointer to a valid VkVideoEncodeH265SessionParametersAddInfoKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265SessionParametersAddInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-pStdVPSs-parameter", + "text": "If stdVPSCount is not 0, and pStdVPSs is not NULL, pStdVPSs must be a valid pointer to an array of stdVPSCount StdVideoH265VideoParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-pStdSPSs-parameter", + "text": "If stdSPSCount is not 0, and pStdSPSs is not NULL, pStdSPSs must be a valid pointer to an array of stdSPSCount StdVideoH265SequenceParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-pStdPPSs-parameter", + "text": "If stdPPSCount is not 0, and pStdPPSs is not NULL, pStdPPSs must be a valid pointer to an array of stdPPSCount StdVideoH265PictureParameterSet values", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-None-06438", + "text": "The vps_video_parameter_set_id member of each StdVideoH265VideoParameterSet structure specified in the elements of pStdVPSs must be unique within pStdVPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-None-06439", + "text": "The pair constructed from the sps_video_parameter_set_id and sps_seq_parameter_set_id members of each StdVideoH265SequenceParameterSet structure specified in the elements of pStdSPSs must be unique within pStdSPSs", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersAddInfoKHR-None-06440", + "text": "The triplet constructed from the sps_video_parameter_set_id, pps_seq_parameter_set_id, and pps_pic_parameter_set_id members of each StdVideoH265PictureParameterSet structure specified in the elements of pStdPPSs must be unique within pStdPPSs", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265SessionParametersGetInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersGetInfoKHR-writeStdVPS-08290", + "text": "At least one of writeStdVPS, writeStdSPS, and writeStdPPS must be VK_TRUE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersGetInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265SessionParametersFeedbackInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265SessionParametersFeedbackInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-naluSliceSegmentEntryCount-08306", + "text": "naluSliceSegmentEntryCount must be between 1 and VkVideoEncodeH265CapabilitiesKHR::maxSliceSegmentCount, inclusive, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-flags-08323", + "text": "If VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR, then naluSliceSegmentEntryCount must be greater than or equal to the number of H.265 tiles in the picture", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-flags-08324", + "text": "If VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR, then naluSliceSegmentEntryCount must be less than or equal to the number of H.265 tiles in the picture", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-flags-08316", + "text": "If VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_KHR and the slice segment corresponding to any element of pNaluSliceSegmentEntries uses explicit weighted sample prediction, then VkVideoEncodeH265NaluSliceSegmentInfoKHR::pStdSliceSegmentHeader->pWeightTable must not be NULL for that element of pNaluSliceSegmentEntries", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-pNaluSliceSegmentEntries-parameter", + "text": "pNaluSliceSegmentEntries must be a valid pointer to an array of naluSliceSegmentEntryCount valid VkVideoEncodeH265NaluSliceSegmentInfoKHR structures", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoEncodeH265PictureInfo value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265PictureInfoKHR-naluSliceSegmentEntryCount-arraylength", + "text": "naluSliceSegmentEntryCount must be greater than 0", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265NaluSliceSegmentInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265NaluSliceSegmentInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265NaluSliceSegmentInfoKHR-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265NaluSliceSegmentInfoKHR-pStdSliceSegmentHeader-parameter", + "text": "pStdSliceSegmentHeader must be a valid pointer to a valid StdVideoEncodeH265SliceSegmentHeader value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265DpbSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265DpbSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265DpbSlotInfoKHR-pStdReferenceInfo-parameter", + "text": "pStdReferenceInfo must be a valid pointer to a valid StdVideoEncodeH265ReferenceInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265RateControlInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-flags-08291", + "text": "If VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_HRD_COMPLIANCE_BIT_KHR, then flags must not contain VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-flags-08292", + "text": "If flags contains VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR or VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR, then it must also contain VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-flags-08293", + "text": "If flags contains VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR, then it must not also contain VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-flags-08294", + "text": "If flags contains VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_KHR, then gopFrameCount must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-idrPeriod-08295", + "text": "If idrPeriod is not 0, then it must be greater than or equal to gopFrameCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-consecutiveBFrameCount-08296", + "text": "If consecutiveBFrameCount is not 0, then it must be less than gopFrameCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoEncodeH265RateControlFlagBitsKHR values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265RateControlLayerInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-useMinQp-08297", + "text": "If useMinQp is VK_TRUE, then the qpI, qpP, and qpB members of minQp must all be between VkVideoEncodeH265CapabilitiesKHR::minQp and VkVideoEncodeH265CapabilitiesKHR::maxQp, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-useMaxQp-08298", + "text": "If useMaxQp is VK_TRUE, then the qpI, qpP, and qpB members of maxQp must all be between VkVideoEncodeH265CapabilitiesKHR::minQp and VkVideoEncodeH265CapabilitiesKHR::maxQp, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-useMinQp-08299", + "text": "If useMinQp is VK_TRUE and VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR, then the qpI, qpP, and qpB members of minQp must all specify the same value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-useMaxQp-08300", + "text": "If useMaxQp is VK_TRUE and VkVideoEncodeH265CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_H265_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR, then the qpI, qpP, and qpB members of maxQp must all specify the same value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-useMinQp-08375", + "text": "If useMinQp and useMaxQp are both VK_TRUE, then the qpI, qpP, and qpB members of minQp must all be less than or equal to the respective members of maxQp", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-minQp-parameter", + "text": "minQp must be a valid VkVideoEncodeH265QpKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-maxQp-parameter", + "text": "maxQp must be a valid VkVideoEncodeH265QpKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeH265RateControlLayerInfoKHR-maxFrameSize-parameter", + "text": "maxFrameSize must be a valid VkVideoEncodeH265FrameSizeKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeH265GopRemainingFrameInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeH265GopRemainingFrameInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1ProfileInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1ProfileInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PROFILE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1CapabilitiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1CapabilitiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1QualityLevelPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1QualityLevelPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUALITY_LEVEL_PROPERTIES_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1SessionCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1SessionCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1SessionParametersCreateInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1SessionParametersCreateInfoKHR-pStdSequenceHeader-10288", + "text": "pStdSequenceHeader->flags.film_grain_params_present must be zero", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1SessionParametersCreateInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1SessionParametersCreateInfoKHR-pStdSequenceHeader-parameter", + "text": "pStdSequenceHeader must be a valid pointer to a valid StdVideoAV1SequenceHeader value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1SessionParametersCreateInfoKHR-pStdDecoderModelInfo-parameter", + "text": "If pStdDecoderModelInfo is not NULL, pStdDecoderModelInfo must be a valid pointer to a valid StdVideoEncodeAV1DecoderModelInfo value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1SessionParametersCreateInfoKHR-pStdOperatingPoints-parameter", + "text": "If stdOperatingPointCount is not 0, and pStdOperatingPoints is not NULL, pStdOperatingPoints must be a valid pointer to an array of stdOperatingPointCount StdVideoEncodeAV1OperatingPointInfo values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1PictureInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-flags-10289", + "text": "If VkVideoEncodeAV1CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_PRIMARY_REFERENCE_CDF_ONLY_BIT_KHR, then primaryReferenceCdfOnly must be VK_FALSE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-primaryReferenceCdfOnly-10290", + "text": "If primaryReferenceCdfOnly is set to VK_TRUE, then pStdPictureInfo->primary_ref_frame must be less than VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-pStdPictureInfo-10291", + "text": "If pStdPictureInfo->primary_ref_frame is less than VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR, then referenceNameSlotIndices[pStdPictureInfo->primary_ref_frame] must not be negative", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-flags-10292", + "text": "If VkVideoEncodeAV1CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_GENERATE_OBU_EXTENSION_HEADER_BIT_KHR, then generateObuExtensionHeader must be VK_FALSE", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-generateObuExtensionHeader-10293", + "text": "If generateObuExtensionHeader is set to VK_TRUE, then pStdPictureInfo->pExtensionHeader must not be NULL", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-predictionMode-parameter", + "text": "predictionMode must be a valid VkVideoEncodeAV1PredictionModeKHR value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-rateControlGroup-parameter", + "text": "rateControlGroup must be a valid VkVideoEncodeAV1RateControlGroupKHR value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1PictureInfoKHR-pStdPictureInfo-parameter", + "text": "pStdPictureInfo must be a valid pointer to a valid StdVideoEncodeAV1PictureInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1DpbSlotInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1DpbSlotInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1DpbSlotInfoKHR-pStdReferenceInfo-parameter", + "text": "pStdReferenceInfo must be a valid pointer to a valid StdVideoEncodeAV1ReferenceInfo value", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1RateControlInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-flags-10294", + "text": "If flags contains VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR or VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR, then it must also contain VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-flags-10295", + "text": "If flags contains VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR, then it must not also contain VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-flags-10296", + "text": "If flags contains VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR, then gopFrameCount must be greater than 0", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-keyFramePeriod-10297", + "text": "If keyFramePeriod is not 0, then it must be greater than or equal to gopFrameCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-consecutiveBipredictiveFrameCount-10298", + "text": "If consecutiveBipredictiveFrameCount is not 0, then it must be less than gopFrameCount", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-temporalLayerCount-10299", + "text": "temporalLayerCount must be less than or equal to VkVideoEncodeAV1CapabilitiesKHR::maxTemporalLayerCount, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlInfoKHR-flags-parameter", + "text": "flags must be a valid combination of VkVideoEncodeAV1RateControlFlagBitsKHR values", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1RateControlLayerInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-useMinQIndex-10300", + "text": "If useMinQIndex is VK_TRUE, then the intraQIndex, predictiveQIndex, and bipredictiveQIndex members of minQIndex must all be between VkVideoEncodeAV1CapabilitiesKHR::minQIndex and VkVideoEncodeAV1CapabilitiesKHR::maxQIndex, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-useMinQIndex-10301", + "text": "If useMinQIndex is VK_TRUE and VkVideoEncodeAV1CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR, then the intraQIndex, predictiveQIndex, and bipredictiveQIndex members of minQIndex must all specify the same value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-useMaxQIndex-10302", + "text": "If useMaxQIndex is VK_TRUE, then the intraQIndex, predictiveQIndex, and bipredictiveQIndex members of maxQIndex must all be between VkVideoEncodeAV1CapabilitiesKHR::minQIndex and VkVideoEncodeAV1CapabilitiesKHR::maxQIndex, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-useMaxQIndex-10303", + "text": "If useMaxQIndex is VK_TRUE and VkVideoEncodeAV1CapabilitiesKHR::flags, as returned by vkGetPhysicalDeviceVideoCapabilitiesKHR for the used video profile, does not include VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR, then the intraQIndex, predictiveQIndex, and bipredictiveQIndex members of maxQIndex must all specify the same value", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-useMinQIndex-10304", + "text": "If useMinQIndex and useMaxQIndex are both VK_TRUE, then the intraQIndex, predictiveQIndex, and bipredictiveQIndex members of minQIndex must all be less than or equal to the respective members of maxQIndex", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-minQIndex-parameter", + "text": "minQIndex must be a valid VkVideoEncodeAV1QIndexKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-maxQIndex-parameter", + "text": "maxQIndex must be a valid VkVideoEncodeAV1QIndexKHR structure", + "page": "chapters/videocoding.html" + }, + { + "vuid": "VUID-VkVideoEncodeAV1RateControlLayerInfoKHR-maxFrameSize-parameter", + "text": "maxFrameSize must be a valid VkVideoEncodeAV1FrameSizeKHR structure", + "page": "chapters/videocoding.html" + } + ] + }, + "VkVideoEncodeAV1GopRemainingFrameInfoKHR": { + "core": [ + { + "vuid": "VUID-VkVideoEncodeAV1GopRemainingFrameInfoKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR", + "page": "chapters/videocoding.html" + } + ] + }, + "vkGetPhysicalDeviceOpticalFlowImageFormatsNV": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-pOpticalFlowImageFormatInfo-parameter", + "text": "pOpticalFlowImageFormatInfo must be a valid pointer to a valid VkOpticalFlowImageFormatInfoNV structure", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-pFormatCount-parameter", + "text": "pFormatCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-pImageFormatProperties-parameter", + "text": "If the value referenced by pFormatCount is not 0, and pImageFormatProperties is not NULL, pImageFormatProperties must be a valid pointer to an array of pFormatCount VkOpticalFlowImageFormatPropertiesNV structures", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "VkOpticalFlowImageFormatInfoNV": { + "core": [ + { + "vuid": "VUID-VkOpticalFlowImageFormatInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowImageFormatInfoNV-usage-parameter", + "text": "usage must be a valid combination of VkOpticalFlowUsageFlagBitsNV values", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowImageFormatInfoNV-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "VkOpticalFlowImageFormatPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkOpticalFlowImageFormatPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowImageFormatPropertiesNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "vkCreateOpticalFlowSessionNV": { + "core": [ + { + "vuid": "VUID-vkCreateOpticalFlowSessionNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCreateOpticalFlowSessionNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkOpticalFlowSessionCreateInfoNV structure", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCreateOpticalFlowSessionNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCreateOpticalFlowSessionNV-pSession-parameter", + "text": "pSession must be a valid pointer to a VkOpticalFlowSessionNV handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCreateOpticalFlowSessionNV-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "VkOpticalFlowSessionCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-width-07581", + "text": "width must be greater than or equal to VkPhysicalDeviceOpticalFlowPropertiesNV::minWidth and less than or equal to VkPhysicalDeviceOpticalFlowPropertiesNV::maxWidth", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-height-07582", + "text": "height must be greater than or equal to VkPhysicalDeviceOpticalFlowPropertiesNV::minHeight and less than or equal to VkPhysicalDeviceOpticalFlowPropertiesNV::maxHeight", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-imageFormat-07583", + "text": "imageFormat must be one of the formats returned by vkGetPhysicalDeviceOpticalFlowImageFormatsNV for VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flowVectorFormat-07584", + "text": "flowVectorFormat must be one of the formats returned by vkGetPhysicalDeviceOpticalFlowImageFormatsNV for VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-costFormat-07585", + "text": "costFormat must be one of the formats returned by vkGetPhysicalDeviceOpticalFlowImageFormatsNV for VK_OPTICAL_FLOW_USAGE_COST_BIT_NV if VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV is set in flags", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-07586", + "text": "outputGridSize must be exactly one of the bits reported in VkPhysicalDeviceOpticalFlowPropertiesNV::supportedOutputGridSizes", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-hintGridSize-07587", + "text": "hintGridSize must be exactly one of the bits reported in VkPhysicalDeviceOpticalFlowPropertiesNV::supportedHintGridSizes if VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV is set in flags", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flags-07588", + "text": "VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV must not be set in flags if VkPhysicalDeviceOpticalFlowPropertiesNV::hintSupported is VK_FALSE", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flags-07589", + "text": "VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV must not be set in flags if VkPhysicalDeviceOpticalFlowPropertiesNV::costSupported is VK_FALSE", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flags-07590", + "text": "VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV must not be set in flags if VkPhysicalDeviceOpticalFlowPropertiesNV::globalFlowSupported is VK_FALSE", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flags-07591", + "text": "VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV must not be set in flags if VkPhysicalDeviceOpticalFlowPropertiesNV::maxNumRegionsOfInterest is 0", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flags-07592", + "text": "VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV must not be set in flags if VkPhysicalDeviceOpticalFlowPropertiesNV::bidirectionalFlowSupported is VK_FALSE", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkOpticalFlowSessionCreatePrivateDataInfoNV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-imageFormat-parameter", + "text": "imageFormat must be a valid VkFormat value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flowVectorFormat-parameter", + "text": "flowVectorFormat must be a valid VkFormat value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-costFormat-parameter", + "text": "If costFormat is not 0, costFormat must be a valid VkFormat value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-parameter", + "text": "outputGridSize must be a valid combination of VkOpticalFlowGridSizeFlagBitsNV values", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-requiredbitmask", + "text": "outputGridSize must not be 0", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-hintGridSize-parameter", + "text": "hintGridSize must be a valid combination of VkOpticalFlowGridSizeFlagBitsNV values", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-performanceLevel-parameter", + "text": "If performanceLevel is not 0, performanceLevel must be a valid VkOpticalFlowPerformanceLevelNV value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreateInfoNV-flags-parameter", + "text": "flags must be a valid combination of VkOpticalFlowSessionCreateFlagBitsNV values", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "VkOpticalFlowSessionCreatePrivateDataInfoNV": { + "core": [ + { + "vuid": "VUID-VkOpticalFlowSessionCreatePrivateDataInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowSessionCreatePrivateDataInfoNV-pPrivateData-parameter", + "text": "pPrivateData must be a pointer value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "vkDestroyOpticalFlowSessionNV": { + "core": [ + { + "vuid": "VUID-vkDestroyOpticalFlowSessionNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkDestroyOpticalFlowSessionNV-session-parameter", + "text": "session must be a valid VkOpticalFlowSessionNV handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkDestroyOpticalFlowSessionNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkDestroyOpticalFlowSessionNV-session-parent", + "text": "session must have been created, allocated, or retrieved from device", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "vkBindOpticalFlowSessionImageNV": { + "core": [ + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-session-parameter", + "text": "session must be a valid VkOpticalFlowSessionNV handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-bindingPoint-parameter", + "text": "bindingPoint must be a valid VkOpticalFlowSessionBindingPointNV value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-view-parameter", + "text": "If view is not VK_NULL_HANDLE, view must be a valid VkImageView handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-layout-parameter", + "text": "layout must be a valid VkImageLayout value", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-session-parent", + "text": "session must have been created, allocated, or retrieved from device", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkBindOpticalFlowSessionImageNV-view-parent", + "text": "If view is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "vkCmdOpticalFlowExecuteNV": { + "core": [ + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-session-parameter", + "text": "session must be a valid VkOpticalFlowSessionNV handle", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-pExecuteInfo-parameter", + "text": "pExecuteInfo must be a valid pointer to a valid VkOpticalFlowExecuteInfoNV structure", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support optical flow operations", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-vkCmdOpticalFlowExecuteNV-commonparent", + "text": "Both of commandBuffer, and session must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "VkOpticalFlowExecuteInfoNV": { + "core": [ + { + "vuid": "VUID-VkOpticalFlowExecuteInfoNV-regionCount-07593", + "text": "regionCount must be 0 if VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV was not set for VkOpticalFlowSessionNV on which this command is operating", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowExecuteInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowExecuteInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowExecuteInfoNV-flags-parameter", + "text": "flags must be a valid combination of VkOpticalFlowExecuteFlagBitsNV values", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + }, + { + "vuid": "VUID-VkOpticalFlowExecuteInfoNV-pRegions-parameter", + "text": "If regionCount is not 0, pRegions must be a valid pointer to an array of regionCount VkRect2D structures", + "page": "chapters/VK_NV_optical_flow/optical_flow.html" + } + ] + }, + "vkCreateExecutionGraphPipelinesAMDX": { + "core": [ + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-shaderEnqueue-09124", + "text": "The shaderEnqueue feature must be enabled", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09125", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the basePipelineIndex member of that same element is not -1, basePipelineIndex must be less than the index into pCreateInfos that corresponds to that element", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09126", + "text": "If the flags member of any element of pCreateInfos contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-09127", + "text": "If pipelineCache was created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access to pipelineCache must be externally synchronized", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pNext-09616", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pNext-09617", + "text": "If a VkPipelineCreateFlags2CreateInfoKHR structure with the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag set is included in the pNext chain of any element of pCreateInfos, pipelineCache must be VK_NULL_HANDLE", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09620", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT must not be set in the flags of that element", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09621", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT must not be set in the flags of that element", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09622", + "text": "If VkPipelineBinaryInfoKHR::binaryCount is not 0 for any element of pCreateInfos, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT must not be set in the flags of that element", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkExecutionGraphPipelineCreateInfoAMDX structures", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pPipelines-parameter", + "text": "pPipelines must be a valid pointer to an array of createInfoCount VkPipeline handles", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/executiongraphs.html" + } + ] + }, + "VkExecutionGraphPipelineCreateInfoAMDX": { + "core": [ + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09497", + "text": "If the pNext chain does not include a VkPipelineCreateFlags2CreateInfo structure, flags must be a valid combination of VkPipelineCreateFlagBits values", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07984", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is -1, basePipelineHandle must be a valid execution graph VkPipeline handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07985", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is VK_NULL_HANDLE, basePipelineIndex must be a valid index into the calling command’s pCreateInfos parameter", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07986", + "text": "If flags contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, basePipelineIndex must be -1 or basePipelineHandle must be VK_NULL_HANDLE", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07987", + "text": "If a push constant block is declared in a shader, a push constant range in layout must match the shader stage", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-10069", + "text": "If a push constant block is declared in a shader, the block must be contained inside the push constant range in layout that matches the stage", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07988", + "text": "If a resource variable is declared in a shader, the corresponding descriptor set in layout must match the shader stage", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07990", + "text": "If a resource variable is declared in a shader, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set in layout must match the descriptor type", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07991", + "text": "If a resource variable is declared in a shader as an array, the corresponding descriptor set in layout must match the descriptor count", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-10391", + "text": "If a resource variables is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03365", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03366", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03367", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03368", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03369", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03370", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03576", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-04945", + "text": "flags must not include VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-09007", + "text": "If the VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelines feature is not enabled, flags must not include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-09008", + "text": "If flags includes VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the pNext chain must include a pointer to a valid instance of VkComputePipelineIndirectBufferInfoNV specifying the address where the pipeline’s metadata will be saved", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11007", + "text": "If flags includes VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT, then the VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommands feature must be enabled", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pipelineCreationCacheControl-02875", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT or VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-stage-09128", + "text": "The stage member of any element of pStages must be VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-09129", + "text": "The shader code for the entry point identified by each element of pStages and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09130", + "text": "layout must be consistent with the layout of the shaders specified in pStages", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09131", + "text": "If pLibraryInfo is not NULL, each element of its pLibraries member must have been created with a layout that is compatible with the layout in this pipeline", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09132", + "text": "The number of resources in layout accessible to each shader stage that is used by the pipeline must be less than or equal to VkPhysicalDeviceLimits::maxPerStageResources", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09133", + "text": "If pLibraryInfo is not NULL, each element of pLibraryInfo->pLibraries must be either a compute pipeline, an execution graph pipeline, or a graphics pipeline", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-10181", + "text": "If pLibraryInfo is not NULL, each element of pLibraryInfo->pLibraries that is a compute pipeline or a graphics pipeline must have been created with VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX set", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-shaderMeshEnqueue-10182", + "text": "If the shaderMeshEnqueue feature is not enabled, and pLibraryInfo->pLibraries is not NULL, pLibraryInfo->pLibraries must not contain any graphics pipelines", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-10183", + "text": "Any element of pLibraryInfo->pLibraries identifying a graphics pipeline must have been created with all possible state subsets", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09134", + "text": "There must be no two nodes in the pipeline that share both the same shader name and index, as specified by VkPipelineShaderStageNodeCreateInfoAMDX", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09135", + "text": "There must be no two nodes in the pipeline that share the same shader name and have input payload declarations with different sizes", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09136", + "text": "There must be no two nodes in the pipeline that share the same name but have different execution models", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-CoalescedInputCountAMDX-09137", + "text": "There must be no two nodes in the pipeline that share the same name where one includes CoalescedInputCountAMDX and the other does not", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-StaticNumWorkgroupsAMDX-09138", + "text": "There must be no two nodes in the pipeline that share the same name where one includes StaticNumWorkgroupsAMDX and the other does not", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-PayloadNodeNameAMDX-09139", + "text": "If an output payload declared in any shader in the pipeline has a PayloadNodeNameAMDX decoration with a Node Name that matches the shader name of any other node in the graph, the size of the output payload must match the size of the input payload in the matching node", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-10184", + "text": "If flags does not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, and an output payload declared in any shader in the pipeline does not have a PayloadNodeSparseArrayAMDX decoration, there must be a node in the graph corresponding to every index from 0 to its PayloadNodeArraySizeAMDX decoration", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineCompilerControlCreateInfoAMD or VkPipelineCreationFeedbackCreateInfo", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-parameter", + "text": "If stageCount is not 0, and pStages is not NULL, pStages must be a valid pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-parameter", + "text": "If pLibraryInfo is not NULL, pLibraryInfo must be a valid pointer to a valid VkPipelineLibraryCreateInfoKHR structure", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkExecutionGraphPipelineCreateInfoAMDX-commonparent", + "text": "Both of basePipelineHandle, and layout that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/executiongraphs.html" + } + ] + }, + "VkPipelineShaderStageNodeCreateInfoAMDX": { + "core": [ + { + "vuid": "VUID-VkPipelineShaderStageNodeCreateInfoAMDX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-VkPipelineShaderStageNodeCreateInfoAMDX-pName-parameter", + "text": "If pName is not NULL, pName must be a null-terminated UTF-8 string", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkGetExecutionGraphPipelineNodeIndexAMDX": { + "core": [ + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09140", + "text": "pNodeInfo->pName must not be NULL", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09141", + "text": "pNodeInfo->index must not be VK_SHADER_INDEX_UNUSED_AMDX", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-09142", + "text": "There must be a node in executionGraph with a shader name and index equal to pNodeInfo->pName and pNodeInfo->index", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-parameter", + "text": "executionGraph must be a valid VkPipeline handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-parameter", + "text": "pNodeInfo must be a valid pointer to a valid VkPipelineShaderStageNodeCreateInfoAMDX structure", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeIndex-parameter", + "text": "pNodeIndex must be a valid pointer to a uint32_t value", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-parent", + "text": "executionGraph must have been created, allocated, or retrieved from device", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkGetExecutionGraphPipelineScratchSizeAMDX": { + "core": [ + { + "vuid": "VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-executionGraph-parameter", + "text": "executionGraph must be a valid VkPipeline handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-pSizeInfo-parameter", + "text": "pSizeInfo must be a valid pointer to a VkExecutionGraphPipelineScratchSizeAMDX structure", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-executionGraph-parent", + "text": "executionGraph must have been created, allocated, or retrieved from device", + "page": "chapters/executiongraphs.html" + } + ] + }, + "VkExecutionGraphPipelineScratchSizeAMDX": { + "core": [ + { + "vuid": "VUID-VkExecutionGraphPipelineScratchSizeAMDX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkCmdInitializeGraphScratchMemoryAMDX": { + "core": [ + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-10185", + "text": "scratch must be the device address of an allocated memory range at least as large as scratchSize", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratchSize-10186", + "text": "scratchSize must be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSize returned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-09144", + "text": "scratch must be a multiple of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-executionGraph-parameter", + "text": "executionGraph must be a valid VkPipeline handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdInitializeGraphScratchMemoryAMDX-commonparent", + "text": "Both of commandBuffer, and executionGraph must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkCmdDispatchGraphAMDX": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-09181", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-09182", + "text": "commandBuffer must be a primary command buffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-scratch-10192", + "text": "scratch must be the device address of an allocated memory range at least as large as scratchSize", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-scratchSize-10193", + "text": "scratchSize must be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSize returned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-scratch-09184", + "text": "scratch must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX or VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-scratch-10194", + "text": "The device memory range [scratch,scratch
scratchSize] must have been initialized with vkCmdInitializeGraphScratchMemoryAMDX using the bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-maxComputeWorkGroupCount-09186", + "text": "Execution of this command must not cause a node to be dispatched with a larger number of workgroups than that specified by either a MaxNumWorkgroupsAMDX decoration in the dispatched node or maxComputeWorkGroupCount", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-maxExecutionGraphShaderPayloadCount-09187", + "text": "Execution of this command must not cause any shader to initialize more than maxExecutionGraphShaderPayloadCount output payloads", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-NodeMaxPayloadsAMDX-09188", + "text": "Execution of this command must not cause any shader that declares NodeMaxPayloadsAMDX to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to each NodeMaxPayloadsAMDX decoration separately", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-None-10195", + "text": "If the bound execution graph pipeline includes draw nodes, this command must be called within a render pass instance that is compatible with the graphics pipeline used to create each of those nodes", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-pCountInfo-09145", + "text": "pCountInfo->infos must be a host pointer to a memory allocation at least as large as the product of count and stride", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-infos-09146", + "text": "Host memory locations at indexes in the range [infos, infos + (count*stride)), at a granularity of stride must contain valid VkDispatchGraphInfoAMDX structures in the first 24 bytes", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-pCountInfo-09147", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, payloads must be a host pointer to a memory allocation at least as large as the product of payloadCount and payloadStride", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-pCountInfo-09148", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, nodeIndex must be a valid node index in the bound execution graph pipeline, as returned by vkGetExecutionGraphPipelineNodeIndexAMDX", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-pCountInfo-09149", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, host memory locations at indexes in the range [payloads, payloads + (payloadCount * payloadStride)), at a granularity of payloadStride must contain a payload matching the size of the input payload expected by the node in nodeIndex in the first bytes", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-pCountInfo-parameter", + "text": "pCountInfo must be a valid pointer to a valid VkDispatchGraphCountInfoAMDX structure", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphAMDX-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkCmdDispatchGraphIndirectAMDX": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-09181", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-09182", + "text": "commandBuffer must be a primary command buffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-scratch-10192", + "text": "scratch must be the device address of an allocated memory range at least as large as scratchSize", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-scratchSize-10193", + "text": "scratchSize must be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSize returned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-scratch-09184", + "text": "scratch must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX or VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-scratch-10194", + "text": "The device memory range [scratch,scratch
scratchSize] must have been initialized with vkCmdInitializeGraphScratchMemoryAMDX using the bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-maxComputeWorkGroupCount-09186", + "text": "Execution of this command must not cause a node to be dispatched with a larger number of workgroups than that specified by either a MaxNumWorkgroupsAMDX decoration in the dispatched node or maxComputeWorkGroupCount", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-maxExecutionGraphShaderPayloadCount-09187", + "text": "Execution of this command must not cause any shader to initialize more than maxExecutionGraphShaderPayloadCount output payloads", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-NodeMaxPayloadsAMDX-09188", + "text": "Execution of this command must not cause any shader that declares NodeMaxPayloadsAMDX to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to each NodeMaxPayloadsAMDX decoration separately", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-None-10195", + "text": "If the bound execution graph pipeline includes draw nodes, this command must be called within a render pass instance that is compatible with the graphics pipeline used to create each of those nodes", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09150", + "text": "pCountInfo->infos must be a device pointer to a memory allocation at least as large as the product of count and stride when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09151", + "text": "pCountInfo->infos must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09152", + "text": "pCountInfo->infos must be a multiple of executionGraphDispatchAddressAlignment", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-infos-09153", + "text": "Device memory locations at indexes in the range [infos, infos + (count*stride)), at a granularity of stride must contain valid VkDispatchGraphInfoAMDX structures in the first 24 bytes when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09154", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, payloads must be a device pointer to a memory allocation at least as large as the product of payloadCount and payloadStride when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09155", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, payloads must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09156", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, payloads must be a multiple of executionGraphDispatchAddressAlignment", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09157", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, nodeIndex must be a valid node index in the bound execution graph pipeline, as returned by vkGetExecutionGraphPipelineNodeIndexAMDX when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09158", + "text": "For each VkDispatchGraphInfoAMDX structure in pCountInfo->infos, device memory locations at indexes in the range [payloads, payloads + (payloadCount * payloadStride)), at a granularity of payloadStride must contain a payload matching the size of the input payload expected by the node in nodeIndex in the first bytes when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-parameter", + "text": "pCountInfo must be a valid pointer to a valid VkDispatchGraphCountInfoAMDX structure", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectAMDX-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkCmdDispatchGraphIndirectCountAMDX": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-magFilter-04553", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-magFilter-09598", + "text": "If a VkSampler created with magFilter or minFilter equal to VK_FILTER_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-mipmapMode-04770", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR, reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, and compareEnable equal to VK_FALSE is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-mipmapMode-09599", + "text": "If a VkSampler created with mipmapMode equal to VK_SAMPLER_MIPMAP_MODE_LINEAR and reductionMode equal to either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-unnormalizedCoordinates-09635", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s levelCount and layerCount must be 1", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08609", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’s viewType must be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08610", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions with ImplicitLod, Dref or Proj in their name", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08611", + "text": "If a VkSampler created with unnormalizedCoordinates equal to VK_TRUE is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V OpImageSample* or OpImageSparseSample* instructions that includes a LOD bias or any offset values", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-06479", + "text": "If a VkImageView is sampled with depth comparison, the image view’s format features must contain VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-02691", + "text": "If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-07888", + "text": "If a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-02692", + "text": "If a VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-02693", + "text": "If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with VK_FILTER_CUBIC_EXT as a result of this command, it must not have a VkImageViewType of VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, or VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-filterCubic-02694", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-filterCubicMinmax-02695", + "text": "Any VkImageView being sampled with VK_FILTER_CUBIC_EXT with a reduction mode of either VK_SAMPLER_REDUCTION_MODE_MIN or VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-cubicRangeClamp-09212", + "text": "If the cubicRangeClamp feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-reductionMode-09213", + "text": "Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionMode equal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-selectableCubicWeights-09214", + "text": "If the selectableCubicWeights feature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeights equal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-flags-02696", + "text": "Any VkImage created with a VkImageCreateInfo::flags containing VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07027", + "text": "For any VkImageView being written as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07028", + "text": "For any VkImageView being read as a storage image where the image format field of the OpTypeImage is Unknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07029", + "text": "For any VkBufferView being written as a storage texel buffer where the image format field of the OpTypeImage is Unknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07030", + "text": "Any VkBufferView being read as a storage texel buffer where the image format field of the OpTypeImage is Unknown then the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08600", + "text": "For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08601", + "text": "For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10068", + "text": "For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-maintenance4-08602", + "text": "If the maintenance4 feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08114", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08115", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08116", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08604", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08117", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08119", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08605", + "text": "If a descriptor is dynamically used with a VkShaderEXT created with a VkDescriptorSetLayout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08606", + "text": "If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08608", + "text": "If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-uniformBuffers-06935", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08612", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-storageBuffers-06936", + "text": "If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08613", + "text": "If the robustBufferAccess feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-02707", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-viewType-07752", + "text": "If a VkImageView is accessed as a result of this command, then the image view’s viewType must match the Dim operand of the OpTypeImage as described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-format-07753", + "text": "If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s format and the Sampled Type operand of the OpTypeImage must match", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08795", + "text": "If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the image view’s format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08796", + "text": "If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have four components", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-04469", + "text": "If a VkBufferView is accessed using OpImageWrite as a result of this command, then the Type of the Texel operand of that instruction must have at least as many components as the buffer view’s format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04470", + "text": "If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04471", + "text": "If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04472", + "text": "If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 64", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04473", + "text": "If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the SampledType of the OpTypeImage operand of that instruction must have a Width of 32", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-sparseImageInt64Atomics-04474", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-sparseImageInt64Atomics-04475", + "text": "If the sparseImageInt64Atomics feature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an OpTypeImage with a SampledType with a Width of 64 by this command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06971", + "text": "If OpImageWeightedSampleQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06972", + "text": "If OpImageWeightedSampleQCOM uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBoxFilterQCOM-06973", + "text": "If OpImageBoxFilterQCOM is used to sample a VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchSSDQCOM-06974", + "text": "If OpImageBlockMatchSSDQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchSADQCOM-06975", + "text": "If OpImageBlockMatchSADQCOM is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchSADQCOM-06976", + "text": "If OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06977", + "text": "If OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06978", + "text": "If any command other than OpImageWeightedSampleQCOM, OpImageBoxFilterQCOM, OpImageBlockMatchWindowSSDQCOM, OpImageBlockMatchWindowSADQCOM, OpImageBlockMatchGatherSSDQCOM, OpImageBlockMatchGatherSADQCOM, OpImageBlockMatchSSDQCOM, or OpImageBlockMatchSADQCOM uses a VkSampler as a result of this command, then the sampler must not have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09215", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09216", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09217", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-07288", + "text": "Any shader invocation executed by this command must terminate", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-09600", + "text": "If a descriptor with type equal to any of VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-10746", + "text": "The VkDeviceMemory object allocated from a VkMemoryHeap with the VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in commandBuffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10678", + "text": "If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT, and/or VK_SHADER_STAGE_COMPUTE_BIT", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10679", + "text": "If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-pDescription-09900", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_SHADER_BIT_ARM", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-dimensionCount-09905", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the Rank of the OpTypeTensorARM of the tensor resource variable must be equal to the dimensionCount provided via VkTensorCreateInfoARM::pDescription when creating the underlying VkTensorARM object", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeTensorARM-09906", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the OpTypeTensorARM of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09181", + "text": "commandBuffer must not be a protected command buffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09182", + "text": "commandBuffer must be a primary command buffer", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-10192", + "text": "scratch must be the device address of an allocated memory range at least as large as scratchSize", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-scratchSize-10193", + "text": "scratchSize must be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSize returned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-09184", + "text": "scratch must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX or VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-10194", + "text": "The device memory range [scratch,scratch
scratchSize] must have been initialized with vkCmdInitializeGraphScratchMemoryAMDX using the bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-maxComputeWorkGroupCount-09186", + "text": "Execution of this command must not cause a node to be dispatched with a larger number of workgroups than that specified by either a MaxNumWorkgroupsAMDX decoration in the dispatched node or maxComputeWorkGroupCount", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-maxExecutionGraphShaderPayloadCount-09187", + "text": "Execution of this command must not cause any shader to initialize more than maxExecutionGraphShaderPayloadCount output payloads", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-NodeMaxPayloadsAMDX-09188", + "text": "Execution of this command must not cause any shader that declares NodeMaxPayloadsAMDX to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to each NodeMaxPayloadsAMDX decoration separately", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10195", + "text": "If the bound execution graph pipeline includes draw nodes, this command must be called within a render pass instance that is compatible with the graphics pipeline used to create each of those nodes", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09159", + "text": "countInfo must be a device pointer to a memory allocation containing a valid VkDispatchGraphCountInfoAMDX structure when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09160", + "text": "countInfo must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09161", + "text": "countInfo must be a multiple of executionGraphDispatchAddressAlignment", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09162", + "text": "countInfo->infos must be a device pointer to a memory allocation at least as large as the product of count and stride when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09163", + "text": "countInfo->infos must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09164", + "text": "countInfo->infos must be a multiple of executionGraphDispatchAddressAlignment", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-infos-09165", + "text": "Device memory locations at indexes in the range [infos, infos + (count*stride)), at a granularity of stride must contain valid VkDispatchGraphInfoAMDX structures in the first 24 bytes when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09166", + "text": "For each VkDispatchGraphInfoAMDX structure in countInfo->infos, payloads must be a device pointer to a memory allocation at least as large as the product of payloadCount and payloadStride when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09167", + "text": "For each VkDispatchGraphInfoAMDX structure in countInfo->infos, payloads must be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT flag", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09168", + "text": "For each VkDispatchGraphInfoAMDX structure in countInfo->infos, payloads must be a multiple of executionGraphDispatchAddressAlignment", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09169", + "text": "For each VkDispatchGraphInfoAMDX structure in countInfo->infos, nodeIndex must be a valid node index in the bound execution graph pipeline, as returned by vkGetExecutionGraphPipelineNodeIndexAMDX when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09170", + "text": "For each VkDispatchGraphInfoAMDX structure in countInfo->infos, device memory locations at indexes in the range [payloads, payloads + (payloadCount * payloadStride)), at a granularity of payloadStride must contain a payload matching the size of the input payload expected by the node in nodeIndex in the first bytes when this command is executed on the device", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/executiongraphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchGraphIndirectCountAMDX-bufferlevel", + "text": "commandBuffer must be a primary VkCommandBuffer", + "page": "chapters/executiongraphs.html" + } + ] + }, + "VkDispatchGraphInfoAMDX": { + "core": [ + { + "vuid": "VUID-VkDispatchGraphInfoAMDX-payloadCount-09171", + "text": "payloadCount must be no greater than maxExecutionGraphShaderPayloadCount", + "page": "chapters/executiongraphs.html" + } + ] + }, + "vkCreateExternalComputeQueueNV": { + "core": [ + { + "vuid": "VUID-vkCreateExternalComputeQueueNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkCreateExternalComputeQueueNV-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkExternalComputeQueueCreateInfoNV structure", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkCreateExternalComputeQueueNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkCreateExternalComputeQueueNV-pExternalQueue-parameter", + "text": "pExternalQueue must be a valid pointer to a VkExternalComputeQueueNV handle", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkCreateExternalComputeQueueNV-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "vkDestroyExternalComputeQueueNV": { + "core": [ + { + "vuid": "VUID-vkDestroyExternalComputeQueueNV-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkDestroyExternalComputeQueueNV-externalQueue-parameter", + "text": "externalQueue must be a valid VkExternalComputeQueueNV handle", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkDestroyExternalComputeQueueNV-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkDestroyExternalComputeQueueNV-externalQueue-parent", + "text": "externalQueue must have been created, allocated, or retrieved from device", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "vkGetExternalComputeQueueDataNV": { + "core": [ + { + "vuid": "VUID-vkGetExternalComputeQueueDataNV-pData-08134", + "text": "pData must be at least the size specified by the externalDataSize field in the VkPhysicalDeviceExternalComputeQueuePropertiesNV structure", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkGetExternalComputeQueueDataNV-externalQueue-parameter", + "text": "externalQueue must be a valid VkExternalComputeQueueNV handle", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkGetExternalComputeQueueDataNV-params-parameter", + "text": "params must be a valid pointer to a VkExternalComputeQueueDataParamsNV structure", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-vkGetExternalComputeQueueDataNV-pData-parameter", + "text": "pData must be a pointer value", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "VkExternalComputeQueueDeviceCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkExternalComputeQueueDeviceCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "VkExternalComputeQueueCreateInfoNV": { + "core": [ + { + "vuid": "VUID-VkExternalComputeQueueCreateInfoNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-VkExternalComputeQueueCreateInfoNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-VkExternalComputeQueueCreateInfoNV-preferredQueue-parameter", + "text": "preferredQueue must be a valid VkQueue handle", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "VkExternalComputeQueueDataParamsNV": { + "core": [ + { + "vuid": "VUID-VkExternalComputeQueueDataParamsNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + }, + { + "vuid": "VUID-VkExternalComputeQueueDataParamsNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "VkPhysicalDeviceExternalComputeQueuePropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalComputeQueuePropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV", + "page": "chapters/VK_NV_external_compute_queue/VK_NV_external_compute_queue.html" + } + ] + }, + "vkCreateDataGraphPipelinesARM": { + "core": [ + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-dataGraph-09760", + "text": "The dataGraph feature must be enabled", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-device-09927", + "text": "device must support at least one queue family with the VK_QUEUE_DATA_GRAPH_BIT_ARM capability", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-deferredOperation-09761", + "text": "deferredOperation must be VK_NULL_HANDLE", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-deferredOperation-09916", + "text": "If deferredOperation is not VK_NULL_HANDLE, the flags member of elements of pCreateInfos must not include VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pNext-09928", + "text": "If at least one of the VkDataGraphPipelineCreateInfoARM includes a VkDataGraphPipelineIdentifierCreateInfoARM structure in its pNext chain then pipelineCache must not be VK_NULL_HANDLE", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pipelineCache-09762", + "text": "If pipelineCache was created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access to pipelineCache must be externally synchronized", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-deferredOperation-parameter", + "text": "If deferredOperation is not VK_NULL_HANDLE, deferredOperation must be a valid VkDeferredOperationKHR handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pipelineCache-parameter", + "text": "If pipelineCache is not VK_NULL_HANDLE, pipelineCache must be a valid VkPipelineCache handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pCreateInfos-parameter", + "text": "pCreateInfos must be a valid pointer to an array of createInfoCount valid VkDataGraphPipelineCreateInfoARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pPipelines-parameter", + "text": "pPipelines must be a valid pointer to an array of createInfoCount VkPipeline handles", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-createInfoCount-arraylength", + "text": "createInfoCount must be greater than 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-deferredOperation-parent", + "text": "If deferredOperation is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelinesARM-pipelineCache-parent", + "text": "If pipelineCache is a valid handle, it must have been created, allocated, or retrieved from device", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pNext-09763", + "text": "One and only one of the following structures must be included in the pNext chain:", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-flags-09764", + "text": "flags may only contain VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT, VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT, VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT, VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT, VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR or VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-layout-09767", + "text": "layout must have been created with pushConstantRangeCount equal to 0 and pPushConstantRanges equal to NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-dataGraphUpdateAfterBind-09768", + "text": "If the dataGraphUpdateAfterBind feature is not enabled, layout must not use any VkDescriptorSetLayout object created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT bit set", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-dataGraphDescriptorBuffer-09885", + "text": "If the dataGraphDescriptorBuffer feature is not enabled, flags must not contain VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-module-09769", + "text": "If a resource variable is declared in VkDataGraphPipelineShaderModuleCreateInfoARM::module, a descriptor slot in layout must match the descriptor type", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pNext-09875", + "text": "If a VkDataGraphPipelineIdentifierCreateInfoARM structure is included in the pNext chain, then flags must contain VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pNext-09876", + "text": "If a VkDataGraphPipelineIdentifierCreateInfoARM structure is included in the pNext chain, then a VkDataGraphPipelineShaderModuleCreateInfoARM structure must not be included in the pNext chain", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pNext-09882", + "text": "If a VkDataGraphPipelineIdentifierCreateInfoARM structure is included in the pNext chain, then resourceInfoCount must be 0 and pResourceInfos must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-dataGraphShaderModule-09886", + "text": "If the dataGraphShaderModule feature is not enabled, a VkDataGraphPipelineShaderModuleCreateInfoARM structure must not be included in the pNext chain", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-module-09934", + "text": "If a resource variable is declared in module as an array, a descriptor slot in layout must match the descriptor count", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pipelineCreationCacheControl-09871", + "text": "If the pipelineCreationCacheControl feature is not enabled, flags must not include VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR or VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pSetLayouts-09770", + "text": "The descriptor set layouts in VkPipelineLayoutCreateInfo::pSetLayouts used to create layout must not include any VkDescriptorSetLayoutBinding whose descriptor type is VK_DESCRIPTOR_TYPE_MUTABLE_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pResourceInfos-09771", + "text": "For each of the structures in pResourceInfos, VkDataGraphPipelineResourceInfoARM::descriptorSet and VkDataGraphPipelineResourceInfoARM::binding must correspond to a resource variable declared in module", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pipelineProtectedAccess-09772", + "text": "If the pipelineProtectedAccess feature is not enabled, flags must not include VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT or VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-flags-09773", + "text": "flags must not include both VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT and VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pNext-09804", + "text": "If the pNext chain includes an VkPipelineCreationFeedbackCreateInfo structure, then its pipelineStageCreationFeedbackCount must be 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDataGraphPipelineCompilerControlCreateInfoARM, VkDataGraphPipelineIdentifierCreateInfoARM, VkDataGraphPipelineShaderModuleCreateInfoARM, VkDataGraphProcessingEngineCreateInfoARM, or VkPipelineCreationFeedbackCreateInfo", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-flags-parameter", + "text": "flags must be a valid combination of VkPipelineCreateFlagBits2KHR values", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-layout-parameter", + "text": "layout must be a valid VkPipelineLayout handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-pResourceInfos-parameter", + "text": "pResourceInfos must be a valid pointer to an array of resourceInfoCount valid VkDataGraphPipelineResourceInfoARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCreateInfoARM-resourceInfoCount-arraylength", + "text": "resourceInfoCount must be greater than 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineShaderModuleCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-id-09774", + "text": "The id member of all structures in pConstants must be a valid GraphConstantID used by a OpGraphConstantARM instruction in module", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-dataGraphSpecializationConstants-09849", + "text": "If the dataGraphSpecializationConstants feature is not enabled then pSpecializationInfo must be NULL and module must not contain any OpSpec* instructions", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pName-09872", + "text": "pName must be the name of an OpGraphEntryPointARM in module", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pNext-09873", + "text": "If the pNext chain includes a VkShaderModuleCreateInfo structure, then module must be VK_NULL_HANDLE", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pNext-09874", + "text": "If the pNext chain does not include a VkShaderModuleCreateInfo structure, then module must be a valid VkShaderModule", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-module-parameter", + "text": "If module is not VK_NULL_HANDLE, module must be a valid VkShaderModule handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pName-parameter", + "text": "pName must be a null-terminated UTF-8 string", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pSpecializationInfo-parameter", + "text": "If pSpecializationInfo is not NULL, pSpecializationInfo must be a valid pointer to a valid VkSpecializationInfo structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pConstants-parameter", + "text": "If constantCount is not 0, and pConstants is not NULL, pConstants must be a valid pointer to an array of constantCount valid VkDataGraphPipelineConstantARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineIdentifierCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineIdentifierCreateInfoARM-pIdentifer-09877", + "text": "The data provided via pIdentifer must have been obtained by calling vkGetDataGraphPipelinePropertiesARM to query the value of the VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM property", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineIdentifierCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineIdentifierCreateInfoARM-pIdentifier-parameter", + "text": "pIdentifier must be a valid pointer to an array of identifierSize uint8_t values", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineIdentifierCreateInfoARM-identifierSize-arraylength", + "text": "identifierSize must be greater than 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineCompilerControlCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineCompilerControlCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineCompilerControlCreateInfoARM-pVendorOptions-parameter", + "text": "pVendorOptions must be a null-terminated UTF-8 string", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineConstantARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pNext-09775", + "text": "If the pNext chain of this structure includes one or more VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM structures then it must also include a VkTensorDescriptionARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pNext-09776", + "text": "If the pNext chain of this structure includes one or more VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM structures then, for each structure, VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM::dimension must be less than VkTensorDescriptionARM::dimensionCount", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pNext-09777", + "text": "If the pNext chain of this structure includes a VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM structure then, for each structure, VkTensorDescriptionARM::pDimensions[VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM::dimension] must be a multiple of VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM::groupSize", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pNext-09870", + "text": "If the pNext chain of this structure includes multiple VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM structures then no two structures may have their VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM::dimension member set to the same value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-id-09850", + "text": "If id corresponds to a graph constant of tensor type, then a VkTensorDescriptionARM structure whose usage member contains VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM must be included in the pNext chain", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pNext-09917", + "text": "If the pNext chain of this structure includes a VkTensorDescriptionARM structure, then its tiling member must be VK_TENSOR_TILING_LINEAR_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM or VkTensorDescriptionARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique, with the exception of structures of type VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineConstantARM-pConstantData-parameter", + "text": "pConstantData must be a pointer value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineResourceInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineResourceInfoARM-arrayElement-09779", + "text": "arrayElement must be 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineResourceInfoARM-descriptorSet-09851", + "text": "If descriptorSet and binding identify a tensor resource or an array of tensor resources, then a VkTensorDescriptionARM structure whose usage contains VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM must be included in the pNext chain", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineResourceInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineResourceInfoARM-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkTensorDescriptionARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineResourceInfoARM-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkCreateDataGraphPipelineSessionARM": { + "core": [ + { + "vuid": "VUID-vkCreateDataGraphPipelineSessionARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelineSessionARM-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDataGraphPipelineSessionCreateInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelineSessionARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelineSessionARM-pSession-parameter", + "text": "pSession must be a valid pointer to a VkDataGraphPipelineSessionARM handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCreateDataGraphPipelineSessionARM-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineSessionCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineSessionCreateInfoARM-dataGraphPipeline-09781", + "text": "dataGraphPipeline must have been obtained via a call to vkCreateDataGraphPipelinesARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionCreateInfoARM-protectedMemory-09782", + "text": "If the protectedMemory feature is not enabled, flags must not contain VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionCreateInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionCreateInfoARM-flags-parameter", + "text": "flags must be a valid combination of VkDataGraphPipelineSessionCreateFlagBitsARM values", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionCreateInfoARM-dataGraphPipeline-parameter", + "text": "dataGraphPipeline must be a valid VkPipeline handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkGetDataGraphPipelineSessionBindPointRequirementsARM": { + "core": [ + { + "vuid": "VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-session-09783", + "text": "The session member of pInfo must have been created with device", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDataGraphPipelineSessionBindPointRequirementsInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-pBindPointRequirementCount-parameter", + "text": "pBindPointRequirementCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-pBindPointRequirements-parameter", + "text": "If the value referenced by pBindPointRequirementCount is not 0, and pBindPointRequirements is not NULL, pBindPointRequirements must be a valid pointer to an array of pBindPointRequirementCount VkDataGraphPipelineSessionBindPointRequirementARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineSessionBindPointRequirementsInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementsInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementsInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementsInfoARM-session-parameter", + "text": "session must be a valid VkDataGraphPipelineSessionARM handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineSessionBindPointRequirementARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementARM-bindPoint-parameter", + "text": "bindPoint must be a valid VkDataGraphPipelineSessionBindPointARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionBindPointRequirementARM-bindPointType-parameter", + "text": "bindPointType must be a valid VkDataGraphPipelineSessionBindPointTypeARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkGetDataGraphPipelineSessionMemoryRequirementsARM": { + "core": [ + { + "vuid": "VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-bindPoint-09784", + "text": "The bindPoint member of pInfo must have been returned as part of a VkDataGraphPipelineSessionBindPointRequirementARM whose bindPointType member is VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM by a prior call to vkGetDataGraphPipelineSessionMemoryRequirementsARM for the session member of pInfo", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-pInfo-parameter", + "text": "pInfo must be a valid pointer to a valid VkDataGraphPipelineSessionMemoryRequirementsInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-pMemoryRequirements-parameter", + "text": "pMemoryRequirements must be a valid pointer to a VkMemoryRequirements2 structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineSessionMemoryRequirementsInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-objectIndex-09855", + "text": "objectIndex must be less than the number of objects returned by vkGetDataGraphPipelineSessionBindPointRequirementsARM via VkDataGraphPipelineSessionBindPointRequirementARM::numObjects with VkDataGraphPipelineSessionMemoryRequirementsInfoARM::bindPoint equal to bindPoint", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-session-parameter", + "text": "session must be a valid VkDataGraphPipelineSessionARM handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-bindPoint-parameter", + "text": "bindPoint must be a valid VkDataGraphPipelineSessionBindPointARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkBindDataGraphPipelineSessionMemoryARM": { + "core": [ + { + "vuid": "VUID-vkBindDataGraphPipelineSessionMemoryARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkBindDataGraphPipelineSessionMemoryARM-pBindInfos-parameter", + "text": "pBindInfos must be a valid pointer to an array of bindInfoCount valid VkBindDataGraphPipelineSessionMemoryInfoARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkBindDataGraphPipelineSessionMemoryARM-bindInfoCount-arraylength", + "text": "bindInfoCount must be greater than 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkBindDataGraphPipelineSessionMemoryInfoARM": { + "core": [ + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-09785", + "text": "session must not have been bound to a memory object for bindPoint", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-bindPoint-09786", + "text": "bindPoint must have been returned as part of a VkDataGraphPipelineSessionBindPointRequirementARM whose bindPointType member is VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM by a prior call to vkGetDataGraphPipelineSessionMemoryRequirementsARM for session", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memoryOffset-09787", + "text": "memoryOffset must be less than the size of memory", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memory-09788", + "text": "memory must have been allocated using one of the memory types allowed in the memoryTypeBits member of the VkMemoryRequirements structure returned from a call to vkGetDataGraphPipelineSessionMemoryRequirementsARM with session", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memoryOffset-09789", + "text": "memoryOffset must be an integer multiple of the alignment member of the VkMemoryRequirements structure returned from a call to vkGetDataGraphPipelineSessionMemoryRequirementsARM with session", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-size-09790", + "text": "The size member of the VkMemoryRequirements structure returned from a call to vkGetDataGraphPipelineSessionMemoryRequirementsARM with session must be less than or equal to the size of memory minus memoryOffset", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-09791", + "text": "If session was created with the VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM bit set, the session must be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-09792", + "text": "If session was created with the VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM bit not set, the session must not be bound to a memory object allocated with a memory type that reports VK_MEMORY_PROPERTY_PROTECTED_BIT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-objectIndex-09805", + "text": "objectIndex must be less than the value of numObjects returned by vkGetDataGraphPipelineSessionBindPointRequirementsARM for bindPoint", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-parameter", + "text": "session must be a valid VkDataGraphPipelineSessionARM handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-bindPoint-parameter", + "text": "bindPoint must be a valid VkDataGraphPipelineSessionBindPointARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memory-parameter", + "text": "memory must be a valid VkDeviceMemory handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-commonparent", + "text": "Both of memory, and session must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkDestroyDataGraphPipelineSessionARM": { + "core": [ + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-session-09793", + "text": "All submitted commands that refer to session must have completed execution", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-session-09794", + "text": "If VkAllocationCallbacks were provided when session was created, a compatible set of callbacks must be provided here", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-session-09795", + "text": "If no VkAllocationCallbacks were provided when session was created, pAllocator must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-session-parameter", + "text": "session must be a valid VkDataGraphPipelineSessionARM handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkDestroyDataGraphPipelineSessionARM-session-parent", + "text": "session must have been created, allocated, or retrieved from device", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkCmdDispatchDataGraphARM": { + "core": [ + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-session-09796", + "text": "For each of the session bind point requirements returned by vkGetDataGraphPipelineSessionBindPointRequirementsARM for session, VkDataGraphPipelineSessionBindPointRequirementARM::numObjects objects must have been bound to session", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09797", + "text": "For each set n that is statically used by a bound data graph pipeline, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline, as described in Pipeline Layout Compatibility", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09935", + "text": "Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09936", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09937", + "text": "Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09938", + "text": "If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09939", + "text": "If a descriptor is dynamically used with a VkPipeline created with VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-None-09799", + "text": "A valid data graph pipeline must be bound to the VK_PIPELINE_BIND_POINT_DATA_GRAPH_ARM pipeline bind point used by this command", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-pDescription-09930", + "text": "If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::pDescription whose usage member contained VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-09940", + "text": "If commandBuffer was allocated from a pool that was created with a VkDataGraphProcessingEngineCreateInfoARM structure in the pNext chain of VkCommandPoolCreateInfo that included a foreign data graph processing engine in its pProcessingEngines member, then all VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptors accessed as a result of this command must be tied to VkTensorARM objects that have been bound to memory created from external handle types reported as supported in a VkQueueFamilyDataGraphProcessingEnginePropertiesARM::foreignMemoryHandleTypes structure via vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM with a queueFamilyIndex matching the one the command pool was created for, for all the foreign data graph processing engines that were part of the VkDataGraphProcessingEngineCreateInfoARM used to create the command pool", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-09800", + "text": "If commandBuffer is an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound data graph pipelines must not be a protected resource", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-09801", + "text": "If commandBuffer is a protected command buffer and protectedNoFault is not supported, any resource written to by the VkPipeline object bound to the bind point used by this command must not be an unprotected resource", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-09941", + "text": "All the operations used by the bound data graph pipeline must be supported on the queue family for which the command pool out of which commandBuffer was allocated, as reported by vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-session-parameter", + "text": "session must be a valid VkDataGraphPipelineSessionARM handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-pInfo-parameter", + "text": "If pInfo is not NULL, pInfo must be a valid pointer to a valid VkDataGraphPipelineDispatchInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support data_graph operations", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-renderpass", + "text": "This command must only be called outside of a render pass instance", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkCmdDispatchDataGraphARM-commonparent", + "text": "Both of commandBuffer, and session must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineDispatchInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineDispatchInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineDispatchInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineDispatchInfoARM-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkGetDataGraphPipelineAvailablePropertiesARM": { + "core": [ + { + "vuid": "VUID-vkGetDataGraphPipelineAvailablePropertiesARM-dataGraphPipeline-09887", + "text": "The dataGraphPipeline member of pPipelineInfo must have been returned by a call to vkCreateDataGraphPipelinesARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineAvailablePropertiesARM-dataGraphPipeline-09888", + "text": "The dataGraphPipeline member of pPipelineInfo must have been created with device", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineAvailablePropertiesARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineAvailablePropertiesARM-pPipelineInfo-parameter", + "text": "pPipelineInfo must be a valid pointer to a valid VkDataGraphPipelineInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineAvailablePropertiesARM-pPropertiesCount-parameter", + "text": "pPropertiesCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelineAvailablePropertiesARM-pProperties-parameter", + "text": "If the value referenced by pPropertiesCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertiesCount VkDataGraphPipelinePropertyARM values", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkGetDataGraphPipelinePropertiesARM": { + "core": [ + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-dataGraphPipeline-09869", + "text": "The dataGraphPipeline member of pPipelineInfo must have been returned by a call to vkCreateDataGraphPipelinesARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-dataGraphPipeline-09802", + "text": "The dataGraphPipeline member of pPipelineInfo must have been created with device", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-pProperties-09889", + "text": "There must not be two or more structures in the pProperties array with the same VkDataGraphPipelinePropertyQueryResultARM::property", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-pPipelineInfo-parameter", + "text": "pPipelineInfo must be a valid pointer to a valid VkDataGraphPipelineInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-pProperties-parameter", + "text": "pProperties must be a valid pointer to an array of propertiesCount VkDataGraphPipelinePropertyQueryResultARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetDataGraphPipelinePropertiesARM-propertiesCount-arraylength", + "text": "propertiesCount must be greater than 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelineInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelineInfoARM-dataGraphPipeline-09803", + "text": "dataGraphPipeline must have been created with vkCreateDataGraphPipelinesARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelineInfoARM-dataGraphPipeline-parameter", + "text": "dataGraphPipeline must be a valid VkPipeline handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphPipelinePropertyQueryResultARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphPipelinePropertyQueryResultARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelinePropertyQueryResultARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelinePropertyQueryResultARM-property-parameter", + "text": "property must be a valid VkDataGraphPipelinePropertyARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphPipelinePropertyQueryResultARM-pData-parameter", + "text": "If dataSize is not 0, and pData is not NULL, pData must be a valid pointer to an array of dataSize bytes", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM-pQueueFamilyDataGraphProcessingEngineInfo-parameter", + "text": "pQueueFamilyDataGraphProcessingEngineInfo must be a valid pointer to a valid VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM-pQueueFamilyDataGraphProcessingEngineProperties-parameter", + "text": "pQueueFamilyDataGraphProcessingEngineProperties must be a valid pointer to a VkQueueFamilyDataGraphProcessingEnginePropertiesARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM-engineType-parameter", + "text": "engineType must be a valid VkPhysicalDeviceDataGraphProcessingEngineTypeARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkQueueFamilyDataGraphProcessingEnginePropertiesARM": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyDataGraphProcessingEnginePropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphProcessingEnginePropertiesARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphProcessingEnginePropertiesARM-foreignSemaphoreHandleTypes-parameter", + "text": "foreignSemaphoreHandleTypes must be a valid combination of VkExternalSemaphoreHandleTypeFlagBits values", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphProcessingEnginePropertiesARM-foreignSemaphoreHandleTypes-requiredbitmask", + "text": "foreignSemaphoreHandleTypes must not be 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphProcessingEnginePropertiesARM-foreignMemoryHandleTypes-parameter", + "text": "foreignMemoryHandleTypes must be a valid combination of VkExternalMemoryHandleTypeFlagBits values", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphProcessingEnginePropertiesARM-foreignMemoryHandleTypes-requiredbitmask", + "text": "foreignMemoryHandleTypes must not be 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkPhysicalDeviceDataGraphProcessingEngineARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDataGraphProcessingEngineARM-type-parameter", + "text": "type must be a valid VkPhysicalDeviceDataGraphProcessingEngineTypeARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkDataGraphProcessingEngineCreateInfoARM": { + "core": [ + { + "vuid": "VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-09918", + "text": "pProcessingEngines must not contain identical VkPhysicalDeviceDataGraphProcessingEngineARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphProcessingEngineCreateInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-parameter", + "text": "pProcessingEngines must be a valid pointer to an array of processingEngineCount VkPhysicalDeviceDataGraphProcessingEngineARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkDataGraphProcessingEngineCreateInfoARM-processingEngineCount-arraylength", + "text": "processingEngineCount must be greater than 0", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-pQueueFamilyDataGraphPropertyCount-parameter", + "text": "pQueueFamilyDataGraphPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-pQueueFamilyDataGraphProperties-parameter", + "text": "If the value referenced by pQueueFamilyDataGraphPropertyCount is not 0, and pQueueFamilyDataGraphProperties is not NULL, pQueueFamilyDataGraphProperties must be a valid pointer to an array of pQueueFamilyDataGraphPropertyCount VkQueueFamilyDataGraphPropertiesARM structures", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkQueueFamilyDataGraphPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkQueueFamilyDataGraphPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphPropertiesARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphPropertiesARM-engine-parameter", + "text": "engine must be a valid VkPhysicalDeviceDataGraphProcessingEngineARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkQueueFamilyDataGraphPropertiesARM-operation-parameter", + "text": "operation must be a valid VkPhysicalDeviceDataGraphOperationSupportARM structure", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "VkPhysicalDeviceDataGraphOperationSupportARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDataGraphOperationSupportARM-operationType-parameter", + "text": "operationType must be a valid VkPhysicalDeviceDataGraphOperationTypeARM value", + "page": "chapters/VK_ARM_data_graph/graphs.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceDataGraphOperationSupportARM-name-parameter", + "text": "name must be a null-terminated UTF-8 string whose length is less than or equal to VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM", + "page": "chapters/VK_ARM_data_graph/graphs.html" + } + ] + }, + "vkEnumerateInstanceLayerProperties": { + "core": [ + { + "vuid": "VUID-vkEnumerateInstanceLayerProperties-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateInstanceLayerProperties-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkLayerProperties structures", + "page": "chapters/extensions.html" + } + ] + }, + "vkEnumerateDeviceLayerProperties": { + "core": [ + { + "vuid": "VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateDeviceLayerProperties-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateDeviceLayerProperties-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkLayerProperties structures", + "page": "chapters/extensions.html" + } + ] + }, + "vkEnumerateInstanceExtensionProperties": { + "core": [ + { + "vuid": "VUID-vkEnumerateInstanceExtensionProperties-pLayerName-parameter", + "text": "If pLayerName is not NULL, pLayerName must be a null-terminated UTF-8 string", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateInstanceExtensionProperties-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateInstanceExtensionProperties-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkExtensionProperties structures", + "page": "chapters/extensions.html" + } + ] + }, + "vkEnumerateDeviceExtensionProperties": { + "core": [ + { + "vuid": "VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateDeviceExtensionProperties-pLayerName-parameter", + "text": "If pLayerName is not NULL, pLayerName must be a null-terminated UTF-8 string", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateDeviceExtensionProperties-pPropertyCount-parameter", + "text": "pPropertyCount must be a valid pointer to a uint32_t value", + "page": "chapters/extensions.html" + }, + { + "vuid": "VUID-vkEnumerateDeviceExtensionProperties-pProperties-parameter", + "text": "If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a valid pointer to an array of pPropertyCount VkExtensionProperties structures", + "page": "chapters/extensions.html" + } + ] + }, + "vkGetPhysicalDeviceFeatures": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFeatures-pFeatures-parameter", + "text": "pFeatures must be a valid pointer to a VkPhysicalDeviceFeatures structure", + "page": "chapters/features.html" + } + ] + }, + "vkGetPhysicalDeviceFeatures2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFeatures2-pFeatures-parameter", + "text": "pFeatures must be a valid pointer to a VkPhysicalDeviceFeatures2 structure", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFeatures2": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFeatures2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVulkan11Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan11Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVulkan12Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan12Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVulkan13Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan13Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVulkan14Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkan14Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVariablePointersFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVariablePointersFeatures-variablePointers-01431", + "text": "If variablePointers is enabled then variablePointersStorageBuffer must also be enabled", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceVariablePointersFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMultiviewFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580", + "text": "If multiviewGeometryShader is enabled then multiview must also be enabled", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581", + "text": "If multiviewTessellationShader is enabled then multiview must also be enabled", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceMultiviewFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderAtomicFloatFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderAtomicInt64Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderAtomicInt64Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevice8BitStorageFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevice8BitStorageFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevice16BitStorageFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevice16BitStorageFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderFloat16Int8Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderFloat16Int8Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderClockFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderClockFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSamplerYcbcrConversionFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSamplerYcbcrConversionFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceProtectedMemoryFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceProtectedMemoryFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceConditionalRenderingFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceConditionalRenderingFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderDrawParametersFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderDrawParametersFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMeshShaderFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMeshShaderFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMeshShaderFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMeshShaderFeaturesEXT-multiviewMeshShader-07032", + "text": "If multiviewMeshShader is enabled then VkPhysicalDeviceMultiviewFeaturesKHR::multiview must also be enabled", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceMeshShaderFeaturesEXT-primitiveFragmentShadingRateMeshShader-07033", + "text": "If primitiveFragmentShadingRateMeshShader is enabled then VkPhysicalDeviceFragmentShadingRateFeaturesKHR::primitiveFragmentShadingRate must also be enabled", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceMeshShaderFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMemoryDecompressionFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMemoryDecompressionFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDescriptorIndexingFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorIndexingFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCopyMemoryIndirectFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCopyMemoryIndirectFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVertexAttributeDivisorFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVertexAttributeDivisorFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceASTCDecodeFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceASTCDecodeFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTransformFeedbackFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTransformFeedbackFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVulkanMemoryModelFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVulkanMemoryModelFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceInlineUniformBlockFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceInlineUniformBlockFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExclusiveScissorFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExclusiveScissorFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCornerSampledImageFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCornerSampledImageFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderImageFootprintFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderImageFootprintFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShadingRateImageFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShadingRateImageFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMapFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMapFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMap2FeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMap2FeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceInvocationMaskFeaturesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceInvocationMaskFeaturesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceScalarBlockLayoutFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceScalarBlockLayoutFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceUniformBufferStandardLayoutFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceUniformBufferStandardLayoutFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDepthClipEnableFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDepthClipEnableFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMemoryPriorityFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMemoryPriorityFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceBufferDeviceAddressFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceBufferDeviceAddressFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceBufferDeviceAddressFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImagelessFramebufferFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImagelessFramebufferFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCooperativeMatrixFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeMatrixFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCooperativeMatrixFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeMatrixFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCooperativeMatrix2FeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeMatrix2FeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCooperativeVectorFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeVectorFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceYcbcrImageArraysFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceHostQueryResetFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceHostQueryResetFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCoverageReductionModeFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCoverageReductionModeFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTimelineSemaphoreFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTimelineSemaphoreFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceIndexTypeUint8Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceIndexTypeUint8Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderSMBuiltinsFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderSMBuiltinsFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTextureCompressionASTCHDRFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTextureCompressionASTCHDRFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceLineRasterizationFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLineRasterizationFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSubgroupSizeControlFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSubgroupSizeControlFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCoherentMemoryFeaturesAMD": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCoherentMemoryFeaturesAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceAccelerationStructureFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAccelerationStructureFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingPipelineFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingPipelineFeaturesKHR-rayTracingPipelineShaderGroupHandleCaptureReplayMixed-03575", + "text": "If rayTracingPipelineShaderGroupHandleCaptureReplayMixed is VK_TRUE, rayTracingPipelineShaderGroupHandleCaptureReplay must also be VK_TRUE", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceRayTracingPipelineFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayQueryFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayQueryFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVideoMaintenance1FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoMaintenance1FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVideoMaintenance2FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoMaintenance2FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVideoEncodeAV1FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoEncodeAV1FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVideoDecodeVP9FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVideoDecodeVP9FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExtendedDynamicStateFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExtendedDynamicStateFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExtendedDynamicState2FeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExtendedDynamicState3FeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExtendedDynamicState3FeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDiagnosticsConfigFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDiagnosticsConfigFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceClusterAccelerationStructureFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceClusterAccelerationStructureFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDeviceMemoryReportFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDeviceMemoryReportFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceGlobalPriorityQueryFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceGlobalPriorityQueryFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineCreationCacheControlFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineCreationCacheControlFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePrivateDataFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePrivateDataFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRobustness2FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRobustness2FeaturesKHR-robustBufferAccess2-04000", + "text": "If robustBufferAccess2 is enabled then robustBufferAccess must also be enabled", + "page": "chapters/features.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceRobustness2FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageRobustnessFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageRobustnessFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderTerminateInvocationFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderTerminateInvocationFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCustomBorderColorFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCustomBorderColorFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceBorderColorSwizzleFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceBorderColorSwizzleFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePortabilitySubsetFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePortabilitySubsetFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePerformanceQueryFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePerformanceQueryFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevice4444FormatsFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevice4444FormatsFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDepthClipControlFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDepthClipControlFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDepthClampControlFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDepthClampControlFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSynchronization2Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSynchronization2Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentShadingRateFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShadingRateFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceLegacyDitheringFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLegacyDitheringFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceInheritedViewportScissorFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceInheritedViewportScissorFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineProtectedAccessFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineProtectedAccessFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceColorWriteEnableFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceColorWriteEnableFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelinePropertiesFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelinePropertiesFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceProvokingVertexFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceProvokingVertexFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDescriptorBufferFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorBufferFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDescriptorBufferTensorFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorBufferTensorFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMultiDrawFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiDrawFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingMotionBlurFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingMotionBlurFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceOpacityMicromapFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceOpacityMicromapFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDisplacementMicromapFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDisplacementMicromapFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingValidationFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingValidationFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSubpassShadingFeaturesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSubpassShadingFeaturesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExternalMemoryRDMAFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalMemoryRDMAFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentIdFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentIdFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentId2FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentId2FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentWaitFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentWaitFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentWait2FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentWait2FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceHostImageCopyFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceHostImageCopyFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentBarrierFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentBarrierFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderIntegerDotProductFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderIntegerDotProductFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMaintenance4Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance4Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMaintenance5Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance5Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMaintenance6Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance6Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMaintenance7FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance7FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMaintenance8FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance8FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMaintenance9FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance9FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDynamicRenderingFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDynamicRenderingFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineRobustnessFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineRobustnessFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageViewMinLodFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageViewMinLodFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceLinearColorAttachmentFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLinearColorAttachmentFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceNestedCommandBufferFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceNestedCommandBufferFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineBinaryFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineBinaryFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImage2DViewOf3DFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImage2DViewOf3DFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageCompressionControlFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageCompressionControlFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderFloatControls2Features": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderFloatControls2Features-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceAntiLagFeaturesAMD": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAntiLagFeaturesAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTilePropertiesFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTilePropertiesFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageProcessingFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageProcessingFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageProcessing2FeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageProcessing2FeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDepthClampZeroOneFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDepthClampZeroOneFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderTileImageFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderTileImageFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDepthBiasControlFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDepthBiasControlFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceAddressBindingReportFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAddressBindingReportFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceOpticalFlowFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceOpticalFlowFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFaultFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFaultFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderObjectFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderObjectFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTensorFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTensorFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFrameBoundaryFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFrameBoundaryFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_VRS_FEATURES_HUAWEI", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceHdrVividFeaturesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceHdrVividFeaturesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderEnqueueFeaturesAMDX": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderEnqueueFeaturesAMDX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCubicClampFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCubicClampFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceYcbcrDegammaFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceYcbcrDegammaFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCubicWeightsFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCubicWeightsFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePerStageDescriptorSetFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePerStageDescriptorSetFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCudaKernelLaunchFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCudaKernelLaunchFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceExternalFormatResolveFeaturesANDROID": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalFormatResolveFeaturesANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTileShadingFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTileShadingFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceSchedulingControlsFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSchedulingControlsFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRenderPassStripedFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRenderPassStripedFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderSubgroupRotateFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderSubgroupRotateFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderExpectAssumeFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderExpectAssumeFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDynamicRenderingLocalReadFeatures": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDynamicRenderingLocalReadFeatures-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderQuadControlFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderQuadControlFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderBfloat16FeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderBfloat16FeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceMapMemoryPlacedFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMapMemoryPlacedFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePipelineOpacityMicromapFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineOpacityMicromapFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceRawAccessChainsFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRawAccessChainsFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceCommandBufferInheritanceFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCommandBufferInheritanceFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceImageAlignmentControlFeaturesMESA": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageAlignmentControlFeaturesMESA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceTileMemoryHeapFeaturesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTileMemoryHeapFeaturesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePresentMeteringFeaturesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePresentMeteringFeaturesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceFormatPackFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFormatPackFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceDataGraphFeaturesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDataGraphFeaturesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDeviceShaderFloat8FeaturesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderFloat8FeaturesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT", + "page": "chapters/features.html" + } + ] + }, + "VkPhysicalDevicePushDescriptorProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePushDescriptorProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMultiviewProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiviewProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFloatControlsProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFloatControlsProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDiscardRectanglePropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDiscardRectanglePropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceSampleLocationsPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSampleLocationsPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceExternalMemoryHostPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalMemoryHostPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDevicePointClippingProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePointClippingProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceSubgroupProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSubgroupProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceSubgroupSizeControlProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSubgroupSizeControlProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceVertexAttributeDivisorProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceVertexAttributeDivisorProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceSamplerFilterMinmaxProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSamplerFilterMinmaxProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceProtectedMemoryProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceProtectedMemoryProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMaintenance3Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance3Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMaintenance4Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance4Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMaintenance5Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance5Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMaintenance6Properties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance6Properties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMaintenance7PropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance7PropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceLayeredApiPropertiesListKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiPropertiesListKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiPropertiesListKHR-pLayeredApis-parameter", + "text": "If layeredApiCount is not 0, and pLayeredApis is not NULL, pLayeredApis must be a valid pointer to an array of layeredApiCount VkPhysicalDeviceLayeredApiPropertiesKHR structures", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceLayeredApiPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_KHR", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiPropertiesKHR-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkPhysicalDeviceLayeredApiVulkanPropertiesKHR", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiPropertiesKHR-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceLayeredApiVulkanPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiVulkanPropertiesKHR-pNext-10011", + "text": "Only VkPhysicalDeviceDriverProperties and VkPhysicalDeviceIDProperties are allowed in the pNext chain of properties", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceLayeredApiVulkanPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMaintenance9PropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMaintenance9PropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMeshShaderPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMeshShaderPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMeshShaderPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMeshShaderPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDescriptorIndexingProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorIndexingProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceInlineUniformBlockProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceInlineUniformBlockProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceConservativeRasterizationPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceConservativeRasterizationPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMapPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMapPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMap2PropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMap2PropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentDensityMapLayeredPropertiesVALVE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_PROPERTIES_VALVE", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceTileMemoryHeapPropertiesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTileMemoryHeapPropertiesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_PROPERTIES_QCOM", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderCorePropertiesAMD": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderCorePropertiesAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderCoreProperties2AMD": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderCoreProperties2AMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDepthStencilResolveProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDepthStencilResolveProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDevicePerformanceQueryPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePerformanceQueryPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShadingRateImagePropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShadingRateImagePropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMemoryDecompressionPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMemoryDecompressionPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceTransformFeedbackPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTransformFeedbackPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCopyMemoryIndirectPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCopyMemoryIndirectPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceRayTracingPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceAccelerationStructurePropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAccelerationStructurePropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceRayTracingPipelinePropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingPipelinePropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCooperativeMatrixPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeMatrixPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCooperativeMatrixPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeMatrixPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCooperativeMatrix2PropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeMatrix2PropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCooperativeVectorPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCooperativeVectorPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderSMBuiltinsPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderSMBuiltinsPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceTexelBufferAlignmentProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTexelBufferAlignmentProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceTimelineSemaphoreProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTimelineSemaphoreProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceLineRasterizationProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceLineRasterizationProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceRobustness2PropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRobustness2PropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDevicePortabilitySubsetPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePortabilitySubsetPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceClusterAccelerationStructurePropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceClusterAccelerationStructurePropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentShadingRatePropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShadingRatePropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCustomBorderColorPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCustomBorderColorPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceProvokingVertexPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceProvokingVertexPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDescriptorBufferPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorBufferPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDescriptorBufferTensorPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorBufferTensorPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_PROPERTIES_ARM", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceHostImageCopyProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceHostImageCopyProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceHostImageCopyProperties-pCopySrcLayouts-parameter", + "text": "If copySrcLayoutCount is not 0, and pCopySrcLayouts is not NULL, pCopySrcLayouts must be a valid pointer to an array of copySrcLayoutCount VkImageLayout values", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceHostImageCopyProperties-pCopyDstLayouts-parameter", + "text": "If copyDstLayoutCount is not 0, and pCopyDstLayouts is not NULL, pCopyDstLayouts must be a valid pointer to an array of copyDstLayoutCount VkImageLayout values", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceSubpassShadingPropertiesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceSubpassShadingPropertiesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMultiDrawPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMultiDrawPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceNestedCommandBufferPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceNestedCommandBufferPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDevicePipelineRobustnessProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineRobustnessProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceExtendedDynamicState3PropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExtendedDynamicState3PropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceOpticalFlowPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceOpticalFlowPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceOpacityMicromapPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceOpacityMicromapPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceDisplacementMicromapPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDisplacementMicromapPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderCorePropertiesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderCorePropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderObjectPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderObjectPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceShaderEnqueuePropertiesAMDX": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceShaderEnqueuePropertiesAMDX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceCudaKernelLaunchPropertiesNV": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceCudaKernelLaunchPropertiesNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceExternalFormatResolvePropertiesANDROID": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalFormatResolvePropertiesANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDevicePipelineBinaryPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineBinaryPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceRenderPassStripedPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceRenderPassStripedPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_PROPERTIES_KHR", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceMapMemoryPlacedPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceMapMemoryPlacedPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceImageAlignmentControlPropertiesMESA": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageAlignmentControlPropertiesMESA-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceTileShadingPropertiesQCOM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTileShadingPropertiesQCOM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM", + "page": "chapters/limits.html" + } + ] + }, + "VkPhysicalDeviceTensorPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceTensorPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM", + "page": "chapters/limits.html" + } + ] + }, + "vkGetPhysicalDeviceMultisamplePropertiesEXT": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-samples-parameter", + "text": "samples must be a valid VkSampleCountFlagBits value", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-pMultisampleProperties-parameter", + "text": "pMultisampleProperties must be a valid pointer to a VkMultisamplePropertiesEXT structure", + "page": "chapters/limits.html" + } + ] + }, + "VkMultisamplePropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkMultisamplePropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT", + "page": "chapters/limits.html" + }, + { + "vuid": "VUID-VkMultisamplePropertiesEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/limits.html" + } + ] + }, + "vkGetPhysicalDeviceFormatProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/formats.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFormatProperties-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/formats.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFormatProperties-pFormatProperties-parameter", + "text": "pFormatProperties must be a valid pointer to a VkFormatProperties structure", + "page": "chapters/formats.html" + } + ] + }, + "vkGetPhysicalDeviceFormatProperties2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/formats.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/formats.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceFormatProperties2-pFormatProperties-parameter", + "text": "pFormatProperties must be a valid pointer to a VkFormatProperties2 structure", + "page": "chapters/formats.html" + } + ] + }, + "VkFormatProperties2": { + "core": [ + { + "vuid": "VUID-VkFormatProperties2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2", + "page": "chapters/formats.html" + }, + { + "vuid": "VUID-VkFormatProperties2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDrmFormatModifierPropertiesList2EXT, VkDrmFormatModifierPropertiesListEXT, VkFormatProperties3, VkSubpassResolvePerformanceQueryEXT, or VkTensorFormatPropertiesARM", + "page": "chapters/formats.html" + }, + { + "vuid": "VUID-VkFormatProperties2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/formats.html" + } + ] + }, + "VkDrmFormatModifierPropertiesListEXT": { + "core": [ + { + "vuid": "VUID-VkDrmFormatModifierPropertiesListEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT", + "page": "chapters/formats.html" + } + ] + }, + "VkDrmFormatModifierPropertiesList2EXT": { + "core": [ + { + "vuid": "VUID-VkDrmFormatModifierPropertiesList2EXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT", + "page": "chapters/formats.html" + } + ] + }, + "VkFormatProperties3": { + "core": [ + { + "vuid": "VUID-VkFormatProperties3-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3", + "page": "chapters/formats.html" + } + ] + }, + "VkTensorFormatPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkTensorFormatPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM", + "page": "chapters/formats.html" + } + ] + }, + "VkSubpassResolvePerformanceQueryEXT": { + "core": [ + { + "vuid": "VUID-VkSubpassResolvePerformanceQueryEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT", + "page": "chapters/formats.html" + } + ] + }, + "vkGetPhysicalDeviceImageFormatProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248", + "text": "tiling must not be VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT. (Use vkGetPhysicalDeviceImageFormatProperties2 instead)", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-type-parameter", + "text": "type must be a valid VkImageType value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-parameter", + "text": "tiling must be a valid VkImageTiling value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-flags-parameter", + "text": "flags must be a valid combination of VkImageCreateFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties-pImageFormatProperties-parameter", + "text": "pImageFormatProperties must be a valid pointer to a VkImageFormatProperties structure", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceExternalImageFormatPropertiesNV": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-externalHandleType-07721", + "text": "externalHandleType must not have more than one bit set", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-type-parameter", + "text": "type must be a valid VkImageType value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-tiling-parameter", + "text": "tiling must be a valid VkImageTiling value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-flags-parameter", + "text": "flags must be a valid combination of VkImageCreateFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-externalHandleType-parameter", + "text": "externalHandleType must be a valid combination of VkExternalMemoryHandleTypeFlagBitsNV values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-pExternalImageFormatProperties-parameter", + "text": "pExternalImageFormatProperties must be a valid pointer to a VkExternalImageFormatPropertiesNV structure", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceImageFormatProperties2": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868", + "text": "If the pNext chain of pImageFormatProperties includes a VkAndroidHardwareBufferUsageANDROID structure, the pNext chain of pImageFormatInfo must include a VkPhysicalDeviceExternalImageFormatInfo structure with handleType set to VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-09004", + "text": "If the pNext chain of pImageFormatProperties includes a VkHostImageCopyDevicePerformanceQuery structure, pImageFormatInfo->usage must contain VK_IMAGE_USAGE_HOST_TRANSFER_BIT", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatInfo-parameter", + "text": "pImageFormatInfo must be a valid pointer to a valid VkPhysicalDeviceImageFormatInfo2 structure", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatProperties-parameter", + "text": "pImageFormatProperties must be a valid pointer to a VkImageFormatProperties2 structure", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceImageFormatInfo2": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249", + "text": "tiling must be VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT if and only if the pNext chain includes VkPhysicalDeviceImageDrmFormatModifierInfoEXT", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313", + "text": "If tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT and flags contains VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT, then the pNext chain must include a VkImageFormatListCreateInfo structure with non-zero viewFormatCount", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkImageCompressionControlEXT, VkImageFormatListCreateInfo, VkImageStencilUsageCreateInfo, VkOpticalFlowImageFormatInfoNV, VkPhysicalDeviceExternalImageFormatInfo, VkPhysicalDeviceImageDrmFormatModifierInfoEXT, VkPhysicalDeviceImageViewImageFormatInfoEXT, or VkVideoProfileListInfoKHR", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-format-parameter", + "text": "format must be a valid VkFormat value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-type-parameter", + "text": "type must be a valid VkImageType value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-tiling-parameter", + "text": "tiling must be a valid VkImageTiling value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-usage-parameter", + "text": "usage must be a valid combination of VkImageUsageFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-usage-requiredbitmask", + "text": "usage must not be 0", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageFormatInfo2-flags-parameter", + "text": "flags must be a valid combination of VkImageCreateFlagBits values", + "page": "chapters/capabilities.html" + } + ] + }, + "VkImageFormatProperties2": { + "core": [ + { + "vuid": "VUID-VkImageFormatProperties2-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkImageFormatProperties2-pNext-pNext", + "text": "Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAndroidHardwareBufferUsageANDROID, VkExternalImageFormatProperties, VkFilterCubicImageViewImageFormatPropertiesEXT, VkHostImageCopyDevicePerformanceQuery, VkImageCompressionPropertiesEXT, VkSamplerYcbcrConversionImageFormatProperties, or VkTextureLODGatherFormatPropertiesAMD", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkImageFormatProperties2-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/capabilities.html" + } + ] + }, + "VkTextureLODGatherFormatPropertiesAMD": { + "core": [ + { + "vuid": "VUID-VkTextureLODGatherFormatPropertiesAMD-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceExternalImageFormatInfo": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalImageFormatInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalImageFormatInfo-handleType-parameter", + "text": "If handleType is not 0, handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkExternalImageFormatProperties": { + "core": [ + { + "vuid": "VUID-VkExternalImageFormatProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceImageDrmFormatModifierInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, then pQueueFamilyIndices must be a valid pointer to an array of queueFamilyIndexCount uint32_t values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, then queueFamilyIndexCount must be greater than 1", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316", + "text": "If sharingMode is VK_SHARING_MODE_CONCURRENT, each element of pQueueFamilyIndices must be unique and must be less than the pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties2 for the physicalDevice that was used to create device", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-parameter", + "text": "sharingMode must be a valid VkSharingMode value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkSamplerYcbcrConversionImageFormatProperties": { + "core": [ + { + "vuid": "VUID-VkSamplerYcbcrConversionImageFormatProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES", + "page": "chapters/capabilities.html" + } + ] + }, + "VkAndroidHardwareBufferUsageANDROID": { + "core": [ + { + "vuid": "VUID-VkAndroidHardwareBufferUsageANDROID-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID", + "page": "chapters/capabilities.html" + } + ] + }, + "VkHostImageCopyDevicePerformanceQuery": { + "core": [ + { + "vuid": "VUID-VkHostImageCopyDevicePerformanceQuery-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceImageViewImageFormatInfoEXT": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceImageViewImageFormatInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceImageViewImageFormatInfoEXT-imageViewType-parameter", + "text": "imageViewType must be a valid VkImageViewType value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkFilterCubicImageViewImageFormatPropertiesEXT": { + "core": [ + { + "vuid": "VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627", + "text": "If the pNext chain of the VkImageFormatProperties2 structure includes a VkFilterCubicImageViewImageFormatPropertiesEXT structure, the pNext chain of the VkPhysicalDeviceImageFormatInfo2 structure must include a VkPhysicalDeviceImageViewImageFormatInfoEXT structure with an imageViewType that is compatible with imageType", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceExternalBufferProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferInfo-parameter", + "text": "pExternalBufferInfo must be a valid pointer to a valid VkPhysicalDeviceExternalBufferInfo structure", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferProperties-parameter", + "text": "pExternalBufferProperties must be a valid pointer to a VkExternalBufferProperties structure", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceExternalBufferInfo": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-None-09499", + "text": "If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must be a valid combination of VkBufferUsageFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-None-09500", + "text": "If the pNext chain does not include a VkBufferUsageFlags2CreateInfo structure, usage must not be 0", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkBufferUsageFlags2CreateInfo", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-flags-parameter", + "text": "flags must be a valid combination of VkBufferCreateFlagBits values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalBufferInfo-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkExternalBufferProperties": { + "core": [ + { + "vuid": "VUID-VkExternalBufferProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkExternalBufferProperties-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceExternalTensorPropertiesARM": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceExternalTensorPropertiesARM-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalTensorPropertiesARM-pExternalTensorInfo-parameter", + "text": "pExternalTensorInfo must be a valid pointer to a valid VkPhysicalDeviceExternalTensorInfoARM structure", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalTensorPropertiesARM-pExternalTensorProperties-parameter", + "text": "pExternalTensorProperties must be a valid pointer to a VkExternalTensorPropertiesARM structure", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceExternalTensorInfoARM": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalTensorInfoARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalTensorInfoARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalTensorInfoARM-flags-parameter", + "text": "flags must be a valid combination of VkTensorCreateFlagBitsARM values", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalTensorInfoARM-pDescription-parameter", + "text": "pDescription must be a valid pointer to a valid VkTensorDescriptionARM structure", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalTensorInfoARM-handleType-parameter", + "text": "handleType must be a valid VkExternalMemoryHandleTypeFlagBits value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkExternalTensorPropertiesARM": { + "core": [ + { + "vuid": "VUID-VkExternalTensorPropertiesARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkExternalTensorPropertiesARM-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkExternalTensorPropertiesARM-externalMemoryProperties-parameter", + "text": "externalMemoryProperties must be a valid VkExternalMemoryProperties structure", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceExternalSemaphoreProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreInfo-parameter", + "text": "pExternalSemaphoreInfo must be a valid pointer to a valid VkPhysicalDeviceExternalSemaphoreInfo structure", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreProperties-parameter", + "text": "pExternalSemaphoreProperties must be a valid pointer to a VkExternalSemaphoreProperties structure", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceExternalSemaphoreInfo": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkSemaphoreTypeCreateInfo", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalSemaphoreInfo-handleType-parameter", + "text": "handleType must be a valid VkExternalSemaphoreHandleTypeFlagBits value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkExternalSemaphoreProperties": { + "core": [ + { + "vuid": "VUID-VkExternalSemaphoreProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkExternalSemaphoreProperties-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceExternalFenceProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceInfo-parameter", + "text": "pExternalFenceInfo must be a valid pointer to a valid VkPhysicalDeviceExternalFenceInfo structure", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceProperties-parameter", + "text": "pExternalFenceProperties must be a valid pointer to a VkExternalFenceProperties structure", + "page": "chapters/capabilities.html" + } + ] + }, + "VkPhysicalDeviceExternalFenceInfo": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceExternalFenceInfo-handleType-parameter", + "text": "handleType must be a valid VkExternalFenceHandleTypeFlagBits value", + "page": "chapters/capabilities.html" + } + ] + }, + "VkExternalFenceProperties": { + "core": [ + { + "vuid": "VUID-VkExternalFenceProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-VkExternalFenceProperties-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/capabilities.html" + } + ] + }, + "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsKHR-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsKHR-pTimeDomainCount-parameter", + "text": "pTimeDomainCount must be a valid pointer to a uint32_t value", + "page": "chapters/capabilities.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsKHR-pTimeDomains-parameter", + "text": "If the value referenced by pTimeDomainCount is not 0, and pTimeDomains is not NULL, pTimeDomains must be a valid pointer to an array of pTimeDomainCount VkTimeDomainKHR values", + "page": "chapters/capabilities.html" + } + ] + }, + "vkSetDebugUtilsObjectNameEXT": { + "core": [ + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587", + "text": "pNameInfo->objectType must not be VK_OBJECT_TYPE_UNKNOWN", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588", + "text": "pNameInfo->objectHandle must not be VK_NULL_HANDLE", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-07872", + "text": "If pNameInfo->objectHandle is the valid handle of an instance-level object, the VkDevice identified by device must be a descendent of the same VkInstance as the object identified by pNameInfo->objectHandle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-07873", + "text": "If pNameInfo->objectHandle is the valid handle of a physical-device-level object, the VkDevice identified by device must be a descendant of the same VkPhysicalDevice as the object identified by pNameInfo->objectHandle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-07874", + "text": "If pNameInfo->objectHandle is the valid handle of a device-level object, that object must be a descendent of the VkDevice identified by device", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-parameter", + "text": "pNameInfo must be a valid pointer to a valid VkDebugUtilsObjectNameInfoEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugUtilsObjectNameInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589", + "text": "If objectType is VK_OBJECT_TYPE_UNKNOWN, objectHandle must not be VK_NULL_HANDLE", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590", + "text": "If objectType is not VK_OBJECT_TYPE_UNKNOWN, objectHandle must be VK_NULL_HANDLE or a valid Vulkan handle of the type associated with objectType as defined in the VkObjectType and Vulkan Handle Relationship table", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-objectType-parameter", + "text": "objectType must be a valid VkObjectType value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectNameInfoEXT-pObjectName-parameter", + "text": "If pObjectName is not NULL, pObjectName must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + } + ] + }, + "vkSetDebugUtilsObjectTagEXT": { + "core": [ + { + "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pNameInfo-07875", + "text": "If pNameInfo->objectHandle is the valid handle of an instance-level object, the VkDevice identified by device must be a descendent of the same VkInstance as the object identified by pNameInfo->objectHandle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pNameInfo-07876", + "text": "If pNameInfo->objectHandle is the valid handle of a physical-device-level object, the VkDevice identified by device must be a descendant of the same VkPhysicalDevice as the object identified by pNameInfo->objectHandle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pNameInfo-07877", + "text": "If pNameInfo->objectHandle is the valid handle of a device-level object, that object must be a descendent of the VkDevice identified by device", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSetDebugUtilsObjectTagEXT-pTagInfo-parameter", + "text": "pTagInfo must be a valid pointer to a valid VkDebugUtilsObjectTagInfoEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugUtilsObjectTagInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908", + "text": "objectType must not be VK_OBJECT_TYPE_UNKNOWN", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910", + "text": "objectHandle must be a valid Vulkan handle of the type associated with objectType as defined in the VkObjectType and Vulkan Handle Relationship table", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-objectType-parameter", + "text": "objectType must be a valid VkObjectType value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-pTag-parameter", + "text": "pTag must be a valid pointer to an array of tagSize bytes", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsObjectTagInfoEXT-tagSize-arraylength", + "text": "tagSize must be greater than 0", + "page": "chapters/debugging.html" + } + ] + }, + "vkQueueBeginDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkQueueBeginDebugUtilsLabelEXT-pLabelInfo-parameter", + "text": "pLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-VkDebugUtilsLabelEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsLabelEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsLabelEXT-pLabelName-parameter", + "text": "pLabelName must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + } + ] + }, + "vkQueueEndDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-vkQueueEndDebugUtilsLabelEXT-None-01911", + "text": "There must be an outstanding vkQueueBeginDebugUtilsLabelEXT command prior to the vkQueueEndDebugUtilsLabelEXT on the queue", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkQueueEndDebugUtilsLabelEXT-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/debugging.html" + } + ] + }, + "vkQueueInsertDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkQueueInsertDebugUtilsLabelEXT-pLabelInfo-parameter", + "text": "pLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdBeginDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-pLabelInfo-parameter", + "text": "pLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdEndDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912", + "text": "There must be an outstanding vkCmdBeginDebugUtilsLabelEXT command prior to the vkCmdEndDebugUtilsLabelEXT on the queue that commandBuffer is submitted to", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913", + "text": "If commandBuffer is a secondary command buffer, there must be an outstanding vkCmdBeginDebugUtilsLabelEXT command recorded to commandBuffer that has not previously been ended by a call to vkCmdEndDebugUtilsLabelEXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdInsertDebugUtilsLabelEXT": { + "core": [ + { + "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-pLabelInfo-parameter", + "text": "pLabelInfo must be a valid pointer to a valid VkDebugUtilsLabelEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/debugging.html" + } + ] + }, + "vkCreateDebugUtilsMessengerEXT": { + "core": [ + { + "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDebugUtilsMessengerCreateInfoEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCreateDebugUtilsMessengerEXT-pMessenger-parameter", + "text": "pMessenger must be a valid pointer to a VkDebugUtilsMessengerEXT handle", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugUtilsMessengerCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-parameter", + "text": "messageSeverity must be a valid combination of VkDebugUtilsMessageSeverityFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-requiredbitmask", + "text": "messageSeverity must not be 0", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-parameter", + "text": "messageType must be a valid combination of VkDebugUtilsMessageTypeFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-requiredbitmask", + "text": "messageType must not be 0", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-parameter", + "text": "pfnUserCallback must be a valid PFN_vkDebugUtilsMessengerCallbackEXT value", + "page": "chapters/debugging.html" + } + ] + }, + "PFN_vkDebugUtilsMessengerCallbackEXT": { + "core": [ + { + "vuid": "VUID-PFN_vkDebugUtilsMessengerCallbackEXT-None-04769", + "text": "The callback must not make calls to any Vulkan commands", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugUtilsMessengerCallbackDataEXT": { + "core": [ + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkDeviceAddressBindingCallbackDataEXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-flags-zerobitmask", + "text": "flags must be 0", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessageIdName-parameter", + "text": "If pMessageIdName is not NULL, pMessageIdName must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessage-parameter", + "text": "If pMessage is not NULL, pMessage must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pQueueLabels-parameter", + "text": "If queueLabelCount is not 0, pQueueLabels must be a valid pointer to an array of queueLabelCount valid VkDebugUtilsLabelEXT structures", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pCmdBufLabels-parameter", + "text": "If cmdBufLabelCount is not 0, pCmdBufLabels must be a valid pointer to an array of cmdBufLabelCount valid VkDebugUtilsLabelEXT structures", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugUtilsMessengerCallbackDataEXT-pObjects-parameter", + "text": "If objectCount is not 0, pObjects must be a valid pointer to an array of objectCount valid VkDebugUtilsObjectNameInfoEXT structures", + "page": "chapters/debugging.html" + } + ] + }, + "VkDeviceAddressBindingCallbackDataEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceAddressBindingCallbackDataEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDeviceAddressBindingCallbackDataEXT-flags-parameter", + "text": "flags must be a valid combination of VkDeviceAddressBindingFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDeviceAddressBindingCallbackDataEXT-bindingType-parameter", + "text": "bindingType must be a valid VkDeviceAddressBindingTypeEXT value", + "page": "chapters/debugging.html" + } + ] + }, + "vkSubmitDebugUtilsMessageEXT": { + "core": [ + { + "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591", + "text": "The objectType member of each element of pCallbackData->pObjects must not be VK_OBJECT_TYPE_UNKNOWN", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageSeverity-parameter", + "text": "messageSeverity must be a valid VkDebugUtilsMessageSeverityFlagBitsEXT value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-parameter", + "text": "messageTypes must be a valid combination of VkDebugUtilsMessageTypeFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-requiredbitmask", + "text": "messageTypes must not be 0", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkSubmitDebugUtilsMessageEXT-pCallbackData-parameter", + "text": "pCallbackData must be a valid pointer to a valid VkDebugUtilsMessengerCallbackDataEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "vkDestroyDebugUtilsMessengerEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915", + "text": "If VkAllocationCallbacks were provided when messenger was created, a compatible set of callbacks must be provided here", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916", + "text": "If no VkAllocationCallbacks were provided when messenger was created, pAllocator must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parameter", + "text": "If messenger is not VK_NULL_HANDLE, messenger must be a valid VkDebugUtilsMessengerEXT handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parent", + "text": "If messenger is a valid handle, it must have been created, allocated, or retrieved from instance", + "page": "chapters/debugging.html" + } + ] + }, + "vkDebugMarkerSetObjectNameEXT": { + "core": [ + { + "vuid": "VUID-vkDebugMarkerSetObjectNameEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugMarkerSetObjectNameEXT-pNameInfo-parameter", + "text": "pNameInfo must be a valid pointer to a valid VkDebugMarkerObjectNameInfoEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugMarkerObjectNameInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490", + "text": "objectType must not be VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-object-01491", + "text": "object must not be VK_NULL_HANDLE", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-object-01492", + "text": "object must be a Vulkan object of the type associated with objectType as defined in VkDebugReportObjectTypeEXT and Vulkan Handle Relationship", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-objectType-parameter", + "text": "objectType must be a valid VkDebugReportObjectTypeEXT value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectNameInfoEXT-pObjectName-parameter", + "text": "pObjectName must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + } + ] + }, + "vkDebugMarkerSetObjectTagEXT": { + "core": [ + { + "vuid": "VUID-vkDebugMarkerSetObjectTagEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-parameter", + "text": "pTagInfo must be a valid pointer to a valid VkDebugMarkerObjectTagInfoEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugMarkerObjectTagInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493", + "text": "objectType must not be VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-object-01494", + "text": "object must not be VK_NULL_HANDLE", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-object-01495", + "text": "object must be a Vulkan object of the type associated with objectType as defined in VkDebugReportObjectTypeEXT and Vulkan Handle Relationship", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-objectType-parameter", + "text": "objectType must be a valid VkDebugReportObjectTypeEXT value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-pTag-parameter", + "text": "pTag must be a valid pointer to an array of tagSize bytes", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerObjectTagInfoEXT-tagSize-arraylength", + "text": "tagSize must be greater than 0", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdDebugMarkerBeginEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDebugMarkerBeginEXT-None-10614", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerBeginEXT-pMarkerInfo-parameter", + "text": "pMarkerInfo must be a valid pointer to a valid VkDebugMarkerMarkerInfoEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugMarkerMarkerInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugMarkerMarkerInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerMarkerInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugMarkerMarkerInfoEXT-pMarkerName-parameter", + "text": "pMarkerName must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdDebugMarkerEndEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239", + "text": "There must be an outstanding vkCmdDebugMarkerBeginEXT command prior to the vkCmdDebugMarkerEndEXT on the queue that commandBuffer is submitted to", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240", + "text": "If commandBuffer is a secondary command buffer, there must be an outstanding vkCmdDebugMarkerBeginEXT command recorded to commandBuffer that has not previously been ended by a call to vkCmdDebugMarkerEndEXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerEndEXT-None-10615", + "text": "This command must not be recorded when per-tile execution model is enabled", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerEndEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdDebugMarkerInsertEXT": { + "core": [ + { + "vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerInsertEXT-pMarkerInfo-parameter", + "text": "pMarkerInfo must be a valid pointer to a valid VkDebugMarkerMarkerInfoEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations", + "page": "chapters/debugging.html" + } + ] + }, + "vkCreateDebugReportCallbackEXT": { + "core": [ + { + "vuid": "VUID-vkCreateDebugReportCallbackEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCreateDebugReportCallbackEXT-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkDebugReportCallbackCreateInfoEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCreateDebugReportCallbackEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCreateDebugReportCallbackEXT-pCallback-parameter", + "text": "pCallback must be a valid pointer to a VkDebugReportCallbackEXT handle", + "page": "chapters/debugging.html" + } + ] + }, + "VkDebugReportCallbackCreateInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-flags-parameter", + "text": "flags must be a valid combination of VkDebugReportFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDebugReportCallbackCreateInfoEXT-pfnCallback-parameter", + "text": "pfnCallback must be a valid PFN_vkDebugReportCallbackEXT value", + "page": "chapters/debugging.html" + } + ] + }, + "vkDebugReportMessageEXT": { + "core": [ + { + "vuid": "VUID-vkDebugReportMessageEXT-object-01241", + "text": "object must be a Vulkan object or VK_NULL_HANDLE", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-objectType-01498", + "text": "If objectType is not VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT and object is not VK_NULL_HANDLE, object must be a Vulkan object of the corresponding type associated with objectType as defined in VkDebugReportObjectTypeEXT and Vulkan Handle Relationship", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-flags-parameter", + "text": "flags must be a valid combination of VkDebugReportFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-flags-requiredbitmask", + "text": "flags must not be 0", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-objectType-parameter", + "text": "objectType must be a valid VkDebugReportObjectTypeEXT value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-pLayerPrefix-parameter", + "text": "pLayerPrefix must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDebugReportMessageEXT-pMessage-parameter", + "text": "pMessage must be a null-terminated UTF-8 string", + "page": "chapters/debugging.html" + } + ] + }, + "vkDestroyDebugReportCallbackEXT": { + "core": [ + { + "vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-01242", + "text": "If VkAllocationCallbacks were provided when callback was created, a compatible set of callbacks must be provided here", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-01243", + "text": "If no VkAllocationCallbacks were provided when callback was created, pAllocator must be NULL", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugReportCallbackEXT-instance-parameter", + "text": "instance must be a valid VkInstance handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parameter", + "text": "If callback is not VK_NULL_HANDLE, callback must be a valid VkDebugReportCallbackEXT handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugReportCallbackEXT-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkDestroyDebugReportCallbackEXT-callback-parent", + "text": "If callback is a valid handle, it must have been created, allocated, or retrieved from instance", + "page": "chapters/debugging.html" + } + ] + }, + "vkCmdSetCheckpointNV": { + "core": [ + { + "vuid": "VUID-vkCmdSetCheckpointNV-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdSetCheckpointNV-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdSetCheckpointNV-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, compute, or transfer operations", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkCmdSetCheckpointNV-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "chapters/debugging.html" + } + ] + }, + "vkGetQueueCheckpointData2NV": { + "core": [ + { + "vuid": "VUID-vkGetQueueCheckpointData2NV-queue-03892", + "text": "The device that queue belongs to must be in the lost state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetQueueCheckpointData2NV-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetQueueCheckpointData2NV-pCheckpointDataCount-parameter", + "text": "pCheckpointDataCount must be a valid pointer to a uint32_t value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetQueueCheckpointData2NV-pCheckpointData-parameter", + "text": "If the value referenced by pCheckpointDataCount is not 0, and pCheckpointData is not NULL, pCheckpointData must be a valid pointer to an array of pCheckpointDataCount VkCheckpointData2NV structures", + "page": "chapters/debugging.html" + } + ] + }, + "VkCheckpointData2NV": { + "core": [ + { + "vuid": "VUID-VkCheckpointData2NV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkCheckpointData2NV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + } + ] + }, + "vkGetQueueCheckpointDataNV": { + "core": [ + { + "vuid": "VUID-vkGetQueueCheckpointDataNV-queue-02025", + "text": "The device that queue belongs to must be in the lost state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetQueueCheckpointDataNV-queue-parameter", + "text": "queue must be a valid VkQueue handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetQueueCheckpointDataNV-pCheckpointDataCount-parameter", + "text": "pCheckpointDataCount must be a valid pointer to a uint32_t value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetQueueCheckpointDataNV-pCheckpointData-parameter", + "text": "If the value referenced by pCheckpointDataCount is not 0, and pCheckpointData is not NULL, pCheckpointData must be a valid pointer to an array of pCheckpointDataCount VkCheckpointDataNV structures", + "page": "chapters/debugging.html" + } + ] + }, + "VkCheckpointDataNV": { + "core": [ + { + "vuid": "VUID-VkCheckpointDataNV-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkCheckpointDataNV-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + } + ] + }, + "vkGetDeviceFaultInfoEXT": { + "core": [ + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-device-07336", + "text": "device must be in the lost state", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-07337", + "text": "If the value referenced by pFaultCounts->addressInfoCount is not 0, and pFaultInfo->pAddressInfos is not NULL, pFaultInfo->pAddressInfos must be a valid pointer to an array of pFaultCounts->addressInfoCount VkDeviceFaultAddressInfoEXT structures", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-07338", + "text": "If the value referenced by pFaultCounts->vendorInfoCount is not 0, and pFaultInfo->pVendorInfos is not NULL, pFaultInfo->pVendorInfos must be a valid pointer to an array of pFaultCounts->vendorInfoCount VkDeviceFaultVendorInfoEXT structures", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-07339", + "text": "If the value referenced by pFaultCounts->vendorBinarySize is not 0, and pFaultInfo->pVendorBinaryData is not NULL, pFaultInfo->pVendorBinaryData must be a valid pointer to an array of pFaultCounts->vendorBinarySize bytes", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-pFaultCounts-parameter", + "text": "pFaultCounts must be a valid pointer to a VkDeviceFaultCountsEXT structure", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetDeviceFaultInfoEXT-pFaultInfo-parameter", + "text": "If pFaultInfo is not NULL, pFaultInfo must be a valid pointer to a VkDeviceFaultInfoEXT structure", + "page": "chapters/debugging.html" + } + ] + }, + "VkDeviceFaultCountsEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceFaultCountsEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_FAULT_COUNTS_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDeviceFaultCountsEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + } + ] + }, + "VkDeviceFaultInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceFaultInfoEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDeviceFaultInfoEXT-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + } + ] + }, + "VkDeviceFaultAddressInfoEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceFaultAddressInfoEXT-addressType-parameter", + "text": "addressType must be a valid VkDeviceFaultAddressTypeEXT value", + "page": "chapters/debugging.html" + } + ] + }, + "VkDeviceFaultVendorBinaryHeaderVersionOneEXT": { + "core": [ + { + "vuid": "VUID-VkDeviceFaultVendorBinaryHeaderVersionOneEXT-headerSize-07340", + "text": "headerSize must be 56", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDeviceFaultVendorBinaryHeaderVersionOneEXT-headerVersion-07341", + "text": "headerVersion must be VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkDeviceFaultVendorBinaryHeaderVersionOneEXT-headerVersion-parameter", + "text": "headerVersion must be a valid VkDeviceFaultVendorBinaryHeaderVersionEXT value", + "page": "chapters/debugging.html" + } + ] + }, + "vkGetPhysicalDeviceToolProperties": { + "core": [ + { + "vuid": "VUID-vkGetPhysicalDeviceToolProperties-physicalDevice-parameter", + "text": "physicalDevice must be a valid VkPhysicalDevice handle", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceToolProperties-pToolCount-parameter", + "text": "pToolCount must be a valid pointer to a uint32_t value", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-vkGetPhysicalDeviceToolProperties-pToolProperties-parameter", + "text": "If the value referenced by pToolCount is not 0, and pToolProperties is not NULL, pToolProperties must be a valid pointer to an array of pToolCount VkPhysicalDeviceToolProperties structures", + "page": "chapters/debugging.html" + } + ] + }, + "VkPhysicalDeviceToolProperties": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceToolProperties-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkPhysicalDeviceToolProperties-pNext-pNext", + "text": "pNext must be NULL", + "page": "chapters/debugging.html" + } + ] + }, + "VkFrameBoundaryEXT": { + "core": [ + { + "vuid": "VUID-VkFrameBoundaryEXT-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryEXT-flags-parameter", + "text": "flags must be a valid combination of VkFrameBoundaryFlagBitsEXT values", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryEXT-pImages-parameter", + "text": "If imageCount is not 0, and pImages is not NULL, pImages must be a valid pointer to an array of imageCount valid VkImage handles", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryEXT-pBuffers-parameter", + "text": "If bufferCount is not 0, and pBuffers is not NULL, pBuffers must be a valid pointer to an array of bufferCount valid VkBuffer handles", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryEXT-pTag-parameter", + "text": "If tagSize is not 0, and pTag is not NULL, pTag must be a valid pointer to an array of tagSize bytes", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryEXT-commonparent", + "text": "Both of the elements of pBuffers, and the elements of pImages that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice", + "page": "chapters/debugging.html" + } + ] + }, + "VkFrameBoundaryTensorsARM": { + "core": [ + { + "vuid": "VUID-VkFrameBoundaryTensorsARM-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryTensorsARM-pTensors-parameter", + "text": "pTensors must be a valid pointer to an array of tensorCount valid VkTensorARM handles", + "page": "chapters/debugging.html" + }, + { + "vuid": "VUID-VkFrameBoundaryTensorsARM-tensorCount-arraylength", + "text": "tensorCount must be greater than 0", + "page": "chapters/debugging.html" + } + ] + }, + "StandaloneSpirv": { + "core": [ + { + "vuid": "VUID-StandaloneSpirv-None-04633", + "text": "Every entry point must have no return value and accept no arguments", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04634", + "text": "The static function-call graph for an entry point must not contain cycles; that is, static recursion is not allowed", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04635", + "text": "The Logical or PhysicalStorageBuffer64 addressing model must be selected", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04636", + "text": "Scope for execution must be limited to Workgroup or Subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04637", + "text": "If the Scope for execution is Workgroup, then it must only be used in the task, mesh, tessellation control, or compute Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04638", + "text": "Scope for memory must be limited to Device, QueueFamily, Workgroup, ShaderCallKHR, Subgroup, or Invocation", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-ExecutionModel-07320", + "text": "If the Execution Model is TessellationControl, and the MemoryModel is GLSL450, the Scope for memory must not be Workgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-07321", + "text": "If the Scope for memory is Workgroup, then it must only be used in the task, mesh, tessellation control, or compute Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04640", + "text": "If the Scope for memory is ShaderCallKHR, then it must only be used in ray generation, intersection, closest hit, any-hit, miss, and callable Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04641", + "text": "If the Scope for memory is Invocation, then memory semantics must be None", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04642", + "text": "Scope for group operations must be limited to Subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-SubgroupVoteKHR-07951", + "text": "If none of the SubgroupVoteKHR, GroupNonUniform, or SubgroupBallotKHR capabilities are declared, Scope for memory must not be Subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04643", + "text": "Storage Class must be limited to UniformConstant, Input, Uniform, Output, Workgroup, Private, Function, PushConstant, Image, StorageBuffer, RayPayloadKHR, IncomingRayPayloadKHR, HitAttributeKHR, CallableDataKHR, IncomingCallableDataKHR, ShaderRecordBufferKHR, PhysicalStorageBuffer, or TileImageEXT", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04644", + "text": "If the Storage Class is Output, then it must not be used in the GlCompute, RayGenerationKHR, IntersectionKHR, AnyHitKHR, ClosestHitKHR, MissKHR, or CallableKHR Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04645", + "text": "If the Storage Class is Workgroup, then it must only be used in the task, mesh, or compute Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-08720", + "text": "If the Storage Class is TileImageEXT, then it must only be used in the fragment execution model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpAtomicStore-04730", + "text": "OpAtomicStore must not use Acquire, AcquireRelease, or SequentiallyConsistent memory semantics", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpAtomicLoad-04731", + "text": "OpAtomicLoad must not use Release, AcquireRelease, or SequentiallyConsistent memory semantics", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpMemoryBarrier-04732", + "text": "OpMemoryBarrier must use one of Acquire, Release, AcquireRelease, or SequentiallyConsistent memory semantics", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpMemoryBarrier-04733", + "text": "OpMemoryBarrier must include at least one Storage Class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpControlBarrier-10609", + "text": "If the semantics for OpControlBarrier includes at least one Storage Class, then it must include one of Acquire, Release, AcquireRelease, or SequentiallyConsistent memory semantics", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpControlBarrier-04650", + "text": "If the semantics for OpControlBarrier includes one of Acquire, Release, AcquireRelease, or SequentiallyConsistent memory semantics, then it must include at least one Storage Class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpVariable-04651", + "text": "Any OpVariable with an Initializer operand must have Output, Private, Function, or Workgroup as its Storage Class operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpVariable-04734", + "text": "Any OpVariable with an Initializer operand and Workgroup as its Storage Class operand must use OpConstantNull as the initializer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpReadClockKHR-04652", + "text": "Scope for OpReadClockKHR must be limited to Subgroup or Device", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OriginLowerLeft-04653", + "text": "The OriginLowerLeft Execution Mode must not be used; fragment entry points must declare OriginUpperLeft", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PixelCenterInteger-04654", + "text": "The PixelCenterInteger Execution Mode must not be used (pixels are always centered at half-integer coordinates)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-UniformConstant-04655", + "text": "Any variable in the UniformConstant Storage Class must be typed as either OpTypeImage, OpTypeSampler, OpTypeSampledImage, OpTypeAccelerationStructureKHR, OpTypeTensorARM or an array of one of these types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Uniform-06807", + "text": "Any variable in the Uniform or StorageBuffer Storage Class must be typed as OpTypeStruct or an array of this type", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PushConstant-06808", + "text": "Any variable in the PushConstant Storage Class must be typed as OpTypeStruct", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-04656", + "text": "OpTypeImage must declare a scalar 32-bit float, 64-bit integer, or 32-bit integer type for the “Sampled Type” (RelaxedPrecision can be applied to a sampling instruction and to the variable holding the result of a sampling instruction)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-04657", + "text": "OpTypeImage must have a “Sampled” operand of 1 (sampled image) or 2 (storage image)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeSampledImage-06671", + "text": "OpTypeSampledImage must have a OpTypeImage with a “Sampled” operand of 1 (sampled image)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Image-04965", + "text": "The SPIR-V Type of the Image Format operand of an OpTypeImage must match the Sampled Type, as defined in Image Format and Type Matching", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpImageTexelPointer-04658", + "text": "If an OpImageTexelPointer is used in an atomic operation, the image type of the image parameter to OpImageTexelPointer must have an image format of R64i, R64ui, R32f, R32i, or R32ui", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpImageQuerySizeLod-04659", + "text": "OpImageQuerySizeLod, OpImageQueryLod, and OpImageQueryLevels must only consume an “Image” operand whose type has its “Sampled” operand set to 1", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-09638", + "text": "An OpTypeImage must not have a “Dim” operand of Rect", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-06214", + "text": "An OpTypeImage with a “Dim” operand of SubpassData must have an “Arrayed” operand of 0 (non-arrayed) and a “Sampled” operand of 2 (storage image)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-SubpassData-04660", + "text": "The (u,v) coordinates used for a SubpassData must be the <id> of a constant vector (0,0)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-06924", + "text": "Objects of types OpTypeImage, OpTypeSampler, OpTypeSampledImage, OpTypeAccelerationStructureKHR, OpTypeTensorARM, and arrays of these types must not be stored to or modified", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Uniform-06925", + "text": "Any variable in the Uniform Storage Class decorated as Block must not be stored to or modified", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04865", + "text": "Any image instruction which uses an Offset, ConstOffset, or ConstOffsets image operand, must only consume a “Sampled Image” operand whose type has its “Sampled” operand set to 1", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpImageGather-04664", + "text": "The “Component” operand of OpImageGather, and OpImageSparseGather must be the <id> of a constant instruction", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpImage-04777", + "text": "OpImage*Dref* instructions must not consume an image whose Dim is 3D", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04667", + "text": "Structure types must not contain opaque types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-BuiltIn-04668", + "text": "Any BuiltIn decoration not listed in Built-In Variables must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpEntryPoint-09658", + "text": "For a given OpEntryPoint, any BuiltIn decoration must not be used more than once by the Input interface", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpEntryPoint-09659", + "text": "For a given OpEntryPoint, any BuiltIn decoration must not be used more than once by the Output interface", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Location-06672", + "text": "The Location or Component decorations must only be used with the Input, Output, RayPayloadKHR, IncomingRayPayloadKHR, HitAttributeKHR, HitObjectAttributeNV, CallableDataKHR, IncomingCallableDataKHR, or ShaderRecordBufferKHR storage classes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Location-04915", + "text": "The Location or Component decorations must not be used with BuiltIn", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Location-04916", + "text": "The Location decorations must be used on user-defined variables", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Location-04917", + "text": "If a user-defined variable is not a pointer to a Block decorated OpTypeStruct, then the OpVariable must have a Location decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Location-04918", + "text": "If a user-defined variable has a Location decoration, and the variable is a pointer to a OpTypeStruct, then the members of that structure must not have Location decorations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Location-04919", + "text": "If a user-defined variable does not have a Location decoration, and the variable is a pointer to a Block decorated OpTypeStruct, then each member of the struct must have a Location decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Component-04920", + "text": "The Component decoration value must not be greater than 3", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Component-04921", + "text": "If the Component decoration is used on an OpVariable that has a OpTypeVector type with a Component Type with a Width that is less than or equal to 32, the sum of its Component Count and the Component decoration value must be less than or equal to 4", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Component-04922", + "text": "If the Component decoration is used on an OpVariable that has a OpTypeVector type with a Component Type with a Width that is equal to 64, the sum of two times its Component Count and the Component decoration value must be less than or equal to 4", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Component-04923", + "text": "The Component decorations value must not be 1 or 3 for scalar or two-component 64-bit data types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Component-07703", + "text": "The Component decorations must not be used for a 64-bit vector type with more than two components", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Component-10583", + "text": "The Component decorations must not be used with any type that is not a scalar, vector, array of scalars or vectors, or an array of arrays of scalars or vectors", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Execution-10584", + "text": "If the Execution Model of an entry point is not TessellationControl or Geometry, its interface definition must not include any variables in the Input storage class decorated with Component that are arrays of arrays of scalars or vectors", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Execution-10585", + "text": "If the Execution Model of an entry point is not MeshNV, its interface definition must not include any variables in the Output storage class decorated with Component that are arrays of arrays of scalars or vectors", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Output-10586", + "text": "Variables in the Output storage class in the Vertex, TessellationControl, TessellationEvaluation, or Geometry execution model must not have overlapping Component and Location decorations as defined by Location and Component Assignment", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Output-10587", + "text": "Variables in the Output storage class in the Fragment execution model must not have both identical Index decorations and overlapping Component and Location decorations as defined by Location and Component Assignment", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Input-10588", + "text": "Variables in the Input storage class in the TessellationControl, TessellationEvaluation, Geometry, or Fragment execution model must not have overlapping Component and Location decorations as defined by Location and Component Assignment", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Input-10604", + "text": "Any variable in the Input storage class in the Fragment execution model must not have an assigned Location shared with another variable with different decorations for PerVertexKHR, Flat, NoPerspective, Sample, or Centroid", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Input-09557", + "text": "The pointers of any Input or Output Interface user-defined variables must not contain any PhysicalStorageBuffer Storage Class pointers", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-10684", + "text": "All variables must have valid explicit layout decorations as described in Shader Interfaces", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-GLSLShared-04669", + "text": "The GLSLShared and GLSLPacked decorations must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Flat-04670", + "text": "The Flat, NoPerspective, Sample, and Centroid decorations must only be used on variables with the Output or Input Storage Class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Flat-06201", + "text": "The Flat, NoPerspective, Sample, and Centroid decorations must not be used on variables with the Output storage class in a fragment shader", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Flat-06202", + "text": "The Flat, NoPerspective, Sample, and Centroid decorations must not be used on variables with the Input storage class in a vertex shader", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PerVertexKHR-06777", + "text": "The PerVertexKHR decoration must only be used on variables with the Input Storage Class in a fragment shader", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Flat-04744", + "text": "Any variable with integer or double-precision floating-point type and with Input Storage Class in a fragment shader, must be decorated Flat", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-ViewportRelativeNV-04672", + "text": "The ViewportRelativeNV decoration must only be used on a variable decorated with Layer in the vertex, tessellation evaluation, or geometry shader stages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-ViewportRelativeNV-04673", + "text": "The ViewportRelativeNV decoration must not be used unless a variable decorated with one of ViewportIndex or ViewportMaskNV is also statically used by the same OpEntryPoint", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-ViewportMaskNV-04674", + "text": "The ViewportMaskNV and ViewportIndex decorations must not both be statically used by one or more OpEntryPoint’s that form the pre-rasterization shader stages of a graphics pipeline", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-FPRoundingMode-04675", + "text": "Rounding modes other than round-to-nearest-even and round-towards-zero must not be used for the FPRoundingMode decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Invariant-04677", + "text": "Variables decorated with Invariant and variables with structure types that have any members decorated with Invariant must be in the Output or Input Storage Class, Invariant used on an Input Storage Class variable or structure member has no effect", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-VulkanMemoryModel-04678", + "text": " If the VulkanMemoryModel capability is not declared, the Volatile decoration must be used on any variable declaration that includes one of the SMIDNV, WarpIDNV, SubgroupSize, SubgroupLocalInvocationId, SubgroupEqMask, SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, or SubgroupLtMask BuiltIn decorations when used in the ray generation, closest hit, miss, intersection, or callable shaders, or with the RayTmaxKHR Builtin decoration when used in an intersection shader", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-VulkanMemoryModel-04679", + "text": "If the VulkanMemoryModel capability is declared, the OpLoad instruction must use the Volatile memory semantics when it accesses into any variable that includes one of the SMIDNV, WarpIDNV, SubgroupSize, SubgroupLocalInvocationId, SubgroupEqMask, SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, or SubgroupLtMask BuiltIn decorations when used in the ray generation, closest hit, miss, intersection, or callable shaders, or with the RayTmaxKHR Builtin decoration when used in an intersection shader", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeRuntimeArray-04680", + "text": "OpTypeRuntimeArray must only be used for:
\n
    \n
  • \n

    the last member of a Block-decorated OpTypeStruct in\nStorageBuffer or PhysicalStorageBuffer storage Storage Class

    \n
  • \n
  • \n

    BufferBlock-decorated OpTypeStruct in the Uniform\nstorage Storage Class

    \n
  • \n
  • \n

    the outermost dimension of an arrayed variable in the\nStorageBuffer, Uniform, or UniformConstant storage\nStorage Class

    \n
  • \n
  • \n

    variables in the NodePayloadAMDX storage Storage Class when the\nCoalescingAMDX Execution Mode is specified

    \n
  • \n
\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Function-04681", + "text": "A type T that is an array sized with a specialization constant must neither be, nor be contained in, the type T2 of a variable V, unless either: a) T is equal to T2, b) V is declared in the Function, or Private Storage Class, c) V is a non-Block variable in the Workgroup Storage Class, or d) V is an interface variable with an additional level of arrayness, as described in interface matching, and T is the member type of the array type T2", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpControlBarrier-04682", + "text": "If OpControlBarrier is used in ray generation, intersection, any-hit, closest hit, miss, fragment, vertex, tessellation evaluation, or geometry shaders, the execution Scope must be Subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-10685", + "text": "For each compute shader entry point, either a TileShadingRateQCOM, LocalSize, or LocalSizeId Execution Mode, or an object decorated with the WorkgroupSize decoration must be specified", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-DerivativeGroupQuadsNV-04684", + "text": "For compute shaders using the DerivativeGroupQuadsNV execution mode, the first two dimensions of the local workgroup size must be a multiple of two", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-DerivativeGroupLinearNV-04778", + "text": "For compute shaders using the DerivativeGroupLinearNV execution mode, the product of the dimensions of the local workgroup size must be a multiple of four", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-DerivativeGroupQuadsKHR-10151", + "text": "For compute, mesh, or task shaders using the DerivativeGroupQuadsKHR execution mode, the first two dimensions of the local workgroup size must be a multiple of two", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-DerivativeGroupLinearKHR-10152", + "text": "For compute, mesh, or task shaders using the DerivativeGroupLinearKHR execution mode, the product of the dimensions of the local workgroup size must be a multiple of four", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpGroupNonUniformBallotBitCount-04685", + "text": "If OpGroupNonUniformBallotBitCount is used, the group operation must be limited to Reduce, InclusiveScan, or ExclusiveScan", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04686", + "text": "The Pointer operand of all atomic instructions must have a Storage Class limited to Uniform, Workgroup, Image, StorageBuffer, PhysicalStorageBuffer, or TaskPayloadWorkgroupEXT", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04687", + "text": "Output variables or block members decorated with Offset that have a 64-bit type, or a composite type containing a 64-bit type, must specify an Offset value aligned to a 8 byte boundary", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04689", + "text": "The size of any output block containing any member decorated with Offset that is a 64-bit type must be a multiple of 8", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04690", + "text": "The first member of an output block specifying a Offset decoration must specify a Offset value that is aligned to an 8 byte boundary if that block contains any member decorated with Offset and is a 64-bit type", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04691", + "text": "Output variables or block members decorated with Offset that have a 32-bit type, or a composite type contains a 32-bit type, must specify an Offset value aligned to a 4 byte boundary", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04692", + "text": "Output variables, blocks or block members decorated with Offset must only contain base types that have components that are either 32-bit or 64-bit in size", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Offset-04716", + "text": "Only variables or block members in the output interface decorated with Offset can be captured for transform feedback, and those variables or block members must also be decorated with XfbBuffer and XfbStride, or inherit XfbBuffer and XfbStride decorations from a block containing them", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-XfbBuffer-04693", + "text": "All variables or block members in the output interface of the entry point being compiled decorated with a specific XfbBuffer value must all be decorated with identical XfbStride values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Stream-04694", + "text": "If any variables or block members in the output interface of the entry point being compiled are decorated with Stream, then all variables belonging to the same XfbBuffer must specify the same Stream value", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-XfbBuffer-04696", + "text": "For any two variables or block members in the output interface of the entry point being compiled with the same XfbBuffer value, the ranges determined by the Offset decoration and the size of the type must not overlap", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-XfbBuffer-04697", + "text": "All block members in the output interface of the entry point being compiled that are in the same block and have a declared or inherited XfbBuffer decoration must specify the same XfbBuffer value", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-RayPayloadKHR-04698", + "text": "RayPayloadKHR Storage Class must only be used in ray generation, closest hit or miss shaders", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-IncomingRayPayloadKHR-04699", + "text": "IncomingRayPayloadKHR Storage Class must only be used in closest hit, any-hit, or miss shaders", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-IncomingRayPayloadKHR-04700", + "text": "There must be at most one variable with the IncomingRayPayloadKHR Storage Class in the input interface of an entry point", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-HitAttributeKHR-04701", + "text": "HitAttributeKHR Storage Class must only be used in intersection, any-hit, or closest hit shaders", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-HitAttributeKHR-04702", + "text": "There must be at most one variable with the HitAttributeKHR Storage Class in the input interface of an entry point", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-HitAttributeKHR-04703", + "text": "A variable with HitAttributeKHR Storage Class must only be written to in an intersection shader", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-CallableDataKHR-04704", + "text": "CallableDataKHR Storage Class must only be used in ray generation, closest hit, miss, and callable shaders", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-IncomingCallableDataKHR-04705", + "text": "IncomingCallableDataKHR Storage Class must only be used in callable shaders", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-IncomingCallableDataKHR-04706", + "text": "There must be at most one variable with the IncomingCallableDataKHR Storage Class in the input interface of an entry point", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-ShaderRecordBufferKHR-07119", + "text": "ShaderRecordBufferKHR Storage Class must only be used in ray generation, intersection, any-hit, closest hit, callable, or miss shaders", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Base-07650", + "text": "The Base operand of OpPtrAccessChain must have a storage class of Workgroup, StorageBuffer, or PhysicalStorageBuffer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Base-07651", + "text": "If the Base operand of OpPtrAccessChain has a Workgroup Storage Class, then the VariablePointers capability must be declared", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Base-07652", + "text": "If the Base operand of OpPtrAccessChain has a StorageBuffer Storage Class, then the VariablePointers or VariablePointersStorageBuffer capability must be declared", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PhysicalStorageBuffer64-04708", + "text": "If the PhysicalStorageBuffer64 addressing model is enabled, all instructions that support memory access operands and that use a physical pointer must include the Aligned operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PhysicalStorageBuffer64-04709", + "text": "If the PhysicalStorageBuffer64 addressing model is enabled, any access chain instruction that accesses into a RowMajor matrix must only be used as the Pointer operand to OpLoad or OpStore", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PhysicalStorageBuffer64-04710", + "text": "If the PhysicalStorageBuffer64 addressing model is enabled, OpConvertUToPtr and OpConvertPtrToU must use an integer type whose Width is 64", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeForwardPointer-04711", + "text": "OpTypeForwardPointer must have a Storage Class of PhysicalStorageBuffer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-04745", + "text": "All block members in a variable with a Storage Class of PushConstant declared as an array must only be accessed by dynamically uniform indices", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpVariable-06673", + "text": "There must not be more than one OpVariable in the PushConstant Storage Class listed in the Interface for each OpEntryPoint", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpEntryPoint-06674", + "text": "Each OpEntryPoint must not statically use more than one OpVariable in the PushConstant Storage Class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpEntryPoint-08721", + "text": "Each OpEntryPoint must not have more than one Input variable assigned the same Component word inside a Location slot, either explicitly or implicitly", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpEntryPoint-08722", + "text": "Each OpEntryPoint must not have more than one Output variable assigned the same Component word inside a Location slot, either explicitly or implicitly", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Result-04780", + "text": "The Result Type operand of any OpImageRead or OpImageSparseRead instruction must be a vector of four components", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-PushConstant-06675", + "text": "Any variable in the PushConstant or StorageBuffer storage class must be decorated as Block", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Uniform-06676", + "text": "Any variable in the Uniform Storage Class must be decorated as Block or BufferBlock", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-UniformConstant-06677", + "text": "Any variable in the UniformConstant, StorageBuffer, or Uniform Storage Class must be decorated with DescriptorSet and Binding", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-InputAttachmentIndex-06678", + "text": "Variables decorated with InputAttachmentIndex must be in the UniformConstant Storage Class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-DescriptorSet-06491", + "text": "If a variable is decorated by DescriptorSet or Binding, the Storage Class must correspond to an entry in Shader Resource and Storage Class Correspondence", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Input-06778", + "text": "Variables with a Storage Class of Input in a fragment shader stage that are decorated with PerVertexKHR must be declared as arrays", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07102", + "text": "The module must not contain both an entry point that uses the TaskEXT or MeshEXT Execution Model and an entry point that uses the TaskNV or MeshNV Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07106", + "text": "In mesh shaders using the MeshEXT Execution Model OpSetMeshOutputsEXT must be called before any outputs are written", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07107", + "text": "In mesh shaders using the MeshEXT Execution Model all variables declared as output must not be read from", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07108", + "text": "In mesh shaders using the MeshEXT Execution Model for OpSetMeshOutputsEXT instructions, the “Vertex Count” and “Primitive Count” operands must not depend on ViewIndex", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07109", + "text": "In mesh shaders using the MeshEXT Execution Model variables decorated with PrimitivePointIndicesEXT, PrimitiveLineIndicesEXT, or PrimitiveTriangleIndicesEXT declared as an array must not be accessed by indices that depend on ViewIndex", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07110", + "text": "In mesh shaders using the MeshEXT Execution Model any values stored in variables decorated with PrimitivePointIndicesEXT, PrimitiveLineIndicesEXT, or PrimitiveTriangleIndicesEXT must not depend on ViewIndex", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07111", + "text": "In mesh shaders using the MeshEXT Execution Model variables in workgroup or private Storage Class declared as or containing a composite type must not be accessed by indices that depend on ViewIndex", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07330", + "text": "In mesh shaders using the MeshEXT Execution Model the OutputVertices Execution Mode must be greater than 0", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-MeshEXT-07331", + "text": "In mesh shaders using the MeshEXT Execution Model the OutputPrimitivesEXT Execution Mode must be greater than 0", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Input-07290", + "text": "Variables with a Storage Class of Input or Output and a type of OpTypeBool must be decorated with the BuiltIn decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileImageEXT-08723", + "text": "The tile image variable declarations must obey the constraints on the TileImageEXT Storage Class and the Location decoration described in Fragment Tile Image Interface", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-None-08724", + "text": "The TileImageEXT Storage Class must only be used for declaring tile image variables", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Pointer-08973", + "text": "The Storage Class of the Pointer operand to OpCooperativeMatrixLoadKHR or OpCooperativeMatrixStoreKHR must be limited to Workgroup, StorageBuffer, or PhysicalStorageBuffer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeFloat-10370", + "text": "Variables with a type of OpTypeFloat and an encoding of BFloat16KHR must not be declared with a Storage Class of Input or Output", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-UniformBufferArrayDynamicIndexing-10127", + "text": "If the UniformBufferArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a uniform buffer, the uniform buffer through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-SampledImageArrayDynamicIndexing-10128", + "text": "If the SampledImageArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a sampled image or sampler, the sampled image or sampler through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-StorageBufferArrayDynamicIndexing-10129", + "text": "If the StorageBufferArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a storage buffer, the storage buffer through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-StorageImageArrayDynamicIndexing-10130", + "text": "If the StorageImageArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a storage image, the storage image through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-InputAttachmentArrayDynamicIndexing-10131", + "text": "If the InputAttachmentArrayDynamicIndexing capability is not declared, and an instruction accesses memory through an input attachment, the input attachmnet through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-UniformTexelBufferArrayDynamicIndexing-10132", + "text": "If the UniformTexelBufferArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a uniform texel buffer, the uniform texel buffer through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-StorageTexelBufferArrayDynamicIndexing-10133", + "text": "If the StorageTexelBufferArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a storage texel buffer, the storage texel buffer through which that memory is accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileShadingQCOM-10686", + "text": "TileShadingQCOM capability must not be enabled in any stage other than compute or fragment", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Execution-10687", + "text": "Execution Mode NonCoherentTileAttachmentReadQCOM must not be used in any stage other than fragment", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-Execution-10688", + "text": "Execution Mode TileShadingRateQCOM must not be used in any stage other than compute", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileAttachmentQCOM-10689", + "text": "If the TileAttachmentQCOM Storage Class is used, the TileShadingQCOM capability must be enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-NonCoherentTileAttachmentReadQCOM-10690", + "text": "If the NonCoherentTileAttachmentReadQCOM Execution Mode is used, the TileShadingQCOM capability must be enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileShadingRateQCOM-10691", + "text": "If the TileShadingRateQCOM Execution Mode is used, the TileShadingQCOM capability must be enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileShadingRateQCOM-10692", + "text": "If the TileShadingRateQCOM Execution Mode is used, LocalSize and LocalSizeId Execution Mode must not be specified", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-10693", + "text": "OpTypeImage variables in the TileAttachmentQCOM Storage Class must have Dim equal to 2D", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeImage-10694", + "text": "OpTypeImage variables in the TileAttachmentQCOM Storage Class must Sampled equal to 1 or 2", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileAttachmentQCOM-10695", + "text": "Any variable in the TileAttachmentQCOM Storage Class must be decorated with DescriptorSet and Binding", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileAttachmentQCOM-10696", + "text": "Any variable in the TileAttachmentQCOM Storage Class must not be decorated with Component decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-TileAttachmentQCOM-10697", + "text": "An OpTypeImage variables in the TileAttachmentQCOM Storage Class must not be consumed by an OpImageQuery* instruction", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpTypeFloat-10823", + "text": "Variables with a type of OpTypeFloat and an encoding of Float8E4M3EXT or Float8E5M2EXT must not be declared with a Storage Class of Input or Output", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpGraphInputARM-09931", + "text": "The InputIndex and ElementIndex operands to OpGraphInputARM must be the <id> of a constant instruction", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-StandaloneSpirv-OpGraphSetOutputARM-09932", + "text": "The OutputIndex and ElementIndex operands to OpGraphSetOutputARM must be the <id> of a constant instruction", + "page": "appendices/spirvenv.html" + } + ] + }, + "RuntimeSpirv": { + "core": [ + { + "vuid": "VUID-RuntimeSpirv-vulkanMemoryModel-06265", + "text": "If the vulkanMemoryModel feature is enabled and the vulkanMemoryModelDeviceScope feature is not enabled, Device memory scope must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-vulkanMemoryModel-06266", + "text": "If the vulkanMemoryModel feature is not enabled, QueueFamily memory scope must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSubgroupClock-06267", + "text": "If the shaderSubgroupClock feature is not enabled, the Subgroup scope must not be used for OpReadClockKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDeviceClock-06268", + "text": "If the shaderDeviceClock feature is not enabled, the Device scope must not be used for OpReadClockKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRelaxedExtendedInstruction-10773", + "text": "If the shaderRelaxedExtendedInstruction feature is not enabled, the OpExtInstWithForwardRefsKHR must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-09558", + "text": "If the dynamicRenderingLocalRead feature is not enabled, any variable created with a “Type” of OpTypeImage that has a “Dim” operand of SubpassData must be decorated with InputAttachmentIndex", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeImage-09644", + "text": "Any variable declared as an OpTypeArray where the Element Type is an OpTypeImage with a “Dim” operand of SubpassData must be decorated with InputAttachmentIndex", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-apiVersion-07954", + "text": "If VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.3, the VK_KHR_format_feature_flags2 extension is not supported, and the shaderStorageImageWriteWithoutFormat feature is not enabled, any variable created with a “Type” of OpTypeImage that has a “Sampled” operand of 2 and an “Image Format” operand of Unknown must be decorated with NonWritable", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-apiVersion-07955", + "text": "If VkPhysicalDeviceProperties::apiVersion is less than Vulkan 1.3, the VK_KHR_format_feature_flags2 extension is not supported, and the shaderStorageImageReadWithoutFormat feature is not enabled, any variable created with a “Type” of OpTypeImage that has a “Sampled” operand of 2 and an “Image Format” operand of Unknown must be decorated with NonReadable", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageWrite-07112", + "text": "OpImageWrite to any Image whose Image Format is not Unknown must have the Texel operand contain at least as many components as the corresponding VkFormat as given in the SPIR-V Image Format compatibility table", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Location-06272", + "text": "The sum of Location and the number of locations the variable it decorates consumes must be less than or equal to the value for the matching Execution Model defined in Shader Input and Output Locations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Location-06428", + "text": "The maximum number of storage buffers, storage images, and output Location decorated color attachments written to in the Fragment Execution Model must be less than or equal to maxFragmentCombinedOutputResources", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-UniformBufferArrayNonUniformIndexing-10134", + "text": "If the UniformBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a uniform buffer, the uniform buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-SampledImageArrayNonUniformIndexing-10135", + "text": "If the SampledImageArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a sampled image or sampler, the sampled image or sampler through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-StorageBufferArrayNonUniformIndexing-10136", + "text": "If the StorageBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a storage buffer, the storage buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-StorageImageArrayNonUniformIndexing-10137", + "text": "If the StorageImageArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a storage image, the storage image through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-InputAttachmentArrayNonUniformIndexing-10138", + "text": "If the InputAttachmentArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through an input attachment, the input attachment through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-UniformTexelBufferArrayNonUniformIndexing-10139", + "text": "If the UniformTexelBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a uniform texel buffer, the uniform texel buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-StorageTexelBufferArrayNonUniformIndexing-10140", + "text": "If the StorageTexelBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a storage texel buffer, the storage texel buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10141", + "text": "If the effective subgroup size is 1, the UniformBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a uniform buffer, the uniform buffer through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10142", + "text": "If the effective subgroup size is 1, the SampledImageArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a sampled image or sampler, the sampled image or sampler through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10143", + "text": "If the effective subgroup size is 1, the StorageBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a storage buffer, the storage buffer through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10144", + "text": "If the effective subgroup size is 1, the StorageImageArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a storage image, the storage image through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10145", + "text": "If the effective subgroup size is 1, the InputAttachmentArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through an input attachment, the input attachment through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10146", + "text": "If the effective subgroup size is 1, the UniformTexelBufferArrayNonUniformIndexing capability is not declared, and an instruction accesses memory through a uniform texel buffer, the uniform texel buffer through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10147", + "text": "If the effective subgroup size is 1, the StorageTexelBufferArrayNonUniformIndexing capability is not is not declared, and an instruction accesses memory through a storage texel buffer, the storage texel buffer through which that memory is accessed must be dynamically uniform within the invocation group", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-10148", + "text": "If an instruction accesses memory through any resource, the effective subgroup size is 1, and the resource through which that memory is accessed is not uniform within the invocation group, then the operand corresponding to that resource (e.g. the pointer or sampled image operand) must be decorated with NonUniform", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupSize-10149", + "text": "If an instruction accesses memory through any resource, the effective subgroup size is greater than 1, and the resource through which that memory is accessed is not uniform within the invocation group, and not uniform within the subgroup, then the operand corresponding to that resource (e.g. the pointer or sampled image operand) must be decorated with NonUniform", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06275", + "text": "shaderSubgroupExtendedTypes must be enabled for group operations to use 8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and vectors of these types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06276", + "text": "If subgroupBroadcastDynamicId is VK_TRUE, and the shader module version is 1.5 or higher, the “Index” for OpGroupNonUniformQuadBroadcast must be dynamically uniform within the derivative group. Otherwise, “Index” must be a constant", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06277", + "text": "If subgroupBroadcastDynamicId is VK_TRUE, and the shader module version is 1.5 or higher, the “Id” for OpGroupNonUniformBroadcast must be dynamically uniform within the subgroup. Otherwise, “Id” must be a constant", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06278", + "text": "shaderBufferInt64Atomics must be enabled for 64-bit integer atomic operations to be supported on a Pointer with a Storage Class of StorageBuffer or Uniform", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06279", + "text": "shaderSharedInt64Atomics must be enabled for 64-bit integer atomic operations to be supported on a Pointer with a Storage Class of Workgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06284", + "text": "shaderBufferFloat32Atomics, or shaderBufferFloat32AtomicAdd, or shaderBufferFloat64Atomics, or shaderBufferFloat64AtomicAdd, or shaderBufferFloat16Atomics, or shaderBufferFloat16AtomicAdd, or shaderBufferFloat16AtomicMinMax, or shaderBufferFloat32AtomicMinMax, or shaderBufferFloat64AtomicMinMax, or shaderFloat16VectorAtomics must be enabled for floating-point atomic operations to be supported on a Pointer with a Storage Class of StorageBuffer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06285", + "text": "shaderSharedFloat32Atomics, or shaderSharedFloat32AtomicAdd, or shaderSharedFloat64Atomics, or shaderSharedFloat64AtomicAdd, or shaderSharedFloat16Atomics, or shaderSharedFloat16AtomicAdd, or shaderSharedFloat16AtomicMinMax, or shaderSharedFloat32AtomicMinMax, or shaderSharedFloat64AtomicMinMax, or shaderFloat16VectorAtomics, must be enabled for floating-point atomic operations to be supported on a Pointer with a Storage Class of Workgroup", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06286", + "text": "shaderImageFloat32Atomics, or shaderImageFloat32AtomicAdd, or shaderImageFloat32AtomicMinMax, must be enabled for 32-bit floating-point atomic operations to be supported on a Pointer with a Storage Class of Image", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06287", + "text": "sparseImageFloat32Atomics, or sparseImageFloat32AtomicAdd, or sparseImageFloat32AtomicMinMax, must be enabled for 32-bit floating-point atomics to be supported on sparse images", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06288", + "text": "shaderImageInt64Atomics must be enabled for 64-bit integer atomic operations to be supported on a Pointer with a Storage Class of Image", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-denormBehaviorIndependence-06289", + "text": "If denormBehaviorIndependence is VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the entry point must use the same denormals Execution Mode for both 16-bit and 64-bit floating-point types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-denormBehaviorIndependence-06290", + "text": "If denormBehaviorIndependence is VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry point must use the same denormals Execution Mode for all floating-point types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-roundingModeIndependence-06291", + "text": "If roundingModeIndependence is VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the entry point must use the same rounding Execution Mode for both 16-bit and 64-bit floating-point types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-roundingModeIndependence-06292", + "text": "If roundingModeIndependence is VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry point must use the same rounding Execution Mode for all floating-point types", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-06293", + "text": "If shaderSignedZeroInfNanPreserveFloat16 is VK_FALSE, then SignedZeroInfNanPreserve for 16-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-06294", + "text": "If shaderSignedZeroInfNanPreserveFloat32 is VK_FALSE, then SignedZeroInfNanPreserve for 32-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-06295", + "text": "If shaderSignedZeroInfNanPreserveFloat64 is VK_FALSE, then SignedZeroInfNanPreserve for 64-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDenormPreserveFloat16-06296", + "text": "If shaderDenormPreserveFloat16 is VK_FALSE, then DenormPreserve for 16-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDenormPreserveFloat32-06297", + "text": "If shaderDenormPreserveFloat32 is VK_FALSE, then DenormPreserve for 32-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDenormPreserveFloat64-06298", + "text": "If shaderDenormPreserveFloat64 is VK_FALSE, then DenormPreserve for 64-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat16-06299", + "text": "If shaderDenormFlushToZeroFloat16 is VK_FALSE, then DenormFlushToZero for 16-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat32-06300", + "text": "If shaderDenormFlushToZeroFloat32 is VK_FALSE, then DenormFlushToZero for 32-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat64-06301", + "text": "If shaderDenormFlushToZeroFloat64 is VK_FALSE, then DenormFlushToZero for 64-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRoundingModeRTEFloat16-06302", + "text": "If shaderRoundingModeRTEFloat16 is VK_FALSE, then RoundingModeRTE for 16-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRoundingModeRTEFloat32-06303", + "text": "If shaderRoundingModeRTEFloat32 is VK_FALSE, then RoundingModeRTE for 32-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRoundingModeRTEFloat64-06304", + "text": "If shaderRoundingModeRTEFloat64 is VK_FALSE, then RoundingModeRTE for 64-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRoundingModeRTZFloat16-06305", + "text": "If shaderRoundingModeRTZFloat16 is VK_FALSE, then RoundingModeRTZ for 16-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRoundingModeRTZFloat32-06306", + "text": "If shaderRoundingModeRTZFloat32 is VK_FALSE, then RoundingModeRTZ for 32-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderRoundingModeRTZFloat64-06307", + "text": "If shaderRoundingModeRTZFloat64 is VK_FALSE, then RoundingModeRTZ for 64-bit floating-point type must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-09559", + "text": "If shaderSignedZeroInfNanPreserveFloat16 is VK_FALSE then any FPFastMathDefault execution mode with a type of 16-bit float must include the NSZ, NotInf, and NotNaN flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-09560", + "text": "If shaderSignedZeroInfNanPreserveFloat16 is VK_FALSE then any FPFastMathMode decoration on an instruction with result type or any operand type that includes a 16-bit float must include the NSZ, NotInf, and NotNaN flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-09561", + "text": "If shaderSignedZeroInfNanPreserveFloat32 is VK_FALSE then any FPFastMathDefault execution mode with a type of 32-bit float must include the NSZ, NotInf, and NotNaN flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-09562", + "text": "If shaderSignedZeroInfNanPreserveFloat32 is VK_FALSE then any FPFastMathMode decoration on an instruction with result type or any operand type that includes a 32-bit float must include the NSZ, NotInf, and NotNaN flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-09563", + "text": "If shaderSignedZeroInfNanPreserveFloat64 is VK_FALSE then any FPFastMathDefault execution mode with a type of 64-bit float must include the NSZ, NotInf, and NotNaN flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-09564", + "text": "If shaderSignedZeroInfNanPreserveFloat64 is VK_FALSE then any FPFastMathMode decoration on an instruction with result type or any operand type that includes a 64-bit float must include the NSZ, NotInf, and NotNaN flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Offset-06308", + "text": "The Offset plus size of the type of each variable, in the output interface of the entry point being compiled, decorated with XfbBuffer must not be greater than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferDataSize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-XfbBuffer-06309", + "text": "For any given XfbBuffer value, define the buffer data size to be smallest number of bytes such that, for all outputs decorated with the same XfbBuffer value, the size of the output interface variable plus the Offset is less than or equal to the buffer data size. For a given Stream, the sum of all the buffer data sizes for all buffers writing to that stream the must not exceed VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreamDataSize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpEmitStreamVertex-06310", + "text": "The Stream value to OpEmitStreamVertex and OpEndStreamPrimitive must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-transformFeedbackStreamsLinesTriangles-06311", + "text": "If the geometry shader emits to more than one vertex stream and VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackStreamsLinesTriangles is VK_FALSE, then Execution Mode must be OutputPoints", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Stream-06312", + "text": "The stream number value to Stream must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-XfbStride-06313", + "text": "The XFB Stride value to XfbStride must be less than or equal to VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferDataStride", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-PhysicalStorageBuffer64-06314", + "text": "If the PhysicalStorageBuffer64 addressing model is enabled any load or store through a physical pointer type must be aligned to a multiple of the size of the largest scalar type in the pointed-to type", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-PhysicalStorageBuffer64-06315", + "text": "If the PhysicalStorageBuffer64 addressing model is enabled the pointer value of a memory access instruction must be at least as aligned as specified by the Aligned memory access operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeMatrixNV-06316", + "text": "For OpTypeCooperativeMatrixNV, the component type, scope, number of rows, and number of columns must match one of the matrices in any of the supported VkCooperativeMatrixPropertiesNV", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeMatrixMulAddNV-10059", + "text": "For OpTypeCooperativeMatrixMulAddNV, the operands must match a supported VkCooperativeMatrixPropertiesNV, such that:
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeMatrixNV-06322", + "text": "OpTypeCooperativeMatrixNV and OpCooperativeMatrix* instructions must not be used in shader stages not included in VkPhysicalDeviceCooperativeMatrixPropertiesNV::cooperativeMatrixSupportedStages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeMatrixKHR-10163", + "text": "For OpTypeCooperativeMatrixKHR, if the cooperativeMatrixFlexibleDimensions feature is not enabled, the component type, scope, number of rows, and number of columns must match one of the matrices in any of the supported VkCooperativeMatrixPropertiesKHR, where
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeMatrixMulAddKHR-10060", + "text": "For OpCooperativeMatrixMulAddKHR, if the cooperativeMatrixFlexibleDimensions feature is not enabled, the operands must match a supported VkCooperativeMatrixPropertiesKHR, such that:
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-cooperativeMatrixWorkgroupScope-10164", + "text": "If the cooperativeMatrixWorkgroupScope feature is not enabled, the scope of all OpTypeCooperativeMatrixKHR must not be VkScopeKHR::VK_SCOPE_WORKGROUP_KHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-cooperativeMatrixFlexibleDimensions-10165", + "text": "For OpTypeCooperativeMatrixKHR, if the cooperativeMatrixFlexibleDimensions feature is enabled, the component type, scope, number of rows, and number of columns must match either one of the matrices in one of the supported VkCooperativeMatrixPropertiesKHR as described above, or one of the supported VkCooperativeMatrixFlexibleDimensionsPropertiesNV, where
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-cooperativeMatrixFlexibleDimensions-10166", + "text": "For OpCooperativeMatrixMulAddKHR, if the cooperativeMatrixFlexibleDimensions feature is enabled, the operands must match either one of the supported VkCooperativeMatrixPropertiesKHR as described above, or one of the supported VkCooperativeMatrixFlexibleDimensionsPropertiesNV, such that:
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-cooperativeMatrixFlexibleDimensionsMaxDimension-10167", + "text": "All OpTypeCooperativeMatrixKHR dimensions must be less than or equal to cooperativeMatrixFlexibleDimensionsMaxDimension", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxComputeSharedMemorySize-10168", + "text": "If the module uses OpTypeCooperativeMatrixKHR with Scope equal to Workgroup, the sum of size in bytes for variables and padding in the Workgroup Storage Class in the GLCompute Execution Model must be less than or equal to maxComputeSharedMemorySize minus cooperativeMatrixWorkgroupScopeReservedSharedMemory", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-cooperativeMatrixSupportedStages-08985", + "text": "OpTypeCooperativeMatrixKHR and OpCooperativeMatrix* instructions must not be used in shader stages not included in VkPhysicalDeviceCooperativeMatrixPropertiesKHR::cooperativeMatrixSupportedStages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeMatrixKHR-10770", + "text": "Any pipeline containing a shader with OpTypeCooperativeMatrixKHR or OpCooperativeMatrix*KHR instructions must be created with the VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT flag or the shader module must be version 1.6 or greater", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeMatrixKHR-10771", + "text": "Any shader object containing OpTypeCooperativeMatrixKHR or OpCooperativeMatrix*KHR instructions must be created with the VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT flag or the shader module must be version 1.6 or greater", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeMatrixLoadNV-06324", + "text": "For OpCooperativeMatrixLoadNV and OpCooperativeMatrixStoreNV instructions, the Pointer and Stride operands must be aligned to at least the lesser of 16 bytes or the natural alignment of a row or column (depending on ColumnMajor) of the matrix (where the natural alignment is the number of columns/rows multiplied by the component size)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorMatrixMulNV-10089", + "text": "For OpCooperativeVectorMatrixMulNV and OpCooperativeVectorMatrixMulAddNV, the following must be satisfied by the same entry in the VkCooperativeVectorPropertiesNV array returned by vkGetPhysicalDeviceCooperativeVectorPropertiesNV:
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorMatrixMulNV-10090", + "text": "For OpCooperativeVectorMatrixMulNV and OpCooperativeVectorMatrixMulAddNV, if MatrixInterpretation is either VK_COMPONENT_TYPE_FLOAT_E4M3_NV or VK_COMPONENT_TYPE_FLOAT_E5M2_NV then MemoryLayout must be either VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV or VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-cooperativeVectorSupportedStages-10091", + "text": "OpTypeCooperativeVectorNV and OpCooperativeVector* instructions must not be used in shader stages not included in VkPhysicalDeviceCooperativeVectorPropertiesNV::cooperativeVectorSupportedStages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorReduceSumAccumulateNV-10092", + "text": "For OpCooperativeVectorReduceSumAccumulateNV:
\n\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorOuterProductAccumulateNV-10093", + "text": "For OpCooperativeVectorOuterProductAccumulateNV:
\n
    \n
  • \n

    MatrixInterpretation must be VK_COMPONENT_TYPE_FLOAT16_KHR\nor VK_COMPONENT_TYPE_FLOAT32_KHR

    \n
  • \n
  • \n

    If MatrixInterpretation is VK_COMPONENT_TYPE_FLOAT16_KHR,\ncooperativeVectorTrainingFloat16Accumulation must be supported

    \n
  • \n
  • \n

    If MatrixInterpretation is VK_COMPONENT_TYPE_FLOAT32_KHR,\ncooperativeVectorTrainingFloat32Accumulation must be supported

    \n
  • \n
  • \n

    The component types of A and B must be 16-bit floating-point

    \n
  • \n
  • \n

    The matrix layout must be training-optimal

    \n
  • \n
  • \n

    The pointer’s storage class must be StorageBuffer or\nPhysicalStorageBuffer

    \n
  • \n
\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxCooperativeVectorComponents-10094", + "text": "OpTypeCooperativeVector instructions must have Component Count less than or equal to maxCooperativeVectorComponents", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeCooperativeVector-10095", + "text": "OpTypeCooperativeVector instructions must have Component Type that is any supported type reported by vkGetPhysicalDeviceCooperativeVectorPropertiesNV", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshNV-07113", + "text": "For mesh shaders using the MeshNV Execution Model the OutputVertices OpExecutionMode must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesNV::maxMeshOutputVertices", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshNV-07114", + "text": "For mesh shaders using the MeshNV Execution Model the OutputPrimitivesNV OpExecutionMode must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesNV::maxMeshOutputPrimitives", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07115", + "text": "For mesh shaders using the MeshEXT Execution Model the OutputVertices OpExecutionMode must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputVertices", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07332", + "text": "For mesh shaders using the MeshEXT Execution Model the “Vertex Count” operand of OpSetMeshOutputsEXT must be less than or equal to OutputVertices OpExecutionMode", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07116", + "text": "For mesh shaders using the MeshEXT Execution Model the OutputPrimitivesEXT OpExecutionMode must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputPrimitives", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07333", + "text": "For mesh shaders using the MeshEXT Execution Model the “Primitive Count” operand of OpSetMeshOutputsEXT must be less than or equal to OutputPrimitivesEXT OpExecutionMode", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07117", + "text": "In task shaders using the TaskEXT Execution Model OpEmitMeshTasksEXT must be called exactly once under dynamically uniform conditions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07118", + "text": "In mesh shaders using the MeshEXT Execution Model OpSetMeshOutputsEXT must be called at most once under dynamically uniform conditions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07291", + "text": "In task shaders using the TaskEXT Execution Model the x size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupSize[0]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07292", + "text": "In task shaders using the TaskEXT Execution Model the y size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupSize[1]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07293", + "text": "In task shaders using the TaskEXT Execution Model the z size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupSize[2]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07294", + "text": "In task shaders using the TaskEXT Execution Model the product of x size, y size, and z size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupInvocations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07295", + "text": "For mesh shaders using the MeshEXT Execution Model the x size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupSize[0]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07296", + "text": "For mesh shaders using the MeshEXT Execution Model the y size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupSize[1]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07297", + "text": "For mesh shaders using the MeshEXT Execution Model the z size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupSize[2]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-07298", + "text": "For mesh shaders using the MeshEXT Execution Model the product of x size, y size, and z size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupInvocations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07299", + "text": "In task shaders using the TaskEXT Execution Model the value of the “Group Count X” operand of OpEmitMeshTasksEXT must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[0]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07300", + "text": "In task shaders using the TaskEXT Execution Model the value of the “Group Count Y” operand of OpEmitMeshTasksEXT must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[1]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07301", + "text": "In task shaders using the TaskEXT Execution Model the value of the “Group Count Z” operand of OpEmitMeshTasksEXT must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[2]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TaskEXT-07302", + "text": "In task shaders using the TaskEXT Execution Model the product of the “Group Count” operands of OpEmitMeshTasksEXT must be less than or equal to VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupTotalCount", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxMeshSharedMemorySize-08754", + "text": "The sum of size in bytes for variables and padding in the Workgroup Storage Class in the MeshEXT Execution Model must be less than or equal to maxMeshSharedMemorySize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxMeshPayloadAndSharedMemorySize-08755", + "text": "The sum of size in bytes for variables and padding in the TaskPayloadWorkgroupEXT or Workgroup Storage Class in the MeshEXT Execution Model must be less than or equal to maxMeshPayloadAndSharedMemorySize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxMeshOutputMemorySize-08756", + "text": "The sum of size in bytes for variables in the Output Storage Class in the MeshEXT Execution Model must be less than or equal to maxMeshOutputMemorySize according to the formula in Mesh Shader Output", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxMeshPayloadAndOutputMemorySize-08757", + "text": "The sum of size in bytes for variables and in the TaskPayloadWorkgroupEXT or Output Storage Class in the MeshEXT Execution Model must be less than or equal to maxMeshPayloadAndOutputMemorySize according to the formula in Mesh Shader Output", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxTaskPayloadSize-08758", + "text": "The sum of size in bytes for variables and in the TaskPayloadWorkgroupEXT Storage Class in the TaskEXT Execution Model must be less than or equal to maxTaskPayloadSize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxTaskSharedMemorySize-08759", + "text": "The sum of size in bytes for variables and padding in the Workgroup Storage Class in the TaskEXT Execution Model must be less than or equal to maxTaskSharedMemorySize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxTaskPayloadAndSharedMemorySize-08760", + "text": "The sum of size in bytes for variables and padding in the TaskPayloadWorkgroupEXT or Workgroup Storage Class in the TaskEXT Execution Model must be less than or equal to maxTaskPayloadAndSharedMemorySize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeMatrixLoadKHR-08986", + "text": "For OpCooperativeMatrixLoadKHR and OpCooperativeMatrixStoreKHR instructions, the Pointer and Stride operands must be aligned to at least the lesser of 16 bytes or the natural alignment of a row or column (depending on ColumnMajor) of the matrix (where the natural alignment is the number of columns/rows multiplied by the component size)", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorMatrixMulNV-10096", + "text": "For OpCooperativeVectorMatrixMulNV and OpCooperativeVectorMatrixMulAddNV instructions using non-optimal layouts, the Stride operand must be aligned to 16 bytes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorMatrixMulNV-10097", + "text": "For OpCooperativeVectorMatrixMulNV and OpCooperativeVectorMatrixMulAddNV instructions, the Matrix and MatrixOffset must be aligned to 64 bytes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorMatrixMulAddNV-10098", + "text": "For OpCooperativeVectorMatrixMulAddNV instructions, the Bias and BiasOffset must be aligned to 16 bytes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorLoadNV-10099", + "text": "For OpCooperativeVectorLoadNV and OpCooperativeVectorStoreNV instructions, the Pointer and Offset must be aligned to 16 bytes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorReduceSumAccumulateNV-10100", + "text": "For OpCooperativeVectorReduceSumAccumulateNV instructions, the Pointer and Offset must be aligned to 16 bytes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpCooperativeVectorOuterProductAccumulateNV-10101", + "text": "For OpCooperativeVectorOuterProductAccumulateNV instructions, the Pointer and Offset must be aligned to 64 bytes", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSampleRateInterpolationFunctions-06325", + "text": "If the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::shaderSampleRateInterpolationFunctions is VK_FALSE, then GLSL.std.450 fragment interpolation functions are not supported by the implementation and OpCapability must not be InterpolationFunction", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-tessellationShader-06326", + "text": "If the tessellationShader feature is enabled, and the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationIsolines is VK_FALSE, then OpExecutionMode must not be IsoLines", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-tessellationShader-06327", + "text": "If the tessellationShader feature is enabled, and the VK_KHR_portability_subset extension is enabled, and VkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationPointMode is VK_FALSE, then OpExecutionMode must not be PointMode", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-storageBuffer8BitAccess-06328", + "text": "If storageBuffer8BitAccess is VK_FALSE, then objects containing an 8-bit integer element must not have Storage Class of StorageBuffer, ShaderRecordBufferKHR, or PhysicalStorageBuffer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-uniformAndStorageBuffer8BitAccess-06329", + "text": "If uniformAndStorageBuffer8BitAccess is VK_FALSE, then objects in the Uniform Storage Class with the Block decoration must not have an 8-bit integer member", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-storagePushConstant8-06330", + "text": "If storagePushConstant8 is VK_FALSE, then objects containing an 8-bit integer element must not have Storage Class of PushConstant", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-workgroupMemoryExplicitLayout8BitAccess-10756", + "text": "If workgroupMemoryExplicitLayout8BitAccess is VK_FALSE, then objects in the Workgroup Storage Class with the Block decoration must not have an 8-bit integer element.", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-storageBuffer16BitAccess-06331", + "text": "If storageBuffer16BitAccess is VK_FALSE, then objects containing 16-bit integer or 16-bit floating-point elements must not have Storage Class of StorageBuffer, ShaderRecordBufferKHR, or PhysicalStorageBuffer", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-uniformAndStorageBuffer16BitAccess-06332", + "text": "If uniformAndStorageBuffer16BitAccess is VK_FALSE, then objects in the Uniform Storage Class with the Block decoration must not have 16-bit integer or 16-bit floating-point members", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-storagePushConstant16-06333", + "text": "If storagePushConstant16 is VK_FALSE, then objects containing 16-bit integer or 16-bit floating-point elements must not have Storage Class of PushConstant", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-storageInputOutput16-06334", + "text": "If storageInputOutput16 is VK_FALSE, then objects containing 16-bit integer or 16-bit floating-point elements must not have Storage Class of Input or Output", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-workgroupMemoryExplicitLayout16BitAccess-10757", + "text": "If workgroupMemoryExplicitLayout16BitAccess is VK_FALSE, then objects in the Workgroup Storage Class with the Block decoration must not have an 16-bit integer or 16-bit floating-point elements.", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06337", + "text": "shaderBufferFloat16Atomics, or shaderBufferFloat16AtomicAdd, or shaderBufferFloat16AtomicMinMax, or shaderSharedFloat16Atomics, or shaderSharedFloat16AtomicAdd, or shaderSharedFloat16AtomicMinMax must be enabled for 16-bit floating-point atomic operations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06338", + "text": "shaderBufferFloat32Atomics, or shaderBufferFloat32AtomicAdd, or shaderSharedFloat32Atomics, or shaderSharedFloat32AtomicAdd, or shaderImageFloat32Atomics, or shaderImageFloat32AtomicAdd or shaderBufferFloat32AtomicMinMax, or shaderSharedFloat32AtomicMinMax, or shaderImageFloat32AtomicMinMax must be enabled for 32-bit floating-point atomic operations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06339", + "text": "shaderBufferFloat64Atomics, or shaderBufferFloat64AtomicAdd, or shaderSharedFloat64Atomics, or shaderSharedFloat64AtomicAdd, or shaderBufferFloat64AtomicMinMax, or shaderSharedFloat64AtomicMinMax, must be enabled for 64-bit floating-point atomic operations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderFloat16VectorAtomics-09581", + "text": "shaderFloat16VectorAtomics, must be enabled for 16-bit floating-point, 2- and 4-component vector atomic operations to be supported", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-NonWritable-06340", + "text": "If the fragmentStoresAndAtomics feature is not enabled, then all storage image, storage texel buffer, and storage buffer variables in the fragment stage must be decorated with the NonWritable decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-NonWritable-06341", + "text": "If the vertexPipelineStoresAndAtomics feature is not enabled, then all storage image, storage texel buffer, and storage buffer variables in the vertex, tessellation, and geometry stages must be decorated with the NonWritable decoration", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06342", + "text": "If subgroupQuadOperationsInAllStages is VK_FALSE, then quad subgroup operations must not be used except for in fragment and compute stages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-06343", + "text": "Group operations with subgroup scope must not be used if the shader stage is not in subgroupSupportedStages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Offset-06344", + "text": "The first element of the Offset operand of InterpolateAtOffset must be greater than or equal to:
fragwidth × minInterpolationOffset
where fragwidth is the width of the current fragment in pixels", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Offset-06345", + "text": "The first element of the Offset operand of InterpolateAtOffset must be less than or equal to
fragwidth × (maxInterpolationOffset + ULP ) - ULP
where fragwidth is the width of the current fragment in pixels and ULP = 1 / 2^subPixelInterpolationOffsetBits^", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Offset-06346", + "text": "The second element of the Offset operand of InterpolateAtOffset must be greater than or equal to
fragheight × minInterpolationOffset
where fragheight is the height of the current fragment in pixels", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Offset-06347", + "text": "The second element of the Offset operand of InterpolateAtOffset must be less than or equal to
fragheight × (maxInterpolationOffset + ULP ) - ULP
where fragheight is the height of the current fragment in pixels and ULP = 1 / 2^subPixelInterpolationOffsetBits^", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06348", + "text": "For OpRayQueryInitializeKHR instructions, all components of the RayOrigin and RayDirection operands must be finite floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349", + "text": "For OpRayQueryInitializeKHR instructions, the RayTmin and RayTmax operands must be non-negative floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06350", + "text": "For OpRayQueryInitializeKHR instructions, the RayTmin operand must be less than or equal to the RayTmax operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351", + "text": "For OpRayQueryInitializeKHR instructions, RayOrigin, RayDirection, RayTmin, and RayTmax operands must not contain NaNs", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06352", + "text": "For OpRayQueryInitializeKHR instructions, Acceleration Structure must be an acceleration structure built as a top-level acceleration structure", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06889", + "text": "For OpRayQueryInitializeKHR instructions, the Rayflags operand must not contain both SkipTrianglesKHR and SkipAABBsKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06890", + "text": "For OpRayQueryInitializeKHR instructions, the Rayflags operand must not contain more than one of SkipTrianglesKHR, CullBackFacingTrianglesKHR, and CullFrontFacingTrianglesKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06891", + "text": "For OpRayQueryInitializeKHR instructions, the Rayflags operand must not contain more than one of OpaqueKHR, NoOpaqueKHR, CullOpaqueKHR, and CullNoOpaqueKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryGenerateIntersectionKHR-06353", + "text": "For OpRayQueryGenerateIntersectionKHR instructions, Hit T must satisfy the condition RayTmin ≤ Hit T ≤ RayTmax, where RayTmin is equal to the value returned by OpRayQueryGetRayTMinKHR with the same ray query object, and RayTmax is equal to the value of OpRayQueryGetIntersectionTKHR for the current committed intersection with the same ray query object", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpRayQueryGenerateIntersectionKHR-06354", + "text": "For OpRayQueryGenerateIntersectionKHR instructions, Acceleration Structure must not be built with VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-flags-08761", + "text": "For OpRayQueryGetIntersectionTriangleVertexPositionsKHR instructions, Acceleration Structure must have been built with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR in flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06355", + "text": "For OpTraceRayKHR instructions, all components of the RayOrigin and RayDirection operands must be finite floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06356", + "text": "For OpTraceRayKHR instructions, the RayTmin and RayTmax operands must be non-negative floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06552", + "text": "For OpTraceRayKHR instructions, the Rayflags operand must not contain both SkipTrianglesKHR and SkipAABBsKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06892", + "text": "For OpTraceRayKHR instructions, the Rayflags operand must not contain more than one of SkipTrianglesKHR, CullBackFacingTrianglesKHR, and CullFrontFacingTrianglesKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06893", + "text": "For OpTraceRayKHR instructions, the Rayflags operand must not contain more than one of OpaqueKHR, NoOpaqueKHR, CullOpaqueKHR, and CullNoOpaqueKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06553", + "text": "For OpTraceRayKHR instructions, if the Rayflags operand contains SkipTrianglesKHR, the pipeline must not have been created with VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06554", + "text": "For OpTraceRayKHR instructions, if the Rayflags operand contains SkipAABBsKHR, the pipeline must not have been created with VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06357", + "text": "For OpTraceRayKHR instructions, the RayTmin operand must be less than or equal to the RayTmax operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06358", + "text": "For OpTraceRayKHR instructions, RayOrigin, RayDirection, RayTmin, and RayTmax operands must not contain NaNs", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06359", + "text": "For OpTraceRayKHR instructions, Acceleration Structure must be an acceleration structure built as a top-level acceleration structure", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpReportIntersectionKHR-06998", + "text": "The value of the “Hit Kind” operand of OpReportIntersectionKHR must be in the range [0,127]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayKHR-06360", + "text": "For OpTraceRayKHR instructions, if Acceleration Structure was built with VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in flags, the pipeline must have been created with VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06361", + "text": "For OpTraceRayMotionNV instructions, all components of the RayOrigin and RayDirection operands must be finite floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06362", + "text": "For OpTraceRayMotionNV instructions, the RayTmin and RayTmax operands must be non-negative floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06363", + "text": "For OpTraceRayMotionNV instructions, the RayTmin operand must be less than or equal to the RayTmax operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06364", + "text": "For OpTraceRayMotionNV instructions, RayOrigin, RayDirection, RayTmin, and RayTmax operands must not contain NaNs", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06365", + "text": "For OpTraceRayMotionNV instructions, Acceleration Structure must be an acceleration structure built as a top-level acceleration structure with VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06366", + "text": "For OpTraceRayMotionNV instructions the time operand must be between 0.0 and 1.0", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTraceRayMotionNV-06367", + "text": "For OpTraceRayMotionNV instructions the pipeline must have been created with VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayMotionNV-07704", + "text": "For OpHitObjectTraceRayMotionNV instructions, if Acceleration Structure was built with VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in flags, the pipeline must have been created with VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07705", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, all components of the RayOrigin and RayDirection operands must be finite floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07706", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, the RayTmin and RayTmax operands must be non-negative floating-point values", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07707", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, the RayTmin operand must be less than or equal to the RayTmax operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07708", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, RayOrigin, RayDirection, RayTmin, and RayTmax operands must not contain NaNs", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayMotionNV-07709", + "text": "For OpHitObjectTraceRayMotionNV instructions, Acceleration Structure must be an acceleration structure built as a top-level acceleration structure with VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in flags", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07710", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions the time operand must be between 0.0 and 1.0", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayMotionNV-07711", + "text": "For OpHitObjectTraceRayMotionNV instructions the pipeline must have been created with VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07712", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, the Rayflags operand must not contain both SkipTrianglesKHR and SkipAABBsKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07713", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, the Rayflags operand must not contain more than one of SkipTrianglesKHR, CullBackFacingTrianglesKHR, and CullFrontFacingTrianglesKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07714", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, the Rayflags operand must not contain more than one of OpaqueKHR, NoOpaqueKHR, CullOpaqueKHR, and CullNoOpaqueKHR", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07715", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, if the Rayflags operand contains SkipTrianglesKHR, the pipeline must not have been created with VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07716", + "text": "For OpHitObjectTraceRayNV and OpHitObjectTraceRayMotionNV instructions, if the Rayflags operand contains SkipAABBsKHR, the pipeline must not have been created with VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR set", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-x-06429", + "text": "In compute shaders using the GLCompute Execution Model the x size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize[0]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-y-06430", + "text": "In compute shaders using the GLCompute Execution Model the y size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize[1]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-z-06431", + "text": "In compute shaders using the GLCompute Execution Model the z size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize[2]", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-x-06432", + "text": "In compute shaders using the GLCompute Execution Model the product of x size, y size, and z size in LocalSize or LocalSizeId must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupInvocations", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-LocalSizeId-06434", + "text": "If Execution Mode LocalSizeId is used, maintenance4 must be enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maintenance4-06817", + "text": "If the maintenance4 feature is not enabled, any OpTypeVector output interface variables must not have a higher Component Count than a matching OpTypeVector input interface variable", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpEntryPoint-08743", + "text": "Any user-defined variables shared between the OpEntryPoint of two shader stages, and declared with Input as its Storage Class for the subsequent shader stage, must have all Location slots and Component words declared in the preceding shader stage’s OpEntryPoint with Output as the Storage Class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpEntryPoint-07754", + "text": "Any user-defined variables between the OpEntryPoint of two shader stages must have the same type and width for each Component", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpVariable-08746", + "text": "Any OpVariable, Block-decorated OpTypeStruct, or Block-decorated OpTypeStruct members shared between the OpEntryPoint of two shader stages must have matching decorations as defined in interface matching", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Workgroup-06530", + "text": "The sum of size in bytes for variables and padding in the Workgroup Storage Class in the GLCompute Execution Model must be less than or equal to maxComputeSharedMemorySize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderZeroInitializeWorkgroupMemory-06372", + "text": "If the shaderZeroInitializeWorkgroupMemory feature is not enabled, any OpVariable with Workgroup as its Storage Class must not have an Initializer operand", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Offset-10213", + "text": "If the maintenance8 feature is not enabled, image operand Offset must only be used with OpImage*Gather instructions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImage-06376", + "text": "If an OpImage*Gather operation has an image operand of Offset, ConstOffset, or ConstOffsets the offset value must be greater than or equal to minTexelGatherOffset", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImage-06377", + "text": "If an OpImage*Gather operation has an image operand of Offset, ConstOffset, or ConstOffsets the offset value must be less than or equal to maxTexelGatherOffset", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageSample-06435", + "text": "If an OpImageSample* or OpImageFetch* operation has an image operand of Offset or ConstOffset then the offset value must be greater than or equal to minTexelOffset", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageSample-06436", + "text": "If an OpImageSample* or OpImageFetch* operation has an image operand of Offset or ConstOffset then the offset value must be less than or equal to maxTexelOffset", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-samples-08725", + "text": "If an OpTypeImage has an MS operand 0, its bound image must have been created with VkImageCreateInfo::samples as VK_SAMPLE_COUNT_1_BIT", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-samples-08726", + "text": "If an OpTypeImage has an MS operand 1, its bound image must not have been created with VkImageCreateInfo::samples as VK_SAMPLE_COUNT_1_BIT", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-SampleRateShading-06378", + "text": "If the subpass description contains VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the SPIR-V fragment shader Capability SampleRateShading must not be enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-SubgroupUniformControlFlowKHR-06379", + "text": "The Execution Mode SubgroupUniformControlFlowKHR must not be applied to an entry point unless the shaderSubgroupUniformControlFlow feature is enabled, the corresponding shader stage bit is set in subgroupSupportedStages, and the entry point does not execute any invocation repack instructions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06767", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the EarlyAndLateFragmentTestsEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06768", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the StencilRefUnchangedFrontEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06769", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the StencilRefUnchangedBackEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06770", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the StencilRefGreaterFrontEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06771", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the StencilRefGreaterBackEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06772", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the StencilRefLessFrontEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06773", + "text": "If the shaderEarlyAndLateFragmentTests feature is not enabled, the StencilRefLessBackEXT Execution Mode must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageWeightedSampleQCOM-06979", + "text": "If an OpImageWeightedSampleQCOM operation is used, then the Texture Sampled Image and Weight Image parameters must both be dynamically uniform for the quad", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageWeightedSampleQCOM-06980", + "text": "If an OpImageWeightedSampleQCOM operation is used, then the Weight Image parameter must be of Storage Class UniformConstant and type OpTypeImage with Depth=0, Dim=2D, Arrayed=1, MS=0, and Sampled=1", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageWeightedSampleQCOM-06981", + "text": "If an OpImageWeightedSampleQCOM operation is used, then the Weight Image parameter must be decorated with WeightTextureQCOM", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSADQCOM-06982", + "text": "If an OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM operation is used, then the target sampled image, reference sampled image, and Block Size parameters must both be dynamically uniform for the quad", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06983", + "text": "If an OpImageBlockMatchSSDQCOM or OpImageBlockMatchSADQCOM operation is used, then target sampled image and reference sampled image parameters must be of storage class UniformConstant and type OpTypeImage with Depth=0, Dim=2D, Arrayed=0, MS=0, and Sampled=1", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06984", + "text": "If an OpImageBlockMatchSSDQCOM or OpImageBlockMatchSADQCOM operation is used, then the target sampled image and reference sampled image parameters must be decorated with BlockMatchTextureQCOM", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06985", + "text": "If an OpImageBlockMatchSSDQCOM or OpImageBlockMatchSADQCOM operation is used, then target sampled image and reference sampled image parameters must have been created using an identical sampler object", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06986", + "text": "If an OpImageBlockMatchSSDQCOM or OpImageBlockMatchSADQCOM operation is used, then target sampled image and reference sampled image parameters must have been created with a sampler object with unnormalizedCoordinates equal to VK_TRUE", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06987", + "text": "If an OpImageBlockMatchSSDQCOM or OpImageBlockMatchSADQCOM operation is used, then target sampled image and reference sampled image parameters must have been created with a sampler object with unnormalizedCoordinates equal to VK_TRUE", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06988", + "text": "If an OpImageBlockMatchSSDQCOM or OpImageBlockMatchSADQCOM operation is used, then Block Size less than or equal to maxBlockMatchRegion", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBoxFilterQCOM-06989", + "text": "If an OpImageBoxFilterQCOM operation is used, then Box Size.y must be equal to or greater than 1.0 and less than or equal to maxBoxFilterBlockSize.height", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBoxFilterQCOM-06990", + "text": "If an OpImageBoxFilterQCOM operation is used, then Sampled Texture Image and Box Size parameters must be dynamically uniform", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpEntryPoint-08727", + "text": "Each OpEntryPoint must not have more than one variable decorated with InputAttachmentIndex per image aspect of the attachment image bound to it, either explicitly or implicitly as described by input attachment interface", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-minSampleShading-08731", + "text": "If sample shading is enabled and minSampleShading is 1.0, the sample operand of any OpColorAttachmentReadEXT, OpDepthAttachmentReadEXT, or OpStencilAttachmentReadEXT operation must evaluate to the value of the coverage index for any given fragment invocation", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-minSampleShading-08732", + "text": "If sample shading is enabled and any of the OpColorAttachmentReadEXT, OpDepthAttachmentReadEXT, or OpStencilAttachmentReadEXT operations are used, then minSampleShading must be 1.0", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MeshEXT-09218", + "text": "In mesh shaders using the MeshEXT or MeshNV Execution Model and the OutputPoints Execution Mode, if the maintenance5 feature is not enabled, and if the number of output points is greater than 0, a PointSize decorated variable must be written to for each output point", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maintenance5-09190", + "text": "If the maintenance5 feature is enabled and a PointSize decorated variable is written to, all execution paths must write to a PointSize decorated variable", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-ShaderEnqueueAMDX-09191", + "text": "The ShaderEnqueueAMDX capability must only be used in shaders with the GLCompute or MeshEXT execution model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-NodePayloadAMDX-09192", + "text": "Variables in the NodePayloadAMDX storage class must only be declared in the GLCompute or MeshEXT execution model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadSize-09193", + "text": "Variables declared in the NodePayloadAMDX storage class must not be larger than the maxExecutionGraphShaderPayloadSize limit", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadSize-09194", + "text": "Variables declared in the NodeOutputPayloadAMDX storage class must not be larger than the maxExecutionGraphShaderPayloadSize limit", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadSize-09195", + "text": "For a given entry point, the sum of the size of any variable in the NodePayloadAMDX storage class, and the combined size of all statically initialized variables in the NodeOutputPayloadAMDX storage class must not be greater than maxExecutionGraphShaderPayloadSize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadCount-09196", + "text": "Shaders must not statically initialize more than maxExecutionGraphShaderPayloadCount variables in the NodeOutputPayloadAMDX storage class", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxExecutionGraphShaderOutputNodes-09197", + "text": "Shaders must not include more than maxExecutionGraphShaderOutputNodes instances of OpInitializeNodePayloadsAMDX", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchWindow-09219", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then the target sampled image, reference sampled image, and Block Size parameters must both be dynamically uniform for the quad", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchWindow-09220", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then target sampled image and reference sampled image parameters must be of storage class UniformConstant and type OpTypeImage with Depth=0, Dim=2D, Arrayed=0, MS=0, and Sampled=1", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchWindow-09221", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then the target sampled image and reference sampled image parameters must be decorated with BlockMatchTextureQCOM", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchWindow-09222", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then target sampled image and reference sampled image parameters must have been created using an identical sampler object", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchWindow-09223", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then target sampled image and reference sampled image parameters must have been created with a sampler object with unnormalizedCoordinates equal to VK_TRUE", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImageBlockMatchWindow-09224", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then target sampled image and reference sampled image parameters must have been created with sampler object with unnormalizedCoordinates equal to VK_TRUE", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxBlockMatchRegion-09225", + "text": "If a OpImageBlockMatchWindow*QCOM or OpImageBlockMatchGather*QCOM operation is used, then Block Size less than or equal to maxBlockMatchRegion", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-pNext-09226", + "text": "If a OpImageBlockMatchWindow*QCOM operation is used, then target sampled image must have been created using asampler object that included VkSamplerBlockMatchWindowCreateInfoQCOM in the pNext chain", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-MaximallyReconvergesKHR-09565", + "text": "The execution mode MaximallyReconvergesKHR must not be applied to an entry point unless the entry point does not execute any invocation repack instructions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderSubgroupRotateClustered-09566", + "text": "If shaderSubgroupRotateClustered is VK_FALSE, then the ClusterSize operand to OpGroupNonUniformRotateKHR must not be used", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-protectedNoFault-09645", + "text": "If protectedNoFault is not supported, the Storage Class of the PhysicalStorageBuffer must not be used if the buffer being accessed is protected", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-meshAndTaskShaderDerivatives-10153", + "text": "If meshAndTaskShaderDerivatives is VK_FALSE, the DerivativeGroupLinearKHR and DerivativeGroupQuadsKHR execution modes must not be used in the MeshEXT, MeshNV, TaskEXT, or TaskNV Execution Model", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TileShadingQCOM-10698", + "text": "TileShadingQCOM capability must not be declared in the compute stage unless the tileShading feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TileShadingQCOM-10699", + "text": "The TileShadingQCOM capability must not be declared in the fragment stage unless the tileShadingFragmentStage feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TileShadingQCOM-10700", + "text": "A shader that enables SPIR-V capability TileShadingQCOM must not be invoked outside a tile shading render pass", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-TileShadingQCOM-10701", + "text": "A compute shader that enables SPIR-V capability TileShadingQCOM must only be invoked inside those portions of a command buffer where per-tile execution model is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-x-10702", + "text": "In compute shaders that enables SPIR-V capability TileShadingQCOM, the x size in TileShadingRateQCOM must be less than or equal to VkPhysicalDeviceTileShadingPropertiesQCOM::maxTileShadingRate::x", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-y-10703", + "text": "In compute shaders that enables SPIR-V capability TileShadingQCOM, the y size in TileShadingRateQCOM must be less than or equal to VkPhysicalDeviceTileShadingPropertiesQCOM::maxTileShadingRate::y", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-z-10704", + "text": "In compute shaders that enables SPIR-V capability TileShadingQCOM, the z size in TileShadingRateQCOM must be less than or equal to VkTilePropertiesQCOM::tileSize::z", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-tileSize-10705", + "text": "In compute shaders that enables SPIR-V capability TileShadingQCOM, VkTilePropertiesQCOM::tileSize::z % TileShadingRateQCOM::z must equal 0", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImage-10706", + "text": "An OpImage with Storage Class TileAttachmentQCOM must not be consumed by OpImageTexelPointer unless the tileShadingAtomicOps feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeImage-10707", + "text": "An OpTypeImage with Storage Class TileAttachmentQCOM must not be backed by a view equivalent to the color attachment of the current subpass instance unless the tileShadingColorAttachments feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeImage-10708", + "text": "An OpTypeImage with Storage Class TileAttachmentQCOM must not be backed by a view equivalent to the depth aspect of the depth/stencil attachment of the current subpass instance unless the tileShadingDepthAttachments", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeImage-10709", + "text": "An OpTypeImage with Storage Class TileAttachmentQCOM must not be backed by a view equivalent to the stencil aspect of the depth/stencil attachment of the current subpass instance unless the tileShadingStencilAttachments feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeImage-10710", + "text": "An OpTypeImage with Storage Class TileAttachmentQCOM must not be backed by a view equivalent to the input attachment of the current subpass instance unless the tileShadingInputAttachments feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeSampledImage-10711", + "text": "An OpTypeSampledImage with Storage Class TileAttachmentQCOM must not be backed by a view equivalent to an attachment of the current subpass instance unless the tileShadingSampledAttachments feature is enabled", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-tileShadingImageProcessing-10712", + "text": "If an OpTypeSampledImage with Storage Class TileAttachmentQCOM is consumed by any argument of the following operations, tileShadingImageProcessing must be enabled:
\n
    \n
  • \n

    OpImageSampleWeightedQCOM

    \n
  • \n
  • \n

    OpImageBoxFilterQCOM

    \n
  • \n
  • \n

    OpImageBlockMatch*QCOM

    \n
  • \n
\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Coordinate-10713", + "text": "The Coordinate operand of any OpImageRead, OpImageSparseRead, OpImageWrite, or OpImageTexelPointer instruction that consumes an OpTypeImage with an image Storage Class TileAttachmentQCOM must not result in any texels accessed outside the boundaries of the current tile, computed as described in Tile Attachments", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-Coordinate-10714", + "text": "The Coordinate operand(s) of any of the following instructions that consumes an OpTypeSampledImage with an image of Storage Class TileAttachmentQCOM must not result in any texels accessed outside boundaries of the current tile, computed as described in Tile Attachments:
\n
    \n
  • \n

    OpImageSample*

    \n
  • \n
  • \n

    OpImageSparseSample*

    \n
  • \n
  • \n

    OpImageFetch

    \n
  • \n
  • \n

    OpImageSparseFetch

    \n
  • \n
  • \n

    OpImage*Gather

    \n
  • \n
  • \n

    OpImageSparse*Gather

    \n
  • \n
  • \n

    OpImageSampleWeightedQCOM

    \n
  • \n
  • \n

    OpImageBoxFilterQCOM

    \n
  • \n
  • \n

    OpImageBlockMatch*QCOM

    \n
  • \n
\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-10715", + "text": "If a VkSampler object that enables sampler Y′CBCR conversion is accessed in a shader, both the sampler and image accessed must be determined by constant integral expressions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-10716", + "text": "If a VkSampler object that enables sampler Y′CBCR conversion is statically used, it must only be used with OpImageSample* or OpImageSparseSample* instructions", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpImage-10717", + "text": "An OpImage instruction must not be used on a VkSampler object that enables sampler Y′CBCR conversion", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-ConstOffset-10718", + "text": "If a VkSampler object that enables sampler Y′CBCR conversion is statically used, it must not use the ConstOffset or Offset operands", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-shaderTensorSupportedStages-09901", + "text": "OpTypeTensorARM, OpTensorReadARM, OpTensorWriteARM, or OpTensorQuerySizeARM must not be used in shader stages not in shaderTensorSupportedStages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeTensorARM-09902", + "text": "OpTypeTensorARM with a Shape must not be used in shader stages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-OpTypeTensorARM-09907", + "text": "OpTypeTensorARM without a Rank must not be used in shader stages", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxTensorShaderAccessArrayLength-09903", + "text": "The length of an array returned by OpTensorReadARM or passed as the Object operand to OpTensorWriteARM must be less than or equal to maxTensorShaderAccessArrayLength", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-maxTensorShaderAccessSize-09904", + "text": "The total size of the data (number of tensor elements × size of an element) read or written by one OpTensorReadARM, or OpTensorWriteARM instruction, respectively, must be less than or equal to maxTensorShaderAccessSize", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-10824", + "text": "If the maintenance9 feature is not enabled, the Base operand of any OpBitCount, OpBitReverse, OpBitFieldInsert, OpBitFieldSExtract, or OpBitFieldUExtract instruction must be a 32-bit integer scalar or a vector of 32-bit integers", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-GraphARM-09922", + "text": "The GraphARM capability must not be declared in modules used to create a shader stage", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-pNext-09919", + "text": "For each data graph pipeline created with a VkDataGraphPipelineShaderModuleCreateInfoARM structure included in the pNext chain of VkDataGraphPipelineCreateInfoARM, the OpGraph that is used by the OpGraphEntryPointARM the pipeline is being created for must have an OpTypeGraphARM that only uses OpTypeTensorARM with Shape present", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-pNext-09920", + "text": "For each data graph pipeline created with a VkDataGraphPipelineShaderModuleCreateInfoARM structure included in the pNext chain of VkDataGraphPipelineCreateInfoARM, all the OpGraphConstantARM with OpTypeTensorARM type used by the OpGraph that is used by the OpGraphEntryPointARM the pipeline is being created for must have an OpTypeTensorARM with Shape present", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-pNext-09921", + "text": "For each data graph pipeline created with a VkDataGraphPipelineShaderModuleCreateInfoARM structure included in the pNext chain of VkDataGraphPipelineCreateInfoARM, one and only one VkDataGraphPipelineConstantARM structure that satisfies all the following constraints must be present in VkDataGraphPipelineShaderModuleCreateInfoARM::pConstants for each OpGraphConstantARM used by the OpGraph that has a OpTypeTensorARM type and is used by the OpGraphEntryPointARM the pipeline is being created for:
\n
    \n
  • \n

    its id member must match the GraphConstantID of the\nOpGraphConstantARM

    \n
  • \n
  • \n

    its pNext chain must include a VkTensorDescriptionARM\nstructure

    \n
    \n
      \n
    • \n

      whose dimensionCount is equal to the Rank of the\nOpTypeTensorARM of the OpGraphConstantARM

      \n
    • \n
    • \n

      whose pDimensions array elements are individually and in order\nequal to the elements of the array that defines the Shape of the\nOpTypeTensorARM of the OpGraphConstantARM

      \n
    • \n
    • \n

      whose format is compatible with the\nElementType of the OpTypeTensorARM of the\nOpGraphConstantARM

      \n
    • \n
    \n
    \n
  • \n
\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-pNext-09923", + "text": "For each data graph pipeline created with a VkDataGraphPipelineShaderModuleCreateInfoARM structure included in the pNext chain of VkDataGraphPipelineCreateInfoARM, one and only one VkDataGraphPipelineResourceInfoARM structure that satisfies all the following constraints must be present in VkDataGraphPipelineCreateInfoARM::pResourceInfos for each OpVariable with a OpTypeTensorARM type that is part of the Interface of the OpGraphEntryPointARM the pipeline is being created for:
\n
    \n
  • \n

    its descriptorSet member must match the DescriptorSet\ndecoration applied to the OpVariable

    \n
  • \n
  • \n

    its binding member must match the Binding decoration\napplied to the OpVariable

    \n
  • \n
  • \n

    its arrayElement member must be zero if OpVariable is not a\nOpTypeArray or if OpVariable is a OpTypeArray of\nOpTypeTensorARM with Shape present

    \n
  • \n
  • \n

    its pNext chain must include a VkTensorDescriptionARM\nstructure

    \n
    \n
      \n
    • \n

      whose dimensionCount is equal to the Rank of the\nOpTypeTensorARM of the OpVariable or its elements

      \n
    • \n
    • \n

      whose pDimensions array elements are individually and in order\nequal to the elements of the array that defines the Shape of the\nOpTypeTensorARM of the OpVariable or its elements

      \n
    • \n
    • \n

      whose format is compatible with the\nElementType of the OpTypeTensorARM of the OpVariable

      \n
    • \n
    \n
    \n
  • \n
\n
", + "page": "appendices/spirvenv.html" + }, + { + "vuid": "VUID-RuntimeSpirv-None-10834", + "text": "Buffer indexing calculations must not wrap 32 bits", + "page": "appendices/spirvenv.html" + } + ] + }, + "vkCreateCuFunctionNVX": { + "core": [ + { + "vuid": "VUID-vkCreateCuFunctionNVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuFunctionNVX-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkCuFunctionCreateInfoNVX structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuFunctionNVX-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuFunctionNVX-pFunction-parameter", + "text": "pFunction must be a valid pointer to a VkCuFunctionNVX handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuFunctionNVX-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "appendices/extensions.html" + } + ] + }, + "VkCuFunctionCreateInfoNVX": { + "core": [ + { + "vuid": "VUID-VkCuFunctionCreateInfoNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuFunctionCreateInfoNVX-pNext-pNext", + "text": "pNext must be NULL", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuFunctionCreateInfoNVX-module-parameter", + "text": "module must be a valid VkCuModuleNVX handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuFunctionCreateInfoNVX-pName-parameter", + "text": "pName must be a null-terminated UTF-8 string", + "page": "appendices/extensions.html" + } + ] + }, + "vkDestroyCuFunctionNVX": { + "core": [ + { + "vuid": "VUID-vkDestroyCuFunctionNVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkDestroyCuFunctionNVX-function-parameter", + "text": "function must be a valid VkCuFunctionNVX handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkDestroyCuFunctionNVX-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkDestroyCuFunctionNVX-function-parent", + "text": "function must have been created, allocated, or retrieved from device", + "page": "appendices/extensions.html" + } + ] + }, + "vkCreateCuModuleNVX": { + "core": [ + { + "vuid": "VUID-vkCreateCuModuleNVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuModuleNVX-pCreateInfo-parameter", + "text": "pCreateInfo must be a valid pointer to a valid VkCuModuleCreateInfoNVX structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuModuleNVX-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuModuleNVX-pModule-parameter", + "text": "pModule must be a valid pointer to a VkCuModuleNVX handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCreateCuModuleNVX-device-queuecount", + "text": "The device must have been created with at least 1 queue", + "page": "appendices/extensions.html" + } + ] + }, + "VkCuModuleCreateInfoNVX": { + "core": [ + { + "vuid": "VUID-VkCuModuleCreateInfoNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuModuleCreateInfoNVX-pNext-pNext", + "text": "pNext must be NULL or a pointer to a valid instance of VkCuModuleTexturingModeCreateInfoNVX", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuModuleCreateInfoNVX-sType-unique", + "text": "The sType value of each structure in the pNext chain must be unique", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuModuleCreateInfoNVX-pData-parameter", + "text": "If dataSize is not 0, pData must be a valid pointer to an array of dataSize bytes", + "page": "appendices/extensions.html" + } + ] + }, + "VkCuModuleTexturingModeCreateInfoNVX": { + "core": [ + { + "vuid": "VUID-VkCuModuleTexturingModeCreateInfoNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CU_MODULE_TEXTURING_MODE_CREATE_INFO_NVX", + "page": "appendices/extensions.html" + } + ] + }, + "vkDestroyCuModuleNVX": { + "core": [ + { + "vuid": "VUID-vkDestroyCuModuleNVX-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkDestroyCuModuleNVX-module-parameter", + "text": "module must be a valid VkCuModuleNVX handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkDestroyCuModuleNVX-pAllocator-parameter", + "text": "If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkDestroyCuModuleNVX-module-parent", + "text": "module must have been created, allocated, or retrieved from device", + "page": "appendices/extensions.html" + } + ] + }, + "vkCmdCuLaunchKernelNVX": { + "core": [ + { + "vuid": "VUID-vkCmdCuLaunchKernelNVX-commandBuffer-parameter", + "text": "commandBuffer must be a valid VkCommandBuffer handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCmdCuLaunchKernelNVX-pLaunchInfo-parameter", + "text": "pLaunchInfo must be a valid pointer to a valid VkCuLaunchInfoNVX structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCmdCuLaunchKernelNVX-commandBuffer-recording", + "text": "commandBuffer must be in the recording state", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCmdCuLaunchKernelNVX-commandBuffer-cmdpool", + "text": "The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkCmdCuLaunchKernelNVX-videocoding", + "text": "This command must only be called outside of a video coding scope", + "page": "appendices/extensions.html" + } + ] + }, + "VkCuLaunchInfoNVX": { + "core": [ + { + "vuid": "VUID-VkCuLaunchInfoNVX-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuLaunchInfoNVX-pNext-pNext", + "text": "pNext must be NULL", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuLaunchInfoNVX-function-parameter", + "text": "function must be a valid VkCuFunctionNVX handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuLaunchInfoNVX-pParams-parameter", + "text": "If paramCount is not 0, pParams must be a valid pointer to an array of paramCount bytes", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkCuLaunchInfoNVX-pExtras-parameter", + "text": "If extraCount is not 0, pExtras must be a valid pointer to an array of extraCount bytes", + "page": "appendices/extensions.html" + } + ] + }, + "VkPhysicalDeviceAmigoProfilingFeaturesSEC": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceAmigoProfilingFeaturesSEC-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC", + "page": "appendices/extensions.html" + } + ] + }, + "VkAmigoProfilingSubmitInfoSEC": { + "core": [ + { + "vuid": "VUID-VkAmigoProfilingSubmitInfoSEC-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_AMIGO_PROFILING_SUBMIT_INFO_SEC", + "page": "appendices/extensions.html" + } + ] + }, + "VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC": { + "core": [ + { + "vuid": "VUID-VkPhysicalDevicePipelineCacheIncrementalModeFeaturesSEC-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC", + "page": "appendices/extensions.html" + } + ] + }, + "vkGetDescriptorSetLayoutHostMappingInfoVALVE": { + "core": [ + { + "vuid": "VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pBindingReference-parameter", + "text": "pBindingReference must be a valid pointer to a valid VkDescriptorSetBindingReferenceVALVE structure", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-pHostMapping-parameter", + "text": "pHostMapping must be a valid pointer to a VkDescriptorSetLayoutHostMappingInfoVALVE structure", + "page": "appendices/extensions.html" + } + ] + }, + "vkGetDescriptorSetHostMappingVALVE": { + "core": [ + { + "vuid": "VUID-vkGetDescriptorSetHostMappingVALVE-device-parameter", + "text": "device must be a valid VkDevice handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetHostMappingVALVE-descriptorSet-parameter", + "text": "descriptorSet must be a valid VkDescriptorSet handle", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetHostMappingVALVE-ppData-parameter", + "text": "ppData must be a valid pointer to a pointer value", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-vkGetDescriptorSetHostMappingVALVE-descriptorSet-parent", + "text": "descriptorSet must have been created, allocated, or retrieved from device", + "page": "appendices/extensions.html" + } + ] + }, + "VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE": { + "core": [ + { + "vuid": "VUID-VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE", + "page": "appendices/extensions.html" + } + ] + }, + "VkDescriptorSetBindingReferenceVALVE": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetBindingReferenceVALVE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkDescriptorSetBindingReferenceVALVE-pNext-pNext", + "text": "pNext must be NULL", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkDescriptorSetBindingReferenceVALVE-descriptorSetLayout-parameter", + "text": "descriptorSetLayout must be a valid VkDescriptorSetLayout handle", + "page": "appendices/extensions.html" + } + ] + }, + "VkDescriptorSetLayoutHostMappingInfoVALVE": { + "core": [ + { + "vuid": "VUID-VkDescriptorSetLayoutHostMappingInfoVALVE-sType-sType", + "text": "sType must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE", + "page": "appendices/extensions.html" + }, + { + "vuid": "VUID-VkDescriptorSetLayoutHostMappingInfoVALVE-pNext-pNext", + "text": "pNext must be NULL", + "page": "appendices/extensions.html" + } + ] + } + } +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-headers/source/registry/video.xml b/local/recipes/libs/vulkan-headers/source/registry/video.xml new file mode 100644 index 0000000000..012bfd04af --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/video.xml @@ -0,0 +1,2019 @@ + + + +Copyright 2021-2025 The Khronos Group Inc. +SPDX-License-Identifier: Apache-2.0 OR MIT + + + +This file, video.xml, provides the machine readable definition of data +structures and enumerations that are related to the externally-provided +video compression standards. + +The current public version of video.xml is maintained in the default branch +(currently named main) of the Khronos Vulkan GitHub project. + + + + + #if !defined(VK_NO_STDINT_H) + #include <stdint.h> +#endif + + + + + + + + #include "vulkan_video_codecs_common.h" + #include "vulkan_video_codec_h264std.h" + #include "vulkan_video_codec_h265std.h" + #include "vulkan_video_codec_vp9std.h" + #include "vulkan_video_codec_av1std.h" + + + #define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_H264_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_H265_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + + + + + + + + + + + + + + + + + + + uint32_t aspect_ratio_info_present_flag : 1 + uint32_t overscan_info_present_flag : 1 + uint32_t overscan_appropriate_flag : 1 + uint32_t video_signal_type_present_flag : 1 + uint32_t video_full_range_flag : 1 + uint32_t color_description_present_flag : 1colour_description_present_flag + uint32_t chroma_loc_info_present_flag : 1 + uint32_t timing_info_present_flag : 1 + uint32_t fixed_frame_rate_flag : 1 + uint32_t bitstream_restriction_flag : 1 + uint32_t nal_hrd_parameters_present_flag : 1 + uint32_t vcl_hrd_parameters_present_flag : 1 + + + uint8_t cpb_cnt_minus1 + uint8_t bit_rate_scale + uint8_t cpb_size_scale + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint32_t bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]cpb_cnt_minus1 number of valid elements + uint32_t cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]cpb_cnt_minus1 number of valid elements + uint8_t cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE]cpb_cnt_minus1 number of valid elements + uint32_t initial_cpb_removal_delay_length_minus1 + uint32_t cpb_removal_delay_length_minus1 + uint32_t dpb_output_delay_length_minus1 + uint32_t time_offset_length + + + StdVideoH264SpsVuiFlags flags + StdVideoH264AspectRatioIdc aspect_ratio_idc + uint16_t sar_width + uint16_t sar_height + uint8_t video_format + uint8_t colour_primaries + uint8_t transfer_characteristics + uint8_t matrix_coefficients + uint32_t num_units_in_tick + uint32_t time_scale + uint8_t max_num_reorder_frames + uint8_t max_dec_frame_buffering + uint8_t chroma_sample_loc_type_top_field + uint8_t chroma_sample_loc_type_bottom_field + uint32_t reserved1Reserved for future use and must be initialized with 0. + const StdVideoH264HrdParameters* pHrdParametersmust be a valid ptr to hrd_parameters, if nal_hrd_parameters_present_flag or vcl_hrd_parameters_present_flag are set + + + uint32_t constraint_set0_flag : 1 + uint32_t constraint_set1_flag : 1 + uint32_t constraint_set2_flag : 1 + uint32_t constraint_set3_flag : 1 + uint32_t constraint_set4_flag : 1 + uint32_t constraint_set5_flag : 1 + uint32_t direct_8x8_inference_flag : 1 + uint32_t mb_adaptive_frame_field_flag : 1 + uint32_t frame_mbs_only_flag : 1 + uint32_t delta_pic_order_always_zero_flag : 1 + uint32_t separate_colour_plane_flag : 1 + uint32_t gaps_in_frame_num_value_allowed_flag : 1 + uint32_t qpprime_y_zero_transform_bypass_flag : 1 + uint32_t frame_cropping_flag : 1 + uint32_t seq_scaling_matrix_present_flag : 1 + uint32_t vui_parameters_present_flag : 1 + + + + scaling_list_present_mask has one bit for each + seq_scaling_list_present_flag[i] for SPS OR + pic_scaling_list_present_flag[i] for PPS, + bit 0 - 5 are for each entry of ScalingList4x4 + bit 6 - 11 are for each entry plus 6 for ScalingList8x8 + + uint16_t scaling_list_present_mask + + use_default_scaling_matrix_mask has one bit for each + UseDefaultScalingMatrix4x4Flag[ i ] and + UseDefaultScalingMatrix8x8Flag[ i - 6 ] for SPS OR PPS + bit 0 - 5 are for each entry of ScalingList4x4 + bit 6 - 11 are for each entry plus 6 for ScalingList8x8 + + uint16_t use_default_scaling_matrix_mask + uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS] + uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS] + + + StdVideoH264SpsFlags flags + StdVideoH264ProfileIdc profile_idc + StdVideoH264LevelIdc level_idc + StdVideoH264ChromaFormatIdc chroma_format_idc + uint8_t seq_parameter_set_id + uint8_t bit_depth_luma_minus8 + uint8_t bit_depth_chroma_minus8 + uint8_t log2_max_frame_num_minus4 + StdVideoH264PocType pic_order_cnt_type + int32_t offset_for_non_ref_pic + int32_t offset_for_top_to_bottom_field + uint8_t log2_max_pic_order_cnt_lsb_minus4 + uint8_t num_ref_frames_in_pic_order_cnt_cycle + uint8_t max_num_ref_frames + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint32_t pic_width_in_mbs_minus1 + uint32_t pic_height_in_map_units_minus1 + uint32_t frame_crop_left_offset + uint32_t frame_crop_right_offset + uint32_t frame_crop_top_offset + uint32_t frame_crop_bottom_offset + uint32_t reserved2Reserved for future use and must be initialized with 0. + + pOffsetForRefFrame is a pointer representing the offset_for_ref_frame array with num_ref_frames_in_pic_order_cnt_cycle number of elements. + If pOffsetForRefFrame has nullptr value, then num_ref_frames_in_pic_order_cnt_cycle must also be "0". + + const int32_t* pOffsetForRefFrame + const StdVideoH264ScalingLists* pScalingListsMust be a valid pointer if seq_scaling_matrix_present_flag is set + const StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVuiMust be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set + + + uint32_t transform_8x8_mode_flag : 1 + uint32_t redundant_pic_cnt_present_flag : 1 + uint32_t constrained_intra_pred_flag : 1 + uint32_t deblocking_filter_control_present_flag : 1 + uint32_t weighted_pred_flag : 1 + uint32_t bottom_field_pic_order_in_frame_present_flag : 1 + uint32_t entropy_coding_mode_flag : 1 + uint32_t pic_scaling_matrix_present_flag : 1 + + + StdVideoH264PpsFlags flags + uint8_t seq_parameter_set_id + uint8_t pic_parameter_set_id + uint8_t num_ref_idx_l0_default_active_minus1 + uint8_t num_ref_idx_l1_default_active_minus1 + StdVideoH264WeightedBipredIdc weighted_bipred_idc + int8_t pic_init_qp_minus26 + int8_t pic_init_qs_minus26 + int8_t chroma_qp_index_offset + int8_t second_chroma_qp_index_offset + const StdVideoH264ScalingLists* pScalingListsMust be a valid pointer if StdVideoH264PpsFlags::pic_scaling_matrix_present_flag is set. + + + + + + + + uint32_t field_pic_flag : 1Is field picture + uint32_t is_intra : 1Is intra picture + uint32_t IdrPicFlag : 1instantaneous decoding refresh (IDR) picture + uint32_t bottom_field_flag : 1bottom (true) or top (false) field if field_pic_flag is set. + uint32_t is_reference : 1This only applies to picture info, and not to the DPB lists. + uint32_t complementary_field_pair : 1complementary field pair, complementary non-reference field pair, complementary reference field pair + + + StdVideoDecodeH264PictureInfoFlags flags + uint8_t seq_parameter_set_idSelecting SPS id from the Sequence Parameters Set + uint8_t pic_parameter_set_idSelecting PPS id from the Picture Parameters Set + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint8_t reserved2Reserved for future use and must be initialized with 0. + uint16_t frame_num7.4.3 Slice header semantics + uint16_t idr_pic_id7.4.3 Slice header semantics + + PicOrderCnt is based on TopFieldOrderCnt and BottomFieldOrderCnt. See 8.2.1 Decoding process for picture order count type 0 - 2 + + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]TopFieldOrderCnt and BottomFieldOrderCnt fields. + + + uint32_t top_field_flag : 1Reference is used for top field reference. + uint32_t bottom_field_flag : 1Reference is used for bottom field reference. + uint32_t used_for_long_term_reference : 1A picture that is marked as "used for long-term reference", derived binary value from clause 8.2.5.1 Sequence of operations for decoded reference picture marking process + uint32_t is_non_existing : 1Must be handled in accordance with 8.2.5.2: Decoding process for gaps in frame_num + + + StdVideoDecodeH264ReferenceInfoFlags flags + + FrameNum = used_for_long_term_reference ? long_term_frame_idx : frame_num + + uint16_t FrameNum7.4.3.3 Decoded reference picture marking semantics + uint16_t reservedfor structure members 32-bit packing/alignment + int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE]TopFieldOrderCnt and BottomFieldOrderCnt fields. + + + + + uint32_t luma_weight_l0_flageach bit n represents the nth entry in reference list l0, n <= num_ref_idx_l0_active_minus1 + uint32_t chroma_weight_l0_flageach bit n represents the nth entry in reference list l0, n <= num_ref_idx_l0_active_minus1 + uint32_t luma_weight_l1_flageach bit n represents the nth entry in reference list l1, n <= num_ref_idx_l1_active_minus1 + uint32_t chroma_weight_l1_flageach bit n represents the nth entry in reference list l1, n <= num_ref_idx_l1_active_minus1 + + + + + StdVideoEncodeH264WeightTable corresponds to the values produced by pred_weight_table() for the h.264 specification. + For details, refer to weighted_pred_flag, weighted_bipred_idc, pre_pred_weight_table_src and pred_weight_table(). + + StdVideoEncodeH264WeightTableFlags flags + uint8_t luma_log2_weight_denom + uint8_t chroma_log2_weight_denom + int8_t luma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]valid entry range is [0, num_ref_idx_l0_active_minus1] + int8_t luma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF]valid entry range is [0, num_ref_idx_l0_active_minus1] + int8_t chroma_weight_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr + int8_t chroma_offset_l0[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr + int8_t luma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]valid entry range is [0, num_ref_idx_l1_active_minus1] + int8_t luma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF]valid entry range is [0, num_ref_idx_l1_active_minus1] + int8_t chroma_weight_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr + int8_t chroma_offset_l1[STD_VIDEO_H264_MAX_NUM_LIST_REF][STD_VIDEO_H264_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr + + + + uint32_t direct_spatial_mv_pred_flag : 1 + uint32_t num_ref_idx_active_override_flag : 1 + uint32_t reserved : 30 + + + uint32_t IdrPicFlag : 1 + uint32_t is_reference : 1A reference picture, i.e. a picture with nal_ref_idc not equal to 0, as defined in clause 3.136 + uint32_t no_output_of_prior_pics_flag : 1 + uint32_t long_term_reference_flag : 1 + uint32_t adaptive_ref_pic_marking_mode_flag : 1 + uint32_t reserved : 27 + + + uint32_t used_for_long_term_reference : 1A picture that is marked as "used for long-term reference", derived binary value from clause 8.2.5.1 Sequence of operations for decoded reference picture marking process + uint32_t reserved : 31 + + + uint32_t ref_pic_list_modification_flag_l0 : 1 + uint32_t ref_pic_list_modification_flag_l1 : 1 + uint32_t reserved : 30 + + + StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc + uint16_t abs_diff_pic_num_minus1 + uint16_t long_term_pic_num + + + StdVideoH264MemMgmtControlOp memory_management_control_operation + uint16_t difference_of_pic_nums_minus1 + uint16_t long_term_pic_num + uint16_t long_term_frame_idx + uint16_t max_long_term_frame_idx_plus1 + + + StdVideoEncodeH264ReferenceListsInfoFlags flags + uint8_t num_ref_idx_l0_active_minus1 + uint8_t num_ref_idx_l1_active_minus1 + uint8_t RefPicList0[STD_VIDEO_H264_MAX_NUM_LIST_REF]slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H264_NO_REFERENCE_PICTURE + uint8_t RefPicList1[STD_VIDEO_H264_MAX_NUM_LIST_REF]slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H264_NO_REFERENCE_PICTURE + uint8_t refList0ModOpCount + uint8_t refList1ModOpCount + uint8_t refPicMarkingOpCount + uint8_t reserved1[7]Reserved for future use and must be initialized with 0. + const StdVideoEncodeH264RefListModEntry* pRefList0ModOperationsMust be a valid pointer to an array with size refList0ModOpCount if ref_pic_list_modification_flag_l0 is set and contains the RefList0 modification parameters as defined in section 7.4.3.1 + const StdVideoEncodeH264RefListModEntry* pRefList1ModOperationsMust be a valid pointer to an array with size refList1ModOpCount if ref_pic_list_modification_flag_l1 is set and contains the RefList1 modification parameters as defined in section 7.4.3.1 + const StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperationsMust be a valid pointer to an array with size refPicMarkingOpCount and contains the reference picture markings as defined in section 7.4.3.3 + + + StdVideoEncodeH264PictureInfoFlags flags + uint8_t seq_parameter_set_idSelecting SPS id from the Sequence Parameters Set + uint8_t pic_parameter_set_idSelecting PPS from the Picture Parameters for all StdVideoEncodeH264SliceHeader(s) + uint16_t idr_pic_id + StdVideoH264PictureType primary_pic_type + uint32_t frame_num + int32_t PicOrderCntPicture order count, as defined in 8.2 + uint8_t temporal_idTemporal identifier of the picture, as defined in G.7.3.1.1 / G.7.4.1.1 + uint8_t reserved1[3]Reserved for future use and must be initialized with 0. + const StdVideoEncodeH264ReferenceListsInfo* pRefLists + + + StdVideoEncodeH264ReferenceInfoFlags flags + StdVideoH264PictureType primary_pic_type + uint32_t FrameNumFrame number, as defined in 8.2 + int32_t PicOrderCntPicture order count, as defined in 8.2 + uint16_t long_term_pic_num + uint16_t long_term_frame_idx + uint8_t temporal_idTemporal identifier of the picture, as defined in G.7.3.1.1 / G.7.4.1.1 + + + StdVideoEncodeH264SliceHeaderFlags flags + uint32_t first_mb_in_slice + StdVideoH264SliceType slice_type + int8_t slice_alpha_c0_offset_div2 + int8_t slice_beta_offset_div2 + int8_t slice_qp_delta + uint8_t reserved1Reserved for future use and must be initialized with 0. + StdVideoH264CabacInitIdc cabac_init_idc + StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc + const StdVideoEncodeH264WeightTable* pWeightTable + + + + + + + + + + + + + uint32_t general_tier_flag : 1 + uint32_t general_progressive_source_flag : 1 + uint32_t general_interlaced_source_flag : 1 + uint32_t general_non_packed_constraint_flag : 1 + uint32_t general_frame_only_constraint_flag : 1 + + + StdVideoH265ProfileTierLevelFlags flags + StdVideoH265ProfileIdc general_profile_idc + StdVideoH265LevelIdc general_level_idc + + + uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]represents sps_max_latency_increase_plus1 or vps_max_latency_increase_plus1 + uint8_t max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]represents sps_max_dec_pic_buffering_minus1 or vps_max_dec_pic_buffering_minus1 + uint8_t max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE]represents sps_max_num_reorder_pics or vps_max_num_reorder_pics + + + uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE] + uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE] + uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE] + uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE] + uint32_t cbr_flageach bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer + + + uint32_t nal_hrd_parameters_present_flag : 1 + uint32_t vcl_hrd_parameters_present_flag : 1 + uint32_t sub_pic_hrd_params_present_flag : 1 + uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1 + uint32_t fixed_pic_rate_general_flag : 8each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1 + uint32_t fixed_pic_rate_within_cvs_flag : 8each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1 + uint32_t low_delay_hrd_flag : 8each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1 + + + StdVideoH265HrdFlags flags + uint8_t tick_divisor_minus2 + uint8_t du_cpb_removal_delay_increment_length_minus1 + uint8_t dpb_output_delay_du_length_minus1 + uint8_t bit_rate_scale + uint8_t cpb_size_scale + uint8_t cpb_size_du_scale + uint8_t initial_cpb_removal_delay_length_minus1 + uint8_t au_cpb_removal_delay_length_minus1 + uint8_t dpb_output_delay_length_minus1 + uint8_t cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE] + uint16_t elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_LIST_SIZE] + uint16_t reserved[3]Reserved for future use and must be initialized with 0. + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNalif flags.nal_hrd_parameters_present_flag is set, then this must be a ptr to an array of StdVideoH265SubLayerHrdParameters with a size specified by sps_max_sub_layers_minus1 + 1 or vps_max_sub_layers_minus1 + 1, depending on whether the HRD parameters are part of the SPS or VPS, respectively. + const StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVclif flags.vcl_hrd_parameters_present_flag is set, then this must be a ptr to an array of StdVideoH265SubLayerHrdParameters with a size specified by sps_max_sub_layers_minus1 + 1 or vps_max_sub_layers_minus1 + 1, depending on whether the HRD parameters are part of the SPS or VPS, respectively. + + + uint32_t vps_temporal_id_nesting_flag : 1 + uint32_t vps_sub_layer_ordering_info_present_flag : 1 + uint32_t vps_timing_info_present_flag : 1 + uint32_t vps_poc_proportional_to_timing_flag : 1 + + + StdVideoH265VpsFlags flags + uint8_t vps_video_parameter_set_id + uint8_t vps_max_sub_layers_minus1 + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint8_t reserved2Reserved for future use and must be initialized with 0. + uint32_t vps_num_units_in_tick + uint32_t vps_time_scale + uint32_t vps_num_ticks_poc_diff_one_minus1 + uint32_t reserved3Reserved for future use and must be initialized with 0. + const StdVideoH265DecPicBufMgr* pDecPicBufMgr + const StdVideoH265HrdParameters* pHrdParameters + const StdVideoH265ProfileTierLevel* pProfileTierLevel + + + uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS]ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0) + uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS]ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1) + uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS]ScalingList[ 2 ][ Matri]xID ][ i ] (sizeID = 2) + uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS]ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3) + uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS]scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2 + uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS]scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3 + + + uint32_t inter_ref_pic_set_prediction_flag : 1 + uint32_t delta_rps_sign : 1 + + + StdVideoH265ShortTermRefPicSetFlags flags + uint32_t delta_idx_minus1 + uint16_t use_delta_flageach bit represents a use_delta_flag[j] syntax + uint16_t abs_delta_rps_minus1 + uint16_t used_by_curr_pic_flageach bit represents a used_by_curr_pic_flag[j] syntax + uint16_t used_by_curr_pic_s0_flageach bit represents a used_by_curr_pic_s0_flag[i] syntax + uint16_t used_by_curr_pic_s1_flageach bit represents a used_by_curr_pic_s1_flag[i] syntax + uint16_t reserved1Reserved for future use and must be initialized with 0. + uint8_t reserved2Reserved for future use and must be initialized with 0. + uint8_t reserved3Reserved for future use and must be initialized with 0. + uint8_t num_negative_pics + uint8_t num_positive_pics + uint16_t delta_poc_s0_minus1[STD_VIDEO_H265_MAX_DPB_SIZE] + uint16_t delta_poc_s1_minus1[STD_VIDEO_H265_MAX_DPB_SIZE] + + + uint32_t used_by_curr_pic_lt_sps_flageach bit represents a used_by_curr_pic_lt_sps_flag[i] syntax + uint32_t lt_ref_pic_poc_lsb_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS] + + + uint32_t aspect_ratio_info_present_flag : 1 + uint32_t overscan_info_present_flag : 1 + uint32_t overscan_appropriate_flag : 1 + uint32_t video_signal_type_present_flag : 1 + uint32_t video_full_range_flag : 1 + uint32_t colour_description_present_flag : 1 + uint32_t chroma_loc_info_present_flag : 1 + uint32_t neutral_chroma_indication_flag : 1 + uint32_t field_seq_flag : 1 + uint32_t frame_field_info_present_flag : 1 + uint32_t default_display_window_flag : 1 + uint32_t vui_timing_info_present_flag : 1 + uint32_t vui_poc_proportional_to_timing_flag : 1 + uint32_t vui_hrd_parameters_present_flag : 1 + uint32_t bitstream_restriction_flag : 1 + uint32_t tiles_fixed_structure_flag : 1 + uint32_t motion_vectors_over_pic_boundaries_flag : 1 + uint32_t restricted_ref_pic_lists_flag : 1 + + + StdVideoH265SpsVuiFlags flags + StdVideoH265AspectRatioIdc aspect_ratio_idc + uint16_t sar_width + uint16_t sar_height + uint8_t video_format + uint8_t colour_primaries + uint8_t transfer_characteristics + uint8_t matrix_coeffs + uint8_t chroma_sample_loc_type_top_field + uint8_t chroma_sample_loc_type_bottom_field + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint8_t reserved2Reserved for future use and must be initialized with 0. + uint16_t def_disp_win_left_offset + uint16_t def_disp_win_right_offset + uint16_t def_disp_win_top_offset + uint16_t def_disp_win_bottom_offset + uint32_t vui_num_units_in_tick + uint32_t vui_time_scale + uint32_t vui_num_ticks_poc_diff_one_minus1 + uint16_t min_spatial_segmentation_idc + uint16_t reserved3Reserved for future use and must be initialized with 0. + uint8_t max_bytes_per_pic_denom + uint8_t max_bits_per_min_cu_denom + uint8_t log2_max_mv_length_horizontal + uint8_t log2_max_mv_length_vertical + const StdVideoH265HrdParameters* pHrdParameters + + + uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE] + + + uint32_t sps_temporal_id_nesting_flag : 1 + uint32_t separate_colour_plane_flag : 1 + uint32_t conformance_window_flag : 1 + uint32_t sps_sub_layer_ordering_info_present_flag : 1 + uint32_t scaling_list_enabled_flag : 1 + uint32_t sps_scaling_list_data_present_flag : 1 + uint32_t amp_enabled_flag : 1 + uint32_t sample_adaptive_offset_enabled_flag : 1 + uint32_t pcm_enabled_flag : 1 + uint32_t pcm_loop_filter_disabled_flag : 1 + uint32_t long_term_ref_pics_present_flag : 1 + uint32_t sps_temporal_mvp_enabled_flag : 1 + uint32_t strong_intra_smoothing_enabled_flag : 1 + uint32_t vui_parameters_present_flag : 1 + uint32_t sps_extension_present_flag : 1 + uint32_t sps_range_extension_flag : 1 + + extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set + + uint32_t transform_skip_rotation_enabled_flag : 1 + uint32_t transform_skip_context_enabled_flag : 1 + uint32_t implicit_rdpcm_enabled_flag : 1 + uint32_t explicit_rdpcm_enabled_flag : 1 + uint32_t extended_precision_processing_flag : 1 + uint32_t intra_smoothing_disabled_flag : 1 + uint32_t high_precision_offsets_enabled_flag : 1 + uint32_t persistent_rice_adaptation_enabled_flag : 1 + uint32_t cabac_bypass_alignment_enabled_flag : 1 + + extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set + + uint32_t sps_scc_extension_flag : 1 + uint32_t sps_curr_pic_ref_enabled_flag : 1 + uint32_t palette_mode_enabled_flag : 1 + uint32_t sps_palette_predictor_initializers_present_flag : 1 + uint32_t intra_boundary_filtering_disabled_flag : 1 + + + StdVideoH265SpsFlags flags + StdVideoH265ChromaFormatIdc chroma_format_idc + uint32_t pic_width_in_luma_samples + uint32_t pic_height_in_luma_samples + uint8_t sps_video_parameter_set_id + uint8_t sps_max_sub_layers_minus1 + uint8_t sps_seq_parameter_set_id + uint8_t bit_depth_luma_minus8 + uint8_t bit_depth_chroma_minus8 + uint8_t log2_max_pic_order_cnt_lsb_minus4 + uint8_t log2_min_luma_coding_block_size_minus3 + uint8_t log2_diff_max_min_luma_coding_block_size + uint8_t log2_min_luma_transform_block_size_minus2 + uint8_t log2_diff_max_min_luma_transform_block_size + uint8_t max_transform_hierarchy_depth_inter + uint8_t max_transform_hierarchy_depth_intra + uint8_t num_short_term_ref_pic_sets + uint8_t num_long_term_ref_pics_sps + uint8_t pcm_sample_bit_depth_luma_minus1 + uint8_t pcm_sample_bit_depth_chroma_minus1 + uint8_t log2_min_pcm_luma_coding_block_size_minus3 + uint8_t log2_diff_max_min_pcm_luma_coding_block_size + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint8_t reserved2Reserved for future use and must be initialized with 0. + + Start extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set + + uint8_t palette_max_size + uint8_t delta_palette_max_predictor_size + uint8_t motion_vector_resolution_control_idc + uint8_t sps_num_palette_predictor_initializers_minus1 + + End extension SPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set + + uint32_t conf_win_left_offset + uint32_t conf_win_right_offset + uint32_t conf_win_top_offset + uint32_t conf_win_bottom_offset + const StdVideoH265ProfileTierLevel* pProfileTierLevel + const StdVideoH265DecPicBufMgr* pDecPicBufMgr + const StdVideoH265ScalingLists* pScalingListsMust be a valid pointer if sps_scaling_list_data_present_flag is set + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSetMust be a valid pointer to an array with size num_short_term_ref_pic_sets if num_short_term_ref_pic_sets is not 0. + const StdVideoH265LongTermRefPicsSps* pLongTermRefPicsSpsMust be a valid pointer if long_term_ref_pics_present_flag is set + const StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVuiMust be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntriesMust be a valid pointer if sps_palette_predictor_initializer_present_flag is set + + + uint32_t dependent_slice_segments_enabled_flag : 1 + uint32_t output_flag_present_flag : 1 + uint32_t sign_data_hiding_enabled_flag : 1 + uint32_t cabac_init_present_flag : 1 + uint32_t constrained_intra_pred_flag : 1 + uint32_t transform_skip_enabled_flag : 1 + uint32_t cu_qp_delta_enabled_flag : 1 + uint32_t pps_slice_chroma_qp_offsets_present_flag : 1 + uint32_t weighted_pred_flag : 1 + uint32_t weighted_bipred_flag : 1 + uint32_t transquant_bypass_enabled_flag : 1 + uint32_t tiles_enabled_flag : 1 + uint32_t entropy_coding_sync_enabled_flag : 1 + uint32_t uniform_spacing_flag : 1 + uint32_t loop_filter_across_tiles_enabled_flag : 1 + uint32_t pps_loop_filter_across_slices_enabled_flag : 1 + uint32_t deblocking_filter_control_present_flag : 1 + uint32_t deblocking_filter_override_enabled_flag : 1 + uint32_t pps_deblocking_filter_disabled_flag : 1 + uint32_t pps_scaling_list_data_present_flag : 1 + uint32_t lists_modification_present_flag : 1 + uint32_t slice_segment_header_extension_present_flag : 1 + uint32_t pps_extension_present_flag : 1 + + extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set + + uint32_t cross_component_prediction_enabled_flag : 1 + uint32_t chroma_qp_offset_list_enabled_flag : 1 + + extension PPS flags, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set + + uint32_t pps_curr_pic_ref_enabled_flag : 1 + uint32_t residual_adaptive_colour_transform_enabled_flag : 1 + uint32_t pps_slice_act_qp_offsets_present_flag : 1 + uint32_t pps_palette_predictor_initializers_present_flag : 1 + uint32_t monochrome_palette_flag : 1 + uint32_t pps_range_extension_flag : 1 + + + StdVideoH265PpsFlags flags + uint8_t pps_pic_parameter_set_id + uint8_t pps_seq_parameter_set_id + uint8_t sps_video_parameter_set_id + uint8_t num_extra_slice_header_bits + uint8_t num_ref_idx_l0_default_active_minus1 + uint8_t num_ref_idx_l1_default_active_minus1 + int8_t init_qp_minus26 + uint8_t diff_cu_qp_delta_depth + int8_t pps_cb_qp_offset + int8_t pps_cr_qp_offset + int8_t pps_beta_offset_div2 + int8_t pps_tc_offset_div2 + uint8_t log2_parallel_merge_level_minus2 + + extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS is set + + uint8_t log2_max_transform_skip_block_size_minus2 + uint8_t diff_cu_chroma_qp_offset_depth + uint8_t chroma_qp_offset_list_len_minus1 + int8_t cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE] + int8_t cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE] + uint8_t log2_sao_offset_scale_luma + uint8_t log2_sao_offset_scale_chroma + + extension PPS, valid when STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS is set + + int8_t pps_act_y_qp_offset_plus5 + int8_t pps_act_cb_qp_offset_plus5 + int8_t pps_act_cr_qp_offset_plus3 + uint8_t pps_num_palette_predictor_initializers + uint8_t luma_bit_depth_entry_minus8 + uint8_t chroma_bit_depth_entry_minus8 + uint8_t num_tile_columns_minus1 + uint8_t num_tile_rows_minus1 + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint8_t reserved2Reserved for future use and must be initialized with 0. + uint16_t column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE] + uint16_t row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE] + uint32_t reserved3Reserved for future use and must be initialized with 0. + const StdVideoH265ScalingLists* pScalingListsMust be a valid pointer if pps_scaling_list_data_present_flag is set + const StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntriesMust be a valid pointer if pps_palette_predictor_initializer_present_flag is set + + + + + uint32_t IrapPicFlag : 1 + uint32_t IdrPicFlag : 1 + uint32_t IsReference : 1 + uint32_t short_term_ref_pic_set_sps_flag : 1 + + + StdVideoDecodeH265PictureInfoFlags flags + uint8_t sps_video_parameter_set_idSelecting VPS id from the Video Parameters Set + uint8_t pps_seq_parameter_set_idSelecting SPS id from the Sequence Parameters Set + uint8_t pps_pic_parameter_set_idSelecting PPS id from the Picture Parameters Set + uint8_t NumDeltaPocsOfRefRpsIdxNumDeltaPocs[ RefRpsIdx ] when short_term_ref_pic_set_sps_flag = 1, otherwise 0 + int32_t PicOrderCntVal + uint16_t NumBitsForSTRefPicSetInSlicenumber of bits used in st_ref_pic_set() when short_term_ref_pic_set_sps_flag is 0otherwise set to 0. + uint16_t reserved + uint8_t RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]slotIndex as used in VkVideoReferenceSlotInfoKHR structures representing pReferenceSlots in VkVideoDecodeInfoKHR or STD_VIDEO_H265_NO_REFERENCE_PICTURE + uint8_t RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]slotIndex as used in VkVideoReferenceSlotInfoKHR structures representing pReferenceSlots in VkVideoDecodeInfoKHR or STD_VIDEO_H265_NO_REFERENCE_PICTURE + uint8_t RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE]slotIndex as used in VkVideoReferenceSlotInfoKHR structures representing pReferenceSlots in VkVideoDecodeInfoKHR or STD_VIDEO_H265_NO_REFERENCE_PICTURE + + + uint32_t used_for_long_term_reference : 1A picture that is marked as "used for long-term reference", derived binary value from clause 8.3.2 Decoding process for reference picture set + uint32_t unused_for_reference : 1A picture that is marked as "unused for reference", derived binary value from clause 8.3.2 Decoding process for reference picture set + + + StdVideoDecodeH265ReferenceInfoFlags flags + int32_t PicOrderCntVal + + + + + uint16_t luma_weight_l0_flageach bit n represents the nth entry in reference list l0, n <= num_ref_idx_l0_active_minus1 + uint16_t chroma_weight_l0_flageach bit n represents the nth entry in reference list l0, n <= num_ref_idx_l0_active_minus1 + uint16_t luma_weight_l1_flageach bit n represents the nth entry in reference list l1, n <= num_ref_idx_l1_active_minus1 + uint16_t chroma_weight_l1_flageach bit n represents the nth entry in reference list l1, n <= num_ref_idx_l1_active_minus1 + + + + + StdVideoEncodeH265WeightTable corresponds to the values produced by pred_weight_table() for the h.265 specification. + For details, refer to weighted_pred_flag, weighted_bipred_flag and pred_weight_table(). + + StdVideoEncodeH265WeightTableFlags flags + uint8_t luma_log2_weight_denom[0, 7] + int8_t delta_chroma_log2_weight_denom + int8_t delta_luma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]comment + int8_t luma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF]comment + int8_t delta_chroma_weight_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr + int8_t delta_chroma_offset_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l0_active_minus1]; j = 0 for Cb, j = 1 for Cr + int8_t delta_luma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF] + int8_t luma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF] + int8_t delta_chroma_weight_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr + int8_t delta_chroma_offset_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF][STD_VIDEO_H265_MAX_CHROMA_PLANES][i][j]: valid entry range for i is [0, num_ref_idx_l1_active_minus1]; j = 0 for Cb, j = 1 for Cr + + + + uint8_t num_long_term_sps + uint8_t num_long_term_pics + uint8_t lt_idx_sps[STD_VIDEO_H265_MAX_LONG_TERM_REF_PICS_SPS] + uint8_t poc_lsb_lt[STD_VIDEO_H265_MAX_LONG_TERM_PICS] + uint16_t used_by_curr_pic_lt_flageach bit represents a used_by_curr_pic_lt_flag[i] syntax + uint8_t delta_poc_msb_present_flag[STD_VIDEO_H265_MAX_DELTA_POC] + uint8_t delta_poc_msb_cycle_lt[STD_VIDEO_H265_MAX_DELTA_POC] + + + + uint32_t first_slice_segment_in_pic_flag : 1 + uint32_t dependent_slice_segment_flag : 1 + uint32_t slice_sao_luma_flag : 1 + uint32_t slice_sao_chroma_flag : 1 + uint32_t num_ref_idx_active_override_flag : 1 + uint32_t mvd_l1_zero_flag : 1 + uint32_t cabac_init_flag : 1 + uint32_t cu_chroma_qp_offset_enabled_flag : 1 + uint32_t deblocking_filter_override_flag : 1 + uint32_t slice_deblocking_filter_disabled_flag : 1 + uint32_t collocated_from_l0_flag : 1 + uint32_t slice_loop_filter_across_slices_enabled_flag : 1 + uint32_t reserved : 20 + + + StdVideoEncodeH265SliceSegmentHeaderFlags flags + StdVideoH265SliceType slice_type + uint32_t slice_segment_address + uint8_t collocated_ref_idx + uint8_t MaxNumMergeCand + int8_t slice_cb_qp_offset[-12, 12] + int8_t slice_cr_qp_offset[-12, 12] + int8_t slice_beta_offset_div2[-6, 6] + int8_t slice_tc_offset_div2[-6, 6] + int8_t slice_act_y_qp_offset + int8_t slice_act_cb_qp_offset + int8_t slice_act_cr_qp_offset + int8_t slice_qp_delta + uint16_t reserved1Reserved for future use and must be initialized with 0. + const StdVideoEncodeH265WeightTable* pWeightTable + + + uint32_t ref_pic_list_modification_flag_l0 : 1 + uint32_t ref_pic_list_modification_flag_l1 : 1 + uint32_t reserved : 30 + + + StdVideoEncodeH265ReferenceListsInfoFlags flags + uint8_t num_ref_idx_l0_active_minus1 + uint8_t num_ref_idx_l1_active_minus1 + uint8_t RefPicList0[STD_VIDEO_H265_MAX_NUM_LIST_REF]slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H265_NO_REFERENCE_PICTURE + uint8_t RefPicList1[STD_VIDEO_H265_MAX_NUM_LIST_REF]slotIndex as used in VkVideoReferenceSlotInfoKHR structures or STD_VIDEO_H265_NO_REFERENCE_PICTURE + uint8_t list_entry_l0[STD_VIDEO_H265_MAX_NUM_LIST_REF] + uint8_t list_entry_l1[STD_VIDEO_H265_MAX_NUM_LIST_REF] + + + uint32_t is_reference : 1A reference picture, as defined in clause 3.132 + uint32_t IrapPicFlag : 1A reference picture, as defined in clause 3.73 + uint32_t used_for_long_term_reference : 1A picture that is marked as "used for long-term reference", derived binary value from clause 8.3.2 Decoding process for reference picture set + uint32_t discardable_flag : 1 + uint32_t cross_layer_bla_flag : 1 + uint32_t pic_output_flag : 1 + uint32_t no_output_of_prior_pics_flag : 1 + uint32_t short_term_ref_pic_set_sps_flag : 1 + uint32_t slice_temporal_mvp_enabled_flag : 1 + uint32_t reserved : 23 + + + StdVideoEncodeH265PictureInfoFlags flags + StdVideoH265PictureType pic_type + uint8_t sps_video_parameter_set_idSelecting VPS id from the Video Parameters Set + uint8_t pps_seq_parameter_set_idSelecting SPS id from the Sequence Parameters Set + uint8_t pps_pic_parameter_set_idSelecting PPS id from the Picture Parameters Set + uint8_t short_term_ref_pic_set_idx + int32_t PicOrderCntValPicture order count derived as specified in 8.3.1 + uint8_t TemporalIdTemporal ID, as defined in 7.4.2.2 + uint8_t reserved1[7]Reserved for future use and must be initialized with 0. + const StdVideoEncodeH265ReferenceListsInfo* pRefLists + const StdVideoH265ShortTermRefPicSet* pShortTermRefPicSetMust be a valid pointer if short_term_ref_pic_set_sps_flag is not set + const StdVideoEncodeH265LongTermRefPics* pLongTermRefPicsMust be a valid pointer if long_term_ref_pics_present_flag is set + + + uint32_t used_for_long_term_reference : 1A picture that is marked as "used for long-term reference", derived binary value from clause 8.3.2 Decoding process for reference picture set + uint32_t unused_for_reference : 1A picture that is marked as "unused for reference", derived binary value from clause 8.3.2 Decoding process for reference picture set + uint32_t reserved : 30 + + + + StdVideoEncodeH265ReferenceInfoFlags flags + StdVideoH265PictureType pic_type + int32_t PicOrderCntValPicture order count derived as specified in 8.3.1 + uint8_t TemporalIdTemporal ID, as defined in 7.4.2.2 + + + + + + + + + + + + Syntax defined in section 6.2.2, semantics defined in section 7.2.2 + uint32_t color_range : 1 + uint32_t reserved : 31 + + + Syntax defined in section 6.2.2, semantics defined in section 7.2.2 + StdVideoVP9ColorConfigFlags flags + uint8_t BitDepth + uint8_t subsampling_x + uint8_t subsampling_y + uint8_t reserved1Reserved for future use and must be initialized with 0. + StdVideoVP9ColorSpace color_space + + + Syntax defined in section 6.2.8, semantics defined in section 7.2.8 + uint32_t loop_filter_delta_enabled : 1 + uint32_t loop_filter_delta_update : 1 + uint32_t reserved : 30 + + + Syntax defined in section 6.2.8, semantics defined in section 7.2.8 + StdVideoVP9LoopFilterFlags flags + uint8_t loop_filter_level + uint8_t loop_filter_sharpness + uint8_t update_ref_delta + int8_t loop_filter_ref_deltas[STD_VIDEO_VP9_MAX_REF_FRAMES] + uint8_t update_mode_delta + int8_t loop_filter_mode_deltas[STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS] + + + Syntax defined in section 6.2.11, semantics defined in section 7.2.10 + uint32_t segmentation_update_map : 1 + uint32_t segmentation_temporal_update : 1 + uint32_t segmentation_update_data : 1 + uint32_t segmentation_abs_or_delta_update : 1 + uint32_t reserved : 28 + + + Syntax defined in section 6.2.11, semantics defined in section 7.2.10 + StdVideoVP9SegmentationFlags flags + uint8_t segmentation_tree_probs[STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS] + uint8_t segmentation_pred_prob[STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB] + uint8_t FeatureEnabled[STD_VIDEO_VP9_MAX_SEGMENTS]Each element contains 4 (SEG_LVL_MAX) bits, one bit for each feature within the segment + int16_t FeatureData[STD_VIDEO_VP9_MAX_SEGMENTS][STD_VIDEO_VP9_SEG_LVL_MAX] + + + Syntax defined in section 6.2, semantics defined in section 7.2 + uint32_t error_resilient_mode : 1 + uint32_t intra_only : 1 + uint32_t allow_high_precision_mv : 1 + uint32_t refresh_frame_context : 1 + uint32_t frame_parallel_decoding_mode : 1 + uint32_t segmentation_enabled : 1 + uint32_t show_frame : 1 + uint32_t UsePrevFrameMvs : 1 + uint32_t reserved : 24 + + + Syntax defined in section 6.2, semantics defined in section 7.2 + StdVideoDecodeVP9PictureInfoFlags flags + StdVideoVP9Profile profile + StdVideoVP9FrameType frame_type + uint8_t frame_context_idx + uint8_t reset_frame_context + uint8_t refresh_frame_flags + uint8_t ref_frame_sign_bias_mask + StdVideoVP9InterpolationFilter interpolation_filter + uint8_t base_q_idx + int8_t delta_q_y_dc + int8_t delta_q_uv_dc + int8_t delta_q_uv_ac + uint8_t tile_cols_log2 + uint8_t tile_rows_log2 + uint16_t reserved1[3]Reserved for future use and must be initialized with 0. + const StdVideoVP9ColorConfig* pColorConfig + const StdVideoVP9LoopFilter* pLoopFilter + const StdVideoVP9Segmentation* pSegmentation + + + + + + + + + + + + + + + + + Syntax defined in section 5.5.2, semantics defined in section 6.4.2 + uint32_t mono_chrome : 1 + uint32_t color_range : 1 + uint32_t separate_uv_delta_q : 1 + uint32_t color_description_present_flag : 1 + uint32_t reserved : 28 + + + Syntax defined in section 5.5.2, semantics defined in section 6.4.2 + StdVideoAV1ColorConfigFlags flags + uint8_t BitDepth + uint8_t subsampling_x + uint8_t subsampling_y + uint8_t reserved1Reserved for future use and must be initialized with 0. + StdVideoAV1ColorPrimaries color_primaries + StdVideoAV1TransferCharacteristics transfer_characteristics + StdVideoAV1MatrixCoefficients matrix_coefficients + StdVideoAV1ChromaSamplePosition chroma_sample_position + + + Syntax defined in section 5.5.3, semantics defined in section 6.4.3 + uint32_t equal_picture_interval : 1 + uint32_t reserved : 31 + + + Syntax defined in section 5.5.3, semantics defined in section 6.4.3 + StdVideoAV1TimingInfoFlags flags + uint32_t num_units_in_display_tick + uint32_t time_scale + uint32_t num_ticks_per_picture_minus_1 + + + Syntax defined in section 5.5, semantics defined in section 6.4 + uint32_t still_picture : 1 + uint32_t reduced_still_picture_header : 1 + uint32_t use_128x128_superblock : 1 + uint32_t enable_filter_intra : 1 + uint32_t enable_intra_edge_filter : 1 + uint32_t enable_interintra_compound : 1 + uint32_t enable_masked_compound : 1 + uint32_t enable_warped_motion : 1 + uint32_t enable_dual_filter : 1 + uint32_t enable_order_hint : 1 + uint32_t enable_jnt_comp : 1 + uint32_t enable_ref_frame_mvs : 1 + uint32_t frame_id_numbers_present_flag : 1 + uint32_t enable_superres : 1 + uint32_t enable_cdef : 1 + uint32_t enable_restoration : 1 + uint32_t film_grain_params_present : 1 + uint32_t timing_info_present_flag : 1 + uint32_t initial_display_delay_present_flag : 1 + uint32_t reserved : 13 + + + Syntax defined in section 5.5, semantics defined in section 6.4 + StdVideoAV1SequenceHeaderFlags flags + StdVideoAV1Profile seq_profile + uint8_t frame_width_bits_minus_1 + uint8_t frame_height_bits_minus_1 + uint16_t max_frame_width_minus_1 + uint16_t max_frame_height_minus_1 + uint8_t delta_frame_id_length_minus_2 + uint8_t additional_frame_id_length_minus_1 + uint8_t order_hint_bits_minus_1 + uint8_t seq_force_integer_mvThe final value of of seq_force_integer_mv per the value of seq_choose_integer_mv. + uint8_t seq_force_screen_content_toolsThe final value of of seq_force_screen_content_tools per the value of seq_choose_screen_content_tools. + uint8_t reserved1[5]Reserved for future use and must be initialized with 0. + const StdVideoAV1ColorConfig* pColorConfig + const StdVideoAV1TimingInfo* pTimingInfo + + + Syntax defined in section 5.9.11, semantics defined in section 6.8.10 + uint32_t loop_filter_delta_enabled : 1 + uint32_t loop_filter_delta_update : 1 + uint32_t reserved : 30 + + + Syntax defined in section 5.9.11, semantics defined in section 6.8.10 + StdVideoAV1LoopFilterFlags flags + uint8_t loop_filter_level[STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS] + uint8_t loop_filter_sharpness + uint8_t update_ref_delta + int8_t loop_filter_ref_deltas[STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME] + uint8_t update_mode_delta + int8_t loop_filter_mode_deltas[STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS] + + + Syntax defined in section 5.9.12, semantics defined in section 6.8.11 + uint32_t using_qmatrix : 1 + uint32_t diff_uv_delta : 1 + uint32_t reserved : 30 + + + Syntax defined in section 5.9.12, semantics defined in section 6.8.11 + StdVideoAV1QuantizationFlags flags + uint8_t base_q_idx + int8_t DeltaQYDc + int8_t DeltaQUDc + int8_t DeltaQUAc + int8_t DeltaQVDc + int8_t DeltaQVAc + uint8_t qm_y + uint8_t qm_u + uint8_t qm_v + + + Syntax defined in section 5.9.14, semantics defined in section 6.8.13 + uint8_t FeatureEnabled[STD_VIDEO_AV1_MAX_SEGMENTS]Each element contains 8 (SEG_LVL_MAX) bits, one bit for each feature within the segment + int16_t FeatureData[STD_VIDEO_AV1_MAX_SEGMENTS][STD_VIDEO_AV1_SEG_LVL_MAX] + + + Syntax defined in section 5.9.15, semantics defined in section 6.8.14 + uint32_t uniform_tile_spacing_flag : 1 + uint32_t reserved : 31 + + + Syntax defined in section 5.9.15, semantics defined in section 6.8.14 + StdVideoAV1TileInfoFlags flags + uint8_t TileCols + uint8_t TileRows + uint16_t context_update_tile_id + uint8_t tile_size_bytes_minus_1 + uint8_t reserved1[7]Reserved for future use and must be initialized with 0. + const uint16_t* pMiColStartsTileCols number of elements + const uint16_t* pMiRowStartsTileRows number of elements + const uint16_t* pWidthInSbsMinus1TileCols number of elements + const uint16_t* pHeightInSbsMinus1TileRows number of elements + + + Syntax defined in section 5.9.19, semantics defined in section 6.10.14 + uint8_t cdef_damping_minus_3 + uint8_t cdef_bits + uint8_t cdef_y_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS] + uint8_t cdef_y_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS] + uint8_t cdef_uv_pri_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS] + uint8_t cdef_uv_sec_strength[STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS] + + + Syntax defined in section 5.9.20, semantics defined in section 6.10.15 + StdVideoAV1FrameRestorationType FrameRestorationType[STD_VIDEO_AV1_MAX_NUM_PLANES] + uint16_t LoopRestorationSize[STD_VIDEO_AV1_MAX_NUM_PLANES] + + + Syntax defined in section 5.9.24, semantics defined in section 7.10 + uint8_t GmType[STD_VIDEO_AV1_NUM_REF_FRAMES] + int32_t gm_params[STD_VIDEO_AV1_NUM_REF_FRAMES][STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS] + + + Syntax defined in section 5.9.30, semantics defined in section 6.8.20 + uint32_t chroma_scaling_from_luma : 1 + uint32_t overlap_flag : 1 + uint32_t clip_to_restricted_range : 1 + uint32_t update_grain : 1 + uint32_t reserved : 28 + + + Syntax defined in section 5.9.30, semantics defined in section 6.8.20 + StdVideoAV1FilmGrainFlags flags + uint8_t grain_scaling_minus_8 + uint8_t ar_coeff_lag + uint8_t ar_coeff_shift_minus_6 + uint8_t grain_scale_shift + uint16_t grain_seed + uint8_t film_grain_params_ref_idx + uint8_t num_y_points + uint8_t point_y_value[STD_VIDEO_AV1_MAX_NUM_Y_POINTS] + uint8_t point_y_scaling[STD_VIDEO_AV1_MAX_NUM_Y_POINTS] + uint8_t num_cb_points + uint8_t point_cb_value[STD_VIDEO_AV1_MAX_NUM_CB_POINTS] + uint8_t point_cb_scaling[STD_VIDEO_AV1_MAX_NUM_CB_POINTS] + uint8_t num_cr_points + uint8_t point_cr_value[STD_VIDEO_AV1_MAX_NUM_CR_POINTS] + uint8_t point_cr_scaling[STD_VIDEO_AV1_MAX_NUM_CR_POINTS] + int8_t ar_coeffs_y_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_LUMA] + int8_t ar_coeffs_cb_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA] + int8_t ar_coeffs_cr_plus_128[STD_VIDEO_AV1_MAX_NUM_POS_CHROMA] + uint8_t cb_mult + uint8_t cb_luma_mult + uint16_t cb_offset + uint8_t cr_mult + uint8_t cr_luma_mult + uint16_t cr_offset + + + Syntax defined in section 5.9, semantics defined in section 6.8 + uint32_t error_resilient_mode : 1 + uint32_t disable_cdf_update : 1 + uint32_t use_superres : 1 + uint32_t render_and_frame_size_different : 1 + uint32_t allow_screen_content_tools : 1 + uint32_t is_filter_switchable : 1 + uint32_t force_integer_mv : 1 + uint32_t frame_size_override_flag : 1 + uint32_t buffer_removal_time_present_flag : 1 + uint32_t allow_intrabc : 1 + uint32_t frame_refs_short_signaling : 1 + uint32_t allow_high_precision_mv : 1 + uint32_t is_motion_mode_switchable : 1 + uint32_t use_ref_frame_mvs : 1 + uint32_t disable_frame_end_update_cdf : 1 + uint32_t allow_warped_motion : 1 + uint32_t reduced_tx_set : 1 + uint32_t reference_select : 1 + uint32_t skip_mode_present : 1 + uint32_t delta_q_present : 1 + uint32_t delta_lf_present : 1 + uint32_t delta_lf_multi : 1 + uint32_t segmentation_enabled : 1 + uint32_t segmentation_update_map : 1 + uint32_t segmentation_temporal_update : 1 + uint32_t segmentation_update_data : 1 + uint32_t UsesLr : 1 + uint32_t usesChromaLr : 1 + uint32_t apply_grain : 1 + uint32_t reserved : 3 + + + Syntax defined in sections 5.9 and 5.11.1, semantics defined in sections 6.8 and 6.10.1 + StdVideoDecodeAV1PictureInfoFlags flags + StdVideoAV1FrameType frame_type + uint32_t current_frame_id + uint8_t OrderHint + uint8_t primary_ref_frame + uint8_t refresh_frame_flags + uint8_t reserved1Reserved for future use and must be initialized with 0. + StdVideoAV1InterpolationFilter interpolation_filter + StdVideoAV1TxMode TxMode + uint8_t delta_q_res + uint8_t delta_lf_res + uint8_t SkipModeFrame[STD_VIDEO_AV1_SKIP_MODE_FRAMES] + uint8_t coded_denom + uint8_t reserved2[3]Reserved for future use and must be initialized with 0. + uint8_t OrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES] + uint32_t expectedFrameId[STD_VIDEO_AV1_NUM_REF_FRAMES] + const StdVideoAV1TileInfo* pTileInfo + const StdVideoAV1Quantization* pQuantization + const StdVideoAV1Segmentation* pSegmentation + const StdVideoAV1LoopFilter* pLoopFilter + const StdVideoAV1CDEF* pCDEF + const StdVideoAV1LoopRestoration* pLoopRestoration + const StdVideoAV1GlobalMotion* pGlobalMotion + const StdVideoAV1FilmGrain* pFilmGrain + + + uint32_t disable_frame_end_update_cdf : 1 + uint32_t segmentation_enabled : 1 + uint32_t reserved : 30 + + + StdVideoDecodeAV1ReferenceInfoFlags flags + uint8_t frame_type + uint8_t RefFrameSignBias + uint8_t OrderHint + uint8_t SavedOrderHints[STD_VIDEO_AV1_NUM_REF_FRAMES] + + + Syntax defined in section 5.3.3, semantics defined in section 6.2.3 + uint8_t temporal_id + uint8_t spatial_id + + + uint8_t buffer_delay_length_minus_1 + uint8_t buffer_removal_time_length_minus_1 + uint8_t frame_presentation_time_length_minus_1 + uint8_t reserved1Reserved for future use and must be initialized with 0. + uint32_t num_units_in_decoding_tick + + + uint32_t decoder_model_present_for_this_op : 1 + uint32_t low_delay_mode_flag : 1 + uint32_t initial_display_delay_present_for_this_op : 1 + uint32_t reserved : 29 + + + StdVideoEncodeAV1OperatingPointInfoFlags flags + uint16_t operating_point_idc + uint8_t seq_level_idx + uint8_t seq_tier + uint32_t decoder_buffer_delay + uint32_t encoder_buffer_delay + uint8_t initial_display_delay_minus_1 + + + Syntax defined in section 5.9, semantics defined in section 6.8 + uint32_t error_resilient_mode : 1 + uint32_t disable_cdf_update : 1 + uint32_t use_superres : 1 + uint32_t render_and_frame_size_different : 1 + uint32_t allow_screen_content_tools : 1 + uint32_t is_filter_switchable : 1 + uint32_t force_integer_mv : 1 + uint32_t frame_size_override_flag : 1 + uint32_t buffer_removal_time_present_flag : 1 + uint32_t allow_intrabc : 1 + uint32_t frame_refs_short_signaling : 1 + uint32_t allow_high_precision_mv : 1 + uint32_t is_motion_mode_switchable : 1 + uint32_t use_ref_frame_mvs : 1 + uint32_t disable_frame_end_update_cdf : 1 + uint32_t allow_warped_motion : 1 + uint32_t reduced_tx_set : 1 + uint32_t skip_mode_present : 1 + uint32_t delta_q_present : 1 + uint32_t delta_lf_present : 1 + uint32_t delta_lf_multi : 1 + uint32_t segmentation_enabled : 1 + uint32_t segmentation_update_map : 1 + uint32_t segmentation_temporal_update : 1 + uint32_t segmentation_update_data : 1 + uint32_t UsesLr : 1 + uint32_t usesChromaLr : 1 + uint32_t show_frame : 1 + uint32_t showable_frame : 1 + uint32_t reserved : 3 + + + Syntax defined in sections 5.9 and 5.11.1, semantics defined in sections 6.8 and 6.10.1 + StdVideoEncodeAV1PictureInfoFlags flags + StdVideoAV1FrameType frame_type + uint32_t frame_presentation_time + uint32_t current_frame_id + uint8_t order_hint + uint8_t primary_ref_frame + uint8_t refresh_frame_flags + uint8_t coded_denom + uint16_t render_width_minus_1 + uint16_t render_height_minus_1 + StdVideoAV1InterpolationFilter interpolation_filter + StdVideoAV1TxMode TxMode + uint8_t delta_q_res + uint8_t delta_lf_res + uint8_t ref_order_hint[STD_VIDEO_AV1_NUM_REF_FRAMES] + int8_t ref_frame_idx[STD_VIDEO_AV1_REFS_PER_FRAME] + uint8_t reserved1[3]Reserved for future use and must be initialized with 0. + uint32_t delta_frame_id_minus_1[STD_VIDEO_AV1_REFS_PER_FRAME] + const StdVideoAV1TileInfo* pTileInfo + const StdVideoAV1Quantization* pQuantization + const StdVideoAV1Segmentation* pSegmentation + const StdVideoAV1LoopFilter* pLoopFilter + const StdVideoAV1CDEF* pCDEF + const StdVideoAV1LoopRestoration* pLoopRestoration + const StdVideoAV1GlobalMotion* pGlobalMotion + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader + const uint32_t* pBufferRemovalTimes + + + + uint32_t disable_frame_end_update_cdf : 1 + uint32_t segmentation_enabled : 1 + uint32_t reserved : 30 + + + StdVideoEncodeAV1ReferenceInfoFlags flags + uint32_t RefFrameId + StdVideoAV1FrameType frame_type + uint8_t OrderHint + uint8_t reserved1[3]Reserved for future use and must be initialized with 0. + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reserved STD_VIDEO_H264_SLICE_TYPE_SP = 3 + reserved STD_VIDEO_H264_SLICE_TYPE_SI = 4 + + + + + + + + + reserved STD_VIDEO_H264_PICTURE_TYPE_SP = 3 + reserved STD_VIDEO_H264_PICTURE_TYPE_SI = 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-headers/source/registry/vk.xml b/local/recipes/libs/vulkan-headers/source/registry/vk.xml new file mode 100644 index 0000000000..13d44a32a8 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/vk.xml @@ -0,0 +1,31524 @@ + + + +Copyright 2015-2025 The Khronos Group Inc. + +SPDX-License-Identifier: Apache-2.0 OR MIT + + + +This file, vk.xml, is the Vulkan API Registry. It is a critically important +and normative part of the Vulkan Specification, including a canonical +machine-readable definition of the API, parameter and member validation +language incorporated into the Specification and reference pages, and other +material which is registered by Khronos, such as tags used by extension and +layer authors. The authoritative public version of vk.xml is maintained in +the default branch (currently named main) of the Khronos Vulkan GitHub +project. The authoritative private version is maintained in the default +branch of the member gitlab server. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #include "vk_platform.h" + + WSI extensions + + + + + + + + + + + + + + In the current header structure, each platform's interfaces + are confined to a platform-specific header (vulkan_xlib.h, + vulkan_win32.h, etc.). These headers are not self-contained, + and should not include native headers (X11/Xlib.h, + windows.h, etc.). Code should either include vulkan.h after + defining the appropriate VK_USE_PLATFORM_platform + macros, or include the required native headers prior to + explicitly including the corresponding platform header. + + To accomplish this, the dependencies of native types require + native headers, but the XML defines the content for those + native headers as empty. The actual native header includes + can be restored by modifying the native header tags above + to #include the header file in the 'name' attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#define VK_MAKE_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + +#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22U) + +#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) + +#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) + + #define VK_MAKE_API_VERSION(variant, major, minor, patch) \ + ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch))) + #define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U) + #define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU) + #define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU) + #define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) + + // Vulkan SC variant number +#define VKSC_API_VARIANT 1 + + +//#define VK_API_VERSION VK_MAKE_API_VERSION(0, 1, 0, 0) // Patch version should always be set to 0 + // Vulkan 1.0 version number +#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 + // Vulkan 1.1 version number +#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0 + // Vulkan 1.2 version number +#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0 + // Vulkan 1.3 version number +#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0 + // Vulkan 1.4 version number +#define VK_API_VERSION_1_4 VK_MAKE_API_VERSION(0, 1, 4, 0)// Patch version should always be set to 0 + // Vulkan SC 1.0 version number +#define VKSC_API_VERSION_1_0 VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, 0)// Patch version should always be set to 0 + + // Version of this file +#define VK_HEADER_VERSION 321 + // Complete version of this file +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) + // Version of this file +#define VK_HEADER_VERSION 18 + // Complete version of this file +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, VK_HEADER_VERSION) + + +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* (object); + + +#ifndef VK_USE_64_BIT_PTR_DEFINES + #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64) + #define VK_USE_64_BIT_PTR_DEFINES 1 + #else + #define VK_USE_64_BIT_PTR_DEFINES 0 + #endif +#endif + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) + #define VK_NULL_HANDLE nullptr + #else + #define VK_NULL_HANDLE ((void*)0) + #endif + #else + #define VK_NULL_HANDLE 0ULL + #endif +#endif +#ifndef VK_NULL_HANDLE + #define VK_NULL_HANDLE 0 +#endif + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #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 + +#ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #if (VK_USE_64_BIT_PTR_DEFINES==1) + #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 + + struct ANativeWindow; + struct AHardwareBuffer; + #ifdef __OBJC__ +@class CAMetalLayer; +#else +typedef void CAMetalLayer; +#endif + #ifdef __OBJC__ +@protocol MTLDevice; +typedef __unsafe_unretained id<MTLDevice> MTLDevice_id; +#else +typedef void* MTLDevice_id; +#endif + #ifdef __OBJC__ +@protocol MTLCommandQueue; +typedef __unsafe_unretained id<MTLCommandQueue> MTLCommandQueue_id; +#else +typedef void* MTLCommandQueue_id; +#endif + #ifdef __OBJC__ +@protocol MTLBuffer; +typedef __unsafe_unretained id<MTLBuffer> MTLBuffer_id; +#else +typedef void* MTLBuffer_id; +#endif + #ifdef __OBJC__ +@protocol MTLTexture; +typedef __unsafe_unretained id<MTLTexture> MTLTexture_id; +#else +typedef void* MTLTexture_id; +#endif + #ifdef __OBJC__ +@protocol MTLSharedEvent; +typedef __unsafe_unretained id<MTLSharedEvent> MTLSharedEvent_id; +#else +typedef void* MTLSharedEvent_id; +#endif + typedef struct __IOSurface* IOSurfaceRef; + + typedef uint32_t VkSampleMask; + typedef uint32_t VkBool32; + typedef uint32_t VkFlags; + typedef uint64_t VkFlags64; + typedef uint64_t VkDeviceSize; + typedef uint64_t VkDeviceAddress; + + typedef struct NativeWindow OHNativeWindow; + + Basic C types, pulled in via vk_platform.h + + + + + + + + + + + + + + + + Bitmask types + typedef VkFlags VkFramebufferCreateFlags; + typedef VkFlags VkQueryPoolCreateFlags; + typedef VkFlags VkRenderPassCreateFlags; + typedef VkFlags VkSamplerCreateFlags; + typedef VkFlags VkPipelineLayoutCreateFlags; + typedef VkFlags VkPipelineCacheCreateFlags; + typedef VkFlags VkPipelineDepthStencilStateCreateFlags; + typedef VkFlags VkPipelineDepthStencilStateCreateFlags; + typedef VkFlags VkPipelineDynamicStateCreateFlags; + typedef VkFlags VkPipelineColorBlendStateCreateFlags; + typedef VkFlags VkPipelineColorBlendStateCreateFlags; + typedef VkFlags VkPipelineMultisampleStateCreateFlags; + typedef VkFlags VkPipelineRasterizationStateCreateFlags; + typedef VkFlags VkPipelineViewportStateCreateFlags; + typedef VkFlags VkPipelineTessellationStateCreateFlags; + typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; + typedef VkFlags VkPipelineVertexInputStateCreateFlags; + typedef VkFlags VkPipelineShaderStageCreateFlags; + typedef VkFlags VkDescriptorSetLayoutCreateFlags; + typedef VkFlags VkBufferViewCreateFlags; + typedef VkFlags VkInstanceCreateFlags; + typedef VkFlags VkDeviceCreateFlags; + typedef VkFlags VkDeviceQueueCreateFlags; + typedef VkFlags VkQueueFlags; + typedef VkFlags VkMemoryPropertyFlags; + typedef VkFlags VkMemoryHeapFlags; + typedef VkFlags VkAccessFlags; + typedef VkFlags VkBufferUsageFlags; + typedef VkFlags VkBufferCreateFlags; + typedef VkFlags VkShaderStageFlags; + typedef VkFlags VkImageUsageFlags; + typedef VkFlags VkImageCreateFlags; + typedef VkFlags VkImageViewCreateFlags; + typedef VkFlags VkPipelineCreateFlags; + typedef VkFlags VkColorComponentFlags; + typedef VkFlags VkFenceCreateFlags; + typedef VkFlags VkSemaphoreCreateFlags; + typedef VkFlags VkFormatFeatureFlags; + typedef VkFlags VkQueryControlFlags; + typedef VkFlags VkQueryResultFlags; + typedef VkFlags VkShaderModuleCreateFlags; + typedef VkFlags VkEventCreateFlags; + typedef VkFlags VkCommandPoolCreateFlags; + typedef VkFlags VkCommandPoolResetFlags; + typedef VkFlags VkCommandBufferResetFlags; + typedef VkFlags VkCommandBufferUsageFlags; + typedef VkFlags VkQueryPipelineStatisticFlags; + typedef VkFlags VkMemoryMapFlags; + typedef VkFlags VkMemoryUnmapFlags; + + typedef VkFlags VkImageAspectFlags; + typedef VkFlags VkSparseMemoryBindFlags; + typedef VkFlags VkSparseImageFormatFlags; + typedef VkFlags VkSubpassDescriptionFlags; + typedef VkFlags VkPipelineStageFlags; + typedef VkFlags VkSampleCountFlags; + typedef VkFlags VkAttachmentDescriptionFlags; + typedef VkFlags VkStencilFaceFlags; + typedef VkFlags VkCullModeFlags; + typedef VkFlags VkDescriptorPoolCreateFlags; + typedef VkFlags VkDescriptorPoolResetFlags; + typedef VkFlags VkDependencyFlags; + typedef VkFlags VkSubgroupFeatureFlags; + typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; + typedef VkFlags VkIndirectStateFlagsNV; + typedef VkFlags VkGeometryFlagsKHR; + + typedef VkFlags VkGeometryInstanceFlagsKHR; + + typedef VkFlags VkClusterAccelerationStructureGeometryFlagsNV; + typedef VkFlags VkClusterAccelerationStructureClusterFlagsNV; + typedef VkFlags VkClusterAccelerationStructureAddressResolutionFlagsNV; + typedef VkFlags VkBuildAccelerationStructureFlagsKHR; + + typedef VkFlags VkPrivateDataSlotCreateFlags; + + typedef VkFlags VkAccelerationStructureCreateFlagsKHR; + typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; + + typedef VkFlags VkPipelineCreationFeedbackFlags; + + typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; + typedef VkFlags VkAcquireProfilingLockFlagsKHR; + typedef VkFlags VkSemaphoreWaitFlags; + + typedef VkFlags VkPipelineCompilerControlFlagsAMD; + typedef VkFlags VkShaderCorePropertiesFlagsAMD; + typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; + typedef VkFlags VkRefreshObjectFlagsKHR; + typedef VkFlags64 VkAccessFlags2; + + typedef VkFlags64 VkPipelineStageFlags2; + + typedef VkFlags VkAccelerationStructureMotionInfoFlagsNV; + typedef VkFlags VkAccelerationStructureMotionInstanceFlagsNV; + typedef VkFlags64 VkFormatFeatureFlags2; + + typedef VkFlags VkRenderingFlags; + typedef VkFlags64 VkMemoryDecompressionMethodFlagsNV; + + typedef VkFlags VkBuildMicromapFlagsEXT; + typedef VkFlags VkMicromapCreateFlagsEXT; + typedef VkFlags VkIndirectCommandsLayoutUsageFlagsEXT; + typedef VkFlags VkIndirectCommandsInputModeFlagsEXT; + typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; + typedef VkFlags64 VkPipelineCreateFlags2; + + typedef VkFlags64 VkBufferUsageFlags2; + + typedef VkFlags64 VkTensorCreateFlagsARM; + typedef VkFlags64 VkTensorUsageFlagsARM; + typedef VkFlags64 VkTensorViewCreateFlagsARM; + typedef VkFlags64 VkDataGraphPipelineSessionCreateFlagsARM; + typedef VkFlags64 VkDataGraphPipelineDispatchFlagsARM; + + WSI extensions + typedef VkFlags VkCompositeAlphaFlagsKHR; + typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; + typedef VkFlags VkSurfaceTransformFlagsKHR; + typedef VkFlags VkSwapchainCreateFlagsKHR; + typedef VkFlags VkDisplayModeCreateFlagsKHR; + typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; + typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; + typedef VkFlags VkViSurfaceCreateFlagsNN; + typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; + typedef VkFlags VkWin32SurfaceCreateFlagsKHR; + typedef VkFlags VkXlibSurfaceCreateFlagsKHR; + typedef VkFlags VkXcbSurfaceCreateFlagsKHR; + typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; + typedef VkFlags VkIOSSurfaceCreateFlagsMVK; + typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; + typedef VkFlags VkMetalSurfaceCreateFlagsEXT; + typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; + typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; + typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT; + typedef VkFlags VkScreenSurfaceCreateFlagsQNX; + typedef VkFlags VkPeerMemoryFeatureFlags; + + typedef VkFlags VkMemoryAllocateFlags; + + typedef VkFlags VkDeviceGroupPresentModeFlagsKHR; + + typedef VkFlags VkDebugReportFlagsEXT; + typedef VkFlags VkCommandPoolTrimFlags; + + typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; + typedef VkFlags VkClusterAccelerationStructureIndexFormatFlagsNV; + typedef VkFlags VkExternalMemoryFeatureFlagsNV; + typedef VkFlags VkExternalMemoryHandleTypeFlags; + + typedef VkFlags VkExternalMemoryFeatureFlags; + + typedef VkFlags VkExternalSemaphoreHandleTypeFlags; + + typedef VkFlags VkExternalSemaphoreFeatureFlags; + + typedef VkFlags VkSemaphoreImportFlags; + + typedef VkFlags VkExternalFenceHandleTypeFlags; + + typedef VkFlags VkExternalFenceFeatureFlags; + + typedef VkFlags VkFenceImportFlags; + + typedef VkFlags VkSurfaceCounterFlagsEXT; + typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; + typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; + typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; + typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; + typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; + typedef VkFlags VkValidationCacheCreateFlagsEXT; + typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; + typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; + typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; + typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; + typedef VkFlags VkDeviceMemoryReportFlagsEXT; + typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT; + typedef VkFlags VkDescriptorBindingFlags; + + typedef VkFlags VkConditionalRenderingFlagsEXT; + typedef VkFlags VkResolveModeFlags; + + typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; + typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT; + typedef VkFlags VkSwapchainImageUsageFlagsANDROID; + typedef VkFlags VkToolPurposeFlags; + + typedef VkFlags VkSubmitFlags; + + typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA; + typedef VkFlags VkHostImageCopyFlags; + + typedef VkFlags VkPartitionedAccelerationStructureInstanceFlagsNV; + typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA; + typedef VkFlags VkGraphicsPipelineLibraryFlagsEXT; + typedef VkFlags VkImageCompressionFlagsEXT; + typedef VkFlags VkImageCompressionFixedRateFlagsEXT; + typedef VkFlags VkExportMetalObjectTypeFlagsEXT; + typedef VkFlags VkDeviceAddressBindingFlagsEXT; + typedef VkFlags VkOpticalFlowGridSizeFlagsNV; + typedef VkFlags VkOpticalFlowUsageFlagsNV; + typedef VkFlags VkOpticalFlowSessionCreateFlagsNV; + typedef VkFlags VkOpticalFlowExecuteFlagsNV; + typedef VkFlags VkFrameBoundaryFlagsEXT; + typedef VkFlags VkPresentScalingFlagsKHR; + + typedef VkFlags VkPresentGravityFlagsKHR; + + typedef VkFlags VkShaderCreateFlagsEXT; + typedef VkFlags VkTileShadingRenderPassFlagsQCOM; + typedef VkFlags64 VkPhysicalDeviceSchedulingControlsFlagsARM; + typedef VkFlags VkSurfaceCreateFlagsOHOS; + + Video Core extension + typedef VkFlags VkVideoCodecOperationFlagsKHR; + typedef VkFlags VkVideoCapabilityFlagsKHR; + typedef VkFlags VkVideoSessionCreateFlagsKHR; + typedef VkFlags VkVideoSessionParametersCreateFlagsKHR; + typedef VkFlags VkVideoBeginCodingFlagsKHR; + typedef VkFlags VkVideoEndCodingFlagsKHR; + typedef VkFlags VkVideoCodingControlFlagsKHR; + + Video Decode Core extension + typedef VkFlags VkVideoDecodeUsageFlagsKHR; + typedef VkFlags VkVideoDecodeCapabilityFlagsKHR; + typedef VkFlags VkVideoDecodeFlagsKHR; + + Video Decode H.264 extension + typedef VkFlags VkVideoDecodeH264PictureLayoutFlagsKHR; + + Video Encode Core extension + typedef VkFlags VkVideoEncodeFlagsKHR; + typedef VkFlags VkVideoEncodeUsageFlagsKHR; + typedef VkFlags VkVideoEncodeContentFlagsKHR; + typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeFeedbackFlagsKHR; + typedef VkFlags VkVideoEncodeRateControlFlagsKHR; + typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; + typedef VkFlags VkVideoEncodeIntraRefreshModeFlagsKHR; + typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; + typedef VkFlags VkVideoComponentBitDepthFlagsKHR; + + Video Encode H.264 extension + typedef VkFlags VkVideoEncodeH264CapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeH264StdFlagsKHR; + typedef VkFlags VkVideoEncodeH264RateControlFlagsKHR; + + Video Encode H.265 extension + typedef VkFlags VkVideoEncodeH265CapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeH265StdFlagsKHR; + typedef VkFlags VkVideoEncodeH265RateControlFlagsKHR; + typedef VkFlags VkVideoEncodeH265CtbSizeFlagsKHR; + typedef VkFlags VkVideoEncodeH265TransformBlockSizeFlagsKHR; + + Video Encode AV1 extension + typedef VkFlags VkVideoEncodeAV1CapabilityFlagsKHR; + typedef VkFlags VkVideoEncodeAV1StdFlagsKHR; + typedef VkFlags VkVideoEncodeAV1RateControlFlagsKHR; + typedef VkFlags VkVideoEncodeAV1SuperblockSizeFlagsKHR; + + VK_KHR_maintenance8 + typedef VkFlags64 VkAccessFlags3KHR; + + Types which can be void pointers or class pointers, selected at compile time + VK_DEFINE_HANDLE(VkInstance) + VK_DEFINE_HANDLE(VkPhysicalDevice) + VK_DEFINE_HANDLE(VkDevice) + VK_DEFINE_HANDLE(VkQueue) + VK_DEFINE_HANDLE(VkCommandBuffer) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineBinaryKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectExecutionSetEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot) + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkOpticalFlowSessionNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkMicromapEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorARM) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorViewARM) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDataGraphPipelineSessionARM) + + WSI extensions + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) + + Video extensions + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) + + VK_NV_external_sci_sync2 + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphoreSciSyncPoolNV) + + Types generated from corresponding enums tags below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSI extensions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enumerated types in the header, but not used by the API + + + + + + + + Video Core extensions + + + + + + + + + + Video Decode extensions + + + + Video H.264 Decode extensions + + + Video H.265 Decode extensions + + Video Encode extensions + + + + + + + + + + Video H.264 Encode extensions + + + + + Video H.265 Encode extensions + + + + + + + Video AV1 Encode extensions + + + + + + + + VK_KHR_maintenance8 + + + VK_KHR_maintenance9 + + + The PFN_vk*Function types are used by VkAllocationCallbacks below + 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_vkAllocationFunction)( + void* pUserData, + size_t size, + size_t alignment, + VkSystemAllocationScope allocationScope); + typedef void (VKAPI_PTR *PFN_vkFreeFunction)( + void* pUserData, + void* pMemory); + + The PFN_vkVoidFunction type are used by VkGet*ProcAddr below + typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); + + The PFN_vkDebugReportCallbackEXT type are used by the DEBUG_REPORT extension + typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( + VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char* pLayerPrefix, + const char* pMessage, + void* pUserData); + + The PFN_vkDebugUtilsMessengerCallbackEXT type are used by the VK_EXT_debug_utils extension + typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)( + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData); + + The PFN_vkFaultCallbackFunction type is used by VKSC_VERSION_1_0 + typedef void (VKAPI_PTR *PFN_vkFaultCallbackFunction)( + VkBool32 unrecordedFaults, + uint32_t faultCount, + const VkFaultData* pFaults); + + The PFN_vkDeviceMemoryReportCallbackEXT type is used by the VK_EXT_device_memory_report extension + typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)( + const VkDeviceMemoryReportCallbackDataEXT* pCallbackData, + void* pUserData); + + The PFN_vkGetInstanceProcAddrLUNARG type is used by the + VkDirectDriverLoadingInfoLUNARG structure. + We cannot introduce an explicit dependency on the + equivalent PFN_vkGetInstanceProcAddr type, even though + it is implicitly generated in the C header, because + that results in multiple definitions. + typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddrLUNARG)( + VkInstance instance, const char* pName); + + Struct types + + VkStructureType sType + struct VkBaseOutStructure* pNext + + + VkStructureType sType + const struct VkBaseInStructure* pNext + + + int32_t x + int32_t y + + + int32_t x + int32_t y + int32_t z + + + uint32_t width + uint32_t height + + + uint32_t width + uint32_t height + uint32_t depth + + + float x + float y + float width + float height + float minDepth + float maxDepth + + + VkOffset2D offset + VkExtent2D extent + + + VkRect2D rect + uint32_t baseArrayLayer + uint32_t layerCount + + + VkComponentSwizzle r + VkComponentSwizzle g + VkComponentSwizzle b + VkComponentSwizzle a + + + 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 + + + char extensionName[VK_MAX_EXTENSION_NAME_SIZE]extension name + uint32_t specVersionversion of the extension specification implemented + + + char layerName[VK_MAX_EXTENSION_NAME_SIZE]layer name + uint32_t specVersionversion of the layer specification implemented + uint32_t implementationVersionbuild or release version of the layer's library + char description[VK_MAX_DESCRIPTION_SIZE]Free-form description of the layer + + + VkStructureType sType + const void* pNext + const char* pApplicationName + uint32_t applicationVersion + const char* pEngineName + uint32_t engineVersion + uint32_t apiVersion + + + void* pUserData + PFN_vkAllocationFunction pfnAllocation + PFN_vkReallocationFunction pfnReallocation + PFN_vkFreeFunction pfnFree + PFN_vkInternalAllocationNotification pfnInternalAllocation + PFN_vkInternalFreeNotification pfnInternalFree + + + VkStructureType sType + const void* pNext + VkDeviceQueueCreateFlags flags + uint32_t queueFamilyIndex + uint32_t queueCount + const float* pQueuePriorities + + + VkStructureType sType + const void* pNext + VkDeviceCreateFlags flags + uint32_t queueCreateInfoCount + const VkDeviceQueueCreateInfo* pQueueCreateInfos + uint32_t enabledLayerCount + const char* const* ppEnabledLayerNamesOrdered list of layer names to be enabled + uint32_t enabledExtensionCount + const char* const* ppEnabledExtensionNames + const VkPhysicalDeviceFeatures* pEnabledFeatures + + + VkStructureType sType + const void* pNext + VkInstanceCreateFlags flags + const VkApplicationInfo* pApplicationInfo + uint32_t enabledLayerCount + const char* const* ppEnabledLayerNamesOrdered list of layer names to be enabled + uint32_t enabledExtensionCount + const char* const* ppEnabledExtensionNamesExtension names to be enabled + + + VkQueueFlags queueFlagsQueue flags + uint32_t queueCount + uint32_t timestampValidBits + VkExtent3D minImageTransferGranularityMinimum alignment requirement for image transfers + + + uint32_t memoryTypeCount + VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES] + uint32_t memoryHeapCount + VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS] + + + VkStructureType sType + const void* pNext + VkDeviceSize allocationSizeSize of memory allocation + uint32_t memoryTypeIndexIndex of the of the memory type to allocate from + + + VkDeviceSize sizeSpecified in bytes + VkDeviceSize alignmentSpecified in bytes + uint32_t memoryTypeBitsBitmask of the allowed memory type indices into memoryTypes[] for this object + + + VkImageAspectFlags aspectMask + VkExtent3D imageGranularity + VkSparseImageFormatFlags flags + + + VkSparseImageFormatProperties formatProperties + uint32_t imageMipTailFirstLod + VkDeviceSize imageMipTailSizeSpecified in bytes, must be a multiple of sparse block size in bytes / alignment + VkDeviceSize imageMipTailOffsetSpecified in bytes, must be a multiple of sparse block size in bytes / alignment + VkDeviceSize imageMipTailStrideSpecified in bytes, must be a multiple of sparse block size in bytes / alignment + + + VkMemoryPropertyFlags propertyFlagsMemory properties of this memory type + uint32_t heapIndexIndex of the memory heap allocations of this memory type are taken from + + + VkDeviceSize sizeAvailable memory in the heap + VkMemoryHeapFlags flagsFlags for the heap + + + VkStructureType sType + const void* pNext + VkDeviceMemory memoryMapped memory object + VkDeviceSize offsetOffset within the memory object where the range starts + VkDeviceSize sizeSize of the range within the memory object + + + VkFormatFeatureFlags linearTilingFeaturesFormat features in case of linear tiling + VkFormatFeatureFlags optimalTilingFeaturesFormat features in case of optimal tiling + VkFormatFeatureFlags bufferFeaturesFormat features supported by buffers + + + VkExtent3D maxExtentmax image dimensions for this resource type + uint32_t maxMipLevelsmax number of mipmap levels for this resource type + uint32_t maxArrayLayersmax array size for this resource type + VkSampleCountFlags sampleCountssupported sample counts for this resource type + VkDeviceSize maxResourceSizemax size (in bytes) of this resource type + + + VkBuffer bufferBuffer used for this descriptor slot. + VkDeviceSize offsetBase offset from buffer start in bytes to update in the descriptor set. + VkDeviceSize rangeSize in bytes of the buffer resource for this descriptor update. + + + VkSampler samplerSampler to write to the descriptor in case it is a SAMPLER or COMBINED_IMAGE_SAMPLER descriptor. Ignored otherwise. + VkImageView imageViewImage view to write to the descriptor in case it is a SAMPLED_IMAGE, STORAGE_IMAGE, COMBINED_IMAGE_SAMPLER, or INPUT_ATTACHMENT descriptor. Ignored otherwise. + VkImageLayout imageLayoutLayout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE). + + + VkStructureType sType + const void* pNext + VkDescriptorSet dstSetDestination descriptor set + uint32_t dstBindingBinding within the destination descriptor set to write + uint32_t dstArrayElementArray element within the destination binding to write + uint32_t descriptorCountNumber of descriptors to write (determines the size of the array pointed by pDescriptors) + VkDescriptorType descriptorTypeDescriptor type to write (determines which members of the array pointed by pDescriptors are going to be used) + const VkDescriptorImageInfo* pImageInfoSampler, image view, and layout for SAMPLER, COMBINED_IMAGE_SAMPLER, {SAMPLED,STORAGE}_IMAGE, and INPUT_ATTACHMENT descriptor types. + const VkDescriptorBufferInfo* pBufferInfoRaw buffer, size, and offset for {UNIFORM,STORAGE}_BUFFER[_DYNAMIC] descriptor types. + const VkBufferView* pTexelBufferViewBuffer view to write to the descriptor for {UNIFORM,STORAGE}_TEXEL_BUFFER descriptor types. + + + VkStructureType sType + const void* pNext + VkDescriptorSet srcSetSource descriptor set + uint32_t srcBindingBinding within the source descriptor set to copy from + uint32_t srcArrayElementArray element within the source binding to copy from + VkDescriptorSet dstSetDestination descriptor set + uint32_t dstBindingBinding within the destination descriptor set to copy to + uint32_t dstArrayElementArray element within the destination binding to copy to + uint32_t descriptorCountNumber of descriptors to write (determines the size of the array pointed by pDescriptors) + + + VkStructureType sType + const void* pNext + VkBufferUsageFlags2 usage + + + + VkStructureType sType + const void* pNext + VkBufferCreateFlags flagsBuffer creation flags + VkDeviceSize sizeSpecified in bytes + VkBufferUsageFlags usageBuffer usage flags + VkSharingMode sharingMode + uint32_t queueFamilyIndexCount + const uint32_t* pQueueFamilyIndices + + + VkStructureType sType + const void* pNext + VkBufferViewCreateFlags flags + VkBuffer buffer + VkFormat formatOptionally specifies format of elements + VkDeviceSize offsetSpecified in bytes + VkDeviceSize rangeView size specified in bytes + + + VkImageAspectFlags aspectMask + uint32_t mipLevel + uint32_t arrayLayer + + + VkImageAspectFlags aspectMask + uint32_t mipLevel + uint32_t baseArrayLayer + uint32_t layerCount + + + VkImageAspectFlags aspectMask + uint32_t baseMipLevel + uint32_t levelCount + uint32_t baseArrayLayer + uint32_t layerCount + + + VkStructureType sType + const void* pNext + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + + + VkStructureType sType + const void* pNext + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + uint32_t srcQueueFamilyIndexQueue family to transition ownership from + uint32_t dstQueueFamilyIndexQueue family to transition ownership to + VkBuffer bufferBuffer to sync + VkDeviceSize offsetOffset within the buffer to sync + VkDeviceSize sizeAmount of bytes to sync + + + VkStructureType sType + const void* pNext + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + VkImageLayout oldLayoutCurrent layout of the image + VkImageLayout newLayoutNew layout to transition the image to + uint32_t srcQueueFamilyIndexQueue family to transition ownership from + uint32_t dstQueueFamilyIndexQueue family to transition ownership to + VkImage imageImage to sync + VkImageSubresourceRange subresourceRangeSubresource range to sync + + + VkStructureType sType + const void* pNext + VkImageCreateFlags flagsImage creation flags + VkImageType imageType + VkFormat format + VkExtent3D extent + uint32_t mipLevels + uint32_t arrayLayers + VkSampleCountFlagBits samples + VkImageTiling tiling + VkImageUsageFlags usageImage usage flags + VkSharingMode sharingModeCross-queue-family sharing mode + uint32_t queueFamilyIndexCountNumber of queue families to share across + const uint32_t* pQueueFamilyIndicesArray of queue family indices to share across + VkImageLayout initialLayoutInitial image layout for all subresources + + + VkDeviceSize offsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + VkDeviceSize rowPitchSpecified in bytes + VkDeviceSize arrayPitchSpecified in bytes + VkDeviceSize depthPitchSpecified in bytes + + + VkStructureType sType + const void* pNext + VkImageViewCreateFlags flags + VkImage image + VkImageViewType viewType + VkFormat format + VkComponentMapping components + VkImageSubresourceRange subresourceRange + + + VkDeviceSize srcOffsetSpecified in bytes + VkDeviceSize dstOffsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + + + VkDeviceSize resourceOffsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + VkDeviceMemory memory + VkDeviceSize memoryOffsetSpecified in bytes + VkSparseMemoryBindFlags flags + + + VkImageSubresource subresource + VkOffset3D offset + VkExtent3D extent + VkDeviceMemory memory + VkDeviceSize memoryOffsetSpecified in bytes + VkSparseMemoryBindFlags flags + + + VkBuffer buffer + uint32_t bindCount + const VkSparseMemoryBind* pBinds + + + VkImage image + uint32_t bindCount + const VkSparseMemoryBind* pBinds + + + VkImage image + uint32_t bindCount + const VkSparseImageMemoryBind* pBinds + + + 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 + + + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsetSpecified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D extentSpecified in pixels for both compressed and uncompressed images + + + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsets[2]Specified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsets[2]Specified in pixels for both compressed and uncompressed images + + + VkDeviceSize bufferOffsetSpecified in bytes + uint32_t bufferRowLengthSpecified in texels + uint32_t bufferImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D imageExtentSpecified in pixels for both compressed and uncompressed images + + + VkDeviceAddress srcAddress + VkDeviceAddress dstAddress + VkDeviceSize sizeSpecified in bytes + + + VkDeviceAddress srcAddress + uint32_t bufferRowLengthSpecified in texels + uint32_t bufferImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D imageExtentSpecified in pixels for both compressed and uncompressed images + + + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffset + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffset + VkExtent3D extent + + + VkStructureType sType + const void* pNextnoautovalidity because this structure can be either an explicit parameter, or passed in a pNext chain + VkShaderModuleCreateFlags flags + size_t codeSizeSpecified in bytes + const uint32_t* pCodeBinary code of size codeSize + + + uint32_t bindingBinding number for this entry + VkDescriptorType descriptorTypeType of the descriptors in this binding + uint32_t descriptorCountNumber of descriptors in this binding + VkShaderStageFlags stageFlagsShader stages this binding is visible to + const VkSampler* pImmutableSamplersImmutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains count number of elements) + + + VkStructureType sType + const void* pNext + VkDescriptorSetLayoutCreateFlags flags + uint32_t bindingCountNumber of bindings in the descriptor set layout + const VkDescriptorSetLayoutBinding* pBindingsArray of descriptor set layout bindings + + + VkDescriptorType type + uint32_t descriptorCount + + + VkStructureType sType + const void* pNext + VkDescriptorPoolCreateFlags flags + uint32_t maxSets + uint32_t poolSizeCount + const VkDescriptorPoolSize* pPoolSizes + + + VkStructureType sType + const void* pNext + VkDescriptorPool descriptorPool + uint32_t descriptorSetCount + const VkDescriptorSetLayout* pSetLayouts + + + uint32_t constantIDThe SpecConstant ID specified in the BIL + uint32_t offsetOffset of the value in the data block + size_t sizeSize in bytes of the SpecConstant + + + uint32_t mapEntryCountNumber of entries in the map + const VkSpecializationMapEntry* pMapEntriesArray of map entries + size_t dataSizeSize in bytes of pData + const void* pDataPointer to SpecConstant data + + + VkStructureType sType + const void* pNext + VkPipelineShaderStageCreateFlags flags + VkShaderStageFlagBits stageShader stage + VkShaderModule moduleModule containing entry point + const char* pNameNull-terminated entry point name + const char* pNameNull-terminated entry point name + const VkSpecializationInfo* pSpecializationInfo + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + VkPipelineShaderStageCreateInfo stage + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkDeviceAddress deviceAddress + VkDeviceSize size + VkDeviceAddress pipelineDeviceAddressCaptureReplay + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags2 flags + + + + uint32_t bindingVertex buffer binding id + uint32_t strideDistance between vertices in bytes (0 = no advancement) + VkVertexInputRate inputRateThe rate at which the vertex data is consumed + + + uint32_t locationlocation of the shader vertex attrib + uint32_t bindingVertex buffer binding id + VkFormat formatformat of source data + uint32_t offsetOffset of first element in bytes from base of vertex + + + VkStructureType sType + const void* pNext + VkPipelineVertexInputStateCreateFlags flags + uint32_t vertexBindingDescriptionCountnumber of bindings + const VkVertexInputBindingDescription* pVertexBindingDescriptions + uint32_t vertexAttributeDescriptionCountnumber of attributes + const VkVertexInputAttributeDescription* pVertexAttributeDescriptions + + + VkStructureType sType + const void* pNext + VkPipelineInputAssemblyStateCreateFlags flags + VkPrimitiveTopology topology + VkBool32 primitiveRestartEnable + + + VkStructureType sType + const void* pNext + VkPipelineTessellationStateCreateFlags flags + uint32_t patchControlPoints + + + VkStructureType sType + const void* pNext + VkPipelineViewportStateCreateFlags flags + uint32_t viewportCount + const VkViewport* pViewports + uint32_t scissorCount + const VkRect2D* pScissors + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationStateCreateFlags flags + VkBool32 depthClampEnable + VkBool32 rasterizerDiscardEnable + VkPolygonMode polygonModeoptional (GL45) + VkCullModeFlags cullMode + VkFrontFace frontFace + VkBool32 depthBiasEnable + float depthBiasConstantFactor + float depthBiasClamp + float depthBiasSlopeFactor + float lineWidth + + + VkStructureType sType + const void* pNext + VkPipelineMultisampleStateCreateFlags flags + VkSampleCountFlagBits rasterizationSamplesNumber of samples used for rasterization + VkBool32 sampleShadingEnableoptional (GL45) + float minSampleShadingoptional (GL45) + const VkSampleMask* pSampleMaskArray of sampleMask words + VkBool32 alphaToCoverageEnable + VkBool32 alphaToOneEnable + + + VkBool32 blendEnable + VkBlendFactor srcColorBlendFactor + VkBlendFactor dstColorBlendFactor + VkBlendOp colorBlendOp + VkBlendFactor srcAlphaBlendFactor + VkBlendFactor dstAlphaBlendFactor + VkBlendOp alphaBlendOp + VkColorComponentFlags colorWriteMask + + + VkStructureType sType + const void* pNext + VkPipelineColorBlendStateCreateFlags flags + VkBool32 logicOpEnable + VkLogicOp logicOp + uint32_t attachmentCount# of pAttachments + const VkPipelineColorBlendAttachmentState* pAttachments + float blendConstants[4] + + + VkStructureType sType + const void* pNext + VkPipelineDynamicStateCreateFlags flags + uint32_t dynamicStateCount + const VkDynamicState* pDynamicStates + + + VkStencilOp failOp + VkStencilOp passOp + VkStencilOp depthFailOp + VkCompareOp compareOp + uint32_t compareMask + uint32_t writeMask + uint32_t reference + + + VkStructureType sType + const void* pNext + VkPipelineDepthStencilStateCreateFlags flags + VkBool32 depthTestEnable + VkBool32 depthWriteEnable + VkCompareOp depthCompareOp + VkBool32 depthBoundsTestEnableoptional (depth_bounds_test) + VkBool32 stencilTestEnable + VkStencilOpState front + VkStencilOpState back + float minDepthBounds + float maxDepthBounds + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + 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 layoutInterface layout of the pipeline + VkRenderPass renderPass + uint32_t subpass + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkPipelineCacheCreateFlags flags + size_t initialDataSizeSize of initial data to populate cache, in bytes + size_t initialDataSizeSize of initial data to populate cache, in bytes + const void* pInitialDataInitial data to populate cache + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint32_t headerSize + VkPipelineCacheHeaderVersion headerVersion + uint32_t vendorID + uint32_t deviceID + uint8_t pipelineCacheUUID[VK_UUID_SIZE] + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint64_t codeSize + uint64_t codeOffset + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint8_t pipelineIdentifier[VK_UUID_SIZE] + uint64_t pipelineMemorySize + uint64_t jsonSize + uint64_t jsonOffset + uint32_t stageIndexCount + uint32_t stageIndexStride + uint64_t stageIndexOffset + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + VkPipelineCacheHeaderVersionOne headerVersionOne + VkPipelineCacheValidationVersion validationVersion + uint32_t implementationData + uint32_t pipelineIndexCount + uint32_t pipelineIndexStride + uint64_t pipelineIndexOffset + + + VkShaderStageFlags stageFlagsWhich stages use the range + uint32_t offsetStart of the range, in bytes + uint32_t sizeSize of the range, in bytes + + + VkStructureType sType + const void* pNext + const VkPipelineBinaryKeysAndDataKHR* pKeysAndDataInfo + VkPipeline pipeline + const VkPipelineCreateInfoKHR* pPipelineCreateInfo + + + VkStructureType sType + const void* pNext + uint32_t pipelineBinaryCount + VkPipelineBinaryKHR* pPipelineBinaries + + + size_t dataSize + void* pData + + + uint32_t binaryCount + const VkPipelineBinaryKeyKHR* pPipelineBinaryKeys + const VkPipelineBinaryDataKHR* pPipelineBinaryData + + + VkStructureType sType + void* pNext + uint32_t keySize + uint8_t key[VK_MAX_PIPELINE_BINARY_KEY_SIZE_KHR] + + + VkStructureType sType + const void* pNext + uint32_t binaryCount + const VkPipelineBinaryKHR* pPipelineBinaries + + + VkStructureType sType + void* pNext + VkPipeline pipeline + + + VkStructureType sType + void* pNext + VkPipelineBinaryKHR pipelineBinary + + + VkStructureType sType + void* pNext + + + VkStructureType sType + const void* pNext + VkPipelineLayoutCreateFlags flags + uint32_t setLayoutCountNumber of descriptor sets interfaced by the pipeline + const VkDescriptorSetLayout* pSetLayoutsArray of setCount number of descriptor set layout objects defining the layout of the + uint32_t pushConstantRangeCountNumber of push-constant ranges used by the pipeline + const VkPushConstantRange* pPushConstantRangesArray of pushConstantRangeCount number of ranges used by various shader stages + + + VkStructureType sType + const void* pNext + VkSamplerCreateFlags flags + VkFilter magFilterFilter mode for magnification + VkFilter minFilterFilter mode for minifiation + VkSamplerMipmapMode mipmapModeMipmap selection mode + VkSamplerAddressMode addressModeU + VkSamplerAddressMode addressModeV + VkSamplerAddressMode addressModeW + float mipLodBias + VkBool32 anisotropyEnable + float maxAnisotropy + VkBool32 compareEnable + VkCompareOp compareOp + float minLod + float maxLod + VkBorderColor borderColor + VkBool32 unnormalizedCoordinates + + + VkStructureType sType + const void* pNext + VkCommandPoolCreateFlags flagsCommand pool creation flags + uint32_t queueFamilyIndex + + + VkStructureType sType + const void* pNext + VkCommandPool commandPool + VkCommandBufferLevel level + uint32_t commandBufferCount + + + VkStructureType sType + const void* pNext + VkRenderPass renderPassRender pass for secondary command buffers + uint32_t subpass + VkFramebuffer framebufferFramebuffer for secondary command buffers + VkBool32 occlusionQueryEnableWhether this secondary command buffer may be executed during an occlusion query + VkQueryControlFlags queryFlagsQuery flags used by this secondary command buffer, if executed during an occlusion query + VkQueryPipelineStatisticFlags pipelineStatisticsPipeline statistics that may be counted for this secondary command buffer + + + VkStructureType sType + const void* pNext + VkCommandBufferUsageFlags flagsCommand buffer usage flags + const VkCommandBufferInheritanceInfo* pInheritanceInfoPointer to inheritance info for secondary command buffers + + + VkStructureType sType + const void* pNext + VkRenderPass renderPass + VkFramebuffer framebuffer + VkRect2D renderArea + uint32_t clearValueCount + const VkClearValue* pClearValues + + + float float32[4] + int32_t int32[4] + uint32_t uint32[4] + + + float depth + uint32_t stencil + + + VkClearColorValue color + VkClearDepthStencilValue depthStencil + + + VkImageAspectFlags aspectMask + uint32_t colorAttachment + VkClearValue clearValue + + + VkAttachmentDescriptionFlags flags + VkFormat format + VkSampleCountFlagBits samples + VkAttachmentLoadOp loadOpLoad operation for color or depth data + VkAttachmentStoreOp storeOpStore operation for color or depth data + VkAttachmentLoadOp stencilLoadOpLoad operation for stencil data + VkAttachmentStoreOp stencilStoreOpStore operation for stencil data + VkImageLayout initialLayout + VkImageLayout finalLayout + + + uint32_t attachment + VkImageLayout layout + + + VkSubpassDescriptionFlags flags + VkPipelineBindPoint pipelineBindPointMust be VK_PIPELINE_BIND_POINT_GRAPHICS for now + 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 + + + uint32_t srcSubpass + uint32_t dstSubpass + VkPipelineStageFlags srcStageMask + VkPipelineStageFlags dstStageMask + VkAccessFlags srcAccessMaskMemory accesses from the source of the dependency to synchronize + VkAccessFlags dstAccessMaskMemory accesses from the destination of the dependency to synchronize + VkDependencyFlags dependencyFlags + + + 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 + + + VkStructureType sType + const void* pNext + VkEventCreateFlags flagsEvent creation flags + + + VkStructureType sType + const void* pNext + VkFenceCreateFlags flagsFence creation flags + + + VkBool32 robustBufferAccessout of bounds buffer accesses are well defined + VkBool32 fullDrawIndexUint32full 32-bit range of indices for indexed draw calls + VkBool32 imageCubeArrayimage views which are arrays of cube maps + VkBool32 independentBlendblending operations are controlled per-attachment + VkBool32 geometryShadergeometry stage + VkBool32 tessellationShadertessellation control and evaluation stage + VkBool32 sampleRateShadingper-sample shading and interpolation + VkBool32 dualSrcBlendblend operations which take two sources + VkBool32 logicOplogic operations + VkBool32 multiDrawIndirectmulti draw indirect + VkBool32 drawIndirectFirstInstanceindirect drawing can use non-zero firstInstance + VkBool32 depthClampdepth clamping + VkBool32 depthBiasClampdepth bias clamping + VkBool32 fillModeNonSolidpoint and wireframe fill modes + VkBool32 depthBoundsdepth bounds test + VkBool32 wideLineslines with width greater than 1 + VkBool32 largePointspoints with size greater than 1 + VkBool32 alphaToOnethe fragment alpha component can be forced to maximum representable alpha value + VkBool32 multiViewportviewport arrays + VkBool32 samplerAnisotropyanisotropic sampler filtering + VkBool32 textureCompressionETC2ETC texture compression formats + VkBool32 textureCompressionASTC_LDRASTC LDR texture compression formats + VkBool32 textureCompressionBCBC1-7 texture compressed formats + VkBool32 occlusionQueryPreciseprecise occlusion queries returning actual sample counts + VkBool32 pipelineStatisticsQuerypipeline statistics query + VkBool32 vertexPipelineStoresAndAtomicsstores and atomic ops on storage buffers and images are supported in vertex, tessellation, and geometry stages + VkBool32 fragmentStoresAndAtomicsstores and atomic ops on storage buffers and images are supported in the fragment stage + VkBool32 shaderTessellationAndGeometryPointSizetessellation and geometry stages can export point size + VkBool32 shaderImageGatherExtendedimage gather with runtime values and independent offsets + VkBool32 shaderStorageImageExtendedFormatsthe extended set of formats can be used for storage images + VkBool32 shaderStorageImageMultisamplemultisample images can be used for storage images + VkBool32 shaderStorageImageReadWithoutFormatread from storage image does not require format qualifier + VkBool32 shaderStorageImageWriteWithoutFormatwrite to storage image does not require format qualifier + VkBool32 shaderUniformBufferArrayDynamicIndexingarrays of uniform buffers can be accessed with dynamically uniform indices + VkBool32 shaderSampledImageArrayDynamicIndexingarrays of sampled images can be accessed with dynamically uniform indices + VkBool32 shaderStorageBufferArrayDynamicIndexingarrays of storage buffers can be accessed with dynamically uniform indices + VkBool32 shaderStorageImageArrayDynamicIndexingarrays of storage images can be accessed with dynamically uniform indices + VkBool32 shaderClipDistanceclip distance in shaders + VkBool32 shaderCullDistancecull distance in shaders + VkBool32 shaderFloat6464-bit floats (doubles) in shaders + VkBool32 shaderInt6464-bit integers in shaders + VkBool32 shaderInt1616-bit integers in shaders + VkBool32 shaderResourceResidencyshader can use texture operations that return resource residency information (requires sparseNonResident support) + VkBool32 shaderResourceMinLodshader can use texture operations that specify minimum resource LOD + VkBool32 sparseBindingSparse resources support: Resource memory can be managed at opaque page level rather than object level + VkBool32 sparseResidencyBufferSparse resources support: GPU can access partially resident buffers + VkBool32 sparseResidencyImage2DSparse resources support: GPU can access partially resident 2D (non-MSAA non-depth/stencil) images + VkBool32 sparseResidencyImage3DSparse resources support: GPU can access partially resident 3D images + VkBool32 sparseResidency2SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 2 samples + VkBool32 sparseResidency4SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 4 samples + VkBool32 sparseResidency8SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 8 samples + VkBool32 sparseResidency16SamplesSparse resources support: GPU can access partially resident MSAA 2D images with 16 samples + VkBool32 sparseResidencyAliasedSparse resources support: GPU can correctly access data aliased into multiple locations (opt-in) + VkBool32 variableMultisampleRatemultisample rate must be the same for all pipelines in a subpass + VkBool32 inheritedQueriesQueries may be inherited from primary to secondary command buffers + + + VkBool32 residencyStandard2DBlockShapeSparse resources support: GPU will access all 2D (single sample) sparse resources using the standard sparse image block shapes (based on pixel format) + VkBool32 residencyStandard2DMultisampleBlockShapeSparse resources support: GPU will access all 2D (multisample) sparse resources using the standard sparse image block shapes (based on pixel format) + VkBool32 residencyStandard3DBlockShapeSparse resources support: GPU will access all 3D sparse resources using the standard sparse image block shapes (based on pixel format) + VkBool32 residencyAlignedMipSizeSparse resources support: Images with mip level dimensions that are NOT a multiple of the sparse image block dimensions will be placed in the mip tail + VkBool32 residencyNonResidentStrictSparse resources support: GPU can consistently access non-resident regions of a resource, all reads return as if data is 0, writes are discarded + + + resource maximum sizes + uint32_t maxImageDimension1Dmax 1D image dimension + uint32_t maxImageDimension2Dmax 2D image dimension + uint32_t maxImageDimension3Dmax 3D image dimension + uint32_t maxImageDimensionCubemax cube map image dimension + uint32_t maxImageArrayLayersmax layers for image arrays + uint32_t maxTexelBufferElementsmax texel buffer size (fstexels) + uint32_t maxUniformBufferRangemax uniform buffer range (bytes) + uint32_t maxStorageBufferRangemax storage buffer range (bytes) + uint32_t maxPushConstantsSizemax size of the push constants pool (bytes) + memory limits + uint32_t maxMemoryAllocationCountmax number of device memory allocations supported + uint32_t maxSamplerAllocationCountmax number of samplers that can be allocated on a device + VkDeviceSize bufferImageGranularityGranularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage + VkDeviceSize sparseAddressSpaceSizeTotal address space available for sparse allocations (bytes) + descriptor set limits + uint32_t maxBoundDescriptorSetsmax number of descriptors sets that can be bound to a pipeline + uint32_t maxPerStageDescriptorSamplersmax number of samplers allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorUniformBuffersmax number of uniform buffers allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorStorageBuffersmax number of storage buffers allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorSampledImagesmax number of sampled images allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorStorageImagesmax number of storage images allowed per-stage in a descriptor set + uint32_t maxPerStageDescriptorInputAttachmentsmax number of input attachments allowed per-stage in a descriptor set + uint32_t maxPerStageResourcesmax number of resources allowed by a single stage + uint32_t maxDescriptorSetSamplersmax number of samplers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetUniformBuffersmax number of uniform buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetUniformBuffersDynamicmax number of dynamic uniform buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetStorageBuffersmax number of storage buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetStorageBuffersDynamicmax number of dynamic storage buffers allowed in all stages in a descriptor set + uint32_t maxDescriptorSetSampledImagesmax number of sampled images allowed in all stages in a descriptor set + uint32_t maxDescriptorSetStorageImagesmax number of storage images allowed in all stages in a descriptor set + uint32_t maxDescriptorSetInputAttachmentsmax number of input attachments allowed in all stages in a descriptor set + vertex stage limits + uint32_t maxVertexInputAttributesmax number of vertex input attribute slots + uint32_t maxVertexInputBindingsmax number of vertex input binding slots + uint32_t maxVertexInputAttributeOffsetmax vertex input attribute offset added to vertex buffer offset + uint32_t maxVertexInputBindingStridemax vertex input binding stride + uint32_t maxVertexOutputComponentsmax number of output components written by vertex shader + tessellation control stage limits + uint32_t maxTessellationGenerationLevelmax level supported by tessellation primitive generator + uint32_t maxTessellationPatchSizemax patch size (vertices) + uint32_t maxTessellationControlPerVertexInputComponentsmax number of input components per-vertex in TCS + uint32_t maxTessellationControlPerVertexOutputComponentsmax number of output components per-vertex in TCS + uint32_t maxTessellationControlPerPatchOutputComponentsmax number of output components per-patch in TCS + uint32_t maxTessellationControlTotalOutputComponentsmax total number of per-vertex and per-patch output components in TCS + tessellation evaluation stage limits + uint32_t maxTessellationEvaluationInputComponentsmax number of input components per vertex in TES + uint32_t maxTessellationEvaluationOutputComponentsmax number of output components per vertex in TES + geometry stage limits + uint32_t maxGeometryShaderInvocationsmax invocation count supported in geometry shader + uint32_t maxGeometryInputComponentsmax number of input components read in geometry stage + uint32_t maxGeometryOutputComponentsmax number of output components written in geometry stage + uint32_t maxGeometryOutputVerticesmax number of vertices that can be emitted in geometry stage + uint32_t maxGeometryTotalOutputComponentsmax total number of components (all vertices) written in geometry stage + fragment stage limits + uint32_t maxFragmentInputComponentsmax number of input components read in fragment stage + uint32_t maxFragmentOutputAttachmentsmax number of output attachments written in fragment stage + uint32_t maxFragmentDualSrcAttachmentsmax number of output attachments written when using dual source blending + uint32_t maxFragmentCombinedOutputResourcesmax total number of storage buffers, storage images and output buffers + compute stage limits + uint32_t maxComputeSharedMemorySizemax total storage size of work group local storage (bytes) + uint32_t maxComputeWorkGroupCount[3]max num of compute work groups that may be dispatched by a single command (x,y,z) + uint32_t maxComputeWorkGroupInvocationsmax total compute invocations in a single local work group + uint32_t maxComputeWorkGroupSize[3]max local size of a compute work group (x,y,z) + uint32_t subPixelPrecisionBitsnumber bits of subpixel precision in screen x and y + uint32_t subTexelPrecisionBitsnumber bits of precision for selecting texel weights + uint32_t mipmapPrecisionBitsnumber bits of precision for selecting mipmap weights + uint32_t maxDrawIndexedIndexValuemax index value for indexed draw calls (for 32-bit indices) + uint32_t maxDrawIndirectCountmax draw count for indirect drawing calls + float maxSamplerLodBiasmax absolute sampler LOD bias + float maxSamplerAnisotropymax degree of sampler anisotropy + uint32_t maxViewportsmax number of active viewports + uint32_t maxViewportDimensions[2]max viewport dimensions (x,y) + float viewportBoundsRange[2]viewport bounds range (min,max) + uint32_t viewportSubPixelBitsnumber bits of subpixel precision for viewport + size_t minMemoryMapAlignmentmin required alignment of pointers returned by MapMemory (bytes) + VkDeviceSize minTexelBufferOffsetAlignmentmin required alignment for texel buffer offsets (bytes) + VkDeviceSize minUniformBufferOffsetAlignmentmin required alignment for uniform buffer sizes and offsets (bytes) + VkDeviceSize minStorageBufferOffsetAlignmentmin required alignment for storage buffer offsets (bytes) + int32_t minTexelOffsetmin texel offset for OpTextureSampleOffset + uint32_t maxTexelOffsetmax texel offset for OpTextureSampleOffset + int32_t minTexelGatherOffsetmin texel offset for OpTextureGatherOffset + uint32_t maxTexelGatherOffsetmax texel offset for OpTextureGatherOffset + float minInterpolationOffsetfurthest negative offset for interpolateAtOffset + float maxInterpolationOffsetfurthest positive offset for interpolateAtOffset + uint32_t subPixelInterpolationOffsetBitsnumber of subpixel bits for interpolateAtOffset + uint32_t maxFramebufferWidthmax width for a framebuffer + uint32_t maxFramebufferHeightmax height for a framebuffer + uint32_t maxFramebufferLayersmax layer count for a layered framebuffer + VkSampleCountFlags framebufferColorSampleCountssupported color sample counts for a framebuffer + VkSampleCountFlags framebufferDepthSampleCountssupported depth sample counts for a framebuffer + VkSampleCountFlags framebufferStencilSampleCountssupported stencil sample counts for a framebuffer + VkSampleCountFlags framebufferNoAttachmentsSampleCountssupported sample counts for a subpass which uses no attachments + uint32_t maxColorAttachmentsmax number of color attachments per subpass + VkSampleCountFlags sampledImageColorSampleCountssupported color sample counts for a non-integer sampled image + VkSampleCountFlags sampledImageIntegerSampleCountssupported sample counts for an integer image + VkSampleCountFlags sampledImageDepthSampleCountssupported depth sample counts for a sampled image + VkSampleCountFlags sampledImageStencilSampleCountssupported stencil sample counts for a sampled image + VkSampleCountFlags storageImageSampleCountssupported sample counts for a storage image + uint32_t maxSampleMaskWordsmax number of sample mask words + VkBool32 timestampComputeAndGraphicstimestamps on graphics and compute queues + float timestampPeriodnumber of nanoseconds it takes for timestamp query value to increment by 1 + uint32_t maxClipDistancesmax number of clip distances + uint32_t maxCullDistancesmax number of cull distances + uint32_t maxCombinedClipAndCullDistancesmax combined number of user clipping + uint32_t discreteQueuePrioritiesdistinct queue priorities available + float pointSizeRange[2]range (min,max) of supported point sizes + float lineWidthRange[2]range (min,max) of supported line widths + float pointSizeGranularitygranularity of supported point sizes + float lineWidthGranularitygranularity of supported line widths + VkBool32 strictLinesline rasterization follows preferred rules + VkBool32 standardSampleLocationssupports standard sample locations for all supported sample counts + VkDeviceSize optimalBufferCopyOffsetAlignmentoptimal offset of buffer copies + VkDeviceSize optimalBufferCopyRowPitchAlignmentoptimal pitch of buffer copies + VkDeviceSize nonCoherentAtomSizeminimum size and alignment for non-coherent host-mapped device memory access + + + VkStructureType sType + const void* pNext + VkSemaphoreCreateFlags flagsSemaphore creation flags + + + VkStructureType sType + const void* pNext + VkQueryPoolCreateFlags flags + VkQueryType queryType + uint32_t queryCount + VkQueryPipelineStatisticFlags pipelineStatisticsOptional + + + VkStructureType sType + const void* pNext + VkFramebufferCreateFlags flags + VkRenderPass renderPass + uint32_t attachmentCount + const VkImageView* pAttachments + uint32_t width + uint32_t height + uint32_t layers + + + uint32_t vertexCount + uint32_t instanceCount + uint32_t firstVertex + uint32_t firstInstance + + + uint32_t indexCount + uint32_t instanceCount + uint32_t firstIndex + int32_t vertexOffset + uint32_t firstInstance + + + uint32_t x + uint32_t y + uint32_t z + + + uint32_t firstVertex + uint32_t vertexCount + + + uint32_t firstIndex + uint32_t indexCount + int32_t vertexOffset + + + 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 + + WSI extensions + + VkDisplayKHR displayHandle of the display object + const char* displayNameName of the display + VkExtent2D physicalDimensionsIn millimeters? + VkExtent2D physicalResolutionMax resolution for CRT? + VkSurfaceTransformFlagsKHR supportedTransformsone or more bits from VkSurfaceTransformFlagsKHR + VkBool32 planeReorderPossibleVK_TRUE if the overlay plane's z-order can be changed on this display. + VkBool32 persistentContentVK_TRUE if this is a "smart" display that supports self-refresh/internal buffering. + + + VkDisplayKHR currentDisplayDisplay the plane is currently associated with. Will be VK_NULL_HANDLE if the plane is not in use. + uint32_t currentStackIndexCurrent z-order of the plane. + + + VkExtent2D visibleRegionVisible scanout region. + uint32_t refreshRateNumber of times per second the display is updated. + + + VkDisplayModeKHR displayModeHandle of this display mode. + VkDisplayModeParametersKHR parametersThe parameters this mode uses. + + + VkStructureType sType + const void* pNext + VkDisplayModeCreateFlagsKHR flags + VkDisplayModeParametersKHR parametersThe parameters this mode uses. + + + VkDisplayPlaneAlphaFlagsKHR supportedAlphaTypes of alpha blending supported, if any. + VkOffset2D minSrcPositionDoes the plane have any position and extent restrictions? + VkOffset2D maxSrcPosition + VkExtent2D minSrcExtent + VkExtent2D maxSrcExtent + VkOffset2D minDstPosition + VkOffset2D maxDstPosition + VkExtent2D minDstExtent + VkExtent2D maxDstExtent + + + VkStructureType sType + const void* pNext + VkDisplaySurfaceCreateFlagsKHR flags + VkDisplayModeKHR displayModeThe mode to use when displaying this surface + uint32_t planeIndexThe plane on which this surface appears. Must be between 0 and the value returned by vkGetPhysicalDeviceDisplayPlanePropertiesKHR() in pPropertyCount. + uint32_t planeStackIndexThe z-order of the plane. + VkSurfaceTransformFlagBitsKHR transformTransform to apply to the images as part of the scanout operation + float globalAlphaGlobal alpha value. Must be between 0 and 1, inclusive. Ignored if alphaMode is not VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR + VkDisplayPlaneAlphaFlagBitsKHR alphaModeThe type of alpha blending to use. Must be one of the bits from VkDisplayPlaneCapabilitiesKHR::supportedAlpha for this display plane + VkExtent2D imageExtentsize of the images to use with this surface + + + VkStructureType sType + const void* pNext + VkDisplaySurfaceStereoTypeNV stereoTypeThe 3D stereo type to use when presenting this surface. + + + VkStructureType sType + const void* pNext + VkRect2D srcRectRectangle within the presentable image to read pixel data from when presenting to the display. + VkRect2D dstRectRectangle within the current display mode's visible region to display srcRectangle in. + VkBool32 persistentFor smart displays, use buffered mode. If the display properties member "persistentMode" is VK_FALSE, this member must always be VK_FALSE. + + + uint32_t minImageCountSupported minimum number of images for the surface + uint32_t maxImageCountSupported maximum number of images for the surface, 0 for unlimited + VkExtent2D currentExtentCurrent image width and height for the surface, (0, 0) if undefined + VkExtent2D minImageExtentSupported minimum image width and height for the surface + VkExtent2D maxImageExtentSupported maximum image width and height for the surface + uint32_t maxImageArrayLayersSupported maximum number of image layers for the surface + VkSurfaceTransformFlagsKHR supportedTransforms1 or more bits representing the transforms supported + VkSurfaceTransformFlagBitsKHR currentTransformThe surface's current transform relative to the device's natural orientation + VkCompositeAlphaFlagsKHR supportedCompositeAlpha1 or more bits representing the alpha compositing modes supported + VkImageUsageFlags supportedUsageFlagsSupported image usage flags for the surface + + + VkStructureType sType + const void* pNext + VkAndroidSurfaceCreateFlagsKHR flags + struct ANativeWindow* window + + + VkStructureType sType + const void* pNext + VkViSurfaceCreateFlagsNN flags + void* window + + + VkStructureType sType + const void* pNext + VkWaylandSurfaceCreateFlagsKHR flags + struct wl_display* display + struct wl_surface* surface + + + VkStructureType sType + const void* pNext + VkWin32SurfaceCreateFlagsKHR flags + HINSTANCE hinstance + HWND hwnd + + + VkStructureType sType + const void* pNext + VkXlibSurfaceCreateFlagsKHR flags + Display* dpy + Window window + + + VkStructureType sType + const void* pNext + VkXcbSurfaceCreateFlagsKHR flags + xcb_connection_t* connection + xcb_window_t window + + + VkStructureType sType + const void* pNext + VkDirectFBSurfaceCreateFlagsEXT flags + IDirectFB* dfb + IDirectFBSurface* surface + + + VkStructureType sType + const void* pNext + VkImagePipeSurfaceCreateFlagsFUCHSIA flags + zx_handle_t imagePipeHandle + + + VkStructureType sType + const void* pNext + VkStreamDescriptorSurfaceCreateFlagsGGP flags + GgpStreamDescriptor streamDescriptor + + + VkStructureType sType + const void* pNext + VkScreenSurfaceCreateFlagsQNX flags + struct _screen_context* context + struct _screen_window* window + + + VkFormat formatSupported pair of rendering format + VkColorSpaceKHR colorSpaceand color space for the surface + + + VkStructureType sType + const void* pNext + VkSwapchainCreateFlagsKHR flags + VkSurfaceKHR surfaceThe swapchain's target surface + uint32_t minImageCountMinimum number of presentation images the application needs + VkFormat imageFormatFormat of the presentation images + VkColorSpaceKHR imageColorSpaceColorspace of the presentation images + VkExtent2D imageExtentDimensions of the presentation images + uint32_t imageArrayLayersDetermines the number of views for multiview/stereo presentation + VkImageUsageFlags imageUsageBits indicating how the presentation images will be used + VkSharingMode imageSharingModeSharing mode used for the presentation images + uint32_t queueFamilyIndexCountNumber of queue families having access to the images in case of concurrent sharing mode + const uint32_t* pQueueFamilyIndicesArray of queue family indices having access to the images in case of concurrent sharing mode + VkSurfaceTransformFlagBitsKHR preTransformThe transform, relative to the device's natural orientation, applied to the image content prior to presentation + VkCompositeAlphaFlagBitsKHR compositeAlphaThe alpha blending mode used when compositing this surface with other surfaces in the window system + VkPresentModeKHR presentModeWhich presentation mode to use for presents on this swap chain + VkBool32 clippedSpecifies whether presentable images may be affected by window clip regions + VkSwapchainKHR oldSwapchainExisting swap chain to replace, if any + VkSwapchainKHR oldSwapchainExisting swap chain to replace, if any + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreCountNumber of semaphores to wait for before presenting + const VkSemaphore* pWaitSemaphoresSemaphores to wait for before presenting + uint32_t swapchainCountNumber of swapchains to present in this call + const VkSwapchainKHR* pSwapchainsSwapchains to present an image from + const uint32_t* pImageIndicesIndices of which presentable images to present + VkResult* pResultsOptional (i.e. if non-NULL) VkResult for each swapchain + + + VkStructureType sType + const void* pNext + VkDebugReportFlagsEXT flagsIndicates which events call this callback + PFN_vkDebugReportCallbackEXT pfnCallbackFunction pointer of a callback function + void* pUserDataData provided to callback function + + + VkStructureType sTypeMust be VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT + const void* pNext + uint32_t disabledValidationCheckCountNumber of validation checks to disable + const VkValidationCheckEXT* pDisabledValidationChecksValidation checks to disable + + + VkStructureType sTypeMust be VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT + const void* pNext + uint32_t enabledValidationFeatureCountNumber of validation features to enable + const VkValidationFeatureEnableEXT* pEnabledValidationFeaturesValidation features to enable + uint32_t disabledValidationFeatureCountNumber of validation features to disable + const VkValidationFeatureDisableEXT* pDisabledValidationFeaturesValidation features to disable + + + VkStructureType sTypeMust be VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT + const void* pNext + uint32_t settingCountNumber of settings to configure + const VkLayerSettingEXT* pSettingsValidation features to enable + + + const char* pLayerName + const char* pSettingName + VkLayerSettingTypeEXT typeThe type of the object + uint32_t valueCountNumber of values of the setting + const void* pValuesValues to pass for a setting + + + VkStructureType sType + const void* pNext + uint32_t vendorID + uint32_t deviceID + uint32_t key + uint64_t value + + + VkStructureType sType + const void* pNext + VkRasterizationOrderAMD rasterizationOrderRasterization order to use for the pipeline + + + VkStructureType sType + const void* pNext + VkDebugReportObjectTypeEXT objectTypeThe type of the object + uint64_t objectThe handle of the object, cast to uint64_t + const char* pObjectNameName to apply to the object + + + VkStructureType sType + const void* pNext + VkDebugReportObjectTypeEXT objectTypeThe type of the object + uint64_t objectThe handle of the object, cast to uint64_t + uint64_t tagNameThe name of the tag to set on the object + size_t tagSizeThe length in bytes of the tag data + const void* pTagTag data to attach to the object + + + VkStructureType sType + const void* pNext + const char* pMarkerNameName of the debug marker + float color[4]Optional color for debug marker + + + VkStructureType sType + const void* pNext + VkBool32 dedicatedAllocationWhether this image uses a dedicated allocation + + + VkStructureType sType + const void* pNext + VkBool32 dedicatedAllocationWhether this buffer uses a dedicated allocation + + + VkStructureType sType + const void* pNext + VkImage imageImage that this allocation will be bound to + VkBuffer bufferBuffer that this allocation will be bound to + + + VkImageFormatProperties imageFormatProperties + VkExternalMemoryFeatureFlagsNV externalMemoryFeatures + VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes + VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagsNV handleTypes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagsNV handleTypes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagsNV handleType + HANDLE handle + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + + + VkStructureType sType + const void* pNext + NvSciBufAttrList pAttributes + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + NvSciBufObj handle + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkBool32 sciBufImport + VkBool32 sciBufExport + + + + VkStructureType sType + const void* pNext + uint32_t acquireCount + const VkDeviceMemory* pAcquireSyncs + const uint64_t* pAcquireKeys + const uint32_t* pAcquireTimeoutMilliseconds + uint32_t releaseCount + const VkDeviceMemory* pReleaseSyncs + const uint64_t* pReleaseKeys + + + VkStructureType sType + void* pNext + VkBool32 deviceGeneratedCommands + + + VkStructureType sType + void* pNext + VkBool32 deviceGeneratedCompute + VkBool32 deviceGeneratedComputePipelines + VkBool32 deviceGeneratedComputeCaptureReplay + + + VkStructureType sType + const void* pNext + uint32_t privateDataSlotRequestCount + + + + VkStructureType sType + const void* pNext + VkPrivateDataSlotCreateFlags flags + + + + VkStructureType sType + void* pNext + VkBool32 privateData + + + + VkStructureType sType + void* pNext + uint32_t maxGraphicsShaderGroupCount + uint32_t maxIndirectSequenceCount + uint32_t maxIndirectCommandsTokenCount + uint32_t maxIndirectCommandsStreamCount + uint32_t maxIndirectCommandsTokenOffset + uint32_t maxIndirectCommandsStreamStride + uint32_t minSequencesCountBufferOffsetAlignment + uint32_t minSequencesIndexBufferOffsetAlignment + uint32_t minIndirectCommandsBufferOffsetAlignment + + + VkStructureType sType + void* pNext + VkBool32 clusterAccelerationStructure + + + VkStructureType sType + void* pNext + uint32_t maxVerticesPerCluster + uint32_t maxTrianglesPerCluster + uint32_t clusterScratchByteAlignment + uint32_t clusterByteAlignment + uint32_t clusterTemplateByteAlignment + uint32_t clusterBottomLevelByteAlignment + uint32_t clusterTemplateBoundsByteAlignment + uint32_t maxClusterGeometryIndex + + + VkDeviceAddress startAddress + VkDeviceSize strideInBytesSpecified in bytes + + + VkStructureType sType + void* pNext + VkBool32 allowClusterAccelerationStructure + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + uint32_t geometryIndex:24 + uint32_t reserved:5 + uint32_t geometryFlags:3 + + + VkDeviceAddress srcAccelerationStructure + + + uint32_t clusterReferencesCount + uint32_t clusterReferencesStride + VkDeviceAddress clusterReferences + + + VkDeviceAddress clusterTemplateAddress + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + uint32_t clusterID + VkClusterAccelerationStructureClusterFlagsNV clusterFlags + uint32_t triangleCount:9 + uint32_t vertexCount:9 + uint32_t positionTruncateBitCount:6 + uint32_t indexType:4 + uint32_t opacityMicromapIndexType:4 + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags + uint16_t indexBufferStride + uint16_t vertexBufferStride + uint16_t geometryIndexAndFlagsBufferStride + uint16_t opacityMicromapIndexBufferStride + VkDeviceAddress indexBuffer + VkDeviceAddress vertexBuffer + VkDeviceAddress geometryIndexAndFlagsBuffer + VkDeviceAddress opacityMicromapArray + VkDeviceAddress opacityMicromapIndexBuffer + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + uint32_t clusterID + VkClusterAccelerationStructureClusterFlagsNV clusterFlags + uint32_t triangleCount:9 + uint32_t vertexCount:9 + uint32_t positionTruncateBitCount:6 + uint32_t indexType:4 + uint32_t opacityMicromapIndexType:4 + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags + uint16_t indexBufferStride + uint16_t vertexBufferStride + uint16_t geometryIndexAndFlagsBufferStride + uint16_t opacityMicromapIndexBufferStride + VkDeviceAddress indexBuffer + VkDeviceAddress vertexBuffer + VkDeviceAddress geometryIndexAndFlagsBuffer + VkDeviceAddress opacityMicromapArray + VkDeviceAddress opacityMicromapIndexBuffer + VkDeviceAddress instantiationBoundingBoxLimit + + + uint32_t clusterIdOffset + uint32_t geometryIndexOffset:24 + uint32_t reserved:8 + VkDeviceAddress clusterTemplateAddress + VkStridedDeviceAddressNV vertexBuffer + + + VkStructureType sType + void* pNext + uint32_t maxTotalClusterCount + uint32_t maxClusterCountPerAccelerationStructure + + + VkStructureType sType + void* pNext + VkFormat vertexFormat + uint32_t maxGeometryIndexValue + uint32_t maxClusterUniqueGeometryCount + uint32_t maxClusterTriangleCount + uint32_t maxClusterVertexCount + uint32_t maxTotalTriangleCount + uint32_t maxTotalVertexCount + uint32_t minPositionTruncateBitCount + + + VkStructureType sType + void* pNext + VkClusterAccelerationStructureTypeNV type + VkBool32 noMoveOverlap + VkDeviceSize maxMovedBytes + + + VkClusterAccelerationStructureClustersBottomLevelInputNV* pClustersBottomLevel + VkClusterAccelerationStructureTriangleClusterInputNV* pTriangleClusters + VkClusterAccelerationStructureMoveObjectsInputNV* pMoveObjects + + + VkStructureType sType + void* pNext + uint32_t maxAccelerationStructureCount + VkBuildAccelerationStructureFlagsKHR flags + VkClusterAccelerationStructureOpTypeNV opType + VkClusterAccelerationStructureOpModeNV opMode + VkClusterAccelerationStructureOpInputNV opInput + + + VkStructureType sType + void* pNext + VkClusterAccelerationStructureInputInfoNV input + VkDeviceAddress dstImplicitData + VkDeviceAddress scratchData + VkStridedDeviceAddressRegionKHR dstAddressesArray + VkStridedDeviceAddressRegionKHR dstSizesArray + VkStridedDeviceAddressRegionKHR srcInfosArray + VkDeviceAddress srcInfosCount + VkClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags + + + VkStructureType sType + void* pNext + uint32_t maxMultiDrawCount + + + VkStructureType sType + const void* pNext + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStages + const VkPipelineVertexInputStateCreateInfo* pVertexInputState + const VkPipelineTessellationStateCreateInfo* pTessellationState + + + VkStructureType sType + const void* pNext + uint32_t groupCount + const VkGraphicsShaderGroupCreateInfoNV* pGroups + uint32_t pipelineCount + const VkPipeline* pPipelines + + + uint32_t groupIndex + + + VkDeviceAddress bufferAddress + uint32_t size + VkIndexType indexType + + + VkDeviceAddress bufferAddress + uint32_t size + uint32_t stride + + + uint32_t data + + + VkBuffer buffer + VkDeviceSize offset + + + VkStructureType sType + const void* pNext + VkIndirectCommandsTokenTypeNV tokenType + uint32_t stream + uint32_t offset + uint32_t vertexBindingUnit + VkBool32 vertexDynamicStride + VkPipelineLayout pushconstantPipelineLayout + VkShaderStageFlags pushconstantShaderStageFlags + uint32_t pushconstantOffset + uint32_t pushconstantSize + VkIndirectStateFlagsNV indirectStateFlags + uint32_t indexTypeCount + const VkIndexType* pIndexTypes + const uint32_t* pIndexTypeValues + + + VkStructureType sType + const void* pNext + VkIndirectCommandsLayoutUsageFlagsNV flags + VkPipelineBindPoint pipelineBindPoint + uint32_t tokenCount + const VkIndirectCommandsLayoutTokenNV* pTokens + uint32_t streamCount + const uint32_t* pStreamStrides + + + VkStructureType sType + const void* pNext + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + VkIndirectCommandsLayoutNV indirectCommandsLayout + uint32_t streamCount + const VkIndirectCommandsStreamNV* pStreams + uint32_t sequencesCount + VkBuffer preprocessBuffer + VkDeviceSize preprocessOffset + VkDeviceSize preprocessSize + VkBuffer sequencesCountBuffer + VkDeviceSize sequencesCountOffset + VkBuffer sequencesIndexBuffer + VkDeviceSize sequencesIndexOffset + + + VkStructureType sType + const void* pNext + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + VkIndirectCommandsLayoutNV indirectCommandsLayout + uint32_t maxSequencesCount + + + VkStructureType sType + const void* pNext + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + + + VkDeviceAddress pipelineAddress + + + VkStructureType sType + void* pNext + VkPhysicalDeviceFeatures features + + + + VkStructureType sType + void* pNext + VkPhysicalDeviceProperties properties + + + + VkStructureType sType + void* pNext + VkFormatProperties formatProperties + + + + VkStructureType sType + void* pNext + VkImageFormatProperties imageFormatProperties + + + + VkStructureType sType + const void* pNext + VkFormat format + VkImageType type + VkImageTiling tiling + VkImageUsageFlags usage + VkImageCreateFlags flags + + + + VkStructureType sType + void* pNext + VkQueueFamilyProperties queueFamilyProperties + + + + VkStructureType sType + void* pNext + VkPhysicalDeviceMemoryProperties memoryProperties + + + + VkStructureType sType + void* pNext + VkSparseImageFormatProperties properties + + + + VkStructureType sType + const void* pNext + VkFormat format + VkImageType type + VkSampleCountFlagBits samples + VkImageUsageFlags usage + VkImageTiling tiling + + + + VkStructureType sType + void* pNext + uint32_t maxPushDescriptors + + + + uint8_t major + uint8_t minor + uint8_t subminor + uint8_t patch + + + + VkStructureType sType + void* pNext + VkDriverId driverID + char driverName[VK_MAX_DRIVER_NAME_SIZE] + char driverInfo[VK_MAX_DRIVER_INFO_SIZE] + VkConformanceVersion conformanceVersion + + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentRegionKHR* pRegionsThe regions that have changed + + + uint32_t rectangleCountNumber of rectangles in pRectangles + const VkRectLayerKHR* pRectanglesArray of rectangles that have changed in a swapchain's image(s) + + + VkOffset2D offsetupper-left corner of a rectangle that has not changed, in pixels of a presentation images + VkExtent2D extentDimensions of a rectangle that has not changed, in pixels of a presentation images + uint32_t layerLayer of a swapchain's image(s), for stereoscopic-3D images + + + VkStructureType sType + void* pNext + VkBool32 variablePointersStorageBuffer + VkBool32 variablePointers + + + + + + VkExternalMemoryFeatureFlags externalMemoryFeatures + VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes + VkExternalMemoryHandleTypeFlags compatibleHandleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalMemoryProperties externalMemoryProperties + + + + VkStructureType sType + const void* pNext + VkBufferCreateFlags flags + VkBufferUsageFlags usage + VkExternalMemoryHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalMemoryProperties externalMemoryProperties + + + + 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 + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + HANDLE handle + LPCWSTR name + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + LPCWSTR name + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + zx_handle_t handle + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + int fd + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + uint32_t acquireCount + const VkDeviceMemory* pAcquireSyncs + const uint64_t* pAcquireKeys + const uint32_t* pAcquireTimeouts + uint32_t releaseCount + const VkDeviceMemory* pReleaseSyncs + const uint64_t* pReleaseKeys + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + void* handle + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalSemaphoreHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes + VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes + VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures + + + + VkStructureType sType + const void* pNext + VkExternalSemaphoreHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkSemaphoreImportFlags flags + VkExternalSemaphoreHandleTypeFlagBits handleType + HANDLE handle + LPCWSTR name + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + LPCWSTR name + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreValuesCount + const uint64_t* pWaitSemaphoreValues + uint32_t signalSemaphoreValuesCount + const uint64_t* pSignalSemaphoreValues + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkSemaphoreImportFlags flags + VkExternalSemaphoreHandleTypeFlagBits handleType + int fd + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkSemaphoreImportFlags flags + VkExternalSemaphoreHandleTypeFlagBits handleType + zx_handle_t zirconHandle + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalFenceHandleTypeFlagBits handleType + + + + VkStructureType sType + void* pNext + VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes + VkExternalFenceHandleTypeFlags compatibleHandleTypes + VkExternalFenceFeatureFlags externalFenceFeatures + + + + VkStructureType sType + const void* pNext + VkExternalFenceHandleTypeFlags handleTypes + + + + VkStructureType sType + const void* pNext + VkFence fence + VkFenceImportFlags flags + VkExternalFenceHandleTypeFlagBits handleType + HANDLE handle + LPCWSTR name + + + VkStructureType sType + const void* pNext + const SECURITY_ATTRIBUTES* pAttributes + DWORD dwAccess + LPCWSTR name + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkFence fence + VkFenceImportFlags flags + VkExternalFenceHandleTypeFlagBits handleType + int fd + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + NvSciSyncAttrList pAttributes + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + void* handle + + + VkStructureType sType + const void* pNext + VkFence fence + VkExternalFenceHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + NvSciSyncAttrList pAttributes + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + void* handle + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkExternalSemaphoreHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkSciSyncClientTypeNV clientType + VkSciSyncPrimitiveTypeNV primitiveType + + + VkStructureType sType + void* pNext + VkBool32 sciSyncFence + VkBool32 sciSyncSemaphore + VkBool32 sciSyncImport + VkBool32 sciSyncExport + + + VkStructureType sType + void* pNext + VkBool32 sciSyncFence + VkBool32 sciSyncSemaphore2 + VkBool32 sciSyncImport + VkBool32 sciSyncExport + + + VkStructureType sType + const void* pNext + NvSciSyncObj handle + + + VkStructureType sType + const void* pNext + VkSemaphoreSciSyncPoolNV semaphorePool + const NvSciSyncFence* pFence + + + VkStructureType sType + const void* pNext + uint32_t semaphoreSciSyncPoolRequestCount + + + VkStructureType sType + void* pNext + VkBool32 multiviewMultiple views in a render pass + VkBool32 multiviewGeometryShaderMultiple views in a render pass w/ geometry shader + VkBool32 multiviewTessellationShaderMultiple views in a render pass w/ tessellation shader + + + + VkStructureType sType + void* pNext + uint32_t maxMultiviewViewCountmax number of views in a subpass + uint32_t maxMultiviewInstanceIndexmax instance index for a draw in a multiview subpass + + + + 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 + + + + VkStructureType sType + void* pNext + uint32_t minImageCountSupported minimum number of images for the surface + uint32_t maxImageCountSupported maximum number of images for the surface, 0 for unlimited + VkExtent2D currentExtentCurrent image width and height for the surface, (0, 0) if undefined + VkExtent2D minImageExtentSupported minimum image width and height for the surface + VkExtent2D maxImageExtentSupported maximum image width and height for the surface + uint32_t maxImageArrayLayersSupported maximum number of image layers for the surface + VkSurfaceTransformFlagsKHR supportedTransforms1 or more bits representing the transforms supported + VkSurfaceTransformFlagBitsKHR currentTransformThe surface's current transform relative to the device's natural orientation + VkCompositeAlphaFlagsKHR supportedCompositeAlpha1 or more bits representing the alpha compositing modes supported + VkImageUsageFlags supportedUsageFlagsSupported image usage flags for the surface + VkSurfaceCounterFlagsEXT supportedSurfaceCounters + + + VkStructureType sType + const void* pNext + VkDisplayPowerStateEXT powerState + + + VkStructureType sType + const void* pNext + VkDeviceEventTypeEXT deviceEvent + + + VkStructureType sType + const void* pNext + VkDisplayEventTypeEXT displayEvent + + + VkStructureType sType + const void* pNext + VkSurfaceCounterFlagsEXT surfaceCounters + + + VkStructureType sType + void* pNext + uint32_t physicalDeviceCount + VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE] + VkBool32 subsetAllocation + + + + VkStructureType sType + const void* pNext + VkMemoryAllocateFlags flags + uint32_t deviceMask + + + + VkStructureType sType + const void* pNext + VkBuffer buffer + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + + VkStructureType sType + const void* pNext + uint32_t deviceIndexCount + const uint32_t* pDeviceIndices + + + + VkStructureType sType + const void* pNext + VkImage image + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + + VkStructureType sType + const void* pNext + uint32_t deviceIndexCount + const uint32_t* pDeviceIndices + uint32_t splitInstanceBindRegionCount + const VkRect2D* pSplitInstanceBindRegions + + + + VkStructureType sType + const void* pNext + uint32_t deviceMask + uint32_t deviceRenderAreaCount + const VkRect2D* pDeviceRenderAreas + + + + VkStructureType sType + const void* pNext + uint32_t deviceMask + + + + 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 + + + + VkStructureType sType + const void* pNext + uint32_t resourceDeviceIndex + uint32_t memoryDeviceIndex + + + + VkStructureType sType + void* pNext + uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE] + VkDeviceGroupPresentModeFlagsKHR modes + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + uint32_t imageIndex + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchain + uint64_t timeout + VkSemaphore semaphore + VkFence fence + uint32_t deviceMask + + + VkStructureType sType + const void* pNext + uint32_t swapchainCount + const uint32_t* pDeviceMasks + VkDeviceGroupPresentModeFlagBitsKHR mode + + + VkStructureType sType + const void* pNext + uint32_t physicalDeviceCount + const VkPhysicalDevice* pPhysicalDevices + + + + VkStructureType sType + const void* pNext + VkDeviceGroupPresentModeFlagsKHR modes + + + uint32_t dstBindingBinding within the destination descriptor set to write + uint32_t dstArrayElementArray element within the destination binding to write + uint32_t descriptorCountNumber of descriptors to write + VkDescriptorType descriptorTypeDescriptor type to write + size_t offsetOffset into pData where the descriptors to update are stored + size_t strideStride between two descriptors in pData when writing more than one descriptor + + + + VkStructureType sType + const void* pNext + VkDescriptorUpdateTemplateCreateFlags flags + uint32_t descriptorUpdateEntryCountNumber of descriptor update entries to use for the update template + const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntriesDescriptor update entries for the template + VkDescriptorUpdateTemplateType templateType + VkDescriptorSetLayout descriptorSetLayout + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout pipelineLayoutIf used for push descriptors, this is the only allowed layout + uint32_t set + + + + float x + float y + + + VkStructureType sType + void* pNext + VkBool32 presentIdPresent ID in VkPresentInfoKHR + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const uint64_t* pPresentIdsPresent ID values for each swapchain + + + VkStructureType sType + void* pNext + VkBool32 presentId2Present ID2 in VkPresentInfoKHR + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const uint64_t* pPresentIdsPresent ID values for each swapchain + + + VkStructureType sType + const void* pNext + uint64_t presentId + uint64_t timeout + + + VkStructureType sType + void* pNext + VkBool32 presentWaitvkWaitForPresentKHR is supported + + + VkStructureType sType + void* pNext + VkBool32 presentWait2vkWaitForPresent2KHR is supported + + + Display primary in chromaticity coordinates + VkStructureType sType + const void* pNext + From SMPTE 2086 + VkXYColorEXT displayPrimaryRedDisplay primary's Red + VkXYColorEXT displayPrimaryGreenDisplay primary's Green + VkXYColorEXT displayPrimaryBlueDisplay primary's Blue + VkXYColorEXT whitePointDisplay primary's Blue + float maxLuminanceDisplay maximum luminance + float minLuminanceDisplay minimum luminance + From CTA 861.3 + float maxContentLightLevelContent maximum luminance + float maxFrameAverageLightLevel + + + VkStructureType sType + const void* pNext + size_t dynamicMetadataSizeSpecified in bytes + const void* pDynamicMetadataBinary code of size dynamicMetadataSize + + + VkStructureType sType + void* pNext + VkBool32 localDimmingSupport + + + VkStructureType sType + const void* pNext + VkBool32 localDimmingEnable + + + uint64_t refreshDurationNumber of nanoseconds from the start of one refresh cycle to the next + + + uint32_t presentIDApplication-provided identifier, previously given to vkQueuePresentKHR + uint64_t desiredPresentTimeEarliest time an image should have been presented, previously given to vkQueuePresentKHR + uint64_t actualPresentTimeTime the image was actually displayed + uint64_t earliestPresentTimeEarliest time the image could have been displayed + uint64_t presentMarginHow early vkQueuePresentKHR was processed vs. how soon it needed to be and make earliestPresentTime + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentTimeGOOGLE* pTimesThe earliest times to present images + + + uint32_t presentIDApplication-provided identifier + uint64_t desiredPresentTimeEarliest time an image should be presented + + + VkStructureType sType + const void* pNext + VkIOSSurfaceCreateFlagsMVK flags + const void* pView + + + VkStructureType sType + const void* pNext + VkMacOSSurfaceCreateFlagsMVK flags + const void* pView + + + VkStructureType sType + const void* pNext + VkMetalSurfaceCreateFlagsEXT flags + const CAMetalLayer* pLayer + + + float xcoeff + float ycoeff + + + VkStructureType sType + const void* pNext + VkBool32 viewportWScalingEnable + uint32_t viewportCount + const VkViewportWScalingNV* pViewportWScalings + + + VkViewportCoordinateSwizzleNV x + VkViewportCoordinateSwizzleNV y + VkViewportCoordinateSwizzleNV z + VkViewportCoordinateSwizzleNV w + + + VkStructureType sType + const void* pNext + VkPipelineViewportSwizzleStateCreateFlagsNV flags + uint32_t viewportCount + const VkViewportSwizzleNV* pViewportSwizzles + + + VkStructureType sType + void* pNext + uint32_t maxDiscardRectanglesmax number of active discard rectangles + + + VkStructureType sType + const void* pNext + VkPipelineDiscardRectangleStateCreateFlagsEXT flags + VkDiscardRectangleModeEXT discardRectangleMode + uint32_t discardRectangleCount + const VkRect2D* pDiscardRectangles + + + VkStructureType sType + void* pNext + VkBool32 perViewPositionAllComponents + + + uint32_t subpass + uint32_t inputAttachmentIndex + VkImageAspectFlags aspectMask + + + + VkStructureType sType + const void* pNext + uint32_t aspectReferenceCount + const VkInputAttachmentAspectReference* pAspectReferences + + + + VkStructureType sType + const void* pNext + VkSurfaceKHR surface + + + VkStructureType sType + void* pNext + VkSurfaceCapabilitiesKHR surfaceCapabilities + + + VkStructureType sType + void* pNext + VkSurfaceFormatKHR surfaceFormat + + + VkStructureType sType + void* pNext + VkDisplayPropertiesKHR displayProperties + + + VkStructureType sType + void* pNext + VkDisplayPlanePropertiesKHR displayPlaneProperties + + + VkStructureType sType + void* pNext + VkDisplayModePropertiesKHR displayModeProperties + + + VkStructureType sType + const void* pNext + VkBool32 hdmi3DSupportedWhether this mode supports HDMI 3D stereo rendering. + + + VkStructureType sType + const void* pNext + VkDisplayModeKHR mode + uint32_t planeIndex + + + VkStructureType sType + void* pNext + VkDisplayPlaneCapabilitiesKHR capabilities + + + VkStructureType sType + void* pNext + VkImageUsageFlags sharedPresentSupportedUsageFlagsSupported image usage flags if swapchain created using a shared present mode + + + VkStructureType sType + void* pNext + VkBool32 storageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock + VkBool32 uniformAndStorageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock and Block + VkBool32 storagePushConstant1616-bit integer/floating-point variables supported in PushConstant + VkBool32 storageInputOutput1616-bit integer/floating-point variables supported in shader inputs and outputs + + + + VkStructureType sType + void* pNext + uint32_t subgroupSizeThe size of a subgroup for this queue. + VkShaderStageFlags supportedStagesBitfield of what shader stages support subgroup operations + VkSubgroupFeatureFlags supportedOperationsBitfield of what subgroup operations are supported. + VkBool32 quadOperationsInAllStagesFlag to specify whether quad operations are available in all stages. + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupExtendedTypesFlag to specify whether subgroup operations with extended types are supported + + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + + VkStructureType sType + const void* pNext + const VkBufferCreateInfo* pCreateInfo + + + + VkStructureType sType + const void* pNext + VkImage image + + + + VkStructureType sType + const void* pNext + VkImage image + + + + VkStructureType sType + const void* pNext + const VkImageCreateInfo* pCreateInfo + VkImageAspectFlagBits planeAspect + + + + VkStructureType sType + void* pNext + VkMemoryRequirements memoryRequirements + + + + VkStructureType sType + void* pNext + VkSparseImageMemoryRequirements memoryRequirements + + + + VkStructureType sType + void* pNext + VkPointClippingBehavior pointClippingBehavior + + + + VkStructureType sType + void* pNext + VkBool32 prefersDedicatedAllocation + VkBool32 requiresDedicatedAllocation + + + + VkStructureType sType + const void* pNext + VkImage imageImage that this allocation will be bound to + VkBuffer bufferBuffer that this allocation will be bound to + + + + VkStructureType sType + const void* pNext + VkImageUsageFlags usage + + + VkStructureType sType + const void* pNext + uint32_t sliceOffset + uint32_t sliceCount + + + + VkStructureType sType + const void* pNext + VkTessellationDomainOrigin domainOrigin + + + + VkStructureType sType + const void* pNext + VkSamplerYcbcrConversion conversion + + + + VkStructureType sType + const void* pNext + VkFormat format + VkSamplerYcbcrModelConversion ycbcrModel + VkSamplerYcbcrRange ycbcrRange + VkComponentMapping components + VkChromaLocation xChromaOffset + VkChromaLocation yChromaOffset + VkFilter chromaFilter + VkBool32 forceExplicitReconstruction + + + + VkStructureType sType + const void* pNext + VkImageAspectFlagBits planeAspect + + + + VkStructureType sType + const void* pNext + VkImageAspectFlagBits planeAspect + + + + VkStructureType sType + void* pNext + VkBool32 samplerYcbcrConversionSampler color conversion supported + + + + VkStructureType sType + void* pNext + uint32_t combinedImageSamplerDescriptorCount + + + + VkStructureType sType + void* pNext + VkBool32 supportsTextureGatherLODBiasAMD + + + VkStructureType sType + const void* pNext + VkBuffer buffer + VkDeviceSize offset + VkConditionalRenderingFlagsEXT flags + + + VkStructureType sType + const void* pNext + VkBool32 protectedSubmitSubmit protected command buffers + + + VkStructureType sType + void* pNext + VkBool32 protectedMemory + + + VkStructureType sType + void* pNext + VkBool32 protectedNoFault + + + VkStructureType sType + const void* pNext + VkDeviceQueueCreateFlags flags + uint32_t queueFamilyIndex + uint32_t queueIndex + + + VkStructureType sType + const void* pNext + VkPipelineCoverageToColorStateCreateFlagsNV flags + VkBool32 coverageToColorEnable + uint32_t coverageToColorLocation + + + VkStructureType sType + void* pNext + VkBool32 filterMinmaxSingleComponentFormats + VkBool32 filterMinmaxImageComponentMapping + + + + float x + float y + + + VkStructureType sType + const void* pNext + VkSampleCountFlagBits sampleLocationsPerPixel + VkExtent2D sampleLocationGridSize + uint32_t sampleLocationsCount + const VkSampleLocationEXT* pSampleLocations + + + uint32_t attachmentIndex + VkSampleLocationsInfoEXT sampleLocationsInfo + + + uint32_t subpassIndex + VkSampleLocationsInfoEXT sampleLocationsInfo + + + VkStructureType sType + const void* pNext + uint32_t attachmentInitialSampleLocationsCount + const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations + uint32_t postSubpassSampleLocationsCount + const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations + + + VkStructureType sType + const void* pNext + VkBool32 sampleLocationsEnable + VkSampleLocationsInfoEXT sampleLocationsInfo + + + VkStructureType sType + void* pNext + VkSampleCountFlags sampleLocationSampleCounts + VkExtent2D maxSampleLocationGridSize + float sampleLocationCoordinateRange[2] + uint32_t sampleLocationSubPixelBits + VkBool32 variableSampleLocations + + + VkStructureType sType + void* pNext + VkExtent2D maxSampleLocationGridSize + + + VkStructureType sType + const void* pNext + VkSamplerReductionMode reductionMode + + + + VkStructureType sType + void* pNext + VkBool32 advancedBlendCoherentOperations + + + VkStructureType sType + void* pNext + VkBool32 multiDraw + + + VkStructureType sType + void* pNext + uint32_t advancedBlendMaxColorAttachments + VkBool32 advancedBlendIndependentBlend + VkBool32 advancedBlendNonPremultipliedSrcColor + VkBool32 advancedBlendNonPremultipliedDstColor + VkBool32 advancedBlendCorrelatedOverlap + VkBool32 advancedBlendAllOperations + + + VkStructureType sType + const void* pNext + VkBool32 srcPremultiplied + VkBool32 dstPremultiplied + VkBlendOverlapEXT blendOverlap + + + VkStructureType sType + void* pNext + VkBool32 inlineUniformBlock + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind + + + + VkStructureType sType + void* pNext + uint32_t maxInlineUniformBlockSize + uint32_t maxPerStageDescriptorInlineUniformBlocks + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks + uint32_t maxDescriptorSetInlineUniformBlocks + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks + + + + VkStructureType sType + const void* pNext + uint32_t dataSize + const void* pData + + + + VkStructureType sType + const void* pNext + uint32_t maxInlineUniformBlockBindings + + + + VkStructureType sType + const void* pNext + VkPipelineCoverageModulationStateCreateFlagsNV flags + VkCoverageModulationModeNV coverageModulationMode + VkBool32 coverageModulationTableEnable + uint32_t coverageModulationTableCount + const float* pCoverageModulationTable + + + VkStructureType sType + const void* pNext + uint32_t viewFormatCount + const VkFormat* pViewFormats + + + + VkStructureType sType + const void* pNext + VkValidationCacheCreateFlagsEXT flags + size_t initialDataSize + const void* pInitialData + + + VkStructureType sType + const void* pNext + VkValidationCacheEXT validationCache + + + VkStructureType sType + void* pNext + uint32_t maxPerSetDescriptors + VkDeviceSize maxMemoryAllocationSize + + + + VkStructureType sType + void* pNext + VkBool32 maintenance4 + + + + VkStructureType sType + void* pNext + VkDeviceSize maxBufferSize + + + + VkStructureType sType + void* pNext + VkBool32 maintenance5 + + + + VkStructureType sType + void* pNext + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting + VkBool32 depthStencilSwizzleOneSupport + VkBool32 polygonModePointSize + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram + VkBool32 nonStrictWideLinesUseParallelogram + + + + VkStructureType sType + void* pNext + VkBool32 maintenance6 + + + + VkStructureType sType + void* pNext + VkBool32 blockTexelViewCompatibleMultipleLayers + uint32_t maxCombinedImageSamplerDescriptorCount + VkBool32 fragmentShadingRateClampCombinerInputs + + + + VkStructureType sType + void* pNext + VkBool32 maintenance7 + + + VkStructureType sType + void* pNext + VkBool32 robustFragmentShadingRateAttachmentAccess + VkBool32 separateDepthStencilAttachmentAccess + uint32_t maxDescriptorSetTotalUniformBuffersDynamic + uint32_t maxDescriptorSetTotalStorageBuffersDynamic + uint32_t maxDescriptorSetTotalBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic + uint32_t maxDescriptorSetUpdateAfterBindTotalBuffersDynamic + + + VkStructureType sType + void* pNext + uint32_t layeredApiCount + VkPhysicalDeviceLayeredApiPropertiesKHR* pLayeredApisOutput list of layered implementations underneath the physical device + + + VkStructureType sType + void* pNext + uint32_t vendorID + uint32_t deviceID + VkPhysicalDeviceLayeredApiKHR layeredAPI + char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] + + + VkStructureType sType + void* pNext + VkPhysicalDeviceProperties2 properties + + + VkStructureType sType + void* pNext + VkBool32 maintenance8 + + + VkStructureType sType + void* pNext + VkBool32 maintenance9 + + + VkStructureType sType + void* pNext + VkBool32 image2DViewOf3DSparse + VkDefaultVertexAttributeValueKHR defaultVertexAttributeValue + + + VkStructureType sType + void* pNext + uint32_t optimalImageTransferToQueueFamilies + + + VkStructureType sType + const void* pNext + uint32_t viewMask + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + + + + VkStructureType sType + void* pNext + VkBool32 supported + + + + VkStructureType sType + void* pNext + VkBool32 shaderDrawParameters + + + + VkStructureType sType + void* pNext + VkBool32 shaderFloat1616-bit floats (halfs) in shaders + VkBool32 shaderInt88-bit integers in shaders + + + + + VkStructureType sType + void* pNext + VkShaderFloatControlsIndependence denormBehaviorIndependence + VkShaderFloatControlsIndependence roundingModeIndependence + VkBool32 shaderSignedZeroInfNanPreserveFloat16An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat32An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat64An implementation can preserve signed zero, nan, inf + VkBool32 shaderDenormPreserveFloat16An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat32An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat64An implementation can preserve denormals + VkBool32 shaderDenormFlushToZeroFloat16An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat32An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat64An implementation can flush to zero denormals + VkBool32 shaderRoundingModeRTEFloat16An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat32An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat64An implementation can support RTE + VkBool32 shaderRoundingModeRTZFloat16An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat32An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat64An implementation can support RTZ + + + + VkStructureType sType + void* pNext + VkBool32 hostQueryReset + + + + uint64_t consumer + uint64_t producer + + + VkStructureType sType + const void* pNext + const void* handle + int stride + int format + int usage + VkNativeBufferUsage2ANDROID usage2 + + + VkStructureType sType + const void* pNext + VkSwapchainImageUsageFlagsANDROID usage + + + VkStructureType sType + const void* pNext + VkBool32 sharedImage + + + uint32_t numUsedVgprs + uint32_t numUsedSgprs + uint32_t ldsSizePerLocalWorkGroup + size_t ldsUsageSizeInBytes + size_t scratchMemUsageInBytes + + + VkShaderStageFlags shaderStageMask + VkShaderResourceUsageAMD resourceUsage + uint32_t numPhysicalVgprs + uint32_t numPhysicalSgprs + uint32_t numAvailableVgprs + uint32_t numAvailableSgprs + uint32_t computeWorkGroupSize[3] + + + VkStructureType sType + const void* pNext + VkQueueGlobalPriority globalPriority + + + + + VkStructureType sType + void* pNext + VkBool32 globalPriorityQuery + + + + + VkStructureType sType + void* pNext + uint32_t priorityCount + VkQueueGlobalPriority priorities[VK_MAX_GLOBAL_PRIORITY_SIZE] + + + + + VkStructureType sType + const void* pNext + VkObjectType objectType + uint64_t objectHandle + const char* pObjectName + + + VkStructureType sType + const void* pNext + VkObjectType objectType + uint64_t objectHandle + uint64_t tagName + size_t tagSize + const void* pTag + + + VkStructureType sType + const void* pNext + const char* pLabelName + float color[4] + + + VkStructureType sType + const void* pNext + VkDebugUtilsMessengerCreateFlagsEXT flags + VkDebugUtilsMessageSeverityFlagsEXT messageSeverity + VkDebugUtilsMessageTypeFlagsEXT messageType + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback + void* pUserData + + + VkStructureType sType + const void* pNext + VkDebugUtilsMessengerCallbackDataFlagsEXT flags + const char* pMessageIdName + int32_t messageIdNumber + const char* pMessage + uint32_t queueLabelCount + const VkDebugUtilsLabelEXT* pQueueLabels + uint32_t cmdBufLabelCount + const VkDebugUtilsLabelEXT* pCmdBufLabels + uint32_t objectCount + const VkDebugUtilsObjectNameInfoEXT* pObjects + + + VkStructureType sType + void* pNext + VkBool32 deviceMemoryReport + + + VkStructureType sType + const void* pNext + VkDeviceMemoryReportFlagsEXT flags + PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback + void* pUserData + + + VkStructureType sType + void* pNext + VkDeviceMemoryReportFlagsEXT flags + VkDeviceMemoryReportEventTypeEXT type + uint64_t memoryObjectId + VkDeviceSize size + VkObjectType objectType + uint64_t objectHandle + uint32_t heapIndex + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlagBits handleType + void* pHostPointer + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkDeviceSize minImportedHostPointerAlignment + + + VkStructureType sType + void* pNext + float primitiveOverestimationSizeThe size in pixels the primitive is enlarged at each edge during conservative rasterization + float maxExtraPrimitiveOverestimationSizeThe maximum additional overestimation the client can specify in the pipeline state + float extraPrimitiveOverestimationSizeGranularityThe granularity of extra overestimation sizes the implementations supports between 0 and maxExtraOverestimationSize + VkBool32 primitiveUnderestimationtrue if the implementation supports conservative rasterization underestimation mode + VkBool32 conservativePointAndLineRasterizationtrue if conservative rasterization also applies to points and lines + VkBool32 degenerateTrianglesRasterizedtrue if degenerate triangles (those with zero area after snap) are rasterized + VkBool32 degenerateLinesRasterizedtrue if degenerate lines (those with zero length after snap) are rasterized + VkBool32 fullyCoveredFragmentShaderInputVariabletrue if the implementation supports the FullyCoveredEXT SPIR-V builtin fragment shader input variable + VkBool32 conservativeRasterizationPostDepthCoveragetrue if the implementation supports both conservative rasterization and post depth coverage sample coverage mask + + + VkStructureType sType + const void* pNext + VkTimeDomainKHR timeDomain + + + + VkStructureType sType + void* pNext + uint32_t shaderEngineCountnumber of shader engines + uint32_t shaderArraysPerEngineCountnumber of shader arrays + uint32_t computeUnitsPerShaderArraynumber of physical CUs per shader array + uint32_t simdPerComputeUnitnumber of SIMDs per compute unit + uint32_t wavefrontsPerSimdnumber of wavefront slots in each SIMD + uint32_t wavefrontSizemaximum number of threads per wavefront + uint32_t sgprsPerSimdnumber of physical SGPRs per SIMD + uint32_t minSgprAllocationminimum number of SGPRs that can be allocated by a wave + uint32_t maxSgprAllocationnumber of available SGPRs + uint32_t sgprAllocationGranularitySGPRs are allocated in groups of this size + uint32_t vgprsPerSimdnumber of physical VGPRs per SIMD + uint32_t minVgprAllocationminimum number of VGPRs that can be allocated by a wave + uint32_t maxVgprAllocationnumber of available VGPRs + uint32_t vgprAllocationGranularityVGPRs are allocated in groups of this size + + + VkStructureType sType + void* pNextPointer to next structure + VkShaderCorePropertiesFlagsAMD shaderCoreFeaturesfeatures supported by the shader core + uint32_t activeComputeUnitCountnumber of active compute units across all shader engines/arrays + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationConservativeStateCreateFlagsEXT flagsReserved + VkConservativeRasterizationModeEXT conservativeRasterizationModeConservative rasterization mode + float extraPrimitiveOverestimationSizeExtra overestimation to add to the primitive + + + 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 + + + + 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 + + + + VkStructureType sType + const void* pNext + uint32_t bindingCount + const VkDescriptorBindingFlags* pBindingFlags + + + + VkStructureType sType + const void* pNext + uint32_t descriptorSetCount + const uint32_t* pDescriptorCounts + + + + VkStructureType sType + void* pNext + uint32_t maxVariableDescriptorCount + + + + VkStructureType sType + const void* pNext + VkAttachmentDescriptionFlags flags + VkFormat format + VkSampleCountFlagBits samples + VkAttachmentLoadOp loadOpLoad operation for color or depth data + VkAttachmentStoreOp storeOpStore operation for color or depth data + VkAttachmentLoadOp stencilLoadOpLoad operation for stencil data + VkAttachmentStoreOp stencilStoreOpStore operation for stencil data + VkImageLayout initialLayout + VkImageLayout finalLayout + + + + VkStructureType sType + const void* pNext + uint32_t attachment + VkImageLayout layout + VkImageAspectFlags aspectMask + + + + 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 + + + + VkStructureType sType + const void* pNext + uint32_t srcSubpass + uint32_t dstSubpass + VkPipelineStageFlags srcStageMask + VkPipelineStageFlags dstStageMask + VkAccessFlags srcAccessMask + VkAccessFlags dstAccessMask + VkDependencyFlags dependencyFlags + int32_t viewOffset + + + + 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 + + + + VkStructureType sType + const void* pNext + VkSubpassContents contents + + + + VkStructureType sType + const void* pNext + + + + VkStructureType sType + void* pNext + VkBool32 timelineSemaphore + + + + VkStructureType sType + void* pNext + uint64_t maxTimelineSemaphoreValueDifference + + + + VkStructureType sType + const void* pNext + VkSemaphoreType semaphoreType + uint64_t initialValue + + + + VkStructureType sType + const void* pNext + uint32_t waitSemaphoreValueCount + const uint64_t* pWaitSemaphoreValues + uint32_t signalSemaphoreValueCount + const uint64_t* pSignalSemaphoreValues + + + + VkStructureType sType + const void* pNext + VkSemaphoreWaitFlags flags + uint32_t semaphoreCount + const VkSemaphore* pSemaphores + const uint64_t* pValues + + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + uint64_t value + + + + uint32_t binding + uint32_t divisor + + + + + VkStructureType sType + const void* pNext + uint32_t vertexBindingDivisorCount + const VkVertexInputBindingDivisorDescription* pVertexBindingDivisors + + + + + VkStructureType sType + void* pNext + uint32_t maxVertexAttribDivisormax value of vertex attribute divisor + + + VkStructureType sType + void* pNext + uint32_t maxVertexAttribDivisormax value of vertex attribute divisor + VkBool32 supportsNonZeroFirstInstance + + + + VkStructureType sType + void* pNext + uint32_t pciDomain + uint32_t pciBus + uint32_t pciDevice + uint32_t pciFunction + + + VkStructureType sType + const void* pNext + struct AHardwareBuffer* buffer + + + VkStructureType sType + void* pNext + uint64_t androidHardwareBufferUsage + + + VkStructureType sType + void* pNext + VkDeviceSize allocationSize + uint32_t memoryTypeBits + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + VkFormatFeatureFlags formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + VkBool32 conditionalRenderingEnableWhether this secondary command buffer may be executed during an active conditional rendering + + + VkStructureType sType + void* pNext + uint64_t externalFormat + + + VkStructureType sType + void* pNext + VkBool32 storageBuffer8BitAccess8-bit integer variables supported in StorageBuffer + VkBool32 uniformAndStorageBuffer8BitAccess8-bit integer variables supported in StorageBuffer and Uniform + VkBool32 storagePushConstant88-bit integer variables supported in PushConstant + + + + VkStructureType sType + void* pNext + VkBool32 conditionalRendering + VkBool32 inheritedConditionalRendering + + + VkStructureType sType + void* pNext + VkBool32 vulkanMemoryModel + VkBool32 vulkanMemoryModelDeviceScope + VkBool32 vulkanMemoryModelAvailabilityVisibilityChains + + + + VkStructureType sType + void* pNext + VkBool32 shaderBufferInt64Atomics + VkBool32 shaderSharedInt64Atomics + + + + 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 + + + VkStructureType sType + void* pNext + VkBool32 shaderBufferFloat16Atomics + VkBool32 shaderBufferFloat16AtomicAdd + VkBool32 shaderBufferFloat16AtomicMinMax + VkBool32 shaderBufferFloat32AtomicMinMax + VkBool32 shaderBufferFloat64AtomicMinMax + VkBool32 shaderSharedFloat16Atomics + VkBool32 shaderSharedFloat16AtomicAdd + VkBool32 shaderSharedFloat16AtomicMinMax + VkBool32 shaderSharedFloat32AtomicMinMax + VkBool32 shaderSharedFloat64AtomicMinMax + VkBool32 shaderImageFloat32AtomicMinMax + VkBool32 sparseImageFloat32AtomicMinMax + + + VkStructureType sType + void* pNext + VkBool32 vertexAttributeInstanceRateDivisor + VkBool32 vertexAttributeInstanceRateZeroDivisor + + + + + VkStructureType sType + void* pNext + VkPipelineStageFlags checkpointExecutionStageMask + + + VkStructureType sType + void* pNext + VkPipelineStageFlagBits stage + void* pCheckpointMarker + + + VkStructureType sType + void* pNext + VkResolveModeFlags supportedDepthResolveModessupported depth resolve modes + VkResolveModeFlags supportedStencilResolveModessupported stencil resolve modes + VkBool32 independentResolveNonedepth and stencil resolve modes can be set independently if one of them is none + VkBool32 independentResolvedepth and stencil resolve modes can be set independently + + + + VkStructureType sType + const void* pNext + VkResolveModeFlagBits depthResolveModedepth resolve mode + VkResolveModeFlagBits stencilResolveModestencil resolve mode + const VkAttachmentReference2* pDepthStencilResolveAttachmentdepth/stencil resolve attachment + + + + VkStructureType sType + const void* pNext + VkFormat decodeMode + + + VkStructureType sType + void* pNext + VkBool32 decodeModeSharedExponent + + + VkStructureType sType + void* pNext + VkBool32 transformFeedback + VkBool32 geometryStreams + + + VkStructureType sType + void* pNext + uint32_t maxTransformFeedbackStreams + uint32_t maxTransformFeedbackBuffers + VkDeviceSize maxTransformFeedbackBufferSize + uint32_t maxTransformFeedbackStreamDataSize + uint32_t maxTransformFeedbackBufferDataSize + uint32_t maxTransformFeedbackBufferDataStride + VkBool32 transformFeedbackQueries + VkBool32 transformFeedbackStreamsLinesTriangles + VkBool32 transformFeedbackRasterizationStreamSelect + VkBool32 transformFeedbackDraw + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationStateStreamCreateFlagsEXT flags + uint32_t rasterizationStream + + + VkStructureType sType + void* pNext + VkBool32 representativeFragmentTest + + + VkStructureType sType + const void* pNext + VkBool32 representativeFragmentTestEnable + + + VkStructureType sType + void* pNext + VkBool32 exclusiveScissor + + + VkStructureType sType + const void* pNext + uint32_t exclusiveScissorCount + const VkRect2D* pExclusiveScissors + + + VkStructureType sType + void* pNext + VkBool32 cornerSampledImage + + + VkStructureType sType + void* pNext + VkBool32 computeDerivativeGroupQuads + VkBool32 computeDerivativeGroupLinear + + + + VkStructureType sType + void* pNext + VkBool32 meshAndTaskShaderDerivatives + + + + VkStructureType sType + void* pNext + VkBool32 imageFootprint + + + VkStructureType sType + void* pNext + VkBool32 dedicatedAllocationImageAliasing + + + VkStructureType sType + void* pNext + VkBool32 indirectCopy + + + VkStructureType sType + void* pNext + VkQueueFlags supportedQueuesBitfield of which queues are supported for indirect copy + + + VkStructureType sType + void* pNext + VkBool32 memoryDecompression + + + VkStructureType sType + void* pNext + VkMemoryDecompressionMethodFlagsNV decompressionMethods + uint64_t maxDecompressionIndirectCount + + + uint32_t shadingRatePaletteEntryCount + const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries + + + VkStructureType sType + const void* pNext + VkBool32 shadingRateImageEnable + uint32_t viewportCount + const VkShadingRatePaletteNV* pShadingRatePalettes + + + VkStructureType sType + void* pNext + VkBool32 shadingRateImage + VkBool32 shadingRateCoarseSampleOrder + + + VkStructureType sType + void* pNext + VkExtent2D shadingRateTexelSize + uint32_t shadingRatePaletteSize + uint32_t shadingRateMaxCoarseSamples + + + VkStructureType sType + void* pNext + VkBool32 invocationMask + + + uint32_t pixelX + uint32_t pixelY + uint32_t sample + + + VkShadingRatePaletteEntryNV shadingRate + uint32_t sampleCount + uint32_t sampleLocationCount + const VkCoarseSampleLocationNV* pSampleLocations + + + VkStructureType sType + const void* pNext + VkCoarseSampleOrderTypeNV sampleOrderType + uint32_t customSampleOrderCount + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders + + + VkStructureType sType + void* pNext + VkBool32 taskShader + VkBool32 meshShader + + + VkStructureType sType + void* pNext + uint32_t maxDrawMeshTasksCount + uint32_t maxTaskWorkGroupInvocations + uint32_t maxTaskWorkGroupSize[3] + uint32_t maxTaskTotalMemorySize + uint32_t maxTaskOutputCount + uint32_t maxMeshWorkGroupInvocations + uint32_t maxMeshWorkGroupSize[3] + uint32_t maxMeshTotalMemorySize + uint32_t maxMeshOutputVertices + uint32_t maxMeshOutputPrimitives + uint32_t maxMeshMultiviewViewCount + uint32_t meshOutputPerVertexGranularity + uint32_t meshOutputPerPrimitiveGranularity + + + uint32_t taskCount + uint32_t firstTask + + + VkStructureType sType + void* pNext + VkBool32 taskShader + VkBool32 meshShader + VkBool32 multiviewMeshShader + VkBool32 primitiveFragmentShadingRateMeshShader + VkBool32 meshShaderQueries + + + VkStructureType sType + void* pNext + uint32_t maxTaskWorkGroupTotalCount + uint32_t maxTaskWorkGroupCount[3] + uint32_t maxTaskWorkGroupInvocations + uint32_t maxTaskWorkGroupSize[3] + uint32_t maxTaskPayloadSize + uint32_t maxTaskSharedMemorySize + uint32_t maxTaskPayloadAndSharedMemorySize + uint32_t maxMeshWorkGroupTotalCount + uint32_t maxMeshWorkGroupCount[3] + uint32_t maxMeshWorkGroupInvocations + uint32_t maxMeshWorkGroupSize[3] + uint32_t maxMeshSharedMemorySize + uint32_t maxMeshPayloadAndSharedMemorySize + uint32_t maxMeshOutputMemorySize + uint32_t maxMeshPayloadAndOutputMemorySize + uint32_t maxMeshOutputComponents + uint32_t maxMeshOutputVertices + uint32_t maxMeshOutputPrimitives + uint32_t maxMeshOutputLayers + uint32_t maxMeshMultiviewViewCount + uint32_t meshOutputPerVertexGranularity + uint32_t meshOutputPerPrimitiveGranularity + uint32_t maxPreferredTaskWorkGroupInvocations + uint32_t maxPreferredMeshWorkGroupInvocations + VkBool32 prefersLocalInvocationVertexOutput + VkBool32 prefersLocalInvocationPrimitiveOutput + VkBool32 prefersCompactVertexOutput + VkBool32 prefersCompactPrimitiveOutput + + + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + VkStructureType sType + const void* pNext + VkRayTracingShaderGroupTypeKHR type + uint32_t generalShader + uint32_t closestHitShader + uint32_t anyHitShader + uint32_t intersectionShader + + + VkStructureType sType + const void* pNext + VkRayTracingShaderGroupTypeKHR type + uint32_t generalShader + uint32_t closestHitShader + uint32_t anyHitShader + uint32_t intersectionShader + const void* pShaderGroupCaptureReplayHandle + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + uint32_t groupCount + const VkRayTracingShaderGroupCreateInfoNV* pGroups + uint32_t maxRecursionDepth + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flagsPipeline creation flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStagesOne entry for each active shader stage + uint32_t groupCount + const VkRayTracingShaderGroupCreateInfoKHR* pGroups + uint32_t maxPipelineRayRecursionDepth + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo + const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface + const VkPipelineDynamicStateCreateInfo* pDynamicState + VkPipelineLayout layoutInterface layout of the pipeline + VkPipeline basePipelineHandleIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of + int32_t basePipelineIndexIf VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of + + + VkStructureType sType + const void* pNext + VkBuffer vertexData + VkDeviceSize vertexOffset + uint32_t vertexCount + VkDeviceSize vertexStride + VkFormat vertexFormat + VkBuffer indexData + VkDeviceSize indexOffset + uint32_t indexCount + VkIndexType indexType + VkBuffer transformDataOptional reference to array of floats representing a 3x4 row major affine transformation matrix. + VkDeviceSize transformOffset + + + VkStructureType sType + const void* pNext + VkBuffer aabbData + uint32_t numAABBs + uint32_t strideStride in bytes between AABBs + VkDeviceSize offsetOffset in bytes of the first AABB in aabbData + + + VkGeometryTrianglesNV triangles + VkGeometryAABBNV aabbs + + + VkStructureType sType + const void* pNext + VkGeometryTypeKHR geometryType + VkGeometryDataNV geometry + VkGeometryFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkAccelerationStructureTypeNV type + VkBuildAccelerationStructureFlagsNV flags + uint32_t instanceCount + uint32_t geometryCount + const VkGeometryNV* pGeometries + + + VkStructureType sType + const void* pNext + VkDeviceSize compactedSize + VkAccelerationStructureInfoNV info + + + VkStructureType sType + const void* pNext + VkAccelerationStructureNV accelerationStructure + VkDeviceMemory memory + VkDeviceSize memoryOffset + uint32_t deviceIndexCount + const uint32_t* pDeviceIndices + + + VkStructureType sType + const void* pNext + uint32_t accelerationStructureCount + const VkAccelerationStructureKHR* pAccelerationStructures + + + VkStructureType sType + const void* pNext + uint32_t accelerationStructureCount + const VkAccelerationStructureNV* pAccelerationStructures + + + VkStructureType sType + const void* pNext + VkAccelerationStructureMemoryRequirementsTypeNV type + VkAccelerationStructureNV accelerationStructure + + + VkStructureType sType + void* pNext + VkBool32 accelerationStructure + VkBool32 accelerationStructureCaptureReplay + VkBool32 accelerationStructureIndirectBuild + VkBool32 accelerationStructureHostCommands + VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind + + + VkStructureType sType + void* pNext + VkBool32 rayTracingPipeline + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay + VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed + VkBool32 rayTracingPipelineTraceRaysIndirect + VkBool32 rayTraversalPrimitiveCulling + + + VkStructureType sType + void* pNext + VkBool32 rayQuery + + + VkStructureType sType + void* pNext + uint64_t maxGeometryCount + uint64_t maxInstanceCount + uint64_t maxPrimitiveCount + uint32_t maxPerStageDescriptorAccelerationStructures + uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures + uint32_t maxDescriptorSetAccelerationStructures + uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures + uint32_t minAccelerationStructureScratchOffsetAlignment + + + VkStructureType sType + void* pNext + uint32_t shaderGroupHandleSize + uint32_t maxRayRecursionDepth + uint32_t maxShaderGroupStride + uint32_t shaderGroupBaseAlignment + uint32_t shaderGroupHandleCaptureReplaySize + uint32_t maxRayDispatchInvocationCount + uint32_t shaderGroupHandleAlignment + uint32_t maxRayHitAttributeSize + + + VkStructureType sType + void* pNext + uint32_t shaderGroupHandleSize + uint32_t maxRecursionDepth + uint32_t maxShaderGroupStride + uint32_t shaderGroupBaseAlignment + uint64_t maxGeometryCount + uint64_t maxInstanceCount + uint64_t maxTriangleCount + uint32_t maxDescriptorSetAccelerationStructures + + + VkDeviceAddress deviceAddress + VkDeviceSize stride + VkDeviceSize size + + + uint32_t width + uint32_t height + uint32_t depth + + + VkDeviceAddress raygenShaderRecordAddress + VkDeviceSize raygenShaderRecordSize + VkDeviceAddress missShaderBindingTableAddress + VkDeviceSize missShaderBindingTableSize + VkDeviceSize missShaderBindingTableStride + VkDeviceAddress hitShaderBindingTableAddress + VkDeviceSize hitShaderBindingTableSize + VkDeviceSize hitShaderBindingTableStride + VkDeviceAddress callableShaderBindingTableAddress + VkDeviceSize callableShaderBindingTableSize + VkDeviceSize callableShaderBindingTableStride + uint32_t width + uint32_t height + uint32_t depth + + + VkStructureType sType + void* pNext + VkBool32 rayTracingMaintenance1 + VkBool32 rayTracingPipelineTraceRaysIndirect2 + + + VkStructureType sType + void* pNext + uint32_t drmFormatModifierCount + VkDrmFormatModifierPropertiesEXT* pDrmFormatModifierProperties + + + uint64_t drmFormatModifier + uint32_t drmFormatModifierPlaneCount + VkFormatFeatureFlags drmFormatModifierTilingFeatures + + + VkStructureType sType + const void* pNext + uint64_t drmFormatModifier + VkSharingMode sharingMode + uint32_t queueFamilyIndexCount + const uint32_t* pQueueFamilyIndices + + + VkStructureType sType + const void* pNext + uint32_t drmFormatModifierCount + const uint64_t* pDrmFormatModifiers + + + VkStructureType sType + const void* pNext + uint64_t drmFormatModifier + uint32_t drmFormatModifierPlaneCount + const VkSubresourceLayout* pPlaneLayouts + + + VkStructureType sType + void* pNext + uint64_t drmFormatModifier + + + VkStructureType sType + const void* pNext + VkImageUsageFlags stencilUsage + + + + VkStructureType sType + const void* pNext + VkMemoryOverallocationBehaviorAMD overallocationBehavior + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMap + VkBool32 fragmentDensityMapDynamic + VkBool32 fragmentDensityMapNonSubsampledImages + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMapDeferred + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMapOffset + + + + VkStructureType sType + void* pNext + VkExtent2D minFragmentDensityTexelSize + VkExtent2D maxFragmentDensityTexelSize + VkBool32 fragmentDensityInvocations + + + VkStructureType sType + void* pNext + VkBool32 subsampledLoads + VkBool32 subsampledCoarseReconstructionEarlyAccess + uint32_t maxSubsampledArrayLayers + uint32_t maxDescriptorSetSubsampledSamplers + + + VkStructureType sType + void* pNext + VkExtent2D fragmentDensityOffsetGranularity + + + + VkStructureType sType + const void* pNext + VkAttachmentReference fragmentDensityMapAttachment + + + VkStructureType sType + const void* pNext + uint32_t fragmentDensityOffsetCount + const VkOffset2D* pFragmentDensityOffsets + + + + VkStructureType sType + void* pNext + VkBool32 scalarBlockLayout + + + + VkStructureType sType + const void* pNext + VkBool32 supportsProtectedRepresents if surface can be protected + + + VkStructureType sType + void* pNext + VkBool32 uniformBufferStandardLayout + + + + VkStructureType sType + void* pNext + VkBool32 depthClipEnable + + + VkStructureType sType + const void* pNext + VkPipelineRasterizationDepthClipStateCreateFlagsEXT flagsReserved + VkBool32 depthClipEnable + + + VkStructureType sType + void* pNext + VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS] + VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS] + + + VkStructureType sType + void* pNext + VkBool32 memoryPriority + + + VkStructureType sType + const void* pNext + float priority + + + VkStructureType sType + void* pNext + VkBool32 pageableDeviceLocalMemory + + + VkStructureType sType + void* pNext + VkBool32 bufferDeviceAddress + VkBool32 bufferDeviceAddressCaptureReplay + VkBool32 bufferDeviceAddressMultiDevice + + + + VkStructureType sType + void* pNext + VkBool32 bufferDeviceAddress + VkBool32 bufferDeviceAddressCaptureReplay + VkBool32 bufferDeviceAddressMultiDevice + + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + + + VkStructureType sType + const void* pNext + uint64_t opaqueCaptureAddress + + + + VkStructureType sType + const void* pNext + VkDeviceAddress deviceAddress + + + VkStructureType sType + void* pNext + VkImageViewType imageViewType + + + VkStructureType sType + void* pNext + VkBool32 filterCubicThe combinations of format, image type (and image view type if provided) can be filtered with VK_FILTER_CUBIC_EXT + VkBool32 filterCubicMinmaxThe combination of format, image type (and image view type if provided) can be filtered with VK_FILTER_CUBIC_EXT and ReductionMode of Min or Max + + + VkStructureType sType + void* pNext + VkBool32 imagelessFramebuffer + + + + VkStructureType sType + const void* pNext + uint32_t attachmentImageInfoCount + const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos + + + + VkStructureType sType + const void* pNext + VkImageCreateFlags flagsImage creation flags + VkImageUsageFlags usageImage usage flags + uint32_t width + uint32_t height + uint32_t layerCount + uint32_t viewFormatCount + const VkFormat* pViewFormats + + + + VkStructureType sType + const void* pNext + uint32_t attachmentCount + const VkImageView* pAttachments + + + + VkStructureType sType + void* pNext + VkBool32 textureCompressionASTC_HDR + + + + VkStructureType sType + void* pNext + VkBool32 cooperativeMatrix + VkBool32 cooperativeMatrixRobustBufferAccess + + + VkStructureType sType + void* pNext + VkShaderStageFlags cooperativeMatrixSupportedStages + + + VkStructureType sType + void* pNext + uint32_t MSize + uint32_t NSize + uint32_t KSize + VkComponentTypeNV AType + VkComponentTypeNV BType + VkComponentTypeNV CType + VkComponentTypeNV DType + VkScopeNV scope + + + VkStructureType sType + void* pNext + VkBool32 ycbcrImageArrays + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkDescriptorType descriptorType + VkSampler sampler + + + VkStructureType sType + void* pNext + VkDeviceAddress deviceAddress + VkDeviceSize size + + + VkStructureType sType + const void* pNext + GgpFrameToken frameToken + + + VkPipelineCreationFeedbackFlags flags + uint64_t duration + + + + VkStructureType sType + const void* pNext + VkPipelineCreationFeedback* pPipelineCreationFeedbackOutput pipeline creation feedback. + uint32_t pipelineStageCreationFeedbackCount + VkPipelineCreationFeedback* pPipelineStageCreationFeedbacksOne entry for each shader stage specified in the parent Vk*PipelineCreateInfo struct + + + + VkStructureType sType + void* pNext + VkFullScreenExclusiveEXT fullScreenExclusive + + + VkStructureType sType + const void* pNext + HMONITOR hmonitor + + + VkStructureType sType + void* pNext + VkBool32 fullScreenExclusiveSupported + + + VkStructureType sType + void* pNext + VkBool32 presentBarrier + + + VkStructureType sType + void* pNext + VkBool32 presentBarrierSupported + + + VkStructureType sType + void* pNext + VkBool32 presentBarrierEnable + + + VkStructureType sType + void* pNext + VkBool32 performanceCounterQueryPoolsperformance counters supported in query pools + VkBool32 performanceCounterMultipleQueryPoolsperformance counters from multiple query pools can be accessed in the same primary command buffer + + + VkStructureType sType + void* pNext + VkBool32 allowCommandBufferQueryCopiesFlag to specify whether performance queries are allowed to be used in vkCmdCopyQueryPoolResults + + + VkStructureType sType + void* pNext + VkPerformanceCounterUnitKHR unit + VkPerformanceCounterScopeKHR scope + VkPerformanceCounterStorageKHR storage + uint8_t uuid[VK_UUID_SIZE] + + + VkStructureType sType + void* pNext + VkPerformanceCounterDescriptionFlagsKHR flags + char name[VK_MAX_DESCRIPTION_SIZE] + char category[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + + + VkStructureType sType + const void* pNext + uint32_t queueFamilyIndex + uint32_t counterIndexCount + const uint32_t* pCounterIndices + + + int32_t int32 + int64_t int64 + uint32_t uint32 + uint64_t uint64 + float float32 + double float64 + + + VkStructureType sType + const void* pNext + VkAcquireProfilingLockFlagsKHR flagsAcquire profiling lock flags + uint64_t timeout + + + VkStructureType sType + const void* pNext + uint32_t counterPassIndexIndex for which counter pass to submit + + + VkStructureType sType + const void* pNext + uint32_t maxPerformanceQueriesPerPoolMaximum number of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR queries in a query pool + + + VkStructureType sType + const void* pNext + VkHeadlessSurfaceCreateFlagsEXT flags + + + VkStructureType sType + void* pNext + VkBool32 coverageReductionMode + + + VkStructureType sType + const void* pNext + VkPipelineCoverageReductionStateCreateFlagsNV flags + VkCoverageReductionModeNV coverageReductionMode + + + VkStructureType sType + void* pNext + VkCoverageReductionModeNV coverageReductionMode + VkSampleCountFlagBits rasterizationSamples + VkSampleCountFlags depthStencilSamples + VkSampleCountFlags colorSamples + + + VkStructureType sType + void* pNext + VkBool32 shaderIntegerFunctions2 + + + uint32_t value32 + uint64_t value64 + float valueFloat + VkBool32 valueBool + const char* valueString + + + VkPerformanceValueTypeINTEL type + VkPerformanceValueDataINTEL data + + + VkStructureType sType + const void* pNext + void* pUserData + + + VkStructureType sType + const void* pNext + VkQueryPoolSamplingModeINTEL performanceCountersSampling + + + + VkStructureType sType + const void* pNext + uint64_t marker + + + VkStructureType sType + const void* pNext + uint32_t marker + + + VkStructureType sType + const void* pNext + VkPerformanceOverrideTypeINTEL type + VkBool32 enable + uint64_t parameter + + + VkStructureType sType + const void* pNext + VkPerformanceConfigurationTypeINTEL type + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupClock + VkBool32 shaderDeviceClock + + + VkStructureType sType + void* pNext + VkBool32 indexTypeUint8 + + + + + VkStructureType sType + void* pNext + uint32_t shaderSMCount + uint32_t shaderWarpsPerSM + + + VkStructureType sType + void* pNext + VkBool32 shaderSMBuiltins + + + VkStructureType sType + void* pNextPointer to next structure + VkBool32 fragmentShaderSampleInterlock + VkBool32 fragmentShaderPixelInterlock + VkBool32 fragmentShaderShadingRateInterlock + + + VkStructureType sType + void* pNext + VkBool32 separateDepthStencilLayouts + + + + VkStructureType sType + void* pNext + VkImageLayout stencilLayout + + + VkStructureType sType + void* pNext + VkBool32 primitiveTopologyListRestart + VkBool32 primitiveTopologyPatchListRestart + + + + VkStructureType sType + void* pNext + VkImageLayout stencilInitialLayout + VkImageLayout stencilFinalLayout + + + + VkStructureType sType + void* pNext + VkBool32 pipelineExecutableInfo + + + VkStructureType sType + const void* pNext + VkPipeline pipeline + + + + VkStructureType sType + void* pNext + VkShaderStageFlags stages + char name[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + uint32_t subgroupSize + + + VkStructureType sType + const void* pNext + VkPipeline pipeline + uint32_t executableIndex + + + VkBool32 b32 + int64_t i64 + uint64_t u64 + double f64 + + + VkStructureType sType + void* pNext + char name[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + VkPipelineExecutableStatisticFormatKHR format + VkPipelineExecutableStatisticValueKHR value + + + VkStructureType sType + void* pNext + char name[VK_MAX_DESCRIPTION_SIZE] + char description[VK_MAX_DESCRIPTION_SIZE] + VkBool32 isText + size_t dataSize + void* pData + + + VkStructureType sType + void* pNext + VkBool32 shaderDemoteToHelperInvocation + + + + VkStructureType sType + void* pNext + VkBool32 texelBufferAlignment + + + VkStructureType sType + void* pNext + VkDeviceSize storageTexelBufferOffsetAlignmentBytes + VkBool32 storageTexelBufferOffsetSingleTexelAlignment + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment + + + + VkStructureType sType + void* pNext + VkBool32 subgroupSizeControl + VkBool32 computeFullSubgroups + + + + VkStructureType sType + void* pNext + uint32_t minSubgroupSizeThe minimum subgroup size supported by this device + uint32_t maxSubgroupSizeThe maximum subgroup size supported by this device + uint32_t maxComputeWorkgroupSubgroupsThe maximum number of subgroups supported in a workgroup + VkShaderStageFlags requiredSubgroupSizeStagesThe shader stages that support specifying a subgroup size + + + + VkStructureType sType + void* pNext + uint32_t requiredSubgroupSize + + + + + VkStructureType sType + void* pNext + VkRenderPass renderPass + uint32_t subpass + + + VkStructureType sType + void* pNext + uint32_t maxSubpassShadingWorkgroupSizeAspectRatio + + + VkStructureType sType + void* pNext + uint32_t maxWorkGroupCount[3] + uint32_t maxWorkGroupSize[3] + uint32_t maxOutputClusterCount + VkDeviceSize indirectBufferOffsetAlignment + + + VkStructureType sType + const void* pNext + uint64_t opaqueCaptureAddress + + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + + VkStructureType sType + void* pNext + VkBool32 rectangularLines + VkBool32 bresenhamLines + VkBool32 smoothLines + VkBool32 stippledRectangularLines + VkBool32 stippledBresenhamLines + VkBool32 stippledSmoothLines + + + + + VkStructureType sType + void* pNext + uint32_t lineSubPixelPrecisionBits + + + + + VkStructureType sType + const void* pNext + VkLineRasterizationMode lineRasterizationMode + VkBool32 stippledLineEnable + uint32_t lineStippleFactor + uint16_t lineStipplePattern + + + + + VkStructureType sType + void* pNext + VkBool32 pipelineCreationCacheControl + + + + VkStructureType sType + void* pNext + VkBool32 storageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock + VkBool32 uniformAndStorageBuffer16BitAccess16-bit integer/floating-point variables supported in BufferBlock and Block + VkBool32 storagePushConstant1616-bit integer/floating-point variables supported in PushConstant + VkBool32 storageInputOutput1616-bit integer/floating-point variables supported in shader inputs and outputs + VkBool32 multiviewMultiple views in a render pass + VkBool32 multiviewGeometryShaderMultiple views in a render pass w/ geometry shader + VkBool32 multiviewTessellationShaderMultiple views in a render pass w/ tessellation shader + VkBool32 variablePointersStorageBuffer + VkBool32 variablePointers + VkBool32 protectedMemory + VkBool32 samplerYcbcrConversionSampler color conversion supported + VkBool32 shaderDrawParameters + + + 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 subgroupSizeThe size of a subgroup for this queue. + VkShaderStageFlags subgroupSupportedStagesBitfield of what shader stages support subgroup operations + VkSubgroupFeatureFlags subgroupSupportedOperationsBitfield of what subgroup operations are supported. + VkBool32 subgroupQuadOperationsInAllStagesFlag to specify whether quad operations are available in all stages. + VkPointClippingBehavior pointClippingBehavior + uint32_t maxMultiviewViewCountmax number of views in a subpass + uint32_t maxMultiviewInstanceIndexmax instance index for a draw in a multiview subpass + VkBool32 protectedNoFault + uint32_t maxPerSetDescriptors + VkDeviceSize maxMemoryAllocationSize + + + VkStructureType sType + void* pNext + VkBool32 samplerMirrorClampToEdge + VkBool32 drawIndirectCount + VkBool32 storageBuffer8BitAccess8-bit integer variables supported in StorageBuffer + VkBool32 uniformAndStorageBuffer8BitAccess8-bit integer variables supported in StorageBuffer and Uniform + VkBool32 storagePushConstant88-bit integer variables supported in PushConstant + VkBool32 shaderBufferInt64Atomics + VkBool32 shaderSharedInt64Atomics + VkBool32 shaderFloat1616-bit floats (halfs) in shaders + VkBool32 shaderInt88-bit integers in shaders + 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 + + + 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 shaderSignedZeroInfNanPreserveFloat16An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat32An implementation can preserve signed zero, nan, inf + VkBool32 shaderSignedZeroInfNanPreserveFloat64An implementation can preserve signed zero, nan, inf + VkBool32 shaderDenormPreserveFloat16An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat32An implementation can preserve denormals + VkBool32 shaderDenormPreserveFloat64An implementation can preserve denormals + VkBool32 shaderDenormFlushToZeroFloat16An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat32An implementation can flush to zero denormals + VkBool32 shaderDenormFlushToZeroFloat64An implementation can flush to zero denormals + VkBool32 shaderRoundingModeRTEFloat16An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat32An implementation can support RTE + VkBool32 shaderRoundingModeRTEFloat64An implementation can support RTE + VkBool32 shaderRoundingModeRTZFloat16An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat32An implementation can support RTZ + VkBool32 shaderRoundingModeRTZFloat64An implementation can support RTZ + 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 supportedDepthResolveModessupported depth resolve modes + VkResolveModeFlags supportedStencilResolveModessupported stencil resolve modes + VkBool32 independentResolveNonedepth and stencil resolve modes can be set independently if one of them is none + VkBool32 independentResolvedepth and stencil resolve modes can be set independently + VkBool32 filterMinmaxSingleComponentFormats + VkBool32 filterMinmaxImageComponentMapping + uint64_t maxTimelineSemaphoreValueDifference + VkSampleCountFlags framebufferIntegerColorSampleCounts + + + VkStructureType sType + void* pNext + VkBool32 robustImageAccess + VkBool32 inlineUniformBlock + VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind + VkBool32 pipelineCreationCacheControl + VkBool32 privateData + VkBool32 shaderDemoteToHelperInvocation + VkBool32 shaderTerminateInvocation + VkBool32 subgroupSizeControl + VkBool32 computeFullSubgroups + VkBool32 synchronization2 + VkBool32 textureCompressionASTC_HDR + VkBool32 shaderZeroInitializeWorkgroupMemory + VkBool32 dynamicRendering + VkBool32 shaderIntegerDotProduct + VkBool32 maintenance4 + + + VkStructureType sType + void* pNext + uint32_t minSubgroupSizeThe minimum subgroup size supported by this device + uint32_t maxSubgroupSizeThe maximum subgroup size supported by this device + uint32_t maxComputeWorkgroupSubgroupsThe maximum number of subgroups supported in a workgroup + VkShaderStageFlags requiredSubgroupSizeStagesThe shader stages that support specifying a subgroup size + uint32_t maxInlineUniformBlockSize + uint32_t maxPerStageDescriptorInlineUniformBlocks + uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks + uint32_t maxDescriptorSetInlineUniformBlocks + uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks + uint32_t maxInlineUniformTotalSize + VkBool32 integerDotProduct8BitUnsignedAccelerated + VkBool32 integerDotProduct8BitSignedAccelerated + VkBool32 integerDotProduct8BitMixedSignednessAccelerated + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProduct16BitUnsignedAccelerated + VkBool32 integerDotProduct16BitSignedAccelerated + VkBool32 integerDotProduct16BitMixedSignednessAccelerated + VkBool32 integerDotProduct32BitUnsignedAccelerated + VkBool32 integerDotProduct32BitSignedAccelerated + VkBool32 integerDotProduct32BitMixedSignednessAccelerated + VkBool32 integerDotProduct64BitUnsignedAccelerated + VkBool32 integerDotProduct64BitSignedAccelerated + VkBool32 integerDotProduct64BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated + VkDeviceSize storageTexelBufferOffsetAlignmentBytes + VkBool32 storageTexelBufferOffsetSingleTexelAlignment + VkDeviceSize uniformTexelBufferOffsetAlignmentBytes + VkBool32 uniformTexelBufferOffsetSingleTexelAlignment + VkDeviceSize maxBufferSize + + + VkStructureType sType + void* pNext + VkBool32 globalPriorityQuery + VkBool32 shaderSubgroupRotate + VkBool32 shaderSubgroupRotateClustered + VkBool32 shaderFloatControls2 + VkBool32 shaderExpectAssume + VkBool32 rectangularLines + VkBool32 bresenhamLines + VkBool32 smoothLines + VkBool32 stippledRectangularLines + VkBool32 stippledBresenhamLines + VkBool32 stippledSmoothLines + VkBool32 vertexAttributeInstanceRateDivisor + VkBool32 vertexAttributeInstanceRateZeroDivisor + VkBool32 indexTypeUint8 + VkBool32 dynamicRenderingLocalRead + VkBool32 maintenance5 + VkBool32 maintenance6 + VkBool32 pipelineProtectedAccess + VkBool32 pipelineRobustness + VkBool32 hostImageCopy + VkBool32 pushDescriptor + + + VkStructureType sType + void* pNext + uint32_t lineSubPixelPrecisionBits + uint32_t maxVertexAttribDivisormax value of vertex attribute divisor + VkBool32 supportsNonZeroFirstInstance + uint32_t maxPushDescriptors + VkBool32 dynamicRenderingLocalReadDepthStencilAttachments + VkBool32 dynamicRenderingLocalReadMultisampledAttachments + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting + VkBool32 depthStencilSwizzleOneSupport + VkBool32 polygonModePointSize + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram + VkBool32 nonStrictWideLinesUseParallelogram + VkBool32 blockTexelViewCompatibleMultipleLayers + uint32_t maxCombinedImageSamplerDescriptorCount + VkBool32 fragmentShadingRateClampCombinerInputs + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs + VkPipelineRobustnessImageBehavior defaultRobustnessImages + uint32_t copySrcLayoutCount + VkImageLayout* pCopySrcLayouts + uint32_t copyDstLayoutCount + VkImageLayout* pCopyDstLayouts + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE] + VkBool32 identicalMemoryTypeRequirements + + + VkStructureType sType + const void* pNext + VkPipelineCompilerControlFlagsAMD compilerControlFlags + + + VkStructureType sType + void* pNext + VkBool32 deviceCoherentMemory + + + VkStructureType sType + void* pNext + VkFaultLevel faultLevel + VkFaultType faultType + + + VkStructureType sType + const void* pNext + uint32_t faultCount + VkFaultData* pFaults + PFN_vkFaultCallbackFunction pfnFaultCallback + + + VkStructureType sType + void* pNext + char name[VK_MAX_EXTENSION_NAME_SIZE] + char version[VK_MAX_EXTENSION_NAME_SIZE] + VkToolPurposeFlags purposes + char description[VK_MAX_DESCRIPTION_SIZE] + char layer[VK_MAX_EXTENSION_NAME_SIZE] + + + + VkStructureType sType + const void* pNext + VkClearColorValue customBorderColor + VkFormat format + + + VkStructureType sType + void* pNext + uint32_t maxCustomBorderColorSamplers + + + VkStructureType sType + void* pNext + VkBool32 customBorderColors + VkBool32 customBorderColorWithoutFormat + + + VkStructureType sType + const void* pNext + VkComponentMapping components + VkBool32 srgb + + + VkStructureType sType + void* pNext + VkBool32 borderColorSwizzle + VkBool32 borderColorSwizzleFromImage + + + VkDeviceAddress deviceAddress + void* hostAddress + + + VkDeviceAddress deviceAddress + const void* hostAddress + + + VkDeviceAddress deviceAddress + const void* hostAddress + + + VkStructureType sType + const void* pNext + VkFormat vertexFormat + VkDeviceOrHostAddressConstKHR vertexData + VkDeviceSize vertexStride + uint32_t maxVertex + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexData + VkDeviceOrHostAddressConstKHR transformData + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR data + VkDeviceSize stride + + + VkStructureType sType + const void* pNext + VkBool32 arrayOfPointers + VkDeviceOrHostAddressConstKHR data + + + VkStructureType sType + const void* pNext + VkFormat vertexFormat + VkDeviceOrHostAddressConstKHR vertexData + VkDeviceSize vertexStride + VkFormat radiusFormat + VkDeviceOrHostAddressConstKHR radiusData + VkDeviceSize radiusStride + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexData + VkDeviceSize indexStride + VkRayTracingLssIndexingModeNV indexingMode + VkRayTracingLssPrimitiveEndCapsModeNV endCapsMode + + + VkStructureType sType + const void* pNext + VkFormat vertexFormat + VkDeviceOrHostAddressConstKHR vertexData + VkDeviceSize vertexStride + VkFormat radiusFormat + VkDeviceOrHostAddressConstKHR radiusData + VkDeviceSize radiusStride + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexData + VkDeviceSize indexStride + + + VkAccelerationStructureGeometryTrianglesDataKHR triangles + VkAccelerationStructureGeometryAabbsDataKHR aabbs + VkAccelerationStructureGeometryInstancesDataKHR instances + + + VkStructureType sType + const void* pNext + VkGeometryTypeKHR geometryType + VkAccelerationStructureGeometryDataKHR geometry + VkGeometryFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkAccelerationStructureTypeKHR type + VkBuildAccelerationStructureFlagsKHR flags + VkBuildAccelerationStructureModeKHR mode + VkAccelerationStructureKHR srcAccelerationStructure + VkAccelerationStructureKHR dstAccelerationStructure + uint32_t geometryCount + const VkAccelerationStructureGeometryKHR* pGeometries + const VkAccelerationStructureGeometryKHR* const* ppGeometries + VkDeviceOrHostAddressKHR scratchData + + + uint32_t primitiveCount + uint32_t primitiveOffset + uint32_t firstVertex + uint32_t transformOffset + + + VkStructureType sType + const void* pNext + VkAccelerationStructureCreateFlagsKHR createFlags + VkBuffer buffer + VkDeviceSize offsetSpecified in bytes + VkDeviceSize size + VkAccelerationStructureTypeKHR type + VkDeviceAddress deviceAddress + + + float minX + float minY + float minZ + float maxX + float maxY + float maxZ + + + + float matrix[3][4] + + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + VkTransformMatrixKHR transform + uint32_t instanceCustomIndex:24 + uint32_t mask:8 + uint32_t instanceShaderBindingTableRecordOffset:24 + VkGeometryInstanceFlagsKHR flags:8 + uint64_t accelerationStructureReference + + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR accelerationStructure + + + VkStructureType sType + const void* pNext + const uint8_t* pVersionData + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR src + VkAccelerationStructureKHR dst + VkCopyAccelerationStructureModeKHR mode + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR src + VkDeviceOrHostAddressKHR dst + VkCopyAccelerationStructureModeKHR mode + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR src + VkAccelerationStructureKHR dst + VkCopyAccelerationStructureModeKHR mode + + + VkStructureType sType + const void* pNext + uint32_t maxPipelineRayPayloadSize + uint32_t maxPipelineRayHitAttributeSize + + + VkStructureType sType + const void* pNext + uint32_t libraryCount + const VkPipeline* pLibraries + + + VkObjectType objectType + uint64_t objectHandle + VkRefreshObjectFlagsKHR flags + + + VkStructureType sType + const void* pNext + uint32_t objectCount + const VkRefreshObjectKHR* pObjects + + + VkStructureType sType + void* pNext + VkBool32 extendedDynamicState + + + VkStructureType sType + void* pNext + VkBool32 extendedDynamicState2 + VkBool32 extendedDynamicState2LogicOp + VkBool32 extendedDynamicState2PatchControlPoints + + + VkStructureType sType + void* pNext + VkBool32 extendedDynamicState3TessellationDomainOrigin + VkBool32 extendedDynamicState3DepthClampEnable + VkBool32 extendedDynamicState3PolygonMode + VkBool32 extendedDynamicState3RasterizationSamples + VkBool32 extendedDynamicState3SampleMask + VkBool32 extendedDynamicState3AlphaToCoverageEnable + VkBool32 extendedDynamicState3AlphaToOneEnable + VkBool32 extendedDynamicState3LogicOpEnable + VkBool32 extendedDynamicState3ColorBlendEnable + VkBool32 extendedDynamicState3ColorBlendEquation + VkBool32 extendedDynamicState3ColorWriteMask + VkBool32 extendedDynamicState3RasterizationStream + VkBool32 extendedDynamicState3ConservativeRasterizationMode + VkBool32 extendedDynamicState3ExtraPrimitiveOverestimationSize + VkBool32 extendedDynamicState3DepthClipEnable + VkBool32 extendedDynamicState3SampleLocationsEnable + VkBool32 extendedDynamicState3ColorBlendAdvanced + VkBool32 extendedDynamicState3ProvokingVertexMode + VkBool32 extendedDynamicState3LineRasterizationMode + VkBool32 extendedDynamicState3LineStippleEnable + VkBool32 extendedDynamicState3DepthClipNegativeOneToOne + VkBool32 extendedDynamicState3ViewportWScalingEnable + VkBool32 extendedDynamicState3ViewportSwizzle + VkBool32 extendedDynamicState3CoverageToColorEnable + VkBool32 extendedDynamicState3CoverageToColorLocation + VkBool32 extendedDynamicState3CoverageModulationMode + VkBool32 extendedDynamicState3CoverageModulationTableEnable + VkBool32 extendedDynamicState3CoverageModulationTable + VkBool32 extendedDynamicState3CoverageReductionMode + VkBool32 extendedDynamicState3RepresentativeFragmentTestEnable + VkBool32 extendedDynamicState3ShadingRateImageEnable + + + VkStructureType sType + void* pNext + VkBool32 dynamicPrimitiveTopologyUnrestricted + + + VkBlendFactor srcColorBlendFactor + VkBlendFactor dstColorBlendFactor + VkBlendOp colorBlendOp + VkBlendFactor srcAlphaBlendFactor + VkBlendFactor dstAlphaBlendFactor + VkBlendOp alphaBlendOp + + + VkBlendOp advancedBlendOp + VkBool32 srcPremultiplied + VkBool32 dstPremultiplied + VkBlendOverlapEXT blendOverlap + VkBool32 clampResults + + + VkStructureType sType + const void* pNextPointer to next structure + VkSurfaceTransformFlagBitsKHR transform + + + VkStructureType sType + const void* pNext + VkSurfaceTransformFlagBitsKHR transform + + + VkStructureType sType + const void* pNextPointer to next structure + VkSurfaceTransformFlagBitsKHR transform + VkRect2D renderArea + + + VkStructureType sType + void* pNext + VkBool32 partitionedAccelerationStructure + + + VkStructureType sType + void* pNext + uint32_t maxPartitionCount + + + VkPartitionedAccelerationStructureOpTypeNV opType + uint32_t argCount + VkStridedDeviceAddressNV argData + + + VkStructureType sType + void* pNext + VkBool32 enablePartitionTranslation + + + VkTransformMatrixKHR transform + float explicitAABB[6] + uint32_t instanceID + uint32_t instanceMask + uint32_t instanceContributionToHitGroupIndex + VkPartitionedAccelerationStructureInstanceFlagsNV instanceFlags + uint32_t instanceIndex + uint32_t partitionIndex + VkDeviceAddress accelerationStructure + + + uint32_t instanceIndex + uint32_t instanceContributionToHitGroupIndex + VkDeviceAddress accelerationStructure + + + uint32_t partitionIndex + float partitionTranslation[3] + + + VkStructureType sType + void* pNext + uint32_t accelerationStructureCount + const VkDeviceAddress* pAccelerationStructures + + + VkStructureType sType + void* pNext + VkBuildAccelerationStructureFlagsKHR flags + uint32_t instanceCount + uint32_t maxInstancePerPartitionCount + uint32_t partitionCount + uint32_t maxInstanceInGlobalPartitionCount + + + VkStructureType sType + void* pNext + VkPartitionedAccelerationStructureInstancesInputNV input + VkDeviceAddress srcAccelerationStructureData + VkDeviceAddress dstAccelerationStructureData + VkDeviceAddress scratchData + VkDeviceAddress srcInfos + VkDeviceAddress srcInfosCount + + + VkStructureType sType + void* pNext + VkBool32 diagnosticsConfig + + + VkStructureType sType + const void* pNext + VkDeviceDiagnosticsConfigFlagsNV flags + + + VkStructureType sType + const void* pNext + uint8_t pipelineIdentifier[VK_UUID_SIZE] + VkPipelineMatchControl matchControl + VkDeviceSize poolEntrySize + + + VkStructureType sType + void* pNext + VkBool32 shaderZeroInitializeWorkgroupMemory + + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupUniformControlFlow + + + VkStructureType sType + void* pNext + VkBool32 robustBufferAccess2 + VkBool32 robustImageAccess2 + VkBool32 nullDescriptor + + + + VkStructureType sType + void* pNext + VkDeviceSize robustStorageBufferAccessSizeAlignment + VkDeviceSize robustUniformBufferAccessSizeAlignment + + + + VkStructureType sType + void* pNext + VkBool32 robustImageAccess + + + + VkStructureType sType + void* pNext + VkBool32 workgroupMemoryExplicitLayout + VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout + VkBool32 workgroupMemoryExplicitLayout8BitAccess + VkBool32 workgroupMemoryExplicitLayout16BitAccess + + + VkStructureType sType + void* pNext + VkBool32 constantAlphaColorBlendFactors + VkBool32 events + VkBool32 imageViewFormatReinterpretation + VkBool32 imageViewFormatSwizzle + VkBool32 imageView2DOn3DImage + VkBool32 multisampleArrayImage + VkBool32 mutableComparisonSamplers + VkBool32 pointPolygons + VkBool32 samplerMipLodBias + VkBool32 separateStencilMaskRef + VkBool32 shaderSampleRateInterpolationFunctions + VkBool32 tessellationIsolines + VkBool32 tessellationPointMode + VkBool32 triangleFans + VkBool32 vertexAttributeAccessBeyondStride + + + VkStructureType sType + void* pNext + uint32_t minVertexInputBindingStrideAlignment + + + VkStructureType sType + void* pNext + VkBool32 formatA4R4G4B4 + VkBool32 formatA4B4G4R4 + + + VkStructureType sType + void* pNext + VkBool32 subpassShading + + + VkStructureType sType + void* pNext + VkBool32 clustercullingShader + VkBool32 multiviewClusterCullingShader + + + VkStructureType sType + void* pNext + VkBool32 clusterShadingRate + + + VkStructureType sType + const void* pNext + VkDeviceSize srcOffsetSpecified in bytes + VkDeviceSize dstOffsetSpecified in bytes + VkDeviceSize sizeSpecified in bytes + + + + VkStructureType sType + const void* pNext + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsetSpecified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D extentSpecified in pixels for both compressed and uncompressed images + + + + VkStructureType sType + const void* pNext + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffsets[2]Specified in pixels for both compressed and uncompressed images + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffsets[2]Specified in pixels for both compressed and uncompressed images + + + + VkStructureType sType + const void* pNext + VkDeviceSize bufferOffsetSpecified in bytes + uint32_t bufferRowLengthSpecified in texels + uint32_t bufferImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffsetSpecified in pixels for both compressed and uncompressed images + VkExtent3D imageExtentSpecified in pixels for both compressed and uncompressed images + + + + VkStructureType sType + const void* pNext + VkImageSubresourceLayers srcSubresource + VkOffset3D srcOffset + VkImageSubresourceLayers dstSubresource + VkOffset3D dstOffset + VkExtent3D extent + + + + VkStructureType sType + const void* pNext + VkBuffer srcBuffer + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageBlit2* pRegions + VkFilter filter + + + + VkStructureType sType + const void* pNext + VkBuffer srcBuffer + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkBufferImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageResolve2* pRegions + + + + VkStructureType sType + void* pNext + VkBool32 shaderImageInt64Atomics + VkBool32 sparseImageInt64Atomics + + + VkStructureType sType + const void* pNext + const VkAttachmentReference2* pFragmentShadingRateAttachment + VkExtent2D shadingRateAttachmentTexelSize + + + VkStructureType sType + const void* pNext + VkExtent2D fragmentSize + VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + VkStructureType sType + void* pNext + VkBool32 pipelineFragmentShadingRate + VkBool32 primitiveFragmentShadingRate + VkBool32 attachmentFragmentShadingRate + + + 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 + + + VkStructureType sType + void* pNext + VkSampleCountFlags sampleCounts + VkExtent2D fragmentSize + + + VkStructureType sType + void* pNext + VkBool32 shaderTerminateInvocation + + + + VkStructureType sType + void* pNext + VkBool32 fragmentShadingRateEnums + VkBool32 supersampleFragmentShadingRates + VkBool32 noInvocationFragmentShadingRates + + + VkStructureType sType + void* pNext + VkSampleCountFlagBits maxFragmentShadingRateInvocationCount + + + VkStructureType sType + const void* pNext + VkFragmentShadingRateTypeNV shadingRateType + VkFragmentShadingRateNV shadingRate + VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + VkStructureType sType + const void* pNext + VkDeviceSize accelerationStructureSize + VkDeviceSize updateScratchSize + VkDeviceSize buildScratchSize + + + VkStructureType sType + void* pNext + VkBool32 image2DViewOf3D + VkBool32 sampler2DViewOf3D + + + VkStructureType sType + void* pNext + VkBool32 imageSlicedViewOf3D + + + VkStructureType sType + void* pNext + VkBool32 attachmentFeedbackLoopDynamicState + + + VkStructureType sType + void* pNext + VkBool32 legacyVertexAttributes + + + VkStructureType sType + void* pNext + VkBool32 nativeUnalignedPerformance + + + VkStructureType sType + void* pNext + VkBool32 mutableDescriptorType + + + + uint32_t descriptorTypeCount + const VkDescriptorType* pDescriptorTypes + + + + VkStructureType sType + const void* pNext + uint32_t mutableDescriptorTypeListCount + const VkMutableDescriptorTypeListEXT* pMutableDescriptorTypeLists + + + + VkStructureType sType + void* pNext + VkBool32 depthClipControl + + + VkStructureType sType + void* pNext + VkBool32 zeroInitializeDeviceMemory + + + VkStructureType sType + void* pNext + VkBool32 deviceGeneratedCommands + VkBool32 dynamicGeneratedPipelineLayout + + + VkStructureType sType + void* pNext + uint32_t maxIndirectPipelineCount + uint32_t maxIndirectShaderObjectCount + uint32_t maxIndirectSequenceCount + uint32_t maxIndirectCommandsTokenCount + uint32_t maxIndirectCommandsTokenOffset + uint32_t maxIndirectCommandsIndirectStride + VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes + VkShaderStageFlags supportedIndirectCommandsShaderStages + VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding + VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding + VkBool32 deviceGeneratedCommandsTransformFeedback + VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount + + + VkStructureType sType + void* pNext + VkPipeline pipeline + + + VkStructureType sType + void* pNext + uint32_t shaderCount + const VkShaderEXT* pShaders + + + VkStructureType sType + const void* pNext + VkIndirectExecutionSetEXT indirectExecutionSet + VkIndirectCommandsLayoutEXT indirectCommandsLayout + uint32_t maxSequenceCount + uint32_t maxDrawCount + + + VkStructureType sType + const void* pNext + VkPipeline initialPipeline + uint32_t maxPipelineCount + + + VkStructureType sType + const void* pNext + uint32_t setLayoutCount + const VkDescriptorSetLayout* pSetLayouts + + + VkStructureType sType + const void* pNext + uint32_t shaderCount + const VkShaderEXT* pInitialShaders + const VkIndirectExecutionSetShaderLayoutInfoEXT* pSetLayoutInfos + uint32_t maxShaderCount + uint32_t pushConstantRangeCount + const VkPushConstantRange* pPushConstantRanges + + + const VkIndirectExecutionSetPipelineInfoEXT* pPipelineInfo + const VkIndirectExecutionSetShaderInfoEXT* pShaderInfo + + + VkStructureType sType + const void* pNext + VkIndirectExecutionSetInfoTypeEXT type + VkIndirectExecutionSetInfoEXT info + + + VkStructureType sType + const void* pNext + VkShaderStageFlags shaderStages + VkIndirectExecutionSetEXT indirectExecutionSet + VkIndirectCommandsLayoutEXT indirectCommandsLayout + VkDeviceAddress indirectAddress + VkDeviceSize indirectAddressSize + VkDeviceAddress preprocessAddress + VkDeviceSize preprocessSize + uint32_t maxSequenceCount + VkDeviceAddress sequenceCountAddress + uint32_t maxDrawCount + + + VkStructureType sType + const void* pNext + uint32_t index + VkPipeline pipeline + + + VkStructureType sType + const void* pNext + uint32_t index + VkShaderEXT shader + + + VkStructureType sType + const void* pNext + VkIndirectCommandsLayoutUsageFlagsEXT flags + VkShaderStageFlags shaderStages + uint32_t indirectStride + VkPipelineLayout pipelineLayout + uint32_t tokenCount + const VkIndirectCommandsLayoutTokenEXT* pTokens + + + VkStructureType sType + const void* pNext + VkIndirectCommandsTokenTypeEXT type + VkIndirectCommandsTokenDataEXT data + uint32_t offset + + + VkDeviceAddress bufferAddress + uint32_t stride + uint32_t commandCount + + + uint32_t vertexBindingUnit + + + VkDeviceAddress bufferAddress + uint32_t size + uint32_t stride + + + VkIndirectCommandsInputModeFlagBitsEXT mode + + + VkDeviceAddress bufferAddress + uint32_t size + VkIndexType indexType + + + VkPushConstantRange updateRange + + + VkIndirectExecutionSetInfoTypeEXT type + VkShaderStageFlags shaderStages + + + const VkIndirectCommandsPushConstantTokenEXT* pPushConstant + const VkIndirectCommandsVertexBufferTokenEXT* pVertexBuffer + const VkIndirectCommandsIndexBufferTokenEXT* pIndexBuffer + const VkIndirectCommandsExecutionSetTokenEXT* pExecutionSet + + + VkStructureType sType + const void* pNext + VkBool32 negativeOneToOne + + + VkStructureType sType + void* pNext + VkBool32 depthClampControl + + + VkStructureType sType + const void* pNext + VkDepthClampModeEXT depthClampMode + const VkDepthClampRangeEXT* pDepthClampRange + + + VkStructureType sType + void* pNext + VkBool32 vertexInputDynamicState + + + VkStructureType sType + void* pNext + VkBool32 externalMemoryRDMA + + + VkStructureType sType + void* pNext + VkBool32 shaderRelaxedExtendedInstruction + + + VkStructureType sType + void* pNext + uint32_t binding + uint32_t stride + VkVertexInputRate inputRate + uint32_t divisor + + + VkStructureType sType + void* pNext + uint32_t locationlocation of the shader vertex attrib + uint32_t bindingVertex buffer binding id + VkFormat formatformat of source data + uint32_t offsetOffset of first element in bytes from base of vertex + + + VkStructureType sType + void* pNext + VkBool32 colorWriteEnable + + + VkStructureType sType + const void* pNext + uint32_t attachmentCount# of pAttachments + const VkBool32* pColorWriteEnables + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + VkImageLayout oldLayout + VkImageLayout newLayout + uint32_t srcQueueFamilyIndex + uint32_t dstQueueFamilyIndex + VkImage image + VkImageSubresourceRange subresourceRange + + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + uint32_t srcQueueFamilyIndex + uint32_t dstQueueFamilyIndex + VkBuffer buffer + VkDeviceSize offset + VkDeviceSize size + + + + VkStructureType sType + const void* pNext + VkAccessFlags3KHR srcAccessMask3 + VkAccessFlags3KHR dstAccessMask3 + + + VkStructureType sType + const void* pNext + VkDependencyFlags dependencyFlags + uint32_t memoryBarrierCount + const VkMemoryBarrier2* pMemoryBarriers + uint32_t bufferMemoryBarrierCount + const VkBufferMemoryBarrier2* pBufferMemoryBarriers + uint32_t imageMemoryBarrierCount + const VkImageMemoryBarrier2* pImageMemoryBarriers + + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + uint64_t value + VkPipelineStageFlags2 stageMask + uint32_t deviceIndex + + + + VkStructureType sType + const void* pNext + VkCommandBuffer commandBuffer + uint32_t deviceMask + + + + VkStructureType sType + const void* pNext + VkSubmitFlags flags + uint32_t waitSemaphoreInfoCount + const VkSemaphoreSubmitInfo* pWaitSemaphoreInfos + uint32_t commandBufferInfoCount + const VkCommandBufferSubmitInfo* pCommandBufferInfos + uint32_t signalSemaphoreInfoCount + const VkSemaphoreSubmitInfo* pSignalSemaphoreInfos + + + + VkStructureType sType + void* pNext + VkPipelineStageFlags2 checkpointExecutionStageMask + + + VkStructureType sType + void* pNext + VkPipelineStageFlags2 stage + void* pCheckpointMarker + + + VkStructureType sType + void* pNext + VkBool32 synchronization2 + + + + VkStructureType sType + void* pNext + VkBool32 unifiedImageLayouts + VkBool32 unifiedImageLayoutsVideo + + + VkStructureType sType + void* pNext + VkBool32 hostImageCopy + + + + VkStructureType sType + void* pNext + uint32_t copySrcLayoutCount + VkImageLayout* pCopySrcLayouts + uint32_t copyDstLayoutCount + VkImageLayout* pCopyDstLayouts + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE] + VkBool32 identicalMemoryTypeRequirements + + + + VkStructureType sType + const void* pNext + const void* pHostPointer + uint32_t memoryRowLengthSpecified in texels + uint32_t memoryImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffset + VkExtent3D imageExtent + + + + VkStructureType sType + const void* pNext + void* pHostPointer + uint32_t memoryRowLengthSpecified in texels + uint32_t memoryImageHeight + VkImageSubresourceLayers imageSubresource + VkOffset3D imageOffset + VkExtent3D imageExtent + + + + VkStructureType sType + const void* pNext + VkHostImageCopyFlags flags + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkMemoryToImageCopy* pRegions + + + + VkStructureType sType + const void* pNext + VkHostImageCopyFlags flags + VkImage srcImage + VkImageLayout srcImageLayout + uint32_t regionCount + const VkImageToMemoryCopy* pRegions + + + + VkStructureType sType + const void* pNext + VkHostImageCopyFlags flags + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageCopy2* pRegions + + + + VkStructureType sType + const void* pNext + VkImage image + VkImageLayout oldLayout + VkImageLayout newLayout + VkImageSubresourceRange subresourceRange + + + + VkStructureType sType + void* pNext + VkDeviceSize sizeSpecified in bytes + + + + VkStructureType sType + void* pNext + VkBool32 optimalDeviceAccessSpecifies if device access is optimal + VkBool32 identicalMemoryLayoutSpecifies if memory layout is identical + + + + VkStructureType sType + void* pNext + VkBool32 deviceNoDynamicHostAllocations + VkBool32 deviceDestroyFreesMemory + VkBool32 commandPoolMultipleCommandBuffersRecording + VkBool32 commandPoolResetCommandBuffer + VkBool32 commandBufferSimultaneousUse + VkBool32 secondaryCommandBufferNullOrImagelessFramebuffer + VkBool32 recycleDescriptorSetMemory + VkBool32 recyclePipelineMemory + uint32_t maxRenderPassSubpasses + uint32_t maxRenderPassDependencies + uint32_t maxSubpassInputAttachments + uint32_t maxSubpassPreserveAttachments + uint32_t maxFramebufferAttachments + uint32_t maxDescriptorSetLayoutBindings + uint32_t maxQueryFaultCount + uint32_t maxCallbackFaultCount + uint32_t maxCommandPoolCommandBuffers + VkDeviceSize maxCommandBufferSize + + + VkStructureType sType + const void* pNext + VkDeviceSize poolEntrySize + uint32_t poolEntryCount + + + VkStructureType sType + const void* pNext + uint32_t pipelineCacheCreateInfoCount + const VkPipelineCacheCreateInfo* pPipelineCacheCreateInfos + uint32_t pipelinePoolSizeCount + const VkPipelinePoolSize* pPipelinePoolSizes + 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 pipelineCacheRequestCount + 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 + uint32_t subpassDescriptionRequestCount + uint32_t attachmentDescriptionRequestCount + uint32_t descriptorSetLayoutBindingRequestCount + uint32_t descriptorSetLayoutBindingLimit + uint32_t maxImageViewMipLevels + uint32_t maxImageViewArrayLayers + uint32_t maxLayeredImageViewMipLevels + uint32_t maxOcclusionQueriesPerPool + uint32_t maxPipelineStatisticsQueriesPerPool + uint32_t maxTimestampQueriesPerPool + uint32_t maxImmutableSamplersPerDescriptorSetLayout + + + VkStructureType sType + const void* pNext + VkDeviceSize commandPoolReservedSize + uint32_t commandPoolMaxCommandBuffers + + + VkStructureType sType + void* pNext + VkDeviceSize commandPoolAllocated + VkDeviceSize commandPoolReservedSize + VkDeviceSize commandBufferAllocated + + + VkStructureType sType + void* pNext + VkBool32 shaderAtomicInstructions + + + VkStructureType sType + void* pNext + VkBool32 primitivesGeneratedQuery + VkBool32 primitivesGeneratedQueryWithRasterizerDiscard + VkBool32 primitivesGeneratedQueryWithNonZeroStreams + + + VkStructureType sType + void* pNext + VkBool32 legacyDithering + + + VkStructureType sType + void* pNext + VkBool32 multisampledRenderToSingleSampled + + + VkStructureType sType + void* pNext + VkBool32 presentId2Supported + + + VkStructureType sType + void* pNext + VkBool32 presentWait2Supported + + + VkStructureType sType + void* pNext + VkBool32 optimal + + + VkStructureType sType + const void* pNext + VkBool32 multisampledRenderToSingleSampledEnable + VkSampleCountFlagBits rasterizationSamples + + + VkStructureType sType + void* pNext + VkBool32 pipelineProtectedAccess + + + + VkStructureType sType + void* pNext + VkVideoCodecOperationFlagsKHR videoCodecOperations + + + VkStructureType sType + void* pNext + VkBool32 queryResultStatusSupport + + + VkStructureType sType + const void* pNext + uint32_t profileCount + const VkVideoProfileInfoKHR* pProfiles + + + VkStructureType sType + const void* pNext + VkImageUsageFlags imageUsage + + + VkStructureType sType + void* pNext + VkFormat format + VkComponentMapping componentMapping + VkImageCreateFlags imageCreateFlags + VkImageType imageType + VkImageTiling imageTiling + VkImageUsageFlags imageUsageFlags + + + VkStructureType sType + void* pNext + VkExtent2D maxQuantizationMapExtent + + + VkStructureType sType + void* pNext + int32_t minQpDelta + int32_t maxQpDelta + + + VkStructureType sType + void* pNext + int32_t minQpDelta + int32_t maxQpDelta + + + VkStructureType sType + void* pNext + int32_t minQIndexDelta + int32_t maxQIndexDelta + + + VkStructureType sType + void* pNext + VkExtent2D quantizationMapTexelSize + + + VkStructureType sType + void* pNext + VkVideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes + + + VkStructureType sType + void* pNext + VkVideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes + + + VkStructureType sType + const void* pNext + VkVideoCodecOperationFlagBitsKHR videoCodecOperation + VkVideoChromaSubsamplingFlagsKHR chromaSubsampling + VkVideoComponentBitDepthFlagsKHR lumaBitDepth + VkVideoComponentBitDepthFlagsKHR chromaBitDepth + + + VkStructureType sType + void* pNext + VkVideoCapabilityFlagsKHR flags + VkDeviceSize minBitstreamBufferOffsetAlignment + VkDeviceSize minBitstreamBufferSizeAlignment + VkExtent2D pictureAccessGranularity + VkExtent2D minCodedExtent + VkExtent2D maxCodedExtent + uint32_t maxDpbSlots + uint32_t maxActiveReferencePictures + VkExtensionProperties stdHeaderVersion + + + VkStructureType sType + void* pNext + uint32_t memoryBindIndex + VkMemoryRequirements memoryRequirements + + + VkStructureType sType + const void* pNext + uint32_t memoryBindIndex + VkDeviceMemory memory + VkDeviceSize memoryOffset + VkDeviceSize memorySize + + + VkStructureType sType + const void* pNext + VkOffset2D codedOffsetThe offset to be used for the picture resource, currently only used in field mode + VkExtent2D codedExtentThe extent to be used for the picture resource + uint32_t baseArrayLayerThe first array layer to be accessed for the Decode or Encode Operations + VkImageView imageViewBindingThe ImageView binding of the resource + + + VkStructureType sType + const void* pNext + int32_t slotIndexThe reference slot index + const VkVideoPictureResourceInfoKHR* pPictureResourceThe reference picture resource + + + VkStructureType sType + void* pNext + VkVideoDecodeCapabilityFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkVideoDecodeUsageFlagsKHR videoUsageHints + + + VkStructureType sType + const void* pNext + VkVideoDecodeFlagsKHR flags + VkBuffer srcBuffer + VkDeviceSize srcBufferOffset + VkDeviceSize srcBufferRange + VkVideoPictureResourceInfoKHR dstPictureResource + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot + uint32_t referenceSlotCount + const VkVideoReferenceSlotInfoKHR* pReferenceSlots + + + VkStructureType sType + void* pNext + VkBool32 videoMaintenance1 + + + VkStructureType sType + void* pNext + VkBool32 videoMaintenance2 + + + VkStructureType sType + const void* pNext + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + + Video Decode Codec Standard specific structures + #include "vk_video/vulkan_video_codec_h264std.h" + + + #include "vk_video/vulkan_video_codec_h264std_decode.h" + + + + VkStructureType sType + const void* pNext + StdVideoH264ProfileIdc stdProfileIdc + VkVideoDecodeH264PictureLayoutFlagBitsKHR pictureLayout + + + VkStructureType sType + void* pNext + StdVideoH264LevelIdc maxLevelIdc + VkOffset2D fieldOffsetGranularity + + + + + VkStructureType sType + const void* pNext + uint32_t stdSPSCount + const StdVideoH264SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH264PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoDecodeH264SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + const StdVideoH264SequenceParameterSet* pStdSPS + const StdVideoH264PictureParameterSet* pStdPPS + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH264PictureInfo* pStdPictureInfo + uint32_t sliceCount + const uint32_t* pSliceOffsets + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH264ReferenceInfo* pStdReferenceInfo + + #include "vk_video/vulkan_video_codec_h265std.h" + + + + + + #include "vk_video/vulkan_video_codec_h265std_decode.h" + + + + VkStructureType sType + const void* pNext + StdVideoH265ProfileIdc stdProfileIdc + + + VkStructureType sType + void* pNext + StdVideoH265LevelIdc maxLevelIdc + + + VkStructureType sType + const void* pNext + uint32_t stdVPSCount + const StdVideoH265VideoParameterSet* pStdVPSs + uint32_t stdSPSCount + const StdVideoH265SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH265PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdVPSCount + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoDecodeH265SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + const StdVideoH265VideoParameterSet* pStdVPS + const StdVideoH265SequenceParameterSet* pStdSPS + const StdVideoH265PictureParameterSet* pStdPPS + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH265PictureInfo* pStdPictureInfo + uint32_t sliceSegmentCount + const uint32_t* pSliceSegmentOffsets + + + VkStructureType sType + const void* pNext + const StdVideoDecodeH265ReferenceInfo* pStdReferenceInfo + + #include "vk_video/vulkan_video_codec_vp9std.h" + + + #include "vk_video/vulkan_video_codec_vp9std_decode.h" + + + VkStructureType sType + void* pNext + VkBool32 videoDecodeVP9 + + + VkStructureType sType + const void* pNext + StdVideoVP9Profile stdProfile + + + VkStructureType sType + void* pNext + StdVideoVP9Level maxLevel + + + VkStructureType sType + const void* pNext + const StdVideoDecodeVP9PictureInfo* pStdPictureInfo + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR] + uint32_t uncompressedHeaderOffset + uint32_t compressedHeaderOffset + uint32_t tilesOffset + + #include "vk_video/vulkan_video_codec_av1std.h" + + + + #include "vk_video/vulkan_video_codec_av1std_decode.h" + + + + VkStructureType sType + const void* pNext + StdVideoAV1Profile stdProfile + VkBool32 filmGrainSupport + + + VkStructureType sType + void* pNext + StdVideoAV1Level maxLevel + + + VkStructureType sType + const void* pNext + const StdVideoAV1SequenceHeader* pStdSequenceHeader + + + VkStructureType sType + const void* pNext + const StdVideoAV1SequenceHeader* pStdSequenceHeader + + + VkStructureType sType + const void* pNext + const StdVideoDecodeAV1PictureInfo* pStdPictureInfo + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR] + uint32_t frameHeaderOffset + uint32_t tileCount + const uint32_t* pTileOffsets + const uint32_t* pTileSizes + + + VkStructureType sType + const void* pNext + const StdVideoDecodeAV1ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + const void* pNext + uint32_t queueFamilyIndex + VkVideoSessionCreateFlagsKHR flags + const VkVideoProfileInfoKHR* pVideoProfile + VkFormat pictureFormat + VkExtent2D maxCodedExtent + VkFormat referencePictureFormat + uint32_t maxDpbSlots + uint32_t maxActiveReferencePictures + const VkExtensionProperties* pStdHeaderVersion + + + VkStructureType sType + const void* pNext + VkVideoSessionParametersCreateFlagsKHR flags + VkVideoSessionParametersKHR videoSessionParametersTemplate + VkVideoSessionKHR videoSession + + + VkStructureType sType + const void* pNext + uint32_t updateSequenceCount + + + VkStructureType sType + const void* pNext + VkVideoSessionParametersKHR videoSessionParameters + + + VkStructureType sType + void* pNext + VkBool32 hasOverrides + + + VkStructureType sType + const void* pNext + VkVideoBeginCodingFlagsKHR flags + VkVideoSessionKHR videoSession + VkVideoSessionParametersKHR videoSessionParameters + uint32_t referenceSlotCount + const VkVideoReferenceSlotInfoKHR* pReferenceSlots + + + VkStructureType sType + const void* pNext + VkVideoEndCodingFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkVideoCodingControlFlagsKHR flags + + + VkStructureType sType + const void* pNext + VkVideoEncodeUsageFlagsKHR videoUsageHints + VkVideoEncodeContentFlagsKHR videoContentHints + VkVideoEncodeTuningModeKHR tuningMode + + + VkStructureType sType + const void* pNext + VkVideoEncodeFlagsKHR flags + VkBuffer dstBuffer + VkDeviceSize dstBufferOffset + VkDeviceSize dstBufferRange + VkVideoPictureResourceInfoKHR srcPictureResource + const VkVideoReferenceSlotInfoKHR* pSetupReferenceSlot + uint32_t referenceSlotCount + const VkVideoReferenceSlotInfoKHR* pReferenceSlots + uint32_t precedingExternallyEncodedBytes + + + VkStructureType sType + const void* pNext + VkImageView quantizationMap + VkExtent2D quantizationMapExtent + + + VkStructureType sType + const void* pNext + VkExtent2D quantizationMapTexelSize + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeQuantizationMap + + + VkStructureType sType + const void* pNext + VkVideoEncodeFeedbackFlagsKHR encodeFeedbackFlags + + + VkStructureType sType + const void* pNext + uint32_t qualityLevel + + + VkStructureType sType + const void* pNext + const VkVideoProfileInfoKHR* pVideoProfile + uint32_t qualityLevel + + + VkStructureType sType + void* pNext + VkVideoEncodeRateControlModeFlagBitsKHR preferredRateControlMode + uint32_t preferredRateControlLayerCount + + + VkStructureType sType + const void* pNext + VkVideoEncodeRateControlFlagsKHR flags + VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode + uint32_t layerCount + const VkVideoEncodeRateControlLayerInfoKHR* pLayers + uint32_t virtualBufferSizeInMs + uint32_t initialVirtualBufferSizeInMs + + + VkStructureType sType + const void* pNext + uint64_t averageBitrate + uint64_t maxBitrate + uint32_t frameRateNumerator + uint32_t frameRateDenominator + + + VkStructureType sType + void* pNext + VkVideoEncodeCapabilityFlagsKHR flags + VkVideoEncodeRateControlModeFlagsKHR rateControlModes + uint32_t maxRateControlLayers + uint64_t maxBitrate + uint32_t maxQualityLevels + VkExtent2D encodeInputPictureGranularity + VkVideoEncodeFeedbackFlagsKHR supportedEncodeFeedbackFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeH264CapabilityFlagsKHR flags + StdVideoH264LevelIdc maxLevelIdc + uint32_t maxSliceCount + uint32_t maxPPictureL0ReferenceCount + uint32_t maxBPictureL0ReferenceCount + uint32_t maxL1ReferenceCount + uint32_t maxTemporalLayerCount + VkBool32 expectDyadicTemporalLayerPattern + int32_t minQp + int32_t maxQp + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeH264StdFlagsKHR stdSyntaxFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeH264RateControlFlagsKHR preferredRateControlFlags + uint32_t preferredGopFrameCount + uint32_t preferredIdrPeriod + uint32_t preferredConsecutiveBFrameCount + uint32_t preferredTemporalLayerCount + VkVideoEncodeH264QpKHR preferredConstantQp + uint32_t preferredMaxL0ReferenceCount + uint32_t preferredMaxL1ReferenceCount + VkBool32 preferredStdEntropyCodingModeFlag + + #include "vk_video/vulkan_video_codec_h264std_encode.h" + + + + + VkStructureType sType + const void* pNext + VkBool32 useMaxLevelIdc + StdVideoH264LevelIdc maxLevelIdc + + + VkStructureType sType + const void* pNext + uint32_t stdSPSCount + const StdVideoH264SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH264PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoEncodeH264SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + VkBool32 writeStdSPS + VkBool32 writeStdPPS + uint32_t stdSPSId + uint32_t stdPPSId + + + VkStructureType sType + void* pNext + VkBool32 hasStdSPSOverrides + VkBool32 hasStdPPSOverrides + + + VkStructureType sType + const void* pNext + const StdVideoEncodeH264ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + const void* pNext + uint32_t naluSliceEntryCount + const VkVideoEncodeH264NaluSliceInfoKHR* pNaluSliceEntries + const StdVideoEncodeH264PictureInfo* pStdPictureInfo + VkBool32 generatePrefixNalu + + + VkStructureType sType + const void* pNext + StdVideoH264ProfileIdc stdProfileIdc + + + VkStructureType sType + const void* pNext + int32_t constantQp + const StdVideoEncodeH264SliceHeader* pStdSliceHeader + + + VkStructureType sType + const void* pNext + VkVideoEncodeH264RateControlFlagsKHR flags + uint32_t gopFrameCount + uint32_t idrPeriod + uint32_t consecutiveBFrameCount + uint32_t temporalLayerCount + + + int32_t qpI + int32_t qpP + int32_t qpB + + + uint32_t frameISize + uint32_t framePSize + uint32_t frameBSize + + + VkStructureType sType + const void* pNext + VkBool32 useGopRemainingFrames + uint32_t gopRemainingI + uint32_t gopRemainingP + uint32_t gopRemainingB + + + VkStructureType sType + const void* pNext + VkBool32 useMinQp + VkVideoEncodeH264QpKHR minQp + VkBool32 useMaxQp + VkVideoEncodeH264QpKHR maxQp + VkBool32 useMaxFrameSize + VkVideoEncodeH264FrameSizeKHR maxFrameSize + + + VkStructureType sType + void* pNext + VkVideoEncodeH265CapabilityFlagsKHR flags + StdVideoH265LevelIdc maxLevelIdc + uint32_t maxSliceSegmentCount + VkExtent2D maxTiles + VkVideoEncodeH265CtbSizeFlagsKHR ctbSizes + VkVideoEncodeH265TransformBlockSizeFlagsKHR transformBlockSizes + uint32_t maxPPictureL0ReferenceCount + uint32_t maxBPictureL0ReferenceCount + uint32_t maxL1ReferenceCount + uint32_t maxSubLayerCount + VkBool32 expectDyadicTemporalSubLayerPattern + int32_t minQp + int32_t maxQp + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeH265StdFlagsKHR stdSyntaxFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeH265RateControlFlagsKHR preferredRateControlFlags + uint32_t preferredGopFrameCount + uint32_t preferredIdrPeriod + uint32_t preferredConsecutiveBFrameCount + uint32_t preferredSubLayerCount + VkVideoEncodeH265QpKHR preferredConstantQp + uint32_t preferredMaxL0ReferenceCount + uint32_t preferredMaxL1ReferenceCount + + #include "vk_video/vulkan_video_codec_h265std_encode.h" + + + + + VkStructureType sType + const void* pNext + VkBool32 useMaxLevelIdc + StdVideoH265LevelIdc maxLevelIdc + + + VkStructureType sType + const void* pNext + uint32_t stdVPSCount + const StdVideoH265VideoParameterSet* pStdVPSs + uint32_t stdSPSCount + const StdVideoH265SequenceParameterSet* pStdSPSs + uint32_t stdPPSCount + const StdVideoH265PictureParameterSet* pStdPPSsList of Picture Parameters associated with the spsStd, above + + + VkStructureType sType + const void* pNext + uint32_t maxStdVPSCount + uint32_t maxStdSPSCount + uint32_t maxStdPPSCount + const VkVideoEncodeH265SessionParametersAddInfoKHR* pParametersAddInfo + + + VkStructureType sType + const void* pNext + VkBool32 writeStdVPS + VkBool32 writeStdSPS + VkBool32 writeStdPPS + uint32_t stdVPSId + uint32_t stdSPSId + uint32_t stdPPSId + + + VkStructureType sType + void* pNext + VkBool32 hasStdVPSOverrides + VkBool32 hasStdSPSOverrides + VkBool32 hasStdPPSOverrides + + + VkStructureType sType + const void* pNext + uint32_t naluSliceSegmentEntryCount + const VkVideoEncodeH265NaluSliceSegmentInfoKHR* pNaluSliceSegmentEntries + const StdVideoEncodeH265PictureInfo* pStdPictureInfo + + + VkStructureType sType + const void* pNext + int32_t constantQp + const StdVideoEncodeH265SliceSegmentHeader* pStdSliceSegmentHeader + + + VkStructureType sType + const void* pNext + VkVideoEncodeH265RateControlFlagsKHR flags + uint32_t gopFrameCount + uint32_t idrPeriod + uint32_t consecutiveBFrameCount + uint32_t subLayerCount + + + int32_t qpI + int32_t qpP + int32_t qpB + + + uint32_t frameISize + uint32_t framePSize + uint32_t frameBSize + + + VkStructureType sType + const void* pNext + VkBool32 useGopRemainingFrames + uint32_t gopRemainingI + uint32_t gopRemainingP + uint32_t gopRemainingB + + + VkStructureType sType + const void* pNext + VkBool32 useMinQp + VkVideoEncodeH265QpKHR minQp + VkBool32 useMaxQp + VkVideoEncodeH265QpKHR maxQp + VkBool32 useMaxFrameSize + VkVideoEncodeH265FrameSizeKHR maxFrameSize + + + VkStructureType sType + const void* pNext + StdVideoH265ProfileIdc stdProfileIdc + + + VkStructureType sType + const void* pNext + const StdVideoEncodeH265ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + void* pNext + VkVideoEncodeAV1CapabilityFlagsKHR flags + StdVideoAV1Level maxLevel + VkExtent2D codedPictureAlignment + VkExtent2D maxTiles + VkExtent2D minTileSize + VkExtent2D maxTileSize + VkVideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes + uint32_t maxSingleReferenceCount + uint32_t singleReferenceNameMask + uint32_t maxUnidirectionalCompoundReferenceCount + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount + uint32_t unidirectionalCompoundReferenceNameMask + uint32_t maxBidirectionalCompoundReferenceCount + uint32_t maxBidirectionalCompoundGroup1ReferenceCount + uint32_t maxBidirectionalCompoundGroup2ReferenceCount + uint32_t bidirectionalCompoundReferenceNameMask + uint32_t maxTemporalLayerCount + uint32_t maxSpatialLayerCount + uint32_t maxOperatingPoints + uint32_t minQIndex + uint32_t maxQIndex + VkBool32 prefersGopRemainingFrames + VkBool32 requiresGopRemainingFrames + VkVideoEncodeAV1StdFlagsKHR stdSyntaxFlags + + + VkStructureType sType + void* pNext + VkVideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags + uint32_t preferredGopFrameCount + uint32_t preferredKeyFramePeriod + uint32_t preferredConsecutiveBipredictiveFrameCount + uint32_t preferredTemporalLayerCount + VkVideoEncodeAV1QIndexKHR preferredConstantQIndex + uint32_t preferredMaxSingleReferenceCount + uint32_t preferredSingleReferenceNameMask + uint32_t preferredMaxUnidirectionalCompoundReferenceCount + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount + uint32_t preferredUnidirectionalCompoundReferenceNameMask + uint32_t preferredMaxBidirectionalCompoundReferenceCount + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount + uint32_t preferredBidirectionalCompoundReferenceNameMask + + #include "vk_video/vulkan_video_codec_av1std_encode.h" + + + + + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeAV1 + + + VkStructureType sType + const void* pNext + VkBool32 useMaxLevel + StdVideoAV1Level maxLevel + + + VkStructureType sType + const void* pNext + const StdVideoAV1SequenceHeader* pStdSequenceHeader + const StdVideoEncodeAV1DecoderModelInfo* pStdDecoderModelInfo + uint32_t stdOperatingPointCount + const StdVideoEncodeAV1OperatingPointInfo* pStdOperatingPoints + + + VkStructureType sType + const void* pNext + const StdVideoEncodeAV1ReferenceInfo* pStdReferenceInfo + + + VkStructureType sType + const void* pNext + VkVideoEncodeAV1PredictionModeKHR predictionMode + VkVideoEncodeAV1RateControlGroupKHR rateControlGroup + uint32_t constantQIndex + const StdVideoEncodeAV1PictureInfo* pStdPictureInfo + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR] + VkBool32 primaryReferenceCdfOnly + VkBool32 generateObuExtensionHeader + + + VkStructureType sType + const void* pNext + StdVideoAV1Profile stdProfile + + + VkStructureType sType + const void* pNext + VkVideoEncodeAV1RateControlFlagsKHR flags + uint32_t gopFrameCount + uint32_t keyFramePeriod + uint32_t consecutiveBipredictiveFrameCount + uint32_t temporalLayerCount + + + uint32_t intraQIndex + uint32_t predictiveQIndex + uint32_t bipredictiveQIndex + + + uint32_t intraFrameSize + uint32_t predictiveFrameSize + uint32_t bipredictiveFrameSize + + + VkStructureType sType + const void* pNext + VkBool32 useGopRemainingFrames + uint32_t gopRemainingIntra + uint32_t gopRemainingPredictive + uint32_t gopRemainingBipredictive + + + VkStructureType sType + const void* pNext + VkBool32 useMinQIndex + VkVideoEncodeAV1QIndexKHR minQIndex + VkBool32 useMaxQIndex + VkVideoEncodeAV1QIndexKHR maxQIndex + VkBool32 useMaxFrameSize + VkVideoEncodeAV1FrameSizeKHR maxFrameSize + + + VkStructureType sType + void* pNext + VkBool32 inheritedViewportScissor2D + + + VkStructureType sType + const void* pNext + VkBool32 viewportScissor2D + uint32_t viewportDepthCount + const VkViewport* pViewportDepths + + + VkStructureType sType + void* pNext + VkBool32 ycbcr2plane444Formats + + + VkStructureType sType + void* pNext + VkBool32 provokingVertexLast + VkBool32 transformFeedbackPreservesProvokingVertex + + + VkStructureType sType + void* pNext + VkBool32 provokingVertexModePerPipeline + VkBool32 transformFeedbackPreservesTriangleFanProvokingVertex + + + VkStructureType sType + const void* pNext + VkProvokingVertexModeEXT provokingVertexMode + + + VkStructureType sType + void* pNext + VkVideoEncodeIntraRefreshModeFlagsKHR intraRefreshModes + uint32_t maxIntraRefreshCycleDuration + uint32_t maxIntraRefreshActiveReferencePictures + VkBool32 partitionIndependentIntraRefreshRegions + VkBool32 nonRectangularIntraRefreshRegions + + + VkStructureType sType + const void* pNext + VkVideoEncodeIntraRefreshModeFlagBitsKHR intraRefreshMode + + + VkStructureType sType + const void* pNext + uint32_t intraRefreshCycleDuration + uint32_t intraRefreshIndex + + + VkStructureType sType + const void* pNext + uint32_t dirtyIntraRefreshRegions + + + VkStructureType sType + void* pNext + VkBool32 videoEncodeIntraRefresh + + + VkStructureType sType + const void* pNext + size_t dataSize + const void* pData + + + VkStructureType sType + const void* pNext + VkBool32 use64bitTexturing + + + VkStructureType sType + const void* pNext + VkCuModuleNVX module + const char* pName + + + VkStructureType sType + const void* pNext + VkCuFunctionNVX function + uint32_t gridDimX + uint32_t gridDimY + uint32_t gridDimZ + uint32_t blockDimX + uint32_t blockDimY + uint32_t blockDimZ + uint32_t sharedMemBytes + size_t paramCount + const void* const * pParams + size_t extraCount + const void* const * pExtras + + + VkStructureType sType + void* pNext + VkBool32 descriptorBuffer + VkBool32 descriptorBufferCaptureReplay + VkBool32 descriptorBufferImageLayoutIgnored + VkBool32 descriptorBufferPushDescriptors + + + VkStructureType sType + void* pNext + VkBool32 combinedImageSamplerDescriptorSingleArray + VkBool32 bufferlessPushDescriptors + VkBool32 allowSamplerImageViewPostSubmitCreation + VkDeviceSize descriptorBufferOffsetAlignment + uint32_t maxDescriptorBufferBindings + uint32_t maxResourceDescriptorBufferBindings + uint32_t maxSamplerDescriptorBufferBindings + uint32_t maxEmbeddedImmutableSamplerBindings + uint32_t maxEmbeddedImmutableSamplers + size_t bufferCaptureReplayDescriptorDataSize + size_t imageCaptureReplayDescriptorDataSize + size_t imageViewCaptureReplayDescriptorDataSize + size_t samplerCaptureReplayDescriptorDataSize + size_t accelerationStructureCaptureReplayDescriptorDataSize + size_t samplerDescriptorSize + size_t combinedImageSamplerDescriptorSize + size_t sampledImageDescriptorSize + size_t storageImageDescriptorSize + size_t uniformTexelBufferDescriptorSize + size_t robustUniformTexelBufferDescriptorSize + size_t storageTexelBufferDescriptorSize + size_t robustStorageTexelBufferDescriptorSize + size_t uniformBufferDescriptorSize + size_t robustUniformBufferDescriptorSize + size_t storageBufferDescriptorSize + size_t robustStorageBufferDescriptorSize + size_t inputAttachmentDescriptorSize + size_t accelerationStructureDescriptorSize + VkDeviceSize maxSamplerDescriptorBufferRange + VkDeviceSize maxResourceDescriptorBufferRange + VkDeviceSize samplerDescriptorBufferAddressSpaceSize + VkDeviceSize resourceDescriptorBufferAddressSpaceSize + VkDeviceSize descriptorBufferAddressSpaceSize + + + VkStructureType sType + void* pNext + size_t combinedImageSamplerDensityMapDescriptorSize + + + VkStructureType sType + void* pNext + VkDeviceAddress address + VkDeviceSize range + VkFormat format + + + VkStructureType sType + const void* pNext + VkDeviceAddress address + VkBufferUsageFlags usage + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + const VkSampler* pSampler + const VkDescriptorImageInfo* pCombinedImageSampler + const VkDescriptorImageInfo* pInputAttachmentImage + const VkDescriptorImageInfo* pSampledImage + const VkDescriptorImageInfo* pStorageImage + const VkDescriptorAddressInfoEXT* pUniformTexelBuffer + const VkDescriptorAddressInfoEXT* pStorageTexelBuffer + const VkDescriptorAddressInfoEXT* pUniformBuffer + const VkDescriptorAddressInfoEXT* pStorageBuffer + VkDeviceAddress accelerationStructure + + + VkStructureType sType + const void* pNext + VkDescriptorType type + VkDescriptorDataEXT data + + + VkStructureType sType + const void* pNext + VkBuffer buffer + + + VkStructureType sType + const void* pNext + VkImage image + + + VkStructureType sType + const void* pNext + VkImageView imageView + + + VkStructureType sType + const void* pNext + VkSampler sampler + + + VkStructureType sType + const void* pNext + VkAccelerationStructureKHR accelerationStructure + VkAccelerationStructureNV accelerationStructureNV + + + VkStructureType sType + const void* pNext + const void* opaqueCaptureDescriptorData + + + VkStructureType sType + void* pNext + VkBool32 shaderIntegerDotProduct + + + + VkStructureType sType + void* pNext + VkBool32 integerDotProduct8BitUnsignedAccelerated + VkBool32 integerDotProduct8BitSignedAccelerated + VkBool32 integerDotProduct8BitMixedSignednessAccelerated + VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProduct4x8BitPackedSignedAccelerated + VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProduct16BitUnsignedAccelerated + VkBool32 integerDotProduct16BitSignedAccelerated + VkBool32 integerDotProduct16BitMixedSignednessAccelerated + VkBool32 integerDotProduct32BitUnsignedAccelerated + VkBool32 integerDotProduct32BitSignedAccelerated + VkBool32 integerDotProduct32BitMixedSignednessAccelerated + VkBool32 integerDotProduct64BitUnsignedAccelerated + VkBool32 integerDotProduct64BitSignedAccelerated + VkBool32 integerDotProduct64BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated + VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated + + + + VkStructureType sType + void* pNext + VkBool32 hasPrimary + VkBool32 hasRender + int64_t primaryMajor + int64_t primaryMinor + int64_t renderMajor + int64_t renderMinor + + + VkStructureType sType + void* pNext + VkBool32 fragmentShaderBarycentric + + + VkStructureType sType + void* pNext + VkBool32 triStripVertexOrderIndependentOfProvokingVertex + + + VkStructureType sType + void* pNext + VkBool32 rayTracingMotionBlur + VkBool32 rayTracingMotionBlurPipelineTraceRaysIndirect + + + VkStructureType sType + void* pNext + VkBool32 rayTracingValidation + + + VkStructureType sType + void* pNext + VkBool32 spheres + VkBool32 linearSweptSpheres + + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR vertexData + + + VkStructureType sType + const void* pNext + uint32_t maxInstances + VkAccelerationStructureMotionInfoFlagsNV flags + + + float sx + float a + float b + float pvx + float sy + float c + float pvy + float sz + float pvz + float qx + float qy + float qz + float qw + float tx + float ty + float tz + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + VkSRTDataNV transformT0 + VkSRTDataNV transformT1 + uint32_t instanceCustomIndex:24 + uint32_t mask:8 + uint32_t instanceShaderBindingTableRecordOffset:24 + VkGeometryInstanceFlagsKHR flags:8 + uint64_t accelerationStructureReference + + + The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout. + VkTransformMatrixKHR transformT0 + VkTransformMatrixKHR transformT1 + uint32_t instanceCustomIndex:24 + uint32_t mask:8 + uint32_t instanceShaderBindingTableRecordOffset:24 + VkGeometryInstanceFlagsKHR flags:8 + uint64_t accelerationStructureReference + + + VkAccelerationStructureInstanceKHR staticInstance + VkAccelerationStructureMatrixMotionInstanceNV matrixMotionInstance + VkAccelerationStructureSRTMotionInstanceNV srtMotionInstance + + + VkAccelerationStructureMotionInstanceTypeNV type + VkAccelerationStructureMotionInstanceFlagsNV flags + VkAccelerationStructureMotionInstanceDataNV data + + typedef void* VkRemoteAddressNV; + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkBufferCollectionFUCHSIA collection + uint32_t index + + + VkStructureType sType + const void* pNext + VkBufferCollectionFUCHSIA collection + uint32_t index + + + VkStructureType sType + const void* pNext + VkBufferCollectionFUCHSIA collection + uint32_t index + + + VkStructureType sType + const void* pNext + zx_handle_t collectionToken + + + VkStructureType sType + void* pNext + uint32_t memoryTypeBits + uint32_t bufferCount + uint32_t createInfoIndex + uint64_t sysmemPixelFormat + VkFormatFeatureFlags formatFeatures + VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + VkBufferCreateInfo createInfo + VkFormatFeatureFlags requiredFormatFeatures + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints + + + VkStructureType sType + const void* pNext + uint32_t colorSpace + + + VkStructureType sType + const void* pNext + VkImageCreateInfo imageCreateInfo + VkFormatFeatureFlags requiredFormatFeatures + VkImageFormatConstraintsFlagsFUCHSIA flags + uint64_t sysmemPixelFormat + uint32_t colorSpaceCount + const VkSysmemColorSpaceFUCHSIA* pColorSpaces + + + VkStructureType sType + const void* pNext + uint32_t formatConstraintsCount + const VkImageFormatConstraintsInfoFUCHSIA* pFormatConstraints + VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints + VkImageConstraintsInfoFlagsFUCHSIA flags + + + VkStructureType sType + const void* pNext + uint32_t minBufferCount + uint32_t maxBufferCount + uint32_t minBufferCountForCamping + uint32_t minBufferCountForDedicatedSlack + uint32_t minBufferCountForSharedSlack + + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) + VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) + + VkStructureType sType + const void* pNext + size_t dataSize + const void* pData + + + VkStructureType sType + const void* pNext + VkCudaModuleNV module + const char* pName + + + VkStructureType sType + const void* pNext + VkCudaFunctionNV function + uint32_t gridDimX + uint32_t gridDimY + uint32_t gridDimZ + uint32_t blockDimX + uint32_t blockDimY + uint32_t blockDimZ + uint32_t sharedMemBytes + size_t paramCount + const void* const * pParams + size_t extraCount + const void* const * pExtras + + + VkStructureType sType + void* pNext + VkBool32 formatRgba10x6WithoutYCbCrSampler + + + VkStructureType sType + void* pNext + VkFormatFeatureFlags2 linearTilingFeatures + VkFormatFeatureFlags2 optimalTilingFeatures + VkFormatFeatureFlags2 bufferFeatures + + + + VkStructureType sType + void* pNext + uint32_t drmFormatModifierCount + VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties + + + uint64_t drmFormatModifier + uint32_t drmFormatModifierPlaneCount + VkFormatFeatureFlags2 drmFormatModifierTilingFeatures + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + VkFormatFeatureFlags2 formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + const void* pNext + uint32_t viewMask + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + + + + VkStructureType sType + const void* pNext + VkRenderingFlags flags + VkRect2D renderArea + uint32_t layerCount + uint32_t viewMask + uint32_t colorAttachmentCount + const VkRenderingAttachmentInfo* pColorAttachments + const VkRenderingAttachmentInfo* pDepthAttachment + const VkRenderingAttachmentInfo* pStencilAttachment + + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkImageLayout imageLayout + VkResolveModeFlagBits resolveMode + VkImageView resolveImageView + VkImageLayout resolveImageLayout + VkAttachmentLoadOp loadOp + VkAttachmentStoreOp storeOp + VkClearValue clearValue + + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkImageLayout imageLayout + VkExtent2D shadingRateAttachmentTexelSize + + + VkStructureType sType + const void* pNext + VkImageView imageView + VkImageLayout imageLayout + + + VkStructureType sType + void* pNext + VkBool32 dynamicRendering + + + + VkStructureType sType + const void* pNext + VkRenderingFlags flags + uint32_t viewMask + uint32_t colorAttachmentCount + uint32_t colorAttachmentCount + const VkFormat* pColorAttachmentFormats + VkFormat depthAttachmentFormat + VkFormat stencilAttachmentFormat + VkSampleCountFlagBits rasterizationSamples + + + + VkStructureType sType + const void* pNext + uint32_t colorAttachmentCount + const VkSampleCountFlagBits* pColorAttachmentSamples + VkSampleCountFlagBits depthStencilAttachmentSamples + + + + VkStructureType sType + const void* pNext + VkBool32 perViewAttributes + VkBool32 perViewAttributesPositionXOnly + + + VkStructureType sType + void* pNext + VkBool32 minLod + + + VkStructureType sType + const void* pNext + float minLod + + + VkStructureType sType + void* pNext + VkBool32 rasterizationOrderColorAttachmentAccess + VkBool32 rasterizationOrderDepthAttachmentAccess + VkBool32 rasterizationOrderStencilAttachmentAccess + + + + VkStructureType sType + void* pNext + VkBool32 linearColorAttachment + + + VkStructureType sType + void* pNext + VkBool32 graphicsPipelineLibrary + + + VkStructureType sType + void* pNext + VkBool32 pipelineBinaries + + + VkStructureType sType + const void* pNext + VkBool32 disableInternalCache + + + VkStructureType sType + void* pNext + VkBool32 pipelineBinaryInternalCache + VkBool32 pipelineBinaryInternalCacheControl + VkBool32 pipelineBinaryPrefersInternalCache + VkBool32 pipelineBinaryPrecompiledInternalCache + VkBool32 pipelineBinaryCompressedData + + + VkStructureType sType + void* pNext + VkBool32 graphicsPipelineLibraryFastLinking + VkBool32 graphicsPipelineLibraryIndependentInterpolationDecoration + + + VkStructureType sType + const void* pNext + VkGraphicsPipelineLibraryFlagsEXT flags + + + VkStructureType sType + void* pNext + VkBool32 descriptorSetHostMapping + + + VkStructureType sType + const void* pNext + VkDescriptorSetLayout descriptorSetLayout + uint32_t binding + + + VkStructureType sType + void* pNext + size_t descriptorOffset + uint32_t descriptorSize + + + VkStructureType sType + void* pNext + VkBool32 nestedCommandBuffer + VkBool32 nestedCommandBufferRendering + VkBool32 nestedCommandBufferSimultaneousUse + + + VkStructureType sType + void* pNext + uint32_t maxCommandBufferNestingLevel + + + VkStructureType sType + void* pNext + VkBool32 shaderModuleIdentifier + + + VkStructureType sType + void* pNext + uint8_t shaderModuleIdentifierAlgorithmUUID[VK_UUID_SIZE] + + + VkStructureType sType + const void* pNext + uint32_t identifierSize + const uint8_t* pIdentifier + + + VkStructureType sType + void* pNext + uint32_t identifierSize + uint8_t identifier[VK_MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT] + + + VkStructureType sType + const void* pNext + VkImageCompressionFlagsEXT flags + uint32_t compressionControlPlaneCount + VkImageCompressionFixedRateFlagsEXT* pFixedRateFlags + + + VkStructureType sType + void* pNext + VkBool32 imageCompressionControl + + + VkStructureType sType + void* pNext + VkImageCompressionFlagsEXT imageCompressionFlags + VkImageCompressionFixedRateFlagsEXT imageCompressionFixedRateFlags + + + VkStructureType sType + void* pNext + VkBool32 imageCompressionControlSwapchain + + + VkStructureType sType + void* pNext + VkImageSubresource imageSubresource + + + + + VkStructureType sType + void* pNext + VkSubresourceLayout subresourceLayout + + + + + VkStructureType sType + const void* pNext + VkBool32 disallowMerging + + + uint32_t postMergeSubpassCount + + + VkStructureType sType + const void* pNext + VkRenderPassCreationFeedbackInfoEXT* pRenderPassFeedback + + + VkSubpassMergeStatusEXT subpassMergeStatus + char description[VK_MAX_DESCRIPTION_SIZE] + uint32_t postMergeIndex + + + VkStructureType sType + const void* pNext + VkRenderPassSubpassFeedbackInfoEXT* pSubpassFeedback + + + VkStructureType sType + void* pNext + VkBool32 subpassMergeFeedback + + + VkStructureType sType + const void* pNext + VkMicromapTypeEXT type + VkBuildMicromapFlagsEXT flags + VkBuildMicromapModeEXT mode + VkMicromapEXT dstMicromap + uint32_t usageCountsCount + const VkMicromapUsageEXT* pUsageCounts + const VkMicromapUsageEXT* const* ppUsageCounts + VkDeviceOrHostAddressConstKHR data + VkDeviceOrHostAddressKHR scratchData + VkDeviceOrHostAddressConstKHR triangleArray + VkDeviceSize triangleArrayStride + + + VkStructureType sType + const void* pNext + VkMicromapCreateFlagsEXT createFlags + VkBuffer buffer + VkDeviceSize offsetSpecified in bytes + VkDeviceSize size + VkMicromapTypeEXT type + VkDeviceAddress deviceAddress + + + VkStructureType sType + const void* pNext + const uint8_t* pVersionData + + + VkStructureType sType + const void* pNext + VkMicromapEXT src + VkMicromapEXT dst + VkCopyMicromapModeEXT mode + + + VkStructureType sType + const void* pNext + VkMicromapEXT src + VkDeviceOrHostAddressKHR dst + VkCopyMicromapModeEXT mode + + + VkStructureType sType + const void* pNext + VkDeviceOrHostAddressConstKHR src + VkMicromapEXT dst + VkCopyMicromapModeEXT mode + + + VkStructureType sType + const void* pNext + VkDeviceSize micromapSize + VkDeviceSize buildScratchSize + VkBool32 discardable + + + uint32_t count + uint32_t subdivisionLevel + uint32_t formatInterpretation depends on parent type + + + uint32_t dataOffsetSpecified in bytes + uint16_t subdivisionLevel + uint16_t format + + + VkStructureType sType + void* pNext + VkBool32 micromap + VkBool32 micromapCaptureReplay + VkBool32 micromapHostCommands + + + VkStructureType sType + void* pNext + uint32_t maxOpacity2StateSubdivisionLevel + uint32_t maxOpacity4StateSubdivisionLevel + + + VkStructureType sType + void* pNext + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexBuffer + VkDeviceSize indexStride + uint32_t baseTriangle + uint32_t usageCountsCount + const VkMicromapUsageEXT* pUsageCounts + const VkMicromapUsageEXT* const* ppUsageCounts + VkMicromapEXT micromap + + + VkStructureType sType + void* pNext + VkBool32 displacementMicromap + + + VkStructureType sType + void* pNext + uint32_t maxDisplacementMicromapSubdivisionLevel + + + VkStructureType sType + void* pNext + + VkFormat displacementBiasAndScaleFormat + VkFormat displacementVectorFormat + + VkDeviceOrHostAddressConstKHR displacementBiasAndScaleBuffer + VkDeviceSize displacementBiasAndScaleStride + VkDeviceOrHostAddressConstKHR displacementVectorBuffer + VkDeviceSize displacementVectorStride + VkDeviceOrHostAddressConstKHR displacedMicromapPrimitiveFlags + VkDeviceSize displacedMicromapPrimitiveFlagsStride + VkIndexType indexType + VkDeviceOrHostAddressConstKHR indexBuffer + VkDeviceSize indexStride + + uint32_t baseTriangle + + uint32_t usageCountsCount + const VkMicromapUsageEXT* pUsageCounts + const VkMicromapUsageEXT* const* ppUsageCounts + + VkMicromapEXT micromap + + + VkStructureType sType + void* pNext + uint8_t pipelineIdentifier[VK_UUID_SIZE] + + + VkStructureType sType + void* pNext + VkBool32 pipelinePropertiesIdentifier + + + VkStructureType sType + void* pNext + VkBool32 shaderEarlyAndLateFragmentTests + + + VkStructureType sType + const void* pNext + VkBool32 acquireUnmodifiedMemory + + + VkStructureType sType + const void* pNext + VkExportMetalObjectTypeFlagBitsEXT exportObjectType + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + MTLDevice_id mtlDevice + + + VkStructureType sType + const void* pNext + VkQueue queue + MTLCommandQueue_id mtlCommandQueue + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + MTLBuffer_id mtlBuffer + + + VkStructureType sType + const void* pNext + MTLBuffer_id mtlBuffer + + + VkStructureType sType + const void* pNext + VkImage image + VkImageView imageView + VkBufferView bufferView + VkImageAspectFlagBits plane + MTLTexture_id mtlTexture + + + VkStructureType sType + const void* pNext + VkImageAspectFlagBits plane + MTLTexture_id mtlTexture + + + VkStructureType sType + const void* pNext + VkImage image + IOSurfaceRef ioSurface + + + VkStructureType sType + const void* pNext + IOSurfaceRef ioSurface + + + VkStructureType sType + const void* pNext + VkSemaphore semaphore + VkEvent event + MTLSharedEvent_id mtlSharedEvent + + + VkStructureType sType + const void* pNext + MTLSharedEvent_id mtlSharedEvent + + + VkStructureType sType + void* pNext + VkBool32 nonSeamlessCubeMap + + + VkStructureType sType + void* pNext + VkBool32 pipelineRobustness + + + + VkStructureType sType + const void* pNext + VkPipelineRobustnessBufferBehavior storageBuffers + VkPipelineRobustnessBufferBehavior uniformBuffers + VkPipelineRobustnessBufferBehavior vertexInputs + VkPipelineRobustnessImageBehavior images + + + + VkStructureType sType + void* pNext + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs + VkPipelineRobustnessImageBehavior defaultRobustnessImages + + + + VkStructureType sType + const void* pNext + VkOffset2D filterCenter + VkExtent2D filterSize + uint32_t numPhases + + + VkStructureType sType + void* pNext + VkBool32 textureSampleWeighted + VkBool32 textureBoxFilter + VkBool32 textureBlockMatch + + + VkStructureType sType + void* pNext + uint32_t maxWeightFilterPhases + VkExtent2D maxWeightFilterDimension + VkExtent2D maxBlockMatchRegion + VkExtent2D maxBoxFilterBlockSize + + + VkStructureType sType + void* pNext + VkBool32 tileProperties + + + VkStructureType sType + void* pNext + VkExtent3D tileSize + VkExtent2D apronSize + VkOffset2D origin + + + VkStructureType sType + const void* pNext + VkDeviceMemory memory + + + VkStructureType sType + void* pNext + VkBool32 amigoProfiling + + + VkStructureType sType + const void* pNext + uint64_t firstDrawTimestamp + uint64_t swapBufferTimestamp + + + VkStructureType sType + void* pNext + VkBool32 attachmentFeedbackLoopLayout + + + + VkStructureType sType + const void* pNext + VkBool32 feedbackLoopEnable + + + VkStructureType sType + void* pNext + VkBool32 reportAddressBinding + + + VkStructureType sType + void* pNext + VkDeviceAddressBindingFlagsEXT flags + VkDeviceAddress baseAddress + VkDeviceSize size + VkDeviceAddressBindingTypeEXT bindingType + + + VkStructureType sType + void* pNext + VkBool32 opticalFlow + + + VkStructureType sType + void* pNext + VkOpticalFlowGridSizeFlagsNV supportedOutputGridSizes + VkOpticalFlowGridSizeFlagsNV supportedHintGridSizes + VkBool32 hintSupported + VkBool32 costSupported + VkBool32 bidirectionalFlowSupported + VkBool32 globalFlowSupported + uint32_t minWidth + uint32_t minHeight + uint32_t maxWidth + uint32_t maxHeight + uint32_t maxNumRegionsOfInterest + + + VkStructureType sType + const void* pNext + VkOpticalFlowUsageFlagsNV usage + + + VkStructureType sType + const void* pNext + VkFormat format + + + VkStructureType sType + void* pNext + uint32_t width + uint32_t height + VkFormat imageFormat + VkFormat flowVectorFormat + VkFormat costFormat + VkOpticalFlowGridSizeFlagsNV outputGridSize + VkOpticalFlowGridSizeFlagsNV hintGridSize + VkOpticalFlowPerformanceLevelNV performanceLevel + VkOpticalFlowSessionCreateFlagsNV flags + + NV internal use only + VkStructureType sType + void* pNext + uint32_t id + uint32_t size + const void* pPrivateData + + + VkStructureType sType + void* pNext + VkOpticalFlowExecuteFlagsNV flags + uint32_t regionCount + const VkRect2D* pRegions + + + VkStructureType sType + void* pNext + VkBool32 deviceFault + VkBool32 deviceFaultVendorBinary + + + VkDeviceFaultAddressTypeEXT addressType + VkDeviceAddress reportedAddress + VkDeviceSize addressPrecision + + + char description[VK_MAX_DESCRIPTION_SIZE]Free-form description of the fault + uint64_t vendorFaultCode + uint64_t vendorFaultData + + + VkStructureType sType + void* pNext + uint32_t addressInfoCount + uint32_t vendorInfoCount + VkDeviceSize vendorBinarySizeSpecified in bytes + + + VkStructureType sType + void* pNext + char description[VK_MAX_DESCRIPTION_SIZE]Free-form description of the fault + VkDeviceFaultAddressInfoEXT* pAddressInfos + VkDeviceFaultVendorInfoEXT* pVendorInfos + void* pVendorBinaryData + + + The fields in this structure are non-normative since structure packing is implementation-defined in C. The specification defines the normative layout. + uint32_t headerSize + VkDeviceFaultVendorBinaryHeaderVersionEXT headerVersion + uint32_t vendorID + uint32_t deviceID + uint32_t driverVersion + uint8_t pipelineCacheUUID[VK_UUID_SIZE] + uint32_t applicationNameOffset + uint32_t applicationVersion + uint32_t engineNameOffset + uint32_t engineVersion + uint32_t apiVersion + + + VkStructureType sType + void* pNext + VkBool32 pipelineLibraryGroupHandles + + + VkStructureType sType + const void* pNext + float depthBiasConstantFactor + float depthBiasClamp + float depthBiasSlopeFactor + + + VkStructureType sType + const void* pNext + VkDepthBiasRepresentationEXT depthBiasRepresentation + VkBool32 depthBiasExact + + + VkDeviceAddress srcAddress + VkDeviceAddress dstAddress + VkDeviceSize compressedSizeSpecified in bytes + VkDeviceSize decompressedSizeSpecified in bytes + VkMemoryDecompressionMethodFlagsNV decompressionMethod + + + VkStructureType sType + void* pNext + uint64_t shaderCoreMask + uint32_t shaderCoreCount + uint32_t shaderWarpsPerCore + + + VkStructureType sType + void* pNext + VkBool32 shaderCoreBuiltins + + + VkStructureType sType + const void* pNext + VkFrameBoundaryFlagsEXT flags + uint64_t frameID + uint32_t imageCount + const VkImage* pImages + uint32_t bufferCount + const VkBuffer* pBuffers + uint64_t tagName + size_t tagSize + const void* pTag + + + VkStructureType sType + void* pNext + VkBool32 frameBoundary + + + VkStructureType sType + void* pNext + VkBool32 dynamicRenderingUnusedAttachments + + + VkStructureType sType + void* pNext + VkPresentModeKHR presentMode + + + + VkStructureType sType + void* pNext + VkPresentScalingFlagsKHR supportedPresentScaling + VkPresentGravityFlagsKHR supportedPresentGravityX + VkPresentGravityFlagsKHR supportedPresentGravityY + VkExtent2D minScaledImageExtentSupported minimum image width and height for the surface when scaling is used + VkExtent2D maxScaledImageExtentSupported maximum image width and height for the surface when scaling is used + + + + VkStructureType sType + void* pNext + uint32_t presentModeCount + VkPresentModeKHR* pPresentModesOutput list of present modes compatible with the one specified in VkSurfacePresentModeKHR + + + + VkStructureType sType + void* pNext + VkBool32 swapchainMaintenance1 + + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkFence* pFencesFence to signal for each swapchain + + + + VkStructureType sType + const void* pNext + uint32_t presentModeCountLength of the pPresentModes array + const VkPresentModeKHR* pPresentModesPresentation modes which will be usable with this swapchain + + + + VkStructureType sType + const void* pNext + uint32_t swapchainCountCopy of VkPresentInfoKHR::swapchainCount + const VkPresentModeKHR* pPresentModesPresentation mode for each swapchain + + + + VkStructureType sType + const void* pNext + VkPresentScalingFlagsKHR scalingBehavior + VkPresentGravityFlagsKHR presentGravityX + VkPresentGravityFlagsKHR presentGravityY + + + + VkStructureType sType + const void* pNext + VkSwapchainKHR swapchainSwapchain for which images are being released + uint32_t imageIndexCountNumber of indices to release + const uint32_t* pImageIndicesIndices of which presentable images to release + + + + VkStructureType sType + void* pNext + VkBool32 depthBiasControl + VkBool32 leastRepresentableValueForceUnormRepresentation + VkBool32 floatRepresentation + VkBool32 depthBiasExact + + + VkStructureType sType + void* pNext + VkBool32 rayTracingInvocationReorder + + + VkStructureType sType + void* pNext + VkRayTracingInvocationReorderModeNV rayTracingInvocationReorderReorderingHint + + + VkStructureType sType + void* pNext + VkBool32 extendedSparseAddressSpace + + + VkStructureType sType + void* pNext + VkDeviceSize extendedSparseAddressSpaceSizeTotal address space available for extended sparse allocations (bytes) + VkImageUsageFlags extendedSparseImageUsageFlagsBitfield of which image usages are supported for extended sparse allocations + VkBufferUsageFlags extendedSparseBufferUsageFlagsBitfield of which buffer usages are supported for extended sparse allocations + + + VkStructureType sType + void* pNext + VkDirectDriverLoadingFlagsLUNARG flags + PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr + + + VkStructureType sType + const void* pNext + VkDirectDriverLoadingModeLUNARG mode + uint32_t driverCount + const VkDirectDriverLoadingInfoLUNARG* pDrivers + + + VkStructureType sType + void* pNext + VkBool32 multiviewPerViewViewports + + + VkStructureType sType + void* pNext + VkBool32 rayTracingPositionFetch + + + VkStructureType sType + const void* pNext + const VkImageCreateInfo* pCreateInfo + const VkImageSubresource2* pSubresource + + + + VkStructureType sType + void* pNext + uint32_t pixelRate + uint32_t texelRate + uint32_t fmaRate + + + VkStructureType sType + void* pNext + VkBool32 multiviewPerViewRenderAreas + + + VkStructureType sType + const void* pNext + uint32_t perViewRenderAreaCount + const VkRect2D* pPerViewRenderAreas + + + VkStructureType sType + const void* pNext + void* pQueriedLowLatencyData + + + VkStructureType sType + const void* pNext + VkMemoryMapFlags flags + VkDeviceMemory memory + VkDeviceSize offset + VkDeviceSize size + + + + VkStructureType sType + const void* pNext + VkMemoryUnmapFlags flags + VkDeviceMemory memory + + + + VkStructureType sType + void* pNext + VkBool32 shaderObject + + + VkStructureType sType + void* pNext + uint8_t shaderBinaryUUID[VK_UUID_SIZE] + uint32_t shaderBinaryVersion + + + VkStructureType sType + const void* pNext + VkShaderCreateFlagsEXT flags + VkShaderStageFlagBits stage + VkShaderStageFlags nextStage + VkShaderCodeTypeEXT codeType + size_t codeSize + const void* pCode + const char* pName + uint32_t setLayoutCount + const VkDescriptorSetLayout* pSetLayouts + uint32_t pushConstantRangeCount + const VkPushConstantRange* pPushConstantRanges + const VkSpecializationInfo* pSpecializationInfo + + + VkStructureType sType + void* pNext + VkBool32 shaderTileImageColorReadAccess + VkBool32 shaderTileImageDepthReadAccess + VkBool32 shaderTileImageStencilReadAccess + + + VkStructureType sType + void* pNext + VkBool32 shaderTileImageCoherentReadAccelerated + VkBool32 shaderTileImageReadSampleFromPixelRateInvocation + VkBool32 shaderTileImageReadFromHelperInvocation + + + VkStructureType sType + const void* pNext + struct _screen_buffer* buffer + + + VkStructureType sType + void* pNext + VkDeviceSize allocationSize + uint32_t memoryTypeBits + + + VkStructureType sType + void* pNext + VkFormat format + uint64_t externalFormat + uint64_t screenUsage + VkFormatFeatureFlags formatFeatures + VkComponentMapping samplerYcbcrConversionComponents + VkSamplerYcbcrModelConversion suggestedYcbcrModel + VkSamplerYcbcrRange suggestedYcbcrRange + VkChromaLocation suggestedXChromaOffset + VkChromaLocation suggestedYChromaOffset + + + VkStructureType sType + void* pNext + uint64_t externalFormat + + + VkStructureType sType + void* pNext + VkBool32 screenBufferImport + + + VkStructureType sType + void* pNext + VkBool32 cooperativeMatrix + VkBool32 cooperativeMatrixRobustBufferAccess + + + VkStructureType sType + void* pNext + uint32_t MSize + uint32_t NSize + uint32_t KSize + VkComponentTypeKHR AType + VkComponentTypeKHR BType + VkComponentTypeKHR CType + VkComponentTypeKHR ResultType + VkBool32 saturatingAccumulation + VkScopeKHR scope + + + VkStructureType sType + void* pNext + VkShaderStageFlags cooperativeMatrixSupportedStages + + + VkStructureType sType + void* pNext + uint32_t maxExecutionGraphDepth + uint32_t maxExecutionGraphShaderOutputNodes + uint32_t maxExecutionGraphShaderPayloadSize + uint32_t maxExecutionGraphShaderPayloadCount + uint32_t executionGraphDispatchAddressAlignment + uint32_t maxExecutionGraphWorkgroupCount[3] + uint32_t maxExecutionGraphWorkgroups + + + VkStructureType sType + void* pNext + VkBool32 shaderEnqueue + VkBool32 shaderMeshEnqueue + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags flags + uint32_t stageCount + const VkPipelineShaderStageCreateInfo* pStages + const VkPipelineLibraryCreateInfoKHR* pLibraryInfo + VkPipelineLayout layout + VkPipeline basePipelineHandle + int32_t basePipelineIndex + + + VkStructureType sType + const void* pNext + const char* pName + uint32_t index + + + VkStructureType sType + void* pNext + VkDeviceSize minSize + VkDeviceSize maxSize + VkDeviceSize sizeGranularity + + + uint32_t nodeIndex + uint32_t payloadCount + VkDeviceOrHostAddressConstAMDX payloads + uint64_t payloadStride + + + uint32_t count + VkDeviceOrHostAddressConstAMDX infos + uint64_t stride + + + VkStructureType sType + void* pNext + VkBool32 antiLag + + + VkStructureType sType + const void* pNext + VkAntiLagModeAMD mode + uint32_t maxFPS + const VkAntiLagPresentationInfoAMD* pPresentationInfo + + + VkStructureType sType + void* pNext + VkAntiLagStageAMD stage + uint64_t frameIndex + + + VkStructureType sType + const void* pNext + VkResult* pResult + + + VkStructureType sType + void* pNext + VkBool32 tileMemoryHeap + + + VkStructureType sType + void* pNext + VkBool32 queueSubmitBoundary + VkBool32 tileBufferTransfers + + + VkStructureType sType + const void* pNext + VkDeviceSize size + + + VkStructureType sType + void* pNext + VkDeviceSize size + VkDeviceSize alignment + + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t firstSet + uint32_t descriptorSetCount + const VkDescriptorSet* pDescriptorSets + uint32_t dynamicOffsetCount + const uint32_t* pDynamicOffsets + + + + VkStructureType sType + const void* pNext + VkPipelineLayout layout + VkShaderStageFlags stageFlags + uint32_t offset + uint32_t size + const void* pValues + + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t set + uint32_t descriptorWriteCount + const VkWriteDescriptorSet* pDescriptorWrites + + + + VkStructureType sType + const void* pNext + VkDescriptorUpdateTemplate descriptorUpdateTemplate + VkPipelineLayout layout + uint32_t set + const void* pData + + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t firstSet + uint32_t setCount + const uint32_t* pBufferIndices + const VkDeviceSize* pOffsets + + + VkStructureType sType + const void* pNext + VkShaderStageFlags stageFlags + VkPipelineLayout layout + uint32_t set + + + VkStructureType sType + void* pNext + VkBool32 cubicRangeClamp + + + VkStructureType sType + void* pNext + VkBool32 ycbcrDegamma + + + VkStructureType sType + void* pNext + VkBool32 enableYDegamma + VkBool32 enableCbCrDegamma + + + VkStructureType sType + void* pNext + VkBool32 selectableCubicWeights + + + VkStructureType sType + const void* pNext + VkCubicFilterWeightsQCOM cubicWeights + + + VkStructureType sType + const void* pNext + VkCubicFilterWeightsQCOM cubicWeights + + + VkStructureType sType + void* pNext + VkBool32 textureBlockMatch2 + + + VkStructureType sType + void* pNext + VkExtent2D maxBlockMatchWindow + + + VkStructureType sType + const void* pNext + VkExtent2D windowExtent + VkBlockMatchWindowCompareModeQCOM windowCompareMode + + + VkStructureType sType + void* pNext + VkBool32 descriptorPoolOverallocation + + + VkStructureType sType + void* pNext + VkLayeredDriverUnderlyingApiMSFT underlyingAPI + + + VkStructureType sType + void* pNext + VkBool32 perStageDescriptorSet + VkBool32 dynamicPipelineLayout + + + VkStructureType sType + void* pNext + VkBool32 externalFormatResolve + + + VkStructureType sType + void* pNext + VkBool32 nullColorAttachmentWithExternalFormatResolve + VkChromaLocation externalFormatResolveChromaOffsetX + VkChromaLocation externalFormatResolveChromaOffsetY + + + VkStructureType sType + void* pNext + VkFormat colorAttachmentFormat + + + VkStructureType sType + const void* pNext + VkBool32 lowLatencyMode + VkBool32 lowLatencyBoost + uint32_t minimumIntervalUs + + + VkStructureType sType + const void* pNext + VkSemaphore signalSemaphore + uint64_t value + + + VkStructureType sType + const void* pNext + uint64_t presentID + VkLatencyMarkerNV marker + + + VkStructureType sType + const void* pNext + uint32_t timingCount + VkLatencyTimingsFrameReportNV* pTimings + + + VkStructureType sType + const void* pNext + uint64_t presentID + uint64_t inputSampleTimeUs + uint64_t simStartTimeUs + uint64_t simEndTimeUs + uint64_t renderSubmitStartTimeUs + uint64_t renderSubmitEndTimeUs + uint64_t presentStartTimeUs + uint64_t presentEndTimeUs + uint64_t driverStartTimeUs + uint64_t driverEndTimeUs + uint64_t osRenderQueueStartTimeUs + uint64_t osRenderQueueEndTimeUs + uint64_t gpuRenderStartTimeUs + uint64_t gpuRenderEndTimeUs + + + VkStructureType sType + const void* pNext + VkOutOfBandQueueTypeNV queueType + + + VkStructureType sType + const void* pNext + uint64_t presentID + + + VkStructureType sType + const void* pNext + VkBool32 latencyModeEnable + + + VkStructureType sType + const void* pNext + uint32_t presentModeCount + VkPresentModeKHR* pPresentModes + + + VkStructureType sType + void* pNext + VkBool32 cudaKernelLaunchFeatures + + + VkStructureType sType + void* pNext + uint32_t computeCapabilityMinor + uint32_t computeCapabilityMajor + + + VkStructureType sType + void* pNext + uint32_t shaderCoreCount + + + VkStructureType sType + void* pNext + VkBool32 schedulingControls + + + VkStructureType sType + void* pNext + VkPhysicalDeviceSchedulingControlsFlagsARM schedulingControlsFlags + + + VkStructureType sType + void* pNext + VkBool32 relaxedLineRasterization + + + VkStructureType sType + void* pNext + VkBool32 renderPassStriped + + + VkStructureType sType + void* pNext + VkExtent2D renderPassStripeGranularity + uint32_t maxRenderPassStripes + + + VkStructureType sType + const void* pNext + VkRect2D stripeArea + + + VkStructureType sType + const void* pNext + uint32_t stripeInfoCount + const VkRenderPassStripeInfoARM* pStripeInfos + + + VkStructureType sType + const void* pNext + uint32_t stripeSemaphoreInfoCount + const VkSemaphoreSubmitInfo* pStripeSemaphoreInfos + + + VkStructureType sType + void* pNext + VkBool32 pipelineOpacityMicromap + + + VkStructureType sType + void* pNext + VkBool32 shaderMaximalReconvergence + + + VkStructureType sType + void* pNext + VkBool32 shaderSubgroupRotate + VkBool32 shaderSubgroupRotateClustered + + + + VkStructureType sType + void* pNext + VkBool32 shaderExpectAssume + + + + VkStructureType sType + void* pNext + VkBool32 shaderFloatControls2 + + + + VkStructureType sType + void* pNext + VkBool32 dynamicRenderingLocalRead + + + + VkStructureType sType + const void* pNext + uint32_t colorAttachmentCount + const uint32_t* pColorAttachmentLocations + + + + VkStructureType sType + const void* pNext + uint32_t colorAttachmentCount + const uint32_t* pColorAttachmentInputIndices + const uint32_t* pDepthInputAttachmentIndex + const uint32_t* pStencilInputAttachmentIndex + + + + VkStructureType sType + void* pNext + VkBool32 shaderQuadControl + + + VkStructureType sType + void* pNext + VkBool32 shaderFloat16VectorAtomics + + + VkStructureType sType + void* pNext + VkBool32 memoryMapPlaced + VkBool32 memoryMapRangePlaced + VkBool32 memoryUnmapReserve + + + VkStructureType sType + void* pNext + VkDeviceSize minPlacedMemoryMapAlignment + + + VkStructureType sType + const void* pNext + void* pPlacedAddress + + + VkStructureType sType + void* pNext + VkBool32 shaderBFloat16Type + VkBool32 shaderBFloat16DotProduct + VkBool32 shaderBFloat16CooperativeMatrix + + + VkStructureType sType + void* pNext + VkBool32 shaderRawAccessChains + + + VkStructureType sType + void* pNext + VkBool32 commandBufferInheritance + + + VkStructureType sType + void* pNext + VkBool32 imageAlignmentControl + + + VkStructureType sType + void* pNext + uint32_t supportedImageAlignmentMask + + + VkStructureType sType + const void* pNext + uint32_t maximumRequestedAlignment + + + VkStructureType sType + void* pNext + VkBool32 shaderReplicatedComposites + + + + VkStructureType sType + void* pNext + VkBool32 presentModeFifoLatestReady + + + float minDepthClamp + float maxDepthClamp + + + VkStructureType sType + void* pNext + VkBool32 cooperativeMatrixWorkgroupScope + VkBool32 cooperativeMatrixFlexibleDimensions + VkBool32 cooperativeMatrixReductions + VkBool32 cooperativeMatrixConversions + VkBool32 cooperativeMatrixPerElementOperations + VkBool32 cooperativeMatrixTensorAddressing + VkBool32 cooperativeMatrixBlockLoads + + + VkStructureType sType + void* pNext + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory + + + VkStructureType sType + void* pNext + uint32_t MGranularity + uint32_t NGranularity + uint32_t KGranularity + VkComponentTypeKHR AType + VkComponentTypeKHR BType + VkComponentTypeKHR CType + VkComponentTypeKHR ResultType + VkBool32 saturatingAccumulation + VkScopeKHR scope + uint32_t workgroupInvocations + + + VkStructureType sType + void* pNext + VkBool32 hdrVivid + + + VkStructureType sType + void* pNext + VkBool32 vertexAttributeRobustness + + + VkStructureType sType + void* pNext + VkBool32 depthClampZeroOne + + + VkStructureType sType + void* pNext + VkBool32 cooperativeVector + VkBool32 cooperativeVectorTraining + + + VkStructureType sType + void* pNext + VkComponentTypeKHR inputType + VkComponentTypeKHR inputInterpretation + VkComponentTypeKHR matrixInterpretation + VkComponentTypeKHR biasInterpretation + VkComponentTypeKHR resultType + VkBool32 transpose + + + VkStructureType sType + void* pNext + VkShaderStageFlags cooperativeVectorSupportedStages + VkBool32 cooperativeVectorTrainingFloat16Accumulation + VkBool32 cooperativeVectorTrainingFloat32Accumulation + uint32_t maxCooperativeVectorComponents + + + VkStructureType sType + const void* pNext + size_t srcSize + VkDeviceOrHostAddressConstKHR srcData + size_t* pDstSize + VkDeviceOrHostAddressKHR dstData + VkComponentTypeKHR srcComponentType + VkComponentTypeKHR dstComponentType + uint32_t numRows + uint32_t numColumns + VkCooperativeVectorMatrixLayoutNV srcLayout + size_t srcStride + VkCooperativeVectorMatrixLayoutNV dstLayout + size_t dstStride + + + VkStructureType sType + void* pNext + VkBool32 tileShading + VkBool32 tileShadingFragmentStage + VkBool32 tileShadingColorAttachments + VkBool32 tileShadingDepthAttachments + VkBool32 tileShadingStencilAttachments + VkBool32 tileShadingInputAttachments + VkBool32 tileShadingSampledAttachments + VkBool32 tileShadingPerTileDraw + VkBool32 tileShadingPerTileDispatch + VkBool32 tileShadingDispatchTile + VkBool32 tileShadingApron + VkBool32 tileShadingAnisotropicApron + VkBool32 tileShadingAtomicOps + VkBool32 tileShadingImageProcessing + + + VkStructureType sType + void* pNext + uint32_t maxApronSize + VkBool32 preferNonCoherent + VkExtent2D tileGranularity + VkExtent2D maxTileShadingRate + + + VkStructureType sType + const void* pNext + VkTileShadingRenderPassFlagsQCOM flags + VkExtent2D tileApronSize + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + const void* pNext + + + VkStructureType sType + void* pNext + uint32_t maxFragmentDensityMapLayers + + + VkStructureType sType + void* pNext + VkBool32 fragmentDensityMapLayered + + + VkStructureType sType + const void* pNext + uint32_t maxFragmentDensityMapLayers + + + VkStructureType sType + const void* pNext + uint32_t numFramesPerBatch + uint32_t presentConfigFeedback + + + VkStructureType sType + void* pNext + VkBool32 presentMetering + + + VkStructureType sType + const void* pNext + uint32_t reservedExternalQueues + + + VkStructureType sType + const void* pNext + VkQueue preferredQueue + + + VkStructureType sType + const void* pNext + uint32_t deviceIndex + + + VkStructureType sType + void* pNext + uint32_t externalDataSize + uint32_t maxExternalQueues + + VK_DEFINE_HANDLE(VkExternalComputeQueueNV) + + VkStructureType sType + void* pNext + VkBool32 formatPack + + + VkStructureType sType + const void* pNext + VkTensorTilingARM tiling + VkFormat format + uint32_t dimensionCount + const int64_t* pDimensions + const int64_t* pStrides + VkTensorUsageFlagsARM usage + + + VkStructureType sType + const void* pNext + VkTensorCreateFlagsARM flags + const VkTensorDescriptionARM* pDescription + VkSharingMode sharingMode + uint32_t queueFamilyIndexCount + const uint32_t* pQueueFamilyIndices + + + VkStructureType sType + const void* pNext + VkTensorViewCreateFlagsARM flags + VkTensorARM tensor + VkFormat format + + + VkStructureType sType + const void* pNext + VkTensorARM tensor + + + VkStructureType sType + const void* pNext + VkTensorARM tensor + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + VkStructureType sType + const void* pNext + uint32_t tensorViewCount + const VkTensorViewARM* pTensorViews + + + VkStructureType sType + const void* pNext + VkFormatFeatureFlags2 optimalTilingTensorFeatures + VkFormatFeatureFlags2 linearTilingTensorFeatures + + + VkStructureType sType + void* pNext + uint32_t maxTensorDimensionCount + uint64_t maxTensorElements + uint64_t maxPerDimensionTensorElements + int64_t maxTensorStride + uint64_t maxTensorSize + uint32_t maxTensorShaderAccessArrayLength + uint32_t maxTensorShaderAccessSize + uint32_t maxDescriptorSetStorageTensors + uint32_t maxPerStageDescriptorSetStorageTensors + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors + VkBool32 shaderStorageTensorArrayNonUniformIndexingNative + VkShaderStageFlags shaderTensorSupportedStages + + + VkStructureType sType + const void* pNext + VkPipelineStageFlags2 srcStageMask + VkAccessFlags2 srcAccessMask + VkPipelineStageFlags2 dstStageMask + VkAccessFlags2 dstAccessMask + uint32_t srcQueueFamilyIndex + uint32_t dstQueueFamilyIndex + VkTensorARM tensor + + + VkStructureType sType + const void* pNext + uint32_t tensorMemoryBarrierCount + const VkTensorMemoryBarrierARM* pTensorMemoryBarriers + + + VkStructureType sType + void* pNext + VkBool32 tensorNonPacked + VkBool32 shaderTensorAccess + VkBool32 shaderStorageTensorArrayDynamicIndexing + VkBool32 shaderStorageTensorArrayNonUniformIndexing + VkBool32 descriptorBindingStorageTensorUpdateAfterBind + VkBool32 tensors + + + VkStructureType sType + const void* pNext + const VkTensorCreateInfoARM* pCreateInfo + + + VkStructureType sType + const void* pNext + VkTensorARM srcTensor + VkTensorARM dstTensor + uint32_t regionCount + const VkTensorCopyARM* pRegions + + + VkStructureType sType + const void* pNext + uint32_t dimensionCount + const uint64_t* pSrcOffset + const uint64_t* pDstOffset + const uint64_t* pExtent + + + VkStructureType sType + const void* pNext + VkTensorARM tensorTensor that this allocation will be bound to + + + VkStructureType sType + void* pNext + size_t tensorCaptureReplayDescriptorDataSize + size_t tensorViewCaptureReplayDescriptorDataSize + size_t tensorDescriptorSize + + + VkStructureType sType + void* pNext + VkBool32 descriptorBufferTensorDescriptors + + + VkStructureType sType + const void* pNext + VkTensorARM tensor + + + VkStructureType sType + const void* pNext + VkTensorViewARM tensorView + + + VkStructureType sType + const void* pNext + VkTensorViewARM tensorView + + + VkStructureType sType + const void* pNext + uint32_t tensorCount + const VkTensorARM* pTensors + + + VkStructureType sType + const void* pNext + VkTensorCreateFlagsARM flags + const VkTensorDescriptionARM* pDescription + VkExternalMemoryHandleTypeFlagBits handleType + + + VkStructureType sType + const void* pNext + VkExternalMemoryProperties externalMemoryProperties + + + VkStructureType sType + const void* pNext + VkExternalMemoryHandleTypeFlags handleTypes + + + VkStructureType sType + void* pNext + VkBool32 shaderFloat8 + VkBool32 shaderFloat8CooperativeMatrix + + + VkStructureType sType + const void* pNext + VkSurfaceCreateFlagsOHOS flags + OHNativeWindow* window + + + + VkStructureType sType + void* pNext + VkBool32 dataGraph + VkBool32 dataGraphUpdateAfterBind + VkBool32 dataGraphSpecializationConstants + VkBool32 dataGraphDescriptorBuffer + VkBool32 dataGraphShaderModule + + + VkStructureType sType + const void* pNext + uint32_t dimension + uint32_t zeroCount + uint32_t groupSize + + + VkStructureType sType + const void* pNext + uint32_t id + const void* pConstantData + + + VkStructureType sType + const void* pNext + uint32_t descriptorSet + uint32_t binding + uint32_t arrayElement + + + VkStructureType sType + const void* pNext + const char* pVendorOptions + + + VkStructureType sType + const void* pNext + VkPipelineCreateFlags2KHR flags + VkPipelineLayout layout + uint32_t resourceInfoCount + const VkDataGraphPipelineResourceInfoARM* pResourceInfos + + + VkStructureType sType + const void* pNext + VkShaderModule module + const char* pName + const VkSpecializationInfo* pSpecializationInfo + uint32_t constantCount + const VkDataGraphPipelineConstantARM* pConstants + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionCreateFlagsARM flags + VkPipeline dataGraphPipeline + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionARM session + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionBindPointARM bindPoint + VkDataGraphPipelineSessionBindPointTypeARM bindPointType + uint32_t numObjects + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionARM session + VkDataGraphPipelineSessionBindPointARM bindPoint + uint32_t objectIndex + + + VkStructureType sType + const void* pNext + VkDataGraphPipelineSessionARM session + VkDataGraphPipelineSessionBindPointARM bindPoint + uint32_t objectIndex + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + VkStructureType sType + const void* pNext + VkPipeline dataGraphPipeline + + + VkStructureType sType + const void* pNext + VkDataGraphPipelinePropertyARM property + VkBool32 isText + size_t dataSize + void* pData + + + VkStructureType sType + const void* pNext + uint32_t identifierSize + const uint8_t* pIdentifier + + + VkStructureType sType + void* pNext + VkDataGraphPipelineDispatchFlagsARM flags + + + VkPhysicalDeviceDataGraphProcessingEngineTypeARM type + VkBool32 isForeign + + + VkPhysicalDeviceDataGraphOperationTypeARM operationType + char name[VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM] + uint32_t version + + + VkStructureType sType + const void* pNext + VkPhysicalDeviceDataGraphProcessingEngineARM engine + VkPhysicalDeviceDataGraphOperationSupportARM operation + + + VkStructureType sType + const void* pNext + uint32_t queueFamilyIndex + VkPhysicalDeviceDataGraphProcessingEngineTypeARM engineType + + + VkStructureType sType + const void* pNext + VkExternalSemaphoreHandleTypeFlags foreignSemaphoreHandleTypes + VkExternalMemoryHandleTypeFlags foreignMemoryHandleTypes + + + VkStructureType sType + const void* pNext + uint32_t processingEngineCount + VkPhysicalDeviceDataGraphProcessingEngineARM* pProcessingEngines + + + VkStructureType sType + void* pNext + VkBool32 pipelineCacheIncrementalMode + + + + + Vulkan enumerant (token) definitions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unlike OpenGL, most tokens in Vulkan are actual typed enumerants in + their own numeric namespaces. The "name" attribute is the C enum + type name, and is pulled in from a type tag definition above + (slightly clunky, but retains the type / enum distinction). "type" + attributes of "enum" or "bitmask" indicate that these values should + be generated inside an appropriate definition. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + value="4" reserved for VK_KHR_sampler_mirror_clamp_to_edge + enum VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; do not + alias! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Return codes (positive values) + + + + + + + Error codes (negative values) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Flags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSI Extensions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NVX_device_generated_commands formerly used these enum values, but that extension has been removed + value 31 / name VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT + value 32 / name VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vendor IDs are now represented as enums instead of the old + <vendorids> tag, allowing them to be included in the + API headers. + + + + + + + + + + + + Driver IDs are now represented as enums instead of the old + <driverids> tag, allowing them to be included in the + API headers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bitpos 17-31 are specified by extensions to the original VkAccessFlagBits enum + + + + + + + + + + + + + + + + + + + + + + + + + bitpos 17-31 are specified by extensions to the original VkPipelineStageFlagBits enum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bitpos 13 is an extension interaction with VK_EXT_filter_cubic" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VkResult vkCreateInstance + const VkInstanceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkInstance* pInstance + + + void vkDestroyInstance + VkInstance instance + const VkAllocationCallbacks* pAllocator + + all sname:VkPhysicalDevice objects enumerated from pname:instance + + + + VkResult vkEnumeratePhysicalDevices + VkInstance instance + uint32_t* pPhysicalDeviceCount + VkPhysicalDevice* pPhysicalDevices + + + PFN_vkVoidFunction vkGetDeviceProcAddr + VkDevice device + const char* pName + + + PFN_vkVoidFunction vkGetInstanceProcAddr + VkInstance instance + const char* pName + + + void vkGetPhysicalDeviceProperties + VkPhysicalDevice physicalDevice + VkPhysicalDeviceProperties* pProperties + + + void vkGetPhysicalDeviceQueueFamilyProperties + VkPhysicalDevice physicalDevice + uint32_t* pQueueFamilyPropertyCount + VkQueueFamilyProperties* pQueueFamilyProperties + + + void vkGetPhysicalDeviceMemoryProperties + VkPhysicalDevice physicalDevice + VkPhysicalDeviceMemoryProperties* pMemoryProperties + + + void vkGetPhysicalDeviceFeatures + VkPhysicalDevice physicalDevice + VkPhysicalDeviceFeatures* pFeatures + + + void vkGetPhysicalDeviceFormatProperties + VkPhysicalDevice physicalDevice + VkFormat format + VkFormatProperties* pFormatProperties + + + VkResult vkGetPhysicalDeviceImageFormatProperties + VkPhysicalDevice physicalDevice + VkFormat format + VkImageType type + VkImageTiling tiling + VkImageUsageFlags usage + VkImageCreateFlags flags + VkImageFormatProperties* pImageFormatProperties + + + VkResult vkCreateDevice + VkPhysicalDevice physicalDevice + const VkDeviceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDevice* pDevice + + + VkResult vkCreateDevice + VkPhysicalDevice physicalDevice + const VkDeviceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDevice* pDevice + + + void vkDestroyDevice + VkDevice device + const VkAllocationCallbacks* pAllocator + + all sname:VkQueue objects created from pname:device + + + + VkResult vkEnumerateInstanceVersion + uint32_t* pApiVersion + + + VkResult vkEnumerateInstanceLayerProperties + uint32_t* pPropertyCount + VkLayerProperties* pProperties + + + VkResult vkEnumerateInstanceExtensionProperties + const char* pLayerName + uint32_t* pPropertyCount + VkExtensionProperties* pProperties + + + VkResult vkEnumerateDeviceLayerProperties + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkLayerProperties* pProperties + + + VkResult vkEnumerateDeviceLayerProperties + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkLayerProperties* pProperties + + + VkResult vkEnumerateDeviceExtensionProperties + VkPhysicalDevice physicalDevice + const char* pLayerName + uint32_t* pPropertyCount + VkExtensionProperties* pProperties + + + void vkGetDeviceQueue + VkDevice device + uint32_t queueFamilyIndex + uint32_t queueIndex + VkQueue* pQueue + + + VkResult vkQueueSubmit + VkQueue queue + uint32_t submitCount + const VkSubmitInfo* pSubmits + VkFence fence + + + VkResult vkQueueWaitIdle + VkQueue queue + + + VkResult vkDeviceWaitIdle + VkDevice device + + all sname:VkQueue objects created from pname:device + + + + VkResult vkAllocateMemory + VkDevice device + const VkMemoryAllocateInfo* pAllocateInfo + const VkAllocationCallbacks* pAllocator + VkDeviceMemory* pMemory + + + void vkFreeMemory + VkDevice device + VkDeviceMemory memory + const VkAllocationCallbacks* pAllocator + + + VkResult vkMapMemory + VkDevice device + VkDeviceMemory memory + VkDeviceSize offset + VkDeviceSize size + VkMemoryMapFlags flags + void** ppData + + + void vkUnmapMemory + VkDevice device + VkDeviceMemory memory + + + VkResult vkFlushMappedMemoryRanges + VkDevice device + uint32_t memoryRangeCount + const VkMappedMemoryRange* pMemoryRanges + + + VkResult vkInvalidateMappedMemoryRanges + VkDevice device + uint32_t memoryRangeCount + const VkMappedMemoryRange* pMemoryRanges + + + void vkGetDeviceMemoryCommitment + VkDevice device + VkDeviceMemory memory + VkDeviceSize* pCommittedMemoryInBytes + + + void vkGetBufferMemoryRequirements + VkDevice device + VkBuffer buffer + VkMemoryRequirements* pMemoryRequirements + + + VkResult vkBindBufferMemory + VkDevice device + VkBuffer buffer + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + void vkGetImageMemoryRequirements + VkDevice device + VkImage image + VkMemoryRequirements* pMemoryRequirements + + + VkResult vkBindImageMemory + VkDevice device + VkImage image + VkDeviceMemory memory + VkDeviceSize memoryOffset + + + void vkGetImageSparseMemoryRequirements + VkDevice device + VkImage image + uint32_t* pSparseMemoryRequirementCount + VkSparseImageMemoryRequirements* pSparseMemoryRequirements + + + void vkGetPhysicalDeviceSparseImageFormatProperties + VkPhysicalDevice physicalDevice + VkFormat format + VkImageType type + VkSampleCountFlagBits samples + VkImageUsageFlags usage + VkImageTiling tiling + uint32_t* pPropertyCount + VkSparseImageFormatProperties* pProperties + + + VkResult vkQueueBindSparse + VkQueue queue + uint32_t bindInfoCount + const VkBindSparseInfo* pBindInfo + VkFence fence + + + VkResult vkCreateFence + VkDevice device + const VkFenceCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkFence* pFence + + + void vkDestroyFence + VkDevice device + VkFence fence + const VkAllocationCallbacks* pAllocator + + + VkResult vkResetFences + VkDevice device + uint32_t fenceCount + const VkFence* pFences + + + VkResult vkGetFenceStatus + VkDevice device + VkFence fence + + + VkResult vkWaitForFences + VkDevice device + uint32_t fenceCount + const VkFence* pFences + VkBool32 waitAll + uint64_t timeout + + + VkResult vkCreateSemaphore + VkDevice device + const VkSemaphoreCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSemaphore* pSemaphore + + + void vkDestroySemaphore + VkDevice device + VkSemaphore semaphore + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateEvent + VkDevice device + const VkEventCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkEvent* pEvent + + + void vkDestroyEvent + VkDevice device + VkEvent event + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetEventStatus + VkDevice device + VkEvent event + + + VkResult vkSetEvent + VkDevice device + VkEvent event + + + VkResult vkResetEvent + VkDevice device + VkEvent event + + + VkResult vkCreateQueryPool + VkDevice device + const VkQueryPoolCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkQueryPool* pQueryPool + + + void vkDestroyQueryPool + VkDevice device + VkQueryPool queryPool + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetQueryPoolResults + VkDevice device + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + size_t dataSize + void* pData + VkDeviceSize stride + VkQueryResultFlags flags + + + void vkResetQueryPool + VkDevice device + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + + + + VkResult vkCreateBuffer + VkDevice device + const VkBufferCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkBuffer* pBuffer + + + void vkDestroyBuffer + VkDevice device + VkBuffer buffer + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateBufferView + VkDevice device + const VkBufferViewCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkBufferView* pView + + + void vkDestroyBufferView + VkDevice device + VkBufferView bufferView + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateImage + VkDevice device + const VkImageCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkImage* pImage + + + void vkDestroyImage + VkDevice device + VkImage image + const VkAllocationCallbacks* pAllocator + + + void vkGetImageSubresourceLayout + VkDevice device + VkImage image + const VkImageSubresource* pSubresource + VkSubresourceLayout* pLayout + + + VkResult vkCreateImageView + VkDevice device + const VkImageViewCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkImageView* pView + + + void vkDestroyImageView + VkDevice device + VkImageView imageView + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateShaderModule + VkDevice device + const VkShaderModuleCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkShaderModule* pShaderModule + + + void vkDestroyShaderModule + VkDevice device + VkShaderModule shaderModule + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreatePipelineCache + VkDevice device + const VkPipelineCacheCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineCache* pPipelineCache + + + VkResult vkCreatePipelineCache + VkDevice device + const VkPipelineCacheCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineCache* pPipelineCache + + + void vkDestroyPipelineCache + VkDevice device + VkPipelineCache pipelineCache + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetPipelineCacheData + VkDevice device + VkPipelineCache pipelineCache + size_t* pDataSize + void* pData + + + VkResult vkMergePipelineCaches + VkDevice device + VkPipelineCache dstCache + uint32_t srcCacheCount + const VkPipelineCache* pSrcCaches + + + VkResult vkCreatePipelineBinariesKHR + VkDevice device + const VkPipelineBinaryCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineBinaryHandlesInfoKHR* pBinaries + + + void vkDestroyPipelineBinaryKHR + VkDevice device + VkPipelineBinaryKHR pipelineBinary + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetPipelineKeyKHR + VkDevice device + const VkPipelineCreateInfoKHR* pPipelineCreateInfo + VkPipelineBinaryKeyKHR* pPipelineKey + + + VkResult vkGetPipelineBinaryDataKHR + VkDevice device + const VkPipelineBinaryDataInfoKHR* pInfo + VkPipelineBinaryKeyKHR* pPipelineBinaryKey + size_t* pPipelineBinaryDataSize + void* pPipelineBinaryData + + + VkResult vkReleaseCapturedPipelineDataKHR + VkDevice device + const VkReleaseCapturedPipelineDataInfoKHR* pInfo + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateGraphicsPipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkGraphicsPipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateGraphicsPipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkGraphicsPipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateComputePipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkComputePipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateComputePipelines + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkComputePipelineCreateInfo* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI + VkDevice device + VkRenderPass renderpass + VkExtent2D* pMaxWorkgroupSize + + + void vkDestroyPipeline + VkDevice device + VkPipeline pipeline + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreatePipelineLayout + VkDevice device + const VkPipelineLayoutCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPipelineLayout* pPipelineLayout + + + void vkDestroyPipelineLayout + VkDevice device + VkPipelineLayout pipelineLayout + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateSampler + VkDevice device + const VkSamplerCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSampler* pSampler + + + void vkDestroySampler + VkDevice device + VkSampler sampler + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateDescriptorSetLayout + VkDevice device + const VkDescriptorSetLayoutCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDescriptorSetLayout* pSetLayout + + + void vkDestroyDescriptorSetLayout + VkDevice device + VkDescriptorSetLayout descriptorSetLayout + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateDescriptorPool + VkDevice device + const VkDescriptorPoolCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDescriptorPool* pDescriptorPool + + + void vkDestroyDescriptorPool + VkDevice device + VkDescriptorPool descriptorPool + const VkAllocationCallbacks* pAllocator + + + VkResult vkResetDescriptorPool + VkDevice device + VkDescriptorPool descriptorPool + VkDescriptorPoolResetFlags flags + + any sname:VkDescriptorSet objects allocated from pname:descriptorPool + + + + VkResult vkAllocateDescriptorSets + VkDevice device + const VkDescriptorSetAllocateInfo* pAllocateInfo + VkDescriptorSet* pDescriptorSets + + + VkResult vkFreeDescriptorSets + VkDevice device + VkDescriptorPool descriptorPool + uint32_t descriptorSetCount + const VkDescriptorSet* pDescriptorSets + + + void vkUpdateDescriptorSets + VkDevice device + uint32_t descriptorWriteCount + const VkWriteDescriptorSet* pDescriptorWrites + uint32_t descriptorCopyCount + const VkCopyDescriptorSet* pDescriptorCopies + + + VkResult vkCreateFramebuffer + VkDevice device + const VkFramebufferCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkFramebuffer* pFramebuffer + + + void vkDestroyFramebuffer + VkDevice device + VkFramebuffer framebuffer + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateRenderPass + VkDevice device + const VkRenderPassCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkRenderPass* pRenderPass + + + void vkDestroyRenderPass + VkDevice device + VkRenderPass renderPass + const VkAllocationCallbacks* pAllocator + + + void vkGetRenderAreaGranularity + VkDevice device + VkRenderPass renderPass + VkExtent2D* pGranularity + + + void vkGetRenderingAreaGranularity + VkDevice device + const VkRenderingAreaInfo* pRenderingAreaInfo + VkExtent2D* pGranularity + + + + VkResult vkCreateCommandPool + VkDevice device + const VkCommandPoolCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCommandPool* pCommandPool + + + void vkDestroyCommandPool + VkDevice device + VkCommandPool commandPool + const VkAllocationCallbacks* pAllocator + + + VkResult vkResetCommandPool + VkDevice device + VkCommandPool commandPool + VkCommandPoolResetFlags flags + + + VkResult vkAllocateCommandBuffers + VkDevice device + const VkCommandBufferAllocateInfo* pAllocateInfo + VkCommandBuffer* pCommandBuffers + + + void vkFreeCommandBuffers + VkDevice device + VkCommandPool commandPool + uint32_t commandBufferCount + const VkCommandBuffer* pCommandBuffers + + + VkResult vkBeginCommandBuffer + VkCommandBuffer commandBuffer + const VkCommandBufferBeginInfo* pBeginInfo + + the sname:VkCommandPool that pname:commandBuffer was allocated from + + + + VkResult vkEndCommandBuffer + VkCommandBuffer commandBuffer + + the sname:VkCommandPool that pname:commandBuffer was allocated from + + + + VkResult vkResetCommandBuffer + VkCommandBuffer commandBuffer + VkCommandBufferResetFlags flags + + the sname:VkCommandPool that pname:commandBuffer was allocated from + + + + void vkCmdBindPipeline + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + + + void vkCmdSetAttachmentFeedbackLoopEnableEXT + VkCommandBuffer commandBuffer + VkImageAspectFlags aspectMask + + + void vkCmdSetViewport + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkViewport* pViewports + + + void vkCmdSetScissor + VkCommandBuffer commandBuffer + uint32_t firstScissor + uint32_t scissorCount + const VkRect2D* pScissors + + + void vkCmdSetLineWidth + VkCommandBuffer commandBuffer + float lineWidth + + + void vkCmdSetDepthBias + VkCommandBuffer commandBuffer + float depthBiasConstantFactor + float depthBiasClamp + float depthBiasSlopeFactor + + + void vkCmdSetBlendConstants + VkCommandBuffer commandBuffer + const float blendConstants[4] + + + void vkCmdSetDepthBounds + VkCommandBuffer commandBuffer + float minDepthBounds + float maxDepthBounds + + + void vkCmdSetStencilCompareMask + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + uint32_t compareMask + + + void vkCmdSetStencilWriteMask + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + uint32_t writeMask + + + void vkCmdSetStencilReference + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + uint32_t reference + + + void vkCmdBindDescriptorSets + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t firstSet + uint32_t descriptorSetCount + const VkDescriptorSet* pDescriptorSets + uint32_t dynamicOffsetCount + const uint32_t* pDynamicOffsets + + + void vkCmdBindIndexBuffer + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkIndexType indexType + + + void vkCmdBindVertexBuffers + VkCommandBuffer commandBuffer + uint32_t firstBinding + uint32_t bindingCount + const VkBuffer* pBuffers + const VkDeviceSize* pOffsets + + + void vkCmdDraw + VkCommandBuffer commandBuffer + uint32_t vertexCount + uint32_t instanceCount + uint32_t firstVertex + uint32_t firstInstance + + + void vkCmdDrawIndexed + VkCommandBuffer commandBuffer + uint32_t indexCount + uint32_t instanceCount + uint32_t firstIndex + int32_t vertexOffset + uint32_t firstInstance + + + void vkCmdDrawMultiEXT + VkCommandBuffer commandBuffer + uint32_t drawCount + const VkMultiDrawInfoEXT* pVertexInfo + uint32_t instanceCount + uint32_t firstInstance + uint32_t stride + + + void vkCmdDrawMultiIndexedEXT + VkCommandBuffer commandBuffer + uint32_t drawCount + const VkMultiDrawIndexedInfoEXT* pIndexInfo + uint32_t instanceCount + uint32_t firstInstance + uint32_t stride + const int32_t* pVertexOffset + + + void vkCmdDrawIndirect + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDrawIndexedIndirect + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDispatch + VkCommandBuffer commandBuffer + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + void vkCmdDispatchIndirect + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + + + void vkCmdSubpassShadingHUAWEI + VkCommandBuffer commandBuffer + + + void vkCmdDrawClusterHUAWEI + VkCommandBuffer commandBuffer + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + void vkCmdDrawClusterIndirectHUAWEI + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + + + void vkCmdUpdatePipelineIndirectBufferNV + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + + + void vkCmdCopyBuffer + VkCommandBuffer commandBuffer + VkBuffer srcBuffer + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferCopy* pRegions + + + void vkCmdCopyImage + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageCopy* pRegions + + + void vkCmdBlitImage + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageBlit* pRegions + VkFilter filter + + + void vkCmdCopyBufferToImage + VkCommandBuffer commandBuffer + VkBuffer srcBuffer + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkBufferImageCopy* pRegions + + + void vkCmdCopyImageToBuffer + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkBuffer dstBuffer + uint32_t regionCount + const VkBufferImageCopy* pRegions + + + void vkCmdCopyMemoryIndirectNV + VkCommandBuffer commandBuffer + VkDeviceAddress copyBufferAddress + uint32_t copyCount + uint32_t stride + + + void vkCmdCopyMemoryToImageIndirectNV + VkCommandBuffer commandBuffer + VkDeviceAddress copyBufferAddress + uint32_t copyCount + uint32_t stride + VkImage dstImage + VkImageLayout dstImageLayout + const VkImageSubresourceLayers* pImageSubresources + + + void vkCmdUpdateBuffer + VkCommandBuffer commandBuffer + VkBuffer dstBuffer + VkDeviceSize dstOffset + VkDeviceSize dataSize + const void* pData + + + void vkCmdFillBuffer + VkCommandBuffer commandBuffer + VkBuffer dstBuffer + VkDeviceSize dstOffset + VkDeviceSize size + uint32_t data + + + void vkCmdClearColorImage + VkCommandBuffer commandBuffer + VkImage image + VkImageLayout imageLayout + const VkClearColorValue* pColor + uint32_t rangeCount + const VkImageSubresourceRange* pRanges + + + void vkCmdClearDepthStencilImage + VkCommandBuffer commandBuffer + VkImage image + VkImageLayout imageLayout + const VkClearDepthStencilValue* pDepthStencil + uint32_t rangeCount + const VkImageSubresourceRange* pRanges + + + void vkCmdClearAttachments + VkCommandBuffer commandBuffer + uint32_t attachmentCount + const VkClearAttachment* pAttachments + uint32_t rectCount + const VkClearRect* pRects + + + void vkCmdResolveImage + VkCommandBuffer commandBuffer + VkImage srcImage + VkImageLayout srcImageLayout + VkImage dstImage + VkImageLayout dstImageLayout + uint32_t regionCount + const VkImageResolve* pRegions + + + void vkCmdSetEvent + VkCommandBuffer commandBuffer + VkEvent event + VkPipelineStageFlags stageMask + + + void vkCmdResetEvent + VkCommandBuffer commandBuffer + VkEvent event + VkPipelineStageFlags stageMask + + + void 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 + + + void 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 + + + void vkCmdBeginQuery + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + VkQueryControlFlags flags + + + void vkCmdEndQuery + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + + + void vkCmdBeginConditionalRenderingEXT + VkCommandBuffer commandBuffer + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin + + + void vkCmdEndConditionalRenderingEXT + VkCommandBuffer commandBuffer + + + void vkCmdResetQueryPool + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + + + void vkCmdWriteTimestamp + VkCommandBuffer commandBuffer + VkPipelineStageFlagBits pipelineStage + VkQueryPool queryPool + uint32_t query + + + void vkCmdCopyQueryPoolResults + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t firstQuery + uint32_t queryCount + VkBuffer dstBuffer + VkDeviceSize dstOffset + VkDeviceSize stride + VkQueryResultFlags flags + + + void vkCmdPushConstants + VkCommandBuffer commandBuffer + VkPipelineLayout layout + VkShaderStageFlags stageFlags + uint32_t offset + uint32_t size + const void* pValues + + + void vkCmdBeginRenderPass + VkCommandBuffer commandBuffer + const VkRenderPassBeginInfo* pRenderPassBegin + VkSubpassContents contents + + + void vkCmdNextSubpass + VkCommandBuffer commandBuffer + VkSubpassContents contents + + + void vkCmdEndRenderPass + VkCommandBuffer commandBuffer + + + void vkCmdExecuteCommands + VkCommandBuffer commandBuffer + uint32_t commandBufferCount + const VkCommandBuffer* pCommandBuffers + + + VkResult vkCreateAndroidSurfaceKHR + VkInstance instance + const VkAndroidSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateSurfaceOHOS + VkInstance instance + const VkSurfaceCreateInfoOHOS* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkGetPhysicalDeviceDisplayPropertiesKHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayPropertiesKHR* pProperties + + + VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayPlanePropertiesKHR* pProperties + + + VkResult vkGetDisplayPlaneSupportedDisplaysKHR + VkPhysicalDevice physicalDevice + uint32_t planeIndex + uint32_t* pDisplayCount + VkDisplayKHR* pDisplays + + + VkResult vkGetDisplayModePropertiesKHR + VkPhysicalDevice physicalDevice + VkDisplayKHR display + uint32_t* pPropertyCount + VkDisplayModePropertiesKHR* pProperties + + + VkResult vkCreateDisplayModeKHR + VkPhysicalDevice physicalDevice + VkDisplayKHR display + const VkDisplayModeCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDisplayModeKHR* pMode + + + VkResult vkGetDisplayPlaneCapabilitiesKHR + VkPhysicalDevice physicalDevice + VkDisplayModeKHR mode + uint32_t planeIndex + VkDisplayPlaneCapabilitiesKHR* pCapabilities + + + VkResult vkCreateDisplayPlaneSurfaceKHR + VkInstance instance + const VkDisplaySurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateSharedSwapchainsKHR + VkDevice device + uint32_t swapchainCount + const VkSwapchainCreateInfoKHR* pCreateInfos + const VkSwapchainCreateInfoKHR* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkSwapchainKHR* pSwapchains + + + void vkDestroySurfaceKHR + VkInstance instance + VkSurfaceKHR surface + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetPhysicalDeviceSurfaceSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + VkSurfaceKHR surface + VkBool32* pSupported + + + VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities + + + VkResult vkGetPhysicalDeviceSurfaceFormatsKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + uint32_t* pSurfaceFormatCount + VkSurfaceFormatKHR* pSurfaceFormats + + + VkResult vkGetPhysicalDeviceSurfacePresentModesKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + uint32_t* pPresentModeCount + VkPresentModeKHR* pPresentModes + + + VkResult vkCreateSwapchainKHR + VkDevice device + const VkSwapchainCreateInfoKHR* pCreateInfo + const VkSwapchainCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSwapchainKHR* pSwapchain + + + void vkDestroySwapchainKHR + VkDevice device + VkSwapchainKHR swapchain + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetSwapchainImagesKHR + VkDevice device + VkSwapchainKHR swapchain + uint32_t* pSwapchainImageCount + VkImage* pSwapchainImages + + + VkResult vkAcquireNextImageKHR + VkDevice device + VkSwapchainKHR swapchain + uint64_t timeout + VkSemaphore semaphore + VkFence fence + uint32_t* pImageIndex + + + VkResult vkQueuePresentKHR + VkQueue queue + const VkPresentInfoKHR* pPresentInfo + + + VkResult vkCreateViSurfaceNN + VkInstance instance + const VkViSurfaceCreateInfoNN* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateWaylandSurfaceKHR + VkInstance instance + const VkWaylandSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + struct wl_display* display + + + VkResult vkCreateWin32SurfaceKHR + VkInstance instance + const VkWin32SurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + + + VkResult vkCreateXlibSurfaceKHR + VkInstance instance + const VkXlibSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + Display* dpy + VisualID visualID + + + VkResult vkCreateXcbSurfaceKHR + VkInstance instance + const VkXcbSurfaceCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + xcb_connection_t* connection + xcb_visualid_t visual_id + + + VkResult vkCreateDirectFBSurfaceEXT + VkInstance instance + const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceDirectFBPresentationSupportEXT + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + IDirectFB* dfb + + + VkResult vkCreateImagePipeSurfaceFUCHSIA + VkInstance instance + const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateStreamDescriptorSurfaceGGP + VkInstance instance + const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateScreenSurfaceQNX + VkInstance instance + const VkScreenSurfaceCreateInfoQNX* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkBool32 vkGetPhysicalDeviceScreenPresentationSupportQNX + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + struct _screen_window* window + + + VkResult vkCreateDebugReportCallbackEXT + VkInstance instance + const VkDebugReportCallbackCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDebugReportCallbackEXT* pCallback + + + void vkDestroyDebugReportCallbackEXT + VkInstance instance + VkDebugReportCallbackEXT callback + const VkAllocationCallbacks* pAllocator + + + void vkDebugReportMessageEXT + VkInstance instance + VkDebugReportFlagsEXT flags + VkDebugReportObjectTypeEXT objectType + uint64_t object + size_t location + int32_t messageCode + const char* pLayerPrefix + const char* pMessage + + + VkResult vkDebugMarkerSetObjectNameEXT + VkDevice device + const VkDebugMarkerObjectNameInfoEXT* pNameInfo + + + VkResult vkDebugMarkerSetObjectTagEXT + VkDevice device + const VkDebugMarkerObjectTagInfoEXT* pTagInfo + + + void vkCmdDebugMarkerBeginEXT + VkCommandBuffer commandBuffer + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo + + + void vkCmdDebugMarkerEndEXT + VkCommandBuffer commandBuffer + + + void vkCmdDebugMarkerInsertEXT + VkCommandBuffer commandBuffer + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo + + + VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV + VkPhysicalDevice physicalDevice + VkFormat format + VkImageType type + VkImageTiling tiling + VkImageUsageFlags usage + VkImageCreateFlags flags + VkExternalMemoryHandleTypeFlagsNV externalHandleType + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties + + + VkResult vkGetMemoryWin32HandleNV + VkDevice device + VkDeviceMemory memory + VkExternalMemoryHandleTypeFlagsNV handleType + HANDLE* pHandle + + + void vkCmdExecuteGeneratedCommandsNV + VkCommandBuffer commandBuffer + VkBool32 isPreprocessed + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo + + + void vkCmdPreprocessGeneratedCommandsNV + VkCommandBuffer commandBuffer + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo + + + void vkCmdBindPipelineShaderGroupNV + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipeline pipeline + uint32_t groupIndex + + + void vkGetGeneratedCommandsMemoryRequirementsNV + VkDevice device + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkCreateIndirectCommandsLayoutNV + VkDevice device + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkIndirectCommandsLayoutNV* pIndirectCommandsLayout + + + void vkDestroyIndirectCommandsLayoutNV + VkDevice device + VkIndirectCommandsLayoutNV indirectCommandsLayout + const VkAllocationCallbacks* pAllocator + + + + void vkCmdExecuteGeneratedCommandsEXT + VkCommandBuffer commandBuffer + VkBool32 isPreprocessed + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo + + + void vkCmdPreprocessGeneratedCommandsEXT + VkCommandBuffer commandBuffer + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo + VkCommandBuffer stateCommandBuffer + + + void vkGetGeneratedCommandsMemoryRequirementsEXT + VkDevice device + const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkCreateIndirectCommandsLayoutEXT + VkDevice device + const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout + + + void vkDestroyIndirectCommandsLayoutEXT + VkDevice device + VkIndirectCommandsLayoutEXT indirectCommandsLayout + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateIndirectExecutionSetEXT + VkDevice device + const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkIndirectExecutionSetEXT* pIndirectExecutionSet + + + void vkDestroyIndirectExecutionSetEXT + VkDevice device + VkIndirectExecutionSetEXT indirectExecutionSet + const VkAllocationCallbacks* pAllocator + + + void vkUpdateIndirectExecutionSetPipelineEXT + VkDevice device + VkIndirectExecutionSetEXT indirectExecutionSet + uint32_t executionSetWriteCount + const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites + + + void vkUpdateIndirectExecutionSetShaderEXT + VkDevice device + VkIndirectExecutionSetEXT indirectExecutionSet + uint32_t executionSetWriteCount + const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites + + + + void vkGetPhysicalDeviceFeatures2 + VkPhysicalDevice physicalDevice + VkPhysicalDeviceFeatures2* pFeatures + + + + void vkGetPhysicalDeviceProperties2 + VkPhysicalDevice physicalDevice + VkPhysicalDeviceProperties2* pProperties + + + + void vkGetPhysicalDeviceFormatProperties2 + VkPhysicalDevice physicalDevice + VkFormat format + VkFormatProperties2* pFormatProperties + + + + VkResult vkGetPhysicalDeviceImageFormatProperties2 + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo + VkImageFormatProperties2* pImageFormatProperties + + + + void vkGetPhysicalDeviceQueueFamilyProperties2 + VkPhysicalDevice physicalDevice + uint32_t* pQueueFamilyPropertyCount + VkQueueFamilyProperties2* pQueueFamilyProperties + + + + void vkGetPhysicalDeviceMemoryProperties2 + VkPhysicalDevice physicalDevice + VkPhysicalDeviceMemoryProperties2* pMemoryProperties + + + + void vkGetPhysicalDeviceSparseImageFormatProperties2 + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo + uint32_t* pPropertyCount + VkSparseImageFormatProperties2* pProperties + + + + void vkCmdPushDescriptorSet + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t set + uint32_t descriptorWriteCount + const VkWriteDescriptorSet* pDescriptorWrites + + + + void vkTrimCommandPool + VkDevice device + VkCommandPool commandPool + VkCommandPoolTrimFlags flags + + + + void vkGetPhysicalDeviceExternalBufferProperties + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo + VkExternalBufferProperties* pExternalBufferProperties + + + + VkResult vkGetMemoryWin32HandleKHR + VkDevice device + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo + HANDLE* pHandle + + + VkResult vkGetMemoryWin32HandlePropertiesKHR + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + HANDLE handle + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties + + + VkResult vkGetMemoryFdKHR + VkDevice device + const VkMemoryGetFdInfoKHR* pGetFdInfo + int* pFd + + + VkResult vkGetMemoryFdPropertiesKHR + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + int fd + VkMemoryFdPropertiesKHR* pMemoryFdProperties + + + VkResult vkGetMemoryZirconHandleFUCHSIA + VkDevice device + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo + zx_handle_t* pZirconHandle + + + VkResult vkGetMemoryZirconHandlePropertiesFUCHSIA + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + zx_handle_t zirconHandle + VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties + + + VkResult vkGetMemoryRemoteAddressNV + VkDevice device + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo + VkRemoteAddressNV* pAddress + + + VkResult vkGetMemorySciBufNV + VkDevice device + const VkMemoryGetSciBufInfoNV* pGetSciBufInfo + NvSciBufObj* pHandle + + + VkResult vkGetPhysicalDeviceExternalMemorySciBufPropertiesNV + VkPhysicalDevice physicalDevice + VkExternalMemoryHandleTypeFlagBits handleType + NvSciBufObj handle + VkMemorySciBufPropertiesNV* pMemorySciBufProperties + + + VkResult vkGetPhysicalDeviceSciBufAttributesNV + VkPhysicalDevice physicalDevice + NvSciBufAttrList pAttributes + + + void vkGetPhysicalDeviceExternalSemaphoreProperties + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo + VkExternalSemaphoreProperties* pExternalSemaphoreProperties + + + + VkResult vkGetSemaphoreWin32HandleKHR + VkDevice device + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo + HANDLE* pHandle + + + VkResult vkImportSemaphoreWin32HandleKHR + VkDevice device + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo + + + VkResult vkGetSemaphoreFdKHR + VkDevice device + const VkSemaphoreGetFdInfoKHR* pGetFdInfo + int* pFd + + + VkResult vkImportSemaphoreFdKHR + VkDevice device + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo + + + VkResult vkGetSemaphoreZirconHandleFUCHSIA + VkDevice device + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo + zx_handle_t* pZirconHandle + + + VkResult vkImportSemaphoreZirconHandleFUCHSIA + VkDevice device + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo + + + void vkGetPhysicalDeviceExternalFenceProperties + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo + VkExternalFenceProperties* pExternalFenceProperties + + + + VkResult vkGetFenceWin32HandleKHR + VkDevice device + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo + HANDLE* pHandle + + + VkResult vkImportFenceWin32HandleKHR + VkDevice device + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo + + + VkResult vkGetFenceFdKHR + VkDevice device + const VkFenceGetFdInfoKHR* pGetFdInfo + int* pFd + + + VkResult vkImportFenceFdKHR + VkDevice device + const VkImportFenceFdInfoKHR* pImportFenceFdInfo + + + VkResult vkGetFenceSciSyncFenceNV + VkDevice device + const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo + void* pHandle + + + VkResult vkGetFenceSciSyncObjNV + VkDevice device + const VkFenceGetSciSyncInfoNV* pGetSciSyncHandleInfo + void* pHandle + + + VkResult vkImportFenceSciSyncFenceNV + VkDevice device + const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo + + + VkResult vkImportFenceSciSyncObjNV + VkDevice device + const VkImportFenceSciSyncInfoNV* pImportFenceSciSyncInfo + + + VkResult vkGetSemaphoreSciSyncObjNV + VkDevice device + const VkSemaphoreGetSciSyncInfoNV* pGetSciSyncInfo + void* pHandle + + + VkResult vkImportSemaphoreSciSyncObjNV + VkDevice device + const VkImportSemaphoreSciSyncInfoNV* pImportSemaphoreSciSyncInfo + + + VkResult vkGetPhysicalDeviceSciSyncAttributesNV + VkPhysicalDevice physicalDevice + const VkSciSyncAttributesInfoNV* pSciSyncAttributesInfo + NvSciSyncAttrList pAttributes + + + VkResult vkCreateSemaphoreSciSyncPoolNV + VkDevice device + const VkSemaphoreSciSyncPoolCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSemaphoreSciSyncPoolNV* pSemaphorePool + + + void vkDestroySemaphoreSciSyncPoolNV + VkDevice device + VkSemaphoreSciSyncPoolNV semaphorePool + const VkAllocationCallbacks* pAllocator + + + VkResult vkReleaseDisplayEXT + VkPhysicalDevice physicalDevice + VkDisplayKHR display + + + VkResult vkAcquireXlibDisplayEXT + VkPhysicalDevice physicalDevice + Display* dpy + VkDisplayKHR display + + + VkResult vkGetRandROutputDisplayEXT + VkPhysicalDevice physicalDevice + Display* dpy + RROutput rrOutput + VkDisplayKHR* pDisplay + + + VkResult vkAcquireWinrtDisplayNV + VkPhysicalDevice physicalDevice + VkDisplayKHR display + + + VkResult vkGetWinrtDisplayNV + VkPhysicalDevice physicalDevice + uint32_t deviceRelativeId + VkDisplayKHR* pDisplay + + + VkResult vkDisplayPowerControlEXT + VkDevice device + VkDisplayKHR display + const VkDisplayPowerInfoEXT* pDisplayPowerInfo + + + VkResult vkRegisterDeviceEventEXT + VkDevice device + const VkDeviceEventInfoEXT* pDeviceEventInfo + const VkAllocationCallbacks* pAllocator + VkFence* pFence + + + VkResult vkRegisterDisplayEventEXT + VkDevice device + VkDisplayKHR display + const VkDisplayEventInfoEXT* pDisplayEventInfo + const VkAllocationCallbacks* pAllocator + VkFence* pFence + + + VkResult vkGetSwapchainCounterEXT + VkDevice device + VkSwapchainKHR swapchain + VkSurfaceCounterFlagBitsEXT counter + uint64_t* pCounterValue + + + VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + VkSurfaceCapabilities2EXT* pSurfaceCapabilities + + + VkResult vkEnumeratePhysicalDeviceGroups + VkInstance instance + uint32_t* pPhysicalDeviceGroupCount + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties + + + + void vkGetDeviceGroupPeerMemoryFeatures + VkDevice device + uint32_t heapIndex + uint32_t localDeviceIndex + uint32_t remoteDeviceIndex + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures + + + + VkResult vkBindBufferMemory2 + VkDevice device + uint32_t bindInfoCount + const VkBindBufferMemoryInfo* pBindInfos + + + + VkResult vkBindImageMemory2 + VkDevice device + uint32_t bindInfoCount + const VkBindImageMemoryInfo* pBindInfos + + + + void vkCmdSetDeviceMask + VkCommandBuffer commandBuffer + uint32_t deviceMask + + + + VkResult vkGetDeviceGroupPresentCapabilitiesKHR + VkDevice device + VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities + + + VkResult vkGetDeviceGroupSurfacePresentModesKHR + VkDevice device + VkSurfaceKHR surface + VkDeviceGroupPresentModeFlagsKHR* pModes + + + VkResult vkAcquireNextImage2KHR + VkDevice device + const VkAcquireNextImageInfoKHR* pAcquireInfo + uint32_t* pImageIndex + + + void vkCmdDispatchBase + VkCommandBuffer commandBuffer + uint32_t baseGroupX + uint32_t baseGroupY + uint32_t baseGroupZ + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + + VkResult vkGetPhysicalDevicePresentRectanglesKHR + VkPhysicalDevice physicalDevice + VkSurfaceKHR surface + uint32_t* pRectCount + VkRect2D* pRects + + + VkResult vkCreateDescriptorUpdateTemplate + VkDevice device + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate + + + + void vkDestroyDescriptorUpdateTemplate + VkDevice device + VkDescriptorUpdateTemplate descriptorUpdateTemplate + const VkAllocationCallbacks* pAllocator + + + + void vkUpdateDescriptorSetWithTemplate + VkDevice device + VkDescriptorSet descriptorSet + VkDescriptorUpdateTemplate descriptorUpdateTemplate + const void* pData + + + + void vkCmdPushDescriptorSetWithTemplate + VkCommandBuffer commandBuffer + VkDescriptorUpdateTemplate descriptorUpdateTemplate + VkPipelineLayout layout + uint32_t set + const void* pData + + + + void vkSetHdrMetadataEXT + VkDevice device + uint32_t swapchainCount + const VkSwapchainKHR* pSwapchains + const VkHdrMetadataEXT* pMetadata + + + VkResult vkGetSwapchainStatusKHR + VkDevice device + VkSwapchainKHR swapchain + + + VkResult vkGetRefreshCycleDurationGOOGLE + VkDevice device + VkSwapchainKHR swapchain + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties + + + VkResult vkGetPastPresentationTimingGOOGLE + VkDevice device + VkSwapchainKHR swapchain + uint32_t* pPresentationTimingCount + VkPastPresentationTimingGOOGLE* pPresentationTimings + + + VkResult vkCreateIOSSurfaceMVK + VkInstance instance + const VkIOSSurfaceCreateInfoMVK* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateMacOSSurfaceMVK + VkInstance instance + const VkMacOSSurfaceCreateInfoMVK* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkCreateMetalSurfaceEXT + VkInstance instance + const VkMetalSurfaceCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + void vkCmdSetViewportWScalingNV + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkViewportWScalingNV* pViewportWScalings + + + void vkCmdSetDiscardRectangleEXT + VkCommandBuffer commandBuffer + uint32_t firstDiscardRectangle + uint32_t discardRectangleCount + const VkRect2D* pDiscardRectangles + + + void vkCmdSetDiscardRectangleEnableEXT + VkCommandBuffer commandBuffer + VkBool32 discardRectangleEnable + + + void vkCmdSetDiscardRectangleModeEXT + VkCommandBuffer commandBuffer + VkDiscardRectangleModeEXT discardRectangleMode + + + void vkCmdSetSampleLocationsEXT + VkCommandBuffer commandBuffer + const VkSampleLocationsInfoEXT* pSampleLocationsInfo + + + void vkGetPhysicalDeviceMultisamplePropertiesEXT + VkPhysicalDevice physicalDevice + VkSampleCountFlagBits samples + VkMultisamplePropertiesEXT* pMultisampleProperties + + + VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + VkSurfaceCapabilities2KHR* pSurfaceCapabilities + + + VkResult vkGetPhysicalDeviceSurfaceFormats2KHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + uint32_t* pSurfaceFormatCount + VkSurfaceFormat2KHR* pSurfaceFormats + + + VkResult vkGetPhysicalDeviceDisplayProperties2KHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayProperties2KHR* pProperties + + + VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkDisplayPlaneProperties2KHR* pProperties + + + VkResult vkGetDisplayModeProperties2KHR + VkPhysicalDevice physicalDevice + VkDisplayKHR display + uint32_t* pPropertyCount + VkDisplayModeProperties2KHR* pProperties + + + VkResult vkGetDisplayPlaneCapabilities2KHR + VkPhysicalDevice physicalDevice + const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo + VkDisplayPlaneCapabilities2KHR* pCapabilities + + + void vkGetBufferMemoryRequirements2 + VkDevice device + const VkBufferMemoryRequirementsInfo2* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetImageMemoryRequirements2 + VkDevice device + const VkImageMemoryRequirementsInfo2* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetImageSparseMemoryRequirements2 + VkDevice device + const VkImageSparseMemoryRequirementsInfo2* pInfo + uint32_t* pSparseMemoryRequirementCount + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements + + + + void vkGetDeviceBufferMemoryRequirements + VkDevice device + const VkDeviceBufferMemoryRequirements* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetDeviceImageMemoryRequirements + VkDevice device + const VkDeviceImageMemoryRequirements* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + + void vkGetDeviceImageSparseMemoryRequirements + VkDevice device + const VkDeviceImageMemoryRequirements* pInfo + uint32_t* pSparseMemoryRequirementCount + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements + + + + VkResult vkCreateSamplerYcbcrConversion + VkDevice device + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSamplerYcbcrConversion* pYcbcrConversion + + + + void vkDestroySamplerYcbcrConversion + VkDevice device + VkSamplerYcbcrConversion ycbcrConversion + const VkAllocationCallbacks* pAllocator + + + + void vkGetDeviceQueue2 + VkDevice device + const VkDeviceQueueInfo2* pQueueInfo + VkQueue* pQueue + + + VkResult vkCreateValidationCacheEXT + VkDevice device + const VkValidationCacheCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkValidationCacheEXT* pValidationCache + + + void vkDestroyValidationCacheEXT + VkDevice device + VkValidationCacheEXT validationCache + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetValidationCacheDataEXT + VkDevice device + VkValidationCacheEXT validationCache + size_t* pDataSize + void* pData + + + VkResult vkMergeValidationCachesEXT + VkDevice device + VkValidationCacheEXT dstCache + uint32_t srcCacheCount + const VkValidationCacheEXT* pSrcCaches + + + void vkGetDescriptorSetLayoutSupport + VkDevice device + const VkDescriptorSetLayoutCreateInfo* pCreateInfo + VkDescriptorSetLayoutSupport* pSupport + + + + VkResult vkGetSwapchainGrallocUsageANDROID + VkDevice device + VkFormat format + VkImageUsageFlags imageUsage + int* grallocUsage + + + VkResult vkGetSwapchainGrallocUsage2ANDROID + VkDevice device + VkFormat format + VkImageUsageFlags imageUsage + VkSwapchainImageUsageFlagsANDROID swapchainImageUsage + uint64_t* grallocConsumerUsage + uint64_t* grallocProducerUsage + + + VkResult vkAcquireImageANDROID + VkDevice device + VkImage image + int nativeFenceFd + VkSemaphore semaphore + VkFence fence + + + VkResult vkQueueSignalReleaseImageANDROID + VkQueue queue + uint32_t waitSemaphoreCount + const VkSemaphore* pWaitSemaphores + VkImage image + int* pNativeFenceFd + + + VkResult vkGetShaderInfoAMD + VkDevice device + VkPipeline pipeline + VkShaderStageFlagBits shaderStage + VkShaderInfoTypeAMD infoType + size_t* pInfoSize + void* pInfo + + + void vkSetLocalDimmingAMD + VkDevice device + VkSwapchainKHR swapChain + VkBool32 localDimmingEnable + + + VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsKHR + VkPhysicalDevice physicalDevice + uint32_t* pTimeDomainCount + VkTimeDomainKHR* pTimeDomains + + + + VkResult vkGetCalibratedTimestampsKHR + VkDevice device + uint32_t timestampCount + const VkCalibratedTimestampInfoKHR* pTimestampInfos + uint64_t* pTimestamps + uint64_t* pMaxDeviation + + + + VkResult vkSetDebugUtilsObjectNameEXT + VkDevice device + const VkDebugUtilsObjectNameInfoEXT* pNameInfo + + + VkResult vkSetDebugUtilsObjectTagEXT + VkDevice device + const VkDebugUtilsObjectTagInfoEXT* pTagInfo + + + void vkQueueBeginDebugUtilsLabelEXT + VkQueue queue + const VkDebugUtilsLabelEXT* pLabelInfo + + + void vkQueueEndDebugUtilsLabelEXT + VkQueue queue + + + void vkQueueInsertDebugUtilsLabelEXT + VkQueue queue + const VkDebugUtilsLabelEXT* pLabelInfo + + + void vkCmdBeginDebugUtilsLabelEXT + VkCommandBuffer commandBuffer + const VkDebugUtilsLabelEXT* pLabelInfo + + + void vkCmdEndDebugUtilsLabelEXT + VkCommandBuffer commandBuffer + + + void vkCmdInsertDebugUtilsLabelEXT + VkCommandBuffer commandBuffer + const VkDebugUtilsLabelEXT* pLabelInfo + + + VkResult vkCreateDebugUtilsMessengerEXT + VkInstance instance + const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDebugUtilsMessengerEXT* pMessenger + + + void vkDestroyDebugUtilsMessengerEXT + VkInstance instance + VkDebugUtilsMessengerEXT messenger + const VkAllocationCallbacks* pAllocator + + + void vkSubmitDebugUtilsMessageEXT + VkInstance instance + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity + VkDebugUtilsMessageTypeFlagsEXT messageTypes + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData + + + VkResult vkGetMemoryHostPointerPropertiesEXT + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + const void* pHostPointer + VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties + + + void vkCmdWriteBufferMarkerAMD + VkCommandBuffer commandBuffer + VkPipelineStageFlagBits pipelineStage + VkBuffer dstBuffer + VkDeviceSize dstOffset + uint32_t marker + + + VkResult vkCreateRenderPass2 + VkDevice device + const VkRenderPassCreateInfo2* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkRenderPass* pRenderPass + + + + void vkCmdBeginRenderPass2 + VkCommandBuffer commandBuffer + const VkRenderPassBeginInfo* pRenderPassBegin + const VkSubpassBeginInfo* pSubpassBeginInfo + + + + void vkCmdNextSubpass2 + VkCommandBuffer commandBuffer + const VkSubpassBeginInfo* pSubpassBeginInfo + const VkSubpassEndInfo* pSubpassEndInfo + + + + void vkCmdEndRenderPass2 + VkCommandBuffer commandBuffer + const VkSubpassEndInfo* pSubpassEndInfo + + + + VkResult vkGetSemaphoreCounterValue + VkDevice device + VkSemaphore semaphore + uint64_t* pValue + + + + VkResult vkWaitSemaphores + VkDevice device + const VkSemaphoreWaitInfo* pWaitInfo + uint64_t timeout + + + + VkResult vkSignalSemaphore + VkDevice device + const VkSemaphoreSignalInfo* pSignalInfo + + + + VkResult vkGetAndroidHardwareBufferPropertiesANDROID + VkDevice device + const struct AHardwareBuffer* buffer + VkAndroidHardwareBufferPropertiesANDROID* pProperties + + + VkResult vkGetMemoryAndroidHardwareBufferANDROID + VkDevice device + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo + struct AHardwareBuffer** pBuffer + + + void vkCmdDrawIndirectCount + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + + + void vkCmdDrawIndexedIndirectCount + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + + + void vkCmdSetCheckpointNV + VkCommandBuffer commandBuffer + const void* pCheckpointMarker + + + void vkGetQueueCheckpointDataNV + VkQueue queue + uint32_t* pCheckpointDataCount + VkCheckpointDataNV* pCheckpointData + + + void vkCmdBindTransformFeedbackBuffersEXT + VkCommandBuffer commandBuffer + uint32_t firstBinding + uint32_t bindingCount + const VkBuffer* pBuffers + const VkDeviceSize* pOffsets + const VkDeviceSize* pSizes + + + void vkCmdBeginTransformFeedbackEXT + VkCommandBuffer commandBuffer + uint32_t firstCounterBuffer + uint32_t counterBufferCount + const VkBuffer* pCounterBuffers + const VkDeviceSize* pCounterBufferOffsets + + + void vkCmdEndTransformFeedbackEXT + VkCommandBuffer commandBuffer + uint32_t firstCounterBuffer + uint32_t counterBufferCount + const VkBuffer* pCounterBuffers + const VkDeviceSize* pCounterBufferOffsets + + + void vkCmdBeginQueryIndexedEXT + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + VkQueryControlFlags flags + uint32_t index + + + void vkCmdEndQueryIndexedEXT + VkCommandBuffer commandBuffer + VkQueryPool queryPool + uint32_t query + uint32_t index + + + void vkCmdDrawIndirectByteCountEXT + VkCommandBuffer commandBuffer + uint32_t instanceCount + uint32_t firstInstance + VkBuffer counterBuffer + VkDeviceSize counterBufferOffset + uint32_t counterOffset + uint32_t vertexStride + + + void vkCmdSetExclusiveScissorNV + VkCommandBuffer commandBuffer + uint32_t firstExclusiveScissor + uint32_t exclusiveScissorCount + const VkRect2D* pExclusiveScissors + + + void vkCmdSetExclusiveScissorEnableNV + VkCommandBuffer commandBuffer + uint32_t firstExclusiveScissor + uint32_t exclusiveScissorCount + const VkBool32* pExclusiveScissorEnables + + + void vkCmdBindShadingRateImageNV + VkCommandBuffer commandBuffer + VkImageView imageView + VkImageLayout imageLayout + + + void vkCmdSetViewportShadingRatePaletteNV + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkShadingRatePaletteNV* pShadingRatePalettes + + + void vkCmdSetCoarseSampleOrderNV + VkCommandBuffer commandBuffer + VkCoarseSampleOrderTypeNV sampleOrderType + uint32_t customSampleOrderCount + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders + + + void vkCmdDrawMeshTasksNV + VkCommandBuffer commandBuffer + uint32_t taskCount + uint32_t firstTask + + + void vkCmdDrawMeshTasksIndirectNV + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDrawMeshTasksIndirectCountNV + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + void vkCmdDrawMeshTasksEXT + VkCommandBuffer commandBuffer + uint32_t groupCountX + uint32_t groupCountY + uint32_t groupCountZ + + + void vkCmdDrawMeshTasksIndirectEXT + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + uint32_t drawCount + uint32_t stride + + + void vkCmdDrawMeshTasksIndirectCountEXT + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkBuffer countBuffer + VkDeviceSize countBufferOffset + uint32_t maxDrawCount + uint32_t stride + + + VkResult vkCompileDeferredNV + VkDevice device + VkPipeline pipeline + uint32_t shader + + + VkResult vkCreateAccelerationStructureNV + VkDevice device + const VkAccelerationStructureCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkAccelerationStructureNV* pAccelerationStructure + + + void vkCmdBindInvocationMaskHUAWEI + VkCommandBuffer commandBuffer + VkImageView imageView + VkImageLayout imageLayout + + + void vkDestroyAccelerationStructureKHR + VkDevice device + VkAccelerationStructureKHR accelerationStructure + const VkAllocationCallbacks* pAllocator + + + void vkDestroyAccelerationStructureNV + VkDevice device + VkAccelerationStructureNV accelerationStructure + const VkAllocationCallbacks* pAllocator + + + void vkGetAccelerationStructureMemoryRequirementsNV + VkDevice device + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo + VkMemoryRequirements2KHR* pMemoryRequirements + + + VkResult vkBindAccelerationStructureMemoryNV + VkDevice device + uint32_t bindInfoCount + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos + + + void vkCmdCopyAccelerationStructureNV + VkCommandBuffer commandBuffer + VkAccelerationStructureNV dst + VkAccelerationStructureNV src + VkCopyAccelerationStructureModeKHR mode + + + void vkCmdCopyAccelerationStructureKHR + VkCommandBuffer commandBuffer + const VkCopyAccelerationStructureInfoKHR* pInfo + + + VkResult vkCopyAccelerationStructureKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyAccelerationStructureInfoKHR* pInfo + + + void vkCmdCopyAccelerationStructureToMemoryKHR + VkCommandBuffer commandBuffer + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo + + + VkResult vkCopyAccelerationStructureToMemoryKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo + + + void vkCmdCopyMemoryToAccelerationStructureKHR + VkCommandBuffer commandBuffer + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo + + + VkResult vkCopyMemoryToAccelerationStructureKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo + + + void vkCmdWriteAccelerationStructuresPropertiesKHR + VkCommandBuffer commandBuffer + uint32_t accelerationStructureCount + const VkAccelerationStructureKHR* pAccelerationStructures + VkQueryType queryType + VkQueryPool queryPool + uint32_t firstQuery + + + void vkCmdWriteAccelerationStructuresPropertiesNV + VkCommandBuffer commandBuffer + uint32_t accelerationStructureCount + const VkAccelerationStructureNV* pAccelerationStructures + VkQueryType queryType + VkQueryPool queryPool + uint32_t firstQuery + + + void vkCmdBuildAccelerationStructureNV + VkCommandBuffer commandBuffer + const VkAccelerationStructureInfoNV* pInfo + VkBuffer instanceData + VkDeviceSize instanceOffset + VkBool32 update + VkAccelerationStructureNV dst + VkAccelerationStructureNV src + VkBuffer scratch + VkDeviceSize scratchOffset + + + VkResult vkWriteAccelerationStructuresPropertiesKHR + VkDevice device + uint32_t accelerationStructureCount + const VkAccelerationStructureKHR* pAccelerationStructures + VkQueryType queryType + size_t dataSize + void* pData + size_t stride + + + void vkCmdTraceRaysKHR + VkCommandBuffer commandBuffer + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable + uint32_t width + uint32_t height + uint32_t depth + + + void vkCmdTraceRaysNV + VkCommandBuffer commandBuffer + VkBuffer raygenShaderBindingTableBuffer + VkDeviceSize raygenShaderBindingOffset + VkBuffer missShaderBindingTableBuffer + VkDeviceSize missShaderBindingOffset + VkDeviceSize missShaderBindingStride + VkBuffer hitShaderBindingTableBuffer + VkDeviceSize hitShaderBindingOffset + VkDeviceSize hitShaderBindingStride + VkBuffer callableShaderBindingTableBuffer + VkDeviceSize callableShaderBindingOffset + VkDeviceSize callableShaderBindingStride + uint32_t width + uint32_t height + uint32_t depth + + + VkResult vkGetRayTracingShaderGroupHandlesKHR + VkDevice device + VkPipeline pipeline + uint32_t firstGroup + uint32_t groupCount + size_t dataSize + void* pData + + + + VkResult vkGetRayTracingCaptureReplayShaderGroupHandlesKHR + VkDevice device + VkPipeline pipeline + uint32_t firstGroup + uint32_t groupCount + size_t dataSize + void* pData + + + VkResult vkGetAccelerationStructureHandleNV + VkDevice device + VkAccelerationStructureNV accelerationStructure + size_t dataSize + void* pData + + + VkResult vkCreateRayTracingPipelinesNV + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoNV* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateRayTracingPipelinesNV + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoNV* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateRayTracingPipelinesKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateRayTracingPipelinesKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesNV + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeMatrixPropertiesNV* pProperties + + + void vkCmdTraceRaysIndirectKHR + VkCommandBuffer commandBuffer + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable + VkDeviceAddress indirectDeviceAddress + + + void vkCmdTraceRaysIndirect2KHR + VkCommandBuffer commandBuffer + VkDeviceAddress indirectDeviceAddress + + + void vkGetClusterAccelerationStructureBuildSizesNV + VkDevice device + const VkClusterAccelerationStructureInputInfoNV* pInfo + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo + + + void vkCmdBuildClusterAccelerationStructureIndirectNV + VkCommandBuffer commandBuffer + const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos + + + void vkGetDeviceAccelerationStructureCompatibilityKHR + VkDevice device + const VkAccelerationStructureVersionInfoKHR* pVersionInfo + VkAccelerationStructureCompatibilityKHR* pCompatibility + + + VkDeviceSize vkGetRayTracingShaderGroupStackSizeKHR + VkDevice device + VkPipeline pipeline + uint32_t group + VkShaderGroupShaderKHR groupShader + + + void vkCmdSetRayTracingPipelineStackSizeKHR + VkCommandBuffer commandBuffer + uint32_t pipelineStackSize + + + uint32_t vkGetImageViewHandleNVX + VkDevice device + const VkImageViewHandleInfoNVX* pInfo + + + uint64_t vkGetImageViewHandle64NVX + VkDevice device + const VkImageViewHandleInfoNVX* pInfo + + + VkResult vkGetImageViewAddressNVX + VkDevice device + VkImageView imageView + VkImageViewAddressPropertiesNVX* pProperties + + + VkResult vkGetPhysicalDeviceSurfacePresentModes2EXT + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + uint32_t* pPresentModeCount + VkPresentModeKHR* pPresentModes + + + VkResult vkGetDeviceGroupSurfacePresentModes2EXT + VkDevice device + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo + VkDeviceGroupPresentModeFlagsKHR* pModes + + + VkResult vkAcquireFullScreenExclusiveModeEXT + VkDevice device + VkSwapchainKHR swapchain + + + VkResult vkReleaseFullScreenExclusiveModeEXT + VkDevice device + VkSwapchainKHR swapchain + + + VkResult vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + uint32_t* pCounterCount + VkPerformanceCounterKHR* pCounters + VkPerformanceCounterDescriptionKHR* pCounterDescriptions + + + void vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR + VkPhysicalDevice physicalDevice + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo + uint32_t* pNumPasses + + + VkResult vkAcquireProfilingLockKHR + VkDevice device + const VkAcquireProfilingLockInfoKHR* pInfo + + + void vkReleaseProfilingLockKHR + VkDevice device + + + VkResult vkGetImageDrmFormatModifierPropertiesEXT + VkDevice device + VkImage image + VkImageDrmFormatModifierPropertiesEXT* pProperties + + + uint64_t vkGetBufferOpaqueCaptureAddress + VkDevice device + const VkBufferDeviceAddressInfo* pInfo + + + + VkDeviceAddress vkGetBufferDeviceAddress + VkDevice device + const VkBufferDeviceAddressInfo* pInfo + + + + + VkResult vkCreateHeadlessSurfaceEXT + VkInstance instance + const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkSurfaceKHR* pSurface + + + VkResult vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV + VkPhysicalDevice physicalDevice + uint32_t* pCombinationCount + VkFramebufferMixedSamplesCombinationNV* pCombinations + + + VkResult vkInitializePerformanceApiINTEL + VkDevice device + const VkInitializePerformanceApiInfoINTEL* pInitializeInfo + + + void vkUninitializePerformanceApiINTEL + VkDevice device + + + VkResult vkCmdSetPerformanceMarkerINTEL + VkCommandBuffer commandBuffer + const VkPerformanceMarkerInfoINTEL* pMarkerInfo + + + VkResult vkCmdSetPerformanceStreamMarkerINTEL + VkCommandBuffer commandBuffer + const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo + + + VkResult vkCmdSetPerformanceOverrideINTEL + VkCommandBuffer commandBuffer + const VkPerformanceOverrideInfoINTEL* pOverrideInfo + + + VkResult vkAcquirePerformanceConfigurationINTEL + VkDevice device + const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo + VkPerformanceConfigurationINTEL* pConfiguration + + + VkResult vkReleasePerformanceConfigurationINTEL + VkDevice device + VkPerformanceConfigurationINTEL configuration + + + VkResult vkQueueSetPerformanceConfigurationINTEL + VkQueue queue + VkPerformanceConfigurationINTEL configuration + + + VkResult vkGetPerformanceParameterINTEL + VkDevice device + VkPerformanceParameterTypeINTEL parameter + VkPerformanceValueINTEL* pValue + + + uint64_t vkGetDeviceMemoryOpaqueCaptureAddress + VkDevice device + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo + + + + VkResult vkGetPipelineExecutablePropertiesKHR + VkDevice device + const VkPipelineInfoKHR* pPipelineInfo + uint32_t* pExecutableCount + VkPipelineExecutablePropertiesKHR* pProperties + + + VkResult vkGetPipelineExecutableStatisticsKHR + VkDevice device + const VkPipelineExecutableInfoKHR* pExecutableInfo + uint32_t* pStatisticCount + VkPipelineExecutableStatisticKHR* pStatistics + + + VkResult vkGetPipelineExecutableInternalRepresentationsKHR + VkDevice device + const VkPipelineExecutableInfoKHR* pExecutableInfo + uint32_t* pInternalRepresentationCount + VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations + + + void vkCmdSetLineStipple + VkCommandBuffer commandBuffer + uint32_t lineStippleFactor + uint16_t lineStipplePattern + + + + + VkResult vkGetFaultData + VkDevice device + VkFaultQueryBehavior faultQueryBehavior + VkBool32* pUnrecordedFaults + uint32_t* pFaultCount + VkFaultData* pFaults + + + VkResult vkGetPhysicalDeviceToolProperties + VkPhysicalDevice physicalDevice + uint32_t* pToolCount + VkPhysicalDeviceToolProperties* pToolProperties + + + + VkResult vkCreateAccelerationStructureKHR + VkDevice device + const VkAccelerationStructureCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkAccelerationStructureKHR* pAccelerationStructure + + + void vkCmdBuildAccelerationStructuresKHR + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos + + + void vkCmdBuildAccelerationStructuresIndirectKHR + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos + const VkDeviceAddress* pIndirectDeviceAddresses + const uint32_t* pIndirectStrides + const uint32_t* const* ppMaxPrimitiveCounts + + + VkResult vkBuildAccelerationStructuresKHR + VkDevice device + VkDeferredOperationKHR deferredOperation + uint32_t infoCount + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos + + + VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR + VkDevice device + const VkAccelerationStructureDeviceAddressInfoKHR* pInfo + + + VkResult vkCreateDeferredOperationKHR + VkDevice device + const VkAllocationCallbacks* pAllocator + VkDeferredOperationKHR* pDeferredOperation + + + void vkDestroyDeferredOperationKHR + VkDevice device + VkDeferredOperationKHR operation + const VkAllocationCallbacks* pAllocator + + + uint32_t vkGetDeferredOperationMaxConcurrencyKHR + VkDevice device + VkDeferredOperationKHR operation + + + VkResult vkGetDeferredOperationResultKHR + VkDevice device + VkDeferredOperationKHR operation + + + VkResult vkDeferredOperationJoinKHR + VkDevice device + VkDeferredOperationKHR operation + + + void vkGetPipelineIndirectMemoryRequirementsNV + VkDevice device + const VkComputePipelineCreateInfo* pCreateInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkDeviceAddress vkGetPipelineIndirectDeviceAddressNV + VkDevice device + const VkPipelineIndirectDeviceAddressInfoNV* pInfo + + + void vkAntiLagUpdateAMD + VkDevice device + const VkAntiLagDataAMD* pData + + + void vkCmdSetCullMode + VkCommandBuffer commandBuffer + VkCullModeFlags cullMode + + + + void vkCmdSetFrontFace + VkCommandBuffer commandBuffer + VkFrontFace frontFace + + + + void vkCmdSetPrimitiveTopology + VkCommandBuffer commandBuffer + VkPrimitiveTopology primitiveTopology + + + + void vkCmdSetViewportWithCount + VkCommandBuffer commandBuffer + uint32_t viewportCount + const VkViewport* pViewports + + + + void vkCmdSetScissorWithCount + VkCommandBuffer commandBuffer + uint32_t scissorCount + const VkRect2D* pScissors + + + + void vkCmdBindIndexBuffer2 + VkCommandBuffer commandBuffer + VkBuffer buffer + VkDeviceSize offset + VkDeviceSize size + VkIndexType indexType + + + + void vkCmdBindVertexBuffers2 + VkCommandBuffer commandBuffer + uint32_t firstBinding + uint32_t bindingCount + const VkBuffer* pBuffers + const VkDeviceSize* pOffsets + const VkDeviceSize* pSizes + const VkDeviceSize* pStrides + + + + void vkCmdSetDepthTestEnable + VkCommandBuffer commandBuffer + VkBool32 depthTestEnable + + + + void vkCmdSetDepthWriteEnable + VkCommandBuffer commandBuffer + VkBool32 depthWriteEnable + + + + void vkCmdSetDepthCompareOp + VkCommandBuffer commandBuffer + VkCompareOp depthCompareOp + + + + void vkCmdSetDepthBoundsTestEnable + VkCommandBuffer commandBuffer + VkBool32 depthBoundsTestEnable + + + + void vkCmdSetStencilTestEnable + VkCommandBuffer commandBuffer + VkBool32 stencilTestEnable + + + + void vkCmdSetStencilOp + VkCommandBuffer commandBuffer + VkStencilFaceFlags faceMask + VkStencilOp failOp + VkStencilOp passOp + VkStencilOp depthFailOp + VkCompareOp compareOp + + + + void vkCmdSetPatchControlPointsEXT + VkCommandBuffer commandBuffer + uint32_t patchControlPoints + + + void vkCmdSetRasterizerDiscardEnable + VkCommandBuffer commandBuffer + VkBool32 rasterizerDiscardEnable + + + + void vkCmdSetDepthBiasEnable + VkCommandBuffer commandBuffer + VkBool32 depthBiasEnable + + + + void vkCmdSetLogicOpEXT + VkCommandBuffer commandBuffer + VkLogicOp logicOp + + + void vkCmdSetPrimitiveRestartEnable + VkCommandBuffer commandBuffer + VkBool32 primitiveRestartEnable + + + + void vkCmdSetTessellationDomainOriginEXT + VkCommandBuffer commandBuffer + VkTessellationDomainOrigin domainOrigin + + + void vkCmdSetDepthClampEnableEXT + VkCommandBuffer commandBuffer + VkBool32 depthClampEnable + + + void vkCmdSetPolygonModeEXT + VkCommandBuffer commandBuffer + VkPolygonMode polygonMode + + + void vkCmdSetRasterizationSamplesEXT + VkCommandBuffer commandBuffer + VkSampleCountFlagBits rasterizationSamples + + + void vkCmdSetSampleMaskEXT + VkCommandBuffer commandBuffer + VkSampleCountFlagBits samples + const VkSampleMask* pSampleMask + + + void vkCmdSetAlphaToCoverageEnableEXT + VkCommandBuffer commandBuffer + VkBool32 alphaToCoverageEnable + + + void vkCmdSetAlphaToOneEnableEXT + VkCommandBuffer commandBuffer + VkBool32 alphaToOneEnable + + + void vkCmdSetLogicOpEnableEXT + VkCommandBuffer commandBuffer + VkBool32 logicOpEnable + + + void vkCmdSetColorBlendEnableEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkBool32* pColorBlendEnables + + + void vkCmdSetColorBlendEquationEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkColorBlendEquationEXT* pColorBlendEquations + + + void vkCmdSetColorWriteMaskEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkColorComponentFlags* pColorWriteMasks + + + void vkCmdSetRasterizationStreamEXT + VkCommandBuffer commandBuffer + uint32_t rasterizationStream + + + void vkCmdSetConservativeRasterizationModeEXT + VkCommandBuffer commandBuffer + VkConservativeRasterizationModeEXT conservativeRasterizationMode + + + void vkCmdSetExtraPrimitiveOverestimationSizeEXT + VkCommandBuffer commandBuffer + float extraPrimitiveOverestimationSize + + + void vkCmdSetDepthClipEnableEXT + VkCommandBuffer commandBuffer + VkBool32 depthClipEnable + + + void vkCmdSetSampleLocationsEnableEXT + VkCommandBuffer commandBuffer + VkBool32 sampleLocationsEnable + + + void vkCmdSetColorBlendAdvancedEXT + VkCommandBuffer commandBuffer + uint32_t firstAttachment + uint32_t attachmentCount + const VkColorBlendAdvancedEXT* pColorBlendAdvanced + + + void vkCmdSetProvokingVertexModeEXT + VkCommandBuffer commandBuffer + VkProvokingVertexModeEXT provokingVertexMode + + + void vkCmdSetLineRasterizationModeEXT + VkCommandBuffer commandBuffer + VkLineRasterizationModeEXT lineRasterizationMode + + + void vkCmdSetLineStippleEnableEXT + VkCommandBuffer commandBuffer + VkBool32 stippledLineEnable + + + void vkCmdSetDepthClipNegativeOneToOneEXT + VkCommandBuffer commandBuffer + VkBool32 negativeOneToOne + + + void vkCmdSetViewportWScalingEnableNV + VkCommandBuffer commandBuffer + VkBool32 viewportWScalingEnable + + + void vkCmdSetViewportSwizzleNV + VkCommandBuffer commandBuffer + uint32_t firstViewport + uint32_t viewportCount + const VkViewportSwizzleNV* pViewportSwizzles + + + void vkCmdSetCoverageToColorEnableNV + VkCommandBuffer commandBuffer + VkBool32 coverageToColorEnable + + + void vkCmdSetCoverageToColorLocationNV + VkCommandBuffer commandBuffer + uint32_t coverageToColorLocation + + + void vkCmdSetCoverageModulationModeNV + VkCommandBuffer commandBuffer + VkCoverageModulationModeNV coverageModulationMode + + + void vkCmdSetCoverageModulationTableEnableNV + VkCommandBuffer commandBuffer + VkBool32 coverageModulationTableEnable + + + void vkCmdSetCoverageModulationTableNV + VkCommandBuffer commandBuffer + uint32_t coverageModulationTableCount + const float* pCoverageModulationTable + + + void vkCmdSetShadingRateImageEnableNV + VkCommandBuffer commandBuffer + VkBool32 shadingRateImageEnable + + + void vkCmdSetCoverageReductionModeNV + VkCommandBuffer commandBuffer + VkCoverageReductionModeNV coverageReductionMode + + + void vkCmdSetRepresentativeFragmentTestEnableNV + VkCommandBuffer commandBuffer + VkBool32 representativeFragmentTestEnable + + + VkResult vkCreatePrivateDataSlot + VkDevice device + const VkPrivateDataSlotCreateInfo* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkPrivateDataSlot* pPrivateDataSlot + + + + void vkDestroyPrivateDataSlot + VkDevice device + VkPrivateDataSlot privateDataSlot + const VkAllocationCallbacks* pAllocator + + + + VkResult vkSetPrivateData + VkDevice device + VkObjectType objectType + uint64_t objectHandle + VkPrivateDataSlot privateDataSlot + uint64_t data + + + + void vkGetPrivateData + VkDevice device + VkObjectType objectType + uint64_t objectHandle + VkPrivateDataSlot privateDataSlot + uint64_t* pData + + + + void vkCmdCopyBuffer2 + VkCommandBuffer commandBuffer + const VkCopyBufferInfo2* pCopyBufferInfo + + + + void vkCmdCopyImage2 + VkCommandBuffer commandBuffer + const VkCopyImageInfo2* pCopyImageInfo + + + + void vkCmdBlitImage2 + VkCommandBuffer commandBuffer + const VkBlitImageInfo2* pBlitImageInfo + + + + void vkCmdCopyBufferToImage2 + VkCommandBuffer commandBuffer + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo + + + + void vkCmdCopyImageToBuffer2 + VkCommandBuffer commandBuffer + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo + + + + void vkCmdResolveImage2 + VkCommandBuffer commandBuffer + const VkResolveImageInfo2* pResolveImageInfo + + + + void vkCmdRefreshObjectsKHR + VkCommandBuffer commandBuffer + const VkRefreshObjectListKHR* pRefreshObjects + + + VkResult vkGetPhysicalDeviceRefreshableObjectTypesKHR + VkPhysicalDevice physicalDevice + uint32_t* pRefreshableObjectTypeCount + VkObjectType* pRefreshableObjectTypes + + + void vkCmdSetFragmentShadingRateKHR + VkCommandBuffer commandBuffer + const VkExtent2D* pFragmentSize + const VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + VkResult vkGetPhysicalDeviceFragmentShadingRatesKHR + VkPhysicalDevice physicalDevice + uint32_t* pFragmentShadingRateCount + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates + + + void vkCmdSetFragmentShadingRateEnumNV + VkCommandBuffer commandBuffer + VkFragmentShadingRateNV shadingRate + const VkFragmentShadingRateCombinerOpKHR combinerOps[2] + + + void vkGetAccelerationStructureBuildSizesKHR + VkDevice device + VkAccelerationStructureBuildTypeKHR buildType + const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo + const uint32_t* pMaxPrimitiveCounts + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo + + + void vkCmdSetVertexInputEXT + VkCommandBuffer commandBuffer + uint32_t vertexBindingDescriptionCount + const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions + uint32_t vertexAttributeDescriptionCount + const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions + + + void vkCmdSetColorWriteEnableEXT + VkCommandBuffer commandBuffer + uint32_t attachmentCount + const VkBool32* pColorWriteEnables + + + void vkCmdSetEvent2 + VkCommandBuffer commandBuffer + VkEvent event + const VkDependencyInfo* pDependencyInfo + + + + void vkCmdResetEvent2 + VkCommandBuffer commandBuffer + VkEvent event + VkPipelineStageFlags2 stageMask + + + + void vkCmdWaitEvents2 + VkCommandBuffer commandBuffer + uint32_t eventCount + const VkEvent* pEvents + const VkDependencyInfo* pDependencyInfos + + + + void vkCmdPipelineBarrier2 + VkCommandBuffer commandBuffer + const VkDependencyInfo* pDependencyInfo + + + + VkResult vkQueueSubmit2 + VkQueue queue + uint32_t submitCount + const VkSubmitInfo2* pSubmits + VkFence fence + + + + void vkCmdWriteTimestamp2 + VkCommandBuffer commandBuffer + VkPipelineStageFlags2 stage + VkQueryPool queryPool + uint32_t query + + + + void vkCmdWriteBufferMarker2AMD + VkCommandBuffer commandBuffer + VkPipelineStageFlags2 stage + VkBuffer dstBuffer + VkDeviceSize dstOffset + uint32_t marker + + + void vkGetQueueCheckpointData2NV + VkQueue queue + uint32_t* pCheckpointDataCount + VkCheckpointData2NV* pCheckpointData + + + VkResult vkCopyMemoryToImage + VkDevice device + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo + + + + VkResult vkCopyImageToMemory + VkDevice device + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo + + + + VkResult vkCopyImageToImage + VkDevice device + const VkCopyImageToImageInfo* pCopyImageToImageInfo + + + + VkResult vkTransitionImageLayout + VkDevice device + uint32_t transitionCount + const VkHostImageLayoutTransitionInfo* pTransitions + + + + void vkGetCommandPoolMemoryConsumption + VkDevice device + VkCommandPool commandPool + VkCommandBuffer commandBuffer + VkCommandPoolMemoryConsumption* pConsumption + + + VkResult vkGetPhysicalDeviceVideoCapabilitiesKHR + VkPhysicalDevice physicalDevice + const VkVideoProfileInfoKHR* pVideoProfile + VkVideoCapabilitiesKHR* pCapabilities + + + VkResult vkGetPhysicalDeviceVideoFormatPropertiesKHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo + uint32_t* pVideoFormatPropertyCount + VkVideoFormatPropertiesKHR* pVideoFormatProperties + + + VkResult vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties + + + VkResult vkCreateVideoSessionKHR + VkDevice device + const VkVideoSessionCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkVideoSessionKHR* pVideoSession + + + void vkDestroyVideoSessionKHR + VkDevice device + VkVideoSessionKHR videoSession + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateVideoSessionParametersKHR + VkDevice device + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkVideoSessionParametersKHR* pVideoSessionParameters + + + VkResult vkUpdateVideoSessionParametersKHR + VkDevice device + VkVideoSessionParametersKHR videoSessionParameters + const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo + + + VkResult vkGetEncodedVideoSessionParametersKHR + VkDevice device + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo + VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo + size_t* pDataSize + void* pData + + + void vkDestroyVideoSessionParametersKHR + VkDevice device + VkVideoSessionParametersKHR videoSessionParameters + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetVideoSessionMemoryRequirementsKHR + VkDevice device + VkVideoSessionKHR videoSession + uint32_t* pMemoryRequirementsCount + VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements + + + VkResult vkBindVideoSessionMemoryKHR + VkDevice device + VkVideoSessionKHR videoSession + uint32_t bindSessionMemoryInfoCount + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos + + + void vkCmdDecodeVideoKHR + VkCommandBuffer commandBuffer + const VkVideoDecodeInfoKHR* pDecodeInfo + + + void vkCmdBeginVideoCodingKHR + VkCommandBuffer commandBuffer + const VkVideoBeginCodingInfoKHR* pBeginInfo + + + void vkCmdControlVideoCodingKHR + VkCommandBuffer commandBuffer + const VkVideoCodingControlInfoKHR* pCodingControlInfo + + + void vkCmdEndVideoCodingKHR + VkCommandBuffer commandBuffer + const VkVideoEndCodingInfoKHR* pEndCodingInfo + + + void vkCmdEncodeVideoKHR + VkCommandBuffer commandBuffer + const VkVideoEncodeInfoKHR* pEncodeInfo + + + void vkCmdDecompressMemoryNV + VkCommandBuffer commandBuffer + uint32_t decompressRegionCount + const VkDecompressMemoryRegionNV* pDecompressMemoryRegions + + + void vkCmdDecompressMemoryIndirectCountNV + VkCommandBuffer commandBuffer + VkDeviceAddress indirectCommandsAddress + VkDeviceAddress indirectCommandsCountAddress + uint32_t stride + + + void vkGetPartitionedAccelerationStructuresBuildSizesNV + VkDevice device + const VkPartitionedAccelerationStructureInstancesInputNV* pInfo + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo + + + void vkCmdBuildPartitionedAccelerationStructuresNV + VkCommandBuffer commandBuffer + const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo + + + VkResult vkCreateCuModuleNVX + VkDevice device + const VkCuModuleCreateInfoNVX* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCuModuleNVX* pModule + + + VkResult vkCreateCuFunctionNVX + VkDevice device + const VkCuFunctionCreateInfoNVX* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCuFunctionNVX* pFunction + + + void vkDestroyCuModuleNVX + VkDevice device + VkCuModuleNVX module + const VkAllocationCallbacks* pAllocator + + + void vkDestroyCuFunctionNVX + VkDevice device + VkCuFunctionNVX function + const VkAllocationCallbacks* pAllocator + + + void vkCmdCuLaunchKernelNVX + VkCommandBuffer commandBuffer + const VkCuLaunchInfoNVX* pLaunchInfo + + + void vkGetDescriptorSetLayoutSizeEXT + VkDevice device + VkDescriptorSetLayout layout + VkDeviceSize* pLayoutSizeInBytes + + + void vkGetDescriptorSetLayoutBindingOffsetEXT + VkDevice device + VkDescriptorSetLayout layout + uint32_t binding + VkDeviceSize* pOffset + + + void vkGetDescriptorEXT + VkDevice device + const VkDescriptorGetInfoEXT* pDescriptorInfo + size_t dataSize + void* pDescriptor + + + void vkCmdBindDescriptorBuffersEXT + VkCommandBuffer commandBuffer + uint32_t bufferCount + const VkDescriptorBufferBindingInfoEXT* pBindingInfos + + + void vkCmdSetDescriptorBufferOffsetsEXT + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t firstSet + uint32_t setCount + const uint32_t* pBufferIndices + const VkDeviceSize* pOffsets + + + void vkCmdBindDescriptorBufferEmbeddedSamplersEXT + VkCommandBuffer commandBuffer + VkPipelineBindPoint pipelineBindPoint + VkPipelineLayout layout + uint32_t set + + + VkResult vkGetBufferOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkBufferCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetImageOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkImageCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetImageViewOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkImageViewCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetSamplerOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkSamplerCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + VkResult vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT + VkDevice device + const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo + void* pData + + + void vkSetDeviceMemoryPriorityEXT + VkDevice device + VkDeviceMemory memory + float priority + + + VkResult vkAcquireDrmDisplayEXT + VkPhysicalDevice physicalDevice + int32_t drmFd + VkDisplayKHR display + + + VkResult vkGetDrmDisplayEXT + VkPhysicalDevice physicalDevice + int32_t drmFd + uint32_t connectorId + VkDisplayKHR* display + + + VkResult vkWaitForPresent2KHR + VkDevice device + VkSwapchainKHR swapchain + const VkPresentWait2InfoKHR* pPresentWait2Info + + + VkResult vkWaitForPresentKHR + VkDevice device + VkSwapchainKHR swapchain + uint64_t presentId + uint64_t timeout + + + VkResult vkCreateBufferCollectionFUCHSIA + VkDevice device + const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkBufferCollectionFUCHSIA* pCollection + + + VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo + + + VkResult vkSetBufferCollectionImageConstraintsFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo + + + void vkDestroyBufferCollectionFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetBufferCollectionPropertiesFUCHSIA + VkDevice device + VkBufferCollectionFUCHSIA collection + VkBufferCollectionPropertiesFUCHSIA* pProperties + + + VkResult vkCreateCudaModuleNV + VkDevice device + const VkCudaModuleCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCudaModuleNV* pModule + + + VkResult vkGetCudaModuleCacheNV + VkDevice device + VkCudaModuleNV module + size_t* pCacheSize + void* pCacheData + + + VkResult vkCreateCudaFunctionNV + VkDevice device + const VkCudaFunctionCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkCudaFunctionNV* pFunction + + + void vkDestroyCudaModuleNV + VkDevice device + VkCudaModuleNV module + const VkAllocationCallbacks* pAllocator + + + void vkDestroyCudaFunctionNV + VkDevice device + VkCudaFunctionNV function + const VkAllocationCallbacks* pAllocator + + + void vkCmdCudaLaunchKernelNV + VkCommandBuffer commandBuffer + const VkCudaLaunchInfoNV* pLaunchInfo + + + void vkCmdBeginRendering + VkCommandBuffer commandBuffer + const VkRenderingInfo* pRenderingInfo + + + + void vkCmdEndRendering + VkCommandBuffer commandBuffer + + + void vkCmdEndRendering2EXT + VkCommandBuffer commandBuffer + const VkRenderingEndInfoEXT* pRenderingEndInfo + + + + + + void vkGetDescriptorSetLayoutHostMappingInfoVALVE + VkDevice device + const VkDescriptorSetBindingReferenceVALVE* pBindingReference + VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping + + + void vkGetDescriptorSetHostMappingVALVE + VkDevice device + VkDescriptorSet descriptorSet + void** ppData + + + VkResult vkCreateMicromapEXT + VkDevice device + const VkMicromapCreateInfoEXT* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkMicromapEXT* pMicromap + + + void vkCmdBuildMicromapsEXT + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkMicromapBuildInfoEXT* pInfos + + + VkResult vkBuildMicromapsEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + uint32_t infoCount + const VkMicromapBuildInfoEXT* pInfos + + + void vkDestroyMicromapEXT + VkDevice device + VkMicromapEXT micromap + const VkAllocationCallbacks* pAllocator + + + void vkCmdCopyMicromapEXT + VkCommandBuffer commandBuffer + const VkCopyMicromapInfoEXT* pInfo + + + VkResult vkCopyMicromapEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMicromapInfoEXT* pInfo + + + void vkCmdCopyMicromapToMemoryEXT + VkCommandBuffer commandBuffer + const VkCopyMicromapToMemoryInfoEXT* pInfo + + + VkResult vkCopyMicromapToMemoryEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMicromapToMemoryInfoEXT* pInfo + + + void vkCmdCopyMemoryToMicromapEXT + VkCommandBuffer commandBuffer + const VkCopyMemoryToMicromapInfoEXT* pInfo + + + VkResult vkCopyMemoryToMicromapEXT + VkDevice device + VkDeferredOperationKHR deferredOperation + const VkCopyMemoryToMicromapInfoEXT* pInfo + + + void vkCmdWriteMicromapsPropertiesEXT + VkCommandBuffer commandBuffer + uint32_t micromapCount + const VkMicromapEXT* pMicromaps + VkQueryType queryType + VkQueryPool queryPool + uint32_t firstQuery + + + VkResult vkWriteMicromapsPropertiesEXT + VkDevice device + uint32_t micromapCount + const VkMicromapEXT* pMicromaps + VkQueryType queryType + size_t dataSize + void* pData + size_t stride + + + void vkGetDeviceMicromapCompatibilityEXT + VkDevice device + const VkMicromapVersionInfoEXT* pVersionInfo + VkAccelerationStructureCompatibilityKHR* pCompatibility + + + void vkGetMicromapBuildSizesEXT + VkDevice device + VkAccelerationStructureBuildTypeKHR buildType + const VkMicromapBuildInfoEXT* pBuildInfo + VkMicromapBuildSizesInfoEXT* pSizeInfo + + + void vkGetShaderModuleIdentifierEXT + VkDevice device + VkShaderModule shaderModule + VkShaderModuleIdentifierEXT* pIdentifier + + + void vkGetShaderModuleCreateInfoIdentifierEXT + VkDevice device + const VkShaderModuleCreateInfo* pCreateInfo + VkShaderModuleIdentifierEXT* pIdentifier + + + void vkGetImageSubresourceLayout2 + VkDevice device + VkImage image + const VkImageSubresource2* pSubresource + VkSubresourceLayout2* pLayout + + + + + VkResult vkGetPipelinePropertiesEXT + VkDevice device + const VkPipelineInfoEXT* pPipelineInfo + VkBaseOutStructure* pPipelineProperties + + + void vkExportMetalObjectsEXT + VkDevice device + VkExportMetalObjectsInfoEXT* pMetalObjectsInfo + + + void vkCmdBindTileMemoryQCOM + VkCommandBuffer commandBuffer + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo + + + VkResult vkGetFramebufferTilePropertiesQCOM + VkDevice device + VkFramebuffer framebuffer + uint32_t* pPropertiesCount + VkTilePropertiesQCOM* pProperties + + + VkResult vkGetDynamicRenderingTilePropertiesQCOM + VkDevice device + const VkRenderingInfo* pRenderingInfo + VkTilePropertiesQCOM* pProperties + + + VkResult vkGetPhysicalDeviceOpticalFlowImageFormatsNV + VkPhysicalDevice physicalDevice + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo + uint32_t* pFormatCount + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties + + + VkResult vkCreateOpticalFlowSessionNV + VkDevice device + const VkOpticalFlowSessionCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkOpticalFlowSessionNV* pSession + + + void vkDestroyOpticalFlowSessionNV + VkDevice device + VkOpticalFlowSessionNV session + const VkAllocationCallbacks* pAllocator + + + VkResult vkBindOpticalFlowSessionImageNV + VkDevice device + VkOpticalFlowSessionNV session + VkOpticalFlowSessionBindingPointNV bindingPoint + VkImageView view + VkImageLayout layout + + + void vkCmdOpticalFlowExecuteNV + VkCommandBuffer commandBuffer + VkOpticalFlowSessionNV session + const VkOpticalFlowExecuteInfoNV* pExecuteInfo + + + VkResult vkGetDeviceFaultInfoEXT + VkDevice device + VkDeviceFaultCountsEXT* pFaultCounts + VkDeviceFaultInfoEXT* pFaultInfo + + + void vkCmdSetDepthBias2EXT + VkCommandBuffer commandBuffer + const VkDepthBiasInfoEXT* pDepthBiasInfo + + + VkResult vkReleaseSwapchainImagesKHR + VkDevice device + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo + + + + void vkGetDeviceImageSubresourceLayout + VkDevice device + const VkDeviceImageSubresourceInfo* pInfo + VkSubresourceLayout2* pLayout + + + + VkResult vkMapMemory2 + VkDevice device + const VkMemoryMapInfo* pMemoryMapInfo + void** ppData + + + + VkResult vkUnmapMemory2 + VkDevice device + const VkMemoryUnmapInfo* pMemoryUnmapInfo + + + + VkResult vkCreateShadersEXT + VkDevice device + uint32_t createInfoCount + const VkShaderCreateInfoEXT* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkShaderEXT* pShaders + + + void vkDestroyShaderEXT + VkDevice device + VkShaderEXT shader + const VkAllocationCallbacks* pAllocator + + + VkResult vkGetShaderBinaryDataEXT + VkDevice device + VkShaderEXT shader + size_t* pDataSize + void* pData + + + void vkCmdBindShadersEXT + VkCommandBuffer commandBuffer + uint32_t stageCount + const VkShaderStageFlagBits* pStages + const VkShaderEXT* pShaders + + + VkResult vkGetScreenBufferPropertiesQNX + VkDevice device + const struct _screen_buffer* buffer + VkScreenBufferPropertiesQNX* pProperties + + + VkResult vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeMatrixPropertiesKHR* pProperties + + + VkResult vkGetExecutionGraphPipelineScratchSizeAMDX + VkDevice device + VkPipeline executionGraph + VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo + + + VkResult vkGetExecutionGraphPipelineNodeIndexAMDX + VkDevice device + VkPipeline executionGraph + const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo + uint32_t* pNodeIndex + + + VkResult vkCreateExecutionGraphPipelinesAMDX + VkDevice device + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + void vkCmdInitializeGraphScratchMemoryAMDX + VkCommandBuffer commandBuffer + VkPipeline executionGraph + VkDeviceAddress scratch + VkDeviceSize scratchSize + + + void vkCmdDispatchGraphAMDX + VkCommandBuffer commandBuffer + VkDeviceAddress scratch + VkDeviceSize scratchSize + const VkDispatchGraphCountInfoAMDX* pCountInfo + + + void vkCmdDispatchGraphIndirectAMDX + VkCommandBuffer commandBuffer + VkDeviceAddress scratch + VkDeviceSize scratchSize + const VkDispatchGraphCountInfoAMDX* pCountInfo + + + void vkCmdDispatchGraphIndirectCountAMDX + VkCommandBuffer commandBuffer + VkDeviceAddress scratch + VkDeviceSize scratchSize + VkDeviceAddress countInfo + + + void vkCmdBindDescriptorSets2 + VkCommandBuffer commandBuffer + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo + + + + void vkCmdPushConstants2 + VkCommandBuffer commandBuffer + const VkPushConstantsInfo* pPushConstantsInfo + + + + void vkCmdPushDescriptorSet2 + VkCommandBuffer commandBuffer + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo + + + + void vkCmdPushDescriptorSetWithTemplate2 + VkCommandBuffer commandBuffer + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo + + + + void vkCmdSetDescriptorBufferOffsets2EXT + VkCommandBuffer commandBuffer + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo + + + void vkCmdBindDescriptorBufferEmbeddedSamplers2EXT + VkCommandBuffer commandBuffer + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo + + + VkResult vkSetLatencySleepModeNV + VkDevice device + VkSwapchainKHR swapchain + const VkLatencySleepModeInfoNV* pSleepModeInfo + + + VkResult vkLatencySleepNV + VkDevice device + VkSwapchainKHR swapchain + const VkLatencySleepInfoNV* pSleepInfo + + + void vkSetLatencyMarkerNV + VkDevice device + VkSwapchainKHR swapchain + const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo + + + void vkGetLatencyTimingsNV + VkDevice device + VkSwapchainKHR swapchain + VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo + + + void vkQueueNotifyOutOfBandNV + VkQueue queue + const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo + + + void vkCmdSetRenderingAttachmentLocations + VkCommandBuffer commandBuffer + const VkRenderingAttachmentLocationInfo* pLocationInfo + + + + void vkCmdSetRenderingInputAttachmentIndices + VkCommandBuffer commandBuffer + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo + + + + void vkCmdSetDepthClampRangeEXT + VkCommandBuffer commandBuffer + VkDepthClampModeEXT depthClampMode + const VkDepthClampRangeEXT* pDepthClampRange + + + VkResult vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties + + + VkResult vkGetMemoryMetalHandleEXT + VkDevice device + const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo + void** pHandle + + + VkResult vkGetMemoryMetalHandlePropertiesEXT + VkDevice device + VkExternalMemoryHandleTypeFlagBits handleType + const void* pHandle + VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties + + + VkResult vkGetPhysicalDeviceCooperativeVectorPropertiesNV + VkPhysicalDevice physicalDevice + uint32_t* pPropertyCount + VkCooperativeVectorPropertiesNV* pProperties + + + VkResult vkConvertCooperativeVectorMatrixNV + VkDevice device + const VkConvertCooperativeVectorMatrixInfoNV* pInfo + + + void vkCmdConvertCooperativeVectorMatrixNV + VkCommandBuffer commandBuffer + uint32_t infoCount + const VkConvertCooperativeVectorMatrixInfoNV* pInfos + + + void vkCmdDispatchTileQCOM + VkCommandBuffer commandBuffer + const VkDispatchTileInfoQCOM* pDispatchTileInfo + + + void vkCmdBeginPerTileExecutionQCOM + VkCommandBuffer commandBuffer + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo + + + void vkCmdEndPerTileExecutionQCOM + VkCommandBuffer commandBuffer + const VkPerTileEndInfoQCOM* pPerTileEndInfo + + + VkResult vkCreateExternalComputeQueueNV + VkDevice device + const VkExternalComputeQueueCreateInfoNV* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkExternalComputeQueueNV* pExternalQueue + + + void vkDestroyExternalComputeQueueNV + VkDevice device + VkExternalComputeQueueNV externalQueue + const VkAllocationCallbacks* pAllocator + + + void vkGetExternalComputeQueueDataNV + VkExternalComputeQueueNV externalQueue + VkExternalComputeQueueDataParamsNV* params + void* pData + + + VkResult vkCreateTensorARM + VkDevice device + const VkTensorCreateInfoARM* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkTensorARM* pTensor + + + void vkDestroyTensorARM + VkDevice device + VkTensorARM tensor + const VkAllocationCallbacks* pAllocator + + + VkResult vkCreateTensorViewARM + VkDevice device + const VkTensorViewCreateInfoARM* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkTensorViewARM* pView + + + void vkDestroyTensorViewARM + VkDevice device + VkTensorViewARM tensorView + const VkAllocationCallbacks* pAllocator + + + void vkGetTensorMemoryRequirementsARM + VkDevice device + const VkTensorMemoryRequirementsInfoARM* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkBindTensorMemoryARM + VkDevice device + uint32_t bindInfoCount + const VkBindTensorMemoryInfoARM* pBindInfos + + + void vkGetDeviceTensorMemoryRequirementsARM + VkDevice device + const VkDeviceTensorMemoryRequirementsARM* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + void vkCmdCopyTensorARM + VkCommandBuffer commandBuffer + const VkCopyTensorInfoARM* pCopyTensorInfo + + + VkResult vkGetTensorOpaqueCaptureDescriptorDataARM + VkDevice device + const VkTensorCaptureDescriptorDataInfoARM* pInfo + void* pData + + + VkResult vkGetTensorViewOpaqueCaptureDescriptorDataARM + VkDevice device + const VkTensorViewCaptureDescriptorDataInfoARM* pInfo + void* pData + + + void vkGetPhysicalDeviceExternalTensorPropertiesARM + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo + VkExternalTensorPropertiesARM* pExternalTensorProperties + + + VkResult vkCreateDataGraphPipelinesARM + VkDevice device + VkDeferredOperationKHR deferredOperation + VkPipelineCache pipelineCache + uint32_t createInfoCount + const VkDataGraphPipelineCreateInfoARM* pCreateInfos + const VkAllocationCallbacks* pAllocator + VkPipeline* pPipelines + + + VkResult vkCreateDataGraphPipelineSessionARM + VkDevice device + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo + const VkAllocationCallbacks* pAllocator + VkDataGraphPipelineSessionARM* pSession + + + VkResult vkGetDataGraphPipelineSessionBindPointRequirementsARM + VkDevice device + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo + uint32_t* pBindPointRequirementCount + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements + + + void vkGetDataGraphPipelineSessionMemoryRequirementsARM + VkDevice device + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo + VkMemoryRequirements2* pMemoryRequirements + + + VkResult vkBindDataGraphPipelineSessionMemoryARM + VkDevice device + uint32_t bindInfoCount + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos + + + void vkDestroyDataGraphPipelineSessionARM + VkDevice device + VkDataGraphPipelineSessionARM session + const VkAllocationCallbacks* pAllocator + + + void vkCmdDispatchDataGraphARM + VkCommandBuffer commandBuffer + VkDataGraphPipelineSessionARM session + const VkDataGraphPipelineDispatchInfoARM* pInfo + + + VkResult vkGetDataGraphPipelineAvailablePropertiesARM + VkDevice device + const VkDataGraphPipelineInfoARM* pPipelineInfo + uint32_t* pPropertiesCount + VkDataGraphPipelinePropertyARM* pProperties + + + VkResult vkGetDataGraphPipelinePropertiesARM + VkDevice device + const VkDataGraphPipelineInfoARM* pPipelineInfo + uint32_t propertiesCount + VkDataGraphPipelinePropertyQueryResultARM* pProperties + + + VkResult vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM + VkPhysicalDevice physicalDevice + uint32_t queueFamilyIndex + uint32_t* pQueueFamilyDataGraphPropertyCount + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties + + + void vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM + VkPhysicalDevice physicalDevice + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + offset 1 reserved for the old VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX enum + offset 2 reserved for the old VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX enum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Additional dependent types / tokens extending enumerants, not explicitly mentioned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Additional dependent types / tokens extending enumerants, not explicitly mentioned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This duplicates definitions in VK_KHR_device_group below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VK_ANDROID_native_buffer is used between the Android Vulkan loader and drivers to implement the WSI extensions. It is not exposed to applications and uses types that are not part of Android's stable public API, so it is left disabled to keep it out of the standard Vulkan headers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This duplicates definitions in other extensions, below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + enum offset=0 was mistakenly used for the 1.1 core enum + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES + (value=1000094000). Fortunately, no conflict resulted. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This extension requires buffer_device_address functionality. + VK_EXT_buffer_device_address is also acceptable, but since it is deprecated the KHR version is preferred. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These enums are present only to inform downstream + consumers like KTX2. There is no actual Vulkan extension + corresponding to the enums. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT and + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT + were not promoted to Vulkan 1.3. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VkPhysicalDevice4444FormatsFeaturesEXT and + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT + were not promoted to Vulkan 1.3. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NV internal use only + + + + + + + + + + + + + + + + + + + + + + + + + + + NV internal use only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fragment shader stage is added by the VK_EXT_shader_tile_image extension + + + + + + + Fragment shader stage is added by the VK_EXT_shader_tile_image extension + + + + + + + + + + + + + + + + + + + TODO/Suggestion. Introduce 'synclist' (could be a different name) element + that specifies the list of stages, accesses, etc. This list can be used by + 'syncaccess' or 'syncstage' elements. For example, 'syncsupport' in addition to the + 'stage' attribute can support 'list' attribute to reference 'synclist'. + We can have the lists defined for ALL stages and it can be shared between MEMORY_READ + and MEMORY_WRITE accesses. Similarly, ALL shader stages list is often used. This proposal + is a way to fix duplication problem. When new stage is added multiple places needs to be + updated. It is potential source of bugs. The expectation such setup will produce more + robust system and also more simple structure to review and validate. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT + VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT + VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT + VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT + VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT + VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT + VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR + VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT + VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT + VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT + VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT + VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR + VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT + VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT + VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT + VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT + VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT + VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT + + + VK_PIPELINE_STAGE_2_TRANSFER_BIT + + + VK_PIPELINE_STAGE_2_HOST_BIT + + + VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI + + + VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT + + + VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR + + + VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR + + + VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT + + + VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT + VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR + + + VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR + + + VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR + + + VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV + + + VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV + + + VK_PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-headers/source/registry/vkconventions.py b/local/recipes/libs/vulkan-headers/source/registry/vkconventions.py new file mode 100755 index 0000000000..ccde698cee --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/vkconventions.py @@ -0,0 +1,314 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2013-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +# Working-group-specific style conventions, +# used in generation. + +import re +import os + +from spec_tools.conventions import ConventionsBase + +# Modified from default implementation - see category_requires_validation() below +CATEGORIES_REQUIRING_VALIDATION = set(('handle', 'enum', 'bitmask')) + +# Tokenize into "words" for structure types, approximately per spec "Implicit Valid Usage" section 2.7.2 +# This first set is for things we recognize explicitly as words, +# as exceptions to the general regex. +# Ideally these would be listed in the spec as exceptions, as OpenXR does. +SPECIAL_WORDS = set(( + '16Bit', # VkPhysicalDevice16BitStorageFeatures + '2D', # VkPhysicalDeviceImage2DViewOf3DFeaturesEXT + '3D', # VkPhysicalDeviceImage2DViewOf3DFeaturesEXT + '8Bit', # VkPhysicalDevice8BitStorageFeaturesKHR + 'AABB', # VkGeometryAABBNV + 'ASTC', # VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT + 'D3D12', # VkD3D12FenceSubmitInfoKHR + 'Float16', # VkPhysicalDeviceShaderFloat16Int8FeaturesKHR + 'Bfloat16', # VkPhysicalDeviceShaderBfloat16FeaturesKHR + 'Float8', # VkPhysicalDeviceShaderFloat8FeaturesEXT + 'ImagePipe', # VkImagePipeSurfaceCreateInfoFUCHSIA + 'Int64', # VkPhysicalDeviceShaderAtomicInt64FeaturesKHR + 'Int8', # VkPhysicalDeviceShaderFloat16Int8FeaturesKHR + 'MacOS', # VkMacOSSurfaceCreateInfoMVK + 'RGBA10X6', # VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT + 'Uint8', # VkPhysicalDeviceIndexTypeUint8FeaturesEXT + 'Win32', # VkWin32SurfaceCreateInfoKHR +)) +# A regex to match any of the SPECIAL_WORDS +EXCEPTION_PATTERN = r'(?P{})'.format( + '|'.join(f'({re.escape(w)})' for w in SPECIAL_WORDS)) +MAIN_RE = re.compile( + # the negative lookahead is to prevent the all-caps pattern from being too greedy. + r'({}|([0-9]+)|([A-Z][a-z]+)|([A-Z][A-Z]*(?![a-z])))'.format(EXCEPTION_PATTERN)) + + +class VulkanConventions(ConventionsBase): + @property + def null(self): + """Preferred spelling of NULL.""" + return '`NULL`' + + def formatVersion(self, name, apivariant, major, minor): + """Mark up an API version name as a link in the spec.""" + version = f'{major}.{minor}' + if apivariant == 'VKSC': + # Vulkan SC has a different anchor pattern for version appendices + if version == '1.0': + return 'Vulkan SC 1.0' + else: + return f'<>' + else: + return f'<>' + + def formatExtension(self, name): + """Mark up an extension name as a link in the spec.""" + return f'apiext:{name}' + + @property + def struct_macro(self): + """Get the appropriate format macro for a structure. + + Primarily affects generated valid usage statements. + """ + + return 'slink:' + + @property + def constFlagBits(self): + """Returns True if static const flag bits should be generated, False if an enumerated type should be generated.""" + return False + + @property + def structtype_member_name(self): + """Return name of the structure type member""" + return 'sType' + + @property + def nextpointer_member_name(self): + """Return name of the structure pointer chain member""" + return 'pNext' + + @property + def valid_pointer_prefix(self): + """Return prefix to pointers which must themselves be valid""" + return 'valid' + + def is_structure_type_member(self, paramtype, paramname): + """Determine if member type and name match the structure type member.""" + return paramtype == 'VkStructureType' and paramname == self.structtype_member_name + + def is_nextpointer_member(self, paramtype, paramname): + """Determine if member type and name match the next pointer chain member.""" + return paramtype == 'void' and paramname == self.nextpointer_member_name + + def generate_structure_type_from_name(self, structname): + """Generate a structure type name, like VK_STRUCTURE_TYPE_CREATE_INSTANCE_INFO""" + + structure_type_parts = [] + # Tokenize into "words" + for elem in MAIN_RE.findall(structname): + word = elem[0] + if word == 'Vk': + structure_type_parts.append('VK_STRUCTURE_TYPE') + else: + structure_type_parts.append(word.upper()) + name = '_'.join(structure_type_parts) + + # The simple-minded rules need modification for some structure names + subpats = [ + [ r'_H_(26[45])_', r'_H\1_' ], + [ r'_VP_9_', r'_VP9_' ], + [ r'_AV_1_', r'_AV1_' ], + [ r'_VULKAN_([0-9])([0-9])_', r'_VULKAN_\1_\2_' ], + [ r'_VULKAN_SC_([0-9])([0-9])_',r'_VULKAN_SC_\1_\2_' ], + [ r'_DIRECT_FB_', r'_DIRECTFB_' ], + [ r'_VULKAN_SC_10', r'_VULKAN_SC_1_0' ], + + ] + + for subpat in subpats: + name = re.sub(subpat[0], subpat[1], name) + return name + + @property + def warning_comment(self): + """Return warning comment to be placed in header of generated Asciidoctor files""" + return '// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry' + + @property + def file_suffix(self): + """Return suffix of generated Asciidoctor files""" + return '.adoc' + + def api_name(self, spectype='api'): + """Return API or specification name for citations in ref pages.ref + pages should link to for + + spectype is the spec this refpage is for: 'api' is the Vulkan API + Specification. Defaults to 'api'. If an unrecognized spectype is + given, returns None. + """ + if spectype == 'api' or spectype is None: + return 'Vulkan' + else: + return None + + @property + def api_prefix(self): + """Return API token prefix""" + return 'VK_' + + @property + def write_contacts(self): + """Return whether contact list should be written to extension appendices""" + return True + + @property + def write_refpage_include(self): + """Return whether refpage include should be written to extension appendices""" + return True + + @property + def member_used_for_unique_vuid(self): + """Return the member name used in the VUID-...-...-unique ID.""" + return self.structtype_member_name + + def is_externsync_command(self, protoname): + """Returns True if the protoname element is an API command requiring + external synchronization + """ + return protoname is not None and 'vkCmd' in protoname + + def is_api_name(self, name): + """Returns True if name is in the reserved API namespace. + For Vulkan, these are names with a case-insensitive 'vk' prefix, or + a 'PFN_vk' function pointer type prefix. + """ + return name[0:2].lower() == 'vk' or name.startswith('PFN_vk') + + def specURL(self, spectype='api'): + """Return public registry URL which ref pages should link to for the + current all-extensions HTML specification, so xrefs in the + asciidoc source that are not to ref pages can link into it + instead. N.b. this may need to change on a per-refpage basis if + there are multiple documents involved. + """ + return 'https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html' + + @property + def xml_api_name(self): + """Return the name used in the default API XML registry for the default API""" + return 'vulkan' + + @property + def registry_path(self): + """Return relpath to the default API XML registry in this project.""" + return 'xml/vk.xml' + + @property + def specification_path(self): + """Return relpath to the Asciidoctor specification sources in this project.""" + return '{generated}/meta' + + @property + def special_use_section_anchor(self): + """Return asciidoctor anchor name in the API Specification of the + section describing extension special uses in detail.""" + return 'extendingvulkan-compatibility-specialuse' + + @property + def extension_index_prefixes(self): + """Return a list of extension prefixes used to group extension refpages.""" + return ['VK_KHR', 'VK_EXT', 'VK'] + + @property + def unified_flag_refpages(self): + """Return True if Flags/FlagBits refpages are unified, False if + they are separate. + """ + return False + + @property + def spec_reflow_path(self): + """Return the path to the spec source folder to reflow""" + return os.getcwd() + + @property + def spec_no_reflow_dirs(self): + """Return a set of directories not to automatically descend into + when reflowing spec text + """ + return ('scripts', 'style') + + @property + def zero(self): + return '`0`' + + def category_requires_validation(self, category): + """Return True if the given type 'category' always requires validation. + + Overridden because Vulkan does not require "valid" text for basetype + in the spec right now.""" + return category in CATEGORIES_REQUIRING_VALIDATION + + @property + def should_skip_checking_codes(self): + """Return True if more than the basic validation of return codes should + be skipped for a command. + + Vulkan mostly relies on the validation layers rather than API + builtin error checking, so these checks are not appropriate. + + For example, passing in a VkFormat parameter will not potentially + generate a VK_ERROR_FORMAT_NOT_SUPPORTED code.""" + + return True + + def extension_file_path(self, name): + """Return file path to an extension appendix relative to a directory + containing all such appendices. + - name - extension name""" + + return f'{name}{self.file_suffix}' + + def valid_flag_bit(self, bitpos): + """Return True if bitpos is an allowed numeric bit position for + an API flag bit. + + Vulkan uses 32 bit Vk*Flags types, and assumes C compilers may + cause Vk*FlagBits values with bit 31 set to result in a 64 bit + enumerated type, so disallows such flags.""" + return bitpos >= 0 and bitpos < 31 + + @property + def extra_refpage_headers(self): + """Return any extra text to add to refpage headers.""" + return 'include::{config}/attribs.adoc[]' + + @property + def extra_refpage_body(self): + """Return any extra text (following the title) for generated + reference pages.""" + return 'include::{generated}/specattribs.adoc[]' + + +class VulkanSCConventions(VulkanConventions): + + def specURL(self, spectype='api'): + """Return public registry URL which ref pages should link to for the + current all-extensions HTML specification, so xrefs in the + asciidoc source that are not to ref pages can link into it + instead. N.b. this may need to change on a per-refpage basis if + there are multiple documents involved. + """ + return 'https://registry.khronos.org/vulkansc/specs/1.0-extensions/html/vkspec.html' + + @property + def xml_api_name(self): + """Return the name used in the default API XML registry for the default API""" + return 'vulkansc' + diff --git a/local/recipes/libs/vulkan-headers/source/registry/vulkan_object.py b/local/recipes/libs/vulkan-headers/source/registry/vulkan_object.py new file mode 100644 index 0000000000..b5b78cb1b7 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/registry/vulkan_object.py @@ -0,0 +1,494 @@ +#!/usr/bin/env python3 -i +# +# Copyright 2023-2025 The Khronos Group Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +from dataclasses import dataclass, field +from enum import IntFlag, Enum, auto + +@dataclass +class Extension: + """""" + name: str # ex) VK_KHR_SURFACE + nameString: str # marco with string, ex) VK_KHR_SURFACE_EXTENSION_NAME + specVersion: str # marco with string, ex) VK_KHR_SURFACE_SPEC_VERSION + + # Only one will be True, the other is False + instance: bool + device: bool + + depends: (str | None) + vendorTag: (str | None) # ex) EXT, KHR, etc + platform: (str | None) # ex) android + protect: (str | None) # ex) VK_USE_PLATFORM_ANDROID_KHR + provisional: bool + promotedTo: (str | None) # ex) VK_VERSION_1_1 + deprecatedBy: (str | None) + obsoletedBy: (str | None) + specialUse: list[str] + ratified: bool + + # These are here to allow for easy reverse lookups + # To prevent infinite recursion, other classes reference a string back to the Extension class + # Quotes allow us to forward declare the dataclass + handles: list['Handle'] = field(default_factory=list, init=False) + commands: list['Command'] = field(default_factory=list, init=False) + enums: list['Enum'] = field(default_factory=list, init=False) + bitmasks: list['Bitmask'] = field(default_factory=list, init=False) + flags: dict[str, list['Flags']] = field(default_factory=dict, init=False) + # Use the Enum name to see what fields are extended + enumFields: dict[str, list['EnumField']] = field(default_factory=dict, init=False) + # Use the Bitmask name to see what flag bits are added to it + flagBits: dict[str, list['Flag']] = field(default_factory=dict, init=False) + +@dataclass +class Version: + """ + which represents a version + This will NEVER be Version 1.0, since having 'no version' is same as being 1.0 + """ + name: str # ex) VK_VERSION_1_1 + nameString: str # ex) "VK_VERSION_1_1" (no marco, so has quotes) + nameApi: str # ex) VK_API_VERSION_1_1 + +@dataclass +class Deprecate: + """""" + link: (str | None) # Spec URL Anchor - ex) deprecation-dynamicrendering + version: (Version | None) + extensions: list[str] + +@dataclass +class Handle: + """ which represents a dispatch handle""" + name: str # ex) VkBuffer + aliases: list[str] # ex) ['VkSamplerYcbcrConversionKHR'] + + type: str # ex) VK_OBJECT_TYPE_BUFFER + protect: (str | None) # ex) VK_USE_PLATFORM_ANDROID_KHR + + parent: 'Handle' # Chain of parent handles, can be None + + # Only one will be True, the other is False + instance: bool + device: bool + + dispatchable: bool + + extensions: list[str] # All extensions that enable the handle + + def __lt__(self, other): + return self.name < other.name + +class ExternSync(Enum): + NONE = auto() # no externsync attribute + ALWAYS = auto() # externsync="true" + MAYBE = auto() # externsync="maybe" + SUBTYPE = auto() # externsync="param->member" + SUBTYPE_MAYBE = auto() # externsync="maybe:param->member" + +@dataclass +class Param: + """""" + name: str # ex) pCreateInfo, pAllocator, pBuffer + alias: str + + # the "base type" - will not preserve the 'const' or pointer info + # ex) void, uint32_t, VkFormat, VkBuffer, etc + type: str + # the "full type" - will be cDeclaration without the type name + # ex) const void*, uint32_t, const VkFormat, VkBuffer*, etc + # For arrays, this will only display the type, fixedSizeArray can be used to get the length + fullType: str + + noAutoValidity: bool + + const: bool # type contains 'const' + length: (str | None) # the known length of pointer, will never be 'null-terminated' + nullTerminated: bool # If a UTF-8 string, it will be null-terminated + pointer: bool # type contains a pointer (include 'PFN' function pointers) + # Used to list how large an array of the type is + # ex) lineWidthRange is ['2'] + # ex) memoryTypes is ['VK_MAX_MEMORY_TYPES'] + # ex) VkTransformMatrixKHR:matrix is ['3', '4'] + fixedSizeArray: list[str] + + optional: bool + optionalPointer: bool # if type contains a pointer, is the pointer value optional + + externSync: ExternSync + externSyncPointer: (str | None) # if type contains a pointer (externSync is SUBTYPE*), + # only a specific member is externally synchronized. + + # C string of member, example: + # - const void* pNext + # - VkFormat format + # - VkStructureType sType + cDeclaration: str + + def __lt__(self, other): + return self.name < other.name + +class Queues(IntFlag): + TRANSFER = auto() # VK_QUEUE_TRANSFER_BIT + GRAPHICS = auto() # VK_QUEUE_GRAPHICS_BIT + COMPUTE = auto() # VK_QUEUE_COMPUTE_BIT + PROTECTED = auto() # VK_QUEUE_PROTECTED_BIT + SPARSE_BINDING = auto() # VK_QUEUE_SPARSE_BINDING_BIT + OPTICAL_FLOW = auto() # VK_QUEUE_OPTICAL_FLOW_BIT_NV + DECODE = auto() # VK_QUEUE_VIDEO_DECODE_BIT_KHR + ENCODE = auto() # VK_QUEUE_VIDEO_ENCODE_BIT_KHR + DATA_GRAPH = auto() # VK_QUEUE_DATA_GRAPH_BIT_ARM + +class CommandScope(Enum): + NONE = auto() + INSIDE = auto() + OUTSIDE = auto() + BOTH = auto() + +@dataclass +class Command: + """""" + name: str # ex) vkCmdDraw + alias: (str | None) # Because commands are interfaces into layers/drivers, we need all command alias + protect: (str | None) # ex) 'VK_ENABLE_BETA_EXTENSIONS' + + extensions: list[str] # All extensions that enable the struct + version: (Version | None) # None if Version 1.0 + + returnType: str # ex) void, VkResult, etc + + params: list[Param] # Each parameter of the command + + # Only one will be True, the other is False + instance: bool + device: bool + + tasks: list[str] # ex) [ action, state, synchronization ] + queues: Queues # zero == No Queues found (represents restriction which queue type can be used) + allowNoQueues: bool # VK_KHR_maintenance9 allows some calls to be done with zero queues + successCodes: list[str] # ex) [ VK_SUCCESS, VK_INCOMPLETE ] + errorCodes: list[str] # ex) [ VK_ERROR_OUT_OF_HOST_MEMORY ] + + # Shows support if command can be in a primary and/or secondary command buffer + primary: bool + secondary: bool + + renderPass: CommandScope + videoCoding: CommandScope + + implicitExternSyncParams: list[str] + + deprecate: (Deprecate | None) + + # C prototype string - ex: + # VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( + # const VkInstanceCreateInfo* pCreateInfo, + # const VkAllocationCallbacks* pAllocator, + # VkInstance* pInstance); + cPrototype: str + + # function pointer typedef - ex: + # typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance) + # (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); + cFunctionPointer: str + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Member: + """""" + name: str # ex) sType, pNext, flags, size, usage + + # the "base type" - will not preserve the 'const' or pointer info + # ex) void, uint32_t, VkFormat, VkBuffer, etc + type: str + # the "full type" - will be cDeclaration without the type name + # ex) const void*, uint32_t, const VkFormat, VkBuffer*, etc + # For arrays, this will only display the type, fixedSizeArray can be used to get the length + fullType: str + + noAutoValidity: bool + limitType: (str | None) # ex) 'max', 'bitmask', 'bits', 'min,mul' + + const: bool # type contains 'const' + length: (str | None) # the known length of pointer, will never be 'null-terminated' + nullTerminated: bool # If a UTF-8 string, it will be null-terminated + pointer: bool # type contains a pointer (include 'PFN' function pointers) + # Used to list how large an array of the type is + # ex) lineWidthRange is ['2'] + # ex) memoryTypes is ['VK_MAX_MEMORY_TYPES'] + # ex) VkTransformMatrixKHR:matrix is ['3', '4'] + fixedSizeArray: list[str] + + optional: bool + optionalPointer: bool # if type contains a pointer, is the pointer value optional + + externSync: ExternSync + + # C string of member, example: + # - const void* pNext + # - VkFormat format + # - VkStructureType sType + cDeclaration: str + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Struct: + """ or """ + name: str # ex) VkImageSubresource2 + aliases: list[str] # ex) ['VkImageSubresource2KHR', 'VkImageSubresource2EXT'] + + extensions: list[str] # All extensions that enable the struct + version: (Version | None) # None if Version 1.0 + protect: (str | None) # ex) VK_ENABLE_BETA_EXTENSIONS + + members: list[Member] + + union: bool # Unions are just a subset of a Structs + returnedOnly: bool + + sType: (str | None) # ex) VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO + allowDuplicate: bool # can have a pNext point to itself + + # These use to be list['Struct'] but some circular loops occur and cause + # pydevd warnings and made debugging slow (30 seconds to index a Struct) + extends: list[str] # Struct names that this struct extends + extendedBy: list[str] # Struct names that can be extended by this struct + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class EnumField: + """ of type enum""" + name: str # ex) VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT + aliases: list[str] # ex) ['VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'] + + protect: (str | None) # ex) VK_ENABLE_BETA_EXTENSIONS + + negative: bool # True if negative values are allowed (ex. VkResult) + value: int + valueStr: str # value as shown in spec (ex. "0", "2", "1000267000", "0x00000004") + + # some fields are enabled from 2 extensions (ex) VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR) + extensions: list[str] # None if part of 1.0 core + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Enum: + """ of type enum""" + name: str # ex) VkLineRasterizationMode + aliases: list[str] # ex) ['VkLineRasterizationModeKHR', 'VkLineRasterizationModeEXT'] + + protect: (str | None) # ex) VK_ENABLE_BETA_EXTENSIONS + + bitWidth: int # 32 or 64 (currently all are 32, but field is to match with Bitmask) + returnedOnly: bool + + fields: list[EnumField] + + extensions: list[str] # None if part of 1.0 core + # Unique list of all extension that are involved in 'fields' (superset of 'extensions') + fieldExtensions: list[str] + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Flag: + """ of type bitmask""" + name: str # ex) VK_ACCESS_2_SHADER_READ_BIT + aliases: str # ex) ['VK_ACCESS_2_SHADER_READ_BIT_KHR'] + + protect: (str | None) # ex) VK_ENABLE_BETA_EXTENSIONS + + value: int + valueStr: str # value as shown in spec (ex. 0x00000000", "0x00000004", "0x0000000F", "0x800000000ULL") + multiBit: bool # if true, more than one bit is set (ex) VK_SHADER_STAGE_ALL_GRAPHICS) + zero: bool # if true, the value is zero (ex) VK_PIPELINE_STAGE_NONE) + + # some fields are enabled from 2 extensions (ex) VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT) + extensions: list[str] # None if part of 1.0 core + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Bitmask: + """ of type bitmask""" + name: str # ex) VkAccessFlagBits2 + aliases: list[str] # ex) ['VkAccessFlagBits2KHR'] + + flagName: str # ex) VkAccessFlags2 + protect: (str | None) # ex) VK_ENABLE_BETA_EXTENSIONS + + bitWidth: int # 32 or 64 + returnedOnly: bool + + flags: list[Flag] + + extensions: list[str] # None if part of 1.0 core + # Unique list of all extension that are involved in 'flag' (superset of 'extensions') + flagExtensions: list[str] + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Flags: + """ defining flags types""" + name: str # ex) VkAccessFlags2 + aliases: list[str] # ex) [`VkAccessFlags2KHR`] + + bitmaskName: (str | None) # ex) VkAccessFlagBits2 + protect: (str | None) # ex) VK_ENABLE_BETA_EXTENSIONS + + baseFlagsType: str # ex) VkFlags + bitWidth: int # 32 or 64 + returnedOnly: bool + + extensions: list[str] # None if part of 1.0 core + + def __lt__(self, other): + return self.name < other.name + +@dataclass +class Constant: + name: str # ex) VK_UUID_SIZE + type: str # ex) uint32_t, float + value: (int | float) + valueStr: str # value as shown in spec (ex. "(~0U)", "256U", etc) + +@dataclass +class FormatComponent: + """""" + type: str # ex) R, G, B, A, D, S, etc + bits: str # will be an INT or 'compressed' + numericFormat: str # ex) UNORM, SINT, etc + planeIndex: (int | None) # None if no planeIndex in format + +@dataclass +class FormatPlane: + """""" + index: int + widthDivisor: int + heightDivisor: int + compatible: str + +@dataclass +class Format: + """""" + name: str + className: str + blockSize: int + texelsPerBlock: int + blockExtent: list[str] + packed: (int | None) # None == not-packed + chroma: (str | None) + compressed: (str | None) + components: list[FormatComponent] # + planes: list[FormatPlane] # + spirvImageFormat: (str | None) + +@dataclass +class SyncSupport: + """""" + queues: Queues + stages: list[Flag] # VkPipelineStageFlagBits2 + max: bool # If this supports max values + +@dataclass +class SyncEquivalent: + """""" + stages: list[Flag] # VkPipelineStageFlagBits2 + accesses: list[Flag] # VkAccessFlagBits2 + max: bool # If this equivalent to everything + +@dataclass +class SyncStage: + """""" + flag: Flag # VkPipelineStageFlagBits2 + support: SyncSupport + equivalent: SyncEquivalent + +@dataclass +class SyncAccess: + """""" + flag: Flag # VkAccessFlagBits2 + support: SyncSupport + equivalent: SyncEquivalent + +@dataclass +class SyncPipelineStage: + """""" + order: (str | None) + before: (str | None) + after: (str | None) + value: str + +@dataclass +class SyncPipeline: + """""" + name: str + depends: list[str] + stages: list[SyncPipelineStage] + +@dataclass +class SpirvEnables: + """What is needed to enable the SPIR-V element""" + version: (str | None) + extension: (str | None) + struct: (str | None) + feature: (str | None) + requires: (str | None) + property: (str | None) + member: (str | None) + value: (str | None) + +@dataclass +class Spirv: + """ and """ + name: str + # Only one will be True, the other is False + extension: bool + capability: bool + enable: list[SpirvEnables] + +# This is the global Vulkan Object that holds all the information from parsing the XML +# This class is designed so all generator scripts can use this to obtain data +@dataclass +class VulkanObject(): + headerVersion: int = 0 # value of VK_HEADER_VERSION (ex. 345) + headerVersionComplete: str = '' # value of VK_HEADER_VERSION_COMPLETE (ex. '1.2.345' ) + + extensions: dict[str, Extension] = field(default_factory=dict, init=False) + versions: dict[str, Version] = field(default_factory=dict, init=False) + + handles: dict[str, Handle] = field(default_factory=dict, init=False) + commands: dict[str, Command] = field(default_factory=dict, init=False) + structs: dict[str, Struct] = field(default_factory=dict, init=False) + enums: dict[str, Enum] = field(default_factory=dict, init=False) + bitmasks: dict[str, Bitmask] = field(default_factory=dict, init=False) + flags: dict[str, Flags] = field(default_factory=dict, init=False) + constants: dict[str, Constant] = field(default_factory=dict, init=False) + formats: dict[str, Format] = field(default_factory=dict, init=False) + + syncStage: list[SyncStage] = field(default_factory=list, init=False) + syncAccess: list[SyncAccess] = field(default_factory=list, init=False) + syncPipeline: list[SyncPipeline] = field(default_factory=list, init=False) + + spirv: list[Spirv] = field(default_factory=list, init=False) + + # ex) [ xlib : VK_USE_PLATFORM_XLIB_KHR ] + platforms: dict[str, str] = field(default_factory=dict, init=False) + # list of all vendor Suffix names (KHR, EXT, etc. ) + vendorTags: list[str] = field(default_factory=list, init=False) + # ex) [ Queues.COMPUTE : VK_QUEUE_COMPUTE_BIT ] + queueBits: dict[IntFlag, str] = field(default_factory=dict, init=False) diff --git a/local/recipes/libs/vulkan-headers/source/tests/CMakeLists.txt b/local/recipes/libs/vulkan-headers/source/tests/CMakeLists.txt new file mode 100644 index 0000000000..04a7ff3931 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/tests/CMakeLists.txt @@ -0,0 +1,33 @@ +# ~~~ +# Copyright 2022-2023 The Khronos Group Inc. +# Copyright 2022-2023 Valve Corporation +# Copyright 2022-2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# ~~~ + +# Test add_subdirectory suppport +add_test(NAME integration.add_subdirectory + COMMAND ${CMAKE_CTEST_COMMAND} + --build-and-test ${CMAKE_CURRENT_LIST_DIR}/integration + ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory + --build-generator ${CMAKE_GENERATOR} + --build-options -DFIND_PACKAGE_TESTING=OFF -DVULKAN_HEADERS_ENABLE_MODULE=${VULKAN_HEADERS_ENABLE_MODULE} +) + +set(test_install_dir "${CMAKE_CURRENT_BINARY_DIR}/install") +add_test(NAME integration.install + COMMAND ${CMAKE_COMMAND} --install ${VULKAN_HEADERS_BINARY_DIR} --prefix ${test_install_dir} --config $ +) + +# Test find_package suppport +add_test(NAME integration.find_package + COMMAND ${CMAKE_CTEST_COMMAND} + --build-and-test ${CMAKE_CURRENT_LIST_DIR}/integration + ${CMAKE_CURRENT_BINARY_DIR}/find_package + --build-generator ${CMAKE_GENERATOR} + --build-options -DFIND_PACKAGE_TESTING=ON -DCMAKE_PREFIX_PATH=${test_install_dir} -DVULKAN_HEADERS_ENABLE_MODULE=${VULKAN_HEADERS_ENABLE_MODULE} +) + +# Installing comes before testing +set_tests_properties(integration.find_package PROPERTIES DEPENDS integration.install) diff --git a/local/recipes/libs/vulkan-headers/source/tests/integration/CMakeLists.txt b/local/recipes/libs/vulkan-headers/source/tests/integration/CMakeLists.txt new file mode 100644 index 0000000000..ea66a8d395 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/tests/integration/CMakeLists.txt @@ -0,0 +1,89 @@ +# ~~~ +# Copyright 2022-2023 The Khronos Group Inc. +# Copyright 2022-2023 Valve Corporation +# Copyright 2022-2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# ~~~ +cmake_minimum_required(VERSION 3.22.1) + +project(API LANGUAGES C CXX) + +if (FIND_PACKAGE_TESTING) + find_package(VulkanHeaders REQUIRED CONFIG) +else() + add_subdirectory(../../ ${CMAKE_CURRENT_BINARY_DIR}/headers) +endif() + +if (NOT TARGET Vulkan::Headers) + message(FATAL_ERROR "Vulkan::Headers target not defined") +endif() +if (NOT TARGET Vulkan::HppModule AND VULKAN_HEADERS_ENABLE_MODULE) + message(FATAL_ERROR "Vulkan::HppModule target not defined") +endif() + +if (FIND_PACKAGE_TESTING) + if (NOT DEFINED VulkanHeaders_VERSION) + message(FATAL_ERROR "VulkanHeaders_VERSION not defined!") + endif() + message(STATUS "VulkanHeaders_VERSION = ${VulkanHeaders_VERSION}") +else() + # Consuming vulkan-headers via add_subdirectory should NOT add installation code to the parent CMake project. + if (DEFINED CMAKE_INSTALL_INCLUDEDIR) + message(FATAL_ERROR "CMAKE_INSTALL_INCLUDEDIR was defined!") + endif() + + # NOTE: Some users may not be using the namespace target. + # Don't accidentally break them unless we have to. + if (NOT TARGET Vulkan-Headers) + message(FATAL_ERROR "Backcompat for Vulkan-Headers target broken!") + endif() + if (NOT TARGET Vulkan-HppModule AND VULKAN_HEADERS_ENABLE_MODULE) + message(FATAL_ERROR "Backcompat for Vulkan-HppModule target broken!") + endif() +endif() + +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_C_EXTENSIONS OFF) + +if(${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)") + add_compile_options( + -Wpedantic + -Wall + -Wextra + -Werror + ) +endif() + +if (MSVC) + add_compile_options( + /W4 + /permissive- + /WX + ) +endif() + +# Test the non-API headers provided by this repo +# NOTE: For us testing just means that these header files compile +# with reasonable warnings. + +# vk_icd.h +add_library(vk_icd MODULE ../vk_icd.c) +target_link_libraries(vk_icd PRIVATE Vulkan::Headers) + +# vk_layer.h +add_library(vk_layer MODULE ../vk_layer.c) +target_link_libraries(vk_layer PRIVATE Vulkan::Headers) + +# vulkan.hpp +add_library(vk_hpp MODULE ../vk_hpp.cpp) +target_compile_features(vk_hpp PUBLIC cxx_std_11) +target_link_libraries(vk_hpp PRIVATE Vulkan::Headers) + +# vulkan.cppm +if (VULKAN_HEADERS_ENABLE_MODULE) + add_library(vk_hpp_module MODULE ../vk_hpp_module.cpp) + set_target_properties(vk_hpp_module PROPERTIES CXX_SCAN_FOR_MODULES ON) + target_link_libraries(vk_hpp_module PRIVATE Vulkan::HppModule) +endif() \ No newline at end of file diff --git a/local/recipes/libs/vulkan-headers/source/tests/vk_hpp.cpp b/local/recipes/libs/vulkan-headers/source/tests/vk_hpp.cpp new file mode 100644 index 0000000000..8ace8cc310 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/tests/vk_hpp.cpp @@ -0,0 +1,13 @@ +/* + * Copyright 2025 The Khronos Group Inc. + * Copyright 2025 Valve Corporation + * Copyright 2025 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include + +int test_version() +{ + return static_cast(vk::makeApiVersion(1, 0, 0, 0)); +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-headers/source/tests/vk_hpp_module.cpp b/local/recipes/libs/vulkan-headers/source/tests/vk_hpp_module.cpp new file mode 100644 index 0000000000..331819633a --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/tests/vk_hpp_module.cpp @@ -0,0 +1,13 @@ +/* + * Copyright 2025 The Khronos Group Inc. + * Copyright 2025 Valve Corporation + * Copyright 2025 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ +import vulkan_hpp; + +int test_version() +{ + return static_cast(vk::makeApiVersion(1, 0, 0, 0)); +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-headers/source/tests/vk_icd.c b/local/recipes/libs/vulkan-headers/source/tests/vk_icd.c new file mode 100644 index 0000000000..48f5ef8526 --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/tests/vk_icd.c @@ -0,0 +1,14 @@ +/* + * Copyright 2022-2023 The Khronos Group Inc. + * Copyright 2022-2023 Valve Corporation + * Copyright 2022-2023 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "vulkan/vk_icd.h" + +int square(int i) +{ + return i * i; +} diff --git a/local/recipes/libs/vulkan-headers/source/tests/vk_layer.c b/local/recipes/libs/vulkan-headers/source/tests/vk_layer.c new file mode 100644 index 0000000000..a87e324d4b --- /dev/null +++ b/local/recipes/libs/vulkan-headers/source/tests/vk_layer.c @@ -0,0 +1,14 @@ +/* + * Copyright 2022-2023 The Khronos Group Inc. + * Copyright 2022-2023 Valve Corporation + * Copyright 2022-2023 LunarG, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "vulkan/vk_layer.h" + +int square(int i) +{ + return i * i; +} diff --git a/local/recipes/libs/vulkan-loader/recipe.toml b/local/recipes/libs/vulkan-loader/recipe.toml new file mode 100644 index 0000000000..b979f72eda --- /dev/null +++ b/local/recipes/libs/vulkan-loader/recipe.toml @@ -0,0 +1,71 @@ +[package] +name = "vulkan-loader" +version = "1.4.321" +description = "Khronos Vulkan ICD loader (libvulkan.so). Provides the Vulkan entry points that consumers link against and dispatches to installed ICDs (Mesa's libvulkan_intel / _radeon / _lvp)." + +#TODO: Vulkan-Loader — required because KWin does an unconditional +# `find_package(Vulkan REQUIRED)` (kwin CMakeLists.txt:201). CMake's builtin +# FindVulkan needs BOTH Vulkan_INCLUDE_DIR (vulkan-headers) and Vulkan_LIBRARY +# (this libvulkan.so). Mesa builds the ICDs but an ICD is not the loader. +# +# Redox notes: the loader is Wayland/X11-agnostic at build time (WSI is compiled +# from the headers, not from platform libs), so the port surface is mainly +# dlopen/dlsym + filesystem enumeration of ICD manifests, all of which relibc +# provides. Explicitly disabling X11/XCB/Wayland WSI detection keeps the build +# from probing for host X11 packages we deliberately do not ship. +[source] +tar = "https://github.com/KhronosGroup/Vulkan-Loader/archive/refs/tags/v1.4.321.tar.gz" +blake3 = "88552e4b7b9f2129b7451cbadf1fa6260f8710138ed522353da541ee0e0a295e" + +[build] +template = "custom" +dependencies = [ + "vulkan-headers", +] +script = """ +DYNAMIC_INIT + +# Teach the loader that Redox is a Unix-like platform. +# +# vk_loader_platform.h gates the whole POSIX arm (DIRECTORY_SYMBOL, dlopen +# wrappers, manifest search paths) on an explicit OS list that predates Redox, +# so the build fails with a cascade of: +# vk_loader_platform.h:244: error: 'DIRECTORY_SYMBOL' undeclared +# Redox provides dlopen/dlsym and POSIX paths via relibc, so it belongs in the +# same arm as Linux. Only this one header does OS detection (verified: it is the +# sole file matching defined(__linux__) under loader/). +# Guarded by a grep so repeated cooks do not append the clause twice. +if ! grep -q '__redox__' "${COOKBOOK_SOURCE}/loader/vk_loader_platform.h"; then + sed -i 's/defined(__linux__)/defined(__linux__) || defined(__redox__)/g' \\ + "${COOKBOOK_SOURCE}/loader/vk_loader_platform.h" +fi + +rm -f CMakeCache.txt +rm -rf CMakeFiles + +# BUILD_WSI_*_SUPPORT=OFF: the loader would otherwise look for X11/XCB/Wayland +# development packages on the build host. Red Bear is Wayland-only and the +# compositor talks to Mesa's ICDs directly, so the loader needs no WSI backend +# compiled in for KWin's find_package(Vulkan) to be satisfied. +cmake "${COOKBOOK_SOURCE}" \\ + -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \\ + -DCMAKE_INSTALL_PREFIX=/usr \\ + -DCMAKE_BUILD_TYPE=Release \\ + -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}/usr;${COOKBOOK_SYSROOT}" \\ + -DVULKAN_HEADERS_INSTALL_DIR="${COOKBOOK_SYSROOT}/usr" \\ + -DBUILD_TESTS=OFF \\ + -DBUILD_WSI_XCB_SUPPORT=OFF \\ + -DBUILD_WSI_XLIB_SUPPORT=OFF \\ + -DBUILD_WSI_WAYLAND_SUPPORT=OFF \\ + -DUSE_GAS=OFF \\ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \\ + -Wno-dev + +cmake --build . -j${COOKBOOK_MAKE_JOBS} + +# DESTDIR (not --prefix): keeps any absolute install destination inside the +# stage instead of escaping onto the build host. +DESTDIR="${COOKBOOK_STAGE}" cmake --install . --prefix /usr + +ls "${COOKBOOK_STAGE}/usr/lib/"libvulkan.so* >/dev/null +""" diff --git a/local/recipes/libs/vulkan-loader/source.tar b/local/recipes/libs/vulkan-loader/source.tar new file mode 100644 index 0000000000000000000000000000000000000000..b4976291bec0adf2c8cc07a801bb249c58961584 GIT binary patch literal 1762478 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

b`EP5JA;vcEfAwJNYhsbp_{9$za9eUZ$`x;R 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�@M7~gM#8yo_J6IZ5O|YD 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�wY*fW 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±Tl!H^3lAb;OK6q#Y4S`@qQ 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 z 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 z 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

c4kf%S}cE~_#1o#l;&+Ukn&HtMe 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%0AN2*i$gRm^jqz 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 z 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%0As4u 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%0AuYY^h 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

i$JXCy(NCC|O?brbQFn@#$6_v2?s2Nbw`{ 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�Yh~MCf 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 {F@j`rJKk2 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≷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%0Ac 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%0DuPHcLH(#12gt#sIF4XQT5Lr67v32**RW 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

5(Ylk>`d~%-j_+PBH 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 z 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�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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/.clang-format b/local/recipes/libs/vulkan-loader/source/.clang-format new file mode 100644 index 0000000000..0af4d400ce --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.clang-format @@ -0,0 +1,7 @@ +--- +# Use defaults from the Google style with the following exceptions: +BasedOnStyle: Google +IndentWidth: 4 +ColumnLimit: 132 +SortIncludes: false +... diff --git a/local/recipes/libs/vulkan-loader/source/.gitattributes b/local/recipes/libs/vulkan-loader/source/.gitattributes new file mode 100644 index 0000000000..acfc1e831d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.gitattributes @@ -0,0 +1,22 @@ +# See https://git-scm.com/docs/gitattributes +# See https://help.github.com/articles/dealing-with-line-endings/ + +# Default behavior, if core.autocrlf is unset. +* text=auto + +# Files to be converted to native line endings on checkout. +*.c text +*.cpp text +*.h text + +# Text files to always have CRLF (dos) line endings on checkout. +*.bat text eol=crlf + +# Text files to always have LF (unix) line endings on checkout. +*.sh text eol=lf + +# Generated source files will always have LF (unix) line endings on checkout. +loader/generated/*.c text eol=lf +loader/generated/*.h text eol=lf +loader/generated/*.cmake text eol=lf + diff --git a/local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/bug_report.md b/local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..e40a04236f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Loader bug report +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +Description + +**Environment (please complete the following information):** + - OS: [e.g. Windows 11, Fedora, MacOs] + - Bitdepth: [32-bit / 64-bit] + - GPU: [AMD Radeon RX 6900 XT, NVIDIA GEFORCE RTX 3060 Ti] + - Graphics Driver: [RADV 22.4, AMDVLK 2021.Q4.3, AMD Desktpo 13.251, Nvidia 462.46] + - SDK or header version if building from repo: + - Enabled layers: + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**VK_LOADER_DEBUG output** +Attach output when running with the environment variable VK_LOADER_DEBUG=all + +**Additional context** diff --git a/local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/feature_request.md b/local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..1d12252ba5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,16 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**What enhancement are you suggesting for the Vulkan Loader? Please describe in detail. ** +Description + +**Is this specific to a single platform?** +OS platform + +**Additional context** diff --git a/local/recipes/libs/vulkan-loader/source/.github/dependabot.yml b/local/recipes/libs/vulkan-loader/source/.github/dependabot.yml new file mode 100644 index 0000000000..46f1a60029 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 3 \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/.github/workflows/build.yml b/local/recipes/libs/vulkan-loader/source/.github/workflows/build.yml new file mode 100644 index 0000000000..44c7cc39c1 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.github/workflows/build.yml @@ -0,0 +1,431 @@ +# Copyright (c) 2021-2024 Valve Corporation +# Copyright (c) 2021-2024 LunarG, 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. +# +# Author: Lenny Komow +# Author: Charles Giessen + +name: CI Build + +# https://docs.github.com/en/actions/using-jobs/using-concurrency +concurrency: + # github.head_ref is only defined on pull_request + # Fallback to the run ID, which is guaranteed to be both unique and defined for the run. + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +on: + push: + pull_request: + branches: + - main + +permissions: read-all + +jobs: + linux: + needs: codegen + runs-on: ${{matrix.os}} + strategy: + matrix: + compiler: [ {cc: gcc, cxx: g++}, {cc: clang, cxx: clang++} ] + config: [ Debug, Release ] + os: [ ubuntu-22.04, ubuntu-24.04 ] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - name: Test CMake min + # NOTE: The main users who benefit from an older CMake version + # are linux users stuck on older LTS releases. It's idiomatic best + # practice to try and support them so they don't have to install + # the CMake tarball. Ideally the minimum we use matches what the default + # package provided by Ubuntu via APT. + if: ${{ matrix.os == 'ubuntu-22.04' }} + uses: lukka/get-cmake@latest + with: + cmakeVersion: 3.22.1 + - run: sudo apt update + - run: sudo apt install --yes --no-install-recommends libwayland-dev libxrandr-dev + - run: | + cmake -S. -B build \ + -D CMAKE_BUILD_TYPE=${{ matrix.config }} \ + -D BUILD_TESTS=ON \ + -D UPDATE_DEPS=ON \ + -D LOADER_ENABLE_ADDRESS_SANITIZER=ON \ + -D BUILD_WERROR=ON \ + -D CMAKE_CXX_COMPILER=${{ matrix.compiler.cxx }} \ + -D CMAKE_C_COMPILER=${{ matrix.compiler.cc }} + - run: cmake --build build + - run: ctest --parallel --output-on-failure --test-dir build/ + - run: cmake --install build --prefix /tmp + + codegen: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: scripts/update_deps.py --dir ext --no-build + - run: scripts/generate_source.py --verify ext/Vulkan-Headers/registry/ + + linux-no-asm: + needs: codegen + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - run: sudo apt update + - run: sudo apt install --yes --no-install-recommends libwayland-dev libxrandr-dev + - run: | + cmake -S. -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_TESTS=ON \ + -D UPDATE_DEPS=ON \ + -D BUILD_WERROR=ON \ + -D USE_GAS=OFF \ + -D CMAKE_C_COMPILER=clang \ + -D CMAKE_CXX_COMPILER=clang++ + - run: cmake --build build + - run: cmake --install build --prefix /tmp + - run: ctest --parallel --output-on-failure -E UnknownFunction --test-dir build/ + + linux-32: + needs: codegen + runs-on: ubuntu-24.04 + strategy: + matrix: + config: [ Debug, Release ] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - uses: lukka/get-cmake@latest + with: + cmakeVersion: 3.22.1 + - name: Enable 32 bit + run: sudo dpkg --add-architecture i386 + - run: sudo apt-get update + - run: | + sudo apt install --yes --no-install-recommends \ + gcc-multilib g++-multilib libc6:i386 libc6-dev-i386 libgcc-s1:i386 \ + libwayland-dev:i386 libxrandr-dev:i386 + - run: | + cmake -S. -B build \ + -D CMAKE_BUILD_TYPE=${{matrix.config}} \ + -D BUILD_TESTS=ON \ + -D UPDATE_DEPS=ON \ + -D BUILD_WERROR=ON \ + -D SYSCONFDIR=/etc/not_vulkan \ + -D CMAKE_CXX_FLAGS=-m32 \ + -D CMAKE_C_FLAGS=-m32 \ + -G Ninja + env: + # https://gitlab.kitware.com/cmake/cmake/-/issues/25317 + PKG_CONFIG_PATH: /usr/lib/i386-linux-gnu/pkgconfig + - run: cmake --build build + - run: cmake --install build --prefix /tmp + - run: ctest --parallel --output-on-failure --test-dir build/ + + linux-32-no-asm: + needs: codegen + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - uses: lukka/get-cmake@latest + with: + cmakeVersion: 3.22.1 + - name: Enable 32 bit + run: sudo dpkg --add-architecture i386 + - run: sudo apt-get update + - run: | + sudo apt install --yes --no-install-recommends \ + gcc-multilib g++-multilib libc6:i386 libc6-dev-i386 libgcc-s1:i386 \ + libwayland-dev:i386 libxrandr-dev:i386 + - run: | + cmake -S. -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_TESTS=ON \ + -D UPDATE_DEPS=ON \ + -D BUILD_WERROR=ON \ + -D USE_GAS=OFF \ + -D CMAKE_CXX_FLAGS=-m32 \ + -D CMAKE_C_FLAGS=-m32 \ + -G Ninja + env: + # https://gitlab.kitware.com/cmake/cmake/-/issues/25317 + PKG_CONFIG_PATH: /usr/lib/i386-linux-gnu/pkgconfig + - run: cmake --build build + - run: ctest --parallel --output-on-failure -E UnknownFunction --test-dir build/ + + windows_vs: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + needs: linux-no-asm + runs-on: windows-latest + strategy: + matrix: + arch: [ Win32, x64 ] + config: [ Debug, Release ] + steps: + - uses: actions/checkout@v4 + - run: | + cmake -S. -B build ` + -D BUILD_TESTS=ON ` + -D UPDATE_DEPS=ON ` + -D CMAKE_BUILD_TYPE=${{matrix.config}} ` + -A ${{ matrix.arch }} ` + -D BUILD_WERROR=ON + - run: cmake --build build/ --config ${{matrix.config}} + - run: cmake --install build --prefix build/install --config ${{matrix.config}} + - run: ctest --parallel --output-on-failure -C ${{matrix.config}} --test-dir build/ + + windows_vs-no-asm: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + needs: linux-no-asm + runs-on: windows-latest + strategy: + matrix: + arch: [ Win32, x64 ] + steps: + - uses: actions/checkout@v4 + - run: | + cmake -S. -B build ` + -D BUILD_TESTS=ON ` + -D UPDATE_DEPS=ON ` + -D USE_MASM=OFF ` + -D CMAKE_BUILD_TYPE=Release ` + -A ${{ matrix.arch }} ` + -D BUILD_WERROR=ON + - run: cmake --build build/ --config Release + - run: ctest --parallel --output-on-failure -C Release -E UnknownFunction --test-dir build/ + + # Test both clang and clang-cl (Chromium project uses clang-cl) + windows_clang: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + needs: linux-no-asm + runs-on: windows-2022 + strategy: + matrix: + compiler: [ clang, clang-cl ] + config: [ Debug, Release ] + steps: + - uses: actions/checkout@v4 + - uses: ilammy/msvc-dev-cmd@v1 + - run: | + cmake -S. -B build ` + -D CMAKE_C_COMPILER=${{matrix.compiler}} ` + -D CMAKE_CXX_COMPILER=${{matrix.compiler}} ` + -D UPDATE_DEPS=ON ` + -D CMAKE_BUILD_TYPE=${{matrix.config}} ` + -D BUILD_WERROR=ON ` + -D BUILD_TESTS=ON ` + -G Ninja + - run: cmake --build build/ + - run: ctest --parallel --output-on-failure --test-dir build/ + - run: cmake --install build --prefix build/install + + mac: + # Mac is 10x expensive to run on GitHub machines, so only run if we know something else passed as well + needs: windows_clang + runs-on: macos-13 + strategy: + matrix: + config: [ Debug, Release ] + static_build: [ APPLE_STATIC_LOADER=ON, APPLE_STATIC_LOADER=OFF ] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - run: | + cmake -S. -B build \ + -D CMAKE_BUILD_TYPE=${{matrix.config}} \ + -D ${{matrix.static_build}} \ + -D BUILD_TESTS=ON \ + -D UPDATE_DEPS=ON \ + -D BUILD_WERROR=ON \ + -D LOADER_ENABLE_ADDRESS_SANITIZER=ON \ + -G Ninja + env: + # Prevents regression of KhronosGroup/Vulkan-Loader/issues/1332 + LDFLAGS: -Wl,-fatal_warnings + - run: cmake --build build + - run: cmake --install build --prefix /tmp + - run: ctest --parallel --output-on-failure --test-dir build/ + + apple-cross-compile: + # Mac is 10x expensive to run on GitHub machines, so only run if we know something else passed as well + needs: windows_clang + name: ${{ matrix.CMAKE_SYSTEM_NAME }} + runs-on: macos-13 + strategy: + matrix: + CMAKE_SYSTEM_NAME: [ iOS, tvOS ] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - run: | + cmake -S . -B build \ + -D CMAKE_SYSTEM_NAME=${{ matrix.CMAKE_SYSTEM_NAME }} \ + "-D CMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ + -D CMAKE_BUILD_TYPE=Debug \ + -D UPDATE_DEPS=ON \ + -D BUILD_WERROR=ON \ + -G Ninja + env: + LDFLAGS: -Wl,-fatal_warnings + - run: cmake --build build + - run: cmake --install build --prefix /tmp + - name: Verify Universal Binary + run: | + vtool -show-build /tmp/lib/libvulkan.dylib | grep 'architecture x86_64' + vtool -show-build /tmp/lib/libvulkan.dylib | grep 'architecture arm64' + + # Building a universal binary disables assembly automatically + # Furthermore the Vulkan SDK ships universal binaries + mac-univeral: + # Mac is 10x expensive to run on GitHub machines, so only run if we know something else passed as well + needs: windows_clang + name: "Universal Binary Testing (STATIC ${{ matrix.static }}) w/ ${{ matrix.generator }}" + runs-on: macos-latest + strategy: + matrix: + static: [ 'ON', 'OFF' ] + generator: [ Ninja, Xcode ] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - run: | + cmake -S. -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D APPLE_STATIC_LOADER=${{matrix.static}} \ + "-D CMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ + -D BUILD_TESTS=ON \ + -D UPDATE_DEPS=ON \ + -D BUILD_WERROR=ON \ + -G ${{ matrix.generator }} + env: + LDFLAGS: -Wl,-fatal_warnings + - run: cmake --build build --config Release + - run: ctest --parallel --output-on-failure --build-config Release -E UnknownFunction --test-dir build/ + - run: cmake --install build --config Release --prefix /tmp + - name: Verify Universal Binary + if: ${{ matrix.static == 'OFF' }} + run: | + vtool -show-build /tmp/lib/libvulkan.dylib | grep 'architecture x86_64' + vtool -show-build /tmp/lib/libvulkan.dylib | grep 'architecture arm64' + + chromium: + needs: codegen + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: scripts/gn/gn.py + + mingw: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + if: false # Disabled due to issues with msys2 making CMake unable to find a working compiler + needs: linux-no-asm + runs-on: windows-2022 + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - name: Setup uasm + run: | + C:/msys64/usr/bin/pacman -Sy --noconfirm --needed mingw-w64-x86_64-uasm + printf '%s\n' 'C:/msys64/mingw64/bin' >> $GITHUB_PATH + - name: UASM Check + run: uasm -? + - run: | + cmake -S. -B build \ + -D UPDATE_DEPS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_WERROR=ON \ + -G Ninja + - run: cmake --build build + - run: cmake --install build --prefix /tmp + + mingw-use-gas: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + needs: linux-no-asm + runs-on: windows-2022 + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - run: | + cmake -S. -B build \ + -D UPDATE_DEPS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_WERROR=ON \ + -D USE_GAS=ON \ + -G Ninja + - run: cmake --build build + - run: cmake --install build --prefix /tmp + + mingw-no-asm: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + needs: linux-no-asm + runs-on: windows-2022 + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + # Make sure this doesn't fail even without explicitly setting '-D USE_MASM=OFF' and without uasm + - run: | + cmake -S. -B build \ + -D UPDATE_DEPS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_WERROR=ON \ + -G Ninja + - run: cmake --build build + - run: cmake --install build --prefix /tmp + + mingw-no-asm-explicit: + # windows is 2x expensive to run on GitHub machines, so only run if we know something else simple passed as well + needs: linux-no-asm + runs-on: windows-2022 + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + - run: | + cmake -S. -B build \ + -D UPDATE_DEPS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_WERROR=ON \ + -D USE_MASM=OFF \ + -G Ninja + - run: cmake --build build + - run: cmake --install build --prefix /tmp diff --git a/local/recipes/libs/vulkan-loader/source/.github/workflows/codeql.yml b/local/recipes/libs/vulkan-loader/source/.github/workflows/codeql.yml new file mode 100644 index 0000000000..da4fb2c94b --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.github/workflows/codeql.yml @@ -0,0 +1,97 @@ +# Copyright 2023 Google LLC +# +# 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. +# +# Author: Joyce Brum + +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "main" ] + schedule: + - cron: '26 7 * * 1' + +permissions: {} + +jobs: + analyze: + name: Analyze + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners + # Consider using larger runners for possible analysis time improvements. + runs-on: 'ubuntu-latest' + timeout-minutes: 360 + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'cpp', 'python' ] + + steps: + - name: Checkout repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). + # If this step fails, then you should remove it and run the build manually + - name: Autobuild + if: matrix.language == 'python' + uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 + + - uses: actions/setup-python@v5 + if: matrix.language == 'cpp' + with: + python-version: '3.11' + - name: Install Dependencies + if: matrix.language == 'cpp' + run: | + sudo apt update + sudo apt install --yes --no-install-recommends libwayland-dev libxrandr-dev + + - name: Generate build files + if: matrix.language == 'cpp' + run: cmake -S. -B build -D CMAKE_BUILD_TYPE=Release -D UPDATE_DEPS=ON + env: + CC: gcc + CXX: g++ + + - name: Build the loader + if: matrix.language == 'cpp' + run: cmake --build build + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 + with: + category: "/language:${{matrix.language}}" diff --git a/local/recipes/libs/vulkan-loader/source/.github/workflows/format.yml b/local/recipes/libs/vulkan-loader/source/.github/workflows/format.yml new file mode 100644 index 0000000000..0c6dc2cf7e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.github/workflows/format.yml @@ -0,0 +1,43 @@ +# Copyright (c) 2023 Valve Corporation +# Copyright (c) 2023 LunarG, 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. + +name: format + +on: + push: + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + clang-format: + name: clang-format + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + path: + - 'loader' + - 'tests' + steps: + - uses: actions/checkout@v4 + - name: Run clang-format + uses: jidicula/clang-format-action@v4.15.0 + with: + clang-format-version: '16' + check-path: ${{ matrix.path }} diff --git a/local/recipes/libs/vulkan-loader/source/.gitignore b/local/recipes/libs/vulkan-loader/source/.gitignore new file mode 100644 index 0000000000..ae5e0cd38b --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/.gitignore @@ -0,0 +1,47 @@ +# By default we install dependencies to the external directory +/external/* + +# Ignore any build directories +*build*/ + +CMakeCache.txt +CMakeLists.txt.user +CMakeFiles/ +cmake_install.cmake +Makefile +scripts/__pycache__ +VKConfig.h + +*.so +*.so.* +*.pyc +*.vcproj +*.sln +*.suo +*.vcxproj +*.sdf +*.filters +*.config +*.creator +*.creator.user +*.files +*.includes +.vscode/ +.cache +.DS_Store +_out64 +out32/* +out64/* + +# Chromium build artifacts +.cipd/ +.gn +.gclient +.gclient_entries +.gclient_previous_sync_commits +out/ +third_party/ +buildtools/ +depot_tools/ +testing/ +tools/ diff --git a/local/recipes/libs/vulkan-loader/source/BUILD.gn b/local/recipes/libs/vulkan-loader/source/BUILD.gn new file mode 100644 index 0000000000..5a73707d46 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/BUILD.gn @@ -0,0 +1,341 @@ +# Copyright (C) 2018-2019 The ANGLE Project Authors. +# Copyright (C) 2019-2023 LunarG, 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 +# +# https://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. + +import("//build_overrides/build.gni") +import("//build_overrides/vulkan_loader.gni") + +declare_args() { + custom_vulkan_loader_library_name = "" +} + +if (is_fuchsia) { + import("//build/cpp/sdk_shared_library.gni") + import("//build/sdk/sdk_documentation.gni") +} + +if (!is_android) { + vulkan_undefine_configs = [] +} +if (is_win) { + vulkan_undefine_configs += [ + "//build/config/win:nominmax", + "//build/config/win:unicode", + ] +} + +config("vulkan_internal_config") { + defines = [ "VK_ENABLE_BETA_EXTENSIONS" ] + if (is_clang || !is_win) { + cflags = [ + "-Wno-conversion", + "-Wno-extra-semi", + "-Wno-sign-compare", + "-Wno-unreachable-code", + "-Wno-unused-function", + "-Wno-unused-variable", + ] + } + if (is_fuchsia) { + defines += [ + "SYSCONFDIR=\"/config\"", + "EXTRASYSCONFDIR=\"/pkg/data\"", + ] + } + if (is_linux || is_chromeos || is_mac) { + defines += [ + "SYSCONFDIR=\"/etc\"", + "FALLBACK_CONFIG_DIRS=\"/etc/xdg\"", + "FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"", + ] + } + if (is_apple && !vulkan_loader_shared) { + defines += [ "APPLE_STATIC_LOADER" ] + } +} + +# Vulkan loader +# ------------- + +config("vulkan_loader_config") { + include_dirs = [ + "loader/generated", + "loader", + ] + defines = [ + "LOADER_USE_UNSAFE_FILE_SEARCH=1", + ] + + cflags = [] + if (is_win) { + cflags += [ "/wd4201" ] + } + if (is_linux || is_chromeos) { + defines += [ + # Enables `readlink()` and `strtok_r()`. + "_GNU_SOURCE", + + # assume secure_getenv() is available + "HAVE_SECURE_GETENV", + "LOADER_ENABLE_LINUX_SORT", + ] + } + if (is_clang) { + # Vulkan-Hpp uses `vk::PFN_...` function pointer types, which are different + # from the C-styled `PFN_...` function pointers. + # + # These types are guaranteed to be identical during Vulkan-Hpp compile time. + # However, UBsan's function sanitizer treats them as different types and + # triggers a runtime error when these functions are called. + # + # Thus, we need to disable the function sanitizer so that Vulkan + # applications created using Vulkan-Hpp can run correctly. + cflags += [ "-fno-sanitize=function" ] + } +} + +if (!is_android) { + if (is_fuchsia) { + library_type = "sdk_shared_library" + } else if (vulkan_loader_shared) { + library_type = "shared_library" + } else { + library_type = "static_library" + } + support_unknown_function_handling = false + if (defined(ar_path) && ar_path != "" && !is_win && (current_cpu == "arm64" || current_cpu == "x86_64")) { + support_unknown_function_handling = true + static_library("asm_offset") { + sources = [ "loader/asm_offset.c" ] + deps = [ + "$vulkan_headers_dir:vulkan_headers", + ] + + if (is_fuchsia) { + deps += [ + ":dlopen_fuchsia", + ] + } + + # Output raw assembly instead of compiled object file. The assembly will be included as a member of the output ar file. + cflags = [ "-S" ] + configs += [ ":vulkan_internal_config" ] + configs += [ ":vulkan_loader_config" ] + } + + action("gen_defines") { + script = "scripts/parse_asm_values.py" + deps = [ ":asm_offset" ] + + inputs = [ + "$target_out_dir/libasm_offset.a", + ar_path, + ] + if (current_cpu == "arm64") { + cpu = "aarch64" + } else { + cpu = "x86_64" + } + args = [ + rebase_path("$target_gen_dir/gen_defines.asm", root_build_dir), + rebase_path("$target_out_dir/libasm_offset.a", root_build_dir), + "GAS", + "Clang", + cpu, + rebase_path(ar_path, root_build_dir), + "libasm_offset.asm_offset.c.o", + ] + outputs = [ "$target_gen_dir/gen_defines.asm" ] + } + } + + if (is_win) { + action("gen_loader_rc") { + script = "scripts/generate_loader_rc.py" + inputs = [ + "loader/loader.rc", + ] + args = [ + rebase_path("loader/loader.rc", root_build_dir), + rebase_path("$target_gen_dir/loader.rc", root_build_dir), + ] + if (is_official_build) { + args += [ "--is_official" ] + } + outputs = [ "$target_gen_dir/loader.rc" ] + } + } + + target(library_type, "libvulkan") { + sources = [ + "loader/adapters.h", + "loader/allocation.c", + "loader/allocation.h", + "loader/cJSON.c", + "loader/cJSON.h", + "loader/debug_utils.c", + "loader/debug_utils.h", + # Should only be linked when assembler is used + # "loader/dev_ext_trampoline.c", + "loader/extension_manual.c", + "loader/extension_manual.h", + "loader/generated/vk_layer_dispatch_table.h", + "loader/generated/vk_loader_extensions.h", + "loader/generated/vk_object_types.h", + "loader/gpa_helper.h", + "loader/gpa_helper.c", + "loader/loader_common.h", + "loader/loader_environment.c", + "loader/loader_environment.h", + "loader/loader.c", + "loader/loader.h", + "loader/loader_json.c", + "loader/loader_json.h", + "loader/log.c", + "loader/log.h", + # Should only be linked when assembler is used + # "loader/phys_dev_ext.c", + "loader/settings.c", + "loader/settings.h", + "loader/stack_allocation.h", + "loader/terminator.c", + "loader/trampoline.c", + "loader/unknown_function_handling.h", + "loader/unknown_function_handling.c", + "loader/vk_loader_layer.h", + "loader/vk_loader_platform.h", + "loader/wsi.c", + "loader/wsi.h", + ] + + if (custom_vulkan_loader_library_name != "") { + output_name = custom_vulkan_loader_library_name + } else { + if (is_win) { + output_name = "vulkan-1" + } else { + output_name = "vulkan" + + # Create libvulkan.so.1 on Linux instead of libvulkan.so + if ((is_linux || is_chromeos) && vulkan_loader_shared) { + output_extension = "so.1" + } + } + } + + deps = [] + if (is_win) { + sources += [ + "loader/dirent_on_windows.c", + "loader/dirent_on_windows.h", + "loader/loader_windows.c", + "loader/loader_windows.h", + "$target_gen_dir/loader.rc", + "loader/vulkan-1.def", + ] + if (!is_clang) { + cflags = [ + "/wd4054", # Type cast from function pointer + "/wd4055", # Type cast from data pointer + "/wd4100", # Unreferenced formal parameter + "/wd4152", # Nonstandard extension used (pointer conversion) + "/wd4201", # Nonstandard extension used: nameless struct/union + "/wd4214", # Nonstandard extension used: bit field types other than + # int + "/wd4232", # Nonstandard extension used: address of dllimport is not + # static + "/wd4305", # Type cast truncation + "/wd4706", # Assignment within conditional expression + "/wd4996", # Unsafe stdlib function + ] + } + if (is_clang) { + cflags = [ "-Wno-incompatible-pointer-types" ] + } + libs = [ "Cfgmgr32.lib" ] + deps += [ ":gen_loader_rc" ] + } + if (is_linux || is_chromeos) { + sources += [ + "loader/loader_linux.c", + "loader/loader_linux.h", + ] + } + if (is_mac) { + frameworks = [ "CoreFoundation.framework" ] + } + public_deps = [ "$vulkan_headers_dir:vulkan_headers" ] + if (build_with_chromium) { + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + } + configs += [ ":vulkan_internal_config" ] + public_configs = [ ":vulkan_loader_config" ] + configs -= vulkan_undefine_configs + + if (is_fuchsia) { + category = "partner" + + # The Vulkan loader's interface is defined by standard Khronos vulkan headers + # which can be obtained separately from the loader implementation itself. + no_headers = true + + deps += [ + ":dlopen_fuchsia", + "//sdk/lib/fdio", + ] + + runtime_deps = [ "//sdk/lib/fdio:fdio_sdk" ] + } + if (support_unknown_function_handling) { + if (current_cpu == "arm64") { + sources += [ "loader/unknown_ext_chain_gas_aarch.S" ] + } else if (current_cpu == "x86_64") { + sources += [ "loader/unknown_ext_chain_gas_x86.S" ] + } else { + assert(false, "Unexpected CPU $current_cpu") + } + + defines += ["UNKNOWN_FUNCTIONS_SUPPORTED=1"] + deps += [ ":gen_defines" ] + include_dirs = [ "$target_gen_dir" ] + } + } +} + +if (is_fuchsia) { + source_set("dlopen_fuchsia") { + sources = [ + "loader/dlopen_fuchsia.c", + "loader/dlopen_fuchsia.h", + ] + + deps = [ + "//sdk/fidl/fuchsia.vulkan.loader:fuchsia.vulkan.loader_c_client", + "//sdk/lib/fdio", + ] + } + + sdk_documentation("vulkan_license") { + name = "vulkan_license" + category = "public" + + files = [ + { + source = "LICENSE.txt" + dest = "LICENSE.vulkan" + }, + ] + } +} diff --git a/local/recipes/libs/vulkan-loader/source/BUILD.md b/local/recipes/libs/vulkan-loader/source/BUILD.md new file mode 100644 index 0000000000..8c37b70ba1 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/BUILD.md @@ -0,0 +1,662 @@ +# Build Instructions + +Instructions for building this repository on Linux, Windows, and MacOS. + +## Table Of Contents + +- [Contributing to the Repository](#contributing-to-the-repository) +- [Repository Content](#repository-content) + - [Installed Files](#installed-files) +- [Build Requirements](#build-requirements) + - [Building with Code Generation Requirements](#building-with-code-generation-requirements) + - [Test Requirements](#test-requirements) +- [Repository Set-Up](#repository-set-up) + - [Display Drivers](#display-drivers) + - [Repository Dependencies](#repository-dependencies) + - [Vulkan-Headers](#vulkan-headers) + - [Test Dependencies](#test-dependencies) + - [Warnings as errors off by default!](#warnings-as-errors-off-by-default) + - [Build and Install Directory Locations](#build-and-install-directory-locations) + - [Building Dependent Repositories with Known-Good Revisions](#building-dependent-repositories-with-known-good-revisions) + - [Automatically](#automatically) + - [Manually](#manually) + - [Notes About the Manual Option](#notes-about-the-manual-option) + - [Generated source code](#generated-source-code) + - [Build Options](#build-options) +- [Building On Windows](#building-on-windows) + - [Windows Development Environment Requirements](#windows-development-environment-requirements) + - [Windows Build - Microsoft Visual Studio](#windows-build---microsoft-visual-studio) + - [Windows Quick Start](#windows-quick-start) + - [Use `CMake` to Create the Visual Studio Project Files](#use-cmake-to-create-the-visual-studio-project-files) + - [Build the Solution From the Command Line](#build-the-solution-from-the-command-line) + - [Build the Solution With Visual Studio](#build-the-solution-with-visual-studio) + - [Windows Install Target](#windows-install-target) +- [Building On Linux](#building-on-linux) + - [Linux Development Environment Requirements](#linux-development-environment-requirements) + - [Required Package List](#required-package-list) + - [Linux Build](#linux-build) + - [Linux Quick Start](#linux-quick-start) + - [Use CMake to Create the Make Files](#use-cmake-to-create-the-make-files) + - [Build the Project](#build-the-project) + - [Linux Notes](#linux-notes) + - [WSI Support Build Options](#wsi-support-build-options) + - [Linux Install to System Directories](#linux-install-to-system-directories) + - [Linux 32-bit support](#linux-32-bit-support) +- [Building on MacOS](#building-on-macos) + - [MacOS Development Environment Requirements](#macos-development-environment-requirements) + - [Clone the Repository](#clone-the-repository) + - [MacOS build](#macos-build) + - [Building with the Unix Makefiles Generator](#building-with-the-unix-makefiles-generator) + - [Building with the Xcode Generator](#building-with-the-xcode-generator) +- [Building on Fuchsia](#building-on-fuchsia) + - [SDK Symbols](#sdk-symbols) +- [Building on QNX](#building-on-qnx) +- [Cross Compilation](#cross-compilation) + - [Unknown function handling which requires explicit assembly implementations](#unknown-function-handling-which-requires-explicit-assembly-implementations) + - [Platforms which fully support unknown function handling](#platforms-which-fully-support-unknown-function-handling) +- [Tests](#tests) + + +## Contributing to the Repository + +If you intend to contribute, the preferred work flow is for you to develop +your contribution in a fork of this repository in your GitHub account and then +submit a pull request. Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file +in this repository for more details. + +## Repository Content + +This repository contains the source code necessary to build the desktop Vulkan +loader and its tests. + +### Installed Files + +The `install` target installs the following files under the directory +indicated by *install_dir*: + +- *install_dir*`/lib` : The Vulkan loader library +- *install_dir*`/bin` : The Vulkan loader library DLL (Windows) + +## Build Requirements + +1. `C99` capable compiler +2. `CMake` version 3.22.1 or greater +3. `Git` + +### Building with Code Generation Requirements + +1. `Python 3.11` +2. `clang-format` version 14 or higher + * Only required when submitting changes + +### Test Requirements + +1. `C++17` capable compiler + +## Repository Set-Up + +### Display Drivers + +This repository does not contain a Vulkan-capable driver. You will need to +obtain and install a Vulkan driver from your graphics hardware vendor or from +some other suitable source if you intend to run Vulkan applications. + + +### Repository Dependencies + +This repository attempts to resolve some of its dependencies by using +components found from the following places, in this order: + +1. CMake or Environment variable overrides (e.g., -D VULKAN_HEADERS_INSTALL_DIR) +2. System-installed packages, mostly applicable on Linux + +Dependencies that cannot be resolved by the SDK or installed packages must be +resolved with the "install directory" override and are listed below. The +"install directory" override can also be used to force the use of a specific +version of that dependency. + +#### Vulkan-Headers + +This repository has a required dependency on the [Vulkan Headers repository](https://github.com/KhronosGroup/Vulkan-Headers). +The Vulkan-Headers repository contains the Vulkan API definition files that are +required to build the loader. + +#### Test Dependencies + +The loader tests depend on the [Google Test](https://github.com/google/googletest) library and +on Windows platforms depends on the [Microsoft Detours](https://github.com/microsoft/Detours) library. + +To build the tests, pass both `-D UPDATE_DEPS=ON` and `-D BUILD_TESTS=ON` options when generating the project: +```bash +cmake ... -D UPDATE_DEPS=ON -D BUILD_TESTS=ON ... +``` +This will ensure googletest and detours is downloaded and the appropriate version is used. + +### Warnings as errors off by default! + +By default `BUILD_WERROR` is `OFF`. The idiom for open source projects is to NOT enable warnings as errors. + +System/language package managers have to build on multiple different platforms and compilers. + +By defaulting to `ON` we cause issues for package managers since there is no standard way to disable warnings. + +Add `-D BUILD_WERROR=ON` to your workflow + +### Build and Install Directory Locations + +A common convention is to place the `build` directory in the top directory of +the repository and place the `install` directory as a child of the `build` +directory. The remainder of these instructions follow this convention, +although you can place these directories in any location. + +### Building Dependent Repositories with Known-Good Revisions + +There is a Python utility script, `scripts/update_deps.py`, that you can use +to gather and build the dependent repositories mentioned above. +This program uses information stored in the `scripts/known-good.json` file +to checkout dependent repository revisions that are known to be compatible with +the revision of this repository that you currently have checked out. + +You can choose to do this automatically or manually. +The first step to either is cloning the Vulkan-Loader repo and stepping into +that newly cloned folder: + +``` + git clone git@github.com:KhronosGroup/Vulkan-Loader.git + cd Vulkan-Loader +``` + +#### Automatically + +On the other hand, if you choose to let the CMake scripts do all the +heavy-lifting, you may just trigger the following CMake commands: + +``` + cmake -S . -B build -D UPDATE_DEPS=On + cmake --build build +``` + +#### Manually + +To manually update the dependencies you now must create the build folder, and +run the update deps script followed by the necessary CMake build commands: + +``` + mkdir build + cd build + python ../scripts/update_deps.py + cmake -C helper.cmake .. + cmake --build . +``` + +##### Notes About the Manual Option + +- You may need to adjust some of the CMake options based on your platform. See + the platform-specific sections later in this document. +- The `update_deps.py` script fetches and builds the dependent repositories in + the current directory when it is invoked. +- The `--dir` option for `update_deps.py` can be used to relocate the + dependent repositories to another arbitrary directory using an absolute or + relative path. +- The `update_deps.py` script generates a file named `helper.cmake` and places + it in the same directory as the dependent repositories. + This file contains CMake commands to set the CMake `*_INSTALL_DIR` variables + that are used to point to the install artifacts of the dependent repositories. + The `-C helper.cmake` option is used to set these variables when you generate + the build files. +- If using "MINGW" (Git For Windows), you may wish to run + `winpty update_deps.py` in order to avoid buffering all of the script's + "print" output until the end and to retain the ability to interrupt script + execution. +- Please use `update_deps.py --help` to list additional options and read the + internal documentation in `update_deps.py` for further information. + +### Generated source code + +This repository contains generated source code in the `loader/generated` +directory which is not intended to be modified directly. +Instead, changes should be made to the corresponding generator in the `scripts` directory. +The source files can then be regenerated using `scripts/generate_source.py`. + +Run `python scripts/generate_source.py --help` to see how to invoke it. + +A helper CMake target `loader_codegen` is also provided to simplify the invocation of `scripts/generate_source.py`. + +Note: By default this helper target is disabled. To enable it, add `-D LOADER_CODEGEN=ON` +to CMake, as shown below. + +``` +cmake -S . -B build -D LOADER_CODEGEN=ON +cmake --build . --target loader_codegen +``` + +`clang-format` is run on generated code files so that the generator scripts do +not need format their output manually. +If `clang-format` is not available when running code generation, a warning will +be issued but does not stop code generation from occuring. + +### Build Options + +When generating build files through CMake, several options can be specified to +customize the build. +The following is a table of all on/off options currently supported by this repository: + +| Option | Platform | Default | Description | +| ------------------------------- | ------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| BUILD_TESTS | All | `OFF` | Controls whether or not the loader tests are built. | +| BUILD_WSI_XCB_SUPPORT | Linux | `ON` | Build the loader with the XCB entry points enabled. Without this, the XCB headers should not be needed, but the extension `VK_KHR_xcb_surface` won't be available. | +| BUILD_WSI_XLIB_SUPPORT | Linux | `ON` | Build the loader with the Xlib entry points enabled. Without this, the X11 headers should not be needed, but the extension `VK_KHR_xlib_surface` won't be available. | +| BUILD_WSI_WAYLAND_SUPPORT | Linux | `ON` | Build the loader with the Wayland entry points enabled. Without this, the Wayland headers should not be needed, but the extension `VK_KHR_wayland_surface` won't be available. | +| BUILD_WSI_DIRECTFB_SUPPORT | Linux | `OFF` | Build the loader with the DirectFB entry points enabled. Without this, the DirectFB headers should not be needed, but the extension `VK_EXT_directfb_surface` won't be available. | +| BUILD_WSI_SCREEN_QNX_SUPPORT | QNX | `OFF` | Build the loader with the QNX Screen entry points enabled. Without this the extension `VK_QNX_screen_surface` won't be available. | +| ENABLE_WIN10_ONECORE | Windows | `OFF` | Link the loader to the [OneCore](https://msdn.microsoft.com/en-us/library/windows/desktop/mt654039.aspx) umbrella library, instead of the standard Win32 ones. | +| USE_GAS | Linux | `ON` | Controls whether to build assembly files with the GNU assembler, else fallback to C code. | +| USE_MASM | Windows | `ON` | Controls whether to build assembly files with MS assembler, else fallback to C code | +| LOADER_ENABLE_ADDRESS_SANITIZER | Linux & macOS | `OFF` | Enables Address Sanitizer in the loader and tests. | +| LOADER_ENABLE_THREAD_SANITIZER | Linux & macOS | `OFF` | Enables Thread Sanitizer in the loader and tests. | +| LOADER_USE_UNSAFE_FILE_SEARCH | All | `OFF` | Disables security policies that prevent unsecure locations from being used when running with elevated permissions. | +| LOADER_CODEGEN | All | `OFF` | Creates a helper CMake target to generate code. | + +NOTE: `LOADER_USE_UNSAFE_FILE_SEARCH` should NOT be enabled except in very specific contexts (like isolated test environments)! + +The following is a table of all string options currently supported by this repository: + +| Option | Platform | Default | Description | +| --------------------- | ----------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| FALLBACK_CONFIG_DIRS | Linux/MacOS | `/etc/xdg` | Configuration path(s) to use instead of `XDG_CONFIG_DIRS` if that environment variable is unavailable. The default setting is freedesktop compliant. | +| FALLBACK_DATA_DIRS | Linux/MacOS | `/usr/local/share:/usr/share` | Configuration path(s) to use instead of `XDG_DATA_DIRS` if that environment variable is unavailable. The default setting is freedesktop compliant. | +| BUILD_DLL_VERSIONINFO | Windows | `""` (empty string) | Allows setting the Windows specific version information for the Loader DLL. Format is "major.minor.patch.build". | + +These variables should be set using the `-D` option when invoking CMake to generate the native platform files. + +## Building On Windows + +### Windows Development Environment Requirements + +- Windows + - Any Personal Computer version supported by Microsoft +- Microsoft [Visual Studio](https://www.visualstudio.com/) + - Versions + - [2022](https://www.visualstudio.com/vs/downloads/) + - [2019](https://www.visualstudio.com/vs/older-downloads/) + - The Community Edition of each of the above versions is sufficient, as + well as any more capable edition. +- [CMake 3.22.1](https://cmake.org/files/v3.22.1/cmake-3.22.1-win64-x64.zip) is recommended. + - Use the installer option to add CMake to the system PATH +- Git Client Support + - [Git for Windows](http://git-scm.com/download/win) is a popular solution + for Windows + - Some IDEs (e.g., [Visual Studio](https://www.visualstudio.com/), + [GitHub Desktop](https://desktop.github.com/)) have integrated + Git client support + +### Windows Build - Microsoft Visual Studio + +The general approach is to run CMake to generate the Visual Studio project +files. Then either run CMake with the `--build` option to build from the +command line or use the Visual Studio IDE to open the generated solution and +work with the solution interactively. + +#### Windows Quick Start + +Open a developer command prompt and enter: + + cd Vulkan-Loader + mkdir build + cd build + cmake -A x64 -D UPDATE_DEPS=ON .. + cmake --build . + +The above commands instruct CMake to find and use the default Visual Studio +installation to generate a Visual Studio solution and projects for the x64 +architecture. The second CMake command builds the Debug (default) +configuration of the solution. + +#### Use `CMake` to Create the Visual Studio Project Files + +Change your current directory to the top of the cloned repository directory, +create a build directory and generate the Visual Studio project files: + + cd Vulkan-Loader + mkdir build + cd build + cmake -D UPDATE_DEPS=ON -G "Visual Studio 16 2019" -A x64 .. + +> Note: The `..` parameter tells `cmake` the location of the top of the +> repository. If you place your build directory someplace else, you'll need to +> specify the location of the repository differently. + +The `-G` option is used to select the generator + +Supported Visual Studio generators: +* `Visual Studio 17 2022` +* `Visual Studio 16 2019` + +The `-A` option is used to select either the "Win32", "x64", or "ARM64 architecture. + +When generating the project files, the absolute path to a Vulkan-Headers +install directory must be provided. This can be done automatically by the +`-D UPDATE_DEPS=ON` option, by directly setting the +`VULKAN_HEADERS_INSTALL_DIR` environment variable, or by setting the +`VULKAN_HEADERS_INSTALL_DIR` CMake variable with the `-D` CMake option. In +either case, the variable should point to the installation directory of a +Vulkan-Headers repository built with the install target. + +The above steps create a Windows solution file named `Vulkan-Loader.sln` in +the build directory. + +At this point, you can build the solution from the command line or open the +generated solution with Visual Studio. + +#### Build the Solution From the Command Line + +While still in the build directory: + + cmake --build . + +to build the Debug configuration (the default), or: + + cmake --build . --config Release + +to make a Release build. + +#### Build the Solution With Visual Studio + +Launch Visual Studio and open the "Vulkan-Loader.sln" solution file in the +build folder. You may select "Debug" or "Release" from the Solution +Configurations drop-down list. Start a build by selecting the Build->Build +Solution menu item. + +#### Windows Install Target + +The CMake project also generates an "install" target that you can use to copy +the primary build artifacts to a specific location using a "bin, include, lib" +style directory structure. This may be useful for collecting the artifacts and +providing them to another project that is dependent on them. + +The default location is `$CMAKE_CURRENT_BINARY_DIR\install`, but can be changed +with the `CMAKE_INSTALL_PREFIX` variable when first generating the project build +files with CMake. + +You can build the install target from the command line with: + + cmake --build . --config Release --target install + +or build the `INSTALL` target from the Visual Studio solution explorer. + +## Building On Linux + +### Linux Development Environment Requirements + +This repository has been built and tested on the two most recent Ubuntu LTS +versions, although earlier versions may work. +It is be straightforward to adapt this repository to other Linux distributions. + +[CMake 3.22.1](https://cmake.org/files/v3.22.1/cmake-3.22.1-Linux-x86_64.tar.gz) is recommended. + +#### Required Package List + + sudo apt-get install git build-essential libx11-xcb-dev \ + libxkbcommon-dev libwayland-dev libxrandr-dev + +### Linux Build + +The general approach is to run CMake to generate make files. Then either run +CMake with the `--build` option or `make` to build from the command line. + +#### Linux Quick Start + + cd Vulkan-Loader + mkdir build + cd build + cmake -D UPDATE_DEPS=ON .. + make + +See below for the details. + +#### Use CMake to Create the Make Files + +Change your current directory to the top of the cloned repository directory, +create a build directory and generate the make files. + + cd Vulkan-Loader + mkdir build + cd build + cmake -D CMAKE_BUILD_TYPE=Debug \ + -D VULKAN_HEADERS_INSTALL_DIR=absolute_path_to_install_dir \ + -D CMAKE_INSTALL_PREFIX=install .. + +> Note: The `..` parameter tells `cmake` the location of the top of the +> repository. If you place your `build` directory someplace else, you'll need +> to specify the location of the repository top differently. + +Use `-D CMAKE_BUILD_TYPE` to specify a Debug or Release build. + +When generating the project files, the absolute path to a Vulkan-Headers +install directory must be provided. This can be done automatically by the +`-D UPDATE_DEPS=ON` option, by directly setting the `VULKAN_HEADERS_INSTALL_DIR` +environment variable, or by setting the `VULKAN_HEADERS_INSTALL_DIR` CMake +variable with the `-D` CMake option. +In either case, the variable should point to the installation directory of a +Vulkan-Headers repository built with the install target. + +> Note: For Linux, the default value for `CMAKE_INSTALL_PREFIX` is +> `/usr/local`, which would be used if you do not specify +> `CMAKE_INSTALL_PREFIX`. In this case, you may need to use `sudo` to install +> to system directories later when you run `make install`. + +#### Build the Project + +You can just run `make` to begin the build. + +To speed up the build on a multi-core machine, use the `-j` option for `make` +to specify the number of cores to use for the build. For example: + + make -j4 + +You can also use + + cmake --build . + +### Linux Notes + +#### WSI Support Build Options + +By default, the Vulkan Loader is built with support for the Vulkan-defined WSI +display servers: Xcb, Xlib, and Wayland. It is recommended to build the +repository components with support for these display servers to maximize their +usability across Linux platforms. If it is necessary to build these modules +without support for one of the display servers, the appropriate CMake option +of the form `BUILD_WSI_xxx_SUPPORT` can be set to `OFF`. + +#### Linux Install to System Directories + +Installing the files resulting from your build to the systems directories is +optional since environment variables can usually be used instead to locate the +binaries. There are also risks with interfering with binaries installed by +packages. If you are certain that you would like to install your binaries to +system directories, you can proceed with these instructions. + +Assuming that you've built the code as described above and the current +directory is still `build`, you can execute: + + sudo make install + +This command installs files to `/usr/local` if no `CMAKE_INSTALL_PREFIX` is +specified when creating the build files with CMake: + +- `/usr/local/lib`: Vulkan loader library and package config files + +You may need to run `ldconfig` in order to refresh the system loader search +cache on some Linux systems. + +You can further customize the installation location by setting additional +CMake variables to override their defaults. For example, if you would like to +install to `/tmp/build` instead of `/usr/local`, on your CMake command line +specify: + + -D CMAKE_INSTALL_PREFIX=/tmp/build + +Then run `make install` as before. The install step places the files in +`/tmp/build`. This may be useful for collecting the artifacts and providing +them to another project that is dependent on them. + +Using the `CMAKE_INSTALL_PREFIX` to customize the install location also +modifies the loader search paths to include searching for layers in the +specified install location. In this example, setting `CMAKE_INSTALL_PREFIX` to +`/tmp/build` causes the loader to search +`/tmp/build/etc/vulkan/explicit_layer.d` and +`/tmp/build/share/vulkan/explicit_layer.d` for the layer JSON files. The +loader also searches the "standard" system locations of +`/etc/vulkan/explicit_layer.d` and `/usr/share/vulkan/explicit_layer.d` after +searching the two locations under `/tmp/build`. + +You can further customize the installation directories by using the CMake +variables `CMAKE_INSTALL_SYSCONFDIR` to rename the `etc` directory and +`CMAKE_INSTALL_DATADIR` to rename the `share` directory. + +See the CMake documentation for more details on using these variables to +further customize your installation. + +Also see the `LoaderInterfaceArchitecture.md` document in the `docs` folder in this +repository for more information about loader operation. + +#### Linux 32-bit support + +The loader supports building in 32-bit Linux environments. +However, it is not nearly as straightforward as it is for Windows. +Here are some notes for building this repo as 32-bit on a 64-bit Ubuntu +"reference" platform: + +If not already installed, install the following 32-bit development libraries: + +`gcc-multilib gcc-multilib g++-multilib libc6:i386 libc6-dev-i386 libgcc-s1:i386 libwayland-dev:i386 libxrandr-dev:i386` + +This list may vary depending on your distribution and which windowing systems you are building for. + +Set up your environment for building 32-bit targets when configuring your build: + + cmake ... -D CMAKE_CXX_FLAGS=-m32 -D CMAKE_C_FLAGS=-m32 + +However, you may find that pkg-config picks incorrect libraries. This is due to a CMake implementation issue: +https://gitlab.kitware.com/cmake/cmake/-/issues/25317 + +Your PKG_CONFIG configuration may be different, depending on your distribution. + +You can the `PKG_CONFIG_PATH` environment variable to address this issue. + +Finally, build the repository normally as explained above. + +These notes are taken from the Github Actions workflow `linux-32` which is run regularly as a part of CI. + +## Building on MacOS + +### MacOS Development Environment Requirements + +Setup Homebrew and components + +- Ensure Homebrew is at the beginning of your PATH: + + export PATH=/usr/local/bin:$PATH + +- Add packages with the following (may need refinement) + + brew install python python3 git + +### Clone the Repository + +Clone the Vulkan-Loader repository: + + git clone https://github.com/KhronosGroup/Vulkan-Loader.git + +### MacOS build + +[CMake 3.22.1](https://cmake.org/files/v3.22.1/cmake-3.22.1-Darwin-x86_64.tar.gz) is recommended. + +#### Building with the Unix Makefiles Generator + +This generator is the default generator. + +When generating the project files, the absolute path to a Vulkan-Headers +install directory must be provided. This can be done automatically by the +`-D UPDATE_DEPS=ON` option, by directly setting the +`VULKAN_HEADERS_INSTALL_DIR` environment variable, or by setting the +`VULKAN_HEADERS_INSTALL_DIR` CMake variable with the `-D` CMake option. In +either case, the variable should point to the installation directory of a +Vulkan-Headers repository built with the install target. + + mkdir build + cd build + cmake -D UPDATE_DEPS=ON -D VULKAN_HEADERS_INSTALL_DIR=absolute_path_to_install_dir -D CMAKE_BUILD_TYPE=Debug .. + make + +To speed up the build on a multi-core machine, use the `-j` option for `make` +to specify the number of cores to use for the build. For example: + + make -j4 + +#### Building with the Xcode Generator + +To create and open an Xcode project: + + mkdir build-xcode + cd build-xcode + cmake -GXcode .. + open Vulkan-Loader.xcodeproj + +Within Xcode, you can select Debug or Release builds in the project's Build +Settings. + +## Building on Fuchsia + +Fuchsia uses the project's GN build system to integrate with the Fuchsia platform build. + +### SDK Symbols + +The Vulkan Loader is a component of the Fuchsia SDK, so it must explicitly declare its exported symbols in +the file vulkan.symbols.api; see [SDK](https://fuchsia.dev/fuchsia-src/development/sdk). + +## Building on QNX + +QNX is using its own build system. The proper build environment must be set +under the QNX host development system (Linux, Win64, MacOS) by invoking +the shell/batch script provided with QNX installation. + +Then change working directory to the "scripts/qnx" in this project and type "make". +It will build the ICD loader for all CPU targets supported by QNX. + +## Cross Compilation + +While this repo is capable of cross compilation, there are a handful of caveats. + +### Unknown function handling which requires explicit assembly implementations + +Unknown function handling is only fully supported on select platforms due to the +need for assembly in the implementation. +Platforms not fully supported will have assembly disabled automatically, or +can be manually disabled by setting `USE_GAS` or `USE_MASM` to `OFF`. + +#### Platforms which fully support unknown function handling + +* 64 bit Windows (x64) +* 32 bit Windows (x86) +* 64 bit Linux (x64) +* 32 bit Linux (x86) +* 64 bit Arm (aarch64) +* 32 bit Arm (aarch32) + + +Platforms not listed will use a fallback C Code path that relies on tail-call optimization to work. +No guarantees are made about the use of the fallback code paths. + +## Tests + +To build tests, make sure that the `BUILD_TESTS` option is set to true. Using +the command line, this looks like `-D BUILD_TESTS=ON`. + +This project is configured to run with `ctest`, which makes it easy to run the +tests. To run the tests, change the directory to that of the build direction, and +execute `ctest`. + +More details can be found in the [README.md](./tests/README.md) for the tests +directory of this project. diff --git a/local/recipes/libs/vulkan-loader/source/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/CMakeLists.txt new file mode 100644 index 0000000000..a30752492c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/CMakeLists.txt @@ -0,0 +1,293 @@ +# ~~~ +# Copyright (c) 2014-2023 Valve Corporation +# Copyright (c) 2014-2023 LunarG, Inc. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2023 RasterGrid Kft. +# +# 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. +# ~~~ +cmake_minimum_required(VERSION 3.22.1) + +project(VULKAN_LOADER VERSION 1.4.321 LANGUAGES C) + +option(CODE_COVERAGE "Enable Code Coverage" OFF) +if (CODE_COVERAGE) + include(scripts/CodeCoverage.cmake) + add_code_coverage_all_targets() +endif() + + +# This variable enables downstream users to customize the target API +# variant (e.g. Vulkan SC) +set(API_TYPE "vulkan") + +add_subdirectory(scripts) + +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_C_EXTENSIONS OFF) +set(CMAKE_C_VISIBILITY_PRESET "hidden") +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + +# By default, loader & tests are built without sanitizers +# Use these options to force a specific sanitizer on the loader and test executables +if (UNIX) + option(LOADER_ENABLE_ADDRESS_SANITIZER "Linux & macOS only: Advanced memory checking" OFF) + option(LOADER_ENABLE_THREAD_SANITIZER "Linux & macOS only: Advanced thread checking" OFF) +endif() + +if(WIN32) + # Optional: Allow specify the exact version used in the loader dll + # Format is major.minor.patch.build + set(BUILD_DLL_VERSIONINFO "" CACHE STRING "Set the version to be used in the loader.rc file. Default value is the currently generated header version") +endif() + +find_package(VulkanHeaders CONFIG QUIET) + +include(GNUInstallDirs) + +set(GIT_BRANCH_NAME "--unknown--") +set(GIT_TAG_INFO "--unknown--") +find_package (Git) +if (GIT_FOUND AND EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git/HEAD") + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + OUTPUT_VARIABLE GIT_TAG_INFO) + string(REGEX REPLACE "\n$" "" GIT_TAG_INFO "${GIT_TAG_INFO}") + + file(READ "${CMAKE_CURRENT_LIST_DIR}/.git/HEAD" GIT_HEAD_REF_INFO) + if (GIT_HEAD_REF_INFO) + string(REGEX MATCH "ref: refs/heads/(.*)" _ ${GIT_HEAD_REF_INFO}) + if (CMAKE_MATCH_1) + set(GIT_BRANCH_NAME ${CMAKE_MATCH_1}) + else() + set(GIT_BRANCH_NAME ${GIT_HEAD_REF_INFO}) + endif() + string(REGEX REPLACE "\n$" "" GIT_BRANCH_NAME "${GIT_BRANCH_NAME}") + endif() +endif() + +# Enable IDE GUI folders. "Helper targets" that don't have interesting source code should set their FOLDER property to this +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set(LOADER_HELPER_FOLDER "Helper Targets") + +if(UNIX) + set(FALLBACK_CONFIG_DIRS "/etc/xdg" CACHE STRING + "Search path to use when XDG_CONFIG_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant.") + set(FALLBACK_DATA_DIRS "/usr/local/share:/usr/share" CACHE STRING + "Search path to use when XDG_DATA_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant.") + set(SYSCONFDIR "" CACHE STRING + "System-wide search directory. If not set or empty, CMAKE_INSTALL_FULL_SYSCONFDIR and /etc are used.") +endif() + +if(WIN32) + option(ENABLE_WIN10_ONECORE "Link the loader with OneCore umbrella libraries" OFF) +endif() + +add_library(platform_wsi INTERFACE) +if(WIN32) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_WIN32_KHR) +elseif(ANDROID) + message(FATAL_ERROR "Android build not supported!") +elseif(APPLE) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_METAL_EXT) + if (IOS) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_IOS_MVK) + endif() + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_MACOS_MVK) + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "Linux|BSD|DragonFly|GNU") + option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON) + option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON) + option(BUILD_WSI_XLIB_XRANDR_SUPPORT "Build X11 Xrandr WSI support" ON) + option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON) + option(BUILD_WSI_DIRECTFB_SUPPORT "Build DirectFB WSI support" OFF) + + find_package(PkgConfig REQUIRED QUIET) # Use PkgConfig to find Linux system libraries + + if(BUILD_WSI_XCB_SUPPORT) + pkg_check_modules(XCB REQUIRED QUIET IMPORTED_TARGET xcb) + pkg_get_variable(XCB_INCLUDE_DIRS xcb includedir) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_XCB_KHR) + target_include_directories(platform_wsi INTERFACE ${XCB_INCLUDE_DIRS}) + endif() + if(BUILD_WSI_XLIB_SUPPORT) + pkg_check_modules(X11 REQUIRED QUIET IMPORTED_TARGET x11) + pkg_get_variable(XLIB_INCLUDE_DIRS x11 includedir) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_XLIB_KHR) + target_include_directories(platform_wsi INTERFACE ${XLIB_INCLUDE_DIRS}) + if(BUILD_WSI_XLIB_XRANDR_SUPPORT) + pkg_check_modules(XRANDR REQUIRED QUIET IMPORTED_TARGET xrandr) + pkg_get_variable(XLIB_XRANDR_INCLUDE_DIRS xrandr includedir) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_XLIB_XRANDR_EXT) + target_include_directories(platform_wsi INTERFACE ${XLIB_XRANDR_INCLUDE_DIRS}) + endif() + endif() + if(BUILD_WSI_WAYLAND_SUPPORT) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_WAYLAND_KHR) + endif() + if(BUILD_WSI_DIRECTFB_SUPPORT) + pkg_check_modules(DirectFB QUIET REQUIRED IMPORTED_TARGET directfb) + pkg_get_variable(DIRECTFB_INCLUDE_DIRS directfb includedir) + target_compile_definitions(platform_wsi INTERFACE VK_USE_PLATFORM_DIRECTFB_EXT) + # vulkan_core.h includes but the header is installed to directfb/directfb.h + target_include_directories(platform_wsi INTERFACE ${DIRECTFB_INCLUDE_DIRS} ${DIRECTFB_INCLUDE_DIRS}/directfb) + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "QNX") + message(FATAL_ERROR "See BUILD.md for QNX build") +elseif(CMAKE_SYSTEM_NAME MATCHES "Fuchsia") + message(FATAL_ERROR "Fuchsia uses Chromium build. See BUILD.gn") +else() + message(FATAL_ERROR "Unsupported Platform!") +endif() + +add_library(loader_common_options INTERFACE) +target_link_libraries(loader_common_options INTERFACE platform_wsi) + +# Enable beta Vulkan extensions +target_compile_definitions(loader_common_options INTERFACE VK_ENABLE_BETA_EXTENSIONS) + +string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSTEM_PROCESSOR) + +option(BUILD_WERROR "Enable warnings as errors") + +# Set warnings as errors and the main diagnostic flags +# Must be set first so the warning silencing later on works properly +# Note that clang-cl.exe should use MSVC flavor flags, not GNU +if (CMAKE_C_COMPILER_ID STREQUAL "MSVC" OR (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "MSVC")) + if (BUILD_WERROR) + target_compile_options(loader_common_options INTERFACE $<$:/WX>) + endif() + target_compile_options(loader_common_options INTERFACE $<$:/W4>) +elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") + # using GCC or Clang with the regular front end + if (BUILD_WERROR) + target_compile_options(loader_common_options INTERFACE $<$:-Werror>) + endif() + target_compile_options(loader_common_options INTERFACE + $<$:-Wall> + $<$:-Wextra> + ) +endif() + +if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(loader_common_options INTERFACE $<$:-Wno-missing-field-initializers>) + + # need to prepend /clang: to compiler arguments when using clang-cl + if (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND "${CMAKE_C_COMPILER_FRONTEND_VARIANT}" MATCHES "MSVC") + target_compile_options(loader_common_options INTERFACE $<$:/clang:-fno-strict-aliasing>) + else() + target_compile_options(loader_common_options INTERFACE $<$:-fno-strict-aliasing>) + endif() + + if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + target_compile_options(loader_common_options INTERFACE + $<$:-Wno-stringop-truncation> + $<$:-Wno-stringop-overflow> + ) + if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 7.1) + target_compile_options(loader_common_options INTERFACE $<$:-Wshadow=local>) #only added in GCC 7 + endif() + endif() + + target_compile_options(loader_common_options INTERFACE $<$:-Wpointer-arith>) + + # Force GLIBC to use the 64 bit interface for file operations instead of 32 bit - More info in issue #1551 + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") + target_compile_definitions(loader_common_options INTERFACE _FILE_OFFSET_BITS=64) + endif() +endif() + +if(CMAKE_C_COMPILER_ID MATCHES "MSVC" OR (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "MSVC")) + # /sdl: Enable additional security checks + # /GR-: Disable RTTI + # /guard:cf: Enable control flow guard + # /wd4152: Disable warning on conversion of a function pointer to a data pointer + # /wd4201: Disable warning on anonymous struct/unions + target_compile_options(loader_common_options INTERFACE + $<$:/sdl> + $<$:/GR-> + $<$:/guard:cf> + $<$:/wd4152> + $<$:/wd4201> + ) + + # Enable control flow guard + target_link_options(loader_common_options INTERFACE "LINKER:/guard:cf") + + # Prevent from polluting the code. guards against things like MIN and MAX + target_compile_definitions(loader_common_options INTERFACE WIN32_LEAN_AND_MEAN) + + # For some reason Advapi32.lib needs to be explicitely linked to when building for Arm (32 bit) on Windows, but isn't required on any other architecture + if (SYSTEM_PROCESSOR MATCHES "arm" AND CMAKE_SIZEOF_VOID_P EQUAL 4) + target_link_libraries(loader_common_options INTERFACE Advapi32) + endif() +endif() + +# DEBUG enables runtime loader ICD verification +# Add git branch and tag info in debug mode +target_compile_definitions(loader_common_options INTERFACE $<$:DEBUG;GIT_BRANCH_NAME="${GIT_BRANCH_NAME}";GIT_TAG_INFO="${GIT_TAG_INFO}">) + +if (NOT (WIN32 OR APPLE)) + # Check for the existance of the secure_getenv or __secure_getenv commands + include(CheckFunctionExists) + + check_function_exists(secure_getenv HAVE_SECURE_GETENV) + check_function_exists(__secure_getenv HAVE___SECURE_GETENV) + + if (HAVE_SECURE_GETENV) + target_compile_definitions(loader_common_options INTERFACE HAVE_SECURE_GETENV) + endif() + if (HAVE___SECURE_GETENV) + target_compile_definitions(loader_common_options INTERFACE HAVE___SECURE_GETENV) + endif() + if (NOT (HAVE_SECURE_GETENV OR HAVE___SECURE_GETENV)) + message(WARNING "Using non-secure environmental lookups. This loader will not properly disable environent variables when run with elevated permissions.") + endif() +endif() + +option(LOADER_CODEGEN "Enable vulkan loader code generation") +if(LOADER_CODEGEN) + find_package(Python3 REQUIRED) + add_custom_target(loader_codegen + COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/scripts/generate_source.py + "${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry" + --generated-version ${VulkanHeaders_VERSION} --incremental --api ${API_TYPE} + ) +endif() + +if(UNIX) + target_compile_definitions(loader_common_options INTERFACE FALLBACK_CONFIG_DIRS="${FALLBACK_CONFIG_DIRS}" FALLBACK_DATA_DIRS="${FALLBACK_DATA_DIRS}") + + if(NOT (SYSCONFDIR STREQUAL "")) + # SYSCONFDIR is specified, use it and do not force /etc. + target_compile_definitions(loader_common_options INTERFACE SYSCONFDIR="${SYSCONFDIR}") + else() + target_compile_definitions(loader_common_options INTERFACE SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") + + # Make sure /etc is searched by the loader + if(NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc")) + target_compile_definitions(loader_common_options INTERFACE EXTRASYSCONFDIR="/etc") + endif() + endif() +endif() + +add_subdirectory(loader) + +option(BUILD_TESTS "Build Tests") +if (BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/CODE_OF_CONDUCT.md b/local/recipes/libs/vulkan-loader/source/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..a11610bd30 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/CODE_OF_CONDUCT.md @@ -0,0 +1 @@ +A reminder that this issue tracker is managed by the Khronos Group. Interactions here should follow the Khronos Code of Conduct (https://www.khronos.org/developers/code-of-conduct), which prohibits aggressive or derogatory language. Please keep the discussion friendly and civil. diff --git a/local/recipes/libs/vulkan-loader/source/CONTRIBUTING.md b/local/recipes/libs/vulkan-loader/source/CONTRIBUTING.md new file mode 100644 index 0000000000..8b826a02a2 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/CONTRIBUTING.md @@ -0,0 +1,158 @@ +# How to Contribute to Vulkan Source Repositories + +## The Repository + +The source code for the Vulkan Loader component is sponsored +by Khronos and LunarG. + +* [KhronosGroup/Vulkan-Loader](https://github.com/KhronosGroup/Vulkan-Loader) + +### The Vulkan Ecosystem Needs Your Help + +There are a couple of methods to identify areas of need: + +* Examine the [issues list](https://github.com/KhronosGroup/Vulkan-Loader/issues) + in this repository and look for issues that are of interest +* If you have your own work in mind, please open an issue to describe + it and assign it to yourself. + +Please feel free to contact any of the developers that are actively +contributing should you wish to coordinate further. + +Repository Issue labels: + +* _Bug_: These issues refer to invalid or broken functionality and are + the highest priority. +* _Enhancement_: These issues refer to ideas for extending or improving the + loader. + +It is the maintainers goal for all issues to be assigned within one business day +of their submission. +If you choose to work on an issue that is assigned, simply coordinate with the +current assignee. + +### How to Submit Fixes + +* **Ensure that the bug was not already reported or fixed** by searching on + GitHub under Issues and Pull Requests. +* Use the existing GitHub forking and pull request process. + This will involve + [forking the repository](https://help.github.com/articles/fork-a-repo/), + creating a branch with your commits, and then + [submitting a pull request](https://help.github.com/articles/using-pull-requests/). +* Please read and adhere to the style and process + [guidelines](#coding-conventions-and-formatting) enumerated below. +* Please base your fixes on the `main` branch. + SDK branches are generally not updated except for critical fixes needed to + repair an SDK release. +* Provide one or more tests which show a failure for the issue before your changes + but pass successfully with your changes. +* The resulting Pull Request will be assigned to a repository maintainer. + It is the maintainer's responsibility to ensure the Pull Request + passes the Google/LunarG internal CI processes. + Once the Pull Request has been approved and is passing internal CI, + a repository maintainer will merge the PR. + +#### Coding Conventions and Formatting + +* Use the + **[Google style guide](https://google.github.io/styleguide/cppguide.html)** + for source code with the following exceptions: + * The column limit is 132 (as opposed to the default value 80). + The clang-format tool will handle this. See below. + * The indent is 4 spaces instead of the default 2 spaces. + Again, the clang-format tool will handle this. + * If you can justify a reason for violating a rule in the guidelines, + then you are free to do so. Be prepared to defend your + decision during code review. This should be used responsibly. + An example of a bad reason is "I don't like that rule." + An example of a good reason is "This violates the style guide, + but it improves type safety." + +* Run **clang-format** on your changes to maintain consistent formatting + * There are `.clang-format` files present in the repository to define + clang-format settings which are found and used automatically by clang-format. + * **clang-format** binaries are available from the LLVM orginization, here: + [LLVM](https://clang.llvm.org/). + Our CI system currently uses clang-format version 16 to + check that the lines of code you have changed are formatted properly. + It is recommended that you use the same version to format your code prior + to submission. + * A sample git workflow may look like: + +> # Make changes to the source. +> $ git add -u . +> $ git clang-format --style=file +> # Check to see if clang-format made any changes and if they are OK. +> $ git add -u . +> $ git commit + +* **Commit Messages** + * Limit the subject line to 50 characters -- + this allows the information to display correctly in git/Github logs + * Begin subject line with a one-word component description followed + by a colon (e.g. loader, layers, tests, etc.) + * Separate subject from body with a blank line + * Wrap the body at 72 characters + * Capitalize the subject line + * Do not end the subject line with a period + * Use the body to explain what and why vs. how + * Use the imperative mode in the subject line. + This just means to write it as a command (e.g. Fix the sprocket) + +Strive for commits that implement a single or related set of functionality, +using as many commits as is necessary (more is better). + +Please ensure that the repository compiles and passes tests without +error for each commit in your pull request. +Note that to be accepted into the repository, the pull request must +pass all tests on all supported platforms. +The automatic Github continuous integration features +will assist in enforcing this requirement.* + +#### Generated Source Code + +The `loader/generated` directory contains source code that is created by several +generator scripts in the `scripts` directory. All changes to these scripts _must_ be submitted with the +corresponding generated output to keep the repository self-consistent. This requirement is enforced by both +GitHub actions. Regenerate source files after modifying any of the generator scripts and before building +and testing your changes. More details can be found in [BUILD.md](BUILD.md#generated-source-code). + +#### Testing Your Changes + +* In order to run tests, you must first build the loader with testing enabled (see details + in the BUILD.md file). +* If your changes expose an issue not previously tested against, please also provide one or more + tests which show a failure for the issue before your changes but pass successfully with your changes. +* Once built, simply change to the build folder, and type "ctest" + * This will run all tests the loader has defined at the time +* Additionally, once your change has begun the process of reviewing in Github, + it may be processed through the CI system. + * This may show additional failures on other platforms, so watch and be prepared to fix any + additional issues. + +#### Coding Conventions for [CMake](http://cmake.org) files + +* When editing configuration files for CMake, follow the style conventions of the surrounding code. + * The column limit is 132. + * The indent is 4 spaces. + * CMake functions are lower-case. + * Variable and keyword names are upper-case. + +### Contributor License Agreement (CLA) + +You will be prompted with a one-time "click-through" CLA dialog as part of +submitting your pull request or other contribution to GitHub. + +### License and Copyrights + +All contributions made to the Vulkan-Loader repository are Khronos branded +and as such, any new files need to have the Khronos license +(Apache 2.0 style) and copyright included. +Please see an existing file in this repository for an example. + +All contributions made to the LunarG repositories are to be made under +the Apache 2.0 license and any new files need to include this license +and any applicable copyrights. + +You can include your individual copyright after any existing copyrights. diff --git a/local/recipes/libs/vulkan-loader/source/GOVERNANCE.md b/local/recipes/libs/vulkan-loader/source/GOVERNANCE.md new file mode 100644 index 0000000000..274c4d6330 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/GOVERNANCE.md @@ -0,0 +1,49 @@ +# Vulkan Loader Repository Management + +## **Open Source Project Objectives** + +- Alignment with the Vulkan Specification and the Loader Specification + - [Vulkan Specification](https://github.com/KhronosGroup/Vulkan-Docs) + - [Loader Specification](loader/LoaderAndLayerInterface.md) +- IHV/ISV Enablement + - Updates of loader functionality should be available in a timely fashion + - Every effort will be made to be responsive to IHV/ISV issues with the loader +- Cross Platform Compatibility + - LunarG: Monitor for desktop (Windows and Linux) + - Continuous Integration: HW test farms operated by LunarG monitor various hardware/software platforms +- Repo Quality + - Repo remains in healthy state with all tests passing and good-quality, consistent codebase + - Continuous Integration: Along with Github, HW test farms operated by LunarG perform pre-commit cloud testing on pull-requests + +## **Roles and Definitions** + +- Contributor, Commenter, User + - Submitting contributions, creating issues, or using the contents of the repository +- Approver + - Experienced project members who have made significant technical contributions + - Write control: Approve pull/merge requests (verify submissions vs. acceptance criteria) +- Technical Project Leads + - Lead the project in terms of versioning, quality assurance, and overarching objectives + - Monitor github issues and drive timely resolution + - Designate new approvers + - Ensure project information such as the Readme, Contributing docs, wiki, etc., kept up-to-date + - Act as a facilitator in resolving technical conflicts + - Is a point-of-contact for project-related questions + +The technical project leads for this repository are: + +- **Charles Giessen** [charles@lunarg.com](mailto:charles@lunarg.com) +- **Mark Young** [marky@lunarg.com](mailto:marky@lunarg.com) + +## **Acceptance Criteria and Process** + +- All source code to include Khronos copyright and license (Apache 2.0). + - Additional copyrights of contributors appended +- Contributions are via pull requests + - Project leads will assigning approvers to contributor pull requests + - Approvers can self-assign their reviewers + - For complex or invasive contributions, Project Leads may request approval from specific reviewers + - At least one review approval is required to complete a pull request + - The goal is to be responsive to contributors while ensuring acceptance criteria is met and to facilitate their submissions + - Approval is dependent upon adherence to the guidelines in [CONTRIBUTING.md](CONTRIBUTING.md), and alignment with repository goals of maintainability, completeness, and quality + - Conflicts or questions will ultimately be resolved by the project leads diff --git a/local/recipes/libs/vulkan-loader/source/LICENSE.txt b/local/recipes/libs/vulkan-loader/source/LICENSE.txt new file mode 100644 index 0000000000..6599e310a4 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/LICENSE.txt @@ -0,0 +1,207 @@ +The majority of files in this project use the Apache 2.0 License. +There are a few exceptions and their license can be found in the source. +Any license deviations from Apache 2.0 are "more permissive" licenses. + +=========================================================================================== + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/local/recipes/libs/vulkan-loader/source/README.md b/local/recipes/libs/vulkan-loader/source/README.md new file mode 100644 index 0000000000..3f9193b045 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/README.md @@ -0,0 +1,54 @@ +# Vulkan Loader + +This project provides the Khronos official Vulkan Loader for all platforms except [Android](https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/) + +## Introduction + +Vulkan is an explicit API, enabling direct control over how GPUs actually work. +As such, Vulkan supports systems that have multiple GPUs, each running with a different driver, or ICD (Installable Client Driver). +Vulkan also supports multiple global contexts (instances, in Vulkan terminology). +The ICD loader is a library that is placed between a Vulkan application and any number of Vulkan drivers, in order to support multiple drivers and the instance-level functionality that works across these drivers. +Additionally, the loader manages inserting Vulkan layer libraries, such as validation layers, between an application and the drivers. + +This repository contains the Vulkan loader that is used for Linux, Windows, MacOS, and iOS. +There is also a separate loader, maintained by Google, which is used on Android. + +The following components are available in this repository: + +- [ICD Loader](loader/) +- [Loader Documentation](docs/LoaderInterfaceArchitecture.md) +- [Tests](tests/) + +## Contact Information + +- [Charles Giessen](mailto:charles@lunarg.com) +- [Mark Young](mailto:marky@lunarg.com) + +## Information for Developing or Contributing + +Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file in this repository for more details. +Please see the [GOVERNANCE.md](GOVERNANCE.md) file in this repository for repository management details. + +## How to Build and Run + +[BUILD.md](BUILD.md) includes directions for building all components. + +Architecture and interface information for the loader is in [docs/LoaderInterfaceArchitecture.md](docs/LoaderInterfaceArchitecture.md). + +## Version Tagging Scheme + +Updates to this repository which correspond to a new Vulkan specification release are tagged using the following format: `v<`_`version`_`>` (e.g., `v1.3.266`). + +**Note**: Marked version releases have undergone thorough testing but do not imply the same quality level as SDK tags. SDK tags follow the `vulkan-sdk-<`_`version`_`>.<`_`patch`_`>` format (e.g., `vulkan-sdk-1.3.266.0`). + +This scheme was adopted following the `1.3.266` Vulkan specification release. + +## License + +This work is released as open source under a Apache-style license from Khronos including a Khronos copyright. + +## Acknowledgements + +While this project has been developed primarily by LunarG, Inc., there are many other +companies and individuals making this possible: Valve Corporation, funding +project development; Khronos providing oversight and hosting of the project. diff --git a/local/recipes/libs/vulkan-loader/source/SECURITY.md b/local/recipes/libs/vulkan-loader/source/SECURITY.md new file mode 100644 index 0000000000..a421b2a2e6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + +Security updates are applied only to the latest release. + +## Reporting a Vulnerability + +If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released. + +Please disclose it at [security advisory](https://github.com/KhronosGroup/Vulkan-Loader/security/advisories/new). + +This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure. diff --git a/local/recipes/libs/vulkan-loader/source/docs/LoaderApplicationInterface.md b/local/recipes/libs/vulkan-loader/source/docs/LoaderApplicationInterface.md new file mode 100644 index 0000000000..c05f2f46bd --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/LoaderApplicationInterface.md @@ -0,0 +1,799 @@ + +[![Khronos Vulkan][1]][2] + +[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/" +[2]: https://www.khronos.org/vulkan/ + +# Application Interface to Loader +[![Creative Commons][3]][4] + + + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[4]: https://creativecommons.org/licenses/by-nd/4.0/ + +## Table of Contents + +- [Overview](#overview) +- [Interfacing with Vulkan Functions](#interfacing-with-vulkan-functions) + - [Vulkan Direct Exports](#vulkan-direct-exports) + - [Directly Linking to the Loader](#directly-linking-to-the-loader) + - [Dynamic Linking](#dynamic-linking) + - [Static Linking](#static-linking) + - [Indirectly Linking to the Loader](#indirectly-linking-to-the-loader) + - [Best Application Performance Setup](#best-application-performance-setup) + - [ABI Versioning](#abi-versioning) + - [Windows Dynamic Library Usage](#windows-dynamic-library-usage) + - [Linux Dynamic Library Usage](#linux-dynamic-library-usage) + - [MacOs Dynamic Library Usage](#macos-dynamic-library-usage) + - [Bundling the Loader With An Application](#bundling-the-loader-with-an-application) +- [Application Layer Usage](#application-layer-usage) + - [Meta-Layers](#meta-layers) + - [Implicit vs Explicit Layers](#implicit-vs-explicit-layers) + - [Override Layer](#override-layer) + - [Forcing Layer Source Folders](#forcing-layer-source-folders) + - [Exception for Elevated Privileges](#exception-for-elevated-privileges) + - [Forcing Layers to be Enabled on Windows, Linux and macOS](#forcing-layers-to-be-enabled-on-windows-linux-and-macos) + - [Overall Layer Ordering](#overall-layer-ordering) + - [Debugging Possible Layer Issues](#debugging-possible-layer-issues) +- [Application Usage of Extensions](#application-usage-of-extensions) + - [Instance and Device Extensions](#instance-and-device-extensions) + - [WSI Extensions](#wsi-extensions) + - [Unknown Extensions](#unknown-extensions) + - [Filtering Out Unknown Instance Extension Names](#filtering-out-unknown-instance-extension-names) +- [Physical Device Ordering](#physical-device-ordering) + +## Overview + +This is the Application-centric view of working with the Vulkan loader. +For the complete overview of all sections of the loader, please refer +to the [LoaderInterfaceArchitecture.md](LoaderInterfaceArchitecture.md) file. + +## Interfacing with Vulkan Functions + +There are several ways Vulkan functions may be interfaced through the loader: + + +### Vulkan Direct Exports + +The loader library on Windows, Linux, Android, and macOS will export all core +Vulkan entry-points and all appropriate Window System Interface (WSI) +entry-points. +This is done to make it simpler to get started with Vulkan development. +When an application links directly to the loader library in this way, the +Vulkan calls are simple *trampoline* functions that jump to the appropriate +dispatch table entry for the object they are given. + + +### Directly Linking to the Loader + +#### Dynamic Linking + +The loader is distributed as a dynamic library (.dll on Windows or .so on Linux +or .dylib on macOS) which gets installed to the system path for dynamic +libraries. +Furthermore, the dynamic library is generally installed to Windows +systems as part of driver installation and is generally provided on Linux +through the system package manager. +This means that applications can usually expect a copy of the loader to be +present on a system. +If applications want to be completely sure that a loader is present, they can +include a loader or runtime installer with their application. + +#### Static Linking + +In previous versions of the loader, it was possible to statically link the +loader. +**This was removed and is no longer possible.** +The decision to remove static linking was because of changes to the driver +which made older applications that statically linked unable to find newer +drivers. + +Additionally, static linking posed several problems: + - The loader can never be updated without re-linking the application + - The possibility that two included libraries could contain different versions + of the loader + - Could cause conflicts between the different loader versions + +The only exception to this is for macOS, but is not supported or tested. + +### Indirectly Linking to the Loader + +Applications are not required to link directly to the loader library, instead +they can use the appropriate platform-specific dynamic symbol lookup on the +loader library to initialize the application's own dispatch table. +This allows an application to fail gracefully if the loader cannot be found. +It also provides the fastest mechanism for the application to call Vulkan +functions. +An application only needs to query (via system calls such as `dlsym`) the +address of `vkGetInstanceProcAddr` from the loader library. +The application then uses `vkGetInstanceProcAddr` to load all functions +available, such as `vkCreateInstance`, `vkEnumerateInstanceExtensionProperties` +and `vkEnumerateInstanceLayerProperties` in a platform-independent way. + +### Best Application Performance Setup + +To get the best possible performance in a Vulkan application, the application +should set up its own dispatch table for every Vulkan API entry-point. +For every instance-level Vulkan command in the dispatch table, the function pointer +should be queried and filled in by using the results of `vkGetInstanceProcAddr`. +Additionally, for every device-level Vulkan command, the function pointer +should be queried and filled in using the results of `vkGetDeviceProcAddr`. + +*Why do this?* + +The answer comes in how the call chain of instance functions are implemented +versus the call chain of a device functions. +Remember, a [Vulkan instance is a high-level construct used to provide Vulkan +system-level information](LoaderInterfaceArchitecture.md#instance-specific). +Because of this, instance functions need to be broadcast to every available +driver on the system. +The following diagram shows an approximate view of an instance call chain with +three enabled layers: + +![Instance Call Chain](./images/loader_instance_chain.png) + +This is also how a Vulkan device function call chain looks if queried +using `vkGetInstanceProcAddr`. +On the other hand, a device function doesn't need to worry about the broadcast +because it knows specifically which associated driver and which associated +physical device the call should terminate at. +Because of this, the loader doesn't need to get involved between any enabled +layers and the driver. +Thus, using a loader-exported Vulkan device function, the call chain +in the same scenario as above would look like: + +![Loader Device Call Chain](./images/loader_device_chain_loader.png) + +An even better solution would be for an application to perform a +`vkGetDeviceProcAddr` call on all device functions. +This further optimizes the call chain by removing the loader all-together under +most scenarios: + +![Application Device Call Chain](./images/loader_device_chain_app.png) + +Also, notice if no layers are enabled, the application function pointers point +**directly to the driver**. +With many function calls, the lack of indirection in each adds up to non-trivial +performance savings. + +**NOTE:** There are some device functions which still require the loader to +intercept them with a *trampoline* and *terminator*. +There are very few of these, but they are typically functions which the loader +wraps with its own data. +In those cases, even the device call chain will continue to look like the +instance call chain. +One example of a device function requiring a *terminator* is +`vkCreateSwapchainKHR`. +For that function, the loader needs to potentially convert the KHR_surface +object into an driver-specific KHR_surface object prior to passing down the rest +of the function's information to the driver. + +Remember: + * `vkGetInstanceProcAddr` is used to query instance and physical device + functions, but can query all functions. + * `vkGetDeviceProcAddr` is only used to query device functions. + + +### ABI Versioning + +The Vulkan loader library will be distributed in various ways including Vulkan +SDKs, OS package distributions and Independent Hardware Vendor (IHV) driver +packages. +These details are beyond the scope of this document. +However, the name and versioning of the Vulkan loader library is specified so +an app can link to the correct Vulkan ABI library version. +ABI backwards compatibility is guaranteed for all versions with the same major +number (e.g. 1.0 and 1.1). + +#### Windows Dynamic Library Usage + +On Windows, the loader library encodes the ABI version in its name such that +multiple ABI incompatible versions of the loader can peacefully coexist on a +given system. +The Vulkan loader library file name is `vulkan-.dll`. +For example, for Vulkan version 1.X on Windows the library filename is +`vulkan-1.dll`. +This library file can typically be found in the `windows\system32` +directory (on 64-bit Windows installs, the 32-bit version of the loader with +the same name can be found in the `windows\sysWOW64` directory). + +#### Linux Dynamic Library Usage + +For Linux, shared libraries are versioned based on a suffix. +Thus, the ABI number is not encoded in the base of the library filename as on +Windows. + +On Linux, applications that have a hard dependency on Vulkan should request +linking to the unversioned name `libvulkan.so` in their build system. +For example by importing the CMake target `Vulkan::Vulkan` or by using the +output of `pkg-config --cflags --libs vulkan` as compiler flags. +As usual for Linux libraries, the compiler and linker will resolve this to +a dependency on the correct versioned SONAME, currently `libvulkan.so.1`. +Linux applications that load Vulkan-Loader dynamically at runtime do not +benefit from this mechanism, and should instead make sure to pass the +versioned name such as `libvulkan.so.1` to `dlopen()`, to ensure that they +load a compatible version. + +#### MacOs Dynamic Library Usage + +MacOs linking is similar to Linux, with the exception being that the standard +dynamic library is named `libvulkan.dylib` and the ABI versioned library is +currently named `libvulkan.1.dylib`. + + +### Bundling the Loader With An Application + +The Khronos loader is typically installed on platforms either in a +platform-specific way (i.e. packages on Linux) or as part of a driver install +(i.e. using the Vulkan Runtime installer on Windows). +Applications or engines may desire to install the Vulkan loader locally to their +execution tree as part of their own installation process. +This may be because providing the specific loader: + + 1) Guarantees certain Vulkan API exports are available in the loader + 2) Ensures certain loader behavior is well-known + 3) Provides consistency across user installation + +However, this is **strongly discouraged** because: + + 1) The packaged loader may not be compatible with future driver revisions +(this can be especially true on Windows where driver install locations can +change during updates to the OS) + 2) It can prevent the application/engine from taking advantage of new Vulkan +API version/extension exports + 3) The application/engine will miss out on important loader bug-fixes + 4) The packaged loader will not contain useful feature updates (like +improved loader debugability) + +Of course, even if an application/engine does initially release with a specific +version of the Khronos loader, it may chose to update or remove that loader at +some point in the future. +This could be due to the exposure of needed functionality in the loader as time +progresses. +But, that relies upon end-users correctly performing whatever update process is +necessary at that future time which may result in different behavior across +different user's systems. + +One better alternative, at least on Windows, is to package the Vulkan Runtime +installer for the desired version of the Vulkan loader with your product. +Then, the installation process can use that to ensure the end-user's system +is up to date. +The Runtime installer will detect the version already installed and will only +install a newer runtime if necessary. + +Another alternative is to write the application so it can fallback to earlier +versions of Vulkan yet display a warning indicating functionality is disabled +until the user updates their system to a specific runtime/driver. + + +## Application Layer Usage + +Applications desiring Vulkan functionality beyond what Vulkan drivers +on their system already expose, may use various layers to augment the API. +A layer cannot add new Vulkan core API entry-points that are not exposed in +Vulkan.h. +However, layers may offer implementations of extensions that introduce +additional entry-points beyond what is available without those layers. +These additional extension entry-points can be queried through the Vulkan +extension interface. + +A common use of layers is for API validation which can be enabled during +application development and left out when releasing the application. +This allows easy control of the overhead resulting from enabling validation of +the application's usage of the API, which wasn't always possible in previous +graphics APIs. + +To find out what layers are available to an application, use +`vkEnumerateInstanceLayerProperties`. +This will report all layers that have been discovered by the loader. +The loader looks in various locations to find layers on the system. +For more information see the +[Layer discovery](LoaderLayerInterface.md#layer-discovery) +section in the +[LoaderLayerInterface.md document](LoaderLayerInterface.md) document. + +To enable specific layers, simply pass the names of the layers to +enable in the `ppEnabledLayerNames` field of the `VkInstanceCreateInfo` during +a call to `vkCreateInstance`. +Once done, the layers that have been enabled will be active for all Vulkan functions +using the created `VkInstance`, and any of its child objects. + +**NOTE:** Layer ordering is important in several cases since some layers +interact with each other. +Be careful when enabling layers as this may be the case. +See the [Overall Layer Ordering](#overall-layer-ordering) section for more +information. + +The following code section shows how to go about enabling the +`VK_LAYER_KHRONOS_validation` layer. + +``` +char *instance_layers[] = { + "VK_LAYER_KHRONOS_validation" +}; +const VkApplicationInfo app = { + .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, + .pNext = NULL, + .pApplicationName = "TEST_APP", + .applicationVersion = 0, + .pEngineName = "TEST_ENGINE", + .engineVersion = 0, + .apiVersion = VK_API_VERSION_1_0, +}; +VkInstanceCreateInfo inst_info = { + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pNext = NULL, + .pApplicationInfo = &app, + .enabledLayerCount = 1, + .ppEnabledLayerNames = (const char *const *)instance_layers, + .enabledExtensionCount = 0, + .ppEnabledExtensionNames = NULL, +}; +err = vkCreateInstance(&inst_info, NULL, &demo->inst); +if (VK_ERROR_LAYER_NOT_PRESENT == err) { + // Couldn't find the validation layer +} +``` + +At `vkCreateInstance` and `vkCreateDevice`, the loader constructs call chains +that include the application specified (enabled) layers. +Order is important in the `ppEnabledLayerNames` array; array element 0 is the +topmost (closest to the application) layer inserted in the chain and the last +array element is closest to the driver. +See the [Overall Layer Ordering](#overall-layer-ordering) section for more +information on layer ordering. + +**NOTE:** *Device Layers Are Now Deprecated* +> `vkCreateDevice` originally was able to select layers in a similar manner to +`vkCreateInstance`. +> This led to the concept of "instance layers" and "device layers". +> It was decided by Khronos to deprecate the "device layer" functionality and +> only consider "instance layers". +> Therefore, `vkCreateDevice` will use the layers specified at +`vkCreateInstance`. +> Because of this, the following items have been deprecated: +> * `VkDeviceCreateInfo` fields: +> * `ppEnabledLayerNames` +> * `enabledLayerCount` +> * The `vkEnumerateDeviceLayerProperties` function + + +### Meta-Layers + +Meta-layers are layers which contain an ordered list of other layers to enable. +This is to allow grouping layers together in a specified order so that they can +interact properly. +Originally, this was used to group together the individual Vulkan Validation +layers in the proper order to avoid conflicts. +It was necessary because instead of a single Validation layer, validation was +split into multiple component layers. +The new `VK_LAYER_KHRONOS_validation` layer pulled everything into a single +layer, dropping the need for meta layers. +While not necessary for validation anymore, VkConfig does use meta layers to +group layers together based on user's preferences. +More can be found out about this functionality through both the +[VkConfig documentation](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md) +and the section later on the [Override Layer](#override-layer). + +Meta-layers are detailed more in the +[Meta-Layers](LoaderLayerInterface.md#meta-layers) section of the +[LoaderLayerInterface.md](LoaderLayerInterface.md) file in this folder. + + +### Implicit vs Explicit Layers + +![Different Types of Layers](./images/loader_layer_order.png) + +Explicit layers are layers which are enabled by an application (e.g. with the +vkCreateInstance function as mentioned previously). + +Implicit layers are enabled automatically by their very existence, unless +requiring an additional manual enable step, unlike explicit layers that must be +enabled explicitly. +For example, certain application environments (e.g. Steam or an automotive +infotainment system) may have layers which they always want enabled for all +applications that they start. +Other implicit layers may be for all applications started on a given system +(e.g. layers that overlay frames-per-second). + +Implicit layers have an additional requirement over explicit layers in that +they require being able to be disabled by an environmental variable. +This is due to the fact that they are not visible to the application and could +cause issues. +A good principle to keep in mind would be to define both an enable and disable +environment variable so the users can deterministically enable the +functionality. +On Desktop platforms (Windows, Linux, and macOS), these enable/disable settings +are defined in the layer's JSON file. + +Discovery of system-installed implicit and explicit layers is described later +in the [Layer discovery](LoaderLayerInterface.md#layer-discovery) +section in the +[LoaderLayerInterface.md](LoaderLayerInterface.md) document. + +Implicit and explicit layers may be found in different locations based on the +underlying operating system. +The table below details more information: + + + + + + + + + + + + + + + + + + + + + + +
Operating SystemImplicit Layer Identification
WindowsImplicit layers are located in a different Windows registry location + than explicit layers.
LinuxImplicit layers are located in a different directory location than + explicit layers.
AndroidThere is **No Support For Implicit Layers** on Android.
macOSImplicit layers are located in a different directory location than + explicit layers.
+ + +#### Override Layer + +The "Override Layer" is a special implicit meta-layer created by the +[VkConfig](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md) +tool and available by default when the tool is running. +Once VkConfig exits, the override layer is removed, and the system should +return to standard Vulkan behavior. +Whenever the override layer is present in the layer search path, the loader will +pull it into the layer call stack with the standard implicit layers along with +all layers contained in the list of layers to load. +This allows an end-user or developer to easily force on any number of layers +and settings via VkConfig. + +The override layer is discussed more in the +[Override Meta-Layer](LoaderLayerInterface.md#override-meta-layer) section of the +[LoaderLayerInterface.md](LoaderLayerInterface.md) file in this folder. + + +### Forcing Layer Source Folders + +Developers may need to use special, pre-production layers, without modifying +the system-installed layers. + +This can be accomplished in one of two ways: + + 1. Selecting specific layer paths using the +[VkConfig](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md) +tool shipped with the Vulkan SDK. + 2. Directing the loader to look for layers in specific files and/or folders by using the +`VK_LAYER_PATH` and/or `VK_IMPLICIT_LAYER_PATH` environment variables. + +The `VK_LAYER_PATH` and `VK_IMPLICIT_LAYER_PATH` environment variables can contain multiple +paths separated by the operating-system specific path separator. +On Windows, this is a semicolon (`;`), while on Linux and macOS it is a colon +(`:`). + +If `VK_LAYER_PATH` exists, the files and/or folders listed will be scanned for explicit +layer manifest files. +Implicit layer discovery is unaffected by this environment variable. + +If `VK_IMPLICIT_LAYER_PATH` exists, the files and/or folders listed will be scanned for +implicit layer manifest files. +Explicit layer discovery is unaffected by this environment variable. + +Each directory listed in `VK_LAYER_PATH` and `VK_IMPLICIT_LAYER_PATH` should be the full +pathname of a folder containing layer manifest files. + +See the +[Table of Debug Environment Variables](LoaderInterfaceArchitecture.md#table-of-debug-environment-variables) +in the [LoaderInterfaceArchitecture.md document](LoaderInterfaceArchitecture.md) +for more details. + + +#### Exception for Elevated Privileges + +For security reasons, `VK_LAYER_PATH` and `VK_IMPLICIT_LAYER_PATH` are ignored if running +with elevated privileges. +Because of this, the environment variables can only be used for applications that do not +use elevated privileges. + +For more information see +[Elevated Privilege Caveats](LoaderInterfaceArchitecture.md#elevated-privilege-caveats) +in the top-level +[LoaderInterfaceArchitecture.md][LoaderInterfaceArchitecture.md] document. + + +### Forcing Layers to be Enabled on Windows, Linux and macOS + +Developers may want to enable layers that are not enabled by the given +application they are using. + +This can be also be accomplished in one of two ways: + + 1. Selecting specific layers using the +[VkConfig](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md) +tool shipped with the Vulkan SDK. + 2. Directing the loader to look for additional layers by name using the +`VK_INSTANCE_LAYERS` environment variable. + +Both can be used to enable additional layers which are not specified (enabled) +by the application at `vkCreateInstance`. + +The `VK_INSTANCE_LAYERS` environment variable is a list of layer names to enable +separated by the operating-system specific path separator. +On Windows, this is a semicolon (`;`), while on Linux and macOS it is a colon +(`:`). +The order of the names is relevant with the first layer name in the list being +the top-most layer (closest to the application) and the last layer name in the +list being the bottom-most layer (closest to the driver). +See the [Overall Layer Ordering](#overall-layer-ordering) section for more +information. + +Application specified layers and user specified layers (via environment +variables) are aggregated and duplicates removed by the loader when enabling +layers. +Layers specified via environment variable are top-most (closest to the +application) while layers specified by the application are bottom-most. + +An example of using these environment variables to activate the validation +layer `VK_LAYER_KHRONOS_validation` on Linux or macOS is as follows: + +``` +> $ export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation +``` + +See the +[Table of Debug Environment Variables](LoaderInterfaceArchitecture.md#table-of-debug-environment-variables) +in the [LoaderInterfaceArchitecture.md document](LoaderInterfaceArchitecture.md) +for more details. + + +### Overall Layer Ordering + +The overall ordering of all layers by the loader based on the above looks +as follows: + +![Loader Layer Ordering](./images/loader_layer_order_calls.png) + +Ordering may also be important internally to the list of explicit layers. +Some layers may be dependent on other behavior being implemented before +or after the loader calls it. +For example: An overlay layer may want to use `VK_LAYER_KHRONOS_validation` +to verify that the overlay layer is behaving appropriately. +This requires putting the overlay layer closer to the application so that the +validation layer can intercept any Vulkan API calls the overlay layer needs to +make to function. + + +### Debugging Possible Layer Issues + +If it is possible that a layer is causing issues, there are several things that +can be tried which are documented in the +[Debugging Possible Layer Issues](LoaderDebugging.md#debugging-possible-layer-issues) +section of the [LoaderDebugging.mg](LoaderDebugging.md) document in the docs +folder. + + +## Application Usage of Extensions + +Extensions are optional functionality provided by a layer, the loader, or a +driver. +Extensions can modify the behavior of the Vulkan API and need to be specified +and registered with Khronos. +These extensions can be implemented by a Vulkan driver, the loader, or a layer +to expose functionality not available in the core API. +Information about various extensions can be found in the Vulkan Spec, and +vulkan.h header file. + + +### Instance and Device Extensions + +As hinted at in the +[Instance Versus Device](LoaderInterfaceArchitecture.md#instance-versus-device) +section of the main +[LoaderInterfaceArchitecture.md](LoaderInterfaceArchitecture.md) document, +there are two types of extensions: + * Instance Extensions + * Device Extensions + +An instance extension modifies existing behavior or implements new behavior on +instance-level objects, such as `VkInstance` and `VkPhysicalDevice`. +A device extension does the same for device-level objects, such as `VkDevice`, +`VkQueue`, and `VkCommandBuffer` as well as any children of those objects. + +It is **very** important to know what the type of an extension is because +instance extensions must be enabled with `vkCreateInstance` while device +extensions are enabled with `vkCreateDevice`. + +When calling `vkEnumerateInstanceExtensionProperties` and +`vkEnumerateDeviceExtensionProperties`, the loader discovers and aggregates all +extensions of their respective type from layers (both explicit and implicit), +drivers, and the loader before reporting them to the application. + +Looking at `vulkan.h`, both functions are very similar, +for example, the `vkEnumerateInstanceExtensionProperties` prototype looks as +follows: + +``` +VkResult + vkEnumerateInstanceExtensionProperties( + const char *pLayerName, + uint32_t *pPropertyCount, + VkExtensionProperties *pProperties); +``` + +While the `vkEnumerateDeviceExtensionProperties` prototype looks like: + +``` +VkResult + vkEnumerateDeviceExtensionProperties( + VkPhysicalDevice physicalDevice, + const char *pLayerName, + uint32_t *pPropertyCount, + VkExtensionProperties *pProperties); +``` + +The "pLayerName" parameter in these functions is used to select either a single +layer or the Vulkan platform implementation. +If "pLayerName" is NULL, extensions from Vulkan implementation components +(including loader, implicit layers, and drivers) are enumerated. +If "pLayerName" is equal to a discovered layer module name then only extensions +from that layer (which may be implicit or explicit) are enumerated. + +**Note:** While device layers are deprecated, the instance enabled layers are +still present in the device call-chain. + +Duplicate extensions (e.g. an implicit layer and driver might report support for +the same extension) are eliminated by the loader. +For duplicates, the driver version is reported and the layer version is culled. + +Also, extensions **must be enabled** (in `vkCreateInstance` or `vkCreateDevice`) +before the functions associated with the extensions can be used. +If an extension function is queried using either `vkGetInstanceProcAddr` or +`vkGetDeviceProcAddr`, but the extension has not been enabled, undefined behavior +could result. +The Validation layers will catch this invalid API usage. + + +### WSI Extensions + +Khronos-approved WSI extensions are available and provide Windows System +Integration support for various execution environments. +It is important to understand that some WSI extensions are valid for all +targets, but others are particular to a given execution environment (and +loader). +This Khronos loader (currently targeting Windows, Linux, macOS, Stadia, and +Fuchsia) only enables and directly exports those WSI extensions that are +appropriate to the current environment. +For the most part, the selection is done in the loader using compile-time +preprocessor flags. +All versions of the Khronos loader currently expose at least the following WSI +extension support: +- VK_KHR_surface +- VK_KHR_swapchain +- VK_KHR_display + +In addition, each of the following OS targets for the loader support target- +specific extensions: + +| Windowing System | Extensions available | +| ---------------- | ------------------------------------------ | +| Windows | VK_KHR_win32_surface | +| Linux (Wayland) | VK_KHR_wayland_surface | +| Linux (X11) | VK_KHR_xcb_surface and VK_KHR_xlib_surface | +| macOS (MoltenVK) | VK_MVK_macos_surface | +| QNX (Screen) | VK_QNX_screen_surface | + +It is important to understand that while the loader may support the various +entry-points for these extensions, there is a handshake required to actually +use them: +* At least one physical device must support the extension(s) +* The application must use such a physical device when creating a logical +device +* The application must request the extension(s) be enabled while creating the +instance or logical device (this depends on whether or not the given extension +works with an instance or a device) + +Only then can the WSI extension be properly used in a Vulkan program. + + +### Unknown Extensions + +With the ability to expand Vulkan so easily, extensions will be created that +the loader knows nothing about. +If the extension is a device extension, the loader will pass the unknown +entry-point down the device call chain ending with the appropriate +driver entry-points. +The same thing will happen if the extension is an instance extension which +takes a physical device parameter as its first component. +However, for all other instance extensions the loader will fail to load it. + +*But why doesn't the loader support unknown instance extensions?* +
+Let's look again at the instance call chain: + +![Instance call chain](./images/loader_instance_chain.png) + +Notice that for a normal instance function call, the loader has to handle +passing along the function call to the available drivers. +If the loader has no idea of the parameters or return value of the instance +call, it can't properly pass information along to the drivers. +There may be ways to do this, which will be explored in the future. +However, for now, the loader does not support instance extensions which don't +expose entry points that take a physical device as their first parameter. + +Because the device call-chain does not normally pass through the loader +*terminator*, this is not a problem for device extensions. +Additionally, since a physical device is associated with one driver, the loader +can use a generic *terminator* pointing to one driver. +This is because both of these extensions terminate directly in the +driver they are associated with. + +*Is this a big problem?* +
+No! +Most extension functionality only affects either a physical or logical device +and not an instance. +Thus, the overwhelming majority of extensions should be supported with direct +loader support. + +### Filtering Out Unknown Instance Extension Names + +In some cases, a driver may support instance extensions that are not supported +by the loader. +For the above reasons, the loader will filter out the names of these unknown +instance extensions when an application calls +`vkEnumerateInstanceExtensionProperties`. +Additionally, this behavior will cause the loader to emit an error during +`vkCreateInstance` if the application still attempts to use one of these +extensions. +The intent is to protect applications so that they don't inadvertently use +functionality which could lead to a crash. + +On the other hand, if the extension must be forced on, the filtering may be +disabled by defining the `VK_LOADER_DISABLE_INST_EXT_FILTER` environment +variable to a non-zero number. +This will effectively disable the loader's filtering of instance extension +names. + +## Physical Device Ordering + +Prior to the 1.3.204 loader, physical devices on Linux could be returned in an +inconsistent order. +To remedy this, the Vulkan loader will now sort devices once they have been +received from the drivers (before returning the information to any enabled +layers) in the following fashion: + * Sort based on device type (Discrete, Integrated, Virtual, all others) + * Sort internal to the types based on PCI information (Domain, Bus, Device, and + Function). + +This allows for a consistent physical device order from run to run on the same +system, unless the actual underlying hardware changes. + +A new environment variable is defined to give users the ability to force a +specific device, `VK_LOADER_DEVICE_SELECT`. +This environment variable should be set to the desired devices hex value for +Vendor Id and Device Id (as returned from `vkGetPhysicalDeviceProperties` in +the `VkPhysicalDeviceProperties` structure). +It should look like the following: + +``` +set VK_LOADER_DEVICE_SELECT=0x10de:0x1f91 +``` + +This will force on the device with a vendor ID of "0x10de" and a device ID +of "0x1f91". +If that device is not found, this is simply ignored. + +All device selection work done in the loader can be disabled by setting the +environment variable `VK_LOADER_DISABLE_SELECT` to a non-zero value. +This is intended for debug purposes to narrow down any issues with the loader +device selection mechanism, but can be used by others. + +[Return to the top-level LoaderInterfaceArchitecture.md file.](LoaderInterfaceArchitecture.md) diff --git a/local/recipes/libs/vulkan-loader/source/docs/LoaderDebugging.md b/local/recipes/libs/vulkan-loader/source/docs/LoaderDebugging.md new file mode 100644 index 0000000000..343e6f728a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/LoaderDebugging.md @@ -0,0 +1,363 @@ + +[![Khronos Vulkan][1]][2] + +[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/" +[2]: https://www.khronos.org/vulkan/ + +# Debugging The Vulkan Desktop Loader +[![Creative Commons][3]][4] + + + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[4]: https://creativecommons.org/licenses/by-nd/4.0/ +## Table of Contents + +- [Debugging Issues](#debugging-issues) +- [Loader Logging](#loader-logging) +- [Debugging Possible Layer Issues](#debugging-possible-layer-issues) + - [Enable Layer Logging](#enable-layer-logging) + - [Disable Layers](#disable-layers) + - [Selectively Re-enable Layers](#selectively-re-enable-layers) +- [Allow specific layers to be ignored by VK\_LOADER\_LAYERS\_DISABLE](#allow-specific-layers-to-be-ignored-by-vk_loader_layers_disable) +- [Debugging Possible Driver Issues](#debugging-possible-driver-issues) + - [Enable Driver Logging](#enable-driver-logging) + - [Selectively Enable Specific Drivers](#selectively-enable-specific-drivers) + +## Debugging Issues + +If your application is crashing or behaving weirdly, the loader provides +several mechanisms for you to debug the issues. + +**NOTE**: This functionality is all specific to the desktop Vulkan loader and +does not work for the Android loader. + +## Loader Logging + +The Vulkan desktop loader has added logging functionality that can be enabled by +using the `VK_LOADER_DEBUG` environment variable. +The results will be output to the standard output, but will also be passed to +any `VK_EXT_debug_utils` messengers present as well. +The variable can be set to a comma-delimited list of debug level options which +include: + + * error      Report any errors encountered by + the loader + * warn      Report any warnings encountered by + the loader + * info        Report info-level + messages generated by the loader + * debug    Report debug-level messages generated by the + loader + * layer      Report all layer-specific messages + generated by the loader + * driver     Report all driver-specific messages + generated by the loader + * all          Report all + messages generated by the loader (includes all of the above) + +If you're not sure where the issue comes from, at least set it to output all +messages through the "info" level: + +``` +set VK_LOADER_DEBUG=error,warn,info +``` + +Then, you can search the list for any errors or warnings that might provide a +hint at why you're seeing issues. + +For more info on enabling loader logging, refer to the +[Enable Loader Debug Layer Output](LoaderApplicationInterface.md#enable-loader-debug-layer-output) +and the +[Table of Debug Environment Variables](LoaderInterfaceArchitecture.md#table-of-debug-environment-variables) +below. + +## Debugging Possible Layer Issues + +### Enable Layer Logging + +If you suspect a layer issue, set the loader logging to specifically output +layer messages in addition to warnings and errors: + +``` +set VK_LOADER_DEBUG=error,warn,layer +``` + +Most important layer messages should go out with error or warning levels set, +but this will provide more layer-specific info as well such as: + * What layers are found + * Where they were found + * If they are implicit, what environment variables can be used to disable them + * If there is any incompatibility with a given layer, this could include: + * The layer library file (.so/.dll) wasn't found + * The layer library is the wrong bit-depth for the executing application + (i.e. 32-bit vs 64-bit) + * The layer itself doesn't support the application desired version of Vulkan + * If any environment variables are disabling any layers + +For example, the output of the loader looking for implicit layers may look like +the following: + +``` +[Vulkan Loader] LAYER: Searching for implicit layer manifest files +[Vulkan Loader] LAYER: In following locations: +[Vulkan Loader] LAYER: /home/${USER}/.config/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /etc/xdg/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /usr/local/etc/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /etc/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /home/${USER}/.local/share/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /home/${USER}/.local/share/flatpak/exports/share/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /usr/local/share/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: /usr/share/vulkan/implicit_layer.d +[Vulkan Loader] LAYER: Found the following files: +[Vulkan Loader] LAYER: /home/${USER}/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json +[Vulkan Loader] LAYER: /home/${USER}/.local/share/vulkan/implicit_layer.d/steamfossilize_i386.json +[Vulkan Loader] LAYER: /home/${USER}/.local/share/vulkan/implicit_layer.d/steamfossilize_x86_64.json +[Vulkan Loader] LAYER: /home/${USER}/.local/share/vulkan/implicit_layer.d/steamoverlay_i386.json +[Vulkan Loader] LAYER: /home/${USER}/.local/share/vulkan/implicit_layer.d/steamoverlay_x86_64.json +[Vulkan Loader] LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json +[Vulkan Loader] LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json +``` + +Then, the loading of layer libraries is reported similar to this: + +``` +[Vulkan Loader] DEBUG | LAYER : Loading layer library libVkLayer_khronos_validation.so +[Vulkan Loader] INFO | LAYER : Insert instance layer VK_LAYER_KHRONOS_validation (libVkLayer_khronos_validation.so) +[Vulkan Loader] DEBUG | LAYER : Loading layer library libVkLayer_MESA_device_select.so +[Vulkan Loader] INFO | LAYER : Insert instance layer VK_LAYER_MESA_device_select (libVkLayer_MESA_device_select.so) +``` + +Finally, when the Vulkan instance is created, you can see the full instance +call-chain from a functional standpoint with output like this: + +``` +[Vulkan Loader] LAYER: vkCreateInstance layer callstack setup to: +[Vulkan Loader] LAYER: +[Vulkan Loader] LAYER: || +[Vulkan Loader] LAYER: +[Vulkan Loader] LAYER: || +[Vulkan Loader] LAYER: VK_LAYER_MESA_device_select +[Vulkan Loader] LAYER: Type: Implicit +[Vulkan Loader] LAYER: Enabled By: Implicit Layer +[Vulkan Loader] LAYER: Disable Env Var: NODEVICE_SELECT +[Vulkan Loader] LAYER: Manifest: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json +[Vulkan Loader] LAYER: Library: libVkLayer_MESA_device_select.so +[Vulkan Loader] LAYER: || +[Vulkan Loader] LAYER: VK_LAYER_KHRONOS_validation +[Vulkan Loader] LAYER: Type: Explicit +[Vulkan Loader] LAYER: Enabled By: By the Application +[Vulkan Loader] LAYER: Manifest: /usr/share/vulkan/explicit_layer.d/VkLayer_khronos_validation.json +[Vulkan Loader] LAYER: Library: libVkLayer_khronos_validation.so +[Vulkan Loader] LAYER: || +[Vulkan Loader] LAYER: +``` + +In this scenario, two layers were used (the same two that were loaded earlier): +* `VK_LAYER_MESA_device_select` +* `VK_LAYER_KHRONOS_validation` + +This information now shows us that the `VK_LAYER_MESA_device_select` is loaded +first, followed by `VK_LAYER_KHRONOS_validation` which will then continue into +any available drivers. +It also shows that `VK_LAYER_MESA_device_select` is an implicit layer which +implies that it wasn't directly enabled by the application. +On the other hand, `VK_LAYER_KHRONOS_validation` is shown as an explicit layer +which indicates that it was likely enabled by the application. + +### Disable Layers + +**NOTE:** This functionality is only available with Loaders built with version +1.3.234 of the Vulkan headers and later. + +Sometimes, implicit layers can cause issues with an application. +Because of this, the next step is to try to disable one or more of the listed +implicit layers. +You can use the filtering environment variables +(`VK_LOADER_LAYERS_ENABLE` and `VK_LOADER_LAYERS_DISABLE`) to selectively enable +or disable various layers. +If you're not sure what to do, try disabling all implicit layers manually by +setting `VK_LOADER_LAYERS_DISABLE` to `~implicit~`. + +``` + set VK_LOADER_LAYERS_DISABLE=~implicit~ +``` + +This will disable all implicit layers and the loader will report any disabled +layers to the logging output when layer logging is enabled in the following way: + +``` +[Vulkan Loader] WARNING | LAYER: Implicit layer "VK_LAYER_MESA_device_select" forced disabled because name matches filter of env var 'VK_LOADER_LAYERS_DISABLE'. +[Vulkan Loader] WARNING | LAYER: Implicit layer "VK_LAYER_AMD_switchable_graphics_64" forced disabled because name matches filter of env var 'VK_LOADER_LAYERS_DISABLE'. +[Vulkan Loader] WARNING | LAYER: Implicit layer "VK_LAYER_Twitch_Overlay" forced disabled because name matches filter of env var 'VK_LOADER_LAYERS_DISABLE'. +``` + +### Selectively Re-enable Layers + +**NOTE:** This functionality is only available with Loaders built with version +1.3.234 of the Vulkan headers and later. + +When trying to diagnose problems caused by layers, it is useful to first disable +all layers and re-enable each layer individually. +If the problem reappears, then it is immediately clear which layer is the source +of the issue. + +For example, from the above given list of disabled layers, let’s selectively +re-enable one: + +``` +set VK_LOADER_LAYERS_DISABLE=~implicit~ +set VK_LOADER_LAYERS_ENABLE=*AMD* +``` + +This would keep both the "VK_LAYER_MESA_device_select" and +"VK_LAYER_Twitch_Overlay" layers disabled, while enabling the +"VK_LAYER_AMD_switchable_graphics_64" layer. +If everything continues to work, then the evidence seems to suggest the issue is +likely not related to the AMD layer. +This would lead to enabling one other layer and trying again: + +``` +set VK_LOADER_LAYERS_DISABLE=~implicit~ +set VK_LOADER_LAYERS_ENABLE=*AMD*,*twitch* +``` + +And so forth. + +For more info on how to use the filtering environment variables, refer to the +[Layer Filtering](LoaderLayerInterface.md#layer-filtering) section of the +[LoaderLayerInterface](LoaderLayerInterface.md) document. + +## Allow specific layers to be ignored by VK_LOADER_LAYERS_DISABLE + +**NOTE:** VK_LOADER_LAYERS_DISABLE is only available with Loaders built with version +1.3.262 of the Vulkan headers and later. + +When using `VK_LOADER_LAYERS_DISABLE` to disable implicit layers, it is possible +to allow specific layers to be enabled using `VK_LOADER_LAYERS_ENABLE`. +However, this has the effect of *forcing* layers to be enabled, which is not +always desired. +Implicit layers have the ability to only be enabled when a layer specified +environment variable is set, allow for context dependent enablement. +`VK_LOADER_LAYERS_ENABLE` ignores that context. + +Thus, a different environment variable is needed: `VK_LOADER_LAYERS_ALLOW` + +The behavior of `VK_LOADER_LAYERS_ALLOW` is similar to `VK_LOADER_LAYERS_ENABLE` +except that it does not force a layer to be enabled. +The way to think about this environment variable is that every layer matching +`VK_LOADER_LAYERS_ALLOW` is excluded from being forcibly disabled by +`VK_LOADER_LAYERS_DISABLE`. +this allows for implicit layers that are context dependent to be enabled +depending on the relevant context instead of force enabling them. + +Example: Disable all implicit layers except for any layers that have steam or +mesa in their name. +``` +set VK_LOADER_LAYERS_DISABLE=~implicit~ +set VK_LOADER_LAYERS_ALLOW=*steam*,*Mesa* +``` + +## Debugging Possible Driver Issues + +### Enable Driver Logging + +**NOTE:** This functionality is only available with Loaders built with version +1.3.234 of the Vulkan headers and later. + +If you suspect a driver issue, set the loader logging to specifically output +driver messages: + +``` +set VK_LOADER_DEBUG=error,warn,driver +``` + +Most important driver messages should go out with error or warning levels set, +but this will provide more driver-specific info as well such as: + * What drivers are found + * Where they were found + * If there is any incompatibility with a given driver + * If any environment variables are disabling any of the drivers + +For example, the output of the loader looking for drivers on a Linux system may +look like the following (NOTE: additional spaces have been removed from the +output for easier reading): + +``` +[Vulkan Loader] DRIVER: Searching for driver manifest files +[Vulkan Loader] DRIVER: In following folders: +[Vulkan Loader] DRIVER: /home/$(USER)/.config/vulkan/icd.d +[Vulkan Loader] DRIVER: /etc/xdg/vulkan/icd.d +[Vulkan Loader] DRIVER: /etc/vulkan/icd.d +[Vulkan Loader] DRIVER: /home/$(USER)/.local/share/vulkan/icd.d +[Vulkan Loader] DRIVER: /home/$(USER)/.local/share/flatpak/exports/share/vulkan/icd.d +[Vulkan Loader] DRIVER: /var/lib/flatpak/exports/share/vulkan/icd.d +[Vulkan Loader] DRIVER: /usr/local/share/vulkan/icd.d +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d +[Vulkan Loader] DRIVER: Found the following files: +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/intel_icd.x86_64.json +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/lvp_icd.x86_64.json +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/radeon_icd.x86_64.json +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/lvp_icd.i686.json +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/radeon_icd.i686.json +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/intel_icd.i686.json +[Vulkan Loader] DRIVER: /usr/share/vulkan/icd.d/nvidia_icd.json +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.x86_64.json, version "1.0.0" +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.x86_64.json, version "1.0.0" +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.x86_64.json, version "1.0.0" +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.i686.json, version "1.0.0" +[Vulkan Loader] DRIVER: Requested driver /usr/lib/libvulkan_lvp.so was wrong bit-type. Ignoring this JSON +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.i686.json, version "1.0.0" +[Vulkan Loader] DRIVER: Requested driver /usr/lib/libvulkan_radeon.so was wrong bit-type. Ignoring this JSON +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.i686.json, version "1.0.0" +[Vulkan Loader] DRIVER: Requested driver /usr/lib/libvulkan_intel.so was wrong bit-type. Ignoring this JSON +[Vulkan Loader] DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/nvidia_icd.json, version "1.0.0" +``` + +Then when the application selects the device to use, you will see the Vulkan +device call chain reported in the following way (NOTE: additional spaces have +been removed from the output for easier reading): + +``` +[Vulkan Loader] DRIVER: vkCreateDevice layer callstack setup to: +[Vulkan Loader] DRIVER: +[Vulkan Loader] DRIVER: || +[Vulkan Loader] DRIVER: +[Vulkan Loader] DRIVER: || +[Vulkan Loader] DRIVER: +[Vulkan Loader] DRIVER: Using "Intel(R) UHD Graphics 630 (CFL GT2)" with driver: "/usr/lib64/libvulkan_intel.so" +``` + + +### Selectively Enable Specific Drivers + +**NOTE:** This functionality is only available with Loaders built with version +1.3.234 of the Vulkan headers and later. + +You can now use the filtering environment variables +(`VK_LOADER_DRIVERS_SELECT` and `VK_LOADER_DRIVERS_DISABLE`) to control what +drivers the loader will attempt to load. +For drivers, the string globs passed into the above environment variables will +be compared against the driver JSON file name since there is no driver name +known to the loader until much later in the Vulkan initialization process. + +For example, to disable all drivers except Nvidia you could do the following: + +``` +set VK_LOADER_DRIVERS_DISABLE=* +set VK_LOADER_DRIVERS_SELECT=*nvidia* +``` + +The loader outputs messages like the following when the environment variables +are used: + +``` +[Vulkan Loader] WARNING | DRIVER: Driver "intel_icd.x86_64.json" ignored because not selected by env var 'VK_LOADER_DRIVERS_SELECT' +[Vulkan Loader] WARNING | DRIVER: Driver "radeon_icd.x86_64.json" ignored because it was disabled by env var 'VK_LOADER_DRIVERS_DISABLE' +``` + +For more info on how to use the filtering environment variables, refer to the +[Driver Filtering](LoaderDriverInterface.md#driver-filtering) section of the +[LoaderDriverInterface](LoaderDriverInterface.md) document. + diff --git a/local/recipes/libs/vulkan-loader/source/docs/LoaderDriverInterface.md b/local/recipes/libs/vulkan-loader/source/docs/LoaderDriverInterface.md new file mode 100644 index 0000000000..791c64c1c4 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/LoaderDriverInterface.md @@ -0,0 +1,2006 @@ + +[![Khronos Vulkan][1]][2] + +[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/" +[2]: https://www.khronos.org/vulkan/ + +# Driver interface to the Vulkan Loader +[![Creative Commons][3]][4] + + + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[4]: https://creativecommons.org/licenses/by-nd/4.0/ + + +## Table of Contents + +- [Overview](#overview) +- [Driver Discovery](#driver-discovery) + - [Overriding the Default Driver Discovery](#overriding-the-default-driver-discovery) + - [Additional Driver Discovery](#additional-driver-discovery) + - [Driver Filtering](#driver-filtering) + - [Driver Select Filtering](#driver-select-filtering) + - [Driver Disable Filtering](#driver-disable-filtering) + - [Exception for Elevated Privileges](#exception-for-elevated-privileges) + - [Examples](#examples) + - [On Windows](#on-windows) + - [On Linux](#on-linux) + - [On macOS](#on-macos) + - [Driver Manifest File Usage](#driver-manifest-file-usage) + - [Driver Discovery on Windows](#driver-discovery-on-windows) + - [Driver Discovery on Linux](#driver-discovery-on-linux) + - [Example Linux Driver Search Path](#example-linux-driver-search-path) + - [Driver Discovery on Fuchsia](#driver-discovery-on-fuchsia) + - [Driver Discovery on macOS](#driver-discovery-on-macos) + - [Example macOS Driver Search Path](#example-macos-driver-search-path) + - [Additional Settings For Driver Debugging](#additional-settings-for-driver-debugging) + - [Driver Discovery using the`VK_LUNARG_direct_driver_loading` extension](#driver-discovery-using-thevk_lunarg_direct_driver_loading-extension) + - [How to use `VK_LUNARG_direct_driver_loading`](#how-to-use-vk_lunarg_direct_driver_loading) + - [Interactions with other driver discovery mechanisms](#interactions-with-other-driver-discovery-mechanisms) + - [Limitations of `VK_LUNARG_direct_driver_loading`](#limitations-of-vk_lunarg_direct_driver_loading) + - [Using Pre-Production ICDs or Software Drivers](#using-pre-production-icds-or-software-drivers) + - [Driver Discovery on Android](#driver-discovery-on-android) +- [Driver Manifest File Format](#driver-manifest-file-format) + - [Driver Manifest File Versions](#driver-manifest-file-versions) + - [Driver Manifest File Version 1.0.0](#driver-manifest-file-version-100) + - [Driver Manifest File Version 1.0.1](#driver-manifest-file-version-101) +- [Driver Vulkan Entry Point Discovery](#driver-vulkan-entry-point-discovery) +- [Driver API Version](#driver-api-version) +- [Mixed Driver Instance Extension Support](#mixed-driver-instance-extension-support) + - [Filtering Out Instance Extension Names](#filtering-out-instance-extension-names) + - [Loader Instance Extension Emulation Support](#loader-instance-extension-emulation-support) +- [Driver Unknown Physical Device Extensions](#driver-unknown-physical-device-extensions) + - [Reason for adding `vk_icdGetPhysicalDeviceProcAddr`](#reason-for-adding-vk_icdgetphysicaldeviceprocaddr) +- [Physical Device Sorting](#physical-device-sorting) +- [Driver Dispatchable Object Creation](#driver-dispatchable-object-creation) +- [Handling KHR Surface Objects in WSI Extensions](#handling-khr-surface-objects-in-wsi-extensions) +- [Loader and Driver Interface Negotiation](#loader-and-driver-interface-negotiation) + - [Windows, Linux and macOS Driver Negotiation](#windows-linux-and-macos-driver-negotiation) + - [Version Negotiation Between the Loader and Drivers](#version-negotiation-between-the-loader-and-drivers) + - [Interfacing With Legacy Drivers or Loaders](#interfacing-with-legacy-drivers-or-loaders) + - [Loader and Driver Interface Version 7 Requirements](#loader-and-driver-interface-version-7-requirements) + - [Loader and Driver Interface Version 6 Requirements](#loader-and-driver-interface-version-6-requirements) + - [Loader and Driver Interface Version 5 Requirements](#loader-and-driver-interface-version-5-requirements) + - [Loader and Driver Interface Version 4 Requirements](#loader-and-driver-interface-version-4-requirements) + - [Loader and Driver Interface Version 3 Requirements](#loader-and-driver-interface-version-3-requirements) + - [Loader and Driver Interface Version 2 Requirements](#loader-and-driver-interface-version-2-requirements) + - [Loader and Driver Interface Version 1 Requirements](#loader-and-driver-interface-version-1-requirements) + - [Loader and Driver Interface Version 0 Requirements](#loader-and-driver-interface-version-0-requirements) + - [Additional Interface Notes:](#additional-interface-notes) + - [Android Driver Negotiation](#android-driver-negotiation) +- [Loader implementation of VK\_KHR\_portability\_enumeration](#loader-implementation-of-vk_khr_portability_enumeration) +- [Loader and Driver Policy](#loader-and-driver-policy) + - [Number Format](#number-format) + - [Android Differences](#android-differences) + - [Requirements of Well-Behaved Drivers](#requirements-of-well-behaved-drivers) + - [Removed Driver Policies](#removed-driver-policies) + - [Requirements of a Well-Behaved Loader](#requirements-of-a-well-behaved-loader) + + +## Overview + +This is the Driver-centric view of working with the Vulkan loader. +For the complete overview of all sections of the loader, please refer to the +[LoaderInterfaceArchitecture.md](LoaderInterfaceArchitecture.md) file. + +**NOTE:** While many of the interfaces still use the "icd" sub-string to +identify various behavior associated with drivers, this is purely +historical and should not indicate that the implementing code do so through +the traditional ICD interface. +Granted, the majority of drivers to this date are ICD drivers +targeting specific GPU hardware. + +## Driver Discovery + +Vulkan allows multiple drivers each with one or more devices +(represented by a Vulkan `VkPhysicalDevice` object) to be used collectively. +The loader is responsible for discovering available Vulkan drivers on +the system. +Given a list of available drivers, the loader can enumerate all the +physical devices available for an application and return this information to the +application. +The process in which the loader discovers the available drivers on a +system is platform-dependent. +Windows, Linux, Android, and macOS Driver Discovery details are listed +below. + +### Overriding the Default Driver Discovery + +There may be times that a developer wishes to force the loader to use a specific +Driver. +This could be for many reasons including using a beta driver, or forcing the +loader to skip a problematic driver. +In order to support this, the loader can be forced to look at specific +drivers with either the `VK_DRIVER_FILES` or the older `VK_ICD_FILENAMES` +environment variable. +Both these environment variables behave the same, but `VK_ICD_FILENAMES` +should be considered deprecated. +If both `VK_DRIVER_FILES` and `VK_ICD_FILENAMES` environment variables are +present, then the newer `VK_DRIVER_FILES` will be used, and the values in +`VK_ICD_FILENAMES` will be ignored. + +The `VK_DRIVER_FILES` environment variable is a list of paths to Driver Manifest +files, containing the full path to the driver JSON Manifest file, and/or paths +to folders containing Driver Manifest files. +This list is colon-separated on Linux and macOS, and semicolon-separated on +Windows. +Typically, `VK_DRIVER_FILES` will only contain a full pathname to one info +file for a single driver. +A separator (colon or semicolon) is only used if more than one driver is needed. + +### Additional Driver Discovery + +There may be times that a developer wishes to force the loader to use a specific +Driver in addition to the standard drivers (without replacing the standard +search paths. +The `VK_ADD_DRIVER_FILES` environment variable can be used to add a list of +Driver Manifest files, containing the full path to the driver JSON Manifest +file, and/or paths to folders containing Driver Manifest files. +This list is colon-separated on Linux and macOS, and semicolon-separated on +Windows. +It will be added prior to the standard driver search files. +If `VK_DRIVER_FILES` or `VK_ICD_FILENAMES` is present, then +`VK_ADD_DRIVER_FILES` will not be used by the loader and any values will be +ignored. + +### Driver Filtering + +**NOTE:** This functionality is only available with Loaders built with version +1.3.234 of the Vulkan headers and later. + +The loader supports filter environment variables which can forcibly select and +disable known drivers. +Known driver manifests are those files that are already found by the loader +taking into account default search paths and other environment variables (like +`VK_ICD_FILENAMES` or `VK_ADD_DRIVER_FILES`). + +The filter variables will be compared against the driver's manifest filename. + +The filters must also follow the behaviors define in the +[Filter Environment Variable Behaviors](LoaderInterfaceArchitecture.md#filter-environment-variable-behaviors) +section of the [LoaderLayerInterface](LoaderLayerInterface.md) document. + +#### Driver Select Filtering + +The driver select environment variable `VK_LOADER_DRIVERS_SELECT` is a +comma-delimited list of globs to search for in known drivers. + +If a driver is not selected when using the `VK_LOADER_DRIVERS_SELECT` filter, +and loader logging is set to emit either warnings or driver messages, then a +message will show for each driver that has been ignored. +This message will look like the following: + +``` +[Vulkan Loader] WARNING | DRIVER: Driver "intel_icd.x86_64.json" ignored because not selected by env var 'VK_LOADER_DRIVERS_SELECT' +``` + +If no drivers are found with a manifest filename that matches any of the +provided globs, then no driver is enabled and may result in failures for +any Vulkan application that is run. + +#### Driver Disable Filtering + +The driver disable environment variable `VK_LOADER_DRIVERS_DISABLE` is a +comma-delimited list of globs to search for in known drivers. + +When a driver is disabled using the `VK_LOADER_DRIVERS_DISABLE` filter, and +loader logging is set to emit either warnings or driver messages, then a message +will show for each driver that has been forcibly disabled. +This message will look like the following: + +``` +[Vulkan Loader] WARNING | DRIVER: Driver "radeon_icd.x86_64.json" ignored because it was disabled by env var 'VK_LOADER_DRIVERS_DISABLE' +``` + +If no drivers are found with a manifest filename that matches any of the +provided globs, then no driver is disabled. + +### Exception for Elevated Privileges + +For security reasons, `VK_ICD_FILENAMES`, `VK_DRIVER_FILES`, and +`VK_ADD_DRIVER_FILES` are all ignored if running the Vulkan application +with elevated privileges. +This is because they may insert new libraries into the executable process that +are not normally found by the loader. +Because of this, these environment variables can only be used for applications +that do not use elevated privileges. + +For more information see +[Elevated Privilege Caveats](LoaderInterfaceArchitecture.md#elevated-privilege-caveats) +in the top-level +[LoaderInterfaceArchitecture.md](LoaderInterfaceArchitecture.md) document. + +#### Examples + +In order to use the setting, simply set it to a properly delimited list of +Driver Manifest files. +In this case, please provide the global path to these files to reduce issues. + +For example: + +##### On Windows + +``` +set VK_DRIVER_FILES=\windows\system32\nv-vk64.json +``` + +This is an example which is using the `VK_DRIVER_FILES` override on Windows to +point to the Nvidia Vulkan Driver's Manifest file. + +``` +set VK_ADD_DRIVER_FILES=\windows\system32\nv-vk64.json +``` + +This is an example which is using the `VK_ADD_DRIVER_FILES` on Windows to +point to the Nvidia Vulkan Driver's Manifest file which will be loaded first +before all other drivers. + +##### On Linux + +``` +export VK_DRIVER_FILES=/home/user/dev/mesa/share/vulkan/icd.d/intel_icd.x86_64.json +``` + +This is an example which is using the `VK_DRIVER_FILES` override on Linux to +point to the Intel Mesa Driver's Manifest file. + +``` +export VK_ADD_DRIVER_FILES=/home/user/dev/mesa/share/vulkan/icd.d/intel_icd.x86_64.json +``` + +This is an example which is using the `VK_ADD_DRIVER_FILES` on Linux to +point to the Intel Mesa Driver's Manifest file which will be loaded first +before all other drivers. + +##### On macOS + +``` +export VK_DRIVER_FILES=/home/user/MoltenVK/Package/Latest/MoltenVK/macOS/MoltenVK_icd.json +``` + +This is an example which is using the `VK_DRIVER_FILES` override on macOS to +point to an installation and build of the MoltenVK GitHub repository that +contains the MoltenVK driver. + +See the +[Table of Debug Environment Variables](LoaderInterfaceArchitecture.md#table-of-debug-environment-variables) +in the [LoaderInterfaceArchitecture.md document](LoaderInterfaceArchitecture.md) +for more details + + +### Driver Manifest File Usage + +As with layers, on Windows, Linux and macOS systems, JSON-formatted manifest +files are used to store driver information. +In order to find system-installed drivers, the Vulkan loader will read the JSON +files to identify the names and attributes of each driver. +Notice that Driver Manifest files are much simpler than the corresponding +layer Manifest files. + +See the +[Current Driver Manifest File Format](#driver-manifest-file-format) +section for more details. + + +### Driver Discovery on Windows + +In order to find available drivers (including installed ICDs), the +loader scans through registry keys specific to Display Adapters and all Software +Components associated with these adapters for the locations of JSON manifest +files. +These keys are located in device keys created during driver installation and +contain configuration information for base settings, including OpenGL and +Direct3D locations. + +The Device Adapter and Software Component key paths will be obtained by first +enumerating DXGI adapters. +Should that fail it will use the PnP Configuration Manager API. +The `000X` key will be a numbered key, where each device is assigned a different +number. + +``` +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Adapter GUID}\000X\VulkanDriverName +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{SoftwareComponent GUID}\000X\VulkanDriverName +``` + +In addition, on 64-bit systems there may be another set of registry values, +listed below. +These values record the locations of 32-bit layers on 64-bit operating systems, +in the same way as the Windows-on-Windows functionality. + +``` +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Adapter GUID}\000X\VulkanDriverNameWow +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{SoftwareComponent GUID}\000X\VulkanDriverNameWow +``` + +If any of the above values exist and is of type `REG_SZ`, the loader will open +the JSON manifest file specified by the key value. +Each value must be a full absolute path to a JSON manifest file. +The values may also be of type `REG_MULTI_SZ`, in which case the value will be +interpreted as a list of paths to JSON manifest files. + +Additionally, the Vulkan loader will scan the values in the following Windows +registry key: + +``` +HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers +``` + +For 32-bit applications on 64-bit Windows, the loader scan's the 32-bit +registry location: + +``` +HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\Vulkan\Drivers +``` + +Every driver in these locations should be given as a DWORD, with value 0, where +the name of the value is the full path to a JSON manifest file. +The Vulkan loader will attempt to open each manifest file to obtain the +information about a driver's shared library (".dll") file. + +For example, let us assume the registry contains the following data: + +``` +[HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers\] + +"C:\vendor a\vk_vendor_a.json"=dword:00000000 +"C:\windows\system32\vendor_b_vk.json"=dword:00000001 +"C:\windows\system32\vendor_c_icd.json"=dword:00000000 +``` + +In this case, the loader will step through each entry, and check the value. +If the value is 0, then the loader will attempt to load the file. +In this case, the loader will open the first and last listings, but not the +middle. +This is because the value of 1 for vendor_b_vk.json disables the driver. + +Additionally, the Vulkan loader will scan the system for well-known Windows +AppX/MSIX packages. +If a package is found, the loader will scan the root directory of this installed +package for JSON manifest files. At this time, the only package that is known is +Microsoft's +[OpenCLâ„¢, OpenGL®, and Vulkan® Compatibility Pack](https://apps.microsoft.com/store/detail/9NQPSL29BFFF?hl=en-us&gl=US). + +The Vulkan loader will open each enabled manifest file found to obtain the name +or pathname of a driver's shared library (".DLL") file. + +Drivers should use the registry locations from the PnP Configuration +Manager wherever practical. +Typically, this is most important for drivers, and the location clearly +ties the driver to a given device. +The `SOFTWARE\Khronos\Vulkan\Drivers` location is the older method for locating +drivers, but is the primary location for software based drivers. + +See the +[Driver Manifest File Format](#driver-manifest-file-format) +section for more details. + + +### Driver Discovery on Linux + +On Linux, the Vulkan loader will scan for Driver Manifest files using +environment variables or corresponding fallback values if the corresponding +environment variable is not defined: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Search OrderDirectory/Environment VariableFallbackAdditional Notes
1$XDG_CONFIG_HOME$HOME/.configThis path is ignored when running with elevated privileges such as + setuid, setgid, or filesystem capabilities.
+ This is done because under these scenarios it is not safe to trust + that the environment variables are non-malicious.
+ See + Elevated Privilege Caveats for more information. +
1$XDG_CONFIG_DIRS/etc/xdg
2SYSCONFDIR/etcCompile-time option set to possible location of drivers + installed from non-Linux-distribution-provided packages. +
3EXTRASYSCONFDIR/etcCompile-time option set to possible location of drivers + installed from non-Linux-distribution-provided packages. + Typically only set if SYSCONFDIR is set to something other than /etc +
4$XDG_DATA_HOME$HOME/.local/shareThis path is ignored when running with elevated privileges such as + setuid, setgid, or filesystem capabilities.
+ This is done because under these scenarios it is not safe to trust + that the environment variables are non-malicious.
+ See + Elevated Privilege Caveats for more information. +
5$XDG_DATA_DIRS/usr/local/share/:/usr/share/
+ +The directory lists are concatenated together using the standard platform path +separator (:). +The loader then selects each path, and applies the "/vulkan/icd.d" suffix onto +each and looks in that specific folder for manifest files. + +The Vulkan loader will open each manifest file found to obtain the name or +pathname of a driver's shared library (".so") file. + +**NOTE** While the order of folders searched for manifest files is well +defined, the order contents are read by the loader in each directory is +[random due to the behavior of readdir](https://www.ibm.com/support/pages/order-directory-contents-returned-calls-readdir). + +See the +[Driver Manifest File Format](#driver-manifest-file-format) +section for more details. + +It is also important to note that while `VK_DRIVER_FILES` will point the loader +to finding the manifest files, it does not guarantee the library files mentioned +by the manifest will immediately be found. +Often, the Driver Manifest file will point to the library file using a +relative or absolute path. +When a relative or absolute path is used, the loader can typically find the +library file without querying the operating system. +However, if a library is listed only by name, the loader may not find it, +unless the driver is installed placing the library in an operating system +searchable default location. +If problems occur finding a library file associated with a driver, try updating +the `LD_LIBRARY_PATH` environment variable to point at the location of the +corresponding `.so` file. + + +#### Example Linux Driver Search Path + +For a fictional user "me" the Driver Manifest search path might look +like the following: + +``` + /home/me/.config/vulkan/icd.d + /etc/xdg/vulkan/icd.d + /usr/local/etc/vulkan/icd.d + /etc/vulkan/icd.d + /home/me/.local/share/vulkan/icd.d + /usr/local/share/vulkan/icd.d + /usr/share/vulkan/icd.d +``` + + +### Driver Discovery on Fuchsia + +On Fuchsia, the Vulkan loader will scan for manifest files using environment +variables or corresponding fallback values if the corresponding environment +variable is not defined in the same way as +[Linux](#linux-driver-discovery). +The **only** difference is that Fuchsia does not allow fallback values for +*$XDG_DATA_DIRS* or *$XDG_HOME_DIRS*. + + +### Driver Discovery on macOS + +On macOS, the Vulkan loader will scan for Driver Manifest files using +the application resource folder as well as environment variables or +corresponding fallback values if the corresponding environment variable is not +defined. +The order is similar to the search path on Linux with the exception that +the application's bundle resources are searched first: +`(bundle)/Contents/Resources/`. + +System installed drivers will be ignored if drivers are found inside of the app +bundle. +This is because there is not a standard mechanism in which to distinguish drivers +that happen to be duplicates. +For example, MoltenVK is commonly placed inside application bundles. +If there exists a system installed MoltenVK, the loader will load both the app +bundled and the system installed MoltenVK, leading to potential issues or crashes. +Drivers found through environment variables, such as `VK_DRIVER_FILES`, will be +used regardless of whether there are bundled drivers present or not. + + +#### Example macOS Driver Search Path + +For a fictional user "Me" the Driver Manifest search path might look +like the following: + +``` + /Contents/Resources/vulkan/icd.d + /Users/Me/.config/vulkan/icd.d + /etc/xdg/vulkan/icd.d + /usr/local/etc/vulkan/icd.d + /etc/vulkan/icd.d + /Users/Me/.local/share/vulkan/icd.d + /usr/local/share/vulkan/icd.d + /usr/share/vulkan/icd.d +``` + + +#### Additional Settings For Driver Debugging + +Sometimes, the driver may encounter issues when loading. +A useful option may be to enable the `LD_BIND_NOW` environment variable +to debug the issue. +This forces every dynamic library's symbols to be fully resolved on load. +If there is a problem with a driver missing symbols on the current system, this +will expose it and cause the Vulkan loader to fail on loading the driver. +It is recommended that `LD_BIND_NOW` along with `VK_LOADER_DEBUG=error,warn` +to expose any issues. + +### Driver Discovery using the`VK_LUNARG_direct_driver_loading` extension + +The `VK_LUNARG_direct_driver_loading` extension allows for applications to +provide a driver or drivers to the Loader during vkCreateInstance. +This allows drivers to be included with an application without requiring +installation and is capable of being used in any execution environment, such as +a process running with elevated privileges. + +When calling `vkEnumeratePhysicalDevices` with the +`VK_LUNARG_direct_driver_loading` extension enabled, the `VkPhysicalDevice`s +from system installed drivers and environment variable specified drivers will +appear before any `VkPhysicalDevice`s that originate from drivers from the +`VkDirectDriverLoadingListLUNARG::pDrivers` list. + +#### How to use `VK_LUNARG_direct_driver_loading` + +To use this extension, it must first be enabled on the VkInstance. +This requires enabling the `VK_LUNARG_direct_driver_loading` extension through +the `enabledExtensionCount` and `ppEnabledExtensionNames`members of +`VkInstanceCreateInfo`. + +```c +const char* extensions[] = {VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME, }; +VkInstanceCreateInfo instance_create_info = {}; +instance_create_info.enabledExtensionCount = ; +instance_create_info.ppEnabledExtensionNames = extensions; +``` + +The `VkDirectDriverLoadingInfoLUNARG` structure contains a +`VkDirectDriverLoadingFlagsLUNARG` member (reserved for future use) and a +`PFN_vkGetInstanceProcAddrLUNARG` member which provides the loader with the +function pointer for the driver's `vkGetInstanceProcAddr`. + +The `VkDirectDriverLoadingListLUNARG` structure contains a count and pointer +members which provide the size of and pointer to an application provided array of +`VkDirectDriverLoadingInfoLUNARG` structures. + +Creating those structures looks like the following +```c +VkDirectDriverLoadingInfoLUNARG direct_loading_info = {}; +direct_loading_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG +direct_loading_info.pfnGetInstanceProcAddr = + +VkDirectDriverLoadingListLUNARG direct_driver_list = {}; +direct_driver_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG; +direct_driver_list.mode = VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG; // or VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG +direct_driver_list.driverCount = 1; +direct_driver_list.pDrivers = &direct_loading_info; // can include multiple drivers here if so desired +``` + +The `VkDirectDriverLoadingListLUNARG` structure contains the enum +`VkDirectDriverLoadingModeLUNARG`. +There are two modes: +* `VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG` - specifies that the only drivers +to be loaded will come from the `VkDirectDriverLoadingListLUNARG` structure. +* `VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG` - specifies that drivers +from the `VkDirectDriverLoadingModeLUNARG` structure will be used in addition to +any system installed drivers and environment variable specified drivers. + + + +Then, the `VkDirectDriverLoadingListLUNARG` structure *must* be appended to the +`pNext` chain of `VkInstanceCreateInfo`. + +```c +instance_create_info.pNext = (const void*)&direct_driver_list; +``` + +Finally, create the instance like normal. + +#### Interactions with other driver discovery mechanisms + +If the `VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG` mode is specified in the +`VkDirectDriverLoadingListLUNARG` structure, then no system installed drivers +are loaded. +This applies equally to all platforms. +Additionally, the following environment variables have no effect: + +* `VK_DRIVER_FILES` +* `VK_ICD_FILENAMES` +* `VK_ADD_DRIVER_FILES` +* `VK_LOADER_DRIVERS_SELECT` +* `VK_LOADER_DRIVERS_DISABLE` + +Exclusive mode will also disable MacOS bundle manifest discovery of drivers. + +#### Limitations of `VK_LUNARG_direct_driver_loading` + +Because `VkDirectDriverLoadingListLUNARG` is provided to the loader at instance +creation, there is no mechanism for the loader to query the list of instance +extensions that originate from `VkDirectDriverLoadingListLUNARG` drivers during +`vkEnumerateInstanceExtensionProperties`. +Applications can instead manually load the `vkEnumerateInstanceExtensionProperties` +function pointer directly from the drivers the application provides to the loader +using the `pfnGetInstanceProcAddrLUNARG` for each driver. +Then the application can call each driver's +`vkEnumerateInstanceExtensionProperties` and append non-duplicate entriees to the +list from the loader's `vkEnumerateInstanceExtensionProperties` to get the full +list of supported instance extensions. +Alternatively, because the Application is providing drivers, it is reasonable for +the application to already know which instance extensions are available with the +provided drivers, preventing the need to manually query them. + +However, there are limitations. +If there are any active implicit layers which intercept +`vkEnumerateInstanceExtensionProperties` to remove unsupported extensions, then +those layers will not be able to remove unsupported extensions from drivers that +are provided by the application. +This is due to `vkEnumerateInstanceExtensionProperties` not having a mechanism +to extend it. + + +### Using Pre-Production ICDs or Software Drivers + +Both software and pre-production ICDs can use an alternative mechanism to +detect their drivers. +Independent Hardware Vendor (IHV) may not want to fully install a pre-production +ICD and so it can't be found in the standard location. +For example, a pre-production ICD may simply be a shared library in the +developer's build tree. +In this case, there should be a way to allow developers to point to such an +ICD without modifying the system-installed ICD(s) on their system. + +This need is met with the use of the `VK_DRIVER_FILES` environment variable, +which will override the mechanism used for finding system-installed +drivers. + +In other words, only the drivers listed in `VK_DRIVER_FILES` will be +used. + +See +[Overriding the Default Driver Discovery](#overriding-the-default-driver-discovery) +for more information on this. + + +### Driver Discovery on Android + +The Android loader lives in the system library folder. +The location cannot be changed. +The loader will load the driver via `hw_get_module` with the ID of "vulkan". +**Due to security policies in Android, none of this can be modified under** +**normal use.** + + +## Driver Manifest File Format + +The following section discusses the details of the Driver Manifest JSON file +format. +The JSON file itself does not have any requirements for naming. +The only requirement is that the extension suffix of the file is ".json". + +Here is an example driver JSON Manifest file: + +```json +{ + "file_format_version": "1.0.1", + "ICD": { + "library_path": "path to driver library", + "api_version": "1.2.205", + "library_arch" : "64", + "is_portability_driver": false + } +} +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameField Value
"file_format_version"The JSON format major.minor.patch version number of this file.
+ Supported versions are: 1.0.0 and 1.0.1.
"ICD"The identifier used to group all driver information together. +
+ NOTE: Even though this is labelled ICD it is historical + and just as accurate to use for other drivers.
"library_path"The "library_path" specifies either a filename, a relative pathname, or + a full pathname to a driver shared library file.
+ If "library_path" specifies a relative pathname, it is relative to the + path of the JSON manifest file.
+ If "library_path" specifies a filename, the library must live in the + system's shared object search path.
+ There are no rules about the name of the driver's shared library file + other than it should end with the appropriate suffix (".DLL" on + Windows, ".so" on Linux and ".dylib" on macOS).
"library_arch"Optional field which specifies the architecture of the binary associated + with "library_path".
+ Allows the loader to quickly determine if the architecture of the driver + matches that of the running application.
+ The only valid values are "32" and "64".
"api_version" The major.minor.patch version number of the maximum Vulkan API supported + by the driver. + However, just because the driver supports the specific Vulkan API + version, it does not guarantee that the hardware on a user's system can + support that version. + Information on what the underlying physical device can support must be + queried by the user using the vkGetPhysicalDeviceProperties API + call.
+ For example: 1.0.33.
"is_portability_driver" Defines whether the driver contains any VkPhysicalDevices which + implement the VK_KHR_portability_subset extension.
+
+ +**NOTE:** If the same driver shared library supports multiple, incompatible +versions of text manifest file format versions, it must have separate JSON files +for each (all of which may point to the same shared library). + +### Driver Manifest File Versions + +The current highest supported Layer Manifest file format supported is 1.0.1. +Information about each version is detailed in the following sub-sections: + +#### Driver Manifest File Version 1.0.0 + +The initial version of the Driver Manifest file specified the basic +format and fields of a layer JSON file. +The fields supported in version 1.0.0 of the file format include: + * "file\_format\_version" + * "ICD" + * "library\_path" + * "api\_version" + +#### Driver Manifest File Version 1.0.1 + +Added the `is_portability_driver` boolean field for drivers to self report that +they contain VkPhysicalDevices which support the VK_KHR_portability_subset +extension. This is an optional field. Omitting the field has the same effect as +setting the field to `false`. + +Added the "library\_arch" field to the driver manifest to allow the loader to +quickly determine if the driver matches the architecture of the current running +application. This field is optional. + +## Driver Vulkan Entry Point Discovery + +The Vulkan symbols exported by a driver must not clash with the loader's +exported Vulkan symbols. +Because of this, all drivers must export the following function that is +used for discovery of driver Vulkan entry-points. +This entry-point is not a part of the Vulkan API itself, only a private +interface between the loader and drivers for version 1 and higher +interfaces. + +```cpp +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL + vk_icdGetInstanceProcAddr( + VkInstance instance, + const char* pName); +``` + +This function has very similar semantics to `vkGetInstanceProcAddr`. +`vk_icdGetInstanceProcAddr` returns valid function pointers for all the +global-level and instance-level Vulkan functions, and also for +`vkGetDeviceProcAddr`. +Global-level functions are those which contain no dispatchable object as the +first parameter, such as `vkCreateInstance` and +`vkEnumerateInstanceExtensionProperties`. +The driver must support querying global-level entry points by calling +`vk_icdGetInstanceProcAddr` with a NULL `VkInstance` parameter. +Instance-level functions are those that have either `VkInstance`, or +`VkPhysicalDevice` as the first parameter dispatchable object. +Both core entry points and any instance extension entry points the +driver supports should be available via `vk_icdGetInstanceProcAddr`. +Future Vulkan instance extensions may define and use new instance-level +dispatchable objects other than `VkInstance` and `VkPhysicalDevice`, in which +case extension entry points using these newly defined dispatchable objects must +be queryable via `vk_icdGetInstanceProcAddr`. + +All other Vulkan entry points must either: + * NOT be exported directly from the driver library + * or NOT use the official Vulkan function names if they are exported + +This requirement is for driver libraries that include other functionality (such +as OpenGL) and thus could be loaded by the application prior to when the Vulkan +loader library is loaded by the application. + +Beware of interposing by dynamic OS library loaders if the official Vulkan +names are used. +On Linux, if official names are used, the driver library must be linked with +`-Bsymbolic`. + + +## Driver API Version + +When an application calls `vkCreateInstance`, it can optionally include a +`VkApplicationInfo` struct, which includes an `apiVersion` field. +A Vulkan 1.0 driver was required to return `VK_ERROR_INCOMPATIBLE_DRIVER` if it +did not support the API version that the user passed. +Beginning with Vulkan 1.1, drivers are not allowed to return this error +for any value of `apiVersion`. +This creates a problem when working with multiple drivers, where one is +a 1.0 driver and another is newer. + +A loader that is newer than 1.0 will always give the version it supports when +the application calls `vkEnumerateInstanceVersion`, regardless of the API +version supported by the drivers on the system. +This means that when the application calls `vkCreateInstance`, the loader will +be forced to pass a copy of the `VkApplicationInfo` struct where `apiVersion` is +1.0 to any 1.0 drivers in order to prevent an error. +To determine if this must be done, the loader will perform the following steps: + +1. Check the driver's JSON manifest file for the "api_version" field. +2. If the JSON version is greater than or equal to 1.1, Load the driver's +dynamic library +3. Call the driver's `vkGetInstanceProcAddr` command to get a pointer to +`vkEnumerateInstanceVersion` +4. If the pointer to `vkEnumerateInstanceVersion` is not `NULL`, it will be +called to get the driver's supported API version + +The driver will be treated as a 1.0 driver if any of the following conditions +are met: + +- The JSON manifest's "api_version" field is less that version 1.1 +- The function pointer to `vkEnumerateInstanceVersion` is `NULL` +- The version returned by `vkEnumerateInstanceVersion` is less than 1.1 +- `vkEnumerateInstanceVersion` returns anything other than `VK_SUCCESS` + +If the driver only supports Vulkan 1.0, the loader will ensure that any +`VkApplicationInfo` struct that is passed to the driver will have an +`apiVersion` field set to Vulkan 1.0. +Otherwise, the loader will pass the struct to the driver without any +changes. + + +## Mixed Driver Instance Extension Support + +On a system with more than one driver, a special case can arise. +Some drivers may expose an instance extension that the loader is already +aware of. +Other drivers on that same system may not support the same instance +extension. + +In that scenario, the loader has some additional responsibilities: + + +### Filtering Out Instance Extension Names + +During a call to `vkCreateInstance`, the list of requested instance extensions +is passed down to each driver. +Since the driver may not support one or more of these instance extensions, the +loader will filter out any instance extensions that are not supported by the +driver. +This is done per driver since different drivers may support different instance +extensions. + + +### Loader Instance Extension Emulation Support + +In the same scenario, the loader must emulate the instance extension +entry-points, to the best of its ability, for each driver that does not support +an instance extension directly. +This must work correctly when combined with calling into the other +drivers which do support the extension natively. +In this fashion, the application will be unaware of what drivers are +missing support for this extension. + + +## Driver Unknown Physical Device Extensions + +Drivers that implement entrypoints which take a `VkPhysicalDevice` as the first +parameter *should* support `vk_icdGetPhysicalDeviceProcAddr`. +This function is added to the Loader and Driver Driver Interface Version 4, +allowing the loader to distinguish between entrypoints which take `VkDevice` +and `VkPhysicalDevice` as the first parameter. +This allows the loader to properly support entrypoints that are unknown to it +gracefully. +This entry point is not a part of the Vulkan API itself, only a private +interface between the loader and drivers. +Note: Loader and Driver Interface Version 7 makes exporting +`vk_icdGetPhysicalDeviceProcAddr` optional. +Instead, drivers *must* expose it through `vk_icdGetInstanceProcAddr`. + +```cpp +PFN_vkVoidFunction + vk_icdGetPhysicalDeviceProcAddr( + VkInstance instance, + const char* pName); +``` + +This function behaves similar to `vkGetInstanceProcAddr` and +`vkGetDeviceProcAddr` except it should only return values for physical device +extension entry points. +In this way, it compares "pName" to every physical device function supported in +the driver. + +Implementations of the function should have the following behavior: +* If `pName` is the name of a Vulkan API entrypoint that takes a + `VkPhysicalDevice` as its primary dispatch handle, and the driver supports the + entrypoint, then the driver **must** return the valid function pointer to the + driver's implementation of that entrypoint. +* If `pName` is the name of a Vulkan API entrypoint that takes something other + than a `VkPhysicalDevice` as its primary dispatch handle, then the driver + **must** return `NULL`. +* If the driver is unaware of any entrypoint with the name `pName`, it **must** + return `NULL`. + +If a driver intends to support functions that take VkPhysicalDevice as the +dispatchable parameter, then the driver should support +`vk_icdGetPhysicalDeviceProcAddr`. This is because if these functions aren't +known to the loader, such as those from unreleased extensions or because +the loader is an older build thus doesn't know about them _yet_, the loader +won't be able to distinguish whether this is a device or physical device +function. + +If a driver does implement this support, it must export the function from the +driver library using the name `vk_icdGetPhysicalDeviceProcAddr` so that the +symbol can be located through the platform's dynamic linking utilities, or if +the driver supports Loader and Driver Interface Version 7, exposed through +`vk_icdGetInstanceProcAddr` instead. + +The behavior of the loader's `vkGetInstanceProcAddr` with support for the +`vk_icdGetPhysicalDeviceProcAddr` function is as follows: + 1. Check if core function: + - If it is, return the function pointer + 2. Check if known instance or device extension function: + - If it is, return the function pointer + 3. Call the layer/driver `GetPhysicalDeviceProcAddr` + - If it returns `non-NULL`, return a trampoline to a generic physical device +function, and set up a generic terminator which will pass it to the proper +driver. + 4. Call down using `GetInstanceProcAddr` + - If it returns non-NULL, treat it as an unknown logical device command. +This means setting up a generic trampoline function that takes in a `VkDevice` +as the first parameter and adjusting the dispatch table to call the +driver/layer's function after getting the dispatch table from the +`VkDevice`. +Then, return the pointer to the corresponding trampoline function. + 5. Return `NULL` + +The result is that if the command gets promoted to Vulkan core later, it will no +longer be set up using `vk_icdGetPhysicalDeviceProcAddr`. +Additionally, if the loader adds direct support for the extension, it will no +longer get to step 3, because step 2 will return a valid function pointer. +However, the driver should continue to support the command query via +`vk_icdGetPhysicalDeviceProcAddr`, until at least a Vulkan version bump, because +an older loader may still be attempting to use the commands. + +### Reason for adding `vk_icdGetPhysicalDeviceProcAddr` + +Originally, when the loader's `vkGetInstanceProcAddr` was called, it would +result in the following behavior: + 1. The loader would check if it was a core function: + - If so, it would return the function pointer + 2. The loader would check if it was a known extension function: + - If so, it would return the function pointer + 3. If the loader knew nothing about it, it would call down using +`GetInstanceProcAddr` + - If it returned `non-NULL`, treat it as an unknown logical device command. + - This meant setting up a generic trampoline function that takes in a +VkDevice as the first parameter and adjusting the dispatch table to call the +driver/layer's function after getting the dispatch table from the +`VkDevice`. + 4. If all the above failed, the loader would return `NULL` to the application. + +This caused problems when a driver attempted to expose new physical device +extensions the loader knew nothing about, but an application was aware of. +Because the loader knew nothing about it, the loader would get to step 3 in the +above process and would treat the function as an unknown logical device command. +The problem is, this would create a generic `VkDevice` trampoline function +which, on the first call, would attempt to dereference the VkPhysicalDevice as a +`VkDevice`. +This would lead to a crash or corruption. + +## Physical Device Sorting + +When an application selects a GPU to use, it must enumerate physical devices or +physical device groups. +These API functions do not specify which order the physical devices or physical +device groups will be presented in. +On Windows, the loader will attempt to sort these objects so that the system +preference will be listed first. +This mechanism does not force an application to use any particular GPU — +it merely changes the order in which they are presented. + +This mechanism requires that a driver provide The Loader and Driver Interface +Version 6. +This version defines a new exported function, `vk_icdEnumerateAdapterPhysicalDevices`, +detailed below, that Drivers may provide on Windows. +This entry point is not a part of the Vulkan API itself, only a private +interface between the loader and drivers. +Note: Loader and Driver Interface Version 7 makes exporting +`vk_icdEnumerateAdapterPhysicalDevices` optional. +Instead, drivers *must* expose it through `vk_icdGetInstanceProcAddr`. + +```c +VKAPI_ATTR VkResult VKAPI_CALL + vk_icdEnumerateAdapterPhysicalDevices( + VkInstance instance, + LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices); +``` + + +This function takes an adapter LUID as input, and enumerates all Vulkan physical +devices that are associated with that LUID. +This works in the same way as other Vulkan enumerations — if +`pPhysicalDevices` is `NULL`, then the count will be provided. +Otherwise, the physical devices associated with the queried adapter will be +provided. +The function must provide multiple physical devices when the LUID refers to a +linked adapter. +This allows the loader to translate the adapter into Vulkan physical device +groups. + +While the loader attempts to match the system's preference for GPU ordering, +there are some limitations. +Because this feature requires a new driver interface, only physical devices from +drivers that support this function will be sorted. +All unsorted physical devices will be listed at the end of the list, in an +indeterminate order. +Furthermore, only physical devices that correspond to an adapter may be sorted. +This means that a software driver would likely not be sorted. +Finally, this API only applies to Windows systems and will only work on versions +of Windows 10 that support GPU selection through the OS. +Other platforms may be included in the future, but they will require separate +platform-specific interfaces. + +A requirement of `vk_icdEnumerateAdapterPhysicalDevices` is that it *must* +return the same `VkPhysicalDevice` handle values for the same physical +devices that are returned by `vkEnumeratePhysicalDevices`. +This is because the loader calls both functions on the driver then +de-duplicates the physical devices using the `VkPhysicalDevice` handles. +Since not all physical devices in a driver will have a LUID, such as for +software implementations, this step is necessary to allow drivers to +enumerate all available physical devices. + +## Driver Dispatchable Object Creation + +As previously covered, the loader requires dispatch tables to be accessible +within Vulkan dispatchable objects, such as: `VkInstance`, `VkPhysicalDevice`, +`VkDevice`, `VkQueue`, and `VkCommandBuffer`. +The specific requirements on all dispatchable objects created by drivers +are as follows: + +- All dispatchable objects created by a driver can be cast to void \*\* +- The loader will replace the first entry with a pointer to the dispatch table +which is owned by the loader. +This implies three things for drivers: + 1. The driver must return a pointer for the opaque dispatchable object handle + 2. This pointer points to a regular C structure with the first entry being a + pointer. + * **NOTE:** For any C\++ drivers that implement VK objects directly +as C\++ classes: + * The C\++ compiler may put a vtable at offset zero if the class is +non-POD due to the use of a virtual function. + * In this case use a regular C structure (see below). + 3. The loader checks for a magic value (ICD\_LOADER\_MAGIC) in all the created + dispatchable objects, as follows (see `include/vulkan/vk_icd.h`): + +```cpp +#include "vk_icd.h" + +union _VK_LOADER_DATA { + uintptr loadermagic; + void * loaderData; +} VK_LOADER_DATA; + +vkObj + alloc_icd_obj() +{ + vkObj *newObj = alloc_obj(); + ... + // Initialize pointer to loader's dispatch table with ICD_LOADER_MAGIC + + set_loader_magic_value(newObj); + ... + return newObj; +} +``` + + +## Handling KHR Surface Objects in WSI Extensions + +Normally, drivers handle object creation and destruction for various Vulkan +objects. +The WSI surface extensions for Linux, Windows, macOS, and QNX +("VK\_KHR\_win32\_surface", "VK\_KHR\_xcb\_surface", "VK\_KHR\_xlib\_surface", +"VK\_KHR\_wayland\_surface", "VK\_MVK\_macos\_surface", +"VK\_QNX\_screen\_surface" and "VK\_KHR\_surface") are handled differently. +For these extensions, the `VkSurfaceKHR` object creation and destruction may be +handled by either the loader or a driver. + +If the loader handles the management of the `VkSurfaceKHR` objects: + 1. The loader will handle the calls to `vkCreateXXXSurfaceKHR` and +`vkDestroySurfaceKHR` + functions without involving the drivers. + * Where XXX stands for the Windowing System name: + * Wayland + * XCB + * Xlib + * Windows + * Android + * MacOS (`vkCreateMacOSSurfaceMVK`) + * QNX (`vkCreateScreenSurfaceQNX`) + 2. The loader creates a `VkIcdSurfaceXXX` object for the corresponding +`vkCreateXXXSurfaceKHR` call. + * The `VkIcdSurfaceXXX` structures are defined in `include/vulkan/vk_icd.h`. + 3. Drivers can cast any `VkSurfaceKHR` object to a pointer to the +appropriate `VkIcdSurfaceXXX` structure. + 4. The first field of all the `VkIcdSurfaceXXX` structures is a +`VkIcdSurfaceBase` enumerant that indicates whether the + surface object is Win32, XCB, Xlib, Wayland, or Screen. + +The driver may choose to handle `VkSurfaceKHR` object creation instead. +If a driver desires to handle creating and destroying it must do the following: + 1. Support Loader and Driver Interface Version 3 or newer. + 2. Expose and handle all functions that take in a `VkSurfaceKHR` object, +including: + * `vkCreateXXXSurfaceKHR` + * `vkGetPhysicalDeviceSurfaceSupportKHR` + * `vkGetPhysicalDeviceSurfaceCapabilitiesKHR` + * `vkGetPhysicalDeviceSurfaceFormatsKHR` + * `vkGetPhysicalDeviceSurfacePresentModesKHR` + * `vkCreateSwapchainKHR` + * `vkDestroySurfaceKHR` + +Because the `VkSurfaceKHR` object is an instance-level object, one object can be +associated with multiple drivers. +Therefore, when the loader receives the `vkCreateXXXSurfaceKHR` call, it still +creates an internal `VkSurfaceIcdXXX` object. +This object acts as a container for each driver's version of the +`VkSurfaceKHR` object. +If a driver does not support the creation of its own `VkSurfaceKHR` object, the +loader's container stores a NULL for that driver. +On the other hand, if the driver does support `VkSurfaceKHR` creation, the +loader will make the appropriate `vkCreateXXXSurfaceKHR` call to the +driver, and store the returned pointer in its container object. +The loader then returns the `VkSurfaceIcdXXX` as a `VkSurfaceKHR` object back up +the call chain. +Finally, when the loader receives the `vkDestroySurfaceKHR` call, it +subsequently calls `vkDestroySurfaceKHR` for each driver whose internal +`VkSurfaceKHR` object is not NULL. +Then the loader destroys the container object before returning. + + +## Loader and Driver Interface Negotiation + +Generally, for functions issued by an application, the loader can be viewed as a +pass through. +That is, the loader generally doesn't modify the functions or their parameters, +but simply calls the driver's entry point for that function. +There are specific additional interface requirements a driver needs to comply +with that are not part of any requirements from the Vulkan specification. +These additional requirements are versioned to allow flexibility in the future. + + +### Windows, Linux and macOS Driver Negotiation + + +#### Version Negotiation Between the Loader and Drivers + +All drivers supporting Loader and Driver Interface Version 2 or higher must +export the following function that is used for determination of the interface +version that will be used. +This entry point is not a part of the Vulkan API itself, only a private +interface between the loader and drivers. +Note: Loader and Driver Interface Version 7 makes exporting +`vk_icdNegotiateLoaderICDInterfaceVersion` optional. +Instead, drivers *must* expose it through `vk_icdGetInstanceProcAddr`. + +```cpp +VKAPI_ATTR VkResult VKAPI_CALL + vk_icdNegotiateLoaderICDInterfaceVersion( + uint32_t* pSupportedVersion); +``` + +This function allows the loader and driver to agree on an interface version to +use. +The "pSupportedVersion" parameter is both an input and output parameter. +"pSupportedVersion" is filled in by the loader with the desired latest interface +version supported by the loader (typically the latest). +The driver receives this and returns back the version it desires in the same +field. +Because it is setting up the interface version between the loader and +driver, this should be the first call made by a loader to the driver (even prior +to any calls to `vk_icdGetInstanceProcAddr`). + +If the driver receiving the call no longer supports the interface version +provided by the loader (due to deprecation), then it should report a +`VK_ERROR_INCOMPATIBLE_DRIVER` error. +Otherwise it sets the value pointed by "pSupportedVersion" to the latest +interface version supported by both the driver and the loader and returns +`VK_SUCCESS`. + +The driver should report `VK_SUCCESS` in case the loader-provided interface +version is newer than that supported by the driver, as it's the loader's +responsibility to determine whether it can support the older interface version +supported by the driver. +The driver should also report `VK_SUCCESS` in the case its interface version is +greater than the loader's, but return the loader's version. +Thus, upon return of `VK_SUCCESS` the "pSupportedVersion" will contain the +desired interface version to be used by the driver. + +If the loader receives an interface version from the driver that the loader no +longer supports (due to deprecation), or it receives a +`VK_ERROR_INCOMPATIBLE_DRIVER` error instead of `VK_SUCCESS`, then the loader +will treat the driver as incompatible and will not load it for use. +In this case, the application will not see the driver's `vkPhysicalDevice` +during enumeration. + +#### Interfacing With Legacy Drivers or Loaders + +If a loader sees that a driver does not export or expose the +`vk_icdNegotiateLoaderICDInterfaceVersion` function, then the loader assumes the +corresponding driver only supports either interface version 0 or 1. + +From the other side of the interface, if a driver sees a call to +`vk_icdGetInstanceProcAddr` before a call to +`vk_icdNegotiateLoaderICDInterfaceVersion`, then the loader is either a legacy +loader with only support for interface version 0 or 1, or the loader is using +interface version 7 or newer. + +If the first call to `vk_icdGetInstanceProcAddr` is to query for +`vk_icdNegotiateLoaderICDInterfaceVersion`, then that means the loader is using +interface version 7. +This only occurs when the driver does not export +`vk_icdNegotiateLoaderICDInterfaceVersion`. +Drivers which export `vk_icdNegotiateLoaderICDInterfaceVersion` will have it +called first. + +If the first call to `vk_icdGetInstanceProcAddr` is **not** querying for +`vk_icdNegotiateLoaderICDInterfaceVersion`, then loader is a legacy loader only +which supports version 0 or 1. +In this case, if the loader calls `vk_icdGetInstanceProcAddr` first, it supports +at least interface version 1. +Otherwise, the loader only supports version 0. + +#### Loader and Driver Interface Version 7 Requirements + +Version 7 relaxes the requirement that Loader and Driver Interface functions +must be exported. +Instead, it only requires that those functions be queryable through +`vk_icdGetInstanceProcAddr`. +The functions are: + `vk_icdNegotiateLoaderICDInterfaceVersion` + `vk_icdGetPhysicalDeviceProcAddr` + `vk_icdEnumerateAdapterPhysicalDevices` (Windows only) +These functions are considered global for the purposes of retrieval, so the +`VkInstance` parameter of `vk_icdGetInstanceProcAddr` will be **NULL**. +While exporting these functions is no longer a requirement, drivers may still +export them for compatibility with older loaders. +The changes in this version allow drivers provided through the +`VK_LUNARG_direct_driver_loading` extension to support the entire Loader and +Driver Interface. + +#### Loader and Driver Interface Version 6 Requirements + +Version 6 provides a mechanism to allow the loader to sort physical devices. +The loader will only attempt to sort physical devices on a driver if version 6 +of the interface is supported. +This version provides the `vk_icdEnumerateAdapterPhysicalDevices` function +defined earlier in this document. + +#### Loader and Driver Interface Version 5 Requirements + +This interface version has no changes to the actual interface. +If the loader requests interface version 5 or greater, it is simply +an indication to drivers that the loader is now evaluating whether the API +Version info passed into vkCreateInstance is a valid version for the loader. +If it is not, the loader will catch this during vkCreateInstance and fail with a +`VK_ERROR_INCOMPATIBLE_DRIVER` error. + +On the other hand, if version 5 or newer is not requested by the loader, then it +indicates to the driver that the loader is ignorant of the API version being +requested. +Because of this, it falls on the driver to validate that the API Version is not +greater than major = 1 and minor = 0. +If it is, then the driver should automatically fail with a +`VK_ERROR_INCOMPATIBLE_DRIVER` error since the loader is a 1.0 loader, and is +unaware of the version. + +Here is a table of the expected behaviors: + + + + + + + + + + + + + + + + + + + + + + +
Loader Supports I/f VersionDriver Supports I/f VersionResult
4 or EarlierAny VersionDriver must fail with VK_ERROR_INCOMPATIBLE_DRIVER + for all vkCreateInstance calls with apiVersion set to > Vulkan 1.0 + because the loader is still at interface version <= 4.
+ Otherwise, the driver should behave as normal. +
5 or Newer4 or EarlierLoader must fail with VK_ERROR_INCOMPATIBLE_DRIVER if it + can't handle the apiVersion. + Driver may pass for all apiVersions, but since its interface is + <= 4, it is best if it assumes it needs to do the work of rejecting + anything > Vulkan 1.0 and fail with VK_ERROR_INCOMPATIBLE_DRIVER. +
+ Otherwise, the driver should behave as normal. +
5 or Newer5 or NewerLoader must fail with VK_ERROR_INCOMPATIBLE_DRIVER if it + can't handle the apiVersion, and drivers should fail with + VK_ERROR_INCOMPATIBLE_DRIVER only if they can not support + the specified apiVersion.
+ Otherwise, the driver should behave as normal. +
+ +#### Loader and Driver Interface Version 4 Requirements + +The major change to version 4 of this interface version is the support of +[Unknown Physical Device Extensions](#driver-unknown-physical-device-extensions) +using the `vk_icdGetPhysicalDeviceProcAddr` function. +This function is purely optional. +However, if a driver supports a physical device extension, it must provide a +`vk_icdGetPhysicalDeviceProcAddr` function. +Otherwise, the loader will continue to treat any unknown functions as VkDevice +functions and cause invalid behavior. + + +#### Loader and Driver Interface Version 3 Requirements + +The primary change that occurred in this interface version is to allow a driver +to handle creation and destruction of their own KHR_surfaces. +Up until this point, the loader created a surface object that was used by all +drivers. +However, some drivers *may* want to provide their own surface handles. +If a driver chooses to enable this support, it must support Loader and Driver +Interface Version 3, as well as any Vulkan function that uses a `VkSurfaceKHR` +handle, such as: +- `vkCreateXXXSurfaceKHR` (where XXX is the platform-specific identifier [i.e. +`vkCreateWin32SurfaceKHR` for Windows]) +- `vkDestroySurfaceKHR` +- `vkCreateSwapchainKHR` +- `vkGetPhysicalDeviceSurfaceSupportKHR` +- `vkGetPhysicalDeviceSurfaceCapabilitiesKHR` +- `vkGetPhysicalDeviceSurfaceFormatsKHR` +- `vkGetPhysicalDeviceSurfacePresentModesKHR` + +A driver which does not participate in this functionality can opt out by +simply not exposing the above `vkCreateXXXSurfaceKHR` and +`vkDestroySurfaceKHR` functions. + + +#### Loader and Driver Interface Version 2 Requirements + +Interface Version 2 requires that drivers export +`vk_icdNegotiateLoaderICDInterfaceVersion`. +For more information, see [Version Negotiation Between Loader and Drivers](#version-negotiation-between-loader-and-drivers). + +Additional, version 2 requires that Vulkan dispatchable objects created by +drivers must be created in accordance to the +[Driver Dispatchable Object Creation](#driver-dispatchable-object-creation) +section. + + +#### Loader and Driver Interface Version 1 Requirements + +Version 1 of the interface added the driver-specific entry-point +`vk_icdGetInstanceProcAddr`. +Since this is before the creation of the +`vk_icdNegotiateLoaderICDInterfaceVersion` entry-point, the loader has no +negotiation process for determine what interface version the driver +supports. +Because of this, the loader detects support for version 1 of the interface +by the absence of the negotiate function, but the presence of the +`vk_icdGetInstanceProcAddr`. +No other entry-points need to be exported by the driver as the loader will query +the appropriate function pointers using that. + + +#### Loader and Driver Interface Version 0 Requirements + +Version 0 does not support either `vk_icdGetInstanceProcAddr` or +`vk_icdNegotiateLoaderICDInterfaceVersion`. +Because of this, the loader will assume the driver supports only version 0 of +the interface unless one of those functions exists. + +Additionally, for Version 0, the driver must expose at least the following core +Vulkan entry-points so the loader may build up the interface to the driver: + +- The function `vkGetInstanceProcAddr` **must be exported** in the driver +library and returns valid function pointers for all the Vulkan API entry points. +- `vkCreateInstance` **must be exported** by the driver library. +- `vkEnumerateInstanceExtensionProperties` **must be exported** by the driver +library. + + +#### Additional Interface Notes: + +- The loader will filter out extensions requested in `vkCreateInstance` and +`vkCreateDevice` before calling into the driver; filtering will be of extensions +advertised by entities (e.g. layers) different from the driver in question. +- The loader will not call the driver for `vkEnumerate*LayerProperties` +as layer properties are obtained from the layer libraries and layer JSON files. +- If a driver library author wants to implement a layer, it can do so by having +the appropriate layer JSON manifest file refer to the driver library file. +- The loader will not call the driver for `vkEnumerate*ExtensionProperties` if +"pLayerName" is not equal to `NULL`. +- Drivers creating new dispatchable objects via device extensions need +to initialize the created dispatchable object. +The loader has generic *trampoline* code for unknown device extensions. +This generic *trampoline* code doesn't initialize the dispatch table within the +newly created object. +See the +[Driver Dispatchable Object Creation](#driver-dispatchable-object-creation) +section for more information on how to initialize created dispatchable objects +for extensions non known by the loader. + + +### Android Driver Negotiation + +The Android loader uses the same protocol for initializing the dispatch table as +described above. +The only difference is that the Android loader queries layer and extension +information directly from the respective libraries and does not use the JSON +manifest files used by the Windows, Linux and macOS loaders. + + +## Loader implementation of VK_KHR_portability_enumeration + +The loader implements the `VK_KHR_portability_enumeration` instance extension, +which filters out any drivers that report support for the portability subset +device extension. Unless the application explicitly requests enumeration of +portability devices by setting the +`VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR` bit in the +VkInstanceCreateInfo::flags, the loader does not load any drivers that declare +themselves to be portability drivers. + +Drivers declare whether they are portability drivers or not in the Driver +Manifest Json file, with the `is_portability_driver` boolean field. +[More information here](#driver-manifest-file-version-101) + +The initial support for this extension only reported errors when an application +did not enable the portability enumeration feature. It did not filter out +portability drivers. This was done to give a grace period for applications to +update their instance creation logic without outright breaking the application. + +## Loader and Driver Policy + +This section is intended to define proper behavior expected between the loader +and drivers. +Much of this section is additive to the Vulkan spec, and necessary for +maintaining consistency across platforms. +In fact, much of the language can be found throughout this document, but is +summarized here for convenience. +Additionally, there should be a way to identify bad or non-conformant behavior +in a driver and remedy it as soon as possible. +Therefore, a policy numbering system is provided to clearly identify each +policy statement in a unique way. + +Finally, based on the goal of making the loader efficient and performant, +some of these policy statements defining proper driver behavior may not +be testable (and therefore aren't enforceable by the loader). +However, that should not detract from the requirement in order to provide the +best experience to end-users and developers. + + +### Number Format + +Loader and Driver policy items start with the prefix `LDP_` (short for +Loader and Driver Policy) which is followed by an identifier based on what +component the policy is targeted against. +In this case there are only two possible components: + - Drivers: which will have the string `DRIVER_` as part of the policy number. + - The Loader: which will have the string `LOADER_` as part of the policy + number. + + +### Android Differences + +As stated before, the Android Loader is actually separate from the Khronos +Loader. +Because of this and other platform requirements, not all of these policy +statements apply to Android. +Each table also has a column titled "Applicable to Android?" +which indicates which policy statements apply to drivers that are focused +only on Android support. +Further information on the Android loader can be found in the +
+Android Vulkan documentation. + + +### Requirements of Well-Behaved Drivers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Requirement NumberRequirement DescriptionResult of Non-ComplianceApplicable to Android?Enforceable by Loader?Reference Section
LDP_DRIVER_1A driver must not cause other drivers to fail, crash, or + otherwise misbehave. + The behavior is undefined and may result in crashes or corruption.YesNoN/A
LDP_DRIVER_2A driver must not crash if it detects that there are no supported + Vulkan Physical Devices (VkPhysicalDevice) on the system when a + call to that driver is made using any Vulkan instance of physical device + API.
+ This is because some devices can be hot-plugged. +
The behavior is undefined and may result in crashes or corruption.YesNo
+ The loader has no direct knowledge of what devices (virtual or physical) + may be supported by a given driver.
N/A +
LDP_DRIVER_3A driver must be able to negotiate a supported version of the + Loader and Driver Interface with the loader in accordance with the stated + negotiation process. + The driver will not be loaded.NoYes + + Interface Negotiation +
LDP_DRIVER_4A driver must have a valid JSON manifest file for the loader to + process that ends with the ".json" suffix. + The driver will not be loaded.NoYes + Manifest File Format + +
LDP_DRIVER_5A driver must pass conformance with the results submitted, + verified, and approved by Khronos before reporting a conformance version + through any mechanism provided by Vulkan (examples include inside the + VkPhysicalDeviceVulkan12Properties and the + VkPhysicalDeviceDriverProperties structs).
+ Otherwise, when such a structure containing a conformance version is + encountered, the driver must return a conformance version + of 0.0.0.0 to indicate it hasn't been so verified and approved. +
YesNoThe loader and/or the application may make assumptions about the + capabilities of the driver resulting in undefined behavior + possibly including crashes or corruption. + + + Vulkan CTS Documentation + +
LDP_DRIVER_6Removed - See + Removed Driver Policies + ----
LDP_DRIVER_7If a driver desires to support Vulkan API 1.1 or newer, it must + expose support for Loader and Driver Interface Version 5 or newer. + The driver will be used when it shouldn't be and will cause + undefined behavior possibly including crashes or corruption. + NoYes + + Version 5 Interface Requirements +
LDP_DRIVER_8If a driver wishes to handle its own VkSurfaceKHR object + creation, it must implement the Loader and Driver Interface Version 3 or + newer and support querying all the relevant surface functions via + vk_icdGetInstanceProcAddr. + The behavior is undefined and may result in crashes or corruption.NoYes + + Handling KHR Surface Objects +
LDP_DRIVER_9If version negotiation results in a driver using the Loader + and Driver Interface Version 4 or earlier, the driver must verify + that the Vulkan API version passed into vkCreateInstance (through + VkInstanceCreateInfo’s VkApplicationInfo's + apiVersion) is supported. + If the requested Vulkan API version can not be supported by the driver, + it must return VK_ERROR_INCOMPATIBLE_DRIVER.
+ This is not required if the interface version is 5 or newer because the + loader is responsible for this check. +
The behavior is undefined and may result in crashes or corruption.NoNo + + Version 5 Interface Requirements +
LDP_DRIVER_10If version negotiation results in a driver using the Loader and Driver Interface + Version 5 or newer, the driver must not return + VK_ERROR_INCOMPATIBLE_DRIVER if the Vulkan API version + passed into vkCreateInstance (through + VkInstanceCreateInfo’s VkApplicationInfo's + apiVersion) is not supported by the driver. This check is performed + by the loader on the drivers behalf. + The behavior is undefined and may result in crashes or corruption.NoNo + + Version 5 Interface Requirements +
LDP_DRIVER_11A driver must remove all Manifest files and references to those + files (i.e. Registry entries on Windows) when uninstalling. +
+ Similarly, on updating the driver files, the old files must be + all updated or removed. +
If an old file is left pointing to an incorrect library, it will + result in undefined behavior which may include crashes or corruption. + NoNo
+ The loader has no idea what driver files are new, old, or incorrect. + Any type of driver file verification would quickly become very complex + since it would require the loader to maintain an internal database + tracking badly behaving drivers based on the driver vendor, driver + version, targeted platform(s), and possibly other criteria. +
N/A
LDP_DRIVER_12To work properly with the public Khronos Loader, a driver + must not expose platform interface extensions without first + publishing them with Khronos.
+ Platforms under development may use modified versions of the Khronos + Loader until the design because stable and/or public. +
The behavior is undefined and may result in crashes or corruption.Yes (specifically for Android extensions)NoN/A
+ +#### Removed Driver Policies + +These policies were in the loader source at some point but later removed. +They are documented here for reference. + + + + + + + + + + + + +
Requirement NumberRequirement DescriptionRemoval Reason
LDP_DRIVER_6A driver supporting Loader and Driver Interface Version 1 or newer must + not directly export standard Vulkan entry-points. +
+ Instead, it must export only the loader interface functions + required by the interface versions it does support (for example + vk_icdGetInstanceProcAddr).
+ This is because the dynamic linking on some platforms has been + problematic in the past and incorrectly links to exported functions from + the wrong dynamic library at times.
+ NOTE: This is actually true for all exports. + When in doubt, don't export any items from a driver that could cause + conflicts in other libraries.
+
+ This policy has been removed due to there being valid circumstances for + drivers to export core entrypoints. + Additionally, it was not found that dynamic linking would cause many + issues in practice. +
+ +### Requirements of a Well-Behaved Loader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Requirement NumberRequirement DescriptionResult of Non-ComplianceApplicable to Android?Reference Section
LDP_LOADER_1A loader must return VK_ERROR_INCOMPATIBLE_DRIVER if it + fails to find and load a valid Vulkan driver on the system. + The behavior is undefined and may result in crashes or corruption.YesN/A
LDP_LOADER_2A loader must attempt to load any driver's Manifest file it + discovers and determines is formatted in accordance with this document. +
+ The only exception is on platforms which determines driver + location and functionality through some other mechanism. +
The behavior is undefined and may result in crashes or corruption.Yes + Driver Discovery +
LDP_LOADER_3A loader must support a mechanism to load driver in one or more + non-standard locations.
+ This is to allow support for fully software drivers as well as + evaluating in-development ICDs.
+ The only exception to this rule is if the OS does not wish to + support this due to security policies. +
It will be more difficult to use a Vulkan loader by certain + tools and driver developers.No + + Pre-Production ICDs or SW +
LDP_LOADER_4A loader must not load a Vulkan driver which defines an API + version that is incompatible with itself. + The behavior is undefined and may result in crashes or corruption.Yes + Driver Discovery +
LDP_LOADER_5A loader must ignore any driver for which a compatible + Loader and Driver Interface Version can not be negotiated. + The loader would load a driver improperly resulting in undefined + behavior possibly including crashes or corruption. + No + + Interface Negotiation +
LDP_LOADER_6If a driver negotiation results in the loader using Loader and Driver + Interface Version 5 or newer, a loader must verify that the Vulkan + API version passed into vkCreateInstance (through + VkInstanceCreateInfo’s VkApplicationInfo's + apiVersion) is supported by at least one driver. + If the requested Vulkan API version can not be supported by any + driver, the loader must return + VK_ERROR_INCOMPATIBLE_DRIVER.
+ This is not required if the Loader and Driver Interface Version is 4 or + earlier because the responsibility for this check falls on the drivers. +
The behavior is undefined and may result in crashes or corruption.No + + Version 5 Interface Requirements +
LDP_LOADER_7If there exist more than one driver on a system, and some of those + drivers support only Vulkan API version 1.0 while other drivers + support a newer Vulkan API version, then a loader must adjust + the apiVersion field of the VkInstanceCreateInfo’s + VkApplicationInfo to version 1.0 for all the drivers that are + only aware of Vulkan API version 1.0.
+ Otherwise, the drivers that support Vulkan API version 1.0 will + return VK_ERROR_INCOMPATIBLE_DRIVER during + vkCreateInstance since 1.0 drivers were not aware of future + versions. +
The behavior is undefined and may result in crashes or corruption.No + Driver API Version + +
LDP_LOADER_8If more than one driver is present, and at least one driver does not + support instance-level functionality that other drivers support; + then a loader must support the instance-level functionality in + some fashion for the non-supporting drivers. + The behavior is undefined and may result in crashes or corruption.No + + Loader Instance Extension Emulation Support +
LDP_LOADER_9A loader must filter out instance extensions from the + VkInstanceCreateInfo structure's ppEnabledExtensionNames + field that the driver does not support during a call to the driver's + vkCreateInstance.
+ This is because the application has no way of knowing which + drivers support which extensions.
+ This ties in directly with LDP_LOADER_8 above. +
The behavior is undefined and may result in crashes or corruption.No + + Filtering Out Instance Extension Names +
LDP_LOADER_10A loader must support creating VkSurfaceKHR handles + that may be shared by all underlying drivers. + The behavior is undefined and may result in crashes or corruption.Yes + + Handling KHR Surface Objects +
LDP_LOADER_11If a driver exposes the appropriate VkSurfaceKHR + creation/handling entry-points, a loader must support creating + the driver-specific surface object handle and provide it, and not the + shared VkSurfaceKHR handle, back to that driver when requested. +
+ Otherwise, a loader must provide the loader created + VkSurfaceKHR handle. +
The behavior is undefined and may result in crashes or corruption.No + + Handling KHR Surface Objects +
LDP_LOADER_12A loader must not call any vkEnumerate*ExtensionProperties + entry-points in a driver if pLayerName is not NULL. + The behavior is undefined and may result in crashes or corruption.Yes + + Additional Interface Notes +
LDP_LOADER_13A loader must not load from user-defined paths (including the + use of any of VK_ICD_FILENAMES, VK_DRIVER_FILES, or + VK_ADD_DRIVER_FILES environment variables) when running elevated + (Administrator/Super-user) applications.
+ This is for security reasons. +
The behavior is undefined and may result in computer security lapses, + crashes or corruption. + No + + Exception for Administrator and Super-User mode + +
+ +
+ +[Return to the top-level LoaderInterfaceArchitecture.md file.](LoaderInterfaceArchitecture.md) diff --git a/local/recipes/libs/vulkan-loader/source/docs/LoaderInterfaceArchitecture.md b/local/recipes/libs/vulkan-loader/source/docs/LoaderInterfaceArchitecture.md new file mode 100644 index 0000000000..a1bf4c8faa --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/LoaderInterfaceArchitecture.md @@ -0,0 +1,1323 @@ + +[![Khronos Vulkan][1]][2] + +[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/" +[2]: https://www.khronos.org/vulkan/ + +# Architecture of the Vulkan Loader Interfaces +[![Creative Commons][3]][4] + + + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[4]: https://creativecommons.org/licenses/by-nd/4.0/ +## Table of Contents + +- [Overview](#overview) + - [Who Should Read This Document](#who-should-read-this-document) + - [The Loader](#the-loader) + - [Goals of the Loader](#goals-of-the-loader) + - [Layers](#layers) + - [Drivers](#drivers) + - [Installable Client Drivers](#installable-client-drivers) + - [VkConfig](#vkconfig) +- [Important Vulkan Concepts](#important-vulkan-concepts) + - [Instance Versus Device](#instance-versus-device) + - [Instance-Specific](#instance-specific) + - [Instance Objects](#instance-objects) + - [Instance Functions](#instance-functions) + - [Instance Extensions](#instance-extensions) + - [Device-Specific](#device-specific) + - [Device Objects](#device-objects) + - [Device Functions](#device-functions) + - [Device Extensions](#device-extensions) + - [Dispatch Tables and Call Chains](#dispatch-tables-and-call-chains) + - [Instance Call Chain Example](#instance-call-chain-example) + - [Device Call Chain Example](#device-call-chain-example) +- [Elevated Privilege Caveats](#elevated-privilege-caveats) +- [Application Interface to the Loader](#application-interface-to-the-loader) +- [Layer Interface with the Loader](#layer-interface-with-the-loader) +- [Driver Interface With the Loader](#driver-interface-with-the-loader) +- [Debugging Issues](#debugging-issues) +- [Loader Policies](#loader-policies) +- [Filter Environment Variable Behaviors](#filter-environment-variable-behaviors) + - [Comparison Strings](#comparison-strings) + - [Comma-Delimited Lists](#comma-delimited-lists) + - [Globs](#globs) + - [Case-Insensitive](#case-insensitive) + - [Environment Variable Priority](#environment-variable-priority) +- [Table of Debug Environment Variables](#table-of-debug-environment-variables) + - [Active Environment Variables](#active-environment-variables) + - [Deprecated Environment Variables](#deprecated-environment-variables) +- [Glossary of Terms](#glossary-of-terms) + +## Overview + +Vulkan is a layered architecture, made up of the following elements: + * The Vulkan Application + * [The Vulkan Loader](#the-loader) + * [Vulkan Layers](#layers) + * [Drivers](#drivers) + * [VkConfig](#vkconfig) + +![High Level View of Loader](./images/high_level_loader.png) + +The general concepts in this document are applicable to the loaders available +for Windows, Linux, Android, and macOS systems. + + +### Who Should Read This Document + +While this document is primarily targeted at developers of Vulkan applications, +drivers and layers, the information contained in it could be useful to anyone +wanting a better understanding of the Vulkan runtime. + + +### The Loader + +The application sits at the top and interfaces directly with the Vulkan +loader. +At the bottom of the stack sits the drivers. +A driver can control one or more physical devices capable of rendering Vulkan, +implement a conversion from Vulkan into a native graphics API (like +[MoltenVk](https://github.com/KhronosGroup/MoltenVK), or implement a fully +software path that can be executed on a CPU to simulate a Vulkan device (like +[SwiftShader](https://github.com/google/swiftshader) or LavaPipe). +Remember, Vulkan-capable hardware may be graphics-based, compute-based, or +both. +Between the application and the drivers, the loader can inject any number of +optional [layers](#layers) that provide special functionality. +The loader is critical to managing the proper dispatching of Vulkan +functions to the appropriate set of layers and drivers. +The Vulkan object model allows the loader to insert layers into a call-chain +so that the layers can process Vulkan functions prior to the driver being +called. + +This document is intended to provide an overview of the necessary interfaces +between each of these. + + +#### Goals of the Loader + +The loader was designed with the following goals in mind: + 1. Support one or more Vulkan-capable drivers on a user's system without them + interfering with one another. + 2. Support Vulkan Layers which are optional modules that can be enabled by an +application, developer, or standard system settings. + 3. Keep the overall overhead of the loader to the minimum possible. + + +### Layers + +Layers are optional components that augment the Vulkan development environment. +They can intercept, evaluate, and modify existing Vulkan functions on their +way from the application down to the drivers and back up. +Layers are implemented as libraries that can be enabled in different ways +and are loaded during CreateInstance. +Each layer can choose to hook, or intercept, Vulkan functions which in +turn can be ignored, inspected, or augmented. +Any function a layer does not hook is simply skipped for that layer and the +control flow will simply continue on to the next supporting layer or +driver. +Because of this, a layer can choose whether to intercept all known Vulkan +functions or only a subset it is interested in. + +Some examples of features that layers may expose include: + * Validating API usage + * Tracing API calls + * Debugging aids + * Profiling + * Overlay + +Because layers are optional and dynamically loaded, they can be enabled +and disabled as desired. +For example, while developing and debugging an application, enabling +certain layers can assist in making sure it properly uses the Vulkan API. +But when releasing the application, those layers are unnecessary +and thus won't be enabled, increasing the speed of the application. + + +### Drivers + +The library that implements Vulkan, either through supporting a physical +hardware device directly, converting Vulkan commands into native graphics +commands, or simulating Vulkan through software, is considered "a driver". +The most common type of driver is still the Installable Client Driver (or ICD). +The loader is responsible for discovering available Vulkan drivers on the +system. +Given a list of available drivers, the loader can enumerate all the available +physical devices and provide this information for an application. + + +#### Installable Client Drivers + +Vulkan allows multiple ICDs each supporting one or more devices. +Each of these devices is represented by a Vulkan `VkPhysicalDevice` object. +The loader is responsible for discovering available Vulkan ICDs via the standard +driver search on the system. + + +### VkConfig + +VkConfig is a tool LunarG has developed to assist with modifying the Vulkan +environment on the local system. +It can be used to find layers, enable them, change layer settings, and other +useful features. +VkConfig can be found by either installing the +[Vulkan SDK](https://vulkan.lunarg.com/) or by building the source out of the +[LunarG VulkanTools GitHub Repo](https://github.com/LunarG/VulkanTools). + +VkConfig generates three outputs, two of which work with the Vulkan loader and +layers. +These outputs are: + * The Vulkan Override Layer + * The Vulkan Layer Settings File + * VkConfig Configuration Settings + +These files are found in different locations based on your platform: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PlatformOutputLocation
LinuxVulkan Override Layer$USER/.local/share/vulkan/implicit_layer.d/VkLayer_override.json
Vulkan Layer Settings$USER/.local/share/vulkan/settings.d/vk_layer_settings.txt
VkConfig Configuration Settings$USER/.local/share/vulkan/settings.d/vk_layer_settings.txt
WindowsVulkan Override Layer%HOME%\AppData\Local\LunarG\vkconfig\override\VkLayerOverride.json
Vulkan Layer Settings(registry) HKEY_CURRENT_USER\Software\Khronos\Vulkan\LoaderSettings
VkConfig Configuration Settings(registry) HKEY_CURRENT_USER\Software\LunarG\vkconfig
+ +The [Override Meta-Layer](./LoaderLayerInterface.md#override-meta-layer) is +an important part of how VkConfig works. +This layer, when found by the loader, forces the loading of the desired layers +that were enabled inside of VkConfig as well as disables those layers that +were intentionally disabled (including implicit layers). + +The Vulkan Layer Settings file can be used to specify certain behaviors and +actions each enabled layer is expected to perform. +These settings can also be controlled by VkConfig, or they can be manually +enabled. +For details on what settings can be used, refer to the individual layers. + +In the future, VkConfig may have additional interactions with the Vulkan +loader. + +More details on VkConfig can be found in its +[GitHub documentation](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md). +
+
+ + +## Important Vulkan Concepts + +Vulkan has a few concepts that provide a fundamental basis for its organization. +These concepts should be understood by any one attempting to use Vulkan or +develop any of its components. + + +### Instance Versus Device + +An important concept to understand, which is brought up repeatedly throughout this +document, is how the Vulkan API is organized. +Many objects, functions, extensions, and other behavior in Vulkan can be +separated into two groups: + * [Instance-specific](#instance-specific) + * [Device-specific](#device-specific) + + +#### Instance-Specific + +A "Vulkan instance" (`VkInstance`) is a high-level construct used to provide +Vulkan system-level information and functionality. + +##### Instance Objects + +A few Vulkan objects associated directly with an instance are: + * `VkInstance` + * `VkPhysicalDevice` + * `VkPhysicalDeviceGroup` + +##### Instance Functions + +An "instance function" is any Vulkan function where the first parameter is an +[instance object](#instance-objects) or no object at all. + +Some Vulkan instance functions are: + * `vkEnumerateInstanceExtensionProperties` + * `vkEnumeratePhysicalDevices` + * `vkCreateInstance` + * `vkDestroyInstance` + +An application can link directly to all core instance functions through the +Vulkan loader's headers. +Alternatively, an application can query function pointers using +`vkGetInstanceProcAddr`. +`vkGetInstanceProcAddr` can be used to query any instance or device entry-points +in addition to all core entry-points. + +If `vkGetInstanceProcAddr` is called using a `VkInstance`, then any function +pointer returned is specific to that `VkInstance` and any additional objects +that are created from it. + +##### Instance Extensions + +Extensions to Vulkan are similarly associated based on what type of +functions they provide. +Because of this, extensions are broken up into instance or device extensions +where most, if not all of the functions, in the extension are of the +corresponding type. +For example, an "instance extension" is composed primarily of "instance +functions" which primarily take instance objects. +These will be discussed in more detail later. + + +#### Device-Specific + +A Vulkan device (`VkDevice`), on the other-hand, is a logical identifier used +to associate functions with a particular Vulkan physical device +(`VkPhysicalDevice`) through a particular driver on a user's system. + +##### Device Objects + +A few of the Vulkan constructs associated directly with a device include: + * `VkDevice` + * `VkQueue` + * `VkCommandBuffer` + +##### Device Functions + +A "device function" is any Vulkan function which takes any device object as its +first parameter or a child object of the device. +The vast majority of Vulkan functions are device functions. +Some Vulkan device functions are: + * `vkQueueSubmit` + * `vkBeginCommandBuffer` + * `vkCreateEvent` + +Vulkan devices functions may be queried using either `vkGetInstanceProcAddr` or +`vkGetDeviceProcAddr`. +If an application chooses to use `vkGetInstanceProcAddr`, each call will have +additional function calls built into the call chain, which will reduce +performance slightly. +If, instead, the application uses `vkGetDeviceProcAddr`, the call chain will be +more optimized to the specific device, but the returned function pointers will +**only** work for the device used when querying them. +Unlike `vkGetInstanceProcAddr`, `vkGetDeviceProcAddr` can only be used on +Vulkan device functions. + +The best solution is to query instance extension functions using +`vkGetInstanceProcAddr`, and to query device extension functions using +`vkGetDeviceProcAddr`. +See +[Best Application Performance Setup](LoaderApplicationInterface.md#best-application-performance-setup) +section in the +[LoaderApplicationInterface.md](LoaderApplicationInterface.md) document for more +information on this. + +##### Device Extensions + +As with instance extensions, a device extension is a set of Vulkan device +functions extending the Vulkan language. +More information about device extensions can be found later in this document. + + +### Dispatch Tables and Call Chains + +Vulkan uses an object model to control the scope of a particular action or +operation. +The object to be acted on is always the first parameter of a Vulkan call and is +a dispatchable object (see Vulkan specification section 3.3 Object Model). +Under the covers, the dispatchable object handle is a pointer to a structure, +which in turn, contains a pointer to a dispatch table maintained by the loader. +This dispatch table contains pointers to the Vulkan functions appropriate to +that object. + +There are two types of dispatch tables the loader maintains: + - Instance Dispatch Table + - Created in the loader during the call to `vkCreateInstance` + - Device Dispatch Table + - Created in the loader during the call to `vkCreateDevice` + +At that time the application and the system can each specify optional layers to +be included. +The loader will initialize the specified layers to create a call chain for each +Vulkan function and each entry of the dispatch table will point to the first +element of that chain. +Thus, the loader builds an instance call chain for each `VkInstance` that is +created and a device call chain for each `VkDevice` that is created. + +When an application calls a Vulkan function, this typically will first hit a +*trampoline* function in the loader. +These *trampoline* functions are small, simple functions that jump to the +appropriate dispatch table entry for the object they are given. +Additionally, for functions in the instance call chain, the loader has an +additional function, called a *terminator*, which is called after all enabled +layers to marshall the appropriate information to all available drivers. + + +#### Instance Call Chain Example + +For example, the diagram below represents what happens in the call chain for +`vkCreateInstance`. +After initializing the chain, the loader calls into the first layer's +`vkCreateInstance`, which will call the next layer's `vkCreateInstance` +before finally terminating in the loader again where it will call +every driver's `vkCreateInstance`. +This allows every enabled layer in the chain to set up what it needs based on +the `VkInstanceCreateInfo` structure from the application. + +![Instance Call Chain](./images/loader_instance_chain.png) + +This also highlights some of the complexity the loader must manage when using +instance call chains. +As shown here, the loader's *terminator* must aggregate information to and from +multiple drivers when they are present. +This implies that the loader has to be aware of any instance-level extensions +which work on a `VkInstance` to aggregate them correctly. + + +#### Device Call Chain Example + +Device call chains are created in `vkCreateDevice` and are generally simpler +because they deal with only a single device. +This allows for the specific driver exposing this device to always be the +*terminator* of the chain. + +![Loader Device Call Chain](./images/loader_device_chain_loader.png) +
+ + +## Elevated Privilege Caveats + +To ensure that the system is safe from exploitation, Vulkan applications which +are run with elevated privileges are restricted from certain operations, such +as reading environment variables from unsecure locations or searching for +files in user controlled paths. +This is done to ensure that an application running with elevated privileges does +not run using components that were not installed in the proper approved +locations. + +The loader uses platform-specific mechanisms (such as `secure_getenv` and its +equivalents) for querying sensitive environment variables to avoid accidentally +using untrusted results. + +These behaviors also result in ignoring certain environment variables, such as: + + * `VK_DRIVER_FILES` / `VK_ICD_FILENAMES` + * `VK_ADD_DRIVER_FILES` + * `VK_LAYER_PATH` + * `VK_ADD_LAYER_PATH` + * `VK_IMPLICIT_LAYER_PATH` + * `VK_ADD_IMPLICIT_LAYER_PATH` + * `XDG_CONFIG_HOME` (Linux/Mac-specific) + * `XDG_DATA_HOME` (Linux/Mac-specific) + +For more information on the affected search paths, refer to +[Layer Discovery](LoaderLayerInterface.md#layer-discovery) and +[Driver Discovery](LoaderDriverInterface.md#driver-discovery). +
+
+ + +## Application Interface to the Loader + +The Application interface to the Vulkan loader is now detailed in the +[LoaderApplicationInterface.md](LoaderApplicationInterface.md) document found in +the same directory as this file. +
+
+ + +## Layer Interface with the Loader + +The Layer interface to the Vulkan loader is detailed in the +[LoaderLayerInterface.md](LoaderLayerInterface.md) document found in the same +directory as this file. +
+
+ + +## Driver Interface With the Loader + +The Driver interface to the Vulkan loader is detailed in the +[LoaderDriverInterface.md](LoaderDriverInterface.md) document found in the same +directory as this file. +
+
+ + +## Debugging Issues + + +If your application is crashing or behaving weirdly, the loader provides +several mechanisms for you to debug the issues. +These are detailed in the [LoaderDebugging.md](LoaderDebugging.md) document +found in the same directory as this file. +
+
+ + +## Loader Policies + +Loader policies with regards to the loader interaction with drivers and layers + are now documented in the appropriate sections. +The intention of these sections is to clearly define expected behavior of the +loader with regards to its interactions with those components. +This could be especially useful in cases where a new or specialized loader may +be required that conforms to the behavior of the existing loader. +Because of this, the primary focus of those sections is on expected behaviors +for all relevant components to create a consistent experience across platforms. +In the long-run, this could also be used as validation requirements for any +existing Vulkan loaders. + +To review the particular policy sections, please refer to one or both of the +sections listed below: + * [Loader And Driver Policy](LoaderDriverInterface.md#loader-and-driver-policy) + * [Loader And Layer Policy](LoaderLayerInterface.md#loader-and-layer-policy) +
+
+ +## Filter Environment Variable Behaviors + +The filter environment variables provided in certain areas have some common +restrictions and behaviors that should be listed. + +### Comparison Strings + +The filter variables will be compared against the appropriate strings for either +drivers or layers. +The appropriate string for layers is the layer name provided in the layer's +manifest file. +Since drivers don’t have a name like layers, this substring is used to compare +against the driver manifest's filename. + +### Comma-Delimited Lists + +All of the filter environment variables accept comma-delimited input. +Therefore, you can chain multiple strings together and it will use the strings +to individually enable or disable the appropriate item in the current list of +available items. + +### Globs + +To provide enough flexibility to limit name searches to only those wanted by the +developer, the loader uses a limited glob format for strings. +Acceptable globs are: + - Prefixes: `"string*"` + - Suffixes: `"*string"` + - Substrings: `"*string*"` + - Whole strings: `"string"` + - In the case of whole strings, the string will be compared against each + layer or driver file name in its entirety. + - Because of this, it will only match the specific target such as: + `VK_LAYER_KHRONOS_validation` will match the layer name + `VK_LAYER_KHRONOS_validation`, but **not** a layer named + `VK_LAYER_KHRONOS_validation2` (not that there is such a layer). + +This is especially useful because it is difficult sometimes to determine the +full name of a driver manifest file or even some commonly used layers +such as `VK_LAYER_KHRONOS_validation`. + +### Case-Insensitive + +All of the filter environment variables assume the strings inside of the glob +are not case-sensitive. +Therefore, “Bobâ€, “bobâ€, and “BOB†all amount to the same thing. + +### Environment Variable Priority + +The values from the *disable* environment variable will be considered +**before** the *enable* or *select* environment variable. +Because of this, it is possible to disable a layer/driver using the *disable* +environment variable, only to have it be re-enabled by the *enable*/*select* +environment variable. +This is useful if you disable all layers/drivers with the intent of only +enabling a smaller subset of specific layers/drivers for issue triaging. + +## Table of Debug Environment Variables + +The following are all the Debug Environment Variables available for use with the +Loader. +These are referenced throughout the text, but collected here for ease of +discovery. + +### Active Environment Variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Environment VariableBehaviorRestrictionsExample Format
+ VK_ADD_DRIVER_FILES + + Provide a list of additional driver JSON files that the loader will use + in addition to the drivers that the loader would find normally. + The list of drivers will be added first, prior to the list of drivers + that would be found normally. + The value contains a list of delimited full path listings to + driver JSON Manifest files.
+
+ If a global path to the JSON file is not used, issues may be encountered. +

+ + Ignored when running Vulkan application with elevated privileges. + +
+ export
+   VK_ADD_DRIVER_FILES=
+      /intel.json:/amd.json +

+ set
+   VK_ADD_DRIVER_FILES=
+      \nvidia.json;\mesa.json +
+ VK_ADD_LAYER_PATH + + Provide a list of additional paths that the loader will use to search + for explicit layers in addition to the loader's standard layer library + search paths when looking for layer manifest files. + The paths will be added first, prior to the list of folders that would + be searched normally. + + + Ignored when running Vulkan application with elevated privileges. + + + export
+   VK_ADD_LAYER_PATH=
+      <path_a>:<path_b>

+ set
+   VK_ADD_LAYER_PATH=
+      <path_a>;<path_b>
+
+ VK_ADD_IMPLICIT_LAYER_PATH + + Provide a list of additional paths that the loader will use to search + for implicit layers in addition to the loader's standard layer library + search paths when looking for layer manifest files. + The paths will be added first, prior to the list of folders that would + be searched normally. + + + Ignored when running Vulkan application with elevated privileges. + + + export
+   VK_ADD_IMPLICIT_LAYER_PATH=
+      <path_a>:<path_b>

+ set
+   VK_ADD_IMPLICIT_LAYER_PATH=
+      <path_a>;<path_b>
+
+ VK_DRIVER_FILES + + Force the loader to use the specific driver JSON files. + The value contains a list of delimited full path listings to + driver JSON Manifest files and/or + paths to folders containing driver JSON files.
+
+ This has replaced the older deprecated environment variable + VK_ICD_FILENAMES, however the older environment variable will + continue to work. +
+ This functionality is only available with Loaders built with version + 1.3.207 of the Vulkan headers and later.
+ It is recommended to use absolute paths to JSON files. + Relative paths may have issues due to how the loader transforms relative library + paths into absolute ones. +

+ + Ignored when running Vulkan application with elevated privileges. + +
+ export
+   VK_DRIVER_FILES=
+      /intel.json:/amd.json +

+ set
+   VK_DRIVER_FILES=
+      \nvidia.json;\mesa.json +
+
+ VK_LAYER_PATH + Override the loader's standard explicit layer search paths and use the + provided delimited files and/or folders to locate layer manifest files. + + + Ignored when running Vulkan application with elevated privileges. + + + export
+   VK_LAYER_PATH=
+      <path_a>:<path_b>

+ set
+   VK_LAYER_PATH=
+      <path_a>;<path_b> +
+ VK_IMPLICIT_LAYER_PATH + Override the loader's standard implicit layer search paths and use the + provided delimited files and/or folders to locate layer manifest files. + + + Ignored when running Vulkan application with elevated privileges. + + + export
+   VK_IMPLICIT_LAYER_PATH=
+      <path_a>:<path_b>

+ set
+   VK_IMPLICIT_LAYER_PATH=
+      <path_a>;<path_b> +
+ VK_LOADER_DEBUG + + Enable loader debug messages using a comma-delimited list of level + options. These options are:
+   * error (only errors)
+   * warn (only warnings)
+   * info (only info)
+   * debug (only debug)
+   * layer (layer-specific output)
+   * driver (driver-specific output)
+   * all (report out all messages)

+ To enable multiple options (outside of "all") like info, warning and + error messages, set the value to "error,warn,info". +
+ None + + export
+   VK_LOADER_DEBUG=all
+
+ set
+   VK_LOADER_DEBUG=warn +
+ VK_LOADER_DEVICE_SELECT + + Allows the user to force a particular device to be prioritized above all + other devices in the return order of vkGetPhysicalDevices and + vkGetPhysicalDeviceGroups functions.
+ The value should be ":".
+ NOTE: This DOES NOT REMOVE devices from the list on reorders them. +
+ Linux Only + + set VK_LOADER_DEVICE_SELECT=0x10de:0x1f91 +
+ VK_LOADER_DISABLE_SELECT + + Allows the user to disable the consistent sorting algorithm run in the + loader before returning the set of physical devices to layers.
+
+ Linux Only + + set VK_LOADER_DISABLE_SELECT=1 +
+ VK_LOADER_DISABLE_INST_EXT_FILTER + + Disable the filtering out of instance extensions that the loader doesn't + know about. + This will allow applications to enable instance extensions exposed by + drivers but that the loader has no support for.
+
+ Use Wisely! This may cause the loader or application to crash. + + export
+   VK_LOADER_DISABLE_INST_EXT_FILTER=1

+ set
+   VK_LOADER_DISABLE_INST_EXT_FILTER=1 +
+ VK_LOADER_DRIVERS_SELECT + + A comma-delimited list of globs to search for in known drivers and + used to select only the drivers whose manifest file names match one or + more of the provided globs.
+ Since drivers don’t have a name like layers, this glob is used to + compare against the manifest filename. + Known driver manifests being those files that are already found by the + loader taking into account default search paths and other environment + variables (like VK_ICD_FILENAMES or VK_ADD_DRIVER_FILES). +
+ This functionality is only available with Loaders built with version + 1.3.234 of the Vulkan headers and later.
+ If no drivers are found with a manifest filename that matches any of the + provided globs, then no driver is enabled and it may result + in Vulkan applications failing to run properly. +
+ export
+   VK_LOADER_DRIVERS_SELECT=nvidia*
+
+ set
+   VK_LOADER_DRIVERS_SELECT=nvidia*

+ The above would select only the Nvidia driver if it was present on the + system and already visible to the loader. +
+ VK_LOADER_DRIVERS_DISABLE + + A comma-delimited list of globs to search for in known drivers and + used to disable only the drivers whose manifest file names match one or + more of the provided globs.
+ Since drivers don’t have a name like layers, this glob is used to + compare against the manifest filename. + Known driver manifests being those files that are already found by the + loader taking into account default search paths and other environment + variables (like VK_ICD_FILENAMES or VK_ADD_DRIVER_FILES). +
+ This functionality is only available with Loaders built with version + 1.3.234 of the Vulkan headers and later.
+ If all available drivers are disabled using this environment variable, + then no drivers will be found by the loader and will result + in Vulkan applications failing to run properly.
+ This is also checked before other driver environment variables (such as + VK_LOADER_DRIVERS_SELECT) so that a user may easily disable all + drivers and then selectively re-enable individual drivers using the + enable environment variable. +
+ export
+   VK_LOADER_DRIVERS_DISABLE=*amd*,*intel*
+
+ set
+   VK_LOADER_DRIVERS_DISABLE=*amd*,*intel*

+ The above would disable both Intel and AMD drivers if both were present + on the system and already visible to the loader. +
+ VK_LOADER_LAYERS_ENABLE + + A comma-delimited list of globs to search for in known layers and + used to select only the layers whose layer name matches one or more of + the provided globs.
+ Known layers are those which are found by the loader taking into account + default search paths and other environment variables + (like VK_LAYER_PATH). +
+ This has replaced the older deprecated environment variable + VK_INSTANCE_LAYERS +
+ This functionality is only available with Loaders built with version + 1.3.234 of the Vulkan headers and later. + + export
+   VK_LOADER_LAYERS_ENABLE=*validation,*recon*
+
+ set
+   VK_LOADER_LAYERS_ENABLE=*validation,*recon*

+ The above would enable the Khronos validation layer and the + GfxReconstruct layer, if both were present on the system and already + visible to the loader. +
+ VK_LOADER_LAYERS_DISABLE + + A comma-delimited list of globs to search for in known layers and + used to disable only the layers whose layer name matches one or more of + the provided globs.
+ Known layers are those which are found by the loader taking into account + default search paths and other environment variables + (like VK_LAYER_PATH). +
+ This functionality is only available with Loaders built with version + 1.3.234 of the Vulkan headers and later.
+ Disabling a layer that an application intentionally enables as an + explicit layer may cause the application to not function + properly.
+ This is also checked before other layer environment variables (such as + VK_LOADER_LAYERS_ENABLE) so that a user may easily disable all + layers and then selectively re-enable individual layers using the + enable environment variable. +
+ export
+   VK_LOADER_LAYERS_DISABLE=*MESA*,~implicit~
+
+ set
+   VK_LOADER_LAYERS_DISABLE=*MESA*,~implicit~

+ The above would disable any Mesa layer and all other implicit layers + that would normally be enabled on the system. +
+ VK_LOADER_LAYERS_ALLOW + + A comma-delimited list of globs to search for in known layers and + used to prevent layers whose layer name matches one or more of + the provided globs from being disabled by VK_LOADER_LAYERS_DISABLE.
+ Known layers are those which are found by the loader taking into account + default search paths and other environment variables + (like VK_LAYER_PATH). +
+ This functionality is only available with Loaders built with version + 1.3.262 of the Vulkan headers and later.
+ This will not cause layers to be enabled if the normal mechanism to + enable them +
+ export
+   VK_LOADER_LAYERS_ALLOW=*validation*,*recon*
+
+ set
+   VK_LOADER_LAYERS_ALLOW=*validation*,*recon*

+ The above would allow any layer whose name is validation or recon to be + enabled regardless of the value of VK_LOADER_LAYERS_DISABLE. +
+ VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING + + If set to "1", causes the loader to not unload dynamic libraries during vkDestroyInstance. + This option allows leak sanitizers to have full stack traces. + + This functionality is only available with Loaders built with version + 1.3.259 of the Vulkan headers and later.
+
+ export
+   VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING=1
+
+ set
+   VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING=1

+
+ +
+ +### Deprecated Environment Variables + +These environment variables are still active and supported, however support +may be removed in a future loader release. + + + + + + + + + + + + + + + + + + + + + + + +
Environment VariableBehaviorReplaced ByRestrictionsExample Format
VK_ICD_FILENAMES + Force the loader to use the specific driver JSON files. + The value contains a list of delimited full path listings to + driver JSON Manifest files.
+
+ NOTE: If a global path to the JSON file is not used, issues + may be encountered.
+
+ This has been replaced by VK_DRIVER_FILES. + + + Ignored when running Vulkan application with elevated privileges. + + + export
+   VK_ICD_FILENAMES=
+      /intel.json:/amd.json +

+ set
+   VK_ICD_FILENAMES=
+      \nvidia.json;\mesa.json +
+ VK_INSTANCE_LAYERS + + Force the loader to add the given layers to the list of Enabled layers + normally passed into vkCreateInstance. + These layers are added first, and the loader will remove any duplicate + layers that appear in both this list as well as that passed into + ppEnabledLayerNames. + + This has been deprecated by VK_LOADER_LAYERS_ENABLE. + It also overrides any layers disabled with + VK_LOADER_LAYERS_DISABLE. + + None + + export
+   VK_INSTANCE_LAYERS=
+      <layer_a>;<layer_b>

+ set
+   VK_INSTANCE_LAYERS=
+      <layer_a>;<layer_b> +
+
+
+ +## Glossary of Terms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field NameField Value
Android LoaderThe loader designed to work primarily for the Android OS. + This is generated from a different code base than the Khronos loader. + But, in all important aspects, it should be functionally equivalent. +
Khronos LoaderThe loader released by Khronos and currently designed to work primarily + on Windows, Linux, macOS, Stadia, and Fuchsia. + This is generated from a different + code base + than the Android loader. + But in all important aspects, it should be functionally equivalent. +
Core FunctionA function that is already part of the Vulkan core specification and not + an extension.
+ For example, vkCreateDevice(). +
Device Call ChainThe call chain of functions followed for device functions. + This call chain for a device function is usually as follows: first the + application calls into a loader trampoline, then the loader trampoline + calls enabled layers, and the final layer calls into the driver specific + to the device.
+ See the + Dispatch Tables and Call + Chains section for more information. +
Device FunctionA device function is any Vulkan function which takes a VkDevice, + VkQueue, VkCommandBuffer, or any child of these, as its + first parameter.

+ Some Vulkan device functions are:
+   vkQueueSubmit,
+   vkBeginCommandBuffer,
+   vkCreateEvent.

+ See the Instance Versus Device + section for more information. +
DiscoveryThe process of the loader searching for driver and layer files to set up + the internal list of Vulkan objects available.
+ On Windows/Linux/macOS, the discovery process typically focuses + on searching for Manifest files.
+ On Android, the process focuses on searching for library files. +
Dispatch TableAn array of function pointers (including core and possibly extension + functions) used to step to the next entity in a call chain. + The entity could be the loader, a layer or a driver.
+ See Dispatch Tables and Call + Chains for more information. +
DriverThe underlying library which provides support for the Vulkan API. + This support can be implemented as either an ICD, API translation + library, or pure software.
+ See Drivers section for more information. +
ExtensionA concept of Vulkan used to expand the core Vulkan functionality. + Extensions may be IHV-specific, platform-specific, or more broadly + available.
+ Always first query if an extension exists, and enable it during + vkCreateInstance (if it is an instance extension) or during + vkCreateDevice (if it is a device extension) before attempting + to use it.
+ Extensions will always have an author prefix or suffix modifier to every + structure, enumeration entry, command entry-point, or define that is + associated with it. + For example, `KHR` is the prefix for Khronos authored extensions and + will also be found on structures, enumeration entries, and commands + associated with those extensions. +
Extension FunctionA function that is defined as part of an extension and not part of the + Vulkan core specification.
+ As with the extension the function is defined as part of, it will have a + suffix modifier indicating the author of the extension.
+ Some example extension suffixes include:
+   KHR - For Khronos authored extensions,
+   EXT - For multi-company authored extensions,
+   AMD - For AMD authored extensions,
+   ARM - For ARM authored extensions,
+   NV - For Nvidia authored extensions.
+
ICDAcronym for "Installable Client Driver". + These are drivers that are provided by IHVs to interact with the + hardware they provide.
+ These are the most common type of Vulkan drivers.
+ See Installable Client Drivers + section for more information. +
IHVAcronym for an "Independent Hardware Vendor". + Typically the company that built the underlying hardware technology + that is being used.
+ A typical examples for a Graphics IHV include (but not limited to): + AMD, ARM, Imagination, Intel, Nvidia, Qualcomm +
Instance Call ChainThe call chain of functions followed for instance functions. + This call chain for an instance function is usually as follows: first + the application calls into a loader trampoline, then the loader + trampoline calls enabled layers, the final layer calls a loader + terminator, and the loader terminator calls all available + drivers.
+ See the Dispatch Tables and + Call Chains section for more information. +
Instance FunctionAn instance function is any Vulkan function which takes as its first + parameter either a VkInstance or a VkPhysicalDevice or + nothing at all.

+ Some Vulkan instance functions are:
+   vkEnumerateInstanceExtensionProperties,
+   vkEnumeratePhysicalDevices,
+   vkCreateInstance,
+   vkDestroyInstance.

+ See the Instance Versus Device + section for more information. +
LayerLayers are optional components that augment the Vulkan system. + They can intercept, evaluate, and modify existing Vulkan functions on + their way from the application down to the driver.
+ See the Layers section for more information. +
Layer LibraryThe Layer Library is the group of all layers the loader is able + to discover. + These may include both implicit and explicit layers. + These layers are available for use by applications unless disabled in + some way. + For more info, see + Layer Discovery + . +
LoaderThe middleware program which acts as the mediator between Vulkan + applications, Vulkan layers, and Vulkan drivers.
+ See The Loader section for more information. +
Manifest FilesData files in JSON format used by the Khronos loader. + These files contain specific information for either a + Layer + or a + Driver + and define necessary information such as where to find files and default + settings. +
Terminator FunctionThe last function in the instance call chain above the driver and owned + by the loader. + This function is required in the instance call chain because all + instance functionality must be communicated to all drivers capable of + receiving the call.
+ See Dispatch Tables and Call + Chains for more information. +
Trampoline FunctionThe first function in an instance or device call chain owned by the + loader which handles the set up and proper call chain walk using the + appropriate dispatch table. + On device functions (in the device call chain) this function can + actually be skipped.
+ See Dispatch Tables and Call + Chains for more information. +
WSI ExtensionAcronym for Windowing System Integration. + A Vulkan extension targeting a particular Windowing system and designed + to interface between the Windowing system and Vulkan.
+ See + WSI Extensions + for more information. +
Exported FunctionA function which is intended to be obtained through the platform specific + dynamic linker, specifically from a Driver or a Layer library. + Functions that are required to be exported are primarily the very first + functions the Loader calls on a Layer or Driver library.
+
Exposed FunctionA function which is intended to be obtained through a Querying Function, such as + `vkGetInstanceProcAddr`. + The exact Querying Function required for a specific exposed function varies + between Layers and Drivers, as well as between interface versions.
+
Querying FunctionsThese are functions which allow the Loader to query other functions from + drivers and layers. These functions may be in the Vulkan API but also may be + from the private Loader and Driver Interface or the Loader and Layer Interface.
+ These functions are: + `vkGetInstanceProcAddr`, `vkGetDeviceProcAddr`, + `vk_icdGetInstanceProcAddr`, `vk_icdGetPhysicalDeviceProcAddr`, and + `vk_layerGetPhysicalDeviceProcAddr`. +
diff --git a/local/recipes/libs/vulkan-loader/source/docs/LoaderLayerInterface.md b/local/recipes/libs/vulkan-loader/source/docs/LoaderLayerInterface.md new file mode 100644 index 0000000000..ae640c95eb --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/LoaderLayerInterface.md @@ -0,0 +1,2738 @@ + +[![Khronos Vulkan][1]][2] + +[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/" +[2]: https://www.khronos.org/vulkan/ + +# Layer Interface to the Loader +[![Creative Commons][3]][4] + + + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[4]: https://creativecommons.org/licenses/by-nd/4.0/ + + +## Table of Contents + +- [Overview](#overview) +- [Layer Discovery](#layer-discovery) + - [Layer Manifest File Usage](#layer-manifest-file-usage) + - [Android Layer Discovery](#android-layer-discovery) + - [Windows Layer Discovery](#windows-layer-discovery) + - [Linux Layer Discovery](#linux-layer-discovery) + - [Example Linux Explicit Layer Search Path](#example-linux-explicit-layer-search-path) + - [Fuchsia Layer Discovery](#fuchsia-layer-discovery) + - [macOS Layer Discovery](#macos-layer-discovery) + - [Example macOS Implicit Layer Search Path](#example-macos-implicit-layer-search-path) + - [Layer Filtering](#layer-filtering) + - [Layer Enable Filtering](#layer-enable-filtering) + - [Layer Disable Filtering](#layer-disable-filtering) + - [Layer Special Case Disable](#layer-special-case-disable) + - [Layer Disable Warning](#layer-disable-warning) + - [Allow certain Layers to ignore Layer Disabling](#allow-certain-layers-to-ignore-layer-disabling) + - [`VK_INSTANCE_LAYERS`](#vk_instance_layers) + - [Exception for Elevated Privileges](#exception-for-elevated-privileges) +- [Layer Version Negotiation](#layer-version-negotiation) +- [Layer Call Chains and Distributed Dispatch](#layer-call-chains-and-distributed-dispatch) +- [Layer Unknown Physical Device Extensions](#layer-unknown-physical-device-extensions) + - [Reason for adding `vk_layerGetPhysicalDeviceProcAddr`](#reason-for-adding-vk_layergetphysicaldeviceprocaddr) +- [Layer Intercept Requirements](#layer-intercept-requirements) +- [Distributed Dispatching Requirements](#distributed-dispatching-requirements) +- [Layer Conventions and Rules](#layer-conventions-and-rules) +- [Layer Dispatch Initialization](#layer-dispatch-initialization) +- [Example Code for CreateInstance](#example-code-for-createinstance) +- [Example Code for CreateDevice](#example-code-for-createdevice) +- [Meta-layers](#meta-layers) + - [Override Meta-Layer](#override-meta-layer) +- [Pre-Instance Functions](#pre-instance-functions) +- [Special Considerations](#special-considerations) + - [Associating Private Data with Vulkan Objects Within a Layer](#associating-private-data-with-vulkan-objects-within-a-layer) + - [Wrapping](#wrapping) + - [Cautions About Wrapping](#cautions-about-wrapping) + - [Hash Maps](#hash-maps) + - [Creating New Dispatchable Objects](#creating-new-dispatchable-objects) + - [Versioning and Activation Interactions](#versioning-and-activation-interactions) +- [Layer Manifest File Format](#layer-manifest-file-format) + - [Layer Manifest File Version History](#layer-manifest-file-version-history) + - [Layer Manifest File Version 1.2.1](#layer-manifest-file-version-121) + - [Layer Manifest File Version 1.2.0](#layer-manifest-file-version-120) + - [Layer Manifest File Version 1.1.2](#layer-manifest-file-version-112) + - [Layer Manifest File Version 1.1.1](#layer-manifest-file-version-111) + - [Layer Manifest File Version 1.1.0](#layer-manifest-file-version-110) + - [Layer Manifest File Version 1.0.1](#layer-manifest-file-version-101) + - [Layer Manifest File Version 1.0.0](#layer-manifest-file-version-100) +- [Layer Interface Versions](#layer-interface-versions) + - [Layer Interface Version 2](#layer-interface-version-2) + - [Layer Interface Version 1](#layer-interface-version-1) + - [Layer Interface Version 0](#layer-interface-version-0) +- [Loader and Layer Interface Policy](#loader-and-layer-interface-policy) + - [Number Format](#number-format) + - [Android Differences](#android-differences) + - [Requirements of Well-Behaved Layers](#requirements-of-well-behaved-layers) + - [Requirements of a Well-Behaved Loader](#requirements-of-a-well-behaved-loader) + + +## Overview + +This is the Layer-centric view of working with the Vulkan loader. +For the complete overview of all sections of the loader, please refer +to the [LoaderInterfaceArchitecture.md](LoaderInterfaceArchitecture.md) file. + + +## Layer Discovery + +As mentioned in the +[Implicit versus Explicit](LoaderApplicationInterface.md#implicit-vs-explicit-layers), +section of the +[LoaderApplicationInterface.md](LoaderApplicationInterface.md) document, layers +can be categorized into two categories: + * Implicit Layers + * Explicit Layers + +The main difference between the two is that implicit layers are automatically +enabled, unless overridden, and explicit layers must be enabled. +Remember, implicit layers are not present on all Operating Systems (like +Android). + +On any system, the loader looks in specific areas for information on the layers +that it can load at a user's request. +The process of finding the available layers on a system is known as Layer +Discovery. +During discovery, the loader determines what layers are available, the layer +name, the layer version, and any extensions supported by the layer. +This information is provided back to an application through +`vkEnumerateInstanceLayerProperties`. + +The group of layers available to the loader is known as the `Layer Library`. +This section defines an extensible interface to discover what layers are +contained in the `Layer Library`. + +This section also specifies the minimal conventions and rules a layer must +follow, especially with regards to interacting with the loader and other +layers. + +When searching for a layer, the loader will look through the `Layer Library` in +the order it detected them and load the layer if the name matches. +If multiple instances of the same library exist in different locations +throughout the user's system, then the one appearing first in the search order +will be used. +Each OS has its own search order that is defined in its layer discovery +section below. +If multiple manifest files in the same directory define the same layer, but +point to different library files, the order which the layers is loaded is +[random due to the behavior of readdir](https://www.ibm.com/support/pages/order-directory-contents-returned-calls-readdir). + +Additionally, any duplicate layer names in either the component layer list, or +globally among all enabled layers, during calls to `vkCreateInstance` or +`vkCreateDevice` will simply be ignored by the loader. +Only the first occurrence of any layer name will be used. + + +### Layer Manifest File Usage + +On Windows, Linux, and macOS systems, JSON-formatted manifest files are used to +store layer information. +In order to find system-installed layers, the Vulkan loader will read the JSON +files to identify the names and attributes of layers and their extensions. +The use of manifest files allows the loader to avoid loading any shared library +files when the application does not query nor request any extensions. +The format of [Layer Manifest File](#layer-manifest-file-format) is detailed +below. + +The Android loader does not use manifest files. +Instead, the loader queries the layer properties using special functions known +as "introspection" functions. +The intent of these functions is to determine the same required information +gathered from reading the manifest files. +These introspection functions are not used by the Khronos loader but should be +present in layers to maintain consistency. +The specific "introspection" functions are called out in the +[Layer Manifest File Format](#layer-manifest-file-format) table. + + +### Android Layer Discovery + +On Android, the loader looks for layers to enumerate in the +`/data/local/debug/vulkan` folder. +An application enabled for debug has the ability to enumerate and enable any +layers in that location. + + +### Windows Layer Discovery + +In order to find system-installed layers, the Vulkan loader will scan the +values in the following Windows registry keys: + +``` +HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ExplicitLayers +HKEY_CURRENT_USER\SOFTWARE\Khronos\Vulkan\ExplicitLayers +HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ImplicitLayers +HKEY_CURRENT_USER\SOFTWARE\Khronos\Vulkan\ImplicitLayers +``` + +Except when running a 32-bit application on 64-bit Windows, when the loader +will instead scan the 32-bit registry location: + +``` +HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers +HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers +HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\Vulkan\ImplicitLayers +HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Khronos\Vulkan\ImplicitLayers +``` + +For each value in these keys which has DWORD data set to 0, the loader opens +the JSON manifest file specified by the name of the value. +Each name must be an absolute path to the manifest file. +Additionally, the `HKEY_CURRENT_USER` locations will only be searched if an +application is not being executed with administrative privileges. +This is done to ensure that an application with administrative privileges does +not run layers that did not need administrator access to install. + +Because some layers are installed alongside drivers, the loader will scan +through registry keys specific to Display Adapters and all Software Components +associated with these adapters for the locations of JSON manifest files. +These keys are located in device keys created during driver installation and +contain configuration information for base settings, including Vulkan, OpenGL, +and Direct3D ICD location. + +The Device Adapter and Software Component key paths should be obtained through +the PnP Configuration Manager API. +The `000X` key will be a numbered key, where each device is assigned a +different number. + +``` +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Adapter GUID}\000X\VulkanExplicitLayers +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Adapter GUID}\000X\VulkanImplicitLayers +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Software Component GUID}\000X\VulkanExplicitLayers +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Software Component GUID}\000X\VulkanImplicitLayers +``` + +In addition, on 64-bit systems there may be another set of registry values, +listed below. +These values record the locations of 32-bit layers on 64-bit operating systems, +in the same way as the Windows-on-Windows functionality. + +``` +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Adapter GUID}\000X\VulkanExplicitLayersWow +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Adapter GUID}\000X\VulkanImplicitLayersWow +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Software Component GUID}\000X\VulkanExplicitLayersWow +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{Software Component GUID}\000X\VulkanImplicitLayersWow +``` + +If any of the above values exist and is of type `REG_SZ`, the loader will open +the JSON manifest file specified by the key value. +Each value must be an absolute path to a JSON manifest file. +A key value may also be of type `REG_MULTI_SZ`, in which case the value will be +interpreted as a list of paths to JSON manifest files. + +In general, applications should install layers into the +`SOFTWARE\Khronos\Vulkan` paths. +The PnP registry locations are intended specifically for layers that are +distributed as part of a driver installation. +An application installer should not modify the device-specific registries, +while a device driver should not modify the system registries. + +Additionally, the Vulkan loader will scan the system for well-known Windows +AppX/MSIX packages. +If a package is found, the loader will scan the root directory of this installed +package for JSON manifest files. At this time, the only package that is known is +Microsoft's +[OpenCL™, OpenGL®, and Vulkan® Compatibility Pack](https://apps.microsoft.com/store/detail/9NQPSL29BFFF?hl=en-us&gl=US). + +The Vulkan loader will open each manifest file to obtain information about the +layer, including the name or pathname of a shared library (".dll") file. + +If `VK_LAYER_PATH` is defined, then the loader will look at the paths defined by +that variable for explicit layer manifest files instead of using the information +provided by the explicit layer registry keys. + +If `VK_ADD_LAYER_PATH` is defined, then the loader will look at the provided +paths for explicit layer manifest files in addition to using the information +provided by the explicit layer registry keys. +The paths provided by `VK_ADD_LAYER_PATH` are added before the standard list +of search folders and will therefore be searched first. + +If `VK_LAYER_PATH` is present, then `VK_ADD_LAYER_PATH` will not be used by the +loader and any values will be ignored. + +If `VK_IMPLICIT_LAYER_PATH` is defined, then the loader will look at the paths +defined by that variable for implicit layer manifest files instead of using the +information provided by the implicit layer registry keys. + +If `VK_ADD_IMPLICIT_LAYER_PATH` is defined, then the loader will look at the provided +paths for implicit layer manifest files in addition to using the information +provided by the implicit layer registry keys. +The paths provided by `VK_ADD_IMPLICIT_LAYER_PATH` are added before the standard list +of search folders and will therefore be searched first. + +For security reasons, `VK_LAYER_PATH`, `VK_ADD_LAYER_PATH`, `VK_IMPLICIT_LAYER_PATH`, +and `VK_ADD_IMPLICIT_LAYER_PATH` are ignored if running with elevated privileges. +See [Exception for Elevated Privileges](#exception-for-elevated-privileges) +for more info. + +See +[Forcing Layer Source Folders](LoaderApplicationInterface.md#forcing-layer-source-folders) +in the [LoaderApplicationInterface.md document](LoaderApplicationInterface.md) +for more information on this. + + +### Linux Layer Discovery + +On Linux, the Vulkan loader will scan for manifest files using environment +variables or corresponding fallback values if the corresponding environment +variable is not defined: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Search OrderDirectory/Environment VariableFallbackAdditional Notes
1$XDG_CONFIG_HOME$HOME/.configThis path is ignored when running with elevated privileges such as + setuid, setgid, or filesystem capabilities.
+ This is done because under these scenarios it is not safe to trust + that the environment variables are non-malicious. +
1$XDG_CONFIG_DIRS/etc/xdg
2SYSCONFDIR/etcCompile-time option set to possible location of layers installed from + non-Linux-distribution-provided packages. +
3EXTRASYSCONFDIR/etcCompile-time option set to possible location of layers installed from + non-Linux-distribution-provided packages. + Typically only set if SYSCONFDIR is set to something other than /etc +
4$XDG_DATA_HOME$HOME/.local/shareThis path is ignored when running with elevated privileges such as + setuid, setgid, or filesystem capabilities.
+ This is done because under these scenarios it is not safe to trust + that the environment variables are non-malicious. +
5$XDG_DATA_DIRS/usr/local/share/:/usr/share/
+ +The directory lists are concatenated together using the standard platform path +separator (:). +The loader then selects each path, and applies a suffix onto it for the specific +type of layer being searched for and looks in that specific folder for +manifest files: + + * Implicit Layers: Suffix = /vulkan/implicit_layer.d + * Explicit Layers: Suffix = /vulkan/explicit_layer.d + +If `VK_LAYER_PATH` is defined, then the loader will look at the paths defined by +that variable for explicit layer manifest files instead of using the information +provided by the standard explicit layer paths mentioned above. + +If `VK_ADD_LAYER_PATH` is defined, then the loader will look at the provided +paths for explicit layer manifest files in addition to using the information +provided by the standard explicit layer paths mentioned above. +The paths provided by `VK_ADD_LAYER_PATH` are added before the standard list +of search folders and will therefore be searched first. + +If `VK_LAYER_PATH` is present, then `VK_ADD_LAYER_PATH` will not be used by the +loader and any values will be ignored. + +If `VK_IMPLICIT_LAYER_PATH` is defined, then the loader will look at the paths +defined by that variable for implicit layer manifest files instead of using the +information provided by the standard implicit layer paths mentioned above. + +If `VK_ADD_IMPLICIT_LAYER_PATH` is defined, then the loader will look at the +provided paths for implicit layer manifest files in addition to using the +information provided by the standard implicit layer paths mentioned above. +The paths provided by `VK_ADD_IMPLICIT_LAYER_PATH` are added before the standard +list of search folders and will therefore be searched first. + +If `VK_IMPLICIT_LAYER_PATH` is present, then `VK_ADD_IMPLICIT_LAYER_PATH` will +not be used by the loader and any values will be ignored. + +For security reasons, `VK_LAYER_PATH`, `VK_ADD_LAYER_PATH`, `VK_IMPLICIT_LAYER_PATH`, +and `VK_ADD_IMPLICIT_LAYER_PATH` are ignored if running with elevated privileges. +See [Exception for Elevated Privileges](#exception-for-elevated-privileges) +for more info. + +**NOTE** While the order of folders searched for manifest files is well +defined, the order contents are read by the loader in each directory is +[random due to the behavior of readdir](https://www.ibm.com/support/pages/order-directory-contents-returned-calls-readdir). + +See +[Forcing Layer Source Folders](LoaderApplicationInterface.md#forcing-layer-source-folders) +in the [LoaderApplicationInterface.md document](LoaderApplicationInterface.md) +for more information on this. + +It is also important to note that while `VK_LAYER_PATH`, `VK_ADD_LAYER_PATH`, +`VK_IMPLICIT_LAYER_PATH`, and `VK_ADD_IMPLICIT_LAYER_PATH` will point the +loader at paths to search for finding the manifest files, it does not guarantee +the library files mentioned by the manifest will immediately be found. +Often, the layer manifest file will point to the library file using a relative +or absolute path. +When a relative or absolute path is used, the loader can typically find the +library file without querying the operating system. +However, if a library is listed only by name, the loader may not find it. +If problems occur finding a library file associated with a layer, try updating +the `LD_LIBRARY_PATH` environment variable to point at the location of the +corresponding `.so` file. + + +#### Example Linux Explicit Layer Search Path + +For a fictional user "me" the layer manifest search path might look like the +following: + +``` + /home/me/.config/vulkan/explicit_layer.d + /etc/xdg/vulkan/explicit_layer.d + /usr/local/etc/vulkan/explicit_layer.d + /etc/vulkan/explicit_layer.d + /home/me/.local/share/vulkan/explicit_layer.d + /usr/local/share/vulkan/explicit_layer.d + /usr/share/vulkan/explicit_layer.d +``` + +### Fuchsia Layer Discovery + +On Fuchsia, the Vulkan loader will scan for manifest files using environment +variables or corresponding fallback values if the corresponding environment +variable is not defined in the same way as [Linux](#linux-layer-discovery). +The **only** difference is that Fuchsia does not allow fallback values for +*$XDG_DATA_DIRS* or *$XDG_HOME_DIRS*. + + +### macOS Layer Discovery + +On macOS, the Vulkan loader will scan for manifest files using the application +resource folder as well as environment variables or corresponding fallback +values if the corresponding environment variable is not defined. +The order is similar to the search path on Linux with the exception that +the application's bundle resources are searched first: +`(bundle)/Contents/Resources/`. + +#### Example macOS Implicit Layer Search Path + +For a fictional user "Me" the layer manifest search path might look like the +following: + +``` + /Contents/Resources/vulkan/implicit_layer.d + /Users/Me/.config/vulkan/implicit_layer.d + /etc/xdg/vulkan/implicit_layer.d + /usr/local/etc/vulkan/implicit_layer.d + /etc/vulkan/implicit_layer.d + /Users/Me/.local/share/vulkan/implicit_layer.d + /usr/local/share/vulkan/implicit_layer.d + /usr/share/vulkan/implicit_layer.d +``` + +### Layer Filtering + +**NOTE:** This functionality is only available with Loaders built with version +1.3.234 of the Vulkan headers and later. + +The loader supports filter environment variables which can forcibly enable and +disable known layers. +Known layers are those that are already found by the loader taking into account +default search paths and environment variables `VK_LAYER_PATH`, `VK_ADD_LAYER_PATH`, +`VK_IMPLICIT_LAYER_PATH`, and `VK_ADD_IMPLICIT_LAYER_PATH`. + +The filter variables will be compared against the layer name provided in the +layer's manifest file. + +The filters must also follow the behaviors define in the +[Filter Environment Variable Behaviors](LoaderInterfaceArchitecture.md#filter-environment-variable-behaviors) +section of the [LoaderLayerInterface](LoaderLayerInterface.md) document. + +#### Layer Enable Filtering + +The layer enable environment variable `VK_LOADER_LAYERS_ENABLE` is a +comma-delimited list of globs to search for in known layers. +The layer names are compared against the globs listed in the environment +variable, and if they match, they will automatically be added to the enabled +layer list in the loader for each application. +These layers are enabled after implicit layers but before other explicit layers. + +When a layer is enabled using the `VK_LOADER_LAYERS_ENABLE` filter, and +loader logging is set to emit either warnings or layer messages, then a message +will show for each layer that has been forced on. +This message will look like the following: + +``` +[Vulkan Loader] WARNING | LAYER: Layer "VK_LAYER_LUNARG_wrap_objects" force enabled due to env var 'VK_LOADER_LAYERS_ENABLE' +``` + +#### Layer Disable Filtering + +The layer disable environment variable `VK_LOADER_LAYERS_DISABLE` is a +comma-delimited list of globs to search for in known layers. +The layer names are compared against the globs listed in the environment +variable, and if they match, they will automatically be disabled (whether or not +the layer is Implicit or Explicit). +This means that they will not be added to the enabled layer list in the loader +for each application. +This could mean that layers requested by an application are also not enabled +such as `VK_KHRONOS_LAYER_synchronization2` which could cause some applications +to misbehave. + +When a layer is disabled using the `VK_LOADER_LAYERS_DISABLE` filter, and +loader logging is set to emit either warnings or layer messages, then a message +will show for each layer that has been forcibly disabled. +This message will look like the following: + +``` +[Vulkan Loader] WARNING | LAYER: Layer "VK_LAYER_LUNARG_wrap_objects" disabled because name matches filter of env var 'VK_LOADER_LAYERS_DISABLE' +``` + +#### Layer Special Case Disable + +Because there are different types of layers, there are 3 additional special +disable options available when using the `VK_LOADER_LAYERS_DISABLE` environment +variable. + +These are: + + * `~all~` + * `~implicit~` + * `~explicit~` + +`~all~` will effectively disable every layer. +This enables a developer to disable all layers on the system. +`~implicit~` will effectively disable every implicit layer (leaving explicit +layers still present in the application call chain). +`~explicit~` will effectively disable every explicit layer (leaving implicit +layers still present in the application call chain). + +#### Layer Disable Warning + +Disabling layers, whether just through normal usage of +`VK_LOADER_LAYERS_DISABLE` or by evoking one of the special disable options like +`~all~` or `~explicit~` could cause application breakage if the application is +relying on features provided by one or more explicit layers. + +#### Allow certain Layers to ignore Layer Disabling + +**NOTE:** VK_LOADER_LAYERS_DISABLE is only available with Loaders built with version +1.3.262 of the Vulkan headers and later. + +The layer allow environment variable `VK_LOADER_LAYERS_ALLOW` is a +comma-delimited list of globs to search for in known layers. +The layer names are compared against the globs listed in the environment +variable, and if they match, they will not be able to be disabled by +`VK_LOADER_LAYERS_DISABLE`. + +Implicit layers have the ability to only be enabled when a layer specified +environment variable is set, allow for context dependent enablement. +`VK_LOADER_LAYERS_ENABLE` ignores that context. +`VK_LOADER_LAYERS_ALLOW` behaves similar to `VK_LOADER_LAYERS_ENABLE` while +also respecting the context which is normally used to determine whether an +implicit layer should be enabled. + +`VK_LOADER_LAYERS_ALLOW` effectively negates the behavior of +`VK_LOADER_LAYERS_DISABLE`. +Explicit layers listed by `VK_LOADER_LAYERS_ALLOW` will not be enabled. +Implicit layers listed by ``VK_LOADER_LAYERS_ALLOW` which are always active, +i.e. they do not require any external context to be enabled, will be enabled. + +##### `VK_INSTANCE_LAYERS` + +The original `VK_INSTANCE_LAYERS` can be viewed as a special case of the new +`VK_LOADER_LAYERS_ENABLE`. +Because of this, any layers enabled via `VK_INSTANCE_LAYERS` will be treated the +same as layers enabled with `VK_LOADER_LAYERS_ENABLE` and will therefore +override any disables supplied in `VK_LOADER_LAYERS_DISABLE`. + +### Exception for Elevated Privileges + +For security reasons, `VK_LAYER_PATH`, `VK_ADD_LAYER_PATH`, `VK_IMPLICIT_LAYER_PATH` +and `VK_ADD_IMPLICIT_LAYER_PATH` are ignored if running the Vulkan application +with elevated privileges. +This is because they may insert new libraries into the executable process that +are not normally found by the loader. +Because of this, these environment variables can only be used for applications +that do not use elevated privileges. + +For more information see +[Elevated Privilege Caveats](LoaderInterfaceArchitecture.md#elevated-privilege-caveats) +in the top-level +[LoaderInterfaceArchitecture.md][LoaderInterfaceArchitecture.md] document. + +## Layer Version Negotiation + +Now that a layer has been discovered, an application can choose to load it, or +in the case of implicit layers, it can be loaded by default. +When the loader attempts to load the layer, the first thing it does is attempt +to negotiate the version of the loader to layer interface. +In order to negotiate the loader/layer interface version, the layer must +implement the `vkNegotiateLoaderLayerInterfaceVersion` function. +The following information is provided for this interface in +include/vulkan/vk_layer.h: + +```cpp +typedef enum VkNegotiateLayerStructType { + LAYER_NEGOTIATE_INTERFACE_STRUCT = 1, +} VkNegotiateLayerStructType; + +typedef struct VkNegotiateLayerInterface { + VkNegotiateLayerStructType sType; + void *pNext; + uint32_t loaderLayerInterfaceVersion; + PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr; + PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr; +} VkNegotiateLayerInterface; + +VkResult + vkNegotiateLoaderLayerInterfaceVersion( + VkNegotiateLayerInterface *pVersionStruct); +``` + +The `VkNegotiateLayerInterface` structure is similar to other Vulkan structures. +The "sType" field, in this case takes a new enum defined just for internal +loader/layer interfacing use. +The valid values for "sType" could grow in the future, but right now only +has the one value "LAYER_NEGOTIATE_INTERFACE_STRUCT". + +This function (`vkNegotiateLoaderLayerInterfaceVersion`) should be exported by +the layer so that using "GetProcAddress" on Windows or "dlsym" on Linux or +macOS, should return a valid function pointer to it. +Once the loader has grabbed a valid address to the layers function, the loader +will create a variable of type `VkNegotiateLayerInterface` and initialize it +in the following ways: + 1. Set the structure "sType" to "LAYER_NEGOTIATE_INTERFACE_STRUCT" + 2. Set pNext to NULL. + - This is for future growth + 3. Set "loaderLayerInterfaceVersion" to the current version the loader desires +to set the interface to. + - The minimum value sent by the loader will be 2 since it is the first +version supporting this function. + +The loader will then individually call each layer’s +`vkNegotiateLoaderLayerInterfaceVersion` function with the filled out +“VkNegotiateLayerInterfaceâ€. + +This function allows the loader and layer to agree on an interface version to +use. +The "loaderLayerInterfaceVersion" field is both an input and output parameter. +"loaderLayerInterfaceVersion" is filled in by the loader with the desired +latest interface version supported by the loader (typically the latest). +The layer receives this and returns back the version it desires in the same +field. +Because it is setting up the interface version between the loader and layer, +this should be the first call made by a loader to the layer (even prior to any +calls to `vkGetInstanceProcAddr`). + +If the layer receiving the call no longer supports the interface version +provided by the loader (due to deprecation), then it should report a +`VK_ERROR_INITIALIZATION_FAILED` error. +Otherwise it sets the value pointed by "loaderLayerInterfaceVersion" to the +latest interface version supported by both the layer and the loader and returns +`VK_SUCCESS`. + +The layer should report `VK_SUCCESS` in case the loader-provided interface +version is newer than that supported by the layer, as it's the loader's +responsibility to determine whether it can support the older interface version +supported by the layer. +The layer should also report `VK_SUCCESS` in the case its interface version is +greater than the loader's, but return the loader's version. +Thus, upon return of `VK_SUCCESS` the "loaderLayerInterfaceVersion" will contain +the desired interface version to be used by the layer. + +If the loader receives `VK_ERROR_INITIALIZATION_FAILED` instead of `VK_SUCCESS`, +then the loader will treat the layer as unusable and will not load it. +In this case, the application will not see the layer during enumeration. +*Note that the loader is currently backwards compatible with all layer +interface versions, so a layer should not be able to request a version +older than what the loader supports.* + +This function **MUST NOT** call down the layer chain to the next layer. +The loader will work with each layer individually. + +If the layer supports the new interface and reports version 2 or greater, then +The layer should fill in the function pointer values to its internal +functions: + - "pfnGetInstanceProcAddr" should be set to the layer’s internal +`GetInstanceProcAddr` function. + - "pfnGetDeviceProcAddr" should be set to the layer’s internal +`GetDeviceProcAddr` function. + - "pfnGetPhysicalDeviceProcAddr" should be set to the layer’s internal +`GetPhysicalDeviceProcAddr` function. + - If the layer supports no physical device extensions, it may set the +value to NULL. + - More on this function later +the loader will use the “fpGetInstanceProcAddr†and “fpGetDeviceProcAddr†+functions from the “VkNegotiateLayerInterface†structure. +Prior to these changes, the loader would query each of those functions using +"GetProcAddress" on Windows or "dlsym" on Linux or macOS. + + +## Layer Call Chains and Distributed Dispatch + +There are two key architectural features that drive the loader to +`Layer Library` interface: + 1. Separate and distinct instance and device call chains + 2. Distributed dispatch. + +For further information, read the overview of dispatch tables and call chains +above in the +[Dispatch Tables and Call Chains](LoaderInterfaceArchitecture.md#dispatch-tables-and-call-chains) +section of the +[LoaderInterfaceArchitecture.md document](LoaderInterfaceArchitecture.md). + +What's important to note here is that a layer can intercept Vulkan instance +functions, device functions or both. +For a layer to intercept instance functions, it must participate in the +instance call chain. +For a layer to intercept device functions, it must participate in the device +call chain. + +Remember, a layer does not need to intercept all instance or device functions, +instead, it can choose to intercept only a subset of those functions. + +Normally, when a layer intercepts a given Vulkan function, it will call down +the instance or device call chain as needed. +The loader and all layer libraries that participate in a call chain cooperate +to ensure the correct sequencing of calls from one entity to the next. +This group effort for call chain sequencing is hereinafter referred to as +**distributed dispatch**. + +In distributed dispatch each layer is responsible for properly calling the next +entity in the call chain. +This means that a dispatch mechanism is required for all Vulkan functions that +a layer intercepts. +If a Vulkan function is not intercepted by a layer, or if a layer chooses to +terminate the function by not calling down the chain, then no dispatch is +needed for that particular function. + +For example, if the enabled layers intercepted only certain instance functions, +the call chain would look as follows: +![Instance Function Chain](./images/function_instance_chain.png) + +Likewise, if the enabled layers intercepted only a few of the device functions, +the call chain could look this way: +![Device Function Chain](./images/function_device_chain.png) + +The loader is responsible for dispatching all core and instance extension Vulkan +functions to the first entity in the call chain. + + +## Layer Unknown Physical Device Extensions + +Layers that intercept entrypoints which take a `VkPhysicalDevice` as the first +parameter *should* support `vk_layerGetPhysicalDeviceProcAddr`. This function +is added to the Layer Interface Version 2 and allows the loader to distinguish +between entrypoints which take `VkDevice` and `VkPhysicalDevice` as the first +parameter. This allows the loader to properly support entrypoints that are +unknown to it gracefully. + +```cpp +PFN_vkVoidFunction + vk_layerGetPhysicalDeviceProcAddr( + VkInstance instance, + const char* pName); +``` + +This function behaves similar to `vkGetInstanceProcAddr` and +`vkGetDeviceProcAddr` except it should only return values for physical device +extension entry-points. +In this way, it compares "pName" to every physical device function supported +in the layer. + +Implementations of the function should have the following behavior: + * If it is the name of a physical device function supported by the layer, +the pointer to the layer's corresponding function should be returned. + * If it is the name of a valid function which is **not** a physical device +function (i.e. an instance, device, or other function implemented by the +layer), then the value of NULL should be returned. + * The layer doesn't call down since the command is not a physical device + extension. + * If the layer has no idea what this function is, it should call down the +layer chain to the next `vk_layerGetPhysicalDeviceProcAddr` call. + * This can be retrieved in one of two ways: + * During `vkCreateInstance`, it is passed to a layer in the chain +information passed to a layer in the `VkLayerInstanceCreateInfo` structure. + * Use `get_chain_info()` to get the pointer to the +`VkLayerInstanceCreateInfo` structure. Let's call it chain_info. + * The address is then under +chain_info->u.pLayerInfo->pfnNextGetPhysicalDeviceProcAddr + * See +[Example Code for CreateInstance](#example-code-for-createinstance) + * Using the next layer’s `GetInstanceProcAddr` function to query for +`vk_layerGetPhysicalDeviceProcAddr`. + +If a layer intends to support functions that take VkPhysicalDevice as the +dispatchable parameter, then layer should support +`vk_layerGetPhysicalDeviceProcAddr`. +This is because if these functions aren't known to the loader, such as those +from unreleased extensions or because the loader is an older build thus doesn't +know about them _yet_, the loader won't be able to distinguish whether this is +a device or physical device function. + +If a layer does implement `vk_layerGetPhysicalDeviceProcAddr`, it should return +the address of its `vk_layerGetPhysicalDeviceProcAddr` function in the +"pfnGetPhysicalDeviceProcAddr" member of the `VkNegotiateLayerInterface` +structure during [Layer Version Negotiation](#layer-version-negotiation). +Additionally, the layer should also make sure `vkGetInstanceProcAddr` returns a +valid function pointer to a query of `vk_layerGetPhysicalDeviceProcAddr`. + +Note: If a layer wraps the VkInstance handle, support for +`vk_layerGetPhysicalDeviceProcAddr` is *NOT* optional and must be implemented. + +The behavior of the loader's `vkGetInstanceProcAddr` with support for the +`vk_layerGetPhysicalDeviceProcAddr` function is as follows: + 1. Check if core function: + - If it is, return the function pointer + 2. Check if known instance or device extension function: + - If it is, return the function pointer + 3. Call the layer/driver `GetPhysicalDeviceProcAddr` + - If it returns non-NULL, return a trampoline to a generic physical device +function, and set up a generic terminator which will pass it to the proper +driver. + 4. Call down using `GetInstanceProcAddr` + - If it returns non-NULL, treat it as an unknown logical device command. +This means setting up a generic trampoline function that takes in a `VkDevice` +as the first parameter and adjusting the dispatch table to call the +driver/layer's function after getting the dispatch table from the `VkDevice`. +Then, return the pointer to corresponding trampoline function. + 5. Return NULL + +Then, if the command gets promoted to core later, it will no +longer be set up using `vk_layerGetPhysicalDeviceProcAddr`. +Additionally, if the loader adds direct support for the extension, it will no +longer get to step 3, because step 2 will return a valid function pointer. +However, the layer should continue to support the command query via +`vk_layerGetPhysicalDeviceProcAddr`, until at least a Vulkan version bump, +because an older loader may still be attempting to use the commands. + +### Reason for adding `vk_layerGetPhysicalDeviceProcAddr` + +Originally, if `vkGetInstanceProcAddr` was called in the loader, it would +result in the following behavior: + 1. The loader would check if core function: + - If it was, it would return the function pointer + 2. The loader would check if known extension function: + - If it was, it would return the function pointer + 3. If the loader knew nothing about it, it would call down using +`GetInstanceProcAddr` + - If it returned non-NULL, treat it as an unknown logical device command. + - This meant setting up a generic trampoline function that takes in a +VkDevice as the first parameter and adjusting the dispatch table to call the +Driver/Layer's function after getting the dispatch table from the `VkDevice`. + 4. If all the above failed, the loader would return NULL to the application. + +This caused problems when a layer attempted to expose new physical device +extensions the loader knew nothing about, but an application did. +Because the loader knew nothing about it, the loader would get to step 3 in the +above process and would treat the function as an unknown logical device +command. +The problem is, this would create a generic VkDevice trampoline function which, +on the first call, would attempt to dereference the VkPhysicalDevice as a +VkDevice. +This would lead to a crash or corruption. + + +## Layer Intercept Requirements + + * Layers intercept a Vulkan function by defining a C/C++ function with +signature **identical** to the Vulkan API for that function. + * A layer **must intercept at least** `vkGetInstanceProcAddr` and +`vkCreateInstance` to participate in the instance call chain. + * A layer **may also intercept** `vkGetDeviceProcAddr` and `vkCreateDevice` +to participate in the device call chain. + * For any Vulkan function a layer intercepts which has a non-void return +value, **an appropriate value must be returned** by the layer intercept +function. + * Most functions a layer intercepts **should call down the chain** to the +corresponding Vulkan function in the next entity. + * The common behavior for a layer is to intercept a call, perform some +behavior, then pass it down to the next entity. + * If a layer doesn't pass the information down, undefined behavior may + occur. + * This is because the function will not be received by layers further +down the chain, or any drivers. + * One function that **must never call down the chain** is: + * `vkNegotiateLoaderLayerInterfaceVersion` + * Three common functions that **may not call down the chain** are: + * `vkGetInstanceProcAddr` + * `vkGetDeviceProcAddr` + * `vk_layerGetPhysicalDeviceProcAddr` + * These functions only call down the chain for Vulkan functions that they +do not intercept. + * Layer intercept functions **may insert extra calls** to Vulkan functions in +addition to the intercept. + * For example, a layer intercepting `vkQueueSubmit` may want to add a call +to `vkQueueWaitIdle` after calling down the chain for `vkQueueSubmit`. + * This would result in two calls down the chain: First a call down the +`vkQueueSubmit` chain, followed by a call down the `vkQueueWaitIdle` chain. + * Any additional calls inserted by a layer must be on the same chain + * If the function is a device function, only other device functions +should be added. + * Likewise, if the function is an instance function, only other instance +functions should be added. + + +## Distributed Dispatching Requirements + +- For each entry-point a layer intercepts, it must keep track of the +entry-point residing in the next entity in the chain it will call down into. + * In other words, the layer must have a list of pointers to functions of the +appropriate type to call into the next entity. + * This can be implemented in various ways but +for clarity, will be referred to as a dispatch table. +- A layer can use the `VkLayerDispatchTable` structure as a device dispatch +table (see include/vulkan/vk_dispatch_table_helper.h). +- A layer can use the `VkLayerInstanceDispatchTable` structure as a instance +dispatch table (see include/vulkan/vk_dispatch_table_helper.h). +- A Layer's `vkGetInstanceProcAddr` function uses the next entity's +`vkGetInstanceProcAddr` to call down the chain for unknown (i.e. +non-intercepted) functions. +- A Layer's `vkGetDeviceProcAddr` function uses the next entity's +`vkGetDeviceProcAddr` to call down the chain for unknown (i.e. non-intercepted) +functions. +- A Layer's `vk_layerGetPhysicalDeviceProcAddr` function uses the next entity's +`vk_layerGetPhysicalDeviceProcAddr` to call down the chain for unknown (i.e. +non-intercepted) functions. + + +## Layer Conventions and Rules + +A layer, when inserted into an otherwise compliant Vulkan driver, must +still result in a compliant Vulkan driver. +The intention is for layers to have a well-defined baseline behavior. +Therefore, it must follow some conventions and rules defined below. + +In order for layers to have unique names, and reduce the chance of conflicts +that could occur when the loader attempts to load these layers, layers +must adhere to the following naming standard: + * Start with `VK_LAYER_` prefix + * Follow the prefix with either an organization or company name (LunarG), + a unique company identifier (NV for Nvidia) or a software product name + (RenderDoc) in ALL CAPS + * Follow that with the specific name of the layer (typically lower-case but not + required to be) + * NOTE: The specific name, if more than one word, must be underscore + delimited + +Examples of valid layer names include: + * VK_LAYER_KHRONOS_validation + * Organization = "KHRONOS" + * Specific name = "validation" + * VK_LAYER_RENDERDOC_Capture + * Application = "RENDERDOC" + * Specific name = "Capture" + * VK_LAYER_VALVE_steam_fossilize_32 + * Organization = "VALVE" + * Application = "steam" + * Specific name = "fossilize" + * OS-modifier = "32" (for 32-bit version) + * VK_LAYER_NV_nsight + * Organization Acronym = "NV" (for Nvidia) + * Specific name = "nsight" + +More details on layer naming can be found in the +[Vulkan style-guide](https://www.khronos.org/registry/vulkan/specs/1.2/styleguide.html#extensions-naming-conventions) +under section 3.4 "Version, Extension, and Layer Naming Conventions". + +A layer is always chained with other layers. +It must not make invalid calls to, or rely on undefined behaviors of, its lower +layers. +When it changes the behavior of a function, it must make sure its upper layers +do not make invalid calls to or rely on undefined behaviors of its lower layers +because of the changed behavior. +For example, when a layer intercepts an object creation function to wrap the +objects created by its lower layers, it must make sure its lower layers never +see the wrapping objects, directly from itself or indirectly from its upper +layers. + +When a layer requires host memory, it may ignore the provided allocators. +It is preferred that the layer use any provided memory allocators if the layer +is intended to run in a production environment. +For example, this usually applies to implicit layers that are always enabled. +That will allow applications to include the layer's memory usage. + +Additional rules include: + - `vkEnumerateInstanceLayerProperties` **must** enumerate and **only** +enumerate the layer itself. + - `vkEnumerateInstanceExtensionProperties` **must** handle the case where +`pLayerName` is itself. + - It **must** return `VK_ERROR_LAYER_NOT_PRESENT` otherwise, including when +`pLayerName` is `NULL`. + - `vkEnumerateDeviceLayerProperties` **is deprecated and may be omitted**. + - Using this will result in undefined behavior. + - `vkEnumerateDeviceExtensionProperties` **must** handle the case where +`pLayerName` is itself. + - In other cases, it should chain to other layers. + - `vkCreateInstance` **must not** generate an error for unrecognized layer +names and extension names. + - It may assume the layer names and extension names have been validated. + - `vkGetInstanceProcAddr` intercepts a Vulkan function by returning a local +entry-point + - Otherwise it returns the value obtained by calling down the instance call +chain. + - `vkGetDeviceProcAddr` intercepts a Vulkan function by returning a local +entry-point + - Otherwise it returns the value obtained by calling down the device call +chain. + - These additional functions must be intercepted if the layer implements +device-level call chaining: + - `vkGetDeviceProcAddr` + - `vkCreateDevice`(only required for any device-level chaining) + - **NOTE:** older layer libraries may expect that + `vkGetInstanceProcAddr` +ignore `instance` when `pName` is `vkCreateDevice`. + - The specification **requires** `NULL` to be returned from +`vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` for disabled functions. + - A layer may return `NULL` itself or rely on the following layers to do so. + - A layer's implementation `vkGetInstanceProcAddr` **should**, when querying for +`vkCreateInstance`, return a valid function pointer regardless of the value of the +`instance` parameter. + - The specification **requires** that the `instance` parameter **must** be NULL. +However, older versions of the specification did not have this requirement, allowing +for non-NULL `instance` handles to be passed in and return a valid `vkCreateInstance` +function pointer. The Vulkan-Loader itself does this and will continue to do so to +maintain compatibility with layers which were released before this specification +change was made. + +## Layer Dispatch Initialization + +- A layer initializes its instance dispatch table within its `vkCreateInstance` +function. +- A layer initializes its device dispatch table within its `vkCreateDevice` +function. +- The loader passes a linked list of initialization structures to layers via +the "pNext" field in the `VkInstanceCreateInfo` and `VkDeviceCreateInfo` +structures for `vkCreateInstance` and `VkCreateDevice` respectively. +- The head node in this linked list is of type `VkLayerInstanceCreateInfo` for +instance and VkLayerDeviceCreateInfo for device. +See file `include/vulkan/vk_layer.h` for details. +- A VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO is used by the loader for the +"sType" field in `VkLayerInstanceCreateInfo`. +- A VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO is used by the loader for the +"sType" field in `VkLayerDeviceCreateInfo`. +- The "function" field indicates how the union field "u" should be interpreted +within `VkLayer*CreateInfo`. +The loader will set the "function" field to VK_LAYER_LINK_INFO. +This indicates "u" field should be `VkLayerInstanceLink` or +`VkLayerDeviceLink`. +- The `VkLayerInstanceLink` and `VkLayerDeviceLink` structures are the list +nodes. +- The `VkLayerInstanceLink` contains the next entity's `vkGetInstanceProcAddr` +used by a layer. +- The `VkLayerDeviceLink` contains the next entity's `vkGetInstanceProcAddr` +and `vkGetDeviceProcAddr` used by a layer. +- Given the above structures set up by the loader, layer must initialize their +dispatch table as follows: + - Find the `VkLayerInstanceCreateInfo`/`VkLayerDeviceCreateInfo` structure in +the `VkInstanceCreateInfo`/`VkDeviceCreateInfo` structure. + - Get the next entity's vkGet*ProcAddr from the "pLayerInfo" field. + - For CreateInstance get the next entity's `vkCreateInstance` by calling the +"pfnNextGetInstanceProcAddr": + pfnNextGetInstanceProcAddr(NULL, "vkCreateInstance"). + - For CreateDevice get the next entity's `vkCreateDevice` by calling the +"pfnNextGetInstanceProcAddr": +pfnNextGetInstanceProcAddr(instance, "vkCreateDevice"), passing the +already created instance handle. + - Advanced the linked list to the next node: pLayerInfo = pLayerInfo->pNext. + - Call down the chain either `vkCreateDevice` or `vkCreateInstance` + - Initialize the layer dispatch table by calling the next entity's +Get*ProcAddr function once for each Vulkan function needed in the dispatch +table + +## Example Code for CreateInstance + +```cpp +VkResult + vkCreateInstance( + const VkInstanceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkInstance *pInstance) +{ + VkLayerInstanceCreateInfo *chain_info = + get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + + assert(chain_info->u.pLayerInfo); + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = + chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vkCreateInstance fpCreateInstance = + (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance"); + if (fpCreateInstance == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + // Advance the link info for the next element of the chain. + // This ensures that the next layer gets it's layer info and not + // the info for our current layer. + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + + // Continue call down the chain + VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); + if (result != VK_SUCCESS) + return result; + + // Init layer's dispatch table using GetInstanceProcAddr of + // next layer in the chain. + instance_dispatch_table = new VkLayerInstanceDispatchTable; + layer_init_instance_dispatch_table( + *pInstance, my_data->instance_dispatch_table, fpGetInstanceProcAddr); + + // Other layer initialization + ... + + return VK_SUCCESS; +} +``` + +## Example Code for CreateDevice + +```cpp +VkResult + vkCreateDevice( + VkPhysicalDevice gpu, + const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDevice *pDevice) +{ + VkInstance instance = GetInstanceFromPhysicalDevice(gpu); + VkLayerDeviceCreateInfo *chain_info = + get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = + chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = + chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; + PFN_vkCreateDevice fpCreateDevice = + (PFN_vkCreateDevice)fpGetInstanceProcAddr(instance, "vkCreateDevice"); + if (fpCreateDevice == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + // Advance the link info for the next element on the chain. + // This ensures that the next layer gets it's layer info and not + // the info for our current layer. + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + + VkResult result = fpCreateDevice(gpu, pCreateInfo, pAllocator, pDevice); + if (result != VK_SUCCESS) { + return result; + } + + // initialize layer's dispatch table + device_dispatch_table = new VkLayerDispatchTable; + layer_init_device_dispatch_table( + *pDevice, device_dispatch_table, fpGetDeviceProcAddr); + + // Other layer initialization + ... + + return VK_SUCCESS; +} +``` +In this case the function `GetInstanceFromPhysicalDevice` is called to get the +instance handle. +In practice, this would be done by any method a layer chooses to get an +instance handle from the physical device. + + +## Meta-layers + +Meta-layers are a special kind of layer which is only available through the +Khronos loader. +While normal layers are associated with one particular library, a meta-layer +is actually a collection layer which contains an ordered list of other layers +(called component layers). + +The benefits of a meta-layer are: + 1. More than one layer may be activated using a single layer name by simply +grouping multiple layers in a meta-layer. + 2. The order of individual component layers is loaded can be defined within +the meta-layer. + 3. Layer configurations (internal to the meta-layer manifest file) can easily +be shared with others. + 4. The loader will automatically collate all instance and device extensions in +a meta-layer's component layers, and report them as the meta-layer's properties +to the application when queried. + +Restrictions to defining and using a meta-layer are: + 1. A Meta-layer Manifest file **must** be a properly formatted that contains +one or more component layers. + 3. All component layers **must be** present on a system for the meta-layer to +be used. + 4. All component layers **must be** at the same Vulkan API major and minor +version as the meta-layer for the meta-layer to be used. + +The ordering of a meta-layer's component layers in the instance or device call- +chain is simple: + * The first layer listed will be the layer closest to the application. + * The last layer listed will be the layer closest to the drivers. + +Inside the meta-layer Manifest file, each component layer is listed by its +layer name. +This is the "name" tag's value associated with each component layer's Manifest +file under the "layer" or "layers" tag. +This is also the name that would normally be used when activating a layer +during `vkCreateInstance`. + +Any duplicate layer names in either the component layer list, or globally among +all enabled layers, will simply be ignored by the loader. +Only the first instance of any layer name will be used. + +For example, if a layer is enabled using the environment variable +`VK_INSTANCE_LAYERS` and have that same layer listed in a meta-layer, then the +environment-variable-enabled layer will be used and the component layer will +be dropped. +Likewise, if a person were to enable a meta-layer and then separately enable +one of the component layers afterwards, the second instantiation of the layer +name would be ignored. + +The Manifest file formatting necessary to define a meta-layer can be found in +the [Layer Manifest File Format](#layer-manifest-file-format) section. + +### Override Meta-Layer + +If an implicit meta-layer was found on the system with the name +`VK_LAYER_LUNARG_override`, the loader uses it as an 'override' layer. +This is used to selectively enable and disable other layers from being loaded. +It can be applied globally or to a specific application or applications. +The override meta layer can have the following additional keys: + * `blacklisted_layers` - List of explicit layer names that should not be +loaded even if requested by the application. + * `app_keys` - List of paths to executables that the override layer applies +to. + * `override_paths` - List of paths which will be used as the search location +for component layers. + +When an application starts up and the override layer is present, the loader +first checks to see if the application is in the list. +If it isn't, the override layer is not applied. +If the list is empty or if `app_keys` doesn't exist, the loader makes the +override layer global and applies it to every application upon startup. + +If the override layer contains `override_paths`, then it uses this list of +paths exclusively for component layers. +Thus, it ignores both the default explicit and implicit layer layer search +locations as well as paths set by environment variables like `VK_LAYER_PATH`. +If any component layer is not present in the provided override paths, the meta +layer is disabled. + +The override meta-layer is primarily enabled when using the +[VkConfig](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md) +tool included in the Vulkan SDK. +It is typically only available while the VkConfig tool is actually executing. +Please refer to that documentation for more information. + +## Pre-Instance Functions + +Vulkan includes a small number of functions which are called without any +dispatchable object. +Most layers do not intercept these functions, as layers are enabled when +an instance is created. +However, under certain conditions it is possible for a layer to intercept +these functions. + +One reason why a layer may desire to intercept these pre-instance functions is +to filter out extensions that would normally be returned from Vulkan drivers to +the application. +[RenderDoc](https://renderdoc.org/) is one such layer which intercepts these +pre-instance functions so that it may disable extensions it doesn't support. + +In order to intercept the pre-instance functions, several conditions must be +met: +* The layer must be implicit +* The layer manifest version must be 1.1.2 or later +* The layer must export the entry-point symbols for each intercepted function +* The layer manifest must specify the name of each intercepted function in a +`pre_instance_functions` JSON object + +The functions that may be intercepted in this way are: +* `vkEnumerateInstanceExtensionProperties` +* `vkEnumerateInstanceLayerProperties` +* `vkEnumerateInstanceVersion` + +Pre-instance functions work differently from all other layer intercept +functions. +Other intercept functions have a function prototype identical to that of the +function they are intercepting. +They then rely on data that was passed to the layer at instance or device +creation so that layers can call down the chain. +Because there is no need to create an instance before calling the pre-instance +functions, these functions must use a separate mechanism for constructing the +call chain. +This mechanism consists of an extra parameter that will be passed to the layer +intercept function when it is called. +This parameter will be a pointer to a struct, defined as follows: + +```cpp +typedef struct Vk...Chain +{ + struct { + VkChainType type; + uint32_t version; + uint32_t size; + } header; + PFN_vkVoidFunction pfnNextLayer; + const struct Vk...Chain* pNextLink; +} Vk...Chain; +``` + +These structs are defined in the `vk_layer.h` file so that it is not necessary +to redefine the chain structs in any external code. +The name of each struct is be similar to the name of the function it +corresponds to, but the leading "V" is capitalized, and the word "Chain" is +added to the end. +For example, the struct for `vkEnumerateInstanceExtensionProperties` is called +`VkEnumerateInstanceExtensionPropertiesChain`. +Furthermore, the `pfnNextLayer` struct member is not actually a void function +pointer — its type will be the actual type of each function in the call +chain. + +Each layer intercept function must have a prototype that is the same as the +prototype of the function being intercepted, except that the first parameter +must be that function's chain struct (passed as a const pointer). +For example, a function that wishes to intercept +`vkEnumerateInstanceExtensionProperties` would have the prototype: + +```cpp +VkResult + InterceptFunctionName( + const VkEnumerateInstanceExtensionPropertiesChain* pChain, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); +``` + +The name of the function is arbitrary; it can be anything provided that it is +given in the layer manifest file (see +[Layer Manifest File Format](#layer-manifest-file-format)). +The implementation of each intercept function is responsible for calling the +next item in the call chain, using the chain parameter. +This is done by calling the `pfnNextLayer` member of the chain struct, passing +`pNextLink` as the first argument, and passing the remaining function arguments +after that. +For example, a simple implementation for +`vkEnumerateInstanceExtensionProperties` that does nothing but call down the +chain would look like: + +```cpp +VkResult + InterceptFunctionName( + const VkEnumerateInstanceExtensionPropertiesChain* pChain, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) +{ + return pChain->pfnNextLayer( + pChain->pNextLink, pLayerName, pPropertyCount, pProperties); +} +``` + +When using a C++ compiler, each chain type also defines a function named +`CallDown` which can be used to automatically handle the first argument. +Implementing the above function using this method would look like: + +```cpp +VkResult + InterceptFunctionName( + const VkEnumerateInstanceExtensionPropertiesChain* pChain, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) +{ + return pChain->CallDown(pLayerName, pPropertyCount, pProperties); +} +``` + +Unlike with other functions in layers, the layer may not save any global data +between these function calls. +Because Vulkan does not store any state until an instance has been created, all +layer libraries are released at the end of each pre-instance call. +This means that implicit layers can use pre-instance intercepts to modify data +that is returned by the functions, but they cannot be used to record that data. + +## Special Considerations + + +### Associating Private Data with Vulkan Objects Within a Layer + +A layer may want to associate its own private data with one or more Vulkan +objects. +Two common methods to do this are hash maps and object wrapping. + + +#### Wrapping + +The loader supports layers wrapping any Vulkan object, including dispatchable +objects. +For functions that return object handles, each layer does not touch the value +passed down the call chain. +This is because lower items may need to use the original value. +However, when the value is returned from a lower-level layer (possibly the +driver), the layer saves the handle and returns its own handle to the +layer above it (possibly the application). +When a layer receives a Vulkan function using something that it previously +returned a handle for, the layer is required to unwrap the handle and pass +along the saved handle to the layer below it. +This means that the layer **must intercept every Vulkan function which uses** +**the object in question**, and wrap or unwrap the object, as appropriate. +This includes adding support for all extensions with functions using any +object the layer wraps as well as any loader-layer interface functions such as +`vk_layerGetPhysicalDeviceProcAddr`. + +Layers above the object wrapping layer will see the wrapped object. +Layers which wrap dispatchable objects must ensure that the first field in the +wrapping structure is a pointer to a dispatch table as defined in `vk_layer.h`. +Specifically, an instance wrapped dispatchable object could be as follows: + +```cpp +struct my_wrapped_instance_obj_ { + VkLayerInstanceDispatchTable *disp; + // whatever data layer wants to add to this object +}; +``` +A device wrapped dispatchable object could be as follows: +```cpp +struct my_wrapped_instance_obj_ { + VkLayerDispatchTable *disp; + // whatever data layer wants to add to this object +}; +``` + +Layers that wrap dispatchable objects must follow the guidelines for creating +new dispatchable objects (below). + +#### Cautions About Wrapping + +Layers are generally discouraged from wrapping objects, because of the +potential for incompatibilities with new extensions. +For example, let's say that a layer wraps `VkImage` objects, and properly wraps +and unwraps `VkImage` object handles for all core functions. +If a new extension is created which has functions that take `VkImage` objects +as parameters, and if the layer does not support those new functions, an +application that uses both the layer and the new extension will have undefined +behavior when those new functions are called (e.g. the application may crash). +This is because the lower-level layers and drivers won't receive the handle that +they generated. +Instead, they will receive a handle that is only known by the layer that is +wrapping the object. + +Because of the potential for incompatibilities with unsupported extensions, +layers that wrap objects must check which extensions are being used by the +application, and take appropriate action if the layer is used with unsupported +extensions such as issuing a warning/error message to the user. + +The reason that the validation layers wrap objects is to track the proper use +and destruction of each object. +They issue a validation error if used with unsupported extensions, alerting the +user to the potential for undefined behavior. + + +#### Hash Maps + +Alternatively, a layer may want to use a hash map to associate data with a +given object. +The key to the map could be the object. Alternatively, for dispatchable objects +at a given level (eg device or instance) the layer may want data associated +with the `VkDevice` or `VkInstance` objects. +Since there are multiple dispatchable objects for a given `VkInstance` or +`VkDevice`, the `VkDevice` or `VkInstance` object is not a great map key. +Instead the layer should use the dispatch table pointer within the `VkDevice` +or `VkInstance` since that will be unique for a given `VkInstance` or +`VkDevice`. + + +### Creating New Dispatchable Objects + +Layers which create dispatchable objects must take special care. +Remember that loader *trampoline* code normally fills in the dispatch table +pointer in the newly created object. +Thus, the layer must fill in the dispatch table pointer if the loader +*trampoline* will not do so. +Common cases where a layer (or driver) may create a dispatchable object without +loader *trampoline* code is as follows: +- Layers that wrap dispatchable objects +- Layers which add extensions that create dispatchable objects +- Layers which insert extra Vulkan functions in the stream of functions they +intercept from the application +- Drivers which add extensions that create dispatchable objects + +The Khronos loader provides a callback that can be used for initializing a +dispatchable object. +The callback is passed as an extension structure via the `pNext` field in the +create info structure when creating an instance (`VkInstanceCreateInfo`) or +device (`VkDeviceCreateInfo`). +The callback prototype is defined as follows for instance and device callbacks +respectively (see `vk_layer.h`): + +```cpp +VKAPI_ATTR VkResult VKAPI_CALL + vkSetInstanceLoaderData( + VkInstance instance, + void *object); + +VKAPI_ATTR VkResult VKAPI_CALL + vkSetDeviceLoaderData( + VkDevice device, + void *object); +``` + +To obtain these callbacks the layer must search through the list of structures +pointed to by the "pNext" field in the `VkInstanceCreateInfo` and +`VkDeviceCreateInfo` parameters to find any callback structures inserted by the +loader. +The salient details are as follows: +- For `VkInstanceCreateInfo` the callback structure pointed to by "pNext" is +`VkLayerInstanceCreateInfo` as defined in `include/vulkan/vk_layer.h`. +- A "sType" field in of VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO within +`VkInstanceCreateInfo` parameter indicates a loader structure. +- Within `VkLayerInstanceCreateInfo`, the "function" field indicates how the +union field "u" should be interpreted. +- A "function" equal to VK_LOADER_DATA_CALLBACK indicates the "u" field will +contain the callback in "pfnSetInstanceLoaderData". +- For `VkDeviceCreateInfo` the callback structure pointed to by "pNext" is +`VkLayerDeviceCreateInfo` as defined in `include/vulkan/vk_layer.h`. +- A "sType" field in of VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO within +`VkDeviceCreateInfo` parameter indicates a loader structure. +- Within `VkLayerDeviceCreateInfo`, the "function" field indicates how the union +field "u" should be interpreted. +- A "function" equal to VK_LOADER_DATA_CALLBACK indicates the "u" field will +contain the callback in "pfnSetDeviceLoaderData". + +Alternatively, if an older loader is being used that doesn't provide these +callbacks, the layer may manually initialize the newly created dispatchable +object. +To fill in the dispatch table pointer in newly created dispatchable object, the +layer should copy the dispatch pointer, which is always the first entry in the +structure, from an existing parent object of the same level (instance versus +device). + +For example, if there is a newly created `VkCommandBuffer` object, then the +dispatch pointer from the `VkDevice` object, which is the parent of the +`VkCommandBuffer` object, should be copied into the newly created object. + +### Versioning and Activation Interactions + +There are several interacting rules concerning the activation of layers with +non-obvious results. +This not an exhaustive list but should better clarify the behavior of the +loader in complex situations. + +* The Vulkan Loader in versions 1.3.228 and above will enable implicit layers +regardless of the API version specified by the application in +`VkApplicationInfo::apiVersion`. +Previous loader versions (1.3.227 and below) used to have a requirement where +implicit layer's API version must be equal to or greater than the API version +of the application for the layer to be enabled. +The change relaxed the implicit layer loading requirements because it was +determined that the perceived protection of preventing older layers running +with newer applications wasn't enough to justify the friction it caused. +This was due to older layers no longer working with newer applications +for no apparent reason, as well as older layers having to update the manifest +to work with newer applications. +The layer didn't need to do anything else to get their layer working again, +which meant that a layer didn't need to prove that their layer worked with +newer API versions. +Thus, the disabling caused confusion for users but didn't protect them from +potentially badly behaving layers. + +* An implicit layer will ignore its disable environment variable being set if +it is a component in an active meta layer. + +* The environment `VK_LAYER_PATH` only affects explicit layer searching, not +implicit. +Layers found in this path are treated as explicit, even if they contain all the +requisite fields to be an implicit layer. +This means they will not be implicitly enabled. + +* Meta layers do not have to be implicit - they can be explicit. +It cannot be assumed that because a meta layer is present that it will be active. + +* The `blacklisted_layers` member of the override meta layer will prevent both +implicitly enabled and explicitely enabled layers from activating. +Any layers in an application's `VkInstanceCreateInfo::ppEnabledLayerNames` that +are in the blacklist will not be enabled. + +* The `app_keys` member of the override meta layer will make a meta layer apply +to only applications found in this list. +If there are any items in the app keys list, the meta layer isn't enabled for +any application except those found in the list. + +* The `override_paths` member of the override meta layer, if present, will +replace the search paths the loader uses to find component layers. +If any component layer isn't present in the override paths, the override meta +layer is not applied. +So if an override meta layer wants to mix default and custom layer locations, +the override paths must contain both custom and default layer locations. + +* If the override layer is both present and contains `override_paths`, the +paths from the environment variable `VK_LAYER_PATH` are ignored when searching +for explicit layers. +For example, when both the meta layer override paths and `VK_LAYER_PATH` are +present, none of the layers in `VK_LAYER_PATH` are discoverable, and the +loader will not find them. + + +## Layer Manifest File Format + +The Khronos loader uses manifest files to discover available layer libraries +and layers. +It doesn't directly query the layer's dynamic library except during chaining. +This is to reduce the likelihood of loading a malicious layer into memory. +Instead, details are read from the Manifest file, which are then provided +for applications to determine what layers should actually be loaded. + +The following section discusses the details of the Layer Manifest JSON file +format. +The JSON file itself does not have any requirements for naming. +The only requirement is that the extension suffix of the file is ".json". + +Here is an example layer JSON Manifest file with a single layer: + +```json +{ + "file_format_version" : "1.2.1", + "layer": { + "name": "VK_LAYER_LUNARG_overlay", + "type": "INSTANCE", + "library_path": "vkOverlayLayer.dll", + "library_arch" : "64", + "api_version" : "1.0.5", + "implementation_version" : "2", + "description" : "LunarG HUD layer", + "functions": { + "vkNegotiateLoaderLayerInterfaceVersion": + "OverlayLayer_NegotiateLoaderLayerInterfaceVersion" + }, + "instance_extensions": [ + { + "name": "VK_EXT_debug_report", + "spec_version": "1" + }, + { + "name": "VK_VENDOR_ext_x", + "spec_version": "3" + } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "1", + "entrypoints": ["vkCmdDbgMarkerBegin", "vkCmdDbgMarkerEnd"] + } + ], + "enable_environment": { + "ENABLE_LAYER_OVERLAY_1": "1" + }, + "disable_environment": { + "DISABLE_LAYER_OVERLAY_1": "" + } + } +} +``` + +Here's a snippet with the changes required to support multiple layers per +manifest file: +```json +{ + "file_format_version" : "1.0.1", + "layers": [ + { + "name": "VK_LAYER_layer_name1", + "type": "INSTANCE", + ... + }, + { + "name": "VK_LAYER_layer_name2", + "type": "INSTANCE", + ... + } + ] +} +``` + +Here's an example of a meta-layer manifest file: +```json +{ + "file_format_version" : "1.1.1", + "layer": { + "name": "VK_LAYER_META_layer", + "type": "GLOBAL", + "api_version" : "1.0.40", + "implementation_version" : "1", + "description" : "LunarG Meta-layer example", + "component_layers": [ + "VK_LAYER_KHRONOS_validation", + "VK_LAYER_LUNARG_api_dump" + ] + } +} +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
JSON NodeDescription and NotesRestrictionsParentIntrospection Query
"api_version"The major.minor.patch version number of the Vulkan API that the layer + supports. + It does not require the application to make use of that API version. + It simply is an indication that the layer can support Vulkan API + instance and device functions up to and including that API version.
+ For example: 1.0.33. +
None"layer"/"layers"vkEnumerateInstanceLayerProperties
"app_keys"List of paths to executables that the meta-layer applies to. + Meta-layers Only"layer"/"layers"N/A
"blacklisted_layers"List of explicit layer names that should not be loaded even if + requested by the application. + Meta-layers Only"layer"/"layers"N/A
"component_layers"Indicates the component layer names that are + part of a meta-layer. + The names listed must be the "name" identified in each of the component + layer's Mainfest file "name" tag (this is the same as the name of the + layer that is passed to the `vkCreateInstance` command). + All component layers must be present on the system and found by the + loader in order for this meta-layer to be available and activated.
+ This field must not be present if "library_path" is defined. +
Meta-layers Only"layer"/"layers"N/A
"description"A high-level description of the layer and its intended use.None"layer"/"layers"vkEnumerateInstanceLayerProperties
"device_extensions"OPTIONAL: Contains the list of device extension names supported + by this layer. One "device\_extensions" node with an array of one or + more elements is required if any device extensions are supported by a + layer; otherwise the node is optional. + Each element of the array must have the nodes "name" and "spec_version" + which correspond to `VkExtensionProperties` "extensionName" and + "specVersion" respectively. + Additionally, each element of the array of device extensions must have + the node "entrypoints" if the device extension adds Vulkan API + functions; otherwise this node is not required. + The "entrypoint" node is an array of the names of all entry-points added + by the supported extension. + None"layer"/"layers"vkEnumerateDeviceExtensionProperties
"disable_environment"REQUIRED: Indicates an environment variable used to disable the + Implicit Layer (when defined to any non-empty string value).
+ In rare cases of an application not working with an implicit layer, the + application can set this environment variable (before calling Vulkan + functions) in order to "blacklist" the layer. + This environment variable (which may vary with each variation of the + layer) must be set (not particularly to any value). + If both the "enable_environment" and "disable_environment" variables are + set, the implicit layer is disabled. +
Implicit Layers Only"layer"/"layers"N/A
"enable_environment"OPTIONAL: Indicates an environment variable used to enable the + Implicit Layer (when defined to any non-empty string value).
+ This environment variable (which may vary with each variation of the + layer) must be set to the given value or else the implicit layer is not + loaded. + This is for application environments (e.g. Steam) which want to enable a + layer(s) only for applications that they launch, and allows for + applications run outside of an application environment to not get that + implicit layer(s). +
Implicit Layers Only"layer"/"layers"N/A
"file_format_version"Manifest format major.minor.patch version number.
+ Supported versions are: 1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.1.2 and 1.2.0. +
NoneNoneN/A
"functions"OPTIONAL: This section can be used to identify a different + function name for the loader to use in place of standard layer interface + functions. + The "functions" node is required if the layer is using an alternative + name for `vkNegotiateLoaderLayerInterfaceVersion`. + None"layer"/"layers"vkGet*ProcAddr
"implementation_version"The version of the layer implemented. + If the layer itself has any major changes, this number should change so + the loader and/or application can identify it properly. + None"layer"/"layers"vkEnumerateInstanceLayerProperties
"instance_extensions"OPTIONAL: Contains the list of instance extension names + supported by this layer. + One "instance_extensions" node with an array of one or more elements is + required if any instance extensions are supported by a layer; otherwise + the node is optional. + Each element of the array must have the nodes "name" and "spec_version" + which correspond to `VkExtensionProperties` "extensionName" and + "specVersion" respectively. + None"layer"/"layers"vkEnumerateInstanceExtensionProperties
"layer"The identifier used to group a single layer's information together. + NoneNonevkEnumerateInstanceLayerProperties
"layers"The identifier used to group multiple layers' information together. + This requires a minimum Manifest file format version of 1.0.1. + NoneNonevkEnumerateInstanceLayerProperties
"library_path"Specifies either a filename, a relative pathname, or a full pathname to + a layer shared library file. + If "library_path" specifies a relative pathname, it is relative to the + path of the JSON manifest file (e.g. for cases when an application + provides a layer that is in the same folder hierarchy as the rest of the + application files). + If "library_path" specifies a filename, the library must live in the + system's shared object search path. + There are no rules about the name of the layer shared library files + other than it should end with the appropriate suffix (".DLL" on Windows, + ".so" on Linux, and ".dylib" on macOS).
+ This field must not be present if "component_layers" is defined. +
Not Valid For Meta-layers"layer"/"layers"N/A
"library_arch"Optional field which specifies the architecture of the binary associated + with "library_path".
+ Allows the loader to quickly determine if the architecture of the layer + matches that of the running application.
+ The only valid values are "32" and "64".
N/A
"name"The string used to uniquely identify this layer to applications.None"layer"/"layers"vkEnumerateInstanceLayerProperties
"override_paths"List of paths which will be used as the search location for component + layers. + Meta-layers Only"layer"/"layers"N/A
"pre_instance_functions"OPTIONAL: Indicates which functions the layer wishes to + intercept, that do not require that an instance has been created. + This should be an object where each function to be intercepted is + defined as a string entry where the key is the Vulkan function name and + the value is the name of the intercept function in the layer's dynamic + library. + Available in layer manifest versions 1.1.2 and up.
+ See Pre-Instance Functions for + more information. +
Implicit Layers Only"layer"/"layers"vkEnumerateInstance*Properties
"type"This field indicates the type of layer. The values can be: GLOBAL, or + INSTANCE.
+ NOTE: Prior to deprecation, the "type" node was used to + indicate which layer chain(s) to activate the layer upon: instance, + device, or both. + Distinct instance and device layers are deprecated; there are now just + instance layers. + Originally, allowable values were "INSTANCE", "GLOBAL" and, "DEVICE." + But now "DEVICE" layers are skipped over by the loader as if they were + not found. +
None"layer"/"layers"vkEnumerate*LayerProperties
+ +### Layer Manifest File Version History + +The current highest supported Layer Manifest file format supported is 1.2.0. +Information about each version is detailed in the following sub-sections: + +### Layer Manifest File Version 1.2.1 + +Added the "library\_arch" field to the layer manifest to allow the loader to +quickly determine if the layer matches the architecture of the current running +application. + +#### Layer Manifest File Version 1.2.0 + +The ability to define the layer settings as defined by the +[layer manifest schema](https://github.com/LunarG/VulkanTools/blob/main/vkconfig_core/layers/layers_schema.json). + +The ability to briefly document the layer thanks to the fields: + * "introduction": Presentation of the purpose of the layer in a paragraph. + * "url": A link the the layer home page. + * "platforms": The list of supported platforms of the layer + * "status": The life cycle of the layer: Alpha, Beta, Stable, or Deprecated + +These changes were made to enable third-party layers to expose their features +within +[Vulkan Configurator](https://github.com/LunarG/VulkanTools/blob/main/vkconfig/README.md) +or other tools. + +#### Layer Manifest File Version 1.1.2 + +Version 1.1.2 introduced the ability of layers to intercept function calls that +do not have an instance. + +#### Layer Manifest File Version 1.1.1 + +The ability to define custom metalayers was added. +To support metalayers, the "component_layers" section was added, and the +requirement for a "library_path" section to be present was removed when the +"component_layers" section is present. + +#### Layer Manifest File Version 1.1.0 + +Layer Manifest File Version 1.1.0 is tied to changes exposed by the +Loader/Layer interface version 2. + 1. Renaming "vkGetInstanceProcAddr" in the "functions" section is deprecated +since the loader no longer needs to query the layer about +"vkGetInstanceProcAddr" directly. +It is now returned during the layer negotiation, so this field will be +ignored. + 2. Renaming "vkGetDeviceProcAddr" in the "functions" section is +deprecated since the loader no longer needs to query the layer about +"vkGetDeviceProcAddr" directly. +It too is now returned during the layer negotiation, so this field will be +ignored. + 3. Renaming the "vkNegotiateLoaderLayerInterfaceVersion" function is being +added to the "functions" section, since this is now the only function the +loader needs to query using OS-specific calls. + - NOTE: This is an optional field and, as the two previous fields, only +needed if the layer requires changing the name of the function for some reason. + +The layer manifest file does not need to to be updated if the names of any +listed functions has not changed. + +#### Layer Manifest File Version 1.0.1 + +The ability to define multiple layers using the "layers" array was added. +This JSON array field can be used when defining a single layer or multiple +layers. +The "layer" field is still present and valid for a single layer definition. + +#### Layer Manifest File Version 1.0.0 + +The initial version of the layer manifest file specified the basic format and +fields of a layer JSON file. +The fields of the 1.0.0 file format include: + * "file\_format\_version" + * "layer" + * "name" + * "type" + * "library\_path" + * "api\_version" + * "implementation\_version" + * "description" + * "functions" + * "instance\_extensions" + * "device\_extensions" + * "enable\_environment" + * "disable\_environment" + +It was also during this time that the value of "DEVICE" was deprecated from +the "type" field. + + +## Layer Interface Versions + +The current loader/layer interface is at version 2. +The following sections detail the differences between the various versions. + +### Layer Interface Version 2 + +Introduced the concept of +[loader and layer interface](#layer-version-negotiation) using the +`vkNegotiateLoaderLayerInterfaceVersion` function. +Additionally, it introduced the concept of +[Layer Unknown Physical Device Extensions](#layer-unknown-physical-device-extensions) +and the associated `vk_layerGetPhysicalDeviceProcAddr` function. +Finally, it changed the manifest file definition to 1.1.0. + +Note: If a layer wraps the VkInstance handle, support for +`vk_layerGetPhysicalDeviceProcAddr` is *NOT* optional and must be implemented. + +### Layer Interface Version 1 + +A layer supporting interface version 1 had the following behavior: + 1. `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` were directly exported + 2. The layer manifest file was able to override the names of the +`GetInstanceProcAddr` and `GetDeviceProcAddr`functions. + +### Layer Interface Version 0 + +A layer supporting interface version 0 must define and export these +introspection functions, unrelated to any Vulkan function despite the names, +signatures, and other similarities: + +- `vkEnumerateInstanceLayerProperties` enumerates all layers in a +`Layer Library`. + - This function never fails. + - When the `Layer Library` contains only one layer, this function may be an + alias to that one layer's `vkEnumerateInstanceLayerProperties`. +- `vkEnumerateInstanceExtensionProperties` enumerates instance extensions of + layers in the `Layer Library`. + - "pLayerName" is always a valid layer name. + - This function never fails. + - When the `Layer Library` contains only one layer, this function may be an + alias to the one layer's `vkEnumerateInstanceExtensionProperties`. +- `vkEnumerateDeviceLayerProperties` enumerates a subset (can be full, + proper, or empty subset) of layers in the `Layer Library`. + - "physicalDevice" is always `VK_NULL_HANDLE`. + - This function never fails. + - If a layer is not enumerated by this function, it will not participate in + device function interception. +- `vkEnumerateDeviceExtensionProperties` enumerates device extensions of + layers in the `Layer Library`. + - "physicalDevice" is always `VK_NULL_HANDLE`. + - "pLayerName" is always a valid layer name. + - This function never fails. + +It must also define and export these functions once for each layer in the +library: + +- `GetInstanceProcAddr(instance, pName)` behaves identically to a +layer's vkGetInstanceProcAddr except it is exported. + + When the `Layer Library` contains only one layer, this function may + alternatively be named `vkGetInstanceProcAddr`. + +- `GetDeviceProcAddr` behaves identically to a layer's +vkGetDeviceProcAddr except it is exported. + + When the `Layer Library` contains only one layer, this function may + alternatively be named `vkGetDeviceProcAddr`. + +All layers contained within a library must support `vk_layer.h`. +They do not need to implement functions that they do not intercept. +They are recommended not to export any functions. + + +## Loader and Layer Interface Policy + +This section is intended to define proper behavior expected between the loader +and layers. +Much of this section is additive to the Vulkan spec, and necessary for +maintaining consistency across platforms. +In fact, much of the language can be found throughout this document, but is +summarized here for convenience. +Additionally, there should be a way to identify bad or non-conformant behavior +in a layer and remedy it as soon as possible. +Therefore, a policy numbering system is provided to clearly identify each +policy statement in a unique way. + +Finally, based on the goal of making the loader efficient and performant, +some of these policy statements defining proper layer behavior may not be +testable (and therefore aren't enforceable by the loader). +However, that should not detract from the requirement in order to provide the +best experience to end-users and developers. + + +### Number Format + +Loader/Layer policy items start with the prefix `LLP_` (short for +Loader/Layer Policy) which is followed by an identifier based on what +component the policy is targeted against. +In this case there are only two possible components: + - Layers: which will have the string `LAYER_` as part of the policy number. + - The Loader: which will have the string `LOADER_` as part of the policy + number. + + +### Android Differences + +As stated before, the Android Loader is actually separate from the Khronos +Loader. +Because of this and other platform requirements, not all of these policy +statements apply to Android. +Each table also has a column titled "Applicable to Android?" +which indicates which policy statements apply to layers that are focused +only on Android support. +Further information on the Android loader can be found in the + +Android Vulkan documentation. + + +### Requirements of Well-Behaved Layers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Requirement NumberRequirement DescriptionResult of Non-ComplianceApplicable to Android?Enforceable by Loader?Reference Section
LLP_LAYER_1A layer, when inserted into an otherwise compliant Vulkan + environment, must still result in a compliant Vulkan environment + unless it intends to mimic non-compliant behavior (such as a device + simulation layer). + The behavior is undefined and may result in crashes or corruption.YesNo
+ It is not a simple task for the loader to find the cause of failure + in a layer chain.
+ Layer Conventions and Rules + +
LLP_LAYER_2A layer must not cause other layers or drivers to fail, crash, or + otherwise misbehave.
+ It must not make invalid calls to, or rely on undefined behaviors + of the layers or drivers below it. +
The behavior is undefined and may result in crashes or corruption.YesNo
+ It is not a simple task for the loader to find the cause of failure + in a layer chain.
+ Layer Conventions and Rules + +
LLP_LAYER_3Any new layer developed should adhere to the naming rules defined + in the "Layer Conventions and Rules" section which also correspond to + the naming rules defined in the Vulkan Style Guide section 3.4 on + "Version, Extension, and Layer Naming Conventions". + Layer developers could produce conflicting names causing unexpected + behavior if more than one layer with the same name is available on a + user's platform. + YesYes
+ Can not immediately enforce since it will cause some shipping layers + to stop working.
+ + Vulkan Style Guide section 3.4
+ Layer Conventions and Rules +
+
LLP_LAYER_4A layer should export the + vkNegotiateLoaderLayerInterfaceVersion entry-point to negotiate + an interface version.
+ A layer using interface 2 or newer must export this function.
+
The layer will not be loaded.NoYes + Layer Version Negotiation + +
LLP_LAYER_5A layer must be able to negotiate a supported version of the + loader/layer interface with the loader in accordance with the stated + negotiation process. + The layer will not be loaded.NoYes + + Interface Negotiation +
LLP_LAYER_6A layer must have a valid JSON manifest file for the + loader to process that ends with the ".json" suffix. + It is recommended validating the layer manifest file against + + the layer schema prior to publication.
+ The only exception is on Android which determines layer + functionality through the introspection functions defined in + Layer Library API Version 0 + section and in the + Layer Manifest File Format + table. +
The layer will not be loaded.NoYes + Manifest File Usage +
LLP_LAYER_7If a layer is a Meta-layer, each component layer in its manifest file + must be present on the system. + The layer will not be loaded.NoYes + Meta-Layers +
LLP_LAYER_8If a layer is a Meta-layer, each component layer in its manifest file + must report the same or a newer Vulkan API major and minor + version than the meta-layer. + The layer will not be loaded.NoYes + Meta-Layers +
LLP_LAYER_9A layer installed as an Implicit Layer must define a disable + environment variable so it can be disabled globally. + The layer will not be loaded if it does not define the environment + variable. + YesYes + Manifest File Format, see + "disable_environment" variable +
LLP_LAYER_10If a layer wraps individual object handles, it must unwrap those + handles when passing the handles down the chain to the next layer. + The behavior is undefined and may result in crashes or corruption.YesNo + Cautions About Wrapping +
LLP_LAYER_11Any layer shipped with a driver must be validated against + conformance with the corresponding driver. + The behavior is undefined and may result in crashes or corruption.YesNo + + Vulkan CTS Documentation + +
LLP_LAYER_12 During vkCreateInstance, a layer must process the + VkLayerInstanceCreateInfo chain links appropriately.
+ This includes getting the next layer's vkGetInstanceProcAddr + function for building a dispatch table as well as updating the + VkLayerInstanceCreateInfo chain link to point to the next + structure in the chain for the next layer prior to calling down to the + next layer's vkCreateInstance function.
+ An example of such usage is shown in detail in the + Example Code for + CreateInstance section. +
The behavior will result in crashes or corruption as any following + layers will access incorrect content.YesNo
+ With the current loader/layer design, it is difficult for the loader + to diagnose this without adding additional overhead that could impact + performance.
+ This is because the loader calls all layers at once and has no data on + the intermediate state of the pNext chain contents. + This could be done in the future, but requires re-designing the layer + initialization process. +
+ + Layer Dispatch Initialization + +
LLP_LAYER_13 During vkCreateDevice, a layer must process the + VkLayerDeviceCreateInfo chain links appropriately.
+ This includes updating the VkLayerDeviceCreateInfo chain link to + point to the next structure in the chain for the next layer prior to + calling down to the next layer's vkCreateDevice function.
+ An example of such usage is shown in detail in the + Example Code for + CreateDevice section. +
The behavior will result in crashes or corruption as any following + layers will access incorrect content.YesNo
+ With the current loader/layer design, it is difficult for the loader + to diagnose this without adding additional overhead that could impact + performance.
+ + Layer Dispatch Initialization + +
LLP_LAYER_14A layer should use the application provided memory allocator + functions when they are provided so that applications can keep track of + allocated memory. + The allocator functions may be provided for the purpose of limiting + or tracking the memory used by the Vulkan components. + Because of this, if a layer ignores these allocators, it may result in + undefined behavior possibly including crashes or corruption. + YesNo + Layer Conventions and Rules + +
LLP_LAYER_15A layer must enumerate only its own extension properties during a + call of vkEnumerateInstanceExtensionProperties when + pLayerName refers to itself.
+ Otherwise, it must return VK_ERROR_LAYER_NOT_PRESENT, + including when pLayerName is NULL. +
The loader could become confused on what support is present in a + specific layer which will result in undefined behavior possibly + including crashes or corruption. + YesNo + Layer Conventions and Rules + +
LLP_LAYER_16A layer must enumerate only its own extension properties during a + call of vkEnumerateDeviceExtensionProperties when + pLayerName refers to itself.
+ Otherwise, it must ignore the call other than passing it down + the standard call chain. +
The loader could become confused on what support is present in a + specific layer which will result in undefined behavior possibly + including crashes or corruption. + YesNo + Layer Conventions and Rules + +
LLP_LAYER_17A layer's vkCreateInstance must not generate an error for + unrecognized extension names as the extension could be implemented by + a lower layer or driver. + The behavior is undefined and may result in crashes or corruption.YesYes + Layer Conventions and Rules + +
LLP_LAYER_18A layer must return NULL from vkGetInstanceProcAddr + or vkGetDeviceProcAddr for entry-points that it does not support + or that have not been enabled properly (for example not enabling the + extension certain entry-points are associated with should result in + vkGetInstanceProcAddr returning NULL when requesting + them). + The behavior is undefined and may result in crashes or corruption.YesNo
+ With the current loader/layer design, it is difficult for the loader + to determine this without adding additional overhead that could impact + performance.
+ Layer Conventions and Rules + +
LLP_LAYER_19If a layer creates dispatchable objects, either because it is + wrapping objects or implementing an extension not supported by + the loader or underlying drivers, it must create the dispatch + table appropriately for all created dispatchable objects. + The behavior is undefined and may result in crashes or corruption.YesNo + + Creating New Dispatchable Objects + +
LLP_LAYER_20A layer must remove all manifest files and references + to those files (i.e. Registry entries on Windows) when uninstalling. +
+ Similarly, on updating the layer files, the old files must be all + updated or removed. +
The loader ignores duplicate attempts to load the same manifest file, + but if an old file is left pointing to an incorrect library, it will + result in undefined behavior which may include crashes or corruption. + NoNo
+ The loader has no idea what layer files are new, old, or incorrect. + Any type of layer file verification would quickly become very complex + since it would require the loader to maintain an internal database + tracking badly behaving layers based on the layer name, version, + targeted platform(s), and possibly other criteria. +
N/A
LLP_LAYER_21During vkCreateInstance, a layer must not modify the + pInstance pointer during prior to calling down to the lower + layers.
+ This is because the loader passes information in this pointer that is + necessary for the initialization code in the loader's terminator + function.
+ Instead, if the layer is overriding the pInstance pointer, it + must do so only after the call to the lower layers returns. +
The loader will likely crash.NoYesN/A
LLP_LAYER_22During vkCreateDevice, a layer must not modify the + pDevice pointer during prior to calling down to the lower + layers.
+ This is because the loader passes information in this pointer that is + necessary for the initialization code in the loader's terminator + function.
+ Instead, if the layer is overriding the pDevice pointer, it + must do so only after the call to the lower layers returns. +
The loader will likely crash.NoYesN/A
+ + +### Requirements of a Well-Behaved Loader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Requirement NumberRequirement DescriptionResult of Non-ComplianceApplicable to Android?Reference Section
LLP_LOADER_1A loader must support Vulkan layers.Users will not have access to critical parts of the Vulkan ecosystem + such as Validation Layers, GfxReconstruct, or RenderDoc.YesN/A
LLP_LOADER_2A loader must support a mechanism to load layers in one or + more non-standard locations.
+ This is to allow application/engine-specific layers as well as + evaluating in-development layers without global installation. +
It will be more difficult to use a Vulkan loader by certain + tools and driver developers.NoLayer Discovery
LLP_LOADER_3A loader must filter out duplicate layer names in the various + enable lists, keeping only the first occurrence. + The behavior is undefined and may result in crashes or corruption.YesLayer Discovery
LLP_LOADER_4A loader must not load a Vulkan layer which defines an + API version that is incompatible with itself. + The behavior is undefined and may result in crashes or corruption.YesLayer Discovery
LLP_LOADER_5A loader must ignore any layer for which a compatible interface + version can not be negotiated. + The loader would load a layer improperly resulting in undefined behavior + which may include crashes or corruption.No + + Interface Negotiation +
LLP_LOADER_6If a layer is implicit, and it has an enable environment variable, + then a loader must not consider the layer enabled unless that + enable environment variable is defined.
+ If an implicit layer does not have an enable environment variable, + it will be considered enabled by default. +
Some layers may be used when not intended.No + Manifest File Format, see + "enable_environment" variable +
LLP_LOADER_7If an implicit layer is enabled, but has been disabled by some other + mechanism (such as the defining of the layer's disable environment + variable or through the blacklisting mechanism of the Override Layer), + then a loader must not load that layer. + Some layers may be used when not intended.No + Manifest File Format, see + "disable_environment" variable +
LLP_LOADER_8A loader must pass a linked list of initialization structures + to each layer via the VkLayerInstanceCreateInfo structure in the + pNext field of the VkInstanceCreateInfo structure. + This contains necessary information for setting up the instance call + chain including providing a function pointer to the next links + vkGetInstanceProcAddr. + Layers will crash as they attempt to load invalid data.Yes + + Layer Dispatch Initialization + +
LLP_LOADER_9A loader must pass a linked list of initialization structures + to each layer via the VkLayerDeviceCreateInfo structure in the + pNext field of the VkDeviceCreateInfo structure. + This contains necessary information for setting up the device call chain + including providing a function pointer to the next links + vkGetDeviceProcAddr. + Layers will crash as they attempt to load invalid data.Yes + + Layer Dispatch Initialization + +
LLP_LOADER_10A loader must verify that all meta-layers contain valid + component layers that the loader can find on the system and that also + report the same Vulkan API version as the meta-layer itself before it + loads the meta-layer. + The behavior is undefined and may result in crashes or corruption.No + Meta-Layers +
LLP_LOADER_11If the override meta-layer is present, a loader must load it + and corresponding component layers after all other implicit layers have + been added to the call chain. + The behavior is undefined and may result in crashes or corruption.No + Override Meta-Layer +
LLP_LOADER_12If the override meta-layer is present and has a blacklist of layers to + remove, a loader must disable all layers listed in the blacklist. + The behavior is undefined and may result in crashes or corruption.No + Override Meta-Layer +
LLP_LOADER_13A loader must not load from user-defined paths (including the + use of VK_LAYER_PATH, VK_ADD_LAYER_PATH, VK_IMPLICIT_LAYER_PATH, + or VK_ADD_IMPLICIT_LAYER_PATH environment variables) when running + elevated (Administrator/Super-user) applications.
+ This is for security reasons. +
The behavior is undefined and may result in computer security lapses, + crashes or corruption. + NoLayer Discovery
+ +
+ +[Return to the top-level LoaderInterfaceArchitecture.md file.](LoaderInterfaceArchitecture.md) diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/function_device_chain.png b/local/recipes/libs/vulkan-loader/source/docs/images/function_device_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb5d9f4514afdae09103d2cd9d2dcc1c20a3f1b GIT binary patch literal 128677 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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/function_instance_chain.png b/local/recipes/libs/vulkan-loader/source/docs/images/function_instance_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..6dab7d02f4670c29976c5e73c1a3cd2d751547b0 GIT binary patch literal 205296 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

knKIO6T#skmCbgv;)zENb?Z+2S@VU24Z3+S67l* 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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/high_level_loader.png b/local/recipes/libs/vulkan-loader/source/docs/images/high_level_loader.png new file mode 100644 index 0000000000000000000000000000000000000000..cbfd3b625dd247c0ccdf63db3f96c519746815ec GIT binary patch literal 191966 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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/loader_device_chain_app.png b/local/recipes/libs/vulkan-loader/source/docs/images/loader_device_chain_app.png new file mode 100644 index 0000000000000000000000000000000000000000..2303987b5d62d8d2017749e588e90897ecf28dbf GIT binary patch literal 35185 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 SZDrgHK;Y@>=d#Wzp$P!GlaL1h literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/loader_device_chain_loader.png b/local/recipes/libs/vulkan-loader/source/docs/images/loader_device_chain_loader.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3b5162d437a4d95d8c9690a0518fe08d4f713c GIT binary patch literal 46318 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%0AlkcOG3e9 zIf}#`;%U^@VzfeB)u|-h1>HeF=4p)X`4)3Qm7&5aq#p5Tb;EDH=?8&45E}k~ni=&E z#&~W7BXtvbGz zLweYkf%osJa+kT*-wfjTxWcg)Gu`#N$`mp``HkpdCP}<;LL_?Bh_fixY1j4kefPYD zd0&I{mFs0RsJ{3x!x`)+v?HJ2LV>ie}{TP*N= zNUIt5kItt9(pfZv6jfy~ggHoE+a^j(Eqj!@`0i1BzSzc~RSN1jyUvaye<6`-&}t~D z{H{nY&yjj5xs1y_(9rLPi&?=2&z|&IH3dbFX2dYDJ`_0Vi~P4QJYvj&2gJE&>2GEh}`+pb?51VH+L)G>2}-GIQH=%HX@wkSgq=@&jv z(#VLG#UwOLNV`#^zc%yrF6GA6RdV?8T)?HPz8VP09UiCNo0gXKzEv@Mdy^3on%>7{gR{+Al5s@jKLH_GrqW!)k(cWZ2lz-N;wE__n1y_9oO}$^&G0u$BqB8vWM%b zch~mCb_ADnnc8h9V-*l>Zssl66`9H;lSCWVd`X{46#BC7;*huqo=Ipqv7Gi>b}f;= z*1q}+6O9n{i9?LcW7e%r$uBZ6&0*gx*g$&!yzx|@7x=G%lH1;+?TDOT**o(^&1dO$ z`OGc*?c)`XaNvjtTww6Vgys7JtAGfisKj>;17mx(L-zuQpV8Af#goDBJ(P66hPv`w zYfL4Bmt9?v^!fp_9*0!R)QZ$~7gksX{*Cxjl(@>L7VkXOakZ|=C9(f#1Fy2rMdL;m z-`@Pp&b1F}URl&gXy1y$=q42{A*Lo53}O_8y$?Qzf{*Mk%d^5jf(8PX)1N(AAvbhT zvcG8j9Gp$-aJpu8_73_(Dy%TsegNKj^7-)q2UGK$NXz?l@;=vnb0_%e^hbO)QrbUQ zvagv2vaPaKs0Rk7Q$*cv+@e_zgrqr;zevCDWhBZiQD zNkco$B0;TBS5zaeGsI0Im%||vRMBLvll)EHtar1Cr5%TW6R;az09sa0V=i_Bc40x) zd(f+4r;NsxuQF0O zM#o`uee_K#?;N|K?@Chp(9>n%nTQamQqQLv~RY#LpOA>;i_@5Bg< zh{rssAl&;ZnIw%B{OeO~&BFI(K$E#oj|caGW08c`cU$N&d<(BaG?I#SrHqLqV-Uya zj(E?u&fx4-;P@kG$)M&BGz0WX_=@SUHBhW4_;l2W1m>zJiDBG+rF?-l2QBKE#load zqQiVWlR=7!Qj}hHC)!7Xn-U8M2Od6Gc8pFm#2!sMZpu=g#sW z62?Mua=Sh&n;es6E#-*$hGv8^@<-w8is#pIwi zV*~OSOY$aUcU(%vkSCZIejC2qG~ayXvCw>#`s@n5&2n_ogpJ@3T9^f12p9bf-*5QZ z@Jui7v%Wj1s{~Qef@anf8Pk|8XLte!zn37gssK*WpRPxs9dR3#^l`gC~$$7v;-#9+J3_YUVPV8ku!QGp&Ebx0~KK0Irb99RxdkR;dpkp zjN2c7&OEbj5uq1Fe@75H`SdB`Ic{4ek-hJ9Kbo|uXe3Eb^u(B*=>rY)Wy{}oTHe5C zzdcD!z(q5(Fxf+Rg2DNCch}0dEhpyC(EDTYUAjRi6$&5|rmR^0qqfhyigui$h6)L; zM^(iHXle6qm5WI0WD=V0?C#km<2J*Lh=^50LSwpMbFF+PSzJZdqGl-7)%Xi_=NxBl zIt52H%>xhG%C@8LU*i>wh~G*)pj$ehcac27biLur1%J!Gm|re!F_q25xR;*a$)W$? z-SRIZw?>?Ztcf{=8E~JK`F^~Li0)zJjr{7!l7CXE3>z0z&r_Ee^v1t%qeH0eBUME@Te?egRtSnNI-~tA*7DfP*A4w=OxjH z?b!W6VqnU6l_|{L2k!Tb|Cm1XI5b z(Lt{dTMI9D3#2_t#G{uJf~z{a>fN{d2QL@Pt2lUsKKIuiM#9HE1ynWkGjjV#F*Zkg zb=3j5(R3^t%eZdj!UAJR;V)4`5qzG|5n1FUp3>6^dx)#7CiX!_l_Z5s8oKdyj!t^# zM>Y!ecR#I__HamKVY#DLY|5g4a?`1;$E_VI7OBzsRx$l-#_E<(VOGcL5w_ItSR;q9 z)>FpiLB1~+)T2-LjqO19))Ozt1LJ;aKv1OU`q>kS(2EaS_l>W^I(vjkrJtw!iLv`F zkLYiPU!LvVQNXdVq&loDkvk%KbNW1Xd;&q}86BAT|6FI6UJOT`nI?6V;+tgD{nZbx zvVZ|uS#LtEg%IW!FaKJ;faUWQe01JGppWmb^%Bc%4_#nmhJS@+kPe5i$wwaPHRQjZ zM^O(CV}tt|qPji}`|oW5q5{<(9cvK#qSH);(yG}a=2nS`9cN%Ynf-^2%x8ki9y9a^ zh|T0bgD*&NpPU@W?6O3jI%1+@tq%DPioCak{l{VNovldBNFP#ny5Cc8R#HtH(r`*H z?}`s979zTj#4z?d##b(-R!uI;P;8k?`KCp!F06?u!A$VZd*;OU{#J;U(p zwvES+?35RxS{glf_ZEq5Thcf3b^k_zK{s7_XHy{jry1oJZ%e`DNY$0Qoo6z{j{?G8 zacZN&Jfqc@*S1rSg_lS<?42YP>R|{Y+fVO2VWF!dXgVgoL8mtBC?&+W) zl>OK})8HzZj@5W#rGdl^7Mf1e)a8wPr2EEoK<^if_q2^Bafd%%qvgLfiT~$J=`~UY zFK9Z)aumcVqkkW)?cbVOtp+fAeX-Ub6cEf{QOl;{Fowg6A<};FsBeGc;qk80P}O_| zf*HFgE*4RtluS7*#xr)n#G%$!lWQBbnF?Z#qF2xtNDGLJd-k+B>|zQ9)gv83gk}4C1@NUXh=$ow6l1TC0%l&o41p0 z@35=Ub;>xe{o6tp)aDK=Lfez&{ymb@r1Lv4n+A3#HE*l`W>olRSi&&{s6Wv%`nFSG z!gHxMTd2K{@#2G78rc^fkG;e=eq=eK#-|BDW>efLpRCiWVzoTqYQ?gN8uP|}k~0vz zqrgwbr=$8@)SP}^<1eLwz)I{BA?KIOS1qbG1eVS!($i836buAW&@NS;c)gz;j7N5T zf~KW~EPp>2aq1qzLoi|^c;LApo!^UGgYX!xj@=(^L`55a+tWIzFcB-GPuuzJ^vn}B zDn=pGLc5HG=wthaBP{dy*A5vLJUdH^CK559LoI=?Dx}$jhzM2g0bJ{B5Hzv|?e;?# zz~(eACl_&H^K5XA+ht*SW39y*w&*AXDsx!)y)aznlBX}1ngaQ zN#_y7LcI>p80nd?8y)|KMMSWNFBDcO<(H{9Le+D>s~IRf%@^+9ep%7VVWAhL&_d^Q z(IIATX`NrX?|0Q(tex4H>?orHR$il3y~DDc zXTliXnBw(^5zo@?vmgCDwsPxk)m_|n`Yv%FrTIGWb(#@B zShF|Odq-k`EpR3p>&@@TA{s%c^2yNgX~^_bgu=vtmIFIsFBFe=s?|;k2HR+zF^|es zHg|w%^44)td%l5W2A)P)huAvb<=|yd6SN!6ZIoGpu!V$LIloVoeufR$Jzmr);7Na} zcy26tw{I#v6MIu#_K_tXVPpOtq!36H6F>I|P+8B^{5*emUC>;eq|g{|?#(YeId$zB zMB^46W%p;o<@DdK4h*Hd0#7t)wXIZCk zYG^!BV0y(v1xN02>WY2>By8=eJ?ai-llq2227k5Y)e~Id+;2Y7 z`OVjsz6C(UJXlw|GR{}?wd8J~Zbaa5;UkQR^rR?*R`@lRL01EzFm@n#R0MZV5)Bls zeiT&Hk=EcYvUs+TQ_3+&6Lriv^5$*I<#Ii#%<4nBQ-<>O;O!MVxUEhTp)#XB0AvF0 zi}`bOZK}6X+nwPI!P5bn=Qmli#rX`~R+!{VOHmf5q??Qm=m(%-L`WoE;A4rEe<%XR z7NVM=+)LNG-1n&U99$bM{+A1|_=LOp6L@f~YN4GPFuearCEZCW6W@GtZs5s^nJa3l2>+K999T(WEqBfLJjoh39B8M{ zlV^$1Rk_VZfShUYR!GO{F-r^sg_g?0kBJ`7EV3fTPcU#25PW;jfG?9o6!)7&^2Iu?cSX;(n0BcaVX#~chwZIJ8^5Z4^(wENT+8NB@s>I7(2HK{bqh#MtVRT z7Wm`dCKduk`Z3L8yGkwPPFleyj8vZ!#1oE47qgqP?5~mlc?oGBCFS4~Rb}Cj{9Qz@ zXT4LIioX$e3S_(sYkSNXw_+C3;*oIZHPi%syZdzxyIbZu9^fh7fc7Z0itX_di=O7H<99?Hp)nWefFoh#cTxX~jUNP!)jt#qO(+$+yMl0dCl-cAe}I=T;W5HUc-$tD}~PpdT>vna5Ga``K# z2|>@5-xXr4#Q9M$**BqOhEBzxy$pwEHTyv$sShsHT3@fa zad=eYoT#L}!6fZvQs&)<1NK}Cq|KMC4;wX73#Gr=JqCa!zx)^y>bUxBD-UG>^d0`l zztaj+*7%`${DkN71c&SGL6fBx5)TVX;rb!pw+O8ac0aIHua|wUnafuj#X*N6Bq;FS z#$S$%?D(?ZLBP5{wpLC*DP-v`!f_PeM%Aq(RHj`!*Q}Ab=EtBUa{kh#a}-}y_V1;6 z&*YhYPDm()x)gA#3!2bP~2>v%9T-AbI-$!K^NiXb2GiMa_1B_alLjQ!RD zATfqn>^kazFaKB6Q-(#=b&DdQQYuJDNOyNjcb9ZacS#FKcXu}kLw86^GjxxDQbWVg z!`$*Ol*(>&1JF+iQF(%{Jp#hNZm%1bNh#L@_(zeP*T7mwE0 zfGT@?#EX7voXEA;u9x-1#tGc68LK@k6xNCygBKf_$=n~l@sK)59suFr7=pyld@%Zw zSLJ`$HKrv}^VhH5Y8QeEB%#X=qSXxJ^SzQm<@3p}{6p!CfdFt^KAwO?jrsz?&AI^z zS2;90+b(Zeaf9x;B?=VLzHznFE78w=LAL(7ebiA$DkPwRl~ z9>|Nf(0iQ^D$7sh54L*9tj6b#*3L~%d|X^t?inv=KbDucs+cR0k!?d5QgMXxPZrD- zRC5Uj&hMuS3#+I9al3{XN011I0I%o%F!(}D{Nd2Xs9eX-hLdEjSTA0@6U()obfG{a zJv(N8!Fuc!{j{LUNg^|DDT(QFbuZX-n|SK!fpg`-LC4(7?T(99*wsC-saz)bW8ogrx1gs<}!$VBr+}z6yB0bSZj^nEnmUkA93kcRukCeC6 zNdAuxIEAlhJF6DkELZX*6ZnLz2Kl8gS^KJD2JVB0j?{|b_Z|lobQ=^b3Wolx$y?nl zr{LjY%<^&N%VVI`x>j5CbERV`L3O-QV|e;XYPpDSMyb?l4%PcEy)SaP!zz(~51E6( zj=D0iA+AIk0UK$& z#_fQ6&mr6)$EYPiIhmBaOXh8l+A;m4EIC~dcF?i!H?XWc%v~;#X<_NOe_q1k#6Syl zv^vJod4n6G?54ZK7O5yUAv@_;qX7d-a6E zWJ{(8$ex!S^jT>KN^E6H6fKJhpL&PX&gFS54_EdA9~d9tJiX#iPPUw}V0((UN#~If zeHBYCU;ZNOVHNkf?1(|fh8u*#S_Ph#l(**tk2R}Ge2zblaPJ*9umhLKW3OWNrsjOH zz_F{H7H7uu-608_3vur{7rWBqmI?F=cSAgh+ek<4hse)<7@yFHAURM&(BjVqtTSN+ z-Ut9?!q>%CK$SpcTZY(h99|2o>QshMP+K+SOJ_kAcW7n!2gCR%b!<~E0w7rtEI^ge z@)WLMKdQ7dw+_OZ8r@^&PGtmtsJ}_eE96nPsiolC&CQ)j22K0GZl4Eje2@MD5Mr){hY5iSqfgrun z0EQXn`T@Z-LC2jZvf?nQai&x5U+UoR=UeY?FV@pNA24*ncC4rSHMe$q?LvUI6l7%> zdy4JwpOL2Wb4#z9#T?$a8yi4$lRpQwTq_u6aO5z(Mm9Dy*jo!B01*H+X7R)UgJuF2 z4r@VC1p9E82!hFzw^Ytbp9dM+}0F;71vBZ=;oF>1E>gT zmKV_%hnT3>2g?3CzS^Uq(4(Q-LqeA8Ir%RJvcIs7zZTSv2tHU+)v}l^p8cVjewf%u z5R1xi!3jjUhG;n!7q;7MzRZ7>AcdbhUN37RK!zBbxD)+HfcQ4G z%fcMBhW69+mvaKPjrcBc{bXN@4>AE?cQ|ggXJ=C0t0y$%7ht_?B6WS|E9(2I7_1s7 z#jBIIds}yS#OTRQ`WF3%5zj@@VgMYYxzH2@)wb-NTuj9MXz5y!60RcQ-8^ZlSeK$2 z`fU+C+ReSlr|)8w%xRdx8P%BIbCQD4*8EaPJN+kKEV=d$iFOII+3r&&!C~9Xgsot7 z;D|(i1Uyu>-zHtm zBf~{ckqxWq70Nxi%SLq@j zmJFJ)ERAz}PADb|(caV@EL3`=k?`GAANuDU@I)Ar*J=x2)GQYJ$@oyAfA=I)cj_!h z=zZ#?eUIY>7cQy2&sq$jd7iNSDV~LNO-vI3eR;}HoN2IPGA)G`Z;Uy7kcq~@Z&X-j zrI6ck!Qtb+6S2F02l@Q~1|NGuf%>R(kkJ+x9B{}uE(?4YNu2x=fbC4mSU1cG8b^TX zGxg(kHi*<=1ehIw?c;jIfoYb`d0qbWnDWf6w;u@L0Mk!S_bycfM#aI8ntRRRZwKo)C0-l-=cyZhnjN=E_tDfl zpNppL4(VtF8DFW3?buEthXQu%YReVYA6p+51ZJygwIUBv(5tm^YN)*gG$# z3L|_iU$?BZx>!@~>f+S0byBUc7+w3tT1hn(1C5m8^WUe@afZuIQEj6_!gEPDQs|W8 ziee;)scHyHkH|k+g~qqv=+!jPwHD#24X8DJ?k<>WVFd}xdJaG&Q!&={@wwW&I-}t4 zNKzZd8^?*-iPCyfL`ZXbN{xamoQsTUVnHED%L%Q8eg17OB*DI&yRGj-tATUOpK^a_ zTs}X3M`-TVO5qbvMc1R!-5D5gNv8SUqWA*a@+>+!(feyL%jljTj3IF`=ix@j{qU6q z18av;VEyJb=mlxemL%-M>rbm4r}WeEHEz`}+sIa|aEI8YG1-49qmVekjOr*1Djnr_}%^uq5&TzDmP z6dkfJ)CQm1nL5~wG;BxpKzpDJp7^g9@pYN(P+kW|bfh&i(@9ZufB*hMTz1;x@L?o@ zoSbu%imE+%^mM>2k9LCpW)srwHk~^$O3zL0OLq@`c&^eZ;)_|nAua3vyq(j@$pc|H zv{ZVS?iFhl*Bp}Fv+!7xCNLjaNy5%wBXg)0b>ovFc$Wi&?l=<@5c4+&vhWvF3wy6e|HR3z!mvlnu-F;3@62UnDpJtxL`cA<=Q;f@ZXVGEZhhG2{1K-5G!vJO5x6nr!Kb0WA%aWt ztxW`#B>t@JI&h2nYv1)`9<^pRBp zIermB8z2($v$< z!Jt^<;{7WsY(Zq_>Epd>zpZ#iy2lerq~VPl8h9D}&4P)&x-`BSjl&Vw)aSb32qXV4 zh~S7ff}cdYrzemGhF3};PRVy!zYx>5xai|&HGG(n`o|IHVLu_n;XUixt#55jif{Aah6*%>fW(HJ0iX7ez0!GR z*Gww2QTHyt%3z+1@DmTW5v0e?g{va29q2!gDM7QQeL1D%=_LqpTA99&f(6(gm@Ncp zO^jv?5T09|{kjgXbeZQ`aRi_2wb5MaiSXSaUsUs$d-4B@{Y5Q_*%z7I>jW2+N)yi? z@$p#_cbw`8#VgiMFiwp(0w;e+j5Y#moc^$Sa=KA9zY$5SYi0Zmwfe>ZC3i%?c=8C2 zjMy(y3qf^|hWzb&GcyeKlCTmp&Dbuzvns1KcpAkfy-#>%C1++HNAAn>cgtFx$vC;0 zPo{8}EwjFBl*jhd{O)0MH$CshGo@PD-e8;2xr{WS$>dgh#Dh@XanP5gKg(^Rf^Atr zZ`vP4jyYHqyA#}!rcCu=JQP=NEW#~|3sg<3O^lv|4vCusjIoVDH$UGbI~47^XK-+? zb$2(Hys(PB!4s8&N*`@Rvk2wXq#KCeRcXm^;)W(;x6>j|PmdQLif)FRp=Fs=Ne4Nz zV6qSX!LZz>WCroI?j-BnJ|&9Q!He5^0J#7bAUQ}siyGBS+4q_eo0gH7CvGT)BEiRV%P_A5}LOF6S?@U zUh5m~DG+nC0Cj_iMe`r}?r8d(4`{%u3ZA(&QuMRn#`C?XWL#6R0QG#QDbwh2qZ|?i znf^p+ZSl!l6E%N6x>-m8}11&u7NRAn_ ze!DTC)8O{kjECuoOg$`L&f1Ul!bnf$ZYp-!mN9aS=sP__Ua(VI;i3B#(Q)4M^3u!o z>pqIN;cemcOF-)PY9Q+Uc;Lg$O3cIf8gN_Q;ApGJ_!*S6&}{k(ahjf@+PP#2Ok$xk zJb*sx24zfOn^0S;E>w#*?#mf_lyONJt_`^zB`d@}JHD2zR^ehiV=dSXgytws878N|lnW^9%sI-|+Qa zxeX_(A$mcZH6$teWN2X@crcZp*fHx7m6AY6yr+5>FjuZt| z5V9P%xBR2C*I4cuzto1PcO(D6!0YOL{}&^M;MYt=A(G}=_1(oxx=`qKlf0A|b~PE$sYx68Yqn7&NdNd`?rOCu zHajyHIYqiX+OnXncC{n_s>eG&7zA-@urXW-@KQw4e-wb2OO?Qe)QlAXeD;Wal-}00 z`hMZw*PkqW5R21l?t-blff5UMH^eo2$S4pzX|N4qpEH2vBfpm(R;l6fDf)A{U$gt^{Ez<7NEuO(xK_jhV-7(r8@)93 z!aj=^u6iDmYFvEKlF(Ku*B*afn(u|DngLHFvcB zEP8a&(`knADc-+?7pmqx1Bj*MqeMG??L zPWd=Ksfz4z5d(v04E)(QJ6?nFjwlbL?+5)6+{5aYpo?}QiccNb*a<|MSO zU`gRKCx%V=VCiCSIrDQxnyc^YKC&OiXAyT&E_9u%U_oxIddHzV+XO9>53HBA)^t^) zFO+Goqh5h5Jts0HRvIjiqqKgGrltZb<@R{pjsFoW^PfE|?h5Cj<^v4pb?=dU(J8!o z(UiEgh?})>$2bry5VKRp8)~L3JK$K^ryfu+nS4dmU&Mzv7QZ4l^?Ufq(R8Fen)%nsb1~SI;Q2Z?=sNOqpz(+d1=-F!ge+?LC_I>??i|H%n5* zP3@47;`@=t;{Zv-&CN@w_=-`OxXjEwPr_nz=~h~8q1>H2(WT#vRXiZ1jyKkSs9G~% zy*p};+h{E1?piABwK%-X#}G!;I=kMZLSn1=zl1taZp5zJh|X*5 z7t`u^M)Y4NE9SN2V{)@78!TM}vxW@dreSi;(hhc~E}%R>4fpY6xfr;Zr0-H>G+07G!XfRD|-0Lm}ZUQ%t8bkK7uN($E&J46@_KB@LqS#Wrm76Zzsup3>E`m zQovbG2S=ao;kg8ffwm;g^NS0%B+{xjmG$?_BT?`f@_?vVm|n|tG;7k=1udZI`R<-b zLyk|nYr9_$tN87>k+H%;PfZ@86&9c6Uv3a8LKOpu2-gqhnBD5N;xM23zUARoIMty1 zrx~bPq}FHNX%$xCgPe+@PxoY_C3u*a+9BO-_2&s^BeA&(!%mBErpLDpfzpa}V%pz~ zcHQDlHgzvx8|~%$1hNr!T?S@_IX&Zb7j6YiKy^nzB*;r!A8O#IePVx+HS{vov%=Jc6G=rRrye8s4IVDO5pa#`e+zY`ZNbpGuDvXgirdZt042)V*nce7q3ie>P?+y zdwUJcoVu30Y7O^^h$VI*18Ppm!p)bVFqR9b0h8z-lRI*&WJ6tpuVz&a{Et6>TlqQI z;y{0p=P|c1w{S(Ki^h5Rz9I1W^{|*Xm$KGz=`mtQyd2obue@=Nd0>)A*p4B_` zDiYaf%Ha>b3;rvhAWYE$K}Vg)c>U=~Kb|yK(Kw=If9pnZ_<&PR5CGl{6kgu}$)vw( zu_GzSSD1b;__bwuT1~xXu=h_v2sIi>O&W7Udqz_w_*c;Tu_u=ic3}c|TUawoXn9nQ zkk%i^-yGFkwi9+;pkhJBW;aE}XSZLt!F_HK2YB5OL5J$J>(#GBQh$H-wj4j)wm9_` zJPEA+#c0}8(jvB$RiuIkBJjU;dqFU(dm%C0L7Tl&OFn zMjQ=$I3X*_mdk9TH-9V;k)33fUm9@Z2pWmZWe?exORm^xirfx;9Vv9omE_cuInx&+ zR$lB0_lbJXQ~QM@j_H8PtoxqZ z4-FZ4K|TVUZCg!J*e|oWtEmB3)>hu12+HUAr)A{_I`T`38bjl7bJ?w@N^7RPZ79R) zWGBwMRW(WQI(h2-?;6Ftg`dMTG{M~Y8g+uR2N+`BkS1yH!Kkmt>#EJ)wK7ri2fL>$ z@Pnj+E>iV)f%K}=Oc))59nKEo`k6p6p<9k`z#qf>9(mm-?0---lU9nU$H%F6h*2t_ z@tVD*z8}Xqa8xXCm~a`3*!sOWplyuXKktC2 zC#P7=*7^RK8qD6_^N%;ZlR#zpvfVn4&Ve0B4N@VdNcPt`=ne@9S5!_?OcT$8%jrP< zp2=waYPs9Tl$0x?jga#eHm_0t9+yinjp)7f6cqH1)5CTyhH{N&Dsv#O^TZ5Myb-vW zbj>DBV@(qL1#pvQvIpt`bLHZaXi->@*LsiX)x2?JY+|Hd_zXFQm@BD6Dc!3r`V*^$ z=8hb=Xw9F!J;&FpkqyXz?;iZ;30j#iQ`PsUQU>syj_w{Y7kmF8h}$=m3Kl8NHJ#^+ zNe|kbsy=lyBFoBPXU2eS=00w@^Jm@;Nd6Sg*V4yZ#PewZ)uZjDqsD)%#b>|&ZH+T0 ze$5E_Ha;}P?^bbt$f$}tfsE#JVaW5r5@@1xFk3ngG*Va;_MMTEek)*4U=w)vdaGC( zyw|+6oRA&eTsH${7Z1mxK0Ioq*KLYO0t!h2&OYvnh5Yi{ehCbe-V{mUio&^GrW;T7 z_@0(t!IoSW=WznY=q-fdT*FuH4S4}sljbA$Lh&LBX(o*HrfV^Tn*K1nD6s7MM5cwv z9o0X`yf2k5XqD|b-uz&p=$|9_0>DkLx2FVNyD-{8{%FQm_}apRR`1>#!y{b|t2)IZ|FG%G8~#%dPmH-jS%(2~l7O-{SxLi(kIu+FrNd zzCoN(M6coQydEeFi%ywy+}XG^bKxgmw$(TKE$dDSB!7#kY9wYP@8V!xzD7*S+1%C$ zx;c^;Yj7(~UwQ2Mk0(R3gsa}|F#&0ponlN<`QjNYF+^6hB3FJn_Nm=)Mq_>#(xqz( zwkzJNC4ui)b87K-=7OU4V;T|?D_ri@$$7G{wN~G;qn;B1gX=Q$>ErjWQ>(QT5kvSG zkJEwZAJ~Hjt80tSo*ue~%@ma^5y2?96WM#-HHYJ@E8Z)X7@Kv^%zXq1U%#)rjAEqo zhiR!~UI6!HgZe&A37+Dxf59Nn%$z^v@96SOcH<&g=5V1{q`2W&W9iJD9g42U!=FPW zt3>3m1!d4{&^a{`SzIu;nv6{iTQ=5PURcayd-I|h3f8GOZ;Xg)F^DB+_{Nd$)i#W4f^qO`3brf1`Z>q+G zx0Z%J;pKT3Et0!OoW=B22q3e_tZDONqPA2Ge4D4Np^K82+yyM9eVi>_+JY({gQ=ee zp>=b7BnMNH(5!dv(Z8OliF4Pg8Fz(StJ$hfD^Bje;;G`9Q`H(mm8Jo+u z+jB>nNxub2wbzZdR3VLv(e3MAVdpkSU!t zuq2g;28iZQ*GGf)@-FSG_XRv_JK*ucizVzo`U;nfkUy~#v11d>Q?VZ0LpLnbSV|q? zKA;6NK=Z%d-_EwOZb^jS8|DUw+H$?i71X}8N~Xe08t&%^Gl^2L>o(ync>R*r_NVnR zL_n{qFO29=qBwGb5Gb-@s2o`+{*{x={vB-zJ&UT;G<1+fc7#XhHn)RC zQf?$YNfYs2+r3Q>ts+@>o1IN(fn#^^Dst_Y%D`Tl zfreG$xHJ64k|?iclQ?_ncCRBp@VXQ$2n=gSyc(8n@k72Rm$w*Ie2^pHkByo% zwjq&DPxdJ}20GRW=&T_LeD0Uis9eA9UNm**uasFO64{vQ>%J_SSrGb88rzt)PcYZL}d^=jsZTzi7P=UbXS!gxBT5F&_G&Ce)p7J#zY< z=lyZi?jv}R3zonz@myv)scyqAueO@hrCcpUW|)>T#eY|O>lkt1sCQ^HpXcxWaJP(j zIBZ8L2>Z@vGD#$kit*D(Z)~d-Qg$zj=rb~k8#jBlE}}KJF;Pow?e?+y;_S5bpEqKDq3+-dQ)Y{hYC91>NlCi|;~X zu1`;EIUwj0SJUK}?#-Tj9SE@?M}3k9m{I*Le3^SrrTBtmW; zz!>JttosAYyJw5PmymmNZhmTr7>!nij4M5{zBsrkxsO%iR{49B04ee=$Ny63D z&k@3=^Lb-;GH=P=_xkq_H;}mX$pa?e?{ zV1@hk)@0`~_sM+StTNKtMph^H6F%23tot4BWglSNnED9q z?{#0fvnID2_A?95t$}wl!DKme{k?a>@|1S(ZrnFs+I%Yi`KW44DcIE0$1QuD_t?8v z=G$Mz#`x4q)lw~n@%!+sx}D=uUQ=q}&u&6s--A<*4e^cCX1LtTS{4`*^CY-5G|V*A zw&KS0Q%41z8B0e6qr?UM^{hg7PiKm;>4&g5Nq9ekZ z6@VdJM<%pfyG$gS>(?D%f1x*gP_jLM{Y?Yt~6R}1MeaivNjTGL4)mX1IDl|3?%+91K))N%Pz2&j=XxY^r8 zzO|^r=id0TsFM_?`OLW&#ZF$t91C9SO)7P~j0Z*rzmO1a4b!#>n56b-eDO$L5@sXq z6^7^s9GvdPe2p^~cJ!a!EsqR>{pV<~OZongVV|ZJxNrl>;og$?%p0 z$gBv{-3bZ@1&!j*oa{9!6)T>(hkS&6!z(j=^E2M}fm4(|hnm~0ynh4@C+Nr7jPv`FYAA~{Akkkd@G8glB%T!q2GNF?H~k1qLpi>cQL_$i;A9Xsqq z=~~~3Tlc(?-Cz8Sj~QnGrH~AU2f;0yisX;2YHVAQ47)6Gr{L^m^%0IAI>H@!2-e z)#edYTa-w!r{XtEc)x#msID*Ir1w?~ild}TN$@~!?n@{h)v zzianSx>ou!v2zIa>>?{pI@BkQO&`gjF z8EgmL5s1CehiF+K*fBD1*e#(tuKT@Y>Q7L7KBfh|aO#ei3k2fx-&_VU^TpTY=2Yi@ zKM7q>Gk6JwoDz<2u zXGZ{2*~bejtFY!NKuYG>~O4j$$rC&Op=46a9I~DLqRiCcc99BUr zoYf%|7$#BTM>C^?Sh+Fdjzg}_*o#qS_J67Q9AJ7fw9jMA*vujn2MKZ&W&KdA*kygy zS`v#Y2C=3oJ-=>(fv#&YHR6Yf*2>@y?2^=GQObR|`9Zcv{Jl%fl4>4Aj$z|J3 z3mSocE`RA61&^~p;w3erHY3;tUYcuilzpEl(2s5IX5n676L(RM#7fKV(7SI!mPpzu#(Ds|WnEg)DA9=%MOBKN}VGmMdS~$;up8SR3CzF%&yH z|5_v)S!HQV%pod(ustc+z^EK{taIB3~y#!UCK!w%o$1JAc=hxpSB zE#rdmDVsSSadh(UIO5jFGU1W&HD5%Uv+3QhyNulWndMyAMoqSeC78|Qi-AeY74Z^0 z#9(C@aXfMg1bg+_cx`dkzLtnh7+;v!$t%fHU9TZ#&1omz{|BL1;cBVs(X87{<@SsK z0r)`kqnJlh315U}4oSyp9)F!NIws+?kOI+Q$2YDAE=z$+dmD^*|9Nu5sBN1HzfwVeqiUh zVv6WBe7Ty_nX&LSP;;Cl=f&B9LC2TS!Jw>vVb zElK2;raXPdjARy?w7Naxv|+Y?c{&p(0ss@;g&SU#tIP|eV3m7>7^o=Ti%CR$weyZY@uvG1xaJ=M z&~aJt7Xw+!o`AwvEiD_8SmQriZ$4q5Dh9TtC1mdggDX6^{*SpCfVl{y9R}vor_#N; z?sKBrRic`KH$lpv5jGEjGSSWNSqu75>wnP~=_jDFlRr(&qFK%>l$#@D( zvw!&kV2WfC0UG~13@(-h#P{FfeKpMjBk0Hf4wHZ1r+_iksX+fvg8xA7Q}}A(F4@); z|NnD1MRs)6ss4i3FgF3i-se7mjQ)!gr|8{EF3ZSETfO|I8kP*uf2I2m748f}9$wnL zKm71MHaguu$DcqxA_}Me|MyGEG#0jR&vx9GP(deQ7 rPXeDZ?9(&4{3-^OQkdM@YQi}pot<8G$^AJS67Z9gQkJY0Hwpe9Q(A!8 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/loader_device_surface_chain.png b/local/recipes/libs/vulkan-loader/source/docs/images/loader_device_surface_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4ccbfb56e2ba2ce268a770a3181b63c8e9b79b GIT binary patch literal 55094 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≶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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/loader_layer_order.png b/local/recipes/libs/vulkan-loader/source/docs/images/loader_layer_order.png new file mode 100644 index 0000000000000000000000000000000000000000..46cdbd155c7e0cd23c7867caeaf41b4d11f12384 GIT binary patch literal 101536 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 z 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + vkFunction4 + + + + vkFunction3 + + + + vkFunction2 + + + + vkFunction1 + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTrampoline + + vkFunction4 + + + + vkFunction3 + + + + vkFunction2 + + + + vkFunction1 + + + + + Layer A + + vkFunction4 + + + + vkFunction2 + + + + + Layer B + + vkFunction2 + + + + vkFunction1 + + + + + Driver + vkFunction4 + vkFunction3 + vkFunction2 + vkFunction1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/function_instance_chain.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/function_instance_chain.svg new file mode 100755 index 0000000000..abe0aff44c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/function_instance_chain.svg @@ -0,0 +1,3485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + vkFunction4 + + + + vkFunction3 + + + + vkFunction2 + + + + vkFunction1 + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTrampoline + + vkFunction4 + + + + vkFunction3 + + + + vkFunction2 + + + + vkFunction1 + + + + + Layer A + + vkFunction4 + + + + vkFunction2 + + + + + Layer B + + vkFunction2 + + + + vkFunction1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTerminator + + vkFunction4 + + + + vkFunction3 + + + + vkFunction2 + + + + vkFunction1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + vkFunction4 + vkFunction3 + vkFunction2 + vkFunction1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + vkFunction4 + vkFunction3 + vkFunction2 + vkFunction1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/high_level_loader.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/high_level_loader.svg new file mode 100755 index 0000000000..86b79fab8d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/high_level_loader.svg @@ -0,0 +1,2920 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Loader + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical Device + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical Device + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical Device + + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + OverrideLayer + + + + + + + + + + + + + + + + + + + + + + + + + + + EnvironmentEnabledExplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + + + ApplicationEnabledExplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + + ImplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + + + Layer SettingsFile + + + + + + + + + + + + + + + + + + + + + + + + + + + Configurator + + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical Device + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_app.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_app.svg new file mode 100755 index 0000000000..3beedece1d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_app.svg @@ -0,0 +1,1030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + Layer A + + + + + + + + + + + + + + + + + + + + + + + + + Layer B + + + + + + + + + + + + + + + + + + + + + + + + + Layer C + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_loader.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_loader.svg new file mode 100755 index 0000000000..216826e7d1 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_chain_loader.svg @@ -0,0 +1,1084 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + Layer A + + + + + + + + + + + + + + + + + + + + + + + + + Layer B + + + + + + + + + + + + + + + + + + + + + + + + + Layer C + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTrampoline + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_surface_chain.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_surface_chain.svg new file mode 100644 index 0000000000..152fa391e6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_device_surface_chain.svg @@ -0,0 +1,1240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTerminator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + Layer A + + + + + + + + + + + + + + + + + + + + + + + + + Layer B + + + + + + + + + + + + + + + + + + + + + + + + + Layer C + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTrampoline + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_instance_chain.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_instance_chain.svg new file mode 100755 index 0000000000..a65dd123f8 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_instance_chain.svg @@ -0,0 +1,1482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTerminator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + Layer A + + + + + + + + + + + + + + + + + + + + + + + + + Layer B + + + + + + + + + + + + + + + + + + + + + + + + + Layer C + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTrampoline + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order.svg new file mode 100755 index 0000000000..e6cafac179 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order.svg @@ -0,0 +1,1767 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + Loader + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + + + EnvironmentEnabledExplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + + + ApplicationEnabledExplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + + ImplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order_calls.svg b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order_calls.svg new file mode 100644 index 0000000000..51e2e8e030 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/docs/images/svgs/loader_layer_order_calls.svg @@ -0,0 +1,1661 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + Driver + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTerminator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + ImplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + EnvironmentEnabledExplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + ApplicationEnabledExplicitLayers + + + + + + + + + + + + + + + + + + + + + + + + + LoaderTrampoline + + + + + + + + + + + + + + + + + + + + + + + + + + OverrideLayer + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/recipes/libs/vulkan-loader/source/loader/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/loader/CMakeLists.txt new file mode 100644 index 0000000000..1b51c83098 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/CMakeLists.txt @@ -0,0 +1,568 @@ +# ~~~ +# Copyright (c) 2014-2023 The Khronos Group Inc. +# Copyright (c) 2014-2023 Valve Corporation +# Copyright (c) 2014-2023 LunarG, Inc. +# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2023 RasterGrid Kft. +# +# 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. +# ~~~ +include(CheckIncludeFile) + +add_library(loader_specific_options INTERFACE) +target_link_libraries(loader_specific_options INTERFACE loader_common_options Vulkan::Headers) +target_include_directories(loader_specific_options INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/generated ${CMAKE_CURRENT_BINARY_DIR}) + +if(WIN32) + + if(ENABLE_WIN10_ONECORE) + # Note: When linking your app or driver to OneCore.lib, be sure to remove any links to non-umbrella libs (such as + # kernel32.lib). + set(CMAKE_C_STANDARD_LIBRARIES " ") # space is intentional + endif() + + # ~~~ + # Only generate the loader.rc file with CMake if BUILD_DLL_VERSIONINFO was set. + # This feature is for the Vulkan Runtime build + # Otherwise rely on the checked in loader.rc from the python script + # ~~~ + if (NOT "$CACHE{BUILD_DLL_VERSIONINFO}" STREQUAL "") + string(TIMESTAMP CURRENT_YEAR "%Y") + set(LOADER_CUR_COPYRIGHT_YEAR "${CURRENT_YEAR}") + set(LOADER_RC_VERSION "$CACHE{BUILD_DLL_VERSIONINFO}") + set(LOADER_VER_FILE_VERSION_STR "\"${LOADER_RC_VERSION}\"") + set(LOADER_VER_FILE_DESCRIPTION_STR "\"Vulkan Loader\"") + + # RC file wants the value of FILEVERSION to separated by commas + string(REPLACE "." ", " LOADER_VER_FILE_VERSION "${LOADER_RC_VERSION}") + + # Configure the file to include the versioning info + # Place it in the build directory - the GN build will use the checked in file + configure_file(loader.rc.in ${CMAKE_CURRENT_BINARY_DIR}/loader.rc) + endif() +else() + # Used to make alloca() and secure_getenv() available + target_compile_definitions(loader_specific_options INTERFACE _GNU_SOURCE) + if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + target_compile_definitions(loader_specific_options INTERFACE __BSD_VISIBLE=1) + endif() + check_include_file("alloca.h" HAVE_ALLOCA_H) + if(HAVE_ALLOCA_H) + target_compile_definitions(loader_specific_options INTERFACE HAVE_ALLOCA_H) + endif() + + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) +endif() + +set(NORMAL_LOADER_SRCS + allocation.c + allocation.h + cJSON.c + cJSON.h + debug_utils.c + debug_utils.h + extension_manual.c + extension_manual.h + loader_environment.c + loader_environment.h + gpa_helper.c + gpa_helper.h + loader.c + loader.h + log.c + log.h + loader_json.c + loader_json.h + settings.c + settings.h + terminator.c + trampoline.c + unknown_function_handling.c + unknown_function_handling.h + wsi.c + wsi.h + ) + +if(WIN32) + list(APPEND NORMAL_LOADER_SRCS loader_windows.c dirent_on_windows.c) +elseif(CMAKE_SYSTEM_NAME MATCHES "Linux|BSD|DragonFly|GNU") + list(APPEND NORMAL_LOADER_SRCS loader_linux.c) + target_compile_definitions(loader_specific_options INTERFACE LOADER_ENABLE_LINUX_SORT) +endif() + +if ("${CMAKE_OSX_ARCHITECTURES}" MATCHES ";") + set(APPLE_UNIVERSAL_BINARY ON) + + # When building a universal binary we cannot enable USE_GAS + # Since USE_GAS assumes only 1 architecture (arm64, x64, etc). + set(USE_GAS OFF) +endif() + +set(OPT_LOADER_SRCS dev_ext_trampoline.c phys_dev_ext.c) + +set(ASM_FAILURE_MSG "Support for unknown physical device and device functions is disabled due to missing the required assembly support code. \ +To support unknown functions, assembly must be added for the platform.\n") +set(ARMASM_CMAKE_FAILURE_MSG "Support for unknown physical device and device functions is disabled due to the CMake version ${CMAKE_VERSION} \ +being older than 3.26. Please update CMake to version 3.26 or newer.\n") + +# Check for assembler support +if(WIN32 AND NOT USE_GAS) + option(USE_MASM "Use MASM" ON) + if(USE_MASM AND MINGW) + find_program(JWASM_FOUND NAMES jwasm uasm) + if (JWASM_FOUND) + set(CMAKE_ASM_MASM_COMPILER ${JWASM_FOUND}) + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine OUTPUT_VARIABLE COMPILER_VERSION_OUTPUT) + if (COMPILER_VERSION_OUTPUT) + if (COMPILER_VERSION_OUTPUT MATCHES "x86_64") + set(JWASM_FLAGS -win64) + else() + # jwasm requires setting the cpu to at least 386 for setting a flat model + set(JWASM_FLAGS -3 -coff) + endif() + endif() + endif() + endif() + if (USE_MASM) + if(SYSTEM_PROCESSOR MATCHES "arm") + if(CMAKE_VERSION VERSION_LESS "3.26.0") + set(ASM_FAILURE_MSG ${ARMASM_CMAKE_FAILURE_MSG}) + else() + enable_language(ASM_MARMASM) + set(LOADER_ASM_DIALECT "MARMASM") + endif() + else() + enable_language(ASM_MASM) + set(LOADER_ASM_DIALECT "MASM") + endif() + endif() + + # Test if the detected compiler actually works. + # Unfortunately, CMake's detection of ASM_MASM is not reliable, so we need to do this ourselves. + if(SYSTEM_PROCESSOR MATCHES "arm") + if (CMAKE_SIZEOF_VOID_P EQUAL 4) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/masm_check.asm [=[ +test_func FUNCTION + mov r0, #0 + bx lr + ENDFUNC + END +]=]) + else() + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/masm_check.asm [=[ +test_func FUNCTION + mov x1, 26 + ldr x0, [x0, x1] + ENDFUNC + END +]=]) + endif() + else() + if (CMAKE_SIZEOF_VOID_P EQUAL 4) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/masm_check.asm [=[ +.model flat +.code +extrn _start:near + xor eax, eax + ret +end +]=]) + else() + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/masm_check.asm [=[ +.code +extrn start:near + xor rax, rax + ret +end +]=]) + endif() + endif () + + if(MINGW) + set(CMAKE_ASM_MASM_FLAGS ${CMAKE_ASM_MASM_FLAGS} ${JWASM_FLAGS}) + set(CMAKE_ASM_MARMASM_FLAGS ${CMAKE_ASM_MARMASM_FLAGS} ${JWASM_FLAGS}) + elseif(NOT CMAKE_CL_64 AND NOT JWASM_FOUND AND CMAKE_SIZEOF_VOID_P EQUAL 4) + set(CMAKE_ASM_MASM_FLAGS ${CMAKE_ASM_MASM_FLAGS} /safeseh) # /safeseh is only needed in x86 + endif() + + # try_compile does not work here due to the same reasons as static above. + if(SYSTEM_PROCESSOR MATCHES "arm") + execute_process(COMMAND ${CMAKE_ASM_MARMASM_COMPILER} ${CMAKE_ASM_MARMASM_FLAGS} ${CMAKE_CURRENT_BINARY_DIR}/masm_check.asm + RESULT_VARIABLE ASM_COMPILER_WORKS + OUTPUT_QUIET ERROR_QUIET) + else() + execute_process(COMMAND ${CMAKE_ASM_MASM_COMPILER} ${CMAKE_ASM_MASM_FLAGS} -c -Fo ${CMAKE_CURRENT_BINARY_DIR}/masm_check.obj ${CMAKE_CURRENT_BINARY_DIR}/masm_check.asm + RESULT_VARIABLE ASM_COMPILER_WORKS + OUTPUT_QUIET ERROR_QUIET) + endif() + + # Convert the return code to a boolean + if(ASM_COMPILER_WORKS EQUAL 0) + set(ASM_COMPILER_WORKS true) + else() + set(ASM_COMPILER_WORKS false) + endif() + + if(ASM_COMPILER_WORKS) + add_executable(asm_offset asm_offset.c) + target_link_libraries(asm_offset PRIVATE loader_specific_options) + # If am emulator is provided (Like Wine), or running on native, run asm_offset to generate gen_defines.asm + if (CMAKE_CROSSCOMPILING_EMULATOR OR NOT CMAKE_CROSSCOMPILING) + add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset ${LOADER_ASM_DIALECT}) + else() + # Forces compiler to write the intermediate asm file, needed so that we can get sizeof/offset of info out of it. + target_compile_options(asm_offset PRIVATE "/Fa$/asm_offset.asm" /FA) + # Force off optimization so that the output assembly includes all the necessary info - optimizer would get rid of it otherwise. + target_compile_options(asm_offset PRIVATE /Od) + + find_package(Python3 REQUIRED QUIET) + # Run parse_asm_values.py on asm_offset's assembly file to generate the gen_defines.asm, which the asm code depends on + add_custom_command(TARGET asm_offset POST_BUILD + COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/scripts/parse_asm_values.py "${CMAKE_CURRENT_BINARY_DIR}/gen_defines.asm" + "$/asm_offset.asm" "${LOADER_ASM_DIALECT}" "${CMAKE_C_COMPILER_ID}" "${SYSTEM_PROCESSOR}" + BYPRODUCTS gen_defines.asm + ) + endif() + add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm) + set_target_properties(loader_asm_gen_files PROPERTIES FOLDER ${LOADER_HELPER_FOLDER}) + + if(SYSTEM_PROCESSOR MATCHES "arm") + list(APPEND OPT_LOADER_SRCS unknown_ext_chain_marmasm.asm) + else() + list(APPEND OPT_LOADER_SRCS unknown_ext_chain_masm.asm) + endif() + set(UNKNOWN_FUNCTIONS_SUPPORTED ON) + else() + message(WARNING "Could not find working ${} assembler\n${ASM_FAILURE_MSG}") + endif() +elseif(UNIX OR MINGW OR (WIN32 AND USE_GAS)) # i.e.: Linux & Apple & MinGW & Windows using Clang-CL + + option(USE_GAS "Use GAS" ON) + if(USE_GAS) + if (APPLE_UNIVERSAL_BINARY) + message(FATAL_ERROR "USE_GAS cannot be used when compiling a universal binary!") + endif() + + enable_language(ASM) + + set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}") + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + + if(WIN32 AND ${SYSTEM_PROCESSOR} MATCHES "arm64") + # In this particular case, we are using the same approach as for NASM + # This specifically avoids CMake issue #18889 + execute_process(COMMAND ${CMAKE_ASM_COMPILER} ${CMAKE_ASM_FLAGS} -c -o ${CMAKE_CURRENT_BINARY_DIR}/asm_test_aarch64.obj ${CMAKE_CURRENT_SOURCE_DIR}/asm_test_aarch64.S + RESULT_VARIABLE WIN_ARM64_ASSEMBLER_WORKS + OUTPUT_QUIET ERROR_QUIET) + if(WIN_ARM64_ASSEMBLER_WORKS EQUAL 0) + set(ASSEMBLER_WORKS true) + endif() + + if(ASSEMBLER_WORKS) + list(APPEND OPT_LOADER_SRCS unknown_ext_chain_gas_aarch.S) + endif() + elseif (${SYSTEM_PROCESSOR} MATCHES "aarch64|arm64") + try_compile(ASSEMBLER_WORKS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/asm_test_aarch64.S OUTPUT_VARIABLE TRY_COMPILE_OUTPUT) + if(ASSEMBLER_WORKS) + list(APPEND OPT_LOADER_SRCS unknown_ext_chain_gas_aarch.S) + endif() + elseif (${SYSTEM_PROCESSOR} MATCHES "aarch32|armhf|armv7l|armv8l") + try_compile(ASSEMBLER_WORKS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/asm_test_aarch32.S OUTPUT_VARIABLE TRY_COMPILE_OUTPUT) + if(ASSEMBLER_WORKS) + list(APPEND OPT_LOADER_SRCS unknown_ext_chain_gas_aarch.S) + endif() + # Covers x86_64, amd64, x86, i386, i686, I386, I686 + elseif(${SYSTEM_PROCESSOR} MATCHES "amd64|86") + check_include_file("cet.h" HAVE_CET_H) + if(HAVE_CET_H) + target_compile_definitions(loader_specific_options INTERFACE HAVE_CET_H) + endif() + + try_compile(ASSEMBLER_WORKS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/asm_test_x86.S) + if(ASSEMBLER_WORKS) + list(APPEND OPT_LOADER_SRCS unknown_ext_chain_gas_x86.S) + endif() + endif() + endif() + + # When compiling for x86 on x64, we can't use CMAKE_SYSTEM_PROCESSOR to determine which architecture to use, + # Instead, check the size of void* and if its 4, set ASM_OFFSET_SYSTEM_PROCESSOR to x86 if we aren't on arm + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + set(ASM_OFFSET_SYSTEM_PROCESSOR ${SYSTEM_PROCESSOR}) # x86_64 or aarch64/arm64 + string(REPLACE amd64 x86_64 ASM_OFFSET_SYSTEM_PROCESSOR "${ASM_OFFSET_SYSTEM_PROCESSOR}") + else() + if(${SYSTEM_PROCESSOR} MATCHES "86") + set(ASM_OFFSET_SYSTEM_PROCESSOR "x86") + else() + set(ASM_OFFSET_SYSTEM_PROCESSOR ${SYSTEM_PROCESSOR}) + endif() + endif() + + if(ASSEMBLER_WORKS) + add_executable(asm_offset asm_offset.c) + target_link_libraries(asm_offset loader_specific_options) + # If not cross compiling, run asm_offset to generage gen_defines.asm + if (NOT CMAKE_CROSSCOMPILING) + add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset GAS) + else() + # Forces compiler to write the intermediate asm file, needed so that we can get sizeof/offset of info out of it. + # If with lto, compiler will output IR instead of asm, so we need to explicitly disable lto here. + if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + target_compile_options(asm_offset PRIVATE -save-temps=obj -fno-lto) + elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang") + target_compile_options(asm_offset PRIVATE -save-temps=obj -fno-lto -fno-whole-program-vtables -fno-virtual-function-elimination) + else() + target_compile_options(asm_offset PRIVATE -save-temps=obj) + endif() + if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + set(ASM_OFFSET_EXECUTABLE_LOCATION "$/gen_defines.asm") + set(ASM_OFFSET_INTERMEDIATE_LOCATION "$/CMakeFiles/asm_offset.dir/asm_offset.c.s") + elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(ASM_OFFSET_EXECUTABLE_LOCATION "$/gen_defines.asm") + set(ASM_OFFSET_INTERMEDIATE_LOCATION "$/CMakeFiles/asm_offset.dir/asm_offset.s") + elseif(CMAKE_C_COMPILER_ID STREQUAL "AppleClang") + # Need to use the current binary dir since the asm_offset.s file is in that folder rather than the bundle + set(ASM_OFFSET_EXECUTABLE_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/gen_defines.asm") + set(ASM_OFFSET_INTERMEDIATE_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/asm_offset.dir/asm_offset.s") + else() + message(FATAL_ERROR "C_COMPILER_ID not supported!") + endif() + message(STATUS "CMAKE_CROSSCOMPILING FALSE") + + find_package(Python3 REQUIRED QUIET) + # Run parse_asm_values.py on asm_offset's assembly file to generate the gen_defines.asm, which the asm code depends on + add_custom_command(TARGET asm_offset POST_BUILD + COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/scripts/parse_asm_values.py "${ASM_OFFSET_EXECUTABLE_LOCATION}" + "${ASM_OFFSET_INTERMEDIATE_LOCATION}" "GAS" "${CMAKE_C_COMPILER_ID}" "${ASM_OFFSET_SYSTEM_PROCESSOR}" + BYPRODUCTS gen_defines.asm + ) + endif() + add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm) + + if (APPLE) + set(MODIFY_UNKNOWN_FUNCTION_DECLS ON) + endif() + set(UNKNOWN_FUNCTIONS_SUPPORTED ON) + else() + if(USE_GAS) + message(WARNING "Could not find working ${ASM_OFFSET_SYSTEM_PROCESSOR} GAS assembler\n${ASM_FAILURE_MSG}") + else() + message(WARNING "Assembly sources have been disabled\n${ASM_FAILURE_MSG}") + endif() + endif() +endif() + +if(UNKNOWN_FUNCTIONS_SUPPORTED) + list(APPEND NORMAL_LOADER_SRCS ${OPT_LOADER_SRCS}) +endif() + +if(WIN32) + # If BUILD_DLL_VERSIONINFO was set, use the loader.rc in the build dir, otherwise use the checked in file + set(RC_FILE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/loader.rc) + if (NOT "$CACHE{BUILD_DLL_VERSIONINFO}" STREQUAL "") + set(RC_FILE_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/loader.rc) + endif() + + add_library(vulkan + SHARED + ${NORMAL_LOADER_SRCS} + ${CMAKE_CURRENT_SOURCE_DIR}/${API_TYPE}-1.def + ${RC_FILE_LOCATION}) + + target_link_libraries(vulkan PRIVATE loader_specific_options) + + # when adding the suffix the import and runtime library names must be consistent + # mingw: libvulkan-1.dll.a / vulkan-1.dll + # msvc: vulkan-1.lib / vulkan-1.dll + set_target_properties(vulkan + PROPERTIES + OUTPUT_NAME ${API_TYPE}-1) + if(MINGW) + # generate the same DLL with mingw + set_target_properties(vulkan + PROPERTIES + PREFIX "") + endif() + + if(MSVC AND ENABLE_WIN10_ONECORE) + target_link_libraries(vulkan PRIVATE OneCoreUAP.lib LIBCMT.LIB LIBCMTD.LIB LIBVCRUNTIME.LIB LIBUCRT.LIB) + set_target_properties(vulkan PROPERTIES LINK_FLAGS "/NODEFAULTLIB") + else() + target_link_libraries(vulkan PRIVATE cfgmgr32) + endif() + +else() + if(APPLE) + option(APPLE_STATIC_LOADER "Build a loader that can be statically linked. Intended for Chromium usage/testing.") + mark_as_advanced(APPLE_STATIC_LOADER) + endif() + + if(APPLE_STATIC_LOADER) + add_library(vulkan STATIC) + target_compile_definitions(vulkan PRIVATE APPLE_STATIC_LOADER) + + message(WARNING "The APPLE_STATIC_LOADER option has been set. Note that this will only work on MacOS and is not supported " + "or tested as part of the loader. Use it at your own risk.") + else() + add_library(vulkan SHARED) + endif() + + target_sources(vulkan PRIVATE ${NORMAL_LOADER_SRCS}) + + set_target_properties(vulkan PROPERTIES + SOVERSION "1" + VERSION "${VULKAN_LOADER_VERSION}" + ) + + target_link_libraries(vulkan PRIVATE ${CMAKE_DL_LIBS} m Threads::Threads) + + set_target_properties(vulkan PROPERTIES OUTPUT_NAME ${API_TYPE}) + + if (LOADER_ENABLE_ADDRESS_SANITIZER) + target_compile_options(vulkan PUBLIC -fsanitize=address,undefined) + target_link_options(vulkan PUBLIC -fsanitize=address,undefined) + endif() + if (LOADER_ENABLE_THREAD_SANITIZER) + target_compile_options(vulkan PUBLIC -fsanitize=thread) + target_link_options(vulkan PUBLIC -fsanitize=thread) + endif() + + if(APPLE) + find_library(COREFOUNDATION_LIBRARY NAMES CoreFoundation) + target_link_libraries(vulkan PRIVATE "-framework CoreFoundation") + + # Build vulkan.framework + # Use GLOB_RECURSE to find all the header files and populate the vulkan.framework headers with them + # Use CONFIGURE_DEPENDS to ensure that if the header files are updated, this list is also updated + get_target_property(VulkanHeaders_INCLUDE_DIRS Vulkan::Headers INTERFACE_INCLUDE_DIRECTORIES) + file(GLOB_RECURSE CONFIGURE_DEPENDS FRAMEWORK_HEADERS ${VulkanHeaders_INCLUDE_DIRS}) + + add_library(vulkan-framework SHARED) + target_sources(vulkan-framework PRIVATE ${NORMAL_LOADER_SRCS} ${FRAMEWORK_HEADERS}) + + if (UNKNOWN_FUNCTIONS_SUPPORTED) + add_dependencies(vulkan-framework loader_asm_gen_files) + endif() + + target_link_libraries(vulkan-framework ${CMAKE_DL_LIBS} Threads::Threads -lm "-framework CoreFoundation") + target_link_libraries(vulkan-framework loader_specific_options) + + if (MODIFY_UNKNOWN_FUNCTION_DECLS) + # Modifies the names of functions as they appearin the assembly code so that the + # unknown function handling will work + target_compile_definitions(vulkan PRIVATE MODIFY_UNKNOWN_FUNCTION_DECLS) + target_compile_definitions(vulkan-framework PRIVATE MODIFY_UNKNOWN_FUNCTION_DECLS) + endif() + + # The FRAMEWORK_VERSION needs to be "A" here so that Xcode code-signing works when a user adds their framework to an Xcode + # project and does "Sign on Copy". It would have been nicer to use "1" to denote Vulkan 1. Although Apple docs say that a + # framework version does not have to be "A", this part of the Apple toolchain expects it. + # https://forums.developer.apple.com/thread/65963 + + set_target_properties(vulkan-framework PROPERTIES + OUTPUT_NAME vulkan + FRAMEWORK TRUE + FRAMEWORK_VERSION A + VERSION "${VULKAN_LOADER_VERSION}" + MACOSX_FRAMEWORK_BUNDLE_VERSION "${VULKAN_LOADER_VERSION}" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${VULKAN_LOADER_VERSION}" + SOVERSION "1.0.0" + MACOSX_FRAMEWORK_IDENTIFIER com.lunarg.vulkanFramework + PUBLIC_HEADER "${FRAMEWORK_HEADERS}" + ) + + # Workaround linker warning: https://github.com/KhronosGroup/Vulkan-Loader/issues/1332 + # + # MACHO_CURRENT_VERSION specifically applies to the -current_version linker option which is the + # linker warning we are trying to address. + set(APPLE_VULKAN_LOADER_VERSION "${VULKAN_LOADER_VERSION_MAJOR}.${VULKAN_LOADER_VERSION_MINOR}.0") + set_target_properties(vulkan PROPERTIES MACHO_CURRENT_VERSION "${APPLE_VULKAN_LOADER_VERSION}") + set_target_properties(vulkan-framework PROPERTIES MACHO_CURRENT_VERSION "${APPLE_VULKAN_LOADER_VERSION}") + + install(TARGETS vulkan-framework + PUBLIC_HEADER DESTINATION vulkan + FRAMEWORK DESTINATION loader + ) + endif() +endif() + +option(LOADER_USE_UNSAFE_FILE_SEARCH "Allows the loader to search in unsafe locations") +if (LOADER_USE_UNSAFE_FILE_SEARCH) + target_compile_definitions(vulkan PRIVATE LOADER_USE_UNSAFE_FILE_SEARCH) +endif() + +# common attributes of the vulkan library +target_link_libraries(vulkan PRIVATE loader_specific_options) + +target_link_libraries(vulkan PRIVATE Vulkan::Headers) +add_library(Vulkan::Loader ALIAS vulkan) + +if (UNKNOWN_FUNCTIONS_SUPPORTED) + target_compile_definitions(vulkan PRIVATE UNKNOWN_FUNCTIONS_SUPPORTED) + add_dependencies(vulkan loader_asm_gen_files) +endif() + +if (BUILD_TESTS) + target_compile_definitions(vulkan PRIVATE SHOULD_EXPORT_TEST_FUNCTIONS) +endif() + +if (APPLE_STATIC_LOADER) + # TLDR: This feature only exists at the request of Google for Chromium. No other project should use this! + message(NOTICE "Apple STATIC lib: it will be built but not installed, and vulkan.pc and VulkanLoaderConfig.cmake won't be generated!") + return() +endif() + +# Generate CMake Configuration File (IE: VulkanLoaderConfig.cmake) +install(TARGETS vulkan EXPORT VulkanLoaderConfig) +set_target_properties(vulkan PROPERTIES EXPORT_NAME "Loader") +install(EXPORT VulkanLoaderConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VulkanLoader NAMESPACE Vulkan::) + +# Generate CMake Version File (IE: VulkanLoaderConfigVersion.cmake) +include(CMakePackageConfigHelpers) + +set(version_config "${CMAKE_CURRENT_BINARY_DIR}/generated/VulkanLoaderConfigVersion.cmake") +write_basic_package_version_file("${version_config}" COMPATIBILITY SameMajorVersion) +install(FILES "${version_config}" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VulkanLoader) + +# Generate PkgConfig File (IE: vulkan.pc) +# NOTE: Hopefully in the future CMake can generate .pc files natively. +# https://gitlab.kitware.com/cmake/cmake/-/issues/22621 +find_package(PkgConfig) +if (PKG_CONFIG_FOUND) + if(WIN32) + if(MINGW) + set(VULKAN_LIB_SUFFIX "-1.dll") + else() + set(VULKAN_LIB_SUFFIX "-1") + endif() + endif() + + # BUG: The following code will NOT work well with `cmake --install ... --prefix

` + # due to this code relying on CMAKE_INSTALL_PREFIX being defined at configure time. + # + # NOTE: vulkan.pc essentially cover both Vulkan-Loader and Vulkan-Headers for legacy reasons. + if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "") + set(CMAKE_INSTALL_LIBDIR_PC ${CMAKE_INSTALL_FULL_LIBDIR}) + set(CMAKE_INSTALL_INCLUDEDIR_PC ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + else() + file(RELATIVE_PATH CMAKE_INSTALL_LIBDIR_PC ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_FULL_LIBDIR}) + file(RELATIVE_PATH CMAKE_INSTALL_INCLUDEDIR_PC ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + endif() + configure_file("vulkan.pc.in" "vulkan.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/vulkan.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" RENAME "${API_TYPE}.pc") +endif() + +if (CODE_COVERAGE) + target_code_coverage(vulkan AUTO ALL) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/loader/LoaderAndLayerInterface.md b/local/recipes/libs/vulkan-loader/source/loader/LoaderAndLayerInterface.md new file mode 100644 index 0000000000..3a3249cca4 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/LoaderAndLayerInterface.md @@ -0,0 +1,19 @@ + +[![Khronos Vulkan][1]][2] + +[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/" +[2]: https://www.khronos.org/vulkan/ + +# Architecture of the Vulkan Loader Interfaces +[![Creative Commons][3]][4] + + + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" + +## Attention + +This document has been renamed to +[LoaderInterfaceArchitecture.md](../docs/LoaderInterfaceArchitecture.md) and can be +found in the top-level docs folder of the Loader GitHub repo. +Please refer to that document going forward. diff --git a/local/recipes/libs/vulkan-loader/source/loader/README.md b/local/recipes/libs/vulkan-loader/source/loader/README.md new file mode 100644 index 0000000000..5f45bb7258 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/README.md @@ -0,0 +1,5 @@ +# Loader Specification and Interfaces +See the [LoaderInterfaceArchitecture.md](../docs/LoaderInterfaceArchitecture.md) for detailed documentation. + +# Building +Builds for Linux, Windows, and MacOS are supported via CMake. See top level BUILD.md file. diff --git a/local/recipes/libs/vulkan-loader/source/loader/adapters.h b/local/recipes/libs/vulkan-loader/source/loader/adapters.h new file mode 100644 index 0000000000..56480e108d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/adapters.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2019-2021 The Khronos Group Inc. + * Copyright (c) 2019-2021 Valve Corporation + * Copyright (c) 2019-2021 LunarG, 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. + * + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#pragma once + +typedef struct LoaderEnumAdapters2 { + ULONG adapter_count; + struct { + UINT handle; + LUID luid; + ULONG source_count; + BOOL present_move_regions_preferred; + } *adapters; +} LoaderEnumAdapters2; + +typedef _Check_return_ NTSTATUS(APIENTRY *PFN_LoaderEnumAdapters2)(const LoaderEnumAdapters2 *); + +typedef enum AdapterInfoType { + LOADER_QUERY_TYPE_REGISTRY = 48, +} AdapterInfoType; + +typedef struct LoaderQueryAdapterInfo { + UINT handle; + AdapterInfoType type; + VOID *private_data; + UINT private_data_size; +} LoaderQueryAdapterInfo; + +typedef _Check_return_ NTSTATUS(APIENTRY *PFN_LoaderQueryAdapterInfo)(const LoaderQueryAdapterInfo *); + +typedef enum LoaderQueryRegistryType { + LOADER_QUERY_REGISTRY_ADAPTER_KEY = 1, +} LoaderQueryRegistryType; + +typedef enum LoaderQueryRegistryStatus { + LOADER_QUERY_REGISTRY_STATUS_SUCCESS = 0, + LOADER_QUERY_REGISTRY_STATUS_BUFFER_OVERFLOW = 1, +} LoaderQueryRegistryStatus; + +typedef struct LoaderQueryRegistryFlags { + union { + struct { + UINT translate_path : 1; + UINT mutable_value : 1; + UINT reserved : 30; + }; + UINT value; + }; +} LoaderQueryRegistryFlags; + +typedef struct LoaderQueryRegistryInfo { + LoaderQueryRegistryType query_type; + LoaderQueryRegistryFlags query_flags; + WCHAR value_name[MAX_PATH]; + ULONG value_type; + ULONG physical_adapter_index; + ULONG output_value_size; + LoaderQueryRegistryStatus status; + union { + DWORD output_dword; + UINT64 output_qword; + WCHAR output_string[1]; + BYTE output_binary[1]; + }; +} LoaderQueryRegistryInfo; diff --git a/local/recipes/libs/vulkan-loader/source/loader/allocation.c b/local/recipes/libs/vulkan-loader/source/loader/allocation.c new file mode 100644 index 0000000000..4ad68027e5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/allocation.c @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2019-2021 The Khronos Group Inc. + * Copyright (c) 2019-2021 Valve Corporation + * Copyright (c) 2019-2021 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#include "allocation.h" + +#include + +// A debug option to disable allocators at compile time to investigate future issues. +#define DEBUG_DISABLE_APP_ALLOCATORS 0 + +void *loader_alloc(const VkAllocationCallbacks *pAllocator, size_t size, VkSystemAllocationScope allocation_scope) { + void *pMemory = NULL; +#if (DEBUG_DISABLE_APP_ALLOCATORS == 1) + { +#else + if (pAllocator && pAllocator->pfnAllocation) { + // These are internal structures, so it's best to align everything to + // the largest unit size which is the size of a uint64_t. + pMemory = pAllocator->pfnAllocation(pAllocator->pUserData, size, sizeof(uint64_t), allocation_scope); + } else { +#endif + pMemory = malloc(size); + } + + return pMemory; +} + +void *loader_calloc(const VkAllocationCallbacks *pAllocator, size_t size, VkSystemAllocationScope allocation_scope) { + void *pMemory = NULL; +#if (DEBUG_DISABLE_APP_ALLOCATORS == 1) + { +#else + if (pAllocator && pAllocator->pfnAllocation) { + // These are internal structures, so it's best to align everything to + // the largest unit size which is the size of a uint64_t. + pMemory = pAllocator->pfnAllocation(pAllocator->pUserData, size, sizeof(uint64_t), allocation_scope); + if (pMemory) { + memset(pMemory, 0, size); + } + } else { +#endif + pMemory = calloc(1, size); + } + + return pMemory; +} + +void loader_free(const VkAllocationCallbacks *pAllocator, void *pMemory) { + if (pMemory != NULL) { +#if (DEBUG_DISABLE_APP_ALLOCATORS == 1) + { +#else + if (pAllocator && pAllocator->pfnFree) { + pAllocator->pfnFree(pAllocator->pUserData, pMemory); + } else { +#endif + free(pMemory); + } + } +} + +void *loader_realloc(const VkAllocationCallbacks *pAllocator, void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope allocation_scope) { + void *pNewMem = NULL; + if (pMemory == NULL || orig_size == 0) { + pNewMem = loader_alloc(pAllocator, size, allocation_scope); + } else if (size == 0) { + loader_free(pAllocator, pMemory); +#if (DEBUG_DISABLE_APP_ALLOCATORS == 1) +#else + } else if (pAllocator && pAllocator->pfnReallocation) { + // These are internal structures, so it's best to align everything to + // the largest unit size which is the size of a uint64_t. + pNewMem = pAllocator->pfnReallocation(pAllocator->pUserData, pMemory, size, sizeof(uint64_t), allocation_scope); +#endif + } else { + pNewMem = realloc(pMemory, size); + // Clear out the newly allocated memory + if (size > orig_size) { + memset((uint8_t *)pNewMem + orig_size, 0, size - orig_size); + } + } + return pNewMem; +} + +void *loader_instance_heap_alloc(const struct loader_instance *inst, size_t size, VkSystemAllocationScope allocation_scope) { + return loader_alloc(inst ? &inst->alloc_callbacks : NULL, size, allocation_scope); +} + +void *loader_instance_heap_calloc(const struct loader_instance *inst, size_t size, VkSystemAllocationScope allocation_scope) { + return loader_calloc(inst ? &inst->alloc_callbacks : NULL, size, allocation_scope); +} + +void loader_instance_heap_free(const struct loader_instance *inst, void *pMemory) { + loader_free(inst ? &inst->alloc_callbacks : NULL, pMemory); +} +void *loader_instance_heap_realloc(const struct loader_instance *inst, void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope allocation_scope) { + return loader_realloc(inst ? &inst->alloc_callbacks : NULL, pMemory, orig_size, size, allocation_scope); +} + +void *loader_device_heap_alloc(const struct loader_device *dev, size_t size, VkSystemAllocationScope allocation_scope) { + return loader_alloc(dev ? &dev->alloc_callbacks : NULL, size, allocation_scope); +} + +void *loader_device_heap_calloc(const struct loader_device *dev, size_t size, VkSystemAllocationScope allocation_scope) { + return loader_calloc(dev ? &dev->alloc_callbacks : NULL, size, allocation_scope); +} + +void loader_device_heap_free(const struct loader_device *dev, void *pMemory) { + loader_free(dev ? &dev->alloc_callbacks : NULL, pMemory); +} +void *loader_device_heap_realloc(const struct loader_device *dev, void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope allocation_scope) { + return loader_realloc(dev ? &dev->alloc_callbacks : NULL, pMemory, orig_size, size, allocation_scope); +} + +void *loader_alloc_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *inst, size_t size, + VkSystemAllocationScope allocation_scope) { + return loader_alloc(NULL != pAllocator ? pAllocator : &inst->alloc_callbacks, size, allocation_scope); +} + +void *loader_calloc_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + size_t size, VkSystemAllocationScope allocation_scope) { + return loader_calloc(NULL != pAllocator ? pAllocator : &instance->alloc_callbacks, size, allocation_scope); +} + +void loader_free_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + void *pMemory) { + loader_free(NULL != pAllocator ? pAllocator : &instance->alloc_callbacks, pMemory); +} + +void *loader_realloc_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope allocation_scope) { + return loader_realloc(NULL != pAllocator ? pAllocator : &instance->alloc_callbacks, pMemory, orig_size, size, allocation_scope); +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/allocation.h b/local/recipes/libs/vulkan-loader/source/loader/allocation.h new file mode 100644 index 0000000000..8cfb4986aa --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/allocation.h @@ -0,0 +1,64 @@ +/* + * + * Copyright (c) 2014-2021 The Khronos Group Inc. + * Copyright (c) 2014-2021 Valve Corporation + * Copyright (c) 2014-2021 LunarG, Inc. + * 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#pragma once + +#include "loader_common.h" + +// The loader always aligns memory allocations to the largest unit size which is the size of a uint64_t +#define loader_aligned_size(x) ((((x) + sizeof(uint64_t) - 1) / sizeof(uint64_t)) * sizeof(uint64_t)) + +void *loader_instance_heap_alloc(const struct loader_instance *instance, size_t size, VkSystemAllocationScope allocation_scope); +void *loader_instance_heap_calloc(const struct loader_instance *instance, size_t size, VkSystemAllocationScope allocation_scope); +void loader_instance_heap_free(const struct loader_instance *instance, void *pMemory); +void *loader_instance_heap_realloc(const struct loader_instance *instance, void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope allocation_scope); + +void *loader_device_heap_alloc(const struct loader_device *device, size_t size, VkSystemAllocationScope allocationScope); +void *loader_device_heap_calloc(const struct loader_device *device, size_t size, VkSystemAllocationScope allocationScope); +void loader_device_heap_free(const struct loader_device *device, void *pMemory); +void *loader_device_heap_realloc(const struct loader_device *device, void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope alloc_scope); + +// Wrappers around various memory functions. The loader will use the VkAllocationCallbacks functions if pAllocator is not NULL, +// otherwise use the system functions +void *loader_alloc(const VkAllocationCallbacks *pAllocator, size_t size, VkSystemAllocationScope allocation_scope); +void *loader_calloc(const VkAllocationCallbacks *pAllocator, size_t size, VkSystemAllocationScope allocation_scope); +void loader_free(const VkAllocationCallbacks *pAllocator, void *pMemory); +void *loader_realloc(const VkAllocationCallbacks *pAllocator, void *pMemory, size_t orig_size, size_t size, + VkSystemAllocationScope allocation_scope); + +// helper allocation functions that will use pAllocator and if it is NULL, fallback to the allocator of instance +void *loader_alloc_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + size_t size, VkSystemAllocationScope allocation_scope); +void *loader_calloc_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + size_t size, VkSystemAllocationScope allocation_scope); +void loader_free_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + void *pMemory); +void *loader_realloc_with_instance_fallback(const VkAllocationCallbacks *pAllocator, const struct loader_instance *instance, + void *pMemory, size_t orig_size, size_t size, VkSystemAllocationScope allocation_scope); diff --git a/local/recipes/libs/vulkan-loader/source/loader/asm_offset.c b/local/recipes/libs/vulkan-loader/source/loader/asm_offset.c new file mode 100644 index 0000000000..4d01f8bfc5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/asm_offset.c @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2017-2024 The Khronos Group Inc. + * Copyright (c) 2017-2024 Valve Corporation + * Copyright (c) 2017-2024 LunarG, Inc. + * Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * + * 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. + * + * Author: Lenny Komow + * Author: Charles Giessen + */ + +// This code generates an assembly file which provides offsets to get struct members from assembly code. + +// __USE_MINGW_ANSI_STDIO is needed to use the %zu format specifier with mingw-w64. +// Otherwise the compiler will complain about an unknown format specifier. +#if defined(__MINGW32__) && !defined(__USE_MINGW_ANSI_STDIO) +#define __USE_MINGW_ANSI_STDIO 1 +#endif + +#include +#include "loader_common.h" +#include "log.h" + +#if defined(__GNUC__) || defined(__clang__) +void produce_asm_define() { + // GCC and clang make it easy to print easy to regex for values + __asm__("# VULKAN_LOADER_ERROR_BIT = %c0" : : "i"(VULKAN_LOADER_ERROR_BIT)); + __asm__("# PTR_SIZE = %c0" : : "i"(sizeof(void *))); + __asm__("# CHAR_PTR_SIZE = %c0" : : "i"(sizeof(char *))); + __asm__("# FUNCTION_OFFSET_INSTANCE = %c0" : : "i"(offsetof(struct loader_instance, phys_dev_ext_disp_functions))); + __asm__("# PHYS_DEV_OFFSET_INST_DISPATCH = %c0" : : "i"(offsetof(struct loader_instance_dispatch_table, phys_dev_ext))); + __asm__("# PHYS_DEV_OFFSET_PHYS_DEV_TRAMP = %c0" : : "i"(offsetof(struct loader_physical_device_tramp, phys_dev))); + __asm__("# ICD_TERM_OFFSET_PHYS_DEV_TERM = %c0" : : "i"(offsetof(struct loader_physical_device_term, this_icd_term))); + __asm__("# PHYS_DEV_OFFSET_PHYS_DEV_TERM = %c0" : : "i"(offsetof(struct loader_physical_device_term, phys_dev))); + __asm__("# INSTANCE_OFFSET_ICD_TERM = %c0" : : "i"(offsetof(struct loader_icd_term, this_instance))); + __asm__("# DISPATCH_OFFSET_ICD_TERM = %c0" : : "i"(offsetof(struct loader_icd_term, phys_dev_ext))); + __asm__("# EXT_OFFSET_DEVICE_DISPATCH = %c0" : : "i"(offsetof(struct loader_dev_dispatch_table, ext_dispatch))); +} +#elif defined(_WIN32) +// MSVC will print the name of the value and the value in hex +// Must disable optimization for this translation unit, otherwise the compiler strips out the variables +static const uint32_t PTR_SIZE = sizeof(void *); +static const uint32_t CHAR_PTR_SIZE = sizeof(char *); +static const uint32_t FUNCTION_OFFSET_INSTANCE = offsetof(struct loader_instance, phys_dev_ext_disp_functions); +static const uint32_t PHYS_DEV_OFFSET_INST_DISPATCH = offsetof(struct loader_instance_dispatch_table, phys_dev_ext); +static const uint32_t PHYS_DEV_OFFSET_PHYS_DEV_TRAMP = offsetof(struct loader_physical_device_tramp, phys_dev); +static const uint32_t ICD_TERM_OFFSET_PHYS_DEV_TERM = offsetof(struct loader_physical_device_term, this_icd_term); +static const uint32_t PHYS_DEV_OFFSET_PHYS_DEV_TERM = offsetof(struct loader_physical_device_term, phys_dev); +static const uint32_t INSTANCE_OFFSET_ICD_TERM = offsetof(struct loader_icd_term, this_instance); +static const uint32_t DISPATCH_OFFSET_ICD_TERM = offsetof(struct loader_icd_term, phys_dev_ext); +static const uint32_t EXT_OFFSET_DEVICE_DISPATCH = offsetof(struct loader_dev_dispatch_table, ext_dispatch); +#else +#warning asm_offset.c variable declarations need to be defined for this platform +#endif + +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) +#define SIZE_T_FMT "%-8zu" +#elif defined(__GNUC__) || defined(__clang__) +#define SIZE_T_FMT "%-8lu" +#else +#warning asm_offset.c SIZE_T_FMT must be defined for this platform +#endif + +struct ValueInfo { + const char *name; + size_t value; + const char *comment; +}; + +enum Assembler { + UNKNOWN = 0, + MASM = 1, + MARMASM = 2, + GAS = 3, +}; + +// This file can both be executed to produce gen_defines.asm and contains all the relevant data which +// the parse_asm_values.py script needs to write gen_defines.asm, necessary for cross compilation +int main(int argc, char **argv) { + enum Assembler assembler = UNKNOWN; + for (int i = 0; i < argc; ++i) { + if (!strcmp(argv[i], "MASM")) { + assembler = MASM; + } else if (!strcmp(argv[i], "MARMASM")) { + assembler = MARMASM; + } else if (!strcmp(argv[i], "GAS")) { + assembler = GAS; + } + } + if (assembler == UNKNOWN) { + return -1; + } + + struct ValueInfo values[] = { + // clang-format off + { .name = "VULKAN_LOADER_ERROR_BIT", .value = (size_t) VULKAN_LOADER_ERROR_BIT, + .comment = "The numerical value of the enum value 'VULKAN_LOADER_ERROR_BIT'" }, + { .name = "PTR_SIZE", .value = sizeof(void*), + .comment = "The size of a pointer" }, + { .name = "CHAR_PTR_SIZE", .value = sizeof(char *), + .comment = "The size of a 'const char *' struct" }, + { .name = "FUNCTION_OFFSET_INSTANCE", .value = offsetof(struct loader_instance, phys_dev_ext_disp_functions), + .comment = "The offset of 'phys_dev_ext_disp_functions' within a 'loader_instance' struct" }, + { .name = "PHYS_DEV_OFFSET_INST_DISPATCH", .value = offsetof(struct loader_instance_dispatch_table, phys_dev_ext), + .comment = "The offset of 'phys_dev_ext' within in 'loader_instance_dispatch_table' struct" }, + { .name = "PHYS_DEV_OFFSET_PHYS_DEV_TRAMP", .value = offsetof(struct loader_physical_device_tramp, phys_dev), + .comment = "The offset of 'phys_dev' within a 'loader_physical_device_tramp' struct" }, + { .name = "ICD_TERM_OFFSET_PHYS_DEV_TERM", .value = offsetof(struct loader_physical_device_term, this_icd_term), + .comment = "The offset of 'this_icd_term' within a 'loader_physical_device_term' struct" }, + { .name = "PHYS_DEV_OFFSET_PHYS_DEV_TERM", .value = offsetof(struct loader_physical_device_term, phys_dev), + .comment = "The offset of 'phys_dev' within a 'loader_physical_device_term' struct" }, + { .name = "INSTANCE_OFFSET_ICD_TERM", .value = offsetof(struct loader_icd_term, this_instance), + .comment = "The offset of 'this_instance' within a 'loader_icd_term' struct" }, + { .name = "DISPATCH_OFFSET_ICD_TERM", .value = offsetof(struct loader_icd_term, phys_dev_ext), + .comment = "The offset of 'phys_dev_ext' within a 'loader_icd_term' struct" }, + { .name = "EXT_OFFSET_DEVICE_DISPATCH", .value = offsetof(struct loader_dev_dispatch_table, ext_dispatch), + .comment = "The offset of 'ext_dispatch' within a 'loader_dev_dispatch_table' struct" }, + // clang-format on + }; + + FILE *file = loader_fopen("gen_defines.asm", "w"); + fprintf(file, "\n"); + if (assembler == MASM) { + for (size_t i = 0; i < sizeof(values) / sizeof(values[0]); ++i) { + fprintf(file, "%-32s equ " SIZE_T_FMT "; %s\n", values[i].name, values[i].value, values[i].comment); + } + } else if (assembler == MARMASM) { + fprintf(file, " AREA loader_structs_details, DATA,READONLY\n"); +#if defined(__aarch64__) || defined(_M_ARM64) + fprintf(file, "AARCH_64 EQU 1\n"); +#else + fprintf(file, "AARCH_64 EQU 0\n"); +#endif + for (size_t i = 0; i < sizeof(values) / sizeof(values[0]); ++i) { + fprintf(file, "%-32s EQU " SIZE_T_FMT "; %s\n", values[i].name, values[i].value, values[i].comment); + } + fprintf(file, " END\n"); + } else if (assembler == GAS) { +#if defined(__x86_64__) || defined(__i386__) + const char *comment_delimiter = "#"; +#if defined(__x86_64__) + fprintf(file, ".set X86_64, 1\n"); +#endif // defined(__x86_64__) +#elif defined(__aarch64__) || defined(__arm__) + const char *comment_delimiter = "//"; +#if defined(__aarch64__) + fprintf(file, ".set AARCH_64, 1\n"); +#else + fprintf(file, ".set AARCH_64, 0\n"); +#endif +#else + // Default comment delimiter + const char *comment_delimiter = "#"; +#endif + for (size_t i = 0; i < sizeof(values) / sizeof(values[0]); ++i) { + fprintf(file, ".set %-32s, " SIZE_T_FMT "%s %s\n", values[i].name, values[i].value, comment_delimiter, + values[i].comment); + } + } + return fclose(file); +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch32.S b/local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch32.S new file mode 100644 index 0000000000..434abf275f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch32.S @@ -0,0 +1,25 @@ +// +// Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// Copyright (c) 2024 Valve Corporation +// Copyright (c) 2024 LunarG, 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. +// + +.text +.global sample +.set PHYS_DEV_OFFSET_INST_DISPATCH, 10 +.set PTR_SIZE, 4 +sample: + mov r1, #(PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * 4)) + ldr r0, [r0, r1] diff --git a/local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch64.S b/local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch64.S new file mode 100644 index 0000000000..9b51e91ae6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/asm_test_aarch64.S @@ -0,0 +1,23 @@ +// +// Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// +// 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. +// + +.text +.global sample +.set PHYS_DEV_OFFSET_INST_DISPATCH, 10 +.set PTR_SIZE, 4 +sample: + mov x1, (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * 4)) + ldr x0, [x0, x1] diff --git a/local/recipes/libs/vulkan-loader/source/loader/asm_test_x86.S b/local/recipes/libs/vulkan-loader/source/loader/asm_test_x86.S new file mode 100644 index 0000000000..5d974dffd9 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/asm_test_x86.S @@ -0,0 +1,24 @@ +# +# Copyright (c) 2019 The Khronos Group Inc. +# Copyright (c) 2019 Valve Corporation +# Copyright (c) 2019 LunarG, 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. + +.intel_syntax noprefix +.text +.global sample +.set PHYS_DEV_OFFSET_INST_DISPATCH, 10 +.set PTR_SIZE, 4 +sample: + mov ecx, [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * 4))] diff --git a/local/recipes/libs/vulkan-loader/source/loader/cJSON.c b/local/recipes/libs/vulkan-loader/source/loader/cJSON.c new file mode 100644 index 0000000000..d4eb0c93da --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/cJSON.c @@ -0,0 +1,1806 @@ +/* + Copyright (c) 2009-2017 Dave Gamble and cJSON contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +/* cJSON */ +/* JSON parser in C. */ + +/* disable warnings about old C89 functions in MSVC */ +#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) +#define _CRT_SECURE_NO_DEPRECATE +#endif + +#ifdef __GNUC__ +#pragma GCC visibility push(default) +#endif +#if defined(_MSC_VER) +#pragma warning(push) +/* disable warning about single line comments in system headers */ +#pragma warning(disable : 4001) +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef ENABLE_LOCALES +#include +#endif + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif +#ifdef __GNUC__ +#pragma GCC visibility pop +#endif + +#include "cJSON.h" + +#include + +#include "allocation.h" + +/* define our own boolean type */ +#ifdef true +#undef true +#endif +#define true ((cJSON_bool)1) + +#ifdef false +#undef false +#endif +#define false ((cJSON_bool)0) + +/* define isnan and isinf for ANSI C, if in C99 or above, isnan and isinf has been defined in math.h */ +#ifndef isinf +#define isinf(d) (isnan((d - d)) && !isnan(d)) +#endif +#ifndef isnan +#define isnan(d) (d != d) +#endif + +#ifndef NAN +#ifdef _WIN32 +#define NAN sqrt(-1.0) +#else +#define NAN 0.0 / 0.0 +#endif +#endif + +typedef struct { + const unsigned char *json; + size_t position; +} error; +static error global_error = {NULL, 0}; + +CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void) { return (const char *)(global_error.json + global_error.position); } + +CJSON_PUBLIC(char *) loader_cJSON_GetStringValue(const cJSON *const item) { + if (!loader_cJSON_IsString(item)) { + return NULL; + } + + return item->valuestring; +} + +CJSON_PUBLIC(double) loader_cJSON_GetNumberValue(const cJSON *const item) { + if (!loader_cJSON_IsNumber(item)) { + return (double)NAN; + } + + return item->valuedouble; +} + +/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */ +#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 18) +#error cJSON.h and cJSON.c have different versions. Make sure that both have the same. +#endif + +/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */ +static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2) { + if ((string1 == NULL) || (string2 == NULL)) { + return 1; + } + + if (string1 == string2) { + return 0; + } + + for (; tolower(*string1) == tolower(*string2); (void)string1++, string2++) { + if (*string1 == '\0') { + return 0; + } + } + + return tolower(*string1) - tolower(*string2); +} + +/* strlen of character literals resolved at compile time */ +#define static_strlen(string_literal) (sizeof(string_literal) - sizeof("")) + +/* Internal constructor. */ +static cJSON *cJSON_New_Item(const VkAllocationCallbacks *pAllocator) { + cJSON *node = (cJSON *)loader_calloc(pAllocator, sizeof(cJSON), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL != node) { + node->pAllocator = pAllocator; + } + return node; +} + +/* Delete a cJSON structure. */ +TEST_FUNCTION_EXPORT CJSON_PUBLIC(void) loader_cJSON_Delete(cJSON *item) { + cJSON *next = NULL; + while (item != NULL) { + next = item->next; + if (!(item->type & cJSON_IsReference) && (item->child != NULL)) { + loader_cJSON_Delete(item->child); + } + if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL)) { + loader_free(item->pAllocator, item->valuestring); + item->valuestring = NULL; + } + if (!(item->type & cJSON_StringIsConst) && (item->string != NULL)) { + loader_free(item->pAllocator, item->string); + item->string = NULL; + } + loader_free(item->pAllocator, item); + item = next; + } +} + +/* get the decimal point character of the current locale */ +static unsigned char get_decimal_point(void) { +#ifdef ENABLE_LOCALES + struct lconv *lconv = localeconv(); + return (unsigned char)lconv->decimal_point[0]; +#else + return '.'; +#endif +} + +typedef struct { + const unsigned char *content; + size_t length; + size_t offset; + size_t depth; /* How deeply nested (in arrays/objects) is the input at the current offset. */ + const VkAllocationCallbacks *pAllocator; +} parse_buffer; + +/* check if the given size is left to read in a given parse buffer (starting with 1) */ +#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length)) +/* check if the buffer can be accessed at the given index (starting with 0) */ +#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length)) +#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index)) +/* get a pointer to the buffer at the position */ +#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset) + +/* Parse the input text to generate a number, and populate the result into item. */ +static cJSON_bool parse_number(cJSON *const item, parse_buffer *const input_buffer) { + double number = 0; + unsigned char *after_end = NULL; + unsigned char number_c_string[64]; + unsigned char decimal_point = get_decimal_point(); + size_t i = 0; + + if ((input_buffer == NULL) || (input_buffer->content == NULL)) { + return false; + } + + /* copy the number into a temporary buffer and replace '.' with the decimal point + * of the current locale (for strtod) + * This also takes care of '\0' not necessarily being available for marking the end of the input */ + for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++) { + switch (buffer_at_offset(input_buffer)[i]) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '+': + case '-': + case 'e': + case 'E': + number_c_string[i] = buffer_at_offset(input_buffer)[i]; + break; + + case '.': + number_c_string[i] = decimal_point; + break; + + default: + goto loop_end; + } + } +loop_end: + number_c_string[i] = '\0'; + + number = strtod((const char *)number_c_string, (char **)&after_end); + if (number_c_string == after_end) { + return false; /* parse_error */ + } + + item->valuedouble = number; + + /* use saturation in case of overflow */ + if (number >= INT_MAX) { + item->valueint = INT_MAX; + } else if (number <= (double)INT_MIN) { + item->valueint = INT_MIN; + } else { + item->valueint = (int)number; + } + + item->type = cJSON_Number; + + input_buffer->offset += (size_t)(after_end - number_c_string); + return true; +} + +typedef struct { + unsigned char *buffer; + size_t length; + size_t offset; + size_t depth; /* current nesting depth (for formatted printing) */ + cJSON_bool noalloc; + cJSON_bool format; /* is this print a formatted print */ + const VkAllocationCallbacks *pAllocator; +} printbuffer; + +/* realloc printbuffer if necessary to have at least "needed" bytes more */ +static unsigned char *ensure(printbuffer *const p, size_t needed, bool *out_of_memory) { + unsigned char *newbuffer = NULL; + size_t newsize = 0; + + if ((p == NULL) || (p->buffer == NULL)) { + return NULL; + } + + if ((p->length > 0) && (p->offset >= p->length)) { + /* make sure that offset is valid */ + return NULL; + } + + if (needed > INT_MAX) { + /* sizes bigger than INT_MAX are currently not supported */ + return NULL; + } + + needed += p->offset + 1; + if (needed <= p->length) { + return p->buffer + p->offset; + } + + if (p->noalloc) { + return NULL; + } + + /* calculate new buffer size */ + if (needed > (INT_MAX / 2)) { + /* overflow of int, use INT_MAX if possible */ + if (needed <= INT_MAX) { + newsize = INT_MAX; + } else { + return NULL; + } + } else { + newsize = needed * 2; + } + + newbuffer = (unsigned char *)loader_realloc(p->pAllocator, p->buffer, p->length, newsize, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (newbuffer == NULL) { + *out_of_memory = true; + loader_free(p->pAllocator, p->buffer); + p->length = 0; + p->buffer = NULL; + + return NULL; + } + + p->length = newsize; + p->buffer = newbuffer; + + return newbuffer + p->offset; +} + +/* calculate the new length of the string in a printbuffer and update the offset */ +static void update_offset(printbuffer *const buffer) { + const unsigned char *buffer_pointer = NULL; + if ((buffer == NULL) || (buffer->buffer == NULL)) { + return; + } + buffer_pointer = buffer->buffer + buffer->offset; + + buffer->offset += strlen((const char *)buffer_pointer); +} + +/* securely comparison of floating-point variables */ +static cJSON_bool compare_double(double a, double b) { + double maxVal = fabs(a) > fabs(b) ? fabs(a) : fabs(b); + return (fabs(a - b) <= maxVal * DBL_EPSILON); +} + +/* Render the number nicely from the given item into a string. */ +static cJSON_bool print_number(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory) { + unsigned char *output_pointer = NULL; + double d = item->valuedouble; + int length = 0; + size_t i = 0; + unsigned char number_buffer[26] = {0}; /* temporary buffer to print the number into */ + unsigned char decimal_point = get_decimal_point(); + double test = 0.0; + + if (output_buffer == NULL) { + return false; + } + + /* This checks for NaN and Infinity */ + if (isnan(d) || isinf(d)) { + length = snprintf((char *)number_buffer, 26, "null"); + } else if (d == (double)item->valueint) { + length = snprintf((char *)number_buffer, 26, "%d", item->valueint); + } else { + /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */ + length = snprintf((char *)number_buffer, 26, "%1.15g", d); + + /* Check whether the original double can be recovered */ + if ((sscanf((char *)number_buffer, "%lg", &test) != 1) || !compare_double((double)test, d)) { + /* If not, print with 17 decimal places of precision */ + length = snprintf((char *)number_buffer, 26, "%1.17g", d); + } + } + + /* snprintf failed or buffer overrun occurred */ + if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1))) { + return false; + } + + /* reserve appropriate space in the output */ + output_pointer = ensure(output_buffer, (size_t)length + sizeof(""), out_of_memory); + if (output_pointer == NULL) { + return false; + } + + /* copy the printed number to the output and replace locale + * dependent decimal point with '.' */ + for (i = 0; i < ((size_t)length); i++) { + if (number_buffer[i] == decimal_point) { + output_pointer[i] = '.'; + continue; + } + + output_pointer[i] = number_buffer[i]; + } + output_pointer[i] = '\0'; + + output_buffer->offset += (size_t)length; + + return true; +} + +/* parse 4 digit hexadecimal number */ +static unsigned parse_hex4(const unsigned char *const input) { + unsigned int h = 0; + size_t i = 0; + + for (i = 0; i < 4; i++) { + /* parse digit */ + if ((input[i] >= '0') && (input[i] <= '9')) { + h += (unsigned int)input[i] - '0'; + } else if ((input[i] >= 'A') && (input[i] <= 'F')) { + h += (unsigned int)10 + input[i] - 'A'; + } else if ((input[i] >= 'a') && (input[i] <= 'f')) { + h += (unsigned int)10 + input[i] - 'a'; + } else /* invalid */ + { + return 0; + } + + if (i < 3) { + /* shift left to make place for the next nibble */ + h = h << 4; + } + } + + return h; +} + +/* converts a UTF-16 literal to UTF-8 + * A literal can be one or two sequences of the form \uXXXX */ +static unsigned char utf16_literal_to_utf8(const unsigned char *const input_pointer, const unsigned char *const input_end, + unsigned char **output_pointer) { + long unsigned int codepoint = 0; + unsigned int first_code = 0; + const unsigned char *first_sequence = input_pointer; + unsigned char utf8_length = 0; + unsigned char utf8_position = 0; + unsigned char sequence_length = 0; + unsigned char first_byte_mark = 0; + + if ((input_end - first_sequence) < 6) { + /* input ends unexpectedly */ + goto fail; + } + + /* get the first utf16 sequence */ + first_code = parse_hex4(first_sequence + 2); + + /* check that the code is valid */ + if (((first_code >= 0xDC00) && (first_code <= 0xDFFF))) { + goto fail; + } + + /* UTF16 surrogate pair */ + if ((first_code >= 0xD800) && (first_code <= 0xDBFF)) { + const unsigned char *second_sequence = first_sequence + 6; + unsigned int second_code = 0; + sequence_length = 12; /* \uXXXX\uXXXX */ + + if ((input_end - second_sequence) < 6) { + /* input ends unexpectedly */ + goto fail; + } + + if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u')) { + /* missing second half of the surrogate pair */ + goto fail; + } + + /* get the second utf16 sequence */ + second_code = parse_hex4(second_sequence + 2); + /* check that the code is valid */ + if ((second_code < 0xDC00) || (second_code > 0xDFFF)) { + /* invalid second half of the surrogate pair */ + goto fail; + } + + /* calculate the unicode codepoint from the surrogate pair */ + codepoint = 0x10000 + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF)); + } else { + sequence_length = 6; /* \uXXXX */ + codepoint = first_code; + } + + /* encode as UTF-8 + * takes at maximum 4 bytes to encode: + * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ + if (codepoint < 0x80) { + /* normal ascii, encoding 0xxxxxxx */ + utf8_length = 1; + } else if (codepoint < 0x800) { + /* two bytes, encoding 110xxxxx 10xxxxxx */ + utf8_length = 2; + first_byte_mark = 0xC0; /* 11000000 */ + } else if (codepoint < 0x10000) { + /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */ + utf8_length = 3; + first_byte_mark = 0xE0; /* 11100000 */ + } else if (codepoint <= 0x10FFFF) { + /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */ + utf8_length = 4; + first_byte_mark = 0xF0; /* 11110000 */ + } else { + /* invalid unicode codepoint */ + goto fail; + } + + /* encode as utf8 */ + for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--) { + /* 10xxxxxx */ + (*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF); + codepoint >>= 6; + } + /* encode first byte */ + if (utf8_length > 1) { + (*output_pointer)[0] = (unsigned char)((codepoint | first_byte_mark) & 0xFF); + } else { + (*output_pointer)[0] = (unsigned char)(codepoint & 0x7F); + } + + *output_pointer += utf8_length; + + return sequence_length; + +fail: + return 0; +} + +/* Parse the input text into an unescaped cinput, and populate item. */ +static cJSON_bool parse_string(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory) { + const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1; + const unsigned char *input_end = buffer_at_offset(input_buffer) + 1; + unsigned char *output_pointer = NULL; + unsigned char *output = NULL; + + /* not a string */ + if (buffer_at_offset(input_buffer)[0] != '\"') { + goto fail; + } + + { + /* calculate approximate size of the output (overestimate) */ + size_t allocation_length = 0; + size_t skipped_bytes = 0; + while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"')) { + /* is escape sequence */ + if (input_end[0] == '\\') { + if ((size_t)(input_end + 1 - input_buffer->content) >= input_buffer->length) { + /* prevent buffer overflow when last input character is a backslash */ + goto fail; + } + skipped_bytes++; + input_end++; + } + input_end++; + } + if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"')) { + goto fail; /* string ended unexpectedly */ + } + + /* This is at most how much we need for the output */ + allocation_length = (size_t)(input_end - buffer_at_offset(input_buffer)) - skipped_bytes; + output = (unsigned char *)loader_calloc(input_buffer->pAllocator, allocation_length + sizeof(""), + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (output == NULL) { + *out_of_memory = true; + goto fail; /* allocation failure */ + } + } + + output_pointer = output; + /* loop through the string literal */ + while (input_pointer < input_end) { + if (*input_pointer != '\\') { + *output_pointer++ = *input_pointer++; + } + /* escape sequence */ + else { + unsigned char sequence_length = 2; + if ((input_end - input_pointer) < 1) { + goto fail; + } + + switch (input_pointer[1]) { + case 'b': + *output_pointer++ = '\b'; + break; + case 'f': + *output_pointer++ = '\f'; + break; + case 'n': + *output_pointer++ = '\n'; + break; + case 'r': + *output_pointer++ = '\r'; + break; + case 't': + *output_pointer++ = '\t'; + break; + case '\"': + case '\\': + case '/': + *output_pointer++ = input_pointer[1]; + break; + + /* UTF-16 literal */ + case 'u': + sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer); + if (sequence_length == 0) { + /* failed to convert UTF16-literal to UTF-8 */ + goto fail; + } + break; + + default: + goto fail; + } + input_pointer += sequence_length; + } + } + + /* zero terminate the output */ + *output_pointer = '\0'; + + item->type = cJSON_String; + item->valuestring = (char *)output; + + input_buffer->offset = (size_t)(input_end - input_buffer->content); + input_buffer->offset++; + + return true; + +fail: + if (output != NULL) { + loader_free(input_buffer->pAllocator, output); + output = NULL; + } + + if (input_pointer != NULL) { + input_buffer->offset = (size_t)(input_pointer - input_buffer->content); + } + + return false; +} + +/* Render the cstring provided to an escaped version that can be printed. */ +static cJSON_bool print_string_ptr(const unsigned char *const input, printbuffer *const output_buffer, bool *out_of_memory) { + const unsigned char *input_pointer = NULL; + unsigned char *output = NULL; + unsigned char *output_pointer = NULL; + size_t output_length = 0; + /* numbers of additional characters needed for escaping */ + size_t escape_characters = 0; + + if (output_buffer == NULL) { + return false; + } + + /* empty string */ + if (input == NULL) { + output = ensure(output_buffer, sizeof(""), out_of_memory); + if (output == NULL) { + return false; + } + + return true; + } + + /* set "flag" to 1 if something needs to be escaped */ + for (input_pointer = input; *input_pointer; input_pointer++) { + switch (*input_pointer) { + case '\"': + case '\\': + case '\b': + case '\f': + case '\n': + case '\r': + case '\t': + /* one character escape sequence */ + escape_characters++; + break; + default: + if (*input_pointer < 32) { + /* UTF-16 escape sequence uXXXX */ + escape_characters += 5; + } + break; + } + } + output_length = (size_t)(input_pointer - input) + escape_characters; + + output = ensure(output_buffer, output_length + sizeof(""), out_of_memory); + if (output == NULL) { + return false; + } + + /* no characters have to be escaped */ + if (escape_characters == 0) { + memcpy(output, input, output_length); + output[output_length] = '\0'; + + return true; + } + + output_pointer = output; + /* copy the string */ + for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++) { + if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\')) { + /* normal character, copy */ + *output_pointer = *input_pointer; + } else { + // Loader specific modification - don't add a backslash because that will 'double up' any existing back slashes. + // This change was added right after vulkan's public release, so while it may not be a problem, there are plenty + // of API calls made which might not work if the paths have "\\"" in them + /* character needs to be escaped */ + //*output_pointer++ = '\\'; + switch (*input_pointer) { + case '\\': + *output_pointer = '\\'; + break; + case '\"': + *output_pointer = '\"'; + break; + case '\b': + *output_pointer = '\b'; + break; + case '\f': + *output_pointer = '\f'; + break; + case '\n': + *output_pointer = '\n'; + break; + case '\r': + *output_pointer = '\r'; + break; + case '\t': + *output_pointer = '\t'; + break; + default: + /* escape and print as unicode codepoint */ + snprintf((char *)output_pointer, output_length - (size_t)(output_pointer - output), "u%04x", *input_pointer); + output_pointer += 4; + break; + } + } + } + output[output_length] = '\0'; + + return true; +} + +/* Invoke print_string_ptr (which is useful) on an item. */ +static cJSON_bool print_string(const cJSON *const item, printbuffer *const p, bool *out_of_memory) { + return print_string_ptr((unsigned char *)item->valuestring, p, out_of_memory); +} + +/* Predeclare these prototypes. */ +static cJSON_bool parse_value(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory); +static cJSON_bool print_value(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory); +static cJSON_bool parse_array(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory); +static cJSON_bool print_array(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory); +static cJSON_bool parse_object(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory); +static cJSON_bool print_object(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory); + +/* Utility to jump whitespace and cr/lf */ +static parse_buffer *buffer_skip_whitespace(parse_buffer *const buffer) { + if ((buffer == NULL) || (buffer->content == NULL)) { + return NULL; + } + + if (cannot_access_at_index(buffer, 0)) { + return buffer; + } + + while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32)) { + buffer->offset++; + } + + if (buffer->offset == buffer->length) { + buffer->offset--; + } + + return buffer; +} + +/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */ +static parse_buffer *skip_utf8_bom(parse_buffer *const buffer) { + if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0)) { + return NULL; + } + + if (can_access_at_index(buffer, 4) && (strncmp((const char *)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0)) { + buffer->offset += 3; + } + + return buffer; +} + +CJSON_PUBLIC(cJSON *) +loader_cJSON_ParseWithOpts(const VkAllocationCallbacks *pAllocator, const char *value, const char **return_parse_end, + cJSON_bool require_null_terminated, bool *out_of_memory) { + size_t buffer_length; + + if (NULL == value) { + return NULL; + } + + /* Adding null character size due to require_null_terminated. */ + buffer_length = strlen(value) + sizeof(""); + + return loader_cJSON_ParseWithLengthOpts(pAllocator, value, buffer_length, return_parse_end, require_null_terminated, + out_of_memory); +} + +/* Parse an object - create a new root, and populate. */ +CJSON_PUBLIC(cJSON *) +loader_cJSON_ParseWithLengthOpts(const VkAllocationCallbacks *pAllocator, const char *value, size_t buffer_length, + const char **return_parse_end, cJSON_bool require_null_terminated, bool *out_of_memory) { + parse_buffer buffer = {0, 0, 0, 0, 0}; + cJSON *item = NULL; + + /* reset error position */ + global_error.json = NULL; + global_error.position = 0; + + if (value == NULL || 0 == buffer_length) { + goto fail; + } + + buffer.content = (const unsigned char *)value; + buffer.length = buffer_length; + buffer.offset = 0; + buffer.pAllocator = pAllocator; + + item = cJSON_New_Item(pAllocator); + if (item == NULL) /* memory fail */ + { + *out_of_memory = true; + goto fail; + } + + if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer)), out_of_memory)) { + /* parse failure. ep is set. */ + goto fail; + } + + /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ + if (require_null_terminated) { + buffer_skip_whitespace(&buffer); + if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0') { + goto fail; + } + } + if (return_parse_end) { + *return_parse_end = (const char *)buffer_at_offset(&buffer); + } + + return item; + +fail: + if (item != NULL) { + loader_cJSON_Delete(item); + } + + if (value != NULL) { + error local_error; + local_error.json = (const unsigned char *)value; + local_error.position = 0; + + if (buffer.offset < buffer.length) { + local_error.position = buffer.offset; + } else if (buffer.length > 0) { + local_error.position = buffer.length - 1; + } + + if (return_parse_end != NULL) { + *return_parse_end = (const char *)local_error.json + local_error.position; + } + + global_error = local_error; + } + + return NULL; +} + +/* Default options for loader_cJSON_Parse */ +CJSON_PUBLIC(cJSON *) loader_cJSON_Parse(const VkAllocationCallbacks *pAllocator, const char *value, bool *out_of_memory) { + return loader_cJSON_ParseWithOpts(pAllocator, value, 0, 0, out_of_memory); +} + +CJSON_PUBLIC(cJSON *) +loader_cJSON_ParseWithLength(const VkAllocationCallbacks *pAllocator, const char *value, size_t buffer_length, + bool *out_of_memory) { + return loader_cJSON_ParseWithLengthOpts(pAllocator, value, buffer_length, 0, 0, out_of_memory); +} + +#define cjson_min(a, b) (((a) < (b)) ? (a) : (b)) + +static unsigned char *print(const cJSON *const item, cJSON_bool format, bool *out_of_memory) { + static const size_t default_buffer_size = 256; + printbuffer buffer[1]; + unsigned char *printed = NULL; + + memset(buffer, 0, sizeof(buffer)); + + /* create buffer */ + buffer->buffer = (unsigned char *)loader_calloc(item->pAllocator, default_buffer_size, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + buffer->length = default_buffer_size; + buffer->format = format; + buffer->pAllocator = item->pAllocator; + if (buffer->buffer == NULL) { + *out_of_memory = true; + goto fail; + } + + /* print the value */ + if (!print_value(item, buffer, out_of_memory)) { + goto fail; + } + update_offset(buffer); + + printed = (unsigned char *)loader_realloc(item->pAllocator, buffer->buffer, buffer->length, buffer->offset + 1, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (printed == NULL) { + *out_of_memory = true; + goto fail; + } + buffer->buffer = NULL; + + return printed; + +fail: + if (buffer->buffer != NULL) { + loader_free(item->pAllocator, buffer->buffer); + buffer->buffer = NULL; + } + + if (printed != NULL) { + loader_free(item->pAllocator, printed); + printed = NULL; + } + + return NULL; +} + +/* Render a cJSON item/entity/structure to text. */ +TEST_FUNCTION_EXPORT CJSON_PUBLIC(char *) loader_cJSON_Print(const cJSON *item, bool *out_of_memory) { + return (char *)print(item, true, out_of_memory); +} + +CJSON_PUBLIC(char *) loader_cJSON_PrintUnformatted(const cJSON *item, bool *out_of_memory) { + return (char *)print(item, false, out_of_memory); +} + +CJSON_PUBLIC(char *) +loader_cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt, bool *out_of_memory) { + printbuffer p = {0, 0, 0, 0, 0, 0, 0}; + + if (prebuffer < 0) { + return NULL; + } + + p.buffer = (unsigned char *)loader_alloc(item->pAllocator, (size_t)prebuffer, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (!p.buffer) { + return NULL; + } + + p.length = (size_t)prebuffer; + p.offset = 0; + p.noalloc = false; + p.format = fmt; + p.pAllocator = item->pAllocator; + + if (!print_value(item, &p, out_of_memory)) { + loader_free(item->pAllocator, p.buffer); + p.buffer = NULL; + return NULL; + } + + return (char *)p.buffer; +} + +CJSON_PUBLIC(cJSON_bool) +loader_cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format) { + printbuffer p = {0, 0, 0, 0, 0, 0, 0}; + + if ((length < 0) || (buffer == NULL)) { + return false; + } + + p.buffer = (unsigned char *)buffer; + p.length = (size_t)length; + p.offset = 0; + p.noalloc = true; + p.format = format; + p.pAllocator = item->pAllocator; + bool out_of_memory = false; + return print_value(item, &p, &out_of_memory); +} + +/* Parser core - when encountering text, process appropriately. */ +static cJSON_bool parse_value(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory) { + if ((input_buffer == NULL) || (input_buffer->content == NULL)) { + return false; /* no input */ + } + + /* parse the different types of values */ + /* null */ + if (can_read(input_buffer, 4) && (strncmp((const char *)buffer_at_offset(input_buffer), "null", 4) == 0)) { + item->type = cJSON_NULL; + input_buffer->offset += 4; + return true; + } + /* false */ + if (can_read(input_buffer, 5) && (strncmp((const char *)buffer_at_offset(input_buffer), "false", 5) == 0)) { + item->type = cJSON_False; + input_buffer->offset += 5; + return true; + } + /* true */ + if (can_read(input_buffer, 4) && (strncmp((const char *)buffer_at_offset(input_buffer), "true", 4) == 0)) { + item->type = cJSON_True; + item->valueint = 1; + input_buffer->offset += 4; + return true; + } + /* string */ + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"')) { + return parse_string(item, input_buffer, out_of_memory); + } + /* number */ + if (can_access_at_index(input_buffer, 0) && + ((buffer_at_offset(input_buffer)[0] == '-') || + ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9')))) { + return parse_number(item, input_buffer); + } + /* array */ + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '[')) { + return parse_array(item, input_buffer, out_of_memory); + } + /* object */ + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{')) { + return parse_object(item, input_buffer, out_of_memory); + } + + return false; +} + +/* Render a value to text. */ +static cJSON_bool print_value(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory) { + unsigned char *output = NULL; + + if ((item == NULL) || (output_buffer == NULL)) { + return false; + } + + switch ((item->type) & 0xFF) { + case cJSON_NULL: + output = ensure(output_buffer, 5, out_of_memory); + if (output == NULL) { + return false; + } + strcpy((char *)output, "null"); + return true; + + case cJSON_False: + output = ensure(output_buffer, 6, out_of_memory); + if (output == NULL) { + return false; + } + strcpy((char *)output, "false"); + return true; + + case cJSON_True: + output = ensure(output_buffer, 5, out_of_memory); + if (output == NULL) { + return false; + } + strcpy((char *)output, "true"); + return true; + + case cJSON_Number: + return print_number(item, output_buffer, out_of_memory); + + case cJSON_Raw: { + size_t raw_length = 0; + if (item->valuestring == NULL) { + return false; + } + + raw_length = strlen(item->valuestring) + sizeof(""); + output = ensure(output_buffer, raw_length, out_of_memory); + if (output == NULL) { + return false; + } + memcpy(output, item->valuestring, raw_length); + return true; + } + + case cJSON_String: + return print_string(item, output_buffer, out_of_memory); + + case cJSON_Array: + return print_array(item, output_buffer, out_of_memory); + + case cJSON_Object: + return print_object(item, output_buffer, out_of_memory); + + default: + return false; + } +} + +/* Build an array from input text. */ +static cJSON_bool parse_array(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory) { + cJSON *head = NULL; /* head of the linked list */ + cJSON *current_item = NULL; + + if (input_buffer->depth >= CJSON_NESTING_LIMIT) { + return false; /* to deeply nested */ + } + input_buffer->depth++; + + if (buffer_at_offset(input_buffer)[0] != '[') { + /* not an array */ + goto fail; + } + + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ']')) { + /* empty array */ + goto success; + } + + /* check if we skipped to the end of the buffer */ + if (cannot_access_at_index(input_buffer, 0)) { + input_buffer->offset--; + goto fail; + } + + /* step back to character in front of the first element */ + input_buffer->offset--; + /* loop through the comma separated array elements */ + do { + /* allocate next item */ + cJSON *new_item = cJSON_New_Item(input_buffer->pAllocator); + if (new_item == NULL) { + *out_of_memory = true; + goto fail; /* allocation failure */ + } + + /* attach next item to list */ + if (head == NULL) { + /* start the linked list */ + current_item = head = new_item; + } else { + /* add to the end and advance */ + current_item->next = new_item; + new_item->prev = current_item; + current_item = new_item; + } + + /* parse next value */ + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (!parse_value(current_item, input_buffer, out_of_memory)) { + goto fail; /* failed to parse value */ + } + buffer_skip_whitespace(input_buffer); + } while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ',')); + + if (cannot_access_at_index(input_buffer, 0) || buffer_at_offset(input_buffer)[0] != ']') { + goto fail; /* expected end of array */ + } + +success: + input_buffer->depth--; + + if (head != NULL) { + head->prev = current_item; + } + + item->type = cJSON_Array; + item->child = head; + + input_buffer->offset++; + + return true; + +fail: + if (head != NULL) { + loader_cJSON_Delete(head); + } + + return false; +} + +/* Render an array to text */ +static cJSON_bool print_array(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory) { + unsigned char *output_pointer = NULL; + size_t length = 0; + cJSON *current_element = item->child; + + if (output_buffer == NULL) { + return false; + } + + /* Compose the output array. */ + /* opening square bracket */ + output_pointer = ensure(output_buffer, 1, out_of_memory); + if (output_pointer == NULL) { + return false; + } + + *output_pointer = '['; + output_buffer->offset++; + output_buffer->depth++; + + while (current_element != NULL) { + if (!print_value(current_element, output_buffer, out_of_memory)) { + return false; + } + update_offset(output_buffer); + if (current_element->next) { + length = (size_t)(output_buffer->format ? 2 : 1); + output_pointer = ensure(output_buffer, length + 1, out_of_memory); + if (output_pointer == NULL) { + return false; + } + *output_pointer++ = ','; + if (output_buffer->format) { + *output_pointer++ = ' '; + } + *output_pointer = '\0'; + output_buffer->offset += length; + } + current_element = current_element->next; + } + + output_pointer = ensure(output_buffer, 2, out_of_memory); + if (output_pointer == NULL) { + return false; + } + *output_pointer++ = ']'; + *output_pointer = '\0'; + output_buffer->depth--; + + return true; +} + +/* Build an object from the text. */ +static cJSON_bool parse_object(cJSON *const item, parse_buffer *const input_buffer, bool *out_of_memory) { + cJSON *head = NULL; /* linked list head */ + cJSON *current_item = NULL; + + if (input_buffer->depth >= CJSON_NESTING_LIMIT) { + return false; /* to deeply nested */ + } + input_buffer->depth++; + + if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '{')) { + goto fail; /* not an object */ + } + + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '}')) { + goto success; /* empty object */ + } + + /* check if we skipped to the end of the buffer */ + if (cannot_access_at_index(input_buffer, 0)) { + input_buffer->offset--; + goto fail; + } + + /* step back to character in front of the first element */ + input_buffer->offset--; + /* loop through the comma separated array elements */ + do { + /* allocate next item */ + cJSON *new_item = cJSON_New_Item(input_buffer->pAllocator); + if (new_item == NULL) { + *out_of_memory = true; + goto fail; /* allocation failure */ + } + + /* attach next item to list */ + if (head == NULL) { + /* start the linked list */ + current_item = head = new_item; + } else { + /* add to the end and advance */ + current_item->next = new_item; + new_item->prev = current_item; + current_item = new_item; + } + + if (cannot_access_at_index(input_buffer, 1)) { + goto fail; /* nothing comes after the comma */ + } + + /* parse the name of the child */ + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (!parse_string(current_item, input_buffer, out_of_memory)) { + goto fail; /* failed to parse name */ + } + buffer_skip_whitespace(input_buffer); + + /* swap valuestring and string, because we parsed the name */ + current_item->string = current_item->valuestring; + current_item->valuestring = NULL; + + if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != ':')) { + goto fail; /* invalid object */ + } + + /* parse the value */ + input_buffer->offset++; + buffer_skip_whitespace(input_buffer); + if (!parse_value(current_item, input_buffer, out_of_memory)) { + goto fail; /* failed to parse value */ + } + buffer_skip_whitespace(input_buffer); + } while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ',')); + + if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '}')) { + goto fail; /* expected end of object */ + } + +success: + input_buffer->depth--; + + if (head != NULL) { + head->prev = current_item; + } + + item->type = cJSON_Object; + item->child = head; + + input_buffer->offset++; + return true; + +fail: + if (head != NULL) { + loader_cJSON_Delete(head); + } + + return false; +} + +/* Render an object to text. */ +static cJSON_bool print_object(const cJSON *const item, printbuffer *const output_buffer, bool *out_of_memory) { + unsigned char *output_pointer = NULL; + size_t length = 0; + cJSON *current_item = item->child; + + if (output_buffer == NULL) { + return false; + } + + /* Compose the output: */ + length = (size_t)(output_buffer->format ? 2 : 1); /* fmt: {\n */ + output_pointer = ensure(output_buffer, length + 1, out_of_memory); + if (output_pointer == NULL) { + return false; + } + + *output_pointer++ = '{'; + output_buffer->depth++; + if (output_buffer->format) { + *output_pointer++ = '\n'; + } + output_buffer->offset += length; + + while (current_item) { + if (output_buffer->format) { + size_t i; + output_pointer = ensure(output_buffer, output_buffer->depth, out_of_memory); + if (output_pointer == NULL) { + return false; + } + for (i = 0; i < output_buffer->depth; i++) { + *output_pointer++ = '\t'; + } + output_buffer->offset += output_buffer->depth; + } + + /* print key */ + if (!print_string_ptr((unsigned char *)current_item->string, output_buffer, out_of_memory)) { + return false; + } + update_offset(output_buffer); + + length = (size_t)(output_buffer->format ? 2 : 1); + output_pointer = ensure(output_buffer, length, out_of_memory); + if (output_pointer == NULL) { + return false; + } + *output_pointer++ = ':'; + if (output_buffer->format) { + *output_pointer++ = '\t'; + } + output_buffer->offset += length; + + /* print value */ + if (!print_value(current_item, output_buffer, out_of_memory)) { + return false; + } + update_offset(output_buffer); + + /* print comma if not last */ + length = ((size_t)(output_buffer->format ? 1 : 0) + (size_t)(current_item->next ? 1 : 0)); + output_pointer = ensure(output_buffer, length + 1, out_of_memory); + if (output_pointer == NULL) { + return false; + } + if (current_item->next) { + *output_pointer++ = ','; + } + + if (output_buffer->format) { + *output_pointer++ = '\n'; + } + *output_pointer = '\0'; + output_buffer->offset += length; + + current_item = current_item->next; + } + + output_pointer = ensure(output_buffer, output_buffer->format ? (output_buffer->depth + 1) : 2, out_of_memory); + if (output_pointer == NULL) { + return false; + } + if (output_buffer->format) { + size_t i; + for (i = 0; i < (output_buffer->depth - 1); i++) { + *output_pointer++ = '\t'; + } + } + *output_pointer++ = '}'; + *output_pointer = '\0'; + output_buffer->depth--; + + return true; +} + +/* Get Array size/item / object item. */ +CJSON_PUBLIC(int) loader_cJSON_GetArraySize(const cJSON *array) { + cJSON *child = NULL; + size_t size = 0; + + if (array == NULL) { + return 0; + } + + child = array->child; + + while (child != NULL) { + size++; + child = child->next; + } + + /* FIXME: Can overflow here. Cannot be fixed without breaking the API */ + + return (int)size; +} + +static cJSON *get_array_item(const cJSON *array, size_t index) { + cJSON *current_child = NULL; + + if (array == NULL) { + return NULL; + } + + current_child = array->child; + while ((current_child != NULL) && (index > 0)) { + index--; + current_child = current_child->next; + } + + return current_child; +} + +CJSON_PUBLIC(cJSON *) loader_cJSON_GetArrayItem(const cJSON *array, int index) { + if (index < 0) { + return NULL; + } + + return get_array_item(array, (size_t)index); +} + +static cJSON *get_object_item(const cJSON *const object, const char *const name, const cJSON_bool case_sensitive) { + cJSON *current_element = NULL; + + if ((object == NULL) || (name == NULL)) { + return NULL; + } + + current_element = object->child; + if (case_sensitive) { + while ((current_element != NULL) && (current_element->string != NULL) && (strcmp(name, current_element->string) != 0)) { + current_element = current_element->next; + } + } else { + while ((current_element != NULL) && + (case_insensitive_strcmp((const unsigned char *)name, (const unsigned char *)(current_element->string)) != 0)) { + current_element = current_element->next; + } + } + + if ((current_element == NULL) || (current_element->string == NULL)) { + return NULL; + } + + return current_element; +} + +CJSON_PUBLIC(cJSON *) loader_cJSON_GetObjectItem(const cJSON *const object, const char *const string) { + return get_object_item(object, string, false); +} + +CJSON_PUBLIC(cJSON *) loader_cJSON_GetObjectItemCaseSensitive(const cJSON *const object, const char *const string) { + return get_object_item(object, string, true); +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_HasObjectItem(const cJSON *object, const char *string) { + return loader_cJSON_GetObjectItem(object, string) ? 1 : 0; +} + +static void skip_oneline_comment(char **input) { + *input += static_strlen("//"); + + for (; (*input)[0] != '\0'; ++(*input)) { + if ((*input)[0] == '\n') { + *input += static_strlen("\n"); + return; + } + } +} + +static void skip_multiline_comment(char **input) { + *input += static_strlen("/*"); + + for (; (*input)[0] != '\0'; ++(*input)) { + if (((*input)[0] == '*') && ((*input)[1] == '/')) { + *input += static_strlen("*/"); + return; + } + } +} + +static void minify_string(char **input, char **output) { + (*output)[0] = (*input)[0]; + *input += static_strlen("\""); + *output += static_strlen("\""); + + for (; (*input)[0] != '\0'; (void)++(*input), ++(*output)) { + (*output)[0] = (*input)[0]; + + if ((*input)[0] == '\"') { + (*output)[0] = '\"'; + *input += static_strlen("\""); + *output += static_strlen("\""); + return; + } else if (((*input)[0] == '\\') && ((*input)[1] == '\"')) { + (*output)[1] = (*input)[1]; + *input += static_strlen("\""); + *output += static_strlen("\""); + } + } +} + +CJSON_PUBLIC(void) loader_cJSON_Minify(char *json) { + char *into = json; + + if (json == NULL) { + return; + } + + while (json[0] != '\0') { + switch (json[0]) { + case ' ': + case '\t': + case '\r': + case '\n': + json++; + break; + + case '/': + if (json[1] == '/') { + skip_oneline_comment(&json); + } else if (json[1] == '*') { + skip_multiline_comment(&json); + } else { + json++; + } + break; + + case '\"': + minify_string(&json, (char **)&into); + break; + + default: + into[0] = json[0]; + json++; + into++; + } + } + + /* and null-terminate. */ + *into = '\0'; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsInvalid(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_Invalid; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsFalse(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_False; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsTrue(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xff) == cJSON_True; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsBool(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & (cJSON_True | cJSON_False)) != 0; +} +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsNull(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_NULL; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsNumber(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_Number; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsString(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_String; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsArray(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_Array; +} + +CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_Object; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsRaw(const cJSON *const item) { + if (item == NULL) { + return false; + } + + return (item->type & 0xFF) == cJSON_Raw; +} + +CJSON_PUBLIC(cJSON_bool) loader_cJSON_Compare(const cJSON *const a, const cJSON *const b, const cJSON_bool case_sensitive) { + if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF))) { + return false; + } + + /* check if type is valid */ + switch (a->type & 0xFF) { + case cJSON_False: + case cJSON_True: + case cJSON_NULL: + case cJSON_Number: + case cJSON_String: + case cJSON_Raw: + case cJSON_Array: + case cJSON_Object: + break; + + default: + return false; + } + + /* identical objects are equal */ + if (a == b) { + return true; + } + + switch (a->type & 0xFF) { + /* in these cases and equal type is enough */ + case cJSON_False: + case cJSON_True: + case cJSON_NULL: + return true; + + case cJSON_Number: + if (compare_double(a->valuedouble, b->valuedouble)) { + return true; + } + return false; + + case cJSON_String: + case cJSON_Raw: + if ((a->valuestring == NULL) || (b->valuestring == NULL)) { + return false; + } + if (strcmp(a->valuestring, b->valuestring) == 0) { + return true; + } + + return false; + + case cJSON_Array: { + cJSON *a_element = a->child; + cJSON *b_element = b->child; + + for (; (a_element != NULL) && (b_element != NULL);) { + if (!loader_cJSON_Compare(a_element, b_element, case_sensitive)) { + return false; + } + + a_element = a_element->next; + b_element = b_element->next; + } + + /* one of the arrays is longer than the other */ + if (a_element != b_element) { + return false; + } + + return true; + } + + case cJSON_Object: { + cJSON *a_element = NULL; + cJSON *b_element = NULL; + cJSON_ArrayForEach(a_element, a) { + /* TODO This has O(n^2) runtime, which is horrible! */ + b_element = get_object_item(b, a_element->string, case_sensitive); + if (b_element == NULL) { + return false; + } + + if (!loader_cJSON_Compare(a_element, b_element, case_sensitive)) { + return false; + } + } + + /* doing this twice, once on a and b to prevent true comparison if a subset of b + * TODO: Do this the proper way, this is just a fix for now */ + cJSON_ArrayForEach(b_element, b) { + a_element = get_object_item(a, b_element->string, case_sensitive); + if (a_element == NULL) { + return false; + } + + if (!loader_cJSON_Compare(b_element, a_element, case_sensitive)) { + return false; + } + } + + return true; + } + + default: + return false; + } +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/cJSON.h b/local/recipes/libs/vulkan-loader/source/loader/cJSON.h new file mode 100644 index 0000000000..457d669a58 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/cJSON.h @@ -0,0 +1,220 @@ +/* + Copyright (c) 2009-2017 Dave Gamble and cJSON contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef cJSON__h +#define cJSON__h + +#ifdef __cplusplus +extern "C" { +#endif + +#define CJSON_HIDE_SYMBOLS + +#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32)) +#define __WINDOWS__ +#endif + +#ifdef __WINDOWS__ + +/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project +with a different default calling convention. For windows you have 3 define options: + +CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols +CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default) +CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol + +For *nix builds that support visibility attribute, you can define similar behavior by + +setting default visibility to hidden by adding +-fvisibility=hidden (for gcc) +or +-xldscope=hidden (for sun cc) +to CFLAGS + +then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does + +*/ + +#define CJSON_CDECL __cdecl +#define CJSON_STDCALL __stdcall + +/* export symbols by default, this is necessary for copy pasting the C and header file */ +#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS) +#define CJSON_EXPORT_SYMBOLS +#endif + +#if defined(CJSON_HIDE_SYMBOLS) +#define CJSON_PUBLIC(type) type CJSON_STDCALL +#elif defined(CJSON_EXPORT_SYMBOLS) +#define CJSON_PUBLIC(type) __declspec(dllexport) type CJSON_STDCALL +#elif defined(CJSON_IMPORT_SYMBOLS) +#define CJSON_PUBLIC(type) __declspec(dllimport) type CJSON_STDCALL +#endif +#else /* !__WINDOWS__ */ +#define CJSON_CDECL +#define CJSON_STDCALL + +#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__SUNPRO_C)) && defined(CJSON_API_VISIBILITY) +#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type +#else +#define CJSON_PUBLIC(type) type +#endif +#endif + +/* project version */ +#define CJSON_VERSION_MAJOR 1 +#define CJSON_VERSION_MINOR 7 +#define CJSON_VERSION_PATCH 18 + +#include +#include + +#include "vk_loader_platform.h" + +/* cJSON Types: */ +#define cJSON_Invalid (0) +#define cJSON_False (1 << 0) +#define cJSON_True (1 << 1) +#define cJSON_NULL (1 << 2) +#define cJSON_Number (1 << 3) +#define cJSON_String (1 << 4) +#define cJSON_Array (1 << 5) +#define cJSON_Object (1 << 6) +#define cJSON_Raw (1 << 7) /* raw json */ + +#define cJSON_IsReference 256 +#define cJSON_StringIsConst 512 + +/* loader type declarations for allocation hooks */ +typedef struct VkAllocationCallbacks VkAllocationCallbacks; +struct loader_instance; + +/* The cJSON structure: */ +typedef struct cJSON { + /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ + struct cJSON *next; + struct cJSON *prev; + /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ + struct cJSON *child; + + /* The type of the item, as above. */ + int type; + + /* The item's string, if type==cJSON_String and type == cJSON_Raw */ + char *valuestring; + /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */ + int valueint; + /* The item's number, if type==cJSON_Number */ + double valuedouble; + + /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ + char *string; + /* pointer to the allocation callbacks to use */ + const VkAllocationCallbacks *pAllocator; +} cJSON; + +typedef int cJSON_bool; + +/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them. + * This is to prevent stack overflows. */ +#ifndef CJSON_NESTING_LIMIT +#define CJSON_NESTING_LIMIT 1000 +#endif + +/* Limits the length of circular references can be before cJSON rejects to parse them. + * This is to prevent stack overflows. */ +#ifndef CJSON_CIRCULAR_LIMIT +#define CJSON_CIRCULAR_LIMIT 10000 +#endif + +/* Memory Management: the caller is always responsible to free instthe results from all variants of loader_cJSON_Parse (with + * loader_cJSON_Delete) and loader_loader_cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The + * exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */ +/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */ +CJSON_PUBLIC(cJSON *) loader_cJSON_Parse(const VkAllocationCallbacks *pAllocator, const char *value, bool *out_of_memory); +CJSON_PUBLIC(cJSON *) +loader_cJSON_ParseWithLength(const VkAllocationCallbacks *pAllocator, const char *value, size_t buffer_length, bool *out_of_memory); +/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte + * parsed. */ +/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will + * match cJSON_GetErrorPtr(). */ +CJSON_PUBLIC(cJSON *) +loader_cJSON_ParseWithOpts(const VkAllocationCallbacks *pAllocator, const char *value, const char **return_parse_end, + cJSON_bool require_null_terminated, bool *out_of_memory); +CJSON_PUBLIC(cJSON *) +loader_cJSON_ParseWithLengthOpts(const VkAllocationCallbacks *pAllocator, const char *value, size_t buffer_length, + const char **return_parse_end, cJSON_bool require_null_terminated, bool *out_of_memory); + +/* Render a cJSON entity to text for transfer/storage. */ +TEST_FUNCTION_EXPORT CJSON_PUBLIC(char *) loader_cJSON_Print(const cJSON *item, bool *out_of_memory); +/* Render a cJSON entity to text for transfer/storage without any formatting. */ +CJSON_PUBLIC(char *) loader_cJSON_PrintUnformatted(const cJSON *item, bool *out_of_memory); +/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces + * reallocation. fmt=0 gives unformatted, =1 gives formatted */ +CJSON_PUBLIC(char *) +loader_cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt, bool *out_of_memory); +/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on + * failure. */ +/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you + * actually need */ +CJSON_PUBLIC(cJSON_bool) +loader_cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format); +/* Delete a cJSON entity and all subentities. */ +TEST_FUNCTION_EXPORT CJSON_PUBLIC(void) loader_cJSON_Delete(cJSON *item); + +/* Returns the number of items in an array (or object). */ +CJSON_PUBLIC(int) loader_cJSON_GetArraySize(const cJSON *array); +/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */ +CJSON_PUBLIC(cJSON *) loader_cJSON_GetArrayItem(const cJSON *array, int index); +/* Get item "string" from object. Case insensitive. */ +CJSON_PUBLIC(cJSON *) loader_cJSON_GetObjectItem(const cJSON *const object, const char *const string); +CJSON_PUBLIC(cJSON *) loader_cJSON_GetObjectItemCaseSensitive(const cJSON *const object, const char *const string); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_HasObjectItem(const cJSON *object, const char *string); +/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make + * sense of it. Defined when loader_cJSON_Parse() returns 0. 0 when loader_cJSON_Parse() succeeds. */ +CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void); + +/* Check item type and return its value */ +CJSON_PUBLIC(char *) loader_cJSON_GetStringValue(const cJSON *const item); +CJSON_PUBLIC(double) loader_cJSON_GetNumberValue(const cJSON *const item); + +/* These functions check the type of an item */ +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsInvalid(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsFalse(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsTrue(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsBool(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsNull(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsNumber(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsString(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsArray(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsObject(const cJSON *const item); +CJSON_PUBLIC(cJSON_bool) loader_cJSON_IsRaw(const cJSON *const item); + +/* Macro for iterating over an array or object */ +#define cJSON_ArrayForEach(element, array) \ + for (element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/local/recipes/libs/vulkan-loader/source/loader/debug_utils.c b/local/recipes/libs/vulkan-loader/source/loader/debug_utils.c new file mode 100644 index 0000000000..01d8baa467 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/debug_utils.c @@ -0,0 +1,727 @@ +/* + * Copyright (c) 2015-2021 The Khronos Group Inc. + * Copyright (c) 2015-2021 Valve Corporation + * Copyright (c) 2015-2021 LunarG, Inc. + * Copyright (C) 2015-2016 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. + * + * Author: Courtney Goeltzenleuchter + * Author: Jon Ashburn + * Author: Mark Young + * Author: Charles Giessen + * + */ + +#include +#include +#include +#include + +#include "vk_object_types.h" + +#include "allocation.h" +#include "debug_utils.h" +#include "log.h" +#include "loader.h" +#include "vk_loader_platform.h" + +// VK_EXT_debug_report related items + +VkResult util_CreateDebugUtilsMessenger(struct loader_instance *inst, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT messenger) { + VkLayerDbgFunctionNode *new_dbg_function_node = NULL; + + new_dbg_function_node = (VkLayerDbgFunctionNode *)loader_calloc_with_instance_fallback( + pAllocator, inst, sizeof(VkLayerDbgFunctionNode), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + + if (!new_dbg_function_node) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + new_dbg_function_node->is_messenger = true; + new_dbg_function_node->messenger.messenger = messenger; + new_dbg_function_node->messenger.pfnUserCallback = pCreateInfo->pfnUserCallback; + new_dbg_function_node->messenger.messageSeverity = pCreateInfo->messageSeverity; + new_dbg_function_node->messenger.messageType = pCreateInfo->messageType; + new_dbg_function_node->pUserData = pCreateInfo->pUserData; + new_dbg_function_node->pNext = inst->instance_only_dbg_function_head; + inst->instance_only_dbg_function_head = new_dbg_function_node; + inst->current_dbg_function_head = inst->instance_only_dbg_function_head; + + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL debug_utils_CreateDebugUtilsMessengerEXT(VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugUtilsMessengerEXT *pMessenger) { + struct loader_instance *inst = loader_get_instance(instance); + loader_platform_thread_lock_mutex(&loader_lock); + VkResult result = inst->disp->layer_inst_disp.CreateDebugUtilsMessengerEXT(inst->instance, pCreateInfo, pAllocator, pMessenger); + loader_platform_thread_unlock_mutex(&loader_lock); + return result; +} + +VkBool32 util_SubmitDebugUtilsMessageEXT(const struct loader_instance *inst, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData) { + VkBool32 bail = false; + + if (NULL != pCallbackData) { + VkLayerDbgFunctionNode *pTrav = inst->current_dbg_function_head; + VkDebugReportObjectTypeEXT object_type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; + VkDebugReportFlagsEXT object_flags = 0; + uint64_t object_handle = 0; + + debug_utils_AnnotFlagsToReportFlags(messageSeverity, messageTypes, &object_flags); + if (0 < pCallbackData->objectCount) { + debug_utils_AnnotObjectToDebugReportObject(pCallbackData->pObjects, &object_type, &object_handle); + } + while (pTrav) { + if (pTrav->is_messenger && (pTrav->messenger.messageSeverity & messageSeverity) && + (pTrav->messenger.messageType & messageTypes)) { + if (pTrav->messenger.pfnUserCallback(messageSeverity, messageTypes, pCallbackData, pTrav->pUserData)) { + bail = true; + } + } + if (!pTrav->is_messenger && pTrav->report.msgFlags & object_flags) { + if (pTrav->report.pfnMsgCallback(object_flags, object_type, object_handle, 0, pCallbackData->messageIdNumber, + pCallbackData->pMessageIdName, pCallbackData->pMessage, pTrav->pUserData)) { + bail = true; + } + } + pTrav = pTrav->pNext; + } + } + + return bail; +} + +void util_DestroyDebugUtilsMessenger(struct loader_instance *inst, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator) { + VkLayerDbgFunctionNode *pTrav = inst->current_dbg_function_head; + VkLayerDbgFunctionNode *pPrev = pTrav; + + while (pTrav) { + if (pTrav->is_messenger && pTrav->messenger.messenger == messenger) { + pPrev->pNext = pTrav->pNext; + if (inst->current_dbg_function_head == pTrav) inst->current_dbg_function_head = pTrav->pNext; + if (inst->instance_only_dbg_function_head == pTrav) inst->instance_only_dbg_function_head = pTrav->pNext; + loader_free_with_instance_fallback(pAllocator, inst, pTrav); + break; + } + pPrev = pTrav; + pTrav = pTrav->pNext; + } +} + +VkResult util_CreateDebugUtilsMessengers(struct loader_instance *inst, const void *pChain, + const VkAllocationCallbacks *pAllocator) { + const void *pNext = pChain; + while (pNext) { + VkBaseInStructure in_structure = {0}; + memcpy(&in_structure, pNext, sizeof(VkBaseInStructure)); + if (in_structure.sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) { + // Assign a unique handle to each messenger (just use the address of the VkDebugUtilsMessengerCreateInfoEXT) + // This is only being used this way due to it being for an 'anonymous' callback during instance creation + VkDebugUtilsMessengerEXT messenger_handle = (VkDebugUtilsMessengerEXT)(uintptr_t)pNext; + VkResult ret = util_CreateDebugUtilsMessenger(inst, (const VkDebugUtilsMessengerCreateInfoEXT *)pNext, pAllocator, + messenger_handle); + if (ret != VK_SUCCESS) { + return ret; + } + } + pNext = in_structure.pNext; + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL debug_utils_SubmitDebugUtilsMessageEXT(VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData) { + struct loader_instance *inst = loader_get_instance(instance); + + inst->disp->layer_inst_disp.SubmitDebugUtilsMessageEXT(inst->instance, messageSeverity, messageTypes, pCallbackData); +} + +VKAPI_ATTR void VKAPI_CALL debug_utils_DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator) { + struct loader_instance *inst = loader_get_instance(instance); + loader_platform_thread_lock_mutex(&loader_lock); + + inst->disp->layer_inst_disp.DestroyDebugUtilsMessengerEXT(inst->instance, messenger, pAllocator); + + loader_platform_thread_unlock_mutex(&loader_lock); +} + +// This is the instance chain terminator function for CreateDebugUtilsMessenger +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugUtilsMessengerEXT(VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugUtilsMessengerEXT *pMessenger) { + struct loader_instance *inst = (struct loader_instance *)instance; + VkResult res = VK_SUCCESS; + VkLayerDbgFunctionNode *new_dbg_func_node = NULL; + uint32_t next_index = 0; + + uint32_t *pNextIndex = loader_instance_heap_alloc(inst, sizeof(uint32_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (NULL == pNextIndex) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + res = loader_get_next_available_entry(inst, &inst->debug_utils_messengers_list, &next_index, pAllocator); + if (res != VK_SUCCESS) { + goto out; + } + + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term != NULL; icd_term = icd_term->next) { + if (icd_term->debug_utils_messenger_list.list == NULL) { + res = loader_init_generic_list(inst, (struct loader_generic_list *)&icd_term->debug_utils_messenger_list, + sizeof(VkDebugUtilsMessengerEXT)); + if (res != VK_SUCCESS) { + goto out; + } + } else if (icd_term->debug_utils_messenger_list.capacity <= next_index * sizeof(VkDebugUtilsMessengerEXT)) { + res = loader_resize_generic_list(inst, (struct loader_generic_list *)&icd_term->debug_utils_messenger_list); + if (res != VK_SUCCESS) { + goto out; + } + } + + if (icd_term->dispatch.CreateDebugUtilsMessengerEXT) { + res = icd_term->dispatch.CreateDebugUtilsMessengerEXT(icd_term->instance, pCreateInfo, pAllocator, + &icd_term->debug_utils_messenger_list.list[next_index]); + + if (res != VK_SUCCESS) { + goto out; + } + } + } + + // Setup the debug report callback in the terminator since a layer may want + // to grab the information itself (RenderDoc) and then return back to the + // user callback a sub-set of the messages. + new_dbg_func_node = (VkLayerDbgFunctionNode *)loader_calloc_with_instance_fallback( + pAllocator, inst, sizeof(VkLayerDbgFunctionNode), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (!new_dbg_func_node) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + new_dbg_func_node->is_messenger = true; + new_dbg_func_node->messenger.pfnUserCallback = pCreateInfo->pfnUserCallback; + new_dbg_func_node->messenger.messageSeverity = pCreateInfo->messageSeverity; + new_dbg_func_node->messenger.messageType = pCreateInfo->messageType; + new_dbg_func_node->pUserData = pCreateInfo->pUserData; + new_dbg_func_node->pNext = inst->current_dbg_function_head; + inst->current_dbg_function_head = new_dbg_func_node; + *pNextIndex = next_index; + *pMessenger = (VkDebugUtilsMessengerEXT)(uintptr_t)pNextIndex; + new_dbg_func_node->messenger.messenger = *pMessenger; + +out: + + // Roll back on errors + if (VK_SUCCESS != res) { + if (pNextIndex) { + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) { + if (icd_term->debug_utils_messenger_list.list && icd_term->debug_utils_messenger_list.list[next_index] && + NULL != icd_term->dispatch.DestroyDebugUtilsMessengerEXT) { + icd_term->dispatch.DestroyDebugUtilsMessengerEXT( + icd_term->instance, icd_term->debug_utils_messenger_list.list[next_index], pAllocator); + } + } + } + if (inst->debug_utils_messengers_list.list && + inst->debug_utils_messengers_list.capacity > (*pNextIndex) * sizeof(struct loader_used_object_status)) { + inst->debug_utils_messengers_list.list[*pNextIndex].status = VK_FALSE; + if (NULL != pAllocator) { + inst->debug_utils_messengers_list.list[*pNextIndex].allocation_callbacks = *pAllocator; + } + } + loader_free_with_instance_fallback(pAllocator, inst, new_dbg_func_node); + loader_free_with_instance_fallback(pAllocator, inst, pNextIndex); + } + + return res; +} + +// This is the instance chain terminator function for DestroyDebugUtilsMessenger +VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator) { + struct loader_instance *inst = (struct loader_instance *)instance; + uint32_t *debug_messenger_index = (uint32_t *)(uintptr_t)messenger; + // Make sure that messenger actually points to anything + if (NULL == debug_messenger_index) { + return; + } + + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) { + if (icd_term->debug_utils_messenger_list.list && icd_term->debug_utils_messenger_list.list[*debug_messenger_index] && + NULL != icd_term->dispatch.DestroyDebugUtilsMessengerEXT) { + icd_term->dispatch.DestroyDebugUtilsMessengerEXT( + icd_term->instance, icd_term->debug_utils_messenger_list.list[*debug_messenger_index], pAllocator); + } + } + + util_DestroyDebugUtilsMessenger(inst, messenger, pAllocator); + if (inst->debug_utils_messengers_list.list && + inst->debug_utils_messengers_list.capacity > (*debug_messenger_index) * sizeof(struct loader_used_object_status)) { + inst->debug_utils_messengers_list.list[*debug_messenger_index].status = VK_FALSE; + if (NULL != pAllocator) { + inst->debug_utils_messengers_list.list[*debug_messenger_index].allocation_callbacks = *pAllocator; + } + } + + loader_free_with_instance_fallback(pAllocator, inst, debug_messenger_index); +} + +// This is the instance chain terminator function for SubmitDebugUtilsMessageEXT +VKAPI_ATTR void VKAPI_CALL terminator_SubmitDebugUtilsMessageEXT(VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData) { + loader_platform_thread_lock_mutex(&loader_lock); + // NOTE: Just make the callback ourselves because there could be one or more ICDs that support this extension + // and each one will trigger the callback to the user. This would result in multiple callback triggers + // per message. Instead, if we get a messaged up to here, then just trigger the message ourselves and + // return. This would still allow the ICDs to trigger their own messages, but won't get any external ones. + struct loader_instance *inst = (struct loader_instance *)instance; + util_SubmitDebugUtilsMessageEXT(inst, messageSeverity, messageTypes, pCallbackData); + loader_platform_thread_unlock_mutex(&loader_lock); +} + +// VK_EXT_debug_report related items + +VkResult util_CreateDebugReportCallback(struct loader_instance *inst, const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackEXT callback) { + VkLayerDbgFunctionNode *new_dbg_func_node = NULL; + + new_dbg_func_node = (VkLayerDbgFunctionNode *)loader_calloc_with_instance_fallback( + pAllocator, inst, sizeof(VkLayerDbgFunctionNode), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (!new_dbg_func_node) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + new_dbg_func_node->is_messenger = false; + new_dbg_func_node->report.msgCallback = callback; + new_dbg_func_node->report.pfnMsgCallback = pCreateInfo->pfnCallback; + new_dbg_func_node->report.msgFlags = pCreateInfo->flags; + new_dbg_func_node->pUserData = pCreateInfo->pUserData; + new_dbg_func_node->pNext = inst->instance_only_dbg_function_head; + inst->instance_only_dbg_function_head = new_dbg_func_node; + inst->current_dbg_function_head = inst->instance_only_dbg_function_head; + + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL debug_utils_CreateDebugReportCallbackEXT(VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugReportCallbackEXT *pCallback) { + struct loader_instance *inst = loader_get_instance(instance); + loader_platform_thread_lock_mutex(&loader_lock); + VkResult result = inst->disp->layer_inst_disp.CreateDebugReportCallbackEXT(inst->instance, pCreateInfo, pAllocator, pCallback); + loader_platform_thread_unlock_mutex(&loader_lock); + return result; +} + +// Utility function to handle reporting +VkBool32 util_DebugReportMessage(const struct loader_instance *inst, VkFlags msgFlags, VkDebugReportObjectTypeEXT objectType, + uint64_t srcObject, size_t location, int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { + VkBool32 bail = false; + VkLayerDbgFunctionNode *pTrav = inst->current_dbg_function_head; + VkDebugUtilsMessageSeverityFlagBitsEXT severity; + VkDebugUtilsMessageTypeFlagsEXT types; + VkDebugUtilsMessengerCallbackDataEXT callback_data; + VkDebugUtilsObjectNameInfoEXT object_name; + + debug_utils_ReportFlagsToAnnotFlags(msgFlags, false, &severity, &types); + debug_utils_ReportObjectToAnnotObject(objectType, srcObject, &object_name); + + callback_data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; + callback_data.pNext = NULL; + callback_data.flags = 0; + callback_data.pMessageIdName = pLayerPrefix; + callback_data.messageIdNumber = msgCode; + callback_data.pMessage = pMsg; + callback_data.cmdBufLabelCount = 0; + callback_data.pCmdBufLabels = NULL; + callback_data.queueLabelCount = 0; + callback_data.pQueueLabels = NULL; + callback_data.objectCount = 1; + callback_data.pObjects = &object_name; + + while (pTrav) { + if (!pTrav->is_messenger && pTrav->report.msgFlags & msgFlags) { + if (pTrav->report.pfnMsgCallback(msgFlags, objectType, srcObject, location, msgCode, pLayerPrefix, pMsg, + pTrav->pUserData)) { + bail = true; + } + } + if (pTrav->is_messenger && (pTrav->messenger.messageSeverity & severity) && (pTrav->messenger.messageType & types)) { + if (pTrav->messenger.pfnUserCallback(severity, types, &callback_data, pTrav->pUserData)) { + bail = true; + } + } + + pTrav = pTrav->pNext; + } + + return bail; +} + +void util_DestroyDebugReportCallback(struct loader_instance *inst, VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks *pAllocator) { + VkLayerDbgFunctionNode *pTrav = inst->current_dbg_function_head; + VkLayerDbgFunctionNode *pPrev = pTrav; + + while (pTrav) { + if (!pTrav->is_messenger && pTrav->report.msgCallback == callback) { + pPrev->pNext = pTrav->pNext; + if (inst->current_dbg_function_head == pTrav) inst->current_dbg_function_head = pTrav->pNext; + if (inst->instance_only_dbg_function_head == pTrav) inst->instance_only_dbg_function_head = pTrav->pNext; + if (inst->current_dbg_function_head == pTrav) inst->current_dbg_function_head = pTrav->pNext; + loader_free_with_instance_fallback(pAllocator, inst, pTrav); + break; + } + pPrev = pTrav; + pTrav = pTrav->pNext; + } +} + +VkResult util_CreateDebugReportCallbacks(struct loader_instance *inst, const void *pChain, + const VkAllocationCallbacks *pAllocator) { + const void *pNext = pChain; + while (pNext) { + VkBaseInStructure in_structure = {0}; + memcpy(&in_structure, pNext, sizeof(VkBaseInStructure)); + if (in_structure.sType == VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT) { + // Assign a unique handle to each callback (just use the address of the VkDebugReportCallbackCreateInfoEXT): + // This is only being used this way due to it being for an 'anonymous' callback during instance creation + VkDebugReportCallbackEXT report_handle = (VkDebugReportCallbackEXT)(uintptr_t)pNext; + VkResult ret = + util_CreateDebugReportCallback(inst, (const VkDebugReportCallbackCreateInfoEXT *)pNext, pAllocator, report_handle); + if (ret != VK_SUCCESS) { + return ret; + } + } + pNext = in_structure.pNext; + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL debug_utils_DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks *pAllocator) { + struct loader_instance *inst = loader_get_instance(instance); + loader_platform_thread_lock_mutex(&loader_lock); + + inst->disp->layer_inst_disp.DestroyDebugReportCallbackEXT(inst->instance, callback, pAllocator); + + loader_platform_thread_unlock_mutex(&loader_lock); +} + +VKAPI_ATTR void VKAPI_CALL debug_utils_DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, + int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { + struct loader_instance *inst = loader_get_instance(instance); + + inst->disp->layer_inst_disp.DebugReportMessageEXT(inst->instance, flags, objType, object, location, msgCode, pLayerPrefix, + pMsg); +} + +// This is the instance chain terminator function +// for CreateDebugReportCallback +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugReportCallbackEXT(VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugReportCallbackEXT *pCallback) { + struct loader_instance *inst = (struct loader_instance *)instance; + VkResult res = VK_SUCCESS; + VkLayerDbgFunctionNode *new_dbg_func_node = NULL; + uint32_t next_index = 0; + + uint32_t *pNextIndex = loader_instance_heap_alloc(inst, sizeof(uint32_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (NULL == pNextIndex) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + res = loader_get_next_available_entry(inst, &inst->debug_report_callbacks_list, &next_index, pAllocator); + if (res != VK_SUCCESS) { + goto out; + } + + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term != NULL; icd_term = icd_term->next) { + if (icd_term->debug_report_callback_list.list == NULL) { + res = loader_init_generic_list(inst, (struct loader_generic_list *)&icd_term->debug_report_callback_list, + sizeof(VkDebugUtilsMessengerEXT)); + if (res != VK_SUCCESS) { + goto out; + } + } else if (icd_term->debug_report_callback_list.capacity <= next_index * sizeof(VkDebugReportCallbackEXT)) { + res = loader_resize_generic_list(inst, (struct loader_generic_list *)&icd_term->debug_report_callback_list); + if (res != VK_SUCCESS) { + goto out; + } + } + + if (icd_term->dispatch.CreateDebugReportCallbackEXT) { + res = icd_term->dispatch.CreateDebugReportCallbackEXT(icd_term->instance, pCreateInfo, pAllocator, + &icd_term->debug_report_callback_list.list[next_index]); + + if (res != VK_SUCCESS) { + goto out; + } + } + } + + // Setup the debug report callback in the terminator since a layer may want + // to grab the information itself (RenderDoc) and then return back to the + // user callback a sub-set of the messages. + new_dbg_func_node = (VkLayerDbgFunctionNode *)loader_calloc_with_instance_fallback( + pAllocator, inst, sizeof(VkLayerDbgFunctionNode), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + + if (!new_dbg_func_node) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + new_dbg_func_node->is_messenger = false; + new_dbg_func_node->report.pfnMsgCallback = pCreateInfo->pfnCallback; + new_dbg_func_node->report.msgFlags = pCreateInfo->flags; + new_dbg_func_node->pUserData = pCreateInfo->pUserData; + new_dbg_func_node->pNext = inst->current_dbg_function_head; + inst->current_dbg_function_head = new_dbg_func_node; + *pNextIndex = next_index; + *pCallback = (VkDebugReportCallbackEXT)(uintptr_t)pNextIndex; + new_dbg_func_node->report.msgCallback = *pCallback; + +out: + + // Roll back on errors + if (VK_SUCCESS != res) { + if (pNextIndex) { + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) { + if (icd_term->debug_report_callback_list.list && icd_term->debug_report_callback_list.list[next_index] && + NULL != icd_term->dispatch.DestroyDebugReportCallbackEXT) { + icd_term->dispatch.DestroyDebugReportCallbackEXT( + icd_term->instance, icd_term->debug_report_callback_list.list[next_index], pAllocator); + } + } + } + if (inst->debug_report_callbacks_list.list && + inst->debug_report_callbacks_list.capacity > (*pNextIndex) * sizeof(struct loader_used_object_status)) { + inst->debug_report_callbacks_list.list[*pNextIndex].status = VK_FALSE; + if (NULL != pAllocator) { + inst->debug_report_callbacks_list.list[*pNextIndex].allocation_callbacks = *pAllocator; + } + } + loader_free_with_instance_fallback(pAllocator, inst, new_dbg_func_node); + loader_free_with_instance_fallback(pAllocator, inst, pNextIndex); + } + + return res; +} + +// This is the instance chain terminator function for DestroyDebugReportCallback +VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks *pAllocator) { + struct loader_instance *inst = (struct loader_instance *)instance; + uint32_t *debug_report_index = (uint32_t *)(uintptr_t)callback; + // Make sure that callback actually points to anything + if (NULL == debug_report_index) { + return; + } + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) { + if (icd_term->debug_report_callback_list.list && icd_term->debug_report_callback_list.list[*debug_report_index] && + NULL != icd_term->dispatch.DestroyDebugReportCallbackEXT) { + icd_term->dispatch.DestroyDebugReportCallbackEXT( + icd_term->instance, icd_term->debug_report_callback_list.list[*debug_report_index], pAllocator); + } + } + + util_DestroyDebugReportCallback(inst, callback, pAllocator); + if (inst->debug_report_callbacks_list.list && + inst->debug_report_callbacks_list.capacity > (*debug_report_index) * sizeof(struct loader_used_object_status)) { + inst->debug_report_callbacks_list.list[*debug_report_index].status = VK_FALSE; + if (NULL != pAllocator) { + inst->debug_report_callbacks_list.list[*debug_report_index].allocation_callbacks = *pAllocator; + } + } + loader_free_with_instance_fallback(pAllocator, inst, debug_report_index); +} + +// This is the instance chain terminator function for DebugReportMessage +VKAPI_ATTR void VKAPI_CALL terminator_DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, + int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { + const struct loader_icd_term *icd_term; + + struct loader_instance *inst = (struct loader_instance *)instance; + + loader_platform_thread_lock_mutex(&loader_lock); + for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) { + if (icd_term->dispatch.DebugReportMessageEXT != NULL) { + icd_term->dispatch.DebugReportMessageEXT(icd_term->instance, flags, objType, object, location, msgCode, pLayerPrefix, + pMsg); + } + } + + // Now that all ICDs have seen the message, call the necessary callbacks. Ignoring "bail" return value + // as there is nothing to bail from at this point. + + util_DebugReportMessage(inst, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); + + loader_platform_thread_unlock_mutex(&loader_lock); +} + +// General utilities + +const VkExtensionProperties debug_utils_extension_info[] = { + {VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}, + {VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION}, +}; + +void destroy_debug_callbacks_chain(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator) { + VkLayerDbgFunctionNode *pTrav = inst->current_dbg_function_head; + VkLayerDbgFunctionNode *pNext = NULL; + while (pTrav) { + pNext = pTrav->pNext; + loader_free_with_instance_fallback(pAllocator, inst, pTrav); + pTrav = pNext; + } + inst->current_dbg_function_head = NULL; +} + +VkResult add_debug_extensions_to_ext_list(const struct loader_instance *inst, struct loader_extension_list *ext_list) { + return loader_add_to_ext_list(inst, ext_list, sizeof(debug_utils_extension_info) / sizeof(VkExtensionProperties), + debug_utils_extension_info); +} + +bool debug_extensions_InstanceGpa(struct loader_instance *ptr_instance, const char *name, void **addr) { + bool ret_type = false; + + *addr = NULL; + + if (!strcmp("vkCreateDebugReportCallbackEXT", name)) { + *addr = ptr_instance->enabled_extensions.ext_debug_report == 1 ? (void *)debug_utils_CreateDebugReportCallbackEXT : NULL; + ret_type = true; + } else if (!strcmp("vkDestroyDebugReportCallbackEXT", name)) { + *addr = ptr_instance->enabled_extensions.ext_debug_report == 1 ? (void *)debug_utils_DestroyDebugReportCallbackEXT : NULL; + ret_type = true; + } else if (!strcmp("vkDebugReportMessageEXT", name)) { + *addr = ptr_instance->enabled_extensions.ext_debug_report == 1 ? (void *)debug_utils_DebugReportMessageEXT : NULL; + return true; + } + if (!strcmp("vkCreateDebugUtilsMessengerEXT", name)) { + *addr = ptr_instance->enabled_extensions.ext_debug_utils == 1 ? (void *)debug_utils_CreateDebugUtilsMessengerEXT : NULL; + ret_type = true; + } else if (!strcmp("vkDestroyDebugUtilsMessengerEXT", name)) { + *addr = ptr_instance->enabled_extensions.ext_debug_utils == 1 ? (void *)debug_utils_DestroyDebugUtilsMessengerEXT : NULL; + ret_type = true; + } else if (!strcmp("vkSubmitDebugUtilsMessageEXT", name)) { + *addr = ptr_instance->enabled_extensions.ext_debug_utils == 1 ? (void *)debug_utils_SubmitDebugUtilsMessageEXT : NULL; + ret_type = true; + } + + return ret_type; +} + +bool debug_utils_ReportFlagsToAnnotFlags(VkDebugReportFlagsEXT dr_flags, bool default_flag_is_spec, + VkDebugUtilsMessageSeverityFlagBitsEXT *da_severity, + VkDebugUtilsMessageTypeFlagsEXT *da_type) { + bool type_set = false; + if (NULL == da_severity || NULL == da_type) { + return false; + } + *da_type = 0; + *da_severity = 0; + + if ((dr_flags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT) != 0) { + *da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + *da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + type_set = true; + } else if ((dr_flags & (VK_DEBUG_REPORT_WARNING_BIT_EXT | VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)) != 0) { + *da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; + } else if ((dr_flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) != 0) { + *da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + } else if ((dr_flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) != 0) { + *da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT; + *da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + type_set = true; + } + + if ((dr_flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) != 0) { + *da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + } else if (!type_set) { + if (default_flag_is_spec) { + *da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + } else { + *da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + } + } + + return true; +} + +bool debug_utils_AnnotFlagsToReportFlags(VkDebugUtilsMessageSeverityFlagBitsEXT da_severity, + VkDebugUtilsMessageTypeFlagsEXT da_type, VkDebugReportFlagsEXT *dr_flags) { + if (NULL == dr_flags) { + return false; + } + + *dr_flags = 0; + + if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0) { + *dr_flags |= VK_DEBUG_REPORT_ERROR_BIT_EXT; + } else if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0) { + if ((da_type & VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) != 0) { + *dr_flags |= VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT; + } else { + *dr_flags |= VK_DEBUG_REPORT_WARNING_BIT_EXT; + } + } else if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0) { + *dr_flags |= VK_DEBUG_REPORT_INFORMATION_BIT_EXT; + } else if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0) { + *dr_flags |= VK_DEBUG_REPORT_DEBUG_BIT_EXT; + } + + return true; +} + +bool debug_utils_ReportObjectToAnnotObject(VkDebugReportObjectTypeEXT dr_object_type, uint64_t object_handle, + VkDebugUtilsObjectNameInfoEXT *da_object_name_info) { + if (NULL == da_object_name_info) { + return false; + } + da_object_name_info->sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + da_object_name_info->pNext = NULL; + da_object_name_info->objectHandle = (uint64_t)(uintptr_t)object_handle; + da_object_name_info->pObjectName = NULL; + da_object_name_info->objectType = convertDebugReportObjectToCoreObject(dr_object_type); + return true; +} + +bool debug_utils_AnnotObjectToDebugReportObject(const VkDebugUtilsObjectNameInfoEXT *da_object_name_info, + VkDebugReportObjectTypeEXT *dr_object_type, uint64_t *dr_object_handle) { + if (NULL == da_object_name_info || NULL == dr_object_type || NULL == dr_object_handle) { + return false; + } + *dr_object_type = convertCoreObjectToDebugReportObject(da_object_name_info->objectType); + *dr_object_handle = da_object_name_info->objectHandle; + return true; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/debug_utils.h b/local/recipes/libs/vulkan-loader/source/loader/debug_utils.h new file mode 100644 index 0000000000..9472ef9474 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/debug_utils.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2015-2021 The Khronos Group Inc. + * Copyright (c) 2015-2021 Valve Corporation + * Copyright (c) 2015-2021 LunarG, Inc. + * Copyright (C) 2015-2016 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. + * + * Author: Courtney Goeltzenleuchter + * Author: Jon Ashburn + * Author: Mark Young + * Author: Charles Giessen + */ + +#pragma once + +#include "loader_common.h" + +// General utilities + +VkResult add_debug_extensions_to_ext_list(const struct loader_instance *inst, struct loader_extension_list *ext_list); +void check_for_enabled_debug_extensions(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo); +bool debug_extensions_InstanceGpa(struct loader_instance *ptr_instance, const char *name, void **addr); +bool debug_utils_ReportFlagsToAnnotFlags(VkDebugReportFlagsEXT dr_flags, bool default_flag_is_spec, + VkDebugUtilsMessageSeverityFlagBitsEXT *da_severity, + VkDebugUtilsMessageTypeFlagsEXT *da_type); +bool debug_utils_AnnotFlagsToReportFlags(VkDebugUtilsMessageSeverityFlagBitsEXT da_severity, + VkDebugUtilsMessageTypeFlagsEXT da_type, VkDebugReportFlagsEXT *dr_flags); +bool debug_utils_ReportObjectToAnnotObject(VkDebugReportObjectTypeEXT dr_object_type, uint64_t object_handle, + VkDebugUtilsObjectNameInfoEXT *da_object_name_info); +bool debug_utils_AnnotObjectToDebugReportObject(const VkDebugUtilsObjectNameInfoEXT *da_object_name_info, + VkDebugReportObjectTypeEXT *dr_object_type, uint64_t *dr_object_handle); + +void destroy_debug_callbacks_chain(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator); + +// VK_EXT_debug_utils related items + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugUtilsMessengerEXT(VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugUtilsMessengerEXT *pMessenger); +VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator); +VKAPI_ATTR void VKAPI_CALL terminator_SubmitDebugUtilsMessageEXT(VkInstance instance, + VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData); +VkResult util_CreateDebugUtilsMessengers(struct loader_instance *inst, const void *pChain, const VkAllocationCallbacks *pAllocator); +VkBool32 util_SubmitDebugUtilsMessageEXT(const struct loader_instance *inst, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData); + +// VK_EXT_debug_report related items + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugReportCallbackEXT(VkInstance instance, + const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugReportCallbackEXT *pCallback); + +VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks *pAllocator); + +VKAPI_ATTR void VKAPI_CALL terminator_DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, + int32_t msgCode, const char *pLayerPrefix, const char *pMsg); + +VkResult util_CreateDebugReportCallbacks(struct loader_instance *inst, const void *pChain, const VkAllocationCallbacks *pAllocator); +VkBool32 util_DebugReportMessage(const struct loader_instance *inst, VkFlags msgFlags, VkDebugReportObjectTypeEXT objectType, + uint64_t srcObject, size_t location, int32_t msgCode, const char *pLayerPrefix, const char *pMsg); diff --git a/local/recipes/libs/vulkan-loader/source/loader/dev_ext_trampoline.c b/local/recipes/libs/vulkan-loader/source/loader/dev_ext_trampoline.c new file mode 100644 index 0000000000..91ad384952 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/dev_ext_trampoline.c @@ -0,0 +1,544 @@ +/* + * Copyright (c) 2015-2016 The Khronos Group Inc. + * Copyright (c) 2015-2016 Valve Corporation + * Copyright (c) 2015-2016 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Lenny Komow + */ + +#include +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC optimize(3) // force gcc to use tail-calls +#endif + +// The asm declaration prevents name mangling which is necessary for macOS +#if defined(MODIFY_UNKNOWN_FUNCTION_DECLS) +#define ASM_NAME(name) __asm(name) +#else +#define ASM_NAME(name) +#endif + +// Clang-format does not understand macros. +// clang-format off + +VKAPI_ATTR void VKAPI_CALL vkdev_ext0(VkDevice device) ASM_NAME("vkdev_ext0"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext1(VkDevice device) ASM_NAME("vkdev_ext1"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext2(VkDevice device) ASM_NAME("vkdev_ext2"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext3(VkDevice device) ASM_NAME("vkdev_ext3"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext4(VkDevice device) ASM_NAME("vkdev_ext4"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext5(VkDevice device) ASM_NAME("vkdev_ext5"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext6(VkDevice device) ASM_NAME("vkdev_ext6"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext7(VkDevice device) ASM_NAME("vkdev_ext7"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext8(VkDevice device) ASM_NAME("vkdev_ext8"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext9(VkDevice device) ASM_NAME("vkdev_ext9"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext10(VkDevice device) ASM_NAME("vkdev_ext10"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext11(VkDevice device) ASM_NAME("vkdev_ext11"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext12(VkDevice device) ASM_NAME("vkdev_ext12"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext13(VkDevice device) ASM_NAME("vkdev_ext13"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext14(VkDevice device) ASM_NAME("vkdev_ext14"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext15(VkDevice device) ASM_NAME("vkdev_ext15"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext16(VkDevice device) ASM_NAME("vkdev_ext16"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext17(VkDevice device) ASM_NAME("vkdev_ext17"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext18(VkDevice device) ASM_NAME("vkdev_ext18"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext19(VkDevice device) ASM_NAME("vkdev_ext19"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext20(VkDevice device) ASM_NAME("vkdev_ext20"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext21(VkDevice device) ASM_NAME("vkdev_ext21"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext22(VkDevice device) ASM_NAME("vkdev_ext22"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext23(VkDevice device) ASM_NAME("vkdev_ext23"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext24(VkDevice device) ASM_NAME("vkdev_ext24"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext25(VkDevice device) ASM_NAME("vkdev_ext25"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext26(VkDevice device) ASM_NAME("vkdev_ext26"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext27(VkDevice device) ASM_NAME("vkdev_ext27"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext28(VkDevice device) ASM_NAME("vkdev_ext28"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext29(VkDevice device) ASM_NAME("vkdev_ext29"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext30(VkDevice device) ASM_NAME("vkdev_ext30"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext31(VkDevice device) ASM_NAME("vkdev_ext31"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext32(VkDevice device) ASM_NAME("vkdev_ext32"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext33(VkDevice device) ASM_NAME("vkdev_ext33"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext34(VkDevice device) ASM_NAME("vkdev_ext34"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext35(VkDevice device) ASM_NAME("vkdev_ext35"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext36(VkDevice device) ASM_NAME("vkdev_ext36"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext37(VkDevice device) ASM_NAME("vkdev_ext37"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext38(VkDevice device) ASM_NAME("vkdev_ext38"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext39(VkDevice device) ASM_NAME("vkdev_ext39"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext40(VkDevice device) ASM_NAME("vkdev_ext40"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext41(VkDevice device) ASM_NAME("vkdev_ext41"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext42(VkDevice device) ASM_NAME("vkdev_ext42"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext43(VkDevice device) ASM_NAME("vkdev_ext43"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext44(VkDevice device) ASM_NAME("vkdev_ext44"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext45(VkDevice device) ASM_NAME("vkdev_ext45"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext46(VkDevice device) ASM_NAME("vkdev_ext46"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext47(VkDevice device) ASM_NAME("vkdev_ext47"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext48(VkDevice device) ASM_NAME("vkdev_ext48"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext49(VkDevice device) ASM_NAME("vkdev_ext49"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext50(VkDevice device) ASM_NAME("vkdev_ext50"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext51(VkDevice device) ASM_NAME("vkdev_ext51"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext52(VkDevice device) ASM_NAME("vkdev_ext52"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext53(VkDevice device) ASM_NAME("vkdev_ext53"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext54(VkDevice device) ASM_NAME("vkdev_ext54"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext55(VkDevice device) ASM_NAME("vkdev_ext55"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext56(VkDevice device) ASM_NAME("vkdev_ext56"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext57(VkDevice device) ASM_NAME("vkdev_ext57"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext58(VkDevice device) ASM_NAME("vkdev_ext58"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext59(VkDevice device) ASM_NAME("vkdev_ext59"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext60(VkDevice device) ASM_NAME("vkdev_ext60"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext61(VkDevice device) ASM_NAME("vkdev_ext61"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext62(VkDevice device) ASM_NAME("vkdev_ext62"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext63(VkDevice device) ASM_NAME("vkdev_ext63"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext64(VkDevice device) ASM_NAME("vkdev_ext64"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext65(VkDevice device) ASM_NAME("vkdev_ext65"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext66(VkDevice device) ASM_NAME("vkdev_ext66"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext67(VkDevice device) ASM_NAME("vkdev_ext67"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext68(VkDevice device) ASM_NAME("vkdev_ext68"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext69(VkDevice device) ASM_NAME("vkdev_ext69"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext70(VkDevice device) ASM_NAME("vkdev_ext70"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext71(VkDevice device) ASM_NAME("vkdev_ext71"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext72(VkDevice device) ASM_NAME("vkdev_ext72"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext73(VkDevice device) ASM_NAME("vkdev_ext73"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext74(VkDevice device) ASM_NAME("vkdev_ext74"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext75(VkDevice device) ASM_NAME("vkdev_ext75"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext76(VkDevice device) ASM_NAME("vkdev_ext76"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext77(VkDevice device) ASM_NAME("vkdev_ext77"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext78(VkDevice device) ASM_NAME("vkdev_ext78"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext79(VkDevice device) ASM_NAME("vkdev_ext79"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext80(VkDevice device) ASM_NAME("vkdev_ext80"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext81(VkDevice device) ASM_NAME("vkdev_ext81"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext82(VkDevice device) ASM_NAME("vkdev_ext82"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext83(VkDevice device) ASM_NAME("vkdev_ext83"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext84(VkDevice device) ASM_NAME("vkdev_ext84"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext85(VkDevice device) ASM_NAME("vkdev_ext85"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext86(VkDevice device) ASM_NAME("vkdev_ext86"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext87(VkDevice device) ASM_NAME("vkdev_ext87"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext88(VkDevice device) ASM_NAME("vkdev_ext88"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext89(VkDevice device) ASM_NAME("vkdev_ext89"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext90(VkDevice device) ASM_NAME("vkdev_ext90"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext91(VkDevice device) ASM_NAME("vkdev_ext91"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext92(VkDevice device) ASM_NAME("vkdev_ext92"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext93(VkDevice device) ASM_NAME("vkdev_ext93"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext94(VkDevice device) ASM_NAME("vkdev_ext94"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext95(VkDevice device) ASM_NAME("vkdev_ext95"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext96(VkDevice device) ASM_NAME("vkdev_ext96"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext97(VkDevice device) ASM_NAME("vkdev_ext97"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext98(VkDevice device) ASM_NAME("vkdev_ext98"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext99(VkDevice device) ASM_NAME("vkdev_ext99"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext100(VkDevice device) ASM_NAME("vkdev_ext100"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext101(VkDevice device) ASM_NAME("vkdev_ext101"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext102(VkDevice device) ASM_NAME("vkdev_ext102"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext103(VkDevice device) ASM_NAME("vkdev_ext103"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext104(VkDevice device) ASM_NAME("vkdev_ext104"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext105(VkDevice device) ASM_NAME("vkdev_ext105"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext106(VkDevice device) ASM_NAME("vkdev_ext106"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext107(VkDevice device) ASM_NAME("vkdev_ext107"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext108(VkDevice device) ASM_NAME("vkdev_ext108"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext109(VkDevice device) ASM_NAME("vkdev_ext109"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext110(VkDevice device) ASM_NAME("vkdev_ext110"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext111(VkDevice device) ASM_NAME("vkdev_ext111"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext112(VkDevice device) ASM_NAME("vkdev_ext112"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext113(VkDevice device) ASM_NAME("vkdev_ext113"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext114(VkDevice device) ASM_NAME("vkdev_ext114"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext115(VkDevice device) ASM_NAME("vkdev_ext115"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext116(VkDevice device) ASM_NAME("vkdev_ext116"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext117(VkDevice device) ASM_NAME("vkdev_ext117"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext118(VkDevice device) ASM_NAME("vkdev_ext118"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext119(VkDevice device) ASM_NAME("vkdev_ext119"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext120(VkDevice device) ASM_NAME("vkdev_ext120"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext121(VkDevice device) ASM_NAME("vkdev_ext121"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext122(VkDevice device) ASM_NAME("vkdev_ext122"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext123(VkDevice device) ASM_NAME("vkdev_ext123"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext124(VkDevice device) ASM_NAME("vkdev_ext124"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext125(VkDevice device) ASM_NAME("vkdev_ext125"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext126(VkDevice device) ASM_NAME("vkdev_ext126"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext127(VkDevice device) ASM_NAME("vkdev_ext127"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext128(VkDevice device) ASM_NAME("vkdev_ext128"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext129(VkDevice device) ASM_NAME("vkdev_ext129"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext130(VkDevice device) ASM_NAME("vkdev_ext130"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext131(VkDevice device) ASM_NAME("vkdev_ext131"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext132(VkDevice device) ASM_NAME("vkdev_ext132"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext133(VkDevice device) ASM_NAME("vkdev_ext133"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext134(VkDevice device) ASM_NAME("vkdev_ext134"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext135(VkDevice device) ASM_NAME("vkdev_ext135"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext136(VkDevice device) ASM_NAME("vkdev_ext136"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext137(VkDevice device) ASM_NAME("vkdev_ext137"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext138(VkDevice device) ASM_NAME("vkdev_ext138"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext139(VkDevice device) ASM_NAME("vkdev_ext139"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext140(VkDevice device) ASM_NAME("vkdev_ext140"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext141(VkDevice device) ASM_NAME("vkdev_ext141"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext142(VkDevice device) ASM_NAME("vkdev_ext142"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext143(VkDevice device) ASM_NAME("vkdev_ext143"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext144(VkDevice device) ASM_NAME("vkdev_ext144"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext145(VkDevice device) ASM_NAME("vkdev_ext145"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext146(VkDevice device) ASM_NAME("vkdev_ext146"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext147(VkDevice device) ASM_NAME("vkdev_ext147"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext148(VkDevice device) ASM_NAME("vkdev_ext148"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext149(VkDevice device) ASM_NAME("vkdev_ext149"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext150(VkDevice device) ASM_NAME("vkdev_ext150"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext151(VkDevice device) ASM_NAME("vkdev_ext151"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext152(VkDevice device) ASM_NAME("vkdev_ext152"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext153(VkDevice device) ASM_NAME("vkdev_ext153"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext154(VkDevice device) ASM_NAME("vkdev_ext154"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext155(VkDevice device) ASM_NAME("vkdev_ext155"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext156(VkDevice device) ASM_NAME("vkdev_ext156"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext157(VkDevice device) ASM_NAME("vkdev_ext157"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext158(VkDevice device) ASM_NAME("vkdev_ext158"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext159(VkDevice device) ASM_NAME("vkdev_ext159"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext160(VkDevice device) ASM_NAME("vkdev_ext160"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext161(VkDevice device) ASM_NAME("vkdev_ext161"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext162(VkDevice device) ASM_NAME("vkdev_ext162"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext163(VkDevice device) ASM_NAME("vkdev_ext163"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext164(VkDevice device) ASM_NAME("vkdev_ext164"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext165(VkDevice device) ASM_NAME("vkdev_ext165"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext166(VkDevice device) ASM_NAME("vkdev_ext166"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext167(VkDevice device) ASM_NAME("vkdev_ext167"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext168(VkDevice device) ASM_NAME("vkdev_ext168"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext169(VkDevice device) ASM_NAME("vkdev_ext169"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext170(VkDevice device) ASM_NAME("vkdev_ext170"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext171(VkDevice device) ASM_NAME("vkdev_ext171"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext172(VkDevice device) ASM_NAME("vkdev_ext172"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext173(VkDevice device) ASM_NAME("vkdev_ext173"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext174(VkDevice device) ASM_NAME("vkdev_ext174"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext175(VkDevice device) ASM_NAME("vkdev_ext175"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext176(VkDevice device) ASM_NAME("vkdev_ext176"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext177(VkDevice device) ASM_NAME("vkdev_ext177"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext178(VkDevice device) ASM_NAME("vkdev_ext178"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext179(VkDevice device) ASM_NAME("vkdev_ext179"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext180(VkDevice device) ASM_NAME("vkdev_ext180"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext181(VkDevice device) ASM_NAME("vkdev_ext181"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext182(VkDevice device) ASM_NAME("vkdev_ext182"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext183(VkDevice device) ASM_NAME("vkdev_ext183"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext184(VkDevice device) ASM_NAME("vkdev_ext184"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext185(VkDevice device) ASM_NAME("vkdev_ext185"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext186(VkDevice device) ASM_NAME("vkdev_ext186"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext187(VkDevice device) ASM_NAME("vkdev_ext187"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext188(VkDevice device) ASM_NAME("vkdev_ext188"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext189(VkDevice device) ASM_NAME("vkdev_ext189"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext190(VkDevice device) ASM_NAME("vkdev_ext190"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext191(VkDevice device) ASM_NAME("vkdev_ext191"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext192(VkDevice device) ASM_NAME("vkdev_ext192"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext193(VkDevice device) ASM_NAME("vkdev_ext193"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext194(VkDevice device) ASM_NAME("vkdev_ext194"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext195(VkDevice device) ASM_NAME("vkdev_ext195"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext196(VkDevice device) ASM_NAME("vkdev_ext196"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext197(VkDevice device) ASM_NAME("vkdev_ext197"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext198(VkDevice device) ASM_NAME("vkdev_ext198"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext199(VkDevice device) ASM_NAME("vkdev_ext199"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext200(VkDevice device) ASM_NAME("vkdev_ext200"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext201(VkDevice device) ASM_NAME("vkdev_ext201"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext202(VkDevice device) ASM_NAME("vkdev_ext202"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext203(VkDevice device) ASM_NAME("vkdev_ext203"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext204(VkDevice device) ASM_NAME("vkdev_ext204"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext205(VkDevice device) ASM_NAME("vkdev_ext205"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext206(VkDevice device) ASM_NAME("vkdev_ext206"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext207(VkDevice device) ASM_NAME("vkdev_ext207"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext208(VkDevice device) ASM_NAME("vkdev_ext208"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext209(VkDevice device) ASM_NAME("vkdev_ext209"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext210(VkDevice device) ASM_NAME("vkdev_ext210"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext211(VkDevice device) ASM_NAME("vkdev_ext211"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext212(VkDevice device) ASM_NAME("vkdev_ext212"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext213(VkDevice device) ASM_NAME("vkdev_ext213"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext214(VkDevice device) ASM_NAME("vkdev_ext214"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext215(VkDevice device) ASM_NAME("vkdev_ext215"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext216(VkDevice device) ASM_NAME("vkdev_ext216"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext217(VkDevice device) ASM_NAME("vkdev_ext217"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext218(VkDevice device) ASM_NAME("vkdev_ext218"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext219(VkDevice device) ASM_NAME("vkdev_ext219"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext220(VkDevice device) ASM_NAME("vkdev_ext220"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext221(VkDevice device) ASM_NAME("vkdev_ext221"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext222(VkDevice device) ASM_NAME("vkdev_ext222"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext223(VkDevice device) ASM_NAME("vkdev_ext223"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext224(VkDevice device) ASM_NAME("vkdev_ext224"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext225(VkDevice device) ASM_NAME("vkdev_ext225"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext226(VkDevice device) ASM_NAME("vkdev_ext226"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext227(VkDevice device) ASM_NAME("vkdev_ext227"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext228(VkDevice device) ASM_NAME("vkdev_ext228"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext229(VkDevice device) ASM_NAME("vkdev_ext229"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext230(VkDevice device) ASM_NAME("vkdev_ext230"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext231(VkDevice device) ASM_NAME("vkdev_ext231"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext232(VkDevice device) ASM_NAME("vkdev_ext232"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext233(VkDevice device) ASM_NAME("vkdev_ext233"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext234(VkDevice device) ASM_NAME("vkdev_ext234"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext235(VkDevice device) ASM_NAME("vkdev_ext235"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext236(VkDevice device) ASM_NAME("vkdev_ext236"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext237(VkDevice device) ASM_NAME("vkdev_ext237"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext238(VkDevice device) ASM_NAME("vkdev_ext238"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext239(VkDevice device) ASM_NAME("vkdev_ext239"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext240(VkDevice device) ASM_NAME("vkdev_ext240"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext241(VkDevice device) ASM_NAME("vkdev_ext241"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext242(VkDevice device) ASM_NAME("vkdev_ext242"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext243(VkDevice device) ASM_NAME("vkdev_ext243"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext244(VkDevice device) ASM_NAME("vkdev_ext244"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext245(VkDevice device) ASM_NAME("vkdev_ext245"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext246(VkDevice device) ASM_NAME("vkdev_ext246"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext247(VkDevice device) ASM_NAME("vkdev_ext247"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext248(VkDevice device) ASM_NAME("vkdev_ext248"); +VKAPI_ATTR void VKAPI_CALL vkdev_ext249(VkDevice device) ASM_NAME("vkdev_ext249"); + +void *loader_get_dev_ext_trampoline(uint32_t index) { + switch (index) { +#define CASE_HANDLE(num) case num: return vkdev_ext##num + CASE_HANDLE(0); + CASE_HANDLE(1); + CASE_HANDLE(2); + CASE_HANDLE(3); + CASE_HANDLE(4); + CASE_HANDLE(5); + CASE_HANDLE(6); + CASE_HANDLE(7); + CASE_HANDLE(8); + CASE_HANDLE(9); + CASE_HANDLE(10); + CASE_HANDLE(11); + CASE_HANDLE(12); + CASE_HANDLE(13); + CASE_HANDLE(14); + CASE_HANDLE(15); + CASE_HANDLE(16); + CASE_HANDLE(17); + CASE_HANDLE(18); + CASE_HANDLE(19); + CASE_HANDLE(20); + CASE_HANDLE(21); + CASE_HANDLE(22); + CASE_HANDLE(23); + CASE_HANDLE(24); + CASE_HANDLE(25); + CASE_HANDLE(26); + CASE_HANDLE(27); + CASE_HANDLE(28); + CASE_HANDLE(29); + CASE_HANDLE(30); + CASE_HANDLE(31); + CASE_HANDLE(32); + CASE_HANDLE(33); + CASE_HANDLE(34); + CASE_HANDLE(35); + CASE_HANDLE(36); + CASE_HANDLE(37); + CASE_HANDLE(38); + CASE_HANDLE(39); + CASE_HANDLE(40); + CASE_HANDLE(41); + CASE_HANDLE(42); + CASE_HANDLE(43); + CASE_HANDLE(44); + CASE_HANDLE(45); + CASE_HANDLE(46); + CASE_HANDLE(47); + CASE_HANDLE(48); + CASE_HANDLE(49); + CASE_HANDLE(50); + CASE_HANDLE(51); + CASE_HANDLE(52); + CASE_HANDLE(53); + CASE_HANDLE(54); + CASE_HANDLE(55); + CASE_HANDLE(56); + CASE_HANDLE(57); + CASE_HANDLE(58); + CASE_HANDLE(59); + CASE_HANDLE(60); + CASE_HANDLE(61); + CASE_HANDLE(62); + CASE_HANDLE(63); + CASE_HANDLE(64); + CASE_HANDLE(65); + CASE_HANDLE(66); + CASE_HANDLE(67); + CASE_HANDLE(68); + CASE_HANDLE(69); + CASE_HANDLE(70); + CASE_HANDLE(71); + CASE_HANDLE(72); + CASE_HANDLE(73); + CASE_HANDLE(74); + CASE_HANDLE(75); + CASE_HANDLE(76); + CASE_HANDLE(77); + CASE_HANDLE(78); + CASE_HANDLE(79); + CASE_HANDLE(80); + CASE_HANDLE(81); + CASE_HANDLE(82); + CASE_HANDLE(83); + CASE_HANDLE(84); + CASE_HANDLE(85); + CASE_HANDLE(86); + CASE_HANDLE(87); + CASE_HANDLE(88); + CASE_HANDLE(89); + CASE_HANDLE(90); + CASE_HANDLE(91); + CASE_HANDLE(92); + CASE_HANDLE(93); + CASE_HANDLE(94); + CASE_HANDLE(95); + CASE_HANDLE(96); + CASE_HANDLE(97); + CASE_HANDLE(98); + CASE_HANDLE(99); + CASE_HANDLE(100); + CASE_HANDLE(101); + CASE_HANDLE(102); + CASE_HANDLE(103); + CASE_HANDLE(104); + CASE_HANDLE(105); + CASE_HANDLE(106); + CASE_HANDLE(107); + CASE_HANDLE(108); + CASE_HANDLE(109); + CASE_HANDLE(110); + CASE_HANDLE(111); + CASE_HANDLE(112); + CASE_HANDLE(113); + CASE_HANDLE(114); + CASE_HANDLE(115); + CASE_HANDLE(116); + CASE_HANDLE(117); + CASE_HANDLE(118); + CASE_HANDLE(119); + CASE_HANDLE(120); + CASE_HANDLE(121); + CASE_HANDLE(122); + CASE_HANDLE(123); + CASE_HANDLE(124); + CASE_HANDLE(125); + CASE_HANDLE(126); + CASE_HANDLE(127); + CASE_HANDLE(128); + CASE_HANDLE(129); + CASE_HANDLE(130); + CASE_HANDLE(131); + CASE_HANDLE(132); + CASE_HANDLE(133); + CASE_HANDLE(134); + CASE_HANDLE(135); + CASE_HANDLE(136); + CASE_HANDLE(137); + CASE_HANDLE(138); + CASE_HANDLE(139); + CASE_HANDLE(140); + CASE_HANDLE(141); + CASE_HANDLE(142); + CASE_HANDLE(143); + CASE_HANDLE(144); + CASE_HANDLE(145); + CASE_HANDLE(146); + CASE_HANDLE(147); + CASE_HANDLE(148); + CASE_HANDLE(149); + CASE_HANDLE(150); + CASE_HANDLE(151); + CASE_HANDLE(152); + CASE_HANDLE(153); + CASE_HANDLE(154); + CASE_HANDLE(155); + CASE_HANDLE(156); + CASE_HANDLE(157); + CASE_HANDLE(158); + CASE_HANDLE(159); + CASE_HANDLE(160); + CASE_HANDLE(161); + CASE_HANDLE(162); + CASE_HANDLE(163); + CASE_HANDLE(164); + CASE_HANDLE(165); + CASE_HANDLE(166); + CASE_HANDLE(167); + CASE_HANDLE(168); + CASE_HANDLE(169); + CASE_HANDLE(170); + CASE_HANDLE(171); + CASE_HANDLE(172); + CASE_HANDLE(173); + CASE_HANDLE(174); + CASE_HANDLE(175); + CASE_HANDLE(176); + CASE_HANDLE(177); + CASE_HANDLE(178); + CASE_HANDLE(179); + CASE_HANDLE(180); + CASE_HANDLE(181); + CASE_HANDLE(182); + CASE_HANDLE(183); + CASE_HANDLE(184); + CASE_HANDLE(185); + CASE_HANDLE(186); + CASE_HANDLE(187); + CASE_HANDLE(188); + CASE_HANDLE(189); + CASE_HANDLE(190); + CASE_HANDLE(191); + CASE_HANDLE(192); + CASE_HANDLE(193); + CASE_HANDLE(194); + CASE_HANDLE(195); + CASE_HANDLE(196); + CASE_HANDLE(197); + CASE_HANDLE(198); + CASE_HANDLE(199); + CASE_HANDLE(200); + CASE_HANDLE(201); + CASE_HANDLE(202); + CASE_HANDLE(203); + CASE_HANDLE(204); + CASE_HANDLE(205); + CASE_HANDLE(206); + CASE_HANDLE(207); + CASE_HANDLE(208); + CASE_HANDLE(209); + CASE_HANDLE(210); + CASE_HANDLE(211); + CASE_HANDLE(212); + CASE_HANDLE(213); + CASE_HANDLE(214); + CASE_HANDLE(215); + CASE_HANDLE(216); + CASE_HANDLE(217); + CASE_HANDLE(218); + CASE_HANDLE(219); + CASE_HANDLE(220); + CASE_HANDLE(221); + CASE_HANDLE(222); + CASE_HANDLE(223); + CASE_HANDLE(224); + CASE_HANDLE(225); + CASE_HANDLE(226); + CASE_HANDLE(227); + CASE_HANDLE(228); + CASE_HANDLE(229); + CASE_HANDLE(230); + CASE_HANDLE(231); + CASE_HANDLE(232); + CASE_HANDLE(233); + CASE_HANDLE(234); + CASE_HANDLE(235); + CASE_HANDLE(236); + CASE_HANDLE(237); + CASE_HANDLE(238); + CASE_HANDLE(239); + CASE_HANDLE(240); + CASE_HANDLE(241); + CASE_HANDLE(242); + CASE_HANDLE(243); + CASE_HANDLE(244); + CASE_HANDLE(245); + CASE_HANDLE(246); + CASE_HANDLE(247); + CASE_HANDLE(248); + CASE_HANDLE(249); + } + + return NULL; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.c b/local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.c new file mode 100644 index 0000000000..36d3564ea6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.c @@ -0,0 +1,135 @@ +/* + + Implementation of POSIX directory browsing functions and types for Win32. + + Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) + History: Created March 1997. Updated June 2003 and July 2012. + Rights: See end of file. + +*/ +#include "dirent_on_windows.h" + +#include +#include /* _findfirst and _findnext set errno iff they return -1 */ +#include +#include + +#include "allocation.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */ + +struct DIR { + handle_type handle; /* -1 for failed rewind */ + struct _finddata_t info; + struct dirent result; /* d_name null iff first time */ + char *name; /* null-terminated char string */ +}; + +DIR *opendir(const VkAllocationCallbacks *pAllocator, const char *name) { + DIR *dir = 0; + + if (name && name[0]) { + size_t base_length = strlen(name); + const char *all = /* search pattern must end with suitable wildcard */ + strchr("/\\", name[base_length - 1]) ? "*" : "/*"; + size_t full_length = base_length + strlen(all) + 1; + + if ((dir = (DIR *)loader_alloc(pAllocator, sizeof *dir, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)) != 0 && + (dir->name = (char *)loader_calloc(pAllocator, full_length, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)) != 0) { + loader_strncpy(dir->name, full_length, name, base_length); + loader_strncat(dir->name, full_length, all, strlen(all)); + + if ((dir->handle = (handle_type)_findfirst(dir->name, &dir->info)) != -1) { + dir->result.d_name = 0; + } else /* rollback */ + { + loader_free(pAllocator, dir->name); + loader_free(pAllocator, dir); + dir = 0; + } + } else /* rollback */ + { + loader_free(pAllocator, dir); + dir = 0; + errno = ENOMEM; + } + } else { + errno = EINVAL; + } + + return dir; +} + +int closedir(const VkAllocationCallbacks *pAllocator, DIR *dir) { + int result = -1; + + if (dir) { + if (dir->handle != -1) { + result = _findclose(dir->handle); + } + + loader_free(pAllocator, dir->name); + loader_free(pAllocator, dir); + } + + if (result == -1) /* map all errors to EBADF */ + { + errno = EBADF; + } + + return result; +} + +struct dirent *readdir(DIR *dir) { + struct dirent *result = 0; + + if (dir && dir->handle != -1) { + if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) { + result = &dir->result; + result->d_name = dir->info.name; + } + // _findnext sets errno to ENOENT when no more matching files could be found, does not indicate an error + if (errno == ENOENT) { + errno = 0; + } + } else { + errno = EBADF; + } + + return result; +} + +void rewinddir(DIR *dir) { + if (dir && dir->handle != -1) { + _findclose(dir->handle); + dir->handle = (handle_type)_findfirst(dir->name, &dir->info); + dir->result.d_name = 0; + } else { + errno = EBADF; + } +} + +#if defined(__cplusplus) +} +#endif + +/* + + Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved. + Copyright (c) 2015 The Khronos Group Inc. + Copyright (c) 2015 Valve Corporation + Copyright (c) 2015 LunarG, Inc. + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose is hereby granted without fee, provided + that this copyright and permissions notice appear in all copies and + derivatives. + + This software is supplied "as is" without express or implied warranty. + + But that said, if there are any problems please get in touch. + +*/ diff --git a/local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.h b/local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.h new file mode 100644 index 0000000000..cf55d614c3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/dirent_on_windows.h @@ -0,0 +1,51 @@ +#pragma once + +/* + + Declaration of POSIX directory browsing functions and types for Win32. + + Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) + History: Created March 1997. Updated June 2003. + Rights: See end of file. + +*/ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct DIR DIR; + +struct dirent { + char *d_name; +}; + +// pass in VkAllocationCallbacks to allow allocation callback usage +DIR *opendir(const VkAllocationCallbacks *pAllocator, const char *); +int closedir(const VkAllocationCallbacks *pAllocator, DIR *); +struct dirent *readdir(DIR *); +void rewinddir(DIR *); + +/* + + Copyright Kevlin Henney, 1997, 2003. All rights reserved. + Copyright (c) 2015-2021 The Khronos Group Inc. + Copyright (c) 2015-2021 Valve Corporation + Copyright (c) 2015-2021 LunarG, Inc. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose is hereby granted without fee, provided + that this copyright and permissions notice appear in all copies and + derivatives. + + This software is supplied "as is" without express or implied warranty. + + But that said, if there are any problems please get in touch. + +*/ + +#if defined(__cplusplus) +} +#endif diff --git a/local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.c b/local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.c new file mode 100644 index 0000000000..c973b3527f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.c @@ -0,0 +1,87 @@ +/* + * + * Copyright (c) 2018 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. + * + */ + +#include "dlopen_fuchsia.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static char g_error[128] = {}; + +const char *dlerror_fuchsia(void) { return g_error; } + +static zx_handle_t vulkan_loader_svc = ZX_HANDLE_INVALID; +void connect_to_vulkan_loader_svc(void) { + zx_handle_t svc1, svc2; + if (zx_channel_create(0, &svc1, &svc2) != ZX_OK) return; + + if (fdio_service_connect("/svc/" fuchsia_vulkan_loader_Loader_Name, svc1) != ZX_OK) { + zx_handle_close(svc2); + return; + } + + vulkan_loader_svc = svc2; +} + +static once_flag svc_connect_once_flag = ONCE_FLAG_INIT; + +void *dlopen_fuchsia(const char *name, int mode, bool driver) { + // First try to just dlopen() from our own namespace. This will succeed for + // any layers that are packaged with the application, but will fail for + // client drivers loaded from the system. + void *result; + if (!driver) { + result = dlopen(name, mode); + if (result != NULL) return result; + } + + // If we couldn't find the library in our own namespace, connect to the + // loader service to request this library. + call_once(&svc_connect_once_flag, connect_to_vulkan_loader_svc); + + if (vulkan_loader_svc == ZX_HANDLE_INVALID) { + snprintf(g_error, sizeof(g_error), "libvulkan.so:dlopen_fuchsia: no connection to loader svc\n"); + return NULL; + } + + zx_handle_t vmo = ZX_HANDLE_INVALID; + zx_status_t st = fuchsia_vulkan_loader_LoaderGet(vulkan_loader_svc, name, strlen(name), &vmo); + if (st != ZX_OK) { + snprintf(g_error, sizeof(g_error), "libvulkan.so:dlopen_fuchsia: Get() failed: %d\n", st); + return NULL; + } + + if (vmo == ZX_HANDLE_INVALID) { + snprintf(g_error, sizeof(g_error), "libvulkan.so:dlopen_fuchsia: Get() returned invalid vmo\n"); + return NULL; + } + + result = dlopen_vmo(vmo, mode); + zx_handle_close(vmo); + if (!result) { + snprintf(g_error, sizeof(g_error), "%s", dlerror()); + } + return result; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.h b/local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.h new file mode 100644 index 0000000000..a674b8db2e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/dlopen_fuchsia.h @@ -0,0 +1,29 @@ +/* + * + * Copyright (c) 2018 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. + * + */ +#pragma once + +#include +#include + +__BEGIN_CDECLS + +// If not |driver|, then the request is to load a layer. +void *dlopen_fuchsia(const char *name, int mode, bool driver); +const char *dlerror_fuchsia(void); + +__END_CDECLS diff --git a/local/recipes/libs/vulkan-loader/source/loader/extension_manual.c b/local/recipes/libs/vulkan-loader/source/loader/extension_manual.c new file mode 100644 index 0000000000..590cbb06d6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/extension_manual.c @@ -0,0 +1,394 @@ +/* + * Copyright (c) 2015-2022 The Khronos Group Inc. + * Copyright (c) 2015-2022 Valve Corporation + * Copyright (c) 2015-2022 LunarG, 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. + * + * Author: Mark Young + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#include "extension_manual.h" + +#include +#include +#include + +#include "allocation.h" +#include "loader.h" +#include "log.h" +#include "wsi.h" + +// ---- Manually added trampoline/terminator functions + +// These functions, for whatever reason, require more complex changes than +// can easily be automatically generated. + +// ---- VK_NV_external_memory_capabilities extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, + VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceExternalImageFormatPropertiesNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + + return disp->GetPhysicalDeviceExternalImageFormatPropertiesNV(unwrapped_phys_dev, format, type, tiling, usage, flags, + externalHandleType, pExternalImageFormatProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, + VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + if (!icd_term->dispatch.GetPhysicalDeviceExternalImageFormatPropertiesNV) { + if (externalHandleType) { + return VK_ERROR_FORMAT_NOT_SUPPORTED; + } + + if (!icd_term->dispatch.GetPhysicalDeviceImageFormatProperties) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + pExternalImageFormatProperties->externalMemoryFeatures = 0; + pExternalImageFormatProperties->exportFromImportedHandleTypes = 0; + pExternalImageFormatProperties->compatibleHandleTypes = 0; + + return icd_term->dispatch.GetPhysicalDeviceImageFormatProperties( + phys_dev_term->phys_dev, format, type, tiling, usage, flags, &pExternalImageFormatProperties->imageFormatProperties); + } + + return icd_term->dispatch.GetPhysicalDeviceExternalImageFormatPropertiesNV( + phys_dev_term->phys_dev, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); +} + +// ---- VK_EXT_display_surface_counter extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT *pSurfaceCapabilities) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceExternalImageFormatPropertiesNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfaceCapabilities2EXT(unwrapped_phys_dev, surface, pSurfaceCapabilities); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2EXT( + VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT *pSurfaceCapabilities) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + + if (NULL != icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2EXT) { + // Pass the call to the driver + return icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2EXT(phys_dev_term->phys_dev, surface, pSurfaceCapabilities); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceSurfaceCapabilities2EXT: Emulating call in ICD \"%s\" using " + "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", + icd_term->scanned_icd->lib_name); + + VkSurfaceCapabilitiesKHR surface_caps; + res = icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev_term->phys_dev, surface, &surface_caps); + pSurfaceCapabilities->minImageCount = surface_caps.minImageCount; + pSurfaceCapabilities->maxImageCount = surface_caps.maxImageCount; + pSurfaceCapabilities->currentExtent = surface_caps.currentExtent; + pSurfaceCapabilities->minImageExtent = surface_caps.minImageExtent; + pSurfaceCapabilities->maxImageExtent = surface_caps.maxImageExtent; + pSurfaceCapabilities->maxImageArrayLayers = surface_caps.maxImageArrayLayers; + pSurfaceCapabilities->supportedTransforms = surface_caps.supportedTransforms; + pSurfaceCapabilities->currentTransform = surface_caps.currentTransform; + pSurfaceCapabilities->supportedCompositeAlpha = surface_caps.supportedCompositeAlpha; + pSurfaceCapabilities->supportedUsageFlags = surface_caps.supportedUsageFlags; + pSurfaceCapabilities->supportedSurfaceCounters = 0; + + if (pSurfaceCapabilities->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceSurfaceCapabilities2EXT: Emulation found unrecognized structure type in " + "pSurfaceCapabilities->pNext - this struct will be ignored"); + } + + return res; + } +} + +// ---- VK_EXT_direct_mode_display extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleaseDisplayEXT: Invalid physicalDevice [VUID-vkReleaseDisplayEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->ReleaseDisplayEXT(unwrapped_phys_dev, display); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + if (icd_term->dispatch.ReleaseDisplayEXT == NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD \"%s\" associated with VkPhysicalDevice does not support vkReleaseDisplayEXT - Consequently, the call is " + "invalid because it should not be possible to acquire a display on this device", + icd_term->scanned_icd->lib_name); + abort(); + } + return icd_term->dispatch.ReleaseDisplayEXT(phys_dev_term->phys_dev, display); +} + +// ---- VK_EXT_acquire_xlib_display extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, VkDisplayKHR display) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireXlibDisplayEXT: Invalid physicalDevice [VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->AcquireXlibDisplayEXT(unwrapped_phys_dev, dpy, display); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, + VkDisplayKHR display) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + if (icd_term->dispatch.AcquireXlibDisplayEXT != NULL) { + // Pass the call to the driver + return icd_term->dispatch.AcquireXlibDisplayEXT(phys_dev_term->phys_dev, dpy, display); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkAcquireXLibDisplayEXT: Emulating call in ICD \"%s\" by returning error", icd_term->scanned_icd->lib_name); + + // Fail for the unsupported command + return VK_ERROR_INITIALIZATION_FAILED; + } +} + +VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, RROutput rrOutput, + VkDisplayKHR *pDisplay) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRandROutputDisplayEXT: Invalid physicalDevice [VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetRandROutputDisplayEXT(unwrapped_phys_dev, dpy, rrOutput, pDisplay); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, RROutput rrOutput, + VkDisplayKHR *pDisplay) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + if (icd_term->dispatch.GetRandROutputDisplayEXT != NULL) { + // Pass the call to the driver + return icd_term->dispatch.GetRandROutputDisplayEXT(phys_dev_term->phys_dev, dpy, rrOutput, pDisplay); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetRandROutputDisplayEXT: Emulating call in ICD \"%s\" by returning null display", + icd_term->scanned_icd->lib_name); + + // Return a null handle to indicate this can't be done + *pDisplay = VK_NULL_HANDLE; + return VK_SUCCESS; + } +} + +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfacePresentModes2EXT: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfacePresentModes2EXT(unwrapped_phys_dev, pSurfaceInfo, pPresentModeCount, pPresentModes); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceSurfacePresentModes2EXT"); + abort(); + } + + VkPhysicalDeviceSurfaceInfo2KHR surface_info_copy = *pSurfaceInfo; + if (VK_NULL_HANDLE != pSurfaceInfo->surface) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface_info_copy.surface); + if (res != VK_SUCCESS) { + return res; + } + } + + return icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT(phys_dev_term->phys_dev, &surface_info_copy, + pPresentModeCount, pPresentModes); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR *pModes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupSurfacePresentModes2EXT: Invalid device " + "[VUID-vkGetDeviceGroupSurfacePresentModes2EXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModes2EXT(VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR *pModes) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev || + NULL == dev->loader_dispatch.extension_terminator_dispatch.GetDeviceGroupSurfacePresentModes2EXT) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupSurfacePresentModes2EXT Terminator: Invalid device handle. This is likely the result of a " + "layer wrapping device handles and failing to unwrap them in all functions. " + "[VUID-vkGetDeviceGroupSurfacePresentModes2EXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (NULL == pSurfaceInfo) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupSurfacePresentModes2EXT: Invalid pSurfaceInfo pointer " + "[VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + VkPhysicalDeviceSurfaceInfo2KHR surface_info_copy = *pSurfaceInfo; + if (VK_NULL_HANDLE != pSurfaceInfo->surface) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface_info_copy.surface); + if (res != VK_SUCCESS) { + return res; + } + } + + return dev->loader_dispatch.extension_terminator_dispatch.GetDeviceGroupSurfacePresentModes2EXT(device, &surface_info_copy, + pModes); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_EXT_tooling_info extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t *pToolCount, + VkPhysicalDeviceToolPropertiesEXT *pToolProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceToolPropertiesEXT: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceToolPropertiesEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceToolPropertiesEXT(unwrapped_phys_dev, pToolCount, pToolProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t *pToolCount, + VkPhysicalDeviceToolPropertiesEXT *pToolProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + bool tooling_info_supported = false; + uint32_t ext_count = 0; + VkExtensionProperties *ext_props = NULL; + VkResult res = VK_SUCCESS; + VkResult enumerate_res = VK_SUCCESS; + + enumerate_res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &ext_count, NULL); + if (enumerate_res != VK_SUCCESS) { + goto out; + } + + ext_props = loader_instance_heap_alloc(icd_term->this_instance, sizeof(VkExtensionProperties) * ext_count, + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (!ext_props) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + enumerate_res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &ext_count, ext_props); + if (enumerate_res != VK_SUCCESS) { + goto out; + } + + for (uint32_t i = 0; i < ext_count; i++) { + if (strncmp(ext_props[i].extensionName, VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_MAX_EXTENSION_NAME_SIZE) == 0) { + tooling_info_supported = true; + break; + } + } + + if (tooling_info_supported && icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) { + res = icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT(phys_dev_term->phys_dev, pToolCount, pToolProperties); + } + +out: + // In the case the driver didn't support the extension, make sure that the first layer doesn't find the count uninitialized + if (!tooling_info_supported || !icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) { + *pToolCount = 0; + } + + loader_instance_heap_free(icd_term->this_instance, ext_props); + + return res; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/extension_manual.h b/local/recipes/libs/vulkan-loader/source/loader/extension_manual.h new file mode 100644 index 0000000000..0ba63ef1fa --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/extension_manual.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2015-2021 The Khronos Group Inc. + * Copyright (c) 2015-2021 Valve Corporation + * Copyright (c) 2015-2021 LunarG, 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. + * + * Author: Mark Young + * Author: Charles Giessen + */ + +#pragma once + +#include + +// ---- Manually added trampoline/terminator functions + +// These functions, for whatever reason, require more complex changes than +// can easily be automatically generated. + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, + VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV( + VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, + VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, + VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT* pSurfaceCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT* pSurfaceCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display); + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, + VkDisplayKHR display); + +VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, + VkDisplayKHR* pDisplay); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, + VkDisplayKHR* pDisplay); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes); +#endif // VK_USE_PLATFORM_WIN32_KHR + +VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModes2EXT(VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR* pModes); + +// ---- VK_EXT_tooling_info extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, + VkPhysicalDeviceToolPropertiesEXT* pToolProperties); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, + VkPhysicalDeviceToolPropertiesEXT* pToolProperties); diff --git a/local/recipes/libs/vulkan-loader/source/loader/generated/vk_layer_dispatch_table.h b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_layer_dispatch_table.h new file mode 100644 index 0000000000..b7c806ee44 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_layer_dispatch_table.h @@ -0,0 +1,1310 @@ +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See loader_extension_generator.py for modifications + +/* + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + * + * Author: Mark Lobodzinski + * Author: Mark Young + * Author: Charles Giessen + */ + +// clang-format off +#pragma once + +#include + +#if !defined(PFN_GetPhysicalDeviceProcAddr) +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); +#endif + +// Instance function pointer dispatch table +typedef struct VkLayerInstanceDispatchTable_ { + // Manually add in GetPhysicalDeviceProcAddr entry + PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr; + + // ---- Core Vulkan 1.0 commands + PFN_vkCreateInstance CreateInstance; + PFN_vkDestroyInstance DestroyInstance; + PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices; + PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures; + PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties; + PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties; + PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties; + PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties; + PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties; + PFN_vkGetInstanceProcAddr GetInstanceProcAddr; + PFN_vkCreateDevice CreateDevice; + PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; + PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties; + PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties; + PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties; + + // ---- Core Vulkan 1.1 commands + PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion; + PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups; + PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2; + PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2; + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2; + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2; + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2; + PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties; + PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties; + + // ---- Core Vulkan 1.3 commands + PFN_vkGetPhysicalDeviceToolProperties GetPhysicalDeviceToolProperties; + + // ---- VK_KHR_surface extension commands + PFN_vkDestroySurfaceKHR DestroySurfaceKHR; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR; + + // ---- VK_KHR_swapchain extension commands + PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR; + + // ---- VK_KHR_display extension commands + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR; + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR; + PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR; + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR; + PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR; + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR; +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR; +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR; +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_video_queue extension commands + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR GetPhysicalDeviceVideoCapabilitiesKHR; + PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR GetPhysicalDeviceVideoFormatPropertiesKHR; + + // ---- VK_KHR_get_physical_device_properties2 extension commands + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR; + PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR; + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR; + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR; + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR; + + // ---- VK_KHR_device_group_creation extension commands + PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR; + + // ---- VK_KHR_external_memory_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR; + + // ---- VK_KHR_external_semaphore_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR; + + // ---- VK_KHR_external_fence_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR; + + // ---- VK_KHR_performance_query extension commands + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; + + // ---- VK_KHR_get_surface_capabilities2 extension commands + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR; + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR; + + // ---- VK_KHR_get_display_properties2 extension commands + PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR; + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR; + PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR; + PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR; + + // ---- VK_KHR_fragment_shading_rate extension commands + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR GetPhysicalDeviceFragmentShadingRatesKHR; + + // ---- VK_KHR_video_encode_queue extension commands + PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR; + + // ---- VK_KHR_cooperative_matrix extension commands + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR GetPhysicalDeviceCooperativeMatrixPropertiesKHR; + + // ---- VK_KHR_calibrated_timestamps extension commands + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR GetPhysicalDeviceCalibrateableTimeDomainsKHR; + + // ---- VK_EXT_debug_report extension commands + PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT; + PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT; + PFN_vkDebugReportMessageEXT DebugReportMessageEXT; + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + PFN_vkCreateStreamDescriptorSurfaceGGP CreateStreamDescriptorSurfaceGGP; +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV; + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + PFN_vkCreateViSurfaceNN CreateViSurfaceNN; +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + PFN_vkReleaseDisplayEXT ReleaseDisplayEXT; + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + PFN_vkAcquireXlibDisplayEXT AcquireXlibDisplayEXT; +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + PFN_vkGetRandROutputDisplayEXT GetRandROutputDisplayEXT; +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT GetPhysicalDeviceSurfaceCapabilities2EXT; + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + PFN_vkCreateIOSSurfaceMVK CreateIOSSurfaceMVK; +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + PFN_vkCreateMacOSSurfaceMVK CreateMacOSSurfaceMVK; +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT; + PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT; + PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT; + + // ---- VK_EXT_sample_locations extension commands + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT; + + // ---- VK_EXT_calibrated_timestamps extension commands + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT; + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_tooling_info extension commands + PFN_vkGetPhysicalDeviceToolPropertiesEXT GetPhysicalDeviceToolPropertiesEXT; + + // ---- VK_NV_cooperative_matrix extension commands + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV; + + // ---- VK_NV_coverage_reduction_mode extension commands + PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT GetPhysicalDeviceSurfacePresentModes2EXT; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_headless_surface extension commands + PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT; + + // ---- VK_EXT_acquire_drm_display extension commands + PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT; + PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT; + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkAcquireWinrtDisplayNV AcquireWinrtDisplayNV; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetWinrtDisplayNV GetWinrtDisplayNV; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + PFN_vkCreateDirectFBSurfaceEXT CreateDirectFBSurfaceEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT GetPhysicalDeviceDirectFBPresentationSupportEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + PFN_vkCreateScreenSurfaceQNX CreateScreenSurfaceQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX GetPhysicalDeviceScreenPresentationSupportQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_ARM_tensors extension commands + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM GetPhysicalDeviceExternalTensorPropertiesARM; + + // ---- VK_NV_optical_flow extension commands + PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV GetPhysicalDeviceOpticalFlowImageFormatsNV; + + // ---- VK_NV_cooperative_vector extension commands + PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV GetPhysicalDeviceCooperativeVectorPropertiesNV; + + // ---- VK_ARM_data_graph extension commands + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM; + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + PFN_vkCreateSurfaceOHOS CreateSurfaceOHOS; +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV; +} VkLayerInstanceDispatchTable; + +// Device function pointer dispatch table +#define DEVICE_DISP_TABLE_MAGIC_NUMBER 0x10ADED040410ADEDUL +typedef struct VkLayerDispatchTable_ { + uint64_t magic; // Should be DEVICE_DISP_TABLE_MAGIC_NUMBER + + // ---- Core Vulkan 1.0 commands + PFN_vkGetDeviceProcAddr GetDeviceProcAddr; + PFN_vkDestroyDevice DestroyDevice; + PFN_vkGetDeviceQueue GetDeviceQueue; + PFN_vkQueueSubmit QueueSubmit; + PFN_vkQueueWaitIdle QueueWaitIdle; + PFN_vkDeviceWaitIdle DeviceWaitIdle; + PFN_vkAllocateMemory AllocateMemory; + PFN_vkFreeMemory FreeMemory; + PFN_vkMapMemory MapMemory; + PFN_vkUnmapMemory UnmapMemory; + PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges; + PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges; + PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment; + PFN_vkBindBufferMemory BindBufferMemory; + PFN_vkBindImageMemory BindImageMemory; + PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements; + PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements; + PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements; + PFN_vkQueueBindSparse QueueBindSparse; + PFN_vkCreateFence CreateFence; + PFN_vkDestroyFence DestroyFence; + PFN_vkResetFences ResetFences; + PFN_vkGetFenceStatus GetFenceStatus; + PFN_vkWaitForFences WaitForFences; + PFN_vkCreateSemaphore CreateSemaphore; + PFN_vkDestroySemaphore DestroySemaphore; + PFN_vkCreateEvent CreateEvent; + PFN_vkDestroyEvent DestroyEvent; + PFN_vkGetEventStatus GetEventStatus; + PFN_vkSetEvent SetEvent; + PFN_vkResetEvent ResetEvent; + PFN_vkCreateQueryPool CreateQueryPool; + PFN_vkDestroyQueryPool DestroyQueryPool; + PFN_vkGetQueryPoolResults GetQueryPoolResults; + PFN_vkCreateBuffer CreateBuffer; + PFN_vkDestroyBuffer DestroyBuffer; + PFN_vkCreateBufferView CreateBufferView; + PFN_vkDestroyBufferView DestroyBufferView; + PFN_vkCreateImage CreateImage; + PFN_vkDestroyImage DestroyImage; + PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout; + PFN_vkCreateImageView CreateImageView; + PFN_vkDestroyImageView DestroyImageView; + PFN_vkCreateShaderModule CreateShaderModule; + PFN_vkDestroyShaderModule DestroyShaderModule; + PFN_vkCreatePipelineCache CreatePipelineCache; + PFN_vkDestroyPipelineCache DestroyPipelineCache; + PFN_vkGetPipelineCacheData GetPipelineCacheData; + PFN_vkMergePipelineCaches MergePipelineCaches; + PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines; + PFN_vkCreateComputePipelines CreateComputePipelines; + PFN_vkDestroyPipeline DestroyPipeline; + PFN_vkCreatePipelineLayout CreatePipelineLayout; + PFN_vkDestroyPipelineLayout DestroyPipelineLayout; + PFN_vkCreateSampler CreateSampler; + PFN_vkDestroySampler DestroySampler; + PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout; + PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout; + PFN_vkCreateDescriptorPool CreateDescriptorPool; + PFN_vkDestroyDescriptorPool DestroyDescriptorPool; + PFN_vkResetDescriptorPool ResetDescriptorPool; + PFN_vkAllocateDescriptorSets AllocateDescriptorSets; + PFN_vkFreeDescriptorSets FreeDescriptorSets; + PFN_vkUpdateDescriptorSets UpdateDescriptorSets; + PFN_vkCreateFramebuffer CreateFramebuffer; + PFN_vkDestroyFramebuffer DestroyFramebuffer; + PFN_vkCreateRenderPass CreateRenderPass; + PFN_vkDestroyRenderPass DestroyRenderPass; + PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity; + PFN_vkCreateCommandPool CreateCommandPool; + PFN_vkDestroyCommandPool DestroyCommandPool; + PFN_vkResetCommandPool ResetCommandPool; + PFN_vkAllocateCommandBuffers AllocateCommandBuffers; + PFN_vkFreeCommandBuffers FreeCommandBuffers; + PFN_vkBeginCommandBuffer BeginCommandBuffer; + PFN_vkEndCommandBuffer EndCommandBuffer; + PFN_vkResetCommandBuffer ResetCommandBuffer; + PFN_vkCmdBindPipeline CmdBindPipeline; + PFN_vkCmdSetViewport CmdSetViewport; + PFN_vkCmdSetScissor CmdSetScissor; + PFN_vkCmdSetLineWidth CmdSetLineWidth; + PFN_vkCmdSetDepthBias CmdSetDepthBias; + PFN_vkCmdSetBlendConstants CmdSetBlendConstants; + PFN_vkCmdSetDepthBounds CmdSetDepthBounds; + PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask; + PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask; + PFN_vkCmdSetStencilReference CmdSetStencilReference; + PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets; + PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer; + PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers; + PFN_vkCmdDraw CmdDraw; + PFN_vkCmdDrawIndexed CmdDrawIndexed; + PFN_vkCmdDrawIndirect CmdDrawIndirect; + PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect; + PFN_vkCmdDispatch CmdDispatch; + PFN_vkCmdDispatchIndirect CmdDispatchIndirect; + PFN_vkCmdCopyBuffer CmdCopyBuffer; + PFN_vkCmdCopyImage CmdCopyImage; + PFN_vkCmdBlitImage CmdBlitImage; + PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage; + PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer; + PFN_vkCmdUpdateBuffer CmdUpdateBuffer; + PFN_vkCmdFillBuffer CmdFillBuffer; + PFN_vkCmdClearColorImage CmdClearColorImage; + PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage; + PFN_vkCmdClearAttachments CmdClearAttachments; + PFN_vkCmdResolveImage CmdResolveImage; + PFN_vkCmdSetEvent CmdSetEvent; + PFN_vkCmdResetEvent CmdResetEvent; + PFN_vkCmdWaitEvents CmdWaitEvents; + PFN_vkCmdPipelineBarrier CmdPipelineBarrier; + PFN_vkCmdBeginQuery CmdBeginQuery; + PFN_vkCmdEndQuery CmdEndQuery; + PFN_vkCmdResetQueryPool CmdResetQueryPool; + PFN_vkCmdWriteTimestamp CmdWriteTimestamp; + PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults; + PFN_vkCmdPushConstants CmdPushConstants; + PFN_vkCmdBeginRenderPass CmdBeginRenderPass; + PFN_vkCmdNextSubpass CmdNextSubpass; + PFN_vkCmdEndRenderPass CmdEndRenderPass; + PFN_vkCmdExecuteCommands CmdExecuteCommands; + + // ---- Core Vulkan 1.1 commands + PFN_vkBindBufferMemory2 BindBufferMemory2; + PFN_vkBindImageMemory2 BindImageMemory2; + PFN_vkGetDeviceGroupPeerMemoryFeatures GetDeviceGroupPeerMemoryFeatures; + PFN_vkCmdSetDeviceMask CmdSetDeviceMask; + PFN_vkCmdDispatchBase CmdDispatchBase; + PFN_vkGetImageMemoryRequirements2 GetImageMemoryRequirements2; + PFN_vkGetBufferMemoryRequirements2 GetBufferMemoryRequirements2; + PFN_vkGetImageSparseMemoryRequirements2 GetImageSparseMemoryRequirements2; + PFN_vkTrimCommandPool TrimCommandPool; + PFN_vkGetDeviceQueue2 GetDeviceQueue2; + PFN_vkCreateSamplerYcbcrConversion CreateSamplerYcbcrConversion; + PFN_vkDestroySamplerYcbcrConversion DestroySamplerYcbcrConversion; + PFN_vkCreateDescriptorUpdateTemplate CreateDescriptorUpdateTemplate; + PFN_vkDestroyDescriptorUpdateTemplate DestroyDescriptorUpdateTemplate; + PFN_vkUpdateDescriptorSetWithTemplate UpdateDescriptorSetWithTemplate; + PFN_vkGetDescriptorSetLayoutSupport GetDescriptorSetLayoutSupport; + + // ---- Core Vulkan 1.2 commands + PFN_vkCmdDrawIndirectCount CmdDrawIndirectCount; + PFN_vkCmdDrawIndexedIndirectCount CmdDrawIndexedIndirectCount; + PFN_vkCreateRenderPass2 CreateRenderPass2; + PFN_vkCmdBeginRenderPass2 CmdBeginRenderPass2; + PFN_vkCmdNextSubpass2 CmdNextSubpass2; + PFN_vkCmdEndRenderPass2 CmdEndRenderPass2; + PFN_vkResetQueryPool ResetQueryPool; + PFN_vkGetSemaphoreCounterValue GetSemaphoreCounterValue; + PFN_vkWaitSemaphores WaitSemaphores; + PFN_vkSignalSemaphore SignalSemaphore; + PFN_vkGetBufferDeviceAddress GetBufferDeviceAddress; + PFN_vkGetBufferOpaqueCaptureAddress GetBufferOpaqueCaptureAddress; + PFN_vkGetDeviceMemoryOpaqueCaptureAddress GetDeviceMemoryOpaqueCaptureAddress; + + // ---- Core Vulkan 1.3 commands + PFN_vkCreatePrivateDataSlot CreatePrivateDataSlot; + PFN_vkDestroyPrivateDataSlot DestroyPrivateDataSlot; + PFN_vkSetPrivateData SetPrivateData; + PFN_vkGetPrivateData GetPrivateData; + PFN_vkCmdSetEvent2 CmdSetEvent2; + PFN_vkCmdResetEvent2 CmdResetEvent2; + PFN_vkCmdWaitEvents2 CmdWaitEvents2; + PFN_vkCmdPipelineBarrier2 CmdPipelineBarrier2; + PFN_vkCmdWriteTimestamp2 CmdWriteTimestamp2; + PFN_vkQueueSubmit2 QueueSubmit2; + PFN_vkCmdCopyBuffer2 CmdCopyBuffer2; + PFN_vkCmdCopyImage2 CmdCopyImage2; + PFN_vkCmdCopyBufferToImage2 CmdCopyBufferToImage2; + PFN_vkCmdCopyImageToBuffer2 CmdCopyImageToBuffer2; + PFN_vkCmdBlitImage2 CmdBlitImage2; + PFN_vkCmdResolveImage2 CmdResolveImage2; + PFN_vkCmdBeginRendering CmdBeginRendering; + PFN_vkCmdEndRendering CmdEndRendering; + PFN_vkCmdSetCullMode CmdSetCullMode; + PFN_vkCmdSetFrontFace CmdSetFrontFace; + PFN_vkCmdSetPrimitiveTopology CmdSetPrimitiveTopology; + PFN_vkCmdSetViewportWithCount CmdSetViewportWithCount; + PFN_vkCmdSetScissorWithCount CmdSetScissorWithCount; + PFN_vkCmdBindVertexBuffers2 CmdBindVertexBuffers2; + PFN_vkCmdSetDepthTestEnable CmdSetDepthTestEnable; + PFN_vkCmdSetDepthWriteEnable CmdSetDepthWriteEnable; + PFN_vkCmdSetDepthCompareOp CmdSetDepthCompareOp; + PFN_vkCmdSetDepthBoundsTestEnable CmdSetDepthBoundsTestEnable; + PFN_vkCmdSetStencilTestEnable CmdSetStencilTestEnable; + PFN_vkCmdSetStencilOp CmdSetStencilOp; + PFN_vkCmdSetRasterizerDiscardEnable CmdSetRasterizerDiscardEnable; + PFN_vkCmdSetDepthBiasEnable CmdSetDepthBiasEnable; + PFN_vkCmdSetPrimitiveRestartEnable CmdSetPrimitiveRestartEnable; + PFN_vkGetDeviceBufferMemoryRequirements GetDeviceBufferMemoryRequirements; + PFN_vkGetDeviceImageMemoryRequirements GetDeviceImageMemoryRequirements; + PFN_vkGetDeviceImageSparseMemoryRequirements GetDeviceImageSparseMemoryRequirements; + + // ---- Core Vulkan 1.4 commands + PFN_vkCmdSetLineStipple CmdSetLineStipple; + PFN_vkMapMemory2 MapMemory2; + PFN_vkUnmapMemory2 UnmapMemory2; + PFN_vkCmdBindIndexBuffer2 CmdBindIndexBuffer2; + PFN_vkGetRenderingAreaGranularity GetRenderingAreaGranularity; + PFN_vkGetDeviceImageSubresourceLayout GetDeviceImageSubresourceLayout; + PFN_vkGetImageSubresourceLayout2 GetImageSubresourceLayout2; + PFN_vkCmdPushDescriptorSet CmdPushDescriptorSet; + PFN_vkCmdPushDescriptorSetWithTemplate CmdPushDescriptorSetWithTemplate; + PFN_vkCmdSetRenderingAttachmentLocations CmdSetRenderingAttachmentLocations; + PFN_vkCmdSetRenderingInputAttachmentIndices CmdSetRenderingInputAttachmentIndices; + PFN_vkCmdBindDescriptorSets2 CmdBindDescriptorSets2; + PFN_vkCmdPushConstants2 CmdPushConstants2; + PFN_vkCmdPushDescriptorSet2 CmdPushDescriptorSet2; + PFN_vkCmdPushDescriptorSetWithTemplate2 CmdPushDescriptorSetWithTemplate2; + PFN_vkCopyMemoryToImage CopyMemoryToImage; + PFN_vkCopyImageToMemory CopyImageToMemory; + PFN_vkCopyImageToImage CopyImageToImage; + PFN_vkTransitionImageLayout TransitionImageLayout; + + // ---- VK_KHR_swapchain extension commands + PFN_vkCreateSwapchainKHR CreateSwapchainKHR; + PFN_vkDestroySwapchainKHR DestroySwapchainKHR; + PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR; + PFN_vkAcquireNextImageKHR AcquireNextImageKHR; + PFN_vkQueuePresentKHR QueuePresentKHR; + PFN_vkGetDeviceGroupPresentCapabilitiesKHR GetDeviceGroupPresentCapabilitiesKHR; + PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR; + PFN_vkAcquireNextImage2KHR AcquireNextImage2KHR; + + // ---- VK_KHR_display_swapchain extension commands + PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR; + + // ---- VK_KHR_video_queue extension commands + PFN_vkCreateVideoSessionKHR CreateVideoSessionKHR; + PFN_vkDestroyVideoSessionKHR DestroyVideoSessionKHR; + PFN_vkGetVideoSessionMemoryRequirementsKHR GetVideoSessionMemoryRequirementsKHR; + PFN_vkBindVideoSessionMemoryKHR BindVideoSessionMemoryKHR; + PFN_vkCreateVideoSessionParametersKHR CreateVideoSessionParametersKHR; + PFN_vkUpdateVideoSessionParametersKHR UpdateVideoSessionParametersKHR; + PFN_vkDestroyVideoSessionParametersKHR DestroyVideoSessionParametersKHR; + PFN_vkCmdBeginVideoCodingKHR CmdBeginVideoCodingKHR; + PFN_vkCmdEndVideoCodingKHR CmdEndVideoCodingKHR; + PFN_vkCmdControlVideoCodingKHR CmdControlVideoCodingKHR; + + // ---- VK_KHR_video_decode_queue extension commands + PFN_vkCmdDecodeVideoKHR CmdDecodeVideoKHR; + + // ---- VK_KHR_dynamic_rendering extension commands + PFN_vkCmdBeginRenderingKHR CmdBeginRenderingKHR; + PFN_vkCmdEndRenderingKHR CmdEndRenderingKHR; + + // ---- VK_KHR_device_group extension commands + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR GetDeviceGroupPeerMemoryFeaturesKHR; + PFN_vkCmdSetDeviceMaskKHR CmdSetDeviceMaskKHR; + PFN_vkCmdDispatchBaseKHR CmdDispatchBaseKHR; + + // ---- VK_KHR_maintenance1 extension commands + PFN_vkTrimCommandPoolKHR TrimCommandPoolKHR; + + // ---- VK_KHR_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetMemoryWin32HandleKHR GetMemoryWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetMemoryWin32HandlePropertiesKHR GetMemoryWin32HandlePropertiesKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_memory_fd extension commands + PFN_vkGetMemoryFdKHR GetMemoryFdKHR; + PFN_vkGetMemoryFdPropertiesKHR GetMemoryFdPropertiesKHR; + + // ---- VK_KHR_external_semaphore_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkImportSemaphoreWin32HandleKHR ImportSemaphoreWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetSemaphoreWin32HandleKHR GetSemaphoreWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_semaphore_fd extension commands + PFN_vkImportSemaphoreFdKHR ImportSemaphoreFdKHR; + PFN_vkGetSemaphoreFdKHR GetSemaphoreFdKHR; + + // ---- VK_KHR_push_descriptor extension commands + PFN_vkCmdPushDescriptorSetKHR CmdPushDescriptorSetKHR; + PFN_vkCmdPushDescriptorSetWithTemplateKHR CmdPushDescriptorSetWithTemplateKHR; + + // ---- VK_KHR_descriptor_update_template extension commands + PFN_vkCreateDescriptorUpdateTemplateKHR CreateDescriptorUpdateTemplateKHR; + PFN_vkDestroyDescriptorUpdateTemplateKHR DestroyDescriptorUpdateTemplateKHR; + PFN_vkUpdateDescriptorSetWithTemplateKHR UpdateDescriptorSetWithTemplateKHR; + + // ---- VK_KHR_create_renderpass2 extension commands + PFN_vkCreateRenderPass2KHR CreateRenderPass2KHR; + PFN_vkCmdBeginRenderPass2KHR CmdBeginRenderPass2KHR; + PFN_vkCmdNextSubpass2KHR CmdNextSubpass2KHR; + PFN_vkCmdEndRenderPass2KHR CmdEndRenderPass2KHR; + + // ---- VK_KHR_shared_presentable_image extension commands + PFN_vkGetSwapchainStatusKHR GetSwapchainStatusKHR; + + // ---- VK_KHR_external_fence_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkImportFenceWin32HandleKHR ImportFenceWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetFenceWin32HandleKHR GetFenceWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_fence_fd extension commands + PFN_vkImportFenceFdKHR ImportFenceFdKHR; + PFN_vkGetFenceFdKHR GetFenceFdKHR; + + // ---- VK_KHR_performance_query extension commands + PFN_vkAcquireProfilingLockKHR AcquireProfilingLockKHR; + PFN_vkReleaseProfilingLockKHR ReleaseProfilingLockKHR; + + // ---- VK_KHR_get_memory_requirements2 extension commands + PFN_vkGetImageMemoryRequirements2KHR GetImageMemoryRequirements2KHR; + PFN_vkGetBufferMemoryRequirements2KHR GetBufferMemoryRequirements2KHR; + PFN_vkGetImageSparseMemoryRequirements2KHR GetImageSparseMemoryRequirements2KHR; + + // ---- VK_KHR_sampler_ycbcr_conversion extension commands + PFN_vkCreateSamplerYcbcrConversionKHR CreateSamplerYcbcrConversionKHR; + PFN_vkDestroySamplerYcbcrConversionKHR DestroySamplerYcbcrConversionKHR; + + // ---- VK_KHR_bind_memory2 extension commands + PFN_vkBindBufferMemory2KHR BindBufferMemory2KHR; + PFN_vkBindImageMemory2KHR BindImageMemory2KHR; + + // ---- VK_KHR_maintenance3 extension commands + PFN_vkGetDescriptorSetLayoutSupportKHR GetDescriptorSetLayoutSupportKHR; + + // ---- VK_KHR_draw_indirect_count extension commands + PFN_vkCmdDrawIndirectCountKHR CmdDrawIndirectCountKHR; + PFN_vkCmdDrawIndexedIndirectCountKHR CmdDrawIndexedIndirectCountKHR; + + // ---- VK_KHR_timeline_semaphore extension commands + PFN_vkGetSemaphoreCounterValueKHR GetSemaphoreCounterValueKHR; + PFN_vkWaitSemaphoresKHR WaitSemaphoresKHR; + PFN_vkSignalSemaphoreKHR SignalSemaphoreKHR; + + // ---- VK_KHR_fragment_shading_rate extension commands + PFN_vkCmdSetFragmentShadingRateKHR CmdSetFragmentShadingRateKHR; + + // ---- VK_KHR_dynamic_rendering_local_read extension commands + PFN_vkCmdSetRenderingAttachmentLocationsKHR CmdSetRenderingAttachmentLocationsKHR; + PFN_vkCmdSetRenderingInputAttachmentIndicesKHR CmdSetRenderingInputAttachmentIndicesKHR; + + // ---- VK_KHR_present_wait extension commands + PFN_vkWaitForPresentKHR WaitForPresentKHR; + + // ---- VK_KHR_buffer_device_address extension commands + PFN_vkGetBufferDeviceAddressKHR GetBufferDeviceAddressKHR; + PFN_vkGetBufferOpaqueCaptureAddressKHR GetBufferOpaqueCaptureAddressKHR; + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR GetDeviceMemoryOpaqueCaptureAddressKHR; + + // ---- VK_KHR_deferred_host_operations extension commands + PFN_vkCreateDeferredOperationKHR CreateDeferredOperationKHR; + PFN_vkDestroyDeferredOperationKHR DestroyDeferredOperationKHR; + PFN_vkGetDeferredOperationMaxConcurrencyKHR GetDeferredOperationMaxConcurrencyKHR; + PFN_vkGetDeferredOperationResultKHR GetDeferredOperationResultKHR; + PFN_vkDeferredOperationJoinKHR DeferredOperationJoinKHR; + + // ---- VK_KHR_pipeline_executable_properties extension commands + PFN_vkGetPipelineExecutablePropertiesKHR GetPipelineExecutablePropertiesKHR; + PFN_vkGetPipelineExecutableStatisticsKHR GetPipelineExecutableStatisticsKHR; + PFN_vkGetPipelineExecutableInternalRepresentationsKHR GetPipelineExecutableInternalRepresentationsKHR; + + // ---- VK_KHR_map_memory2 extension commands + PFN_vkMapMemory2KHR MapMemory2KHR; + PFN_vkUnmapMemory2KHR UnmapMemory2KHR; + + // ---- VK_KHR_video_encode_queue extension commands + PFN_vkGetEncodedVideoSessionParametersKHR GetEncodedVideoSessionParametersKHR; + PFN_vkCmdEncodeVideoKHR CmdEncodeVideoKHR; + + // ---- VK_KHR_synchronization2 extension commands + PFN_vkCmdSetEvent2KHR CmdSetEvent2KHR; + PFN_vkCmdResetEvent2KHR CmdResetEvent2KHR; + PFN_vkCmdWaitEvents2KHR CmdWaitEvents2KHR; + PFN_vkCmdPipelineBarrier2KHR CmdPipelineBarrier2KHR; + PFN_vkCmdWriteTimestamp2KHR CmdWriteTimestamp2KHR; + PFN_vkQueueSubmit2KHR QueueSubmit2KHR; + + // ---- VK_KHR_copy_commands2 extension commands + PFN_vkCmdCopyBuffer2KHR CmdCopyBuffer2KHR; + PFN_vkCmdCopyImage2KHR CmdCopyImage2KHR; + PFN_vkCmdCopyBufferToImage2KHR CmdCopyBufferToImage2KHR; + PFN_vkCmdCopyImageToBuffer2KHR CmdCopyImageToBuffer2KHR; + PFN_vkCmdBlitImage2KHR CmdBlitImage2KHR; + PFN_vkCmdResolveImage2KHR CmdResolveImage2KHR; + + // ---- VK_KHR_ray_tracing_maintenance1 extension commands + PFN_vkCmdTraceRaysIndirect2KHR CmdTraceRaysIndirect2KHR; + + // ---- VK_KHR_maintenance4 extension commands + PFN_vkGetDeviceBufferMemoryRequirementsKHR GetDeviceBufferMemoryRequirementsKHR; + PFN_vkGetDeviceImageMemoryRequirementsKHR GetDeviceImageMemoryRequirementsKHR; + PFN_vkGetDeviceImageSparseMemoryRequirementsKHR GetDeviceImageSparseMemoryRequirementsKHR; + + // ---- VK_KHR_maintenance5 extension commands + PFN_vkCmdBindIndexBuffer2KHR CmdBindIndexBuffer2KHR; + PFN_vkGetRenderingAreaGranularityKHR GetRenderingAreaGranularityKHR; + PFN_vkGetDeviceImageSubresourceLayoutKHR GetDeviceImageSubresourceLayoutKHR; + PFN_vkGetImageSubresourceLayout2KHR GetImageSubresourceLayout2KHR; + + // ---- VK_KHR_present_wait2 extension commands + PFN_vkWaitForPresent2KHR WaitForPresent2KHR; + + // ---- VK_KHR_pipeline_binary extension commands + PFN_vkCreatePipelineBinariesKHR CreatePipelineBinariesKHR; + PFN_vkDestroyPipelineBinaryKHR DestroyPipelineBinaryKHR; + PFN_vkGetPipelineKeyKHR GetPipelineKeyKHR; + PFN_vkGetPipelineBinaryDataKHR GetPipelineBinaryDataKHR; + PFN_vkReleaseCapturedPipelineDataKHR ReleaseCapturedPipelineDataKHR; + + // ---- VK_KHR_swapchain_maintenance1 extension commands + PFN_vkReleaseSwapchainImagesKHR ReleaseSwapchainImagesKHR; + + // ---- VK_KHR_line_rasterization extension commands + PFN_vkCmdSetLineStippleKHR CmdSetLineStippleKHR; + + // ---- VK_KHR_calibrated_timestamps extension commands + PFN_vkGetCalibratedTimestampsKHR GetCalibratedTimestampsKHR; + + // ---- VK_KHR_maintenance6 extension commands + PFN_vkCmdBindDescriptorSets2KHR CmdBindDescriptorSets2KHR; + PFN_vkCmdPushConstants2KHR CmdPushConstants2KHR; + PFN_vkCmdPushDescriptorSet2KHR CmdPushDescriptorSet2KHR; + PFN_vkCmdPushDescriptorSetWithTemplate2KHR CmdPushDescriptorSetWithTemplate2KHR; + PFN_vkCmdSetDescriptorBufferOffsets2EXT CmdSetDescriptorBufferOffsets2EXT; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT CmdBindDescriptorBufferEmbeddedSamplers2EXT; + + // ---- VK_EXT_debug_marker extension commands + PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT; + PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT; + PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT; + PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT; + PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT; + + // ---- VK_EXT_transform_feedback extension commands + PFN_vkCmdBindTransformFeedbackBuffersEXT CmdBindTransformFeedbackBuffersEXT; + PFN_vkCmdBeginTransformFeedbackEXT CmdBeginTransformFeedbackEXT; + PFN_vkCmdEndTransformFeedbackEXT CmdEndTransformFeedbackEXT; + PFN_vkCmdBeginQueryIndexedEXT CmdBeginQueryIndexedEXT; + PFN_vkCmdEndQueryIndexedEXT CmdEndQueryIndexedEXT; + PFN_vkCmdDrawIndirectByteCountEXT CmdDrawIndirectByteCountEXT; + + // ---- VK_NVX_binary_import extension commands + PFN_vkCreateCuModuleNVX CreateCuModuleNVX; + PFN_vkCreateCuFunctionNVX CreateCuFunctionNVX; + PFN_vkDestroyCuModuleNVX DestroyCuModuleNVX; + PFN_vkDestroyCuFunctionNVX DestroyCuFunctionNVX; + PFN_vkCmdCuLaunchKernelNVX CmdCuLaunchKernelNVX; + + // ---- VK_NVX_image_view_handle extension commands + PFN_vkGetImageViewHandleNVX GetImageViewHandleNVX; + PFN_vkGetImageViewHandle64NVX GetImageViewHandle64NVX; + PFN_vkGetImageViewAddressNVX GetImageViewAddressNVX; + + // ---- VK_AMD_draw_indirect_count extension commands + PFN_vkCmdDrawIndirectCountAMD CmdDrawIndirectCountAMD; + PFN_vkCmdDrawIndexedIndirectCountAMD CmdDrawIndexedIndirectCountAMD; + + // ---- VK_AMD_shader_info extension commands + PFN_vkGetShaderInfoAMD GetShaderInfoAMD; + + // ---- VK_NV_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetMemoryWin32HandleNV GetMemoryWin32HandleNV; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_conditional_rendering extension commands + PFN_vkCmdBeginConditionalRenderingEXT CmdBeginConditionalRenderingEXT; + PFN_vkCmdEndConditionalRenderingEXT CmdEndConditionalRenderingEXT; + + // ---- VK_NV_clip_space_w_scaling extension commands + PFN_vkCmdSetViewportWScalingNV CmdSetViewportWScalingNV; + + // ---- VK_EXT_display_control extension commands + PFN_vkDisplayPowerControlEXT DisplayPowerControlEXT; + PFN_vkRegisterDeviceEventEXT RegisterDeviceEventEXT; + PFN_vkRegisterDisplayEventEXT RegisterDisplayEventEXT; + PFN_vkGetSwapchainCounterEXT GetSwapchainCounterEXT; + + // ---- VK_GOOGLE_display_timing extension commands + PFN_vkGetRefreshCycleDurationGOOGLE GetRefreshCycleDurationGOOGLE; + PFN_vkGetPastPresentationTimingGOOGLE GetPastPresentationTimingGOOGLE; + + // ---- VK_EXT_discard_rectangles extension commands + PFN_vkCmdSetDiscardRectangleEXT CmdSetDiscardRectangleEXT; + PFN_vkCmdSetDiscardRectangleEnableEXT CmdSetDiscardRectangleEnableEXT; + PFN_vkCmdSetDiscardRectangleModeEXT CmdSetDiscardRectangleModeEXT; + + // ---- VK_EXT_hdr_metadata extension commands + PFN_vkSetHdrMetadataEXT SetHdrMetadataEXT; + + // ---- VK_EXT_debug_utils extension commands + PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT; + PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT; + PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT; + PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT; + PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT; + PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT; + PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT; + PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT; + + // ---- VK_ANDROID_external_memory_android_hardware_buffer extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkGetAndroidHardwareBufferPropertiesANDROID GetAndroidHardwareBufferPropertiesANDROID; +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkGetMemoryAndroidHardwareBufferANDROID GetMemoryAndroidHardwareBufferANDROID; +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_AMDX_shader_enqueue extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCreateExecutionGraphPipelinesAMDX CreateExecutionGraphPipelinesAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkGetExecutionGraphPipelineScratchSizeAMDX GetExecutionGraphPipelineScratchSizeAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkGetExecutionGraphPipelineNodeIndexAMDX GetExecutionGraphPipelineNodeIndexAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCmdInitializeGraphScratchMemoryAMDX CmdInitializeGraphScratchMemoryAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCmdDispatchGraphAMDX CmdDispatchGraphAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCmdDispatchGraphIndirectAMDX CmdDispatchGraphIndirectAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCmdDispatchGraphIndirectCountAMDX CmdDispatchGraphIndirectCountAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_EXT_sample_locations extension commands + PFN_vkCmdSetSampleLocationsEXT CmdSetSampleLocationsEXT; + + // ---- VK_EXT_image_drm_format_modifier extension commands + PFN_vkGetImageDrmFormatModifierPropertiesEXT GetImageDrmFormatModifierPropertiesEXT; + + // ---- VK_EXT_validation_cache extension commands + PFN_vkCreateValidationCacheEXT CreateValidationCacheEXT; + PFN_vkDestroyValidationCacheEXT DestroyValidationCacheEXT; + PFN_vkMergeValidationCachesEXT MergeValidationCachesEXT; + PFN_vkGetValidationCacheDataEXT GetValidationCacheDataEXT; + + // ---- VK_NV_shading_rate_image extension commands + PFN_vkCmdBindShadingRateImageNV CmdBindShadingRateImageNV; + PFN_vkCmdSetViewportShadingRatePaletteNV CmdSetViewportShadingRatePaletteNV; + PFN_vkCmdSetCoarseSampleOrderNV CmdSetCoarseSampleOrderNV; + + // ---- VK_NV_ray_tracing extension commands + PFN_vkCreateAccelerationStructureNV CreateAccelerationStructureNV; + PFN_vkDestroyAccelerationStructureNV DestroyAccelerationStructureNV; + PFN_vkGetAccelerationStructureMemoryRequirementsNV GetAccelerationStructureMemoryRequirementsNV; + PFN_vkBindAccelerationStructureMemoryNV BindAccelerationStructureMemoryNV; + PFN_vkCmdBuildAccelerationStructureNV CmdBuildAccelerationStructureNV; + PFN_vkCmdCopyAccelerationStructureNV CmdCopyAccelerationStructureNV; + PFN_vkCmdTraceRaysNV CmdTraceRaysNV; + PFN_vkCreateRayTracingPipelinesNV CreateRayTracingPipelinesNV; + + // ---- VK_KHR_ray_tracing_pipeline extension commands + PFN_vkGetRayTracingShaderGroupHandlesKHR GetRayTracingShaderGroupHandlesKHR; + + // ---- VK_NV_ray_tracing extension commands + PFN_vkGetRayTracingShaderGroupHandlesNV GetRayTracingShaderGroupHandlesNV; + PFN_vkGetAccelerationStructureHandleNV GetAccelerationStructureHandleNV; + PFN_vkCmdWriteAccelerationStructuresPropertiesNV CmdWriteAccelerationStructuresPropertiesNV; + PFN_vkCompileDeferredNV CompileDeferredNV; + + // ---- VK_EXT_external_memory_host extension commands + PFN_vkGetMemoryHostPointerPropertiesEXT GetMemoryHostPointerPropertiesEXT; + + // ---- VK_AMD_buffer_marker extension commands + PFN_vkCmdWriteBufferMarkerAMD CmdWriteBufferMarkerAMD; + PFN_vkCmdWriteBufferMarker2AMD CmdWriteBufferMarker2AMD; + + // ---- VK_EXT_calibrated_timestamps extension commands + PFN_vkGetCalibratedTimestampsEXT GetCalibratedTimestampsEXT; + + // ---- VK_NV_mesh_shader extension commands + PFN_vkCmdDrawMeshTasksNV CmdDrawMeshTasksNV; + PFN_vkCmdDrawMeshTasksIndirectNV CmdDrawMeshTasksIndirectNV; + PFN_vkCmdDrawMeshTasksIndirectCountNV CmdDrawMeshTasksIndirectCountNV; + + // ---- VK_NV_scissor_exclusive extension commands + PFN_vkCmdSetExclusiveScissorEnableNV CmdSetExclusiveScissorEnableNV; + PFN_vkCmdSetExclusiveScissorNV CmdSetExclusiveScissorNV; + + // ---- VK_NV_device_diagnostic_checkpoints extension commands + PFN_vkCmdSetCheckpointNV CmdSetCheckpointNV; + PFN_vkGetQueueCheckpointDataNV GetQueueCheckpointDataNV; + PFN_vkGetQueueCheckpointData2NV GetQueueCheckpointData2NV; + + // ---- VK_INTEL_performance_query extension commands + PFN_vkInitializePerformanceApiINTEL InitializePerformanceApiINTEL; + PFN_vkUninitializePerformanceApiINTEL UninitializePerformanceApiINTEL; + PFN_vkCmdSetPerformanceMarkerINTEL CmdSetPerformanceMarkerINTEL; + PFN_vkCmdSetPerformanceStreamMarkerINTEL CmdSetPerformanceStreamMarkerINTEL; + PFN_vkCmdSetPerformanceOverrideINTEL CmdSetPerformanceOverrideINTEL; + PFN_vkAcquirePerformanceConfigurationINTEL AcquirePerformanceConfigurationINTEL; + PFN_vkReleasePerformanceConfigurationINTEL ReleasePerformanceConfigurationINTEL; + PFN_vkQueueSetPerformanceConfigurationINTEL QueueSetPerformanceConfigurationINTEL; + PFN_vkGetPerformanceParameterINTEL GetPerformanceParameterINTEL; + + // ---- VK_AMD_display_native_hdr extension commands + PFN_vkSetLocalDimmingAMD SetLocalDimmingAMD; + + // ---- VK_EXT_buffer_device_address extension commands + PFN_vkGetBufferDeviceAddressEXT GetBufferDeviceAddressEXT; + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkAcquireFullScreenExclusiveModeEXT AcquireFullScreenExclusiveModeEXT; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkReleaseFullScreenExclusiveModeEXT ReleaseFullScreenExclusiveModeEXT; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_line_rasterization extension commands + PFN_vkCmdSetLineStippleEXT CmdSetLineStippleEXT; + + // ---- VK_EXT_host_query_reset extension commands + PFN_vkResetQueryPoolEXT ResetQueryPoolEXT; + + // ---- VK_EXT_extended_dynamic_state extension commands + PFN_vkCmdSetCullModeEXT CmdSetCullModeEXT; + PFN_vkCmdSetFrontFaceEXT CmdSetFrontFaceEXT; + PFN_vkCmdSetPrimitiveTopologyEXT CmdSetPrimitiveTopologyEXT; + PFN_vkCmdSetViewportWithCountEXT CmdSetViewportWithCountEXT; + PFN_vkCmdSetScissorWithCountEXT CmdSetScissorWithCountEXT; + PFN_vkCmdBindVertexBuffers2EXT CmdBindVertexBuffers2EXT; + PFN_vkCmdSetDepthTestEnableEXT CmdSetDepthTestEnableEXT; + PFN_vkCmdSetDepthWriteEnableEXT CmdSetDepthWriteEnableEXT; + PFN_vkCmdSetDepthCompareOpEXT CmdSetDepthCompareOpEXT; + PFN_vkCmdSetDepthBoundsTestEnableEXT CmdSetDepthBoundsTestEnableEXT; + PFN_vkCmdSetStencilTestEnableEXT CmdSetStencilTestEnableEXT; + PFN_vkCmdSetStencilOpEXT CmdSetStencilOpEXT; + + // ---- VK_EXT_host_image_copy extension commands + PFN_vkCopyMemoryToImageEXT CopyMemoryToImageEXT; + PFN_vkCopyImageToMemoryEXT CopyImageToMemoryEXT; + PFN_vkCopyImageToImageEXT CopyImageToImageEXT; + PFN_vkTransitionImageLayoutEXT TransitionImageLayoutEXT; + PFN_vkGetImageSubresourceLayout2EXT GetImageSubresourceLayout2EXT; + + // ---- VK_EXT_swapchain_maintenance1 extension commands + PFN_vkReleaseSwapchainImagesEXT ReleaseSwapchainImagesEXT; + + // ---- VK_NV_device_generated_commands extension commands + PFN_vkGetGeneratedCommandsMemoryRequirementsNV GetGeneratedCommandsMemoryRequirementsNV; + PFN_vkCmdPreprocessGeneratedCommandsNV CmdPreprocessGeneratedCommandsNV; + PFN_vkCmdExecuteGeneratedCommandsNV CmdExecuteGeneratedCommandsNV; + PFN_vkCmdBindPipelineShaderGroupNV CmdBindPipelineShaderGroupNV; + PFN_vkCreateIndirectCommandsLayoutNV CreateIndirectCommandsLayoutNV; + PFN_vkDestroyIndirectCommandsLayoutNV DestroyIndirectCommandsLayoutNV; + + // ---- VK_EXT_depth_bias_control extension commands + PFN_vkCmdSetDepthBias2EXT CmdSetDepthBias2EXT; + + // ---- VK_EXT_private_data extension commands + PFN_vkCreatePrivateDataSlotEXT CreatePrivateDataSlotEXT; + PFN_vkDestroyPrivateDataSlotEXT DestroyPrivateDataSlotEXT; + PFN_vkSetPrivateDataEXT SetPrivateDataEXT; + PFN_vkGetPrivateDataEXT GetPrivateDataEXT; + + // ---- VK_NV_cuda_kernel_launch extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCreateCudaModuleNV CreateCudaModuleNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkGetCudaModuleCacheNV GetCudaModuleCacheNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCreateCudaFunctionNV CreateCudaFunctionNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkDestroyCudaModuleNV DestroyCudaModuleNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkDestroyCudaFunctionNV DestroyCudaFunctionNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + PFN_vkCmdCudaLaunchKernelNV CmdCudaLaunchKernelNV; +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_QCOM_tile_shading extension commands + PFN_vkCmdDispatchTileQCOM CmdDispatchTileQCOM; + PFN_vkCmdBeginPerTileExecutionQCOM CmdBeginPerTileExecutionQCOM; + PFN_vkCmdEndPerTileExecutionQCOM CmdEndPerTileExecutionQCOM; + + // ---- VK_EXT_metal_objects extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + PFN_vkExportMetalObjectsEXT ExportMetalObjectsEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_descriptor_buffer extension commands + PFN_vkGetDescriptorSetLayoutSizeEXT GetDescriptorSetLayoutSizeEXT; + PFN_vkGetDescriptorSetLayoutBindingOffsetEXT GetDescriptorSetLayoutBindingOffsetEXT; + PFN_vkGetDescriptorEXT GetDescriptorEXT; + PFN_vkCmdBindDescriptorBuffersEXT CmdBindDescriptorBuffersEXT; + PFN_vkCmdSetDescriptorBufferOffsetsEXT CmdSetDescriptorBufferOffsetsEXT; + PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT CmdBindDescriptorBufferEmbeddedSamplersEXT; + PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT GetBufferOpaqueCaptureDescriptorDataEXT; + PFN_vkGetImageOpaqueCaptureDescriptorDataEXT GetImageOpaqueCaptureDescriptorDataEXT; + PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT GetImageViewOpaqueCaptureDescriptorDataEXT; + PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT GetSamplerOpaqueCaptureDescriptorDataEXT; + PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT GetAccelerationStructureOpaqueCaptureDescriptorDataEXT; + + // ---- VK_NV_fragment_shading_rate_enums extension commands + PFN_vkCmdSetFragmentShadingRateEnumNV CmdSetFragmentShadingRateEnumNV; + + // ---- VK_EXT_device_fault extension commands + PFN_vkGetDeviceFaultInfoEXT GetDeviceFaultInfoEXT; + + // ---- VK_EXT_vertex_input_dynamic_state extension commands + PFN_vkCmdSetVertexInputEXT CmdSetVertexInputEXT; + + // ---- VK_FUCHSIA_external_memory extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkGetMemoryZirconHandleFUCHSIA GetMemoryZirconHandleFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA GetMemoryZirconHandlePropertiesFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_external_semaphore extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkImportSemaphoreZirconHandleFUCHSIA ImportSemaphoreZirconHandleFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkGetSemaphoreZirconHandleFUCHSIA GetSemaphoreZirconHandleFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_buffer_collection extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkCreateBufferCollectionFUCHSIA CreateBufferCollectionFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkSetBufferCollectionImageConstraintsFUCHSIA SetBufferCollectionImageConstraintsFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA SetBufferCollectionBufferConstraintsFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkDestroyBufferCollectionFUCHSIA DestroyBufferCollectionFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkGetBufferCollectionPropertiesFUCHSIA GetBufferCollectionPropertiesFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_HUAWEI_subpass_shading extension commands + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; + PFN_vkCmdSubpassShadingHUAWEI CmdSubpassShadingHUAWEI; + + // ---- VK_HUAWEI_invocation_mask extension commands + PFN_vkCmdBindInvocationMaskHUAWEI CmdBindInvocationMaskHUAWEI; + + // ---- VK_NV_external_memory_rdma extension commands + PFN_vkGetMemoryRemoteAddressNV GetMemoryRemoteAddressNV; + + // ---- VK_EXT_pipeline_properties extension commands + PFN_vkGetPipelinePropertiesEXT GetPipelinePropertiesEXT; + + // ---- VK_EXT_extended_dynamic_state2 extension commands + PFN_vkCmdSetPatchControlPointsEXT CmdSetPatchControlPointsEXT; + PFN_vkCmdSetRasterizerDiscardEnableEXT CmdSetRasterizerDiscardEnableEXT; + PFN_vkCmdSetDepthBiasEnableEXT CmdSetDepthBiasEnableEXT; + PFN_vkCmdSetLogicOpEXT CmdSetLogicOpEXT; + PFN_vkCmdSetPrimitiveRestartEnableEXT CmdSetPrimitiveRestartEnableEXT; + + // ---- VK_EXT_color_write_enable extension commands + PFN_vkCmdSetColorWriteEnableEXT CmdSetColorWriteEnableEXT; + + // ---- VK_EXT_multi_draw extension commands + PFN_vkCmdDrawMultiEXT CmdDrawMultiEXT; + PFN_vkCmdDrawMultiIndexedEXT CmdDrawMultiIndexedEXT; + + // ---- VK_EXT_opacity_micromap extension commands + PFN_vkCreateMicromapEXT CreateMicromapEXT; + PFN_vkDestroyMicromapEXT DestroyMicromapEXT; + PFN_vkCmdBuildMicromapsEXT CmdBuildMicromapsEXT; + PFN_vkBuildMicromapsEXT BuildMicromapsEXT; + PFN_vkCopyMicromapEXT CopyMicromapEXT; + PFN_vkCopyMicromapToMemoryEXT CopyMicromapToMemoryEXT; + PFN_vkCopyMemoryToMicromapEXT CopyMemoryToMicromapEXT; + PFN_vkWriteMicromapsPropertiesEXT WriteMicromapsPropertiesEXT; + PFN_vkCmdCopyMicromapEXT CmdCopyMicromapEXT; + PFN_vkCmdCopyMicromapToMemoryEXT CmdCopyMicromapToMemoryEXT; + PFN_vkCmdCopyMemoryToMicromapEXT CmdCopyMemoryToMicromapEXT; + PFN_vkCmdWriteMicromapsPropertiesEXT CmdWriteMicromapsPropertiesEXT; + PFN_vkGetDeviceMicromapCompatibilityEXT GetDeviceMicromapCompatibilityEXT; + PFN_vkGetMicromapBuildSizesEXT GetMicromapBuildSizesEXT; + + // ---- VK_HUAWEI_cluster_culling_shader extension commands + PFN_vkCmdDrawClusterHUAWEI CmdDrawClusterHUAWEI; + PFN_vkCmdDrawClusterIndirectHUAWEI CmdDrawClusterIndirectHUAWEI; + + // ---- VK_EXT_pageable_device_local_memory extension commands + PFN_vkSetDeviceMemoryPriorityEXT SetDeviceMemoryPriorityEXT; + + // ---- VK_VALVE_descriptor_set_host_mapping extension commands + PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE GetDescriptorSetLayoutHostMappingInfoVALVE; + PFN_vkGetDescriptorSetHostMappingVALVE GetDescriptorSetHostMappingVALVE; + + // ---- VK_NV_copy_memory_indirect extension commands + PFN_vkCmdCopyMemoryIndirectNV CmdCopyMemoryIndirectNV; + PFN_vkCmdCopyMemoryToImageIndirectNV CmdCopyMemoryToImageIndirectNV; + + // ---- VK_NV_memory_decompression extension commands + PFN_vkCmdDecompressMemoryNV CmdDecompressMemoryNV; + PFN_vkCmdDecompressMemoryIndirectCountNV CmdDecompressMemoryIndirectCountNV; + + // ---- VK_NV_device_generated_commands_compute extension commands + PFN_vkGetPipelineIndirectMemoryRequirementsNV GetPipelineIndirectMemoryRequirementsNV; + PFN_vkCmdUpdatePipelineIndirectBufferNV CmdUpdatePipelineIndirectBufferNV; + PFN_vkGetPipelineIndirectDeviceAddressNV GetPipelineIndirectDeviceAddressNV; + + // ---- VK_EXT_extended_dynamic_state3 extension commands + PFN_vkCmdSetDepthClampEnableEXT CmdSetDepthClampEnableEXT; + PFN_vkCmdSetPolygonModeEXT CmdSetPolygonModeEXT; + PFN_vkCmdSetRasterizationSamplesEXT CmdSetRasterizationSamplesEXT; + PFN_vkCmdSetSampleMaskEXT CmdSetSampleMaskEXT; + PFN_vkCmdSetAlphaToCoverageEnableEXT CmdSetAlphaToCoverageEnableEXT; + PFN_vkCmdSetAlphaToOneEnableEXT CmdSetAlphaToOneEnableEXT; + PFN_vkCmdSetLogicOpEnableEXT CmdSetLogicOpEnableEXT; + PFN_vkCmdSetColorBlendEnableEXT CmdSetColorBlendEnableEXT; + PFN_vkCmdSetColorBlendEquationEXT CmdSetColorBlendEquationEXT; + PFN_vkCmdSetColorWriteMaskEXT CmdSetColorWriteMaskEXT; + PFN_vkCmdSetTessellationDomainOriginEXT CmdSetTessellationDomainOriginEXT; + PFN_vkCmdSetRasterizationStreamEXT CmdSetRasterizationStreamEXT; + PFN_vkCmdSetConservativeRasterizationModeEXT CmdSetConservativeRasterizationModeEXT; + PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT CmdSetExtraPrimitiveOverestimationSizeEXT; + PFN_vkCmdSetDepthClipEnableEXT CmdSetDepthClipEnableEXT; + PFN_vkCmdSetSampleLocationsEnableEXT CmdSetSampleLocationsEnableEXT; + PFN_vkCmdSetColorBlendAdvancedEXT CmdSetColorBlendAdvancedEXT; + PFN_vkCmdSetProvokingVertexModeEXT CmdSetProvokingVertexModeEXT; + PFN_vkCmdSetLineRasterizationModeEXT CmdSetLineRasterizationModeEXT; + PFN_vkCmdSetLineStippleEnableEXT CmdSetLineStippleEnableEXT; + PFN_vkCmdSetDepthClipNegativeOneToOneEXT CmdSetDepthClipNegativeOneToOneEXT; + PFN_vkCmdSetViewportWScalingEnableNV CmdSetViewportWScalingEnableNV; + PFN_vkCmdSetViewportSwizzleNV CmdSetViewportSwizzleNV; + PFN_vkCmdSetCoverageToColorEnableNV CmdSetCoverageToColorEnableNV; + PFN_vkCmdSetCoverageToColorLocationNV CmdSetCoverageToColorLocationNV; + PFN_vkCmdSetCoverageModulationModeNV CmdSetCoverageModulationModeNV; + PFN_vkCmdSetCoverageModulationTableEnableNV CmdSetCoverageModulationTableEnableNV; + PFN_vkCmdSetCoverageModulationTableNV CmdSetCoverageModulationTableNV; + PFN_vkCmdSetShadingRateImageEnableNV CmdSetShadingRateImageEnableNV; + PFN_vkCmdSetRepresentativeFragmentTestEnableNV CmdSetRepresentativeFragmentTestEnableNV; + PFN_vkCmdSetCoverageReductionModeNV CmdSetCoverageReductionModeNV; + + // ---- VK_ARM_tensors extension commands + PFN_vkCreateTensorARM CreateTensorARM; + PFN_vkDestroyTensorARM DestroyTensorARM; + PFN_vkCreateTensorViewARM CreateTensorViewARM; + PFN_vkDestroyTensorViewARM DestroyTensorViewARM; + PFN_vkGetTensorMemoryRequirementsARM GetTensorMemoryRequirementsARM; + PFN_vkBindTensorMemoryARM BindTensorMemoryARM; + PFN_vkGetDeviceTensorMemoryRequirementsARM GetDeviceTensorMemoryRequirementsARM; + PFN_vkCmdCopyTensorARM CmdCopyTensorARM; + PFN_vkGetTensorOpaqueCaptureDescriptorDataARM GetTensorOpaqueCaptureDescriptorDataARM; + PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM GetTensorViewOpaqueCaptureDescriptorDataARM; + + // ---- VK_EXT_shader_module_identifier extension commands + PFN_vkGetShaderModuleIdentifierEXT GetShaderModuleIdentifierEXT; + PFN_vkGetShaderModuleCreateInfoIdentifierEXT GetShaderModuleCreateInfoIdentifierEXT; + + // ---- VK_NV_optical_flow extension commands + PFN_vkCreateOpticalFlowSessionNV CreateOpticalFlowSessionNV; + PFN_vkDestroyOpticalFlowSessionNV DestroyOpticalFlowSessionNV; + PFN_vkBindOpticalFlowSessionImageNV BindOpticalFlowSessionImageNV; + PFN_vkCmdOpticalFlowExecuteNV CmdOpticalFlowExecuteNV; + + // ---- VK_AMD_anti_lag extension commands + PFN_vkAntiLagUpdateAMD AntiLagUpdateAMD; + + // ---- VK_EXT_shader_object extension commands + PFN_vkCreateShadersEXT CreateShadersEXT; + PFN_vkDestroyShaderEXT DestroyShaderEXT; + PFN_vkGetShaderBinaryDataEXT GetShaderBinaryDataEXT; + PFN_vkCmdBindShadersEXT CmdBindShadersEXT; + PFN_vkCmdSetDepthClampRangeEXT CmdSetDepthClampRangeEXT; + + // ---- VK_QCOM_tile_properties extension commands + PFN_vkGetFramebufferTilePropertiesQCOM GetFramebufferTilePropertiesQCOM; + PFN_vkGetDynamicRenderingTilePropertiesQCOM GetDynamicRenderingTilePropertiesQCOM; + + // ---- VK_NV_cooperative_vector extension commands + PFN_vkConvertCooperativeVectorMatrixNV ConvertCooperativeVectorMatrixNV; + PFN_vkCmdConvertCooperativeVectorMatrixNV CmdConvertCooperativeVectorMatrixNV; + + // ---- VK_NV_low_latency2 extension commands + PFN_vkSetLatencySleepModeNV SetLatencySleepModeNV; + PFN_vkLatencySleepNV LatencySleepNV; + PFN_vkSetLatencyMarkerNV SetLatencyMarkerNV; + PFN_vkGetLatencyTimingsNV GetLatencyTimingsNV; + PFN_vkQueueNotifyOutOfBandNV QueueNotifyOutOfBandNV; + + // ---- VK_ARM_data_graph extension commands + PFN_vkCreateDataGraphPipelinesARM CreateDataGraphPipelinesARM; + PFN_vkCreateDataGraphPipelineSessionARM CreateDataGraphPipelineSessionARM; + PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM GetDataGraphPipelineSessionBindPointRequirementsARM; + PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM GetDataGraphPipelineSessionMemoryRequirementsARM; + PFN_vkBindDataGraphPipelineSessionMemoryARM BindDataGraphPipelineSessionMemoryARM; + PFN_vkDestroyDataGraphPipelineSessionARM DestroyDataGraphPipelineSessionARM; + PFN_vkCmdDispatchDataGraphARM CmdDispatchDataGraphARM; + PFN_vkGetDataGraphPipelineAvailablePropertiesARM GetDataGraphPipelineAvailablePropertiesARM; + PFN_vkGetDataGraphPipelinePropertiesARM GetDataGraphPipelinePropertiesARM; + + // ---- VK_EXT_attachment_feedback_loop_dynamic_state extension commands + PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT CmdSetAttachmentFeedbackLoopEnableEXT; + + // ---- VK_QNX_external_memory_screen_buffer extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + PFN_vkGetScreenBufferPropertiesQNX GetScreenBufferPropertiesQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_QCOM_tile_memory_heap extension commands + PFN_vkCmdBindTileMemoryQCOM CmdBindTileMemoryQCOM; + + // ---- VK_NV_external_compute_queue extension commands + PFN_vkCreateExternalComputeQueueNV CreateExternalComputeQueueNV; + PFN_vkDestroyExternalComputeQueueNV DestroyExternalComputeQueueNV; + PFN_vkGetExternalComputeQueueDataNV GetExternalComputeQueueDataNV; + + // ---- VK_NV_cluster_acceleration_structure extension commands + PFN_vkGetClusterAccelerationStructureBuildSizesNV GetClusterAccelerationStructureBuildSizesNV; + PFN_vkCmdBuildClusterAccelerationStructureIndirectNV CmdBuildClusterAccelerationStructureIndirectNV; + + // ---- VK_NV_partitioned_acceleration_structure extension commands + PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV GetPartitionedAccelerationStructuresBuildSizesNV; + PFN_vkCmdBuildPartitionedAccelerationStructuresNV CmdBuildPartitionedAccelerationStructuresNV; + + // ---- VK_EXT_device_generated_commands extension commands + PFN_vkGetGeneratedCommandsMemoryRequirementsEXT GetGeneratedCommandsMemoryRequirementsEXT; + PFN_vkCmdPreprocessGeneratedCommandsEXT CmdPreprocessGeneratedCommandsEXT; + PFN_vkCmdExecuteGeneratedCommandsEXT CmdExecuteGeneratedCommandsEXT; + PFN_vkCreateIndirectCommandsLayoutEXT CreateIndirectCommandsLayoutEXT; + PFN_vkDestroyIndirectCommandsLayoutEXT DestroyIndirectCommandsLayoutEXT; + PFN_vkCreateIndirectExecutionSetEXT CreateIndirectExecutionSetEXT; + PFN_vkDestroyIndirectExecutionSetEXT DestroyIndirectExecutionSetEXT; + PFN_vkUpdateIndirectExecutionSetPipelineEXT UpdateIndirectExecutionSetPipelineEXT; + PFN_vkUpdateIndirectExecutionSetShaderEXT UpdateIndirectExecutionSetShaderEXT; + + // ---- VK_EXT_external_memory_metal extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + PFN_vkGetMemoryMetalHandleEXT GetMemoryMetalHandleEXT; +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_METAL_EXT) + PFN_vkGetMemoryMetalHandlePropertiesEXT GetMemoryMetalHandlePropertiesEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_fragment_density_map_offset extension commands + PFN_vkCmdEndRendering2EXT CmdEndRendering2EXT; + + // ---- VK_KHR_acceleration_structure extension commands + PFN_vkCreateAccelerationStructureKHR CreateAccelerationStructureKHR; + PFN_vkDestroyAccelerationStructureKHR DestroyAccelerationStructureKHR; + PFN_vkCmdBuildAccelerationStructuresKHR CmdBuildAccelerationStructuresKHR; + PFN_vkCmdBuildAccelerationStructuresIndirectKHR CmdBuildAccelerationStructuresIndirectKHR; + PFN_vkBuildAccelerationStructuresKHR BuildAccelerationStructuresKHR; + PFN_vkCopyAccelerationStructureKHR CopyAccelerationStructureKHR; + PFN_vkCopyAccelerationStructureToMemoryKHR CopyAccelerationStructureToMemoryKHR; + PFN_vkCopyMemoryToAccelerationStructureKHR CopyMemoryToAccelerationStructureKHR; + PFN_vkWriteAccelerationStructuresPropertiesKHR WriteAccelerationStructuresPropertiesKHR; + PFN_vkCmdCopyAccelerationStructureKHR CmdCopyAccelerationStructureKHR; + PFN_vkCmdCopyAccelerationStructureToMemoryKHR CmdCopyAccelerationStructureToMemoryKHR; + PFN_vkCmdCopyMemoryToAccelerationStructureKHR CmdCopyMemoryToAccelerationStructureKHR; + PFN_vkGetAccelerationStructureDeviceAddressKHR GetAccelerationStructureDeviceAddressKHR; + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR CmdWriteAccelerationStructuresPropertiesKHR; + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR GetDeviceAccelerationStructureCompatibilityKHR; + PFN_vkGetAccelerationStructureBuildSizesKHR GetAccelerationStructureBuildSizesKHR; + + // ---- VK_KHR_ray_tracing_pipeline extension commands + PFN_vkCmdTraceRaysKHR CmdTraceRaysKHR; + PFN_vkCreateRayTracingPipelinesKHR CreateRayTracingPipelinesKHR; + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR GetRayTracingCaptureReplayShaderGroupHandlesKHR; + PFN_vkCmdTraceRaysIndirectKHR CmdTraceRaysIndirectKHR; + PFN_vkGetRayTracingShaderGroupStackSizeKHR GetRayTracingShaderGroupStackSizeKHR; + PFN_vkCmdSetRayTracingPipelineStackSizeKHR CmdSetRayTracingPipelineStackSizeKHR; + + // ---- VK_EXT_mesh_shader extension commands + PFN_vkCmdDrawMeshTasksEXT CmdDrawMeshTasksEXT; + PFN_vkCmdDrawMeshTasksIndirectEXT CmdDrawMeshTasksIndirectEXT; + PFN_vkCmdDrawMeshTasksIndirectCountEXT CmdDrawMeshTasksIndirectCountEXT; +} VkLayerDispatchTable; + +// clang-format on diff --git a/local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.c b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.c new file mode 100644 index 0000000000..4e4b9ad761 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.c @@ -0,0 +1,14104 @@ +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See loader_extension_generator.py for modifications + +/* + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + * + * Author: Mark Lobodzinski + * Author: Mark Young + * Author: Charles Giessen + */ + +// clang-format off +#include +#include +#include +#include "loader.h" +#include "vk_loader_extensions.h" +#include +#include "wsi.h" +#include "debug_utils.h" +#include "extension_manual.h" + +// Device extension error function +VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev) { + struct loader_device *found_dev; + // The device going in is a trampoline device + struct loader_icd_term *icd_term = loader_get_icd_and_device(dev, &found_dev); + + if (icd_term) + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "Bad destination in loader trampoline dispatch," + "Are layers and extensions that you are calling enabled?"); + return VK_ERROR_EXTENSION_NOT_PRESENT; +} + +VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_instance* inst, struct loader_icd_term *icd_term) { + const PFN_vkGetInstanceProcAddr fp_gipa = icd_term->scanned_icd->GetInstanceProcAddr; + +#define LOOKUP_GIPA(func) icd_term->dispatch.func = (PFN_vk##func)fp_gipa(icd_term->instance, "vk" #func); + +#define LOOKUP_REQUIRED_GIPA(func) \ + do { \ + LOOKUP_GIPA(func); \ + if (!icd_term->dispatch.func) { \ + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, "Unable to load %s from ICD %s",\ + "vk"#func, icd_term->scanned_icd->lib_name); \ + return false; \ + } \ + } while (0) + + + // ---- Core Vulkan 1.0 + LOOKUP_REQUIRED_GIPA(DestroyInstance); + LOOKUP_REQUIRED_GIPA(EnumeratePhysicalDevices); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceFeatures); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceFormatProperties); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceImageFormatProperties); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceProperties); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceQueueFamilyProperties); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceMemoryProperties); + LOOKUP_REQUIRED_GIPA(GetDeviceProcAddr); + LOOKUP_REQUIRED_GIPA(CreateDevice); + LOOKUP_REQUIRED_GIPA(EnumerateDeviceExtensionProperties); + LOOKUP_REQUIRED_GIPA(GetPhysicalDeviceSparseImageFormatProperties); + + // ---- Core Vulkan 1.1 + LOOKUP_GIPA(EnumeratePhysicalDeviceGroups); + LOOKUP_GIPA(GetPhysicalDeviceFeatures2); + LOOKUP_GIPA(GetPhysicalDeviceProperties2); + LOOKUP_GIPA(GetPhysicalDeviceFormatProperties2); + LOOKUP_GIPA(GetPhysicalDeviceImageFormatProperties2); + LOOKUP_GIPA(GetPhysicalDeviceQueueFamilyProperties2); + LOOKUP_GIPA(GetPhysicalDeviceMemoryProperties2); + LOOKUP_GIPA(GetPhysicalDeviceSparseImageFormatProperties2); + LOOKUP_GIPA(GetPhysicalDeviceExternalBufferProperties); + LOOKUP_GIPA(GetPhysicalDeviceExternalFenceProperties); + LOOKUP_GIPA(GetPhysicalDeviceExternalSemaphoreProperties); + + // ---- Core Vulkan 1.3 + LOOKUP_GIPA(GetPhysicalDeviceToolProperties); + + // ---- VK_KHR_surface extension commands + LOOKUP_GIPA(DestroySurfaceKHR); + LOOKUP_GIPA(GetPhysicalDeviceSurfaceSupportKHR); + LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilitiesKHR); + LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormatsKHR); + LOOKUP_GIPA(GetPhysicalDeviceSurfacePresentModesKHR); + + // ---- VK_KHR_swapchain extension commands + LOOKUP_GIPA(GetPhysicalDevicePresentRectanglesKHR); + + // ---- VK_KHR_display extension commands + LOOKUP_GIPA(GetPhysicalDeviceDisplayPropertiesKHR); + LOOKUP_GIPA(GetPhysicalDeviceDisplayPlanePropertiesKHR); + LOOKUP_GIPA(GetDisplayPlaneSupportedDisplaysKHR); + LOOKUP_GIPA(GetDisplayModePropertiesKHR); + LOOKUP_GIPA(CreateDisplayModeKHR); + LOOKUP_GIPA(GetDisplayPlaneCapabilitiesKHR); + LOOKUP_GIPA(CreateDisplayPlaneSurfaceKHR); + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + LOOKUP_GIPA(CreateXlibSurfaceKHR); +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + LOOKUP_GIPA(GetPhysicalDeviceXlibPresentationSupportKHR); +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + LOOKUP_GIPA(CreateXcbSurfaceKHR); +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + LOOKUP_GIPA(GetPhysicalDeviceXcbPresentationSupportKHR); +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + LOOKUP_GIPA(CreateWaylandSurfaceKHR); +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + LOOKUP_GIPA(GetPhysicalDeviceWaylandPresentationSupportKHR); +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + LOOKUP_GIPA(CreateAndroidSurfaceKHR); +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + LOOKUP_GIPA(CreateWin32SurfaceKHR); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + LOOKUP_GIPA(GetPhysicalDeviceWin32PresentationSupportKHR); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_video_queue extension commands + LOOKUP_GIPA(GetPhysicalDeviceVideoCapabilitiesKHR); + LOOKUP_GIPA(GetPhysicalDeviceVideoFormatPropertiesKHR); + + // ---- VK_KHR_get_physical_device_properties2 extension commands + LOOKUP_GIPA(GetPhysicalDeviceFeatures2KHR); + LOOKUP_GIPA(GetPhysicalDeviceProperties2KHR); + LOOKUP_GIPA(GetPhysicalDeviceFormatProperties2KHR); + LOOKUP_GIPA(GetPhysicalDeviceImageFormatProperties2KHR); + LOOKUP_GIPA(GetPhysicalDeviceQueueFamilyProperties2KHR); + LOOKUP_GIPA(GetPhysicalDeviceMemoryProperties2KHR); + LOOKUP_GIPA(GetPhysicalDeviceSparseImageFormatProperties2KHR); + + // ---- VK_KHR_device_group_creation extension commands + LOOKUP_GIPA(EnumeratePhysicalDeviceGroupsKHR); + + // ---- VK_KHR_external_memory_capabilities extension commands + LOOKUP_GIPA(GetPhysicalDeviceExternalBufferPropertiesKHR); + + // ---- VK_KHR_external_semaphore_capabilities extension commands + LOOKUP_GIPA(GetPhysicalDeviceExternalSemaphorePropertiesKHR); + + // ---- VK_KHR_external_fence_capabilities extension commands + LOOKUP_GIPA(GetPhysicalDeviceExternalFencePropertiesKHR); + + // ---- VK_KHR_performance_query extension commands + LOOKUP_GIPA(EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); + LOOKUP_GIPA(GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); + + // ---- VK_KHR_get_surface_capabilities2 extension commands + LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilities2KHR); + LOOKUP_GIPA(GetPhysicalDeviceSurfaceFormats2KHR); + + // ---- VK_KHR_get_display_properties2 extension commands + LOOKUP_GIPA(GetPhysicalDeviceDisplayProperties2KHR); + LOOKUP_GIPA(GetPhysicalDeviceDisplayPlaneProperties2KHR); + LOOKUP_GIPA(GetDisplayModeProperties2KHR); + LOOKUP_GIPA(GetDisplayPlaneCapabilities2KHR); + + // ---- VK_KHR_fragment_shading_rate extension commands + LOOKUP_GIPA(GetPhysicalDeviceFragmentShadingRatesKHR); + + // ---- VK_KHR_video_encode_queue extension commands + LOOKUP_GIPA(GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR); + + // ---- VK_KHR_cooperative_matrix extension commands + LOOKUP_GIPA(GetPhysicalDeviceCooperativeMatrixPropertiesKHR); + + // ---- VK_KHR_calibrated_timestamps extension commands + LOOKUP_GIPA(GetPhysicalDeviceCalibrateableTimeDomainsKHR); + + // ---- VK_EXT_debug_report extension commands + LOOKUP_GIPA(CreateDebugReportCallbackEXT); + LOOKUP_GIPA(DestroyDebugReportCallbackEXT); + LOOKUP_GIPA(DebugReportMessageEXT); + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + LOOKUP_GIPA(CreateStreamDescriptorSurfaceGGP); +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + LOOKUP_GIPA(GetPhysicalDeviceExternalImageFormatPropertiesNV); + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + LOOKUP_GIPA(CreateViSurfaceNN); +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + LOOKUP_GIPA(ReleaseDisplayEXT); + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + LOOKUP_GIPA(AcquireXlibDisplayEXT); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + LOOKUP_GIPA(GetRandROutputDisplayEXT); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + LOOKUP_GIPA(GetPhysicalDeviceSurfaceCapabilities2EXT); + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + LOOKUP_GIPA(CreateIOSSurfaceMVK); +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + LOOKUP_GIPA(CreateMacOSSurfaceMVK); +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + LOOKUP_GIPA(CreateDebugUtilsMessengerEXT); + LOOKUP_GIPA(DestroyDebugUtilsMessengerEXT); + LOOKUP_GIPA(SubmitDebugUtilsMessageEXT); + + // ---- VK_EXT_sample_locations extension commands + LOOKUP_GIPA(GetPhysicalDeviceMultisamplePropertiesEXT); + + // ---- VK_EXT_calibrated_timestamps extension commands + LOOKUP_GIPA(GetPhysicalDeviceCalibrateableTimeDomainsEXT); + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + LOOKUP_GIPA(CreateImagePipeSurfaceFUCHSIA); +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + LOOKUP_GIPA(CreateMetalSurfaceEXT); +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_tooling_info extension commands + LOOKUP_GIPA(GetPhysicalDeviceToolPropertiesEXT); + + // ---- VK_NV_cooperative_matrix extension commands + LOOKUP_GIPA(GetPhysicalDeviceCooperativeMatrixPropertiesNV); + + // ---- VK_NV_coverage_reduction_mode extension commands + LOOKUP_GIPA(GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV); + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + LOOKUP_GIPA(GetPhysicalDeviceSurfacePresentModes2EXT); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_headless_surface extension commands + LOOKUP_GIPA(CreateHeadlessSurfaceEXT); + + // ---- VK_EXT_acquire_drm_display extension commands + LOOKUP_GIPA(AcquireDrmDisplayEXT); + LOOKUP_GIPA(GetDrmDisplayEXT); + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + LOOKUP_GIPA(AcquireWinrtDisplayNV); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + LOOKUP_GIPA(GetWinrtDisplayNV); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + LOOKUP_GIPA(CreateDirectFBSurfaceEXT); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + LOOKUP_GIPA(GetPhysicalDeviceDirectFBPresentationSupportEXT); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + LOOKUP_GIPA(CreateScreenSurfaceQNX); +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + LOOKUP_GIPA(GetPhysicalDeviceScreenPresentationSupportQNX); +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_ARM_tensors extension commands + LOOKUP_GIPA(GetPhysicalDeviceExternalTensorPropertiesARM); + + // ---- VK_NV_optical_flow extension commands + LOOKUP_GIPA(GetPhysicalDeviceOpticalFlowImageFormatsNV); + + // ---- VK_NV_cooperative_vector extension commands + LOOKUP_GIPA(GetPhysicalDeviceCooperativeVectorPropertiesNV); + + // ---- VK_ARM_data_graph extension commands + LOOKUP_GIPA(GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM); + LOOKUP_GIPA(GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM); + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + LOOKUP_GIPA(CreateSurfaceOHOS); +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + LOOKUP_GIPA(GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV); + +#undef LOOKUP_REQUIRED_GIPA +#undef LOOKUP_GIPA + + return true; +}; + +// Init Device function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa, + VkDevice dev) { + VkLayerDispatchTable *table = &dev_table->core_dispatch; + if (table->magic != DEVICE_DISP_TABLE_MAGIC_NUMBER) { abort(); } + for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) dev_table->ext_dispatch[i] = (PFN_vkDevExt)vkDevExtError; + + // ---- Core Vulkan 1.0 commands + table->GetDeviceProcAddr = gpa; + table->DestroyDevice = (PFN_vkDestroyDevice)gpa(dev, "vkDestroyDevice"); + table->GetDeviceQueue = (PFN_vkGetDeviceQueue)gpa(dev, "vkGetDeviceQueue"); + table->QueueSubmit = (PFN_vkQueueSubmit)gpa(dev, "vkQueueSubmit"); + table->QueueWaitIdle = (PFN_vkQueueWaitIdle)gpa(dev, "vkQueueWaitIdle"); + table->DeviceWaitIdle = (PFN_vkDeviceWaitIdle)gpa(dev, "vkDeviceWaitIdle"); + table->AllocateMemory = (PFN_vkAllocateMemory)gpa(dev, "vkAllocateMemory"); + table->FreeMemory = (PFN_vkFreeMemory)gpa(dev, "vkFreeMemory"); + table->MapMemory = (PFN_vkMapMemory)gpa(dev, "vkMapMemory"); + table->UnmapMemory = (PFN_vkUnmapMemory)gpa(dev, "vkUnmapMemory"); + table->FlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)gpa(dev, "vkFlushMappedMemoryRanges"); + table->InvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)gpa(dev, "vkInvalidateMappedMemoryRanges"); + table->GetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)gpa(dev, "vkGetDeviceMemoryCommitment"); + table->BindBufferMemory = (PFN_vkBindBufferMemory)gpa(dev, "vkBindBufferMemory"); + table->BindImageMemory = (PFN_vkBindImageMemory)gpa(dev, "vkBindImageMemory"); + table->GetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)gpa(dev, "vkGetBufferMemoryRequirements"); + table->GetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)gpa(dev, "vkGetImageMemoryRequirements"); + table->GetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)gpa(dev, "vkGetImageSparseMemoryRequirements"); + table->QueueBindSparse = (PFN_vkQueueBindSparse)gpa(dev, "vkQueueBindSparse"); + table->CreateFence = (PFN_vkCreateFence)gpa(dev, "vkCreateFence"); + table->DestroyFence = (PFN_vkDestroyFence)gpa(dev, "vkDestroyFence"); + table->ResetFences = (PFN_vkResetFences)gpa(dev, "vkResetFences"); + table->GetFenceStatus = (PFN_vkGetFenceStatus)gpa(dev, "vkGetFenceStatus"); + table->WaitForFences = (PFN_vkWaitForFences)gpa(dev, "vkWaitForFences"); + table->CreateSemaphore = (PFN_vkCreateSemaphore)gpa(dev, "vkCreateSemaphore"); + table->DestroySemaphore = (PFN_vkDestroySemaphore)gpa(dev, "vkDestroySemaphore"); + table->CreateEvent = (PFN_vkCreateEvent)gpa(dev, "vkCreateEvent"); + table->DestroyEvent = (PFN_vkDestroyEvent)gpa(dev, "vkDestroyEvent"); + table->GetEventStatus = (PFN_vkGetEventStatus)gpa(dev, "vkGetEventStatus"); + table->SetEvent = (PFN_vkSetEvent)gpa(dev, "vkSetEvent"); + table->ResetEvent = (PFN_vkResetEvent)gpa(dev, "vkResetEvent"); + table->CreateQueryPool = (PFN_vkCreateQueryPool)gpa(dev, "vkCreateQueryPool"); + table->DestroyQueryPool = (PFN_vkDestroyQueryPool)gpa(dev, "vkDestroyQueryPool"); + table->GetQueryPoolResults = (PFN_vkGetQueryPoolResults)gpa(dev, "vkGetQueryPoolResults"); + table->CreateBuffer = (PFN_vkCreateBuffer)gpa(dev, "vkCreateBuffer"); + table->DestroyBuffer = (PFN_vkDestroyBuffer)gpa(dev, "vkDestroyBuffer"); + table->CreateBufferView = (PFN_vkCreateBufferView)gpa(dev, "vkCreateBufferView"); + table->DestroyBufferView = (PFN_vkDestroyBufferView)gpa(dev, "vkDestroyBufferView"); + table->CreateImage = (PFN_vkCreateImage)gpa(dev, "vkCreateImage"); + table->DestroyImage = (PFN_vkDestroyImage)gpa(dev, "vkDestroyImage"); + table->GetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)gpa(dev, "vkGetImageSubresourceLayout"); + table->CreateImageView = (PFN_vkCreateImageView)gpa(dev, "vkCreateImageView"); + table->DestroyImageView = (PFN_vkDestroyImageView)gpa(dev, "vkDestroyImageView"); + table->CreateShaderModule = (PFN_vkCreateShaderModule)gpa(dev, "vkCreateShaderModule"); + table->DestroyShaderModule = (PFN_vkDestroyShaderModule)gpa(dev, "vkDestroyShaderModule"); + table->CreatePipelineCache = (PFN_vkCreatePipelineCache)gpa(dev, "vkCreatePipelineCache"); + table->DestroyPipelineCache = (PFN_vkDestroyPipelineCache)gpa(dev, "vkDestroyPipelineCache"); + table->GetPipelineCacheData = (PFN_vkGetPipelineCacheData)gpa(dev, "vkGetPipelineCacheData"); + table->MergePipelineCaches = (PFN_vkMergePipelineCaches)gpa(dev, "vkMergePipelineCaches"); + table->CreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)gpa(dev, "vkCreateGraphicsPipelines"); + table->CreateComputePipelines = (PFN_vkCreateComputePipelines)gpa(dev, "vkCreateComputePipelines"); + table->DestroyPipeline = (PFN_vkDestroyPipeline)gpa(dev, "vkDestroyPipeline"); + table->CreatePipelineLayout = (PFN_vkCreatePipelineLayout)gpa(dev, "vkCreatePipelineLayout"); + table->DestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)gpa(dev, "vkDestroyPipelineLayout"); + table->CreateSampler = (PFN_vkCreateSampler)gpa(dev, "vkCreateSampler"); + table->DestroySampler = (PFN_vkDestroySampler)gpa(dev, "vkDestroySampler"); + table->CreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)gpa(dev, "vkCreateDescriptorSetLayout"); + table->DestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)gpa(dev, "vkDestroyDescriptorSetLayout"); + table->CreateDescriptorPool = (PFN_vkCreateDescriptorPool)gpa(dev, "vkCreateDescriptorPool"); + table->DestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)gpa(dev, "vkDestroyDescriptorPool"); + table->ResetDescriptorPool = (PFN_vkResetDescriptorPool)gpa(dev, "vkResetDescriptorPool"); + table->AllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)gpa(dev, "vkAllocateDescriptorSets"); + table->FreeDescriptorSets = (PFN_vkFreeDescriptorSets)gpa(dev, "vkFreeDescriptorSets"); + table->UpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)gpa(dev, "vkUpdateDescriptorSets"); + table->CreateFramebuffer = (PFN_vkCreateFramebuffer)gpa(dev, "vkCreateFramebuffer"); + table->DestroyFramebuffer = (PFN_vkDestroyFramebuffer)gpa(dev, "vkDestroyFramebuffer"); + table->CreateRenderPass = (PFN_vkCreateRenderPass)gpa(dev, "vkCreateRenderPass"); + table->DestroyRenderPass = (PFN_vkDestroyRenderPass)gpa(dev, "vkDestroyRenderPass"); + table->GetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)gpa(dev, "vkGetRenderAreaGranularity"); + table->CreateCommandPool = (PFN_vkCreateCommandPool)gpa(dev, "vkCreateCommandPool"); + table->DestroyCommandPool = (PFN_vkDestroyCommandPool)gpa(dev, "vkDestroyCommandPool"); + table->ResetCommandPool = (PFN_vkResetCommandPool)gpa(dev, "vkResetCommandPool"); + table->AllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)gpa(dev, "vkAllocateCommandBuffers"); + table->FreeCommandBuffers = (PFN_vkFreeCommandBuffers)gpa(dev, "vkFreeCommandBuffers"); + table->BeginCommandBuffer = (PFN_vkBeginCommandBuffer)gpa(dev, "vkBeginCommandBuffer"); + table->EndCommandBuffer = (PFN_vkEndCommandBuffer)gpa(dev, "vkEndCommandBuffer"); + table->ResetCommandBuffer = (PFN_vkResetCommandBuffer)gpa(dev, "vkResetCommandBuffer"); + table->CmdBindPipeline = (PFN_vkCmdBindPipeline)gpa(dev, "vkCmdBindPipeline"); + table->CmdSetViewport = (PFN_vkCmdSetViewport)gpa(dev, "vkCmdSetViewport"); + table->CmdSetScissor = (PFN_vkCmdSetScissor)gpa(dev, "vkCmdSetScissor"); + table->CmdSetLineWidth = (PFN_vkCmdSetLineWidth)gpa(dev, "vkCmdSetLineWidth"); + table->CmdSetDepthBias = (PFN_vkCmdSetDepthBias)gpa(dev, "vkCmdSetDepthBias"); + table->CmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)gpa(dev, "vkCmdSetBlendConstants"); + table->CmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)gpa(dev, "vkCmdSetDepthBounds"); + table->CmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)gpa(dev, "vkCmdSetStencilCompareMask"); + table->CmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)gpa(dev, "vkCmdSetStencilWriteMask"); + table->CmdSetStencilReference = (PFN_vkCmdSetStencilReference)gpa(dev, "vkCmdSetStencilReference"); + table->CmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)gpa(dev, "vkCmdBindDescriptorSets"); + table->CmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)gpa(dev, "vkCmdBindIndexBuffer"); + table->CmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)gpa(dev, "vkCmdBindVertexBuffers"); + table->CmdDraw = (PFN_vkCmdDraw)gpa(dev, "vkCmdDraw"); + table->CmdDrawIndexed = (PFN_vkCmdDrawIndexed)gpa(dev, "vkCmdDrawIndexed"); + table->CmdDrawIndirect = (PFN_vkCmdDrawIndirect)gpa(dev, "vkCmdDrawIndirect"); + table->CmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)gpa(dev, "vkCmdDrawIndexedIndirect"); + table->CmdDispatch = (PFN_vkCmdDispatch)gpa(dev, "vkCmdDispatch"); + table->CmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)gpa(dev, "vkCmdDispatchIndirect"); + table->CmdCopyBuffer = (PFN_vkCmdCopyBuffer)gpa(dev, "vkCmdCopyBuffer"); + table->CmdCopyImage = (PFN_vkCmdCopyImage)gpa(dev, "vkCmdCopyImage"); + table->CmdBlitImage = (PFN_vkCmdBlitImage)gpa(dev, "vkCmdBlitImage"); + table->CmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)gpa(dev, "vkCmdCopyBufferToImage"); + table->CmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)gpa(dev, "vkCmdCopyImageToBuffer"); + table->CmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)gpa(dev, "vkCmdUpdateBuffer"); + table->CmdFillBuffer = (PFN_vkCmdFillBuffer)gpa(dev, "vkCmdFillBuffer"); + table->CmdClearColorImage = (PFN_vkCmdClearColorImage)gpa(dev, "vkCmdClearColorImage"); + table->CmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)gpa(dev, "vkCmdClearDepthStencilImage"); + table->CmdClearAttachments = (PFN_vkCmdClearAttachments)gpa(dev, "vkCmdClearAttachments"); + table->CmdResolveImage = (PFN_vkCmdResolveImage)gpa(dev, "vkCmdResolveImage"); + table->CmdSetEvent = (PFN_vkCmdSetEvent)gpa(dev, "vkCmdSetEvent"); + table->CmdResetEvent = (PFN_vkCmdResetEvent)gpa(dev, "vkCmdResetEvent"); + table->CmdWaitEvents = (PFN_vkCmdWaitEvents)gpa(dev, "vkCmdWaitEvents"); + table->CmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)gpa(dev, "vkCmdPipelineBarrier"); + table->CmdBeginQuery = (PFN_vkCmdBeginQuery)gpa(dev, "vkCmdBeginQuery"); + table->CmdEndQuery = (PFN_vkCmdEndQuery)gpa(dev, "vkCmdEndQuery"); + table->CmdResetQueryPool = (PFN_vkCmdResetQueryPool)gpa(dev, "vkCmdResetQueryPool"); + table->CmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)gpa(dev, "vkCmdWriteTimestamp"); + table->CmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)gpa(dev, "vkCmdCopyQueryPoolResults"); + table->CmdPushConstants = (PFN_vkCmdPushConstants)gpa(dev, "vkCmdPushConstants"); + table->CmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)gpa(dev, "vkCmdBeginRenderPass"); + table->CmdNextSubpass = (PFN_vkCmdNextSubpass)gpa(dev, "vkCmdNextSubpass"); + table->CmdEndRenderPass = (PFN_vkCmdEndRenderPass)gpa(dev, "vkCmdEndRenderPass"); + table->CmdExecuteCommands = (PFN_vkCmdExecuteCommands)gpa(dev, "vkCmdExecuteCommands"); + + // ---- Core Vulkan 1.1 commands + table->BindBufferMemory2 = (PFN_vkBindBufferMemory2)gpa(dev, "vkBindBufferMemory2"); + table->BindImageMemory2 = (PFN_vkBindImageMemory2)gpa(dev, "vkBindImageMemory2"); + table->GetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)gpa(dev, "vkGetDeviceGroupPeerMemoryFeatures"); + table->CmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)gpa(dev, "vkCmdSetDeviceMask"); + table->CmdDispatchBase = (PFN_vkCmdDispatchBase)gpa(dev, "vkCmdDispatchBase"); + table->GetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)gpa(dev, "vkGetImageMemoryRequirements2"); + table->GetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)gpa(dev, "vkGetBufferMemoryRequirements2"); + table->GetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)gpa(dev, "vkGetImageSparseMemoryRequirements2"); + table->TrimCommandPool = (PFN_vkTrimCommandPool)gpa(dev, "vkTrimCommandPool"); + table->GetDeviceQueue2 = (PFN_vkGetDeviceQueue2)gpa(dev, "vkGetDeviceQueue2"); + table->CreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)gpa(dev, "vkCreateSamplerYcbcrConversion"); + table->DestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)gpa(dev, "vkDestroySamplerYcbcrConversion"); + table->CreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)gpa(dev, "vkCreateDescriptorUpdateTemplate"); + table->DestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)gpa(dev, "vkDestroyDescriptorUpdateTemplate"); + table->UpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)gpa(dev, "vkUpdateDescriptorSetWithTemplate"); + table->GetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)gpa(dev, "vkGetDescriptorSetLayoutSupport"); + + // ---- Core Vulkan 1.2 commands + table->CmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)gpa(dev, "vkCmdDrawIndirectCount"); + table->CmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)gpa(dev, "vkCmdDrawIndexedIndirectCount"); + table->CreateRenderPass2 = (PFN_vkCreateRenderPass2)gpa(dev, "vkCreateRenderPass2"); + table->CmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)gpa(dev, "vkCmdBeginRenderPass2"); + table->CmdNextSubpass2 = (PFN_vkCmdNextSubpass2)gpa(dev, "vkCmdNextSubpass2"); + table->CmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)gpa(dev, "vkCmdEndRenderPass2"); + table->ResetQueryPool = (PFN_vkResetQueryPool)gpa(dev, "vkResetQueryPool"); + table->GetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)gpa(dev, "vkGetSemaphoreCounterValue"); + table->WaitSemaphores = (PFN_vkWaitSemaphores)gpa(dev, "vkWaitSemaphores"); + table->SignalSemaphore = (PFN_vkSignalSemaphore)gpa(dev, "vkSignalSemaphore"); + table->GetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)gpa(dev, "vkGetBufferDeviceAddress"); + table->GetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)gpa(dev, "vkGetBufferOpaqueCaptureAddress"); + table->GetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)gpa(dev, "vkGetDeviceMemoryOpaqueCaptureAddress"); + + // ---- Core Vulkan 1.3 commands + table->CreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)gpa(dev, "vkCreatePrivateDataSlot"); + table->DestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)gpa(dev, "vkDestroyPrivateDataSlot"); + table->SetPrivateData = (PFN_vkSetPrivateData)gpa(dev, "vkSetPrivateData"); + table->GetPrivateData = (PFN_vkGetPrivateData)gpa(dev, "vkGetPrivateData"); + table->CmdSetEvent2 = (PFN_vkCmdSetEvent2)gpa(dev, "vkCmdSetEvent2"); + table->CmdResetEvent2 = (PFN_vkCmdResetEvent2)gpa(dev, "vkCmdResetEvent2"); + table->CmdWaitEvents2 = (PFN_vkCmdWaitEvents2)gpa(dev, "vkCmdWaitEvents2"); + table->CmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)gpa(dev, "vkCmdPipelineBarrier2"); + table->CmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)gpa(dev, "vkCmdWriteTimestamp2"); + table->QueueSubmit2 = (PFN_vkQueueSubmit2)gpa(dev, "vkQueueSubmit2"); + table->CmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)gpa(dev, "vkCmdCopyBuffer2"); + table->CmdCopyImage2 = (PFN_vkCmdCopyImage2)gpa(dev, "vkCmdCopyImage2"); + table->CmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)gpa(dev, "vkCmdCopyBufferToImage2"); + table->CmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)gpa(dev, "vkCmdCopyImageToBuffer2"); + table->CmdBlitImage2 = (PFN_vkCmdBlitImage2)gpa(dev, "vkCmdBlitImage2"); + table->CmdResolveImage2 = (PFN_vkCmdResolveImage2)gpa(dev, "vkCmdResolveImage2"); + table->CmdBeginRendering = (PFN_vkCmdBeginRendering)gpa(dev, "vkCmdBeginRendering"); + table->CmdEndRendering = (PFN_vkCmdEndRendering)gpa(dev, "vkCmdEndRendering"); + table->CmdSetCullMode = (PFN_vkCmdSetCullMode)gpa(dev, "vkCmdSetCullMode"); + table->CmdSetFrontFace = (PFN_vkCmdSetFrontFace)gpa(dev, "vkCmdSetFrontFace"); + table->CmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)gpa(dev, "vkCmdSetPrimitiveTopology"); + table->CmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)gpa(dev, "vkCmdSetViewportWithCount"); + table->CmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)gpa(dev, "vkCmdSetScissorWithCount"); + table->CmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)gpa(dev, "vkCmdBindVertexBuffers2"); + table->CmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)gpa(dev, "vkCmdSetDepthTestEnable"); + table->CmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)gpa(dev, "vkCmdSetDepthWriteEnable"); + table->CmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)gpa(dev, "vkCmdSetDepthCompareOp"); + table->CmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)gpa(dev, "vkCmdSetDepthBoundsTestEnable"); + table->CmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)gpa(dev, "vkCmdSetStencilTestEnable"); + table->CmdSetStencilOp = (PFN_vkCmdSetStencilOp)gpa(dev, "vkCmdSetStencilOp"); + table->CmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)gpa(dev, "vkCmdSetRasterizerDiscardEnable"); + table->CmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)gpa(dev, "vkCmdSetDepthBiasEnable"); + table->CmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)gpa(dev, "vkCmdSetPrimitiveRestartEnable"); + table->GetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)gpa(dev, "vkGetDeviceBufferMemoryRequirements"); + table->GetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)gpa(dev, "vkGetDeviceImageMemoryRequirements"); + table->GetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)gpa(dev, "vkGetDeviceImageSparseMemoryRequirements"); + + // ---- Core Vulkan 1.4 commands + table->CmdSetLineStipple = (PFN_vkCmdSetLineStipple)gpa(dev, "vkCmdSetLineStipple"); + table->MapMemory2 = (PFN_vkMapMemory2)gpa(dev, "vkMapMemory2"); + table->UnmapMemory2 = (PFN_vkUnmapMemory2)gpa(dev, "vkUnmapMemory2"); + table->CmdBindIndexBuffer2 = (PFN_vkCmdBindIndexBuffer2)gpa(dev, "vkCmdBindIndexBuffer2"); + table->GetRenderingAreaGranularity = (PFN_vkGetRenderingAreaGranularity)gpa(dev, "vkGetRenderingAreaGranularity"); + table->GetDeviceImageSubresourceLayout = (PFN_vkGetDeviceImageSubresourceLayout)gpa(dev, "vkGetDeviceImageSubresourceLayout"); + table->GetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)gpa(dev, "vkGetImageSubresourceLayout2"); + table->CmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSet)gpa(dev, "vkCmdPushDescriptorSet"); + table->CmdPushDescriptorSetWithTemplate = (PFN_vkCmdPushDescriptorSetWithTemplate)gpa(dev, "vkCmdPushDescriptorSetWithTemplate"); + table->CmdSetRenderingAttachmentLocations = (PFN_vkCmdSetRenderingAttachmentLocations)gpa(dev, "vkCmdSetRenderingAttachmentLocations"); + table->CmdSetRenderingInputAttachmentIndices = (PFN_vkCmdSetRenderingInputAttachmentIndices)gpa(dev, "vkCmdSetRenderingInputAttachmentIndices"); + table->CmdBindDescriptorSets2 = (PFN_vkCmdBindDescriptorSets2)gpa(dev, "vkCmdBindDescriptorSets2"); + table->CmdPushConstants2 = (PFN_vkCmdPushConstants2)gpa(dev, "vkCmdPushConstants2"); + table->CmdPushDescriptorSet2 = (PFN_vkCmdPushDescriptorSet2)gpa(dev, "vkCmdPushDescriptorSet2"); + table->CmdPushDescriptorSetWithTemplate2 = (PFN_vkCmdPushDescriptorSetWithTemplate2)gpa(dev, "vkCmdPushDescriptorSetWithTemplate2"); + table->CopyMemoryToImage = (PFN_vkCopyMemoryToImage)gpa(dev, "vkCopyMemoryToImage"); + table->CopyImageToMemory = (PFN_vkCopyImageToMemory)gpa(dev, "vkCopyImageToMemory"); + table->CopyImageToImage = (PFN_vkCopyImageToImage)gpa(dev, "vkCopyImageToImage"); + table->TransitionImageLayout = (PFN_vkTransitionImageLayout)gpa(dev, "vkTransitionImageLayout"); +} + +// Init Device function pointer dispatch table with extension commands +VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table, + PFN_vkGetInstanceProcAddr gipa, + PFN_vkGetDeviceProcAddr gdpa, + VkInstance inst, + VkDevice dev) { + VkLayerDispatchTable *table = &dev_table->core_dispatch; + table->magic = DEVICE_DISP_TABLE_MAGIC_NUMBER; + + // ---- VK_KHR_swapchain extension commands + table->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gdpa(dev, "vkCreateSwapchainKHR"); + table->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)gdpa(dev, "vkDestroySwapchainKHR"); + table->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)gdpa(dev, "vkGetSwapchainImagesKHR"); + table->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gdpa(dev, "vkAcquireNextImageKHR"); + table->QueuePresentKHR = (PFN_vkQueuePresentKHR)gdpa(dev, "vkQueuePresentKHR"); + table->GetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)gdpa(dev, "vkGetDeviceGroupPresentCapabilitiesKHR"); + table->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)gdpa(dev, "vkGetDeviceGroupSurfacePresentModesKHR"); + table->AcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)gdpa(dev, "vkAcquireNextImage2KHR"); + + // ---- VK_KHR_display_swapchain extension commands + table->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)gdpa(dev, "vkCreateSharedSwapchainsKHR"); + + // ---- VK_KHR_video_queue extension commands + table->CreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)gdpa(dev, "vkCreateVideoSessionKHR"); + table->DestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)gdpa(dev, "vkDestroyVideoSessionKHR"); + table->GetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)gdpa(dev, "vkGetVideoSessionMemoryRequirementsKHR"); + table->BindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)gdpa(dev, "vkBindVideoSessionMemoryKHR"); + table->CreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)gdpa(dev, "vkCreateVideoSessionParametersKHR"); + table->UpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)gdpa(dev, "vkUpdateVideoSessionParametersKHR"); + table->DestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)gdpa(dev, "vkDestroyVideoSessionParametersKHR"); + table->CmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR)gdpa(dev, "vkCmdBeginVideoCodingKHR"); + table->CmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR)gdpa(dev, "vkCmdEndVideoCodingKHR"); + table->CmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR)gdpa(dev, "vkCmdControlVideoCodingKHR"); + + // ---- VK_KHR_video_decode_queue extension commands + table->CmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)gdpa(dev, "vkCmdDecodeVideoKHR"); + + // ---- VK_KHR_dynamic_rendering extension commands + table->CmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)gdpa(dev, "vkCmdBeginRenderingKHR"); + table->CmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)gdpa(dev, "vkCmdEndRenderingKHR"); + + // ---- VK_KHR_device_group extension commands + table->GetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)gdpa(dev, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); + table->CmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)gdpa(dev, "vkCmdSetDeviceMaskKHR"); + table->CmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)gdpa(dev, "vkCmdDispatchBaseKHR"); + + // ---- VK_KHR_maintenance1 extension commands + table->TrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)gdpa(dev, "vkTrimCommandPoolKHR"); + + // ---- VK_KHR_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)gdpa(dev, "vkGetMemoryWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)gdpa(dev, "vkGetMemoryWin32HandlePropertiesKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_memory_fd extension commands + table->GetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)gdpa(dev, "vkGetMemoryFdKHR"); + table->GetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)gdpa(dev, "vkGetMemoryFdPropertiesKHR"); + + // ---- VK_KHR_external_semaphore_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->ImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)gdpa(dev, "vkImportSemaphoreWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)gdpa(dev, "vkGetSemaphoreWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_semaphore_fd extension commands + table->ImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)gdpa(dev, "vkImportSemaphoreFdKHR"); + table->GetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)gdpa(dev, "vkGetSemaphoreFdKHR"); + + // ---- VK_KHR_push_descriptor extension commands + table->CmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)gdpa(dev, "vkCmdPushDescriptorSetKHR"); + table->CmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)gdpa(dev, "vkCmdPushDescriptorSetWithTemplateKHR"); + + // ---- VK_KHR_descriptor_update_template extension commands + table->CreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)gdpa(dev, "vkCreateDescriptorUpdateTemplateKHR"); + table->DestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)gdpa(dev, "vkDestroyDescriptorUpdateTemplateKHR"); + table->UpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)gdpa(dev, "vkUpdateDescriptorSetWithTemplateKHR"); + + // ---- VK_KHR_create_renderpass2 extension commands + table->CreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)gdpa(dev, "vkCreateRenderPass2KHR"); + table->CmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)gdpa(dev, "vkCmdBeginRenderPass2KHR"); + table->CmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)gdpa(dev, "vkCmdNextSubpass2KHR"); + table->CmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)gdpa(dev, "vkCmdEndRenderPass2KHR"); + + // ---- VK_KHR_shared_presentable_image extension commands + table->GetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)gdpa(dev, "vkGetSwapchainStatusKHR"); + + // ---- VK_KHR_external_fence_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->ImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)gdpa(dev, "vkImportFenceWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)gdpa(dev, "vkGetFenceWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_fence_fd extension commands + table->ImportFenceFdKHR = (PFN_vkImportFenceFdKHR)gdpa(dev, "vkImportFenceFdKHR"); + table->GetFenceFdKHR = (PFN_vkGetFenceFdKHR)gdpa(dev, "vkGetFenceFdKHR"); + + // ---- VK_KHR_performance_query extension commands + table->AcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)gdpa(dev, "vkAcquireProfilingLockKHR"); + table->ReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)gdpa(dev, "vkReleaseProfilingLockKHR"); + + // ---- VK_KHR_get_memory_requirements2 extension commands + table->GetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)gdpa(dev, "vkGetImageMemoryRequirements2KHR"); + table->GetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)gdpa(dev, "vkGetBufferMemoryRequirements2KHR"); + table->GetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)gdpa(dev, "vkGetImageSparseMemoryRequirements2KHR"); + + // ---- VK_KHR_sampler_ycbcr_conversion extension commands + table->CreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)gdpa(dev, "vkCreateSamplerYcbcrConversionKHR"); + table->DestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)gdpa(dev, "vkDestroySamplerYcbcrConversionKHR"); + + // ---- VK_KHR_bind_memory2 extension commands + table->BindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)gdpa(dev, "vkBindBufferMemory2KHR"); + table->BindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)gdpa(dev, "vkBindImageMemory2KHR"); + + // ---- VK_KHR_maintenance3 extension commands + table->GetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)gdpa(dev, "vkGetDescriptorSetLayoutSupportKHR"); + + // ---- VK_KHR_draw_indirect_count extension commands + table->CmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)gdpa(dev, "vkCmdDrawIndirectCountKHR"); + table->CmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)gdpa(dev, "vkCmdDrawIndexedIndirectCountKHR"); + + // ---- VK_KHR_timeline_semaphore extension commands + table->GetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)gdpa(dev, "vkGetSemaphoreCounterValueKHR"); + table->WaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)gdpa(dev, "vkWaitSemaphoresKHR"); + table->SignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)gdpa(dev, "vkSignalSemaphoreKHR"); + + // ---- VK_KHR_fragment_shading_rate extension commands + table->CmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)gdpa(dev, "vkCmdSetFragmentShadingRateKHR"); + + // ---- VK_KHR_dynamic_rendering_local_read extension commands + table->CmdSetRenderingAttachmentLocationsKHR = (PFN_vkCmdSetRenderingAttachmentLocationsKHR)gdpa(dev, "vkCmdSetRenderingAttachmentLocationsKHR"); + table->CmdSetRenderingInputAttachmentIndicesKHR = (PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)gdpa(dev, "vkCmdSetRenderingInputAttachmentIndicesKHR"); + + // ---- VK_KHR_present_wait extension commands + table->WaitForPresentKHR = (PFN_vkWaitForPresentKHR)gdpa(dev, "vkWaitForPresentKHR"); + + // ---- VK_KHR_buffer_device_address extension commands + table->GetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)gdpa(dev, "vkGetBufferDeviceAddressKHR"); + table->GetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)gdpa(dev, "vkGetBufferOpaqueCaptureAddressKHR"); + table->GetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)gdpa(dev, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); + + // ---- VK_KHR_deferred_host_operations extension commands + table->CreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)gdpa(dev, "vkCreateDeferredOperationKHR"); + table->DestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)gdpa(dev, "vkDestroyDeferredOperationKHR"); + table->GetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)gdpa(dev, "vkGetDeferredOperationMaxConcurrencyKHR"); + table->GetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)gdpa(dev, "vkGetDeferredOperationResultKHR"); + table->DeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)gdpa(dev, "vkDeferredOperationJoinKHR"); + + // ---- VK_KHR_pipeline_executable_properties extension commands + table->GetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)gdpa(dev, "vkGetPipelineExecutablePropertiesKHR"); + table->GetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)gdpa(dev, "vkGetPipelineExecutableStatisticsKHR"); + table->GetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)gdpa(dev, "vkGetPipelineExecutableInternalRepresentationsKHR"); + + // ---- VK_KHR_map_memory2 extension commands + table->MapMemory2KHR = (PFN_vkMapMemory2KHR)gdpa(dev, "vkMapMemory2KHR"); + table->UnmapMemory2KHR = (PFN_vkUnmapMemory2KHR)gdpa(dev, "vkUnmapMemory2KHR"); + + // ---- VK_KHR_video_encode_queue extension commands + table->GetEncodedVideoSessionParametersKHR = (PFN_vkGetEncodedVideoSessionParametersKHR)gdpa(dev, "vkGetEncodedVideoSessionParametersKHR"); + table->CmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)gdpa(dev, "vkCmdEncodeVideoKHR"); + + // ---- VK_KHR_synchronization2 extension commands + table->CmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)gdpa(dev, "vkCmdSetEvent2KHR"); + table->CmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)gdpa(dev, "vkCmdResetEvent2KHR"); + table->CmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)gdpa(dev, "vkCmdWaitEvents2KHR"); + table->CmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)gdpa(dev, "vkCmdPipelineBarrier2KHR"); + table->CmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)gdpa(dev, "vkCmdWriteTimestamp2KHR"); + table->QueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)gdpa(dev, "vkQueueSubmit2KHR"); + + // ---- VK_KHR_copy_commands2 extension commands + table->CmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)gdpa(dev, "vkCmdCopyBuffer2KHR"); + table->CmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)gdpa(dev, "vkCmdCopyImage2KHR"); + table->CmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)gdpa(dev, "vkCmdCopyBufferToImage2KHR"); + table->CmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)gdpa(dev, "vkCmdCopyImageToBuffer2KHR"); + table->CmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)gdpa(dev, "vkCmdBlitImage2KHR"); + table->CmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)gdpa(dev, "vkCmdResolveImage2KHR"); + + // ---- VK_KHR_ray_tracing_maintenance1 extension commands + table->CmdTraceRaysIndirect2KHR = (PFN_vkCmdTraceRaysIndirect2KHR)gdpa(dev, "vkCmdTraceRaysIndirect2KHR"); + + // ---- VK_KHR_maintenance4 extension commands + table->GetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)gdpa(dev, "vkGetDeviceBufferMemoryRequirementsKHR"); + table->GetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)gdpa(dev, "vkGetDeviceImageMemoryRequirementsKHR"); + table->GetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)gdpa(dev, "vkGetDeviceImageSparseMemoryRequirementsKHR"); + + // ---- VK_KHR_maintenance5 extension commands + table->CmdBindIndexBuffer2KHR = (PFN_vkCmdBindIndexBuffer2KHR)gdpa(dev, "vkCmdBindIndexBuffer2KHR"); + table->GetRenderingAreaGranularityKHR = (PFN_vkGetRenderingAreaGranularityKHR)gdpa(dev, "vkGetRenderingAreaGranularityKHR"); + table->GetDeviceImageSubresourceLayoutKHR = (PFN_vkGetDeviceImageSubresourceLayoutKHR)gdpa(dev, "vkGetDeviceImageSubresourceLayoutKHR"); + table->GetImageSubresourceLayout2KHR = (PFN_vkGetImageSubresourceLayout2KHR)gdpa(dev, "vkGetImageSubresourceLayout2KHR"); + + // ---- VK_KHR_present_wait2 extension commands + table->WaitForPresent2KHR = (PFN_vkWaitForPresent2KHR)gdpa(dev, "vkWaitForPresent2KHR"); + + // ---- VK_KHR_pipeline_binary extension commands + table->CreatePipelineBinariesKHR = (PFN_vkCreatePipelineBinariesKHR)gdpa(dev, "vkCreatePipelineBinariesKHR"); + table->DestroyPipelineBinaryKHR = (PFN_vkDestroyPipelineBinaryKHR)gdpa(dev, "vkDestroyPipelineBinaryKHR"); + table->GetPipelineKeyKHR = (PFN_vkGetPipelineKeyKHR)gdpa(dev, "vkGetPipelineKeyKHR"); + table->GetPipelineBinaryDataKHR = (PFN_vkGetPipelineBinaryDataKHR)gdpa(dev, "vkGetPipelineBinaryDataKHR"); + table->ReleaseCapturedPipelineDataKHR = (PFN_vkReleaseCapturedPipelineDataKHR)gdpa(dev, "vkReleaseCapturedPipelineDataKHR"); + + // ---- VK_KHR_swapchain_maintenance1 extension commands + table->ReleaseSwapchainImagesKHR = (PFN_vkReleaseSwapchainImagesKHR)gdpa(dev, "vkReleaseSwapchainImagesKHR"); + + // ---- VK_KHR_line_rasterization extension commands + table->CmdSetLineStippleKHR = (PFN_vkCmdSetLineStippleKHR)gdpa(dev, "vkCmdSetLineStippleKHR"); + + // ---- VK_KHR_calibrated_timestamps extension commands + table->GetCalibratedTimestampsKHR = (PFN_vkGetCalibratedTimestampsKHR)gdpa(dev, "vkGetCalibratedTimestampsKHR"); + + // ---- VK_KHR_maintenance6 extension commands + table->CmdBindDescriptorSets2KHR = (PFN_vkCmdBindDescriptorSets2KHR)gdpa(dev, "vkCmdBindDescriptorSets2KHR"); + table->CmdPushConstants2KHR = (PFN_vkCmdPushConstants2KHR)gdpa(dev, "vkCmdPushConstants2KHR"); + table->CmdPushDescriptorSet2KHR = (PFN_vkCmdPushDescriptorSet2KHR)gdpa(dev, "vkCmdPushDescriptorSet2KHR"); + table->CmdPushDescriptorSetWithTemplate2KHR = (PFN_vkCmdPushDescriptorSetWithTemplate2KHR)gdpa(dev, "vkCmdPushDescriptorSetWithTemplate2KHR"); + table->CmdSetDescriptorBufferOffsets2EXT = (PFN_vkCmdSetDescriptorBufferOffsets2EXT)gdpa(dev, "vkCmdSetDescriptorBufferOffsets2EXT"); + table->CmdBindDescriptorBufferEmbeddedSamplers2EXT = (PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT)gdpa(dev, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT"); + + // ---- VK_EXT_debug_marker extension commands + table->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)gdpa(dev, "vkDebugMarkerSetObjectTagEXT"); + table->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)gdpa(dev, "vkDebugMarkerSetObjectNameEXT"); + table->CmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)gdpa(dev, "vkCmdDebugMarkerBeginEXT"); + table->CmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)gdpa(dev, "vkCmdDebugMarkerEndEXT"); + table->CmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)gdpa(dev, "vkCmdDebugMarkerInsertEXT"); + + // ---- VK_EXT_transform_feedback extension commands + table->CmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)gdpa(dev, "vkCmdBindTransformFeedbackBuffersEXT"); + table->CmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)gdpa(dev, "vkCmdBeginTransformFeedbackEXT"); + table->CmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)gdpa(dev, "vkCmdEndTransformFeedbackEXT"); + table->CmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)gdpa(dev, "vkCmdBeginQueryIndexedEXT"); + table->CmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)gdpa(dev, "vkCmdEndQueryIndexedEXT"); + table->CmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)gdpa(dev, "vkCmdDrawIndirectByteCountEXT"); + + // ---- VK_NVX_binary_import extension commands + table->CreateCuModuleNVX = (PFN_vkCreateCuModuleNVX)gdpa(dev, "vkCreateCuModuleNVX"); + table->CreateCuFunctionNVX = (PFN_vkCreateCuFunctionNVX)gdpa(dev, "vkCreateCuFunctionNVX"); + table->DestroyCuModuleNVX = (PFN_vkDestroyCuModuleNVX)gdpa(dev, "vkDestroyCuModuleNVX"); + table->DestroyCuFunctionNVX = (PFN_vkDestroyCuFunctionNVX)gdpa(dev, "vkDestroyCuFunctionNVX"); + table->CmdCuLaunchKernelNVX = (PFN_vkCmdCuLaunchKernelNVX)gdpa(dev, "vkCmdCuLaunchKernelNVX"); + + // ---- VK_NVX_image_view_handle extension commands + table->GetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)gdpa(dev, "vkGetImageViewHandleNVX"); + table->GetImageViewHandle64NVX = (PFN_vkGetImageViewHandle64NVX)gdpa(dev, "vkGetImageViewHandle64NVX"); + table->GetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)gdpa(dev, "vkGetImageViewAddressNVX"); + + // ---- VK_AMD_draw_indirect_count extension commands + table->CmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)gdpa(dev, "vkCmdDrawIndirectCountAMD"); + table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)gdpa(dev, "vkCmdDrawIndexedIndirectCountAMD"); + + // ---- VK_AMD_shader_info extension commands + table->GetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)gdpa(dev, "vkGetShaderInfoAMD"); + + // ---- VK_NV_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)gdpa(dev, "vkGetMemoryWin32HandleNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_conditional_rendering extension commands + table->CmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)gdpa(dev, "vkCmdBeginConditionalRenderingEXT"); + table->CmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)gdpa(dev, "vkCmdEndConditionalRenderingEXT"); + + // ---- VK_NV_clip_space_w_scaling extension commands + table->CmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)gdpa(dev, "vkCmdSetViewportWScalingNV"); + + // ---- VK_EXT_display_control extension commands + table->DisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)gdpa(dev, "vkDisplayPowerControlEXT"); + table->RegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)gdpa(dev, "vkRegisterDeviceEventEXT"); + table->RegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)gdpa(dev, "vkRegisterDisplayEventEXT"); + table->GetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)gdpa(dev, "vkGetSwapchainCounterEXT"); + + // ---- VK_GOOGLE_display_timing extension commands + table->GetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)gdpa(dev, "vkGetRefreshCycleDurationGOOGLE"); + table->GetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)gdpa(dev, "vkGetPastPresentationTimingGOOGLE"); + + // ---- VK_EXT_discard_rectangles extension commands + table->CmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)gdpa(dev, "vkCmdSetDiscardRectangleEXT"); + table->CmdSetDiscardRectangleEnableEXT = (PFN_vkCmdSetDiscardRectangleEnableEXT)gdpa(dev, "vkCmdSetDiscardRectangleEnableEXT"); + table->CmdSetDiscardRectangleModeEXT = (PFN_vkCmdSetDiscardRectangleModeEXT)gdpa(dev, "vkCmdSetDiscardRectangleModeEXT"); + + // ---- VK_EXT_hdr_metadata extension commands + table->SetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)gdpa(dev, "vkSetHdrMetadataEXT"); + + // ---- VK_EXT_debug_utils extension commands + table->SetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)gipa(inst, "vkSetDebugUtilsObjectNameEXT"); + table->SetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)gipa(inst, "vkSetDebugUtilsObjectTagEXT"); + table->QueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)gipa(inst, "vkQueueBeginDebugUtilsLabelEXT"); + table->QueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)gipa(inst, "vkQueueEndDebugUtilsLabelEXT"); + table->QueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT)gipa(inst, "vkQueueInsertDebugUtilsLabelEXT"); + table->CmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)gipa(inst, "vkCmdBeginDebugUtilsLabelEXT"); + table->CmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)gipa(inst, "vkCmdEndDebugUtilsLabelEXT"); + table->CmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)gipa(inst, "vkCmdInsertDebugUtilsLabelEXT"); + + // ---- VK_ANDROID_external_memory_android_hardware_buffer extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + table->GetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)gdpa(dev, "vkGetAndroidHardwareBufferPropertiesANDROID"); +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + table->GetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)gdpa(dev, "vkGetMemoryAndroidHardwareBufferANDROID"); +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_AMDX_shader_enqueue extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CreateExecutionGraphPipelinesAMDX = (PFN_vkCreateExecutionGraphPipelinesAMDX)gdpa(dev, "vkCreateExecutionGraphPipelinesAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->GetExecutionGraphPipelineScratchSizeAMDX = (PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)gdpa(dev, "vkGetExecutionGraphPipelineScratchSizeAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->GetExecutionGraphPipelineNodeIndexAMDX = (PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)gdpa(dev, "vkGetExecutionGraphPipelineNodeIndexAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdInitializeGraphScratchMemoryAMDX = (PFN_vkCmdInitializeGraphScratchMemoryAMDX)gdpa(dev, "vkCmdInitializeGraphScratchMemoryAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdDispatchGraphAMDX = (PFN_vkCmdDispatchGraphAMDX)gdpa(dev, "vkCmdDispatchGraphAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdDispatchGraphIndirectAMDX = (PFN_vkCmdDispatchGraphIndirectAMDX)gdpa(dev, "vkCmdDispatchGraphIndirectAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdDispatchGraphIndirectCountAMDX = (PFN_vkCmdDispatchGraphIndirectCountAMDX)gdpa(dev, "vkCmdDispatchGraphIndirectCountAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_EXT_sample_locations extension commands + table->CmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)gdpa(dev, "vkCmdSetSampleLocationsEXT"); + + // ---- VK_EXT_image_drm_format_modifier extension commands + table->GetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)gdpa(dev, "vkGetImageDrmFormatModifierPropertiesEXT"); + + // ---- VK_EXT_validation_cache extension commands + table->CreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)gdpa(dev, "vkCreateValidationCacheEXT"); + table->DestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)gdpa(dev, "vkDestroyValidationCacheEXT"); + table->MergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)gdpa(dev, "vkMergeValidationCachesEXT"); + table->GetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)gdpa(dev, "vkGetValidationCacheDataEXT"); + + // ---- VK_NV_shading_rate_image extension commands + table->CmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)gdpa(dev, "vkCmdBindShadingRateImageNV"); + table->CmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)gdpa(dev, "vkCmdSetViewportShadingRatePaletteNV"); + table->CmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)gdpa(dev, "vkCmdSetCoarseSampleOrderNV"); + + // ---- VK_NV_ray_tracing extension commands + table->CreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)gdpa(dev, "vkCreateAccelerationStructureNV"); + table->DestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)gdpa(dev, "vkDestroyAccelerationStructureNV"); + table->GetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)gdpa(dev, "vkGetAccelerationStructureMemoryRequirementsNV"); + table->BindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)gdpa(dev, "vkBindAccelerationStructureMemoryNV"); + table->CmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)gdpa(dev, "vkCmdBuildAccelerationStructureNV"); + table->CmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)gdpa(dev, "vkCmdCopyAccelerationStructureNV"); + table->CmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)gdpa(dev, "vkCmdTraceRaysNV"); + table->CreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)gdpa(dev, "vkCreateRayTracingPipelinesNV"); + + // ---- VK_KHR_ray_tracing_pipeline extension commands + table->GetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)gdpa(dev, "vkGetRayTracingShaderGroupHandlesKHR"); + + // ---- VK_NV_ray_tracing extension commands + table->GetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)gdpa(dev, "vkGetRayTracingShaderGroupHandlesNV"); + table->GetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)gdpa(dev, "vkGetAccelerationStructureHandleNV"); + table->CmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)gdpa(dev, "vkCmdWriteAccelerationStructuresPropertiesNV"); + table->CompileDeferredNV = (PFN_vkCompileDeferredNV)gdpa(dev, "vkCompileDeferredNV"); + + // ---- VK_EXT_external_memory_host extension commands + table->GetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)gdpa(dev, "vkGetMemoryHostPointerPropertiesEXT"); + + // ---- VK_AMD_buffer_marker extension commands + table->CmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)gdpa(dev, "vkCmdWriteBufferMarkerAMD"); + table->CmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD)gdpa(dev, "vkCmdWriteBufferMarker2AMD"); + + // ---- VK_EXT_calibrated_timestamps extension commands + table->GetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)gdpa(dev, "vkGetCalibratedTimestampsEXT"); + + // ---- VK_NV_mesh_shader extension commands + table->CmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)gdpa(dev, "vkCmdDrawMeshTasksNV"); + table->CmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)gdpa(dev, "vkCmdDrawMeshTasksIndirectNV"); + table->CmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)gdpa(dev, "vkCmdDrawMeshTasksIndirectCountNV"); + + // ---- VK_NV_scissor_exclusive extension commands + table->CmdSetExclusiveScissorEnableNV = (PFN_vkCmdSetExclusiveScissorEnableNV)gdpa(dev, "vkCmdSetExclusiveScissorEnableNV"); + table->CmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)gdpa(dev, "vkCmdSetExclusiveScissorNV"); + + // ---- VK_NV_device_diagnostic_checkpoints extension commands + table->CmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)gdpa(dev, "vkCmdSetCheckpointNV"); + table->GetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)gdpa(dev, "vkGetQueueCheckpointDataNV"); + table->GetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV)gdpa(dev, "vkGetQueueCheckpointData2NV"); + + // ---- VK_INTEL_performance_query extension commands + table->InitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)gdpa(dev, "vkInitializePerformanceApiINTEL"); + table->UninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)gdpa(dev, "vkUninitializePerformanceApiINTEL"); + table->CmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)gdpa(dev, "vkCmdSetPerformanceMarkerINTEL"); + table->CmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)gdpa(dev, "vkCmdSetPerformanceStreamMarkerINTEL"); + table->CmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)gdpa(dev, "vkCmdSetPerformanceOverrideINTEL"); + table->AcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)gdpa(dev, "vkAcquirePerformanceConfigurationINTEL"); + table->ReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)gdpa(dev, "vkReleasePerformanceConfigurationINTEL"); + table->QueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)gdpa(dev, "vkQueueSetPerformanceConfigurationINTEL"); + table->GetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)gdpa(dev, "vkGetPerformanceParameterINTEL"); + + // ---- VK_AMD_display_native_hdr extension commands + table->SetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)gdpa(dev, "vkSetLocalDimmingAMD"); + + // ---- VK_EXT_buffer_device_address extension commands + table->GetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)gdpa(dev, "vkGetBufferDeviceAddressEXT"); + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->AcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)gdpa(dev, "vkAcquireFullScreenExclusiveModeEXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->ReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)gdpa(dev, "vkReleaseFullScreenExclusiveModeEXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)gdpa(dev, "vkGetDeviceGroupSurfacePresentModes2EXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_line_rasterization extension commands + table->CmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)gdpa(dev, "vkCmdSetLineStippleEXT"); + + // ---- VK_EXT_host_query_reset extension commands + table->ResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)gdpa(dev, "vkResetQueryPoolEXT"); + + // ---- VK_EXT_extended_dynamic_state extension commands + table->CmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)gdpa(dev, "vkCmdSetCullModeEXT"); + table->CmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)gdpa(dev, "vkCmdSetFrontFaceEXT"); + table->CmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)gdpa(dev, "vkCmdSetPrimitiveTopologyEXT"); + table->CmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)gdpa(dev, "vkCmdSetViewportWithCountEXT"); + table->CmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)gdpa(dev, "vkCmdSetScissorWithCountEXT"); + table->CmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)gdpa(dev, "vkCmdBindVertexBuffers2EXT"); + table->CmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)gdpa(dev, "vkCmdSetDepthTestEnableEXT"); + table->CmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)gdpa(dev, "vkCmdSetDepthWriteEnableEXT"); + table->CmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)gdpa(dev, "vkCmdSetDepthCompareOpEXT"); + table->CmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)gdpa(dev, "vkCmdSetDepthBoundsTestEnableEXT"); + table->CmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)gdpa(dev, "vkCmdSetStencilTestEnableEXT"); + table->CmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)gdpa(dev, "vkCmdSetStencilOpEXT"); + + // ---- VK_EXT_host_image_copy extension commands + table->CopyMemoryToImageEXT = (PFN_vkCopyMemoryToImageEXT)gdpa(dev, "vkCopyMemoryToImageEXT"); + table->CopyImageToMemoryEXT = (PFN_vkCopyImageToMemoryEXT)gdpa(dev, "vkCopyImageToMemoryEXT"); + table->CopyImageToImageEXT = (PFN_vkCopyImageToImageEXT)gdpa(dev, "vkCopyImageToImageEXT"); + table->TransitionImageLayoutEXT = (PFN_vkTransitionImageLayoutEXT)gdpa(dev, "vkTransitionImageLayoutEXT"); + table->GetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT)gdpa(dev, "vkGetImageSubresourceLayout2EXT"); + + // ---- VK_EXT_swapchain_maintenance1 extension commands + table->ReleaseSwapchainImagesEXT = (PFN_vkReleaseSwapchainImagesEXT)gdpa(dev, "vkReleaseSwapchainImagesEXT"); + + // ---- VK_NV_device_generated_commands extension commands + table->GetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)gdpa(dev, "vkGetGeneratedCommandsMemoryRequirementsNV"); + table->CmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV)gdpa(dev, "vkCmdPreprocessGeneratedCommandsNV"); + table->CmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV)gdpa(dev, "vkCmdExecuteGeneratedCommandsNV"); + table->CmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV)gdpa(dev, "vkCmdBindPipelineShaderGroupNV"); + table->CreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)gdpa(dev, "vkCreateIndirectCommandsLayoutNV"); + table->DestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)gdpa(dev, "vkDestroyIndirectCommandsLayoutNV"); + + // ---- VK_EXT_depth_bias_control extension commands + table->CmdSetDepthBias2EXT = (PFN_vkCmdSetDepthBias2EXT)gdpa(dev, "vkCmdSetDepthBias2EXT"); + + // ---- VK_EXT_private_data extension commands + table->CreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)gdpa(dev, "vkCreatePrivateDataSlotEXT"); + table->DestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)gdpa(dev, "vkDestroyPrivateDataSlotEXT"); + table->SetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)gdpa(dev, "vkSetPrivateDataEXT"); + table->GetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)gdpa(dev, "vkGetPrivateDataEXT"); + + // ---- VK_NV_cuda_kernel_launch extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CreateCudaModuleNV = (PFN_vkCreateCudaModuleNV)gdpa(dev, "vkCreateCudaModuleNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->GetCudaModuleCacheNV = (PFN_vkGetCudaModuleCacheNV)gdpa(dev, "vkGetCudaModuleCacheNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CreateCudaFunctionNV = (PFN_vkCreateCudaFunctionNV)gdpa(dev, "vkCreateCudaFunctionNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->DestroyCudaModuleNV = (PFN_vkDestroyCudaModuleNV)gdpa(dev, "vkDestroyCudaModuleNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->DestroyCudaFunctionNV = (PFN_vkDestroyCudaFunctionNV)gdpa(dev, "vkDestroyCudaFunctionNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdCudaLaunchKernelNV = (PFN_vkCmdCudaLaunchKernelNV)gdpa(dev, "vkCmdCudaLaunchKernelNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_QCOM_tile_shading extension commands + table->CmdDispatchTileQCOM = (PFN_vkCmdDispatchTileQCOM)gdpa(dev, "vkCmdDispatchTileQCOM"); + table->CmdBeginPerTileExecutionQCOM = (PFN_vkCmdBeginPerTileExecutionQCOM)gdpa(dev, "vkCmdBeginPerTileExecutionQCOM"); + table->CmdEndPerTileExecutionQCOM = (PFN_vkCmdEndPerTileExecutionQCOM)gdpa(dev, "vkCmdEndPerTileExecutionQCOM"); + + // ---- VK_EXT_metal_objects extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->ExportMetalObjectsEXT = (PFN_vkExportMetalObjectsEXT)gdpa(dev, "vkExportMetalObjectsEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_descriptor_buffer extension commands + table->GetDescriptorSetLayoutSizeEXT = (PFN_vkGetDescriptorSetLayoutSizeEXT)gdpa(dev, "vkGetDescriptorSetLayoutSizeEXT"); + table->GetDescriptorSetLayoutBindingOffsetEXT = (PFN_vkGetDescriptorSetLayoutBindingOffsetEXT)gdpa(dev, "vkGetDescriptorSetLayoutBindingOffsetEXT"); + table->GetDescriptorEXT = (PFN_vkGetDescriptorEXT)gdpa(dev, "vkGetDescriptorEXT"); + table->CmdBindDescriptorBuffersEXT = (PFN_vkCmdBindDescriptorBuffersEXT)gdpa(dev, "vkCmdBindDescriptorBuffersEXT"); + table->CmdSetDescriptorBufferOffsetsEXT = (PFN_vkCmdSetDescriptorBufferOffsetsEXT)gdpa(dev, "vkCmdSetDescriptorBufferOffsetsEXT"); + table->CmdBindDescriptorBufferEmbeddedSamplersEXT = (PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT)gdpa(dev, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT"); + table->GetBufferOpaqueCaptureDescriptorDataEXT = (PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT)gdpa(dev, "vkGetBufferOpaqueCaptureDescriptorDataEXT"); + table->GetImageOpaqueCaptureDescriptorDataEXT = (PFN_vkGetImageOpaqueCaptureDescriptorDataEXT)gdpa(dev, "vkGetImageOpaqueCaptureDescriptorDataEXT"); + table->GetImageViewOpaqueCaptureDescriptorDataEXT = (PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT)gdpa(dev, "vkGetImageViewOpaqueCaptureDescriptorDataEXT"); + table->GetSamplerOpaqueCaptureDescriptorDataEXT = (PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT)gdpa(dev, "vkGetSamplerOpaqueCaptureDescriptorDataEXT"); + table->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT = (PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT)gdpa(dev, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT"); + + // ---- VK_NV_fragment_shading_rate_enums extension commands + table->CmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV)gdpa(dev, "vkCmdSetFragmentShadingRateEnumNV"); + + // ---- VK_EXT_device_fault extension commands + table->GetDeviceFaultInfoEXT = (PFN_vkGetDeviceFaultInfoEXT)gdpa(dev, "vkGetDeviceFaultInfoEXT"); + + // ---- VK_EXT_vertex_input_dynamic_state extension commands + table->CmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)gdpa(dev, "vkCmdSetVertexInputEXT"); + + // ---- VK_FUCHSIA_external_memory extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)gdpa(dev, "vkGetMemoryZirconHandleFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)gdpa(dev, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_external_semaphore extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->ImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)gdpa(dev, "vkImportSemaphoreZirconHandleFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)gdpa(dev, "vkGetSemaphoreZirconHandleFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_buffer_collection extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->CreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)gdpa(dev, "vkCreateBufferCollectionFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->SetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)gdpa(dev, "vkSetBufferCollectionImageConstraintsFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->SetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)gdpa(dev, "vkSetBufferCollectionBufferConstraintsFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->DestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)gdpa(dev, "vkDestroyBufferCollectionFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)gdpa(dev, "vkGetBufferCollectionPropertiesFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_HUAWEI_subpass_shading extension commands + table->GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = (PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)gdpa(dev, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"); + table->CmdSubpassShadingHUAWEI = (PFN_vkCmdSubpassShadingHUAWEI)gdpa(dev, "vkCmdSubpassShadingHUAWEI"); + + // ---- VK_HUAWEI_invocation_mask extension commands + table->CmdBindInvocationMaskHUAWEI = (PFN_vkCmdBindInvocationMaskHUAWEI)gdpa(dev, "vkCmdBindInvocationMaskHUAWEI"); + + // ---- VK_NV_external_memory_rdma extension commands + table->GetMemoryRemoteAddressNV = (PFN_vkGetMemoryRemoteAddressNV)gdpa(dev, "vkGetMemoryRemoteAddressNV"); + + // ---- VK_EXT_pipeline_properties extension commands + table->GetPipelinePropertiesEXT = (PFN_vkGetPipelinePropertiesEXT)gdpa(dev, "vkGetPipelinePropertiesEXT"); + + // ---- VK_EXT_extended_dynamic_state2 extension commands + table->CmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT)gdpa(dev, "vkCmdSetPatchControlPointsEXT"); + table->CmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT)gdpa(dev, "vkCmdSetRasterizerDiscardEnableEXT"); + table->CmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT)gdpa(dev, "vkCmdSetDepthBiasEnableEXT"); + table->CmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT)gdpa(dev, "vkCmdSetLogicOpEXT"); + table->CmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT)gdpa(dev, "vkCmdSetPrimitiveRestartEnableEXT"); + + // ---- VK_EXT_color_write_enable extension commands + table->CmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)gdpa(dev, "vkCmdSetColorWriteEnableEXT"); + + // ---- VK_EXT_multi_draw extension commands + table->CmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)gdpa(dev, "vkCmdDrawMultiEXT"); + table->CmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)gdpa(dev, "vkCmdDrawMultiIndexedEXT"); + + // ---- VK_EXT_opacity_micromap extension commands + table->CreateMicromapEXT = (PFN_vkCreateMicromapEXT)gdpa(dev, "vkCreateMicromapEXT"); + table->DestroyMicromapEXT = (PFN_vkDestroyMicromapEXT)gdpa(dev, "vkDestroyMicromapEXT"); + table->CmdBuildMicromapsEXT = (PFN_vkCmdBuildMicromapsEXT)gdpa(dev, "vkCmdBuildMicromapsEXT"); + table->BuildMicromapsEXT = (PFN_vkBuildMicromapsEXT)gdpa(dev, "vkBuildMicromapsEXT"); + table->CopyMicromapEXT = (PFN_vkCopyMicromapEXT)gdpa(dev, "vkCopyMicromapEXT"); + table->CopyMicromapToMemoryEXT = (PFN_vkCopyMicromapToMemoryEXT)gdpa(dev, "vkCopyMicromapToMemoryEXT"); + table->CopyMemoryToMicromapEXT = (PFN_vkCopyMemoryToMicromapEXT)gdpa(dev, "vkCopyMemoryToMicromapEXT"); + table->WriteMicromapsPropertiesEXT = (PFN_vkWriteMicromapsPropertiesEXT)gdpa(dev, "vkWriteMicromapsPropertiesEXT"); + table->CmdCopyMicromapEXT = (PFN_vkCmdCopyMicromapEXT)gdpa(dev, "vkCmdCopyMicromapEXT"); + table->CmdCopyMicromapToMemoryEXT = (PFN_vkCmdCopyMicromapToMemoryEXT)gdpa(dev, "vkCmdCopyMicromapToMemoryEXT"); + table->CmdCopyMemoryToMicromapEXT = (PFN_vkCmdCopyMemoryToMicromapEXT)gdpa(dev, "vkCmdCopyMemoryToMicromapEXT"); + table->CmdWriteMicromapsPropertiesEXT = (PFN_vkCmdWriteMicromapsPropertiesEXT)gdpa(dev, "vkCmdWriteMicromapsPropertiesEXT"); + table->GetDeviceMicromapCompatibilityEXT = (PFN_vkGetDeviceMicromapCompatibilityEXT)gdpa(dev, "vkGetDeviceMicromapCompatibilityEXT"); + table->GetMicromapBuildSizesEXT = (PFN_vkGetMicromapBuildSizesEXT)gdpa(dev, "vkGetMicromapBuildSizesEXT"); + + // ---- VK_HUAWEI_cluster_culling_shader extension commands + table->CmdDrawClusterHUAWEI = (PFN_vkCmdDrawClusterHUAWEI)gdpa(dev, "vkCmdDrawClusterHUAWEI"); + table->CmdDrawClusterIndirectHUAWEI = (PFN_vkCmdDrawClusterIndirectHUAWEI)gdpa(dev, "vkCmdDrawClusterIndirectHUAWEI"); + + // ---- VK_EXT_pageable_device_local_memory extension commands + table->SetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)gdpa(dev, "vkSetDeviceMemoryPriorityEXT"); + + // ---- VK_VALVE_descriptor_set_host_mapping extension commands + table->GetDescriptorSetLayoutHostMappingInfoVALVE = (PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)gdpa(dev, "vkGetDescriptorSetLayoutHostMappingInfoVALVE"); + table->GetDescriptorSetHostMappingVALVE = (PFN_vkGetDescriptorSetHostMappingVALVE)gdpa(dev, "vkGetDescriptorSetHostMappingVALVE"); + + // ---- VK_NV_copy_memory_indirect extension commands + table->CmdCopyMemoryIndirectNV = (PFN_vkCmdCopyMemoryIndirectNV)gdpa(dev, "vkCmdCopyMemoryIndirectNV"); + table->CmdCopyMemoryToImageIndirectNV = (PFN_vkCmdCopyMemoryToImageIndirectNV)gdpa(dev, "vkCmdCopyMemoryToImageIndirectNV"); + + // ---- VK_NV_memory_decompression extension commands + table->CmdDecompressMemoryNV = (PFN_vkCmdDecompressMemoryNV)gdpa(dev, "vkCmdDecompressMemoryNV"); + table->CmdDecompressMemoryIndirectCountNV = (PFN_vkCmdDecompressMemoryIndirectCountNV)gdpa(dev, "vkCmdDecompressMemoryIndirectCountNV"); + + // ---- VK_NV_device_generated_commands_compute extension commands + table->GetPipelineIndirectMemoryRequirementsNV = (PFN_vkGetPipelineIndirectMemoryRequirementsNV)gdpa(dev, "vkGetPipelineIndirectMemoryRequirementsNV"); + table->CmdUpdatePipelineIndirectBufferNV = (PFN_vkCmdUpdatePipelineIndirectBufferNV)gdpa(dev, "vkCmdUpdatePipelineIndirectBufferNV"); + table->GetPipelineIndirectDeviceAddressNV = (PFN_vkGetPipelineIndirectDeviceAddressNV)gdpa(dev, "vkGetPipelineIndirectDeviceAddressNV"); + + // ---- VK_EXT_extended_dynamic_state3 extension commands + table->CmdSetDepthClampEnableEXT = (PFN_vkCmdSetDepthClampEnableEXT)gdpa(dev, "vkCmdSetDepthClampEnableEXT"); + table->CmdSetPolygonModeEXT = (PFN_vkCmdSetPolygonModeEXT)gdpa(dev, "vkCmdSetPolygonModeEXT"); + table->CmdSetRasterizationSamplesEXT = (PFN_vkCmdSetRasterizationSamplesEXT)gdpa(dev, "vkCmdSetRasterizationSamplesEXT"); + table->CmdSetSampleMaskEXT = (PFN_vkCmdSetSampleMaskEXT)gdpa(dev, "vkCmdSetSampleMaskEXT"); + table->CmdSetAlphaToCoverageEnableEXT = (PFN_vkCmdSetAlphaToCoverageEnableEXT)gdpa(dev, "vkCmdSetAlphaToCoverageEnableEXT"); + table->CmdSetAlphaToOneEnableEXT = (PFN_vkCmdSetAlphaToOneEnableEXT)gdpa(dev, "vkCmdSetAlphaToOneEnableEXT"); + table->CmdSetLogicOpEnableEXT = (PFN_vkCmdSetLogicOpEnableEXT)gdpa(dev, "vkCmdSetLogicOpEnableEXT"); + table->CmdSetColorBlendEnableEXT = (PFN_vkCmdSetColorBlendEnableEXT)gdpa(dev, "vkCmdSetColorBlendEnableEXT"); + table->CmdSetColorBlendEquationEXT = (PFN_vkCmdSetColorBlendEquationEXT)gdpa(dev, "vkCmdSetColorBlendEquationEXT"); + table->CmdSetColorWriteMaskEXT = (PFN_vkCmdSetColorWriteMaskEXT)gdpa(dev, "vkCmdSetColorWriteMaskEXT"); + table->CmdSetTessellationDomainOriginEXT = (PFN_vkCmdSetTessellationDomainOriginEXT)gdpa(dev, "vkCmdSetTessellationDomainOriginEXT"); + table->CmdSetRasterizationStreamEXT = (PFN_vkCmdSetRasterizationStreamEXT)gdpa(dev, "vkCmdSetRasterizationStreamEXT"); + table->CmdSetConservativeRasterizationModeEXT = (PFN_vkCmdSetConservativeRasterizationModeEXT)gdpa(dev, "vkCmdSetConservativeRasterizationModeEXT"); + table->CmdSetExtraPrimitiveOverestimationSizeEXT = (PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)gdpa(dev, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); + table->CmdSetDepthClipEnableEXT = (PFN_vkCmdSetDepthClipEnableEXT)gdpa(dev, "vkCmdSetDepthClipEnableEXT"); + table->CmdSetSampleLocationsEnableEXT = (PFN_vkCmdSetSampleLocationsEnableEXT)gdpa(dev, "vkCmdSetSampleLocationsEnableEXT"); + table->CmdSetColorBlendAdvancedEXT = (PFN_vkCmdSetColorBlendAdvancedEXT)gdpa(dev, "vkCmdSetColorBlendAdvancedEXT"); + table->CmdSetProvokingVertexModeEXT = (PFN_vkCmdSetProvokingVertexModeEXT)gdpa(dev, "vkCmdSetProvokingVertexModeEXT"); + table->CmdSetLineRasterizationModeEXT = (PFN_vkCmdSetLineRasterizationModeEXT)gdpa(dev, "vkCmdSetLineRasterizationModeEXT"); + table->CmdSetLineStippleEnableEXT = (PFN_vkCmdSetLineStippleEnableEXT)gdpa(dev, "vkCmdSetLineStippleEnableEXT"); + table->CmdSetDepthClipNegativeOneToOneEXT = (PFN_vkCmdSetDepthClipNegativeOneToOneEXT)gdpa(dev, "vkCmdSetDepthClipNegativeOneToOneEXT"); + table->CmdSetViewportWScalingEnableNV = (PFN_vkCmdSetViewportWScalingEnableNV)gdpa(dev, "vkCmdSetViewportWScalingEnableNV"); + table->CmdSetViewportSwizzleNV = (PFN_vkCmdSetViewportSwizzleNV)gdpa(dev, "vkCmdSetViewportSwizzleNV"); + table->CmdSetCoverageToColorEnableNV = (PFN_vkCmdSetCoverageToColorEnableNV)gdpa(dev, "vkCmdSetCoverageToColorEnableNV"); + table->CmdSetCoverageToColorLocationNV = (PFN_vkCmdSetCoverageToColorLocationNV)gdpa(dev, "vkCmdSetCoverageToColorLocationNV"); + table->CmdSetCoverageModulationModeNV = (PFN_vkCmdSetCoverageModulationModeNV)gdpa(dev, "vkCmdSetCoverageModulationModeNV"); + table->CmdSetCoverageModulationTableEnableNV = (PFN_vkCmdSetCoverageModulationTableEnableNV)gdpa(dev, "vkCmdSetCoverageModulationTableEnableNV"); + table->CmdSetCoverageModulationTableNV = (PFN_vkCmdSetCoverageModulationTableNV)gdpa(dev, "vkCmdSetCoverageModulationTableNV"); + table->CmdSetShadingRateImageEnableNV = (PFN_vkCmdSetShadingRateImageEnableNV)gdpa(dev, "vkCmdSetShadingRateImageEnableNV"); + table->CmdSetRepresentativeFragmentTestEnableNV = (PFN_vkCmdSetRepresentativeFragmentTestEnableNV)gdpa(dev, "vkCmdSetRepresentativeFragmentTestEnableNV"); + table->CmdSetCoverageReductionModeNV = (PFN_vkCmdSetCoverageReductionModeNV)gdpa(dev, "vkCmdSetCoverageReductionModeNV"); + + // ---- VK_ARM_tensors extension commands + table->CreateTensorARM = (PFN_vkCreateTensorARM)gdpa(dev, "vkCreateTensorARM"); + table->DestroyTensorARM = (PFN_vkDestroyTensorARM)gdpa(dev, "vkDestroyTensorARM"); + table->CreateTensorViewARM = (PFN_vkCreateTensorViewARM)gdpa(dev, "vkCreateTensorViewARM"); + table->DestroyTensorViewARM = (PFN_vkDestroyTensorViewARM)gdpa(dev, "vkDestroyTensorViewARM"); + table->GetTensorMemoryRequirementsARM = (PFN_vkGetTensorMemoryRequirementsARM)gdpa(dev, "vkGetTensorMemoryRequirementsARM"); + table->BindTensorMemoryARM = (PFN_vkBindTensorMemoryARM)gdpa(dev, "vkBindTensorMemoryARM"); + table->GetDeviceTensorMemoryRequirementsARM = (PFN_vkGetDeviceTensorMemoryRequirementsARM)gdpa(dev, "vkGetDeviceTensorMemoryRequirementsARM"); + table->CmdCopyTensorARM = (PFN_vkCmdCopyTensorARM)gdpa(dev, "vkCmdCopyTensorARM"); + table->GetTensorOpaqueCaptureDescriptorDataARM = (PFN_vkGetTensorOpaqueCaptureDescriptorDataARM)gdpa(dev, "vkGetTensorOpaqueCaptureDescriptorDataARM"); + table->GetTensorViewOpaqueCaptureDescriptorDataARM = (PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM)gdpa(dev, "vkGetTensorViewOpaqueCaptureDescriptorDataARM"); + + // ---- VK_EXT_shader_module_identifier extension commands + table->GetShaderModuleIdentifierEXT = (PFN_vkGetShaderModuleIdentifierEXT)gdpa(dev, "vkGetShaderModuleIdentifierEXT"); + table->GetShaderModuleCreateInfoIdentifierEXT = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT)gdpa(dev, "vkGetShaderModuleCreateInfoIdentifierEXT"); + + // ---- VK_NV_optical_flow extension commands + table->CreateOpticalFlowSessionNV = (PFN_vkCreateOpticalFlowSessionNV)gdpa(dev, "vkCreateOpticalFlowSessionNV"); + table->DestroyOpticalFlowSessionNV = (PFN_vkDestroyOpticalFlowSessionNV)gdpa(dev, "vkDestroyOpticalFlowSessionNV"); + table->BindOpticalFlowSessionImageNV = (PFN_vkBindOpticalFlowSessionImageNV)gdpa(dev, "vkBindOpticalFlowSessionImageNV"); + table->CmdOpticalFlowExecuteNV = (PFN_vkCmdOpticalFlowExecuteNV)gdpa(dev, "vkCmdOpticalFlowExecuteNV"); + + // ---- VK_AMD_anti_lag extension commands + table->AntiLagUpdateAMD = (PFN_vkAntiLagUpdateAMD)gdpa(dev, "vkAntiLagUpdateAMD"); + + // ---- VK_EXT_shader_object extension commands + table->CreateShadersEXT = (PFN_vkCreateShadersEXT)gdpa(dev, "vkCreateShadersEXT"); + table->DestroyShaderEXT = (PFN_vkDestroyShaderEXT)gdpa(dev, "vkDestroyShaderEXT"); + table->GetShaderBinaryDataEXT = (PFN_vkGetShaderBinaryDataEXT)gdpa(dev, "vkGetShaderBinaryDataEXT"); + table->CmdBindShadersEXT = (PFN_vkCmdBindShadersEXT)gdpa(dev, "vkCmdBindShadersEXT"); + table->CmdSetDepthClampRangeEXT = (PFN_vkCmdSetDepthClampRangeEXT)gdpa(dev, "vkCmdSetDepthClampRangeEXT"); + + // ---- VK_QCOM_tile_properties extension commands + table->GetFramebufferTilePropertiesQCOM = (PFN_vkGetFramebufferTilePropertiesQCOM)gdpa(dev, "vkGetFramebufferTilePropertiesQCOM"); + table->GetDynamicRenderingTilePropertiesQCOM = (PFN_vkGetDynamicRenderingTilePropertiesQCOM)gdpa(dev, "vkGetDynamicRenderingTilePropertiesQCOM"); + + // ---- VK_NV_cooperative_vector extension commands + table->ConvertCooperativeVectorMatrixNV = (PFN_vkConvertCooperativeVectorMatrixNV)gdpa(dev, "vkConvertCooperativeVectorMatrixNV"); + table->CmdConvertCooperativeVectorMatrixNV = (PFN_vkCmdConvertCooperativeVectorMatrixNV)gdpa(dev, "vkCmdConvertCooperativeVectorMatrixNV"); + + // ---- VK_NV_low_latency2 extension commands + table->SetLatencySleepModeNV = (PFN_vkSetLatencySleepModeNV)gdpa(dev, "vkSetLatencySleepModeNV"); + table->LatencySleepNV = (PFN_vkLatencySleepNV)gdpa(dev, "vkLatencySleepNV"); + table->SetLatencyMarkerNV = (PFN_vkSetLatencyMarkerNV)gdpa(dev, "vkSetLatencyMarkerNV"); + table->GetLatencyTimingsNV = (PFN_vkGetLatencyTimingsNV)gdpa(dev, "vkGetLatencyTimingsNV"); + table->QueueNotifyOutOfBandNV = (PFN_vkQueueNotifyOutOfBandNV)gdpa(dev, "vkQueueNotifyOutOfBandNV"); + + // ---- VK_ARM_data_graph extension commands + table->CreateDataGraphPipelinesARM = (PFN_vkCreateDataGraphPipelinesARM)gdpa(dev, "vkCreateDataGraphPipelinesARM"); + table->CreateDataGraphPipelineSessionARM = (PFN_vkCreateDataGraphPipelineSessionARM)gdpa(dev, "vkCreateDataGraphPipelineSessionARM"); + table->GetDataGraphPipelineSessionBindPointRequirementsARM = (PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM)gdpa(dev, "vkGetDataGraphPipelineSessionBindPointRequirementsARM"); + table->GetDataGraphPipelineSessionMemoryRequirementsARM = (PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM)gdpa(dev, "vkGetDataGraphPipelineSessionMemoryRequirementsARM"); + table->BindDataGraphPipelineSessionMemoryARM = (PFN_vkBindDataGraphPipelineSessionMemoryARM)gdpa(dev, "vkBindDataGraphPipelineSessionMemoryARM"); + table->DestroyDataGraphPipelineSessionARM = (PFN_vkDestroyDataGraphPipelineSessionARM)gdpa(dev, "vkDestroyDataGraphPipelineSessionARM"); + table->CmdDispatchDataGraphARM = (PFN_vkCmdDispatchDataGraphARM)gdpa(dev, "vkCmdDispatchDataGraphARM"); + table->GetDataGraphPipelineAvailablePropertiesARM = (PFN_vkGetDataGraphPipelineAvailablePropertiesARM)gdpa(dev, "vkGetDataGraphPipelineAvailablePropertiesARM"); + table->GetDataGraphPipelinePropertiesARM = (PFN_vkGetDataGraphPipelinePropertiesARM)gdpa(dev, "vkGetDataGraphPipelinePropertiesARM"); + + // ---- VK_EXT_attachment_feedback_loop_dynamic_state extension commands + table->CmdSetAttachmentFeedbackLoopEnableEXT = (PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)gdpa(dev, "vkCmdSetAttachmentFeedbackLoopEnableEXT"); + + // ---- VK_QNX_external_memory_screen_buffer extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + table->GetScreenBufferPropertiesQNX = (PFN_vkGetScreenBufferPropertiesQNX)gdpa(dev, "vkGetScreenBufferPropertiesQNX"); +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_QCOM_tile_memory_heap extension commands + table->CmdBindTileMemoryQCOM = (PFN_vkCmdBindTileMemoryQCOM)gdpa(dev, "vkCmdBindTileMemoryQCOM"); + + // ---- VK_NV_external_compute_queue extension commands + table->CreateExternalComputeQueueNV = (PFN_vkCreateExternalComputeQueueNV)gdpa(dev, "vkCreateExternalComputeQueueNV"); + table->DestroyExternalComputeQueueNV = (PFN_vkDestroyExternalComputeQueueNV)gdpa(dev, "vkDestroyExternalComputeQueueNV"); + table->GetExternalComputeQueueDataNV = (PFN_vkGetExternalComputeQueueDataNV)gdpa(dev, "vkGetExternalComputeQueueDataNV"); + + // ---- VK_NV_cluster_acceleration_structure extension commands + table->GetClusterAccelerationStructureBuildSizesNV = (PFN_vkGetClusterAccelerationStructureBuildSizesNV)gdpa(dev, "vkGetClusterAccelerationStructureBuildSizesNV"); + table->CmdBuildClusterAccelerationStructureIndirectNV = (PFN_vkCmdBuildClusterAccelerationStructureIndirectNV)gdpa(dev, "vkCmdBuildClusterAccelerationStructureIndirectNV"); + + // ---- VK_NV_partitioned_acceleration_structure extension commands + table->GetPartitionedAccelerationStructuresBuildSizesNV = (PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV)gdpa(dev, "vkGetPartitionedAccelerationStructuresBuildSizesNV"); + table->CmdBuildPartitionedAccelerationStructuresNV = (PFN_vkCmdBuildPartitionedAccelerationStructuresNV)gdpa(dev, "vkCmdBuildPartitionedAccelerationStructuresNV"); + + // ---- VK_EXT_device_generated_commands extension commands + table->GetGeneratedCommandsMemoryRequirementsEXT = (PFN_vkGetGeneratedCommandsMemoryRequirementsEXT)gdpa(dev, "vkGetGeneratedCommandsMemoryRequirementsEXT"); + table->CmdPreprocessGeneratedCommandsEXT = (PFN_vkCmdPreprocessGeneratedCommandsEXT)gdpa(dev, "vkCmdPreprocessGeneratedCommandsEXT"); + table->CmdExecuteGeneratedCommandsEXT = (PFN_vkCmdExecuteGeneratedCommandsEXT)gdpa(dev, "vkCmdExecuteGeneratedCommandsEXT"); + table->CreateIndirectCommandsLayoutEXT = (PFN_vkCreateIndirectCommandsLayoutEXT)gdpa(dev, "vkCreateIndirectCommandsLayoutEXT"); + table->DestroyIndirectCommandsLayoutEXT = (PFN_vkDestroyIndirectCommandsLayoutEXT)gdpa(dev, "vkDestroyIndirectCommandsLayoutEXT"); + table->CreateIndirectExecutionSetEXT = (PFN_vkCreateIndirectExecutionSetEXT)gdpa(dev, "vkCreateIndirectExecutionSetEXT"); + table->DestroyIndirectExecutionSetEXT = (PFN_vkDestroyIndirectExecutionSetEXT)gdpa(dev, "vkDestroyIndirectExecutionSetEXT"); + table->UpdateIndirectExecutionSetPipelineEXT = (PFN_vkUpdateIndirectExecutionSetPipelineEXT)gdpa(dev, "vkUpdateIndirectExecutionSetPipelineEXT"); + table->UpdateIndirectExecutionSetShaderEXT = (PFN_vkUpdateIndirectExecutionSetShaderEXT)gdpa(dev, "vkUpdateIndirectExecutionSetShaderEXT"); + + // ---- VK_EXT_external_memory_metal extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->GetMemoryMetalHandleEXT = (PFN_vkGetMemoryMetalHandleEXT)gdpa(dev, "vkGetMemoryMetalHandleEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->GetMemoryMetalHandlePropertiesEXT = (PFN_vkGetMemoryMetalHandlePropertiesEXT)gdpa(dev, "vkGetMemoryMetalHandlePropertiesEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_fragment_density_map_offset extension commands + table->CmdEndRendering2EXT = (PFN_vkCmdEndRendering2EXT)gdpa(dev, "vkCmdEndRendering2EXT"); + + // ---- VK_KHR_acceleration_structure extension commands + table->CreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)gdpa(dev, "vkCreateAccelerationStructureKHR"); + table->DestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)gdpa(dev, "vkDestroyAccelerationStructureKHR"); + table->CmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR)gdpa(dev, "vkCmdBuildAccelerationStructuresKHR"); + table->CmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)gdpa(dev, "vkCmdBuildAccelerationStructuresIndirectKHR"); + table->BuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)gdpa(dev, "vkBuildAccelerationStructuresKHR"); + table->CopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)gdpa(dev, "vkCopyAccelerationStructureKHR"); + table->CopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)gdpa(dev, "vkCopyAccelerationStructureToMemoryKHR"); + table->CopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)gdpa(dev, "vkCopyMemoryToAccelerationStructureKHR"); + table->WriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)gdpa(dev, "vkWriteAccelerationStructuresPropertiesKHR"); + table->CmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR)gdpa(dev, "vkCmdCopyAccelerationStructureKHR"); + table->CmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)gdpa(dev, "vkCmdCopyAccelerationStructureToMemoryKHR"); + table->CmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)gdpa(dev, "vkCmdCopyMemoryToAccelerationStructureKHR"); + table->GetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)gdpa(dev, "vkGetAccelerationStructureDeviceAddressKHR"); + table->CmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)gdpa(dev, "vkCmdWriteAccelerationStructuresPropertiesKHR"); + table->GetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)gdpa(dev, "vkGetDeviceAccelerationStructureCompatibilityKHR"); + table->GetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)gdpa(dev, "vkGetAccelerationStructureBuildSizesKHR"); + + // ---- VK_KHR_ray_tracing_pipeline extension commands + table->CmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)gdpa(dev, "vkCmdTraceRaysKHR"); + table->CreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)gdpa(dev, "vkCreateRayTracingPipelinesKHR"); + table->GetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)gdpa(dev, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); + table->CmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR)gdpa(dev, "vkCmdTraceRaysIndirectKHR"); + table->GetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)gdpa(dev, "vkGetRayTracingShaderGroupStackSizeKHR"); + table->CmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)gdpa(dev, "vkCmdSetRayTracingPipelineStackSizeKHR"); + + // ---- VK_EXT_mesh_shader extension commands + table->CmdDrawMeshTasksEXT = (PFN_vkCmdDrawMeshTasksEXT)gdpa(dev, "vkCmdDrawMeshTasksEXT"); + table->CmdDrawMeshTasksIndirectEXT = (PFN_vkCmdDrawMeshTasksIndirectEXT)gdpa(dev, "vkCmdDrawMeshTasksIndirectEXT"); + table->CmdDrawMeshTasksIndirectCountEXT = (PFN_vkCmdDrawMeshTasksIndirectCountEXT)gdpa(dev, "vkCmdDrawMeshTasksIndirectCountEXT"); +} + +// Init Instance function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, + VkInstance inst) { + + // ---- Core Vulkan 1.0 commands + table->DestroyInstance = (PFN_vkDestroyInstance)gpa(inst, "vkDestroyInstance"); + table->EnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)gpa(inst, "vkEnumeratePhysicalDevices"); + table->GetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)gpa(inst, "vkGetPhysicalDeviceFeatures"); + table->GetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)gpa(inst, "vkGetPhysicalDeviceFormatProperties"); + table->GetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)gpa(inst, "vkGetPhysicalDeviceImageFormatProperties"); + table->GetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)gpa(inst, "vkGetPhysicalDeviceProperties"); + table->GetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)gpa(inst, "vkGetPhysicalDeviceQueueFamilyProperties"); + table->GetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)gpa(inst, "vkGetPhysicalDeviceMemoryProperties"); + table->GetInstanceProcAddr = gpa; + table->EnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)gpa(inst, "vkEnumerateDeviceExtensionProperties"); + table->EnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)gpa(inst, "vkEnumerateDeviceLayerProperties"); + table->GetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)gpa(inst, "vkGetPhysicalDeviceSparseImageFormatProperties"); + + // ---- Core Vulkan 1.1 commands + table->EnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)gpa(inst, "vkEnumeratePhysicalDeviceGroups"); + table->GetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)gpa(inst, "vkGetPhysicalDeviceFeatures2"); + table->GetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)gpa(inst, "vkGetPhysicalDeviceProperties2"); + table->GetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)gpa(inst, "vkGetPhysicalDeviceFormatProperties2"); + table->GetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)gpa(inst, "vkGetPhysicalDeviceImageFormatProperties2"); + table->GetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)gpa(inst, "vkGetPhysicalDeviceQueueFamilyProperties2"); + table->GetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)gpa(inst, "vkGetPhysicalDeviceMemoryProperties2"); + table->GetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)gpa(inst, "vkGetPhysicalDeviceSparseImageFormatProperties2"); + table->GetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)gpa(inst, "vkGetPhysicalDeviceExternalBufferProperties"); + table->GetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)gpa(inst, "vkGetPhysicalDeviceExternalFenceProperties"); + table->GetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)gpa(inst, "vkGetPhysicalDeviceExternalSemaphoreProperties"); + + // ---- Core Vulkan 1.3 commands + table->GetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)gpa(inst, "vkGetPhysicalDeviceToolProperties"); +} + +// Init Instance function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, + VkInstance inst) { + + // ---- VK_KHR_surface extension commands + table->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(inst, "vkDestroySurfaceKHR"); + table->GetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(inst, "vkGetPhysicalDeviceSurfaceSupportKHR"); + table->GetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); + table->GetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(inst, "vkGetPhysicalDeviceSurfaceFormatsKHR"); + table->GetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(inst, "vkGetPhysicalDeviceSurfacePresentModesKHR"); + + // ---- VK_KHR_swapchain extension commands + table->GetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR)gpa(inst, "vkGetPhysicalDevicePresentRectanglesKHR"); + + // ---- VK_KHR_display extension commands + table->GetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)gpa(inst, "vkGetPhysicalDeviceDisplayPropertiesKHR"); + table->GetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)gpa(inst, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + table->GetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)gpa(inst, "vkGetDisplayPlaneSupportedDisplaysKHR"); + table->GetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)gpa(inst, "vkGetDisplayModePropertiesKHR"); + table->CreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)gpa(inst, "vkCreateDisplayModeKHR"); + table->GetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)gpa(inst, "vkGetDisplayPlaneCapabilitiesKHR"); + table->CreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa(inst, "vkCreateDisplayPlaneSurfaceKHR"); + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + table->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(inst, "vkCreateXlibSurfaceKHR"); +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + table->GetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + table->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(inst, "vkCreateXcbSurfaceKHR"); +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + table->GetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + table->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(inst, "vkCreateWaylandSurfaceKHR"); +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + table->GetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + table->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(inst, "vkCreateAndroidSurfaceKHR"); +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(inst, "vkCreateWin32SurfaceKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(inst, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_video_queue extension commands + table->GetPhysicalDeviceVideoCapabilitiesKHR = (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)gpa(inst, "vkGetPhysicalDeviceVideoCapabilitiesKHR"); + table->GetPhysicalDeviceVideoFormatPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)gpa(inst, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"); + + // ---- VK_KHR_get_physical_device_properties2 extension commands + table->GetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)gpa(inst, "vkGetPhysicalDeviceFeatures2KHR"); + table->GetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)gpa(inst, "vkGetPhysicalDeviceProperties2KHR"); + table->GetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)gpa(inst, "vkGetPhysicalDeviceFormatProperties2KHR"); + table->GetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)gpa(inst, "vkGetPhysicalDeviceImageFormatProperties2KHR"); + table->GetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)gpa(inst, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + table->GetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)gpa(inst, "vkGetPhysicalDeviceMemoryProperties2KHR"); + table->GetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)gpa(inst, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + + // ---- VK_KHR_device_group_creation extension commands + table->EnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR)gpa(inst, "vkEnumeratePhysicalDeviceGroupsKHR"); + + // ---- VK_KHR_external_memory_capabilities extension commands + table->GetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)gpa(inst, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + + // ---- VK_KHR_external_semaphore_capabilities extension commands + table->GetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)gpa(inst, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + + // ---- VK_KHR_external_fence_capabilities extension commands + table->GetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)gpa(inst, "vkGetPhysicalDeviceExternalFencePropertiesKHR"); + + // ---- VK_KHR_performance_query extension commands + table->EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)gpa(inst, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); + table->GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = (PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)gpa(inst, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); + + // ---- VK_KHR_get_surface_capabilities2 extension commands + table->GetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + table->GetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)gpa(inst, "vkGetPhysicalDeviceSurfaceFormats2KHR"); + + // ---- VK_KHR_get_display_properties2 extension commands + table->GetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR)gpa(inst, "vkGetPhysicalDeviceDisplayProperties2KHR"); + table->GetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)gpa(inst, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + table->GetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR)gpa(inst, "vkGetDisplayModeProperties2KHR"); + table->GetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR)gpa(inst, "vkGetDisplayPlaneCapabilities2KHR"); + + // ---- VK_KHR_fragment_shading_rate extension commands + table->GetPhysicalDeviceFragmentShadingRatesKHR = (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)gpa(inst, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); + + // ---- VK_KHR_video_encode_queue extension commands + table->GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR)gpa(inst, "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR"); + + // ---- VK_KHR_cooperative_matrix extension commands + table->GetPhysicalDeviceCooperativeMatrixPropertiesKHR = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR)gpa(inst, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR"); + + // ---- VK_KHR_calibrated_timestamps extension commands + table->GetPhysicalDeviceCalibrateableTimeDomainsKHR = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)gpa(inst, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR"); + + // ---- VK_EXT_debug_report extension commands + table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)gpa(inst, "vkCreateDebugReportCallbackEXT"); + table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)gpa(inst, "vkDestroyDebugReportCallbackEXT"); + table->DebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)gpa(inst, "vkDebugReportMessageEXT"); + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + table->CreateStreamDescriptorSurfaceGGP = (PFN_vkCreateStreamDescriptorSurfaceGGP)gpa(inst, "vkCreateStreamDescriptorSurfaceGGP"); +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + table->GetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)gpa(inst, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + table->CreateViSurfaceNN = (PFN_vkCreateViSurfaceNN)gpa(inst, "vkCreateViSurfaceNN"); +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + table->ReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)gpa(inst, "vkReleaseDisplayEXT"); + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + table->AcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT)gpa(inst, "vkAcquireXlibDisplayEXT"); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + table->GetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT)gpa(inst, "vkGetRandROutputDisplayEXT"); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + table->GetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)gpa(inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT"); + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + table->CreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK)gpa(inst, "vkCreateIOSSurfaceMVK"); +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + table->CreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)gpa(inst, "vkCreateMacOSSurfaceMVK"); +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + table->CreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)gpa(inst, "vkCreateDebugUtilsMessengerEXT"); + table->DestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)gpa(inst, "vkDestroyDebugUtilsMessengerEXT"); + table->SubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT)gpa(inst, "vkSubmitDebugUtilsMessageEXT"); + + // ---- VK_EXT_sample_locations extension commands + table->GetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)gpa(inst, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); + + // ---- VK_EXT_calibrated_timestamps extension commands + table->GetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)gpa(inst, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->CreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA)gpa(inst, "vkCreateImagePipeSurfaceFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->CreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)gpa(inst, "vkCreateMetalSurfaceEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_tooling_info extension commands + table->GetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)gpa(inst, "vkGetPhysicalDeviceToolPropertiesEXT"); + + // ---- VK_NV_cooperative_matrix extension commands + table->GetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)gpa(inst, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"); + + // ---- VK_NV_coverage_reduction_mode extension commands + table->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)gpa(inst, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"); + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetPhysicalDeviceSurfacePresentModes2EXT = (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)gpa(inst, "vkGetPhysicalDeviceSurfacePresentModes2EXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_headless_surface extension commands + table->CreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT)gpa(inst, "vkCreateHeadlessSurfaceEXT"); + + // ---- VK_EXT_acquire_drm_display extension commands + table->AcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT)gpa(inst, "vkAcquireDrmDisplayEXT"); + table->GetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)gpa(inst, "vkGetDrmDisplayEXT"); + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->AcquireWinrtDisplayNV = (PFN_vkAcquireWinrtDisplayNV)gpa(inst, "vkAcquireWinrtDisplayNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetWinrtDisplayNV = (PFN_vkGetWinrtDisplayNV)gpa(inst, "vkGetWinrtDisplayNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + table->CreateDirectFBSurfaceEXT = (PFN_vkCreateDirectFBSurfaceEXT)gpa(inst, "vkCreateDirectFBSurfaceEXT"); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + table->GetPhysicalDeviceDirectFBPresentationSupportEXT = (PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)gpa(inst, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT"); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + table->CreateScreenSurfaceQNX = (PFN_vkCreateScreenSurfaceQNX)gpa(inst, "vkCreateScreenSurfaceQNX"); +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + table->GetPhysicalDeviceScreenPresentationSupportQNX = (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)gpa(inst, "vkGetPhysicalDeviceScreenPresentationSupportQNX"); +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_ARM_tensors extension commands + table->GetPhysicalDeviceExternalTensorPropertiesARM = (PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)gpa(inst, "vkGetPhysicalDeviceExternalTensorPropertiesARM"); + + // ---- VK_NV_optical_flow extension commands + table->GetPhysicalDeviceOpticalFlowImageFormatsNV = (PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV)gpa(inst, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV"); + + // ---- VK_NV_cooperative_vector extension commands + table->GetPhysicalDeviceCooperativeVectorPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)gpa(inst, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV"); + + // ---- VK_ARM_data_graph extension commands + table->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = (PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM)gpa(inst, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM"); + table->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = (PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM)gpa(inst, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM"); + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + table->CreateSurfaceOHOS = (PFN_vkCreateSurfaceOHOS)gpa(inst, "vkCreateSurfaceOHOS"); +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + table->GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)gpa(inst, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV"); +} + +// Functions that required a terminator need to have a separate dispatch table which contains their corresponding +// device function. This is used in the terminators themselves. +void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) { + struct loader_device_terminator_dispatch* dispatch = &dev->loader_dispatch.extension_terminator_dispatch; + PFN_vkGetDeviceProcAddr gpda = (PFN_vkGetDeviceProcAddr)dev->phys_dev_term->this_icd_term->dispatch.GetDeviceProcAddr; + + // ---- VK_KHR_swapchain extension commands + if (dev->driver_extensions.khr_swapchain_enabled) + dispatch->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpda(dev->icd_device, "vkCreateSwapchainKHR"); + if (dev->driver_extensions.khr_swapchain_enabled || dev->driver_extensions.khr_device_group_enabled) + dispatch->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModesKHR"); + + // ---- VK_KHR_display_swapchain extension commands + if (dev->driver_extensions.khr_display_swapchain_enabled) + dispatch->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)gpda(dev->icd_device, "vkCreateSharedSwapchainsKHR"); + + // ---- VK_EXT_debug_marker extension commands + if (dev->driver_extensions.ext_debug_marker_enabled) + dispatch->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)gpda(dev->icd_device, "vkDebugMarkerSetObjectTagEXT"); + if (dev->driver_extensions.ext_debug_marker_enabled) + dispatch->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)gpda(dev->icd_device, "vkDebugMarkerSetObjectNameEXT"); + + // ---- VK_EXT_debug_utils extension commands + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->SetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)gpda(dev->icd_device, "vkSetDebugUtilsObjectNameEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->SetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)gpda(dev->icd_device, "vkSetDebugUtilsObjectTagEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->QueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)gpda(dev->icd_device, "vkQueueBeginDebugUtilsLabelEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->QueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)gpda(dev->icd_device, "vkQueueEndDebugUtilsLabelEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->QueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT)gpda(dev->icd_device, "vkQueueInsertDebugUtilsLabelEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->CmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)gpda(dev->icd_device, "vkCmdBeginDebugUtilsLabelEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->CmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)gpda(dev->icd_device, "vkCmdEndDebugUtilsLabelEXT"); + if (dev->driver_extensions.ext_debug_utils_enabled) + dispatch->CmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)gpda(dev->icd_device, "vkCmdInsertDebugUtilsLabelEXT"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + + // ---- VK_EXT_full_screen_exclusive extension commands + if (dev->driver_extensions.ext_full_screen_exclusive_enabled) + dispatch->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModes2EXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR +} + +// These are prototypes for functions that need their trampoline called in all circumstances. +// They are used in loader_lookup_device_dispatch_table but are defined afterwards. + + // ---- VK_EXT_debug_marker extension commands +VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT( + VkDevice device, + const VkDebugMarkerObjectTagInfoEXT* pTagInfo); +VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT( + VkDevice device, + const VkDebugMarkerObjectNameInfoEXT* pNameInfo); + + // ---- VK_EXT_debug_utils extension commands +VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT( + VkDevice device, + const VkDebugUtilsObjectNameInfoEXT* pNameInfo); +VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT( + VkDevice device, + const VkDebugUtilsObjectTagInfoEXT* pTagInfo); + +// Device command lookup function +VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name, bool* found_name) { + if (!name || name[0] != 'v' || name[1] != 'k') { + *found_name = false; + return NULL; + } + + name += 2; + *found_name = true; + struct loader_device* dev = (struct loader_device *)table; + const struct loader_instance* inst = dev->phys_dev_term->this_icd_term->this_instance; + uint32_t api_version = VK_MAKE_API_VERSION(0, inst->app_api_version.major, inst->app_api_version.minor, inst->app_api_version.patch); + + + // ---- Core Vulkan 1.0 commands + if (!strcmp(name, "GetDeviceProcAddr")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetDeviceProcAddr; + } + if (!strcmp(name, "DestroyDevice")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyDevice; + } + if (!strcmp(name, "GetDeviceQueue")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetDeviceQueue; + } + if (!strcmp(name, "QueueSubmit")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->QueueSubmit; + } + if (!strcmp(name, "QueueWaitIdle")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->QueueWaitIdle; + } + if (!strcmp(name, "DeviceWaitIdle")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DeviceWaitIdle; + } + if (!strcmp(name, "AllocateMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->AllocateMemory; + } + if (!strcmp(name, "FreeMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->FreeMemory; + } + if (!strcmp(name, "MapMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->MapMemory; + } + if (!strcmp(name, "UnmapMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->UnmapMemory; + } + if (!strcmp(name, "FlushMappedMemoryRanges")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->FlushMappedMemoryRanges; + } + if (!strcmp(name, "InvalidateMappedMemoryRanges")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->InvalidateMappedMemoryRanges; + } + if (!strcmp(name, "GetDeviceMemoryCommitment")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetDeviceMemoryCommitment; + } + if (!strcmp(name, "BindBufferMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->BindBufferMemory; + } + if (!strcmp(name, "BindImageMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->BindImageMemory; + } + if (!strcmp(name, "GetBufferMemoryRequirements")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetBufferMemoryRequirements; + } + if (!strcmp(name, "GetImageMemoryRequirements")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetImageMemoryRequirements; + } + if (!strcmp(name, "GetImageSparseMemoryRequirements")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetImageSparseMemoryRequirements; + } + if (!strcmp(name, "QueueBindSparse")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->QueueBindSparse; + } + if (!strcmp(name, "CreateFence")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateFence; + } + if (!strcmp(name, "DestroyFence")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyFence; + } + if (!strcmp(name, "ResetFences")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->ResetFences; + } + if (!strcmp(name, "GetFenceStatus")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetFenceStatus; + } + if (!strcmp(name, "WaitForFences")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->WaitForFences; + } + if (!strcmp(name, "CreateSemaphore")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateSemaphore; + } + if (!strcmp(name, "DestroySemaphore")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroySemaphore; + } + if (!strcmp(name, "CreateEvent")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateEvent; + } + if (!strcmp(name, "DestroyEvent")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyEvent; + } + if (!strcmp(name, "GetEventStatus")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetEventStatus; + } + if (!strcmp(name, "SetEvent")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->SetEvent; + } + if (!strcmp(name, "ResetEvent")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->ResetEvent; + } + if (!strcmp(name, "CreateQueryPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateQueryPool; + } + if (!strcmp(name, "DestroyQueryPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyQueryPool; + } + if (!strcmp(name, "GetQueryPoolResults")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetQueryPoolResults; + } + if (!strcmp(name, "CreateBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateBuffer; + } + if (!strcmp(name, "DestroyBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyBuffer; + } + if (!strcmp(name, "CreateBufferView")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateBufferView; + } + if (!strcmp(name, "DestroyBufferView")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyBufferView; + } + if (!strcmp(name, "CreateImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateImage; + } + if (!strcmp(name, "DestroyImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyImage; + } + if (!strcmp(name, "GetImageSubresourceLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetImageSubresourceLayout; + } + if (!strcmp(name, "CreateImageView")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateImageView; + } + if (!strcmp(name, "DestroyImageView")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyImageView; + } + if (!strcmp(name, "CreateShaderModule")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateShaderModule; + } + if (!strcmp(name, "DestroyShaderModule")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyShaderModule; + } + if (!strcmp(name, "CreatePipelineCache")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreatePipelineCache; + } + if (!strcmp(name, "DestroyPipelineCache")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyPipelineCache; + } + if (!strcmp(name, "GetPipelineCacheData")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetPipelineCacheData; + } + if (!strcmp(name, "MergePipelineCaches")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->MergePipelineCaches; + } + if (!strcmp(name, "CreateGraphicsPipelines")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateGraphicsPipelines; + } + if (!strcmp(name, "CreateComputePipelines")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateComputePipelines; + } + if (!strcmp(name, "DestroyPipeline")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyPipeline; + } + if (!strcmp(name, "CreatePipelineLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreatePipelineLayout; + } + if (!strcmp(name, "DestroyPipelineLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyPipelineLayout; + } + if (!strcmp(name, "CreateSampler")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateSampler; + } + if (!strcmp(name, "DestroySampler")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroySampler; + } + if (!strcmp(name, "CreateDescriptorSetLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateDescriptorSetLayout; + } + if (!strcmp(name, "DestroyDescriptorSetLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyDescriptorSetLayout; + } + if (!strcmp(name, "CreateDescriptorPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateDescriptorPool; + } + if (!strcmp(name, "DestroyDescriptorPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyDescriptorPool; + } + if (!strcmp(name, "ResetDescriptorPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->ResetDescriptorPool; + } + if (!strcmp(name, "AllocateDescriptorSets")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->AllocateDescriptorSets; + } + if (!strcmp(name, "FreeDescriptorSets")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->FreeDescriptorSets; + } + if (!strcmp(name, "UpdateDescriptorSets")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->UpdateDescriptorSets; + } + if (!strcmp(name, "CreateFramebuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateFramebuffer; + } + if (!strcmp(name, "DestroyFramebuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyFramebuffer; + } + if (!strcmp(name, "CreateRenderPass")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateRenderPass; + } + if (!strcmp(name, "DestroyRenderPass")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyRenderPass; + } + if (!strcmp(name, "GetRenderAreaGranularity")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->GetRenderAreaGranularity; + } + if (!strcmp(name, "CreateCommandPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CreateCommandPool; + } + if (!strcmp(name, "DestroyCommandPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->DestroyCommandPool; + } + if (!strcmp(name, "ResetCommandPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->ResetCommandPool; + } + if (!strcmp(name, "AllocateCommandBuffers")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->AllocateCommandBuffers; + } + if (!strcmp(name, "FreeCommandBuffers")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->FreeCommandBuffers; + } + if (!strcmp(name, "BeginCommandBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->BeginCommandBuffer; + } + if (!strcmp(name, "EndCommandBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->EndCommandBuffer; + } + if (!strcmp(name, "ResetCommandBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->ResetCommandBuffer; + } + if (!strcmp(name, "CmdBindPipeline")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBindPipeline; + } + if (!strcmp(name, "CmdSetViewport")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetViewport; + } + if (!strcmp(name, "CmdSetScissor")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetScissor; + } + if (!strcmp(name, "CmdSetLineWidth")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetLineWidth; + } + if (!strcmp(name, "CmdSetDepthBias")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetDepthBias; + } + if (!strcmp(name, "CmdSetBlendConstants")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetBlendConstants; + } + if (!strcmp(name, "CmdSetDepthBounds")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetDepthBounds; + } + if (!strcmp(name, "CmdSetStencilCompareMask")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetStencilCompareMask; + } + if (!strcmp(name, "CmdSetStencilWriteMask")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetStencilWriteMask; + } + if (!strcmp(name, "CmdSetStencilReference")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetStencilReference; + } + if (!strcmp(name, "CmdBindDescriptorSets")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBindDescriptorSets; + } + if (!strcmp(name, "CmdBindIndexBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBindIndexBuffer; + } + if (!strcmp(name, "CmdBindVertexBuffers")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBindVertexBuffers; + } + if (!strcmp(name, "CmdDraw")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdDraw; + } + if (!strcmp(name, "CmdDrawIndexed")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdDrawIndexed; + } + if (!strcmp(name, "CmdDrawIndirect")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdDrawIndirect; + } + if (!strcmp(name, "CmdDrawIndexedIndirect")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdDrawIndexedIndirect; + } + if (!strcmp(name, "CmdDispatch")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdDispatch; + } + if (!strcmp(name, "CmdDispatchIndirect")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdDispatchIndirect; + } + if (!strcmp(name, "CmdCopyBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdCopyBuffer; + } + if (!strcmp(name, "CmdCopyImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdCopyImage; + } + if (!strcmp(name, "CmdBlitImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBlitImage; + } + if (!strcmp(name, "CmdCopyBufferToImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdCopyBufferToImage; + } + if (!strcmp(name, "CmdCopyImageToBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdCopyImageToBuffer; + } + if (!strcmp(name, "CmdUpdateBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdUpdateBuffer; + } + if (!strcmp(name, "CmdFillBuffer")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdFillBuffer; + } + if (!strcmp(name, "CmdClearColorImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdClearColorImage; + } + if (!strcmp(name, "CmdClearDepthStencilImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdClearDepthStencilImage; + } + if (!strcmp(name, "CmdClearAttachments")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdClearAttachments; + } + if (!strcmp(name, "CmdResolveImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdResolveImage; + } + if (!strcmp(name, "CmdSetEvent")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdSetEvent; + } + if (!strcmp(name, "CmdResetEvent")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdResetEvent; + } + if (!strcmp(name, "CmdWaitEvents")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdWaitEvents; + } + if (!strcmp(name, "CmdPipelineBarrier")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdPipelineBarrier; + } + if (!strcmp(name, "CmdBeginQuery")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBeginQuery; + } + if (!strcmp(name, "CmdEndQuery")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdEndQuery; + } + if (!strcmp(name, "CmdResetQueryPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdResetQueryPool; + } + if (!strcmp(name, "CmdWriteTimestamp")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdWriteTimestamp; + } + if (!strcmp(name, "CmdCopyQueryPoolResults")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdCopyQueryPoolResults; + } + if (!strcmp(name, "CmdPushConstants")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdPushConstants; + } + if (!strcmp(name, "CmdBeginRenderPass")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdBeginRenderPass; + } + if (!strcmp(name, "CmdNextSubpass")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdNextSubpass; + } + if (!strcmp(name, "CmdEndRenderPass")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdEndRenderPass; + } + if (!strcmp(name, "CmdExecuteCommands")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_0) return NULL; + return (void *)table->CmdExecuteCommands; + } + + // ---- Core Vulkan 1.1 commands + if (!strcmp(name, "BindBufferMemory2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->BindBufferMemory2; + } + if (!strcmp(name, "BindImageMemory2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->BindImageMemory2; + } + if (!strcmp(name, "GetDeviceGroupPeerMemoryFeatures")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->GetDeviceGroupPeerMemoryFeatures; + } + if (!strcmp(name, "CmdSetDeviceMask")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->CmdSetDeviceMask; + } + if (!strcmp(name, "CmdDispatchBase")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->CmdDispatchBase; + } + if (!strcmp(name, "GetImageMemoryRequirements2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->GetImageMemoryRequirements2; + } + if (!strcmp(name, "GetBufferMemoryRequirements2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->GetBufferMemoryRequirements2; + } + if (!strcmp(name, "GetImageSparseMemoryRequirements2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->GetImageSparseMemoryRequirements2; + } + if (!strcmp(name, "TrimCommandPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->TrimCommandPool; + } + if (!strcmp(name, "GetDeviceQueue2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->GetDeviceQueue2; + } + if (!strcmp(name, "CreateSamplerYcbcrConversion")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->CreateSamplerYcbcrConversion; + } + if (!strcmp(name, "DestroySamplerYcbcrConversion")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->DestroySamplerYcbcrConversion; + } + if (!strcmp(name, "CreateDescriptorUpdateTemplate")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->CreateDescriptorUpdateTemplate; + } + if (!strcmp(name, "DestroyDescriptorUpdateTemplate")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->DestroyDescriptorUpdateTemplate; + } + if (!strcmp(name, "UpdateDescriptorSetWithTemplate")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->UpdateDescriptorSetWithTemplate; + } + if (!strcmp(name, "GetDescriptorSetLayoutSupport")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) return NULL; + return (void *)table->GetDescriptorSetLayoutSupport; + } + + // ---- Core Vulkan 1.2 commands + if (!strcmp(name, "CmdDrawIndirectCount")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->CmdDrawIndirectCount; + } + if (!strcmp(name, "CmdDrawIndexedIndirectCount")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->CmdDrawIndexedIndirectCount; + } + if (!strcmp(name, "CreateRenderPass2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->CreateRenderPass2; + } + if (!strcmp(name, "CmdBeginRenderPass2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->CmdBeginRenderPass2; + } + if (!strcmp(name, "CmdNextSubpass2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->CmdNextSubpass2; + } + if (!strcmp(name, "CmdEndRenderPass2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->CmdEndRenderPass2; + } + if (!strcmp(name, "ResetQueryPool")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->ResetQueryPool; + } + if (!strcmp(name, "GetSemaphoreCounterValue")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->GetSemaphoreCounterValue; + } + if (!strcmp(name, "WaitSemaphores")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->WaitSemaphores; + } + if (!strcmp(name, "SignalSemaphore")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->SignalSemaphore; + } + if (!strcmp(name, "GetBufferDeviceAddress")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->GetBufferDeviceAddress; + } + if (!strcmp(name, "GetBufferOpaqueCaptureAddress")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->GetBufferOpaqueCaptureAddress; + } + if (!strcmp(name, "GetDeviceMemoryOpaqueCaptureAddress")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_2) return NULL; + return (void *)table->GetDeviceMemoryOpaqueCaptureAddress; + } + + // ---- Core Vulkan 1.3 commands + if (!strcmp(name, "CreatePrivateDataSlot")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CreatePrivateDataSlot; + } + if (!strcmp(name, "DestroyPrivateDataSlot")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->DestroyPrivateDataSlot; + } + if (!strcmp(name, "SetPrivateData")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->SetPrivateData; + } + if (!strcmp(name, "GetPrivateData")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->GetPrivateData; + } + if (!strcmp(name, "CmdSetEvent2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetEvent2; + } + if (!strcmp(name, "CmdResetEvent2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdResetEvent2; + } + if (!strcmp(name, "CmdWaitEvents2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdWaitEvents2; + } + if (!strcmp(name, "CmdPipelineBarrier2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdPipelineBarrier2; + } + if (!strcmp(name, "CmdWriteTimestamp2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdWriteTimestamp2; + } + if (!strcmp(name, "QueueSubmit2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->QueueSubmit2; + } + if (!strcmp(name, "CmdCopyBuffer2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdCopyBuffer2; + } + if (!strcmp(name, "CmdCopyImage2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdCopyImage2; + } + if (!strcmp(name, "CmdCopyBufferToImage2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdCopyBufferToImage2; + } + if (!strcmp(name, "CmdCopyImageToBuffer2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdCopyImageToBuffer2; + } + if (!strcmp(name, "CmdBlitImage2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdBlitImage2; + } + if (!strcmp(name, "CmdResolveImage2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdResolveImage2; + } + if (!strcmp(name, "CmdBeginRendering")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdBeginRendering; + } + if (!strcmp(name, "CmdEndRendering")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdEndRendering; + } + if (!strcmp(name, "CmdSetCullMode")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetCullMode; + } + if (!strcmp(name, "CmdSetFrontFace")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetFrontFace; + } + if (!strcmp(name, "CmdSetPrimitiveTopology")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetPrimitiveTopology; + } + if (!strcmp(name, "CmdSetViewportWithCount")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetViewportWithCount; + } + if (!strcmp(name, "CmdSetScissorWithCount")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetScissorWithCount; + } + if (!strcmp(name, "CmdBindVertexBuffers2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdBindVertexBuffers2; + } + if (!strcmp(name, "CmdSetDepthTestEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetDepthTestEnable; + } + if (!strcmp(name, "CmdSetDepthWriteEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetDepthWriteEnable; + } + if (!strcmp(name, "CmdSetDepthCompareOp")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetDepthCompareOp; + } + if (!strcmp(name, "CmdSetDepthBoundsTestEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetDepthBoundsTestEnable; + } + if (!strcmp(name, "CmdSetStencilTestEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetStencilTestEnable; + } + if (!strcmp(name, "CmdSetStencilOp")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetStencilOp; + } + if (!strcmp(name, "CmdSetRasterizerDiscardEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetRasterizerDiscardEnable; + } + if (!strcmp(name, "CmdSetDepthBiasEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetDepthBiasEnable; + } + if (!strcmp(name, "CmdSetPrimitiveRestartEnable")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->CmdSetPrimitiveRestartEnable; + } + if (!strcmp(name, "GetDeviceBufferMemoryRequirements")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->GetDeviceBufferMemoryRequirements; + } + if (!strcmp(name, "GetDeviceImageMemoryRequirements")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->GetDeviceImageMemoryRequirements; + } + if (!strcmp(name, "GetDeviceImageSparseMemoryRequirements")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_3) return NULL; + return (void *)table->GetDeviceImageSparseMemoryRequirements; + } + + // ---- Core Vulkan 1.4 commands + if (!strcmp(name, "CmdSetLineStipple")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdSetLineStipple; + } + if (!strcmp(name, "MapMemory2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->MapMemory2; + } + if (!strcmp(name, "UnmapMemory2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->UnmapMemory2; + } + if (!strcmp(name, "CmdBindIndexBuffer2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdBindIndexBuffer2; + } + if (!strcmp(name, "GetRenderingAreaGranularity")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->GetRenderingAreaGranularity; + } + if (!strcmp(name, "GetDeviceImageSubresourceLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->GetDeviceImageSubresourceLayout; + } + if (!strcmp(name, "GetImageSubresourceLayout2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->GetImageSubresourceLayout2; + } + if (!strcmp(name, "CmdPushDescriptorSet")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdPushDescriptorSet; + } + if (!strcmp(name, "CmdPushDescriptorSetWithTemplate")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdPushDescriptorSetWithTemplate; + } + if (!strcmp(name, "CmdSetRenderingAttachmentLocations")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdSetRenderingAttachmentLocations; + } + if (!strcmp(name, "CmdSetRenderingInputAttachmentIndices")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdSetRenderingInputAttachmentIndices; + } + if (!strcmp(name, "CmdBindDescriptorSets2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdBindDescriptorSets2; + } + if (!strcmp(name, "CmdPushConstants2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdPushConstants2; + } + if (!strcmp(name, "CmdPushDescriptorSet2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdPushDescriptorSet2; + } + if (!strcmp(name, "CmdPushDescriptorSetWithTemplate2")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CmdPushDescriptorSetWithTemplate2; + } + if (!strcmp(name, "CopyMemoryToImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CopyMemoryToImage; + } + if (!strcmp(name, "CopyImageToMemory")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CopyImageToMemory; + } + if (!strcmp(name, "CopyImageToImage")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->CopyImageToImage; + } + if (!strcmp(name, "TransitionImageLayout")) { + if (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_4) return NULL; + return (void *)table->TransitionImageLayout; + } + + // ---- VK_KHR_swapchain extension commands + if (!strcmp(name, "CreateSwapchainKHR")) return (void *)table->CreateSwapchainKHR; + if (!strcmp(name, "DestroySwapchainKHR")) return (void *)table->DestroySwapchainKHR; + if (!strcmp(name, "GetSwapchainImagesKHR")) return (void *)table->GetSwapchainImagesKHR; + if (!strcmp(name, "AcquireNextImageKHR")) return (void *)table->AcquireNextImageKHR; + if (!strcmp(name, "QueuePresentKHR")) return (void *)table->QueuePresentKHR; + if (!strcmp(name, "GetDeviceGroupPresentCapabilitiesKHR")) return (void *)table->GetDeviceGroupPresentCapabilitiesKHR; + if (!strcmp(name, "GetDeviceGroupSurfacePresentModesKHR")) return (void *)table->GetDeviceGroupSurfacePresentModesKHR; + if (!strcmp(name, "AcquireNextImage2KHR")) return (void *)table->AcquireNextImage2KHR; + + // ---- VK_KHR_display_swapchain extension commands + if (!strcmp(name, "CreateSharedSwapchainsKHR")) return (void *)table->CreateSharedSwapchainsKHR; + + // ---- VK_KHR_video_queue extension commands + if (!strcmp(name, "CreateVideoSessionKHR")) return (void *)table->CreateVideoSessionKHR; + if (!strcmp(name, "DestroyVideoSessionKHR")) return (void *)table->DestroyVideoSessionKHR; + if (!strcmp(name, "GetVideoSessionMemoryRequirementsKHR")) return (void *)table->GetVideoSessionMemoryRequirementsKHR; + if (!strcmp(name, "BindVideoSessionMemoryKHR")) return (void *)table->BindVideoSessionMemoryKHR; + if (!strcmp(name, "CreateVideoSessionParametersKHR")) return (void *)table->CreateVideoSessionParametersKHR; + if (!strcmp(name, "UpdateVideoSessionParametersKHR")) return (void *)table->UpdateVideoSessionParametersKHR; + if (!strcmp(name, "DestroyVideoSessionParametersKHR")) return (void *)table->DestroyVideoSessionParametersKHR; + if (!strcmp(name, "CmdBeginVideoCodingKHR")) return (void *)table->CmdBeginVideoCodingKHR; + if (!strcmp(name, "CmdEndVideoCodingKHR")) return (void *)table->CmdEndVideoCodingKHR; + if (!strcmp(name, "CmdControlVideoCodingKHR")) return (void *)table->CmdControlVideoCodingKHR; + + // ---- VK_KHR_video_decode_queue extension commands + if (!strcmp(name, "CmdDecodeVideoKHR")) return (void *)table->CmdDecodeVideoKHR; + + // ---- VK_KHR_dynamic_rendering extension commands + if (!strcmp(name, "CmdBeginRenderingKHR")) return (void *)table->CmdBeginRenderingKHR; + if (!strcmp(name, "CmdEndRenderingKHR")) return (void *)table->CmdEndRenderingKHR; + + // ---- VK_KHR_device_group extension commands + if (!strcmp(name, "GetDeviceGroupPeerMemoryFeaturesKHR")) return (void *)table->GetDeviceGroupPeerMemoryFeaturesKHR; + if (!strcmp(name, "CmdSetDeviceMaskKHR")) return (void *)table->CmdSetDeviceMaskKHR; + if (!strcmp(name, "CmdDispatchBaseKHR")) return (void *)table->CmdDispatchBaseKHR; + + // ---- VK_KHR_maintenance1 extension commands + if (!strcmp(name, "TrimCommandPoolKHR")) return (void *)table->TrimCommandPoolKHR; + + // ---- VK_KHR_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetMemoryWin32HandleKHR")) return (void *)table->GetMemoryWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetMemoryWin32HandlePropertiesKHR")) return (void *)table->GetMemoryWin32HandlePropertiesKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_memory_fd extension commands + if (!strcmp(name, "GetMemoryFdKHR")) return (void *)table->GetMemoryFdKHR; + if (!strcmp(name, "GetMemoryFdPropertiesKHR")) return (void *)table->GetMemoryFdPropertiesKHR; + + // ---- VK_KHR_external_semaphore_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "ImportSemaphoreWin32HandleKHR")) return (void *)table->ImportSemaphoreWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetSemaphoreWin32HandleKHR")) return (void *)table->GetSemaphoreWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_semaphore_fd extension commands + if (!strcmp(name, "ImportSemaphoreFdKHR")) return (void *)table->ImportSemaphoreFdKHR; + if (!strcmp(name, "GetSemaphoreFdKHR")) return (void *)table->GetSemaphoreFdKHR; + + // ---- VK_KHR_push_descriptor extension commands + if (!strcmp(name, "CmdPushDescriptorSetKHR")) return (void *)table->CmdPushDescriptorSetKHR; + if (!strcmp(name, "CmdPushDescriptorSetWithTemplateKHR")) return (void *)table->CmdPushDescriptorSetWithTemplateKHR; + + // ---- VK_KHR_descriptor_update_template extension commands + if (!strcmp(name, "CreateDescriptorUpdateTemplateKHR")) return (void *)table->CreateDescriptorUpdateTemplateKHR; + if (!strcmp(name, "DestroyDescriptorUpdateTemplateKHR")) return (void *)table->DestroyDescriptorUpdateTemplateKHR; + if (!strcmp(name, "UpdateDescriptorSetWithTemplateKHR")) return (void *)table->UpdateDescriptorSetWithTemplateKHR; + + // ---- VK_KHR_create_renderpass2 extension commands + if (!strcmp(name, "CreateRenderPass2KHR")) return (void *)table->CreateRenderPass2KHR; + if (!strcmp(name, "CmdBeginRenderPass2KHR")) return (void *)table->CmdBeginRenderPass2KHR; + if (!strcmp(name, "CmdNextSubpass2KHR")) return (void *)table->CmdNextSubpass2KHR; + if (!strcmp(name, "CmdEndRenderPass2KHR")) return (void *)table->CmdEndRenderPass2KHR; + + // ---- VK_KHR_shared_presentable_image extension commands + if (!strcmp(name, "GetSwapchainStatusKHR")) return (void *)table->GetSwapchainStatusKHR; + + // ---- VK_KHR_external_fence_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "ImportFenceWin32HandleKHR")) return (void *)table->ImportFenceWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetFenceWin32HandleKHR")) return (void *)table->GetFenceWin32HandleKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_fence_fd extension commands + if (!strcmp(name, "ImportFenceFdKHR")) return (void *)table->ImportFenceFdKHR; + if (!strcmp(name, "GetFenceFdKHR")) return (void *)table->GetFenceFdKHR; + + // ---- VK_KHR_performance_query extension commands + if (!strcmp(name, "AcquireProfilingLockKHR")) return (void *)table->AcquireProfilingLockKHR; + if (!strcmp(name, "ReleaseProfilingLockKHR")) return (void *)table->ReleaseProfilingLockKHR; + + // ---- VK_KHR_get_memory_requirements2 extension commands + if (!strcmp(name, "GetImageMemoryRequirements2KHR")) return (void *)table->GetImageMemoryRequirements2KHR; + if (!strcmp(name, "GetBufferMemoryRequirements2KHR")) return (void *)table->GetBufferMemoryRequirements2KHR; + if (!strcmp(name, "GetImageSparseMemoryRequirements2KHR")) return (void *)table->GetImageSparseMemoryRequirements2KHR; + + // ---- VK_KHR_sampler_ycbcr_conversion extension commands + if (!strcmp(name, "CreateSamplerYcbcrConversionKHR")) return (void *)table->CreateSamplerYcbcrConversionKHR; + if (!strcmp(name, "DestroySamplerYcbcrConversionKHR")) return (void *)table->DestroySamplerYcbcrConversionKHR; + + // ---- VK_KHR_bind_memory2 extension commands + if (!strcmp(name, "BindBufferMemory2KHR")) return (void *)table->BindBufferMemory2KHR; + if (!strcmp(name, "BindImageMemory2KHR")) return (void *)table->BindImageMemory2KHR; + + // ---- VK_KHR_maintenance3 extension commands + if (!strcmp(name, "GetDescriptorSetLayoutSupportKHR")) return (void *)table->GetDescriptorSetLayoutSupportKHR; + + // ---- VK_KHR_draw_indirect_count extension commands + if (!strcmp(name, "CmdDrawIndirectCountKHR")) return (void *)table->CmdDrawIndirectCountKHR; + if (!strcmp(name, "CmdDrawIndexedIndirectCountKHR")) return (void *)table->CmdDrawIndexedIndirectCountKHR; + + // ---- VK_KHR_timeline_semaphore extension commands + if (!strcmp(name, "GetSemaphoreCounterValueKHR")) return (void *)table->GetSemaphoreCounterValueKHR; + if (!strcmp(name, "WaitSemaphoresKHR")) return (void *)table->WaitSemaphoresKHR; + if (!strcmp(name, "SignalSemaphoreKHR")) return (void *)table->SignalSemaphoreKHR; + + // ---- VK_KHR_fragment_shading_rate extension commands + if (!strcmp(name, "CmdSetFragmentShadingRateKHR")) return (void *)table->CmdSetFragmentShadingRateKHR; + + // ---- VK_KHR_dynamic_rendering_local_read extension commands + if (!strcmp(name, "CmdSetRenderingAttachmentLocationsKHR")) return (void *)table->CmdSetRenderingAttachmentLocationsKHR; + if (!strcmp(name, "CmdSetRenderingInputAttachmentIndicesKHR")) return (void *)table->CmdSetRenderingInputAttachmentIndicesKHR; + + // ---- VK_KHR_present_wait extension commands + if (!strcmp(name, "WaitForPresentKHR")) return (void *)table->WaitForPresentKHR; + + // ---- VK_KHR_buffer_device_address extension commands + if (!strcmp(name, "GetBufferDeviceAddressKHR")) return (void *)table->GetBufferDeviceAddressKHR; + if (!strcmp(name, "GetBufferOpaqueCaptureAddressKHR")) return (void *)table->GetBufferOpaqueCaptureAddressKHR; + if (!strcmp(name, "GetDeviceMemoryOpaqueCaptureAddressKHR")) return (void *)table->GetDeviceMemoryOpaqueCaptureAddressKHR; + + // ---- VK_KHR_deferred_host_operations extension commands + if (!strcmp(name, "CreateDeferredOperationKHR")) return (void *)table->CreateDeferredOperationKHR; + if (!strcmp(name, "DestroyDeferredOperationKHR")) return (void *)table->DestroyDeferredOperationKHR; + if (!strcmp(name, "GetDeferredOperationMaxConcurrencyKHR")) return (void *)table->GetDeferredOperationMaxConcurrencyKHR; + if (!strcmp(name, "GetDeferredOperationResultKHR")) return (void *)table->GetDeferredOperationResultKHR; + if (!strcmp(name, "DeferredOperationJoinKHR")) return (void *)table->DeferredOperationJoinKHR; + + // ---- VK_KHR_pipeline_executable_properties extension commands + if (!strcmp(name, "GetPipelineExecutablePropertiesKHR")) return (void *)table->GetPipelineExecutablePropertiesKHR; + if (!strcmp(name, "GetPipelineExecutableStatisticsKHR")) return (void *)table->GetPipelineExecutableStatisticsKHR; + if (!strcmp(name, "GetPipelineExecutableInternalRepresentationsKHR")) return (void *)table->GetPipelineExecutableInternalRepresentationsKHR; + + // ---- VK_KHR_map_memory2 extension commands + if (!strcmp(name, "MapMemory2KHR")) return (void *)table->MapMemory2KHR; + if (!strcmp(name, "UnmapMemory2KHR")) return (void *)table->UnmapMemory2KHR; + + // ---- VK_KHR_video_encode_queue extension commands + if (!strcmp(name, "GetEncodedVideoSessionParametersKHR")) return (void *)table->GetEncodedVideoSessionParametersKHR; + if (!strcmp(name, "CmdEncodeVideoKHR")) return (void *)table->CmdEncodeVideoKHR; + + // ---- VK_KHR_synchronization2 extension commands + if (!strcmp(name, "CmdSetEvent2KHR")) return (void *)table->CmdSetEvent2KHR; + if (!strcmp(name, "CmdResetEvent2KHR")) return (void *)table->CmdResetEvent2KHR; + if (!strcmp(name, "CmdWaitEvents2KHR")) return (void *)table->CmdWaitEvents2KHR; + if (!strcmp(name, "CmdPipelineBarrier2KHR")) return (void *)table->CmdPipelineBarrier2KHR; + if (!strcmp(name, "CmdWriteTimestamp2KHR")) return (void *)table->CmdWriteTimestamp2KHR; + if (!strcmp(name, "QueueSubmit2KHR")) return (void *)table->QueueSubmit2KHR; + + // ---- VK_KHR_copy_commands2 extension commands + if (!strcmp(name, "CmdCopyBuffer2KHR")) return (void *)table->CmdCopyBuffer2KHR; + if (!strcmp(name, "CmdCopyImage2KHR")) return (void *)table->CmdCopyImage2KHR; + if (!strcmp(name, "CmdCopyBufferToImage2KHR")) return (void *)table->CmdCopyBufferToImage2KHR; + if (!strcmp(name, "CmdCopyImageToBuffer2KHR")) return (void *)table->CmdCopyImageToBuffer2KHR; + if (!strcmp(name, "CmdBlitImage2KHR")) return (void *)table->CmdBlitImage2KHR; + if (!strcmp(name, "CmdResolveImage2KHR")) return (void *)table->CmdResolveImage2KHR; + + // ---- VK_KHR_ray_tracing_maintenance1 extension commands + if (!strcmp(name, "CmdTraceRaysIndirect2KHR")) return (void *)table->CmdTraceRaysIndirect2KHR; + + // ---- VK_KHR_maintenance4 extension commands + if (!strcmp(name, "GetDeviceBufferMemoryRequirementsKHR")) return (void *)table->GetDeviceBufferMemoryRequirementsKHR; + if (!strcmp(name, "GetDeviceImageMemoryRequirementsKHR")) return (void *)table->GetDeviceImageMemoryRequirementsKHR; + if (!strcmp(name, "GetDeviceImageSparseMemoryRequirementsKHR")) return (void *)table->GetDeviceImageSparseMemoryRequirementsKHR; + + // ---- VK_KHR_maintenance5 extension commands + if (!strcmp(name, "CmdBindIndexBuffer2KHR")) return (void *)table->CmdBindIndexBuffer2KHR; + if (!strcmp(name, "GetRenderingAreaGranularityKHR")) return (void *)table->GetRenderingAreaGranularityKHR; + if (!strcmp(name, "GetDeviceImageSubresourceLayoutKHR")) return (void *)table->GetDeviceImageSubresourceLayoutKHR; + if (!strcmp(name, "GetImageSubresourceLayout2KHR")) return (void *)table->GetImageSubresourceLayout2KHR; + + // ---- VK_KHR_present_wait2 extension commands + if (!strcmp(name, "WaitForPresent2KHR")) return (void *)table->WaitForPresent2KHR; + + // ---- VK_KHR_pipeline_binary extension commands + if (!strcmp(name, "CreatePipelineBinariesKHR")) return (void *)table->CreatePipelineBinariesKHR; + if (!strcmp(name, "DestroyPipelineBinaryKHR")) return (void *)table->DestroyPipelineBinaryKHR; + if (!strcmp(name, "GetPipelineKeyKHR")) return (void *)table->GetPipelineKeyKHR; + if (!strcmp(name, "GetPipelineBinaryDataKHR")) return (void *)table->GetPipelineBinaryDataKHR; + if (!strcmp(name, "ReleaseCapturedPipelineDataKHR")) return (void *)table->ReleaseCapturedPipelineDataKHR; + + // ---- VK_KHR_swapchain_maintenance1 extension commands + if (!strcmp(name, "ReleaseSwapchainImagesKHR")) return (void *)table->ReleaseSwapchainImagesKHR; + + // ---- VK_KHR_line_rasterization extension commands + if (!strcmp(name, "CmdSetLineStippleKHR")) return (void *)table->CmdSetLineStippleKHR; + + // ---- VK_KHR_calibrated_timestamps extension commands + if (!strcmp(name, "GetCalibratedTimestampsKHR")) return (void *)table->GetCalibratedTimestampsKHR; + + // ---- VK_KHR_maintenance6 extension commands + if (!strcmp(name, "CmdBindDescriptorSets2KHR")) return (void *)table->CmdBindDescriptorSets2KHR; + if (!strcmp(name, "CmdPushConstants2KHR")) return (void *)table->CmdPushConstants2KHR; + if (!strcmp(name, "CmdPushDescriptorSet2KHR")) return (void *)table->CmdPushDescriptorSet2KHR; + if (!strcmp(name, "CmdPushDescriptorSetWithTemplate2KHR")) return (void *)table->CmdPushDescriptorSetWithTemplate2KHR; + if (!strcmp(name, "CmdSetDescriptorBufferOffsets2EXT")) return (void *)table->CmdSetDescriptorBufferOffsets2EXT; + if (!strcmp(name, "CmdBindDescriptorBufferEmbeddedSamplers2EXT")) return (void *)table->CmdBindDescriptorBufferEmbeddedSamplers2EXT; + + // ---- VK_EXT_debug_marker extension commands + if (!strcmp(name, "DebugMarkerSetObjectTagEXT")) return dev->layer_extensions.ext_debug_marker_enabled ? (void *)DebugMarkerSetObjectTagEXT : NULL; + if (!strcmp(name, "DebugMarkerSetObjectNameEXT")) return dev->layer_extensions.ext_debug_marker_enabled ? (void *)DebugMarkerSetObjectNameEXT : NULL; + if (!strcmp(name, "CmdDebugMarkerBeginEXT")) return (void *)table->CmdDebugMarkerBeginEXT; + if (!strcmp(name, "CmdDebugMarkerEndEXT")) return (void *)table->CmdDebugMarkerEndEXT; + if (!strcmp(name, "CmdDebugMarkerInsertEXT")) return (void *)table->CmdDebugMarkerInsertEXT; + + // ---- VK_EXT_transform_feedback extension commands + if (!strcmp(name, "CmdBindTransformFeedbackBuffersEXT")) return (void *)table->CmdBindTransformFeedbackBuffersEXT; + if (!strcmp(name, "CmdBeginTransformFeedbackEXT")) return (void *)table->CmdBeginTransformFeedbackEXT; + if (!strcmp(name, "CmdEndTransformFeedbackEXT")) return (void *)table->CmdEndTransformFeedbackEXT; + if (!strcmp(name, "CmdBeginQueryIndexedEXT")) return (void *)table->CmdBeginQueryIndexedEXT; + if (!strcmp(name, "CmdEndQueryIndexedEXT")) return (void *)table->CmdEndQueryIndexedEXT; + if (!strcmp(name, "CmdDrawIndirectByteCountEXT")) return (void *)table->CmdDrawIndirectByteCountEXT; + + // ---- VK_NVX_binary_import extension commands + if (!strcmp(name, "CreateCuModuleNVX")) return (void *)table->CreateCuModuleNVX; + if (!strcmp(name, "CreateCuFunctionNVX")) return (void *)table->CreateCuFunctionNVX; + if (!strcmp(name, "DestroyCuModuleNVX")) return (void *)table->DestroyCuModuleNVX; + if (!strcmp(name, "DestroyCuFunctionNVX")) return (void *)table->DestroyCuFunctionNVX; + if (!strcmp(name, "CmdCuLaunchKernelNVX")) return (void *)table->CmdCuLaunchKernelNVX; + + // ---- VK_NVX_image_view_handle extension commands + if (!strcmp(name, "GetImageViewHandleNVX")) return (void *)table->GetImageViewHandleNVX; + if (!strcmp(name, "GetImageViewHandle64NVX")) return (void *)table->GetImageViewHandle64NVX; + if (!strcmp(name, "GetImageViewAddressNVX")) return (void *)table->GetImageViewAddressNVX; + + // ---- VK_AMD_draw_indirect_count extension commands + if (!strcmp(name, "CmdDrawIndirectCountAMD")) return (void *)table->CmdDrawIndirectCountAMD; + if (!strcmp(name, "CmdDrawIndexedIndirectCountAMD")) return (void *)table->CmdDrawIndexedIndirectCountAMD; + + // ---- VK_AMD_shader_info extension commands + if (!strcmp(name, "GetShaderInfoAMD")) return (void *)table->GetShaderInfoAMD; + + // ---- VK_NV_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetMemoryWin32HandleNV")) return (void *)table->GetMemoryWin32HandleNV; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_conditional_rendering extension commands + if (!strcmp(name, "CmdBeginConditionalRenderingEXT")) return (void *)table->CmdBeginConditionalRenderingEXT; + if (!strcmp(name, "CmdEndConditionalRenderingEXT")) return (void *)table->CmdEndConditionalRenderingEXT; + + // ---- VK_NV_clip_space_w_scaling extension commands + if (!strcmp(name, "CmdSetViewportWScalingNV")) return (void *)table->CmdSetViewportWScalingNV; + + // ---- VK_EXT_display_control extension commands + if (!strcmp(name, "DisplayPowerControlEXT")) return (void *)table->DisplayPowerControlEXT; + if (!strcmp(name, "RegisterDeviceEventEXT")) return (void *)table->RegisterDeviceEventEXT; + if (!strcmp(name, "RegisterDisplayEventEXT")) return (void *)table->RegisterDisplayEventEXT; + if (!strcmp(name, "GetSwapchainCounterEXT")) return (void *)table->GetSwapchainCounterEXT; + + // ---- VK_GOOGLE_display_timing extension commands + if (!strcmp(name, "GetRefreshCycleDurationGOOGLE")) return (void *)table->GetRefreshCycleDurationGOOGLE; + if (!strcmp(name, "GetPastPresentationTimingGOOGLE")) return (void *)table->GetPastPresentationTimingGOOGLE; + + // ---- VK_EXT_discard_rectangles extension commands + if (!strcmp(name, "CmdSetDiscardRectangleEXT")) return (void *)table->CmdSetDiscardRectangleEXT; + if (!strcmp(name, "CmdSetDiscardRectangleEnableEXT")) return (void *)table->CmdSetDiscardRectangleEnableEXT; + if (!strcmp(name, "CmdSetDiscardRectangleModeEXT")) return (void *)table->CmdSetDiscardRectangleModeEXT; + + // ---- VK_EXT_hdr_metadata extension commands + if (!strcmp(name, "SetHdrMetadataEXT")) return (void *)table->SetHdrMetadataEXT; + + // ---- VK_EXT_debug_utils extension commands + if (!strcmp(name, "SetDebugUtilsObjectNameEXT")) return dev->layer_extensions.ext_debug_utils_enabled ? (void *)SetDebugUtilsObjectNameEXT : NULL; + if (!strcmp(name, "SetDebugUtilsObjectTagEXT")) return dev->layer_extensions.ext_debug_utils_enabled ? (void *)SetDebugUtilsObjectTagEXT : NULL; + if (!strcmp(name, "QueueBeginDebugUtilsLabelEXT")) return (void *)table->QueueBeginDebugUtilsLabelEXT; + if (!strcmp(name, "QueueEndDebugUtilsLabelEXT")) return (void *)table->QueueEndDebugUtilsLabelEXT; + if (!strcmp(name, "QueueInsertDebugUtilsLabelEXT")) return (void *)table->QueueInsertDebugUtilsLabelEXT; + if (!strcmp(name, "CmdBeginDebugUtilsLabelEXT")) return (void *)table->CmdBeginDebugUtilsLabelEXT; + if (!strcmp(name, "CmdEndDebugUtilsLabelEXT")) return (void *)table->CmdEndDebugUtilsLabelEXT; + if (!strcmp(name, "CmdInsertDebugUtilsLabelEXT")) return (void *)table->CmdInsertDebugUtilsLabelEXT; + + // ---- VK_ANDROID_external_memory_android_hardware_buffer extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (!strcmp(name, "GetAndroidHardwareBufferPropertiesANDROID")) return (void *)table->GetAndroidHardwareBufferPropertiesANDROID; +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (!strcmp(name, "GetMemoryAndroidHardwareBufferANDROID")) return (void *)table->GetMemoryAndroidHardwareBufferANDROID; +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_AMDX_shader_enqueue extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CreateExecutionGraphPipelinesAMDX")) return (void *)table->CreateExecutionGraphPipelinesAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "GetExecutionGraphPipelineScratchSizeAMDX")) return (void *)table->GetExecutionGraphPipelineScratchSizeAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "GetExecutionGraphPipelineNodeIndexAMDX")) return (void *)table->GetExecutionGraphPipelineNodeIndexAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CmdInitializeGraphScratchMemoryAMDX")) return (void *)table->CmdInitializeGraphScratchMemoryAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CmdDispatchGraphAMDX")) return (void *)table->CmdDispatchGraphAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CmdDispatchGraphIndirectAMDX")) return (void *)table->CmdDispatchGraphIndirectAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CmdDispatchGraphIndirectCountAMDX")) return (void *)table->CmdDispatchGraphIndirectCountAMDX; +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_EXT_sample_locations extension commands + if (!strcmp(name, "CmdSetSampleLocationsEXT")) return (void *)table->CmdSetSampleLocationsEXT; + + // ---- VK_EXT_image_drm_format_modifier extension commands + if (!strcmp(name, "GetImageDrmFormatModifierPropertiesEXT")) return (void *)table->GetImageDrmFormatModifierPropertiesEXT; + + // ---- VK_EXT_validation_cache extension commands + if (!strcmp(name, "CreateValidationCacheEXT")) return (void *)table->CreateValidationCacheEXT; + if (!strcmp(name, "DestroyValidationCacheEXT")) return (void *)table->DestroyValidationCacheEXT; + if (!strcmp(name, "MergeValidationCachesEXT")) return (void *)table->MergeValidationCachesEXT; + if (!strcmp(name, "GetValidationCacheDataEXT")) return (void *)table->GetValidationCacheDataEXT; + + // ---- VK_NV_shading_rate_image extension commands + if (!strcmp(name, "CmdBindShadingRateImageNV")) return (void *)table->CmdBindShadingRateImageNV; + if (!strcmp(name, "CmdSetViewportShadingRatePaletteNV")) return (void *)table->CmdSetViewportShadingRatePaletteNV; + if (!strcmp(name, "CmdSetCoarseSampleOrderNV")) return (void *)table->CmdSetCoarseSampleOrderNV; + + // ---- VK_NV_ray_tracing extension commands + if (!strcmp(name, "CreateAccelerationStructureNV")) return (void *)table->CreateAccelerationStructureNV; + if (!strcmp(name, "DestroyAccelerationStructureNV")) return (void *)table->DestroyAccelerationStructureNV; + if (!strcmp(name, "GetAccelerationStructureMemoryRequirementsNV")) return (void *)table->GetAccelerationStructureMemoryRequirementsNV; + if (!strcmp(name, "BindAccelerationStructureMemoryNV")) return (void *)table->BindAccelerationStructureMemoryNV; + if (!strcmp(name, "CmdBuildAccelerationStructureNV")) return (void *)table->CmdBuildAccelerationStructureNV; + if (!strcmp(name, "CmdCopyAccelerationStructureNV")) return (void *)table->CmdCopyAccelerationStructureNV; + if (!strcmp(name, "CmdTraceRaysNV")) return (void *)table->CmdTraceRaysNV; + if (!strcmp(name, "CreateRayTracingPipelinesNV")) return (void *)table->CreateRayTracingPipelinesNV; + + // ---- VK_KHR_ray_tracing_pipeline extension commands + if (!strcmp(name, "GetRayTracingShaderGroupHandlesKHR")) return (void *)table->GetRayTracingShaderGroupHandlesKHR; + + // ---- VK_NV_ray_tracing extension commands + if (!strcmp(name, "GetRayTracingShaderGroupHandlesNV")) return (void *)table->GetRayTracingShaderGroupHandlesNV; + if (!strcmp(name, "GetAccelerationStructureHandleNV")) return (void *)table->GetAccelerationStructureHandleNV; + if (!strcmp(name, "CmdWriteAccelerationStructuresPropertiesNV")) return (void *)table->CmdWriteAccelerationStructuresPropertiesNV; + if (!strcmp(name, "CompileDeferredNV")) return (void *)table->CompileDeferredNV; + + // ---- VK_EXT_external_memory_host extension commands + if (!strcmp(name, "GetMemoryHostPointerPropertiesEXT")) return (void *)table->GetMemoryHostPointerPropertiesEXT; + + // ---- VK_AMD_buffer_marker extension commands + if (!strcmp(name, "CmdWriteBufferMarkerAMD")) return (void *)table->CmdWriteBufferMarkerAMD; + if (!strcmp(name, "CmdWriteBufferMarker2AMD")) return (void *)table->CmdWriteBufferMarker2AMD; + + // ---- VK_EXT_calibrated_timestamps extension commands + if (!strcmp(name, "GetCalibratedTimestampsEXT")) return (void *)table->GetCalibratedTimestampsEXT; + + // ---- VK_NV_mesh_shader extension commands + if (!strcmp(name, "CmdDrawMeshTasksNV")) return (void *)table->CmdDrawMeshTasksNV; + if (!strcmp(name, "CmdDrawMeshTasksIndirectNV")) return (void *)table->CmdDrawMeshTasksIndirectNV; + if (!strcmp(name, "CmdDrawMeshTasksIndirectCountNV")) return (void *)table->CmdDrawMeshTasksIndirectCountNV; + + // ---- VK_NV_scissor_exclusive extension commands + if (!strcmp(name, "CmdSetExclusiveScissorEnableNV")) return (void *)table->CmdSetExclusiveScissorEnableNV; + if (!strcmp(name, "CmdSetExclusiveScissorNV")) return (void *)table->CmdSetExclusiveScissorNV; + + // ---- VK_NV_device_diagnostic_checkpoints extension commands + if (!strcmp(name, "CmdSetCheckpointNV")) return (void *)table->CmdSetCheckpointNV; + if (!strcmp(name, "GetQueueCheckpointDataNV")) return (void *)table->GetQueueCheckpointDataNV; + if (!strcmp(name, "GetQueueCheckpointData2NV")) return (void *)table->GetQueueCheckpointData2NV; + + // ---- VK_INTEL_performance_query extension commands + if (!strcmp(name, "InitializePerformanceApiINTEL")) return (void *)table->InitializePerformanceApiINTEL; + if (!strcmp(name, "UninitializePerformanceApiINTEL")) return (void *)table->UninitializePerformanceApiINTEL; + if (!strcmp(name, "CmdSetPerformanceMarkerINTEL")) return (void *)table->CmdSetPerformanceMarkerINTEL; + if (!strcmp(name, "CmdSetPerformanceStreamMarkerINTEL")) return (void *)table->CmdSetPerformanceStreamMarkerINTEL; + if (!strcmp(name, "CmdSetPerformanceOverrideINTEL")) return (void *)table->CmdSetPerformanceOverrideINTEL; + if (!strcmp(name, "AcquirePerformanceConfigurationINTEL")) return (void *)table->AcquirePerformanceConfigurationINTEL; + if (!strcmp(name, "ReleasePerformanceConfigurationINTEL")) return (void *)table->ReleasePerformanceConfigurationINTEL; + if (!strcmp(name, "QueueSetPerformanceConfigurationINTEL")) return (void *)table->QueueSetPerformanceConfigurationINTEL; + if (!strcmp(name, "GetPerformanceParameterINTEL")) return (void *)table->GetPerformanceParameterINTEL; + + // ---- VK_AMD_display_native_hdr extension commands + if (!strcmp(name, "SetLocalDimmingAMD")) return (void *)table->SetLocalDimmingAMD; + + // ---- VK_EXT_buffer_device_address extension commands + if (!strcmp(name, "GetBufferDeviceAddressEXT")) return (void *)table->GetBufferDeviceAddressEXT; + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "AcquireFullScreenExclusiveModeEXT")) return (void *)table->AcquireFullScreenExclusiveModeEXT; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "ReleaseFullScreenExclusiveModeEXT")) return (void *)table->ReleaseFullScreenExclusiveModeEXT; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetDeviceGroupSurfacePresentModes2EXT")) return (void *)table->GetDeviceGroupSurfacePresentModes2EXT; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_line_rasterization extension commands + if (!strcmp(name, "CmdSetLineStippleEXT")) return (void *)table->CmdSetLineStippleEXT; + + // ---- VK_EXT_host_query_reset extension commands + if (!strcmp(name, "ResetQueryPoolEXT")) return (void *)table->ResetQueryPoolEXT; + + // ---- VK_EXT_extended_dynamic_state extension commands + if (!strcmp(name, "CmdSetCullModeEXT")) return (void *)table->CmdSetCullModeEXT; + if (!strcmp(name, "CmdSetFrontFaceEXT")) return (void *)table->CmdSetFrontFaceEXT; + if (!strcmp(name, "CmdSetPrimitiveTopologyEXT")) return (void *)table->CmdSetPrimitiveTopologyEXT; + if (!strcmp(name, "CmdSetViewportWithCountEXT")) return (void *)table->CmdSetViewportWithCountEXT; + if (!strcmp(name, "CmdSetScissorWithCountEXT")) return (void *)table->CmdSetScissorWithCountEXT; + if (!strcmp(name, "CmdBindVertexBuffers2EXT")) return (void *)table->CmdBindVertexBuffers2EXT; + if (!strcmp(name, "CmdSetDepthTestEnableEXT")) return (void *)table->CmdSetDepthTestEnableEXT; + if (!strcmp(name, "CmdSetDepthWriteEnableEXT")) return (void *)table->CmdSetDepthWriteEnableEXT; + if (!strcmp(name, "CmdSetDepthCompareOpEXT")) return (void *)table->CmdSetDepthCompareOpEXT; + if (!strcmp(name, "CmdSetDepthBoundsTestEnableEXT")) return (void *)table->CmdSetDepthBoundsTestEnableEXT; + if (!strcmp(name, "CmdSetStencilTestEnableEXT")) return (void *)table->CmdSetStencilTestEnableEXT; + if (!strcmp(name, "CmdSetStencilOpEXT")) return (void *)table->CmdSetStencilOpEXT; + + // ---- VK_EXT_host_image_copy extension commands + if (!strcmp(name, "CopyMemoryToImageEXT")) return (void *)table->CopyMemoryToImageEXT; + if (!strcmp(name, "CopyImageToMemoryEXT")) return (void *)table->CopyImageToMemoryEXT; + if (!strcmp(name, "CopyImageToImageEXT")) return (void *)table->CopyImageToImageEXT; + if (!strcmp(name, "TransitionImageLayoutEXT")) return (void *)table->TransitionImageLayoutEXT; + if (!strcmp(name, "GetImageSubresourceLayout2EXT")) return (void *)table->GetImageSubresourceLayout2EXT; + + // ---- VK_EXT_swapchain_maintenance1 extension commands + if (!strcmp(name, "ReleaseSwapchainImagesEXT")) return (void *)table->ReleaseSwapchainImagesEXT; + + // ---- VK_NV_device_generated_commands extension commands + if (!strcmp(name, "GetGeneratedCommandsMemoryRequirementsNV")) return (void *)table->GetGeneratedCommandsMemoryRequirementsNV; + if (!strcmp(name, "CmdPreprocessGeneratedCommandsNV")) return (void *)table->CmdPreprocessGeneratedCommandsNV; + if (!strcmp(name, "CmdExecuteGeneratedCommandsNV")) return (void *)table->CmdExecuteGeneratedCommandsNV; + if (!strcmp(name, "CmdBindPipelineShaderGroupNV")) return (void *)table->CmdBindPipelineShaderGroupNV; + if (!strcmp(name, "CreateIndirectCommandsLayoutNV")) return (void *)table->CreateIndirectCommandsLayoutNV; + if (!strcmp(name, "DestroyIndirectCommandsLayoutNV")) return (void *)table->DestroyIndirectCommandsLayoutNV; + + // ---- VK_EXT_depth_bias_control extension commands + if (!strcmp(name, "CmdSetDepthBias2EXT")) return (void *)table->CmdSetDepthBias2EXT; + + // ---- VK_EXT_private_data extension commands + if (!strcmp(name, "CreatePrivateDataSlotEXT")) return (void *)table->CreatePrivateDataSlotEXT; + if (!strcmp(name, "DestroyPrivateDataSlotEXT")) return (void *)table->DestroyPrivateDataSlotEXT; + if (!strcmp(name, "SetPrivateDataEXT")) return (void *)table->SetPrivateDataEXT; + if (!strcmp(name, "GetPrivateDataEXT")) return (void *)table->GetPrivateDataEXT; + + // ---- VK_NV_cuda_kernel_launch extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CreateCudaModuleNV")) return (void *)table->CreateCudaModuleNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "GetCudaModuleCacheNV")) return (void *)table->GetCudaModuleCacheNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CreateCudaFunctionNV")) return (void *)table->CreateCudaFunctionNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "DestroyCudaModuleNV")) return (void *)table->DestroyCudaModuleNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "DestroyCudaFunctionNV")) return (void *)table->DestroyCudaFunctionNV; +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp(name, "CmdCudaLaunchKernelNV")) return (void *)table->CmdCudaLaunchKernelNV; +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_QCOM_tile_shading extension commands + if (!strcmp(name, "CmdDispatchTileQCOM")) return (void *)table->CmdDispatchTileQCOM; + if (!strcmp(name, "CmdBeginPerTileExecutionQCOM")) return (void *)table->CmdBeginPerTileExecutionQCOM; + if (!strcmp(name, "CmdEndPerTileExecutionQCOM")) return (void *)table->CmdEndPerTileExecutionQCOM; + + // ---- VK_EXT_metal_objects extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(name, "ExportMetalObjectsEXT")) return (void *)table->ExportMetalObjectsEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_descriptor_buffer extension commands + if (!strcmp(name, "GetDescriptorSetLayoutSizeEXT")) return (void *)table->GetDescriptorSetLayoutSizeEXT; + if (!strcmp(name, "GetDescriptorSetLayoutBindingOffsetEXT")) return (void *)table->GetDescriptorSetLayoutBindingOffsetEXT; + if (!strcmp(name, "GetDescriptorEXT")) return (void *)table->GetDescriptorEXT; + if (!strcmp(name, "CmdBindDescriptorBuffersEXT")) return (void *)table->CmdBindDescriptorBuffersEXT; + if (!strcmp(name, "CmdSetDescriptorBufferOffsetsEXT")) return (void *)table->CmdSetDescriptorBufferOffsetsEXT; + if (!strcmp(name, "CmdBindDescriptorBufferEmbeddedSamplersEXT")) return (void *)table->CmdBindDescriptorBufferEmbeddedSamplersEXT; + if (!strcmp(name, "GetBufferOpaqueCaptureDescriptorDataEXT")) return (void *)table->GetBufferOpaqueCaptureDescriptorDataEXT; + if (!strcmp(name, "GetImageOpaqueCaptureDescriptorDataEXT")) return (void *)table->GetImageOpaqueCaptureDescriptorDataEXT; + if (!strcmp(name, "GetImageViewOpaqueCaptureDescriptorDataEXT")) return (void *)table->GetImageViewOpaqueCaptureDescriptorDataEXT; + if (!strcmp(name, "GetSamplerOpaqueCaptureDescriptorDataEXT")) return (void *)table->GetSamplerOpaqueCaptureDescriptorDataEXT; + if (!strcmp(name, "GetAccelerationStructureOpaqueCaptureDescriptorDataEXT")) return (void *)table->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT; + + // ---- VK_NV_fragment_shading_rate_enums extension commands + if (!strcmp(name, "CmdSetFragmentShadingRateEnumNV")) return (void *)table->CmdSetFragmentShadingRateEnumNV; + + // ---- VK_EXT_device_fault extension commands + if (!strcmp(name, "GetDeviceFaultInfoEXT")) return (void *)table->GetDeviceFaultInfoEXT; + + // ---- VK_EXT_vertex_input_dynamic_state extension commands + if (!strcmp(name, "CmdSetVertexInputEXT")) return (void *)table->CmdSetVertexInputEXT; + + // ---- VK_FUCHSIA_external_memory extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "GetMemoryZirconHandleFUCHSIA")) return (void *)table->GetMemoryZirconHandleFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "GetMemoryZirconHandlePropertiesFUCHSIA")) return (void *)table->GetMemoryZirconHandlePropertiesFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_external_semaphore extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "ImportSemaphoreZirconHandleFUCHSIA")) return (void *)table->ImportSemaphoreZirconHandleFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "GetSemaphoreZirconHandleFUCHSIA")) return (void *)table->GetSemaphoreZirconHandleFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_buffer_collection extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "CreateBufferCollectionFUCHSIA")) return (void *)table->CreateBufferCollectionFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "SetBufferCollectionImageConstraintsFUCHSIA")) return (void *)table->SetBufferCollectionImageConstraintsFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "SetBufferCollectionBufferConstraintsFUCHSIA")) return (void *)table->SetBufferCollectionBufferConstraintsFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "DestroyBufferCollectionFUCHSIA")) return (void *)table->DestroyBufferCollectionFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "GetBufferCollectionPropertiesFUCHSIA")) return (void *)table->GetBufferCollectionPropertiesFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_HUAWEI_subpass_shading extension commands + if (!strcmp(name, "GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI")) return (void *)table->GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; + if (!strcmp(name, "CmdSubpassShadingHUAWEI")) return (void *)table->CmdSubpassShadingHUAWEI; + + // ---- VK_HUAWEI_invocation_mask extension commands + if (!strcmp(name, "CmdBindInvocationMaskHUAWEI")) return (void *)table->CmdBindInvocationMaskHUAWEI; + + // ---- VK_NV_external_memory_rdma extension commands + if (!strcmp(name, "GetMemoryRemoteAddressNV")) return (void *)table->GetMemoryRemoteAddressNV; + + // ---- VK_EXT_pipeline_properties extension commands + if (!strcmp(name, "GetPipelinePropertiesEXT")) return (void *)table->GetPipelinePropertiesEXT; + + // ---- VK_EXT_extended_dynamic_state2 extension commands + if (!strcmp(name, "CmdSetPatchControlPointsEXT")) return (void *)table->CmdSetPatchControlPointsEXT; + if (!strcmp(name, "CmdSetRasterizerDiscardEnableEXT")) return (void *)table->CmdSetRasterizerDiscardEnableEXT; + if (!strcmp(name, "CmdSetDepthBiasEnableEXT")) return (void *)table->CmdSetDepthBiasEnableEXT; + if (!strcmp(name, "CmdSetLogicOpEXT")) return (void *)table->CmdSetLogicOpEXT; + if (!strcmp(name, "CmdSetPrimitiveRestartEnableEXT")) return (void *)table->CmdSetPrimitiveRestartEnableEXT; + + // ---- VK_EXT_color_write_enable extension commands + if (!strcmp(name, "CmdSetColorWriteEnableEXT")) return (void *)table->CmdSetColorWriteEnableEXT; + + // ---- VK_EXT_multi_draw extension commands + if (!strcmp(name, "CmdDrawMultiEXT")) return (void *)table->CmdDrawMultiEXT; + if (!strcmp(name, "CmdDrawMultiIndexedEXT")) return (void *)table->CmdDrawMultiIndexedEXT; + + // ---- VK_EXT_opacity_micromap extension commands + if (!strcmp(name, "CreateMicromapEXT")) return (void *)table->CreateMicromapEXT; + if (!strcmp(name, "DestroyMicromapEXT")) return (void *)table->DestroyMicromapEXT; + if (!strcmp(name, "CmdBuildMicromapsEXT")) return (void *)table->CmdBuildMicromapsEXT; + if (!strcmp(name, "BuildMicromapsEXT")) return (void *)table->BuildMicromapsEXT; + if (!strcmp(name, "CopyMicromapEXT")) return (void *)table->CopyMicromapEXT; + if (!strcmp(name, "CopyMicromapToMemoryEXT")) return (void *)table->CopyMicromapToMemoryEXT; + if (!strcmp(name, "CopyMemoryToMicromapEXT")) return (void *)table->CopyMemoryToMicromapEXT; + if (!strcmp(name, "WriteMicromapsPropertiesEXT")) return (void *)table->WriteMicromapsPropertiesEXT; + if (!strcmp(name, "CmdCopyMicromapEXT")) return (void *)table->CmdCopyMicromapEXT; + if (!strcmp(name, "CmdCopyMicromapToMemoryEXT")) return (void *)table->CmdCopyMicromapToMemoryEXT; + if (!strcmp(name, "CmdCopyMemoryToMicromapEXT")) return (void *)table->CmdCopyMemoryToMicromapEXT; + if (!strcmp(name, "CmdWriteMicromapsPropertiesEXT")) return (void *)table->CmdWriteMicromapsPropertiesEXT; + if (!strcmp(name, "GetDeviceMicromapCompatibilityEXT")) return (void *)table->GetDeviceMicromapCompatibilityEXT; + if (!strcmp(name, "GetMicromapBuildSizesEXT")) return (void *)table->GetMicromapBuildSizesEXT; + + // ---- VK_HUAWEI_cluster_culling_shader extension commands + if (!strcmp(name, "CmdDrawClusterHUAWEI")) return (void *)table->CmdDrawClusterHUAWEI; + if (!strcmp(name, "CmdDrawClusterIndirectHUAWEI")) return (void *)table->CmdDrawClusterIndirectHUAWEI; + + // ---- VK_EXT_pageable_device_local_memory extension commands + if (!strcmp(name, "SetDeviceMemoryPriorityEXT")) return (void *)table->SetDeviceMemoryPriorityEXT; + + // ---- VK_VALVE_descriptor_set_host_mapping extension commands + if (!strcmp(name, "GetDescriptorSetLayoutHostMappingInfoVALVE")) return (void *)table->GetDescriptorSetLayoutHostMappingInfoVALVE; + if (!strcmp(name, "GetDescriptorSetHostMappingVALVE")) return (void *)table->GetDescriptorSetHostMappingVALVE; + + // ---- VK_NV_copy_memory_indirect extension commands + if (!strcmp(name, "CmdCopyMemoryIndirectNV")) return (void *)table->CmdCopyMemoryIndirectNV; + if (!strcmp(name, "CmdCopyMemoryToImageIndirectNV")) return (void *)table->CmdCopyMemoryToImageIndirectNV; + + // ---- VK_NV_memory_decompression extension commands + if (!strcmp(name, "CmdDecompressMemoryNV")) return (void *)table->CmdDecompressMemoryNV; + if (!strcmp(name, "CmdDecompressMemoryIndirectCountNV")) return (void *)table->CmdDecompressMemoryIndirectCountNV; + + // ---- VK_NV_device_generated_commands_compute extension commands + if (!strcmp(name, "GetPipelineIndirectMemoryRequirementsNV")) return (void *)table->GetPipelineIndirectMemoryRequirementsNV; + if (!strcmp(name, "CmdUpdatePipelineIndirectBufferNV")) return (void *)table->CmdUpdatePipelineIndirectBufferNV; + if (!strcmp(name, "GetPipelineIndirectDeviceAddressNV")) return (void *)table->GetPipelineIndirectDeviceAddressNV; + + // ---- VK_EXT_extended_dynamic_state3 extension commands + if (!strcmp(name, "CmdSetDepthClampEnableEXT")) return (void *)table->CmdSetDepthClampEnableEXT; + if (!strcmp(name, "CmdSetPolygonModeEXT")) return (void *)table->CmdSetPolygonModeEXT; + if (!strcmp(name, "CmdSetRasterizationSamplesEXT")) return (void *)table->CmdSetRasterizationSamplesEXT; + if (!strcmp(name, "CmdSetSampleMaskEXT")) return (void *)table->CmdSetSampleMaskEXT; + if (!strcmp(name, "CmdSetAlphaToCoverageEnableEXT")) return (void *)table->CmdSetAlphaToCoverageEnableEXT; + if (!strcmp(name, "CmdSetAlphaToOneEnableEXT")) return (void *)table->CmdSetAlphaToOneEnableEXT; + if (!strcmp(name, "CmdSetLogicOpEnableEXT")) return (void *)table->CmdSetLogicOpEnableEXT; + if (!strcmp(name, "CmdSetColorBlendEnableEXT")) return (void *)table->CmdSetColorBlendEnableEXT; + if (!strcmp(name, "CmdSetColorBlendEquationEXT")) return (void *)table->CmdSetColorBlendEquationEXT; + if (!strcmp(name, "CmdSetColorWriteMaskEXT")) return (void *)table->CmdSetColorWriteMaskEXT; + if (!strcmp(name, "CmdSetTessellationDomainOriginEXT")) return (void *)table->CmdSetTessellationDomainOriginEXT; + if (!strcmp(name, "CmdSetRasterizationStreamEXT")) return (void *)table->CmdSetRasterizationStreamEXT; + if (!strcmp(name, "CmdSetConservativeRasterizationModeEXT")) return (void *)table->CmdSetConservativeRasterizationModeEXT; + if (!strcmp(name, "CmdSetExtraPrimitiveOverestimationSizeEXT")) return (void *)table->CmdSetExtraPrimitiveOverestimationSizeEXT; + if (!strcmp(name, "CmdSetDepthClipEnableEXT")) return (void *)table->CmdSetDepthClipEnableEXT; + if (!strcmp(name, "CmdSetSampleLocationsEnableEXT")) return (void *)table->CmdSetSampleLocationsEnableEXT; + if (!strcmp(name, "CmdSetColorBlendAdvancedEXT")) return (void *)table->CmdSetColorBlendAdvancedEXT; + if (!strcmp(name, "CmdSetProvokingVertexModeEXT")) return (void *)table->CmdSetProvokingVertexModeEXT; + if (!strcmp(name, "CmdSetLineRasterizationModeEXT")) return (void *)table->CmdSetLineRasterizationModeEXT; + if (!strcmp(name, "CmdSetLineStippleEnableEXT")) return (void *)table->CmdSetLineStippleEnableEXT; + if (!strcmp(name, "CmdSetDepthClipNegativeOneToOneEXT")) return (void *)table->CmdSetDepthClipNegativeOneToOneEXT; + if (!strcmp(name, "CmdSetViewportWScalingEnableNV")) return (void *)table->CmdSetViewportWScalingEnableNV; + if (!strcmp(name, "CmdSetViewportSwizzleNV")) return (void *)table->CmdSetViewportSwizzleNV; + if (!strcmp(name, "CmdSetCoverageToColorEnableNV")) return (void *)table->CmdSetCoverageToColorEnableNV; + if (!strcmp(name, "CmdSetCoverageToColorLocationNV")) return (void *)table->CmdSetCoverageToColorLocationNV; + if (!strcmp(name, "CmdSetCoverageModulationModeNV")) return (void *)table->CmdSetCoverageModulationModeNV; + if (!strcmp(name, "CmdSetCoverageModulationTableEnableNV")) return (void *)table->CmdSetCoverageModulationTableEnableNV; + if (!strcmp(name, "CmdSetCoverageModulationTableNV")) return (void *)table->CmdSetCoverageModulationTableNV; + if (!strcmp(name, "CmdSetShadingRateImageEnableNV")) return (void *)table->CmdSetShadingRateImageEnableNV; + if (!strcmp(name, "CmdSetRepresentativeFragmentTestEnableNV")) return (void *)table->CmdSetRepresentativeFragmentTestEnableNV; + if (!strcmp(name, "CmdSetCoverageReductionModeNV")) return (void *)table->CmdSetCoverageReductionModeNV; + + // ---- VK_ARM_tensors extension commands + if (!strcmp(name, "CreateTensorARM")) return (void *)table->CreateTensorARM; + if (!strcmp(name, "DestroyTensorARM")) return (void *)table->DestroyTensorARM; + if (!strcmp(name, "CreateTensorViewARM")) return (void *)table->CreateTensorViewARM; + if (!strcmp(name, "DestroyTensorViewARM")) return (void *)table->DestroyTensorViewARM; + if (!strcmp(name, "GetTensorMemoryRequirementsARM")) return (void *)table->GetTensorMemoryRequirementsARM; + if (!strcmp(name, "BindTensorMemoryARM")) return (void *)table->BindTensorMemoryARM; + if (!strcmp(name, "GetDeviceTensorMemoryRequirementsARM")) return (void *)table->GetDeviceTensorMemoryRequirementsARM; + if (!strcmp(name, "CmdCopyTensorARM")) return (void *)table->CmdCopyTensorARM; + if (!strcmp(name, "GetTensorOpaqueCaptureDescriptorDataARM")) return (void *)table->GetTensorOpaqueCaptureDescriptorDataARM; + if (!strcmp(name, "GetTensorViewOpaqueCaptureDescriptorDataARM")) return (void *)table->GetTensorViewOpaqueCaptureDescriptorDataARM; + + // ---- VK_EXT_shader_module_identifier extension commands + if (!strcmp(name, "GetShaderModuleIdentifierEXT")) return (void *)table->GetShaderModuleIdentifierEXT; + if (!strcmp(name, "GetShaderModuleCreateInfoIdentifierEXT")) return (void *)table->GetShaderModuleCreateInfoIdentifierEXT; + + // ---- VK_NV_optical_flow extension commands + if (!strcmp(name, "CreateOpticalFlowSessionNV")) return (void *)table->CreateOpticalFlowSessionNV; + if (!strcmp(name, "DestroyOpticalFlowSessionNV")) return (void *)table->DestroyOpticalFlowSessionNV; + if (!strcmp(name, "BindOpticalFlowSessionImageNV")) return (void *)table->BindOpticalFlowSessionImageNV; + if (!strcmp(name, "CmdOpticalFlowExecuteNV")) return (void *)table->CmdOpticalFlowExecuteNV; + + // ---- VK_AMD_anti_lag extension commands + if (!strcmp(name, "AntiLagUpdateAMD")) return (void *)table->AntiLagUpdateAMD; + + // ---- VK_EXT_shader_object extension commands + if (!strcmp(name, "CreateShadersEXT")) return (void *)table->CreateShadersEXT; + if (!strcmp(name, "DestroyShaderEXT")) return (void *)table->DestroyShaderEXT; + if (!strcmp(name, "GetShaderBinaryDataEXT")) return (void *)table->GetShaderBinaryDataEXT; + if (!strcmp(name, "CmdBindShadersEXT")) return (void *)table->CmdBindShadersEXT; + if (!strcmp(name, "CmdSetDepthClampRangeEXT")) return (void *)table->CmdSetDepthClampRangeEXT; + + // ---- VK_QCOM_tile_properties extension commands + if (!strcmp(name, "GetFramebufferTilePropertiesQCOM")) return (void *)table->GetFramebufferTilePropertiesQCOM; + if (!strcmp(name, "GetDynamicRenderingTilePropertiesQCOM")) return (void *)table->GetDynamicRenderingTilePropertiesQCOM; + + // ---- VK_NV_cooperative_vector extension commands + if (!strcmp(name, "ConvertCooperativeVectorMatrixNV")) return (void *)table->ConvertCooperativeVectorMatrixNV; + if (!strcmp(name, "CmdConvertCooperativeVectorMatrixNV")) return (void *)table->CmdConvertCooperativeVectorMatrixNV; + + // ---- VK_NV_low_latency2 extension commands + if (!strcmp(name, "SetLatencySleepModeNV")) return (void *)table->SetLatencySleepModeNV; + if (!strcmp(name, "LatencySleepNV")) return (void *)table->LatencySleepNV; + if (!strcmp(name, "SetLatencyMarkerNV")) return (void *)table->SetLatencyMarkerNV; + if (!strcmp(name, "GetLatencyTimingsNV")) return (void *)table->GetLatencyTimingsNV; + if (!strcmp(name, "QueueNotifyOutOfBandNV")) return (void *)table->QueueNotifyOutOfBandNV; + + // ---- VK_ARM_data_graph extension commands + if (!strcmp(name, "CreateDataGraphPipelinesARM")) return (void *)table->CreateDataGraphPipelinesARM; + if (!strcmp(name, "CreateDataGraphPipelineSessionARM")) return (void *)table->CreateDataGraphPipelineSessionARM; + if (!strcmp(name, "GetDataGraphPipelineSessionBindPointRequirementsARM")) return (void *)table->GetDataGraphPipelineSessionBindPointRequirementsARM; + if (!strcmp(name, "GetDataGraphPipelineSessionMemoryRequirementsARM")) return (void *)table->GetDataGraphPipelineSessionMemoryRequirementsARM; + if (!strcmp(name, "BindDataGraphPipelineSessionMemoryARM")) return (void *)table->BindDataGraphPipelineSessionMemoryARM; + if (!strcmp(name, "DestroyDataGraphPipelineSessionARM")) return (void *)table->DestroyDataGraphPipelineSessionARM; + if (!strcmp(name, "CmdDispatchDataGraphARM")) return (void *)table->CmdDispatchDataGraphARM; + if (!strcmp(name, "GetDataGraphPipelineAvailablePropertiesARM")) return (void *)table->GetDataGraphPipelineAvailablePropertiesARM; + if (!strcmp(name, "GetDataGraphPipelinePropertiesARM")) return (void *)table->GetDataGraphPipelinePropertiesARM; + + // ---- VK_EXT_attachment_feedback_loop_dynamic_state extension commands + if (!strcmp(name, "CmdSetAttachmentFeedbackLoopEnableEXT")) return (void *)table->CmdSetAttachmentFeedbackLoopEnableEXT; + + // ---- VK_QNX_external_memory_screen_buffer extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + if (!strcmp(name, "GetScreenBufferPropertiesQNX")) return (void *)table->GetScreenBufferPropertiesQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_QCOM_tile_memory_heap extension commands + if (!strcmp(name, "CmdBindTileMemoryQCOM")) return (void *)table->CmdBindTileMemoryQCOM; + + // ---- VK_NV_external_compute_queue extension commands + if (!strcmp(name, "CreateExternalComputeQueueNV")) return (void *)table->CreateExternalComputeQueueNV; + if (!strcmp(name, "DestroyExternalComputeQueueNV")) return (void *)table->DestroyExternalComputeQueueNV; + if (!strcmp(name, "GetExternalComputeQueueDataNV")) return (void *)table->GetExternalComputeQueueDataNV; + + // ---- VK_NV_cluster_acceleration_structure extension commands + if (!strcmp(name, "GetClusterAccelerationStructureBuildSizesNV")) return (void *)table->GetClusterAccelerationStructureBuildSizesNV; + if (!strcmp(name, "CmdBuildClusterAccelerationStructureIndirectNV")) return (void *)table->CmdBuildClusterAccelerationStructureIndirectNV; + + // ---- VK_NV_partitioned_acceleration_structure extension commands + if (!strcmp(name, "GetPartitionedAccelerationStructuresBuildSizesNV")) return (void *)table->GetPartitionedAccelerationStructuresBuildSizesNV; + if (!strcmp(name, "CmdBuildPartitionedAccelerationStructuresNV")) return (void *)table->CmdBuildPartitionedAccelerationStructuresNV; + + // ---- VK_EXT_device_generated_commands extension commands + if (!strcmp(name, "GetGeneratedCommandsMemoryRequirementsEXT")) return (void *)table->GetGeneratedCommandsMemoryRequirementsEXT; + if (!strcmp(name, "CmdPreprocessGeneratedCommandsEXT")) return (void *)table->CmdPreprocessGeneratedCommandsEXT; + if (!strcmp(name, "CmdExecuteGeneratedCommandsEXT")) return (void *)table->CmdExecuteGeneratedCommandsEXT; + if (!strcmp(name, "CreateIndirectCommandsLayoutEXT")) return (void *)table->CreateIndirectCommandsLayoutEXT; + if (!strcmp(name, "DestroyIndirectCommandsLayoutEXT")) return (void *)table->DestroyIndirectCommandsLayoutEXT; + if (!strcmp(name, "CreateIndirectExecutionSetEXT")) return (void *)table->CreateIndirectExecutionSetEXT; + if (!strcmp(name, "DestroyIndirectExecutionSetEXT")) return (void *)table->DestroyIndirectExecutionSetEXT; + if (!strcmp(name, "UpdateIndirectExecutionSetPipelineEXT")) return (void *)table->UpdateIndirectExecutionSetPipelineEXT; + if (!strcmp(name, "UpdateIndirectExecutionSetShaderEXT")) return (void *)table->UpdateIndirectExecutionSetShaderEXT; + + // ---- VK_EXT_external_memory_metal extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(name, "GetMemoryMetalHandleEXT")) return (void *)table->GetMemoryMetalHandleEXT; +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(name, "GetMemoryMetalHandlePropertiesEXT")) return (void *)table->GetMemoryMetalHandlePropertiesEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_fragment_density_map_offset extension commands + if (!strcmp(name, "CmdEndRendering2EXT")) return (void *)table->CmdEndRendering2EXT; + + // ---- VK_KHR_acceleration_structure extension commands + if (!strcmp(name, "CreateAccelerationStructureKHR")) return (void *)table->CreateAccelerationStructureKHR; + if (!strcmp(name, "DestroyAccelerationStructureKHR")) return (void *)table->DestroyAccelerationStructureKHR; + if (!strcmp(name, "CmdBuildAccelerationStructuresKHR")) return (void *)table->CmdBuildAccelerationStructuresKHR; + if (!strcmp(name, "CmdBuildAccelerationStructuresIndirectKHR")) return (void *)table->CmdBuildAccelerationStructuresIndirectKHR; + if (!strcmp(name, "BuildAccelerationStructuresKHR")) return (void *)table->BuildAccelerationStructuresKHR; + if (!strcmp(name, "CopyAccelerationStructureKHR")) return (void *)table->CopyAccelerationStructureKHR; + if (!strcmp(name, "CopyAccelerationStructureToMemoryKHR")) return (void *)table->CopyAccelerationStructureToMemoryKHR; + if (!strcmp(name, "CopyMemoryToAccelerationStructureKHR")) return (void *)table->CopyMemoryToAccelerationStructureKHR; + if (!strcmp(name, "WriteAccelerationStructuresPropertiesKHR")) return (void *)table->WriteAccelerationStructuresPropertiesKHR; + if (!strcmp(name, "CmdCopyAccelerationStructureKHR")) return (void *)table->CmdCopyAccelerationStructureKHR; + if (!strcmp(name, "CmdCopyAccelerationStructureToMemoryKHR")) return (void *)table->CmdCopyAccelerationStructureToMemoryKHR; + if (!strcmp(name, "CmdCopyMemoryToAccelerationStructureKHR")) return (void *)table->CmdCopyMemoryToAccelerationStructureKHR; + if (!strcmp(name, "GetAccelerationStructureDeviceAddressKHR")) return (void *)table->GetAccelerationStructureDeviceAddressKHR; + if (!strcmp(name, "CmdWriteAccelerationStructuresPropertiesKHR")) return (void *)table->CmdWriteAccelerationStructuresPropertiesKHR; + if (!strcmp(name, "GetDeviceAccelerationStructureCompatibilityKHR")) return (void *)table->GetDeviceAccelerationStructureCompatibilityKHR; + if (!strcmp(name, "GetAccelerationStructureBuildSizesKHR")) return (void *)table->GetAccelerationStructureBuildSizesKHR; + + // ---- VK_KHR_ray_tracing_pipeline extension commands + if (!strcmp(name, "CmdTraceRaysKHR")) return (void *)table->CmdTraceRaysKHR; + if (!strcmp(name, "CreateRayTracingPipelinesKHR")) return (void *)table->CreateRayTracingPipelinesKHR; + if (!strcmp(name, "GetRayTracingCaptureReplayShaderGroupHandlesKHR")) return (void *)table->GetRayTracingCaptureReplayShaderGroupHandlesKHR; + if (!strcmp(name, "CmdTraceRaysIndirectKHR")) return (void *)table->CmdTraceRaysIndirectKHR; + if (!strcmp(name, "GetRayTracingShaderGroupStackSizeKHR")) return (void *)table->GetRayTracingShaderGroupStackSizeKHR; + if (!strcmp(name, "CmdSetRayTracingPipelineStackSizeKHR")) return (void *)table->CmdSetRayTracingPipelineStackSizeKHR; + + // ---- VK_EXT_mesh_shader extension commands + if (!strcmp(name, "CmdDrawMeshTasksEXT")) return (void *)table->CmdDrawMeshTasksEXT; + if (!strcmp(name, "CmdDrawMeshTasksIndirectEXT")) return (void *)table->CmdDrawMeshTasksIndirectEXT; + if (!strcmp(name, "CmdDrawMeshTasksIndirectCountEXT")) return (void *)table->CmdDrawMeshTasksIndirectCountEXT; + + *found_name = false; + return NULL; +} + +// Instance command lookup function +VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name, + bool *found_name) { + if (!name || name[0] != 'v' || name[1] != 'k') { + *found_name = false; + return NULL; + } + + *found_name = true; + name += 2; + + // ---- Core Vulkan 1.0 commands + if (!strcmp(name, "DestroyInstance")) return (void *)table->DestroyInstance; + if (!strcmp(name, "EnumeratePhysicalDevices")) return (void *)table->EnumeratePhysicalDevices; + if (!strcmp(name, "GetPhysicalDeviceFeatures")) return (void *)table->GetPhysicalDeviceFeatures; + if (!strcmp(name, "GetPhysicalDeviceFormatProperties")) return (void *)table->GetPhysicalDeviceFormatProperties; + if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties")) return (void *)table->GetPhysicalDeviceImageFormatProperties; + if (!strcmp(name, "GetPhysicalDeviceProperties")) return (void *)table->GetPhysicalDeviceProperties; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) return (void *)table->GetPhysicalDeviceQueueFamilyProperties; + if (!strcmp(name, "GetPhysicalDeviceMemoryProperties")) return (void *)table->GetPhysicalDeviceMemoryProperties; + if (!strcmp(name, "GetInstanceProcAddr")) return (void *)table->GetInstanceProcAddr; + if (!strcmp(name, "EnumerateDeviceExtensionProperties")) return (void *)table->EnumerateDeviceExtensionProperties; + if (!strcmp(name, "EnumerateDeviceLayerProperties")) return (void *)table->EnumerateDeviceLayerProperties; + if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties")) return (void *)table->GetPhysicalDeviceSparseImageFormatProperties; + + // ---- Core Vulkan 1.1 commands + if (!strcmp(name, "EnumeratePhysicalDeviceGroups")) return (void *)table->EnumeratePhysicalDeviceGroups; + if (!strcmp(name, "GetPhysicalDeviceFeatures2")) return (void *)table->GetPhysicalDeviceFeatures2; + if (!strcmp(name, "GetPhysicalDeviceProperties2")) return (void *)table->GetPhysicalDeviceProperties2; + if (!strcmp(name, "GetPhysicalDeviceFormatProperties2")) return (void *)table->GetPhysicalDeviceFormatProperties2; + if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties2")) return (void *)table->GetPhysicalDeviceImageFormatProperties2; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties2")) return (void *)table->GetPhysicalDeviceQueueFamilyProperties2; + if (!strcmp(name, "GetPhysicalDeviceMemoryProperties2")) return (void *)table->GetPhysicalDeviceMemoryProperties2; + if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties2")) return (void *)table->GetPhysicalDeviceSparseImageFormatProperties2; + if (!strcmp(name, "GetPhysicalDeviceExternalBufferProperties")) return (void *)table->GetPhysicalDeviceExternalBufferProperties; + if (!strcmp(name, "GetPhysicalDeviceExternalFenceProperties")) return (void *)table->GetPhysicalDeviceExternalFenceProperties; + if (!strcmp(name, "GetPhysicalDeviceExternalSemaphoreProperties")) return (void *)table->GetPhysicalDeviceExternalSemaphoreProperties; + + // ---- Core Vulkan 1.3 commands + if (!strcmp(name, "GetPhysicalDeviceToolProperties")) return (void *)table->GetPhysicalDeviceToolProperties; + + // ---- VK_KHR_surface extension commands + if (!strcmp(name, "DestroySurfaceKHR")) return (void *)table->DestroySurfaceKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfaceSupportKHR")) return (void *)table->GetPhysicalDeviceSurfaceSupportKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilitiesKHR")) return (void *)table->GetPhysicalDeviceSurfaceCapabilitiesKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfaceFormatsKHR")) return (void *)table->GetPhysicalDeviceSurfaceFormatsKHR; + if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR")) return (void *)table->GetPhysicalDeviceSurfacePresentModesKHR; + + // ---- VK_KHR_swapchain extension commands + if (!strcmp(name, "GetPhysicalDevicePresentRectanglesKHR")) return (void *)table->GetPhysicalDevicePresentRectanglesKHR; + + // ---- VK_KHR_display extension commands + if (!strcmp(name, "GetPhysicalDeviceDisplayPropertiesKHR")) return (void *)table->GetPhysicalDeviceDisplayPropertiesKHR; + if (!strcmp(name, "GetPhysicalDeviceDisplayPlanePropertiesKHR")) return (void *)table->GetPhysicalDeviceDisplayPlanePropertiesKHR; + if (!strcmp(name, "GetDisplayPlaneSupportedDisplaysKHR")) return (void *)table->GetDisplayPlaneSupportedDisplaysKHR; + if (!strcmp(name, "GetDisplayModePropertiesKHR")) return (void *)table->GetDisplayModePropertiesKHR; + if (!strcmp(name, "CreateDisplayModeKHR")) return (void *)table->CreateDisplayModeKHR; + if (!strcmp(name, "GetDisplayPlaneCapabilitiesKHR")) return (void *)table->GetDisplayPlaneCapabilitiesKHR; + if (!strcmp(name, "CreateDisplayPlaneSurfaceKHR")) return (void *)table->CreateDisplayPlaneSurfaceKHR; + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + if (!strcmp(name, "CreateXlibSurfaceKHR")) return (void *)table->CreateXlibSurfaceKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + if (!strcmp(name, "GetPhysicalDeviceXlibPresentationSupportKHR")) return (void *)table->GetPhysicalDeviceXlibPresentationSupportKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + if (!strcmp(name, "CreateXcbSurfaceKHR")) return (void *)table->CreateXcbSurfaceKHR; +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + if (!strcmp(name, "GetPhysicalDeviceXcbPresentationSupportKHR")) return (void *)table->GetPhysicalDeviceXcbPresentationSupportKHR; +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (!strcmp(name, "CreateWaylandSurfaceKHR")) return (void *)table->CreateWaylandSurfaceKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (!strcmp(name, "GetPhysicalDeviceWaylandPresentationSupportKHR")) return (void *)table->GetPhysicalDeviceWaylandPresentationSupportKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (!strcmp(name, "CreateAndroidSurfaceKHR")) return (void *)table->CreateAndroidSurfaceKHR; +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "CreateWin32SurfaceKHR")) return (void *)table->CreateWin32SurfaceKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR")) return (void *)table->GetPhysicalDeviceWin32PresentationSupportKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_video_queue extension commands + if (!strcmp(name, "GetPhysicalDeviceVideoCapabilitiesKHR")) return (void *)table->GetPhysicalDeviceVideoCapabilitiesKHR; + if (!strcmp(name, "GetPhysicalDeviceVideoFormatPropertiesKHR")) return (void *)table->GetPhysicalDeviceVideoFormatPropertiesKHR; + + // ---- VK_KHR_get_physical_device_properties2 extension commands + if (!strcmp(name, "GetPhysicalDeviceFeatures2KHR")) return (void *)table->GetPhysicalDeviceFeatures2KHR; + if (!strcmp(name, "GetPhysicalDeviceProperties2KHR")) return (void *)table->GetPhysicalDeviceProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceFormatProperties2KHR")) return (void *)table->GetPhysicalDeviceFormatProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties2KHR")) return (void *)table->GetPhysicalDeviceImageFormatProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties2KHR")) return (void *)table->GetPhysicalDeviceQueueFamilyProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceMemoryProperties2KHR")) return (void *)table->GetPhysicalDeviceMemoryProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties2KHR")) return (void *)table->GetPhysicalDeviceSparseImageFormatProperties2KHR; + + // ---- VK_KHR_device_group_creation extension commands + if (!strcmp(name, "EnumeratePhysicalDeviceGroupsKHR")) return (void *)table->EnumeratePhysicalDeviceGroupsKHR; + + // ---- VK_KHR_external_memory_capabilities extension commands + if (!strcmp(name, "GetPhysicalDeviceExternalBufferPropertiesKHR")) return (void *)table->GetPhysicalDeviceExternalBufferPropertiesKHR; + + // ---- VK_KHR_external_semaphore_capabilities extension commands + if (!strcmp(name, "GetPhysicalDeviceExternalSemaphorePropertiesKHR")) return (void *)table->GetPhysicalDeviceExternalSemaphorePropertiesKHR; + + // ---- VK_KHR_external_fence_capabilities extension commands + if (!strcmp(name, "GetPhysicalDeviceExternalFencePropertiesKHR")) return (void *)table->GetPhysicalDeviceExternalFencePropertiesKHR; + + // ---- VK_KHR_performance_query extension commands + if (!strcmp(name, "EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR")) return (void *)table->EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR")) return (void *)table->GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; + + // ---- VK_KHR_get_surface_capabilities2 extension commands + if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilities2KHR")) return (void *)table->GetPhysicalDeviceSurfaceCapabilities2KHR; + if (!strcmp(name, "GetPhysicalDeviceSurfaceFormats2KHR")) return (void *)table->GetPhysicalDeviceSurfaceFormats2KHR; + + // ---- VK_KHR_get_display_properties2 extension commands + if (!strcmp(name, "GetPhysicalDeviceDisplayProperties2KHR")) return (void *)table->GetPhysicalDeviceDisplayProperties2KHR; + if (!strcmp(name, "GetPhysicalDeviceDisplayPlaneProperties2KHR")) return (void *)table->GetPhysicalDeviceDisplayPlaneProperties2KHR; + if (!strcmp(name, "GetDisplayModeProperties2KHR")) return (void *)table->GetDisplayModeProperties2KHR; + if (!strcmp(name, "GetDisplayPlaneCapabilities2KHR")) return (void *)table->GetDisplayPlaneCapabilities2KHR; + + // ---- VK_KHR_fragment_shading_rate extension commands + if (!strcmp(name, "GetPhysicalDeviceFragmentShadingRatesKHR")) return (void *)table->GetPhysicalDeviceFragmentShadingRatesKHR; + + // ---- VK_KHR_video_encode_queue extension commands + if (!strcmp(name, "GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR")) return (void *)table->GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR; + + // ---- VK_KHR_cooperative_matrix extension commands + if (!strcmp(name, "GetPhysicalDeviceCooperativeMatrixPropertiesKHR")) return (void *)table->GetPhysicalDeviceCooperativeMatrixPropertiesKHR; + + // ---- VK_KHR_calibrated_timestamps extension commands + if (!strcmp(name, "GetPhysicalDeviceCalibrateableTimeDomainsKHR")) return (void *)table->GetPhysicalDeviceCalibrateableTimeDomainsKHR; + + // ---- VK_EXT_debug_report extension commands + if (!strcmp(name, "CreateDebugReportCallbackEXT")) return (void *)table->CreateDebugReportCallbackEXT; + if (!strcmp(name, "DestroyDebugReportCallbackEXT")) return (void *)table->DestroyDebugReportCallbackEXT; + if (!strcmp(name, "DebugReportMessageEXT")) return (void *)table->DebugReportMessageEXT; + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + if (!strcmp(name, "CreateStreamDescriptorSurfaceGGP")) return (void *)table->CreateStreamDescriptorSurfaceGGP; +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + if (!strcmp(name, "GetPhysicalDeviceExternalImageFormatPropertiesNV")) return (void *)table->GetPhysicalDeviceExternalImageFormatPropertiesNV; + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + if (!strcmp(name, "CreateViSurfaceNN")) return (void *)table->CreateViSurfaceNN; +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + if (!strcmp(name, "ReleaseDisplayEXT")) return (void *)table->ReleaseDisplayEXT; + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + if (!strcmp(name, "AcquireXlibDisplayEXT")) return (void *)table->AcquireXlibDisplayEXT; +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + if (!strcmp(name, "GetRandROutputDisplayEXT")) return (void *)table->GetRandROutputDisplayEXT; +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilities2EXT")) return (void *)table->GetPhysicalDeviceSurfaceCapabilities2EXT; + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + if (!strcmp(name, "CreateIOSSurfaceMVK")) return (void *)table->CreateIOSSurfaceMVK; +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + if (!strcmp(name, "CreateMacOSSurfaceMVK")) return (void *)table->CreateMacOSSurfaceMVK; +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + if (!strcmp(name, "CreateDebugUtilsMessengerEXT")) return (void *)table->CreateDebugUtilsMessengerEXT; + if (!strcmp(name, "DestroyDebugUtilsMessengerEXT")) return (void *)table->DestroyDebugUtilsMessengerEXT; + if (!strcmp(name, "SubmitDebugUtilsMessageEXT")) return (void *)table->SubmitDebugUtilsMessageEXT; + + // ---- VK_EXT_sample_locations extension commands + if (!strcmp(name, "GetPhysicalDeviceMultisamplePropertiesEXT")) return (void *)table->GetPhysicalDeviceMultisamplePropertiesEXT; + + // ---- VK_EXT_calibrated_timestamps extension commands + if (!strcmp(name, "GetPhysicalDeviceCalibrateableTimeDomainsEXT")) return (void *)table->GetPhysicalDeviceCalibrateableTimeDomainsEXT; + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp(name, "CreateImagePipeSurfaceFUCHSIA")) return (void *)table->CreateImagePipeSurfaceFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(name, "CreateMetalSurfaceEXT")) return (void *)table->CreateMetalSurfaceEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_tooling_info extension commands + if (!strcmp(name, "GetPhysicalDeviceToolPropertiesEXT")) return (void *)table->GetPhysicalDeviceToolPropertiesEXT; + + // ---- VK_NV_cooperative_matrix extension commands + if (!strcmp(name, "GetPhysicalDeviceCooperativeMatrixPropertiesNV")) return (void *)table->GetPhysicalDeviceCooperativeMatrixPropertiesNV; + + // ---- VK_NV_coverage_reduction_mode extension commands + if (!strcmp(name, "GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV")) return (void *)table->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModes2EXT")) return (void *)table->GetPhysicalDeviceSurfacePresentModes2EXT; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_headless_surface extension commands + if (!strcmp(name, "CreateHeadlessSurfaceEXT")) return (void *)table->CreateHeadlessSurfaceEXT; + + // ---- VK_EXT_acquire_drm_display extension commands + if (!strcmp(name, "AcquireDrmDisplayEXT")) return (void *)table->AcquireDrmDisplayEXT; + if (!strcmp(name, "GetDrmDisplayEXT")) return (void *)table->GetDrmDisplayEXT; + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "AcquireWinrtDisplayNV")) return (void *)table->AcquireWinrtDisplayNV; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "GetWinrtDisplayNV")) return (void *)table->GetWinrtDisplayNV; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + if (!strcmp(name, "CreateDirectFBSurfaceEXT")) return (void *)table->CreateDirectFBSurfaceEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + if (!strcmp(name, "GetPhysicalDeviceDirectFBPresentationSupportEXT")) return (void *)table->GetPhysicalDeviceDirectFBPresentationSupportEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + if (!strcmp(name, "CreateScreenSurfaceQNX")) return (void *)table->CreateScreenSurfaceQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + if (!strcmp(name, "GetPhysicalDeviceScreenPresentationSupportQNX")) return (void *)table->GetPhysicalDeviceScreenPresentationSupportQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_ARM_tensors extension commands + if (!strcmp(name, "GetPhysicalDeviceExternalTensorPropertiesARM")) return (void *)table->GetPhysicalDeviceExternalTensorPropertiesARM; + + // ---- VK_NV_optical_flow extension commands + if (!strcmp(name, "GetPhysicalDeviceOpticalFlowImageFormatsNV")) return (void *)table->GetPhysicalDeviceOpticalFlowImageFormatsNV; + + // ---- VK_NV_cooperative_vector extension commands + if (!strcmp(name, "GetPhysicalDeviceCooperativeVectorPropertiesNV")) return (void *)table->GetPhysicalDeviceCooperativeVectorPropertiesNV; + + // ---- VK_ARM_data_graph extension commands + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM")) return (void *)table->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM")) return (void *)table->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM; + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + if (!strcmp(name, "CreateSurfaceOHOS")) return (void *)table->CreateSurfaceOHOS; +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + if (!strcmp(name, "GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV")) return (void *)table->GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV; + + *found_name = false; + return NULL; +} + + +// ---- VK_KHR_video_queue extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + const VkVideoProfileInfoKHR* pVideoProfile, + VkVideoCapabilitiesKHR* pCapabilities) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceVideoCapabilitiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceVideoCapabilitiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceVideoCapabilitiesKHR(unwrapped_phys_dev, pVideoProfile, pCapabilities); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceVideoCapabilitiesKHR( + VkPhysicalDevice physicalDevice, + const VkVideoProfileInfoKHR* pVideoProfile, + VkVideoCapabilitiesKHR* pCapabilities) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceVideoCapabilitiesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceVideoCapabilitiesKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceVideoCapabilitiesKHR(phys_dev_term->phys_dev, pVideoProfile, pCapabilities); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoFormatPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, + uint32_t* pVideoFormatPropertyCount, + VkVideoFormatPropertiesKHR* pVideoFormatProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceVideoFormatPropertiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceVideoFormatPropertiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceVideoFormatPropertiesKHR(unwrapped_phys_dev, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceVideoFormatPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, + uint32_t* pVideoFormatPropertyCount, + VkVideoFormatPropertiesKHR* pVideoFormatProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceVideoFormatPropertiesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceVideoFormatPropertiesKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceVideoFormatPropertiesKHR(phys_dev_term->phys_dev, pVideoFormatInfo, pVideoFormatPropertyCount, pVideoFormatProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateVideoSessionKHR( + VkDevice device, + const VkVideoSessionCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionKHR* pVideoSession) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateVideoSessionKHR: Invalid device " + "[VUID-vkCreateVideoSessionKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateVideoSessionKHR(device, pCreateInfo, pAllocator, pVideoSession); +} + +VKAPI_ATTR void VKAPI_CALL DestroyVideoSessionKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyVideoSessionKHR: Invalid device " + "[VUID-vkDestroyVideoSessionKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyVideoSessionKHR(device, videoSession, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetVideoSessionMemoryRequirementsKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t* pMemoryRequirementsCount, + VkVideoSessionMemoryRequirementsKHR* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetVideoSessionMemoryRequirementsKHR: Invalid device " + "[VUID-vkGetVideoSessionMemoryRequirementsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetVideoSessionMemoryRequirementsKHR(device, videoSession, pMemoryRequirementsCount, pMemoryRequirements); +} + +VKAPI_ATTR VkResult VKAPI_CALL BindVideoSessionMemoryKHR( + VkDevice device, + VkVideoSessionKHR videoSession, + uint32_t bindSessionMemoryInfoCount, + const VkBindVideoSessionMemoryInfoKHR* pBindSessionMemoryInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindVideoSessionMemoryKHR: Invalid device " + "[VUID-vkBindVideoSessionMemoryKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindVideoSessionMemoryKHR(device, videoSession, bindSessionMemoryInfoCount, pBindSessionMemoryInfos); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateVideoSessionParametersKHR( + VkDevice device, + const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkVideoSessionParametersKHR* pVideoSessionParameters) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateVideoSessionParametersKHR: Invalid device " + "[VUID-vkCreateVideoSessionParametersKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateVideoSessionParametersKHR(device, pCreateInfo, pAllocator, pVideoSessionParameters); +} + +VKAPI_ATTR VkResult VKAPI_CALL UpdateVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUpdateVideoSessionParametersKHR: Invalid device " + "[VUID-vkUpdateVideoSessionParametersKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->UpdateVideoSessionParametersKHR(device, videoSessionParameters, pUpdateInfo); +} + +VKAPI_ATTR void VKAPI_CALL DestroyVideoSessionParametersKHR( + VkDevice device, + VkVideoSessionParametersKHR videoSessionParameters, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyVideoSessionParametersKHR: Invalid device " + "[VUID-vkDestroyVideoSessionParametersKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyVideoSessionParametersKHR(device, videoSessionParameters, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL CmdBeginVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoBeginCodingInfoKHR* pBeginInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginVideoCodingKHR: Invalid commandBuffer " + "[VUID-vkCmdBeginVideoCodingKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginVideoCodingKHR(commandBuffer, pBeginInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoEndCodingInfoKHR* pEndCodingInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndVideoCodingKHR: Invalid commandBuffer " + "[VUID-vkCmdEndVideoCodingKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdControlVideoCodingKHR( + VkCommandBuffer commandBuffer, + const VkVideoCodingControlInfoKHR* pCodingControlInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdControlVideoCodingKHR: Invalid commandBuffer " + "[VUID-vkCmdControlVideoCodingKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo); +} + + +// ---- VK_KHR_video_decode_queue extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDecodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoDecodeInfoKHR* pDecodeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDecodeVideoKHR: Invalid commandBuffer " + "[VUID-vkCmdDecodeVideoKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDecodeVideoKHR(commandBuffer, pDecodeInfo); +} + + +// ---- VK_KHR_dynamic_rendering extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBeginRenderingKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginRenderingKHR: Invalid commandBuffer " + "[VUID-vkCmdBeginRenderingKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginRenderingKHR(commandBuffer, pRenderingInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndRenderingKHR( + VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndRenderingKHR: Invalid commandBuffer " + "[VUID-vkCmdEndRenderingKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndRenderingKHR(commandBuffer); +} + + +// ---- VK_KHR_device_group extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR( + VkDevice device, + uint32_t heapIndex, + uint32_t localDeviceIndex, + uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupPeerMemoryFeaturesKHR: Invalid device " + "[VUID-vkGetDeviceGroupPeerMemoryFeaturesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR( + VkCommandBuffer commandBuffer, + uint32_t deviceMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDeviceMaskKHR: Invalid commandBuffer " + "[VUID-vkCmdSetDeviceMaskKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDeviceMaskKHR(commandBuffer, deviceMask); +} + +VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR( + VkCommandBuffer commandBuffer, + uint32_t baseGroupX, + uint32_t baseGroupY, + uint32_t baseGroupZ, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchBaseKHR: Invalid commandBuffer " + "[VUID-vkCmdDispatchBaseKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); +} + + +// ---- VK_KHR_maintenance1 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR( + VkDevice device, + VkCommandPool commandPool, + VkCommandPoolTrimFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkTrimCommandPoolKHR: Invalid device " + "[VUID-vkTrimCommandPoolKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->TrimCommandPoolKHR(device, commandPool, flags); +} + + +// ---- VK_KHR_external_memory_win32 extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR( + VkDevice device, + const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryWin32HandleKHR: Invalid device " + "[VUID-vkGetMemoryWin32HandleKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + HANDLE handle, + VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryWin32HandlePropertiesKHR: Invalid device " + "[VUID-vkGetMemoryWin32HandlePropertiesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_KHR_external_memory_fd extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR( + VkDevice device, + const VkMemoryGetFdInfoKHR* pGetFdInfo, + int* pFd) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryFdKHR: Invalid device " + "[VUID-vkGetMemoryFdKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryFdKHR(device, pGetFdInfo, pFd); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + int fd, + VkMemoryFdPropertiesKHR* pMemoryFdProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryFdPropertiesKHR: Invalid device " + "[VUID-vkGetMemoryFdPropertiesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties); +} + + +// ---- VK_KHR_external_semaphore_win32 extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR( + VkDevice device, + const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkImportSemaphoreWin32HandleKHR: Invalid device " + "[VUID-vkImportSemaphoreWin32HandleKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR( + VkDevice device, + const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSemaphoreWin32HandleKHR: Invalid device " + "[VUID-vkGetSemaphoreWin32HandleKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_KHR_external_semaphore_fd extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR( + VkDevice device, + const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkImportSemaphoreFdKHR: Invalid device " + "[VUID-vkImportSemaphoreFdKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR( + VkDevice device, + const VkSemaphoreGetFdInfoKHR* pGetFdInfo, + int* pFd) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSemaphoreFdKHR: Invalid device " + "[VUID-vkGetSemaphoreFdKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSemaphoreFdKHR(device, pGetFdInfo, pFd); +} + + +// ---- VK_KHR_push_descriptor extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSetKHR: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSetKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); +} + +VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR( + VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSetWithTemplateKHR: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData); +} + + +// ---- VK_KHR_descriptor_update_template extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR( + VkDevice device, + const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDescriptorUpdateTemplateKHR: Invalid device " + "[VUID-vkCreateDescriptorUpdateTemplateKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); +} + +VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR( + VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDescriptorUpdateTemplateKHR: Invalid device " + "[VUID-vkDestroyDescriptorUpdateTemplateKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR( + VkDevice device, + VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUpdateDescriptorSetWithTemplateKHR: Invalid device " + "[VUID-vkUpdateDescriptorSetWithTemplateKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->UpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData); +} + + +// ---- VK_KHR_create_renderpass2 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR( + VkDevice device, + const VkRenderPassCreateInfo2* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkRenderPass* pRenderPass) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateRenderPass2KHR: Invalid device " + "[VUID-vkCreateRenderPass2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass); +} + +VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo* pRenderPassBegin, + const VkSubpassBeginInfo* pSubpassBeginInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginRenderPass2KHR: Invalid commandBuffer " + "[VUID-vkCmdBeginRenderPass2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo* pSubpassBeginInfo, + const VkSubpassEndInfo* pSubpassEndInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdNextSubpass2KHR: Invalid commandBuffer " + "[VUID-vkCmdNextSubpass2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR( + VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndRenderPass2KHR: Invalid commandBuffer " + "[VUID-vkCmdEndRenderPass2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo); +} + + +// ---- VK_KHR_shared_presentable_image extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR( + VkDevice device, + VkSwapchainKHR swapchain) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSwapchainStatusKHR: Invalid device " + "[VUID-vkGetSwapchainStatusKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSwapchainStatusKHR(device, swapchain); +} + + +// ---- VK_KHR_external_fence_win32 extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR( + VkDevice device, + const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkImportFenceWin32HandleKHR: Invalid device " + "[VUID-vkImportFenceWin32HandleKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR( + VkDevice device, + const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, + HANDLE* pHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetFenceWin32HandleKHR: Invalid device " + "[VUID-vkGetFenceWin32HandleKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_KHR_external_fence_fd extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR( + VkDevice device, + const VkImportFenceFdInfoKHR* pImportFenceFdInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkImportFenceFdKHR: Invalid device " + "[VUID-vkImportFenceFdKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ImportFenceFdKHR(device, pImportFenceFdInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR( + VkDevice device, + const VkFenceGetFdInfoKHR* pGetFdInfo, + int* pFd) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetFenceFdKHR: Invalid device " + "[VUID-vkGetFenceFdKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetFenceFdKHR(device, pGetFdInfo, pFd); +} + + +// ---- VK_KHR_performance_query extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterKHR* pCounters, + VkPerformanceCounterDescriptionKHR* pCounterDescriptions) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR: Invalid physicalDevice " + "[VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(unwrapped_phys_dev, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pCounterCount, + VkPerformanceCounterKHR* pCounters, + VkPerformanceCounterDescriptionKHR* pCounterDescriptions) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(phys_dev_term->phys_dev, queueFamilyIndex, pCounterCount, pCounters, pCounterDescriptions); +} + +VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + VkPhysicalDevice physicalDevice, + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, + uint32_t* pNumPasses) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(unwrapped_phys_dev, pPerformanceQueryCreateInfo, pNumPasses); +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + VkPhysicalDevice physicalDevice, + const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, + uint32_t* pNumPasses) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + icd_term->dispatch.GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(phys_dev_term->phys_dev, pPerformanceQueryCreateInfo, pNumPasses); +} + +VKAPI_ATTR VkResult VKAPI_CALL AcquireProfilingLockKHR( + VkDevice device, + const VkAcquireProfilingLockInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireProfilingLockKHR: Invalid device " + "[VUID-vkAcquireProfilingLockKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->AcquireProfilingLockKHR(device, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL ReleaseProfilingLockKHR( + VkDevice device) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleaseProfilingLockKHR: Invalid device " + "[VUID-vkReleaseProfilingLockKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->ReleaseProfilingLockKHR(device); +} + + +// ---- VK_KHR_get_memory_requirements2 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR( + VkDevice device, + const VkImageMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageMemoryRequirements2KHR: Invalid device " + "[VUID-vkGetImageMemoryRequirements2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR( + VkDevice device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferMemoryRequirements2KHR: Invalid device " + "[VUID-vkGetBufferMemoryRequirements2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR( + VkDevice device, + const VkImageSparseMemoryRequirementsInfo2* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSparseMemoryRequirements2KHR: Invalid device " + "[VUID-vkGetImageSparseMemoryRequirements2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); +} + + +// ---- VK_KHR_sampler_ycbcr_conversion extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR( + VkDevice device, + const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSamplerYcbcrConversion* pYcbcrConversion) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSamplerYcbcrConversionKHR: Invalid device " + "[VUID-vkCreateSamplerYcbcrConversionKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion); +} + +VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR( + VkDevice device, + VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroySamplerYcbcrConversionKHR: Invalid device " + "[VUID-vkDestroySamplerYcbcrConversionKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator); +} + + +// ---- VK_KHR_bind_memory2 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo* pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindBufferMemory2KHR: Invalid device " + "[VUID-vkBindBufferMemory2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindBufferMemory2KHR(device, bindInfoCount, pBindInfos); +} + +VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR( + VkDevice device, + uint32_t bindInfoCount, + const VkBindImageMemoryInfo* pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindImageMemory2KHR: Invalid device " + "[VUID-vkBindImageMemory2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindImageMemory2KHR(device, bindInfoCount, pBindInfos); +} + + +// ---- VK_KHR_maintenance3 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR( + VkDevice device, + const VkDescriptorSetLayoutCreateInfo* pCreateInfo, + VkDescriptorSetLayoutSupport* pSupport) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorSetLayoutSupportKHR: Invalid device " + "[VUID-vkGetDescriptorSetLayoutSupportKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport); +} + + +// ---- VK_KHR_draw_indirect_count extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndirectCountKHR: Invalid commandBuffer " + "[VUID-vkCmdDrawIndirectCountKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndexedIndirectCountKHR: Invalid commandBuffer " + "[VUID-vkCmdDrawIndexedIndirectCountKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + + +// ---- VK_KHR_timeline_semaphore extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValueKHR( + VkDevice device, + VkSemaphore semaphore, + uint64_t* pValue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSemaphoreCounterValueKHR: Invalid device " + "[VUID-vkGetSemaphoreCounterValueKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSemaphoreCounterValueKHR(device, semaphore, pValue); +} + +VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphoresKHR( + VkDevice device, + const VkSemaphoreWaitInfo* pWaitInfo, + uint64_t timeout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWaitSemaphoresKHR: Invalid device " + "[VUID-vkWaitSemaphoresKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->WaitSemaphoresKHR(device, pWaitInfo, timeout); +} + +VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphoreKHR( + VkDevice device, + const VkSemaphoreSignalInfo* pSignalInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSignalSemaphoreKHR: Invalid device " + "[VUID-vkSignalSemaphoreKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SignalSemaphoreKHR(device, pSignalInfo); +} + + +// ---- VK_KHR_fragment_shading_rate extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceFragmentShadingRatesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pFragmentShadingRateCount, + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceFragmentShadingRatesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceFragmentShadingRatesKHR(unwrapped_phys_dev, pFragmentShadingRateCount, pFragmentShadingRates); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceFragmentShadingRatesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pFragmentShadingRateCount, + VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceFragmentShadingRatesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceFragmentShadingRatesKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceFragmentShadingRatesKHR(phys_dev_term->phys_dev, pFragmentShadingRateCount, pFragmentShadingRates); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateKHR( + VkCommandBuffer commandBuffer, + const VkExtent2D* pFragmentSize, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetFragmentShadingRateKHR: Invalid commandBuffer " + "[VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps); +} + + +// ---- VK_KHR_dynamic_rendering_local_read extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetRenderingAttachmentLocationsKHR( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRenderingAttachmentLocationsKHR: Invalid commandBuffer " + "[VUID-vkCmdSetRenderingAttachmentLocationsKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRenderingAttachmentLocationsKHR(commandBuffer, pLocationInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetRenderingInputAttachmentIndicesKHR( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRenderingInputAttachmentIndicesKHR: Invalid commandBuffer " + "[VUID-vkCmdSetRenderingInputAttachmentIndicesKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRenderingInputAttachmentIndicesKHR(commandBuffer, pInputAttachmentIndexInfo); +} + + +// ---- VK_KHR_present_wait extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL WaitForPresentKHR( + VkDevice device, + VkSwapchainKHR swapchain, + uint64_t presentId, + uint64_t timeout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWaitForPresentKHR: Invalid device " + "[VUID-vkWaitForPresentKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->WaitForPresentKHR(device, swapchain, presentId, timeout); +} + + +// ---- VK_KHR_buffer_device_address extension trampoline/terminators + +VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferDeviceAddressKHR: Invalid device " + "[VUID-vkGetBufferDeviceAddressKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferDeviceAddressKHR(device, pInfo); +} + +VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddressKHR( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferOpaqueCaptureAddressKHR: Invalid device " + "[VUID-vkGetBufferOpaqueCaptureAddressKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferOpaqueCaptureAddressKHR(device, pInfo); +} + +VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddressKHR( + VkDevice device, + const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceMemoryOpaqueCaptureAddressKHR: Invalid device " + "[VUID-vkGetDeviceMemoryOpaqueCaptureAddressKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceMemoryOpaqueCaptureAddressKHR(device, pInfo); +} + + +// ---- VK_KHR_deferred_host_operations extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateDeferredOperationKHR( + VkDevice device, + const VkAllocationCallbacks* pAllocator, + VkDeferredOperationKHR* pDeferredOperation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDeferredOperationKHR: Invalid device " + "[VUID-vkCreateDeferredOperationKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateDeferredOperationKHR(device, pAllocator, pDeferredOperation); +} + +VKAPI_ATTR void VKAPI_CALL DestroyDeferredOperationKHR( + VkDevice device, + VkDeferredOperationKHR operation, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDeferredOperationKHR: Invalid device " + "[VUID-vkDestroyDeferredOperationKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyDeferredOperationKHR(device, operation, pAllocator); +} + +VKAPI_ATTR uint32_t VKAPI_CALL GetDeferredOperationMaxConcurrencyKHR( + VkDevice device, + VkDeferredOperationKHR operation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeferredOperationMaxConcurrencyKHR: Invalid device " + "[VUID-vkGetDeferredOperationMaxConcurrencyKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeferredOperationMaxConcurrencyKHR(device, operation); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDeferredOperationResultKHR( + VkDevice device, + VkDeferredOperationKHR operation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeferredOperationResultKHR: Invalid device " + "[VUID-vkGetDeferredOperationResultKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeferredOperationResultKHR(device, operation); +} + +VKAPI_ATTR VkResult VKAPI_CALL DeferredOperationJoinKHR( + VkDevice device, + VkDeferredOperationKHR operation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDeferredOperationJoinKHR: Invalid device " + "[VUID-vkDeferredOperationJoinKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->DeferredOperationJoinKHR(device, operation); +} + + +// ---- VK_KHR_pipeline_executable_properties extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR( + VkDevice device, + const VkPipelineInfoKHR* pPipelineInfo, + uint32_t* pExecutableCount, + VkPipelineExecutablePropertiesKHR* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineExecutablePropertiesKHR: Invalid device " + "[VUID-vkGetPipelineExecutablePropertiesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableStatisticsKHR( + VkDevice device, + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pStatisticCount, + VkPipelineExecutableStatisticKHR* pStatistics) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineExecutableStatisticsKHR: Invalid device " + "[VUID-vkGetPipelineExecutableStatisticsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableInternalRepresentationsKHR( + VkDevice device, + const VkPipelineExecutableInfoKHR* pExecutableInfo, + uint32_t* pInternalRepresentationCount, + VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineExecutableInternalRepresentationsKHR: Invalid device " + "[VUID-vkGetPipelineExecutableInternalRepresentationsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations); +} + + +// ---- VK_KHR_map_memory2 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL MapMemory2KHR( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkMapMemory2KHR: Invalid device " + "[VUID-vkMapMemory2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->MapMemory2KHR(device, pMemoryMapInfo, ppData); +} + +VKAPI_ATTR VkResult VKAPI_CALL UnmapMemory2KHR( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUnmapMemory2KHR: Invalid device " + "[VUID-vkUnmapMemory2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->UnmapMemory2KHR(device, pMemoryUnmapInfo); +} + + +// ---- VK_KHR_video_encode_queue extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(unwrapped_phys_dev, pQualityLevelInfo, pQualityLevelProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, + VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(phys_dev_term->phys_dev, pQualityLevelInfo, pQualityLevelProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetEncodedVideoSessionParametersKHR( + VkDevice device, + const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo, + VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, + size_t* pDataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetEncodedVideoSessionParametersKHR: Invalid device " + "[VUID-vkGetEncodedVideoSessionParametersKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetEncodedVideoSessionParametersKHR(device, pVideoSessionParametersInfo, pFeedbackInfo, pDataSize, pData); +} + +VKAPI_ATTR void VKAPI_CALL CmdEncodeVideoKHR( + VkCommandBuffer commandBuffer, + const VkVideoEncodeInfoKHR* pEncodeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEncodeVideoKHR: Invalid commandBuffer " + "[VUID-vkCmdEncodeVideoKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEncodeVideoKHR(commandBuffer, pEncodeInfo); +} + + +// ---- VK_KHR_synchronization2 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + const VkDependencyInfo* pDependencyInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetEvent2KHR: Invalid commandBuffer " + "[VUID-vkCmdSetEvent2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetEvent2KHR(commandBuffer, event, pDependencyInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdResetEvent2KHR( + VkCommandBuffer commandBuffer, + VkEvent event, + VkPipelineStageFlags2 stageMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResetEvent2KHR: Invalid commandBuffer " + "[VUID-vkCmdResetEvent2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdResetEvent2KHR(commandBuffer, event, stageMask); +} + +VKAPI_ATTR void VKAPI_CALL CmdWaitEvents2KHR( + VkCommandBuffer commandBuffer, + uint32_t eventCount, + const VkEvent* pEvents, + const VkDependencyInfo* pDependencyInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWaitEvents2KHR: Invalid commandBuffer " + "[VUID-vkCmdWaitEvents2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfos); +} + +VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier2KHR( + VkCommandBuffer commandBuffer, + const VkDependencyInfo* pDependencyInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPipelineBarrier2KHR: Invalid commandBuffer " + "[VUID-vkCmdPipelineBarrier2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp2KHR( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkQueryPool queryPool, + uint32_t query) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteTimestamp2KHR: Invalid commandBuffer " + "[VUID-vkCmdWriteTimestamp2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteTimestamp2KHR(commandBuffer, stage, queryPool, query); +} + +VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit2KHR( + VkQueue queue, + uint32_t submitCount, + const VkSubmitInfo2* pSubmits, + VkFence fence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueSubmit2KHR: Invalid queue " + "[VUID-vkQueueSubmit2KHR-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->QueueSubmit2KHR(queue, submitCount, pSubmits, fence); +} + + +// ---- VK_KHR_copy_commands2 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferInfo2* pCopyBufferInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyBuffer2KHR: Invalid commandBuffer " + "[VUID-vkCmdCopyBuffer2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageInfo2* pCopyImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyImage2KHR: Invalid commandBuffer " + "[VUID-vkCmdCopyImage2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyImage2KHR(commandBuffer, pCopyImageInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage2KHR( + VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyBufferToImage2KHR: Invalid commandBuffer " + "[VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer2KHR( + VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyImageToBuffer2KHR: Invalid commandBuffer " + "[VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBlitImage2KHR( + VkCommandBuffer commandBuffer, + const VkBlitImageInfo2* pBlitImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBlitImage2KHR: Invalid commandBuffer " + "[VUID-vkCmdBlitImage2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBlitImage2KHR(commandBuffer, pBlitImageInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdResolveImage2KHR( + VkCommandBuffer commandBuffer, + const VkResolveImageInfo2* pResolveImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResolveImage2KHR: Invalid commandBuffer " + "[VUID-vkCmdResolveImage2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdResolveImage2KHR(commandBuffer, pResolveImageInfo); +} + + +// ---- VK_KHR_ray_tracing_maintenance1 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirect2KHR( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectDeviceAddress) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdTraceRaysIndirect2KHR: Invalid commandBuffer " + "[VUID-vkCmdTraceRaysIndirect2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress); +} + + +// ---- VK_KHR_maintenance4 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetDeviceBufferMemoryRequirementsKHR( + VkDevice device, + const VkDeviceBufferMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceBufferMemoryRequirementsKHR: Invalid device " + "[VUID-vkGetDeviceBufferMemoryRequirementsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceBufferMemoryRequirementsKHR(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL GetDeviceImageMemoryRequirementsKHR( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceImageMemoryRequirementsKHR: Invalid device " + "[VUID-vkGetDeviceImageMemoryRequirementsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceImageMemoryRequirementsKHR(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL GetDeviceImageSparseMemoryRequirementsKHR( + VkDevice device, + const VkDeviceImageMemoryRequirements* pInfo, + uint32_t* pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceImageSparseMemoryRequirementsKHR: Invalid device " + "[VUID-vkGetDeviceImageSparseMemoryRequirementsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceImageSparseMemoryRequirementsKHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); +} + + +// ---- VK_KHR_maintenance5 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer2KHR( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindIndexBuffer2KHR: Invalid commandBuffer " + "[VUID-vkCmdBindIndexBuffer2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindIndexBuffer2KHR(commandBuffer, buffer, offset, size, indexType); +} + +VKAPI_ATTR void VKAPI_CALL GetRenderingAreaGranularityKHR( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRenderingAreaGranularityKHR: Invalid device " + "[VUID-vkGetRenderingAreaGranularityKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetRenderingAreaGranularityKHR(device, pRenderingAreaInfo, pGranularity); +} + +VKAPI_ATTR void VKAPI_CALL GetDeviceImageSubresourceLayoutKHR( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceImageSubresourceLayoutKHR: Invalid device " + "[VUID-vkGetDeviceImageSubresourceLayoutKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceImageSubresourceLayoutKHR(device, pInfo, pLayout); +} + +VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2KHR( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSubresourceLayout2KHR: Invalid device " + "[VUID-vkGetImageSubresourceLayout2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageSubresourceLayout2KHR(device, image, pSubresource, pLayout); +} + + +// ---- VK_KHR_present_wait2 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL WaitForPresent2KHR( + VkDevice device, + VkSwapchainKHR swapchain, + const VkPresentWait2InfoKHR* pPresentWait2Info) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWaitForPresent2KHR: Invalid device " + "[VUID-vkWaitForPresent2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->WaitForPresent2KHR(device, swapchain, pPresentWait2Info); +} + + +// ---- VK_KHR_pipeline_binary extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineBinariesKHR( + VkDevice device, + const VkPipelineBinaryCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPipelineBinaryHandlesInfoKHR* pBinaries) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreatePipelineBinariesKHR: Invalid device " + "[VUID-vkCreatePipelineBinariesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreatePipelineBinariesKHR(device, pCreateInfo, pAllocator, pBinaries); +} + +VKAPI_ATTR void VKAPI_CALL DestroyPipelineBinaryKHR( + VkDevice device, + VkPipelineBinaryKHR pipelineBinary, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyPipelineBinaryKHR: Invalid device " + "[VUID-vkDestroyPipelineBinaryKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyPipelineBinaryKHR(device, pipelineBinary, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPipelineKeyKHR( + VkDevice device, + const VkPipelineCreateInfoKHR* pPipelineCreateInfo, + VkPipelineBinaryKeyKHR* pPipelineKey) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineKeyKHR: Invalid device " + "[VUID-vkGetPipelineKeyKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelineKeyKHR(device, pPipelineCreateInfo, pPipelineKey); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPipelineBinaryDataKHR( + VkDevice device, + const VkPipelineBinaryDataInfoKHR* pInfo, + VkPipelineBinaryKeyKHR* pPipelineBinaryKey, + size_t* pPipelineBinaryDataSize, + void* pPipelineBinaryData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineBinaryDataKHR: Invalid device " + "[VUID-vkGetPipelineBinaryDataKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelineBinaryDataKHR(device, pInfo, pPipelineBinaryKey, pPipelineBinaryDataSize, pPipelineBinaryData); +} + +VKAPI_ATTR VkResult VKAPI_CALL ReleaseCapturedPipelineDataKHR( + VkDevice device, + const VkReleaseCapturedPipelineDataInfoKHR* pInfo, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleaseCapturedPipelineDataKHR: Invalid device " + "[VUID-vkReleaseCapturedPipelineDataKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ReleaseCapturedPipelineDataKHR(device, pInfo, pAllocator); +} + + +// ---- VK_KHR_swapchain_maintenance1 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesKHR( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleaseSwapchainImagesKHR: Invalid device " + "[VUID-vkReleaseSwapchainImagesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ReleaseSwapchainImagesKHR(device, pReleaseInfo); +} + + +// ---- VK_KHR_cooperative_matrix extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesKHR* pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceCooperativeMatrixPropertiesKHR(unwrapped_phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceCooperativeMatrixPropertiesKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesKHR* pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceCooperativeMatrixPropertiesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCooperativeMatrixPropertiesKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceCooperativeMatrixPropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, pProperties); +} + + +// ---- VK_KHR_line_rasterization extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleKHR( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLineStippleKHR: Invalid commandBuffer " + "[VUID-vkCmdSetLineStippleKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLineStippleKHR(commandBuffer, lineStippleFactor, lineStipplePattern); +} + + +// ---- VK_KHR_calibrated_timestamps extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceCalibrateableTimeDomainsKHR(unwrapped_phys_dev, pTimeDomainCount, pTimeDomains); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceCalibrateableTimeDomainsKHR( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceCalibrateableTimeDomainsKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCalibrateableTimeDomainsKHR"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceCalibrateableTimeDomainsKHR(phys_dev_term->phys_dev, pTimeDomainCount, pTimeDomains); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsKHR( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetCalibratedTimestampsKHR: Invalid device " + "[VUID-vkGetCalibratedTimestampsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetCalibratedTimestampsKHR(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); +} + + +// ---- VK_KHR_maintenance6 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets2KHR( + VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindDescriptorSets2KHR: Invalid commandBuffer " + "[VUID-vkCmdBindDescriptorSets2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindDescriptorSets2KHR(commandBuffer, pBindDescriptorSetsInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdPushConstants2KHR( + VkCommandBuffer commandBuffer, + const VkPushConstantsInfo* pPushConstantsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushConstants2KHR: Invalid commandBuffer " + "[VUID-vkCmdPushConstants2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushConstants2KHR(commandBuffer, pPushConstantsInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSet2KHR( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSet2KHR: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSet2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSet2KHR(commandBuffer, pPushDescriptorSetInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplate2KHR( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSetWithTemplate2KHR: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSetWithTemplate2KHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSetWithTemplate2KHR(commandBuffer, pPushDescriptorSetWithTemplateInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDescriptorBufferOffsets2EXT( + VkCommandBuffer commandBuffer, + const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDescriptorBufferOffsets2EXT: Invalid commandBuffer " + "[VUID-vkCmdSetDescriptorBufferOffsets2EXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDescriptorBufferOffsets2EXT(commandBuffer, pSetDescriptorBufferOffsetsInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBufferEmbeddedSamplers2EXT( + VkCommandBuffer commandBuffer, + const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT: Invalid commandBuffer " + "[VUID-vkCmdBindDescriptorBufferEmbeddedSamplers2EXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo); +} + + +// ---- VK_EXT_debug_marker extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT( + VkDevice device, + const VkDebugMarkerObjectTagInfoEXT* pTagInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDebugMarkerSetObjectTagEXT: Invalid device " + "[VUID-vkDebugMarkerSetObjectTagEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugMarkerObjectTagInfoEXT local_tag_info; + memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugMarkerObjectTagInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->object; + local_tag_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev; + } + if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pTagInfo->object; + local_tag_info.object = (uint64_t)(uintptr_t)instance->instance; + } + return disp->DebugMarkerSetObjectTagEXT(device, &local_tag_info); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_DebugMarkerSetObjectTagEXT( + VkDevice device, + const VkDebugMarkerObjectTagInfoEXT* pTagInfo) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "DebugMarkerSetObjectTagEXT: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugMarkerObjectTagInfoEXT local_tag_info; + memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugMarkerObjectTagInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pTagInfo->object; + local_tag_info.object = (uint64_t)(uintptr_t)phys_dev_term->phys_dev; + // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call. + } else if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + if (NULL != dev && NULL != dev->loader_dispatch.core_dispatch.CreateSwapchainKHR) { + VkSurfaceKHR surface = (VkSurfaceKHR)(uintptr_t)pTagInfo->object; + if (wsi_unwrap_icd_surface(icd_term, &surface) == VK_SUCCESS) { + local_tag_info.object = (uint64_t)surface; + } + } + // If this is an instance we have to replace it with the proper one for the next call. + } else if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + local_tag_info.object = (uint64_t)(uintptr_t)icd_term->instance; + } + // Exit early if the driver does not support the function - this can happen as a layer or the loader itself supports + // debug utils but the driver does not. + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.DebugMarkerSetObjectTagEXT) + return VK_SUCCESS; + return dev->loader_dispatch.extension_terminator_dispatch.DebugMarkerSetObjectTagEXT(device, &local_tag_info); +} + +VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT( + VkDevice device, + const VkDebugMarkerObjectNameInfoEXT* pNameInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDebugMarkerSetObjectNameEXT: Invalid device " + "[VUID-vkDebugMarkerSetObjectNameEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugMarkerObjectNameInfoEXT local_name_info; + memcpy(&local_name_info, pNameInfo, sizeof(VkDebugMarkerObjectNameInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->object; + local_name_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev; + } + if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pNameInfo->object; + local_name_info.object = (uint64_t)(uintptr_t)instance->instance; + } + return disp->DebugMarkerSetObjectNameEXT(device, &local_name_info); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_DebugMarkerSetObjectNameEXT( + VkDevice device, + const VkDebugMarkerObjectNameInfoEXT* pNameInfo) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "DebugMarkerSetObjectNameEXT: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugMarkerObjectNameInfoEXT local_name_info; + memcpy(&local_name_info, pNameInfo, sizeof(VkDebugMarkerObjectNameInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pNameInfo->object; + local_name_info.object = (uint64_t)(uintptr_t)phys_dev_term->phys_dev; + // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call. + } else if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + if (NULL != dev && NULL != dev->loader_dispatch.core_dispatch.CreateSwapchainKHR) { + VkSurfaceKHR surface = (VkSurfaceKHR)(uintptr_t)pNameInfo->object; + if (wsi_unwrap_icd_surface(icd_term, &surface) == VK_SUCCESS) { + local_name_info.object = (uint64_t)surface; + } + } + // If this is an instance we have to replace it with the proper one for the next call. + } else if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + local_name_info.object = (uint64_t)(uintptr_t)icd_term->instance; + } + // Exit early if the driver does not support the function - this can happen as a layer or the loader itself supports + // debug utils but the driver does not. + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.DebugMarkerSetObjectNameEXT) + return VK_SUCCESS; + return dev->loader_dispatch.extension_terminator_dispatch.DebugMarkerSetObjectNameEXT(device, &local_name_info); +} + +VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDebugMarkerBeginEXT: Invalid commandBuffer " + "[VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT( + VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDebugMarkerEndEXT: Invalid commandBuffer " + "[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDebugMarkerEndEXT(commandBuffer); +} + +VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT( + VkCommandBuffer commandBuffer, + const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDebugMarkerInsertEXT: Invalid commandBuffer " + "[VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo); +} + + +// ---- VK_EXT_transform_feedback extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindTransformFeedbackBuffersEXT: Invalid commandBuffer " + "[VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes); +} + +VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginTransformFeedbackEXT: Invalid commandBuffer " + "[VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT( + VkCommandBuffer commandBuffer, + uint32_t firstCounterBuffer, + uint32_t counterBufferCount, + const VkBuffer* pCounterBuffers, + const VkDeviceSize* pCounterBufferOffsets) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndTransformFeedbackEXT: Invalid commandBuffer " + "[VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets); +} + +VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + VkQueryControlFlags flags, + uint32_t index) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginQueryIndexedEXT: Invalid commandBuffer " + "[VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT( + VkCommandBuffer commandBuffer, + VkQueryPool queryPool, + uint32_t query, + uint32_t index) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndQueryIndexedEXT: Invalid commandBuffer " + "[VUID-vkCmdEndQueryIndexedEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT( + VkCommandBuffer commandBuffer, + uint32_t instanceCount, + uint32_t firstInstance, + VkBuffer counterBuffer, + VkDeviceSize counterBufferOffset, + uint32_t counterOffset, + uint32_t vertexStride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndirectByteCountEXT: Invalid commandBuffer " + "[VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride); +} + + +// ---- VK_NVX_binary_import extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateCuModuleNVX( + VkDevice device, + const VkCuModuleCreateInfoNVX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCuModuleNVX* pModule) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateCuModuleNVX: Invalid device " + "[VUID-vkCreateCuModuleNVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateCuModuleNVX(device, pCreateInfo, pAllocator, pModule); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateCuFunctionNVX( + VkDevice device, + const VkCuFunctionCreateInfoNVX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCuFunctionNVX* pFunction) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateCuFunctionNVX: Invalid device " + "[VUID-vkCreateCuFunctionNVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateCuFunctionNVX(device, pCreateInfo, pAllocator, pFunction); +} + +VKAPI_ATTR void VKAPI_CALL DestroyCuModuleNVX( + VkDevice device, + VkCuModuleNVX module, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyCuModuleNVX: Invalid device " + "[VUID-vkDestroyCuModuleNVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyCuModuleNVX(device, module, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL DestroyCuFunctionNVX( + VkDevice device, + VkCuFunctionNVX function, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyCuFunctionNVX: Invalid device " + "[VUID-vkDestroyCuFunctionNVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyCuFunctionNVX(device, function, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL CmdCuLaunchKernelNVX( + VkCommandBuffer commandBuffer, + const VkCuLaunchInfoNVX* pLaunchInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCuLaunchKernelNVX: Invalid commandBuffer " + "[VUID-vkCmdCuLaunchKernelNVX-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCuLaunchKernelNVX(commandBuffer, pLaunchInfo); +} + + +// ---- VK_NVX_image_view_handle extension trampoline/terminators + +VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageViewHandleNVX: Invalid device " + "[VUID-vkGetImageViewHandleNVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetImageViewHandleNVX(device, pInfo); +} + +VKAPI_ATTR uint64_t VKAPI_CALL GetImageViewHandle64NVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageViewHandle64NVX: Invalid device " + "[VUID-vkGetImageViewHandle64NVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetImageViewHandle64NVX(device, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetImageViewAddressNVX( + VkDevice device, + VkImageView imageView, + VkImageViewAddressPropertiesNVX* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageViewAddressNVX: Invalid device " + "[VUID-vkGetImageViewAddressNVX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetImageViewAddressNVX(device, imageView, pProperties); +} + + +// ---- VK_AMD_draw_indirect_count extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndirectCountAMD: Invalid commandBuffer " + "[VUID-vkCmdDrawIndirectCountAMD-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndexedIndirectCountAMD: Invalid commandBuffer " + "[VUID-vkCmdDrawIndexedIndirectCountAMD-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + + +// ---- VK_AMD_shader_info extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD( + VkDevice device, + VkPipeline pipeline, + VkShaderStageFlagBits shaderStage, + VkShaderInfoTypeAMD infoType, + size_t* pInfoSize, + void* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetShaderInfoAMD: Invalid device " + "[VUID-vkGetShaderInfoAMD-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo); +} + + +// ---- VK_NV_external_memory_win32 extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV( + VkDevice device, + VkDeviceMemory memory, + VkExternalMemoryHandleTypeFlagsNV handleType, + HANDLE* pHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryWin32HandleNV: Invalid device " + "[VUID-vkGetMemoryWin32HandleNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryWin32HandleNV(device, memory, handleType, pHandle); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_EXT_conditional_rendering extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT( + VkCommandBuffer commandBuffer, + const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginConditionalRenderingEXT: Invalid commandBuffer " + "[VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT( + VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndConditionalRenderingEXT: Invalid commandBuffer " + "[VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndConditionalRenderingEXT(commandBuffer); +} + + +// ---- VK_NV_clip_space_w_scaling extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportWScalingNV* pViewportWScalings) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewportWScalingNV: Invalid commandBuffer " + "[VUID-vkCmdSetViewportWScalingNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings); +} + + +// ---- VK_EXT_display_control extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayPowerInfoEXT* pDisplayPowerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDisplayPowerControlEXT: Invalid device " + "[VUID-vkDisplayPowerControlEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->DisplayPowerControlEXT(device, display, pDisplayPowerInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT( + VkDevice device, + const VkDeviceEventInfoEXT* pDeviceEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkRegisterDeviceEventEXT: Invalid device " + "[VUID-vkRegisterDeviceEventEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->RegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence); +} + +VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT( + VkDevice device, + VkDisplayKHR display, + const VkDisplayEventInfoEXT* pDisplayEventInfo, + const VkAllocationCallbacks* pAllocator, + VkFence* pFence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkRegisterDisplayEventEXT: Invalid device " + "[VUID-vkRegisterDisplayEventEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->RegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT( + VkDevice device, + VkSwapchainKHR swapchain, + VkSurfaceCounterFlagBitsEXT counter, + uint64_t* pCounterValue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSwapchainCounterEXT: Invalid device " + "[VUID-vkGetSwapchainCounterEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSwapchainCounterEXT(device, swapchain, counter, pCounterValue); +} + + +// ---- VK_GOOGLE_display_timing extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRefreshCycleDurationGOOGLE: Invalid device " + "[VUID-vkGetRefreshCycleDurationGOOGLE-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE( + VkDevice device, + VkSwapchainKHR swapchain, + uint32_t* pPresentationTimingCount, + VkPastPresentationTimingGOOGLE* pPresentationTimings) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPastPresentationTimingGOOGLE: Invalid device " + "[VUID-vkGetPastPresentationTimingGOOGLE-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings); +} + + +// ---- VK_EXT_discard_rectangles extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT( + VkCommandBuffer commandBuffer, + uint32_t firstDiscardRectangle, + uint32_t discardRectangleCount, + const VkRect2D* pDiscardRectangles) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDiscardRectangleEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 discardRectangleEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDiscardRectangleEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDiscardRectangleEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleModeEXT( + VkCommandBuffer commandBuffer, + VkDiscardRectangleModeEXT discardRectangleMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDiscardRectangleModeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDiscardRectangleModeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode); +} + + +// ---- VK_EXT_hdr_metadata extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT( + VkDevice device, + uint32_t swapchainCount, + const VkSwapchainKHR* pSwapchains, + const VkHdrMetadataEXT* pMetadata) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetHdrMetadataEXT: Invalid device " + "[VUID-vkSetHdrMetadataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->SetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata); +} + + +// ---- VK_EXT_debug_utils extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT( + VkDevice device, + const VkDebugUtilsObjectNameInfoEXT* pNameInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetDebugUtilsObjectNameEXT: Invalid device " + "[VUID-vkSetDebugUtilsObjectNameEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugUtilsObjectNameInfoEXT local_name_info; + memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->objectHandle; + local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev; + } + if (pNameInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pNameInfo->objectHandle; + local_name_info.objectHandle = (uint64_t)(uintptr_t)instance->instance; + } + if (disp->SetDebugUtilsObjectNameEXT != NULL) { + return disp->SetDebugUtilsObjectNameEXT(device, &local_name_info); + } else { + return VK_SUCCESS; + } +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_SetDebugUtilsObjectNameEXT( + VkDevice device, + const VkDebugUtilsObjectNameInfoEXT* pNameInfo) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "SetDebugUtilsObjectNameEXT: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugUtilsObjectNameInfoEXT local_name_info; + memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pNameInfo->objectHandle; + local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev; + // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call. + } else if (pNameInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) { + if (NULL != dev && NULL != dev->loader_dispatch.core_dispatch.CreateSwapchainKHR) { + VkSurfaceKHR surface = (VkSurfaceKHR)(uintptr_t)pNameInfo->objectHandle; + if (wsi_unwrap_icd_surface(icd_term, &surface) == VK_SUCCESS) { + local_name_info.objectHandle = (uint64_t)surface; + } + } + // If this is an instance we have to replace it with the proper one for the next call. + } else if (pNameInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + local_name_info.objectHandle = (uint64_t)(uintptr_t)icd_term->instance; + } + // Exit early if the driver does not support the function - this can happen as a layer or the loader itself supports + // debug utils but the driver does not. + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.SetDebugUtilsObjectNameEXT) + return VK_SUCCESS; + return dev->loader_dispatch.extension_terminator_dispatch.SetDebugUtilsObjectNameEXT(device, &local_name_info); +} + +VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT( + VkDevice device, + const VkDebugUtilsObjectTagInfoEXT* pTagInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetDebugUtilsObjectTagEXT: Invalid device " + "[VUID-vkSetDebugUtilsObjectTagEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugUtilsObjectTagInfoEXT local_tag_info; + memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->objectHandle; + local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev; + } + if (pTagInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pTagInfo->objectHandle; + local_tag_info.objectHandle = (uint64_t)(uintptr_t)instance->instance; + } + if (disp->SetDebugUtilsObjectTagEXT != NULL) { + return disp->SetDebugUtilsObjectTagEXT(device, &local_tag_info); + } else { + return VK_SUCCESS; + } +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_SetDebugUtilsObjectTagEXT( + VkDevice device, + const VkDebugUtilsObjectTagInfoEXT* pTagInfo) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "SetDebugUtilsObjectTagEXT: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + VkDebugUtilsObjectTagInfoEXT local_tag_info; + memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT)); + // If this is a physical device, we have to replace it with the proper one for the next call. + if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t)pTagInfo->objectHandle; + local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_term->phys_dev; + // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call. + } else if (pTagInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) { + if (NULL != dev && NULL != dev->loader_dispatch.core_dispatch.CreateSwapchainKHR) { + VkSurfaceKHR surface = (VkSurfaceKHR)(uintptr_t)pTagInfo->objectHandle; + if (wsi_unwrap_icd_surface(icd_term, &surface) == VK_SUCCESS) { + local_tag_info.objectHandle = (uint64_t)surface; + } + } + // If this is an instance we have to replace it with the proper one for the next call. + } else if (pTagInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + local_tag_info.objectHandle = (uint64_t)(uintptr_t)icd_term->instance; + } + // Exit early if the driver does not support the function - this can happen as a layer or the loader itself supports + // debug utils but the driver does not. + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.SetDebugUtilsObjectTagEXT) + return VK_SUCCESS; + return dev->loader_dispatch.extension_terminator_dispatch.SetDebugUtilsObjectTagEXT(device, &local_tag_info); +} + +VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueBeginDebugUtilsLabelEXT: Invalid queue " + "[VUID-vkQueueBeginDebugUtilsLabelEXT-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (disp->QueueBeginDebugUtilsLabelEXT != NULL) { + disp->QueueBeginDebugUtilsLabelEXT(queue, pLabelInfo); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_QueueBeginDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo) { + struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch(queue); + if (NULL == dispatch_table) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "VK_EXT_debug_utils: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Only call down if the device supports the function + if (NULL != dispatch_table->extension_terminator_dispatch.QueueBeginDebugUtilsLabelEXT) + dispatch_table->extension_terminator_dispatch.QueueBeginDebugUtilsLabelEXT(queue, pLabelInfo); +} + +VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT( + VkQueue queue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueEndDebugUtilsLabelEXT: Invalid queue " + "[VUID-vkQueueEndDebugUtilsLabelEXT-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (disp->QueueEndDebugUtilsLabelEXT != NULL) { + disp->QueueEndDebugUtilsLabelEXT(queue); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_QueueEndDebugUtilsLabelEXT( + VkQueue queue) { + struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch(queue); + if (NULL == dispatch_table) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "VK_EXT_debug_utils: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Only call down if the device supports the function + if (NULL != dispatch_table->extension_terminator_dispatch.QueueEndDebugUtilsLabelEXT) + dispatch_table->extension_terminator_dispatch.QueueEndDebugUtilsLabelEXT(queue); +} + +VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueInsertDebugUtilsLabelEXT: Invalid queue " + "[VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (disp->QueueInsertDebugUtilsLabelEXT != NULL) { + disp->QueueInsertDebugUtilsLabelEXT(queue, pLabelInfo); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_QueueInsertDebugUtilsLabelEXT( + VkQueue queue, + const VkDebugUtilsLabelEXT* pLabelInfo) { + struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch(queue); + if (NULL == dispatch_table) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "VK_EXT_debug_utils: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Only call down if the device supports the function + if (NULL != dispatch_table->extension_terminator_dispatch.QueueInsertDebugUtilsLabelEXT) + dispatch_table->extension_terminator_dispatch.QueueInsertDebugUtilsLabelEXT(queue, pLabelInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginDebugUtilsLabelEXT: Invalid commandBuffer " + "[VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (disp->CmdBeginDebugUtilsLabelEXT != NULL) { + disp->CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_CmdBeginDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo) { + struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch(commandBuffer); + if (NULL == dispatch_table) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "VK_EXT_debug_utils: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Only call down if the device supports the function + if (NULL != dispatch_table->extension_terminator_dispatch.CmdBeginDebugUtilsLabelEXT) + dispatch_table->extension_terminator_dispatch.CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndDebugUtilsLabelEXT: Invalid commandBuffer " + "[VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (disp->CmdEndDebugUtilsLabelEXT != NULL) { + disp->CmdEndDebugUtilsLabelEXT(commandBuffer); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_CmdEndDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer) { + struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch(commandBuffer); + if (NULL == dispatch_table) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "VK_EXT_debug_utils: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Only call down if the device supports the function + if (NULL != dispatch_table->extension_terminator_dispatch.CmdEndDebugUtilsLabelEXT) + dispatch_table->extension_terminator_dispatch.CmdEndDebugUtilsLabelEXT(commandBuffer); +} + +VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdInsertDebugUtilsLabelEXT: Invalid commandBuffer " + "[VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (disp->CmdInsertDebugUtilsLabelEXT != NULL) { + disp->CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_CmdInsertDebugUtilsLabelEXT( + VkCommandBuffer commandBuffer, + const VkDebugUtilsLabelEXT* pLabelInfo) { + struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch(commandBuffer); + if (NULL == dispatch_table) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "VK_EXT_debug_utils: Invalid device handle"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Only call down if the device supports the function + if (NULL != dispatch_table->extension_terminator_dispatch.CmdInsertDebugUtilsLabelEXT) + dispatch_table->extension_terminator_dispatch.CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo); +} + + +// ---- VK_ANDROID_external_memory_android_hardware_buffer extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID( + VkDevice device, + const struct AHardwareBuffer* buffer, + VkAndroidHardwareBufferPropertiesANDROID* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetAndroidHardwareBufferPropertiesANDROID: Invalid device " + "[VUID-vkGetAndroidHardwareBufferPropertiesANDROID-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties); +} + +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID( + VkDevice device, + const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, + struct AHardwareBuffer** pBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryAndroidHardwareBufferANDROID: Invalid device " + "[VUID-vkGetMemoryAndroidHardwareBufferANDROID-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer); +} + +#endif // VK_USE_PLATFORM_ANDROID_KHR + +// ---- VK_AMDX_shader_enqueue extension trampoline/terminators + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR VkResult VKAPI_CALL CreateExecutionGraphPipelinesAMDX( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateExecutionGraphPipelinesAMDX: Invalid device " + "[VUID-vkCreateExecutionGraphPipelinesAMDX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateExecutionGraphPipelinesAMDX(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR VkResult VKAPI_CALL GetExecutionGraphPipelineScratchSizeAMDX( + VkDevice device, + VkPipeline executionGraph, + VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetExecutionGraphPipelineScratchSizeAMDX: Invalid device " + "[VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetExecutionGraphPipelineScratchSizeAMDX(device, executionGraph, pSizeInfo); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR VkResult VKAPI_CALL GetExecutionGraphPipelineNodeIndexAMDX( + VkDevice device, + VkPipeline executionGraph, + const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo, + uint32_t* pNodeIndex) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetExecutionGraphPipelineNodeIndexAMDX: Invalid device " + "[VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetExecutionGraphPipelineNodeIndexAMDX(device, executionGraph, pNodeInfo, pNodeIndex); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL CmdInitializeGraphScratchMemoryAMDX( + VkCommandBuffer commandBuffer, + VkPipeline executionGraph, + VkDeviceAddress scratch, + VkDeviceSize scratchSize) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdInitializeGraphScratchMemoryAMDX: Invalid commandBuffer " + "[VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdInitializeGraphScratchMemoryAMDX(commandBuffer, executionGraph, scratch, scratchSize); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX* pCountInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchGraphAMDX: Invalid commandBuffer " + "[VUID-vkCmdDispatchGraphAMDX-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchGraphAMDX(commandBuffer, scratch, scratchSize, pCountInfo); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphIndirectAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + const VkDispatchGraphCountInfoAMDX* pCountInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchGraphIndirectAMDX: Invalid commandBuffer " + "[VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchGraphIndirectAMDX(commandBuffer, scratch, scratchSize, pCountInfo); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphIndirectCountAMDX( + VkCommandBuffer commandBuffer, + VkDeviceAddress scratch, + VkDeviceSize scratchSize, + VkDeviceAddress countInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchGraphIndirectCountAMDX: Invalid commandBuffer " + "[VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchGraphIndirectCountAMDX(commandBuffer, scratch, scratchSize, countInfo); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS + +// ---- VK_EXT_sample_locations extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT( + VkCommandBuffer commandBuffer, + const VkSampleLocationsInfoEXT* pSampleLocationsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetSampleLocationsEXT: Invalid commandBuffer " + "[VUID-vkCmdSetSampleLocationsEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo); +} + +VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT( + VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT* pMultisampleProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceMultisamplePropertiesEXT: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceMultisamplePropertiesEXT(unwrapped_phys_dev, samples, pMultisampleProperties); +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMultisamplePropertiesEXT( + VkPhysicalDevice physicalDevice, + VkSampleCountFlagBits samples, + VkMultisamplePropertiesEXT* pMultisampleProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceMultisamplePropertiesEXT) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceMultisamplePropertiesEXT"); + abort(); /* Intentionally fail so user can correct issue. */ + } + icd_term->dispatch.GetPhysicalDeviceMultisamplePropertiesEXT(phys_dev_term->phys_dev, samples, pMultisampleProperties); +} + + +// ---- VK_EXT_image_drm_format_modifier extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT( + VkDevice device, + VkImage image, + VkImageDrmFormatModifierPropertiesEXT* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageDrmFormatModifierPropertiesEXT: Invalid device " + "[VUID-vkGetImageDrmFormatModifierPropertiesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetImageDrmFormatModifierPropertiesEXT(device, image, pProperties); +} + + +// ---- VK_EXT_validation_cache extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT( + VkDevice device, + const VkValidationCacheCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkValidationCacheEXT* pValidationCache) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateValidationCacheEXT: Invalid device " + "[VUID-vkCreateValidationCacheEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache); +} + +VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyValidationCacheEXT: Invalid device " + "[VUID-vkDestroyValidationCacheEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyValidationCacheEXT(device, validationCache, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT( + VkDevice device, + VkValidationCacheEXT dstCache, + uint32_t srcCacheCount, + const VkValidationCacheEXT* pSrcCaches) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkMergeValidationCachesEXT: Invalid device " + "[VUID-vkMergeValidationCachesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->MergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT( + VkDevice device, + VkValidationCacheEXT validationCache, + size_t* pDataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetValidationCacheDataEXT: Invalid device " + "[VUID-vkGetValidationCacheDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetValidationCacheDataEXT(device, validationCache, pDataSize, pData); +} + + +// ---- VK_NV_shading_rate_image extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindShadingRateImageNV: Invalid commandBuffer " + "[VUID-vkCmdBindShadingRateImageNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkShadingRatePaletteNV* pShadingRatePalettes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewportShadingRatePaletteNV: Invalid commandBuffer " + "[VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV( + VkCommandBuffer commandBuffer, + VkCoarseSampleOrderTypeNV sampleOrderType, + uint32_t customSampleOrderCount, + const VkCoarseSampleOrderCustomNV* pCustomSampleOrders) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoarseSampleOrderNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders); +} + + +// ---- VK_NV_ray_tracing extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV( + VkDevice device, + const VkAccelerationStructureCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureNV* pAccelerationStructure) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateAccelerationStructureNV: Invalid device " + "[VUID-vkCreateAccelerationStructureNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure); +} + +VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyAccelerationStructureNV: Invalid device " + "[VUID-vkDestroyAccelerationStructureNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyAccelerationStructureNV(device, accelerationStructure, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV( + VkDevice device, + const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2KHR* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetAccelerationStructureMemoryRequirementsNV: Invalid device " + "[VUID-vkGetAccelerationStructureMemoryRequirementsNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV( + VkDevice device, + uint32_t bindInfoCount, + const VkBindAccelerationStructureMemoryInfoNV* pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindAccelerationStructureMemoryNV: Invalid device " + "[VUID-vkBindAccelerationStructureMemoryNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos); +} + +VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV( + VkCommandBuffer commandBuffer, + const VkAccelerationStructureInfoNV* pInfo, + VkBuffer instanceData, + VkDeviceSize instanceOffset, + VkBool32 update, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkBuffer scratch, + VkDeviceSize scratchOffset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBuildAccelerationStructureNV: Invalid commandBuffer " + "[VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV( + VkCommandBuffer commandBuffer, + VkAccelerationStructureNV dst, + VkAccelerationStructureNV src, + VkCopyAccelerationStructureModeKHR mode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyAccelerationStructureNV: Invalid commandBuffer " + "[VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode); +} + +VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV( + VkCommandBuffer commandBuffer, + VkBuffer raygenShaderBindingTableBuffer, + VkDeviceSize raygenShaderBindingOffset, + VkBuffer missShaderBindingTableBuffer, + VkDeviceSize missShaderBindingOffset, + VkDeviceSize missShaderBindingStride, + VkBuffer hitShaderBindingTableBuffer, + VkDeviceSize hitShaderBindingOffset, + VkDeviceSize hitShaderBindingStride, + VkBuffer callableShaderBindingTableBuffer, + VkDeviceSize callableShaderBindingOffset, + VkDeviceSize callableShaderBindingStride, + uint32_t width, + uint32_t height, + uint32_t depth) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdTraceRaysNV: Invalid commandBuffer " + "[VUID-vkCmdTraceRaysNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV( + VkDevice device, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoNV* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateRayTracingPipelinesNV: Invalid device " + "[VUID-vkCreateRayTracingPipelinesNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + + +// ---- VK_KHR_ray_tracing_pipeline extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRayTracingShaderGroupHandlesKHR: Invalid device " + "[VUID-vkGetRayTracingShaderGroupHandlesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetRayTracingShaderGroupHandlesKHR(device, pipeline, firstGroup, groupCount, dataSize, pData); +} + + +// ---- VK_NV_ray_tracing extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRayTracingShaderGroupHandlesNV: Invalid device " + "[VUID-vkGetRayTracingShaderGroupHandlesNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV( + VkDevice device, + VkAccelerationStructureNV accelerationStructure, + size_t dataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetAccelerationStructureHandleNV: Invalid device " + "[VUID-vkGetAccelerationStructureHandleNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData); +} + +VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV( + VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureNV* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteAccelerationStructuresPropertiesNV: Invalid commandBuffer " + "[VUID-vkCmdWriteAccelerationStructuresPropertiesNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); +} + +VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV( + VkDevice device, + VkPipeline pipeline, + uint32_t shader) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCompileDeferredNV: Invalid device " + "[VUID-vkCompileDeferredNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CompileDeferredNV(device, pipeline, shader); +} + + +// ---- VK_EXT_external_memory_host extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHostPointer, + VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryHostPointerPropertiesEXT: Invalid device " + "[VUID-vkGetMemoryHostPointerPropertiesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties); +} + + +// ---- VK_AMD_buffer_marker extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlagBits pipelineStage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteBufferMarkerAMD: Invalid commandBuffer " + "[VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker); +} + +VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarker2AMD( + VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkBuffer dstBuffer, + VkDeviceSize dstOffset, + uint32_t marker) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteBufferMarker2AMD: Invalid commandBuffer " + "[VUID-vkCmdWriteBufferMarker2AMD-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker); +} + + +// ---- VK_EXT_calibrated_timestamps extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceCalibrateableTimeDomainsEXT(unwrapped_phys_dev, pTimeDomainCount, pTimeDomains); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceCalibrateableTimeDomainsEXT( + VkPhysicalDevice physicalDevice, + uint32_t* pTimeDomainCount, + VkTimeDomainKHR* pTimeDomains) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceCalibrateableTimeDomainsEXT) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCalibrateableTimeDomainsEXT"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceCalibrateableTimeDomainsEXT(phys_dev_term->phys_dev, pTimeDomainCount, pTimeDomains); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT( + VkDevice device, + uint32_t timestampCount, + const VkCalibratedTimestampInfoKHR* pTimestampInfos, + uint64_t* pTimestamps, + uint64_t* pMaxDeviation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetCalibratedTimestampsEXT: Invalid device " + "[VUID-vkGetCalibratedTimestampsEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation); +} + + +// ---- VK_NV_mesh_shader extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV( + VkCommandBuffer commandBuffer, + uint32_t taskCount, + uint32_t firstTask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMeshTasksNV: Invalid commandBuffer " + "[VUID-vkCmdDrawMeshTasksNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMeshTasksIndirectNV: Invalid commandBuffer " + "[VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMeshTasksIndirectCountNV: Invalid commandBuffer " + "[VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + + +// ---- VK_NV_scissor_exclusive extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorEnableNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkBool32* pExclusiveScissorEnables) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetExclusiveScissorEnableNV: Invalid commandBuffer " + "[VUID-vkCmdSetExclusiveScissorEnableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetExclusiveScissorEnableNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV( + VkCommandBuffer commandBuffer, + uint32_t firstExclusiveScissor, + uint32_t exclusiveScissorCount, + const VkRect2D* pExclusiveScissors) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetExclusiveScissorNV: Invalid commandBuffer " + "[VUID-vkCmdSetExclusiveScissorNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors); +} + + +// ---- VK_NV_device_diagnostic_checkpoints extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV( + VkCommandBuffer commandBuffer, + const void* pCheckpointMarker) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCheckpointNV: Invalid commandBuffer " + "[VUID-vkCmdSetCheckpointNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCheckpointNV(commandBuffer, pCheckpointMarker); +} + +VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointDataNV* pCheckpointData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetQueueCheckpointDataNV: Invalid queue " + "[VUID-vkGetQueueCheckpointDataNV-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData); +} + +VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointData2NV( + VkQueue queue, + uint32_t* pCheckpointDataCount, + VkCheckpointData2NV* pCheckpointData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetQueueCheckpointData2NV: Invalid queue " + "[VUID-vkGetQueueCheckpointData2NV-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetQueueCheckpointData2NV(queue, pCheckpointDataCount, pCheckpointData); +} + + +// ---- VK_INTEL_performance_query extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL( + VkDevice device, + const VkInitializePerformanceApiInfoINTEL* pInitializeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkInitializePerformanceApiINTEL: Invalid device " + "[VUID-vkInitializePerformanceApiINTEL-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->InitializePerformanceApiINTEL(device, pInitializeInfo); +} + +VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL( + VkDevice device) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUninitializePerformanceApiINTEL: Invalid device " + "[VUID-vkUninitializePerformanceApiINTEL-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->UninitializePerformanceApiINTEL(device); +} + +VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceMarkerInfoINTEL* pMarkerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPerformanceMarkerINTEL: Invalid commandBuffer " + "[VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPerformanceStreamMarkerINTEL: Invalid commandBuffer " + "[VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL( + VkCommandBuffer commandBuffer, + const VkPerformanceOverrideInfoINTEL* pOverrideInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPerformanceOverrideINTEL: Invalid commandBuffer " + "[VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL( + VkDevice device, + const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, + VkPerformanceConfigurationINTEL* pConfiguration) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquirePerformanceConfigurationINTEL: Invalid device " + "[VUID-vkAcquirePerformanceConfigurationINTEL-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->AcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration); +} + +VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL( + VkDevice device, + VkPerformanceConfigurationINTEL configuration) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleasePerformanceConfigurationINTEL: Invalid device " + "[VUID-vkReleasePerformanceConfigurationINTEL-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ReleasePerformanceConfigurationINTEL(device, configuration); +} + +VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL( + VkQueue queue, + VkPerformanceConfigurationINTEL configuration) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueSetPerformanceConfigurationINTEL: Invalid queue " + "[VUID-vkQueueSetPerformanceConfigurationINTEL-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->QueueSetPerformanceConfigurationINTEL(queue, configuration); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL( + VkDevice device, + VkPerformanceParameterTypeINTEL parameter, + VkPerformanceValueINTEL* pValue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPerformanceParameterINTEL: Invalid device " + "[VUID-vkGetPerformanceParameterINTEL-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPerformanceParameterINTEL(device, parameter, pValue); +} + + +// ---- VK_AMD_display_native_hdr extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD( + VkDevice device, + VkSwapchainKHR swapChain, + VkBool32 localDimmingEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetLocalDimmingAMD: Invalid device " + "[VUID-vkSetLocalDimmingAMD-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->SetLocalDimmingAMD(device, swapChain, localDimmingEnable); +} + + +// ---- VK_EXT_buffer_device_address extension trampoline/terminators + +VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT( + VkDevice device, + const VkBufferDeviceAddressInfo* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferDeviceAddressEXT: Invalid device " + "[VUID-vkGetBufferDeviceAddressEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferDeviceAddressEXT(device, pInfo); +} + + +// ---- VK_NV_cooperative_matrix extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesNV* pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceCooperativeMatrixPropertiesNV(unwrapped_phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceCooperativeMatrixPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixPropertiesNV* pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceCooperativeMatrixPropertiesNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCooperativeMatrixPropertiesNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceCooperativeMatrixPropertiesNV(phys_dev_term->phys_dev, pPropertyCount, pProperties); +} + + +// ---- VK_NV_coverage_reduction_mode extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + VkPhysicalDevice physicalDevice, + uint32_t* pCombinationCount, + VkFramebufferMixedSamplesCombinationNV* pCombinations) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(unwrapped_phys_dev, pCombinationCount, pCombinations); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + VkPhysicalDevice physicalDevice, + uint32_t* pCombinationCount, + VkFramebufferMixedSamplesCombinationNV* pCombinations) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(phys_dev_term->phys_dev, pCombinationCount, pCombinations); +} + + +// ---- VK_EXT_full_screen_exclusive extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireFullScreenExclusiveModeEXT: Invalid device " + "[VUID-vkAcquireFullScreenExclusiveModeEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->AcquireFullScreenExclusiveModeEXT(device, swapchain); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT( + VkDevice device, + VkSwapchainKHR swapchain) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleaseFullScreenExclusiveModeEXT: Invalid device " + "[VUID-vkReleaseFullScreenExclusiveModeEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ReleaseFullScreenExclusiveModeEXT(device, swapchain); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_EXT_line_rasterization extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLineStippleEXT: Invalid commandBuffer " + "[VUID-vkCmdSetLineStippleEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern); +} + + +// ---- VK_EXT_host_query_reset extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT( + VkDevice device, + VkQueryPool queryPool, + uint32_t firstQuery, + uint32_t queryCount) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetQueryPoolEXT: Invalid device " + "[VUID-vkResetQueryPoolEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->ResetQueryPoolEXT(device, queryPool, firstQuery, queryCount); +} + + +// ---- VK_EXT_extended_dynamic_state extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetCullModeEXT( + VkCommandBuffer commandBuffer, + VkCullModeFlags cullMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCullModeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetCullModeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCullModeEXT(commandBuffer, cullMode); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetFrontFaceEXT( + VkCommandBuffer commandBuffer, + VkFrontFace frontFace) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetFrontFaceEXT: Invalid commandBuffer " + "[VUID-vkCmdSetFrontFaceEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetFrontFaceEXT(commandBuffer, frontFace); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveTopologyEXT( + VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPrimitiveTopologyEXT: Invalid commandBuffer " + "[VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetViewportWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t viewportCount, + const VkViewport* pViewports) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewportWithCountEXT: Invalid commandBuffer " + "[VUID-vkCmdSetViewportWithCountEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetScissorWithCountEXT( + VkCommandBuffer commandBuffer, + uint32_t scissorCount, + const VkRect2D* pScissors) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetScissorWithCountEXT: Invalid commandBuffer " + "[VUID-vkCmdSetScissorWithCountEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors); +} + +VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers2EXT( + VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer* pBuffers, + const VkDeviceSize* pOffsets, + const VkDeviceSize* pSizes, + const VkDeviceSize* pStrides) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindVertexBuffers2EXT: Invalid commandBuffer " + "[VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthTestEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthWriteEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthWriteEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthWriteEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthCompareOpEXT( + VkCommandBuffer commandBuffer, + VkCompareOp depthCompareOp) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthCompareOpEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthBoundsTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBoundsTestEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetStencilTestEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stencilTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilTestEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetStencilOpEXT( + VkCommandBuffer commandBuffer, + VkStencilFaceFlags faceMask, + VkStencilOp failOp, + VkStencilOp passOp, + VkStencilOp depthFailOp, + VkCompareOp compareOp) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilOpEXT: Invalid commandBuffer " + "[VUID-vkCmdSetStencilOpEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); +} + + +// ---- VK_EXT_host_image_copy extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToImageEXT( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyMemoryToImageEXT: Invalid device " + "[VUID-vkCopyMemoryToImageEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyMemoryToImageEXT(device, pCopyMemoryToImageInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyImageToMemoryEXT( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyImageToMemoryEXT: Invalid device " + "[VUID-vkCopyImageToMemoryEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyImageToMemoryEXT(device, pCopyImageToMemoryInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyImageToImageEXT( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyImageToImageEXT: Invalid device " + "[VUID-vkCopyImageToImageEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyImageToImageEXT(device, pCopyImageToImageInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL TransitionImageLayoutEXT( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkTransitionImageLayoutEXT: Invalid device " + "[VUID-vkTransitionImageLayoutEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->TransitionImageLayoutEXT(device, transitionCount, pTransitions); +} + +VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2EXT( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSubresourceLayout2EXT: Invalid device " + "[VUID-vkGetImageSubresourceLayout2EXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageSubresourceLayout2EXT(device, image, pSubresource, pLayout); +} + + +// ---- VK_EXT_swapchain_maintenance1 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesEXT( + VkDevice device, + const VkReleaseSwapchainImagesInfoKHR* pReleaseInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkReleaseSwapchainImagesEXT: Invalid device " + "[VUID-vkReleaseSwapchainImagesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ReleaseSwapchainImagesEXT(device, pReleaseInfo); +} + + +// ---- VK_NV_device_generated_commands extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsNV( + VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetGeneratedCommandsMemoryRequirementsNV: Invalid device " + "[VUID-vkGetGeneratedCommandsMemoryRequirementsNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetGeneratedCommandsMemoryRequirementsNV(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsNV( + VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPreprocessGeneratedCommandsNV: Invalid commandBuffer " + "[VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsNV( + VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdExecuteGeneratedCommandsNV: Invalid commandBuffer " + "[VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBindPipelineShaderGroupNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline, + uint32_t groupIndex) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindPipelineShaderGroupNV: Invalid commandBuffer " + "[VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNV( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutNV* pIndirectCommandsLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateIndirectCommandsLayoutNV: Invalid device " + "[VUID-vkCreateIndirectCommandsLayoutNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateIndirectCommandsLayoutNV(device, pCreateInfo, pAllocator, pIndirectCommandsLayout); +} + +VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNV( + VkDevice device, + VkIndirectCommandsLayoutNV indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyIndirectCommandsLayoutNV: Invalid device " + "[VUID-vkDestroyIndirectCommandsLayoutNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyIndirectCommandsLayoutNV(device, indirectCommandsLayout, pAllocator); +} + + +// ---- VK_EXT_depth_bias_control extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias2EXT( + VkCommandBuffer commandBuffer, + const VkDepthBiasInfoEXT* pDepthBiasInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBias2EXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthBias2EXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo); +} + + +// ---- VK_EXT_acquire_drm_display extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL AcquireDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + VkDisplayKHR display) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireDrmDisplayEXT: Invalid physicalDevice " + "[VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->AcquireDrmDisplayEXT(unwrapped_phys_dev, drmFd, display); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_AcquireDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + VkDisplayKHR display) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.AcquireDrmDisplayEXT) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support AcquireDrmDisplayEXT"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + return icd_term->dispatch.AcquireDrmDisplayEXT(phys_dev_term->phys_dev, drmFd, display); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + uint32_t connectorId, + VkDisplayKHR* display) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDrmDisplayEXT: Invalid physicalDevice " + "[VUID-vkGetDrmDisplayEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetDrmDisplayEXT(unwrapped_phys_dev, drmFd, connectorId, display); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDrmDisplayEXT( + VkPhysicalDevice physicalDevice, + int32_t drmFd, + uint32_t connectorId, + VkDisplayKHR* display) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetDrmDisplayEXT) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetDrmDisplayEXT"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + return icd_term->dispatch.GetDrmDisplayEXT(phys_dev_term->phys_dev, drmFd, connectorId, display); +} + + +// ---- VK_EXT_private_data extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlotEXT( + VkDevice device, + const VkPrivateDataSlotCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkPrivateDataSlot* pPrivateDataSlot) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreatePrivateDataSlotEXT: Invalid device " + "[VUID-vkCreatePrivateDataSlotEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreatePrivateDataSlotEXT(device, pCreateInfo, pAllocator, pPrivateDataSlot); +} + +VKAPI_ATTR void VKAPI_CALL DestroyPrivateDataSlotEXT( + VkDevice device, + VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyPrivateDataSlotEXT: Invalid device " + "[VUID-vkDestroyPrivateDataSlotEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyPrivateDataSlotEXT(device, privateDataSlot, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL SetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t data) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetPrivateDataEXT: Invalid device " + "[VUID-vkSetPrivateDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SetPrivateDataEXT(device, objectType, objectHandle, privateDataSlot, data); +} + +VKAPI_ATTR void VKAPI_CALL GetPrivateDataEXT( + VkDevice device, + VkObjectType objectType, + uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, + uint64_t* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPrivateDataEXT: Invalid device " + "[VUID-vkGetPrivateDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetPrivateDataEXT(device, objectType, objectHandle, privateDataSlot, pData); +} + + +// ---- VK_NV_cuda_kernel_launch extension trampoline/terminators + +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR VkResult VKAPI_CALL CreateCudaModuleNV( + VkDevice device, + const VkCudaModuleCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaModuleNV* pModule) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateCudaModuleNV: Invalid device " + "[VUID-vkCreateCudaModuleNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateCudaModuleNV(device, pCreateInfo, pAllocator, pModule); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR VkResult VKAPI_CALL GetCudaModuleCacheNV( + VkDevice device, + VkCudaModuleNV module, + size_t* pCacheSize, + void* pCacheData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetCudaModuleCacheNV: Invalid device " + "[VUID-vkGetCudaModuleCacheNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetCudaModuleCacheNV(device, module, pCacheSize, pCacheData); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR VkResult VKAPI_CALL CreateCudaFunctionNV( + VkDevice device, + const VkCudaFunctionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaFunctionNV* pFunction) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateCudaFunctionNV: Invalid device " + "[VUID-vkCreateCudaFunctionNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateCudaFunctionNV(device, pCreateInfo, pAllocator, pFunction); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL DestroyCudaModuleNV( + VkDevice device, + VkCudaModuleNV module, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyCudaModuleNV: Invalid device " + "[VUID-vkDestroyCudaModuleNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyCudaModuleNV(device, module, pAllocator); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL DestroyCudaFunctionNV( + VkDevice device, + VkCudaFunctionNV function, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyCudaFunctionNV: Invalid device " + "[VUID-vkDestroyCudaFunctionNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyCudaFunctionNV(device, function, pAllocator); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) +VKAPI_ATTR void VKAPI_CALL CmdCudaLaunchKernelNV( + VkCommandBuffer commandBuffer, + const VkCudaLaunchInfoNV* pLaunchInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCudaLaunchKernelNV: Invalid commandBuffer " + "[VUID-vkCmdCudaLaunchKernelNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCudaLaunchKernelNV(commandBuffer, pLaunchInfo); +} + +#endif // VK_ENABLE_BETA_EXTENSIONS + +// ---- VK_QCOM_tile_shading extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDispatchTileQCOM( + VkCommandBuffer commandBuffer, + const VkDispatchTileInfoQCOM* pDispatchTileInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchTileQCOM: Invalid commandBuffer " + "[VUID-vkCmdDispatchTileQCOM-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchTileQCOM(commandBuffer, pDispatchTileInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBeginPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginPerTileExecutionQCOM: Invalid commandBuffer " + "[VUID-vkCmdBeginPerTileExecutionQCOM-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginPerTileExecutionQCOM(commandBuffer, pPerTileBeginInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdEndPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileEndInfoQCOM* pPerTileEndInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndPerTileExecutionQCOM: Invalid commandBuffer " + "[VUID-vkCmdEndPerTileExecutionQCOM-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndPerTileExecutionQCOM(commandBuffer, pPerTileEndInfo); +} + + +// ---- VK_EXT_metal_objects extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR void VKAPI_CALL ExportMetalObjectsEXT( + VkDevice device, + VkExportMetalObjectsInfoEXT* pMetalObjectsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkExportMetalObjectsEXT: Invalid device " + "[VUID-vkExportMetalObjectsEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->ExportMetalObjectsEXT(device, pMetalObjectsInfo); +} + +#endif // VK_USE_PLATFORM_METAL_EXT + +// ---- VK_EXT_descriptor_buffer extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSizeEXT( + VkDevice device, + VkDescriptorSetLayout layout, + VkDeviceSize* pLayoutSizeInBytes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorSetLayoutSizeEXT: Invalid device " + "[VUID-vkGetDescriptorSetLayoutSizeEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorSetLayoutSizeEXT(device, layout, pLayoutSizeInBytes); +} + +VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutBindingOffsetEXT( + VkDevice device, + VkDescriptorSetLayout layout, + uint32_t binding, + VkDeviceSize* pOffset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorSetLayoutBindingOffsetEXT: Invalid device " + "[VUID-vkGetDescriptorSetLayoutBindingOffsetEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorSetLayoutBindingOffsetEXT(device, layout, binding, pOffset); +} + +VKAPI_ATTR void VKAPI_CALL GetDescriptorEXT( + VkDevice device, + const VkDescriptorGetInfoEXT* pDescriptorInfo, + size_t dataSize, + void* pDescriptor) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorEXT: Invalid device " + "[VUID-vkGetDescriptorEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorEXT(device, pDescriptorInfo, dataSize, pDescriptor); +} + +VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBuffersEXT( + VkCommandBuffer commandBuffer, + uint32_t bufferCount, + const VkDescriptorBufferBindingInfoEXT* pBindingInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindDescriptorBuffersEXT: Invalid commandBuffer " + "[VUID-vkCmdBindDescriptorBuffersEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindDescriptorBuffersEXT(commandBuffer, bufferCount, pBindingInfos); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDescriptorBufferOffsetsEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t firstSet, + uint32_t setCount, + const uint32_t* pBufferIndices, + const VkDeviceSize* pOffsets) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDescriptorBufferOffsetsEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDescriptorBufferOffsetsEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDescriptorBufferOffsetsEXT(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets); +} + +VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBufferEmbeddedSamplersEXT( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindDescriptorBufferEmbeddedSamplersEXT: Invalid commandBuffer " + "[VUID-vkCmdBindDescriptorBufferEmbeddedSamplersEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindDescriptorBufferEmbeddedSamplersEXT(commandBuffer, pipelineBindPoint, layout, set); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetBufferOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkBufferCaptureDescriptorDataInfoEXT* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferOpaqueCaptureDescriptorDataEXT: Invalid device " + "[VUID-vkGetBufferOpaqueCaptureDescriptorDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferOpaqueCaptureDescriptorDataEXT(device, pInfo, pData); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetImageOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkImageCaptureDescriptorDataInfoEXT* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageOpaqueCaptureDescriptorDataEXT: Invalid device " + "[VUID-vkGetImageOpaqueCaptureDescriptorDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetImageOpaqueCaptureDescriptorDataEXT(device, pInfo, pData); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetImageViewOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkImageViewCaptureDescriptorDataInfoEXT* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageViewOpaqueCaptureDescriptorDataEXT: Invalid device " + "[VUID-vkGetImageViewOpaqueCaptureDescriptorDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetImageViewOpaqueCaptureDescriptorDataEXT(device, pInfo, pData); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetSamplerOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkSamplerCaptureDescriptorDataInfoEXT* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSamplerOpaqueCaptureDescriptorDataEXT: Invalid device " + "[VUID-vkGetSamplerOpaqueCaptureDescriptorDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSamplerOpaqueCaptureDescriptorDataEXT(device, pInfo, pData); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureOpaqueCaptureDescriptorDataEXT( + VkDevice device, + const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT: Invalid device " + "[VUID-vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT(device, pInfo, pData); +} + + +// ---- VK_NV_fragment_shading_rate_enums extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateEnumNV( + VkCommandBuffer commandBuffer, + VkFragmentShadingRateNV shadingRate, + const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetFragmentShadingRateEnumNV: Invalid commandBuffer " + "[VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps); +} + + +// ---- VK_EXT_device_fault extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetDeviceFaultInfoEXT( + VkDevice device, + VkDeviceFaultCountsEXT* pFaultCounts, + VkDeviceFaultInfoEXT* pFaultInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceFaultInfoEXT: Invalid device " + "[VUID-vkGetDeviceFaultInfoEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceFaultInfoEXT(device, pFaultCounts, pFaultInfo); +} + + +// ---- VK_NV_acquire_winrt_display extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL AcquireWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireWinrtDisplayNV: Invalid physicalDevice " + "[VUID-vkAcquireWinrtDisplayNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->AcquireWinrtDisplayNV(unwrapped_phys_dev, display); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_AcquireWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + VkDisplayKHR display) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.AcquireWinrtDisplayNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support AcquireWinrtDisplayNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.AcquireWinrtDisplayNV(phys_dev_term->phys_dev, display); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL GetWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + uint32_t deviceRelativeId, + VkDisplayKHR* pDisplay) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetWinrtDisplayNV: Invalid physicalDevice " + "[VUID-vkGetWinrtDisplayNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetWinrtDisplayNV(unwrapped_phys_dev, deviceRelativeId, pDisplay); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetWinrtDisplayNV( + VkPhysicalDevice physicalDevice, + uint32_t deviceRelativeId, + VkDisplayKHR* pDisplay) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetWinrtDisplayNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetWinrtDisplayNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetWinrtDisplayNV(phys_dev_term->phys_dev, deviceRelativeId, pDisplay); +} + +#endif // VK_USE_PLATFORM_WIN32_KHR + +// ---- VK_EXT_vertex_input_dynamic_state extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetVertexInputEXT( + VkCommandBuffer commandBuffer, + uint32_t vertexBindingDescriptionCount, + const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, + uint32_t vertexAttributeDescriptionCount, + const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetVertexInputEXT: Invalid commandBuffer " + "[VUID-vkCmdSetVertexInputEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions); +} + + +// ---- VK_FUCHSIA_external_memory extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandleFUCHSIA( + VkDevice device, + const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryZirconHandleFUCHSIA: Invalid device " + "[VUID-vkGetMemoryZirconHandleFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle); +} + +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandlePropertiesFUCHSIA( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + zx_handle_t zirconHandle, + VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryZirconHandlePropertiesFUCHSIA: Invalid device " + "[VUID-vkGetMemoryZirconHandlePropertiesFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryZirconHandlePropertiesFUCHSIA(device, handleType, zirconHandle, pMemoryZirconHandleProperties); +} + +#endif // VK_USE_PLATFORM_FUCHSIA + +// ---- VK_FUCHSIA_external_semaphore extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreZirconHandleFUCHSIA( + VkDevice device, + const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkImportSemaphoreZirconHandleFUCHSIA: Invalid device " + "[VUID-vkImportSemaphoreZirconHandleFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ImportSemaphoreZirconHandleFUCHSIA(device, pImportSemaphoreZirconHandleInfo); +} + +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreZirconHandleFUCHSIA( + VkDevice device, + const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, + zx_handle_t* pZirconHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSemaphoreZirconHandleFUCHSIA: Invalid device " + "[VUID-vkGetSemaphoreZirconHandleFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSemaphoreZirconHandleFUCHSIA(device, pGetZirconHandleInfo, pZirconHandle); +} + +#endif // VK_USE_PLATFORM_FUCHSIA + +// ---- VK_FUCHSIA_buffer_collection extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL CreateBufferCollectionFUCHSIA( + VkDevice device, + const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkBufferCollectionFUCHSIA* pCollection) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateBufferCollectionFUCHSIA: Invalid device " + "[VUID-vkCreateBufferCollectionFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateBufferCollectionFUCHSIA(device, pCreateInfo, pAllocator, pCollection); +} + +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionImageConstraintsFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetBufferCollectionImageConstraintsFUCHSIA: Invalid device " + "[VUID-vkSetBufferCollectionImageConstraintsFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SetBufferCollectionImageConstraintsFUCHSIA(device, collection, pImageConstraintsInfo); +} + +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetBufferCollectionBufferConstraintsFUCHSIA: Invalid device " + "[VUID-vkSetBufferCollectionBufferConstraintsFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SetBufferCollectionBufferConstraintsFUCHSIA(device, collection, pBufferConstraintsInfo); +} + +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyBufferCollectionFUCHSIA: Invalid device " + "[VUID-vkDestroyBufferCollectionFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyBufferCollectionFUCHSIA(device, collection, pAllocator); +} + +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL GetBufferCollectionPropertiesFUCHSIA( + VkDevice device, + VkBufferCollectionFUCHSIA collection, + VkBufferCollectionPropertiesFUCHSIA* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferCollectionPropertiesFUCHSIA: Invalid device " + "[VUID-vkGetBufferCollectionPropertiesFUCHSIA-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferCollectionPropertiesFUCHSIA(device, collection, pProperties); +} + +#endif // VK_USE_PLATFORM_FUCHSIA + +// ---- VK_HUAWEI_subpass_shading extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + VkDevice device, + VkRenderPass renderpass, + VkExtent2D* pMaxWorkgroupSize) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI: Invalid device " + "[VUID-vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(device, renderpass, pMaxWorkgroupSize); +} + +VKAPI_ATTR void VKAPI_CALL CmdSubpassShadingHUAWEI( + VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSubpassShadingHUAWEI: Invalid commandBuffer " + "[VUID-vkCmdSubpassShadingHUAWEI-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSubpassShadingHUAWEI(commandBuffer); +} + + +// ---- VK_HUAWEI_invocation_mask extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBindInvocationMaskHUAWEI( + VkCommandBuffer commandBuffer, + VkImageView imageView, + VkImageLayout imageLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindInvocationMaskHUAWEI: Invalid commandBuffer " + "[VUID-vkCmdBindInvocationMaskHUAWEI-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout); +} + + +// ---- VK_NV_external_memory_rdma extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryRemoteAddressNV( + VkDevice device, + const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, + VkRemoteAddressNV* pAddress) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryRemoteAddressNV: Invalid device " + "[VUID-vkGetMemoryRemoteAddressNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryRemoteAddressNV(device, pMemoryGetRemoteAddressInfo, pAddress); +} + + +// ---- VK_EXT_pipeline_properties extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPipelinePropertiesEXT( + VkDevice device, + const VkPipelineInfoEXT* pPipelineInfo, + VkBaseOutStructure* pPipelineProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelinePropertiesEXT: Invalid device " + "[VUID-vkGetPipelinePropertiesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelinePropertiesEXT(device, pPipelineInfo, pPipelineProperties); +} + + +// ---- VK_EXT_extended_dynamic_state2 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetPatchControlPointsEXT( + VkCommandBuffer commandBuffer, + uint32_t patchControlPoints) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPatchControlPointsEXT: Invalid commandBuffer " + "[VUID-vkCmdSetPatchControlPointsEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetRasterizerDiscardEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRasterizerDiscardEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetRasterizerDiscardEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRasterizerDiscardEnableEXT(commandBuffer, rasterizerDiscardEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthBiasEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthBiasEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBiasEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthBiasEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthBiasEnableEXT(commandBuffer, depthBiasEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetLogicOpEXT( + VkCommandBuffer commandBuffer, + VkLogicOp logicOp) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLogicOpEXT: Invalid commandBuffer " + "[VUID-vkCmdSetLogicOpEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLogicOpEXT(commandBuffer, logicOp); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveRestartEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPrimitiveRestartEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetPrimitiveRestartEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetPrimitiveRestartEnableEXT(commandBuffer, primitiveRestartEnable); +} + + +// ---- VK_EXT_color_write_enable extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetColorWriteEnableEXT( + VkCommandBuffer commandBuffer, + uint32_t attachmentCount, + const VkBool32* pColorWriteEnables) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetColorWriteEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetColorWriteEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables); +} + + +// ---- VK_EXT_multi_draw extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDrawMultiEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawInfoEXT* pVertexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMultiEXT: Invalid commandBuffer " + "[VUID-vkCmdDrawMultiEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawMultiIndexedEXT( + VkCommandBuffer commandBuffer, + uint32_t drawCount, + const VkMultiDrawIndexedInfoEXT* pIndexInfo, + uint32_t instanceCount, + uint32_t firstInstance, + uint32_t stride, + const int32_t* pVertexOffset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMultiIndexedEXT: Invalid commandBuffer " + "[VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset); +} + + +// ---- VK_EXT_opacity_micromap extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateMicromapEXT( + VkDevice device, + const VkMicromapCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkMicromapEXT* pMicromap) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateMicromapEXT: Invalid device " + "[VUID-vkCreateMicromapEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateMicromapEXT(device, pCreateInfo, pAllocator, pMicromap); +} + +VKAPI_ATTR void VKAPI_CALL DestroyMicromapEXT( + VkDevice device, + VkMicromapEXT micromap, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyMicromapEXT: Invalid device " + "[VUID-vkDestroyMicromapEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyMicromapEXT(device, micromap, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL CmdBuildMicromapsEXT( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBuildMicromapsEXT: Invalid commandBuffer " + "[VUID-vkCmdBuildMicromapsEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBuildMicromapsEXT(commandBuffer, infoCount, pInfos); +} + +VKAPI_ATTR VkResult VKAPI_CALL BuildMicromapsEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkMicromapBuildInfoEXT* pInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBuildMicromapsEXT: Invalid device " + "[VUID-vkBuildMicromapsEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BuildMicromapsEXT(device, deferredOperation, infoCount, pInfos); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapInfoEXT* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyMicromapEXT: Invalid device " + "[VUID-vkCopyMicromapEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyMicromapEXT(device, deferredOperation, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyMicromapToMemoryEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMicromapToMemoryInfoEXT* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyMicromapToMemoryEXT: Invalid device " + "[VUID-vkCopyMicromapToMemoryEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyMicromapToMemoryEXT(device, deferredOperation, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToMicromapEXT( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToMicromapInfoEXT* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyMemoryToMicromapEXT: Invalid device " + "[VUID-vkCopyMemoryToMicromapEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyMemoryToMicromapEXT(device, deferredOperation, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL WriteMicromapsPropertiesEXT( + VkDevice device, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWriteMicromapsPropertiesEXT: Invalid device " + "[VUID-vkWriteMicromapsPropertiesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->WriteMicromapsPropertiesEXT(device, micromapCount, pMicromaps, queryType, dataSize, pData, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMicromapInfoEXT* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyMicromapEXT: Invalid commandBuffer " + "[VUID-vkCmdCopyMicromapEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyMicromapEXT(commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyMicromapToMemoryEXT( + VkCommandBuffer commandBuffer, + const VkCopyMicromapToMemoryInfoEXT* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyMicromapToMemoryEXT: Invalid commandBuffer " + "[VUID-vkCmdCopyMicromapToMemoryEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyMicromapToMemoryEXT(commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToMicromapEXT( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToMicromapInfoEXT* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyMemoryToMicromapEXT: Invalid commandBuffer " + "[VUID-vkCmdCopyMemoryToMicromapEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyMemoryToMicromapEXT(commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdWriteMicromapsPropertiesEXT( + VkCommandBuffer commandBuffer, + uint32_t micromapCount, + const VkMicromapEXT* pMicromaps, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteMicromapsPropertiesEXT: Invalid commandBuffer " + "[VUID-vkCmdWriteMicromapsPropertiesEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteMicromapsPropertiesEXT(commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery); +} + +VKAPI_ATTR void VKAPI_CALL GetDeviceMicromapCompatibilityEXT( + VkDevice device, + const VkMicromapVersionInfoEXT* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceMicromapCompatibilityEXT: Invalid device " + "[VUID-vkGetDeviceMicromapCompatibilityEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceMicromapCompatibilityEXT(device, pVersionInfo, pCompatibility); +} + +VKAPI_ATTR void VKAPI_CALL GetMicromapBuildSizesEXT( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkMicromapBuildInfoEXT* pBuildInfo, + VkMicromapBuildSizesInfoEXT* pSizeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMicromapBuildSizesEXT: Invalid device " + "[VUID-vkGetMicromapBuildSizesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetMicromapBuildSizesEXT(device, buildType, pBuildInfo, pSizeInfo); +} + + +// ---- VK_HUAWEI_cluster_culling_shader extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDrawClusterHUAWEI( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawClusterHUAWEI: Invalid commandBuffer " + "[VUID-vkCmdDrawClusterHUAWEI-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawClusterHUAWEI(commandBuffer, groupCountX, groupCountY, groupCountZ); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawClusterIndirectHUAWEI( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawClusterIndirectHUAWEI: Invalid commandBuffer " + "[VUID-vkCmdDrawClusterIndirectHUAWEI-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawClusterIndirectHUAWEI(commandBuffer, buffer, offset); +} + + +// ---- VK_EXT_pageable_device_local_memory extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL SetDeviceMemoryPriorityEXT( + VkDevice device, + VkDeviceMemory memory, + float priority) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetDeviceMemoryPriorityEXT: Invalid device " + "[VUID-vkSetDeviceMemoryPriorityEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->SetDeviceMemoryPriorityEXT(device, memory, priority); +} + + +// ---- VK_VALVE_descriptor_set_host_mapping extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutHostMappingInfoVALVE( + VkDevice device, + const VkDescriptorSetBindingReferenceVALVE* pBindingReference, + VkDescriptorSetLayoutHostMappingInfoVALVE* pHostMapping) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorSetLayoutHostMappingInfoVALVE: Invalid device " + "[VUID-vkGetDescriptorSetLayoutHostMappingInfoVALVE-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorSetLayoutHostMappingInfoVALVE(device, pBindingReference, pHostMapping); +} + +VKAPI_ATTR void VKAPI_CALL GetDescriptorSetHostMappingVALVE( + VkDevice device, + VkDescriptorSet descriptorSet, + void** ppData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorSetHostMappingVALVE: Invalid device " + "[VUID-vkGetDescriptorSetHostMappingVALVE-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorSetHostMappingVALVE(device, descriptorSet, ppData); +} + + +// ---- VK_NV_copy_memory_indirect extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryIndirectNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyMemoryIndirectNV: Invalid commandBuffer " + "[VUID-vkCmdCopyMemoryIndirectNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyMemoryIndirectNV(commandBuffer, copyBufferAddress, copyCount, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToImageIndirectNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress copyBufferAddress, + uint32_t copyCount, + uint32_t stride, + VkImage dstImage, + VkImageLayout dstImageLayout, + const VkImageSubresourceLayers* pImageSubresources) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyMemoryToImageIndirectNV: Invalid commandBuffer " + "[VUID-vkCmdCopyMemoryToImageIndirectNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyMemoryToImageIndirectNV(commandBuffer, copyBufferAddress, copyCount, stride, dstImage, dstImageLayout, pImageSubresources); +} + + +// ---- VK_NV_memory_decompression extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryNV( + VkCommandBuffer commandBuffer, + uint32_t decompressRegionCount, + const VkDecompressMemoryRegionNV* pDecompressMemoryRegions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDecompressMemoryNV: Invalid commandBuffer " + "[VUID-vkCmdDecompressMemoryNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDecompressMemoryNV(commandBuffer, decompressRegionCount, pDecompressMemoryRegions); +} + +VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryIndirectCountNV( + VkCommandBuffer commandBuffer, + VkDeviceAddress indirectCommandsAddress, + VkDeviceAddress indirectCommandsCountAddress, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDecompressMemoryIndirectCountNV: Invalid commandBuffer " + "[VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDecompressMemoryIndirectCountNV(commandBuffer, indirectCommandsAddress, indirectCommandsCountAddress, stride); +} + + +// ---- VK_NV_device_generated_commands_compute extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetPipelineIndirectMemoryRequirementsNV( + VkDevice device, + const VkComputePipelineCreateInfo* pCreateInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineIndirectMemoryRequirementsNV: Invalid device " + "[VUID-vkGetPipelineIndirectMemoryRequirementsNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetPipelineIndirectMemoryRequirementsNV(device, pCreateInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL CmdUpdatePipelineIndirectBufferNV( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdUpdatePipelineIndirectBufferNV: Invalid commandBuffer " + "[VUID-vkCmdUpdatePipelineIndirectBufferNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdUpdatePipelineIndirectBufferNV(commandBuffer, pipelineBindPoint, pipeline); +} + +VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetPipelineIndirectDeviceAddressNV( + VkDevice device, + const VkPipelineIndirectDeviceAddressInfoNV* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineIndirectDeviceAddressNV: Invalid device " + "[VUID-vkGetPipelineIndirectDeviceAddressNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetPipelineIndirectDeviceAddressNV(device, pInfo); +} + + +// ---- VK_EXT_extended_dynamic_state3 extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClampEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthClampEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthClampEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetPolygonModeEXT( + VkCommandBuffer commandBuffer, + VkPolygonMode polygonMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPolygonModeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetPolygonModeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetPolygonModeEXT(commandBuffer, polygonMode); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetRasterizationSamplesEXT( + VkCommandBuffer commandBuffer, + VkSampleCountFlagBits rasterizationSamples) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRasterizationSamplesEXT: Invalid commandBuffer " + "[VUID-vkCmdSetRasterizationSamplesEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetSampleMaskEXT( + VkCommandBuffer commandBuffer, + VkSampleCountFlagBits samples, + const VkSampleMask* pSampleMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetSampleMaskEXT: Invalid commandBuffer " + "[VUID-vkCmdSetSampleMaskEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetAlphaToCoverageEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToCoverageEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetAlphaToCoverageEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetAlphaToCoverageEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetAlphaToOneEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 alphaToOneEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetAlphaToOneEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetAlphaToOneEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetLogicOpEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 logicOpEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLogicOpEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetLogicOpEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendEnableEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkBool32* pColorBlendEnables) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetColorBlendEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetColorBlendEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendEquationEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendEquationEXT* pColorBlendEquations) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetColorBlendEquationEXT: Invalid commandBuffer " + "[VUID-vkCmdSetColorBlendEquationEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetColorWriteMaskEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorComponentFlags* pColorWriteMasks) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetColorWriteMaskEXT: Invalid commandBuffer " + "[VUID-vkCmdSetColorWriteMaskEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetTessellationDomainOriginEXT( + VkCommandBuffer commandBuffer, + VkTessellationDomainOrigin domainOrigin) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetTessellationDomainOriginEXT: Invalid commandBuffer " + "[VUID-vkCmdSetTessellationDomainOriginEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetRasterizationStreamEXT( + VkCommandBuffer commandBuffer, + uint32_t rasterizationStream) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRasterizationStreamEXT: Invalid commandBuffer " + "[VUID-vkCmdSetRasterizationStreamEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetConservativeRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkConservativeRasterizationModeEXT conservativeRasterizationMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetConservativeRasterizationModeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetConservativeRasterizationModeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetExtraPrimitiveOverestimationSizeEXT( + VkCommandBuffer commandBuffer, + float extraPrimitiveOverestimationSize) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetExtraPrimitiveOverestimationSizeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetExtraPrimitiveOverestimationSizeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthClipEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 depthClipEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthClipEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthClipEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 sampleLocationsEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetSampleLocationsEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetSampleLocationsEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendAdvancedEXT( + VkCommandBuffer commandBuffer, + uint32_t firstAttachment, + uint32_t attachmentCount, + const VkColorBlendAdvancedEXT* pColorBlendAdvanced) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetColorBlendAdvancedEXT: Invalid commandBuffer " + "[VUID-vkCmdSetColorBlendAdvancedEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetProvokingVertexModeEXT( + VkCommandBuffer commandBuffer, + VkProvokingVertexModeEXT provokingVertexMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetProvokingVertexModeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetProvokingVertexModeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetLineRasterizationModeEXT( + VkCommandBuffer commandBuffer, + VkLineRasterizationModeEXT lineRasterizationMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLineRasterizationModeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetLineRasterizationModeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEnableEXT( + VkCommandBuffer commandBuffer, + VkBool32 stippledLineEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLineStippleEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetLineStippleEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthClipNegativeOneToOneEXT( + VkCommandBuffer commandBuffer, + VkBool32 negativeOneToOne) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthClipNegativeOneToOneEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthClipNegativeOneToOneEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 viewportWScalingEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewportWScalingEnableNV: Invalid commandBuffer " + "[VUID-vkCmdSetViewportWScalingEnableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetViewportWScalingEnableNV(commandBuffer, viewportWScalingEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetViewportSwizzleNV( + VkCommandBuffer commandBuffer, + uint32_t firstViewport, + uint32_t viewportCount, + const VkViewportSwizzleNV* pViewportSwizzles) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewportSwizzleNV: Invalid commandBuffer " + "[VUID-vkCmdSetViewportSwizzleNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetViewportSwizzleNV(commandBuffer, firstViewport, viewportCount, pViewportSwizzles); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoverageToColorEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 coverageToColorEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoverageToColorEnableNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoverageToColorEnableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoverageToColorEnableNV(commandBuffer, coverageToColorEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoverageToColorLocationNV( + VkCommandBuffer commandBuffer, + uint32_t coverageToColorLocation) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoverageToColorLocationNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoverageToColorLocationNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoverageToColorLocationNV(commandBuffer, coverageToColorLocation); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationModeNV( + VkCommandBuffer commandBuffer, + VkCoverageModulationModeNV coverageModulationMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoverageModulationModeNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoverageModulationModeNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoverageModulationModeNV(commandBuffer, coverageModulationMode); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationTableEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 coverageModulationTableEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoverageModulationTableEnableNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoverageModulationTableEnableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoverageModulationTableEnableNV(commandBuffer, coverageModulationTableEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationTableNV( + VkCommandBuffer commandBuffer, + uint32_t coverageModulationTableCount, + const float* pCoverageModulationTable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoverageModulationTableNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoverageModulationTableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoverageModulationTableNV(commandBuffer, coverageModulationTableCount, pCoverageModulationTable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetShadingRateImageEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 shadingRateImageEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetShadingRateImageEnableNV: Invalid commandBuffer " + "[VUID-vkCmdSetShadingRateImageEnableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetShadingRateImageEnableNV(commandBuffer, shadingRateImageEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetRepresentativeFragmentTestEnableNV( + VkCommandBuffer commandBuffer, + VkBool32 representativeFragmentTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRepresentativeFragmentTestEnableNV: Invalid commandBuffer " + "[VUID-vkCmdSetRepresentativeFragmentTestEnableNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRepresentativeFragmentTestEnableNV(commandBuffer, representativeFragmentTestEnable); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetCoverageReductionModeNV( + VkCommandBuffer commandBuffer, + VkCoverageReductionModeNV coverageReductionMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCoverageReductionModeNV: Invalid commandBuffer " + "[VUID-vkCmdSetCoverageReductionModeNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCoverageReductionModeNV(commandBuffer, coverageReductionMode); +} + + +// ---- VK_ARM_tensors extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateTensorARM( + VkDevice device, + const VkTensorCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorARM* pTensor) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateTensorARM: Invalid device " + "[VUID-vkCreateTensorARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateTensorARM(device, pCreateInfo, pAllocator, pTensor); +} + +VKAPI_ATTR void VKAPI_CALL DestroyTensorARM( + VkDevice device, + VkTensorARM tensor, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyTensorARM: Invalid device " + "[VUID-vkDestroyTensorARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyTensorARM(device, tensor, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateTensorViewARM( + VkDevice device, + const VkTensorViewCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorViewARM* pView) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateTensorViewARM: Invalid device " + "[VUID-vkCreateTensorViewARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateTensorViewARM(device, pCreateInfo, pAllocator, pView); +} + +VKAPI_ATTR void VKAPI_CALL DestroyTensorViewARM( + VkDevice device, + VkTensorViewARM tensorView, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyTensorViewARM: Invalid device " + "[VUID-vkDestroyTensorViewARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyTensorViewARM(device, tensorView, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL GetTensorMemoryRequirementsARM( + VkDevice device, + const VkTensorMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetTensorMemoryRequirementsARM: Invalid device " + "[VUID-vkGetTensorMemoryRequirementsARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetTensorMemoryRequirementsARM(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR VkResult VKAPI_CALL BindTensorMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindTensorMemoryInfoARM* pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindTensorMemoryARM: Invalid device " + "[VUID-vkBindTensorMemoryARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindTensorMemoryARM(device, bindInfoCount, pBindInfos); +} + +VKAPI_ATTR void VKAPI_CALL GetDeviceTensorMemoryRequirementsARM( + VkDevice device, + const VkDeviceTensorMemoryRequirementsARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceTensorMemoryRequirementsARM: Invalid device " + "[VUID-vkGetDeviceTensorMemoryRequirementsARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceTensorMemoryRequirementsARM(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyTensorARM( + VkCommandBuffer commandBuffer, + const VkCopyTensorInfoARM* pCopyTensorInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyTensorARM: Invalid commandBuffer " + "[VUID-vkCmdCopyTensorARM-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyTensorARM(commandBuffer, pCopyTensorInfo); +} + +VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalTensorPropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, + VkExternalTensorPropertiesARM* pExternalTensorProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceExternalTensorPropertiesARM: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceExternalTensorPropertiesARM-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceExternalTensorPropertiesARM(unwrapped_phys_dev, pExternalTensorInfo, pExternalTensorProperties); +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalTensorPropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, + VkExternalTensorPropertiesARM* pExternalTensorProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceExternalTensorPropertiesARM) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceExternalTensorPropertiesARM"); + abort(); /* Intentionally fail so user can correct issue. */ + } + icd_term->dispatch.GetPhysicalDeviceExternalTensorPropertiesARM(phys_dev_term->phys_dev, pExternalTensorInfo, pExternalTensorProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetTensorOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorCaptureDescriptorDataInfoARM* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetTensorOpaqueCaptureDescriptorDataARM: Invalid device " + "[VUID-vkGetTensorOpaqueCaptureDescriptorDataARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetTensorOpaqueCaptureDescriptorDataARM(device, pInfo, pData); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetTensorViewOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetTensorViewOpaqueCaptureDescriptorDataARM: Invalid device " + "[VUID-vkGetTensorViewOpaqueCaptureDescriptorDataARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetTensorViewOpaqueCaptureDescriptorDataARM(device, pInfo, pData); +} + + +// ---- VK_EXT_shader_module_identifier extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetShaderModuleIdentifierEXT( + VkDevice device, + VkShaderModule shaderModule, + VkShaderModuleIdentifierEXT* pIdentifier) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetShaderModuleIdentifierEXT: Invalid device " + "[VUID-vkGetShaderModuleIdentifierEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetShaderModuleIdentifierEXT(device, shaderModule, pIdentifier); +} + +VKAPI_ATTR void VKAPI_CALL GetShaderModuleCreateInfoIdentifierEXT( + VkDevice device, + const VkShaderModuleCreateInfo* pCreateInfo, + VkShaderModuleIdentifierEXT* pIdentifier) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetShaderModuleCreateInfoIdentifierEXT: Invalid device " + "[VUID-vkGetShaderModuleCreateInfoIdentifierEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetShaderModuleCreateInfoIdentifierEXT(device, pCreateInfo, pIdentifier); +} + + +// ---- VK_NV_optical_flow extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceOpticalFlowImageFormatsNV( + VkPhysicalDevice physicalDevice, + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, + uint32_t* pFormatCount, + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceOpticalFlowImageFormatsNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceOpticalFlowImageFormatsNV(unwrapped_phys_dev, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceOpticalFlowImageFormatsNV( + VkPhysicalDevice physicalDevice, + const VkOpticalFlowImageFormatInfoNV* pOpticalFlowImageFormatInfo, + uint32_t* pFormatCount, + VkOpticalFlowImageFormatPropertiesNV* pImageFormatProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceOpticalFlowImageFormatsNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceOpticalFlowImageFormatsNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceOpticalFlowImageFormatsNV(phys_dev_term->phys_dev, pOpticalFlowImageFormatInfo, pFormatCount, pImageFormatProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateOpticalFlowSessionNV( + VkDevice device, + const VkOpticalFlowSessionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkOpticalFlowSessionNV* pSession) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateOpticalFlowSessionNV: Invalid device " + "[VUID-vkCreateOpticalFlowSessionNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateOpticalFlowSessionNV(device, pCreateInfo, pAllocator, pSession); +} + +VKAPI_ATTR void VKAPI_CALL DestroyOpticalFlowSessionNV( + VkDevice device, + VkOpticalFlowSessionNV session, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyOpticalFlowSessionNV: Invalid device " + "[VUID-vkDestroyOpticalFlowSessionNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyOpticalFlowSessionNV(device, session, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL BindOpticalFlowSessionImageNV( + VkDevice device, + VkOpticalFlowSessionNV session, + VkOpticalFlowSessionBindingPointNV bindingPoint, + VkImageView view, + VkImageLayout layout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindOpticalFlowSessionImageNV: Invalid device " + "[VUID-vkBindOpticalFlowSessionImageNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindOpticalFlowSessionImageNV(device, session, bindingPoint, view, layout); +} + +VKAPI_ATTR void VKAPI_CALL CmdOpticalFlowExecuteNV( + VkCommandBuffer commandBuffer, + VkOpticalFlowSessionNV session, + const VkOpticalFlowExecuteInfoNV* pExecuteInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdOpticalFlowExecuteNV: Invalid commandBuffer " + "[VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdOpticalFlowExecuteNV(commandBuffer, session, pExecuteInfo); +} + + +// ---- VK_AMD_anti_lag extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL AntiLagUpdateAMD( + VkDevice device, + const VkAntiLagDataAMD* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAntiLagUpdateAMD: Invalid device " + "[VUID-vkAntiLagUpdateAMD-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->AntiLagUpdateAMD(device, pData); +} + + +// ---- VK_EXT_shader_object extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateShadersEXT( + VkDevice device, + uint32_t createInfoCount, + const VkShaderCreateInfoEXT* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkShaderEXT* pShaders) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateShadersEXT: Invalid device " + "[VUID-vkCreateShadersEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateShadersEXT(device, createInfoCount, pCreateInfos, pAllocator, pShaders); +} + +VKAPI_ATTR void VKAPI_CALL DestroyShaderEXT( + VkDevice device, + VkShaderEXT shader, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyShaderEXT: Invalid device " + "[VUID-vkDestroyShaderEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyShaderEXT(device, shader, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetShaderBinaryDataEXT( + VkDevice device, + VkShaderEXT shader, + size_t* pDataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetShaderBinaryDataEXT: Invalid device " + "[VUID-vkGetShaderBinaryDataEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetShaderBinaryDataEXT(device, shader, pDataSize, pData); +} + +VKAPI_ATTR void VKAPI_CALL CmdBindShadersEXT( + VkCommandBuffer commandBuffer, + uint32_t stageCount, + const VkShaderStageFlagBits* pStages, + const VkShaderEXT* pShaders) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindShadersEXT: Invalid commandBuffer " + "[VUID-vkCmdBindShadersEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindShadersEXT(commandBuffer, stageCount, pStages, pShaders); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampRangeEXT( + VkCommandBuffer commandBuffer, + VkDepthClampModeEXT depthClampMode, + const VkDepthClampRangeEXT* pDepthClampRange) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthClampRangeEXT: Invalid commandBuffer " + "[VUID-vkCmdSetDepthClampRangeEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange); +} + + +// ---- VK_QCOM_tile_properties extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetFramebufferTilePropertiesQCOM( + VkDevice device, + VkFramebuffer framebuffer, + uint32_t* pPropertiesCount, + VkTilePropertiesQCOM* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetFramebufferTilePropertiesQCOM: Invalid device " + "[VUID-vkGetFramebufferTilePropertiesQCOM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetFramebufferTilePropertiesQCOM(device, framebuffer, pPropertiesCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDynamicRenderingTilePropertiesQCOM( + VkDevice device, + const VkRenderingInfo* pRenderingInfo, + VkTilePropertiesQCOM* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDynamicRenderingTilePropertiesQCOM: Invalid device " + "[VUID-vkGetDynamicRenderingTilePropertiesQCOM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDynamicRenderingTilePropertiesQCOM(device, pRenderingInfo, pProperties); +} + + +// ---- VK_NV_cooperative_vector extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeVectorPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeVectorPropertiesNV* pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceCooperativeVectorPropertiesNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceCooperativeVectorPropertiesNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceCooperativeVectorPropertiesNV(unwrapped_phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceCooperativeVectorPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeVectorPropertiesNV* pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceCooperativeVectorPropertiesNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCooperativeVectorPropertiesNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceCooperativeVectorPropertiesNV(phys_dev_term->phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL ConvertCooperativeVectorMatrixNV( + VkDevice device, + const VkConvertCooperativeVectorMatrixInfoNV* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkConvertCooperativeVectorMatrixNV: Invalid device " + "[VUID-vkConvertCooperativeVectorMatrixNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->ConvertCooperativeVectorMatrixNV(device, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdConvertCooperativeVectorMatrixNV( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkConvertCooperativeVectorMatrixInfoNV* pInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdConvertCooperativeVectorMatrixNV: Invalid commandBuffer " + "[VUID-vkCmdConvertCooperativeVectorMatrixNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdConvertCooperativeVectorMatrixNV(commandBuffer, infoCount, pInfos); +} + + +// ---- VK_NV_low_latency2 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL SetLatencySleepModeNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepModeInfoNV* pSleepModeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetLatencySleepModeNV: Invalid device " + "[VUID-vkSetLatencySleepModeNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SetLatencySleepModeNV(device, swapchain, pSleepModeInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL LatencySleepNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkLatencySleepInfoNV* pSleepInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkLatencySleepNV: Invalid device " + "[VUID-vkLatencySleepNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->LatencySleepNV(device, swapchain, pSleepInfo); +} + +VKAPI_ATTR void VKAPI_CALL SetLatencyMarkerNV( + VkDevice device, + VkSwapchainKHR swapchain, + const VkSetLatencyMarkerInfoNV* pLatencyMarkerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetLatencyMarkerNV: Invalid device " + "[VUID-vkSetLatencyMarkerNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->SetLatencyMarkerNV(device, swapchain, pLatencyMarkerInfo); +} + +VKAPI_ATTR void VKAPI_CALL GetLatencyTimingsNV( + VkDevice device, + VkSwapchainKHR swapchain, + VkGetLatencyMarkerInfoNV* pLatencyMarkerInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetLatencyTimingsNV: Invalid device " + "[VUID-vkGetLatencyTimingsNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetLatencyTimingsNV(device, swapchain, pLatencyMarkerInfo); +} + +VKAPI_ATTR void VKAPI_CALL QueueNotifyOutOfBandNV( + VkQueue queue, + const VkOutOfBandQueueTypeInfoNV* pQueueTypeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueNotifyOutOfBandNV: Invalid queue " + "[VUID-vkQueueNotifyOutOfBandNV-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->QueueNotifyOutOfBandNV(queue, pQueueTypeInfo); +} + + +// ---- VK_ARM_data_graph extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateDataGraphPipelinesARM( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkDataGraphPipelineCreateInfoARM* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDataGraphPipelinesARM: Invalid device " + "[VUID-vkCreateDataGraphPipelinesARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateDataGraphPipelinesARM(device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateDataGraphPipelineSessionARM( + VkDevice device, + const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDataGraphPipelineSessionARM* pSession) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDataGraphPipelineSessionARM: Invalid device " + "[VUID-vkCreateDataGraphPipelineSessionARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateDataGraphPipelineSessionARM(device, pCreateInfo, pAllocator, pSession); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDataGraphPipelineSessionBindPointRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo, + uint32_t* pBindPointRequirementCount, + VkDataGraphPipelineSessionBindPointRequirementARM* pBindPointRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDataGraphPipelineSessionBindPointRequirementsARM: Invalid device " + "[VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDataGraphPipelineSessionBindPointRequirementsARM(device, pInfo, pBindPointRequirementCount, pBindPointRequirements); +} + +VKAPI_ATTR void VKAPI_CALL GetDataGraphPipelineSessionMemoryRequirementsARM( + VkDevice device, + const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDataGraphPipelineSessionMemoryRequirementsARM: Invalid device " + "[VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDataGraphPipelineSessionMemoryRequirementsARM(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR VkResult VKAPI_CALL BindDataGraphPipelineSessionMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindDataGraphPipelineSessionMemoryInfoARM* pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindDataGraphPipelineSessionMemoryARM: Invalid device " + "[VUID-vkBindDataGraphPipelineSessionMemoryARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindDataGraphPipelineSessionMemoryARM(device, bindInfoCount, pBindInfos); +} + +VKAPI_ATTR void VKAPI_CALL DestroyDataGraphPipelineSessionARM( + VkDevice device, + VkDataGraphPipelineSessionARM session, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDataGraphPipelineSessionARM: Invalid device " + "[VUID-vkDestroyDataGraphPipelineSessionARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyDataGraphPipelineSessionARM(device, session, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL CmdDispatchDataGraphARM( + VkCommandBuffer commandBuffer, + VkDataGraphPipelineSessionARM session, + const VkDataGraphPipelineDispatchInfoARM* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchDataGraphARM: Invalid commandBuffer " + "[VUID-vkCmdDispatchDataGraphARM-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchDataGraphARM(commandBuffer, session, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDataGraphPipelineAvailablePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t* pPropertiesCount, + VkDataGraphPipelinePropertyARM* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDataGraphPipelineAvailablePropertiesARM: Invalid device " + "[VUID-vkGetDataGraphPipelineAvailablePropertiesARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDataGraphPipelineAvailablePropertiesARM(device, pPipelineInfo, pPropertiesCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDataGraphPipelinePropertiesARM( + VkDevice device, + const VkDataGraphPipelineInfoARM* pPipelineInfo, + uint32_t propertiesCount, + VkDataGraphPipelinePropertyQueryResultARM* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDataGraphPipelinePropertiesARM: Invalid device " + "[VUID-vkGetDataGraphPipelinePropertiesARM-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDataGraphPipelinePropertiesARM(device, pPipelineInfo, propertiesCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(unwrapped_phys_dev, queueFamilyIndex, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + uint32_t* pQueueFamilyDataGraphPropertyCount, + VkQueueFamilyDataGraphPropertiesARM* pQueueFamilyDataGraphProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(phys_dev_term->phys_dev, queueFamilyIndex, pQueueFamilyDataGraphPropertyCount, pQueueFamilyDataGraphProperties); +} + +VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(unwrapped_phys_dev, pQueueFamilyDataGraphProcessingEngineInfo, pQueueFamilyDataGraphProcessingEngineProperties); +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo, + VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM"); + abort(); /* Intentionally fail so user can correct issue. */ + } + icd_term->dispatch.GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(phys_dev_term->phys_dev, pQueueFamilyDataGraphProcessingEngineInfo, pQueueFamilyDataGraphProcessingEngineProperties); +} + + +// ---- VK_EXT_attachment_feedback_loop_dynamic_state extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdSetAttachmentFeedbackLoopEnableEXT( + VkCommandBuffer commandBuffer, + VkImageAspectFlags aspectMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetAttachmentFeedbackLoopEnableEXT: Invalid commandBuffer " + "[VUID-vkCmdSetAttachmentFeedbackLoopEnableEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask); +} + + +// ---- VK_QNX_external_memory_screen_buffer extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +VKAPI_ATTR VkResult VKAPI_CALL GetScreenBufferPropertiesQNX( + VkDevice device, + const struct _screen_buffer* buffer, + VkScreenBufferPropertiesQNX* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetScreenBufferPropertiesQNX: Invalid device " + "[VUID-vkGetScreenBufferPropertiesQNX-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetScreenBufferPropertiesQNX(device, buffer, pProperties); +} + +#endif // VK_USE_PLATFORM_SCREEN_QNX + +// ---- VK_QCOM_tile_memory_heap extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdBindTileMemoryQCOM( + VkCommandBuffer commandBuffer, + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindTileMemoryQCOM: Invalid commandBuffer " + "[VUID-vkCmdBindTileMemoryQCOM-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindTileMemoryQCOM(commandBuffer, pTileMemoryBindInfo); +} + + +// ---- VK_NV_external_compute_queue extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateExternalComputeQueueNV( + VkDevice device, + const VkExternalComputeQueueCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkExternalComputeQueueNV* pExternalQueue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateExternalComputeQueueNV: Invalid device " + "[VUID-vkCreateExternalComputeQueueNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateExternalComputeQueueNV(device, pCreateInfo, pAllocator, pExternalQueue); +} + +VKAPI_ATTR void VKAPI_CALL DestroyExternalComputeQueueNV( + VkDevice device, + VkExternalComputeQueueNV externalQueue, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyExternalComputeQueueNV: Invalid device " + "[VUID-vkDestroyExternalComputeQueueNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyExternalComputeQueueNV(device, externalQueue, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL GetExternalComputeQueueDataNV( + VkExternalComputeQueueNV externalQueue, + VkExternalComputeQueueDataParamsNV* params, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(externalQueue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetExternalComputeQueueDataNV: Invalid externalQueue " + "[VUID-vkGetExternalComputeQueueDataNV-externalQueue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetExternalComputeQueueDataNV(externalQueue, params, pData); +} + + +// ---- VK_NV_cluster_acceleration_structure extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetClusterAccelerationStructureBuildSizesNV( + VkDevice device, + const VkClusterAccelerationStructureInputInfoNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetClusterAccelerationStructureBuildSizesNV: Invalid device " + "[VUID-vkGetClusterAccelerationStructureBuildSizesNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetClusterAccelerationStructureBuildSizesNV(device, pInfo, pSizeInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBuildClusterAccelerationStructureIndirectNV( + VkCommandBuffer commandBuffer, + const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBuildClusterAccelerationStructureIndirectNV: Invalid commandBuffer " + "[VUID-vkCmdBuildClusterAccelerationStructureIndirectNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBuildClusterAccelerationStructureIndirectNV(commandBuffer, pCommandInfos); +} + + +// ---- VK_NV_partitioned_acceleration_structure extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetPartitionedAccelerationStructuresBuildSizesNV( + VkDevice device, + const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPartitionedAccelerationStructuresBuildSizesNV: Invalid device " + "[VUID-vkGetPartitionedAccelerationStructuresBuildSizesNV-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetPartitionedAccelerationStructuresBuildSizesNV(device, pInfo, pSizeInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdBuildPartitionedAccelerationStructuresNV( + VkCommandBuffer commandBuffer, + const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBuildPartitionedAccelerationStructuresNV: Invalid commandBuffer " + "[VUID-vkCmdBuildPartitionedAccelerationStructuresNV-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBuildPartitionedAccelerationStructuresNV(commandBuffer, pBuildInfo); +} + + +// ---- VK_EXT_device_generated_commands extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsEXT( + VkDevice device, + const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo, + VkMemoryRequirements2* pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetGeneratedCommandsMemoryRequirementsEXT: Invalid device " + "[VUID-vkGetGeneratedCommandsMemoryRequirementsEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetGeneratedCommandsMemoryRequirementsEXT(device, pInfo, pMemoryRequirements); +} + +VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsEXT( + VkCommandBuffer commandBuffer, + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, + VkCommandBuffer stateCommandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPreprocessGeneratedCommandsEXT: Invalid commandBuffer " + "[VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPreprocessGeneratedCommandsEXT(commandBuffer, pGeneratedCommandsInfo, stateCommandBuffer); +} + +VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsEXT( + VkCommandBuffer commandBuffer, + VkBool32 isPreprocessed, + const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdExecuteGeneratedCommandsEXT: Invalid commandBuffer " + "[VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdExecuteGeneratedCommandsEXT(commandBuffer, isPreprocessed, pGeneratedCommandsInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutEXT( + VkDevice device, + const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectCommandsLayoutEXT* pIndirectCommandsLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateIndirectCommandsLayoutEXT: Invalid device " + "[VUID-vkCreateIndirectCommandsLayoutEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateIndirectCommandsLayoutEXT(device, pCreateInfo, pAllocator, pIndirectCommandsLayout); +} + +VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutEXT( + VkDevice device, + VkIndirectCommandsLayoutEXT indirectCommandsLayout, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyIndirectCommandsLayoutEXT: Invalid device " + "[VUID-vkDestroyIndirectCommandsLayoutEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyIndirectCommandsLayoutEXT(device, indirectCommandsLayout, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectExecutionSetEXT( + VkDevice device, + const VkIndirectExecutionSetCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkIndirectExecutionSetEXT* pIndirectExecutionSet) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateIndirectExecutionSetEXT: Invalid device " + "[VUID-vkCreateIndirectExecutionSetEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateIndirectExecutionSetEXT(device, pCreateInfo, pAllocator, pIndirectExecutionSet); +} + +VKAPI_ATTR void VKAPI_CALL DestroyIndirectExecutionSetEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyIndirectExecutionSetEXT: Invalid device " + "[VUID-vkDestroyIndirectExecutionSetEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyIndirectExecutionSetEXT(device, indirectExecutionSet, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL UpdateIndirectExecutionSetPipelineEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetPipelineEXT* pExecutionSetWrites) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUpdateIndirectExecutionSetPipelineEXT: Invalid device " + "[VUID-vkUpdateIndirectExecutionSetPipelineEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->UpdateIndirectExecutionSetPipelineEXT(device, indirectExecutionSet, executionSetWriteCount, pExecutionSetWrites); +} + +VKAPI_ATTR void VKAPI_CALL UpdateIndirectExecutionSetShaderEXT( + VkDevice device, + VkIndirectExecutionSetEXT indirectExecutionSet, + uint32_t executionSetWriteCount, + const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUpdateIndirectExecutionSetShaderEXT: Invalid device " + "[VUID-vkUpdateIndirectExecutionSetShaderEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->UpdateIndirectExecutionSetShaderEXT(device, indirectExecutionSet, executionSetWriteCount, pExecutionSetWrites); +} + + +// ---- VK_OHOS_surface extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_OHOS) +VKAPI_ATTR VkResult VKAPI_CALL CreateSurfaceOHOS( + VkInstance instance, + const VkSurfaceCreateInfoOHOS* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { + struct loader_instance *inst = loader_get_instance(instance); + if (NULL == inst) { + loader_log( + NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSurfaceOHOS: Invalid instance [VUID-vkCreateSurfaceOHOS-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } +#error("Not implemented. Likely needs to be manually generated!"); + return inst->disp->CreateSurfaceOHOS(instance, pCreateInfo, pAllocator, pSurface); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSurfaceOHOS( + VkInstance instance, + const VkSurfaceCreateInfoOHOS* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface) { + struct loader_instance *inst = loader_get_instance(instance); + if (NULL == inst) { + loader_log( + NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSurfaceOHOS: Invalid instance [VUID-vkCreateSurfaceOHOS-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } +#error("Not implemented. Likely needs to be manually generated!"); +} + +#endif // VK_USE_PLATFORM_OHOS + +// ---- VK_NV_cooperative_matrix2 extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(unwrapped_phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV) { + loader_log(icd_term->this_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return icd_term->dispatch.GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(phys_dev_term->phys_dev, pPropertyCount, pProperties); +} + + +// ---- VK_EXT_external_memory_metal extension trampoline/terminators + +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryMetalHandleEXT( + VkDevice device, + const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, + void** pHandle) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryMetalHandleEXT: Invalid device " + "[VUID-vkGetMemoryMetalHandleEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryMetalHandleEXT(device, pGetMetalHandleInfo, pHandle); +} + +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR VkResult VKAPI_CALL GetMemoryMetalHandlePropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHandle, + VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryMetalHandlePropertiesEXT: Invalid device " + "[VUID-vkGetMemoryMetalHandlePropertiesEXT-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryMetalHandlePropertiesEXT(device, handleType, pHandle, pMemoryMetalHandleProperties); +} + +#endif // VK_USE_PLATFORM_METAL_EXT + +// ---- VK_EXT_fragment_density_map_offset extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdEndRendering2EXT( + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoEXT* pRenderingEndInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndRendering2EXT: Invalid commandBuffer " + "[VUID-vkCmdEndRendering2EXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndRendering2EXT(commandBuffer, pRenderingEndInfo); +} + + +// ---- VK_KHR_acceleration_structure extension trampoline/terminators + +VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR( + VkDevice device, + const VkAccelerationStructureCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkAccelerationStructureKHR* pAccelerationStructure) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateAccelerationStructureKHR: Invalid device " + "[VUID-vkCreateAccelerationStructureKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateAccelerationStructureKHR(device, pCreateInfo, pAllocator, pAccelerationStructure); +} + +VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureKHR( + VkDevice device, + VkAccelerationStructureKHR accelerationStructure, + const VkAllocationCallbacks* pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyAccelerationStructureKHR: Invalid device " + "[VUID-vkDestroyAccelerationStructureKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyAccelerationStructureKHR(device, accelerationStructure, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructuresKHR( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBuildAccelerationStructuresKHR: Invalid commandBuffer " + "[VUID-vkCmdBuildAccelerationStructuresKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBuildAccelerationStructuresKHR(commandBuffer, infoCount, pInfos, ppBuildRangeInfos); +} + +VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructuresIndirectKHR( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkDeviceAddress* pIndirectDeviceAddresses, + const uint32_t* pIndirectStrides, + const uint32_t* const* ppMaxPrimitiveCounts) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBuildAccelerationStructuresIndirectKHR: Invalid commandBuffer " + "[VUID-vkCmdBuildAccelerationStructuresIndirectKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBuildAccelerationStructuresIndirectKHR(commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts); +} + +VKAPI_ATTR VkResult VKAPI_CALL BuildAccelerationStructuresKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + uint32_t infoCount, + const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, + const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBuildAccelerationStructuresKHR: Invalid device " + "[VUID-vkBuildAccelerationStructuresKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BuildAccelerationStructuresKHR(device, deferredOperation, infoCount, pInfos, ppBuildRangeInfos); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyAccelerationStructureKHR: Invalid device " + "[VUID-vkCopyAccelerationStructureKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyAccelerationStructureKHR(device, deferredOperation, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureToMemoryKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyAccelerationStructureToMemoryKHR: Invalid device " + "[VUID-vkCopyAccelerationStructureToMemoryKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyAccelerationStructureToMemoryKHR(device, deferredOperation, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToAccelerationStructureKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyMemoryToAccelerationStructureKHR: Invalid device " + "[VUID-vkCopyMemoryToAccelerationStructureKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyMemoryToAccelerationStructureKHR(device, deferredOperation, pInfo); +} + +VKAPI_ATTR VkResult VKAPI_CALL WriteAccelerationStructuresPropertiesKHR( + VkDevice device, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR* pAccelerationStructures, + VkQueryType queryType, + size_t dataSize, + void* pData, + size_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWriteAccelerationStructuresPropertiesKHR: Invalid device " + "[VUID-vkWriteAccelerationStructuresPropertiesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->WriteAccelerationStructuresPropertiesKHR(device, accelerationStructureCount, pAccelerationStructures, queryType, dataSize, pData, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureKHR( + VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyAccelerationStructureKHR: Invalid commandBuffer " + "[VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyAccelerationStructureKHR(commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureToMemoryKHR( + VkCommandBuffer commandBuffer, + const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyAccelerationStructureToMemoryKHR: Invalid commandBuffer " + "[VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyAccelerationStructureToMemoryKHR(commandBuffer, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToAccelerationStructureKHR( + VkCommandBuffer commandBuffer, + const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyMemoryToAccelerationStructureKHR: Invalid commandBuffer " + "[VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyMemoryToAccelerationStructureKHR(commandBuffer, pInfo); +} + +VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetAccelerationStructureDeviceAddressKHR( + VkDevice device, + const VkAccelerationStructureDeviceAddressInfoKHR* pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetAccelerationStructureDeviceAddressKHR: Invalid device " + "[VUID-vkGetAccelerationStructureDeviceAddressKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetAccelerationStructureDeviceAddressKHR(device, pInfo); +} + +VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesKHR( + VkCommandBuffer commandBuffer, + uint32_t accelerationStructureCount, + const VkAccelerationStructureKHR* pAccelerationStructures, + VkQueryType queryType, + VkQueryPool queryPool, + uint32_t firstQuery) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteAccelerationStructuresPropertiesKHR: Invalid commandBuffer " + "[VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteAccelerationStructuresPropertiesKHR(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery); +} + +VKAPI_ATTR void VKAPI_CALL GetDeviceAccelerationStructureCompatibilityKHR( + VkDevice device, + const VkAccelerationStructureVersionInfoKHR* pVersionInfo, + VkAccelerationStructureCompatibilityKHR* pCompatibility) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceAccelerationStructureCompatibilityKHR: Invalid device " + "[VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceAccelerationStructureCompatibilityKHR(device, pVersionInfo, pCompatibility); +} + +VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureBuildSizesKHR( + VkDevice device, + VkAccelerationStructureBuildTypeKHR buildType, + const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, + const uint32_t* pMaxPrimitiveCounts, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetAccelerationStructureBuildSizesKHR: Invalid device " + "[VUID-vkGetAccelerationStructureBuildSizesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetAccelerationStructureBuildSizesKHR(device, buildType, pBuildInfo, pMaxPrimitiveCounts, pSizeInfo); +} + + +// ---- VK_KHR_ray_tracing_pipeline extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdTraceRaysKHR( + VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, + uint32_t width, + uint32_t height, + uint32_t depth) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdTraceRaysKHR: Invalid commandBuffer " + "[VUID-vkCmdTraceRaysKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdTraceRaysKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth); +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesKHR( + VkDevice device, + VkDeferredOperationKHR deferredOperation, + VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkPipeline* pPipelines) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateRayTracingPipelinesKHR: Invalid device " + "[VUID-vkCreateRayTracingPipelinesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateRayTracingPipelinesKHR(device, deferredOperation, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingCaptureReplayShaderGroupHandlesKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t firstGroup, + uint32_t groupCount, + size_t dataSize, + void* pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR: Invalid device " + "[VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetRayTracingCaptureReplayShaderGroupHandlesKHR(device, pipeline, firstGroup, groupCount, dataSize, pData); +} + +VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirectKHR( + VkCommandBuffer commandBuffer, + const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, + const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, + VkDeviceAddress indirectDeviceAddress) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdTraceRaysIndirectKHR: Invalid commandBuffer " + "[VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdTraceRaysIndirectKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress); +} + +VKAPI_ATTR VkDeviceSize VKAPI_CALL GetRayTracingShaderGroupStackSizeKHR( + VkDevice device, + VkPipeline pipeline, + uint32_t group, + VkShaderGroupShaderKHR groupShader) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRayTracingShaderGroupStackSizeKHR: Invalid device " + "[VUID-vkGetRayTracingShaderGroupStackSizeKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetRayTracingShaderGroupStackSizeKHR(device, pipeline, group, groupShader); +} + +VKAPI_ATTR void VKAPI_CALL CmdSetRayTracingPipelineStackSizeKHR( + VkCommandBuffer commandBuffer, + uint32_t pipelineStackSize) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRayTracingPipelineStackSizeKHR: Invalid commandBuffer " + "[VUID-vkCmdSetRayTracingPipelineStackSizeKHR-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRayTracingPipelineStackSizeKHR(commandBuffer, pipelineStackSize); +} + + +// ---- VK_EXT_mesh_shader extension trampoline/terminators + +VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksEXT( + VkCommandBuffer commandBuffer, + uint32_t groupCountX, + uint32_t groupCountY, + uint32_t groupCountZ) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMeshTasksEXT: Invalid commandBuffer " + "[VUID-vkCmdDrawMeshTasksEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMeshTasksEXT(commandBuffer, groupCountX, groupCountY, groupCountZ); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectEXT( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + uint32_t drawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMeshTasksIndirectEXT: Invalid commandBuffer " + "[VUID-vkCmdDrawMeshTasksIndirectEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMeshTasksIndirectEXT(commandBuffer, buffer, offset, drawCount, stride); +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountEXT( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkBuffer countBuffer, + VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawMeshTasksIndirectCountEXT: Invalid commandBuffer " + "[VUID-vkCmdDrawMeshTasksIndirectCountEXT-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawMeshTasksIndirectCountEXT(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +// GPA helpers for extensions +bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) { + *addr = NULL; + + + // ---- VK_KHR_video_queue extension commands + if (!strcmp("vkGetPhysicalDeviceVideoCapabilitiesKHR", name)) { + *addr = (void *)GetPhysicalDeviceVideoCapabilitiesKHR; + return true; + } + if (!strcmp("vkGetPhysicalDeviceVideoFormatPropertiesKHR", name)) { + *addr = (void *)GetPhysicalDeviceVideoFormatPropertiesKHR; + return true; + } + if (!strcmp("vkCreateVideoSessionKHR", name)) { + *addr = (void *)CreateVideoSessionKHR; + return true; + } + if (!strcmp("vkDestroyVideoSessionKHR", name)) { + *addr = (void *)DestroyVideoSessionKHR; + return true; + } + if (!strcmp("vkGetVideoSessionMemoryRequirementsKHR", name)) { + *addr = (void *)GetVideoSessionMemoryRequirementsKHR; + return true; + } + if (!strcmp("vkBindVideoSessionMemoryKHR", name)) { + *addr = (void *)BindVideoSessionMemoryKHR; + return true; + } + if (!strcmp("vkCreateVideoSessionParametersKHR", name)) { + *addr = (void *)CreateVideoSessionParametersKHR; + return true; + } + if (!strcmp("vkUpdateVideoSessionParametersKHR", name)) { + *addr = (void *)UpdateVideoSessionParametersKHR; + return true; + } + if (!strcmp("vkDestroyVideoSessionParametersKHR", name)) { + *addr = (void *)DestroyVideoSessionParametersKHR; + return true; + } + if (!strcmp("vkCmdBeginVideoCodingKHR", name)) { + *addr = (void *)CmdBeginVideoCodingKHR; + return true; + } + if (!strcmp("vkCmdEndVideoCodingKHR", name)) { + *addr = (void *)CmdEndVideoCodingKHR; + return true; + } + if (!strcmp("vkCmdControlVideoCodingKHR", name)) { + *addr = (void *)CmdControlVideoCodingKHR; + return true; + } + + // ---- VK_KHR_video_decode_queue extension commands + if (!strcmp("vkCmdDecodeVideoKHR", name)) { + *addr = (void *)CmdDecodeVideoKHR; + return true; + } + + // ---- VK_KHR_dynamic_rendering extension commands + if (!strcmp("vkCmdBeginRenderingKHR", name)) { + *addr = (void *)CmdBeginRenderingKHR; + return true; + } + if (!strcmp("vkCmdEndRenderingKHR", name)) { + *addr = (void *)CmdEndRenderingKHR; + return true; + } + + // ---- VK_KHR_get_physical_device_properties2 extension commands + if (!strcmp("vkGetPhysicalDeviceFeatures2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceFeatures2 + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceProperties2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceProperties2 + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceFormatProperties2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceFormatProperties2 + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceImageFormatProperties2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceImageFormatProperties2 + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceQueueFamilyProperties2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceQueueFamilyProperties2 + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceMemoryProperties2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceMemoryProperties2 + : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSparseImageFormatProperties2KHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_get_physical_device_properties2 == 1) + ? (void *)vkGetPhysicalDeviceSparseImageFormatProperties2 + : NULL; + return true; + } + + // ---- VK_KHR_device_group extension commands + if (!strcmp("vkGetDeviceGroupPeerMemoryFeaturesKHR", name)) { + *addr = (void *)GetDeviceGroupPeerMemoryFeaturesKHR; + return true; + } + if (!strcmp("vkCmdSetDeviceMaskKHR", name)) { + *addr = (void *)CmdSetDeviceMaskKHR; + return true; + } + if (!strcmp("vkCmdDispatchBaseKHR", name)) { + *addr = (void *)CmdDispatchBaseKHR; + return true; + } + + // ---- VK_KHR_maintenance1 extension commands + if (!strcmp("vkTrimCommandPoolKHR", name)) { + *addr = (void *)TrimCommandPoolKHR; + return true; + } + + // ---- VK_KHR_device_group_creation extension commands + if (!strcmp("vkEnumeratePhysicalDeviceGroupsKHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_device_group_creation == 1) + ? (void *)vkEnumeratePhysicalDeviceGroups + : NULL; + return true; + } + + // ---- VK_KHR_external_memory_capabilities extension commands + if (!strcmp("vkGetPhysicalDeviceExternalBufferPropertiesKHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_external_memory_capabilities == 1) + ? (void *)vkGetPhysicalDeviceExternalBufferProperties + : NULL; + return true; + } + + // ---- VK_KHR_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetMemoryWin32HandleKHR", name)) { + *addr = (void *)GetMemoryWin32HandleKHR; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetMemoryWin32HandlePropertiesKHR", name)) { + *addr = (void *)GetMemoryWin32HandlePropertiesKHR; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_memory_fd extension commands + if (!strcmp("vkGetMemoryFdKHR", name)) { + *addr = (void *)GetMemoryFdKHR; + return true; + } + if (!strcmp("vkGetMemoryFdPropertiesKHR", name)) { + *addr = (void *)GetMemoryFdPropertiesKHR; + return true; + } + + // ---- VK_KHR_external_semaphore_capabilities extension commands + if (!strcmp("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_external_semaphore_capabilities == 1) + ? (void *)vkGetPhysicalDeviceExternalSemaphoreProperties + : NULL; + return true; + } + + // ---- VK_KHR_external_semaphore_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkImportSemaphoreWin32HandleKHR", name)) { + *addr = (void *)ImportSemaphoreWin32HandleKHR; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetSemaphoreWin32HandleKHR", name)) { + *addr = (void *)GetSemaphoreWin32HandleKHR; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_semaphore_fd extension commands + if (!strcmp("vkImportSemaphoreFdKHR", name)) { + *addr = (void *)ImportSemaphoreFdKHR; + return true; + } + if (!strcmp("vkGetSemaphoreFdKHR", name)) { + *addr = (void *)GetSemaphoreFdKHR; + return true; + } + + // ---- VK_KHR_push_descriptor extension commands + if (!strcmp("vkCmdPushDescriptorSetKHR", name)) { + *addr = (void *)CmdPushDescriptorSetKHR; + return true; + } + if (!strcmp("vkCmdPushDescriptorSetWithTemplateKHR", name)) { + *addr = (void *)CmdPushDescriptorSetWithTemplateKHR; + return true; + } + + // ---- VK_KHR_descriptor_update_template extension commands + if (!strcmp("vkCreateDescriptorUpdateTemplateKHR", name)) { + *addr = (void *)CreateDescriptorUpdateTemplateKHR; + return true; + } + if (!strcmp("vkDestroyDescriptorUpdateTemplateKHR", name)) { + *addr = (void *)DestroyDescriptorUpdateTemplateKHR; + return true; + } + if (!strcmp("vkUpdateDescriptorSetWithTemplateKHR", name)) { + *addr = (void *)UpdateDescriptorSetWithTemplateKHR; + return true; + } + + // ---- VK_KHR_create_renderpass2 extension commands + if (!strcmp("vkCreateRenderPass2KHR", name)) { + *addr = (void *)CreateRenderPass2KHR; + return true; + } + if (!strcmp("vkCmdBeginRenderPass2KHR", name)) { + *addr = (void *)CmdBeginRenderPass2KHR; + return true; + } + if (!strcmp("vkCmdNextSubpass2KHR", name)) { + *addr = (void *)CmdNextSubpass2KHR; + return true; + } + if (!strcmp("vkCmdEndRenderPass2KHR", name)) { + *addr = (void *)CmdEndRenderPass2KHR; + return true; + } + + // ---- VK_KHR_shared_presentable_image extension commands + if (!strcmp("vkGetSwapchainStatusKHR", name)) { + *addr = (void *)GetSwapchainStatusKHR; + return true; + } + + // ---- VK_KHR_external_fence_capabilities extension commands + if (!strcmp("vkGetPhysicalDeviceExternalFencePropertiesKHR", name)) { + *addr = (ptr_instance->enabled_extensions.khr_external_fence_capabilities == 1) + ? (void *)vkGetPhysicalDeviceExternalFenceProperties + : NULL; + return true; + } + + // ---- VK_KHR_external_fence_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkImportFenceWin32HandleKHR", name)) { + *addr = (void *)ImportFenceWin32HandleKHR; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetFenceWin32HandleKHR", name)) { + *addr = (void *)GetFenceWin32HandleKHR; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_external_fence_fd extension commands + if (!strcmp("vkImportFenceFdKHR", name)) { + *addr = (void *)ImportFenceFdKHR; + return true; + } + if (!strcmp("vkGetFenceFdKHR", name)) { + *addr = (void *)GetFenceFdKHR; + return true; + } + + // ---- VK_KHR_performance_query extension commands + if (!strcmp("vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR", name)) { + *addr = (void *)EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; + return true; + } + if (!strcmp("vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", name)) { + *addr = (void *)GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; + return true; + } + if (!strcmp("vkAcquireProfilingLockKHR", name)) { + *addr = (void *)AcquireProfilingLockKHR; + return true; + } + if (!strcmp("vkReleaseProfilingLockKHR", name)) { + *addr = (void *)ReleaseProfilingLockKHR; + return true; + } + + // ---- VK_KHR_get_memory_requirements2 extension commands + if (!strcmp("vkGetImageMemoryRequirements2KHR", name)) { + *addr = (void *)GetImageMemoryRequirements2KHR; + return true; + } + if (!strcmp("vkGetBufferMemoryRequirements2KHR", name)) { + *addr = (void *)GetBufferMemoryRequirements2KHR; + return true; + } + if (!strcmp("vkGetImageSparseMemoryRequirements2KHR", name)) { + *addr = (void *)GetImageSparseMemoryRequirements2KHR; + return true; + } + + // ---- VK_KHR_sampler_ycbcr_conversion extension commands + if (!strcmp("vkCreateSamplerYcbcrConversionKHR", name)) { + *addr = (void *)CreateSamplerYcbcrConversionKHR; + return true; + } + if (!strcmp("vkDestroySamplerYcbcrConversionKHR", name)) { + *addr = (void *)DestroySamplerYcbcrConversionKHR; + return true; + } + + // ---- VK_KHR_bind_memory2 extension commands + if (!strcmp("vkBindBufferMemory2KHR", name)) { + *addr = (void *)BindBufferMemory2KHR; + return true; + } + if (!strcmp("vkBindImageMemory2KHR", name)) { + *addr = (void *)BindImageMemory2KHR; + return true; + } + + // ---- VK_KHR_maintenance3 extension commands + if (!strcmp("vkGetDescriptorSetLayoutSupportKHR", name)) { + *addr = (void *)GetDescriptorSetLayoutSupportKHR; + return true; + } + + // ---- VK_KHR_draw_indirect_count extension commands + if (!strcmp("vkCmdDrawIndirectCountKHR", name)) { + *addr = (void *)CmdDrawIndirectCountKHR; + return true; + } + if (!strcmp("vkCmdDrawIndexedIndirectCountKHR", name)) { + *addr = (void *)CmdDrawIndexedIndirectCountKHR; + return true; + } + + // ---- VK_KHR_timeline_semaphore extension commands + if (!strcmp("vkGetSemaphoreCounterValueKHR", name)) { + *addr = (void *)GetSemaphoreCounterValueKHR; + return true; + } + if (!strcmp("vkWaitSemaphoresKHR", name)) { + *addr = (void *)WaitSemaphoresKHR; + return true; + } + if (!strcmp("vkSignalSemaphoreKHR", name)) { + *addr = (void *)SignalSemaphoreKHR; + return true; + } + + // ---- VK_KHR_fragment_shading_rate extension commands + if (!strcmp("vkGetPhysicalDeviceFragmentShadingRatesKHR", name)) { + *addr = (void *)GetPhysicalDeviceFragmentShadingRatesKHR; + return true; + } + if (!strcmp("vkCmdSetFragmentShadingRateKHR", name)) { + *addr = (void *)CmdSetFragmentShadingRateKHR; + return true; + } + + // ---- VK_KHR_dynamic_rendering_local_read extension commands + if (!strcmp("vkCmdSetRenderingAttachmentLocationsKHR", name)) { + *addr = (void *)CmdSetRenderingAttachmentLocationsKHR; + return true; + } + if (!strcmp("vkCmdSetRenderingInputAttachmentIndicesKHR", name)) { + *addr = (void *)CmdSetRenderingInputAttachmentIndicesKHR; + return true; + } + + // ---- VK_KHR_present_wait extension commands + if (!strcmp("vkWaitForPresentKHR", name)) { + *addr = (void *)WaitForPresentKHR; + return true; + } + + // ---- VK_KHR_buffer_device_address extension commands + if (!strcmp("vkGetBufferDeviceAddressKHR", name)) { + *addr = (void *)GetBufferDeviceAddressKHR; + return true; + } + if (!strcmp("vkGetBufferOpaqueCaptureAddressKHR", name)) { + *addr = (void *)GetBufferOpaqueCaptureAddressKHR; + return true; + } + if (!strcmp("vkGetDeviceMemoryOpaqueCaptureAddressKHR", name)) { + *addr = (void *)GetDeviceMemoryOpaqueCaptureAddressKHR; + return true; + } + + // ---- VK_KHR_deferred_host_operations extension commands + if (!strcmp("vkCreateDeferredOperationKHR", name)) { + *addr = (void *)CreateDeferredOperationKHR; + return true; + } + if (!strcmp("vkDestroyDeferredOperationKHR", name)) { + *addr = (void *)DestroyDeferredOperationKHR; + return true; + } + if (!strcmp("vkGetDeferredOperationMaxConcurrencyKHR", name)) { + *addr = (void *)GetDeferredOperationMaxConcurrencyKHR; + return true; + } + if (!strcmp("vkGetDeferredOperationResultKHR", name)) { + *addr = (void *)GetDeferredOperationResultKHR; + return true; + } + if (!strcmp("vkDeferredOperationJoinKHR", name)) { + *addr = (void *)DeferredOperationJoinKHR; + return true; + } + + // ---- VK_KHR_pipeline_executable_properties extension commands + if (!strcmp("vkGetPipelineExecutablePropertiesKHR", name)) { + *addr = (void *)GetPipelineExecutablePropertiesKHR; + return true; + } + if (!strcmp("vkGetPipelineExecutableStatisticsKHR", name)) { + *addr = (void *)GetPipelineExecutableStatisticsKHR; + return true; + } + if (!strcmp("vkGetPipelineExecutableInternalRepresentationsKHR", name)) { + *addr = (void *)GetPipelineExecutableInternalRepresentationsKHR; + return true; + } + + // ---- VK_KHR_map_memory2 extension commands + if (!strcmp("vkMapMemory2KHR", name)) { + *addr = (void *)MapMemory2KHR; + return true; + } + if (!strcmp("vkUnmapMemory2KHR", name)) { + *addr = (void *)UnmapMemory2KHR; + return true; + } + + // ---- VK_KHR_video_encode_queue extension commands + if (!strcmp("vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR", name)) { + *addr = (void *)GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR; + return true; + } + if (!strcmp("vkGetEncodedVideoSessionParametersKHR", name)) { + *addr = (void *)GetEncodedVideoSessionParametersKHR; + return true; + } + if (!strcmp("vkCmdEncodeVideoKHR", name)) { + *addr = (void *)CmdEncodeVideoKHR; + return true; + } + + // ---- VK_KHR_synchronization2 extension commands + if (!strcmp("vkCmdSetEvent2KHR", name)) { + *addr = (void *)CmdSetEvent2KHR; + return true; + } + if (!strcmp("vkCmdResetEvent2KHR", name)) { + *addr = (void *)CmdResetEvent2KHR; + return true; + } + if (!strcmp("vkCmdWaitEvents2KHR", name)) { + *addr = (void *)CmdWaitEvents2KHR; + return true; + } + if (!strcmp("vkCmdPipelineBarrier2KHR", name)) { + *addr = (void *)CmdPipelineBarrier2KHR; + return true; + } + if (!strcmp("vkCmdWriteTimestamp2KHR", name)) { + *addr = (void *)CmdWriteTimestamp2KHR; + return true; + } + if (!strcmp("vkQueueSubmit2KHR", name)) { + *addr = (void *)QueueSubmit2KHR; + return true; + } + + // ---- VK_KHR_copy_commands2 extension commands + if (!strcmp("vkCmdCopyBuffer2KHR", name)) { + *addr = (void *)CmdCopyBuffer2KHR; + return true; + } + if (!strcmp("vkCmdCopyImage2KHR", name)) { + *addr = (void *)CmdCopyImage2KHR; + return true; + } + if (!strcmp("vkCmdCopyBufferToImage2KHR", name)) { + *addr = (void *)CmdCopyBufferToImage2KHR; + return true; + } + if (!strcmp("vkCmdCopyImageToBuffer2KHR", name)) { + *addr = (void *)CmdCopyImageToBuffer2KHR; + return true; + } + if (!strcmp("vkCmdBlitImage2KHR", name)) { + *addr = (void *)CmdBlitImage2KHR; + return true; + } + if (!strcmp("vkCmdResolveImage2KHR", name)) { + *addr = (void *)CmdResolveImage2KHR; + return true; + } + + // ---- VK_KHR_ray_tracing_maintenance1 extension commands + if (!strcmp("vkCmdTraceRaysIndirect2KHR", name)) { + *addr = (void *)CmdTraceRaysIndirect2KHR; + return true; + } + + // ---- VK_KHR_maintenance4 extension commands + if (!strcmp("vkGetDeviceBufferMemoryRequirementsKHR", name)) { + *addr = (void *)GetDeviceBufferMemoryRequirementsKHR; + return true; + } + if (!strcmp("vkGetDeviceImageMemoryRequirementsKHR", name)) { + *addr = (void *)GetDeviceImageMemoryRequirementsKHR; + return true; + } + if (!strcmp("vkGetDeviceImageSparseMemoryRequirementsKHR", name)) { + *addr = (void *)GetDeviceImageSparseMemoryRequirementsKHR; + return true; + } + + // ---- VK_KHR_maintenance5 extension commands + if (!strcmp("vkCmdBindIndexBuffer2KHR", name)) { + *addr = (void *)CmdBindIndexBuffer2KHR; + return true; + } + if (!strcmp("vkGetRenderingAreaGranularityKHR", name)) { + *addr = (void *)GetRenderingAreaGranularityKHR; + return true; + } + if (!strcmp("vkGetDeviceImageSubresourceLayoutKHR", name)) { + *addr = (void *)GetDeviceImageSubresourceLayoutKHR; + return true; + } + if (!strcmp("vkGetImageSubresourceLayout2KHR", name)) { + *addr = (void *)GetImageSubresourceLayout2KHR; + return true; + } + + // ---- VK_KHR_present_wait2 extension commands + if (!strcmp("vkWaitForPresent2KHR", name)) { + *addr = (void *)WaitForPresent2KHR; + return true; + } + + // ---- VK_KHR_pipeline_binary extension commands + if (!strcmp("vkCreatePipelineBinariesKHR", name)) { + *addr = (void *)CreatePipelineBinariesKHR; + return true; + } + if (!strcmp("vkDestroyPipelineBinaryKHR", name)) { + *addr = (void *)DestroyPipelineBinaryKHR; + return true; + } + if (!strcmp("vkGetPipelineKeyKHR", name)) { + *addr = (void *)GetPipelineKeyKHR; + return true; + } + if (!strcmp("vkGetPipelineBinaryDataKHR", name)) { + *addr = (void *)GetPipelineBinaryDataKHR; + return true; + } + if (!strcmp("vkReleaseCapturedPipelineDataKHR", name)) { + *addr = (void *)ReleaseCapturedPipelineDataKHR; + return true; + } + + // ---- VK_KHR_swapchain_maintenance1 extension commands + if (!strcmp("vkReleaseSwapchainImagesKHR", name)) { + *addr = (void *)ReleaseSwapchainImagesKHR; + return true; + } + + // ---- VK_KHR_cooperative_matrix extension commands + if (!strcmp("vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR", name)) { + *addr = (void *)GetPhysicalDeviceCooperativeMatrixPropertiesKHR; + return true; + } + + // ---- VK_KHR_line_rasterization extension commands + if (!strcmp("vkCmdSetLineStippleKHR", name)) { + *addr = (void *)CmdSetLineStippleKHR; + return true; + } + + // ---- VK_KHR_calibrated_timestamps extension commands + if (!strcmp("vkGetPhysicalDeviceCalibrateableTimeDomainsKHR", name)) { + *addr = (void *)GetPhysicalDeviceCalibrateableTimeDomainsKHR; + return true; + } + if (!strcmp("vkGetCalibratedTimestampsKHR", name)) { + *addr = (void *)GetCalibratedTimestampsKHR; + return true; + } + + // ---- VK_KHR_maintenance6 extension commands + if (!strcmp("vkCmdBindDescriptorSets2KHR", name)) { + *addr = (void *)CmdBindDescriptorSets2KHR; + return true; + } + if (!strcmp("vkCmdPushConstants2KHR", name)) { + *addr = (void *)CmdPushConstants2KHR; + return true; + } + if (!strcmp("vkCmdPushDescriptorSet2KHR", name)) { + *addr = (void *)CmdPushDescriptorSet2KHR; + return true; + } + if (!strcmp("vkCmdPushDescriptorSetWithTemplate2KHR", name)) { + *addr = (void *)CmdPushDescriptorSetWithTemplate2KHR; + return true; + } + if (!strcmp("vkCmdSetDescriptorBufferOffsets2EXT", name)) { + *addr = (void *)CmdSetDescriptorBufferOffsets2EXT; + return true; + } + if (!strcmp("vkCmdBindDescriptorBufferEmbeddedSamplers2EXT", name)) { + *addr = (void *)CmdBindDescriptorBufferEmbeddedSamplers2EXT; + return true; + } + + // ---- VK_EXT_debug_marker extension commands + if (!strcmp("vkDebugMarkerSetObjectTagEXT", name)) { + *addr = (void *)DebugMarkerSetObjectTagEXT; + return true; + } + if (!strcmp("vkDebugMarkerSetObjectNameEXT", name)) { + *addr = (void *)DebugMarkerSetObjectNameEXT; + return true; + } + if (!strcmp("vkCmdDebugMarkerBeginEXT", name)) { + *addr = (void *)CmdDebugMarkerBeginEXT; + return true; + } + if (!strcmp("vkCmdDebugMarkerEndEXT", name)) { + *addr = (void *)CmdDebugMarkerEndEXT; + return true; + } + if (!strcmp("vkCmdDebugMarkerInsertEXT", name)) { + *addr = (void *)CmdDebugMarkerInsertEXT; + return true; + } + + // ---- VK_EXT_transform_feedback extension commands + if (!strcmp("vkCmdBindTransformFeedbackBuffersEXT", name)) { + *addr = (void *)CmdBindTransformFeedbackBuffersEXT; + return true; + } + if (!strcmp("vkCmdBeginTransformFeedbackEXT", name)) { + *addr = (void *)CmdBeginTransformFeedbackEXT; + return true; + } + if (!strcmp("vkCmdEndTransformFeedbackEXT", name)) { + *addr = (void *)CmdEndTransformFeedbackEXT; + return true; + } + if (!strcmp("vkCmdBeginQueryIndexedEXT", name)) { + *addr = (void *)CmdBeginQueryIndexedEXT; + return true; + } + if (!strcmp("vkCmdEndQueryIndexedEXT", name)) { + *addr = (void *)CmdEndQueryIndexedEXT; + return true; + } + if (!strcmp("vkCmdDrawIndirectByteCountEXT", name)) { + *addr = (void *)CmdDrawIndirectByteCountEXT; + return true; + } + + // ---- VK_NVX_binary_import extension commands + if (!strcmp("vkCreateCuModuleNVX", name)) { + *addr = (void *)CreateCuModuleNVX; + return true; + } + if (!strcmp("vkCreateCuFunctionNVX", name)) { + *addr = (void *)CreateCuFunctionNVX; + return true; + } + if (!strcmp("vkDestroyCuModuleNVX", name)) { + *addr = (void *)DestroyCuModuleNVX; + return true; + } + if (!strcmp("vkDestroyCuFunctionNVX", name)) { + *addr = (void *)DestroyCuFunctionNVX; + return true; + } + if (!strcmp("vkCmdCuLaunchKernelNVX", name)) { + *addr = (void *)CmdCuLaunchKernelNVX; + return true; + } + + // ---- VK_NVX_image_view_handle extension commands + if (!strcmp("vkGetImageViewHandleNVX", name)) { + *addr = (void *)GetImageViewHandleNVX; + return true; + } + if (!strcmp("vkGetImageViewHandle64NVX", name)) { + *addr = (void *)GetImageViewHandle64NVX; + return true; + } + if (!strcmp("vkGetImageViewAddressNVX", name)) { + *addr = (void *)GetImageViewAddressNVX; + return true; + } + + // ---- VK_AMD_draw_indirect_count extension commands + if (!strcmp("vkCmdDrawIndirectCountAMD", name)) { + *addr = (void *)CmdDrawIndirectCountAMD; + return true; + } + if (!strcmp("vkCmdDrawIndexedIndirectCountAMD", name)) { + *addr = (void *)CmdDrawIndexedIndirectCountAMD; + return true; + } + + // ---- VK_AMD_shader_info extension commands + if (!strcmp("vkGetShaderInfoAMD", name)) { + *addr = (void *)GetShaderInfoAMD; + return true; + } + + // ---- VK_NV_external_memory_capabilities extension commands + if (!strcmp("vkGetPhysicalDeviceExternalImageFormatPropertiesNV", name)) { + *addr = (ptr_instance->enabled_extensions.nv_external_memory_capabilities == 1) + ? (void *)GetPhysicalDeviceExternalImageFormatPropertiesNV + : NULL; + return true; + } + + // ---- VK_NV_external_memory_win32 extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetMemoryWin32HandleNV", name)) { + *addr = (void *)GetMemoryWin32HandleNV; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_conditional_rendering extension commands + if (!strcmp("vkCmdBeginConditionalRenderingEXT", name)) { + *addr = (void *)CmdBeginConditionalRenderingEXT; + return true; + } + if (!strcmp("vkCmdEndConditionalRenderingEXT", name)) { + *addr = (void *)CmdEndConditionalRenderingEXT; + return true; + } + + // ---- VK_NV_clip_space_w_scaling extension commands + if (!strcmp("vkCmdSetViewportWScalingNV", name)) { + *addr = (void *)CmdSetViewportWScalingNV; + return true; + } + + // ---- VK_EXT_direct_mode_display extension commands + if (!strcmp("vkReleaseDisplayEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_direct_mode_display == 1) + ? (void *)ReleaseDisplayEXT + : NULL; + return true; + } + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + if (!strcmp("vkAcquireXlibDisplayEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_acquire_xlib_display == 1) + ? (void *)AcquireXlibDisplayEXT + : NULL; + return true; + } +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + if (!strcmp("vkGetRandROutputDisplayEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_acquire_xlib_display == 1) + ? (void *)GetRandROutputDisplayEXT + : NULL; + return true; + } +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilities2EXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_display_surface_counter == 1) + ? (void *)GetPhysicalDeviceSurfaceCapabilities2EXT + : NULL; + return true; + } + + // ---- VK_EXT_display_control extension commands + if (!strcmp("vkDisplayPowerControlEXT", name)) { + *addr = (void *)DisplayPowerControlEXT; + return true; + } + if (!strcmp("vkRegisterDeviceEventEXT", name)) { + *addr = (void *)RegisterDeviceEventEXT; + return true; + } + if (!strcmp("vkRegisterDisplayEventEXT", name)) { + *addr = (void *)RegisterDisplayEventEXT; + return true; + } + if (!strcmp("vkGetSwapchainCounterEXT", name)) { + *addr = (void *)GetSwapchainCounterEXT; + return true; + } + + // ---- VK_GOOGLE_display_timing extension commands + if (!strcmp("vkGetRefreshCycleDurationGOOGLE", name)) { + *addr = (void *)GetRefreshCycleDurationGOOGLE; + return true; + } + if (!strcmp("vkGetPastPresentationTimingGOOGLE", name)) { + *addr = (void *)GetPastPresentationTimingGOOGLE; + return true; + } + + // ---- VK_EXT_discard_rectangles extension commands + if (!strcmp("vkCmdSetDiscardRectangleEXT", name)) { + *addr = (void *)CmdSetDiscardRectangleEXT; + return true; + } + if (!strcmp("vkCmdSetDiscardRectangleEnableEXT", name)) { + *addr = (void *)CmdSetDiscardRectangleEnableEXT; + return true; + } + if (!strcmp("vkCmdSetDiscardRectangleModeEXT", name)) { + *addr = (void *)CmdSetDiscardRectangleModeEXT; + return true; + } + + // ---- VK_EXT_hdr_metadata extension commands + if (!strcmp("vkSetHdrMetadataEXT", name)) { + *addr = (void *)SetHdrMetadataEXT; + return true; + } + + // ---- VK_EXT_debug_utils extension commands + if (!strcmp("vkSetDebugUtilsObjectNameEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)SetDebugUtilsObjectNameEXT + : NULL; + return true; + } + if (!strcmp("vkSetDebugUtilsObjectTagEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)SetDebugUtilsObjectTagEXT + : NULL; + return true; + } + if (!strcmp("vkQueueBeginDebugUtilsLabelEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)QueueBeginDebugUtilsLabelEXT + : NULL; + return true; + } + if (!strcmp("vkQueueEndDebugUtilsLabelEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)QueueEndDebugUtilsLabelEXT + : NULL; + return true; + } + if (!strcmp("vkQueueInsertDebugUtilsLabelEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)QueueInsertDebugUtilsLabelEXT + : NULL; + return true; + } + if (!strcmp("vkCmdBeginDebugUtilsLabelEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)CmdBeginDebugUtilsLabelEXT + : NULL; + return true; + } + if (!strcmp("vkCmdEndDebugUtilsLabelEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)CmdEndDebugUtilsLabelEXT + : NULL; + return true; + } + if (!strcmp("vkCmdInsertDebugUtilsLabelEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_debug_utils == 1) + ? (void *)CmdInsertDebugUtilsLabelEXT + : NULL; + return true; + } + + // ---- VK_ANDROID_external_memory_android_hardware_buffer extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (!strcmp("vkGetAndroidHardwareBufferPropertiesANDROID", name)) { + *addr = (void *)GetAndroidHardwareBufferPropertiesANDROID; + return true; + } +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (!strcmp("vkGetMemoryAndroidHardwareBufferANDROID", name)) { + *addr = (void *)GetMemoryAndroidHardwareBufferANDROID; + return true; + } +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_AMDX_shader_enqueue extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCreateExecutionGraphPipelinesAMDX", name)) { + *addr = (void *)CreateExecutionGraphPipelinesAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkGetExecutionGraphPipelineScratchSizeAMDX", name)) { + *addr = (void *)GetExecutionGraphPipelineScratchSizeAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkGetExecutionGraphPipelineNodeIndexAMDX", name)) { + *addr = (void *)GetExecutionGraphPipelineNodeIndexAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCmdInitializeGraphScratchMemoryAMDX", name)) { + *addr = (void *)CmdInitializeGraphScratchMemoryAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCmdDispatchGraphAMDX", name)) { + *addr = (void *)CmdDispatchGraphAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCmdDispatchGraphIndirectAMDX", name)) { + *addr = (void *)CmdDispatchGraphIndirectAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCmdDispatchGraphIndirectCountAMDX", name)) { + *addr = (void *)CmdDispatchGraphIndirectCountAMDX; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_EXT_sample_locations extension commands + if (!strcmp("vkCmdSetSampleLocationsEXT", name)) { + *addr = (void *)CmdSetSampleLocationsEXT; + return true; + } + if (!strcmp("vkGetPhysicalDeviceMultisamplePropertiesEXT", name)) { + *addr = (void *)GetPhysicalDeviceMultisamplePropertiesEXT; + return true; + } + + // ---- VK_EXT_image_drm_format_modifier extension commands + if (!strcmp("vkGetImageDrmFormatModifierPropertiesEXT", name)) { + *addr = (void *)GetImageDrmFormatModifierPropertiesEXT; + return true; + } + + // ---- VK_EXT_validation_cache extension commands + if (!strcmp("vkCreateValidationCacheEXT", name)) { + *addr = (void *)CreateValidationCacheEXT; + return true; + } + if (!strcmp("vkDestroyValidationCacheEXT", name)) { + *addr = (void *)DestroyValidationCacheEXT; + return true; + } + if (!strcmp("vkMergeValidationCachesEXT", name)) { + *addr = (void *)MergeValidationCachesEXT; + return true; + } + if (!strcmp("vkGetValidationCacheDataEXT", name)) { + *addr = (void *)GetValidationCacheDataEXT; + return true; + } + + // ---- VK_NV_shading_rate_image extension commands + if (!strcmp("vkCmdBindShadingRateImageNV", name)) { + *addr = (void *)CmdBindShadingRateImageNV; + return true; + } + if (!strcmp("vkCmdSetViewportShadingRatePaletteNV", name)) { + *addr = (void *)CmdSetViewportShadingRatePaletteNV; + return true; + } + if (!strcmp("vkCmdSetCoarseSampleOrderNV", name)) { + *addr = (void *)CmdSetCoarseSampleOrderNV; + return true; + } + + // ---- VK_NV_ray_tracing extension commands + if (!strcmp("vkCreateAccelerationStructureNV", name)) { + *addr = (void *)CreateAccelerationStructureNV; + return true; + } + if (!strcmp("vkDestroyAccelerationStructureNV", name)) { + *addr = (void *)DestroyAccelerationStructureNV; + return true; + } + if (!strcmp("vkGetAccelerationStructureMemoryRequirementsNV", name)) { + *addr = (void *)GetAccelerationStructureMemoryRequirementsNV; + return true; + } + if (!strcmp("vkBindAccelerationStructureMemoryNV", name)) { + *addr = (void *)BindAccelerationStructureMemoryNV; + return true; + } + if (!strcmp("vkCmdBuildAccelerationStructureNV", name)) { + *addr = (void *)CmdBuildAccelerationStructureNV; + return true; + } + if (!strcmp("vkCmdCopyAccelerationStructureNV", name)) { + *addr = (void *)CmdCopyAccelerationStructureNV; + return true; + } + if (!strcmp("vkCmdTraceRaysNV", name)) { + *addr = (void *)CmdTraceRaysNV; + return true; + } + if (!strcmp("vkCreateRayTracingPipelinesNV", name)) { + *addr = (void *)CreateRayTracingPipelinesNV; + return true; + } + + // ---- VK_KHR_ray_tracing_pipeline extension commands + if (!strcmp("vkGetRayTracingShaderGroupHandlesKHR", name)) { + *addr = (void *)GetRayTracingShaderGroupHandlesKHR; + return true; + } + + // ---- VK_NV_ray_tracing extension commands + if (!strcmp("vkGetRayTracingShaderGroupHandlesNV", name)) { + *addr = (void *)GetRayTracingShaderGroupHandlesNV; + return true; + } + if (!strcmp("vkGetAccelerationStructureHandleNV", name)) { + *addr = (void *)GetAccelerationStructureHandleNV; + return true; + } + if (!strcmp("vkCmdWriteAccelerationStructuresPropertiesNV", name)) { + *addr = (void *)CmdWriteAccelerationStructuresPropertiesNV; + return true; + } + if (!strcmp("vkCompileDeferredNV", name)) { + *addr = (void *)CompileDeferredNV; + return true; + } + + // ---- VK_EXT_external_memory_host extension commands + if (!strcmp("vkGetMemoryHostPointerPropertiesEXT", name)) { + *addr = (void *)GetMemoryHostPointerPropertiesEXT; + return true; + } + + // ---- VK_AMD_buffer_marker extension commands + if (!strcmp("vkCmdWriteBufferMarkerAMD", name)) { + *addr = (void *)CmdWriteBufferMarkerAMD; + return true; + } + if (!strcmp("vkCmdWriteBufferMarker2AMD", name)) { + *addr = (void *)CmdWriteBufferMarker2AMD; + return true; + } + + // ---- VK_EXT_calibrated_timestamps extension commands + if (!strcmp("vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", name)) { + *addr = (void *)GetPhysicalDeviceCalibrateableTimeDomainsEXT; + return true; + } + if (!strcmp("vkGetCalibratedTimestampsEXT", name)) { + *addr = (void *)GetCalibratedTimestampsEXT; + return true; + } + + // ---- VK_NV_mesh_shader extension commands + if (!strcmp("vkCmdDrawMeshTasksNV", name)) { + *addr = (void *)CmdDrawMeshTasksNV; + return true; + } + if (!strcmp("vkCmdDrawMeshTasksIndirectNV", name)) { + *addr = (void *)CmdDrawMeshTasksIndirectNV; + return true; + } + if (!strcmp("vkCmdDrawMeshTasksIndirectCountNV", name)) { + *addr = (void *)CmdDrawMeshTasksIndirectCountNV; + return true; + } + + // ---- VK_NV_scissor_exclusive extension commands + if (!strcmp("vkCmdSetExclusiveScissorEnableNV", name)) { + *addr = (void *)CmdSetExclusiveScissorEnableNV; + return true; + } + if (!strcmp("vkCmdSetExclusiveScissorNV", name)) { + *addr = (void *)CmdSetExclusiveScissorNV; + return true; + } + + // ---- VK_NV_device_diagnostic_checkpoints extension commands + if (!strcmp("vkCmdSetCheckpointNV", name)) { + *addr = (void *)CmdSetCheckpointNV; + return true; + } + if (!strcmp("vkGetQueueCheckpointDataNV", name)) { + *addr = (void *)GetQueueCheckpointDataNV; + return true; + } + if (!strcmp("vkGetQueueCheckpointData2NV", name)) { + *addr = (void *)GetQueueCheckpointData2NV; + return true; + } + + // ---- VK_INTEL_performance_query extension commands + if (!strcmp("vkInitializePerformanceApiINTEL", name)) { + *addr = (void *)InitializePerformanceApiINTEL; + return true; + } + if (!strcmp("vkUninitializePerformanceApiINTEL", name)) { + *addr = (void *)UninitializePerformanceApiINTEL; + return true; + } + if (!strcmp("vkCmdSetPerformanceMarkerINTEL", name)) { + *addr = (void *)CmdSetPerformanceMarkerINTEL; + return true; + } + if (!strcmp("vkCmdSetPerformanceStreamMarkerINTEL", name)) { + *addr = (void *)CmdSetPerformanceStreamMarkerINTEL; + return true; + } + if (!strcmp("vkCmdSetPerformanceOverrideINTEL", name)) { + *addr = (void *)CmdSetPerformanceOverrideINTEL; + return true; + } + if (!strcmp("vkAcquirePerformanceConfigurationINTEL", name)) { + *addr = (void *)AcquirePerformanceConfigurationINTEL; + return true; + } + if (!strcmp("vkReleasePerformanceConfigurationINTEL", name)) { + *addr = (void *)ReleasePerformanceConfigurationINTEL; + return true; + } + if (!strcmp("vkQueueSetPerformanceConfigurationINTEL", name)) { + *addr = (void *)QueueSetPerformanceConfigurationINTEL; + return true; + } + if (!strcmp("vkGetPerformanceParameterINTEL", name)) { + *addr = (void *)GetPerformanceParameterINTEL; + return true; + } + + // ---- VK_AMD_display_native_hdr extension commands + if (!strcmp("vkSetLocalDimmingAMD", name)) { + *addr = (void *)SetLocalDimmingAMD; + return true; + } + + // ---- VK_EXT_buffer_device_address extension commands + if (!strcmp("vkGetBufferDeviceAddressEXT", name)) { + *addr = (void *)GetBufferDeviceAddressEXT; + return true; + } + + // ---- VK_EXT_tooling_info extension commands + if (!strcmp("vkGetPhysicalDeviceToolPropertiesEXT", name)) { + *addr = (void *)GetPhysicalDeviceToolPropertiesEXT; + return true; + } + + // ---- VK_NV_cooperative_matrix extension commands + if (!strcmp("vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", name)) { + *addr = (void *)GetPhysicalDeviceCooperativeMatrixPropertiesNV; + return true; + } + + // ---- VK_NV_coverage_reduction_mode extension commands + if (!strcmp("vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", name)) { + *addr = (void *)GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; + return true; + } + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetPhysicalDeviceSurfacePresentModes2EXT", name)) { + *addr = (void *)GetPhysicalDeviceSurfacePresentModes2EXT; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkAcquireFullScreenExclusiveModeEXT", name)) { + *addr = (void *)AcquireFullScreenExclusiveModeEXT; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkReleaseFullScreenExclusiveModeEXT", name)) { + *addr = (void *)ReleaseFullScreenExclusiveModeEXT; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetDeviceGroupSurfacePresentModes2EXT", name)) { + *addr = (void *)GetDeviceGroupSurfacePresentModes2EXT; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_line_rasterization extension commands + if (!strcmp("vkCmdSetLineStippleEXT", name)) { + *addr = (void *)CmdSetLineStippleEXT; + return true; + } + + // ---- VK_EXT_host_query_reset extension commands + if (!strcmp("vkResetQueryPoolEXT", name)) { + *addr = (void *)ResetQueryPoolEXT; + return true; + } + + // ---- VK_EXT_extended_dynamic_state extension commands + if (!strcmp("vkCmdSetCullModeEXT", name)) { + *addr = (void *)CmdSetCullModeEXT; + return true; + } + if (!strcmp("vkCmdSetFrontFaceEXT", name)) { + *addr = (void *)CmdSetFrontFaceEXT; + return true; + } + if (!strcmp("vkCmdSetPrimitiveTopologyEXT", name)) { + *addr = (void *)CmdSetPrimitiveTopologyEXT; + return true; + } + if (!strcmp("vkCmdSetViewportWithCountEXT", name)) { + *addr = (void *)CmdSetViewportWithCountEXT; + return true; + } + if (!strcmp("vkCmdSetScissorWithCountEXT", name)) { + *addr = (void *)CmdSetScissorWithCountEXT; + return true; + } + if (!strcmp("vkCmdBindVertexBuffers2EXT", name)) { + *addr = (void *)CmdBindVertexBuffers2EXT; + return true; + } + if (!strcmp("vkCmdSetDepthTestEnableEXT", name)) { + *addr = (void *)CmdSetDepthTestEnableEXT; + return true; + } + if (!strcmp("vkCmdSetDepthWriteEnableEXT", name)) { + *addr = (void *)CmdSetDepthWriteEnableEXT; + return true; + } + if (!strcmp("vkCmdSetDepthCompareOpEXT", name)) { + *addr = (void *)CmdSetDepthCompareOpEXT; + return true; + } + if (!strcmp("vkCmdSetDepthBoundsTestEnableEXT", name)) { + *addr = (void *)CmdSetDepthBoundsTestEnableEXT; + return true; + } + if (!strcmp("vkCmdSetStencilTestEnableEXT", name)) { + *addr = (void *)CmdSetStencilTestEnableEXT; + return true; + } + if (!strcmp("vkCmdSetStencilOpEXT", name)) { + *addr = (void *)CmdSetStencilOpEXT; + return true; + } + + // ---- VK_EXT_host_image_copy extension commands + if (!strcmp("vkCopyMemoryToImageEXT", name)) { + *addr = (void *)CopyMemoryToImageEXT; + return true; + } + if (!strcmp("vkCopyImageToMemoryEXT", name)) { + *addr = (void *)CopyImageToMemoryEXT; + return true; + } + if (!strcmp("vkCopyImageToImageEXT", name)) { + *addr = (void *)CopyImageToImageEXT; + return true; + } + if (!strcmp("vkTransitionImageLayoutEXT", name)) { + *addr = (void *)TransitionImageLayoutEXT; + return true; + } + if (!strcmp("vkGetImageSubresourceLayout2EXT", name)) { + *addr = (void *)GetImageSubresourceLayout2EXT; + return true; + } + + // ---- VK_EXT_swapchain_maintenance1 extension commands + if (!strcmp("vkReleaseSwapchainImagesEXT", name)) { + *addr = (void *)ReleaseSwapchainImagesEXT; + return true; + } + + // ---- VK_NV_device_generated_commands extension commands + if (!strcmp("vkGetGeneratedCommandsMemoryRequirementsNV", name)) { + *addr = (void *)GetGeneratedCommandsMemoryRequirementsNV; + return true; + } + if (!strcmp("vkCmdPreprocessGeneratedCommandsNV", name)) { + *addr = (void *)CmdPreprocessGeneratedCommandsNV; + return true; + } + if (!strcmp("vkCmdExecuteGeneratedCommandsNV", name)) { + *addr = (void *)CmdExecuteGeneratedCommandsNV; + return true; + } + if (!strcmp("vkCmdBindPipelineShaderGroupNV", name)) { + *addr = (void *)CmdBindPipelineShaderGroupNV; + return true; + } + if (!strcmp("vkCreateIndirectCommandsLayoutNV", name)) { + *addr = (void *)CreateIndirectCommandsLayoutNV; + return true; + } + if (!strcmp("vkDestroyIndirectCommandsLayoutNV", name)) { + *addr = (void *)DestroyIndirectCommandsLayoutNV; + return true; + } + + // ---- VK_EXT_depth_bias_control extension commands + if (!strcmp("vkCmdSetDepthBias2EXT", name)) { + *addr = (void *)CmdSetDepthBias2EXT; + return true; + } + + // ---- VK_EXT_acquire_drm_display extension commands + if (!strcmp("vkAcquireDrmDisplayEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_acquire_drm_display == 1) + ? (void *)AcquireDrmDisplayEXT + : NULL; + return true; + } + if (!strcmp("vkGetDrmDisplayEXT", name)) { + *addr = (ptr_instance->enabled_extensions.ext_acquire_drm_display == 1) + ? (void *)GetDrmDisplayEXT + : NULL; + return true; + } + + // ---- VK_EXT_private_data extension commands + if (!strcmp("vkCreatePrivateDataSlotEXT", name)) { + *addr = (void *)CreatePrivateDataSlotEXT; + return true; + } + if (!strcmp("vkDestroyPrivateDataSlotEXT", name)) { + *addr = (void *)DestroyPrivateDataSlotEXT; + return true; + } + if (!strcmp("vkSetPrivateDataEXT", name)) { + *addr = (void *)SetPrivateDataEXT; + return true; + } + if (!strcmp("vkGetPrivateDataEXT", name)) { + *addr = (void *)GetPrivateDataEXT; + return true; + } + + // ---- VK_NV_cuda_kernel_launch extension commands +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCreateCudaModuleNV", name)) { + *addr = (void *)CreateCudaModuleNV; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkGetCudaModuleCacheNV", name)) { + *addr = (void *)GetCudaModuleCacheNV; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCreateCudaFunctionNV", name)) { + *addr = (void *)CreateCudaFunctionNV; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkDestroyCudaModuleNV", name)) { + *addr = (void *)DestroyCudaModuleNV; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkDestroyCudaFunctionNV", name)) { + *addr = (void *)DestroyCudaFunctionNV; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + if (!strcmp("vkCmdCudaLaunchKernelNV", name)) { + *addr = (void *)CmdCudaLaunchKernelNV; + return true; + } +#endif // VK_ENABLE_BETA_EXTENSIONS + + // ---- VK_QCOM_tile_shading extension commands + if (!strcmp("vkCmdDispatchTileQCOM", name)) { + *addr = (void *)CmdDispatchTileQCOM; + return true; + } + if (!strcmp("vkCmdBeginPerTileExecutionQCOM", name)) { + *addr = (void *)CmdBeginPerTileExecutionQCOM; + return true; + } + if (!strcmp("vkCmdEndPerTileExecutionQCOM", name)) { + *addr = (void *)CmdEndPerTileExecutionQCOM; + return true; + } + + // ---- VK_EXT_metal_objects extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp("vkExportMetalObjectsEXT", name)) { + *addr = (void *)ExportMetalObjectsEXT; + return true; + } +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_descriptor_buffer extension commands + if (!strcmp("vkGetDescriptorSetLayoutSizeEXT", name)) { + *addr = (void *)GetDescriptorSetLayoutSizeEXT; + return true; + } + if (!strcmp("vkGetDescriptorSetLayoutBindingOffsetEXT", name)) { + *addr = (void *)GetDescriptorSetLayoutBindingOffsetEXT; + return true; + } + if (!strcmp("vkGetDescriptorEXT", name)) { + *addr = (void *)GetDescriptorEXT; + return true; + } + if (!strcmp("vkCmdBindDescriptorBuffersEXT", name)) { + *addr = (void *)CmdBindDescriptorBuffersEXT; + return true; + } + if (!strcmp("vkCmdSetDescriptorBufferOffsetsEXT", name)) { + *addr = (void *)CmdSetDescriptorBufferOffsetsEXT; + return true; + } + if (!strcmp("vkCmdBindDescriptorBufferEmbeddedSamplersEXT", name)) { + *addr = (void *)CmdBindDescriptorBufferEmbeddedSamplersEXT; + return true; + } + if (!strcmp("vkGetBufferOpaqueCaptureDescriptorDataEXT", name)) { + *addr = (void *)GetBufferOpaqueCaptureDescriptorDataEXT; + return true; + } + if (!strcmp("vkGetImageOpaqueCaptureDescriptorDataEXT", name)) { + *addr = (void *)GetImageOpaqueCaptureDescriptorDataEXT; + return true; + } + if (!strcmp("vkGetImageViewOpaqueCaptureDescriptorDataEXT", name)) { + *addr = (void *)GetImageViewOpaqueCaptureDescriptorDataEXT; + return true; + } + if (!strcmp("vkGetSamplerOpaqueCaptureDescriptorDataEXT", name)) { + *addr = (void *)GetSamplerOpaqueCaptureDescriptorDataEXT; + return true; + } + if (!strcmp("vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT", name)) { + *addr = (void *)GetAccelerationStructureOpaqueCaptureDescriptorDataEXT; + return true; + } + + // ---- VK_NV_fragment_shading_rate_enums extension commands + if (!strcmp("vkCmdSetFragmentShadingRateEnumNV", name)) { + *addr = (void *)CmdSetFragmentShadingRateEnumNV; + return true; + } + + // ---- VK_EXT_device_fault extension commands + if (!strcmp("vkGetDeviceFaultInfoEXT", name)) { + *addr = (void *)GetDeviceFaultInfoEXT; + return true; + } + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkAcquireWinrtDisplayNV", name)) { + *addr = (void *)AcquireWinrtDisplayNV; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp("vkGetWinrtDisplayNV", name)) { + *addr = (void *)GetWinrtDisplayNV; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_vertex_input_dynamic_state extension commands + if (!strcmp("vkCmdSetVertexInputEXT", name)) { + *addr = (void *)CmdSetVertexInputEXT; + return true; + } + + // ---- VK_FUCHSIA_external_memory extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkGetMemoryZirconHandleFUCHSIA", name)) { + *addr = (void *)GetMemoryZirconHandleFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkGetMemoryZirconHandlePropertiesFUCHSIA", name)) { + *addr = (void *)GetMemoryZirconHandlePropertiesFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_external_semaphore extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkImportSemaphoreZirconHandleFUCHSIA", name)) { + *addr = (void *)ImportSemaphoreZirconHandleFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkGetSemaphoreZirconHandleFUCHSIA", name)) { + *addr = (void *)GetSemaphoreZirconHandleFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_FUCHSIA_buffer_collection extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkCreateBufferCollectionFUCHSIA", name)) { + *addr = (void *)CreateBufferCollectionFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkSetBufferCollectionImageConstraintsFUCHSIA", name)) { + *addr = (void *)SetBufferCollectionImageConstraintsFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkSetBufferCollectionBufferConstraintsFUCHSIA", name)) { + *addr = (void *)SetBufferCollectionBufferConstraintsFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkDestroyBufferCollectionFUCHSIA", name)) { + *addr = (void *)DestroyBufferCollectionFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + if (!strcmp("vkGetBufferCollectionPropertiesFUCHSIA", name)) { + *addr = (void *)GetBufferCollectionPropertiesFUCHSIA; + return true; + } +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_HUAWEI_subpass_shading extension commands + if (!strcmp("vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI", name)) { + *addr = (void *)GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI; + return true; + } + if (!strcmp("vkCmdSubpassShadingHUAWEI", name)) { + *addr = (void *)CmdSubpassShadingHUAWEI; + return true; + } + + // ---- VK_HUAWEI_invocation_mask extension commands + if (!strcmp("vkCmdBindInvocationMaskHUAWEI", name)) { + *addr = (void *)CmdBindInvocationMaskHUAWEI; + return true; + } + + // ---- VK_NV_external_memory_rdma extension commands + if (!strcmp("vkGetMemoryRemoteAddressNV", name)) { + *addr = (void *)GetMemoryRemoteAddressNV; + return true; + } + + // ---- VK_EXT_pipeline_properties extension commands + if (!strcmp("vkGetPipelinePropertiesEXT", name)) { + *addr = (void *)GetPipelinePropertiesEXT; + return true; + } + + // ---- VK_EXT_extended_dynamic_state2 extension commands + if (!strcmp("vkCmdSetPatchControlPointsEXT", name)) { + *addr = (void *)CmdSetPatchControlPointsEXT; + return true; + } + if (!strcmp("vkCmdSetRasterizerDiscardEnableEXT", name)) { + *addr = (void *)CmdSetRasterizerDiscardEnableEXT; + return true; + } + if (!strcmp("vkCmdSetDepthBiasEnableEXT", name)) { + *addr = (void *)CmdSetDepthBiasEnableEXT; + return true; + } + if (!strcmp("vkCmdSetLogicOpEXT", name)) { + *addr = (void *)CmdSetLogicOpEXT; + return true; + } + if (!strcmp("vkCmdSetPrimitiveRestartEnableEXT", name)) { + *addr = (void *)CmdSetPrimitiveRestartEnableEXT; + return true; + } + + // ---- VK_EXT_color_write_enable extension commands + if (!strcmp("vkCmdSetColorWriteEnableEXT", name)) { + *addr = (void *)CmdSetColorWriteEnableEXT; + return true; + } + + // ---- VK_EXT_multi_draw extension commands + if (!strcmp("vkCmdDrawMultiEXT", name)) { + *addr = (void *)CmdDrawMultiEXT; + return true; + } + if (!strcmp("vkCmdDrawMultiIndexedEXT", name)) { + *addr = (void *)CmdDrawMultiIndexedEXT; + return true; + } + + // ---- VK_EXT_opacity_micromap extension commands + if (!strcmp("vkCreateMicromapEXT", name)) { + *addr = (void *)CreateMicromapEXT; + return true; + } + if (!strcmp("vkDestroyMicromapEXT", name)) { + *addr = (void *)DestroyMicromapEXT; + return true; + } + if (!strcmp("vkCmdBuildMicromapsEXT", name)) { + *addr = (void *)CmdBuildMicromapsEXT; + return true; + } + if (!strcmp("vkBuildMicromapsEXT", name)) { + *addr = (void *)BuildMicromapsEXT; + return true; + } + if (!strcmp("vkCopyMicromapEXT", name)) { + *addr = (void *)CopyMicromapEXT; + return true; + } + if (!strcmp("vkCopyMicromapToMemoryEXT", name)) { + *addr = (void *)CopyMicromapToMemoryEXT; + return true; + } + if (!strcmp("vkCopyMemoryToMicromapEXT", name)) { + *addr = (void *)CopyMemoryToMicromapEXT; + return true; + } + if (!strcmp("vkWriteMicromapsPropertiesEXT", name)) { + *addr = (void *)WriteMicromapsPropertiesEXT; + return true; + } + if (!strcmp("vkCmdCopyMicromapEXT", name)) { + *addr = (void *)CmdCopyMicromapEXT; + return true; + } + if (!strcmp("vkCmdCopyMicromapToMemoryEXT", name)) { + *addr = (void *)CmdCopyMicromapToMemoryEXT; + return true; + } + if (!strcmp("vkCmdCopyMemoryToMicromapEXT", name)) { + *addr = (void *)CmdCopyMemoryToMicromapEXT; + return true; + } + if (!strcmp("vkCmdWriteMicromapsPropertiesEXT", name)) { + *addr = (void *)CmdWriteMicromapsPropertiesEXT; + return true; + } + if (!strcmp("vkGetDeviceMicromapCompatibilityEXT", name)) { + *addr = (void *)GetDeviceMicromapCompatibilityEXT; + return true; + } + if (!strcmp("vkGetMicromapBuildSizesEXT", name)) { + *addr = (void *)GetMicromapBuildSizesEXT; + return true; + } + + // ---- VK_HUAWEI_cluster_culling_shader extension commands + if (!strcmp("vkCmdDrawClusterHUAWEI", name)) { + *addr = (void *)CmdDrawClusterHUAWEI; + return true; + } + if (!strcmp("vkCmdDrawClusterIndirectHUAWEI", name)) { + *addr = (void *)CmdDrawClusterIndirectHUAWEI; + return true; + } + + // ---- VK_EXT_pageable_device_local_memory extension commands + if (!strcmp("vkSetDeviceMemoryPriorityEXT", name)) { + *addr = (void *)SetDeviceMemoryPriorityEXT; + return true; + } + + // ---- VK_VALVE_descriptor_set_host_mapping extension commands + if (!strcmp("vkGetDescriptorSetLayoutHostMappingInfoVALVE", name)) { + *addr = (void *)GetDescriptorSetLayoutHostMappingInfoVALVE; + return true; + } + if (!strcmp("vkGetDescriptorSetHostMappingVALVE", name)) { + *addr = (void *)GetDescriptorSetHostMappingVALVE; + return true; + } + + // ---- VK_NV_copy_memory_indirect extension commands + if (!strcmp("vkCmdCopyMemoryIndirectNV", name)) { + *addr = (void *)CmdCopyMemoryIndirectNV; + return true; + } + if (!strcmp("vkCmdCopyMemoryToImageIndirectNV", name)) { + *addr = (void *)CmdCopyMemoryToImageIndirectNV; + return true; + } + + // ---- VK_NV_memory_decompression extension commands + if (!strcmp("vkCmdDecompressMemoryNV", name)) { + *addr = (void *)CmdDecompressMemoryNV; + return true; + } + if (!strcmp("vkCmdDecompressMemoryIndirectCountNV", name)) { + *addr = (void *)CmdDecompressMemoryIndirectCountNV; + return true; + } + + // ---- VK_NV_device_generated_commands_compute extension commands + if (!strcmp("vkGetPipelineIndirectMemoryRequirementsNV", name)) { + *addr = (void *)GetPipelineIndirectMemoryRequirementsNV; + return true; + } + if (!strcmp("vkCmdUpdatePipelineIndirectBufferNV", name)) { + *addr = (void *)CmdUpdatePipelineIndirectBufferNV; + return true; + } + if (!strcmp("vkGetPipelineIndirectDeviceAddressNV", name)) { + *addr = (void *)GetPipelineIndirectDeviceAddressNV; + return true; + } + + // ---- VK_EXT_extended_dynamic_state3 extension commands + if (!strcmp("vkCmdSetDepthClampEnableEXT", name)) { + *addr = (void *)CmdSetDepthClampEnableEXT; + return true; + } + if (!strcmp("vkCmdSetPolygonModeEXT", name)) { + *addr = (void *)CmdSetPolygonModeEXT; + return true; + } + if (!strcmp("vkCmdSetRasterizationSamplesEXT", name)) { + *addr = (void *)CmdSetRasterizationSamplesEXT; + return true; + } + if (!strcmp("vkCmdSetSampleMaskEXT", name)) { + *addr = (void *)CmdSetSampleMaskEXT; + return true; + } + if (!strcmp("vkCmdSetAlphaToCoverageEnableEXT", name)) { + *addr = (void *)CmdSetAlphaToCoverageEnableEXT; + return true; + } + if (!strcmp("vkCmdSetAlphaToOneEnableEXT", name)) { + *addr = (void *)CmdSetAlphaToOneEnableEXT; + return true; + } + if (!strcmp("vkCmdSetLogicOpEnableEXT", name)) { + *addr = (void *)CmdSetLogicOpEnableEXT; + return true; + } + if (!strcmp("vkCmdSetColorBlendEnableEXT", name)) { + *addr = (void *)CmdSetColorBlendEnableEXT; + return true; + } + if (!strcmp("vkCmdSetColorBlendEquationEXT", name)) { + *addr = (void *)CmdSetColorBlendEquationEXT; + return true; + } + if (!strcmp("vkCmdSetColorWriteMaskEXT", name)) { + *addr = (void *)CmdSetColorWriteMaskEXT; + return true; + } + if (!strcmp("vkCmdSetTessellationDomainOriginEXT", name)) { + *addr = (void *)CmdSetTessellationDomainOriginEXT; + return true; + } + if (!strcmp("vkCmdSetRasterizationStreamEXT", name)) { + *addr = (void *)CmdSetRasterizationStreamEXT; + return true; + } + if (!strcmp("vkCmdSetConservativeRasterizationModeEXT", name)) { + *addr = (void *)CmdSetConservativeRasterizationModeEXT; + return true; + } + if (!strcmp("vkCmdSetExtraPrimitiveOverestimationSizeEXT", name)) { + *addr = (void *)CmdSetExtraPrimitiveOverestimationSizeEXT; + return true; + } + if (!strcmp("vkCmdSetDepthClipEnableEXT", name)) { + *addr = (void *)CmdSetDepthClipEnableEXT; + return true; + } + if (!strcmp("vkCmdSetSampleLocationsEnableEXT", name)) { + *addr = (void *)CmdSetSampleLocationsEnableEXT; + return true; + } + if (!strcmp("vkCmdSetColorBlendAdvancedEXT", name)) { + *addr = (void *)CmdSetColorBlendAdvancedEXT; + return true; + } + if (!strcmp("vkCmdSetProvokingVertexModeEXT", name)) { + *addr = (void *)CmdSetProvokingVertexModeEXT; + return true; + } + if (!strcmp("vkCmdSetLineRasterizationModeEXT", name)) { + *addr = (void *)CmdSetLineRasterizationModeEXT; + return true; + } + if (!strcmp("vkCmdSetLineStippleEnableEXT", name)) { + *addr = (void *)CmdSetLineStippleEnableEXT; + return true; + } + if (!strcmp("vkCmdSetDepthClipNegativeOneToOneEXT", name)) { + *addr = (void *)CmdSetDepthClipNegativeOneToOneEXT; + return true; + } + if (!strcmp("vkCmdSetViewportWScalingEnableNV", name)) { + *addr = (void *)CmdSetViewportWScalingEnableNV; + return true; + } + if (!strcmp("vkCmdSetViewportSwizzleNV", name)) { + *addr = (void *)CmdSetViewportSwizzleNV; + return true; + } + if (!strcmp("vkCmdSetCoverageToColorEnableNV", name)) { + *addr = (void *)CmdSetCoverageToColorEnableNV; + return true; + } + if (!strcmp("vkCmdSetCoverageToColorLocationNV", name)) { + *addr = (void *)CmdSetCoverageToColorLocationNV; + return true; + } + if (!strcmp("vkCmdSetCoverageModulationModeNV", name)) { + *addr = (void *)CmdSetCoverageModulationModeNV; + return true; + } + if (!strcmp("vkCmdSetCoverageModulationTableEnableNV", name)) { + *addr = (void *)CmdSetCoverageModulationTableEnableNV; + return true; + } + if (!strcmp("vkCmdSetCoverageModulationTableNV", name)) { + *addr = (void *)CmdSetCoverageModulationTableNV; + return true; + } + if (!strcmp("vkCmdSetShadingRateImageEnableNV", name)) { + *addr = (void *)CmdSetShadingRateImageEnableNV; + return true; + } + if (!strcmp("vkCmdSetRepresentativeFragmentTestEnableNV", name)) { + *addr = (void *)CmdSetRepresentativeFragmentTestEnableNV; + return true; + } + if (!strcmp("vkCmdSetCoverageReductionModeNV", name)) { + *addr = (void *)CmdSetCoverageReductionModeNV; + return true; + } + + // ---- VK_ARM_tensors extension commands + if (!strcmp("vkCreateTensorARM", name)) { + *addr = (void *)CreateTensorARM; + return true; + } + if (!strcmp("vkDestroyTensorARM", name)) { + *addr = (void *)DestroyTensorARM; + return true; + } + if (!strcmp("vkCreateTensorViewARM", name)) { + *addr = (void *)CreateTensorViewARM; + return true; + } + if (!strcmp("vkDestroyTensorViewARM", name)) { + *addr = (void *)DestroyTensorViewARM; + return true; + } + if (!strcmp("vkGetTensorMemoryRequirementsARM", name)) { + *addr = (void *)GetTensorMemoryRequirementsARM; + return true; + } + if (!strcmp("vkBindTensorMemoryARM", name)) { + *addr = (void *)BindTensorMemoryARM; + return true; + } + if (!strcmp("vkGetDeviceTensorMemoryRequirementsARM", name)) { + *addr = (void *)GetDeviceTensorMemoryRequirementsARM; + return true; + } + if (!strcmp("vkCmdCopyTensorARM", name)) { + *addr = (void *)CmdCopyTensorARM; + return true; + } + if (!strcmp("vkGetPhysicalDeviceExternalTensorPropertiesARM", name)) { + *addr = (void *)GetPhysicalDeviceExternalTensorPropertiesARM; + return true; + } + if (!strcmp("vkGetTensorOpaqueCaptureDescriptorDataARM", name)) { + *addr = (void *)GetTensorOpaqueCaptureDescriptorDataARM; + return true; + } + if (!strcmp("vkGetTensorViewOpaqueCaptureDescriptorDataARM", name)) { + *addr = (void *)GetTensorViewOpaqueCaptureDescriptorDataARM; + return true; + } + + // ---- VK_EXT_shader_module_identifier extension commands + if (!strcmp("vkGetShaderModuleIdentifierEXT", name)) { + *addr = (void *)GetShaderModuleIdentifierEXT; + return true; + } + if (!strcmp("vkGetShaderModuleCreateInfoIdentifierEXT", name)) { + *addr = (void *)GetShaderModuleCreateInfoIdentifierEXT; + return true; + } + + // ---- VK_NV_optical_flow extension commands + if (!strcmp("vkGetPhysicalDeviceOpticalFlowImageFormatsNV", name)) { + *addr = (void *)GetPhysicalDeviceOpticalFlowImageFormatsNV; + return true; + } + if (!strcmp("vkCreateOpticalFlowSessionNV", name)) { + *addr = (void *)CreateOpticalFlowSessionNV; + return true; + } + if (!strcmp("vkDestroyOpticalFlowSessionNV", name)) { + *addr = (void *)DestroyOpticalFlowSessionNV; + return true; + } + if (!strcmp("vkBindOpticalFlowSessionImageNV", name)) { + *addr = (void *)BindOpticalFlowSessionImageNV; + return true; + } + if (!strcmp("vkCmdOpticalFlowExecuteNV", name)) { + *addr = (void *)CmdOpticalFlowExecuteNV; + return true; + } + + // ---- VK_AMD_anti_lag extension commands + if (!strcmp("vkAntiLagUpdateAMD", name)) { + *addr = (void *)AntiLagUpdateAMD; + return true; + } + + // ---- VK_EXT_shader_object extension commands + if (!strcmp("vkCreateShadersEXT", name)) { + *addr = (void *)CreateShadersEXT; + return true; + } + if (!strcmp("vkDestroyShaderEXT", name)) { + *addr = (void *)DestroyShaderEXT; + return true; + } + if (!strcmp("vkGetShaderBinaryDataEXT", name)) { + *addr = (void *)GetShaderBinaryDataEXT; + return true; + } + if (!strcmp("vkCmdBindShadersEXT", name)) { + *addr = (void *)CmdBindShadersEXT; + return true; + } + if (!strcmp("vkCmdSetDepthClampRangeEXT", name)) { + *addr = (void *)CmdSetDepthClampRangeEXT; + return true; + } + + // ---- VK_QCOM_tile_properties extension commands + if (!strcmp("vkGetFramebufferTilePropertiesQCOM", name)) { + *addr = (void *)GetFramebufferTilePropertiesQCOM; + return true; + } + if (!strcmp("vkGetDynamicRenderingTilePropertiesQCOM", name)) { + *addr = (void *)GetDynamicRenderingTilePropertiesQCOM; + return true; + } + + // ---- VK_NV_cooperative_vector extension commands + if (!strcmp("vkGetPhysicalDeviceCooperativeVectorPropertiesNV", name)) { + *addr = (void *)GetPhysicalDeviceCooperativeVectorPropertiesNV; + return true; + } + if (!strcmp("vkConvertCooperativeVectorMatrixNV", name)) { + *addr = (void *)ConvertCooperativeVectorMatrixNV; + return true; + } + if (!strcmp("vkCmdConvertCooperativeVectorMatrixNV", name)) { + *addr = (void *)CmdConvertCooperativeVectorMatrixNV; + return true; + } + + // ---- VK_NV_low_latency2 extension commands + if (!strcmp("vkSetLatencySleepModeNV", name)) { + *addr = (void *)SetLatencySleepModeNV; + return true; + } + if (!strcmp("vkLatencySleepNV", name)) { + *addr = (void *)LatencySleepNV; + return true; + } + if (!strcmp("vkSetLatencyMarkerNV", name)) { + *addr = (void *)SetLatencyMarkerNV; + return true; + } + if (!strcmp("vkGetLatencyTimingsNV", name)) { + *addr = (void *)GetLatencyTimingsNV; + return true; + } + if (!strcmp("vkQueueNotifyOutOfBandNV", name)) { + *addr = (void *)QueueNotifyOutOfBandNV; + return true; + } + + // ---- VK_ARM_data_graph extension commands + if (!strcmp("vkCreateDataGraphPipelinesARM", name)) { + *addr = (void *)CreateDataGraphPipelinesARM; + return true; + } + if (!strcmp("vkCreateDataGraphPipelineSessionARM", name)) { + *addr = (void *)CreateDataGraphPipelineSessionARM; + return true; + } + if (!strcmp("vkGetDataGraphPipelineSessionBindPointRequirementsARM", name)) { + *addr = (void *)GetDataGraphPipelineSessionBindPointRequirementsARM; + return true; + } + if (!strcmp("vkGetDataGraphPipelineSessionMemoryRequirementsARM", name)) { + *addr = (void *)GetDataGraphPipelineSessionMemoryRequirementsARM; + return true; + } + if (!strcmp("vkBindDataGraphPipelineSessionMemoryARM", name)) { + *addr = (void *)BindDataGraphPipelineSessionMemoryARM; + return true; + } + if (!strcmp("vkDestroyDataGraphPipelineSessionARM", name)) { + *addr = (void *)DestroyDataGraphPipelineSessionARM; + return true; + } + if (!strcmp("vkCmdDispatchDataGraphARM", name)) { + *addr = (void *)CmdDispatchDataGraphARM; + return true; + } + if (!strcmp("vkGetDataGraphPipelineAvailablePropertiesARM", name)) { + *addr = (void *)GetDataGraphPipelineAvailablePropertiesARM; + return true; + } + if (!strcmp("vkGetDataGraphPipelinePropertiesARM", name)) { + *addr = (void *)GetDataGraphPipelinePropertiesARM; + return true; + } + if (!strcmp("vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM", name)) { + *addr = (void *)GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM; + return true; + } + if (!strcmp("vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM", name)) { + *addr = (void *)GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM; + return true; + } + + // ---- VK_EXT_attachment_feedback_loop_dynamic_state extension commands + if (!strcmp("vkCmdSetAttachmentFeedbackLoopEnableEXT", name)) { + *addr = (void *)CmdSetAttachmentFeedbackLoopEnableEXT; + return true; + } + + // ---- VK_QNX_external_memory_screen_buffer extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + if (!strcmp("vkGetScreenBufferPropertiesQNX", name)) { + *addr = (void *)GetScreenBufferPropertiesQNX; + return true; + } +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_QCOM_tile_memory_heap extension commands + if (!strcmp("vkCmdBindTileMemoryQCOM", name)) { + *addr = (void *)CmdBindTileMemoryQCOM; + return true; + } + + // ---- VK_NV_external_compute_queue extension commands + if (!strcmp("vkCreateExternalComputeQueueNV", name)) { + *addr = (void *)CreateExternalComputeQueueNV; + return true; + } + if (!strcmp("vkDestroyExternalComputeQueueNV", name)) { + *addr = (void *)DestroyExternalComputeQueueNV; + return true; + } + if (!strcmp("vkGetExternalComputeQueueDataNV", name)) { + *addr = (void *)GetExternalComputeQueueDataNV; + return true; + } + + // ---- VK_NV_cluster_acceleration_structure extension commands + if (!strcmp("vkGetClusterAccelerationStructureBuildSizesNV", name)) { + *addr = (void *)GetClusterAccelerationStructureBuildSizesNV; + return true; + } + if (!strcmp("vkCmdBuildClusterAccelerationStructureIndirectNV", name)) { + *addr = (void *)CmdBuildClusterAccelerationStructureIndirectNV; + return true; + } + + // ---- VK_NV_partitioned_acceleration_structure extension commands + if (!strcmp("vkGetPartitionedAccelerationStructuresBuildSizesNV", name)) { + *addr = (void *)GetPartitionedAccelerationStructuresBuildSizesNV; + return true; + } + if (!strcmp("vkCmdBuildPartitionedAccelerationStructuresNV", name)) { + *addr = (void *)CmdBuildPartitionedAccelerationStructuresNV; + return true; + } + + // ---- VK_EXT_device_generated_commands extension commands + if (!strcmp("vkGetGeneratedCommandsMemoryRequirementsEXT", name)) { + *addr = (void *)GetGeneratedCommandsMemoryRequirementsEXT; + return true; + } + if (!strcmp("vkCmdPreprocessGeneratedCommandsEXT", name)) { + *addr = (void *)CmdPreprocessGeneratedCommandsEXT; + return true; + } + if (!strcmp("vkCmdExecuteGeneratedCommandsEXT", name)) { + *addr = (void *)CmdExecuteGeneratedCommandsEXT; + return true; + } + if (!strcmp("vkCreateIndirectCommandsLayoutEXT", name)) { + *addr = (void *)CreateIndirectCommandsLayoutEXT; + return true; + } + if (!strcmp("vkDestroyIndirectCommandsLayoutEXT", name)) { + *addr = (void *)DestroyIndirectCommandsLayoutEXT; + return true; + } + if (!strcmp("vkCreateIndirectExecutionSetEXT", name)) { + *addr = (void *)CreateIndirectExecutionSetEXT; + return true; + } + if (!strcmp("vkDestroyIndirectExecutionSetEXT", name)) { + *addr = (void *)DestroyIndirectExecutionSetEXT; + return true; + } + if (!strcmp("vkUpdateIndirectExecutionSetPipelineEXT", name)) { + *addr = (void *)UpdateIndirectExecutionSetPipelineEXT; + return true; + } + if (!strcmp("vkUpdateIndirectExecutionSetShaderEXT", name)) { + *addr = (void *)UpdateIndirectExecutionSetShaderEXT; + return true; + } + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + if (!strcmp("vkCreateSurfaceOHOS", name)) { + *addr = (ptr_instance->enabled_extensions.ohos_surface == 1) + ? (void *)CreateSurfaceOHOS + : NULL; + return true; + } +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + if (!strcmp("vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV", name)) { + *addr = (void *)GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV; + return true; + } + + // ---- VK_EXT_external_memory_metal extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp("vkGetMemoryMetalHandleEXT", name)) { + *addr = (void *)GetMemoryMetalHandleEXT; + return true; + } +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp("vkGetMemoryMetalHandlePropertiesEXT", name)) { + *addr = (void *)GetMemoryMetalHandlePropertiesEXT; + return true; + } +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_fragment_density_map_offset extension commands + if (!strcmp("vkCmdEndRendering2EXT", name)) { + *addr = (void *)CmdEndRendering2EXT; + return true; + } + + // ---- VK_KHR_acceleration_structure extension commands + if (!strcmp("vkCreateAccelerationStructureKHR", name)) { + *addr = (void *)CreateAccelerationStructureKHR; + return true; + } + if (!strcmp("vkDestroyAccelerationStructureKHR", name)) { + *addr = (void *)DestroyAccelerationStructureKHR; + return true; + } + if (!strcmp("vkCmdBuildAccelerationStructuresKHR", name)) { + *addr = (void *)CmdBuildAccelerationStructuresKHR; + return true; + } + if (!strcmp("vkCmdBuildAccelerationStructuresIndirectKHR", name)) { + *addr = (void *)CmdBuildAccelerationStructuresIndirectKHR; + return true; + } + if (!strcmp("vkBuildAccelerationStructuresKHR", name)) { + *addr = (void *)BuildAccelerationStructuresKHR; + return true; + } + if (!strcmp("vkCopyAccelerationStructureKHR", name)) { + *addr = (void *)CopyAccelerationStructureKHR; + return true; + } + if (!strcmp("vkCopyAccelerationStructureToMemoryKHR", name)) { + *addr = (void *)CopyAccelerationStructureToMemoryKHR; + return true; + } + if (!strcmp("vkCopyMemoryToAccelerationStructureKHR", name)) { + *addr = (void *)CopyMemoryToAccelerationStructureKHR; + return true; + } + if (!strcmp("vkWriteAccelerationStructuresPropertiesKHR", name)) { + *addr = (void *)WriteAccelerationStructuresPropertiesKHR; + return true; + } + if (!strcmp("vkCmdCopyAccelerationStructureKHR", name)) { + *addr = (void *)CmdCopyAccelerationStructureKHR; + return true; + } + if (!strcmp("vkCmdCopyAccelerationStructureToMemoryKHR", name)) { + *addr = (void *)CmdCopyAccelerationStructureToMemoryKHR; + return true; + } + if (!strcmp("vkCmdCopyMemoryToAccelerationStructureKHR", name)) { + *addr = (void *)CmdCopyMemoryToAccelerationStructureKHR; + return true; + } + if (!strcmp("vkGetAccelerationStructureDeviceAddressKHR", name)) { + *addr = (void *)GetAccelerationStructureDeviceAddressKHR; + return true; + } + if (!strcmp("vkCmdWriteAccelerationStructuresPropertiesKHR", name)) { + *addr = (void *)CmdWriteAccelerationStructuresPropertiesKHR; + return true; + } + if (!strcmp("vkGetDeviceAccelerationStructureCompatibilityKHR", name)) { + *addr = (void *)GetDeviceAccelerationStructureCompatibilityKHR; + return true; + } + if (!strcmp("vkGetAccelerationStructureBuildSizesKHR", name)) { + *addr = (void *)GetAccelerationStructureBuildSizesKHR; + return true; + } + + // ---- VK_KHR_ray_tracing_pipeline extension commands + if (!strcmp("vkCmdTraceRaysKHR", name)) { + *addr = (void *)CmdTraceRaysKHR; + return true; + } + if (!strcmp("vkCreateRayTracingPipelinesKHR", name)) { + *addr = (void *)CreateRayTracingPipelinesKHR; + return true; + } + if (!strcmp("vkGetRayTracingCaptureReplayShaderGroupHandlesKHR", name)) { + *addr = (void *)GetRayTracingCaptureReplayShaderGroupHandlesKHR; + return true; + } + if (!strcmp("vkCmdTraceRaysIndirectKHR", name)) { + *addr = (void *)CmdTraceRaysIndirectKHR; + return true; + } + if (!strcmp("vkGetRayTracingShaderGroupStackSizeKHR", name)) { + *addr = (void *)GetRayTracingShaderGroupStackSizeKHR; + return true; + } + if (!strcmp("vkCmdSetRayTracingPipelineStackSizeKHR", name)) { + *addr = (void *)CmdSetRayTracingPipelineStackSizeKHR; + return true; + } + + // ---- VK_EXT_mesh_shader extension commands + if (!strcmp("vkCmdDrawMeshTasksEXT", name)) { + *addr = (void *)CmdDrawMeshTasksEXT; + return true; + } + if (!strcmp("vkCmdDrawMeshTasksIndirectEXT", name)) { + *addr = (void *)CmdDrawMeshTasksIndirectEXT; + return true; + } + if (!strcmp("vkCmdDrawMeshTasksIndirectCountEXT", name)) { + *addr = (void *)CmdDrawMeshTasksIndirectCountEXT; + return true; + } + return false; +} + +// Used to keep track of all enabled instance extensions +void fill_out_enabled_instance_extensions(uint32_t extension_count, const char *const * extension_list, struct loader_instance_extension_enable_list* enables) { + for (uint32_t i = 0; i < extension_count; i++) { + + // ---- VK_KHR_surface extension commands + if (0 == strcmp(extension_list[i], VK_KHR_SURFACE_EXTENSION_NAME)) { enables->khr_surface = 1; } + + // ---- VK_KHR_display extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_DISPLAY_EXTENSION_NAME)) { enables->khr_display = 1; } + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + else if (0 == strcmp(extension_list[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME)) { enables->khr_xlib_surface = 1; } +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + else if (0 == strcmp(extension_list[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME)) { enables->khr_xcb_surface = 1; } +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + else if (0 == strcmp(extension_list[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME)) { enables->khr_wayland_surface = 1; } +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + else if (0 == strcmp(extension_list[i], VK_KHR_ANDROID_SURFACE_EXTENSION_NAME)) { enables->khr_android_surface = 1; } +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + else if (0 == strcmp(extension_list[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME)) { enables->khr_win32_surface = 1; } +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_get_physical_device_properties2 extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { enables->khr_get_physical_device_properties2 = 1; } + + // ---- VK_KHR_device_group_creation extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME)) { enables->khr_device_group_creation = 1; } + + // ---- VK_KHR_external_memory_capabilities extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME)) { enables->khr_external_memory_capabilities = 1; } + + // ---- VK_KHR_external_semaphore_capabilities extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME)) { enables->khr_external_semaphore_capabilities = 1; } + + // ---- VK_KHR_external_fence_capabilities extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME)) { enables->khr_external_fence_capabilities = 1; } + + // ---- VK_KHR_get_surface_capabilities2 extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME)) { enables->khr_get_surface_capabilities2 = 1; } + + // ---- VK_KHR_get_display_properties2 extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME)) { enables->khr_get_display_properties2 = 1; } + + // ---- VK_KHR_surface_protected_capabilities extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME)) { enables->khr_surface_protected_capabilities = 1; } + + // ---- VK_KHR_portability_enumeration extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)) { enables->khr_portability_enumeration = 1; } + + // ---- VK_KHR_surface_maintenance1 extension commands + else if (0 == strcmp(extension_list[i], VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME)) { enables->khr_surface_maintenance1 = 1; } + + // ---- VK_EXT_debug_report extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) { enables->ext_debug_report = 1; } + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + else if (0 == strcmp(extension_list[i], VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME)) { enables->ggp_stream_descriptor_surface = 1; } +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + else if (0 == strcmp(extension_list[i], VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME)) { enables->nv_external_memory_capabilities = 1; } + + // ---- VK_EXT_validation_flags extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME)) { enables->ext_validation_flags = 1; } + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + else if (0 == strcmp(extension_list[i], VK_NN_VI_SURFACE_EXTENSION_NAME)) { enables->nn_vi_surface = 1; } +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)) { enables->ext_direct_mode_display = 1; } + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + else if (0 == strcmp(extension_list[i], VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME)) { enables->ext_acquire_xlib_display = 1; } +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)) { enables->ext_display_surface_counter = 1; } + + // ---- VK_EXT_swapchain_colorspace extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME)) { enables->ext_swapchain_colorspace = 1; } + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + else if (0 == strcmp(extension_list[i], VK_MVK_IOS_SURFACE_EXTENSION_NAME)) { enables->mvk_ios_surface = 1; } +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + else if (0 == strcmp(extension_list[i], VK_MVK_MACOS_SURFACE_EXTENSION_NAME)) { enables->mvk_macos_surface = 1; } +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { enables->ext_debug_utils = 1; } + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + else if (0 == strcmp(extension_list[i], VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME)) { enables->fuchsia_imagepipe_surface = 1; } +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + else if (0 == strcmp(extension_list[i], VK_EXT_METAL_SURFACE_EXTENSION_NAME)) { enables->ext_metal_surface = 1; } +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_validation_features extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME)) { enables->ext_validation_features = 1; } + + // ---- VK_EXT_headless_surface extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME)) { enables->ext_headless_surface = 1; } + + // ---- VK_EXT_surface_maintenance1 extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME)) { enables->ext_surface_maintenance1 = 1; } + + // ---- VK_EXT_acquire_drm_display extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME)) { enables->ext_acquire_drm_display = 1; } + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + else if (0 == strcmp(extension_list[i], VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME)) { enables->ext_directfb_surface = 1; } +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + else if (0 == strcmp(extension_list[i], VK_QNX_SCREEN_SURFACE_EXTENSION_NAME)) { enables->qnx_screen_surface = 1; } +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_GOOGLE_surfaceless_query extension commands + else if (0 == strcmp(extension_list[i], VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME)) { enables->google_surfaceless_query = 1; } + + // ---- VK_LUNARG_direct_driver_loading extension commands + else if (0 == strcmp(extension_list[i], VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)) { enables->lunarg_direct_driver_loading = 1; } + + // ---- VK_EXT_layer_settings extension commands + else if (0 == strcmp(extension_list[i], VK_EXT_LAYER_SETTINGS_EXTENSION_NAME)) { enables->ext_layer_settings = 1; } + + // ---- VK_NV_display_stereo extension commands + else if (0 == strcmp(extension_list[i], VK_NV_DISPLAY_STEREO_EXTENSION_NAME)) { enables->nv_display_stereo = 1; } + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + else if (0 == strcmp(extension_list[i], VK_OHOS_SURFACE_EXTENSION_NAME)) { enables->ohos_surface = 1; } +#endif // VK_USE_PLATFORM_OHOS + } +} + +// Some device commands still need a terminator because the loader needs to unwrap something about them. +// In many cases, the item needing unwrapping is a VkPhysicalDevice or VkSurfaceKHR object. But there may be other items +// in the future. +PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *name, bool* found_name) { + *found_name = false; + if (!name || name[0] != 'v' || name[1] != 'k') { + return NULL; + } + name += 2; + // ---- VK_KHR_swapchain extension commands + if (!strcmp(name, "CreateSwapchainKHR")) { + *found_name = true; + return dev->driver_extensions.khr_swapchain_enabled ? + (PFN_vkVoidFunction)terminator_CreateSwapchainKHR : NULL; + } + if (!strcmp(name, "GetDeviceGroupSurfacePresentModesKHR")) { + *found_name = true; + return dev->driver_extensions.khr_swapchain_enabled || dev->driver_extensions.khr_device_group_enabled ? + (PFN_vkVoidFunction)terminator_GetDeviceGroupSurfacePresentModesKHR : NULL; + } + // ---- VK_KHR_display_swapchain extension commands + if (!strcmp(name, "CreateSharedSwapchainsKHR")) { + *found_name = true; + return dev->driver_extensions.khr_display_swapchain_enabled ? + (PFN_vkVoidFunction)terminator_CreateSharedSwapchainsKHR : NULL; + } + // ---- VK_EXT_debug_marker extension commands + if (!strcmp(name, "DebugMarkerSetObjectTagEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_marker_enabled ? + (PFN_vkVoidFunction)terminator_DebugMarkerSetObjectTagEXT : NULL; + } + if (!strcmp(name, "DebugMarkerSetObjectNameEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_marker_enabled ? + (PFN_vkVoidFunction)terminator_DebugMarkerSetObjectNameEXT : NULL; + } + // ---- VK_EXT_debug_utils extension commands + if (!strcmp(name, "SetDebugUtilsObjectNameEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_SetDebugUtilsObjectNameEXT : NULL; + } + if (!strcmp(name, "SetDebugUtilsObjectTagEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_SetDebugUtilsObjectTagEXT : NULL; + } + if (!strcmp(name, "QueueBeginDebugUtilsLabelEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_QueueBeginDebugUtilsLabelEXT : NULL; + } + if (!strcmp(name, "QueueEndDebugUtilsLabelEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_QueueEndDebugUtilsLabelEXT : NULL; + } + if (!strcmp(name, "QueueInsertDebugUtilsLabelEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_QueueInsertDebugUtilsLabelEXT : NULL; + } + if (!strcmp(name, "CmdBeginDebugUtilsLabelEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_CmdBeginDebugUtilsLabelEXT : NULL; + } + if (!strcmp(name, "CmdEndDebugUtilsLabelEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_CmdEndDebugUtilsLabelEXT : NULL; + } + if (!strcmp(name, "CmdInsertDebugUtilsLabelEXT")) { + *found_name = true; + return dev->driver_extensions.ext_debug_utils_enabled ? + (PFN_vkVoidFunction)terminator_CmdInsertDebugUtilsLabelEXT : NULL; + } +#if defined(VK_USE_PLATFORM_WIN32_KHR) + // ---- VK_EXT_full_screen_exclusive extension commands + if (!strcmp(name, "GetDeviceGroupSurfacePresentModes2EXT")) { + *found_name = true; + return dev->driver_extensions.ext_full_screen_exclusive_enabled ? + (PFN_vkVoidFunction)terminator_GetDeviceGroupSurfacePresentModes2EXT : NULL; + } +#endif // VK_USE_PLATFORM_WIN32_KHR + return NULL; +} + +// This table contains the loader's instance dispatch table, which contains +// default functions if no instance layers are activated. This contains +// pointers to "terminator functions". +const VkLayerInstanceDispatchTable instance_disp = { + + // ---- Core Vulkan 1.0 commands + .DestroyInstance = terminator_DestroyInstance, + .EnumeratePhysicalDevices = terminator_EnumeratePhysicalDevices, + .GetPhysicalDeviceFeatures = terminator_GetPhysicalDeviceFeatures, + .GetPhysicalDeviceFormatProperties = terminator_GetPhysicalDeviceFormatProperties, + .GetPhysicalDeviceImageFormatProperties = terminator_GetPhysicalDeviceImageFormatProperties, + .GetPhysicalDeviceProperties = terminator_GetPhysicalDeviceProperties, + .GetPhysicalDeviceQueueFamilyProperties = terminator_GetPhysicalDeviceQueueFamilyProperties, + .GetPhysicalDeviceMemoryProperties = terminator_GetPhysicalDeviceMemoryProperties, + .GetInstanceProcAddr = vkGetInstanceProcAddr, + .EnumerateDeviceExtensionProperties = terminator_EnumerateDeviceExtensionProperties, + .EnumerateDeviceLayerProperties = terminator_EnumerateDeviceLayerProperties, + .GetPhysicalDeviceSparseImageFormatProperties = terminator_GetPhysicalDeviceSparseImageFormatProperties, + + // ---- Core Vulkan 1.1 commands + .EnumeratePhysicalDeviceGroups = terminator_EnumeratePhysicalDeviceGroups, + .GetPhysicalDeviceFeatures2 = terminator_GetPhysicalDeviceFeatures2, + .GetPhysicalDeviceProperties2 = terminator_GetPhysicalDeviceProperties2, + .GetPhysicalDeviceFormatProperties2 = terminator_GetPhysicalDeviceFormatProperties2, + .GetPhysicalDeviceImageFormatProperties2 = terminator_GetPhysicalDeviceImageFormatProperties2, + .GetPhysicalDeviceQueueFamilyProperties2 = terminator_GetPhysicalDeviceQueueFamilyProperties2, + .GetPhysicalDeviceMemoryProperties2 = terminator_GetPhysicalDeviceMemoryProperties2, + .GetPhysicalDeviceSparseImageFormatProperties2 = terminator_GetPhysicalDeviceSparseImageFormatProperties2, + .GetPhysicalDeviceExternalBufferProperties = terminator_GetPhysicalDeviceExternalBufferProperties, + .GetPhysicalDeviceExternalFenceProperties = terminator_GetPhysicalDeviceExternalFenceProperties, + .GetPhysicalDeviceExternalSemaphoreProperties = terminator_GetPhysicalDeviceExternalSemaphoreProperties, + + // ---- Core Vulkan 1.3 commands + .GetPhysicalDeviceToolProperties = terminator_GetPhysicalDeviceToolProperties, + + // ---- VK_KHR_surface extension commands + .DestroySurfaceKHR = terminator_DestroySurfaceKHR, + .GetPhysicalDeviceSurfaceSupportKHR = terminator_GetPhysicalDeviceSurfaceSupportKHR, + .GetPhysicalDeviceSurfaceCapabilitiesKHR = terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR, + .GetPhysicalDeviceSurfaceFormatsKHR = terminator_GetPhysicalDeviceSurfaceFormatsKHR, + .GetPhysicalDeviceSurfacePresentModesKHR = terminator_GetPhysicalDeviceSurfacePresentModesKHR, + + // ---- VK_KHR_swapchain extension commands + .GetPhysicalDevicePresentRectanglesKHR = terminator_GetPhysicalDevicePresentRectanglesKHR, + + // ---- VK_KHR_display extension commands + .GetPhysicalDeviceDisplayPropertiesKHR = terminator_GetPhysicalDeviceDisplayPropertiesKHR, + .GetPhysicalDeviceDisplayPlanePropertiesKHR = terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR, + .GetDisplayPlaneSupportedDisplaysKHR = terminator_GetDisplayPlaneSupportedDisplaysKHR, + .GetDisplayModePropertiesKHR = terminator_GetDisplayModePropertiesKHR, + .CreateDisplayModeKHR = terminator_CreateDisplayModeKHR, + .GetDisplayPlaneCapabilitiesKHR = terminator_GetDisplayPlaneCapabilitiesKHR, + .CreateDisplayPlaneSurfaceKHR = terminator_CreateDisplayPlaneSurfaceKHR, + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + .CreateXlibSurfaceKHR = terminator_CreateXlibSurfaceKHR, +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + .GetPhysicalDeviceXlibPresentationSupportKHR = terminator_GetPhysicalDeviceXlibPresentationSupportKHR, +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + .CreateXcbSurfaceKHR = terminator_CreateXcbSurfaceKHR, +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + .GetPhysicalDeviceXcbPresentationSupportKHR = terminator_GetPhysicalDeviceXcbPresentationSupportKHR, +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + .CreateWaylandSurfaceKHR = terminator_CreateWaylandSurfaceKHR, +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + .GetPhysicalDeviceWaylandPresentationSupportKHR = terminator_GetPhysicalDeviceWaylandPresentationSupportKHR, +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + .CreateAndroidSurfaceKHR = terminator_CreateAndroidSurfaceKHR, +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + .CreateWin32SurfaceKHR = terminator_CreateWin32SurfaceKHR, +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + .GetPhysicalDeviceWin32PresentationSupportKHR = terminator_GetPhysicalDeviceWin32PresentationSupportKHR, +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_video_queue extension commands + .GetPhysicalDeviceVideoCapabilitiesKHR = terminator_GetPhysicalDeviceVideoCapabilitiesKHR, + .GetPhysicalDeviceVideoFormatPropertiesKHR = terminator_GetPhysicalDeviceVideoFormatPropertiesKHR, + + // ---- VK_KHR_get_physical_device_properties2 extension commands + .GetPhysicalDeviceFeatures2KHR = terminator_GetPhysicalDeviceFeatures2, + .GetPhysicalDeviceProperties2KHR = terminator_GetPhysicalDeviceProperties2, + .GetPhysicalDeviceFormatProperties2KHR = terminator_GetPhysicalDeviceFormatProperties2, + .GetPhysicalDeviceImageFormatProperties2KHR = terminator_GetPhysicalDeviceImageFormatProperties2, + .GetPhysicalDeviceQueueFamilyProperties2KHR = terminator_GetPhysicalDeviceQueueFamilyProperties2, + .GetPhysicalDeviceMemoryProperties2KHR = terminator_GetPhysicalDeviceMemoryProperties2, + .GetPhysicalDeviceSparseImageFormatProperties2KHR = terminator_GetPhysicalDeviceSparseImageFormatProperties2, + + // ---- VK_KHR_device_group_creation extension commands + .EnumeratePhysicalDeviceGroupsKHR = terminator_EnumeratePhysicalDeviceGroups, + + // ---- VK_KHR_external_memory_capabilities extension commands + .GetPhysicalDeviceExternalBufferPropertiesKHR = terminator_GetPhysicalDeviceExternalBufferProperties, + + // ---- VK_KHR_external_semaphore_capabilities extension commands + .GetPhysicalDeviceExternalSemaphorePropertiesKHR = terminator_GetPhysicalDeviceExternalSemaphoreProperties, + + // ---- VK_KHR_external_fence_capabilities extension commands + .GetPhysicalDeviceExternalFencePropertiesKHR = terminator_GetPhysicalDeviceExternalFenceProperties, + + // ---- VK_KHR_performance_query extension commands + .EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = terminator_EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, + .GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = terminator_GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR, + + // ---- VK_KHR_get_surface_capabilities2 extension commands + .GetPhysicalDeviceSurfaceCapabilities2KHR = terminator_GetPhysicalDeviceSurfaceCapabilities2KHR, + .GetPhysicalDeviceSurfaceFormats2KHR = terminator_GetPhysicalDeviceSurfaceFormats2KHR, + + // ---- VK_KHR_get_display_properties2 extension commands + .GetPhysicalDeviceDisplayProperties2KHR = terminator_GetPhysicalDeviceDisplayProperties2KHR, + .GetPhysicalDeviceDisplayPlaneProperties2KHR = terminator_GetPhysicalDeviceDisplayPlaneProperties2KHR, + .GetDisplayModeProperties2KHR = terminator_GetDisplayModeProperties2KHR, + .GetDisplayPlaneCapabilities2KHR = terminator_GetDisplayPlaneCapabilities2KHR, + + // ---- VK_KHR_fragment_shading_rate extension commands + .GetPhysicalDeviceFragmentShadingRatesKHR = terminator_GetPhysicalDeviceFragmentShadingRatesKHR, + + // ---- VK_KHR_video_encode_queue extension commands + .GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = terminator_GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, + + // ---- VK_KHR_cooperative_matrix extension commands + .GetPhysicalDeviceCooperativeMatrixPropertiesKHR = terminator_GetPhysicalDeviceCooperativeMatrixPropertiesKHR, + + // ---- VK_KHR_calibrated_timestamps extension commands + .GetPhysicalDeviceCalibrateableTimeDomainsKHR = terminator_GetPhysicalDeviceCalibrateableTimeDomainsKHR, + + // ---- VK_EXT_debug_report extension commands + .CreateDebugReportCallbackEXT = terminator_CreateDebugReportCallbackEXT, + .DestroyDebugReportCallbackEXT = terminator_DestroyDebugReportCallbackEXT, + .DebugReportMessageEXT = terminator_DebugReportMessageEXT, + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + .CreateStreamDescriptorSurfaceGGP = terminator_CreateStreamDescriptorSurfaceGGP, +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + .GetPhysicalDeviceExternalImageFormatPropertiesNV = terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV, + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + .CreateViSurfaceNN = terminator_CreateViSurfaceNN, +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + .ReleaseDisplayEXT = terminator_ReleaseDisplayEXT, + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + .AcquireXlibDisplayEXT = terminator_AcquireXlibDisplayEXT, +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + .GetRandROutputDisplayEXT = terminator_GetRandROutputDisplayEXT, +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + .GetPhysicalDeviceSurfaceCapabilities2EXT = terminator_GetPhysicalDeviceSurfaceCapabilities2EXT, + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + .CreateIOSSurfaceMVK = terminator_CreateIOSSurfaceMVK, +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + .CreateMacOSSurfaceMVK = terminator_CreateMacOSSurfaceMVK, +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + .CreateDebugUtilsMessengerEXT = terminator_CreateDebugUtilsMessengerEXT, + .DestroyDebugUtilsMessengerEXT = terminator_DestroyDebugUtilsMessengerEXT, + .SubmitDebugUtilsMessageEXT = terminator_SubmitDebugUtilsMessageEXT, + + // ---- VK_EXT_sample_locations extension commands + .GetPhysicalDeviceMultisamplePropertiesEXT = terminator_GetPhysicalDeviceMultisamplePropertiesEXT, + + // ---- VK_EXT_calibrated_timestamps extension commands + .GetPhysicalDeviceCalibrateableTimeDomainsEXT = terminator_GetPhysicalDeviceCalibrateableTimeDomainsEXT, + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + .CreateImagePipeSurfaceFUCHSIA = terminator_CreateImagePipeSurfaceFUCHSIA, +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + .CreateMetalSurfaceEXT = terminator_CreateMetalSurfaceEXT, +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_tooling_info extension commands + .GetPhysicalDeviceToolPropertiesEXT = terminator_GetPhysicalDeviceToolPropertiesEXT, + + // ---- VK_NV_cooperative_matrix extension commands + .GetPhysicalDeviceCooperativeMatrixPropertiesNV = terminator_GetPhysicalDeviceCooperativeMatrixPropertiesNV, + + // ---- VK_NV_coverage_reduction_mode extension commands + .GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = terminator_GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV, + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + .GetPhysicalDeviceSurfacePresentModes2EXT = terminator_GetPhysicalDeviceSurfacePresentModes2EXT, +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_headless_surface extension commands + .CreateHeadlessSurfaceEXT = terminator_CreateHeadlessSurfaceEXT, + + // ---- VK_EXT_acquire_drm_display extension commands + .AcquireDrmDisplayEXT = terminator_AcquireDrmDisplayEXT, + .GetDrmDisplayEXT = terminator_GetDrmDisplayEXT, + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + .AcquireWinrtDisplayNV = terminator_AcquireWinrtDisplayNV, +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + .GetWinrtDisplayNV = terminator_GetWinrtDisplayNV, +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + .CreateDirectFBSurfaceEXT = terminator_CreateDirectFBSurfaceEXT, +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + .GetPhysicalDeviceDirectFBPresentationSupportEXT = terminator_GetPhysicalDeviceDirectFBPresentationSupportEXT, +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + .CreateScreenSurfaceQNX = terminator_CreateScreenSurfaceQNX, +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + .GetPhysicalDeviceScreenPresentationSupportQNX = terminator_GetPhysicalDeviceScreenPresentationSupportQNX, +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_ARM_tensors extension commands + .GetPhysicalDeviceExternalTensorPropertiesARM = terminator_GetPhysicalDeviceExternalTensorPropertiesARM, + + // ---- VK_NV_optical_flow extension commands + .GetPhysicalDeviceOpticalFlowImageFormatsNV = terminator_GetPhysicalDeviceOpticalFlowImageFormatsNV, + + // ---- VK_NV_cooperative_vector extension commands + .GetPhysicalDeviceCooperativeVectorPropertiesNV = terminator_GetPhysicalDeviceCooperativeVectorPropertiesNV, + + // ---- VK_ARM_data_graph extension commands + .GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = terminator_GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM, + .GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = terminator_GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM, + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + .CreateSurfaceOHOS = terminator_CreateSurfaceOHOS, +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + .GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = terminator_GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV, +}; + +// A null-terminated list of all of the instance extensions supported by the loader. +// If an instance extension name is not in this list, but it is exported by one or more of the +// ICDs detected by the loader, then the extension name not in the list will be filtered out +// before passing the list of extensions to the application. +const char *const LOADER_INSTANCE_EXTENSIONS[] = { + VK_KHR_SURFACE_EXTENSION_NAME, + VK_KHR_DISPLAY_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_XLIB_KHR) + VK_KHR_XLIB_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + VK_KHR_XCB_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + VK_KHR_WIN32_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_WIN32_KHR + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, + VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME, + VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, + VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, + VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, + VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, + VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, + VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME, + VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, + VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME, + VK_EXT_DEBUG_REPORT_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_GGP) + VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_GGP + VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, + VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_VI_NN) + VK_NN_VI_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_VI_NN + VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, + VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_IOS_MVK) + VK_MVK_IOS_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_IOS_MVK +#if defined(VK_USE_PLATFORM_MACOS_MVK) + VK_MVK_MACOS_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_MACOS_MVK + VK_EXT_DEBUG_UTILS_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_FUCHSIA) + VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_METAL_EXT) + VK_EXT_METAL_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_METAL_EXT + VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME, + VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, + VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, + VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + VK_QNX_SCREEN_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_SCREEN_QNX + VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME, + VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME, + VK_EXT_LAYER_SETTINGS_EXTENSION_NAME, + VK_NV_DISPLAY_STEREO_EXTENSION_NAME, +#if defined(VK_USE_PLATFORM_OHOS) + VK_OHOS_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_OHOS + NULL }; +// clang-format on diff --git a/local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.h b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.h new file mode 100644 index 0000000000..b8c55aa493 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_loader_extensions.h @@ -0,0 +1,608 @@ +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See loader_extension_generator.py for modifications + +/* + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + * + * Author: Mark Lobodzinski + * Author: Mark Young + * Author: Charles Giessen + */ + +// clang-format off +#pragma once + +#include +#include +#include +#include "vk_layer_dispatch_table.h" + + +// Structures defined externally, but used here +struct loader_instance; +struct loader_device; +struct loader_icd_term; +struct loader_dev_dispatch_table; + +// Device extension error function +VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev); + +// Extension interception for vkGetInstanceProcAddr function, so we can return +// the appropriate information for any instance extensions we know about. +bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr); + +struct loader_instance_extension_enable_list; // Forward declaration + +// Extension interception for vkCreateInstance function, so we can properly +// detect and enable any instance extension information for extensions we know +// about. +void fill_out_enabled_instance_extensions(uint32_t extension_count, const char *const * extension_list, struct loader_instance_extension_enable_list* enables); + +// Extension interception for vkGetDeviceProcAddr function, so we can return +// an appropriate terminator if this is one of those few device commands requiring +// a terminator. +PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *name, bool* found_name); + +// Dispatch table properly filled in with appropriate terminators for the +// supported extensions. +extern const VkLayerInstanceDispatchTable instance_disp; + +// Array of extension strings for instance extensions we support. +extern const char *const LOADER_INSTANCE_EXTENSIONS[]; + +VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_instance* inst, struct loader_icd_term *icd_term); + +// Init Device function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa, + VkDevice dev); + +// Init Device function pointer dispatch table with extension commands +VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table, + PFN_vkGetInstanceProcAddr gipa, + PFN_vkGetDeviceProcAddr gdpa, + VkInstance inst, + VkDevice dev); + +// Init Instance function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, + VkInstance inst); + +// Init Instance function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, + VkInstance inst); + +// Device command lookup function +VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name, bool* name_found); + +// Instance command lookup function +VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name, + bool *found_name); + +// Loader core instance terminators +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance( + const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkInstance* pInstance); +VKAPI_ATTR void VKAPI_CALL terminator_DestroyInstance( + VkInstance instance, + const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDevices( + VkInstance instance, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures* pFeatures); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties* pFormatProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkImageCreateFlags flags, + VkImageFormatProperties* pImageFormatProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties* pProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties* pQueueFamilyProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties* pMemoryProperties); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL terminator_GetInstanceProcAddr( + VkInstance instance, + const char* pName); +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice( + VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDevice* pDevice); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceExtensionProperties( + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_pre_instance_EnumerateInstanceExtensionProperties( + const VkEnumerateInstanceExtensionPropertiesChain* chain, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceExtensionProperties( + VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceLayerProperties( + uint32_t* pPropertyCount, + VkLayerProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_pre_instance_EnumerateInstanceLayerProperties( + const VkEnumerateInstanceLayerPropertiesChain* chain, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceLayerProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkImageType type, + VkSampleCountFlagBits samples, + VkImageUsageFlags usage, + VkImageTiling tiling, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties* pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceVersion( + uint32_t* pApiVersion); +VKAPI_ATTR VkResult VKAPI_CALL terminator_pre_instance_EnumerateInstanceVersion( + const VkEnumerateInstanceVersionChain* chain, + uint32_t* pApiVersion); +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceGroups( + VkInstance instance, + uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties2( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties2( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties); +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceToolProperties( + VkPhysicalDevice physicalDevice, + uint32_t* pToolCount, + VkPhysicalDeviceToolProperties* pToolProperties); + +// ICD function pointer dispatch table +struct loader_icd_term_dispatch { + + // ---- Core Vulkan 1.0 commands + PFN_vkCreateInstance CreateInstance; + PFN_vkDestroyInstance DestroyInstance; + PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices; + PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures; + PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties; + PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties; + PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties; + PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties; + PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties; + PFN_vkGetDeviceProcAddr GetDeviceProcAddr; + PFN_vkCreateDevice CreateDevice; + PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; + PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties; + PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties; + + // ---- Core Vulkan 1.1 commands + PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion; + PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups; + PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2; + PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2; + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2; + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2; + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2; + PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties; + PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties; + + // ---- Core Vulkan 1.3 commands + PFN_vkGetPhysicalDeviceToolProperties GetPhysicalDeviceToolProperties; + + // ---- VK_KHR_surface extension commands + PFN_vkDestroySurfaceKHR DestroySurfaceKHR; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR; + + // ---- VK_KHR_swapchain extension commands + PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR; + + // ---- VK_KHR_display extension commands + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR; + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR; + PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR; + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR; + PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR; + + // ---- VK_KHR_xlib_surface extension commands +#if defined(VK_USE_PLATFORM_XLIB_KHR) + PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR + + // ---- VK_KHR_xcb_surface extension commands +#if defined(VK_USE_PLATFORM_XCB_KHR) + PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR; +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR; +#endif // VK_USE_PLATFORM_XCB_KHR + + // ---- VK_KHR_wayland_surface extension commands +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + + // ---- VK_KHR_android_surface extension commands +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR; +#endif // VK_USE_PLATFORM_ANDROID_KHR + + // ---- VK_KHR_win32_surface extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_KHR_video_queue extension commands + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR GetPhysicalDeviceVideoCapabilitiesKHR; + PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR GetPhysicalDeviceVideoFormatPropertiesKHR; + + // ---- VK_KHR_get_physical_device_properties2 extension commands + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR; + PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR; + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR; + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR; + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR; + + // ---- VK_KHR_device_group_creation extension commands + PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR; + + // ---- VK_KHR_external_memory_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR; + + // ---- VK_KHR_external_semaphore_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR; + + // ---- VK_KHR_external_fence_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR; + + // ---- VK_KHR_performance_query extension commands + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; + + // ---- VK_KHR_get_surface_capabilities2 extension commands + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR; + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR; + + // ---- VK_KHR_get_display_properties2 extension commands + PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR; + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR; + PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR; + PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR; + + // ---- VK_KHR_fragment_shading_rate extension commands + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR GetPhysicalDeviceFragmentShadingRatesKHR; + + // ---- VK_KHR_video_encode_queue extension commands + PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR; + + // ---- VK_KHR_cooperative_matrix extension commands + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR GetPhysicalDeviceCooperativeMatrixPropertiesKHR; + + // ---- VK_KHR_calibrated_timestamps extension commands + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR GetPhysicalDeviceCalibrateableTimeDomainsKHR; + + // ---- VK_EXT_debug_report extension commands + PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT; + PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT; + PFN_vkDebugReportMessageEXT DebugReportMessageEXT; + + // ---- VK_GGP_stream_descriptor_surface extension commands +#if defined(VK_USE_PLATFORM_GGP) + PFN_vkCreateStreamDescriptorSurfaceGGP CreateStreamDescriptorSurfaceGGP; +#endif // VK_USE_PLATFORM_GGP + + // ---- VK_NV_external_memory_capabilities extension commands + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV; + + // ---- VK_NN_vi_surface extension commands +#if defined(VK_USE_PLATFORM_VI_NN) + PFN_vkCreateViSurfaceNN CreateViSurfaceNN; +#endif // VK_USE_PLATFORM_VI_NN + + // ---- VK_EXT_direct_mode_display extension commands + PFN_vkReleaseDisplayEXT ReleaseDisplayEXT; + + // ---- VK_EXT_acquire_xlib_display extension commands +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + PFN_vkAcquireXlibDisplayEXT AcquireXlibDisplayEXT; +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + PFN_vkGetRandROutputDisplayEXT GetRandROutputDisplayEXT; +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + + // ---- VK_EXT_display_surface_counter extension commands + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT GetPhysicalDeviceSurfaceCapabilities2EXT; + + // ---- VK_MVK_ios_surface extension commands +#if defined(VK_USE_PLATFORM_IOS_MVK) + PFN_vkCreateIOSSurfaceMVK CreateIOSSurfaceMVK; +#endif // VK_USE_PLATFORM_IOS_MVK + + // ---- VK_MVK_macos_surface extension commands +#if defined(VK_USE_PLATFORM_MACOS_MVK) + PFN_vkCreateMacOSSurfaceMVK CreateMacOSSurfaceMVK; +#endif // VK_USE_PLATFORM_MACOS_MVK + + // ---- VK_EXT_debug_utils extension commands + PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT; + PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT; + PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT; + + // ---- VK_EXT_sample_locations extension commands + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT; + + // ---- VK_EXT_calibrated_timestamps extension commands + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT; + + // ---- VK_FUCHSIA_imagepipe_surface extension commands +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA; +#endif // VK_USE_PLATFORM_FUCHSIA + + // ---- VK_EXT_metal_surface extension commands +#if defined(VK_USE_PLATFORM_METAL_EXT) + PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + + // ---- VK_EXT_tooling_info extension commands + PFN_vkGetPhysicalDeviceToolPropertiesEXT GetPhysicalDeviceToolPropertiesEXT; + + // ---- VK_NV_cooperative_matrix extension commands + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV; + + // ---- VK_NV_coverage_reduction_mode extension commands + PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; + + // ---- VK_EXT_full_screen_exclusive extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT GetPhysicalDeviceSurfacePresentModes2EXT; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_headless_surface extension commands + PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT; + + // ---- VK_EXT_acquire_drm_display extension commands + PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT; + PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT; + + // ---- VK_NV_acquire_winrt_display extension commands +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkAcquireWinrtDisplayNV AcquireWinrtDisplayNV; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkGetWinrtDisplayNV GetWinrtDisplayNV; +#endif // VK_USE_PLATFORM_WIN32_KHR + + // ---- VK_EXT_directfb_surface extension commands +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + PFN_vkCreateDirectFBSurfaceEXT CreateDirectFBSurfaceEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT GetPhysicalDeviceDirectFBPresentationSupportEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + + // ---- VK_QNX_screen_surface extension commands +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + PFN_vkCreateScreenSurfaceQNX CreateScreenSurfaceQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX GetPhysicalDeviceScreenPresentationSupportQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX + + // ---- VK_ARM_tensors extension commands + PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM GetPhysicalDeviceExternalTensorPropertiesARM; + + // ---- VK_NV_optical_flow extension commands + PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV GetPhysicalDeviceOpticalFlowImageFormatsNV; + + // ---- VK_NV_cooperative_vector extension commands + PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV GetPhysicalDeviceCooperativeVectorPropertiesNV; + + // ---- VK_ARM_data_graph extension commands + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM; + PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM; + + // ---- VK_OHOS_surface extension commands +#if defined(VK_USE_PLATFORM_OHOS) + PFN_vkCreateSurfaceOHOS CreateSurfaceOHOS; +#endif // VK_USE_PLATFORM_OHOS + + // ---- VK_NV_cooperative_matrix2 extension commands + PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV; +}; + +struct loader_instance_extension_enable_list { + uint8_t khr_surface; + uint8_t khr_display; +#if defined(VK_USE_PLATFORM_XLIB_KHR) + uint8_t khr_xlib_surface; +#endif // defined(VK_USE_PLATFORM_XLIB_KHR) +#if defined(VK_USE_PLATFORM_XCB_KHR) + uint8_t khr_xcb_surface; +#endif // defined(VK_USE_PLATFORM_XCB_KHR) +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + uint8_t khr_wayland_surface; +#endif // defined(VK_USE_PLATFORM_WAYLAND_KHR) +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + uint8_t khr_android_surface; +#endif // defined(VK_USE_PLATFORM_ANDROID_KHR) +#if defined(VK_USE_PLATFORM_WIN32_KHR) + uint8_t khr_win32_surface; +#endif // defined(VK_USE_PLATFORM_WIN32_KHR) + uint8_t khr_get_physical_device_properties2; + uint8_t khr_device_group_creation; + uint8_t khr_external_memory_capabilities; + uint8_t khr_external_semaphore_capabilities; + uint8_t khr_external_fence_capabilities; + uint8_t khr_get_surface_capabilities2; + uint8_t khr_get_display_properties2; + uint8_t khr_surface_protected_capabilities; + uint8_t khr_portability_enumeration; + uint8_t khr_surface_maintenance1; + uint8_t ext_debug_report; +#if defined(VK_USE_PLATFORM_GGP) + uint8_t ggp_stream_descriptor_surface; +#endif // defined(VK_USE_PLATFORM_GGP) + uint8_t nv_external_memory_capabilities; + uint8_t ext_validation_flags; +#if defined(VK_USE_PLATFORM_VI_NN) + uint8_t nn_vi_surface; +#endif // defined(VK_USE_PLATFORM_VI_NN) + uint8_t ext_direct_mode_display; +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + uint8_t ext_acquire_xlib_display; +#endif // defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + uint8_t ext_display_surface_counter; + uint8_t ext_swapchain_colorspace; +#if defined(VK_USE_PLATFORM_IOS_MVK) + uint8_t mvk_ios_surface; +#endif // defined(VK_USE_PLATFORM_IOS_MVK) +#if defined(VK_USE_PLATFORM_MACOS_MVK) + uint8_t mvk_macos_surface; +#endif // defined(VK_USE_PLATFORM_MACOS_MVK) + uint8_t ext_debug_utils; +#if defined(VK_USE_PLATFORM_FUCHSIA) + uint8_t fuchsia_imagepipe_surface; +#endif // defined(VK_USE_PLATFORM_FUCHSIA) +#if defined(VK_USE_PLATFORM_METAL_EXT) + uint8_t ext_metal_surface; +#endif // defined(VK_USE_PLATFORM_METAL_EXT) + uint8_t ext_validation_features; + uint8_t ext_headless_surface; + uint8_t ext_surface_maintenance1; + uint8_t ext_acquire_drm_display; +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + uint8_t ext_directfb_surface; +#endif // defined(VK_USE_PLATFORM_DIRECTFB_EXT) +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + uint8_t qnx_screen_surface; +#endif // defined(VK_USE_PLATFORM_SCREEN_QNX) + uint8_t google_surfaceless_query; + uint8_t lunarg_direct_driver_loading; + uint8_t ext_layer_settings; + uint8_t nv_display_stereo; +#if defined(VK_USE_PLATFORM_OHOS) + uint8_t ohos_surface; +#endif // defined(VK_USE_PLATFORM_OHOS) +}; + +// Functions that required a terminator need to have a separate dispatch table which contains their corresponding +// device function. This is used in the terminators themselves. +struct loader_device_terminator_dispatch { + + // ---- VK_KHR_swapchain extension commands + PFN_vkCreateSwapchainKHR CreateSwapchainKHR; + PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR; + + // ---- VK_KHR_display_swapchain extension commands + PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR; + + // ---- VK_EXT_debug_marker extension commands + PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT; + PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT; + + // ---- VK_EXT_debug_utils extension commands + PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT; + PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT; + PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT; + PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT; + PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT; + PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT; + PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT; + PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + + // ---- VK_EXT_full_screen_exclusive extension commands + PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT; +#endif // VK_USE_PLATFORM_WIN32_KHR +}; + +// clang-format on diff --git a/local/recipes/libs/vulkan-loader/source/loader/generated/vk_object_types.h b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_object_types.h new file mode 100644 index 0000000000..6d30aef0a4 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/generated/vk_object_types.h @@ -0,0 +1,471 @@ +// clang-format off +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See helper_file_generator.py for modifications + + +/*************************************************************************** + * + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2015-2017 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. + * + * Author: Mark Lobodzinski + * Author: Courtney Goeltzenleuchter + * Author: Tobin Ehlis + * Author: Chris Forbes + * Author: John Zulauf + * Author: Charles Giessen + * + ****************************************************************************/ + + +#pragma once + +#include + +// Object Type enum for validation layer internal object handling +typedef enum VulkanObjectType { + kVulkanObjectTypeUnknown = 0, + kVulkanObjectTypeBuffer = 1, + kVulkanObjectTypeImage = 2, + kVulkanObjectTypeInstance = 3, + kVulkanObjectTypePhysicalDevice = 4, + kVulkanObjectTypeDevice = 5, + kVulkanObjectTypeQueue = 6, + kVulkanObjectTypeSemaphore = 7, + kVulkanObjectTypeCommandBuffer = 8, + kVulkanObjectTypeFence = 9, + kVulkanObjectTypeDeviceMemory = 10, + kVulkanObjectTypeEvent = 11, + kVulkanObjectTypeQueryPool = 12, + kVulkanObjectTypeBufferView = 13, + kVulkanObjectTypeImageView = 14, + kVulkanObjectTypeShaderModule = 15, + kVulkanObjectTypePipelineCache = 16, + kVulkanObjectTypePipelineLayout = 17, + kVulkanObjectTypePipeline = 18, + kVulkanObjectTypeRenderPass = 19, + kVulkanObjectTypeDescriptorSetLayout = 20, + kVulkanObjectTypeSampler = 21, + kVulkanObjectTypeDescriptorSet = 22, + kVulkanObjectTypeDescriptorPool = 23, + kVulkanObjectTypeFramebuffer = 24, + kVulkanObjectTypeCommandPool = 25, + kVulkanObjectTypeSamplerYcbcrConversion = 26, + kVulkanObjectTypeDescriptorUpdateTemplate = 27, + kVulkanObjectTypePrivateDataSlot = 28, + kVulkanObjectTypeSurfaceKHR = 29, + kVulkanObjectTypeSwapchainKHR = 30, + kVulkanObjectTypeDisplayKHR = 31, + kVulkanObjectTypeDisplayModeKHR = 32, + kVulkanObjectTypeVideoSessionKHR = 33, + kVulkanObjectTypeVideoSessionParametersKHR = 34, + kVulkanObjectTypeDeferredOperationKHR = 35, + kVulkanObjectTypePipelineBinaryKHR = 36, + kVulkanObjectTypeDebugReportCallbackEXT = 37, + kVulkanObjectTypeCuModuleNVX = 38, + kVulkanObjectTypeCuFunctionNVX = 39, + kVulkanObjectTypeDebugUtilsMessengerEXT = 40, + kVulkanObjectTypeValidationCacheEXT = 41, + kVulkanObjectTypeAccelerationStructureNV = 42, + kVulkanObjectTypePerformanceConfigurationINTEL = 43, + kVulkanObjectTypeIndirectCommandsLayoutNV = 44, + kVulkanObjectTypeCudaModuleNV = 45, + kVulkanObjectTypeCudaFunctionNV = 46, + kVulkanObjectTypeAccelerationStructureKHR = 47, + kVulkanObjectTypeBufferCollectionFUCHSIA = 48, + kVulkanObjectTypeMicromapEXT = 49, + kVulkanObjectTypeTensorARM = 50, + kVulkanObjectTypeTensorViewARM = 51, + kVulkanObjectTypeOpticalFlowSessionNV = 52, + kVulkanObjectTypeShaderEXT = 53, + kVulkanObjectTypeDataGraphPipelineSessionARM = 54, + kVulkanObjectTypeExternalComputeQueueNV = 55, + kVulkanObjectTypeIndirectExecutionSetEXT = 56, + kVulkanObjectTypeIndirectCommandsLayoutEXT = 57, + kVulkanObjectTypeMax = 58, + // Aliases for backwards compatibilty of "promoted" types + kVulkanObjectTypeSamplerYcbcrConversionKHR = kVulkanObjectTypeSamplerYcbcrConversion, + kVulkanObjectTypeDescriptorUpdateTemplateKHR = kVulkanObjectTypeDescriptorUpdateTemplate, + kVulkanObjectTypePrivateDataSlotEXT = kVulkanObjectTypePrivateDataSlot, +} VulkanObjectType; + +// Array of object name strings for OBJECT_TYPE enum conversion +static const char * const object_string[kVulkanObjectTypeMax] = { + "Unknown", + "Buffer", + "Image", + "Instance", + "PhysicalDevice", + "Device", + "Queue", + "Semaphore", + "CommandBuffer", + "Fence", + "DeviceMemory", + "Event", + "QueryPool", + "BufferView", + "ImageView", + "ShaderModule", + "PipelineCache", + "PipelineLayout", + "Pipeline", + "RenderPass", + "DescriptorSetLayout", + "Sampler", + "DescriptorSet", + "DescriptorPool", + "Framebuffer", + "CommandPool", + "SamplerYcbcrConversion", + "DescriptorUpdateTemplate", + "PrivateDataSlot", + "SurfaceKHR", + "SwapchainKHR", + "DisplayKHR", + "DisplayModeKHR", + "VideoSessionKHR", + "VideoSessionParametersKHR", + "DeferredOperationKHR", + "PipelineBinaryKHR", + "DebugReportCallbackEXT", + "CuModuleNVX", + "CuFunctionNVX", + "DebugUtilsMessengerEXT", + "ValidationCacheEXT", + "AccelerationStructureNV", + "PerformanceConfigurationINTEL", + "IndirectCommandsLayoutNV", + "CudaModuleNV", + "CudaFunctionNV", + "AccelerationStructureKHR", + "BufferCollectionFUCHSIA", + "MicromapEXT", + "TensorARM", + "TensorViewARM", + "OpticalFlowSessionNV", + "ShaderEXT", + "DataGraphPipelineSessionARM", + "ExternalComputeQueueNV", + "IndirectExecutionSetEXT", + "IndirectCommandsLayoutEXT", +}; + +// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version +const VkDebugReportObjectTypeEXT get_debug_report_enum[] = { + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, // kVulkanObjectTypeBuffer + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, // kVulkanObjectTypeImage + VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, // kVulkanObjectTypeInstance + VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, // kVulkanObjectTypePhysicalDevice + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, // kVulkanObjectTypeDevice + VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, // kVulkanObjectTypeQueue + VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, // kVulkanObjectTypeSemaphore + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, // kVulkanObjectTypeCommandBuffer + VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, // kVulkanObjectTypeFence + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, // kVulkanObjectTypeDeviceMemory + VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, // kVulkanObjectTypeEvent + VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, // kVulkanObjectTypeQueryPool + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, // kVulkanObjectTypeBufferView + VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, // kVulkanObjectTypeImageView + VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, // kVulkanObjectTypeShaderModule + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, // kVulkanObjectTypePipelineCache + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, // kVulkanObjectTypePipelineLayout + VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, // kVulkanObjectTypePipeline + VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, // kVulkanObjectTypeRenderPass + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, // kVulkanObjectTypeDescriptorSetLayout + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, // kVulkanObjectTypeSampler + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, // kVulkanObjectTypeDescriptorSet + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, // kVulkanObjectTypeDescriptorPool + VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, // kVulkanObjectTypeFramebuffer + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, // kVulkanObjectTypeCommandPool + VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, // kVulkanObjectTypeSamplerYcbcrConversion + VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, // kVulkanObjectTypeDescriptorUpdateTemplate + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypePrivateDataSlot + VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, // kVulkanObjectTypeSurfaceKHR + VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, // kVulkanObjectTypeSwapchainKHR + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, // kVulkanObjectTypeDisplayKHR + VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, // kVulkanObjectTypeDisplayModeKHR + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeVideoSessionKHR + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeVideoSessionParametersKHR + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeDeferredOperationKHR + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypePipelineBinaryKHR + VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, // kVulkanObjectTypeDebugReportCallbackEXT + VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT, // kVulkanObjectTypeCuModuleNVX + VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT, // kVulkanObjectTypeCuFunctionNVX + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeDebugUtilsMessengerEXT + VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, // kVulkanObjectTypeValidationCacheEXT + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT, // kVulkanObjectTypeAccelerationStructureNV + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypePerformanceConfigurationINTEL + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeIndirectCommandsLayoutNV + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT, // kVulkanObjectTypeCudaModuleNV + VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT, // kVulkanObjectTypeCudaFunctionNV + VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT, // kVulkanObjectTypeAccelerationStructureKHR + VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT, // kVulkanObjectTypeBufferCollectionFUCHSIA + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeMicromapEXT + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeTensorARM + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeTensorViewARM + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeOpticalFlowSessionNV + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeShaderEXT + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeDataGraphPipelineSessionARM + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeExternalComputeQueueNV + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeIndirectExecutionSetEXT + VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeIndirectCommandsLayoutEXT +}; + +// Helper array to get Official Vulkan VkObjectType enum from the internal layers version +const VkObjectType get_object_type_enum[] = { + VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown + VK_OBJECT_TYPE_BUFFER, // kVulkanObjectTypeBuffer + VK_OBJECT_TYPE_IMAGE, // kVulkanObjectTypeImage + VK_OBJECT_TYPE_INSTANCE, // kVulkanObjectTypeInstance + VK_OBJECT_TYPE_PHYSICAL_DEVICE, // kVulkanObjectTypePhysicalDevice + VK_OBJECT_TYPE_DEVICE, // kVulkanObjectTypeDevice + VK_OBJECT_TYPE_QUEUE, // kVulkanObjectTypeQueue + VK_OBJECT_TYPE_SEMAPHORE, // kVulkanObjectTypeSemaphore + VK_OBJECT_TYPE_COMMAND_BUFFER, // kVulkanObjectTypeCommandBuffer + VK_OBJECT_TYPE_FENCE, // kVulkanObjectTypeFence + VK_OBJECT_TYPE_DEVICE_MEMORY, // kVulkanObjectTypeDeviceMemory + VK_OBJECT_TYPE_EVENT, // kVulkanObjectTypeEvent + VK_OBJECT_TYPE_QUERY_POOL, // kVulkanObjectTypeQueryPool + VK_OBJECT_TYPE_BUFFER_VIEW, // kVulkanObjectTypeBufferView + VK_OBJECT_TYPE_IMAGE_VIEW, // kVulkanObjectTypeImageView + VK_OBJECT_TYPE_SHADER_MODULE, // kVulkanObjectTypeShaderModule + VK_OBJECT_TYPE_PIPELINE_CACHE, // kVulkanObjectTypePipelineCache + VK_OBJECT_TYPE_PIPELINE_LAYOUT, // kVulkanObjectTypePipelineLayout + VK_OBJECT_TYPE_PIPELINE, // kVulkanObjectTypePipeline + VK_OBJECT_TYPE_RENDER_PASS, // kVulkanObjectTypeRenderPass + VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, // kVulkanObjectTypeDescriptorSetLayout + VK_OBJECT_TYPE_SAMPLER, // kVulkanObjectTypeSampler + VK_OBJECT_TYPE_DESCRIPTOR_SET, // kVulkanObjectTypeDescriptorSet + VK_OBJECT_TYPE_DESCRIPTOR_POOL, // kVulkanObjectTypeDescriptorPool + VK_OBJECT_TYPE_FRAMEBUFFER, // kVulkanObjectTypeFramebuffer + VK_OBJECT_TYPE_COMMAND_POOL, // kVulkanObjectTypeCommandPool + VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, // kVulkanObjectTypeSamplerYcbcrConversion + VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, // kVulkanObjectTypeDescriptorUpdateTemplate + VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, // kVulkanObjectTypePrivateDataSlot + VK_OBJECT_TYPE_SURFACE_KHR, // kVulkanObjectTypeSurfaceKHR + VK_OBJECT_TYPE_SWAPCHAIN_KHR, // kVulkanObjectTypeSwapchainKHR + VK_OBJECT_TYPE_DISPLAY_KHR, // kVulkanObjectTypeDisplayKHR + VK_OBJECT_TYPE_DISPLAY_MODE_KHR, // kVulkanObjectTypeDisplayModeKHR + VK_OBJECT_TYPE_VIDEO_SESSION_KHR, // kVulkanObjectTypeVideoSessionKHR + VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR, // kVulkanObjectTypeVideoSessionParametersKHR + VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR, // kVulkanObjectTypeDeferredOperationKHR + VK_OBJECT_TYPE_PIPELINE_BINARY_KHR, // kVulkanObjectTypePipelineBinaryKHR + VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT, // kVulkanObjectTypeDebugReportCallbackEXT + VK_OBJECT_TYPE_CU_MODULE_NVX, // kVulkanObjectTypeCuModuleNVX + VK_OBJECT_TYPE_CU_FUNCTION_NVX, // kVulkanObjectTypeCuFunctionNVX + VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, // kVulkanObjectTypeDebugUtilsMessengerEXT + VK_OBJECT_TYPE_VALIDATION_CACHE_EXT, // kVulkanObjectTypeValidationCacheEXT + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV, // kVulkanObjectTypeAccelerationStructureNV + VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL, // kVulkanObjectTypePerformanceConfigurationINTEL + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV, // kVulkanObjectTypeIndirectCommandsLayoutNV + VK_OBJECT_TYPE_CUDA_MODULE_NV, // kVulkanObjectTypeCudaModuleNV + VK_OBJECT_TYPE_CUDA_FUNCTION_NV, // kVulkanObjectTypeCudaFunctionNV + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR, // kVulkanObjectTypeAccelerationStructureKHR + VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA, // kVulkanObjectTypeBufferCollectionFUCHSIA + VK_OBJECT_TYPE_MICROMAP_EXT, // kVulkanObjectTypeMicromapEXT + VK_OBJECT_TYPE_TENSOR_ARM, // kVulkanObjectTypeTensorARM + VK_OBJECT_TYPE_TENSOR_VIEW_ARM, // kVulkanObjectTypeTensorViewARM + VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV, // kVulkanObjectTypeOpticalFlowSessionNV + VK_OBJECT_TYPE_SHADER_EXT, // kVulkanObjectTypeShaderEXT + VK_OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM, // kVulkanObjectTypeDataGraphPipelineSessionARM + VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV, // kVulkanObjectTypeExternalComputeQueueNV + VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT, // kVulkanObjectTypeIndirectExecutionSetEXT + VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT, // kVulkanObjectTypeIndirectCommandsLayoutEXT +}; + +// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType +static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){ + if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) { + return VK_OBJECT_TYPE_UNKNOWN; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) { + return VK_OBJECT_TYPE_UNKNOWN; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + return VK_OBJECT_TYPE_INSTANCE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + return VK_OBJECT_TYPE_PHYSICAL_DEVICE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT) { + return VK_OBJECT_TYPE_DEVICE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT) { + return VK_OBJECT_TYPE_QUEUE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT) { + return VK_OBJECT_TYPE_SEMAPHORE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT) { + return VK_OBJECT_TYPE_COMMAND_BUFFER; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT) { + return VK_OBJECT_TYPE_FENCE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT) { + return VK_OBJECT_TYPE_DEVICE_MEMORY; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT) { + return VK_OBJECT_TYPE_BUFFER; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT) { + return VK_OBJECT_TYPE_IMAGE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT) { + return VK_OBJECT_TYPE_EVENT; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT) { + return VK_OBJECT_TYPE_QUERY_POOL; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT) { + return VK_OBJECT_TYPE_BUFFER_VIEW; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT) { + return VK_OBJECT_TYPE_IMAGE_VIEW; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT) { + return VK_OBJECT_TYPE_SHADER_MODULE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT) { + return VK_OBJECT_TYPE_PIPELINE_CACHE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT) { + return VK_OBJECT_TYPE_PIPELINE_LAYOUT; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT) { + return VK_OBJECT_TYPE_RENDER_PASS; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT) { + return VK_OBJECT_TYPE_PIPELINE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT) { + return VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT) { + return VK_OBJECT_TYPE_SAMPLER; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT) { + return VK_OBJECT_TYPE_DESCRIPTOR_POOL; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT) { + return VK_OBJECT_TYPE_DESCRIPTOR_SET; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT) { + return VK_OBJECT_TYPE_FRAMEBUFFER; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT) { + return VK_OBJECT_TYPE_COMMAND_POOL; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT) { + return VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT) { + return VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + return VK_OBJECT_TYPE_SURFACE_KHR; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT) { + return VK_OBJECT_TYPE_SWAPCHAIN_KHR; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT) { + return VK_OBJECT_TYPE_DISPLAY_KHR; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT) { + return VK_OBJECT_TYPE_DISPLAY_MODE_KHR; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT) { + return VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT) { + return VK_OBJECT_TYPE_CU_MODULE_NVX; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT) { + return VK_OBJECT_TYPE_CU_FUNCTION_NVX; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT) { + return VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT) { + return VK_OBJECT_TYPE_VALIDATION_CACHE_EXT; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT) { + return VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT) { + return VK_OBJECT_TYPE_CUDA_MODULE_NV; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT) { + return VK_OBJECT_TYPE_CUDA_FUNCTION_NV; + } else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT) { + return VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA; + } + return VK_OBJECT_TYPE_UNKNOWN; +} + +// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType +static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){ + if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) { + return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) { + return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_INSTANCE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DEVICE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_QUEUE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_SEMAPHORE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_COMMAND_BUFFER) { + return VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_FENCE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DEVICE_MEMORY) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_BUFFER) { + return VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_IMAGE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_EVENT) { + return VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_QUERY_POOL) { + return VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_BUFFER_VIEW) { + return VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_IMAGE_VIEW) { + return VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_SHADER_MODULE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_PIPELINE_CACHE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_PIPELINE_LAYOUT) { + return VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_RENDER_PASS) { + return VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_PIPELINE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_SAMPLER) { + return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_POOL) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_SET) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_FRAMEBUFFER) { + return VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_COMMAND_POOL) { + return VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION) { + return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_SURFACE_KHR) { + return VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_SWAPCHAIN_KHR) { + return VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DISPLAY_KHR) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DISPLAY_MODE_KHR) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT) { + return VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_CU_MODULE_NVX) { + return VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_CU_FUNCTION_NVX) { + return VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR) { + return VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_VALIDATION_CACHE_EXT) { + return VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV) { + return VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_CUDA_MODULE_NV) { + return VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_MODULE_NV_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_CUDA_FUNCTION_NV) { + return VK_DEBUG_REPORT_OBJECT_TYPE_CUDA_FUNCTION_NV_EXT; + } else if (core_report_obj == VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA) { + return VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT; + } + return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; +} +// clang-format on diff --git a/local/recipes/libs/vulkan-loader/source/loader/gpa_helper.c b/local/recipes/libs/vulkan-loader/source/loader/gpa_helper.c new file mode 100644 index 0000000000..09e7ede635 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/gpa_helper.c @@ -0,0 +1,300 @@ +/* + * + * Copyright (c) 2015-2024 The Khronos Group Inc. + * Copyright (c) 2015-2024 Valve Corporation + * Copyright (c) 2015-2024 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Charles Giessen + */ + +#include "gpa_helper.h" + +#include + +#include "debug_utils.h" +#include "unknown_function_handling.h" +#include "wsi.h" + +void *trampoline_get_proc_addr(struct loader_instance *inst, const char *funcName) { + // Don't include or check global functions + if (!strcmp(funcName, "vkGetInstanceProcAddr")) return vkGetInstanceProcAddr; + if (!strcmp(funcName, "vkDestroyInstance")) return vkDestroyInstance; + if (!strcmp(funcName, "vkEnumeratePhysicalDevices")) return vkEnumeratePhysicalDevices; + if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures")) return vkGetPhysicalDeviceFeatures; + if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties")) return vkGetPhysicalDeviceFormatProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties")) return vkGetPhysicalDeviceImageFormatProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties")) return vkGetPhysicalDeviceSparseImageFormatProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceProperties")) return vkGetPhysicalDeviceProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties")) return vkGetPhysicalDeviceQueueFamilyProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties")) return vkGetPhysicalDeviceMemoryProperties; + if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties")) return vkEnumerateDeviceLayerProperties; + if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties")) return vkEnumerateDeviceExtensionProperties; + if (!strcmp(funcName, "vkCreateDevice")) return vkCreateDevice; + if (!strcmp(funcName, "vkGetDeviceProcAddr")) return vkGetDeviceProcAddr; + if (!strcmp(funcName, "vkDestroyDevice")) return vkDestroyDevice; + if (!strcmp(funcName, "vkGetDeviceQueue")) return vkGetDeviceQueue; + if (!strcmp(funcName, "vkQueueSubmit")) return vkQueueSubmit; + if (!strcmp(funcName, "vkQueueWaitIdle")) return vkQueueWaitIdle; + if (!strcmp(funcName, "vkDeviceWaitIdle")) return vkDeviceWaitIdle; + if (!strcmp(funcName, "vkAllocateMemory")) return vkAllocateMemory; + if (!strcmp(funcName, "vkFreeMemory")) return vkFreeMemory; + if (!strcmp(funcName, "vkMapMemory")) return vkMapMemory; + if (!strcmp(funcName, "vkUnmapMemory")) return vkUnmapMemory; + if (!strcmp(funcName, "vkFlushMappedMemoryRanges")) return vkFlushMappedMemoryRanges; + if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges")) return vkInvalidateMappedMemoryRanges; + if (!strcmp(funcName, "vkGetDeviceMemoryCommitment")) return vkGetDeviceMemoryCommitment; + if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements")) return vkGetImageSparseMemoryRequirements; + if (!strcmp(funcName, "vkGetImageMemoryRequirements")) return vkGetImageMemoryRequirements; + if (!strcmp(funcName, "vkGetBufferMemoryRequirements")) return vkGetBufferMemoryRequirements; + if (!strcmp(funcName, "vkBindImageMemory")) return vkBindImageMemory; + if (!strcmp(funcName, "vkBindBufferMemory")) return vkBindBufferMemory; + if (!strcmp(funcName, "vkQueueBindSparse")) return vkQueueBindSparse; + if (!strcmp(funcName, "vkCreateFence")) return vkCreateFence; + if (!strcmp(funcName, "vkDestroyFence")) return vkDestroyFence; + if (!strcmp(funcName, "vkGetFenceStatus")) return vkGetFenceStatus; + if (!strcmp(funcName, "vkResetFences")) return vkResetFences; + if (!strcmp(funcName, "vkWaitForFences")) return vkWaitForFences; + if (!strcmp(funcName, "vkCreateSemaphore")) return vkCreateSemaphore; + if (!strcmp(funcName, "vkDestroySemaphore")) return vkDestroySemaphore; + if (!strcmp(funcName, "vkCreateEvent")) return vkCreateEvent; + if (!strcmp(funcName, "vkDestroyEvent")) return vkDestroyEvent; + if (!strcmp(funcName, "vkGetEventStatus")) return vkGetEventStatus; + if (!strcmp(funcName, "vkSetEvent")) return vkSetEvent; + if (!strcmp(funcName, "vkResetEvent")) return vkResetEvent; + if (!strcmp(funcName, "vkCreateQueryPool")) return vkCreateQueryPool; + if (!strcmp(funcName, "vkDestroyQueryPool")) return vkDestroyQueryPool; + if (!strcmp(funcName, "vkGetQueryPoolResults")) return vkGetQueryPoolResults; + if (!strcmp(funcName, "vkCreateBuffer")) return vkCreateBuffer; + if (!strcmp(funcName, "vkDestroyBuffer")) return vkDestroyBuffer; + if (!strcmp(funcName, "vkCreateBufferView")) return vkCreateBufferView; + if (!strcmp(funcName, "vkDestroyBufferView")) return vkDestroyBufferView; + if (!strcmp(funcName, "vkCreateImage")) return vkCreateImage; + if (!strcmp(funcName, "vkDestroyImage")) return vkDestroyImage; + if (!strcmp(funcName, "vkGetImageSubresourceLayout")) return vkGetImageSubresourceLayout; + if (!strcmp(funcName, "vkCreateImageView")) return vkCreateImageView; + if (!strcmp(funcName, "vkDestroyImageView")) return vkDestroyImageView; + if (!strcmp(funcName, "vkCreateShaderModule")) return vkCreateShaderModule; + if (!strcmp(funcName, "vkDestroyShaderModule")) return vkDestroyShaderModule; + if (!strcmp(funcName, "vkCreatePipelineCache")) return vkCreatePipelineCache; + if (!strcmp(funcName, "vkDestroyPipelineCache")) return vkDestroyPipelineCache; + if (!strcmp(funcName, "vkGetPipelineCacheData")) return vkGetPipelineCacheData; + if (!strcmp(funcName, "vkMergePipelineCaches")) return vkMergePipelineCaches; + if (!strcmp(funcName, "vkCreateGraphicsPipelines")) return vkCreateGraphicsPipelines; + if (!strcmp(funcName, "vkCreateComputePipelines")) return vkCreateComputePipelines; + if (!strcmp(funcName, "vkDestroyPipeline")) return vkDestroyPipeline; + if (!strcmp(funcName, "vkCreatePipelineLayout")) return vkCreatePipelineLayout; + if (!strcmp(funcName, "vkDestroyPipelineLayout")) return vkDestroyPipelineLayout; + if (!strcmp(funcName, "vkCreateSampler")) return vkCreateSampler; + if (!strcmp(funcName, "vkDestroySampler")) return vkDestroySampler; + if (!strcmp(funcName, "vkCreateDescriptorSetLayout")) return vkCreateDescriptorSetLayout; + if (!strcmp(funcName, "vkDestroyDescriptorSetLayout")) return vkDestroyDescriptorSetLayout; + if (!strcmp(funcName, "vkCreateDescriptorPool")) return vkCreateDescriptorPool; + if (!strcmp(funcName, "vkDestroyDescriptorPool")) return vkDestroyDescriptorPool; + if (!strcmp(funcName, "vkResetDescriptorPool")) return vkResetDescriptorPool; + if (!strcmp(funcName, "vkAllocateDescriptorSets")) return vkAllocateDescriptorSets; + if (!strcmp(funcName, "vkFreeDescriptorSets")) return vkFreeDescriptorSets; + if (!strcmp(funcName, "vkUpdateDescriptorSets")) return vkUpdateDescriptorSets; + if (!strcmp(funcName, "vkCreateFramebuffer")) return vkCreateFramebuffer; + if (!strcmp(funcName, "vkDestroyFramebuffer")) return vkDestroyFramebuffer; + if (!strcmp(funcName, "vkCreateRenderPass")) return vkCreateRenderPass; + if (!strcmp(funcName, "vkDestroyRenderPass")) return vkDestroyRenderPass; + if (!strcmp(funcName, "vkGetRenderAreaGranularity")) return vkGetRenderAreaGranularity; + if (!strcmp(funcName, "vkCreateCommandPool")) return vkCreateCommandPool; + if (!strcmp(funcName, "vkDestroyCommandPool")) return vkDestroyCommandPool; + if (!strcmp(funcName, "vkResetCommandPool")) return vkResetCommandPool; + if (!strcmp(funcName, "vkAllocateCommandBuffers")) return vkAllocateCommandBuffers; + if (!strcmp(funcName, "vkFreeCommandBuffers")) return vkFreeCommandBuffers; + if (!strcmp(funcName, "vkBeginCommandBuffer")) return vkBeginCommandBuffer; + if (!strcmp(funcName, "vkEndCommandBuffer")) return vkEndCommandBuffer; + if (!strcmp(funcName, "vkResetCommandBuffer")) return vkResetCommandBuffer; + if (!strcmp(funcName, "vkCmdBindPipeline")) return vkCmdBindPipeline; + if (!strcmp(funcName, "vkCmdBindDescriptorSets")) return vkCmdBindDescriptorSets; + if (!strcmp(funcName, "vkCmdBindVertexBuffers")) return vkCmdBindVertexBuffers; + if (!strcmp(funcName, "vkCmdBindIndexBuffer")) return vkCmdBindIndexBuffer; + if (!strcmp(funcName, "vkCmdSetViewport")) return vkCmdSetViewport; + if (!strcmp(funcName, "vkCmdSetScissor")) return vkCmdSetScissor; + if (!strcmp(funcName, "vkCmdSetLineWidth")) return vkCmdSetLineWidth; + if (!strcmp(funcName, "vkCmdSetDepthBias")) return vkCmdSetDepthBias; + if (!strcmp(funcName, "vkCmdSetBlendConstants")) return vkCmdSetBlendConstants; + if (!strcmp(funcName, "vkCmdSetDepthBounds")) return vkCmdSetDepthBounds; + if (!strcmp(funcName, "vkCmdSetStencilCompareMask")) return vkCmdSetStencilCompareMask; + if (!strcmp(funcName, "vkCmdSetStencilWriteMask")) return vkCmdSetStencilWriteMask; + if (!strcmp(funcName, "vkCmdSetStencilReference")) return vkCmdSetStencilReference; + if (!strcmp(funcName, "vkCmdDraw")) return vkCmdDraw; + if (!strcmp(funcName, "vkCmdDrawIndexed")) return vkCmdDrawIndexed; + if (!strcmp(funcName, "vkCmdDrawIndirect")) return vkCmdDrawIndirect; + if (!strcmp(funcName, "vkCmdDrawIndexedIndirect")) return vkCmdDrawIndexedIndirect; + if (!strcmp(funcName, "vkCmdDispatch")) return vkCmdDispatch; + if (!strcmp(funcName, "vkCmdDispatchIndirect")) return vkCmdDispatchIndirect; + if (!strcmp(funcName, "vkCmdCopyBuffer")) return vkCmdCopyBuffer; + if (!strcmp(funcName, "vkCmdCopyImage")) return vkCmdCopyImage; + if (!strcmp(funcName, "vkCmdBlitImage")) return vkCmdBlitImage; + if (!strcmp(funcName, "vkCmdCopyBufferToImage")) return vkCmdCopyBufferToImage; + if (!strcmp(funcName, "vkCmdCopyImageToBuffer")) return vkCmdCopyImageToBuffer; + if (!strcmp(funcName, "vkCmdUpdateBuffer")) return vkCmdUpdateBuffer; + if (!strcmp(funcName, "vkCmdFillBuffer")) return vkCmdFillBuffer; + if (!strcmp(funcName, "vkCmdClearColorImage")) return vkCmdClearColorImage; + if (!strcmp(funcName, "vkCmdClearDepthStencilImage")) return vkCmdClearDepthStencilImage; + if (!strcmp(funcName, "vkCmdClearAttachments")) return vkCmdClearAttachments; + if (!strcmp(funcName, "vkCmdResolveImage")) return vkCmdResolveImage; + if (!strcmp(funcName, "vkCmdSetEvent")) return vkCmdSetEvent; + if (!strcmp(funcName, "vkCmdResetEvent")) return vkCmdResetEvent; + if (!strcmp(funcName, "vkCmdWaitEvents")) return vkCmdWaitEvents; + if (!strcmp(funcName, "vkCmdPipelineBarrier")) return vkCmdPipelineBarrier; + if (!strcmp(funcName, "vkCmdBeginQuery")) return vkCmdBeginQuery; + if (!strcmp(funcName, "vkCmdEndQuery")) return vkCmdEndQuery; + if (!strcmp(funcName, "vkCmdResetQueryPool")) return vkCmdResetQueryPool; + if (!strcmp(funcName, "vkCmdWriteTimestamp")) return vkCmdWriteTimestamp; + if (!strcmp(funcName, "vkCmdCopyQueryPoolResults")) return vkCmdCopyQueryPoolResults; + if (!strcmp(funcName, "vkCmdPushConstants")) return vkCmdPushConstants; + if (!strcmp(funcName, "vkCmdBeginRenderPass")) return vkCmdBeginRenderPass; + if (!strcmp(funcName, "vkCmdNextSubpass")) return vkCmdNextSubpass; + if (!strcmp(funcName, "vkCmdEndRenderPass")) return vkCmdEndRenderPass; + if (!strcmp(funcName, "vkCmdExecuteCommands")) return vkCmdExecuteCommands; + + // Core 1.1 functions + if (!strcmp(funcName, "vkEnumeratePhysicalDeviceGroups")) return vkEnumeratePhysicalDeviceGroups; + if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures2")) return vkGetPhysicalDeviceFeatures2; + if (!strcmp(funcName, "vkGetPhysicalDeviceProperties2")) return vkGetPhysicalDeviceProperties2; + if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties2")) return vkGetPhysicalDeviceFormatProperties2; + if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties2")) return vkGetPhysicalDeviceImageFormatProperties2; + if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties2")) return vkGetPhysicalDeviceQueueFamilyProperties2; + if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties2")) return vkGetPhysicalDeviceMemoryProperties2; + if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties2")) + return vkGetPhysicalDeviceSparseImageFormatProperties2; + if (!strcmp(funcName, "vkGetPhysicalDeviceExternalBufferProperties")) return vkGetPhysicalDeviceExternalBufferProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceExternalSemaphoreProperties")) return vkGetPhysicalDeviceExternalSemaphoreProperties; + if (!strcmp(funcName, "vkGetPhysicalDeviceExternalFenceProperties")) return vkGetPhysicalDeviceExternalFenceProperties; + if (!strcmp(funcName, "vkBindBufferMemory2")) return vkBindBufferMemory2; + if (!strcmp(funcName, "vkBindImageMemory2")) return vkBindImageMemory2; + if (!strcmp(funcName, "vkGetDeviceGroupPeerMemoryFeatures")) return vkGetDeviceGroupPeerMemoryFeatures; + if (!strcmp(funcName, "vkCmdSetDeviceMask")) return vkCmdSetDeviceMask; + if (!strcmp(funcName, "vkCmdDispatchBase")) return vkCmdDispatchBase; + if (!strcmp(funcName, "vkGetImageMemoryRequirements2")) return vkGetImageMemoryRequirements2; + if (!strcmp(funcName, "vkTrimCommandPool")) return vkTrimCommandPool; + if (!strcmp(funcName, "vkGetDeviceQueue2")) return vkGetDeviceQueue2; + if (!strcmp(funcName, "vkCreateSamplerYcbcrConversion")) return vkCreateSamplerYcbcrConversion; + if (!strcmp(funcName, "vkDestroySamplerYcbcrConversion")) return vkDestroySamplerYcbcrConversion; + if (!strcmp(funcName, "vkGetDescriptorSetLayoutSupport")) return vkGetDescriptorSetLayoutSupport; + if (!strcmp(funcName, "vkCreateDescriptorUpdateTemplate")) return vkCreateDescriptorUpdateTemplate; + if (!strcmp(funcName, "vkDestroyDescriptorUpdateTemplate")) return vkDestroyDescriptorUpdateTemplate; + if (!strcmp(funcName, "vkUpdateDescriptorSetWithTemplate")) return vkUpdateDescriptorSetWithTemplate; + if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements2")) return vkGetImageSparseMemoryRequirements2; + if (!strcmp(funcName, "vkGetBufferMemoryRequirements2")) return vkGetBufferMemoryRequirements2; + + // Core 1.2 functions + if (!strcmp(funcName, "vkCreateRenderPass2")) return vkCreateRenderPass2; + if (!strcmp(funcName, "vkCmdBeginRenderPass2")) return vkCmdBeginRenderPass2; + if (!strcmp(funcName, "vkCmdNextSubpass2")) return vkCmdNextSubpass2; + if (!strcmp(funcName, "vkCmdEndRenderPass2")) return vkCmdEndRenderPass2; + if (!strcmp(funcName, "vkCmdDrawIndirectCount")) return vkCmdDrawIndirectCount; + if (!strcmp(funcName, "vkCmdDrawIndexedIndirectCount")) return vkCmdDrawIndexedIndirectCount; + if (!strcmp(funcName, "vkGetSemaphoreCounterValue")) return vkGetSemaphoreCounterValue; + if (!strcmp(funcName, "vkWaitSemaphores")) return vkWaitSemaphores; + if (!strcmp(funcName, "vkSignalSemaphore")) return vkSignalSemaphore; + if (!strcmp(funcName, "vkGetBufferDeviceAddress")) return vkGetBufferDeviceAddress; + if (!strcmp(funcName, "vkGetBufferOpaqueCaptureAddress")) return vkGetBufferOpaqueCaptureAddress; + if (!strcmp(funcName, "vkGetDeviceMemoryOpaqueCaptureAddress")) return vkGetDeviceMemoryOpaqueCaptureAddress; + if (!strcmp(funcName, "vkResetQueryPool")) return vkResetQueryPool; + + // Core 1.3 functions + if (!strcmp(funcName, "vkGetPhysicalDeviceToolProperties")) return vkGetPhysicalDeviceToolProperties; + if (!strcmp(funcName, "vkCreatePrivateDataSlot")) return vkCreatePrivateDataSlot; + if (!strcmp(funcName, "vkDestroyPrivateDataSlot")) return vkDestroyPrivateDataSlot; + if (!strcmp(funcName, "vkSetPrivateData")) return vkSetPrivateData; + if (!strcmp(funcName, "vkGetPrivateData")) return vkGetPrivateData; + if (!strcmp(funcName, "vkCmdSetEvent2")) return vkCmdSetEvent2; + if (!strcmp(funcName, "vkCmdResetEvent2")) return vkCmdResetEvent2; + if (!strcmp(funcName, "vkCmdWaitEvents2")) return vkCmdWaitEvents2; + if (!strcmp(funcName, "vkCmdPipelineBarrier2")) return vkCmdPipelineBarrier2; + if (!strcmp(funcName, "vkCmdWriteTimestamp2")) return vkCmdWriteTimestamp2; + if (!strcmp(funcName, "vkQueueSubmit2")) return vkQueueSubmit2; + if (!strcmp(funcName, "vkCmdCopyBuffer2")) return vkCmdCopyBuffer2; + if (!strcmp(funcName, "vkCmdCopyImage2")) return vkCmdCopyImage2; + if (!strcmp(funcName, "vkCmdCopyBufferToImage2")) return vkCmdCopyBufferToImage2; + if (!strcmp(funcName, "vkCmdCopyImageToBuffer2")) return vkCmdCopyImageToBuffer2; + if (!strcmp(funcName, "vkCmdBlitImage2")) return vkCmdBlitImage2; + if (!strcmp(funcName, "vkCmdResolveImage2")) return vkCmdResolveImage2; + if (!strcmp(funcName, "vkCmdBeginRendering")) return vkCmdBeginRendering; + if (!strcmp(funcName, "vkCmdEndRendering")) return vkCmdEndRendering; + if (!strcmp(funcName, "vkCmdSetCullMode")) return vkCmdSetCullMode; + if (!strcmp(funcName, "vkCmdSetFrontFace")) return vkCmdSetFrontFace; + if (!strcmp(funcName, "vkCmdSetPrimitiveTopology")) return vkCmdSetPrimitiveTopology; + if (!strcmp(funcName, "vkCmdSetViewportWithCount")) return vkCmdSetViewportWithCount; + if (!strcmp(funcName, "vkCmdSetScissorWithCount")) return vkCmdSetScissorWithCount; + if (!strcmp(funcName, "vkCmdBindVertexBuffers2")) return vkCmdBindVertexBuffers2; + if (!strcmp(funcName, "vkCmdSetDepthTestEnable")) return vkCmdSetDepthTestEnable; + if (!strcmp(funcName, "vkCmdSetDepthWriteEnable")) return vkCmdSetDepthWriteEnable; + if (!strcmp(funcName, "vkCmdSetDepthCompareOp")) return vkCmdSetDepthCompareOp; + if (!strcmp(funcName, "vkCmdSetDepthBoundsTestEnable")) return vkCmdSetDepthBoundsTestEnable; + if (!strcmp(funcName, "vkCmdSetStencilTestEnable")) return vkCmdSetStencilTestEnable; + if (!strcmp(funcName, "vkCmdSetStencilOp")) return vkCmdSetStencilOp; + if (!strcmp(funcName, "vkCmdSetRasterizerDiscardEnable")) return vkCmdSetRasterizerDiscardEnable; + if (!strcmp(funcName, "vkCmdSetDepthBiasEnable")) return vkCmdSetDepthBiasEnable; + if (!strcmp(funcName, "vkCmdSetPrimitiveRestartEnable")) return vkCmdSetPrimitiveRestartEnable; + if (!strcmp(funcName, "vkGetDeviceBufferMemoryRequirements")) return vkGetDeviceBufferMemoryRequirements; + if (!strcmp(funcName, "vkGetDeviceImageMemoryRequirements")) return vkGetDeviceImageMemoryRequirements; + if (!strcmp(funcName, "vkGetDeviceImageSparseMemoryRequirements")) return vkGetDeviceImageSparseMemoryRequirements; + + // Core 1.4 functions + if (!strcmp(funcName, "vkCmdSetLineStipple")) return vkCmdSetLineStipple; + if (!strcmp(funcName, "vkMapMemory2")) return vkMapMemory2; + if (!strcmp(funcName, "vkUnmapMemory2")) return vkUnmapMemory2; + if (!strcmp(funcName, "vkCmdBindIndexBuffer2")) return vkCmdBindIndexBuffer2; + if (!strcmp(funcName, "vkGetRenderingAreaGranularity")) return vkGetRenderingAreaGranularity; + if (!strcmp(funcName, "vkGetDeviceImageSubresourceLayout")) return vkGetDeviceImageSubresourceLayout; + if (!strcmp(funcName, "vkGetImageSubresourceLayout2")) return vkGetImageSubresourceLayout2; + if (!strcmp(funcName, "vkCmdPushDescriptorSet")) return vkCmdPushDescriptorSet; + if (!strcmp(funcName, "vkCmdPushDescriptorSetWithTemplate")) return vkCmdPushDescriptorSetWithTemplate; + if (!strcmp(funcName, "vkCmdSetRenderingAttachmentLocations")) return vkCmdSetRenderingAttachmentLocations; + if (!strcmp(funcName, "vkCmdSetRenderingInputAttachmentIndices")) return vkCmdSetRenderingInputAttachmentIndices; + if (!strcmp(funcName, "vkCmdBindDescriptorSets2")) return vkCmdBindDescriptorSets2; + if (!strcmp(funcName, "vkCmdPushConstants2")) return vkCmdPushConstants2; + if (!strcmp(funcName, "vkCmdPushDescriptorSet2")) return vkCmdPushDescriptorSet2; + if (!strcmp(funcName, "vkCmdPushDescriptorSetWithTemplate2")) return vkCmdPushDescriptorSetWithTemplate2; + if (!strcmp(funcName, "vkCopyMemoryToImage")) return vkCopyMemoryToImage; + if (!strcmp(funcName, "vkCopyImageToMemory")) return vkCopyImageToMemory; + if (!strcmp(funcName, "vkCopyImageToImage")) return vkCopyImageToImage; + if (!strcmp(funcName, "vkTransitionImageLayout")) return vkTransitionImageLayout; + + // Instance extensions + void *addr; + if (debug_extensions_InstanceGpa(inst, funcName, &addr)) return addr; + + if (wsi_swapchain_instance_gpa(inst, funcName, &addr)) return addr; + + if (extension_instance_gpa(inst, funcName, &addr)) return addr; + + // Unknown physical device extensions + addr = loader_phys_dev_ext_gpa_tramp(inst, funcName); + if (NULL != addr) return addr; + + // Unknown device extensions + addr = loader_dev_ext_gpa_tramp(inst, funcName); + return addr; +} + +void *globalGetProcAddr(const char *name) { + if (!name || name[0] != 'v' || name[1] != 'k') return NULL; + + name += 2; + if (!strcmp(name, "CreateInstance")) return vkCreateInstance; + if (!strcmp(name, "EnumerateInstanceExtensionProperties")) return vkEnumerateInstanceExtensionProperties; + if (!strcmp(name, "EnumerateInstanceLayerProperties")) return vkEnumerateInstanceLayerProperties; + if (!strcmp(name, "EnumerateInstanceVersion")) return vkEnumerateInstanceVersion; + + return NULL; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/gpa_helper.h b/local/recipes/libs/vulkan-loader/source/loader/gpa_helper.h new file mode 100644 index 0000000000..12f1d6a137 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/gpa_helper.h @@ -0,0 +1,29 @@ +/* + * + * Copyright (c) 2015-2021 The Khronos Group Inc. + * Copyright (c) 2015-2021 Valve Corporation + * Copyright (c) 2015-2021 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Charles Giessen + */ + +#pragma once + +#include "loader_common.h" + +void *trampoline_get_proc_addr(struct loader_instance *inst, const char *funcName); + +void *globalGetProcAddr(const char *name); diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader.c b/local/recipes/libs/vulkan-loader/source/loader/loader.c new file mode 100644 index 0000000000..9064cd6332 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader.c @@ -0,0 +1,7511 @@ +/* + * + * Copyright (c) 2014-2023 The Khronos Group Inc. + * Copyright (c) 2014-2023 Valve Corporation + * Copyright (c) 2014-2023 LunarG, Inc. + * Copyright (C) 2015 Google Inc. + * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Mark Young + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#include "loader.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__APPLE__) +#include +#include +#endif + +#include +#if defined(_WIN32) +#include "dirent_on_windows.h" +#elif COMMON_UNIX_PLATFORMS +#include +#else +#warning dirent.h not available on this platform +#endif // _WIN32 + +#include "allocation.h" +#include "stack_allocation.h" +#include "cJSON.h" +#include "debug_utils.h" +#include "loader_environment.h" +#include "loader_json.h" +#include "log.h" +#include "unknown_function_handling.h" +#include "vk_loader_platform.h" +#include "wsi.h" + +#if defined(WIN32) +#include "loader_windows.h" +#endif +#if defined(LOADER_ENABLE_LINUX_SORT) +// This header is currently only used when sorting Linux devices, so don't include it otherwise. +#include "loader_linux.h" +#endif // LOADER_ENABLE_LINUX_SORT + +// Generated file containing all the extension data +#include "vk_loader_extensions.c" + +struct loader_struct loader = {0}; + +struct activated_layer_info { + char *name; + char *manifest; + char *library; + bool is_implicit; + enum loader_layer_enabled_by_what enabled_by_what; + char *disable_env; + char *enable_name_env; + char *enable_value_env; +}; + +// thread safety lock for accessing global data structures such as "loader" +// all entrypoints on the instance chain need to be locked except GPA +// additionally CreateDevice and DestroyDevice needs to be locked +loader_platform_thread_mutex loader_lock; +loader_platform_thread_mutex loader_preload_icd_lock; +loader_platform_thread_mutex loader_global_instance_list_lock; + +// A list of ICDs that gets initialized when the loader does its global initialization. This list should never be used by anything +// other than EnumerateInstanceExtensionProperties(), vkDestroyInstance, and loader_release(). This list does not change +// functionality, but the fact that the libraries already been loaded causes any call that needs to load ICD libraries to speed up +// significantly. This can have a huge impact when making repeated calls to vkEnumerateInstanceExtensionProperties and +// vkCreateInstance. +struct loader_icd_tramp_list preloaded_icds; + +// controls whether loader_platform_close_library() closes the libraries or not - controlled by an environment +// variables - this is just the definition of the variable, usage is in vk_loader_platform.h +bool loader_disable_dynamic_library_unloading; + +LOADER_PLATFORM_THREAD_ONCE_DECLARATION(once_init); + +// Creates loader_api_version struct that contains the major and minor fields, setting patch to 0 +loader_api_version loader_make_version(uint32_t version) { + loader_api_version out_version; + out_version.major = VK_API_VERSION_MAJOR(version); + out_version.minor = VK_API_VERSION_MINOR(version); + out_version.patch = 0; + return out_version; +} + +// Creates loader_api_version struct containing the major, minor, and patch fields +loader_api_version loader_make_full_version(uint32_t version) { + loader_api_version out_version; + out_version.major = VK_API_VERSION_MAJOR(version); + out_version.minor = VK_API_VERSION_MINOR(version); + out_version.patch = VK_API_VERSION_PATCH(version); + return out_version; +} + +loader_api_version loader_combine_version(uint32_t major, uint32_t minor, uint32_t patch) { + loader_api_version out_version; + out_version.major = (uint16_t)major; + out_version.minor = (uint16_t)minor; + out_version.patch = (uint16_t)patch; + return out_version; +} + +// Helper macros for determining if a version is valid or not +bool loader_check_version_meets_required(loader_api_version required, loader_api_version version) { + // major version is satisfied + return (version.major > required.major) || + // major version is equal, minor version is patch version is greater to minimum minor + (version.major == required.major && version.minor > required.minor) || + // major and minor version are equal, patch version is greater or equal to minimum patch + (version.major == required.major && version.minor == required.minor && version.patch >= required.patch); +} + +const char *get_enabled_by_what_str(enum loader_layer_enabled_by_what enabled_by_what) { + switch (enabled_by_what) { + default: + assert(true && "Shouldn't reach this"); + return "Unknown"; + case (ENABLED_BY_WHAT_UNSET): + assert(true && "Shouldn't reach this"); + return "Unknown"; + case (ENABLED_BY_WHAT_LOADER_SETTINGS_FILE): + return "Loader Settings File (Vulkan Configurator)"; + case (ENABLED_BY_WHAT_IMPLICIT_LAYER): + return "Implicit Layer"; + case (ENABLED_BY_WHAT_VK_INSTANCE_LAYERS): + return "Environment Variable VK_INSTANCE_LAYERS"; + case (ENABLED_BY_WHAT_VK_LOADER_LAYERS_ENABLE): + return "Environment Variable VK_LOADER_LAYERS_ENABLE"; + case (ENABLED_BY_WHAT_IN_APPLICATION_API): + return "By the Application"; + case (ENABLED_BY_WHAT_META_LAYER): + return "Meta Layer (Vulkan Configurator)"; + } +} + +// Wrapper around opendir so that the dirent_on_windows gets the instance it needs +// while linux opendir & readdir does not +DIR *loader_opendir(const struct loader_instance *instance, const char *name) { +#if defined(_WIN32) + return opendir(instance ? &instance->alloc_callbacks : NULL, name); +#elif COMMON_UNIX_PLATFORMS + (void)instance; + return opendir(name); +#else +#warning dirent.h - opendir not available on this platform +#endif // _WIN32 +} +int loader_closedir(const struct loader_instance *instance, DIR *dir) { +#if defined(_WIN32) + return closedir(instance ? &instance->alloc_callbacks : NULL, dir); +#elif COMMON_UNIX_PLATFORMS + (void)instance; + return closedir(dir); +#else +#warning dirent.h - closedir not available on this platform +#endif // _WIN32 +} + +bool is_json(const char *path, size_t len) { + if (len < 5) { + return false; + } + return !strncmp(path, ".json", 5); +} + +// Handle error from to library loading +void loader_handle_load_library_error(const struct loader_instance *inst, const char *filename, + enum loader_layer_library_status *lib_status) { + const char *error_message = loader_platform_open_library_error(filename); + // If the error is due to incompatible architecture (eg 32 bit vs 64 bit), report it with INFO level + // Discussed in Github issue 262 & 644 + // "wrong ELF class" is a linux error, " with error 193" is a windows error + VkFlags err_flag = VULKAN_LOADER_ERROR_BIT; + if (strstr(error_message, "wrong ELF class:") != NULL || strstr(error_message, " with error 193") != NULL) { + err_flag = VULKAN_LOADER_INFO_BIT; + if (NULL != lib_status) { + *lib_status = LOADER_LAYER_LIB_ERROR_WRONG_BIT_TYPE; + } + } + // Check if the error is due to lack of memory + // "with error 8" is the windows error code for OOM cases, aka ERROR_NOT_ENOUGH_MEMORY + // Linux doesn't have such a nice error message - only if there are reported issues should this be called + else if (strstr(error_message, " with error 8") != NULL) { + if (NULL != lib_status) { + *lib_status = LOADER_LAYER_LIB_ERROR_OUT_OF_MEMORY; + } + } else if (NULL != lib_status) { + *lib_status = LOADER_LAYER_LIB_ERROR_FAILED_TO_LOAD; + } + loader_log(inst, err_flag, 0, "%s", error_message); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkSetInstanceDispatch(VkInstance instance, void *object) { + struct loader_instance *inst = loader_get_instance(instance); + if (!inst) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "vkSetInstanceDispatch: Can not retrieve Instance dispatch table."); + return VK_ERROR_INITIALIZATION_FAILED; + } + loader_set_dispatch(object, inst->disp); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL vkSetDeviceDispatch(VkDevice device, void *object) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + + if (NULL == icd_term || NULL == dev) { + return VK_ERROR_INITIALIZATION_FAILED; + } + loader_set_dispatch(object, &dev->loader_dispatch); + return VK_SUCCESS; +} + +void loader_free_layer_properties(const struct loader_instance *inst, struct loader_layer_properties *layer_properties) { + loader_instance_heap_free(inst, layer_properties->manifest_file_name); + loader_instance_heap_free(inst, layer_properties->lib_name); + loader_instance_heap_free(inst, layer_properties->functions.str_gipa); + loader_instance_heap_free(inst, layer_properties->functions.str_gdpa); + loader_instance_heap_free(inst, layer_properties->functions.str_negotiate_interface); + loader_destroy_generic_list(inst, (struct loader_generic_list *)&layer_properties->instance_extension_list); + if (layer_properties->device_extension_list.capacity > 0 && NULL != layer_properties->device_extension_list.list) { + for (uint32_t i = 0; i < layer_properties->device_extension_list.count; i++) { + free_string_list(inst, &layer_properties->device_extension_list.list[i].entrypoints); + } + } + loader_destroy_generic_list(inst, (struct loader_generic_list *)&layer_properties->device_extension_list); + loader_instance_heap_free(inst, layer_properties->disable_env_var.name); + loader_instance_heap_free(inst, layer_properties->disable_env_var.value); + loader_instance_heap_free(inst, layer_properties->enable_env_var.name); + loader_instance_heap_free(inst, layer_properties->enable_env_var.value); + free_string_list(inst, &layer_properties->component_layer_names); + loader_instance_heap_free(inst, layer_properties->pre_instance_functions.enumerate_instance_extension_properties); + loader_instance_heap_free(inst, layer_properties->pre_instance_functions.enumerate_instance_layer_properties); + loader_instance_heap_free(inst, layer_properties->pre_instance_functions.enumerate_instance_version); + free_string_list(inst, &layer_properties->override_paths); + free_string_list(inst, &layer_properties->blacklist_layer_names); + free_string_list(inst, &layer_properties->app_key_paths); + + // Make sure to clear out the removed layer, in case new layers are added in the previous location + memset(layer_properties, 0, sizeof(struct loader_layer_properties)); +} + +VkResult loader_init_library_list(struct loader_layer_list *instance_layers, loader_platform_dl_handle **libs) { + if (instance_layers->count > 0) { + *libs = loader_calloc(NULL, sizeof(loader_platform_dl_handle) * instance_layers->count, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (*libs == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + } + return VK_SUCCESS; +} + +VkResult loader_copy_to_new_str(const struct loader_instance *inst, const char *source_str, char **dest_str) { + assert(source_str && dest_str); + size_t str_len = strlen(source_str) + 1; + *dest_str = loader_instance_heap_calloc(inst, str_len, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == *dest_str) return VK_ERROR_OUT_OF_HOST_MEMORY; + loader_strncpy(*dest_str, str_len, source_str, str_len); + (*dest_str)[str_len - 1] = 0; + return VK_SUCCESS; +} + +VkResult create_string_list(const struct loader_instance *inst, uint32_t allocated_count, struct loader_string_list *string_list) { + assert(string_list); + string_list->list = loader_instance_heap_calloc(inst, sizeof(char *) * allocated_count, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == string_list->list) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + string_list->allocated_count = allocated_count; + string_list->count = 0; + return VK_SUCCESS; +} + +VkResult append_str_to_string_list(const struct loader_instance *inst, struct loader_string_list *string_list, char *str) { + assert(string_list && str); + if (string_list->allocated_count == 0) { + string_list->allocated_count = 32; + string_list->list = + loader_instance_heap_calloc(inst, sizeof(char *) * string_list->allocated_count, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == string_list->list) { + loader_instance_heap_free(inst, str); // Must clean up in case of failure + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + } else if (string_list->count + 1 > string_list->allocated_count) { + uint32_t new_allocated_count = string_list->allocated_count * 2; + string_list->list = loader_instance_heap_realloc(inst, string_list->list, sizeof(char *) * string_list->allocated_count, + sizeof(char *) * new_allocated_count, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == string_list->list) { + loader_instance_heap_free(inst, str); // Must clean up in case of failure + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + string_list->allocated_count *= 2; + } + string_list->list[string_list->count++] = str; + return VK_SUCCESS; +} + +VkResult copy_str_to_string_list(const struct loader_instance *inst, struct loader_string_list *string_list, const char *str, + size_t str_len) { + assert(string_list && str); + char *new_str = loader_instance_heap_calloc(inst, sizeof(char *) * str_len + 1, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_str) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + loader_strncpy(new_str, sizeof(char *) * str_len + 1, str, str_len); + new_str[str_len] = '\0'; + return append_str_to_string_list(inst, string_list, new_str); +} + +void free_string_list(const struct loader_instance *inst, struct loader_string_list *string_list) { + assert(string_list); + if (string_list->list) { + for (uint32_t i = 0; i < string_list->count; i++) { + loader_instance_heap_free(inst, string_list->list[i]); + string_list->list[i] = NULL; + } + loader_instance_heap_free(inst, string_list->list); + } + memset(string_list, 0, sizeof(struct loader_string_list)); +} + +// Given string of three part form "maj.min.pat" convert to a vulkan version number. +// Also can understand four part form "variant.major.minor.patch" if provided. +uint32_t loader_parse_version_string(char *vers_str) { + uint32_t variant = 0, major = 0, minor = 0, patch = 0; + char *vers_tok; + char *context = NULL; + if (!vers_str) { + return 0; + } + + vers_tok = thread_safe_strtok(vers_str, ".\"\n\r", &context); + if (NULL != vers_tok) { + major = (uint16_t)atoi(vers_tok); + vers_tok = thread_safe_strtok(NULL, ".\"\n\r", &context); + if (NULL != vers_tok) { + minor = (uint16_t)atoi(vers_tok); + vers_tok = thread_safe_strtok(NULL, ".\"\n\r", &context); + if (NULL != vers_tok) { + patch = (uint16_t)atoi(vers_tok); + vers_tok = thread_safe_strtok(NULL, ".\"\n\r", &context); + // check that we are using a 4 part version string + if (NULL != vers_tok) { + // if we are, move the values over into the correct place + variant = major; + major = minor; + minor = patch; + patch = (uint16_t)atoi(vers_tok); + } + } + } + } + + return VK_MAKE_API_VERSION(variant, major, minor, patch); +} + +bool compare_vk_extension_properties(const VkExtensionProperties *op1, const VkExtensionProperties *op2) { + return strcmp(op1->extensionName, op2->extensionName) == 0 ? true : false; +} + +// Search the given ext_array for an extension matching the given vk_ext_prop +bool has_vk_extension_property_array(const VkExtensionProperties *vk_ext_prop, const uint32_t count, + const VkExtensionProperties *ext_array) { + for (uint32_t i = 0; i < count; i++) { + if (compare_vk_extension_properties(vk_ext_prop, &ext_array[i])) return true; + } + return false; +} + +// Search the given ext_list for an extension matching the given vk_ext_prop +bool has_vk_extension_property(const VkExtensionProperties *vk_ext_prop, const struct loader_extension_list *ext_list) { + for (uint32_t i = 0; i < ext_list->count; i++) { + if (compare_vk_extension_properties(&ext_list->list[i], vk_ext_prop)) return true; + } + return false; +} + +// Search the given ext_list for a device extension matching the given ext_prop +bool has_vk_dev_ext_property(const VkExtensionProperties *ext_prop, const struct loader_device_extension_list *ext_list) { + for (uint32_t i = 0; i < ext_list->count; i++) { + if (compare_vk_extension_properties(&ext_list->list[i].props, ext_prop)) return true; + } + return false; +} + +VkResult loader_append_layer_property(const struct loader_instance *inst, struct loader_layer_list *layer_list, + struct loader_layer_properties *layer_property) { + VkResult res = VK_SUCCESS; + if (layer_list->capacity == 0) { + res = loader_init_generic_list(inst, (struct loader_generic_list *)layer_list, sizeof(struct loader_layer_properties)); + if (VK_SUCCESS != res) { + goto out; + } + } + + // Ensure enough room to add an entry + if ((layer_list->count + 1) * sizeof(struct loader_layer_properties) > layer_list->capacity) { + void *new_ptr = loader_instance_heap_realloc(inst, layer_list->list, layer_list->capacity, layer_list->capacity * 2, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_ptr) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_append_layer_property: realloc failed for layer list"); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + layer_list->list = new_ptr; + layer_list->capacity *= 2; + } + memcpy(&layer_list->list[layer_list->count], layer_property, sizeof(struct loader_layer_properties)); + layer_list->count++; + memset(layer_property, 0, sizeof(struct loader_layer_properties)); +out: + if (res != VK_SUCCESS) { + loader_free_layer_properties(inst, layer_property); + } + return res; +} + +// Search the given layer list for a layer property matching the given layer name +struct loader_layer_properties *loader_find_layer_property(const char *name, const struct loader_layer_list *layer_list) { + for (uint32_t i = 0; i < layer_list->count; i++) { + const VkLayerProperties *item = &layer_list->list[i].info; + if (strcmp(name, item->layerName) == 0) return &layer_list->list[i]; + } + return NULL; +} + +struct loader_layer_properties *loader_find_pointer_layer_property(const char *name, + const struct loader_pointer_layer_list *layer_list) { + for (uint32_t i = 0; i < layer_list->count; i++) { + const VkLayerProperties *item = &layer_list->list[i]->info; + if (strcmp(name, item->layerName) == 0) return layer_list->list[i]; + } + return NULL; +} + +// Search the given layer list for a layer matching the given layer name +bool loader_find_layer_name_in_list(const char *name, const struct loader_pointer_layer_list *layer_list) { + if (NULL == layer_list) { + return false; + } + if (NULL != loader_find_pointer_layer_property(name, layer_list)) { + return true; + } + return false; +} + +// Search the given meta-layer's component list for a layer matching the given layer name +bool loader_find_layer_name_in_meta_layer(const struct loader_instance *inst, const char *layer_name, + struct loader_layer_list *layer_list, struct loader_layer_properties *meta_layer_props) { + for (uint32_t comp_layer = 0; comp_layer < meta_layer_props->component_layer_names.count; comp_layer++) { + if (!strcmp(meta_layer_props->component_layer_names.list[comp_layer], layer_name)) { + return true; + } + struct loader_layer_properties *comp_layer_props = + loader_find_layer_property(meta_layer_props->component_layer_names.list[comp_layer], layer_list); + if (comp_layer_props->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) { + return loader_find_layer_name_in_meta_layer(inst, layer_name, layer_list, comp_layer_props); + } + } + return false; +} + +// Search the override layer's blacklist for a layer matching the given layer name +bool loader_find_layer_name_in_blacklist(const char *layer_name, struct loader_layer_properties *meta_layer_props) { + for (uint32_t black_layer = 0; black_layer < meta_layer_props->blacklist_layer_names.count; ++black_layer) { + if (!strcmp(meta_layer_props->blacklist_layer_names.list[black_layer], layer_name)) { + return true; + } + } + return false; +} + +// Remove all layer properties entries from the list +TEST_FUNCTION_EXPORT void loader_delete_layer_list_and_properties(const struct loader_instance *inst, + struct loader_layer_list *layer_list) { + uint32_t i; + if (!layer_list) return; + + for (i = 0; i < layer_list->count; i++) { + if (layer_list->list[i].lib_handle) { + loader_platform_close_library(layer_list->list[i].lib_handle); + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Unloading layer library %s", + layer_list->list[i].lib_name); + layer_list->list[i].lib_handle = NULL; + } + loader_free_layer_properties(inst, &(layer_list->list[i])); + } + layer_list->count = 0; + + if (layer_list->capacity > 0) { + layer_list->capacity = 0; + loader_instance_heap_free(inst, layer_list->list); + } + memset(layer_list, 0, sizeof(struct loader_layer_list)); +} + +void loader_remove_layer_in_list(const struct loader_instance *inst, struct loader_layer_list *layer_list, + uint32_t layer_to_remove) { + if (layer_list == NULL || layer_to_remove >= layer_list->count) { + return; + } + loader_free_layer_properties(inst, &(layer_list->list[layer_to_remove])); + + // Remove the current invalid meta-layer from the layer list. Use memmove since we are + // overlapping the source and destination addresses. + if (layer_to_remove + 1 <= layer_list->count) { + memmove(&layer_list->list[layer_to_remove], &layer_list->list[layer_to_remove + 1], + sizeof(struct loader_layer_properties) * (layer_list->count - 1 - layer_to_remove)); + } + // Decrement the count (because we now have one less) and decrement the loop index since we need to + // re-check this index. + layer_list->count--; +} + +// Remove all layers in the layer list that are blacklisted by the override layer. +// NOTE: This should only be called if an override layer is found and not expired. +void loader_remove_layers_in_blacklist(const struct loader_instance *inst, struct loader_layer_list *layer_list) { + struct loader_layer_properties *override_prop = loader_find_layer_property(VK_OVERRIDE_LAYER_NAME, layer_list); + if (NULL == override_prop) { + return; + } + + for (int32_t j = 0; j < (int32_t)(layer_list->count); j++) { + struct loader_layer_properties cur_layer_prop = layer_list->list[j]; + const char *cur_layer_name = &cur_layer_prop.info.layerName[0]; + + // Skip the override layer itself. + if (!strcmp(VK_OVERRIDE_LAYER_NAME, cur_layer_name)) { + continue; + } + + // If found in the override layer's blacklist, remove it + if (loader_find_layer_name_in_blacklist(cur_layer_name, override_prop)) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, + "loader_remove_layers_in_blacklist: Override layer is active and layer %s is in the blacklist inside of it. " + "Removing that layer from current layer list.", + cur_layer_name); + loader_remove_layer_in_list(inst, layer_list, j); + j--; + + // Re-do the query for the override layer + override_prop = loader_find_layer_property(VK_OVERRIDE_LAYER_NAME, layer_list); + } + } +} + +// Remove all layers in the layer list that are not found inside any implicit meta-layers. +void loader_remove_layers_not_in_implicit_meta_layers(const struct loader_instance *inst, struct loader_layer_list *layer_list) { + int32_t i; + int32_t j; + int32_t layer_count = (int32_t)(layer_list->count); + + for (i = 0; i < layer_count; i++) { + layer_list->list[i].keep = false; + } + + for (i = 0; i < layer_count; i++) { + struct loader_layer_properties *cur_layer_prop = &layer_list->list[i]; + + if (0 == (cur_layer_prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)) { + cur_layer_prop->keep = true; + continue; + } + for (j = 0; j < layer_count; j++) { + struct loader_layer_properties *layer_to_check = &layer_list->list[j]; + + if (i == j) { + continue; + } + + if (layer_to_check->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) { + // For all layers found in this meta layer, we want to keep them as well. + if (loader_find_layer_name_in_meta_layer(inst, cur_layer_prop->info.layerName, layer_list, layer_to_check)) { + cur_layer_prop->keep = true; + } + } + } + } + + // Remove any layers we don't want to keep (Don't use layer_count here as we need it to be + // dynamically updated if we delete a layer property in the list). + for (i = 0; i < (int32_t)(layer_list->count); i++) { + struct loader_layer_properties *cur_layer_prop = &layer_list->list[i]; + if (!cur_layer_prop->keep) { + loader_log( + inst, VULKAN_LOADER_DEBUG_BIT, 0, + "loader_remove_layers_not_in_implicit_meta_layers : Implicit meta-layers are active, and layer %s is not list " + "inside of any. So removing layer from current layer list.", + cur_layer_prop->info.layerName); + loader_remove_layer_in_list(inst, layer_list, i); + i--; + } + } +} + +VkResult loader_add_instance_extensions(const struct loader_instance *inst, + const PFN_vkEnumerateInstanceExtensionProperties fp_get_props, const char *lib_name, + struct loader_extension_list *ext_list) { + uint32_t i, count = 0; + VkExtensionProperties *ext_props; + VkResult res = VK_SUCCESS; + + if (!fp_get_props) { + // No EnumerateInstanceExtensionProperties defined + goto out; + } + + // Make sure we never call ourself by accident, this should never happen outside of error paths + if (fp_get_props == vkEnumerateInstanceExtensionProperties) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_instance_extensions: %s's vkEnumerateInstanceExtensionProperties points to the loader, this would " + "lead to infinite recursion.", + lib_name); + goto out; + } + + res = fp_get_props(NULL, &count, NULL); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_instance_extensions: Error getting Instance extension count from %s", lib_name); + goto out; + } + + if (count == 0) { + // No ExtensionProperties to report + goto out; + } + + ext_props = loader_stack_alloc(count * sizeof(VkExtensionProperties)); + if (NULL == ext_props) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + res = fp_get_props(NULL, &count, ext_props); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_add_instance_extensions: Error getting Instance extensions from %s", + lib_name); + goto out; + } + + for (i = 0; i < count; i++) { + bool ext_unsupported = wsi_unsupported_instance_extension(&ext_props[i]); + if (!ext_unsupported) { + res = loader_add_to_ext_list(inst, ext_list, 1, &ext_props[i]); + if (res != VK_SUCCESS) { + goto out; + } + } + } + +out: + return res; +} + +VkResult loader_add_device_extensions(const struct loader_instance *inst, + PFN_vkEnumerateDeviceExtensionProperties fpEnumerateDeviceExtensionProperties, + VkPhysicalDevice physical_device, const char *lib_name, + struct loader_extension_list *ext_list) { + uint32_t i = 0, count = 0; + VkResult res = VK_SUCCESS; + VkExtensionProperties *ext_props = NULL; + + res = fpEnumerateDeviceExtensionProperties(physical_device, NULL, &count, NULL); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_device_extensions: Error getting physical device extension info count from library %s", lib_name); + return res; + } + if (count > 0) { + ext_props = loader_stack_alloc(count * sizeof(VkExtensionProperties)); + if (!ext_props) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_device_extensions: Failed to allocate space for device extension properties from library %s.", + lib_name); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + res = fpEnumerateDeviceExtensionProperties(physical_device, NULL, &count, ext_props); + if (res != VK_SUCCESS) { + return res; + } + for (i = 0; i < count; i++) { + res = loader_add_to_ext_list(inst, ext_list, 1, &ext_props[i]); + if (res != VK_SUCCESS) { + return res; + } + } + } + + return VK_SUCCESS; +} + +VkResult loader_init_generic_list(const struct loader_instance *inst, struct loader_generic_list *list_info, size_t element_size) { + size_t capacity = 32 * element_size; + list_info->count = 0; + list_info->capacity = 0; + list_info->list = loader_instance_heap_calloc(inst, capacity, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (list_info->list == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_init_generic_list: Failed to allocate space for generic list"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + list_info->capacity = capacity; + return VK_SUCCESS; +} + +VkResult loader_resize_generic_list(const struct loader_instance *inst, struct loader_generic_list *list_info) { + list_info->list = loader_instance_heap_realloc(inst, list_info->list, list_info->capacity, list_info->capacity * 2, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (list_info->list == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_resize_generic_list: Failed to allocate space for generic list"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + list_info->capacity = list_info->capacity * 2; + return VK_SUCCESS; +} + +void loader_destroy_generic_list(const struct loader_instance *inst, struct loader_generic_list *list) { + loader_instance_heap_free(inst, list->list); + memset(list, 0, sizeof(struct loader_generic_list)); +} + +VkResult loader_get_next_available_entry(const struct loader_instance *inst, struct loader_used_object_list *list_info, + uint32_t *free_index, const VkAllocationCallbacks *pAllocator) { + if (NULL == list_info->list) { + VkResult res = + loader_init_generic_list(inst, (struct loader_generic_list *)list_info, sizeof(struct loader_used_object_status)); + if (VK_SUCCESS != res) { + return res; + } + } + for (uint32_t i = 0; i < list_info->capacity / sizeof(struct loader_used_object_status); i++) { + if (list_info->list[i].status == VK_FALSE) { + list_info->list[i].status = VK_TRUE; + if (pAllocator) { + list_info->list[i].allocation_callbacks = *pAllocator; + } else { + memset(&list_info->list[i].allocation_callbacks, 0, sizeof(VkAllocationCallbacks)); + } + *free_index = i; + return VK_SUCCESS; + } + } + // No free space, must resize + + size_t old_capacity = list_info->capacity; + VkResult res = loader_resize_generic_list(inst, (struct loader_generic_list *)list_info); + if (VK_SUCCESS != res) { + return res; + } + uint32_t new_index = (uint32_t)(old_capacity / sizeof(struct loader_used_object_status)); + // Zero out the newly allocated back half of list. + memset(&list_info->list[new_index], 0, old_capacity); + list_info->list[new_index].status = VK_TRUE; + if (pAllocator) { + list_info->list[new_index].allocation_callbacks = *pAllocator; + } else { + memset(&list_info->list[new_index].allocation_callbacks, 0, sizeof(VkAllocationCallbacks)); + } + *free_index = new_index; + return VK_SUCCESS; +} + +void loader_release_object_from_list(struct loader_used_object_list *list_info, uint32_t index_to_free) { + if (list_info->list && list_info->capacity > index_to_free * sizeof(struct loader_used_object_status)) { + list_info->list[index_to_free].status = VK_FALSE; + memset(&list_info->list[index_to_free].allocation_callbacks, 0, sizeof(VkAllocationCallbacks)); + } +} + +// Append non-duplicate extension properties defined in props to the given ext_list. +// Return - Vk_SUCCESS on success +VkResult loader_add_to_ext_list(const struct loader_instance *inst, struct loader_extension_list *ext_list, + uint32_t prop_list_count, const VkExtensionProperties *props) { + if (ext_list->list == NULL || ext_list->capacity == 0) { + VkResult res = loader_init_generic_list(inst, (struct loader_generic_list *)ext_list, sizeof(VkExtensionProperties)); + if (VK_SUCCESS != res) { + return res; + } + } + + for (uint32_t i = 0; i < prop_list_count; i++) { + const VkExtensionProperties *cur_ext = &props[i]; + + // look for duplicates + if (has_vk_extension_property(cur_ext, ext_list)) { + continue; + } + + // add to list at end + // check for enough capacity + if (ext_list->count * sizeof(VkExtensionProperties) >= ext_list->capacity) { + void *new_ptr = loader_instance_heap_realloc(inst, ext_list->list, ext_list->capacity, ext_list->capacity * 2, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (new_ptr == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_to_ext_list: Failed to reallocate space for extension list"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + ext_list->list = new_ptr; + + // double capacity + ext_list->capacity *= 2; + } + + memcpy(&ext_list->list[ext_list->count], cur_ext, sizeof(VkExtensionProperties)); + ext_list->count++; + } + return VK_SUCCESS; +} + +// Append one extension property defined in props with entrypoints defined in entries to the given +// ext_list. Do not append if a duplicate. +// If this is a duplicate, this function free's the passed in entries - as in it takes ownership over that list (if it is not +// NULL) Return - Vk_SUCCESS on success +VkResult loader_add_to_dev_ext_list(const struct loader_instance *inst, struct loader_device_extension_list *ext_list, + const VkExtensionProperties *props, struct loader_string_list *entrys) { + VkResult res = VK_SUCCESS; + bool should_free_entrys = true; + if (ext_list->list == NULL || ext_list->capacity == 0) { + res = loader_init_generic_list(inst, (struct loader_generic_list *)ext_list, sizeof(struct loader_dev_ext_props)); + if (VK_SUCCESS != res) { + goto out; + } + } + + // look for duplicates + if (has_vk_dev_ext_property(props, ext_list)) { + goto out; + } + + uint32_t idx = ext_list->count; + // add to list at end + // check for enough capacity + if (idx * sizeof(struct loader_dev_ext_props) >= ext_list->capacity) { + void *new_ptr = loader_instance_heap_realloc(inst, ext_list->list, ext_list->capacity, ext_list->capacity * 2, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + + if (NULL == new_ptr) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_to_dev_ext_list: Failed to reallocate space for device extension list"); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + ext_list->list = new_ptr; + + // double capacity + ext_list->capacity *= 2; + } + + memcpy(&ext_list->list[idx].props, props, sizeof(*props)); + if (entrys) { + ext_list->list[idx].entrypoints = *entrys; + should_free_entrys = false; + } + ext_list->count++; +out: + if (NULL != entrys && should_free_entrys) { + free_string_list(inst, entrys); + } + return res; +} + +// Create storage for pointers to loader_layer_properties +bool loader_init_pointer_layer_list(const struct loader_instance *inst, struct loader_pointer_layer_list *list) { + list->capacity = 32 * sizeof(void *); + list->list = loader_instance_heap_calloc(inst, list->capacity, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (list->list == NULL) { + return false; + } + list->count = 0; + return true; +} + +// Search the given array of layer names for an entry matching the given VkLayerProperties +bool loader_names_array_has_layer_property(const VkLayerProperties *vk_layer_prop, uint32_t layer_info_count, + struct activated_layer_info *layer_info) { + for (uint32_t i = 0; i < layer_info_count; i++) { + if (strcmp(vk_layer_prop->layerName, layer_info[i].name) == 0) { + return true; + } + } + return false; +} + +void loader_destroy_pointer_layer_list(const struct loader_instance *inst, struct loader_pointer_layer_list *layer_list) { + loader_instance_heap_free(inst, layer_list->list); + memset(layer_list, 0, sizeof(struct loader_pointer_layer_list)); +} + +// Append layer properties defined in prop_list to the given layer_info list +VkResult loader_add_layer_properties_to_list(const struct loader_instance *inst, struct loader_pointer_layer_list *list, + struct loader_layer_properties *props) { + if (list->list == NULL || list->capacity == 0) { + if (!loader_init_pointer_layer_list(inst, list)) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + } + + // Check for enough capacity + if (((list->count + 1) * sizeof(struct loader_layer_properties)) >= list->capacity) { + size_t new_capacity = list->capacity * 2; + void *new_ptr = + loader_instance_heap_realloc(inst, list->list, list->capacity, new_capacity, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_ptr) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_layer_properties_to_list: Realloc failed for when attempting to add new layer"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + list->list = new_ptr; + list->capacity = new_capacity; + } + list->list[list->count++] = props; + + return VK_SUCCESS; +} + +// Determine if the provided explicit layer should be available by querying the appropriate environmental variables. +bool loader_layer_is_available(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + const struct loader_layer_properties *prop) { + bool available = true; + bool is_implicit = (0 == (prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)); + bool disabled_by_type = + (is_implicit) ? (filters->disable_filter.disable_all_implicit) : (filters->disable_filter.disable_all_explicit); + if ((filters->disable_filter.disable_all || disabled_by_type || + check_name_matches_filter_environment_var(prop->info.layerName, &filters->disable_filter.additional_filters)) && + !check_name_matches_filter_environment_var(prop->info.layerName, &filters->allow_filter)) { + available = false; + } + if (check_name_matches_filter_environment_var(prop->info.layerName, &filters->enable_filter)) { + available = true; + } else if (!available) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" forced disabled because name matches filter of env var \'%s\'.", prop->info.layerName, + VK_LAYERS_DISABLE_ENV_VAR); + } + + return available; +} + +// Search the given search_list for any layers in the props list. Add these to the +// output layer_list. +VkResult loader_add_layer_names_to_list(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + struct loader_pointer_layer_list *output_list, + struct loader_pointer_layer_list *expanded_output_list, uint32_t name_count, + const char *const *names, const struct loader_layer_list *source_list) { + VkResult err = VK_SUCCESS; + + for (uint32_t i = 0; i < name_count; i++) { + const char *source_name = names[i]; + + struct loader_layer_properties *layer_prop = loader_find_layer_property(source_name, source_list); + if (NULL == layer_prop) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_names_to_list: Unable to find layer \"%s\"", source_name); + err = VK_ERROR_LAYER_NOT_PRESENT; + continue; + } + + // Make sure the layer isn't already in the output_list, skip adding it if it is. + if (loader_find_layer_name_in_list(source_name, output_list)) { + continue; + } + + if (!loader_layer_is_available(inst, filters, layer_prop)) { + continue; + } + + // If not a meta-layer, simply add it. + if (0 == (layer_prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER)) { + layer_prop->enabled_by_what = ENABLED_BY_WHAT_IN_APPLICATION_API; + err = loader_add_layer_properties_to_list(inst, output_list, layer_prop); + if (err == VK_ERROR_OUT_OF_HOST_MEMORY) return err; + err = loader_add_layer_properties_to_list(inst, expanded_output_list, layer_prop); + if (err == VK_ERROR_OUT_OF_HOST_MEMORY) return err; + } else { + err = loader_add_meta_layer(inst, filters, layer_prop, output_list, expanded_output_list, source_list, NULL); + if (err == VK_ERROR_OUT_OF_HOST_MEMORY) return err; + } + } + + return err; +} + +// Determine if the provided implicit layer should be enabled by querying the appropriate environmental variables. +// For an implicit layer, at least a disable environment variable is required. +bool loader_implicit_layer_is_enabled(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + const struct loader_layer_properties *prop) { + bool enable = false; + bool forced_disabled = false; + bool forced_enabled = false; + + if ((filters->disable_filter.disable_all || filters->disable_filter.disable_all_implicit || + check_name_matches_filter_environment_var(prop->info.layerName, &filters->disable_filter.additional_filters)) && + !check_name_matches_filter_environment_var(prop->info.layerName, &filters->allow_filter)) { + forced_disabled = true; + } + if (check_name_matches_filter_environment_var(prop->info.layerName, &filters->enable_filter)) { + forced_enabled = true; + } + + // If no enable_environment variable is specified, this implicit layer is always be enabled by default. + if (NULL == prop->enable_env_var.name) { + enable = true; + } else { + char *env_value = loader_getenv(prop->enable_env_var.name, inst); + if (env_value && !strcmp(prop->enable_env_var.value, env_value)) { + enable = true; + } + + // Otherwise, only enable this layer if the enable environment variable is defined + loader_free_getenv(env_value, inst); + } + + if (forced_enabled) { + // Only report a message that we've forced on a layer if it wouldn't have been enabled + // normally. + if (!enable) { + enable = true; + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Implicit layer \"%s\" forced enabled due to env var \'%s\'.", prop->info.layerName, + VK_LAYERS_ENABLE_ENV_VAR); + } + } else if (enable && forced_disabled) { + enable = false; + // Report a message that we've forced off a layer if it would have been enabled normally. + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Implicit layer \"%s\" forced disabled because name matches filter of env var \'%s\'.", prop->info.layerName, + VK_LAYERS_DISABLE_ENV_VAR); + return enable; + } + + // The disable_environment has priority over everything else. If it is defined, the layer is always + // disabled. + if (NULL != prop->disable_env_var.name) { + char *env_value = loader_getenv(prop->disable_env_var.name, inst); + if (NULL != env_value) { + enable = false; + } + loader_free_getenv(env_value, inst); + } else if ((prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER) == 0) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Implicit layer \"%s\" missing disabled environment variable!", prop->info.layerName); + } + + // Enable this layer if it is included in the override layer + if (inst != NULL && inst->override_layer_present) { + struct loader_layer_properties *override = NULL; + for (uint32_t i = 0; i < inst->instance_layer_list.count; ++i) { + if (strcmp(inst->instance_layer_list.list[i].info.layerName, VK_OVERRIDE_LAYER_NAME) == 0) { + override = &inst->instance_layer_list.list[i]; + break; + } + } + if (override != NULL) { + for (uint32_t i = 0; i < override->component_layer_names.count; ++i) { + if (strcmp(override->component_layer_names.list[i], prop->info.layerName) == 0) { + enable = true; + break; + } + } + } + } + + return enable; +} + +// Check the individual implicit layer for the enable/disable environment variable settings. Only add it after +// every check has passed indicating it should be used, including making sure a layer of the same name hasn't already been +// added. +VkResult loader_add_implicit_layer(const struct loader_instance *inst, struct loader_layer_properties *prop, + const struct loader_envvar_all_filters *filters, struct loader_pointer_layer_list *target_list, + struct loader_pointer_layer_list *expanded_target_list, + const struct loader_layer_list *source_list) { + VkResult result = VK_SUCCESS; + if (loader_implicit_layer_is_enabled(inst, filters, prop)) { + if (0 == (prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER)) { + // Make sure the layer isn't already in the output_list, skip adding it if it is. + if (loader_find_layer_name_in_list(&prop->info.layerName[0], target_list)) { + return result; + } + prop->enabled_by_what = ENABLED_BY_WHAT_IMPLICIT_LAYER; + result = loader_add_layer_properties_to_list(inst, target_list, prop); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + if (NULL != expanded_target_list) { + result = loader_add_layer_properties_to_list(inst, expanded_target_list, prop); + } + } else { + result = loader_add_meta_layer(inst, filters, prop, target_list, expanded_target_list, source_list, NULL); + } + } + return result; +} + +// Add the component layers of a meta-layer to the active list of layers +VkResult loader_add_meta_layer(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + struct loader_layer_properties *prop, struct loader_pointer_layer_list *target_list, + struct loader_pointer_layer_list *expanded_target_list, const struct loader_layer_list *source_list, + bool *out_found_all_component_layers) { + VkResult result = VK_SUCCESS; + bool found_all_component_layers = true; + + // We need to add all the individual component layers + loader_api_version meta_layer_api_version = loader_make_version(prop->info.specVersion); + for (uint32_t comp_layer = 0; comp_layer < prop->component_layer_names.count; comp_layer++) { + struct loader_layer_properties *search_prop = + loader_find_layer_property(prop->component_layer_names.list[comp_layer], source_list); + if (search_prop != NULL) { + loader_api_version search_prop_version = loader_make_version(prop->info.specVersion); + if (!loader_check_version_meets_required(meta_layer_api_version, search_prop_version)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Meta-layer \"%s\" API version %u.%u, component layer \"%s\" version %u.%u, may have " + "incompatibilities (Policy #LLP_LAYER_8)!", + prop->info.layerName, meta_layer_api_version.major, meta_layer_api_version.minor, + search_prop->info.layerName, search_prop_version.major, search_prop_version.minor); + } + + if (!loader_layer_is_available(inst, filters, search_prop)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Meta Layer \"%s\" component layer \"%s\" disabled.", prop->info.layerName, search_prop->info.layerName); + continue; + } + + // If the component layer is itself an implicit layer, we need to do the implicit layer enable + // checks + if (0 == (search_prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)) { + search_prop->enabled_by_what = ENABLED_BY_WHAT_META_LAYER; + result = loader_add_implicit_layer(inst, search_prop, filters, target_list, expanded_target_list, source_list); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + } else { + if (0 != (search_prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER)) { + bool found_layers_in_component_meta_layer = true; + search_prop->enabled_by_what = ENABLED_BY_WHAT_META_LAYER; + result = loader_add_meta_layer(inst, filters, search_prop, target_list, expanded_target_list, source_list, + &found_layers_in_component_meta_layer); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + if (!found_layers_in_component_meta_layer) found_all_component_layers = false; + } else if (!loader_find_layer_name_in_list(&search_prop->info.layerName[0], target_list)) { + // Make sure the layer isn't already in the output_list, skip adding it if it is. + search_prop->enabled_by_what = ENABLED_BY_WHAT_META_LAYER; + result = loader_add_layer_properties_to_list(inst, target_list, search_prop); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + if (NULL != expanded_target_list) { + result = loader_add_layer_properties_to_list(inst, expanded_target_list, search_prop); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + } + } + } + } else { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Failed to find layer name \"%s\" component layer \"%s\" to activate (Policy #LLP_LAYER_7)", + prop->component_layer_names.list[comp_layer], prop->component_layer_names.list[comp_layer]); + found_all_component_layers = false; + } + } + + // Add this layer to the overall target list (not the expanded one) + if (found_all_component_layers) { + prop->enabled_by_what = ENABLED_BY_WHAT_META_LAYER; + result = loader_add_layer_properties_to_list(inst, target_list, prop); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + // Write the result to out_found_all_component_layers in case this function is being recursed + if (out_found_all_component_layers) *out_found_all_component_layers = found_all_component_layers; + } + + return result; +} + +VkExtensionProperties *get_extension_property(const char *name, const struct loader_extension_list *list) { + for (uint32_t i = 0; i < list->count; i++) { + if (strcmp(name, list->list[i].extensionName) == 0) return &list->list[i]; + } + return NULL; +} + +VkExtensionProperties *get_dev_extension_property(const char *name, const struct loader_device_extension_list *list) { + for (uint32_t i = 0; i < list->count; i++) { + if (strcmp(name, list->list[i].props.extensionName) == 0) return &list->list[i].props; + } + return NULL; +} + +// For Instance extensions implemented within the loader (i.e. DEBUG_REPORT +// the extension must provide two entry points for the loader to use: +// - "trampoline" entry point - this is the address returned by GetProcAddr +// and will always do what's necessary to support a +// global call. +// - "terminator" function - this function will be put at the end of the +// instance chain and will contain the necessary logic +// to call / process the extension for the appropriate +// ICDs that are available. +// There is no generic mechanism for including these functions, the references +// must be placed into the appropriate loader entry points. +// GetInstanceProcAddr: call extension GetInstanceProcAddr to check for GetProcAddr +// requests +// loader_coalesce_extensions(void) - add extension records to the list of global +// extension available to the app. +// instance_disp - add function pointer for terminator function +// to this array. +// The extension itself should be in a separate file that will be linked directly +// with the loader. +VkResult loader_get_icd_loader_instance_extensions(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list, + struct loader_extension_list *inst_exts) { + struct loader_extension_list icd_exts; + VkResult res = VK_SUCCESS; + char *env_value; + bool filter_extensions = true; + + // Check if a user wants to disable the instance extension filtering behavior + env_value = loader_getenv("VK_LOADER_DISABLE_INST_EXT_FILTER", inst); + if (NULL != env_value && atoi(env_value) != 0) { + filter_extensions = false; + } + loader_free_getenv(env_value, inst); + + // traverse scanned icd list adding non-duplicate extensions to the list + for (uint32_t i = 0; i < icd_tramp_list->count; i++) { + res = loader_init_generic_list(inst, (struct loader_generic_list *)&icd_exts, sizeof(VkExtensionProperties)); + if (VK_SUCCESS != res) { + goto out; + } + res = loader_add_instance_extensions(inst, icd_tramp_list->scanned_list[i].EnumerateInstanceExtensionProperties, + icd_tramp_list->scanned_list[i].lib_name, &icd_exts); + if (VK_SUCCESS == res) { + if (filter_extensions) { + // Remove any extensions not recognized by the loader + for (int32_t j = 0; j < (int32_t)icd_exts.count; j++) { + // See if the extension is in the list of supported extensions + bool found = false; + for (uint32_t k = 0; LOADER_INSTANCE_EXTENSIONS[k] != NULL; k++) { + if (strcmp(icd_exts.list[j].extensionName, LOADER_INSTANCE_EXTENSIONS[k]) == 0) { + found = true; + break; + } + } + + // If it isn't in the list, remove it + if (!found) { + for (uint32_t k = j + 1; k < icd_exts.count; k++) { + icd_exts.list[k - 1] = icd_exts.list[k]; + } + --icd_exts.count; + --j; + } + } + } + + res = loader_add_to_ext_list(inst, inst_exts, icd_exts.count, icd_exts.list); + } + loader_destroy_generic_list(inst, (struct loader_generic_list *)&icd_exts); + if (VK_SUCCESS != res) { + goto out; + } + }; + + // Traverse loader's extensions, adding non-duplicate extensions to the list + res = add_debug_extensions_to_ext_list(inst, inst_exts); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + const VkExtensionProperties portability_enumeration_extension_info[] = { + {VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION}}; + + // Add VK_KHR_portability_subset + res = loader_add_to_ext_list(inst, inst_exts, sizeof(portability_enumeration_extension_info) / sizeof(VkExtensionProperties), + portability_enumeration_extension_info); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + + const VkExtensionProperties direct_driver_loading_extension_info[] = { + {VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME, VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION}}; + + // Add VK_LUNARG_direct_driver_loading + res = loader_add_to_ext_list(inst, inst_exts, sizeof(direct_driver_loading_extension_info) / sizeof(VkExtensionProperties), + direct_driver_loading_extension_info); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + +out: + return res; +} + +struct loader_icd_term *loader_get_icd_and_device(const void *device, struct loader_device **found_dev) { + VkLayerDispatchTable *dispatch_table_device = loader_get_dispatch(device); + if (NULL == dispatch_table_device) { + *found_dev = NULL; + return NULL; + } + loader_platform_thread_lock_mutex(&loader_global_instance_list_lock); + *found_dev = NULL; + + for (struct loader_instance *inst = loader.instances; inst; inst = inst->next) { + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) { + for (struct loader_device *dev = icd_term->logical_device_list; dev; dev = dev->next) { + // Value comparison of device prevents object wrapping by layers + if (loader_get_dispatch(dev->icd_device) == dispatch_table_device || + (dev->chain_device != VK_NULL_HANDLE && loader_get_dispatch(dev->chain_device) == dispatch_table_device)) { + *found_dev = dev; + loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock); + return icd_term; + } + } + } + } + loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock); + return NULL; +} + +void loader_destroy_logical_device(struct loader_device *dev, const VkAllocationCallbacks *pAllocator) { + if (pAllocator) { + dev->alloc_callbacks = *pAllocator; + } + loader_device_heap_free(dev, dev); +} + +struct loader_device *loader_create_logical_device(const struct loader_instance *inst, const VkAllocationCallbacks *pAllocator) { + struct loader_device *new_dev; + new_dev = loader_calloc(pAllocator, sizeof(struct loader_device), VK_SYSTEM_ALLOCATION_SCOPE_DEVICE); + + if (!new_dev) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_create_logical_device: Failed to alloc struct loader_device"); + return NULL; + } + + new_dev->loader_dispatch.core_dispatch.magic = DEVICE_DISP_TABLE_MAGIC_NUMBER; + + if (pAllocator) { + new_dev->alloc_callbacks = *pAllocator; + } + + return new_dev; +} + +void loader_add_logical_device(struct loader_icd_term *icd_term, struct loader_device *dev) { + dev->next = icd_term->logical_device_list; + icd_term->logical_device_list = dev; +} + +void loader_remove_logical_device(struct loader_icd_term *icd_term, struct loader_device *found_dev, + const VkAllocationCallbacks *pAllocator) { + struct loader_device *dev, *prev_dev; + + if (!icd_term || !found_dev) return; + + prev_dev = NULL; + dev = icd_term->logical_device_list; + while (dev && dev != found_dev) { + prev_dev = dev; + dev = dev->next; + } + + if (prev_dev) + prev_dev->next = found_dev->next; + else + icd_term->logical_device_list = found_dev->next; + loader_destroy_logical_device(found_dev, pAllocator); +} + +const VkAllocationCallbacks *ignore_null_callback(const VkAllocationCallbacks *callbacks) { + return NULL != callbacks->pfnAllocation && NULL != callbacks->pfnFree && NULL != callbacks->pfnReallocation && + NULL != callbacks->pfnInternalAllocation && NULL != callbacks->pfnInternalFree + ? callbacks + : NULL; +} + +// Try to close any open objects on the loader_icd_term - this must be done before destroying the instance +void loader_icd_close_objects(struct loader_instance *ptr_inst, struct loader_icd_term *icd_term) { + for (uint32_t i = 0; i < icd_term->surface_list.capacity / sizeof(VkSurfaceKHR); i++) { + if (ptr_inst->surfaces_list.capacity > i * sizeof(struct loader_used_object_status) && + ptr_inst->surfaces_list.list[i].status == VK_TRUE && NULL != icd_term->surface_list.list && + icd_term->surface_list.list[i] && NULL != icd_term->dispatch.DestroySurfaceKHR) { + icd_term->dispatch.DestroySurfaceKHR(icd_term->instance, icd_term->surface_list.list[i], + ignore_null_callback(&(ptr_inst->surfaces_list.list[i].allocation_callbacks))); + icd_term->surface_list.list[i] = (VkSurfaceKHR)(uintptr_t)NULL; + } + } + for (uint32_t i = 0; i < icd_term->debug_utils_messenger_list.capacity / sizeof(VkDebugUtilsMessengerEXT); i++) { + if (ptr_inst->debug_utils_messengers_list.capacity > i * sizeof(struct loader_used_object_status) && + ptr_inst->debug_utils_messengers_list.list[i].status == VK_TRUE && NULL != icd_term->debug_utils_messenger_list.list && + icd_term->debug_utils_messenger_list.list[i] && NULL != icd_term->dispatch.DestroyDebugUtilsMessengerEXT) { + icd_term->dispatch.DestroyDebugUtilsMessengerEXT( + icd_term->instance, icd_term->debug_utils_messenger_list.list[i], + ignore_null_callback(&(ptr_inst->debug_utils_messengers_list.list[i].allocation_callbacks))); + icd_term->debug_utils_messenger_list.list[i] = (VkDebugUtilsMessengerEXT)(uintptr_t)NULL; + } + } + for (uint32_t i = 0; i < icd_term->debug_report_callback_list.capacity / sizeof(VkDebugReportCallbackEXT); i++) { + if (ptr_inst->debug_report_callbacks_list.capacity > i * sizeof(struct loader_used_object_status) && + ptr_inst->debug_report_callbacks_list.list[i].status == VK_TRUE && NULL != icd_term->debug_report_callback_list.list && + icd_term->debug_report_callback_list.list[i] && NULL != icd_term->dispatch.DestroyDebugReportCallbackEXT) { + icd_term->dispatch.DestroyDebugReportCallbackEXT( + icd_term->instance, icd_term->debug_report_callback_list.list[i], + ignore_null_callback(&(ptr_inst->debug_report_callbacks_list.list[i].allocation_callbacks))); + icd_term->debug_report_callback_list.list[i] = (VkDebugReportCallbackEXT)(uintptr_t)NULL; + } + } +} +// Free resources allocated inside the loader_icd_term +void loader_icd_destroy(struct loader_instance *ptr_inst, struct loader_icd_term *icd_term, + const VkAllocationCallbacks *pAllocator) { + ptr_inst->icd_terms_count--; + for (struct loader_device *dev = icd_term->logical_device_list; dev;) { + struct loader_device *next_dev = dev->next; + loader_destroy_logical_device(dev, pAllocator); + dev = next_dev; + } + + loader_destroy_generic_list(ptr_inst, (struct loader_generic_list *)&icd_term->surface_list); + loader_destroy_generic_list(ptr_inst, (struct loader_generic_list *)&icd_term->debug_utils_messenger_list); + loader_destroy_generic_list(ptr_inst, (struct loader_generic_list *)&icd_term->debug_report_callback_list); + + loader_instance_heap_free(ptr_inst, icd_term); +} + +struct loader_icd_term *loader_icd_add(struct loader_instance *ptr_inst, const struct loader_scanned_icd *scanned_icd) { + struct loader_icd_term *icd_term; + + icd_term = loader_instance_heap_calloc(ptr_inst, sizeof(struct loader_icd_term), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (!icd_term) { + return NULL; + } + + icd_term->scanned_icd = scanned_icd; + icd_term->this_instance = ptr_inst; + + // Prepend to the list + icd_term->next = ptr_inst->icd_terms; + ptr_inst->icd_terms = icd_term; + ptr_inst->icd_terms_count++; + + return icd_term; +} +// Closes the library handle in the scanned ICD, free the lib_name string, and zeros out all data +void loader_unload_scanned_icd(struct loader_instance *inst, struct loader_scanned_icd *scanned_icd) { + if (NULL == scanned_icd) { + return; + } + if (scanned_icd->handle) { + loader_platform_close_library(scanned_icd->handle); + scanned_icd->handle = NULL; + } + loader_instance_heap_free(inst, scanned_icd->lib_name); + memset(scanned_icd, 0, sizeof(struct loader_scanned_icd)); +} + +// Determine the ICD interface version to use. +// @param icd +// @param pVersion Output parameter indicating which version to use or 0 if +// the negotiation API is not supported by the ICD +// @return bool indicating true if the selected interface version is supported +// by the loader, false indicates the version is not supported +bool loader_get_icd_interface_version(PFN_vkNegotiateLoaderICDInterfaceVersion fp_negotiate_icd_version, uint32_t *pVersion) { + if (fp_negotiate_icd_version == NULL) { + // ICD does not support the negotiation API, it supports version 0 or 1 + // calling code must determine if it is version 0 or 1 + *pVersion = 0; + } else { + // ICD supports the negotiation API, so call it with the loader's + // latest version supported + *pVersion = CURRENT_LOADER_ICD_INTERFACE_VERSION; + VkResult result = fp_negotiate_icd_version(pVersion); + + if (result == VK_ERROR_INCOMPATIBLE_DRIVER) { + // ICD no longer supports the loader's latest interface version so + // fail loading the ICD + return false; + } + } + +#if MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION > 0 + if (*pVersion < MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION) { + // Loader no longer supports the ICD's latest interface version so fail + // loading the ICD + return false; + } +#endif + return true; +} + +void loader_clear_scanned_icd_list(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list) { + if (0 != icd_tramp_list->capacity && icd_tramp_list->scanned_list) { + for (uint32_t i = 0; i < icd_tramp_list->count; i++) { + if (icd_tramp_list->scanned_list[i].handle) { + loader_platform_close_library(icd_tramp_list->scanned_list[i].handle); + icd_tramp_list->scanned_list[i].handle = NULL; + } + loader_instance_heap_free(inst, icd_tramp_list->scanned_list[i].lib_name); + } + loader_instance_heap_free(inst, icd_tramp_list->scanned_list); + } + memset(icd_tramp_list, 0, sizeof(struct loader_icd_tramp_list)); +} + +VkResult loader_init_scanned_icd_list(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list) { + VkResult res = VK_SUCCESS; + loader_clear_scanned_icd_list(inst, icd_tramp_list); + icd_tramp_list->capacity = 8 * sizeof(struct loader_scanned_icd); + icd_tramp_list->scanned_list = loader_instance_heap_alloc(inst, icd_tramp_list->capacity, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == icd_tramp_list->scanned_list) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_init_scanned_icd_list: Realloc failed for layer list when attempting to add new layer"); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + } + return res; +} + +VkResult loader_add_direct_driver(const struct loader_instance *inst, uint32_t index, + const VkDirectDriverLoadingInfoLUNARG *pDriver, struct loader_icd_tramp_list *icd_tramp_list) { + // Assume pDriver is valid, since there is no real way to check it. Calling code should make sure the pointer to the array + // of VkDirectDriverLoadingInfoLUNARG structures is non-null. + if (NULL == pDriver->pfnGetInstanceProcAddr) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: VkDirectDriverLoadingInfoLUNARG structure at index %d contains a NULL pointer for the " + "pfnGetInstanceProcAddr member, skipping.", + index); + return VK_ERROR_INITIALIZATION_FAILED; + } + + PFN_vkGetInstanceProcAddr fp_get_proc_addr = pDriver->pfnGetInstanceProcAddr; + PFN_vkCreateInstance fp_create_inst = NULL; + PFN_vkEnumerateInstanceExtensionProperties fp_get_inst_ext_props = NULL; + PFN_GetPhysicalDeviceProcAddr fp_get_phys_dev_proc_addr = NULL; + PFN_vkNegotiateLoaderICDInterfaceVersion fp_negotiate_icd_version = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vk_icdEnumerateAdapterPhysicalDevices fp_enum_dxgi_adapter_phys_devs = NULL; +#endif + struct loader_scanned_icd *new_scanned_icd; + uint32_t interface_version = 0; + + // Try to get the negotiate ICD interface version function + fp_negotiate_icd_version = (PFN_vk_icdNegotiateLoaderICDInterfaceVersion)pDriver->pfnGetInstanceProcAddr( + NULL, "vk_icdNegotiateLoaderICDInterfaceVersion"); + + if (NULL == fp_negotiate_icd_version) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: Could not get 'vk_icdNegotiateLoaderICDInterfaceVersion' from " + "VkDirectDriverLoadingInfoLUNARG structure at " + "index %d, skipping.", + index); + return VK_ERROR_INITIALIZATION_FAILED; + } + + if (!loader_get_icd_interface_version(fp_negotiate_icd_version, &interface_version)) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: VkDirectDriverLoadingInfoLUNARG structure at index %d supports interface version %d, " + "which is incompatible with the Loader Driver Interface version that supports the VK_LUNARG_direct_driver_loading " + "extension, skipping.", + index, interface_version); + return VK_ERROR_INITIALIZATION_FAILED; + } + + if (interface_version < 7) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: VkDirectDriverLoadingInfoLUNARG structure at index %d supports interface version %d, " + "which is incompatible with the Loader Driver Interface version that supports the VK_LUNARG_direct_driver_loading " + "extension, skipping.", + index, interface_version); + return VK_ERROR_INITIALIZATION_FAILED; + } + + fp_create_inst = (PFN_vkCreateInstance)pDriver->pfnGetInstanceProcAddr(NULL, "vkCreateInstance"); + if (NULL == fp_create_inst) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: Could not get 'vkCreateInstance' from VkDirectDriverLoadingInfoLUNARG structure at " + "index %d, skipping.", + index); + return VK_ERROR_INITIALIZATION_FAILED; + } + fp_get_inst_ext_props = + (PFN_vkEnumerateInstanceExtensionProperties)pDriver->pfnGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties"); + if (NULL == fp_get_inst_ext_props) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: Could not get 'vkEnumerateInstanceExtensionProperties' from " + "VkDirectDriverLoadingInfoLUNARG structure at index %d, skipping.", + index); + return VK_ERROR_INITIALIZATION_FAILED; + } + + fp_get_phys_dev_proc_addr = + (PFN_vk_icdGetPhysicalDeviceProcAddr)pDriver->pfnGetInstanceProcAddr(NULL, "vk_icdGetPhysicalDeviceProcAddr"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + // Query "vk_icdEnumerateAdapterPhysicalDevices" with vk_icdGetInstanceProcAddr if the library reports interface version + // 7 or greater, otherwise fallback to loading it from the platform dynamic linker + fp_enum_dxgi_adapter_phys_devs = + (PFN_vk_icdEnumerateAdapterPhysicalDevices)pDriver->pfnGetInstanceProcAddr(NULL, "vk_icdEnumerateAdapterPhysicalDevices"); +#endif + + // check for enough capacity + if ((icd_tramp_list->count * sizeof(struct loader_scanned_icd)) >= icd_tramp_list->capacity) { + void *new_ptr = loader_instance_heap_realloc(inst, icd_tramp_list->scanned_list, icd_tramp_list->capacity, + icd_tramp_list->capacity * 2, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_ptr) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_add_direct_driver: Realloc failed on icd library list for ICD index %u", index); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + icd_tramp_list->scanned_list = new_ptr; + + // double capacity + icd_tramp_list->capacity *= 2; + } + + // Driver must be 1.1 to support version 7 + uint32_t api_version = VK_API_VERSION_1_1; + PFN_vkEnumerateInstanceVersion icd_enumerate_instance_version = + (PFN_vkEnumerateInstanceVersion)pDriver->pfnGetInstanceProcAddr(NULL, "vkEnumerateInstanceVersion"); + + if (icd_enumerate_instance_version) { + VkResult res = icd_enumerate_instance_version(&api_version); + if (res != VK_SUCCESS) { + return res; + } + } + + new_scanned_icd = &(icd_tramp_list->scanned_list[icd_tramp_list->count]); + new_scanned_icd->handle = NULL; + new_scanned_icd->api_version = api_version; + new_scanned_icd->GetInstanceProcAddr = fp_get_proc_addr; + new_scanned_icd->GetPhysicalDeviceProcAddr = fp_get_phys_dev_proc_addr; + new_scanned_icd->EnumerateInstanceExtensionProperties = fp_get_inst_ext_props; + new_scanned_icd->CreateInstance = fp_create_inst; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + new_scanned_icd->EnumerateAdapterPhysicalDevices = fp_enum_dxgi_adapter_phys_devs; +#endif + new_scanned_icd->interface_version = interface_version; + + new_scanned_icd->lib_name = NULL; + icd_tramp_list->count++; + + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_add_direct_driver: Adding driver found in index %d of " + "VkDirectDriverLoadingListLUNARG::pDrivers structure. pfnGetInstanceProcAddr was set to %p", + index, pDriver->pfnGetInstanceProcAddr); + + return VK_SUCCESS; +} + +// Search through VkInstanceCreateInfo's pNext chain for any drivers from the direct driver loading extension and load them. +VkResult loader_scan_for_direct_drivers(const struct loader_instance *inst, const VkInstanceCreateInfo *pCreateInfo, + struct loader_icd_tramp_list *icd_tramp_list, bool *direct_driver_loading_exclusive_mode) { + if (NULL == pCreateInfo) { + // Don't do this logic unless we are being called from vkCreateInstance, when pCreateInfo will be non-null + return VK_SUCCESS; + } + bool direct_driver_loading_enabled = false; + // Try to if VK_LUNARG_direct_driver_loading is enabled and if we are using it exclusively + // Skip this step if inst is NULL, aka when this function is being called before instance creation + if (inst != NULL && pCreateInfo->ppEnabledExtensionNames && pCreateInfo->enabledExtensionCount > 0) { + // Look through the enabled extension list, make sure VK_LUNARG_direct_driver_loading is present + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME) == 0) { + direct_driver_loading_enabled = true; + break; + } + } + } + const VkDirectDriverLoadingListLUNARG *ddl_list = NULL; + // Find the VkDirectDriverLoadingListLUNARG struct in the pNext chain of vkInstanceCreateInfo + const void *pNext = pCreateInfo->pNext; + while (pNext) { + VkBaseInStructure out_structure = {0}; + memcpy(&out_structure, pNext, sizeof(VkBaseInStructure)); + if (out_structure.sType == VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG) { + ddl_list = (VkDirectDriverLoadingListLUNARG *)pNext; + break; + } + pNext = out_structure.pNext; + } + if (NULL == ddl_list) { + if (direct_driver_loading_enabled) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_scan_for_direct_drivers: The VK_LUNARG_direct_driver_loading extension was enabled but the " + "pNext chain of " + "VkInstanceCreateInfo did not contain the " + "VkDirectDriverLoadingListLUNARG structure."); + } + // Always want to exit early if there was no VkDirectDriverLoadingListLUNARG in the pNext chain + return VK_SUCCESS; + } + + if (!direct_driver_loading_enabled) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_scan_for_direct_drivers: The pNext chain of VkInstanceCreateInfo contained the " + "VkDirectDriverLoadingListLUNARG structure, but the VK_LUNARG_direct_driver_loading extension was " + "not enabled."); + return VK_SUCCESS; + } + // If we are using exclusive mode, skip looking for any more drivers from system or environment variables + if (ddl_list->mode == VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG) { + *direct_driver_loading_exclusive_mode = true; + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_scan_for_direct_drivers: The VK_LUNARG_direct_driver_loading extension is active and specified " + "VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG, skipping system and environment " + "variable driver search mechanisms."); + } + if (NULL == ddl_list->pDrivers) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_scan_for_direct_drivers: The VkDirectDriverLoadingListLUNARG structure in the pNext chain of " + "VkInstanceCreateInfo has a NULL pDrivers member."); + return VK_SUCCESS; + } + if (ddl_list->driverCount == 0) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_scan_for_direct_drivers: The VkDirectDriverLoadingListLUNARG structure in the pNext chain of " + "VkInstanceCreateInfo has a non-null pDrivers member but a driverCount member with a value " + "of zero."); + return VK_SUCCESS; + } + // Go through all VkDirectDriverLoadingInfoLUNARG entries and add each driver + // Because icd_tramp's are prepended, this will result in the drivers appearing at the end + for (uint32_t i = 0; i < ddl_list->driverCount; i++) { + VkResult res = loader_add_direct_driver(inst, i, &ddl_list->pDrivers[i], icd_tramp_list); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + return res; + } + } + + return VK_SUCCESS; +} + +VkResult loader_scanned_icd_add(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list, + const char *filename, uint32_t api_version, enum loader_layer_library_status *lib_status) { + loader_platform_dl_handle handle = NULL; + PFN_vkCreateInstance fp_create_inst = NULL; + PFN_vkEnumerateInstanceExtensionProperties fp_get_inst_ext_props = NULL; + PFN_vkGetInstanceProcAddr fp_get_proc_addr = NULL; + PFN_GetPhysicalDeviceProcAddr fp_get_phys_dev_proc_addr = NULL; + PFN_vkNegotiateLoaderICDInterfaceVersion fp_negotiate_icd_version = NULL; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vk_icdEnumerateAdapterPhysicalDevices fp_enum_dxgi_adapter_phys_devs = NULL; +#endif + struct loader_scanned_icd *new_scanned_icd = NULL; + uint32_t interface_vers; + VkResult res = VK_SUCCESS; + + // This shouldn't happen, but the check is necessary because dlopen returns a handle to the main program when + // filename is NULL + if (filename == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_scanned_icd_add: A NULL filename was used, skipping this ICD"); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + +// TODO implement smarter opening/closing of libraries. For now this +// function leaves libraries open and the scanned_icd_clear closes them +#if defined(__Fuchsia__) + handle = loader_platform_open_driver(filename); +#else + handle = loader_platform_open_library(filename); +#endif + if (NULL == handle) { + loader_handle_load_library_error(inst, filename, lib_status); + if (lib_status && *lib_status == LOADER_LAYER_LIB_ERROR_OUT_OF_MEMORY) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + } else { + res = VK_ERROR_INCOMPATIBLE_DRIVER; + } + goto out; + } + + // Try to load the driver's exported vk_icdNegotiateLoaderICDInterfaceVersion + fp_negotiate_icd_version = loader_platform_get_proc_address(handle, "vk_icdNegotiateLoaderICDInterfaceVersion"); + + // If it isn't exported, we are dealing with either a v0, v1, or a v7 and up driver + if (NULL == fp_negotiate_icd_version) { + // Try to load the driver's exported vk_icdGetInstanceProcAddr - if this is a v7 or up driver, we can use it to get + // the driver's vk_icdNegotiateLoaderICDInterfaceVersion function + fp_get_proc_addr = loader_platform_get_proc_address(handle, "vk_icdGetInstanceProcAddr"); + + // If we successfully loaded vk_icdGetInstanceProcAddr, try to get vk_icdNegotiateLoaderICDInterfaceVersion + if (fp_get_proc_addr) { + fp_negotiate_icd_version = + (PFN_vk_icdNegotiateLoaderICDInterfaceVersion)fp_get_proc_addr(NULL, "vk_icdNegotiateLoaderICDInterfaceVersion"); + } + } + + // Try to negotiate the Loader and Driver Interface Versions + // loader_get_icd_interface_version will check if fp_negotiate_icd_version is NULL, so we don't have to. + // If it *is* NULL, that means this driver uses interface version 0 or 1 + if (!loader_get_icd_interface_version(fp_negotiate_icd_version, &interface_vers)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: ICD %s doesn't support interface version compatible with loader, skip this ICD.", + filename); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + // If we didn't already query vk_icdGetInstanceProcAddr, try now + if (NULL == fp_get_proc_addr) { + fp_get_proc_addr = loader_platform_get_proc_address(handle, "vk_icdGetInstanceProcAddr"); + } + + // If vk_icdGetInstanceProcAddr is NULL, this ICD is using version 0 and so we should respond accordingly. + if (NULL == fp_get_proc_addr) { + // Exporting vk_icdNegotiateLoaderICDInterfaceVersion but not vk_icdGetInstanceProcAddr violates Version 2's + // requirements, as for Version 2 to be supported Version 1 must also be supported + if (interface_vers != 0) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: ICD %s reports an interface version of %d but doesn't export " + "vk_icdGetInstanceProcAddr, skip this ICD.", + filename, interface_vers); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + // Use deprecated interface from version 0 + fp_get_proc_addr = loader_platform_get_proc_address(handle, "vkGetInstanceProcAddr"); + if (NULL == fp_get_proc_addr) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: Attempt to retrieve either \'vkGetInstanceProcAddr\' or " + "\'vk_icdGetInstanceProcAddr\' from ICD %s failed.", + filename); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } else { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "loader_scanned_icd_add: Using deprecated ICD interface of \'vkGetInstanceProcAddr\' instead of " + "\'vk_icdGetInstanceProcAddr\' for ICD %s", + filename); + } + fp_create_inst = loader_platform_get_proc_address(handle, "vkCreateInstance"); + if (NULL == fp_create_inst) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: Failed querying \'vkCreateInstance\' via dlsym/LoadLibrary for ICD %s", filename); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + fp_get_inst_ext_props = loader_platform_get_proc_address(handle, "vkEnumerateInstanceExtensionProperties"); + if (NULL == fp_get_inst_ext_props) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: Could not get \'vkEnumerateInstanceExtensionProperties\' via dlsym/LoadLibrary " + "for ICD %s", + filename); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + } else { + // vk_icdGetInstanceProcAddr was successfully found, we can assume the version is at least one + // If vk_icdNegotiateLoaderICDInterfaceVersion was also found, interface_vers must be 2 or greater, so this check is + // fine + if (interface_vers == 0) { + interface_vers = 1; + } + + fp_create_inst = (PFN_vkCreateInstance)fp_get_proc_addr(NULL, "vkCreateInstance"); + if (NULL == fp_create_inst) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: Could not get \'vkCreateInstance\' via \'vk_icdGetInstanceProcAddr\' for ICD %s", + filename); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + fp_get_inst_ext_props = + (PFN_vkEnumerateInstanceExtensionProperties)fp_get_proc_addr(NULL, "vkEnumerateInstanceExtensionProperties"); + if (NULL == fp_get_inst_ext_props) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_scanned_icd_add: Could not get \'vkEnumerateInstanceExtensionProperties\' via " + "\'vk_icdGetInstanceProcAddr\' for ICD %s", + filename); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + // Query "vk_icdGetPhysicalDeviceProcAddr" with vk_icdGetInstanceProcAddr if the library reports interface version 7 or + // greater, otherwise fallback to loading it from the platform dynamic linker + if (interface_vers >= 7) { + fp_get_phys_dev_proc_addr = + (PFN_vk_icdGetPhysicalDeviceProcAddr)fp_get_proc_addr(NULL, "vk_icdGetPhysicalDeviceProcAddr"); + } + if (NULL == fp_get_phys_dev_proc_addr && interface_vers >= 3) { + fp_get_phys_dev_proc_addr = loader_platform_get_proc_address(handle, "vk_icdGetPhysicalDeviceProcAddr"); + } +#if defined(VK_USE_PLATFORM_WIN32_KHR) + // Query "vk_icdEnumerateAdapterPhysicalDevices" with vk_icdGetInstanceProcAddr if the library reports interface version + // 7 or greater, otherwise fallback to loading it from the platform dynamic linker + if (interface_vers >= 7) { + fp_enum_dxgi_adapter_phys_devs = + (PFN_vk_icdEnumerateAdapterPhysicalDevices)fp_get_proc_addr(NULL, "vk_icdEnumerateAdapterPhysicalDevices"); + } + if (NULL == fp_enum_dxgi_adapter_phys_devs && interface_vers >= 6) { + fp_enum_dxgi_adapter_phys_devs = loader_platform_get_proc_address(handle, "vk_icdEnumerateAdapterPhysicalDevices"); + } +#endif + } + + // check for enough capacity + if ((icd_tramp_list->count * sizeof(struct loader_scanned_icd)) >= icd_tramp_list->capacity) { + void *new_ptr = loader_instance_heap_realloc(inst, icd_tramp_list->scanned_list, icd_tramp_list->capacity, + icd_tramp_list->capacity * 2, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_ptr) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_scanned_icd_add: Realloc failed on icd library list for ICD %s", + filename); + goto out; + } + icd_tramp_list->scanned_list = new_ptr; + + // double capacity + icd_tramp_list->capacity *= 2; + } + + loader_api_version api_version_struct = loader_make_version(api_version); + if (interface_vers <= 4 && loader_check_version_meets_required(LOADER_VERSION_1_1_0, api_version_struct)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "loader_scanned_icd_add: Driver %s supports Vulkan %u.%u, but only supports loader interface version %u." + " Interface version 5 or newer required to support this version of Vulkan (Policy #LDP_DRIVER_7)", + filename, api_version_struct.major, api_version_struct.minor, interface_vers); + } + + new_scanned_icd = &(icd_tramp_list->scanned_list[icd_tramp_list->count]); + new_scanned_icd->handle = handle; + new_scanned_icd->api_version = api_version; + new_scanned_icd->GetInstanceProcAddr = fp_get_proc_addr; + new_scanned_icd->GetPhysicalDeviceProcAddr = fp_get_phys_dev_proc_addr; + new_scanned_icd->EnumerateInstanceExtensionProperties = fp_get_inst_ext_props; + new_scanned_icd->CreateInstance = fp_create_inst; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + new_scanned_icd->EnumerateAdapterPhysicalDevices = fp_enum_dxgi_adapter_phys_devs; +#endif + new_scanned_icd->interface_version = interface_vers; + + res = loader_copy_to_new_str(inst, filename, &new_scanned_icd->lib_name); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_scanned_icd_add: Out of memory can't add ICD %s", filename); + goto out; + } + icd_tramp_list->count++; + +out: + if (res != VK_SUCCESS) { + if (NULL != handle) { + loader_platform_close_library(handle); + } + } + + return res; +} + +#if defined(_WIN32) +BOOL __stdcall loader_initialize(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) { + (void)InitOnce; + (void)Parameter; + (void)Context; +#else +void loader_initialize(void) { + loader_platform_thread_create_mutex(&loader_lock); + loader_platform_thread_create_mutex(&loader_preload_icd_lock); + loader_platform_thread_create_mutex(&loader_global_instance_list_lock); + init_global_loader_settings(); +#endif + + // initialize logging + loader_init_global_debug_level(); +#if defined(_WIN32) + windows_initialization(); +#endif + + loader_api_version version = loader_make_full_version(VK_HEADER_VERSION_COMPLETE); + loader_log(NULL, VULKAN_LOADER_INFO_BIT, 0, "Vulkan Loader Version %d.%d.%d", version.major, version.minor, version.patch); + +#if defined(GIT_BRANCH_NAME) && defined(GIT_TAG_INFO) + loader_log(NULL, VULKAN_LOADER_INFO_BIT, 0, "[Vulkan Loader Git - Tag: " GIT_BRANCH_NAME ", Branch/Commit: " GIT_TAG_INFO "]"); +#endif + + char *loader_disable_dynamic_library_unloading_env_var = loader_getenv("VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING", NULL); + if (loader_disable_dynamic_library_unloading_env_var && + 0 == strncmp(loader_disable_dynamic_library_unloading_env_var, "1", 2)) { + loader_disable_dynamic_library_unloading = true; + loader_log(NULL, VULKAN_LOADER_WARN_BIT, 0, "Vulkan Loader: library unloading is disabled"); + } else { + loader_disable_dynamic_library_unloading = false; + } + loader_free_getenv(loader_disable_dynamic_library_unloading_env_var, NULL); +#if defined(LOADER_USE_UNSAFE_FILE_SEARCH) + loader_log(NULL, VULKAN_LOADER_WARN_BIT, 0, "Vulkan Loader: unsafe searching is enabled"); +#endif +#if defined(_WIN32) + return TRUE; +#endif +} + +void loader_release(void) { + // Guarantee release of the preloaded ICD libraries. This may have already been called in vkDestroyInstance. + loader_unload_preloaded_icds(); + + // release mutexes + teardown_global_loader_settings(); + loader_platform_thread_delete_mutex(&loader_lock); + loader_platform_thread_delete_mutex(&loader_preload_icd_lock); + loader_platform_thread_delete_mutex(&loader_global_instance_list_lock); +} + +// Preload the ICD libraries that are likely to be needed so we don't repeatedly load/unload them later +void loader_preload_icds(void) { + loader_platform_thread_lock_mutex(&loader_preload_icd_lock); + + // Already preloaded, skip loading again. + if (preloaded_icds.scanned_list != NULL) { + loader_platform_thread_unlock_mutex(&loader_preload_icd_lock); + return; + } + + VkResult result = loader_icd_scan(NULL, &preloaded_icds, NULL, NULL); + if (result != VK_SUCCESS) { + loader_clear_scanned_icd_list(NULL, &preloaded_icds); + } + loader_platform_thread_unlock_mutex(&loader_preload_icd_lock); +} + +// Release the ICD libraries that were preloaded +void loader_unload_preloaded_icds(void) { + loader_platform_thread_lock_mutex(&loader_preload_icd_lock); + loader_clear_scanned_icd_list(NULL, &preloaded_icds); + loader_platform_thread_unlock_mutex(&loader_preload_icd_lock); +} + +#if !defined(_WIN32) +__attribute__((constructor)) void loader_init_library(void) { loader_initialize(); } + +__attribute__((destructor)) void loader_free_library(void) { loader_release(); } +#endif + +// Get next file or dirname given a string list or registry key path +// +// \returns +// A pointer to first char in the next path. +// The next path (or NULL) in the list is returned in next_path. +// Note: input string is modified in some cases. PASS IN A COPY! +char *loader_get_next_path(char *path) { + uint32_t len; + char *next; + + if (path == NULL) return NULL; + next = strchr(path, PATH_SEPARATOR); + if (next == NULL) { + len = (uint32_t)strlen(path); + next = path + len; + } else { + *next = '\0'; + next++; + } + + return next; +} + +/* Processes a json manifest's library_path and the location of the json manifest to create the path of the library + * The output is stored in out_fullpath by allocating a string - so its the caller's responsibility to free it + * The output is the combination of the base path of manifest_file_path concatenated with library path + * If library_path is an absolute path, we do not prepend the base path of manifest_file_path + * + * This function takes ownership of library_path - caller does not need to worry about freeing it. + */ +VkResult combine_manifest_directory_and_library_path(const struct loader_instance *inst, char *library_path, + const char *manifest_file_path, char **out_fullpath) { + assert(library_path && manifest_file_path && out_fullpath); + if (loader_platform_is_path_absolute(library_path)) { + *out_fullpath = library_path; + return VK_SUCCESS; + } + VkResult res = VK_SUCCESS; + + size_t library_path_len = strlen(library_path); + size_t manifest_file_path_str_len = strlen(manifest_file_path); + bool library_path_contains_directory_symbol = false; + for (size_t i = 0; i < library_path_len; i++) { + if (library_path[i] == DIRECTORY_SYMBOL) { + library_path_contains_directory_symbol = true; + break; + } + } + // Means that the library_path is neither absolute nor relative - thus we should not modify it at all + if (!library_path_contains_directory_symbol) { + *out_fullpath = library_path; + return VK_SUCCESS; + } + // must include both a directory symbol and the null terminator + size_t new_str_len = library_path_len + manifest_file_path_str_len + 1 + 1; + + *out_fullpath = loader_instance_heap_calloc(inst, new_str_len, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == *out_fullpath) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + size_t cur_loc_in_out_fullpath = 0; + // look for the last occurrence of DIRECTORY_SYMBOL in manifest_file_path + size_t last_directory_symbol = 0; + bool found_directory_symbol = false; + for (size_t i = 0; i < manifest_file_path_str_len; i++) { + if (manifest_file_path[i] == DIRECTORY_SYMBOL) { + last_directory_symbol = i + 1; // we want to include the symbol + found_directory_symbol = true; + // dont break because we want to find the last occurrence + } + } + // Add manifest_file_path up to the last directory symbol + if (found_directory_symbol) { + loader_strncpy(*out_fullpath, new_str_len, manifest_file_path, last_directory_symbol); + cur_loc_in_out_fullpath += last_directory_symbol; + } + loader_strncpy(&(*out_fullpath)[cur_loc_in_out_fullpath], new_str_len - cur_loc_in_out_fullpath, library_path, + library_path_len); + cur_loc_in_out_fullpath += library_path_len + 1; + (*out_fullpath)[cur_loc_in_out_fullpath] = '\0'; + +out: + loader_instance_heap_free(inst, library_path); + + return res; +} + +// Given a filename (file) and a list of paths (in_dirs), try to find an existing +// file in the paths. If filename already is a path then no searching in the given paths. +// +// @return - A string in out_fullpath of either the full path or file. +void loader_get_fullpath(const char *file, const char *in_dirs, size_t out_size, char *out_fullpath) { + if (!loader_platform_is_path(file) && *in_dirs) { + size_t dirs_copy_len = strlen(in_dirs) + 1; + char *dirs_copy = loader_stack_alloc(dirs_copy_len); + loader_strncpy(dirs_copy, dirs_copy_len, in_dirs, dirs_copy_len); + + // find if file exists after prepending paths in given list + // for (dir = dirs_copy; *dir && (next_dir = loader_get_next_path(dir)); dir = next_dir) { + char *dir = dirs_copy; + char *next_dir = loader_get_next_path(dir); + while (*dir && next_dir) { + int path_concat_ret = snprintf(out_fullpath, out_size, "%s%c%s", dir, DIRECTORY_SYMBOL, file); + if (path_concat_ret < 0) { + continue; + } + if (loader_platform_file_exists(out_fullpath)) { + return; + } + dir = next_dir; + next_dir = loader_get_next_path(dir); + } + } + + (void)snprintf(out_fullpath, out_size, "%s", file); +} + +// Verify that all component layers in a meta-layer are valid. +// This function is potentially recursive so we pass in an array of "already checked" (length of the instance_layers->count) meta +// layers, preventing a stack overflow verifying meta layers that are each other's component layers +bool verify_meta_layer_component_layers(const struct loader_instance *inst, size_t prop_index, + struct loader_layer_list *instance_layers, bool *already_checked_meta_layers) { + struct loader_layer_properties *prop = &instance_layers->list[prop_index]; + loader_api_version meta_layer_version = loader_make_version(prop->info.specVersion); + + if (NULL == already_checked_meta_layers) { + already_checked_meta_layers = loader_stack_alloc(sizeof(bool) * instance_layers->count); + if (already_checked_meta_layers == NULL) { + return false; + } + memset(already_checked_meta_layers, 0, sizeof(bool) * instance_layers->count); + } + + // Mark this meta layer as 'already checked', indicating which layers have already been recursed. + already_checked_meta_layers[prop_index] = true; + + for (uint32_t comp_layer = 0; comp_layer < prop->component_layer_names.count; comp_layer++) { + struct loader_layer_properties *comp_prop = + loader_find_layer_property(prop->component_layer_names.list[comp_layer], instance_layers); + if (comp_prop == NULL) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "verify_meta_layer_component_layers: Meta-layer %s can't find component layer %s at index %d." + " Skipping this layer.", + prop->info.layerName, prop->component_layer_names.list[comp_layer], comp_layer); + + return false; + } + + // Check the version of each layer, they need to be at least MAJOR and MINOR + loader_api_version comp_prop_version = loader_make_version(comp_prop->info.specVersion); + if (!loader_check_version_meets_required(meta_layer_version, comp_prop_version)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "verify_meta_layer_component_layers: Meta-layer uses API version %d.%d, but component " + "layer %d has API version %d.%d that is lower. Skipping this layer.", + meta_layer_version.major, meta_layer_version.minor, comp_layer, comp_prop_version.major, + comp_prop_version.minor); + + return false; + } + + // Make sure the layer isn't using it's own name + if (!strcmp(prop->info.layerName, prop->component_layer_names.list[comp_layer])) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "verify_meta_layer_component_layers: Meta-layer %s lists itself in its component layer " + "list at index %d. Skipping this layer.", + prop->info.layerName, comp_layer); + + return false; + } + if (comp_prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) { + size_t comp_prop_index = INT32_MAX; + // Make sure we haven't verified this meta layer before + for (uint32_t i = 0; i < instance_layers->count; i++) { + if (strcmp(comp_prop->info.layerName, instance_layers->list[i].info.layerName) == 0) { + comp_prop_index = i; + } + } + if (comp_prop_index != INT32_MAX && already_checked_meta_layers[comp_prop_index]) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "verify_meta_layer_component_layers: Recursive depedency between Meta-layer %s and Meta-layer %s. " + "Skipping this layer.", + instance_layers->list[prop_index].info.layerName, comp_prop->info.layerName); + return false; + } + + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "verify_meta_layer_component_layers: Adding meta-layer %s which also contains meta-layer %s", + prop->info.layerName, comp_prop->info.layerName); + + // Make sure if the layer is using a meta-layer in its component list that we also verify that. + if (!verify_meta_layer_component_layers(inst, comp_prop_index, instance_layers, already_checked_meta_layers)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Meta-layer %s component layer %s can not find all component layers." + " Skipping this layer.", + prop->info.layerName, prop->component_layer_names.list[comp_layer]); + return false; + } + } + } + // Didn't exit early so that means it passed all checks + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Meta-layer \"%s\" all %d component layers appear to be valid.", prop->info.layerName, + prop->component_layer_names.count); + + // If layer logging is on, list the internals included in the meta-layer + for (uint32_t comp_layer = 0; comp_layer < prop->component_layer_names.count; comp_layer++) { + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " [%d] %s", comp_layer, prop->component_layer_names.list[comp_layer]); + } + return true; +} + +// Add any instance and device extensions from component layers to this layer +// list, so that anyone querying extensions will only need to look at the meta-layer +bool update_meta_layer_extensions_from_component_layers(const struct loader_instance *inst, struct loader_layer_properties *prop, + struct loader_layer_list *instance_layers) { + VkResult res = VK_SUCCESS; + for (uint32_t comp_layer = 0; comp_layer < prop->component_layer_names.count; comp_layer++) { + struct loader_layer_properties *comp_prop = + loader_find_layer_property(prop->component_layer_names.list[comp_layer], instance_layers); + + if (NULL != comp_prop->instance_extension_list.list) { + for (uint32_t ext = 0; ext < comp_prop->instance_extension_list.count; ext++) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Meta-layer %s component layer %s adding instance extension %s", + prop->info.layerName, prop->component_layer_names.list[comp_layer], + comp_prop->instance_extension_list.list[ext].extensionName); + + if (!has_vk_extension_property(&comp_prop->instance_extension_list.list[ext], &prop->instance_extension_list)) { + res = loader_add_to_ext_list(inst, &prop->instance_extension_list, 1, + &comp_prop->instance_extension_list.list[ext]); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + return res; + } + } + } + } + if (NULL != comp_prop->device_extension_list.list) { + for (uint32_t ext = 0; ext < comp_prop->device_extension_list.count; ext++) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Meta-layer %s component layer %s adding device extension %s", + prop->info.layerName, prop->component_layer_names.list[comp_layer], + comp_prop->device_extension_list.list[ext].props.extensionName); + + if (!has_vk_dev_ext_property(&comp_prop->device_extension_list.list[ext].props, &prop->device_extension_list)) { + loader_add_to_dev_ext_list(inst, &prop->device_extension_list, + &comp_prop->device_extension_list.list[ext].props, NULL); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + return res; + } + } + } + } + } + return res; +} + +// Verify that all meta-layers in a layer list are valid. +VkResult verify_all_meta_layers(struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + struct loader_layer_list *instance_layers, bool *override_layer_present) { + VkResult res = VK_SUCCESS; + *override_layer_present = false; + for (int32_t i = 0; i < (int32_t)instance_layers->count; i++) { + struct loader_layer_properties *prop = &instance_layers->list[i]; + + // If this is a meta-layer, make sure it is valid + if (prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) { + if (verify_meta_layer_component_layers(inst, i, instance_layers, NULL)) { + // If any meta layer is valid, update its extension list to include the extensions from its component layers. + res = update_meta_layer_extensions_from_component_layers(inst, prop, instance_layers); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + return res; + } + if (prop->is_override && loader_implicit_layer_is_enabled(inst, filters, prop)) { + *override_layer_present = true; + } + } else { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, + "Removing meta-layer %s from instance layer list since it appears invalid.", prop->info.layerName); + + loader_remove_layer_in_list(inst, instance_layers, i); + i--; + } + } + } + return res; +} + +// If the current working directory matches any app_key_path of the layers, remove all other override layers. +// Otherwise if no matching app_key was found, remove all but the global override layer, which has no app_key_path. +void remove_all_non_valid_override_layers(struct loader_instance *inst, struct loader_layer_list *instance_layers) { + if (instance_layers == NULL) { + return; + } + + char cur_path[1024]; + char *ret = loader_platform_executable_path(cur_path, 1024); + if (NULL == ret) { + return; + } + // Find out if there is an override layer with same the app_key_path as the path to the current executable. + // If more than one is found, remove it and use the first layer + // Remove any layers which aren't global and do not have the same app_key_path as the path to the current executable. + bool found_active_override_layer = false; + int global_layer_index = -1; + for (uint32_t i = 0; i < instance_layers->count; i++) { + struct loader_layer_properties *props = &instance_layers->list[i]; + if (strcmp(props->info.layerName, VK_OVERRIDE_LAYER_NAME) == 0) { + if (props->app_key_paths.count > 0) { // not the global layer + for (uint32_t j = 0; j < props->app_key_paths.count; j++) { + if (strcmp(props->app_key_paths.list[j], cur_path) == 0) { + if (!found_active_override_layer) { + found_active_override_layer = true; + } else { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "remove_all_non_valid_override_layers: Multiple override layers where the same path in " + "app_keys " + "was found. Using the first layer found"); + + // Remove duplicate active override layers that have the same app_key_path + loader_remove_layer_in_list(inst, instance_layers, i); + i--; + } + } + } + if (!found_active_override_layer) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "--Override layer found but not used because app \'%s\' is not in \'app_keys\' list!", cur_path); + + // Remove non-global override layers that don't have an app_key that matches cur_path + loader_remove_layer_in_list(inst, instance_layers, i); + i--; + } + } else { + if (global_layer_index == -1) { + global_layer_index = i; + } else { + loader_log( + inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "remove_all_non_valid_override_layers: Multiple global override layers found. Using the first global " + "layer found"); + loader_remove_layer_in_list(inst, instance_layers, i); + i--; + } + } + } + } + // Remove global layer if layer with same the app_key_path as the path to the current executable is found + if (found_active_override_layer && global_layer_index >= 0) { + loader_remove_layer_in_list(inst, instance_layers, global_layer_index); + } + // Should be at most 1 override layer in the list now. + if (found_active_override_layer) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Using the override layer for app key %s", cur_path); + } else if (global_layer_index >= 0) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Using the global override layer"); + } +} + +/* The following are required in the "layer" object: + * "name" + * "type" + * (for non-meta layers) "library_path" + * (for meta layers) "component_layers" + * "api_version" + * "implementation_version" + * "description" + * (for implicit layers) "disable_environment" + */ + +VkResult loader_read_layer_json(const struct loader_instance *inst, struct loader_layer_list *layer_instance_list, + cJSON *layer_node, loader_api_version version, bool is_implicit, char *filename) { + assert(layer_instance_list); + char *library_path = NULL; + VkResult result = VK_SUCCESS; + struct loader_layer_properties props = {0}; + + result = loader_copy_to_new_str(inst, filename, &props.manifest_file_name); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + + // Parse name + + result = loader_parse_json_string_to_existing_str(layer_node, "name", VK_MAX_EXTENSION_NAME_SIZE, props.info.layerName); + if (VK_ERROR_INITIALIZATION_FAILED == result) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer located at %s didn't find required layer value \"name\" in manifest JSON file, skipping this layer", + filename); + goto out; + } + + // Check if this layer's name matches the override layer name, set is_override to true if so. + if (!strcmp(props.info.layerName, VK_OVERRIDE_LAYER_NAME)) { + props.is_override = true; + } + + if (0 != strncmp(props.info.layerName, "VK_LAYER_", 9)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, "Layer name %s does not conform to naming standard (Policy #LLP_LAYER_3)", + props.info.layerName); + } + + // Parse type + char *type = loader_cJSON_GetStringValue(loader_cJSON_GetObjectItem(layer_node, "type")); + if (NULL == type) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer located at %s didn't find required layer value \"type\" in manifest JSON file, skipping this layer", + filename); + goto out; + } + + // Add list entry + if (!strcmp(type, "DEVICE")) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Device layers are deprecated. Skipping layer %s", + props.info.layerName); + result = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Allow either GLOBAL or INSTANCE type interchangeably to handle layers that must work with older loaders + if (!strcmp(type, "INSTANCE") || !strcmp(type, "GLOBAL")) { + props.type_flags = VK_LAYER_TYPE_FLAG_INSTANCE_LAYER; + if (!is_implicit) { + props.type_flags |= VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER; + } + } else { + result = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Parse api_version + char *api_version = loader_cJSON_GetStringValue(loader_cJSON_GetObjectItem(layer_node, "api_version")); + if (NULL == api_version) { + loader_log( + inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer located at %s didn't find required layer value \"api_version\" in manifest JSON file, skipping this layer", + filename); + goto out; + } + + props.info.specVersion = loader_parse_version_string(api_version); + + // Make sure the layer's manifest doesn't contain a non zero variant value + if (VK_API_VERSION_VARIANT(props.info.specVersion) != 0) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" has an \'api_version\' field which contains a non-zero variant value of %d. " + " Skipping Layer.", + props.info.layerName, VK_API_VERSION_VARIANT(props.info.specVersion)); + result = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Parse implementation_version + char *implementation_version = loader_cJSON_GetStringValue(loader_cJSON_GetObjectItem(layer_node, "implementation_version")); + if (NULL == implementation_version) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer located at %s didn't find required layer value \"implementation_version\" in manifest JSON file, " + "skipping this layer", + filename); + goto out; + } + props.info.implementationVersion = atoi(implementation_version); + + // Parse description + + result = + loader_parse_json_string_to_existing_str(layer_node, "description", VK_MAX_EXTENSION_NAME_SIZE, props.info.description); + if (VK_ERROR_INITIALIZATION_FAILED == result) { + loader_log( + inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer located at %s didn't find required layer value \"description\" in manifest JSON file, skipping this layer", + filename); + goto out; + } + + // Parse library_path + + // Library path no longer required unless component_layers is also not defined + result = loader_parse_json_string(layer_node, "library_path", &library_path); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Skipping layer \"%s\" due to problem accessing the library_path value in the manifest JSON file", + props.info.layerName); + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + if (NULL != library_path) { + if (NULL != loader_cJSON_GetObjectItem(layer_node, "component_layers")) { + loader_log( + inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer \"%s\" contains meta-layer-specific component_layers, but also defining layer library path. Both are not " + "compatible, so skipping this layer", + props.info.layerName); + result = VK_ERROR_INITIALIZATION_FAILED; + loader_instance_heap_free(inst, library_path); + goto out; + } + + // This function takes ownership of library_path_str - so we don't need to clean it up + result = combine_manifest_directory_and_library_path(inst, library_path, filename, &props.lib_name); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + + // Parse component_layers + + if (NULL == library_path) { + if (!loader_check_version_meets_required(LOADER_VERSION_1_1_0, version)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer \"%s\" contains meta-layer-specific component_layers, but using older JSON file version.", + props.info.layerName); + } + + result = loader_parse_json_array_of_strings(inst, layer_node, "component_layers", &(props.component_layer_names)); + if (VK_ERROR_OUT_OF_HOST_MEMORY == result) { + goto out; + } + if (VK_ERROR_INITIALIZATION_FAILED == result) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer \"%s\" is missing both library_path and component_layers fields. One or the other MUST be defined. " + "Skipping this layer", + props.info.layerName); + goto out; + } + // This is now, officially, a meta-layer + props.type_flags |= VK_LAYER_TYPE_FLAG_META_LAYER; + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Encountered meta-layer \"%s\"", + props.info.layerName); + } + + // Parse blacklisted_layers + + if (props.is_override) { + result = loader_parse_json_array_of_strings(inst, layer_node, "blacklisted_layers", &(props.blacklist_layer_names)); + if (VK_ERROR_OUT_OF_HOST_MEMORY == result) { + goto out; + } + } + + // Parse override_paths + + result = loader_parse_json_array_of_strings(inst, layer_node, "override_paths", &(props.override_paths)); + if (VK_ERROR_OUT_OF_HOST_MEMORY == result) { + goto out; + } + if (NULL != props.override_paths.list && !loader_check_version_meets_required(loader_combine_version(1, 1, 0), version)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer \"%s\" contains meta-layer-specific override paths, but using older JSON file version.", + props.info.layerName); + } + + // Parse disable_environment + + if (is_implicit) { + cJSON *disable_environment = loader_cJSON_GetObjectItem(layer_node, "disable_environment"); + if (disable_environment == NULL) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer \"%s\" doesn't contain required layer object disable_environment in the manifest JSON file, skipping " + "this layer", + props.info.layerName); + result = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + if (!disable_environment->child || disable_environment->child->type != cJSON_String || + !disable_environment->child->string || !disable_environment->child->valuestring) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Layer \"%s\" doesn't contain required child value in object disable_environment in the manifest JSON file, " + "skipping this layer (Policy #LLP_LAYER_9)", + props.info.layerName); + result = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + result = loader_copy_to_new_str(inst, disable_environment->child->string, &(props.disable_env_var.name)); + if (VK_SUCCESS != result) goto out; + result = loader_copy_to_new_str(inst, disable_environment->child->valuestring, &(props.disable_env_var.value)); + if (VK_SUCCESS != result) goto out; + } + + // Now get all optional items and objects and put in list: + // functions + // instance_extensions + // device_extensions + // enable_environment (implicit layers only) + // library_arch + + // Layer interface functions + // vkGetInstanceProcAddr + // vkGetDeviceProcAddr + // vkNegotiateLoaderLayerInterfaceVersion (starting with JSON file 1.1.0) + cJSON *functions = loader_cJSON_GetObjectItem(layer_node, "functions"); + if (functions != NULL) { + if (loader_check_version_meets_required(loader_combine_version(1, 1, 0), version)) { + result = loader_parse_json_string(functions, "vkNegotiateLoaderLayerInterfaceVersion", + &props.functions.str_negotiate_interface); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + result = loader_parse_json_string(functions, "vkGetInstanceProcAddr", &props.functions.str_gipa); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + + if (NULL == props.functions.str_negotiate_interface && props.functions.str_gipa && + loader_check_version_meets_required(loader_combine_version(1, 1, 0), version)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "Layer \"%s\" using deprecated \'vkGetInstanceProcAddr\' tag which was deprecated starting with JSON " + "file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for " + "compatibility reasons it may be desirable to continue using the deprecated tag.", + props.info.layerName); + } + + result = loader_parse_json_string(functions, "vkGetDeviceProcAddr", &props.functions.str_gdpa); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + + if (NULL == props.functions.str_negotiate_interface && props.functions.str_gdpa && + loader_check_version_meets_required(loader_combine_version(1, 1, 0), version)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "Layer \"%s\" using deprecated \'vkGetDeviceProcAddr\' tag which was deprecated starting with JSON " + "file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for " + "compatibility reasons it may be desirable to continue using the deprecated tag.", + props.info.layerName); + } + } + + // instance_extensions + // array of { + // name + // spec_version + // } + + cJSON *instance_extensions = loader_cJSON_GetObjectItem(layer_node, "instance_extensions"); + if (instance_extensions != NULL && instance_extensions->type == cJSON_Array) { + cJSON *ext_item = NULL; + cJSON_ArrayForEach(ext_item, instance_extensions) { + if (ext_item->type != cJSON_Object) { + continue; + } + + VkExtensionProperties ext_prop = {0}; + result = loader_parse_json_string_to_existing_str(ext_item, "name", VK_MAX_EXTENSION_NAME_SIZE, ext_prop.extensionName); + if (result == VK_ERROR_INITIALIZATION_FAILED) { + continue; + } + char *spec_version = NULL; + result = loader_parse_json_string(ext_item, "spec_version", &spec_version); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + if (NULL != spec_version) { + ext_prop.specVersion = atoi(spec_version); + } + loader_instance_heap_free(inst, spec_version); + bool ext_unsupported = wsi_unsupported_instance_extension(&ext_prop); + if (!ext_unsupported) { + loader_add_to_ext_list(inst, &props.instance_extension_list, 1, &ext_prop); + } + } + } + + // device_extensions + // array of { + // name + // spec_version + // entrypoints + // } + cJSON *device_extensions = loader_cJSON_GetObjectItem(layer_node, "device_extensions"); + if (device_extensions != NULL && device_extensions->type == cJSON_Array) { + cJSON *ext_item = NULL; + cJSON_ArrayForEach(ext_item, device_extensions) { + if (ext_item->type != cJSON_Object) { + continue; + } + + VkExtensionProperties ext_prop = {0}; + result = loader_parse_json_string_to_existing_str(ext_item, "name", VK_MAX_EXTENSION_NAME_SIZE, ext_prop.extensionName); + if (result == VK_ERROR_INITIALIZATION_FAILED) { + continue; + } + + char *spec_version = NULL; + result = loader_parse_json_string(ext_item, "spec_version", &spec_version); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + if (NULL != spec_version) { + ext_prop.specVersion = atoi(spec_version); + } + loader_instance_heap_free(inst, spec_version); + + cJSON *entrypoints = loader_cJSON_GetObjectItem(ext_item, "entrypoints"); + if (entrypoints == NULL) { + result = loader_add_to_dev_ext_list(inst, &props.device_extension_list, &ext_prop, NULL); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + continue; + } + + struct loader_string_list entrys = {0}; + result = loader_parse_json_array_of_strings(inst, ext_item, "entrypoints", &entrys); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + result = loader_add_to_dev_ext_list(inst, &props.device_extension_list, &ext_prop, &entrys); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + } + if (is_implicit) { + cJSON *enable_environment = loader_cJSON_GetObjectItem(layer_node, "enable_environment"); + + // enable_environment is optional + if (enable_environment && enable_environment->child && enable_environment->child->type == cJSON_String && + enable_environment->child->string && enable_environment->child->valuestring) { + result = loader_copy_to_new_str(inst, enable_environment->child->string, &(props.enable_env_var.name)); + if (VK_SUCCESS != result) goto out; + result = loader_copy_to_new_str(inst, enable_environment->child->valuestring, &(props.enable_env_var.value)); + if (VK_SUCCESS != result) goto out; + } + } + + // Read in the pre-instance stuff + cJSON *pre_instance = loader_cJSON_GetObjectItem(layer_node, "pre_instance_functions"); + if (NULL != pre_instance) { + // Supported versions started in 1.1.2, so anything newer + if (!loader_check_version_meets_required(loader_combine_version(1, 1, 2), version)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "Found pre_instance_functions section in layer from \"%s\". This section is only valid in manifest version " + "1.1.2 or later. The section will be ignored", + filename); + } else if (!is_implicit) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Found pre_instance_functions section in explicit layer from \"%s\". This section is only valid in implicit " + "layers. The section will be ignored", + filename); + } else { + result = loader_parse_json_string(pre_instance, "vkEnumerateInstanceExtensionProperties", + &props.pre_instance_functions.enumerate_instance_extension_properties); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + + result = loader_parse_json_string(pre_instance, "vkEnumerateInstanceLayerProperties", + &props.pre_instance_functions.enumerate_instance_layer_properties); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + + result = loader_parse_json_string(pre_instance, "vkEnumerateInstanceVersion", + &props.pre_instance_functions.enumerate_instance_version); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + } + + if (loader_cJSON_GetObjectItem(layer_node, "app_keys")) { + if (!props.is_override) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer %s contains app_keys, but any app_keys can only be provided by the override meta layer. " + "These will be ignored.", + props.info.layerName); + } + + result = loader_parse_json_array_of_strings(inst, layer_node, "app_keys", &props.app_key_paths); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + + char *library_arch = loader_cJSON_GetStringValue(loader_cJSON_GetObjectItem(layer_node, "library_arch")); + if (NULL != library_arch) { + if ((strncmp(library_arch, "32", 2) == 0 && sizeof(void *) != 4) || + (strncmp(library_arch, "64", 2) == 0 && sizeof(void *) != 8)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "The library architecture in layer %s doesn't match the current running architecture, skipping this layer", + filename); + result = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + } + + result = VK_SUCCESS; + +out: + // Try to append the layer property + if (VK_SUCCESS == result) { + result = loader_append_layer_property(inst, layer_instance_list, &props); + } + // If appending fails - free all the memory allocated in it + if (VK_SUCCESS != result) { + loader_free_layer_properties(inst, &props); + } + return result; +} + +bool is_valid_layer_json_version(const loader_api_version *layer_json) { + // Supported versions are: 1.0.0, 1.0.1, 1.1.0 - 1.1.2, and 1.2.0 - 1.2.1. + if ((layer_json->major == 1 && layer_json->minor == 2 && layer_json->patch < 2) || + (layer_json->major == 1 && layer_json->minor == 1 && layer_json->patch < 3) || + (layer_json->major == 1 && layer_json->minor == 0 && layer_json->patch < 2)) { + return true; + } + return false; +} + +// Given a cJSON struct (json) of the top level JSON object from layer manifest +// file, add entry to the layer_list. Fill out the layer_properties in this list +// entry from the input cJSON object. +// +// \returns +// void +// layer_list has a new entry and initialized accordingly. +// If the json input object does not have all the required fields no entry +// is added to the list. +VkResult loader_add_layer_properties(const struct loader_instance *inst, struct loader_layer_list *layer_instance_list, cJSON *json, + bool is_implicit, char *filename) { + // The following Fields in layer manifest file that are required: + // - "file_format_version" + // - If more than one "layer" object are used, then the "layers" array is + // required + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + // Make sure sure the top level json value is an object + if (!json || json->type != cJSON_Object) { + goto out; + } + char *file_vers = loader_cJSON_GetStringValue(loader_cJSON_GetObjectItem(json, "file_format_version")); + if (NULL == file_vers) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_properties: Manifest %s missing required field file_format_version", filename); + goto out; + } + + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, "Found manifest file %s (file version %s)", filename, file_vers); + // Get the major/minor/and patch as integers for easier comparison + loader_api_version json_version = loader_make_full_version(loader_parse_version_string(file_vers)); + + if (!is_valid_layer_json_version(&json_version)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_properties: %s has unknown layer manifest file version %d.%d.%d. May cause errors.", filename, + json_version.major, json_version.minor, json_version.patch); + } + + // If "layers" is present, read in the array of layer objects + cJSON *layers_node = loader_cJSON_GetObjectItem(json, "layers"); + if (layers_node != NULL) { + // Supported versions started in 1.0.1, so anything newer + if (!loader_check_version_meets_required(loader_combine_version(1, 0, 1), json_version)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_properties: \'layers\' tag not supported until file version 1.0.1, but %s is reporting " + "version %s", + filename, file_vers); + } + cJSON *layer_node = NULL; + cJSON_ArrayForEach(layer_node, layers_node) { + if (layer_node->type != cJSON_Object) { + loader_log( + inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_properties: Array element in \"layers\" field in manifest JSON file %s is not an object. " + "Skipping this file", + filename); + goto out; + } + result = loader_read_layer_json(inst, layer_instance_list, layer_node, json_version, is_implicit, filename); + } + } else { + // Otherwise, try to read in individual layers + cJSON *layer_node = loader_cJSON_GetObjectItem(json, "layer"); + if (layer_node == NULL) { + // Don't warn if this happens to be an ICD manifest + if (loader_cJSON_GetObjectItem(json, "ICD") == NULL) { + loader_log( + inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_properties: Can not find 'layer' object in manifest JSON file %s. Skipping this file.", + filename); + } + goto out; + } + // Loop through all "layer" objects in the file to get a count of them + // first. + uint16_t layer_count = 0; + cJSON *tempNode = layer_node; + do { + tempNode = tempNode->next; + layer_count++; + } while (tempNode != NULL); + + // Throw a warning if we encounter multiple "layer" objects in file + // versions newer than 1.0.0. Having multiple objects with the same + // name at the same level is actually a JSON standard violation. + if (layer_count > 1 && loader_check_version_meets_required(loader_combine_version(1, 0, 1), json_version)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_add_layer_properties: Multiple 'layer' nodes are deprecated starting in file version \"1.0.1\". " + "Please use 'layers' : [] array instead in %s.", + filename); + } else { + do { + result = loader_read_layer_json(inst, layer_instance_list, layer_node, json_version, is_implicit, filename); + layer_node = layer_node->next; + } while (layer_node != NULL); + } + } + +out: + + return result; +} + +size_t determine_data_file_path_size(const char *cur_path, size_t relative_path_size) { + size_t path_size = 0; + + if (NULL != cur_path) { + // For each folder in cur_path, (detected by finding additional + // path separators in the string) we need to add the relative path on + // the end. Plus, leave an additional two slots on the end to add an + // additional directory slash and path separator if needed + path_size += strlen(cur_path) + relative_path_size + 2; + for (const char *x = cur_path; *x; ++x) { + if (*x == PATH_SEPARATOR) { + path_size += relative_path_size + 2; + } + } + } + + return path_size; +} + +void copy_data_file_info(const char *cur_path, const char *relative_path, size_t relative_path_size, char **output_path) { + if (NULL != cur_path) { + uint32_t start = 0; + uint32_t stop = 0; + char *cur_write = *output_path; + + while (cur_path[start] != '\0') { + while (cur_path[start] == PATH_SEPARATOR) { + start++; + } + stop = start; + while (cur_path[stop] != PATH_SEPARATOR && cur_path[stop] != '\0') { + stop++; + } + const size_t s = stop - start; + if (s) { + memcpy(cur_write, &cur_path[start], s); + cur_write += s; + + // If this is a specific JSON file, just add it and don't add any + // relative path or directory symbol to it. + if (!is_json(cur_write - 5, s)) { + // Add the relative directory if present. + if (relative_path_size > 0) { + // If last symbol written was not a directory symbol, add it. + if (*(cur_write - 1) != DIRECTORY_SYMBOL) { + *cur_write++ = DIRECTORY_SYMBOL; + } + memcpy(cur_write, relative_path, relative_path_size); + cur_write += relative_path_size; + } + } + + *cur_write++ = PATH_SEPARATOR; + start = stop; + } + } + *output_path = cur_write; + } +} + +// If the file found is a manifest file name, add it to the out_files manifest list. +VkResult add_if_manifest_file(const struct loader_instance *inst, const char *file_name, struct loader_string_list *out_files) { + VkResult vk_result = VK_SUCCESS; + + assert(NULL != file_name && "add_if_manifest_file: Received NULL pointer for file_name"); + assert(NULL != out_files && "add_if_manifest_file: Received NULL pointer for out_files"); + + // Look for files ending with ".json" suffix + size_t name_len = strlen(file_name); + const char *name_suffix = file_name + name_len - 5; + if (!is_json(name_suffix, name_len)) { + // Use incomplete to indicate invalid name, but to keep going. + vk_result = VK_INCOMPLETE; + goto out; + } + + vk_result = copy_str_to_string_list(inst, out_files, file_name, name_len); + +out: + + return vk_result; +} + +// Add any files found in the search_path. If any path in the search path points to a specific JSON, attempt to +// only open that one JSON. Otherwise, if the path is a folder, search the folder for JSON files. +VkResult add_data_files(const struct loader_instance *inst, char *search_path, struct loader_string_list *out_files, + bool use_first_found_manifest) { + VkResult vk_result = VK_SUCCESS; + char full_path[2048]; +#if !defined(_WIN32) + char temp_path[2048]; +#endif + + // Now, parse the paths + char *next_file = search_path; + while (NULL != next_file && *next_file != '\0') { + char *name = NULL; + char *cur_file = next_file; + next_file = loader_get_next_path(cur_file); + + // Is this a JSON file, then try to open it. + size_t len = strlen(cur_file); + if (is_json(cur_file + len - 5, len)) { +#if defined(_WIN32) + name = cur_file; +#elif COMMON_UNIX_PLATFORMS + // Only Linux has relative paths, make a copy of location so it isn't modified + size_t str_len; + if (NULL != next_file) { + str_len = next_file - cur_file + 1; + } else { + str_len = strlen(cur_file) + 1; + } + if (str_len > sizeof(temp_path)) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "add_data_files: Path to %s too long", cur_file); + continue; + } + strncpy(temp_path, cur_file, str_len); + name = temp_path; +#else +#warning add_data_files must define relative path copy for this platform +#endif + loader_get_fullpath(cur_file, name, sizeof(full_path), full_path); + name = full_path; + + VkResult local_res; + local_res = add_if_manifest_file(inst, name, out_files); + + // Incomplete means this was not a valid data file. + if (local_res == VK_INCOMPLETE) { + continue; + } else if (local_res != VK_SUCCESS) { + vk_result = local_res; + break; + } + } else { // Otherwise, treat it as a directory + DIR *dir_stream = loader_opendir(inst, cur_file); + if (NULL == dir_stream) { + continue; + } + while (1) { + errno = 0; + struct dirent *dir_entry = readdir(dir_stream); +#if !defined(WIN32) // Windows doesn't use readdir, don't check errors on functions which aren't called + if (errno != 0) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "readdir failed with %d: %s", errno, strerror(errno)); + break; + } +#endif + if (NULL == dir_entry) { + break; + } + + name = &(dir_entry->d_name[0]); + loader_get_fullpath(name, cur_file, sizeof(full_path), full_path); + name = full_path; + + VkResult local_res; + local_res = add_if_manifest_file(inst, name, out_files); + + // Incomplete means this was not a valid data file. + if (local_res == VK_INCOMPLETE) { + continue; + } else if (local_res != VK_SUCCESS) { + vk_result = local_res; + break; + } + } + loader_closedir(inst, dir_stream); + if (vk_result != VK_SUCCESS) { + goto out; + } + } + if (use_first_found_manifest && out_files->count > 0) { + break; + } + } + +out: + + return vk_result; +} + +// Look for data files in the provided paths, but first check the environment override to determine if we should use that +// instead. +VkResult read_data_files_in_search_paths(const struct loader_instance *inst, enum loader_data_files_type manifest_type, + const char *path_override, bool *override_active, struct loader_string_list *out_files) { + VkResult vk_result = VK_SUCCESS; + char *override_env = NULL; + const char *override_path = NULL; + char *additional_env = NULL; + size_t search_path_size = 0; + char *search_path = NULL; + char *cur_path_ptr = NULL; + bool use_first_found_manifest = false; +#if COMMON_UNIX_PLATFORMS + const char *relative_location = NULL; // Only used on unix platforms + size_t rel_size = 0; // unused in windows, dont declare so no compiler warnings are generated +#endif + +#if defined(_WIN32) + char *package_path = NULL; +#elif COMMON_UNIX_PLATFORMS + // Determine how much space is needed to generate the full search path + // for the current manifest files. + char *xdg_config_home = loader_secure_getenv("XDG_CONFIG_HOME", inst); + char *xdg_config_dirs = loader_secure_getenv("XDG_CONFIG_DIRS", inst); + +#if !defined(__Fuchsia__) && !defined(__QNX__) + if (NULL == xdg_config_dirs || '\0' == xdg_config_dirs[0]) { + xdg_config_dirs = FALLBACK_CONFIG_DIRS; + } +#endif + + char *xdg_data_home = loader_secure_getenv("XDG_DATA_HOME", inst); + char *xdg_data_dirs = loader_secure_getenv("XDG_DATA_DIRS", inst); + +#if !defined(__Fuchsia__) && !defined(__QNX__) + if (NULL == xdg_data_dirs || '\0' == xdg_data_dirs[0]) { + xdg_data_dirs = FALLBACK_DATA_DIRS; + } +#endif + + char *home = NULL; + char *default_data_home = NULL; + char *default_config_home = NULL; + char *home_data_dir = NULL; + char *home_config_dir = NULL; + + // Only use HOME if XDG_DATA_HOME is not present on the system + home = loader_secure_getenv("HOME", inst); + if (home != NULL) { + if (NULL == xdg_config_home || '\0' == xdg_config_home[0]) { + const char config_suffix[] = "/.config"; + size_t default_config_home_len = strlen(home) + sizeof(config_suffix) + 1; + default_config_home = loader_instance_heap_calloc(inst, default_config_home_len, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (default_config_home == NULL) { + vk_result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + strncpy(default_config_home, home, default_config_home_len); + strncat(default_config_home, config_suffix, default_config_home_len); + } + if (NULL == xdg_data_home || '\0' == xdg_data_home[0]) { + const char data_suffix[] = "/.local/share"; + size_t default_data_home_len = strlen(home) + sizeof(data_suffix) + 1; + default_data_home = loader_instance_heap_calloc(inst, default_data_home_len, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (default_data_home == NULL) { + vk_result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + strncpy(default_data_home, home, default_data_home_len); + strncat(default_data_home, data_suffix, default_data_home_len); + } + } + + if (NULL != default_config_home) { + home_config_dir = default_config_home; + } else { + home_config_dir = xdg_config_home; + } + if (NULL != default_data_home) { + home_data_dir = default_data_home; + } else { + home_data_dir = xdg_data_home; + } +#else +#warning read_data_files_in_search_paths unsupported platform +#endif + + switch (manifest_type) { + case LOADER_DATA_FILE_MANIFEST_DRIVER: + override_env = loader_secure_getenv(VK_DRIVER_FILES_ENV_VAR, inst); + if (NULL == override_env) { + // Not there, so fall back to the old name + override_env = loader_secure_getenv(VK_ICD_FILENAMES_ENV_VAR, inst); + } + additional_env = loader_secure_getenv(VK_ADDITIONAL_DRIVER_FILES_ENV_VAR, inst); +#if COMMON_UNIX_PLATFORMS + relative_location = VK_DRIVERS_INFO_RELATIVE_DIR; +#endif +#if defined(_WIN32) + package_path = windows_get_app_package_manifest_path(inst); +#endif + break; + case LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER: + override_env = loader_secure_getenv(VK_IMPLICIT_LAYER_PATH_ENV_VAR, inst); + additional_env = loader_secure_getenv(VK_ADDITIONAL_IMPLICIT_LAYER_PATH_ENV_VAR, inst); +#if COMMON_UNIX_PLATFORMS + relative_location = VK_ILAYERS_INFO_RELATIVE_DIR; +#endif +#if defined(_WIN32) + package_path = windows_get_app_package_manifest_path(inst); +#endif + break; + case LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER: + override_env = loader_secure_getenv(VK_EXPLICIT_LAYER_PATH_ENV_VAR, inst); + additional_env = loader_secure_getenv(VK_ADDITIONAL_EXPLICIT_LAYER_PATH_ENV_VAR, inst); +#if COMMON_UNIX_PLATFORMS + relative_location = VK_ELAYERS_INFO_RELATIVE_DIR; +#endif + break; + default: + assert(false && "Shouldn't get here!"); + break; + } + + // Log a message when VK_LAYER_PATH is set but the override layer paths take priority + if (manifest_type == LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER && NULL != override_env && NULL != path_override) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Ignoring VK_LAYER_PATH. The Override layer is active and has override paths set, which takes priority. " + "VK_LAYER_PATH is set to %s", + override_env); + } + + if (path_override != NULL) { + override_path = path_override; + } else if (override_env != NULL) { + override_path = override_env; + } + + // Add two by default for NULL terminator and one path separator on end (just in case) + search_path_size = 2; + + // If there's an override, use that (and the local folder if required) and nothing else + if (NULL != override_path) { + // Local folder and null terminator + search_path_size += strlen(override_path) + 2; + } else { + // Add the size of any additional search paths defined in the additive environment variable + if (NULL != additional_env) { + search_path_size += determine_data_file_path_size(additional_env, 0) + 2; +#if defined(_WIN32) + } + if (NULL != package_path) { + search_path_size += determine_data_file_path_size(package_path, 0) + 2; + } + if (search_path_size == 2) { + goto out; + } +#elif COMMON_UNIX_PLATFORMS + } + + // Add the general search folders (with the appropriate relative folder added) + rel_size = strlen(relative_location); + if (rel_size > 0) { +#if defined(__APPLE__) + search_path_size += MAXPATHLEN; +#endif + // Only add the home folders if defined + if (NULL != home_config_dir) { + search_path_size += determine_data_file_path_size(home_config_dir, rel_size); + } + search_path_size += determine_data_file_path_size(xdg_config_dirs, rel_size); + search_path_size += determine_data_file_path_size(SYSCONFDIR, rel_size); +#if defined(EXTRASYSCONFDIR) + search_path_size += determine_data_file_path_size(EXTRASYSCONFDIR, rel_size); +#endif + // Only add the home folders if defined + if (NULL != home_data_dir) { + search_path_size += determine_data_file_path_size(home_data_dir, rel_size); + } + search_path_size += determine_data_file_path_size(xdg_data_dirs, rel_size); + } +#else +#warning read_data_files_in_search_paths unsupported platform +#endif + } + + // Allocate the required space + search_path = loader_instance_heap_calloc(inst, search_path_size, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL == search_path) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "read_data_files_in_search_paths: Failed to allocate space for search path of length %d", + (uint32_t)search_path_size); + vk_result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + cur_path_ptr = search_path; + + // Add the remaining paths to the list + if (NULL != override_path) { + size_t override_path_len = strlen(override_path); + loader_strncpy(cur_path_ptr, search_path_size, override_path, override_path_len); + cur_path_ptr += override_path_len; + } else { + // Add any additional search paths defined in the additive environment variable + if (NULL != additional_env) { + copy_data_file_info(additional_env, NULL, 0, &cur_path_ptr); + } + +#if defined(_WIN32) + if (NULL != package_path) { + copy_data_file_info(package_path, NULL, 0, &cur_path_ptr); + } +#elif COMMON_UNIX_PLATFORMS + if (rel_size > 0) { +#if defined(__APPLE__) + // Add the bundle's Resources dir to the beginning of the search path. + // Looks for manifests in the bundle first, before any system directories. + // This also appears to work unmodified for iOS, it finds the app bundle on the devices + // file system. (RSW) + CFBundleRef main_bundle = CFBundleGetMainBundle(); + if (NULL != main_bundle) { + CFURLRef ref = CFBundleCopyResourcesDirectoryURL(main_bundle); + if (NULL != ref) { + if (CFURLGetFileSystemRepresentation(ref, TRUE, (UInt8 *)cur_path_ptr, search_path_size)) { + cur_path_ptr += strlen(cur_path_ptr); + *cur_path_ptr++ = DIRECTORY_SYMBOL; + memcpy(cur_path_ptr, relative_location, rel_size); + cur_path_ptr += rel_size; + *cur_path_ptr++ = PATH_SEPARATOR; + if (manifest_type == LOADER_DATA_FILE_MANIFEST_DRIVER) { + use_first_found_manifest = true; + } + } + CFRelease(ref); + } + } +#endif // __APPLE__ + + // Only add the home folders if not NULL + if (NULL != home_config_dir) { + copy_data_file_info(home_config_dir, relative_location, rel_size, &cur_path_ptr); + } + copy_data_file_info(xdg_config_dirs, relative_location, rel_size, &cur_path_ptr); + copy_data_file_info(SYSCONFDIR, relative_location, rel_size, &cur_path_ptr); +#if defined(EXTRASYSCONFDIR) + copy_data_file_info(EXTRASYSCONFDIR, relative_location, rel_size, &cur_path_ptr); +#endif + + // Only add the home folders if not NULL + if (NULL != home_data_dir) { + copy_data_file_info(home_data_dir, relative_location, rel_size, &cur_path_ptr); + } + copy_data_file_info(xdg_data_dirs, relative_location, rel_size, &cur_path_ptr); + } + + // Remove the last path separator + --cur_path_ptr; + + assert(cur_path_ptr - search_path < (ptrdiff_t)search_path_size); + *cur_path_ptr = '\0'; +#else +#warning read_data_files_in_search_paths unsupported platform +#endif + } + + // Remove duplicate paths, or it would result in duplicate extensions, duplicate devices, etc. + // This uses minimal memory, but is O(N^2) on the number of paths. Expect only a few paths. + char path_sep_str[2] = {PATH_SEPARATOR, '\0'}; + size_t search_path_updated_size = strlen(search_path); + for (size_t first = 0; first < search_path_updated_size;) { + // If this is an empty path, erase it + if (search_path[first] == PATH_SEPARATOR) { + memmove(&search_path[first], &search_path[first + 1], search_path_updated_size - first + 1); + search_path_updated_size -= 1; + continue; + } + + size_t first_end = first + 1; + first_end += strcspn(&search_path[first_end], path_sep_str); + for (size_t second = first_end + 1; second < search_path_updated_size;) { + size_t second_end = second + 1; + second_end += strcspn(&search_path[second_end], path_sep_str); + if (first_end - first == second_end - second && + !strncmp(&search_path[first], &search_path[second], second_end - second)) { + // Found duplicate. Include PATH_SEPARATOR in second_end, then erase it from search_path. + if (search_path[second_end] == PATH_SEPARATOR) { + second_end++; + } + memmove(&search_path[second], &search_path[second_end], search_path_updated_size - second_end + 1); + search_path_updated_size -= second_end - second; + } else { + second = second_end + 1; + } + } + first = first_end + 1; + } + search_path_size = search_path_updated_size; + + // Print out the paths being searched if debugging is enabled + uint32_t log_flags = 0; + if (search_path_size > 0) { + char *tmp_search_path = loader_instance_heap_alloc(inst, search_path_size + 1, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL != tmp_search_path) { + loader_strncpy(tmp_search_path, search_path_size + 1, search_path, search_path_size); + tmp_search_path[search_path_size] = '\0'; + if (manifest_type == LOADER_DATA_FILE_MANIFEST_DRIVER) { + log_flags = VULKAN_LOADER_DRIVER_BIT; + loader_log(inst, VULKAN_LOADER_DRIVER_BIT, 0, "Searching for driver manifest files"); + } else { + log_flags = VULKAN_LOADER_LAYER_BIT; + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, "Searching for %s layer manifest files", + manifest_type == LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER ? "explicit" : "implicit"); + } + loader_log(inst, log_flags, 0, " In following locations:"); + char *cur_file; + char *next_file = tmp_search_path; + while (NULL != next_file && *next_file != '\0') { + cur_file = next_file; + next_file = loader_get_next_path(cur_file); + loader_log(inst, log_flags, 0, " %s", cur_file); + } + loader_instance_heap_free(inst, tmp_search_path); + } + } + + // Now, parse the paths and add any manifest files found in them. + vk_result = add_data_files(inst, search_path, out_files, use_first_found_manifest); + + if (log_flags != 0 && out_files->count > 0) { + loader_log(inst, log_flags, 0, " Found the following files:"); + for (uint32_t cur_file = 0; cur_file < out_files->count; ++cur_file) { + loader_log(inst, log_flags, 0, " %s", out_files->list[cur_file]); + } + } else { + loader_log(inst, log_flags, 0, " Found no files"); + } + + if (NULL != override_path) { + *override_active = true; + } else { + *override_active = false; + } + +out: + + loader_free_getenv(additional_env, inst); + loader_free_getenv(override_env, inst); +#if defined(_WIN32) + loader_instance_heap_free(inst, package_path); +#elif COMMON_UNIX_PLATFORMS + loader_free_getenv(xdg_config_home, inst); + loader_free_getenv(xdg_config_dirs, inst); + loader_free_getenv(xdg_data_home, inst); + loader_free_getenv(xdg_data_dirs, inst); + loader_free_getenv(xdg_data_home, inst); + loader_free_getenv(home, inst); + loader_instance_heap_free(inst, default_data_home); + loader_instance_heap_free(inst, default_config_home); +#else +#warning read_data_files_in_search_paths unsupported platform +#endif + + loader_instance_heap_free(inst, search_path); + + return vk_result; +} + +// Find the Vulkan library manifest files. +// +// This function scans the appropriate locations for a list of JSON manifest files based on the +// "manifest_type". The location is interpreted as Registry path on Windows and a directory path(s) +// on Linux. +// "home_location" is an additional directory in the users home directory to look at. It is +// expanded into the dir path $XDG_DATA_HOME/home_location or $HOME/.local/share/home_location +// depending on environment variables. This "home_location" is only used on Linux. +// +// \returns +// VKResult +// A string list of manifest files to be opened in out_files param. +// List has a pointer to string for each manifest filename. +// When done using the list in out_files, pointers should be freed. +// Location or override string lists can be either files or directories as +// follows: +// | location | override +// -------------------------------- +// Win ICD | files | files +// Win Layer | files | dirs +// Linux ICD | dirs | files +// Linux Layer| dirs | dirs + +VkResult loader_get_data_files(const struct loader_instance *inst, enum loader_data_files_type manifest_type, + const char *path_override, struct loader_string_list *out_files) { + VkResult res = VK_SUCCESS; + bool override_active = false; + + // Free and init the out_files information so there's no false data left from uninitialized variables. + free_string_list(inst, out_files); + + res = read_data_files_in_search_paths(inst, manifest_type, path_override, &override_active, out_files); + if (VK_SUCCESS != res) { + goto out; + } + +#if defined(_WIN32) + // Read the registry if the override wasn't active. + if (!override_active) { + bool warn_if_not_present = false; + char *registry_location = NULL; + + switch (manifest_type) { + default: + goto out; + case LOADER_DATA_FILE_MANIFEST_DRIVER: + warn_if_not_present = true; + registry_location = VK_DRIVERS_INFO_REGISTRY_LOC; + break; + case LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER: + registry_location = VK_ILAYERS_INFO_REGISTRY_LOC; + break; + case LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER: + warn_if_not_present = true; + registry_location = VK_ELAYERS_INFO_REGISTRY_LOC; + break; + } + VkResult tmp_res = + windows_read_data_files_in_registry(inst, manifest_type, warn_if_not_present, registry_location, out_files); + // Only return an error if there was an error this time, and no manifest files from before. + if (VK_SUCCESS != tmp_res && out_files->count == 0) { + res = tmp_res; + goto out; + } + } +#endif + +out: + + if (VK_SUCCESS != res) { + free_string_list(inst, out_files); + } + + return res; +} + +struct ICDManifestInfo { + char *full_library_path; + uint32_t version; +}; + +// Takes a json file, opens, reads, and parses an ICD Manifest out of it. +// Should only return VK_SUCCESS, VK_ERROR_INCOMPATIBLE_DRIVER, or VK_ERROR_OUT_OF_HOST_MEMORY +VkResult loader_parse_icd_manifest(const struct loader_instance *inst, char *file_str, struct ICDManifestInfo *icd, + bool *skipped_portability_drivers) { + VkResult res = VK_SUCCESS; + cJSON *icd_manifest_json = NULL; + + if (file_str == NULL) { + goto out; + } + + res = loader_get_json(inst, file_str, &icd_manifest_json); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + if (res != VK_SUCCESS || NULL == icd_manifest_json) { + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + cJSON *file_format_version_json = loader_cJSON_GetObjectItem(icd_manifest_json, "file_format_version"); + if (file_format_version_json == NULL) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: ICD JSON %s does not have a \'file_format_version\' field. Skipping ICD JSON.", + file_str); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + char *file_vers_str = loader_cJSON_GetStringValue(file_format_version_json); + if (NULL == file_vers_str) { + // Only reason the print can fail is if there was an allocation issue + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: Failed retrieving ICD JSON %s \'file_format_version\' field. Skipping ICD JSON", + file_str); + goto out; + } + loader_log(inst, VULKAN_LOADER_DRIVER_BIT, 0, "Found ICD manifest file %s, version %s", file_str, file_vers_str); + + // Get the version of the driver manifest + loader_api_version json_file_version = loader_make_full_version(loader_parse_version_string(file_vers_str)); + + // Loader only knows versions 1.0.0 and 1.0.1, anything above it is unknown + if (loader_check_version_meets_required(loader_combine_version(1, 0, 2), json_file_version)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: %s has unknown icd manifest file version %d.%d.%d. May cause errors.", file_str, + json_file_version.major, json_file_version.minor, json_file_version.patch); + } + + cJSON *itemICD = loader_cJSON_GetObjectItem(icd_manifest_json, "ICD"); + if (itemICD == NULL) { + // Don't warn if this happens to be a layer manifest file + if (loader_cJSON_GetObjectItem(icd_manifest_json, "layer") == NULL && + loader_cJSON_GetObjectItem(icd_manifest_json, "layers") == NULL) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: Can not find \'ICD\' object in ICD JSON file %s. Skipping ICD JSON", file_str); + } + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + cJSON *library_path_json = loader_cJSON_GetObjectItem(itemICD, "library_path"); + if (library_path_json == NULL) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: Failed to find \'library_path\' object in ICD JSON file %s. Skipping ICD JSON.", + file_str); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + bool out_of_memory = false; + char *library_path = loader_cJSON_Print(library_path_json, &out_of_memory); + if (out_of_memory) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: Failed retrieving ICD JSON %s \'library_path\' field. Skipping ICD JSON.", file_str); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } else if (!library_path || strlen(library_path) == 0) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: ICD JSON %s \'library_path\' field is empty. Skipping ICD JSON.", file_str); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + loader_instance_heap_free(inst, library_path); + goto out; + } + + // Print out the paths being searched if debugging is enabled + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_DRIVER_BIT, 0, "Searching for ICD drivers named %s", library_path); + // This function takes ownership of library_path - so we don't need to clean it up + res = combine_manifest_directory_and_library_path(inst, library_path, file_str, &icd->full_library_path); + if (VK_SUCCESS != res) { + goto out; + } + + cJSON *api_version_json = loader_cJSON_GetObjectItem(itemICD, "api_version"); + if (api_version_json == NULL) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: ICD JSON %s does not have an \'api_version\' field. Skipping ICD JSON.", file_str); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + char *version_str = loader_cJSON_GetStringValue(api_version_json); + if (NULL == version_str) { + // Only reason the print can fail is if there was an allocation issue + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: Failed retrieving ICD JSON %s \'api_version\' field. Skipping ICD JSON.", file_str); + + goto out; + } + icd->version = loader_parse_version_string(version_str); + + if (VK_API_VERSION_VARIANT(icd->version) != 0) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_parse_icd_manifest: Driver's ICD JSON %s \'api_version\' field contains a non-zero variant value of %d. " + " Skipping ICD JSON.", + file_str, VK_API_VERSION_VARIANT(icd->version)); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + // Skip over ICD's which contain a true "is_portability_driver" value whenever the application doesn't enable + // portability enumeration. + cJSON *is_portability_driver_json = loader_cJSON_GetObjectItem(itemICD, "is_portability_driver"); + if (loader_cJSON_IsTrue(is_portability_driver_json) && inst && !inst->portability_enumeration_enabled) { + if (skipped_portability_drivers) { + *skipped_portability_drivers = true; + } + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + char *library_arch_str = loader_cJSON_GetStringValue(loader_cJSON_GetObjectItem(itemICD, "library_arch")); + if (library_arch_str != NULL) { + if ((strncmp(library_arch_str, "32", 2) == 0 && sizeof(void *) != 4) || + (strncmp(library_arch_str, "64", 2) == 0 && sizeof(void *) != 8)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "loader_parse_icd_manifest: Driver library architecture doesn't match the current running " + "architecture, skipping this driver"); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + } +out: + loader_cJSON_Delete(icd_manifest_json); + return res; +} + +// Try to find the Vulkan ICD driver(s). +// +// This function scans the default system loader path(s) or path specified by either the +// VK_DRIVER_FILES or VK_ICD_FILENAMES environment variable in order to find loadable +// VK ICDs manifest files. +// From these manifest files it finds the ICD libraries. +// +// skipped_portability_drivers is used to report whether the loader found drivers which report +// portability but the application didn't enable the bit to enumerate them +// Can be NULL +// +// \returns +// Vulkan result +// (on result == VK_SUCCESS) a list of icds that were discovered +VkResult loader_icd_scan(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list, + const VkInstanceCreateInfo *pCreateInfo, bool *skipped_portability_drivers) { + VkResult res = VK_SUCCESS; + struct loader_string_list manifest_files = {0}; + struct loader_envvar_filter select_filter = {0}; + struct loader_envvar_filter disable_filter = {0}; + struct ICDManifestInfo *icd_details = NULL; + + // Set up the ICD Trampoline list so elements can be written into it. + res = loader_init_scanned_icd_list(inst, icd_tramp_list); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + return res; + } + + bool direct_driver_loading_exclusive_mode = false; + res = loader_scan_for_direct_drivers(inst, pCreateInfo, icd_tramp_list, &direct_driver_loading_exclusive_mode); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + if (direct_driver_loading_exclusive_mode) { + // Make sure to jump over the system & env-var driver discovery mechanisms if exclusive mode is set, even if no drivers + // were successfully found through the direct driver loading mechanism + goto out; + } + + // Parse the filter environment variables to determine if we have any special behavior + res = parse_generic_filter_environment_var(inst, VK_DRIVERS_SELECT_ENV_VAR, &select_filter); + if (VK_SUCCESS != res) { + goto out; + } + res = parse_generic_filter_environment_var(inst, VK_DRIVERS_DISABLE_ENV_VAR, &disable_filter); + if (VK_SUCCESS != res) { + goto out; + } + + // Get a list of manifest files for ICDs + res = loader_get_data_files(inst, LOADER_DATA_FILE_MANIFEST_DRIVER, NULL, &manifest_files); + if (VK_SUCCESS != res) { + goto out; + } + + icd_details = loader_stack_alloc(sizeof(struct ICDManifestInfo) * manifest_files.count); + if (NULL == icd_details) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + memset(icd_details, 0, sizeof(struct ICDManifestInfo) * manifest_files.count); + + for (uint32_t i = 0; i < manifest_files.count; i++) { + VkResult icd_res = VK_SUCCESS; + + icd_res = loader_parse_icd_manifest(inst, manifest_files.list[i], &icd_details[i], skipped_portability_drivers); + if (VK_ERROR_OUT_OF_HOST_MEMORY == icd_res) { + res = icd_res; + goto out; + } else if (VK_ERROR_INCOMPATIBLE_DRIVER == icd_res) { + continue; + } + + if (select_filter.count > 0 || disable_filter.count > 0) { + // Get only the filename for comparing to the filters + char *just_filename_str = strrchr(manifest_files.list[i], DIRECTORY_SYMBOL); + + // No directory symbol, just the filename + if (NULL == just_filename_str) { + just_filename_str = manifest_files.list[i]; + } else { + just_filename_str++; + } + + bool name_matches_select = + (select_filter.count > 0 && check_name_matches_filter_environment_var(just_filename_str, &select_filter)); + bool name_matches_disable = + (disable_filter.count > 0 && check_name_matches_filter_environment_var(just_filename_str, &disable_filter)); + + if (name_matches_disable && !name_matches_select) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "Driver \"%s\" ignored because it was disabled by env var \'%s\'", just_filename_str, + VK_DRIVERS_DISABLE_ENV_VAR); + continue; + } + if (select_filter.count != 0 && !name_matches_select) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "Driver \"%s\" ignored because not selected by env var \'%s\'", just_filename_str, + VK_DRIVERS_SELECT_ENV_VAR); + continue; + } + } + + enum loader_layer_library_status lib_status; + icd_res = + loader_scanned_icd_add(inst, icd_tramp_list, icd_details[i].full_library_path, icd_details[i].version, &lib_status); + if (VK_ERROR_OUT_OF_HOST_MEMORY == icd_res) { + res = icd_res; + goto out; + } else if (VK_ERROR_INCOMPATIBLE_DRIVER == icd_res) { + switch (lib_status) { + case LOADER_LAYER_LIB_NOT_LOADED: + case LOADER_LAYER_LIB_ERROR_FAILED_TO_LOAD: + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "loader_icd_scan: Failed loading library associated with ICD JSON %s. Ignoring this JSON", + icd_details[i].full_library_path); + break; + case LOADER_LAYER_LIB_ERROR_WRONG_BIT_TYPE: { + loader_log(inst, VULKAN_LOADER_DRIVER_BIT, 0, "Requested ICD %s was wrong bit-type. Ignoring this JSON", + icd_details[i].full_library_path); + break; + } + case LOADER_LAYER_LIB_SUCCESS_LOADED: + case LOADER_LAYER_LIB_ERROR_OUT_OF_MEMORY: + // Shouldn't be able to reach this but if it is, best to report a debug + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "Shouldn't reach this. A valid version of requested ICD %s was loaded but something bad " + "happened afterwards.", + icd_details[i].full_library_path); + break; + } + } + } + +out: + if (NULL != icd_details) { + // Successfully got the icd_details structure, which means we need to free the paths contained within + for (uint32_t i = 0; i < manifest_files.count; i++) { + loader_instance_heap_free(inst, icd_details[i].full_library_path); + } + } + free_string_list(inst, &manifest_files); + return res; +} + +// Gets the layer data files corresponding to manifest_type & path_override, then parses the resulting json objects +// into instance_layers +// Manifest type must be either implicit or explicit +VkResult loader_parse_instance_layers(struct loader_instance *inst, enum loader_data_files_type manifest_type, + const char *path_override, struct loader_layer_list *instance_layers) { + assert(manifest_type == LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER || manifest_type == LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER); + VkResult res = VK_SUCCESS; + struct loader_string_list manifest_files = {0}; + + res = loader_get_data_files(inst, manifest_type, path_override, &manifest_files); + if (VK_SUCCESS != res) { + goto out; + } + + for (uint32_t i = 0; i < manifest_files.count; i++) { + char *file_str = manifest_files.list[i]; + if (file_str == NULL) { + continue; + } + + // Parse file into JSON struct + cJSON *json = NULL; + VkResult local_res = loader_get_json(inst, file_str, &json); + if (VK_ERROR_OUT_OF_HOST_MEMORY == local_res) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } else if (VK_SUCCESS != local_res || NULL == json) { + continue; + } + + local_res = loader_add_layer_properties(inst, instance_layers, json, + manifest_type == LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER, file_str); + loader_cJSON_Delete(json); + + // If the error is anything other than out of memory we still want to try to load the other layers + if (VK_ERROR_OUT_OF_HOST_MEMORY == local_res) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + } +out: + free_string_list(inst, &manifest_files); + + return res; +} + +// Given a loader_layer_properties struct that is a valid override layer, concatenate the properties override paths and put them +// into the output parameter override_paths +VkResult get_override_layer_override_paths(struct loader_instance *inst, struct loader_layer_properties *prop, + char **override_paths) { + if (prop->override_paths.count > 0) { + char *cur_write_ptr = NULL; + size_t override_path_size = 0; + for (uint32_t j = 0; j < prop->override_paths.count; j++) { + override_path_size += determine_data_file_path_size(prop->override_paths.list[j], 0); + } + *override_paths = loader_instance_heap_alloc(inst, override_path_size, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (*override_paths == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + cur_write_ptr = &(*override_paths)[0]; + for (uint32_t j = 0; j < prop->override_paths.count; j++) { + copy_data_file_info(prop->override_paths.list[j], NULL, 0, &cur_write_ptr); + } + // Remove the last path separator + --cur_write_ptr; + assert(cur_write_ptr - (*override_paths) < (ptrdiff_t)override_path_size); + *cur_write_ptr = '\0'; + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Override layer has override paths set to %s", + *override_paths); + } + return VK_SUCCESS; +} + +VkResult loader_scan_for_layers(struct loader_instance *inst, struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *filters) { + VkResult res = VK_SUCCESS; + struct loader_layer_list settings_layers = {0}; + struct loader_layer_list regular_instance_layers = {0}; + bool override_layer_valid = false; + char *override_paths = NULL; + + bool should_search_for_other_layers = true; + res = get_settings_layers(inst, &settings_layers, &should_search_for_other_layers); + if (VK_SUCCESS != res) { + goto out; + } + + // If we should not look for layers using other mechanisms, assign settings_layers to instance_layers and jump to the + // output + if (!should_search_for_other_layers) { + *instance_layers = settings_layers; + memset(&settings_layers, 0, sizeof(struct loader_layer_list)); + goto out; + } + + res = loader_parse_instance_layers(inst, LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER, NULL, ®ular_instance_layers); + if (VK_SUCCESS != res) { + goto out; + } + + // Remove any extraneous override layers. + remove_all_non_valid_override_layers(inst, ®ular_instance_layers); + + // Check to see if the override layer is present, and use it's override paths. + for (uint32_t i = 0; i < regular_instance_layers.count; i++) { + struct loader_layer_properties *prop = ®ular_instance_layers.list[i]; + if (prop->is_override && loader_implicit_layer_is_enabled(inst, filters, prop) && prop->override_paths.count > 0) { + res = get_override_layer_override_paths(inst, prop, &override_paths); + if (VK_SUCCESS != res) { + goto out; + } + break; + } + } + + // Get a list of manifest files for explicit layers + res = loader_parse_instance_layers(inst, LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER, override_paths, ®ular_instance_layers); + if (VK_SUCCESS != res) { + goto out; + } + + // Verify any meta-layers in the list are valid and all the component layers are + // actually present in the available layer list + res = verify_all_meta_layers(inst, filters, ®ular_instance_layers, &override_layer_valid); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + return res; + } + + if (override_layer_valid) { + loader_remove_layers_in_blacklist(inst, ®ular_instance_layers); + if (NULL != inst) { + inst->override_layer_present = true; + } + } + + // Remove disabled layers + for (uint32_t i = 0; i < regular_instance_layers.count; ++i) { + if (!loader_layer_is_available(inst, filters, ®ular_instance_layers.list[i])) { + loader_remove_layer_in_list(inst, ®ular_instance_layers, i); + i--; + } + } + + res = combine_settings_layers_with_regular_layers(inst, &settings_layers, ®ular_instance_layers, instance_layers); + +out: + loader_delete_layer_list_and_properties(inst, &settings_layers); + loader_delete_layer_list_and_properties(inst, ®ular_instance_layers); + + loader_instance_heap_free(inst, override_paths); + return res; +} + +VkResult loader_scan_for_implicit_layers(struct loader_instance *inst, struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *layer_filters) { + VkResult res = VK_SUCCESS; + struct loader_layer_list settings_layers = {0}; + struct loader_layer_list regular_instance_layers = {0}; + bool override_layer_valid = false; + char *override_paths = NULL; + bool implicit_metalayer_present = false; + + bool should_search_for_other_layers = true; + res = get_settings_layers(inst, &settings_layers, &should_search_for_other_layers); + if (VK_SUCCESS != res) { + goto out; + } + + // Remove layers from settings file that are off, are explicit, or are implicit layers that aren't active + for (uint32_t i = 0; i < settings_layers.count; ++i) { + if (settings_layers.list[i].settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_OFF || + settings_layers.list[i].settings_control_value == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION || + (settings_layers.list[i].type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER) == VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER || + !loader_implicit_layer_is_enabled(inst, layer_filters, &settings_layers.list[i])) { + loader_remove_layer_in_list(inst, &settings_layers, i); + i--; + } + } + + // If we should not look for layers using other mechanisms, assign settings_layers to instance_layers and jump to the + // output + if (!should_search_for_other_layers) { + *instance_layers = settings_layers; + memset(&settings_layers, 0, sizeof(struct loader_layer_list)); + goto out; + } + + res = loader_parse_instance_layers(inst, LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER, NULL, ®ular_instance_layers); + if (VK_SUCCESS != res) { + goto out; + } + + // Remove any extraneous override layers. + remove_all_non_valid_override_layers(inst, ®ular_instance_layers); + + // Check to see if either the override layer is present, or another implicit meta-layer. + // Each of these may require explicit layers to be enabled at this time. + for (uint32_t i = 0; i < regular_instance_layers.count; i++) { + struct loader_layer_properties *prop = ®ular_instance_layers.list[i]; + if (prop->is_override && loader_implicit_layer_is_enabled(inst, layer_filters, prop)) { + override_layer_valid = true; + res = get_override_layer_override_paths(inst, prop, &override_paths); + if (VK_SUCCESS != res) { + goto out; + } + } else if (!prop->is_override && prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) { + implicit_metalayer_present = true; + } + } + + // If either the override layer or an implicit meta-layer are present, we need to add + // explicit layer info as well. Not to worry, though, all explicit layers not included + // in the override layer will be removed below in loader_remove_layers_in_blacklist(). + if (override_layer_valid || implicit_metalayer_present) { + res = + loader_parse_instance_layers(inst, LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER, override_paths, ®ular_instance_layers); + if (VK_SUCCESS != res) { + goto out; + } + } + + // Verify any meta-layers in the list are valid and all the component layers are + // actually present in the available layer list + res = verify_all_meta_layers(inst, layer_filters, ®ular_instance_layers, &override_layer_valid); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + return res; + } + + if (override_layer_valid || implicit_metalayer_present) { + loader_remove_layers_not_in_implicit_meta_layers(inst, ®ular_instance_layers); + if (override_layer_valid && inst != NULL) { + inst->override_layer_present = true; + } + } + + // Remove disabled layers + for (uint32_t i = 0; i < regular_instance_layers.count; ++i) { + if (!loader_implicit_layer_is_enabled(inst, layer_filters, ®ular_instance_layers.list[i])) { + loader_remove_layer_in_list(inst, ®ular_instance_layers, i); + i--; + } + } + + res = combine_settings_layers_with_regular_layers(inst, &settings_layers, ®ular_instance_layers, instance_layers); + +out: + loader_delete_layer_list_and_properties(inst, &settings_layers); + loader_delete_layer_list_and_properties(inst, ®ular_instance_layers); + + loader_instance_heap_free(inst, override_paths); + return res; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL loader_gpdpa_instance_terminator(VkInstance inst, const char *pName) { + // inst is not wrapped + if (inst == VK_NULL_HANDLE) { + return NULL; + } + + VkLayerInstanceDispatchTable *disp_table = *(VkLayerInstanceDispatchTable **)inst; + + if (disp_table == NULL) return NULL; + + struct loader_instance *loader_inst = loader_get_instance(inst); + + if (loader_inst->instance_finished_creation) { + disp_table = &loader_inst->terminator_dispatch; + } + + bool found_name; + void *addr = loader_lookup_instance_dispatch_table(disp_table, pName, &found_name); + if (found_name) { + return addr; + } + + // Check if any drivers support the function, and if so, add it to the unknown function list + addr = loader_phys_dev_ext_gpa_term(loader_get_instance(inst), pName); + if (NULL != addr) return addr; + + // Don't call down the chain, this would be an infinite loop + loader_log(NULL, VULKAN_LOADER_DEBUG_BIT, 0, "loader_gpdpa_instance_terminator() unrecognized name %s", pName); + return NULL; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL loader_gpa_instance_terminator(VkInstance inst, const char *pName) { + // Global functions - Do not need a valid instance handle to query + if (!strcmp(pName, "vkGetInstanceProcAddr")) { + return (PFN_vkVoidFunction)loader_gpa_instance_terminator; + } + if (!strcmp(pName, "vk_layerGetPhysicalDeviceProcAddr")) { + return (PFN_vkVoidFunction)loader_gpdpa_instance_terminator; + } + if (!strcmp(pName, "vkCreateInstance")) { + return (PFN_vkVoidFunction)terminator_CreateInstance; + } + // If a layer is querying pre-instance functions using vkGetInstanceProcAddr, we need to return function pointers that match the + // Vulkan API + if (!strcmp(pName, "vkEnumerateInstanceLayerProperties")) { + return (PFN_vkVoidFunction)terminator_EnumerateInstanceLayerProperties; + } + if (!strcmp(pName, "vkEnumerateInstanceExtensionProperties")) { + return (PFN_vkVoidFunction)terminator_EnumerateInstanceExtensionProperties; + } + if (!strcmp(pName, "vkEnumerateInstanceVersion")) { + return (PFN_vkVoidFunction)terminator_EnumerateInstanceVersion; + } + + // While the spec is very clear that querying vkCreateDevice requires a valid VkInstance, because the loader allowed querying + // with a NULL VkInstance handle for a long enough time, it is impractical to fix this bug in the loader + + // As such, this is a bug to maintain compatibility for the RTSS layer (Riva Tuner Statistics Server) but may + // be depended upon by other layers out in the wild. + if (!strcmp(pName, "vkCreateDevice")) { + return (PFN_vkVoidFunction)terminator_CreateDevice; + } + + // inst is not wrapped + if (inst == VK_NULL_HANDLE) { + return NULL; + } + VkLayerInstanceDispatchTable *disp_table = *(VkLayerInstanceDispatchTable **)inst; + + if (disp_table == NULL) return NULL; + + struct loader_instance *loader_inst = loader_get_instance(inst); + + // The VK_EXT_debug_utils functions need a special case here so the terminators can still be found from + // vkGetInstanceProcAddr This is because VK_EXT_debug_utils is an instance level extension with device level functions, and + // is 'supported' by the loader. + // These functions need a terminator to handle the case of a driver not supporting VK_EXT_debug_utils when there are layers + // present which not check for NULL before calling the function. + if (!strcmp(pName, "vkSetDebugUtilsObjectNameEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_SetDebugUtilsObjectNameEXT : NULL; + } + if (!strcmp(pName, "vkSetDebugUtilsObjectTagEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_SetDebugUtilsObjectTagEXT : NULL; + } + if (!strcmp(pName, "vkQueueBeginDebugUtilsLabelEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_QueueBeginDebugUtilsLabelEXT : NULL; + } + if (!strcmp(pName, "vkQueueEndDebugUtilsLabelEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_QueueEndDebugUtilsLabelEXT : NULL; + } + if (!strcmp(pName, "vkQueueInsertDebugUtilsLabelEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_QueueInsertDebugUtilsLabelEXT + : NULL; + } + if (!strcmp(pName, "vkCmdBeginDebugUtilsLabelEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_CmdBeginDebugUtilsLabelEXT : NULL; + } + if (!strcmp(pName, "vkCmdEndDebugUtilsLabelEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_CmdEndDebugUtilsLabelEXT : NULL; + } + if (!strcmp(pName, "vkCmdInsertDebugUtilsLabelEXT")) { + return loader_inst->enabled_extensions.ext_debug_utils ? (PFN_vkVoidFunction)terminator_CmdInsertDebugUtilsLabelEXT : NULL; + } + + if (loader_inst->instance_finished_creation) { + disp_table = &loader_inst->terminator_dispatch; + } + + bool found_name; + void *addr = loader_lookup_instance_dispatch_table(disp_table, pName, &found_name); + if (found_name) { + return addr; + } + + // Check if it is an unknown physical device function, to see if any drivers support it. + addr = loader_phys_dev_ext_gpa_term(loader_get_instance(inst), pName); + if (addr) { + return addr; + } + + // Assume it is an unknown device function, check to see if any drivers support it. + addr = loader_dev_ext_gpa_term(loader_get_instance(inst), pName); + if (addr) { + return addr; + } + + // Don't call down the chain, this would be an infinite loop + loader_log(NULL, VULKAN_LOADER_DEBUG_BIT, 0, "loader_gpa_instance_terminator() unrecognized name %s", pName); + return NULL; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL loader_gpa_device_terminator(VkDevice device, const char *pName) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + + // Return this function if a layer above here is asking for the vkGetDeviceProcAddr. + // This is so we can properly intercept any device commands needing a terminator. + if (!strcmp(pName, "vkGetDeviceProcAddr")) { + return (PFN_vkVoidFunction)loader_gpa_device_terminator; + } + + // NOTE: Device Funcs needing Trampoline/Terminator. + // Overrides for device functions needing a trampoline and + // a terminator because certain device entry-points still need to go + // through a terminator before hitting the ICD. This could be for + // several reasons, but the main one is currently unwrapping an + // object before passing the appropriate info along to the ICD. + // This is why we also have to override the direct ICD call to + // vkGetDeviceProcAddr to intercept those calls. + // If the pName is for a 'known' function but isn't available, due to + // the corresponding extension/feature not being enabled, we need to + // return NULL and not call down to the driver's GetDeviceProcAddr. + if (NULL != dev) { + bool found_name = false; + PFN_vkVoidFunction addr = get_extension_device_proc_terminator(dev, pName, &found_name); + if (found_name) { + return addr; + } + } + + if (icd_term == NULL) { + return NULL; + } + + return icd_term->dispatch.GetDeviceProcAddr(device, pName); +} + +struct loader_instance *loader_get_instance(const VkInstance instance) { + // look up the loader_instance in our list by comparing dispatch tables, as + // there is no guarantee the instance is still a loader_instance* after any + // layers which wrap the instance object. + const VkLayerInstanceDispatchTable *disp; + struct loader_instance *ptr_instance = (struct loader_instance *)instance; + if (VK_NULL_HANDLE == instance || LOADER_MAGIC_NUMBER != ptr_instance->magic) { + return NULL; + } else { + disp = loader_get_instance_layer_dispatch(instance); + loader_platform_thread_lock_mutex(&loader_global_instance_list_lock); + for (struct loader_instance *inst = loader.instances; inst; inst = inst->next) { + if (&inst->disp->layer_inst_disp == disp) { + ptr_instance = inst; + break; + } + } + loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock); + } + return ptr_instance; +} + +loader_platform_dl_handle loader_open_layer_file(const struct loader_instance *inst, struct loader_layer_properties *prop) { + if ((prop->lib_handle = loader_platform_open_library(prop->lib_name)) == NULL) { + loader_handle_load_library_error(inst, prop->lib_name, &prop->lib_status); + } else { + prop->lib_status = LOADER_LAYER_LIB_SUCCESS_LOADED; + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Loading layer library %s", prop->lib_name); + } + + return prop->lib_handle; +} + +// Go through the search_list and find any layers which match type. If layer +// type match is found in then add it to ext_list. +VkResult loader_add_implicit_layers(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + struct loader_pointer_layer_list *target_list, + struct loader_pointer_layer_list *expanded_target_list, + const struct loader_layer_list *source_list) { + for (uint32_t src_layer = 0; src_layer < source_list->count; src_layer++) { + struct loader_layer_properties *prop = &source_list->list[src_layer]; + if (0 == (prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)) { + VkResult result = loader_add_implicit_layer(inst, prop, filters, target_list, expanded_target_list, source_list); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) return result; + } + } + return VK_SUCCESS; +} + +void warn_if_layers_are_older_than_application(struct loader_instance *inst) { + for (uint32_t i = 0; i < inst->expanded_activated_layer_list.count; i++) { + // Verify that the layer api version is at least that of the application's request, if not, throw a warning since + // undefined behavior could occur. + struct loader_layer_properties *prop = inst->expanded_activated_layer_list.list[i]; + loader_api_version prop_spec_version = loader_make_version(prop->info.specVersion); + if (!loader_check_version_meets_required(inst->app_api_version, prop_spec_version)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer %s uses API version %u.%u which is older than the application specified " + "API version of %u.%u. May cause issues.", + prop->info.layerName, prop_spec_version.major, prop_spec_version.minor, inst->app_api_version.major, + inst->app_api_version.minor); + } + } +} + +VkResult loader_enable_instance_layers(struct loader_instance *inst, const VkInstanceCreateInfo *pCreateInfo, + const struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *layer_filters) { + VkResult res = VK_SUCCESS; + + assert(inst && "Cannot have null instance"); + + if (!loader_init_pointer_layer_list(inst, &inst->app_activated_layer_list)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_enable_instance_layers: Failed to initialize application version of the layer list"); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + if (!loader_init_pointer_layer_list(inst, &inst->expanded_activated_layer_list)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_enable_instance_layers: Failed to initialize expanded version of the layer list"); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + if (inst->settings.settings_active) { + res = enable_correct_layers_from_settings(inst, layer_filters, pCreateInfo->enabledLayerCount, + pCreateInfo->ppEnabledLayerNames, &inst->instance_layer_list, + &inst->app_activated_layer_list, &inst->expanded_activated_layer_list); + warn_if_layers_are_older_than_application(inst); + + goto out; + } + + // Add any implicit layers first + res = loader_add_implicit_layers(inst, layer_filters, &inst->app_activated_layer_list, &inst->expanded_activated_layer_list, + instance_layers); + if (res != VK_SUCCESS) { + goto out; + } + + // Add any layers specified via environment variable next + res = loader_add_environment_layers(inst, VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER, layer_filters, &inst->app_activated_layer_list, + &inst->expanded_activated_layer_list, instance_layers); + if (res != VK_SUCCESS) { + goto out; + } + + // Add layers specified by the application + res = loader_add_layer_names_to_list(inst, layer_filters, &inst->app_activated_layer_list, &inst->expanded_activated_layer_list, + pCreateInfo->enabledLayerCount, pCreateInfo->ppEnabledLayerNames, instance_layers); + + warn_if_layers_are_older_than_application(inst); +out: + return res; +} + +// Determine the layer interface version to use. +bool loader_get_layer_interface_version(PFN_vkNegotiateLoaderLayerInterfaceVersion fp_negotiate_layer_version, + VkNegotiateLayerInterface *interface_struct) { + memset(interface_struct, 0, sizeof(VkNegotiateLayerInterface)); + interface_struct->sType = LAYER_NEGOTIATE_INTERFACE_STRUCT; + interface_struct->loaderLayerInterfaceVersion = 1; + interface_struct->pNext = NULL; + + if (fp_negotiate_layer_version != NULL) { + // Layer supports the negotiation API, so call it with the loader's + // latest version supported + interface_struct->loaderLayerInterfaceVersion = CURRENT_LOADER_LAYER_INTERFACE_VERSION; + VkResult result = fp_negotiate_layer_version(interface_struct); + + if (result != VK_SUCCESS) { + // Layer no longer supports the loader's latest interface version so + // fail loading the Layer + return false; + } + } + + if (interface_struct->loaderLayerInterfaceVersion < MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION) { + // Loader no longer supports the layer's latest interface version so + // fail loading the layer + return false; + } + + return true; +} + +// Every extension that has a loader-defined trampoline needs to be marked as enabled or disabled so that we know whether or +// not to return that trampoline when vkGetDeviceProcAddr is called +void setup_logical_device_enabled_layer_extensions(const struct loader_instance *inst, struct loader_device *dev, + const struct loader_extension_list *icd_exts, + const VkDeviceCreateInfo *pCreateInfo) { + // no enabled extensions, early exit + if (pCreateInfo->ppEnabledExtensionNames == NULL) { + return; + } + // Can only setup debug marker as debug utils is an instance extensions. + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; ++i) { + if (pCreateInfo->ppEnabledExtensionNames[i] && + !strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + // Check if its supported by the driver + for (uint32_t j = 0; j < icd_exts->count; ++j) { + if (!strcmp(icd_exts->list[j].extensionName, VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + dev->layer_extensions.ext_debug_marker_enabled = true; + } + } + // also check if any layers support it. + for (uint32_t j = 0; j < inst->app_activated_layer_list.count; j++) { + struct loader_layer_properties *layer = inst->app_activated_layer_list.list[j]; + for (uint32_t k = 0; k < layer->device_extension_list.count; k++) { + if (!strcmp(layer->device_extension_list.list[k].props.extensionName, VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + dev->layer_extensions.ext_debug_marker_enabled = true; + } + } + } + } + } +} + +VKAPI_ATTR VkResult VKAPI_CALL loader_layer_create_device(VkInstance instance, VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, + PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA) { + VkResult res; + VkPhysicalDevice internal_device = VK_NULL_HANDLE; + struct loader_device *dev = NULL; + struct loader_instance *inst = NULL; + + if (instance != VK_NULL_HANDLE) { + inst = loader_get_instance(instance); + internal_device = physicalDevice; + } else { + struct loader_physical_device_tramp *phys_dev = (struct loader_physical_device_tramp *)physicalDevice; + internal_device = phys_dev->phys_dev; + inst = (struct loader_instance *)phys_dev->this_instance; + } + + // Get the physical device (ICD) extensions + struct loader_extension_list icd_exts = {0}; + icd_exts.list = NULL; + res = loader_init_generic_list(inst, (struct loader_generic_list *)&icd_exts, sizeof(VkExtensionProperties)); + if (VK_SUCCESS != res) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "vkCreateDevice: Failed to create ICD extension list"); + goto out; + } + + PFN_vkEnumerateDeviceExtensionProperties enumDeviceExtensionProperties = NULL; + if (layerGIPA != NULL) { + enumDeviceExtensionProperties = + (PFN_vkEnumerateDeviceExtensionProperties)layerGIPA(instance, "vkEnumerateDeviceExtensionProperties"); + } else { + enumDeviceExtensionProperties = inst->disp->layer_inst_disp.EnumerateDeviceExtensionProperties; + } + res = loader_add_device_extensions(inst, enumDeviceExtensionProperties, internal_device, "Unknown", &icd_exts); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "vkCreateDevice: Failed to add extensions to list"); + goto out; + } + + // Make sure requested extensions to be enabled are supported + res = loader_validate_device_extensions(inst, &inst->expanded_activated_layer_list, &icd_exts, pCreateInfo); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "vkCreateDevice: Failed to validate extensions in list"); + goto out; + } + + dev = loader_create_logical_device(inst, pAllocator); + if (dev == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + setup_logical_device_enabled_layer_extensions(inst, dev, &icd_exts, pCreateInfo); + + res = loader_create_device_chain(internal_device, pCreateInfo, pAllocator, inst, dev, layerGIPA, nextGDPA); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "vkCreateDevice: Failed to create device chain."); + goto out; + } + + *pDevice = dev->chain_device; + + // Initialize any device extension dispatch entry's from the instance list + loader_init_dispatch_dev_ext(inst, dev); + + // Initialize WSI device extensions as part of core dispatch since loader + // has dedicated trampoline code for these + loader_init_device_extension_dispatch_table(&dev->loader_dispatch, inst->disp->layer_inst_disp.GetInstanceProcAddr, + dev->loader_dispatch.core_dispatch.GetDeviceProcAddr, inst->instance, *pDevice); + +out: + + // Failure cleanup + if (VK_SUCCESS != res) { + if (NULL != dev) { + // Find the icd_term this device belongs to then remove it from that icd_term. + // Need to iterate the linked lists and remove the device from it. Don't delete + // the device here since it may not have been added to the icd_term and there + // are other allocations attached to it. + struct loader_icd_term *icd_term = inst->icd_terms; + bool found = false; + while (!found && NULL != icd_term) { + struct loader_device *cur_dev = icd_term->logical_device_list; + struct loader_device *prev_dev = NULL; + while (NULL != cur_dev) { + if (cur_dev == dev) { + if (cur_dev == icd_term->logical_device_list) { + icd_term->logical_device_list = cur_dev->next; + } else if (prev_dev) { + prev_dev->next = cur_dev->next; + } + + found = true; + break; + } + prev_dev = cur_dev; + cur_dev = cur_dev->next; + } + icd_term = icd_term->next; + } + // Now destroy the device and the allocations associated with it. + loader_destroy_logical_device(dev, pAllocator); + } + } + + if (NULL != icd_exts.list) { + loader_destroy_generic_list(inst, (struct loader_generic_list *)&icd_exts); + } + return res; +} + +VKAPI_ATTR void VKAPI_CALL loader_layer_destroy_device(VkDevice device, const VkAllocationCallbacks *pAllocator, + PFN_vkDestroyDevice destroyFunction) { + struct loader_device *dev; + + if (device == VK_NULL_HANDLE) { + return; + } + + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + + destroyFunction(device, pAllocator); + if (NULL != dev) { + dev->chain_device = NULL; + dev->icd_device = NULL; + loader_remove_logical_device(icd_term, dev, pAllocator); + } +} + +// Given the list of layers to activate in the loader_instance +// structure. This function will add a VkLayerInstanceCreateInfo +// structure to the VkInstanceCreateInfo.pNext pointer. +// Each activated layer will have it's own VkLayerInstanceLink +// structure that tells the layer what Get*ProcAddr to call to +// get function pointers to the next layer down. +// Once the chain info has been created this function will +// execute the CreateInstance call chain. Each layer will +// then have an opportunity in it's CreateInstance function +// to setup it's dispatch table when the lower layer returns +// successfully. +// Each layer can wrap or not-wrap the returned VkInstance object +// as it sees fit. +// The instance chain is terminated by a loader function +// that will call CreateInstance on all available ICD's and +// cache those VkInstance objects for future use. +VkResult loader_create_instance_chain(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, + struct loader_instance *inst, VkInstance *created_instance) { + uint32_t num_activated_layers = 0; + struct activated_layer_info *activated_layers = NULL; + VkLayerInstanceCreateInfo chain_info; + VkLayerInstanceLink *layer_instance_link_info = NULL; + VkInstanceCreateInfo loader_create_info; + VkResult res; + + PFN_vkGetInstanceProcAddr next_gipa = loader_gpa_instance_terminator; + PFN_vkGetInstanceProcAddr cur_gipa = loader_gpa_instance_terminator; + PFN_vkGetDeviceProcAddr cur_gdpa = loader_gpa_device_terminator; + PFN_GetPhysicalDeviceProcAddr next_gpdpa = loader_gpdpa_instance_terminator; + PFN_GetPhysicalDeviceProcAddr cur_gpdpa = loader_gpdpa_instance_terminator; + + memcpy(&loader_create_info, pCreateInfo, sizeof(VkInstanceCreateInfo)); + + if (inst->expanded_activated_layer_list.count > 0) { + chain_info.u.pLayerInfo = NULL; + chain_info.pNext = pCreateInfo->pNext; + chain_info.sType = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO; + chain_info.function = VK_LAYER_LINK_INFO; + loader_create_info.pNext = &chain_info; + + layer_instance_link_info = loader_stack_alloc(sizeof(VkLayerInstanceLink) * inst->expanded_activated_layer_list.count); + if (!layer_instance_link_info) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_create_instance_chain: Failed to alloc Instance objects for layer"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + activated_layers = loader_stack_alloc(sizeof(struct activated_layer_info) * inst->expanded_activated_layer_list.count); + if (!activated_layers) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_create_instance_chain: Failed to alloc activated layer storage array"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + // Create instance chain of enabled layers + for (int32_t i = inst->expanded_activated_layer_list.count - 1; i >= 0; i--) { + struct loader_layer_properties *layer_prop = inst->expanded_activated_layer_list.list[i]; + loader_platform_dl_handle lib_handle; + + // Skip it if a Layer with the same name has been already successfully activated + if (loader_names_array_has_layer_property(&layer_prop->info, num_activated_layers, activated_layers)) { + continue; + } + + lib_handle = loader_open_layer_file(inst, layer_prop); + if (layer_prop->lib_status == LOADER_LAYER_LIB_ERROR_OUT_OF_MEMORY) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + if (!lib_handle) { + continue; + } + + if (NULL == layer_prop->functions.negotiate_layer_interface) { + PFN_vkNegotiateLoaderLayerInterfaceVersion negotiate_interface = NULL; + bool functions_in_interface = false; + if (!layer_prop->functions.str_negotiate_interface || strlen(layer_prop->functions.str_negotiate_interface) == 0) { + negotiate_interface = (PFN_vkNegotiateLoaderLayerInterfaceVersion)loader_platform_get_proc_address( + lib_handle, "vkNegotiateLoaderLayerInterfaceVersion"); + } else { + negotiate_interface = (PFN_vkNegotiateLoaderLayerInterfaceVersion)loader_platform_get_proc_address( + lib_handle, layer_prop->functions.str_negotiate_interface); + } + + // If we can negotiate an interface version, then we can also + // get everything we need from the one function call, so try + // that first, and see if we can get all the function pointers + // necessary from that one call. + if (NULL != negotiate_interface) { + layer_prop->functions.negotiate_layer_interface = negotiate_interface; + + VkNegotiateLayerInterface interface_struct; + + if (loader_get_layer_interface_version(negotiate_interface, &interface_struct)) { + // Go ahead and set the properties version to the + // correct value. + layer_prop->interface_version = interface_struct.loaderLayerInterfaceVersion; + + // If the interface is 2 or newer, we have access to the + // new GetPhysicalDeviceProcAddr function, so grab it, + // and the other necessary functions, from the + // structure. + if (interface_struct.loaderLayerInterfaceVersion > 1) { + cur_gipa = interface_struct.pfnGetInstanceProcAddr; + cur_gdpa = interface_struct.pfnGetDeviceProcAddr; + cur_gpdpa = interface_struct.pfnGetPhysicalDeviceProcAddr; + if (cur_gipa != NULL) { + // We've set the functions, so make sure we + // don't do the unnecessary calls later. + functions_in_interface = true; + } + } + } + } + + if (!functions_in_interface) { + if ((cur_gipa = layer_prop->functions.get_instance_proc_addr) == NULL) { + if (layer_prop->functions.str_gipa == NULL || strlen(layer_prop->functions.str_gipa) == 0) { + cur_gipa = + (PFN_vkGetInstanceProcAddr)loader_platform_get_proc_address(lib_handle, "vkGetInstanceProcAddr"); + layer_prop->functions.get_instance_proc_addr = cur_gipa; + + if (NULL == cur_gipa) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_create_instance_chain: Failed to find \'vkGetInstanceProcAddr\' in layer \"%s\"", + layer_prop->lib_name); + continue; + } + } else { + cur_gipa = (PFN_vkGetInstanceProcAddr)loader_platform_get_proc_address(lib_handle, + layer_prop->functions.str_gipa); + + if (NULL == cur_gipa) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_create_instance_chain: Failed to find \'%s\' in layer \"%s\"", + layer_prop->functions.str_gipa, layer_prop->lib_name); + continue; + } + } + } + } + } + + layer_instance_link_info[num_activated_layers].pNext = chain_info.u.pLayerInfo; + layer_instance_link_info[num_activated_layers].pfnNextGetInstanceProcAddr = next_gipa; + layer_instance_link_info[num_activated_layers].pfnNextGetPhysicalDeviceProcAddr = next_gpdpa; + next_gipa = cur_gipa; + if (layer_prop->interface_version > 1 && cur_gpdpa != NULL) { + layer_prop->functions.get_physical_device_proc_addr = cur_gpdpa; + next_gpdpa = cur_gpdpa; + } + if (layer_prop->interface_version > 1 && cur_gipa != NULL) { + layer_prop->functions.get_instance_proc_addr = cur_gipa; + } + if (layer_prop->interface_version > 1 && cur_gdpa != NULL) { + layer_prop->functions.get_device_proc_addr = cur_gdpa; + } + + chain_info.u.pLayerInfo = &layer_instance_link_info[num_activated_layers]; + + activated_layers[num_activated_layers].name = layer_prop->info.layerName; + activated_layers[num_activated_layers].manifest = layer_prop->manifest_file_name; + activated_layers[num_activated_layers].library = layer_prop->lib_name; + activated_layers[num_activated_layers].is_implicit = !(layer_prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER); + activated_layers[num_activated_layers].enabled_by_what = layer_prop->enabled_by_what; + if (activated_layers[num_activated_layers].is_implicit) { + activated_layers[num_activated_layers].disable_env = layer_prop->disable_env_var.name; + activated_layers[num_activated_layers].enable_name_env = layer_prop->enable_env_var.name; + activated_layers[num_activated_layers].enable_value_env = layer_prop->enable_env_var.value; + } + + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Insert instance layer \"%s\" (%s)", + layer_prop->info.layerName, layer_prop->lib_name); + + num_activated_layers++; + } + } + + // Make sure each layer requested by the application was actually loaded + for (uint32_t exp = 0; exp < inst->expanded_activated_layer_list.count; ++exp) { + struct loader_layer_properties *exp_layer_prop = inst->expanded_activated_layer_list.list[exp]; + bool found = false; + for (uint32_t act = 0; act < num_activated_layers; ++act) { + if (!strcmp(activated_layers[act].name, exp_layer_prop->info.layerName)) { + found = true; + break; + } + } + // If it wasn't found, we want to at least log an error. However, if it was enabled by the application directly, + // we want to return a bad layer error. + if (!found) { + bool app_requested = false; + for (uint32_t act = 0; act < pCreateInfo->enabledLayerCount; ++act) { + if (!strcmp(pCreateInfo->ppEnabledLayerNames[act], exp_layer_prop->info.layerName)) { + app_requested = true; + break; + } + } + VkFlags log_flag = VULKAN_LOADER_LAYER_BIT; + char ending = '.'; + if (app_requested) { + log_flag |= VULKAN_LOADER_ERROR_BIT; + ending = '!'; + } else { + log_flag |= VULKAN_LOADER_INFO_BIT; + } + switch (exp_layer_prop->lib_status) { + case LOADER_LAYER_LIB_NOT_LOADED: + loader_log(inst, log_flag, 0, "Requested layer \"%s\" was not loaded%c", exp_layer_prop->info.layerName, + ending); + break; + case LOADER_LAYER_LIB_ERROR_WRONG_BIT_TYPE: { + loader_log(inst, log_flag, 0, "Requested layer \"%s\" was wrong bit-type%c", exp_layer_prop->info.layerName, + ending); + break; + } + case LOADER_LAYER_LIB_ERROR_FAILED_TO_LOAD: + loader_log(inst, log_flag, 0, "Requested layer \"%s\" failed to load%c", exp_layer_prop->info.layerName, + ending); + break; + case LOADER_LAYER_LIB_SUCCESS_LOADED: + case LOADER_LAYER_LIB_ERROR_OUT_OF_MEMORY: + // Shouldn't be able to reach this but if it is, best to report a debug + loader_log(inst, log_flag, 0, + "Shouldn't reach this. A valid version of requested layer %s was loaded but was not found in the " + "list of activated layers%c", + exp_layer_prop->info.layerName, ending); + break; + } + if (app_requested) { + return VK_ERROR_LAYER_NOT_PRESENT; + } + } + } + + VkLoaderFeatureFlags feature_flags = 0; +#if defined(_WIN32) + feature_flags = windows_initialize_dxgi(); +#endif + + // The following line of code is actually invalid at least according to the Vulkan spec with header update 1.2.193 and onwards. + // The update required calls to vkGetInstanceProcAddr querying "global" functions (which includes vkCreateInstance) to pass NULL + // for the instance parameter. Because it wasn't required to be NULL before, there may be layers which expect the loader's + // behavior of passing a non-NULL value into vkGetInstanceProcAddr. + // In an abundance of caution, the incorrect code remains as is, with a big comment to indicate that its wrong + PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)next_gipa(*created_instance, "vkCreateInstance"); + if (fpCreateInstance) { + VkLayerInstanceCreateInfo instance_dispatch; + instance_dispatch.sType = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO; + instance_dispatch.pNext = loader_create_info.pNext; + instance_dispatch.function = VK_LOADER_DATA_CALLBACK; + instance_dispatch.u.pfnSetInstanceLoaderData = vkSetInstanceDispatch; + + VkLayerInstanceCreateInfo device_callback; + device_callback.sType = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO; + device_callback.pNext = &instance_dispatch; + device_callback.function = VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK; + device_callback.u.layerDevice.pfnLayerCreateDevice = loader_layer_create_device; + device_callback.u.layerDevice.pfnLayerDestroyDevice = loader_layer_destroy_device; + + VkLayerInstanceCreateInfo loader_features; + loader_features.sType = VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO; + loader_features.pNext = &device_callback; + loader_features.function = VK_LOADER_FEATURES; + loader_features.u.loaderFeatures = feature_flags; + + loader_create_info.pNext = &loader_features; + + // If layer debugging is enabled, let's print out the full callstack with layers in their + // defined order. + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, "vkCreateInstance layer callstack setup to:"); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " "); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " ||"); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " "); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " ||"); + for (uint32_t cur_layer = 0; cur_layer < num_activated_layers; ++cur_layer) { + uint32_t index = num_activated_layers - cur_layer - 1; + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " %s", activated_layers[index].name); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Type: %s", + activated_layers[index].is_implicit ? "Implicit" : "Explicit"); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Enabled By: %s", + get_enabled_by_what_str(activated_layers[index].enabled_by_what)); + if (activated_layers[index].is_implicit) { + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Disable Env Var: %s", + activated_layers[index].disable_env); + if (activated_layers[index].enable_name_env) { + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, + " This layer was enabled because Env Var %s was set to Value %s", + activated_layers[index].enable_name_env, activated_layers[index].enable_value_env); + } + } + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Manifest: %s", activated_layers[index].manifest); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Library: %s", activated_layers[index].library); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " ||"); + } + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " "); + + res = fpCreateInstance(&loader_create_info, pAllocator, created_instance); + } else { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_create_instance_chain: Failed to find \'vkCreateInstance\'"); + // Couldn't find CreateInstance function! + res = VK_ERROR_INITIALIZATION_FAILED; + } + + if (res == VK_SUCCESS) { + // Copy the current disp table into the terminator_dispatch table so we can use it in loader_gpa_instance_terminator() + memcpy(&inst->terminator_dispatch, &inst->disp->layer_inst_disp, sizeof(VkLayerInstanceDispatchTable)); + + loader_init_instance_core_dispatch_table(&inst->disp->layer_inst_disp, next_gipa, *created_instance); + inst->instance = *created_instance; + + if (pCreateInfo->enabledLayerCount > 0 && pCreateInfo->ppEnabledLayerNames != NULL) { + res = create_string_list(inst, pCreateInfo->enabledLayerCount, &inst->enabled_layer_names); + if (res != VK_SUCCESS) { + return res; + } + + for (uint32_t i = 0; i < pCreateInfo->enabledLayerCount; ++i) { + res = copy_str_to_string_list(inst, &inst->enabled_layer_names, pCreateInfo->ppEnabledLayerNames[i], + strlen(pCreateInfo->ppEnabledLayerNames[i])); + if (res != VK_SUCCESS) return res; + } + } + } + + return res; +} + +void loader_activate_instance_layer_extensions(struct loader_instance *inst, VkInstance created_inst) { + loader_init_instance_extension_dispatch_table(&inst->disp->layer_inst_disp, inst->disp->layer_inst_disp.GetInstanceProcAddr, + created_inst); +} + +#if defined(__APPLE__) +VkResult loader_create_device_chain(const VkPhysicalDevice pd, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, const struct loader_instance *inst, + struct loader_device *dev, PFN_vkGetInstanceProcAddr callingLayer, + PFN_vkGetDeviceProcAddr *layerNextGDPA) __attribute__((optnone)) { +#else +VkResult loader_create_device_chain(const VkPhysicalDevice pd, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, const struct loader_instance *inst, + struct loader_device *dev, PFN_vkGetInstanceProcAddr callingLayer, + PFN_vkGetDeviceProcAddr *layerNextGDPA) { +#endif + uint32_t num_activated_layers = 0; + struct activated_layer_info *activated_layers = NULL; + VkLayerDeviceLink *layer_device_link_info; + VkLayerDeviceCreateInfo chain_info; + VkDeviceCreateInfo loader_create_info; + VkDeviceGroupDeviceCreateInfo *original_device_group_create_info_struct = NULL; + VkResult res; + + PFN_vkGetDeviceProcAddr fpGDPA = NULL, nextGDPA = loader_gpa_device_terminator; + PFN_vkGetInstanceProcAddr fpGIPA = NULL, nextGIPA = loader_gpa_instance_terminator; + + memcpy(&loader_create_info, pCreateInfo, sizeof(VkDeviceCreateInfo)); + + if (loader_create_info.enabledLayerCount > 0 && loader_create_info.ppEnabledLayerNames != NULL) { + bool invalid_device_layer_usage = false; + + if (loader_create_info.enabledLayerCount != inst->enabled_layer_names.count && loader_create_info.enabledLayerCount > 0) { + invalid_device_layer_usage = true; + } else if (loader_create_info.enabledLayerCount > 0 && loader_create_info.ppEnabledLayerNames == NULL) { + invalid_device_layer_usage = true; + } else if (loader_create_info.enabledLayerCount == 0 && loader_create_info.ppEnabledLayerNames != NULL) { + invalid_device_layer_usage = true; + } else if (inst->enabled_layer_names.list != NULL) { + for (uint32_t i = 0; i < loader_create_info.enabledLayerCount; i++) { + const char *device_layer_names = loader_create_info.ppEnabledLayerNames[i]; + + if (strcmp(device_layer_names, inst->enabled_layer_names.list[i]) != 0) { + invalid_device_layer_usage = true; + break; + } + } + } + + if (invalid_device_layer_usage) { + loader_log( + inst, VULKAN_LOADER_WARN_BIT, 0, + "loader_create_device_chain: Using deprecated and ignored 'ppEnabledLayerNames' member of 'VkDeviceCreateInfo' " + "when creating a Vulkan device."); + } + } + + // Before we continue, we need to find out if the KHR_device_group extension is in the enabled list. If it is, we then + // need to look for the corresponding VkDeviceGroupDeviceCreateInfo struct in the device list. This is because we + // need to replace all the incoming physical device values (which are really loader trampoline physical device values) + // with the layer/ICD version. + { + VkBaseOutStructure *pNext = (VkBaseOutStructure *)loader_create_info.pNext; + VkBaseOutStructure *pPrev = (VkBaseOutStructure *)&loader_create_info; + while (NULL != pNext) { + if (VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO == pNext->sType) { + VkDeviceGroupDeviceCreateInfo *cur_struct = (VkDeviceGroupDeviceCreateInfo *)pNext; + if (0 < cur_struct->physicalDeviceCount && NULL != cur_struct->pPhysicalDevices) { + VkDeviceGroupDeviceCreateInfo *temp_struct = loader_stack_alloc(sizeof(VkDeviceGroupDeviceCreateInfo)); + VkPhysicalDevice *phys_dev_array = NULL; + if (NULL == temp_struct) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + memcpy(temp_struct, cur_struct, sizeof(VkDeviceGroupDeviceCreateInfo)); + phys_dev_array = loader_stack_alloc(sizeof(VkPhysicalDevice) * cur_struct->physicalDeviceCount); + if (NULL == phys_dev_array) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + // Before calling down, replace the incoming physical device values (which are really loader trampoline + // physical devices) with the next layer (or possibly even the terminator) physical device values. + struct loader_physical_device_tramp *cur_tramp; + for (uint32_t phys_dev = 0; phys_dev < cur_struct->physicalDeviceCount; phys_dev++) { + cur_tramp = (struct loader_physical_device_tramp *)cur_struct->pPhysicalDevices[phys_dev]; + phys_dev_array[phys_dev] = cur_tramp->phys_dev; + } + temp_struct->pPhysicalDevices = phys_dev_array; + + original_device_group_create_info_struct = (VkDeviceGroupDeviceCreateInfo *)pPrev->pNext; + + // Replace the old struct in the pNext chain with this one. + pPrev->pNext = (VkBaseOutStructure *)temp_struct; + } + break; + } + + pPrev = pNext; + pNext = pNext->pNext; + } + } + if (inst->expanded_activated_layer_list.count > 0) { + layer_device_link_info = loader_stack_alloc(sizeof(VkLayerDeviceLink) * inst->expanded_activated_layer_list.count); + if (!layer_device_link_info) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_create_device_chain: Failed to alloc Device objects for layer. Skipping Layer."); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + activated_layers = loader_stack_alloc(sizeof(struct activated_layer_info) * inst->expanded_activated_layer_list.count); + if (!activated_layers) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_create_device_chain: Failed to alloc activated layer storage array"); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + chain_info.sType = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO; + chain_info.function = VK_LAYER_LINK_INFO; + chain_info.u.pLayerInfo = NULL; + chain_info.pNext = loader_create_info.pNext; + loader_create_info.pNext = &chain_info; + + // Create instance chain of enabled layers + for (int32_t i = inst->expanded_activated_layer_list.count - 1; i >= 0; i--) { + struct loader_layer_properties *layer_prop = inst->expanded_activated_layer_list.list[i]; + loader_platform_dl_handle lib_handle = layer_prop->lib_handle; + + // Skip it if a Layer with the same name has been already successfully activated + if (loader_names_array_has_layer_property(&layer_prop->info, num_activated_layers, activated_layers)) { + continue; + } + + // Skip the layer if the handle is NULL - this is likely because the library failed to load but wasn't removed from + // the list. + if (!lib_handle) { + continue; + } + + // The Get*ProcAddr pointers will already be filled in if they were received from either the json file or the + // version negotiation + if ((fpGIPA = layer_prop->functions.get_instance_proc_addr) == NULL) { + if (layer_prop->functions.str_gipa == NULL || strlen(layer_prop->functions.str_gipa) == 0) { + fpGIPA = (PFN_vkGetInstanceProcAddr)loader_platform_get_proc_address(lib_handle, "vkGetInstanceProcAddr"); + layer_prop->functions.get_instance_proc_addr = fpGIPA; + } else + fpGIPA = + (PFN_vkGetInstanceProcAddr)loader_platform_get_proc_address(lib_handle, layer_prop->functions.str_gipa); + if (!fpGIPA) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "loader_create_device_chain: Failed to find \'vkGetInstanceProcAddr\' in layer \"%s\". " + "Skipping layer.", + layer_prop->lib_name); + continue; + } + } + + if (fpGIPA == callingLayer) { + if (layerNextGDPA != NULL) { + *layerNextGDPA = nextGDPA; + } + // Break here because if fpGIPA is the same as callingLayer, that means a layer is trying to create a device, + // and once we don't want to continue any further as the next layer will be the calling layer + break; + } + + if ((fpGDPA = layer_prop->functions.get_device_proc_addr) == NULL) { + if (layer_prop->functions.str_gdpa == NULL || strlen(layer_prop->functions.str_gdpa) == 0) { + fpGDPA = (PFN_vkGetDeviceProcAddr)loader_platform_get_proc_address(lib_handle, "vkGetDeviceProcAddr"); + layer_prop->functions.get_device_proc_addr = fpGDPA; + } else + fpGDPA = (PFN_vkGetDeviceProcAddr)loader_platform_get_proc_address(lib_handle, layer_prop->functions.str_gdpa); + if (!fpGDPA) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Failed to find vkGetDeviceProcAddr in layer \"%s\"", layer_prop->lib_name); + continue; + } + } + + layer_device_link_info[num_activated_layers].pNext = chain_info.u.pLayerInfo; + layer_device_link_info[num_activated_layers].pfnNextGetInstanceProcAddr = nextGIPA; + layer_device_link_info[num_activated_layers].pfnNextGetDeviceProcAddr = nextGDPA; + chain_info.u.pLayerInfo = &layer_device_link_info[num_activated_layers]; + nextGIPA = fpGIPA; + nextGDPA = fpGDPA; + + activated_layers[num_activated_layers].name = layer_prop->info.layerName; + activated_layers[num_activated_layers].manifest = layer_prop->manifest_file_name; + activated_layers[num_activated_layers].library = layer_prop->lib_name; + activated_layers[num_activated_layers].is_implicit = !(layer_prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER); + activated_layers[num_activated_layers].enabled_by_what = layer_prop->enabled_by_what; + if (activated_layers[num_activated_layers].is_implicit) { + activated_layers[num_activated_layers].disable_env = layer_prop->disable_env_var.name; + } + + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0, "Inserted device layer \"%s\" (%s)", + layer_prop->info.layerName, layer_prop->lib_name); + + num_activated_layers++; + } + } + + VkDevice created_device = (VkDevice)dev; + PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)nextGIPA(inst->instance, "vkCreateDevice"); + if (fpCreateDevice) { + VkLayerDeviceCreateInfo create_info_disp; + + create_info_disp.sType = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO; + create_info_disp.function = VK_LOADER_DATA_CALLBACK; + + create_info_disp.u.pfnSetDeviceLoaderData = vkSetDeviceDispatch; + + // If layer debugging is enabled, let's print out the full callstack with layers in their + // defined order. + uint32_t layer_driver_bits = VULKAN_LOADER_LAYER_BIT | VULKAN_LOADER_DRIVER_BIT; + loader_log(inst, layer_driver_bits, 0, "vkCreateDevice layer callstack setup to:"); + loader_log(inst, layer_driver_bits, 0, " "); + loader_log(inst, layer_driver_bits, 0, " ||"); + loader_log(inst, layer_driver_bits, 0, " "); + loader_log(inst, layer_driver_bits, 0, " ||"); + for (uint32_t cur_layer = 0; cur_layer < num_activated_layers; ++cur_layer) { + uint32_t index = num_activated_layers - cur_layer - 1; + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " %s", activated_layers[index].name); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Type: %s", + activated_layers[index].is_implicit ? "Implicit" : "Explicit"); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Enabled By: %s", + get_enabled_by_what_str(activated_layers[index].enabled_by_what)); + if (activated_layers[index].is_implicit) { + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Disable Env Var: %s", + activated_layers[index].disable_env); + } + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Manifest: %s", activated_layers[index].manifest); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " Library: %s", activated_layers[index].library); + loader_log(inst, VULKAN_LOADER_LAYER_BIT, 0, " ||"); + } + loader_log(inst, layer_driver_bits, 0, " "); + create_info_disp.pNext = loader_create_info.pNext; + loader_create_info.pNext = &create_info_disp; + res = fpCreateDevice(pd, &loader_create_info, pAllocator, &created_device); + if (res != VK_SUCCESS) { + return res; + } + dev->chain_device = created_device; + + // Because we changed the pNext chain to use our own VkDeviceGroupDeviceCreateInfo, we need to fixup the chain to + // point back at the original VkDeviceGroupDeviceCreateInfo. + VkBaseOutStructure *pNext = (VkBaseOutStructure *)loader_create_info.pNext; + VkBaseOutStructure *pPrev = (VkBaseOutStructure *)&loader_create_info; + while (NULL != pNext) { + if (VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO == pNext->sType) { + VkDeviceGroupDeviceCreateInfo *cur_struct = (VkDeviceGroupDeviceCreateInfo *)pNext; + if (0 < cur_struct->physicalDeviceCount && NULL != cur_struct->pPhysicalDevices) { + pPrev->pNext = (VkBaseOutStructure *)original_device_group_create_info_struct; + } + break; + } + + pPrev = pNext; + pNext = pNext->pNext; + } + + } else { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_create_device_chain: Failed to find \'vkCreateDevice\' in layers or ICD"); + // Couldn't find CreateDevice function! + return VK_ERROR_INITIALIZATION_FAILED; + } + + // Initialize device dispatch table + loader_init_device_dispatch_table(&dev->loader_dispatch, nextGDPA, dev->chain_device); + // Initialize the dispatch table to functions which need terminators + // These functions point directly to the driver, not the terminator functions + init_extension_device_proc_terminator_dispatch(dev); + + return res; +} + +VkResult loader_validate_layers(const struct loader_instance *inst, const uint32_t layer_count, + const char *const *ppEnabledLayerNames, const struct loader_layer_list *list) { + struct loader_layer_properties *prop; + + if (layer_count > 0 && ppEnabledLayerNames == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_layers: ppEnabledLayerNames is NULL but enabledLayerCount is greater than zero"); + return VK_ERROR_LAYER_NOT_PRESENT; + } + + for (uint32_t i = 0; i < layer_count; i++) { + VkStringErrorFlags result = vk_string_validate(MaxLoaderStringLength, ppEnabledLayerNames[i]); + if (result != VK_STRING_ERROR_NONE) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_layers: ppEnabledLayerNames contains string that is too long or is badly formed"); + return VK_ERROR_LAYER_NOT_PRESENT; + } + + prop = loader_find_layer_property(ppEnabledLayerNames[i], list); + if (NULL == prop) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_layers: Layer %d does not exist in the list of available layers", i); + return VK_ERROR_LAYER_NOT_PRESENT; + } + if (inst->settings.settings_active && prop->settings_control_value != LOADER_SETTINGS_LAYER_CONTROL_ON && + prop->settings_control_value != LOADER_SETTINGS_LAYER_CONTROL_DEFAULT) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_layers: Layer %d was explicitly prevented from being enabled by the loader settings file", + i); + return VK_ERROR_LAYER_NOT_PRESENT; + } + } + return VK_SUCCESS; +} + +VkResult loader_validate_instance_extensions(struct loader_instance *inst, const struct loader_extension_list *icd_exts, + const struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *layer_filters, + const VkInstanceCreateInfo *pCreateInfo) { + VkExtensionProperties *extension_prop; + char *env_value; + bool check_if_known = true; + VkResult res = VK_SUCCESS; + + struct loader_pointer_layer_list active_layers = {0}; + struct loader_pointer_layer_list expanded_layers = {0}; + + if (pCreateInfo->enabledExtensionCount > 0 && pCreateInfo->ppEnabledExtensionNames == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_instance_extensions: Instance ppEnabledExtensionNames is NULL but enabledExtensionCount is " + "greater than zero"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + if (!loader_init_pointer_layer_list(inst, &active_layers)) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + if (!loader_init_pointer_layer_list(inst, &expanded_layers)) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + if (inst->settings.settings_active) { + res = enable_correct_layers_from_settings(inst, layer_filters, pCreateInfo->enabledLayerCount, + pCreateInfo->ppEnabledLayerNames, instance_layers, &active_layers, + &expanded_layers); + if (res != VK_SUCCESS) { + goto out; + } + } else { + // Build the lists of active layers (including meta layers) and expanded layers (with meta layers resolved to their + // components) + res = loader_add_implicit_layers(inst, layer_filters, &active_layers, &expanded_layers, instance_layers); + if (res != VK_SUCCESS) { + goto out; + } + res = loader_add_environment_layers(inst, VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER, layer_filters, &active_layers, + &expanded_layers, instance_layers); + if (res != VK_SUCCESS) { + goto out; + } + res = loader_add_layer_names_to_list(inst, layer_filters, &active_layers, &expanded_layers, pCreateInfo->enabledLayerCount, + pCreateInfo->ppEnabledLayerNames, instance_layers); + if (VK_SUCCESS != res) { + goto out; + } + } + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + VkStringErrorFlags result = vk_string_validate(MaxLoaderStringLength, pCreateInfo->ppEnabledExtensionNames[i]); + if (result != VK_STRING_ERROR_NONE) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_instance_extensions: Instance ppEnabledExtensionNames contains " + "string that is too long or is badly formed"); + res = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Check if a user wants to disable the instance extension filtering behavior + env_value = loader_getenv("VK_LOADER_DISABLE_INST_EXT_FILTER", inst); + if (NULL != env_value && atoi(env_value) != 0) { + check_if_known = false; + } + loader_free_getenv(env_value, inst); + + if (check_if_known) { + // See if the extension is in the list of supported extensions + bool found = false; + for (uint32_t j = 0; LOADER_INSTANCE_EXTENSIONS[j] != NULL; j++) { + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], LOADER_INSTANCE_EXTENSIONS[j]) == 0) { + found = true; + break; + } + } + + // If it isn't in the list, return an error + if (!found) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_instance_extensions: Extension %s not found in list of known instance extensions.", + pCreateInfo->ppEnabledExtensionNames[i]); + res = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + } + + extension_prop = get_extension_property(pCreateInfo->ppEnabledExtensionNames[i], icd_exts); + + if (extension_prop) { + continue; + } + + extension_prop = NULL; + + // Not in global list, search layer extension lists + for (uint32_t j = 0; NULL == extension_prop && j < expanded_layers.count; ++j) { + extension_prop = + get_extension_property(pCreateInfo->ppEnabledExtensionNames[i], &expanded_layers.list[j]->instance_extension_list); + if (extension_prop) { + // Found the extension in one of the layers enabled by the app. + break; + } + + struct loader_layer_properties *layer_prop = + loader_find_layer_property(expanded_layers.list[j]->info.layerName, instance_layers); + if (NULL == layer_prop) { + // Should NOT get here, loader_validate_layers should have already filtered this case out. + continue; + } + } + + if (!extension_prop) { + // Didn't find extension name in any of the global layers, error out + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_instance_extensions: Instance extension %s not supported by available ICDs or enabled " + "layers.", + pCreateInfo->ppEnabledExtensionNames[i]); + res = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + } + +out: + loader_destroy_pointer_layer_list(inst, &active_layers); + loader_destroy_pointer_layer_list(inst, &expanded_layers); + return res; +} + +VkResult loader_validate_device_extensions(struct loader_instance *this_instance, + const struct loader_pointer_layer_list *activated_device_layers, + const struct loader_extension_list *icd_exts, const VkDeviceCreateInfo *pCreateInfo) { + // Early out to prevent nullptr dereference + if (pCreateInfo->enabledExtensionCount == 0 || pCreateInfo->ppEnabledExtensionNames == NULL) { + return VK_SUCCESS; + } + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + if (pCreateInfo->ppEnabledExtensionNames[i] == NULL) { + continue; + } + VkStringErrorFlags result = vk_string_validate(MaxLoaderStringLength, pCreateInfo->ppEnabledExtensionNames[i]); + if (result != VK_STRING_ERROR_NONE) { + loader_log(this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_device_extensions: Device ppEnabledExtensionNames contains " + "string that is too long or is badly formed"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + + const char *extension_name = pCreateInfo->ppEnabledExtensionNames[i]; + VkExtensionProperties *extension_prop = get_extension_property(extension_name, icd_exts); + + if (extension_prop) { + continue; + } + + // Not in global list, search activated layer extension lists + for (uint32_t j = 0; j < activated_device_layers->count; j++) { + struct loader_layer_properties *layer_prop = activated_device_layers->list[j]; + + extension_prop = get_dev_extension_property(extension_name, &layer_prop->device_extension_list); + if (extension_prop) { + // Found the extension in one of the layers enabled by the app. + break; + } + } + + if (!extension_prop) { + // Didn't find extension name in any of the device layers, error out + loader_log(this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "loader_validate_device_extensions: Device extension %s not supported by selected physical device " + "or enabled layers.", + pCreateInfo->ppEnabledExtensionNames[i]); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + } + return VK_SUCCESS; +} + +// Terminator functions for the Instance chain +// All named terminator_ +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkInstance *pInstance) { + struct loader_icd_term *icd_term; + VkExtensionProperties *prop; + char **filtered_extension_names = NULL; + VkInstanceCreateInfo icd_create_info; + VkResult res = VK_SUCCESS; + bool one_icd_successful = false; + + struct loader_instance *ptr_instance = (struct loader_instance *)*pInstance; + if (NULL == ptr_instance) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateInstance: Loader instance pointer null encountered. Possibly set by active layer. (Policy " + "#LLP_LAYER_21)"); + } else if (LOADER_MAGIC_NUMBER != ptr_instance->magic) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateInstance: Instance pointer (%p) has invalid MAGIC value 0x%08" PRIx64 + ". Instance value possibly " + "corrupted by active layer (Policy #LLP_LAYER_21). ", + ptr_instance, ptr_instance->magic); + } + + // Save the application version if it has been modified - layers sometimes needs features in newer API versions than + // what the application requested, and thus will increase the instance version to a level that suites their needs. + if (pCreateInfo->pApplicationInfo && pCreateInfo->pApplicationInfo->apiVersion) { + loader_api_version altered_version = loader_make_version(pCreateInfo->pApplicationInfo->apiVersion); + if (altered_version.major != ptr_instance->app_api_version.major || + altered_version.minor != ptr_instance->app_api_version.minor) { + ptr_instance->app_api_version = altered_version; + } + } + + memcpy(&icd_create_info, pCreateInfo, sizeof(icd_create_info)); + + icd_create_info.enabledLayerCount = 0; + icd_create_info.ppEnabledLayerNames = NULL; + + // NOTE: Need to filter the extensions to only those supported by the ICD. + // No ICD will advertise support for layers. An ICD library could + // support a layer, but it would be independent of the actual ICD, + // just in the same library. + uint32_t extension_count = pCreateInfo->enabledExtensionCount; +#if defined(LOADER_ENABLE_LINUX_SORT) + extension_count += 1; +#endif // LOADER_ENABLE_LINUX_SORT + filtered_extension_names = loader_stack_alloc(extension_count * sizeof(char *)); + if (!filtered_extension_names) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_CreateInstance: Failed create extension name array for %d extensions", extension_count); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + icd_create_info.ppEnabledExtensionNames = (const char *const *)filtered_extension_names; + + // Determine if Get Physical Device Properties 2 is available to this Instance + if (pCreateInfo->pApplicationInfo && pCreateInfo->pApplicationInfo->apiVersion >= VK_API_VERSION_1_1) { + ptr_instance->supports_get_dev_prop_2 = true; + } else { + for (uint32_t j = 0; j < pCreateInfo->enabledExtensionCount; j++) { + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[j], VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { + ptr_instance->supports_get_dev_prop_2 = true; + break; + } + } + } + + for (uint32_t i = 0; i < ptr_instance->icd_tramp_list.count; i++) { + icd_term = loader_icd_add(ptr_instance, &ptr_instance->icd_tramp_list.scanned_list[i]); + if (NULL == icd_term) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_CreateInstance: Failed to add ICD %d to ICD trampoline list.", i); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + // If any error happens after here, we need to remove the ICD from the list, + // because we've already added it, but haven't validated it + + // Make sure that we reset the pApplicationInfo so we don't get an old pointer + icd_create_info.pApplicationInfo = pCreateInfo->pApplicationInfo; + icd_create_info.enabledExtensionCount = 0; + struct loader_extension_list icd_exts = {0}; + + // traverse scanned icd list adding non-duplicate extensions to the list + res = loader_init_generic_list(ptr_instance, (struct loader_generic_list *)&icd_exts, sizeof(VkExtensionProperties)); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + // If out of memory, bail immediately. + goto out; + } else if (VK_SUCCESS != res) { + // Something bad happened with this ICD, so free it and try the + // next. + ptr_instance->icd_terms = icd_term->next; + icd_term->next = NULL; + loader_icd_destroy(ptr_instance, icd_term, pAllocator); + continue; + } + + res = loader_add_instance_extensions(ptr_instance, icd_term->scanned_icd->EnumerateInstanceExtensionProperties, + icd_term->scanned_icd->lib_name, &icd_exts); + if (VK_SUCCESS != res) { + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&icd_exts); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + // If out of memory, bail immediately. + goto out; + } else { + // Something bad happened with this ICD, so free it and try the next. + ptr_instance->icd_terms = icd_term->next; + icd_term->next = NULL; + loader_icd_destroy(ptr_instance, icd_term, pAllocator); + continue; + } + } + + for (uint32_t j = 0; j < pCreateInfo->enabledExtensionCount; j++) { + prop = get_extension_property(pCreateInfo->ppEnabledExtensionNames[j], &icd_exts); + if (prop) { + filtered_extension_names[icd_create_info.enabledExtensionCount] = (char *)pCreateInfo->ppEnabledExtensionNames[j]; + icd_create_info.enabledExtensionCount++; + } + } +#if defined(LOADER_ENABLE_LINUX_SORT) + // Force on "VK_KHR_get_physical_device_properties2" for Linux as we use it for GPU sorting. This + // should be done if the API version of either the application or the driver does not natively support + // the core version of vkGetPhysicalDeviceProperties2 entrypoint. + if ((ptr_instance->app_api_version.major == 1 && ptr_instance->app_api_version.minor == 0) || + (VK_API_VERSION_MAJOR(icd_term->scanned_icd->api_version) == 1 && + VK_API_VERSION_MINOR(icd_term->scanned_icd->api_version) == 0)) { + prop = get_extension_property(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, &icd_exts); + if (prop) { + filtered_extension_names[icd_create_info.enabledExtensionCount] = + (char *)VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME; + icd_create_info.enabledExtensionCount++; + + // At least one ICD supports this, so the instance should be able to support it + ptr_instance->supports_get_dev_prop_2 = true; + } + } +#endif // LOADER_ENABLE_LINUX_SORT + + // Determine if vkGetPhysicalDeviceProperties2 is available to this Instance + // Also determine if VK_EXT_surface_maintenance1 is available on the ICD + if (icd_term->scanned_icd->api_version >= VK_API_VERSION_1_1) { + icd_term->enabled_instance_extensions.khr_get_physical_device_properties2 = true; + } + fill_out_enabled_instance_extensions(icd_create_info.enabledExtensionCount, (const char *const *)filtered_extension_names, + &icd_term->enabled_instance_extensions); + + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&icd_exts); + + // Get the driver version from vkEnumerateInstanceVersion + uint32_t icd_version = VK_API_VERSION_1_0; + VkResult icd_result = VK_SUCCESS; + if (icd_term->scanned_icd->api_version >= VK_API_VERSION_1_1) { + PFN_vkEnumerateInstanceVersion icd_enumerate_instance_version = + (PFN_vkEnumerateInstanceVersion)icd_term->scanned_icd->GetInstanceProcAddr(NULL, "vkEnumerateInstanceVersion"); + if (icd_enumerate_instance_version != NULL) { + icd_result = icd_enumerate_instance_version(&icd_version); + if (icd_result != VK_SUCCESS) { + icd_version = VK_API_VERSION_1_0; + loader_log(ptr_instance, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "terminator_CreateInstance: ICD \"%s\" vkEnumerateInstanceVersion returned error. The ICD will be " + "treated as a 1.0 ICD", + icd_term->scanned_icd->lib_name); + } else if (VK_API_VERSION_MINOR(icd_version) == 0) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "terminator_CreateInstance: Manifest ICD for \"%s\" contained a 1.1 or greater API version, but " + "vkEnumerateInstanceVersion returned 1.0, treating as a 1.0 ICD", + icd_term->scanned_icd->lib_name); + } + } else { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "terminator_CreateInstance: Manifest ICD for \"%s\" contained a 1.1 or greater API version, but does " + "not support vkEnumerateInstanceVersion, treating as a 1.0 ICD", + icd_term->scanned_icd->lib_name); + } + } + + // Remove the portability enumeration flag bit if the ICD doesn't support the extension + if ((pCreateInfo->flags & VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR) == 1) { + bool supports_portability_enumeration = false; + for (uint32_t j = 0; j < icd_create_info.enabledExtensionCount; j++) { + if (strcmp(filtered_extension_names[j], VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) == 0) { + supports_portability_enumeration = true; + break; + } + } + // If the icd supports the extension, use the flags as given, otherwise remove the portability bit + icd_create_info.flags = supports_portability_enumeration + ? pCreateInfo->flags + : pCreateInfo->flags & (~VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR); + } + + // Create an instance, substituting the version to 1.0 if necessary + VkApplicationInfo icd_app_info; + const uint32_t api_variant = 0; + const uint32_t api_version_1_0 = VK_API_VERSION_1_0; + uint32_t icd_version_nopatch = + VK_MAKE_API_VERSION(api_variant, VK_API_VERSION_MAJOR(icd_version), VK_API_VERSION_MINOR(icd_version), 0); + uint32_t requested_version = (pCreateInfo == NULL || pCreateInfo->pApplicationInfo == NULL) + ? api_version_1_0 + : pCreateInfo->pApplicationInfo->apiVersion; + if ((requested_version != 0) && (icd_version_nopatch == api_version_1_0)) { + if (icd_create_info.pApplicationInfo == NULL) { + memset(&icd_app_info, 0, sizeof(icd_app_info)); + } else { + memmove(&icd_app_info, icd_create_info.pApplicationInfo, sizeof(icd_app_info)); + } + icd_app_info.apiVersion = icd_version; + icd_create_info.pApplicationInfo = &icd_app_info; + } + icd_result = + ptr_instance->icd_tramp_list.scanned_list[i].CreateInstance(&icd_create_info, pAllocator, &(icd_term->instance)); + if (VK_ERROR_OUT_OF_HOST_MEMORY == icd_result) { + // If out of memory, bail immediately. + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } else if (VK_SUCCESS != icd_result) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateInstance: Received return code %i from call to vkCreateInstance in ICD %s. Skipping " + "this driver.", + icd_result, icd_term->scanned_icd->lib_name); + ptr_instance->icd_terms = icd_term->next; + icd_term->next = NULL; + loader_icd_destroy(ptr_instance, icd_term, pAllocator); + continue; + } + + if (!loader_icd_init_entries(ptr_instance, icd_term)) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateInstance: Failed to find required entrypoints in ICD %s. Skipping this driver.", + icd_term->scanned_icd->lib_name); + ptr_instance->icd_terms = icd_term->next; + icd_term->next = NULL; + loader_icd_destroy(ptr_instance, icd_term, pAllocator); + continue; + } + + if (ptr_instance->icd_tramp_list.scanned_list[i].interface_version < 3 && + ( +#if defined(VK_USE_PLATFORM_XLIB_KHR) + NULL != icd_term->dispatch.CreateXlibSurfaceKHR || +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + NULL != icd_term->dispatch.CreateXcbSurfaceKHR || +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + NULL != icd_term->dispatch.CreateWaylandSurfaceKHR || +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + NULL != icd_term->dispatch.CreateAndroidSurfaceKHR || +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + NULL != icd_term->dispatch.CreateWin32SurfaceKHR || +#endif // VK_USE_PLATFORM_WIN32_KHR + NULL != icd_term->dispatch.DestroySurfaceKHR)) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateInstance: Driver %s supports interface version %u but still exposes VkSurfaceKHR" + " create/destroy entrypoints (Policy #LDP_DRIVER_8)", + ptr_instance->icd_tramp_list.scanned_list[i].lib_name, + ptr_instance->icd_tramp_list.scanned_list[i].interface_version); + } + + // If we made it this far, at least one ICD was successful + one_icd_successful = true; + } + + // For vkGetPhysicalDeviceProperties2, at least one ICD needs to support the extension for the + // instance to have it + if (ptr_instance->enabled_extensions.khr_get_physical_device_properties2) { + bool at_least_one_supports = false; + icd_term = ptr_instance->icd_terms; + while (icd_term != NULL) { + if (icd_term->enabled_instance_extensions.khr_get_physical_device_properties2) { + at_least_one_supports = true; + break; + } + icd_term = icd_term->next; + } + if (!at_least_one_supports) { + ptr_instance->enabled_extensions.khr_get_physical_device_properties2 = false; + } + } + + // If no ICDs were added to instance list and res is unchanged from it's initial value, the loader was unable to + // find a suitable ICD. + if (VK_SUCCESS == res && (ptr_instance->icd_terms == NULL || !one_icd_successful)) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "terminator_CreateInstance: Found no drivers!"); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + } + +out: + + ptr_instance->create_terminator_invalid_extension = false; + + if (VK_SUCCESS != res) { + if (VK_ERROR_EXTENSION_NOT_PRESENT == res) { + ptr_instance->create_terminator_invalid_extension = true; + } + + while (NULL != ptr_instance->icd_terms) { + icd_term = ptr_instance->icd_terms; + ptr_instance->icd_terms = icd_term->next; + if (NULL != icd_term->instance) { + loader_icd_close_objects(ptr_instance, icd_term); + icd_term->dispatch.DestroyInstance(icd_term->instance, pAllocator); + } + loader_icd_destroy(ptr_instance, icd_term, pAllocator); + } + } else { + // Check for enabled extensions here to setup the loader structures so the loader knows what extensions + // it needs to worry about. + // We do it here and again above the layers in the trampoline function since the trampoline function + // may think different extensions are enabled than what's down here. + // This is why we don't clear inside of these function calls. + // The clearing should actually be handled by the overall memset of the pInstance structure in the + // trampoline. + fill_out_enabled_instance_extensions(pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames, + &ptr_instance->enabled_extensions); + } + + return res; +} + +VKAPI_ATTR void VKAPI_CALL terminator_DestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { + struct loader_instance *ptr_instance = loader_get_instance(instance); + if (NULL == ptr_instance) { + return; + } + + // Remove this instance from the list of instances: + struct loader_instance *prev = NULL; + loader_platform_thread_lock_mutex(&loader_global_instance_list_lock); + struct loader_instance *next = loader.instances; + while (next != NULL) { + if (next == ptr_instance) { + // Remove this instance from the list: + if (prev) + prev->next = next->next; + else + loader.instances = next->next; + break; + } + prev = next; + next = next->next; + } + loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock); + + struct loader_icd_term *icd_terms = ptr_instance->icd_terms; + while (NULL != icd_terms) { + if (icd_terms->instance) { + loader_icd_close_objects(ptr_instance, icd_terms); + icd_terms->dispatch.DestroyInstance(icd_terms->instance, pAllocator); + } + struct loader_icd_term *next_icd_term = icd_terms->next; + icd_terms->instance = VK_NULL_HANDLE; + loader_icd_destroy(ptr_instance, icd_terms, pAllocator); + + icd_terms = next_icd_term; + } + + loader_clear_scanned_icd_list(ptr_instance, &ptr_instance->icd_tramp_list); + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->ext_list); + if (NULL != ptr_instance->phys_devs_term) { + for (uint32_t i = 0; i < ptr_instance->phys_dev_count_term; i++) { + for (uint32_t j = i + 1; j < ptr_instance->phys_dev_count_term; j++) { + if (ptr_instance->phys_devs_term[i] == ptr_instance->phys_devs_term[j]) { + ptr_instance->phys_devs_term[j] = NULL; + } + } + } + for (uint32_t i = 0; i < ptr_instance->phys_dev_count_term; i++) { + loader_instance_heap_free(ptr_instance, ptr_instance->phys_devs_term[i]); + } + loader_instance_heap_free(ptr_instance, ptr_instance->phys_devs_term); + } + if (NULL != ptr_instance->phys_dev_groups_term) { + for (uint32_t i = 0; i < ptr_instance->phys_dev_group_count_term; i++) { + loader_instance_heap_free(ptr_instance, ptr_instance->phys_dev_groups_term[i]); + } + loader_instance_heap_free(ptr_instance, ptr_instance->phys_dev_groups_term); + } + loader_free_dev_ext_table(ptr_instance); + loader_free_phys_dev_ext_table(ptr_instance); + + free_string_list(ptr_instance, &ptr_instance->enabled_layer_names); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { + VkResult res = VK_SUCCESS; + struct loader_physical_device_term *phys_dev_term; + phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + struct loader_device *dev = (struct loader_device *)*pDevice; + PFN_vkCreateDevice fpCreateDevice = icd_term->dispatch.CreateDevice; + struct loader_extension_list icd_exts; + + VkBaseOutStructure *caller_dgci_container = NULL; + VkDeviceGroupDeviceCreateInfo *caller_dgci = NULL; + + if (NULL == dev) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateDevice: Loader device pointer null encountered. Possibly set by active layer. (Policy " + "#LLP_LAYER_22)"); + } else if (DEVICE_DISP_TABLE_MAGIC_NUMBER != dev->loader_dispatch.core_dispatch.magic) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "terminator_CreateDevice: Device pointer (%p) has invalid MAGIC value 0x%08" PRIx64 + ". The expected value is " + "0x10ADED040410ADED. Device value possibly " + "corrupted by active layer (Policy #LLP_LAYER_22). ", + dev, dev->loader_dispatch.core_dispatch.magic); + } + + dev->phys_dev_term = phys_dev_term; + + icd_exts.list = NULL; + + if (fpCreateDevice == NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "terminator_CreateDevice: No vkCreateDevice command exposed by ICD %s", icd_term->scanned_icd->lib_name); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + VkDeviceCreateInfo localCreateInfo; + memcpy(&localCreateInfo, pCreateInfo, sizeof(localCreateInfo)); + + // NOTE: Need to filter the extensions to only those supported by the ICD. + // No ICD will advertise support for layers. An ICD library could support a layer, + // but it would be independent of the actual ICD, just in the same library. + char **filtered_extension_names = NULL; + if (0 < pCreateInfo->enabledExtensionCount) { + filtered_extension_names = loader_stack_alloc(pCreateInfo->enabledExtensionCount * sizeof(char *)); + if (NULL == filtered_extension_names) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_CreateDevice: Failed to create extension name storage for %d extensions", + pCreateInfo->enabledExtensionCount); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + } + + localCreateInfo.enabledLayerCount = 0; + localCreateInfo.ppEnabledLayerNames = NULL; + + localCreateInfo.enabledExtensionCount = 0; + localCreateInfo.ppEnabledExtensionNames = (const char *const *)filtered_extension_names; + + // Get the physical device (ICD) extensions + res = loader_init_generic_list(icd_term->this_instance, (struct loader_generic_list *)&icd_exts, sizeof(VkExtensionProperties)); + if (VK_SUCCESS != res) { + goto out; + } + + res = loader_add_device_extensions(icd_term->this_instance, icd_term->dispatch.EnumerateDeviceExtensionProperties, + phys_dev_term->phys_dev, icd_term->scanned_icd->lib_name, &icd_exts); + if (res != VK_SUCCESS) { + goto out; + } + + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + if (pCreateInfo->ppEnabledExtensionNames == NULL) { + continue; + } + const char *extension_name = pCreateInfo->ppEnabledExtensionNames[i]; + if (extension_name == NULL) { + continue; + } + VkExtensionProperties *prop = get_extension_property(extension_name, &icd_exts); + if (prop) { + filtered_extension_names[localCreateInfo.enabledExtensionCount] = (char *)extension_name; + localCreateInfo.enabledExtensionCount++; + } else { + loader_log(icd_term->this_instance, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "vkCreateDevice extension %s not available for devices associated with ICD %s", extension_name, + icd_term->scanned_icd->lib_name); + } + } + + // Before we continue, If KHX_device_group is the list of enabled and viable extensions, then we then need to look for the + // corresponding VkDeviceGroupDeviceCreateInfo struct in the device list and replace all the physical device values (which + // are really loader physical device terminator values) with the ICD versions. + // if (icd_term->this_instance->enabled_extensions.khr_device_group_creation == 1) { + { + VkBaseOutStructure *pNext = (VkBaseOutStructure *)localCreateInfo.pNext; + VkBaseOutStructure *pPrev = (VkBaseOutStructure *)&localCreateInfo; + while (NULL != pNext) { + if (VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO == pNext->sType) { + VkDeviceGroupDeviceCreateInfo *cur_struct = (VkDeviceGroupDeviceCreateInfo *)pNext; + if (0 < cur_struct->physicalDeviceCount && NULL != cur_struct->pPhysicalDevices) { + VkDeviceGroupDeviceCreateInfo *temp_struct = loader_stack_alloc(sizeof(VkDeviceGroupDeviceCreateInfo)); + VkPhysicalDevice *phys_dev_array = NULL; + if (NULL == temp_struct) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + memcpy(temp_struct, cur_struct, sizeof(VkDeviceGroupDeviceCreateInfo)); + phys_dev_array = loader_stack_alloc(sizeof(VkPhysicalDevice) * cur_struct->physicalDeviceCount); + if (NULL == phys_dev_array) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + // Before calling down, replace the incoming physical device values (which are really loader terminator + // physical devices) with the ICDs physical device values. + struct loader_physical_device_term *cur_term; + for (uint32_t phys_dev = 0; phys_dev < cur_struct->physicalDeviceCount; phys_dev++) { + cur_term = (struct loader_physical_device_term *)cur_struct->pPhysicalDevices[phys_dev]; + phys_dev_array[phys_dev] = cur_term->phys_dev; + } + temp_struct->pPhysicalDevices = phys_dev_array; + + // Keep track of pointers to restore pNext chain before returning + caller_dgci_container = pPrev; + caller_dgci = cur_struct; + + // Replace the old struct in the pNext chain with this one. + pPrev->pNext = (VkBaseOutStructure *)temp_struct; + } + break; + } + + pPrev = pNext; + pNext = pNext->pNext; + } + } + + // Handle loader emulation for structs that are not supported by the ICD: + // Presently, the emulation leaves the pNext chain alone. This means that the ICD will receive items in the chain which + // are not recognized by the ICD. If this causes the ICD to fail, then the items would have to be removed here. The current + // implementation does not remove them because copying the pNext chain would be impossible if the loader does not recognize + // the any of the struct types, as the loader would not know the size to allocate and copy. + // if (icd_term->dispatch.GetPhysicalDeviceFeatures2 == NULL && icd_term->dispatch.GetPhysicalDeviceFeatures2KHR == NULL) { + { + const void *pNext = localCreateInfo.pNext; + while (pNext != NULL) { + VkBaseInStructure pNext_in_structure = {0}; + memcpy(&pNext_in_structure, pNext, sizeof(VkBaseInStructure)); + switch (pNext_in_structure.sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2: { + const VkPhysicalDeviceFeatures2KHR *features = pNext; + + if (icd_term->dispatch.GetPhysicalDeviceFeatures2 == NULL && + icd_term->dispatch.GetPhysicalDeviceFeatures2KHR == NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkCreateDevice: Emulating handling of VkPhysicalDeviceFeatures2 in pNext chain for ICD \"%s\"", + icd_term->scanned_icd->lib_name); + + // Verify that VK_KHR_get_physical_device_properties2 is enabled + if (icd_term->this_instance->enabled_extensions.khr_get_physical_device_properties2) { + localCreateInfo.pEnabledFeatures = &features->features; + } + } + + // Leave this item in the pNext chain for now + + pNext = features->pNext; + break; + } + + case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO: { + const VkDeviceGroupDeviceCreateInfo *group_info = pNext; + + if (icd_term->dispatch.EnumeratePhysicalDeviceGroups == NULL && + icd_term->dispatch.EnumeratePhysicalDeviceGroupsKHR == NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkCreateDevice: Emulating handling of VkPhysicalDeviceGroupProperties in pNext chain for " + "ICD \"%s\"", + icd_term->scanned_icd->lib_name); + + // The group must contain only this one device, since physical device groups aren't actually supported + if (group_info->physicalDeviceCount != 1) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "vkCreateDevice: Emulation failed to create device from device group info"); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + } + + // Nothing needs to be done here because we're leaving the item in the pNext chain and because the spec + // states that the physicalDevice argument must be included in the device group, and we've already checked + // that it is + + pNext = group_info->pNext; + break; + } + + // Multiview properties are also allowed, but since VK_KHX_multiview is a device extension, we'll just let the + // ICD handle that error when the user enables the extension here + default: { + pNext = pNext_in_structure.pNext; + break; + } + } + } + } + + VkBool32 maintenance5_feature_enabled = false; + // Look for the VkPhysicalDeviceMaintenance5FeaturesKHR struct to see if the feature was enabled + { + const void *pNext = localCreateInfo.pNext; + while (pNext != NULL) { + VkBaseInStructure pNext_in_structure = {0}; + memcpy(&pNext_in_structure, pNext, sizeof(VkBaseInStructure)); + switch (pNext_in_structure.sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: { + const VkPhysicalDeviceMaintenance5FeaturesKHR *maintenance_features = pNext; + if (maintenance_features->maintenance5 == VK_TRUE) { + maintenance5_feature_enabled = true; + } + pNext = maintenance_features->pNext; + break; + } + + default: { + pNext = pNext_in_structure.pNext; + break; + } + } + } + } + + // Every extension that has a loader-defined terminator needs to be marked as enabled or disabled so that we know whether or + // not to return that terminator when vkGetDeviceProcAddr is called + for (uint32_t i = 0; i < localCreateInfo.enabledExtensionCount; ++i) { + if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME)) { + dev->driver_extensions.khr_swapchain_enabled = true; + } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME)) { + dev->driver_extensions.khr_display_swapchain_enabled = true; + } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_DEVICE_GROUP_EXTENSION_NAME)) { + dev->driver_extensions.khr_device_group_enabled = true; + } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + dev->driver_extensions.ext_debug_marker_enabled = true; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME)) { + dev->driver_extensions.ext_full_screen_exclusive_enabled = true; +#endif + } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_MAINTENANCE_5_EXTENSION_NAME) && + maintenance5_feature_enabled) { + dev->should_ignore_device_commands_from_newer_version = true; + } + } + dev->layer_extensions.ext_debug_utils_enabled = icd_term->this_instance->enabled_extensions.ext_debug_utils; + dev->driver_extensions.ext_debug_utils_enabled = icd_term->this_instance->enabled_extensions.ext_debug_utils; + + VkPhysicalDeviceProperties properties; + icd_term->dispatch.GetPhysicalDeviceProperties(phys_dev_term->phys_dev, &properties); + if (properties.apiVersion >= VK_API_VERSION_1_1) { + dev->driver_extensions.version_1_1_enabled = true; + } + if (properties.apiVersion >= VK_API_VERSION_1_2) { + dev->driver_extensions.version_1_2_enabled = true; + } + if (properties.apiVersion >= VK_API_VERSION_1_3) { + dev->driver_extensions.version_1_3_enabled = true; + } + + loader_log(icd_term->this_instance, VULKAN_LOADER_LAYER_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + " Using \"%s\" with driver: \"%s\"", properties.deviceName, icd_term->scanned_icd->lib_name); + + res = fpCreateDevice(phys_dev_term->phys_dev, &localCreateInfo, pAllocator, &dev->icd_device); + if (res != VK_SUCCESS) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "terminator_CreateDevice: Failed in ICD %s vkCreateDevice call", icd_term->scanned_icd->lib_name); + goto out; + } + + *pDevice = dev->icd_device; + loader_add_logical_device(icd_term, dev); + + // Init dispatch pointer in new device object + loader_init_dispatch(*pDevice, &dev->loader_dispatch); + +out: + if (NULL != icd_exts.list) { + loader_destroy_generic_list(icd_term->this_instance, (struct loader_generic_list *)&icd_exts); + } + + // Restore pNext pointer to old VkDeviceGroupDeviceCreateInfo + // in the chain to maintain consistency for the caller. + if (caller_dgci_container != NULL) { + caller_dgci_container->pNext = (VkBaseOutStructure *)caller_dgci; + } + + return res; +} + +// Update the trampoline physical devices with the wrapped version. +// We always want to re-use previous physical device pointers since they may be used by an application +// after returning previously. +VkResult setup_loader_tramp_phys_devs(struct loader_instance *inst, uint32_t phys_dev_count, VkPhysicalDevice *phys_devs) { + VkResult res = VK_SUCCESS; + uint32_t found_count = 0; + uint32_t old_count = inst->phys_dev_count_tramp; + uint32_t new_count = inst->total_gpu_count; + struct loader_physical_device_tramp **new_phys_devs = NULL; + + if (0 == phys_dev_count) { + return VK_SUCCESS; + } + if (phys_dev_count > new_count) { + new_count = phys_dev_count; + } + + // We want an old to new index array and a new to old index array + int32_t *old_to_new_index = (int32_t *)loader_stack_alloc(sizeof(int32_t) * old_count); + int32_t *new_to_old_index = (int32_t *)loader_stack_alloc(sizeof(int32_t) * new_count); + if (NULL == old_to_new_index || NULL == new_to_old_index) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + // Initialize both + for (uint32_t cur_idx = 0; cur_idx < old_count; ++cur_idx) { + old_to_new_index[cur_idx] = -1; + } + for (uint32_t cur_idx = 0; cur_idx < new_count; ++cur_idx) { + new_to_old_index[cur_idx] = -1; + } + + // Figure out the old->new and new->old indices + for (uint32_t cur_idx = 0; cur_idx < old_count; ++cur_idx) { + for (uint32_t new_idx = 0; new_idx < phys_dev_count; ++new_idx) { + if (inst->phys_devs_tramp[cur_idx]->phys_dev == phys_devs[new_idx]) { + old_to_new_index[cur_idx] = (int32_t)new_idx; + new_to_old_index[new_idx] = (int32_t)cur_idx; + found_count++; + break; + } + } + } + + // If we found exactly the number of items we were looking for as we had before. Then everything + // we already have is good enough and we just need to update the array that was passed in with + // the loader values. + if (found_count == phys_dev_count && 0 != old_count && old_count == new_count) { + for (uint32_t new_idx = 0; new_idx < phys_dev_count; ++new_idx) { + for (uint32_t cur_idx = 0; cur_idx < old_count; ++cur_idx) { + if (old_to_new_index[cur_idx] == (int32_t)new_idx) { + phys_devs[new_idx] = (VkPhysicalDevice)inst->phys_devs_tramp[cur_idx]; + break; + } + } + } + // Nothing else to do for this path + res = VK_SUCCESS; + } else { + // Something is different, so do the full path of checking every device and creating a new array to use. + // This can happen if a device was added, or removed, or we hadn't previously queried all the data and we + // have more to store. + new_phys_devs = loader_instance_heap_calloc(inst, sizeof(struct loader_physical_device_tramp *) * new_count, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_devs) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_tramp_phys_devs: Failed to allocate new physical device array of size %d", new_count); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + if (new_count > phys_dev_count) { + found_count = phys_dev_count; + } else { + found_count = new_count; + } + + // First try to see if an old item exists that matches the new item. If so, just copy it over. + for (uint32_t new_idx = 0; new_idx < found_count; ++new_idx) { + bool old_item_found = false; + for (uint32_t cur_idx = 0; cur_idx < old_count; ++cur_idx) { + if (old_to_new_index[cur_idx] == (int32_t)new_idx) { + // Copy over old item to correct spot in the new array + new_phys_devs[new_idx] = inst->phys_devs_tramp[cur_idx]; + old_item_found = true; + break; + } + } + // Something wasn't found, so it's new so add it to the new list + if (!old_item_found) { + new_phys_devs[new_idx] = loader_instance_heap_alloc(inst, sizeof(struct loader_physical_device_tramp), + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_devs[new_idx]) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_tramp_phys_devs: Failed to allocate new trampoline physical device"); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + // Initialize the new physicalDevice object + loader_set_dispatch((void *)new_phys_devs[new_idx], inst->disp); + new_phys_devs[new_idx]->this_instance = inst; + new_phys_devs[new_idx]->phys_dev = phys_devs[new_idx]; + new_phys_devs[new_idx]->magic = PHYS_TRAMP_MAGIC_NUMBER; + } + + phys_devs[new_idx] = (VkPhysicalDevice)new_phys_devs[new_idx]; + } + + // We usually get here if the user array is smaller than the total number of devices, so copy the + // remaining devices we have over to the new array. + uint32_t start = found_count; + for (uint32_t new_idx = start; new_idx < new_count; ++new_idx) { + for (uint32_t cur_idx = 0; cur_idx < old_count; ++cur_idx) { + if (old_to_new_index[cur_idx] == -1) { + new_phys_devs[new_idx] = inst->phys_devs_tramp[cur_idx]; + old_to_new_index[cur_idx] = new_idx; + found_count++; + break; + } + } + } + } + +out: + + if (NULL != new_phys_devs) { + if (VK_SUCCESS != res) { + for (uint32_t new_idx = 0; new_idx < found_count; ++new_idx) { + // If an OOM occurred inside the copying of the new physical devices into the existing array + // will leave some of the old physical devices in the array which may have been copied into + // the new array, leading to them being freed twice. To avoid this we just make sure to not + // delete physical devices which were copied. + bool found = false; + for (uint32_t cur_idx = 0; cur_idx < inst->phys_dev_count_tramp; cur_idx++) { + if (new_phys_devs[new_idx] == inst->phys_devs_tramp[cur_idx]) { + found = true; + break; + } + } + if (!found) { + loader_instance_heap_free(inst, new_phys_devs[new_idx]); + } + } + loader_instance_heap_free(inst, new_phys_devs); + } else { + if (new_count > inst->total_gpu_count) { + inst->total_gpu_count = new_count; + } + // Free everything in the old array that was not copied into the new array + // here. We can't attempt to do that before here since the previous loop + // looking before the "out:" label may hit an out of memory condition resulting + // in memory leaking. + if (NULL != inst->phys_devs_tramp) { + for (uint32_t i = 0; i < inst->phys_dev_count_tramp; i++) { + bool found = false; + for (uint32_t j = 0; j < inst->total_gpu_count; j++) { + if (inst->phys_devs_tramp[i] == new_phys_devs[j]) { + found = true; + break; + } + } + if (!found) { + loader_instance_heap_free(inst, inst->phys_devs_tramp[i]); + } + } + loader_instance_heap_free(inst, inst->phys_devs_tramp); + } + inst->phys_devs_tramp = new_phys_devs; + inst->phys_dev_count_tramp = found_count; + } + } + if (VK_SUCCESS != res) { + inst->total_gpu_count = 0; + } + + return res; +} + +#if defined(LOADER_ENABLE_LINUX_SORT) +bool is_linux_sort_enabled(struct loader_instance *inst) { + bool sort_items = inst->supports_get_dev_prop_2; + char *env_value = loader_getenv("VK_LOADER_DISABLE_SELECT", inst); + if (NULL != env_value) { + int32_t int_env_val = atoi(env_value); + loader_free_getenv(env_value, inst); + if (int_env_val != 0) { + sort_items = false; + } + } + return sort_items; +} +#endif // LOADER_ENABLE_LINUX_SORT + +// Look for physical_device in the provided phys_devs list, return true if found and put the index into out_idx, otherwise +// return false +bool find_phys_dev(VkPhysicalDevice physical_device, uint32_t phys_devs_count, struct loader_physical_device_term **phys_devs, + uint32_t *out_idx) { + if (NULL == phys_devs) return false; + for (uint32_t idx = 0; idx < phys_devs_count; idx++) { + if (NULL != phys_devs[idx] && physical_device == phys_devs[idx]->phys_dev) { + *out_idx = idx; + return true; + } + } + return false; +} + +// Add physical_device to new_phys_devs +VkResult check_and_add_to_new_phys_devs(struct loader_instance *inst, VkPhysicalDevice physical_device, + struct loader_icd_physical_devices *dev_array, uint32_t *cur_new_phys_dev_count, + struct loader_physical_device_term **new_phys_devs) { + uint32_t out_idx = 0; + uint32_t idx = *cur_new_phys_dev_count; + // Check if the physical_device already exists in the new_phys_devs buffer, that means it was found from both + // EnumerateAdapterPhysicalDevices and EnumeratePhysicalDevices and we need to skip it. + if (find_phys_dev(physical_device, idx, new_phys_devs, &out_idx)) { + return VK_SUCCESS; + } + // Check if it was found in a previous call to vkEnumeratePhysicalDevices, we can just copy over the old data. + if (find_phys_dev(physical_device, inst->phys_dev_count_term, inst->phys_devs_term, &out_idx)) { + new_phys_devs[idx] = inst->phys_devs_term[out_idx]; + (*cur_new_phys_dev_count)++; + return VK_SUCCESS; + } + + // Exit in case something is already present - this shouldn't happen but better to be safe than overwrite existing data + // since this code has been refactored a half dozen times. + if (NULL != new_phys_devs[idx]) { + return VK_SUCCESS; + } + // If this physical device is new, we need to allocate space for it. + new_phys_devs[idx] = + loader_instance_heap_alloc(inst, sizeof(struct loader_physical_device_term), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_devs[idx]) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "check_and_add_to_new_phys_devs: Failed to allocate physical device terminator object %d", idx); + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + loader_set_dispatch((void *)new_phys_devs[idx], inst->disp); + new_phys_devs[idx]->this_icd_term = dev_array->icd_term; + new_phys_devs[idx]->phys_dev = physical_device; + + // Increment the count of new physical devices + (*cur_new_phys_dev_count)++; + return VK_SUCCESS; +} + +/* Enumerate all physical devices from ICDs and add them to inst->phys_devs_term + * + * There are two methods to find VkPhysicalDevices - vkEnumeratePhysicalDevices and vkEnumerateAdapterPhysicalDevices + * The latter is supported on windows only and on devices supporting ICD Interface Version 6 and greater. + * + * Once all physical devices are acquired, they need to be pulled into a single list of `loader_physical_device_term`'s. + * They also need to be setup - the icd_term, icd_index, phys_dev, and disp (dispatch table) all need the correct data. + * Additionally, we need to keep using already setup physical devices as they may be in use, thus anything enumerated + * that is already in inst->phys_devs_term will be carried over. + */ + +VkResult setup_loader_term_phys_devs(struct loader_instance *inst) { + VkResult res = VK_SUCCESS; + struct loader_icd_term *icd_term; + uint32_t windows_sorted_devices_count = 0; + struct loader_icd_physical_devices *windows_sorted_devices_array = NULL; + uint32_t icd_count = 0; + struct loader_icd_physical_devices *icd_phys_dev_array = NULL; + uint32_t new_phys_devs_capacity = 0; + uint32_t new_phys_devs_count = 0; + struct loader_physical_device_term **new_phys_devs = NULL; + +#if defined(_WIN32) + // Get the physical devices supported by platform sorting mechanism into a separate list + res = windows_read_sorted_physical_devices(inst, &windows_sorted_devices_count, &windows_sorted_devices_array); + if (VK_SUCCESS != res) { + goto out; + } +#endif + + icd_count = inst->icd_terms_count; + + // Allocate something to store the physical device characteristics that we read from each ICD. + icd_phys_dev_array = + (struct loader_icd_physical_devices *)loader_stack_alloc(sizeof(struct loader_icd_physical_devices) * icd_count); + if (NULL == icd_phys_dev_array) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Failed to allocate temporary ICD Physical device info array of size %d", + icd_count); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + memset(icd_phys_dev_array, 0, sizeof(struct loader_icd_physical_devices) * icd_count); + + // For each ICD, query the number of physical devices, and then get an + // internal value for those physical devices. + icd_term = inst->icd_terms; + uint32_t icd_idx = 0; + while (NULL != icd_term) { + res = icd_term->dispatch.EnumeratePhysicalDevices(icd_term->instance, &icd_phys_dev_array[icd_idx].device_count, NULL); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Call to \'vkEnumeratePhysicalDevices\' in ICD %s failed with error code " + "VK_ERROR_OUT_OF_HOST_MEMORY", + icd_term->scanned_icd->lib_name); + goto out; + } else if (VK_SUCCESS == res) { + icd_phys_dev_array[icd_idx].physical_devices = + (VkPhysicalDevice *)loader_stack_alloc(icd_phys_dev_array[icd_idx].device_count * sizeof(VkPhysicalDevice)); + if (NULL == icd_phys_dev_array[icd_idx].physical_devices) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Failed to allocate temporary ICD Physical device array for ICD %s of size %d", + icd_term->scanned_icd->lib_name, icd_phys_dev_array[icd_idx].device_count); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + res = icd_term->dispatch.EnumeratePhysicalDevices(icd_term->instance, &(icd_phys_dev_array[icd_idx].device_count), + icd_phys_dev_array[icd_idx].physical_devices); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Call to \'vkEnumeratePhysicalDevices\' in ICD %s failed with error code " + "VK_ERROR_OUT_OF_HOST_MEMORY", + icd_term->scanned_icd->lib_name); + goto out; + } + if (VK_SUCCESS != res) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Call to \'vkEnumeratePhysicalDevices\' in ICD %s failed with error code %d", + icd_term->scanned_icd->lib_name, res); + icd_phys_dev_array[icd_idx].device_count = 0; + icd_phys_dev_array[icd_idx].physical_devices = 0; + } + } else { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Call to \'vkEnumeratePhysicalDevices\' in ICD %s failed with error code %d", + icd_term->scanned_icd->lib_name, res); + icd_phys_dev_array[icd_idx].device_count = 0; + icd_phys_dev_array[icd_idx].physical_devices = 0; + } + icd_phys_dev_array[icd_idx].icd_term = icd_term; + icd_term->physical_device_count = icd_phys_dev_array[icd_idx].device_count; + icd_term = icd_term->next; + ++icd_idx; + } + + // Add up both the windows sorted and non windows found physical device counts + for (uint32_t i = 0; i < windows_sorted_devices_count; ++i) { + new_phys_devs_capacity += windows_sorted_devices_array[i].device_count; + } + for (uint32_t i = 0; i < icd_count; ++i) { + new_phys_devs_capacity += icd_phys_dev_array[i].device_count; + } + + // Bail out if there are no physical devices reported + if (0 == new_phys_devs_capacity) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Failed to detect any valid GPUs in the current config"); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Create an allocation large enough to hold both the windows sorting enumeration and non-windows physical device + // enumeration + new_phys_devs = loader_instance_heap_calloc(inst, sizeof(struct loader_physical_device_term *) * new_phys_devs_capacity, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_devs) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Failed to allocate new physical device array of size %d", new_phys_devs_capacity); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + // Copy over everything found through sorted enumeration + for (uint32_t i = 0; i < windows_sorted_devices_count; ++i) { + for (uint32_t j = 0; j < windows_sorted_devices_array[i].device_count; ++j) { + res = check_and_add_to_new_phys_devs(inst, windows_sorted_devices_array[i].physical_devices[j], + &windows_sorted_devices_array[i], &new_phys_devs_count, new_phys_devs); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + } + } + +// Now go through the rest of the physical devices and add them to new_phys_devs +#if defined(LOADER_ENABLE_LINUX_SORT) + + if (is_linux_sort_enabled(inst)) { + for (uint32_t dev = new_phys_devs_count; dev < new_phys_devs_capacity; ++dev) { + new_phys_devs[dev] = + loader_instance_heap_alloc(inst, sizeof(struct loader_physical_device_term), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_devs[dev]) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "setup_loader_term_phys_devs: Failed to allocate physical device terminator object %d", dev); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + } + + // Get the physical devices supported by platform sorting mechanism into a separate list + // Pass in a sublist to the function so it only operates on the correct elements. This means passing in a pointer to the + // current next element in new_phys_devs and passing in a `count` of currently unwritten elements + res = linux_read_sorted_physical_devices(inst, icd_count, icd_phys_dev_array, new_phys_devs_capacity - new_phys_devs_count, + &new_phys_devs[new_phys_devs_count]); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + // Keep previously allocated physical device info since apps may already be using that! + for (uint32_t new_idx = new_phys_devs_count; new_idx < new_phys_devs_capacity; new_idx++) { + for (uint32_t old_idx = 0; old_idx < inst->phys_dev_count_term; old_idx++) { + if (new_phys_devs[new_idx]->phys_dev == inst->phys_devs_term[old_idx]->phys_dev) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "Copying old device %u into new device %u", old_idx, new_idx); + // Free the old new_phys_devs info since we're not using it before we assign the new info + loader_instance_heap_free(inst, new_phys_devs[new_idx]); + new_phys_devs[new_idx] = inst->phys_devs_term[old_idx]; + break; + } + } + } + // now set the count to the capacity, as now the list is filled in + new_phys_devs_count = new_phys_devs_capacity; + // We want the following code to run if either linux sorting is disabled at compile time or runtime + } else { +#endif // LOADER_ENABLE_LINUX_SORT + + // Copy over everything found through the non-sorted means. + for (uint32_t i = 0; i < icd_count; ++i) { + for (uint32_t j = 0; j < icd_phys_dev_array[i].device_count; ++j) { + res = check_and_add_to_new_phys_devs(inst, icd_phys_dev_array[i].physical_devices[j], &icd_phys_dev_array[i], + &new_phys_devs_count, new_phys_devs); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + } + } +#if defined(LOADER_ENABLE_LINUX_SORT) + } +#endif // LOADER_ENABLE_LINUX_SORT +out: + + if (VK_SUCCESS != res) { + if (NULL != new_phys_devs) { + // We've encountered an error, so we should free the new buffers. + for (uint32_t i = 0; i < new_phys_devs_capacity; i++) { + // May not have allocated this far, skip it if we hadn't. + if (new_phys_devs[i] == NULL) continue; + + // If an OOM occurred inside the copying of the new physical devices into the existing array + // will leave some of the old physical devices in the array which may have been copied into + // the new array, leading to them being freed twice. To avoid this we just make sure to not + // delete physical devices which were copied. + bool found = false; + if (NULL != inst->phys_devs_term) { + for (uint32_t old_idx = 0; old_idx < inst->phys_dev_count_term; old_idx++) { + if (new_phys_devs[i] == inst->phys_devs_term[old_idx]) { + found = true; + break; + } + } + } + if (!found) { + loader_instance_heap_free(inst, new_phys_devs[i]); + } + } + loader_instance_heap_free(inst, new_phys_devs); + } + inst->total_gpu_count = 0; + } else { + if (NULL != inst->phys_devs_term) { + // Free everything in the old array that was not copied into the new array + // here. We can't attempt to do that before here since the previous loop + // looking before the "out:" label may hit an out of memory condition resulting + // in memory leaking. + for (uint32_t i = 0; i < inst->phys_dev_count_term; i++) { + bool found = false; + for (uint32_t j = 0; j < new_phys_devs_count; j++) { + if (new_phys_devs != NULL && inst->phys_devs_term[i] == new_phys_devs[j]) { + found = true; + break; + } + } + if (!found) { + loader_instance_heap_free(inst, inst->phys_devs_term[i]); + } + } + loader_instance_heap_free(inst, inst->phys_devs_term); + } + + // Swap out old and new devices list + inst->phys_dev_count_term = new_phys_devs_count; + inst->phys_devs_term = new_phys_devs; + inst->total_gpu_count = new_phys_devs_count; + } + + if (windows_sorted_devices_array != NULL) { + for (uint32_t i = 0; i < windows_sorted_devices_count; ++i) { + if (windows_sorted_devices_array[i].device_count > 0 && windows_sorted_devices_array[i].physical_devices != NULL) { + loader_instance_heap_free(inst, windows_sorted_devices_array[i].physical_devices); + } + } + loader_instance_heap_free(inst, windows_sorted_devices_array); + } + + return res; +} +/** + * Iterates through all drivers and unloads any which do not contain physical devices. + * This saves address space, which for 32 bit applications is scarce. + * This must only be called after a call to vkEnumeratePhysicalDevices that isn't just querying the count + */ +void unload_drivers_without_physical_devices(struct loader_instance *inst) { + struct loader_icd_term *cur_icd_term = inst->icd_terms; + struct loader_icd_term *prev_icd_term = NULL; + + while (NULL != cur_icd_term) { + struct loader_icd_term *next_icd_term = cur_icd_term->next; + if (cur_icd_term->physical_device_count == 0) { + uint32_t cur_scanned_icd_index = UINT32_MAX; + if (inst->icd_tramp_list.scanned_list) { + for (uint32_t i = 0; i < inst->icd_tramp_list.count; i++) { + if (&(inst->icd_tramp_list.scanned_list[i]) == cur_icd_term->scanned_icd) { + cur_scanned_icd_index = i; + break; + } + } + } + if (cur_scanned_icd_index != UINT32_MAX) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "Removing driver %s due to not having any physical devices", cur_icd_term->scanned_icd->lib_name); + + const VkAllocationCallbacks *allocation_callbacks = ignore_null_callback(&(inst->alloc_callbacks)); + if (cur_icd_term->instance) { + loader_icd_close_objects(inst, cur_icd_term); + cur_icd_term->dispatch.DestroyInstance(cur_icd_term->instance, allocation_callbacks); + } + cur_icd_term->instance = VK_NULL_HANDLE; + loader_icd_destroy(inst, cur_icd_term, allocation_callbacks); + cur_icd_term = NULL; + struct loader_scanned_icd *scanned_icd_to_remove = &inst->icd_tramp_list.scanned_list[cur_scanned_icd_index]; + // Iterate through preloaded ICDs and remove the corresponding driver from that list + loader_platform_thread_lock_mutex(&loader_preload_icd_lock); + if (NULL != preloaded_icds.scanned_list) { + for (uint32_t i = 0; i < preloaded_icds.count; i++) { + if (NULL != preloaded_icds.scanned_list[i].lib_name && NULL != scanned_icd_to_remove->lib_name && + strcmp(preloaded_icds.scanned_list[i].lib_name, scanned_icd_to_remove->lib_name) == 0) { + loader_unload_scanned_icd(NULL, &preloaded_icds.scanned_list[i]); + // condense the list so that it doesn't contain empty elements. + if (i < preloaded_icds.count - 1) { + memcpy((void *)&preloaded_icds.scanned_list[i], + (void *)&preloaded_icds.scanned_list[preloaded_icds.count - 1], + sizeof(struct loader_scanned_icd)); + memset((void *)&preloaded_icds.scanned_list[preloaded_icds.count - 1], 0, + sizeof(struct loader_scanned_icd)); + } + if (i > 0) { + preloaded_icds.count--; + } + + break; + } + } + } + loader_platform_thread_unlock_mutex(&loader_preload_icd_lock); + + loader_unload_scanned_icd(inst, scanned_icd_to_remove); + } + + if (NULL == prev_icd_term) { + inst->icd_terms = next_icd_term; + } else { + prev_icd_term->next = next_icd_term; + } + } else { + prev_icd_term = cur_icd_term; + } + cur_icd_term = next_icd_term; + } +} + +VkResult setup_loader_tramp_phys_dev_groups(struct loader_instance *inst, uint32_t group_count, + VkPhysicalDeviceGroupProperties *groups) { + VkResult res = VK_SUCCESS; + uint32_t cur_idx; + uint32_t dev_idx; + + if (0 == group_count) { + return VK_SUCCESS; + } + + // Generate a list of all the devices and convert them to the loader ID + uint32_t phys_dev_count = 0; + for (cur_idx = 0; cur_idx < group_count; ++cur_idx) { + phys_dev_count += groups[cur_idx].physicalDeviceCount; + } + VkPhysicalDevice *devices = (VkPhysicalDevice *)loader_stack_alloc(sizeof(VkPhysicalDevice) * phys_dev_count); + if (NULL == devices) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + uint32_t cur_device = 0; + for (cur_idx = 0; cur_idx < group_count; ++cur_idx) { + for (dev_idx = 0; dev_idx < groups[cur_idx].physicalDeviceCount; ++dev_idx) { + devices[cur_device++] = groups[cur_idx].physicalDevices[dev_idx]; + } + } + + // Update the devices based on the loader physical device values. + res = setup_loader_tramp_phys_devs(inst, phys_dev_count, devices); + if (VK_SUCCESS != res) { + return res; + } + + // Update the devices in the group structures now + cur_device = 0; + for (cur_idx = 0; cur_idx < group_count; ++cur_idx) { + for (dev_idx = 0; dev_idx < groups[cur_idx].physicalDeviceCount; ++dev_idx) { + groups[cur_idx].physicalDevices[dev_idx] = devices[cur_device++]; + } + } + + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, + VkPhysicalDevice *pPhysicalDevices) { + struct loader_instance *inst = (struct loader_instance *)instance; + VkResult res = VK_SUCCESS; + + // Always call the setup loader terminator physical devices because they may + // have changed at any point. + res = setup_loader_term_phys_devs(inst); + if (VK_SUCCESS != res) { + goto out; + } + + uint32_t copy_count = inst->phys_dev_count_term; + if (NULL != pPhysicalDevices) { + if (copy_count > *pPhysicalDeviceCount) { + copy_count = *pPhysicalDeviceCount; + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "terminator_EnumeratePhysicalDevices : Trimming device count from %d to %d.", inst->phys_dev_count_term, + copy_count); + res = VK_INCOMPLETE; + } + + for (uint32_t i = 0; i < copy_count; i++) { + pPhysicalDevices[i] = (VkPhysicalDevice)inst->phys_devs_term[i]; + } + } + + *pPhysicalDeviceCount = copy_count; + +out: + + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char *pLayerName, uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) { + if (NULL == pPropertyCount) { + return VK_INCOMPLETE; + } + + struct loader_physical_device_term *phys_dev_term; + + // Any layer or trampoline wrapping should be removed at this point in time can just cast to the expected + // type for VkPhysicalDevice. + phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + + // if we got here with a non-empty pLayerName, look up the extensions + // from the json + if (pLayerName != NULL && strlen(pLayerName) > 0) { + uint32_t count; + uint32_t copy_size; + const struct loader_instance *inst = phys_dev_term->this_icd_term->this_instance; + struct loader_device_extension_list *dev_ext_list = NULL; + struct loader_device_extension_list local_ext_list; + memset(&local_ext_list, 0, sizeof(local_ext_list)); + if (vk_string_validate(MaxLoaderStringLength, pLayerName) == VK_STRING_ERROR_NONE) { + for (uint32_t i = 0; i < inst->instance_layer_list.count; i++) { + struct loader_layer_properties *props = &inst->instance_layer_list.list[i]; + if (strcmp(props->info.layerName, pLayerName) == 0) { + dev_ext_list = &props->device_extension_list; + } + } + + count = (dev_ext_list == NULL) ? 0 : dev_ext_list->count; + if (pProperties == NULL) { + *pPropertyCount = count; + loader_destroy_generic_list(inst, (struct loader_generic_list *)&local_ext_list); + return VK_SUCCESS; + } + + copy_size = *pPropertyCount < count ? *pPropertyCount : count; + for (uint32_t i = 0; i < copy_size; i++) { + memcpy(&pProperties[i], &dev_ext_list->list[i].props, sizeof(VkExtensionProperties)); + } + *pPropertyCount = copy_size; + + loader_destroy_generic_list(inst, (struct loader_generic_list *)&local_ext_list); + if (copy_size < count) { + return VK_INCOMPLETE; + } + } else { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "vkEnumerateDeviceExtensionProperties: pLayerName is too long or is badly formed"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + + return VK_SUCCESS; + } + + // user is querying driver extensions and has supplied their own storage - just fill it out + else if (pProperties) { + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + uint32_t written_count = *pPropertyCount; + VkResult res = + icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &written_count, pProperties); + if (res != VK_SUCCESS) { + return res; + } + + // Iterate over active layers, if they are an implicit layer, add their device extensions + // After calling into the driver, written_count contains the amount of device extensions written. We can therefore write + // layer extensions starting at that point in pProperties + for (uint32_t i = 0; i < icd_term->this_instance->expanded_activated_layer_list.count; i++) { + struct loader_layer_properties *layer_props = icd_term->this_instance->expanded_activated_layer_list.list[i]; + if (0 == (layer_props->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)) { + struct loader_device_extension_list *layer_ext_list = &layer_props->device_extension_list; + for (uint32_t j = 0; j < layer_ext_list->count; j++) { + struct loader_dev_ext_props *cur_ext_props = &layer_ext_list->list[j]; + // look for duplicates + if (has_vk_extension_property_array(&cur_ext_props->props, written_count, pProperties)) { + continue; + } + + if (*pPropertyCount <= written_count) { + return VK_INCOMPLETE; + } + + memcpy(&pProperties[written_count], &cur_ext_props->props, sizeof(VkExtensionProperties)); + written_count++; + } + } + } + // Make sure we update the pPropertyCount with the how many were written + *pPropertyCount = written_count; + return res; + } + // Use `goto out;` for rest of this function + + // This case is during the call down the instance chain with pLayerName == NULL and pProperties == NULL + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_extension_list all_exts = {0}; + VkResult res; + + // We need to find the count without duplicates. This requires querying the driver for the names of the extensions. + res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &all_exts.count, NULL); + if (res != VK_SUCCESS) { + goto out; + } + // Then allocate memory to store the physical device extension list + the extensions layers provide + // all_exts.count currently is the number of driver extensions + all_exts.capacity = sizeof(VkExtensionProperties) * (all_exts.count + 20); + all_exts.list = loader_instance_heap_alloc(icd_term->this_instance, all_exts.capacity, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL == all_exts.list) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + // Get the available device extensions and put them in all_exts.list + res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &all_exts.count, all_exts.list); + if (res != VK_SUCCESS) { + goto out; + } + + // Iterate over active layers, if they are an implicit layer, add their device extensions to all_exts.list + for (uint32_t i = 0; i < icd_term->this_instance->expanded_activated_layer_list.count; i++) { + struct loader_layer_properties *layer_props = icd_term->this_instance->expanded_activated_layer_list.list[i]; + if (0 == (layer_props->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)) { + struct loader_device_extension_list *layer_ext_list = &layer_props->device_extension_list; + for (uint32_t j = 0; j < layer_ext_list->count; j++) { + res = loader_add_to_ext_list(icd_term->this_instance, &all_exts, 1, &layer_ext_list->list[j].props); + if (res != VK_SUCCESS) { + goto out; + } + } + } + } + + // Write out the final de-duplicated count to pPropertyCount + *pPropertyCount = all_exts.count; + res = VK_SUCCESS; + +out: + + loader_destroy_generic_list(icd_term->this_instance, (struct loader_generic_list *)&all_exts); + return res; +} + +VkStringErrorFlags vk_string_validate(const int max_length, const char *utf8) { + VkStringErrorFlags result = VK_STRING_ERROR_NONE; + int num_char_bytes = 0; + int i, j; + + if (utf8 == NULL) { + return VK_STRING_ERROR_NULL_PTR; + } + + for (i = 0; i <= max_length; i++) { + if (utf8[i] == 0) { + break; + } else if (i == max_length) { + result |= VK_STRING_ERROR_LENGTH; + break; + } else if ((utf8[i] >= 0x20) && (utf8[i] < 0x7f)) { + num_char_bytes = 0; + } else if ((utf8[i] & UTF8_ONE_BYTE_MASK) == UTF8_ONE_BYTE_CODE) { + num_char_bytes = 1; + } else if ((utf8[i] & UTF8_TWO_BYTE_MASK) == UTF8_TWO_BYTE_CODE) { + num_char_bytes = 2; + } else if ((utf8[i] & UTF8_THREE_BYTE_MASK) == UTF8_THREE_BYTE_CODE) { + num_char_bytes = 3; + } else { + result = VK_STRING_ERROR_BAD_DATA; + } + + // Validate the following num_char_bytes of data + for (j = 0; (j < num_char_bytes) && (i < max_length); j++) { + if (++i == max_length) { + result |= VK_STRING_ERROR_LENGTH; + break; + } + if ((utf8[i] & UTF8_DATA_BYTE_MASK) != UTF8_DATA_BYTE_CODE) { + result |= VK_STRING_ERROR_BAD_DATA; + } + } + } + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceVersion(uint32_t *pApiVersion) { + // NOTE: The Vulkan WG doesn't want us checking pApiVersion for NULL, but instead + // prefers us crashing. + *pApiVersion = VK_HEADER_VERSION_COMPLETE; + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_pre_instance_EnumerateInstanceVersion(const VkEnumerateInstanceVersionChain *chain, + uint32_t *pApiVersion) { + (void)chain; + return terminator_EnumerateInstanceVersion(pApiVersion); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) { + struct loader_extension_list *global_ext_list = NULL; + struct loader_layer_list instance_layers; + struct loader_extension_list local_ext_list; + struct loader_icd_tramp_list icd_tramp_list; + uint32_t copy_size; + VkResult res = VK_SUCCESS; + struct loader_envvar_all_filters layer_filters = {0}; + + memset(&local_ext_list, 0, sizeof(local_ext_list)); + memset(&instance_layers, 0, sizeof(instance_layers)); + memset(&icd_tramp_list, 0, sizeof(icd_tramp_list)); + + res = parse_layer_environment_var_filters(NULL, &layer_filters); + if (VK_SUCCESS != res) { + goto out; + } + + // Get layer libraries if needed + if (pLayerName && strlen(pLayerName) != 0) { + if (vk_string_validate(MaxLoaderStringLength, pLayerName) != VK_STRING_ERROR_NONE) { + assert(VK_FALSE && "vkEnumerateInstanceExtensionProperties: pLayerName is too long or is badly formed"); + res = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + res = loader_scan_for_layers(NULL, &instance_layers, &layer_filters); + if (VK_SUCCESS != res) { + goto out; + } + for (uint32_t i = 0; i < instance_layers.count; i++) { + struct loader_layer_properties *props = &instance_layers.list[i]; + if (strcmp(props->info.layerName, pLayerName) == 0) { + global_ext_list = &props->instance_extension_list; + break; + } + } + } else { + // Preload ICD libraries so subsequent calls to EnumerateInstanceExtensionProperties don't have to load them + loader_preload_icds(); + + // Scan/discover all ICD libraries + res = loader_icd_scan(NULL, &icd_tramp_list, NULL, NULL); + // EnumerateInstanceExtensionProperties can't return anything other than OOM or VK_ERROR_LAYER_NOT_PRESENT + if ((VK_SUCCESS != res && icd_tramp_list.count > 0) || res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + // Get extensions from all ICD's, merge so no duplicates + res = loader_get_icd_loader_instance_extensions(NULL, &icd_tramp_list, &local_ext_list); + if (VK_SUCCESS != res) { + goto out; + } + loader_clear_scanned_icd_list(NULL, &icd_tramp_list); + + // Append enabled implicit layers. + res = loader_scan_for_implicit_layers(NULL, &instance_layers, &layer_filters); + if (VK_SUCCESS != res) { + goto out; + } + for (uint32_t i = 0; i < instance_layers.count; i++) { + struct loader_extension_list *ext_list = &instance_layers.list[i].instance_extension_list; + loader_add_to_ext_list(NULL, &local_ext_list, ext_list->count, ext_list->list); + } + + global_ext_list = &local_ext_list; + } + + if (global_ext_list == NULL) { + res = VK_ERROR_LAYER_NOT_PRESENT; + goto out; + } + + if (pProperties == NULL) { + *pPropertyCount = global_ext_list->count; + goto out; + } + + copy_size = *pPropertyCount < global_ext_list->count ? *pPropertyCount : global_ext_list->count; + for (uint32_t i = 0; i < copy_size; i++) { + memcpy(&pProperties[i], &global_ext_list->list[i], sizeof(VkExtensionProperties)); + } + *pPropertyCount = copy_size; + + if (copy_size < global_ext_list->count) { + res = VK_INCOMPLETE; + goto out; + } + +out: + loader_destroy_generic_list(NULL, (struct loader_generic_list *)&icd_tramp_list); + loader_destroy_generic_list(NULL, (struct loader_generic_list *)&local_ext_list); + loader_delete_layer_list_and_properties(NULL, &instance_layers); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_pre_instance_EnumerateInstanceExtensionProperties( + const VkEnumerateInstanceExtensionPropertiesChain *chain, const char *pLayerName, uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) { + (void)chain; + return terminator_EnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceLayerProperties(uint32_t *pPropertyCount, + VkLayerProperties *pProperties) { + VkResult result = VK_SUCCESS; + struct loader_layer_list instance_layer_list; + struct loader_envvar_all_filters layer_filters = {0}; + + LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize); + + result = parse_layer_environment_var_filters(NULL, &layer_filters); + if (VK_SUCCESS != result) { + goto out; + } + + // Get layer libraries + memset(&instance_layer_list, 0, sizeof(instance_layer_list)); + result = loader_scan_for_layers(NULL, &instance_layer_list, &layer_filters); + if (VK_SUCCESS != result) { + goto out; + } + + uint32_t layers_to_write_out = 0; + for (uint32_t i = 0; i < instance_layer_list.count; i++) { + if (instance_layer_list.list[i].settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_ON || + instance_layer_list.list[i].settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_DEFAULT) { + layers_to_write_out++; + } + } + + if (pProperties == NULL) { + *pPropertyCount = layers_to_write_out; + goto out; + } + + uint32_t output_properties_index = 0; + for (uint32_t i = 0; i < instance_layer_list.count; i++) { + if (output_properties_index < *pPropertyCount && + (instance_layer_list.list[i].settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_ON || + instance_layer_list.list[i].settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_DEFAULT)) { + memcpy(&pProperties[output_properties_index], &instance_layer_list.list[i].info, sizeof(VkLayerProperties)); + output_properties_index++; + } + } + if (output_properties_index < layers_to_write_out) { + // Indicates that we had more elements to write but ran out of room + result = VK_INCOMPLETE; + } + + *pPropertyCount = output_properties_index; + +out: + + loader_delete_layer_list_and_properties(NULL, &instance_layer_list); + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_pre_instance_EnumerateInstanceLayerProperties( + const VkEnumerateInstanceLayerPropertiesChain *chain, uint32_t *pPropertyCount, VkLayerProperties *pProperties) { + (void)chain; + return terminator_EnumerateInstanceLayerProperties(pPropertyCount, pProperties); +} + +// ---- Vulkan Core 1.1 terminators + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceGroups( + VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties) { + struct loader_instance *inst = (struct loader_instance *)instance; + + VkResult res = VK_SUCCESS; + struct loader_icd_term *icd_term; + uint32_t total_count = 0; + uint32_t cur_icd_group_count = 0; + VkPhysicalDeviceGroupProperties **new_phys_dev_groups = NULL; + struct loader_physical_device_group_term *local_phys_dev_groups = NULL; + PFN_vkEnumeratePhysicalDeviceGroups fpEnumeratePhysicalDeviceGroups = NULL; + struct loader_icd_physical_devices *sorted_phys_dev_array = NULL; + uint32_t sorted_count = 0; + + // For each ICD, query the number of physical device groups, and then get an + // internal value for those physical devices. + icd_term = inst->icd_terms; + while (NULL != icd_term) { + cur_icd_group_count = 0; + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + if (inst->enabled_extensions.khr_device_group_creation) { + fpEnumeratePhysicalDeviceGroups = icd_term->dispatch.EnumeratePhysicalDeviceGroupsKHR; + } else { + fpEnumeratePhysicalDeviceGroups = icd_term->dispatch.EnumeratePhysicalDeviceGroups; + } + + if (NULL == fpEnumeratePhysicalDeviceGroups) { + // Treat each ICD's GPU as it's own group if the extension isn't supported + res = icd_term->dispatch.EnumeratePhysicalDevices(icd_term->instance, &cur_icd_group_count, NULL); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of \'EnumeratePhysicalDevices\' " + "to ICD %s to get plain phys dev count.", + icd_term->scanned_icd->lib_name); + continue; + } + } else { + // Query the actual group info + res = fpEnumeratePhysicalDeviceGroups(icd_term->instance, &cur_icd_group_count, NULL); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of " + "\'EnumeratePhysicalDeviceGroups\' to ICD %s to get count.", + icd_term->scanned_icd->lib_name); + continue; + } + } + total_count += cur_icd_group_count; + icd_term = icd_term->next; + } + + // If GPUs not sorted yet, look through them and generate list of all available GPUs + if (0 == total_count || 0 == inst->total_gpu_count) { + res = setup_loader_term_phys_devs(inst); + if (VK_SUCCESS != res) { + goto out; + } + } + + if (NULL != pPhysicalDeviceGroupProperties) { + // Create an array for the new physical device groups, which will be stored + // in the instance for the Terminator code. + new_phys_dev_groups = (VkPhysicalDeviceGroupProperties **)loader_instance_heap_calloc( + inst, total_count * sizeof(VkPhysicalDeviceGroupProperties *), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_dev_groups) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed to allocate new physical device group array of size %d", + total_count); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + // Create a temporary array (on the stack) to keep track of the + // returned VkPhysicalDevice values. + local_phys_dev_groups = loader_stack_alloc(sizeof(struct loader_physical_device_group_term) * total_count); + // Initialize the memory to something valid + memset(local_phys_dev_groups, 0, sizeof(struct loader_physical_device_group_term) * total_count); + +#if defined(_WIN32) + // Get the physical devices supported by platform sorting mechanism into a separate list + res = windows_read_sorted_physical_devices(inst, &sorted_count, &sorted_phys_dev_array); + if (VK_SUCCESS != res) { + goto out; + } +#endif + + cur_icd_group_count = 0; + icd_term = inst->icd_terms; + while (NULL != icd_term) { + uint32_t count_this_time = total_count - cur_icd_group_count; + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + if (inst->enabled_extensions.khr_device_group_creation) { + fpEnumeratePhysicalDeviceGroups = icd_term->dispatch.EnumeratePhysicalDeviceGroupsKHR; + } else { + fpEnumeratePhysicalDeviceGroups = icd_term->dispatch.EnumeratePhysicalDeviceGroups; + } + + if (NULL == fpEnumeratePhysicalDeviceGroups) { + icd_term->dispatch.EnumeratePhysicalDevices(icd_term->instance, &count_this_time, NULL); + + VkPhysicalDevice *phys_dev_array = loader_stack_alloc(sizeof(VkPhysicalDevice) * count_this_time); + if (NULL == phys_dev_array) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed to allocate local physical device array of size %d", + count_this_time); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + res = icd_term->dispatch.EnumeratePhysicalDevices(icd_term->instance, &count_this_time, phys_dev_array); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of " + "\'EnumeratePhysicalDevices\' to ICD %s to get plain phys dev count.", + icd_term->scanned_icd->lib_name); + goto out; + } + + // Add each GPU as it's own group + for (uint32_t indiv_gpu = 0; indiv_gpu < count_this_time; indiv_gpu++) { + uint32_t cur_index = indiv_gpu + cur_icd_group_count; + local_phys_dev_groups[cur_index].this_icd_term = icd_term; + local_phys_dev_groups[cur_index].group_props.physicalDeviceCount = 1; + local_phys_dev_groups[cur_index].group_props.physicalDevices[0] = phys_dev_array[indiv_gpu]; + } + + } else { + res = fpEnumeratePhysicalDeviceGroups(icd_term->instance, &count_this_time, NULL); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of " + "\'EnumeratePhysicalDeviceGroups\' to ICD %s to get group count.", + icd_term->scanned_icd->lib_name); + goto out; + } + if (cur_icd_group_count + count_this_time < *pPhysicalDeviceGroupCount) { + // The total amount is still less than the amount of physical device group data passed in + // by the callee. Therefore, we don't have to allocate any temporary structures and we + // can just use the data that was passed in. + res = fpEnumeratePhysicalDeviceGroups(icd_term->instance, &count_this_time, + &pPhysicalDeviceGroupProperties[cur_icd_group_count]); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of " + "\'EnumeratePhysicalDeviceGroups\' to ICD %s to get group information.", + icd_term->scanned_icd->lib_name); + goto out; + } + for (uint32_t group = 0; group < count_this_time; ++group) { + uint32_t cur_index = group + cur_icd_group_count; + local_phys_dev_groups[cur_index].group_props = pPhysicalDeviceGroupProperties[cur_index]; + local_phys_dev_groups[cur_index].this_icd_term = icd_term; + } + } else { + // There's not enough space in the callee's allocated pPhysicalDeviceGroupProperties structs, + // so we have to allocate temporary versions to collect all the data. However, we need to make + // sure that at least the ones we do query utilize any pNext data in the callee's version. + VkPhysicalDeviceGroupProperties *tmp_group_props = + loader_stack_alloc(count_this_time * sizeof(VkPhysicalDeviceGroupProperties)); + for (uint32_t group = 0; group < count_this_time; group++) { + tmp_group_props[group].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + uint32_t cur_index = group + cur_icd_group_count; + if (*pPhysicalDeviceGroupCount > cur_index) { + tmp_group_props[group].pNext = pPhysicalDeviceGroupProperties[cur_index].pNext; + } else { + tmp_group_props[group].pNext = NULL; + } + tmp_group_props[group].subsetAllocation = false; + } + + res = fpEnumeratePhysicalDeviceGroups(icd_term->instance, &count_this_time, tmp_group_props); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of " + "\'EnumeratePhysicalDeviceGroups\' to ICD %s to get group information for temp data.", + icd_term->scanned_icd->lib_name); + goto out; + } + for (uint32_t group = 0; group < count_this_time; ++group) { + uint32_t cur_index = group + cur_icd_group_count; + local_phys_dev_groups[cur_index].group_props = tmp_group_props[group]; + local_phys_dev_groups[cur_index].this_icd_term = icd_term; + } + } + if (VK_SUCCESS != res) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed during dispatch call of " + "\'EnumeratePhysicalDeviceGroups\' to ICD %s to get content.", + icd_term->scanned_icd->lib_name); + goto out; + } + } + + cur_icd_group_count += count_this_time; + icd_term = icd_term->next; + } + +#if defined(LOADER_ENABLE_LINUX_SORT) + if (is_linux_sort_enabled(inst)) { + // Get the physical devices supported by platform sorting mechanism into a separate list + res = linux_sort_physical_device_groups(inst, total_count, local_phys_dev_groups); + } +#elif defined(_WIN32) + // The Windows sorting information is only on physical devices. We need to take that and convert it to the group + // information if it's present. + if (sorted_count > 0) { + res = + windows_sort_physical_device_groups(inst, total_count, local_phys_dev_groups, sorted_count, sorted_phys_dev_array); + } +#endif // LOADER_ENABLE_LINUX_SORT + + // Just to be safe, make sure we successfully completed setup_loader_term_phys_devs above + // before attempting to do the following. By verifying that setup_loader_term_phys_devs ran + // first, it guarantees that each physical device will have a loader-specific handle. + if (NULL != inst->phys_devs_term) { + for (uint32_t group = 0; group < total_count; group++) { + for (uint32_t group_gpu = 0; group_gpu < local_phys_dev_groups[group].group_props.physicalDeviceCount; + group_gpu++) { + bool found = false; + for (uint32_t term_gpu = 0; term_gpu < inst->phys_dev_count_term; term_gpu++) { + if (local_phys_dev_groups[group].group_props.physicalDevices[group_gpu] == + inst->phys_devs_term[term_gpu]->phys_dev) { + local_phys_dev_groups[group].group_props.physicalDevices[group_gpu] = + (VkPhysicalDevice)inst->phys_devs_term[term_gpu]; + found = true; + break; + } + } + if (!found) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed to find GPU %d in group %d returned by " + "\'EnumeratePhysicalDeviceGroups\' in list returned by \'EnumeratePhysicalDevices\'", + group_gpu, group); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + } + } + } + + uint32_t idx = 0; + + // Copy or create everything to fill the new array of physical device groups + for (uint32_t group = 0; group < total_count; group++) { + // Skip groups which have been included through sorting + if (local_phys_dev_groups[group].group_props.physicalDeviceCount == 0) { + continue; + } + + // Find the VkPhysicalDeviceGroupProperties object in local_phys_dev_groups + VkPhysicalDeviceGroupProperties *group_properties = &local_phys_dev_groups[group].group_props; + + // Check if this physical device group with the same contents is already in the old buffer + for (uint32_t old_idx = 0; old_idx < inst->phys_dev_group_count_term; old_idx++) { + if (NULL != group_properties && NULL != inst->phys_dev_groups_term[old_idx] && + group_properties->physicalDeviceCount == inst->phys_dev_groups_term[old_idx]->physicalDeviceCount) { + bool found_all_gpus = true; + for (uint32_t old_gpu = 0; old_gpu < inst->phys_dev_groups_term[old_idx]->physicalDeviceCount; old_gpu++) { + bool found_gpu = false; + for (uint32_t new_gpu = 0; new_gpu < group_properties->physicalDeviceCount; new_gpu++) { + if (group_properties->physicalDevices[new_gpu] == + inst->phys_dev_groups_term[old_idx]->physicalDevices[old_gpu]) { + found_gpu = true; + break; + } + } + + if (!found_gpu) { + found_all_gpus = false; + break; + } + } + if (!found_all_gpus) { + continue; + } else { + new_phys_dev_groups[idx] = inst->phys_dev_groups_term[old_idx]; + break; + } + } + } + // If this physical device group isn't in the old buffer, create it + if (group_properties != NULL && NULL == new_phys_dev_groups[idx]) { + new_phys_dev_groups[idx] = (VkPhysicalDeviceGroupProperties *)loader_instance_heap_alloc( + inst, sizeof(VkPhysicalDeviceGroupProperties), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_phys_dev_groups[idx]) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups: Failed to allocate physical device group Terminator " + "object %d", + idx); + total_count = idx; + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + memcpy(new_phys_dev_groups[idx], group_properties, sizeof(VkPhysicalDeviceGroupProperties)); + } + + ++idx; + } + } + +out: + + if (NULL != pPhysicalDeviceGroupProperties) { + if (VK_SUCCESS != res) { + if (NULL != new_phys_dev_groups) { + // We've encountered an error, so we should free the new buffers. + for (uint32_t i = 0; i < total_count; i++) { + // If an OOM occurred inside the copying of the new physical device groups into the existing array will + // leave some of the old physical device groups in the array which may have been copied into the new array, + // leading to them being freed twice. To avoid this we just make sure to not delete physical device groups + // which were copied. + bool found = false; + if (NULL != inst->phys_devs_term) { + for (uint32_t old_idx = 0; old_idx < inst->phys_dev_group_count_term; old_idx++) { + if (new_phys_dev_groups[i] == inst->phys_dev_groups_term[old_idx]) { + found = true; + break; + } + } + } + if (!found) { + loader_instance_heap_free(inst, new_phys_dev_groups[i]); + } + } + loader_instance_heap_free(inst, new_phys_dev_groups); + } + } else { + if (NULL != inst->phys_dev_groups_term) { + // Free everything in the old array that was not copied into the new array + // here. We can't attempt to do that before here since the previous loop + // looking before the "out:" label may hit an out of memory condition resulting + // in memory leaking. + for (uint32_t i = 0; i < inst->phys_dev_group_count_term; i++) { + bool found = false; + for (uint32_t j = 0; j < total_count; j++) { + if (inst->phys_dev_groups_term[i] == new_phys_dev_groups[j]) { + found = true; + break; + } + } + if (!found) { + loader_instance_heap_free(inst, inst->phys_dev_groups_term[i]); + } + } + loader_instance_heap_free(inst, inst->phys_dev_groups_term); + } + + // Swap in the new physical device group list + inst->phys_dev_group_count_term = total_count; + inst->phys_dev_groups_term = new_phys_dev_groups; + } + + if (sorted_phys_dev_array != NULL) { + for (uint32_t i = 0; i < sorted_count; ++i) { + if (sorted_phys_dev_array[i].device_count > 0 && sorted_phys_dev_array[i].physical_devices != NULL) { + loader_instance_heap_free(inst, sorted_phys_dev_array[i].physical_devices); + } + } + loader_instance_heap_free(inst, sorted_phys_dev_array); + } + + uint32_t copy_count = inst->phys_dev_group_count_term; + if (NULL != pPhysicalDeviceGroupProperties) { + if (copy_count > *pPhysicalDeviceGroupCount) { + copy_count = *pPhysicalDeviceGroupCount; + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "terminator_EnumeratePhysicalDeviceGroups : Trimming device count from %d to %d.", + inst->phys_dev_group_count_term, copy_count); + res = VK_INCOMPLETE; + } + + for (uint32_t i = 0; i < copy_count; i++) { + memcpy(&pPhysicalDeviceGroupProperties[i], inst->phys_dev_groups_term[i], sizeof(VkPhysicalDeviceGroupProperties)); + } + } + + *pPhysicalDeviceGroupCount = copy_count; + + } else { + *pPhysicalDeviceGroupCount = total_count; + } + return res; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader.h b/local/recipes/libs/vulkan-loader/source/loader/loader.h new file mode 100644 index 0000000000..a5527b9645 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader.h @@ -0,0 +1,233 @@ +/* + * + * Copyright (c) 2014-2023 The Khronos Group Inc. + * Copyright (c) 2014-2023 Valve Corporation + * Copyright (c) 2014-2023 LunarG, Inc. + * 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#pragma once + +#include "loader_common.h" +#include "cJSON.h" + +// Declare the once_init variable +LOADER_PLATFORM_THREAD_ONCE_EXTERN_DEFINITION(once_init) + +static inline VkPhysicalDevice loader_unwrap_physical_device(VkPhysicalDevice physicalDevice) { + struct loader_physical_device_tramp *phys_dev = (struct loader_physical_device_tramp *)physicalDevice; + if (PHYS_TRAMP_MAGIC_NUMBER != phys_dev->magic) { + return VK_NULL_HANDLE; + } + return phys_dev->phys_dev; +} + +static inline void loader_set_dispatch(void *obj, const void *data) { *((const void **)obj) = data; } + +static inline VkLayerDispatchTable *loader_get_dispatch(const void *obj) { + if (VK_NULL_HANDLE == obj) { + return NULL; + } + VkLayerDispatchTable *disp = *((VkLayerDispatchTable **)obj); + if (VK_NULL_HANDLE == disp || DEVICE_DISP_TABLE_MAGIC_NUMBER != disp->magic) { + return NULL; + } + return disp; +} + +static inline struct loader_dev_dispatch_table *loader_get_dev_dispatch(const void *obj) { + return *((struct loader_dev_dispatch_table **)obj); +} + +static inline VkLayerInstanceDispatchTable *loader_get_instance_layer_dispatch(const void *obj) { + return *((VkLayerInstanceDispatchTable **)obj); +} + +static inline struct loader_instance_dispatch_table *loader_get_instance_dispatch(const void *obj) { + return *((struct loader_instance_dispatch_table **)obj); +} + +static inline void loader_init_dispatch(void *obj, const void *data) { +#if defined(DEBUG) + assert(valid_loader_magic_value(obj) && + "Incompatible ICD, first dword must be initialized to " + "ICD_LOADER_MAGIC. See loader/README.md for details."); +#endif + + loader_set_dispatch(obj, data); +} + +// Global variables used across files +extern struct loader_struct loader; +extern loader_platform_thread_mutex loader_lock; +extern loader_platform_thread_mutex loader_preload_icd_lock; +extern loader_platform_thread_mutex loader_global_instance_list_lock; + +bool compare_vk_extension_properties(const VkExtensionProperties *op1, const VkExtensionProperties *op2); + +VkResult loader_validate_layers(const struct loader_instance *inst, const uint32_t layer_count, + const char *const *ppEnabledLayerNames, const struct loader_layer_list *list); + +VkResult loader_validate_instance_extensions(struct loader_instance *inst, const struct loader_extension_list *icd_exts, + const struct loader_layer_list *instance_layer, + const struct loader_envvar_all_filters *layer_filters, + const VkInstanceCreateInfo *pCreateInfo); + +#if defined(_WIN32) +BOOL __stdcall loader_initialize(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context); +#else +void loader_initialize(void); +#endif +void loader_release(void); +void loader_preload_icds(void); +void loader_unload_preloaded_icds(void); +VkResult loader_init_library_list(struct loader_layer_list *instance_layers, loader_platform_dl_handle **libs); + +// Allocate a new string able to hold source_str and place it in dest_str +VkResult loader_copy_to_new_str(const struct loader_instance *inst, const char *source_str, char **dest_str); + +// Allocate a loader_string_list with enough space for allocated_count strings inside of it +VkResult create_string_list(const struct loader_instance *inst, uint32_t allocated_count, struct loader_string_list *string_list); +// Resize if there isn't enough space, then add the string str to the end of the loader_string_list +// This function takes ownership of the str passed in - but only when it succeeds +VkResult append_str_to_string_list(const struct loader_instance *inst, struct loader_string_list *string_list, char *str); +// Resize if there isn't enough space, then copy the string str to a new string the end of the loader_string_list +// This function does not take ownership of the string, it merely copies it. +// This function appends a null terminator to the string automatically +// The str_len parameter does not include the null terminator +VkResult copy_str_to_string_list(const struct loader_instance *inst, struct loader_string_list *string_list, const char *str, + size_t str_len); + +// Free any string inside of loader_string_list and then free the list itself +void free_string_list(const struct loader_instance *inst, struct loader_string_list *string_list); + +VkResult loader_init_generic_list(const struct loader_instance *inst, struct loader_generic_list *list_info, size_t element_size); +VkResult loader_resize_generic_list(const struct loader_instance *inst, struct loader_generic_list *list_info); +VkResult loader_get_next_available_entry(const struct loader_instance *inst, struct loader_used_object_list *list_info, + uint32_t *free_index, const VkAllocationCallbacks *pAllocator); +void loader_release_object_from_list(struct loader_used_object_list *list_info, uint32_t index_to_free); +bool has_vk_extension_property_array(const VkExtensionProperties *vk_ext_prop, const uint32_t count, + const VkExtensionProperties *ext_array); +bool has_vk_extension_property(const VkExtensionProperties *vk_ext_prop, const struct loader_extension_list *ext_list); +// This function takes ownership of layer_property in the case that allocation fails +VkResult loader_append_layer_property(const struct loader_instance *inst, struct loader_layer_list *layer_list, + struct loader_layer_properties *layer_property); +VkResult loader_add_layer_properties(const struct loader_instance *inst, struct loader_layer_list *layer_instance_list, cJSON *json, + bool is_implicit, char *filename); +bool loader_find_layer_name_in_list(const char *name, const struct loader_pointer_layer_list *layer_list); +VkResult loader_add_layer_properties_to_list(const struct loader_instance *inst, struct loader_pointer_layer_list *list, + struct loader_layer_properties *props); +void loader_free_layer_properties(const struct loader_instance *inst, struct loader_layer_properties *layer_properties); +bool loader_implicit_layer_is_enabled(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + const struct loader_layer_properties *prop); +VkResult loader_add_meta_layer(const struct loader_instance *inst, const struct loader_envvar_all_filters *filters, + struct loader_layer_properties *prop, struct loader_pointer_layer_list *target_list, + struct loader_pointer_layer_list *expanded_target_list, const struct loader_layer_list *source_list, + bool *out_found_all_component_layers); +VkResult loader_add_to_ext_list(const struct loader_instance *inst, struct loader_extension_list *ext_list, + uint32_t prop_list_count, const VkExtensionProperties *props); +VkResult loader_add_device_extensions(const struct loader_instance *inst, + PFN_vkEnumerateDeviceExtensionProperties fpEnumerateDeviceExtensionProperties, + VkPhysicalDevice physical_device, const char *lib_name, + struct loader_extension_list *ext_list); +VkResult loader_init_generic_list(const struct loader_instance *inst, struct loader_generic_list *list_info, size_t element_size); +void loader_destroy_generic_list(const struct loader_instance *inst, struct loader_generic_list *list); +void loader_destroy_pointer_layer_list(const struct loader_instance *inst, struct loader_pointer_layer_list *layer_list); +TEST_FUNCTION_EXPORT void loader_delete_layer_list_and_properties(const struct loader_instance *inst, + struct loader_layer_list *layer_list); +void loader_remove_layer_in_list(const struct loader_instance *inst, struct loader_layer_list *layer_list, + uint32_t layer_to_remove); +VkResult loader_init_scanned_icd_list(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list); +void loader_clear_scanned_icd_list(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list); +VkResult loader_icd_scan(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list, + const VkInstanceCreateInfo *pCreateInfo, bool *skipped_portability_drivers); +void loader_icd_close_objects(struct loader_instance *ptr_inst, struct loader_icd_term *icd_term); +void loader_icd_destroy(struct loader_instance *ptr_inst, struct loader_icd_term *icd_term, + const VkAllocationCallbacks *pAllocator); +VkResult loader_scan_for_layers(struct loader_instance *inst, struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *layer_filters); +VkResult loader_scan_for_implicit_layers(struct loader_instance *inst, struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *layer_filters); +VkResult loader_get_icd_loader_instance_extensions(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list, + struct loader_extension_list *inst_exts); +struct loader_icd_term *loader_get_icd_and_device(const void *device, struct loader_device **found_dev); +struct loader_instance *loader_get_instance(const VkInstance instance); +loader_platform_dl_handle loader_open_layer_file(const struct loader_instance *inst, struct loader_layer_properties *prop); +struct loader_device *loader_create_logical_device(const struct loader_instance *inst, const VkAllocationCallbacks *pAllocator); +void loader_add_logical_device(struct loader_icd_term *icd_term, struct loader_device *found_dev); +void loader_remove_logical_device(struct loader_icd_term *icd_term, struct loader_device *found_dev, + const VkAllocationCallbacks *pAllocator); +// NOTE: Outside of loader, this entry-point is only provided for error +// cleanup. +void loader_destroy_logical_device(struct loader_device *dev, const VkAllocationCallbacks *pAllocator); + +VkResult loader_enable_instance_layers(struct loader_instance *inst, const VkInstanceCreateInfo *pCreateInfo, + const struct loader_layer_list *instance_layers, + const struct loader_envvar_all_filters *layer_filters); + +VkResult loader_create_instance_chain(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, + struct loader_instance *inst, VkInstance *created_instance); + +void loader_activate_instance_layer_extensions(struct loader_instance *inst, VkInstance created_inst); + +VKAPI_ATTR VkResult VKAPI_CALL loader_layer_create_device(VkInstance instance, VkPhysicalDevice physicalDevice, + const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, + PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA); +VKAPI_ATTR void VKAPI_CALL loader_layer_destroy_device(VkDevice device, const VkAllocationCallbacks *pAllocator, + PFN_vkDestroyDevice destroyFunction); + +VkResult loader_create_device_chain(const VkPhysicalDevice pd, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, const struct loader_instance *inst, + struct loader_device *dev, PFN_vkGetInstanceProcAddr callingLayer, + PFN_vkGetDeviceProcAddr *layerNextGDPA); + +VkResult loader_validate_device_extensions(struct loader_instance *this_instance, + const struct loader_pointer_layer_list *activated_device_layers, + const struct loader_extension_list *icd_exts, const VkDeviceCreateInfo *pCreateInfo); + +VkResult setup_loader_tramp_phys_devs(struct loader_instance *inst, uint32_t phys_dev_count, VkPhysicalDevice *phys_devs); +VkResult setup_loader_tramp_phys_dev_groups(struct loader_instance *inst, uint32_t group_count, + VkPhysicalDeviceGroupProperties *groups); +void unload_drivers_without_physical_devices(struct loader_instance *inst); + +VkStringErrorFlags vk_string_validate(const int max_length, const char *char_array); +char *loader_get_next_path(char *path); +VkResult add_data_files(const struct loader_instance *inst, char *search_path, struct loader_string_list *out_files, + bool use_first_found_manifest); + +loader_api_version loader_make_version(uint32_t version); +loader_api_version loader_combine_version(uint32_t major, uint32_t minor, uint32_t patch); + +// Helper macros for determining if a version is valid or not +bool loader_check_version_meets_required(loader_api_version required, loader_api_version version); + +// Convenience macros for common versions +#if !defined(LOADER_VERSION_1_0_0) +#define LOADER_VERSION_1_0_0 loader_combine_version(1, 0, 0) +#endif + +#if !defined(LOADER_VERSION_1_1_0) +#define LOADER_VERSION_1_1_0 loader_combine_version(1, 1, 0) +#endif diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader.rc b/local/recipes/libs/vulkan-loader/source/loader/loader.rc new file mode 100644 index 0000000000..242a54f797 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader.rc @@ -0,0 +1,59 @@ +// +// Copyright (c) 2014-2025 The Khronos Group Inc. +// Copyright (c) 2014-2025 Valve Corporation +// Copyright (c) 2014-2025 LunarG, 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. +// +// Author: David Pinedo +// Author: Charles Giessen +// + +#include "winres.h" + +// All set through CMake +#define VER_FILE_VERSION 1, 4, 321, 0 +#define VER_FILE_DESCRIPTION_STR "1.4.321.Dev Build" +#define VER_FILE_VERSION_STR "Vulkan Loader - Dev Build" +#define VER_COPYRIGHT_STR "Copyright (C) 2015-2025" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VER_FILE_VERSION + PRODUCTVERSION VER_FILE_VERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + + FILEOS 0x00000L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "04090000" + BEGIN + VALUE "FileDescription", VER_FILE_DESCRIPTION_STR + VALUE "FileVersion", VER_FILE_VERSION_STR + VALUE "LegalCopyright", VER_COPYRIGHT_STR + VALUE "ProductName", "Vulkan Runtime" + VALUE "ProductVersion", VER_FILE_VERSION_STR + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0000 + END +END diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader.rc.in b/local/recipes/libs/vulkan-loader/source/loader/loader.rc.in new file mode 100644 index 0000000000..0dc4227da2 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader.rc.in @@ -0,0 +1,59 @@ +// +// Copyright (c) 2014-${LOADER_CUR_COPYRIGHT_YEAR} The Khronos Group Inc. +// Copyright (c) 2014-${LOADER_CUR_COPYRIGHT_YEAR} Valve Corporation +// Copyright (c) 2014-${LOADER_CUR_COPYRIGHT_YEAR} LunarG, 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. +// +// Author: David Pinedo +// Author: Charles Giessen +// + +#include "winres.h" + +// All set through CMake +#define VER_FILE_VERSION ${LOADER_VER_FILE_VERSION} +#define VER_FILE_DESCRIPTION_STR ${LOADER_VER_FILE_DESCRIPTION_STR} +#define VER_FILE_VERSION_STR ${LOADER_VER_FILE_VERSION_STR} +#define VER_COPYRIGHT_STR "Copyright (C) 2015-${LOADER_CUR_COPYRIGHT_YEAR}" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VER_FILE_VERSION + PRODUCTVERSION VER_FILE_VERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + + FILEOS 0x00000L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "04090000" + BEGIN + VALUE "FileDescription", VER_FILE_DESCRIPTION_STR + VALUE "FileVersion", VER_FILE_VERSION_STR + VALUE "LegalCopyright", VER_COPYRIGHT_STR + VALUE "ProductName", "Vulkan Runtime" + VALUE "ProductVersion", VER_FILE_VERSION_STR + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0000 + END +END diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_common.h b/local/recipes/libs/vulkan-loader/source/loader/loader_common.h new file mode 100644 index 0000000000..865c2ccee3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_common.h @@ -0,0 +1,523 @@ +/* + * + * Copyright (c) 2014-2022 The Khronos Group Inc. + * Copyright (c) 2014-2022 Valve Corporation + * Copyright (c) 2014-2022 LunarG, Inc. + * 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#pragma once + +#include "vulkan/vk_platform.h" +#include +#include +#include + +#include "vk_loader_platform.h" +#include "vk_loader_layer.h" +#include "vk_layer_dispatch_table.h" +#include "vk_loader_extensions.h" + +#include "settings.h" + +typedef enum VkStringErrorFlagBits { + VK_STRING_ERROR_NONE = 0x00000000, + VK_STRING_ERROR_LENGTH = 0x00000001, + VK_STRING_ERROR_BAD_DATA = 0x00000002, + VK_STRING_ERROR_NULL_PTR = 0x00000004, +} VkStringErrorFlagBits; +typedef VkFlags VkStringErrorFlags; + +static const int MaxLoaderStringLength = 256; // 0xFF; +static const unsigned char UTF8_ONE_BYTE_CODE = 192; // 0xC0; +static const unsigned char UTF8_ONE_BYTE_MASK = 224; // 0xE0; +static const unsigned char UTF8_TWO_BYTE_CODE = 224; // 0xE0; +static const unsigned char UTF8_TWO_BYTE_MASK = 240; // 0xF0; +static const unsigned char UTF8_THREE_BYTE_CODE = 240; // 0xF0; +static const unsigned char UTF8_THREE_BYTE_MASK = 248; // 0xF8; +static const unsigned char UTF8_DATA_BYTE_CODE = 128; // 0x80; +static const unsigned char UTF8_DATA_BYTE_MASK = 192; // 0xC0; + +// form of all dynamic lists/arrays +// only the list element should be changed +struct loader_generic_list { + size_t capacity; + uint32_t count; + void *list; +}; + +struct loader_string_list { + uint32_t allocated_count; + uint32_t count; + char **list; +}; + +struct loader_extension_list { + size_t capacity; + uint32_t count; + VkExtensionProperties *list; +}; + +struct loader_dev_ext_props { + VkExtensionProperties props; + struct loader_string_list entrypoints; +}; + +struct loader_device_extension_list { + size_t capacity; + uint32_t count; + struct loader_dev_ext_props *list; +}; + +struct loader_used_object_status { + VkBool32 status; + VkAllocationCallbacks allocation_callbacks; +}; + +struct loader_used_object_list { + size_t capacity; + uint32_t padding; // count variable isn't used + struct loader_used_object_status *list; +}; + +struct loader_surface_allocation { + VkSurfaceKHR surface; + VkAllocationCallbacks allocation_callbacks; +}; + +struct loader_surface_list { + size_t capacity; + uint32_t padding; // count variable isn't used + VkSurfaceKHR *list; +}; + +struct loader_debug_utils_messenger_list { + size_t capacity; + uint32_t padding; // count variable isn't used + VkDebugUtilsMessengerEXT *list; +}; + +struct loader_debug_report_callback_list { + size_t capacity; + uint32_t padding; // count variable isn't used + VkDebugReportCallbackEXT *list; +}; + +struct loader_name_value { + char *name; + char *value; +}; + +struct loader_layer_functions { + char *str_gipa; + char *str_gdpa; + char *str_negotiate_interface; + PFN_vkNegotiateLoaderLayerInterfaceVersion negotiate_layer_interface; + PFN_vkGetInstanceProcAddr get_instance_proc_addr; + PFN_vkGetDeviceProcAddr get_device_proc_addr; + PFN_GetPhysicalDeviceProcAddr get_physical_device_proc_addr; +}; + +// This structure is used to store the json file version in a more manageable way. +typedef struct { + uint16_t major; + uint16_t minor; + uint16_t patch; +} loader_api_version; + +// Enumeration used to clearly identify reason for library load failure. +enum loader_layer_library_status { + LOADER_LAYER_LIB_NOT_LOADED = 0, + + LOADER_LAYER_LIB_SUCCESS_LOADED = 1, + + LOADER_LAYER_LIB_ERROR_WRONG_BIT_TYPE = 20, + LOADER_LAYER_LIB_ERROR_FAILED_TO_LOAD = 21, + LOADER_LAYER_LIB_ERROR_OUT_OF_MEMORY = 22, +}; + +enum layer_type_flags { + VK_LAYER_TYPE_FLAG_INSTANCE_LAYER = 0x1, // If not set, indicates Device layer + VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER = 0x2, // If not set, indicates Implicit layer + VK_LAYER_TYPE_FLAG_META_LAYER = 0x4, // If not set, indicates standard layer +}; + +enum loader_layer_enabled_by_what { + ENABLED_BY_WHAT_UNSET, // default value indicates this field hasn't been filled in + ENABLED_BY_WHAT_LOADER_SETTINGS_FILE, + ENABLED_BY_WHAT_IMPLICIT_LAYER, + ENABLED_BY_WHAT_VK_INSTANCE_LAYERS, + ENABLED_BY_WHAT_VK_LOADER_LAYERS_ENABLE, + ENABLED_BY_WHAT_IN_APPLICATION_API, + ENABLED_BY_WHAT_META_LAYER, +}; + +struct loader_layer_properties { + VkLayerProperties info; + enum layer_type_flags type_flags; + enum loader_settings_layer_control settings_control_value; + + uint32_t interface_version; // PFN_vkNegotiateLoaderLayerInterfaceVersion + char *manifest_file_name; + char *lib_name; + enum loader_layer_library_status lib_status; + enum loader_layer_enabled_by_what enabled_by_what; + loader_platform_dl_handle lib_handle; + struct loader_layer_functions functions; + struct loader_extension_list instance_extension_list; + struct loader_device_extension_list device_extension_list; + struct loader_name_value disable_env_var; + struct loader_name_value enable_env_var; + struct loader_string_list component_layer_names; + struct { + char *enumerate_instance_extension_properties; + char *enumerate_instance_layer_properties; + char *enumerate_instance_version; + } pre_instance_functions; + struct loader_string_list override_paths; + bool is_override; + bool keep; + struct loader_string_list blacklist_layer_names; + struct loader_string_list app_key_paths; +}; + +// Stores a list of loader_layer_properties +struct loader_layer_list { + size_t capacity; + uint32_t count; + struct loader_layer_properties *list; +}; + +// Stores a list of pointers to loader_layer_properties +// Used for app_activated_layer_list and expanded_activated_layer_list +struct loader_pointer_layer_list { + size_t capacity; + uint32_t count; + struct loader_layer_properties **list; +}; + +typedef VkResult(VKAPI_PTR *PFN_vkDevExt)(VkDevice device); + +struct loader_dev_dispatch_table { + VkLayerDispatchTable core_dispatch; + PFN_vkDevExt ext_dispatch[MAX_NUM_UNKNOWN_EXTS]; + struct loader_device_terminator_dispatch extension_terminator_dispatch; +}; + +// per CreateDevice structure +struct loader_device { + struct loader_dev_dispatch_table loader_dispatch; + VkDevice chain_device; // device object from the dispatch chain + VkDevice icd_device; // device object from the icd + struct loader_physical_device_term *phys_dev_term; + + VkAllocationCallbacks alloc_callbacks; + + // List of activated device extensions that layers support (but not necessarily the driver which have functions that require + // trampolines to work correctly. EX - vkDebugMarkerSetObjectNameEXT can name wrapped handles like instance, physical device, + // or surface + struct { + bool ext_debug_marker_enabled; + bool ext_debug_utils_enabled; + } layer_extensions; + + // List of activated device extensions that have terminators implemented in the loader + struct { + bool khr_swapchain_enabled; + bool khr_display_swapchain_enabled; + bool khr_device_group_enabled; + bool ext_debug_marker_enabled; + bool ext_debug_utils_enabled; + bool ext_full_screen_exclusive_enabled; + bool version_1_1_enabled; + bool version_1_2_enabled; + bool version_1_3_enabled; + } driver_extensions; + + struct loader_device *next; + + // Makes vkGetDeviceProcAddr check if core functions are supported by the current app_api_version. + // Only set to true if VK_KHR_maintenance5 is enabled. + bool should_ignore_device_commands_from_newer_version; +}; + +// Per ICD information + +// Per ICD structure +struct loader_icd_term { + // pointers to find other structs + const struct loader_scanned_icd *scanned_icd; + const struct loader_instance *this_instance; + struct loader_device *logical_device_list; + VkInstance instance; // instance object from the icd + struct loader_icd_term_dispatch dispatch; + + struct loader_icd_term *next; + + PFN_PhysDevExt phys_dev_ext[MAX_NUM_UNKNOWN_EXTS]; + + struct loader_instance_extension_enable_list enabled_instance_extensions; + + uint32_t physical_device_count; + + struct loader_surface_list surface_list; + struct loader_debug_utils_messenger_list debug_utils_messenger_list; + struct loader_debug_report_callback_list debug_report_callback_list; +}; + +// Per ICD library structure +struct loader_icd_tramp_list { + size_t capacity; + uint32_t count; + struct loader_scanned_icd *scanned_list; +}; + +struct loader_instance_dispatch_table { + VkLayerInstanceDispatchTable layer_inst_disp; // must be first entry in structure + + // Physical device functions unknown to the loader + PFN_PhysDevExt phys_dev_ext[MAX_NUM_UNKNOWN_EXTS]; +}; + +// Unique magic number identifier for the loader. +#define LOADER_MAGIC_NUMBER 0x10ADED010110ADEDUL + +// Per instance structure +struct loader_instance { + struct loader_instance_dispatch_table *disp; // must be first entry in structure + uint64_t magic; // Should be LOADER_MAGIC_NUMBER + + // Store all the terminators for instance functions in case a layer queries one *after* vkCreateInstance + VkLayerInstanceDispatchTable terminator_dispatch; + + // Vulkan API version the app is intending to use. + loader_api_version app_api_version; + + // We need to manually track physical devices over time. If the user + // re-queries the information, we don't want to delete old data or + // create new data unless necessary. + uint32_t total_gpu_count; + uint32_t phys_dev_count_term; + struct loader_physical_device_term **phys_devs_term; + uint32_t phys_dev_count_tramp; + struct loader_physical_device_tramp **phys_devs_tramp; + + // We also need to manually track physical device groups, but we don't need + // loader specific structures since we have that content in the physical + // device stored internal to the public structures. + uint32_t phys_dev_group_count_term; + struct VkPhysicalDeviceGroupProperties **phys_dev_groups_term; + + struct loader_instance *next; + + uint32_t icd_terms_count; + struct loader_icd_term *icd_terms; + struct loader_icd_tramp_list icd_tramp_list; + + // Must store the strings inside loader_instance directly - since the asm code will offset into + // loader_instance to get the function name + uint32_t dev_ext_disp_function_count; + char *dev_ext_disp_functions[MAX_NUM_UNKNOWN_EXTS]; + uint32_t phys_dev_ext_disp_function_count; + char *phys_dev_ext_disp_functions[MAX_NUM_UNKNOWN_EXTS]; + + struct loader_msg_callback_map_entry *icd_msg_callback_map; + + struct loader_string_list enabled_layer_names; + + struct loader_layer_list instance_layer_list; + bool override_layer_present; + + // List of activated layers. + // app_ is the version based on exactly what the application asked for. + // This is what must be returned to the application on Enumerate calls. + // expanded_ is the version based on expanding meta-layers into their + // individual component layers. This is what is used internally. + struct loader_pointer_layer_list app_activated_layer_list; + struct loader_pointer_layer_list expanded_activated_layer_list; + + VkInstance instance; // layers/ICD instance returned to trampoline + + struct loader_extension_list ext_list; // icds and loaders extensions + struct loader_instance_extension_enable_list enabled_extensions; + + // Indicates which indices in the array are in-use and which are free to be reused + struct loader_used_object_list surfaces_list; + struct loader_used_object_list debug_utils_messengers_list; + struct loader_used_object_list debug_report_callbacks_list; + + // Stores debug callbacks - used in the log. + VkLayerDbgFunctionNode *current_dbg_function_head; // Current head + VkLayerDbgFunctionNode *instance_only_dbg_function_head; // Only used for instance create/destroy + + VkAllocationCallbacks alloc_callbacks; + + // Set to true after vkCreateInstance has returned - necessary for loader_gpa_instance_terminator() + bool instance_finished_creation; + + loader_settings settings; + + bool portability_enumeration_enabled; + + bool create_terminator_invalid_extension; + bool supports_get_dev_prop_2; +}; + +// VkPhysicalDevice requires special treatment by loader. Firstly, terminator +// code must be able to get the struct loader_icd_term to call into the proper +// driver (multiple ICD/gpu case). This can be accomplished by wrapping the +// created VkPhysicalDevice in loader terminate_EnumeratePhysicalDevices(). +// Secondly, the loader must be able to handle wrapped by layer VkPhysicalDevice +// in trampoline code. This implies, that the loader trampoline code must also +// wrap the VkPhysicalDevice object in trampoline code. Thus, loader has to +// wrap the VkPhysicalDevice created object twice. In trampoline code it can't +// rely on the terminator object wrapping since a layer may also wrap. Since +// trampoline code wraps the VkPhysicalDevice this means all loader trampoline +// code that passes a VkPhysicalDevice should unwrap it. + +// Unique identifier for physical devices +#define PHYS_TRAMP_MAGIC_NUMBER 0x10ADED020210ADEDUL + +// Per enumerated PhysicalDevice structure, used to wrap in trampoline code and +// also same structure used to wrap in terminator code +struct loader_physical_device_tramp { + struct loader_instance_dispatch_table *disp; // must be first entry in structure + struct loader_instance *this_instance; + uint64_t magic; // Should be PHYS_TRAMP_MAGIC_NUMBER + VkPhysicalDevice phys_dev; // object from layers/loader terminator +}; + +// Per enumerated PhysicalDevice structure, used to wrap in terminator code +struct loader_physical_device_term { + struct loader_instance_dispatch_table *disp; // must be first entry in structure + struct loader_icd_term *this_icd_term; + VkPhysicalDevice phys_dev; // object from ICD +}; + +#if defined(LOADER_ENABLE_LINUX_SORT) +// Structure for storing the relevant device information for selecting a device. +// NOTE: Needs to be defined here so we can store this content in the term structure +// for quicker sorting. +struct LinuxSortedDeviceInfo { + // Associated Vulkan Physical Device + VkPhysicalDevice physical_device; + bool default_device; + + // Loader specific items about the driver providing support for this physical device + struct loader_icd_term *icd_term; + + // Some generic device properties + VkPhysicalDeviceType device_type; + char device_name[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; + uint32_t vendor_id; + uint32_t device_id; + + // PCI information on this device + bool has_pci_bus_info; + uint32_t pci_domain; + uint32_t pci_bus; + uint32_t pci_device; + uint32_t pci_function; +}; +#endif // LOADER_ENABLE_LINUX_SORT + +// Per enumerated PhysicalDeviceGroup structure, used to wrap in terminator code +struct loader_physical_device_group_term { + struct loader_icd_term *this_icd_term; + VkPhysicalDeviceGroupProperties group_props; +#if defined(LOADER_ENABLE_LINUX_SORT) + struct LinuxSortedDeviceInfo internal_device_info[VK_MAX_DEVICE_GROUP_SIZE]; +#endif // LOADER_ENABLE_LINUX_SORT +}; + +struct loader_struct { + struct loader_instance *instances; +}; + +struct loader_scanned_icd { + char *lib_name; + loader_platform_dl_handle handle; + uint32_t api_version; + uint32_t interface_version; + PFN_vkGetInstanceProcAddr GetInstanceProcAddr; + PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr; + PFN_vkCreateInstance CreateInstance; + PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vk_icdEnumerateAdapterPhysicalDevices EnumerateAdapterPhysicalDevices; +#endif +}; + +enum loader_data_files_type { + LOADER_DATA_FILE_MANIFEST_DRIVER = 0, + LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER, + LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER, + LOADER_DATA_FILE_NUM_TYPES // Not a real field, used for possible loop terminator +}; + +struct loader_icd_physical_devices { + uint32_t device_count; + VkPhysicalDevice *physical_devices; + struct loader_icd_term *icd_term; +#if defined(WIN32) + LUID windows_adapter_luid; +#endif +}; + +struct loader_msg_callback_map_entry { + VkDebugReportCallbackEXT icd_obj; + VkDebugReportCallbackEXT loader_obj; +}; + +typedef enum loader_filter_string_type { + FILTER_STRING_FULLNAME = 0, + FILTER_STRING_SUBSTRING, + FILTER_STRING_PREFIX, + FILTER_STRING_SUFFIX, + FILTER_STRING_SPECIAL, +} loader_filter_string_type; + +struct loader_envvar_filter_value { + char value[VK_MAX_EXTENSION_NAME_SIZE]; + size_t length; + loader_filter_string_type type; +}; + +#define MAX_ADDITIONAL_FILTERS 16 +struct loader_envvar_filter { + uint32_t count; + struct loader_envvar_filter_value filters[MAX_ADDITIONAL_FILTERS]; +}; +struct loader_envvar_disable_layers_filter { + struct loader_envvar_filter additional_filters; + bool disable_all; + bool disable_all_implicit; + bool disable_all_explicit; +}; + +struct loader_envvar_all_filters { + struct loader_envvar_filter enable_filter; + struct loader_envvar_disable_layers_filter disable_filter; + struct loader_envvar_filter allow_filter; +}; diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_environment.c b/local/recipes/libs/vulkan-loader/source/loader/loader_environment.c new file mode 100644 index 0000000000..6489efac81 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_environment.c @@ -0,0 +1,568 @@ +/* + * + * Copyright (c) 2014-2023 The Khronos Group Inc. + * Copyright (c) 2014-2023 Valve Corporation + * Copyright (c) 2014-2023 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#include "loader_environment.h" + +#include "allocation.h" +#include "loader.h" +#include "log.h" +#include "stack_allocation.h" + +#include + +// Environment variables +#if COMMON_UNIX_PLATFORMS + +bool is_high_integrity(void) { return geteuid() != getuid() || getegid() != getgid(); } + +char *loader_getenv(const char *name, const struct loader_instance *inst) { + if (NULL == name) return NULL; + // No allocation of memory necessary for Linux, but we should at least touch + // the inst pointer to get rid of compiler warnings. + (void)inst; + return getenv(name); +} + +char *loader_secure_getenv(const char *name, const struct loader_instance *inst) { +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) + // Apple does not appear to have a secure getenv implementation. + // The main difference between secure getenv and getenv is that secure getenv + // returns NULL if the process is being run with elevated privileges by a normal user. + // The idea is to prevent the reading of malicious environment variables by a process + // that can do damage. + // This algorithm is derived from glibc code that sets an internal + // variable (__libc_enable_secure) if the process is running under setuid or setgid. + return is_high_integrity() ? NULL : loader_getenv(name, inst); +#elif defined(__Fuchsia__) + return loader_getenv(name, inst); +#else + // Linux + char *out; +#if defined(HAVE_SECURE_GETENV) && !defined(LOADER_USE_UNSAFE_FILE_SEARCH) + (void)inst; + out = secure_getenv(name); +#elif defined(HAVE___SECURE_GETENV) && !defined(LOADER_USE_UNSAFE_FILE_SEARCH) + (void)inst; + out = __secure_getenv(name); +#else + out = loader_getenv(name, inst); +#if !defined(LOADER_USE_UNSAFE_FILE_SEARCH) + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, "Loader is using non-secure environment variable lookup for %s", name); +#endif +#endif + return out; +#endif +} + +void loader_free_getenv(char *val, const struct loader_instance *inst) { + // No freeing of memory necessary for Linux, but we should at least touch + // the val and inst pointers to get rid of compiler warnings. + (void)val; + (void)inst; +} + +#elif defined(WIN32) + +bool is_high_integrity() { + HANDLE process_token; + if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_QUERY_SOURCE, &process_token)) { + // Maximum possible size of SID_AND_ATTRIBUTES is maximum size of a SID + size of attributes DWORD. + uint8_t mandatory_label_buffer[SECURITY_MAX_SID_SIZE + sizeof(DWORD)]; + DWORD buffer_size; + if (GetTokenInformation(process_token, TokenIntegrityLevel, mandatory_label_buffer, sizeof(mandatory_label_buffer), + &buffer_size) != 0) { + const TOKEN_MANDATORY_LABEL *mandatory_label = (const TOKEN_MANDATORY_LABEL *)mandatory_label_buffer; + const DWORD sub_authority_count = *GetSidSubAuthorityCount(mandatory_label->Label.Sid); + const DWORD integrity_level = *GetSidSubAuthority(mandatory_label->Label.Sid, sub_authority_count - 1); + + CloseHandle(process_token); + return integrity_level >= SECURITY_MANDATORY_HIGH_RID; + } + + CloseHandle(process_token); + } + + return false; +} + +char *loader_getenv(const char *name, const struct loader_instance *inst) { + int name_utf16_size = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); + if (name_utf16_size <= 0) { + return NULL; + } + wchar_t *name_utf16 = (wchar_t *)loader_stack_alloc(name_utf16_size * sizeof(wchar_t)); + if (MultiByteToWideChar(CP_UTF8, 0, name, -1, name_utf16, name_utf16_size) != name_utf16_size) { + return NULL; + } + + DWORD val_size = GetEnvironmentVariableW(name_utf16, NULL, 0); + // val_size DOES include the null terminator, so for any set variable + // will always be at least 1. If it's 0, the variable wasn't set. + if (val_size == 0) { + return NULL; + } + + wchar_t *val = (wchar_t *)loader_stack_alloc(val_size * sizeof(wchar_t)); + if (GetEnvironmentVariableW(name_utf16, val, val_size) != val_size - 1) { + return NULL; + } + + int val_utf8_size = WideCharToMultiByte(CP_UTF8, 0, val, -1, NULL, 0, NULL, NULL); + if (val_utf8_size <= 0) { + return NULL; + } + char *val_utf8 = (char *)loader_instance_heap_alloc(inst, val_utf8_size * sizeof(char), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (val_utf8 == NULL) { + return NULL; + } + if (WideCharToMultiByte(CP_UTF8, 0, val, -1, val_utf8, val_utf8_size, NULL, NULL) != val_utf8_size) { + loader_instance_heap_free(inst, val_utf8); + return NULL; + } + return val_utf8; +} + +char *loader_secure_getenv(const char *name, const struct loader_instance *inst) { + if (NULL == name) return NULL; +#if !defined(LOADER_USE_UNSAFE_FILE_SEARCH) + if (is_high_integrity()) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "Loader is running with elevated permissions. Environment variable %s will be ignored", name); + return NULL; + } +#endif + + return loader_getenv(name, inst); +} + +void loader_free_getenv(char *val, const struct loader_instance *inst) { loader_instance_heap_free(inst, (void *)val); } + +#else + +#warning \ + "This platform does not support environment variables! If this is not intended, please implement the stubs functions loader_getenv and loader_free_getenv" + +char *loader_getenv(const char *name, const struct loader_instance *inst) { + // stub func + (void)inst; + (void)name; + return NULL; +} +void loader_free_getenv(char *val, const struct loader_instance *inst) { + // stub func + (void)val; + (void)inst; +} + +#endif + +// Determine the type of filter string based on the contents of it. +// This will properly check against: +// - substrings "*string*" +// - prefixes "string*" +// - suffixes "*string" +// - full string names "string" +// It will also return the correct start and finish to remove any star '*' characters for the actual string compare +void determine_filter_type(const char *filter_string, enum loader_filter_string_type *filter_type, const char **new_start, + size_t *new_length) { + size_t filter_length = strlen(filter_string); + bool star_begin = false; + bool star_end = false; + if ('~' == filter_string[0]) { + // One of the special identifiers like: ~all~, ~implicit~, or ~explicit~ + *filter_type = FILTER_STRING_SPECIAL; + *new_start = filter_string; + *new_length = filter_length; + } else { + if ('*' == filter_string[0]) { + // Only the * means everything + if (filter_length == 1) { + *filter_type = FILTER_STRING_SPECIAL; + *new_start = filter_string; + *new_length = filter_length; + } else { + star_begin = true; + } + } + if ('*' == filter_string[filter_length - 1]) { + // Not really valid, but just catch this case so if someone accidentally types "**" it will also mean everything + if (filter_length == 2) { + *filter_type = FILTER_STRING_SPECIAL; + *new_start = filter_string; + *new_length = filter_length; + } else { + star_end = true; + } + } + if (star_begin && star_end) { + *filter_type = FILTER_STRING_SUBSTRING; + *new_start = &filter_string[1]; + *new_length = filter_length - 2; + } else if (star_begin) { + *new_start = &filter_string[1]; + *new_length = filter_length - 1; + *filter_type = FILTER_STRING_SUFFIX; + } else if (star_end) { + *filter_type = FILTER_STRING_PREFIX; + *new_start = filter_string; + *new_length = filter_length - 1; + } else { + *filter_type = FILTER_STRING_FULLNAME; + *new_start = filter_string; + *new_length = filter_length; + } + } +} + +// Parse the provided filter string provided by the envrionment variable into the appropriate filter +// struct variable. +VkResult parse_generic_filter_environment_var(const struct loader_instance *inst, const char *env_var_name, + struct loader_envvar_filter *filter_struct) { + VkResult result = VK_SUCCESS; + memset(filter_struct, 0, sizeof(struct loader_envvar_filter)); + char *parsing_string = NULL; + char *env_var_value = loader_secure_getenv(env_var_name, inst); + if (NULL == env_var_value) { + return result; + } + const size_t env_var_len = strlen(env_var_value); + if (env_var_len == 0) { + goto out; + } + // Allocate a separate string since scan_for_next_comma modifies the original string + parsing_string = loader_instance_heap_calloc(inst, env_var_len + 1, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == parsing_string) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "parse_generic_filter_environment_var: Failed to allocate space for parsing env var \'%s\'", env_var_name); + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + for (uint32_t iii = 0; iii < env_var_len; ++iii) { + parsing_string[iii] = (char)tolower(env_var_value[iii]); + } + parsing_string[env_var_len] = '\0'; + + char *context = NULL; + char *token = thread_safe_strtok(parsing_string, ",", &context); + while (NULL != token) { + enum loader_filter_string_type cur_filter_type; + const char *actual_start; + size_t actual_len; + determine_filter_type(token, &cur_filter_type, &actual_start, &actual_len); + if (actual_len > VK_MAX_EXTENSION_NAME_SIZE) { + loader_strncpy(filter_struct->filters[filter_struct->count].value, VK_MAX_EXTENSION_NAME_SIZE, actual_start, + VK_MAX_EXTENSION_NAME_SIZE); + } else { + loader_strncpy(filter_struct->filters[filter_struct->count].value, VK_MAX_EXTENSION_NAME_SIZE, actual_start, + actual_len); + } + filter_struct->filters[filter_struct->count].length = actual_len; + filter_struct->filters[filter_struct->count++].type = cur_filter_type; + if (filter_struct->count >= MAX_ADDITIONAL_FILTERS) { + break; + } + token = thread_safe_strtok(NULL, ",", &context); + } + +out: + + loader_instance_heap_free(inst, parsing_string); + loader_free_getenv(env_var_value, inst); + return result; +} + +// Parse the disable layer string. The layer disable has some special behavior because we allow it to disable +// all layers (either with "~all~", "*", or "**"), all implicit layers (with "~implicit~"), and all explicit layers +// (with "~explicit~"), in addition to the other layer filtering behavior. +VkResult parse_layers_disable_filter_environment_var(const struct loader_instance *inst, + struct loader_envvar_disable_layers_filter *disable_struct) { + VkResult result = VK_SUCCESS; + memset(disable_struct, 0, sizeof(struct loader_envvar_disable_layers_filter)); + char *parsing_string = NULL; + char *env_var_value = loader_secure_getenv(VK_LAYERS_DISABLE_ENV_VAR, inst); + if (NULL == env_var_value) { + goto out; + } + const size_t env_var_len = strlen(env_var_value); + if (env_var_len == 0) { + goto out; + } + // Allocate a separate string since scan_for_next_comma modifies the original string + parsing_string = loader_instance_heap_calloc(inst, env_var_len + 1, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == parsing_string) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "parse_layers_disable_filter_environment_var: Failed to allocate space for parsing env var " + "\'VK_LAYERS_DISABLE_ENV_VAR\'"); + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + for (uint32_t iii = 0; iii < env_var_len; ++iii) { + parsing_string[iii] = (char)tolower(env_var_value[iii]); + } + parsing_string[env_var_len] = '\0'; + + char *context = NULL; + char *token = thread_safe_strtok(parsing_string, ",", &context); + while (NULL != token) { + uint32_t cur_count = disable_struct->additional_filters.count; + enum loader_filter_string_type cur_filter_type; + const char *actual_start; + size_t actual_len; + determine_filter_type(token, &cur_filter_type, &actual_start, &actual_len); + if (cur_filter_type == FILTER_STRING_SPECIAL) { + if (!strcmp(VK_LOADER_DISABLE_ALL_LAYERS_VAR_1, token) || !strcmp(VK_LOADER_DISABLE_ALL_LAYERS_VAR_2, token) || + !strcmp(VK_LOADER_DISABLE_ALL_LAYERS_VAR_3, token)) { + disable_struct->disable_all = true; + } else if (!strcmp(VK_LOADER_DISABLE_IMPLICIT_LAYERS_VAR, token)) { + disable_struct->disable_all_implicit = true; + } else if (!strcmp(VK_LOADER_DISABLE_EXPLICIT_LAYERS_VAR, token)) { + disable_struct->disable_all_explicit = true; + } + } else { + if (actual_len > VK_MAX_EXTENSION_NAME_SIZE) { + loader_strncpy(disable_struct->additional_filters.filters[cur_count].value, VK_MAX_EXTENSION_NAME_SIZE, + actual_start, VK_MAX_EXTENSION_NAME_SIZE); + } else { + loader_strncpy(disable_struct->additional_filters.filters[cur_count].value, VK_MAX_EXTENSION_NAME_SIZE, + actual_start, actual_len); + } + disable_struct->additional_filters.filters[cur_count].length = actual_len; + disable_struct->additional_filters.filters[cur_count].type = cur_filter_type; + disable_struct->additional_filters.count++; + if (disable_struct->additional_filters.count >= MAX_ADDITIONAL_FILTERS) { + break; + } + } + token = thread_safe_strtok(NULL, ",", &context); + } +out: + loader_instance_heap_free(inst, parsing_string); + loader_free_getenv(env_var_value, inst); + return result; +} + +// Parses the filter environment variables to determine if we have any special behavior +VkResult parse_layer_environment_var_filters(const struct loader_instance *inst, struct loader_envvar_all_filters *layer_filters) { + VkResult res = parse_generic_filter_environment_var(inst, VK_LAYERS_ENABLE_ENV_VAR, &layer_filters->enable_filter); + if (VK_SUCCESS != res) { + return res; + } + res = parse_layers_disable_filter_environment_var(inst, &layer_filters->disable_filter); + if (VK_SUCCESS != res) { + return res; + } + res = parse_generic_filter_environment_var(inst, VK_LAYERS_ALLOW_ENV_VAR, &layer_filters->allow_filter); + if (VK_SUCCESS != res) { + return res; + } + return res; +} + +// Check to see if the provided layer name matches any of the filter strings. +// This will properly check against: +// - substrings "*string*" +// - prefixes "string*" +// - suffixes "*string" +// - full string names "string" +bool check_name_matches_filter_environment_var(const char *name, const struct loader_envvar_filter *filter_struct) { + bool ret_value = false; + const size_t name_len = strlen(name); + char lower_name[VK_MAX_EXTENSION_NAME_SIZE]; + for (uint32_t iii = 0; iii < name_len; ++iii) { + lower_name[iii] = (char)tolower(name[iii]); + } + lower_name[name_len] = '\0'; + for (uint32_t filt = 0; filt < filter_struct->count; ++filt) { + // Check if the filter name is longer (this is with all special characters removed), and if it is + // continue since it can't match. + if (filter_struct->filters[filt].length > name_len) { + continue; + } + switch (filter_struct->filters[filt].type) { + case FILTER_STRING_SPECIAL: + if (!strcmp(VK_LOADER_DISABLE_ALL_LAYERS_VAR_1, filter_struct->filters[filt].value) || + !strcmp(VK_LOADER_DISABLE_ALL_LAYERS_VAR_2, filter_struct->filters[filt].value) || + !strcmp(VK_LOADER_DISABLE_ALL_LAYERS_VAR_3, filter_struct->filters[filt].value)) { + ret_value = true; + } + break; + + case FILTER_STRING_SUBSTRING: + if (NULL != strstr(lower_name, filter_struct->filters[filt].value)) { + ret_value = true; + } + break; + + case FILTER_STRING_SUFFIX: + if (0 == strncmp(lower_name + name_len - filter_struct->filters[filt].length, filter_struct->filters[filt].value, + filter_struct->filters[filt].length)) { + ret_value = true; + } + break; + + case FILTER_STRING_PREFIX: + if (0 == strncmp(lower_name, filter_struct->filters[filt].value, filter_struct->filters[filt].length)) { + ret_value = true; + } + break; + + case FILTER_STRING_FULLNAME: + if (0 == strncmp(lower_name, filter_struct->filters[filt].value, name_len)) { + ret_value = true; + } + break; + } + if (ret_value) { + break; + } + } + return ret_value; +} + +// Get the layer name(s) from the env_name environment variable. If layer is found in +// search_list then add it to layer_list. But only add it to layer_list if type_flags matches. +VkResult loader_add_environment_layers(struct loader_instance *inst, const enum layer_type_flags type_flags, + const struct loader_envvar_all_filters *filters, + struct loader_pointer_layer_list *target_list, + struct loader_pointer_layer_list *expanded_target_list, + const struct loader_layer_list *source_list) { + VkResult res = VK_SUCCESS; + char *layer_env = loader_getenv(ENABLED_LAYERS_ENV, inst); + + // If the layer environment variable is present (i.e. VK_INSTANCE_LAYERS), we will always add it to the layer list. + if (layer_env != NULL) { + size_t layer_env_len = strlen(layer_env) + 1; + char *name = loader_stack_alloc(layer_env_len); + if (name != NULL) { + loader_strncpy(name, layer_env_len, layer_env, layer_env_len); + + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, "env var \'%s\' defined and adding layers \"%s\"", + ENABLED_LAYERS_ENV, name); + + // First look for the old-fashion layers forced on with VK_INSTANCE_LAYERS + while (name && *name) { + char *next = loader_get_next_path(name); + + if (strlen(name) > 0) { + bool found = false; + for (uint32_t i = 0; i < source_list->count; i++) { + struct loader_layer_properties *source_prop = &source_list->list[i]; + + if (0 == strcmp(name, source_prop->info.layerName)) { + found = true; + // Only add it if it doesn't already appear in the layer list + if (!loader_find_layer_name_in_list(source_prop->info.layerName, target_list)) { + if (0 == (source_prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER)) { + source_prop->enabled_by_what = ENABLED_BY_WHAT_VK_INSTANCE_LAYERS; + res = loader_add_layer_properties_to_list(inst, target_list, source_prop); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + res = loader_add_layer_properties_to_list(inst, expanded_target_list, source_prop); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } else { + res = loader_add_meta_layer(inst, filters, source_prop, target_list, expanded_target_list, + source_list, NULL); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + break; + } + } + } + if (!found) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" was not found but was requested by env var VK_INSTANCE_LAYERS!", name); + } + } + name = next; + } + } + } + + // Loop through all the layers and check the enable/disable filters + for (uint32_t i = 0; i < source_list->count; i++) { + struct loader_layer_properties *source_prop = &source_list->list[i]; + + // If it doesn't match the type, or the name isn't what we're looking for, just continue + if ((source_prop->type_flags & type_flags) != type_flags) { + continue; + } + + // We found a layer we're interested in, but has it been disabled... + bool adding = true; + bool is_implicit = (0 == (source_prop->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)); + bool disabled_by_type = + (is_implicit) ? (filters->disable_filter.disable_all_implicit) : (filters->disable_filter.disable_all_explicit); + if ((filters->disable_filter.disable_all || disabled_by_type || + check_name_matches_filter_environment_var(source_prop->info.layerName, &filters->disable_filter.additional_filters)) && + !check_name_matches_filter_environment_var(source_prop->info.layerName, &filters->allow_filter)) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" ignored because it has been disabled by env var \'%s\'", source_prop->info.layerName, + VK_LAYERS_DISABLE_ENV_VAR); + adding = false; + } + + // If we are supposed to filter through all layers, we need to compare the layer name against the filter. + // This can override the disable above, so we want to do it second. + // Also make sure the layer isn't already in the output_list, skip adding it if it is. + if (check_name_matches_filter_environment_var(source_prop->info.layerName, &filters->enable_filter) && + !loader_find_layer_name_in_list(source_prop->info.layerName, target_list)) { + adding = true; + // Only way is_substring is true is if there are enable variables. If that's the case, and we're past the + // above, we should indicate that it was forced on in this way. + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" forced enabled due to env var \'%s\'", source_prop->info.layerName, VK_LAYERS_ENABLE_ENV_VAR); + } else { + adding = false; + } + + if (!adding) { + continue; + } + + // If not a meta-layer, simply add it. + if (0 == (source_prop->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER)) { + source_prop->enabled_by_what = ENABLED_BY_WHAT_VK_LOADER_LAYERS_ENABLE; + res = loader_add_layer_properties_to_list(inst, target_list, source_prop); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + res = loader_add_layer_properties_to_list(inst, expanded_target_list, source_prop); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } else { + res = loader_add_meta_layer(inst, filters, source_prop, target_list, expanded_target_list, source_list, NULL); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } + } + +out: + + if (layer_env != NULL) { + loader_free_getenv(layer_env, inst); + } + + return res; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_environment.h b/local/recipes/libs/vulkan-loader/source/loader/loader_environment.h new file mode 100644 index 0000000000..d120ec95c9 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_environment.h @@ -0,0 +1,56 @@ +/* + * + * Copyright (c) 2014-2021 The Khronos Group Inc. + * Copyright (c) 2014-2021 Valve Corporation + * Copyright (c) 2014-2021 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#pragma once + +#include "loader_common.h" + +// Common functionality for accessing environemnt variables and whether the process is running in priviledged mode + +char *loader_getenv(const char *name, const struct loader_instance *inst); +void loader_free_getenv(char *val, const struct loader_instance *inst); + +#if defined(WIN32) || COMMON_UNIX_PLATFORMS + +bool is_high_integrity(void); + +char *loader_secure_getenv(const char *name, const struct loader_instance *inst); + +#endif + +VkResult parse_generic_filter_environment_var(const struct loader_instance *inst, const char *env_var_name, + struct loader_envvar_filter *filter_struct); +VkResult parse_layers_disable_filter_environment_var(const struct loader_instance *inst, + struct loader_envvar_disable_layers_filter *disable_struct); +VkResult parse_layer_environment_var_filters(const struct loader_instance *inst, struct loader_envvar_all_filters *layer_filters); +bool check_name_matches_filter_environment_var(const char *name, const struct loader_envvar_filter *filter_struct); +VkResult loader_add_environment_layers(struct loader_instance *inst, const enum layer_type_flags type_flags, + const struct loader_envvar_all_filters *filters, + struct loader_pointer_layer_list *target_list, + struct loader_pointer_layer_list *expanded_target_list, + const struct loader_layer_list *source_list); diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_json.c b/local/recipes/libs/vulkan-loader/source/loader/loader_json.c new file mode 100644 index 0000000000..805d278c08 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_json.c @@ -0,0 +1,258 @@ +/* + Copyright (c) 2015-2021 The Khronos Group Inc. + Copyright (c) 2015-2021 Valve Corporation + Copyright (c) 2015-2021 LunarG, Inc. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "loader_json.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "cJSON.h" + +#include "allocation.h" +#include "loader.h" +#include "log.h" + +#if COMMON_UNIX_PLATFORMS +#include +#include +#endif + +#ifdef _WIN32 +static VkResult loader_read_entire_file(const struct loader_instance *inst, const char *filename, size_t *out_len, + char **out_buff) { + HANDLE file_handle = INVALID_HANDLE_VALUE; + DWORD len = 0, read_len = 0; + VkResult res = VK_SUCCESS; + BOOL read_ok = false; + + int filename_utf16_size = MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0); + if (filename_utf16_size > 0) { + wchar_t *filename_utf16 = (wchar_t *)loader_stack_alloc(filename_utf16_size * sizeof(wchar_t)); + if (MultiByteToWideChar(CP_UTF8, 0, filename, -1, filename_utf16, filename_utf16_size) == filename_utf16_size) { + file_handle = + CreateFileW(filename_utf16, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + } + } + if (INVALID_HANDLE_VALUE == file_handle) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to open JSON file %s", filename); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + len = GetFileSize(file_handle, NULL); + if (INVALID_FILE_SIZE == len) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to read file size of JSON file %s", filename); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + *out_buff = (char *)loader_instance_heap_calloc(inst, len + 1, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL == *out_buff) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to allocate memory to read JSON file %s", filename); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + read_ok = ReadFile(file_handle, *out_buff, len, &read_len, NULL); + if (len != read_len || false == read_ok) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to read entire JSON file %s", filename); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + *out_len = len + 1; + (*out_buff)[len] = '\0'; + +out: + if (INVALID_HANDLE_VALUE != file_handle) { + CloseHandle(file_handle); + } + return res; +} +#elif COMMON_UNIX_PLATFORMS +static VkResult loader_read_entire_file(const struct loader_instance *inst, const char *filename, size_t *out_len, + char **out_buff) { + FILE *file = NULL; + struct stat stats = {0}; + VkResult res = VK_SUCCESS; + + file = fopen(filename, "rb"); + if (NULL == file) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to open JSON file %s", filename); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + if (-1 == fstat(fileno(file), &stats)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to read file size of JSON file %s", filename); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + *out_buff = (char *)loader_instance_heap_calloc(inst, stats.st_size + 1, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL == *out_buff) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to allocate memory to read JSON file %s", filename); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + if (stats.st_size != (long int)fread(*out_buff, sizeof(char), stats.st_size, file)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Failed to read entire JSON file %s", filename); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + *out_len = stats.st_size + 1; + (*out_buff)[stats.st_size] = '\0'; + +out: + if (NULL != file) { + fclose(file); + } + return res; +} +#else +#warning fopen not available on this platform +VkResult loader_read_entire_file(const struct loader_instance *inst, const char *filename, size_t *out_len, char **out_buff) { + return VK_ERROR_INITIALIZATION_FAILED; +} +#endif + +TEST_FUNCTION_EXPORT VkResult loader_get_json(const struct loader_instance *inst, const char *filename, cJSON **json) { + char *json_buf = NULL; + VkResult res = VK_SUCCESS; + + assert(json != NULL); + + size_t json_len = 0; + *json = NULL; + res = loader_read_entire_file(inst, filename, &json_len, &json_buf); + if (VK_SUCCESS != res) { + goto out; + } + bool out_of_memory = false; + // Parse text from file + *json = loader_cJSON_ParseWithLength(inst ? &inst->alloc_callbacks : NULL, json_buf, json_len, &out_of_memory); + if (out_of_memory) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Out of Memory error occurred while parsing JSON file %s.", + filename); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } else if (*json == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_get_json: Invalid JSON file %s.", filename); + goto out; + } + +out: + loader_instance_heap_free(inst, json_buf); + if (res != VK_SUCCESS && *json != NULL) { + loader_cJSON_Delete(*json); + *json = NULL; + } + + return res; +} + +VkResult loader_parse_json_string_to_existing_str(cJSON *object, const char *key, size_t out_str_len, char *out_string) { + if (NULL == key) { + return VK_ERROR_INITIALIZATION_FAILED; + } + cJSON *item = loader_cJSON_GetObjectItem(object, key); + if (NULL == item) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + if (item->type != cJSON_String || item->valuestring == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + bool out_of_memory = false; + bool success = loader_cJSON_PrintPreallocated(item, out_string, (int)out_str_len, cJSON_False); + if (out_of_memory) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + if (!success) { + return VK_ERROR_INITIALIZATION_FAILED; + } + return VK_SUCCESS; +} + +VkResult loader_parse_json_string(cJSON *object, const char *key, char **out_string) { + if (NULL == key) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + cJSON *item = loader_cJSON_GetObjectItem(object, key); + if (NULL == item || NULL == item->valuestring) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + bool out_of_memory = false; + char *str = loader_cJSON_Print(item, &out_of_memory); + if (out_of_memory || NULL == str) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + if (NULL != out_string) { + *out_string = str; + } + return VK_SUCCESS; +} +VkResult loader_parse_json_array_of_strings(const struct loader_instance *inst, cJSON *object, const char *key, + struct loader_string_list *string_list) { + if (NULL == key) { + return VK_ERROR_INITIALIZATION_FAILED; + } + cJSON *item = loader_cJSON_GetObjectItem(object, key); + if (NULL == item) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + uint32_t count = loader_cJSON_GetArraySize(item); + if (count == 0) { + return VK_SUCCESS; + } + + VkResult res = create_string_list(inst, count, string_list); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + goto out; + } + cJSON *element = NULL; + cJSON_ArrayForEach(element, item) { + if (element->type != cJSON_String) { + return VK_ERROR_INITIALIZATION_FAILED; + } + bool out_of_memory = false; + char *out_data = loader_cJSON_Print(element, &out_of_memory); + if (out_of_memory) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + res = append_str_to_string_list(inst, string_list, out_data); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + goto out; + } + } +out: + if (res == VK_ERROR_OUT_OF_HOST_MEMORY && NULL != string_list->list) { + free_string_list(inst, string_list); + } + + return res; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_json.h b/local/recipes/libs/vulkan-loader/source/loader/loader_json.h new file mode 100644 index 0000000000..b78ffc95da --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_json.h @@ -0,0 +1,55 @@ +/* + Copyright (c) 2015-2021 The Khronos Group Inc. + Copyright (c) 2015-2021 Valve Corporation + Copyright (c) 2015-2021 LunarG, Inc. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#pragma once + +#include + +#include + +#include + +// Forward decls +struct loader_instance; +struct loader_string_list; + +// Read a JSON file into a buffer. +// +// @return - A pointer to a cJSON object representing the JSON parse tree. +// This returned buffer should be freed by caller. +TEST_FUNCTION_EXPORT VkResult loader_get_json(const struct loader_instance *inst, const char *filename, cJSON **json); + +// Given a cJSON object, find the string associated with the key and puts an pre-allocated string into out_string. +// Length is given by out_str_len, and this function truncates the string with a null terminator if it the provided space isn't +// large enough. +VkResult loader_parse_json_string_to_existing_str(cJSON *object, const char *key, size_t out_str_len, char *out_string); + +// Given a cJSON object, find the string associated with the key and puts an allocated string into out_string. +// It is the callers responsibility to free out_string. +VkResult loader_parse_json_string(cJSON *object, const char *key, char **out_string); + +// Given a cJSON object, find the array of strings associated with they key and writes the count into out_count and data into +// out_array_of_strings. It is the callers responsibility to free out_array_of_strings. +VkResult loader_parse_json_array_of_strings(const struct loader_instance *inst, cJSON *object, const char *key, + struct loader_string_list *string_list); diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_linux.c b/local/recipes/libs/vulkan-loader/source/loader/loader_linux.c new file mode 100644 index 0000000000..c556010552 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_linux.c @@ -0,0 +1,453 @@ +/* + * + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, 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. + * + * Author: Mark Young + * + */ + +// Non-windows and non-apple only header file, guard it so that accidental +// inclusion doesn't cause unknown header include errors +#if defined(LOADER_ENABLE_LINUX_SORT) + +#include +#include + +#include "loader_linux.h" + +#include "allocation.h" +#include "loader_environment.h" +#include "loader.h" +#include "log.h" +#include "stack_allocation.h" + +// Determine a priority based on device type with the higher value being higher priority. +uint32_t determine_priority_type_value(VkPhysicalDeviceType type) { + switch (type) { + case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: + return 10; + case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: + return 5; + case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: + return 3; + case VK_PHYSICAL_DEVICE_TYPE_OTHER: + return 2; + case VK_PHYSICAL_DEVICE_TYPE_CPU: + return 1; + case VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM: // Not really an enum, but throws warning if it's not here + break; + } + return 0; +} + +// Compare the two device types. +// This behaves similar to a qsort compare. +int32_t device_type_compare(VkPhysicalDeviceType a, VkPhysicalDeviceType b) { + uint32_t a_value = determine_priority_type_value(a); + uint32_t b_value = determine_priority_type_value(b); + if (a_value > b_value) { + return -1; + } else if (b_value > a_value) { + return 1; + } + return 0; +} + +// Used to compare two devices and determine which one should have priority. The criteria is +// simple: +// 1) Default device ALWAYS wins +// 2) Sort by type +// 3) Sort by PCI bus ID +// 4) Ties broken by device_ID XOR vendor_ID comparison +int32_t compare_devices(const void *a, const void *b) { + struct LinuxSortedDeviceInfo *left = (struct LinuxSortedDeviceInfo *)a; + struct LinuxSortedDeviceInfo *right = (struct LinuxSortedDeviceInfo *)b; + + // Default device always gets priority + if (left->default_device) { + return -1; + } else if (right->default_device) { + return 1; + } + + // Order by device type next + int32_t dev_type_comp = device_type_compare(left->device_type, right->device_type); + if (0 != dev_type_comp) { + return dev_type_comp; + } + + // Sort by PCI info (prioritize devices that have info over those that don't) + if (left->has_pci_bus_info && !right->has_pci_bus_info) { + return -1; + } else if (!left->has_pci_bus_info && right->has_pci_bus_info) { + return 1; + } else if (left->has_pci_bus_info && right->has_pci_bus_info) { + // Sort low to high PCI domain + if (left->pci_domain < right->pci_domain) { + return -1; + } else if (left->pci_domain > right->pci_domain) { + return 1; + } + // Sort low to high PCI bus + if (left->pci_bus < right->pci_bus) { + return -1; + } else if (left->pci_bus > right->pci_bus) { + return 1; + } + // Sort low to high PCI device + if (left->pci_device < right->pci_device) { + return -1; + } else if (left->pci_device > right->pci_device) { + return 1; + } + // Sort low to high PCI function + if (left->pci_function < right->pci_function) { + return -1; + } else if (left->pci_function > right->pci_function) { + return 1; + } + } + + // Somehow we have a tie above, so XOR vendorID and deviceID and compare + uint32_t left_xord_dev_vend = left->device_id ^ left->vendor_id; + uint32_t right_xord_dev_vend = right->device_id ^ right->vendor_id; + if (left_xord_dev_vend < right_xord_dev_vend) { + return -1; + } else if (right_xord_dev_vend < left_xord_dev_vend) { + return 1; + } + return 0; +} + +// Used to compare two device groups and determine which one should have priority. +// NOTE: This assumes that devices in each group have already been sorted. +// The group sort criteria is simple: +// 1) Group with the default device ALWAYS wins +// 2) Group with the best device type for device 0 wins +// 3) Group with best PCI bus ID for device 0 wins +// 4) Ties broken by group device 0 device_ID XOR vendor_ID comparison +int32_t compare_device_groups(const void *a, const void *b) { + struct loader_physical_device_group_term *grp_a = (struct loader_physical_device_group_term *)a; + struct loader_physical_device_group_term *grp_b = (struct loader_physical_device_group_term *)b; + + // Use the first GPU's info from each group to sort the groups by + struct LinuxSortedDeviceInfo *left = &grp_a->internal_device_info[0]; + struct LinuxSortedDeviceInfo *right = &grp_b->internal_device_info[0]; + + // Default device always gets priority + if (left->default_device) { + return -1; + } else if (right->default_device) { + return 1; + } + + // Order by device type next + int32_t dev_type_comp = device_type_compare(left->device_type, right->device_type); + if (0 != dev_type_comp) { + return dev_type_comp; + } + + // Sort by PCI info (prioritize devices that have info over those that don't) + if (left->has_pci_bus_info && !right->has_pci_bus_info) { + return -1; + } else if (!left->has_pci_bus_info && right->has_pci_bus_info) { + return 1; + } else if (left->has_pci_bus_info && right->has_pci_bus_info) { + // Sort low to high PCI domain + if (left->pci_domain < right->pci_domain) { + return -1; + } else if (left->pci_domain > right->pci_domain) { + return 1; + } + // Sort low to high PCI bus + if (left->pci_bus < right->pci_bus) { + return -1; + } else if (left->pci_bus > right->pci_bus) { + return 1; + } + // Sort low to high PCI device + if (left->pci_device < right->pci_device) { + return -1; + } else if (left->pci_device > right->pci_device) { + return 1; + } + // Sort low to high PCI function + if (left->pci_function < right->pci_function) { + return -1; + } else if (left->pci_function > right->pci_function) { + return 1; + } + } + + // Somehow we have a tie above, so XOR vendorID and deviceID and compare + uint32_t left_xord_dev_vend = left->device_id ^ left->vendor_id; + uint32_t right_xord_dev_vend = right->device_id ^ right->vendor_id; + if (left_xord_dev_vend < right_xord_dev_vend) { + return -1; + } else if (right_xord_dev_vend < left_xord_dev_vend) { + return 1; + } + return 0; +} + +// Search for the default device using the loader environment variable. +void linux_env_var_default_device(struct loader_instance *inst, uint32_t device_count, + struct LinuxSortedDeviceInfo *sorted_device_info) { + char *selection = loader_getenv("VK_LOADER_DEVICE_SELECT", inst); + if (NULL != selection) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "linux_env_var_default_device: Found \'VK_LOADER_DEVICE_SELECT\' set to %s", selection); + + // The environment variable exists, so grab the vendor ID and device ID of the + // selected default device + unsigned vendor_id, device_id; + int32_t matched = sscanf(selection, "%x:%x", &vendor_id, &device_id); + if (matched == 2) { + for (int32_t i = 0; i < (int32_t)device_count; ++i) { + if (sorted_device_info[i].vendor_id == vendor_id && sorted_device_info[i].device_id == device_id) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "linux_env_var_default_device: Found default at index %u \'%s\'", i, + sorted_device_info[i].device_name); + sorted_device_info[i].default_device = true; + break; + } + } + } + + loader_free_getenv(selection, inst); + } +} + +// This function allocates an array in sorted_devices which must be freed by the caller if not null +VkResult linux_read_sorted_physical_devices(struct loader_instance *inst, uint32_t icd_count, + struct loader_icd_physical_devices *icd_devices, uint32_t phys_dev_count, + struct loader_physical_device_term **sorted_device_term) { + VkResult res = VK_SUCCESS; + bool app_is_vulkan_1_1 = loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version); + + struct LinuxSortedDeviceInfo *sorted_device_info = loader_instance_heap_calloc( + inst, phys_dev_count * sizeof(struct LinuxSortedDeviceInfo), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL == sorted_device_info) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, "linux_read_sorted_physical_devices:"); + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " Original order:"); + + // Grab all the necessary info we can about each device + uint32_t index = 0; + for (uint32_t icd_idx = 0; icd_idx < icd_count; ++icd_idx) { + for (uint32_t phys_dev = 0; phys_dev < icd_devices[icd_idx].device_count; ++phys_dev) { + struct loader_icd_term *icd_term = icd_devices[icd_idx].icd_term; + VkPhysicalDeviceProperties dev_props = {}; + + sorted_device_info[index].physical_device = icd_devices[icd_idx].physical_devices[phys_dev]; + sorted_device_info[index].icd_term = icd_term; + sorted_device_info[index].has_pci_bus_info = false; + + icd_term->dispatch.GetPhysicalDeviceProperties(sorted_device_info[index].physical_device, &dev_props); + sorted_device_info[index].device_type = dev_props.deviceType; + strncpy(sorted_device_info[index].device_name, dev_props.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); + sorted_device_info[index].vendor_id = dev_props.vendorID; + sorted_device_info[index].device_id = dev_props.deviceID; + + bool device_is_1_1_capable = + loader_check_version_meets_required(LOADER_VERSION_1_1_0, loader_make_version(dev_props.apiVersion)); + if (!sorted_device_info[index].has_pci_bus_info) { + uint32_t ext_count = 0; + icd_term->dispatch.EnumerateDeviceExtensionProperties(sorted_device_info[index].physical_device, NULL, &ext_count, + NULL); + if (ext_count > 0) { + VkExtensionProperties *ext_props = + (VkExtensionProperties *)loader_stack_alloc(sizeof(VkExtensionProperties) * ext_count); + if (NULL == ext_props) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + icd_term->dispatch.EnumerateDeviceExtensionProperties(sorted_device_info[index].physical_device, NULL, + &ext_count, ext_props); + for (uint32_t ext = 0; ext < ext_count; ++ext) { + if (!strcmp(ext_props[ext].extensionName, VK_EXT_PCI_BUS_INFO_EXTENSION_NAME)) { + sorted_device_info[index].has_pci_bus_info = true; + break; + } + } + } + } + + if (sorted_device_info[index].has_pci_bus_info) { + VkPhysicalDevicePCIBusInfoPropertiesEXT pci_props = (VkPhysicalDevicePCIBusInfoPropertiesEXT){ + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT}; + VkPhysicalDeviceProperties2 dev_props2 = + (VkPhysicalDeviceProperties2){.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, .pNext = &pci_props}; + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = NULL; + if (app_is_vulkan_1_1 && device_is_1_1_capable) { + GetPhysDevProps2 = icd_term->dispatch.GetPhysicalDeviceProperties2; + } else { + GetPhysDevProps2 = (PFN_vkGetPhysicalDeviceProperties2)icd_term->dispatch.GetPhysicalDeviceProperties2KHR; + } + if (NULL != GetPhysDevProps2) { + GetPhysDevProps2(sorted_device_info[index].physical_device, &dev_props2); + sorted_device_info[index].pci_domain = pci_props.pciDomain; + sorted_device_info[index].pci_bus = pci_props.pciBus; + sorted_device_info[index].pci_device = pci_props.pciDevice; + sorted_device_info[index].pci_function = pci_props.pciFunction; + } else { + sorted_device_info[index].has_pci_bus_info = false; + } + } + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " [%u] %s", index, + sorted_device_info[index].device_name); + index++; + } + } + + // Select default device if set in the environment variable + linux_env_var_default_device(inst, phys_dev_count, sorted_device_info); + + // Sort devices by PCI info + qsort(sorted_device_info, phys_dev_count, sizeof(struct LinuxSortedDeviceInfo), compare_devices); + + // If we have a selected index, add that first. + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " Sorted order:"); + + // Add all others after (they've already been sorted) + for (uint32_t dev = 0; dev < phys_dev_count; ++dev) { + sorted_device_term[dev]->this_icd_term = sorted_device_info[dev].icd_term; + sorted_device_term[dev]->phys_dev = sorted_device_info[dev].physical_device; + loader_set_dispatch((void *)sorted_device_term[dev], inst->disp); + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " [%u] %s %s", dev, + sorted_device_info[dev].device_name, (sorted_device_info[dev].default_device ? "[default]" : "")); + } + +out: + loader_instance_heap_free(inst, sorted_device_info); + + return res; +} + +// This function sorts an array of physical device groups +VkResult linux_sort_physical_device_groups(struct loader_instance *inst, uint32_t group_count, + struct loader_physical_device_group_term *sorted_group_term) { + VkResult res = VK_SUCCESS; + bool app_is_vulkan_1_1 = loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version); + + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, "linux_sort_physical_device_groups: Original order:"); + + for (uint32_t group = 0; group < group_count; ++group) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " Group %u", group); + + struct loader_icd_term *icd_term = sorted_group_term[group].this_icd_term; + for (uint32_t gpu = 0; gpu < sorted_group_term[group].group_props.physicalDeviceCount; ++gpu) { + VkPhysicalDeviceProperties dev_props = {}; + + sorted_group_term[group].internal_device_info[gpu].physical_device = + sorted_group_term[group].group_props.physicalDevices[gpu]; + sorted_group_term[group].internal_device_info[gpu].has_pci_bus_info = false; + + icd_term->dispatch.GetPhysicalDeviceProperties(sorted_group_term[group].internal_device_info[gpu].physical_device, + &dev_props); + sorted_group_term[group].internal_device_info[gpu].device_type = dev_props.deviceType; + strncpy(sorted_group_term[group].internal_device_info[gpu].device_name, dev_props.deviceName, + VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); + sorted_group_term[group].internal_device_info[gpu].vendor_id = dev_props.vendorID; + sorted_group_term[group].internal_device_info[gpu].device_id = dev_props.deviceID; + + bool device_is_1_1_capable = + loader_check_version_meets_required(LOADER_VERSION_1_1_0, loader_make_version(dev_props.apiVersion)); + if (!sorted_group_term[group].internal_device_info[gpu].has_pci_bus_info) { + uint32_t ext_count; + icd_term->dispatch.EnumerateDeviceExtensionProperties( + sorted_group_term[group].internal_device_info[gpu].physical_device, NULL, &ext_count, NULL); + if (ext_count > 0) { + VkExtensionProperties *ext_props = + (VkExtensionProperties *)loader_stack_alloc(sizeof(VkExtensionProperties) * ext_count); + if (NULL == ext_props) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + icd_term->dispatch.EnumerateDeviceExtensionProperties( + sorted_group_term[group].internal_device_info[gpu].physical_device, NULL, &ext_count, ext_props); + for (uint32_t ext = 0; ext < ext_count; ++ext) { + if (!strcmp(ext_props[ext].extensionName, VK_EXT_PCI_BUS_INFO_EXTENSION_NAME)) { + sorted_group_term[group].internal_device_info[gpu].has_pci_bus_info = true; + break; + } + } + } + } + + if (sorted_group_term[group].internal_device_info[gpu].has_pci_bus_info) { + VkPhysicalDevicePCIBusInfoPropertiesEXT pci_props = (VkPhysicalDevicePCIBusInfoPropertiesEXT){ + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT}; + VkPhysicalDeviceProperties2 dev_props2 = + (VkPhysicalDeviceProperties2){.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, .pNext = &pci_props}; + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = NULL; + if (app_is_vulkan_1_1 && device_is_1_1_capable) { + GetPhysDevProps2 = icd_term->dispatch.GetPhysicalDeviceProperties2; + } else { + GetPhysDevProps2 = (PFN_vkGetPhysicalDeviceProperties2)icd_term->dispatch.GetPhysicalDeviceProperties2KHR; + } + if (NULL != GetPhysDevProps2) { + GetPhysDevProps2(sorted_group_term[group].internal_device_info[gpu].physical_device, &dev_props2); + sorted_group_term[group].internal_device_info[gpu].pci_domain = pci_props.pciDomain; + sorted_group_term[group].internal_device_info[gpu].pci_bus = pci_props.pciBus; + sorted_group_term[group].internal_device_info[gpu].pci_device = pci_props.pciDevice; + sorted_group_term[group].internal_device_info[gpu].pci_function = pci_props.pciFunction; + } else { + sorted_group_term[group].internal_device_info[gpu].has_pci_bus_info = false; + } + } + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " [%u] %s", gpu, + sorted_group_term[group].internal_device_info[gpu].device_name); + } + + // Select default device if set in the environment variable + linux_env_var_default_device(inst, sorted_group_term[group].group_props.physicalDeviceCount, + sorted_group_term[group].internal_device_info); + + // Sort GPUs in each group + qsort(sorted_group_term[group].internal_device_info, sorted_group_term[group].group_props.physicalDeviceCount, + sizeof(struct LinuxSortedDeviceInfo), compare_devices); + + // Match the externally used physical device list with the sorted physical device list for this group. + for (uint32_t dev = 0; dev < sorted_group_term[group].group_props.physicalDeviceCount; ++dev) { + sorted_group_term[group].group_props.physicalDevices[dev] = + sorted_group_term[group].internal_device_info[dev].physical_device; + } + } + + // Sort device groups by PCI info + qsort(sorted_group_term, group_count, sizeof(struct loader_physical_device_group_term), compare_device_groups); + + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, "linux_sort_physical_device_groups: Sorted order:"); + for (uint32_t group = 0; group < group_count; ++group) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " Group %u", group); + for (uint32_t gpu = 0; gpu < sorted_group_term[group].group_props.physicalDeviceCount; ++gpu) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, " [%u] %s %p %s", gpu, + sorted_group_term[group].internal_device_info[gpu].device_name, + sorted_group_term[group].internal_device_info[gpu].physical_device, + (sorted_group_term[group].internal_device_info[gpu].default_device ? "[default]" : "")); + } + } + + return res; +} + +#endif // LOADER_ENABLE_LINUX_SORT diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_linux.h b/local/recipes/libs/vulkan-loader/source/loader/loader_linux.h new file mode 100644 index 0000000000..794ea24aa6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_linux.h @@ -0,0 +1,38 @@ +/* + * + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, 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. + * + * Author: Mark Young + * + */ + +#pragma once + +#if defined(LOADER_ENABLE_LINUX_SORT) + +#include "loader_common.h" + +// This function allocates an array in sorted_devices which must be freed by the caller if not null +VkResult linux_read_sorted_physical_devices(struct loader_instance *inst, uint32_t icd_count, + struct loader_icd_physical_devices *icd_devices, uint32_t phys_dev_count, + struct loader_physical_device_term **sorted_device_term); + +// This function sorts an array in physical device groups +VkResult linux_sort_physical_device_groups(struct loader_instance *inst, uint32_t group_count, + struct loader_physical_device_group_term *sorted_group_term); + +#endif // LOADER_ENABLE_LINUX_SORT diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_windows.c b/local/recipes/libs/vulkan-loader/source/loader/loader_windows.c new file mode 100644 index 0000000000..f73659c091 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_windows.c @@ -0,0 +1,1264 @@ +/* + * + * Copyright (c) 2014-2022 The Khronos Group Inc. + * Copyright (c) 2014-2022 Valve Corporation + * Copyright (c) 2014-2022 LunarG, Inc. + * 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ +// Windows only header file, guard it so that accidental inclusion doesn't cause unknown header include errors +#if defined(_WIN32) + +// This needs to be defined first, or else we'll get redefinitions on NTSTATUS values +#define UMDF_USING_NTSTATUS +#include + +#include "loader_windows.h" + +#include "allocation.h" +#include "loader_environment.h" +#include "loader.h" +#include "log.h" + +#include +#include +#include +#include +#include +#if defined(__MINGW32__) +#undef strcpy // fix error with redefined strcpy when building with MinGW-w64 +#endif +#include +#include "adapters.h" + +#if !defined(__MINGW32__) +// not yet available with MinGW-w64 stable +#include +#endif + +#if !defined(NDEBUG) +#include +#endif + +typedef HRESULT(APIENTRY *PFN_CreateDXGIFactory1)(REFIID riid, void **ppFactory); +PFN_CreateDXGIFactory1 fpCreateDXGIFactory1; + +// Empty function just so windows_initialization can find the current module location +void function_for_finding_the_current_module(void) {} + +void windows_initialization(void) { + char dll_location[MAX_PATH]; + HMODULE module_handle = NULL; + + // Get a module handle to a static function inside of this source + if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (LPCSTR)&function_for_finding_the_current_module, &module_handle) != 0 && + GetModuleFileName(module_handle, dll_location, sizeof(dll_location)) != 0) { + loader_log(NULL, VULKAN_LOADER_INFO_BIT, 0, "Using Vulkan Loader %s", dll_location); + } + + // This is needed to ensure that newer APIs are available right away + // and not after the first call that has been statically linked + LoadLibraryEx("gdi32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); + + wchar_t systemPath[MAX_PATH] = L""; + GetSystemDirectoryW(systemPath, MAX_PATH); + StringCchCatW(systemPath, MAX_PATH, L"\\dxgi.dll"); + HMODULE dxgi_module = LoadLibraryW(systemPath); + fpCreateDXGIFactory1 = + dxgi_module == NULL ? NULL : (PFN_CreateDXGIFactory1)(void *)GetProcAddress(dxgi_module, "CreateDXGIFactory1"); + +#if !defined(NDEBUG) + _set_error_mode(_OUT_TO_STDERR); + _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); +#endif +} + +BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) { + (void)hinst; + switch (reason) { + case DLL_PROCESS_ATTACH: + // Only initialize necessary sync primitives + loader_platform_thread_create_mutex(&loader_lock); + loader_platform_thread_create_mutex(&loader_preload_icd_lock); + loader_platform_thread_create_mutex(&loader_global_instance_list_lock); + init_global_loader_settings(); + break; + case DLL_PROCESS_DETACH: + if (NULL == reserved) { + loader_release(); + } + break; + default: + // Do nothing + break; + } + return TRUE; +} + +bool windows_add_json_entry(const struct loader_instance *inst, + char **reg_data, // list of JSON files + PDWORD total_size, // size of reg_data + LPCSTR key_name, // key name - used for debug prints - i.e. VulkanDriverName + DWORD key_type, // key data type + LPSTR json_path, // JSON string to add to the list reg_data + DWORD json_size, // size in bytes of json_path + VkResult *result) { + // Check for and ignore duplicates. + if (*reg_data && strstr(*reg_data, json_path)) { + // Success. The json_path is already in the list. + return true; + } + + if (NULL == *reg_data) { + *reg_data = loader_instance_heap_alloc(inst, *total_size, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == *reg_data) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "windows_add_json_entry: Failed to allocate space for registry data for key %s", json_path); + *result = VK_ERROR_OUT_OF_HOST_MEMORY; + return false; + } + *reg_data[0] = '\0'; + } else if (strlen(*reg_data) + json_size + 1 > *total_size) { + void *new_ptr = + loader_instance_heap_realloc(inst, *reg_data, *total_size, *total_size * 2, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_ptr) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "windows_add_json_entry: Failed to reallocate space for registry value of size %ld for key %s", + *total_size * 2, json_path); + *result = VK_ERROR_OUT_OF_HOST_MEMORY; + return false; + } + *reg_data = new_ptr; + *total_size *= 2; + } + + for (char *curr_filename = json_path; curr_filename[0] != '\0'; curr_filename += strlen(curr_filename) + 1) { + if (strlen(*reg_data) == 0) { + (void)snprintf(*reg_data, json_size + 1, "%s", curr_filename); + } else { + (void)snprintf(*reg_data + strlen(*reg_data), json_size + 2, "%c%s", PATH_SEPARATOR, curr_filename); + } + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, "%s: Located json file \"%s\" from PnP registry: %s", __FUNCTION__, + curr_filename, key_name); + + if (key_type == REG_SZ) { + break; + } + } + return true; +} + +bool windows_get_device_registry_entry(const struct loader_instance *inst, char **reg_data, PDWORD total_size, DEVINST dev_id, + LPCSTR value_name, VkResult *result) { + HKEY hkrKey = INVALID_HANDLE_VALUE; + DWORD requiredSize, data_type; + char *manifest_path = NULL; + bool found = false; + + assert(reg_data != NULL && "windows_get_device_registry_entry: reg_data is a NULL pointer"); + assert(total_size != NULL && "windows_get_device_registry_entry: total_size is a NULL pointer"); + + CONFIGRET status = CM_Open_DevNode_Key(dev_id, KEY_QUERY_VALUE, 0, RegDisposition_OpenExisting, &hkrKey, CM_REGISTRY_SOFTWARE); + if (status != CR_SUCCESS) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "windows_get_device_registry_entry: Failed to open registry key for DeviceID(%ld)", dev_id); + *result = VK_ERROR_INCOMPATIBLE_DRIVER; + return false; + } + + // query value + LSTATUS ret = RegQueryValueEx(hkrKey, value_name, NULL, NULL, NULL, &requiredSize); + + if (ret != ERROR_SUCCESS) { + if (ret == ERROR_FILE_NOT_FOUND) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "windows_get_device_registry_entry: Device ID(%ld) Does not contain a value for \"%s\"", dev_id, value_name); + } else { + loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "windows_get_device_registry_entry: DeviceID(%ld) Failed to obtain %s size", dev_id, value_name); + } + goto out; + } + + manifest_path = loader_instance_heap_alloc(inst, requiredSize, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (manifest_path == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "windows_get_device_registry_entry: Failed to allocate space for DriverName."); + *result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + ret = RegQueryValueEx(hkrKey, value_name, NULL, &data_type, (BYTE *)manifest_path, &requiredSize); + + if (ret != ERROR_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "windows_get_device_registry_entry: DeviceID(%ld) Failed to obtain %s", dev_id, value_name); + *result = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + if (data_type != REG_SZ && data_type != REG_MULTI_SZ) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "windows_get_device_registry_entry: Invalid %s data type. Expected REG_SZ or REG_MULTI_SZ.", value_name); + *result = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + found = windows_add_json_entry(inst, reg_data, total_size, value_name, data_type, manifest_path, requiredSize, result); + +out: + loader_instance_heap_free(inst, manifest_path); + RegCloseKey(hkrKey); + return found; +} + +VkResult windows_get_device_registry_files(const struct loader_instance *inst, uint32_t log_target_flag, char **reg_data, + PDWORD reg_data_size, LPCSTR value_name) { + const wchar_t *softwareComponentGUID = L"{5c4c3332-344d-483c-8739-259e934c9cc8}"; + const wchar_t *displayGUID = L"{4d36e968-e325-11ce-bfc1-08002be10318}"; +#if defined(CM_GETIDLIST_FILTER_PRESENT) + const ULONG flags = CM_GETIDLIST_FILTER_CLASS | CM_GETIDLIST_FILTER_PRESENT; +#else + const ULONG flags = 0x300; +#endif + + wchar_t childGuid[MAX_GUID_STRING_LEN + 2]; // +2 for brackets {} + for (uint32_t i = 0; i < MAX_GUID_STRING_LEN + 2; i++) { + childGuid[i] = L'\0'; + } + ULONG childGuidSize = sizeof(childGuid); + + DEVINST devID = 0, childID = 0; + wchar_t *pDeviceNames = NULL; + ULONG deviceNamesSize = 0; + VkResult result = VK_SUCCESS; + bool found = false; + + assert(reg_data != NULL && "windows_get_device_registry_files: reg_data is NULL"); + + // if after obtaining the DeviceNameSize, new device is added start over + do { + CM_Get_Device_ID_List_SizeW(&deviceNamesSize, displayGUID, flags); + + loader_instance_heap_free(inst, pDeviceNames); + + pDeviceNames = loader_instance_heap_alloc(inst, deviceNamesSize * sizeof(wchar_t), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (pDeviceNames == NULL) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_get_device_registry_files: Failed to allocate space for display device names."); + result = VK_ERROR_OUT_OF_HOST_MEMORY; + return result; + } + } while (CM_Get_Device_ID_ListW(displayGUID, pDeviceNames, deviceNamesSize, flags) == CR_BUFFER_SMALL); + + if (pDeviceNames) { + for (wchar_t *deviceName = pDeviceNames; *deviceName; deviceName += wcslen(deviceName) + 1) { + CONFIGRET status = CM_Locate_DevNodeW(&devID, deviceName, CM_LOCATE_DEVNODE_NORMAL); + if (CR_SUCCESS != status) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_get_device_registry_files: failed to open DevNode %ls", deviceName); + continue; + } + ULONG ulStatus, ulProblem; + status = CM_Get_DevNode_Status(&ulStatus, &ulProblem, devID, 0); + + if (CR_SUCCESS != status) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_get_device_registry_files: failed to probe device status %ls", deviceName); + continue; + } + if ((ulStatus & DN_HAS_PROBLEM) && (ulProblem == CM_PROB_NEED_RESTART || ulProblem == DN_NEED_RESTART)) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "windows_get_device_registry_files: device %ls is pending reboot, skipping ...", deviceName); + continue; + } + + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, "windows_get_device_registry_files: opening device %ls", + deviceName); + + if (windows_get_device_registry_entry(inst, reg_data, reg_data_size, devID, value_name, &result)) { + found = true; + continue; + } else if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + break; + } + + status = CM_Get_Child(&childID, devID, 0); + if (status != CR_SUCCESS) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "windows_get_device_registry_files: unable to open child-device error:%ld", status); + continue; + } + + do { + wchar_t buffer[MAX_DEVICE_ID_LEN]; + CM_Get_Device_IDW(childID, buffer, MAX_DEVICE_ID_LEN, 0); + + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "windows_get_device_registry_files: Opening child device %ld - %ls", childID, buffer); + + status = CM_Get_DevNode_Registry_PropertyW(childID, CM_DRP_CLASSGUID, NULL, &childGuid, &childGuidSize, 0); + if (status != CR_SUCCESS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_get_device_registry_files: unable to obtain GUID for:%ld error:%ld", childID, status); + + result = VK_ERROR_INCOMPATIBLE_DRIVER; + continue; + } + + if (wcscmp(childGuid, softwareComponentGUID) != 0) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT | log_target_flag, 0, + "windows_get_device_registry_files: GUID for %ld is not SoftwareComponent skipping", childID); + continue; + } + + if (windows_get_device_registry_entry(inst, reg_data, reg_data_size, childID, value_name, &result)) { + found = true; + break; // check next-display-device + } + + } while (CM_Get_Sibling(&childID, childID, 0) == CR_SUCCESS); + } + + loader_instance_heap_free(inst, pDeviceNames); + } + + if (!found && result != VK_ERROR_OUT_OF_HOST_MEMORY) { + loader_log(inst, log_target_flag, 0, "windows_get_device_registry_files: found no registry files"); + result = VK_ERROR_INCOMPATIBLE_DRIVER; + } + + return result; +} + +VkResult windows_get_registry_files(const struct loader_instance *inst, char *location, bool use_secondary_hive, char **reg_data, + PDWORD reg_data_size) { + // This list contains all of the allowed ICDs. This allows us to verify that a device is actually present from the vendor + // specified. This does disallow other vendors, but any new driver should use the device-specific registries anyway. + const struct { + const char *filename; + unsigned int vendor_id; + } known_drivers[] = { +#if defined(_WIN64) + { + .filename = "igvk64.json", + .vendor_id = 0x8086, + }, + { + .filename = "nv-vk64.json", + .vendor_id = 0x10de, + }, + { + .filename = "amd-vulkan64.json", + .vendor_id = 0x1002, + }, + { + .filename = "amdvlk64.json", + .vendor_id = 0x1002, + }, +#else + { + .filename = "igvk32.json", + .vendor_id = 0x8086, + }, + { + .filename = "nv-vk32.json", + .vendor_id = 0x10de, + }, + { + .filename = "amd-vulkan32.json", + .vendor_id = 0x1002, + }, + { + .filename = "amdvlk32.json", + .vendor_id = 0x1002, + }, +#endif + }; + + LONG rtn_value; + HKEY hive = DEFAULT_VK_REGISTRY_HIVE, key; + DWORD access_flags; + char name[2048]; + char *loc = location; + char *next; + DWORD name_size = sizeof(name); + DWORD value; + DWORD value_size = sizeof(value); + VkResult result = VK_SUCCESS; + bool found = false; + IDXGIFactory1 *dxgi_factory = NULL; + bool is_driver = !strcmp(location, VK_DRIVERS_INFO_REGISTRY_LOC); + uint32_t log_target_flag = is_driver ? VULKAN_LOADER_DRIVER_BIT : VULKAN_LOADER_LAYER_BIT; + + assert(reg_data != NULL && "windows_get_registry_files: reg_data is a NULL pointer"); + + if (is_driver) { + HRESULT hres = fpCreateDXGIFactory1(&IID_IDXGIFactory1, (void **)&dxgi_factory); + if (hres != S_OK) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | log_target_flag, 0, + "windows_get_registry_files: Failed to create dxgi factory for ICD registry verification. No ICDs will be " + "added from " + "legacy registry locations"); + goto out; + } + } + + while (*loc) { + next = loader_get_next_path(loc); + access_flags = KEY_QUERY_VALUE; + rtn_value = RegOpenKeyEx(hive, loc, 0, access_flags, &key); + if (ERROR_SUCCESS == rtn_value) { + for (DWORD idx = 0; + (rtn_value = RegEnumValue(key, idx++, name, &name_size, NULL, NULL, (LPBYTE)&value, &value_size)) == ERROR_SUCCESS; + name_size = sizeof(name), value_size = sizeof(value)) { + if (value_size == sizeof(value) && value == 0) { + if (NULL == *reg_data) { + *reg_data = loader_instance_heap_alloc(inst, *reg_data_size, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == *reg_data) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_get_registry_files: Failed to allocate space for registry data for key %s", name); + RegCloseKey(key); + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + *reg_data[0] = '\0'; + } else if (strlen(*reg_data) + name_size + 1 > *reg_data_size) { + void *new_ptr = loader_instance_heap_realloc(inst, *reg_data, *reg_data_size, *reg_data_size * 2, + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == new_ptr) { + loader_log( + inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_get_registry_files: Failed to reallocate space for registry value of size %ld for key %s", + *reg_data_size * 2, name); + RegCloseKey(key); + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + *reg_data = new_ptr; + *reg_data_size *= 2; + } + + // We've now found a json file. If this is an ICD, we still need to check if there is actually a device + // that matches this ICD + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "Located json file \"%s\" from registry \"%s\\%s\"", name, + hive == DEFAULT_VK_REGISTRY_HIVE ? DEFAULT_VK_REGISTRY_HIVE_STR : SECONDARY_VK_REGISTRY_HIVE_STR, + location); + if (is_driver) { + uint32_t i = 0; + for (i = 0; i < sizeof(known_drivers) / sizeof(known_drivers[0]); ++i) { + if (!strcmp(name + strlen(name) - strlen(known_drivers[i].filename), known_drivers[i].filename)) { + break; + } + } + if (i == sizeof(known_drivers) / sizeof(known_drivers[0])) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "Driver %s is not recognized as a known driver. It will be assumed to be active", name); + } else { + bool found_gpu = false; + for (int j = 0;; ++j) { + IDXGIAdapter1 *adapter; + HRESULT hres = dxgi_factory->lpVtbl->EnumAdapters1(dxgi_factory, j, &adapter); + if (hres == DXGI_ERROR_NOT_FOUND) { + break; + } else if (hres != S_OK) { + loader_log(inst, VULKAN_LOADER_WARN_BIT | log_target_flag, 0, + "Failed to enumerate DXGI adapters at index %d. As a result, drivers may be skipped", + j); + continue; + } + + DXGI_ADAPTER_DESC1 description; + hres = adapter->lpVtbl->GetDesc1(adapter, &description); + if (hres != S_OK) { + loader_log( + inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "Failed to get DXGI adapter information at index %d. As a result, drivers may be skipped", + j); + continue; + } + + if (description.VendorId == known_drivers[i].vendor_id) { + found_gpu = true; + break; + } + } + + if (!found_gpu) { + loader_log(inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "Dropping driver %s as no corresponding DXGI adapter was found", name); + continue; + } + } + } + + if (strlen(*reg_data) == 0) { + // The list is emtpy. Add the first entry. + (void)snprintf(*reg_data, name_size + 1, "%s", name); + found = true; + } else { + // At this point the reg_data variable contains other JSON paths, likely from the PNP/device section + // of the registry that we want to have precedence over this non-device specific section of the registry. + // To make sure we avoid enumerating old JSON files/drivers that might be present in the non-device specific + // area of the registry when a newer device specific JSON file is present, do a check before adding. + // Find the file name, without path, of the JSON file found in the non-device specific registry location. + // If the same JSON file name is already found in the list, don't add it again. + bool foundDuplicate = false; + char *pLastSlashName = strrchr(name, '\\'); + if (pLastSlashName != NULL) { + char *foundMatch = strstr(*reg_data, pLastSlashName + 1); + if (foundMatch != NULL) { + foundDuplicate = true; + } + } + // Only skip if we are adding a driver and a duplicate was found + if (!is_driver || (is_driver && foundDuplicate == false)) { + // Add the new entry to the list. + (void)snprintf(*reg_data + strlen(*reg_data), name_size + 2, "%c%s", PATH_SEPARATOR, name); + found = true; + } else { + loader_log( + inst, VULKAN_LOADER_INFO_BIT | log_target_flag, 0, + "Skipping adding of json file \"%s\" from registry \"%s\\%s\" to the list due to duplication", name, + hive == DEFAULT_VK_REGISTRY_HIVE ? DEFAULT_VK_REGISTRY_HIVE_STR : SECONDARY_VK_REGISTRY_HIVE_STR, + location); + } + } + } + } + RegCloseKey(key); + } + + // Advance the location - if the next location is in the secondary hive, then reset the locations and advance the hive + if (use_secondary_hive && (hive == DEFAULT_VK_REGISTRY_HIVE) && (*next == '\0')) { + loc = location; + hive = SECONDARY_VK_REGISTRY_HIVE; + } else { + loc = next; + } + } + + if (!found && result != VK_ERROR_OUT_OF_HOST_MEMORY) { + loader_log(inst, log_target_flag, 0, "Found no registry files in %s\\%s", + (hive == DEFAULT_VK_REGISTRY_HIVE) ? DEFAULT_VK_REGISTRY_HIVE_STR : SECONDARY_VK_REGISTRY_HIVE_STR, location); + result = VK_ERROR_INCOMPATIBLE_DRIVER; + } + +out: + if (is_driver && dxgi_factory != NULL) { + dxgi_factory->lpVtbl->Release(dxgi_factory); + } + + return result; +} + +// Read manifest JSON files using the Windows driver interface +VkResult windows_read_manifest_from_d3d_adapters(const struct loader_instance *inst, char **reg_data, PDWORD reg_data_size, + const wchar_t *value_name) { + VkResult result = VK_INCOMPLETE; + LoaderEnumAdapters2 adapters = {.adapter_count = 0, .adapters = NULL}; + LoaderQueryRegistryInfo *full_info = NULL; + size_t full_info_size = 0; + char *json_path = NULL; + size_t json_path_size = 0; + + HMODULE gdi32_dll = GetModuleHandle("gdi32.dll"); + if (gdi32_dll == NULL) { + result = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + PFN_LoaderEnumAdapters2 fpLoaderEnumAdapters2 = + (PFN_LoaderEnumAdapters2)(void *)GetProcAddress(gdi32_dll, "D3DKMTEnumAdapters2"); + PFN_LoaderQueryAdapterInfo fpLoaderQueryAdapterInfo = + (PFN_LoaderQueryAdapterInfo)(void *)GetProcAddress(gdi32_dll, "D3DKMTQueryAdapterInfo"); + if (fpLoaderEnumAdapters2 == NULL || fpLoaderQueryAdapterInfo == NULL) { + result = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + // Get all of the adapters + NTSTATUS status = fpLoaderEnumAdapters2(&adapters); + if (status == STATUS_SUCCESS && adapters.adapter_count > 0) { + adapters.adapters = loader_instance_heap_alloc(inst, sizeof(*adapters.adapters) * adapters.adapter_count, + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (adapters.adapters == NULL) { + goto out; + } + status = fpLoaderEnumAdapters2(&adapters); + } + if (status != STATUS_SUCCESS) { + goto out; + } + + // If that worked, we need to get the manifest file(s) for each adapter + for (ULONG i = 0; i < adapters.adapter_count; ++i) { + // The first query should just check if the field exists and how big it is + LoaderQueryRegistryInfo filename_info = { + .query_type = LOADER_QUERY_REGISTRY_ADAPTER_KEY, + .query_flags = + { + .translate_path = true, + }, + .value_type = REG_MULTI_SZ, + .physical_adapter_index = 0, + }; + size_t value_name_size = wcslen(value_name); + wcsncpy_s(filename_info.value_name, MAX_PATH, value_name, value_name_size); + LoaderQueryAdapterInfo query_info; + query_info.handle = adapters.adapters[i].handle; + query_info.type = LOADER_QUERY_TYPE_REGISTRY; + query_info.private_data = &filename_info; + query_info.private_data_size = sizeof(filename_info); + status = fpLoaderQueryAdapterInfo(&query_info); + + // This error indicates that the type didn't match, so we'll try a REG_SZ + if (status != STATUS_SUCCESS) { + filename_info.value_type = REG_SZ; + status = fpLoaderQueryAdapterInfo(&query_info); + } + + if (status != STATUS_SUCCESS || filename_info.status != LOADER_QUERY_REGISTRY_STATUS_BUFFER_OVERFLOW) { + continue; + } + + while (status == STATUS_SUCCESS && + ((LoaderQueryRegistryInfo *)query_info.private_data)->status == LOADER_QUERY_REGISTRY_STATUS_BUFFER_OVERFLOW) { + bool needs_copy = (full_info == NULL); + size_t full_size = sizeof(LoaderQueryRegistryInfo) + filename_info.output_value_size; + void *buffer = + loader_instance_heap_realloc(inst, full_info, full_info_size, full_size, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (buffer == NULL) { + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + full_info = buffer; + full_info_size = full_size; + + if (needs_copy) { + memcpy(full_info, &filename_info, sizeof(LoaderQueryRegistryInfo)); + } + query_info.private_data = full_info; + query_info.private_data_size = (UINT)full_info_size; + status = fpLoaderQueryAdapterInfo(&query_info); + } + + if (status != STATUS_SUCCESS || full_info->status != LOADER_QUERY_REGISTRY_STATUS_SUCCESS) { + goto out; + } + + // Convert the wide string to a narrow string + void *buffer = loader_instance_heap_realloc(inst, json_path, json_path_size, full_info->output_value_size, + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (buffer == NULL) { + result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + json_path = buffer; + json_path_size = full_info->output_value_size; + + // Iterate over each component string + for (const wchar_t *curr_path = full_info->output_string; curr_path[0] != '\0'; curr_path += wcslen(curr_path) + 1) { + WideCharToMultiByte(CP_UTF8, 0, curr_path, -1, json_path, (int)json_path_size, NULL, NULL); + + // Add the string to the output list + result = VK_SUCCESS; + windows_add_json_entry(inst, reg_data, reg_data_size, (LPCTSTR)L"EnumAdapters", REG_SZ, json_path, + (DWORD)strlen(json_path) + 1, &result); + if (result != VK_SUCCESS) { + goto out; + } + + // If this is a string and not a multi-string, we don't want to go through the loop more than once + if (full_info->value_type == REG_SZ) { + break; + } + } + } + +out: + loader_instance_heap_free(inst, json_path); + loader_instance_heap_free(inst, full_info); + loader_instance_heap_free(inst, adapters.adapters); + + return result; +} + +// Look for data files in the registry. +VkResult windows_read_data_files_in_registry(const struct loader_instance *inst, enum loader_data_files_type data_file_type, + bool warn_if_not_present, char *registry_location, + struct loader_string_list *out_files) { + VkResult vk_result = VK_SUCCESS; + char *search_path = NULL; + uint32_t log_target_flag = 0; + + if (data_file_type == LOADER_DATA_FILE_MANIFEST_DRIVER) { + log_target_flag = VULKAN_LOADER_DRIVER_BIT; + loader_log(inst, log_target_flag, 0, "Checking for Driver Manifest files in Registry at %s\\%s", + DEFAULT_VK_REGISTRY_HIVE_STR, registry_location); + } else { + log_target_flag = VULKAN_LOADER_LAYER_BIT; + loader_log(inst, log_target_flag, 0, "Checking for Layer Manifest files in Registry at %s\\%s", + DEFAULT_VK_REGISTRY_HIVE_STR, registry_location); + } + + // These calls look at the PNP/Device section of the registry. + VkResult regHKR_result = VK_SUCCESS; + DWORD reg_size = 4096; + if (!strncmp(registry_location, VK_DRIVERS_INFO_REGISTRY_LOC, sizeof(VK_DRIVERS_INFO_REGISTRY_LOC))) { + // If we're looking for drivers we need to try enumerating adapters + regHKR_result = windows_read_manifest_from_d3d_adapters(inst, &search_path, ®_size, LoaderPnpDriverRegistryWide()); + if (regHKR_result == VK_INCOMPLETE) { + regHKR_result = + windows_get_device_registry_files(inst, log_target_flag, &search_path, ®_size, LoaderPnpDriverRegistry()); + } + } else if (!strncmp(registry_location, VK_ELAYERS_INFO_REGISTRY_LOC, sizeof(VK_ELAYERS_INFO_REGISTRY_LOC))) { + regHKR_result = windows_read_manifest_from_d3d_adapters(inst, &search_path, ®_size, LoaderPnpELayerRegistryWide()); + if (regHKR_result == VK_INCOMPLETE) { + regHKR_result = + windows_get_device_registry_files(inst, log_target_flag, &search_path, ®_size, LoaderPnpELayerRegistry()); + } + } else if (!strncmp(registry_location, VK_ILAYERS_INFO_REGISTRY_LOC, sizeof(VK_ILAYERS_INFO_REGISTRY_LOC))) { + regHKR_result = windows_read_manifest_from_d3d_adapters(inst, &search_path, ®_size, LoaderPnpILayerRegistryWide()); + if (regHKR_result == VK_INCOMPLETE) { + regHKR_result = + windows_get_device_registry_files(inst, log_target_flag, &search_path, ®_size, LoaderPnpILayerRegistry()); + } + } + + if (regHKR_result == VK_ERROR_OUT_OF_HOST_MEMORY) { + vk_result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + // This call looks into the Khronos non-device specific section of the registry for layer files. + bool use_secondary_hive = (data_file_type != LOADER_DATA_FILE_MANIFEST_DRIVER) && (!is_high_integrity()); + VkResult reg_result = windows_get_registry_files(inst, registry_location, use_secondary_hive, &search_path, ®_size); + if (reg_result == VK_ERROR_OUT_OF_HOST_MEMORY) { + vk_result = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + if ((VK_SUCCESS != reg_result && VK_SUCCESS != regHKR_result) || NULL == search_path) { + if (data_file_type == LOADER_DATA_FILE_MANIFEST_DRIVER) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT | log_target_flag, 0, + "windows_read_data_files_in_registry: Registry lookup failed to get ICD manifest files. Possibly missing " + "Vulkan driver?"); + vk_result = VK_ERROR_INCOMPATIBLE_DRIVER; + } else { + if (warn_if_not_present) { + if (data_file_type == LOADER_DATA_FILE_MANIFEST_IMPLICIT_LAYER || + data_file_type == LOADER_DATA_FILE_MANIFEST_EXPLICIT_LAYER) { + // This is only a warning for layers + loader_log(inst, VULKAN_LOADER_WARN_BIT | log_target_flag, 0, + "windows_read_data_files_in_registry: Registry lookup failed to get layer manifest files."); + } else { + // This is only a warning for general data files + loader_log(inst, VULKAN_LOADER_WARN_BIT | log_target_flag, 0, + "windows_read_data_files_in_registry: Registry lookup failed to get data files."); + } + } + // Return success for now since it's not critical for layers + vk_result = VK_SUCCESS; + } + goto out; + } + + // Now, parse the paths and add any manifest files found in them. + vk_result = add_data_files(inst, search_path, out_files, false); + +out: + + loader_instance_heap_free(inst, search_path); + + return vk_result; +} + +VkResult enumerate_adapter_physical_devices(struct loader_instance *inst, struct loader_icd_term *icd_term, LUID luid, + uint32_t *icd_phys_devs_array_count, + struct loader_icd_physical_devices *icd_phys_devs_array) { + uint32_t count = 0; + VkResult res = icd_term->scanned_icd->EnumerateAdapterPhysicalDevices(icd_term->instance, luid, &count, NULL); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + return res; + } else if (res == VK_ERROR_INCOMPATIBLE_DRIVER || res == VK_ERROR_INITIALIZATION_FAILED || 0 == count) { + return VK_SUCCESS; // This driver doesn't support the adapter + } else if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Failed to convert DXGI adapter into Vulkan physical device with unexpected error code: %d", res); + return VK_SUCCESS; + } + + // Take a pointer to the last element of icd_phys_devs_array to simplify usage + struct loader_icd_physical_devices *next_icd_phys_devs = &icd_phys_devs_array[*icd_phys_devs_array_count]; + + // Get the actual physical devices + do { + next_icd_phys_devs->physical_devices = loader_instance_heap_realloc( + inst, next_icd_phys_devs->physical_devices, next_icd_phys_devs->device_count * sizeof(VkPhysicalDevice), + count * sizeof(VkPhysicalDevice), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (next_icd_phys_devs->physical_devices == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + next_icd_phys_devs->device_count = count; + } while ((res = icd_term->scanned_icd->EnumerateAdapterPhysicalDevices(icd_term->instance, luid, &count, + next_icd_phys_devs->physical_devices)) == VK_INCOMPLETE); + + if (res != VK_SUCCESS) { + loader_instance_heap_free(inst, next_icd_phys_devs->physical_devices); + next_icd_phys_devs->physical_devices = NULL; + // Unless OOHM occurs, only return VK_SUCCESS + if (res != VK_ERROR_OUT_OF_HOST_MEMORY) { + res = VK_SUCCESS; + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, "Failed to convert DXGI adapter into Vulkan physical device"); + } + return res; + } + + // Because the loader calls EnumerateAdapterPhysicalDevices on all drivers with each DXGI Adapter, if there are multiple drivers + // that share a luid the physical device will get queried multiple times. We can prevent that by not adding them if the + // enumerated physical devices have already been added. + bool already_enumerated = false; + for (uint32_t j = 0; j < *icd_phys_devs_array_count; j++) { + if (count == icd_phys_devs_array[j].device_count) { + bool matches = true; + for (uint32_t k = 0; k < icd_phys_devs_array[j].device_count; k++) { + if (icd_phys_devs_array[j].physical_devices[k] != next_icd_phys_devs->physical_devices[k]) { + matches = false; + break; + } + } + if (matches) { + already_enumerated = true; + } + } + } + if (!already_enumerated) { + next_icd_phys_devs->device_count = count; + next_icd_phys_devs->icd_term = icd_term; + next_icd_phys_devs->windows_adapter_luid = luid; + (*icd_phys_devs_array_count)++; + } else { + // Avoid memory leak in case of the already_enumerated hitting true + // at the last enumerate_adapter_physical_devices call in the outer loop + loader_instance_heap_free(inst, next_icd_phys_devs->physical_devices); + next_icd_phys_devs->physical_devices = NULL; + } + + return VK_SUCCESS; +} + +// Whenever there are multiple drivers for the same hardware and one of the drivers is an implementation layered on top of another +// API (such as the Dozen driver which converts vulkan to Dx12), we want to make sure the layered driver appears after the 'native' +// driver. This function iterates over all physical devices and make sure any with matching LUID's are sorted such that drivers with +// a underlyingAPI of VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT are ordered after drivers without it. +void sort_physical_devices_with_same_luid(struct loader_instance *inst, uint32_t icd_phys_devs_array_count, + struct loader_icd_physical_devices *icd_phys_devs_array) { + bool app_is_vulkan_1_1 = loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version); + + for (uint32_t i = 0; icd_phys_devs_array_count > 1 && i < icd_phys_devs_array_count - 1; i++) { + for (uint32_t j = i + 1; j < icd_phys_devs_array_count; j++) { + // Only want to reorder physical devices if their ICD's LUID's match + if ((icd_phys_devs_array[i].windows_adapter_luid.HighPart != icd_phys_devs_array[j].windows_adapter_luid.HighPart) || + (icd_phys_devs_array[i].windows_adapter_luid.LowPart != icd_phys_devs_array[j].windows_adapter_luid.LowPart)) { + continue; + } + + VkLayeredDriverUnderlyingApiMSFT underlyingAPI = VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT; + VkPhysicalDeviceLayeredDriverPropertiesMSFT layered_driver_properties_msft = {0}; + layered_driver_properties_msft.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT; + VkPhysicalDeviceProperties2 props2 = {0}; + props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + props2.pNext = (void *)&layered_driver_properties_msft; + + // Because there may be multiple physical devices associated with each ICD, we need to check each physical device + // whether it is layered + for (uint32_t k = 0; k < icd_phys_devs_array[i].device_count; k++) { + VkPhysicalDeviceProperties dev_props = {0}; + icd_phys_devs_array[i].icd_term->dispatch.GetPhysicalDeviceProperties(icd_phys_devs_array[i].physical_devices[k], + &dev_props); + + bool device_is_1_1_capable = + loader_check_version_meets_required(LOADER_VERSION_1_1_0, loader_make_version(dev_props.apiVersion)); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = NULL; + if (app_is_vulkan_1_1 && device_is_1_1_capable) { + GetPhysDevProps2 = icd_phys_devs_array[i].icd_term->dispatch.GetPhysicalDeviceProperties2; + } else { + GetPhysDevProps2 = (PFN_vkGetPhysicalDeviceProperties2)icd_phys_devs_array[i] + .icd_term->dispatch.GetPhysicalDeviceProperties2KHR; + } + if (GetPhysDevProps2) { + GetPhysDevProps2(icd_phys_devs_array[i].physical_devices[k], &props2); + if (layered_driver_properties_msft.underlyingAPI != VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT) { + underlyingAPI = layered_driver_properties_msft.underlyingAPI; + break; + } + } + } + if (underlyingAPI == VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT) { + struct loader_icd_physical_devices swap_icd = icd_phys_devs_array[i]; + icd_phys_devs_array[i] = icd_phys_devs_array[j]; + icd_phys_devs_array[j] = swap_icd; + } + } + } +} + +// This function allocates icd_phys_devs_array which must be freed by the caller if not null +VkResult windows_read_sorted_physical_devices(struct loader_instance *inst, uint32_t *icd_phys_devs_array_count, + struct loader_icd_physical_devices **icd_phys_devs_array) { + VkResult res = VK_SUCCESS; + + uint32_t icd_phys_devs_array_size = 0; + struct loader_icd_term *icd_term = NULL; + IDXGIFactory6 *dxgi_factory = NULL; + HRESULT hres = fpCreateDXGIFactory1(&IID_IDXGIFactory6, (void **)&dxgi_factory); + if (hres != S_OK) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, "Failed to create DXGI factory 6. Physical devices will not be sorted"); + goto out; + } + icd_phys_devs_array_size = 16; + *icd_phys_devs_array = loader_instance_heap_calloc(inst, icd_phys_devs_array_size * sizeof(struct loader_icd_physical_devices), + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (*icd_phys_devs_array == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + for (uint32_t i = 0;; ++i) { + IDXGIAdapter1 *adapter; + hres = dxgi_factory->lpVtbl->EnumAdapterByGpuPreference(dxgi_factory, i, DXGI_GPU_PREFERENCE_UNSPECIFIED, + &IID_IDXGIAdapter1, (void **)&adapter); + if (hres == DXGI_ERROR_NOT_FOUND) { + break; // No more adapters + } else if (hres != S_OK) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "Failed to enumerate adapters by GPU preference at index %u. This adapter will not be sorted", i); + break; + } + + DXGI_ADAPTER_DESC1 description; + hres = adapter->lpVtbl->GetDesc1(adapter, &description); + if (hres != S_OK) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, "Failed to get adapter LUID index %u. This adapter will not be sorted", i); + continue; + } + + icd_term = inst->icd_terms; + while (NULL != icd_term) { + // This is the new behavior, which cannot be run unless the ICD provides EnumerateAdapterPhysicalDevices + if (icd_term->scanned_icd->EnumerateAdapterPhysicalDevices == NULL) { + icd_term = icd_term->next; + continue; + } + + if (icd_phys_devs_array_size <= *icd_phys_devs_array_count) { + uint32_t old_size = icd_phys_devs_array_size * sizeof(struct loader_icd_physical_devices); + *icd_phys_devs_array = loader_instance_heap_realloc(inst, *icd_phys_devs_array, old_size, 2 * old_size, + VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (*icd_phys_devs_array == NULL) { + adapter->lpVtbl->Release(adapter); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + icd_phys_devs_array_size *= 2; + } + (*icd_phys_devs_array)[*icd_phys_devs_array_count].device_count = 0; + (*icd_phys_devs_array)[*icd_phys_devs_array_count].physical_devices = NULL; + + res = enumerate_adapter_physical_devices(inst, icd_term, description.AdapterLuid, icd_phys_devs_array_count, + *icd_phys_devs_array); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + adapter->lpVtbl->Release(adapter); + goto out; + } + icd_term = icd_term->next; + } + + adapter->lpVtbl->Release(adapter); + } + + dxgi_factory->lpVtbl->Release(dxgi_factory); + + sort_physical_devices_with_same_luid(inst, *icd_phys_devs_array_count, *icd_phys_devs_array); + +out: + if (*icd_phys_devs_array_count == 0 && *icd_phys_devs_array != NULL) { + loader_instance_heap_free(inst, *icd_phys_devs_array); + *icd_phys_devs_array = NULL; + } + return res; +} + +VkLoaderFeatureFlags windows_initialize_dxgi(void) { + VkLoaderFeatureFlags feature_flags = 0; + IDXGIFactory6 *dxgi_factory = NULL; + HRESULT hres = fpCreateDXGIFactory1(&IID_IDXGIFactory6, (void **)&dxgi_factory); + if (hres == S_OK) { + feature_flags |= VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING; + dxgi_factory->lpVtbl->Release(dxgi_factory); + } + return feature_flags; +} + +// Sort the VkPhysicalDevices that are part of the current group with the list passed in from the sorted list. +// Multiple groups could have devices out of the same sorted list, however, a single group's devices must all come +// from the same sorted list. +void windows_sort_devices_in_group(struct loader_instance *inst, struct VkPhysicalDeviceGroupProperties *group_props, + struct loader_icd_physical_devices *icd_sorted_list) { + uint32_t cur_index = 0; + for (uint32_t dev = 0; dev < icd_sorted_list->device_count; ++dev) { + for (uint32_t grp_dev = cur_index; grp_dev < group_props->physicalDeviceCount; ++grp_dev) { + if (icd_sorted_list->physical_devices[dev] == group_props->physicalDevices[grp_dev]) { + if (cur_index != grp_dev) { + VkPhysicalDevice swap_dev = group_props->physicalDevices[cur_index]; + group_props->physicalDevices[cur_index] = group_props->physicalDevices[grp_dev]; + group_props->physicalDevices[grp_dev] = swap_dev; + } + cur_index++; + break; + } + } + } + if (cur_index == 0) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "windows_sort_devices_in_group: Never encountered a device in the sorted list group"); + } +} + +// This function sorts an array in physical device groups based on the sorted physical device information +VkResult windows_sort_physical_device_groups(struct loader_instance *inst, const uint32_t group_count, + struct loader_physical_device_group_term *sorted_group_term, + const uint32_t sorted_device_count, + struct loader_icd_physical_devices *sorted_phys_dev_array) { + if (0 == group_count || NULL == sorted_group_term) { + loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, + "windows_sort_physical_device_groups: Called with invalid information (Group count %d, Sorted Info %p)", + group_count, sorted_group_term); + return VK_ERROR_INITIALIZATION_FAILED; + } + + uint32_t new_index = 0; + for (uint32_t icd = 0; icd < sorted_device_count; ++icd) { + for (uint32_t dev = 0; dev < sorted_phys_dev_array[icd].device_count; ++dev) { + // Find a group associated with a given device + for (uint32_t group = new_index; group < group_count; ++group) { + bool device_found = false; + // Look for the current sorted device in a group and put it in the correct location if it isn't already + for (uint32_t grp_dev = 0; grp_dev < sorted_group_term[group].group_props.physicalDeviceCount; ++grp_dev) { + if (sorted_group_term[group].group_props.physicalDevices[grp_dev] == + sorted_phys_dev_array[icd].physical_devices[dev]) { + // First, sort devices inside of group to be in priority order + windows_sort_devices_in_group(inst, &sorted_group_term[group].group_props, &sorted_phys_dev_array[icd]); + + // Second, move the group up in priority if it needs to be + if (new_index != group) { + struct loader_physical_device_group_term tmp = sorted_group_term[new_index]; + sorted_group_term[new_index] = sorted_group_term[group]; + sorted_group_term[group] = tmp; + } + device_found = true; + new_index++; + break; + } + } + if (device_found) { + break; + } + } + } + } + return VK_SUCCESS; +} + +char *windows_get_app_package_manifest_path(const struct loader_instance *inst) { + // These functions are only available on Windows 8 and above, load them dynamically for compatibility with Windows 7 + typedef LONG(WINAPI * PFN_GetPackagesByPackageFamily)(PCWSTR, UINT32 *, PWSTR *, UINT32 *, WCHAR *); + PFN_GetPackagesByPackageFamily fpGetPackagesByPackageFamily = + (PFN_GetPackagesByPackageFamily)(void *)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetPackagesByPackageFamily"); + if (!fpGetPackagesByPackageFamily) { + return NULL; + } + typedef LONG(WINAPI * PFN_GetPackagePathByFullName)(PCWSTR, UINT32 *, PWSTR); + PFN_GetPackagePathByFullName fpGetPackagePathByFullName = + (PFN_GetPackagePathByFullName)(void *)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetPackagePathByFullName"); + if (!fpGetPackagePathByFullName) { + return NULL; + } + + UINT32 numPackages = 0, bufferLength = 0; + // This literal string identifies the Microsoft-published OpenCL, OpenGL, and Vulkan Compatibility Pack, which contains + // OpenGLOn12, OpenCLOn12, and VulkanOn12 (aka Dozen) mappinglayers + PCWSTR familyName = L"Microsoft.D3DMappingLayers_8wekyb3d8bbwe"; + if (ERROR_INSUFFICIENT_BUFFER != fpGetPackagesByPackageFamily(familyName, &numPackages, NULL, &bufferLength, NULL) || + numPackages == 0 || bufferLength == 0) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "windows_get_app_package_manifest_path: Failed to find mapping layers packages by family name"); + return NULL; + } + + char *ret = NULL; + WCHAR *buffer = loader_instance_heap_alloc(inst, sizeof(WCHAR) * bufferLength, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + PWSTR *packages = loader_instance_heap_alloc(inst, sizeof(PWSTR) * numPackages, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (!buffer || !packages) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "windows_get_app_package_manifest_path: Failed to allocate memory for package names"); + goto cleanup; + } + + if (ERROR_SUCCESS != fpGetPackagesByPackageFamily(familyName, &numPackages, packages, &bufferLength, buffer)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "windows_get_app_package_manifest_path: Failed to mapping layers package full names"); + goto cleanup; + } + + UINT32 pathLength = 0; + WCHAR path[MAX_PATH]; + memset(path, 0, sizeof(path)); + if (ERROR_INSUFFICIENT_BUFFER != fpGetPackagePathByFullName(packages[0], &pathLength, NULL) || pathLength > MAX_PATH || + ERROR_SUCCESS != fpGetPackagePathByFullName(packages[0], &pathLength, path)) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "windows_get_app_package_manifest_path: Failed to get mapping layers package path"); + goto cleanup; + } + + int narrowPathLength = WideCharToMultiByte(CP_ACP, 0, path, -1, NULL, 0, NULL, NULL); + if (narrowPathLength == 0) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "windows_get_app_package_manifest_path: Failed to convert path from wide to narrow"); + goto cleanup; + } + + ret = loader_instance_heap_alloc(inst, narrowPathLength, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (!ret) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "windows_get_app_package_manifest_path: Failed to allocate path"); + goto cleanup; + } + + narrowPathLength = WideCharToMultiByte(CP_ACP, 0, path, -1, ret, narrowPathLength, NULL, NULL); + assert((size_t)narrowPathLength == strlen(ret) + 1); + +cleanup: + loader_instance_heap_free(inst, buffer); + loader_instance_heap_free(inst, packages); + return ret; +} + +VkResult get_settings_path_if_exists_in_registry_key(const struct loader_instance *inst, char **out_path, HKEY key) { + VkResult result = VK_ERROR_INITIALIZATION_FAILED; + + char name[MAX_STRING_SIZE] = {0}; + DWORD name_size = sizeof(name); + + *out_path = NULL; + + LONG rtn_value = ERROR_SUCCESS; + for (DWORD idx = 0; rtn_value == ERROR_SUCCESS; idx++) { + DWORD value = 0; + DWORD value_size = sizeof(value); + rtn_value = RegEnumValue(key, idx, name, &name_size, NULL, NULL, (LPBYTE)&value, &value_size); + + if (ERROR_SUCCESS != rtn_value) { + break; + } + + uint32_t start_of_path_filename = 0; + for (uint32_t last_char = name_size; last_char > 0; last_char--) { + if (name[last_char] == '\\') { + start_of_path_filename = last_char + 1; + break; + } + } + + if (strcmp(VK_LOADER_SETTINGS_FILENAME, &(name[start_of_path_filename])) == 0) { + // Make sure the path exists first + if (!loader_platform_file_exists(name)) { + loader_log( + inst, VULKAN_LOADER_DEBUG_BIT, 0, + "Registry contained entry to vk_loader_settings.json but the corresponding file does not exist, ignoring"); + return VK_ERROR_INITIALIZATION_FAILED; + } + + *out_path = loader_instance_heap_calloc(inst, name_size + 1, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (*out_path == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + loader_strncpy(*out_path, name_size + 1, name, name_size); + (*out_path)[name_size] = '\0'; + result = VK_SUCCESS; + break; + } + } + + return result; +} + +VkResult windows_get_loader_settings_file_path(const struct loader_instance *inst, char **out_path) { + VkResult result = VK_SUCCESS; + DWORD access_flags = KEY_QUERY_VALUE; + LONG rtn_value = 0; + HKEY key = NULL; + *out_path = NULL; + + // Search in HKEY_CURRENT_USER first if we are running without admin privileges + // Exit if a settings file was found. + // Otherwise check in HKEY_LOCAL_MACHINE. + + if (!is_high_integrity()) { + rtn_value = RegOpenKeyEx(HKEY_CURRENT_USER, VK_SETTINGS_INFO_REGISTRY_LOC, 0, access_flags, &key); + if (ERROR_SUCCESS == rtn_value) { + result = get_settings_path_if_exists_in_registry_key(inst, out_path, key); + + // Either we got OOM and *must* exit or we successfully found the settings file and can exit + if (result == VK_ERROR_OUT_OF_HOST_MEMORY || result == VK_SUCCESS) { + goto out; + } + RegCloseKey(key); + key = NULL; + } + } + + rtn_value = RegOpenKeyEx(HKEY_LOCAL_MACHINE, VK_SETTINGS_INFO_REGISTRY_LOC, 0, access_flags, &key); + if (ERROR_SUCCESS != rtn_value) { + result = VK_ERROR_FEATURE_NOT_PRESENT; + goto out; + } + + result = get_settings_path_if_exists_in_registry_key(inst, out_path, key); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + +out: + if (NULL != key) { + RegCloseKey(key); + } + + return result; +} + +#endif // _WIN32 diff --git a/local/recipes/libs/vulkan-loader/source/loader/loader_windows.h b/local/recipes/libs/vulkan-loader/source/loader/loader_windows.h new file mode 100644 index 0000000000..b783909ca5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/loader_windows.h @@ -0,0 +1,125 @@ +/* + * + * Copyright (c) 2014-2022 The Khronos Group Inc. + * Copyright (c) 2014-2022 Valve Corporation + * Copyright (c) 2014-2022 LunarG, Inc. + * 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#pragma once + +#if defined(_WIN32) + +#include "loader_common.h" + +#include +#include +#include + +// Windows specific initialization functionality +void windows_initialization(void); + +// Append the JSON path data to the list and allocate/grow the list if it's not large enough. +// Function returns true if filename was appended to reg_data list. +// Caller should free reg_data. +bool windows_add_json_entry(const struct loader_instance *inst, + char **reg_data, // list of JSON files + PDWORD total_size, // size of reg_data + LPCSTR key_name, // key name - used for debug prints - i.e. VulkanDriverName + DWORD key_type, // key data type + LPSTR json_path, // JSON string to add to the list reg_data + DWORD json_size, // size in bytes of json_path + VkResult *result); + +// Find the list of registry files (names VulkanDriverName/VulkanDriverNameWow) in hkr. +// +// This function looks for filename in given device handle, filename is then added to return list +// function return true if filename was appended to reg_data list +// If error occurs result is updated with failure reason +bool windows_get_device_registry_entry(const struct loader_instance *inst, char **reg_data, PDWORD total_size, DEVINST dev_id, + LPCSTR value_name, VkResult *result); + +// Find the list of registry files (names VulkanDriverName/VulkanDriverNameWow) in hkr . +// +// This function looks for display devices and childish software components +// for a list of files which are added to a returned list (function return +// value). +// Function return is a string with a ';' separated list of filenames. +// Function return is NULL if no valid name/value pairs are found in the key, +// or the key is not found. +// +// *reg_data contains a string list of filenames as pointer. +// When done using the returned string list, the caller should free the pointer. +VkResult windows_get_device_registry_files(const struct loader_instance *inst, uint32_t log_target_flag, char **reg_data, + PDWORD reg_data_size, LPCSTR value_name); + +// Find the list of registry files (names within a key) in key "location". +// +// This function looks in the registry (hive = DEFAULT_VK_REGISTRY_HIVE) key as +// given in "location" +// for a list or name/values which are added to a returned list (function return +// value). +// The DWORD values within the key must be 0 or they are skipped. +// Function return is a string with a ';' separated list of filenames. +// Function return is NULL if no valid name/value pairs are found in the key, +// or the key is not found. +// +// *reg_data contains a string list of filenames as pointer. +// When done using the returned string list, the caller should free the pointer. +VkResult windows_get_registry_files(const struct loader_instance *inst, char *location, bool use_secondary_hive, char **reg_data, + PDWORD reg_data_size); + +// Read manifest JSON files using the Windows driver interface +VkResult windows_read_manifest_from_d3d_adapters(const struct loader_instance *inst, char **reg_data, PDWORD reg_data_size, + const wchar_t *value_name); + +// Look for data files in the registry. +VkResult windows_read_data_files_in_registry(const struct loader_instance *inst, enum loader_data_files_type data_file_type, + bool warn_if_not_present, char *registry_location, + struct loader_string_list *out_files); + +// This function allocates an array in sorted_devices which must be freed by the caller if not null +VkResult windows_read_sorted_physical_devices(struct loader_instance *inst, uint32_t *icd_phys_devs_array_count, + struct loader_icd_physical_devices **icd_phys_devs_array); + +// This function sorts an array in physical device groups based on the sorted physical device information +VkResult windows_sort_physical_device_groups(struct loader_instance *inst, const uint32_t group_count, + struct loader_physical_device_group_term *sorted_group_term, + const uint32_t sorted_device_count, + struct loader_icd_physical_devices *sorted_phys_dev_array); + +// Creates a DXGI factory +// Returns VkLoaderFeatureFlags containing VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING if successful, otherwise 0 +VkLoaderFeatureFlags windows_initialize_dxgi(void); + +// Retrieve a path to an installed app package that contains Vulkan manifests. +// When done using the returned string, the caller should free the pointer. +char *windows_get_app_package_manifest_path(const struct loader_instance *inst); + +// Gets the path to the loader settings file, if it exists. If it doesn't exists, writes NULL to out_path. +// The path is located through the registry as an entry in HKEY_CURRENT_USER/SOFTWARE/Khronos/Vulkan/LoaderSettings +// and if nothing is there, will try to look in HKEY_LOCAL_MACHINE/SOFTWARE/Khronos/Vulkan/LoaderSettings. +// If running with elevated privileges, this function only looks in HKEY_LOCAL_MACHINE. +VkResult windows_get_loader_settings_file_path(const struct loader_instance *inst, char **out_path); +#endif // WIN32 diff --git a/local/recipes/libs/vulkan-loader/source/loader/log.c b/local/recipes/libs/vulkan-loader/source/loader/log.c new file mode 100644 index 0000000000..41b89ee652 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/log.c @@ -0,0 +1,276 @@ +/* + * + * Copyright (c) 2014-2022 The Khronos Group Inc. + * Copyright (c) 2014-2022 Valve Corporation + * Copyright (c) 2014-2022 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#include "log.h" + +#include +#include + +#include "debug_utils.h" +#include "loader_common.h" +#include "loader_environment.h" +#include "settings.h" +#include "vk_loader_platform.h" + +uint32_t g_loader_debug = 0; + +void loader_init_global_debug_level(void) { + char *env, *orig; + + if (g_loader_debug > 0) return; + + g_loader_debug = 0; + + // Parse comma-separated debug options + orig = env = loader_getenv("VK_LOADER_DEBUG", NULL); + while (env) { + char *p = strchr(env, ','); + size_t len; + + if (p) { + len = p - env; + } else { + len = strlen(env); + } + + if (len > 0) { + if (strncmp(env, "all", len) == 0) { + g_loader_debug = ~0u; + } else if (strncmp(env, "warn", len) == 0) { + g_loader_debug |= VULKAN_LOADER_WARN_BIT; + } else if (strncmp(env, "info", len) == 0) { + g_loader_debug |= VULKAN_LOADER_INFO_BIT; + } else if (strncmp(env, "perf", len) == 0) { + g_loader_debug |= VULKAN_LOADER_PERF_BIT; + } else if (strncmp(env, "error", len) == 0) { + g_loader_debug |= VULKAN_LOADER_ERROR_BIT; + } else if (strncmp(env, "debug", len) == 0) { + g_loader_debug |= VULKAN_LOADER_DEBUG_BIT; + } else if (strncmp(env, "layer", len) == 0) { + g_loader_debug |= VULKAN_LOADER_LAYER_BIT; + } else if (strncmp(env, "driver", len) == 0 || strncmp(env, "implem", len) == 0 || strncmp(env, "icd", len) == 0) { + g_loader_debug |= VULKAN_LOADER_DRIVER_BIT; + } + } + + if (!p) break; + + env = p + 1; + } + + loader_free_getenv(orig, NULL); +} + +void loader_set_global_debug_level(uint32_t new_loader_debug) { g_loader_debug = new_loader_debug; } + +void generate_debug_flag_str(VkFlags msg_type, size_t cmd_line_size, char *cmd_line_msg) { + cmd_line_msg[0] = '\0'; + + if ((msg_type & VULKAN_LOADER_ERROR_BIT) != 0) { + loader_strncat(cmd_line_msg, cmd_line_size, "ERROR", sizeof("ERROR")); + } + if ((msg_type & VULKAN_LOADER_WARN_BIT) != 0) { + if (strlen(cmd_line_msg) > 0) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "WARNING", sizeof("WARNING")); + } + if ((msg_type & VULKAN_LOADER_INFO_BIT) != 0) { + if (strlen(cmd_line_msg) > 0) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "INFO", sizeof("INFO")); + } + if ((msg_type & VULKAN_LOADER_DEBUG_BIT) != 0) { + if (strlen(cmd_line_msg) > 0) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "DEBUG", sizeof("DEBUG")); + } + if ((msg_type & VULKAN_LOADER_PERF_BIT) != 0) { + if (strlen(cmd_line_msg) > 0) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "PERF", sizeof("PERF")); + } + if ((msg_type & VULKAN_LOADER_DRIVER_BIT) != 0) { + if (strlen(cmd_line_msg) > 0) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "DRIVER", sizeof("DRIVER")); + } + if ((msg_type & VULKAN_LOADER_LAYER_BIT) != 0) { + if (strlen(cmd_line_msg) > 0) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "LAYER", sizeof("LAYER")); + } + +#undef STRNCAT_TO_BUFFER +} + +void DECORATE_PRINTF(4, 5) + loader_log(const struct loader_instance *inst, VkFlags msg_type, int32_t msg_code, const char *format, ...) { + (void)msg_code; + char msg[512] = {0}; + + va_list ap; + va_start(ap, format); + int ret = vsnprintf(msg, sizeof(msg), format, ap); + if ((ret >= (int)sizeof(msg)) || ret < 0) { + msg[sizeof(msg) - 1] = '\0'; + } + va_end(ap); + + if (inst) { + VkDebugUtilsMessageSeverityFlagBitsEXT severity = 0; + VkDebugUtilsMessageTypeFlagsEXT type = 0; + VkDebugUtilsMessengerCallbackDataEXT callback_data = {0}; + VkDebugUtilsObjectNameInfoEXT object_name = {0}; + + if ((msg_type & VULKAN_LOADER_INFO_BIT) != 0) { + severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + } else if ((msg_type & VULKAN_LOADER_WARN_BIT) != 0) { + severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; + } else if ((msg_type & VULKAN_LOADER_ERROR_BIT) != 0) { + severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + } else if ((msg_type & VULKAN_LOADER_DEBUG_BIT) != 0) { + severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT; + } else if ((msg_type & VULKAN_LOADER_LAYER_BIT) != 0 || (msg_type & VULKAN_LOADER_DRIVER_BIT) != 0) { + // Just driver or just layer bit should be treated as an info message in debug utils. + severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + } + + if ((msg_type & VULKAN_LOADER_PERF_BIT) != 0) { + type = VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + } else if ((msg_type & VULKAN_LOADER_VALIDATION_BIT) != 0) { + // For loader logging, if it's a validation message, we still want to also keep the general flag as well + // so messages of type validation can still be triggered for general message callbacks. + type = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + } else { + type = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + } + + callback_data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; + callback_data.pMessageIdName = "Loader Message"; + callback_data.pMessage = msg; + callback_data.objectCount = 1; + callback_data.pObjects = &object_name; + object_name.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + object_name.objectType = VK_OBJECT_TYPE_INSTANCE; + object_name.objectHandle = (uint64_t)(uintptr_t)inst; + + util_SubmitDebugUtilsMessageEXT(inst, severity, type, &callback_data); + } + + // Always log to stderr if this is a fatal error + if (0 == (msg_type & VULKAN_LOADER_FATAL_ERROR_BIT)) { + if (inst && inst->settings.settings_active && inst->settings.debug_level > 0) { + // Exit early if the current instance settings have some debugging options but do match the current msg_type + if (0 == (msg_type & inst->settings.debug_level)) { + return; + } + // Check the global settings and if that doesn't say to skip, check the environment variable + } else if (0 == (msg_type & g_loader_debug)) { + return; + } + } + +#if defined(DEBUG) + int debug_flag_mask = + msg_type & (VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_DEBUG_BIT); + assert((debug_flag_mask == 0 || debug_flag_mask == VULKAN_LOADER_ERROR_BIT || debug_flag_mask == VULKAN_LOADER_WARN_BIT || + debug_flag_mask == VULKAN_LOADER_INFO_BIT || debug_flag_mask == VULKAN_LOADER_DEBUG_BIT) && + "This log has more than one exclusive debug flags (error, warn, info, debug) set"); +#endif + + // Only need enough space to create the filter description header for log messages + // Also use the same header for all output + char cmd_line_msg[64] = {0}; + size_t cmd_line_size = sizeof(cmd_line_msg); + + loader_strncat(cmd_line_msg, cmd_line_size, "[Vulkan Loader] ", sizeof("[Vulkan Loader] ")); + + bool need_separator = false; + if ((msg_type & VULKAN_LOADER_ERROR_BIT) != 0) { + loader_strncat(cmd_line_msg, cmd_line_size, "ERROR", sizeof("ERROR")); + need_separator = true; + } else if ((msg_type & VULKAN_LOADER_WARN_BIT) != 0) { + loader_strncat(cmd_line_msg, cmd_line_size, "WARNING", sizeof("WARNING")); + need_separator = true; + } else if ((msg_type & VULKAN_LOADER_INFO_BIT) != 0) { + loader_strncat(cmd_line_msg, cmd_line_size, "INFO", sizeof("INFO")); + need_separator = true; + } else if ((msg_type & VULKAN_LOADER_DEBUG_BIT) != 0) { + loader_strncat(cmd_line_msg, cmd_line_size, "DEBUG", sizeof("DEBUG")); + need_separator = true; + } + + if ((msg_type & VULKAN_LOADER_PERF_BIT) != 0) { + if (need_separator) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "PERF", sizeof("PERF")); + } else if ((msg_type & VULKAN_LOADER_DRIVER_BIT) != 0) { + if (need_separator) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "DRIVER", sizeof("DRIVER")); + } else if ((msg_type & VULKAN_LOADER_LAYER_BIT) != 0) { + if (need_separator) { + loader_strncat(cmd_line_msg, cmd_line_size, " | ", sizeof(" | ")); + } + loader_strncat(cmd_line_msg, cmd_line_size, "LAYER", sizeof("LAYER")); + } + + loader_strncat(cmd_line_msg, cmd_line_size, ": ", sizeof(": ")); + size_t num_used = strlen(cmd_line_msg); + + // Justifies the output to at least 29 spaces + if (num_used < 32) { + const char space_buffer[] = " "; + // Only write (32 - num_used) spaces + loader_strncat(cmd_line_msg, cmd_line_size, space_buffer, sizeof(space_buffer) - 1 - num_used); + } + // Assert that we didn't write more than what is available in cmd_line_msg + assert(cmd_line_size > num_used); + + fputs(cmd_line_msg, stderr); + fputs(msg, stderr); + fputc('\n', stderr); +#if defined(WIN32) + OutputDebugString(cmd_line_msg); + OutputDebugString(msg); + OutputDebugString("\n"); +#endif +} + +void loader_log_asm_function_not_supported(const struct loader_instance *inst, VkFlags msg_type, int32_t msg_code, + const char *func_name) { + loader_log(inst, msg_type, msg_code, "Function %s not supported for this physical device", func_name); +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/log.h b/local/recipes/libs/vulkan-loader/source/loader/log.h new file mode 100644 index 0000000000..1b594ab779 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/log.h @@ -0,0 +1,85 @@ +/* + * + * Copyright (c) 2014-2021 The Khronos Group Inc. + * Copyright (c) 2014-2021 Valve Corporation + * Copyright (c) 2014-2021 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +#pragma once + +#include +#include + +#include "vulkan/vulkan_core.h" + +struct loader_instance; + +enum vulkan_loader_debug_flags { + VULKAN_LOADER_INFO_BIT = 0x01, + VULKAN_LOADER_WARN_BIT = 0x02, + VULKAN_LOADER_PERF_BIT = 0x04, + VULKAN_LOADER_ERROR_BIT = 0x08, + VULKAN_LOADER_DEBUG_BIT = 0x10, + VULKAN_LOADER_LAYER_BIT = 0x20, + VULKAN_LOADER_DRIVER_BIT = 0x40, + VULKAN_LOADER_VALIDATION_BIT = 0x80, + VULKAN_LOADER_FATAL_ERROR_BIT = 0x100, // only forces the output to be printed to stderr, has no other effect +}; + +// Checks for the environment variable VK_LOADER_DEBUG and sets up the current debug level accordingly +// This should be called before any Vulkan API calls, eg in the initialization of the .dll or .so +void loader_init_global_debug_level(void); + +// Sets the global debug level - used by global settings files +void loader_set_global_debug_level(uint32_t new_loader_debug); + +// Writes a stringified version of enum vulkan_loader_debug_flags into a char array cmd_line_msg of length cmd_line_size +void generate_debug_flag_str(VkFlags msg_type, size_t cmd_line_size, char *cmd_line_msg); + +// The asm declaration prevents name mangling which is necessary for macOS +#if defined(MODIFY_UNKNOWN_FUNCTION_DECLS) +#define ASM_NAME(name) __asm(name) +#else +#define ASM_NAME(name) +#endif + +#if defined(__clang__) +#define DECORATE_PRINTF(_fmt_argnum, _first_param_num) __attribute__((format(printf, _fmt_argnum, _first_param_num))) +#elif defined(__GNUC__) +#define DECORATE_PRINTF(_fmt_argnum, _first_param_num) __attribute__((format(gnu_printf, _fmt_argnum, _first_param_num))) +#else +#define DECORATE_PRINTF(_fmt_num, _first_param_num) +#endif + +// Logs a message to stderr +// May output to DebugUtils if the instance isn't null and the extension is enabled. +void DECORATE_PRINTF(4, 5) loader_log(const struct loader_instance *inst, VkFlags msg_type, int32_t msg_code, const char *format, + ...) ASM_NAME("loader_log"); + +// Used for the assembly code to emit an specific error message +// This is a work around for linux 32 bit error handling not passing relocatable strings correctly +void loader_log_asm_function_not_supported(const struct loader_instance *inst, VkFlags msg_type, int32_t msg_code, + const char *func_name) ASM_NAME("loader_log_asm_function_not_supported"); + +#undef ASM_NAME diff --git a/local/recipes/libs/vulkan-loader/source/loader/phys_dev_ext.c b/local/recipes/libs/vulkan-loader/source/loader/phys_dev_ext.c new file mode 100644 index 0000000000..1ea897ea1a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/phys_dev_ext.c @@ -0,0 +1,1063 @@ +/* + * + * Copyright (c) 2016-2021 The Khronos Group Inc. + * Copyright (c) 2016-2021 Valve Corporation + * Copyright (c) 2016-2021 LunarG, 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. + * + * Author: Mark Young + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +// This code is used to enable generic instance extensions which use a physical device +// as the first parameter. If the extension is already known by the loader, it will +// not use this code, but instead use the more direct route. However, if it is +// unknown to the loader, it will use this code. Technically, this is not trampoline +// code since we don't want to optimize it out. + +#include + +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC optimize(3) // force gcc to use tail-calls +#endif + +// The asm declaration prevents name mangling which is necessary for macOS +#if defined(MODIFY_UNKNOWN_FUNCTION_DECLS) +#define ASM_NAME(name) __asm(name) +#else +#define ASM_NAME(name) +#endif + +// Declarations for the trampoline +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp0(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp0"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp1(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp1"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp2(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp2"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp3(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp3"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp4(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp4"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp5(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp5"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp6(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp6"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp7(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp7"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp8(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp8"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp9(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp9"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp10(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp10"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp11(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp11"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp12(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp12"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp13(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp13"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp14(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp14"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp15(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp15"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp16(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp16"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp17(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp17"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp18(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp18"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp19(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp19"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp20(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp20"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp21(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp21"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp22(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp22"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp23(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp23"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp24(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp24"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp25(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp25"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp26(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp26"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp27(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp27"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp28(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp28"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp29(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp29"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp30(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp30"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp31(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp31"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp32(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp32"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp33(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp33"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp34(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp34"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp35(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp35"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp36(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp36"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp37(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp37"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp38(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp38"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp39(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp39"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp40(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp40"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp41(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp41"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp42(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp42"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp43(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp43"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp44(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp44"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp45(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp45"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp46(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp46"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp47(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp47"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp48(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp48"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp49(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp49"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp50(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp50"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp51(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp51"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp52(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp52"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp53(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp53"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp54(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp54"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp55(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp55"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp56(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp56"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp57(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp57"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp58(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp58"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp59(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp59"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp60(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp60"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp61(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp61"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp62(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp62"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp63(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp63"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp64(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp64"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp65(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp65"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp66(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp66"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp67(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp67"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp68(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp68"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp69(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp69"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp70(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp70"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp71(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp71"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp72(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp72"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp73(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp73"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp74(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp74"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp75(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp75"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp76(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp76"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp77(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp77"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp78(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp78"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp79(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp79"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp80(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp80"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp81(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp81"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp82(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp82"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp83(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp83"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp84(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp84"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp85(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp85"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp86(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp86"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp87(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp87"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp88(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp88"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp89(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp89"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp90(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp90"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp91(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp91"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp92(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp92"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp93(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp93"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp94(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp94"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp95(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp95"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp96(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp96"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp97(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp97"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp98(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp98"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp99(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp99"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp100(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp100"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp101(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp101"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp102(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp102"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp103(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp103"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp104(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp104"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp105(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp105"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp106(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp106"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp107(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp107"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp108(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp108"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp109(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp109"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp110(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp110"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp111(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp111"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp112(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp112"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp113(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp113"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp114(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp114"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp115(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp115"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp116(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp116"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp117(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp117"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp118(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp118"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp119(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp119"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp120(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp120"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp121(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp121"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp122(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp122"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp123(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp123"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp124(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp124"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp125(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp125"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp126(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp126"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp127(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp127"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp128(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp128"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp129(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp129"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp130(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp130"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp131(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp131"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp132(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp132"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp133(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp133"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp134(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp134"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp135(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp135"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp136(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp136"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp137(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp137"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp138(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp138"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp139(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp139"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp140(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp140"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp141(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp141"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp142(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp142"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp143(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp143"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp144(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp144"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp145(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp145"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp146(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp146"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp147(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp147"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp148(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp148"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp149(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp149"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp150(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp150"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp151(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp151"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp152(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp152"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp153(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp153"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp154(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp154"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp155(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp155"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp156(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp156"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp157(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp157"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp158(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp158"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp159(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp159"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp160(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp160"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp161(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp161"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp162(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp162"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp163(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp163"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp164(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp164"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp165(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp165"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp166(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp166"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp167(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp167"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp168(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp168"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp169(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp169"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp170(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp170"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp171(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp171"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp172(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp172"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp173(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp173"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp174(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp174"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp175(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp175"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp176(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp176"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp177(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp177"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp178(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp178"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp179(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp179"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp180(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp180"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp181(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp181"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp182(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp182"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp183(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp183"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp184(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp184"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp185(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp185"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp186(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp186"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp187(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp187"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp188(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp188"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp189(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp189"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp190(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp190"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp191(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp191"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp192(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp192"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp193(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp193"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp194(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp194"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp195(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp195"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp196(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp196"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp197(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp197"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp198(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp198"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp199(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp199"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp200(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp200"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp201(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp201"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp202(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp202"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp203(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp203"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp204(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp204"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp205(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp205"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp206(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp206"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp207(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp207"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp208(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp208"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp209(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp209"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp210(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp210"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp211(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp211"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp212(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp212"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp213(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp213"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp214(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp214"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp215(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp215"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp216(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp216"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp217(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp217"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp218(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp218"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp219(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp219"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp220(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp220"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp221(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp221"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp222(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp222"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp223(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp223"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp224(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp224"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp225(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp225"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp226(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp226"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp227(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp227"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp228(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp228"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp229(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp229"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp230(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp230"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp231(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp231"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp232(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp232"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp233(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp233"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp234(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp234"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp235(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp235"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp236(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp236"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp237(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp237"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp238(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp238"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp239(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp239"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp240(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp240"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp241(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp241"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp242(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp242"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp243(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp243"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp244(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp244"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp245(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp245"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp246(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp246"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp247(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp247"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp248(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp248"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp249(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTramp249"); + +// Disable clang-format for lists of macros +// clang-format off + +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin0(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin0"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin1(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin1"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin2(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin2"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin3(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin3"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin4(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin4"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin5(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin5"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin6(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin6"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin7(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin7"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin8(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin8"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin9(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin9"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin10(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin10"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin11(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin11"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin12(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin12"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin13(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin13"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin14(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin14"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin15(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin15"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin16(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin16"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin17(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin17"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin18(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin18"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin19(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin19"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin20(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin20"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin21(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin21"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin22(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin22"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin23(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin23"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin24(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin24"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin25(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin25"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin26(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin26"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin27(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin27"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin28(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin28"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin29(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin29"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin30(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin30"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin31(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin31"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin32(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin32"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin33(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin33"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin34(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin34"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin35(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin35"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin36(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin36"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin37(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin37"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin38(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin38"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin39(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin39"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin40(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin40"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin41(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin41"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin42(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin42"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin43(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin43"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin44(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin44"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin45(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin45"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin46(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin46"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin47(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin47"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin48(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin48"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin49(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin49"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin50(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin50"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin51(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin51"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin52(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin52"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin53(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin53"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin54(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin54"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin55(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin55"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin56(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin56"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin57(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin57"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin58(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin58"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin59(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin59"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin60(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin60"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin61(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin61"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin62(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin62"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin63(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin63"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin64(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin64"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin65(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin65"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin66(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin66"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin67(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin67"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin68(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin68"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin69(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin69"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin70(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin70"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin71(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin71"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin72(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin72"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin73(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin73"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin74(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin74"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin75(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin75"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin76(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin76"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin77(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin77"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin78(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin78"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin79(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin79"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin80(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin80"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin81(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin81"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin82(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin82"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin83(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin83"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin84(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin84"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin85(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin85"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin86(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin86"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin87(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin87"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin88(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin88"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin89(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin89"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin90(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin90"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin91(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin91"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin92(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin92"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin93(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin93"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin94(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin94"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin95(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin95"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin96(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin96"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin97(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin97"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin98(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin98"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin99(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin99"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin100(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin100"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin101(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin101"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin102(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin102"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin103(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin103"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin104(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin104"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin105(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin105"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin106(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin106"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin107(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin107"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin108(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin108"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin109(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin109"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin110(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin110"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin111(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin111"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin112(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin112"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin113(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin113"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin114(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin114"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin115(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin115"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin116(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin116"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin117(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin117"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin118(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin118"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin119(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin119"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin120(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin120"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin121(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin121"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin122(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin122"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin123(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin123"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin124(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin124"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin125(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin125"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin126(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin126"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin127(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin127"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin128(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin128"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin129(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin129"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin130(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin130"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin131(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin131"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin132(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin132"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin133(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin133"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin134(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin134"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin135(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin135"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin136(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin136"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin137(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin137"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin138(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin138"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin139(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin139"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin140(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin140"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin141(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin141"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin142(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin142"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin143(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin143"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin144(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin144"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin145(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin145"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin146(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin146"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin147(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin147"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin148(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin148"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin149(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin149"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin150(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin150"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin151(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin151"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin152(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin152"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin153(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin153"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin154(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin154"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin155(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin155"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin156(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin156"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin157(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin157"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin158(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin158"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin159(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin159"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin160(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin160"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin161(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin161"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin162(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin162"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin163(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin163"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin164(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin164"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin165(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin165"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin166(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin166"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin167(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin167"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin168(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin168"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin169(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin169"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin170(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin170"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin171(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin171"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin172(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin172"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin173(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin173"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin174(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin174"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin175(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin175"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin176(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin176"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin177(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin177"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin178(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin178"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin179(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin179"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin180(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin180"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin181(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin181"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin182(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin182"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin183(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin183"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin184(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin184"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin185(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin185"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin186(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin186"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin187(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin187"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin188(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin188"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin189(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin189"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin190(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin190"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin191(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin191"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin192(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin192"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin193(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin193"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin194(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin194"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin195(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin195"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin196(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin196"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin197(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin197"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin198(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin198"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin199(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin199"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin200(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin200"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin201(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin201"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin202(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin202"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin203(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin203"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin204(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin204"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin205(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin205"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin206(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin206"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin207(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin207"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin208(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin208"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin209(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin209"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin210(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin210"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin211(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin211"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin212(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin212"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin213(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin213"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin214(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin214"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin215(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin215"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin216(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin216"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin217(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin217"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin218(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin218"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin219(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin219"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin220(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin220"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin221(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin221"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin222(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin222"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin223(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin223"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin224(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin224"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin225(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin225"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin226(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin226"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin227(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin227"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin228(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin228"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin229(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin229"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin230(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin230"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin231(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin231"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin232(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin232"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin233(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin233"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin234(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin234"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin235(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin235"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin236(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin236"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin237(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin237"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin238(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin238"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin239(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin239"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin240(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin240"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin241(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin241"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin242(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin242"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin243(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin243"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin244(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin244"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin245(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin245"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin246(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin246"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin247(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin247"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin248(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin248"); +VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin249(VkPhysicalDevice) ASM_NAME("vkPhysDevExtTermin249"); + + +void *loader_get_phys_dev_ext_tramp(uint32_t index) { + switch (index) { +#define TRAMP_CASE_HANDLE(num) case num: return vkPhysDevExtTramp##num + TRAMP_CASE_HANDLE(0); + TRAMP_CASE_HANDLE(1); + TRAMP_CASE_HANDLE(2); + TRAMP_CASE_HANDLE(3); + TRAMP_CASE_HANDLE(4); + TRAMP_CASE_HANDLE(5); + TRAMP_CASE_HANDLE(6); + TRAMP_CASE_HANDLE(7); + TRAMP_CASE_HANDLE(8); + TRAMP_CASE_HANDLE(9); + TRAMP_CASE_HANDLE(10); + TRAMP_CASE_HANDLE(11); + TRAMP_CASE_HANDLE(12); + TRAMP_CASE_HANDLE(13); + TRAMP_CASE_HANDLE(14); + TRAMP_CASE_HANDLE(15); + TRAMP_CASE_HANDLE(16); + TRAMP_CASE_HANDLE(17); + TRAMP_CASE_HANDLE(18); + TRAMP_CASE_HANDLE(19); + TRAMP_CASE_HANDLE(20); + TRAMP_CASE_HANDLE(21); + TRAMP_CASE_HANDLE(22); + TRAMP_CASE_HANDLE(23); + TRAMP_CASE_HANDLE(24); + TRAMP_CASE_HANDLE(25); + TRAMP_CASE_HANDLE(26); + TRAMP_CASE_HANDLE(27); + TRAMP_CASE_HANDLE(28); + TRAMP_CASE_HANDLE(29); + TRAMP_CASE_HANDLE(30); + TRAMP_CASE_HANDLE(31); + TRAMP_CASE_HANDLE(32); + TRAMP_CASE_HANDLE(33); + TRAMP_CASE_HANDLE(34); + TRAMP_CASE_HANDLE(35); + TRAMP_CASE_HANDLE(36); + TRAMP_CASE_HANDLE(37); + TRAMP_CASE_HANDLE(38); + TRAMP_CASE_HANDLE(39); + TRAMP_CASE_HANDLE(40); + TRAMP_CASE_HANDLE(41); + TRAMP_CASE_HANDLE(42); + TRAMP_CASE_HANDLE(43); + TRAMP_CASE_HANDLE(44); + TRAMP_CASE_HANDLE(45); + TRAMP_CASE_HANDLE(46); + TRAMP_CASE_HANDLE(47); + TRAMP_CASE_HANDLE(48); + TRAMP_CASE_HANDLE(49); + TRAMP_CASE_HANDLE(50); + TRAMP_CASE_HANDLE(51); + TRAMP_CASE_HANDLE(52); + TRAMP_CASE_HANDLE(53); + TRAMP_CASE_HANDLE(54); + TRAMP_CASE_HANDLE(55); + TRAMP_CASE_HANDLE(56); + TRAMP_CASE_HANDLE(57); + TRAMP_CASE_HANDLE(58); + TRAMP_CASE_HANDLE(59); + TRAMP_CASE_HANDLE(60); + TRAMP_CASE_HANDLE(61); + TRAMP_CASE_HANDLE(62); + TRAMP_CASE_HANDLE(63); + TRAMP_CASE_HANDLE(64); + TRAMP_CASE_HANDLE(65); + TRAMP_CASE_HANDLE(66); + TRAMP_CASE_HANDLE(67); + TRAMP_CASE_HANDLE(68); + TRAMP_CASE_HANDLE(69); + TRAMP_CASE_HANDLE(70); + TRAMP_CASE_HANDLE(71); + TRAMP_CASE_HANDLE(72); + TRAMP_CASE_HANDLE(73); + TRAMP_CASE_HANDLE(74); + TRAMP_CASE_HANDLE(75); + TRAMP_CASE_HANDLE(76); + TRAMP_CASE_HANDLE(77); + TRAMP_CASE_HANDLE(78); + TRAMP_CASE_HANDLE(79); + TRAMP_CASE_HANDLE(80); + TRAMP_CASE_HANDLE(81); + TRAMP_CASE_HANDLE(82); + TRAMP_CASE_HANDLE(83); + TRAMP_CASE_HANDLE(84); + TRAMP_CASE_HANDLE(85); + TRAMP_CASE_HANDLE(86); + TRAMP_CASE_HANDLE(87); + TRAMP_CASE_HANDLE(88); + TRAMP_CASE_HANDLE(89); + TRAMP_CASE_HANDLE(90); + TRAMP_CASE_HANDLE(91); + TRAMP_CASE_HANDLE(92); + TRAMP_CASE_HANDLE(93); + TRAMP_CASE_HANDLE(94); + TRAMP_CASE_HANDLE(95); + TRAMP_CASE_HANDLE(96); + TRAMP_CASE_HANDLE(97); + TRAMP_CASE_HANDLE(98); + TRAMP_CASE_HANDLE(99); + TRAMP_CASE_HANDLE(100); + TRAMP_CASE_HANDLE(101); + TRAMP_CASE_HANDLE(102); + TRAMP_CASE_HANDLE(103); + TRAMP_CASE_HANDLE(104); + TRAMP_CASE_HANDLE(105); + TRAMP_CASE_HANDLE(106); + TRAMP_CASE_HANDLE(107); + TRAMP_CASE_HANDLE(108); + TRAMP_CASE_HANDLE(109); + TRAMP_CASE_HANDLE(110); + TRAMP_CASE_HANDLE(111); + TRAMP_CASE_HANDLE(112); + TRAMP_CASE_HANDLE(113); + TRAMP_CASE_HANDLE(114); + TRAMP_CASE_HANDLE(115); + TRAMP_CASE_HANDLE(116); + TRAMP_CASE_HANDLE(117); + TRAMP_CASE_HANDLE(118); + TRAMP_CASE_HANDLE(119); + TRAMP_CASE_HANDLE(120); + TRAMP_CASE_HANDLE(121); + TRAMP_CASE_HANDLE(122); + TRAMP_CASE_HANDLE(123); + TRAMP_CASE_HANDLE(124); + TRAMP_CASE_HANDLE(125); + TRAMP_CASE_HANDLE(126); + TRAMP_CASE_HANDLE(127); + TRAMP_CASE_HANDLE(128); + TRAMP_CASE_HANDLE(129); + TRAMP_CASE_HANDLE(130); + TRAMP_CASE_HANDLE(131); + TRAMP_CASE_HANDLE(132); + TRAMP_CASE_HANDLE(133); + TRAMP_CASE_HANDLE(134); + TRAMP_CASE_HANDLE(135); + TRAMP_CASE_HANDLE(136); + TRAMP_CASE_HANDLE(137); + TRAMP_CASE_HANDLE(138); + TRAMP_CASE_HANDLE(139); + TRAMP_CASE_HANDLE(140); + TRAMP_CASE_HANDLE(141); + TRAMP_CASE_HANDLE(142); + TRAMP_CASE_HANDLE(143); + TRAMP_CASE_HANDLE(144); + TRAMP_CASE_HANDLE(145); + TRAMP_CASE_HANDLE(146); + TRAMP_CASE_HANDLE(147); + TRAMP_CASE_HANDLE(148); + TRAMP_CASE_HANDLE(149); + TRAMP_CASE_HANDLE(150); + TRAMP_CASE_HANDLE(151); + TRAMP_CASE_HANDLE(152); + TRAMP_CASE_HANDLE(153); + TRAMP_CASE_HANDLE(154); + TRAMP_CASE_HANDLE(155); + TRAMP_CASE_HANDLE(156); + TRAMP_CASE_HANDLE(157); + TRAMP_CASE_HANDLE(158); + TRAMP_CASE_HANDLE(159); + TRAMP_CASE_HANDLE(160); + TRAMP_CASE_HANDLE(161); + TRAMP_CASE_HANDLE(162); + TRAMP_CASE_HANDLE(163); + TRAMP_CASE_HANDLE(164); + TRAMP_CASE_HANDLE(165); + TRAMP_CASE_HANDLE(166); + TRAMP_CASE_HANDLE(167); + TRAMP_CASE_HANDLE(168); + TRAMP_CASE_HANDLE(169); + TRAMP_CASE_HANDLE(170); + TRAMP_CASE_HANDLE(171); + TRAMP_CASE_HANDLE(172); + TRAMP_CASE_HANDLE(173); + TRAMP_CASE_HANDLE(174); + TRAMP_CASE_HANDLE(175); + TRAMP_CASE_HANDLE(176); + TRAMP_CASE_HANDLE(177); + TRAMP_CASE_HANDLE(178); + TRAMP_CASE_HANDLE(179); + TRAMP_CASE_HANDLE(180); + TRAMP_CASE_HANDLE(181); + TRAMP_CASE_HANDLE(182); + TRAMP_CASE_HANDLE(183); + TRAMP_CASE_HANDLE(184); + TRAMP_CASE_HANDLE(185); + TRAMP_CASE_HANDLE(186); + TRAMP_CASE_HANDLE(187); + TRAMP_CASE_HANDLE(188); + TRAMP_CASE_HANDLE(189); + TRAMP_CASE_HANDLE(190); + TRAMP_CASE_HANDLE(191); + TRAMP_CASE_HANDLE(192); + TRAMP_CASE_HANDLE(193); + TRAMP_CASE_HANDLE(194); + TRAMP_CASE_HANDLE(195); + TRAMP_CASE_HANDLE(196); + TRAMP_CASE_HANDLE(197); + TRAMP_CASE_HANDLE(198); + TRAMP_CASE_HANDLE(199); + TRAMP_CASE_HANDLE(200); + TRAMP_CASE_HANDLE(201); + TRAMP_CASE_HANDLE(202); + TRAMP_CASE_HANDLE(203); + TRAMP_CASE_HANDLE(204); + TRAMP_CASE_HANDLE(205); + TRAMP_CASE_HANDLE(206); + TRAMP_CASE_HANDLE(207); + TRAMP_CASE_HANDLE(208); + TRAMP_CASE_HANDLE(209); + TRAMP_CASE_HANDLE(210); + TRAMP_CASE_HANDLE(211); + TRAMP_CASE_HANDLE(212); + TRAMP_CASE_HANDLE(213); + TRAMP_CASE_HANDLE(214); + TRAMP_CASE_HANDLE(215); + TRAMP_CASE_HANDLE(216); + TRAMP_CASE_HANDLE(217); + TRAMP_CASE_HANDLE(218); + TRAMP_CASE_HANDLE(219); + TRAMP_CASE_HANDLE(220); + TRAMP_CASE_HANDLE(221); + TRAMP_CASE_HANDLE(222); + TRAMP_CASE_HANDLE(223); + TRAMP_CASE_HANDLE(224); + TRAMP_CASE_HANDLE(225); + TRAMP_CASE_HANDLE(226); + TRAMP_CASE_HANDLE(227); + TRAMP_CASE_HANDLE(228); + TRAMP_CASE_HANDLE(229); + TRAMP_CASE_HANDLE(230); + TRAMP_CASE_HANDLE(231); + TRAMP_CASE_HANDLE(232); + TRAMP_CASE_HANDLE(233); + TRAMP_CASE_HANDLE(234); + TRAMP_CASE_HANDLE(235); + TRAMP_CASE_HANDLE(236); + TRAMP_CASE_HANDLE(237); + TRAMP_CASE_HANDLE(238); + TRAMP_CASE_HANDLE(239); + TRAMP_CASE_HANDLE(240); + TRAMP_CASE_HANDLE(241); + TRAMP_CASE_HANDLE(242); + TRAMP_CASE_HANDLE(243); + TRAMP_CASE_HANDLE(244); + TRAMP_CASE_HANDLE(245); + TRAMP_CASE_HANDLE(246); + TRAMP_CASE_HANDLE(247); + TRAMP_CASE_HANDLE(248); + TRAMP_CASE_HANDLE(249); + } + return NULL; +} + +void *loader_get_phys_dev_ext_termin(uint32_t index) { + switch (index) { +#define TERM_CASE_HANDLE(num) case num: return vkPhysDevExtTermin##num + TERM_CASE_HANDLE(0); + TERM_CASE_HANDLE(1); + TERM_CASE_HANDLE(2); + TERM_CASE_HANDLE(3); + TERM_CASE_HANDLE(4); + TERM_CASE_HANDLE(5); + TERM_CASE_HANDLE(6); + TERM_CASE_HANDLE(7); + TERM_CASE_HANDLE(8); + TERM_CASE_HANDLE(9); + TERM_CASE_HANDLE(10); + TERM_CASE_HANDLE(11); + TERM_CASE_HANDLE(12); + TERM_CASE_HANDLE(13); + TERM_CASE_HANDLE(14); + TERM_CASE_HANDLE(15); + TERM_CASE_HANDLE(16); + TERM_CASE_HANDLE(17); + TERM_CASE_HANDLE(18); + TERM_CASE_HANDLE(19); + TERM_CASE_HANDLE(20); + TERM_CASE_HANDLE(21); + TERM_CASE_HANDLE(22); + TERM_CASE_HANDLE(23); + TERM_CASE_HANDLE(24); + TERM_CASE_HANDLE(25); + TERM_CASE_HANDLE(26); + TERM_CASE_HANDLE(27); + TERM_CASE_HANDLE(28); + TERM_CASE_HANDLE(29); + TERM_CASE_HANDLE(30); + TERM_CASE_HANDLE(31); + TERM_CASE_HANDLE(32); + TERM_CASE_HANDLE(33); + TERM_CASE_HANDLE(34); + TERM_CASE_HANDLE(35); + TERM_CASE_HANDLE(36); + TERM_CASE_HANDLE(37); + TERM_CASE_HANDLE(38); + TERM_CASE_HANDLE(39); + TERM_CASE_HANDLE(40); + TERM_CASE_HANDLE(41); + TERM_CASE_HANDLE(42); + TERM_CASE_HANDLE(43); + TERM_CASE_HANDLE(44); + TERM_CASE_HANDLE(45); + TERM_CASE_HANDLE(46); + TERM_CASE_HANDLE(47); + TERM_CASE_HANDLE(48); + TERM_CASE_HANDLE(49); + TERM_CASE_HANDLE(50); + TERM_CASE_HANDLE(51); + TERM_CASE_HANDLE(52); + TERM_CASE_HANDLE(53); + TERM_CASE_HANDLE(54); + TERM_CASE_HANDLE(55); + TERM_CASE_HANDLE(56); + TERM_CASE_HANDLE(57); + TERM_CASE_HANDLE(58); + TERM_CASE_HANDLE(59); + TERM_CASE_HANDLE(60); + TERM_CASE_HANDLE(61); + TERM_CASE_HANDLE(62); + TERM_CASE_HANDLE(63); + TERM_CASE_HANDLE(64); + TERM_CASE_HANDLE(65); + TERM_CASE_HANDLE(66); + TERM_CASE_HANDLE(67); + TERM_CASE_HANDLE(68); + TERM_CASE_HANDLE(69); + TERM_CASE_HANDLE(70); + TERM_CASE_HANDLE(71); + TERM_CASE_HANDLE(72); + TERM_CASE_HANDLE(73); + TERM_CASE_HANDLE(74); + TERM_CASE_HANDLE(75); + TERM_CASE_HANDLE(76); + TERM_CASE_HANDLE(77); + TERM_CASE_HANDLE(78); + TERM_CASE_HANDLE(79); + TERM_CASE_HANDLE(80); + TERM_CASE_HANDLE(81); + TERM_CASE_HANDLE(82); + TERM_CASE_HANDLE(83); + TERM_CASE_HANDLE(84); + TERM_CASE_HANDLE(85); + TERM_CASE_HANDLE(86); + TERM_CASE_HANDLE(87); + TERM_CASE_HANDLE(88); + TERM_CASE_HANDLE(89); + TERM_CASE_HANDLE(90); + TERM_CASE_HANDLE(91); + TERM_CASE_HANDLE(92); + TERM_CASE_HANDLE(93); + TERM_CASE_HANDLE(94); + TERM_CASE_HANDLE(95); + TERM_CASE_HANDLE(96); + TERM_CASE_HANDLE(97); + TERM_CASE_HANDLE(98); + TERM_CASE_HANDLE(99); + TERM_CASE_HANDLE(100); + TERM_CASE_HANDLE(101); + TERM_CASE_HANDLE(102); + TERM_CASE_HANDLE(103); + TERM_CASE_HANDLE(104); + TERM_CASE_HANDLE(105); + TERM_CASE_HANDLE(106); + TERM_CASE_HANDLE(107); + TERM_CASE_HANDLE(108); + TERM_CASE_HANDLE(109); + TERM_CASE_HANDLE(110); + TERM_CASE_HANDLE(111); + TERM_CASE_HANDLE(112); + TERM_CASE_HANDLE(113); + TERM_CASE_HANDLE(114); + TERM_CASE_HANDLE(115); + TERM_CASE_HANDLE(116); + TERM_CASE_HANDLE(117); + TERM_CASE_HANDLE(118); + TERM_CASE_HANDLE(119); + TERM_CASE_HANDLE(120); + TERM_CASE_HANDLE(121); + TERM_CASE_HANDLE(122); + TERM_CASE_HANDLE(123); + TERM_CASE_HANDLE(124); + TERM_CASE_HANDLE(125); + TERM_CASE_HANDLE(126); + TERM_CASE_HANDLE(127); + TERM_CASE_HANDLE(128); + TERM_CASE_HANDLE(129); + TERM_CASE_HANDLE(130); + TERM_CASE_HANDLE(131); + TERM_CASE_HANDLE(132); + TERM_CASE_HANDLE(133); + TERM_CASE_HANDLE(134); + TERM_CASE_HANDLE(135); + TERM_CASE_HANDLE(136); + TERM_CASE_HANDLE(137); + TERM_CASE_HANDLE(138); + TERM_CASE_HANDLE(139); + TERM_CASE_HANDLE(140); + TERM_CASE_HANDLE(141); + TERM_CASE_HANDLE(142); + TERM_CASE_HANDLE(143); + TERM_CASE_HANDLE(144); + TERM_CASE_HANDLE(145); + TERM_CASE_HANDLE(146); + TERM_CASE_HANDLE(147); + TERM_CASE_HANDLE(148); + TERM_CASE_HANDLE(149); + TERM_CASE_HANDLE(150); + TERM_CASE_HANDLE(151); + TERM_CASE_HANDLE(152); + TERM_CASE_HANDLE(153); + TERM_CASE_HANDLE(154); + TERM_CASE_HANDLE(155); + TERM_CASE_HANDLE(156); + TERM_CASE_HANDLE(157); + TERM_CASE_HANDLE(158); + TERM_CASE_HANDLE(159); + TERM_CASE_HANDLE(160); + TERM_CASE_HANDLE(161); + TERM_CASE_HANDLE(162); + TERM_CASE_HANDLE(163); + TERM_CASE_HANDLE(164); + TERM_CASE_HANDLE(165); + TERM_CASE_HANDLE(166); + TERM_CASE_HANDLE(167); + TERM_CASE_HANDLE(168); + TERM_CASE_HANDLE(169); + TERM_CASE_HANDLE(170); + TERM_CASE_HANDLE(171); + TERM_CASE_HANDLE(172); + TERM_CASE_HANDLE(173); + TERM_CASE_HANDLE(174); + TERM_CASE_HANDLE(175); + TERM_CASE_HANDLE(176); + TERM_CASE_HANDLE(177); + TERM_CASE_HANDLE(178); + TERM_CASE_HANDLE(179); + TERM_CASE_HANDLE(180); + TERM_CASE_HANDLE(181); + TERM_CASE_HANDLE(182); + TERM_CASE_HANDLE(183); + TERM_CASE_HANDLE(184); + TERM_CASE_HANDLE(185); + TERM_CASE_HANDLE(186); + TERM_CASE_HANDLE(187); + TERM_CASE_HANDLE(188); + TERM_CASE_HANDLE(189); + TERM_CASE_HANDLE(190); + TERM_CASE_HANDLE(191); + TERM_CASE_HANDLE(192); + TERM_CASE_HANDLE(193); + TERM_CASE_HANDLE(194); + TERM_CASE_HANDLE(195); + TERM_CASE_HANDLE(196); + TERM_CASE_HANDLE(197); + TERM_CASE_HANDLE(198); + TERM_CASE_HANDLE(199); + TERM_CASE_HANDLE(200); + TERM_CASE_HANDLE(201); + TERM_CASE_HANDLE(202); + TERM_CASE_HANDLE(203); + TERM_CASE_HANDLE(204); + TERM_CASE_HANDLE(205); + TERM_CASE_HANDLE(206); + TERM_CASE_HANDLE(207); + TERM_CASE_HANDLE(208); + TERM_CASE_HANDLE(209); + TERM_CASE_HANDLE(210); + TERM_CASE_HANDLE(211); + TERM_CASE_HANDLE(212); + TERM_CASE_HANDLE(213); + TERM_CASE_HANDLE(214); + TERM_CASE_HANDLE(215); + TERM_CASE_HANDLE(216); + TERM_CASE_HANDLE(217); + TERM_CASE_HANDLE(218); + TERM_CASE_HANDLE(219); + TERM_CASE_HANDLE(220); + TERM_CASE_HANDLE(221); + TERM_CASE_HANDLE(222); + TERM_CASE_HANDLE(223); + TERM_CASE_HANDLE(224); + TERM_CASE_HANDLE(225); + TERM_CASE_HANDLE(226); + TERM_CASE_HANDLE(227); + TERM_CASE_HANDLE(228); + TERM_CASE_HANDLE(229); + TERM_CASE_HANDLE(230); + TERM_CASE_HANDLE(231); + TERM_CASE_HANDLE(232); + TERM_CASE_HANDLE(233); + TERM_CASE_HANDLE(234); + TERM_CASE_HANDLE(235); + TERM_CASE_HANDLE(236); + TERM_CASE_HANDLE(237); + TERM_CASE_HANDLE(238); + TERM_CASE_HANDLE(239); + TERM_CASE_HANDLE(240); + TERM_CASE_HANDLE(241); + TERM_CASE_HANDLE(242); + TERM_CASE_HANDLE(243); + TERM_CASE_HANDLE(244); + TERM_CASE_HANDLE(245); + TERM_CASE_HANDLE(246); + TERM_CASE_HANDLE(247); + TERM_CASE_HANDLE(248); + TERM_CASE_HANDLE(249); + } + return NULL; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/settings.c b/local/recipes/libs/vulkan-loader/source/loader/settings.c new file mode 100644 index 0000000000..fce896e832 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/settings.c @@ -0,0 +1,868 @@ +/* + * + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, 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. + * + * + * Author: Charles Giessen + * + */ + +#include "settings.h" + +#include "allocation.h" +#include "cJSON.h" +#include "loader.h" +#include "loader_environment.h" +#include "loader_json.h" +#if defined(WIN32) +#include "loader_windows.h" +#endif +#include "log.h" +#include "stack_allocation.h" +#include "vk_loader_platform.h" + +loader_platform_thread_mutex global_loader_settings_lock; +loader_settings global_loader_settings; + +void free_layer_configuration(const struct loader_instance* inst, loader_settings_layer_configuration* layer_configuration) { + loader_instance_heap_free(inst, layer_configuration->name); + loader_instance_heap_free(inst, layer_configuration->path); + memset(layer_configuration, 0, sizeof(loader_settings_layer_configuration)); +} + +void free_loader_settings(const struct loader_instance* inst, loader_settings* settings) { + if (NULL != settings->layer_configurations) { + for (uint32_t i = 0; i < settings->layer_configuration_count; i++) { + free_layer_configuration(inst, &settings->layer_configurations[i]); + } + } + loader_instance_heap_free(inst, settings->layer_configurations); + loader_instance_heap_free(inst, settings->settings_file_path); + memset(settings, 0, sizeof(loader_settings)); +} + +loader_settings_layer_control parse_control_string(char* control_string) { + loader_settings_layer_control layer_control = LOADER_SETTINGS_LAYER_CONTROL_DEFAULT; + if (strcmp(control_string, "auto") == 0) + layer_control = LOADER_SETTINGS_LAYER_CONTROL_DEFAULT; + else if (strcmp(control_string, "on") == 0) + layer_control = LOADER_SETTINGS_LAYER_CONTROL_ON; + else if (strcmp(control_string, "off") == 0) + layer_control = LOADER_SETTINGS_LAYER_CONTROL_OFF; + else if (strcmp(control_string, "unordered_layer_location") == 0) + layer_control = LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION; + return layer_control; +} + +const char* loader_settings_layer_control_to_string(loader_settings_layer_control control) { + switch (control) { + case (LOADER_SETTINGS_LAYER_CONTROL_DEFAULT): + return "auto"; + case (LOADER_SETTINGS_LAYER_CONTROL_ON): + return "on"; + case (LOADER_SETTINGS_LAYER_CONTROL_OFF): + return "off"; + case (LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION): + return "unordered_layer_location"; + default: + return "UNKNOWN_LAYER_CONTROl"; + } +} + +uint32_t parse_log_filters_from_strings(struct loader_string_list* log_filters) { + uint32_t filters = 0; + for (uint32_t i = 0; i < log_filters->count; i++) { + if (strcmp(log_filters->list[i], "all") == 0) + filters |= VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_PERF_BIT | VULKAN_LOADER_ERROR_BIT | + VULKAN_LOADER_DEBUG_BIT | VULKAN_LOADER_LAYER_BIT | VULKAN_LOADER_DRIVER_BIT | VULKAN_LOADER_VALIDATION_BIT; + else if (strcmp(log_filters->list[i], "info") == 0) + filters |= VULKAN_LOADER_INFO_BIT; + else if (strcmp(log_filters->list[i], "warn") == 0) + filters |= VULKAN_LOADER_WARN_BIT; + else if (strcmp(log_filters->list[i], "perf") == 0) + filters |= VULKAN_LOADER_PERF_BIT; + else if (strcmp(log_filters->list[i], "error") == 0) + filters |= VULKAN_LOADER_ERROR_BIT; + else if (strcmp(log_filters->list[i], "debug") == 0) + filters |= VULKAN_LOADER_DEBUG_BIT; + else if (strcmp(log_filters->list[i], "layer") == 0) + filters |= VULKAN_LOADER_LAYER_BIT; + else if (strcmp(log_filters->list[i], "driver") == 0) + filters |= VULKAN_LOADER_DRIVER_BIT; + else if (strcmp(log_filters->list[i], "validation") == 0) + filters |= VULKAN_LOADER_VALIDATION_BIT; + } + return filters; +} + +bool parse_json_enable_disable_option(cJSON* object) { + char* str = loader_cJSON_GetStringValue(object); + if (NULL == str) { + return false; + } + bool enable = false; + if (strcmp(str, "enabled") == 0) { + enable = true; + } + return enable; +} + +VkResult parse_layer_configuration(const struct loader_instance* inst, cJSON* layer_configuration_json, + loader_settings_layer_configuration* layer_configuration) { + char* control_string = NULL; + VkResult res = loader_parse_json_string(layer_configuration_json, "control", &control_string); + if (res != VK_SUCCESS) { + goto out; + } + layer_configuration->control = parse_control_string(control_string); + loader_instance_heap_free(inst, control_string); + + // If that is the only value - do no further parsing + if (layer_configuration->control == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) { + goto out; + } + + res = loader_parse_json_string(layer_configuration_json, "name", &(layer_configuration->name)); + if (res != VK_SUCCESS) { + goto out; + } + + res = loader_parse_json_string(layer_configuration_json, "path", &(layer_configuration->path)); + if (res != VK_SUCCESS) { + goto out; + } + + cJSON* treat_as_implicit_manifest = loader_cJSON_GetObjectItem(layer_configuration_json, "treat_as_implicit_manifest"); + if (treat_as_implicit_manifest && treat_as_implicit_manifest->type == cJSON_True) { + layer_configuration->treat_as_implicit_manifest = true; + } +out: + if (VK_SUCCESS != res) { + free_layer_configuration(inst, layer_configuration); + } + return res; +} + +VkResult parse_layer_configurations(const struct loader_instance* inst, cJSON* settings_object, loader_settings* loader_settings) { + VkResult res = VK_SUCCESS; + + cJSON* layer_configurations = loader_cJSON_GetObjectItem(settings_object, "layers"); + // If the layers object isn't present, return early with success to allow the settings file to still apply + if (NULL == layer_configurations) { + return VK_SUCCESS; + } + + uint32_t layer_configurations_count = loader_cJSON_GetArraySize(layer_configurations); + if (layer_configurations_count == 0) { + return VK_SUCCESS; + } + + loader_settings->layer_configuration_count = layer_configurations_count; + + loader_settings->layer_configurations = loader_instance_heap_calloc( + inst, sizeof(loader_settings_layer_configuration) * layer_configurations_count, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == loader_settings->layer_configurations) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + cJSON* layer = NULL; + size_t i = 0; + cJSON_ArrayForEach(layer, layer_configurations) { + if (layer->type != cJSON_Object) { + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + res = parse_layer_configuration(inst, layer, &(loader_settings->layer_configurations[i++])); + if (VK_SUCCESS != res) { + goto out; + } + } +out: + if (res != VK_SUCCESS) { + if (loader_settings->layer_configurations) { + for (size_t index = 0; index < loader_settings->layer_configuration_count; index++) { + free_layer_configuration(inst, &(loader_settings->layer_configurations[index])); + } + loader_settings->layer_configuration_count = 0; + loader_instance_heap_free(inst, loader_settings->layer_configurations); + loader_settings->layer_configurations = NULL; + } + } + + return res; +} + +VkResult check_if_settings_path_exists(const struct loader_instance* inst, const char* base, const char* suffix, + char** settings_file_path) { + if (NULL == base || NULL == suffix) { + return VK_ERROR_INITIALIZATION_FAILED; + } + size_t base_len = strlen(base); + size_t suffix_len = strlen(suffix); + size_t path_len = base_len + suffix_len + 1; + *settings_file_path = loader_instance_heap_calloc(inst, path_len, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (NULL == *settings_file_path) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + loader_strncpy(*settings_file_path, path_len, base, base_len); + loader_strncat(*settings_file_path, path_len, suffix, suffix_len); + + if (!loader_platform_file_exists(*settings_file_path)) { + loader_instance_heap_free(inst, *settings_file_path); + *settings_file_path = NULL; + return VK_ERROR_INITIALIZATION_FAILED; + } + return VK_SUCCESS; +} +VkResult get_unix_settings_path(const struct loader_instance* inst, char** settings_file_path) { + VkResult res = + check_if_settings_path_exists(inst, loader_secure_getenv("HOME", inst), + "/.local/share/vulkan/loader_settings.d/" VK_LOADER_SETTINGS_FILENAME, settings_file_path); + if (res == VK_SUCCESS) { + return res; + } + // If HOME isn't set, fallback to XDG_DATA_HOME + res = check_if_settings_path_exists(inst, loader_secure_getenv("XDG_DATA_HOME", inst), + "/vulkan/loader_settings.d/" VK_LOADER_SETTINGS_FILENAME, settings_file_path); + if (res == VK_SUCCESS) { + return res; + } + // if XDG_DATA_HOME isn't set, fallback to /etc. + // note that the settings_fil_path_suffix stays the same since its the same layout as for XDG_DATA_HOME + return check_if_settings_path_exists(inst, "/etc", "/vulkan/loader_settings.d/" VK_LOADER_SETTINGS_FILENAME, + settings_file_path); +} + +bool check_if_settings_are_equal(loader_settings* a, loader_settings* b) { + // If either pointer is null, return true + if (NULL == a || NULL == b) return false; + bool are_equal = true; + are_equal &= a->settings_active == b->settings_active; + are_equal &= a->has_unordered_layer_location == b->has_unordered_layer_location; + are_equal &= a->debug_level == b->debug_level; + are_equal &= a->layer_configuration_count == b->layer_configuration_count; + if (!are_equal) return false; + for (uint32_t i = 0; i < a->layer_configuration_count && i < b->layer_configuration_count; i++) { + if (a->layer_configurations[i].name && b->layer_configurations[i].name) { + are_equal &= 0 == strcmp(a->layer_configurations[i].name, b->layer_configurations[i].name); + } else { + are_equal = false; + } + if (a->layer_configurations[i].path && b->layer_configurations[i].path) { + are_equal &= 0 == strcmp(a->layer_configurations[i].path, b->layer_configurations[i].path); + } else { + are_equal = false; + } + are_equal &= a->layer_configurations[i].control == b->layer_configurations[i].control; + } + return are_equal; +} + +void log_settings(const struct loader_instance* inst, loader_settings* settings) { + if (settings == NULL) { + return; + } + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, "Using layer configurations found in loader settings from %s", + settings->settings_file_path); + + char cmd_line_msg[64] = {0}; + size_t cmd_line_size = sizeof(cmd_line_msg); + + cmd_line_msg[0] = '\0'; + + generate_debug_flag_str(settings->debug_level, cmd_line_size, cmd_line_msg); + if (strlen(cmd_line_msg)) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Loader Settings Filters for Logging to Standard Error: %s", cmd_line_msg); + } + + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Layer Configurations count = %d", settings->layer_configuration_count); + for (uint32_t i = 0; i < settings->layer_configuration_count; i++) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "---- Layer Configuration [%d] ----", i); + if (settings->layer_configurations[i].control != LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Name: %s", settings->layer_configurations[i].name); + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Path: %s", settings->layer_configurations[i].path); + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Layer Type: %s", + settings->layer_configurations[i].treat_as_implicit_manifest ? "Implicit" : "Explicit"); + } + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "Control: %s", + loader_settings_layer_control_to_string(settings->layer_configurations[i].control)); + } + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "---------------------------------"); +} + +// Loads the vk_loader_settings.json file +// Returns VK_SUCCESS if it was found & was successfully parsed. Otherwise, it returns VK_ERROR_INITIALIZATION_FAILED if it +// wasn't found or failed to parse, and returns VK_ERROR_OUT_OF_HOST_MEMORY if it was unable to allocate enough memory. +VkResult get_loader_settings(const struct loader_instance* inst, loader_settings* loader_settings) { + VkResult res = VK_SUCCESS; + cJSON* json = NULL; + char* file_format_version_string = NULL; + char* settings_file_path = NULL; +#if defined(WIN32) + res = windows_get_loader_settings_file_path(inst, &settings_file_path); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "No valid vk_loader_settings.json file found, no loader settings will be active"); + goto out; + } + +#elif COMMON_UNIX_PLATFORMS + res = get_unix_settings_path(inst, &settings_file_path); + if (res != VK_SUCCESS) { + loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, + "No valid vk_loader_settings.json file found, no loader settings will be active"); + goto out; + } +#else +#warning "Unsupported platform - must specify platform specific location for vk_loader_settings.json" +#endif + + res = loader_get_json(inst, settings_file_path, &json); + // Make sure sure the top level json value is an object + if (res != VK_SUCCESS || NULL == json || json->type != cJSON_Object) { + goto out; + } + + res = loader_parse_json_string(json, "file_format_version", &file_format_version_string); + if (res != VK_SUCCESS) { + if (res != VK_ERROR_OUT_OF_HOST_MEMORY) { + loader_log( + inst, VULKAN_LOADER_DEBUG_BIT, 0, + "Loader settings file from %s missing required field file_format_version - no loader settings will be active", + settings_file_path); + } + goto out; + } + + // Because the file may contain either a "settings_array" or a single "settings" object, we need to create a cJSON so that we + // can iterate on both cases with common code + cJSON settings_iter_parent = {0}; + + cJSON* settings_array = loader_cJSON_GetObjectItem(json, "settings_array"); + cJSON* single_settings_object = loader_cJSON_GetObjectItem(json, "settings"); + if (NULL != settings_array) { + memcpy(&settings_iter_parent, settings_array, sizeof(cJSON)); + } else if (NULL != single_settings_object) { + settings_iter_parent.child = single_settings_object; + } else if (settings_array == NULL && single_settings_object) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, + "Loader settings file from %s missing required settings objects: Either one of the \"settings\" or " + "\"settings_array\" objects must be present - no loader settings will be active", + settings_file_path); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Corresponds to the settings object that has no app keys + cJSON* global_settings = NULL; + // Corresponds to the settings object which has a matching app key + cJSON* settings_to_use = NULL; + + char current_process_path[1024]; + bool valid_exe_path = NULL != loader_platform_executable_path(current_process_path, 1024); + + cJSON* settings_object_iter = NULL; + cJSON_ArrayForEach(settings_object_iter, &settings_iter_parent) { + if (settings_object_iter->type != cJSON_Object) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, + "Loader settings file from %s has a settings element that is not an object", settings_file_path); + break; + } + + cJSON* app_keys = loader_cJSON_GetObjectItem(settings_object_iter, "app_keys"); + if (NULL == app_keys) { + // use the first 'global' settings that has no app keys as the global one + if (global_settings == NULL) { + global_settings = settings_object_iter; + } + continue; + } + // No sense iterating if we couldn't get the executable path + if (!valid_exe_path) { + break; + } + cJSON* app_key = NULL; + cJSON_ArrayForEach(app_key, app_keys) { + char* app_key_str = loader_cJSON_GetStringValue(app_key); + if (app_key_str && strcmp(current_process_path, app_key_str) == 0) { + settings_to_use = settings_object_iter; + break; + } + } + + // Break if we have found a matching current_process_path + if (NULL != settings_to_use) { + break; + } + } + + // No app specific settings match - either use global settings or exit + if (settings_to_use == NULL) { + if (global_settings == NULL) { + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, + "Loader settings file from %s missing global settings and none of the app specific settings matched the " + "current application - no loader settings will be active", + settings_file_path); + goto out; // No global settings were found - exit + } else { + settings_to_use = global_settings; // Global settings are present - use it + } + } + + // optional + cJSON* stderr_filter = loader_cJSON_GetObjectItem(settings_to_use, "stderr_log"); + if (NULL != stderr_filter) { + struct loader_string_list stderr_log = {0}; + res = loader_parse_json_array_of_strings(inst, settings_to_use, "stderr_log", &stderr_log); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + goto out; + } + loader_settings->debug_level = parse_log_filters_from_strings(&stderr_log); + free_string_list(inst, &stderr_log); + } + + // optional + cJSON* logs_to_use = loader_cJSON_GetObjectItem(settings_to_use, "log_locations"); + if (NULL != logs_to_use) { + cJSON* log_element = NULL; + cJSON_ArrayForEach(log_element, logs_to_use) { + // bool is_valid = true; + struct loader_string_list log_destinations = {0}; + res = loader_parse_json_array_of_strings(inst, log_element, "destinations", &log_destinations); + if (res != VK_SUCCESS) { + // is_valid = false; + } + free_string_list(inst, &log_destinations); + struct loader_string_list log_filters = {0}; + res = loader_parse_json_array_of_strings(inst, log_element, "filters", &log_filters); + if (res != VK_SUCCESS) { + // is_valid = false; + } + free_string_list(inst, &log_filters); + } + } + + res = parse_layer_configurations(inst, settings_to_use, loader_settings); + if (res != VK_SUCCESS) { + goto out; + } + + // Determine if there exists a layer configuration indicating where to put layers not contained in the settings file + // LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION + for (uint32_t i = 0; i < loader_settings->layer_configuration_count; i++) { + if (loader_settings->layer_configurations[i].control == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) { + loader_settings->has_unordered_layer_location = true; + break; + } + } + + loader_settings->settings_file_path = settings_file_path; + settings_file_path = NULL; + loader_settings->settings_active = true; +out: + if (NULL != json) { + loader_cJSON_Delete(json); + } + + loader_instance_heap_free(inst, settings_file_path); + + loader_instance_heap_free(inst, file_format_version_string); + return res; +} + +TEST_FUNCTION_EXPORT VkResult update_global_loader_settings(void) { + loader_settings settings = {0}; + VkResult res = get_loader_settings(NULL, &settings); + loader_platform_thread_lock_mutex(&global_loader_settings_lock); + + free_loader_settings(NULL, &global_loader_settings); + if (res == VK_SUCCESS) { + if (!check_if_settings_are_equal(&settings, &global_loader_settings)) { + log_settings(NULL, &settings); + } + + memcpy(&global_loader_settings, &settings, sizeof(loader_settings)); + if (global_loader_settings.settings_active && global_loader_settings.debug_level > 0) { + loader_set_global_debug_level(global_loader_settings.debug_level); + } + } + loader_platform_thread_unlock_mutex(&global_loader_settings_lock); + return res; +} + +void init_global_loader_settings(void) { + loader_platform_thread_create_mutex(&global_loader_settings_lock); + // Free out the global settings in case the process was loaded & unloaded + free_loader_settings(NULL, &global_loader_settings); +} +void teardown_global_loader_settings(void) { + free_loader_settings(NULL, &global_loader_settings); + loader_platform_thread_delete_mutex(&global_loader_settings_lock); +} + +bool should_skip_logging_global_messages(VkFlags msg_type) { + loader_platform_thread_lock_mutex(&global_loader_settings_lock); + bool should_skip = global_loader_settings.settings_active && 0 != (msg_type & global_loader_settings.debug_level); + loader_platform_thread_unlock_mutex(&global_loader_settings_lock); + return should_skip; +} + +// Use this function to get the correct settings to use based on the context +// If inst is NULL - use the global settings and lock the mutex +// Else return the settings local to the instance - but do nto lock the mutex +const loader_settings* get_current_settings_and_lock(const struct loader_instance* inst) { + if (inst) { + return &inst->settings; + } + loader_platform_thread_lock_mutex(&global_loader_settings_lock); + return &global_loader_settings; +} +// Release the global settings lock if we are using the global settings - aka if inst is NULL +void release_current_settings_lock(const struct loader_instance* inst) { + if (inst == NULL) { + loader_platform_thread_unlock_mutex(&global_loader_settings_lock); + } +} + +TEST_FUNCTION_EXPORT VkResult get_settings_layers(const struct loader_instance* inst, struct loader_layer_list* settings_layers, + bool* should_search_for_other_layers) { + VkResult res = VK_SUCCESS; + *should_search_for_other_layers = true; // default to true + + const loader_settings* settings = get_current_settings_and_lock(inst); + + if (NULL == settings || !settings->settings_active) { + goto out; + } + + // Assume the list doesn't contain LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION at first + *should_search_for_other_layers = false; + + for (uint32_t i = 0; i < settings->layer_configuration_count; i++) { + loader_settings_layer_configuration* layer_config = &settings->layer_configurations[i]; + + // If we encountered a layer that should be forced off, we add it to the settings_layers list but only + // with the data required to compare it with layers not in the settings file (aka name and manifest path) + if (layer_config->control == LOADER_SETTINGS_LAYER_CONTROL_OFF) { + struct loader_layer_properties props = {0}; + props.settings_control_value = LOADER_SETTINGS_LAYER_CONTROL_OFF; + loader_strncpy(props.info.layerName, VK_MAX_EXTENSION_NAME_SIZE, layer_config->name, VK_MAX_EXTENSION_NAME_SIZE); + props.info.layerName[VK_MAX_EXTENSION_NAME_SIZE - 1] = '\0'; + res = loader_copy_to_new_str(inst, layer_config->path, &props.manifest_file_name); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + goto out; + } + res = loader_append_layer_property(inst, settings_layers, &props); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + loader_free_layer_properties(inst, &props); + goto out; + } + continue; + } + + // The special layer location that indicates where unordered layers should go only should have the + // settings_control_value set - everything else should be NULL + if (layer_config->control == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) { + struct loader_layer_properties props = {0}; + props.settings_control_value = LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION; + res = loader_append_layer_property(inst, settings_layers, &props); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + loader_free_layer_properties(inst, &props); + goto out; + } + *should_search_for_other_layers = true; + continue; + } + + if (layer_config->path == NULL) { + continue; + } + + cJSON* json = NULL; + VkResult local_res = loader_get_json(inst, layer_config->path, &json); + if (VK_ERROR_OUT_OF_HOST_MEMORY == local_res) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } else if (VK_SUCCESS != local_res || NULL == json) { + continue; + } + + // Makes it possible to know if a new layer was added or not, since the only return value is VkResult + size_t count_before_adding = settings_layers->count; + + local_res = + loader_add_layer_properties(inst, settings_layers, json, layer_config->treat_as_implicit_manifest, layer_config->path); + loader_cJSON_Delete(json); + + // If the error is anything other than out of memory we still want to try to load the other layers + if (VK_ERROR_OUT_OF_HOST_MEMORY == local_res) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } else if (local_res != VK_SUCCESS || count_before_adding == settings_layers->count) { + // Indicates something was wrong with the layer, can't add it to the list + continue; + } + + struct loader_layer_properties* newly_added_layer = &settings_layers->list[settings_layers->count - 1]; + newly_added_layer->settings_control_value = layer_config->control; + // If the manifest file found has a name that differs from the one in the settings, remove this layer from + // consideration + bool should_remove = false; + if (strncmp(newly_added_layer->info.layerName, layer_config->name, VK_MAX_EXTENSION_NAME_SIZE) != 0) { + should_remove = true; + loader_remove_layer_in_list(inst, settings_layers, settings_layers->count - 1); + } + // Make sure the layer isn't already in the list + for (uint32_t j = 0; settings_layers->count > 0 && j < settings_layers->count - 1; j++) { + if (0 == + strncmp(settings_layers->list[j].info.layerName, newly_added_layer->info.layerName, VK_MAX_EXTENSION_NAME_SIZE)) { + if (0 == (newly_added_layer->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) && + strcmp(settings_layers->list[j].lib_name, newly_added_layer->lib_name) == 0) { + should_remove = true; + break; + } + } + } + if (should_remove) { + loader_remove_layer_in_list(inst, settings_layers, settings_layers->count - 1); + } + } + +out: + release_current_settings_lock(inst); + return res; +} + +// Check if layers has an element with the same name. +// LAYER_CONTROL_OFF layers are missing some fields, just make sure the layerName is the same +// If layer_property is a meta layer, just make sure the layerName is the same +// Skip comparing to UNORDERED_LAYER_LOCATION +// If layer_property is a regular layer, check if the lib_path is the same. +// Make sure that the lib_name pointers are non-null before calling strcmp. +bool check_if_layer_is_in_list(struct loader_layer_list* layer_list, struct loader_layer_properties* layer_property) { + // If the layer is a meta layer, just check against the name + for (uint32_t i = 0; i < layer_list->count; i++) { + if (0 == strncmp(layer_list->list[i].info.layerName, layer_property->info.layerName, VK_MAX_EXTENSION_NAME_SIZE)) { + if (layer_list->list[i].settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_OFF) { + return true; + } + if (VK_LAYER_TYPE_FLAG_META_LAYER == (layer_property->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER)) { + return true; + } + if (layer_list->list[i].lib_name && layer_property->lib_name) { + return strcmp(layer_list->list[i].lib_name, layer_property->lib_name) == 0; + } + } + } + return false; +} + +VkResult combine_settings_layers_with_regular_layers(const struct loader_instance* inst, struct loader_layer_list* settings_layers, + struct loader_layer_list* regular_layers, + struct loader_layer_list* output_layers) { + VkResult res = VK_SUCCESS; + bool has_unordered_layer_location = false; + uint32_t unordered_layer_location_index = 0; + // Location to put layers that aren't known to the settings file + // Find it here so we dont have to pass in a loader_settings struct + for (uint32_t i = 0; i < settings_layers->count; i++) { + if (settings_layers->list[i].settings_control_value == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) { + has_unordered_layer_location = true; + unordered_layer_location_index = i; + break; + } + } + + if (settings_layers->count == 0 && regular_layers->count == 0) { + // No layers to combine + goto out; + } else if (settings_layers->count == 0) { + // No settings layers - just copy regular to output_layers - memset regular layers to prevent double frees + *output_layers = *regular_layers; + memset(regular_layers, 0, sizeof(struct loader_layer_list)); + goto out; + } else if (regular_layers->count == 0 || !has_unordered_layer_location) { + // No regular layers or has_unordered_layer_location is false - just copy settings to output_layers - + // memset settings layers to prevent double frees + *output_layers = *settings_layers; + memset(settings_layers, 0, sizeof(struct loader_layer_list)); + goto out; + } + + res = loader_init_generic_list(inst, (struct loader_generic_list*)output_layers, + (settings_layers->count + regular_layers->count) * sizeof(struct loader_layer_properties)); + if (VK_SUCCESS != res) { + goto out; + } + + // Insert the settings layers into output_layers up to unordered_layer_index + for (uint32_t i = 0; i < unordered_layer_location_index; i++) { + if (!check_if_layer_is_in_list(output_layers, &settings_layers->list[i])) { + res = loader_append_layer_property(inst, output_layers, &settings_layers->list[i]); + if (VK_SUCCESS != res) { + goto out; + } + } + } + + for (uint32_t i = 0; i < regular_layers->count; i++) { + // Check if its already been put in the output_layers list as well as the remaining settings_layers + bool regular_layer_is_ordered = check_if_layer_is_in_list(output_layers, ®ular_layers->list[i]) || + check_if_layer_is_in_list(settings_layers, ®ular_layers->list[i]); + // If it isn't found, add it + if (!regular_layer_is_ordered) { + res = loader_append_layer_property(inst, output_layers, ®ular_layers->list[i]); + if (VK_SUCCESS != res) { + goto out; + } + } else { + // layer is already ordered and can be safely freed + loader_free_layer_properties(inst, ®ular_layers->list[i]); + } + } + + // Insert the rest of the settings layers into combined_layers from unordered_layer_index to the end + // start at one after the unordered_layer_index + for (uint32_t i = unordered_layer_location_index + 1; i < settings_layers->count; i++) { + res = loader_append_layer_property(inst, output_layers, &settings_layers->list[i]); + if (VK_SUCCESS != res) { + goto out; + } + } + +out: + if (res != VK_SUCCESS) { + loader_delete_layer_list_and_properties(inst, output_layers); + } + + return res; +} + +VkResult enable_correct_layers_from_settings(const struct loader_instance* inst, const struct loader_envvar_all_filters* filters, + uint32_t app_enabled_name_count, const char* const* app_enabled_names, + const struct loader_layer_list* instance_layers, + struct loader_pointer_layer_list* target_layer_list, + struct loader_pointer_layer_list* activated_layer_list) { + VkResult res = VK_SUCCESS; + char* vk_instance_layers_env = loader_getenv(ENABLED_LAYERS_ENV, inst); + size_t vk_instance_layers_env_len = 0; + char* vk_instance_layers_env_copy = NULL; + if (vk_instance_layers_env != NULL) { + vk_instance_layers_env_len = strlen(vk_instance_layers_env) + 1; + vk_instance_layers_env_copy = loader_stack_alloc(vk_instance_layers_env_len); + memset(vk_instance_layers_env_copy, 0, vk_instance_layers_env_len); + + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, "env var \'%s\' defined and adding layers: %s", + ENABLED_LAYERS_ENV, vk_instance_layers_env); + } + for (uint32_t i = 0; i < instance_layers->count; i++) { + bool enable_layer = false; + struct loader_layer_properties* props = &instance_layers->list[i]; + + // Skip the sentinel unordered layer location + if (props->settings_control_value == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) { + continue; + } + + // Do not enable the layer if the settings have it set as off + if (props->settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_OFF) { + continue; + } + // Force enable it based on settings + if (props->settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_ON) { + enable_layer = true; + props->enabled_by_what = ENABLED_BY_WHAT_LOADER_SETTINGS_FILE; + } else { + // Check if disable filter needs to skip the layer + if ((filters->disable_filter.disable_all || filters->disable_filter.disable_all_implicit || + check_name_matches_filter_environment_var(props->info.layerName, &filters->disable_filter.additional_filters)) && + !check_name_matches_filter_environment_var(props->info.layerName, &filters->allow_filter)) { + // Report a message that we've forced off a layer if it would have been enabled normally. + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" forced disabled because name matches filter of env var \'%s\'.", props->info.layerName, + VK_LAYERS_DISABLE_ENV_VAR); + + continue; + } + } + // Check the enable filter + if (!enable_layer && check_name_matches_filter_environment_var(props->info.layerName, &filters->enable_filter)) { + enable_layer = true; + props->enabled_by_what = ENABLED_BY_WHAT_VK_LOADER_LAYERS_ENABLE; + loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "Layer \"%s\" forced enabled due to env var \'%s\'.", props->info.layerName, VK_LAYERS_ENABLE_ENV_VAR); + } + + // First look for the old-fashion layers forced on with VK_INSTANCE_LAYERS + if (!enable_layer && vk_instance_layers_env && vk_instance_layers_env_copy && vk_instance_layers_env_len > 0) { + // Copy the env-var on each iteration, so that loader_get_next_path can correctly find the separators + // This solution only needs one stack allocation ahead of time rather than an allocation per layer in the + // env-var + loader_strncpy(vk_instance_layers_env_copy, vk_instance_layers_env_len, vk_instance_layers_env, + vk_instance_layers_env_len); + + char* instance_layers_env_iter = vk_instance_layers_env_copy; + while (instance_layers_env_iter && *instance_layers_env_iter) { + char* next = loader_get_next_path(instance_layers_env_iter); + if (0 == strcmp(instance_layers_env_iter, props->info.layerName)) { + enable_layer = true; + props->enabled_by_what = ENABLED_BY_WHAT_VK_INSTANCE_LAYERS; + break; + } + instance_layers_env_iter = next; + } + } + + // Check if it should be enabled by the application + if (!enable_layer) { + for (uint32_t j = 0; j < app_enabled_name_count; j++) { + if (strcmp(props->info.layerName, app_enabled_names[j]) == 0) { + enable_layer = true; + props->enabled_by_what = ENABLED_BY_WHAT_IN_APPLICATION_API; + break; + } + } + } + + // Check if its an implicit layers and thus enabled by default + if (!enable_layer && (0 == (props->type_flags & VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER)) && + loader_implicit_layer_is_enabled(inst, filters, props)) { + enable_layer = true; + props->enabled_by_what = ENABLED_BY_WHAT_IMPLICIT_LAYER; + } + + if (enable_layer) { + // Check if the layer is a meta layer reuse the existing function to add the meta layer + if (props->type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) { + res = loader_add_meta_layer(inst, filters, props, target_layer_list, activated_layer_list, instance_layers, NULL); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) goto out; + } else { + res = loader_add_layer_properties_to_list(inst, target_layer_list, props); + if (res != VK_SUCCESS) { + goto out; + } + res = loader_add_layer_properties_to_list(inst, activated_layer_list, props); + if (res != VK_SUCCESS) { + goto out; + } + } + } + } +out: + return res; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/settings.h b/local/recipes/libs/vulkan-loader/source/loader/settings.h new file mode 100644 index 0000000000..4e776ff0ab --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/settings.h @@ -0,0 +1,114 @@ +/* + * + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, 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. + * + * + * Author: Charles Giessen + * + */ + +#pragma once + +#include +#include +#include + +#include "vulkan/vulkan_core.h" + +#include "log.h" +#include "vk_loader_platform.h" + +struct loader_instance; +struct loader_layer_list; +struct loader_pointer_layer_list; +struct loader_envvar_all_filters; +typedef struct log_configuration log_configuration; + +typedef enum loader_settings_layer_control { + LOADER_SETTINGS_LAYER_CONTROL_DEFAULT, // layer is not enabled by settings file but can be enabled through other means + LOADER_SETTINGS_LAYER_CONTROL_ON, // layer is enabled by settings file + LOADER_SETTINGS_LAYER_CONTROL_OFF, // layer is prevented from being enabled + LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION // special control indicating unspecified layers should go here. If this is not + // in the settings file, then the loader assume no other layers should be + // searched & loaded. +} loader_settings_layer_control; + +// If a loader_settings_layer_configuration has a name of loader_settings_unknown_layers_location, then it specifies that the +// layer configuration it was found in shall be the location all layers not listed in the settings file that are enabled. +#define LOADER_SETTINGS_UNKNOWN_LAYERS_LOCATION "loader_settings_unknown_layers_location" + +#define LOADER_SETTINGS_MAX_NAME_SIZE 256U; + +typedef struct loader_settings_layer_configuration { + char* name; + char* path; + loader_settings_layer_control control; + bool treat_as_implicit_manifest; // whether or not the layer should be parsed as if it is implicit + +} loader_settings_layer_configuration; + +typedef struct loader_settings { + bool settings_active; + bool has_unordered_layer_location; + enum vulkan_loader_debug_flags debug_level; + + uint32_t layer_configuration_count; + loader_settings_layer_configuration* layer_configurations; + + char* settings_file_path; +} loader_settings; + +// Call this function to get the current settings that the loader should use. +// It will open up the current loader settings file and return a loader_settings in out_loader_settings if it. +// It should be called on every call to the global functions excluding vkGetInstanceProcAddr +// Caller is responsible for cleaning up by calling free_loader_settings() +VkResult get_loader_settings(const struct loader_instance* inst, loader_settings* out_loader_settings); + +void free_loader_settings(const struct loader_instance* inst, loader_settings* loader_settings); + +// Log the settings to the console +void log_settings(const struct loader_instance* inst, loader_settings* settings); + +// Every global function needs to call this at startup to insure that +TEST_FUNCTION_EXPORT VkResult update_global_loader_settings(void); + +// Needs to be called during startup - +void init_global_loader_settings(void); +void teardown_global_loader_settings(void); + +// Check the global settings and return true if msg_type does not correspond to the active global loader settings +bool should_skip_logging_global_messages(VkFlags msg_type); + +// Query the current settings (either global or per-instance) and return the list of layers contained within. +// should_search_for_other_layers tells the caller if the settings file should be used exclusively for layer searching or not +TEST_FUNCTION_EXPORT VkResult get_settings_layers(const struct loader_instance* inst, struct loader_layer_list* settings_layers, + bool* should_search_for_other_layers); + +// Take the provided list of settings_layers and add in the layers from regular search paths +// Only adds layers that aren't already present in the settings_layers and in the location of the +// layer configuration with LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION set +VkResult combine_settings_layers_with_regular_layers(const struct loader_instance* inst, struct loader_layer_list* settings_layers, + struct loader_layer_list* regular_layers, + struct loader_layer_list* output_layers); + +// Fill out activated_layer_list with the layers that should be activated, based on environment variables, VkInstanceCreateInfo, and +// the settings +VkResult enable_correct_layers_from_settings(const struct loader_instance* inst, const struct loader_envvar_all_filters* filters, + uint32_t app_enabled_name_count, const char* const* app_enabled_names, + const struct loader_layer_list* instance_layers, + struct loader_pointer_layer_list* target_layer_list, + struct loader_pointer_layer_list* activated_layer_list); diff --git a/local/recipes/libs/vulkan-loader/source/loader/stack_allocation.h b/local/recipes/libs/vulkan-loader/source/loader/stack_allocation.h new file mode 100644 index 0000000000..baf33667c6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/stack_allocation.h @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2014-2022 The Khronos Group Inc. + * Copyright (c) 2014-2022 Valve Corporation + * Copyright (c) 2014-2022 LunarG, Inc. + * 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Chia-I Wu + * Author: Chia-I Wu + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#pragma once + +#include "vk_loader_platform.h" + +#if defined(_WIN32) +#include +#elif defined(HAVE_ALLOCA_H) +#include +#else +#include +#endif + +#if COMMON_UNIX_PLATFORMS +#define loader_stack_alloc(size) alloca(size) +#elif defined(_WIN32) +#define loader_stack_alloc(size) _alloca(size) +#else +#warning "alloca not available on this platform!" +#endif // defined(_WIN32) diff --git a/local/recipes/libs/vulkan-loader/source/loader/terminator.c b/local/recipes/libs/vulkan-loader/source/loader/terminator.c new file mode 100644 index 0000000000..1f5364c8d4 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/terminator.c @@ -0,0 +1,654 @@ +/* + * + * Copyright (c) 2014-2021 The Khronos Group Inc. + * Copyright (c) 2014-2021 Valve Corporation + * Copyright (c) 2014-2021 LunarG, Inc. + * Copyright (C) 2015 Google Inc. + * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Mark Young + * Author: Lenny Komow + * Author: Charles Giessen + * + */ + +// Terminators which have simple logic belong here, since they are mostly "pass through" +// Function declarations are in vk_loader_extensions.h, thus not needed here + +#include "loader_common.h" +#include "loader.h" +#include "log.h" +#include "stack_allocation.h" + +// Terminators for 1.0 functions + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL != icd_term->dispatch.GetPhysicalDeviceProperties) { + icd_term->dispatch.GetPhysicalDeviceProperties(phys_dev_term->phys_dev, pProperties); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, + uint32_t *pQueueFamilyPropertyCount, + VkQueueFamilyProperties *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL != icd_term->dispatch.GetPhysicalDeviceQueueFamilyProperties) { + icd_term->dispatch.GetPhysicalDeviceQueueFamilyProperties(phys_dev_term->phys_dev, pQueueFamilyPropertyCount, pProperties); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL != icd_term->dispatch.GetPhysicalDeviceMemoryProperties) { + icd_term->dispatch.GetPhysicalDeviceMemoryProperties(phys_dev_term->phys_dev, pProperties); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures *pFeatures) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL != icd_term->dispatch.GetPhysicalDeviceFeatures) { + icd_term->dispatch.GetPhysicalDeviceFeatures(phys_dev_term->phys_dev, pFeatures); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties *pFormatInfo) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL != icd_term->dispatch.GetPhysicalDeviceFormatProperties) { + icd_term->dispatch.GetPhysicalDeviceFormatProperties(phys_dev_term->phys_dev, format, pFormatInfo); + } +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkImageType type, VkImageTiling tiling, + VkImageUsageFlags usage, VkImageCreateFlags flags, + VkImageFormatProperties *pImageFormatProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDeviceImageFormatProperties) { + loader_log( + icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "The icd's vkGetPhysicalDeviceImageFormatProperties was null, returning with VK_ERROR_INITIALIZATION_FAILED instead."); + return VK_ERROR_INITIALIZATION_FAILED; + } + return icd_term->dispatch.GetPhysicalDeviceImageFormatProperties(phys_dev_term->phys_dev, format, type, tiling, usage, flags, + pImageFormatProperties); +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkImageType type, VkSampleCountFlagBits samples, + VkImageUsageFlags usage, VkImageTiling tiling, + uint32_t *pNumProperties, + VkSparseImageFormatProperties *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL != icd_term->dispatch.GetPhysicalDeviceSparseImageFormatProperties) { + icd_term->dispatch.GetPhysicalDeviceSparseImageFormatProperties(phys_dev_term->phys_dev, format, type, samples, usage, + tiling, pNumProperties, pProperties); + } +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, + VkLayerProperties *pProperties) { + (void)pPropertyCount; + (void)pProperties; + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "Encountered the vkEnumerateDeviceLayerProperties terminator. This means a layer improperly continued."); + // Should never get here this call isn't dispatched down the chain + return VK_ERROR_INITIALIZATION_FAILED; +} + +// Terminators for 1.1 functions + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2 *pFeatures) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceFeatures2 fpGetPhysicalDeviceFeatures2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceFeatures2 = icd_term->dispatch.GetPhysicalDeviceFeatures2; + } + if (fpGetPhysicalDeviceFeatures2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceFeatures2 = icd_term->dispatch.GetPhysicalDeviceFeatures2KHR; + } + + if (fpGetPhysicalDeviceFeatures2 != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceFeatures2(phys_dev_term->phys_dev, pFeatures); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceFeatures2: Emulating call in ICD \"%s\" using vkGetPhysicalDeviceFeatures", + icd_term->scanned_icd->lib_name); + + // Write to the VkPhysicalDeviceFeatures2 struct + icd_term->dispatch.GetPhysicalDeviceFeatures(phys_dev_term->phys_dev, &pFeatures->features); + + void *pNext = pFeatures->pNext; + while (pNext != NULL) { + VkBaseOutStructure pNext_in_structure = {0}; + memcpy(&pNext_in_structure, pNext, sizeof(VkBaseOutStructure)); + switch (pNext_in_structure.sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: { + // Skip the check if VK_KHR_multiview is enabled because it's a device extension + // Write to the VkPhysicalDeviceMultiviewFeaturesKHR struct + VkPhysicalDeviceMultiviewFeaturesKHR *multiview_features = (VkPhysicalDeviceMultiviewFeaturesKHR *)pNext; + multiview_features->multiview = VK_FALSE; + multiview_features->multiviewGeometryShader = VK_FALSE; + multiview_features->multiviewTessellationShader = VK_FALSE; + + pNext = multiview_features->pNext; + break; + } + default: { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceFeatures2: Emulation found unrecognized structure type in pFeatures->pNext - " + "this struct will be ignored"); + + pNext = pNext_in_structure.pNext; + break; + } + } + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2 *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceProperties2 fpGetPhysicalDeviceProperties2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceProperties2 = icd_term->dispatch.GetPhysicalDeviceProperties2; + } + if (fpGetPhysicalDeviceProperties2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceProperties2 = icd_term->dispatch.GetPhysicalDeviceProperties2KHR; + } + + if (fpGetPhysicalDeviceProperties2 != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceProperties2(phys_dev_term->phys_dev, pProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceProperties2: Emulating call in ICD \"%s\" using vkGetPhysicalDeviceProperties", + icd_term->scanned_icd->lib_name); + + // Write to the VkPhysicalDeviceProperties2 struct + icd_term->dispatch.GetPhysicalDeviceProperties(phys_dev_term->phys_dev, &pProperties->properties); + + void *pNext = pProperties->pNext; + while (pNext != NULL) { + VkBaseOutStructure pNext_in_structure = {0}; + memcpy(&pNext_in_structure, pNext, sizeof(VkBaseOutStructure)); + switch (pNext_in_structure.sType) { + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: { + VkPhysicalDeviceIDPropertiesKHR *id_properties = (VkPhysicalDeviceIDPropertiesKHR *)pNext; + + // Verify that "VK_KHR_external_memory_capabilities" is enabled + if (icd_term->this_instance->enabled_extensions.khr_external_memory_capabilities) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceProperties2: Emulation cannot generate unique IDs for struct " + "VkPhysicalDeviceIDProperties - setting IDs to zero instead"); + + // Write to the VkPhysicalDeviceIDPropertiesKHR struct + memset(id_properties->deviceUUID, 0, VK_UUID_SIZE); + memset(id_properties->driverUUID, 0, VK_UUID_SIZE); + id_properties->deviceLUIDValid = VK_FALSE; + } + + pNext = id_properties->pNext; + break; + } + default: { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceProperties2KHR: Emulation found unrecognized structure type in " + "pProperties->pNext - this struct will be ignored"); + + pNext = pNext_in_structure.pNext; + break; + } + } + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties2 *pFormatProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceFormatProperties2 fpGetPhysicalDeviceFormatProperties2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceFormatProperties2 = icd_term->dispatch.GetPhysicalDeviceFormatProperties2; + } + if (fpGetPhysicalDeviceFormatProperties2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceFormatProperties2 = icd_term->dispatch.GetPhysicalDeviceFormatProperties2KHR; + } + + if (fpGetPhysicalDeviceFormatProperties2 != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceFormatProperties2(phys_dev_term->phys_dev, format, pFormatProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceFormatProperties2: Emulating call in ICD \"%s\" using vkGetPhysicalDeviceFormatProperties", + icd_term->scanned_icd->lib_name); + + // Write to the VkFormatProperties2 struct + icd_term->dispatch.GetPhysicalDeviceFormatProperties(phys_dev_term->phys_dev, format, &pFormatProperties->formatProperties); + + if (pFormatProperties->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceFormatProperties2: Emulation found unrecognized structure type in " + "pFormatProperties->pNext - this struct will be ignored"); + } + } +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo, + VkImageFormatProperties2 *pImageFormatProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceImageFormatProperties2 fpGetPhysicalDeviceImageFormatProperties2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceImageFormatProperties2 = icd_term->dispatch.GetPhysicalDeviceImageFormatProperties2; + } + if (fpGetPhysicalDeviceImageFormatProperties2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceImageFormatProperties2 = icd_term->dispatch.GetPhysicalDeviceImageFormatProperties2KHR; + } + + if (fpGetPhysicalDeviceImageFormatProperties2 != NULL) { + // Pass the call to the driver + return fpGetPhysicalDeviceImageFormatProperties2(phys_dev_term->phys_dev, pImageFormatInfo, pImageFormatProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceImageFormatProperties2: Emulating call in ICD \"%s\" using " + "vkGetPhysicalDeviceImageFormatProperties", + icd_term->scanned_icd->lib_name); + + // If there is more info in either pNext, then this is unsupported + if (pImageFormatInfo->pNext != NULL || pImageFormatProperties->pNext != NULL) { + return VK_ERROR_FORMAT_NOT_SUPPORTED; + } + + // Write to the VkImageFormatProperties2KHR struct + return icd_term->dispatch.GetPhysicalDeviceImageFormatProperties( + phys_dev_term->phys_dev, pImageFormatInfo->format, pImageFormatInfo->type, pImageFormatInfo->tiling, + pImageFormatInfo->usage, pImageFormatInfo->flags, &pImageFormatProperties->imageFormatProperties); + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, + uint32_t *pQueueFamilyPropertyCount, + VkQueueFamilyProperties2 *pQueueFamilyProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 fpGetPhysicalDeviceQueueFamilyProperties2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceQueueFamilyProperties2 = icd_term->dispatch.GetPhysicalDeviceQueueFamilyProperties2; + } + if (fpGetPhysicalDeviceQueueFamilyProperties2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceQueueFamilyProperties2 = icd_term->dispatch.GetPhysicalDeviceQueueFamilyProperties2KHR; + } + + if (fpGetPhysicalDeviceQueueFamilyProperties2 != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceQueueFamilyProperties2(phys_dev_term->phys_dev, pQueueFamilyPropertyCount, pQueueFamilyProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyProperties2: Emulating call in ICD \"%s\" using " + "vkGetPhysicalDeviceQueueFamilyProperties", + icd_term->scanned_icd->lib_name); + + if (pQueueFamilyProperties == NULL || *pQueueFamilyPropertyCount == 0) { + // Write to pQueueFamilyPropertyCount + icd_term->dispatch.GetPhysicalDeviceQueueFamilyProperties(phys_dev_term->phys_dev, pQueueFamilyPropertyCount, NULL); + } else { + // Allocate a temporary array for the output of the old function + VkQueueFamilyProperties *properties = loader_stack_alloc(*pQueueFamilyPropertyCount * sizeof(VkQueueFamilyProperties)); + if (properties == NULL) { + *pQueueFamilyPropertyCount = 0; + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyProperties2: Out of memory - Failed to allocate array for loader " + "emulation."); + return; + } + + icd_term->dispatch.GetPhysicalDeviceQueueFamilyProperties(phys_dev_term->phys_dev, pQueueFamilyPropertyCount, + properties); + for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; ++i) { + // Write to the VkQueueFamilyProperties2KHR struct + memcpy(&pQueueFamilyProperties[i].queueFamilyProperties, &properties[i], sizeof(VkQueueFamilyProperties)); + + if (pQueueFamilyProperties[i].pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyProperties2: Emulation found unrecognized structure type in " + "pQueueFamilyProperties[%d].pNext - this struct will be ignored", + i); + } + } + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2 *pMemoryProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceMemoryProperties2 fpGetPhysicalDeviceMemoryProperties2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceMemoryProperties2 = icd_term->dispatch.GetPhysicalDeviceMemoryProperties2; + } + if (fpGetPhysicalDeviceMemoryProperties2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceMemoryProperties2 = icd_term->dispatch.GetPhysicalDeviceMemoryProperties2KHR; + } + + if (fpGetPhysicalDeviceMemoryProperties2 != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceMemoryProperties2(phys_dev_term->phys_dev, pMemoryProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceMemoryProperties2: Emulating call in ICD \"%s\" using vkGetPhysicalDeviceMemoryProperties", + icd_term->scanned_icd->lib_name); + + // Write to the VkPhysicalDeviceMemoryProperties2 struct + icd_term->dispatch.GetPhysicalDeviceMemoryProperties(phys_dev_term->phys_dev, &pMemoryProperties->memoryProperties); + + if (pMemoryProperties->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceMemoryProperties2: Emulation found unrecognized structure type in " + "pMemoryProperties->pNext - this struct will be ignored"); + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2KHR *pFormatInfo, uint32_t *pPropertyCount, + VkSparseImageFormatProperties2KHR *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 fpGetPhysicalDeviceSparseImageFormatProperties2 = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceSparseImageFormatProperties2 = icd_term->dispatch.GetPhysicalDeviceSparseImageFormatProperties2; + } + if (fpGetPhysicalDeviceSparseImageFormatProperties2 == NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + fpGetPhysicalDeviceSparseImageFormatProperties2 = icd_term->dispatch.GetPhysicalDeviceSparseImageFormatProperties2KHR; + } + + if (fpGetPhysicalDeviceSparseImageFormatProperties2 != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceSparseImageFormatProperties2(phys_dev_term->phys_dev, pFormatInfo, pPropertyCount, pProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceSparseImageFormatProperties2: Emulating call in ICD \"%s\" using " + "vkGetPhysicalDeviceSparseImageFormatProperties", + icd_term->scanned_icd->lib_name); + + if (pFormatInfo->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceSparseImageFormatProperties2: Emulation found unrecognized structure type in " + "pFormatInfo->pNext - this struct will be ignored"); + } + + if (pProperties == NULL || *pPropertyCount == 0) { + // Write to pPropertyCount + icd_term->dispatch.GetPhysicalDeviceSparseImageFormatProperties( + phys_dev_term->phys_dev, pFormatInfo->format, pFormatInfo->type, pFormatInfo->samples, pFormatInfo->usage, + pFormatInfo->tiling, pPropertyCount, NULL); + } else { + // Allocate a temporary array for the output of the old function + VkSparseImageFormatProperties *properties = + loader_stack_alloc(*pPropertyCount * sizeof(VkSparseImageMemoryRequirements)); + if (properties == NULL) { + *pPropertyCount = 0; + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "vkGetPhysicalDeviceSparseImageFormatProperties2: Out of memory - Failed to allocate array for " + "loader emulation."); + return; + } + + icd_term->dispatch.GetPhysicalDeviceSparseImageFormatProperties( + phys_dev_term->phys_dev, pFormatInfo->format, pFormatInfo->type, pFormatInfo->samples, pFormatInfo->usage, + pFormatInfo->tiling, pPropertyCount, properties); + for (uint32_t i = 0; i < *pPropertyCount; ++i) { + // Write to the VkSparseImageFormatProperties2KHR struct + memcpy(&pProperties[i].properties, &properties[i], sizeof(VkSparseImageFormatProperties)); + + if (pProperties[i].pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceSparseImageFormatProperties2: Emulation found unrecognized structure type in " + "pProperties[%d].pNext - this struct will be ignored", + i); + } + } + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, + VkExternalBufferProperties *pExternalBufferProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceExternalBufferProperties fpGetPhysicalDeviceExternalBufferProperties = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceExternalBufferProperties = icd_term->dispatch.GetPhysicalDeviceExternalBufferProperties; + } + if (fpGetPhysicalDeviceExternalBufferProperties == NULL && inst->enabled_extensions.khr_external_memory_capabilities) { + fpGetPhysicalDeviceExternalBufferProperties = icd_term->dispatch.GetPhysicalDeviceExternalBufferPropertiesKHR; + } + + if (fpGetPhysicalDeviceExternalBufferProperties != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceExternalBufferProperties(phys_dev_term->phys_dev, pExternalBufferInfo, pExternalBufferProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceExternalBufferProperties: Emulating call in ICD \"%s\"", icd_term->scanned_icd->lib_name); + + if (pExternalBufferInfo->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceExternalBufferProperties: Emulation found unrecognized structure type in " + "pExternalBufferInfo->pNext - this struct will be ignored"); + } + + // Fill in everything being unsupported + memset(&pExternalBufferProperties->externalMemoryProperties, 0, sizeof(VkExternalMemoryPropertiesKHR)); + + if (pExternalBufferProperties->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceExternalBufferProperties: Emulation found unrecognized structure type in " + "pExternalBufferProperties->pNext - this struct will be ignored"); + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo *pExternalSemaphoreInfo, + VkExternalSemaphoreProperties *pExternalSemaphoreProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties fpGetPhysicalDeviceExternalSemaphoreProperties = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceExternalSemaphoreProperties = icd_term->dispatch.GetPhysicalDeviceExternalSemaphoreProperties; + } + if (fpGetPhysicalDeviceExternalSemaphoreProperties == NULL && inst->enabled_extensions.khr_external_semaphore_capabilities) { + fpGetPhysicalDeviceExternalSemaphoreProperties = icd_term->dispatch.GetPhysicalDeviceExternalSemaphorePropertiesKHR; + } + + if (fpGetPhysicalDeviceExternalSemaphoreProperties != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceExternalSemaphoreProperties(phys_dev_term->phys_dev, pExternalSemaphoreInfo, + pExternalSemaphoreProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceExternalSemaphoreProperties: Emulating call in ICD \"%s\"", icd_term->scanned_icd->lib_name); + + if (pExternalSemaphoreInfo->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceExternalSemaphoreProperties: Emulation found unrecognized structure type in " + "pExternalSemaphoreInfo->pNext - this struct will be ignored"); + } + + // Fill in everything being unsupported + pExternalSemaphoreProperties->exportFromImportedHandleTypes = 0; + pExternalSemaphoreProperties->compatibleHandleTypes = 0; + pExternalSemaphoreProperties->externalSemaphoreFeatures = 0; + + if (pExternalSemaphoreProperties->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceExternalSemaphoreProperties: Emulation found unrecognized structure type in " + "pExternalSemaphoreProperties->pNext - this struct will be ignored"); + } + } +} + +VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo *pExternalFenceInfo, + VkExternalFenceProperties *pExternalFenceProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + const struct loader_instance *inst = icd_term->this_instance; + + assert(inst != NULL); + + // Get the function pointer to use to call into the ICD. This could be the core or KHR version + PFN_vkGetPhysicalDeviceExternalFenceProperties fpGetPhysicalDeviceExternalFenceProperties = NULL; + if (loader_check_version_meets_required(LOADER_VERSION_1_1_0, inst->app_api_version)) { + fpGetPhysicalDeviceExternalFenceProperties = icd_term->dispatch.GetPhysicalDeviceExternalFenceProperties; + } + if (fpGetPhysicalDeviceExternalFenceProperties == NULL && inst->enabled_extensions.khr_external_fence_capabilities) { + fpGetPhysicalDeviceExternalFenceProperties = icd_term->dispatch.GetPhysicalDeviceExternalFencePropertiesKHR; + } + + if (fpGetPhysicalDeviceExternalFenceProperties != NULL) { + // Pass the call to the driver + fpGetPhysicalDeviceExternalFenceProperties(phys_dev_term->phys_dev, pExternalFenceInfo, pExternalFenceProperties); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceExternalFenceProperties: Emulating call in ICD \"%s\"", icd_term->scanned_icd->lib_name); + + if (pExternalFenceInfo->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceExternalFenceProperties: Emulation found unrecognized structure type in " + "pExternalFenceInfo->pNext - this struct will be ignored"); + } + + // Fill in everything being unsupported + pExternalFenceProperties->exportFromImportedHandleTypes = 0; + pExternalFenceProperties->compatibleHandleTypes = 0; + pExternalFenceProperties->externalFenceFeatures = 0; + + if (pExternalFenceProperties->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceExternalFenceProperties: Emulation found unrecognized structure type in " + "pExternalFenceProperties->pNext - this struct will be ignored"); + } + } +} + +// 1.3 Core terminators + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t *pToolCount, + VkPhysicalDeviceToolProperties *pToolProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + if (NULL == icd_term->dispatch.GetPhysicalDeviceToolProperties) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "terminator_GetPhysicalDeviceToolProperties: The ICD's vkGetPhysicalDeviceToolProperties was NULL yet " + "the physical device supports Vulkan API Version 1.3."); + } else { + VkPhysicalDeviceProperties properties; + if (icd_term->dispatch.GetPhysicalDeviceProperties) { + icd_term->dispatch.GetPhysicalDeviceProperties(phys_dev_term->phys_dev, &properties); + + if (VK_API_VERSION_MINOR(properties.apiVersion) >= 3) { + return icd_term->dispatch.GetPhysicalDeviceToolProperties(phys_dev_term->phys_dev, pToolCount, pToolProperties); + } + } + } + + // In the case the driver didn't support 1.3, make sure that the first layer doesn't find the count uninitialized + *pToolCount = 0; + return VK_SUCCESS; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/trampoline.c b/local/recipes/libs/vulkan-loader/source/loader/trampoline.c new file mode 100644 index 0000000000..0ebb4c1728 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/trampoline.c @@ -0,0 +1,3828 @@ +/* + * + * Copyright (c) 2015-2023 The Khronos Group Inc. + * Copyright (c) 2015-2023 Valve Corporation + * Copyright (c) 2015-2023 LunarG, Inc. + * Copyright (C) 2015 Google Inc. + * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + * + * Author: Courtney Goeltzenleuchter + * Author: Jon Ashburn + * Author: Tony Barbour + * Author: Chia-I Wu + * Author: Charles Giessen + */ + +#include +#include + +#include "allocation.h" +#include "debug_utils.h" +#include "gpa_helper.h" +#include "loader.h" +#include "loader_environment.h" +#include "log.h" +#include "settings.h" +#include "vk_loader_extensions.h" +#include "vk_loader_platform.h" +#include "wsi.h" + +// Trampoline entrypoints are in this file for core Vulkan commands + +/* vkGetInstanceProcAddr: Get global level or instance level entrypoint addresses. + * @param instance + * @param pName + * @return + * If pName is a global level entrypoint: + * If instance == NULL || instance is invalid || (instance is valid && instance.minor_version <= 2): + * return global level functions + * Else: + * return NULL + * Else: + * If instance is valid: + * return a trampoline entry point for all dispatchable Vulkan functions both core and extensions. + * Else: + * return NULL + * + * Note: + * Vulkan header updated 1.2.193 changed the behavior of vkGetInstanceProcAddr for global entrypoints. They used to always be + * returned regardless of the value of the instance parameter. The spec was amended in this version to only allow querying global + * level entrypoints with a NULL instance. However, as to not break old applications, the new behavior is only applied if the + * instance passed in is both valid and minor version is greater than 1.2, which was when this change in behavior occurred. Only + * instances with a newer version will get the new behavior. + */ +LOADER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName) { + // Always should be able to get vkGetInstanceProcAddr if queried, regardless of the value of instance + if (!strcmp(pName, "vkGetInstanceProcAddr")) return (PFN_vkVoidFunction)vkGetInstanceProcAddr; + + // Get entrypoint addresses that are global (no dispatchable object) + void *addr = globalGetProcAddr(pName); + if (addr != VK_NULL_HANDLE) { + // Always can get a global entrypoint from vkGetInstanceProcAddr with a NULL instance handle + if (instance == VK_NULL_HANDLE) { + return addr; + } else { + // New behavior only returns a global entrypoint if the instance handle is NULL. + // Old behavior is to return a global entrypoint regardless of the value of the instance handle. + // Use new behavior if: The instance is valid and the minor version of the instance is greater than 1.2, which + // was when the new behavior was added. (eg, it is enforced in the next minor version of vulkan, which will be 1.3) + + // First check if instance is valid - loader_get_instance() returns NULL if it isn't. + struct loader_instance *ptr_instance = loader_get_instance(instance); + if (ptr_instance != NULL && + loader_check_version_meets_required(loader_combine_version(1, 3, 0), ptr_instance->app_api_version)) { + // New behavior + return NULL; + } else { + // Old behavior + return addr; + } + } + } else { + // All other functions require a valid instance handle to get + if (instance == VK_NULL_HANDLE) { + return NULL; + } + struct loader_instance *ptr_instance = loader_get_instance(instance); + // If we've gotten here and the pointer is NULL, it's invalid + if (ptr_instance == NULL) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetInstanceProcAddr: Invalid instance [VUID-vkGetInstanceProcAddr-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Return trampoline code for non-global entrypoints including any extensions. + // Device extensions are returned if a layer or ICD supports the extension. + // Instance extensions are returned if the extension is enabled and the + // loader or someone else supports the extension + return trampoline_get_proc_addr(ptr_instance, pName); + } +} + +// Get a device level or global level entry point address. +// @param device +// @param pName +// @return +// If device is valid, returns a device relative entry point for device level +// entry points both core and extensions. +// Device relative means call down the device chain. +LOADER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char *pName) { + if (!pName || pName[0] != 'v' || pName[1] != 'k') return NULL; + + // For entrypoints that loader must handle (ie non-dispatchable or create object) + // make sure the loader entrypoint is returned + const char *name = pName; + name += 2; + if (!strcmp(name, "GetDeviceProcAddr")) return (PFN_vkVoidFunction)vkGetDeviceProcAddr; + if (!strcmp(name, "DestroyDevice")) return (PFN_vkVoidFunction)vkDestroyDevice; + if (!strcmp(name, "GetDeviceQueue")) return (PFN_vkVoidFunction)vkGetDeviceQueue; + if (!strcmp(name, "AllocateCommandBuffers")) return (PFN_vkVoidFunction)vkAllocateCommandBuffers; + + // Although CreateDevice is on device chain it's dispatchable object isn't + // a VkDevice or child of VkDevice so return NULL. + if (!strcmp(pName, "CreateDevice")) return NULL; + + // Because vkGetDeviceQueue2 is a 1.1 entry point, we need to check if the apiVersion provided during instance creation is + // sufficient + if (!strcmp(name, "GetDeviceQueue2")) { + struct loader_device *dev = NULL; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL != icd_term && dev != NULL) { + const struct loader_instance *inst = icd_term->this_instance; + uint32_t api_version = + VK_MAKE_API_VERSION(0, inst->app_api_version.major, inst->app_api_version.minor, inst->app_api_version.patch); + return (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1) + ? NULL + : (PFN_vkVoidFunction)vkGetDeviceQueue2; + } + return NULL; + } + // Return the dispatch table entrypoint for the fastest case + const VkLayerDispatchTable *disp_table = loader_get_dispatch(device); + if (disp_table == NULL) return NULL; + + bool found_name = false; + void *addr = loader_lookup_device_dispatch_table(disp_table, pName, &found_name); + if (found_name) return addr; + + if (disp_table->GetDeviceProcAddr == NULL) return NULL; + return disp_table->GetDeviceProcAddr(device, pName); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, + uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) { + LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize); + + update_global_loader_settings(); + + // We know we need to call at least the terminator + VkResult res = VK_SUCCESS; + VkEnumerateInstanceExtensionPropertiesChain chain_tail = { + .header = + { + .type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES, + .version = VK_CURRENT_CHAIN_VERSION, + .size = sizeof(chain_tail), + }, + .pfnNextLayer = &terminator_pre_instance_EnumerateInstanceExtensionProperties, + .pNextLink = NULL, + }; + VkEnumerateInstanceExtensionPropertiesChain *chain_head = &chain_tail; + + // Get the implicit layers + struct loader_layer_list layers = {0}; + memset(&layers, 0, sizeof(layers)); + struct loader_envvar_all_filters layer_filters = {0}; + + res = parse_layer_environment_var_filters(NULL, &layer_filters); + if (VK_SUCCESS != res) { + return res; + } + + res = loader_scan_for_implicit_layers(NULL, &layers, &layer_filters); + if (VK_SUCCESS != res) { + return res; + } + + // Prepend layers onto the chain if they implement this entry point + for (uint32_t i = 0; i < layers.count; ++i) { + // Skip this layer if it doesn't expose the entry-point + if (NULL == layers.list[i].pre_instance_functions.enumerate_instance_extension_properties) { + continue; + } + + loader_open_layer_file(NULL, &layers.list[i]); + if (layers.list[i].lib_handle == NULL) { + continue; + } + + void *pfn = loader_platform_get_proc_address(layers.list[i].lib_handle, + layers.list[i].pre_instance_functions.enumerate_instance_extension_properties); + if (pfn == NULL) { + loader_log(NULL, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0, + "%s: Unable to resolve symbol \"%s\" in implicit layer library \"%s\"", __FUNCTION__, + layers.list[i].pre_instance_functions.enumerate_instance_extension_properties, layers.list[i].lib_name); + continue; + } + + VkEnumerateInstanceExtensionPropertiesChain *chain_link = + loader_alloc(NULL, sizeof(VkEnumerateInstanceExtensionPropertiesChain), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (chain_link == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + break; + } + memset(chain_link, 0, sizeof(VkEnumerateInstanceLayerPropertiesChain)); + chain_link->header.type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES; + chain_link->header.version = VK_CURRENT_CHAIN_VERSION; + chain_link->header.size = sizeof(*chain_link); + chain_link->pfnNextLayer = pfn; + chain_link->pNextLink = chain_head; + + chain_head = chain_link; + } + + // Call down the chain + if (res == VK_SUCCESS) { + res = chain_head->pfnNextLayer(chain_head->pNextLink, pLayerName, pPropertyCount, pProperties); + } + + // Free up the layers + loader_delete_layer_list_and_properties(NULL, &layers); + + // Tear down the chain + while (chain_head != &chain_tail) { + VkEnumerateInstanceExtensionPropertiesChain *holder = chain_head; + chain_head = (VkEnumerateInstanceExtensionPropertiesChain *)chain_head->pNextLink; + loader_free(NULL, holder); + } + + return res; +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pPropertyCount, + VkLayerProperties *pProperties) { + LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize); + + update_global_loader_settings(); + + // We know we need to call at least the terminator + VkResult res = VK_SUCCESS; + VkEnumerateInstanceLayerPropertiesChain chain_tail = { + .header = + { + .type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES, + .version = VK_CURRENT_CHAIN_VERSION, + .size = sizeof(chain_tail), + }, + .pfnNextLayer = &terminator_pre_instance_EnumerateInstanceLayerProperties, + .pNextLink = NULL, + }; + VkEnumerateInstanceLayerPropertiesChain *chain_head = &chain_tail; + + // Get the implicit layers + struct loader_layer_list layers; + memset(&layers, 0, sizeof(layers)); + struct loader_envvar_all_filters layer_filters = {0}; + + res = parse_layer_environment_var_filters(NULL, &layer_filters); + if (VK_SUCCESS != res) { + return res; + } + + res = loader_scan_for_implicit_layers(NULL, &layers, &layer_filters); + if (VK_SUCCESS != res) { + return res; + } + + // Prepend layers onto the chain if they implement this entry point + for (uint32_t i = 0; i < layers.count; ++i) { + // Skip this layer if it doesn't expose the entry-point + if (NULL == layers.list[i].pre_instance_functions.enumerate_instance_layer_properties) { + continue; + } + + loader_open_layer_file(NULL, &layers.list[i]); + if (layers.list[i].lib_handle == NULL) { + continue; + } + + void *pfn = loader_platform_get_proc_address(layers.list[i].lib_handle, + layers.list[i].pre_instance_functions.enumerate_instance_layer_properties); + if (pfn == NULL) { + loader_log(NULL, VULKAN_LOADER_WARN_BIT, 0, "%s: Unable to resolve symbol \"%s\" in implicit layer library \"%s\"", + __FUNCTION__, layers.list[i].pre_instance_functions.enumerate_instance_layer_properties, + layers.list[i].lib_name); + continue; + } + + VkEnumerateInstanceLayerPropertiesChain *chain_link = + loader_alloc(NULL, sizeof(VkEnumerateInstanceLayerPropertiesChain), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (chain_link == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + break; + } + memset(chain_link, 0, sizeof(VkEnumerateInstanceLayerPropertiesChain)); + chain_link->header.type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES; + chain_link->header.version = VK_CURRENT_CHAIN_VERSION; + chain_link->header.size = sizeof(*chain_link); + chain_link->pfnNextLayer = pfn; + chain_link->pNextLink = chain_head; + + chain_head = chain_link; + } + + // Call down the chain + if (res == VK_SUCCESS) { + res = chain_head->pfnNextLayer(chain_head->pNextLink, pPropertyCount, pProperties); + } + + // Free up the layers + loader_delete_layer_list_and_properties(NULL, &layers); + + // Tear down the chain + while (chain_head != &chain_tail) { + VkEnumerateInstanceLayerPropertiesChain *holder = chain_head; + chain_head = (VkEnumerateInstanceLayerPropertiesChain *)chain_head->pNextLink; + loader_free(NULL, holder); + } + + return res; +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(uint32_t *pApiVersion) { + LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize); + + update_global_loader_settings(); + + if (NULL == pApiVersion) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumerateInstanceVersion: \'pApiVersion\' must not be NULL " + "(VUID-vkEnumerateInstanceVersion-pApiVersion-parameter"); + // NOTE: This seems silly, but it's the only allowable failure + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + // We know we need to call at least the terminator + VkResult res = VK_SUCCESS; + VkEnumerateInstanceVersionChain chain_tail = { + .header = + { + .type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION, + .version = VK_CURRENT_CHAIN_VERSION, + .size = sizeof(chain_tail), + }, + .pfnNextLayer = &terminator_pre_instance_EnumerateInstanceVersion, + .pNextLink = NULL, + }; + VkEnumerateInstanceVersionChain *chain_head = &chain_tail; + + // Get the implicit layers + struct loader_layer_list layers; + memset(&layers, 0, sizeof(layers)); + struct loader_envvar_all_filters layer_filters = {0}; + + res = parse_layer_environment_var_filters(NULL, &layer_filters); + if (VK_SUCCESS != res) { + return res; + } + + res = loader_scan_for_implicit_layers(NULL, &layers, &layer_filters); + if (VK_SUCCESS != res) { + return res; + } + + // Prepend layers onto the chain if they implement this entry point + for (uint32_t i = 0; i < layers.count; ++i) { + // Skip this layer if it doesn't expose the entry-point + if (NULL == layers.list[i].pre_instance_functions.enumerate_instance_version) { + continue; + } + + loader_open_layer_file(NULL, &layers.list[i]); + if (layers.list[i].lib_handle == NULL) { + continue; + } + + void *pfn = loader_platform_get_proc_address(layers.list[i].lib_handle, + layers.list[i].pre_instance_functions.enumerate_instance_version); + if (pfn == NULL) { + loader_log(NULL, VULKAN_LOADER_WARN_BIT, 0, "%s: Unable to resolve symbol \"%s\" in implicit layer library \"%s\"", + __FUNCTION__, layers.list[i].pre_instance_functions.enumerate_instance_version, layers.list[i].lib_name); + continue; + } + + VkEnumerateInstanceVersionChain *chain_link = + loader_alloc(NULL, sizeof(VkEnumerateInstanceVersionChain), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); + if (chain_link == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + break; + } + memset(chain_link, 0, sizeof(VkEnumerateInstanceLayerPropertiesChain)); + chain_link->header.type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION; + chain_link->header.version = VK_CURRENT_CHAIN_VERSION; + chain_link->header.size = sizeof(*chain_link); + chain_link->pfnNextLayer = pfn; + chain_link->pNextLink = chain_head; + + chain_head = chain_link; + } + + // Call down the chain + if (res == VK_SUCCESS) { + res = chain_head->pfnNextLayer(chain_head->pNextLink, pApiVersion); + } + + // Free up the layers + loader_delete_layer_list_and_properties(NULL, &layers); + + // Tear down the chain + while (chain_head != &chain_tail) { + VkEnumerateInstanceVersionChain *holder = chain_head; + chain_head = (VkEnumerateInstanceVersionChain *)chain_head->pNextLink; + loader_free(NULL, holder); + } + + return res; +} + +// Add the "instance-only" debug functions to the list of active debug functions +// at the very end. This way it doesn't get replaced by any new messengers +void loader_add_instance_only_debug_funcs(struct loader_instance *ptr_instance) { + VkLayerDbgFunctionNode *cur_node = ptr_instance->current_dbg_function_head; + if (cur_node == NULL) { + ptr_instance->current_dbg_function_head = ptr_instance->instance_only_dbg_function_head; + } else { + while (cur_node != NULL) { + if (cur_node == ptr_instance->instance_only_dbg_function_head) { + // Already added + break; + } + // Last item + else if (cur_node->pNext == NULL) { + cur_node->pNext = ptr_instance->instance_only_dbg_function_head; + } + cur_node = cur_node->pNext; + } + } +} + +// Remove the "instance-only" debug functions from the list of active debug functions. +// It should be added after the last actual debug utils/debug report function. +void loader_remove_instance_only_debug_funcs(struct loader_instance *ptr_instance) { + VkLayerDbgFunctionNode *cur_node = ptr_instance->current_dbg_function_head; + + // Only thing in list is the instance only head + if (cur_node == ptr_instance->instance_only_dbg_function_head) { + ptr_instance->current_dbg_function_head = NULL; + } + while (cur_node != NULL) { + if (cur_node->pNext == ptr_instance->instance_only_dbg_function_head) { + cur_node->pNext = NULL; + break; + } + cur_node = cur_node->pNext; + } +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkInstance *pInstance) { + struct loader_instance *ptr_instance = NULL; + VkInstance created_instance = VK_NULL_HANDLE; + VkResult res = VK_ERROR_INITIALIZATION_FAILED; + VkInstanceCreateInfo ici = {0}; + bool portability_enumeration_flag_bit_set = false; + bool portability_enumeration_extension_enabled = false; + struct loader_envvar_all_filters layer_filters = {0}; + + LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize); + + if (pCreateInfo == NULL) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateInstance: \'pCreateInfo\' is NULL (VUID-vkCreateInstance-pCreateInfo-parameter)"); + goto out; + } + ici = *pCreateInfo; + + if (pInstance == NULL) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateInstance \'pInstance\' not valid (VUID-vkCreateInstance-pInstance-parameter)"); + goto out; + } + + ptr_instance = + (struct loader_instance *)loader_calloc(pAllocator, sizeof(struct loader_instance), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + + if (ptr_instance == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + + loader_platform_thread_lock_mutex(&loader_lock); + if (pAllocator) { + ptr_instance->alloc_callbacks = *pAllocator; + } + ptr_instance->magic = LOADER_MAGIC_NUMBER; + + // Save the application version + if (NULL == pCreateInfo->pApplicationInfo || 0 == pCreateInfo->pApplicationInfo->apiVersion) { + ptr_instance->app_api_version = LOADER_VERSION_1_0_0; + } else { + ptr_instance->app_api_version = loader_make_version(pCreateInfo->pApplicationInfo->apiVersion); + } + + // Look for one or more VK_EXT_debug_report or VK_EXT_debug_utils create info structures + // and setup a callback(s) for each one found. + + // Handle cases of VK_EXT_debug_utils + // Setup the temporary messenger(s) here to catch early issues: + res = util_CreateDebugUtilsMessengers(ptr_instance, pCreateInfo->pNext, pAllocator); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + // Failure of setting up one or more of the messenger. + goto out; + } + + // Handle cases of VK_EXT_debug_report + // Setup the temporary callback(s) here to catch early issues: + res = util_CreateDebugReportCallbacks(ptr_instance, pCreateInfo->pNext, pAllocator); + if (VK_ERROR_OUT_OF_HOST_MEMORY == res) { + // Failure of setting up one or more of the callback. + goto out; + } + + VkResult settings_file_res = get_loader_settings(ptr_instance, &ptr_instance->settings); + if (settings_file_res == VK_ERROR_OUT_OF_HOST_MEMORY) { + res = settings_file_res; + goto out; + } + if (ptr_instance->settings.settings_active) { + log_settings(ptr_instance, &ptr_instance->settings); + } + + // Providing an apiVersion less than VK_API_VERSION_1_0 but greater than zero prevents the validation layers from starting + if (pCreateInfo->pApplicationInfo && pCreateInfo->pApplicationInfo->apiVersion != 0u && + pCreateInfo->pApplicationInfo->apiVersion < VK_API_VERSION_1_0) { + loader_log(ptr_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "VkInstanceCreateInfo::pApplicationInfo::apiVersion has value of %u which is not permitted. If apiVersion is " + "not 0, then it must be " + "greater than or equal to the value of VK_API_VERSION_1_0 [VUID-VkApplicationInfo-apiVersion]", + pCreateInfo->pApplicationInfo->apiVersion); + } + + // Check the VkInstanceCreateInfoFlags wether to allow the portability enumeration flag + if ((pCreateInfo->flags & VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR) == 1) { + portability_enumeration_flag_bit_set = true; + } + // Make sure the portability extension extension has been enabled before enabling portability driver enumeration + if (pCreateInfo->ppEnabledExtensionNames) { + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) == 0) { + portability_enumeration_extension_enabled = true; + if (portability_enumeration_flag_bit_set) { + ptr_instance->portability_enumeration_enabled = true; + loader_log(ptr_instance, VULKAN_LOADER_INFO_BIT, 0, + "Portability enumeration bit was set, enumerating portability drivers."); + } + break; + } + } + } + + // Make sure the application provided API version has the correct variant + if (NULL != pCreateInfo->pApplicationInfo) { + uint32_t variant_version = VK_API_VERSION_VARIANT(pCreateInfo->pApplicationInfo->apiVersion); + const uint32_t expected_variant = 0; + if (expected_variant != variant_version) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkCreateInstance: The API Variant specified in pCreateInfo->pApplicationInfo.apiVersion is %d instead of " + "the expected value of %d.", + variant_version, expected_variant); + } + } + + res = parse_layer_environment_var_filters(ptr_instance, &layer_filters); + if (VK_SUCCESS != res) { + goto out; + } + + // Due to implicit layers need to get layer list even if + // enabledLayerCount == 0 and VK_INSTANCE_LAYERS is unset. For now always + // get layer list via loader_scan_for_layers(). + memset(&ptr_instance->instance_layer_list, 0, sizeof(ptr_instance->instance_layer_list)); + res = loader_scan_for_layers(ptr_instance, &ptr_instance->instance_layer_list, &layer_filters); + if (VK_SUCCESS != res) { + goto out; + } + + // Validate the app requested layers to be enabled + if (pCreateInfo->enabledLayerCount > 0) { + res = loader_validate_layers(ptr_instance, pCreateInfo->enabledLayerCount, pCreateInfo->ppEnabledLayerNames, + &ptr_instance->instance_layer_list); + if (res != VK_SUCCESS) { + goto out; + } + } + + // Scan/discover all System and Environment Variable ICD libraries + bool skipped_portability_drivers = false; + res = loader_icd_scan(ptr_instance, &ptr_instance->icd_tramp_list, pCreateInfo, &skipped_portability_drivers); + if (res == VK_ERROR_OUT_OF_HOST_MEMORY) { + goto out; + } + + if (ptr_instance->icd_tramp_list.count == 0) { + // No drivers found + if (skipped_portability_drivers) { + if (portability_enumeration_extension_enabled && !portability_enumeration_flag_bit_set) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "vkCreateInstance: Found drivers that contain devices which support the portability subset, but " + "the instance does not enumerate portability drivers! Applications that wish to enumerate portability " + "drivers must set the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit in the VkInstanceCreateInfo " + "flags."); + } else if (portability_enumeration_flag_bit_set && !portability_enumeration_extension_enabled) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "VkInstanceCreateInfo: If flags has the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit set, the " + "list of enabled extensions in ppEnabledExtensionNames must contain VK_KHR_portability_enumeration " + "[VUID-VkInstanceCreateInfo-flags-06559 ]" + "Applications that wish to enumerate portability drivers must enable the VK_KHR_portability_enumeration " + "instance extension."); + } else { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, + "vkCreateInstance: Found drivers that contain devices which support the portability subset, but " + "the instance does not enumerate portability drivers! Applications that wish to enumerate portability " + "drivers must set the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit in the VkInstanceCreateInfo " + "flags and enable the VK_KHR_portability_enumeration instance extension."); + } + } + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, "vkCreateInstance: Found no drivers!"); + res = VK_ERROR_INCOMPATIBLE_DRIVER; + goto out; + } + + // Get extensions from all ICD's, merge so no duplicates, then validate + res = loader_get_icd_loader_instance_extensions(ptr_instance, &ptr_instance->icd_tramp_list, &ptr_instance->ext_list); + if (res != VK_SUCCESS) { + goto out; + } + res = loader_validate_instance_extensions(ptr_instance, &ptr_instance->ext_list, &ptr_instance->instance_layer_list, + &layer_filters, &ici); + if (res != VK_SUCCESS) { + goto out; + } + + ptr_instance->disp = loader_instance_heap_alloc(ptr_instance, sizeof(struct loader_instance_dispatch_table), + VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (ptr_instance->disp == NULL) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT, 0, + "vkCreateInstance: Failed to allocate Loader's full Instance dispatch table."); + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + memcpy(&ptr_instance->disp->layer_inst_disp, &instance_disp, sizeof(instance_disp)); + + loader_platform_thread_lock_mutex(&loader_global_instance_list_lock); + ptr_instance->next = loader.instances; + loader.instances = ptr_instance; + loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock); + + // Activate any layers on instance chain + res = loader_enable_instance_layers(ptr_instance, &ici, &ptr_instance->instance_layer_list, &layer_filters); + if (res != VK_SUCCESS) { + goto out; + } + + created_instance = (VkInstance)ptr_instance; + res = loader_create_instance_chain(&ici, pAllocator, ptr_instance, &created_instance); + + if (VK_SUCCESS == res) { + // Check for enabled extensions here to setup the loader structures so the loader knows what extensions + // it needs to worry about. + // We do it in the terminator and again above the layers here since we may think different extensions + // are enabled than what's down in the terminator. + // This is why we don't clear inside of these function calls. + // The clearing should actually be handled by the overall memset of the pInstance structure above. + fill_out_enabled_instance_extensions(ici.enabledExtensionCount, ici.ppEnabledExtensionNames, + &ptr_instance->enabled_extensions); + + *pInstance = (VkInstance)ptr_instance; + + // Finally have the layers in place and everyone has seen + // the CreateInstance command go by. This allows the layer's + // GetInstanceProcAddr functions to return valid extension functions + // if enabled. + loader_activate_instance_layer_extensions(ptr_instance, created_instance); + ptr_instance->instance_finished_creation = true; + } else if (VK_ERROR_EXTENSION_NOT_PRESENT == res && !ptr_instance->create_terminator_invalid_extension) { + loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkCreateInstance: Layer returning invalid extension error not triggered by ICD/Loader (Policy #LLP_LAYER_17)."); + } + +out: + + if (NULL != ptr_instance) { + if (res != VK_SUCCESS) { + loader_platform_thread_lock_mutex(&loader_global_instance_list_lock); + // error path, should clean everything up + if (loader.instances == ptr_instance) { + loader.instances = ptr_instance->next; + } + loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock); + + free_loader_settings(ptr_instance, &ptr_instance->settings); + + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->surfaces_list); + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_utils_messengers_list); + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_report_callbacks_list); + + loader_instance_heap_free(ptr_instance, ptr_instance->disp); + // Remove any created VK_EXT_debug_report or VK_EXT_debug_utils items + destroy_debug_callbacks_chain(ptr_instance, pAllocator); + + loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->expanded_activated_layer_list); + loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->app_activated_layer_list); + + loader_delete_layer_list_and_properties(ptr_instance, &ptr_instance->instance_layer_list); + loader_clear_scanned_icd_list(ptr_instance, &ptr_instance->icd_tramp_list); + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->ext_list); + + // Free any icd_terms that were created. + // If an OOM occurs from a layer, terminator_CreateInstance won't be reached where this kind of + // cleanup normally occurs + struct loader_icd_term *icd_term = NULL; + while (NULL != ptr_instance->icd_terms) { + icd_term = ptr_instance->icd_terms; + // Call destroy Instance on each driver in case we successfully called down the chain but failed on + // our way back out of it. + if (icd_term->instance) { + loader_icd_close_objects(ptr_instance, icd_term); + icd_term->dispatch.DestroyInstance(icd_term->instance, pAllocator); + } + icd_term->instance = VK_NULL_HANDLE; + ptr_instance->icd_terms = icd_term->next; + loader_icd_destroy(ptr_instance, icd_term, pAllocator); + } + + free_string_list(ptr_instance, &ptr_instance->enabled_layer_names); + + loader_instance_heap_free(ptr_instance, ptr_instance); + } else { + // success path, swap out created debug callbacks out so they aren't used until instance destruction + loader_remove_instance_only_debug_funcs(ptr_instance); + } + // Only unlock when ptr_instance isn't NULL, as if it is, the above code didn't make it to when loader_lock was locked. + loader_platform_thread_unlock_mutex(&loader_lock); + } + + return res; +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { + const VkLayerInstanceDispatchTable *disp; + struct loader_instance *ptr_instance = NULL; + + if (instance == VK_NULL_HANDLE) { + return; + } + loader_platform_thread_lock_mutex(&loader_lock); + + ptr_instance = loader_get_instance(instance); + if (ptr_instance == NULL) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyInstance: Invalid instance [VUID-vkDestroyInstance-instance-parameter]"); + loader_platform_thread_unlock_mutex(&loader_lock); + abort(); /* Intentionally fail so user can correct issue. */ + } + + if (pAllocator) { + ptr_instance->alloc_callbacks = *pAllocator; + } + + // Remove any callbacks that weren't cleaned up by the application + destroy_debug_callbacks_chain(ptr_instance, pAllocator); + + // Swap in the debug callbacks created during instance creation + loader_add_instance_only_debug_funcs(ptr_instance); + + disp = loader_get_instance_layer_dispatch(instance); + disp->DestroyInstance(ptr_instance->instance, pAllocator); + + free_loader_settings(ptr_instance, &ptr_instance->settings); + + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->surfaces_list); + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_utils_messengers_list); + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_report_callbacks_list); + + loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->expanded_activated_layer_list); + loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->app_activated_layer_list); + + loader_delete_layer_list_and_properties(ptr_instance, &ptr_instance->instance_layer_list); + + free_string_list(ptr_instance, &ptr_instance->enabled_layer_names); + + if (ptr_instance->phys_devs_tramp) { + for (uint32_t i = 0; i < ptr_instance->phys_dev_count_tramp; i++) { + loader_instance_heap_free(ptr_instance, ptr_instance->phys_devs_tramp[i]); + } + loader_instance_heap_free(ptr_instance, ptr_instance->phys_devs_tramp); + } + + // Destroy the debug callbacks created during instance creation + destroy_debug_callbacks_chain(ptr_instance, pAllocator); + + loader_instance_heap_free(ptr_instance, ptr_instance->disp); + loader_instance_heap_free(ptr_instance, ptr_instance); + loader_platform_thread_unlock_mutex(&loader_lock); + + // Unload preloaded layers, so if vkEnumerateInstanceExtensionProperties or vkCreateInstance is called again, the ICD's are + // up to date + loader_unload_preloaded_icds(); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, + VkPhysicalDevice *pPhysicalDevices) { + VkResult res = VK_SUCCESS; + struct loader_instance *inst; + + loader_platform_thread_lock_mutex(&loader_lock); + + inst = loader_get_instance(instance); + if (NULL == inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumeratePhysicalDevices: Invalid instance [VUID-vkEnumeratePhysicalDevices-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + if (NULL == pPhysicalDeviceCount) { + loader_log(inst, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumeratePhysicalDevices: Received NULL pointer for physical device count return value. " + "[VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter]"); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Call down the chain to get the physical device info + res = inst->disp->layer_inst_disp.EnumeratePhysicalDevices(inst->instance, pPhysicalDeviceCount, pPhysicalDevices); + + if (NULL != pPhysicalDevices && (VK_SUCCESS == res || VK_INCOMPLETE == res)) { + // Wrap the PhysDev object for loader usage, return wrapped objects + VkResult update_res = setup_loader_tramp_phys_devs(inst, *pPhysicalDeviceCount, pPhysicalDevices); + if (VK_SUCCESS != update_res) { + res = update_res; + } + + // Unloads any drivers that do not expose any physical devices - should save some address space + unload_drivers_without_physical_devices(inst); + } + +out: + + loader_platform_thread_unlock_mutex(&loader_lock); + + return res; +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures *pFeatures) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log( + NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceFeatures: Invalid physicalDevice [VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceFeatures(unwrapped_phys_dev, pFeatures); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties *pFormatInfo) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceFormatProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceFormatProperties(unwrapped_phys_dev, format, pFormatInfo); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties( + VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, + VkImageCreateFlags flags, VkImageFormatProperties *pImageFormatProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceImageFormatProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceImageFormatProperties(unwrapped_phys_dev, format, type, tiling, usage, flags, + pImageFormatProperties); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceProperties(unwrapped_phys_dev, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, + uint32_t *pQueueFamilyPropertyCount, + VkQueueFamilyProperties *pQueueProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceQueueFamilyProperties(unwrapped_phys_dev, pQueueFamilyPropertyCount, pQueueProperties); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties *pMemoryProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceMemoryProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceMemoryProperties(unwrapped_phys_dev, pMemoryProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { + if (VK_NULL_HANDLE == loader_unwrap_physical_device(physicalDevice)) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDevice: Invalid physicalDevice [VUID-vkCreateDevice-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + loader_platform_thread_lock_mutex(&loader_lock); + VkResult res = loader_layer_create_device(NULL, physicalDevice, pCreateInfo, pAllocator, pDevice, NULL, NULL); + loader_platform_thread_unlock_mutex(&loader_lock); + return res; +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp; + + if (device == VK_NULL_HANDLE) { + return; + } + disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDevice: Invalid device [VUID-vkDestroyDevice-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + loader_platform_thread_lock_mutex(&loader_lock); + + loader_layer_destroy_device(device, pAllocator, disp->DestroyDevice); + + loader_platform_thread_unlock_mutex(&loader_lock); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char *pLayerName, uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) { + VkResult res = VK_SUCCESS; + struct loader_physical_device_tramp *phys_dev; + const VkLayerInstanceDispatchTable *disp; + phys_dev = (struct loader_physical_device_tramp *)physicalDevice; + if (VK_NULL_HANDLE == physicalDevice || PHYS_TRAMP_MAGIC_NUMBER != phys_dev->magic) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumerateDeviceExtensionProperties: Invalid physicalDevice " + "[VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + loader_platform_thread_lock_mutex(&loader_lock); + + // always pass this call down the instance chain which will terminate + // in the ICD. This allows layers to filter the extensions coming back + // up the chain. In the terminator we look up layer extensions from the + // manifest file if it wasn't provided by the layer itself. + disp = loader_get_instance_layer_dispatch(physicalDevice); + res = disp->EnumerateDeviceExtensionProperties(phys_dev->phys_dev, pLayerName, pPropertyCount, pProperties); + + loader_platform_thread_unlock_mutex(&loader_lock); + return res; +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkLayerProperties *pProperties) { + uint32_t copy_size; + struct loader_physical_device_tramp *phys_dev; + loader_platform_thread_lock_mutex(&loader_lock); + + // Don't dispatch this call down the instance chain, want all device layers + // enumerated and instance chain may not contain all device layers + // TODO re-evaluate the above statement we maybe able to start calling + // down the chain + + phys_dev = (struct loader_physical_device_tramp *)physicalDevice; + if (VK_NULL_HANDLE == physicalDevice || PHYS_TRAMP_MAGIC_NUMBER != phys_dev->magic) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumerateDeviceLayerProperties: Invalid physicalDevice " + "[VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter]"); + loader_platform_thread_unlock_mutex(&loader_lock); + abort(); /* Intentionally fail so user can correct issue. */ + } + + const struct loader_instance *inst = phys_dev->this_instance; + + uint32_t count = inst->app_activated_layer_list.count; + if (count == 0 || pProperties == NULL) { + *pPropertyCount = count; + loader_platform_thread_unlock_mutex(&loader_lock); + return VK_SUCCESS; + } + + copy_size = (*pPropertyCount < count) ? *pPropertyCount : count; + for (uint32_t i = 0; i < copy_size; i++) { + memcpy(&pProperties[i], &(inst->app_activated_layer_list.list[i]->info), sizeof(VkLayerProperties)); + } + *pPropertyCount = copy_size; + + if (copy_size < count) { + loader_platform_thread_unlock_mutex(&loader_lock); + return VK_INCOMPLETE; + } + + loader_platform_thread_unlock_mutex(&loader_lock); + return VK_SUCCESS; +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, + VkQueue *pQueue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceQueue: Invalid device [VUID-vkGetDeviceQueue-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue); + if (pQueue != NULL && *pQueue != NULL) { + loader_set_dispatch(*pQueue, disp); + } +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, + VkFence fence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueSubmit: Invalid queue [VUID-vkQueueSubmit-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->QueueSubmit(queue, submitCount, pSubmits, fence); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(VkQueue queue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueWaitIdle: Invalid queue [VUID-vkQueueWaitIdle-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->QueueWaitIdle(queue); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(VkDevice device) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDeviceWaitIdle: Invalid device [VUID-vkDeviceWaitIdle-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->DeviceWaitIdle(device); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, + const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAllocateMemory: Invalid device [VUID-vkAllocateMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeMemory(VkDevice device, VkDeviceMemory mem, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkFreeMemory: Invalid device [VUID-vkFreeMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->FreeMemory(device, mem, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, + VkDeviceSize size, VkFlags flags, void **ppData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkMapMemory: Invalid device [VUID-vkMapMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->MapMemory(device, mem, offset, size, flags, ppData); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(VkDevice device, VkDeviceMemory mem) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUnmapMemory: Invalid device [VUID-vkUnmapMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->UnmapMemory(device, mem); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, + const VkMappedMemoryRange *pMemoryRanges) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkFlushMappedMemoryRanges: Invalid device [VUID-vkFlushMappedMemoryRanges-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, + const VkMappedMemoryRange *pMemoryRanges) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkInvalidateMappedMemoryRanges: Invalid device [VUID-vkInvalidateMappedMemoryRanges-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, + VkDeviceSize *pCommittedMemoryInBytes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceMemoryCommitment: Invalid device [VUID-vkGetDeviceMemoryCommitment-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, + VkDeviceSize offset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindBufferMemory: Invalid device [VUID-vkBindBufferMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->BindBufferMemory(device, buffer, mem, offset); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, + VkDeviceSize offset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindImageMemory: Invalid device [VUID-vkBindImageMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->BindImageMemory(device, image, mem, offset); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, + VkMemoryRequirements *pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferMemoryRequirements: Invalid device [VUID-vkGetBufferMemoryRequirements-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(VkDevice device, VkImage image, + VkMemoryRequirements *pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageMemoryRequirements: Invalid device [VUID-vkGetImageMemoryRequirements-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetImageMemoryRequirements(device, image, pMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL +vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements *pSparseMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSparseMemoryRequirements: Invalid device [VUID-vkGetImageSparseMemoryRequirements-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties( + VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, + VkImageTiling tiling, uint32_t *pPropertyCount, VkSparseImageFormatProperties *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSparseImageFormatProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp = loader_get_instance_layer_dispatch(physicalDevice); + disp->GetPhysicalDeviceSparseImageFormatProperties(unwrapped_phys_dev, format, type, samples, usage, tiling, pPropertyCount, + pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, + const VkBindSparseInfo *pBindInfo, VkFence fence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueBindSparse: Invalid queue [VUID-vkQueueBindSparse-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(VkDevice device, const VkFenceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkFence *pFence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateFence: Invalid device [VUID-vkCreateFence-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateFence(device, pCreateInfo, pAllocator, pFence); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyFence: Invalid device [VUID-vkDestroyFence-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyFence(device, fence, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetFences: Invalid device [VUID-vkResetFences-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->ResetFences(device, fenceCount, pFences); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice device, VkFence fence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetFenceStatus: Invalid device [VUID-vkGetFenceStatus-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->GetFenceStatus(device, fence); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences, + VkBool32 waitAll, uint64_t timeout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWaitForFences: Invalid device [VUID-vkWaitForFences-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSemaphore *pSemaphore) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSemaphore: Invalid device [VUID-vkCreateSemaphore-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroySemaphore: Invalid device [VUID-vkDestroySemaphore-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroySemaphore(device, semaphore, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkEvent *pEvent) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateEvent: Invalid device [VUID-vkCreateEvent-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateEvent(device, pCreateInfo, pAllocator, pEvent); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyEvent: Invalid device [VUID-vkDestroyEvent-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyEvent(device, event, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice device, VkEvent event) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetEventStatus: Invalid device [VUID-vkGetEventStatus-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->GetEventStatus(device, event); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice device, VkEvent event) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetEvent: Invalid device [VUID-vkSetEvent-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->SetEvent(device, event); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice device, VkEvent event) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetEvent: Invalid device [VUID-vkResetEvent-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->ResetEvent(device, event); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateQueryPool: Invalid device [VUID-vkCreateQueryPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyQueryPool: Invalid device [VUID-vkDestroyQueryPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyQueryPool(device, queryPool, pAllocator); +} + +LOADER_EXPORT 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) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetQueryPoolResults: Invalid device [VUID-vkGetQueryPoolResults-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateBuffer: Invalid device [VUID-vkCreateBuffer-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice device, VkBuffer buffer, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyBuffer: Invalid device [VUID-vkDestroyBuffer-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyBuffer(device, buffer, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkBufferView *pView) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateBufferView: Invalid device [VUID-vkCreateBufferView-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateBufferView(device, pCreateInfo, pAllocator, pView); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice device, VkBufferView bufferView, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyBufferView: Invalid device [VUID-vkDestroyBufferView-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyBufferView(device, bufferView, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkImage *pImage) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateImage: Invalid device [VUID-vkCreateImage-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateImage(device, pCreateInfo, pAllocator, pImage); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyImage: Invalid device [VUID-vkDestroyImage-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyImage(device, image, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice device, VkImage image, + const VkImageSubresource *pSubresource, + VkSubresourceLayout *pLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSubresourceLayout: Invalid device [VUID-vkGetImageSubresourceLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkImageView *pView) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateImageView: Invalid device [VUID-vkCreateImageView-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateImageView(device, pCreateInfo, pAllocator, pView); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(VkDevice device, VkImageView imageView, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyImageView: Invalid device [VUID-vkDestroyImageView-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyImageView(device, imageView, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkShaderModule *pShader) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateShaderModule: Invalid device [VUID-vkCreateShaderModule-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateShaderModule(device, pCreateInfo, pAllocator, pShader); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyShaderModule: Invalid device [VUID-vkDestroyShaderModule-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyShaderModule(device, shaderModule, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkPipelineCache *pPipelineCache) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreatePipelineCache: Invalid device [VUID-vkCreatePipelineCache-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyPipelineCache: Invalid device [VUID-vkDestroyPipelineCache-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyPipelineCache(device, pipelineCache, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, + size_t *pDataSize, void *pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPipelineCacheData: Invalid device [VUID-vkGetPipelineCacheData-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->GetPipelineCacheData(device, pipelineCache, pDataSize, pData); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, + uint32_t srcCacheCount, const VkPipelineCache *pSrcCaches) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkMergePipelineCaches: Invalid device [VUID-vkMergePipelineCaches-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkGraphicsPipelineCreateInfo *pCreateInfos, + const VkAllocationCallbacks *pAllocator, + VkPipeline *pPipelines) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateGraphicsPipelines: Invalid device [VUID-vkCreateGraphicsPipelines-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, + uint32_t createInfoCount, + const VkComputePipelineCreateInfo *pCreateInfos, + const VkAllocationCallbacks *pAllocator, + VkPipeline *pPipelines) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateComputePipelines: Invalid device [VUID-vkCreateComputePipelines-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(VkDevice device, VkPipeline pipeline, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyPipeline: Invalid device [VUID-vkDestroyPipeline-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyPipeline(device, pipeline, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkPipelineLayout *pPipelineLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreatePipelineLayout: Invalid device [VUID-vkCreatePipelineLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyPipelineLayout: Invalid device [VUID-vkDestroyPipelineLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyPipelineLayout(device, pipelineLayout, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSampler *pSampler) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSampler: Invalid device [VUID-vkCreateSampler-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateSampler(device, pCreateInfo, pAllocator, pSampler); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySampler(VkDevice device, VkSampler sampler, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroySampler: Invalid device [VUID-vkDestroySampler-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroySampler(device, sampler, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(VkDevice device, + const VkDescriptorSetLayoutCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDescriptorSetLayout *pSetLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDescriptorSetLayout: Invalid device [VUID-vkCreateDescriptorSetLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDescriptorSetLayout: Invalid device [VUID-vkDestroyDescriptorSetLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDescriptorPool *pDescriptorPool) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDescriptorPool: Invalid device [VUID-vkCreateDescriptorPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDescriptorPool: Invalid device [VUID-vkDestroyDescriptorPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyDescriptorPool(device, descriptorPool, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, + VkDescriptorPoolResetFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetDescriptorPool: Invalid device [VUID-vkResetDescriptorPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->ResetDescriptorPool(device, descriptorPool, flags); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(VkDevice device, + const VkDescriptorSetAllocateInfo *pAllocateInfo, + VkDescriptorSet *pDescriptorSets) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAllocateDescriptorSets: Invalid device [VUID-vkAllocateDescriptorSets-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, + uint32_t descriptorSetCount, + const VkDescriptorSet *pDescriptorSets) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkFreeDescriptorSets: Invalid device [VUID-vkFreeDescriptorSets-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, + const VkWriteDescriptorSet *pDescriptorWrites, + uint32_t descriptorCopyCount, + const VkCopyDescriptorSet *pDescriptorCopies) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUpdateDescriptorSets: Invalid device [VUID-vkUpdateDescriptorSets-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkFramebuffer *pFramebuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateFramebuffer: Invalid device [VUID-vkCreateFramebuffer-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyFramebuffer: Invalid device [VUID-vkDestroyFramebuffer-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyFramebuffer(device, framebuffer, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkRenderPass *pRenderPass) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateRenderPass: Invalid device [VUID-vkCreateRenderPass-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyRenderPass: Invalid device [VUID-vkDestroyRenderPass-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyRenderPass(device, renderPass, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, + VkExtent2D *pGranularity) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRenderAreaGranularity: Invalid device [VUID-vkGetRenderAreaGranularity-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->GetRenderAreaGranularity(device, renderPass, pGranularity); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkCommandPool *pCommandPool) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateCommandPool: Invalid device [VUID-vkCreateCommandPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyCommandPool: Invalid device [VUID-vkDestroyCommandPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->DestroyCommandPool(device, commandPool, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice device, VkCommandPool commandPool, + VkCommandPoolResetFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetCommandPool: Invalid device [VUID-vkResetCommandPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->ResetCommandPool(device, commandPool, flags); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(VkDevice device, + const VkCommandBufferAllocateInfo *pAllocateInfo, + VkCommandBuffer *pCommandBuffers) { + VkResult res; + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAllocateCommandBuffers: Invalid device [VUID-vkAllocateCommandBuffers-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + res = disp->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); + if (res == VK_SUCCESS) { + for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++) { + if (pCommandBuffers[i]) { + loader_set_dispatch(pCommandBuffers[i], disp); + } + } + } + + return res; +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, + uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkFreeCommandBuffers: Invalid device [VUID-vkFreeCommandBuffers-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer commandBuffer, + const VkCommandBufferBeginInfo *pBeginInfo) { + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBeginCommandBuffer: Invalid commandBuffer [VUID-vkBeginCommandBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->BeginCommandBuffer(commandBuffer, pBeginInfo); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEndCommandBuffer: Invalid commandBuffer [VUID-vkEndCommandBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->EndCommandBuffer(commandBuffer); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetCommandBuffer: Invalid commandBuffer [VUID-vkResetCommandBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->ResetCommandBuffer(commandBuffer, flags); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, + VkPipeline pipeline) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindPipeline: Invalid commandBuffer [VUID-vkCmdBindPipeline-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, + uint32_t viewportCount, const VkViewport *pViewports) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewport: Invalid commandBuffer [VUID-vkCmdSetViewport-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, + uint32_t scissorCount, const VkRect2D *pScissors) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetScissor: Invalid commandBuffer [VUID-vkCmdSetScissor-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLineWidth: Invalid commandBuffer [VUID-vkCmdSetLineWidth-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetLineWidth(commandBuffer, lineWidth); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, + float depthBiasClamp, float depthBiasSlopeFactor) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBias: Invalid commandBuffer [VUID-vkCmdSetDepthBias-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetBlendConstants: Invalid commandBuffer [VUID-vkCmdSetBlendConstants-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetBlendConstants(commandBuffer, blendConstants); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, + float maxDepthBounds) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBounds: Invalid commandBuffer [VUID-vkCmdSetDepthBounds-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, + uint32_t compareMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilCompareMask: Invalid commandBuffer [VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, + uint32_t writeMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilWriteMask: Invalid commandBuffer [VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, + uint32_t reference) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilReference: Invalid commandBuffer [VUID-vkCmdSetStencilReference-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetStencilReference(commandBuffer, faceMask, reference); +} + +LOADER_EXPORT 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) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindDescriptorSets: Invalid commandBuffer [VUID-vkCmdBindDescriptorSets-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, + dynamicOffsetCount, pDynamicOffsets); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkIndexType indexType) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindIndexBuffer: Invalid commandBuffer [VUID-vkCmdBindIndexBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, + uint32_t bindingCount, const VkBuffer *pBuffers, + const VkDeviceSize *pOffsets) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindVertexBuffers: Invalid commandBuffer [VUID-vkCmdBindVertexBuffers-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, + uint32_t firstVertex, uint32_t firstInstance) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDraw: Invalid commandBuffer [VUID-vkCmdDraw-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, + uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, + uint32_t firstInstance) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndexed: Invalid commandBuffer [VUID-vkCmdDrawIndexed-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + uint32_t drawCount, uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndirect: Invalid commandBuffer [VUID-vkCmdDrawIndirect-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, + VkDeviceSize offset, uint32_t drawCount, uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndexedIndirect: Invalid commandBuffer [VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatch: Invalid commandBuffer [VUID-vkCmdDispatch-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdDispatch(commandBuffer, x, y, z); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, + VkDeviceSize offset) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchIndirect: Invalid commandBuffer [VUID-vkCmdDispatchIndirect-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdDispatchIndirect(commandBuffer, buffer, offset); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, + uint32_t regionCount, const VkBufferCopy *pRegions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyBuffer: Invalid commandBuffer [VUID-vkCmdCopyBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, + VkImageLayout srcImageLayout, VkImage dstImage, + VkImageLayout dstImageLayout, uint32_t regionCount, + const VkImageCopy *pRegions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyImage: Invalid commandBuffer [VUID-vkCmdCopyImage-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, + VkImageLayout srcImageLayout, VkImage dstImage, + VkImageLayout dstImageLayout, uint32_t regionCount, + const VkImageBlit *pRegions, VkFilter filter) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBlitImage: Invalid commandBuffer [VUID-vkCmdBlitImage-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, + VkImageLayout dstImageLayout, uint32_t regionCount, + const VkBufferImageCopy *pRegions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyBufferToImage: Invalid commandBuffer [VUID-vkCmdCopyBufferToImage-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, + VkImageLayout srcImageLayout, VkBuffer dstBuffer, + uint32_t regionCount, const VkBufferImageCopy *pRegions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyImageToBuffer: Invalid commandBuffer [VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, + VkDeviceSize dstOffset, VkDeviceSize dataSize, const void *pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdUpdateBuffer: Invalid commandBuffer [VUID-vkCmdUpdateBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, + VkDeviceSize size, uint32_t data) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdFillBuffer: Invalid commandBuffer [VUID-vkCmdFillBuffer-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, + VkImageLayout imageLayout, const VkClearColorValue *pColor, + uint32_t rangeCount, const VkImageSubresourceRange *pRanges) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdClearColorImage: Invalid commandBuffer [VUID-vkCmdClearColorImage-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, + VkImageLayout imageLayout, + const VkClearDepthStencilValue *pDepthStencil, + uint32_t rangeCount, const VkImageSubresourceRange *pRanges) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdClearDepthStencilImage: Invalid commandBuffer [VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, + const VkClearAttachment *pAttachments, uint32_t rectCount, + const VkClearRect *pRects) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdClearAttachments: Invalid commandBuffer [VUID-vkCmdClearAttachments-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, + VkImageLayout srcImageLayout, VkImage dstImage, + VkImageLayout dstImageLayout, uint32_t regionCount, + const VkImageResolve *pRegions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResolveImage: Invalid commandBuffer [VUID-vkCmdResolveImage-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, + VkPipelineStageFlags stageMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetEvent: Invalid commandBuffer [VUID-vkCmdSetEvent-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdSetEvent(commandBuffer, event, stageMask); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, + VkPipelineStageFlags stageMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResetEvent: Invalid commandBuffer [VUID-vkCmdResetEvent-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdResetEvent(commandBuffer, event, stageMask); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, + VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags dstStageMask, + uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, + uint32_t bufferMemoryBarrierCount, + const VkBufferMemoryBarrier *pBufferMemoryBarriers, + uint32_t imageMemoryBarrierCount, + const VkImageMemoryBarrier *pImageMemoryBarriers) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWaitEvents: Invalid commandBuffer [VUID-vkCmdWaitEvents-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdWaitEvents(commandBuffer, eventCount, pEvents, sourceStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, + bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); +} + +LOADER_EXPORT 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) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPipelineBarrier: Invalid commandBuffer [VUID-vkCmdPipelineBarrier-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, + bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, + VkFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginQuery: Invalid commandBuffer [VUID-vkCmdBeginQuery-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBeginQuery(commandBuffer, queryPool, slot, flags); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndQuery: Invalid commandBuffer [VUID-vkCmdEndQuery-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdEndQuery(commandBuffer, queryPool, slot); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, + uint32_t firstQuery, uint32_t queryCount) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResetQueryPool: Invalid commandBuffer [VUID-vkCmdResetQueryPool-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, + VkQueryPool queryPool, uint32_t slot) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteTimestamp: Invalid commandBuffer [VUID-vkCmdWriteTimestamp-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, + uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, + VkDeviceSize dstOffset, VkDeviceSize stride, VkFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyQueryPoolResults: Invalid commandBuffer [VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, + VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, + const void *pValues) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushConstants: Invalid commandBuffer [VUID-vkCmdPushConstants-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo *pRenderPassBegin, + VkSubpassContents contents) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginRenderPass: Invalid commandBuffer [VUID-vkCmdBeginRenderPass-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdNextSubpass: Invalid commandBuffer [VUID-vkCmdNextSubpass-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdNextSubpass(commandBuffer, contents); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndRenderPass: Invalid commandBuffer [VUID-vkCmdEndRenderPass-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdEndRenderPass(commandBuffer); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, + const VkCommandBuffer *pCommandBuffers) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdExecuteCommands: Invalid commandBuffer [VUID-vkCmdExecuteCommands-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + disp->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers); +} + +// ---- Vulkan core 1.1 trampolines + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( + VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties) { + VkResult res = VK_SUCCESS; + struct loader_instance *inst = NULL; + + loader_platform_thread_lock_mutex(&loader_lock); + + inst = loader_get_instance(instance); + if (NULL == inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkEnumeratePhysicalDeviceGroups: Invalid instance [VUID-vkEnumeratePhysicalDeviceGroups-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + if (NULL == pPhysicalDeviceGroupCount) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "vkEnumeratePhysicalDeviceGroups: Received NULL pointer for physical " + "device group count return value."); + res = VK_ERROR_INITIALIZATION_FAILED; + goto out; + } + + // Call down the chain to get the physical device group info. + res = inst->disp->layer_inst_disp.EnumeratePhysicalDeviceGroups(inst->instance, pPhysicalDeviceGroupCount, + pPhysicalDeviceGroupProperties); + if (NULL != pPhysicalDeviceGroupProperties && (VK_SUCCESS == res || VK_INCOMPLETE == res)) { + // Wrap the PhysDev object for loader usage, return wrapped objects + VkResult update_res = setup_loader_tramp_phys_dev_groups(inst, *pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties); + if (VK_SUCCESS != update_res) { + res = update_res; + } + } + +out: + + loader_platform_thread_unlock_mutex(&loader_lock); + return res; +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2 *pFeatures) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceFeatures2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + disp->GetPhysicalDeviceFeatures2KHR(unwrapped_phys_dev, pFeatures); + } else { + disp->GetPhysicalDeviceFeatures2(unwrapped_phys_dev, pFeatures); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2 *pProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceProperties2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + disp->GetPhysicalDeviceProperties2KHR(unwrapped_phys_dev, pProperties); + } else { + disp->GetPhysicalDeviceProperties2(unwrapped_phys_dev, pProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties2 *pFormatProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceFormatProperties2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + disp->GetPhysicalDeviceFormatProperties2KHR(unwrapped_phys_dev, format, pFormatProperties); + } else { + disp->GetPhysicalDeviceFormatProperties2(unwrapped_phys_dev, format, pFormatProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo, + VkImageFormatProperties2 *pImageFormatProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceImageFormatProperties2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + return disp->GetPhysicalDeviceImageFormatProperties2KHR(unwrapped_phys_dev, pImageFormatInfo, pImageFormatProperties); + } else { + return disp->GetPhysicalDeviceImageFormatProperties2(unwrapped_phys_dev, pImageFormatInfo, pImageFormatProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( + VkPhysicalDevice physicalDevice, uint32_t *pQueueFamilyPropertyCount, VkQueueFamilyProperties2 *pQueueFamilyProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceQueueFamilyProperties2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + disp->GetPhysicalDeviceQueueFamilyProperties2KHR(unwrapped_phys_dev, pQueueFamilyPropertyCount, pQueueFamilyProperties); + } else { + disp->GetPhysicalDeviceQueueFamilyProperties2(unwrapped_phys_dev, pQueueFamilyPropertyCount, pQueueFamilyProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL +vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2 *pMemoryProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceMemoryProperties2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + disp->GetPhysicalDeviceMemoryProperties2KHR(unwrapped_phys_dev, pMemoryProperties); + } else { + disp->GetPhysicalDeviceMemoryProperties2(unwrapped_phys_dev, pMemoryProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2 *pFormatInfo, uint32_t *pPropertyCount, + VkSparseImageFormatProperties2 *pProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSparseImageFormatProperties2: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_get_physical_device_properties2) { + disp->GetPhysicalDeviceSparseImageFormatProperties2KHR(unwrapped_phys_dev, pFormatInfo, pPropertyCount, pProperties); + } else { + disp->GetPhysicalDeviceSparseImageFormatProperties2(unwrapped_phys_dev, pFormatInfo, pPropertyCount, pProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, + VkExternalBufferProperties *pExternalBufferProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceExternalBufferProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_external_memory_capabilities) { + disp->GetPhysicalDeviceExternalBufferPropertiesKHR(unwrapped_phys_dev, pExternalBufferInfo, pExternalBufferProperties); + } else { + disp->GetPhysicalDeviceExternalBufferProperties(unwrapped_phys_dev, pExternalBufferInfo, pExternalBufferProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo *pExternalSemaphoreInfo, + VkExternalSemaphoreProperties *pExternalSemaphoreProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceExternalSemaphoreProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_external_semaphore_capabilities) { + disp->GetPhysicalDeviceExternalSemaphorePropertiesKHR(unwrapped_phys_dev, pExternalSemaphoreInfo, + pExternalSemaphoreProperties); + } else { + disp->GetPhysicalDeviceExternalSemaphoreProperties(unwrapped_phys_dev, pExternalSemaphoreInfo, + pExternalSemaphoreProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo *pExternalFenceInfo, + VkExternalFenceProperties *pExternalFenceProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceExternalFenceProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance; + + if (inst != NULL && inst->enabled_extensions.khr_external_fence_capabilities) { + disp->GetPhysicalDeviceExternalFencePropertiesKHR(unwrapped_phys_dev, pExternalFenceInfo, pExternalFenceProperties); + } else { + disp->GetPhysicalDeviceExternalFenceProperties(unwrapped_phys_dev, pExternalFenceInfo, pExternalFenceProperties); + } +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount, + const VkBindBufferMemoryInfo *pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindBufferMemory2: Invalid device [VUID-vkBindBufferMemory2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindBufferMemory2(device, bindInfoCount, pBindInfos); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, + const VkBindImageMemoryInfo *pBindInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkBindImageMemory2: Invalid device [VUID-vkBindImageMemory2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->BindImageMemory2(device, bindInfoCount, pBindInfos); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, + uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, + VkPeerMemoryFeatureFlags *pPeerMemoryFeatures) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupPeerMemoryFeatures: Invalid device [VUID-vkGetDeviceGroupPeerMemoryFeatures-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDeviceMask: Invalid commandBuffer [VUID-vkCmdSetDeviceMask-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDeviceMask(commandBuffer, deviceMask); +} + +LOADER_EXPORT 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) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDispatchBase: Invalid commandBuffer [VUID-vkCmdDispatchBase-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageMemoryRequirements2: Invalid device [VUID-vkGetImageMemoryRequirements2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageMemoryRequirements2(device, pInfo, pMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(VkDevice device, + const VkBufferMemoryRequirementsInfo2 *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferMemoryRequirements2: Invalid device [VUID-vkGetBufferMemoryRequirements2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( + VkDevice device, const VkImageSparseMemoryRequirementsInfo2 *pInfo, uint32_t *pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log( + NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSparseMemoryRequirements2: Invalid device [VUID-vkGetImageSparseMemoryRequirements2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, + VkCommandPoolTrimFlags flags) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkTrimCommandPool: Invalid device [VUID-vkTrimCommandPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->TrimCommandPool(device, commandPool, flags); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceQueue2: Invalid device [VUID-vkGetDeviceQueue2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceQueue2(device, pQueueInfo, pQueue); + if (pQueue != NULL && *pQueue != NULL) { + loader_set_dispatch(*pQueue, disp); + } +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(VkDevice device, + const VkSamplerYcbcrConversionCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSamplerYcbcrConversion *pYcbcrConversion) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSamplerYcbcrConversion: Invalid device [VUID-vkCreateSamplerYcbcrConversion-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroySamplerYcbcrConversion: Invalid device [VUID-vkDestroySamplerYcbcrConversion-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(VkDevice device, + const VkDescriptorSetLayoutCreateInfo *pCreateInfo, + VkDescriptorSetLayoutSupport *pSupport) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDescriptorSetLayoutSupport: Invalid device [VUID-vkGetDescriptorSetLayoutSupport-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDescriptorUpdateTemplate *pDescriptorUpdateTemplate) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDescriptorUpdateTemplate: Invalid device [VUID-vkCreateDescriptorUpdateTemplate-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate(VkDevice device, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyDescriptorUpdateTemplate: Invalid device [VUID-vkDestroyDescriptorUpdateTemplate-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + const void *pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUpdateDescriptorSetWithTemplate: Invalid device [VUID-vkUpdateDescriptorSetWithTemplate-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->UpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData); +} + +// ---- Vulkan core 1.2 trampolines + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2 *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkRenderPass *pRenderPass) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateRenderPass2: Invalid device [VUID-vkCreateRenderPass2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateRenderPass2(device, pCreateInfo, pAllocator, pRenderPass); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo *pRenderPassBegin, + const VkSubpassBeginInfo *pSubpassBeginInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginRenderPass2: Invalid commandBuffer [VUID-vkCmdBeginRenderPass2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(VkCommandBuffer commandBuffer, + const VkSubpassBeginInfo *pSubpassBeginInfo, + const VkSubpassEndInfo *pSubpassEndInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdNextSubpass2: Invalid commandBuffer [VUID-vkCmdNextSubpass2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, + const VkSubpassEndInfo *pSubpassEndInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndRenderPass2: Invalid commandBuffer [VUID-vkCmdEndRenderPass2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndRenderPass2(commandBuffer, pSubpassEndInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkBuffer countBuffer, VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndirectCount: Invalid commandBuffer [VUID-vkCmdDrawIndirectCount-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, + VkDeviceSize offset, VkBuffer countBuffer, + VkDeviceSize countBufferOffset, uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdDrawIndexedIndirectCount: Invalid commandBuffer " + "[VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t *pValue) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSemaphoreCounterValue: Invalid device [VUID-vkGetSemaphoreCounterValue-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSemaphoreCounterValue(device, semaphore, pValue); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo *pWaitInfo, + uint64_t timeout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkWaitSemaphores: Invalid device [VUID-vkWaitSemaphores-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->WaitSemaphores(device, pWaitInfo, timeout); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo *pSignalInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSignalSemaphore: Invalid device [VUID-vkSignalSemaphore-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SignalSemaphore(device, pSignalInfo); +} + +LOADER_EXPORT VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress(VkDevice device, + const VkBufferDeviceAddressInfo *pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferDeviceAddress: Invalid device [VUID-vkGetBufferDeviceAddress-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferDeviceAddress(device, pInfo); +} + +LOADER_EXPORT VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(VkDevice device, + const VkBufferDeviceAddressInfo *pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetBufferOpaqueCaptureAddress: Invalid device [VUID-vkGetBufferOpaqueCaptureAddress-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetBufferOpaqueCaptureAddress(device, pInfo); +} + +LOADER_EXPORT VKAPI_ATTR uint64_t VKAPI_CALL +vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo *pInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceMemoryOpaqueCaptureAddress: Invalid device " + "[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceMemoryOpaqueCaptureAddress(device, pInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, + uint32_t queryCount) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkResetQueryPool: Invalid device [VUID-vkResetQueryPool-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->ResetQueryPool(device, queryPool, firstQuery, queryCount); +} + +// ---- Vulkan core 1.3 trampolines + +// Instance + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, + uint32_t *pToolCount, + VkPhysicalDeviceToolProperties *pToolProperties) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceToolProperties: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceToolProperties-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + + return disp->GetPhysicalDeviceToolProperties(unwrapped_phys_dev, pToolCount, pToolProperties); +} + +// Device + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo *pRenderingInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBeginRendering: Invalid commandBuffer " + "[VUID-vkCmdBeginRendering-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBeginRendering(commandBuffer, pRenderingInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, + uint32_t bindingCount, const VkBuffer *pBuffers, + const VkDeviceSize *pOffsets, const VkDeviceSize *pSizes, + const VkDeviceSize *pStrides) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindVertexBuffers2: Invalid commandBuffer " + "[VUID-vkCmdBindVertexBuffers2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2 *pBlitImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBlitImage2: Invalid commandBuffer " + "[VUID-vkCmdBlitImage2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBlitImage2(commandBuffer, pBlitImageInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 *pCopyBufferInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyBuffer2: Invalid commandBuffer " + "[VUID-vkCmdCopyBuffer2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyBuffer2(commandBuffer, pCopyBufferInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer, + const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyBufferToImage2: Invalid commandBuffer " + "[VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyImage2: Invalid commandBuffer " + "[VUID-vkCmdCopyImage2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyImage2(commandBuffer, pCopyImageInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, + const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdCopyImageToBuffer2: Invalid commandBuffer " + "[VUID-vkCmdCopyImageToBuffer2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering(VkCommandBuffer commandBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdEndRendering: Invalid commandBuffer " + "[VUID-vkCmdEndRendering-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdEndRendering(commandBuffer); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer, + const VkDependencyInfo *pDependencyInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPipelineBarrier2: Invalid commandBuffer " + "[VUID-vkCmdPipelineBarrier2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPipelineBarrier2(commandBuffer, pDependencyInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event, + VkPipelineStageFlags2 stageMask) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResetEvent2: Invalid commandBuffer " + "[VUID-vkCmdResetEvent2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdResetEvent2(commandBuffer, event, stageMask); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2(VkCommandBuffer commandBuffer, + const VkResolveImageInfo2 *pResolveImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdResolveImage2: Invalid commandBuffer " + "[VUID-vkCmdResolveImage2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdResolveImage2(commandBuffer, pResolveImageInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetCullMode: Invalid commandBuffer " + "[VUID-vkCmdSetCullMode-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetCullMode(commandBuffer, cullMode); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBiasEnable: Invalid commandBuffer " + "[VUID-vkCmdSetDepthBiasEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthBiasEnable(commandBuffer, depthBiasEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, + VkBool32 depthBoundsTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthBoundsTestEnable: Invalid commandBuffer " + "[VUID-vkCmdSetDepthBoundsTestEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthCompareOp: Invalid commandBuffer " + "[VUID-vkCmdSetDepthCompareOp-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthCompareOp(commandBuffer, depthCompareOp); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthTestEnable: Invalid commandBuffer " + "[VUID-vkCmdSetDepthTestEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthTestEnable(commandBuffer, depthTestEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetDepthWriteEnable: Invalid commandBuffer " + "[VUID-vkCmdSetDepthWriteEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetDepthWriteEnable(commandBuffer, depthWriteEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event, + const VkDependencyInfo *pDependencyInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetEvent2: Invalid commandBuffer " + "[VUID-vkCmdSetEvent2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetEvent2(commandBuffer, event, pDependencyInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetFrontFace: Invalid commandBuffer " + "[VUID-vkCmdSetFrontFace-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetFrontFace(commandBuffer, frontFace); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, + VkBool32 primitiveRestartEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPrimitiveRestartEnable: Invalid commandBuffer " + "[VUID-vkCmdSetPrimitiveRestartEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, + VkPrimitiveTopology primitiveTopology) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetPrimitiveTopology: Invalid commandBuffer " + "[VUID-vkCmdSetPrimitiveTopology-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetPrimitiveTopology(commandBuffer, primitiveTopology); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, + VkBool32 rasterizerDiscardEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRasterizerDiscardEnable: Invalid commandBuffer " + "[VUID-vkCmdSetRasterizerDiscardEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, + const VkRect2D *pScissors) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetScissorWithCount: Invalid commandBuffer " + "[VUID-vkCmdSetScissorWithCount-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetScissorWithCount(commandBuffer, scissorCount, pScissors); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, + VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, + VkCompareOp compareOp) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilOp: Invalid commandBuffer " + "[VUID-vkCmdSetStencilOp-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetStencilTestEnable: Invalid commandBuffer " + "[VUID-vkCmdSetStencilTestEnable-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetStencilTestEnable(commandBuffer, stencilTestEnable); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, + const VkViewport *pViewports) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetViewportWithCount: Invalid commandBuffer " + "[VUID-vkCmdSetViewportWithCount-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetViewportWithCount(commandBuffer, viewportCount, pViewports); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, + const VkEvent *pEvents, const VkDependencyInfo *pDependencyInfos) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWaitEvents2: Invalid commandBuffer " + "[VUID-vkCmdWaitEvents2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, + VkQueryPool queryPool, uint32_t query) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdWriteTimestamp2: Invalid commandBuffer " + "[VUID-vkCmdWriteTimestamp2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdWriteTimestamp2(commandBuffer, stage, queryPool, query); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot(VkDevice device, + const VkPrivateDataSlotCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkPrivateDataSlot *pPrivateDataSlot) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreatePrivateDataSlot: Invalid device " + "[VUID-vkCreatePrivateDataSlot-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreatePrivateDataSlot(device, pCreateInfo, pAllocator, pPrivateDataSlot); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot privateDataSlot, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroyPrivateDataSlot: Invalid device " + "[VUID-vkDestroyPrivateDataSlot-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroyPrivateDataSlot(device, privateDataSlot, pAllocator); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements(VkDevice device, + const VkDeviceBufferMemoryRequirements *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceBufferMemoryRequirements: Invalid device " + "[VUID-vkGetDeviceBufferMemoryRequirements-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements(VkDevice device, + const VkDeviceImageMemoryRequirements *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceImageMemoryRequirements: Invalid device " + "[VUID-vkGetDeviceImageMemoryRequirements-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceImageMemoryRequirements(device, pInfo, pMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( + VkDevice device, const VkDeviceImageMemoryRequirements *pInfo, uint32_t *pSparseMemoryRequirementCount, + VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceImageSparseMemoryRequirements: Invalid device " + "[VUID-vkGetDeviceImageSparseMemoryRequirements-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceImageSparseMemoryRequirements(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, uint64_t *pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPrivateData: Invalid device " + "[VUID-vkGetPrivateData-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetPrivateData(device, objectType, objectHandle, privateDataSlot, pData); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, + VkPrivateDataSlot privateDataSlot, uint64_t data) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetPrivateData: Invalid device " + "[VUID-vkSetPrivateData-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SetPrivateData(device, objectType, objectHandle, privateDataSlot, data); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 *pSubmits, + VkFence fence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueueSubmit2: Invalid queue " + "[VUID-vkQueueSubmit2-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->QueueSubmit2(queue, submitCount, pSubmits, fence); +} + +// ---- Vulkan core 1.4 trampolines + +// Instance + +// Device + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity(VkDevice device, + const VkRenderingAreaInfo *pRenderingAreaInfo, + VkExtent2D *pGranularity) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetRenderingAreaGranularity: Invalid device " + "[VUID-vkGetRenderingAreaGranularity-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetRenderingAreaGranularity(device, pRenderingAreaInfo, pGranularity); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, + uint32_t set, uint32_t descriptorWriteCount, + const VkWriteDescriptorSet *pDescriptorWrites) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSet: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSet-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, uint32_t set, + const void *pData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSetWithTemplate: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSetWithTemplate-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSetWithTemplate(commandBuffer, descriptorUpdateTemplate, layout, set, pData); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, + uint16_t lineStipplePattern) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetLineStipple: Invalid commandBuffer " + "[VUID-vkCmdSetLineStipple-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkDeviceSize size, VkIndexType indexType) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindIndexBuffer2: Invalid commandBuffer " + "[VUID-vkCmdBindIndexBuffer2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage(VkDevice device, + const VkCopyMemoryToImageInfo *pCopyMemoryToImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyMemoryToImage: Invalid device " + "[VUID-vkCopyMemoryToImage-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyMemoryToImage(device, pCopyMemoryToImageInfo); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory(VkDevice device, + const VkCopyImageToMemoryInfo *pCopyImageToMemoryInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyImageToMemory: Invalid device " + "[VUID-vkCopyImageToMemory-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyImageToMemory(device, pCopyImageToMemoryInfo); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage(VkDevice device, + const VkCopyImageToImageInfo *pCopyImageToImageInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCopyImageToImage: Invalid device " + "[VUID-vkCopyImageToImage-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CopyImageToImage(device, pCopyImageToImageInfo); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout(VkDevice device, uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo *pTransitions) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkTransitionImageLayout: Invalid device " + "[VUID-vkTransitionImageLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->TransitionImageLayout(device, transitionCount, pTransitions); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout(VkDevice device, + const VkDeviceImageSubresourceInfo *pInfo, + VkSubresourceLayout2 *pLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceImageSubresourceLayout: Invalid device " + "[VUID-vkGetDeviceImageSubresourceLayout-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetDeviceImageSubresourceLayout(device, pInfo, pLayout); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2(VkDevice device, VkImage image, + const VkImageSubresource2 *pSubresource, + VkSubresourceLayout2 *pLayout) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetImageSubresourceLayout2: Invalid device " + "[VUID-vkGetImageSubresourceLayout2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->GetImageSubresourceLayout2(device, image, pSubresource, pLayout); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2(VkDevice device, const VkMemoryMapInfo *pMemoryMapInfo, void **ppData) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkMapMemory2: Invalid device " + "[VUID-vkMapMemory2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->MapMemory2(device, pMemoryMapInfo, ppData); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2(VkDevice device, const VkMemoryUnmapInfo *pMemoryUnmapInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkUnmapMemory2: Invalid device " + "[VUID-vkUnmapMemory2-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->UnmapMemory2(device, pMemoryUnmapInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo *pBindDescriptorSetsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdBindDescriptorSets2: Invalid commandBuffer " + "[VUID-vkCmdBindDescriptorSets2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2(VkCommandBuffer commandBuffer, + const VkPushConstantsInfo *pPushConstantsInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushConstants2: Invalid commandBuffer " + "[VUID-vkCmdPushConstants2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushConstants2(commandBuffer, pPushConstantsInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo *pPushDescriptorSetInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSet2: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSet2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2( + VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo *pPushDescriptorSetWithTemplateInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdPushDescriptorSetWithTemplate2: Invalid commandBuffer " + "[VUID-vkCmdPushDescriptorSetWithTemplate2-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdPushDescriptorSetWithTemplate2(commandBuffer, pPushDescriptorSetWithTemplateInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL +vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo *pLocationInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRenderingAttachmentLocations: Invalid commandBuffer " + "[VUID-vkCmdSetRenderingAttachmentLocations-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo); +} + +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( + VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo *pInputAttachmentIndexInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCmdSetRenderingInputAttachmentIndices: Invalid commandBuffer " + "[VUID-vkCmdSetRenderingInputAttachmentIndices-commandBuffer-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->CmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo); +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_aarch.S b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_aarch.S new file mode 100644 index 0000000000..a78a32d34c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_aarch.S @@ -0,0 +1,959 @@ +// +// Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// Copyright (c) 2024 Valve Corporation +// Copyright (c) 2024 LunarG, 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. +// +// Author: Eric Sullivan +// Author: Charles Giessen +// + +// This code is used to pass on device (including physical device) extensions through the call chain. It must do this without +// creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a +// VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then +// jump to the next function in the call chain + +#include "gen_defines.asm" + +/* + * References: + * - https://developer.arm.com/documentation/101028/0012/5--Feature-test-macros + * - https://github.com/ARM-software/abi-aa/blob/main/aaelf64/aaelf64.rst + */ +#if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1 + #define BTI_J hint 36 /* bti j: for jumps, IE br instructions */ + #define BTI_C hint 34 /* bti c: for calls, IE bl instructions */ + #define GNU_PROPERTY_AARCH64_BTI 1 /* bit 0 GNU Notes is for BTI support */ +#else + #define BTI_J + #define BTI_C + #define GNU_PROPERTY_AARCH64_BTI 0 +#endif + +/* + * We just need PAC added to GNU Notes for auditing features, the assembly itself does + * not need pac augmentation at this time because it doesn't make use of the SP aka x30. + */ +#if defined(__ARM_FEATURE_PAC_DEFAULT) + #define GNU_PROPERTY_AARCH64_POINTER_AUTH 2 /* bit 1 GNU Notes is for PAC support */ +#else + #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0 +#endif + +.if AARCH_64 + +.macro PhysDevExtTramp num +.global vkPhysDevExtTramp\num +#if defined(__ELF__) + .type vkPhysDevExtTramp\num, @function + .hidden vkPhysDevExtTramp\num +#endif +.balign 4 + +/* + * NOTE: x16 is used for the br register so the pstate.btype is 01 and can + * land on 'bti c' that would be inserted by the compiler in C/C++ functions. + * See: https://developer.arm.com/documentation/102433/0200/Jump-oriented-programming + */ +vkPhysDevExtTramp\num: + BTI_C + ldr x9, [x0] // Load the loader_instance_dispatch_table* into x9 + ldr x0, [x0, PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] // Load the unwrapped VkPhysicalDevice into x0 + mov x10, (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num)) // Put the offset of the entry in the dispatch table for the function + ldr x16, [x9, x10] // Load the address to branch to out of the dispatch table + br x16 // Branch to the next member of the dispatch chain +.endm + +.macro PhysDevExtTermin num +.global vkPhysDevExtTermin\num +#if defined(__ELF__) + .type vkPhysDevExtTermin\num, @function + .hidden vkPhysDevExtTermin\num +#endif +.balign 4 +vkPhysDevExtTermin\num: + BTI_C + ldr x9, [x0, ICD_TERM_OFFSET_PHYS_DEV_TERM] // Load the loader_icd_term* in x9 + mov x11, (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num)) // Put the offset into the dispatch table in x11 + ldr x16, [x9, x11] // Load the address of the next function in the dispatch chain + cbz x16, terminError\num // Go to the error section if the next function in the chain is NULL + ldr x0, [x0, PHYS_DEV_OFFSET_PHYS_DEV_TERM] // Unwrap the VkPhysicalDevice in x0 + br x16 // Jump to the next function in the chain +terminError\num: + BTI_J + mov x10, (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * \num)) // Offset of the function name string in the instance + ldr x11, [x9, INSTANCE_OFFSET_ICD_TERM] // Load the instance pointer + mov x0, x11 // Vulkan instance pointer (first arg) + mov x1, VULKAN_LOADER_ERROR_BIT // The error logging bit (second arg) + mov x2, #0 // Zero (third arg) + ldr x3, [x11, x10] // The function name (fourth arg) + bl loader_log_asm_function_not_supported // Log the error message before we crash + mov x0, #0 + br x0 // Crash intentionally by jumping to address zero +.endm + +.macro DevExtTramp num +.global vkdev_ext\num +#if defined(__ELF__) + .hidden vkdev_ext\num +#endif +.balign 4 +vkdev_ext\num: + BTI_C + ldr x9, [x0] // Load the loader_instance_dispatch_table* into x9 + mov x10, (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num)) // Offset of the desired function in the dispatch table + ldr x16, [x9, x10] // Load the function address + br x16 +.endm + +.else // AARCH_32 + +.macro PhysDevExtTramp num +.global vkPhysDevExtTramp\num +#if defined(__ELF__) + .hidden vkPhysDevExtTramp\num +#endif +.balign 4 + +vkPhysDevExtTrampDispatchEntry\num: .word PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num) +vkPhysDevExtTramp\num: + ldr r4, [r0] // Load the loader_instance_dispatch_table* into r4 + ldr r0, [r0, #PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] // Load the unwrapped VkPhysicalDevice into r0 + ldr r5, vkPhysDevExtTrampDispatchEntry\num // Put the offset of the entry in the dispatch table for the function + ldr r6, [r4, r5] // Load the address to branch to out of the dispatch table + bx r6 // Branch to the next member of the dispatch chain + +.endm + +.macro PhysDevExtTermin num +.global vkPhysDevExtTermin\num +#if defined(__ELF__) + .hidden vkPhysDevExtTermin\num +#endif +.balign 4 +vkPhysDevExtTerminDispatchEntry\num: .word DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num) +vkPhysDevExtTerminFunctionNameEntry\num: .word FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * \num) +vkPhysDevExtTermin\num: + ldr r4, [r0, #ICD_TERM_OFFSET_PHYS_DEV_TERM] // Load the loader_icd_term* in r4 + ldr r6, vkPhysDevExtTerminDispatchEntry\num // Put the offset into the dispatch table in r6 + ldr r5, [r4, r6] // Load the address of the next function in the dispatch chain + cmp r5, #0 + beq terminError\num // Go to the error section if the next function in the chain is NULL + ldr r0, [r0, #PHYS_DEV_OFFSET_PHYS_DEV_TERM] // Unwrap the VkPhysicalDevice in r0 + bx r5 // Jump to the next function in the chain +terminError\num: + ldr r5, vkPhysDevExtTerminFunctionNameEntry\num // Offset of the function name string in the instance + ldr r6, [r4, #INSTANCE_OFFSET_ICD_TERM] // Load the instance pointer + mov r0, r6 // Vulkan instance pointer (first arg) + mov r1, #VULKAN_LOADER_ERROR_BIT // The error logging bit (second arg) + mov r2, #0 // Zero (third arg) + ldr r3, [r6, r5] // The function name (fourth arg) + bl loader_log_asm_function_not_supported // Log the error message before we crash + mov r0, #0 + bx r0 // Crash intentionally by jumping to address zero +.endm + +.macro DevExtTramp num +.global vkdev_ext\num +#if defined(__ELF__) + .hidden vkdev_ext\num +#endif +.balign 4 +vkdev_ext_dispatch_entry\num: .word EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num) +vkdev_ext\num: + ldr r4, [r0] // Load the loader_instance_dispatch_table* into r4 + ldr r5, vkdev_ext_dispatch_entry\num // Offset of the desired function in the dispatch table + ldr r6, [r4, r5] // Load the function address + bx r6 +.endm + +.endif + +#if defined(__ELF__) +.section .note.GNU-stack,"",%progbits +/* Add the PAC and BTI support to GNU Notes section for ELF object files */ +#if GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 + .pushsection .note.gnu.property, "a"; /* Start a new allocatable section */ + .balign 8; /* align it on a byte boundry */ + .long 4; /* size of "GNU\0" */ + .long 0x10; /* size of descriptor */ + .long 0x5; /* NT_GNU_PROPERTY_TYPE_0 */ + .asciz "GNU"; + .long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ + .long 4; /* Four bytes of data */ + .long (GNU_PROPERTY_AARCH64_BTI|GNU_PROPERTY_AARCH64_POINTER_AUTH); /* BTI or PAC is enabled */ + .long 0; /* padding for 8 byte alignment */ + .popsection; /* end the section */ +#endif +#endif + +.data + +termin_error_string: +.string "Function %s not supported for this physical device" + +.text + + PhysDevExtTramp 0 + PhysDevExtTramp 1 + PhysDevExtTramp 2 + PhysDevExtTramp 3 + PhysDevExtTramp 4 + PhysDevExtTramp 5 + PhysDevExtTramp 6 + PhysDevExtTramp 7 + PhysDevExtTramp 8 + PhysDevExtTramp 9 + PhysDevExtTramp 10 + PhysDevExtTramp 11 + PhysDevExtTramp 12 + PhysDevExtTramp 13 + PhysDevExtTramp 14 + PhysDevExtTramp 15 + PhysDevExtTramp 16 + PhysDevExtTramp 17 + PhysDevExtTramp 18 + PhysDevExtTramp 19 + PhysDevExtTramp 20 + PhysDevExtTramp 21 + PhysDevExtTramp 22 + PhysDevExtTramp 23 + PhysDevExtTramp 24 + PhysDevExtTramp 25 + PhysDevExtTramp 26 + PhysDevExtTramp 27 + PhysDevExtTramp 28 + PhysDevExtTramp 29 + PhysDevExtTramp 30 + PhysDevExtTramp 31 + PhysDevExtTramp 32 + PhysDevExtTramp 33 + PhysDevExtTramp 34 + PhysDevExtTramp 35 + PhysDevExtTramp 36 + PhysDevExtTramp 37 + PhysDevExtTramp 38 + PhysDevExtTramp 39 + PhysDevExtTramp 40 + PhysDevExtTramp 41 + PhysDevExtTramp 42 + PhysDevExtTramp 43 + PhysDevExtTramp 44 + PhysDevExtTramp 45 + PhysDevExtTramp 46 + PhysDevExtTramp 47 + PhysDevExtTramp 48 + PhysDevExtTramp 49 + PhysDevExtTramp 50 + PhysDevExtTramp 51 + PhysDevExtTramp 52 + PhysDevExtTramp 53 + PhysDevExtTramp 54 + PhysDevExtTramp 55 + PhysDevExtTramp 56 + PhysDevExtTramp 57 + PhysDevExtTramp 58 + PhysDevExtTramp 59 + PhysDevExtTramp 60 + PhysDevExtTramp 61 + PhysDevExtTramp 62 + PhysDevExtTramp 63 + PhysDevExtTramp 64 + PhysDevExtTramp 65 + PhysDevExtTramp 66 + PhysDevExtTramp 67 + PhysDevExtTramp 68 + PhysDevExtTramp 69 + PhysDevExtTramp 70 + PhysDevExtTramp 71 + PhysDevExtTramp 72 + PhysDevExtTramp 73 + PhysDevExtTramp 74 + PhysDevExtTramp 75 + PhysDevExtTramp 76 + PhysDevExtTramp 77 + PhysDevExtTramp 78 + PhysDevExtTramp 79 + PhysDevExtTramp 80 + PhysDevExtTramp 81 + PhysDevExtTramp 82 + PhysDevExtTramp 83 + PhysDevExtTramp 84 + PhysDevExtTramp 85 + PhysDevExtTramp 86 + PhysDevExtTramp 87 + PhysDevExtTramp 88 + PhysDevExtTramp 89 + PhysDevExtTramp 90 + PhysDevExtTramp 91 + PhysDevExtTramp 92 + PhysDevExtTramp 93 + PhysDevExtTramp 94 + PhysDevExtTramp 95 + PhysDevExtTramp 96 + PhysDevExtTramp 97 + PhysDevExtTramp 98 + PhysDevExtTramp 99 + PhysDevExtTramp 100 + PhysDevExtTramp 101 + PhysDevExtTramp 102 + PhysDevExtTramp 103 + PhysDevExtTramp 104 + PhysDevExtTramp 105 + PhysDevExtTramp 106 + PhysDevExtTramp 107 + PhysDevExtTramp 108 + PhysDevExtTramp 109 + PhysDevExtTramp 110 + PhysDevExtTramp 111 + PhysDevExtTramp 112 + PhysDevExtTramp 113 + PhysDevExtTramp 114 + PhysDevExtTramp 115 + PhysDevExtTramp 116 + PhysDevExtTramp 117 + PhysDevExtTramp 118 + PhysDevExtTramp 119 + PhysDevExtTramp 120 + PhysDevExtTramp 121 + PhysDevExtTramp 122 + PhysDevExtTramp 123 + PhysDevExtTramp 124 + PhysDevExtTramp 125 + PhysDevExtTramp 126 + PhysDevExtTramp 127 + PhysDevExtTramp 128 + PhysDevExtTramp 129 + PhysDevExtTramp 130 + PhysDevExtTramp 131 + PhysDevExtTramp 132 + PhysDevExtTramp 133 + PhysDevExtTramp 134 + PhysDevExtTramp 135 + PhysDevExtTramp 136 + PhysDevExtTramp 137 + PhysDevExtTramp 138 + PhysDevExtTramp 139 + PhysDevExtTramp 140 + PhysDevExtTramp 141 + PhysDevExtTramp 142 + PhysDevExtTramp 143 + PhysDevExtTramp 144 + PhysDevExtTramp 145 + PhysDevExtTramp 146 + PhysDevExtTramp 147 + PhysDevExtTramp 148 + PhysDevExtTramp 149 + PhysDevExtTramp 150 + PhysDevExtTramp 151 + PhysDevExtTramp 152 + PhysDevExtTramp 153 + PhysDevExtTramp 154 + PhysDevExtTramp 155 + PhysDevExtTramp 156 + PhysDevExtTramp 157 + PhysDevExtTramp 158 + PhysDevExtTramp 159 + PhysDevExtTramp 160 + PhysDevExtTramp 161 + PhysDevExtTramp 162 + PhysDevExtTramp 163 + PhysDevExtTramp 164 + PhysDevExtTramp 165 + PhysDevExtTramp 166 + PhysDevExtTramp 167 + PhysDevExtTramp 168 + PhysDevExtTramp 169 + PhysDevExtTramp 170 + PhysDevExtTramp 171 + PhysDevExtTramp 172 + PhysDevExtTramp 173 + PhysDevExtTramp 174 + PhysDevExtTramp 175 + PhysDevExtTramp 176 + PhysDevExtTramp 177 + PhysDevExtTramp 178 + PhysDevExtTramp 179 + PhysDevExtTramp 180 + PhysDevExtTramp 181 + PhysDevExtTramp 182 + PhysDevExtTramp 183 + PhysDevExtTramp 184 + PhysDevExtTramp 185 + PhysDevExtTramp 186 + PhysDevExtTramp 187 + PhysDevExtTramp 188 + PhysDevExtTramp 189 + PhysDevExtTramp 190 + PhysDevExtTramp 191 + PhysDevExtTramp 192 + PhysDevExtTramp 193 + PhysDevExtTramp 194 + PhysDevExtTramp 195 + PhysDevExtTramp 196 + PhysDevExtTramp 197 + PhysDevExtTramp 198 + PhysDevExtTramp 199 + PhysDevExtTramp 200 + PhysDevExtTramp 201 + PhysDevExtTramp 202 + PhysDevExtTramp 203 + PhysDevExtTramp 204 + PhysDevExtTramp 205 + PhysDevExtTramp 206 + PhysDevExtTramp 207 + PhysDevExtTramp 208 + PhysDevExtTramp 209 + PhysDevExtTramp 210 + PhysDevExtTramp 211 + PhysDevExtTramp 212 + PhysDevExtTramp 213 + PhysDevExtTramp 214 + PhysDevExtTramp 215 + PhysDevExtTramp 216 + PhysDevExtTramp 217 + PhysDevExtTramp 218 + PhysDevExtTramp 219 + PhysDevExtTramp 220 + PhysDevExtTramp 221 + PhysDevExtTramp 222 + PhysDevExtTramp 223 + PhysDevExtTramp 224 + PhysDevExtTramp 225 + PhysDevExtTramp 226 + PhysDevExtTramp 227 + PhysDevExtTramp 228 + PhysDevExtTramp 229 + PhysDevExtTramp 230 + PhysDevExtTramp 231 + PhysDevExtTramp 232 + PhysDevExtTramp 233 + PhysDevExtTramp 234 + PhysDevExtTramp 235 + PhysDevExtTramp 236 + PhysDevExtTramp 237 + PhysDevExtTramp 238 + PhysDevExtTramp 239 + PhysDevExtTramp 240 + PhysDevExtTramp 241 + PhysDevExtTramp 242 + PhysDevExtTramp 243 + PhysDevExtTramp 244 + PhysDevExtTramp 245 + PhysDevExtTramp 246 + PhysDevExtTramp 247 + PhysDevExtTramp 248 + PhysDevExtTramp 249 + + PhysDevExtTermin 0 + PhysDevExtTermin 1 + PhysDevExtTermin 2 + PhysDevExtTermin 3 + PhysDevExtTermin 4 + PhysDevExtTermin 5 + PhysDevExtTermin 6 + PhysDevExtTermin 7 + PhysDevExtTermin 8 + PhysDevExtTermin 9 + PhysDevExtTermin 10 + PhysDevExtTermin 11 + PhysDevExtTermin 12 + PhysDevExtTermin 13 + PhysDevExtTermin 14 + PhysDevExtTermin 15 + PhysDevExtTermin 16 + PhysDevExtTermin 17 + PhysDevExtTermin 18 + PhysDevExtTermin 19 + PhysDevExtTermin 20 + PhysDevExtTermin 21 + PhysDevExtTermin 22 + PhysDevExtTermin 23 + PhysDevExtTermin 24 + PhysDevExtTermin 25 + PhysDevExtTermin 26 + PhysDevExtTermin 27 + PhysDevExtTermin 28 + PhysDevExtTermin 29 + PhysDevExtTermin 30 + PhysDevExtTermin 31 + PhysDevExtTermin 32 + PhysDevExtTermin 33 + PhysDevExtTermin 34 + PhysDevExtTermin 35 + PhysDevExtTermin 36 + PhysDevExtTermin 37 + PhysDevExtTermin 38 + PhysDevExtTermin 39 + PhysDevExtTermin 40 + PhysDevExtTermin 41 + PhysDevExtTermin 42 + PhysDevExtTermin 43 + PhysDevExtTermin 44 + PhysDevExtTermin 45 + PhysDevExtTermin 46 + PhysDevExtTermin 47 + PhysDevExtTermin 48 + PhysDevExtTermin 49 + PhysDevExtTermin 50 + PhysDevExtTermin 51 + PhysDevExtTermin 52 + PhysDevExtTermin 53 + PhysDevExtTermin 54 + PhysDevExtTermin 55 + PhysDevExtTermin 56 + PhysDevExtTermin 57 + PhysDevExtTermin 58 + PhysDevExtTermin 59 + PhysDevExtTermin 60 + PhysDevExtTermin 61 + PhysDevExtTermin 62 + PhysDevExtTermin 63 + PhysDevExtTermin 64 + PhysDevExtTermin 65 + PhysDevExtTermin 66 + PhysDevExtTermin 67 + PhysDevExtTermin 68 + PhysDevExtTermin 69 + PhysDevExtTermin 70 + PhysDevExtTermin 71 + PhysDevExtTermin 72 + PhysDevExtTermin 73 + PhysDevExtTermin 74 + PhysDevExtTermin 75 + PhysDevExtTermin 76 + PhysDevExtTermin 77 + PhysDevExtTermin 78 + PhysDevExtTermin 79 + PhysDevExtTermin 80 + PhysDevExtTermin 81 + PhysDevExtTermin 82 + PhysDevExtTermin 83 + PhysDevExtTermin 84 + PhysDevExtTermin 85 + PhysDevExtTermin 86 + PhysDevExtTermin 87 + PhysDevExtTermin 88 + PhysDevExtTermin 89 + PhysDevExtTermin 90 + PhysDevExtTermin 91 + PhysDevExtTermin 92 + PhysDevExtTermin 93 + PhysDevExtTermin 94 + PhysDevExtTermin 95 + PhysDevExtTermin 96 + PhysDevExtTermin 97 + PhysDevExtTermin 98 + PhysDevExtTermin 99 + PhysDevExtTermin 100 + PhysDevExtTermin 101 + PhysDevExtTermin 102 + PhysDevExtTermin 103 + PhysDevExtTermin 104 + PhysDevExtTermin 105 + PhysDevExtTermin 106 + PhysDevExtTermin 107 + PhysDevExtTermin 108 + PhysDevExtTermin 109 + PhysDevExtTermin 110 + PhysDevExtTermin 111 + PhysDevExtTermin 112 + PhysDevExtTermin 113 + PhysDevExtTermin 114 + PhysDevExtTermin 115 + PhysDevExtTermin 116 + PhysDevExtTermin 117 + PhysDevExtTermin 118 + PhysDevExtTermin 119 + PhysDevExtTermin 120 + PhysDevExtTermin 121 + PhysDevExtTermin 122 + PhysDevExtTermin 123 + PhysDevExtTermin 124 + PhysDevExtTermin 125 + PhysDevExtTermin 126 + PhysDevExtTermin 127 + PhysDevExtTermin 128 + PhysDevExtTermin 129 + PhysDevExtTermin 130 + PhysDevExtTermin 131 + PhysDevExtTermin 132 + PhysDevExtTermin 133 + PhysDevExtTermin 134 + PhysDevExtTermin 135 + PhysDevExtTermin 136 + PhysDevExtTermin 137 + PhysDevExtTermin 138 + PhysDevExtTermin 139 + PhysDevExtTermin 140 + PhysDevExtTermin 141 + PhysDevExtTermin 142 + PhysDevExtTermin 143 + PhysDevExtTermin 144 + PhysDevExtTermin 145 + PhysDevExtTermin 146 + PhysDevExtTermin 147 + PhysDevExtTermin 148 + PhysDevExtTermin 149 + PhysDevExtTermin 150 + PhysDevExtTermin 151 + PhysDevExtTermin 152 + PhysDevExtTermin 153 + PhysDevExtTermin 154 + PhysDevExtTermin 155 + PhysDevExtTermin 156 + PhysDevExtTermin 157 + PhysDevExtTermin 158 + PhysDevExtTermin 159 + PhysDevExtTermin 160 + PhysDevExtTermin 161 + PhysDevExtTermin 162 + PhysDevExtTermin 163 + PhysDevExtTermin 164 + PhysDevExtTermin 165 + PhysDevExtTermin 166 + PhysDevExtTermin 167 + PhysDevExtTermin 168 + PhysDevExtTermin 169 + PhysDevExtTermin 170 + PhysDevExtTermin 171 + PhysDevExtTermin 172 + PhysDevExtTermin 173 + PhysDevExtTermin 174 + PhysDevExtTermin 175 + PhysDevExtTermin 176 + PhysDevExtTermin 177 + PhysDevExtTermin 178 + PhysDevExtTermin 179 + PhysDevExtTermin 180 + PhysDevExtTermin 181 + PhysDevExtTermin 182 + PhysDevExtTermin 183 + PhysDevExtTermin 184 + PhysDevExtTermin 185 + PhysDevExtTermin 186 + PhysDevExtTermin 187 + PhysDevExtTermin 188 + PhysDevExtTermin 189 + PhysDevExtTermin 190 + PhysDevExtTermin 191 + PhysDevExtTermin 192 + PhysDevExtTermin 193 + PhysDevExtTermin 194 + PhysDevExtTermin 195 + PhysDevExtTermin 196 + PhysDevExtTermin 197 + PhysDevExtTermin 198 + PhysDevExtTermin 199 + PhysDevExtTermin 200 + PhysDevExtTermin 201 + PhysDevExtTermin 202 + PhysDevExtTermin 203 + PhysDevExtTermin 204 + PhysDevExtTermin 205 + PhysDevExtTermin 206 + PhysDevExtTermin 207 + PhysDevExtTermin 208 + PhysDevExtTermin 209 + PhysDevExtTermin 210 + PhysDevExtTermin 211 + PhysDevExtTermin 212 + PhysDevExtTermin 213 + PhysDevExtTermin 214 + PhysDevExtTermin 215 + PhysDevExtTermin 216 + PhysDevExtTermin 217 + PhysDevExtTermin 218 + PhysDevExtTermin 219 + PhysDevExtTermin 220 + PhysDevExtTermin 221 + PhysDevExtTermin 222 + PhysDevExtTermin 223 + PhysDevExtTermin 224 + PhysDevExtTermin 225 + PhysDevExtTermin 226 + PhysDevExtTermin 227 + PhysDevExtTermin 228 + PhysDevExtTermin 229 + PhysDevExtTermin 230 + PhysDevExtTermin 231 + PhysDevExtTermin 232 + PhysDevExtTermin 233 + PhysDevExtTermin 234 + PhysDevExtTermin 235 + PhysDevExtTermin 236 + PhysDevExtTermin 237 + PhysDevExtTermin 238 + PhysDevExtTermin 239 + PhysDevExtTermin 240 + PhysDevExtTermin 241 + PhysDevExtTermin 242 + PhysDevExtTermin 243 + PhysDevExtTermin 244 + PhysDevExtTermin 245 + PhysDevExtTermin 246 + PhysDevExtTermin 247 + PhysDevExtTermin 248 + PhysDevExtTermin 249 + + DevExtTramp 0 + DevExtTramp 1 + DevExtTramp 2 + DevExtTramp 3 + DevExtTramp 4 + DevExtTramp 5 + DevExtTramp 6 + DevExtTramp 7 + DevExtTramp 8 + DevExtTramp 9 + DevExtTramp 10 + DevExtTramp 11 + DevExtTramp 12 + DevExtTramp 13 + DevExtTramp 14 + DevExtTramp 15 + DevExtTramp 16 + DevExtTramp 17 + DevExtTramp 18 + DevExtTramp 19 + DevExtTramp 20 + DevExtTramp 21 + DevExtTramp 22 + DevExtTramp 23 + DevExtTramp 24 + DevExtTramp 25 + DevExtTramp 26 + DevExtTramp 27 + DevExtTramp 28 + DevExtTramp 29 + DevExtTramp 30 + DevExtTramp 31 + DevExtTramp 32 + DevExtTramp 33 + DevExtTramp 34 + DevExtTramp 35 + DevExtTramp 36 + DevExtTramp 37 + DevExtTramp 38 + DevExtTramp 39 + DevExtTramp 40 + DevExtTramp 41 + DevExtTramp 42 + DevExtTramp 43 + DevExtTramp 44 + DevExtTramp 45 + DevExtTramp 46 + DevExtTramp 47 + DevExtTramp 48 + DevExtTramp 49 + DevExtTramp 50 + DevExtTramp 51 + DevExtTramp 52 + DevExtTramp 53 + DevExtTramp 54 + DevExtTramp 55 + DevExtTramp 56 + DevExtTramp 57 + DevExtTramp 58 + DevExtTramp 59 + DevExtTramp 60 + DevExtTramp 61 + DevExtTramp 62 + DevExtTramp 63 + DevExtTramp 64 + DevExtTramp 65 + DevExtTramp 66 + DevExtTramp 67 + DevExtTramp 68 + DevExtTramp 69 + DevExtTramp 70 + DevExtTramp 71 + DevExtTramp 72 + DevExtTramp 73 + DevExtTramp 74 + DevExtTramp 75 + DevExtTramp 76 + DevExtTramp 77 + DevExtTramp 78 + DevExtTramp 79 + DevExtTramp 80 + DevExtTramp 81 + DevExtTramp 82 + DevExtTramp 83 + DevExtTramp 84 + DevExtTramp 85 + DevExtTramp 86 + DevExtTramp 87 + DevExtTramp 88 + DevExtTramp 89 + DevExtTramp 90 + DevExtTramp 91 + DevExtTramp 92 + DevExtTramp 93 + DevExtTramp 94 + DevExtTramp 95 + DevExtTramp 96 + DevExtTramp 97 + DevExtTramp 98 + DevExtTramp 99 + DevExtTramp 100 + DevExtTramp 101 + DevExtTramp 102 + DevExtTramp 103 + DevExtTramp 104 + DevExtTramp 105 + DevExtTramp 106 + DevExtTramp 107 + DevExtTramp 108 + DevExtTramp 109 + DevExtTramp 110 + DevExtTramp 111 + DevExtTramp 112 + DevExtTramp 113 + DevExtTramp 114 + DevExtTramp 115 + DevExtTramp 116 + DevExtTramp 117 + DevExtTramp 118 + DevExtTramp 119 + DevExtTramp 120 + DevExtTramp 121 + DevExtTramp 122 + DevExtTramp 123 + DevExtTramp 124 + DevExtTramp 125 + DevExtTramp 126 + DevExtTramp 127 + DevExtTramp 128 + DevExtTramp 129 + DevExtTramp 130 + DevExtTramp 131 + DevExtTramp 132 + DevExtTramp 133 + DevExtTramp 134 + DevExtTramp 135 + DevExtTramp 136 + DevExtTramp 137 + DevExtTramp 138 + DevExtTramp 139 + DevExtTramp 140 + DevExtTramp 141 + DevExtTramp 142 + DevExtTramp 143 + DevExtTramp 144 + DevExtTramp 145 + DevExtTramp 146 + DevExtTramp 147 + DevExtTramp 148 + DevExtTramp 149 + DevExtTramp 150 + DevExtTramp 151 + DevExtTramp 152 + DevExtTramp 153 + DevExtTramp 154 + DevExtTramp 155 + DevExtTramp 156 + DevExtTramp 157 + DevExtTramp 158 + DevExtTramp 159 + DevExtTramp 160 + DevExtTramp 161 + DevExtTramp 162 + DevExtTramp 163 + DevExtTramp 164 + DevExtTramp 165 + DevExtTramp 166 + DevExtTramp 167 + DevExtTramp 168 + DevExtTramp 169 + DevExtTramp 170 + DevExtTramp 171 + DevExtTramp 172 + DevExtTramp 173 + DevExtTramp 174 + DevExtTramp 175 + DevExtTramp 176 + DevExtTramp 177 + DevExtTramp 178 + DevExtTramp 179 + DevExtTramp 180 + DevExtTramp 181 + DevExtTramp 182 + DevExtTramp 183 + DevExtTramp 184 + DevExtTramp 185 + DevExtTramp 186 + DevExtTramp 187 + DevExtTramp 188 + DevExtTramp 189 + DevExtTramp 190 + DevExtTramp 191 + DevExtTramp 192 + DevExtTramp 193 + DevExtTramp 194 + DevExtTramp 195 + DevExtTramp 196 + DevExtTramp 197 + DevExtTramp 198 + DevExtTramp 199 + DevExtTramp 200 + DevExtTramp 201 + DevExtTramp 202 + DevExtTramp 203 + DevExtTramp 204 + DevExtTramp 205 + DevExtTramp 206 + DevExtTramp 207 + DevExtTramp 208 + DevExtTramp 209 + DevExtTramp 210 + DevExtTramp 211 + DevExtTramp 212 + DevExtTramp 213 + DevExtTramp 214 + DevExtTramp 215 + DevExtTramp 216 + DevExtTramp 217 + DevExtTramp 218 + DevExtTramp 219 + DevExtTramp 220 + DevExtTramp 221 + DevExtTramp 222 + DevExtTramp 223 + DevExtTramp 224 + DevExtTramp 225 + DevExtTramp 226 + DevExtTramp 227 + DevExtTramp 228 + DevExtTramp 229 + DevExtTramp 230 + DevExtTramp 231 + DevExtTramp 232 + DevExtTramp 233 + DevExtTramp 234 + DevExtTramp 235 + DevExtTramp 236 + DevExtTramp 237 + DevExtTramp 238 + DevExtTramp 239 + DevExtTramp 240 + DevExtTramp 241 + DevExtTramp 242 + DevExtTramp 243 + DevExtTramp 244 + DevExtTramp 245 + DevExtTramp 246 + DevExtTramp 247 + DevExtTramp 248 + DevExtTramp 249 diff --git a/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_x86.S b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_x86.S new file mode 100644 index 0000000000..5ee0205120 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_gas_x86.S @@ -0,0 +1,906 @@ +# +# Copyright (c) 2017-2023 The Khronos Group Inc. +# Copyright (c) 2017-2023 Valve Corporation +# Copyright (c) 2017-2023 LunarG, 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. +# +# Author: Lenny Komow +# Author: Charles Giessen +# + +# This code is used to pass on device (including physical device) extensions through the call chain. It must do this without +# creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a +# VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then +# jump to the next function in the call chain + +# The .hidden directive is only supported in ELF executables so in APPLE builds, the directive is removed + +#if defined(HAVE_CET_H) +#include +#else +#define _CET_ENDBR +#endif + +.intel_syntax noprefix +#include "gen_defines.asm" + +.ifdef X86_64 + +.macro PhysDevExtTramp num +.global vkPhysDevExtTramp\num +#if defined(__ELF__) +.hidden vkPhysDevExtTramp\num +#endif +vkPhysDevExtTramp\num: + _CET_ENDBR + mov rax, [rdi] + mov rdi, [rdi + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] + jmp [rax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num))] +.endm + +.macro PhysDevExtTermin num +.global vkPhysDevExtTermin\num +#if defined(__ELF__) +.hidden vkPhysDevExtTermin\num +#endif +vkPhysDevExtTermin\num: + _CET_ENDBR + mov rax, [rdi + ICD_TERM_OFFSET_PHYS_DEV_TERM] # Store the loader_icd_term* in rax + cmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))], 0 # Check if the next function in the chain is NULL + je terminError\num # Go to the error section if it is NULL + mov rdi, [rdi + PHYS_DEV_OFFSET_PHYS_DEV_TERM] # Load the unwrapped VkPhysicalDevice into the first arg + jmp [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))] # Jump to the next function in the chain +terminError\num: + sub rsp, 56 # Create the stack frame + mov rdi, [rax + INSTANCE_OFFSET_ICD_TERM] # Load the loader_instance into rdi (first arg) + lea rsi, [VULKAN_LOADER_ERROR_BIT] # Write the error logging bit to rsi (second arg) + xor rdx, rdx # Set rdx to zero (third arg) + lea rcx, [rip + termin_error_string] # Load the error string into rcx (fourth arg) + mov r8, [rdi + (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * \num))] # Load the func name into r8 (fifth arg) + call loader_log # Log the error message before we crash + add rsp, 56 # Clean up the stack frame + mov rax, 0 + jmp rax # Crash intentionally by jumping to address zero +.endm + +.macro DevExtTramp num +.global vkdev_ext\num +#if defined(__ELF__) +.hidden vkdev_ext\num +#endif +vkdev_ext\num: + _CET_ENDBR + mov rax, [rdi] # Dereference the handle to get the dispatch table + jmp [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num))] # Jump to the appropriate call chain +.endm + +.else + +.macro PhysDevExtTramp num +.global vkPhysDevExtTramp\num +#if defined(__ELF__) +.hidden vkPhysDevExtTramp\num +#endif +vkPhysDevExtTramp\num: + _CET_ENDBR + mov eax, [esp + 4] # Load the wrapped VkPhysicalDevice into eax + mov ecx, [eax + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] # Load the unwrapped VkPhysicalDevice into ecx + mov [esp + 4], ecx # Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack) + mov eax, [eax] # Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax + jmp [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num))] # Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax +.endm + +.macro PhysDevExtTermin num +.global vkPhysDevExtTermin\num +#if defined(__ELF__) +.hidden vkPhysDevExtTermin\num +#endif +vkPhysDevExtTermin\num: + _CET_ENDBR + mov ecx, [esp + 4] # Move the wrapped VkPhysicalDevice into ecx + mov eax, [ecx + ICD_TERM_OFFSET_PHYS_DEV_TERM] # Store the loader_icd_term* in eax + cmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))], 0 # Check if the next function in the chain is NULL + je terminError\num # Go to the error section if it is NULL + mov ecx, [ecx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] # Unwrap the VkPhysicalDevice in ecx + mov [esp + 4], ecx # Copy the unwrapped VkPhysicalDevice into the first arg + jmp [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))] # Jump to the next function in the chain +terminError\num: + mov eax, dword ptr [eax + INSTANCE_OFFSET_ICD_TERM] # Load the loader_instance into eax + push dword ptr [eax + (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * \num))] # Push the func name (fourth arg) + push 0 # Push zero (third arg) + push VULKAN_LOADER_ERROR_BIT # Push the error logging bit (second arg) + push eax # Push the loader_instance (first arg) + call loader_log_asm_function_not_supported # Log the error message before we crash + add esp, 20 # Clean up the args + mov eax, 0 + jmp eax # Crash intentionally by jumping to address zero +.endm + +.macro DevExtTramp num +.global vkdev_ext\num +#if defined(__ELF__) +.hidden vkdev_ext\num +#endif +vkdev_ext\num: + _CET_ENDBR + mov eax, dword ptr [esp + 4] # Dereference the handle to get the dispatch table + mov eax, dword ptr [eax] # Dereference the chain_device to get the loader_dispatch + jmp dword ptr [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num))] # Jump to the appropriate call chain +.endm + +.endif + +#if defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif + +.data + +termin_error_string: +.string "Function %s not supported for this physical device" + +.text + + PhysDevExtTramp 0 + PhysDevExtTramp 1 + PhysDevExtTramp 2 + PhysDevExtTramp 3 + PhysDevExtTramp 4 + PhysDevExtTramp 5 + PhysDevExtTramp 6 + PhysDevExtTramp 7 + PhysDevExtTramp 8 + PhysDevExtTramp 9 + PhysDevExtTramp 10 + PhysDevExtTramp 11 + PhysDevExtTramp 12 + PhysDevExtTramp 13 + PhysDevExtTramp 14 + PhysDevExtTramp 15 + PhysDevExtTramp 16 + PhysDevExtTramp 17 + PhysDevExtTramp 18 + PhysDevExtTramp 19 + PhysDevExtTramp 20 + PhysDevExtTramp 21 + PhysDevExtTramp 22 + PhysDevExtTramp 23 + PhysDevExtTramp 24 + PhysDevExtTramp 25 + PhysDevExtTramp 26 + PhysDevExtTramp 27 + PhysDevExtTramp 28 + PhysDevExtTramp 29 + PhysDevExtTramp 30 + PhysDevExtTramp 31 + PhysDevExtTramp 32 + PhysDevExtTramp 33 + PhysDevExtTramp 34 + PhysDevExtTramp 35 + PhysDevExtTramp 36 + PhysDevExtTramp 37 + PhysDevExtTramp 38 + PhysDevExtTramp 39 + PhysDevExtTramp 40 + PhysDevExtTramp 41 + PhysDevExtTramp 42 + PhysDevExtTramp 43 + PhysDevExtTramp 44 + PhysDevExtTramp 45 + PhysDevExtTramp 46 + PhysDevExtTramp 47 + PhysDevExtTramp 48 + PhysDevExtTramp 49 + PhysDevExtTramp 50 + PhysDevExtTramp 51 + PhysDevExtTramp 52 + PhysDevExtTramp 53 + PhysDevExtTramp 54 + PhysDevExtTramp 55 + PhysDevExtTramp 56 + PhysDevExtTramp 57 + PhysDevExtTramp 58 + PhysDevExtTramp 59 + PhysDevExtTramp 60 + PhysDevExtTramp 61 + PhysDevExtTramp 62 + PhysDevExtTramp 63 + PhysDevExtTramp 64 + PhysDevExtTramp 65 + PhysDevExtTramp 66 + PhysDevExtTramp 67 + PhysDevExtTramp 68 + PhysDevExtTramp 69 + PhysDevExtTramp 70 + PhysDevExtTramp 71 + PhysDevExtTramp 72 + PhysDevExtTramp 73 + PhysDevExtTramp 74 + PhysDevExtTramp 75 + PhysDevExtTramp 76 + PhysDevExtTramp 77 + PhysDevExtTramp 78 + PhysDevExtTramp 79 + PhysDevExtTramp 80 + PhysDevExtTramp 81 + PhysDevExtTramp 82 + PhysDevExtTramp 83 + PhysDevExtTramp 84 + PhysDevExtTramp 85 + PhysDevExtTramp 86 + PhysDevExtTramp 87 + PhysDevExtTramp 88 + PhysDevExtTramp 89 + PhysDevExtTramp 90 + PhysDevExtTramp 91 + PhysDevExtTramp 92 + PhysDevExtTramp 93 + PhysDevExtTramp 94 + PhysDevExtTramp 95 + PhysDevExtTramp 96 + PhysDevExtTramp 97 + PhysDevExtTramp 98 + PhysDevExtTramp 99 + PhysDevExtTramp 100 + PhysDevExtTramp 101 + PhysDevExtTramp 102 + PhysDevExtTramp 103 + PhysDevExtTramp 104 + PhysDevExtTramp 105 + PhysDevExtTramp 106 + PhysDevExtTramp 107 + PhysDevExtTramp 108 + PhysDevExtTramp 109 + PhysDevExtTramp 110 + PhysDevExtTramp 111 + PhysDevExtTramp 112 + PhysDevExtTramp 113 + PhysDevExtTramp 114 + PhysDevExtTramp 115 + PhysDevExtTramp 116 + PhysDevExtTramp 117 + PhysDevExtTramp 118 + PhysDevExtTramp 119 + PhysDevExtTramp 120 + PhysDevExtTramp 121 + PhysDevExtTramp 122 + PhysDevExtTramp 123 + PhysDevExtTramp 124 + PhysDevExtTramp 125 + PhysDevExtTramp 126 + PhysDevExtTramp 127 + PhysDevExtTramp 128 + PhysDevExtTramp 129 + PhysDevExtTramp 130 + PhysDevExtTramp 131 + PhysDevExtTramp 132 + PhysDevExtTramp 133 + PhysDevExtTramp 134 + PhysDevExtTramp 135 + PhysDevExtTramp 136 + PhysDevExtTramp 137 + PhysDevExtTramp 138 + PhysDevExtTramp 139 + PhysDevExtTramp 140 + PhysDevExtTramp 141 + PhysDevExtTramp 142 + PhysDevExtTramp 143 + PhysDevExtTramp 144 + PhysDevExtTramp 145 + PhysDevExtTramp 146 + PhysDevExtTramp 147 + PhysDevExtTramp 148 + PhysDevExtTramp 149 + PhysDevExtTramp 150 + PhysDevExtTramp 151 + PhysDevExtTramp 152 + PhysDevExtTramp 153 + PhysDevExtTramp 154 + PhysDevExtTramp 155 + PhysDevExtTramp 156 + PhysDevExtTramp 157 + PhysDevExtTramp 158 + PhysDevExtTramp 159 + PhysDevExtTramp 160 + PhysDevExtTramp 161 + PhysDevExtTramp 162 + PhysDevExtTramp 163 + PhysDevExtTramp 164 + PhysDevExtTramp 165 + PhysDevExtTramp 166 + PhysDevExtTramp 167 + PhysDevExtTramp 168 + PhysDevExtTramp 169 + PhysDevExtTramp 170 + PhysDevExtTramp 171 + PhysDevExtTramp 172 + PhysDevExtTramp 173 + PhysDevExtTramp 174 + PhysDevExtTramp 175 + PhysDevExtTramp 176 + PhysDevExtTramp 177 + PhysDevExtTramp 178 + PhysDevExtTramp 179 + PhysDevExtTramp 180 + PhysDevExtTramp 181 + PhysDevExtTramp 182 + PhysDevExtTramp 183 + PhysDevExtTramp 184 + PhysDevExtTramp 185 + PhysDevExtTramp 186 + PhysDevExtTramp 187 + PhysDevExtTramp 188 + PhysDevExtTramp 189 + PhysDevExtTramp 190 + PhysDevExtTramp 191 + PhysDevExtTramp 192 + PhysDevExtTramp 193 + PhysDevExtTramp 194 + PhysDevExtTramp 195 + PhysDevExtTramp 196 + PhysDevExtTramp 197 + PhysDevExtTramp 198 + PhysDevExtTramp 199 + PhysDevExtTramp 200 + PhysDevExtTramp 201 + PhysDevExtTramp 202 + PhysDevExtTramp 203 + PhysDevExtTramp 204 + PhysDevExtTramp 205 + PhysDevExtTramp 206 + PhysDevExtTramp 207 + PhysDevExtTramp 208 + PhysDevExtTramp 209 + PhysDevExtTramp 210 + PhysDevExtTramp 211 + PhysDevExtTramp 212 + PhysDevExtTramp 213 + PhysDevExtTramp 214 + PhysDevExtTramp 215 + PhysDevExtTramp 216 + PhysDevExtTramp 217 + PhysDevExtTramp 218 + PhysDevExtTramp 219 + PhysDevExtTramp 220 + PhysDevExtTramp 221 + PhysDevExtTramp 222 + PhysDevExtTramp 223 + PhysDevExtTramp 224 + PhysDevExtTramp 225 + PhysDevExtTramp 226 + PhysDevExtTramp 227 + PhysDevExtTramp 228 + PhysDevExtTramp 229 + PhysDevExtTramp 230 + PhysDevExtTramp 231 + PhysDevExtTramp 232 + PhysDevExtTramp 233 + PhysDevExtTramp 234 + PhysDevExtTramp 235 + PhysDevExtTramp 236 + PhysDevExtTramp 237 + PhysDevExtTramp 238 + PhysDevExtTramp 239 + PhysDevExtTramp 240 + PhysDevExtTramp 241 + PhysDevExtTramp 242 + PhysDevExtTramp 243 + PhysDevExtTramp 244 + PhysDevExtTramp 245 + PhysDevExtTramp 246 + PhysDevExtTramp 247 + PhysDevExtTramp 248 + PhysDevExtTramp 249 + + PhysDevExtTermin 0 + PhysDevExtTermin 1 + PhysDevExtTermin 2 + PhysDevExtTermin 3 + PhysDevExtTermin 4 + PhysDevExtTermin 5 + PhysDevExtTermin 6 + PhysDevExtTermin 7 + PhysDevExtTermin 8 + PhysDevExtTermin 9 + PhysDevExtTermin 10 + PhysDevExtTermin 11 + PhysDevExtTermin 12 + PhysDevExtTermin 13 + PhysDevExtTermin 14 + PhysDevExtTermin 15 + PhysDevExtTermin 16 + PhysDevExtTermin 17 + PhysDevExtTermin 18 + PhysDevExtTermin 19 + PhysDevExtTermin 20 + PhysDevExtTermin 21 + PhysDevExtTermin 22 + PhysDevExtTermin 23 + PhysDevExtTermin 24 + PhysDevExtTermin 25 + PhysDevExtTermin 26 + PhysDevExtTermin 27 + PhysDevExtTermin 28 + PhysDevExtTermin 29 + PhysDevExtTermin 30 + PhysDevExtTermin 31 + PhysDevExtTermin 32 + PhysDevExtTermin 33 + PhysDevExtTermin 34 + PhysDevExtTermin 35 + PhysDevExtTermin 36 + PhysDevExtTermin 37 + PhysDevExtTermin 38 + PhysDevExtTermin 39 + PhysDevExtTermin 40 + PhysDevExtTermin 41 + PhysDevExtTermin 42 + PhysDevExtTermin 43 + PhysDevExtTermin 44 + PhysDevExtTermin 45 + PhysDevExtTermin 46 + PhysDevExtTermin 47 + PhysDevExtTermin 48 + PhysDevExtTermin 49 + PhysDevExtTermin 50 + PhysDevExtTermin 51 + PhysDevExtTermin 52 + PhysDevExtTermin 53 + PhysDevExtTermin 54 + PhysDevExtTermin 55 + PhysDevExtTermin 56 + PhysDevExtTermin 57 + PhysDevExtTermin 58 + PhysDevExtTermin 59 + PhysDevExtTermin 60 + PhysDevExtTermin 61 + PhysDevExtTermin 62 + PhysDevExtTermin 63 + PhysDevExtTermin 64 + PhysDevExtTermin 65 + PhysDevExtTermin 66 + PhysDevExtTermin 67 + PhysDevExtTermin 68 + PhysDevExtTermin 69 + PhysDevExtTermin 70 + PhysDevExtTermin 71 + PhysDevExtTermin 72 + PhysDevExtTermin 73 + PhysDevExtTermin 74 + PhysDevExtTermin 75 + PhysDevExtTermin 76 + PhysDevExtTermin 77 + PhysDevExtTermin 78 + PhysDevExtTermin 79 + PhysDevExtTermin 80 + PhysDevExtTermin 81 + PhysDevExtTermin 82 + PhysDevExtTermin 83 + PhysDevExtTermin 84 + PhysDevExtTermin 85 + PhysDevExtTermin 86 + PhysDevExtTermin 87 + PhysDevExtTermin 88 + PhysDevExtTermin 89 + PhysDevExtTermin 90 + PhysDevExtTermin 91 + PhysDevExtTermin 92 + PhysDevExtTermin 93 + PhysDevExtTermin 94 + PhysDevExtTermin 95 + PhysDevExtTermin 96 + PhysDevExtTermin 97 + PhysDevExtTermin 98 + PhysDevExtTermin 99 + PhysDevExtTermin 100 + PhysDevExtTermin 101 + PhysDevExtTermin 102 + PhysDevExtTermin 103 + PhysDevExtTermin 104 + PhysDevExtTermin 105 + PhysDevExtTermin 106 + PhysDevExtTermin 107 + PhysDevExtTermin 108 + PhysDevExtTermin 109 + PhysDevExtTermin 110 + PhysDevExtTermin 111 + PhysDevExtTermin 112 + PhysDevExtTermin 113 + PhysDevExtTermin 114 + PhysDevExtTermin 115 + PhysDevExtTermin 116 + PhysDevExtTermin 117 + PhysDevExtTermin 118 + PhysDevExtTermin 119 + PhysDevExtTermin 120 + PhysDevExtTermin 121 + PhysDevExtTermin 122 + PhysDevExtTermin 123 + PhysDevExtTermin 124 + PhysDevExtTermin 125 + PhysDevExtTermin 126 + PhysDevExtTermin 127 + PhysDevExtTermin 128 + PhysDevExtTermin 129 + PhysDevExtTermin 130 + PhysDevExtTermin 131 + PhysDevExtTermin 132 + PhysDevExtTermin 133 + PhysDevExtTermin 134 + PhysDevExtTermin 135 + PhysDevExtTermin 136 + PhysDevExtTermin 137 + PhysDevExtTermin 138 + PhysDevExtTermin 139 + PhysDevExtTermin 140 + PhysDevExtTermin 141 + PhysDevExtTermin 142 + PhysDevExtTermin 143 + PhysDevExtTermin 144 + PhysDevExtTermin 145 + PhysDevExtTermin 146 + PhysDevExtTermin 147 + PhysDevExtTermin 148 + PhysDevExtTermin 149 + PhysDevExtTermin 150 + PhysDevExtTermin 151 + PhysDevExtTermin 152 + PhysDevExtTermin 153 + PhysDevExtTermin 154 + PhysDevExtTermin 155 + PhysDevExtTermin 156 + PhysDevExtTermin 157 + PhysDevExtTermin 158 + PhysDevExtTermin 159 + PhysDevExtTermin 160 + PhysDevExtTermin 161 + PhysDevExtTermin 162 + PhysDevExtTermin 163 + PhysDevExtTermin 164 + PhysDevExtTermin 165 + PhysDevExtTermin 166 + PhysDevExtTermin 167 + PhysDevExtTermin 168 + PhysDevExtTermin 169 + PhysDevExtTermin 170 + PhysDevExtTermin 171 + PhysDevExtTermin 172 + PhysDevExtTermin 173 + PhysDevExtTermin 174 + PhysDevExtTermin 175 + PhysDevExtTermin 176 + PhysDevExtTermin 177 + PhysDevExtTermin 178 + PhysDevExtTermin 179 + PhysDevExtTermin 180 + PhysDevExtTermin 181 + PhysDevExtTermin 182 + PhysDevExtTermin 183 + PhysDevExtTermin 184 + PhysDevExtTermin 185 + PhysDevExtTermin 186 + PhysDevExtTermin 187 + PhysDevExtTermin 188 + PhysDevExtTermin 189 + PhysDevExtTermin 190 + PhysDevExtTermin 191 + PhysDevExtTermin 192 + PhysDevExtTermin 193 + PhysDevExtTermin 194 + PhysDevExtTermin 195 + PhysDevExtTermin 196 + PhysDevExtTermin 197 + PhysDevExtTermin 198 + PhysDevExtTermin 199 + PhysDevExtTermin 200 + PhysDevExtTermin 201 + PhysDevExtTermin 202 + PhysDevExtTermin 203 + PhysDevExtTermin 204 + PhysDevExtTermin 205 + PhysDevExtTermin 206 + PhysDevExtTermin 207 + PhysDevExtTermin 208 + PhysDevExtTermin 209 + PhysDevExtTermin 210 + PhysDevExtTermin 211 + PhysDevExtTermin 212 + PhysDevExtTermin 213 + PhysDevExtTermin 214 + PhysDevExtTermin 215 + PhysDevExtTermin 216 + PhysDevExtTermin 217 + PhysDevExtTermin 218 + PhysDevExtTermin 219 + PhysDevExtTermin 220 + PhysDevExtTermin 221 + PhysDevExtTermin 222 + PhysDevExtTermin 223 + PhysDevExtTermin 224 + PhysDevExtTermin 225 + PhysDevExtTermin 226 + PhysDevExtTermin 227 + PhysDevExtTermin 228 + PhysDevExtTermin 229 + PhysDevExtTermin 230 + PhysDevExtTermin 231 + PhysDevExtTermin 232 + PhysDevExtTermin 233 + PhysDevExtTermin 234 + PhysDevExtTermin 235 + PhysDevExtTermin 236 + PhysDevExtTermin 237 + PhysDevExtTermin 238 + PhysDevExtTermin 239 + PhysDevExtTermin 240 + PhysDevExtTermin 241 + PhysDevExtTermin 242 + PhysDevExtTermin 243 + PhysDevExtTermin 244 + PhysDevExtTermin 245 + PhysDevExtTermin 246 + PhysDevExtTermin 247 + PhysDevExtTermin 248 + PhysDevExtTermin 249 + + DevExtTramp 0 + DevExtTramp 1 + DevExtTramp 2 + DevExtTramp 3 + DevExtTramp 4 + DevExtTramp 5 + DevExtTramp 6 + DevExtTramp 7 + DevExtTramp 8 + DevExtTramp 9 + DevExtTramp 10 + DevExtTramp 11 + DevExtTramp 12 + DevExtTramp 13 + DevExtTramp 14 + DevExtTramp 15 + DevExtTramp 16 + DevExtTramp 17 + DevExtTramp 18 + DevExtTramp 19 + DevExtTramp 20 + DevExtTramp 21 + DevExtTramp 22 + DevExtTramp 23 + DevExtTramp 24 + DevExtTramp 25 + DevExtTramp 26 + DevExtTramp 27 + DevExtTramp 28 + DevExtTramp 29 + DevExtTramp 30 + DevExtTramp 31 + DevExtTramp 32 + DevExtTramp 33 + DevExtTramp 34 + DevExtTramp 35 + DevExtTramp 36 + DevExtTramp 37 + DevExtTramp 38 + DevExtTramp 39 + DevExtTramp 40 + DevExtTramp 41 + DevExtTramp 42 + DevExtTramp 43 + DevExtTramp 44 + DevExtTramp 45 + DevExtTramp 46 + DevExtTramp 47 + DevExtTramp 48 + DevExtTramp 49 + DevExtTramp 50 + DevExtTramp 51 + DevExtTramp 52 + DevExtTramp 53 + DevExtTramp 54 + DevExtTramp 55 + DevExtTramp 56 + DevExtTramp 57 + DevExtTramp 58 + DevExtTramp 59 + DevExtTramp 60 + DevExtTramp 61 + DevExtTramp 62 + DevExtTramp 63 + DevExtTramp 64 + DevExtTramp 65 + DevExtTramp 66 + DevExtTramp 67 + DevExtTramp 68 + DevExtTramp 69 + DevExtTramp 70 + DevExtTramp 71 + DevExtTramp 72 + DevExtTramp 73 + DevExtTramp 74 + DevExtTramp 75 + DevExtTramp 76 + DevExtTramp 77 + DevExtTramp 78 + DevExtTramp 79 + DevExtTramp 80 + DevExtTramp 81 + DevExtTramp 82 + DevExtTramp 83 + DevExtTramp 84 + DevExtTramp 85 + DevExtTramp 86 + DevExtTramp 87 + DevExtTramp 88 + DevExtTramp 89 + DevExtTramp 90 + DevExtTramp 91 + DevExtTramp 92 + DevExtTramp 93 + DevExtTramp 94 + DevExtTramp 95 + DevExtTramp 96 + DevExtTramp 97 + DevExtTramp 98 + DevExtTramp 99 + DevExtTramp 100 + DevExtTramp 101 + DevExtTramp 102 + DevExtTramp 103 + DevExtTramp 104 + DevExtTramp 105 + DevExtTramp 106 + DevExtTramp 107 + DevExtTramp 108 + DevExtTramp 109 + DevExtTramp 110 + DevExtTramp 111 + DevExtTramp 112 + DevExtTramp 113 + DevExtTramp 114 + DevExtTramp 115 + DevExtTramp 116 + DevExtTramp 117 + DevExtTramp 118 + DevExtTramp 119 + DevExtTramp 120 + DevExtTramp 121 + DevExtTramp 122 + DevExtTramp 123 + DevExtTramp 124 + DevExtTramp 125 + DevExtTramp 126 + DevExtTramp 127 + DevExtTramp 128 + DevExtTramp 129 + DevExtTramp 130 + DevExtTramp 131 + DevExtTramp 132 + DevExtTramp 133 + DevExtTramp 134 + DevExtTramp 135 + DevExtTramp 136 + DevExtTramp 137 + DevExtTramp 138 + DevExtTramp 139 + DevExtTramp 140 + DevExtTramp 141 + DevExtTramp 142 + DevExtTramp 143 + DevExtTramp 144 + DevExtTramp 145 + DevExtTramp 146 + DevExtTramp 147 + DevExtTramp 148 + DevExtTramp 149 + DevExtTramp 150 + DevExtTramp 151 + DevExtTramp 152 + DevExtTramp 153 + DevExtTramp 154 + DevExtTramp 155 + DevExtTramp 156 + DevExtTramp 157 + DevExtTramp 158 + DevExtTramp 159 + DevExtTramp 160 + DevExtTramp 161 + DevExtTramp 162 + DevExtTramp 163 + DevExtTramp 164 + DevExtTramp 165 + DevExtTramp 166 + DevExtTramp 167 + DevExtTramp 168 + DevExtTramp 169 + DevExtTramp 170 + DevExtTramp 171 + DevExtTramp 172 + DevExtTramp 173 + DevExtTramp 174 + DevExtTramp 175 + DevExtTramp 176 + DevExtTramp 177 + DevExtTramp 178 + DevExtTramp 179 + DevExtTramp 180 + DevExtTramp 181 + DevExtTramp 182 + DevExtTramp 183 + DevExtTramp 184 + DevExtTramp 185 + DevExtTramp 186 + DevExtTramp 187 + DevExtTramp 188 + DevExtTramp 189 + DevExtTramp 190 + DevExtTramp 191 + DevExtTramp 192 + DevExtTramp 193 + DevExtTramp 194 + DevExtTramp 195 + DevExtTramp 196 + DevExtTramp 197 + DevExtTramp 198 + DevExtTramp 199 + DevExtTramp 200 + DevExtTramp 201 + DevExtTramp 202 + DevExtTramp 203 + DevExtTramp 204 + DevExtTramp 205 + DevExtTramp 206 + DevExtTramp 207 + DevExtTramp 208 + DevExtTramp 209 + DevExtTramp 210 + DevExtTramp 211 + DevExtTramp 212 + DevExtTramp 213 + DevExtTramp 214 + DevExtTramp 215 + DevExtTramp 216 + DevExtTramp 217 + DevExtTramp 218 + DevExtTramp 219 + DevExtTramp 220 + DevExtTramp 221 + DevExtTramp 222 + DevExtTramp 223 + DevExtTramp 224 + DevExtTramp 225 + DevExtTramp 226 + DevExtTramp 227 + DevExtTramp 228 + DevExtTramp 229 + DevExtTramp 230 + DevExtTramp 231 + DevExtTramp 232 + DevExtTramp 233 + DevExtTramp 234 + DevExtTramp 235 + DevExtTramp 236 + DevExtTramp 237 + DevExtTramp 238 + DevExtTramp 239 + DevExtTramp 240 + DevExtTramp 241 + DevExtTramp 242 + DevExtTramp 243 + DevExtTramp 244 + DevExtTramp 245 + DevExtTramp 246 + DevExtTramp 247 + DevExtTramp 248 + DevExtTramp 249 diff --git a/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_marmasm.asm b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_marmasm.asm new file mode 100644 index 0000000000..f2f352a17d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_marmasm.asm @@ -0,0 +1,896 @@ +; +; Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +; Copyright (c) 2024 Valve Corporation +; Copyright (c) 2024 LunarG, 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. +; +; Author: Eric Sullivan +; Author: Charles Giessen +; + +; This code is used to pass on device (including physical device) extensions through the call chain. It must do this without +; creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a +; VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then +; jump to the next function in the call chain + + + GET gen_defines.asm + + EXTERN loader_log_asm_function_not_supported + + IF AARCH_64==1 + + MACRO + PhysDevExtTramp $num + ALIGN + EXPORT vkPhysDevExtTramp$num [FUNC] +vkPhysDevExtTramp$num FUNCTION + ldr x9, [x0] ; Load the loader_instance_dispatch_table* into x9 + ldr x0, [x0, PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into x0 + mov x10, #(PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * $num)) ; Put the offset of the entry in the dispatch table for the function + ldr x11, [x9, x10] ; Load the address to branch to out of the dispatch table + br x11 ; Branch to the next member of the dispatch chain + ENDFUNC + MEND + + MACRO +$label PhysDevExtTermin $num + ALIGN + EXPORT vkPhysDevExtTermin$num [FUNC] +vkPhysDevExtTermin$num FUNCTION + ldr x9, [x0, ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Load the loader_icd_term* in x9 + mov x11, (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * $num)) ; Put the offset into the dispatch table in x11 + ldr x10, [x9, x11] ; Load the address of the next function in the dispatch chain + cbz x10, terminError$num ; Go to the error section if the next function in the chain is NULL + ldr x0, [x0, PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Unwrap the VkPhysicalDevice in x0 + br x10 ; Jump to the next function in the chain +terminError$num + mov x10, (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * $num)) ; Offset of the function name string in the instance + ldr x11, [x9, INSTANCE_OFFSET_ICD_TERM] ; Load the instance pointer + mov x0, x11 ; Vulkan instance pointer (first arg) + mov x1, VULKAN_LOADER_ERROR_BIT ; The error logging bit (second arg) + mov x2, #0 ; Zero (third arg) + ldr x3, [x11, x10] ; The function name (fourth arg) + bl loader_log_asm_function_not_supported ; Log the error message before we crash + mov x0, #0 + br x0 ; Crash intentionally by jumping to address zero + ENDFUNC + MEND + + MACRO + DevExtTramp $num + ALIGN + EXPORT vkdev_ext$num [FUNC] +vkdev_ext$num FUNCTION + ldr x9, [x0] ; Load the loader_instance_dispatch_table* into x9 + mov x10, (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * $num)) ; Offset of the desired function in the dispatch table + ldr x11, [x9, x10] ; Load the function address + br x11 + ENDFUNC + MEND + +; 32 bit (armhf) assembly + ELSE + + MACRO + PhysDevExtTramp $num + ALIGN + EXPORT vkPhysDevExtTramp$num [FUNC] +vkPhysDevExtTramp$num FUNCTION + ldr r4, [r0] ; Load the loader_instance_dispatch_table* into r4 + ldr r0, [r0, #PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into r0 + mov r5, #(PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * $num)) ; Put the offset of the entry in the dispatch table for the function + ldr r6, [r4, r5] ; Load the address to branch to out of the dispatch table + bx r6 ; Branch to the next member of the dispatch chain + ENDFUNC + MEND + + MACRO +$label PhysDevExtTermin $num + ALIGN + EXPORT vkPhysDevExtTermin$num [FUNC] +vkPhysDevExtTermin$num FUNCTION + ldr r4, [r0, #ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Load the loader_icd_term* in r4 + mov r6, #(DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * $num)) ; Put the offset into the dispatch table in r6 + ldr r5, [r4, r6] ; Load the address of the next function in the dispatch chain + cbz r5, terminError$num ; Go to the error section if the next function in the chain is NULL + ldr r0, [r0, #PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Unwrap the VkPhysicalDevice in r0 + bx r5 ; Jump to the next function in the chain +terminError$num + mov r5, #(FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * $num)) ; Offset of the function name string in the instance + ldr r6, [r4, #INSTANCE_OFFSET_ICD_TERM] ; Load the instance pointer + mov r0, r6 ; Vulkan instance pointer (first arg) + mov r1, #VULKAN_LOADER_ERROR_BIT ; The error logging bit (second arg) + mov r2, #0 ; Zero (third arg) + ldr r3, [r6, r5] ; The function name (fourth arg) + bl loader_log_asm_function_not_supported ; Log the error message before we crash + mov r0, #0 + bx r0 ; Crash intentionally by jumping to address zero + ENDFUNC + MEND + + MACRO + DevExtTramp $num + ALIGN + EXPORT vkdev_ext$num [FUNC] +vkdev_ext$num FUNCTION + ldr r4, [r0] ; Load the loader_instance_dispatch_table* into r4 + mov r5, #(EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * $num)) ; Offset of the desired function in the dispatch table + ldr r6, [r4, r5] ; Load the function address + bx r6 + ENDFUNC + MEND + + ENDIF + + AREA terminator_string_data, DATA, READONLY + +termin_error_string DCB "Function %s not supported for this physical device", 0 + + AREA UnknownFunctionImpl, CODE, READONLY + + PhysDevExtTramp 0 + PhysDevExtTramp 1 + PhysDevExtTramp 2 + PhysDevExtTramp 3 + PhysDevExtTramp 4 + PhysDevExtTramp 5 + PhysDevExtTramp 6 + PhysDevExtTramp 7 + PhysDevExtTramp 8 + PhysDevExtTramp 9 + PhysDevExtTramp 10 + PhysDevExtTramp 11 + PhysDevExtTramp 12 + PhysDevExtTramp 13 + PhysDevExtTramp 14 + PhysDevExtTramp 15 + PhysDevExtTramp 16 + PhysDevExtTramp 17 + PhysDevExtTramp 18 + PhysDevExtTramp 19 + PhysDevExtTramp 20 + PhysDevExtTramp 21 + PhysDevExtTramp 22 + PhysDevExtTramp 23 + PhysDevExtTramp 24 + PhysDevExtTramp 25 + PhysDevExtTramp 26 + PhysDevExtTramp 27 + PhysDevExtTramp 28 + PhysDevExtTramp 29 + PhysDevExtTramp 30 + PhysDevExtTramp 31 + PhysDevExtTramp 32 + PhysDevExtTramp 33 + PhysDevExtTramp 34 + PhysDevExtTramp 35 + PhysDevExtTramp 36 + PhysDevExtTramp 37 + PhysDevExtTramp 38 + PhysDevExtTramp 39 + PhysDevExtTramp 40 + PhysDevExtTramp 41 + PhysDevExtTramp 42 + PhysDevExtTramp 43 + PhysDevExtTramp 44 + PhysDevExtTramp 45 + PhysDevExtTramp 46 + PhysDevExtTramp 47 + PhysDevExtTramp 48 + PhysDevExtTramp 49 + PhysDevExtTramp 50 + PhysDevExtTramp 51 + PhysDevExtTramp 52 + PhysDevExtTramp 53 + PhysDevExtTramp 54 + PhysDevExtTramp 55 + PhysDevExtTramp 56 + PhysDevExtTramp 57 + PhysDevExtTramp 58 + PhysDevExtTramp 59 + PhysDevExtTramp 60 + PhysDevExtTramp 61 + PhysDevExtTramp 62 + PhysDevExtTramp 63 + PhysDevExtTramp 64 + PhysDevExtTramp 65 + PhysDevExtTramp 66 + PhysDevExtTramp 67 + PhysDevExtTramp 68 + PhysDevExtTramp 69 + PhysDevExtTramp 70 + PhysDevExtTramp 71 + PhysDevExtTramp 72 + PhysDevExtTramp 73 + PhysDevExtTramp 74 + PhysDevExtTramp 75 + PhysDevExtTramp 76 + PhysDevExtTramp 77 + PhysDevExtTramp 78 + PhysDevExtTramp 79 + PhysDevExtTramp 80 + PhysDevExtTramp 81 + PhysDevExtTramp 82 + PhysDevExtTramp 83 + PhysDevExtTramp 84 + PhysDevExtTramp 85 + PhysDevExtTramp 86 + PhysDevExtTramp 87 + PhysDevExtTramp 88 + PhysDevExtTramp 89 + PhysDevExtTramp 90 + PhysDevExtTramp 91 + PhysDevExtTramp 92 + PhysDevExtTramp 93 + PhysDevExtTramp 94 + PhysDevExtTramp 95 + PhysDevExtTramp 96 + PhysDevExtTramp 97 + PhysDevExtTramp 98 + PhysDevExtTramp 99 + PhysDevExtTramp 100 + PhysDevExtTramp 101 + PhysDevExtTramp 102 + PhysDevExtTramp 103 + PhysDevExtTramp 104 + PhysDevExtTramp 105 + PhysDevExtTramp 106 + PhysDevExtTramp 107 + PhysDevExtTramp 108 + PhysDevExtTramp 109 + PhysDevExtTramp 110 + PhysDevExtTramp 111 + PhysDevExtTramp 112 + PhysDevExtTramp 113 + PhysDevExtTramp 114 + PhysDevExtTramp 115 + PhysDevExtTramp 116 + PhysDevExtTramp 117 + PhysDevExtTramp 118 + PhysDevExtTramp 119 + PhysDevExtTramp 120 + PhysDevExtTramp 121 + PhysDevExtTramp 122 + PhysDevExtTramp 123 + PhysDevExtTramp 124 + PhysDevExtTramp 125 + PhysDevExtTramp 126 + PhysDevExtTramp 127 + PhysDevExtTramp 128 + PhysDevExtTramp 129 + PhysDevExtTramp 130 + PhysDevExtTramp 131 + PhysDevExtTramp 132 + PhysDevExtTramp 133 + PhysDevExtTramp 134 + PhysDevExtTramp 135 + PhysDevExtTramp 136 + PhysDevExtTramp 137 + PhysDevExtTramp 138 + PhysDevExtTramp 139 + PhysDevExtTramp 140 + PhysDevExtTramp 141 + PhysDevExtTramp 142 + PhysDevExtTramp 143 + PhysDevExtTramp 144 + PhysDevExtTramp 145 + PhysDevExtTramp 146 + PhysDevExtTramp 147 + PhysDevExtTramp 148 + PhysDevExtTramp 149 + PhysDevExtTramp 150 + PhysDevExtTramp 151 + PhysDevExtTramp 152 + PhysDevExtTramp 153 + PhysDevExtTramp 154 + PhysDevExtTramp 155 + PhysDevExtTramp 156 + PhysDevExtTramp 157 + PhysDevExtTramp 158 + PhysDevExtTramp 159 + PhysDevExtTramp 160 + PhysDevExtTramp 161 + PhysDevExtTramp 162 + PhysDevExtTramp 163 + PhysDevExtTramp 164 + PhysDevExtTramp 165 + PhysDevExtTramp 166 + PhysDevExtTramp 167 + PhysDevExtTramp 168 + PhysDevExtTramp 169 + PhysDevExtTramp 170 + PhysDevExtTramp 171 + PhysDevExtTramp 172 + PhysDevExtTramp 173 + PhysDevExtTramp 174 + PhysDevExtTramp 175 + PhysDevExtTramp 176 + PhysDevExtTramp 177 + PhysDevExtTramp 178 + PhysDevExtTramp 179 + PhysDevExtTramp 180 + PhysDevExtTramp 181 + PhysDevExtTramp 182 + PhysDevExtTramp 183 + PhysDevExtTramp 184 + PhysDevExtTramp 185 + PhysDevExtTramp 186 + PhysDevExtTramp 187 + PhysDevExtTramp 188 + PhysDevExtTramp 189 + PhysDevExtTramp 190 + PhysDevExtTramp 191 + PhysDevExtTramp 192 + PhysDevExtTramp 193 + PhysDevExtTramp 194 + PhysDevExtTramp 195 + PhysDevExtTramp 196 + PhysDevExtTramp 197 + PhysDevExtTramp 198 + PhysDevExtTramp 199 + PhysDevExtTramp 200 + PhysDevExtTramp 201 + PhysDevExtTramp 202 + PhysDevExtTramp 203 + PhysDevExtTramp 204 + PhysDevExtTramp 205 + PhysDevExtTramp 206 + PhysDevExtTramp 207 + PhysDevExtTramp 208 + PhysDevExtTramp 209 + PhysDevExtTramp 210 + PhysDevExtTramp 211 + PhysDevExtTramp 212 + PhysDevExtTramp 213 + PhysDevExtTramp 214 + PhysDevExtTramp 215 + PhysDevExtTramp 216 + PhysDevExtTramp 217 + PhysDevExtTramp 218 + PhysDevExtTramp 219 + PhysDevExtTramp 220 + PhysDevExtTramp 221 + PhysDevExtTramp 222 + PhysDevExtTramp 223 + PhysDevExtTramp 224 + PhysDevExtTramp 225 + PhysDevExtTramp 226 + PhysDevExtTramp 227 + PhysDevExtTramp 228 + PhysDevExtTramp 229 + PhysDevExtTramp 230 + PhysDevExtTramp 231 + PhysDevExtTramp 232 + PhysDevExtTramp 233 + PhysDevExtTramp 234 + PhysDevExtTramp 235 + PhysDevExtTramp 236 + PhysDevExtTramp 237 + PhysDevExtTramp 238 + PhysDevExtTramp 239 + PhysDevExtTramp 240 + PhysDevExtTramp 241 + PhysDevExtTramp 242 + PhysDevExtTramp 243 + PhysDevExtTramp 244 + PhysDevExtTramp 245 + PhysDevExtTramp 246 + PhysDevExtTramp 247 + PhysDevExtTramp 248 + PhysDevExtTramp 249 + + PhysDevExtTermin 0 + PhysDevExtTermin 1 + PhysDevExtTermin 2 + PhysDevExtTermin 3 + PhysDevExtTermin 4 + PhysDevExtTermin 5 + PhysDevExtTermin 6 + PhysDevExtTermin 7 + PhysDevExtTermin 8 + PhysDevExtTermin 9 + PhysDevExtTermin 10 + PhysDevExtTermin 11 + PhysDevExtTermin 12 + PhysDevExtTermin 13 + PhysDevExtTermin 14 + PhysDevExtTermin 15 + PhysDevExtTermin 16 + PhysDevExtTermin 17 + PhysDevExtTermin 18 + PhysDevExtTermin 19 + PhysDevExtTermin 20 + PhysDevExtTermin 21 + PhysDevExtTermin 22 + PhysDevExtTermin 23 + PhysDevExtTermin 24 + PhysDevExtTermin 25 + PhysDevExtTermin 26 + PhysDevExtTermin 27 + PhysDevExtTermin 28 + PhysDevExtTermin 29 + PhysDevExtTermin 30 + PhysDevExtTermin 31 + PhysDevExtTermin 32 + PhysDevExtTermin 33 + PhysDevExtTermin 34 + PhysDevExtTermin 35 + PhysDevExtTermin 36 + PhysDevExtTermin 37 + PhysDevExtTermin 38 + PhysDevExtTermin 39 + PhysDevExtTermin 40 + PhysDevExtTermin 41 + PhysDevExtTermin 42 + PhysDevExtTermin 43 + PhysDevExtTermin 44 + PhysDevExtTermin 45 + PhysDevExtTermin 46 + PhysDevExtTermin 47 + PhysDevExtTermin 48 + PhysDevExtTermin 49 + PhysDevExtTermin 50 + PhysDevExtTermin 51 + PhysDevExtTermin 52 + PhysDevExtTermin 53 + PhysDevExtTermin 54 + PhysDevExtTermin 55 + PhysDevExtTermin 56 + PhysDevExtTermin 57 + PhysDevExtTermin 58 + PhysDevExtTermin 59 + PhysDevExtTermin 60 + PhysDevExtTermin 61 + PhysDevExtTermin 62 + PhysDevExtTermin 63 + PhysDevExtTermin 64 + PhysDevExtTermin 65 + PhysDevExtTermin 66 + PhysDevExtTermin 67 + PhysDevExtTermin 68 + PhysDevExtTermin 69 + PhysDevExtTermin 70 + PhysDevExtTermin 71 + PhysDevExtTermin 72 + PhysDevExtTermin 73 + PhysDevExtTermin 74 + PhysDevExtTermin 75 + PhysDevExtTermin 76 + PhysDevExtTermin 77 + PhysDevExtTermin 78 + PhysDevExtTermin 79 + PhysDevExtTermin 80 + PhysDevExtTermin 81 + PhysDevExtTermin 82 + PhysDevExtTermin 83 + PhysDevExtTermin 84 + PhysDevExtTermin 85 + PhysDevExtTermin 86 + PhysDevExtTermin 87 + PhysDevExtTermin 88 + PhysDevExtTermin 89 + PhysDevExtTermin 90 + PhysDevExtTermin 91 + PhysDevExtTermin 92 + PhysDevExtTermin 93 + PhysDevExtTermin 94 + PhysDevExtTermin 95 + PhysDevExtTermin 96 + PhysDevExtTermin 97 + PhysDevExtTermin 98 + PhysDevExtTermin 99 + PhysDevExtTermin 100 + PhysDevExtTermin 101 + PhysDevExtTermin 102 + PhysDevExtTermin 103 + PhysDevExtTermin 104 + PhysDevExtTermin 105 + PhysDevExtTermin 106 + PhysDevExtTermin 107 + PhysDevExtTermin 108 + PhysDevExtTermin 109 + PhysDevExtTermin 110 + PhysDevExtTermin 111 + PhysDevExtTermin 112 + PhysDevExtTermin 113 + PhysDevExtTermin 114 + PhysDevExtTermin 115 + PhysDevExtTermin 116 + PhysDevExtTermin 117 + PhysDevExtTermin 118 + PhysDevExtTermin 119 + PhysDevExtTermin 120 + PhysDevExtTermin 121 + PhysDevExtTermin 122 + PhysDevExtTermin 123 + PhysDevExtTermin 124 + PhysDevExtTermin 125 + PhysDevExtTermin 126 + PhysDevExtTermin 127 + PhysDevExtTermin 128 + PhysDevExtTermin 129 + PhysDevExtTermin 130 + PhysDevExtTermin 131 + PhysDevExtTermin 132 + PhysDevExtTermin 133 + PhysDevExtTermin 134 + PhysDevExtTermin 135 + PhysDevExtTermin 136 + PhysDevExtTermin 137 + PhysDevExtTermin 138 + PhysDevExtTermin 139 + PhysDevExtTermin 140 + PhysDevExtTermin 141 + PhysDevExtTermin 142 + PhysDevExtTermin 143 + PhysDevExtTermin 144 + PhysDevExtTermin 145 + PhysDevExtTermin 146 + PhysDevExtTermin 147 + PhysDevExtTermin 148 + PhysDevExtTermin 149 + PhysDevExtTermin 150 + PhysDevExtTermin 151 + PhysDevExtTermin 152 + PhysDevExtTermin 153 + PhysDevExtTermin 154 + PhysDevExtTermin 155 + PhysDevExtTermin 156 + PhysDevExtTermin 157 + PhysDevExtTermin 158 + PhysDevExtTermin 159 + PhysDevExtTermin 160 + PhysDevExtTermin 161 + PhysDevExtTermin 162 + PhysDevExtTermin 163 + PhysDevExtTermin 164 + PhysDevExtTermin 165 + PhysDevExtTermin 166 + PhysDevExtTermin 167 + PhysDevExtTermin 168 + PhysDevExtTermin 169 + PhysDevExtTermin 170 + PhysDevExtTermin 171 + PhysDevExtTermin 172 + PhysDevExtTermin 173 + PhysDevExtTermin 174 + PhysDevExtTermin 175 + PhysDevExtTermin 176 + PhysDevExtTermin 177 + PhysDevExtTermin 178 + PhysDevExtTermin 179 + PhysDevExtTermin 180 + PhysDevExtTermin 181 + PhysDevExtTermin 182 + PhysDevExtTermin 183 + PhysDevExtTermin 184 + PhysDevExtTermin 185 + PhysDevExtTermin 186 + PhysDevExtTermin 187 + PhysDevExtTermin 188 + PhysDevExtTermin 189 + PhysDevExtTermin 190 + PhysDevExtTermin 191 + PhysDevExtTermin 192 + PhysDevExtTermin 193 + PhysDevExtTermin 194 + PhysDevExtTermin 195 + PhysDevExtTermin 196 + PhysDevExtTermin 197 + PhysDevExtTermin 198 + PhysDevExtTermin 199 + PhysDevExtTermin 200 + PhysDevExtTermin 201 + PhysDevExtTermin 202 + PhysDevExtTermin 203 + PhysDevExtTermin 204 + PhysDevExtTermin 205 + PhysDevExtTermin 206 + PhysDevExtTermin 207 + PhysDevExtTermin 208 + PhysDevExtTermin 209 + PhysDevExtTermin 210 + PhysDevExtTermin 211 + PhysDevExtTermin 212 + PhysDevExtTermin 213 + PhysDevExtTermin 214 + PhysDevExtTermin 215 + PhysDevExtTermin 216 + PhysDevExtTermin 217 + PhysDevExtTermin 218 + PhysDevExtTermin 219 + PhysDevExtTermin 220 + PhysDevExtTermin 221 + PhysDevExtTermin 222 + PhysDevExtTermin 223 + PhysDevExtTermin 224 + PhysDevExtTermin 225 + PhysDevExtTermin 226 + PhysDevExtTermin 227 + PhysDevExtTermin 228 + PhysDevExtTermin 229 + PhysDevExtTermin 230 + PhysDevExtTermin 231 + PhysDevExtTermin 232 + PhysDevExtTermin 233 + PhysDevExtTermin 234 + PhysDevExtTermin 235 + PhysDevExtTermin 236 + PhysDevExtTermin 237 + PhysDevExtTermin 238 + PhysDevExtTermin 239 + PhysDevExtTermin 240 + PhysDevExtTermin 241 + PhysDevExtTermin 242 + PhysDevExtTermin 243 + PhysDevExtTermin 244 + PhysDevExtTermin 245 + PhysDevExtTermin 246 + PhysDevExtTermin 247 + PhysDevExtTermin 248 + PhysDevExtTermin 249 + + DevExtTramp 0 + DevExtTramp 1 + DevExtTramp 2 + DevExtTramp 3 + DevExtTramp 4 + DevExtTramp 5 + DevExtTramp 6 + DevExtTramp 7 + DevExtTramp 8 + DevExtTramp 9 + DevExtTramp 10 + DevExtTramp 11 + DevExtTramp 12 + DevExtTramp 13 + DevExtTramp 14 + DevExtTramp 15 + DevExtTramp 16 + DevExtTramp 17 + DevExtTramp 18 + DevExtTramp 19 + DevExtTramp 20 + DevExtTramp 21 + DevExtTramp 22 + DevExtTramp 23 + DevExtTramp 24 + DevExtTramp 25 + DevExtTramp 26 + DevExtTramp 27 + DevExtTramp 28 + DevExtTramp 29 + DevExtTramp 30 + DevExtTramp 31 + DevExtTramp 32 + DevExtTramp 33 + DevExtTramp 34 + DevExtTramp 35 + DevExtTramp 36 + DevExtTramp 37 + DevExtTramp 38 + DevExtTramp 39 + DevExtTramp 40 + DevExtTramp 41 + DevExtTramp 42 + DevExtTramp 43 + DevExtTramp 44 + DevExtTramp 45 + DevExtTramp 46 + DevExtTramp 47 + DevExtTramp 48 + DevExtTramp 49 + DevExtTramp 50 + DevExtTramp 51 + DevExtTramp 52 + DevExtTramp 53 + DevExtTramp 54 + DevExtTramp 55 + DevExtTramp 56 + DevExtTramp 57 + DevExtTramp 58 + DevExtTramp 59 + DevExtTramp 60 + DevExtTramp 61 + DevExtTramp 62 + DevExtTramp 63 + DevExtTramp 64 + DevExtTramp 65 + DevExtTramp 66 + DevExtTramp 67 + DevExtTramp 68 + DevExtTramp 69 + DevExtTramp 70 + DevExtTramp 71 + DevExtTramp 72 + DevExtTramp 73 + DevExtTramp 74 + DevExtTramp 75 + DevExtTramp 76 + DevExtTramp 77 + DevExtTramp 78 + DevExtTramp 79 + DevExtTramp 80 + DevExtTramp 81 + DevExtTramp 82 + DevExtTramp 83 + DevExtTramp 84 + DevExtTramp 85 + DevExtTramp 86 + DevExtTramp 87 + DevExtTramp 88 + DevExtTramp 89 + DevExtTramp 90 + DevExtTramp 91 + DevExtTramp 92 + DevExtTramp 93 + DevExtTramp 94 + DevExtTramp 95 + DevExtTramp 96 + DevExtTramp 97 + DevExtTramp 98 + DevExtTramp 99 + DevExtTramp 100 + DevExtTramp 101 + DevExtTramp 102 + DevExtTramp 103 + DevExtTramp 104 + DevExtTramp 105 + DevExtTramp 106 + DevExtTramp 107 + DevExtTramp 108 + DevExtTramp 109 + DevExtTramp 110 + DevExtTramp 111 + DevExtTramp 112 + DevExtTramp 113 + DevExtTramp 114 + DevExtTramp 115 + DevExtTramp 116 + DevExtTramp 117 + DevExtTramp 118 + DevExtTramp 119 + DevExtTramp 120 + DevExtTramp 121 + DevExtTramp 122 + DevExtTramp 123 + DevExtTramp 124 + DevExtTramp 125 + DevExtTramp 126 + DevExtTramp 127 + DevExtTramp 128 + DevExtTramp 129 + DevExtTramp 130 + DevExtTramp 131 + DevExtTramp 132 + DevExtTramp 133 + DevExtTramp 134 + DevExtTramp 135 + DevExtTramp 136 + DevExtTramp 137 + DevExtTramp 138 + DevExtTramp 139 + DevExtTramp 140 + DevExtTramp 141 + DevExtTramp 142 + DevExtTramp 143 + DevExtTramp 144 + DevExtTramp 145 + DevExtTramp 146 + DevExtTramp 147 + DevExtTramp 148 + DevExtTramp 149 + DevExtTramp 150 + DevExtTramp 151 + DevExtTramp 152 + DevExtTramp 153 + DevExtTramp 154 + DevExtTramp 155 + DevExtTramp 156 + DevExtTramp 157 + DevExtTramp 158 + DevExtTramp 159 + DevExtTramp 160 + DevExtTramp 161 + DevExtTramp 162 + DevExtTramp 163 + DevExtTramp 164 + DevExtTramp 165 + DevExtTramp 166 + DevExtTramp 167 + DevExtTramp 168 + DevExtTramp 169 + DevExtTramp 170 + DevExtTramp 171 + DevExtTramp 172 + DevExtTramp 173 + DevExtTramp 174 + DevExtTramp 175 + DevExtTramp 176 + DevExtTramp 177 + DevExtTramp 178 + DevExtTramp 179 + DevExtTramp 180 + DevExtTramp 181 + DevExtTramp 182 + DevExtTramp 183 + DevExtTramp 184 + DevExtTramp 185 + DevExtTramp 186 + DevExtTramp 187 + DevExtTramp 188 + DevExtTramp 189 + DevExtTramp 190 + DevExtTramp 191 + DevExtTramp 192 + DevExtTramp 193 + DevExtTramp 194 + DevExtTramp 195 + DevExtTramp 196 + DevExtTramp 197 + DevExtTramp 198 + DevExtTramp 199 + DevExtTramp 200 + DevExtTramp 201 + DevExtTramp 202 + DevExtTramp 203 + DevExtTramp 204 + DevExtTramp 205 + DevExtTramp 206 + DevExtTramp 207 + DevExtTramp 208 + DevExtTramp 209 + DevExtTramp 210 + DevExtTramp 211 + DevExtTramp 212 + DevExtTramp 213 + DevExtTramp 214 + DevExtTramp 215 + DevExtTramp 216 + DevExtTramp 217 + DevExtTramp 218 + DevExtTramp 219 + DevExtTramp 220 + DevExtTramp 221 + DevExtTramp 222 + DevExtTramp 223 + DevExtTramp 224 + DevExtTramp 225 + DevExtTramp 226 + DevExtTramp 227 + DevExtTramp 228 + DevExtTramp 229 + DevExtTramp 230 + DevExtTramp 231 + DevExtTramp 232 + DevExtTramp 233 + DevExtTramp 234 + DevExtTramp 235 + DevExtTramp 236 + DevExtTramp 237 + DevExtTramp 238 + DevExtTramp 239 + DevExtTramp 240 + DevExtTramp 241 + DevExtTramp 242 + DevExtTramp 243 + DevExtTramp 244 + DevExtTramp 245 + DevExtTramp 246 + DevExtTramp 247 + DevExtTramp 248 + DevExtTramp 249 + + END diff --git a/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_masm.asm b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_masm.asm new file mode 100644 index 0000000000..46d13de473 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/unknown_ext_chain_masm.asm @@ -0,0 +1,885 @@ +; +; Copyright (c) 2017-2021 The Khronos Group Inc. +; Copyright (c) 2017-2021 Valve Corporation +; Copyright (c) 2017-2021 LunarG, 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. +; +; Author: Lenny Komow +; Author: Charles Giessen +; + +; This code is used to pass on device (including physical device) extensions through the call chain. It must do this without +; creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a +; VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then +; jump to the next function in the call chain + +; Codegen defines a number of values, chiefly offsets of members within structs and sizes of data types within gen_defines.asm. +; Struct member offsets are defined in the format "XX_OFFSET_YY" where XX indicates the member within the struct and YY indicates +; the struct type that it is a member of. Data type sizes are defined in the format "XX_SIZE" where XX indicates the data type. +INCLUDE gen_defines.asm + +; 64-bit values and macro +IFDEF rax + +PhysDevExtTramp macro num:req +public vkPhysDevExtTramp&num& +vkPhysDevExtTramp&num&: + mov rax, qword ptr [rcx] ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in rax + mov rcx, qword ptr [rcx + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into rcx + jmp qword ptr [rax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args in other registers +endm + +PhysDevExtTermin macro num +public vkPhysDevExtTermin&num& +vkPhysDevExtTermin&num&: + mov rax, qword ptr [rcx + ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Store the loader_icd_term* in rax + cmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))], 0 ; Check if the next function in the chain is NULL + je terminError&num& ; Go to the error section if it is NULL + mov rcx, qword ptr [rcx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Load the unwrapped VkPhysicalDevice into the first arg + jmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))] ; Jump to the next function in the chain +terminError&num&: + sub rsp, 56 ; Create the stack frame + mov rcx, qword ptr [rax + INSTANCE_OFFSET_ICD_TERM] ; Load the loader_instance into rcx (first arg) + mov rax, qword ptr [rcx + (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * num))] ; Load the func name into rax + lea r9, termin_error_string ; Load the error string into r9 (fourth arg) + xor r8d, r8d ; Set r8 to zero (third arg) + mov qword ptr [rsp + 32], rax ; Move the func name onto the stack (fifth arg) + lea edx, [r8 + VULKAN_LOADER_ERROR_BIT] ; Write the error logging bit to rdx (second arg) + call loader_log ; Log the error message before we crash + add rsp, 56 ; Clean up the stack frame + mov rax, 0 + jmp rax ; Crash intentionally by jumping to address zero +endm + +DevExtTramp macro num +public vkdev_ext&num& +vkdev_ext&num&: + mov rax, qword ptr [rcx] ; Dereference the handle to get the dispatch table + jmp qword ptr [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))] ; Jump to the appropriate call chain +endm + +; 32-bit values and macro +ELSE + +PhysDevExtTramp macro num +public _vkPhysDevExtTramp&num&@4 +_vkPhysDevExtTramp&num&@4: + mov eax, dword ptr [esp + 4] ; Load the wrapped VkPhysicalDevice into eax + mov ecx, [eax + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into ecx + mov [esp + 4], ecx ; Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack) + mov eax, [eax] ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax + jmp dword ptr [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args on the stack +endm + +PhysDevExtTermin macro num +public _vkPhysDevExtTermin&num&@4 +_vkPhysDevExtTermin&num&@4: + mov ecx, dword ptr [esp + 4] ; Move the wrapped VkPhysicalDevice into ecx + mov eax, dword ptr [ecx + ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Store the loader_icd_term* in eax + cmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))], 0 ; Check if the next function in the chain is NULL + je terminError&num& ; Go to the error section if it is NULL + mov ecx, dword ptr [ecx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Unwrap the VkPhysicalDevice in ecx + mov dword ptr [esp + 4], ecx ; Copy the unwrapped VkPhysicalDevice into the first arg + jmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))] ; Jump to the next function in the chain +terminError&num&: + mov eax, dword ptr [eax + INSTANCE_OFFSET_ICD_TERM] ; Load the loader_instance into eax + push dword ptr [eax + (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * num))] ; Push the func name (fifth arg) + push offset termin_error_string ; Push the error string (fourth arg) + push 0 ; Push zero (third arg) + push VULKAN_LOADER_ERROR_BIT ; Push the error logging bit (second arg) + push eax ; Push the loader_instance (first arg) + call _loader_log ; Log the error message before we crash + add esp, 20 ; Clean up the args + mov eax, 0 + jmp eax ; Crash intentionally by jumping to address zero +endm + +DevExtTramp macro num +public _vkdev_ext&num&@4 +_vkdev_ext&num&@4: + mov eax, dword ptr [esp + 4] ; Dereference the handle to get VkDevice chain_device + mov eax, dword ptr [eax] ; Dereference the chain_device to get the loader_dispatch + jmp dword ptr [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))] ; Jump to the appropriate call chain +endm + +; This is also needed for 32-bit only +.model flat + +ENDIF + +.const + termin_error_string db 'Function %s not supported for this physical device', 0 + +.code + +IFDEF rax +extrn loader_log:near +ELSE +extrn _loader_log:near +ENDIF + + PhysDevExtTramp 0 + PhysDevExtTramp 1 + PhysDevExtTramp 2 + PhysDevExtTramp 3 + PhysDevExtTramp 4 + PhysDevExtTramp 5 + PhysDevExtTramp 6 + PhysDevExtTramp 7 + PhysDevExtTramp 8 + PhysDevExtTramp 9 + PhysDevExtTramp 10 + PhysDevExtTramp 11 + PhysDevExtTramp 12 + PhysDevExtTramp 13 + PhysDevExtTramp 14 + PhysDevExtTramp 15 + PhysDevExtTramp 16 + PhysDevExtTramp 17 + PhysDevExtTramp 18 + PhysDevExtTramp 19 + PhysDevExtTramp 20 + PhysDevExtTramp 21 + PhysDevExtTramp 22 + PhysDevExtTramp 23 + PhysDevExtTramp 24 + PhysDevExtTramp 25 + PhysDevExtTramp 26 + PhysDevExtTramp 27 + PhysDevExtTramp 28 + PhysDevExtTramp 29 + PhysDevExtTramp 30 + PhysDevExtTramp 31 + PhysDevExtTramp 32 + PhysDevExtTramp 33 + PhysDevExtTramp 34 + PhysDevExtTramp 35 + PhysDevExtTramp 36 + PhysDevExtTramp 37 + PhysDevExtTramp 38 + PhysDevExtTramp 39 + PhysDevExtTramp 40 + PhysDevExtTramp 41 + PhysDevExtTramp 42 + PhysDevExtTramp 43 + PhysDevExtTramp 44 + PhysDevExtTramp 45 + PhysDevExtTramp 46 + PhysDevExtTramp 47 + PhysDevExtTramp 48 + PhysDevExtTramp 49 + PhysDevExtTramp 50 + PhysDevExtTramp 51 + PhysDevExtTramp 52 + PhysDevExtTramp 53 + PhysDevExtTramp 54 + PhysDevExtTramp 55 + PhysDevExtTramp 56 + PhysDevExtTramp 57 + PhysDevExtTramp 58 + PhysDevExtTramp 59 + PhysDevExtTramp 60 + PhysDevExtTramp 61 + PhysDevExtTramp 62 + PhysDevExtTramp 63 + PhysDevExtTramp 64 + PhysDevExtTramp 65 + PhysDevExtTramp 66 + PhysDevExtTramp 67 + PhysDevExtTramp 68 + PhysDevExtTramp 69 + PhysDevExtTramp 70 + PhysDevExtTramp 71 + PhysDevExtTramp 72 + PhysDevExtTramp 73 + PhysDevExtTramp 74 + PhysDevExtTramp 75 + PhysDevExtTramp 76 + PhysDevExtTramp 77 + PhysDevExtTramp 78 + PhysDevExtTramp 79 + PhysDevExtTramp 80 + PhysDevExtTramp 81 + PhysDevExtTramp 82 + PhysDevExtTramp 83 + PhysDevExtTramp 84 + PhysDevExtTramp 85 + PhysDevExtTramp 86 + PhysDevExtTramp 87 + PhysDevExtTramp 88 + PhysDevExtTramp 89 + PhysDevExtTramp 90 + PhysDevExtTramp 91 + PhysDevExtTramp 92 + PhysDevExtTramp 93 + PhysDevExtTramp 94 + PhysDevExtTramp 95 + PhysDevExtTramp 96 + PhysDevExtTramp 97 + PhysDevExtTramp 98 + PhysDevExtTramp 99 + PhysDevExtTramp 100 + PhysDevExtTramp 101 + PhysDevExtTramp 102 + PhysDevExtTramp 103 + PhysDevExtTramp 104 + PhysDevExtTramp 105 + PhysDevExtTramp 106 + PhysDevExtTramp 107 + PhysDevExtTramp 108 + PhysDevExtTramp 109 + PhysDevExtTramp 110 + PhysDevExtTramp 111 + PhysDevExtTramp 112 + PhysDevExtTramp 113 + PhysDevExtTramp 114 + PhysDevExtTramp 115 + PhysDevExtTramp 116 + PhysDevExtTramp 117 + PhysDevExtTramp 118 + PhysDevExtTramp 119 + PhysDevExtTramp 120 + PhysDevExtTramp 121 + PhysDevExtTramp 122 + PhysDevExtTramp 123 + PhysDevExtTramp 124 + PhysDevExtTramp 125 + PhysDevExtTramp 126 + PhysDevExtTramp 127 + PhysDevExtTramp 128 + PhysDevExtTramp 129 + PhysDevExtTramp 130 + PhysDevExtTramp 131 + PhysDevExtTramp 132 + PhysDevExtTramp 133 + PhysDevExtTramp 134 + PhysDevExtTramp 135 + PhysDevExtTramp 136 + PhysDevExtTramp 137 + PhysDevExtTramp 138 + PhysDevExtTramp 139 + PhysDevExtTramp 140 + PhysDevExtTramp 141 + PhysDevExtTramp 142 + PhysDevExtTramp 143 + PhysDevExtTramp 144 + PhysDevExtTramp 145 + PhysDevExtTramp 146 + PhysDevExtTramp 147 + PhysDevExtTramp 148 + PhysDevExtTramp 149 + PhysDevExtTramp 150 + PhysDevExtTramp 151 + PhysDevExtTramp 152 + PhysDevExtTramp 153 + PhysDevExtTramp 154 + PhysDevExtTramp 155 + PhysDevExtTramp 156 + PhysDevExtTramp 157 + PhysDevExtTramp 158 + PhysDevExtTramp 159 + PhysDevExtTramp 160 + PhysDevExtTramp 161 + PhysDevExtTramp 162 + PhysDevExtTramp 163 + PhysDevExtTramp 164 + PhysDevExtTramp 165 + PhysDevExtTramp 166 + PhysDevExtTramp 167 + PhysDevExtTramp 168 + PhysDevExtTramp 169 + PhysDevExtTramp 170 + PhysDevExtTramp 171 + PhysDevExtTramp 172 + PhysDevExtTramp 173 + PhysDevExtTramp 174 + PhysDevExtTramp 175 + PhysDevExtTramp 176 + PhysDevExtTramp 177 + PhysDevExtTramp 178 + PhysDevExtTramp 179 + PhysDevExtTramp 180 + PhysDevExtTramp 181 + PhysDevExtTramp 182 + PhysDevExtTramp 183 + PhysDevExtTramp 184 + PhysDevExtTramp 185 + PhysDevExtTramp 186 + PhysDevExtTramp 187 + PhysDevExtTramp 188 + PhysDevExtTramp 189 + PhysDevExtTramp 190 + PhysDevExtTramp 191 + PhysDevExtTramp 192 + PhysDevExtTramp 193 + PhysDevExtTramp 194 + PhysDevExtTramp 195 + PhysDevExtTramp 196 + PhysDevExtTramp 197 + PhysDevExtTramp 198 + PhysDevExtTramp 199 + PhysDevExtTramp 200 + PhysDevExtTramp 201 + PhysDevExtTramp 202 + PhysDevExtTramp 203 + PhysDevExtTramp 204 + PhysDevExtTramp 205 + PhysDevExtTramp 206 + PhysDevExtTramp 207 + PhysDevExtTramp 208 + PhysDevExtTramp 209 + PhysDevExtTramp 210 + PhysDevExtTramp 211 + PhysDevExtTramp 212 + PhysDevExtTramp 213 + PhysDevExtTramp 214 + PhysDevExtTramp 215 + PhysDevExtTramp 216 + PhysDevExtTramp 217 + PhysDevExtTramp 218 + PhysDevExtTramp 219 + PhysDevExtTramp 220 + PhysDevExtTramp 221 + PhysDevExtTramp 222 + PhysDevExtTramp 223 + PhysDevExtTramp 224 + PhysDevExtTramp 225 + PhysDevExtTramp 226 + PhysDevExtTramp 227 + PhysDevExtTramp 228 + PhysDevExtTramp 229 + PhysDevExtTramp 230 + PhysDevExtTramp 231 + PhysDevExtTramp 232 + PhysDevExtTramp 233 + PhysDevExtTramp 234 + PhysDevExtTramp 235 + PhysDevExtTramp 236 + PhysDevExtTramp 237 + PhysDevExtTramp 238 + PhysDevExtTramp 239 + PhysDevExtTramp 240 + PhysDevExtTramp 241 + PhysDevExtTramp 242 + PhysDevExtTramp 243 + PhysDevExtTramp 244 + PhysDevExtTramp 245 + PhysDevExtTramp 246 + PhysDevExtTramp 247 + PhysDevExtTramp 248 + PhysDevExtTramp 249 + + PhysDevExtTermin 0 + PhysDevExtTermin 1 + PhysDevExtTermin 2 + PhysDevExtTermin 3 + PhysDevExtTermin 4 + PhysDevExtTermin 5 + PhysDevExtTermin 6 + PhysDevExtTermin 7 + PhysDevExtTermin 8 + PhysDevExtTermin 9 + PhysDevExtTermin 10 + PhysDevExtTermin 11 + PhysDevExtTermin 12 + PhysDevExtTermin 13 + PhysDevExtTermin 14 + PhysDevExtTermin 15 + PhysDevExtTermin 16 + PhysDevExtTermin 17 + PhysDevExtTermin 18 + PhysDevExtTermin 19 + PhysDevExtTermin 20 + PhysDevExtTermin 21 + PhysDevExtTermin 22 + PhysDevExtTermin 23 + PhysDevExtTermin 24 + PhysDevExtTermin 25 + PhysDevExtTermin 26 + PhysDevExtTermin 27 + PhysDevExtTermin 28 + PhysDevExtTermin 29 + PhysDevExtTermin 30 + PhysDevExtTermin 31 + PhysDevExtTermin 32 + PhysDevExtTermin 33 + PhysDevExtTermin 34 + PhysDevExtTermin 35 + PhysDevExtTermin 36 + PhysDevExtTermin 37 + PhysDevExtTermin 38 + PhysDevExtTermin 39 + PhysDevExtTermin 40 + PhysDevExtTermin 41 + PhysDevExtTermin 42 + PhysDevExtTermin 43 + PhysDevExtTermin 44 + PhysDevExtTermin 45 + PhysDevExtTermin 46 + PhysDevExtTermin 47 + PhysDevExtTermin 48 + PhysDevExtTermin 49 + PhysDevExtTermin 50 + PhysDevExtTermin 51 + PhysDevExtTermin 52 + PhysDevExtTermin 53 + PhysDevExtTermin 54 + PhysDevExtTermin 55 + PhysDevExtTermin 56 + PhysDevExtTermin 57 + PhysDevExtTermin 58 + PhysDevExtTermin 59 + PhysDevExtTermin 60 + PhysDevExtTermin 61 + PhysDevExtTermin 62 + PhysDevExtTermin 63 + PhysDevExtTermin 64 + PhysDevExtTermin 65 + PhysDevExtTermin 66 + PhysDevExtTermin 67 + PhysDevExtTermin 68 + PhysDevExtTermin 69 + PhysDevExtTermin 70 + PhysDevExtTermin 71 + PhysDevExtTermin 72 + PhysDevExtTermin 73 + PhysDevExtTermin 74 + PhysDevExtTermin 75 + PhysDevExtTermin 76 + PhysDevExtTermin 77 + PhysDevExtTermin 78 + PhysDevExtTermin 79 + PhysDevExtTermin 80 + PhysDevExtTermin 81 + PhysDevExtTermin 82 + PhysDevExtTermin 83 + PhysDevExtTermin 84 + PhysDevExtTermin 85 + PhysDevExtTermin 86 + PhysDevExtTermin 87 + PhysDevExtTermin 88 + PhysDevExtTermin 89 + PhysDevExtTermin 90 + PhysDevExtTermin 91 + PhysDevExtTermin 92 + PhysDevExtTermin 93 + PhysDevExtTermin 94 + PhysDevExtTermin 95 + PhysDevExtTermin 96 + PhysDevExtTermin 97 + PhysDevExtTermin 98 + PhysDevExtTermin 99 + PhysDevExtTermin 100 + PhysDevExtTermin 101 + PhysDevExtTermin 102 + PhysDevExtTermin 103 + PhysDevExtTermin 104 + PhysDevExtTermin 105 + PhysDevExtTermin 106 + PhysDevExtTermin 107 + PhysDevExtTermin 108 + PhysDevExtTermin 109 + PhysDevExtTermin 110 + PhysDevExtTermin 111 + PhysDevExtTermin 112 + PhysDevExtTermin 113 + PhysDevExtTermin 114 + PhysDevExtTermin 115 + PhysDevExtTermin 116 + PhysDevExtTermin 117 + PhysDevExtTermin 118 + PhysDevExtTermin 119 + PhysDevExtTermin 120 + PhysDevExtTermin 121 + PhysDevExtTermin 122 + PhysDevExtTermin 123 + PhysDevExtTermin 124 + PhysDevExtTermin 125 + PhysDevExtTermin 126 + PhysDevExtTermin 127 + PhysDevExtTermin 128 + PhysDevExtTermin 129 + PhysDevExtTermin 130 + PhysDevExtTermin 131 + PhysDevExtTermin 132 + PhysDevExtTermin 133 + PhysDevExtTermin 134 + PhysDevExtTermin 135 + PhysDevExtTermin 136 + PhysDevExtTermin 137 + PhysDevExtTermin 138 + PhysDevExtTermin 139 + PhysDevExtTermin 140 + PhysDevExtTermin 141 + PhysDevExtTermin 142 + PhysDevExtTermin 143 + PhysDevExtTermin 144 + PhysDevExtTermin 145 + PhysDevExtTermin 146 + PhysDevExtTermin 147 + PhysDevExtTermin 148 + PhysDevExtTermin 149 + PhysDevExtTermin 150 + PhysDevExtTermin 151 + PhysDevExtTermin 152 + PhysDevExtTermin 153 + PhysDevExtTermin 154 + PhysDevExtTermin 155 + PhysDevExtTermin 156 + PhysDevExtTermin 157 + PhysDevExtTermin 158 + PhysDevExtTermin 159 + PhysDevExtTermin 160 + PhysDevExtTermin 161 + PhysDevExtTermin 162 + PhysDevExtTermin 163 + PhysDevExtTermin 164 + PhysDevExtTermin 165 + PhysDevExtTermin 166 + PhysDevExtTermin 167 + PhysDevExtTermin 168 + PhysDevExtTermin 169 + PhysDevExtTermin 170 + PhysDevExtTermin 171 + PhysDevExtTermin 172 + PhysDevExtTermin 173 + PhysDevExtTermin 174 + PhysDevExtTermin 175 + PhysDevExtTermin 176 + PhysDevExtTermin 177 + PhysDevExtTermin 178 + PhysDevExtTermin 179 + PhysDevExtTermin 180 + PhysDevExtTermin 181 + PhysDevExtTermin 182 + PhysDevExtTermin 183 + PhysDevExtTermin 184 + PhysDevExtTermin 185 + PhysDevExtTermin 186 + PhysDevExtTermin 187 + PhysDevExtTermin 188 + PhysDevExtTermin 189 + PhysDevExtTermin 190 + PhysDevExtTermin 191 + PhysDevExtTermin 192 + PhysDevExtTermin 193 + PhysDevExtTermin 194 + PhysDevExtTermin 195 + PhysDevExtTermin 196 + PhysDevExtTermin 197 + PhysDevExtTermin 198 + PhysDevExtTermin 199 + PhysDevExtTermin 200 + PhysDevExtTermin 201 + PhysDevExtTermin 202 + PhysDevExtTermin 203 + PhysDevExtTermin 204 + PhysDevExtTermin 205 + PhysDevExtTermin 206 + PhysDevExtTermin 207 + PhysDevExtTermin 208 + PhysDevExtTermin 209 + PhysDevExtTermin 210 + PhysDevExtTermin 211 + PhysDevExtTermin 212 + PhysDevExtTermin 213 + PhysDevExtTermin 214 + PhysDevExtTermin 215 + PhysDevExtTermin 216 + PhysDevExtTermin 217 + PhysDevExtTermin 218 + PhysDevExtTermin 219 + PhysDevExtTermin 220 + PhysDevExtTermin 221 + PhysDevExtTermin 222 + PhysDevExtTermin 223 + PhysDevExtTermin 224 + PhysDevExtTermin 225 + PhysDevExtTermin 226 + PhysDevExtTermin 227 + PhysDevExtTermin 228 + PhysDevExtTermin 229 + PhysDevExtTermin 230 + PhysDevExtTermin 231 + PhysDevExtTermin 232 + PhysDevExtTermin 233 + PhysDevExtTermin 234 + PhysDevExtTermin 235 + PhysDevExtTermin 236 + PhysDevExtTermin 237 + PhysDevExtTermin 238 + PhysDevExtTermin 239 + PhysDevExtTermin 240 + PhysDevExtTermin 241 + PhysDevExtTermin 242 + PhysDevExtTermin 243 + PhysDevExtTermin 244 + PhysDevExtTermin 245 + PhysDevExtTermin 246 + PhysDevExtTermin 247 + PhysDevExtTermin 248 + PhysDevExtTermin 249 + + DevExtTramp 0 + DevExtTramp 1 + DevExtTramp 2 + DevExtTramp 3 + DevExtTramp 4 + DevExtTramp 5 + DevExtTramp 6 + DevExtTramp 7 + DevExtTramp 8 + DevExtTramp 9 + DevExtTramp 10 + DevExtTramp 11 + DevExtTramp 12 + DevExtTramp 13 + DevExtTramp 14 + DevExtTramp 15 + DevExtTramp 16 + DevExtTramp 17 + DevExtTramp 18 + DevExtTramp 19 + DevExtTramp 20 + DevExtTramp 21 + DevExtTramp 22 + DevExtTramp 23 + DevExtTramp 24 + DevExtTramp 25 + DevExtTramp 26 + DevExtTramp 27 + DevExtTramp 28 + DevExtTramp 29 + DevExtTramp 30 + DevExtTramp 31 + DevExtTramp 32 + DevExtTramp 33 + DevExtTramp 34 + DevExtTramp 35 + DevExtTramp 36 + DevExtTramp 37 + DevExtTramp 38 + DevExtTramp 39 + DevExtTramp 40 + DevExtTramp 41 + DevExtTramp 42 + DevExtTramp 43 + DevExtTramp 44 + DevExtTramp 45 + DevExtTramp 46 + DevExtTramp 47 + DevExtTramp 48 + DevExtTramp 49 + DevExtTramp 50 + DevExtTramp 51 + DevExtTramp 52 + DevExtTramp 53 + DevExtTramp 54 + DevExtTramp 55 + DevExtTramp 56 + DevExtTramp 57 + DevExtTramp 58 + DevExtTramp 59 + DevExtTramp 60 + DevExtTramp 61 + DevExtTramp 62 + DevExtTramp 63 + DevExtTramp 64 + DevExtTramp 65 + DevExtTramp 66 + DevExtTramp 67 + DevExtTramp 68 + DevExtTramp 69 + DevExtTramp 70 + DevExtTramp 71 + DevExtTramp 72 + DevExtTramp 73 + DevExtTramp 74 + DevExtTramp 75 + DevExtTramp 76 + DevExtTramp 77 + DevExtTramp 78 + DevExtTramp 79 + DevExtTramp 80 + DevExtTramp 81 + DevExtTramp 82 + DevExtTramp 83 + DevExtTramp 84 + DevExtTramp 85 + DevExtTramp 86 + DevExtTramp 87 + DevExtTramp 88 + DevExtTramp 89 + DevExtTramp 90 + DevExtTramp 91 + DevExtTramp 92 + DevExtTramp 93 + DevExtTramp 94 + DevExtTramp 95 + DevExtTramp 96 + DevExtTramp 97 + DevExtTramp 98 + DevExtTramp 99 + DevExtTramp 100 + DevExtTramp 101 + DevExtTramp 102 + DevExtTramp 103 + DevExtTramp 104 + DevExtTramp 105 + DevExtTramp 106 + DevExtTramp 107 + DevExtTramp 108 + DevExtTramp 109 + DevExtTramp 110 + DevExtTramp 111 + DevExtTramp 112 + DevExtTramp 113 + DevExtTramp 114 + DevExtTramp 115 + DevExtTramp 116 + DevExtTramp 117 + DevExtTramp 118 + DevExtTramp 119 + DevExtTramp 120 + DevExtTramp 121 + DevExtTramp 122 + DevExtTramp 123 + DevExtTramp 124 + DevExtTramp 125 + DevExtTramp 126 + DevExtTramp 127 + DevExtTramp 128 + DevExtTramp 129 + DevExtTramp 130 + DevExtTramp 131 + DevExtTramp 132 + DevExtTramp 133 + DevExtTramp 134 + DevExtTramp 135 + DevExtTramp 136 + DevExtTramp 137 + DevExtTramp 138 + DevExtTramp 139 + DevExtTramp 140 + DevExtTramp 141 + DevExtTramp 142 + DevExtTramp 143 + DevExtTramp 144 + DevExtTramp 145 + DevExtTramp 146 + DevExtTramp 147 + DevExtTramp 148 + DevExtTramp 149 + DevExtTramp 150 + DevExtTramp 151 + DevExtTramp 152 + DevExtTramp 153 + DevExtTramp 154 + DevExtTramp 155 + DevExtTramp 156 + DevExtTramp 157 + DevExtTramp 158 + DevExtTramp 159 + DevExtTramp 160 + DevExtTramp 161 + DevExtTramp 162 + DevExtTramp 163 + DevExtTramp 164 + DevExtTramp 165 + DevExtTramp 166 + DevExtTramp 167 + DevExtTramp 168 + DevExtTramp 169 + DevExtTramp 170 + DevExtTramp 171 + DevExtTramp 172 + DevExtTramp 173 + DevExtTramp 174 + DevExtTramp 175 + DevExtTramp 176 + DevExtTramp 177 + DevExtTramp 178 + DevExtTramp 179 + DevExtTramp 180 + DevExtTramp 181 + DevExtTramp 182 + DevExtTramp 183 + DevExtTramp 184 + DevExtTramp 185 + DevExtTramp 186 + DevExtTramp 187 + DevExtTramp 188 + DevExtTramp 189 + DevExtTramp 190 + DevExtTramp 191 + DevExtTramp 192 + DevExtTramp 193 + DevExtTramp 194 + DevExtTramp 195 + DevExtTramp 196 + DevExtTramp 197 + DevExtTramp 198 + DevExtTramp 199 + DevExtTramp 200 + DevExtTramp 201 + DevExtTramp 202 + DevExtTramp 203 + DevExtTramp 204 + DevExtTramp 205 + DevExtTramp 206 + DevExtTramp 207 + DevExtTramp 208 + DevExtTramp 209 + DevExtTramp 210 + DevExtTramp 211 + DevExtTramp 212 + DevExtTramp 213 + DevExtTramp 214 + DevExtTramp 215 + DevExtTramp 216 + DevExtTramp 217 + DevExtTramp 218 + DevExtTramp 219 + DevExtTramp 220 + DevExtTramp 221 + DevExtTramp 222 + DevExtTramp 223 + DevExtTramp 224 + DevExtTramp 225 + DevExtTramp 226 + DevExtTramp 227 + DevExtTramp 228 + DevExtTramp 229 + DevExtTramp 230 + DevExtTramp 231 + DevExtTramp 232 + DevExtTramp 233 + DevExtTramp 234 + DevExtTramp 235 + DevExtTramp 236 + DevExtTramp 237 + DevExtTramp 238 + DevExtTramp 239 + DevExtTramp 240 + DevExtTramp 241 + DevExtTramp 242 + DevExtTramp 243 + DevExtTramp 244 + DevExtTramp 245 + DevExtTramp 246 + DevExtTramp 247 + DevExtTramp 248 + DevExtTramp 249 + +end diff --git a/local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.c b/local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.c new file mode 100644 index 0000000000..2ff4be1d64 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.c @@ -0,0 +1,379 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Mark Young + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#include "unknown_function_handling.h" + +// If the assembly code necessary for unknown functions isn't supported, then replace all of the functions with stubs. +// This way, if an application queries for an unknown function, they receive NULL and can act accordingly. +// Previously, there was a fallback path written in C. However, it depended on the compiler optimizing the functions +// in such a way as to not disturb the callstack. This reliance on implementation defined behavior is unsustainable and was only +// known to work with GCC. +#if !defined(UNKNOWN_FUNCTIONS_SUPPORTED) + +void loader_init_dispatch_dev_ext(struct loader_instance *inst, struct loader_device *dev) { + (void)inst; + (void)dev; +} +void *loader_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName) { + (void)inst; + (void)funcName; + return NULL; +} +void *loader_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName) { + (void)inst; + (void)funcName; + return NULL; +} + +void *loader_phys_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName) { + (void)inst; + (void)funcName; + return NULL; +} +void *loader_phys_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName) { + (void)inst; + (void)funcName; + return NULL; +} + +void loader_free_dev_ext_table(struct loader_instance *inst) { (void)inst; } +void loader_free_phys_dev_ext_table(struct loader_instance *inst) { (void)inst; } + +#else + +#include "allocation.h" +#include "log.h" + +// Forward declarations +void *loader_get_dev_ext_trampoline(uint32_t index); +void *loader_get_phys_dev_ext_tramp(uint32_t index); +void *loader_get_phys_dev_ext_termin(uint32_t index); + +// Device function handling + +// Initialize device_ext dispatch table entry as follows: +// If dev == NULL find all logical devices created within this instance and +// init the entry (given by idx) in the ext dispatch table. +// If dev != NULL only initialize the entry in the given dev's dispatch table. +// The initialization value is gotten by calling down the device chain with +// GDPA. +// If GDPA returns NULL then don't initialize the dispatch table entry. +void loader_init_dispatch_dev_ext_entry(struct loader_instance *inst, struct loader_device *dev, uint32_t idx, const char *funcName) + +{ + void *gdpa_value; + if (dev != NULL) { + gdpa_value = dev->loader_dispatch.core_dispatch.GetDeviceProcAddr(dev->chain_device, funcName); + if (gdpa_value != NULL) dev->loader_dispatch.ext_dispatch[idx] = (PFN_vkDevExt)gdpa_value; + } else { + for (struct loader_icd_term *icd_term = inst->icd_terms; icd_term != NULL; icd_term = icd_term->next) { + struct loader_device *ldev = icd_term->logical_device_list; + while (ldev) { + gdpa_value = ldev->loader_dispatch.core_dispatch.GetDeviceProcAddr(ldev->chain_device, funcName); + if (gdpa_value != NULL) ldev->loader_dispatch.ext_dispatch[idx] = (PFN_vkDevExt)gdpa_value; + ldev = ldev->next; + } + } + } +} + +// Find all dev extension in the function names array and initialize the dispatch table +// for dev for each of those extension entrypoints found in function names array. +void loader_init_dispatch_dev_ext(struct loader_instance *inst, struct loader_device *dev) { + for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) { + if (inst->dev_ext_disp_functions[i] != NULL) + loader_init_dispatch_dev_ext_entry(inst, dev, i, inst->dev_ext_disp_functions[i]); + } +} + +bool loader_check_icds_for_dev_ext_address(struct loader_instance *inst, const char *funcName) { + struct loader_icd_term *icd_term; + icd_term = inst->icd_terms; + while (NULL != icd_term) { + if (icd_term->scanned_icd->GetInstanceProcAddr(icd_term->instance, funcName)) + // this icd supports funcName + return true; + icd_term = icd_term->next; + } + + return false; +} + +// Look in the layers list of device extensions, which contain names of entry points. If funcName is present, return true +// If not, call down the first layer's vkGetInstanceProcAddr to determine if any layers support the function +bool loader_check_layer_list_for_dev_ext_address(struct loader_instance *inst, const char *funcName) { + // Iterate over the layers. + for (uint32_t layer = 0; layer < inst->expanded_activated_layer_list.count; ++layer) { + // Iterate over the extensions. + const struct loader_device_extension_list *const extensions = + &(inst->expanded_activated_layer_list.list[layer]->device_extension_list); + for (uint32_t extension = 0; extension < extensions->count; ++extension) { + // Iterate over the entry points. + const struct loader_dev_ext_props *const property = &(extensions->list[extension]); + for (uint32_t entry = 0; entry < property->entrypoints.count; ++entry) { + if (strcmp(property->entrypoints.list[entry], funcName) == 0) { + return true; + } + } + } + } + // If the function pointer doesn't appear in the layer manifest for intercepted device functions, look down the + // vkGetInstanceProcAddr chain + if (inst->expanded_activated_layer_list.count > 0) { + const struct loader_layer_functions *const functions = &(inst->expanded_activated_layer_list.list[0]->functions); + if (NULL != functions->get_instance_proc_addr) { + return NULL != functions->get_instance_proc_addr((VkInstance)inst->instance, funcName); + } + } + + return false; +} + +void loader_free_dev_ext_table(struct loader_instance *inst) { + for (uint32_t i = 0; i < inst->dev_ext_disp_function_count; i++) { + loader_instance_heap_free(inst, inst->dev_ext_disp_functions[i]); + } + memset(inst->dev_ext_disp_functions, 0, sizeof(inst->dev_ext_disp_functions)); +} + +/* + * This function returns generic trampoline code address for unknown entry points. + * Presumably, these unknown entry points (as given by funcName) are device extension + * entrypoints. + * A function name array is used to keep a list of unknown entry points and their + * mapping to the device extension dispatch table. + * \returns + * For a given entry point string (funcName), if an existing mapping is found the + * trampoline address for that mapping is returned. + * Otherwise, this unknown entry point has not been seen yet. + * Next check if an ICD supports it, and if is_tramp is true, check if any layer + * supports it by calling down the chain. + * If so then a new entry in the function name array is added and that trampoline + * address for the new entry is returned. + * NULL is returned if the function name array is full or if no discovered layer or + * ICD returns a non-NULL GetProcAddr for it. + */ +void *loader_dev_ext_gpa_impl(struct loader_instance *inst, const char *funcName, bool is_tramp) { + // Linearly look through already added functions to make sure we haven't seen it before + // if we have, return the function at the index found + for (uint32_t i = 0; i < inst->dev_ext_disp_function_count; i++) { + if (inst->dev_ext_disp_functions[i] && !strcmp(inst->dev_ext_disp_functions[i], funcName)) + return loader_get_dev_ext_trampoline(i); + } + + // Check if funcName is supported in either ICDs or a layer library + if (!loader_check_icds_for_dev_ext_address(inst, funcName)) { + if (!is_tramp || !loader_check_layer_list_for_dev_ext_address(inst, funcName)) { + // if support found in layers continue on + return NULL; + } + } + if (inst->dev_ext_disp_function_count >= MAX_NUM_UNKNOWN_EXTS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, "loader_dev_ext_gpa: Exhausted the unknown device function array!"); + return NULL; + } + + // add found function to dev_ext_disp_functions; + size_t funcName_len = strlen(funcName) + 1; + inst->dev_ext_disp_functions[inst->dev_ext_disp_function_count] = + (char *)loader_instance_heap_alloc(inst, funcName_len, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == inst->dev_ext_disp_functions[inst->dev_ext_disp_function_count]) { + // failed to allocate memory, return NULL + return NULL; + } + loader_strncpy(inst->dev_ext_disp_functions[inst->dev_ext_disp_function_count], funcName_len, funcName, funcName_len); + // init any dev dispatch table entries as needed + loader_init_dispatch_dev_ext_entry(inst, NULL, inst->dev_ext_disp_function_count, funcName); + void *out_function = loader_get_dev_ext_trampoline(inst->dev_ext_disp_function_count); + inst->dev_ext_disp_function_count++; + return out_function; +} + +void *loader_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName) { + return loader_dev_ext_gpa_impl(inst, funcName, true); +} + +void *loader_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName) { + return loader_dev_ext_gpa_impl(inst, funcName, false); +} + +// Physical Device function handling + +bool loader_check_icds_for_phys_dev_ext_address(struct loader_instance *inst, const char *funcName) { + struct loader_icd_term *icd_term; + icd_term = inst->icd_terms; + while (NULL != icd_term) { + if (icd_term->scanned_icd->interface_version >= MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION && + icd_term->scanned_icd->GetPhysicalDeviceProcAddr && + icd_term->scanned_icd->GetPhysicalDeviceProcAddr(icd_term->instance, funcName)) + // this icd supports funcName + return true; + icd_term = icd_term->next; + } + + return false; +} + +bool loader_check_layer_list_for_phys_dev_ext_address(struct loader_instance *inst, const char *funcName) { + for (uint32_t layer = 0; layer < inst->expanded_activated_layer_list.count; layer++) { + struct loader_layer_properties *layer_prop_list = inst->expanded_activated_layer_list.list[layer]; + // Find the first layer in the call chain which supports vk_layerGetPhysicalDeviceProcAddr + // and call that, returning whether it found a valid pointer for this function name. + // We return if the topmost layer supports GPDPA since the layer should call down the chain for us. + if (layer_prop_list->interface_version > 1) { + const struct loader_layer_functions *const functions = &(layer_prop_list->functions); + if (NULL != functions->get_physical_device_proc_addr) { + return NULL != functions->get_physical_device_proc_addr((VkInstance)inst->instance, funcName); + } + } + } + return false; +} + +void loader_free_phys_dev_ext_table(struct loader_instance *inst) { + for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) { + loader_instance_heap_free(inst, inst->phys_dev_ext_disp_functions[i]); + } + memset(inst->phys_dev_ext_disp_functions, 0, sizeof(inst->phys_dev_ext_disp_functions)); +} + +// This function returns a generic trampoline or terminator function +// address for any unknown physical device extension commands. An array +// is used to keep a list of unknown entry points and their +// mapping to the physical device extension dispatch table (struct +// loader_phys_dev_ext_dispatch_table). +// For a given entry point string (funcName), if an existing mapping is +// found, then the address for that mapping is returned. The is_tramp +// parameter is used to decide whether to return a trampoline or terminator +// If it has not been seen before check if a layer or and ICD supports it. +// If so then a new entry in the function name array is added. +// Null is returned if discovered layer or ICD returns a non-NULL GetProcAddr for it +// or if the function name table is full. +void *loader_phys_dev_ext_gpa_impl(struct loader_instance *inst, const char *funcName, bool is_tramp) { + assert(NULL != inst); + + // We should always check to see if any ICD supports it. + if (!loader_check_icds_for_phys_dev_ext_address(inst, funcName)) { + // If we're not checking layers, or we are and it's not in a layer, just + // return + if (!is_tramp || !loader_check_layer_list_for_phys_dev_ext_address(inst, funcName)) { + return NULL; + } + } + + bool has_found = false; + uint32_t new_function_index = 0; + // Linearly look through already added functions to make sure we haven't seen it before + // if we have, return the function at the index found + for (uint32_t i = 0; i < inst->phys_dev_ext_disp_function_count; i++) { + if (inst->phys_dev_ext_disp_functions[i] && !strcmp(inst->phys_dev_ext_disp_functions[i], funcName)) { + has_found = true; + new_function_index = i; + break; + } + } + + // A never before seen function name, store it in the array + if (!has_found) { + if (inst->phys_dev_ext_disp_function_count >= MAX_NUM_UNKNOWN_EXTS) { + loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0, + "loader_dev_ext_gpa: Exhausted the unknown physical device function array!"); + return NULL; + } + + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, + "loader_phys_dev_ext_gpa: Adding unknown physical function %s to internal store at index %u", funcName, + inst->phys_dev_ext_disp_function_count); + + // add found function to phys_dev_ext_disp_functions; + size_t funcName_len = strlen(funcName) + 1; + inst->phys_dev_ext_disp_functions[inst->phys_dev_ext_disp_function_count] = + (char *)loader_instance_heap_alloc(inst, funcName_len, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (NULL == inst->phys_dev_ext_disp_functions[inst->phys_dev_ext_disp_function_count]) { + // failed to allocate memory, return NULL + return NULL; + } + loader_strncpy(inst->phys_dev_ext_disp_functions[inst->phys_dev_ext_disp_function_count], funcName_len, funcName, + funcName_len); + + new_function_index = inst->phys_dev_ext_disp_function_count; + // increment the count so that the subsequent logic includes the newly added entry point when searching for functions + inst->phys_dev_ext_disp_function_count++; + } + + // Setup the ICD function pointers + struct loader_icd_term *icd_term = inst->icd_terms; + while (NULL != icd_term) { + if (MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION <= icd_term->scanned_icd->interface_version && + NULL != icd_term->scanned_icd->GetPhysicalDeviceProcAddr) { + icd_term->phys_dev_ext[new_function_index] = + (PFN_PhysDevExt)icd_term->scanned_icd->GetPhysicalDeviceProcAddr(icd_term->instance, funcName); + if (NULL != icd_term->phys_dev_ext[new_function_index]) { + // Make sure we set the instance dispatch to point to the loader's terminator now since we can at least handle + // it in one ICD. + inst->disp->phys_dev_ext[new_function_index] = loader_get_phys_dev_ext_termin(new_function_index); + + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "loader_phys_dev_ext_gpa: Driver %s returned ptr %p for %s", + icd_term->scanned_icd->lib_name, inst->disp->phys_dev_ext[new_function_index], funcName); + } + } else { + icd_term->phys_dev_ext[new_function_index] = NULL; + } + + icd_term = icd_term->next; + } + + // Now if this is being run in the trampoline, search for the first layer attached and query using it to get the first entry + // point. Only set the instance dispatch table to it if it isn't NULL. + if (is_tramp) { + for (uint32_t i = 0; i < inst->expanded_activated_layer_list.count; i++) { + struct loader_layer_properties *layer_prop = inst->expanded_activated_layer_list.list[i]; + if (layer_prop->interface_version > 1 && NULL != layer_prop->functions.get_physical_device_proc_addr) { + void *layer_ret_function = + (PFN_PhysDevExt)layer_prop->functions.get_physical_device_proc_addr(inst->instance, funcName); + if (NULL != layer_ret_function) { + inst->disp->phys_dev_ext[new_function_index] = layer_ret_function; + loader_log(inst, VULKAN_LOADER_DEBUG_BIT, 0, "loader_phys_dev_ext_gpa: Layer %s returned ptr %p for %s", + layer_prop->info.layerName, inst->disp->phys_dev_ext[new_function_index], funcName); + break; + } + } + } + } + + if (is_tramp) { + return loader_get_phys_dev_ext_tramp(new_function_index); + } else { + return loader_get_phys_dev_ext_termin(new_function_index); + } +} +// Main interface functions, makes it clear whether it is getting a terminator or trampoline +void *loader_phys_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName) { + return loader_phys_dev_ext_gpa_impl(inst, funcName, true); +} +void *loader_phys_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName) { + return loader_phys_dev_ext_gpa_impl(inst, funcName, false); +} + +#endif diff --git a/local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.h b/local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.h new file mode 100644 index 0000000000..0f5bcd1e18 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/unknown_function_handling.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, 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. + * + * Author: Jon Ashburn + * Author: Courtney Goeltzenleuchter + * Author: Mark Young + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#pragma once + +#include "loader_common.h" + +void loader_init_dispatch_dev_ext(struct loader_instance *inst, struct loader_device *dev); +void *loader_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName); +void *loader_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName); + +void *loader_phys_dev_ext_gpa_tramp(struct loader_instance *inst, const char *funcName); +void *loader_phys_dev_ext_gpa_term(struct loader_instance *inst, const char *funcName); + +void loader_free_dev_ext_table(struct loader_instance *inst); +void loader_free_phys_dev_ext_table(struct loader_instance *inst); diff --git a/local/recipes/libs/vulkan-loader/source/loader/vk_loader_layer.h b/local/recipes/libs/vulkan-loader/source/loader/vk_loader_layer.h new file mode 100644 index 0000000000..c051f6eb98 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/vk_loader_layer.h @@ -0,0 +1,50 @@ +/* + * + * Copyright (c) 2016-2021 The Khronos Group Inc. + * Copyright (c) 2016-2021 Valve Corporation + * Copyright (c) 2016-2021 LunarG, 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. + * + * Author: Mark Lobodzinski + * Author: Charles Giessen + * + */ +#pragma once + +#include +#include + +// Linked list node for tree of debug callbacks +typedef struct VkDebugReportContent { + VkDebugReportCallbackEXT msgCallback; + PFN_vkDebugReportCallbackEXT pfnMsgCallback; + VkFlags msgFlags; +} VkDebugReportContent; + +typedef struct VkDebugUtilsMessengerContent { + VkDebugUtilsMessengerEXT messenger; + VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; + VkDebugUtilsMessageTypeFlagsEXT messageType; + PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback; +} VkDebugUtilsMessengerContent; + +typedef struct VkLayerDbgFunctionNode_ { + bool is_messenger; + union { + VkDebugReportContent report; + VkDebugUtilsMessengerContent messenger; + }; + void *pUserData; + struct VkLayerDbgFunctionNode_ *pNext; +} VkLayerDbgFunctionNode; diff --git a/local/recipes/libs/vulkan-loader/source/loader/vk_loader_platform.h b/local/recipes/libs/vulkan-loader/source/loader/vk_loader_platform.h new file mode 100644 index 0000000000..283876241f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/vk_loader_platform.h @@ -0,0 +1,645 @@ +/* + * + * Copyright (c) 2015-2022 The Khronos Group Inc. + * Copyright (c) 2015-2022 Valve Corporation + * Copyright (c) 2015-2022 LunarG, Inc. + * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + * + * Author: Ian Elliot + * Author: Jon Ashburn + * Author: Lenny Komow + * Author: Charles Giessen + * + */ +#pragma once + +#if defined(__FreeBSD__) || defined(__OpenBSD__) +#include +#include +#endif + +#include +#include +#include +#include +#include +#include + +#if defined(__Fuchsia__) +#include "dlopen_fuchsia.h" +#endif // defined(__Fuchsia__) + +// Set of platforms with a common set of functionality which is queried throughout the program +#if defined(__linux__) || defined(__redox__) || defined(__APPLE__) || defined(__Fuchsia__) || defined(__QNX__) || defined(__FreeBSD__) || \ + defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__GNU__) +#define COMMON_UNIX_PLATFORMS 1 +#else +#define COMMON_UNIX_PLATFORMS 0 +#endif + +#if COMMON_UNIX_PLATFORMS +#include +// Note: The following file is for dynamic loading: +#include +#include +#include +#include + +#elif defined(_WIN32) +// WinBase.h defines CreateSemaphore and synchapi.h defines CreateEvent +// undefine them to avoid conflicts with VkLayerDispatchTable struct members. +#if defined(CreateSemaphore) +#undef CreateSemaphore +#endif +#if defined(CreateEvent) +#undef CreateEvent +#endif +#include +#include +#include +#include + +#include "stack_allocation.h" +#endif // defined(_WIN32) + +#if defined(APPLE_STATIC_LOADER) && !defined(__APPLE__) +#error "APPLE_STATIC_LOADER can only be defined on Apple platforms!" +#endif + +#if defined(APPLE_STATIC_LOADER) +#define LOADER_EXPORT +#elif defined(__GNUC__) && __GNUC__ >= 4 +#define LOADER_EXPORT __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) +#define LOADER_EXPORT __attribute__((visibility("default"))) +#else +#define LOADER_EXPORT +#endif + +// For testing purposes, we want to expose some functions not normally callable on the library +#if defined(SHOULD_EXPORT_TEST_FUNCTIONS) +#if defined(_WIN32) +#define TEST_FUNCTION_EXPORT __declspec(dllexport) +#else +#define TEST_FUNCTION_EXPORT LOADER_EXPORT +#endif +#else +#define TEST_FUNCTION_EXPORT +#endif + +#define MAX_STRING_SIZE 1024 + +// This is defined in vk_layer.h, but if there's problems we need to create the define +// here. +#if !defined(MAX_NUM_UNKNOWN_EXTS) +#define MAX_NUM_UNKNOWN_EXTS 250 +#endif + +// Environment Variable information +#define VK_ICD_FILENAMES_ENV_VAR "VK_ICD_FILENAMES" // Deprecated in v1.3.207 loader +#define VK_DRIVER_FILES_ENV_VAR "VK_DRIVER_FILES" +#define VK_EXPLICIT_LAYER_PATH_ENV_VAR "VK_LAYER_PATH" +// Support added in v1.3.207 loader +#define VK_ADDITIONAL_DRIVER_FILES_ENV_VAR "VK_ADD_DRIVER_FILES" +#define VK_ADDITIONAL_EXPLICIT_LAYER_PATH_ENV_VAR "VK_ADD_LAYER_PATH" +// Support added in v1.3.234 loader +#define VK_LAYERS_ENABLE_ENV_VAR "VK_LOADER_LAYERS_ENABLE" +#define VK_LAYERS_DISABLE_ENV_VAR "VK_LOADER_LAYERS_DISABLE" +#define VK_LAYERS_ALLOW_ENV_VAR "VK_LOADER_LAYERS_ALLOW" +#define VK_DRIVERS_SELECT_ENV_VAR "VK_LOADER_DRIVERS_SELECT" +#define VK_DRIVERS_DISABLE_ENV_VAR "VK_LOADER_DRIVERS_DISABLE" +#define VK_LOADER_DISABLE_ALL_LAYERS_VAR_1 "~all~" +#define VK_LOADER_DISABLE_ALL_LAYERS_VAR_2 "*" +#define VK_LOADER_DISABLE_ALL_LAYERS_VAR_3 "**" +#define VK_LOADER_DISABLE_IMPLICIT_LAYERS_VAR "~implicit~" +#define VK_LOADER_DISABLE_EXPLICIT_LAYERS_VAR "~explicit~" +// Support added in v1.3.295 loader +#define VK_IMPLICIT_LAYER_PATH_ENV_VAR "VK_IMPLICIT_LAYER_PATH" +#define VK_ADDITIONAL_IMPLICIT_LAYER_PATH_ENV_VAR "VK_ADD_IMPLICIT_LAYER_PATH" + +// Override layer information +#define VK_OVERRIDE_LAYER_NAME "VK_LAYER_LUNARG_override" + +// Loader Settings filename +#define VK_LOADER_SETTINGS_FILENAME "vk_loader_settings.json" + +#define LAYERS_PATH_ENV "VK_LAYER_PATH" +#define ENABLED_LAYERS_ENV "VK_INSTANCE_LAYERS" + +#if COMMON_UNIX_PLATFORMS +/* Linux-specific common code: */ + +// VK Library Filenames, Paths, etc.: +#define PATH_SEPARATOR ':' +#define DIRECTORY_SYMBOL '/' + +#define VULKAN_DIR "vulkan/" +#define VULKAN_ICDCONF_DIR "icd.d" +#define VULKAN_ICD_DIR "icd" +#define VULKAN_SETTINGSCONF_DIR "settings.d" +#define VULKAN_ELAYERCONF_DIR "explicit_layer.d" +#define VULKAN_ILAYERCONF_DIR "implicit_layer.d" +#define VULKAN_LAYER_DIR "layer" + +#define VK_DRIVERS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_ICDCONF_DIR +#define VK_SETTINGS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_SETTINGSCONF_DIR +#define VK_ELAYERS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_ELAYERCONF_DIR +#define VK_ILAYERS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_ILAYERCONF_DIR + +#define VK_DRIVERS_INFO_REGISTRY_LOC "" +#define VK_ELAYERS_INFO_REGISTRY_LOC "" +#define VK_ILAYERS_INFO_REGISTRY_LOC "" +#define VK_SETTINGS_INFO_REGISTRY_LOC "" + +#if defined(__QNX__) +#ifndef SYSCONFDIR +#define SYSCONFDIR "/etc" +#endif +#endif + +// C99: +#define PRINTF_SIZE_T_SPECIFIER "%zu" + +// Dynamic Loading of libraries: +typedef void *loader_platform_dl_handle; + +// Threads: +typedef pthread_t loader_platform_thread; + +// Thread IDs: +typedef pthread_t loader_platform_thread_id; + +// Thread mutex: +typedef pthread_mutex_t loader_platform_thread_mutex; + +typedef pthread_cond_t loader_platform_thread_cond; + +#elif defined(_WIN32) +/* Windows-specific common code: */ +// VK Library Filenames, Paths, etc.: +#define PATH_SEPARATOR ';' +#define DIRECTORY_SYMBOL '\\' +#define DEFAULT_VK_REGISTRY_HIVE HKEY_LOCAL_MACHINE +#define DEFAULT_VK_REGISTRY_HIVE_STR "HKEY_LOCAL_MACHINE" +#define SECONDARY_VK_REGISTRY_HIVE HKEY_CURRENT_USER +#define SECONDARY_VK_REGISTRY_HIVE_STR "HKEY_CURRENT_USER" + +#define VK_DRIVERS_INFO_RELATIVE_DIR "" +#define VK_SETTINGS_INFO_RELATIVE_DIR "" +#define VK_ELAYERS_INFO_RELATIVE_DIR "" +#define VK_ILAYERS_INFO_RELATIVE_DIR "" + +#define VK_VARIANT_REG_STR "" +#define VK_VARIANT_REG_STR_W L"" + +#define VK_DRIVERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\Drivers" +#define VK_ELAYERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\ExplicitLayers" +#define VK_ILAYERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\ImplicitLayers" +#define VK_SETTINGS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\LoaderSettings" + +#define PRINTF_SIZE_T_SPECIFIER "%Iu" + +// Dynamic Loading: +typedef HMODULE loader_platform_dl_handle; + +// Threads: +typedef HANDLE loader_platform_thread; + +// Thread IDs: +typedef DWORD loader_platform_thread_id; + +// Thread mutex: +typedef CRITICAL_SECTION loader_platform_thread_mutex; + +typedef CONDITION_VARIABLE loader_platform_thread_cond; + +#else + +#warning The "vk_loader_platform.h" file must be modified for this OS. + +// NOTE: In order to support another OS, an #elif needs to be added (above the +// "#else // defined(_WIN32)") for that OS, and OS-specific versions of the +// contents of this file must be created, or extend one of the existing OS specific +// sections with the necessary changes. + +#endif + +// controls whether loader_platform_close_library() closes the libraries or not - controlled by an environment variables +extern bool loader_disable_dynamic_library_unloading; + +// Returns true if the DIRECTORY_SYMBOL is contained within path +static inline bool loader_platform_is_path(const char *path) { return strchr(path, DIRECTORY_SYMBOL) != NULL; } + +// The loader has various initialization tasks which it must do before user code can run. This includes initializing synchronization +// objects, determining the log level, writing the version of the loader to the log, and loading dll's (on windows). On linux, the +// solution is simply running the initialization code in __attribute__((constructor)), which MacOS uses when the loader is +// dynamically linked. When statically linking on MacOS, the setup code instead uses pthread_once to run the logic a single time +// regardless of which API function the application calls first. On Windows, the equivalent way to run code at dll load time is +// DllMain which has many limitations placed upon it. Instead, the Windows code follows MacOS and does initialization in the first +// API call made, using InitOnceExecuteOnce, except for initialization primitives which must be done in DllMain. This is because +// there is no way to clean up the resources allocated by anything allocated by once init. + +#if defined(APPLE_STATIC_LOADER) +static inline void loader_platform_thread_once_fn(pthread_once_t *ctl, void (*func)(void)) { + assert(func != NULL); + assert(ctl != NULL); + pthread_once(ctl, func); +} +#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var) pthread_once_t var = PTHREAD_ONCE_INIT; +#define LOADER_PLATFORM_THREAD_ONCE_EXTERN_DEFINITION(var) extern pthread_once_t var; +#define LOADER_PLATFORM_THREAD_ONCE(ctl, func) loader_platform_thread_once_fn(ctl, func); +#elif defined(WIN32) +static inline void loader_platform_thread_win32_once_fn(INIT_ONCE *ctl, PINIT_ONCE_FN func) { + InitOnceExecuteOnce(ctl, func, NULL, NULL); +} +#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var) INIT_ONCE var = INIT_ONCE_STATIC_INIT; +#define LOADER_PLATFORM_THREAD_ONCE_EXTERN_DEFINITION(var) extern INIT_ONCE var; +#define LOADER_PLATFORM_THREAD_ONCE(ctl, func) loader_platform_thread_win32_once_fn(ctl, func); +#else +#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var) +#define LOADER_PLATFORM_THREAD_ONCE_EXTERN_DEFINITION(var) +#define LOADER_PLATFORM_THREAD_ONCE(ctl, func) + +#endif + +#if COMMON_UNIX_PLATFORMS + +// File IO +static inline bool loader_platform_file_exists(const char *path) { + if (access(path, F_OK)) + return false; + else + return true; +} + +// Returns true if the given string appears to be a relative or absolute +// path, as opposed to a bare filename. +static inline bool loader_platform_is_path_absolute(const char *path) { + if (path[0] == '/') + return true; + else + return false; +} + +static inline char *loader_platform_dirname(char *path) { return dirname(path); } + +// loader_platform_executable_path finds application path + name. +// Path cannot be longer than 1024, returns NULL if it is greater than that. +#if defined(__linux__) || defined(__redox__) || defined(__GNU__) +static inline char *loader_platform_executable_path(char *buffer, size_t size) { + ssize_t count = readlink("/proc/self/exe", buffer, size); + if (count == -1) return NULL; + if (count == 0) return NULL; + buffer[count] = '\0'; + return buffer; +} +#elif defined(__APPLE__) +#include +// TARGET_OS_IPHONE isn't just iOS it's also iOS/tvOS/watchOS. See TargetConditionals.h documentation. +#if TARGET_OS_IPHONE +static inline char *loader_platform_executable_path(char *buffer, size_t size) { + (void)size; + buffer[0] = '\0'; + return buffer; +} +#endif +#if TARGET_OS_OSX +#include +static inline char *loader_platform_executable_path(char *buffer, size_t size) { + // proc_pidpath takes a uint32_t for the buffer size + if (size > UINT32_MAX) { + return NULL; + } + pid_t pid = getpid(); + int ret = proc_pidpath(pid, buffer, (uint32_t)size); + if (ret <= 0) { + return NULL; + } + buffer[ret] = '\0'; + return buffer; +} +#endif +#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) +#include +static inline char *loader_platform_executable_path(char *buffer, size_t size) { + int mib[] = { + CTL_KERN, +#if defined(__NetBSD__) + KERN_PROC_ARGS, + -1, + KERN_PROC_PATHNAME, +#else + KERN_PROC, + KERN_PROC_PATHNAME, + -1, +#endif + }; + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), buffer, &size, NULL, 0) < 0) { + return NULL; + } + + return buffer; +} +#elif defined(__Fuchsia__) || defined(__OpenBSD__) +static inline char *loader_platform_executable_path(char *buffer, size_t size) { return NULL; } +#elif defined(__QNX__) + +#ifndef SYSCONFDIR +#define SYSCONFDIR "/etc" +#endif + +#include +#include + +static inline char *loader_platform_executable_path(char *buffer, size_t size) { + int fd = open("/proc/self/exefile", O_RDONLY); + size_t rdsize; + + if (fd == -1) { + return NULL; + } + + rdsize = read(fd, buffer, size); + if (rdsize == size) { + return NULL; + } + buffer[rdsize] = 0x00; + close(fd); + + return buffer; +} +#endif // defined (__QNX__) + +// Compatibility with compilers that don't support __has_feature +#if !defined(__has_feature) +#define __has_feature(x) 0 +#endif + +#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) +#define LOADER_ADDRESS_SANITIZER_ACTIVE // TODO: Add proper build flag for ASAN support +#endif + +// When loading the library, we use RTLD_LAZY so that not all symbols have to be +// resolved at this time (which improves performance). Note that if not all symbols +// can be resolved, this could cause crashes later. Use the LD_BIND_NOW environment +// variable to force all symbols to be resolved here. +#define LOADER_DLOPEN_MODE (RTLD_LAZY | RTLD_LOCAL) + +#if defined(__Fuchsia__) +static inline loader_platform_dl_handle loader_platform_open_driver(const char *libPath) { + return dlopen_fuchsia(libPath, LOADER_DLOPEN_MODE, true); +} +static inline loader_platform_dl_handle loader_platform_open_library(const char *libPath) { + return dlopen_fuchsia(libPath, LOADER_DLOPEN_MODE, false); +} +#else +static inline loader_platform_dl_handle loader_platform_open_library(const char *libPath) { + return dlopen(libPath, LOADER_DLOPEN_MODE); +} +#endif + +static inline const char *loader_platform_open_library_error(const char *libPath) { + (void)libPath; +#if defined(__Fuchsia__) + return dlerror_fuchsia(); +#else + return dlerror(); +#endif +} +static inline void loader_platform_close_library(loader_platform_dl_handle library) { + if (!loader_disable_dynamic_library_unloading) { + dlclose(library); + } else { + (void)library; + } +} +static inline void *loader_platform_get_proc_address(loader_platform_dl_handle library, const char *name) { + assert(library); + assert(name); + return dlsym(library, name); +} +static inline const char *loader_platform_get_proc_address_error(const char *name) { + (void)name; + return dlerror(); +} + +// Thread mutex: +static inline void loader_platform_thread_create_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_init(pMutex, NULL); } +static inline void loader_platform_thread_lock_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_lock(pMutex); } +static inline void loader_platform_thread_unlock_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_unlock(pMutex); } +static inline void loader_platform_thread_delete_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_destroy(pMutex); } + +static inline void *thread_safe_strtok(char *str, const char *delim, char **saveptr) { return strtok_r(str, delim, saveptr); } + +static inline FILE *loader_fopen(const char *fileName, const char *mode) { return fopen(fileName, mode); } +static inline char *loader_strncat(char *dest, size_t dest_sz, const char *src, size_t count) { + (void)dest_sz; + return strncat(dest, src, count); +} +static inline char *loader_strncpy(char *dest, size_t dest_sz, const char *src, size_t count) { + (void)dest_sz; + return strncpy(dest, src, count); +} + +#elif defined(_WIN32) + +// Get the key for the plug n play driver registry +// The string returned by this function should NOT be freed +static inline const char *LoaderPnpDriverRegistry() { + BOOL is_wow; + IsWow64Process(GetCurrentProcess(), &is_wow); + return is_wow ? "Vulkan" VK_VARIANT_REG_STR "DriverNameWow" : "Vulkan" VK_VARIANT_REG_STR "DriverName"; +} +static inline const wchar_t *LoaderPnpDriverRegistryWide() { + BOOL is_wow; + IsWow64Process(GetCurrentProcess(), &is_wow); + return is_wow ? L"Vulkan" VK_VARIANT_REG_STR_W L"DriverNameWow" : L"Vulkan" VK_VARIANT_REG_STR_W L"DriverName"; +} + +// Get the key for the plug 'n play explicit layer registry +// The string returned by this function should NOT be freed +static inline const char *LoaderPnpELayerRegistry() { + BOOL is_wow; + IsWow64Process(GetCurrentProcess(), &is_wow); + return is_wow ? "Vulkan" VK_VARIANT_REG_STR "ExplicitLayersWow" : "Vulkan" VK_VARIANT_REG_STR "ExplicitLayers"; +} +static inline const wchar_t *LoaderPnpELayerRegistryWide() { + BOOL is_wow; + IsWow64Process(GetCurrentProcess(), &is_wow); + return is_wow ? L"Vulkan" VK_VARIANT_REG_STR_W L"ExplicitLayersWow" : L"Vulkan" VK_VARIANT_REG_STR_W L"ExplicitLayers"; +} + +// Get the key for the plug 'n play implicit layer registry +// The string returned by this function should NOT be freed +static inline const char *LoaderPnpILayerRegistry() { + BOOL is_wow; + IsWow64Process(GetCurrentProcess(), &is_wow); + return is_wow ? "Vulkan" VK_VARIANT_REG_STR "ImplicitLayersWow" : "Vulkan" VK_VARIANT_REG_STR "ImplicitLayers"; +} +static inline const wchar_t *LoaderPnpILayerRegistryWide() { + BOOL is_wow; + IsWow64Process(GetCurrentProcess(), &is_wow); + return is_wow ? L"Vulkan" VK_VARIANT_REG_STR_W L"ImplicitLayersWow" : L"Vulkan" VK_VARIANT_REG_STR_W L"ImplicitLayers"; +} + +// File IO +static inline bool loader_platform_file_exists(const char *path) { + int path_utf16_size = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); + if (path_utf16_size <= 0) { + return false; + } + wchar_t *path_utf16 = (wchar_t *)loader_stack_alloc(path_utf16_size * sizeof(wchar_t)); + if (MultiByteToWideChar(CP_UTF8, 0, path, -1, path_utf16, path_utf16_size) != path_utf16_size) { + return false; + } + if (_waccess(path_utf16, 0) == -1) + return false; + else + return true; +} + +// Returns true if the given string appears to be a relative or absolute +// path, as opposed to a bare filename. +static inline bool loader_platform_is_path_absolute(const char *path) { + if (!path || !*path) { + return false; + } + if (*path == DIRECTORY_SYMBOL || path[1] == ':') { + return true; + } + return false; +} + +// WIN32 runtime doesn't have dirname(). +static inline char *loader_platform_dirname(char *path) { + char *current, *next; + + // TODO/TBD: Do we need to deal with the Windows's ":" character? + + for (current = path; *current != '\0'; current = next) { + next = strchr(current, DIRECTORY_SYMBOL); + if (next == NULL) { + if (current != path) *(current - 1) = '\0'; + return path; + } else { + // Point one character past the DIRECTORY_SYMBOL: + next++; + } + } + return path; +} + +static inline char *loader_platform_executable_path(char *buffer, size_t size) { + wchar_t *buffer_utf16 = (wchar_t *)loader_stack_alloc(size * sizeof(wchar_t)); + DWORD ret = GetModuleFileNameW(NULL, buffer_utf16, (DWORD)size); + if (ret == 0) { + return NULL; + } + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + return NULL; + } + int buffer_utf8_size = WideCharToMultiByte(CP_UTF8, 0, buffer_utf16, -1, NULL, 0, NULL, NULL); + if (buffer_utf8_size <= 0 || (size_t)buffer_utf8_size > size) { + return NULL; + } + if (WideCharToMultiByte(CP_UTF8, 0, buffer_utf16, -1, buffer, buffer_utf8_size, NULL, NULL) != buffer_utf8_size) { + return NULL; + } + return buffer; +} + +// Dynamic Loading: +static inline loader_platform_dl_handle loader_platform_open_library(const char *lib_path) { + int lib_path_utf16_size = MultiByteToWideChar(CP_UTF8, 0, lib_path, -1, NULL, 0); + if (lib_path_utf16_size <= 0) { + return NULL; + } + wchar_t *lib_path_utf16 = (wchar_t *)loader_stack_alloc(lib_path_utf16_size * sizeof(wchar_t)); + if (MultiByteToWideChar(CP_UTF8, 0, lib_path, -1, lib_path_utf16, lib_path_utf16_size) != lib_path_utf16_size) { + return NULL; + } + // Try loading the library the original way first. + loader_platform_dl_handle lib_handle = LoadLibraryW(lib_path_utf16); + if (lib_handle == NULL && GetLastError() == ERROR_MOD_NOT_FOUND) { + // If that failed, then try loading it with broader search folders. + lib_handle = LoadLibraryExW(lib_path_utf16, NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); + } + return lib_handle; +} +static inline const char *loader_platform_open_library_error(const char *libPath) { + static char errorMsg[512]; + (void)snprintf(errorMsg, 511, "Failed to open dynamic library \"%s\" with error %lu", libPath, GetLastError()); + return errorMsg; +} +static inline void loader_platform_close_library(loader_platform_dl_handle library) { + if (!loader_disable_dynamic_library_unloading) { + FreeLibrary(library); + } else { + (void)library; + } +} +static inline void *loader_platform_get_proc_address(loader_platform_dl_handle library, const char *name) { + assert(library); + assert(name); + return (void *)GetProcAddress(library, name); +} +static inline const char *loader_platform_get_proc_address_error(const char *name) { + static char errorMsg[120]; + (void)snprintf(errorMsg, 119, "Failed to find function \"%s\" in dynamic library", name); + return errorMsg; +} + +// Thread mutex: +static inline void loader_platform_thread_create_mutex(loader_platform_thread_mutex *pMutex) { InitializeCriticalSection(pMutex); } +static inline void loader_platform_thread_lock_mutex(loader_platform_thread_mutex *pMutex) { EnterCriticalSection(pMutex); } +static inline void loader_platform_thread_unlock_mutex(loader_platform_thread_mutex *pMutex) { LeaveCriticalSection(pMutex); } +static inline void loader_platform_thread_delete_mutex(loader_platform_thread_mutex *pMutex) { DeleteCriticalSection(pMutex); } + +static inline void *thread_safe_strtok(char *str, const char *delimiters, char **context) { + return strtok_s(str, delimiters, context); +} + +static inline FILE *loader_fopen(const char *fileName, const char *mode) { + FILE *file = NULL; + errno_t err = fopen_s(&file, fileName, mode); + if (err != 0) return NULL; + return file; +} + +static inline char *loader_strncat(char *dest, size_t dest_sz, const char *src, size_t count) { + errno_t err = strncat_s(dest, dest_sz, src, count); + if (err != 0) return NULL; + return dest; +} + +static inline char *loader_strncpy(char *dest, size_t dest_sz, const char *src, size_t count) { + errno_t err = strncpy_s(dest, dest_sz, src, count); + if (err != 0) return NULL; + return dest; +} + +#else // defined(_WIN32) + +#warning The "vk_loader_platform.h" file must be modified for this OS. + +// NOTE: In order to support another OS, an #elif needs to be added (above the +// "#else // defined(_WIN32)") for that OS, and OS-specific versions of the +// contents of this file must be created. + +// NOTE: Other OS-specific changes are also needed for this OS. Search for +// files with "WIN32" in it, as a quick way to find files that must be changed. + +#endif // defined(_WIN32) diff --git a/local/recipes/libs/vulkan-loader/source/loader/vulkan-1.def b/local/recipes/libs/vulkan-loader/source/loader/vulkan-1.def new file mode 100644 index 0000000000..de598bc075 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/vulkan-1.def @@ -0,0 +1,298 @@ + +;;;; Begin Copyright Notice ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Copyright (c) 2015-2024 The Khronos Group Inc. +; Copyright (c) 2015-2024 Valve Corporation +; Copyright (c) 2015-2024 LunarG, 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. +; +; Author: Courtney Goeltzenleuchter +; Author: Charles Giessen +; +;;;; End Copyright Notice ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +LIBRARY vulkan-1.dll +EXPORTS + vkCreateInstance + vkDestroyInstance + vkEnumeratePhysicalDevices + vkGetPhysicalDeviceFeatures + vkGetPhysicalDeviceFormatProperties + vkGetPhysicalDeviceImageFormatProperties + vkGetPhysicalDeviceProperties + vkGetPhysicalDeviceQueueFamilyProperties + vkGetPhysicalDeviceMemoryProperties + vkGetInstanceProcAddr + vkGetDeviceProcAddr + vkCreateDevice + vkDestroyDevice + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceExtensionProperties + vkEnumerateInstanceLayerProperties + vkEnumerateDeviceLayerProperties + vkGetDeviceQueue + vkQueueSubmit + vkQueueWaitIdle + vkDeviceWaitIdle + vkAllocateMemory + vkFreeMemory + vkMapMemory + vkUnmapMemory + vkFlushMappedMemoryRanges + vkInvalidateMappedMemoryRanges + vkGetDeviceMemoryCommitment + vkBindBufferMemory + vkBindImageMemory + vkGetBufferMemoryRequirements + vkGetImageMemoryRequirements + vkGetImageSparseMemoryRequirements + vkGetPhysicalDeviceSparseImageFormatProperties + vkQueueBindSparse + vkCreateFence + vkDestroyFence + vkResetFences + vkGetFenceStatus + vkWaitForFences + vkCreateSemaphore + vkDestroySemaphore + vkCreateEvent + vkDestroyEvent + vkGetEventStatus + vkSetEvent + vkResetEvent + vkCreateQueryPool + vkDestroyQueryPool + vkGetQueryPoolResults + vkCreateBuffer + vkDestroyBuffer + vkCreateBufferView + vkDestroyBufferView + vkCreateImage + vkDestroyImage + vkGetImageSubresourceLayout + vkCreateImageView + vkDestroyImageView + vkCreateShaderModule + vkDestroyShaderModule + vkCreatePipelineCache + vkDestroyPipelineCache + vkGetPipelineCacheData + vkMergePipelineCaches + vkCreateGraphicsPipelines + vkCreateComputePipelines + vkDestroyPipeline + vkCreatePipelineLayout + vkDestroyPipelineLayout + vkCreateSampler + vkDestroySampler + vkCreateDescriptorSetLayout + vkDestroyDescriptorSetLayout + vkCreateDescriptorPool + vkDestroyDescriptorPool + vkResetDescriptorPool + vkAllocateDescriptorSets + vkFreeDescriptorSets + vkUpdateDescriptorSets + vkCreateFramebuffer + vkDestroyFramebuffer + vkCreateRenderPass + vkDestroyRenderPass + vkGetRenderAreaGranularity + vkCreateCommandPool + vkDestroyCommandPool + vkResetCommandPool + vkAllocateCommandBuffers + vkFreeCommandBuffers + vkBeginCommandBuffer + vkEndCommandBuffer + vkResetCommandBuffer + vkCmdBindPipeline + vkCmdSetViewport + vkCmdSetScissor + vkCmdSetLineWidth + vkCmdSetDepthBias + vkCmdSetBlendConstants + vkCmdSetDepthBounds + vkCmdSetStencilCompareMask + vkCmdSetStencilWriteMask + vkCmdSetStencilReference + vkCmdBindDescriptorSets + vkCmdBindIndexBuffer + vkCmdBindVertexBuffers + vkCmdDraw + vkCmdDrawIndexed + vkCmdDrawIndirect + vkCmdDrawIndexedIndirect + vkCmdDispatch + vkCmdDispatchIndirect + vkCmdCopyBuffer + vkCmdCopyImage + vkCmdBlitImage + vkCmdCopyBufferToImage + vkCmdCopyImageToBuffer + vkCmdUpdateBuffer + vkCmdFillBuffer + vkCmdClearColorImage + vkCmdClearDepthStencilImage + vkCmdClearAttachments + vkCmdResolveImage + vkCmdSetEvent + vkCmdResetEvent + vkCmdWaitEvents + vkCmdPipelineBarrier + vkCmdBeginQuery + vkCmdEndQuery + vkCmdResetQueryPool + vkCmdWriteTimestamp + vkCmdCopyQueryPoolResults + vkCmdPushConstants + vkCmdBeginRenderPass + vkCmdNextSubpass + vkCmdEndRenderPass + vkCmdExecuteCommands + vkDestroySurfaceKHR + vkGetPhysicalDeviceSurfaceSupportKHR + vkGetPhysicalDeviceSurfaceCapabilitiesKHR + vkGetPhysicalDeviceSurfaceFormatsKHR + vkGetPhysicalDeviceSurfaceCapabilities2KHR + vkGetPhysicalDeviceSurfaceFormats2KHR + vkGetPhysicalDeviceSurfacePresentModesKHR + vkCreateSwapchainKHR + vkDestroySwapchainKHR + vkGetSwapchainImagesKHR + vkAcquireNextImageKHR + vkQueuePresentKHR + vkGetPhysicalDeviceDisplayPropertiesKHR + vkGetPhysicalDeviceDisplayPlanePropertiesKHR + vkGetDisplayPlaneSupportedDisplaysKHR + vkGetDisplayModePropertiesKHR + vkCreateDisplayModeKHR + vkGetDisplayPlaneCapabilitiesKHR + vkCreateDisplayPlaneSurfaceKHR + vkCreateSharedSwapchainsKHR + vkCreateWin32SurfaceKHR + vkCreateHeadlessSurfaceEXT + vkGetPhysicalDeviceWin32PresentationSupportKHR + + vkEnumerateInstanceVersion + vkEnumeratePhysicalDeviceGroups + vkGetPhysicalDeviceFeatures2 + vkGetPhysicalDeviceProperties2 + vkGetPhysicalDeviceFormatProperties2 + vkGetPhysicalDeviceQueueFamilyProperties2 + vkGetPhysicalDeviceMemoryProperties2 + vkGetPhysicalDeviceSparseImageFormatProperties2 + vkGetPhysicalDeviceExternalBufferProperties + vkGetPhysicalDeviceExternalSemaphoreProperties + vkGetPhysicalDeviceExternalFenceProperties + vkBindBufferMemory2 + vkBindImageMemory2 + vkGetDeviceGroupPeerMemoryFeatures + vkCmdSetDeviceMask + vkCmdDispatchBase + vkGetImageMemoryRequirements2 + vkGetBufferMemoryRequirements2 + vkTrimCommandPool + vkGetDeviceQueue2 + vkCreateSamplerYcbcrConversion + vkDestroySamplerYcbcrConversion + vkGetDescriptorSetLayoutSupport + vkGetDeviceGroupPresentCapabilitiesKHR + vkGetDeviceGroupSurfacePresentModesKHR + vkGetPhysicalDevicePresentRectanglesKHR + vkAcquireNextImage2KHR + vkCreateDescriptorUpdateTemplate + vkDestroyDescriptorUpdateTemplate + vkUpdateDescriptorSetWithTemplate + + vkGetPhysicalDeviceDisplayProperties2KHR + vkGetPhysicalDeviceDisplayPlaneProperties2KHR + vkGetDisplayModeProperties2KHR + vkGetDisplayPlaneCapabilities2KHR + + vkGetImageSparseMemoryRequirements2 + vkGetPhysicalDeviceImageFormatProperties2 + + vkCreateRenderPass2 + vkCmdBeginRenderPass2 + vkCmdNextSubpass2 + vkCmdEndRenderPass2 + vkCmdDrawIndirectCount + vkCmdDrawIndexedIndirectCount + vkGetSemaphoreCounterValue + vkWaitSemaphores + vkSignalSemaphore + vkGetBufferDeviceAddress + vkGetBufferOpaqueCaptureAddress + vkGetDeviceMemoryOpaqueCaptureAddress + vkResetQueryPool + + vkGetPhysicalDeviceToolProperties + + vkCreatePrivateDataSlot + vkDestroyPrivateDataSlot + vkSetPrivateData + vkGetPrivateData + vkCmdSetEvent2 + vkCmdResetEvent2 + vkCmdWaitEvents2 + vkCmdPipelineBarrier2 + vkCmdWriteTimestamp2 + vkQueueSubmit2 + vkCmdCopyBuffer2 + vkCmdCopyImage2 + vkCmdCopyBufferToImage2 + vkCmdCopyImageToBuffer2 + vkCmdBlitImage2 + vkCmdResolveImage2 + vkCmdBeginRendering + vkCmdEndRendering + vkCmdSetCullMode + vkCmdSetFrontFace + vkCmdSetPrimitiveTopology + vkCmdSetViewportWithCount + vkCmdSetScissorWithCount + vkCmdBindVertexBuffers2 + vkCmdSetDepthTestEnable + vkCmdSetDepthWriteEnable + vkCmdSetDepthCompareOp + vkCmdSetDepthBoundsTestEnable + vkCmdSetStencilTestEnable + vkCmdSetStencilOp + vkCmdSetRasterizerDiscardEnable + vkCmdSetDepthBiasEnable + vkCmdSetPrimitiveRestartEnable + vkGetDeviceBufferMemoryRequirements + vkGetDeviceImageMemoryRequirements + vkGetDeviceImageSparseMemoryRequirements + + vkCmdSetLineStipple + vkMapMemory2 + vkUnmapMemory2 + vkCmdBindIndexBuffer2 + vkGetRenderingAreaGranularity + vkGetDeviceImageSubresourceLayout + vkGetImageSubresourceLayout2 + vkCmdPushDescriptorSet + vkCmdPushDescriptorSetWithTemplate + vkCmdSetRenderingAttachmentLocations + vkCmdSetRenderingInputAttachmentIndices + vkCmdBindDescriptorSets2 + vkCmdPushConstants2 + vkCmdPushDescriptorSet2 + vkCmdPushDescriptorSetWithTemplate2 + vkCopyMemoryToImage + vkCopyImageToMemory + vkCopyImageToImage + vkTransitionImageLayout diff --git a/local/recipes/libs/vulkan-loader/source/loader/vulkan.pc.in b/local/recipes/libs/vulkan-loader/source/loader/vulkan.pc.in new file mode 100644 index 0000000000..6a285f267c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/vulkan.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR_PC@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR_PC@ + +Name: Vulkan-Loader +Description: Vulkan Loader +Version: @VULKAN_LOADER_VERSION@ +Libs: -L${libdir} -lvulkan@VULKAN_LIB_SUFFIX@ +Cflags: -I${includedir} diff --git a/local/recipes/libs/vulkan-loader/source/loader/wsi.c b/local/recipes/libs/vulkan-loader/source/loader/wsi.c new file mode 100644 index 0000000000..af821361b3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/wsi.c @@ -0,0 +1,3087 @@ +/* + * Copyright (c) 2015-2022 The Khronos Group Inc. + * Copyright (c) 2015-2022 Valve Corporation + * Copyright (c) 2015-2022 LunarG, 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. + * + * Author: Ian Elliott + * Author: Jon Ashburn + * Author: Ian Elliott + * Author: Mark Lobodzinski + * Author: Lenny Komow + * Author: Charles Giessen + */ + +#include +#include + +#include + +#include "allocation.h" +#include "loader.h" +#include "log.h" +#include "stack_allocation.h" +#include "vk_loader_platform.h" +#include "wsi.h" + +// The first ICD/Loader interface that support querying the SurfaceKHR from +// the ICDs. +#define ICD_VER_SUPPORTS_ICD_SURFACE_KHR 3 + +struct loader_struct_type_info { + VkStructureType stype; + size_t size; +}; + +// This function unwraps the application-provided surface handle into the ICD-specific surface handle +// corresponding to the specified physical device. If the ICD-specific surface handle does not exist +// yet, then this function also creates of the ICD-specific surface object. This enables lazy creation +// of ICD-specific surface objects and therefore avoids creating surfaces for ICDs that may not be able +// to or should not create the specific type of surface (one example is the VK_KHR_display extension +// where the VkDisplayModeKHR handles the surfaces are created from are physical-device-specific +// non-dispatchable handles and therefore they should not be passed down to a foreign ICD). +VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *surface) { + VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)(*surface); + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (icd_surface->base.platform == VK_ICD_WSI_PLATFORM_ANDROID) { + // Android does not use ICD-created surfaces + // NOTE: This may be incorrect and in fact the legacy code could result in out-of-bounds + // accesses to VkIcdSurface::surface_index in case of Android, but we preserved the legacy + // behavior (while also eliminating the chance for out-of-bounds accesses). + return VK_SUCCESS; + } +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_MACOS_MVK) + if (icd_surface->base.platform == VK_ICD_WSI_PLATFORM_IOS) { + // iOS does not use ICD-created surfaces (matching legacy behavior) + // NOTE: This may be incorrect and in fact the legacy code could result in out-of-bounds + // accesses to VkIcdSurface::surface_index in case of Android, but we preserved the legacy + // behavior (while also eliminating the chance for out-of-bounds accesses). + return VK_SUCCESS; + } +#endif // VK_USE_PLATFORM_MACOS_MVK + + if (NULL == icd_term->surface_list.list || + icd_term->surface_list.capacity <= icd_surface->surface_index * sizeof(VkSurfaceKHR)) { + // This surface handle is not one that was created by the loader, therefore we simply return + // the input surface handle unmodified. This matches legacy behavior. + return VK_SUCCESS; + } + + VkResult result = VK_SUCCESS; + if (icd_term->scanned_icd->interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR) { + VkAllocationCallbacks *pAllocator = icd_surface->callbacks_valid ? &icd_surface->callbacks : NULL; + if (VK_NULL_HANDLE == icd_term->surface_list.list[icd_surface->surface_index]) { + // If the surface does not exist yet for the target ICD, then create it lazily + switch (icd_surface->base.platform) { +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + case VK_ICD_WSI_PLATFORM_WAYLAND: + if (NULL != icd_term->dispatch.CreateWaylandSurfaceKHR && + icd_term->enabled_instance_extensions.khr_wayland_surface) { + result = icd_term->dispatch.CreateWaylandSurfaceKHR( + icd_term->instance, (const VkWaylandSurfaceCreateInfoKHR *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + case VK_ICD_WSI_PLATFORM_WIN32: + if (NULL != icd_term->dispatch.CreateWin32SurfaceKHR && + icd_term->enabled_instance_extensions.khr_win32_surface) { + result = icd_term->dispatch.CreateWin32SurfaceKHR( + icd_term->instance, (const VkWin32SurfaceCreateInfoKHR *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) + case VK_ICD_WSI_PLATFORM_XCB: + if (NULL != icd_term->dispatch.CreateXcbSurfaceKHR && icd_term->enabled_instance_extensions.khr_xcb_surface) { + result = icd_term->dispatch.CreateXcbSurfaceKHR( + icd_term->instance, (const VkXcbSurfaceCreateInfoKHR *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) + case VK_ICD_WSI_PLATFORM_XLIB: + if (NULL != icd_term->dispatch.CreateXlibSurfaceKHR && icd_term->enabled_instance_extensions.khr_xlib_surface) { + result = icd_term->dispatch.CreateXlibSurfaceKHR( + icd_term->instance, (const VkXlibSurfaceCreateInfoKHR *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_XLIB_KHR + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + case VK_ICD_WSI_PLATFORM_MACOS: + if (NULL != icd_term->dispatch.CreateMacOSSurfaceMVK && + icd_term->enabled_instance_extensions.mvk_macos_surface) { + result = icd_term->dispatch.CreateMacOSSurfaceMVK( + icd_term->instance, (const VkMacOSSurfaceCreateInfoMVK *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_MACOS_MVK + + case VK_ICD_WSI_PLATFORM_DISPLAY: + if (NULL != icd_term->dispatch.CreateDisplayPlaneSurfaceKHR && + icd_term->enabled_instance_extensions.khr_display) { + result = icd_term->dispatch.CreateDisplayPlaneSurfaceKHR( + icd_term->instance, (const VkDisplaySurfaceCreateInfoKHR *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; + + case VK_ICD_WSI_PLATFORM_HEADLESS: + if (NULL != icd_term->dispatch.CreateHeadlessSurfaceEXT && + icd_term->enabled_instance_extensions.ext_headless_surface) { + result = icd_term->dispatch.CreateHeadlessSurfaceEXT( + icd_term->instance, (const VkHeadlessSurfaceCreateInfoEXT *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; + +#if defined(VK_USE_PLATFORM_METAL_EXT) + case VK_ICD_WSI_PLATFORM_METAL: + if (NULL != icd_term->dispatch.CreateMetalSurfaceEXT && + icd_term->enabled_instance_extensions.ext_metal_surface) { + result = icd_term->dispatch.CreateMetalSurfaceEXT( + icd_term->instance, (const VkMetalSurfaceCreateInfoEXT *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + case VK_ICD_WSI_PLATFORM_DIRECTFB: + if (NULL != icd_term->dispatch.CreateDirectFBSurfaceEXT && + icd_term->enabled_instance_extensions.ext_directfb_surface) { + result = icd_term->dispatch.CreateDirectFBSurfaceEXT( + icd_term->instance, (const VkDirectFBSurfaceCreateInfoEXT *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_VI_NN) + case VK_ICD_WSI_PLATFORM_VI: + if (NULL != icd_term->dispatch.CreateViSurfaceNN && icd_term->enabled_instance_extensions.nn_vi_surface) { + result = icd_term->dispatch.CreateViSurfaceNN( + icd_term->instance, (const VkViSurfaceCreateInfoNN *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_VI_NN + +#if defined(VK_USE_PLATFORM_GGP) + case VK_ICD_WSI_PLATFORM_GGP: + if (NULL != icd_term->dispatch.CreateStreamDescriptorSurfaceGGP && + icd_term->enabled_instance_extensions.qnx_screen_surface) { + result = icd_term->dispatch.CreateStreamDescriptorSurfaceGGP( + icd_term->instance, (const VkStreamDescriptorSurfaceCreateInfoGGP *)icd_surface->create_info, + pAllocator, &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + case VK_ICD_WSI_PLATFORM_SCREEN: + if (NULL != icd_term->dispatch.CreateScreenSurfaceQNX && + icd_term->enabled_instance_extensions.qnx_screen_surface) { + result = icd_term->dispatch.CreateScreenSurfaceQNX( + icd_term->instance, (const VkScreenSurfaceCreateInfoQNX *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#if defined(VK_USE_PLATFORM_FUCHSIA) + case VK_ICD_WSI_PLATFORM_FUCHSIA: + if (NULL != icd_term->dispatch.CreateImagePipeSurfaceFUCHSIA && + icd_term->enabled_instance_extensions.fuchsia_imagepipe_surface) { + result = icd_term->dispatch.CreateImagePipeSurfaceFUCHSIA( + icd_term->instance, (const VkImagePipeSurfaceCreateInfoFUCHSIA *)icd_surface->create_info, pAllocator, + &icd_term->surface_list.list[icd_surface->surface_index]); + } else { + result = VK_ERROR_EXTENSION_NOT_PRESENT; + } + break; +#endif // VK_USE_PLATFORM_FUCHSIA + + default: + // Not supported + result = VK_ERROR_EXTENSION_NOT_PRESENT; + break; + } + } + + *surface = icd_term->surface_list.list[icd_surface->surface_index]; + } + + return result; +} + +// Linux WSI surface extensions are not always compiled into the loader. (Assume +// for Windows the KHR_win32_surface is always compiled into loader). A given +// Linux build environment might not have the headers required for building one +// of the three extensions (Xlib, Xcb, Wayland). Thus, need to check if +// the built loader actually supports the particular Linux surface extension. +// If not supported by the built loader it will not be included in the list of +// enumerated instance extensions. This solves the issue where an ICD or layer +// advertises support for a given Linux surface extension but the loader was not +// built to support the extension. +bool wsi_unsupported_instance_extension(const VkExtensionProperties *ext_prop) { +#if !defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (!strcmp(ext_prop->extensionName, "VK_KHR_wayland_surface")) return true; +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if !defined(VK_USE_PLATFORM_XCB_KHR) + if (!strcmp(ext_prop->extensionName, "VK_KHR_xcb_surface")) return true; +#endif // VK_USE_PLATFORM_XCB_KHR +#if !defined(VK_USE_PLATFORM_XLIB_KHR) + if (!strcmp(ext_prop->extensionName, "VK_KHR_xlib_surface")) return true; +#endif // VK_USE_PLATFORM_XLIB_KHR +#if !defined(VK_USE_PLATFORM_DIRECTFB_EXT) + if (!strcmp(ext_prop->extensionName, "VK_EXT_directfb_surface")) return true; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if !defined(VK_USE_PLATFORM_SCREEN_QNX) + if (!strcmp(ext_prop->extensionName, "VK_QNX_screen_surface")) return true; +#endif // VK_USE_PLATFORM_SCREEN_QNX + + return false; +} + +// Functions for the VK_KHR_surface extension: + +// This is the trampoline entrypoint for DestroySurfaceKHR +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, + const VkAllocationCallbacks *pAllocator) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroySurfaceKHR: Invalid instance [VUID-vkDestroySurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + loader_inst->disp->layer_inst_disp.DestroySurfaceKHR(loader_inst->instance, surface, pAllocator); +} + +// This is the instance chain terminator function for DestroySurfaceKHR +VKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, + const VkAllocationCallbacks *pAllocator) { + struct loader_instance *loader_inst = loader_get_instance(instance); + + VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)(surface); + if (NULL != icd_surface) { + for (struct loader_icd_term *icd_term = loader_inst->icd_terms; icd_term != NULL; icd_term = icd_term->next) { + if (icd_term->enabled_instance_extensions.khr_surface && + icd_term->scanned_icd->interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR && + NULL != icd_term->dispatch.DestroySurfaceKHR && icd_term->surface_list.list[icd_surface->surface_index]) { + icd_term->dispatch.DestroySurfaceKHR(icd_term->instance, icd_term->surface_list.list[icd_surface->surface_index], + pAllocator); + icd_term->surface_list.list[icd_surface->surface_index] = (VkSurfaceKHR)(uintptr_t)NULL; + + } else { + // The real_icd_surface for any ICD not supporting the + // proper interface version should be NULL. If not, then + // we have a problem. + assert((VkSurfaceKHR)(uintptr_t)NULL == icd_term->surface_list.list[icd_surface->surface_index]); + } + } + if (NULL != icd_surface->create_info) { + loader_instance_heap_free(loader_inst, icd_surface->create_info); + } + loader_release_object_from_list(&loader_inst->surfaces_list, icd_surface->surface_index); + loader_instance_heap_free(loader_inst, (void *)(uintptr_t)surface); + } +} + +// This is the trampoline entrypoint for GetPhysicalDeviceSurfaceSupportKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, VkSurfaceKHR surface, + VkBool32 *pSupported) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfaceSupportKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfaceSupportKHR(unwrapped_phys_dev, queueFamilyIndex, surface, pSupported); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceSurfaceSupportKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, VkSurfaceKHR surface, + VkBool32 *pSupported) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_surface extension not enabled. vkGetPhysicalDeviceSurfaceSupportKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == pSupported) { + loader_log(loader_inst, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "NULL pointer passed into vkGetPhysicalDeviceSurfaceSupportKHR for pSupported!"); + abort(); + } + *pSupported = false; + + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfaceSupportKHR) { + // set pSupported to false as this driver doesn't support WSI functionality + *pSupported = false; + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceSurfaceSupportKHR!"); + return VK_SUCCESS; + } + + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + // set pSupported to false as this driver doesn't support WSI functionality + *pSupported = false; + return VK_SUCCESS; + } + + return icd_term->dispatch.GetPhysicalDeviceSurfaceSupportKHR(phys_dev_term->phys_dev, queueFamilyIndex, surface, pSupported); +} + +// This is the trampoline entrypoint for GetPhysicalDeviceSurfaceCapabilitiesKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfaceCapabilitiesKHR(unwrapped_phys_dev, surface, pSurfaceCapabilities); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceSurfaceCapabilitiesKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_surface extension not enabled. vkGetPhysicalDeviceSurfaceCapabilitiesKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == pSurfaceCapabilities) { + loader_log(loader_inst, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "NULL pointer passed into vkGetPhysicalDeviceSurfaceCapabilitiesKHR for pSurfaceCapabilities!"); + abort(); + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR) { + // Zero out the capabilities as this driver doesn't support WSI functionality + memset(pSurfaceCapabilities, 0, sizeof(VkSurfaceCapabilitiesKHR)); + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceSurfaceCapabilitiesKHR!"); + return VK_SUCCESS; + } + + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + + return icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev_term->phys_dev, surface, pSurfaceCapabilities); +} + +// This is the trampoline entrypoint for GetPhysicalDeviceSurfaceFormatsKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormatKHR *pSurfaceFormats) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfaceFormatsKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfaceFormatsKHR(unwrapped_phys_dev, surface, pSurfaceFormatCount, pSurfaceFormats); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceSurfaceFormatsKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormatKHR *pSurfaceFormats) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_surface extension not enabled. vkGetPhysicalDeviceSurfaceFormatsKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == pSurfaceFormatCount) { + loader_log(loader_inst, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "NULL pointer passed into vkGetPhysicalDeviceSurfaceFormatsKHR for pSurfaceFormatCount!"); + abort(); + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR) { + // Zero out the format count as this driver doesn't support WSI functionality + *pSurfaceFormatCount = 0; + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceSurfaceFormatsKHR!"); + return VK_SUCCESS; + } + + if (VK_NULL_HANDLE != surface) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + } + + return icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR(phys_dev_term->phys_dev, surface, pSurfaceFormatCount, + pSurfaceFormats); +} + +// This is the trampoline entrypoint for GetPhysicalDeviceSurfacePresentModesKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfacePresentModesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfacePresentModesKHR(unwrapped_phys_dev, surface, pPresentModeCount, pPresentModes); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceSurfacePresentModesKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_surface extension not enabled. vkGetPhysicalDeviceSurfacePresentModesKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == pPresentModeCount) { + loader_log(loader_inst, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0, + "NULL pointer passed into vkGetPhysicalDeviceSurfacePresentModesKHR for pPresentModeCount!"); + abort(); + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfacePresentModesKHR) { + // Zero out the present mode count as this driver doesn't support WSI functionality + *pPresentModeCount = 0; + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceSurfacePresentModesKHR!"); + return VK_SUCCESS; + } + + if (VK_NULL_HANDLE != surface) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + } + + return icd_term->dispatch.GetPhysicalDeviceSurfacePresentModesKHR(phys_dev_term->phys_dev, surface, pPresentModeCount, + pPresentModes); +} + +// Functions for the VK_KHR_swapchain extension: + +// This is the trampoline entrypoint for CreateSwapchainKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSwapchainKHR *pSwapchain) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSwapchainKHR: Invalid device [VUID-vkCreateSwapchainKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (NULL == disp->CreateSwapchainKHR) { + struct loader_device *dev = *((struct loader_device **)device); + loader_log(NULL != dev ? dev->phys_dev_term->this_icd_term->this_instance : NULL, + VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain " + "extension enabled?"); + abort(); + } + return disp->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSwapchainKHR Terminator: device handle. This is likely the result of a " + "layer wrapping device handles and failing to unwrap them in all functions. " + "[VUID-vkCreateSwapchainKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (NULL == pCreateInfo) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSwapchainKHR: Invalid pCreateInfo pointer [VUID-vkCreateSwapchainKHR-pCreateInfo-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + // Need to gracefully handle the function pointer not being found. + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.CreateSwapchainKHR) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain " + "extension enabled?"); + return VK_SUCCESS; + } + + VkSwapchainCreateInfoKHR create_info_copy = *pCreateInfo; + VkResult res = wsi_unwrap_icd_surface(icd_term, &create_info_copy.surface); + if (res != VK_SUCCESS) { + return res; + } + + return dev->loader_dispatch.extension_terminator_dispatch.CreateSwapchainKHR(device, &create_info_copy, pAllocator, pSwapchain); +} + +// This is the trampoline entrypoint for DestroySwapchainKHR +LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, + const VkAllocationCallbacks *pAllocator) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkDestroySwapchainKHR: Invalid device [VUID-vkDestroySwapchainKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp->DestroySwapchainKHR(device, swapchain, pAllocator); +} + +// This is the trampoline entrypoint for GetSwapchainImagesKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, + uint32_t *pSwapchainImageCount, VkImage *pSwapchainImages) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSwapchainImagesKHR: Invalid device [VUID-vkGetSwapchainImagesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages); +} + +// This is the trampoline entrypoint for AcquireNextImageKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, + VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireNextImageKHR: Invalid device [VUID-vkAcquireNextImageKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex); +} + +// This is the trampoline entrypoint for QueuePresentKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkQueuePresentKHR: Invalid queue [VUID-vkQueuePresentKHR-queue-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->QueuePresentKHR(queue, pPresentInfo); +} + +VkResult allocate_icd_surface_struct(struct loader_instance *instance, size_t base_size, size_t platform_size, + const VkAllocationCallbacks *pAllocator, VkIcdSurface **out_icd_surface) { + uint32_t next_index = 0; + VkIcdSurface *icd_surface = NULL; + VkResult res = loader_get_next_available_entry(instance, &instance->surfaces_list, &next_index, pAllocator); + if (res != VK_SUCCESS) { + goto out; + } + + // Next, if so, proceed with the implementation of this function: + icd_surface = loader_instance_heap_calloc(instance, sizeof(VkIcdSurface), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (icd_surface == NULL) { + res = VK_ERROR_OUT_OF_HOST_MEMORY; + goto out; + } + // Setup the new sizes and offsets so we can grow the structures in the + // future without having problems + icd_surface->base_size = (uint32_t)base_size; + icd_surface->platform_size = (uint32_t)platform_size; + icd_surface->non_platform_offset = (uint32_t)((uint8_t *)(&icd_surface->base_size) - (uint8_t *)icd_surface); + icd_surface->entire_size = sizeof(VkIcdSurface); + icd_surface->surface_index = next_index; + icd_surface->create_info = NULL; + + for (struct loader_icd_term *icd_term = instance->icd_terms; icd_term != NULL; icd_term = icd_term->next) { + if (icd_term->enabled_instance_extensions.khr_surface && + icd_term->scanned_icd->interface_version >= ICD_VER_SUPPORTS_ICD_SURFACE_KHR) { + if (icd_term->surface_list.list == NULL) { + res = + loader_init_generic_list(instance, (struct loader_generic_list *)&icd_term->surface_list, sizeof(VkSurfaceKHR)); + if (res != VK_SUCCESS) { + goto out; + } + } else if (icd_term->surface_list.capacity <= next_index * sizeof(VkSurfaceKHR)) { + res = loader_resize_generic_list(instance, (struct loader_generic_list *)&icd_term->surface_list); + if (res != VK_SUCCESS) { + goto out; + } + } + } + } + + *out_icd_surface = icd_surface; +out: + if (res != VK_SUCCESS) { + loader_instance_heap_free(instance, icd_surface); + // cleanup of icd_term->surface_list is done during instance destruction + } + return res; +} + +VkResult copy_surface_create_info(struct loader_instance *loader_inst, VkIcdSurface *icd_surface, const void *create_info, + size_t struct_type_info_count, const struct loader_struct_type_info *struct_type_info, + const char *base_struct_name, const VkAllocationCallbacks *pAllocator) { + size_t create_info_total_size = 0; + const void *pnext = create_info; + while (NULL != pnext) { + VkBaseInStructure base = {0}; + memcpy(&base, pnext, sizeof(VkBaseInStructure)); + bool known_struct = false; + for (size_t i = 0; i < struct_type_info_count; ++i) { + if (base.sType == struct_type_info[i].stype) { + create_info_total_size += loader_aligned_size(struct_type_info[i].size); + pnext = base.pNext; + known_struct = true; + break; + } + } + if (!known_struct) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, "Unsupported extension structure in %s pNext chain.", + base_struct_name); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + } + + icd_surface->create_info = loader_instance_heap_alloc(loader_inst, create_info_total_size, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (NULL == icd_surface->create_info) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + uint8_t *dst = (uint8_t *)icd_surface->create_info; + VkBaseInStructure *prev_struct = NULL; + pnext = create_info; + while (NULL != pnext) { + VkBaseInStructure base = {0}; + memcpy(&base, pnext, sizeof(VkBaseInStructure)); + for (size_t i = 0; i < struct_type_info_count; ++i) { + if (base.sType == struct_type_info[i].stype) { + memcpy(dst, pnext, struct_type_info[i].size); + if (NULL != prev_struct) { + prev_struct->pNext = (const VkBaseInStructure *)dst; + } + prev_struct = (VkBaseInStructure *)dst; + dst += loader_aligned_size(struct_type_info[i].size); + pnext = base.pNext; + break; + } + } + } + if (pAllocator) { + icd_surface->callbacks_valid = true; + icd_surface->callbacks = *pAllocator; + } + + return VK_SUCCESS; +} + +void cleanup_surface_creation(struct loader_instance *loader_inst, VkResult result, VkIcdSurface *icd_surface, + const VkAllocationCallbacks *pAllocator) { + if (VK_SUCCESS != result && NULL != icd_surface) { + for (struct loader_icd_term *icd_term = loader_inst->icd_terms; icd_term != NULL; icd_term = icd_term->next) { + if (icd_term->enabled_instance_extensions.khr_surface && NULL != icd_term->surface_list.list && + icd_term->surface_list.capacity > icd_surface->surface_index * sizeof(VkSurfaceKHR) && + icd_term->surface_list.list[icd_surface->surface_index] && NULL != icd_term->dispatch.DestroySurfaceKHR) { + icd_term->dispatch.DestroySurfaceKHR(icd_term->instance, icd_term->surface_list.list[icd_surface->surface_index], + pAllocator); + } + } + if (loader_inst->surfaces_list.list && + loader_inst->surfaces_list.capacity > icd_surface->surface_index * sizeof(struct loader_used_object_status)) { + loader_inst->surfaces_list.list[icd_surface->surface_index].status = VK_FALSE; + if (NULL != pAllocator) { + loader_inst->surfaces_list.list[icd_surface->surface_index].allocation_callbacks = *pAllocator; + } + } + if (NULL != icd_surface->create_info) { + loader_instance_heap_free(loader_inst, icd_surface->create_info); + } + loader_instance_heap_free(loader_inst, icd_surface); + } +} + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +// Functions for the VK_KHR_win32_surface extension: + +// This is the trampoline entrypoint for CreateWin32SurfaceKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(VkInstance instance, + const VkWin32SurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateWin32SurfaceKHR: Invalid instance [VUID-vkCreateWin32SurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateWin32SurfaceKHR(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateWin32SurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // Initialize pSurface to NULL just to be safe. + *pSurface = VK_NULL_HANDLE; + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.khr_win32_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_win32_surface extension not enabled. vkCreateWin32SurfaceKHR not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->win_surf.base), sizeof(icd_surface->win_surf), pAllocator, + &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->win_surf.base.platform = VK_ICD_WSI_PLATFORM_WIN32; + icd_surface->win_surf.hinstance = pCreateInfo->hinstance; + icd_surface->win_surf.hwnd = pCreateInfo->hwnd; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR, sizeof(VkWin32SurfaceCreateInfoKHR)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkWin32SurfaceCreateInfoKHR", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + return result; +} + +// This is the trampoline entrypoint for +// GetPhysicalDeviceWin32PresentationSupportKHR +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceWin32PresentationSupportKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceWin32PresentationSupportKHR(unwrapped_phys_dev, queueFamilyIndex); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceWin32PresentationSupportKHR +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_win32_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_win32_surface extension not enabled. vkGetPhysicalDeviceWin32PresentationSupportKHR not executed!"); + return VK_FALSE; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceWin32PresentationSupportKHR) { + // return VK_FALSE as this driver doesn't support WSI functionality + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceWin32PresentationSupportKHR!"); + return VK_FALSE; + } + + return icd_term->dispatch.GetPhysicalDeviceWin32PresentationSupportKHR(phys_dev_term->phys_dev, queueFamilyIndex); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + +// This is the trampoline entrypoint for CreateWaylandSurfaceKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateWaylandSurfaceKHR: Invalid instance [VUID-vkCreateWaylandSurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateWaylandSurfaceKHR(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateWaylandSurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.khr_wayland_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_wayland_surface extension not enabled. vkCreateWaylandSurfaceKHR not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->wayland_surf.base), sizeof(icd_surface->wayland_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->wayland_surf.base.platform = VK_ICD_WSI_PLATFORM_WAYLAND; + icd_surface->wayland_surf.display = pCreateInfo->display; + icd_surface->wayland_surf.surface = pCreateInfo->surface; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, sizeof(VkWaylandSurfaceCreateInfoKHR)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkWaylandSurfaceCreateInfoKHR", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// This is the trampoline entrypoint for +// GetPhysicalDeviceWaylandPresentationSupportKHR +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display *display) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceWaylandPresentationSupportKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceWaylandPresentationSupportKHR(unwrapped_phys_dev, queueFamilyIndex, display); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceWaylandPresentationSupportKHR +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display *display) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_wayland_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_wayland_surface extension not enabled. vkGetPhysicalDeviceWaylandPresentationSupportKHR not executed!"); + return VK_FALSE; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceWaylandPresentationSupportKHR) { + // return VK_FALSE as this driver doesn't support WSI functionality + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceWaylandPresentationSupportKHR!"); + return VK_FALSE; + } + + return icd_term->dispatch.GetPhysicalDeviceWaylandPresentationSupportKHR(phys_dev_term->phys_dev, queueFamilyIndex, display); +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) + +// Functions for the VK_KHR_xcb_surface extension: + +// This is the trampoline entrypoint for CreateXcbSurfaceKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(VkInstance instance, + const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateXcbSurfaceKHR: Invalid instance [VUID-vkCreateXcbSurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateXcbSurfaceKHR(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateXcbSurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.khr_xcb_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_xcb_surface extension not enabled. vkCreateXcbSurfaceKHR not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->xcb_surf.base), sizeof(icd_surface->xcb_surf), pAllocator, + &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->xcb_surf.base.platform = VK_ICD_WSI_PLATFORM_XCB; + icd_surface->xcb_surf.connection = pCreateInfo->connection; + icd_surface->xcb_surf.window = pCreateInfo->window; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR, sizeof(VkXcbSurfaceCreateInfoKHR)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkXcbSurfaceCreateInfoKHR", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// This is the trampoline entrypoint for +// GetPhysicalDeviceXcbPresentationSupportKHR +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t *connection, + xcb_visualid_t visual_id) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceXcbPresentationSupportKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceXcbPresentationSupportKHR(unwrapped_phys_dev, queueFamilyIndex, connection, visual_id); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceXcbPresentationSupportKHR +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t *connection, + xcb_visualid_t visual_id) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_xcb_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_xcb_surface extension not enabled. vkGetPhysicalDeviceXcbPresentationSupportKHR not executed!"); + return VK_FALSE; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceXcbPresentationSupportKHR) { + // return VK_FALSE as this driver doesn't support WSI functionality + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceXcbPresentationSupportKHR!"); + return VK_FALSE; + } + + return icd_term->dispatch.GetPhysicalDeviceXcbPresentationSupportKHR(phys_dev_term->phys_dev, queueFamilyIndex, connection, + visual_id); +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) + +// Functions for the VK_KHR_xlib_surface extension: + +// This is the trampoline entrypoint for CreateXlibSurfaceKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(VkInstance instance, + const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateXlibSurfaceKHR: Invalid instance [VUID-vkCreateXlibSurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateXlibSurfaceKHR(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateXlibSurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.khr_xlib_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_xlib_surface extension not enabled. vkCreateXlibSurfaceKHR not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->xlib_surf.base), sizeof(icd_surface->xlib_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->xlib_surf.base.platform = VK_ICD_WSI_PLATFORM_XLIB; + icd_surface->xlib_surf.dpy = pCreateInfo->dpy; + icd_surface->xlib_surf.window = pCreateInfo->window; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR, sizeof(VkXlibSurfaceCreateInfoKHR)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkXlibSurfaceCreateInfoKHR", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// This is the trampoline entrypoint for +// GetPhysicalDeviceXlibPresentationSupportKHR +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, Display *dpy, + VisualID visualID) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceXlibPresentationSupportKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceXlibPresentationSupportKHR(unwrapped_phys_dev, queueFamilyIndex, dpy, visualID); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceXlibPresentationSupportKHR +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, Display *dpy, + VisualID visualID) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_xlib_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_xlib_surface extension not enabled. vkGetPhysicalDeviceXlibPresentationSupportKHR not executed!"); + return VK_FALSE; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceXlibPresentationSupportKHR) { + // return VK_FALSE as this driver doesn't support WSI functionality + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceXlibPresentationSupportKHR!"); + return VK_FALSE; + } + + return icd_term->dispatch.GetPhysicalDeviceXlibPresentationSupportKHR(phys_dev_term->phys_dev, queueFamilyIndex, dpy, visualID); +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + +// Functions for the VK_EXT_directfb_surface extension: + +// This is the trampoline entrypoint for CreateDirectFBSurfaceEXT +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDirectFBSurfaceEXT: Invalid instance [VUID-vkCreateDirectFBSurfaceEXT-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateDirectFBSurfaceEXT(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateDirectFBSurfaceEXT +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDirectFBSurfaceEXT(VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.ext_directfb_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_EXT_directfb_surface extension not enabled. vkCreateDirectFBSurfaceEXT not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->directfb_surf.base), sizeof(icd_surface->directfb_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->directfb_surf.base.platform = VK_ICD_WSI_PLATFORM_DIRECTFB; + icd_surface->directfb_surf.dfb = pCreateInfo->dfb; + icd_surface->directfb_surf.surface = pCreateInfo->surface; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT, sizeof(VkDirectFBSurfaceCreateInfoEXT)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkDirectFBSurfaceCreateInfoEXT", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// This is the trampoline entrypoint for +// GetPhysicalDeviceDirectFBPresentationSupportEXT +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + IDirectFB *dfb) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceDirectFBPresentationSupportEXT: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceDirectFBPresentationSupportEXT(unwrapped_phys_dev, queueFamilyIndex, dfb); +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceDirectFBPresentationSupportEXT +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + IDirectFB *dfb) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.ext_directfb_surface) { + loader_log( + loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_EXT_directfb_surface extension not enabled. vkGetPhysicalDeviceDirectFBPresentationSupportKHR not executed!"); + return VK_FALSE; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceDirectFBPresentationSupportEXT) { + // return VK_FALSE as this driver doesn't support WSI functionality + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceDirectFBPresentationSupportEXT!"); + return VK_FALSE; + } + + return icd_term->dispatch.GetPhysicalDeviceDirectFBPresentationSupportEXT(phys_dev_term->phys_dev, queueFamilyIndex, dfb); +} + +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + +// Functions for the VK_KHR_android_surface extension: + +// This is the trampoline entrypoint for CreateAndroidSurfaceKHR +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateAndroidSurfaceKHR: Invalid instance [VUID-vkCreateAndroidSurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateAndroidSurfaceKHR(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateAndroidSurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateAndroidSurfaceKHR(VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkCreateAndroidSurfaceKHR not executed!"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + + // Next, if so, proceed with the implementation of this function: + VkIcdSurfaceAndroid *icd_surface = + loader_instance_heap_alloc(loader_inst, sizeof(VkIcdSurfaceAndroid), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (icd_surface == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + icd_surface->base.platform = VK_ICD_WSI_PLATFORM_ANDROID; + icd_surface->window = pCreateInfo->window; + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + + return VK_SUCCESS; +} + +#endif // VK_USE_PLATFORM_ANDROID_KHR + +// Functions for the VK_EXT_headless_surface extension: + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateHeadlessSurfaceEXT: Invalid instance [VUID-vkCreateHeadlessSurfaceEXT-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateHeadlessSurfaceEXT(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateHeadlessSurfaceEXT(VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.ext_headless_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_EXT_headless_surface extension not enabled. " + "vkCreateHeadlessSurfaceEXT not executed!"); + return VK_SUCCESS; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->headless_surf.base), sizeof(icd_surface->headless_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->headless_surf.base.platform = VK_ICD_WSI_PLATFORM_HEADLESS; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT, sizeof(VkHeadlessSurfaceCreateInfoEXT)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkHeadlessSurfaceCreateInfoEXT", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// Ensure we are properly setting VK_USE_PLATFORM_METAL_EXT, VK_USE_PLATFORM_IOS_MVK, and VK_USE_PLATFORM_MACOS_MVK. +#if __APPLE__ + +#ifndef VK_USE_PLATFORM_METAL_EXT +#error "VK_USE_PLATFORM_METAL_EXT not defined!" +#endif + +#include + +#if TARGET_OS_IOS + +#ifndef VK_USE_PLATFORM_IOS_MVK +#error "VK_USE_PLATFORM_IOS_MVK not defined!" +#endif + +#endif // TARGET_OS_IOS + +#if TARGET_OS_OSX + +#ifndef VK_USE_PLATFORM_MACOS_MVK +#error "VK_USE_PLATFORM_MACOS_MVK not defined!" +#endif + +#endif // TARGET_OS_OSX + +#endif // __APPLE__ + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + +// Functions for the VK_MVK_macos_surface extension: + +// This is the trampoline entrypoint for CreateMacOSSurfaceMVK +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(VkInstance instance, + const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateMacOSSurfaceMVK: Invalid instance [VUID-vkCreateMacOSSurfaceMVK-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateMacOSSurfaceMVK(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateMacOSSurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.mvk_macos_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_MVK_macos_surface extension not enabled. vkCreateMacOSSurfaceMVK not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->macos_surf.base), sizeof(icd_surface->macos_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->macos_surf.base.platform = VK_ICD_WSI_PLATFORM_MACOS; + icd_surface->macos_surf.pView = pCreateInfo->pView; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK, sizeof(VkMacOSSurfaceCreateInfoMVK)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkMacOSSurfaceCreateInfoMVK", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_IOS_MVK) + +// Functions for the VK_MVK_ios_surface extension: + +// This is the trampoline entrypoint for CreateIOSSurfaceMVK +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(VkInstance instance, + const VkIOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateIOSSurfaceMVK: Invalid instance [VUID-vkCreateIOSSurfaceMVK-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateIOSSurfaceMVK(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateIOSSurfaceKHR +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateIOSSurfaceMVK(VkInstance instance, const VkIOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + (void)pAllocator; + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.mvk_ios_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_MVK_ios_surface extension not enabled. vkCreateIOSSurfaceMVK not executed!"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + + // Next, if so, proceed with the implementation of this function: + VkIcdSurfaceIOS *icd_surface = + loader_instance_heap_alloc(loader_inst, sizeof(VkIcdSurfaceIOS), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (icd_surface == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + icd_surface->base.platform = VK_ICD_WSI_PLATFORM_IOS; + icd_surface->pView = pCreateInfo->pView; + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + + return VK_SUCCESS; +} + +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_GGP) + +// Functions for the VK_GGP_stream_descriptor_surface extension: + +// This is the trampoline entrypoint for CreateStreamDescriptorSurfaceGGP +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkCreateStreamDescriptorSurfaceGGP(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log( + NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateStreamDescriptorSurfaceGGP: Invalid instance [VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateStreamDescriptorSurfaceGGP(loader_inst->instance, pCreateInfo, pAllocator, + pSurface); +} + +// This is the instance chain terminator function for CreateStreamDescriptorSurfaceGGP +VKAPI_ATTR VkResult VKAPI_CALL +terminator_CreateStreamDescriptorSurfaceGGP(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.wsi_ggp_surface_enabled) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_GGP_stream_descriptor_surface extension not enabled. vkCreateStreamDescriptorSurfaceGGP not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->ggp_surf.base), sizeof(icd_surface->ggp_surf), pAllocator, + &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->ggp_surf.base.platform = VK_ICD_WSI_PLATFORM_GGP; + icd_surface->ggp_surf.streamDescriptor = pCreateInfo->streamDescriptor; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP, sizeof(VkStreamDescriptorSurfaceCreateInfoGGP)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkStreamDescriptorSurfaceCreateInfoGGP", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_METAL_EXT) + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(VkInstance instance, + const VkMetalSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateMetalSurfaceEXT: Invalid instance [VUID-vkCreateMetalSurfaceEXT-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateMetalSurfaceEXT(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMetalSurfaceEXT(VkInstance instance, const VkMetalSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.ext_metal_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_EXT_metal_surface extension not enabled. vkCreateMetalSurfaceEXT will not be executed."); + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->metal_surf.base), sizeof(icd_surface->metal_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->metal_surf.base.platform = VK_ICD_WSI_PLATFORM_METAL; + icd_surface->metal_surf.pLayer = pCreateInfo->pLayer; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT, sizeof(VkMetalSurfaceCreateInfoEXT)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkMetalSurfaceCreateInfoEXT", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + +// This is the trampoline entrypoint for CreateScreenSurfaceQNX +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX(VkInstance instance, + const VkScreenSurfaceCreateInfoQNX *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateScreenSurfaceQNX: Invalid instance [VUID-vkCreateScreenSurfaceQNX-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateScreenSurfaceQNX(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateScreenSurfaceQNX +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateScreenSurfaceQNX(VkInstance instance, + const VkScreenSurfaceCreateInfoQNX *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.qnx_screen_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_QNX_screen_surface extension not enabled. vkCreateScreenSurfaceQNX not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->screen_surf.base), sizeof(icd_surface->screen_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->screen_surf.base.platform = VK_ICD_WSI_PLATFORM_SCREEN; + icd_surface->screen_surf.context = pCreateInfo->context; + icd_surface->screen_surf.window = pCreateInfo->window; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX, sizeof(VkScreenSurfaceCreateInfoQNX)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkScreenSurfaceCreateInfoQNX", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// This is the trampoline entrypoint for +// GetPhysicalDeviceScreenPresentationSupportQNX +LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct _screen_window *window) { + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceScreenPresentationSupportQNX: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice); + VkBool32 res = disp->GetPhysicalDeviceScreenPresentationSupportQNX(unwrapped_phys_dev, queueFamilyIndex, window); + return res; +} + +// This is the instance chain terminator function for +// GetPhysicalDeviceScreenPresentationSupportQNX +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceScreenPresentationSupportQNX(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct _screen_window *window) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.qnx_screen_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_QNX_screen_surface extension not enabled. vkGetPhysicalDeviceScreenPresentationSupportQNX not executed!"); + return VK_FALSE; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceScreenPresentationSupportQNX) { + // return VK_FALSE as this driver doesn't support WSI functionality + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceScreenPresentationSupportQNX!"); + return VK_FALSE; + } + + return icd_term->dispatch.GetPhysicalDeviceScreenPresentationSupportQNX(phys_dev_term->phys_dev, queueFamilyIndex, window); +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#if defined(VK_USE_PLATFORM_VI_NN) + +// Functions for the VK_NN_vi_surface extension: + +// This is the trampoline entrypoint for CreateViSurfaceNN +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(VkInstance instance, const VkViSurfaceCreateInfoNN *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateViSurfaceNN: Invalid instance [VUID-vkCreateViSurfaceNN-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateViSurfaceNN(loader_inst->instance, pCreateInfo, pAllocator, pSurface); +} + +// This is the instance chain terminator function for CreateViSurfaceNN +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateViSurfaceNN(VkInstance instance, const VkViSurfaceCreateInfoNN *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.nn_vi_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_NN_vi_surface extension not enabled. vkCreateViSurfaceNN not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->vi_surf.base), sizeof(icd_surface->vi_surf), pAllocator, + &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->vi_surf.base.platform = VK_ICD_WSI_PLATFORM_VI; + icd_surface->vi_surf.window = pCreateInfo->window; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN, sizeof(VkViSurfaceCreateInfoNN)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkViSurfaceCreateInfoNN", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +#endif // VK_USE_PLATFORM_VI_NN + +// Functions for the VK_KHR_display instance extension: +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPropertiesKHR *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceDisplayPropertiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceDisplayPropertiesKHR(unwrapped_phys_dev, pPropertyCount, pProperties); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPropertiesKHR *pProperties) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkGetPhysicalDeviceDisplayPropertiesKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR) { + loader_log(loader_inst, VULKAN_LOADER_WARN_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceDisplayPropertiesKHR!"); + // return 0 for property count as this driver doesn't support WSI functionality + if (pPropertyCount) { + *pPropertyCount = 0; + } + return VK_SUCCESS; + } + + return icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPlanePropertiesKHR *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceDisplayPlanePropertiesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + VkResult res = disp->GetPhysicalDeviceDisplayPlanePropertiesKHR(unwrapped_phys_dev, pPropertyCount, pProperties); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPlanePropertiesKHR *pProperties) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkGetPhysicalDeviceDisplayPlanePropertiesKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR) { + loader_log(loader_inst, VULKAN_LOADER_WARN_BIT, 0, + "ICD for selected physical device does not export vkGetPhysicalDeviceDisplayPlanePropertiesKHR!"); + // return 0 for property count as this driver doesn't support WSI functionality + if (pPropertyCount) { + *pPropertyCount = 0; + } + return VK_SUCCESS; + } + + return icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, + uint32_t planeIndex, uint32_t *pDisplayCount, + VkDisplayKHR *pDisplays) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDisplayPlaneSupportedDisplaysKHR: Invalid physicalDevice " + "[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + VkResult res = disp->GetDisplayPlaneSupportedDisplaysKHR(unwrapped_phys_dev, planeIndex, pDisplayCount, pDisplays); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex, + uint32_t *pDisplayCount, VkDisplayKHR *pDisplays) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkGetDisplayPlaneSupportedDisplaysKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == icd_term->dispatch.GetDisplayPlaneSupportedDisplaysKHR) { + loader_log(loader_inst, VULKAN_LOADER_WARN_BIT, 0, + "ICD for selected physical device does not export vkGetDisplayPlaneSupportedDisplaysKHR!"); + // return 0 for property count as this driver doesn't support WSI functionality + if (pDisplayCount) { + *pDisplayCount = 0; + } + return VK_SUCCESS; + } + + return icd_term->dispatch.GetDisplayPlaneSupportedDisplaysKHR(phys_dev_term->phys_dev, planeIndex, pDisplayCount, pDisplays); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModePropertiesKHR *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDisplayModePropertiesKHR: Invalid physicalDevice " + "[VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + VkResult res = disp->GetDisplayModePropertiesKHR(unwrapped_phys_dev, display, pPropertyCount, pProperties); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModePropertiesKHR *pProperties) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkGetDisplayModePropertiesKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == icd_term->dispatch.GetDisplayModePropertiesKHR) { + loader_log(loader_inst, VULKAN_LOADER_WARN_BIT, 0, + "ICD for selected physical device does not export vkGetDisplayModePropertiesKHR!"); + // return 0 for property count as this driver doesn't support WSI functionality + if (pPropertyCount) { + *pPropertyCount = 0; + } + return VK_SUCCESS; + } + + return icd_term->dispatch.GetDisplayModePropertiesKHR(phys_dev_term->phys_dev, display, pPropertyCount, pProperties); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDisplayModeKHR *pMode) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDisplayModeKHR: Invalid physicalDevice " + "[VUID-vkCreateDisplayModeKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + VkResult res = disp->CreateDisplayModeKHR(unwrapped_phys_dev, display, pCreateInfo, pAllocator, pMode); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkCreateDisplayModeKHR not executed!"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + + if (NULL == icd_term->dispatch.CreateDisplayModeKHR) { + // Can't emulate, so return an appropriate error + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "ICD for selected physical device does not export vkCreateDisplayModeKHR!"); + return VK_ERROR_INITIALIZATION_FAILED; + } + + return icd_term->dispatch.CreateDisplayModeKHR(phys_dev_term->phys_dev, display, pCreateInfo, pAllocator, pMode); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, + VkDisplayModeKHR mode, uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR *pCapabilities) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDisplayPlaneCapabilitiesKHR: Invalid physicalDevice " + "[VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + VkResult res = disp->GetDisplayPlaneCapabilitiesKHR(unwrapped_phys_dev, mode, planeIndex, pCapabilities); + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR *pCapabilities) { + // First, check to ensure the appropriate extension was enabled: + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkGetDisplayPlaneCapabilitiesKHR not executed!"); + return VK_SUCCESS; + } + + if (NULL == icd_term->dispatch.GetDisplayPlaneCapabilitiesKHR) { + // Emulate support + loader_log(loader_inst, VULKAN_LOADER_WARN_BIT, 0, + "ICD for selected physical device does not export vkGetDisplayPlaneCapabilitiesKHR!"); + if (pCapabilities) { + memset(pCapabilities, 0, sizeof(VkDisplayPlaneCapabilitiesKHR)); + } + return VK_SUCCESS; + } + + return icd_term->dispatch.GetDisplayPlaneCapabilitiesKHR(phys_dev_term->phys_dev, mode, planeIndex, pCapabilities); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateDisplayPlaneSurfaceKHR: Invalid instance [VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateDisplayPlaneSurfaceKHR(loader_inst->instance, pCreateInfo, pAllocator, + pSurface); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + loader_platform_thread_lock_mutex(&loader_lock); + + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.khr_display) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkCreateDisplayPlaneSurfaceKHR not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->display_surf.base), sizeof(icd_surface->display_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->display_surf.base.platform = VK_ICD_WSI_PLATFORM_DISPLAY; + icd_surface->display_surf.displayMode = pCreateInfo->displayMode; + icd_surface->display_surf.planeIndex = pCreateInfo->planeIndex; + icd_surface->display_surf.planeStackIndex = pCreateInfo->planeStackIndex; + icd_surface->display_surf.transform = pCreateInfo->transform; + icd_surface->display_surf.globalAlpha = pCreateInfo->globalAlpha; + icd_surface->display_surf.alphaMode = pCreateInfo->alphaMode; + icd_surface->display_surf.imageExtent = pCreateInfo->imageExtent; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR, sizeof(VkDisplaySurfaceCreateInfoKHR)}, + {VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV, sizeof(VkDisplaySurfaceStereoCreateInfoNV)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkDisplaySurfaceCreateInfoKHR", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + loader_platform_thread_unlock_mutex(&loader_lock); + + return result; +} + +// EXT_display_swapchain Extension command + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, + VkSwapchainKHR *pSwapchains) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSharedSwapchainsKHR: Invalid device [VUID-vkCreateSharedSwapchainsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, + VkSwapchainKHR *pSwapchains) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateSharedSwapchainsKHR Terminator: Invalid device handle. This is likely the result of a " + "layer wrapping device handles and failing to unwrap them in all functions. " + "[VUID-vkCreateSharedSwapchainsKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (NULL != icd_term->surface_list.list) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT, 0, + "vkCreateSharedSwapchainsKHR Terminator: No VkSurfaceKHR objects were created, indicating an application " + "bug. Returning VK_SUCCESS. "); + return VK_SUCCESS; + } + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.CreateSharedSwapchainsKHR) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT, 0, + "vkCreateSharedSwapchainsKHR Terminator: Driver's function pointer was NULL, returning VK_SUCCESS. Was the " + "VK_KHR_display_swapchain extension enabled?"); + return VK_SUCCESS; + } + + VkSwapchainCreateInfoKHR *pCreateCopy = loader_stack_alloc(sizeof(VkSwapchainCreateInfoKHR) * swapchainCount); + if (NULL == pCreateCopy) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + memcpy(pCreateCopy, pCreateInfos, sizeof(VkSwapchainCreateInfoKHR) * swapchainCount); + for (uint32_t sc = 0; sc < swapchainCount; sc++) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &pCreateCopy[sc].surface); + if (res != VK_SUCCESS) { + return res; + } + } + return dev->loader_dispatch.extension_terminator_dispatch.CreateSharedSwapchainsKHR(device, swapchainCount, pCreateCopy, + pAllocator, pSwapchains); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetDeviceGroupPresentCapabilitiesKHR(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR *pDeviceGroupPresentCapabilities) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupPresentCapabilitiesKHR: Invalid device " + "[VUID-vkGetDeviceGroupPresentCapabilitiesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR *pModes) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupSurfacePresentModesKHR: Invalid device " + "[VUID-vkGetDeviceGroupSurfacePresentModesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR *pModes) { + struct loader_device *dev; + struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev); + if (NULL == icd_term || NULL == dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDeviceGroupSurfacePresentModesKHR: Invalid device " + "[VUID-vkGetDeviceGroupSurfacePresentModesKHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + if (NULL == dev->loader_dispatch.extension_terminator_dispatch.GetDeviceGroupSurfacePresentModesKHR) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT, 0, + "vkGetDeviceGroupSurfacePresentModesKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was either " + "Vulkan 1.1 and VK_KHR_swapchain enabled or both the VK_KHR_device_group and VK_KHR_surface " + "extensions enabled when using Vulkan 1.0?"); + return VK_SUCCESS; + } + + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + + return dev->loader_dispatch.extension_terminator_dispatch.GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, uint32_t *pRectCount, + VkRect2D *pRects) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDevicePresentRectanglesKHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDevicePresentRectanglesKHR(unwrapped_phys_dev, surface, pRectCount, pRects); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, uint32_t *pRectCount, + VkRect2D *pRects) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + if (NULL == icd_term->dispatch.GetPhysicalDevicePresentRectanglesKHR) { + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "ICD associated with VkPhysicalDevice does not support GetPhysicalDevicePresentRectanglesKHX"); + // return as this driver doesn't support WSI functionality + if (pRectCount) { + *pRectCount = 0; + } + return VK_SUCCESS; + } + + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + + return icd_term->dispatch.GetPhysicalDevicePresentRectanglesKHR(phys_dev_term->phys_dev, surface, pRectCount, pRects); +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR(VkDevice device, const VkAcquireNextImageInfoKHR *pAcquireInfo, + uint32_t *pImageIndex) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkAcquireNextImage2KHR: Invalid device [VUID-vkAcquireNextImage2KHR-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->AcquireNextImage2KHR(device, pAcquireInfo, pImageIndex); +} + +// ---- VK_KHR_get_display_properties2 extension trampoline/terminators + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayProperties2KHR *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceDisplayProperties2KHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceDisplayProperties2KHR(unwrapped_phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayProperties2KHR *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + // If the function is available in the driver, just call into it + if (icd_term->dispatch.GetPhysicalDeviceDisplayProperties2KHR != NULL) { + return icd_term->dispatch.GetPhysicalDeviceDisplayProperties2KHR(phys_dev_term->phys_dev, pPropertyCount, pProperties); + } + + // We have to emulate the function. + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceDisplayProperties2KHR: Emulating call in ICD \"%s\"", icd_term->scanned_icd->lib_name); + + // If the icd doesn't support VK_KHR_display, then no properties are available + if (icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR == NULL) { + *pPropertyCount = 0; + return VK_SUCCESS; + } + + // If we aren't writing to pProperties, then emulation is straightforward + if (pProperties == NULL || *pPropertyCount == 0) { + return icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, NULL); + } + + // If we do have to write to pProperties, then we need to write to a temporary array of VkDisplayPropertiesKHR and copy it + VkDisplayPropertiesKHR *properties = loader_stack_alloc(*pPropertyCount * sizeof(VkDisplayPropertiesKHR)); + if (properties == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + VkResult res = icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, properties); + if (res < 0) { + return res; + } + for (uint32_t i = 0; i < *pPropertyCount; ++i) { + memcpy(&pProperties[i].displayProperties, &properties[i], sizeof(VkDisplayPropertiesKHR)); + } + return res; +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPlaneProperties2KHR *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceDisplayPlaneProperties2KHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceDisplayPlaneProperties2KHR(unwrapped_phys_dev, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPlaneProperties2KHR *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + // If the function is available in the driver, just call into it + if (icd_term->dispatch.GetPhysicalDeviceDisplayPlaneProperties2KHR != NULL) { + return icd_term->dispatch.GetPhysicalDeviceDisplayPlaneProperties2KHR(phys_dev_term->phys_dev, pPropertyCount, pProperties); + } + + // We have to emulate the function. + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceDisplayPlaneProperties2KHR: Emulating call in ICD \"%s\"", icd_term->scanned_icd->lib_name); + + // If the icd doesn't support VK_KHR_display, then no properties are available + if (icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR == NULL) { + *pPropertyCount = 0; + return VK_SUCCESS; + } + + // If we aren't writing to pProperties, then emulation is straightforward + if (pProperties == NULL || *pPropertyCount == 0) { + return icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, NULL); + } + + // If we do have to write to pProperties, then we need to write to a temporary array of VkDisplayPlanePropertiesKHR and copy it + VkDisplayPlanePropertiesKHR *properties = loader_stack_alloc(*pPropertyCount * sizeof(VkDisplayPlanePropertiesKHR)); + if (properties == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + VkResult res = + icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, properties); + if (res < 0) { + return res; + } + for (uint32_t i = 0; i < *pPropertyCount; ++i) { + memcpy(&pProperties[i].displayPlaneProperties, &properties[i], sizeof(VkDisplayPlanePropertiesKHR)); + } + return res; +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModeProperties2KHR *pProperties) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDisplayModeProperties2KHR: Invalid physicalDevice " + "[VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetDisplayModeProperties2KHR(unwrapped_phys_dev, display, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModeProperties2KHR *pProperties) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + // If the function is available in the driver, just call into it + if (icd_term->dispatch.GetDisplayModeProperties2KHR != NULL) { + return icd_term->dispatch.GetDisplayModeProperties2KHR(phys_dev_term->phys_dev, display, pPropertyCount, pProperties); + } + + // We have to emulate the function. + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, "vkGetDisplayModeProperties2KHR: Emulating call in ICD \"%s\"", + icd_term->scanned_icd->lib_name); + + // If the icd doesn't support VK_KHR_display, then no properties are available + if (icd_term->dispatch.GetDisplayModePropertiesKHR == NULL) { + *pPropertyCount = 0; + return VK_SUCCESS; + } + + // If we aren't writing to pProperties, then emulation is straightforward + if (pProperties == NULL || *pPropertyCount == 0) { + return icd_term->dispatch.GetDisplayModePropertiesKHR(phys_dev_term->phys_dev, display, pPropertyCount, NULL); + } + + // If we do have to write to pProperties, then we need to write to a temporary array of VkDisplayModePropertiesKHR and copy it + VkDisplayModePropertiesKHR *properties = loader_stack_alloc(*pPropertyCount * sizeof(VkDisplayModePropertiesKHR)); + if (properties == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + VkResult res = icd_term->dispatch.GetDisplayModePropertiesKHR(phys_dev_term->phys_dev, display, pPropertyCount, properties); + if (res < 0) { + return res; + } + for (uint32_t i = 0; i < *pPropertyCount; ++i) { + memcpy(&pProperties[i].displayModeProperties, &properties[i], sizeof(VkDisplayModePropertiesKHR)); + } + return res; +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR *pCapabilities) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetDisplayPlaneCapabilities2KHR: Invalid physicalDevice " + "[VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetDisplayPlaneCapabilities2KHR(unwrapped_phys_dev, pDisplayPlaneInfo, pCapabilities); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR *pCapabilities) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + + // If the function is available in the driver, just call into it + if (icd_term->dispatch.GetDisplayPlaneCapabilities2KHR != NULL) { + return icd_term->dispatch.GetDisplayPlaneCapabilities2KHR(phys_dev_term->phys_dev, pDisplayPlaneInfo, pCapabilities); + } + + // We have to emulate the function. + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetDisplayPlaneCapabilities2KHR: Emulating call in ICD \"%s\"", icd_term->scanned_icd->lib_name); + + // If the icd doesn't support VK_KHR_display, then there are no capabilities + if (NULL == icd_term->dispatch.GetDisplayPlaneCapabilitiesKHR) { + if (pCapabilities) { + memset(&pCapabilities->capabilities, 0, sizeof(VkDisplayPlaneCapabilitiesKHR)); + } + return VK_SUCCESS; + } + + // Just call into the old version of the function. + return icd_term->dispatch.GetDisplayPlaneCapabilitiesKHR(phys_dev_term->phys_dev, pDisplayPlaneInfo->mode, + pDisplayPlaneInfo->planeIndex, &pCapabilities->capabilities); +} + +#if defined(VK_USE_PLATFORM_FUCHSIA) + +// This is the trampoline entrypoint for CreateImagePipeSurfaceFUCHSIA +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + struct loader_instance *loader_inst = loader_get_instance(instance); + if (NULL == loader_inst) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkCreateImagePipeSurfaceFUCHSIA: Invalid instance [VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return loader_inst->disp->layer_inst_disp.CreateImagePipeSurfaceFUCHSIA(loader_inst->instance, pCreateInfo, pAllocator, + pSurface); +} + +// This is the instance chain terminator function for CreateImagePipeSurfaceFUCHSIA +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateImagePipeSurfaceFUCHSIA(VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + VkResult result = VK_SUCCESS; + VkIcdSurface *icd_surface = NULL; + + // Initialize pSurface to NULL just to be safe. + *pSurface = VK_NULL_HANDLE; + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->enabled_extensions.fuchsia_imagepipe_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_FUCHSIA_imagepipe_surface extension not enabled. " + "vkCreateImagePipeSurfaceFUCHSIA not executed!"); + result = VK_ERROR_EXTENSION_NOT_PRESENT; + goto out; + } + + // Next, if so, proceed with the implementation of this function: + result = allocate_icd_surface_struct(loader_inst, sizeof(icd_surface->imagepipe_surf.base), sizeof(icd_surface->imagepipe_surf), + pAllocator, &icd_surface); + if (VK_SUCCESS != result) { + goto out; + } + + icd_surface->imagepipe_surf.base.platform = VK_ICD_WSI_PLATFORM_FUCHSIA; + + const struct loader_struct_type_info ci_types[] = { + {VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA, sizeof(VkImagePipeSurfaceCreateInfoFUCHSIA)}, + }; + copy_surface_create_info(loader_inst, icd_surface, pCreateInfo, sizeof(ci_types) / sizeof(ci_types[0]), ci_types, + "VkImagePipeSurfaceCreateInfoFUCHSIA", pAllocator); + + *pSurface = (VkSurfaceKHR)(uintptr_t)icd_surface; + +out: + cleanup_surface_creation(loader_inst, result, icd_surface, pAllocator); + + return result; +} +#endif // VK_USE_PLATFORM_FUCHSIA + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkSurfaceCapabilities2KHR *pSurfaceCapabilities) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfaceCapabilities2KHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfaceCapabilities2KHR(unwrapped_phys_dev, pSurfaceInfo, pSurfaceCapabilities); +} + +void emulate_VK_KHR_surface_maintenance1(const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkSurfaceCapabilities2KHR *pSurfaceCapabilities) { + // Because VK_KHR_surface_maintenance1 is an instance extension, applications will use it to query info on drivers which do + // not support the extension. Thus we need to emulate the driver filling out the structs in that case. + VkPresentModeKHR present_mode = VK_PRESENT_MODE_MAX_ENUM_KHR; + const void *void_pNext = pSurfaceInfo->pNext; + while (void_pNext) { + VkBaseOutStructure out_structure = {0}; + memcpy(&out_structure, void_pNext, sizeof(VkBaseOutStructure)); + if (out_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR) { + VkSurfacePresentModeKHR *surface_present_mode = (VkSurfacePresentModeKHR *)void_pNext; + present_mode = surface_present_mode->presentMode; + } + void_pNext = out_structure.pNext; + } + // If no VkSurfacePresentModeKHR was present, return + if (present_mode == VK_PRESENT_MODE_MAX_ENUM_KHR) { + return; + } + + void_pNext = pSurfaceCapabilities->pNext; + while (void_pNext) { + VkBaseOutStructure out_structure = {0}; + memcpy(&out_structure, void_pNext, sizeof(VkBaseOutStructure)); + if (out_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR) { + VkSurfacePresentModeCompatibilityKHR *surface_present_mode_compatibility = + (VkSurfacePresentModeCompatibilityKHR *)void_pNext; + if (surface_present_mode_compatibility->pPresentModes) { + if (surface_present_mode_compatibility->presentModeCount != 0) { + surface_present_mode_compatibility->pPresentModes[0] = present_mode; + surface_present_mode_compatibility->presentModeCount = 1; + } + } else { + surface_present_mode_compatibility->presentModeCount = 1; + } + + } else if (out_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR) { + // Because there is no way to fill out the information faithfully, set scaled max/min image extent to the + // surface capabilities max/min extent and the rest to zero. + VkSurfacePresentScalingCapabilitiesKHR *surface_present_scaling_capabilities = + (VkSurfacePresentScalingCapabilitiesKHR *)void_pNext; + surface_present_scaling_capabilities->supportedPresentScaling = 0; + surface_present_scaling_capabilities->supportedPresentGravityX = 0; + surface_present_scaling_capabilities->supportedPresentGravityY = 0; + surface_present_scaling_capabilities->maxScaledImageExtent = pSurfaceCapabilities->surfaceCapabilities.maxImageExtent; + surface_present_scaling_capabilities->minScaledImageExtent = pSurfaceCapabilities->surfaceCapabilities.minImageExtent; + } + void_pNext = out_structure.pNext; + } +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkSurfaceCapabilities2KHR *pSurfaceCapabilities) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + + if (!loader_inst->enabled_extensions.khr_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_surface extension not enabled. vkGetPhysicalDeviceSurfaceCapabilities2KHR not executed!"); + return VK_SUCCESS; + } + + VkSurfaceKHR surface = pSurfaceInfo->surface; + if (VK_NULL_HANDLE != pSurfaceInfo->surface) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + } + + if (icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2KHR != NULL) { + void *pNext = pSurfaceCapabilities->pNext; + while (pNext != NULL) { + VkBaseOutStructure pNext_out_structure = {0}; + memcpy(&pNext_out_structure, pNext, sizeof(VkBaseOutStructure)); + if (pNext_out_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR) { + // Not all ICDs may be supporting VK_KHR_surface_protected_capabilities + // Initialize VkSurfaceProtectedCapabilitiesKHR.supportsProtected to false and + // if an ICD supports protected surfaces, it will reset it to true accordingly. + ((VkSurfaceProtectedCapabilitiesKHR *)pNext)->supportsProtected = VK_FALSE; + } + pNext = pNext_out_structure.pNext; + } + + // Pass the call to the driver, possibly unwrapping the ICD surface + VkPhysicalDeviceSurfaceInfo2KHR info_copy = *pSurfaceInfo; + info_copy.surface = surface; + + VkResult res = + icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev_term->phys_dev, &info_copy, pSurfaceCapabilities); + + // Because VK_EXT_surface_maintenance1 is an instance extension, applications will use it to query info on drivers which do + // not support the extension. Thus we need to emulate the driver filling out the structs in that case. + if (!icd_term->enabled_instance_extensions.khr_surface_maintenance1 && + !icd_term->enabled_instance_extensions.ext_surface_maintenance1) { + emulate_VK_KHR_surface_maintenance1(pSurfaceInfo, pSurfaceCapabilities); + } + + return res; + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceSurfaceCapabilities2KHR: Emulating call in ICD \"%s\" using " + "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", + icd_term->scanned_icd->lib_name); + + // Write to the VkSurfaceCapabilities2KHR struct + + // If the icd doesn't support VK_KHR_surface, then there are no capabilities + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR) { + if (pSurfaceCapabilities) { + memset(&pSurfaceCapabilities->surfaceCapabilities, 0, sizeof(VkSurfaceCapabilitiesKHR)); + } + return VK_SUCCESS; + } + VkResult res = icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev_term->phys_dev, surface, + &pSurfaceCapabilities->surfaceCapabilities); + + if (!icd_term->enabled_instance_extensions.khr_surface_maintenance1 && + !icd_term->enabled_instance_extensions.ext_surface_maintenance1) { + emulate_VK_KHR_surface_maintenance1(pSurfaceInfo, pSurfaceCapabilities); + } + return res; + } +} + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pSurfaceFormatCount, VkSurfaceFormat2KHR *pSurfaceFormats) { + const VkLayerInstanceDispatchTable *disp; + VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice); + if (VK_NULL_HANDLE == unwrapped_phys_dev) { + loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetPhysicalDeviceSurfaceFormats2KHR: Invalid physicalDevice " + "[VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(physicalDevice); + return disp->GetPhysicalDeviceSurfaceFormats2KHR(unwrapped_phys_dev, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats); +} + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormat2KHR *pSurfaceFormats) { + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + struct loader_instance *loader_inst = (struct loader_instance *)icd_term->this_instance; + + if (!loader_inst->enabled_extensions.khr_surface) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_surface extension not enabled. vkGetPhysicalDeviceSurfaceFormats2KHR not executed!"); + return VK_SUCCESS; + } + + VkSurfaceKHR surface = pSurfaceInfo->surface; + if (VK_NULL_HANDLE != pSurfaceInfo->surface) { + VkResult res = wsi_unwrap_icd_surface(icd_term, &surface); + if (res != VK_SUCCESS) { + return res; + } + } + + if (icd_term->dispatch.GetPhysicalDeviceSurfaceFormats2KHR != NULL) { + // Pass the call to the driver, possibly unwrapping the ICD surface + VkPhysicalDeviceSurfaceInfo2KHR info_copy = *pSurfaceInfo; + info_copy.surface = surface; + + return icd_term->dispatch.GetPhysicalDeviceSurfaceFormats2KHR(phys_dev_term->phys_dev, &info_copy, pSurfaceFormatCount, + pSurfaceFormats); + } else { + // Emulate the call + loader_log(icd_term->this_instance, VULKAN_LOADER_INFO_BIT, 0, + "vkGetPhysicalDeviceSurfaceFormats2KHR: Emulating call in ICD \"%s\" using vkGetPhysicalDeviceSurfaceFormatsKHR", + icd_term->scanned_icd->lib_name); + + if (pSurfaceInfo->pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceSurfaceFormats2KHR: Emulation found unrecognized structure type in pSurfaceInfo->pNext " + "- this struct will be ignored"); + } + + // If the icd doesn't support VK_KHR_surface, then there are no formats + if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR) { + if (pSurfaceFormatCount) { + *pSurfaceFormatCount = 0; + } + return VK_SUCCESS; + } + + if (*pSurfaceFormatCount == 0 || pSurfaceFormats == NULL) { + // Write to pSurfaceFormatCount + return icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR(phys_dev_term->phys_dev, surface, pSurfaceFormatCount, + NULL); + } else { + // Allocate a temporary array for the output of the old function + VkSurfaceFormatKHR *formats = loader_stack_alloc(*pSurfaceFormatCount * sizeof(VkSurfaceFormatKHR)); + if (formats == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + VkResult res = icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR(phys_dev_term->phys_dev, surface, + pSurfaceFormatCount, formats); + for (uint32_t i = 0; i < *pSurfaceFormatCount; ++i) { + pSurfaceFormats[i].surfaceFormat = formats[i]; + if (pSurfaceFormats[i].pNext != NULL) { + loader_log(icd_term->this_instance, VULKAN_LOADER_WARN_BIT, 0, + "vkGetPhysicalDeviceSurfaceFormats2KHR: Emulation found unrecognized structure type in " + "pSurfaceFormats[%d].pNext - this struct will be ignored", + i); + } + } + return res; + } + } +} + +bool wsi_swapchain_instance_gpa(struct loader_instance *loader_inst, const char *name, void **addr) { + *addr = NULL; + + // Functions for the VK_KHR_surface extension: + if (!strcmp("vkDestroySurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkDestroySurfaceKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDeviceSurfaceSupportKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDeviceSurfaceCapabilitiesKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDeviceSurfaceFormatsKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDeviceSurfacePresentModesKHR : NULL; + return true; + } + + if (!strcmp("vkGetDeviceGroupPresentCapabilitiesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetDeviceGroupPresentCapabilitiesKHR : NULL; + return true; + } + + if (!strcmp("vkGetDeviceGroupSurfacePresentModesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetDeviceGroupSurfacePresentModesKHR : NULL; + return true; + } + + if (!strcmp("vkGetPhysicalDevicePresentRectanglesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDevicePresentRectanglesKHR : NULL; + return true; + } + + // Functions for VK_KHR_get_surface_capabilities2 extension: + if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilities2KHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDeviceSurfaceCapabilities2KHR : NULL; + return true; + } + + if (!strcmp("vkGetPhysicalDeviceSurfaceFormats2KHR", name)) { + *addr = loader_inst->enabled_extensions.khr_surface ? (void *)vkGetPhysicalDeviceSurfaceFormats2KHR : NULL; + return true; + } + + // Functions for the VK_KHR_swapchain extension: + + // Note: This is a device extension, and its functions are statically + // exported from the loader. Per Khronos decisions, the loader's GIPA + // function will return the trampoline function for such device-extension + // functions, regardless of whether the extension has been enabled. + if (!strcmp("vkCreateSwapchainKHR", name)) { + *addr = (void *)vkCreateSwapchainKHR; + return true; + } + if (!strcmp("vkDestroySwapchainKHR", name)) { + *addr = (void *)vkDestroySwapchainKHR; + return true; + } + if (!strcmp("vkGetSwapchainImagesKHR", name)) { + *addr = (void *)vkGetSwapchainImagesKHR; + return true; + } + if (!strcmp("vkAcquireNextImageKHR", name)) { + *addr = (void *)vkAcquireNextImageKHR; + return true; + } + if (!strcmp("vkQueuePresentKHR", name)) { + *addr = (void *)vkQueuePresentKHR; + return true; + } + if (!strcmp("vkAcquireNextImage2KHR", name)) { + *addr = (void *)vkAcquireNextImage2KHR; + return true; + } + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + + // Functions for the VK_KHR_win32_surface extension: + if (!strcmp("vkCreateWin32SurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_win32_surface ? (void *)vkCreateWin32SurfaceKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_win32_surface ? (void *)vkGetPhysicalDeviceWin32PresentationSupportKHR : NULL; + return true; + } +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + + // Functions for the VK_KHR_wayland_surface extension: + if (!strcmp("vkCreateWaylandSurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_wayland_surface ? (void *)vkCreateWaylandSurfaceKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) { + *addr = + loader_inst->enabled_extensions.khr_wayland_surface ? (void *)vkGetPhysicalDeviceWaylandPresentationSupportKHR : NULL; + return true; + } +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + + // Functions for the VK_KHR_xcb_surface extension: + if (!strcmp("vkCreateXcbSurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_xcb_surface ? (void *)vkCreateXcbSurfaceKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_xcb_surface ? (void *)vkGetPhysicalDeviceXcbPresentationSupportKHR : NULL; + return true; + } +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + + // Functions for the VK_KHR_xlib_surface extension: + if (!strcmp("vkCreateXlibSurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_xlib_surface ? (void *)vkCreateXlibSurfaceKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_xlib_surface ? (void *)vkGetPhysicalDeviceXlibPresentationSupportKHR : NULL; + return true; + } +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + + // Functions for the VK_EXT_directfb_surface extension: + if (!strcmp("vkCreateDirectFBSurfaceEXT", name)) { + *addr = loader_inst->enabled_extensions.ext_directfb_surface ? (void *)vkCreateDirectFBSurfaceEXT : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceDirectFBPresentationSupportEXT", name)) { + *addr = + loader_inst->enabled_extensions.ext_directfb_surface ? (void *)vkGetPhysicalDeviceDirectFBPresentationSupportEXT : NULL; + return true; + } +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + + // Functions for the VK_KHR_android_surface extension: + if (!strcmp("vkCreateAndroidSurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_android_surface ? (void *)vkCreateAndroidSurfaceKHR : NULL; + return true; + } +#endif // VK_USE_PLATFORM_ANDROID_KHR + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + + // Functions for the VK_MVK_macos_surface extension: + if (!strcmp("vkCreateMacOSSurfaceMVK", name)) { + *addr = loader_inst->enabled_extensions.mvk_macos_surface ? (void *)vkCreateMacOSSurfaceMVK : NULL; + return true; + } +#endif // VK_USE_PLATFORM_MACOS_MVK +#if defined(VK_USE_PLATFORM_IOS_MVK) + + // Functions for the VK_MVK_ios_surface extension: + if (!strcmp("vkCreateIOSSurfaceMVK", name)) { + *addr = loader_inst->enabled_extensions.mvk_ios_surface ? (void *)vkCreateIOSSurfaceMVK : NULL; + return true; + } +#endif // VK_USE_PLATFORM_IOS_MVK +#if defined(VK_USE_PLATFORM_GGP) + + // Functions for the VK_GGP_stream_descriptor_surface extension: + if (!strcmp("vkCreateStreamDescriptorSurfaceGGP", name)) { + *addr = loader_inst->enabled_extensions.wsi_ggp_surface_enabled ? (void *)vkCreateStreamDescriptorSurfaceGGP : NULL; + return true; + } +#endif // VK_USE_PLATFORM_GGP +#if defined(VK_USE_PLATFORM_FUCHSIA) + + // Functions for the VK_FUCHSIA_imagepipe_surface extension: + if (!strcmp("vkCreateImagePipeSurfaceFUCHSIA", name)) { + *addr = loader_inst->enabled_extensions.fuchsia_imagepipe_surface ? (void *)vkCreateImagePipeSurfaceFUCHSIA : NULL; + return true; + } + +#endif // VK_USE_PLATFORM_FUCHSIA + + // Functions for the VK_EXT_headless_surface extension: + if (!strcmp("vkCreateHeadlessSurfaceEXT", name)) { + *addr = loader_inst->enabled_extensions.ext_headless_surface ? (void *)vkCreateHeadlessSurfaceEXT : NULL; + return true; + } + +#if defined(VK_USE_PLATFORM_METAL_EXT) + // Functions for the VK_MVK_macos_surface extension: + if (!strcmp("vkCreateMetalSurfaceEXT", name)) { + *addr = loader_inst->enabled_extensions.ext_metal_surface ? (void *)vkCreateMetalSurfaceEXT : NULL; + return true; + } +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + + // Functions for the VK_QNX_screen_surface extension: + if (!strcmp("vkCreateScreenSurfaceQNX", name)) { + *addr = loader_inst->enabled_extensions.qnx_screen_surface ? (void *)vkCreateScreenSurfaceQNX : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceScreenPresentationSupportQNX", name)) { + *addr = loader_inst->enabled_extensions.qnx_screen_surface ? (void *)vkGetPhysicalDeviceScreenPresentationSupportQNX : NULL; + return true; + } +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#if defined(VK_USE_PLATFORM_VI_NN) + + // Functions for the VK_NN_vi_surface extension: + if (!strcmp("vkCreateViSurfaceNN", name)) { + *addr = loader_inst->enabled_extensions.nn_vi_surface ? (void *)vkCreateViSurfaceNN : NULL; + return true; + } +#endif // VK_USE_PLATFORM_VI_NN + + // Functions for VK_KHR_display extension: + if (!strcmp("vkGetPhysicalDeviceDisplayPropertiesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkGetPhysicalDeviceDisplayPropertiesKHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceDisplayPlanePropertiesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkGetPhysicalDeviceDisplayPlanePropertiesKHR : NULL; + return true; + } + if (!strcmp("vkGetDisplayPlaneSupportedDisplaysKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkGetDisplayPlaneSupportedDisplaysKHR : NULL; + return true; + } + if (!strcmp("vkGetDisplayModePropertiesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkGetDisplayModePropertiesKHR : NULL; + return true; + } + if (!strcmp("vkCreateDisplayModeKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkCreateDisplayModeKHR : NULL; + return true; + } + if (!strcmp("vkGetDisplayPlaneCapabilitiesKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkGetDisplayPlaneCapabilitiesKHR : NULL; + return true; + } + if (!strcmp("vkCreateDisplayPlaneSurfaceKHR", name)) { + *addr = loader_inst->enabled_extensions.khr_display ? (void *)vkCreateDisplayPlaneSurfaceKHR : NULL; + return true; + } + + // Functions for KHR_display_swapchain extension: + if (!strcmp("vkCreateSharedSwapchainsKHR", name)) { + *addr = (void *)vkCreateSharedSwapchainsKHR; + return true; + } + + // Functions for KHR_get_display_properties2 + if (!strcmp("vkGetPhysicalDeviceDisplayProperties2KHR", name)) { + *addr = + loader_inst->enabled_extensions.khr_get_display_properties2 ? (void *)vkGetPhysicalDeviceDisplayProperties2KHR : NULL; + return true; + } + if (!strcmp("vkGetPhysicalDeviceDisplayPlaneProperties2KHR", name)) { + *addr = loader_inst->enabled_extensions.khr_get_display_properties2 ? (void *)vkGetPhysicalDeviceDisplayPlaneProperties2KHR + : NULL; + return true; + } + if (!strcmp("vkGetDisplayModeProperties2KHR", name)) { + *addr = loader_inst->enabled_extensions.khr_get_display_properties2 ? (void *)vkGetDisplayModeProperties2KHR : NULL; + return true; + } + if (!strcmp("vkGetDisplayPlaneCapabilities2KHR", name)) { + *addr = loader_inst->enabled_extensions.khr_get_display_properties2 ? (void *)vkGetDisplayPlaneCapabilities2KHR : NULL; + return true; + } + + return false; +} diff --git a/local/recipes/libs/vulkan-loader/source/loader/wsi.h b/local/recipes/libs/vulkan-loader/source/loader/wsi.h new file mode 100644 index 0000000000..c259f3b173 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/loader/wsi.h @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2015-2021 The Khronos Group Inc. + * Copyright (c) 2015-2021 Valve Corporation + * Copyright (c) 2015-2021 LunarG, 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. + * + * Author: Ian Elliott + * Author: Charles Giessen + * + */ + +#pragma once + +#include "loader_common.h" + +typedef struct { + // This union holds the data that drivers which use ICD interface version 2 and before expect. This is so they can dereference + // VkSurfaceKHR to get this struct and access the creation parameters used in subsequent API calls, such as get surface formats + // & get surface present modes. + // Thus, these members need to stay here in order to preserve ABI compatibility. + union { +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + VkIcdSurfaceWayland wayland_surf; +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + VkIcdSurfaceWin32 win_surf; +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + VkIcdSurfaceXcb xcb_surf; +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + VkIcdSurfaceXlib xlib_surf; +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + VkIcdSurfaceDirectFB directfb_surf; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_MACOS_MVK) + VkIcdSurfaceMacOS macos_surf; +#endif // VK_USE_PLATFORM_MACOS_MVK +#if defined(VK_USE_PLATFORM_GGP) + VkIcdSurfaceGgp ggp_surf; +#endif // VK_USE_PLATFORM_GGP +#if defined(VK_USE_PLATFORM_FUCHSIA) + VkIcdSurfaceImagePipe imagepipe_surf; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_METAL_EXT) + VkIcdSurfaceMetal metal_surf; +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + VkIcdSurfaceScreen screen_surf; +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_VI_NN) + VkIcdSurfaceVi vi_surf; +#endif // VK_USE_PLATFORM_VI_NN + VkIcdSurfaceDisplay display_surf; + VkIcdSurfaceHeadless headless_surf; + + // All of the specific ICD surface structures start with the base structure + VkIcdSurfaceBase base; + }; + uint32_t base_size; // Size of VkIcdSurfaceBase + uint32_t platform_size; // Size of corresponding VkIcdSurfaceXXX + uint32_t non_platform_offset; // Start offset to base_size + uint32_t entire_size; // Size of entire VkIcdSurface + uint32_t surface_index; // This surface's index into each drivers list of created surfaces + + bool callbacks_valid; // Need to store if a VkAllocationCallbacks pointer was used. + VkAllocationCallbacks callbacks; // Storage for the callbacks + + // The create info parameters captured by the union in VkIcdSurface are insufficient, as they do not + // capture every single parameter from the create info (e.g. flags that did not have any flags defined + // at the time) and they also cannot capture extension structures, so we are including a separate + // pointer that will hold a copy of the original creation structure chain. This chain can only capture + // known extension structures and preferably should be auto-generated, but the list of extension + // structures is rather limited (there is only a single display surface creation structure extension + // at the time of writing). + uint8_t *create_info; + +} VkIcdSurface; + +VkResult wsi_unwrap_icd_surface(struct loader_icd_term *icd_term, VkSurfaceKHR *surface); + +bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr); + +bool wsi_unsupported_instance_extension(const VkExtensionProperties *ext_prop); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateHeadlessSurfaceEXT(VkInstance instance, + const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain); + +VKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, + const VkAllocationCallbacks *pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, VkSurfaceKHR surface, + VkBool32 *pSupported); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR *pSurfaceCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormatKHR *pSurfaceFormats); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, uint32_t *pPresentModeCount, + VkPresentModeKHR *pPresentModes); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR *pModes); + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex); +#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance instance, + const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct wl_display *display); +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); + +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t *connection, + xcb_visualid_t visual_id); +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, Display *dpy, + VisualID visualID); +#endif +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDirectFBSurfaceEXT(VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + IDirectFB *dfb); +#endif +#if defined(VK_USE_PLATFORM_MACOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +#endif +#if defined(VK_USE_PLATFORM_IOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateIOSSurfaceMVK(VkInstance instance, const VkIOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +#endif +#if defined(VK_USE_PLATFORM_GGP) +VKAPI_ATTR VkResult VKAPI_CALL +terminator_CreateStreamDescriptorSurfaceGGP(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMetalSurfaceEXT(VkInstance instance, const VkMetalSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +#endif +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateScreenSurfaceQNX(VkInstance instance, + const VkScreenSurfaceCreateInfoQNX *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceScreenPresentationSupportQNX(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + struct _screen_window *window); +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_VI_NN) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateViSurfaceNN(VkInstance instance, const VkViSurfaceCreateInfoNN *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +#endif // VK_USE_PLATFORM_VI_NN +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPropertiesKHR *pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPlanePropertiesKHR *pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex, + uint32_t *pDisplayCount, VkDisplayKHR *pDisplays); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModePropertiesKHR *pProperties); +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode); +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, + uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR *pCapabilities); +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstance instance, + const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR *pCreateInfos, + const VkAllocationCallbacks *pAllocator, + VkSwapchainKHR *pSwapchains); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, uint32_t *pRectCount, + VkRect2D *pRects); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayProperties2KHR *pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPlaneProperties2KHR *pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModeProperties2KHR *pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR *pCapabilities); +#if defined(VK_USE_PLATFORM_FUCHSIA) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateImagePipeSurfaceFUCHSIA(VkInstance instance, + const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface); +#endif + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateAndroidSurfaceKHR(VkInstance instance, + const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); +#endif + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkSurfaceCapabilities2KHR *pSurfaceCapabilities); + +VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pSurfaceFormatCount, + VkSurfaceFormat2KHR *pSurfaceFormats); diff --git a/local/recipes/libs/vulkan-loader/source/scripts/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/scripts/CMakeLists.txt new file mode 100644 index 0000000000..f52f3dcd65 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/CMakeLists.txt @@ -0,0 +1,146 @@ +# ~~~ +# Copyright (c) 2023 LunarG, 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. +# ~~~ + +option(UPDATE_DEPS "Run update_deps.py for user") +if (UPDATE_DEPS) + find_package(Python3 REQUIRED QUIET) + + set(update_dep_py "${CMAKE_CURRENT_LIST_DIR}/update_deps.py") + set(known_good_json "${CMAKE_CURRENT_LIST_DIR}/known_good.json") + + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${update_dep_py} ${known_good_json}) + + list(APPEND update_dep_command "${update_dep_py}") + list(APPEND update_dep_command "--generator") + list(APPEND update_dep_command "${CMAKE_GENERATOR}") + + if (CMAKE_GENERATOR_PLATFORM) + list(APPEND update_dep_command "--arch") + list(APPEND update_dep_command "${CMAKE_GENERATOR_PLATFORM}") + endif() + + if ("${CMAKE_OSX_ARCHITECTURES}" MATCHES ";") + list(APPEND update_dep_command "--osx-archs") + string(REPLACE ";" ":" osx_archs "${CMAKE_OSX_ARCHITECTURES}") + list(APPEND update_dep_command "${osx_archs}") + + set(APPLE_UNIVERSAL_BINARY ON) + endif() + + if (NOT CMAKE_BUILD_TYPE) + message(WARNING "CMAKE_BUILD_TYPE not set. Using Debug for dependency build type") + set(_build_type Debug) + else() + set(_build_type ${CMAKE_BUILD_TYPE}) + endif() + list(APPEND update_dep_command "--config") + list(APPEND update_dep_command "${_build_type}") + list(APPEND update_dep_command "--api") + list(APPEND update_dep_command "${API_TYPE}") + + set(UPDATE_DEPS_DIR_SUFFIX "${_build_type}") + if (CMAKE_CROSSCOMPILING) + if (APPLE_UNIVERSAL_BINARY) + set(UPDATE_DEPS_DIR_SUFFIX "${CMAKE_SYSTEM_NAME}/${UPDATE_DEPS_DIR_SUFFIX}/universal") + else() + set(UPDATE_DEPS_DIR_SUFFIX "${CMAKE_SYSTEM_NAME}/${UPDATE_DEPS_DIR_SUFFIX}/${CMAKE_SYSTEM_PROCESSOR}") + endif() + else() + if (APPLE_UNIVERSAL_BINARY) + set(UPDATE_DEPS_DIR_SUFFIX "${UPDATE_DEPS_DIR_SUFFIX}/universal") + else() + math(EXPR bitness "8 * ${CMAKE_SIZEOF_VOID_P}") + set(UPDATE_DEPS_DIR_SUFFIX "${UPDATE_DEPS_DIR_SUFFIX}/${bitness}") + endif() + endif() + set(UPDATE_DEPS_DIR "${PROJECT_SOURCE_DIR}/external/${UPDATE_DEPS_DIR_SUFFIX}" CACHE PATH "Location where update_deps.py installs packages") + list(APPEND update_dep_command "--dir" ) + list(APPEND update_dep_command "${UPDATE_DEPS_DIR}") + + if (NOT BUILD_TESTS) + list(APPEND update_dep_command "--optional=tests") + endif() + + if (UPDATE_DEPS_SKIP_EXISTING_INSTALL) + list(APPEND update_dep_command "--skip-existing-install") + endif() + + list(APPEND cmake_vars "CMAKE_TOOLCHAIN_FILE") + + # Avoids manually setting CMAKE_SYSTEM_NAME unless it's needed: + # https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING.html + if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}") + list(APPEND cmake_vars "CMAKE_SYSTEM_NAME") + endif() + if (APPLE) + list(APPEND cmake_vars "CMAKE_OSX_DEPLOYMENT_TARGET") + endif() + if (NOT MSVC_IDE) + list(APPEND cmake_vars "CMAKE_CXX_COMPILER" "CMAKE_C_COMPILER" "CMAKE_ASM_COMPILER") + endif() + if (ANDROID) + list(APPEND cmake_vars "ANDROID_PLATFORM" "CMAKE_ANDROID_ARCH_ABI" "CMAKE_ANDROID_STL_TYPE" "CMAKE_ANDROID_RTTI" "CMAKE_ANDROID_EXCEPTIONS" "ANDROID_USE_LEGACY_TOOLCHAIN_FILE") + endif() + + set(cmake_var) + foreach(var IN LISTS cmake_vars) + if (DEFINED ${var}) + list(APPEND update_dep_command "--cmake_var") + list(APPEND update_dep_command "${var}=${${var}}") + endif() + endforeach() + + if (cmake_var) + list(APPEND update_dep_command "${cmake_var}") + endif() + + file(TIMESTAMP ${update_dep_py} timestamp_1) + file(TIMESTAMP ${known_good_json} timestamp_2) + + string("MD5" md5_hash "${timestamp_1}-${timestamp_2}-${update_dep_command}") + + set(UPDATE_DEPS_HASH "0" CACHE STRING "Default value until we run update_deps.py") + mark_as_advanced(UPDATE_DEPS_HASH) + + if ("${UPDATE_DEPS_HASH}" STREQUAL "0") + list(APPEND update_dep_command "--clean-build") + list(APPEND update_dep_command "--clean-install") + endif() + + if ("${md5_hash}" STREQUAL $CACHE{UPDATE_DEPS_HASH}) + message(DEBUG "update_deps.py: no work to do.") + else() + execute_process( + COMMAND ${Python3_EXECUTABLE} ${update_dep_command} + RESULT_VARIABLE _update_deps_result + ) + if (NOT (${_update_deps_result} EQUAL 0)) + message(FATAL_ERROR "Could not run update_deps.py which is necessary to download dependencies.") + endif() + set(UPDATE_DEPS_HASH ${md5_hash} CACHE STRING "Ensure we only run update_deps.py when we need to." FORCE) + include("${UPDATE_DEPS_DIR}/helper.cmake") + endif() +endif() +if (VULKAN_HEADERS_INSTALL_DIR) + list(APPEND CMAKE_PREFIX_PATH ${VULKAN_HEADERS_INSTALL_DIR}) + set(CMAKE_REQUIRE_FIND_PACKAGE_VulkanHeaders TRUE PARENT_SCOPE) +endif() + +set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) + +if (CMAKE_CROSSCOMPILING) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH} PARENT_SCOPE) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/scripts/CodeCoverage.cmake b/local/recipes/libs/vulkan-loader/source/scripts/CodeCoverage.cmake new file mode 100644 index 0000000000..4b9ca0e84f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/CodeCoverage.cmake @@ -0,0 +1,665 @@ +# +# Copyright (C) 2018-2020 by George Cave - gcave@stablecoder.ca +# +# 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. + +# USAGE: To enable any code coverage instrumentation/targets, the single CMake +# option of `CODE_COVERAGE` needs to be set to 'ON', either by GUI, ccmake, or +# on the command line. +# +# From this point, there are two primary methods for adding instrumentation to +# targets: 1 - A blanket instrumentation by calling `add_code_coverage()`, where +# all targets in that directory and all subdirectories are automatically +# instrumented. 2 - Per-target instrumentation by calling +# `target_code_coverage()`, where the target is given and thus only +# that target is instrumented. This applies to both libraries and executables. +# +# To add coverage targets, such as calling `make ccov` to generate the actual +# coverage information for perusal or consumption, call +# `target_code_coverage()` on an *executable* target. +# +# Example 1: All targets instrumented +# +# In this case, the coverage information reported will will be that of the +# `theLib` library target and `theExe` executable. +# +# 1a: Via global command +# +# ~~~ +# add_code_coverage() # Adds instrumentation to all targets +# +# add_library(theLib lib.cpp) +# +# add_executable(theExe main.cpp) +# target_link_libraries(theExe PRIVATE theLib) +# target_code_coverage(theExe) # As an executable target, adds the 'ccov-theExe' target (instrumentation already added via global anyways) for generating code coverage reports. +# ~~~ +# +# 1b: Via target commands +# +# ~~~ +# add_library(theLib lib.cpp) +# target_code_coverage(theLib) # As a library target, adds coverage instrumentation but no targets. +# +# add_executable(theExe main.cpp) +# target_link_libraries(theExe PRIVATE theLib) +# target_code_coverage(theExe) # As an executable target, adds the 'ccov-theExe' target and instrumentation for generating code coverage reports. +# ~~~ +# +# Example 2: Target instrumented, but with regex pattern of files to be excluded +# from report +# +# ~~~ +# add_executable(theExe main.cpp non_covered.cpp) +# target_code_coverage(theExe EXCLUDE non_covered.cpp test/*) # As an executable target, the reports will exclude the non-covered.cpp file, and any files in a test/ folder. +# ~~~ +# +# Example 3: Target added to the 'ccov' and 'ccov-all' targets +# +# ~~~ +# add_code_coverage_all_targets(EXCLUDE test/*) # Adds the 'ccov-all' target set and sets it to exclude all files in test/ folders. +# +# add_executable(theExe main.cpp non_covered.cpp) +# target_code_coverage(theExe AUTO ALL EXCLUDE non_covered.cpp test/*) # As an executable target, adds to the 'ccov' and ccov-all' targets, and the reports will exclude the non-covered.cpp file, and any files in a test/ folder. +# ~~~ + +# Options +# option( +# CODE_COVERAGE +# "Builds targets with code coverage instrumentation. (Requires GCC or Clang)" +# OFF) + +# Programs +find_program(LLVM_COV_PATH llvm-cov) +find_program(LLVM_PROFDATA_PATH llvm-profdata) +find_program(LCOV_PATH lcov) +find_program(GENHTML_PATH genhtml) +# Hide behind the 'advanced' mode flag for GUI/ccmake +mark_as_advanced(FORCE LLVM_COV_PATH LLVM_PROFDATA_PATH LCOV_PATH GENHTML_PATH) + +# Variables +set(CMAKE_COVERAGE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/ccov) +set_property(GLOBAL PROPERTY JOB_POOLS ccov_serial_pool=1) + +# Common initialization/checks +if(CODE_COVERAGE AND NOT CODE_COVERAGE_ADDED) + set(CODE_COVERAGE_ADDED ON) + + # Common Targets + add_custom_target( + ccov-preprocessing + COMMAND ${CMAKE_COMMAND} -E make_directory + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY} + DEPENDS ccov-clean) + + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" + OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + # Messages + message(STATUS "Building with llvm Code Coverage Tools") + + if(NOT LLVM_COV_PATH) + message(FATAL_ERROR "llvm-cov not found! Aborting.") + else() + # Version number checking for 'EXCLUDE' compatibility + execute_process(COMMAND ${LLVM_COV_PATH} --version + OUTPUT_VARIABLE LLVM_COV_VERSION_CALL_OUTPUT) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" LLVM_COV_VERSION + ${LLVM_COV_VERSION_CALL_OUTPUT}) + + if(LLVM_COV_VERSION VERSION_LESS "7.0.0") + message( + WARNING + "target_code_coverage()/add_code_coverage_all_targets() 'EXCLUDE' option only available on llvm-cov >= 7.0.0" + ) + endif() + endif() + + # Targets + if(${CMAKE_VERSION} VERSION_LESS "3.17.0") + add_custom_target( + ccov-clean + COMMAND ${CMAKE_COMMAND} -E remove -f + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list + COMMAND ${CMAKE_COMMAND} -E remove -f + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list) + else() + add_custom_target( + ccov-clean + COMMAND ${CMAKE_COMMAND} -E rm -f + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list + COMMAND ${CMAKE_COMMAND} -E rm -f + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list) + endif() + + # Used to get the shared object file list before doing the main all- + # processing + add_custom_target( + ccov-libs + COMMAND ; + COMMENT "libs ready for coverage report.") + + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES + "GNU") + # Messages + message(STATUS "Building with lcov Code Coverage Tools") + + if(CMAKE_BUILD_TYPE) + string(TOUPPER ${CMAKE_BUILD_TYPE} upper_build_type) + if(NOT ${upper_build_type} STREQUAL "DEBUG") + message( + WARNING + "Code coverage results with an optimized (non-Debug) build may be misleading" + ) + endif() + else() + message( + WARNING + "Code coverage results with an optimized (non-Debug) build may be misleading" + ) + endif() + if(NOT LCOV_PATH) + message(FATAL_ERROR "lcov not found! Aborting...") + endif() + if(NOT GENHTML_PATH) + message(FATAL_ERROR "genhtml not found! Aborting...") + endif() + + # Targets + add_custom_target(ccov-clean COMMAND ${LCOV_PATH} --directory + ${CMAKE_BINARY_DIR} --zerocounters) + + else() + message(FATAL_ERROR "Code coverage requires Clang or GCC. Aborting.") + endif() +endif() + +# Adds code coverage instrumentation to a library, or instrumentation/targets +# for an executable target. +# ~~~ +# EXECUTABLE ADDED TARGETS: +# GCOV/LCOV: +# ccov : Generates HTML code coverage report for every target added with 'AUTO' parameter. +# ccov-${TARGET_NAME} : Generates HTML code coverage report for the associated named target. +# ccov-all : Generates HTML code coverage report, merging every target added with 'ALL' parameter into a single detailed report. +# +# LLVM-COV: +# ccov : Generates HTML code coverage report for every target added with 'AUTO' parameter. +# ccov-report : Generates HTML code coverage report for every target added with 'AUTO' parameter. +# ccov-${TARGET_NAME} : Generates HTML code coverage report. +# ccov-report-${TARGET_NAME} : Prints to command line summary per-file coverage information. +# ccov-export-${TARGET_NAME} : Exports the coverage report to a JSON file. +# ccov-show-${TARGET_NAME} : Prints to command line detailed per-line coverage information. +# ccov-all : Generates HTML code coverage report, merging every target added with 'ALL' parameter into a single detailed report. +# ccov-all-report : Prints summary per-file coverage information for every target added with ALL' parameter to the command line. +# ccov-all-export : Exports the coverage report to a JSON file. +# +# Required: +# TARGET_NAME - Name of the target to generate code coverage for. +# Optional: +# PUBLIC - Sets the visibility for added compile options to targets to PUBLIC instead of the default of PRIVATE. +# INTERFACE - Sets the visibility for added compile options to targets to INTERFACE instead of the default of PRIVATE. +# AUTO - Adds the target to the 'ccov' target so that it can be run in a batch with others easily. Effective on executable targets. +# ALL - Adds the target to the 'ccov-all' and 'ccov-all-report' targets, which merge several executable targets coverage data to a single report. Effective on executable targets. +# EXTERNAL - For GCC's lcov, allows the profiling of 'external' files from the processing directory +# COVERAGE_TARGET_NAME - For executables ONLY, changes the outgoing target name so instead of `ccov-${TARGET_NAME}` it becomes `ccov-${COVERAGE_TARGET_NAME}`. +# EXCLUDE - Excludes files of the patterns provided from coverage. Note that GCC/lcov excludes by glob pattern, and clang/LLVM excludes via regex! **These do not copy to the 'all' targets.** +# OBJECTS - For executables ONLY, if the provided targets are shared libraries, adds coverage information to the output +# ARGS - For executables ONLY, appends the given arguments to the associated ccov-* executable call +# ~~~ +function(target_code_coverage TARGET_NAME) + # Argument parsing + set(options AUTO ALL EXTERNAL PUBLIC INTERFACE) + set(single_value_keywords COVERAGE_TARGET_NAME) + set(multi_value_keywords EXCLUDE OBJECTS ARGS) + cmake_parse_arguments( + target_code_coverage "${options}" "${single_value_keywords}" + "${multi_value_keywords}" ${ARGN}) + + # Set the visibility of target functions to PUBLIC, INTERFACE or default to + # PRIVATE. + if(target_code_coverage_PUBLIC) + set(TARGET_VISIBILITY PUBLIC) + elseif(target_code_coverage_INTERFACE) + set(TARGET_VISIBILITY INTERFACE) + else() + set(TARGET_VISIBILITY PRIVATE) + endif() + + if(NOT target_code_coverage_COVERAGE_TARGET_NAME) + # If a specific name was given, use that instead. + set(target_code_coverage_COVERAGE_TARGET_NAME ${TARGET_NAME}) + endif() + + if(CODE_COVERAGE) + + # Add code coverage instrumentation to the target's linker command + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" + OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + target_compile_options(${TARGET_NAME} ${TARGET_VISIBILITY} + -fprofile-instr-generate -fcoverage-mapping) + target_link_options(${TARGET_NAME} ${TARGET_VISIBILITY} + -fprofile-instr-generate -fcoverage-mapping) + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES + "GNU") + target_compile_options(${TARGET_NAME} ${TARGET_VISIBILITY} -fprofile-arcs + -ftest-coverage) + target_link_libraries(${TARGET_NAME} ${TARGET_VISIBILITY} gcov) + endif() + + # Targets + get_target_property(target_type ${TARGET_NAME} TYPE) + + # Add shared library to processing for 'all' targets + if(target_type STREQUAL "SHARED_LIBRARY" AND target_code_coverage_ALL) + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" + OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + add_custom_target( + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${CMAKE_COMMAND} -E echo "-object=$" >> + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list + DEPENDS ccov-preprocessing ${TARGET_NAME}) + + if(NOT TARGET ccov-libs) + message( + FATAL_ERROR + "Calling target_code_coverage with 'ALL' must be after a call to 'add_code_coverage_all_targets'." + ) + endif() + + add_dependencies(ccov-libs + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) + endif() + endif() + + # For executables add targets to run and produce output + if(target_type STREQUAL "EXECUTABLE") + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" + OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + + # If there are shared objects to also work with, generate the string to + # add them here + foreach(SO_TARGET ${target_code_coverage_OBJECTS}) + # Check to see if the target is a shared object + if(TARGET ${SO_TARGET}) + get_target_property(SO_TARGET_TYPE ${SO_TARGET} TYPE) + if(${SO_TARGET_TYPE} STREQUAL "SHARED_LIBRARY") + set(SO_OBJECTS ${SO_OBJECTS} -object=$) + endif() + endif() + endforeach() + + # Run the executable, generating raw profile data Make the run data + # available for further processing. Separated to allow Windows to run + # this target serially. + add_custom_target( + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${CMAKE_COMMAND} -E env + LLVM_PROFILE_FILE=${target_code_coverage_COVERAGE_TARGET_NAME}.profraw + $ ${target_code_coverage_ARGS} + COMMAND + ${CMAKE_COMMAND} -E echo "-object=$" + ${SO_OBJECTS} >> ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list + COMMAND + ${CMAKE_COMMAND} -E echo + "${CMAKE_CURRENT_BINARY_DIR}/${target_code_coverage_COVERAGE_TARGET_NAME}.profraw" + >> ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list + JOB_POOL ccov_serial_pool + DEPENDS ccov-preprocessing ccov-libs ${TARGET_NAME}) + + # Merge the generated profile data so llvm-cov can process it + add_custom_target( + ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${LLVM_PROFDATA_PATH} merge -sparse + ${target_code_coverage_COVERAGE_TARGET_NAME}.profraw -o + ${target_code_coverage_COVERAGE_TARGET_NAME}.profdata + DEPENDS ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) + + # Ignore regex only works on LLVM >= 7 + if(LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0") + foreach(EXCLUDE_ITEM ${target_code_coverage_EXCLUDE}) + set(EXCLUDE_REGEX ${EXCLUDE_REGEX} + -ignore-filename-regex='${EXCLUDE_ITEM}') + endforeach() + endif() + + # Print out details of the coverage information to the command line + add_custom_target( + ccov-show-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${LLVM_COV_PATH} show $ ${SO_OBJECTS} + -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata + -show-line-counts-or-regions ${EXCLUDE_REGEX} + DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) + + # Print out a summary of the coverage information to the command line + add_custom_target( + ccov-report-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${LLVM_COV_PATH} report $ ${SO_OBJECTS} + -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata + ${EXCLUDE_REGEX} + DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) + + # Export coverage information so continuous integration tools (e.g. + # Jenkins) can consume it + add_custom_target( + ccov-export-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${LLVM_COV_PATH} export $ ${SO_OBJECTS} + -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata + -format="text" ${EXCLUDE_REGEX} > + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}.json + DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) + + # Generates HTML output of the coverage information for perusal + add_custom_target( + ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${LLVM_COV_PATH} show $ ${SO_OBJECTS} + -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata + -show-line-counts-or-regions + -output-dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME} + -format="html" ${EXCLUDE_REGEX} + DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) + + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES + "GNU") + set(COVERAGE_INFO + "${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}.info" + ) + + # Run the executable, generating coverage information + add_custom_target( + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND $ ${target_code_coverage_ARGS} + DEPENDS ccov-preprocessing ${TARGET_NAME}) + + # Generate exclusion string for use + foreach(EXCLUDE_ITEM ${target_code_coverage_EXCLUDE}) + set(EXCLUDE_REGEX ${EXCLUDE_REGEX} --remove ${COVERAGE_INFO} + '${EXCLUDE_ITEM}') + endforeach() + + if(EXCLUDE_REGEX) + set(EXCLUDE_COMMAND ${LCOV_PATH} ${EXCLUDE_REGEX} --output-file + ${COVERAGE_INFO}) + else() + set(EXCLUDE_COMMAND ;) + endif() + + if(NOT ${target_code_coverage_EXTERNAL}) + set(EXTERNAL_OPTION --no-external) + endif() + + # Capture coverage data + if(${CMAKE_VERSION} VERSION_LESS "3.17.0") + add_custom_target( + ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND ${CMAKE_COMMAND} -E remove -f ${COVERAGE_INFO} + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters + COMMAND $ ${target_code_coverage_ARGS} + COMMAND + ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --base-directory + ${CMAKE_SOURCE_DIR} --capture ${EXTERNAL_OPTION} --output-file + ${COVERAGE_INFO} + COMMAND ${EXCLUDE_COMMAND} + DEPENDS ccov-preprocessing ${TARGET_NAME}) + else() + add_custom_target( + ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND ${CMAKE_COMMAND} -E rm -f ${COVERAGE_INFO} + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters + COMMAND $ ${target_code_coverage_ARGS} + COMMAND + ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --base-directory + ${CMAKE_SOURCE_DIR} --capture ${EXTERNAL_OPTION} --output-file + ${COVERAGE_INFO} + COMMAND ${EXCLUDE_COMMAND} + DEPENDS ccov-preprocessing ${TARGET_NAME}) + endif() + + # Generates HTML output of the coverage information for perusal + add_custom_target( + ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${GENHTML_PATH} -o + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME} + ${COVERAGE_INFO} + DEPENDS ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME}) + endif() + + add_custom_command( + TARGET ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + POST_BUILD + COMMAND ; + COMMENT + "Open ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}/index.html in your browser to view the coverage report." + ) + + # AUTO + if(target_code_coverage_AUTO) + if(NOT TARGET ccov) + add_custom_target(ccov) + endif() + add_dependencies(ccov ccov-${target_code_coverage_COVERAGE_TARGET_NAME}) + + if(NOT CMAKE_C_COMPILER_ID MATCHES "GNU" AND NOT CMAKE_CXX_COMPILER_ID + MATCHES "GNU") + if(NOT TARGET ccov-report) + add_custom_target(ccov-report) + endif() + add_dependencies( + ccov-report + ccov-report-${target_code_coverage_COVERAGE_TARGET_NAME}) + endif() + endif() + + # ALL + if(target_code_coverage_ALL) + if(NOT TARGET ccov-all-processing) + message( + FATAL_ERROR + "Calling target_code_coverage with 'ALL' must be after a call to 'add_code_coverage_all_targets'." + ) + endif() + + add_dependencies(ccov-all-processing + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) + endif() + endif() + endif() +endfunction() + +# Adds code coverage instrumentation to all targets in the current directory and +# any subdirectories. To add coverage instrumentation to only specific targets, +# use `target_code_coverage`. +function(add_code_coverage) + if(CODE_COVERAGE) + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" + OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + add_compile_options(-fprofile-instr-generate -fcoverage-mapping) + add_link_options(-fprofile-instr-generate -fcoverage-mapping) + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES + "GNU") + add_compile_options(-fprofile-arcs -ftest-coverage) + link_libraries(gcov) + endif() + endif() +endfunction() + +# Adds the 'ccov-all' type targets that calls all targets added via +# `target_code_coverage` with the `ALL` parameter, but merges all the coverage +# data from them into a single large report instead of the numerous smaller +# reports. Also adds the ccov-all-capture Generates an all-merged.info file, for +# use with coverage dashboards (e.g. codecov.io, coveralls). +# ~~~ +# Optional: +# EXCLUDE - Excludes files of the patterns provided from coverage. Note that GCC/lcov excludes by glob pattern, and clang/LLVM excludes via regex! +# ~~~ +function(add_code_coverage_all_targets) + # Argument parsing + set(multi_value_keywords EXCLUDE) + cmake_parse_arguments(add_code_coverage_all_targets "" "" + "${multi_value_keywords}" ${ARGN}) + + if(CODE_COVERAGE) + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang" + OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + + # Merge the profile data for all of the run executables + if(WIN32) + add_custom_target( + ccov-all-processing + COMMAND + powershell -Command $$FILELIST = Get-Content + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list\; llvm-profdata.exe + merge -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata + -sparse $$FILELIST) + else() + add_custom_target( + ccov-all-processing + COMMAND + ${LLVM_PROFDATA_PATH} merge -o + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata -sparse `cat + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/profraw.list`) + endif() + + # Regex exclude only available for LLVM >= 7 + if(LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0") + foreach(EXCLUDE_ITEM ${add_code_coverage_all_targets_EXCLUDE}) + set(EXCLUDE_REGEX ${EXCLUDE_REGEX} + -ignore-filename-regex='${EXCLUDE_ITEM}') + endforeach() + endif() + + # Print summary of the code coverage information to the command line + if(WIN32) + add_custom_target( + ccov-all-report + COMMAND + powershell -Command $$FILELIST = Get-Content + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list\; llvm-cov.exe + report $$FILELIST + -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata + ${EXCLUDE_REGEX} + DEPENDS ccov-all-processing) + else() + add_custom_target( + ccov-all-report + COMMAND + ${LLVM_COV_PATH} report `cat + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list` + -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata + ${EXCLUDE_REGEX} + DEPENDS ccov-all-processing) + endif() + + # Export coverage information so continuous integration tools (e.g. + # Jenkins) can consume it + add_custom_target( + ccov-all-export + COMMAND + ${LLVM_COV_PATH} export `cat + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list` + -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata + -format="text" ${EXCLUDE_REGEX} > + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/coverage.json + DEPENDS ccov-all-processing) + + # Generate HTML output of all added targets for perusal + if(WIN32) + add_custom_target( + ccov-all + COMMAND + powershell -Command $$FILELIST = Get-Content + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list\; llvm-cov.exe show + $$FILELIST + -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata + -show-line-counts-or-regions + -output-dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged + -format="html" ${EXCLUDE_REGEX} + DEPENDS ccov-all-processing) + else() + add_custom_target( + ccov-all + COMMAND + ${LLVM_COV_PATH} show `cat + ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/binaries.list` + -instr-profile=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.profdata + -show-line-counts-or-regions + -output-dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged + -format="html" ${EXCLUDE_REGEX} + DEPENDS ccov-all-processing) + endif() + + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES + "GNU") + set(COVERAGE_INFO "${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged.info") + + # Nothing required for gcov + add_custom_target(ccov-all-processing COMMAND ;) + + # Exclusion regex string creation + set(EXCLUDE_REGEX) + foreach(EXCLUDE_ITEM ${add_code_coverage_all_targets_EXCLUDE}) + set(EXCLUDE_REGEX ${EXCLUDE_REGEX} --remove ${COVERAGE_INFO} + '${EXCLUDE_ITEM}') + endforeach() + + if(EXCLUDE_REGEX) + set(EXCLUDE_COMMAND ${LCOV_PATH} ${EXCLUDE_REGEX} --output-file + ${COVERAGE_INFO}) + else() + set(EXCLUDE_COMMAND ;) + endif() + + # Capture coverage data + if(${CMAKE_VERSION} VERSION_LESS "3.17.0") + add_custom_target( + ccov-all-capture + COMMAND ${CMAKE_COMMAND} -E remove -f ${COVERAGE_INFO} + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture + --output-file ${COVERAGE_INFO} + COMMAND ${EXCLUDE_COMMAND} + DEPENDS ccov-preprocessing ccov-all-processing) + else() + add_custom_target( + ccov-all-capture + COMMAND ${CMAKE_COMMAND} -E rm -f ${COVERAGE_INFO} + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture + --output-file ${COVERAGE_INFO} + COMMAND ${EXCLUDE_COMMAND} + DEPENDS ccov-preprocessing ccov-all-processing) + endif() + + # Generates HTML output of all targets for perusal + add_custom_target( + ccov-all + COMMAND ${GENHTML_PATH} -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged + ${COVERAGE_INFO} -p ${CMAKE_SOURCE_DIR} + DEPENDS ccov-all-capture) + + endif() + + add_custom_command( + TARGET ccov-all + POST_BUILD + COMMAND ; + COMMENT + "Open ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged/index.html in your browser to view the coverage report." + ) + endif() +endfunction() diff --git a/local/recipes/libs/vulkan-loader/source/scripts/common_codegen.py b/local/recipes/libs/vulkan-loader/source/scripts/common_codegen.py new file mode 100644 index 0000000000..860eea5be0 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/common_codegen.py @@ -0,0 +1,110 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2017, 2019-2021 The Khronos Group Inc. +# Copyright (c) 2015-2017, 2019-2021 Valve Corporation +# Copyright (c) 2015-2017, 2019-2021 LunarG, 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. +# +# Author: Mark Lobodzinski + +import os +import sys +import subprocess + +# Copyright text prefixing all headers (list of strings). +prefixStrings = [ + '/*', + '** Copyright (c) 2015-2017, 2019-2021 The Khronos Group Inc.', + '** Copyright (c) 2015-2017, 2019-2021 Valve Corporation', + '** Copyright (c) 2015-2017, 2019-2021 LunarG, Inc.', + '** Copyright (c) 2015-2017, 2019-2021 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.', + '*/', + '' +] + + +platform_dict = { + 'android' : 'VK_USE_PLATFORM_ANDROID_KHR', + 'fuchsia' : 'VK_USE_PLATFORM_FUCHSIA', + 'ggp': 'VK_USE_PLATFORM_GGP', + 'ios' : 'VK_USE_PLATFORM_IOS_MVK', + 'macos' : 'VK_USE_PLATFORM_MACOS_MVK', + 'metal' : 'VK_USE_PLATFORM_METAL_EXT', + 'vi' : 'VK_USE_PLATFORM_VI_NN', + 'wayland' : 'VK_USE_PLATFORM_WAYLAND_KHR', + 'win32' : 'VK_USE_PLATFORM_WIN32_KHR', + 'xcb' : 'VK_USE_PLATFORM_XCB_KHR', + 'xlib' : 'VK_USE_PLATFORM_XLIB_KHR', + 'directfb' : 'VK_USE_PLATFORM_DIRECTFB_EXT', + 'xlib_xrandr' : 'VK_USE_PLATFORM_XLIB_XRANDR_EXT', + 'provisional' : 'VK_ENABLE_BETA_EXTENSIONS', + 'screen' : 'VK_USE_PLATFORM_SCREEN_QNX', +} + +# +# Return appropriate feature protect string from 'platform' tag on feature +def GetFeatureProtect(interface): + """Get platform protection string""" + platform = interface.get('platform') + protect = None + if platform is not None: + protect = platform_dict[platform] + return protect + +# helper to define paths relative to the repo root +def repo_relative(path): + return os.path.abspath(os.path.join(os.path.dirname(__file__), '..', path)) + +# Points to the directory containing the top level CMakeLists.txt +PROJECT_SRC_DIR = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], '..')) +if not os.path.isfile(f'{PROJECT_SRC_DIR}/CMakeLists.txt'): + print(f'PROJECT_SRC_DIR invalid! {PROJECT_SRC_DIR}') + sys.exit(1) + +# Returns true if we are running in GitHub actions +# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables +def IsGHA(): + if 'GITHUB_ACTION' in os.environ: + return True + return False + +# Runs a command in a directory and returns its return code. +# Directory is project root by default, or a relative path from project root +def RunShellCmd(command, start_dir = PROJECT_SRC_DIR, env=None, verbose=False): + # Flush stdout here. Helps when debugging on CI. + sys.stdout.flush() + + if start_dir != PROJECT_SRC_DIR: + start_dir = repo_relative(start_dir) + cmd_list = command.split(" ") + + # Helps a lot when debugging CI issues + if IsGHA(): + verbose = True + + if verbose: + print(f'CICMD({cmd_list}, env={env})') + subprocess.check_call(cmd_list, cwd=start_dir, env=env) diff --git a/local/recipes/libs/vulkan-loader/source/scripts/generate_loader_rc.py b/local/recipes/libs/vulkan-loader/source/scripts/generate_loader_rc.py new file mode 100644 index 0000000000..8414cf2547 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/generate_loader_rc.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Khronos Group Inc. +# Copyright 2023 Valve Corporation +# Copyright 2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import sys + +def main(argv): + parser = argparse.ArgumentParser(description='Update Loader.rc for official builds') + parser.add_argument('src') + parser.add_argument('dst') + parser.add_argument('--is_official', action='store_true') + parser.set_defaults(is_official=False) + args = parser.parse_args(argv) + with open(args.src, 'r') as src: + with open(args.dst, 'w') as dst: + for line in src: + if args.is_official: + if line.startswith('#define VER_FILE_DESCRIPTION_STR'): + dst.write(line.replace('Dev Build', '0')) + elif line.startswith('#define VER_FILE_VERSION_STR'): + dst.write(line.replace(' - Dev Build', '')) + else: + dst.write(line) + else: + dst.write(line) +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/scripts/generate_source.py b/local/recipes/libs/vulkan-loader/source/scripts/generate_source.py new file mode 100755 index 0000000000..e12f7313d3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/generate_source.py @@ -0,0 +1,279 @@ +#!/usr/bin/env python3 +# Copyright (c) 2019 The Khronos Group Inc. +# Copyright (c) 2019 Valve Corporation +# Copyright (c) 2019 LunarG, Inc. +# Copyright (c) 2019 Google Inc. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2023 RasterGrid Kft. +# +# 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. +# +# Author: Mike Schuchardt + +import argparse +import filecmp +import os +import subprocess +import shutil +import sys +import tempfile +import datetime +import re +import common_codegen + +from xml.etree import ElementTree + +# Because we have special logic to import the Registry from input arguments and the BaseGenerator comes from the registry, we have to delay defining it until *after* +# the Registry has been imported. Yes this is awkward, but it was the least awkward way to make --verify work. +generators = {} + +def RunGenerators(api: str, registry: str, directory: str, styleFile: str, targetFilter: str, flatOutput: bool): + + try: + common_codegen.RunShellCmd(f'clang-format --version') + has_clang_format = True + except: + has_clang_format = False + if not has_clang_format: + print("WARNING: Unable to find clang-format!") + + # These live in the Vulkan-Docs repo, but are pulled in via the + # Vulkan-Headers/registry folder + # At runtime we inject python path to find these helper scripts + scripts = os.path.dirname(registry) + scripts_directory_path = os.path.dirname(os.path.abspath(__file__)) + registry_headers_path = os.path.join(scripts_directory_path, scripts) + sys.path.insert(0, registry_headers_path) + try: + from reg import Registry + except: + print("ModuleNotFoundError: No module named 'reg'") # normal python error message + print(f'{registry_headers_path} is not pointing to the Vulkan-Headers registry directory.') + print("Inside Vulkan-Headers there is a registry/reg.py file that is used.") + sys.exit(1) # Return without call stack so easy to spot error + + from base_generator import BaseGeneratorOptions + from generators.dispatch_table_helper_generator import DispatchTableHelperGenerator + from generators.helper_file_generator import HelperFileGenerator + from generators.loader_extension_generator import LoaderExtensionGenerator + + # These set fields that are needed by both OutputGenerator and BaseGenerator, + # but are uniform and don't need to be set at a per-generated file level + from base_generator import (SetTargetApiName, SetMergedApiNames) + SetTargetApiName(api) + + # Generated directory and dispatch table helper file name may be API specific (e.g. Vulkan SC) + generated_directory = 'loader/generated' + dispatch_table_helper_filename = 'vk_dispatch_table_helper.h' + + generators.update({ + 'vk_layer_dispatch_table.h': { + 'generator' : LoaderExtensionGenerator, + 'genCombined': False, + 'directory' : generated_directory, + }, + 'vk_loader_extensions.c': { + 'generator' : LoaderExtensionGenerator, + 'genCombined': False, + 'directory' : generated_directory, + }, + 'vk_loader_extensions.h': { + 'generator' : LoaderExtensionGenerator, + 'genCombined': False, + 'directory' : generated_directory, + }, + 'vk_object_types.h': { + 'generator' : HelperFileGenerator, + 'genCombined': True, + 'directory' : generated_directory, + }, + f'{dispatch_table_helper_filename}': { + 'generator' : DispatchTableHelperGenerator, + 'genCombined': False, + 'directory' : 'tests/framework/layer/generated', + } + }) + + unknownTargets = [x for x in (targetFilter if targetFilter else []) if x not in generators.keys()] + if unknownTargets: + print(f'ERROR: No generator options for unknown target(s): {", ".join(unknownTargets)}', file=sys.stderr) + return 1 + + # Filter if --target is passed in + targets = [x for x in generators.keys() if not targetFilter or x in targetFilter] + + for index, target in enumerate(targets, start=1): + print(f'[{index}|{len(targets)}] Generating {target}') + + # First grab a class contructor object and create an instance + generator = generators[target]['generator'] + gen = generator() + + # This code and the 'genCombined' generator metadata is used by downstream + # users to generate code with all Vulkan APIs merged into the target API variant + # (e.g. Vulkan SC) when needed. The constructed apiList is also used to filter + # out non-applicable extensions later below. + apiList = [api] + if api != 'vulkan' and generators[target]['genCombined']: + SetMergedApiNames('vulkan') + apiList.append('vulkan') + else: + SetMergedApiNames(None) + + # For people who want to generate all the files in a single director + if flatOutput: + outDirectory = os.path.abspath(os.path.join(directory)) + else: + outDirectory = os.path.abspath(os.path.join(directory, generators[target]['directory'])) + + options = BaseGeneratorOptions( + customFileName = target, + customDirectory = outDirectory) + + if not os.path.exists(outDirectory): + os.makedirs(outDirectory) + + # Create the registry object with the specified generator and generator + # options. The options are set before XML loading as they may affect it. + reg = Registry(gen, options) + + # Parse the specified registry XML into an ElementTree object + tree = ElementTree.parse(registry) + + # Load the XML tree into the registry object + reg.loadElementTree(tree) + + # Finally, use the output generator to create the requested target + reg.apiGen() + + # Run clang-format on the file + if has_clang_format and styleFile: + common_codegen.RunShellCmd(f'clang-format -i --style=file:{styleFile} {os.path.join(outDirectory, target)}') + + +def main(argv): + + # files to exclude from --verify check + verify_exclude = [] # None currently + + + parser = argparse.ArgumentParser(description='Generate source code for this repository') + parser.add_argument('registry', metavar='REGISTRY_PATH', help='path to the Vulkan-Headers registry directory') + parser.add_argument('--api', + default='vulkan', + choices=['vulkan'], + help='Specify API name to generate') + parser.add_argument('--generated-version', help='sets the header version used to generate the repo') + group = parser.add_mutually_exclusive_group() + group.add_argument('--target', nargs='+', help='only generate file names passed in') + group.add_argument('-i', '--incremental', action='store_true', help='only update repo files that change') + group.add_argument('-v', '--verify', action='store_true', help='verify repo files match generator output') + group.add_argument('-o', action='store', dest='directory', help='Create target and related files in specified directory') + args = parser.parse_args(argv) + + repo_dir = common_codegen.repo_relative('.') + + registry = os.path.abspath(os.path.join(args.registry, 'vk.xml')) + if not os.path.isfile(registry): + registry = os.path.abspath(os.path.join(args.registry, 'Vulkan-Headers/registry/vk.xml')) + if not os.path.isfile(registry): + print(f'cannot find vk.xml in {args.registry}') + return -1 + + # Need pass style file incase running with --verify and it can't find the file automatically in the temp directory + style_file = os.path.join(repo_dir, '.clang-format') + + # get directory where generators will run + if args.verify or args.incremental: + # generate in temp directory so we can compare or copy later + temp_obj = tempfile.TemporaryDirectory(prefix='loader_codegen_') + temp_dir = temp_obj.name + gen_dir = temp_dir + elif args.directory: + gen_dir = args.directory + else: + # generate directly in the repo + gen_dir = repo_dir + + RunGenerators(api=args.api,registry=registry, directory=gen_dir, styleFile=style_file, targetFilter=args.target, flatOutput=False) + + # optional post-generation steps + if args.verify: + + # compare contents of temp dir and repo + temp_files = {} + repo_files = {} + for details in generators.values(): + if details['directory'] not in temp_files: + temp_files[details['directory']] = set() + temp_files[details['directory']].update(set(os.listdir(os.path.join(temp_dir, details['directory'])))) + if details['directory'] not in repo_files: + repo_files[details['directory']] = set() + repo_files[details['directory']].update(set(os.listdir(os.path.join(repo_dir, details['directory']))) - set(verify_exclude)) + + # compare contents of temp dir and repo + files_match = True + for filename, details in generators.items(): + if filename not in repo_files[details['directory']]: + print('ERROR: Missing repo file', filename) + files_match = False + elif filename not in temp_files[details['directory']]: + print('ERROR: Missing generator for', filename) + files_match = False + elif not filecmp.cmp(os.path.join(temp_dir, details['directory'], filename), + os.path.join(repo_dir, details['directory'], filename), + shallow=False): + print('ERROR: Repo files do not match generator output for', filename) + files_match = False + + # return code for test scripts + if files_match: + print('SUCCESS: Repo files match generator output') + return 0 + return 1 + + elif args.incremental: + # copy missing or differing files from temp directory to repo + for filename, details in generators.items(): + temp_filename = os.path.join(temp_dir, details['directory'], filename) + repo_filename = os.path.join(repo_dir, details['directory'], filename) + if not os.path.exists(repo_filename) or \ + not filecmp.cmp(temp_filename, repo_filename, shallow=False): + print('update', repo_filename) + shutil.copyfile(temp_filename, repo_filename) + + # write out the header version used to generate the code to a checked in CMake file + if args.generated_version: + # Update the CMake project version + with open(common_codegen.repo_relative('CMakeLists.txt'), "r+") as f: + data = f.read() + f.seek(0) + f.write(re.sub("project.*VERSION.*", f"project(VULKAN_LOADER VERSION {args.generated_version} LANGUAGES C)", data)) + f.truncate() + + with open(common_codegen.repo_relative('loader/loader.rc.in'), "r") as rc_file: + rc_file_contents = rc_file.read() + rc_ver = ', '.join(args.generated_version.split('.') + ['0']) + rc_file_contents = rc_file_contents.replace('${LOADER_VER_FILE_VERSION}', f'{rc_ver}') + rc_file_contents = rc_file_contents.replace('${LOADER_VER_FILE_DESCRIPTION_STR}', f'"{args.generated_version}.Dev Build"') + rc_file_contents = rc_file_contents.replace('${LOADER_VER_FILE_VERSION_STR}', f'"Vulkan Loader - Dev Build"') + rc_file_contents = rc_file_contents.replace('${LOADER_CUR_COPYRIGHT_YEAR}', f'{datetime.date.today().year}') + with open(common_codegen.repo_relative('loader/loader.rc'), "w") as rc_file_out: + rc_file_out.write(rc_file_contents) + rc_file_out.close() + + return 0 + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) + diff --git a/local/recipes/libs/vulkan-loader/source/scripts/generators/dispatch_table_helper_generator.py b/local/recipes/libs/vulkan-loader/source/scripts/generators/dispatch_table_helper_generator.py new file mode 100644 index 0000000000..410938a927 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/generators/dispatch_table_helper_generator.py @@ -0,0 +1,104 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2021 The Khronos Group Inc. +# Copyright (c) 2015-2021 Valve Corporation +# Copyright (c) 2015-2021 LunarG, Inc. +# Copyright (c) 2015-2021 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. +# +# Author: Mark Lobodzinski +# Author: Charles Giessen + +import os +from base_generator import BaseGenerator + +class DispatchTableHelperGenerator(BaseGenerator): + def __init__(self): + BaseGenerator.__init__(self) + + def generate(self): + out = [] + + out.append(f'''#pragma once +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See {os.path.basename(__file__)} for modifications + +/* + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, 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. + * + * Author: Courtney Goeltzenleuchter + * Author: Jon Ashburn + * Author: Mark Lobodzinski + * Author: Charles Giessen + */ + +#include +#include +#include +#include "vk_layer_dispatch_table.h" + +''') + + self.OutputDispatchTableHelper(out, 'device') + out.append('\n\n') + self.OutputDispatchTableHelper(out, 'instance') + + self.write(''.join(out)) + + # Create a dispatch table from the corresponding table_type and append it to out + def OutputDispatchTableHelper(self, out: list, table_type: str): + out.append(' // clang-format off\n') + if table_type == 'device': + out.append('static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDispatchTable *table, PFN_vkGetDeviceProcAddr gpa) {\n') + out.append(' memset(table, 0, sizeof(*table));\n') + out.append(' table->magic = DEVICE_DISP_TABLE_MAGIC_NUMBER;\n\n') + out.append(' // Device function pointers\n') + else: + out.append('static inline void layer_init_instance_dispatch_table(VkInstance instance, VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa) {\n') + out.append(' memset(table, 0, sizeof(*table));\n\n') + out.append(' // Instance function pointers\n') + + for command_name, command in self.vk.commands.items(): + if (table_type == 'device' and not command.device) or (table_type == 'instance' and command.device): + continue + + if command.protect is not None: + out.append( f'#if defined({command.protect})\n') + + # If we're looking for the proc we are passing in, just point the table to it. This fixes the issue where + # a layer overrides the function name for the loader. + if (table_type == 'device' and command_name == 'vkGetDeviceProcAddr'): + out.append( ' table->GetDeviceProcAddr = gpa;\n') + elif (table_type != 'device' and command_name == 'vkGetInstanceProcAddr'): + out.append( ' table->GetInstanceProcAddr = gpa;\n') + else: + out.append( f' table->{command_name[2:]} = (PFN_{command_name})gpa({table_type}, "{command_name}");\n') + if command.protect is not None: + out.append( f'#endif // {command.protect}\n') + out.append(' // clang-format on\n') + out.append('}') diff --git a/local/recipes/libs/vulkan-loader/source/scripts/generators/helper_file_generator.py b/local/recipes/libs/vulkan-loader/source/scripts/generators/helper_file_generator.py new file mode 100644 index 0000000000..e3c756a06e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/generators/helper_file_generator.py @@ -0,0 +1,205 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2017 The Khronos Group Inc. +# Copyright (c) 2015-2017 Valve Corporation +# Copyright (c) 2015-2017 LunarG, Inc. +# Copyright (c) 2015-2017 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. +# +# Author: Mark Lobodzinski +# Author: Tobin Ehlis +# Author: John Zulauf +# Author: Charles Giessen + +import re +import os +from base_generator import BaseGenerator + +class HelperFileGenerator(BaseGenerator): + def __init__(self): + BaseGenerator.__init__(self) + + # Helper for VkDebugReportObjectTypeEXT + # Maps [ 'VkBuffer' : 'VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT' ] + # Will be 'VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' if no type + self.debugReportObject = dict() + # Maps [ 'VkBuffer' : 'VK_OBJECT_TYPE_BUFFER' ] + self.objectType = dict() + + # Takes a VK_OBJECT_TYPE_THE_TYP_EXT and turns it into TheTypeEXT + def get_kVulkanObjectName(self, str_to_process): + removed_prefix = str_to_process.split('_')[3:] + if ''.join(removed_prefix[-1:]) in self.vk.vendorTags: + return ''.join(str_to_process.title().split('_')[3:-1] + removed_prefix[-1:]) + else: + return ''.join(str_to_process.title().split('_')[3:]) + + def split_handle_by_capital_case(self, str_to_split): + name = str_to_split[2:] + name = name.replace('NVX', 'Nvx') + # Force vendor tags to be title case so we can split by capital letter + for tag in self.vk.vendorTags: + name = name.replace(tag, tag.title()) + # Split by capital letters so we can concoct a VK_DEBUG_REPORT_<>_EXT string out of it + return re.split('(?<=.)(?=[A-Z])', f'{name}') + + + def convert_to_VK_OBJECT_TYPE(self, str_to_convert): + return '_'.join(['VK_OBJECT_TYPE'] + self.split_handle_by_capital_case(str_to_convert)).upper() + + def convert_to_VK_DEBUG_REPORT_OBJECT_TYPE(self, str_to_convert): + return '_'.join(['VK_DEBUG_REPORT_OBJECT_TYPE'] + self.split_handle_by_capital_case(str_to_convert) + ['EXT']).upper() + + def generate(self): + # Search all fields of the Enum to see if has a DEBUG_REPORT_OBJECT + for handle in self.vk.handles.values(): + debugObjects = ([enum.name for enum in self.vk.enums['VkDebugReportObjectTypeEXT'].fields if f'{handle.type[3:]}_EXT' in enum.name]) + object = 'VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' if len(debugObjects) == 0 else debugObjects[0] + self.debugReportObject[handle.name] = object + + + + out = [] + out.append(f'''// clang-format off +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See {os.path.basename(__file__)} for modifications + + +/*************************************************************************** + * + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2015-2017 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. + * + * Author: Mark Lobodzinski + * Author: Courtney Goeltzenleuchter + * Author: Tobin Ehlis + * Author: Chris Forbes + * Author: John Zulauf + * Author: Charles Giessen + * + ****************************************************************************/ + + +#pragma once + +#include + +''') + + # Get the list of field names from VkDebugReportObjectTypeEXT + VkDebugReportObjectTypeEXT_field_names = [] + for field in self.vk.enums['VkDebugReportObjectTypeEXT'].fields: + VkDebugReportObjectTypeEXT_field_names.append(field.name) + + # Create a list with the needed information so that when we print, we print in the exact same order, as we are printing arrays where external code may index into it + object_types = [] + object_type_aliases = {} + enum_num = 1 # start at one since the zero place is manually printed with the UNKNOWN value + for handle in self.vk.handles.values(): + debug_report_object_name = self.convert_to_VK_DEBUG_REPORT_OBJECT_TYPE(handle.name) + if debug_report_object_name in VkDebugReportObjectTypeEXT_field_names: + object_types.append((f'{handle.name[2:]}', enum_num, debug_report_object_name)) + else: + object_types.append((f'{handle.name[2:]}', enum_num, 'VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT')) + enum_num += 1 + if len(handle.aliases) > 0: + object_type_aliases[handle.name] = handle.aliases + + out.append('// Object Type enum for validation layer internal object handling\n') + out.append('typedef enum VulkanObjectType {\n') + out.append(' kVulkanObjectTypeUnknown = 0,\n') + for name, number, debug_report in object_types: + out.append(f' kVulkanObjectType{name} = {number},\n') + out.append(f' kVulkanObjectTypeMax = {enum_num},\n') + + out.append(' // Aliases for backwards compatibilty of "promoted" types\n') + for name, aliases in object_type_aliases.items(): + for alias in aliases: + out.append(f' kVulkanObjectType{alias[2:]} = kVulkanObjectType{name[2:]},\n') + + out.append('} VulkanObjectType;\n') + out.append('\n') + + out.append('// Array of object name strings for OBJECT_TYPE enum conversion\n') + out.append('static const char * const object_string[kVulkanObjectTypeMax] = {\n') + out.append(' \"Unknown\",\n') + for name, number, debug_report in object_types: + out.append(f' \"{name}\",\n') + out.append('};\n') + out.append('\n') + + out.append('// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version\n') + out.append('const VkDebugReportObjectTypeEXT get_debug_report_enum[] = {\n') + out.append(' VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown\n') + for name, number, debug_report in object_types: + out.append(f' {debug_report}, // kVulkanObjectType{name}\n') + out.append('};\n') + out.append('\n') + + out.append('// Helper array to get Official Vulkan VkObjectType enum from the internal layers version\n') + out.append('const VkObjectType get_object_type_enum[] = {\n') + out.append(' VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown\n') + for handle in self.vk.handles.values(): + object_name = self.convert_to_VK_OBJECT_TYPE(handle.name) + out.append(f' {object_name}, // kVulkanObjectType{handle.name[2:]}\n') + out.append('};\n') + out.append('\n') + + out.append('// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n') + out.append('static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){\n') + out.append(' if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {\n') + out.append(' return VK_OBJECT_TYPE_UNKNOWN;\n') + for field in self.vk.enums['VkObjectType'].fields: + enum_field_name = f'VK_DEBUG_REPORT_{field.name[3:]}_EXT' + for debug_report_field in self.vk.enums['VkDebugReportObjectTypeEXT'].fields: + if enum_field_name == debug_report_field.name: + out.append(f' }} else if (debug_report_obj == VK_DEBUG_REPORT_{field.name[3:]}_EXT) {{\n') + out.append(f' return {field.name};\n') + break + out.append(' }\n') + out.append(' return VK_OBJECT_TYPE_UNKNOWN;\n') + out.append('}\n') + out.append('\n') + + out.append('// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n') + out.append('static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){\n') + out.append(' if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {\n') + out.append(' return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n') + for field in self.vk.enums['VkObjectType'].fields: + enum_field_name = f'VK_DEBUG_REPORT_{field.name[3:]}_EXT' + for debug_report_field in self.vk.enums['VkDebugReportObjectTypeEXT'].fields: + if enum_field_name == debug_report_field.name: + out.append(f' }} else if (core_report_obj == {field.name}) {{\n') + out.append(f' return VK_DEBUG_REPORT_{field.name[3:]}_EXT;\n') + break + out.append(' }\n') + out.append(' return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n') + out.append('}\n') + + out.append('// clang-format on') + self.write("".join(out)) diff --git a/local/recipes/libs/vulkan-loader/source/scripts/generators/loader_extension_generator.py b/local/recipes/libs/vulkan-loader/source/scripts/generators/loader_extension_generator.py new file mode 100644 index 0000000000..7d3f2543b3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/generators/loader_extension_generator.py @@ -0,0 +1,1367 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2022 The Khronos Group Inc. +# Copyright (c) 2015-2022 Valve Corporation +# Copyright (c) 2015-2022 LunarG, Inc. +# Copyright (c) 2015-2017 Google Inc. +# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2023 RasterGrid Kft. +# +# 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. +# +# Author: Mark Young +# Author: Mark Lobodzinski +# Author: Charles Giessen + +import re +import os +from base_generator import BaseGenerator +from vulkan_object import Version + +WSI_EXT_NAMES = ['VK_KHR_surface', + 'VK_KHR_display', + 'VK_KHR_xlib_surface', + 'VK_KHR_xcb_surface', + 'VK_KHR_wayland_surface', + 'VK_EXT_directfb_surface', + 'VK_KHR_win32_surface', + 'VK_KHR_android_surface', + 'VK_GGP_stream_descriptor_surface', + 'VK_MVK_macos_surface', + 'VK_MVK_ios_surface', + 'VK_EXT_headless_surface', + 'VK_EXT_metal_surface', + 'VK_FUCHSIA_imagepipe_surface', + 'VK_KHR_swapchain', + 'VK_KHR_display_swapchain', + 'VK_KHR_get_display_properties2', + 'VK_KHR_get_surface_capabilities2', + 'VK_QNX_screen_surface', + 'VK_NN_vi_surface'] + +ADD_INST_CMDS = ['vkCreateInstance', + 'vkEnumerateInstanceExtensionProperties', + 'vkEnumerateInstanceLayerProperties', + 'vkEnumerateInstanceVersion'] + +AVOID_EXT_NAMES = ['VK_EXT_debug_report'] + +NULL_CHECK_EXT_NAMES= ['VK_EXT_debug_utils'] + +AVOID_CMD_NAMES = ['vkCreateDebugUtilsMessengerEXT', + 'vkDestroyDebugUtilsMessengerEXT', + 'vkSubmitDebugUtilsMessageEXT'] + +DEVICE_CMDS_NEED_TERM = ['vkGetDeviceProcAddr', + 'vkCreateSwapchainKHR', + 'vkCreateSharedSwapchainsKHR', + 'vkGetDeviceGroupSurfacePresentModesKHR', + 'vkDebugMarkerSetObjectTagEXT', + 'vkDebugMarkerSetObjectNameEXT', + 'vkSetDebugUtilsObjectNameEXT', + 'vkSetDebugUtilsObjectTagEXT', + 'vkQueueBeginDebugUtilsLabelEXT', + 'vkQueueEndDebugUtilsLabelEXT', + 'vkQueueInsertDebugUtilsLabelEXT', + 'vkCmdBeginDebugUtilsLabelEXT', + 'vkCmdEndDebugUtilsLabelEXT', + 'vkCmdInsertDebugUtilsLabelEXT', + 'vkGetDeviceGroupSurfacePresentModes2EXT'] + +DEVICE_CMDS_MUST_USE_TRAMP = ['vkSetDebugUtilsObjectNameEXT', + 'vkSetDebugUtilsObjectTagEXT', + 'vkDebugMarkerSetObjectNameEXT', + 'vkDebugMarkerSetObjectTagEXT'] + +# These are the aliased functions that use the same terminator for both extension and core versions +# Generally, this is only applies to physical device level functions in instance extensions +SHARED_ALIASES = { + # 1.1 aliases + 'vkEnumeratePhysicalDeviceGroupsKHR': 'vkEnumeratePhysicalDeviceGroups', + 'vkGetPhysicalDeviceFeatures2KHR': 'vkGetPhysicalDeviceFeatures2', + 'vkGetPhysicalDeviceProperties2KHR': 'vkGetPhysicalDeviceProperties2', + 'vkGetPhysicalDeviceFormatProperties2KHR': 'vkGetPhysicalDeviceFormatProperties2', + 'vkGetPhysicalDeviceImageFormatProperties2KHR': 'vkGetPhysicalDeviceImageFormatProperties2', + 'vkGetPhysicalDeviceQueueFamilyProperties2KHR': 'vkGetPhysicalDeviceQueueFamilyProperties2', + 'vkGetPhysicalDeviceMemoryProperties2KHR': 'vkGetPhysicalDeviceMemoryProperties2', + 'vkGetPhysicalDeviceSparseImageFormatProperties2KHR': 'vkGetPhysicalDeviceSparseImageFormatProperties2', + 'vkGetPhysicalDeviceExternalBufferPropertiesKHR': 'vkGetPhysicalDeviceExternalBufferProperties', + 'vkGetPhysicalDeviceExternalSemaphorePropertiesKHR': 'vkGetPhysicalDeviceExternalSemaphoreProperties', + 'vkGetPhysicalDeviceExternalFencePropertiesKHR': 'vkGetPhysicalDeviceExternalFenceProperties', +} + +PRE_INSTANCE_FUNCTIONS = ['vkEnumerateInstanceExtensionProperties', + 'vkEnumerateInstanceLayerProperties', + 'vkEnumerateInstanceVersion'] + +# This class is a container for any source code, data, or other behavior that is necessary to +# customize the generator script for a specific target API variant (e.g. Vulkan SC). As such, +# all of these API-specific interfaces and their use in the generator script are part of the +# contract between this repository and its downstream users. Changing or removing any of these +# interfaces or their use in the generator script will have downstream effects and thus +# should be avoided unless absolutely necessary. +class APISpecific: + @staticmethod + def getApiVersionDisplayName(targetApiName: str, name: str) -> str: + match targetApiName: + case 'vulkan': + api_name = 'Vulkan' + + version_number = name[name.find('_VERSION_') + len('_VERSION_'):].replace('_', '.') + return f'{api_name} {version_number}' + + @staticmethod + def getFirstVersionName(targetApiName: str) -> str: + match targetApiName: + case 'vulkan': + return 'VK_VERSION_1_0' + + # This handles the dependency across versions of APIs, even across API variants + # (e.g. maps VK_VERSION_1_2 to VKSC_VERSION_1_0 for Vulkan SC). + # This handles the lack of proper support for the "depends" attribute of tags in the XML. + @staticmethod + def getEffectiveVersionName(targetApiName: str, version: Version) -> str: + if version is None: + return APISpecific.getFirstVersionName(targetApiName) + + match targetApiName: + case 'vulkan': + return version.name + + +class LoaderExtensionGenerator(BaseGenerator): + def __init__(self): + BaseGenerator.__init__(self) + + self.core_commands = [] + self.extension_commands = [] + self.instance_extensions = [] + + def generate(self): + + self.core_commands = [x for x in self.vk.commands.values() if len(x.extensions) == 0] + self.extension_commands = [x for x in self.vk.commands.values() if len(x.extensions) > 0] + + self.instance_extensions = [x for x in self.vk.extensions.values() if x.instance] + + out = [] + self.add_preamble(out) + + if self.filename == 'vk_loader_extensions.h': + self.print_vk_loader_extensions_h(out) + elif self.filename == 'vk_loader_extensions.c': + self.print_vk_loader_extensions_c(out) + elif self.filename == 'vk_layer_dispatch_table.h': + self.print_vk_layer_dispatch_table(out) + + out.append('// clang-format on') + + self.write(''.join(out)) + + def add_preamble(self, out): + out.append(f'''// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See {os.path.basename(__file__)} for modifications + +/* + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * 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. + * + * Author: Mark Lobodzinski + * Author: Mark Young + * Author: Charles Giessen + */ + +// clang-format off +''') + + def print_vk_loader_extensions_h(self, out): + out.append('#pragma once\n') + out.append('\n') + out.append('#include \n') + out.append('#include \n') + out.append('#include \n') + out.append('#include "vk_layer_dispatch_table.h"\n') + out.append('\n\n') + + self.OutputPrototypesInHeader(out) + self.OutputLoaderTerminators(out) + self.OutputIcdDispatchTable(out) + self.OutputIcdExtensionEnableUnion(out) + self.OutputDeviceFunctionTerminatorDispatchTable(out) + + + def print_vk_loader_extensions_c(self, out): + out.append('#include \n') + out.append('#include \n') + out.append('#include \n') + out.append('#include "loader.h"\n') + out.append('#include "vk_loader_extensions.h"\n') + out.append('#include \n') + out.append('#include "wsi.h"\n') + out.append('#include "debug_utils.h"\n') + out.append('#include "extension_manual.h"\n') + self.OutputUtilitiesInSource(out) + self.OutputIcdDispatchTableInit(out) + self.OutputLoaderDispatchTables(out) + self.InitDeviceFunctionTerminatorDispatchTable(out) + self.OutputDeviceFunctionTrampolinePrototypes(out) + self.OutputLoaderLookupFunc(out) + self.CreateTrampTermFuncs(out) + self.InstExtensionGPA(out) + self.InstantExtensionCreate(out) + self.DeviceExtensionGetTerminator(out) + self.InitInstLoaderExtensionDispatchTable(out) + self.OutputInstantExtensionWhitelistArray(out) + + def print_vk_layer_dispatch_table(self, out): + out.append('#pragma once\n') + out.append('\n') + out.append('#include \n') + out.append('\n') + out.append('#if !defined(PFN_GetPhysicalDeviceProcAddr)\n') + out.append('typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);\n') + out.append('#endif\n\n') + self.OutputLayerInstanceDispatchTable(out) + self.OutputLayerDeviceDispatchTable(out) + + def DescribeBlock(self, command, current_block, out, custom_commands_string = ' commands', indent = ' '): + effective_version_name = APISpecific.getEffectiveVersionName(self.targetApiName, command.version) + if command.extensions != current_block and effective_version_name != current_block: + if effective_version_name and len(command.extensions) == 0: + # Entry points that have an effective version in the target API + api_version_display_name = APISpecific.getApiVersionDisplayName(self.targetApiName, effective_version_name) + out.append(f"\n{indent}// ---- Core {api_version_display_name}{custom_commands_string}\n") + return effective_version_name + else: + # don't repeat unless the first extension is different (while rest can vary) + if not isinstance(current_block, list) or current_block[0] != command.extensions[0]: + out.append(f"\n{indent}// ---- {command.extensions[0] if len(command.extensions) > 0 else ''} extension{custom_commands_string}\n") + return command.extensions + else: + return current_block + + def OutputPrototypesInHeader(self, out: list): + out.append('''// Structures defined externally, but used here +struct loader_instance; +struct loader_device; +struct loader_icd_term; +struct loader_dev_dispatch_table; + +// Device extension error function +VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev); + +// Extension interception for vkGetInstanceProcAddr function, so we can return +// the appropriate information for any instance extensions we know about. +bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr); + +struct loader_instance_extension_enable_list; // Forward declaration + +// Extension interception for vkCreateInstance function, so we can properly +// detect and enable any instance extension information for extensions we know +// about. +void fill_out_enabled_instance_extensions(uint32_t extension_count, const char *const * extension_list, struct loader_instance_extension_enable_list* enables); + +// Extension interception for vkGetDeviceProcAddr function, so we can return +// an appropriate terminator if this is one of those few device commands requiring +// a terminator. +PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *name, bool* found_name); + +// Dispatch table properly filled in with appropriate terminators for the +// supported extensions. +extern const VkLayerInstanceDispatchTable instance_disp; + +// Array of extension strings for instance extensions we support. +extern const char *const LOADER_INSTANCE_EXTENSIONS[]; + +VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_instance* inst, struct loader_icd_term *icd_term); + +// Init Device function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa, + VkDevice dev); + +// Init Device function pointer dispatch table with extension commands +VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table, + PFN_vkGetInstanceProcAddr gipa, + PFN_vkGetDeviceProcAddr gdpa, + VkInstance inst, + VkDevice dev); + +// Init Instance function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, + VkInstance inst); + +// Init Instance function pointer dispatch table with core commands +VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa, + VkInstance inst); + +// Device command lookup function +VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name, bool* name_found); + +// Instance command lookup function +VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name, + bool *found_name); + +''') + + # Creates the prototypes for the loader's core instance command terminators + def OutputLoaderTerminators(self, out): + out.append('// Loader core instance terminators\n') + + for command in [x for x in self.vk.commands.values() if len(x.extensions) == 0]: + if not (command.name in ADD_INST_CMDS) and not (command.params[0].type in ['VkInstance', 'VkPhysicalDevice']): + continue + + mod_string = '' + new_terminator = command.cPrototype + mod_string = new_terminator.replace("VKAPI_CALL vk", "VKAPI_CALL terminator_") + + if command.name in PRE_INSTANCE_FUNCTIONS: + pre_instance_basic_version = mod_string + mod_string = mod_string.replace("terminator_", "terminator_pre_instance_") + mod_string = mod_string.replace(command.name[2:] + '(\n', command.name[2:] + '(\n const Vk' + command.name[2:] + 'Chain* chain,\n') + + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + + if command.name in PRE_INSTANCE_FUNCTIONS: + out.append(pre_instance_basic_version) + out.append('\n') + + out.append(mod_string) + out.append('\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + + out.append('\n') + + # Create a dispatch table from the appropriate list + def OutputIcdDispatchTable(self, out): + skip_commands = ['vkGetInstanceProcAddr', + 'vkEnumerateDeviceLayerProperties', + ] + + out.append('// ICD function pointer dispatch table\n') + out.append('struct loader_icd_term_dispatch {\n') + + current_block = '' + for command in self.vk.commands.values(): + if (command.name in skip_commands or command.device )and command.name != 'vkGetDeviceProcAddr': + continue + + current_block = self.DescribeBlock(command, current_block, out) + + if command.protect: + out.append(f'#if defined({command.protect})\n') + + out.append(f' PFN_{command.name} {command.name[2:]};\n') + + if command.protect: + out.append(f'#endif // {command.protect}\n') + out.append('};\n\n') + + # Create the extension enable union + def OutputIcdExtensionEnableUnion(self, out): + + out.append( 'struct loader_instance_extension_enable_list {\n') + for extension in self.instance_extensions: + if extension.protect: + out.append(f'#if defined({extension.protect})\n') + out.append( f' uint8_t {extension.name[3:].lower()};\n') + if extension.protect: + out.append(f'#endif // defined({extension.protect})\n') + + out.append( '};\n\n') + + # Create a dispatch table solely for device functions which have custom terminators + def OutputDeviceFunctionTerminatorDispatchTable(self, out): + out.append('// Functions that required a terminator need to have a separate dispatch table which contains their corresponding\n') + out.append('// device function. This is used in the terminators themselves.\n') + out.append('struct loader_device_terminator_dispatch {\n') + + # last_protect = None + current_block = '' + for command in self.vk.commands.values(): + if len(command.extensions) == 0: + continue + if command.name in DEVICE_CMDS_NEED_TERM: + if command.protect is not None: + out.append( f'#if defined({command.protect})\n') + + current_block = self.DescribeBlock(command, current_block, out) + + out.append( f' PFN_{command.name} {command.name[2:]};\n') + + if command.protect is not None: + out.append( f'#endif // {command.protect}\n') + + out.append( '};\n\n') + + + # Create a layer instance dispatch table from the appropriate list + def OutputLayerInstanceDispatchTable(self, out): + + out.append('// Instance function pointer dispatch table\n') + out.append('typedef struct VkLayerInstanceDispatchTable_ {\n') + + # First add in an entry for GetPhysicalDeviceProcAddr. This will not + # ever show up in the XML or header, so we have to manually add it. + out.append(' // Manually add in GetPhysicalDeviceProcAddr entry\n') + out.append(' PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr;\n') + + current_block = '' + for command_name, command in self.vk.commands.items(): + if not command.instance: + continue + + current_block = self.DescribeBlock(command, current_block, out) + + if command.protect: + out.append(f'#if defined({command.protect})\n') + + out.append(f' PFN_{command_name} {command_name[2:]};\n') + + if command.protect: + out.append(f'#endif // {command.protect}\n') + + out.append('} VkLayerInstanceDispatchTable;\n\n') + + # Create a layer device dispatch table from the appropriate list + def OutputLayerDeviceDispatchTable(self, out): + + out.append('// Device function pointer dispatch table\n') + out.append('#define DEVICE_DISP_TABLE_MAGIC_NUMBER 0x10ADED040410ADEDUL\n') + out.append('typedef struct VkLayerDispatchTable_ {\n') + out.append(' uint64_t magic; // Should be DEVICE_DISP_TABLE_MAGIC_NUMBER\n') + + current_block = '' + for command in [x for x in self.vk.commands.values() if x.device]: + + current_block = self.DescribeBlock(command, current_block, out) + + if command.protect: + out.append(f'#if defined({command.protect})\n') + + out.append(f' PFN_{command.name} {command.name[2:]};\n') + + if command.protect: + out.append(f'#endif // {command.protect}\n') + out.append('} VkLayerDispatchTable;\n\n') + + def OutputUtilitiesInSource(self, out): + out.append(''' +// Device extension error function +VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev) { + struct loader_device *found_dev; + // The device going in is a trampoline device + struct loader_icd_term *icd_term = loader_get_icd_and_device(dev, &found_dev); + + if (icd_term) + loader_log(icd_term->this_instance, VULKAN_LOADER_ERROR_BIT, 0, + "Bad destination in loader trampoline dispatch," + "Are layers and extensions that you are calling enabled?"); + return VK_ERROR_EXTENSION_NOT_PRESENT; +} + +''') + + + # Init a dispatch table from the appropriate list + def OutputIcdDispatchTableInit(self, out): + out.append('VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_instance* inst, struct loader_icd_term *icd_term) {\n') + out.append(' const PFN_vkGetInstanceProcAddr fp_gipa = icd_term->scanned_icd->GetInstanceProcAddr;\n') + out.append('\n') + out.append('#define LOOKUP_GIPA(func) icd_term->dispatch.func = (PFN_vk##func)fp_gipa(icd_term->instance, "vk" #func);\n') + out.append('\n') + out.append('#define LOOKUP_REQUIRED_GIPA(func) \\\n') + out.append(' do { \\\n') + out.append(' LOOKUP_GIPA(func); \\\n') + out.append(' if (!icd_term->dispatch.func) { \\\n') + out.append(' loader_log(inst, VULKAN_LOADER_WARN_BIT, 0, "Unable to load %s from ICD %s",\\\n') + out.append(' "vk"#func, icd_term->scanned_icd->lib_name); \\\n') + out.append(' return false; \\\n') + out.append(' } \\\n') + out.append(' } while (0)\n') + out.append('\n') + + + skip_gipa_commands = ['vkGetInstanceProcAddr', + 'vkEnumerateDeviceLayerProperties', + 'vkCreateInstance', + 'vkEnumerateInstanceExtensionProperties', + 'vkEnumerateInstanceLayerProperties', + 'vkEnumerateInstanceVersion', + ] + + current_block = '' + for command in [x for x in self.vk.commands.values() if x.instance or x.name == 'vkGetDeviceProcAddr']: + if command.name in skip_gipa_commands: + continue + custom_commands_string= ' commands' if len(command.extensions) > 0 else '' + current_block = self.DescribeBlock(command, current_block, out, custom_commands_string=custom_commands_string) + + if command.protect is not None: + out.append( f'#if defined({command.protect})\n') + + effective_version_name = APISpecific.getEffectiveVersionName(self.targetApiName, command.version) + if effective_version_name == APISpecific.getFirstVersionName(self.targetApiName) and len(command.extensions) == 0: + # The Core Vulkan code will be wrapped in a feature called VK_VERSION_#_# + # For example: VK_VERSION_1_0 wraps the core 1.0 Vulkan functionality + out.append(f' LOOKUP_REQUIRED_GIPA({command.name[2:]});\n') + else: + out.append( f' LOOKUP_GIPA({command.name[2:]});\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + + out.append('\n') + out.append('#undef LOOKUP_REQUIRED_GIPA\n') + out.append('#undef LOOKUP_GIPA\n') + out.append('\n') + out.append(' return true;\n') + out.append('};\n\n') + + + # Creates code to initialize the various dispatch tables + def OutputLoaderDispatchTables(self, out): + commands = [] + gpa_param = '' + cur_type = '' + + for x in range(0, 4): + if x == 0: + cur_type = 'device' + gpa_param = 'dev' + commands = self.core_commands + + out.append('// Init Device function pointer dispatch table with core commands\n') + out.append('VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa,\n') + out.append(' VkDevice dev) {\n') + out.append(' VkLayerDispatchTable *table = &dev_table->core_dispatch;\n') + out.append(' if (table->magic != DEVICE_DISP_TABLE_MAGIC_NUMBER) { abort(); }\n') + out.append(' for (uint32_t i = 0; i < MAX_NUM_UNKNOWN_EXTS; i++) dev_table->ext_dispatch[i] = (PFN_vkDevExt)vkDevExtError;\n') + + elif x == 1: + cur_type = 'device' + gpa_param = 'dev' + commands = self.extension_commands + + out.append('// Init Device function pointer dispatch table with extension commands\n') + out.append('VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table,\n') + out.append(' PFN_vkGetInstanceProcAddr gipa,\n') + out.append(' PFN_vkGetDeviceProcAddr gdpa,\n') + out.append(' VkInstance inst,\n') + out.append(' VkDevice dev) {\n') + out.append(' VkLayerDispatchTable *table = &dev_table->core_dispatch;\n') + out.append(' table->magic = DEVICE_DISP_TABLE_MAGIC_NUMBER;\n') + + elif x == 2: + cur_type = 'instance' + gpa_param = 'inst' + commands = self.core_commands + + out.append('// Init Instance function pointer dispatch table with core commands\n') + out.append('VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,\n') + out.append(' VkInstance inst) {\n') + + else: + cur_type = 'instance' + gpa_param = 'inst' + commands = self.extension_commands + + out.append('// Init Instance function pointer dispatch table with core commands\n') + out.append('VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,\n') + out.append(' VkInstance inst) {\n') + + current_block = '' + for command in commands: + is_inst_handle_type = command.params[0].type in ['VkInstance', 'VkPhysicalDevice'] + if ((cur_type == 'instance' and is_inst_handle_type) or (cur_type == 'device' and not is_inst_handle_type)): + + current_block = self.DescribeBlock(command, current_block, out) + + # Remove 'vk' from proto name + base_name = command.name[2:] + + # Names to skip + if (base_name == 'CreateInstance' or base_name == 'CreateDevice' or + base_name == 'EnumerateInstanceExtensionProperties' or + base_name == 'EnumerateInstanceLayerProperties' or + base_name == 'EnumerateInstanceVersion'): + continue + + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + + # If we're looking for the proc we are passing in, just point the table to it. This fixes the issue where + # a layer overrides the function name for the loader. + if x == 1: + if base_name == 'GetDeviceProcAddr': + out.append(' table->GetDeviceProcAddr = gdpa;\n') + elif len(command.extensions) > 0 and self.vk.extensions[command.extensions[0]].instance: + out.append(f' table->{base_name} = (PFN_{command.name})gipa(inst, "{command.name}");\n') + else: + out.append(f' table->{base_name} = (PFN_{command.name})gdpa(dev, "{command.name}");\n') + elif (x < 1 and base_name == 'GetDeviceProcAddr'): + out.append(' table->GetDeviceProcAddr = gpa;\n') + elif (x > 1 and base_name == 'GetInstanceProcAddr'): + out.append(' table->GetInstanceProcAddr = gpa;\n') + else: + out.append(f' table->{base_name} = (PFN_{command.name})gpa({gpa_param}, "{command.name}");\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + + out.append('}\n\n') + +# + # Create code to initialize a dispatch table from the appropriate list of extension entrypoints + def InitDeviceFunctionTerminatorDispatchTable(self, out): + out.append('// Functions that required a terminator need to have a separate dispatch table which contains their corresponding\n') + out.append('// device function. This is used in the terminators themselves.\n') + out.append('void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {\n') + out.append(' struct loader_device_terminator_dispatch* dispatch = &dev->loader_dispatch.extension_terminator_dispatch;\n') + out.append(' PFN_vkGetDeviceProcAddr gpda = (PFN_vkGetDeviceProcAddr)dev->phys_dev_term->this_icd_term->dispatch.GetDeviceProcAddr;\n') + current_block = '' + for command in [x for x in self.vk.commands.values() if x.extensions or x.version]: + if command.name in DEVICE_CMDS_NEED_TERM: + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + + current_block = self.DescribeBlock(command, current_block, out) + enable_extension_expressions = [] + for ext in command.extensions: + enable_extension_expressions.append(f'dev->driver_extensions.{ext[3:].lower()}_enabled') + out.append(f' if ({" || ".join(enable_extension_expressions)})\n') + out.append(f' dispatch->{command.name[2:]} = (PFN_{(command.name)})gpda(dev->icd_device, "{(command.name)}");\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + + out.append('}\n\n') + + + def OutputDeviceFunctionTrampolinePrototypes(self, out): + out.append('// These are prototypes for functions that need their trampoline called in all circumstances.\n') + out.append('// They are used in loader_lookup_device_dispatch_table but are defined afterwards.\n') + current_block = '' + for command in self.vk.commands.values(): + if command.name in DEVICE_CMDS_MUST_USE_TRAMP: + + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + current_block = self.DescribeBlock(command, current_block, out) + + out.append(f'{command.cPrototype.replace("VKAPI_CALL vk", "VKAPI_CALL ")}\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + out.append('\n') + + + # + # Create a lookup table function from the appropriate list of entrypoints + def OutputLoaderLookupFunc(self, out): + commands = [] + cur_type = '' + + for x in range(0, 2): + if x == 0: + cur_type = 'device' + + out.append('// Device command lookup function\n') + out.append('VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name, bool* found_name) {\n') + out.append(' if (!name || name[0] != \'v\' || name[1] != \'k\') {\n') + out.append(' *found_name = false;\n') + out.append(' return NULL;\n') + out.append(' }\n') + out.append('\n') + out.append(' name += 2;\n') + out.append(' *found_name = true;\n') + out.append(' struct loader_device* dev = (struct loader_device *)table;\n') + out.append(' const struct loader_instance* inst = dev->phys_dev_term->this_icd_term->this_instance;\n') + out.append(' uint32_t api_version = VK_MAKE_API_VERSION(0, inst->app_api_version.major, inst->app_api_version.minor, inst->app_api_version.patch);\n') + out.append('\n') + else: + cur_type = 'instance' + + out.append('// Instance command lookup function\n') + out.append('VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,\n') + out.append(' bool *found_name) {\n') + out.append(' if (!name || name[0] != \'v\' || name[1] != \'k\') {\n') + out.append(' *found_name = false;\n') + out.append(' return NULL;\n') + out.append(' }\n') + out.append('\n') + out.append(' *found_name = true;\n') + out.append(' name += 2;\n') + + + for command_list in [self.core_commands, self.extension_commands]: + commands = command_list + + version_check = '' + current_block = '' + for command in commands: + is_inst_handle_type = command.params[0].type in ['VkInstance', 'VkPhysicalDevice'] + if ((cur_type == 'instance' and is_inst_handle_type) or (cur_type == 'device' and not is_inst_handle_type)): + + current_block = self.DescribeBlock(command, current_block, out) + if len(command.extensions) == 0: + if cur_type == 'device': + effective_version_name = APISpecific.getEffectiveVersionName(self.targetApiName, command.version) + api_version = effective_version_name.replace('_VERSION_', '_API_VERSION_') + version_check = f" if (dev->should_ignore_device_commands_from_newer_version && api_version < {api_version}) return NULL;\n" + else: + version_check = '' + + # Remove 'vk' from proto name + base_name = command.name[2:] + + if (base_name == 'CreateInstance' or base_name == 'CreateDevice' or + base_name == 'EnumerateInstanceExtensionProperties' or + base_name == 'EnumerateInstanceLayerProperties' or + base_name == 'EnumerateInstanceVersion'): + continue + + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + + out.append(f' if (!strcmp(name, "{base_name}")) ') + if command.name in DEVICE_CMDS_MUST_USE_TRAMP: + if version_check != '': + out.append(f'{{\n{version_check} return dev->layer_extensions.{command.extensions[0][3:].lower()}_enabled ? (void *){base_name} : NULL;\n }}\n') + else: + out.append(f'return dev->layer_extensions.{command.extensions[0][3:].lower()}_enabled ? (void *){base_name} : NULL;\n') + + else: + if version_check != '': + out.append(f'{{\n{version_check} return (void *)table->{base_name};\n }}\n') + else: + out.append(f'return (void *)table->{base_name};\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + + out.append('\n') + out.append(' *found_name = false;\n') + out.append(' return NULL;\n') + out.append('}\n\n') + + + # + # Create the appropriate trampoline (and possibly terminator) functions + def CreateTrampTermFuncs(self, out): + # Some extensions have to be manually added. Skip those in the automatic + # generation. They will be manually added later. + manual_ext_commands = ['vkEnumeratePhysicalDeviceGroupsKHR', + 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV', + 'vkGetPhysicalDeviceFeatures2KHR', + 'vkGetPhysicalDeviceProperties2KHR', + 'vkGetPhysicalDeviceFormatProperties2KHR', + 'vkGetPhysicalDeviceImageFormatProperties2KHR', + 'vkGetPhysicalDeviceQueueFamilyProperties2KHR', + 'vkGetPhysicalDeviceMemoryProperties2KHR', + 'vkGetPhysicalDeviceSparseImageFormatProperties2KHR', + 'vkGetPhysicalDeviceSurfaceCapabilities2KHR', + 'vkGetPhysicalDeviceSurfaceFormats2KHR', + 'vkGetPhysicalDeviceSurfaceCapabilities2EXT', + 'vkReleaseDisplayEXT', + 'vkAcquireXlibDisplayEXT', + 'vkGetRandROutputDisplayEXT', + 'vkGetPhysicalDeviceExternalBufferPropertiesKHR', + 'vkGetPhysicalDeviceExternalSemaphorePropertiesKHR', + 'vkGetPhysicalDeviceExternalFencePropertiesKHR', + 'vkGetPhysicalDeviceDisplayProperties2KHR', + 'vkGetPhysicalDeviceDisplayPlaneProperties2KHR', + 'vkGetDisplayModeProperties2KHR', + 'vkGetDisplayPlaneCapabilities2KHR', + 'vkGetPhysicalDeviceSurfacePresentModes2EXT', + 'vkGetDeviceGroupSurfacePresentModes2EXT', + 'vkGetPhysicalDeviceToolPropertiesEXT'] + + current_block = '' + for command in [x for x in self.vk.commands.values() if x.extensions]: + if (command.extensions[0] in WSI_EXT_NAMES or + command.extensions[0] in AVOID_EXT_NAMES or + command.name in AVOID_CMD_NAMES or + command.name in manual_ext_commands): + continue + + current_block = self.DescribeBlock(command=command, current_block=current_block, out=out, custom_commands_string=' trampoline/terminators\n', indent='') + + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + + func_header = command.cPrototype.replace(";", " {\n") + tramp_header = func_header.replace("VKAPI_CALL vk", "VKAPI_CALL ") + return_prefix = ' ' + base_name = command.name[2:] + has_surface = 0 + update_structure_surface = 0 + update_structure_string = '' + requires_terminator = 0 + surface_var_name = '' + phys_dev_var_name = '' + instance_var_name = '' + has_return_type = False + always_use_param_name = True + surface_type_to_replace = '' + surface_name_replacement = '' + physdev_type_to_replace = '' + physdev_name_replacement = '' + + for param in command.params: + if param.type == 'VkSurfaceKHR': + has_surface = 1 + surface_var_name = param.name + requires_terminator = 1 + always_use_param_name = False + surface_type_to_replace = 'VkSurfaceKHR' + surface_name_replacement = 'unwrapped_surface' + if param.type == 'VkPhysicalDeviceSurfaceInfo2KHR': + has_surface = 1 + surface_var_name = param.name + '->surface' + requires_terminator = 1 + update_structure_surface = 1 + update_structure_string = ' VkPhysicalDeviceSurfaceInfo2KHR info_copy = *pSurfaceInfo;\n' + update_structure_string += ' info_copy.surface = unwrapped_surface;\n' + always_use_param_name = False + surface_type_to_replace = 'VkPhysicalDeviceSurfaceInfo2KHR' + surface_name_replacement = '&info_copy' + if param.type == 'VkPhysicalDevice': + requires_terminator = 1 + phys_dev_var_name = param.name + always_use_param_name = False + physdev_type_to_replace = 'VkPhysicalDevice' + physdev_name_replacement = 'phys_dev_term->phys_dev' + if param.type == 'VkInstance': + requires_terminator = 1 + instance_var_name = param.name + + if command.returnType != 'void': + return_prefix += 'return ' + has_return_type = True + + if ( command.params[0].type in ['VkInstance', 'VkPhysicalDevice'] or + 'DebugMarkerSetObject' in command.name or 'SetDebugUtilsObject' in command.name or + command.name in DEVICE_CMDS_NEED_TERM): + requires_terminator = 1 + + if requires_terminator == 1: + term_header = tramp_header.replace("VKAPI_CALL ", "VKAPI_CALL terminator_") + + out.append(tramp_header) + + if command.params[0].type == 'VkPhysicalDevice': + out.append(' const VkLayerInstanceDispatchTable *disp;\n') + out.append(f' VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device({phys_dev_var_name});\n') + out.append(' if (VK_NULL_HANDLE == unwrapped_phys_dev) {\n') + out.append(' loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,\n') + out.append(f' "{command.name}: Invalid {phys_dev_var_name} "\n') + out.append(f' "[VUID-{command.name}-{phys_dev_var_name}-parameter]");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + out.append(f' disp = loader_get_instance_layer_dispatch({phys_dev_var_name});\n') + elif command.params[0].type == 'VkInstance': + out.append(f' struct loader_instance *inst = loader_get_instance({instance_var_name});\n') + out.append(' if (NULL == inst) {\n') + out.append(' loader_log(\n') + out.append(' NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,\n') + out.append(f' "{command.name}: Invalid instance [VUID-{command.name}-{instance_var_name}-parameter]");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + out.append('#error("Not implemented. Likely needs to be manually generated!");\n') + else: + out.append(' const VkLayerDispatchTable *disp = loader_get_dispatch(') + out.append(command.params[0].name) + out.append(');\n') + out.append(' if (NULL == disp) {\n') + out.append(' loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,\n') + out.append(f' "{command.name}: Invalid {command.params[0].name} "\n') + out.append(f' "[VUID-{command.name}-{command.params[0].name}-parameter]");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + + if 'DebugMarkerSetObjectName' in command.name: + out.append(' VkDebugMarkerObjectNameInfoEXT local_name_info;\n') + out.append(' memcpy(&local_name_info, pNameInfo, sizeof(VkDebugMarkerObjectNameInfoEXT));\n') + out.append(' // If this is a physical device, we have to replace it with the proper one for the next call.\n') + out.append(' if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {\n') + out.append(' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->object;\n') + out.append(' local_name_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n') + out.append(' }\n') + out.append(' if (pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) {\n') + out.append(' struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pNameInfo->object;\n') + out.append(' local_name_info.object = (uint64_t)(uintptr_t)instance->instance;\n') + out.append(' }\n') + elif 'DebugMarkerSetObjectTag' in command.name: + out.append(' VkDebugMarkerObjectTagInfoEXT local_tag_info;\n') + out.append(' memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugMarkerObjectTagInfoEXT));\n') + out.append(' // If this is a physical device, we have to replace it with the proper one for the next call.\n') + out.append(' if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {\n') + out.append(' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->object;\n') + out.append(' local_tag_info.object = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n') + out.append(' }\n') + out.append(' if (pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) {\n') + out.append(' struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pTagInfo->object;\n') + out.append(' local_tag_info.object = (uint64_t)(uintptr_t)instance->instance;\n') + out.append(' }\n') + elif 'SetDebugUtilsObjectName' in command.name: + out.append(' VkDebugUtilsObjectNameInfoEXT local_name_info;\n') + out.append(' memcpy(&local_name_info, pNameInfo, sizeof(VkDebugUtilsObjectNameInfoEXT));\n') + out.append(' // If this is a physical device, we have to replace it with the proper one for the next call.\n') + out.append(' if (pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n') + out.append(' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pNameInfo->objectHandle;\n') + out.append(' local_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n') + out.append(' }\n') + out.append(' if (pNameInfo->objectType == VK_OBJECT_TYPE_INSTANCE) {\n') + out.append(' struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pNameInfo->objectHandle;\n') + out.append(' local_name_info.objectHandle = (uint64_t)(uintptr_t)instance->instance;\n') + out.append(' }\n') + elif 'SetDebugUtilsObjectTag' in command.name: + out.append(' VkDebugUtilsObjectTagInfoEXT local_tag_info;\n') + out.append(' memcpy(&local_tag_info, pTagInfo, sizeof(VkDebugUtilsObjectTagInfoEXT));\n') + out.append(' // If this is a physical device, we have to replace it with the proper one for the next call.\n') + out.append(' if (pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {\n') + out.append(' struct loader_physical_device_tramp *phys_dev_tramp = (struct loader_physical_device_tramp *)(uintptr_t)pTagInfo->objectHandle;\n') + out.append(' local_tag_info.objectHandle = (uint64_t)(uintptr_t)phys_dev_tramp->phys_dev;\n') + out.append(' }\n') + out.append(' if (pTagInfo->objectType == VK_OBJECT_TYPE_INSTANCE) {\n') + out.append(' struct loader_instance* instance = (struct loader_instance *)(uintptr_t)pTagInfo->objectHandle;\n') + out.append(' local_tag_info.objectHandle = (uint64_t)(uintptr_t)instance->instance;\n') + out.append(' }\n') + + if command.extensions[0] in NULL_CHECK_EXT_NAMES: + out.append(' if (disp->' + base_name + ' != NULL) {\n') + out.append(' ') + out.append(return_prefix) + if command.params[0].type == 'VkInstance': + out.append('inst->') + out.append('disp->') + out.append(base_name) + out.append('(') + count = 0 + for param in command.params: + if count != 0: + out.append(', ') + + if param.type == 'VkPhysicalDevice': + out.append('unwrapped_phys_dev') + elif ('DebugMarkerSetObject' in command.name or 'SetDebugUtilsObject' in command.name) and param.name == 'pNameInfo': + out.append('&local_name_info') + elif ('DebugMarkerSetObject' in command.name or 'SetDebugUtilsObject' in command.name) and param.name == 'pTagInfo': + out.append('&local_tag_info') + else: + out.append(param.name) + + count += 1 + out.append(');\n') + if command.extensions[0] in NULL_CHECK_EXT_NAMES: + if command.returnType != 'void': + out.append(' } else {\n') + out.append(' return VK_SUCCESS;\n') + out.append(' }\n') + out.append('}\n\n') + + out.append(term_header) + if command.params[0].type == 'VkPhysicalDevice': + out.append(f' struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *){phys_dev_var_name};\n') + out.append(' struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;\n') + out.append(' if (NULL == icd_term->dispatch.') + out.append(base_name) + out.append(') {\n') + fatal_error_bit = '' if has_return_type and (len(command.extensions) == 0 or self.vk.extensions[command.extensions[0]].instance) else 'VULKAN_LOADER_FATAL_ERROR_BIT | ' + out.append(f' loader_log(icd_term->this_instance, {fatal_error_bit}VULKAN_LOADER_ERROR_BIT, 0,\n') + out.append(' "ICD associated with VkPhysicalDevice does not support ') + out.append(base_name) + out.append('");\n') + + # If this is an instance function taking a physical device (i.e. pre Vulkan 1.1), we need to behave and not crash so return an + # error here. + if has_return_type and (len(command.extensions) == 0 or self.vk.extensions[command.extensions[0]].instance): + out.append(' return VK_ERROR_EXTENSION_NOT_PRESENT;\n') + else: + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + + if has_surface == 1: + out.append(f' VkSurfaceKHR unwrapped_surface = {surface_var_name};\n') + out.append(' VkResult unwrap_res = wsi_unwrap_icd_surface(icd_term, &unwrapped_surface);\n') + out.append(' if (unwrap_res == VK_SUCCESS) {\n') + + # If there's a structure with a surface, we need to update its internals with the correct surface for the ICD + if update_structure_surface == 1: + out.append(update_structure_string) + + out.append(' ' + return_prefix + 'icd_term->dispatch.') + out.append(base_name) + out.append('(') + count = 0 + for param in command.params: + if count != 0: + out.append(', ') + + if not always_use_param_name: + if surface_type_to_replace and surface_type_to_replace == param.type: + out.append(surface_name_replacement) + elif physdev_type_to_replace and physdev_type_to_replace == param.type: + out.append(physdev_name_replacement) + else: + out.append(param.name) + else: + out.append(param.name) + + count += 1 + out.append(');\n') + if not has_return_type: + out.append(' return;\n') + out.append(' }\n') + + out.append(return_prefix) + out.append('icd_term->dispatch.') + out.append(base_name) + out.append('(') + count = 0 + for param in command.params: + if count != 0: + out.append(', ') + + if param.type == 'VkPhysicalDevice': + out.append('phys_dev_term->phys_dev') + else: + out.append(param.name) + + count += 1 + out.append(');\n') + + + elif command.params[0].type == 'VkInstance': + out.append(f' struct loader_instance *inst = loader_get_instance({instance_var_name});\n') + out.append(' if (NULL == inst) {\n') + out.append(' loader_log(\n') + out.append(' NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,\n') + out.append(f' "{command.name}: Invalid instance [VUID-{command.name}-{instance_var_name}-parameter]");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + out.append('#error("Not implemented. Likely needs to be manually generated!");\n') + elif command.extensions[0] in ['VK_EXT_debug_utils', 'VK_EXT_debug_marker']: + if command.name in ['vkDebugMarkerSetObjectNameEXT', 'vkDebugMarkerSetObjectTagEXT', 'vkSetDebugUtilsObjectNameEXT' , 'vkSetDebugUtilsObjectTagEXT']: + + is_debug_utils = command.extensions[0] == "VK_EXT_debug_utils" + debug_struct_name = command.params[1].name + local_struct = 'local_name_info' if 'ObjectName' in command.name else 'local_tag_info' + member_name = 'objectHandle' if is_debug_utils else 'object' + phys_dev_check = 'VK_OBJECT_TYPE_PHYSICAL_DEVICE' if is_debug_utils else 'VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT' + surf_check = 'VK_OBJECT_TYPE_SURFACE_KHR' if is_debug_utils else 'VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT' + inst_check = 'VK_OBJECT_TYPE_INSTANCE' if is_debug_utils else 'VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT' + out.append(' struct loader_device *dev;\n') + out.append(f' struct loader_icd_term *icd_term = loader_get_icd_and_device({ command.params[0].name}, &dev);\n') + out.append(' if (NULL == icd_term || NULL == dev) {\n') + out.append(f' loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "{command.name[2:]}: Invalid device handle");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + out.append(f' { command.params[1].type} {local_struct};\n') + out.append(f' memcpy(&{local_struct}, {debug_struct_name}, sizeof({ command.params[1].type}));\n') + out.append(' // If this is a physical device, we have to replace it with the proper one for the next call.\n') + out.append(f' if ({debug_struct_name}->objectType == {phys_dev_check}) {{\n') + out.append(f' struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)(uintptr_t){debug_struct_name}->{member_name};\n') + out.append(f' {local_struct}.{member_name} = (uint64_t)(uintptr_t)phys_dev_term->phys_dev;\n') + out.append(' // If this is a KHR_surface, and the ICD has created its own, we have to replace it with the proper one for the next call.\n') + out.append(f' }} else if ({debug_struct_name}->objectType == {surf_check}) {{\n') + out.append(' if (NULL != dev && NULL != dev->loader_dispatch.core_dispatch.CreateSwapchainKHR) {\n') + out.append(f' VkSurfaceKHR surface = (VkSurfaceKHR)(uintptr_t){debug_struct_name}->{member_name};\n') + out.append(' if (wsi_unwrap_icd_surface(icd_term, &surface) == VK_SUCCESS) {\n') + out.append(f' {local_struct}.{member_name} = (uint64_t)surface;\n') + out.append(' }\n') + out.append(' }\n') + out.append(' // If this is an instance we have to replace it with the proper one for the next call.\n') + out.append(f' }} else if ({debug_struct_name}->objectType == {inst_check}) {{\n') + out.append(f' {local_struct}.{member_name} = (uint64_t)(uintptr_t)icd_term->instance;\n') + out.append(' }\n') + out.append(' // Exit early if the driver does not support the function - this can happen as a layer or the loader itself supports\n') + out.append(' // debug utils but the driver does not.\n') + out.append(f' if (NULL == dev->loader_dispatch.extension_terminator_dispatch.{command.name[2:]})\n return VK_SUCCESS;\n') + dispatch = 'dev->loader_dispatch.' + else: + out.append(f' struct loader_dev_dispatch_table *dispatch_table = loader_get_dev_dispatch({command.params[0].name});\n') + out.append(' if (NULL == dispatch_table) {\n') + out.append(f' loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, "{command.extensions[0]}: Invalid device handle");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + out.append(' // Only call down if the device supports the function\n') + out.append(f' if (NULL != dispatch_table->extension_terminator_dispatch.{base_name})\n ') + dispatch = 'dispatch_table->' + out.append(' ') + if has_return_type: + out.append('return ') + out.append(f'{dispatch}extension_terminator_dispatch.{base_name}(') + count = 0 + for param in command.params: + if count != 0: + out.append(', ') + + if param.type == 'VkPhysicalDevice': + out.append('phys_dev_term->phys_dev') + elif param.type == 'VkSurfaceKHR': + out.append( 'unwrapped_surface') + elif ('DebugMarkerSetObject' in command.name or 'SetDebugUtilsObject' in command.name) and param.name == 'pNameInfo': + out.append( '&local_name_info') + elif ('DebugMarkerSetObject' in command.name or 'SetDebugUtilsObject' in command.name) and param.name == 'pTagInfo': + out.append('&local_tag_info') + else: + out.append(param.name) + count += 1 + + out.append(');\n') + + else: + out.append('#error("Unknown error path!");\n') + + out.append('}\n\n') + else: + out.append(tramp_header) + + out.append(' const VkLayerDispatchTable *disp = loader_get_dispatch(') + out.append(command.params[0].name) + out.append(');\n') + out.append(' if (NULL == disp) {\n') + out.append(' loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,\n') + out.append(f' "{command.name}: Invalid {command.params[0].name} "\n') + out.append(f' "[VUID-{command.name}-{command.params[0].name}-parameter]");\n') + out.append(' abort(); /* Intentionally fail so user can correct issue. */\n') + out.append(' }\n') + + if command.extensions[0] in NULL_CHECK_EXT_NAMES: + out.append(' if (disp->' + base_name + ' != NULL) {\n') + out.append(' ') + out.append(return_prefix) + out.append('disp->') + out.append(base_name) + out.append('(') + count = 0 + for param in command.params: + if count != 0: + out.append(', ') + out.append(param.name) + count += 1 + out.append(');\n') + if command.extensions[0] in NULL_CHECK_EXT_NAMES: + if command.returnType != 'void': + out.append(' } else {\n') + out.append(' return VK_SUCCESS;\n') + out.append(' }\n') + out.append('}\n\n') + + if command.protect is not None: + out.append(f'#endif // {command.protect}\n') + + + + # + # Create a function for the extension GPA call + def InstExtensionGPA(self, out): + cur_extension_name = '' + + out.append( '// GPA helpers for extensions\n') + out.append( 'bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) {\n') + out.append( ' *addr = NULL;\n\n') + + for command in [x for x in self.vk.commands.values() if x.extensions]: + if (command.version or + command.extensions[0] in WSI_EXT_NAMES or + command.extensions[0] in AVOID_EXT_NAMES or + command.name in AVOID_CMD_NAMES ): + continue + + if command.extensions[0] != cur_extension_name: + out.append( f'\n // ---- {command.extensions[0]} extension commands\n') + cur_extension_name = command.extensions[0] + + if command.protect is not None: + out.append( f'#if defined({command.protect})\n') + + #base_name = command.name[2:] + base_name = SHARED_ALIASES[command.name] if command.name in SHARED_ALIASES else command.name[2:] + + if len(command.extensions) > 0 and self.vk.extensions[command.extensions[0]].instance: + out.append( f' if (!strcmp("{command.name}", name)) {{\n') + out.append( ' *addr = (ptr_instance->enabled_extensions.') + out.append( command.extensions[0][3:].lower()) + out.append( ' == 1)\n') + out.append( f' ? (void *){base_name}\n') + out.append( ' : NULL;\n') + out.append( ' return true;\n') + out.append( ' }\n') + else: + out.append( f' if (!strcmp("{command.name}", name)) {{\n') + out.append( f' *addr = (void *){base_name};\n') + out.append( ' return true;\n') + out.append( ' }\n') + + if command.protect is not None: + out.append( f'#endif // {command.protect}\n') + + out.append( ' return false;\n') + out.append( '}\n\n') + + + + # + # Create the extension name init function + def InstantExtensionCreate(self, out): + + out.append( '// Used to keep track of all enabled instance extensions\n') + out.append( 'void fill_out_enabled_instance_extensions(uint32_t extension_count, const char *const * extension_list, struct loader_instance_extension_enable_list* enables) {\n') + out.append( ' for (uint32_t i = 0; i < extension_count; i++) {\n') + e = '' + cur_extension_name = '' + for extension in self.instance_extensions: + if extension.name != cur_extension_name: + out.append( f'\n // ---- {extension.name} extension commands\n') + cur_extension_name = extension.name + + if extension.protect is not None: + out.append( f'#if defined({extension.protect})\n') + + out.append(f' {e}if (0 == strcmp(extension_list[i], ') + + out.append( f'{extension.nameString})) {{ enables->{extension.name[3:].lower()} = 1; }}\n') + + if extension.protect is not None: + out.append( f'#endif // {extension.protect}\n') + e = 'else ' + + out.append( ' }\n') + out.append( '}\n\n') + + + # + # Create code to initialize a dispatch table from the appropriate list of extension entrypoints + def DeviceExtensionGetTerminator(self, out): + out.append('// Some device commands still need a terminator because the loader needs to unwrap something about them.\n') + out.append('// In many cases, the item needing unwrapping is a VkPhysicalDevice or VkSurfaceKHR object. But there may be other items\n') + out.append('// in the future.\n') + out.append('PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *name, bool* found_name) {\n') + out.append(''' *found_name = false; + if (!name || name[0] != 'v' || name[1] != 'k') { + return NULL; + } + name += 2; +''') + last_protect = None + last_ext = None + for command in [x for x in self.vk.commands.values() if x.extensions]: + version = command.version + if command.name in DEVICE_CMDS_NEED_TERM: + if version: + out.append(f' // ---- Core {version.name} commands\n') + else: + last_protect = command.protect + if command.protect is not None: + out.append(f'#if defined({command.protect})\n') + if last_ext != command.extensions[0]: + out.append(f' // ---- {command.extensions[0]} extension commands\n') + last_ext = command.extensions[0] + + out.append(f' if (!strcmp(name, "{command.name[2:]}")) {{\n') + out.append(' *found_name = true;\n') + enable_extension_expressions = [] + for ext in command.extensions: + enable_extension_expressions.append(f'dev->driver_extensions.{ext[3:].lower()}_enabled') + out.append(f' return {" || ".join(enable_extension_expressions)} ?\n') + out.append(f' (PFN_vkVoidFunction)terminator_{(command.name[2:])} : NULL;\n') + out.append(' }\n') + + if last_protect is not None: + out.append(f'#endif // {last_protect}\n') + + out.append(' return NULL;\n') + out.append('}\n\n') + + + + # + # Create code to initialize a dispatch table from the appropriate list of core and extension entrypoints + def InitInstLoaderExtensionDispatchTable(self, out): + commands = [] + + out.append( '// This table contains the loader\'s instance dispatch table, which contains\n') + out.append( '// default functions if no instance layers are activated. This contains\n') + out.append( '// pointers to "terminator functions".\n') + out.append( 'const VkLayerInstanceDispatchTable instance_disp = {\n') + + for command_list in [self.core_commands, self.extension_commands]: + commands = command_list + + current_block = '' + for command in commands: + if command.params[0].type in ['VkInstance', 'VkPhysicalDevice']: + current_block = self.DescribeBlock(command, current_block, out) + # Remove 'vk' from proto name + base_name = command.name[2:] + aliased_name = SHARED_ALIASES[command.name][2:] if command.name in SHARED_ALIASES else base_name + + if (base_name == 'CreateInstance' or base_name == 'CreateDevice' or + base_name == 'EnumerateInstanceExtensionProperties' or + base_name == 'EnumerateInstanceLayerProperties' or + base_name == 'EnumerateInstanceVersion'): + continue + + if command.protect is not None: + out.append( f'#if defined({command.protect})\n') + + if base_name == 'GetInstanceProcAddr': + out.append( f' .{base_name} = {command.name},\n') + else: + out.append( f' .{base_name} = terminator_{aliased_name},\n') + + if command.protect is not None: + out.append( f'#endif // {command.protect}\n') + out.append( '};\n\n') + + + + # + # Create the extension name whitelist array + def OutputInstantExtensionWhitelistArray(self, out): + out.append( '// A null-terminated list of all of the instance extensions supported by the loader.\n') + out.append( '// If an instance extension name is not in this list, but it is exported by one or more of the\n') + out.append( '// ICDs detected by the loader, then the extension name not in the list will be filtered out\n') + out.append( '// before passing the list of extensions to the application.\n') + out.append( 'const char *const LOADER_INSTANCE_EXTENSIONS[] = {\n') + for extension in self.instance_extensions: + + if extension.protect is not None: + out.append( f'#if defined({extension.protect})\n') + out.append( ' ') + out.append( extension.nameString + ',\n') + + if extension.protect is not None: + out.append( f'#endif // {extension.protect}\n') + out.append( ' NULL };\n') diff --git a/local/recipes/libs/vulkan-loader/source/scripts/gn/DEPS b/local/recipes/libs/vulkan-loader/source/scripts/gn/DEPS new file mode 100644 index 0000000000..8cf931a828 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/gn/DEPS @@ -0,0 +1,68 @@ +gclient_gn_args_file = 'build/config/gclient_args.gni' + +vars = { + 'chromium_git': 'https://chromium.googlesource.com', + 'ninja_version': 'version:2@1.11.1.chromium.6', +} + +deps = { + + 'build': { + 'url': '{chromium_git}/chromium/src/build.git@1015724d82945f9ef7e51c6f804034ccf5f79951', + }, + + 'buildtools': { + 'url': '{chromium_git}/chromium/src/buildtools.git@3c7e3f1b8b1e4c0b6ec693430379cea682de78d6', + }, + + 'buildtools/linux64': { + 'packages': [ + { + 'package': 'gn/gn/linux-${{arch}}', + 'version': 'git_revision:5e19d2fb166fbd4f6f32147fbb2f497091a54ad8', + } + ], + 'dep_type': 'cipd', + 'condition': 'host_os == "linux"', + }, + + 'testing': { + 'url': '{chromium_git}/chromium/src/testing@949b2864b6bd27656753b917c9aa7731dc7a06f6', + }, + + 'tools/clang': { + 'url': '{chromium_git}/chromium/src/tools/clang.git@566877f1ff1a5fa6beaca3ab4b47bd0b92eb614f', + }, + + 'third_party/ninja': { + 'packages': [ + { + 'package': 'infra/3pp/tools/ninja/${{platform}}', + 'version': Var('ninja_version'), + } + ], + 'dep_type': 'cipd', + }, + +} + +hooks = [ + { + 'name': 'sysroot_x64', + 'pattern': '.', + 'condition': 'checkout_linux and checkout_x64', + 'action': ['python3', 'build/linux/sysroot_scripts/install-sysroot.py', + '--arch=x64'], + }, + { + # Note: On Win, this should run after win_toolchain, as it may use it. + 'name': 'clang', + 'pattern': '.', + 'action': ['python3', 'tools/clang/scripts/update.py'], + }, +] + +recursedeps = [ + # buildtools provides clang_format. + 'buildtools', +] diff --git a/local/recipes/libs/vulkan-loader/source/scripts/gn/gn.py b/local/recipes/libs/vulkan-loader/source/scripts/gn/gn.py new file mode 100755 index 0000000000..52b20c580b --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/gn/gn.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Khronos Group Inc. +# Copyright 2023 Valve Corporation +# Copyright 2023 LunarG, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +import os +import subprocess +import sys + +# helper to define paths relative to the repo root +def RepoRelative(path): + return os.path.abspath(os.path.join(os.path.dirname(__file__), '../../', path)) + +def BuildGn(): + if not os.path.exists(RepoRelative("depot_tools")): + print("Cloning Chromium depot_tools\n", flush=True) + clone_cmd = 'git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools'.split(" ") + subprocess.call(clone_cmd) + + os.environ['PATH'] = os.environ.get('PATH') + ":" + RepoRelative("depot_tools") + + print("Updating Repo Dependencies and GN Toolchain\n", flush=True) + update_cmd = './scripts/gn/update_deps.sh' + subprocess.call(update_cmd) + + print("Checking Header Dependencies\n", flush=True) + gn_check_cmd = 'gn gen --check out/Debug'.split(" ") + subprocess.call(gn_check_cmd) + + print("Generating Ninja Files\n", flush=True) + gn_gen_cmd = 'gn gen out/Debug'.split(" ") + subprocess.call(gn_gen_cmd) + + print("Running Ninja Build\n", flush=True) + ninja_build_cmd = 'ninja -C out/Debug'.split(" ") + subprocess.call(ninja_build_cmd) + +# +# Module Entrypoint +def main(): + try: + BuildGn() + + except subprocess.CalledProcessError as proc_error: + print('Command "%s" failed with return code %s' % (' '.join(proc_error.cmd), proc_error.returncode)) + sys.exit(proc_error.returncode) + except Exception as unknown_error: + print('An unkown error occured: %s', unknown_error) + sys.exit(1) + + sys.exit(0) + +if __name__ == '__main__': + main() diff --git a/local/recipes/libs/vulkan-loader/source/scripts/gn/update_deps.sh b/local/recipes/libs/vulkan-loader/source/scripts/gn/update_deps.sh new file mode 100755 index 0000000000..9589924954 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/gn/update_deps.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# Copyright (c) 2019-2023 LunarG, 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 +# +# https://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. + +# Execute at repo root +cd "$(dirname $0)/../../" + +# Use update_deps.py to update source dependencies from /scripts/known_good.json +scripts/update_deps.py --dir="external" --no-build + +cat << EOF > .gn +buildconfig = "//build/config/BUILDCONFIG.gn" +secondary_source = "//scripts/gn/secondary/" + +script_executable = "python3" + +default_args = { + clang_use_chrome_plugins = false + use_custom_libcxx = false +} +EOF + +# Use gclient to update toolchain dependencies from /scripts/gn/DEPS (from chromium) +cat << EOF >> .gclient +solutions = [ + { "name" : ".", + "url" : "https://github.com/KhronosGroup/Vulkan-Loader", + "deps_file" : "scripts/gn/DEPS", + "managed" : False, + "custom_deps" : { + }, + "custom_vars": {}, + }, +] +EOF +gclient sync + diff --git a/local/recipes/libs/vulkan-loader/source/scripts/known_good.json b/local/recipes/libs/vulkan-loader/source/scripts/known_good.json new file mode 100644 index 0000000000..8363850482 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/known_good.json @@ -0,0 +1,45 @@ +{ + "repos": [ + { + "name": "Vulkan-Headers", + "api": "vulkan", + "url": "https://github.com/KhronosGroup/Vulkan-Headers.git", + "sub_dir": "Vulkan-Headers", + "build_dir": "Vulkan-Headers/build", + "install_dir": "Vulkan-Headers/build/install", + "commit": "v1.4.321" + }, + { + "name": "googletest", + "url": "https://github.com/google/googletest.git", + "sub_dir": "googletest", + "build_dir": "googletest", + "install_dir": "googletest", + "build_step": "skip", + "commit": "v1.14.0", + "optional": [ + "tests" + ] + }, + { + "name": "detours", + "url": "https://github.com/microsoft/Detours.git", + "sub_dir": "detours", + "build_dir": "detours", + "install_dir": "detours", + "build_step": "skip", + "commit": "4b8c659f549b0ab21cf649377c7a84eb708f5e68", + "optional": [ + "tests" + ], + "build_platforms": [ + "windows" + ] + } + ], + "install_names": { + "Vulkan-Headers": "VULKAN_HEADERS_INSTALL_DIR", + "googletest": "GOOGLETEST_INSTALL_DIR", + "detours": "DETOURS_INSTALL_DIR" + } +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/scripts/loader_genvk.py b/local/recipes/libs/vulkan-loader/source/scripts/loader_genvk.py new file mode 100644 index 0000000000..2a467f147f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/loader_genvk.py @@ -0,0 +1,51 @@ +#!/usr/bin/python3 +# +# Copyright (c) 2013-2025 The Khronos Group Inc. +# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2023-2023 RasterGrid Kft. +# +# 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. + +import argparse +import os +import common_codegen +from generate_source import RunGenerators + +# This is a legacy way to run the code gen +# Should call generate_source.py instead +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('target', metavar='target', nargs='?', help='Specify target') + parser.add_argument('-api', action='store', + default='vulkan', + choices=['vulkan'], + help='Specify API name to generate') + parser.add_argument('-registry', action='store', + default='vk.xml', + help='Use specified registry file instead of vk.xml') + parser.add_argument('-o', action='store', dest='directory', + default='.', + help='Create target and related files in specified directory') + # This argument tells us where to load the script from the Vulkan-Headers registry + parser.add_argument('-scripts', action='store', + help='Find additional scripts in this directory') + + args = parser.parse_args() + + # Currently don't run clang format + # repo_dir = common_codegen.repo_relative('.') + # style_file = os.path.join(repo_dir, '.clang-format') + + RunGenerators(api=args.api,registry=args.registry, directory=args.directory, styleFile=None, targetFilter=[args.target], flatOutput=True) + diff --git a/local/recipes/libs/vulkan-loader/source/scripts/parse_asm_values.py b/local/recipes/libs/vulkan-loader/source/scripts/parse_asm_values.py new file mode 100644 index 0000000000..157fb7d5e8 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/parse_asm_values.py @@ -0,0 +1,135 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2022 The Khronos Group Inc. +# Copyright (c) 2022 LunarG, 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. +# +# Author: Charles Giessen + +# This script reads in the 'intermediate output' of a compiler to look for sizeof/offsetof information +# necessary for the assembler portions of the loader. This is achieved by forcing the compiler to output +# the intermediate assembly output and looking for specific patterns which contain the relevant information + +import sys +import os.path +from os.path import exists +import re +import subprocess +import traceback + + +# Where to write the "gen_defines.asm" file +destination_file = sys.argv[1] +# The location the build system puts the intermediate asm file which depends on the compiler +source_asm_file = sys.argv[2] +# Whether we are using "MASM", "MARMASM" or "GAS" for the assembler +assembler_type = sys.argv[3] +# Whether we are using gcc, clang, or msvc +compiler = sys.argv[4] +# taken from CMAKE_SYSTEM_PROCESSOR - x86_64, aarch64|arm64, x86, aarch32|armhf +# Only used with GAS/MARMASM - MASM doesn't need this, as it has its own way to determine x86 vs x64 +arch = sys.argv[5] + +POSIX_COMPILERS = ["GNU", "Clang", "AppleClang"] + +if destination_file is None or source_asm_file is None or assembler_type is None or compiler is None or arch is None: + print("Required command line arguments were not provided") + sys.exit(1) + +defines = ["VULKAN_LOADER_ERROR_BIT", + "PTR_SIZE", + "CHAR_PTR_SIZE", + "FUNCTION_OFFSET_INSTANCE", + "PHYS_DEV_OFFSET_INST_DISPATCH", + "PHYS_DEV_OFFSET_PHYS_DEV_TRAMP", + "ICD_TERM_OFFSET_PHYS_DEV_TERM", + "PHYS_DEV_OFFSET_PHYS_DEV_TERM", + "INSTANCE_OFFSET_ICD_TERM", + "DISPATCH_OFFSET_ICD_TERM", + "EXT_OFFSET_DEVICE_DISPATCH" ] + +if os.path.splitext(source_asm_file)[1] == ".a": + try: + ar_path = sys.argv[6] + asm_archive_member = sys.argv[7] + subprocess_result = subprocess.Popen([ar_path, "p", source_asm_file, asm_archive_member], stdout=subprocess.PIPE) + asm_intermediate_file = subprocess_result.stdout.read().decode("utf-8") + except IOError: + print("Could not open assembler archive file:", source_asm_file) + traceback.print_exc() + sys.exit(1) +else: + try: + with open(source_asm_file, 'r') as f: + asm_intermediate_file = f.read() + except IOError: + print("Could not open assembler file:", source_asm_file) + sys.exit(1) + +with open(destination_file, "w", encoding="utf-8") as dest: + # special case vulkan error bit due to it not appearing in the asm - its defined in the header as 8 so it shouldn't change + if assembler_type == "MASM": + dest.write("VULKAN_LOADER_ERROR_BIT equ 8;\n") + elif assembler_type == 'MARMASM': + dest.write(' AREA loader_structs_details, DATA,READONLY\n') + if arch == "aarch64" or arch == "arm64": + dest.write("AARCH_64 EQU 1\n") + elif arch in ["aarch32", "armhf", "arm"]: + dest.write("AARCH_64 EQU 0\n") + else: + print('The parameter "arch" has value of ', arch, ' which is not recognized') + dest.write("VULKAN_LOADER_ERROR_BIT EQU 8\n") + elif assembler_type == "GAS": + # let the assembler know which platform to use + if arch == "x86_64": + dest.write(".set X86_64, 1\n") + elif arch == "aarch64" or arch == "arm64": + dest.write(".set AARCH_64, 1\n") + elif arch in ["aarch32", "armhf", "arm"]: + dest.write(".set AARCH_64, 0\n") + else: + print('The parameter "arch" has value of ', arch, ' which is not recognized') + # Nothing to write in the x86 case + + for d in defines: + match = None + if compiler == "MSVC": + if d == "VULKAN_LOADER_ERROR_BIT": + continue # skip due to special case + if 'arm' in arch.lower(): + match = re.search('\\|'+ d + '\\| DCD[\t ]*0x([0-9a-f]+)', asm_intermediate_file) + else: + match = re.search(d + " DD [ ]*([0-9a-f]+)H", asm_intermediate_file) + elif compiler in POSIX_COMPILERS: + match = re.search(d + " = ([0-9]+)", asm_intermediate_file) + + if len(match.groups()) > 0: + if compiler == "MSVC": + value = str(int(match.group(1), 16)) + elif compiler in POSIX_COMPILERS: + value = match.group(1) + + # MASM uses hex values, decode them here + if assembler_type == "MASM": + dest.write(d + " equ " + value +";\n") + elif assembler_type == 'MARMASM': + dest.write(d + ' EQU ' + value +'\n') + elif assembler_type == "GAS": + dest.write(".set " + d + ", " + value + "\n") + else: + print("Couldn't find ", d) + sys.exit(1) + if assembler_type == 'MARMASM': + dest.write(" END\n") + diff --git a/local/recipes/libs/vulkan-loader/source/scripts/qnx/README.md b/local/recipes/libs/vulkan-loader/source/scripts/qnx/README.md new file mode 100644 index 0000000000..f8f46af673 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/qnx/README.md @@ -0,0 +1,12 @@ +QNX maintains it's own slightly modified ICD loader. + +Instead of using /etc/ for layers and drivers JSONs - it asks Screen Composition Manager for the all settings and fetches the lists from it. + +Like it is currently done for OpenGL ES, OpenCL, etc. + +More information: +https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.screen/topic/manual/cscreen_config_intro.html#screen_khronos_egl_display__vk-exps + +This QNX build is mostly for the hardware vendors, so they could test Vulkan drivers before QNX with Vulkan support was officially released using the Linux way of drivers loading. + +Some customers still can use this if they don't need to run Screen composition manager. For example, for Vulkan-SC used as compute engine and offscreen renderer. diff --git a/local/recipes/libs/vulkan-loader/source/scripts/qnx/common.mk b/local/recipes/libs/vulkan-loader/source/scripts/qnx/common.mk new file mode 100644 index 0000000000..bd10e71eb3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/qnx/common.mk @@ -0,0 +1,44 @@ +ifndef QCONFIG +QCONFIG=qconfig.mk +endif +include $(QCONFIG) + +define PINFO +PINFO DESCRIPTION = "Vulkan ICD Loader" +endef + +ICD_ROOT=$(CURDIR)/../../../../.. + +EXTRA_INCVPATH+=$(ICD_ROOT)/scripts/gn +EXTRA_INCVPATH+=$(ICD_ROOT)/external/Vulkan-Headers/include + +EXTRA_SRCVPATH+=$(ICD_ROOT)/loader +EXTRA_SRCVPATH+=$(ICD_ROOT)/loader/generated + +SO_VERSION=1 +NAME=vulkan + +# Make the library + +SRCS = cJSON.c debug_utils.c dev_ext_trampoline.c loader.c \ + phys_dev_ext.c trampoline.c unknown_ext_chain.c wsi.c \ + extension_manual.c unknown_function_handling.c settings.c \ + log.c allocation.c loader_environment.c gpa_helper.c \ + terminator.c + +LDFLAGS += -Wl,--unresolved-symbols=report-all -Wl,--no-undefined -Wl,-fPIC + +include $(MKFILES_ROOT)/qtargets.mk + +CCFLAGS += -DVK_USE_PLATFORM_SCREEN_QNX=1 -DVK_ENABLE_BETA_EXTENSIONS +CCFLAGS += -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers +CCFLAGS += -fno-strict-aliasing -Wno-stringop-truncation +CCFLAGS += -Wno-stringop-overflow -fvisibility=hidden +CCFLAGS += -Wpointer-arith -fPIC + +CXXFLAGS += $(CCFLAGS) + +# cJSON requires math library for pow() function +LIBS += m + +INSTALLDIR=usr/lib diff --git a/local/recipes/libs/vulkan-loader/source/scripts/qnx/loader_cmake_config.h b/local/recipes/libs/vulkan-loader/source/scripts/qnx/loader_cmake_config.h new file mode 100644 index 0000000000..37d318f514 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/qnx/loader_cmake_config.h @@ -0,0 +1,2 @@ +#undef HAVE_SECURE_GETENV +#undef HAVE___SECURE_GETENV diff --git a/local/recipes/libs/vulkan-loader/source/scripts/update_deps.py b/local/recipes/libs/vulkan-loader/source/scripts/update_deps.py new file mode 100755 index 0000000000..95b8f30570 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/scripts/update_deps.py @@ -0,0 +1,822 @@ +#!/usr/bin/env python3 + +# Copyright 2017 The Glslang Authors. All rights reserved. +# Copyright (c) 2018-2023 Valve Corporation +# Copyright (c) 2018-2023 LunarG, Inc. +# Copyright (c) 2023-2023 RasterGrid Kft. +# +# 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. + +# This script was heavily leveraged from KhronosGroup/glslang +# update_glslang_sources.py. +"""update_deps.py + +Get and build dependent repositories using known-good commits. + +Purpose +------- + +This program is intended to assist a developer of this repository +(the "home" repository) by gathering and building the repositories that +this home repository depend on. It also checks out each dependent +repository at a "known-good" commit in order to provide stability in +the dependent repositories. + +Known-Good JSON Database +------------------------ + +This program expects to find a file named "known-good.json" in the +same directory as the program file. This JSON file is tailored for +the needs of the home repository by including its dependent repositories. + +Program Options +--------------- + +See the help text (update_deps.py --help) for a complete list of options. + +Program Operation +----------------- + +The program uses the user's current directory at the time of program +invocation as the location for fetching and building the dependent +repositories. The user can override this by using the "--dir" option. + +For example, a directory named "build" in the repository's root directory +is a good place to put the dependent repositories because that directory +is not tracked by Git. (See the .gitignore file.) The "external" directory +may also be a suitable location. +A user can issue: + +$ cd My-Repo +$ mkdir build +$ cd build +$ ../scripts/update_deps.py + +or, to do the same thing, but using the --dir option: + +$ cd My-Repo +$ mkdir build +$ scripts/update_deps.py --dir=build + +With these commands, the "build" directory is considered the "top" +directory where the program clones the dependent repositories. The +JSON file configures the build and install working directories to be +within this "top" directory. + +Note that the "dir" option can also specify an absolute path: + +$ cd My-Repo +$ scripts/update_deps.py --dir=/tmp/deps + +The "top" dir is then /tmp/deps (Linux filesystem example) and is +where this program will clone and build the dependent repositories. + +Helper CMake Config File +------------------------ + +When the program finishes building the dependencies, it writes a file +named "helper.cmake" to the "top" directory that contains CMake commands +for setting CMake variables for locating the dependent repositories. +This helper file can be used to set up the CMake build files for this +"home" repository. + +A complete sequence might look like: + +$ git clone git@github.com:My-Group/My-Repo.git +$ cd My-Repo +$ mkdir build +$ cd build +$ ../scripts/update_deps.py +$ cmake -C helper.cmake .. +$ cmake --build . + +JSON File Schema +---------------- + +There's no formal schema for the "known-good" JSON file, but here is +a description of its elements. All elements are required except those +marked as optional. Please see the "known_good.json" file for +examples of all of these elements. + +- name + +The name of the dependent repository. This field can be referenced +by the "deps.repo_name" structure to record a dependency. + +- api + +The name of the API the dependency is specific to (e.g. "vulkan"). + +- url + +Specifies the URL of the repository. +Example: https://github.com/KhronosGroup/Vulkan-Loader.git + +- sub_dir + +The directory where the program clones the repository, relative to +the "top" directory. + +- build_dir + +The directory used to build the repository, relative to the "top" +directory. + +- install_dir + +The directory used to store the installed build artifacts, relative +to the "top" directory. + +- commit + +The commit used to checkout the repository. This can be a SHA-1 +object name or a refname used with the remote name "origin". + +- deps (optional) + +An array of pairs consisting of a CMake variable name and a +repository name to specify a dependent repo and a "link" to +that repo's install artifacts. For example: + +"deps" : [ + { + "var_name" : "VULKAN_HEADERS_INSTALL_DIR", + "repo_name" : "Vulkan-Headers" + } +] + +which represents that this repository depends on the Vulkan-Headers +repository and uses the VULKAN_HEADERS_INSTALL_DIR CMake variable to +specify the location where it expects to find the Vulkan-Headers install +directory. +Note that the "repo_name" element must match the "name" element of some +other repository in the JSON file. + +- prebuild (optional) +- prebuild_linux (optional) (For Linux and MacOS) +- prebuild_windows (optional) + +A list of commands to execute before building a dependent repository. +This is useful for repositories that require the execution of some +sort of "update" script or need to clone an auxillary repository like +googletest. + +The commands listed in "prebuild" are executed first, and then the +commands for the specific platform are executed. + +- custom_build (optional) + +A list of commands to execute as a custom build instead of using +the built in CMake way of building. Requires "build_step" to be +set to "custom" + +You can insert the following keywords into the commands listed in +"custom_build" if they require runtime information (like whether the +build config is "Debug" or "Release"). + +Keywords: +{0} reference to a dictionary of repos and their attributes +{1} reference to the command line arguments set before start +{2} reference to the CONFIG_MAP value of config. + +Example: +{2} returns the CONFIG_MAP value of config e.g. debug -> Debug +{1}.config returns the config variable set when you ran update_dep.py +{0}[Vulkan-Headers][repo_root] returns the repo_root variable from + the Vulkan-Headers GoodRepo object. + +- cmake_options (optional) + +A list of options to pass to CMake during the generation phase. + +- ci_only (optional) + +A list of environment variables where one must be set to "true" +(case-insensitive) in order for this repo to be fetched and built. +This list can be used to specify repos that should be built only in CI. + +- build_step (optional) + +Specifies if the dependent repository should be built or not. This can +have a value of 'build', 'custom', or 'skip'. The dependent repositories are +built by default. + +- build_platforms (optional) + +A list of platforms the repository will be built on. +Legal options include: +"windows" +"linux" +"darwin" +"android" + +Builds on all platforms by default. + +Note +---- + +The "sub_dir", "build_dir", and "install_dir" elements are all relative +to the effective "top" directory. Specifying absolute paths is not +supported. However, the "top" directory specified with the "--dir" +option can be a relative or absolute path. + +""" + +import argparse +import json +import os +import os.path +import subprocess +import sys +import platform +import multiprocessing +import shlex +import shutil +import stat +import time + +KNOWN_GOOD_FILE_NAME = 'known_good.json' + +CONFIG_MAP = { + 'debug': 'Debug', + 'release': 'Release', + 'relwithdebinfo': 'RelWithDebInfo', + 'minsizerel': 'MinSizeRel' +} + +# NOTE: CMake also uses the VERBOSE environment variable. This is intentional. +VERBOSE = os.getenv("VERBOSE") + +DEVNULL = open(os.devnull, 'wb') + + +def on_rm_error( func, path, exc_info): + """Error handler for recursively removing a directory. The + shutil.rmtree function can fail on Windows due to read-only files. + This handler will change the permissions for the file and continue. + """ + os.chmod( path, stat.S_IWRITE ) + os.unlink( path ) + +def make_or_exist_dirs(path): + "Wrapper for os.makedirs that tolerates the directory already existing" + # Could use os.makedirs(path, exist_ok=True) if we drop python2 + if not os.path.isdir(path): + os.makedirs(path) + +def command_output(cmd, directory): + # Runs a command in a directory and returns its standard output stream. + # Captures the standard error stream and prints it an error occurs. + # Raises a RuntimeError if the command fails to launch or otherwise fails. + if VERBOSE: + print('In {d}: {cmd}'.format(d=directory, cmd=cmd)) + + result = subprocess.run(cmd, cwd=directory, capture_output=True, text=True) + + if result.returncode != 0: + print(f'{result.stderr}', file=sys.stderr) + raise RuntimeError(f'Failed to run {cmd} in {directory}') + + if VERBOSE: + print(result.stdout) + return result.stdout + +def run_cmake_command(cmake_cmd): + # NOTE: Because CMake is an exectuable that runs executables + # stdout/stderr are mixed together. So this combines the outputs + # and prints them properly in case there is a non-zero exit code. + result = subprocess.run(cmake_cmd, + stdout = subprocess.PIPE, + stderr = subprocess.STDOUT, + text = True + ) + + if VERBOSE: + print(result.stdout) + print(f"CMake command: {cmake_cmd} ", flush=True) + + if result.returncode != 0: + print(result.stdout, file=sys.stderr) + sys.exit(result.returncode) + +def escape(path): + return path.replace('\\', '/') + +class GoodRepo(object): + """Represents a repository at a known-good commit.""" + + def __init__(self, json, args): + """Initializes this good repo object. + + Args: + 'json': A fully populated JSON object describing the repo. + 'args': Results from ArgumentParser + """ + self._json = json + self._args = args + # Required JSON elements + self.name = json['name'] + self.url = json['url'] + self.sub_dir = json['sub_dir'] + self.commit = json['commit'] + # Optional JSON elements + self.build_dir = None + self.install_dir = None + if json.get('build_dir'): + self.build_dir = os.path.normpath(json['build_dir']) + if json.get('install_dir'): + self.install_dir = os.path.normpath(json['install_dir']) + self.deps = json['deps'] if ('deps' in json) else [] + self.prebuild = json['prebuild'] if ('prebuild' in json) else [] + self.prebuild_linux = json['prebuild_linux'] if ( + 'prebuild_linux' in json) else [] + self.prebuild_windows = json['prebuild_windows'] if ( + 'prebuild_windows' in json) else [] + self.custom_build = json['custom_build'] if ('custom_build' in json) else [] + self.cmake_options = json['cmake_options'] if ( + 'cmake_options' in json) else [] + self.ci_only = json['ci_only'] if ('ci_only' in json) else [] + self.build_step = json['build_step'] if ('build_step' in json) else 'build' + self.build_platforms = json['build_platforms'] if ('build_platforms' in json) else [] + self.optional = set(json.get('optional', [])) + self.api = json['api'] if ('api' in json) else None + # Absolute paths for a repo's directories + dir_top = os.path.abspath(args.dir) + self.repo_dir = os.path.join(dir_top, self.sub_dir) + if self.build_dir: + self.build_dir = os.path.join(dir_top, self.build_dir) + if self.install_dir: + self.install_dir = os.path.join(dir_top, self.install_dir) + + # By default the target platform is the host platform. + target_platform = platform.system().lower() + # However, we need to account for cross-compiling. + for cmake_var in self._args.cmake_var: + if "android.toolchain.cmake" in cmake_var: + target_platform = 'android' + + self.on_build_platform = False + if self.build_platforms == [] or target_platform in self.build_platforms: + self.on_build_platform = True + + def Clone(self, retries=10, retry_seconds=60): + if VERBOSE: + print('Cloning {n} into {d}'.format(n=self.name, d=self.repo_dir)) + for retry in range(retries): + make_or_exist_dirs(self.repo_dir) + try: + command_output(['git', 'clone', self.url, '.'], self.repo_dir) + # If we get here, we didn't raise an error + return + except RuntimeError as e: + print("Error cloning on iteration {}/{}: {}".format(retry + 1, retries, e)) + if retry + 1 < retries: + if retry_seconds > 0: + print("Waiting {} seconds before trying again".format(retry_seconds)) + time.sleep(retry_seconds) + if os.path.isdir(self.repo_dir): + print("Removing old tree {}".format(self.repo_dir)) + shutil.rmtree(self.repo_dir, onerror=on_rm_error) + continue + + # If we get here, we've exhausted our retries. + print("Failed to clone {} on all retries.".format(self.url)) + raise e + + def Fetch(self, retries=10, retry_seconds=60): + for retry in range(retries): + try: + command_output(['git', 'fetch', 'origin'], self.repo_dir) + # if we get here, we didn't raise an error, and we're done + return + except RuntimeError as e: + print("Error fetching on iteration {}/{}: {}".format(retry + 1, retries, e)) + if retry + 1 < retries: + if retry_seconds > 0: + print("Waiting {} seconds before trying again".format(retry_seconds)) + time.sleep(retry_seconds) + continue + + # If we get here, we've exhausted our retries. + print("Failed to fetch {} on all retries.".format(self.url)) + raise e + + def Checkout(self): + if VERBOSE: + print('Checking out {n} in {d}'.format(n=self.name, d=self.repo_dir)) + + if os.path.exists(os.path.join(self.repo_dir, '.git')): + url_changed = command_output(['git', 'config', '--get', 'remote.origin.url'], self.repo_dir).strip() != self.url + else: + url_changed = False + + if self._args.do_clean_repo or url_changed: + if os.path.isdir(self.repo_dir): + if VERBOSE: + print('Clearing directory {d}'.format(d=self.repo_dir)) + shutil.rmtree(self.repo_dir, onerror = on_rm_error) + if not os.path.exists(os.path.join(self.repo_dir, '.git')): + self.Clone() + self.Fetch() + if len(self._args.ref): + command_output(['git', 'checkout', self._args.ref], self.repo_dir) + else: + command_output(['git', 'checkout', self.commit], self.repo_dir) + + if VERBOSE: + print(command_output(['git', 'status'], self.repo_dir)) + + def CustomPreProcess(self, cmd_str, repo_dict): + return cmd_str.format(repo_dict, self._args, CONFIG_MAP[self._args.config]) + + def PreBuild(self): + """Execute any prebuild steps from the repo root""" + for p in self.prebuild: + command_output(shlex.split(p), self.repo_dir) + if platform.system() == 'Linux' or platform.system() == 'Darwin': + for p in self.prebuild_linux: + command_output(shlex.split(p), self.repo_dir) + if platform.system() == 'Windows': + for p in self.prebuild_windows: + command_output(shlex.split(p), self.repo_dir) + + def CustomBuild(self, repo_dict): + """Execute any custom_build steps from the repo root""" + + # It's not uncommon for builds to not support universal binaries + if self._args.OSX_ARCHITECTURES: + print("Universal Binaries not supported for custom builds", file=sys.stderr) + exit(-1) + + for p in self.custom_build: + cmd = self.CustomPreProcess(p, repo_dict) + command_output(shlex.split(cmd), self.repo_dir) + + def CMakeConfig(self, repos): + """Build CMake command for the configuration phase and execute it""" + if self._args.do_clean_build: + if os.path.isdir(self.build_dir): + shutil.rmtree(self.build_dir, onerror=on_rm_error) + if self._args.do_clean_install: + if os.path.isdir(self.install_dir): + shutil.rmtree(self.install_dir, onerror=on_rm_error) + + # Create and change to build directory + make_or_exist_dirs(self.build_dir) + os.chdir(self.build_dir) + + cmake_cmd = [ + 'cmake', self.repo_dir, + '-DCMAKE_INSTALL_PREFIX=' + self.install_dir + ] + + # Allow users to pass in arbitrary cache variables + for cmake_var in self._args.cmake_var: + pieces = cmake_var.split('=', 1) + cmake_cmd.append('-D{}={}'.format(pieces[0], pieces[1])) + + # For each repo this repo depends on, generate a CMake variable + # definitions for "...INSTALL_DIR" that points to that dependent + # repo's install dir. + for d in self.deps: + dep_commit = [r for r in repos if r.name == d['repo_name']] + if len(dep_commit) and dep_commit[0].on_build_platform: + cmake_cmd.append('-D{var_name}={install_dir}'.format( + var_name=d['var_name'], + install_dir=dep_commit[0].install_dir)) + + # Add any CMake options + for option in self.cmake_options: + cmake_cmd.append(escape(option.format(**self.__dict__))) + + # Set build config for single-configuration generators (this is a no-op on multi-config generators) + cmake_cmd.append(f'-D CMAKE_BUILD_TYPE={CONFIG_MAP[self._args.config]}') + + if self._args.OSX_ARCHITECTURES: + # CMAKE_OSX_ARCHITECTURES must be a semi-colon seperated list + cmake_osx_archs = self._args.OSX_ARCHITECTURES.replace(':', ';') + cmake_cmd.append(f'-D CMAKE_OSX_ARCHITECTURES={cmake_osx_archs}') + + # Use the CMake -A option to select the platform architecture + # without needing a Visual Studio generator. + if platform.system() == 'Windows' and self._args.generator != "Ninja": + cmake_cmd.append('-A') + if self._args.arch.lower() == '64' or self._args.arch == 'x64' or self._args.arch == 'win64': + cmake_cmd.append('x64') + elif self._args.arch == 'arm64': + cmake_cmd.append('arm64') + elif self._args.arch == 'arm': + cmake_cmd.append('arm') + else: + cmake_cmd.append('Win32') + + # Apply a generator, if one is specified. This can be used to supply + # a specific generator for the dependent repositories to match + # that of the main repository. + if self._args.generator is not None: + cmake_cmd.extend(['-G', self._args.generator]) + + # Removes warnings related to unused CLI + # EX: Setting CMAKE_CXX_COMPILER for a C project + if not VERBOSE: + cmake_cmd.append("--no-warn-unused-cli") + + run_cmake_command(cmake_cmd) + + def CMakeBuild(self): + """Build CMake command for the build phase and execute it""" + cmake_cmd = ['cmake', '--build', self.build_dir, '--target', 'install', '--config', CONFIG_MAP[self._args.config]] + if self._args.do_clean: + cmake_cmd.append('--clean-first') + + # Xcode / Ninja are parallel by default. + if self._args.generator != "Ninja" or self._args.generator != "Xcode": + cmake_cmd.append('--parallel') + cmake_cmd.append(format(multiprocessing.cpu_count())) + + run_cmake_command(cmake_cmd) + + def Build(self, repos, repo_dict): + """Build the dependent repo and time how long it took""" + if VERBOSE: + print('Building {n} in {d}'.format(n=self.name, d=self.repo_dir)) + print('Build dir = {b}'.format(b=self.build_dir)) + print('Install dir = {i}\n'.format(i=self.install_dir)) + + start = time.time() + + self.PreBuild() + + if self.build_step == 'custom': + self.CustomBuild(repo_dict) + else: + self.CMakeConfig(repos) + self.CMakeBuild() + + total_time = time.time() - start + + print(f"Installed {self.name} ({self.commit}) in {total_time} seconds", flush=True) + + def IsOptional(self, opts): + return len(self.optional.intersection(opts)) > 0 + +def GetGoodRepos(args): + """Returns the latest list of GoodRepo objects. + + The known-good file is expected to be in the same + directory as this script unless overridden by the 'known_good_dir' + parameter. + """ + if args.known_good_dir: + known_good_file = os.path.join( os.path.abspath(args.known_good_dir), + KNOWN_GOOD_FILE_NAME) + else: + known_good_file = os.path.join( + os.path.dirname(os.path.abspath(__file__)), KNOWN_GOOD_FILE_NAME) + with open(known_good_file) as known_good: + return [ + GoodRepo(repo, args) + for repo in json.loads(known_good.read())['repos'] + ] + + +def GetInstallNames(args): + """Returns the install names list. + + The known-good file is expected to be in the same + directory as this script unless overridden by the 'known_good_dir' + parameter. + """ + if args.known_good_dir: + known_good_file = os.path.join(os.path.abspath(args.known_good_dir), + KNOWN_GOOD_FILE_NAME) + else: + known_good_file = os.path.join( + os.path.dirname(os.path.abspath(__file__)), KNOWN_GOOD_FILE_NAME) + with open(known_good_file) as known_good: + install_info = json.loads(known_good.read()) + if install_info.get('install_names'): + return install_info['install_names'] + else: + return None + + +def CreateHelper(args, repos, filename): + """Create a CMake config helper file. + + The helper file is intended to be used with 'cmake -C ' + to build this home repo using the dependencies built by this script. + + The install_names dictionary represents the CMake variables used by the + home repo to locate the install dirs of the dependent repos. + This information is baked into the CMake files of the home repo and so + this dictionary is kept with the repo via the json file. + """ + install_names = GetInstallNames(args) + with open(filename, 'w') as helper_file: + for repo in repos: + # If the repo has an API tag and that does not match + # the target API then skip it + if repo.api is not None and repo.api != args.api: + continue + if install_names and repo.name in install_names and repo.on_build_platform: + helper_file.write('set({var} "{dir}" CACHE STRING "")\n' + .format( + var=install_names[repo.name], + dir=escape(repo.install_dir))) + + +def main(): + parser = argparse.ArgumentParser( + description='Get and build dependent repos at known-good commits') + parser.add_argument( + '--known_good_dir', + dest='known_good_dir', + help="Specify directory for known_good.json file.") + parser.add_argument( + '--dir', + dest='dir', + default='.', + help="Set target directory for repository roots. Default is \'.\'.") + parser.add_argument( + '--ref', + dest='ref', + default='', + help="Override 'commit' with git reference. E.g., 'origin/main'") + parser.add_argument( + '--no-build', + dest='do_build', + action='store_false', + help= + "Clone/update repositories and generate build files without performing compilation", + default=True) + parser.add_argument( + '--clean', + dest='do_clean', + action='store_true', + help="Clean files generated by compiler and linker before building", + default=False) + parser.add_argument( + '--clean-repo', + dest='do_clean_repo', + action='store_true', + help="Delete repository directory before building", + default=False) + parser.add_argument( + '--clean-build', + dest='do_clean_build', + action='store_true', + help="Delete build directory before building", + default=False) + parser.add_argument( + '--clean-install', + dest='do_clean_install', + action='store_true', + help="Delete install directory before building", + default=False) + parser.add_argument( + '--skip-existing-install', + dest='skip_existing_install', + action='store_true', + help="Skip build if install directory exists", + default=False) + parser.add_argument( + '--arch', + dest='arch', + choices=['32', '64', 'x86', 'x64', 'win32', 'win64', 'arm', 'arm64'], + type=str.lower, + help="Set build files architecture (Visual Studio Generator Only)", + default='64') + parser.add_argument( + '--config', + dest='config', + choices=['debug', 'release', 'relwithdebinfo', 'minsizerel'], + type=str.lower, + help="Set build files configuration", + default='debug') + parser.add_argument( + '--api', + dest='api', + default='vulkan', + choices=['vulkan'], + help="Target API") + parser.add_argument( + '--generator', + dest='generator', + help="Set the CMake generator", + default=None) + parser.add_argument( + '--optional', + dest='optional', + type=lambda a: set(a.lower().split(',')), + help="Comma-separated list of 'optional' resources that may be skipped. Only 'tests' is currently supported as 'optional'", + default=set()) + parser.add_argument( + '--cmake_var', + dest='cmake_var', + action='append', + metavar='VAR[=VALUE]', + help="Add CMake command line option -D'VAR'='VALUE' to the CMake generation command line; may be used multiple times", + default=[]) + parser.add_argument( + '--osx-archs', + dest='OSX_ARCHITECTURES', + help="Architectures when building a universal binary. Takes a colon seperated list. Ex: arm64:x86_64", + type=str, + default=None) + + args = parser.parse_args() + save_cwd = os.getcwd() + + if args.OSX_ARCHITECTURES: + print(f"Building dependencies as universal binaries targeting {args.OSX_ARCHITECTURES}") + + # Create working "top" directory if needed + make_or_exist_dirs(args.dir) + abs_top_dir = os.path.abspath(args.dir) + + repos = GetGoodRepos(args) + repo_dict = {} + + print('Starting builds in {d}'.format(d=abs_top_dir)) + for repo in repos: + # If the repo has an API tag and that does not match + # the target API then skip it + if repo.api is not None and repo.api != args.api: + continue + + # If the repo has a platform whitelist, skip the repo + # unless we are building on a whitelisted platform. + if not repo.on_build_platform: + continue + + # Skip building the repo if its install directory already exists + # and requested via an option. This is useful for cases where the + # install directory is restored from a cache that is known to be up + # to date. + if args.skip_existing_install and os.path.isdir(repo.install_dir): + print('Skipping build for repo {n} due to existing install directory'.format(n=repo.name)) + continue + + # Skip test-only repos if the --tests option was not passed in + if repo.IsOptional(args.optional): + continue + + field_list = ('url', + 'sub_dir', + 'commit', + 'build_dir', + 'install_dir', + 'deps', + 'prebuild', + 'prebuild_linux', + 'prebuild_windows', + 'custom_build', + 'cmake_options', + 'ci_only', + 'build_step', + 'build_platforms', + 'repo_dir', + 'on_build_platform') + repo_dict[repo.name] = {field: getattr(repo, field) for field in field_list} + + # If the repo has a CI whitelist, skip the repo unless + # one of the CI's environment variable is set to true. + if len(repo.ci_only): + do_build = False + for env in repo.ci_only: + if env not in os.environ: + continue + if os.environ[env].lower() == 'true': + do_build = True + break + if not do_build: + continue + + # Clone/update the repository + repo.Checkout() + + # Build the repository + if args.do_build and repo.build_step != 'skip': + repo.Build(repos, repo_dict) + + # Need to restore original cwd in order for CreateHelper to find json file + os.chdir(save_cwd) + CreateHelper(args, repos, os.path.join(abs_top_dir, 'helper.cmake')) + + sys.exit(0) + + +if __name__ == '__main__': + main() + diff --git a/local/recipes/libs/vulkan-loader/source/tests/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/CMakeLists.txt new file mode 100644 index 0000000000..8145f638d3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/CMakeLists.txt @@ -0,0 +1,171 @@ +# ~~~ +# Copyright (c) 2014-2023 Valve Corporation +# Copyright (c) 2014-2023 LunarG, 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. +# ~~~ +enable_language(CXX) # Tests use C++ + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Make sure tests uses the dynamic runtime instead +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + +if (IS_DIRECTORY "${GOOGLETEST_INSTALL_DIR}/googletest") + set(BUILD_GTEST ON) + set(BUILD_GMOCK OFF) + set(gtest_force_shared_crt ON) + set(INSTALL_GTEST OFF) + add_subdirectory("${GOOGLETEST_INSTALL_DIR}" ${CMAKE_CURRENT_BINARY_DIR}/gtest) +else() + message(FATAL_ERROR "Could not find googletest directory. See BUILD.md") +endif() + +if (WIN32) + if(NOT IS_DIRECTORY ${DETOURS_INSTALL_DIR}) + message(FATAL_ERROR "Could not find detours! See BUILD.md") + endif() + add_library(detours STATIC + ${DETOURS_INSTALL_DIR}/src/creatwth.cpp + ${DETOURS_INSTALL_DIR}/src/detours.cpp + ${DETOURS_INSTALL_DIR}/src/detours.h + ${DETOURS_INSTALL_DIR}/src/detver.h + ${DETOURS_INSTALL_DIR}/src/disasm.cpp + ${DETOURS_INSTALL_DIR}/src/disolarm.cpp + ${DETOURS_INSTALL_DIR}/src/disolarm64.cpp + ${DETOURS_INSTALL_DIR}/src/disolia64.cpp + ${DETOURS_INSTALL_DIR}/src/disolx64.cpp + ${DETOURS_INSTALL_DIR}/src/disolx86.cpp + ${DETOURS_INSTALL_DIR}/src/image.cpp + ${DETOURS_INSTALL_DIR}/src/modules.cpp + ) + target_include_directories(detours PUBLIC ${DETOURS_INSTALL_DIR}/src) + + target_compile_definitions(detours PUBLIC WIN32_LEAN_AND_MEAN) + + if(MSVC) + target_compile_definitions(detours PUBLIC "_CRT_SECURE_NO_WARNINGS=1") + set_target_properties(detours PROPERTIES COMPILE_FLAGS /EHsc) + endif() + + # Silence errors found in clang-cl + if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND "${CMAKE_C_SIMULATE_ID}" MATCHES "MSVC") + target_compile_options(detours PRIVATE -Wno-sizeof-pointer-memaccess -Wno-microsoft-goto -Wno-microsoft-cast) + endif() +endif() + +option(ENABLE_LIVE_VERIFICATION_TESTS "Enable tests which expect to run on live drivers. Meant for manual verification only" OFF) + +include(GoogleTest) +add_subdirectory(framework) + +add_executable( + test_regression + loader_testing_main.cpp + loader_alloc_callback_tests.cpp + loader_envvar_tests.cpp + loader_get_proc_addr_tests.cpp + loader_debug_ext_tests.cpp + loader_handle_validation_tests.cpp + loader_layer_tests.cpp + loader_regression_tests.cpp + loader_phys_dev_inst_ext_tests.cpp + loader_settings_tests.cpp + loader_version_tests.cpp + loader_unknown_ext_tests.cpp + loader_wsi_tests.cpp) +target_link_libraries(test_regression PUBLIC testing_dependencies) +target_compile_definitions(test_regression PUBLIC VK_NO_PROTOTYPES) + +add_executable( + test_fuzzing + loader_testing_main.cpp + loader_fuzz_tests.cpp +) +target_link_libraries(test_fuzzing PUBLIC testing_dependencies vulkan) +target_include_directories(test_fuzzing PUBLIC ${CMAKE_SOURCE_DIR}/loader ${CMAKE_SOURCE_DIR}/loader/generated) + +# Threading tests live in separate executabe just for threading tests as it'll need support +# in the test harness to enable in CI, as thread sanitizer doesn't work with address sanitizer enabled. +add_executable( + test_threading + loader_testing_main.cpp + loader_threading_tests.cpp) +target_link_libraries(test_threading PUBLIC testing_dependencies) +target_compile_definitions(test_threading PUBLIC VK_NO_PROTOTYPES) + +# executables that are meant for testing against real drivers rather than the mocks +if (ENABLE_LIVE_VERIFICATION_TESTS) + add_subdirectory(live_verification) +endif() + +if(WIN32) + # Copy vulkan-1.dll to the test_fuzzing build directory so that the test_fuzzing exe can find it. + if(TARGET vulkan) + add_custom_command(TARGET test_fuzzing POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $) + endif() +endif() + +# https://discourse.cmake.org/t/googletest-crash-when-using-cmake-xcode-arm64/5766 +# +# TLDR: On macOS arm64, all binaries have to be signed before running. +# Delay test discovery until test time as a workaround. +if (XCODE) + set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE "PRE_TEST") +endif() + +# must happen after the dll's get copied over +if(NOT CMAKE_CROSSCOMPILING) + gtest_discover_tests(test_regression PROPERTIES DISCOVERY_TIMEOUT 100) + gtest_discover_tests(test_fuzzing PROPERTIES DISCOVERY_TIMEOUT 100) +else() + gtest_add_tests(TARGET test_regression) + gtest_add_tests(TARGET test_fuzzing) +endif() + +# When APPLE_STATIC_LOADER is ON installation is disabled +if (APPLE_STATIC_LOADER) + return() +endif() + +# Test installation +set(test_install_dir "${CMAKE_CURRENT_BINARY_DIR}/install") +add_test(NAME integration.install + COMMAND ${CMAKE_COMMAND} --install ${PROJECT_BINARY_DIR} --prefix ${test_install_dir} --config $ +) + +# find_package testing currently doesn't work well under cross-compilation scenarios. +if (CMAKE_CROSSCOMPILING OR + NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + return() +endif() + +# Test find_package suppport +add_test(NAME integration.find_package + COMMAND ${CMAKE_CTEST_COMMAND} + --build-and-test ${CMAKE_CURRENT_LIST_DIR}/integration + ${CMAKE_CURRENT_BINARY_DIR}/find_package + --build-generator ${CMAKE_GENERATOR} + --build-options -DCMAKE_PREFIX_PATH=${test_install_dir} +) + +# Installing comes before testing +set_tests_properties(integration.find_package PROPERTIES DEPENDS integration.install) + +if (CODE_COVERAGE) + target_code_coverage(test_regression AUTO ALL ) + target_code_coverage(test_fuzzing AUTO ALL ) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/tests/README.md b/local/recipes/libs/vulkan-loader/source/tests/README.md new file mode 100644 index 0000000000..7a09938f93 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/README.md @@ -0,0 +1,52 @@ + +# Loader Tests + +This directory contains a test suite for the Vulkan loader. +These tests are not exhaustive — they are expected to be supplemented with other tests, such as CTS. + + +## Test specific CMake Configuration + +| Option | Platform | Default | Description | +| ------------------------------ | -------- | ------- | -------------------------------------------------------- | +| BUILD_TESTS | All | `OFF` | Controls whether or not the loader tests are built. | +| ENABLE_LIVE_VERIFICATION_TESTS | All | `OFF` | Enables building of tests meant to run with live drivers | + +## Running Tests + +For most purposes `ctest` is the desired method of running tests. +This is because when a test fails, `ctest` will automatically printout the failing test case. + +Tests are organized into various executables: + * `test_regression` - Contains most tests. + * `test_threading` - Tests which need multiple threads to execute. + * This allows targeted testing which uses tools like ThreadSanitizer + +The loader test framework is designed to be easy to use, as simple as just running a single executable. To achieve that requires extensive build script +automation is required. More details are in the tests/framework/README.md. +The consequence of this automation: Do not relocate the build folder of the project without cleaning the CMakeCache. Most components are found by absolute +path and thus require the contents of the folder to not be relocated. + +## Writing Tests + +The `test_environment.h/cpp` are the primary tool used when creating new tests. Either use the existing child classes of FrameworkEnvironment or create a new one +to suite the tests need. Refer to the `tests/framework/README.md` for more details. + +IMPORTANT NOTES: + * NEVER FORGET TO DESTROY A VKINSTANCE THAT WAS SUCCESSFULLY CREATED. + * The loader loads dynamic libraries in `vkCreateInstance` and unloads them in `vkDestroyInstance`. If these dynamic libraries aren't unloaded, they leak state + into the next test that runs, causing spurious failures or even crashes. + * Use InstWrapper helper as well as DeviceWrapper to automate this concern away. + +## Using a specific loader with the tests + +The environment variable `VK_LOADER_TEST_LOADER_PATH` can be used to specify which vulkan-loader binary should be used. +This is useful when writing tests to exercise a bug fix. +Simply build the loader without the fix, stash it in a known location. +Write the fix and the test that should exercise the bug and it passes. +Then run the test again but with this env-var set to the older loader without the fix and show that the test now fails. + +Basic usage example: +```c +VK_LOADER_TEST_LOADER_PATH="/path/to/older/loader/build" ctest --output-on-failure +``` diff --git a/local/recipes/libs/vulkan-loader/source/tests/corpus/VkLayer_complex_file.json b/local/recipes/libs/vulkan-loader/source/tests/corpus/VkLayer_complex_file.json new file mode 100644 index 0000000000..dde37e3a99 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/corpus/VkLayer_complex_file.json @@ -0,0 +1,741 @@ +{ + "file_format_version": "1.2.0", + "layer": { + "test_code_description": "This file is literally a copy of an installed Validation layer manifest file for linux. It was chosen because it contains a lot of complex json structures that aren't present in the test framework's generated json, so exercises cJSON better", + "name": "VK_LAYER_KHRONOS_validation", + "type": "GLOBAL", + "library_path": "libVkLayer_khronos_validation.so", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Khronos Validation Layer", + "introduction": "The main, comprehensive Khronos validation layer.\n\nVulkan is an Explicit API, enabling direct control over how GPUs actually work. By design, minimal error checking is done inside a Vulkan driver. Applications have full control and responsibility for correct operation. Any errors in how Vulkan is used can result in a crash. \n\nThe Khronos Valiation Layer can be enabled to assist development by enabling developers to verify their applications correctly use the Vulkan API.", + "platforms": [ + "WINDOWS", + "LINUX", + "ANDROID", + "MACOS" + ], + "url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/khronos_validation_layer.html", + "instance_extensions": [ + { + "name": "VK_EXT_debug_report", + "spec_version": "9" + }, + { + "name": "VK_EXT_debug_utils", + "spec_version": "1" + }, + { + "name": "VK_EXT_validation_features", + "spec_version": "2" + } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": [ + "vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + }, + { + "name": "VK_EXT_validation_cache", + "spec_version": "1", + "entrypoints": [ + "vkCreateValidationCacheEXT", + "vkDestroyValidationCacheEXT", + "vkGetValidationCacheDataEXT", + "vkMergeValidationCachesEXT" + ] + }, + { + "name": "VK_EXT_tooling_info", + "spec_version": "1", + "entrypoints": [ + "vkGetPhysicalDeviceToolPropertiesEXT" + ] + } + ], + "features": { + "presets": [ + { + "label": "Standard", + "description": "Good default validation setup that balance validation coverage and performance.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT" + ] + } + ] + }, + { + "label": "Reduced-Overhead", + "description": "Disables some checks in the interest of better performance.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS" + ], + "status": "STABLE", + "editor_state": "01110111111111111111111001111111111110", + "settings": [ + { + "key": "enables", + "value": [] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION", + "VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE", + "VALIDATION_CHECK_DISABLE_OBJECT_IN_USE", + "VALIDATION_CHECK_DISABLE_QUERY_VALIDATION" + ] + } + ] + }, + { + "label": "Best Practices", + "description": "Provides warnings on valid API usage that is potential API misuse.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + } + ] + }, + { + "label": "Synchronization", + "description": "Identify resource access conflicts due to missing or incorrect synchronization operations between actions reading or writing the same regions of memory.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + } + ] + }, + { + "label": "GPU-Assisted", + "description": "Check for API usage errors at shader execution time.", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + } + ] + }, + { + "label": "Debug Printf", + "description": "Debug shader code by \"printing\" any values of interest to the debug callback or stdout.", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + }, + { + "key": "enable_message_limit", + "value": false + } + ] + } + ], + "settings": [ + { + "key": "debug_action", + "label": "Debug Action", + "description": "Specifies what action is to be taken when a layer reports information", + "type": "FLAGS", + "flags": [ + { + "key": "VK_DBG_LAYER_ACTION_LOG_MSG", + "label": "Log Message", + "description": "Log a txt message to stdout or to a log filename.", + "settings": [ + { + "key": "log_filename", + "label": "Log Filename", + "description": "Specifies the output filename", + "type": "SAVE_FILE", + "default": "stdout", + "dependence": { + "mode": "ALL", + "settings": [ + { + "key": "debug_action", + "value": [ + "VK_DBG_LAYER_ACTION_LOG_MSG" + ] + } + ] + } + } + ] + }, + { + "key": "VK_DBG_LAYER_ACTION_CALLBACK", + "label": "Callback", + "description": "Call user defined callback function(s) that have been registered via the VK_EXT_debug_report extension. Since application must register callback, this is a NOOP for the settings file.", + "view": "HIDDEN" + }, + { + "key": "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT", + "label": "Debug Output", + "description": "Log a txt message using the Windows OutputDebugString function.", + "platforms": [ + "WINDOWS" + ] + }, + { + "key": "VK_DBG_LAYER_ACTION_BREAK", + "label": "Break", + "description": "Trigger a breakpoint if a debugger is in use." + } + ], + "default": [ + "VK_DBG_LAYER_ACTION_LOG_MSG" + ] + }, + { + "key": "report_flags", + "label": "Message Severity", + "description": "Comma-delineated list of options specifying the types of messages to be reported", + "type": "FLAGS", + "flags": [ + { + "key": "info", + "label": "Info", + "description": "Report informational messages." + }, + { + "key": "warn", + "label": "Warning", + "description": "Report warnings from using the API in a manner which may lead to undefined behavior or to warn the user of common trouble spots. A warning does NOT necessarily signify illegal application behavior." + }, + { + "key": "perf", + "label": "Performance", + "description": "Report usage of the API that may cause suboptimal performance." + }, + { + "key": "error", + "label": "Error", + "description": "Report errors in API usage." + }, + { + "key": "debug", + "label": "Debug", + "description": "For layer development. Report messages for debugging layer behavior.", + "view": "HIDDEN" + } + ], + "default": [ + "error" + ] + }, + { + "key": "enable_message_limit", + "label": "Limit Duplicated Messages", + "description": "Enable limiting of duplicate messages.", + "type": "BOOL", + "default": true, + "settings": [ + { + "key": "duplicate_message_limit", + "env": "VK_LAYER_DUPLICATE_MESSAGE_LIMIT", + "label": "Max Duplicated Messages", + "description": "Maximum number of times any single validation message should be reported.", + "type": "INT", + "default": 10, + "range": { + "min": 1 + }, + "dependence": { + "mode": "ALL", + "settings": [ + { + "key": "enable_message_limit", + "value": true + } + ] + } + } + ] + }, + { + "key": "message_id_filter", + "label": "Mute Message VUIDs", + "description": "List of VUIDs and VUID identifers which are to be IGNORED by the validation layer", + "type": "LIST", + "env": "VK_LAYER_MESSAGE_ID_FILTER", + "default": [] + }, + { + "key": "disables", + "label": "Disables", + "description": "Specify areas of validation to be disabled", + "type": "FLAGS", + "env": "VK_LAYER_DISABLES", + "flags": [ + { + "key": "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "label": "Thread Safety", + "description": "Thread checks. In order to not degrade performance, it might be best to run your program with thread-checking disabled most of the time, enabling it occasionally for a quick sanity check or when debugging difficult application behaviors." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "label": "Stateless Parameter", + "description": "Stateless parameter checks. This may not always be necessary late in a development cycle." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "label": "Object Lifetime", + "description": "Object tracking checks. This may not always be necessary late in a development cycle." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT", + "label": "Core", + "description": "The main, heavy-duty validation checks. This may be valuable early in the development cycle to reduce validation output while correcting parameter/object usage errors." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "label": "Handle Wrapping", + "description": "Handle wrapping checks. Disable this feature if you are exerience crashes when creating new extensions or developing new Vulkan objects/structures." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT", + "label": "Shader Validation", + "description": "Shader checks. These checks can be CPU intensive during application start up, especially if Shader Validation Caching is also disabled.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE", + "label": "Command Buffer State", + "description": "Check that all Vulkan objects used by a command buffer have not been destroyed. These checks can be CPU intensive for some applications.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION", + "label": "Image Layout", + "description": "Check that the layout of each image subresource is correct whenever it is used by a command buffer. These checks are very CPU intensive for some applications.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_QUERY_VALIDATION", + "label": "Query", + "description": "Checks for commands that use VkQueryPool objects.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_OBJECT_IN_USE", + "label": "Object in Use", + "description": "Check that Vulkan objects are not in use by a command buffer when they are destroyed.", + "view": "ADVANCED" + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT", + "label": "Shader Validation Caching", + "description": "Disable caching of shader validation results.", + "view": "ADVANCED" + } + ], + "default": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT" + ] + }, + { + "key": "enables", + "label": "Enables", + "description": "Setting an option here will enable specialized areas of validation", + "type": "FLAGS", + "env": "VK_LAYER_ENABLES", + "flags": [ + { + "key": "VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT", + "label": "Synchronization", + "description": "This feature reports resource access conflicts due to missing or incorrect synchronization operations between actions (Draw, Copy, Dispatch, Blit) reading or writing the same regions of memory.", + "url": "${LUNARG_SDK}/synchronization_usage.html", + "status": "STABLE", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_SYNCHRONIZATION_VALIDATION_QUEUE_SUBMIT", + "label": "QueueSubmit Synchronization Validation", + "description": "Enable synchronization validation between submitted command buffers when Synchronization Validation is enabled.", + "status": "ALPHA" + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", + "label": "Debug Printf", + "description": "Enables processing of debug printf instructions in shaders and sending debug strings to the debug callback.", + "url": "${LUNARG_SDK}/debug_printf.html", + "status": "STABLE", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "settings": [ + { + "key": "printf_to_stdout", + "label": "Redirect Printf messages to stdout", + "description": "Enable redirection of Debug Printf messages from the debug callback to stdout", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + } + ] + } + }, + { + "key": "printf_verbose", + "label": "Printf verbose", + "description": "Set the verbosity of debug printf messages", + "type": "BOOL", + "default": false, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + } + ] + } + }, + { + "key": "printf_buffer_size", + "label": "Printf buffer size", + "description": "Set the size in bytes of the buffer used by debug printf", + "type": "INT", + "default": 1024, + "range": { + "min": 128, + "max": 1048576 + }, + "unit": "bytes", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + } + ] + } + } + ] + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", + "label": "GPU-Assisted", + "description": "Check for API usage errors at shader execution time.", + "url": "${LUNARG_SDK}/gpu_validation.html", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "settings": [ + { + "key": "gpuav_descriptor_indexing", + "label": "Check descriptor indexing accesses", + "description": "Enable descriptor indexing access checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "gpuav_buffer_oob", + "label": "Check Out of Bounds ", + "description": "Enable buffer out of bounds checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "validate_draw_indirect", + "label": "Check Draw Indirect Count Buffers and firstInstance values", + "description": "Enable draw indirect checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "validate_dispatch_indirect", + "label": "Check Dispatch Indirect group count values", + "description": "Enable dispatch indirect checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "vma_linear_output", + "label": "Use VMA linear memory allocations for GPU-AV output buffers", + "description": "Use linear allocation algorithm", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + } + ] + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", + "label": "Reserve Descriptor Set Binding Slot", + "description": "Specifies that the validation layers reserve a descriptor set binding slot for their own use. The layer reports a value for VkPhysicalDeviceLimits::maxBoundDescriptorSets that is one less than the value reported by the device. If the device supports the binding of only one descriptor set, the validation layer does not perform GPU-assisted validation.", + "platforms": [ + "WINDOWS", + "LINUX" + ] + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT", + "label": "Best Practices", + "description": "Activating this feature enables the output of warnings related to common misuse of the API, but which are not explicitly prohibited by the specification.", + "url": "${LUNARG_SDK}/best_practices.html", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_ARM", + "label": "ARM-specific best practices", + "description": "Activating this feature enables the output of warnings related to ARM-specific misuse of the API, but which are not explicitly prohibited by the specification.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_AMD", + "label": "AMD-specific best practices", + "description": "Adds check for spec-conforming but non-ideal code on AMD GPUs.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_NVIDIA", + "label": "NVIDIA-specific best practices", + "description": "Activating this feature enables the output of warnings related to NVIDIA-specific misuse of the API, but which are not explicitly prohibited by the specification.", + "platforms": [ + "WINDOWS", + "LINUX", + "ANDROID" + ] + } + ], + "default": [] + }, + { + "key": "fine_grained_locking", + "env": "VK_LAYER_FINE_GRAINED_LOCKING", + "label": "Fine Grained Locking", + "description": "Enable fine grained locking for Core Validation, which should improve performance in multithreaded applications. This setting allows the optimization to be disabled for debugging.", + "status": "STABLE", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + } + ] + } + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/corpus/config.json b/local/recipes/libs/vulkan-loader/source/tests/corpus/config.json new file mode 100644 index 0000000000..99313efff3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/corpus/config.json @@ -0,0 +1,99 @@ +{ + "file_format_version": "1.2.0", + "settings_array": [ + { + "app_keys": [ + "/out/settings_fuzzer", + "/work/settings_fuzzer" + ], + "stderr_log": ["all", "info", "warn", "perf", "error", "debug", "layer", "driver", "validation"], + "log_locations": [ + { + "destinations":["/tmp"], + "filters":["all"] + } + ], + "layers": [ + { + "control": "auto", + "name": "test_auto", + "path": "test", + "treat_as_implicit_manifest": true + }, + { + "control": "on", + "name": "test_on", + "path": "test", + "treat_as_implicit_manifest": true + }, + { + "control": "off", + "name": "test_off", + "path": "test", + "treat_as_implicit_manifest": true + } + ] + }, + { + "app_keys": [ + "val1", + "val2", + "val3", + "val4" + ] + } + ], + "layers": [ + { + "name": "VK_LAYER_test_layer_1", + "type": "INSTANCE", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Test layer 1", + "library_path": "libVkLayer_khronos_validation.so", + "component_layers": ["VK_LAYER_test_layer_1", "VK_LAYER_test_layer_2"], + "disable_environment": { + "test_key": "test_value" + }, + "enable_environment": { + "test_key": "test_value" + }, + "app_keys": ["/out/settings_fuzzer"] + }, + { + "name": "VK_LAYER_test_layer_2", + "type": "GLOBAL", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Test layer 2", + "library_path": "libVkLayer_khronos_validation.so", + "component_layers": ["VK_LAYER_test_layer_1", "VK_LAYER_test_layer_2"], + "disable_environment": { + "test_key": "test_value" + }, + "enable_environment": { + "test_key": "test_value" + }, + "app_keys": ["/out/settings_fuzzer"] + }, + { + "name": "VK_LAYER_KHRONOS_validation", + "type": "GLOBAL", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Khronos validation", + "library_path": "libVkLayer_khronos_validation.so", + "disable_environment": { + "test_key": "test_value" + }, + "enable_environment": { + "test_key": "test_value" + }, + "app_keys": ["/out/settings_fuzzer"] + } + ], + "ICD": { + "library_path": "/src/vulkan-loader/tests/framework/data/binaries/libdummy_library_elf_32.so", + "api_version": "1.3.231" + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_other_arch.json b/local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_other_arch.json new file mode 100644 index 0000000000..d39b08afc7 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_other_arch.json @@ -0,0 +1,99 @@ +{ + "file_format_version": "1.2.0", + "settings_array": [ + { + "app_keys": [ + "/out/settings_fuzzer", + "/work/settings_fuzzer" + ], + "stderr_log": ["all", "info", "warn", "perf", "error", "debug", "layer", "driver", "validation"], + "log_locations": [ + { + "destinations":["/tmp"], + "filters":["all"] + } + ], + "layers": [ + { + "control": "auto", + "name": "test_auto", + "path": "test", + "treat_as_implicit_manifest": true + }, + { + "control": "on", + "name": "test_on", + "path": "test", + "treat_as_implicit_manifest": true + }, + { + "control": "off", + "name": "test_off", + "path": "test", + "treat_as_implicit_manifest": true + } + ] + }, + { + "app_keys": [ + "val1", + "val2", + "val3", + "val4" + ] + } + ], + "layers": [ + { + "name": "VK_LAYER_test_layer_1", + "type": "INSTANCE", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Test layer 1", + "library_path": "libVkLayer_khronos_validation.so", + "component_layers": ["VK_LAYER_test_layer_1", "VK_LAYER_test_layer_2"], + "disable_environment": { + "test_key": "test_value" + }, + "enable_environment": { + "test_key": "test_value" + }, + "app_keys": ["/out/settings_fuzzer"] + }, + { + "name": "VK_LAYER_test_layer_2", + "type": "GLOBAL", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Test layer 2", + "library_path": "libVkLayer_khronos_validation.so", + "component_layers": ["VK_LAYER_test_layer_1", "VK_LAYER_test_layer_2"], + "disable_environment": { + "test_key": "test_value" + }, + "enable_environment": { + "test_key": "test_value" + }, + "app_keys": ["/out/settings_fuzzer"] + }, + { + "name": "VK_LAYER_KHRONOS_validation", + "type": "GLOBAL", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Khronos validation", + "library_path": "libVkLayer_khronos_validation.so", + "disable_environment": { + "test_key": "test_value" + }, + "enable_environment": { + "test_key": "test_value" + }, + "app_keys": ["/out/settings_fuzzer"] + } + ], + "ICD": { + "library_path": "/src/vulkan-loader/tests/framework/data/binaries/libdummy_library_elf_64.so", + "api_version": "1.3.231" + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_unordered_layer_location.json b/local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_unordered_layer_location.json new file mode 100644 index 0000000000..290d32e61c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/corpus/config_with_unordered_layer_location.json @@ -0,0 +1,40 @@ +{ + "file_format_version": "1.2.0", + "settings_array": [ + { + "app_keys": [ + "/out/settings_fuzzer", + "/work/settings_fuzzer" + ], + "stderr_log": "/tmp/stderr.log", + "log_locations": [ + { + "destinations":["/tmp"], + "filters":["all"] + } + ], + "layers": [ + { + "control": "auto", + "name": "test", + "path": "test", + "treat_as_implicit_manifest": true + }, + { + "control": "unordered_layer_location", + "name": "test2", + "path": "test2", + "treat_as_implicit_manifest": true + } + ] + }, + { + "app_keys": [ + "val1", + "val2", + "val3", + "val4" + ] + } + ] +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/framework/CMakeLists.txt new file mode 100644 index 0000000000..0dcf46eb8c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/CMakeLists.txt @@ -0,0 +1,88 @@ +# ~~~ +# Copyright (c) 2021 Valve Corporation +# Copyright (c) 2021 LunarG, 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. +# ~~~ + +add_library(testing_framework_util STATIC test_util.cpp) +target_link_libraries(testing_framework_util PUBLIC loader_common_options Vulkan::Headers) + +if(UNIX OR APPLE) + target_link_libraries(testing_framework_util PUBLIC ${CMAKE_DL_LIBS}) +endif() + +if(UNIX) + target_compile_options(testing_framework_util PUBLIC -fPIC) +endif() +# Gives access to all headers in the framework folder, in the framework binary, and in the whole project (mainly for loader/generated) +target_include_directories(testing_framework_util PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}/loader/generated") + +if (UNIX) + if (LOADER_ENABLE_ADDRESS_SANITIZER) + target_compile_options(testing_framework_util PUBLIC -fsanitize=address,undefined) + target_link_options(testing_framework_util PUBLIC -fsanitize=address,undefined) + endif() + if (LOADER_ENABLE_THREAD_SANITIZER) + target_compile_options(testing_framework_util PUBLIC -fsanitize=thread) + target_link_options(testing_framework_util PUBLIC -fsanitize=thread) + target_compile_options(gtest PUBLIC -fsanitize=thread) + target_link_options(gtest PUBLIC -fsanitize=thread) + endif() +endif() + +if (MSVC) + # silence hidden class member warnings in test framework + target_compile_options(testing_framework_util PUBLIC /wd4458) + # Make sure exception handling is enabled for the test framework + target_compile_options(testing_framework_util PUBLIC /EHsc) +endif() + +function(AddSharedLibrary LIBRARY_NAME) + set(singleValueArgs DEF_FILE) + set(multiValueArgs SOURCES DEFINITIONS) + cmake_parse_arguments(PARSED_ARGS "" "${singleValueArgs}" + "${multiValueArgs}" ${ARGN} ) + + add_library(${LIBRARY_NAME} SHARED ${PARSED_ARGS_SOURCES}) + target_link_libraries(${LIBRARY_NAME} PUBLIC testing_framework_util) + target_compile_definitions(${LIBRARY_NAME} PRIVATE ${PARSED_ARGS_DEFINITIONS} VK_NO_PROTOTYPES) + # Windows requires export definitions for these libraries + if(WIN32) + target_sources(${LIBRARY_NAME} PRIVATE export_definitions/${PARSED_ARGS_DEF_FILE}.def) + endif() +endfunction() + +add_subdirectory(data) +add_subdirectory(shim) +add_subdirectory(icd) +add_subdirectory(layer) + +#configure the framework_config.h.in file - used to locate all the binaries generated so that it can be used in the tests +#setup framework_config_temp.h.in in the current binary directory +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/framework_config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/framework_config_temp.h.in") + +# setup framework_config_$ using framework_config_temp.h.in as a source +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/framework_config_$.h" INPUT "${CMAKE_CURRENT_BINARY_DIR}/framework_config_temp.h.in") + +# Add a compiler definition for the path to framework_config.h with the correct config +target_compile_definitions(testing_framework_util PUBLIC FRAMEWORK_CONFIG_HEADER="framework_config_$.h") + +add_library(testing_dependencies STATIC test_environment.cpp test_environment.h) +target_link_libraries(testing_dependencies + PUBLIC gtest Vulkan::Headers testing_framework_util shim-library) +target_include_directories(testing_dependencies PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +if (APPLE_STATIC_LOADER) + target_compile_definitions(testing_dependencies PUBLIC "APPLE_STATIC_LOADER=1") + target_link_libraries(testing_dependencies PUBLIC vulkan) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/README.md b/local/recipes/libs/vulkan-loader/source/tests/framework/README.md new file mode 100644 index 0000000000..1dc5b73a4a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/README.md @@ -0,0 +1,192 @@ +# Loader Testing Framework + +The loader testing framework is a mocking environment which fakes many of the global systems that vulkan requires to run. This allows the writing of tests against a known driver, layer, and system configuration. + +The framework consists of: +* Test ICD +* Test Layer +* Shim +* Manifest Writer +* Utility +* Test Environment +* Tests + + +## Running + +By default the Vulkan-Loader repo doesn't enable testing. + +To turn on building of the tests, set `BUILD_TESTS=ON` in the CMake configuration. + +Use the CMake configuration `UPDATE_DEPS=ON` to automatically get all required test dependencies. +Or Ensure that `googletest` is in the `external` directory. +And on Windows only, ensure that the `Detours` library is in the `external` directory. + +Linux & macOS only: The CMake Configuration `LOADER_ENABLE_ADDRESS_SANITIZER` can be used to +enable Address Sanitizer. + +Run the test executables as normal + +The executables available are: +* `test_regression` + +Alternatively, in the build directory run `ctest` to start the test framework. + +Use the `ctest` command line parameter `--output-on-failure` to printout logs in failing tests + +Note: The test framework was not designed to allow multiple tests to be run in parallel due to the extensive use of files and folders on the system. + + +## Components + +### Test ICD and Layer +The Test ICD and Test Layer have much of their configuration available at runtime to allow maximal test setup flexibility. +However exported functions in the icd or layer library binaries are an integral part of the configuration but are baked into the binary, thus not runtime configurable. +To account for that there are multiple binaries of the Test ICD and Test Layer, each being a distinct combination of exported functions. +The `test_icd.cpp` and `test_layer.cpp` files use macro defines to allow the build system to specify which functions should be exported. +```c +#if defined(TEST_ICD_EXPORT_NEW_FUNCTION) +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkNewFunction() { ... } +#endif +``` +The `CMakeLists.txt` is responsible for creating the various binaries for the Test ICD and Test Layer with the corresponding macros defined to alter which functions are exported. +Since the test framework needs to know where the binaries are located in the build tree, the `framework_config.h` file contains the absolute paths to all of the libraries that CMake has defined. +This allows C++ tests to include the header and know exactly what `.dll`/`.so` file to use. +Since the paths aren't known until build time, CMake processes the `framework_config.h.in` file which contains the names of the libraries that CMake recognizes and replaces the names with the path on the system to the library. + +To add a new configuration for a ICD or layer, the changes needed are as follows: +* Add the relevant functions & macro guards in `test_icd.cpp` or `test_layer.cpp` +* In the `framework/icd/CMakeLists.txt` or `framework/layer/CMakeLists.txt`, add a new SHARED library using the icd/layer source files. + * We are going to use `new_function` as the name of this new configuration for clarity in this documentation. +```cmake +add_library(test_icd_export_new_function SHARED ${TEST_ICD_SOURCES}) +``` +* Use `target_compile_definitions()` cmake command on the new library to add the specified exports. +```cmake +target_compile_definitions(test_icd_export_new_function PRIVATE TEST_ICD_EXPORT_NEW_FUNCTION=1) +``` +* Create a new `.def` file with the same name as the library and place it in the `icd\export_definitions` or `layer\export_definitions` folder. + * This file is needed in 32 bit windows to prevent name mangling in `.dll`. +* Add all of the exported functions in this file. + * Include all exported functions, not just the newly added functions. +``` +LIBRARY test_icd_export_new_function +EXPORTS + + + ... +``` +* Go back to the `CMakeLists.txt` and add this def file to the library by using `target_sources`, that way the compiler knows which .def file to use for each library +```cmake +if (WIN32) + target_sources(test_icd_export_new_function PRIVATE export_definitions/test_icd_new_function.def) +endif() +``` +* To make the library accessible to tests, add the name of the library to `framework/framework_config.h.in` +```c +#define TEST_ICD_PATH_NEW_FUNCTION "$" +``` + +### Shim +Because the loader makes many calls to various OS functionality, the framework intercepts certain calls and makes a few of its own calls to OS functionality to allow proper isolation of the loader from the system it is running on. +The shim is a SHARED library on windows and apple and is a STATIC library on linux. This is due to the nature of the dynamic linker and how overriding functions operates on different operating systems. +#### Linux + +On linux the dynamic linker will use functions defined in the program binary in loaded `.so`'s if the name matches, allowing easy interception of system calls. +##### Overridden functions +* opendir +* access +* fopen + +#### MacOS +Redirects the following functions: opendir, access fopen. +The dynamic linker on MacOS requires a bit of tweaking to make it use functions defined in the program binary to override system functions in `.so`'s. +##### Overridden functions +* opendir +* access +* fopen + +#### Windows +Windows requires a significantly larger number of functions to be intercepted to isolate it sufficiently enough for testing. +To facilitate that an external library `Detours` is used. +It is an open source Microsoft library and supports all of the necessary functionality needed for loader testing. +Note that the loader calls more system functions than are directly overridden with Detours. +This is due to some functions being used to query other functions, which the shim library intercepts and returns its own versions of system functions instead, such as `CreateDXGIFactory1`. + +##### Overridden functions +* GetSidSubAuthority +* EnumAdapters2 +* QueryAdapterInfo +* CM_Get_Device_ID_List_SizeW +* CM_Get_Device_ID_ListW +* CM_Locate_DevNodeW +* CM_Get_DevNode_Status +* CM_Get_Device_IDW +* CM_Get_Child +* CM_Get_DevNode_Registry_PropertyW +* CM_Get_Sibling +* GetDesc1 +* CreateDXGIFactory1 + +### Utility + +There are many utilities that the test framework and tests have access to. These include: +* Including common C and C++ headers +* `FRAMEWORK_EXPORT` - macro used for exporting shared library funtions +* Environment Variable Wrapper: `EnvVarWrapper` for creating, setting, getting, and removing environment variables in a RAII manner +* Windows API error handling helpers +* filesystem abstractions: + * `create_folder`/`delete_folder` + * `FolderManager` + * Creates a new folder with the given name at construction time. + * Allows writing manifests and files (eg, icd or layer binaries) + * Automatically destroys the folder and all contained files at destruction +* LibraryWrapper - load and unload `.dll`/`.so`'s automatically +* DispatchableHandle - helper class for managing the creation and freeing of dispatchable handles +* VulkanFunctions - Loads the vulkan-loader and queries all used functions from it + * If a test needs to use vulkan functions, they must be loaded here +* Vulkan Create Info Helpers - provide a nice interface for setting up a vulkan creat info struct. + * InstanceCreateInfo + * DeviceCreateInfo + * DeviceQueueCreateInfo +* Comparison operators for various vulkan structs + +### Test Environment + +The `test_environment.h/.cpp` contains classes which organize all the disparate parts of the framework into an easy to use entity that allows setting up and configuring the environment tests run in. + +The core components are: +* InstWrapper - helper to construct and then destroy a vulkan instance during tests +* DeviceWrapper - helper to construct and then destroy a vulkan device during tests +* PlatformShimWrapper - opens and configures the platform specific shim library + * Sets up the overrides + * Resets state (clearing out previous test state) + * Sets the `VK_LOADER_DEBUG` env var to `all`. +* TestICD|LayerHandle - corresponds to a single ICD or Layer on the system + * Loads the Test ICD/Layer library + * Allows easily 'resetting' the Test ICD/Layer +* TestICD|LayerDetails - holder of data used for constructing ICD and Layers + * Contains the name and api version of the icd or layer binary + * LayerDetails also contains the manifest, +* FrameworkEnvironment + * Owns the platform shim + * Creates folders for the various manifest search locations, including + * icd manifest + * explicit layer manifests + * implicit layer manifests + * null - necessary empty folder to make the loader find nothing when we want it to + * Sets these folders up as the redirection locations with the platform shim + * Allows adding ICD's and Layers + * Writes the json manifest file to the correct folder + +The `FrameworkEnvironment` class is used to easily create 'environments'. + +The `add_XXX()` member functions of `FrameworkEnvironment` make it easy to add drivers and layers to the environment a test runs in. + +The `get_test_icd()` and `get_test_layer()` functions allow querying references to the underlying +drivers and layers that are in the environment, allowing quick modification of their behavior. + +The `reset_test_icd()` and `reset_test_layer()` are similar to the above functions but additionally +reset the layer or driver to its initial state. +Use this if you need to reset a driver during a test. +These functions are called on the drivers and layers when the framework is being create in each test. diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/.gitignore b/local/recipes/libs/vulkan-loader/source/tests/framework/data/.gitignore new file mode 100644 index 0000000000..2bc8673bd5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/.gitignore @@ -0,0 +1 @@ +!/binaries/* \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/framework/data/CMakeLists.txt new file mode 100644 index 0000000000..2308347ee8 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/CMakeLists.txt @@ -0,0 +1,47 @@ + + +if(UNIX) + ### Copy the 64-bit ELF file into the binaries folder for later use. + ### Also, copy the 64-bit ELF-but call it a DLL so that we can use the wrong target (ELF vs. PE) on Windows + # + ### NOTE: Uncomment the following to rebuild the targets + # + #add_library(dummy_library_elf_64 SHARED stub.cpp) + #set_target_properties(dummy_library_elf_64 PROPERTIES COMPILE_OPTIONS "-m64" LINK_FLAGS "-m64") + #add_custom_command(TARGET dummy_library_elf_64 POST_BUILD + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries/dummy_library_elf_64.dll) + + ### Copy the 32-bit ELF file into the binaries folder for later use. + ### Also, copy the 32-bit ELF-but call it a DLL so that we can use the wrong target (ELF vs. PE) on Windows + # + ### NOTE: Uncomment the following to rebuild the targets + # + #add_library(dummy_library_elf_32 SHARED stub.cpp) + #set_target_properties(dummy_library_elf_32 PROPERTIES COMPILE_OPTIONS "-m32" LINK_FLAGS "-m32") + #add_custom_command(TARGET dummy_library_elf_32 POST_BUILD + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries/dummy_library_elf_32.dll) +endif() + +if(WIN32) + ### Copy the 64-bit PE file into the binaries folder for later use. + ### Also, copy the 64-bit PE-but call it a SO so that we can use the wrong target (ELF vs. PE) on Linux + # + ### NOTE: Uncomment the following to rebuild the targets + # + # add_library(dummy_library_pe_64 SHARED stub.cpp) + # add_custom_command(TARGET dummy_library_pe_64 POST_BUILD + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries/dummy_library_pe_64.so) + + ### Copy the 32-bit PE file into the binaries folder for later use. + ### Also, copy the 32-bit PE-but call it a SO so that we can use the wrong target (ELF vs. PE) on Linux + # + ### NOTE: Uncomment the following to rebuild the targets + # + # add_library(dummy_library_pe_32 SHARED stub.cpp) + # add_custom_command(TARGET dummy_library_pe_32 POST_BUILD + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries + # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_SOURCE_DIR}/binaries/dummy_library_pe_32.so) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/VkLayer_complex_file.json b/local/recipes/libs/vulkan-loader/source/tests/framework/data/VkLayer_complex_file.json new file mode 100644 index 0000000000..dde37e3a99 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/VkLayer_complex_file.json @@ -0,0 +1,741 @@ +{ + "file_format_version": "1.2.0", + "layer": { + "test_code_description": "This file is literally a copy of an installed Validation layer manifest file for linux. It was chosen because it contains a lot of complex json structures that aren't present in the test framework's generated json, so exercises cJSON better", + "name": "VK_LAYER_KHRONOS_validation", + "type": "GLOBAL", + "library_path": "libVkLayer_khronos_validation.so", + "api_version": "1.3.231", + "implementation_version": "1", + "description": "Khronos Validation Layer", + "introduction": "The main, comprehensive Khronos validation layer.\n\nVulkan is an Explicit API, enabling direct control over how GPUs actually work. By design, minimal error checking is done inside a Vulkan driver. Applications have full control and responsibility for correct operation. Any errors in how Vulkan is used can result in a crash. \n\nThe Khronos Valiation Layer can be enabled to assist development by enabling developers to verify their applications correctly use the Vulkan API.", + "platforms": [ + "WINDOWS", + "LINUX", + "ANDROID", + "MACOS" + ], + "url": "https://vulkan.lunarg.com/doc/sdk/latest/windows/khronos_validation_layer.html", + "instance_extensions": [ + { + "name": "VK_EXT_debug_report", + "spec_version": "9" + }, + { + "name": "VK_EXT_debug_utils", + "spec_version": "1" + }, + { + "name": "VK_EXT_validation_features", + "spec_version": "2" + } + ], + "device_extensions": [ + { + "name": "VK_EXT_debug_marker", + "spec_version": "4", + "entrypoints": [ + "vkDebugMarkerSetObjectTagEXT", + "vkDebugMarkerSetObjectNameEXT", + "vkCmdDebugMarkerBeginEXT", + "vkCmdDebugMarkerEndEXT", + "vkCmdDebugMarkerInsertEXT" + ] + }, + { + "name": "VK_EXT_validation_cache", + "spec_version": "1", + "entrypoints": [ + "vkCreateValidationCacheEXT", + "vkDestroyValidationCacheEXT", + "vkGetValidationCacheDataEXT", + "vkMergeValidationCachesEXT" + ] + }, + { + "name": "VK_EXT_tooling_info", + "spec_version": "1", + "entrypoints": [ + "vkGetPhysicalDeviceToolPropertiesEXT" + ] + } + ], + "features": { + "presets": [ + { + "label": "Standard", + "description": "Good default validation setup that balance validation coverage and performance.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT" + ] + } + ] + }, + { + "label": "Reduced-Overhead", + "description": "Disables some checks in the interest of better performance.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS" + ], + "status": "STABLE", + "editor_state": "01110111111111111111111001111111111110", + "settings": [ + { + "key": "enables", + "value": [] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION", + "VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE", + "VALIDATION_CHECK_DISABLE_OBJECT_IN_USE", + "VALIDATION_CHECK_DISABLE_QUERY_VALIDATION" + ] + } + ] + }, + { + "label": "Best Practices", + "description": "Provides warnings on valid API usage that is potential API misuse.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + } + ] + }, + { + "label": "Synchronization", + "description": "Identify resource access conflicts due to missing or incorrect synchronization operations between actions reading or writing the same regions of memory.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + } + ] + }, + { + "label": "GPU-Assisted", + "description": "Check for API usage errors at shader execution time.", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + } + ] + }, + { + "label": "Debug Printf", + "description": "Debug shader code by \"printing\" any values of interest to the debug callback or stdout.", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "status": "STABLE", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + }, + { + "key": "disables", + "value": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT" + ] + }, + { + "key": "enable_message_limit", + "value": false + } + ] + } + ], + "settings": [ + { + "key": "debug_action", + "label": "Debug Action", + "description": "Specifies what action is to be taken when a layer reports information", + "type": "FLAGS", + "flags": [ + { + "key": "VK_DBG_LAYER_ACTION_LOG_MSG", + "label": "Log Message", + "description": "Log a txt message to stdout or to a log filename.", + "settings": [ + { + "key": "log_filename", + "label": "Log Filename", + "description": "Specifies the output filename", + "type": "SAVE_FILE", + "default": "stdout", + "dependence": { + "mode": "ALL", + "settings": [ + { + "key": "debug_action", + "value": [ + "VK_DBG_LAYER_ACTION_LOG_MSG" + ] + } + ] + } + } + ] + }, + { + "key": "VK_DBG_LAYER_ACTION_CALLBACK", + "label": "Callback", + "description": "Call user defined callback function(s) that have been registered via the VK_EXT_debug_report extension. Since application must register callback, this is a NOOP for the settings file.", + "view": "HIDDEN" + }, + { + "key": "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT", + "label": "Debug Output", + "description": "Log a txt message using the Windows OutputDebugString function.", + "platforms": [ + "WINDOWS" + ] + }, + { + "key": "VK_DBG_LAYER_ACTION_BREAK", + "label": "Break", + "description": "Trigger a breakpoint if a debugger is in use." + } + ], + "default": [ + "VK_DBG_LAYER_ACTION_LOG_MSG" + ] + }, + { + "key": "report_flags", + "label": "Message Severity", + "description": "Comma-delineated list of options specifying the types of messages to be reported", + "type": "FLAGS", + "flags": [ + { + "key": "info", + "label": "Info", + "description": "Report informational messages." + }, + { + "key": "warn", + "label": "Warning", + "description": "Report warnings from using the API in a manner which may lead to undefined behavior or to warn the user of common trouble spots. A warning does NOT necessarily signify illegal application behavior." + }, + { + "key": "perf", + "label": "Performance", + "description": "Report usage of the API that may cause suboptimal performance." + }, + { + "key": "error", + "label": "Error", + "description": "Report errors in API usage." + }, + { + "key": "debug", + "label": "Debug", + "description": "For layer development. Report messages for debugging layer behavior.", + "view": "HIDDEN" + } + ], + "default": [ + "error" + ] + }, + { + "key": "enable_message_limit", + "label": "Limit Duplicated Messages", + "description": "Enable limiting of duplicate messages.", + "type": "BOOL", + "default": true, + "settings": [ + { + "key": "duplicate_message_limit", + "env": "VK_LAYER_DUPLICATE_MESSAGE_LIMIT", + "label": "Max Duplicated Messages", + "description": "Maximum number of times any single validation message should be reported.", + "type": "INT", + "default": 10, + "range": { + "min": 1 + }, + "dependence": { + "mode": "ALL", + "settings": [ + { + "key": "enable_message_limit", + "value": true + } + ] + } + } + ] + }, + { + "key": "message_id_filter", + "label": "Mute Message VUIDs", + "description": "List of VUIDs and VUID identifers which are to be IGNORED by the validation layer", + "type": "LIST", + "env": "VK_LAYER_MESSAGE_ID_FILTER", + "default": [] + }, + { + "key": "disables", + "label": "Disables", + "description": "Specify areas of validation to be disabled", + "type": "FLAGS", + "env": "VK_LAYER_DISABLES", + "flags": [ + { + "key": "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", + "label": "Thread Safety", + "description": "Thread checks. In order to not degrade performance, it might be best to run your program with thread-checking disabled most of the time, enabling it occasionally for a quick sanity check or when debugging difficult application behaviors." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", + "label": "Stateless Parameter", + "description": "Stateless parameter checks. This may not always be necessary late in a development cycle." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", + "label": "Object Lifetime", + "description": "Object tracking checks. This may not always be necessary late in a development cycle." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT", + "label": "Core", + "description": "The main, heavy-duty validation checks. This may be valuable early in the development cycle to reduce validation output while correcting parameter/object usage errors." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", + "label": "Handle Wrapping", + "description": "Handle wrapping checks. Disable this feature if you are exerience crashes when creating new extensions or developing new Vulkan objects/structures." + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT", + "label": "Shader Validation", + "description": "Shader checks. These checks can be CPU intensive during application start up, especially if Shader Validation Caching is also disabled.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE", + "label": "Command Buffer State", + "description": "Check that all Vulkan objects used by a command buffer have not been destroyed. These checks can be CPU intensive for some applications.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION", + "label": "Image Layout", + "description": "Check that the layout of each image subresource is correct whenever it is used by a command buffer. These checks are very CPU intensive for some applications.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_QUERY_VALIDATION", + "label": "Query", + "description": "Checks for commands that use VkQueryPool objects.", + "view": "ADVANCED" + }, + { + "key": "VALIDATION_CHECK_DISABLE_OBJECT_IN_USE", + "label": "Object in Use", + "description": "Check that Vulkan objects are not in use by a command buffer when they are destroyed.", + "view": "ADVANCED" + }, + { + "key": "VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT", + "label": "Shader Validation Caching", + "description": "Disable caching of shader validation results.", + "view": "ADVANCED" + } + ], + "default": [ + "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT" + ] + }, + { + "key": "enables", + "label": "Enables", + "description": "Setting an option here will enable specialized areas of validation", + "type": "FLAGS", + "env": "VK_LAYER_ENABLES", + "flags": [ + { + "key": "VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT", + "label": "Synchronization", + "description": "This feature reports resource access conflicts due to missing or incorrect synchronization operations between actions (Draw, Copy, Dispatch, Blit) reading or writing the same regions of memory.", + "url": "${LUNARG_SDK}/synchronization_usage.html", + "status": "STABLE", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_SYNCHRONIZATION_VALIDATION_QUEUE_SUBMIT", + "label": "QueueSubmit Synchronization Validation", + "description": "Enable synchronization validation between submitted command buffers when Synchronization Validation is enabled.", + "status": "ALPHA" + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT", + "label": "Debug Printf", + "description": "Enables processing of debug printf instructions in shaders and sending debug strings to the debug callback.", + "url": "${LUNARG_SDK}/debug_printf.html", + "status": "STABLE", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "settings": [ + { + "key": "printf_to_stdout", + "label": "Redirect Printf messages to stdout", + "description": "Enable redirection of Debug Printf messages from the debug callback to stdout", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + } + ] + } + }, + { + "key": "printf_verbose", + "label": "Printf verbose", + "description": "Set the verbosity of debug printf messages", + "type": "BOOL", + "default": false, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + } + ] + } + }, + { + "key": "printf_buffer_size", + "label": "Printf buffer size", + "description": "Set the size in bytes of the buffer used by debug printf", + "type": "INT", + "default": 1024, + "range": { + "min": 128, + "max": 1048576 + }, + "unit": "bytes", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" + ] + } + ] + } + } + ] + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", + "label": "GPU-Assisted", + "description": "Check for API usage errors at shader execution time.", + "url": "${LUNARG_SDK}/gpu_validation.html", + "platforms": [ + "WINDOWS", + "LINUX" + ], + "settings": [ + { + "key": "gpuav_descriptor_indexing", + "label": "Check descriptor indexing accesses", + "description": "Enable descriptor indexing access checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "gpuav_buffer_oob", + "label": "Check Out of Bounds ", + "description": "Enable buffer out of bounds checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "validate_draw_indirect", + "label": "Check Draw Indirect Count Buffers and firstInstance values", + "description": "Enable draw indirect checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "validate_dispatch_indirect", + "label": "Check Dispatch Indirect group count values", + "description": "Enable dispatch indirect checking", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + }, + { + "key": "vma_linear_output", + "label": "Use VMA linear memory allocations for GPU-AV output buffers", + "description": "Use linear allocation algorithm", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX" + ], + "dependence": { + "mode": "ANY", + "settings": [ + { + "key": "enables", + "value": [ + "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT" + ] + } + ] + } + } + ] + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", + "label": "Reserve Descriptor Set Binding Slot", + "description": "Specifies that the validation layers reserve a descriptor set binding slot for their own use. The layer reports a value for VkPhysicalDeviceLimits::maxBoundDescriptorSets that is one less than the value reported by the device. If the device supports the binding of only one descriptor set, the validation layer does not perform GPU-assisted validation.", + "platforms": [ + "WINDOWS", + "LINUX" + ] + }, + { + "key": "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT", + "label": "Best Practices", + "description": "Activating this feature enables the output of warnings related to common misuse of the API, but which are not explicitly prohibited by the specification.", + "url": "${LUNARG_SDK}/best_practices.html", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_ARM", + "label": "ARM-specific best practices", + "description": "Activating this feature enables the output of warnings related to ARM-specific misuse of the API, but which are not explicitly prohibited by the specification.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_AMD", + "label": "AMD-specific best practices", + "description": "Adds check for spec-conforming but non-ideal code on AMD GPUs.", + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS" + ] + }, + { + "key": "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_NVIDIA", + "label": "NVIDIA-specific best practices", + "description": "Activating this feature enables the output of warnings related to NVIDIA-specific misuse of the API, but which are not explicitly prohibited by the specification.", + "platforms": [ + "WINDOWS", + "LINUX", + "ANDROID" + ] + } + ], + "default": [] + }, + { + "key": "fine_grained_locking", + "env": "VK_LAYER_FINE_GRAINED_LOCKING", + "label": "Fine Grained Locking", + "description": "Enable fine grained locking for Core Validation, which should improve performance in multithreaded applications. This setting allows the optimization to be disabled for debugging.", + "status": "STABLE", + "type": "BOOL", + "default": true, + "platforms": [ + "WINDOWS", + "LINUX", + "MACOS", + "ANDROID" + ] + } + ] + } + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_elf_32.dll b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_elf_32.dll new file mode 100755 index 0000000000000000000000000000000000000000..7c370bae5cd5fdb86ae053c6a27686fbdf183972 GIT binary patch literal 16160 zcmeHOeQX>@6`#GcQ>RXB=L5)B@iv$$A@!Z@G-=Wha<*e9L3ZLeju4b+vv;@lU2`91 zZ|&MqP@7ndTC9LU6jcJDq9Ty^lmLk!{vk0%K|%)UyztEbyA452A1qJmmqgAk8FF6>p7$Al?Xif!Uy z$R)J0Eku9=S5ZYfX@_K)d=3@l>Y&|(;`2)=l7sE9$Aq~4F~yIfZ3}n>F!YD6#60Zt zu#;tnzMVeE1JE@$K__cl-wiJa$cE>FzH)!o_gHasnInvQ-wZ&Rv zJ2_m=Ey=*&IY@oJrN-<^TE8K!>bj^wc^30eIp@py1Gr8Ql(#A2Y=IIJahnnov??LQ z1HqvA{z4H(AdEm5fiMDL1i}b}5eOp?Mj(tp7=i!y2)tGQ!CNOL=4xg;ai-^|---({ zIk8YKm!JEE7b*X4;+Hi~P6uO9{xRQj%dhaAi&TDP6^Id+Bq0nY(m>$Gz9QhbAw)t@>Ga@`W1{bL)?@yM|v+U-BLiQ`47z@(6HZ_M14I zzxpKF19c+kV`8pq`?VLQugo@HxfL<~`1=KK{p6Q!)8%X4gE*zW6A`Rsf z1Es$=J^{nz`le|(o@HRFzl;A)Or4sZtZHKL7GwNZxH~`n1sMM;u7HIUMj(tp7=bVX zVFbbmgb@fM5Jn)3Kp25A0$~LHXAv+qNB5cVj-NagqOPX9Zq>)@YrU#5abVNFkF+&yr9A<@0pIc+ zyS=XFxk$(A>Yi8OMg6{e8ur&==YJML3L_9kAdEm5fiMDL1i}b}5eOp?Mj(tp7=bVX z_Zxx48hj^?mrs5p%ujz$f+^F!Eco&qWF7b-n7?ZCXynE^f2-el~wTjkyX?jNXRV-OneVq=`2 z23Kl#8f}i;#b%?PT&dlA**K1-yNre7I0xqZBFrH5--%w-p~)g~dqlM`q|xAHZ^A_( zDTs{x2vvr`i$dsn<7>iLV|=)7U2U{+bK@Fg?TQ9m1d*6HurXTqMD4!Xy|slpRwp)` z<<)l>T#ZrS>jAhjZq==(;I#lop-~R=8R!v|>mza;qcm67iRuWuHLB~cMXy7WvWYcM< zfV#dTok9**#52Xb6Gx9{#^Y&cG=3)I77N8vJTsDv=ZZG=HN-otbaE)}IVG`&7X{M#cMOX?;RfL}hmMjSx|>VM&oX@2@3_%IqH0ne~?_DzidRe~9LyXGXUF5On5y67{{%_52fmjJi)-A)gB9 zCiIKT^cR=uBISCxuLlQXDY3L2%JTA7iW{Oz*f*6fT0^;F(#~0FujrO6dt^+ciuvK3 z<2mVAOJxK%No6hDb!}{NDtPX=kV(i=`OC5bngyiyF6d&Sv8?X?_TDb5>*zu5*|Ns= z?2ZjNo;94Zyv#`9Ow1lbEpoTjb=ZdP87PHd=+kau9Ytn?lD$IK&|) zdr6i`B8Dp~j|)Z(N}fr~_ON6oN3bTLsgoQTf>XONw4`PWgY>FQ$)xLyYAu&7IJ%5D z=_0GK70~r>oO=+=d|W*u;NX5r-BhhaLOzwegJ)6VxQ>yTW%aWuab!Nz@>!TTu5aW% zlxagzN~Vnjm~Dxhfq~5DXidbD_*BGaV&b?SlDT^6epydG3Fb32%UmbPCd$Enp~`mx zu7<>2#(~T+Yk$OZ^~{5b>i~0IC9|G5u1*>!AHbl?6`3anZi3K69O*M)o)d9ghsh?& zn%Ib@yC zKfhJg3Ww*5d3*q@V+PaW`2G;Ui3F6E%D6wnr01RMSp#soPnhJ`DgWk|VU|Q3hp36? zNd5;{J+0w7O5i>KZU%Ll7JUOuye6|%2vaMN+E%{|mjG^m1>ELkxX%LDTmiRz8SXp4 z^;E#^@^Sin-vN$usR?E|#>6t*588zIsRsENjg{A^Z_8k}@DwJy5&AALEasbLEN`-llN&OY`XX#&#`{D literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_elf_64.dll b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_elf_64.dll new file mode 100755 index 0000000000000000000000000000000000000000..8114f42a59de50360effdd74f403779e9f50ef6e GIT binary patch literal 17392 zcmeHPZ)_Y#6`#F}6Q@qjPMen0A$VJ*Qi8d=*l7|sk(=}1Tq-9GZX&fv(Pr;5dsn_<#=!A zz4hMuE=`f(1KN>p-@HG+H?wbN=Z|;B&rVEDCNxcON{UAXa=9KQ$&upHA<6*Bi6OBO zt`7)Z+OAtwt;t;^B~w9uv5XG1CO%3xQvn7j$lZ-yax0+Vwr|<>p^!VtqiUV zH`6B*ia$e?amXTWnQ+U5V=CC5Xs2=`>xlInB6*bVBs->Pi|NEWz9sXzWP|(S`}{bG znKJIvfWvy;Y2vU?Q+e&;60J8q7I}YLp|B+UjvPNFc6{;M-~7r?mcRSKFJF3c+|_<| z<<;LzV_ndmf5_iyngqiKTNq=#^%in0qm}$qZREl*W-C?KsQISn8-_5Bo;+q)wr9^e zHQ)A59vdrHUHhb2DBDWcT4NL!Ok>7z&9Zae7G_@f|Lf{M@Pqu!OUQ0AKorEGYz8o4DkH?>b=fJ)V_>H zkhooQJ6s{dtJH2;eu?DQB68-J4=aDzrZBdgu7~7YC)BNk9Dz6jaRlNB#1V)i5Jw=6KpcVpMg;!W{fU3&FTB^8|3b&xSt0VDd)-eo zuI4ZNyz{awuCebAAZ|SLC%AU^0G=A$jD6e=oTD66V3x z#>R4Y-x3;MCJOf7k@ovuL9+W+{)LtN8-G5Wf8$0nuf3W7^(}uZI5X}S!d#t)ckyNLiQoFfNUG=g#MtKbqu>bnIK>f&BM?U*jzAoNI0A75;t0eM zh$9e3AdbLCiU9BPjPC2?y_KiP8}n9#cO(2W#HWZpPjnMe-hjH9`7J7QKk>W|bvyCA z*6Ssn_oL$a5EJYFeydSM{tRs{m3zd2zd=0jab6<+E;NSpeMLkU(QQP7y{I`QAedl1 zuW#kr6ihxwxP^5p!}6=-i0k*pnb_a0hN}N1vWG9t@_sn(und;`w@81J_@JKT z?|(&tee96}_tXC1BV%I+^ zM?&F-kBscp_L>8$X9>t>D;sW4_ubBh+E^#k+mvR(0mOZof@gT-VK1 z7Vbw^Z4f=e-&zRE?Mwa~}Iwncj=bx&8a zZ+qVs?d}ad(AX0harpjZ>R{KQu1C7u6pC}(&f{A=1-}k>o*C&<`yjO$Jj;_J@Ms~^ zCvW3f&?X??osjjKN8^r^*qGqrwT|w`5=j6UpV=q(y3gZz0e!5$e_-Ganv|Zd?0*<8 ze%-Z)XKmN^oFcHMS1b)L4DC;&a#l~nw)~J@#jX@9b0C{{YEHo^JO1Ku$+0Zk1=)$CV?tI~WJ}eGorN;bE@mxzK6|$0 zRo!YWTdEhb<*Es%2C}1uRhZ5CcFnJ4XFRiFpR0OjvzF5WV1^sigyhCt5*DPNzxPNSxZxGziHp@E&_s7k0 z=zZz^X_nt5^p^6jpf75+hf$5*&t^G{ZhBav@=1{rdP{kCaQ-5UN0l)xX_+eO;ED5=%N{BB_<1?@61r?e?c2*PxL{ z+uN@|o)Bx>|65YN_Wimh{j6=DZ%g^sHSO(v>8ESWIQLJokG5Mp@An|+qG=b%^{5c| z@iy`&+Q>!G^Py**naLEz>Txf_uNXx<@Ku9zVOG_cEmsR>*|7YoS2N7|f+$uib7kAN zt<0X*7I+BEF-*@h;SiVWdy7I21BMzw3?sxDVCgrR23@^jOiqs+n=mGhkK>s%14c?? zB2U8n_%xPXs~RQKweVaTmMNq=VT?a@eB>AmS%v{;*VsWYZjJ4Sint9u+IaRlbF+k_pWfK9En=AVwgAo=P-(G;L3{u7}(IY5XfMHHq zs%N1rIgdj(y3Tl2Sq-z|6rt!UID|_^mQtwILBFR>P=`?+pmw1? z3r#ygOrA~OZQ&LqH=aK#qepo)4qev#kWB(XVXp4#Idyo&W^?AO1g6q$Q z5=H;(fbvKZppTeH?c9JeiqJIoJ8YWnS7_6D+H~btSL<5aov!)m=~HJ#QCAG_`?~7h zN9M)cwSy1OJqzh;2OpT5#l!7$QxImq_wZabhkJNlDZ-T~pTfgy=E>nhJYD5!bQ7*q zDYsi0t58g4f2qxM#LD_v%7tesrk%%@Bd1Kx-9H_n7VZX~*7A4?W0QDtEM)!2Ag1A$ z!pao964j#$JRA)ulWo|>n4Ka$jD0m)kCLOm1B`8fAP%o(%s84kKBD!Gk}4N&1#Yx{ zy5D@iYl9z!2W{|(F6!$k?d#Cn`Cg~P56=7+3EuY{gjH~HzcMsEUj}1$q@myrIPiv1 z1987H^m4vO2Anbl1zX{!!mWdg`;`&Cyu8My)r?J{KJ0)ae4F6neq{vb^?4hS$9dO- z2npn7xVT>#hjX>G1MqR`BY4W;w!{G;TE^HFi8=qdsr~djUN@7m$Bkf25NNtK?1)0OYo*%4lhU`J!*JoQC<_3c4^=Zo(u00DE9H2 z&xiLn%DaXT6cWh!XTvj5OgRl+gbJn-NZO_F?1c0U^6Ch|ZbIL34!rM@clLSk{)n+6 z)At&Y_Ji5*LbKqVpn?c>fu@?{uV=s;It$(a6|AG=wwdsD5mJutTSRF(6>OLR?=M8q z%LM!pRPwl=Vm~DB8A{etjN?0t$gQK~TUqex35$V}1?2q~abx%rc;`@SFB9gcsfLmY z8Yr)XVwnWI^&)sbN{6?X+PIKVJw`OI&ViRgAb+I1Em`n>O0jQZbREB!7*Ru5UQxlj zm1?|S2+vNa{z`e1sBR^3@`wSRp@1t0gdF0#?rcJVG-Y6`J9^l7&z~PdkOB>a0!H-CIR}IPr9?d z!L;uFOPSWWjg|^~V2@N?w_=;>4yMhw4i~;)4_k+v+o`CTNnb|OAO~~=dxXh_J;%=h z3DQN#-C})buk~F;uXTh#1D2bJwf@P?lcnpxo8B}^6S-2)$JCF$;65Q`pjKLml=K7g zhT*x@jUYy~ifN?-7{}mCu*aV=FkgC(S2_@U6_s>ur2|mx20%S1L&@mDDh3)DXgC=G zMoJG%(>!T?$1eR42tfGr;Oe`Beh4w^iuRKuv-!05m_j#u`|5;fyA0{NWTvOJCBnwpiaq zl5%D7rf~7z1SU#K@_Na;8lEf;z>QXqiNf}7rIY~(5=Apq91NAF@U$wbQ)o9@aZHAj zq{iV$71z$pBa;HL-+M61?LxrH5^dT_B&p>Tv`nOPvQmY-gm$fQ?WPQ5B$Vv~6=*a%!Uim&bx>4^(?b|0)6UK5z#v-bP8x z*u*ZeR?TN=%-bQ`h-e#$4f+vz);)6zz@NapK`1)S)v;RCK6FD!lS)Zi@v57Y*m0?`QO(fgO6VtpsRbW`Teu}6J&O$drC*_w!p{A_2-DnyR}$Qp!y*-kF9(@&=)zS72?NWMqy9L zdIJ0p+fGzQGSyp2n@)skM?~vLp>;T9g$&A&S!f;Maph<{Y#T%c6|XQ-SUVW2GXyw@ zE?hfO_##OWsZTc_gPzJR3oV4p-zocz>6v3A|;Ki=^=y@hy?hh@Bf7iu~#me zh#-^)2D8v-D2!-30X0djEDhCS&<*nOJFI!C64TdkxI&v1vJHu~$hczCn!eeowxN(s z5^IN`A_G%EU7%;StR!ZeIY zRwjy4f6hWr;`kRB)CM|LOi&i|4AkMJnQs&k(n;`wdo*~WSQ)LsE`KN(cvvpWd?tmFP@J7Lz_(c53<;eY$r3(=mI9s|> zPE%u(rRRnsksXQ{yT-8;^j5M%KjLr|}Pdy$(q5OPY!>5s>I7Wt_Y>Z8NYdq%a!e zaAO?HmLkZM?e}TK{XcPRXJXr^+&F)-HBY7mfgPQgyhCyPNvIn&>Q9HSfI*oi&7oG) z<$e}$g67J-ef?rS3!o;+?i=pAhy^_fnau+Yn0PT2!`d0)V}2x5djdMiWiS*##TZ6mg)}dIW5PiO%<0*o#z3J7Bc&Q9yg7bK-VEw_4vl{{H|iS`W;z z9tm0Zi?;nxwfIYidrUh5ym zQ2v2R`M&L+W)p({(nEuMu%-;0gMFgB+niFkk56p3OidgfG=8AGG&G=sYV0J{w3Ea{ z2c0IXdKz$X8IZ*t8sLf3%|)aMd_1VPkxF6(3v`}{2p7Y)s+3M%6jgLV1p|r}DdLUH zxsicO2QGmc*ySShT^?>Ll$fDg+vSYN2$z4`70`=V=bZYmBQ zW<)Y;V6p&V8VG#p(&kj@Hn|P=erzq9SvYtIquwqx=Md-Aq2Oj1(4p`q^6$Qh{QK!J zC-j7${AWAhH{EvkeLM)?!Grr-co1~+;2|du{_6$=_uU@63qdb$L%|f-VJSo5+mIEm zRfg`qhay&`xO5~G-hy~D_F&=KtyR+RF66}YTDRh)xvbavAPoZ1ipBG>NM;uL6Bt$q zaVI{v+9F$QCs8$2J0y1qYSGLhne~7T+lFA>W+N6|YK60*btf^}r-B<_|NmUuCKOBJ zr1LpaTwj(pm!o^uZo70+$GaD{b%U^LK$uv2EO1oepQ3rnDnX&R%yBNun#h1TjeQrC z##SNVkKeAy<3mLZu=8${ipr*v6Bsp5sk%NIHIk~h(KeELMJb=@hr3Lp=8-`*{IbT( zqFgeVHu|Tnr*$Oj8Jr@sHP20>%$pP&d*t{cM8!~bzu9jg~*}V!O zN4ow3Xc*QpENv=rsS@*nRLQf3Lt5!+#JJ)5oN{yzdM0%My}fCVVs-$3CbB8&e$F;R z>U%B9uQ9FfycObtV8lOFd?jkx{5r5#*>#f2yl*#LAGhy}wORLb^-a9K_UoswPi3d6 z5BfOsDy0wKmDL}UWeN-~d;H$r{T(fxDPm_ORpFWjClTW%Gb+DI5=2Z@fuH6xSvnJ_ zu-v{~x>9a^9NJjFM_)C|@L&dno^(UbqN}pX?Jc=MU zV0nxL=Et5uRVijtg7(32Cl{b(w1;E3DF%Glk6^~$uCu1=GaEe zwxRWy(}!cr`59Ll-oLo>E?NmNIfD<_31gYK4GY3Ve2GzYYW-cK^=I(<6{Gdf%(pmv z6YwvN!0SdEDB=wa;0RJC@N@AsuKmEE8r&oPVo6PGTJ;A`sO2imK77snRA{)ov(eL#RSH{idNCNb9<$Tk107&u)JvD)CK?Rb z)QRheyU(J_3zhXEc6?jng{f3o>uh%)$waG~4Y#um^OwPk;uyq~Nltkn`*yCGrGODJ_@jxgO*+6uxwwbnGpepqRFN_K=Sk zHJ$%mB&vh_ye%WB^1#mcDB_=AWv`3~D(TnYAJ~A7XJ(^_p9xmkpC*OjG_ z52Z3*9uS7AP83KWSr7%q63rrx1y2i zX68QrH=JQ+E`?!ZVbEM(jvXc{P}rMKDGuLH+1QYz{cNZO1A-6pJLT=^<{p2J$f>BV zi|B(o2-YsWz{|9odo;mIpd)mC6L^+WC#ZrL%F~gFiqmA9IS4SK+pR=)I5>#Pprnr| ziDsRE4Q>xF`Kw(jeUrM91*@c>I`RZ{Uala%;@;4TrXx>Ky>O7%hzRPK;d1;tXn?xz zo{HT^IM|P?mY?sT8qG22QI3>@BUsTUg`Xg(xJrlKk3@cPI97?%Ilj`f1QmILBqH8V zeHMQy6Y3s9O-vO;VBHvLuLbsG)2=~*ZG2S4ANw6@#Y~n@9<={J2qr$5h#ZVxdrHBSO}ww%*i7RjstO9#%yDXz#0_jMU5Q*+mDakqSf^!J|;@bQs2 zU-5waX`XKc7)Ri*ENB)n@#oM&Px1o*(<(y_^=x~?~EM|8WeZ8ovAPqCfC=Bcs$ zJAX6qF6NJ3>kv&ourlR<8-n-J(CUkRvzErV1y}!uQ=2~{v0St+qp3Y`;f~ z{HElTMxWt0pJQT0T7SrP7#r>12VeEK<3ucXXkkQS>6xTp{%X;7xa%!ScYSojq!i}A zLaaU9b(Cj(+(8-nqZRCvQW>Vc_zK9Fo=_o`3F+H*f`7y|3Zq?5jrI_I1`BG^hj{v6 z{}?MkB(ejYeUophq#jKM%TDPLud}|CMV*>ln{@|GR0)e zqB2e4G97C@eTeS2v`n*E4Ja8Lh+^Q%3Bj34v-x)biX&hM1OSg_^9u+-zTyB*D?_yh z#M=EhybK(j6zFH6THFrq33T>M(gc41ut4V?rU~AKnA|R=YbK_1-P?ytO^R??9y|*D z84C34{A*-Dn4P15x^aNHjHMp1kSCaNUMkie=z6OkH3COj$krXI-PP6EO=;o0K<6$d z%#d-ySdMkNjCZ=Q2X8;PwK@6l=NsCwA@?s8V*Jb3jM2S4(v<Rn?maYCC)1!Ars<`zikjee(F`mFEK-5t z6~c^W)fiN23`!8(^ePxj+I?$5&j6kRalFFHv6?Y^C2AT-&%}WI#S_ui2HlovOK9?r zSS=w1XFFWkzW4e+M%lPLvN5#BzLq1TjIVmxY5v zh>0)T>1Ce#06^TJcT?1``xQXG1iW*B7yE;r=-_NVB=ZZ#Au9KBUxjM0D@pv~FA+J0 z2v$aSJ;WJ#f*Oh9d`(V?_Y(=?5bQVkUD#{Uc7h)WcLkoM>Iy*=!_>kDyA{HwgU7{# zfsax&H~WBUncPy7Nxw9#T&f8+Ag?K~;bgsk>eKa5x2BLvd{Nx};eo*L*_xXdp)|Z` zx`ixY%`JsUZR>;9hc?@Y+->{i_%Ou}$ng=1AClt?o6l{B<+zgKN94GQ;{9@5P4Q!L zT#II5 z(OUOrXb%_%(B>(2$tH6JB^U&92{1P+?NZ@riACl!sUm7o0NgmFIAMp8RwtdrBt<)% z9wCEI#dMm0!;O0m%Dkmi51E#?L^D1YYrzj}eglIQh5M?>aPEa>;*TzH)U%>F8!AeN zC3TU^JSYIBw?@0ABbX)l^rhK62L+(8|Aup zuBF}K==`JEya6yc8KQ{=b6wbafQMu$XGO>RuL65?gpH1M#7?|);})%aQ_IB3VxIW2 z42kpcUs)F2S)kAa7eaFYi_(tlFdm<}`_L|)3B*AX$}A4n&-dblszVpXW4r2zaN<9BWGcbgAuZVqrlh9_u1_+jBbJVT6R>Y*m!u@M29 z1Y`n-qP-}Kr%vqbCxphtJV~4(dgmtOS&u{?-HHOO9$ULGUqvqP-Lw0hRJq+cEa{QV zQZxy@ zHD~Ykrj?nW^L`+f@5Z@%MlJwICWJ7g5GRAT9UWo3^~2^2L<@(;VSf|ULT?~+cKlVu z<(2ARVu$~^rjJjojQIukEs3``(u{Zb9+|(HQDMXfjy4IGVH)l-^1HGNa3`n`W=bwt zZa7H~sU!!*YPGoU+DEYo?rly-2-+vbtS61c{e*nm>Yk!xJ(0{=vbO3FOuQKeQodfy z!ju(vUp@J0%m=v9+1~dpC|mj-@-utLKW`WLMcw3EcEWGEEwi5o>4$i5-VPq5J;sCF zM|m*sK?L{Ro^}|4Xl2{?^H90{0K%|UwfzXCgGX?%(3_TpI9*q7qr&ZnFtPQf^}(ke z^``AdjC8Cw?Qk>}-EXqqn~xxe=;ph#HGNFXRNVnGYtn~D_iO1&%Be^jcJE&c`)>38 zFMc&Ad8i~cFv~3G{LN0}ulye1pUd52;O=MTDHJNi*($TE_LpA(yEs2||NH#t|3rS! zTk~~z;YH7^d#y0_VGDGsr>&cU!}Gv#MaZVcOY6XMiclu$;;7c)I`>Xe#n>Yf`KhLY z&jq-ORQob$soI{VeVqxv%BEn)@p5E4k0OKf*B&bN>YQhq#}? zO9y#e#eF6B%eb%RzLxtL+|S~EHuq`9i{xIz{TlAuxnIHkrQ9#)J{k9s+*0lvxv%Gb z9{1;RpLT7L+*#bG`Erzp(AR|LP+vfL{Ckm_fQ8N=6`lCQE7kFt3dXuRRXbA{E}ap1 zf+DjZ%qvkF$oV$q;2HEt zF13b?+bJUz-1*nIH5gToWF*OfBnOflNOB;_fg}f#97u8?$$=yXk{n2KAjyFw2a+5} za^OFm12`8;{*oL>av;fpBnOflNOB;_fzQi(t4iLXmHwR>Ioy0pjdakO}Dbi@-dN~6Qu zF0?sy4WI)!Vt8H7SgVZn;g3=dH#2P>{v4|Y?k>1KINTxfABFKwrZbAy?{bO^2`zrY zM<7I2TrH=ovBlv9LLyw(-bR9zfg0P}*16g^YF-vsDW)okl^r^#r>V*1MWqRl%umNV z&(Ho_1XQy2IY#x5R83YwH^~QzNDN8PL@;7mlg>|{F((<4X7jE%TIT9DwhKBRgw*2H zwK{xj0Oiv8+68YT=Q*W#lf2WEa&!>yp{#zFZk5MRb%1_JyI1Gh;Arh=ah2$F=~JgP zx*ZriI*V?$M|ZI5L_3^Fvg z7IO3WHc38U2?6jCBeXIj{4t&}{$EsKju;`c# zFh2Zqu+@lt(y*23n1{L(QL+SBJZM1xEkxx-EEnzS*gUvgw2}CW^?iw_#nt9$bx~<7 z&(`h~Fjp>*W;5_-Udy`o1 z8igqbloQ(45~U?Ra6r>N(7RS>-8{CQw=xgog+_@BIpnWKt`B3%i}5fISn}bMqt;K4 z*NOiQK*nCk3dTWJxmI7@;cEMeYom3;3J`>JrQq^ztaD(Eld~vqG0X@TfJRBKW>>Q% z=-&#q2z|AJBP&4bdR7c>P&>c+Q8I1h1S-M4K1EkUWa#MLx-!OuwZ_Nb5)e{Uq(ode)umz zlD{Me&d7nB>8GsIXM|1`COPo$%YnO-W8vRdxSz3S^w+Rdr7s%B(v!}W=gV07z$xV~ z&KR3d?~IF21m8H5X>W(4c4Fn-aro9<#I*Or#h2q7DV#2X|9K(P9)zRvkt44Oa&D1Gu~3*1_EX_b0f| z`r8CrZ-6U@Gs4Y<)4`n!$Kc+35dZ%vTnFM0AlwAk1XlyM1g->bHe43m&*47L&-uVu z?Mc9O-&V*WF7GzbFo?XqZDVk^f!_>y6aA8M{NIsdE^BD;`JD}Px82}rYie(BV$<$z zryaV_&sa9f8wD?2ZZ^0!G`i#q^7AIjZNSYb|KEC-GTfE;T&P{dqLmtO9q7azx*kBS zt+-;J4-D%Xz5a$PU4HqFhi-r9nr8*Od|cU5UV8;jv7@!C2+NpUwGJEUc7KdjFtSNO_>_LUAx&r)N3Uut|)MdVM*D7K4YM0ke_jnM`<7u^RvTi!9 zG4)0hL?&CCR_*eiw)izpncv~{3mwZaa8|Go@JIX8?p@+?_@OPacD_c?vZBY7nK_kJ z4v!DFL9t=Q{*r3LlLgNe8~v`D_7xtd3)kpgmNF?8t!W=EXHLRcfky)Tl9;ijspw<} zzfxosJif&1f{r~!a8a@dg0WZA>O7#@(ZU79*pC$i8D$`QJO&@VUBo#Y_h>IXRzq91z&(F)zx!UkH3y-xdIkh!Q z<{5KzK0i!0M+=M^OU_1@FK6L`^r@u|+!?j5!s9$3X!BWe1aDi3uhH$o)3SN39(vi= z-sGPL3$euEYn{I?KL-!h+B{7#NbBNT11g=a)bAC1ep+}xCAPvGUJo^Wu&TUxY8Fi+ z$Lm@vpcR+X?)9vLfw9`<8!e14wsM0E-L7!0bG7JN$hYJ;e9PL_wXbn`b991dQ6t$i zmYgO>i_ev_p!D)l+=-P(@y9`oYrXXH1X@ckAMG@%mtG#@=YsKaO6DXv@E^eeto(PN zqYC|WeU83Je~*4pKcqjQAJ$)7G^fZ?)L9fR`e{*j(Qk_0EE+7jq1aRGE&ibRuf^$x z97DdrWT-cM%}{JK8*Rol#&xFIC5DpPl7l60m7FY@Wu9j)G}o9{nj6jEG~Z+1WB!f# zZS(u)C8d?6*OxYxK2rLV(t*<9(hSR&EP6|g#c5eZpO4bvECj*Uyx--S^Y6|7WqyBt zM!|Unxdmkf%L*zBRunv3@S}of3yu_+^>zA3^uO0%Qgn6E&Z3u!?l0a~{918~;YEYr zc%#v3T4nN>ZZri=519V1=^4`trpYDhk`GE!%^I`GTxMQgdR^)2(tAtaE`6``x0XLz z(iSXSuyjGqf`$dI1#1>`ED#o)T#&Xk7YC7%uEC{F44M{a5rp{ayOiMSk!x2u|)S-c@We zTwz#hs5E@lu->rAu*L9a!$*b`W0o<;ILFvx6pWqV;{&D_O|P4dn%+09ED4r;x8z!L zoB0;=_sx%(pE2(??>E0@eiOV@l&VW-me!QsP`aVC3%vZWG}WT9eA#k|rO>j_QejzV zxoW|;7Cg3KJ<(o3^bsTHmAZ)xWHN zU4KM>40>}y&x)oLO)JVMI=^UkQAtrn(e*{Ei+)!$Q1stL9~S+sD7AP>v9@?d@%hEM z#dC`bi%W{HD88z=s(5Abs$w_v>Zam5i@#I+M`)MAFxil9IL9#4pfg-zm~SXDlo}Qr zt};{^t~IPOv>LpI4ThTyI}I-w-UIh4jVp{Rjg3Z+u^s&Tnz74xi!p5cw((x$4~-8Q ze`I{z_>}Qk82T`^Gp|+E;U_lDl(Z( zi%eIVY^G|{S4|BjmuZb@t!cff(-bfbo505#xQen_#@WWX#yq3ms4}TdT2qE8%al#! z9XMA+us{Dmeno-3;F^NI0#>57tY3K3!c7bBgFfwA*h4be!5F>2V|hwwR`QqR Jz(1b@{{v`R<{1D0 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_32.so b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_32.so new file mode 100644 index 0000000000000000000000000000000000000000..65d031dbcb21f8f4d872e941d0dc359a26f6a7ac GIT binary patch literal 36352 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 Jz(1b@{{v`R<{1D0 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_64.dll b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_64.dll new file mode 100644 index 0000000000000000000000000000000000000000..dcbe023e17981ed5f5428759b615eb653b95978b GIT binary patch literal 49664 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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_64.so b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/dummy_library_pe_64.so new file mode 100644 index 0000000000000000000000000000000000000000..dcbe023e17981ed5f5428759b615eb653b95978b GIT binary patch literal 49664 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 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/libdummy_library_elf_32.so b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/libdummy_library_elf_32.so new file mode 100755 index 0000000000000000000000000000000000000000..7c370bae5cd5fdb86ae053c6a27686fbdf183972 GIT binary patch literal 16160 zcmeHOeQX>@6`#GcQ>RXB=L5)B@iv$$A@!Z@G-=Wha<*e9L3ZLeju4b+vv;@lU2`91 zZ|&MqP@7ndTC9LU6jcJDq9Ty^lmLk!{vk0%K|%)UyztEbyA452A1qJmmqgAk8FF6>p7$Al?Xif!Uy z$R)J0Eku9=S5ZYfX@_K)d=3@l>Y&|(;`2)=l7sE9$Aq~4F~yIfZ3}n>F!YD6#60Zt zu#;tnzMVeE1JE@$K__cl-wiJa$cE>FzH)!o_gHasnInvQ-wZ&Rv zJ2_m=Ey=*&IY@oJrN-<^TE8K!>bj^wc^30eIp@py1Gr8Ql(#A2Y=IIJahnnov??LQ z1HqvA{z4H(AdEm5fiMDL1i}b}5eOp?Mj(tp7=i!y2)tGQ!CNOL=4xg;ai-^|---({ zIk8YKm!JEE7b*X4;+Hi~P6uO9{xRQj%dhaAi&TDP6^Id+Bq0nY(m>$Gz9QhbAw)t@>Ga@`W1{bL)?@yM|v+U-BLiQ`47z@(6HZ_M14I zzxpKF19c+kV`8pq`?VLQugo@HxfL<~`1=KK{p6Q!)8%X4gE*zW6A`Rsf z1Es$=J^{nz`le|(o@HRFzl;A)Or4sZtZHKL7GwNZxH~`n1sMM;u7HIUMj(tp7=bVX zVFbbmgb@fM5Jn)3Kp25A0$~LHXAv+qNB5cVj-NagqOPX9Zq>)@YrU#5abVNFkF+&yr9A<@0pIc+ zyS=XFxk$(A>Yi8OMg6{e8ur&==YJML3L_9kAdEm5fiMDL1i}b}5eOp?Mj(tp7=bVX z_Zxx48hj^?mrs5p%ujz$f+^F!Eco&qWF7b-n7?ZCXynE^f2-el~wTjkyX?jNXRV-OneVq=`2 z23Kl#8f}i;#b%?PT&dlA**K1-yNre7I0xqZBFrH5--%w-p~)g~dqlM`q|xAHZ^A_( zDTs{x2vvr`i$dsn<7>iLV|=)7U2U{+bK@Fg?TQ9m1d*6HurXTqMD4!Xy|slpRwp)` z<<)l>T#ZrS>jAhjZq==(;I#lop-~R=8R!v|>mza;qcm67iRuWuHLB~cMXy7WvWYcM< zfV#dTok9**#52Xb6Gx9{#^Y&cG=3)I77N8vJTsDv=ZZG=HN-otbaE)}IVG`&7X{M#cMOX?;RfL}hmMjSx|>VM&oX@2@3_%IqH0ne~?_DzidRe~9LyXGXUF5On5y67{{%_52fmjJi)-A)gB9 zCiIKT^cR=uBISCxuLlQXDY3L2%JTA7iW{Oz*f*6fT0^;F(#~0FujrO6dt^+ciuvK3 z<2mVAOJxK%No6hDb!}{NDtPX=kV(i=`OC5bngyiyF6d&Sv8?X?_TDb5>*zu5*|Ns= z?2ZjNo;94Zyv#`9Ow1lbEpoTjb=ZdP87PHd=+kau9Ytn?lD$IK&|) zdr6i`B8Dp~j|)Z(N}fr~_ON6oN3bTLsgoQTf>XONw4`PWgY>FQ$)xLyYAu&7IJ%5D z=_0GK70~r>oO=+=d|W*u;NX5r-BhhaLOzwegJ)6VxQ>yTW%aWuab!Nz@>!TTu5aW% zlxagzN~Vnjm~Dxhfq~5DXidbD_*BGaV&b?SlDT^6epydG3Fb32%UmbPCd$Enp~`mx zu7<>2#(~T+Yk$OZ^~{5b>i~0IC9|G5u1*>!AHbl?6`3anZi3K69O*M)o)d9ghsh?& zn%Ib@yC zKfhJg3Ww*5d3*q@V+PaW`2G;Ui3F6E%D6wnr01RMSp#soPnhJ`DgWk|VU|Q3hp36? zNd5;{J+0w7O5i>KZU%Ll7JUOuye6|%2vaMN+E%{|mjG^m1>ELkxX%LDTmiRz8SXp4 z^;E#^@^Sin-vN$usR?E|#>6t*588zIsRsENjg{A^Z_8k}@DwJy5&AALEasbLEN`-llN&OY`XX#&#`{D literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/libdummy_library_elf_64.so b/local/recipes/libs/vulkan-loader/source/tests/framework/data/binaries/libdummy_library_elf_64.so new file mode 100755 index 0000000000000000000000000000000000000000..8114f42a59de50360effdd74f403779e9f50ef6e GIT binary patch literal 17392 zcmeHPZ)_Y#6`#F}6Q@qjPMen0A$VJ*Qi8d=*l7|sk(=}1Tq-9GZX&fv(Pr;5dsn_<#=!A zz4hMuE=`f(1KN>p-@HG+H?wbN=Z|;B&rVEDCNxcON{UAXa=9KQ$&upHA<6*Bi6OBO zt`7)Z+OAtwt;t;^B~w9uv5XG1CO%3xQvn7j$lZ-yax0+Vwr|<>p^!VtqiUV zH`6B*ia$e?amXTWnQ+U5V=CC5Xs2=`>xlInB6*bVBs->Pi|NEWz9sXzWP|(S`}{bG znKJIvfWvy;Y2vU?Q+e&;60J8q7I}YLp|B+UjvPNFc6{;M-~7r?mcRSKFJF3c+|_<| z<<;LzV_ndmf5_iyngqiKTNq=#^%in0qm}$qZREl*W-C?KsQISn8-_5Bo;+q)wr9^e zHQ)A59vdrHUHhb2DBDWcT4NL!Ok>7z&9Zae7G_@f|Lf{M@Pqu!OUQ0AKorEGYz8o4DkH?>b=fJ)V_>H zkhooQJ6s{dtJH2;eu?DQB68-J4=aDzrZBdgu7~7YC)BNk9Dz6jaRlNB#1V)i5Jw=6KpcVpMg;!W{fU3&FTB^8|3b&xSt0VDd)-eo zuI4ZNyz{awuCebAAZ|SLC%AU^0G=A$jD6e=oTD66V3x z#>R4Y-x3;MCJOf7k@ovuL9+W+{)LtN8-G5Wf8$0nuf3W7^(}uZI5X}S!d#t)ckyNLiQoFfNUG=g#MtKbqu>bnIK>f&BM?U*jzAoNI0A75;t0eM zh$9e3AdbLCiU9BPjPC2?y_KiP8}n9#cO(2W#HWZpPjnMe-hjH9`7J7QKk>W|bvyCA z*6Ssn_oL$a5EJYFeydSM{tRs{m3zd2zd=0jab6<+E;NSpeMLkU(QQP7y{I`QAedl1 zuW#kr6ihxwxP^5p!}6=-i0k*pnb_a0hN}N1vWG9t@_sn(und;`w@81J_@JKT z?|(&tee96}_tXC1BV%I+^ zM?&F-kBscp_L>8$X9>t>D;sW4_ubBh+E^#k+mvR(0mOZof@gT-VK1 z7Vbw^Z4f=e-&zRE?Mwa~}Iwncj=bx&8a zZ+qVs?d}ad(AX0harpjZ>R{KQu1C7u6pC}(&f{A=1-}k>o*C&<`yjO$Jj;_J@Ms~^ zCvW3f&?X??osjjKN8^r^*qGqrwT|w`5=j6UpV=q(y3gZz0e!5$e_-Ganv|Zd?0*<8 ze%-Z)XKmN^oFcHMS1b)L4DC;&a#l~nw)~J@#jX@9b0C{{YEHo^JO1Ku$+0Zk1=)$CV?tI~WJ}eGorN;bE@mxzK6|$0 zRo!YWTdEhb<*Es%2C}1uRhZ5CcFnJ4XFRiFpR0OjvzF5WV1^sigyhCt5*DPNzxPNSxZxGziHp@E&_s7k0 z=zZz^X_nt5^p^6jpf75+hf$5*&t^G{ZhBav@=1{rdP{kCaQ-5UN0l)xX_+eO;ED5=%N{BB_<1?@61r?e?c2*PxL{ z+uN@|o)Bx>|65YN_Wimh{j6=DZ%g^sHSO(v>8ESWIQLJokG5Mp@An|+qG=b%^{5c| z@iy`&+Q>!G^Py**naLEz>Txf_uNXx<@Ku9zVOG_cEmsR>*|7YoS2N7|f+$uib7kAN zt<0X*7I+BEF-*@h;SiVWdy7I21BMzw3?sxDVCgrR23@^jOiqs+n=mGhkK>s%14c?? zB2U8n_%xPXs~RQKweVaTmMNq=VT?a@eB>AmS%v{;*VsWYZjJ4Sint9u+IaRlbF+k_pWfK9En=AVwgAo=P-(G;L3{u7}(IY5XfMHHq zs%N1rIgdj(y3Tl2Sq-z|6rt!UID|_^mQtwILBFR>P=`?+pmw1? z3r#ygOrA~OZQ&LqH=aK#qepo)4qev#kWB(XVXp4#Idyo&W^?AO1g6q$Q z5=H;(fbvKZppTeH?c9Jeiq(LDb4iPYe4oWb@#Udt8?Z|~cI_>+-UzUohb@1&qTSSyf9`V>%_-gldM;6t$hRo`8?46Y3(g+vC=plcb_!zmgI#Bg&S+FUBZ*$B7ET@B7^gy^E?3S_@_ xv>J4>r3_izmMVNKe~6>Wx`20}&|1n>s$?bN9=U*8R|q zz9+iFS9gU?iMp7`O=rkVW_h{?lvY7YRz42*FxZ3-7-bh8vyi`l=q($;G4)}RsPXUD z&nsNWq33LRfoJV2b5+K3E`_9mLbZe{S?+Y1P)YV8xL=OFqOgT6&=eibHwKaC>MY<> z`S9Cyd#)P`=}908{^XYUfr5#*#m_5eOUOH9@d_L}Q?Jwu@!9ZP&}Wj=NRkN_&uw_x zIXO%*Pw$krwM}Tl#m~h&m346g?#Ao2jzHhJ-MTd3)>bHuLEeROT%4^B^Dx)GUMHAb zGb2n~QC+R~iQ16LU2Z_`!Bm1Nnm{s3W`oYL04{HcuNGbfn}!tXri$h7gX(`&;0P~z zROmQ6b%d`4y!F$h`qpFSG<6oeKaSTJ(7>*)Og}YY-G4$8Q}?wrcqx{o^IojjHtVlrbtSGJvJO~IEB5W zXn)6ttv06Qxw5Ay{h&o>u+hNf4mQiM+;;?xF2!%#Db068eTi!=g$!)du`TGW(YwZ8 zf6;dfFvQ>^{X299nKj|AZDAu0mYo4N;$aVso=z>% literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_create_fuzzer-6541440380895232 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-instance_create_fuzzer-6541440380895232 new file mode 100644 index 0000000000000000000000000000000000000000..e748a3c9c24c9fdc879e1d4fe4ef65abd0122044 GIT binary patch literal 1608 zcmcIk&yUhT6fQ>_uU_TlUG}nc>8ck`qSh=xm_ugMzv;Mn5@A`!0ltw30LE&9Mvr=S-uLo~$dNvVql~5^o z3b^F;|DAuX->Yx#aPaD)4pn(JO?0E`116bDMb-+1G~7^!JDt|fX)@MaubATI-q!7X zr=pnXL|Hf2jVMf;rlR58JHlg{$}}nXm?kOYGSRurC=*$)Lp0*s7wcz4v0zKSKq!6R zTm`MUSh?Z;ZO?#w8J5uA9fz%XduV`}L>SSO`93JljzZza3e>_elEl$dKc+$$lgPUl zjBCwT)bY@v3o(Fu80{mI#ou1kzGCxM5Cru+&KihDc3=(n_VrN_>$2(Qqz1-D-jAxw zdK9(7FapOTN7CTwV%A_+xz~07OU;{Vw~8f}I4uBP_OD*{`rDseGOLRXyFYijQKw;{ zuL+eFOnx_9PDs}aIU(YvmSfm?Lh&BdrQ5sL#XePZ;;8e3e(`P%G_qYe+>ji=EeU8! zX;(RL;(+(m-jsbrl=sd0@o5jh_iGime}-QQ+;U}7~At;H`3h|F1sR4{4hrUE_ zMX!B{qVLid*nNbOGA&axq$SEyEV>i|#EB@H;y3fn56StsZ;{Ks_Q#%cJqssp?A&@` zr=JNfzP zn@9URf9{+NUmuU0*o$H(dDK~c2W?9)`^vir-Ei&%Zv37;#Ky3=OYi%UdqIZmO>g~h zHl6(cO|QJ@GV}x5j?UH@fyhcAvQX2pZy-v1SpCTdB&Vx5R6U071 zx%hx~;o4Q@+#!)D93P3mUQ9SZeu|S01m|Ybu_=)(q^GA6tatl|5LCH2z8Cq)& zq1%cCA!jvDf&gJq^Zj?X+v^>6+r7b2|KRYjf7CvLn9At`4Zy&klg3jpex|3-F7lsW&MKO}aZGK}dfU>B6{wOia*X z_?Dwfc>uANG(@s~AX?7eK9kI|tLU{y6@hA0nu!(?uR%1so!^y7wl6_!AI2Xf@?Y+? zQIeuZg4VM11{c9Ab8cg1s?;nM2o+_Mwn*FO+r| zZo0OC)KWY75qN}JNYH`tf*Rrl8OKRG$7w6xau2SzX~8ol+aWl3gPe{$vj-Mr4P|IY z85(&y{0XndCbgS3pHJwXs>8@cSQ*KL^3|Q%6nWmc1*0}TX!nrW-Mm6j+%~(s)}OtlTrn+tdv~QGz0LW@YZ7`Jr%48>eYZZa;n!n zga`nStH+C)%5Am*&r&Y7Tf#D;XvG2A_MZ{aq~`LH!XOA(fgFE*M0NSI#S|Mp?WNoE}IC?=Jbo ik~h?6x^~CW(h0Kn?`ZJ5w?{Hzdo=zc*8}Upc>fn%?05|T literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6465902356791296 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6465902356791296 new file mode 100644 index 0000000000..0590401dec --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6465902356791296 @@ -0,0 +1,2 @@ +{"file_format_version" :{"layers":2e170141183460469231731687303715884105986}, "settings_array": [ +{"laã…¤yers":18446744073709551615e-1} ] } \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6583684169269248 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6583684169269248 new file mode 100644 index 0000000000000000000000000000000000000000..474b8d3f98dbebb533df34147d3c9160990d02d2 GIT binary patch literal 7793 zcmeHM-D=w~6z&+i$?aaiXt%8^#qv*f*TL9D1A{RNV+5f#%4*`+#&!Z}$P?^|_H>z~ zIF2nhaXsUb4C^Y1t&?-4?;L&S)2gTO0Vb};$RvnnG$9KX#ctq(j~YNaTD@fGA2x5m z<<^u(m)roK{j;~~fn*snVM&ueYkh=m>=+id($~emivc|MenF!p32E{uCh+ff)1k0M zrjJqJ2QgVt&mGf*`=-Z%I{zVUS|VVJ*gxeGIHox8S@aqeD{&P(%CwiJ%b&)n5H1BDmYdEZvEbFBk8OAyaUvi z;nz<$o2Fx^nx~;#OaMbieOrCYorN9~aFA%sPbm32X7NMhh61$$9k*L7YYXa*Jvm#o z&4C{^Nrd)5+Z;^q^I4MvgiNCLz?7xFgRx~}3~dKOY$9g>2kP<{@Kps5s2jQ{X(k>Z z2dkzIqlDL>EH7m22T`)Cc zk~^)P(#;EA!P7zvt)8AcD3`ER3(8RMNL#*67dEpaZU0Kzst#3AK|9WsF{Nh+{6$-% zYo9c=NS|l>bnF0_i#|lQPgR)+bzCnKOSI?z;Lxj3IJs)i<<(TWO*hT4oQ8F(rcPHnDHM#H376?^xlRz>&2%~` znAi|ugd77~5L*MTK-&hg9NU1L=a`Oz5#0ZfZ~n5|x3mWGJH5gUSej%9>gndKAceak W4wRJOjK~LqwXEeaGwQAXtp5TZKr$dD3=EH$y>yKMK}ie7 literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-4552015310880768 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-4552015310880768 new file mode 100644 index 0000000000..f20d4ba7f7 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-4552015310880768 @@ -0,0 +1 @@ +[18446744073709551616e-39065906811251e \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5208693600747520 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5208693600747520 new file mode 100644 index 0000000000..5167c9f19a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5208693600747520 @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[{}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5347670374612992 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5347670374612992 new file mode 100644 index 0000000000..810c539bc7 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5347670374612992 @@ -0,0 +1 @@ +[3] \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5392928643547136 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5392928643547136 new file mode 100644 index 0000000000..e2cb11d64a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5392928643547136 @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["\u"\\DB1E\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[uD0f[[[B[[[[[[[[[[[[[[[[2[[[[[[[[[[[[[ \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5636386303049728 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5636386303049728 new file mode 100644 index 0000000000..3c77fe4be6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-5636386303049728 @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["\udf" [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6182254813249536 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6182254813249536 new file mode 100644 index 0000000000..08cf6bdf0a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6182254813249536 @@ -0,0 +1,2 @@ +{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}ý}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":9223372036854775808,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":9223372036854775808,"{":{"f":1,"{":{"f":1,"{":{"f":0,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":2147483649,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":214748364,"{":{"f":1,"{":{"f":1,"{":{"f":-54,"{":{"f":1,"{{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":2147483649,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{{":{"f":2,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f":1,"{":{"f{ +"4":2147483649,"{"0,"":4,4,":{"f":"f":1,"{":{"f \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6265355951996928 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6265355951996928 new file mode 100644 index 0000000000000000000000000000000000000000..91aea359d6bab3a2e1dde8a1ae4c8148ecd0c616 GIT binary patch literal 10341 zcmeI!!3{t#6b4{3aB?*P^OTze1BjIv!F0q9Bwq9Vho-0Y{a<=$Nb!@l&*)PYl&gWYfI47XM^=$%*7?}V80t5(TCNKyA0t5&I5U2voXhZ^; aeUkoI$0H*^fB=Df1j>A>XhMKM41pW)A-<0Q literal 0 HcmV?d00001 diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6363106126659584 b/local/recipes/libs/vulkan-loader/source/tests/framework/data/fuzz_test_minimized_test_cases/clusterfuzz-testcase-minimized-json_load_fuzzer-6363106126659584 new file mode 100644 index 0000000000000000000000000000000000000000..253b08499a7a8c0e384328b2af061e3bac65b635 GIT binary patch literal 577 zcma#9uGJYuWQKrJOsSC|gK|u%Ap--DZP>sFB9$2!fZ_}cNg(n6KoL`Qu zQ) + */ + +#pragma once +#define FRAMEWORK_BUILD_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + +#define FRAMEWORK_VULKAN_LIBRARY_PATH "$" + +#define SHIM_LIBRARY_NAME "$" + +#define TEST_ICD_BUILD_LOCATION "$" + +// TestICD Binaries +#define TEST_ICD_PATH_EXPORT_NONE "$" +#define TEST_ICD_PATH_EXPORT_ICD_GIPA "$" +#define TEST_ICD_PATH_EXPORT_NEGOTIATE_INTERFACE_VERSION "$" + +#define TEST_ICD_PATH_VERSION_2 "$" + +#define TEST_JSON_NAME_VERSION_2_UNICODE "\xf0\x9f\x8c\x8b" +#define TEST_ICD_PATH_VERSION_2_UNICODE "$" + +// assumes version 2 exports +#define TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA "$" + +// Assumes version 2 exports +#define TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES \ + "$" + +// All possible defines for v6 +#define TEST_ICD_PATH_VERSION_6 "$" + +// Version 7 +#define TEST_ICD_PATH_VERSION_7 "$" +#define TEST_ICD_PATH_VERSION_7_WIHTOUT_EXPORTS "$" + +// TestLayer binaries +#define TEST_LAYER_PATH_EXPORT_BASE "$" +#define TEST_LAYER_PATH_EXPORT_VERSION_0 "$" +#define TEST_LAYER_PATH_EXPORT_VERSION_1 "$" +#define TEST_LAYER_PATH_EXPORT_VERSION_2 "$" +#define TEST_LAYER_WRAP_OBJECTS "$" +#define TEST_LAYER_WRAP_OBJECTS_1 "$" +#define TEST_LAYER_WRAP_OBJECTS_2 "$" +#define TEST_LAYER_WRAP_OBJECTS_3 "$" + +#define COMPLEX_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/data/VkLayer_complex_file.json" +#define FUZZER_OUTPUT_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/data/fuzzer_output.json" + +#define CLUSTERFUZZ_TESTCASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/fuzz_test_minimized_test_cases" + +// Dummy Binaries +#if _WIN32 || _WIN64 +#define DUMMY_BINARY_WINDOWS_64 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/dummy_library_pe_64.dll" +#define DUMMY_BINARY_WINDOWS_32 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/dummy_library_pe_32.dll" +#define BAD_DUMMY_BINARY_WINDOWS_64 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/dummy_library_elf_64.dll" +#define BAD_DUMMY_BINARY_WINDOWS_32 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/dummy_library_elf_32.dll" +#endif +#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +#define DUMMY_BINARY_LINUX_64 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/libdummy_library_elf_64.so" +#define DUMMY_BINARY_LINUX_32 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/libdummy_library_elf_32.so" +#define BAD_DUMMY_BINARY_LINUX_64 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/dummy_library_pe_64.so" +#define BAD_DUMMY_BINARY_LINUX_32 "${CMAKE_CURRENT_SOURCE_DIR}/data/binaries/dummy_library_pe_32.so" +#endif + +// Convenience macro so that tests don't need to write a bunch of platform defines +#if _WIN32 || _WIN64 +#if _WIN64 +#define CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE DUMMY_BINARY_WINDOWS_32 +#define CURRENT_PLATFORM_DUMMY_BINARY_BAD BAD_DUMMY_BINARY_WINDOWS_64 +#else +#define CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE DUMMY_BINARY_WINDOWS_64 +#define CURRENT_PLATFORM_DUMMY_BINARY_BAD BAD_DUMMY_BINARY_WINDOWS_32 +#endif +#endif +#if defined(__linux__) || defined(__GNU__) +#if __x86_64__ || __ppc64__ || __aarch64__ +#define CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE DUMMY_BINARY_LINUX_32 +#define CURRENT_PLATFORM_DUMMY_BINARY_BAD BAD_DUMMY_BINARY_LINUX_64 +#else +#define CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE DUMMY_BINARY_LINUX_64 +#define CURRENT_PLATFORM_DUMMY_BINARY_BAD BAD_DUMMY_BINARY_LINUX_32 +#endif +#endif +// Apple doesn't have 32 bit but this should allow tests to run as if it was supported +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__QNX__) +#define CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE DUMMY_BINARY_LINUX_32 +#define CURRENT_PLATFORM_DUMMY_BINARY_BAD BAD_DUMMY_BINARY_LINUX_64 +#endif diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/CMakeLists.txt new file mode 100644 index 0000000000..0463f02940 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/CMakeLists.txt @@ -0,0 +1,52 @@ +# ~~~ +# Copyright (c) 2021 Valve Corporation +# Copyright (c) 2021 LunarG, 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. +# ~~~ + + +set(TEST_ICD_VERSION_2_DEFINES TEST_ICD_EXPORT_NEGOTIATE_INTERFACE_VERSION=1 TEST_ICD_EXPORT_ICD_GIPA=1) + +AddSharedLibrary(test_icd_export_none DEF_FILE test_icd_0 + SOURCES test_icd.cpp + DEFINITIONS "") +AddSharedLibrary(test_icd_export_icd_gipa DEF_FILE test_icd_gipa + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_ICD_GIPA=1) +AddSharedLibrary(test_icd_export_negotiate_interface_version DEF_FILE test_icd_negotiate_version + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_NEGOTIATE_INTERFACE_VERSION=1) +AddSharedLibrary(test_icd_version_2 DEF_FILE test_icd_2 + SOURCES test_icd.cpp + DEFINITIONS ${TEST_ICD_VERSION_2_DEFINES}) +AddSharedLibrary(test_icd_version_2_export_icd_enumerate_adapter_physical_devices DEF_FILE test_icd_2_enum_adapter + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES=1 ${TEST_ICD_VERSION_2_DEFINES}) +AddSharedLibrary(test_icd_version_2_export_icd_gpdpa DEF_FILE test_icd_2_gpdpa + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_ICD_GPDPA=1 ${TEST_ICD_VERSION_2_DEFINES}) +AddSharedLibrary(test_icd_version_6 DEF_FILE test_icd_6 + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_ICD_GPDPA=1 TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES=1 ${TEST_ICD_VERSION_2_DEFINES}) +AddSharedLibrary(test_icd_version_7 DEF_FILE test_icd_7 + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_ICD_GPDPA=1 TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES=1 TEST_ICD_EXPORT_VERSION_7=1 ${TEST_ICD_VERSION_2_DEFINES}) +AddSharedLibrary(test_icd_version_7_without_exports DEF_FILE test_icd_7_without_exports + SOURCES test_icd.cpp + DEFINITIONS TEST_ICD_EXPORT_VERSION_7=0 TEST_ICD_EXPORT_ICD_GPDPA=1 + TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES=1 ${TEST_ICD_VERSION_2_DEFINES}) +AddSharedLibrary(test_unicode DEF_FILE 🌋 + SOURCES test_icd.cpp + DEFINITIONS ${TEST_ICD_VERSION_2_DEFINES}) +set_target_properties(test_unicode PROPERTIES OUTPUT_NAME "🌋") # Test unicode library diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_0.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_0.def new file mode 100644 index 0000000000..8cca9bcae3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_0.def @@ -0,0 +1,5 @@ +LIBRARY test_icd_export_none +EXPORTS + vkGetInstanceProcAddr + vkCreateInstance + vkEnumerateInstanceExtensionProperties diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2.def new file mode 100644 index 0000000000..d500177009 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2.def @@ -0,0 +1,4 @@ +LIBRARY test_icd_version_2 +EXPORTS + vk_icdGetInstanceProcAddr + vk_icdNegotiateLoaderICDInterfaceVersion diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_enum_adapter.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_enum_adapter.def new file mode 100644 index 0000000000..309701e496 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_enum_adapter.def @@ -0,0 +1,5 @@ +LIBRARY test_icd_version_2_export_icd_enumerate_adapter_physical_devices +EXPORTS + vk_icdGetInstanceProcAddr + vk_icdNegotiateLoaderICDInterfaceVersion + vk_icdEnumerateAdapterPhysicalDevices diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_gpdpa.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_gpdpa.def new file mode 100644 index 0000000000..a402393d7f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_2_gpdpa.def @@ -0,0 +1,5 @@ +LIBRARY test_icd_version_2_export_icd_gpdpa +EXPORTS + vk_icdGetInstanceProcAddr + vk_icdNegotiateLoaderICDInterfaceVersion + vk_icdGetPhysicalDeviceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_6.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_6.def new file mode 100644 index 0000000000..2a28a2c892 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_6.def @@ -0,0 +1,6 @@ +LIBRARY test_icd_version_6 +EXPORTS + vk_icdGetInstanceProcAddr + vk_icdNegotiateLoaderICDInterfaceVersion + vk_icdEnumerateAdapterPhysicalDevices + vk_icdGetPhysicalDeviceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7.def new file mode 100644 index 0000000000..8cafb29614 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7.def @@ -0,0 +1,6 @@ +LIBRARY test_icd_version_7 +EXPORTS + vk_icdGetInstanceProcAddr + vk_icdNegotiateLoaderICDInterfaceVersion + vk_icdEnumerateAdapterPhysicalDevices + vk_icdGetPhysicalDeviceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7_without_exports.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7_without_exports.def new file mode 100644 index 0000000000..a6b541912e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_7_without_exports.def @@ -0,0 +1,3 @@ +LIBRARY test_icd_version_7_without_exports +EXPORTS + vk_icdGetInstanceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_gipa.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_gipa.def new file mode 100644 index 0000000000..ea954e1292 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_gipa.def @@ -0,0 +1,3 @@ +LIBRARY test_icd_export_icd_gipa +EXPORTS + vk_icdGetInstanceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_negotiate_version.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_negotiate_version.def new file mode 100644 index 0000000000..d924afab85 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/test_icd_negotiate_version.def @@ -0,0 +1,6 @@ +LIBRARY test_icd_export_negotiate_interface_version +EXPORTS + vkGetInstanceProcAddr + vkCreateInstance + vkEnumerateInstanceExtensionProperties + vk_icdNegotiateLoaderICDInterfaceVersion diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/🌋.def b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/🌋.def new file mode 100644 index 0000000000..1567087dfc --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/export_definitions/🌋.def @@ -0,0 +1,4 @@ +LIBRARY 🌋 +EXPORTS + vk_icdGetInstanceProcAddr + vk_icdNegotiateLoaderICDInterfaceVersion diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.cpp new file mode 100644 index 0000000000..0421846226 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.cpp @@ -0,0 +1,1851 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_icd.h" + +// export vk_icdGetInstanceProcAddr +#if !defined(TEST_ICD_EXPORT_ICD_GIPA) +#define TEST_ICD_EXPORT_ICD_GIPA 0 +#endif + +// export vk_icdNegotiateLoaderICDInterfaceVersion +#if !defined(TEST_ICD_EXPORT_NEGOTIATE_INTERFACE_VERSION) +#define TEST_ICD_EXPORT_NEGOTIATE_INTERFACE_VERSION 0 +#endif + +// export vk_icdGetPhysicalDeviceProcAddr +#if !defined(TEST_ICD_EXPORT_ICD_GPDPA) +#define TEST_ICD_EXPORT_ICD_GPDPA 0 +#endif + +// export vk_icdEnumerateAdapterPhysicalDevices +#if !defined(TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES) +#define TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES 0 +#endif + +// export vk_icdNegotiateLoaderICDInterfaceVersion, vk_icdEnumerateAdapterPhysicalDevices, and vk_icdGetPhysicalDeviceProcAddr +// through dlsym/GetProcAddress +// Default is *on* +#if !defined(TEST_ICD_EXPORT_VERSION_7) +#define TEST_ICD_EXPORT_VERSION_7 1 +#endif + +TestICD icd; +extern "C" { +FRAMEWORK_EXPORT TestICD* get_test_icd_func() { return &icd; } +FRAMEWORK_EXPORT TestICD* reset_icd_func() { + icd.~TestICD(); + return new (&icd) TestICD(); +} +} + +LayerDefinition& FindLayer(std::vector& layers, std::string layerName) { + for (auto& layer : layers) { + if (layer.layerName == layerName) return layer; + } + assert(false && "Layer name not found!"); + return layers[0]; +} +bool CheckLayer(std::vector& layers, std::string layerName) { + for (auto& layer : layers) { + if (layer.layerName == layerName) return true; + } + return false; +} + +bool IsInstanceExtensionSupported(const char* extension_name) { + return icd.instance_extensions.end() != + std::find_if(icd.instance_extensions.begin(), icd.instance_extensions.end(), + [extension_name](Extension const& ext) { return string_eq(&ext.extensionName[0], extension_name); }); +} + +bool IsInstanceExtensionEnabled(const char* extension_name) { + return icd.enabled_instance_extensions.end() != + std::find_if(icd.enabled_instance_extensions.begin(), icd.enabled_instance_extensions.end(), + [extension_name](Extension const& ext) { return string_eq(&ext.extensionName[0], extension_name); }); +} + +bool IsPhysicalDeviceExtensionAvailable(const char* extension_name) { + for (auto& phys_dev : icd.physical_devices) { + if (phys_dev.extensions.end() != + std::find_if(phys_dev.extensions.begin(), phys_dev.extensions.end(), + [extension_name](Extension const& ext) { return ext.extensionName == extension_name; })) { + return true; + } + } + return false; +} + +PhysicalDevice& GetPhysDevice(VkPhysicalDevice physicalDevice) { + for (auto& phys_dev : icd.physical_devices) { + if (phys_dev.vk_physical_device.handle == physicalDevice) return phys_dev; + } + assert(false && "vkPhysicalDevice not found!"); + return icd.physical_devices[0]; +} + +std::vector::iterator find_physical_device(VkPhysicalDevice physicalDevice) { + auto found = std::find_if(icd.physical_devices.begin(), icd.physical_devices.end(), [physicalDevice](PhysicalDevice& phys_dev) { + return phys_dev.vk_physical_device.handle == physicalDevice; + }); + return found; +} + +bool is_physical_device_found(std::vector::iterator found) { return found != icd.physical_devices.end(); } + +bool is_valid_surface(VkSurfaceKHR surface_to_check) { + uint64_t surf_handle = (uint64_t)(surface_to_check); + auto found = std::find(icd.surface_handles.begin(), icd.surface_handles.end(), surf_handle); + return found != icd.surface_handles.end(); +} + +struct FindDevice { + bool found = false; + uint32_t phys_dev_index = 0; + uint32_t dev_index = 0; +}; + +FindDevice lookup_device(VkDevice device) { + FindDevice fd{}; + for (uint32_t p = 0; p < icd.physical_devices.size(); p++) { + auto const& phys_dev = icd.physical_devices.at(p); + for (uint32_t d = 0; d < phys_dev.device_handles.size(); d++) { + if (phys_dev.device_handles.at(d) == device) { + fd.found = true; + fd.phys_dev_index = p; + fd.dev_index = d; + return fd; + } + } + } + return fd; +} + +// typename T must have '.get()' function that returns a type U +template +VkResult FillCountPtr(std::vector const& data_vec, uint32_t* pCount, U* pData) { + if (pCount == nullptr) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + if (pData == nullptr) { + *pCount = static_cast(data_vec.size()); + return VK_SUCCESS; + } + uint32_t amount_written = 0; + uint32_t amount_to_write = static_cast(data_vec.size()); + if (*pCount < data_vec.size()) { + amount_to_write = *pCount; + } + for (size_t i = 0; i < amount_to_write; i++) { + pData[i] = data_vec[i].get(); + amount_written++; + } + if (*pCount < data_vec.size()) { + *pCount = amount_written; + return VK_INCOMPLETE; + } + *pCount = amount_written; + return VK_SUCCESS; +} + +template +VkResult FillCountPtr(std::vector const& data_vec, uint32_t* pCount, T* pData) { + if (pCount == nullptr) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + if (pData == nullptr) { + *pCount = static_cast(data_vec.size()); + return VK_SUCCESS; + } + uint32_t amount_written = 0; + uint32_t amount_to_write = static_cast(data_vec.size()); + if (*pCount < data_vec.size()) { + amount_to_write = *pCount; + } + for (size_t i = 0; i < amount_to_write; i++) { + pData[i] = data_vec[i]; + amount_written++; + } + if (*pCount < data_vec.size()) { + *pCount = amount_written; + return VK_INCOMPLETE; + } + *pCount = amount_written; + return VK_SUCCESS; +} + +void check_allocator_handle(const VkAllocationCallbacks* pAllocator) { + if (pAllocator) { + if (nullptr == pAllocator->pfnAllocation || nullptr == pAllocator->pfnFree || nullptr == pAllocator->pfnReallocation) { + std::cout << "pAllocator functions are NULL!\n"; + abort(); + } + } +} + +//// Instance Functions //// + +// VK_SUCCESS,VK_INCOMPLETE +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + if (pLayerName != nullptr) { + auto& layer = FindLayer(icd.instance_layers, std::string(pLayerName)); + return FillCountPtr(layer.extensions, pPropertyCount, pProperties); + } else { // instance extensions + FillCountPtr(icd.instance_extensions, pPropertyCount, pProperties); + } + + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) { + return FillCountPtr(icd.instance_layers, pPropertyCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateInstanceVersion(uint32_t* pApiVersion) { + if (pApiVersion != nullptr) { + *pApiVersion = icd.icd_api_version; + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) { + if (pCreateInfo == nullptr) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + check_allocator_handle(pAllocator); + + uint32_t default_api_version = VK_API_VERSION_1_0; + uint32_t api_version = + (pCreateInfo->pApplicationInfo == nullptr) ? default_api_version : pCreateInfo->pApplicationInfo->apiVersion; + + if (icd.icd_api_version < VK_API_VERSION_1_1) { + if (api_version > VK_API_VERSION_1_0) { + return VK_ERROR_INCOMPATIBLE_DRIVER; + } + } + + // Add to the list of enabled extensions only those that the ICD actively supports + icd.enabled_instance_extensions.clear(); + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + if (IsInstanceExtensionSupported(pCreateInfo->ppEnabledExtensionNames[i])) { + icd.enabled_instance_extensions.push_back({pCreateInfo->ppEnabledExtensionNames[i]}); + } + } + + // VK_SUCCESS + *pInstance = icd.instance_handle.handle; + + icd.passed_in_instance_create_flags = pCreateInfo->flags; + + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyInstance([[maybe_unused]] VkInstance instance, const VkAllocationCallbacks* pAllocator) { + icd.enabled_instance_extensions.clear(); + check_allocator_handle(pAllocator); +} + +// VK_SUCCESS,VK_INCOMPLETE +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumeratePhysicalDevices([[maybe_unused]] VkInstance instance, uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices) { + if (icd.enum_physical_devices_return_code != VK_SUCCESS) { + return icd.enum_physical_devices_return_code; + } + if (pPhysicalDevices == nullptr) { + *pPhysicalDeviceCount = static_cast(icd.physical_devices.size()); + } else { + uint32_t handles_written = 0; + for (size_t i = 0; i < icd.physical_devices.size(); i++) { + if (i < *pPhysicalDeviceCount) { + handles_written++; + pPhysicalDevices[i] = icd.physical_devices[i].vk_physical_device.handle; + } else { + *pPhysicalDeviceCount = handles_written; + return VK_INCOMPLETE; + } + } + *pPhysicalDeviceCount = handles_written; + } + return VK_SUCCESS; +} + +// VK_SUCCESS,VK_INCOMPLETE, VK_ERROR_INITIALIZATION_FAILED +VKAPI_ATTR VkResult VKAPI_CALL +test_vkEnumeratePhysicalDeviceGroups([[maybe_unused]] VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, + VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) { + VkResult result = VK_SUCCESS; + + if (pPhysicalDeviceGroupProperties == nullptr) { + if (0 == icd.physical_device_groups.size()) { + *pPhysicalDeviceGroupCount = static_cast(icd.physical_devices.size()); + } else { + *pPhysicalDeviceGroupCount = static_cast(icd.physical_device_groups.size()); + } + } else { + // NOTE: This is a fake struct to make sure the pNext chain is properly passed down to the ICD + // vkEnumeratePhysicalDeviceGroups. + // The two versions must match: + // "FakePNext" test in loader_regresion_tests.cpp + // "test_vkEnumeratePhysicalDeviceGroups" in test_icd.cpp + struct FakePnextSharedWithICD { + VkStructureType sType; + void* pNext; + uint32_t value; + }; + + uint32_t group_count = 0; + if (0 == icd.physical_device_groups.size()) { + group_count = static_cast(icd.physical_devices.size()); + for (size_t device_group = 0; device_group < icd.physical_devices.size(); device_group++) { + if (device_group >= *pPhysicalDeviceGroupCount) { + group_count = *pPhysicalDeviceGroupCount; + result = VK_INCOMPLETE; + break; + } + pPhysicalDeviceGroupProperties[device_group].subsetAllocation = false; + pPhysicalDeviceGroupProperties[device_group].physicalDeviceCount = 1; + pPhysicalDeviceGroupProperties[device_group].physicalDevices[0] = + icd.physical_devices[device_group].vk_physical_device.handle; + for (size_t i = 1; i < VK_MAX_DEVICE_GROUP_SIZE; i++) { + pPhysicalDeviceGroupProperties[device_group].physicalDevices[i] = {}; + } + } + } else { + group_count = static_cast(icd.physical_device_groups.size()); + for (size_t device_group = 0; device_group < icd.physical_device_groups.size(); device_group++) { + if (device_group >= *pPhysicalDeviceGroupCount) { + group_count = *pPhysicalDeviceGroupCount; + result = VK_INCOMPLETE; + break; + } + pPhysicalDeviceGroupProperties[device_group].subsetAllocation = + icd.physical_device_groups[device_group].subset_allocation; + uint32_t handles_written = 0; + for (size_t i = 0; i < icd.physical_device_groups[device_group].physical_device_handles.size(); i++) { + handles_written++; + pPhysicalDeviceGroupProperties[device_group].physicalDevices[i] = + icd.physical_device_groups[device_group].physical_device_handles[i]->vk_physical_device.handle; + } + for (size_t i = handles_written; i < VK_MAX_DEVICE_GROUP_SIZE; i++) { + pPhysicalDeviceGroupProperties[device_group].physicalDevices[i] = {}; + } + pPhysicalDeviceGroupProperties[device_group].physicalDeviceCount = handles_written; + } + } + // NOTE: The following code is purely to test pNext passing in vkEnumeratePhysicalDevice groups + // and includes normally invalid information. + for (size_t device_group = 0; device_group < group_count; device_group++) { + if (nullptr != pPhysicalDeviceGroupProperties[device_group].pNext) { + VkBaseInStructure* base = reinterpret_cast(pPhysicalDeviceGroupProperties[device_group].pNext); + if (base->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT) { + FakePnextSharedWithICD* fake = reinterpret_cast(base); + fake->value = 0xDECAFBAD; + } + } + } + *pPhysicalDeviceGroupCount = static_cast(group_count); + } + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDebugUtilsMessengerEXT( + [[maybe_unused]] VkInstance instance, [[maybe_unused]] const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger) { + if (nullptr != pMessenger) { + uint8_t* new_handle_ptr = nullptr; + if (pAllocator) { + new_handle_ptr = + (uint8_t*)pAllocator->pfnAllocation(pAllocator->pUserData, sizeof(uint8_t*), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + } else { + new_handle_ptr = new uint8_t; + } + uint64_t fake_msgr_handle = reinterpret_cast(new_handle_ptr); + icd.messenger_handles.push_back(fake_msgr_handle); +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || \ + defined(_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) + *pMessenger = reinterpret_cast(fake_msgr_handle); +#else + *pMessenger = fake_msgr_handle; +#endif + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyDebugUtilsMessengerEXT([[maybe_unused]] VkInstance instance, + VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks* pAllocator) { + if (messenger != VK_NULL_HANDLE) { + uint64_t fake_msgr_handle = (uint64_t)(messenger); + auto found_iter = std::find(icd.messenger_handles.begin(), icd.messenger_handles.end(), fake_msgr_handle); + if (found_iter != icd.messenger_handles.end()) { + // Remove it from the list + icd.messenger_handles.erase(found_iter); + // Delete the handle + if (pAllocator) { + pAllocator->pfnFree(pAllocator->pUserData, (uint8_t*)fake_msgr_handle); + } else { + delete (uint8_t*)(fake_msgr_handle); + } + } else { + std::cerr << "Messenger not found during destroy!\n"; + abort(); + } + } +} + +// debug report create/destroy + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDebugReportCallbackEXT( + [[maybe_unused]] VkInstance instance, [[maybe_unused]] const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback) { + if (nullptr != pCallback) { + uint8_t* new_handle_ptr = nullptr; + if (pAllocator) { + new_handle_ptr = + (uint8_t*)pAllocator->pfnAllocation(pAllocator->pUserData, sizeof(uint8_t*), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + } else { + new_handle_ptr = new uint8_t; + } + uint64_t fake_msgr_handle = reinterpret_cast(new_handle_ptr); + icd.callback_handles.push_back(fake_msgr_handle); +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || \ + defined(_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) + *pCallback = reinterpret_cast(fake_msgr_handle); +#else + *pCallback = fake_msgr_handle; +#endif + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyDebugReportCallbackEXT([[maybe_unused]] VkInstance instance, + VkDebugReportCallbackEXT callback, + const VkAllocationCallbacks* pAllocator) { + if (callback != VK_NULL_HANDLE) { + uint64_t fake_msgr_handle = (uint64_t)(callback); + auto found_iter = std::find(icd.callback_handles.begin(), icd.callback_handles.end(), fake_msgr_handle); + if (found_iter != icd.callback_handles.end()) { + // Remove it from the list + icd.callback_handles.erase(found_iter); + // Delete the handle + if (pAllocator) { + pAllocator->pfnFree(pAllocator->pUserData, (uint8_t*)fake_msgr_handle); + } else { + delete (uint8_t*)(fake_msgr_handle); + } + } else { + std::cerr << "callback not found during destroy!\n"; + abort(); + } + } +} + +// Debug utils & debug marker ext stubs +VKAPI_ATTR VkResult VKAPI_CALL test_vkDebugMarkerSetObjectTagEXT(VkDevice dev, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) { + if (pTagInfo && pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + VkPhysicalDevice pd = (VkPhysicalDevice)(uintptr_t)(pTagInfo->object); + if (pd != icd.physical_devices.at(lookup_device(dev).phys_dev_index).vk_physical_device.handle) return VK_ERROR_DEVICE_LOST; + } + if (pTagInfo && pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + if (pTagInfo->object != icd.surface_handles.at(0)) return VK_ERROR_DEVICE_LOST; + } + if (pTagInfo && pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + if (pTagInfo->object != (uint64_t)(uintptr_t)icd.instance_handle.handle) return VK_ERROR_DEVICE_LOST; + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkDebugMarkerSetObjectNameEXT(VkDevice dev, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) { + if (pNameInfo && pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + VkPhysicalDevice pd = (VkPhysicalDevice)(uintptr_t)(pNameInfo->object); + if (pd != icd.physical_devices.at(lookup_device(dev).phys_dev_index).vk_physical_device.handle) return VK_ERROR_DEVICE_LOST; + } + if (pNameInfo && pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + if (pNameInfo->object != icd.surface_handles.at(0)) return VK_ERROR_DEVICE_LOST; + } + if (pNameInfo && pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + if (pNameInfo->object != (uint64_t)(uintptr_t)icd.instance_handle.handle) return VK_ERROR_DEVICE_LOST; + } + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDebugMarkerBeginEXT(VkCommandBuffer, const VkDebugMarkerMarkerInfoEXT*) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDebugMarkerEndEXT(VkCommandBuffer) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDebugMarkerInsertEXT(VkCommandBuffer, const VkDebugMarkerMarkerInfoEXT*) {} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkSetDebugUtilsObjectNameEXT(VkDevice dev, const VkDebugUtilsObjectNameInfoEXT* pNameInfo) { + if (pNameInfo && pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + VkPhysicalDevice pd = (VkPhysicalDevice)(uintptr_t)(pNameInfo->objectHandle); + if (pd != icd.physical_devices.at(lookup_device(dev).phys_dev_index).vk_physical_device.handle) return VK_ERROR_DEVICE_LOST; + } + if (pNameInfo && pNameInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) { + if (pNameInfo->objectHandle != icd.surface_handles.at(0)) return VK_ERROR_DEVICE_LOST; + } + if (pNameInfo && pNameInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + if (pNameInfo->objectHandle != (uint64_t)(uintptr_t)icd.instance_handle.handle) return VK_ERROR_DEVICE_LOST; + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkSetDebugUtilsObjectTagEXT(VkDevice dev, const VkDebugUtilsObjectTagInfoEXT* pTagInfo) { + if (pTagInfo && pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + VkPhysicalDevice pd = (VkPhysicalDevice)(uintptr_t)(pTagInfo->objectHandle); + if (pd != icd.physical_devices.at(lookup_device(dev).phys_dev_index).vk_physical_device.handle) return VK_ERROR_DEVICE_LOST; + } + if (pTagInfo && pTagInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) { + if (pTagInfo->objectHandle != icd.surface_handles.at(0)) return VK_ERROR_DEVICE_LOST; + } + if (pTagInfo && pTagInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + if (pTagInfo->objectHandle != (uint64_t)(uintptr_t)icd.instance_handle.handle) return VK_ERROR_DEVICE_LOST; + } + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL test_vkQueueBeginDebugUtilsLabelEXT(VkQueue, const VkDebugUtilsLabelEXT*) {} +VKAPI_ATTR void VKAPI_CALL test_vkQueueEndDebugUtilsLabelEXT(VkQueue) {} +VKAPI_ATTR void VKAPI_CALL test_vkQueueInsertDebugUtilsLabelEXT(VkQueue, const VkDebugUtilsLabelEXT*) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdBeginDebugUtilsLabelEXT(VkCommandBuffer, const VkDebugUtilsLabelEXT*) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer, const VkDebugUtilsLabelEXT*) {} + +//// Physical Device functions //// + +// VK_SUCCESS,VK_INCOMPLETE +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateDeviceLayerProperties(VkPhysicalDevice, uint32_t*, VkLayerProperties*) { + assert(false && "ICD's don't contain layers???"); + return VK_SUCCESS; +} + +// VK_SUCCESS, VK_INCOMPLETE, VK_ERROR_LAYER_NOT_PRESENT +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + if (pLayerName != nullptr) { + assert(false && "Drivers don't contain layers???"); + return VK_SUCCESS; + } else { // instance extensions + return FillCountPtr(phys_dev.extensions, pPropertyCount, pProperties); + } +} + +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties* pQueueFamilyProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + FillCountPtr(phys_dev.queue_family_properties, pQueueFamilyPropertyCount, pQueueFamilyProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) { + check_allocator_handle(pAllocator); + auto found = find_physical_device(physicalDevice); + if (!is_physical_device_found(found)) { + return VK_ERROR_INITIALIZATION_FAILED; + } + auto device_handle = DispatchableHandle(); + *pDevice = device_handle.handle; + found->device_handles.push_back(device_handle.handle); + found->device_create_infos.push_back(DeviceCreateInfo{pCreateInfo}); + for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++) { + found->queue_handles.emplace_back(); + } + icd.device_handles.emplace_back(std::move(device_handle)); + + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) { + check_allocator_handle(pAllocator); + auto found = std::find(icd.device_handles.begin(), icd.device_handles.end(), device); + if (found != icd.device_handles.end()) icd.device_handles.erase(found); + auto fd = lookup_device(device); + if (!fd.found) return; + auto& phys_dev = icd.physical_devices.at(fd.phys_dev_index); + phys_dev.device_handles.erase(phys_dev.device_handles.begin() + fd.dev_index); + phys_dev.device_create_infos.erase(phys_dev.device_create_infos.begin() + fd.dev_index); +} + +VKAPI_ATTR VkResult VKAPI_CALL generic_tool_props_function([[maybe_unused]] VkPhysicalDevice physicalDevice, uint32_t* pToolCount, + VkPhysicalDeviceToolPropertiesEXT* pToolProperties) { + if (icd.tooling_properties.size() == 0) { + return VK_SUCCESS; + } + if (pToolProperties == nullptr && pToolCount != nullptr) { + *pToolCount = static_cast(icd.tooling_properties.size()); + } else if (pToolCount != nullptr) { + for (size_t i = 0; i < *pToolCount; i++) { + if (i >= icd.tooling_properties.size()) { + return VK_INCOMPLETE; + } + pToolProperties[i] = icd.tooling_properties[i]; + } + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, + VkPhysicalDeviceToolPropertiesEXT* pToolProperties) { + return generic_tool_props_function(physicalDevice, pToolCount, pToolProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, + VkPhysicalDeviceToolPropertiesEXT* pToolProperties) { + return generic_tool_props_function(physicalDevice, pToolCount, pToolProperties); +} + +template +T to_nondispatch_handle(uint64_t handle) { +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || \ + defined(_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) + return reinterpret_cast(handle); +#else + return handle; +#endif +} + +template +uint64_t from_nondispatch_handle(T handle) { +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || \ + defined(_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) + return reinterpret_cast(handle); +#else + return handle; +#endif +} + +//// WSI //// +template +void common_nondispatch_handle_creation(std::vector& handles, HandleType* pHandle) { + if (nullptr != pHandle) { + if (handles.size() == 0) + handles.push_back(800851234); + else + handles.push_back(handles.back() + 102030); + *pHandle = to_nondispatch_handle(handles.back()); + } +} +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateWin32SurfaceKHR([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkWin32SurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + if (IsInstanceExtensionSupported(VK_KHR_WIN32_SURFACE_EXTENSION_NAME)) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL test_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice, uint32_t) { return VK_TRUE; } +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateWaylandSurfaceKHR([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + if (IsInstanceExtensionSupported(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME)) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL test_vkGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice, uint32_t, + struct wl_display*) { + return VK_TRUE; +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateXcbSurfaceKHR([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkXcbSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + if (IsInstanceExtensionSupported(VK_KHR_XCB_SURFACE_EXTENSION_NAME)) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL test_vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice, uint32_t, xcb_connection_t*, + xcb_visualid_t) { + return VK_TRUE; +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateXlibSurfaceKHR([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + if (IsInstanceExtensionSupported(VK_KHR_XCB_SURFACE_EXTENSION_NAME)) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL test_vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice, uint32_t, Display*, VisualID) { + return VK_TRUE; +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDirectFBSurfaceEXT([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL test_vkGetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice, uint32_t, IDirectFB*) { + return VK_TRUE; +} + +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateMacOSSurfaceMVK([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_IOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateIOSSurfaceMVK([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkIOSSurfaceCreateInfoMVK* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_GGP) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateStreamDescriptorSurfaceGGP( + [[maybe_unused]] VkInstance instance, [[maybe_unused]] const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateMetalSurfaceEXT([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkMetalSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateScreenSurfaceQNX([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkScreenSurfaceCreateInfoQNX* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + return VK_SUCCESS; +} + +VKAPI_ATTR VkBool32 VKAPI_CALL test_vkGetPhysicalDeviceScreenPresentationSupportQNX(VkPhysicalDevice, uint32_t, + struct _screen_window*) { + return VK_TRUE; +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateHeadlessSurfaceEXT([[maybe_unused]] VkInstance instance, + [[maybe_unused]] const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + if (IsInstanceExtensionSupported(VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME)) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroySurfaceKHR([[maybe_unused]] VkInstance instance, VkSurfaceKHR surface, + const VkAllocationCallbacks* pAllocator) { + if (surface != VK_NULL_HANDLE) { + uint64_t surf_handle = from_nondispatch_handle(surface); + auto found_iter = std::find(icd.surface_handles.begin(), icd.surface_handles.end(), surf_handle); + if (found_iter != icd.surface_handles.end()) { + // Remove it from the list + icd.surface_handles.erase(found_iter); + } else { + assert(false && "Surface not found during destroy!"); + } + } +} +// VK_KHR_swapchain +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateSwapchainKHR([[maybe_unused]] VkDevice device, + [[maybe_unused]] const VkSwapchainCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) { + check_allocator_handle(pAllocator); + common_nondispatch_handle_creation(icd.swapchain_handles, pSwapchain); + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetSwapchainImagesKHR([[maybe_unused]] VkDevice device, + [[maybe_unused]] VkSwapchainKHR swapchain, + uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) { + std::vector handles{123, 234, 345, 345, 456}; + if (pSwapchainImages == nullptr) { + if (pSwapchainImageCount) *pSwapchainImageCount = static_cast(handles.size()); + } else if (pSwapchainImageCount) { + for (uint32_t i = 0; i < *pSwapchainImageCount && i < handles.size(); i++) { + pSwapchainImages[i] = to_nondispatch_handle(handles.back()); + } + if (*pSwapchainImageCount < handles.size()) return VK_INCOMPLETE; + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroySwapchainKHR([[maybe_unused]] VkDevice device, VkSwapchainKHR swapchain, + const VkAllocationCallbacks* pAllocator) { + check_allocator_handle(pAllocator); + if (swapchain != VK_NULL_HANDLE) { + uint64_t fake_swapchain_handle = from_nondispatch_handle(swapchain); + auto found_iter = icd.swapchain_handles.erase( + std::remove(icd.swapchain_handles.begin(), icd.swapchain_handles.end(), fake_swapchain_handle), + icd.swapchain_handles.end()); + if (!icd.swapchain_handles.empty() && found_iter == icd.swapchain_handles.end()) { + assert(false && "Swapchain not found during destroy!"); + } + } +} +// VK_KHR_swapchain with 1.1 +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetDeviceGroupSurfacePresentModesKHR([[maybe_unused]] VkDevice device, + [[maybe_unused]] VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR* pModes) { + if (!pModes) return VK_ERROR_INITIALIZATION_FAILED; + *pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR; + return VK_SUCCESS; +} + +// VK_KHR_surface +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, + VkSurfaceKHR surface, VkBool32* pSupported) { + if (surface != VK_NULL_HANDLE) { + if (!is_valid_surface(surface)) { + *pSupported = VK_FALSE; + return VK_SUCCESS; + } + } + if (nullptr != pSupported) { + auto found = find_physical_device(physicalDevice); + if (is_physical_device_found(found)) { + *pSupported = found->queue_family_properties.at(queueFamilyIndex).support_present; + } else { + *pSupported = VK_FALSE; + return VK_SUCCESS; + } + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) { + if (surface != VK_NULL_HANDLE) { + if (!is_valid_surface(surface)) { + assert(false && "Surface not found during GetPhysicalDeviceSurfaceCapabilitiesKHR query!"); + return VK_ERROR_UNKNOWN; + } + } + if (nullptr != pSurfaceCapabilities) { + *pSurfaceCapabilities = GetPhysDevice(physicalDevice).surface_capabilities; + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormatKHR* pSurfaceFormats) { + if (surface != VK_NULL_HANDLE) { + if (!is_valid_surface(surface)) { + assert(false && "Surface not found during GetPhysicalDeviceSurfaceFormatsKHR query!"); + return VK_ERROR_UNKNOWN; + } + } else { + if (!IsInstanceExtensionEnabled(VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME)) { + assert(false && "Surface is NULL but VK_GOOGLE_surfaceless_query was not enabled!"); + return VK_ERROR_UNKNOWN; + } + } + FillCountPtr(GetPhysDevice(physicalDevice).surface_formats, pSurfaceFormatCount, pSurfaceFormats); + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) { + if (surface != VK_NULL_HANDLE) { + if (!is_valid_surface(surface)) { + assert(false && "Surface not found during GetPhysicalDeviceSurfacePresentModesKHR query!"); + return VK_ERROR_UNKNOWN; + } + } else { + if (!IsInstanceExtensionEnabled(VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME)) { + assert(false && "Surface is NULL but VK_GOOGLE_surfaceless_query was not enabled!"); + return VK_ERROR_UNKNOWN; + } + } + FillCountPtr(GetPhysDevice(physicalDevice).surface_present_modes, pPresentModeCount, pPresentModes); + return VK_SUCCESS; +} + +#if defined(WIN32) +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfacePresentModes2EXT(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pPresentModeCount, + VkPresentModeKHR* pPresentModes) { + if (pSurfaceInfo->surface != VK_NULL_HANDLE) { + if (!is_valid_surface(pSurfaceInfo->surface)) { + assert(false && "Surface not found during GetPhysicalDeviceSurfacePresentModesKHR query!"); + return VK_ERROR_UNKNOWN; + } + } else { + if (!IsInstanceExtensionEnabled(VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME)) { + assert(false && "Surface is NULL but VK_GOOGLE_surfaceless_query was not enabled!"); + return VK_ERROR_UNKNOWN; + } + } + FillCountPtr(GetPhysDevice(physicalDevice).surface_present_modes, pPresentModeCount, pPresentModes); + return VK_SUCCESS; +} +#endif + +// VK_KHR_display +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPropertiesKHR* pProperties) { + FillCountPtr(GetPhysDevice(physicalDevice).display_properties, pPropertyCount, pProperties); + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkDisplayPlanePropertiesKHR* pProperties) { + FillCountPtr(GetPhysDevice(physicalDevice).display_plane_properties, pPropertyCount, pProperties); + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, + [[maybe_unused]] uint32_t planeIndex, + uint32_t* pDisplayCount, VkDisplayKHR* pDisplays) { + FillCountPtr(GetPhysDevice(physicalDevice).displays, pDisplayCount, pDisplays); + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, + [[maybe_unused]] VkDisplayKHR display, uint32_t* pPropertyCount, + VkDisplayModePropertiesKHR* pProperties) { + FillCountPtr(GetPhysDevice(physicalDevice).display_mode_properties, pPropertyCount, pProperties); + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDisplayModeKHR(VkPhysicalDevice physicalDevice, [[maybe_unused]] VkDisplayKHR display, + [[maybe_unused]] const VkDisplayModeCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode) { + check_allocator_handle(pAllocator); + if (nullptr != pMode) { + *pMode = GetPhysDevice(physicalDevice).display_mode; + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, + [[maybe_unused]] VkDisplayModeKHR mode, + [[maybe_unused]] uint32_t planeIndex, + VkDisplayPlaneCapabilitiesKHR* pCapabilities) { + if (nullptr != pCapabilities) { + *pCapabilities = GetPhysDevice(physicalDevice).display_plane_capabilities; + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDisplayPlaneSurfaceKHR( + [[maybe_unused]] VkInstance instance, [[maybe_unused]] const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) { + check_allocator_handle(pAllocator); + if (IsInstanceExtensionSupported(VK_KHR_DISPLAY_EXTENSION_NAME)) { + common_nondispatch_handle_creation(icd.surface_handles, pSurface); + } + return VK_SUCCESS; +} + +// VK_KHR_get_surface_capabilities2 +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities) { + if (nullptr != pSurfaceInfo && nullptr != pSurfaceCapabilities) { + if (IsInstanceExtensionSupported("VK_EXT_surface_maintenance1") && + IsInstanceExtensionEnabled("VK_EXT_surface_maintenance1")) { + auto& phys_dev = GetPhysDevice(physicalDevice); + void* pNext = pSurfaceCapabilities->pNext; + while (pNext) { + VkBaseOutStructure pNext_base_structure{}; + std::memcpy(&pNext_base_structure, pNext, sizeof(VkBaseInStructure)); + if (pNext_base_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT) { + // First must find the present mode that is being queried + VkPresentModeKHR present_mode = VK_PRESENT_MODE_MAX_ENUM_KHR; + const void* pSurfaceInfo_pNext = pSurfaceInfo->pNext; + while (pSurfaceInfo_pNext) { + VkBaseInStructure pSurfaceInfo_pNext_base_structure{}; + std::memcpy(&pSurfaceInfo_pNext_base_structure, pSurfaceInfo_pNext, sizeof(VkBaseInStructure)); + if (pSurfaceInfo_pNext_base_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT) { + present_mode = reinterpret_cast(pSurfaceInfo_pNext)->presentMode; + } + pSurfaceInfo_pNext = pSurfaceInfo_pNext_base_structure.pNext; + } + + VkSurfacePresentModeCompatibilityEXT* present_mode_compatibility = + reinterpret_cast(pNext); + if (present_mode == VK_PRESENT_MODE_MAX_ENUM_KHR) { + present_mode_compatibility->presentModeCount = 0; + } else { + auto it = + std::find(phys_dev.surface_present_modes.begin(), phys_dev.surface_present_modes.end(), present_mode); + if (it != phys_dev.surface_present_modes.end()) { + size_t index = it - phys_dev.surface_present_modes.begin(); + present_mode_compatibility->presentModeCount = + static_cast(phys_dev.surface_present_mode_compatibility[index].size()); + if (present_mode_compatibility->pPresentModes) { + for (size_t i = 0; i < phys_dev.surface_present_mode_compatibility[index].size(); i++) { + present_mode_compatibility->pPresentModes[i] = + phys_dev.surface_present_mode_compatibility[index][i]; + } + } + } + } + } else if (pNext_base_structure.sType == VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT) { + VkSurfacePresentScalingCapabilitiesEXT* present_scaling_capabilities = + reinterpret_cast(pNext); + present_scaling_capabilities->minScaledImageExtent = + phys_dev.surface_present_scaling_capabilities.minScaledImageExtent; + present_scaling_capabilities->maxScaledImageExtent = + phys_dev.surface_present_scaling_capabilities.maxScaledImageExtent; + present_scaling_capabilities->supportedPresentScaling = + phys_dev.surface_present_scaling_capabilities.supportedPresentScaling; + present_scaling_capabilities->supportedPresentGravityX = + phys_dev.surface_present_scaling_capabilities.supportedPresentGravityX; + present_scaling_capabilities->supportedPresentGravityY = + phys_dev.surface_present_scaling_capabilities.supportedPresentGravityY; + } + pNext = pNext_base_structure.pNext; + } + } + return test_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, pSurfaceInfo->surface, + &pSurfaceCapabilities->surfaceCapabilities); + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats) { + if (nullptr != pSurfaceFormatCount) { + test_vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, pSurfaceInfo->surface, pSurfaceFormatCount, nullptr); + if (nullptr != pSurfaceFormats) { + auto& phys_dev = GetPhysDevice(physicalDevice); + // Since the structures are different, we have to copy each item over seperately. Since we have multiple, we + // have to manually copy the data here instead of calling the next function + for (uint32_t cnt = 0; cnt < *pSurfaceFormatCount; ++cnt) { + memcpy(&pSurfaceFormats[cnt].surfaceFormat, &phys_dev.surface_formats[cnt], sizeof(VkSurfaceFormatKHR)); + } + } + } + return VK_SUCCESS; +} +// VK_KHR_display_swapchain +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateSharedSwapchainsKHR([[maybe_unused]] VkDevice device, uint32_t swapchainCount, + const VkSwapchainCreateInfoKHR* pCreateInfos, + const VkAllocationCallbacks* pAllocator, + VkSwapchainKHR* pSwapchains) { + check_allocator_handle(pAllocator); + for (uint32_t i = 0; i < swapchainCount; i++) { + uint64_t surface_integer_value = from_nondispatch_handle(pCreateInfos[i].surface); + auto found_iter = std::find(icd.surface_handles.begin(), icd.surface_handles.end(), surface_integer_value); + if (found_iter == icd.surface_handles.end()) { + return VK_ERROR_INITIALIZATION_FAILED; + } + common_nondispatch_handle_creation(icd.swapchain_handles, &pSwapchains[i]); + } + return VK_SUCCESS; +} + +//// misc +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateCommandPool([[maybe_unused]] VkDevice device, + [[maybe_unused]] const VkCommandPoolCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) { + check_allocator_handle(pAllocator); + if (pCommandPool != nullptr) { + pCommandPool = reinterpret_cast(0xdeadbeefdeadbeef); + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyCommandPool(VkDevice, VkCommandPool, const VkAllocationCallbacks*) { + // do nothing, leak memory for now +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkAllocateCommandBuffers([[maybe_unused]] VkDevice device, + const VkCommandBufferAllocateInfo* pAllocateInfo, + VkCommandBuffer* pCommandBuffers) { + if (pAllocateInfo != nullptr && pCommandBuffers != nullptr) { + for (size_t i = 0; i < pAllocateInfo->commandBufferCount; i++) { + icd.allocated_command_buffers.push_back({}); + pCommandBuffers[i] = icd.allocated_command_buffers.back().handle; + } + } + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL test_vkGetDeviceQueue([[maybe_unused]] VkDevice device, [[maybe_unused]] uint32_t queueFamilyIndex, + uint32_t queueIndex, VkQueue* pQueue) { + auto fd = lookup_device(device); + if (fd.found) { + *pQueue = icd.physical_devices.at(fd.phys_dev_index).queue_handles[queueIndex].handle; + } +} + +// VK_EXT_acquire_drm_display +VKAPI_ATTR VkResult VKAPI_CALL test_vkAcquireDrmDisplayEXT(VkPhysicalDevice, int32_t, VkDisplayKHR) { return VK_SUCCESS; } + +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetDrmDisplayEXT(VkPhysicalDevice physicalDevice, [[maybe_unused]] int32_t drmFd, + [[maybe_unused]] uint32_t connectorId, VkDisplayKHR* display) { + if (nullptr != display && GetPhysDevice(physicalDevice).displays.size() > 0) { + *display = GetPhysDevice(physicalDevice).displays[0]; + } + return VK_SUCCESS; +} + +//// stubs +// 1.0 +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) { + if (nullptr != pFeatures) { + memcpy(pFeatures, &GetPhysDevice(physicalDevice).features, sizeof(VkPhysicalDeviceFeatures)); + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties* pProperties) { + if (nullptr != pProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + memcpy(pProperties, &phys_dev.properties, sizeof(VkPhysicalDeviceProperties)); + size_t max_len = (phys_dev.deviceName.length() > VK_MAX_PHYSICAL_DEVICE_NAME_SIZE) ? VK_MAX_PHYSICAL_DEVICE_NAME_SIZE + : phys_dev.deviceName.length(); + std::copy(phys_dev.deviceName.c_str(), phys_dev.deviceName.c_str() + max_len, pProperties->deviceName); + pProperties->deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE - 1] = '\0'; + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties* pMemoryProperties) { + if (nullptr != pMemoryProperties) { + memcpy(pMemoryProperties, &GetPhysDevice(physicalDevice).memory_properties, sizeof(VkPhysicalDeviceMemoryProperties)); + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceSparseImageFormatProperties( + VkPhysicalDevice physicalDevice, [[maybe_unused]] VkFormat format, [[maybe_unused]] VkImageType type, + [[maybe_unused]] VkSampleCountFlagBits samples, [[maybe_unused]] VkImageUsageFlags usage, [[maybe_unused]] VkImageTiling tiling, + uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) { + FillCountPtr(GetPhysDevice(physicalDevice).sparse_image_format_properties, pPropertyCount, pProperties); +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties* pFormatProperties) { + if (nullptr != pFormatProperties) { + memcpy(pFormatProperties, &GetPhysDevice(physicalDevice).format_properties[static_cast(format)], + sizeof(VkFormatProperties)); + } +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceImageFormatProperties( + VkPhysicalDevice physicalDevice, [[maybe_unused]] VkFormat format, [[maybe_unused]] VkImageType type, + [[maybe_unused]] VkImageTiling tiling, [[maybe_unused]] VkImageUsageFlags usage, [[maybe_unused]] VkImageCreateFlags flags, + VkImageFormatProperties* pImageFormatProperties) { + if (nullptr != pImageFormatProperties) { + memcpy(pImageFormatProperties, &GetPhysDevice(physicalDevice).image_format_properties, sizeof(VkImageFormatProperties)); + } + return VK_SUCCESS; +} + +// 1.1 +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures) { + if (nullptr != pFeatures) { + test_vkGetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features); + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties) { + if (nullptr != pProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + test_vkGetPhysicalDeviceProperties(physicalDevice, &pProperties->properties); + VkBaseInStructure* pNext = reinterpret_cast(pProperties->pNext); + while (pNext) { + if (pNext->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT) { + auto* bus_info = reinterpret_cast(pNext); + bus_info->pciBus = phys_dev.pci_bus; + } + if (pNext->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT) { + auto* layered_driver_props = reinterpret_cast(pNext); + layered_driver_props->underlyingAPI = phys_dev.layered_driver_underlying_api; + } + pNext = reinterpret_cast(const_cast(pNext->pNext)); + } + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties) { + if (nullptr != pMemoryProperties) { + test_vkGetPhysicalDeviceMemoryProperties(physicalDevice, &pMemoryProperties->memoryProperties); + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties) { + if (nullptr != pQueueFamilyPropertyCount) { + test_vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, nullptr); + if (nullptr != pQueueFamilyProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + // Since the structures are different, we have to copy each item over seperately. Since we have multiple, we + // have to manually copy the data here instead of calling the next function + for (uint32_t queue = 0; queue < *pQueueFamilyPropertyCount; ++queue) { + memcpy(&pQueueFamilyProperties[queue].queueFamilyProperties, &phys_dev.queue_family_properties[queue].properties, + sizeof(VkQueueFamilyProperties)); + } + } + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties) { + if (nullptr != pPropertyCount) { + test_vkGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, pFormatInfo->format, pFormatInfo->type, + pFormatInfo->samples, pFormatInfo->usage, pFormatInfo->tiling, + pPropertyCount, nullptr); + if (nullptr != pProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + // Since the structures are different, we have to copy each item over seperately. Since we have multiple, we + // have to manually copy the data here instead of calling the next function + for (uint32_t cnt = 0; cnt < *pPropertyCount; ++cnt) { + memcpy(&pProperties[cnt].properties, &phys_dev.sparse_image_format_properties[cnt], + sizeof(VkSparseImageFormatProperties)); + } + } + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, + VkFormatProperties2* pFormatProperties) { + if (nullptr != pFormatProperties) { + test_vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &pFormatProperties->formatProperties); + } +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties) { + if (nullptr != pImageFormatInfo) { + VkImageFormatProperties* ptr = nullptr; + if (pImageFormatProperties) { + ptr = &pImageFormatProperties->imageFormatProperties; + } + test_vkGetPhysicalDeviceImageFormatProperties(physicalDevice, pImageFormatInfo->format, pImageFormatInfo->type, + pImageFormatInfo->tiling, pImageFormatInfo->usage, pImageFormatInfo->flags, + ptr); + } + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceExternalBufferProperties( + VkPhysicalDevice physicalDevice, [[maybe_unused]] const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, + VkExternalBufferProperties* pExternalBufferProperties) { + if (nullptr != pExternalBufferProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + memcpy(&pExternalBufferProperties->externalMemoryProperties, &phys_dev.external_memory_properties, + sizeof(VkExternalMemoryProperties)); + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceExternalSemaphoreProperties( + VkPhysicalDevice physicalDevice, [[maybe_unused]] const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, + VkExternalSemaphoreProperties* pExternalSemaphoreProperties) { + if (nullptr != pExternalSemaphoreProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + memcpy(pExternalSemaphoreProperties, &phys_dev.external_semaphore_properties, sizeof(VkExternalSemaphoreProperties)); + } +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceExternalFenceProperties( + VkPhysicalDevice physicalDevice, [[maybe_unused]] const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, + VkExternalFenceProperties* pExternalFenceProperties) { + if (nullptr != pExternalFenceProperties) { + auto& phys_dev = GetPhysDevice(physicalDevice); + memcpy(pExternalFenceProperties, &phys_dev.external_fence_properties, sizeof(VkExternalFenceProperties)); + } +} +// Entry-points associated with the VK_KHR_performance_query extension +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + VkPhysicalDevice, uint32_t, uint32_t*, VkPerformanceCounterKHR*, VkPerformanceCounterDescriptionKHR*) { + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(VkPhysicalDevice, + const VkQueryPoolPerformanceCreateInfoKHR*, + uint32_t*) {} +VKAPI_ATTR VkResult VKAPI_CALL test_vkAcquireProfilingLockKHR(VkDevice, const VkAcquireProfilingLockInfoKHR*) { return VK_SUCCESS; } +VKAPI_ATTR void VKAPI_CALL test_vkReleaseProfilingLockKHR(VkDevice) {} +// Entry-points associated with the VK_EXT_sample_locations extension +VKAPI_ATTR void VKAPI_CALL test_vkCmdSetSampleLocationsEXT(VkCommandBuffer, const VkSampleLocationsInfoEXT*) {} +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice, VkSampleCountFlagBits, + VkMultisamplePropertiesEXT*) {} +// Entry-points associated with the VK_EXT_calibrated_timestamps extension +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice, uint32_t*, VkTimeDomainEXT*) { + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkGetCalibratedTimestampsEXT(VkDevice, uint32_t, const VkCalibratedTimestampInfoEXT*, uint64_t*, + uint64_t*) { + return VK_SUCCESS; +} + +#if defined(WIN32) +VKAPI_ATTR VkResult VKAPI_CALL test_vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices) { + if (icd.enum_adapter_physical_devices_return_code != VK_SUCCESS) { + return icd.enum_adapter_physical_devices_return_code; + } + if (adapterLUID.LowPart != icd.adapterLUID.LowPart || adapterLUID.HighPart != icd.adapterLUID.HighPart) { + *pPhysicalDeviceCount = 0; + return VK_ERROR_INCOMPATIBLE_DRIVER; + } + icd.called_enumerate_adapter_physical_devices = true; + VkResult res = test_vkEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); + // For this testing, flip order intentionally + if (nullptr != pPhysicalDevices) { + std::reverse(pPhysicalDevices, pPhysicalDevices + *pPhysicalDeviceCount); + } + return res; +} +#endif // defined(WIN32) + +VKAPI_ATTR VkResult VKAPI_CALL test_vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pSupportedVersion) { + if (icd.called_vk_icd_gipa == CalledICDGIPA::not_called && + icd.called_negotiate_interface == CalledNegotiateInterface::not_called) + icd.called_negotiate_interface = CalledNegotiateInterface::vk_icd_negotiate; + else if (icd.called_vk_icd_gipa != CalledICDGIPA::not_called) + icd.called_negotiate_interface = CalledNegotiateInterface::vk_icd_gipa_first; + + // loader puts the minimum it supports in pSupportedVersion, if that is lower than our minimum + // If the ICD doesn't supports the interface version provided by the loader, report VK_ERROR_INCOMPATIBLE_DRIVER + if (icd.min_icd_interface_version > *pSupportedVersion) { + icd.interface_version_check = InterfaceVersionCheck::loader_version_too_old; + *pSupportedVersion = icd.min_icd_interface_version; + return VK_ERROR_INCOMPATIBLE_DRIVER; + } + + // the loader-provided interface version is newer than that supported by the ICD + if (icd.max_icd_interface_version < *pSupportedVersion) { + icd.interface_version_check = InterfaceVersionCheck::loader_version_too_new; + *pSupportedVersion = icd.max_icd_interface_version; + } + // ICD interface version is greater than the loader's, return the loader's version + else if (icd.max_icd_interface_version > *pSupportedVersion) { + icd.interface_version_check = InterfaceVersionCheck::icd_version_too_new; + // don't change *pSupportedVersion + } else { + icd.interface_version_check = InterfaceVersionCheck::version_is_supported; + *pSupportedVersion = icd.max_icd_interface_version; + } + + return VK_SUCCESS; +} + +//// trampolines + +PFN_vkVoidFunction get_instance_func_ver_1_1([[maybe_unused]] VkInstance instance, const char* pName) { + if (icd.icd_api_version >= VK_API_VERSION_1_1) { + if (string_eq(pName, "test_vkEnumerateInstanceVersion")) { + return icd.can_query_vkEnumerateInstanceVersion ? to_vkVoidFunction(test_vkEnumerateInstanceVersion) : nullptr; + } + if (string_eq(pName, "vkEnumeratePhysicalDeviceGroups")) { + return to_vkVoidFunction(test_vkEnumeratePhysicalDeviceGroups); + } + } + return nullptr; +} + +PFN_vkVoidFunction get_physical_device_func_wsi([[maybe_unused]] VkInstance instance, const char* pName) { + if (IsInstanceExtensionEnabled("VK_KHR_surface")) { + if (string_eq(pName, "vkGetPhysicalDeviceSurfaceSupportKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfaceSupportKHR); + if (string_eq(pName, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfaceCapabilitiesKHR); + if (string_eq(pName, "vkGetPhysicalDeviceSurfaceFormatsKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfaceFormatsKHR); + if (string_eq(pName, "vkGetPhysicalDeviceSurfacePresentModesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfacePresentModesKHR); + } +#if defined(WIN32) + if (IsPhysicalDeviceExtensionAvailable("VK_EXT_full_screen_exclusive")) { + if (string_eq(pName, "vkGetPhysicalDeviceSurfacePresentModes2EXT")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfacePresentModes2EXT); + } +#endif + if (IsInstanceExtensionEnabled("VK_KHR_get_surface_capabilities2")) { + if (string_eq(pName, "vkGetPhysicalDeviceSurfaceCapabilities2KHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfaceCapabilities2KHR); + if (string_eq(pName, "vkGetPhysicalDeviceSurfaceFormats2KHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSurfaceFormats2KHR); + } + if (IsInstanceExtensionEnabled("VK_KHR_display")) { + if (string_eq(pName, "vkGetPhysicalDeviceDisplayPropertiesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceDisplayPropertiesKHR); + if (string_eq(pName, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceDisplayPlanePropertiesKHR); + if (string_eq(pName, "vkGetDisplayPlaneSupportedDisplaysKHR")) + return to_vkVoidFunction(test_vkGetDisplayPlaneSupportedDisplaysKHR); + if (string_eq(pName, "vkGetDisplayModePropertiesKHR")) return to_vkVoidFunction(test_vkGetDisplayModePropertiesKHR); + if (string_eq(pName, "vkCreateDisplayModeKHR")) return to_vkVoidFunction(test_vkCreateDisplayModeKHR); + if (string_eq(pName, "vkGetDisplayPlaneCapabilitiesKHR")) return to_vkVoidFunction(test_vkGetDisplayPlaneCapabilitiesKHR); + if (string_eq(pName, "vkCreateDisplayPlaneSurfaceKHR")) return to_vkVoidFunction(test_vkCreateDisplayPlaneSurfaceKHR); + } + if (IsInstanceExtensionEnabled("VK_EXT_acquire_drm_display")) { + if (string_eq(pName, "vkAcquireDrmDisplayEXT")) return to_vkVoidFunction(test_vkAcquireDrmDisplayEXT); + if (string_eq(pName, "vkGetDrmDisplayEXT")) return to_vkVoidFunction(test_vkGetDrmDisplayEXT); + } + return nullptr; +} + +PFN_vkVoidFunction get_instance_func_wsi(VkInstance instance, const char* pName) { + if (icd.min_icd_interface_version >= 3 && icd.enable_icd_wsi == true) { +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (string_eq(pName, "vkCreateAndroidSurfaceKHR")) { + icd.is_using_icd_wsi = true; + return to_vkVoidFunction(test_vkCreateAndroidSurfaceKHR); + } +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (string_eq(pName, "vkCreateMetalSurfaceEXT")) { + return to_vkVoidFunction(test_vkCreateMetalSurfaceEXT); + } +#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (string_eq(pName, "vkCreateWaylandSurfaceKHR")) { + return to_vkVoidFunction(test_vkCreateWaylandSurfaceKHR); + } + if (string_eq(pName, "vkGetPhysicalDeviceWaylandPresentationSupportKHR")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceWaylandPresentationSupportKHR); + } +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) + if (string_eq(pName, "vkCreateXcbSurfaceKHR")) { + return to_vkVoidFunction(test_vkCreateXcbSurfaceKHR); + } + if (string_eq(pName, "vkGetPhysicalDeviceXcbPresentationSupportKHR")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceXcbPresentationSupportKHR); + } +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) + if (string_eq(pName, "vkCreateXlibSurfaceKHR")) { + return to_vkVoidFunction(test_vkCreateXlibSurfaceKHR); + } + if (string_eq(pName, "vkGetPhysicalDeviceXlibPresentationSupportKHR")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceXlibPresentationSupportKHR); + } +#endif +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (string_eq(pName, "vkCreateWin32SurfaceKHR")) { + return to_vkVoidFunction(test_vkCreateWin32SurfaceKHR); + } + if (string_eq(pName, "vkGetPhysicalDeviceWin32PresentationSupportKHR")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceWin32PresentationSupportKHR); + } +#endif +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + if (string_eq(pName, "vkCreateDirectFBSurfaceEXT")) { + return to_vkVoidFunction(test_vkCreateDirectFBSurfaceEXT); + } + if (string_eq(pName, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceDirectFBPresentationSupportEXT); + } +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + if (string_eq(pName, "vkCreateMacOSSurfaceMVK")) { + return to_vkVoidFunction(test_vkCreateMacOSSurfaceMVK); + } +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_IOS_MVK) + if (string_eq(pName, "vkCreateIOSSurfaceMVK")) { + return to_vkVoidFunction(test_vkCreateIOSSurfaceMVK); + } +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_GGP) + if (string_eq(pName, "vkCreateStreamDescriptorSurfaceGGP")) { + return to_vkVoidFunction(test_vkCreateStreamDescriptorSurfaceGGP); + } +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + if (string_eq(pName, "vkCreateScreenSurfaceQNX")) { + return to_vkVoidFunction(test_vkCreateScreenSurfaceQNX); + } + if (string_eq(pName, "vkGetPhysicalDeviceScreenPresentationSupportQNX")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceScreenPresentationSupportQNX); + } +#endif // VK_USE_PLATFORM_SCREEN_QNX + + if (string_eq(pName, "vkCreateHeadlessSurfaceEXT")) { + return to_vkVoidFunction(test_vkCreateHeadlessSurfaceEXT); + } + + if (string_eq(pName, "vkDestroySurfaceKHR")) { + icd.is_using_icd_wsi = true; + return to_vkVoidFunction(test_vkDestroySurfaceKHR); + } + } + if (IsInstanceExtensionEnabled(VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { + if (string_eq(pName, "vkCreateDebugUtilsMessengerEXT")) { + return to_vkVoidFunction(test_vkCreateDebugUtilsMessengerEXT); + } + if (string_eq(pName, "vkDestroyDebugUtilsMessengerEXT")) { + return to_vkVoidFunction(test_vkDestroyDebugUtilsMessengerEXT); + } + } + if (IsInstanceExtensionEnabled(VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + if (string_eq(pName, "vkCreateDebugReportCallbackEXT")) { + return to_vkVoidFunction(test_vkCreateDebugReportCallbackEXT); + } + if (string_eq(pName, "vkDestroyDebugReportCallbackEXT")) { + return to_vkVoidFunction(test_vkDestroyDebugReportCallbackEXT); + } + } + + PFN_vkVoidFunction ret_phys_dev_wsi = get_physical_device_func_wsi(instance, pName); + if (ret_phys_dev_wsi != nullptr) return ret_phys_dev_wsi; + return nullptr; +} +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_physical_device_func([[maybe_unused]] VkInstance instance, const char* pName) { + if (string_eq(pName, "vkEnumerateDeviceLayerProperties")) return to_vkVoidFunction(test_vkEnumerateDeviceLayerProperties); + if (string_eq(pName, "vkEnumerateDeviceExtensionProperties")) + return to_vkVoidFunction(test_vkEnumerateDeviceExtensionProperties); + if (string_eq(pName, "vkGetPhysicalDeviceQueueFamilyProperties")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceQueueFamilyProperties); + if (string_eq(pName, "vkCreateDevice")) return to_vkVoidFunction(test_vkCreateDevice); + + if (string_eq(pName, "vkGetPhysicalDeviceFeatures")) + return icd.can_query_GetPhysicalDeviceFuncs ? to_vkVoidFunction(test_vkGetPhysicalDeviceFeatures) : nullptr; + if (string_eq(pName, "vkGetPhysicalDeviceProperties")) + return icd.can_query_GetPhysicalDeviceFuncs ? to_vkVoidFunction(test_vkGetPhysicalDeviceProperties) : nullptr; + if (string_eq(pName, "vkGetPhysicalDeviceMemoryProperties")) + return icd.can_query_GetPhysicalDeviceFuncs ? to_vkVoidFunction(test_vkGetPhysicalDeviceMemoryProperties) : nullptr; + if (string_eq(pName, "vkGetPhysicalDeviceSparseImageFormatProperties")) + return icd.can_query_GetPhysicalDeviceFuncs ? to_vkVoidFunction(test_vkGetPhysicalDeviceSparseImageFormatProperties) + : nullptr; + if (string_eq(pName, "vkGetPhysicalDeviceFormatProperties")) + return icd.can_query_GetPhysicalDeviceFuncs ? to_vkVoidFunction(test_vkGetPhysicalDeviceFormatProperties) : nullptr; + if (string_eq(pName, "vkGetPhysicalDeviceImageFormatProperties")) + return icd.can_query_GetPhysicalDeviceFuncs ? to_vkVoidFunction(test_vkGetPhysicalDeviceImageFormatProperties) : nullptr; + + if (IsInstanceExtensionEnabled(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { + if (string_eq(pName, "vkGetPhysicalDeviceFeatures2KHR")) return to_vkVoidFunction(test_vkGetPhysicalDeviceFeatures2); + if (string_eq(pName, "vkGetPhysicalDeviceProperties2KHR")) return to_vkVoidFunction(test_vkGetPhysicalDeviceProperties2); + if (string_eq(pName, "vkGetPhysicalDeviceFormatProperties2KHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceFormatProperties2); + if (string_eq(pName, "vkGetPhysicalDeviceMemoryProperties2KHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceMemoryProperties2); + + if (string_eq(pName, "vkGetPhysicalDeviceQueueFamilyProperties2KHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceQueueFamilyProperties2); + + if (string_eq(pName, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSparseImageFormatProperties2); + + if (string_eq(pName, "vkGetPhysicalDeviceImageFormatProperties2KHR")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceImageFormatProperties2); + } + } + if (IsInstanceExtensionEnabled(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME)) { + if (string_eq(pName, "vkGetPhysicalDeviceExternalBufferPropertiesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceExternalBufferProperties); + } + if (IsInstanceExtensionEnabled(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME)) { + if (string_eq(pName, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceExternalSemaphoreProperties); + } + if (IsInstanceExtensionEnabled(VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME)) { + if (string_eq(pName, "vkGetPhysicalDeviceExternalFencePropertiesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceExternalFenceProperties); + } + + // The following physical device extensions only need 1 device to support them for the ICD to export + // them + if (IsPhysicalDeviceExtensionAvailable(VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME)) { + if (string_eq(pName, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR")) + return to_vkVoidFunction(test_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); + if (string_eq(pName, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); + if (string_eq(pName, "vkAcquireProfilingLockKHR")) return to_vkVoidFunction(test_vkAcquireProfilingLockKHR); + if (string_eq(pName, "vkReleaseProfilingLockKHR")) return to_vkVoidFunction(test_vkReleaseProfilingLockKHR); + } + if (IsPhysicalDeviceExtensionAvailable(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME)) { + if (string_eq(pName, "vkCmdSetSampleLocationsEXT")) return to_vkVoidFunction(test_vkCmdSetSampleLocationsEXT); + if (string_eq(pName, "vkGetPhysicalDeviceMultisamplePropertiesEXT")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceMultisamplePropertiesEXT); + } + if (IsPhysicalDeviceExtensionAvailable(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME)) { + if (string_eq(pName, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT); + if (string_eq(pName, "vkGetCalibratedTimestampsEXT")) return to_vkVoidFunction(test_vkGetCalibratedTimestampsEXT); + } + + if (icd.icd_api_version >= VK_MAKE_API_VERSION(0, 1, 1, 0)) { + if (string_eq(pName, "vkGetPhysicalDeviceFeatures2")) return to_vkVoidFunction(test_vkGetPhysicalDeviceFeatures2); + if (string_eq(pName, "vkGetPhysicalDeviceProperties2")) return to_vkVoidFunction(test_vkGetPhysicalDeviceProperties2); + if (string_eq(pName, "vkGetPhysicalDeviceFormatProperties2")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceFormatProperties2); + if (string_eq(pName, "vkGetPhysicalDeviceMemoryProperties2")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceMemoryProperties2); + + if (string_eq(pName, "vkGetPhysicalDeviceQueueFamilyProperties2")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceQueueFamilyProperties2); + + if (string_eq(pName, "vkGetPhysicalDeviceSparseImageFormatProperties2")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceSparseImageFormatProperties2); + + if (string_eq(pName, "vkGetPhysicalDeviceImageFormatProperties2")) { + return to_vkVoidFunction(test_vkGetPhysicalDeviceImageFormatProperties2); + } + + if (string_eq(pName, "vkGetPhysicalDeviceExternalBufferProperties")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceExternalBufferProperties); + if (string_eq(pName, "vkGetPhysicalDeviceExternalSemaphoreProperties")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceExternalSemaphoreProperties); + if (string_eq(pName, "vkGetPhysicalDeviceExternalFenceProperties")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceExternalFenceProperties); + } + + if (icd.supports_tooling_info_core) { + if (string_eq(pName, "vkGetPhysicalDeviceToolProperties")) return to_vkVoidFunction(test_vkGetPhysicalDeviceToolProperties); + } + if (icd.supports_tooling_info_ext) { + if (string_eq(pName, "vkGetPhysicalDeviceToolPropertiesEXT")) + return to_vkVoidFunction(test_vkGetPhysicalDeviceToolPropertiesEXT); + } + + for (auto& phys_dev : icd.physical_devices) { + for (auto& func : phys_dev.custom_physical_device_functions) { + if (func.name == pName) { + return to_vkVoidFunction(func.function); + } + } + } + return nullptr; +} + +PFN_vkVoidFunction get_instance_func(VkInstance instance, const char* pName) { + if (string_eq(pName, "vkDestroyInstance")) return to_vkVoidFunction(test_vkDestroyInstance); + if (string_eq(pName, "vkEnumeratePhysicalDevices")) return to_vkVoidFunction(test_vkEnumeratePhysicalDevices); + + if (IsInstanceExtensionEnabled(VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME)) { + if (string_eq(pName, "vkEnumeratePhysicalDeviceGroupsKHR")) return to_vkVoidFunction(test_vkEnumeratePhysicalDeviceGroups); + } + + PFN_vkVoidFunction ret_phys_dev = get_physical_device_func(instance, pName); + if (ret_phys_dev != nullptr) return ret_phys_dev; + + PFN_vkVoidFunction ret_1_1 = get_instance_func_ver_1_1(instance, pName); + if (ret_1_1 != nullptr) return ret_1_1; + + PFN_vkVoidFunction ret_wsi = get_instance_func_wsi(instance, pName); + if (ret_wsi != nullptr) return ret_wsi; + + for (auto& func : icd.custom_instance_functions) { + if (func.name == pName) { + return to_vkVoidFunction(func.function); + } + } + + return nullptr; +} + +bool should_check(std::vector const& exts, VkDevice device, const char* ext_name) { + if (device == NULL) return true; // always look if device is NULL + for (auto const& ext : exts) { + if (string_eq(ext, ext_name)) { + return true; + } + } + return false; +} + +PFN_vkVoidFunction get_device_func(VkDevice device, const char* pName) { + DeviceCreateInfo create_info{}; + if (device != nullptr) { + auto fd = lookup_device(device); + if (!fd.found) return NULL; + create_info = icd.physical_devices.at(fd.phys_dev_index).device_create_infos.at(fd.dev_index); + } + if (string_eq(pName, "vkCreateCommandPool")) return to_vkVoidFunction(test_vkCreateCommandPool); + if (string_eq(pName, "vkAllocateCommandBuffers")) return to_vkVoidFunction(test_vkAllocateCommandBuffers); + if (string_eq(pName, "vkDestroyCommandPool")) return to_vkVoidFunction(test_vkDestroyCommandPool); + if (string_eq(pName, "vkGetDeviceQueue")) return to_vkVoidFunction(test_vkGetDeviceQueue); + if (string_eq(pName, "vkDestroyDevice")) return to_vkVoidFunction(test_vkDestroyDevice); + if (should_check(create_info.enabled_extensions, device, "VK_KHR_swapchain")) { + if (string_eq(pName, "vkCreateSwapchainKHR")) return to_vkVoidFunction(test_vkCreateSwapchainKHR); + if (string_eq(pName, "vkGetSwapchainImagesKHR")) return to_vkVoidFunction(test_vkGetSwapchainImagesKHR); + if (string_eq(pName, "vkDestroySwapchainKHR")) return to_vkVoidFunction(test_vkDestroySwapchainKHR); + + if (icd.icd_api_version >= VK_API_VERSION_1_1 && string_eq(pName, "vkGetDeviceGroupSurfacePresentModesKHR")) + return to_vkVoidFunction(test_vkGetDeviceGroupSurfacePresentModesKHR); + } + if (should_check(create_info.enabled_extensions, device, "VK_KHR_display_swapchain")) { + if (string_eq(pName, "vkCreateSharedSwapchainsKHR")) return to_vkVoidFunction(test_vkCreateSharedSwapchainsKHR); + } + if (should_check(create_info.enabled_extensions, device, "VK_KHR_device_group")) { + if (string_eq(pName, "vkGetDeviceGroupSurfacePresentModesKHR")) + return to_vkVoidFunction(test_vkGetDeviceGroupSurfacePresentModesKHR); + } + if (should_check(create_info.enabled_extensions, device, "VK_EXT_debug_marker")) { + if (string_eq(pName, "vkDebugMarkerSetObjectTagEXT")) return to_vkVoidFunction(test_vkDebugMarkerSetObjectTagEXT); + if (string_eq(pName, "vkDebugMarkerSetObjectNameEXT")) return to_vkVoidFunction(test_vkDebugMarkerSetObjectNameEXT); + if (string_eq(pName, "vkCmdDebugMarkerBeginEXT")) return to_vkVoidFunction(test_vkCmdDebugMarkerBeginEXT); + if (string_eq(pName, "vkCmdDebugMarkerEndEXT")) return to_vkVoidFunction(test_vkCmdDebugMarkerEndEXT); + if (string_eq(pName, "vkCmdDebugMarkerInsertEXT")) return to_vkVoidFunction(test_vkCmdDebugMarkerInsertEXT); + } + if (IsInstanceExtensionEnabled("VK_EXT_debug_utils")) { + if (string_eq(pName, "vkSetDebugUtilsObjectNameEXT")) return to_vkVoidFunction(test_vkSetDebugUtilsObjectNameEXT); + if (string_eq(pName, "vkSetDebugUtilsObjectTagEXT")) return to_vkVoidFunction(test_vkSetDebugUtilsObjectTagEXT); + if (string_eq(pName, "vkQueueBeginDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkQueueBeginDebugUtilsLabelEXT); + if (string_eq(pName, "vkQueueEndDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkQueueEndDebugUtilsLabelEXT); + if (string_eq(pName, "vkQueueInsertDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkQueueInsertDebugUtilsLabelEXT); + if (string_eq(pName, "vkCmdBeginDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkCmdBeginDebugUtilsLabelEXT); + if (string_eq(pName, "vkCmdEndDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkCmdEndDebugUtilsLabelEXT); + if (string_eq(pName, "vkCmdInsertDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkCmdInsertDebugUtilsLabelEXT); + } + // look for device functions setup from a test + for (const auto& phys_dev : icd.physical_devices) { + for (const auto& function : phys_dev.known_device_functions) { + if (function.name == pName) { + return to_vkVoidFunction(function.function); + } + } + } + return nullptr; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL test_vkGetInstanceProcAddr(VkInstance instance, const char* pName) { + return get_instance_func(instance, pName); +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL test_vkGetDeviceProcAddr(VkDevice device, const char* pName) { + return get_device_func(device, pName); +} + +PFN_vkVoidFunction base_get_instance_proc_addr(VkInstance instance, const char* pName) { + if (pName == nullptr) return nullptr; + if (instance == NULL) { + if (string_eq(pName, "vk_icdNegotiateLoaderICDInterfaceVersion")) + return icd.exposes_vk_icdNegotiateLoaderICDInterfaceVersion + ? to_vkVoidFunction(test_vk_icdNegotiateLoaderICDInterfaceVersion) + : NULL; + + if (string_eq(pName, "vk_icdGetPhysicalDeviceProcAddr")) + return icd.exposes_vk_icdGetPhysicalDeviceProcAddr ? to_vkVoidFunction(get_physical_device_func) : NULL; +#if defined(WIN32) + if (string_eq(pName, "vk_icdEnumerateAdapterPhysicalDevices")) + return icd.exposes_vk_icdEnumerateAdapterPhysicalDevices ? to_vkVoidFunction(test_vk_icdEnumerateAdapterPhysicalDevices) + : NULL; +#endif // defined(WIN32) + + if (string_eq(pName, "vkGetInstanceProcAddr")) return to_vkVoidFunction(test_vkGetInstanceProcAddr); + if (string_eq(pName, "vkEnumerateInstanceExtensionProperties")) + return icd.exposes_vkEnumerateInstanceExtensionProperties + ? to_vkVoidFunction(test_vkEnumerateInstanceExtensionProperties) + : NULL; + if (string_eq(pName, "vkEnumerateInstanceLayerProperties")) + return to_vkVoidFunction(test_vkEnumerateInstanceLayerProperties); + if (string_eq(pName, "vkEnumerateInstanceVersion")) + return icd.can_query_vkEnumerateInstanceVersion ? to_vkVoidFunction(test_vkEnumerateInstanceVersion) : nullptr; + if (string_eq(pName, "vkCreateInstance")) return to_vkVoidFunction(test_vkCreateInstance); + } + if (string_eq(pName, "vkGetDeviceProcAddr")) return to_vkVoidFunction(test_vkGetDeviceProcAddr); + + auto instance_func_return = get_instance_func(instance, pName); + if (instance_func_return != nullptr) return instance_func_return; + + // Need to return function pointers for device extensions + auto device_func_return = get_device_func(nullptr, pName); + if (device_func_return != nullptr) return device_func_return; + return nullptr; +} + +// Exported functions +extern "C" { +#if TEST_ICD_EXPORT_NEGOTIATE_INTERFACE_VERSION && TEST_ICD_EXPORT_VERSION_7 +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pSupportedVersion) { + return test_vk_icdNegotiateLoaderICDInterfaceVersion(pSupportedVersion); +} +#endif // TEST_ICD_EXPORT_NEGOTIATE_INTERFACE_VERSION + +#if TEST_ICD_EXPORT_ICD_GPDPA && TEST_ICD_EXPORT_VERSION_7 +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char* pName) { + return get_physical_device_func(instance, pName); +} +#endif // TEST_ICD_EXPORT_ICD_GPDPA + +#if TEST_ICD_EXPORT_ICD_GIPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName) { + if (icd.called_vk_icd_gipa == CalledICDGIPA::not_called) icd.called_vk_icd_gipa = CalledICDGIPA::vk_icd_gipa; + return base_get_instance_proc_addr(instance, pName); +} +#else // !TEST_ICD_EXPORT_ICD_GIPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName) { + if (icd.called_vk_icd_gipa == CalledICDGIPA::not_called) icd.called_vk_icd_gipa = CalledICDGIPA::vk_gipa; + return base_get_instance_proc_addr(instance, pName); +} +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) { + return test_vkCreateInstance(pCreateInfo, pAllocator, pInstance); +} +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + return test_vkEnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties); +} +#endif // TEST_ICD_EXPORT_ICD_GIPA + +#if TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES && TEST_ICD_EXPORT_VERSION_7 +#if defined(WIN32) +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, + uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices) { + return test_vk_icdEnumerateAdapterPhysicalDevices(instance, adapterLUID, pPhysicalDeviceCount, pPhysicalDevices); +} +#endif // defined(WIN32) +#endif // TEST_ICD_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES + +} // extern "C" diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.h b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.h new file mode 100644 index 0000000000..b49c518c55 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/icd/test_icd.h @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#pragma once + +#include "test_util.h" + +#include "layer/layer_util.h" + +enum class CalledICDGIPA { not_called, vk_icd_gipa, vk_gipa }; + +enum class CalledNegotiateInterface { not_called, vk_icd_negotiate, vk_icd_gipa_first }; + +enum class InterfaceVersionCheck { + not_called, + loader_version_too_old, + loader_version_too_new, + icd_version_too_new, + version_is_supported +}; + +// clang-format off +inline std::ostream& operator<<(std::ostream& os, const CalledICDGIPA& result) { + switch (result) { + case (CalledICDGIPA::not_called): return os << "CalledICDGIPA::not_called"; + case (CalledICDGIPA::vk_icd_gipa): return os << "CalledICDGIPA::vk_icd_gipa"; + case (CalledICDGIPA::vk_gipa): return os << "CalledICDGIPA::vk_gipa"; + } + return os << static_cast(result); +} +inline std::ostream& operator<<(std::ostream& os, const CalledNegotiateInterface& result) { + switch (result) { + case (CalledNegotiateInterface::not_called): return os << "CalledNegotiateInterface::not_called"; + case (CalledNegotiateInterface::vk_icd_negotiate): return os << "CalledNegotiateInterface::vk_icd_negotiate"; + case (CalledNegotiateInterface::vk_icd_gipa_first): return os << "CalledNegotiateInterface::vk_icd_gipa_first"; + } + return os << static_cast(result); +} +inline std::ostream& operator<<(std::ostream& os, const InterfaceVersionCheck& result) { + switch (result) { + case (InterfaceVersionCheck::not_called): return os << "InterfaceVersionCheck::not_called"; + case (InterfaceVersionCheck::loader_version_too_old): return os << "InterfaceVersionCheck::loader_version_too_old"; + case (InterfaceVersionCheck::loader_version_too_new): return os << "InterfaceVersionCheck::loader_version_too_new"; + case (InterfaceVersionCheck::icd_version_too_new): return os << "InterfaceVersionCheck::icd_version_too_new"; + case (InterfaceVersionCheck::version_is_supported): return os << "InterfaceVersionCheck::version_is_supported"; + } + return os << static_cast(result); +} +// clang-format on + +// Move only type because it holds a DispatchableHandle +struct PhysicalDevice { + PhysicalDevice() {} + PhysicalDevice(std::string name) : deviceName(name) {} + PhysicalDevice(const char* name) : deviceName(name) {} + + DispatchableHandle vk_physical_device; + BUILDER_VALUE(std::string, deviceName) + BUILDER_VALUE(VkPhysicalDeviceProperties, properties) + BUILDER_VALUE(VkPhysicalDeviceFeatures, features) + BUILDER_VALUE(VkPhysicalDeviceMemoryProperties, memory_properties) + BUILDER_VALUE(VkImageFormatProperties, image_format_properties) + BUILDER_VALUE(VkExternalMemoryProperties, external_memory_properties) + BUILDER_VALUE(VkExternalSemaphoreProperties, external_semaphore_properties) + BUILDER_VALUE(VkExternalFenceProperties, external_fence_properties) + BUILDER_VALUE(uint32_t, pci_bus) + + BUILDER_VECTOR(MockQueueFamilyProperties, queue_family_properties, queue_family_properties) + BUILDER_VECTOR(VkFormatProperties, format_properties, format_properties) + BUILDER_VECTOR(VkSparseImageFormatProperties, sparse_image_format_properties, sparse_image_format_properties) + + BUILDER_VECTOR(Extension, extensions, extension) + + BUILDER_VALUE(VkSurfaceCapabilitiesKHR, surface_capabilities) + BUILDER_VECTOR(VkSurfaceFormatKHR, surface_formats, surface_format) + BUILDER_VECTOR(VkPresentModeKHR, surface_present_modes, surface_present_mode) + BUILDER_VALUE(VkSurfacePresentScalingCapabilitiesEXT, surface_present_scaling_capabilities) + // No good way to make this a builder value. Each std::vector corresponds to each surface_present_modes + // element + std::vector> surface_present_mode_compatibility{}; + + BUILDER_VECTOR(VkDisplayPropertiesKHR, display_properties, display_properties) + BUILDER_VECTOR(VkDisplayPlanePropertiesKHR, display_plane_properties, display_plane_properties) + BUILDER_VECTOR(VkDisplayKHR, displays, displays) + BUILDER_VECTOR(VkDisplayModePropertiesKHR, display_mode_properties, display_mode_properties) + BUILDER_VALUE(VkDisplayModeKHR, display_mode) + BUILDER_VALUE(VkDisplayPlaneCapabilitiesKHR, display_plane_capabilities) + + BUILDER_VALUE_WITH_DEFAULT(VkLayeredDriverUnderlyingApiMSFT, layered_driver_underlying_api, + VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT) + + PhysicalDevice& set_api_version(uint32_t version) { + properties.apiVersion = version; + return *this; + } + + PhysicalDevice&& finish() { return std::move(*this); } + + // Objects created from this physical device + std::vector device_handles; + std::vector device_create_infos; + std::vector> queue_handles; + + // Unknown physical device functions. Add a `VulkanFunction` to this list which will be searched in + // vkGetInstanceProcAddr for custom_instance_functions and vk_icdGetPhysicalDeviceProcAddr for custom_physical_device_functions. + // To add unknown device functions, add it to the PhysicalDevice directly (in the known_device_functions member) + BUILDER_VECTOR(VulkanFunction, custom_physical_device_functions, custom_physical_device_function) + + // List of function names which are 'known' to the physical device but have test defined implementations + // The purpose of this list is so that vkGetDeviceProcAddr returns 'a real function pointer' in tests + // without actually implementing any of the logic inside of it. + BUILDER_VECTOR(VulkanFunction, known_device_functions, device_function) +}; + +struct PhysicalDeviceGroup { + PhysicalDeviceGroup() {} + PhysicalDeviceGroup(PhysicalDevice const& physical_device) { physical_device_handles.push_back(&physical_device); } + PhysicalDeviceGroup(std::vector const& physical_devices) { + physical_device_handles.insert(physical_device_handles.end(), physical_devices.begin(), physical_devices.end()); + } + PhysicalDeviceGroup& use_physical_device(PhysicalDevice const& physical_device) { + physical_device_handles.push_back(&physical_device); + return *this; + } + + std::vector physical_device_handles; + VkBool32 subset_allocation = false; +}; + +struct TestICD { + std::filesystem::path manifest_file_path; + + BUILDER_VALUE_WITH_DEFAULT(bool, exposes_vk_icdNegotiateLoaderICDInterfaceVersion, true) + BUILDER_VALUE_WITH_DEFAULT(bool, exposes_vkEnumerateInstanceExtensionProperties, true) + BUILDER_VALUE_WITH_DEFAULT(bool, exposes_vkCreateInstance, true) + BUILDER_VALUE_WITH_DEFAULT(bool, exposes_vk_icdGetPhysicalDeviceProcAddr, true) +#if defined(WIN32) + BUILDER_VALUE_WITH_DEFAULT(bool, exposes_vk_icdEnumerateAdapterPhysicalDevices, true) +#endif + + CalledICDGIPA called_vk_icd_gipa = CalledICDGIPA::not_called; + CalledNegotiateInterface called_negotiate_interface = CalledNegotiateInterface::not_called; + + InterfaceVersionCheck interface_version_check = InterfaceVersionCheck::not_called; + BUILDER_VALUE_WITH_DEFAULT(uint32_t, min_icd_interface_version, 0) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, max_icd_interface_version, 7) + uint32_t icd_interface_version_received = 0; + + bool called_enumerate_adapter_physical_devices = false; + + BUILDER_VALUE(bool, enable_icd_wsi); + bool is_using_icd_wsi = false; + + TestICD& setup_WSI(const char* api_selection = nullptr) { + enable_icd_wsi = true; + add_instance_extensions({"VK_KHR_surface", get_platform_wsi_extension(api_selection)}); + min_icd_interface_version = (3U < min_icd_interface_version) ? min_icd_interface_version : 3U; + return *this; + } + + BUILDER_VALUE_WITH_DEFAULT(uint32_t, icd_api_version, VK_API_VERSION_1_0) + BUILDER_VECTOR(LayerDefinition, instance_layers, instance_layer) + BUILDER_VECTOR(Extension, instance_extensions, instance_extension) + std::vector enabled_instance_extensions; + + BUILDER_VECTOR_MOVE_ONLY(PhysicalDevice, physical_devices, physical_device); + + BUILDER_VECTOR(PhysicalDeviceGroup, physical_device_groups, physical_device_group); + + DispatchableHandle instance_handle; + std::vector> device_handles; + std::vector surface_handles; + std::vector messenger_handles; + std::vector callback_handles; + std::vector swapchain_handles; + + BUILDER_VALUE_WITH_DEFAULT(bool, can_query_vkEnumerateInstanceVersion, true); + BUILDER_VALUE_WITH_DEFAULT(bool, can_query_GetPhysicalDeviceFuncs, true); + + // Unknown instance functions Add a `VulkanFunction` to this list which will be searched in + // vkGetInstanceProcAddr for custom_instance_functions and vk_icdGetPhysicalDeviceProcAddr for + // custom_physical_device_functions. To add unknown device functions, add it to the PhysicalDevice directly (in the + // known_device_functions member) + BUILDER_VECTOR(VulkanFunction, custom_instance_functions, custom_instance_function) + + // Must explicitely state support for the tooling info extension, that way we can control if vkGetInstanceProcAddr returns a + // function pointer for vkGetPhysicalDeviceToolPropertiesEXT or vkGetPhysicalDeviceToolProperties (core version) + BUILDER_VALUE(bool, supports_tooling_info_ext); + BUILDER_VALUE(bool, supports_tooling_info_core); + // List of tooling properties that this driver 'supports' + BUILDER_VECTOR(VkPhysicalDeviceToolPropertiesEXT, tooling_properties, tooling_property) + std::vector> allocated_command_buffers; + + VkInstanceCreateFlags passed_in_instance_create_flags{}; + + BUILDER_VALUE_WITH_DEFAULT(VkResult, enum_physical_devices_return_code, VK_SUCCESS); + BUILDER_VALUE_WITH_DEFAULT(VkResult, enum_adapter_physical_devices_return_code, VK_SUCCESS); + + InstanceCreateInfo GetVkInstanceCreateInfo() { + InstanceCreateInfo info; + for (auto& layer : instance_layers) info.enabled_layers.push_back(layer.layerName.data()); + for (auto& ext : instance_extensions) info.enabled_extensions.push_back(ext.extensionName.data()); + return info; + } + +#if defined(WIN32) + BUILDER_VALUE(LUID, adapterLUID) +#endif // defined(WIN32) +}; + +using GetTestICDFunc = TestICD* (*)(); +#define GET_TEST_ICD_FUNC_STR "get_test_icd_func" + +using GetNewTestICDFunc = TestICD* (*)(); +#define RESET_ICD_FUNC_STR "reset_icd_func" diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/json_writer.h b/local/recipes/libs/vulkan-loader/source/tests/framework/json_writer.h new file mode 100644 index 0000000000..f22db2892e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/json_writer.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#pragma once + +#include +#include +#include + +// Utility class to simplify the writing of JSON manifest files + +struct JsonWriter { + std::string output; + + // the bool represents whether an object has been written & a comma is needed + std::stack stack; + + void StartObject() { + CommaAndNewLine(); + Indent(); + output += "{"; + stack.push(false); + } + void StartKeyedObject(std::string const& key) { + CommaAndNewLine(); + Indent(); + output += "\"" + key + "\": {"; + stack.push(false); + } + void EndObject() { + stack.pop(); + output += "\n"; + Indent(); + output += "}"; + } + void StartKeyedArray(std::string const& key) { + CommaAndNewLine(); + Indent(); + output += "\"" + key + "\": ["; + stack.push(false); + } + void StartArray() { + CommaAndNewLine(); + Indent(); + output += "["; + stack.push(false); + } + void EndArray() { + stack.pop(); + output += "\n"; + Indent(); + output += "]"; + } + + void AddKeyedString(std::string const& key, std::string const& value) { + CommaAndNewLine(); + Indent(); + output += "\"" + key + "\": \"" + escape(value) + "\""; + } + void AddString(std::string const& value) { + CommaAndNewLine(); + Indent(); + output += "\"" + escape(value) + "\""; + } +#if defined(WIN32) + void AddKeyedString(std::string const& key, std::wstring const& value) { + CommaAndNewLine(); + Indent(); + output += "\"" + key + "\": \"" + escape(narrow(value)) + "\""; + } + void AddString(std::wstring const& value) { + CommaAndNewLine(); + Indent(); + output += "\"" + escape(narrow(value)) + "\""; + } +#endif + + void AddKeyedBool(std::string const& key, bool value) { + CommaAndNewLine(); + Indent(); + output += "\"" + key + "\": " + (value ? "true" : "false"); + } + void AddBool(bool value) { + CommaAndNewLine(); + Indent(); + output += std::string(value ? "true" : "false"); + } + + // Json doesn't allow `\` in strings, it must be escaped. Thus we have to convert '\\' to '\\\\' in strings + static std::string escape(std::string const& in_path) { + std::string out; + for (auto& c : in_path) { + if (c == '\\') + out += "\\\\"; + else + out += c; + } + return out; + } + static std::string escape(std::filesystem::path const& in_path) { return escape(narrow(in_path.native())); } + + private: + void CommaAndNewLine() { + if (stack.size() > 0) { + if (stack.top() == false) { + stack.top() = true; + } else { + output += ","; + } + output += "\n"; + } + } + void Indent() { + for (uint32_t i = 0; i < stack.size(); i++) { + output += '\t'; + } + } +}; diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/CMakeLists.txt new file mode 100644 index 0000000000..a624062389 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/CMakeLists.txt @@ -0,0 +1,51 @@ +# ~~~ +# Copyright (c) 2021-2022 Valve Corporation +# Copyright (c) 2021-2022 LunarG, 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. +# ~~~ + +set(TEST_LAYER_BASE_EXPORTS TEST_LAYER_EXPORT_ENUMERATE_FUNCTIONS=1) +set(TEST_LAYER_VERSION_0_EXPORTS ${TEST_LAYER_BASE_EXPORTS} TEST_LAYER_EXPORT_LAYER_VK_GIPA=1 TEST_LAYER_EXPORT_LAYER_VK_GDPA=1) +set(TEST_LAYER_VERSION_0_NAMED_GPA_EXPORTS ${TEST_LAYER_BASE_EXPORTS} TEST_LAYER_EXPORT_LAYER_NAMED_GIPA=1 TEST_LAYER_EXPORT_LAYER_NAMED_GDPA=1) +set(TEST_LAYER_VERSION_1_EXPORTS ${TEST_LAYER_VERSION_0_EXPORTS} TEST_LAYER_EXPORT_OVERRIDE_GIPA=1 TEST_LAYER_EXPORT_OVERRIDE_GDPA=1) +set(TEST_LAYER_VERSION_2_EXPORTS ${TEST_LAYER_VERSION_1_EXPORTS} TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR=1 + LAYER_EXPORT_NEGOTIATE_LOADER_LAYER_INTERFACE_VERSION=1) + +AddSharedLibrary(test_layer_export_base DEF_FILE test_layer_base SOURCES test_layer.cpp DEFINITIONS ${TEST_LAYER_BASE_EXPORTS}) +AddSharedLibrary(test_layer_export_version_0 DEF_FILE test_layer_0 SOURCES test_layer.cpp DEFINITIONS ${TEST_LAYER_VERSION_0_EXPORTS}) +AddSharedLibrary(test_layer_export_version_0_named_gpa DEF_FILE test_layer_0_named_gpa SOURCES test_layer.cpp DEFINITIONS ${TEST_LAYER_VERSION_0_NAMED_GPA_EXPORTS}) +AddSharedLibrary(test_layer_export_version_1 DEF_FILE test_layer_1 SOURCES test_layer.cpp DEFINITIONS ${TEST_LAYER_VERSION_1_EXPORTS}) +AddSharedLibrary(test_layer_export_version_2 DEF_FILE test_layer_2 SOURCES test_layer.cpp DEFINITIONS ${TEST_LAYER_VERSION_2_EXPORTS}) + +# Wrap Objects layer which wraps dispatchable handles to test that the loader will properly +# work in the case where handles in the terminator don't match handles in the trampoline portion. +set(WRAP_LAYER_VERSION_1_EXPORTS + TEST_LAYER_EXPORT_DIRECT_DISP=1 + TEST_LAYER_EXPORT_MAINT_1=1 + ) +set(WRAP_LAYER_VERSION_2_EXPORTS + TEST_LAYER_EXPORT_DISP_SURF_COUNT=1 + TEST_LAYER_EXPORT_PRESENT_IMAGE=1 + ) +set(WRAP_LAYER_VERSION_3_EXPORTS + TEST_LAYER_EXPORT_DIRECT_DISP=1 + TEST_LAYER_EXPORT_DISP_SURF_COUNT=1 + TEST_LAYER_EXPORT_MAINT_1=1 + TEST_LAYER_EXPORT_PRESENT_IMAGE=1 + ) + +AddSharedLibrary(test_layer_wrap_objects DEF_FILE wrap_objects SOURCES wrap_objects.cpp DEFINITIONS "") +AddSharedLibrary(test_layer_wrap_objects_1 DEF_FILE wrap_objects_1 SOURCES wrap_objects.cpp DEFINITIONS ${WRAP_LAYER_VERSION_1_EXPORTS}) +AddSharedLibrary(test_layer_wrap_objects_2 DEF_FILE wrap_objects_2 SOURCES wrap_objects.cpp DEFINITIONS ${WRAP_LAYER_VERSION_2_EXPORTS}) +AddSharedLibrary(test_layer_wrap_objects_3 DEF_FILE wrap_objects_3 SOURCES wrap_objects.cpp DEFINITIONS ${WRAP_LAYER_VERSION_3_EXPORTS}) diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0.def new file mode 100644 index 0000000000..7be478a4d8 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0.def @@ -0,0 +1,8 @@ +LIBRARY test_layer_export_version_0 +EXPORTS + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceLayerProperties + vkEnumerateDeviceExtensionProperties + vkGetInstanceProcAddr + vkGetDeviceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0_named_gpa.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0_named_gpa.def new file mode 100644 index 0000000000..b24063525e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_0_named_gpa.def @@ -0,0 +1,8 @@ +LIBRARY test_layer_export_version_0 +EXPORTS + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceLayerProperties + vkEnumerateDeviceExtensionProperties + test_layer_GetInstanceProcAddr + test_layer_GetDeviceProcAddr \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_1.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_1.def new file mode 100644 index 0000000000..da95aa8b5e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_1.def @@ -0,0 +1,9 @@ +LIBRARY test_layer_export_version_1 +EXPORTS + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceLayerProperties + vkEnumerateDeviceExtensionProperties + vkGetInstanceProcAddr + vkGetDeviceProcAddr + test_override_vkGetInstanceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_2.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_2.def new file mode 100644 index 0000000000..7db1e74989 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_2.def @@ -0,0 +1,14 @@ +LIBRARY test_layer_export_version_2 +EXPORTS + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceLayerProperties + vkEnumerateDeviceExtensionProperties + vkGetInstanceProcAddr + vkGetDeviceProcAddr + vk_layerGetPhysicalDeviceProcAddr + vkNegotiateLoaderLayerInterfaceVersion + test_preinst_vkEnumerateInstanceLayerProperties + test_preinst_vkEnumerateInstanceExtensionProperties + test_preinst_vkEnumerateInstanceVersion + test_override_vkGetInstanceProcAddr diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_base.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_base.def new file mode 100644 index 0000000000..43de929459 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/test_layer_base.def @@ -0,0 +1,6 @@ +LIBRARY test_layer_export_base +EXPORTS + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceLayerProperties + vkEnumerateDeviceExtensionProperties \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects.def new file mode 100644 index 0000000000..99b2a54053 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects.def @@ -0,0 +1,9 @@ +LIBRARY test_layer_wrap_objects +EXPORTS + vkGetInstanceProcAddr + vkGetDeviceProcAddr + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceExtensionProperties + vk_layerGetPhysicalDeviceProcAddr + vkNegotiateLoaderLayerInterfaceVersion \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_1.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_1.def new file mode 100644 index 0000000000..737c3f2eac --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_1.def @@ -0,0 +1,9 @@ +LIBRARY test_layer_wrap_objects_1 +EXPORTS + vkGetInstanceProcAddr + vkGetDeviceProcAddr + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceExtensionProperties + vk_layerGetPhysicalDeviceProcAddr + vkNegotiateLoaderLayerInterfaceVersion diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_2.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_2.def new file mode 100644 index 0000000000..14c82f86d5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_2.def @@ -0,0 +1,9 @@ +LIBRARY test_layer_wrap_objects_2 +EXPORTS + vkGetInstanceProcAddr + vkGetDeviceProcAddr + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceExtensionProperties + vk_layerGetPhysicalDeviceProcAddr + vkNegotiateLoaderLayerInterfaceVersion diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_3.def b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_3.def new file mode 100644 index 0000000000..ff42247e03 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/export_definitions/wrap_objects_3.def @@ -0,0 +1,9 @@ +LIBRARY test_layer_wrap_objects_3 +EXPORTS + vkGetInstanceProcAddr + vkGetDeviceProcAddr + vkEnumerateInstanceLayerProperties + vkEnumerateInstanceExtensionProperties + vkEnumerateDeviceExtensionProperties + vk_layerGetPhysicalDeviceProcAddr + vkNegotiateLoaderLayerInterfaceVersion diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/generated/vk_dispatch_table_helper.h b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/generated/vk_dispatch_table_helper.h new file mode 100644 index 0000000000..498352781c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/generated/vk_dispatch_table_helper.h @@ -0,0 +1,933 @@ +#pragma once +// *** THIS FILE IS GENERATED - DO NOT EDIT *** +// See dispatch_table_helper_generator.py for modifications + +/* + * Copyright (c) 2015-2025 The Khronos Group Inc. + * Copyright (c) 2015-2025 Valve Corporation + * Copyright (c) 2015-2025 LunarG, 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. + * + * Author: Courtney Goeltzenleuchter + * Author: Jon Ashburn + * Author: Mark Lobodzinski + * Author: Charles Giessen + */ + +#include +#include +#include +#include "vk_layer_dispatch_table.h" + +// clang-format off +static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDispatchTable *table, PFN_vkGetDeviceProcAddr gpa) { + memset(table, 0, sizeof(*table)); + table->magic = DEVICE_DISP_TABLE_MAGIC_NUMBER; + + // Device function pointers + table->GetDeviceProcAddr = gpa; + table->DestroyDevice = (PFN_vkDestroyDevice)gpa(device, "vkDestroyDevice"); + table->GetDeviceQueue = (PFN_vkGetDeviceQueue)gpa(device, "vkGetDeviceQueue"); + table->QueueSubmit = (PFN_vkQueueSubmit)gpa(device, "vkQueueSubmit"); + table->QueueWaitIdle = (PFN_vkQueueWaitIdle)gpa(device, "vkQueueWaitIdle"); + table->DeviceWaitIdle = (PFN_vkDeviceWaitIdle)gpa(device, "vkDeviceWaitIdle"); + table->AllocateMemory = (PFN_vkAllocateMemory)gpa(device, "vkAllocateMemory"); + table->FreeMemory = (PFN_vkFreeMemory)gpa(device, "vkFreeMemory"); + table->MapMemory = (PFN_vkMapMemory)gpa(device, "vkMapMemory"); + table->UnmapMemory = (PFN_vkUnmapMemory)gpa(device, "vkUnmapMemory"); + table->FlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)gpa(device, "vkFlushMappedMemoryRanges"); + table->InvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)gpa(device, "vkInvalidateMappedMemoryRanges"); + table->GetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)gpa(device, "vkGetDeviceMemoryCommitment"); + table->BindBufferMemory = (PFN_vkBindBufferMemory)gpa(device, "vkBindBufferMemory"); + table->BindImageMemory = (PFN_vkBindImageMemory)gpa(device, "vkBindImageMemory"); + table->GetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)gpa(device, "vkGetBufferMemoryRequirements"); + table->GetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)gpa(device, "vkGetImageMemoryRequirements"); + table->GetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)gpa(device, "vkGetImageSparseMemoryRequirements"); + table->QueueBindSparse = (PFN_vkQueueBindSparse)gpa(device, "vkQueueBindSparse"); + table->CreateFence = (PFN_vkCreateFence)gpa(device, "vkCreateFence"); + table->DestroyFence = (PFN_vkDestroyFence)gpa(device, "vkDestroyFence"); + table->ResetFences = (PFN_vkResetFences)gpa(device, "vkResetFences"); + table->GetFenceStatus = (PFN_vkGetFenceStatus)gpa(device, "vkGetFenceStatus"); + table->WaitForFences = (PFN_vkWaitForFences)gpa(device, "vkWaitForFences"); + table->CreateSemaphore = (PFN_vkCreateSemaphore)gpa(device, "vkCreateSemaphore"); + table->DestroySemaphore = (PFN_vkDestroySemaphore)gpa(device, "vkDestroySemaphore"); + table->CreateEvent = (PFN_vkCreateEvent)gpa(device, "vkCreateEvent"); + table->DestroyEvent = (PFN_vkDestroyEvent)gpa(device, "vkDestroyEvent"); + table->GetEventStatus = (PFN_vkGetEventStatus)gpa(device, "vkGetEventStatus"); + table->SetEvent = (PFN_vkSetEvent)gpa(device, "vkSetEvent"); + table->ResetEvent = (PFN_vkResetEvent)gpa(device, "vkResetEvent"); + table->CreateQueryPool = (PFN_vkCreateQueryPool)gpa(device, "vkCreateQueryPool"); + table->DestroyQueryPool = (PFN_vkDestroyQueryPool)gpa(device, "vkDestroyQueryPool"); + table->GetQueryPoolResults = (PFN_vkGetQueryPoolResults)gpa(device, "vkGetQueryPoolResults"); + table->CreateBuffer = (PFN_vkCreateBuffer)gpa(device, "vkCreateBuffer"); + table->DestroyBuffer = (PFN_vkDestroyBuffer)gpa(device, "vkDestroyBuffer"); + table->CreateBufferView = (PFN_vkCreateBufferView)gpa(device, "vkCreateBufferView"); + table->DestroyBufferView = (PFN_vkDestroyBufferView)gpa(device, "vkDestroyBufferView"); + table->CreateImage = (PFN_vkCreateImage)gpa(device, "vkCreateImage"); + table->DestroyImage = (PFN_vkDestroyImage)gpa(device, "vkDestroyImage"); + table->GetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)gpa(device, "vkGetImageSubresourceLayout"); + table->CreateImageView = (PFN_vkCreateImageView)gpa(device, "vkCreateImageView"); + table->DestroyImageView = (PFN_vkDestroyImageView)gpa(device, "vkDestroyImageView"); + table->CreateShaderModule = (PFN_vkCreateShaderModule)gpa(device, "vkCreateShaderModule"); + table->DestroyShaderModule = (PFN_vkDestroyShaderModule)gpa(device, "vkDestroyShaderModule"); + table->CreatePipelineCache = (PFN_vkCreatePipelineCache)gpa(device, "vkCreatePipelineCache"); + table->DestroyPipelineCache = (PFN_vkDestroyPipelineCache)gpa(device, "vkDestroyPipelineCache"); + table->GetPipelineCacheData = (PFN_vkGetPipelineCacheData)gpa(device, "vkGetPipelineCacheData"); + table->MergePipelineCaches = (PFN_vkMergePipelineCaches)gpa(device, "vkMergePipelineCaches"); + table->CreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)gpa(device, "vkCreateGraphicsPipelines"); + table->CreateComputePipelines = (PFN_vkCreateComputePipelines)gpa(device, "vkCreateComputePipelines"); + table->DestroyPipeline = (PFN_vkDestroyPipeline)gpa(device, "vkDestroyPipeline"); + table->CreatePipelineLayout = (PFN_vkCreatePipelineLayout)gpa(device, "vkCreatePipelineLayout"); + table->DestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)gpa(device, "vkDestroyPipelineLayout"); + table->CreateSampler = (PFN_vkCreateSampler)gpa(device, "vkCreateSampler"); + table->DestroySampler = (PFN_vkDestroySampler)gpa(device, "vkDestroySampler"); + table->CreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)gpa(device, "vkCreateDescriptorSetLayout"); + table->DestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)gpa(device, "vkDestroyDescriptorSetLayout"); + table->CreateDescriptorPool = (PFN_vkCreateDescriptorPool)gpa(device, "vkCreateDescriptorPool"); + table->DestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)gpa(device, "vkDestroyDescriptorPool"); + table->ResetDescriptorPool = (PFN_vkResetDescriptorPool)gpa(device, "vkResetDescriptorPool"); + table->AllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)gpa(device, "vkAllocateDescriptorSets"); + table->FreeDescriptorSets = (PFN_vkFreeDescriptorSets)gpa(device, "vkFreeDescriptorSets"); + table->UpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)gpa(device, "vkUpdateDescriptorSets"); + table->CreateFramebuffer = (PFN_vkCreateFramebuffer)gpa(device, "vkCreateFramebuffer"); + table->DestroyFramebuffer = (PFN_vkDestroyFramebuffer)gpa(device, "vkDestroyFramebuffer"); + table->CreateRenderPass = (PFN_vkCreateRenderPass)gpa(device, "vkCreateRenderPass"); + table->DestroyRenderPass = (PFN_vkDestroyRenderPass)gpa(device, "vkDestroyRenderPass"); + table->GetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)gpa(device, "vkGetRenderAreaGranularity"); + table->CreateCommandPool = (PFN_vkCreateCommandPool)gpa(device, "vkCreateCommandPool"); + table->DestroyCommandPool = (PFN_vkDestroyCommandPool)gpa(device, "vkDestroyCommandPool"); + table->ResetCommandPool = (PFN_vkResetCommandPool)gpa(device, "vkResetCommandPool"); + table->AllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)gpa(device, "vkAllocateCommandBuffers"); + table->FreeCommandBuffers = (PFN_vkFreeCommandBuffers)gpa(device, "vkFreeCommandBuffers"); + table->BeginCommandBuffer = (PFN_vkBeginCommandBuffer)gpa(device, "vkBeginCommandBuffer"); + table->EndCommandBuffer = (PFN_vkEndCommandBuffer)gpa(device, "vkEndCommandBuffer"); + table->ResetCommandBuffer = (PFN_vkResetCommandBuffer)gpa(device, "vkResetCommandBuffer"); + table->CmdBindPipeline = (PFN_vkCmdBindPipeline)gpa(device, "vkCmdBindPipeline"); + table->CmdSetViewport = (PFN_vkCmdSetViewport)gpa(device, "vkCmdSetViewport"); + table->CmdSetScissor = (PFN_vkCmdSetScissor)gpa(device, "vkCmdSetScissor"); + table->CmdSetLineWidth = (PFN_vkCmdSetLineWidth)gpa(device, "vkCmdSetLineWidth"); + table->CmdSetDepthBias = (PFN_vkCmdSetDepthBias)gpa(device, "vkCmdSetDepthBias"); + table->CmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)gpa(device, "vkCmdSetBlendConstants"); + table->CmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)gpa(device, "vkCmdSetDepthBounds"); + table->CmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)gpa(device, "vkCmdSetStencilCompareMask"); + table->CmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)gpa(device, "vkCmdSetStencilWriteMask"); + table->CmdSetStencilReference = (PFN_vkCmdSetStencilReference)gpa(device, "vkCmdSetStencilReference"); + table->CmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)gpa(device, "vkCmdBindDescriptorSets"); + table->CmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)gpa(device, "vkCmdBindIndexBuffer"); + table->CmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)gpa(device, "vkCmdBindVertexBuffers"); + table->CmdDraw = (PFN_vkCmdDraw)gpa(device, "vkCmdDraw"); + table->CmdDrawIndexed = (PFN_vkCmdDrawIndexed)gpa(device, "vkCmdDrawIndexed"); + table->CmdDrawIndirect = (PFN_vkCmdDrawIndirect)gpa(device, "vkCmdDrawIndirect"); + table->CmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)gpa(device, "vkCmdDrawIndexedIndirect"); + table->CmdDispatch = (PFN_vkCmdDispatch)gpa(device, "vkCmdDispatch"); + table->CmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)gpa(device, "vkCmdDispatchIndirect"); + table->CmdCopyBuffer = (PFN_vkCmdCopyBuffer)gpa(device, "vkCmdCopyBuffer"); + table->CmdCopyImage = (PFN_vkCmdCopyImage)gpa(device, "vkCmdCopyImage"); + table->CmdBlitImage = (PFN_vkCmdBlitImage)gpa(device, "vkCmdBlitImage"); + table->CmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)gpa(device, "vkCmdCopyBufferToImage"); + table->CmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)gpa(device, "vkCmdCopyImageToBuffer"); + table->CmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)gpa(device, "vkCmdUpdateBuffer"); + table->CmdFillBuffer = (PFN_vkCmdFillBuffer)gpa(device, "vkCmdFillBuffer"); + table->CmdClearColorImage = (PFN_vkCmdClearColorImage)gpa(device, "vkCmdClearColorImage"); + table->CmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)gpa(device, "vkCmdClearDepthStencilImage"); + table->CmdClearAttachments = (PFN_vkCmdClearAttachments)gpa(device, "vkCmdClearAttachments"); + table->CmdResolveImage = (PFN_vkCmdResolveImage)gpa(device, "vkCmdResolveImage"); + table->CmdSetEvent = (PFN_vkCmdSetEvent)gpa(device, "vkCmdSetEvent"); + table->CmdResetEvent = (PFN_vkCmdResetEvent)gpa(device, "vkCmdResetEvent"); + table->CmdWaitEvents = (PFN_vkCmdWaitEvents)gpa(device, "vkCmdWaitEvents"); + table->CmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)gpa(device, "vkCmdPipelineBarrier"); + table->CmdBeginQuery = (PFN_vkCmdBeginQuery)gpa(device, "vkCmdBeginQuery"); + table->CmdEndQuery = (PFN_vkCmdEndQuery)gpa(device, "vkCmdEndQuery"); + table->CmdResetQueryPool = (PFN_vkCmdResetQueryPool)gpa(device, "vkCmdResetQueryPool"); + table->CmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)gpa(device, "vkCmdWriteTimestamp"); + table->CmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)gpa(device, "vkCmdCopyQueryPoolResults"); + table->CmdPushConstants = (PFN_vkCmdPushConstants)gpa(device, "vkCmdPushConstants"); + table->CmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)gpa(device, "vkCmdBeginRenderPass"); + table->CmdNextSubpass = (PFN_vkCmdNextSubpass)gpa(device, "vkCmdNextSubpass"); + table->CmdEndRenderPass = (PFN_vkCmdEndRenderPass)gpa(device, "vkCmdEndRenderPass"); + table->CmdExecuteCommands = (PFN_vkCmdExecuteCommands)gpa(device, "vkCmdExecuteCommands"); + table->BindBufferMemory2 = (PFN_vkBindBufferMemory2)gpa(device, "vkBindBufferMemory2"); + table->BindImageMemory2 = (PFN_vkBindImageMemory2)gpa(device, "vkBindImageMemory2"); + table->GetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)gpa(device, "vkGetDeviceGroupPeerMemoryFeatures"); + table->CmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)gpa(device, "vkCmdSetDeviceMask"); + table->CmdDispatchBase = (PFN_vkCmdDispatchBase)gpa(device, "vkCmdDispatchBase"); + table->GetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)gpa(device, "vkGetImageMemoryRequirements2"); + table->GetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)gpa(device, "vkGetBufferMemoryRequirements2"); + table->GetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)gpa(device, "vkGetImageSparseMemoryRequirements2"); + table->TrimCommandPool = (PFN_vkTrimCommandPool)gpa(device, "vkTrimCommandPool"); + table->GetDeviceQueue2 = (PFN_vkGetDeviceQueue2)gpa(device, "vkGetDeviceQueue2"); + table->CreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)gpa(device, "vkCreateSamplerYcbcrConversion"); + table->DestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)gpa(device, "vkDestroySamplerYcbcrConversion"); + table->CreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)gpa(device, "vkCreateDescriptorUpdateTemplate"); + table->DestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)gpa(device, "vkDestroyDescriptorUpdateTemplate"); + table->UpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)gpa(device, "vkUpdateDescriptorSetWithTemplate"); + table->GetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)gpa(device, "vkGetDescriptorSetLayoutSupport"); + table->CmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)gpa(device, "vkCmdDrawIndirectCount"); + table->CmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)gpa(device, "vkCmdDrawIndexedIndirectCount"); + table->CreateRenderPass2 = (PFN_vkCreateRenderPass2)gpa(device, "vkCreateRenderPass2"); + table->CmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)gpa(device, "vkCmdBeginRenderPass2"); + table->CmdNextSubpass2 = (PFN_vkCmdNextSubpass2)gpa(device, "vkCmdNextSubpass2"); + table->CmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)gpa(device, "vkCmdEndRenderPass2"); + table->ResetQueryPool = (PFN_vkResetQueryPool)gpa(device, "vkResetQueryPool"); + table->GetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)gpa(device, "vkGetSemaphoreCounterValue"); + table->WaitSemaphores = (PFN_vkWaitSemaphores)gpa(device, "vkWaitSemaphores"); + table->SignalSemaphore = (PFN_vkSignalSemaphore)gpa(device, "vkSignalSemaphore"); + table->GetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)gpa(device, "vkGetBufferDeviceAddress"); + table->GetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)gpa(device, "vkGetBufferOpaqueCaptureAddress"); + table->GetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)gpa(device, "vkGetDeviceMemoryOpaqueCaptureAddress"); + table->CreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)gpa(device, "vkCreatePrivateDataSlot"); + table->DestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)gpa(device, "vkDestroyPrivateDataSlot"); + table->SetPrivateData = (PFN_vkSetPrivateData)gpa(device, "vkSetPrivateData"); + table->GetPrivateData = (PFN_vkGetPrivateData)gpa(device, "vkGetPrivateData"); + table->CmdSetEvent2 = (PFN_vkCmdSetEvent2)gpa(device, "vkCmdSetEvent2"); + table->CmdResetEvent2 = (PFN_vkCmdResetEvent2)gpa(device, "vkCmdResetEvent2"); + table->CmdWaitEvents2 = (PFN_vkCmdWaitEvents2)gpa(device, "vkCmdWaitEvents2"); + table->CmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)gpa(device, "vkCmdPipelineBarrier2"); + table->CmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)gpa(device, "vkCmdWriteTimestamp2"); + table->QueueSubmit2 = (PFN_vkQueueSubmit2)gpa(device, "vkQueueSubmit2"); + table->CmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)gpa(device, "vkCmdCopyBuffer2"); + table->CmdCopyImage2 = (PFN_vkCmdCopyImage2)gpa(device, "vkCmdCopyImage2"); + table->CmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)gpa(device, "vkCmdCopyBufferToImage2"); + table->CmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)gpa(device, "vkCmdCopyImageToBuffer2"); + table->CmdBlitImage2 = (PFN_vkCmdBlitImage2)gpa(device, "vkCmdBlitImage2"); + table->CmdResolveImage2 = (PFN_vkCmdResolveImage2)gpa(device, "vkCmdResolveImage2"); + table->CmdBeginRendering = (PFN_vkCmdBeginRendering)gpa(device, "vkCmdBeginRendering"); + table->CmdEndRendering = (PFN_vkCmdEndRendering)gpa(device, "vkCmdEndRendering"); + table->CmdSetCullMode = (PFN_vkCmdSetCullMode)gpa(device, "vkCmdSetCullMode"); + table->CmdSetFrontFace = (PFN_vkCmdSetFrontFace)gpa(device, "vkCmdSetFrontFace"); + table->CmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)gpa(device, "vkCmdSetPrimitiveTopology"); + table->CmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)gpa(device, "vkCmdSetViewportWithCount"); + table->CmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)gpa(device, "vkCmdSetScissorWithCount"); + table->CmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)gpa(device, "vkCmdBindVertexBuffers2"); + table->CmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)gpa(device, "vkCmdSetDepthTestEnable"); + table->CmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)gpa(device, "vkCmdSetDepthWriteEnable"); + table->CmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)gpa(device, "vkCmdSetDepthCompareOp"); + table->CmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)gpa(device, "vkCmdSetDepthBoundsTestEnable"); + table->CmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)gpa(device, "vkCmdSetStencilTestEnable"); + table->CmdSetStencilOp = (PFN_vkCmdSetStencilOp)gpa(device, "vkCmdSetStencilOp"); + table->CmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)gpa(device, "vkCmdSetRasterizerDiscardEnable"); + table->CmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)gpa(device, "vkCmdSetDepthBiasEnable"); + table->CmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)gpa(device, "vkCmdSetPrimitiveRestartEnable"); + table->GetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)gpa(device, "vkGetDeviceBufferMemoryRequirements"); + table->GetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)gpa(device, "vkGetDeviceImageMemoryRequirements"); + table->GetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)gpa(device, "vkGetDeviceImageSparseMemoryRequirements"); + table->CmdSetLineStipple = (PFN_vkCmdSetLineStipple)gpa(device, "vkCmdSetLineStipple"); + table->MapMemory2 = (PFN_vkMapMemory2)gpa(device, "vkMapMemory2"); + table->UnmapMemory2 = (PFN_vkUnmapMemory2)gpa(device, "vkUnmapMemory2"); + table->CmdBindIndexBuffer2 = (PFN_vkCmdBindIndexBuffer2)gpa(device, "vkCmdBindIndexBuffer2"); + table->GetRenderingAreaGranularity = (PFN_vkGetRenderingAreaGranularity)gpa(device, "vkGetRenderingAreaGranularity"); + table->GetDeviceImageSubresourceLayout = (PFN_vkGetDeviceImageSubresourceLayout)gpa(device, "vkGetDeviceImageSubresourceLayout"); + table->GetImageSubresourceLayout2 = (PFN_vkGetImageSubresourceLayout2)gpa(device, "vkGetImageSubresourceLayout2"); + table->CmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSet)gpa(device, "vkCmdPushDescriptorSet"); + table->CmdPushDescriptorSetWithTemplate = (PFN_vkCmdPushDescriptorSetWithTemplate)gpa(device, "vkCmdPushDescriptorSetWithTemplate"); + table->CmdSetRenderingAttachmentLocations = (PFN_vkCmdSetRenderingAttachmentLocations)gpa(device, "vkCmdSetRenderingAttachmentLocations"); + table->CmdSetRenderingInputAttachmentIndices = (PFN_vkCmdSetRenderingInputAttachmentIndices)gpa(device, "vkCmdSetRenderingInputAttachmentIndices"); + table->CmdBindDescriptorSets2 = (PFN_vkCmdBindDescriptorSets2)gpa(device, "vkCmdBindDescriptorSets2"); + table->CmdPushConstants2 = (PFN_vkCmdPushConstants2)gpa(device, "vkCmdPushConstants2"); + table->CmdPushDescriptorSet2 = (PFN_vkCmdPushDescriptorSet2)gpa(device, "vkCmdPushDescriptorSet2"); + table->CmdPushDescriptorSetWithTemplate2 = (PFN_vkCmdPushDescriptorSetWithTemplate2)gpa(device, "vkCmdPushDescriptorSetWithTemplate2"); + table->CopyMemoryToImage = (PFN_vkCopyMemoryToImage)gpa(device, "vkCopyMemoryToImage"); + table->CopyImageToMemory = (PFN_vkCopyImageToMemory)gpa(device, "vkCopyImageToMemory"); + table->CopyImageToImage = (PFN_vkCopyImageToImage)gpa(device, "vkCopyImageToImage"); + table->TransitionImageLayout = (PFN_vkTransitionImageLayout)gpa(device, "vkTransitionImageLayout"); + table->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpa(device, "vkCreateSwapchainKHR"); + table->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)gpa(device, "vkDestroySwapchainKHR"); + table->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)gpa(device, "vkGetSwapchainImagesKHR"); + table->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)gpa(device, "vkAcquireNextImageKHR"); + table->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(device, "vkQueuePresentKHR"); + table->GetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)gpa(device, "vkGetDeviceGroupPresentCapabilitiesKHR"); + table->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)gpa(device, "vkGetDeviceGroupSurfacePresentModesKHR"); + table->AcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)gpa(device, "vkAcquireNextImage2KHR"); + table->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)gpa(device, "vkCreateSharedSwapchainsKHR"); + table->CreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)gpa(device, "vkCreateVideoSessionKHR"); + table->DestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)gpa(device, "vkDestroyVideoSessionKHR"); + table->GetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)gpa(device, "vkGetVideoSessionMemoryRequirementsKHR"); + table->BindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)gpa(device, "vkBindVideoSessionMemoryKHR"); + table->CreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)gpa(device, "vkCreateVideoSessionParametersKHR"); + table->UpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)gpa(device, "vkUpdateVideoSessionParametersKHR"); + table->DestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)gpa(device, "vkDestroyVideoSessionParametersKHR"); + table->CmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR)gpa(device, "vkCmdBeginVideoCodingKHR"); + table->CmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR)gpa(device, "vkCmdEndVideoCodingKHR"); + table->CmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR)gpa(device, "vkCmdControlVideoCodingKHR"); + table->CmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)gpa(device, "vkCmdDecodeVideoKHR"); + table->CmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)gpa(device, "vkCmdBeginRenderingKHR"); + table->CmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)gpa(device, "vkCmdEndRenderingKHR"); + table->GetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)gpa(device, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); + table->CmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)gpa(device, "vkCmdSetDeviceMaskKHR"); + table->CmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)gpa(device, "vkCmdDispatchBaseKHR"); + table->TrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)gpa(device, "vkTrimCommandPoolKHR"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)gpa(device, "vkGetMemoryWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)gpa(device, "vkGetMemoryWin32HandlePropertiesKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->GetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)gpa(device, "vkGetMemoryFdKHR"); + table->GetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)gpa(device, "vkGetMemoryFdPropertiesKHR"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->ImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)gpa(device, "vkImportSemaphoreWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)gpa(device, "vkGetSemaphoreWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->ImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)gpa(device, "vkImportSemaphoreFdKHR"); + table->GetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)gpa(device, "vkGetSemaphoreFdKHR"); + table->CmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)gpa(device, "vkCmdPushDescriptorSetKHR"); + table->CmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)gpa(device, "vkCmdPushDescriptorSetWithTemplateKHR"); + table->CreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)gpa(device, "vkCreateDescriptorUpdateTemplateKHR"); + table->DestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)gpa(device, "vkDestroyDescriptorUpdateTemplateKHR"); + table->UpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)gpa(device, "vkUpdateDescriptorSetWithTemplateKHR"); + table->CreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)gpa(device, "vkCreateRenderPass2KHR"); + table->CmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)gpa(device, "vkCmdBeginRenderPass2KHR"); + table->CmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)gpa(device, "vkCmdNextSubpass2KHR"); + table->CmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)gpa(device, "vkCmdEndRenderPass2KHR"); + table->GetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)gpa(device, "vkGetSwapchainStatusKHR"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->ImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)gpa(device, "vkImportFenceWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)gpa(device, "vkGetFenceWin32HandleKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->ImportFenceFdKHR = (PFN_vkImportFenceFdKHR)gpa(device, "vkImportFenceFdKHR"); + table->GetFenceFdKHR = (PFN_vkGetFenceFdKHR)gpa(device, "vkGetFenceFdKHR"); + table->AcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)gpa(device, "vkAcquireProfilingLockKHR"); + table->ReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)gpa(device, "vkReleaseProfilingLockKHR"); + table->GetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)gpa(device, "vkGetImageMemoryRequirements2KHR"); + table->GetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)gpa(device, "vkGetBufferMemoryRequirements2KHR"); + table->GetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)gpa(device, "vkGetImageSparseMemoryRequirements2KHR"); + table->CreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)gpa(device, "vkCreateSamplerYcbcrConversionKHR"); + table->DestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)gpa(device, "vkDestroySamplerYcbcrConversionKHR"); + table->BindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)gpa(device, "vkBindBufferMemory2KHR"); + table->BindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)gpa(device, "vkBindImageMemory2KHR"); + table->GetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)gpa(device, "vkGetDescriptorSetLayoutSupportKHR"); + table->CmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)gpa(device, "vkCmdDrawIndirectCountKHR"); + table->CmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)gpa(device, "vkCmdDrawIndexedIndirectCountKHR"); + table->GetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)gpa(device, "vkGetSemaphoreCounterValueKHR"); + table->WaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)gpa(device, "vkWaitSemaphoresKHR"); + table->SignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)gpa(device, "vkSignalSemaphoreKHR"); + table->CmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)gpa(device, "vkCmdSetFragmentShadingRateKHR"); + table->CmdSetRenderingAttachmentLocationsKHR = (PFN_vkCmdSetRenderingAttachmentLocationsKHR)gpa(device, "vkCmdSetRenderingAttachmentLocationsKHR"); + table->CmdSetRenderingInputAttachmentIndicesKHR = (PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)gpa(device, "vkCmdSetRenderingInputAttachmentIndicesKHR"); + table->WaitForPresentKHR = (PFN_vkWaitForPresentKHR)gpa(device, "vkWaitForPresentKHR"); + table->GetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)gpa(device, "vkGetBufferDeviceAddressKHR"); + table->GetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)gpa(device, "vkGetBufferOpaqueCaptureAddressKHR"); + table->GetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)gpa(device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); + table->CreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)gpa(device, "vkCreateDeferredOperationKHR"); + table->DestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)gpa(device, "vkDestroyDeferredOperationKHR"); + table->GetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)gpa(device, "vkGetDeferredOperationMaxConcurrencyKHR"); + table->GetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)gpa(device, "vkGetDeferredOperationResultKHR"); + table->DeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)gpa(device, "vkDeferredOperationJoinKHR"); + table->GetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)gpa(device, "vkGetPipelineExecutablePropertiesKHR"); + table->GetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)gpa(device, "vkGetPipelineExecutableStatisticsKHR"); + table->GetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)gpa(device, "vkGetPipelineExecutableInternalRepresentationsKHR"); + table->MapMemory2KHR = (PFN_vkMapMemory2KHR)gpa(device, "vkMapMemory2KHR"); + table->UnmapMemory2KHR = (PFN_vkUnmapMemory2KHR)gpa(device, "vkUnmapMemory2KHR"); + table->GetEncodedVideoSessionParametersKHR = (PFN_vkGetEncodedVideoSessionParametersKHR)gpa(device, "vkGetEncodedVideoSessionParametersKHR"); + table->CmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)gpa(device, "vkCmdEncodeVideoKHR"); + table->CmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)gpa(device, "vkCmdSetEvent2KHR"); + table->CmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)gpa(device, "vkCmdResetEvent2KHR"); + table->CmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)gpa(device, "vkCmdWaitEvents2KHR"); + table->CmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)gpa(device, "vkCmdPipelineBarrier2KHR"); + table->CmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)gpa(device, "vkCmdWriteTimestamp2KHR"); + table->QueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)gpa(device, "vkQueueSubmit2KHR"); + table->CmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)gpa(device, "vkCmdCopyBuffer2KHR"); + table->CmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)gpa(device, "vkCmdCopyImage2KHR"); + table->CmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)gpa(device, "vkCmdCopyBufferToImage2KHR"); + table->CmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)gpa(device, "vkCmdCopyImageToBuffer2KHR"); + table->CmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)gpa(device, "vkCmdBlitImage2KHR"); + table->CmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)gpa(device, "vkCmdResolveImage2KHR"); + table->CmdTraceRaysIndirect2KHR = (PFN_vkCmdTraceRaysIndirect2KHR)gpa(device, "vkCmdTraceRaysIndirect2KHR"); + table->GetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)gpa(device, "vkGetDeviceBufferMemoryRequirementsKHR"); + table->GetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)gpa(device, "vkGetDeviceImageMemoryRequirementsKHR"); + table->GetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)gpa(device, "vkGetDeviceImageSparseMemoryRequirementsKHR"); + table->CmdBindIndexBuffer2KHR = (PFN_vkCmdBindIndexBuffer2KHR)gpa(device, "vkCmdBindIndexBuffer2KHR"); + table->GetRenderingAreaGranularityKHR = (PFN_vkGetRenderingAreaGranularityKHR)gpa(device, "vkGetRenderingAreaGranularityKHR"); + table->GetDeviceImageSubresourceLayoutKHR = (PFN_vkGetDeviceImageSubresourceLayoutKHR)gpa(device, "vkGetDeviceImageSubresourceLayoutKHR"); + table->GetImageSubresourceLayout2KHR = (PFN_vkGetImageSubresourceLayout2KHR)gpa(device, "vkGetImageSubresourceLayout2KHR"); + table->WaitForPresent2KHR = (PFN_vkWaitForPresent2KHR)gpa(device, "vkWaitForPresent2KHR"); + table->CreatePipelineBinariesKHR = (PFN_vkCreatePipelineBinariesKHR)gpa(device, "vkCreatePipelineBinariesKHR"); + table->DestroyPipelineBinaryKHR = (PFN_vkDestroyPipelineBinaryKHR)gpa(device, "vkDestroyPipelineBinaryKHR"); + table->GetPipelineKeyKHR = (PFN_vkGetPipelineKeyKHR)gpa(device, "vkGetPipelineKeyKHR"); + table->GetPipelineBinaryDataKHR = (PFN_vkGetPipelineBinaryDataKHR)gpa(device, "vkGetPipelineBinaryDataKHR"); + table->ReleaseCapturedPipelineDataKHR = (PFN_vkReleaseCapturedPipelineDataKHR)gpa(device, "vkReleaseCapturedPipelineDataKHR"); + table->ReleaseSwapchainImagesKHR = (PFN_vkReleaseSwapchainImagesKHR)gpa(device, "vkReleaseSwapchainImagesKHR"); + table->CmdSetLineStippleKHR = (PFN_vkCmdSetLineStippleKHR)gpa(device, "vkCmdSetLineStippleKHR"); + table->GetCalibratedTimestampsKHR = (PFN_vkGetCalibratedTimestampsKHR)gpa(device, "vkGetCalibratedTimestampsKHR"); + table->CmdBindDescriptorSets2KHR = (PFN_vkCmdBindDescriptorSets2KHR)gpa(device, "vkCmdBindDescriptorSets2KHR"); + table->CmdPushConstants2KHR = (PFN_vkCmdPushConstants2KHR)gpa(device, "vkCmdPushConstants2KHR"); + table->CmdPushDescriptorSet2KHR = (PFN_vkCmdPushDescriptorSet2KHR)gpa(device, "vkCmdPushDescriptorSet2KHR"); + table->CmdPushDescriptorSetWithTemplate2KHR = (PFN_vkCmdPushDescriptorSetWithTemplate2KHR)gpa(device, "vkCmdPushDescriptorSetWithTemplate2KHR"); + table->CmdSetDescriptorBufferOffsets2EXT = (PFN_vkCmdSetDescriptorBufferOffsets2EXT)gpa(device, "vkCmdSetDescriptorBufferOffsets2EXT"); + table->CmdBindDescriptorBufferEmbeddedSamplers2EXT = (PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT)gpa(device, "vkCmdBindDescriptorBufferEmbeddedSamplers2EXT"); + table->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)gpa(device, "vkDebugMarkerSetObjectTagEXT"); + table->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)gpa(device, "vkDebugMarkerSetObjectNameEXT"); + table->CmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)gpa(device, "vkCmdDebugMarkerBeginEXT"); + table->CmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)gpa(device, "vkCmdDebugMarkerEndEXT"); + table->CmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)gpa(device, "vkCmdDebugMarkerInsertEXT"); + table->CmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)gpa(device, "vkCmdBindTransformFeedbackBuffersEXT"); + table->CmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)gpa(device, "vkCmdBeginTransformFeedbackEXT"); + table->CmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)gpa(device, "vkCmdEndTransformFeedbackEXT"); + table->CmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)gpa(device, "vkCmdBeginQueryIndexedEXT"); + table->CmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)gpa(device, "vkCmdEndQueryIndexedEXT"); + table->CmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)gpa(device, "vkCmdDrawIndirectByteCountEXT"); + table->CreateCuModuleNVX = (PFN_vkCreateCuModuleNVX)gpa(device, "vkCreateCuModuleNVX"); + table->CreateCuFunctionNVX = (PFN_vkCreateCuFunctionNVX)gpa(device, "vkCreateCuFunctionNVX"); + table->DestroyCuModuleNVX = (PFN_vkDestroyCuModuleNVX)gpa(device, "vkDestroyCuModuleNVX"); + table->DestroyCuFunctionNVX = (PFN_vkDestroyCuFunctionNVX)gpa(device, "vkDestroyCuFunctionNVX"); + table->CmdCuLaunchKernelNVX = (PFN_vkCmdCuLaunchKernelNVX)gpa(device, "vkCmdCuLaunchKernelNVX"); + table->GetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)gpa(device, "vkGetImageViewHandleNVX"); + table->GetImageViewHandle64NVX = (PFN_vkGetImageViewHandle64NVX)gpa(device, "vkGetImageViewHandle64NVX"); + table->GetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)gpa(device, "vkGetImageViewAddressNVX"); + table->CmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)gpa(device, "vkCmdDrawIndirectCountAMD"); + table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)gpa(device, "vkCmdDrawIndexedIndirectCountAMD"); + table->GetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)gpa(device, "vkGetShaderInfoAMD"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)gpa(device, "vkGetMemoryWin32HandleNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->CmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)gpa(device, "vkCmdBeginConditionalRenderingEXT"); + table->CmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)gpa(device, "vkCmdEndConditionalRenderingEXT"); + table->CmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)gpa(device, "vkCmdSetViewportWScalingNV"); + table->DisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)gpa(device, "vkDisplayPowerControlEXT"); + table->RegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)gpa(device, "vkRegisterDeviceEventEXT"); + table->RegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)gpa(device, "vkRegisterDisplayEventEXT"); + table->GetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)gpa(device, "vkGetSwapchainCounterEXT"); + table->GetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)gpa(device, "vkGetRefreshCycleDurationGOOGLE"); + table->GetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)gpa(device, "vkGetPastPresentationTimingGOOGLE"); + table->CmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)gpa(device, "vkCmdSetDiscardRectangleEXT"); + table->CmdSetDiscardRectangleEnableEXT = (PFN_vkCmdSetDiscardRectangleEnableEXT)gpa(device, "vkCmdSetDiscardRectangleEnableEXT"); + table->CmdSetDiscardRectangleModeEXT = (PFN_vkCmdSetDiscardRectangleModeEXT)gpa(device, "vkCmdSetDiscardRectangleModeEXT"); + table->SetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)gpa(device, "vkSetHdrMetadataEXT"); + table->SetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)gpa(device, "vkSetDebugUtilsObjectNameEXT"); + table->SetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)gpa(device, "vkSetDebugUtilsObjectTagEXT"); + table->QueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)gpa(device, "vkQueueBeginDebugUtilsLabelEXT"); + table->QueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)gpa(device, "vkQueueEndDebugUtilsLabelEXT"); + table->QueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT)gpa(device, "vkQueueInsertDebugUtilsLabelEXT"); + table->CmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)gpa(device, "vkCmdBeginDebugUtilsLabelEXT"); + table->CmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)gpa(device, "vkCmdEndDebugUtilsLabelEXT"); + table->CmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)gpa(device, "vkCmdInsertDebugUtilsLabelEXT"); +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + table->GetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)gpa(device, "vkGetAndroidHardwareBufferPropertiesANDROID"); +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + table->GetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)gpa(device, "vkGetMemoryAndroidHardwareBufferANDROID"); +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CreateExecutionGraphPipelinesAMDX = (PFN_vkCreateExecutionGraphPipelinesAMDX)gpa(device, "vkCreateExecutionGraphPipelinesAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->GetExecutionGraphPipelineScratchSizeAMDX = (PFN_vkGetExecutionGraphPipelineScratchSizeAMDX)gpa(device, "vkGetExecutionGraphPipelineScratchSizeAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->GetExecutionGraphPipelineNodeIndexAMDX = (PFN_vkGetExecutionGraphPipelineNodeIndexAMDX)gpa(device, "vkGetExecutionGraphPipelineNodeIndexAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdInitializeGraphScratchMemoryAMDX = (PFN_vkCmdInitializeGraphScratchMemoryAMDX)gpa(device, "vkCmdInitializeGraphScratchMemoryAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdDispatchGraphAMDX = (PFN_vkCmdDispatchGraphAMDX)gpa(device, "vkCmdDispatchGraphAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdDispatchGraphIndirectAMDX = (PFN_vkCmdDispatchGraphIndirectAMDX)gpa(device, "vkCmdDispatchGraphIndirectAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdDispatchGraphIndirectCountAMDX = (PFN_vkCmdDispatchGraphIndirectCountAMDX)gpa(device, "vkCmdDispatchGraphIndirectCountAMDX"); +#endif // VK_ENABLE_BETA_EXTENSIONS + table->CmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)gpa(device, "vkCmdSetSampleLocationsEXT"); + table->GetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)gpa(device, "vkGetImageDrmFormatModifierPropertiesEXT"); + table->CreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)gpa(device, "vkCreateValidationCacheEXT"); + table->DestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)gpa(device, "vkDestroyValidationCacheEXT"); + table->MergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)gpa(device, "vkMergeValidationCachesEXT"); + table->GetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)gpa(device, "vkGetValidationCacheDataEXT"); + table->CmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)gpa(device, "vkCmdBindShadingRateImageNV"); + table->CmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)gpa(device, "vkCmdSetViewportShadingRatePaletteNV"); + table->CmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)gpa(device, "vkCmdSetCoarseSampleOrderNV"); + table->CreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)gpa(device, "vkCreateAccelerationStructureNV"); + table->DestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)gpa(device, "vkDestroyAccelerationStructureNV"); + table->GetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)gpa(device, "vkGetAccelerationStructureMemoryRequirementsNV"); + table->BindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)gpa(device, "vkBindAccelerationStructureMemoryNV"); + table->CmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)gpa(device, "vkCmdBuildAccelerationStructureNV"); + table->CmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)gpa(device, "vkCmdCopyAccelerationStructureNV"); + table->CmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)gpa(device, "vkCmdTraceRaysNV"); + table->CreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)gpa(device, "vkCreateRayTracingPipelinesNV"); + table->GetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)gpa(device, "vkGetRayTracingShaderGroupHandlesKHR"); + table->GetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)gpa(device, "vkGetRayTracingShaderGroupHandlesNV"); + table->GetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)gpa(device, "vkGetAccelerationStructureHandleNV"); + table->CmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)gpa(device, "vkCmdWriteAccelerationStructuresPropertiesNV"); + table->CompileDeferredNV = (PFN_vkCompileDeferredNV)gpa(device, "vkCompileDeferredNV"); + table->GetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)gpa(device, "vkGetMemoryHostPointerPropertiesEXT"); + table->CmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)gpa(device, "vkCmdWriteBufferMarkerAMD"); + table->CmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD)gpa(device, "vkCmdWriteBufferMarker2AMD"); + table->GetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)gpa(device, "vkGetCalibratedTimestampsEXT"); + table->CmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)gpa(device, "vkCmdDrawMeshTasksNV"); + table->CmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)gpa(device, "vkCmdDrawMeshTasksIndirectNV"); + table->CmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)gpa(device, "vkCmdDrawMeshTasksIndirectCountNV"); + table->CmdSetExclusiveScissorEnableNV = (PFN_vkCmdSetExclusiveScissorEnableNV)gpa(device, "vkCmdSetExclusiveScissorEnableNV"); + table->CmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)gpa(device, "vkCmdSetExclusiveScissorNV"); + table->CmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)gpa(device, "vkCmdSetCheckpointNV"); + table->GetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)gpa(device, "vkGetQueueCheckpointDataNV"); + table->GetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV)gpa(device, "vkGetQueueCheckpointData2NV"); + table->InitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)gpa(device, "vkInitializePerformanceApiINTEL"); + table->UninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)gpa(device, "vkUninitializePerformanceApiINTEL"); + table->CmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)gpa(device, "vkCmdSetPerformanceMarkerINTEL"); + table->CmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)gpa(device, "vkCmdSetPerformanceStreamMarkerINTEL"); + table->CmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)gpa(device, "vkCmdSetPerformanceOverrideINTEL"); + table->AcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)gpa(device, "vkAcquirePerformanceConfigurationINTEL"); + table->ReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)gpa(device, "vkReleasePerformanceConfigurationINTEL"); + table->QueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)gpa(device, "vkQueueSetPerformanceConfigurationINTEL"); + table->GetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)gpa(device, "vkGetPerformanceParameterINTEL"); + table->SetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)gpa(device, "vkSetLocalDimmingAMD"); + table->GetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)gpa(device, "vkGetBufferDeviceAddressEXT"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->AcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)gpa(device, "vkAcquireFullScreenExclusiveModeEXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->ReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)gpa(device, "vkReleaseFullScreenExclusiveModeEXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)gpa(device, "vkGetDeviceGroupSurfacePresentModes2EXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->CmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)gpa(device, "vkCmdSetLineStippleEXT"); + table->ResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)gpa(device, "vkResetQueryPoolEXT"); + table->CmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)gpa(device, "vkCmdSetCullModeEXT"); + table->CmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)gpa(device, "vkCmdSetFrontFaceEXT"); + table->CmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)gpa(device, "vkCmdSetPrimitiveTopologyEXT"); + table->CmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)gpa(device, "vkCmdSetViewportWithCountEXT"); + table->CmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)gpa(device, "vkCmdSetScissorWithCountEXT"); + table->CmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)gpa(device, "vkCmdBindVertexBuffers2EXT"); + table->CmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)gpa(device, "vkCmdSetDepthTestEnableEXT"); + table->CmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)gpa(device, "vkCmdSetDepthWriteEnableEXT"); + table->CmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)gpa(device, "vkCmdSetDepthCompareOpEXT"); + table->CmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)gpa(device, "vkCmdSetDepthBoundsTestEnableEXT"); + table->CmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)gpa(device, "vkCmdSetStencilTestEnableEXT"); + table->CmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)gpa(device, "vkCmdSetStencilOpEXT"); + table->CopyMemoryToImageEXT = (PFN_vkCopyMemoryToImageEXT)gpa(device, "vkCopyMemoryToImageEXT"); + table->CopyImageToMemoryEXT = (PFN_vkCopyImageToMemoryEXT)gpa(device, "vkCopyImageToMemoryEXT"); + table->CopyImageToImageEXT = (PFN_vkCopyImageToImageEXT)gpa(device, "vkCopyImageToImageEXT"); + table->TransitionImageLayoutEXT = (PFN_vkTransitionImageLayoutEXT)gpa(device, "vkTransitionImageLayoutEXT"); + table->GetImageSubresourceLayout2EXT = (PFN_vkGetImageSubresourceLayout2EXT)gpa(device, "vkGetImageSubresourceLayout2EXT"); + table->ReleaseSwapchainImagesEXT = (PFN_vkReleaseSwapchainImagesEXT)gpa(device, "vkReleaseSwapchainImagesEXT"); + table->GetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)gpa(device, "vkGetGeneratedCommandsMemoryRequirementsNV"); + table->CmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV)gpa(device, "vkCmdPreprocessGeneratedCommandsNV"); + table->CmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV)gpa(device, "vkCmdExecuteGeneratedCommandsNV"); + table->CmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV)gpa(device, "vkCmdBindPipelineShaderGroupNV"); + table->CreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)gpa(device, "vkCreateIndirectCommandsLayoutNV"); + table->DestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)gpa(device, "vkDestroyIndirectCommandsLayoutNV"); + table->CmdSetDepthBias2EXT = (PFN_vkCmdSetDepthBias2EXT)gpa(device, "vkCmdSetDepthBias2EXT"); + table->CreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)gpa(device, "vkCreatePrivateDataSlotEXT"); + table->DestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)gpa(device, "vkDestroyPrivateDataSlotEXT"); + table->SetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)gpa(device, "vkSetPrivateDataEXT"); + table->GetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)gpa(device, "vkGetPrivateDataEXT"); +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CreateCudaModuleNV = (PFN_vkCreateCudaModuleNV)gpa(device, "vkCreateCudaModuleNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->GetCudaModuleCacheNV = (PFN_vkGetCudaModuleCacheNV)gpa(device, "vkGetCudaModuleCacheNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CreateCudaFunctionNV = (PFN_vkCreateCudaFunctionNV)gpa(device, "vkCreateCudaFunctionNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->DestroyCudaModuleNV = (PFN_vkDestroyCudaModuleNV)gpa(device, "vkDestroyCudaModuleNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->DestroyCudaFunctionNV = (PFN_vkDestroyCudaFunctionNV)gpa(device, "vkDestroyCudaFunctionNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS +#if defined(VK_ENABLE_BETA_EXTENSIONS) + table->CmdCudaLaunchKernelNV = (PFN_vkCmdCudaLaunchKernelNV)gpa(device, "vkCmdCudaLaunchKernelNV"); +#endif // VK_ENABLE_BETA_EXTENSIONS + table->CmdDispatchTileQCOM = (PFN_vkCmdDispatchTileQCOM)gpa(device, "vkCmdDispatchTileQCOM"); + table->CmdBeginPerTileExecutionQCOM = (PFN_vkCmdBeginPerTileExecutionQCOM)gpa(device, "vkCmdBeginPerTileExecutionQCOM"); + table->CmdEndPerTileExecutionQCOM = (PFN_vkCmdEndPerTileExecutionQCOM)gpa(device, "vkCmdEndPerTileExecutionQCOM"); +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->ExportMetalObjectsEXT = (PFN_vkExportMetalObjectsEXT)gpa(device, "vkExportMetalObjectsEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT + table->GetDescriptorSetLayoutSizeEXT = (PFN_vkGetDescriptorSetLayoutSizeEXT)gpa(device, "vkGetDescriptorSetLayoutSizeEXT"); + table->GetDescriptorSetLayoutBindingOffsetEXT = (PFN_vkGetDescriptorSetLayoutBindingOffsetEXT)gpa(device, "vkGetDescriptorSetLayoutBindingOffsetEXT"); + table->GetDescriptorEXT = (PFN_vkGetDescriptorEXT)gpa(device, "vkGetDescriptorEXT"); + table->CmdBindDescriptorBuffersEXT = (PFN_vkCmdBindDescriptorBuffersEXT)gpa(device, "vkCmdBindDescriptorBuffersEXT"); + table->CmdSetDescriptorBufferOffsetsEXT = (PFN_vkCmdSetDescriptorBufferOffsetsEXT)gpa(device, "vkCmdSetDescriptorBufferOffsetsEXT"); + table->CmdBindDescriptorBufferEmbeddedSamplersEXT = (PFN_vkCmdBindDescriptorBufferEmbeddedSamplersEXT)gpa(device, "vkCmdBindDescriptorBufferEmbeddedSamplersEXT"); + table->GetBufferOpaqueCaptureDescriptorDataEXT = (PFN_vkGetBufferOpaqueCaptureDescriptorDataEXT)gpa(device, "vkGetBufferOpaqueCaptureDescriptorDataEXT"); + table->GetImageOpaqueCaptureDescriptorDataEXT = (PFN_vkGetImageOpaqueCaptureDescriptorDataEXT)gpa(device, "vkGetImageOpaqueCaptureDescriptorDataEXT"); + table->GetImageViewOpaqueCaptureDescriptorDataEXT = (PFN_vkGetImageViewOpaqueCaptureDescriptorDataEXT)gpa(device, "vkGetImageViewOpaqueCaptureDescriptorDataEXT"); + table->GetSamplerOpaqueCaptureDescriptorDataEXT = (PFN_vkGetSamplerOpaqueCaptureDescriptorDataEXT)gpa(device, "vkGetSamplerOpaqueCaptureDescriptorDataEXT"); + table->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT = (PFN_vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT)gpa(device, "vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT"); + table->CmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV)gpa(device, "vkCmdSetFragmentShadingRateEnumNV"); + table->GetDeviceFaultInfoEXT = (PFN_vkGetDeviceFaultInfoEXT)gpa(device, "vkGetDeviceFaultInfoEXT"); + table->CmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)gpa(device, "vkCmdSetVertexInputEXT"); +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)gpa(device, "vkGetMemoryZirconHandleFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)gpa(device, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->ImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)gpa(device, "vkImportSemaphoreZirconHandleFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)gpa(device, "vkGetSemaphoreZirconHandleFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->CreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)gpa(device, "vkCreateBufferCollectionFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->SetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)gpa(device, "vkSetBufferCollectionImageConstraintsFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->SetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)gpa(device, "vkSetBufferCollectionBufferConstraintsFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->DestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)gpa(device, "vkDestroyBufferCollectionFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->GetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)gpa(device, "vkGetBufferCollectionPropertiesFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA + table->GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = (PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)gpa(device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI"); + table->CmdSubpassShadingHUAWEI = (PFN_vkCmdSubpassShadingHUAWEI)gpa(device, "vkCmdSubpassShadingHUAWEI"); + table->CmdBindInvocationMaskHUAWEI = (PFN_vkCmdBindInvocationMaskHUAWEI)gpa(device, "vkCmdBindInvocationMaskHUAWEI"); + table->GetMemoryRemoteAddressNV = (PFN_vkGetMemoryRemoteAddressNV)gpa(device, "vkGetMemoryRemoteAddressNV"); + table->GetPipelinePropertiesEXT = (PFN_vkGetPipelinePropertiesEXT)gpa(device, "vkGetPipelinePropertiesEXT"); + table->CmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT)gpa(device, "vkCmdSetPatchControlPointsEXT"); + table->CmdSetRasterizerDiscardEnableEXT = (PFN_vkCmdSetRasterizerDiscardEnableEXT)gpa(device, "vkCmdSetRasterizerDiscardEnableEXT"); + table->CmdSetDepthBiasEnableEXT = (PFN_vkCmdSetDepthBiasEnableEXT)gpa(device, "vkCmdSetDepthBiasEnableEXT"); + table->CmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT)gpa(device, "vkCmdSetLogicOpEXT"); + table->CmdSetPrimitiveRestartEnableEXT = (PFN_vkCmdSetPrimitiveRestartEnableEXT)gpa(device, "vkCmdSetPrimitiveRestartEnableEXT"); + table->CmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)gpa(device, "vkCmdSetColorWriteEnableEXT"); + table->CmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)gpa(device, "vkCmdDrawMultiEXT"); + table->CmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)gpa(device, "vkCmdDrawMultiIndexedEXT"); + table->CreateMicromapEXT = (PFN_vkCreateMicromapEXT)gpa(device, "vkCreateMicromapEXT"); + table->DestroyMicromapEXT = (PFN_vkDestroyMicromapEXT)gpa(device, "vkDestroyMicromapEXT"); + table->CmdBuildMicromapsEXT = (PFN_vkCmdBuildMicromapsEXT)gpa(device, "vkCmdBuildMicromapsEXT"); + table->BuildMicromapsEXT = (PFN_vkBuildMicromapsEXT)gpa(device, "vkBuildMicromapsEXT"); + table->CopyMicromapEXT = (PFN_vkCopyMicromapEXT)gpa(device, "vkCopyMicromapEXT"); + table->CopyMicromapToMemoryEXT = (PFN_vkCopyMicromapToMemoryEXT)gpa(device, "vkCopyMicromapToMemoryEXT"); + table->CopyMemoryToMicromapEXT = (PFN_vkCopyMemoryToMicromapEXT)gpa(device, "vkCopyMemoryToMicromapEXT"); + table->WriteMicromapsPropertiesEXT = (PFN_vkWriteMicromapsPropertiesEXT)gpa(device, "vkWriteMicromapsPropertiesEXT"); + table->CmdCopyMicromapEXT = (PFN_vkCmdCopyMicromapEXT)gpa(device, "vkCmdCopyMicromapEXT"); + table->CmdCopyMicromapToMemoryEXT = (PFN_vkCmdCopyMicromapToMemoryEXT)gpa(device, "vkCmdCopyMicromapToMemoryEXT"); + table->CmdCopyMemoryToMicromapEXT = (PFN_vkCmdCopyMemoryToMicromapEXT)gpa(device, "vkCmdCopyMemoryToMicromapEXT"); + table->CmdWriteMicromapsPropertiesEXT = (PFN_vkCmdWriteMicromapsPropertiesEXT)gpa(device, "vkCmdWriteMicromapsPropertiesEXT"); + table->GetDeviceMicromapCompatibilityEXT = (PFN_vkGetDeviceMicromapCompatibilityEXT)gpa(device, "vkGetDeviceMicromapCompatibilityEXT"); + table->GetMicromapBuildSizesEXT = (PFN_vkGetMicromapBuildSizesEXT)gpa(device, "vkGetMicromapBuildSizesEXT"); + table->CmdDrawClusterHUAWEI = (PFN_vkCmdDrawClusterHUAWEI)gpa(device, "vkCmdDrawClusterHUAWEI"); + table->CmdDrawClusterIndirectHUAWEI = (PFN_vkCmdDrawClusterIndirectHUAWEI)gpa(device, "vkCmdDrawClusterIndirectHUAWEI"); + table->SetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)gpa(device, "vkSetDeviceMemoryPriorityEXT"); + table->GetDescriptorSetLayoutHostMappingInfoVALVE = (PFN_vkGetDescriptorSetLayoutHostMappingInfoVALVE)gpa(device, "vkGetDescriptorSetLayoutHostMappingInfoVALVE"); + table->GetDescriptorSetHostMappingVALVE = (PFN_vkGetDescriptorSetHostMappingVALVE)gpa(device, "vkGetDescriptorSetHostMappingVALVE"); + table->CmdCopyMemoryIndirectNV = (PFN_vkCmdCopyMemoryIndirectNV)gpa(device, "vkCmdCopyMemoryIndirectNV"); + table->CmdCopyMemoryToImageIndirectNV = (PFN_vkCmdCopyMemoryToImageIndirectNV)gpa(device, "vkCmdCopyMemoryToImageIndirectNV"); + table->CmdDecompressMemoryNV = (PFN_vkCmdDecompressMemoryNV)gpa(device, "vkCmdDecompressMemoryNV"); + table->CmdDecompressMemoryIndirectCountNV = (PFN_vkCmdDecompressMemoryIndirectCountNV)gpa(device, "vkCmdDecompressMemoryIndirectCountNV"); + table->GetPipelineIndirectMemoryRequirementsNV = (PFN_vkGetPipelineIndirectMemoryRequirementsNV)gpa(device, "vkGetPipelineIndirectMemoryRequirementsNV"); + table->CmdUpdatePipelineIndirectBufferNV = (PFN_vkCmdUpdatePipelineIndirectBufferNV)gpa(device, "vkCmdUpdatePipelineIndirectBufferNV"); + table->GetPipelineIndirectDeviceAddressNV = (PFN_vkGetPipelineIndirectDeviceAddressNV)gpa(device, "vkGetPipelineIndirectDeviceAddressNV"); + table->CmdSetDepthClampEnableEXT = (PFN_vkCmdSetDepthClampEnableEXT)gpa(device, "vkCmdSetDepthClampEnableEXT"); + table->CmdSetPolygonModeEXT = (PFN_vkCmdSetPolygonModeEXT)gpa(device, "vkCmdSetPolygonModeEXT"); + table->CmdSetRasterizationSamplesEXT = (PFN_vkCmdSetRasterizationSamplesEXT)gpa(device, "vkCmdSetRasterizationSamplesEXT"); + table->CmdSetSampleMaskEXT = (PFN_vkCmdSetSampleMaskEXT)gpa(device, "vkCmdSetSampleMaskEXT"); + table->CmdSetAlphaToCoverageEnableEXT = (PFN_vkCmdSetAlphaToCoverageEnableEXT)gpa(device, "vkCmdSetAlphaToCoverageEnableEXT"); + table->CmdSetAlphaToOneEnableEXT = (PFN_vkCmdSetAlphaToOneEnableEXT)gpa(device, "vkCmdSetAlphaToOneEnableEXT"); + table->CmdSetLogicOpEnableEXT = (PFN_vkCmdSetLogicOpEnableEXT)gpa(device, "vkCmdSetLogicOpEnableEXT"); + table->CmdSetColorBlendEnableEXT = (PFN_vkCmdSetColorBlendEnableEXT)gpa(device, "vkCmdSetColorBlendEnableEXT"); + table->CmdSetColorBlendEquationEXT = (PFN_vkCmdSetColorBlendEquationEXT)gpa(device, "vkCmdSetColorBlendEquationEXT"); + table->CmdSetColorWriteMaskEXT = (PFN_vkCmdSetColorWriteMaskEXT)gpa(device, "vkCmdSetColorWriteMaskEXT"); + table->CmdSetTessellationDomainOriginEXT = (PFN_vkCmdSetTessellationDomainOriginEXT)gpa(device, "vkCmdSetTessellationDomainOriginEXT"); + table->CmdSetRasterizationStreamEXT = (PFN_vkCmdSetRasterizationStreamEXT)gpa(device, "vkCmdSetRasterizationStreamEXT"); + table->CmdSetConservativeRasterizationModeEXT = (PFN_vkCmdSetConservativeRasterizationModeEXT)gpa(device, "vkCmdSetConservativeRasterizationModeEXT"); + table->CmdSetExtraPrimitiveOverestimationSizeEXT = (PFN_vkCmdSetExtraPrimitiveOverestimationSizeEXT)gpa(device, "vkCmdSetExtraPrimitiveOverestimationSizeEXT"); + table->CmdSetDepthClipEnableEXT = (PFN_vkCmdSetDepthClipEnableEXT)gpa(device, "vkCmdSetDepthClipEnableEXT"); + table->CmdSetSampleLocationsEnableEXT = (PFN_vkCmdSetSampleLocationsEnableEXT)gpa(device, "vkCmdSetSampleLocationsEnableEXT"); + table->CmdSetColorBlendAdvancedEXT = (PFN_vkCmdSetColorBlendAdvancedEXT)gpa(device, "vkCmdSetColorBlendAdvancedEXT"); + table->CmdSetProvokingVertexModeEXT = (PFN_vkCmdSetProvokingVertexModeEXT)gpa(device, "vkCmdSetProvokingVertexModeEXT"); + table->CmdSetLineRasterizationModeEXT = (PFN_vkCmdSetLineRasterizationModeEXT)gpa(device, "vkCmdSetLineRasterizationModeEXT"); + table->CmdSetLineStippleEnableEXT = (PFN_vkCmdSetLineStippleEnableEXT)gpa(device, "vkCmdSetLineStippleEnableEXT"); + table->CmdSetDepthClipNegativeOneToOneEXT = (PFN_vkCmdSetDepthClipNegativeOneToOneEXT)gpa(device, "vkCmdSetDepthClipNegativeOneToOneEXT"); + table->CmdSetViewportWScalingEnableNV = (PFN_vkCmdSetViewportWScalingEnableNV)gpa(device, "vkCmdSetViewportWScalingEnableNV"); + table->CmdSetViewportSwizzleNV = (PFN_vkCmdSetViewportSwizzleNV)gpa(device, "vkCmdSetViewportSwizzleNV"); + table->CmdSetCoverageToColorEnableNV = (PFN_vkCmdSetCoverageToColorEnableNV)gpa(device, "vkCmdSetCoverageToColorEnableNV"); + table->CmdSetCoverageToColorLocationNV = (PFN_vkCmdSetCoverageToColorLocationNV)gpa(device, "vkCmdSetCoverageToColorLocationNV"); + table->CmdSetCoverageModulationModeNV = (PFN_vkCmdSetCoverageModulationModeNV)gpa(device, "vkCmdSetCoverageModulationModeNV"); + table->CmdSetCoverageModulationTableEnableNV = (PFN_vkCmdSetCoverageModulationTableEnableNV)gpa(device, "vkCmdSetCoverageModulationTableEnableNV"); + table->CmdSetCoverageModulationTableNV = (PFN_vkCmdSetCoverageModulationTableNV)gpa(device, "vkCmdSetCoverageModulationTableNV"); + table->CmdSetShadingRateImageEnableNV = (PFN_vkCmdSetShadingRateImageEnableNV)gpa(device, "vkCmdSetShadingRateImageEnableNV"); + table->CmdSetRepresentativeFragmentTestEnableNV = (PFN_vkCmdSetRepresentativeFragmentTestEnableNV)gpa(device, "vkCmdSetRepresentativeFragmentTestEnableNV"); + table->CmdSetCoverageReductionModeNV = (PFN_vkCmdSetCoverageReductionModeNV)gpa(device, "vkCmdSetCoverageReductionModeNV"); + table->CreateTensorARM = (PFN_vkCreateTensorARM)gpa(device, "vkCreateTensorARM"); + table->DestroyTensorARM = (PFN_vkDestroyTensorARM)gpa(device, "vkDestroyTensorARM"); + table->CreateTensorViewARM = (PFN_vkCreateTensorViewARM)gpa(device, "vkCreateTensorViewARM"); + table->DestroyTensorViewARM = (PFN_vkDestroyTensorViewARM)gpa(device, "vkDestroyTensorViewARM"); + table->GetTensorMemoryRequirementsARM = (PFN_vkGetTensorMemoryRequirementsARM)gpa(device, "vkGetTensorMemoryRequirementsARM"); + table->BindTensorMemoryARM = (PFN_vkBindTensorMemoryARM)gpa(device, "vkBindTensorMemoryARM"); + table->GetDeviceTensorMemoryRequirementsARM = (PFN_vkGetDeviceTensorMemoryRequirementsARM)gpa(device, "vkGetDeviceTensorMemoryRequirementsARM"); + table->CmdCopyTensorARM = (PFN_vkCmdCopyTensorARM)gpa(device, "vkCmdCopyTensorARM"); + table->GetTensorOpaqueCaptureDescriptorDataARM = (PFN_vkGetTensorOpaqueCaptureDescriptorDataARM)gpa(device, "vkGetTensorOpaqueCaptureDescriptorDataARM"); + table->GetTensorViewOpaqueCaptureDescriptorDataARM = (PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM)gpa(device, "vkGetTensorViewOpaqueCaptureDescriptorDataARM"); + table->GetShaderModuleIdentifierEXT = (PFN_vkGetShaderModuleIdentifierEXT)gpa(device, "vkGetShaderModuleIdentifierEXT"); + table->GetShaderModuleCreateInfoIdentifierEXT = (PFN_vkGetShaderModuleCreateInfoIdentifierEXT)gpa(device, "vkGetShaderModuleCreateInfoIdentifierEXT"); + table->CreateOpticalFlowSessionNV = (PFN_vkCreateOpticalFlowSessionNV)gpa(device, "vkCreateOpticalFlowSessionNV"); + table->DestroyOpticalFlowSessionNV = (PFN_vkDestroyOpticalFlowSessionNV)gpa(device, "vkDestroyOpticalFlowSessionNV"); + table->BindOpticalFlowSessionImageNV = (PFN_vkBindOpticalFlowSessionImageNV)gpa(device, "vkBindOpticalFlowSessionImageNV"); + table->CmdOpticalFlowExecuteNV = (PFN_vkCmdOpticalFlowExecuteNV)gpa(device, "vkCmdOpticalFlowExecuteNV"); + table->AntiLagUpdateAMD = (PFN_vkAntiLagUpdateAMD)gpa(device, "vkAntiLagUpdateAMD"); + table->CreateShadersEXT = (PFN_vkCreateShadersEXT)gpa(device, "vkCreateShadersEXT"); + table->DestroyShaderEXT = (PFN_vkDestroyShaderEXT)gpa(device, "vkDestroyShaderEXT"); + table->GetShaderBinaryDataEXT = (PFN_vkGetShaderBinaryDataEXT)gpa(device, "vkGetShaderBinaryDataEXT"); + table->CmdBindShadersEXT = (PFN_vkCmdBindShadersEXT)gpa(device, "vkCmdBindShadersEXT"); + table->CmdSetDepthClampRangeEXT = (PFN_vkCmdSetDepthClampRangeEXT)gpa(device, "vkCmdSetDepthClampRangeEXT"); + table->GetFramebufferTilePropertiesQCOM = (PFN_vkGetFramebufferTilePropertiesQCOM)gpa(device, "vkGetFramebufferTilePropertiesQCOM"); + table->GetDynamicRenderingTilePropertiesQCOM = (PFN_vkGetDynamicRenderingTilePropertiesQCOM)gpa(device, "vkGetDynamicRenderingTilePropertiesQCOM"); + table->ConvertCooperativeVectorMatrixNV = (PFN_vkConvertCooperativeVectorMatrixNV)gpa(device, "vkConvertCooperativeVectorMatrixNV"); + table->CmdConvertCooperativeVectorMatrixNV = (PFN_vkCmdConvertCooperativeVectorMatrixNV)gpa(device, "vkCmdConvertCooperativeVectorMatrixNV"); + table->SetLatencySleepModeNV = (PFN_vkSetLatencySleepModeNV)gpa(device, "vkSetLatencySleepModeNV"); + table->LatencySleepNV = (PFN_vkLatencySleepNV)gpa(device, "vkLatencySleepNV"); + table->SetLatencyMarkerNV = (PFN_vkSetLatencyMarkerNV)gpa(device, "vkSetLatencyMarkerNV"); + table->GetLatencyTimingsNV = (PFN_vkGetLatencyTimingsNV)gpa(device, "vkGetLatencyTimingsNV"); + table->QueueNotifyOutOfBandNV = (PFN_vkQueueNotifyOutOfBandNV)gpa(device, "vkQueueNotifyOutOfBandNV"); + table->CreateDataGraphPipelinesARM = (PFN_vkCreateDataGraphPipelinesARM)gpa(device, "vkCreateDataGraphPipelinesARM"); + table->CreateDataGraphPipelineSessionARM = (PFN_vkCreateDataGraphPipelineSessionARM)gpa(device, "vkCreateDataGraphPipelineSessionARM"); + table->GetDataGraphPipelineSessionBindPointRequirementsARM = (PFN_vkGetDataGraphPipelineSessionBindPointRequirementsARM)gpa(device, "vkGetDataGraphPipelineSessionBindPointRequirementsARM"); + table->GetDataGraphPipelineSessionMemoryRequirementsARM = (PFN_vkGetDataGraphPipelineSessionMemoryRequirementsARM)gpa(device, "vkGetDataGraphPipelineSessionMemoryRequirementsARM"); + table->BindDataGraphPipelineSessionMemoryARM = (PFN_vkBindDataGraphPipelineSessionMemoryARM)gpa(device, "vkBindDataGraphPipelineSessionMemoryARM"); + table->DestroyDataGraphPipelineSessionARM = (PFN_vkDestroyDataGraphPipelineSessionARM)gpa(device, "vkDestroyDataGraphPipelineSessionARM"); + table->CmdDispatchDataGraphARM = (PFN_vkCmdDispatchDataGraphARM)gpa(device, "vkCmdDispatchDataGraphARM"); + table->GetDataGraphPipelineAvailablePropertiesARM = (PFN_vkGetDataGraphPipelineAvailablePropertiesARM)gpa(device, "vkGetDataGraphPipelineAvailablePropertiesARM"); + table->GetDataGraphPipelinePropertiesARM = (PFN_vkGetDataGraphPipelinePropertiesARM)gpa(device, "vkGetDataGraphPipelinePropertiesARM"); + table->CmdSetAttachmentFeedbackLoopEnableEXT = (PFN_vkCmdSetAttachmentFeedbackLoopEnableEXT)gpa(device, "vkCmdSetAttachmentFeedbackLoopEnableEXT"); +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + table->GetScreenBufferPropertiesQNX = (PFN_vkGetScreenBufferPropertiesQNX)gpa(device, "vkGetScreenBufferPropertiesQNX"); +#endif // VK_USE_PLATFORM_SCREEN_QNX + table->CmdBindTileMemoryQCOM = (PFN_vkCmdBindTileMemoryQCOM)gpa(device, "vkCmdBindTileMemoryQCOM"); + table->CreateExternalComputeQueueNV = (PFN_vkCreateExternalComputeQueueNV)gpa(device, "vkCreateExternalComputeQueueNV"); + table->DestroyExternalComputeQueueNV = (PFN_vkDestroyExternalComputeQueueNV)gpa(device, "vkDestroyExternalComputeQueueNV"); + table->GetExternalComputeQueueDataNV = (PFN_vkGetExternalComputeQueueDataNV)gpa(device, "vkGetExternalComputeQueueDataNV"); + table->GetClusterAccelerationStructureBuildSizesNV = (PFN_vkGetClusterAccelerationStructureBuildSizesNV)gpa(device, "vkGetClusterAccelerationStructureBuildSizesNV"); + table->CmdBuildClusterAccelerationStructureIndirectNV = (PFN_vkCmdBuildClusterAccelerationStructureIndirectNV)gpa(device, "vkCmdBuildClusterAccelerationStructureIndirectNV"); + table->GetPartitionedAccelerationStructuresBuildSizesNV = (PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV)gpa(device, "vkGetPartitionedAccelerationStructuresBuildSizesNV"); + table->CmdBuildPartitionedAccelerationStructuresNV = (PFN_vkCmdBuildPartitionedAccelerationStructuresNV)gpa(device, "vkCmdBuildPartitionedAccelerationStructuresNV"); + table->GetGeneratedCommandsMemoryRequirementsEXT = (PFN_vkGetGeneratedCommandsMemoryRequirementsEXT)gpa(device, "vkGetGeneratedCommandsMemoryRequirementsEXT"); + table->CmdPreprocessGeneratedCommandsEXT = (PFN_vkCmdPreprocessGeneratedCommandsEXT)gpa(device, "vkCmdPreprocessGeneratedCommandsEXT"); + table->CmdExecuteGeneratedCommandsEXT = (PFN_vkCmdExecuteGeneratedCommandsEXT)gpa(device, "vkCmdExecuteGeneratedCommandsEXT"); + table->CreateIndirectCommandsLayoutEXT = (PFN_vkCreateIndirectCommandsLayoutEXT)gpa(device, "vkCreateIndirectCommandsLayoutEXT"); + table->DestroyIndirectCommandsLayoutEXT = (PFN_vkDestroyIndirectCommandsLayoutEXT)gpa(device, "vkDestroyIndirectCommandsLayoutEXT"); + table->CreateIndirectExecutionSetEXT = (PFN_vkCreateIndirectExecutionSetEXT)gpa(device, "vkCreateIndirectExecutionSetEXT"); + table->DestroyIndirectExecutionSetEXT = (PFN_vkDestroyIndirectExecutionSetEXT)gpa(device, "vkDestroyIndirectExecutionSetEXT"); + table->UpdateIndirectExecutionSetPipelineEXT = (PFN_vkUpdateIndirectExecutionSetPipelineEXT)gpa(device, "vkUpdateIndirectExecutionSetPipelineEXT"); + table->UpdateIndirectExecutionSetShaderEXT = (PFN_vkUpdateIndirectExecutionSetShaderEXT)gpa(device, "vkUpdateIndirectExecutionSetShaderEXT"); +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->GetMemoryMetalHandleEXT = (PFN_vkGetMemoryMetalHandleEXT)gpa(device, "vkGetMemoryMetalHandleEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->GetMemoryMetalHandlePropertiesEXT = (PFN_vkGetMemoryMetalHandlePropertiesEXT)gpa(device, "vkGetMemoryMetalHandlePropertiesEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT + table->CmdEndRendering2EXT = (PFN_vkCmdEndRendering2EXT)gpa(device, "vkCmdEndRendering2EXT"); + table->CreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)gpa(device, "vkCreateAccelerationStructureKHR"); + table->DestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)gpa(device, "vkDestroyAccelerationStructureKHR"); + table->CmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR)gpa(device, "vkCmdBuildAccelerationStructuresKHR"); + table->CmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)gpa(device, "vkCmdBuildAccelerationStructuresIndirectKHR"); + table->BuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)gpa(device, "vkBuildAccelerationStructuresKHR"); + table->CopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)gpa(device, "vkCopyAccelerationStructureKHR"); + table->CopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)gpa(device, "vkCopyAccelerationStructureToMemoryKHR"); + table->CopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)gpa(device, "vkCopyMemoryToAccelerationStructureKHR"); + table->WriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)gpa(device, "vkWriteAccelerationStructuresPropertiesKHR"); + table->CmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR)gpa(device, "vkCmdCopyAccelerationStructureKHR"); + table->CmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)gpa(device, "vkCmdCopyAccelerationStructureToMemoryKHR"); + table->CmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)gpa(device, "vkCmdCopyMemoryToAccelerationStructureKHR"); + table->GetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)gpa(device, "vkGetAccelerationStructureDeviceAddressKHR"); + table->CmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)gpa(device, "vkCmdWriteAccelerationStructuresPropertiesKHR"); + table->GetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)gpa(device, "vkGetDeviceAccelerationStructureCompatibilityKHR"); + table->GetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)gpa(device, "vkGetAccelerationStructureBuildSizesKHR"); + table->CmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)gpa(device, "vkCmdTraceRaysKHR"); + table->CreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)gpa(device, "vkCreateRayTracingPipelinesKHR"); + table->GetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)gpa(device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); + table->CmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR)gpa(device, "vkCmdTraceRaysIndirectKHR"); + table->GetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)gpa(device, "vkGetRayTracingShaderGroupStackSizeKHR"); + table->CmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)gpa(device, "vkCmdSetRayTracingPipelineStackSizeKHR"); + table->CmdDrawMeshTasksEXT = (PFN_vkCmdDrawMeshTasksEXT)gpa(device, "vkCmdDrawMeshTasksEXT"); + table->CmdDrawMeshTasksIndirectEXT = (PFN_vkCmdDrawMeshTasksIndirectEXT)gpa(device, "vkCmdDrawMeshTasksIndirectEXT"); + table->CmdDrawMeshTasksIndirectCountEXT = (PFN_vkCmdDrawMeshTasksIndirectCountEXT)gpa(device, "vkCmdDrawMeshTasksIndirectCountEXT"); + // clang-format on +} + +// clang-format off +static inline void layer_init_instance_dispatch_table(VkInstance instance, VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa) { + memset(table, 0, sizeof(*table)); + + // Instance function pointers + table->CreateInstance = (PFN_vkCreateInstance)gpa(instance, "vkCreateInstance"); + table->DestroyInstance = (PFN_vkDestroyInstance)gpa(instance, "vkDestroyInstance"); + table->EnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)gpa(instance, "vkEnumeratePhysicalDevices"); + table->GetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)gpa(instance, "vkGetPhysicalDeviceFeatures"); + table->GetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)gpa(instance, "vkGetPhysicalDeviceFormatProperties"); + table->GetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)gpa(instance, "vkGetPhysicalDeviceImageFormatProperties"); + table->GetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)gpa(instance, "vkGetPhysicalDeviceProperties"); + table->GetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)gpa(instance, "vkGetPhysicalDeviceQueueFamilyProperties"); + table->GetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)gpa(instance, "vkGetPhysicalDeviceMemoryProperties"); + table->GetInstanceProcAddr = gpa; + table->CreateDevice = (PFN_vkCreateDevice)gpa(instance, "vkCreateDevice"); + table->EnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)gpa(instance, "vkEnumerateInstanceExtensionProperties"); + table->EnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)gpa(instance, "vkEnumerateDeviceExtensionProperties"); + table->EnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)gpa(instance, "vkEnumerateInstanceLayerProperties"); + table->EnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)gpa(instance, "vkEnumerateDeviceLayerProperties"); + table->GetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)gpa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"); + table->EnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)gpa(instance, "vkEnumerateInstanceVersion"); + table->EnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)gpa(instance, "vkEnumeratePhysicalDeviceGroups"); + table->GetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)gpa(instance, "vkGetPhysicalDeviceFeatures2"); + table->GetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)gpa(instance, "vkGetPhysicalDeviceProperties2"); + table->GetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)gpa(instance, "vkGetPhysicalDeviceFormatProperties2"); + table->GetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)gpa(instance, "vkGetPhysicalDeviceImageFormatProperties2"); + table->GetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)gpa(instance, "vkGetPhysicalDeviceQueueFamilyProperties2"); + table->GetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)gpa(instance, "vkGetPhysicalDeviceMemoryProperties2"); + table->GetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)gpa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties2"); + table->GetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)gpa(instance, "vkGetPhysicalDeviceExternalBufferProperties"); + table->GetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)gpa(instance, "vkGetPhysicalDeviceExternalFenceProperties"); + table->GetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)gpa(instance, "vkGetPhysicalDeviceExternalSemaphoreProperties"); + table->GetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)gpa(instance, "vkGetPhysicalDeviceToolProperties"); + table->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)gpa(instance, "vkDestroySurfaceKHR"); + table->GetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"); + table->GetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); + table->GetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)gpa(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"); + table->GetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)gpa(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"); + table->GetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR)gpa(instance, "vkGetPhysicalDevicePresentRectanglesKHR"); + table->GetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR"); + table->GetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)gpa(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + table->GetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)gpa(instance, "vkGetDisplayPlaneSupportedDisplaysKHR"); + table->GetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)gpa(instance, "vkGetDisplayModePropertiesKHR"); + table->CreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)gpa(instance, "vkCreateDisplayModeKHR"); + table->GetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)gpa(instance, "vkGetDisplayPlaneCapabilitiesKHR"); + table->CreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)gpa(instance, "vkCreateDisplayPlaneSurfaceKHR"); +#if defined(VK_USE_PLATFORM_XLIB_KHR) + table->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)gpa(instance, "vkCreateXlibSurfaceKHR"); +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + table->GetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + table->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)gpa(instance, "vkCreateXcbSurfaceKHR"); +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + table->GetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + table->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)gpa(instance, "vkCreateWaylandSurfaceKHR"); +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + table->GetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + table->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(instance, "vkCreateAndroidSurfaceKHR"); +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)gpa(instance, "vkCreateWin32SurfaceKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)gpa(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->GetPhysicalDeviceVideoCapabilitiesKHR = (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)gpa(instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR"); + table->GetPhysicalDeviceVideoFormatPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"); + table->GetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)gpa(instance, "vkGetPhysicalDeviceFeatures2KHR"); + table->GetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)gpa(instance, "vkGetPhysicalDeviceProperties2KHR"); + table->GetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)gpa(instance, "vkGetPhysicalDeviceFormatProperties2KHR"); + table->GetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)gpa(instance, "vkGetPhysicalDeviceImageFormatProperties2KHR"); + table->GetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)gpa(instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + table->GetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)gpa(instance, "vkGetPhysicalDeviceMemoryProperties2KHR"); + table->GetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)gpa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + table->EnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR)gpa(instance, "vkEnumeratePhysicalDeviceGroupsKHR"); + table->GetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + table->GetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)gpa(instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + table->GetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)gpa(instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR"); + table->EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)gpa(instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); + table->GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = (PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)gpa(instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); + table->GetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + table->GetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)gpa(instance, "vkGetPhysicalDeviceSurfaceFormats2KHR"); + table->GetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR)gpa(instance, "vkGetPhysicalDeviceDisplayProperties2KHR"); + table->GetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)gpa(instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + table->GetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR)gpa(instance, "vkGetDisplayModeProperties2KHR"); + table->GetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR)gpa(instance, "vkGetDisplayPlaneCapabilities2KHR"); + table->GetPhysicalDeviceFragmentShadingRatesKHR = (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)gpa(instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); + table->GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR"); + table->GetPhysicalDeviceCooperativeMatrixPropertiesKHR = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR)gpa(instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR"); + table->GetPhysicalDeviceCalibrateableTimeDomainsKHR = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR)gpa(instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsKHR"); + table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)gpa(instance, "vkCreateDebugReportCallbackEXT"); + table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)gpa(instance, "vkDestroyDebugReportCallbackEXT"); + table->DebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)gpa(instance, "vkDebugReportMessageEXT"); +#if defined(VK_USE_PLATFORM_GGP) + table->CreateStreamDescriptorSurfaceGGP = (PFN_vkCreateStreamDescriptorSurfaceGGP)gpa(instance, "vkCreateStreamDescriptorSurfaceGGP"); +#endif // VK_USE_PLATFORM_GGP + table->GetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)gpa(instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); +#if defined(VK_USE_PLATFORM_VI_NN) + table->CreateViSurfaceNN = (PFN_vkCreateViSurfaceNN)gpa(instance, "vkCreateViSurfaceNN"); +#endif // VK_USE_PLATFORM_VI_NN + table->ReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)gpa(instance, "vkReleaseDisplayEXT"); +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + table->AcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT)gpa(instance, "vkAcquireXlibDisplayEXT"); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) + table->GetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT)gpa(instance, "vkGetRandROutputDisplayEXT"); +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + table->GetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT"); +#if defined(VK_USE_PLATFORM_IOS_MVK) + table->CreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK)gpa(instance, "vkCreateIOSSurfaceMVK"); +#endif // VK_USE_PLATFORM_IOS_MVK +#if defined(VK_USE_PLATFORM_MACOS_MVK) + table->CreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)gpa(instance, "vkCreateMacOSSurfaceMVK"); +#endif // VK_USE_PLATFORM_MACOS_MVK + table->CreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)gpa(instance, "vkCreateDebugUtilsMessengerEXT"); + table->DestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)gpa(instance, "vkDestroyDebugUtilsMessengerEXT"); + table->SubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT)gpa(instance, "vkSubmitDebugUtilsMessageEXT"); + table->GetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)gpa(instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); + table->GetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)gpa(instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); +#if defined(VK_USE_PLATFORM_FUCHSIA) + table->CreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA)gpa(instance, "vkCreateImagePipeSurfaceFUCHSIA"); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_METAL_EXT) + table->CreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)gpa(instance, "vkCreateMetalSurfaceEXT"); +#endif // VK_USE_PLATFORM_METAL_EXT + table->GetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)gpa(instance, "vkGetPhysicalDeviceToolPropertiesEXT"); + table->GetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)gpa(instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"); + table->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)gpa(instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetPhysicalDeviceSurfacePresentModes2EXT = (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)gpa(instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT"); +#endif // VK_USE_PLATFORM_WIN32_KHR + table->CreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT)gpa(instance, "vkCreateHeadlessSurfaceEXT"); + table->AcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT)gpa(instance, "vkAcquireDrmDisplayEXT"); + table->GetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)gpa(instance, "vkGetDrmDisplayEXT"); +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->AcquireWinrtDisplayNV = (PFN_vkAcquireWinrtDisplayNV)gpa(instance, "vkAcquireWinrtDisplayNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + table->GetWinrtDisplayNV = (PFN_vkGetWinrtDisplayNV)gpa(instance, "vkGetWinrtDisplayNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + table->CreateDirectFBSurfaceEXT = (PFN_vkCreateDirectFBSurfaceEXT)gpa(instance, "vkCreateDirectFBSurfaceEXT"); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + table->GetPhysicalDeviceDirectFBPresentationSupportEXT = (PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)gpa(instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT"); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + table->CreateScreenSurfaceQNX = (PFN_vkCreateScreenSurfaceQNX)gpa(instance, "vkCreateScreenSurfaceQNX"); +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + table->GetPhysicalDeviceScreenPresentationSupportQNX = (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)gpa(instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX"); +#endif // VK_USE_PLATFORM_SCREEN_QNX + table->GetPhysicalDeviceExternalTensorPropertiesARM = (PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)gpa(instance, "vkGetPhysicalDeviceExternalTensorPropertiesARM"); + table->GetPhysicalDeviceOpticalFlowImageFormatsNV = (PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV)gpa(instance, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV"); + table->GetPhysicalDeviceCooperativeVectorPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)gpa(instance, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV"); + table->GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM = (PFN_vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM)gpa(instance, "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM"); + table->GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM = (PFN_vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM)gpa(instance, "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM"); +#if defined(VK_USE_PLATFORM_OHOS) + table->CreateSurfaceOHOS = (PFN_vkCreateSurfaceOHOS)gpa(instance, "vkCreateSurfaceOHOS"); +#endif // VK_USE_PLATFORM_OHOS + table->GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)gpa(instance, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV"); + // clang-format on +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/layer_util.h b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/layer_util.h new file mode 100644 index 0000000000..3f4bc755ad --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/layer_util.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 The Khronos Group Inc. + * Copyright (c) 2021 Valve Corporation + * Copyright (c) 2021 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#pragma once + +#include "test_util.h" + +struct LayerDefinition { + BUILDER_VALUE(std::string, layerName) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, specVersion, VK_API_VERSION_1_0) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, implementationVersion, VK_API_VERSION_1_0) + BUILDER_VALUE(std::string, description) + BUILDER_VECTOR(Extension, extensions, extension) + + VkLayerProperties get() const noexcept { + VkLayerProperties props{}; + copy_string_to_char_array(layerName, &props.layerName[0], VK_MAX_EXTENSION_NAME_SIZE); + props.specVersion = specVersion; + props.implementationVersion = implementationVersion; + copy_string_to_char_array(description, &props.description[0], VK_MAX_DESCRIPTION_SIZE); + return props; + } +}; diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.cpp new file mode 100644 index 0000000000..f891927ade --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.cpp @@ -0,0 +1,1079 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_layer.h" + +#include "generated/vk_dispatch_table_helper.h" + +// export the enumeration functions instance|device+layer|extension +#if !defined(TEST_LAYER_EXPORT_ENUMERATE_FUNCTIONS) +#define TEST_LAYER_EXPORT_ENUMERATE_FUNCTIONS 0 +#endif + +// export test_layer_GetInstanceProcAddr +#if !defined(TEST_LAYER_EXPORT_LAYER_NAMED_GIPA) +#define TEST_LAYER_EXPORT_LAYER_NAMED_GIPA 0 +#endif + +// export test_override_GetInstanceProcAddr +#if !defined(TEST_LAYER_EXPORT_OVERRIDE_GIPA) +#define TEST_LAYER_EXPORT_OVERRIDE_GIPA 0 +#endif + +// export vkGetInstanceProcAddr +#if !defined(TEST_LAYER_EXPORT_LAYER_VK_GIPA) +#define TEST_LAYER_EXPORT_LAYER_VK_GIPA 0 +#endif + +// export test_layer_GetDeviceProcAddr +#if !defined(TEST_LAYER_EXPORT_LAYER_NAMED_GDPA) +#define TEST_LAYER_EXPORT_LAYER_NAMED_GDPA 0 +#endif + +// export test_override_GetDeviceProcAddr +#if !defined(TEST_LAYER_EXPORT_OVERRIDE_GDPA) +#define TEST_LAYER_EXPORT_OVERRIDE_GDPA 0 +#endif + +// export vkGetDeviceProcAddr +#if !defined(TEST_LAYER_EXPORT_LAYER_VK_GDPA) +#define TEST_LAYER_EXPORT_LAYER_VK_GDPA 0 +#endif + +// export vk_layerGetPhysicalDeviceProcAddr +#if !defined(TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR) +#define TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR 0 +#endif + +// export vkNegotiateLoaderLayerInterfaceVersion +#if !defined(LAYER_EXPORT_NEGOTIATE_LOADER_LAYER_INTERFACE_VERSION) +#define LAYER_EXPORT_NEGOTIATE_LOADER_LAYER_INTERFACE_VERSION 0 +#endif + +#if !defined(TEST_LAYER_NAME) +#define TEST_LAYER_NAME "VK_LAYER_LunarG_test_layer" +#endif + +TestLayer layer; +extern "C" { +FRAMEWORK_EXPORT TestLayer* get_test_layer_func() { return &layer; } +FRAMEWORK_EXPORT TestLayer* reset_layer_func() { + layer.~TestLayer(); + return new (&layer) TestLayer(); +} +} + +bool IsInstanceExtensionSupported(const char* extension_name) { + return layer.instance_extensions.end() != + std::find_if(layer.instance_extensions.begin(), layer.instance_extensions.end(), + [extension_name](Extension const& ext) { return string_eq(&ext.extensionName[0], extension_name); }); +} + +bool IsInstanceExtensionEnabled(const char* extension_name) { + return layer.enabled_instance_extensions.end() != + std::find_if(layer.enabled_instance_extensions.begin(), layer.enabled_instance_extensions.end(), + [extension_name](Extension const& ext) { return string_eq(&ext.extensionName[0], extension_name); }); +} + +bool IsDeviceExtensionAvailable(VkDevice dev, const char* extension_name) { + for (auto& device : layer.created_devices) { + if ((dev == VK_NULL_HANDLE || device.device_handle == dev) && + device.enabled_extensions.end() != + std::find_if(device.enabled_extensions.begin(), device.enabled_extensions.end(), + [extension_name](Extension const& ext) { return ext.extensionName == extension_name; })) { + return true; + } + } + return false; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_instance_func(VkInstance instance, const char* pName); + +VkLayerInstanceCreateInfo* get_chain_info(const VkInstanceCreateInfo* pCreateInfo, VkLayerFunction func) { + VkLayerInstanceCreateInfo* chain_info = (VkLayerInstanceCreateInfo*)pCreateInfo->pNext; + while (chain_info && !(chain_info->sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO && chain_info->function == func)) { + chain_info = (VkLayerInstanceCreateInfo*)chain_info->pNext; + } + assert(chain_info != NULL); + return chain_info; +} + +VkLayerDeviceCreateInfo* get_chain_info(const VkDeviceCreateInfo* pCreateInfo, VkLayerFunction func) { + VkLayerDeviceCreateInfo* chain_info = (VkLayerDeviceCreateInfo*)pCreateInfo->pNext; + while (chain_info && !(chain_info->sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO && chain_info->function == func)) { + chain_info = (VkLayerDeviceCreateInfo*)chain_info->pNext; + } + assert(chain_info != NULL); + return chain_info; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateInstanceLayerProperties(uint32_t*, VkLayerProperties*) { return VK_SUCCESS; } + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + if (pPropertyCount == nullptr) { + return VK_INCOMPLETE; + } + if (pLayerName && string_eq(pLayerName, TEST_LAYER_NAME)) { + if (pProperties) { + if (*pPropertyCount < layer.injected_instance_extensions.size()) { + return VK_INCOMPLETE; + } + for (size_t i = 0; i < layer.injected_instance_extensions.size(); i++) { + pProperties[i] = layer.injected_instance_extensions.at(i).get(); + } + *pPropertyCount = static_cast(layer.injected_instance_extensions.size()); + } else { + *pPropertyCount = static_cast(layer.injected_instance_extensions.size()); + } + return VK_SUCCESS; + } + + uint32_t hardware_prop_count = 0; + if (pProperties) { + hardware_prop_count = *pPropertyCount - static_cast(layer.injected_instance_extensions.size()); + } + + VkResult res = + layer.instance_dispatch_table.EnumerateInstanceExtensionProperties(pLayerName, &hardware_prop_count, pProperties); + if (res < 0) { + return res; + } + + if (pProperties == nullptr) { + *pPropertyCount = hardware_prop_count + static_cast(layer.injected_instance_extensions.size()); + } else { + if (hardware_prop_count + layer.injected_instance_extensions.size() > *pPropertyCount) { + *pPropertyCount = hardware_prop_count; + return VK_INCOMPLETE; + } + for (size_t i = 0; i < layer.injected_instance_extensions.size(); i++) { + pProperties[hardware_prop_count + i] = layer.injected_instance_extensions.at(i).get(); + } + *pPropertyCount = hardware_prop_count + static_cast(layer.injected_instance_extensions.size()); + } + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateDeviceLayerProperties(VkPhysicalDevice, uint32_t*, VkLayerProperties*) { + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + if (pPropertyCount == nullptr) { + return VK_INCOMPLETE; + } + + if (pLayerName && string_eq(pLayerName, TEST_LAYER_NAME)) { + if (pProperties) { + if (*pPropertyCount < static_cast(layer.injected_device_extensions.size())) { + return VK_INCOMPLETE; + } + for (size_t i = 0; i < layer.injected_device_extensions.size(); i++) { + pProperties[i] = layer.injected_device_extensions.at(i).get(); + } + *pPropertyCount = static_cast(layer.injected_device_extensions.size()); + } else { + *pPropertyCount = static_cast(layer.injected_device_extensions.size()); + } + return VK_SUCCESS; + } + + uint32_t hardware_prop_count = 0; + if (pProperties) { + hardware_prop_count = *pPropertyCount - static_cast(layer.injected_device_extensions.size()); + } + + VkResult res = layer.instance_dispatch_table.EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, + &hardware_prop_count, pProperties); + if (res < 0) { + return res; + } + + if (pProperties == nullptr) { + *pPropertyCount = hardware_prop_count + static_cast(layer.injected_device_extensions.size()); + } else { + if (hardware_prop_count + layer.injected_device_extensions.size() > *pPropertyCount) { + *pPropertyCount = hardware_prop_count; + return VK_INCOMPLETE; + } + for (size_t i = 0; i < layer.injected_device_extensions.size(); i++) { + pProperties[hardware_prop_count + i] = layer.injected_device_extensions.at(i).get(); + } + *pPropertyCount = hardware_prop_count + static_cast(layer.injected_device_extensions.size()); + } + return res; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumerateInstanceVersion(uint32_t* pApiVersion) { + if (pApiVersion != nullptr) { + *pApiVersion = VK_API_VERSION_1_0; + } + return VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) { + VkLayerInstanceCreateInfo* chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vk_icdGetPhysicalDeviceProcAddr fpGetPhysicalDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetPhysicalDeviceProcAddr; + PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance"); + if (fpCreateInstance == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + if (layer.call_create_device_while_create_device_is_called) { + auto* createDeviceCallback = get_chain_info(pCreateInfo, VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK); + layer.callback_vkCreateDevice = createDeviceCallback->u.layerDevice.pfnLayerCreateDevice; + layer.callback_vkDestroyDevice = createDeviceCallback->u.layerDevice.pfnLayerDestroyDevice; + } + + // Advance the link info for the next element of the chain + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + layer.next_vkGetInstanceProcAddr = fpGetInstanceProcAddr; + + bool use_modified_create_info = false; + VkInstanceCreateInfo instance_create_info{}; + VkApplicationInfo application_info{}; + if (pCreateInfo) { + instance_create_info = *pCreateInfo; + if (pCreateInfo->pApplicationInfo) { + application_info = *pCreateInfo->pApplicationInfo; + } + } + + // If the test needs to modify the api version, do it before we call down the chain + if (layer.alter_api_version != VK_API_VERSION_1_0 && pCreateInfo && pCreateInfo->pApplicationInfo) { + application_info.apiVersion = layer.alter_api_version; + instance_create_info.pApplicationInfo = &application_info; + use_modified_create_info = true; + } + const VkInstanceCreateInfo* create_info_pointer = use_modified_create_info ? &instance_create_info : pCreateInfo; + + if (layer.clobber_pInstance) { + memset(*pInstance, 0, 128); + } + PFN_vkEnumerateInstanceLayerProperties fpEnumerateInstanceLayerProperties{}; + PFN_vkEnumerateInstanceExtensionProperties fpEnumerateInstanceExtensionProperties{}; + PFN_vkEnumerateInstanceVersion fpEnumerateInstanceVersion{}; + + if (layer.query_vkEnumerateInstanceLayerProperties) { + fpEnumerateInstanceLayerProperties = reinterpret_cast( + fpGetInstanceProcAddr(nullptr, "vkEnumerateInstanceLayerProperties")); + uint32_t count = 0; + fpEnumerateInstanceLayerProperties(&count, nullptr); + if (count == 0) return VK_ERROR_LAYER_NOT_PRESENT; + std::vector layers{count, VkLayerProperties{}}; + fpEnumerateInstanceLayerProperties(&count, layers.data()); + if (count == 0) return VK_ERROR_LAYER_NOT_PRESENT; + } + if (layer.query_vkEnumerateInstanceExtensionProperties) { + fpEnumerateInstanceExtensionProperties = reinterpret_cast( + fpGetInstanceProcAddr(nullptr, "vkEnumerateInstanceExtensionProperties")); + uint32_t count = 0; + fpEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); + if (count == 0) return VK_ERROR_LAYER_NOT_PRESENT; + std::vector extensions{count, VkExtensionProperties{}}; + fpEnumerateInstanceExtensionProperties(nullptr, &count, extensions.data()); + if (count == 0) return VK_ERROR_LAYER_NOT_PRESENT; + } + if (layer.query_vkEnumerateInstanceVersion) { + fpEnumerateInstanceVersion = + reinterpret_cast(fpGetInstanceProcAddr(nullptr, "vkEnumerateInstanceVersion")); + uint32_t version = 0; + fpEnumerateInstanceVersion(&version); + if (version == 0) return VK_ERROR_LAYER_NOT_PRESENT; + } + + // Continue call down the chain + VkResult result = fpCreateInstance(create_info_pointer, pAllocator, pInstance); + if (result != VK_SUCCESS) { + return result; + } + layer.instance_handle = *pInstance; + if (layer.use_gipa_GetPhysicalDeviceProcAddr) { + layer.next_GetPhysicalDeviceProcAddr = + reinterpret_cast(fpGetInstanceProcAddr(*pInstance, "vk_layerGetPhysicalDeviceProcAddr")); + } else { + layer.next_GetPhysicalDeviceProcAddr = fpGetPhysicalDeviceProcAddr; + } + // Init layer's dispatch table using GetInstanceProcAddr of + // next layer in the chain. + layer_init_instance_dispatch_table(layer.instance_handle, &layer.instance_dispatch_table, fpGetInstanceProcAddr); + + layer.enabled_instance_extensions.clear(); + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + layer.enabled_instance_extensions.push_back({pCreateInfo->ppEnabledExtensionNames[i]}); + } + + if (layer.create_instance_callback) result = layer.create_instance_callback(layer); + + for (auto& func : layer.custom_physical_device_interception_functions) { + auto next_func = layer.next_GetPhysicalDeviceProcAddr(*pInstance, func.name.c_str()); + layer.custom_dispatch_functions.at(func.name.c_str()) = next_func; + } + + for (auto& func : layer.custom_device_interception_functions) { + auto next_func = layer.next_vkGetInstanceProcAddr(*pInstance, func.name.c_str()); + layer.custom_dispatch_functions.at(func.name.c_str()) = next_func; + } + + if (layer.do_spurious_allocations_in_create_instance && pAllocator && pAllocator->pfnAllocation) { + layer.spurious_instance_memory_allocation = + pAllocator->pfnAllocation(pAllocator->pUserData, 100, 8, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE); + if (layer.spurious_instance_memory_allocation == nullptr) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + } + + if (!layer.make_spurious_log_in_create_instance.empty()) { + auto* chain = reinterpret_cast(pCreateInfo->pNext); + while (chain) { + if (chain->sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) { + auto* debug_messenger = reinterpret_cast(chain); + VkDebugUtilsMessengerCallbackDataEXT data{}; + data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; + data.pMessage = layer.make_spurious_log_in_create_instance.c_str(); + debug_messenger->pfnUserCallback(VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, &data, debug_messenger->pUserData); + } + + chain = chain->pNext; + } + } + + if (layer.buggy_query_of_vkCreateDevice) { + layer.instance_dispatch_table.CreateDevice = + reinterpret_cast(fpGetInstanceProcAddr(nullptr, "vkCreateDevice")); + } + + if (layer.call_create_device_while_create_device_is_called) { + uint32_t phys_dev_count = 0; + result = layer.instance_dispatch_table.EnumeratePhysicalDevices(layer.instance_handle, &phys_dev_count, nullptr); + if (result != VK_SUCCESS) { + return result; + } + layer.queried_physical_devices.resize(phys_dev_count); + result = layer.instance_dispatch_table.EnumeratePhysicalDevices(layer.instance_handle, &phys_dev_count, + layer.queried_physical_devices.data()); + if (result != VK_SUCCESS) { + return result; + } + } + + if (layer.check_if_EnumDevExtProps_is_same_as_queried_function) { + auto chain_info_EnumDeviceExtProps = reinterpret_cast( + fpGetInstanceProcAddr(layer.instance_handle, "vkEnumerateDeviceExtensionProperties")); + if (chain_info_EnumDeviceExtProps != layer.instance_dispatch_table.EnumerateDeviceExtensionProperties) { + return VK_ERROR_INITIALIZATION_FAILED; + } + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_override_vkCreateInstance(const VkInstanceCreateInfo*, const VkAllocationCallbacks*, + VkInstance*) { + return VK_ERROR_INVALID_SHADER_NV; +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator) { + if (layer.spurious_instance_memory_allocation && pAllocator && pAllocator->pfnFree) { + pAllocator->pfnFree(pAllocator->pUserData, layer.spurious_instance_memory_allocation); + layer.spurious_instance_memory_allocation = nullptr; + } + layer.enabled_instance_extensions.clear(); + + layer.instance_dispatch_table.DestroyInstance(instance, pAllocator); +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) { + VkLayerDeviceCreateInfo* chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; + VkInstance instance_to_use = layer.buggy_query_of_vkCreateDevice ? NULL : layer.instance_handle; + PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(instance_to_use, "vkCreateDevice"); + if (fpCreateDevice == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + layer.next_vkGetDeviceProcAddr = fpGetDeviceProcAddr; + + if (layer.check_if_EnumDevExtProps_is_same_as_queried_function) { + auto chain_info_EnumDeviceExtProps = reinterpret_cast( + fpGetInstanceProcAddr(layer.instance_handle, "vkEnumerateDeviceExtensionProperties")); + if (chain_info_EnumDeviceExtProps != layer.instance_dispatch_table.EnumerateDeviceExtensionProperties) { + return VK_ERROR_INITIALIZATION_FAILED; + } + } + // Advance the link info for the next element on the chain + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + + if (layer.clobber_pDevice) { + memset(*pDevice, 0, 128); + } + + VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); + if (result != VK_SUCCESS) { + return result; + } + TestLayer::Device device{}; + device.device_handle = *pDevice; + + // initialize layer's dispatch table + layer_init_device_dispatch_table(device.device_handle, &device.dispatch_table, fpGetDeviceProcAddr); + + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { + device.enabled_extensions.push_back({pCreateInfo->ppEnabledExtensionNames[i]}); + } + + for (auto& func : layer.custom_device_interception_functions) { + auto next_func = layer.next_vkGetDeviceProcAddr(*pDevice, func.name.c_str()); + layer.custom_dispatch_functions.at(func.name.c_str()) = next_func; + } + + if (layer.create_device_callback) { + result = layer.create_device_callback(layer); + } + + // Need to add the created devices to the list so it can be freed + layer.created_devices.push_back(device); + + if (layer.do_spurious_allocations_in_create_device && pAllocator && pAllocator->pfnAllocation) { + void* allocation = pAllocator->pfnAllocation(pAllocator->pUserData, 110, 8, VK_SYSTEM_ALLOCATION_SCOPE_DEVICE); + if (allocation == nullptr) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } else { + layer.spurious_device_memory_allocations.push_back({allocation, device.device_handle}); + } + } + + if (layer.call_create_device_while_create_device_is_called) { + PFN_vkGetDeviceProcAddr next_gdpa = layer.next_vkGetDeviceProcAddr; + result = layer.callback_vkCreateDevice( + instance_to_use, layer.queried_physical_devices.at(layer.physical_device_index_to_use_during_create_device), + pCreateInfo, pAllocator, &layer.second_device_created_during_create_device.device_handle, get_instance_func, + &next_gdpa); + if (result != VK_SUCCESS) { + return result; + } + // initialize the other device's dispatch table + layer_init_device_dispatch_table(layer.second_device_created_during_create_device.device_handle, + &layer.second_device_created_during_create_device.dispatch_table, next_gdpa); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, + VkPhysicalDevice* pPhysicalDevices) { + if (layer.add_phys_devs || layer.remove_phys_devs || layer.reorder_phys_devs) { + VkResult res = VK_SUCCESS; + + if (layer.complete_physical_devices.size() == 0) { + // Get list of all physical devices from lower down + // NOTE: This only works if we don't test changing the number of devices + // underneath us when using this test. + uint32_t icd_count = 0; + layer.instance_dispatch_table.EnumeratePhysicalDevices(instance, &icd_count, nullptr); + std::vector tmp_vector; + tmp_vector.resize(icd_count); + layer.instance_dispatch_table.EnumeratePhysicalDevices(instance, &icd_count, tmp_vector.data()); + layer.complete_physical_devices.clear(); + + if (layer.remove_phys_devs) { + // Erase the 3rd and 4th items + layer.removed_physical_devices.push_back(tmp_vector[3]); + layer.removed_physical_devices.push_back(tmp_vector[4]); + tmp_vector.erase(tmp_vector.begin() + 3); + tmp_vector.erase(tmp_vector.begin() + 3); + } + + if (layer.add_phys_devs) { + // Insert a new device in the beginning, middle, and end + uint32_t middle = static_cast(tmp_vector.size() / 2); + VkPhysicalDevice new_phys_dev = reinterpret_cast((size_t)(0xABCD0000)); + layer.added_physical_devices.push_back(new_phys_dev); + tmp_vector.insert(tmp_vector.begin(), new_phys_dev); + new_phys_dev = reinterpret_cast((size_t)(0xBADC0000)); + layer.added_physical_devices.push_back(new_phys_dev); + tmp_vector.insert(tmp_vector.begin() + middle, new_phys_dev); + new_phys_dev = reinterpret_cast((size_t)(0xDCBA0000)); + layer.added_physical_devices.push_back(new_phys_dev); + tmp_vector.push_back(new_phys_dev); + } + + if (layer.reorder_phys_devs) { + // Flip the order of items + for (int32_t dev = static_cast(tmp_vector.size() - 1); dev >= 0; --dev) { + layer.complete_physical_devices.push_back(tmp_vector[dev]); + } + } else { + // Otherwise, keep the order the same + for (uint32_t dev = 0; dev < tmp_vector.size(); ++dev) { + layer.complete_physical_devices.push_back(tmp_vector[dev]); + } + } + } + + if (nullptr == pPhysicalDevices) { + *pPhysicalDeviceCount = static_cast(layer.complete_physical_devices.size()); + } else { + uint32_t adj_count = static_cast(layer.complete_physical_devices.size()); + if (*pPhysicalDeviceCount < adj_count) { + adj_count = *pPhysicalDeviceCount; + res = VK_INCOMPLETE; + } + for (uint32_t dev = 0; dev < adj_count; ++dev) { + pPhysicalDevices[dev] = layer.complete_physical_devices[dev]; + } + *pPhysicalDeviceCount = adj_count; + } + + return res; + } else { + return layer.instance_dispatch_table.EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); + } +} + +VKAPI_ATTR void VKAPI_CALL test_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties* pProperties) { + if (std::find(layer.removed_physical_devices.begin(), layer.removed_physical_devices.end(), physicalDevice) != + layer.removed_physical_devices.end()) { + // Should not get here since the application should not know about those devices + assert(false); + } else if (std::find(layer.added_physical_devices.begin(), layer.added_physical_devices.end(), physicalDevice) != + layer.added_physical_devices.end()) { + // Added device so put in some placeholder info we can test against + pProperties->apiVersion = VK_API_VERSION_1_2; + pProperties->driverVersion = VK_MAKE_API_VERSION(0, 12, 14, 196); + pProperties->vendorID = 0xDECAFBAD; + pProperties->deviceID = 0xDEADBADD; +#if defined(_WIN32) + strncpy_s(pProperties->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, "physdev_added_xx", 17); +#else + strncpy(pProperties->deviceName, "physdev_added_xx", VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + } else { + // Not an affected device so just return + layer.instance_dispatch_table.GetPhysicalDeviceProperties(physicalDevice, pProperties); + } +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkEnumeratePhysicalDeviceGroups( + VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) { + if (layer.add_phys_devs || layer.remove_phys_devs || layer.reorder_phys_devs) { + VkResult res = VK_SUCCESS; + + if (layer.complete_physical_device_groups.size() == 0) { + uint32_t fake_count = 1000; + // Call EnumerateDevices to add remove devices as needed + test_vkEnumeratePhysicalDevices(instance, &fake_count, nullptr); + + // Get list of all physical devices from lower down + // NOTE: This only works if we don't test changing the number of devices + // underneath us when using this test. + uint32_t icd_group_count = 0; + layer.instance_dispatch_table.EnumeratePhysicalDeviceGroups(instance, &icd_group_count, nullptr); + std::vector tmp_vector(icd_group_count, + {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + layer.instance_dispatch_table.EnumeratePhysicalDeviceGroups(instance, &icd_group_count, tmp_vector.data()); + layer.complete_physical_device_groups.clear(); + + if (layer.remove_phys_devs) { + // Now, if a device has been removed, and it was the only group, we need to remove the group as well. + for (uint32_t rem_dev = 0; rem_dev < layer.removed_physical_devices.size(); ++rem_dev) { + for (uint32_t group = 0; group < icd_group_count; ++group) { + for (uint32_t grp_dev = 0; grp_dev < tmp_vector[group].physicalDeviceCount; ++grp_dev) { + if (tmp_vector[group].physicalDevices[grp_dev] == layer.removed_physical_devices[rem_dev]) { + for (uint32_t cp_item = grp_dev + 1; cp_item < tmp_vector[group].physicalDeviceCount; ++cp_item) { + tmp_vector[group].physicalDevices[grp_dev] = tmp_vector[group].physicalDevices[cp_item]; + } + tmp_vector[group].physicalDeviceCount--; + } + } + } + } + for (uint32_t group = 0; group < tmp_vector.size(); ++group) { + if (tmp_vector[group].physicalDeviceCount == 0) { + layer.removed_physical_device_groups.push_back(tmp_vector[group]); + tmp_vector.erase(tmp_vector.begin() + group); + --group; + } + } + } + + if (layer.add_phys_devs) { + // Add a new group for each physical device not associated with a current group + for (uint32_t dev = 0; dev < layer.added_physical_devices.size(); ++dev) { + VkPhysicalDeviceGroupProperties props{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}; + props.physicalDeviceCount = 1; + props.physicalDevices[0] = layer.added_physical_devices[dev]; + tmp_vector.push_back(props); + layer.added_physical_device_groups.push_back(props); + } + } + + if (layer.reorder_phys_devs) { + // Flip the order of items + for (int32_t dev = static_cast(tmp_vector.size() - 1); dev >= 0; --dev) { + layer.complete_physical_device_groups.push_back(tmp_vector[dev]); + } + } else { + // Otherwise, keep the order the same + for (uint32_t dev = 0; dev < tmp_vector.size(); ++dev) { + layer.complete_physical_device_groups.push_back(tmp_vector[dev]); + } + } + } + + if (nullptr == pPhysicalDeviceGroupProperties) { + *pPhysicalDeviceGroupCount = static_cast(layer.complete_physical_device_groups.size()); + } else { + uint32_t adj_count = static_cast(layer.complete_physical_device_groups.size()); + if (*pPhysicalDeviceGroupCount < adj_count) { + adj_count = *pPhysicalDeviceGroupCount; + res = VK_INCOMPLETE; + } + for (uint32_t dev = 0; dev < adj_count; ++dev) { + pPhysicalDeviceGroupProperties[dev] = layer.complete_physical_device_groups[dev]; + } + *pPhysicalDeviceGroupCount = adj_count; + } + + return res; + } else { + return layer.instance_dispatch_table.EnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, + pPhysicalDeviceGroupProperties); + } +} + +// device functions + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) { + for (uint32_t i = 0; i < layer.spurious_device_memory_allocations.size();) { + auto& allocation = layer.spurious_device_memory_allocations[i]; + if (allocation.device == device && pAllocator && pAllocator->pfnFree) { + pAllocator->pfnFree(pAllocator->pUserData, allocation.allocation); + layer.spurious_device_memory_allocations.erase(layer.spurious_device_memory_allocations.begin() + i); + } else { + i++; + } + } + + if (layer.call_create_device_while_create_device_is_called) { + layer.callback_vkDestroyDevice(layer.second_device_created_during_create_device.device_handle, pAllocator, + layer.second_device_created_during_create_device.dispatch_table.DestroyDevice); + } + + auto it = std::find_if(std::begin(layer.created_devices), std::end(layer.created_devices), + [device](const TestLayer::Device& dev) { return device == dev.device_handle; }); + if (it != std::end(layer.created_devices)) { + it->dispatch_table.DestroyDevice(device, pAllocator); + layer.created_devices.erase(it); + } +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateDebugUtilsMessengerEXT(VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugUtilsMessengerEXT* pMessenger) { + if (layer.instance_dispatch_table.CreateDebugUtilsMessengerEXT) { + return layer.instance_dispatch_table.CreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger); + } else { + return VK_SUCCESS; + } +} + +VKAPI_ATTR void VKAPI_CALL test_vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks* pAllocator) { + if (layer.instance_dispatch_table.DestroyDebugUtilsMessengerEXT) + return layer.instance_dispatch_table.DestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator); +} + +// Debug utils & debug marker ext stubs +VKAPI_ATTR VkResult VKAPI_CALL test_vkDebugMarkerSetObjectTagEXT(VkDevice dev, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) { + for (const auto& d : layer.created_devices) { + if (d.device_handle == dev) { + if (d.dispatch_table.DebugMarkerSetObjectTagEXT) { + return d.dispatch_table.DebugMarkerSetObjectTagEXT(dev, pTagInfo); + } else { + return VK_SUCCESS; + } + } + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkDebugMarkerSetObjectNameEXT(VkDevice dev, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) { + for (const auto& d : layer.created_devices) { + if (d.device_handle == dev) { + if (d.dispatch_table.DebugMarkerSetObjectNameEXT) { + return d.dispatch_table.DebugMarkerSetObjectNameEXT(dev, pNameInfo); + } else { + return VK_SUCCESS; + } + } + } + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDebugMarkerBeginEXT(VkCommandBuffer cmd_buf, const VkDebugMarkerMarkerInfoEXT* marker_info) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.CmdDebugMarkerBeginEXT) + layer.created_devices[0].dispatch_table.CmdDebugMarkerBeginEXT(cmd_buf, marker_info); +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDebugMarkerEndEXT(VkCommandBuffer cmd_buf) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.CmdDebugMarkerEndEXT) + layer.created_devices[0].dispatch_table.CmdDebugMarkerEndEXT(cmd_buf); +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDebugMarkerInsertEXT(VkCommandBuffer cmd_buf, const VkDebugMarkerMarkerInfoEXT* marker_info) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.CmdDebugMarkerInsertEXT) + layer.created_devices[0].dispatch_table.CmdDebugMarkerInsertEXT(cmd_buf, marker_info); +} + +VKAPI_ATTR VkResult VKAPI_CALL test_vkSetDebugUtilsObjectNameEXT(VkDevice dev, const VkDebugUtilsObjectNameInfoEXT* pNameInfo) { + for (const auto& d : layer.created_devices) { + if (d.device_handle == dev) { + if (d.dispatch_table.SetDebugUtilsObjectNameEXT) { + return d.dispatch_table.SetDebugUtilsObjectNameEXT(dev, pNameInfo); + } else { + return VK_SUCCESS; + } + } + } + return VK_SUCCESS; +} +VKAPI_ATTR VkResult VKAPI_CALL test_vkSetDebugUtilsObjectTagEXT(VkDevice dev, const VkDebugUtilsObjectTagInfoEXT* pTagInfo) { + for (const auto& d : layer.created_devices) { + if (d.device_handle == dev) { + if (d.dispatch_table.SetDebugUtilsObjectTagEXT) { + return d.dispatch_table.SetDebugUtilsObjectTagEXT(dev, pTagInfo); + } else { + return VK_SUCCESS; + } + } + } + return VK_SUCCESS; +} +VKAPI_ATTR void VKAPI_CALL test_vkQueueBeginDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT* label) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.QueueBeginDebugUtilsLabelEXT) + layer.created_devices[0].dispatch_table.QueueBeginDebugUtilsLabelEXT(queue, label); +} +VKAPI_ATTR void VKAPI_CALL test_vkQueueEndDebugUtilsLabelEXT(VkQueue queue) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.QueueEndDebugUtilsLabelEXT) + layer.created_devices[0].dispatch_table.QueueEndDebugUtilsLabelEXT(queue); +} +VKAPI_ATTR void VKAPI_CALL test_vkQueueInsertDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT* label) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.QueueInsertDebugUtilsLabelEXT) + layer.created_devices[0].dispatch_table.QueueInsertDebugUtilsLabelEXT(queue, label); +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdBeginDebugUtilsLabelEXT(VkCommandBuffer cmd_buf, const VkDebugUtilsLabelEXT* label) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.CmdBeginDebugUtilsLabelEXT) + layer.created_devices[0].dispatch_table.CmdBeginDebugUtilsLabelEXT(cmd_buf, label); +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer cmd_buf) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.CmdEndDebugUtilsLabelEXT) + layer.created_devices[0].dispatch_table.CmdEndDebugUtilsLabelEXT(cmd_buf); +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer cmd_buf, const VkDebugUtilsLabelEXT* label) { + // Just call the first device - + if (layer.created_devices[0].dispatch_table.CmdInsertDebugUtilsLabelEXT) + layer.created_devices[0].dispatch_table.CmdInsertDebugUtilsLabelEXT(cmd_buf, label); +} + +// forward declarations needed for trampolines +#if TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR +extern "C" { +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_layerGetPhysicalDeviceProcAddr(VkInstance instance, const char* pName); +} +#endif + +// trampolines +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_device_func(VkDevice device, const char* pName); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_device_func_impl([[maybe_unused]] VkDevice device, const char* pName) { + if (string_eq(pName, "vkGetDeviceProcAddr")) return to_vkVoidFunction(get_device_func); + if (string_eq(pName, "vkDestroyDevice")) return to_vkVoidFunction(test_vkDestroyDevice); + + if (IsDeviceExtensionAvailable(device, VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + if (string_eq(pName, "vkDebugMarkerSetObjectTagEXT")) return to_vkVoidFunction(test_vkDebugMarkerSetObjectTagEXT); + if (string_eq(pName, "vkDebugMarkerSetObjectNameEXT")) return to_vkVoidFunction(test_vkDebugMarkerSetObjectNameEXT); + if (string_eq(pName, "vkCmdDebugMarkerBeginEXT")) return to_vkVoidFunction(test_vkCmdDebugMarkerBeginEXT); + if (string_eq(pName, "vkCmdDebugMarkerEndEXT")) return to_vkVoidFunction(test_vkCmdDebugMarkerEndEXT); + if (string_eq(pName, "vkCmdDebugMarkerInsertEXT")) return to_vkVoidFunction(test_vkCmdDebugMarkerInsertEXT); + } + if (IsInstanceExtensionEnabled(VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { + if (string_eq(pName, "vkSetDebugUtilsObjectNameEXT")) return to_vkVoidFunction(test_vkSetDebugUtilsObjectNameEXT); + if (string_eq(pName, "vkSetDebugUtilsObjectTagEXT")) return to_vkVoidFunction(test_vkSetDebugUtilsObjectTagEXT); + if (string_eq(pName, "vkQueueBeginDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkQueueBeginDebugUtilsLabelEXT); + if (string_eq(pName, "vkQueueEndDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkQueueEndDebugUtilsLabelEXT); + if (string_eq(pName, "vkQueueInsertDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkQueueInsertDebugUtilsLabelEXT); + if (string_eq(pName, "vkCmdBeginDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkCmdBeginDebugUtilsLabelEXT); + if (string_eq(pName, "vkCmdEndDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkCmdEndDebugUtilsLabelEXT); + if (string_eq(pName, "vkCmdInsertDebugUtilsLabelEXT")) return to_vkVoidFunction(test_vkCmdInsertDebugUtilsLabelEXT); + } + + for (auto& func : layer.custom_device_interception_functions) { + if (func.name == pName) { + return to_vkVoidFunction(func.function); + } + } + + for (auto& func : layer.custom_device_implementation_functions) { + if (func.name == pName) { + return to_vkVoidFunction(func.function); + } + } + + return nullptr; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_device_func([[maybe_unused]] VkDevice device, const char* pName) { + PFN_vkVoidFunction ret_dev = get_device_func_impl(device, pName); + if (ret_dev != nullptr) return ret_dev; + + return layer.next_vkGetDeviceProcAddr(device, pName); +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_physical_device_func([[maybe_unused]] VkInstance instance, const char* pName) { + if (string_eq(pName, "vkEnumerateDeviceLayerProperties")) return to_vkVoidFunction(test_vkEnumerateDeviceLayerProperties); + if (string_eq(pName, "vkEnumerateDeviceExtensionProperties")) + return to_vkVoidFunction(test_vkEnumerateDeviceExtensionProperties); + if (string_eq(pName, "vkEnumeratePhysicalDevices")) return (PFN_vkVoidFunction)test_vkEnumeratePhysicalDevices; + if (string_eq(pName, "vkEnumeratePhysicalDeviceGroups")) return (PFN_vkVoidFunction)test_vkEnumeratePhysicalDeviceGroups; + if (string_eq(pName, "vkGetPhysicalDeviceProperties")) return (PFN_vkVoidFunction)test_vkGetPhysicalDeviceProperties; + + for (auto& func : layer.custom_physical_device_interception_functions) { + if (func.name == pName) { + return to_vkVoidFunction(func.function); + } + } + + for (auto& func : layer.custom_physical_device_implementation_functions) { + if (func.name == pName) { + return to_vkVoidFunction(func.function); + } + } + +#if TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR + if (string_eq(pName, "vk_layerGetPhysicalDeviceProcAddr")) return to_vkVoidFunction(vk_layerGetPhysicalDeviceProcAddr); +#endif + return nullptr; +} +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_instance_func(VkInstance instance, const char* pName); +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_instance_func_impl(VkInstance instance, const char* pName) { + if (pName == nullptr) return nullptr; + if (string_eq(pName, "vkGetInstanceProcAddr")) return to_vkVoidFunction(get_instance_func); + if (string_eq(pName, "vkEnumerateInstanceLayerProperties")) return to_vkVoidFunction(test_vkEnumerateInstanceLayerProperties); + if (string_eq(pName, "vkEnumerateInstanceExtensionProperties")) + return to_vkVoidFunction(test_vkEnumerateInstanceExtensionProperties); + if (string_eq(pName, "vkEnumerateInstanceVersion")) return to_vkVoidFunction(test_vkEnumerateInstanceVersion); + if (string_eq(pName, "vkCreateInstance")) return to_vkVoidFunction(test_vkCreateInstance); + if (string_eq(pName, "vkDestroyInstance")) return to_vkVoidFunction(test_vkDestroyInstance); + if (string_eq(pName, "vkCreateDevice")) return to_vkVoidFunction(test_vkCreateDevice); + if (string_eq(pName, "vkGetDeviceProcAddr")) return to_vkVoidFunction(get_device_func); + + PFN_vkVoidFunction ret_phys_dev = get_physical_device_func(instance, pName); + if (ret_phys_dev != nullptr) return ret_phys_dev; + + PFN_vkVoidFunction ret_dev = get_device_func_impl(nullptr, pName); + if (ret_dev != nullptr) return ret_dev; + + return nullptr; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_instance_func(VkInstance instance, const char* pName) { + PFN_vkVoidFunction ret_dev = get_instance_func_impl(instance, pName); + if (ret_dev != nullptr) return ret_dev; + + return layer.next_vkGetInstanceProcAddr(instance, pName); +} + +// Exported functions +extern "C" { +#if TEST_LAYER_EXPORT_ENUMERATE_FUNCTIONS + +// Pre-instance handling functions + +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL test_preinst_vkEnumerateInstanceLayerProperties( + const VkEnumerateInstanceLayerPropertiesChain* pChain, uint32_t* pPropertyCount, VkLayerProperties* pProperties) { + VkResult res = pChain->pfnNextLayer(pChain->pNextLink, pPropertyCount, pProperties); + if (nullptr == pProperties) { + *pPropertyCount = layer.reported_layer_props; + } else { + uint32_t count = layer.reported_layer_props; + if (*pPropertyCount < layer.reported_layer_props) { + count = *pPropertyCount; + res = VK_INCOMPLETE; + } + for (uint32_t i = 0; i < count; ++i) { + snprintf(pProperties[i].layerName, VK_MAX_EXTENSION_NAME_SIZE, "%02d_layer", count); + pProperties[i].specVersion = count; + pProperties[i].implementationVersion = 0xABCD0000 + count; + } + } + return res; +} + +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL test_preinst_vkEnumerateInstanceExtensionProperties( + const VkEnumerateInstanceExtensionPropertiesChain* pChain, const char* pLayerName, uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + VkResult res = pChain->pfnNextLayer(pChain->pNextLink, pLayerName, pPropertyCount, pProperties); + if (nullptr == pProperties) { + *pPropertyCount = layer.reported_extension_props; + } else { + uint32_t count = layer.reported_extension_props; + if (*pPropertyCount < layer.reported_extension_props) { + count = *pPropertyCount; + res = VK_INCOMPLETE; + } + for (uint32_t i = 0; i < count; ++i) { + snprintf(pProperties[i].extensionName, VK_MAX_EXTENSION_NAME_SIZE, "%02d_ext", count); + pProperties[i].specVersion = count; + } + } + return res; +} + +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +test_preinst_vkEnumerateInstanceVersion(const VkEnumerateInstanceVersionChain* pChain, uint32_t* pApiVersion) { + VkResult res = pChain->pfnNextLayer(pChain->pNextLink, pApiVersion); + *pApiVersion = layer.reported_instance_version; + return res; +} + +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, + VkLayerProperties* pProperties) { + return test_vkEnumerateInstanceLayerProperties(pPropertyCount, pProperties); +} +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + return test_vkEnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties); +} + +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkLayerProperties* pProperties) { + return test_vkEnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties); +} +FRAMEWORK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, + const char* pLayerName, + uint32_t* pPropertyCount, + VkExtensionProperties* pProperties) { + return test_vkEnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties); +} +#endif + +#if TEST_LAYER_EXPORT_LAYER_NAMED_GIPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL test_layer_GetInstanceProcAddr(VkInstance instance, const char* pName) { + return get_instance_func(instance, pName); +} +#endif + +#if TEST_LAYER_EXPORT_OVERRIDE_GIPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL test_override_vkGetInstanceProcAddr(VkInstance instance, + const char* pName) { + if (string_eq(pName, "vkCreateInstance")) return to_vkVoidFunction(test_override_vkCreateInstance); + return get_instance_func(instance, pName); +} +#endif + +#if TEST_LAYER_EXPORT_LAYER_VK_GIPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName) { + return get_instance_func(instance, pName); +} +#endif + +#if TEST_LAYER_EXPORT_LAYER_NAMED_GDPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL test_layer_GetDeviceProcAddr(VkDevice device, const char* pName) { + return get_device_func(device, pName); +} +#endif + +#if TEST_LAYER_EXPORT_OVERRIDE_GDPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL test_override_GetDeviceProcAddr(VkDevice device, const char* pName) { + return get_device_func(device, pName); +} +#endif + +#if TEST_LAYER_EXPORT_LAYER_VK_GDPA +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* pName) { + return get_device_func(device, pName); +} +#endif + +#if TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR +FRAMEWORK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_layerGetPhysicalDeviceProcAddr(VkInstance instance, + const char* pName) { + auto func = get_physical_device_func(instance, pName); + if (func != nullptr) return func; + return layer.next_GetPhysicalDeviceProcAddr(instance, pName); +} +#endif + +#if LAYER_EXPORT_NEGOTIATE_LOADER_LAYER_INTERFACE_VERSION +// vk_layer.h has a forward declaration of vkNegotiateLoaderLayerInterfaceVersion, which doesn't have any attributes +// Since FRAMEWORK_EXPORT adds __declspec(dllexport), we can't do that here, thus we need our own macro +#if (defined(__GNUC__) && (__GNUC__ >= 4)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +#define EXPORT_NEGOTIATE_FUNCTION __attribute__((visibility("default"))) +#else +#define EXPORT_NEGOTIATE_FUNCTION +#endif + +EXPORT_NEGOTIATE_FUNCTION VKAPI_ATTR VkResult VKAPI_CALL +vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface* pVersionStruct) { + if (pVersionStruct) { + if (pVersionStruct->loaderLayerInterfaceVersion < layer.min_implementation_version) { + return VK_ERROR_INITIALIZATION_FAILED; + } + + pVersionStruct->loaderLayerInterfaceVersion = layer.implementation_version; + pVersionStruct->pfnGetInstanceProcAddr = get_instance_func; + pVersionStruct->pfnGetDeviceProcAddr = get_device_func; +#if TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR + pVersionStruct->pfnGetPhysicalDeviceProcAddr = vk_layerGetPhysicalDeviceProcAddr; +#else + pVersionStruct->pfnGetPhysicalDeviceProcAddr = nullptr; +#endif + + return VK_SUCCESS; + } + return VK_ERROR_INITIALIZATION_FAILED; +} +#endif +} // extern "C" diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.h b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.h new file mode 100644 index 0000000000..14e60bcc81 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/test_layer.h @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#pragma once + +#include "test_util.h" + +#include + +#include "layer/layer_util.h" + +#include "loader/generated/vk_layer_dispatch_table.h" + +/* +Interface Version 0 +*/ + +/* +must export the following: -- always exported +vkEnumerateInstanceLayerProperties +vkEnumerateInstanceExtensionProperties +Must export the following but nothing -- always exported +vkEnumerateDeviceLayerProperties +vkEnumerateDeviceExtensionProperties +*/ + +// export test_layer_GetInstanceProcAddr(instance, pName) +// TEST_LAYER_EXPORT_LAYER_NAMED_GIPA +// or (single layer binary) +// export vkGetInstanceProcAddr +// TEST_LAYER_EXPORT_NO_NAME_GIPA + +// export test_layer_GetDeviceProcAddr(device, pName) +// TEST_LAYER_EXPORT_LAYER_NAMED_GDPA +// or (single layer binary) +// export vkGetDeviceProcAddr +// TEST_LAYER_EXPORT_NO_NAME_GDPA + +/* +Interface Version 1 +*/ +// export GetInstanceProcAddr +// TEST_LAYER_EXPORT_NO_PREFIX_GIPA + +// export GetDeviceProcAddr +// TEST_LAYER_EXPORT_NO_PREFIX_GDPA + +// Layer Manifest can override the names of the GetInstanceProcAddr and GetDeviceProcAddrfunctions + +/* +Interface Version 2 +*/ +// export vk_layerGetPhysicalDeviceProcAddr +// TEST_LAYER_EXPORT_GET_PHYSICAL_DEVICE_PROC_ADDR + +// export vkNegotiateLoaderLayerInterfaceVersion +// TEST_LAYER_EXPORT_NEGOTIATE_LOADER_LAYER_INTERFACE_VERSION + +// Added manifest version 1.1.0 + +struct TestLayer; + +// Callbacks allow tests to implement custom functionality without modifying the layer binary +// TestLayer* layer - Access to the TestLayer object itself +// void* data - pointer to test specific thing, used to pass data from the test into the TestLayer +// Returns VkResult - This value will be used as the return value of the function +using FP_layer_callback = VkResult (*)(TestLayer& layer, void* data); + +struct TestLayer { + std::filesystem::path manifest_file_path; + uint32_t manifest_version = VK_MAKE_API_VERSION(0, 1, 1, 2); + + BUILDER_VALUE(bool, is_meta_layer) + + BUILDER_VALUE_WITH_DEFAULT(uint32_t, api_version, VK_API_VERSION_1_0) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, reported_layer_props, 1) + BUILDER_VALUE(uint32_t, reported_extension_props) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, reported_instance_version, VK_API_VERSION_1_0) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, implementation_version, 2) + BUILDER_VALUE(uint32_t, min_implementation_version) + BUILDER_VALUE(std::string, description) + + // Some layers may try to change the API version during instance creation - we should allow testing of such behavior + BUILDER_VALUE_WITH_DEFAULT(uint32_t, alter_api_version, VK_API_VERSION_1_0) + + BUILDER_VECTOR(std::string, alternative_function_names, alternative_function_name) + + BUILDER_VECTOR(Extension, instance_extensions, instance_extension) + std::vector enabled_instance_extensions; + + BUILDER_VECTOR(Extension, device_extensions, device_extension) + + BUILDER_VALUE(std::string, enable_environment); + BUILDER_VALUE(std::string, disable_environment); + + // Modifies the extension list returned by vkEnumerateInstanceExtensionProperties to include what is in this vector + BUILDER_VECTOR(Extension, injected_instance_extensions, injected_instance_extension) + // Modifies the extension list returned by vkEnumerateDeviceExtensionProperties to include what is in this vector + BUILDER_VECTOR(Extension, injected_device_extensions, injected_device_extension) + + BUILDER_VECTOR(LayerDefinition, meta_component_layers, meta_component_layer); + + BUILDER_VALUE(bool, intercept_vkEnumerateInstanceExtensionProperties) + BUILDER_VALUE(bool, intercept_vkEnumerateInstanceLayerProperties) + // Called in vkCreateInstance after calling down the chain & returning + BUILDER_VALUE(std::function, create_instance_callback) + // Called in vkCreateDevice after calling down the chain & returning + BUILDER_VALUE(std::function, create_device_callback) + + // Physical device modifier test flags and members. This data is primarily used to test adding, removing and + // re-ordering physical device data in a layer. + BUILDER_VALUE(bool, add_phys_devs) + BUILDER_VALUE(bool, remove_phys_devs) + BUILDER_VALUE(bool, reorder_phys_devs) + BUILDER_VECTOR(VkPhysicalDevice, complete_physical_devices, complete_physical_device) + BUILDER_VECTOR(VkPhysicalDevice, removed_physical_devices, removed_physical_device) + BUILDER_VECTOR(VkPhysicalDevice, added_physical_devices, added_physical_device) + BUILDER_VECTOR(VkPhysicalDeviceGroupProperties, complete_physical_device_groups, complete_physical_device_group) + BUILDER_VECTOR(VkPhysicalDeviceGroupProperties, removed_physical_device_groups, removed_physical_device_group) + BUILDER_VECTOR(VkPhysicalDeviceGroupProperties, added_physical_device_groups, added_physical_device_group) + + BUILDER_VECTOR(VulkanFunction, custom_physical_device_implementation_functions, custom_physical_device_implementation_function) + BUILDER_VECTOR(VulkanFunction, custom_device_implementation_functions, custom_device_implementation_function) + + // Only need a single map for all 'custom' function - assumes that all function names are distinct, IE there cannot be a + // physical device and device level function with the same name + std::unordered_map custom_dispatch_functions; + std::vector custom_physical_device_interception_functions; + TestLayer& add_custom_physical_device_intercept_function(std::string func_name, PFN_vkVoidFunction function) { + custom_physical_device_interception_functions.push_back({func_name, function}); + custom_dispatch_functions[func_name] = nullptr; + return *this; + } + std::vector custom_device_interception_functions; + TestLayer& add_custom_device_interception_function(std::string func_name, PFN_vkVoidFunction function) { + custom_device_interception_functions.push_back({func_name, function}); + custom_dispatch_functions[func_name] = nullptr; + return *this; + } + PFN_vkVoidFunction get_custom_intercept_function(const char* name) { + if (custom_dispatch_functions.count(name) > 0) { + return custom_dispatch_functions.at(name); + } + return nullptr; + } + + // Allows distinguishing different layers (that use the same binary) + BUILDER_VALUE(std::string, make_spurious_log_in_create_instance) + BUILDER_VALUE(bool, do_spurious_allocations_in_create_instance) + void* spurious_instance_memory_allocation = nullptr; + BUILDER_VALUE(bool, do_spurious_allocations_in_create_device) + struct DeviceMemAlloc { + void* allocation; + VkDevice device; + }; + std::vector spurious_device_memory_allocations; + + // By default query GPDPA from GIPA, don't use value given from pNext + BUILDER_VALUE_WITH_DEFAULT(bool, use_gipa_GetPhysicalDeviceProcAddr, true) + + // Have a layer query for vkCreateDevice with a NULL instance handle + BUILDER_VALUE(bool, buggy_query_of_vkCreateDevice) + + // Makes the layer try to create a device using the loader provided function in the layer chain + BUILDER_VALUE(bool, call_create_device_while_create_device_is_called) + BUILDER_VALUE(uint32_t, physical_device_index_to_use_during_create_device) + + BUILDER_VALUE(bool, check_if_EnumDevExtProps_is_same_as_queried_function) + + // Clober the data pointed to by pInstance to overwrite the magic value + BUILDER_VALUE(bool, clobber_pInstance) + // Clober the data pointed to by pDevice to overwrite the magic value + BUILDER_VALUE(bool, clobber_pDevice) + + BUILDER_VALUE(bool, query_vkEnumerateInstanceLayerProperties) + BUILDER_VALUE(bool, query_vkEnumerateInstanceExtensionProperties) + BUILDER_VALUE(bool, query_vkEnumerateInstanceVersion) + + PFN_vkGetInstanceProcAddr next_vkGetInstanceProcAddr = VK_NULL_HANDLE; + PFN_GetPhysicalDeviceProcAddr next_GetPhysicalDeviceProcAddr = VK_NULL_HANDLE; + PFN_vkGetDeviceProcAddr next_vkGetDeviceProcAddr = VK_NULL_HANDLE; + + VkInstance instance_handle = VK_NULL_HANDLE; + VkLayerInstanceDispatchTable instance_dispatch_table{}; + + struct Device { + VkDevice device_handle = VK_NULL_HANDLE; + VkLayerDispatchTable dispatch_table{}; + std::vector enabled_extensions; + }; + std::vector created_devices; + + // Stores the callback that allows layers to create devices on their own + PFN_vkLayerCreateDevice callback_vkCreateDevice{}; + PFN_vkLayerDestroyDevice callback_vkDestroyDevice{}; + std::vector queried_physical_devices; + Device second_device_created_during_create_device{}; +}; + +using GetTestLayerFunc = TestLayer* (*)(); +#define GET_TEST_LAYER_FUNC_STR "get_test_layer_func" + +using GetNewTestLayerFunc = TestLayer* (*)(); +#define RESET_LAYER_FUNC_STR "reset_layer_func" diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/layer/wrap_objects.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/wrap_objects.cpp new file mode 100644 index 0000000000..c40b1a00f1 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/layer/wrap_objects.cpp @@ -0,0 +1,982 @@ +/* + * Copyright (c) 2015-2022 Valve Corporation + * Copyright (c) 2015-2022 LunarG, 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. + * + * Author: Jon Ashburn + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "vulkan/vk_layer.h" +#include "generated/vk_dispatch_table_helper.h" +#include "loader/vk_loader_layer.h" + +// Export full support of instance extension VK_EXT_direct_mode_display extension +#if !defined(TEST_LAYER_EXPORT_DIRECT_DISP) +#define TEST_LAYER_EXPORT_DIRECT_DISP 0 +#endif + +// Export full support of instance extension VK_EXT_display_surface_counter extension +#if !defined(TEST_LAYER_EXPORT_DISP_SURF_COUNT) +#define TEST_LAYER_EXPORT_DISP_SURF_COUNT 0 +#endif + +// Export full support of device extension VK_KHR_maintenance1 extension +#if !defined(TEST_LAYER_EXPORT_MAINT_1) +#define TEST_LAYER_EXPORT_MAINT_1 0 +#endif + +// Export full support of device extension VK_KHR_shared_presentable_image extension +#if !defined(TEST_LAYER_EXPORT_PRESENT_IMAGE) +#define TEST_LAYER_EXPORT_PRESENT_IMAGE 0 +#endif + +#if !defined(VK_LAYER_EXPORT) +#if defined(__GNUC__) && __GNUC__ >= 4 +#define VK_LAYER_EXPORT __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) +#define VK_LAYER_EXPORT __attribute__((visibility("default"))) +#else +#define VK_LAYER_EXPORT +#endif +#endif + +struct wrapped_phys_dev_obj { + VkLayerInstanceDispatchTable *loader_disp; + struct wrapped_inst_obj *inst; // parent instance object + void *obj; +}; + +struct wrapped_inst_obj { + VkLayerInstanceDispatchTable *loader_disp; + VkLayerInstanceDispatchTable layer_disp; // this layer's dispatch table + PFN_vkSetInstanceLoaderData pfn_inst_init; + struct wrapped_phys_dev_obj *ptr_phys_devs; // any enumerated phys devs + VkInstance obj; + bool layer_is_implicit; + bool direct_display_enabled; + bool display_surf_counter_enabled; + bool debug_utils_enabled; +}; + +struct wrapped_dev_obj { + VkLayerDispatchTable *loader_disp; + VkLayerDispatchTable disp; + PFN_vkSetDeviceLoaderData pfn_dev_init; + PFN_vkGetDeviceProcAddr pfn_get_dev_proc_addr; + VkDevice obj; + bool maintanence_1_enabled; + bool present_image_enabled; + bool debug_utils_enabled; + bool debug_report_enabled; + bool debug_marker_enabled; +}; + +struct wrapped_debug_util_mess_obj { + VkInstance inst; + VkDebugUtilsMessengerEXT obj; +}; + +struct saved_wrapped_handles_storage { + std::vector instances; + std::vector physical_devices; + std::vector devices; + std::vector debug_util_messengers; +}; + +saved_wrapped_handles_storage saved_wrapped_handles; + +VkInstance unwrap_instance(const VkInstance instance, wrapped_inst_obj **inst) { + *inst = reinterpret_cast(instance); + auto it = std::find(saved_wrapped_handles.instances.begin(), saved_wrapped_handles.instances.end(), *inst); + return (it == saved_wrapped_handles.instances.end()) ? VK_NULL_HANDLE : (*inst)->obj; +} + +VkPhysicalDevice unwrap_phys_dev(const VkPhysicalDevice physical_device, wrapped_phys_dev_obj **phys_dev) { + *phys_dev = reinterpret_cast(physical_device); + auto it = std::find(saved_wrapped_handles.physical_devices.begin(), saved_wrapped_handles.physical_devices.end(), *phys_dev); + return (it == saved_wrapped_handles.physical_devices.end()) ? VK_NULL_HANDLE + : reinterpret_cast((*phys_dev)->obj); +} + +VkDevice unwrap_device(const VkDevice device, wrapped_dev_obj **dev) { + *dev = reinterpret_cast(device); + auto it = std::find(saved_wrapped_handles.devices.begin(), saved_wrapped_handles.devices.end(), *dev); + return (it == saved_wrapped_handles.devices.end()) ? VK_NULL_HANDLE : (*dev)->obj; +} + +VkDebugUtilsMessengerEXT unwrap_debug_util_messenger(const VkDebugUtilsMessengerEXT messenger, wrapped_debug_util_mess_obj **mess) { + *mess = reinterpret_cast(messenger); + auto it = + std::find(saved_wrapped_handles.debug_util_messengers.begin(), saved_wrapped_handles.debug_util_messengers.end(), *mess); + return (it == saved_wrapped_handles.debug_util_messengers.end()) ? VK_NULL_HANDLE : (*mess)->obj; +} + +VkLayerInstanceCreateInfo *get_chain_info(const VkInstanceCreateInfo *pCreateInfo, VkLayerFunction func) { + VkLayerInstanceCreateInfo *chain_info = (VkLayerInstanceCreateInfo *)pCreateInfo->pNext; + while (chain_info && !(chain_info->sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO && chain_info->function == func)) { + chain_info = (VkLayerInstanceCreateInfo *)chain_info->pNext; + } + assert(chain_info != NULL); + return chain_info; +} + +VkLayerDeviceCreateInfo *get_chain_info(const VkDeviceCreateInfo *pCreateInfo, VkLayerFunction func) { + VkLayerDeviceCreateInfo *chain_info = (VkLayerDeviceCreateInfo *)pCreateInfo->pNext; + while (chain_info && !(chain_info->sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO && chain_info->function == func)) { + chain_info = (VkLayerDeviceCreateInfo *)chain_info->pNext; + } + assert(chain_info != NULL); + return chain_info; +} + +namespace wrap_objects { + +const VkLayerProperties global_layer = { + "VK_LAYER_LUNARG_wrap_objects", + VK_HEADER_VERSION_COMPLETE, + 1, + "LunarG Test Layer", +}; + +uint32_t loader_layer_if_version = CURRENT_LOADER_LAYER_INTERFACE_VERSION; + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkInstance *pInstance) { + VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance"); + if (fpCreateInstance == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + // Advance the link info for the next element on the chain + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); + if (result != VK_SUCCESS) { + return result; + } + auto inst = new wrapped_inst_obj; + if (!inst) return VK_ERROR_OUT_OF_HOST_MEMORY; + saved_wrapped_handles.instances.push_back(inst); + memset(inst, 0, sizeof(*inst)); + inst->obj = (*pInstance); + *pInstance = reinterpret_cast(inst); + // store the loader callback for initializing created dispatchable objects + chain_info = get_chain_info(pCreateInfo, VK_LOADER_DATA_CALLBACK); + if (chain_info) { + inst->pfn_inst_init = chain_info->u.pfnSetInstanceLoaderData; + result = inst->pfn_inst_init(inst->obj, reinterpret_cast(inst)); + if (VK_SUCCESS != result) return result; + } else { + inst->pfn_inst_init = NULL; + inst->loader_disp = *(reinterpret_cast(inst->obj)); + } + layer_init_instance_dispatch_table(inst->obj, &inst->layer_disp, fpGetInstanceProcAddr); + bool found = false; + for (uint32_t layer = 0; layer < pCreateInfo->enabledLayerCount; ++layer) { + std::string layer_name = pCreateInfo->ppEnabledLayerNames[layer]; + std::transform(layer_name.begin(), layer_name.end(), layer_name.begin(), + [](char c) { return static_cast(::tolower(static_cast(c))); }); + if (layer_name.find("wrap") != std::string::npos && layer_name.find("obj") != std::string::npos) { + found = true; + break; + } + } + if (!found) { + inst->layer_is_implicit = true; + } + + for (uint32_t ext = 0; ext < pCreateInfo->enabledExtensionCount; ++ext) { + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[ext], VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)) { +#if TEST_LAYER_EXPORT_DIRECT_DISP + inst->direct_display_enabled = true; +#endif + } + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[ext], VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)) { +#if TEST_LAYER_EXPORT_DISP_SURF_COUNT + inst->display_surf_counter_enabled = true; +#endif + } + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[ext], VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { + inst->debug_utils_enabled = true; + } + } + + return result; +} + +VKAPI_ATTR void VKAPI_CALL wrap_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + pDisp->DestroyInstance(vk_inst, pAllocator); + if (inst->ptr_phys_devs) delete[] inst->ptr_phys_devs; + delete inst; +} + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateDebugUtilsMessengerEXT(VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugUtilsMessengerEXT *pMessenger) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + VkResult result = pDisp->CreateDebugUtilsMessengerEXT(vk_inst, pCreateInfo, pAllocator, pMessenger); + auto mess = new wrapped_debug_util_mess_obj; + if (!mess) return VK_ERROR_OUT_OF_HOST_MEMORY; + saved_wrapped_handles.debug_util_messengers.push_back(mess); + memset(mess, 0, sizeof(*mess)); + mess->obj = (*pMessenger); + *pMessenger = reinterpret_cast(mess); + return result; +} + +VKAPI_ATTR void VKAPI_CALL wrap_vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + wrapped_debug_util_mess_obj *mess; + auto vk_mess = unwrap_debug_util_messenger(messenger, &mess); + pDisp->DestroyDebugUtilsMessengerEXT(vk_inst, vk_mess, pAllocator); + delete mess; +} + +VKAPI_ATTR void VKAPI_CALL wrap_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, + const VkAllocationCallbacks *pAllocator) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + pDisp->DestroySurfaceKHR(vk_inst, surface, pAllocator); +} +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateAndroidSurfaceKHR(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateWin32SurfaceKHR(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateWaylandSurfaceKHR(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateXcbSurfaceKHR(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateXlibSurfaceKHR(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateDirectFBSurfaceEXT(VkInstance instance, + const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateDirectFBSurfaceEXT(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateMacOSSurfaceMVK(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_IOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateIOSSurfaceMVK(VkInstance instance, const VkIOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateIOSSurfaceMVK(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_GGP) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateStreamDescriptorSurfaceGGP(VkInstance instance, + const VkStreamDescriptorSurfaceCreateInfoGGP *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateStreamDescriptorSurfaceGGP(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateMetalSurfaceEXT(VkInstance instance, const VkMetalSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateMetalSurfaceEXT(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateScreenSurfaceQNX(VkInstance instance, const VkScreenSurfaceCreateInfoQNX *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pDisp = &inst->layer_disp; + return pDisp->CreateScreenSurfaceQNX(vk_inst, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, + VkPhysicalDevice *pPhysicalDevices) { + wrapped_inst_obj *inst; + auto vk_inst = unwrap_instance(instance, &inst); + VkResult result = inst->layer_disp.EnumeratePhysicalDevices(vk_inst, pPhysicalDeviceCount, pPhysicalDevices); + + if (VK_SUCCESS != result) return result; + + if (pPhysicalDevices != NULL) { + assert(pPhysicalDeviceCount); + auto phys_devs = new wrapped_phys_dev_obj[*pPhysicalDeviceCount]; + if (!phys_devs) return VK_ERROR_OUT_OF_HOST_MEMORY; + saved_wrapped_handles.physical_devices.push_back(phys_devs); + if (inst->ptr_phys_devs) delete[] inst->ptr_phys_devs; + inst->ptr_phys_devs = phys_devs; + for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++) { + if (inst->pfn_inst_init == NULL) { + phys_devs[i].loader_disp = *(reinterpret_cast(pPhysicalDevices[i])); + } else { + result = inst->pfn_inst_init(vk_inst, reinterpret_cast(&phys_devs[i])); + if (VK_SUCCESS != result) return result; + } + phys_devs[i].obj = reinterpret_cast(pPhysicalDevices[i]); + phys_devs[i].inst = inst; + pPhysicalDevices[i] = reinterpret_cast(&phys_devs[i]); + } + } + return result; +} + +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties *pProperties) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev(physicalDevice, &phys_dev); + phys_dev->inst->layer_disp.GetPhysicalDeviceProperties(vk_phys_dev, pProperties); +} + +VKAPI_ATTR void VKAPI_CALL wrap_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, + uint32_t *pQueueFamilyPropertyCount, + VkQueueFamilyProperties *pQueueFamilyProperties) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev(physicalDevice, &phys_dev); + phys_dev->inst->layer_disp.GetPhysicalDeviceQueueFamilyProperties(vk_phys_dev, pQueueFamilyPropertyCount, + pQueueFamilyProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, + uint32_t *pPropertyCount, + VkExtensionProperties *pProperties) { + VkResult result = VK_SUCCESS; + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev(physicalDevice, &phys_dev); + + if (phys_dev->inst->layer_is_implicit || (pLayerName && !strcmp(pLayerName, global_layer.layerName))) { + uint32_t ext_count = 0; +#if TEST_LAYER_EXPORT_MAINT_1 + ext_count++; +#endif +#if TEST_LAYER_EXPORT_PRESENT_IMAGE + ext_count++; +#endif + if (pPropertyCount) { + if (pProperties) { + [[maybe_unused]] uint32_t count = ext_count; + if (count > *pPropertyCount) { + count = *pPropertyCount; + result = VK_INCOMPLETE; + } + + ext_count = 0; +#if TEST_LAYER_EXPORT_MAINT_1 + if (ext_count < count) { +#if defined(_WIN32) + strncpy_s(pProperties[ext_count].extensionName, VK_MAX_EXTENSION_NAME_SIZE, VK_KHR_MAINTENANCE1_EXTENSION_NAME, + strlen(VK_KHR_MAINTENANCE1_EXTENSION_NAME) + 1); +#else + strncpy(pProperties[ext_count].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME, VK_MAX_EXTENSION_NAME_SIZE); +#endif + pProperties[ext_count].specVersion = 2; + ext_count++; + } +#endif +#if TEST_LAYER_EXPORT_PRESENT_IMAGE + if (ext_count < count) { +#if defined(_WIN32) + strncpy_s(pProperties[ext_count].extensionName, VK_MAX_EXTENSION_NAME_SIZE, + VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, + strlen(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME) + 1); +#else + strncpy(pProperties[ext_count].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, + VK_MAX_EXTENSION_NAME_SIZE); +#endif + pProperties[ext_count].specVersion = 1; + ext_count++; + } +#endif + } + *pPropertyCount = ext_count; + } + return result; + } else { + return phys_dev->inst->layer_disp.EnumerateDeviceExtensionProperties(vk_phys_dev, pLayerName, pPropertyCount, pProperties); + } +} + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev(physicalDevice, &phys_dev); + VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + PFN_vkGetInstanceProcAddr pfn_get_inst_proc_addr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; + PFN_vkGetDeviceProcAddr pfn_get_dev_proc_addr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; + PFN_vkCreateDevice pfn_create_device = (PFN_vkCreateDevice)pfn_get_inst_proc_addr(phys_dev->inst->obj, "vkCreateDevice"); + if (pfn_create_device == NULL) { + return VK_ERROR_INITIALIZATION_FAILED; + } + // Advance the link info for the next element on the chain + chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; + VkResult result = pfn_create_device(vk_phys_dev, pCreateInfo, pAllocator, pDevice); + if (result != VK_SUCCESS) { + return result; + } + auto dev = new wrapped_dev_obj; + if (!dev) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + saved_wrapped_handles.devices.push_back(dev); + memset(dev, 0, sizeof(*dev)); + dev->obj = *pDevice; + dev->pfn_get_dev_proc_addr = pfn_get_dev_proc_addr; + *pDevice = reinterpret_cast(dev); + + // Store the loader callback for initializing created dispatchable objects + chain_info = get_chain_info(pCreateInfo, VK_LOADER_DATA_CALLBACK); + if (chain_info) { + dev->pfn_dev_init = chain_info->u.pfnSetDeviceLoaderData; + result = dev->pfn_dev_init(dev->obj, reinterpret_cast(dev)); + if (VK_SUCCESS != result) { + return result; + } + } else { + dev->pfn_dev_init = NULL; + } + + // Initialize layer's dispatch table + layer_init_device_dispatch_table(dev->obj, &dev->disp, pfn_get_dev_proc_addr); + + for (uint32_t ext = 0; ext < pCreateInfo->enabledExtensionCount; ++ext) { + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[ext], VK_KHR_MAINTENANCE1_EXTENSION_NAME)) { +#if TEST_LAYER_EXPORT_MAINT_1 + dev->maintanence_1_enabled = true; +#endif + } + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[ext], VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)) { +#if TEST_LAYER_EXPORT_PRESENT_IMAGE + dev->present_image_enabled = true; +#endif + } + if (!strcmp(pCreateInfo->ppEnabledExtensionNames[ext], VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) { + dev->debug_marker_enabled = true; + } + } + dev->debug_utils_enabled = phys_dev->inst->debug_utils_enabled; + + return result; +} + +VKAPI_ATTR void VKAPI_CALL wrap_vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) { + wrapped_dev_obj *dev; + auto vk_dev = unwrap_device(device, &dev); + dev->disp.DestroyDevice(vk_dev, pAllocator); + delete dev; +} + +// Fake instance extension support +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkReleaseDisplayEXT(VkPhysicalDevice, VkDisplayKHR) { return VK_SUCCESS; } + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkGetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice, VkSurfaceKHR, + VkSurfaceCapabilities2EXT *pSurfaceCapabilities) { + if (nullptr != pSurfaceCapabilities) { + pSurfaceCapabilities->minImageCount = 7; + pSurfaceCapabilities->maxImageCount = 12; + pSurfaceCapabilities->maxImageArrayLayers = 365; + } + return VK_SUCCESS; +} + +// Fake device extension support +VKAPI_ATTR void VKAPI_CALL wrap_vkTrimCommandPoolKHR(VkDevice, VkCommandPool, VkCommandPoolTrimFlags) {} + +// Return an odd error so we can verify that this actually got called +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkGetSwapchainStatusKHR(VkDevice, VkSwapchainKHR) { return VK_ERROR_NATIVE_WINDOW_IN_USE_KHR; } + +// Debug utils & debug marker ext stubs +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkDebugMarkerSetObjectTagEXT(VkDevice device, const VkDebugMarkerObjectTagInfoEXT *pTagInfo) { + VkDebugMarkerObjectTagInfoEXT new_info = *pTagInfo; + wrapped_dev_obj *dev; + auto vk_dev = unwrap_device(device, &dev); + if (pTagInfo && pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev((VkPhysicalDevice)(uintptr_t)(pTagInfo->object), &phys_dev); + if (vk_phys_dev == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.object = (uint64_t)(uintptr_t)vk_phys_dev; + } + if (pTagInfo && pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + // TODO + } + if (pTagInfo && pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + wrapped_inst_obj *inst; + auto instance = unwrap_instance((VkInstance)(uintptr_t)(pTagInfo->object), &inst); + if (instance == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.object = (uint64_t)(uintptr_t)instance; + } + return dev->disp.DebugMarkerSetObjectTagEXT(vk_dev, &new_info); +} +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkDebugMarkerSetObjectNameEXT(VkDevice device, + const VkDebugMarkerObjectNameInfoEXT *pNameInfo) { + VkDebugMarkerObjectNameInfoEXT new_info = *pNameInfo; + wrapped_dev_obj *dev; + auto vk_dev = unwrap_device(device, &dev); + if (pNameInfo && pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev((VkPhysicalDevice)(uintptr_t)(pNameInfo->object), &phys_dev); + if (vk_phys_dev == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.object = (uint64_t)(uintptr_t)vk_phys_dev; + } + if (pNameInfo && pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) { + // TODO + } + if (pNameInfo && pNameInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) { + wrapped_inst_obj *inst; + auto instance = unwrap_instance((VkInstance)(uintptr_t)(pNameInfo->object), &inst); + if (instance == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.object = (uint64_t)(uintptr_t)instance; + } + return dev->disp.DebugMarkerSetObjectNameEXT(vk_dev, &new_info); +} +// Debug Marker functions that are not supported: +// vkCmdDebugMarkerBeginEXT +// vkCmdDebugMarkerEndEXT +// vkCmdDebugMarkerInsertEXT + +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkSetDebugUtilsObjectNameEXT(VkDevice device, const VkDebugUtilsObjectNameInfoEXT *pNameInfo) { + VkDebugUtilsObjectNameInfoEXT new_info = *pNameInfo; + wrapped_dev_obj *dev; + auto vk_dev = unwrap_device(device, &dev); + if (pNameInfo && pNameInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev((VkPhysicalDevice)(uintptr_t)(pNameInfo->objectHandle), &phys_dev); + if (vk_phys_dev == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.objectHandle = (uint64_t)(uintptr_t)vk_phys_dev; + } + if (pNameInfo && pNameInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) { + // TODO + } + if (pNameInfo && pNameInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + wrapped_inst_obj *inst; + auto instance = unwrap_instance((VkInstance)(uintptr_t)(pNameInfo->objectHandle), &inst); + if (instance == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.objectHandle = (uint64_t)(uintptr_t)instance; + } + return dev->disp.SetDebugUtilsObjectNameEXT(vk_dev, &new_info); +} +VKAPI_ATTR VkResult VKAPI_CALL wrap_vkSetDebugUtilsObjectTagEXT(VkDevice device, const VkDebugUtilsObjectTagInfoEXT *pTagInfo) { + VkDebugUtilsObjectTagInfoEXT new_info = *pTagInfo; + wrapped_dev_obj *dev; + auto vk_dev = unwrap_device(device, &dev); + if (pTagInfo && pTagInfo->objectType == VK_OBJECT_TYPE_PHYSICAL_DEVICE) { + wrapped_phys_dev_obj *phys_dev; + auto vk_phys_dev = unwrap_phys_dev((VkPhysicalDevice)(uintptr_t)(pTagInfo->objectHandle), &phys_dev); + if (vk_phys_dev == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.objectHandle = (uint64_t)(uintptr_t)vk_phys_dev; + } + if (pTagInfo && pTagInfo->objectType == VK_OBJECT_TYPE_SURFACE_KHR) { + // TODO + } + if (pTagInfo && pTagInfo->objectType == VK_OBJECT_TYPE_INSTANCE) { + wrapped_inst_obj *inst; + auto instance = unwrap_instance((VkInstance)(uintptr_t)(pTagInfo->objectHandle), &inst); + if (instance == VK_NULL_HANDLE) return VK_ERROR_DEVICE_LOST; + new_info.objectHandle = (uint64_t)(uintptr_t)instance; + } + return dev->disp.SetDebugUtilsObjectTagEXT(vk_dev, &new_info); +} +// Debug utils functions that are not supported +// vkQueueBeginDebugUtilsLabelEXT +// vkQueueEndDebugUtilsLabelEXT +// vkQueueInsertDebugUtilsLabelEXT +// vkCmdBeginDebugUtilsLabelEXT +// vkCmdEndDebugUtilsLabelEXT +// vkCmdInsertDebugUtilsLabelEXT + +PFN_vkVoidFunction layer_intercept_device_proc(wrapped_dev_obj *dev, const char *name) { + if (!name || name[0] != 'v' || name[1] != 'k') return NULL; + + name += 2; + if (!strcmp(name, "CreateDevice")) return (PFN_vkVoidFunction)wrap_vkCreateDevice; + if (!strcmp(name, "DestroyDevice")) return (PFN_vkVoidFunction)wrap_vkDestroyDevice; + + if (dev->maintanence_1_enabled && !strcmp(name, "TrimCommandPoolKHR")) return (PFN_vkVoidFunction)wrap_vkTrimCommandPoolKHR; + if (dev->present_image_enabled && !strcmp(name, "GetSwapchainStatusKHR")) + return (PFN_vkVoidFunction)wrap_vkGetSwapchainStatusKHR; + + if (dev->debug_marker_enabled && !strcmp(name, "DebugMarkerSetObjectTagEXT")) + return (PFN_vkVoidFunction)wrap_vkDebugMarkerSetObjectTagEXT; + if (dev->debug_marker_enabled && !strcmp(name, "DebugMarkerSetObjectNameEXT")) + return (PFN_vkVoidFunction)wrap_vkDebugMarkerSetObjectNameEXT; + if (dev->debug_utils_enabled && !strcmp(name, "SetDebugUtilsObjectNameEXT")) + return (PFN_vkVoidFunction)wrap_vkSetDebugUtilsObjectNameEXT; + if (dev->debug_utils_enabled && !strcmp(name, "SetDebugUtilsObjectTagEXT")) + return (PFN_vkVoidFunction)wrap_vkSetDebugUtilsObjectTagEXT; + + return NULL; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL wrap_vkGetDeviceProcAddr(VkDevice device, const char *funcName) { + PFN_vkVoidFunction addr; + + if (!strcmp("vkGetDeviceProcAddr", funcName)) { + return (PFN_vkVoidFunction)wrap_vkGetDeviceProcAddr; + } + + if (device == VK_NULL_HANDLE) { + return NULL; + } + + wrapped_dev_obj *dev; + unwrap_device(device, &dev); + + addr = layer_intercept_device_proc(dev, funcName); + if (addr) return addr; + + return dev->pfn_get_dev_proc_addr(dev->obj, funcName); +} + +PFN_vkVoidFunction layer_intercept_instance_proc(wrapped_inst_obj *inst, const char *name) { + if (!name || name[0] != 'v' || name[1] != 'k') return NULL; + + name += 2; + if (!strcmp(name, "DestroyInstance")) return (PFN_vkVoidFunction)wrap_vkDestroyInstance; + if (!strcmp(name, "CreateDevice")) return (PFN_vkVoidFunction)wrap_vkCreateDevice; + if (!strcmp(name, "EnumeratePhysicalDevices")) return (PFN_vkVoidFunction)wrap_vkEnumeratePhysicalDevices; + + if (!strcmp(name, "EnumerateDeviceExtensionProperties")) return (PFN_vkVoidFunction)wrap_vkEnumerateDeviceExtensionProperties; + + if (!strcmp(name, "CreateDebugUtilsMessengerEXT")) return (PFN_vkVoidFunction)wrap_vkCreateDebugUtilsMessengerEXT; + if (!strcmp(name, "DestroyDebugUtilsMessengerEXT")) return (PFN_vkVoidFunction)wrap_vkDestroyDebugUtilsMessengerEXT; + + if (!strcmp(name, "GetPhysicalDeviceProperties")) return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties; + if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) + return (PFN_vkVoidFunction)wrap_vkGetPhysicalDeviceQueueFamilyProperties; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + if (!strcmp(name, "CreateAndroidSurfaceKHR")) return (PFN_vkVoidFunction)wrap_vkCreateAndroidSurfaceKHR; +#endif // VK_USE_PLATFORM_ANDROID_KHR + +#if defined(VK_USE_PLATFORM_WIN32_KHR) + if (!strcmp(name, "CreateWin32SurfaceKHR")) return (PFN_vkVoidFunction)wrap_vkCreateWin32SurfaceKHR; +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (!strcmp(name, "CreateWaylandSurfaceKHR")) return (PFN_vkVoidFunction)wrap_vkCreateWaylandSurfaceKHR; +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) + if (!strcmp(name, "CreateXcbSurfaceKHR")) return (PFN_vkVoidFunction)wrap_vkCreateXcbSurfaceKHR; +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) + if (!strcmp(name, "CreateXlibSurfaceKHR")) return (PFN_vkVoidFunction)wrap_vkCreateXlibSurfaceKHR; +#endif // VK_USE_PLATFORM_XLIB_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + if (!strcmp(name, "CreateDirectFBSurfaceEXT")) return (PFN_vkVoidFunction)wrap_vkCreateDirectFBSurfaceEXT; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_MACOS_MVK) + if (!strcmp(name, "CreateMacOSSurfaceMVK")) return (PFN_vkVoidFunction)wrap_vkCreateMacOSSurfaceMVK; +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_IOS_MVK) + if (!strcmp(name, "CreateIOSSurfaceMVK")) return (PFN_vkVoidFunction)wrap_vkCreateIOSSurfaceMVK; +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_GGP) + if (!strcmp(name, "CreateStreamDescriptorSurfaceGGP")) return (PFN_vkVoidFunction)wrap_vkCreateStreamDescriptorSurfaceGGP; +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (!strcmp(name, "CreateMetalSurfaceEXT")) return (PFN_vkVoidFunction)wrap_vkCreateMetalSurfaceEXT; +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + if (!strcmp(name, "CreateScreenSurfaceQNX")) return (PFN_vkVoidFunction)wrap_vkCreateScreenSurfaceQNX; +#endif // VK_USE_PLATFORM_SCREEN_QNX + if (!strcmp(name, "DestroySurfaceKHR")) return (PFN_vkVoidFunction)wrap_vkDestroySurfaceKHR; + + if (inst->direct_display_enabled && !strcmp(name, "ReleaseDisplayEXT")) return (PFN_vkVoidFunction)wrap_vkReleaseDisplayEXT; + if (inst->display_surf_counter_enabled && !strcmp(name, "GetPhysicalDeviceSurfaceCapabilities2EXT")) + return (PFN_vkVoidFunction)wrap_vkGetPhysicalDeviceSurfaceCapabilities2EXT; + + // instance_proc needs to be able to query device commands even if the extension isn't enabled (because it isn't known at this + // time) + if (!strcmp(name, "TrimCommandPoolKHR")) return (PFN_vkVoidFunction)wrap_vkTrimCommandPoolKHR; + if (!strcmp(name, "GetSwapchainStatusKHR")) return (PFN_vkVoidFunction)wrap_vkGetSwapchainStatusKHR; + + if (!strcmp(name, "DebugMarkerSetObjectTagEXT")) return (PFN_vkVoidFunction)wrap_vkDebugMarkerSetObjectTagEXT; + if (!strcmp(name, "DebugMarkerSetObjectNameEXT")) return (PFN_vkVoidFunction)wrap_vkDebugMarkerSetObjectNameEXT; + if (inst->debug_utils_enabled && !strcmp(name, "SetDebugUtilsObjectNameEXT")) + return (PFN_vkVoidFunction)wrap_vkSetDebugUtilsObjectNameEXT; + if (inst->debug_utils_enabled && !strcmp(name, "SetDebugUtilsObjectTagEXT")) + return (PFN_vkVoidFunction)wrap_vkSetDebugUtilsObjectTagEXT; + + return NULL; +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL wrap_vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { + PFN_vkVoidFunction addr; + + if (!strcmp(funcName, "vkGetInstanceProcAddr")) return (PFN_vkVoidFunction)wrap_vkGetInstanceProcAddr; + if (!strcmp(funcName, "vkCreateInstance")) return (PFN_vkVoidFunction)wrap_vkCreateInstance; + + if (instance == VK_NULL_HANDLE) { + return NULL; + } + + wrapped_inst_obj *inst; + unwrap_instance(instance, &inst); + + addr = layer_intercept_instance_proc(inst, funcName); + if (addr) return addr; + + VkLayerInstanceDispatchTable *pTable = &inst->layer_disp; + + if (pTable->GetInstanceProcAddr == NULL) return NULL; + return pTable->GetInstanceProcAddr(inst->obj, funcName); +} + +VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) { + assert(instance); + + wrapped_inst_obj *inst; + unwrap_instance(instance, &inst); + VkLayerInstanceDispatchTable *pTable = &inst->layer_disp; + + if (pTable->GetPhysicalDeviceProcAddr == NULL) return NULL; + return pTable->GetPhysicalDeviceProcAddr(inst->obj, funcName); +} + +} // namespace wrap_objects + +extern "C" { +// loader-layer interface v0, just wrappers since there is only a layer +VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { + return wrap_objects::wrap_vkGetInstanceProcAddr(instance, funcName); +} + +VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char *funcName) { + return wrap_objects::wrap_vkGetDeviceProcAddr(device, funcName); +} + +VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *, uint32_t *, + VkExtensionProperties *) { + assert(0); // TODO return wrap_objects::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties); + return VK_SUCCESS; +} + +VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *, VkLayerProperties *) { + assert(0); // TODO return wrap_objects::EnumerateInstanceLayerProperties(pCount, pProperties); + return VK_SUCCESS; +} + +VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL +vkEnumerateDeviceExtensionProperties([[maybe_unused]] VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pCount, + VkExtensionProperties *pProperties) { + // the layer command handles VK_NULL_HANDLE just fine internally + assert(physicalDevice == VK_NULL_HANDLE); + return wrap_objects::wrap_vkEnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties); +} + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT(VkInstance instance, + const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDebugUtilsMessengerEXT *pMessenger) { + return wrap_objects::wrap_vkCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger); +} + +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks *pAllocator) { + return wrap_objects::wrap_vkDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *pAllocator) { + return wrap_objects::wrap_vkDestroySurfaceKHR(instance, surface, pAllocator); +} + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +VKAPI_ATTR VkResult VKAPI_CALL test_vkCreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateDirectFBSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_IOS_MVK) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(VkInstance instance, const VkIOSSurfaceCreateInfoMVK *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_GGP) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(VkInstance instance, + const VkStreamDescriptorSurfaceCreateInfoGGP *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_METAL_EXT) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(VkInstance instance, const VkMetalSurfaceCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX(VkInstance instance, const VkScreenSurfaceCreateInfoQNX *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + return wrap_objects::wrap_vkCreateScreenSurfaceQNX(instance, pCreateInfo, pAllocator, pSurface); +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_layerGetPhysicalDeviceProcAddr(VkInstance instance, + const char *funcName) { + return wrap_objects::GetPhysicalDeviceProcAddr(instance, funcName); +} + +VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct) { + assert(pVersionStruct != NULL); + assert(pVersionStruct->sType == LAYER_NEGOTIATE_INTERFACE_STRUCT); + + // Fill in the function pointers if our version is at least capable of having the structure contain them. + if (pVersionStruct->loaderLayerInterfaceVersion >= 2) { + pVersionStruct->pfnGetInstanceProcAddr = wrap_objects::wrap_vkGetInstanceProcAddr; + pVersionStruct->pfnGetDeviceProcAddr = wrap_objects::wrap_vkGetDeviceProcAddr; + pVersionStruct->pfnGetPhysicalDeviceProcAddr = vk_layerGetPhysicalDeviceProcAddr; + } + + if (pVersionStruct->loaderLayerInterfaceVersion < CURRENT_LOADER_LAYER_INTERFACE_VERSION) { + wrap_objects::loader_layer_if_version = pVersionStruct->loaderLayerInterfaceVersion; + } else if (pVersionStruct->loaderLayerInterfaceVersion > CURRENT_LOADER_LAYER_INTERFACE_VERSION) { + pVersionStruct->loaderLayerInterfaceVersion = CURRENT_LOADER_LAYER_INTERFACE_VERSION; + } + + return VK_SUCCESS; +} +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/shim/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/CMakeLists.txt new file mode 100644 index 0000000000..a7cf4540dc --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/CMakeLists.txt @@ -0,0 +1,39 @@ +# ~~~ +# Copyright (c) 2021 Valve Corporation +# Copyright (c) 2021 LunarG, 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. +# ~~~ + +add_library(shim-common STATIC shim_common.cpp) +target_link_libraries(shim-common PUBLIC testing_framework_util) +target_include_directories(shim-common PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) + +if (WIN32) + # need adapters.h which is in the loader folder + target_include_directories(shim-common PUBLIC ${CMAKE_SOURCE_DIR}/loader) + target_link_libraries(shim-common PRIVATE cfgmgr32) + + add_library(shim-library SHARED windows_shim.cpp) + target_link_libraries(shim-library PRIVATE detours cfgmgr32) + +elseif(UNIX) + if(APPLE) + add_library(shim-library SHARED unix_shim.cpp) + target_link_libraries(shim-library PRIVATE "-framework CoreFoundation") + else() + add_library(shim-library STATIC unix_shim.cpp) + endif() +endif() +#common attributes +target_link_libraries(shim-library PUBLIC shim-common) diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim.h b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim.h new file mode 100644 index 0000000000..bc47c39873 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim.h @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#pragma once + +#include "test_util.h" + +#include +#include +#include + +#if defined(WIN32) +#include +#include +#include +#include +#include +#include + +#define CINTERFACE +#include +#include +#endif + +enum class ManifestCategory { implicit_layer, explicit_layer, icd, settings }; +enum class GpuType { unspecified, integrated, discrete, external }; + +#if defined(WIN32) +#define VK_VARIANT_REG_STR "" +#define VK_VARIANT_REG_STR_W L"" + +#define VK_DRIVERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\Drivers" +#define VK_ELAYERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\ExplicitLayers" +#define VK_ILAYERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\ImplicitLayers" +#define VK_SETTINGS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\Vulkan" VK_VARIANT_REG_STR "\\LoaderSettings" + +struct RegistryEntry { + RegistryEntry() = default; + RegistryEntry(std::filesystem::path const& name) noexcept : name(name) {} + RegistryEntry(std::filesystem::path const& name, DWORD value) noexcept : name(name), value(value) {} + std::filesystem::path name; + DWORD value{}; +}; + +struct HKeyHandle { + explicit HKeyHandle(const size_t value, const std::string& key_path) noexcept : key(HKEY{}), path(key_path) { + key = reinterpret_cast(value); + } + + HKEY get() const noexcept { return key; } + + HKEY key{}; + std::string path; +}; + +static const char* pnp_registry_path = "SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e968-e325-11ce-bfc1-08002be10318}"; + +// Needed for DXGI mocking +struct KnownDriverData { + const char* filename = nullptr; + int vendor_id = 0; +}; +static std::array known_driver_list = { +#if defined(_WIN64) + KnownDriverData{"igvk64.json", 0x8086}, KnownDriverData{"nv-vk64.json", 0x10de}, KnownDriverData{"amd-vulkan64.json", 0x1002}, + KnownDriverData{"amdvlk64.json", 0x1002} +#else + KnownDriverData{"igvk32.json", 0x8086}, KnownDriverData{"nv-vk32.json", 0x10de}, KnownDriverData{"amd-vulkan32.json", 0x1002}, + KnownDriverData{"amdvlk32.json", 0x1002} +#endif +}; + +struct DXGIAdapter { + GpuType gpu_preference = GpuType::unspecified; + DXGI_ADAPTER_DESC1 desc1{}; + uint32_t adapter_index = 0; + IDXGIAdapter1 adapter_instance{}; + IDXGIAdapter1Vtbl adapter_vtbl_instance{}; +}; + +struct D3DKMT_Adapter { + D3DKMT_Adapter& add_driver_manifest_path(std::filesystem::path const& src); + D3DKMT_Adapter& add_implicit_layer_manifest_path(std::filesystem::path const& src); + D3DKMT_Adapter& add_explicit_layer_manifest_path(std::filesystem::path const& src); + + UINT hAdapter; + LUID adapter_luid; + std::vector driver_paths; + std::vector implicit_layer_paths; + std::vector explicit_layer_paths; + + private: + D3DKMT_Adapter& add_path(std::filesystem::path src, std::vector& dest); +}; + +#elif COMMON_UNIX_PLATFORMS + +struct DirEntry { + DIR* directory = nullptr; + std::string folder_path; + std::vector contents; + // the current item being read by an app (incremented by readdir, reset to zero by opendir & closedir) + size_t current_index = 0; + bool is_fake_path = false; // true when this entry is for folder redirection +}; + +#endif + +struct FrameworkEnvironment; // forward declaration + +// Necessary to have inline definitions as shim is a dll and thus functions +// defined in the .cpp wont be found by the rest of the application +struct PlatformShim { + PlatformShim() { fputs_stderr_log.reserve(65536); } + PlatformShim(GetFoldersFunc get_folders_by_name_function) : get_folders_by_name_function(get_folders_by_name_function) { + fputs_stderr_log.reserve(65536); + } + + // Used to get info about which drivers & layers have been added to folders + GetFoldersFunc get_folders_by_name_function; + + // Captures the output to stderr from fputs & fputc - aka the output of loader_log() + std::string fputs_stderr_log; + + // Test Framework interface + void reset(); + + void redirect_all_paths(std::filesystem::path const& path); + void redirect_category(std::filesystem::path const& new_path, ManifestCategory category); + + // fake paths are paths that the loader normally looks in but actually point to locations inside the test framework + void set_fake_path(ManifestCategory category, std::filesystem::path const& path); + + // known paths are real paths but since the test framework guarantee's the order files are found in, files in these paths + // need to be ordered correctly + void add_known_path(std::filesystem::path const& path); + + void add_manifest(ManifestCategory category, std::filesystem::path const& path); + void add_unsecured_manifest(ManifestCategory category, std::filesystem::path const& path); + + void clear_logs() { fputs_stderr_log.clear(); } + bool find_in_log(std::string const& search_text) const { return fputs_stderr_log.find(search_text) != std::string::npos; } + +// platform specific shim interface +#if defined(WIN32) + // Control Platform Elevation Level + void set_elevated_privilege(bool elev) { elevation_level = (elev) ? SECURITY_MANDATORY_HIGH_RID : SECURITY_MANDATORY_LOW_RID; } + unsigned long elevation_level = SECURITY_MANDATORY_LOW_RID; + + void add_dxgi_adapter(GpuType gpu_preference, DXGI_ADAPTER_DESC1 desc1); + void add_d3dkmt_adapter(D3DKMT_Adapter const& adapter); + void set_app_package_path(std::filesystem::path const& path); + + std::unordered_map dxgi_adapters; + + std::vector d3dkmt_adapters; + + // TODO: + void add_CM_Device_ID(std::wstring const& id, std::filesystem::path const& icd_path, std::filesystem::path const& layer_path); + std::wstring CM_device_ID_list = {L'\0'}; + std::vector CM_device_ID_registry_keys; + + uint32_t random_base_path = 0; + + std::vector icd_paths; + + std::vector hkey_current_user_explicit_layers; + std::vector hkey_current_user_implicit_layers; + std::vector hkey_local_machine_explicit_layers; + std::vector hkey_local_machine_implicit_layers; + std::vector hkey_local_machine_drivers; + std::vector hkey_local_machine_settings; + std::vector hkey_current_user_settings; + + std::wstring app_package_path; + + // When a key is created, return the index of the + size_t created_key_count = 0; + std::vector created_keys; + +#elif COMMON_UNIX_PLATFORMS + bool is_fake_path(std::filesystem::path const& path); + std::filesystem::path const& get_real_path_from_fake_path(std::filesystem::path const& path); + + void redirect_path(std::filesystem::path const& path, std::filesystem::path const& new_path); + void remove_redirect(std::filesystem::path const& path); + + bool is_known_path(std::filesystem::path const& path); + void remove_known_path(std::filesystem::path const& path); + + void redirect_dlopen_name(std::filesystem::path const& filename, std::filesystem::path const& actual_path); + bool is_dlopen_redirect_name(std::filesystem::path const& filename); + + std::filesystem::path query_default_redirect_path(ManifestCategory category); + + void set_app_package_path(std::filesystem::path const& path); + + std::unordered_map redirection_map; + std::unordered_map dlopen_redirection_map; + std::unordered_set known_path_set; + + void set_elevated_privilege(bool elev) { use_fake_elevation = elev; } + bool use_fake_elevation = false; + + std::vector dir_entries; + +#if defined(__APPLE__) + std::string bundle_contents; +#endif +#endif + bool is_during_destruction = false; +}; + +std::vector parse_env_var_list(std::string const& var); +std::string category_path_name(ManifestCategory category); + +extern "C" { +// dynamically link on windows and macos +#if defined(WIN32) || defined(__APPLE__) +using PFN_get_platform_shim = PlatformShim* (*)(GetFoldersFunc get_folders_by_name_function); +#define GET_PLATFORM_SHIM_STR "get_platform_shim" + +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +// statically link on linux +PlatformShim* get_platform_shim(GetFoldersFunc get_folders_by_name_function); +#endif +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim_common.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim_common.cpp new file mode 100644 index 0000000000..a21902ceb3 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/shim_common.cpp @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2021 The Khronos Group Inc. + * Copyright (c) 2021 Valve Corporation + * Copyright (c) 2021 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "shim.h" + +void PlatformShim::redirect_all_paths(std::filesystem::path const& path) { + redirect_category(path, ManifestCategory::implicit_layer); + redirect_category(path, ManifestCategory::explicit_layer); + redirect_category(path, ManifestCategory::icd); +} + +std::vector parse_env_var_list(std::string const& var) { + std::vector items; + size_t start = 0; + size_t len = 0; + for (size_t i = 0; i < var.size(); i++) { +#if defined(WIN32) + if (var[i] == ';') { +#elif COMMON_UNIX_PLATFORMS + if (var[i] == ':') { +#endif + if (len != 0) { + // only push back non empty strings + items.push_back(var.substr(start, len)); + } + start = i + 1; + len = 0; + } else { + len++; + } + } + items.push_back(var.substr(start, len)); + + return items; +} + +#if defined(WIN32) + +D3DKMT_Adapter& D3DKMT_Adapter::add_driver_manifest_path(std::filesystem::path const& src) { return add_path(src, driver_paths); } +D3DKMT_Adapter& D3DKMT_Adapter::add_implicit_layer_manifest_path(std::filesystem::path const& src) { + return add_path(src, implicit_layer_paths); +} +D3DKMT_Adapter& D3DKMT_Adapter::add_explicit_layer_manifest_path(std::filesystem::path const& src) { + return add_path(src, explicit_layer_paths); +} + +D3DKMT_Adapter& D3DKMT_Adapter::add_path(std::filesystem::path src, std::vector& dest) { + dest.push_back(src.native()); + return *this; +} + +std::string category_path_name(ManifestCategory category) { + if (category == ManifestCategory::implicit_layer) return "ImplicitLayers"; + if (category == ManifestCategory::explicit_layer) + return "ExplicitLayers"; + else + return "Drivers"; +} + +void PlatformShim::reset() { + hkey_current_user_explicit_layers.clear(); + hkey_current_user_implicit_layers.clear(); + hkey_local_machine_explicit_layers.clear(); + hkey_local_machine_implicit_layers.clear(); + hkey_local_machine_drivers.clear(); + hkey_local_machine_settings.clear(); + hkey_current_user_settings.clear(); +} + +void PlatformShim::set_fake_path([[maybe_unused]] ManifestCategory category, [[maybe_unused]] std::filesystem::path const& path) {} +void PlatformShim::add_known_path([[maybe_unused]] std::filesystem::path const& path) {} + +void PlatformShim::add_manifest(ManifestCategory category, std::filesystem::path const& path) { + if (category == ManifestCategory::settings) { + hkey_local_machine_settings.emplace_back(path); + } else if (category == ManifestCategory::implicit_layer) { + hkey_local_machine_implicit_layers.emplace_back(path); + } else if (category == ManifestCategory::explicit_layer) { + hkey_local_machine_explicit_layers.emplace_back(path); + } else { + hkey_local_machine_drivers.emplace_back(path); + } +} + +void PlatformShim::add_unsecured_manifest(ManifestCategory category, std::filesystem::path const& path) { + if (category == ManifestCategory::settings) { + hkey_current_user_settings.emplace_back(path); + } else if (category == ManifestCategory::implicit_layer) { + hkey_current_user_implicit_layers.emplace_back(path); + } else if (category == ManifestCategory::explicit_layer) { + hkey_current_user_explicit_layers.emplace_back(path); + } +} + +void PlatformShim::add_dxgi_adapter(GpuType gpu_preference, DXGI_ADAPTER_DESC1 desc1) { + uint32_t next_index = static_cast(dxgi_adapters.size()); + dxgi_adapters.emplace(next_index, DXGIAdapter{gpu_preference, desc1, next_index}); +} + +void PlatformShim::add_d3dkmt_adapter(D3DKMT_Adapter const& adapter) { d3dkmt_adapters.push_back(adapter); } + +void PlatformShim::set_app_package_path(std::filesystem::path const& path) { app_package_path = path; } + +// TODO: +void PlatformShim::add_CM_Device_ID([[maybe_unused]] std::wstring const& id, [[maybe_unused]] std::filesystem::path const& icd_path, + [[maybe_unused]] std::filesystem::path const& layer_path) { + // // append a null byte as separator if there is already id's in the list + // if (CM_device_ID_list.size() != 0) { + // CM_device_ID_list += L'\0'; // I'm sure this wont cause issues with std::string down the line... /s + // } + // CM_device_ID_list += id; + // std::string id_str(id.length(), '\0'); + // size_t size_written{}; + // wcstombs_s(&size_written, &id_str[0], id_str.length(), id.c_str(), id.length()); + + // std::string device_path = std::string(pnp_registry_path) + "\\" + id_str; + // CM_device_ID_registry_keys.push_back(device_path.c_str()); + // add_key_value_string(id_key, "VulkanDriverName", icd_path.c_str()); + // add_key_value_string(id_key, "VulkanLayerName", layer_path.c_str()); + // // TODO: decide how to handle 32 bit + // // add_key_value_string(id_key, "VulkanDriverNameWoW", icd_path.c_str()); + // // add_key_value_string(id_key, "VulkanLayerName", layer_path.c_str()); +} + +void PlatformShim::redirect_category(std::filesystem::path const&, ManifestCategory) {} + +#elif COMMON_UNIX_PLATFORMS + +#include +#include + +std::string category_path_name(ManifestCategory category) { + if (category == ManifestCategory::settings) return "settings.d"; + if (category == ManifestCategory::implicit_layer) return "implicit_layer.d"; + if (category == ManifestCategory::explicit_layer) + return "explicit_layer.d"; + else + return "icd.d"; +} + +void PlatformShim::reset() { redirection_map.clear(); } + +bool PlatformShim::is_fake_path(std::filesystem::path const& path) { return redirection_map.count(path) > 0; } +std::filesystem::path const& PlatformShim::get_real_path_from_fake_path(std::filesystem::path const& path) { + return redirection_map.at(path); +} +void PlatformShim::redirect_path(std::filesystem::path const& path, std::filesystem::path const& new_path) { + redirection_map[path] = new_path; +} +void PlatformShim::remove_redirect(std::filesystem::path const& path) { redirection_map.erase(path); } + +bool PlatformShim::is_known_path(std::filesystem::path const& path) { return known_path_set.count(path) > 0; } +void PlatformShim::add_known_path(std::filesystem::path const& path) { known_path_set.insert(path); } +void PlatformShim::remove_known_path(std::filesystem::path const& path) { known_path_set.erase(path); } + +void PlatformShim::add_manifest([[maybe_unused]] ManifestCategory category, [[maybe_unused]] std::filesystem::path const& path) {} +void PlatformShim::add_unsecured_manifest([[maybe_unused]] ManifestCategory category, + [[maybe_unused]] std::filesystem::path const& path) {} + +void PlatformShim::set_app_package_path(std::filesystem::path const& path) {} + +void parse_and_add_env_var_override(std::vector& paths, std::string env_var_contents) { + auto parsed_paths = parse_env_var_list(env_var_contents); + paths.insert(paths.end(), parsed_paths.begin(), parsed_paths.end()); +} + +void PlatformShim::redirect_category(std::filesystem::path const& new_path, ManifestCategory category) { + std::vector paths; + auto home = std::filesystem::path(get_env_var("HOME")); + if (category == ManifestCategory::settings) { + redirect_path(home / ".local/share/vulkan" / category_path_name(category), new_path); + return; + } + + if (!home.empty()) { + paths.push_back((home / ".config")); + paths.push_back((home / ".local/share")); + } + // Don't report errors on apple - these env-vars are not suppose to be defined + bool report_errors = true; +#if defined(__APPLE__) + report_errors = false; +#endif + parse_and_add_env_var_override(paths, get_env_var("XDG_CONFIG_HOME", report_errors)); + if (category == ManifestCategory::explicit_layer) { + parse_and_add_env_var_override(paths, get_env_var("VK_LAYER_PATH", false)); // don't report failure + } + if (category == ManifestCategory::implicit_layer) { + parse_and_add_env_var_override(paths, get_env_var("VK_IMPLICIT_LAYER_PATH", false)); // don't report failure + } + parse_and_add_env_var_override(paths, FALLBACK_DATA_DIRS); + parse_and_add_env_var_override(paths, FALLBACK_CONFIG_DIRS); + + auto sys_conf_dir = std::string(SYSCONFDIR); + if (!sys_conf_dir.empty()) { + paths.push_back(sys_conf_dir); + } +#if defined(EXTRASYSCONFDIR) + // EXTRASYSCONFDIR default is /etc, if SYSCONFDIR wasn't defined, it will have /etc put + // as its default. Don't want to double add it + auto extra_sys_conf_dir = std::string(EXTRASYSCONFDIR); + if (!extra_sys_conf_dir.empty() && sys_conf_dir != extra_sys_conf_dir) { + paths.push_back(extra_sys_conf_dir); + } +#endif + + for (auto& path : paths) { + if (!path.empty()) { + redirect_path(std::filesystem::path(path) / "vulkan" / category_path_name(category), new_path); + } + } +} + +void PlatformShim::set_fake_path(ManifestCategory category, std::filesystem::path const& path) { + // use /etc as the 'redirection path' by default since its always searched + redirect_path(std::filesystem::path(SYSCONFDIR) / "vulkan" / category_path_name(category), path); +} + +void PlatformShim::redirect_dlopen_name(std::filesystem::path const& filename, std::filesystem::path const& actual_path) { + dlopen_redirection_map[filename] = actual_path; +} + +bool PlatformShim::is_dlopen_redirect_name(std::filesystem::path const& filename) { + return dlopen_redirection_map.count(filename) == 1; +} + +std::filesystem::path PlatformShim::query_default_redirect_path(ManifestCategory category) { + return std::filesystem::path(SYSCONFDIR) / "vulkan" / category_path_name(category); +} +#endif diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/shim/unix_shim.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/unix_shim.cpp new file mode 100644 index 0000000000..a3abba5a82 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/unix_shim.cpp @@ -0,0 +1,427 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "shim.h" + +#include + +#if defined(__APPLE__) +#include +#endif + +PlatformShim platform_shim; +extern "C" { +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +PlatformShim* get_platform_shim(GetFoldersFunc get_folders_by_name_function) { + platform_shim = PlatformShim(get_folders_by_name_function); + return &platform_shim; +} +#elif defined(__APPLE__) +FRAMEWORK_EXPORT PlatformShim* get_platform_shim(GetFoldersFunc get_folders_by_name_function) { + platform_shim = PlatformShim(get_folders_by_name_function); + return &platform_shim; +} +#endif + +// Necessary for MacOS function shimming +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +#define OPENDIR_FUNC_NAME opendir +#define READDIR_FUNC_NAME readdir +#define CLOSEDIR_FUNC_NAME closedir +#define ACCESS_FUNC_NAME access +#define FOPEN_FUNC_NAME fopen +#define DLOPEN_FUNC_NAME dlopen +#define GETEUID_FUNC_NAME geteuid +#define GETEGID_FUNC_NAME getegid +#if defined(HAVE_SECURE_GETENV) +#define SECURE_GETENV_FUNC_NAME secure_getenv +#endif +#if defined(HAVE___SECURE_GETENV) +#define __SECURE_GETENV_FUNC_NAME __secure_getenv +#endif +#define PRINTF_FUNC_NAME printf +#define FPUTS_FUNC_NAME fputs +#define FPUTC_FUNC_NAME fputc +#elif defined(__APPLE__) +#define OPENDIR_FUNC_NAME my_opendir +#define READDIR_FUNC_NAME my_readdir +#define CLOSEDIR_FUNC_NAME my_closedir +#define ACCESS_FUNC_NAME my_access +#define FOPEN_FUNC_NAME my_fopen +#define DLOPEN_FUNC_NAME my_dlopen +#define GETEUID_FUNC_NAME my_geteuid +#define GETEGID_FUNC_NAME my_getegid +#if !defined(TARGET_OS_IPHONE) +#if defined(HAVE_SECURE_GETENV) +#define SECURE_GETENV_FUNC_NAME my_secure_getenv +#endif +#if defined(HAVE___SECURE_GETENV) +#define __SECURE_GETENV_FUNC_NAME my__secure_getenv +#endif +#endif +#define FPUTS_FUNC_NAME my_fputs +#define FPUTC_FUNC_NAME my_fputc +#endif + +using PFN_OPENDIR = DIR* (*)(const char* path_name); +using PFN_READDIR = struct dirent* (*)(DIR* dir_stream); +using PFN_CLOSEDIR = int (*)(DIR* dir_stream); +using PFN_ACCESS = int (*)(const char* pathname, int mode); +using PFN_FOPEN = FILE* (*)(const char* filename, const char* mode); +using PFN_DLOPEN = void* (*)(const char* in_filename, int flags); +using PFN_GETEUID = uid_t (*)(void); +using PFN_GETEGID = gid_t (*)(void); +#if defined(HAVE_SECURE_GETENV) || defined(HAVE___SECURE_GETENV) +using PFN_SEC_GETENV = char* (*)(const char* name); +#endif +using PFN_FPUTS = int (*)(const char* str, FILE* stream); +using PFN_FPUTC = int (*)(int c, FILE* stream); + +#if defined(__APPLE__) +#define real_opendir opendir +#define real_readdir readdir +#define real_closedir closedir +#define real_access access +#define real_fopen fopen +#define real_dlopen dlopen +#define real_geteuid geteuid +#define real_getegid getegid +#if defined(HAVE_SECURE_GETENV) +#define real_secure_getenv secure_getenv +#endif +#if defined(HAVE___SECURE_GETENV) +#define real__secure_getenv __secure_getenv +#endif +#define real_fputs fputs +#define real_fputc fputc +#else +PFN_OPENDIR real_opendir = nullptr; +PFN_READDIR real_readdir = nullptr; +PFN_CLOSEDIR real_closedir = nullptr; +PFN_ACCESS real_access = nullptr; +PFN_FOPEN real_fopen = nullptr; +PFN_DLOPEN real_dlopen = nullptr; +PFN_GETEUID real_geteuid = nullptr; +PFN_GETEGID real_getegid = nullptr; +#if defined(HAVE_SECURE_GETENV) +PFN_SEC_GETENV real_secure_getenv = nullptr; +#endif +#if defined(HAVE___SECURE_GETENV) +PFN_SEC_GETENV real__secure_getenv = nullptr; +#endif +PFN_FPUTS real_fputs = nullptr; +PFN_FPUTC real_fputc = nullptr; +#endif + +FRAMEWORK_EXPORT DIR* OPENDIR_FUNC_NAME(const char* path_name) { +#if !defined(__APPLE__) + if (!real_opendir) real_opendir = (PFN_OPENDIR)dlsym(RTLD_NEXT, "opendir"); +#endif + if (platform_shim.is_during_destruction) { + return real_opendir(path_name); + } + DIR* dir; + if (platform_shim.is_fake_path(path_name)) { + auto real_path_name = platform_shim.get_real_path_from_fake_path(std::filesystem::path(path_name)); + dir = real_opendir(real_path_name.c_str()); + platform_shim.dir_entries.push_back(DirEntry{dir, std::string(path_name), {}, 0, true}); + } else if (platform_shim.is_known_path(path_name)) { + dir = real_opendir(path_name); + platform_shim.dir_entries.push_back(DirEntry{dir, std::string(path_name), {}, 0, false}); + } else { + dir = real_opendir(path_name); + } + + return dir; +} + +FRAMEWORK_EXPORT struct dirent* READDIR_FUNC_NAME(DIR* dir_stream) { +#if !defined(__APPLE__) + if (!real_readdir) { + if (sizeof(void*) == 8) { + real_readdir = (PFN_READDIR)dlsym(RTLD_NEXT, "readdir"); + } else { + // Necessary to specify the 64 bit readdir version since that is what is linked in when using _FILE_OFFSET_BITS + real_readdir = (PFN_READDIR)dlsym(RTLD_NEXT, "readdir64"); + } + } + +#endif + if (platform_shim.is_during_destruction) { + return real_readdir(dir_stream); + } + auto it = std::find_if(platform_shim.dir_entries.begin(), platform_shim.dir_entries.end(), + [dir_stream](DirEntry const& entry) { return entry.directory == dir_stream; }); + + if (it == platform_shim.dir_entries.end()) { + return real_readdir(dir_stream); + } + // Folder was found but this is the first file to be read from it + if (it->current_index == 0) { + std::vector folder_contents; + std::vector dirent_filenames; + while (true) { + errno = 0; + struct dirent* dir_entry = real_readdir(dir_stream); + if (errno != 0) { + std::cerr << "Readdir failed: errno has value of " << std::to_string(errno) << "\n"; + } + if (NULL == dir_entry) { + break; + } + // skip . and .. entries + if ((dir_entry->d_name[0] == '.' && dir_entry->d_name[1] == '.' && dir_entry->d_name[2] == '\0') || + (dir_entry->d_name[0] == '.' && dir_entry->d_name[1] == '\0')) { + continue; + } + folder_contents.push_back(dir_entry); + dirent_filenames.push_back(&dir_entry->d_name[0]); + } + auto real_path = it->folder_path; + if (it->is_fake_path) { + real_path = platform_shim.redirection_map.at(it->folder_path); + } + auto filenames = platform_shim.get_folders_by_name_function(real_path.c_str()); + + // Add the dirent structures in the order they appear in the FolderManager + // Ignore anything which wasn't in the FolderManager + for (auto const& file : filenames) { + for (size_t i = 0; i < dirent_filenames.size(); i++) { + if (file == dirent_filenames.at(i)) { + it->contents.push_back(folder_contents.at(i)); + break; + } + } + } + } + if (it->current_index >= it->contents.size()) return nullptr; + return it->contents.at(it->current_index++); +} + +FRAMEWORK_EXPORT int CLOSEDIR_FUNC_NAME(DIR* dir_stream) { +#if !defined(__APPLE__) + if (!real_closedir) real_closedir = (PFN_CLOSEDIR)dlsym(RTLD_NEXT, "closedir"); +#endif + if (platform_shim.is_during_destruction) { + return real_closedir(dir_stream); + } + auto it = std::find_if(platform_shim.dir_entries.begin(), platform_shim.dir_entries.end(), + [dir_stream](DirEntry const& entry) { return entry.directory == dir_stream; }); + + if (it != platform_shim.dir_entries.end()) { + platform_shim.dir_entries.erase(it); + } + + return real_closedir(dir_stream); +} + +FRAMEWORK_EXPORT int ACCESS_FUNC_NAME(const char* in_pathname, int mode) { +#if !defined(__APPLE__) + if (!real_access) real_access = (PFN_ACCESS)dlsym(RTLD_NEXT, "access"); +#endif + std::filesystem::path path{in_pathname}; + if (!path.has_parent_path()) { + return real_access(in_pathname, mode); + } + + if (platform_shim.is_fake_path(path.parent_path())) { + std::filesystem::path real_path = platform_shim.get_real_path_from_fake_path(path.parent_path()); + real_path /= path.filename(); + return real_access(real_path.c_str(), mode); + } + return real_access(in_pathname, mode); +} + +FRAMEWORK_EXPORT FILE* FOPEN_FUNC_NAME(const char* in_filename, const char* mode) { +#if !defined(__APPLE__) + if (!real_fopen) real_fopen = (PFN_FOPEN)dlsym(RTLD_NEXT, "fopen"); +#endif + std::filesystem::path path{in_filename}; + if (!path.has_parent_path()) { + return real_fopen(in_filename, mode); + } + + FILE* f_ptr; + if (platform_shim.is_fake_path(path.parent_path())) { + auto real_path = platform_shim.get_real_path_from_fake_path(path.parent_path()) / path.filename(); + f_ptr = real_fopen(real_path.c_str(), mode); + } else { + f_ptr = real_fopen(in_filename, mode); + } + + return f_ptr; +} + +FRAMEWORK_EXPORT void* DLOPEN_FUNC_NAME(const char* in_filename, int flags) { +#if !defined(__APPLE__) + if (!real_dlopen) real_dlopen = (PFN_DLOPEN)dlsym(RTLD_NEXT, "dlopen"); +#endif + + if (platform_shim.is_dlopen_redirect_name(in_filename)) { + return real_dlopen(platform_shim.dlopen_redirection_map[in_filename].c_str(), flags); + } + return real_dlopen(in_filename, flags); +} + +FRAMEWORK_EXPORT uid_t GETEUID_FUNC_NAME(void) { +#if !defined(__APPLE__) + if (!real_geteuid) real_geteuid = (PFN_GETEUID)dlsym(RTLD_NEXT, "geteuid"); +#endif + if (platform_shim.use_fake_elevation) { + // Root on linux is 0, so force pretending like we're root + return 0; + } else { + return real_geteuid(); + } +} + +FRAMEWORK_EXPORT gid_t GETEGID_FUNC_NAME(void) { +#if !defined(__APPLE__) + if (!real_getegid) real_getegid = (PFN_GETEGID)dlsym(RTLD_NEXT, "getegid"); +#endif + if (platform_shim.use_fake_elevation) { + // Root on linux is 0, so force pretending like we're root + return 0; + } else { + return real_getegid(); + } +} + +#if !defined(TARGET_OS_IPHONE) +#if defined(HAVE_SECURE_GETENV) +FRAMEWORK_EXPORT char* SECURE_GETENV_FUNC_NAME(const char* name) { +#if !defined(__APPLE__) + if (!real_secure_getenv) real_secure_getenv = (PFN_SEC_GETENV)dlsym(RTLD_NEXT, "secure_getenv"); +#endif + if (platform_shim.use_fake_elevation) { + return NULL; + } else { + return real_secure_getenv(name); + } +} +#endif +#if defined(HAVE___SECURE_GETENV) +FRAMEWORK_EXPORT char* __SECURE_GETENV_FUNC_NAME(const char* name) { +#if !defined(__APPLE__) + if (!real__secure_getenv) real__secure_getenv = (PFN_SEC_GETENV)dlsym(RTLD_NEXT, "__secure_getenv"); +#endif + + if (platform_shim.use_fake_elevation) { + return NULL; + } else { + return real__secure_getenv(name); + } +} +#endif +#endif + +FRAMEWORK_EXPORT int FPUTS_FUNC_NAME(const char* str, FILE* stream) { +#if !defined(__APPLE__) + if (!real_fputs) real_fputs = (PFN_FPUTS)dlsym(RTLD_NEXT, "fputs"); +#endif + if (stream == stderr) { + platform_shim.fputs_stderr_log += str; + } + return real_fputs(str, stream); +} + +FRAMEWORK_EXPORT int FPUTC_FUNC_NAME(int ch, FILE* stream) { +#if !defined(__APPLE__) + if (!real_fputc) real_fputc = (PFN_FPUTC)dlsym(RTLD_NEXT, "fputc"); +#endif + if (stream == stderr) { + platform_shim.fputs_stderr_log += ch; + } + return real_fputc(ch, stream); +} + +#if defined(__APPLE__) +FRAMEWORK_EXPORT CFBundleRef my_CFBundleGetMainBundle() { + static CFBundleRef global_bundle{}; + return reinterpret_cast(&global_bundle); +} +FRAMEWORK_EXPORT CFURLRef my_CFBundleCopyResourcesDirectoryURL([[maybe_unused]] CFBundleRef bundle) { + static CFURLRef global_url{}; + return reinterpret_cast(&global_url); +} +FRAMEWORK_EXPORT Boolean my_CFURLGetFileSystemRepresentation([[maybe_unused]] CFURLRef url, + [[maybe_unused]] Boolean resolveAgainstBase, UInt8* buffer, + CFIndex maxBufLen) { + if (!platform_shim.bundle_contents.empty()) { + CFIndex copy_len = (CFIndex)platform_shim.bundle_contents.size(); + if (copy_len > maxBufLen) { + copy_len = maxBufLen; + } + strncpy(reinterpret_cast(buffer), platform_shim.bundle_contents.c_str(), copy_len); + return TRUE; + } + return FALSE; +} +#endif + +/* Shiming functions on apple is limited by the linker prefering to not use functions in the + * executable in loaded dylibs. By adding an interposer, we redirect the linker to use our + * version of the function over the real one, thus shimming the system function. + */ +#if defined(__APPLE__) +#define MACOS_ATTRIB __attribute__((section("__DATA,__interpose"))) +#define VOIDP_CAST(_func) reinterpret_cast(&_func) + +struct Interposer { + const void* shim_function; + const void* underlying_function; +}; + +__attribute__((used)) static Interposer _interpose_opendir MACOS_ATTRIB = {VOIDP_CAST(my_opendir), VOIDP_CAST(opendir)}; +__attribute__((used)) static Interposer _interpose_readdir MACOS_ATTRIB = {VOIDP_CAST(my_readdir), VOIDP_CAST(readdir)}; +__attribute__((used)) static Interposer _interpose_closedir MACOS_ATTRIB = {VOIDP_CAST(my_closedir), VOIDP_CAST(closedir)}; +__attribute__((used)) static Interposer _interpose_access MACOS_ATTRIB = {VOIDP_CAST(my_access), VOIDP_CAST(access)}; +__attribute__((used)) static Interposer _interpose_fopen MACOS_ATTRIB = {VOIDP_CAST(my_fopen), VOIDP_CAST(fopen)}; +__attribute__((used)) static Interposer _interpose_dlopen MACOS_ATTRIB = {VOIDP_CAST(my_dlopen), VOIDP_CAST(dlopen)}; +__attribute__((used)) static Interposer _interpose_euid MACOS_ATTRIB = {VOIDP_CAST(my_geteuid), VOIDP_CAST(geteuid)}; +__attribute__((used)) static Interposer _interpose_egid MACOS_ATTRIB = {VOIDP_CAST(my_getegid), VOIDP_CAST(getegid)}; +#if !defined(TARGET_OS_IPHONE) +#if defined(HAVE_SECURE_GETENV) +__attribute__((used)) static Interposer _interpose_secure_getenv MACOS_ATTRIB = {VOIDP_CAST(my_secure_getenv), + VOIDP_CAST(secure_getenv)}; +#endif +#if defined(HAVE___SECURE_GETENV) +__attribute__((used)) static Interposer _interpose__secure_getenv MACOS_ATTRIB = {VOIDP_CAST(my__secure_getenv), + VOIDP_CAST(__secure_getenv)}; +#endif +#endif +__attribute__((used)) static Interposer _interpose_fputs MACOS_ATTRIB = {VOIDP_CAST(my_fputs), VOIDP_CAST(fputs)}; +__attribute__((used)) static Interposer _interpose_fputc MACOS_ATTRIB = {VOIDP_CAST(my_fputc), VOIDP_CAST(fputc)}; +__attribute__((used)) static Interposer _interpose_CFBundleGetMainBundle MACOS_ATTRIB = {VOIDP_CAST(my_CFBundleGetMainBundle), + VOIDP_CAST(CFBundleGetMainBundle)}; +__attribute__((used)) static Interposer _interpose_CFBundleCopyResourcesDirectoryURL MACOS_ATTRIB = { + VOIDP_CAST(my_CFBundleCopyResourcesDirectoryURL), VOIDP_CAST(CFBundleCopyResourcesDirectoryURL)}; +__attribute__((used)) static Interposer _interpose_CFURLGetFileSystemRepresentation MACOS_ATTRIB = { + VOIDP_CAST(my_CFURLGetFileSystemRepresentation), VOIDP_CAST(CFURLGetFileSystemRepresentation)}; + +#endif +} // extern "C" diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/shim/windows_shim.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/windows_shim.cpp new file mode 100644 index 0000000000..1ca1a68e2d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/shim/windows_shim.cpp @@ -0,0 +1,519 @@ +/* + * Copyright (c) 2021 The Khronos Group Inc. + * Copyright (c) 2021 Valve Corporation + * Copyright (c) 2021 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +// This needs to be defined first, or else we'll get redefinitions on NTSTATUS values +#if defined(_WIN32) +#define UMDF_USING_NTSTATUS +#include +#endif + +#include +#include + +#include "shim.h" + +#include "detours.h" + +static PlatformShim platform_shim; + +extern "C" { + +static LibraryWrapper gdi32_dll; + +using PFN_GetSidSubAuthority = PDWORD(__stdcall *)(PSID pSid, DWORD nSubAuthority); +static PFN_GetSidSubAuthority fpGetSidSubAuthority = GetSidSubAuthority; + +PDWORD __stdcall ShimGetSidSubAuthority(PSID, DWORD) { return &platform_shim.elevation_level; } + +static PFN_LoaderEnumAdapters2 fpEnumAdapters2 = nullptr; +static PFN_LoaderQueryAdapterInfo fpQueryAdapterInfo = nullptr; + +NTSTATUS APIENTRY ShimEnumAdapters2(LoaderEnumAdapters2 *adapters) { + if (adapters == nullptr) { + return STATUS_INVALID_PARAMETER; + } + if (platform_shim.d3dkmt_adapters.size() == 0) { + if (adapters->adapters != nullptr) adapters->adapter_count = 0; + return STATUS_SUCCESS; + } + if (adapters->adapters != nullptr) { + for (size_t i = 0; i < platform_shim.d3dkmt_adapters.size(); i++) { + adapters->adapters[i].handle = platform_shim.d3dkmt_adapters[i].hAdapter; + adapters->adapters[i].luid = platform_shim.d3dkmt_adapters[i].adapter_luid; + } + adapters->adapter_count = static_cast(platform_shim.d3dkmt_adapters.size()); + } else { + adapters->adapter_count = static_cast(platform_shim.d3dkmt_adapters.size()); + } + return STATUS_SUCCESS; +} +NTSTATUS APIENTRY ShimQueryAdapterInfo(const LoaderQueryAdapterInfo *query_info) { + if (query_info == nullptr || query_info->private_data == nullptr) { + return STATUS_INVALID_PARAMETER; + } + auto handle = query_info->handle; + auto it = std::find_if(platform_shim.d3dkmt_adapters.begin(), platform_shim.d3dkmt_adapters.end(), + [handle](D3DKMT_Adapter const &adapter) { return handle == adapter.hAdapter; }); + if (it == platform_shim.d3dkmt_adapters.end()) { + return STATUS_INVALID_PARAMETER; + } + auto &adapter = *it; + auto *reg_info = reinterpret_cast(query_info->private_data); + + std::vector *paths = nullptr; + if (wcsstr(reg_info->value_name, L"DriverName") != nullptr) { // looking for drivers + paths = &adapter.driver_paths; + } else if (wcsstr(reg_info->value_name, L"ImplicitLayers") != nullptr) { // looking for implicit layers + paths = &adapter.implicit_layer_paths; + } else if (wcsstr(reg_info->value_name, L"ExplicitLayers") != nullptr) { // looking for explicit layers + paths = &adapter.explicit_layer_paths; + } + + reg_info->status = LOADER_QUERY_REGISTRY_STATUS_SUCCESS; + if (reg_info->output_value_size == 0) { + // final null terminator size + ULONG size = 2; + + // size is in bytes, so multiply path size + 1 (for null terminator) by size of wchar (basically, 2). + for (auto const &path : *paths) size += static_cast((path.length() + 1) * sizeof(wchar_t)); + reg_info->output_value_size = size; + if (size != 2) { + // only want to write data if there is path data to write + reg_info->status = LOADER_QUERY_REGISTRY_STATUS_BUFFER_OVERFLOW; + } + } else if (reg_info->output_value_size > 2) { + size_t index = 0; + for (auto const &path : *paths) { + for (auto w : path) { + reg_info->output_string[index++] = w; + } + reg_info->output_string[index++] = L'\0'; + } + // make sure there is a null terminator + reg_info->output_string[index++] = L'\0'; + + reg_info->status = LOADER_QUERY_REGISTRY_STATUS_SUCCESS; + } + + return STATUS_SUCCESS; +} + +// clang-format off +static CONFIGRET(WINAPI *REAL_CM_Get_Device_ID_List_SizeW)(PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags) = CM_Get_Device_ID_List_SizeW; +static CONFIGRET(WINAPI *REAL_CM_Get_Device_ID_ListW)(PCWSTR pszFilter, PZZWSTR Buffer, ULONG BufferLen, ULONG ulFlags) = CM_Get_Device_ID_ListW; +static CONFIGRET(WINAPI *REAL_CM_Locate_DevNodeW)(PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags) = CM_Locate_DevNodeW; +static CONFIGRET(WINAPI *REAL_CM_Get_DevNode_Status)(PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst, ULONG ulFlags) = CM_Get_DevNode_Status; +static CONFIGRET(WINAPI *REAL_CM_Get_Device_IDW)(DEVINST dnDevInst, PWSTR Buffer, ULONG BufferLen, ULONG ulFlags) = CM_Get_Device_IDW; +static CONFIGRET(WINAPI *REAL_CM_Get_Child)(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags) = CM_Get_Child; +static CONFIGRET(WINAPI *REAL_CM_Get_DevNode_Registry_PropertyW)(DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType, PVOID Buffer, PULONG pulLength, ULONG ulFlags) = CM_Get_DevNode_Registry_PropertyW; +static CONFIGRET(WINAPI *REAL_CM_Get_Sibling)(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags) = CM_Get_Sibling; +// clang-format on + +CONFIGRET WINAPI SHIM_CM_Get_Device_ID_List_SizeW(PULONG pulLen, [[maybe_unused]] PCWSTR pszFilter, + [[maybe_unused]] ULONG ulFlags) { + if (pulLen == nullptr) { + return CR_INVALID_POINTER; + } + *pulLen = static_cast(platform_shim.CM_device_ID_list.size()); + return CR_SUCCESS; +} +CONFIGRET WINAPI SHIM_CM_Get_Device_ID_ListW([[maybe_unused]] PCWSTR pszFilter, PZZWSTR Buffer, ULONG BufferLen, + [[maybe_unused]] ULONG ulFlags) { + if (Buffer != NULL) { + if (BufferLen < platform_shim.CM_device_ID_list.size()) return CR_BUFFER_SMALL; + for (size_t i = 0; i < BufferLen; i++) { + Buffer[i] = platform_shim.CM_device_ID_list[i]; + } + } + return CR_SUCCESS; +} +// TODO +CONFIGRET WINAPI SHIM_CM_Locate_DevNodeW(PDEVINST, DEVINSTID_W, ULONG) { return CR_FAILURE; } +// TODO +CONFIGRET WINAPI SHIM_CM_Get_DevNode_Status(PULONG, PULONG, DEVINST, ULONG) { return CR_FAILURE; } +// TODO +CONFIGRET WINAPI SHIM_CM_Get_Device_IDW(DEVINST, PWSTR, ULONG, ULONG) { return CR_FAILURE; } +// TODO +CONFIGRET WINAPI SHIM_CM_Get_Child(PDEVINST, DEVINST, ULONG) { return CR_FAILURE; } +// TODO +CONFIGRET WINAPI SHIM_CM_Get_DevNode_Registry_PropertyW(DEVINST, ULONG, PULONG, PVOID, PULONG, ULONG) { return CR_FAILURE; } +// TODO +CONFIGRET WINAPI SHIM_CM_Get_Sibling(PDEVINST, DEVINST, ULONG) { return CR_FAILURE; } + +static LibraryWrapper dxgi_module; +typedef HRESULT(APIENTRY *PFN_CreateDXGIFactory1)(REFIID riid, void **ppFactory); + +PFN_CreateDXGIFactory1 RealCreateDXGIFactory1; + +HRESULT __stdcall ShimGetDesc1(IDXGIAdapter1 *pAdapter, + /* [annotation][out] */ + _Out_ DXGI_ADAPTER_DESC1 *pDesc) { + if (pAdapter == nullptr || pDesc == nullptr) return DXGI_ERROR_INVALID_CALL; + + for (const auto &[index, adapter] : platform_shim.dxgi_adapters) { + if (&adapter.adapter_instance == pAdapter) { + *pDesc = adapter.desc1; + return S_OK; + } + } + return DXGI_ERROR_INVALID_CALL; +} +ULONG __stdcall ShimIDXGIFactory1Release(IDXGIFactory1 *) { return S_OK; } +ULONG __stdcall ShimIDXGIFactory6Release(IDXGIFactory6 *) { return S_OK; } +ULONG __stdcall ShimRelease(IDXGIAdapter1 *) { return S_OK; } + +IDXGIAdapter1 *setup_and_get_IDXGIAdapter1(DXGIAdapter &adapter) { + adapter.adapter_vtbl_instance.GetDesc1 = ShimGetDesc1; + adapter.adapter_vtbl_instance.Release = ShimRelease; + adapter.adapter_instance.lpVtbl = &adapter.adapter_vtbl_instance; + return &adapter.adapter_instance; +} + +HRESULT __stdcall ShimEnumAdapters1_1([[maybe_unused]] IDXGIFactory1 *This, + /* [in] */ UINT Adapter, + /* [annotation][out] */ + _COM_Outptr_ IDXGIAdapter1 **ppAdapter) { + if (Adapter >= platform_shim.dxgi_adapters.size()) { + return DXGI_ERROR_INVALID_CALL; + } + if (ppAdapter != nullptr) { + *ppAdapter = setup_and_get_IDXGIAdapter1(platform_shim.dxgi_adapters.at(Adapter)); + } + return S_OK; +} + +HRESULT __stdcall ShimEnumAdapters1_6([[maybe_unused]] IDXGIFactory6 *This, + /* [in] */ UINT Adapter, + /* [annotation][out] */ + _COM_Outptr_ IDXGIAdapter1 **ppAdapter) { + if (Adapter >= platform_shim.dxgi_adapters.size()) { + return DXGI_ERROR_INVALID_CALL; + } + if (ppAdapter != nullptr) { + *ppAdapter = setup_and_get_IDXGIAdapter1(platform_shim.dxgi_adapters.at(Adapter)); + } + return S_OK; +} + +HRESULT __stdcall ShimEnumAdapterByGpuPreference([[maybe_unused]] IDXGIFactory6 *This, _In_ UINT Adapter, + [[maybe_unused]] _In_ DXGI_GPU_PREFERENCE GpuPreference, + [[maybe_unused]] _In_ REFIID riid, _COM_Outptr_ void **ppvAdapter) { + if (Adapter >= platform_shim.dxgi_adapters.size()) { + return DXGI_ERROR_NOT_FOUND; + } + // loader always uses DXGI_GPU_PREFERENCE_UNSPECIFIED + // Update the shim if this isn't the case + assert(GpuPreference == DXGI_GPU_PREFERENCE::DXGI_GPU_PREFERENCE_UNSPECIFIED && + "Test shim assumes the GpuPreference is unspecified."); + if (ppvAdapter != nullptr) { + *ppvAdapter = setup_and_get_IDXGIAdapter1(platform_shim.dxgi_adapters.at(Adapter)); + } + return S_OK; +} + +static IDXGIFactory1 *get_IDXGIFactory1() { + static IDXGIFactory1Vtbl vtbl{}; + vtbl.EnumAdapters1 = ShimEnumAdapters1_1; + vtbl.Release = ShimIDXGIFactory1Release; + static IDXGIFactory1 factory{}; + factory.lpVtbl = &vtbl; + return &factory; +} + +static IDXGIFactory6 *get_IDXGIFactory6() { + static IDXGIFactory6Vtbl vtbl{}; + vtbl.EnumAdapters1 = ShimEnumAdapters1_6; + vtbl.EnumAdapterByGpuPreference = ShimEnumAdapterByGpuPreference; + vtbl.Release = ShimIDXGIFactory6Release; + static IDXGIFactory6 factory{}; + factory.lpVtbl = &vtbl; + return &factory; +} + +HRESULT __stdcall ShimCreateDXGIFactory1(REFIID riid, void **ppFactory) { + if (riid == IID_IDXGIFactory1) { + auto *factory = get_IDXGIFactory1(); + *ppFactory = factory; + return S_OK; + } + if (riid == IID_IDXGIFactory6) { + auto *factory = get_IDXGIFactory6(); + *ppFactory = factory; + return S_OK; + } + assert(false && "new riid, update shim code to handle"); + return S_FALSE; +} + +// Windows Registry shims +using PFN_RegOpenKeyExA = LSTATUS(__stdcall *)(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult); +static PFN_RegOpenKeyExA fpRegOpenKeyExA = RegOpenKeyExA; +using PFN_RegQueryValueExA = LSTATUS(__stdcall *)(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, + LPDWORD lpcbData); +static PFN_RegQueryValueExA fpRegQueryValueExA = RegQueryValueExA; +using PFN_RegEnumValueA = LSTATUS(__stdcall *)(HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcchValueName, + LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData); +static PFN_RegEnumValueA fpRegEnumValueA = RegEnumValueA; + +using PFN_RegCloseKey = LSTATUS(__stdcall *)(HKEY hKey); +static PFN_RegCloseKey fpRegCloseKey = RegCloseKey; + +LSTATUS __stdcall ShimRegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, [[maybe_unused]] DWORD ulOptions, + [[maybe_unused]] REGSAM samDesired, PHKEY phkResult) { + if (HKEY_LOCAL_MACHINE != hKey && HKEY_CURRENT_USER != hKey) return ERROR_BADKEY; + std::string hive = ""; + if (HKEY_LOCAL_MACHINE == hKey) + hive = "HKEY_LOCAL_MACHINE"; + else if (HKEY_CURRENT_USER == hKey) + hive = "HKEY_CURRENT_USER"; + if (hive == "") return ERROR_ACCESS_DENIED; + + platform_shim.created_keys.emplace_back(platform_shim.created_key_count++, hive + "\\" + lpSubKey); + *phkResult = platform_shim.created_keys.back().get(); + return 0; +} +const std::string *get_path_of_created_key(HKEY hKey) { + for (const auto &key : platform_shim.created_keys) { + if (key.key == hKey) { + return &key.path; + } + } + return nullptr; +} +std::vector *get_registry_vector(std::string const &path) { + if (path == "HKEY_LOCAL_MACHINE\\" VK_DRIVERS_INFO_REGISTRY_LOC) return &platform_shim.hkey_local_machine_drivers; + if (path == "HKEY_LOCAL_MACHINE\\" VK_ELAYERS_INFO_REGISTRY_LOC) return &platform_shim.hkey_local_machine_explicit_layers; + if (path == "HKEY_LOCAL_MACHINE\\" VK_ILAYERS_INFO_REGISTRY_LOC) return &platform_shim.hkey_local_machine_implicit_layers; + if (path == "HKEY_CURRENT_USER\\" VK_ELAYERS_INFO_REGISTRY_LOC) return &platform_shim.hkey_current_user_explicit_layers; + if (path == "HKEY_CURRENT_USER\\" VK_ILAYERS_INFO_REGISTRY_LOC) return &platform_shim.hkey_current_user_implicit_layers; + if (path == "HKEY_LOCAL_MACHINE\\" VK_SETTINGS_INFO_REGISTRY_LOC) return &platform_shim.hkey_local_machine_settings; + if (path == "HKEY_CURRENT_USER\\" VK_SETTINGS_INFO_REGISTRY_LOC) return &platform_shim.hkey_current_user_settings; + return nullptr; +} +LSTATUS __stdcall ShimRegQueryValueExA(HKEY, LPCSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD) { + // TODO: + return ERROR_SUCCESS; +} +LSTATUS __stdcall ShimRegEnumValueA(HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcchValueName, + [[maybe_unused]] LPDWORD lpReserved, [[maybe_unused]] LPDWORD lpType, LPBYTE lpData, + LPDWORD lpcbData) { + const std::string *path = get_path_of_created_key(hKey); + if (path == nullptr) return ERROR_NO_MORE_ITEMS; + + const auto *location_ptr = get_registry_vector(*path); + if (location_ptr == nullptr) return ERROR_NO_MORE_ITEMS; + const auto &location = *location_ptr; + if (dwIndex >= location.size()) return ERROR_NO_MORE_ITEMS; + + std::string name = narrow(location[dwIndex].name); + if (*lpcchValueName < name.size()) return ERROR_NO_MORE_ITEMS; + for (size_t i = 0; i < name.size(); i++) { + lpValueName[i] = name[i]; + } + lpValueName[name.size()] = '\0'; + *lpcchValueName = static_cast(name.size() + 1); + if (*lpcbData < sizeof(DWORD)) return ERROR_NO_MORE_ITEMS; + DWORD *lpcbData_dword = reinterpret_cast(lpData); + *lpcbData_dword = location[dwIndex].value; + *lpcbData = sizeof(DWORD); + return ERROR_SUCCESS; +} +LSTATUS __stdcall ShimRegCloseKey(HKEY hKey) { + for (size_t i = 0; i < platform_shim.created_keys.size(); i++) { + if (platform_shim.created_keys[i].get() == hKey) { + platform_shim.created_keys.erase(platform_shim.created_keys.begin() + i); + return ERROR_SUCCESS; + } + } + // means that RegCloseKey was called with an invalid key value (one that doesn't exist or has already been closed) + exit(-1); +} + +// Windows app package shims +using PFN_GetPackagesByPackageFamily = LONG(WINAPI *)(PCWSTR, UINT32 *, PWSTR *, UINT32 *, WCHAR *); +static PFN_GetPackagesByPackageFamily fpGetPackagesByPackageFamily = GetPackagesByPackageFamily; +using PFN_GetPackagePathByFullName = LONG(WINAPI *)(PCWSTR, UINT32 *, PWSTR); +static PFN_GetPackagePathByFullName fpGetPackagePathByFullName = GetPackagePathByFullName; + +static constexpr wchar_t package_full_name[] = L"ThisIsARandomStringSinceTheNameDoesn'tMatter"; +LONG WINAPI ShimGetPackagesByPackageFamily(_In_ PCWSTR packageFamilyName, _Inout_ UINT32 *count, + _Out_writes_opt_(*count) PWSTR *packageFullNames, _Inout_ UINT32 *bufferLength, + _Out_writes_opt_(*bufferLength) WCHAR *buffer) { + if (!packageFamilyName || !count || !bufferLength) return ERROR_INVALID_PARAMETER; + if (!platform_shim.app_package_path.empty() && wcscmp(packageFamilyName, L"Microsoft.D3DMappingLayers_8wekyb3d8bbwe") == 0) { + if (*count > 0 && !packageFullNames) return ERROR_INVALID_PARAMETER; + if (*bufferLength > 0 && !buffer) return ERROR_INVALID_PARAMETER; + if (*count > 1) return ERROR_INVALID_PARAMETER; + bool too_small = *count < 1 || *bufferLength < ARRAYSIZE(package_full_name); + *count = 1; + *bufferLength = ARRAYSIZE(package_full_name); + if (too_small) return ERROR_INSUFFICIENT_BUFFER; + + for (size_t i = 0; i < sizeof(package_full_name) / sizeof(wchar_t); i++) { + if (i >= *bufferLength) { + break; + } + buffer[i] = package_full_name[i]; + } + *packageFullNames = buffer; + return 0; + } + *count = 0; + *bufferLength = 0; + return 0; +} + +LONG WINAPI ShimGetPackagePathByFullName(_In_ PCWSTR packageFullName, _Inout_ UINT32 *pathLength, + _Out_writes_opt_(*pathLength) PWSTR path) { + if (!packageFullName || !pathLength) return ERROR_INVALID_PARAMETER; + if (*pathLength > 0 && !path) return ERROR_INVALID_PARAMETER; + if (wcscmp(packageFullName, package_full_name) != 0) { + *pathLength = 0; + return 0; + } + if (*pathLength < platform_shim.app_package_path.size() + 1) { + *pathLength = static_cast(platform_shim.app_package_path.size() + 1); + return ERROR_INSUFFICIENT_BUFFER; + } + for (size_t i = 0; i < platform_shim.app_package_path.length(); i++) { + if (i >= *pathLength) { + break; + } + path[i] = platform_shim.app_package_path.c_str()[i]; + } + return 0; +} + +using PFN_OutputDebugStringA = void(__stdcall *)(LPCSTR lpOutputString); +static PFN_OutputDebugStringA fp_OutputDebugStringA = OutputDebugStringA; + +void __stdcall intercept_OutputDebugStringA(LPCSTR lpOutputString) { + if (lpOutputString != nullptr) { + platform_shim.fputs_stderr_log += lpOutputString; + } +} + +// Initialization +void WINAPI DetourFunctions() { + if (!gdi32_dll) { + gdi32_dll = LibraryWrapper("gdi32.dll"); + fpEnumAdapters2 = gdi32_dll.get_symbol("D3DKMTEnumAdapters2"); + if (fpEnumAdapters2 == nullptr) { + std::cerr << "Failed to load D3DKMTEnumAdapters2\n"; + return; + } + fpQueryAdapterInfo = gdi32_dll.get_symbol("D3DKMTQueryAdapterInfo"); + if (fpQueryAdapterInfo == nullptr) { + std::cerr << "Failed to load D3DKMTQueryAdapterInfo\n"; + return; + } + } + if (!dxgi_module) { + TCHAR systemPath[MAX_PATH] = ""; + GetSystemDirectory(systemPath, MAX_PATH); + StringCchCat(systemPath, MAX_PATH, TEXT("\\dxgi.dll")); + dxgi_module = LibraryWrapper(systemPath); + RealCreateDXGIFactory1 = dxgi_module.get_symbol("CreateDXGIFactory1"); + if (RealCreateDXGIFactory1 == nullptr) { + std::cerr << "Failed to load CreateDXGIFactory1\n"; + } + } + + DetourRestoreAfterWith(); + + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID &)fpGetSidSubAuthority, (PVOID)ShimGetSidSubAuthority); + DetourAttach(&(PVOID &)fpEnumAdapters2, (PVOID)ShimEnumAdapters2); + DetourAttach(&(PVOID &)fpQueryAdapterInfo, (PVOID)ShimQueryAdapterInfo); + DetourAttach(&(PVOID &)REAL_CM_Get_Device_ID_List_SizeW, (PVOID)SHIM_CM_Get_Device_ID_List_SizeW); + DetourAttach(&(PVOID &)REAL_CM_Get_Device_ID_ListW, (PVOID)SHIM_CM_Get_Device_ID_ListW); + DetourAttach(&(PVOID &)REAL_CM_Get_Device_ID_ListW, (PVOID)SHIM_CM_Get_Device_ID_ListW); + DetourAttach(&(PVOID &)REAL_CM_Locate_DevNodeW, (PVOID)SHIM_CM_Locate_DevNodeW); + DetourAttach(&(PVOID &)REAL_CM_Get_DevNode_Status, (PVOID)SHIM_CM_Get_DevNode_Status); + DetourAttach(&(PVOID &)REAL_CM_Get_Device_IDW, (PVOID)SHIM_CM_Get_Device_IDW); + DetourAttach(&(PVOID &)REAL_CM_Get_Child, (PVOID)SHIM_CM_Get_Child); + DetourAttach(&(PVOID &)REAL_CM_Get_DevNode_Registry_PropertyW, (PVOID)SHIM_CM_Get_DevNode_Registry_PropertyW); + DetourAttach(&(PVOID &)REAL_CM_Get_Sibling, (PVOID)SHIM_CM_Get_Sibling); + DetourAttach(&(PVOID &)RealCreateDXGIFactory1, (PVOID)ShimCreateDXGIFactory1); + DetourAttach(&(PVOID &)fpRegOpenKeyExA, (PVOID)ShimRegOpenKeyExA); + DetourAttach(&(PVOID &)fpRegQueryValueExA, (PVOID)ShimRegQueryValueExA); + DetourAttach(&(PVOID &)fpRegEnumValueA, (PVOID)ShimRegEnumValueA); + DetourAttach(&(PVOID &)fpRegCloseKey, (PVOID)ShimRegCloseKey); + DetourAttach(&(PVOID &)fpGetPackagesByPackageFamily, (PVOID)ShimGetPackagesByPackageFamily); + DetourAttach(&(PVOID &)fpGetPackagePathByFullName, (PVOID)ShimGetPackagePathByFullName); + DetourAttach(&(PVOID &)fp_OutputDebugStringA, (PVOID)intercept_OutputDebugStringA); + LONG error = DetourTransactionCommit(); + + if (error != NO_ERROR) { + std::cerr << "simple" << DETOURS_STRINGIFY(DETOURS_BITS) << ".dll:" + << " Error detouring function(): " << error << "\n"; + } +} + +void DetachFunctions() { + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourDetach(&(PVOID &)fpGetSidSubAuthority, (PVOID)ShimGetSidSubAuthority); + DetourDetach(&(PVOID &)fpEnumAdapters2, (PVOID)ShimEnumAdapters2); + DetourDetach(&(PVOID &)fpQueryAdapterInfo, (PVOID)ShimQueryAdapterInfo); + DetourDetach(&(PVOID &)REAL_CM_Get_Device_ID_List_SizeW, (PVOID)SHIM_CM_Get_Device_ID_List_SizeW); + DetourDetach(&(PVOID &)REAL_CM_Get_Device_ID_ListW, (PVOID)SHIM_CM_Get_Device_ID_ListW); + DetourDetach(&(PVOID &)REAL_CM_Locate_DevNodeW, (PVOID)SHIM_CM_Locate_DevNodeW); + DetourDetach(&(PVOID &)REAL_CM_Get_DevNode_Status, (PVOID)SHIM_CM_Get_DevNode_Status); + DetourDetach(&(PVOID &)REAL_CM_Get_Device_IDW, (PVOID)SHIM_CM_Get_Device_IDW); + DetourDetach(&(PVOID &)REAL_CM_Get_Child, (PVOID)SHIM_CM_Get_Child); + DetourDetach(&(PVOID &)REAL_CM_Get_DevNode_Registry_PropertyW, (PVOID)SHIM_CM_Get_DevNode_Registry_PropertyW); + DetourDetach(&(PVOID &)REAL_CM_Get_Sibling, (PVOID)SHIM_CM_Get_Sibling); + DetourDetach(&(PVOID &)RealCreateDXGIFactory1, (PVOID)ShimCreateDXGIFactory1); + DetourDetach(&(PVOID &)fpRegOpenKeyExA, (PVOID)ShimRegOpenKeyExA); + DetourDetach(&(PVOID &)fpRegQueryValueExA, (PVOID)ShimRegQueryValueExA); + DetourDetach(&(PVOID &)fpRegEnumValueA, (PVOID)ShimRegEnumValueA); + DetourDetach(&(PVOID &)fpRegCloseKey, (PVOID)ShimRegCloseKey); + DetourDetach(&(PVOID &)fpGetPackagesByPackageFamily, (PVOID)ShimGetPackagesByPackageFamily); + DetourDetach(&(PVOID &)fpGetPackagePathByFullName, (PVOID)ShimGetPackagePathByFullName); + DetourDetach(&(PVOID &)fp_OutputDebugStringA, (PVOID)intercept_OutputDebugStringA); + DetourTransactionCommit(); +} + +BOOL WINAPI DllMain([[maybe_unused]] HINSTANCE hinst, DWORD dwReason, [[maybe_unused]] LPVOID reserved) { + if (DetourIsHelperProcess()) { + return TRUE; + } + + if (dwReason == DLL_PROCESS_ATTACH) { + DetourFunctions(); + } else if (dwReason == DLL_PROCESS_DETACH) { + DetachFunctions(); + } + return TRUE; +} +FRAMEWORK_EXPORT PlatformShim *get_platform_shim(GetFoldersFunc get_folders_by_name_function) { + platform_shim = PlatformShim(get_folders_by_name_function); + return &platform_shim; +} +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.cpp new file mode 100644 index 0000000000..d3295d90f2 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.cpp @@ -0,0 +1,1091 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +#include + +std::filesystem::path get_loader_path() { + auto loader_path = std::filesystem::path(FRAMEWORK_VULKAN_LIBRARY_PATH); + auto env_var_res = get_env_var("VK_LOADER_TEST_LOADER_PATH", false); + if (!env_var_res.empty()) { + loader_path = std::filesystem::path(env_var_res); + } + return loader_path; +} + +void init_vulkan_functions(VulkanFunctions& funcs) { +#if defined(APPLE_STATIC_LOADER) +#define GPA(name) name +#else +#define GPA(name) funcs.loader.get_symbol(#name) +#endif + + // clang-format off + funcs.vkGetInstanceProcAddr = GPA(vkGetInstanceProcAddr); + funcs.vkEnumerateInstanceExtensionProperties = GPA(vkEnumerateInstanceExtensionProperties); + funcs.vkEnumerateInstanceLayerProperties = GPA(vkEnumerateInstanceLayerProperties); + funcs.vkEnumerateInstanceVersion = GPA(vkEnumerateInstanceVersion); + funcs.vkCreateInstance = GPA(vkCreateInstance); + funcs.vkDestroyInstance = GPA(vkDestroyInstance); + funcs.vkEnumeratePhysicalDevices = GPA(vkEnumeratePhysicalDevices); + funcs.vkEnumeratePhysicalDeviceGroups = GPA(vkEnumeratePhysicalDeviceGroups); + funcs.vkGetPhysicalDeviceFeatures = GPA(vkGetPhysicalDeviceFeatures); + funcs.vkGetPhysicalDeviceFeatures2 = GPA(vkGetPhysicalDeviceFeatures2); + funcs.vkGetPhysicalDeviceFormatProperties = GPA(vkGetPhysicalDeviceFormatProperties); + funcs.vkGetPhysicalDeviceFormatProperties2 = GPA(vkGetPhysicalDeviceFormatProperties2); + funcs.vkGetPhysicalDeviceImageFormatProperties = GPA(vkGetPhysicalDeviceImageFormatProperties); + funcs.vkGetPhysicalDeviceImageFormatProperties2 = GPA(vkGetPhysicalDeviceImageFormatProperties2); + funcs.vkGetPhysicalDeviceSparseImageFormatProperties = GPA(vkGetPhysicalDeviceSparseImageFormatProperties); + funcs.vkGetPhysicalDeviceSparseImageFormatProperties2 = GPA(vkGetPhysicalDeviceSparseImageFormatProperties2); + funcs.vkGetPhysicalDeviceProperties = GPA(vkGetPhysicalDeviceProperties); + funcs.vkGetPhysicalDeviceProperties2 = GPA(vkGetPhysicalDeviceProperties2); + funcs.vkGetPhysicalDeviceQueueFamilyProperties = GPA(vkGetPhysicalDeviceQueueFamilyProperties); + funcs.vkGetPhysicalDeviceQueueFamilyProperties2 = GPA(vkGetPhysicalDeviceQueueFamilyProperties2); + funcs.vkGetPhysicalDeviceMemoryProperties = GPA(vkGetPhysicalDeviceMemoryProperties); + funcs.vkGetPhysicalDeviceMemoryProperties2 = GPA(vkGetPhysicalDeviceMemoryProperties2); + funcs.vkGetPhysicalDeviceSurfaceSupportKHR = GPA(vkGetPhysicalDeviceSurfaceSupportKHR); + funcs.vkGetPhysicalDeviceSurfaceFormatsKHR = GPA(vkGetPhysicalDeviceSurfaceFormatsKHR); + funcs.vkGetPhysicalDeviceSurfacePresentModesKHR = GPA(vkGetPhysicalDeviceSurfacePresentModesKHR); + funcs.vkGetPhysicalDeviceSurfaceCapabilitiesKHR = GPA(vkGetPhysicalDeviceSurfaceCapabilitiesKHR); + funcs.vkEnumerateDeviceExtensionProperties = GPA(vkEnumerateDeviceExtensionProperties); + funcs.vkEnumerateDeviceLayerProperties = GPA(vkEnumerateDeviceLayerProperties); + funcs.vkGetPhysicalDeviceExternalBufferProperties = GPA(vkGetPhysicalDeviceExternalBufferProperties); + funcs.vkGetPhysicalDeviceExternalFenceProperties = GPA(vkGetPhysicalDeviceExternalFenceProperties); + funcs.vkGetPhysicalDeviceExternalSemaphoreProperties = GPA(vkGetPhysicalDeviceExternalSemaphoreProperties); + + funcs.vkDestroySurfaceKHR = GPA(vkDestroySurfaceKHR); + funcs.vkGetDeviceProcAddr = GPA(vkGetDeviceProcAddr); + funcs.vkCreateDevice = GPA(vkCreateDevice); + + funcs.vkCreateHeadlessSurfaceEXT = GPA(vkCreateHeadlessSurfaceEXT); + funcs.vkCreateDisplayPlaneSurfaceKHR = GPA(vkCreateDisplayPlaneSurfaceKHR); + funcs.vkGetPhysicalDeviceDisplayPropertiesKHR = GPA(vkGetPhysicalDeviceDisplayPropertiesKHR); + funcs.vkGetPhysicalDeviceDisplayPlanePropertiesKHR = GPA(vkGetPhysicalDeviceDisplayPlanePropertiesKHR); + funcs.vkGetDisplayPlaneSupportedDisplaysKHR = GPA(vkGetDisplayPlaneSupportedDisplaysKHR); + funcs.vkGetDisplayModePropertiesKHR = GPA(vkGetDisplayModePropertiesKHR); + funcs.vkCreateDisplayModeKHR = GPA(vkCreateDisplayModeKHR); + funcs.vkGetDisplayPlaneCapabilitiesKHR = GPA(vkGetDisplayPlaneCapabilitiesKHR); + funcs.vkGetPhysicalDevicePresentRectanglesKHR = GPA(vkGetPhysicalDevicePresentRectanglesKHR); + funcs.vkGetPhysicalDeviceDisplayProperties2KHR = GPA(vkGetPhysicalDeviceDisplayProperties2KHR); + funcs.vkGetPhysicalDeviceDisplayPlaneProperties2KHR = GPA(vkGetPhysicalDeviceDisplayPlaneProperties2KHR); + funcs.vkGetDisplayModeProperties2KHR = GPA(vkGetDisplayModeProperties2KHR); + funcs.vkGetDisplayPlaneCapabilities2KHR = GPA(vkGetDisplayPlaneCapabilities2KHR); + funcs.vkGetPhysicalDeviceSurfaceCapabilities2KHR = GPA(vkGetPhysicalDeviceSurfaceCapabilities2KHR); + funcs.vkGetPhysicalDeviceSurfaceFormats2KHR = GPA(vkGetPhysicalDeviceSurfaceFormats2KHR); + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + funcs.vkCreateAndroidSurfaceKHR = GPA(vkCreateAndroidSurfaceKHR); +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + funcs.vkCreateDirectFBSurfaceEXT = GPA(vkCreateDirectFBSurfaceEXT); + funcs.vkGetPhysicalDeviceDirectFBPresentationSupportEXT = GPA(vkGetPhysicalDeviceDirectFBPresentationSupportEXT); +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_FUCHSIA) + funcs.vkCreateImagePipeSurfaceFUCHSIA = GPA(vkCreateImagePipeSurfaceFUCHSIA); +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_GGP) + funcs.vkCreateStreamDescriptorSurfaceGGP = GPA(vkCreateStreamDescriptorSurfaceGGP); +#endif // VK_USE_PLATFORM_GGP +#if defined(VK_USE_PLATFORM_IOS_MVK) + funcs.vkCreateIOSSurfaceMVK = GPA(vkCreateIOSSurfaceMVK); +#endif // VK_USE_PLATFORM_IOS_MVK +#if defined(VK_USE_PLATFORM_MACOS_MVK) + funcs.vkCreateMacOSSurfaceMVK = GPA(vkCreateMacOSSurfaceMVK); +#endif // VK_USE_PLATFORM_MACOS_MVK +#if defined(VK_USE_PLATFORM_METAL_EXT) + funcs.vkCreateMetalSurfaceEXT = GPA(vkCreateMetalSurfaceEXT); +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + funcs.vkCreateScreenSurfaceQNX = GPA(vkCreateScreenSurfaceQNX); + funcs.vkGetPhysicalDeviceScreenPresentationSupportQNX = GPA(vkGetPhysicalDeviceScreenPresentationSupportQNX); +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + funcs.vkCreateWaylandSurfaceKHR = GPA(vkCreateWaylandSurfaceKHR); + funcs.vkGetPhysicalDeviceWaylandPresentationSupportKHR = GPA(vkGetPhysicalDeviceWaylandPresentationSupportKHR); +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + funcs.vkCreateXcbSurfaceKHR = GPA(vkCreateXcbSurfaceKHR); + funcs.vkGetPhysicalDeviceXcbPresentationSupportKHR = GPA(vkGetPhysicalDeviceXcbPresentationSupportKHR); +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + funcs.vkCreateXlibSurfaceKHR = GPA(vkCreateXlibSurfaceKHR); + funcs.vkGetPhysicalDeviceXlibPresentationSupportKHR = GPA(vkGetPhysicalDeviceXlibPresentationSupportKHR); +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + funcs.vkCreateWin32SurfaceKHR = GPA(vkCreateWin32SurfaceKHR); + funcs.vkGetPhysicalDeviceWin32PresentationSupportKHR = GPA(vkGetPhysicalDeviceWin32PresentationSupportKHR); +#endif // VK_USE_PLATFORM_WIN32_KHR + funcs.vkDestroyDevice = GPA(vkDestroyDevice); + funcs.vkGetDeviceQueue = GPA(vkGetDeviceQueue); +#undef GPA + // clang-format on +} + +#if defined(APPLE_STATIC_LOADER) +VulkanFunctions::VulkanFunctions() { +#else +VulkanFunctions::VulkanFunctions() : loader(get_loader_path()) { +#endif + init_vulkan_functions(*this); +} + +void VulkanFunctions::load_instance_functions(VkInstance instance) { + vkCreateDebugReportCallbackEXT = FromVoidStarFunc(vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT")); + vkDestroyDebugReportCallbackEXT = FromVoidStarFunc(vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT")); + vkCreateDebugUtilsMessengerEXT = FromVoidStarFunc(vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT")); + vkDestroyDebugUtilsMessengerEXT = FromVoidStarFunc(vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT")); +} + +DeviceFunctions::DeviceFunctions(const VulkanFunctions& vulkan_functions, VkDevice device) { + vkGetDeviceProcAddr = vulkan_functions.vkGetDeviceProcAddr; + vkDestroyDevice = load(device, "vkDestroyDevice"); + vkGetDeviceQueue = load(device, "vkGetDeviceQueue"); + vkCreateCommandPool = load(device, "vkCreateCommandPool"); + vkAllocateCommandBuffers = load(device, "vkAllocateCommandBuffers"); + vkDestroyCommandPool = load(device, "vkDestroyCommandPool"); + vkCreateSwapchainKHR = load(device, "vkCreateSwapchainKHR"); + vkGetSwapchainImagesKHR = load(device, "vkGetSwapchainImagesKHR"); + vkDestroySwapchainKHR = load(device, "vkDestroySwapchainKHR"); +} + +InstWrapper::InstWrapper(VulkanFunctions& functions, VkAllocationCallbacks* callbacks) noexcept + : functions(&functions), callbacks(callbacks) {} +InstWrapper::InstWrapper(VulkanFunctions& functions, VkInstance inst, VkAllocationCallbacks* callbacks) noexcept + : functions(&functions), inst(inst), callbacks(callbacks) {} +InstWrapper::~InstWrapper() noexcept { + if (inst != VK_NULL_HANDLE) functions->vkDestroyInstance(inst, callbacks); +} + +InstWrapper::InstWrapper(InstWrapper&& other) noexcept { + functions = other.functions; + inst = other.inst; + callbacks = other.callbacks; + create_info = other.create_info; + other.inst = VK_NULL_HANDLE; +} +InstWrapper& InstWrapper::operator=(InstWrapper&& other) noexcept { + functions->vkDestroyInstance(inst, callbacks); + functions = other.functions; + inst = other.inst; + callbacks = other.callbacks; + create_info = other.create_info; + other.inst = VK_NULL_HANDLE; + return *this; +} + +void InstWrapper::CheckCreate(VkResult result_to_check) { + handle_assert_null(inst); + ASSERT_EQ(result_to_check, functions->vkCreateInstance(create_info.get(), callbacks, &inst)); + functions->load_instance_functions(inst); +} + +void InstWrapper::CheckCreateWithInfo(InstanceCreateInfo& create_info, VkResult result_to_check) { + handle_assert_null(inst); + ASSERT_EQ(result_to_check, functions->vkCreateInstance(create_info.get(), callbacks, &inst)); + functions->load_instance_functions(inst); +} + +std::vector InstWrapper::GetPhysDevs(uint32_t phys_dev_count, VkResult result_to_check) { + uint32_t physical_count = phys_dev_count; + std::vector physical_devices; + physical_devices.resize(phys_dev_count); + VkResult res = functions->vkEnumeratePhysicalDevices(inst, &physical_count, physical_devices.data()); + EXPECT_EQ(result_to_check, res); + return physical_devices; +} + +std::vector InstWrapper::GetPhysDevs(VkResult result_to_check) { + uint32_t physical_count = 0; + VkResult res = functions->vkEnumeratePhysicalDevices(inst, &physical_count, nullptr); + EXPECT_EQ(result_to_check, res); + std::vector physical_devices; + physical_devices.resize(physical_count); + res = functions->vkEnumeratePhysicalDevices(inst, &physical_count, physical_devices.data()); + EXPECT_EQ(result_to_check, res); + return physical_devices; +} + +VkPhysicalDevice InstWrapper::GetPhysDev(VkResult result_to_check) { + uint32_t physical_count = 1; + VkPhysicalDevice physical_device = VK_NULL_HANDLE; + VkResult res = this->functions->vkEnumeratePhysicalDevices(inst, &physical_count, &physical_device); + EXPECT_EQ(result_to_check, res); + return physical_device; +} + +std::vector InstWrapper::GetActiveLayers(VkPhysicalDevice phys_dev, uint32_t expected_count) { + uint32_t count = 0; + VkResult res = functions->vkEnumerateDeviceLayerProperties(phys_dev, &count, nullptr); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + std::vector layer_props{count}; + res = functions->vkEnumerateDeviceLayerProperties(phys_dev, &count, layer_props.data()); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + return layer_props; +} + +std::vector InstWrapper::EnumerateDeviceExtensions(VkPhysicalDevice physical_device, + uint32_t expected_count) { + uint32_t count = 0; + VkResult res = functions->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &count, nullptr); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + std::vector extensions{count}; + res = functions->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &count, extensions.data()); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + return extensions; +} + +std::vector InstWrapper::EnumerateLayerDeviceExtensions(VkPhysicalDevice physical_device, + const char* layer_name, uint32_t expected_count) { + uint32_t count = 0; + VkResult res = functions->vkEnumerateDeviceExtensionProperties(physical_device, layer_name, &count, nullptr); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + std::vector extensions{count}; + res = functions->vkEnumerateDeviceExtensionProperties(physical_device, layer_name, &count, extensions.data()); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + return extensions; +} + +DeviceWrapper::DeviceWrapper(InstWrapper& inst_wrapper, VkAllocationCallbacks* callbacks) noexcept + : functions(inst_wrapper.functions), callbacks(callbacks){}; +DeviceWrapper::DeviceWrapper(VulkanFunctions& functions, VkDevice device, VkAllocationCallbacks* callbacks) noexcept + : functions(&functions), dev(device), callbacks(callbacks){}; +DeviceWrapper::~DeviceWrapper() noexcept { functions->vkDestroyDevice(dev, callbacks); } + +DeviceWrapper::DeviceWrapper(DeviceWrapper&& other) noexcept { + functions = other.functions; + dev = other.dev; + callbacks = other.callbacks; + create_info = other.create_info; + other.dev = VK_NULL_HANDLE; +} +DeviceWrapper& DeviceWrapper::operator=(DeviceWrapper&& other) noexcept { + functions->vkDestroyDevice(dev, callbacks); + functions = other.functions; + dev = other.dev; + callbacks = other.callbacks; + create_info = other.create_info; + other.dev = VK_NULL_HANDLE; + return *this; +} + +void DeviceWrapper::CheckCreate(VkPhysicalDevice phys_dev, VkResult result_to_check) { + handle_assert_null(dev); + ASSERT_EQ(result_to_check, functions->vkCreateDevice(phys_dev, create_info.get(), callbacks, &dev)); +} + +VkResult CreateDebugUtilsMessenger(DebugUtilsWrapper& debug_utils) { + handle_assert_null(debug_utils.messenger); + return debug_utils.local_vkCreateDebugUtilsMessengerEXT(debug_utils.inst, debug_utils.get(), debug_utils.callbacks, + &debug_utils.messenger); +} + +void FillDebugUtilsCreateDetails(InstanceCreateInfo& create_info, DebugUtilsLogger& logger) { + create_info.add_extension("VK_EXT_debug_utils"); + create_info.instance_info.pNext = logger.get(); +} +void FillDebugUtilsCreateDetails(InstanceCreateInfo& create_info, DebugUtilsWrapper& wrapper) { + create_info.add_extension("VK_EXT_debug_utils"); + create_info.instance_info.pNext = wrapper.get(); +} + +// Look through the event log. If you find a line containing the prefix we're interested in, look for the end of +// line character, and then see if the postfix occurs in it as well. +bool DebugUtilsLogger::find_prefix_then_postfix(const char* prefix, const char* postfix) const { + size_t new_start = 0; + size_t postfix_index = 0; + size_t next_eol = 0; + while ((new_start = returned_output.find(prefix, new_start)) != std::string::npos) { + next_eol = returned_output.find("\n", new_start); + if ((postfix_index = returned_output.find(postfix, new_start)) != std::string::npos) { + if (postfix_index < next_eol) { + return true; + } + } + new_start = next_eol + 1; + } + return false; +} + +bool FindPrefixPostfixStringOnLine(DebugUtilsLogger const& env_log, const char* prefix, const char* postfix) { + return env_log.find_prefix_then_postfix(prefix, postfix); +} + +namespace fs { +FolderManager::FolderManager(std::filesystem::path root_path, std::string name) noexcept : folder(root_path / name) { + clear(); + // Don't actually create the folder yet, as we will do it on demand +} +FolderManager::~FolderManager() noexcept { clear(); } +FolderManager::FolderManager(FolderManager&& other) noexcept : actually_created(other.actually_created), folder(other.folder) { + other.folder.clear(); +} +FolderManager& FolderManager::operator=(FolderManager&& other) noexcept { + folder = other.folder; + actually_created = other.actually_created; + other.folder.clear(); + return *this; +} + +void FolderManager::check_if_first_use() { + if (!actually_created) { + if (!::testing::internal::InDeathTestChild()) { + std::error_code err; + if (!std::filesystem::create_directories(folder, err)) { + std::cerr << "Failed to create folder " << folder << " because " << err.message() << "\n"; + } + } + actually_created = true; + } +} + +std::filesystem::path FolderManager::write_manifest(std::filesystem::path const& name, std::string const& contents) { + check_if_first_use(); + std::filesystem::path out_path = folder / name; + if (!::testing::internal::InDeathTestChild()) { + auto file = std::ofstream(out_path, std::ios_base::trunc | std::ios_base::out); + if (!file) { + std::cerr << "Failed to create manifest " << name << " at " << out_path << "\n"; + return out_path; + } + file << contents << std::endl; + } + insert_file_to_tracking(name); + return out_path; +} + +// close file handle, delete file, remove `name` from managed file list. +void FolderManager::remove(std::filesystem::path const& name) { + check_if_first_use(); + std::filesystem::path out_path = folder / name; + if (!::testing::internal::InDeathTestChild()) { + std::error_code err; + if (!std::filesystem::remove(out_path, err)) { + std::cerr << "Failed to remove file " << name << " at " << out_path << " because " << err.message() << "\n"; + } + } + + auto found = std::find(added_files.begin(), added_files.end(), name); + if (found != added_files.end()) { + added_files.erase(found); + } else { + std::cout << "File " << name << " not in tracked files of folder " << folder << ".\n"; + } +} + +// copy file into this folder +std::filesystem::path FolderManager::copy_file(std::filesystem::path const& file, std::filesystem::path const& new_name) { + check_if_first_use(); + insert_file_to_tracking(new_name); + + auto new_filepath = folder / new_name; + if (!::testing::internal::InDeathTestChild()) { + std::error_code err; + if (!std::filesystem::copy_file(file, new_filepath, err)) { + std::cerr << "Failed to copy file " << file << " to " << new_filepath << " because " << err.message() << "\n"; + } + } + return new_filepath; +} + +std::vector FolderManager::get_files() const { return added_files; } + +std::filesystem::path FolderManager::add_symlink(std::filesystem::path const& target, std::filesystem::path const& link_name) { + check_if_first_use(); + + if (!::testing::internal::InDeathTestChild()) { + std::error_code err; + std::filesystem::create_symlink(target, folder / link_name, err); + if (err.value() != 0) { + std::cerr << "Failed to create symlink with target" << target << " with name " << folder / link_name << " because " + << err.message() << "\n"; + } + } + insert_file_to_tracking(link_name); + return folder / link_name; +} +void FolderManager::insert_file_to_tracking(std::filesystem::path const& name) { + auto found = std::find(added_files.begin(), added_files.end(), name); + if (found != added_files.end()) { + std::cout << "Overwriting manifest " << name << ". Was this intended?\n"; + } else { + added_files.emplace_back(name); + } +} + +void FolderManager::clear() const noexcept { + if (!::testing::internal::InDeathTestChild()) { + std::error_code err; + std::filesystem::remove_all(folder, err); + if (err.value() != 0) { + std::cerr << "Failed to remove folder " << folder << " because " << err.message() << "\n"; + } + } +} + +} // namespace fs + +PlatformShimWrapper::PlatformShimWrapper(GetFoldersFunc get_folders_by_name_function, const char* log_filter) noexcept + : loader_logging{"VK_LOADER_DEBUG"} { +#if defined(WIN32) || defined(__APPLE__) + shim_library = LibraryWrapper(SHIM_LIBRARY_NAME); + PFN_get_platform_shim get_platform_shim_func = shim_library.get_symbol(GET_PLATFORM_SHIM_STR); + assert(get_platform_shim_func != NULL && "Must be able to get \"platform_shim\""); + platform_shim = get_platform_shim_func(get_folders_by_name_function); +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) + platform_shim = get_platform_shim(get_folders_by_name_function); +#endif + platform_shim->reset(); + + if (log_filter) { + loader_logging.set_new_value(log_filter); + } +} + +PlatformShimWrapper::~PlatformShimWrapper() noexcept { platform_shim->reset(); } + +TestICDHandle::TestICDHandle() noexcept {} +TestICDHandle::TestICDHandle(std::filesystem::path const& icd_path) noexcept : icd_library(icd_path) { + proc_addr_get_test_icd = icd_library.get_symbol(GET_TEST_ICD_FUNC_STR); + proc_addr_reset_icd = icd_library.get_symbol(RESET_ICD_FUNC_STR); +} +TestICD& TestICDHandle::get_test_icd() noexcept { + assert(proc_addr_get_test_icd != NULL && "symbol must be loaded before use"); + return *proc_addr_get_test_icd(); +} +TestICD& TestICDHandle::reset_icd() noexcept { + assert(proc_addr_reset_icd != NULL && "symbol must be loaded before use"); + return *proc_addr_reset_icd(); +} +std::filesystem::path TestICDHandle::get_icd_full_path() noexcept { return icd_library.lib_path; } +std::filesystem::path TestICDHandle::get_icd_manifest_path() noexcept { return manifest_path; } +std::filesystem::path TestICDHandle::get_shimmed_manifest_path() noexcept { return shimmed_manifest_path; } + +TestLayerHandle::TestLayerHandle() noexcept {} +TestLayerHandle::TestLayerHandle(std::filesystem::path const& layer_path) noexcept : layer_library(layer_path) { + proc_addr_get_test_layer = layer_library.get_symbol(GET_TEST_LAYER_FUNC_STR); + proc_addr_reset_layer = layer_library.get_symbol(RESET_LAYER_FUNC_STR); +} +TestLayer& TestLayerHandle::get_test_layer() noexcept { + assert(proc_addr_get_test_layer != NULL && "symbol must be loaded before use"); + return *proc_addr_get_test_layer(); +} +TestLayer& TestLayerHandle::reset_layer() noexcept { + assert(proc_addr_reset_layer != NULL && "symbol must be loaded before use"); + return *proc_addr_reset_layer(); +} +std::filesystem::path TestLayerHandle::get_layer_full_path() noexcept { return layer_library.lib_path; } +std::filesystem::path TestLayerHandle::get_layer_manifest_path() noexcept { return manifest_path; } +std::filesystem::path TestLayerHandle::get_shimmed_manifest_path() noexcept { return shimmed_manifest_path; } + +FrameworkEnvironment::FrameworkEnvironment() noexcept : FrameworkEnvironment(FrameworkSettings{}) {} +FrameworkEnvironment::FrameworkEnvironment(FrameworkSettings const& settings) noexcept + : settings(settings), + test_folder(std::filesystem::path(FRAMEWORK_BUILD_DIRECTORY), + std::string(::testing::UnitTest::GetInstance()->GetInstance()->current_test_suite()->name()) + "_" + + ::testing::UnitTest::GetInstance()->current_test_info()->name()), + platform_shim( + [this](const char* folder_name) -> std::vector { + for (auto& folder : folders) { + if (folder.location() == folder_name) { + return folder.get_files(); + } + } + return {}; + }, + settings.log_filter) { + // Clean out test folder in case a previous run's files are still around + test_folder.clear(); + + // This order is important, it matches the enum ManifestLocation, used to index the folders vector + folders.emplace_back(test_folder.location(), std::string("null_dir")); + folders.emplace_back(test_folder.location(), std::string("icd_manifests")); + folders.emplace_back(test_folder.location(), std::string("icd_env_vars_manifests")); + folders.emplace_back(test_folder.location(), std::string("explicit_layer_manifests")); + folders.emplace_back(test_folder.location(), std::string("explicit_env_var_layer_folder")); + folders.emplace_back(test_folder.location(), std::string("explicit_add_env_var_layer_folder")); + folders.emplace_back(test_folder.location(), std::string("implicit_layer_manifests")); + folders.emplace_back(test_folder.location(), std::string("implicit_env_var_layer_manifests")); + folders.emplace_back(test_folder.location(), std::string("implicit_add_env_var_layer_manifests")); + folders.emplace_back(test_folder.location(), std::string("override_layer_manifests")); + folders.emplace_back(test_folder.location(), std::string("app_package_manifests")); + folders.emplace_back(test_folder.location(), std::string("macos_bundle")); + folders.emplace_back(test_folder.location(), std::string("unsecured_location")); + folders.emplace_back(test_folder.location(), std::string("settings_location")); + + platform_shim->redirect_all_paths(get_folder(ManifestLocation::null).location()); + if (settings.enable_default_search_paths) { + platform_shim->set_fake_path(ManifestCategory::icd, get_folder(ManifestLocation::driver).location()); + platform_shim->set_fake_path(ManifestCategory::explicit_layer, get_folder(ManifestLocation::explicit_layer).location()); + platform_shim->set_fake_path(ManifestCategory::implicit_layer, get_folder(ManifestLocation::implicit_layer).location()); +#if COMMON_UNIX_PLATFORMS + auto home = get_env_var("HOME"); + auto unsecured_location = get_folder(ManifestLocation::unsecured_location).location(); + platform_shim->redirect_path(home + "/.local/share/vulkan/icd.d", unsecured_location); + platform_shim->redirect_path(home + "/.local/share/vulkan/implicit_layer.d", unsecured_location); + platform_shim->redirect_path(home + "/.local/share/vulkan/explicit_layer.d", unsecured_location); +#endif + } +#if COMMON_UNIX_PLATFORMS + if (settings.secure_loader_settings) { + platform_shim->redirect_path("/etc/vulkan/loader_settings.d", get_folder(ManifestLocation::settings_location).location()); + } else { + platform_shim->redirect_path(get_env_var("HOME") + "/.local/share/vulkan/loader_settings.d", + get_folder(ManifestLocation::settings_location).location()); + } +#endif + +#if defined(__APPLE__) + // Necessary since bundles look in sub folders for manifests, not the test framework folder itself + auto bundle_location = get_folder(ManifestLocation::macos_bundle).location(); + platform_shim->redirect_path(bundle_location / "vulkan/icd.d", bundle_location); + platform_shim->redirect_path(bundle_location / "vulkan/explicit_layer.d", bundle_location); + platform_shim->redirect_path(bundle_location / "vulkan/implicit_layer.d", bundle_location); +#endif + // only set the settings file if there are elements in the app_specific_settings vector + if (!settings.loader_settings.app_specific_settings.empty()) { + update_loader_settings(settings.loader_settings); + } +} + +FrameworkEnvironment::~FrameworkEnvironment() { + // This is necessary to prevent the folder manager from using dead memory during destruction. + // What happens is that each folder manager tries to cleanup itself. Except, folders that were never called did not have + // their DirEntry array's filled out. So when that folder calls delete_folder, which calls readdir, the shim tries to order + // the files. Except, the list of files is in a object that is currently being destroyed. + platform_shim->is_during_destruction = true; +} + +TestICD& FrameworkEnvironment::add_icd(TestICDDetails icd_details) noexcept { + size_t cur_icd_index = icds.size(); + fs::FolderManager* fs_ptr = &get_folder(ManifestLocation::driver); + switch (icd_details.discovery_type) { + case (ManifestDiscoveryType::env_var): + case (ManifestDiscoveryType::add_env_var): + fs_ptr = &get_folder(ManifestLocation::driver_env_var); + break; + case (ManifestDiscoveryType::windows_app_package): + fs_ptr = &get_folder(ManifestLocation::windows_app_package); + break; + case (ManifestDiscoveryType::override_folder): + fs_ptr = &get_folder(ManifestLocation::override_layer); + break; + case (ManifestDiscoveryType::macos_bundle): + fs_ptr = &get_folder(ManifestLocation::macos_bundle); + break; + case (ManifestDiscoveryType::unsecured_generic): + fs_ptr = &get_folder(ManifestLocation::unsecured_location); + break; + case (ManifestDiscoveryType::null_dir): + case (ManifestDiscoveryType::none): + fs_ptr = &get_folder(ManifestLocation::null); + break; + case (ManifestDiscoveryType::generic): + fs_ptr = &get_folder(ManifestLocation::driver); + break; + } + auto& folder = *fs_ptr; + + if (!icd_details.is_fake) { + std::filesystem::path new_lib_name = icd_details.icd_manifest.lib_path.stem(); + new_lib_name += "_"; + new_lib_name += std::to_string(cur_icd_index); + new_lib_name += icd_details.icd_manifest.lib_path.extension(); + auto new_driver_location = folder.copy_file(icd_details.icd_manifest.lib_path, new_lib_name); + +#if COMMON_UNIX_PLATFORMS + if (icd_details.library_path_type == LibraryPathType::default_search_paths) { + platform_shim->redirect_dlopen_name(new_lib_name, new_driver_location); + } else if (icd_details.library_path_type == LibraryPathType::relative) { + platform_shim->redirect_dlopen_name(std::filesystem::path(SYSCONFDIR) / "vulkan" / "icd.d" / "." / new_lib_name, + new_driver_location); + } +#endif +#if defined(WIN32) + if (icd_details.library_path_type == LibraryPathType::default_search_paths) { + SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_USER_DIRS); + AddDllDirectory(new_driver_location.parent_path().native().c_str()); + } +#endif + icds.push_back(TestICDHandle(new_driver_location)); + icds.back().reset_icd(); + if (icd_details.library_path_type == LibraryPathType::relative) { + icd_details.icd_manifest.lib_path = std::filesystem::path(".") / new_lib_name; + } else if (icd_details.library_path_type == LibraryPathType::default_search_paths) { + icd_details.icd_manifest.lib_path = new_lib_name; + } else { + icd_details.icd_manifest.lib_path = new_driver_location; + } + } + if (icd_details.discovery_type != ManifestDiscoveryType::none) { + std::filesystem::path new_manifest_path = icd_details.json_name.stem(); + if (!icd_details.disable_icd_inc) { + new_manifest_path += "_"; + new_manifest_path += std::to_string(cur_icd_index); + } + new_manifest_path += ".json"; + icds.back().manifest_path = folder.write_manifest(new_manifest_path, icd_details.icd_manifest.get_manifest_str()); + icds.back().shimmed_manifest_path = icds.back().manifest_path; + switch (icd_details.discovery_type) { + case (ManifestDiscoveryType::generic): + platform_shim->add_manifest(ManifestCategory::icd, icds.back().manifest_path); +#if COMMON_UNIX_PLATFORMS + icds.back().shimmed_manifest_path = + platform_shim->query_default_redirect_path(ManifestCategory::icd) / new_manifest_path; +#endif + break; + case (ManifestDiscoveryType::env_var): + if (icd_details.is_dir) { + env_var_vk_icd_filenames.add_to_list(folder.location()); + } else { + env_var_vk_icd_filenames.add_to_list(folder.location() / new_manifest_path); + } + platform_shim->add_known_path(folder.location()); + break; + case (ManifestDiscoveryType::add_env_var): + if (icd_details.is_dir) { + add_env_var_vk_icd_filenames.add_to_list(folder.location()); + } else { + add_env_var_vk_icd_filenames.add_to_list(folder.location() / new_manifest_path); + } + platform_shim->add_known_path(folder.location()); + break; + case (ManifestDiscoveryType::override_folder): + case (ManifestDiscoveryType::macos_bundle): + platform_shim->add_manifest(ManifestCategory::icd, icds.back().manifest_path); + break; + case (ManifestDiscoveryType::unsecured_generic): + platform_shim->add_unsecured_manifest(ManifestCategory::icd, icds.back().manifest_path); + break; + case (ManifestDiscoveryType::null_dir): + case (ManifestDiscoveryType::none): + break; + case (ManifestDiscoveryType::windows_app_package): + platform_shim->set_app_package_path(folder.location()); + break; + } + } + return icds.back().get_test_icd(); +} + +void FrameworkEnvironment::add_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept { + add_layer_impl(TestLayerDetails{layer_manifest, json_name}, ManifestCategory::implicit_layer); +} +void FrameworkEnvironment::add_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept { + add_layer_impl(TestLayerDetails{layer_manifest, json_name}, ManifestCategory::explicit_layer); +} +void FrameworkEnvironment::add_fake_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept { + add_layer_impl(TestLayerDetails{layer_manifest, json_name}.set_is_fake(true), ManifestCategory::implicit_layer); +} +void FrameworkEnvironment::add_fake_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept { + add_layer_impl(TestLayerDetails{layer_manifest, json_name}.set_is_fake(true), ManifestCategory::explicit_layer); +} +void FrameworkEnvironment::add_implicit_layer(TestLayerDetails layer_details) noexcept { + add_layer_impl(layer_details, ManifestCategory::implicit_layer); +} +void FrameworkEnvironment::add_explicit_layer(TestLayerDetails layer_details) noexcept { + add_layer_impl(layer_details, ManifestCategory::explicit_layer); +} + +void FrameworkEnvironment::add_layer_impl(TestLayerDetails layer_details, ManifestCategory category) { + fs::FolderManager* fs_ptr = &get_folder(ManifestLocation::explicit_layer); + switch (layer_details.discovery_type) { + case (ManifestDiscoveryType::generic): + if (category == ManifestCategory::implicit_layer) fs_ptr = &get_folder(ManifestLocation::implicit_layer); + break; + case (ManifestDiscoveryType::env_var): + if (category == ManifestCategory::explicit_layer) { + fs_ptr = &get_folder(ManifestLocation::explicit_layer_env_var); + if (layer_details.is_dir) { + env_var_vk_layer_paths.add_to_list(fs_ptr->location()); + } else { + env_var_vk_layer_paths.add_to_list(fs_ptr->location() / layer_details.json_name); + } + } + if (category == ManifestCategory::implicit_layer) { + fs_ptr = &get_folder(ManifestLocation::implicit_layer_env_var); + if (layer_details.is_dir) { + env_var_vk_implicit_layer_paths.add_to_list(fs_ptr->location()); + } else { + env_var_vk_implicit_layer_paths.add_to_list(fs_ptr->location() / layer_details.json_name); + } + } + platform_shim->add_known_path(fs_ptr->location()); + break; + case (ManifestDiscoveryType::add_env_var): + if (category == ManifestCategory::explicit_layer) { + fs_ptr = &get_folder(ManifestLocation::explicit_layer_add_env_var); + if (layer_details.is_dir) { + add_env_var_vk_layer_paths.add_to_list(fs_ptr->location()); + } else { + add_env_var_vk_layer_paths.add_to_list(fs_ptr->location() / layer_details.json_name); + } + } + if (category == ManifestCategory::implicit_layer) { + fs_ptr = &get_folder(ManifestLocation::implicit_layer_add_env_var); + if (layer_details.is_dir) { + add_env_var_vk_implicit_layer_paths.add_to_list(fs_ptr->location()); + } else { + add_env_var_vk_implicit_layer_paths.add_to_list(fs_ptr->location() / layer_details.json_name); + } + } + platform_shim->add_known_path(fs_ptr->location()); + break; + case (ManifestDiscoveryType::override_folder): + fs_ptr = &get_folder(ManifestLocation::override_layer); + break; + case (ManifestDiscoveryType::macos_bundle): + fs_ptr = &(get_folder(ManifestLocation::macos_bundle)); + break; + case (ManifestDiscoveryType::unsecured_generic): + fs_ptr = &(get_folder(ManifestLocation::unsecured_location)); + break; + case (ManifestDiscoveryType::windows_app_package): + fs_ptr = &(get_folder(ManifestLocation::windows_app_package)); + break; + case (ManifestDiscoveryType::none): + case (ManifestDiscoveryType::null_dir): + fs_ptr = &(get_folder(ManifestLocation::null)); + break; + } + auto& folder = *fs_ptr; + size_t new_layers_start = layers.size(); + for (auto& layer : layer_details.layer_manifest.layers) { + if (!layer.lib_path.empty()) { + std::filesystem::path new_lib_path = layer.lib_path.stem(); + new_lib_path += "_"; + new_lib_path += std::to_string(layers.size()); + new_lib_path += layer.lib_path.extension(); + + auto new_layer_location = folder.copy_file(layer.lib_path, new_lib_path); + +#if COMMON_UNIX_PLATFORMS + if (layer_details.library_path_type == LibraryPathType::default_search_paths) { + platform_shim->redirect_dlopen_name(new_lib_path, new_layer_location); + } + if (layer_details.library_path_type == LibraryPathType::relative) { + platform_shim->redirect_dlopen_name( + std::filesystem::path(SYSCONFDIR) / "vulkan" / category_path_name(category) / "." / new_lib_path, + new_layer_location); + } +#endif +#if defined(WIN32) + if (layer_details.library_path_type == LibraryPathType::default_search_paths) { + SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_USER_DIRS); + AddDllDirectory(new_layer_location.parent_path().native().c_str()); + } +#endif + + // Don't load the layer binary if using any of the wrap objects layers, since it doesn't export the same interface + // functions + if (!layer_details.is_fake && + layer.lib_path.stem().string().find(std::filesystem::path(TEST_LAYER_WRAP_OBJECTS).stem().string()) == + std::string::npos) { + layers.push_back(TestLayerHandle(new_layer_location)); + layers.back().reset_layer(); + } + if (layer_details.library_path_type == LibraryPathType::relative) { + layer.lib_path = std::filesystem::path(".") / new_lib_path; + } else if (layer_details.library_path_type == LibraryPathType::default_search_paths) { + layer.lib_path = new_lib_path; + } else { + layer.lib_path = new_layer_location; + } + } + } + if (layer_details.discovery_type != ManifestDiscoveryType::none) { + // Write a manifest file to a folder as long as the discovery type isn't none + auto layer_manifest_loc = folder.write_manifest(layer_details.json_name, layer_details.layer_manifest.get_manifest_str()); + // only add the manifest to the registry if its a generic location (as if it was installed) - both system and user local + if (layer_details.discovery_type == ManifestDiscoveryType::generic) { + platform_shim->add_manifest(category, layer_manifest_loc); + } + if (layer_details.discovery_type == ManifestDiscoveryType::unsecured_generic) { + platform_shim->add_unsecured_manifest(category, layer_manifest_loc); + } + if (layer_details.discovery_type == ManifestDiscoveryType::windows_app_package) { + platform_shim->set_app_package_path(folder.location()); + } + for (size_t i = new_layers_start; i < layers.size(); i++) { + layers.at(i).manifest_path = layer_manifest_loc; + layers.at(i).shimmed_manifest_path = layer_manifest_loc; +#if COMMON_UNIX_PLATFORMS + if (layer_details.discovery_type == ManifestDiscoveryType::generic) { + layers.at(i).shimmed_manifest_path = platform_shim->query_default_redirect_path(category) / layer_details.json_name; + } +#endif + } + } +} + +std::string get_loader_settings_file_contents(const LoaderSettings& loader_settings) noexcept { + JsonWriter writer; + writer.StartObject(); + writer.AddKeyedString("file_format_version", loader_settings.file_format_version.get_version_str()); + bool one_setting_file = true; + if (loader_settings.app_specific_settings.size() > 1) { + writer.StartKeyedArray("settings_array"); + one_setting_file = false; + } + for (const auto& setting : loader_settings.app_specific_settings) { + if (one_setting_file) { + writer.StartKeyedObject("settings"); + } else { + writer.StartObject(); + } + if (!setting.app_keys.empty()) { + writer.StartKeyedArray("app_keys"); + for (const auto& app_key : setting.app_keys) { + writer.AddString(app_key); + } + writer.EndArray(); + } + if (!setting.layer_configurations.empty()) { + writer.StartKeyedArray("layers"); + for (const auto& config : setting.layer_configurations) { + writer.StartObject(); + writer.AddKeyedString("name", config.name); + writer.AddKeyedString("path", config.path.native()); + writer.AddKeyedString("control", config.control); + writer.AddKeyedBool("treat_as_implicit_manifest", config.treat_as_implicit_manifest); + writer.EndObject(); + } + writer.EndArray(); + } + if (!setting.stderr_log.empty()) { + writer.StartKeyedArray("stderr_log"); + for (const auto& filter : setting.stderr_log) { + writer.AddString(filter); + } + writer.EndArray(); + } + if (!setting.log_configurations.empty()) { + writer.StartKeyedArray("log_locations"); + for (const auto& config : setting.log_configurations) { + writer.StartObject(); + writer.StartKeyedArray("destinations"); + for (const auto& dest : config.destinations) { + writer.AddString(dest); + } + writer.EndArray(); + writer.StartKeyedArray("filter"); + for (const auto& filter : config.filters) { + writer.AddString(filter); + } + writer.EndArray(); + writer.EndObject(); + } + writer.EndArray(); + } + writer.EndObject(); + } + if (!one_setting_file) { + writer.EndArray(); + } + + writer.EndObject(); + return writer.output; +} +void FrameworkEnvironment::write_settings_file(std::string const& file_contents) { + auto out_path = get_folder(ManifestLocation::settings_location).write_manifest("vk_loader_settings.json", file_contents); +#if defined(WIN32) + platform_shim->hkey_current_user_settings.clear(); + platform_shim->hkey_local_machine_settings.clear(); +#endif + if (settings.secure_loader_settings) + platform_shim->add_manifest(ManifestCategory::settings, out_path); + else + platform_shim->add_unsecured_manifest(ManifestCategory::settings, out_path); +} +void FrameworkEnvironment::update_loader_settings(const LoaderSettings& settings) noexcept { + write_settings_file(get_loader_settings_file_contents(settings)); +} +void FrameworkEnvironment::remove_loader_settings() { + get_folder(ManifestLocation::settings_location).remove("vk_loader_settings.json"); +} +void FrameworkEnvironment::write_file_from_source(const char* source_file, ManifestCategory category, ManifestLocation location, + std::string const& file_name) { + std::fstream file{source_file, std::ios_base::in}; + ASSERT_TRUE(file.is_open()); + std::stringstream file_stream; + file_stream << file.rdbuf(); + + auto out_path = get_folder(location).write_manifest(file_name, file_stream.str()); + + if (settings.secure_loader_settings) + platform_shim->add_manifest(category, out_path); + else + platform_shim->add_unsecured_manifest(category, out_path); +} + +TestICD& FrameworkEnvironment::get_test_icd(size_t index) noexcept { return icds[index].get_test_icd(); } +TestICD& FrameworkEnvironment::reset_icd(size_t index) noexcept { return icds[index].reset_icd(); } +std::filesystem::path FrameworkEnvironment::get_test_icd_path(size_t index) noexcept { return icds[index].get_icd_full_path(); } +std::filesystem::path FrameworkEnvironment::get_icd_manifest_path(size_t index) noexcept { + return icds[index].get_icd_manifest_path(); +} +std::filesystem::path FrameworkEnvironment::get_shimmed_icd_manifest_path(size_t index) noexcept { + return icds[index].get_shimmed_manifest_path(); +} + +TestLayer& FrameworkEnvironment::get_test_layer(size_t index) noexcept { return layers[index].get_test_layer(); } +TestLayer& FrameworkEnvironment::reset_layer(size_t index) noexcept { return layers[index].reset_layer(); } +std::filesystem::path FrameworkEnvironment::get_test_layer_path(size_t index) noexcept { + return layers[index].get_layer_full_path(); +} +std::filesystem::path FrameworkEnvironment::get_layer_manifest_path(size_t index) noexcept { + return layers[index].get_layer_manifest_path(); +} +std::filesystem::path FrameworkEnvironment::get_shimmed_layer_manifest_path(size_t index) noexcept { + return layers[index].get_shimmed_manifest_path(); +} + +fs::FolderManager& FrameworkEnvironment::get_folder(ManifestLocation location) noexcept { + // index it directly using the enum location since they will always be in that order + return folders.at(static_cast(location)); +} +fs::FolderManager const& FrameworkEnvironment::get_folder(ManifestLocation location) const noexcept { + return folders.at(static_cast(location)); +} +#if defined(__APPLE__) +void FrameworkEnvironment::setup_macos_bundle() noexcept { + platform_shim->bundle_contents = get_folder(ManifestLocation::macos_bundle).location(); +} +#endif + +std::vector FrameworkEnvironment::GetInstanceExtensions(uint32_t expected_count, const char* layer_name) { + uint32_t count = 0; + VkResult res = vulkan_functions.vkEnumerateInstanceExtensionProperties(layer_name, &count, nullptr); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + std::vector extension_props{count}; + res = vulkan_functions.vkEnumerateInstanceExtensionProperties(layer_name, &count, extension_props.data()); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + return extension_props; +} +std::vector FrameworkEnvironment::GetLayerProperties(uint32_t expected_count) { + uint32_t count = 0; + VkResult res = vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + std::vector layer_props{count}; + res = vulkan_functions.vkEnumerateInstanceLayerProperties(&count, layer_props.data()); + EXPECT_EQ(VK_SUCCESS, res); + EXPECT_EQ(count, expected_count); + return layer_props; +} + +template +VkResult create_surface_helper(VulkanFunctions* functions, VkInstance inst, VkSurfaceKHR& surface, const char* load_func_name, + VkStructureType stype) { + CreationFunc pfn_CreateSurface = functions->load(inst, load_func_name); + if (!pfn_CreateSurface) return VK_ERROR_EXTENSION_NOT_PRESENT; + CreateInfo surf_create_info{stype}; + return pfn_CreateSurface(inst, &surf_create_info, nullptr, &surface); +} +VkResult create_surface(VulkanFunctions* functions, VkInstance inst, VkSurfaceKHR& surface, + [[maybe_unused]] const char* api_selection) { +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + return create_surface_helper( + functions, inst, surface, "vkCreateAndroidSurfaceKHR", VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR); +#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT) + return create_surface_helper( + functions, inst, surface, "vkCreateDirectFBSurfaceEXT", VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT); +#elif defined(VK_USE_PLATFORM_FUCHSIA) + return create_surface_helper( + functions, inst, surface, "vkCreateImagePipeSurfaceFUCHSIA", VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA); +#elif defined(VK_USE_PLATFORM_GGP) + return create_surface_helper( + functions, inst, surface, "vkCreateStreamDescriptorSurfaceGGP", + VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP); +#elif defined(VK_USE_PLATFORM_IOS_MVK) + return create_surface_helper( + functions, inst, surface, "vkCreateIOSSurfaceMVK", VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK); +#elif defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT) +#if defined(VK_USE_PLATFORM_MACOS_MVK) + if (api_selection != nullptr && string_eq(api_selection, "VK_USE_PLATFORM_MACOS_MVK")) + return create_surface_helper( + functions, inst, surface, "vkCreateMacOSSurfaceMVK", VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK); +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (api_selection == nullptr || (api_selection != nullptr && string_eq(api_selection, "VK_USE_PLATFORM_METAL_EXT"))) + return create_surface_helper( + functions, inst, surface, "vkCreateMetalSurfaceEXT", VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT); +#endif + return VK_ERROR_NOT_PERMITTED_KHR; +#elif defined(VK_USE_PLATFORM_SCREEN_QNX) + return create_surface_helper( + functions, inst, surface, "vkCreateScreenSurfaceQNX", VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX); +#elif defined(VK_USE_PLATFORM_VI_NN) + return create_surface_helper(functions, inst, surface, "vkCreateViSurfaceNN", + VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN); +#elif defined(VK_USE_PLATFORM_WIN32_KHR) + return create_surface_helper( + functions, inst, surface, "vkCreateWin32SurfaceKHR", VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR); +#elif defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR) || defined(VK_USE_PLATFORM_WAYLAND_KHR) +#if defined(VK_USE_PLATFORM_XLIB_KHR) + if (string_eq(api_selection, "VK_USE_PLATFORM_XLIB_KHR")) + return create_surface_helper( + functions, inst, surface, "vkCreateXlibSurfaceKHR", VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR); +#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (string_eq(api_selection, "VK_USE_PLATFORM_WAYLAND_KHR")) + return create_surface_helper( + functions, inst, surface, "vkCreateWaylandSurfaceKHR", VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR); +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) + if (api_selection == nullptr || string_eq(api_selection, "VK_USE_PLATFORM_XCB_KHR")) + return create_surface_helper( + functions, inst, surface, "vkCreateXcbSurfaceKHR", VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR); +#endif + return VK_ERROR_NOT_PERMITTED_KHR; +#else + return create_surface_helper( + functions, inst, surface, "vkCreateDisplayPlaneSurfaceKHR", VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR); +#endif +} +VkResult create_surface(InstWrapper& inst, VkSurfaceKHR& surface, const char* api_selection) { + return create_surface(inst.functions, inst.inst, surface, api_selection); +} + +VkResult create_debug_callback(InstWrapper& inst, const VkDebugReportCallbackCreateInfoEXT& create_info, + VkDebugReportCallbackEXT& callback) { + return inst.functions->vkCreateDebugReportCallbackEXT(inst.inst, &create_info, nullptr, &callback); +} + +extern "C" { +void __ubsan_on_report() { FAIL() << "Encountered an undefined behavior sanitizer error"; } +void __asan_on_error() { FAIL() << "Encountered an address sanitizer error"; } +void __tsan_on_report() { FAIL() << "Encountered a thread sanitizer error"; } +} // extern "C" diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.h b/local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.h new file mode 100644 index 0000000000..29703e228d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/test_environment.h @@ -0,0 +1,756 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +/* + * The test_environment is what combines the icd, layer, and shim library into a single object that + * test fixtures can create and use. Responsible for loading the libraries and establishing the + * channels for tests to talk with the icd's and layers. + */ +#pragma once + +// Must include gtest first to guard against Xlib colliding due to redefinitions of "None" and "Bool" +#if defined(VK_USE_PLATFORM_XLIB_KHR) +#pragma push_macro("None") +#pragma push_macro("Bool") +#undef None +#undef Bool +#endif + +#if defined(_WIN32) +#if !defined(NOMINMAX) +#define NOMINMAX +#endif +#endif + +// Use the NDK's header on Android +#include "gtest/gtest.h" + +#include "test_util.h" + +#include "shim/shim.h" + +#include "icd/test_icd.h" + +#include "layer/test_layer.h" + +#include FRAMEWORK_CONFIG_HEADER + +// Useful defines +#if COMMON_UNIX_PLATFORMS +#define HOME_DIR "/home/fake_home" +#define USER_LOCAL_SHARE_DIR HOME_DIR "/.local/share" +#define ETC_DIR "/etc" +#endif + +// handle checking +template +void handle_assert_has_value(T const& handle) { + ASSERT_TRUE(handle != VK_NULL_HANDLE); +} +template +void handle_assert_null(T const& handle) { + ASSERT_TRUE(handle == VK_NULL_HANDLE); +} +template +void handle_assert_has_values(std::vector const& handles) { + for (auto const& handle : handles) { + ASSERT_TRUE(handle != VK_NULL_HANDLE); + } +} +template +void handle_assert_no_values(std::vector const& handles) { + for (auto const& handle : handles) { + ASSERT_TRUE(handle == VK_NULL_HANDLE); + } +} +template +void handle_assert_no_values(size_t length, T handles[]) { + for (size_t i = 0; i < length; i++) { + ASSERT_TRUE(handles[i] == VK_NULL_HANDLE); + } +} +template +void handle_assert_equal(T const& left, T const& right) { + ASSERT_EQ(left, right); +} +template +void handle_assert_equal(std::vector const& left, std::vector const& right) { + ASSERT_EQ(left.size(), right.size()); + for (size_t i = 0; i < left.size(); i++) { + ASSERT_EQ(left[i], right[i]); + } +} +template +void handle_assert_equal(size_t count, T left[], T right[]) { + for (size_t i = 0; i < count; i++) { + ASSERT_EQ(left[i], right[i]); + } +} + +// VulkanFunctions - loads vulkan functions for tests to use + +struct VulkanFunctions { +#if !defined(APPLE_STATIC_LOADER) + LibraryWrapper loader; +#endif + // Pre-Instance + PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = nullptr; + PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = nullptr; + PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = nullptr; + PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = nullptr; + PFN_vkCreateInstance vkCreateInstance = nullptr; + + // Instance + PFN_vkDestroyInstance vkDestroyInstance = nullptr; + PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = nullptr; + PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = nullptr; + PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = nullptr; + PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = nullptr; + PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = nullptr; + PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = nullptr; + PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = nullptr; + PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = nullptr; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = nullptr; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = nullptr; + PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = nullptr; + PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = nullptr; + PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = nullptr; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = nullptr; + PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = nullptr; + PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = nullptr; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = nullptr; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = nullptr; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = nullptr; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = nullptr; + PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = nullptr; + PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = nullptr; + PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = nullptr; + PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = nullptr; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = nullptr; + + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = nullptr; + PFN_vkCreateDevice vkCreateDevice = nullptr; + + // WSI + PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = nullptr; + PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = nullptr; + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = nullptr; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = nullptr; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = nullptr; + PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = nullptr; + PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = nullptr; + PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = nullptr; + PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = nullptr; + PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = nullptr; + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = nullptr; + PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = nullptr; + PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = nullptr; + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = nullptr; + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = nullptr; + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = nullptr; +#endif // VK_USE_PLATFORM_ANDROID_KHR +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) + PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = nullptr; + PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = nullptr; +#endif // VK_USE_PLATFORM_DIRECTFB_EXT +#if defined(VK_USE_PLATFORM_FUCHSIA) + PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = nullptr; +#endif // VK_USE_PLATFORM_FUCHSIA +#if defined(VK_USE_PLATFORM_GGP) + PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = nullptr; +#endif // VK_USE_PLATFORM_GGP +#if defined(VK_USE_PLATFORM_IOS_MVK) + PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = nullptr; +#endif // VK_USE_PLATFORM_IOS_MVK +#if defined(VK_USE_PLATFORM_MACOS_MVK) + PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = nullptr; +#endif // VK_USE_PLATFORM_MACOS_MVK +#if defined(VK_USE_PLATFORM_METAL_EXT) + PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = nullptr; +#endif // VK_USE_PLATFORM_METAL_EXT +#if defined(VK_USE_PLATFORM_SCREEN_QNX) + PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = nullptr; + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = nullptr; +#endif // VK_USE_PLATFORM_SCREEN_QNX +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = nullptr; + PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = nullptr; +#endif // VK_USE_PLATFORM_WAYLAND_KHR +#if defined(VK_USE_PLATFORM_XCB_KHR) + PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = nullptr; + PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = nullptr; +#endif // VK_USE_PLATFORM_XCB_KHR +#if defined(VK_USE_PLATFORM_XLIB_KHR) + PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = nullptr; + PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = nullptr; +#endif // VK_USE_PLATFORM_XLIB_KHR +#if defined(VK_USE_PLATFORM_WIN32_KHR) + PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = nullptr; + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = nullptr; +#endif // VK_USE_PLATFORM_WIN32_KHR + PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = nullptr; + + // instance extensions functions (can only be loaded with a valid instance) + PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = nullptr; // Null unless the extension is enabled + PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = nullptr; // Null unless the extension is enabled + PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = nullptr; // Null unless the extension is enabled + PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = nullptr; // Null unless the extension is enabled + + // device functions + PFN_vkDestroyDevice vkDestroyDevice = nullptr; + PFN_vkGetDeviceQueue vkGetDeviceQueue = nullptr; + + VulkanFunctions(); + + void load_instance_functions(VkInstance instance); + + FromVoidStarFunc load(VkInstance inst, const char* func_name) const { + return FromVoidStarFunc(vkGetInstanceProcAddr(inst, func_name)); + } + + FromVoidStarFunc load(VkDevice device, const char* func_name) const { + return FromVoidStarFunc(vkGetDeviceProcAddr(device, func_name)); + } +}; + +struct DeviceFunctions { + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = nullptr; + PFN_vkDestroyDevice vkDestroyDevice = nullptr; + PFN_vkGetDeviceQueue vkGetDeviceQueue = nullptr; + PFN_vkCreateCommandPool vkCreateCommandPool = nullptr; + PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = nullptr; + PFN_vkDestroyCommandPool vkDestroyCommandPool = nullptr; + PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = nullptr; + PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = nullptr; + PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = nullptr; + + DeviceFunctions() = default; + DeviceFunctions(const VulkanFunctions& vulkan_functions, VkDevice device); + + FromVoidStarFunc load(VkDevice device, const char* func_name) const { + return FromVoidStarFunc(vkGetDeviceProcAddr(device, func_name)); + } +}; + +// InstWrapper & DeviceWrapper - used to make creating instances & devices easier when writing tests +struct InstWrapper { + InstWrapper(VulkanFunctions& functions, VkAllocationCallbacks* callbacks = nullptr) noexcept; + InstWrapper(VulkanFunctions& functions, VkInstance inst, VkAllocationCallbacks* callbacks = nullptr) noexcept; + ~InstWrapper() noexcept; + + // Move-only object + InstWrapper(InstWrapper const&) = delete; + InstWrapper& operator=(InstWrapper const&) = delete; + InstWrapper(InstWrapper&& other) noexcept; + InstWrapper& operator=(InstWrapper&&) noexcept; + + // Construct this VkInstance using googletest to assert if it succeeded + void CheckCreate(VkResult result_to_check = VK_SUCCESS); + void CheckCreateWithInfo(InstanceCreateInfo& create_info, VkResult result_to_check = VK_SUCCESS); + + // Convenience + operator VkInstance() { return inst; } + VulkanFunctions* operator->() { return functions; } + + FromVoidStarFunc load(const char* func_name) { return FromVoidStarFunc(functions->vkGetInstanceProcAddr(inst, func_name)); } + + // Enumerate physical devices using googletest to assert if it succeeded + std::vector GetPhysDevs(VkResult result_to_check = VK_SUCCESS); // query all physical devices + std::vector GetPhysDevs(uint32_t phys_dev_count, + VkResult result_to_check = VK_SUCCESS); // query only phys_dev_count devices + // Enumerate a single physical device using googletest to assert if it succeeded + VkPhysicalDevice GetPhysDev(VkResult result_to_check = VK_SUCCESS); + + // Get all the list of active layers through vkEnumerateDeviceLayerProperties + // Use count to specify the expected count + std::vector GetActiveLayers(VkPhysicalDevice phys_dev, uint32_t count); + + // Get list of device extensions associated with a VkPhysicalDevice + // Use count to specify an expected count + std::vector EnumerateDeviceExtensions(VkPhysicalDevice physical_device, uint32_t count); + // Same as EnumerateDeviceExtensions but for a specific layer + std::vector EnumerateLayerDeviceExtensions(VkPhysicalDevice physical_device, const char* layer_name, + uint32_t expected_count); + + VulkanFunctions* functions = nullptr; + VkInstance inst = VK_NULL_HANDLE; + VkAllocationCallbacks* callbacks = nullptr; + InstanceCreateInfo create_info{}; +}; + +struct DeviceWrapper { + DeviceWrapper(InstWrapper& inst_wrapper, VkAllocationCallbacks* callbacks = nullptr) noexcept; + DeviceWrapper(VulkanFunctions& functions, VkDevice device, VkAllocationCallbacks* callbacks = nullptr) noexcept; + ~DeviceWrapper() noexcept; + + // Move-only object + DeviceWrapper(DeviceWrapper const&) = delete; + DeviceWrapper& operator=(DeviceWrapper const&) = delete; + DeviceWrapper(DeviceWrapper&&) noexcept; + DeviceWrapper& operator=(DeviceWrapper&&) noexcept; + + // Construct this VkDevice using googletest to assert if it succeeded + void CheckCreate(VkPhysicalDevice physical_device, VkResult result_to_check = VK_SUCCESS); + + // Convenience + operator VkDevice() { return dev; } + operator VkDevice() const { return dev; } + VulkanFunctions* operator->() { return functions; } + + FromVoidStarFunc load(const char* func_name) { return FromVoidStarFunc(functions->vkGetDeviceProcAddr(dev, func_name)); } + + VulkanFunctions* functions = nullptr; + VkDevice dev = VK_NULL_HANDLE; + VkAllocationCallbacks* callbacks = nullptr; + DeviceCreateInfo create_info{}; +}; + +template +struct WrappedHandle { + WrappedHandle(HandleType in_handle, ParentType in_parent, DestroyFuncType in_destroy_func, + VkAllocationCallbacks* in_callbacks = nullptr) + : handle(in_handle), parent(in_parent), destroy_func(in_destroy_func), callbacks(in_callbacks) {} + ~WrappedHandle() { + if (handle) { + destroy_func(parent, handle, callbacks); + handle = VK_NULL_HANDLE; + } + } + WrappedHandle(WrappedHandle const&) = delete; + WrappedHandle& operator=(WrappedHandle const&) = delete; + WrappedHandle(WrappedHandle&& other) noexcept + : handle(other.handle), parent(other.parent), destroy_func(other.destroy_func), callbacks(other.callbacks) { + other.handle = VK_NULL_HANDLE; + } + WrappedHandle& operator=(WrappedHandle&& other) noexcept { + if (handle != VK_NULL_HANDLE) { + destroy_func(parent, handle, callbacks); + } + handle = other.handle; + other.handle = VK_NULL_HANDLE; + parent = other.parent; + destroy_func = other.destroy_func; + callbacks = other.callbacks; + return *this; + } + + HandleType handle = VK_NULL_HANDLE; + ParentType parent = VK_NULL_HANDLE; + DestroyFuncType destroy_func = nullptr; + VkAllocationCallbacks* callbacks = nullptr; +}; + +struct DebugUtilsLogger { + static VkBool32 VKAPI_PTR + DebugUtilsMessengerLoggerCallback([[maybe_unused]] VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + [[maybe_unused]] VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) { + DebugUtilsLogger* debug = reinterpret_cast(pUserData); + debug->returned_output += pCallbackData->pMessage; + debug->returned_output += '\n'; + return VK_FALSE; + } + DebugUtilsLogger(VkDebugUtilsMessageSeverityFlagsEXT severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) { + returned_output.reserve(4096); // output can be very noisy, reserving should help prevent many small allocations + create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + create_info.pNext = nullptr; + create_info.messageSeverity = severity; + create_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + create_info.pfnUserCallback = DebugUtilsMessengerLoggerCallback; + create_info.pUserData = this; + } + + // Immoveable object + DebugUtilsLogger(DebugUtilsLogger const&) = delete; + DebugUtilsLogger& operator=(DebugUtilsLogger const&) = delete; + DebugUtilsLogger(DebugUtilsLogger&&) = delete; + DebugUtilsLogger& operator=(DebugUtilsLogger&&) = delete; + // Find a string in the log output + bool find(std::string const& search_text) const { return returned_output.find(search_text) != std::string::npos; } + // Find the number of times a string appears in the log output + uint32_t count(std::string const& search_text) const { + uint32_t occurrences = 0; + std::string::size_type position = 0; + while ((position = returned_output.find(search_text, position)) != std::string::npos) { + ++occurrences; + position += search_text.length(); + } + return occurrences; + } + + // Look through the event log. If you find a line containing the prefix we're interested in, look for the end of + // line character, and then see if the postfix occurs in it as well. + bool find_prefix_then_postfix(const char* prefix, const char* postfix) const; + + // Clear the log + void clear() { returned_output.clear(); } + VkDebugUtilsMessengerCreateInfoEXT* get() noexcept { return &create_info; } + VkDebugUtilsMessengerCreateInfoEXT create_info{}; + std::string returned_output; +}; + +struct DebugUtilsWrapper { + DebugUtilsWrapper() noexcept {} + DebugUtilsWrapper(InstWrapper& inst_wrapper, + VkDebugUtilsMessageSeverityFlagsEXT severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, + VkAllocationCallbacks* callbacks = nullptr) + : logger(severity), + inst(inst_wrapper.inst), + callbacks(callbacks), + local_vkCreateDebugUtilsMessengerEXT( + FromVoidStarFunc(inst_wrapper.functions->vkGetInstanceProcAddr(inst_wrapper.inst, "vkCreateDebugUtilsMessengerEXT"))), + local_vkDestroyDebugUtilsMessengerEXT(FromVoidStarFunc( + inst_wrapper.functions->vkGetInstanceProcAddr(inst_wrapper.inst, "vkDestroyDebugUtilsMessengerEXT"))){}; + ~DebugUtilsWrapper() noexcept { + if (messenger) { + local_vkDestroyDebugUtilsMessengerEXT(inst, messenger, callbacks); + messenger = VK_NULL_HANDLE; + } + } + // Immoveable object + DebugUtilsWrapper(DebugUtilsWrapper const&) = delete; + DebugUtilsWrapper& operator=(DebugUtilsWrapper const&) = delete; + DebugUtilsWrapper(DebugUtilsWrapper&&) = delete; + DebugUtilsWrapper& operator=(DebugUtilsWrapper&&) = delete; + + bool find(std::string const& search_text) { return logger.find(search_text); } + uint32_t count(std::string const& search_text) { return logger.count(search_text); } + VkDebugUtilsMessengerCreateInfoEXT* get() noexcept { return logger.get(); } + + DebugUtilsLogger logger; + VkInstance inst = VK_NULL_HANDLE; + VkAllocationCallbacks* callbacks = nullptr; + PFN_vkCreateDebugUtilsMessengerEXT local_vkCreateDebugUtilsMessengerEXT = nullptr; + PFN_vkDestroyDebugUtilsMessengerEXT local_vkDestroyDebugUtilsMessengerEXT = nullptr; + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; +}; + +VkResult CreateDebugUtilsMessenger(DebugUtilsWrapper& debug_utils); + +// Helper that adds the debug utils extension name and sets the pNext chain up +// NOTE: Ignores existing pNext chains +void FillDebugUtilsCreateDetails(InstanceCreateInfo& create_info, DebugUtilsLogger& logger); +void FillDebugUtilsCreateDetails(InstanceCreateInfo& create_info, DebugUtilsWrapper& wrapper); + +namespace fs { + +int create_folder(std::filesystem::path const& path); +int delete_folder(std::filesystem::path const& folder); + +class FolderManager { + public: + explicit FolderManager(std::filesystem::path root_path, std::string name) noexcept; + ~FolderManager() noexcept; + FolderManager(FolderManager const&) = delete; + FolderManager& operator=(FolderManager const&) = delete; + FolderManager(FolderManager&& other) noexcept; + FolderManager& operator=(FolderManager&& other) noexcept; + + // Add a manifest to the folder + std::filesystem::path write_manifest(std::filesystem::path const& name, std::string const& contents); + + // close file handle, delete file, remove `name` from managed file list. + void remove(std::filesystem::path const& name); + + // Remove all contents in the path + void clear() const noexcept; + + // copy file into this folder with name `new_name`. Returns the full path of the file that was copied + std::filesystem::path copy_file(std::filesystem::path const& file, std::filesystem::path const& new_name); + + // location of the managed folder + std::filesystem::path location() const { return folder; } + + std::vector get_files() const; + + // Create a symlink in this folder to target with the filename set to link_name + std::filesystem::path add_symlink(std::filesystem::path const& target, std::filesystem::path const& link_name); + + private: + bool actually_created = false; + std::filesystem::path folder; + std::vector added_files; + + void insert_file_to_tracking(std::filesystem::path const& name); + void check_if_first_use(); +}; +} // namespace fs + +struct LoaderSettingsLayerConfiguration { + BUILDER_VALUE(std::string, name) + BUILDER_VALUE(std::filesystem::path, path) + BUILDER_VALUE(std::string, control) + BUILDER_VALUE(bool, treat_as_implicit_manifest) +}; +inline bool operator==(LoaderSettingsLayerConfiguration const& a, LoaderSettingsLayerConfiguration const& b) { + return a.name == b.name && a.path == b.path && a.control == b.control && + a.treat_as_implicit_manifest == b.treat_as_implicit_manifest; +} +inline bool operator!=(LoaderSettingsLayerConfiguration const& a, LoaderSettingsLayerConfiguration const& b) { return !(a == b); } +inline bool operator<(LoaderSettingsLayerConfiguration const& a, LoaderSettingsLayerConfiguration const& b) { + return a.name < b.name; +} +inline bool operator>(LoaderSettingsLayerConfiguration const& a, LoaderSettingsLayerConfiguration const& b) { return (b < a); } +inline bool operator<=(LoaderSettingsLayerConfiguration const& a, LoaderSettingsLayerConfiguration const& b) { return !(b < a); } +inline bool operator>=(LoaderSettingsLayerConfiguration const& a, LoaderSettingsLayerConfiguration const& b) { return !(a < b); } + +// Log files and their associated filter +struct LoaderLogConfiguration { + BUILDER_VECTOR(std::string, destinations, destination) + BUILDER_VECTOR(std::string, filters, filter) +}; +struct AppSpecificSettings { + BUILDER_VECTOR(std::string, app_keys, app_key) + BUILDER_VECTOR(LoaderSettingsLayerConfiguration, layer_configurations, layer_configuration) + BUILDER_VECTOR(std::string, stderr_log, stderr_log_filter) + BUILDER_VECTOR(LoaderLogConfiguration, log_configurations, log_configuration) +}; + +struct LoaderSettings { + BUILDER_VALUE(ManifestVersion, file_format_version) + BUILDER_VECTOR(AppSpecificSettings, app_specific_settings, app_specific_setting); +}; + +struct FrameworkEnvironment; // forward declaration + +struct PlatformShimWrapper { + PlatformShimWrapper(GetFoldersFunc get_folders_by_name_function, const char* log_filter) noexcept; + ~PlatformShimWrapper() noexcept; + PlatformShimWrapper(PlatformShimWrapper const&) = delete; + PlatformShimWrapper& operator=(PlatformShimWrapper const&) = delete; + + // Convenience + PlatformShim* operator->() { return platform_shim; } + + LibraryWrapper shim_library; + PlatformShim* platform_shim = nullptr; + EnvVarWrapper loader_logging; +}; + +struct TestICDHandle { + TestICDHandle() noexcept; + TestICDHandle(std::filesystem::path const& icd_path) noexcept; + TestICD& reset_icd() noexcept; + TestICD& get_test_icd() noexcept; + std::filesystem::path get_icd_full_path() noexcept; + std::filesystem::path get_icd_manifest_path() noexcept; + std::filesystem::path get_shimmed_manifest_path() noexcept; + + // Must use statically + LibraryWrapper icd_library; + GetTestICDFunc proc_addr_get_test_icd = nullptr; + GetNewTestICDFunc proc_addr_reset_icd = nullptr; + std::filesystem::path + manifest_path; // path to the manifest file is on the actual filesystem (aka /tests/framework/<...>) + std::filesystem::path + shimmed_manifest_path; // path to where the loader will find the manifest file (eg /usr/local/share/vulkan/<...>) +}; +struct TestLayerHandle { + TestLayerHandle() noexcept; + TestLayerHandle(std::filesystem::path const& layer_path) noexcept; + TestLayer& reset_layer() noexcept; + TestLayer& get_test_layer() noexcept; + std::filesystem::path get_layer_full_path() noexcept; + std::filesystem::path get_layer_manifest_path() noexcept; + std::filesystem::path get_shimmed_manifest_path() noexcept; + + // Must use statically + LibraryWrapper layer_library; + GetTestLayerFunc proc_addr_get_test_layer = nullptr; + GetNewTestLayerFunc proc_addr_reset_layer = nullptr; + std::filesystem::path + manifest_path; // path to the manifest file is on the actual filesystem (aka /tests/framework/<...>) + std::filesystem::path + shimmed_manifest_path; // path to where the loader will find the manifest file (eg /usr/local/share/vulkan/<...>) +}; + +// Controls whether to create a manifest and where to put it +enum class ManifestDiscoveryType { + generic, // put the manifest in the regular locations + unsecured_generic, // put the manifest in a user folder rather than system + none, // Do not write the manifest anywhere (for Direct Driver Loading) + null_dir, // put the manifest in the 'null_dir' which the loader does not search in (D3DKMT for instance) + env_var, // use the corresponding env-var for it + add_env_var, // use the corresponding add-env-var for it + override_folder, // add to a special folder for the override layer to use + windows_app_package, // let the app package search find it + macos_bundle, // place it in a location only accessible to macos bundles +}; + +enum class LibraryPathType { + absolute, // default for testing - the exact path of the binary + relative, // Relative to the manifest file + default_search_paths, // Dont add any path information to the library_path - force the use of the default search paths +}; + +struct TestICDDetails { + TestICDDetails(ManifestICD icd_manifest) noexcept : icd_manifest(icd_manifest) {} + TestICDDetails(std::filesystem::path icd_binary_path, uint32_t api_version = VK_API_VERSION_1_0) noexcept { + icd_manifest.set_lib_path(icd_binary_path).set_api_version(api_version); + } + BUILDER_VALUE(ManifestICD, icd_manifest); + BUILDER_VALUE_WITH_DEFAULT(std::filesystem::path, json_name, "test_icd"); + // Uses the json_name without modification - default is to append _1 in the json file to distinguish drivers + BUILDER_VALUE(bool, disable_icd_inc); + BUILDER_VALUE_WITH_DEFAULT(ManifestDiscoveryType, discovery_type, ManifestDiscoveryType::generic); + BUILDER_VALUE(bool, is_fake); + // If discovery type is env-var, is_dir controls whether to use the path to the file or folder the manifest is in + BUILDER_VALUE(bool, is_dir); + BUILDER_VALUE_WITH_DEFAULT(LibraryPathType, library_path_type, LibraryPathType::absolute); +}; + +struct TestLayerDetails { + TestLayerDetails(ManifestLayer layer_manifest, const std::string& json_name) noexcept + : layer_manifest(layer_manifest), json_name(json_name) {} + BUILDER_VALUE(ManifestLayer, layer_manifest); + BUILDER_VALUE_WITH_DEFAULT(std::string, json_name, "test_layer"); + BUILDER_VALUE_WITH_DEFAULT(ManifestDiscoveryType, discovery_type, ManifestDiscoveryType::generic); + BUILDER_VALUE(bool, is_fake); + // If discovery type is env-var, is_dir controls whether to use the path to the file or folder the manifest is in + BUILDER_VALUE_WITH_DEFAULT(bool, is_dir, true); + BUILDER_VALUE_WITH_DEFAULT(LibraryPathType, library_path_type, LibraryPathType::absolute); +}; + +// Locations manifests can go in the test framework +// If this enum is added to - the contructor of FrameworkEnvironment also needs to be updated with the new enum value +enum class ManifestLocation { + null = 0, + driver = 1, + driver_env_var = 2, + explicit_layer = 3, + explicit_layer_env_var = 4, + explicit_layer_add_env_var = 5, + implicit_layer = 6, + implicit_layer_env_var = 7, + implicit_layer_add_env_var = 8, + override_layer = 9, + windows_app_package = 10, + macos_bundle = 11, + unsecured_location = 12, + settings_location = 13, +}; + +struct FrameworkSettings { + BUILDER_VALUE_WITH_DEFAULT(const char*, log_filter, "all"); + BUILDER_VALUE_WITH_DEFAULT(bool, enable_default_search_paths, true); + BUILDER_VALUE(LoaderSettings, loader_settings); + BUILDER_VALUE(bool, secure_loader_settings); +}; + +struct FrameworkEnvironment { + FrameworkEnvironment() noexcept; // default is to enable VK_LOADER_DEBUG=all and enable the default search paths + FrameworkEnvironment(const FrameworkSettings& settings) noexcept; + ~FrameworkEnvironment(); + // Delete copy constructors - this class should never move after being created + FrameworkEnvironment(const FrameworkEnvironment&) = delete; + FrameworkEnvironment& operator=(const FrameworkEnvironment&) = delete; + + TestICD& add_icd(TestICDDetails icd_details) noexcept; + void add_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept; + void add_implicit_layer(TestLayerDetails layer_details) noexcept; + void add_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept; + void add_explicit_layer(TestLayerDetails layer_details) noexcept; + void add_fake_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept; + void add_fake_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept; + + // resets the current settings with the values contained in loader_settings + void write_settings_file(std::string const& file_contents); + // apply any changes made to FrameworkEnvironment's loader_settings member + void update_loader_settings(const LoaderSettings& loader_settings) noexcept; + void remove_loader_settings(); + + void write_file_from_source(const char* source_file, ManifestCategory category, ManifestLocation location, + std::string const& file_name); + + TestICD& get_test_icd(size_t index = 0) noexcept; + TestICD& reset_icd(size_t index = 0) noexcept; + std::filesystem::path get_test_icd_path(size_t index = 0) noexcept; + std::filesystem::path get_icd_manifest_path(size_t index = 0) noexcept; + std::filesystem::path get_shimmed_icd_manifest_path(size_t index = 0) noexcept; + + TestLayer& get_test_layer(size_t index = 0) noexcept; + TestLayer& reset_layer(size_t index = 0) noexcept; + std::filesystem::path get_test_layer_path(size_t index = 0) noexcept; + std::filesystem::path get_layer_manifest_path(size_t index = 0) noexcept; + std::filesystem::path get_shimmed_layer_manifest_path(size_t index = 0) noexcept; + + fs::FolderManager& get_folder(ManifestLocation location) noexcept; + fs::FolderManager const& get_folder(ManifestLocation location) const noexcept; +#if defined(__APPLE__) + // Set the path of the app bundle to the appropriate test framework bundle + void setup_macos_bundle() noexcept; +#endif + + FrameworkSettings settings; + + fs::FolderManager test_folder; + + // Query the global extensions + // Optional: use layer_name to query the extensions of a specific layer + std::vector GetInstanceExtensions(uint32_t count, const char* layer_name = nullptr); + // Query the available layers + std::vector GetLayerProperties(uint32_t count); + + PlatformShimWrapper platform_shim; + std::vector folders; + + std::vector icds; + std::vector layers; + + DebugUtilsLogger debug_log; + VulkanFunctions vulkan_functions; + + EnvVarWrapper env_var_vk_icd_filenames{"VK_DRIVER_FILES"}; + EnvVarWrapper add_env_var_vk_icd_filenames{"VK_ADD_DRIVER_FILES"}; + EnvVarWrapper env_var_vk_layer_paths{"VK_LAYER_PATH"}; + EnvVarWrapper add_env_var_vk_layer_paths{"VK_ADD_LAYER_PATH"}; + EnvVarWrapper env_var_vk_implicit_layer_paths{"VK_IMPLICIT_LAYER_PATH"}; + EnvVarWrapper add_env_var_vk_implicit_layer_paths{"VK_ADD_IMPLICIT_LAYER_PATH"}; + + LoaderSettings loader_settings; // the current settings written to disk + private: + void add_layer_impl(TestLayerDetails layer_details, ManifestCategory category); +}; + +// Create a surface using a platform specific API +// api_selection: optionally provide a VK_USE_PLATFORM_XXX string to select which API to create a surface with. +// defaults to Metal on macOS and XCB on linux if not provided +// Returns an VkResult with the result of surface creation +// returns VK_ERROR_EXTENSION_NOT_PRESENT if it fails to load the surface creation function +VkResult create_surface(InstWrapper& inst, VkSurfaceKHR& out_surface, const char* api_selection = nullptr); +// Alternate parameter list for allocation callback tests +VkResult create_surface(VulkanFunctions* functions, VkInstance inst, VkSurfaceKHR& surface, const char* api_selection = nullptr); + +VkResult create_debug_callback(InstWrapper& inst, const VkDebugReportCallbackCreateInfoEXT& create_info, + VkDebugReportCallbackEXT& callback); diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/test_util.cpp b/local/recipes/libs/vulkan-loader/source/tests/framework/test_util.cpp new file mode 100644 index 0000000000..9e45b4143c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/test_util.cpp @@ -0,0 +1,375 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_util.h" + +#include + +#if defined(WIN32) +#include +#include +const char* win_api_error_str(LSTATUS status) { + if (status == ERROR_INVALID_FUNCTION) return "ERROR_INVALID_FUNCTION"; + if (status == ERROR_FILE_NOT_FOUND) return "ERROR_FILE_NOT_FOUND"; + if (status == ERROR_PATH_NOT_FOUND) return "ERROR_PATH_NOT_FOUND"; + if (status == ERROR_TOO_MANY_OPEN_FILES) return "ERROR_TOO_MANY_OPEN_FILES"; + if (status == ERROR_ACCESS_DENIED) return "ERROR_ACCESS_DENIED"; + if (status == ERROR_INVALID_HANDLE) return "ERROR_INVALID_HANDLE"; + if (status == ERROR_ENVVAR_NOT_FOUND) return "ERROR_ENVVAR_NOT_FOUND"; + if (status == ERROR_SETENV_FAILED) return "ERROR_SETENV_FAILED"; + return "UNKNOWN ERROR"; +} + +void print_error_message(LSTATUS status, const char* function_name, std::string optional_message) { + LPVOID lpMsgBuf; + DWORD dw = GetLastError(); + + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast(&lpMsgBuf), 0, nullptr); + + std::cerr << function_name << " failed with " << win_api_error_str(status) << ": " + << std::string(reinterpret_cast(lpMsgBuf)); + if (optional_message != "") { + std::cerr << " | " << optional_message; + } + std::cerr << "\n"; + LocalFree(lpMsgBuf); +} + +void EnvVarWrapper::set_env_var() { + BOOL ret = SetEnvironmentVariableW(widen(name).c_str(), widen(cur_value).c_str()); + if (ret == 0) { + print_error_message(ERROR_SETENV_FAILED, "SetEnvironmentVariableW"); + } +} +void EnvVarWrapper::remove_env_var() const { SetEnvironmentVariableW(widen(name).c_str(), nullptr); } +std::string get_env_var(std::string const& name, bool report_failure) { + std::wstring name_utf16 = widen(name); + DWORD value_size = GetEnvironmentVariableW(name_utf16.c_str(), nullptr, 0); + if (0 == value_size) { + if (report_failure) print_error_message(ERROR_ENVVAR_NOT_FOUND, "GetEnvironmentVariableW"); + return {}; + } + std::wstring value(value_size, L'\0'); + if (GetEnvironmentVariableW(name_utf16.c_str(), &value[0], value_size) != value_size - 1) { + return {}; + } + return narrow(value); +} +#elif COMMON_UNIX_PLATFORMS + +void EnvVarWrapper::set_env_var() { setenv(name.c_str(), cur_value.c_str(), 1); } +void EnvVarWrapper::remove_env_var() const { unsetenv(name.c_str()); } +std::string get_env_var(std::string const& name, bool report_failure) { + char* ret = getenv(name.c_str()); + if (ret == nullptr) { + if (report_failure) std::cerr << "Failed to get environment variable:" << name << "\n"; + return std::string(); + } + return ret; +} +#endif + +template +void print_object_of_t(JsonWriter& writer, const char* object_name, std::vector const& vec) { + if (vec.size() == 0) return; + writer.StartKeyedObject(object_name); + for (auto& element : vec) { + element.get_manifest_str(writer); + } + writer.EndObject(); +} + +template +void print_array_of_t(JsonWriter& writer, const char* object_name, std::vector const& vec) { + if (vec.size() == 0) return; + writer.StartKeyedArray(object_name); + for (auto& element : vec) { + element.get_manifest_str(writer); + } + writer.EndArray(); +} +void print_vector_of_strings(JsonWriter& writer, const char* object_name, std::vector const& strings) { + if (strings.size() == 0) return; + writer.StartKeyedArray(object_name); + for (auto const& str : strings) { + writer.AddString(std::filesystem::path(str).native()); + } + writer.EndArray(); +} +void print_vector_of_strings(JsonWriter& writer, const char* object_name, std::vector const& paths) { + if (paths.size() == 0) return; + writer.StartKeyedArray(object_name); + for (auto const& path : paths) { + writer.AddString(path.native()); + } + writer.EndArray(); +} + +std::string to_text(bool b) { return b ? std::string("true") : std::string("false"); } + +std::string ManifestICD::get_manifest_str() const { + JsonWriter writer; + writer.StartObject(); + writer.AddKeyedString("file_format_version", file_format_version.get_version_str()); + writer.StartKeyedObject("ICD"); + writer.AddKeyedString("library_path", lib_path.native()); + writer.AddKeyedString("api_version", version_to_string(api_version)); + writer.AddKeyedBool("is_portability_driver", is_portability_driver); + if (!library_arch.empty()) writer.AddKeyedString("library_arch", library_arch); + writer.EndObject(); + writer.EndObject(); + return writer.output; +} + +void ManifestLayer::LayerDescription::Extension::get_manifest_str(JsonWriter& writer) const { + writer.StartObject(); + writer.AddKeyedString("name", name); + writer.AddKeyedString("spec_version", std::to_string(spec_version)); + writer.AddKeyedString("spec_version", std::to_string(spec_version)); + print_vector_of_strings(writer, "entrypoints", entrypoints); + writer.EndObject(); +} + +void ManifestLayer::LayerDescription::get_manifest_str(JsonWriter& writer) const { + writer.AddKeyedString("name", name); + writer.AddKeyedString("type", get_type_str(type)); + if (!lib_path.empty()) { + writer.AddKeyedString("library_path", lib_path.native()); + } + writer.AddKeyedString("api_version", version_to_string(api_version)); + writer.AddKeyedString("implementation_version", std::to_string(implementation_version)); + writer.AddKeyedString("description", description); + print_object_of_t(writer, "functions", functions); + print_array_of_t(writer, "instance_extensions", instance_extensions); + print_array_of_t(writer, "device_extensions", device_extensions); + if (!enable_environment.empty()) { + writer.StartKeyedObject("enable_environment"); + writer.AddKeyedString(enable_environment, "1"); + writer.EndObject(); + } + if (!disable_environment.empty()) { + writer.StartKeyedObject("disable_environment"); + writer.AddKeyedString(disable_environment, "1"); + writer.EndObject(); + } + print_vector_of_strings(writer, "component_layers", component_layers); + print_vector_of_strings(writer, "blacklisted_layers", blacklisted_layers); + print_vector_of_strings(writer, "override_paths", override_paths); + print_vector_of_strings(writer, "app_keys", app_keys); + print_object_of_t(writer, "pre_instance_functions", pre_instance_functions); + if (!library_arch.empty()) { + writer.AddKeyedString("library_arch", library_arch); + } +} + +VkLayerProperties ManifestLayer::LayerDescription::get_layer_properties() const { + VkLayerProperties properties{}; + copy_string_to_char_array(name, properties.layerName, VK_MAX_EXTENSION_NAME_SIZE); + copy_string_to_char_array(description, properties.description, VK_MAX_EXTENSION_NAME_SIZE); + properties.implementationVersion = implementation_version; + properties.specVersion = api_version; + return properties; +} + +std::string ManifestLayer::get_manifest_str() const { + JsonWriter writer; + writer.StartObject(); + writer.AddKeyedString("file_format_version", file_format_version.get_version_str()); + if (layers.size() == 1) { + writer.StartKeyedObject("layer"); + layers.at(0).get_manifest_str(writer); + writer.EndObject(); + } else { + writer.StartKeyedArray("layers"); + for (size_t i = 0; i < layers.size(); i++) { + writer.StartObject(); + layers.at(i).get_manifest_str(writer); + writer.EndObject(); + } + writer.EndArray(); + } + writer.EndObject(); + return writer.output; +} + +const char* get_platform_wsi_extension([[maybe_unused]] const char* api_selection) { +#if defined(VK_USE_PLATFORM_ANDROID_KHR) + return "VK_KHR_android_surface"; +#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT) + return "VK_EXT_directfb_surface"; +#elif defined(VK_USE_PLATFORM_FUCHSIA) + return "VK_FUCHSIA_imagepipe_surface"; +#elif defined(VK_USE_PLATFORM_GGP) + return "VK_GGP_stream_descriptor_surface"; +#elif defined(VK_USE_PLATFORM_IOS_MVK) + return "VK_MVK_ios_surface"; +#elif defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT) +#if defined(VK_USE_PLATFORM_MACOS_MVK) + if (string_eq(api_selection, "VK_USE_PLATFORM_MACOS_MVK")) return "VK_MVK_macos_surface"; +#endif +#if defined(VK_USE_PLATFORM_METAL_EXT) + if (string_eq(api_selection, "VK_USE_PLATFORM_METAL_EXT")) return "VK_EXT_metal_surface"; + return "VK_EXT_metal_surface"; +#endif +#elif defined(VK_USE_PLATFORM_SCREEN_QNX) + return "VK_QNX_screen_surface"; +#elif defined(VK_USE_PLATFORM_VI_NN) + return "VK_NN_vi_surface"; +#elif defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR) || defined(VK_USE_PLATFORM_WAYLAND_KHR) +#if defined(VK_USE_PLATFORM_XCB_KHR) + if (string_eq(api_selection, "VK_USE_PLATFORM_XCB_KHR")) return "VK_KHR_xcb_surface"; +#endif +#if defined(VK_USE_PLATFORM_XLIB_KHR) + if (string_eq(api_selection, "VK_USE_PLATFORM_XLIB_KHR")) return "VK_KHR_xlib_surface"; +#endif +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) + if (string_eq(api_selection, "VK_USE_PLATFORM_WAYLAND_KHR")) return "VK_KHR_wayland_surface"; +#endif +#if defined(VK_USE_PLATFORM_XCB_KHR) + return "VK_KHR_xcb_surface"; +#endif +#elif defined(VK_USE_PLATFORM_WIN32_KHR) + return "VK_KHR_win32_surface"; +#else + return "VK_KHR_display"; +#endif +} + +bool string_eq(const char* a, const char* b) noexcept { return a && b && strcmp(a, b) == 0; } +bool string_eq(const char* a, const char* b, size_t len) noexcept { return a && b && strncmp(a, b, len) == 0; } + +InstanceCreateInfo::InstanceCreateInfo() { + instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; +} + +VkInstanceCreateInfo* InstanceCreateInfo::get() noexcept { + if (fill_in_application_info) { + application_info.pApplicationName = app_name.c_str(); + application_info.pEngineName = engine_name.c_str(); + application_info.applicationVersion = app_version; + application_info.engineVersion = engine_version; + application_info.apiVersion = api_version; + instance_info.pApplicationInfo = &application_info; + } + instance_info.flags = flags; + instance_info.enabledLayerCount = static_cast(enabled_layers.size()); + instance_info.ppEnabledLayerNames = enabled_layers.data(); + instance_info.enabledExtensionCount = static_cast(enabled_extensions.size()); + instance_info.ppEnabledExtensionNames = enabled_extensions.data(); + return &instance_info; +} +InstanceCreateInfo& InstanceCreateInfo::set_api_version(uint32_t major, uint32_t minor, uint32_t patch) { + this->api_version = VK_MAKE_API_VERSION(0, major, minor, patch); + return *this; +} +InstanceCreateInfo& InstanceCreateInfo::setup_WSI(const char* api_selection) { + add_extensions({"VK_KHR_surface", get_platform_wsi_extension(api_selection)}); + return *this; +} + +DeviceQueueCreateInfo::DeviceQueueCreateInfo() { queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; } +DeviceQueueCreateInfo::DeviceQueueCreateInfo(const VkDeviceQueueCreateInfo* create_info) { + queue_create_info = *create_info; + for (uint32_t i = 0; i < create_info->queueCount; i++) { + priorities.push_back(create_info->pQueuePriorities[i]); + } +} + +VkDeviceQueueCreateInfo DeviceQueueCreateInfo::get() noexcept { + queue_create_info.pQueuePriorities = priorities.data(); + queue_create_info.queueCount = 1; + queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + return queue_create_info; +} + +DeviceCreateInfo::DeviceCreateInfo(const VkDeviceCreateInfo* create_info) { + dev = *create_info; + for (uint32_t i = 0; i < create_info->enabledExtensionCount; i++) { + enabled_extensions.push_back(create_info->ppEnabledExtensionNames[i]); + } + for (uint32_t i = 0; i < create_info->enabledLayerCount; i++) { + enabled_layers.push_back(create_info->ppEnabledLayerNames[i]); + } + for (uint32_t i = 0; i < create_info->queueCreateInfoCount; i++) { + device_queue_infos.push_back(create_info->pQueueCreateInfos[i]); + } +} + +VkDeviceCreateInfo* DeviceCreateInfo::get() noexcept { + dev.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + dev.enabledLayerCount = static_cast(enabled_layers.size()); + dev.ppEnabledLayerNames = enabled_layers.data(); + dev.enabledExtensionCount = static_cast(enabled_extensions.size()); + dev.ppEnabledExtensionNames = enabled_extensions.data(); + uint32_t index = 0; + for (auto& queue : queue_info_details) { + queue.queue_create_info.queueFamilyIndex = index++; + queue.queue_create_info.queueCount = 1; + device_queue_infos.push_back(queue.get()); + } + + dev.queueCreateInfoCount = static_cast(device_queue_infos.size()); + dev.pQueueCreateInfos = device_queue_infos.data(); + return &dev; +} + +#if defined(WIN32) +std::string narrow(const std::wstring& utf16) { + if (utf16.empty()) { + return {}; + } + int size = WideCharToMultiByte(CP_UTF8, 0, utf16.data(), static_cast(utf16.size()), nullptr, 0, nullptr, nullptr); + if (size <= 0) { + return {}; + } + std::string utf8(size, '\0'); + if (WideCharToMultiByte(CP_UTF8, 0, utf16.data(), static_cast(utf16.size()), &utf8[0], size, nullptr, nullptr) != size) { + return {}; + } + return utf8; +} + +std::wstring widen(const std::string& utf8) { + if (utf8.empty()) { + return {}; + } + int size = MultiByteToWideChar(CP_UTF8, 0, utf8.data(), static_cast(utf8.size()), nullptr, 0); + if (size <= 0) { + return {}; + } + std::wstring utf16(size, L'\0'); + if (MultiByteToWideChar(CP_UTF8, 0, utf8.data(), static_cast(utf8.size()), &utf16[0], size) != size) { + return {}; + } + return utf16; +} +#else +std::string narrow(const std::string& utf16) { return utf16; } +std::string widen(const std::string& utf8) { return utf8; } +#endif diff --git a/local/recipes/libs/vulkan-loader/source/tests/framework/test_util.h b/local/recipes/libs/vulkan-loader/source/tests/framework/test_util.h new file mode 100644 index 0000000000..51decc734d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/framework/test_util.h @@ -0,0 +1,966 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +/* + * Contains all the utilities needed to make the framework and tests work. + * Contains: + * All the standard library includes and main platform specific includes + * Dll export macro + * Manifest ICD & Layer structs + * per-platform library loading - mirrors the vk_loader_platform + * LibraryWrapper - RAII wrapper for a library + * DispatchableHandle - RAII wrapper for vulkan dispatchable handle objects + * ostream overload for VkResult - prettifies googletest output + * Instance & Device create info helpers + * operator == overloads for many vulkan structs - more concise tests + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// Set of platforms with a common set of functionality which is queried throughout the program +#if defined(__linux__) || defined(__APPLE__) || defined(__Fuchsia__) || defined(__QNX__) || defined(__FreeBSD__) || \ + defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__GNU__) +#define COMMON_UNIX_PLATFORMS 1 +#else +#define COMMON_UNIX_PLATFORMS 0 +#endif + +#if defined(WIN32) +#include +#include +#include +#elif COMMON_UNIX_PLATFORMS +#include +#include +#include +#include +#include + +// Prevent macro collisions from +#undef major +#undef minor + +#endif + +#include +#include +#include + +#include FRAMEWORK_CONFIG_HEADER + +#if defined(__GNUC__) && __GNUC__ >= 4 +#define FRAMEWORK_EXPORT __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) +#define FRAMEWORK_EXPORT __attribute__((visibility("default"))) +#elif defined(WIN32) +#define FRAMEWORK_EXPORT __declspec(dllexport) +#else +#define FRAMEWORK_EXPORT +#endif + +// Define it here so that json_writer.h has access to these functions +#if defined(WIN32) +// Convert an UTF-16 wstring to an UTF-8 string +std::string narrow(const std::wstring& utf16); +// Convert an UTF-8 string to an UTF-16 wstring +std::wstring widen(const std::string& utf8); +#else +// Do nothing passthrough for the sake of Windows & UTF-16 +std::string narrow(const std::string& utf16); +// Do nothing passthrough for the sake of Windows & UTF-16 +std::string widen(const std::string& utf8); +#endif + +#include "json_writer.h" + +using GetFoldersFunc = std::function(const char*)>; + +// get_env_var() - returns a std::string of `name`. if report_failure is true, then it will log to stderr that it didn't find the +// env-var +// NOTE: This is only intended for test framework code, all test code MUST use EnvVarWrapper +std::string get_env_var(std::string const& name, bool report_failure = true); + +/* + * Wrapper around Environment Variables with common operations + * Since Environment Variables leak between tests, there needs to be RAII code to remove them during test cleanup + + */ + +// Wrapper to set & remove env-vars automatically +struct EnvVarWrapper { + // Constructor which unsets the env-var + EnvVarWrapper(std::string const& name) noexcept : name(name) { + initial_value = get_env_var(name, false); + remove_env_var(); + } + // Constructor which set the env-var to the specified value + EnvVarWrapper(std::string const& name, std::string const& value) noexcept : name(name), cur_value(value) { + initial_value = get_env_var(name, false); + set_env_var(); + } + ~EnvVarWrapper() noexcept { + remove_env_var(); + if (!initial_value.empty()) { + set_new_value(initial_value); + } + } + + // delete copy operators + EnvVarWrapper(const EnvVarWrapper&) = delete; + EnvVarWrapper& operator=(const EnvVarWrapper&) = delete; + + void set_new_value(std::string const& value) { + cur_value = value; + set_env_var(); + } + void add_to_list(std::string const& list_item) { + if (!cur_value.empty()) { + cur_value += OS_ENV_VAR_LIST_SEPARATOR; + } + cur_value += list_item; + set_env_var(); + } +#if defined(WIN32) + void add_to_list(std::wstring const& list_item) { + if (!cur_value.empty()) { + cur_value += OS_ENV_VAR_LIST_SEPARATOR; + } + cur_value += narrow(list_item); + set_env_var(); + } +#endif + void remove_value() const { remove_env_var(); } + const char* get() const { return name.c_str(); } + const char* value() const { return cur_value.c_str(); } + + private: + std::string name; + std::string cur_value; + std::string initial_value; + + void set_env_var(); + void remove_env_var() const; +#if defined(WIN32) + // Environment variable list separator - not for filesystem paths + const char OS_ENV_VAR_LIST_SEPARATOR = ';'; +#elif COMMON_UNIX_PLATFORMS + // Environment variable list separator - not for filesystem paths + const char OS_ENV_VAR_LIST_SEPARATOR = ':'; +#endif +}; + +// Windows specific error handling logic +#if defined(WIN32) +const long ERROR_SETENV_FAILED = 10543; // chosen at random, attempts to not conflict +const long ERROR_REMOVEDIRECTORY_FAILED = 10544; // chosen at random, attempts to not conflict +const char* win_api_error_str(LSTATUS status); +void print_error_message(LSTATUS status, const char* function_name, std::string optional_message = ""); +#endif + +// copy the contents of a std::string into a char array and add a null terminator at the end +// src - std::string to read from +// dst - char array to write to +// size_dst - number of characters in the dst array +inline void copy_string_to_char_array(std::string const& src, char* dst, size_t size_dst) { dst[src.copy(dst, size_dst - 1)] = 0; } + +#if defined(WIN32) +typedef HMODULE test_platform_dl_handle; +inline test_platform_dl_handle test_platform_open_library(const wchar_t* lib_path) { + // Try loading the library the original way first. + test_platform_dl_handle lib_handle = LoadLibraryW(lib_path); + if (lib_handle == nullptr && GetLastError() == ERROR_MOD_NOT_FOUND) { + // If that failed, then try loading it with broader search folders. + lib_handle = LoadLibraryExW(lib_path, nullptr, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); + } + return lib_handle; +} +inline void test_platform_open_library_print_error(std::filesystem::path const& libPath) { + std::wcerr << L"Unable to open library: " << libPath << L" due to: " << std::to_wstring(GetLastError()) << L"\n"; +} +inline void test_platform_close_library(test_platform_dl_handle library) { FreeLibrary(library); } +inline void* test_platform_get_proc_address(test_platform_dl_handle library, const char* name) { + assert(library); + assert(name); + return reinterpret_cast(GetProcAddress(library, name)); +} +inline char* test_platform_get_proc_address_error(const char* name) { + static char errorMsg[120]; + snprintf(errorMsg, 119, "Failed to find function \"%s\" in dynamic library", name); + return errorMsg; +} + +#elif COMMON_UNIX_PLATFORMS + +typedef void* test_platform_dl_handle; +inline test_platform_dl_handle test_platform_open_library(const char* libPath) { return dlopen(libPath, RTLD_LAZY | RTLD_LOCAL); } +inline void test_platform_open_library_print_error(std::filesystem::path const& libPath) { + std::wcerr << "Unable to open library: " << libPath << " due to: " << dlerror() << "\n"; +} +inline void test_platform_close_library(test_platform_dl_handle library) { + char* loader_disable_dynamic_library_unloading_env_var = getenv("VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING"); + if (NULL == loader_disable_dynamic_library_unloading_env_var || + 0 != strncmp(loader_disable_dynamic_library_unloading_env_var, "1", 2)) { + dlclose(library); + } +} +inline void* test_platform_get_proc_address(test_platform_dl_handle library, const char* name) { + assert(library); + assert(name); + return dlsym(library, name); +} +inline const char* test_platform_get_proc_address_error([[maybe_unused]] const char* name) { return dlerror(); } +#endif + +class FromVoidStarFunc { + private: + void* function; + + public: + FromVoidStarFunc(void* function) : function(function) {} + FromVoidStarFunc(PFN_vkVoidFunction function) : function(reinterpret_cast(function)) {} + + template + operator T() { + return reinterpret_cast(function); + } +}; + +struct LibraryWrapper { + explicit LibraryWrapper() noexcept {} + explicit LibraryWrapper(std::filesystem::path const& lib_path) noexcept : lib_path(lib_path) { + lib_handle = test_platform_open_library(lib_path.native().c_str()); + if (lib_handle == nullptr) { + test_platform_open_library_print_error(lib_path); + assert(lib_handle != nullptr && "Must be able to open library"); + } + } + ~LibraryWrapper() noexcept { + if (lib_handle != nullptr) { + test_platform_close_library(lib_handle); + lib_handle = nullptr; + } + } + LibraryWrapper(LibraryWrapper const& wrapper) = delete; + LibraryWrapper& operator=(LibraryWrapper const& wrapper) = delete; + LibraryWrapper(LibraryWrapper&& wrapper) noexcept : lib_handle(wrapper.lib_handle), lib_path(wrapper.lib_path) { + wrapper.lib_handle = nullptr; + } + LibraryWrapper& operator=(LibraryWrapper&& wrapper) noexcept { + if (this != &wrapper) { + if (lib_handle != nullptr) { + test_platform_close_library(lib_handle); + } + lib_handle = wrapper.lib_handle; + lib_path = wrapper.lib_path; + wrapper.lib_handle = nullptr; + } + return *this; + } + FromVoidStarFunc get_symbol(const char* symbol_name) const { + assert(lib_handle != nullptr && "Cannot get symbol with null library handle"); + void* symbol = test_platform_get_proc_address(lib_handle, symbol_name); + if (symbol == nullptr) { + fprintf(stderr, "Unable to open symbol %s: %s\n", symbol_name, test_platform_get_proc_address_error(symbol_name)); + assert(symbol != nullptr && "Must be able to get symbol"); + } + return FromVoidStarFunc(symbol); + } + + explicit operator bool() const noexcept { return lib_handle != nullptr; } + + test_platform_dl_handle lib_handle = nullptr; + std::filesystem::path lib_path; +}; + +template +PFN_vkVoidFunction to_vkVoidFunction(T func) { + return reinterpret_cast(func); +} +template +struct FRAMEWORK_EXPORT DispatchableHandle { + DispatchableHandle() { + auto ptr_handle = new VK_LOADER_DATA; + set_loader_magic_value(ptr_handle); + handle = reinterpret_cast(ptr_handle); + } + ~DispatchableHandle() { + if (handle) { + delete reinterpret_cast(handle); + } + handle = nullptr; + } + DispatchableHandle(DispatchableHandle const&) = delete; + DispatchableHandle& operator=(DispatchableHandle const&) = delete; + DispatchableHandle(DispatchableHandle&& other) noexcept : handle(other.handle) { other.handle = nullptr; } + DispatchableHandle& operator=(DispatchableHandle&& other) noexcept { + if (handle) { + delete reinterpret_cast(handle); + } + handle = other.handle; + other.handle = nullptr; + return *this; + } + bool operator==(T base_handle) { return base_handle == handle; } + bool operator!=(T base_handle) { return base_handle != handle; } + + T handle = nullptr; +}; + +// Stream operator for VkResult so GTEST will print out error codes as strings (automatically) +inline std::ostream& operator<<(std::ostream& os, const VkResult& result) { + switch (result) { + case (VK_SUCCESS): + return os << "VK_SUCCESS"; + case (VK_NOT_READY): + return os << "VK_NOT_READY"; + case (VK_TIMEOUT): + return os << "VK_TIMEOUT"; + case (VK_EVENT_SET): + return os << "VK_EVENT_SET"; + case (VK_EVENT_RESET): + return os << "VK_EVENT_RESET"; + case (VK_INCOMPLETE): + return os << "VK_INCOMPLETE"; + case (VK_ERROR_OUT_OF_HOST_MEMORY): + return os << "VK_ERROR_OUT_OF_HOST_MEMORY"; + case (VK_ERROR_OUT_OF_DEVICE_MEMORY): + return os << "VK_ERROR_OUT_OF_DEVICE_MEMORY"; + case (VK_ERROR_INITIALIZATION_FAILED): + return os << "VK_ERROR_INITIALIZATION_FAILED"; + case (VK_ERROR_DEVICE_LOST): + return os << "VK_ERROR_DEVICE_LOST"; + case (VK_ERROR_MEMORY_MAP_FAILED): + return os << "VK_ERROR_MEMORY_MAP_FAILED"; + case (VK_ERROR_LAYER_NOT_PRESENT): + return os << "VK_ERROR_LAYER_NOT_PRESENT"; + case (VK_ERROR_EXTENSION_NOT_PRESENT): + return os << "VK_ERROR_EXTENSION_NOT_PRESENT"; + case (VK_ERROR_FEATURE_NOT_PRESENT): + return os << "VK_ERROR_FEATURE_NOT_PRESENT"; + case (VK_ERROR_INCOMPATIBLE_DRIVER): + return os << "VK_ERROR_INCOMPATIBLE_DRIVER"; + case (VK_ERROR_TOO_MANY_OBJECTS): + return os << "VK_ERROR_TOO_MANY_OBJECTS"; + case (VK_ERROR_FORMAT_NOT_SUPPORTED): + return os << "VK_ERROR_FORMAT_NOT_SUPPORTED"; + case (VK_ERROR_FRAGMENTED_POOL): + return os << "VK_ERROR_FRAGMENTED_POOL"; + case (VK_ERROR_UNKNOWN): + return os << "VK_ERROR_UNKNOWN"; + case (VK_ERROR_OUT_OF_POOL_MEMORY): + return os << "VK_ERROR_OUT_OF_POOL_MEMORY"; + case (VK_ERROR_INVALID_EXTERNAL_HANDLE): + return os << "VK_ERROR_INVALID_EXTERNAL_HANDLE"; + case (VK_ERROR_FRAGMENTATION): + return os << "VK_ERROR_FRAGMENTATION"; + case (VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS): + return os << "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS"; + case (VK_ERROR_SURFACE_LOST_KHR): + return os << "VK_ERROR_SURFACE_LOST_KHR"; + case (VK_ERROR_NATIVE_WINDOW_IN_USE_KHR): + return os << "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"; + case (VK_SUBOPTIMAL_KHR): + return os << "VK_SUBOPTIMAL_KHR"; + case (VK_ERROR_OUT_OF_DATE_KHR): + return os << "VK_ERROR_OUT_OF_DATE_KHR"; + case (VK_ERROR_INCOMPATIBLE_DISPLAY_KHR): + return os << "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"; + case (VK_ERROR_VALIDATION_FAILED_EXT): + return os << "VK_ERROR_VALIDATION_FAILED_EXT"; + case (VK_ERROR_INVALID_SHADER_NV): + return os << "VK_ERROR_INVALID_SHADER_NV"; + case (VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT): + return os << "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT"; + case (VK_ERROR_NOT_PERMITTED_EXT): + return os << "VK_ERROR_NOT_PERMITTED_EXT"; + case (VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT): + return os << "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT"; + case (VK_THREAD_IDLE_KHR): + return os << "VK_THREAD_IDLE_KHR"; + case (VK_THREAD_DONE_KHR): + return os << "VK_THREAD_DONE_KHR"; + case (VK_OPERATION_DEFERRED_KHR): + return os << "VK_OPERATION_DEFERRED_KHR"; + case (VK_OPERATION_NOT_DEFERRED_KHR): + return os << "VK_OPERATION_NOT_DEFERRED_KHR"; + case (VK_PIPELINE_COMPILE_REQUIRED_EXT): + return os << "VK_PIPELINE_COMPILE_REQUIRED_EXT"; + case (VK_RESULT_MAX_ENUM): + return os << "VK_RESULT_MAX_ENUM"; + case (VK_ERROR_COMPRESSION_EXHAUSTED_EXT): + return os << "VK_ERROR_COMPRESSION_EXHAUSTED_EXT"; + case (VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR): + return os << "VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR"; + case (VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR): + return os << "VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR"; + case (VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR): + return os << "VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR"; + case (VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR): + return os << "VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR"; + case (VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR): + return os << "VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR"; + case (VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR): + return os << "VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR"; + case (VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR): + return os << "VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR"; + case (VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT): + return os << "VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT"; + case (VK_PIPELINE_BINARY_MISSING_KHR): + return os << "VK_PIPELINE_BINARY_MISSING_KHR"; + case (VK_ERROR_NOT_ENOUGH_SPACE_KHR): + return os << "VK_ERROR_NOT_ENOUGH_SPACE_KHR"; + } + return os << static_cast(result); +} + +const char* get_platform_wsi_extension([[maybe_unused]] const char* api_selection); + +bool string_eq(const char* a, const char* b) noexcept; +bool string_eq(const char* a, const char* b, size_t len) noexcept; + +inline std::string version_to_string(uint32_t version) { + std::string out = std::to_string(VK_API_VERSION_MAJOR(version)) + "." + std::to_string(VK_API_VERSION_MINOR(version)) + "." + + std::to_string(VK_API_VERSION_PATCH(version)); + if (VK_API_VERSION_VARIANT(version) != 0) out += std::to_string(VK_API_VERSION_VARIANT(version)) + "." + out; + return out; +} + +// Macro to ease the definition of variables with builder member functions +// type = type of the variable +// name = name of the variable +// default_value = value to default initialize, use {} if nothing else makes sense +#define BUILDER_VALUE_WITH_DEFAULT(type, name, default_value) \ + type name = default_value; \ + auto set_##name(type const& name)->decltype(*this) { \ + this->name = name; \ + return *this; \ + } + +#define BUILDER_VALUE(type, name) BUILDER_VALUE_WITH_DEFAULT(type, name, {}) + +// Macro to ease the definition of vectors with builder member functions +// type = type of the variable +// name = name of the variable +// singular_name = used for the `add_singular_name` member function +#define BUILDER_VECTOR(type, name, singular_name) \ + std::vector name; \ + auto add_##singular_name(type const& singular_name)->decltype(*this) { \ + this->name.push_back(singular_name); \ + return *this; \ + } \ + auto add_##singular_name##s(std::vector const& singular_name)->decltype(*this) { \ + for (auto& elem : singular_name) this->name.push_back(elem); \ + return *this; \ + } +// Like BUILDER_VECTOR but for move only types - where passing in means giving up ownership +#define BUILDER_VECTOR_MOVE_ONLY(type, name, singular_name) \ + std::vector name; \ + auto add_##singular_name(type&& singular_name)->decltype(*this) { \ + this->name.push_back(std::move(singular_name)); \ + return *this; \ + } + +struct ManifestVersion { + BUILDER_VALUE_WITH_DEFAULT(uint32_t, major, 1) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, minor, 0) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, patch, 0) + + std::string get_version_str() const noexcept { + return std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(patch); + } +}; + +// ManifestICD builder +struct ManifestICD { + BUILDER_VALUE(ManifestVersion, file_format_version) + BUILDER_VALUE(uint32_t, api_version) + BUILDER_VALUE(std::filesystem::path, lib_path) + BUILDER_VALUE(bool, is_portability_driver) + BUILDER_VALUE(std::string, library_arch) + std::string get_manifest_str() const; +}; + +// ManifestLayer builder +struct ManifestLayer { + struct LayerDescription { + enum class Type { INSTANCE, GLOBAL, DEVICE }; + std::string get_type_str(Type layer_type) const { + if (layer_type == Type::GLOBAL) + return "GLOBAL"; + else if (layer_type == Type::DEVICE) + return "DEVICE"; + else // default + return "INSTANCE"; + } + struct FunctionOverride { + BUILDER_VALUE(std::string, vk_func) + BUILDER_VALUE(std::string, override_name) + + void get_manifest_str(JsonWriter& writer) const { writer.AddKeyedString(vk_func, override_name); } + }; + struct Extension { + Extension() noexcept {} + Extension(std::string name, uint32_t spec_version = 0, std::vector entrypoints = {}) noexcept + : name(name), spec_version(spec_version), entrypoints(entrypoints) {} + std::string name; + uint32_t spec_version = 0; + std::vector entrypoints; + void get_manifest_str(JsonWriter& writer) const; + }; + BUILDER_VALUE(std::string, name) + BUILDER_VALUE_WITH_DEFAULT(Type, type, Type::INSTANCE) + BUILDER_VALUE(std::filesystem::path, lib_path) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, api_version, VK_API_VERSION_1_0) + BUILDER_VALUE(uint32_t, implementation_version) + BUILDER_VALUE(std::string, description) + BUILDER_VECTOR(FunctionOverride, functions, function) + BUILDER_VECTOR(Extension, instance_extensions, instance_extension) + BUILDER_VECTOR(Extension, device_extensions, device_extension) + BUILDER_VALUE(std::string, enable_environment) + BUILDER_VALUE(std::string, disable_environment) + BUILDER_VECTOR(std::string, component_layers, component_layer) + BUILDER_VECTOR(std::string, blacklisted_layers, blacklisted_layer) + BUILDER_VECTOR(std::filesystem::path, override_paths, override_path) + BUILDER_VECTOR(FunctionOverride, pre_instance_functions, pre_instance_function) + BUILDER_VECTOR(std::string, app_keys, app_key) + BUILDER_VALUE(std::string, library_arch) + + void get_manifest_str(JsonWriter& writer) const; + VkLayerProperties get_layer_properties() const; + }; + BUILDER_VALUE(ManifestVersion, file_format_version) + BUILDER_VECTOR(LayerDescription, layers, layer) + + std::string get_manifest_str() const; +}; + +struct Extension { + BUILDER_VALUE(std::string, extensionName) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, specVersion, VK_API_VERSION_1_0) + + Extension(const char* name, uint32_t specVersion = VK_API_VERSION_1_0) noexcept + : extensionName(name), specVersion(specVersion) {} + Extension(std::string extensionName, uint32_t specVersion = VK_API_VERSION_1_0) noexcept + : extensionName(extensionName), specVersion(specVersion) {} + + VkExtensionProperties get() const noexcept { + VkExtensionProperties props{}; + copy_string_to_char_array(extensionName, &props.extensionName[0], VK_MAX_EXTENSION_NAME_SIZE); + props.specVersion = specVersion; + return props; + } +}; + +struct MockQueueFamilyProperties { + BUILDER_VALUE(VkQueueFamilyProperties, properties) + BUILDER_VALUE(bool, support_present) + + VkQueueFamilyProperties get() const noexcept { return properties; } +}; + +struct InstanceCreateInfo { + BUILDER_VALUE(VkInstanceCreateInfo, instance_info) + BUILDER_VALUE(VkApplicationInfo, application_info) + BUILDER_VALUE(std::string, app_name) + BUILDER_VALUE(std::string, engine_name) + BUILDER_VALUE(uint32_t, flags) + BUILDER_VALUE(uint32_t, app_version) + BUILDER_VALUE(uint32_t, engine_version) + BUILDER_VALUE_WITH_DEFAULT(uint32_t, api_version, VK_API_VERSION_1_0) + BUILDER_VECTOR(const char*, enabled_layers, layer) + BUILDER_VECTOR(const char*, enabled_extensions, extension) + // tell the get() function to not provide `application_info` + BUILDER_VALUE_WITH_DEFAULT(bool, fill_in_application_info, true) + + InstanceCreateInfo(); + + VkInstanceCreateInfo* get() noexcept; + + InstanceCreateInfo& set_api_version(uint32_t major, uint32_t minor, uint32_t patch); + + InstanceCreateInfo& setup_WSI(const char* api_selection = nullptr); +}; + +struct DeviceQueueCreateInfo { + DeviceQueueCreateInfo(); + DeviceQueueCreateInfo(const VkDeviceQueueCreateInfo* create_info); + + BUILDER_VALUE(VkDeviceQueueCreateInfo, queue_create_info) + BUILDER_VECTOR(float, priorities, priority) + + VkDeviceQueueCreateInfo get() noexcept; +}; + +struct DeviceCreateInfo { + DeviceCreateInfo() = default; + DeviceCreateInfo(const VkDeviceCreateInfo* create_info); + + BUILDER_VALUE(VkDeviceCreateInfo, dev) + BUILDER_VECTOR(const char*, enabled_extensions, extension) + BUILDER_VECTOR(const char*, enabled_layers, layer) + BUILDER_VECTOR(DeviceQueueCreateInfo, queue_info_details, device_queue) + + VkDeviceCreateInfo* get() noexcept; + + private: + std::vector device_queue_infos; +}; + +inline bool operator==(const VkExtent3D& a, const VkExtent3D& b) { + return a.width == b.width && a.height == b.height && a.depth == b.depth; +} +inline bool operator!=(const VkExtent3D& a, const VkExtent3D& b) { return !(a == b); } + +inline bool operator==(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties& b) { + return a.minImageTransferGranularity == b.minImageTransferGranularity && a.queueCount == b.queueCount && + a.queueFlags == b.queueFlags && a.timestampValidBits == b.timestampValidBits; +} +inline bool operator!=(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties& b) { return !(a == b); } + +inline bool operator==(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties2& b) { return a == b.queueFamilyProperties; } +inline bool operator!=(const VkQueueFamilyProperties& a, const VkQueueFamilyProperties2& b) { return a != b.queueFamilyProperties; } + +inline bool operator==(const VkLayerProperties& a, const VkLayerProperties& b) { + return string_eq(a.layerName, b.layerName, 256) && string_eq(a.description, b.description, 256) && + a.implementationVersion == b.implementationVersion && a.specVersion == b.specVersion; +} +inline bool operator!=(const VkLayerProperties& a, const VkLayerProperties& b) { return !(a == b); } + +inline bool operator==(const VkExtensionProperties& a, const VkExtensionProperties& b) { + return string_eq(a.extensionName, b.extensionName, 256) && a.specVersion == b.specVersion; +} +inline bool operator!=(const VkExtensionProperties& a, const VkExtensionProperties& b) { return !(a == b); } + +inline bool operator==(const VkPhysicalDeviceFeatures& feats1, const VkPhysicalDeviceFeatures2& feats2) { + return feats1.robustBufferAccess == feats2.features.robustBufferAccess && + feats1.fullDrawIndexUint32 == feats2.features.fullDrawIndexUint32 && + feats1.imageCubeArray == feats2.features.imageCubeArray && feats1.independentBlend == feats2.features.independentBlend && + feats1.geometryShader == feats2.features.geometryShader && + feats1.tessellationShader == feats2.features.tessellationShader && + feats1.sampleRateShading == feats2.features.sampleRateShading && feats1.dualSrcBlend == feats2.features.dualSrcBlend && + feats1.logicOp == feats2.features.logicOp && feats1.multiDrawIndirect == feats2.features.multiDrawIndirect && + feats1.drawIndirectFirstInstance == feats2.features.drawIndirectFirstInstance && + feats1.depthClamp == feats2.features.depthClamp && feats1.depthBiasClamp == feats2.features.depthBiasClamp && + feats1.fillModeNonSolid == feats2.features.fillModeNonSolid && feats1.depthBounds == feats2.features.depthBounds && + feats1.wideLines == feats2.features.wideLines && feats1.largePoints == feats2.features.largePoints && + feats1.alphaToOne == feats2.features.alphaToOne && feats1.multiViewport == feats2.features.multiViewport && + feats1.samplerAnisotropy == feats2.features.samplerAnisotropy && + feats1.textureCompressionETC2 == feats2.features.textureCompressionETC2 && + feats1.textureCompressionASTC_LDR == feats2.features.textureCompressionASTC_LDR && + feats1.textureCompressionBC == feats2.features.textureCompressionBC && + feats1.occlusionQueryPrecise == feats2.features.occlusionQueryPrecise && + feats1.pipelineStatisticsQuery == feats2.features.pipelineStatisticsQuery && + feats1.vertexPipelineStoresAndAtomics == feats2.features.vertexPipelineStoresAndAtomics && + feats1.fragmentStoresAndAtomics == feats2.features.fragmentStoresAndAtomics && + feats1.shaderTessellationAndGeometryPointSize == feats2.features.shaderTessellationAndGeometryPointSize && + feats1.shaderImageGatherExtended == feats2.features.shaderImageGatherExtended && + feats1.shaderStorageImageExtendedFormats == feats2.features.shaderStorageImageExtendedFormats && + feats1.shaderStorageImageMultisample == feats2.features.shaderStorageImageMultisample && + feats1.shaderStorageImageReadWithoutFormat == feats2.features.shaderStorageImageReadWithoutFormat && + feats1.shaderStorageImageWriteWithoutFormat == feats2.features.shaderStorageImageWriteWithoutFormat && + feats1.shaderUniformBufferArrayDynamicIndexing == feats2.features.shaderUniformBufferArrayDynamicIndexing && + feats1.shaderSampledImageArrayDynamicIndexing == feats2.features.shaderSampledImageArrayDynamicIndexing && + feats1.shaderStorageBufferArrayDynamicIndexing == feats2.features.shaderStorageBufferArrayDynamicIndexing && + feats1.shaderStorageImageArrayDynamicIndexing == feats2.features.shaderStorageImageArrayDynamicIndexing && + feats1.shaderClipDistance == feats2.features.shaderClipDistance && + feats1.shaderCullDistance == feats2.features.shaderCullDistance && + feats1.shaderFloat64 == feats2.features.shaderFloat64 && feats1.shaderInt64 == feats2.features.shaderInt64 && + feats1.shaderInt16 == feats2.features.shaderInt16 && + feats1.shaderResourceResidency == feats2.features.shaderResourceResidency && + feats1.shaderResourceMinLod == feats2.features.shaderResourceMinLod && + feats1.sparseBinding == feats2.features.sparseBinding && + feats1.sparseResidencyBuffer == feats2.features.sparseResidencyBuffer && + feats1.sparseResidencyImage2D == feats2.features.sparseResidencyImage2D && + feats1.sparseResidencyImage3D == feats2.features.sparseResidencyImage3D && + feats1.sparseResidency2Samples == feats2.features.sparseResidency2Samples && + feats1.sparseResidency4Samples == feats2.features.sparseResidency4Samples && + feats1.sparseResidency8Samples == feats2.features.sparseResidency8Samples && + feats1.sparseResidency16Samples == feats2.features.sparseResidency16Samples && + feats1.sparseResidencyAliased == feats2.features.sparseResidencyAliased && + feats1.variableMultisampleRate == feats2.features.variableMultisampleRate && + feats1.inheritedQueries == feats2.features.inheritedQueries; +} + +inline bool operator==(const VkPhysicalDeviceMemoryProperties& props1, const VkPhysicalDeviceMemoryProperties2& props2) { + bool equal = true; + equal = equal && props1.memoryTypeCount == props2.memoryProperties.memoryTypeCount; + equal = equal && props1.memoryHeapCount == props2.memoryProperties.memoryHeapCount; + for (uint32_t i = 0; i < props1.memoryHeapCount; ++i) { + equal = equal && props1.memoryHeaps[i].size == props2.memoryProperties.memoryHeaps[i].size; + equal = equal && props1.memoryHeaps[i].flags == props2.memoryProperties.memoryHeaps[i].flags; + } + for (uint32_t i = 0; i < props1.memoryTypeCount; ++i) { + equal = equal && props1.memoryTypes[i].propertyFlags == props2.memoryProperties.memoryTypes[i].propertyFlags; + equal = equal && props1.memoryTypes[i].heapIndex == props2.memoryProperties.memoryTypes[i].heapIndex; + } + return equal; +} +inline bool operator==(const VkSparseImageFormatProperties& props1, const VkSparseImageFormatProperties& props2) { + return props1.aspectMask == props2.aspectMask && props1.imageGranularity.width == props2.imageGranularity.width && + props1.imageGranularity.height == props2.imageGranularity.height && + props1.imageGranularity.depth == props2.imageGranularity.depth && props1.flags == props2.flags; +} +inline bool operator==(const VkSparseImageFormatProperties& props1, const VkSparseImageFormatProperties2& props2) { + return props1 == props2.properties; +} +inline bool operator==(const VkExternalMemoryProperties& props1, const VkExternalMemoryProperties& props2) { + return props1.externalMemoryFeatures == props2.externalMemoryFeatures && + props1.exportFromImportedHandleTypes == props2.exportFromImportedHandleTypes && + props1.compatibleHandleTypes == props2.compatibleHandleTypes; +} +inline bool operator==(const VkExternalSemaphoreProperties& props1, const VkExternalSemaphoreProperties& props2) { + return props1.externalSemaphoreFeatures == props2.externalSemaphoreFeatures && + props1.exportFromImportedHandleTypes == props2.exportFromImportedHandleTypes && + props1.compatibleHandleTypes == props2.compatibleHandleTypes; +} +inline bool operator==(const VkExternalFenceProperties& props1, const VkExternalFenceProperties& props2) { + return props1.externalFenceFeatures == props2.externalFenceFeatures && + props1.exportFromImportedHandleTypes == props2.exportFromImportedHandleTypes && + props1.compatibleHandleTypes == props2.compatibleHandleTypes; +} +inline bool operator==(const VkSurfaceCapabilitiesKHR& props1, const VkSurfaceCapabilitiesKHR& props2) { + return props1.minImageCount == props2.minImageCount && props1.maxImageCount == props2.maxImageCount && + props1.currentExtent.width == props2.currentExtent.width && props1.currentExtent.height == props2.currentExtent.height && + props1.minImageExtent.width == props2.minImageExtent.width && + props1.minImageExtent.height == props2.minImageExtent.height && + props1.maxImageExtent.width == props2.maxImageExtent.width && + props1.maxImageExtent.height == props2.maxImageExtent.height && + props1.maxImageArrayLayers == props2.maxImageArrayLayers && props1.supportedTransforms == props2.supportedTransforms && + props1.currentTransform == props2.currentTransform && props1.supportedCompositeAlpha == props2.supportedCompositeAlpha && + props1.supportedUsageFlags == props2.supportedUsageFlags; +} +inline bool operator==(const VkSurfacePresentScalingCapabilitiesEXT& caps1, const VkSurfacePresentScalingCapabilitiesEXT& caps2) { + return caps1.supportedPresentScaling == caps2.supportedPresentScaling && + caps1.supportedPresentGravityX == caps2.supportedPresentGravityX && + caps1.supportedPresentGravityY == caps2.supportedPresentGravityY && + caps1.minScaledImageExtent.width == caps2.minScaledImageExtent.width && + caps1.minScaledImageExtent.height == caps2.minScaledImageExtent.height && + caps1.maxScaledImageExtent.width == caps2.maxScaledImageExtent.width && + caps1.maxScaledImageExtent.height == caps2.maxScaledImageExtent.height; +} +inline bool operator==(const VkSurfaceFormatKHR& format1, const VkSurfaceFormatKHR& format2) { + return format1.format == format2.format && format1.colorSpace == format2.colorSpace; +} +inline bool operator==(const VkSurfaceFormatKHR& format1, const VkSurfaceFormat2KHR& format2) { + return format1 == format2.surfaceFormat; +} +inline bool operator==(const VkDisplayPropertiesKHR& props1, const VkDisplayPropertiesKHR& props2) { + return props1.display == props2.display && props1.physicalDimensions.width == props2.physicalDimensions.width && + props1.physicalDimensions.height == props2.physicalDimensions.height && + props1.physicalResolution.width == props2.physicalResolution.width && + props1.physicalResolution.height == props2.physicalResolution.height && + props1.supportedTransforms == props2.supportedTransforms && props1.planeReorderPossible == props2.planeReorderPossible && + props1.persistentContent == props2.persistentContent; +} +inline bool operator==(const VkDisplayPropertiesKHR& props1, const VkDisplayProperties2KHR& props2) { + return props1 == props2.displayProperties; +} +inline bool operator==(const VkDisplayModePropertiesKHR& disp1, const VkDisplayModePropertiesKHR& disp2) { + return disp1.displayMode == disp2.displayMode && disp1.parameters.visibleRegion.width == disp2.parameters.visibleRegion.width && + disp1.parameters.visibleRegion.height == disp2.parameters.visibleRegion.height && + disp1.parameters.refreshRate == disp2.parameters.refreshRate; +} + +inline bool operator==(const VkDisplayModePropertiesKHR& disp1, const VkDisplayModeProperties2KHR& disp2) { + return disp1 == disp2.displayModeProperties; +} +inline bool operator==(const VkDisplayPlaneCapabilitiesKHR& caps1, const VkDisplayPlaneCapabilitiesKHR& caps2) { + return caps1.supportedAlpha == caps2.supportedAlpha && caps1.minSrcPosition.x == caps2.minSrcPosition.x && + caps1.minSrcPosition.y == caps2.minSrcPosition.y && caps1.maxSrcPosition.x == caps2.maxSrcPosition.x && + caps1.maxSrcPosition.y == caps2.maxSrcPosition.y && caps1.minSrcExtent.width == caps2.minSrcExtent.width && + caps1.minSrcExtent.height == caps2.minSrcExtent.height && caps1.maxSrcExtent.width == caps2.maxSrcExtent.width && + caps1.maxSrcExtent.height == caps2.maxSrcExtent.height && caps1.minDstPosition.x == caps2.minDstPosition.x && + caps1.minDstPosition.y == caps2.minDstPosition.y && caps1.maxDstPosition.x == caps2.maxDstPosition.x && + caps1.maxDstPosition.y == caps2.maxDstPosition.y && caps1.minDstExtent.width == caps2.minDstExtent.width && + caps1.minDstExtent.height == caps2.minDstExtent.height && caps1.maxDstExtent.width == caps2.maxDstExtent.width && + caps1.maxDstExtent.height == caps2.maxDstExtent.height; +} + +inline bool operator==(const VkDisplayPlaneCapabilitiesKHR& caps1, const VkDisplayPlaneCapabilities2KHR& caps2) { + return caps1 == caps2.capabilities; +} +inline bool operator==(const VkDisplayPlanePropertiesKHR& props1, const VkDisplayPlanePropertiesKHR& props2) { + return props1.currentDisplay == props2.currentDisplay && props1.currentStackIndex == props2.currentStackIndex; +} +inline bool operator==(const VkDisplayPlanePropertiesKHR& props1, const VkDisplayPlaneProperties2KHR& props2) { + return props1 == props2.displayPlaneProperties; +} +inline bool operator==(const VkExtent2D& ext1, const VkExtent2D& ext2) { + return ext1.height == ext2.height && ext1.width == ext2.width; +} +// Allow comparison of vectors of different types as long as their elements are comparable (just has to make sure to only apply when +// T != U) +template >> +bool operator==(const std::vector& a, const std::vector& b) { + return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](const auto& left, const auto& right) { return left == right; }); +} + +struct VulkanFunction { + std::string name; + PFN_vkVoidFunction function = nullptr; +}; + +template +bool check_permutation(std::initializer_list expected, std::array const& returned) { + if (expected.size() != returned.size()) return false; + for (uint32_t i = 0; i < expected.size(); i++) { + auto found = std::find_if(std::begin(returned), std::end(returned), + [&](T elem) { return string_eq(*(expected.begin() + i), elem.layerName); }); + if (found == std::end(returned)) return false; + } + return true; +} +template +bool check_permutation(std::initializer_list expected, std::vector const& returned) { + if (expected.size() != returned.size()) return false; + for (uint32_t i = 0; i < expected.size(); i++) { + auto found = std::find_if(std::begin(returned), std::end(returned), + [&](T elem) { return string_eq(*(expected.begin() + i), elem.layerName); }); + if (found == std::end(returned)) return false; + } + return true; +} + +inline bool contains(std::vector const& vec, const char* name) { + return std::any_of(std::begin(vec), std::end(vec), + [name](VkExtensionProperties const& elem) { return string_eq(name, elem.extensionName); }); +} +inline bool contains(std::vector const& vec, const char* name) { + return std::any_of(std::begin(vec), std::end(vec), + [name](VkLayerProperties const& elem) { return string_eq(name, elem.layerName); }); +} + +#if defined(__linux__) || defined(__GNU__) + +// find application path + name. Path cannot be longer than 1024, returns NULL if it is greater than that. +inline std::string test_platform_executable_path() { + std::string buffer; + buffer.resize(1024); + ssize_t count = readlink("/proc/self/exe", &buffer[0], buffer.size()); + if (count == -1) return NULL; + if (count == 0) return NULL; + buffer[count] = '\0'; + buffer.resize(count); + return buffer; +} +#elif defined(__APPLE__) +#include +inline std::string test_platform_executable_path() { + std::string buffer; + buffer.resize(1024); + pid_t pid = getpid(); + int ret = proc_pidpath(pid, &buffer[0], static_cast(buffer.size())); + if (ret <= 0) return NULL; + buffer[ret] = '\0'; + buffer.resize(ret); + return buffer; +} +#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) +#include +inline std::string test_platform_executable_path() { + int mib[] = { + CTL_KERN, +#if defined(__NetBSD__) + KERN_PROC_ARGS, + -1, + KERN_PROC_PATHNAME, +#else + KERN_PROC, + KERN_PROC_PATHNAME, + -1, +#endif + }; + std::string buffer; + buffer.resize(1024); + size_t size = buffer.size(); + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), &buffer[0], &size, NULL, 0) < 0) { + return NULL; + } + buffer.resize(size); + + return buffer; +} +#elif defined(__Fuchsia__) || defined(__OpenBSD__) +inline std::string test_platform_executable_path() { return {}; } +#elif defined(__QNX__) + +#ifndef SYSCONFDIR +#define SYSCONFDIR "/etc" +#endif + +#include +#include + +inline std::string test_platform_executable_path() { + std::string buffer; + buffer.resize(1024); + int fd = open("/proc/self/exefile", O_RDONLY); + ssize_t rdsize; + + if (fd == -1) { + return NULL; + } + + rdsize = read(fd, &buffer[0], buffer.size()); + if (rdsize < 0) { + return NULL; + } + buffer[rdsize] = 0x00; + close(fd); + buffer.resize(rdsize); + + return buffer; +} +#endif // defined (__QNX__) +#if defined(WIN32) +inline std::string test_platform_executable_path() { + std::string buffer; + buffer.resize(1024); + DWORD ret = GetModuleFileName(NULL, static_cast(&buffer[0]), (DWORD)buffer.size()); + if (ret == 0) return NULL; + if (ret > buffer.size()) return NULL; + buffer.resize(ret); + buffer[ret] = '\0'; + return narrow(std::filesystem::path(buffer).native()); +} + +#endif diff --git a/local/recipes/libs/vulkan-loader/source/tests/integration/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/integration/CMakeLists.txt new file mode 100644 index 0000000000..e0f87e654a --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/integration/CMakeLists.txt @@ -0,0 +1,39 @@ +# ~~~ +# Copyright (c) 2023 Valve Corporation +# Copyright (c) 2023 LunarG, 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. +# ~~~ +cmake_minimum_required(VERSION 3.22.1) + +project(INTEGRATION LANGUAGES C) + +find_package(VulkanLoader REQUIRED CONFIG) + +# The intent is ensuring we don't accidentally change the names of these +# targets. Since it would break downstream users. +if (NOT TARGET Vulkan::Loader) + message(FATAL_ERROR "Vulkan::Loader target not defined!") +endif() + +if (NOT DEFINED VulkanLoader_VERSION) + message(FATAL_ERROR "VulkanLoader_VERSION not defined!") +endif() +message(STATUS "VulkanLoader_VERSION = ${VulkanLoader_VERSION}") + +# NOTE: This check is NOT sufficient to ensure vulkan.pc is actually valid +find_package(PkgConfig) +if(PKG_CONFIG_FOUND) + find_file(VULKAN_PC vulkan.pc PATH_SUFFIXES lib/pkgconfig REQUIRED) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --validate ${VULKAN_PC}) +endif() diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/live_verification/CMakeLists.txt new file mode 100644 index 0000000000..78e1f1aadc --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/CMakeLists.txt @@ -0,0 +1,33 @@ +# ~~~ +# Copyright (c) 2022 Valve Corporation +# Copyright (c) 2022 LunarG, 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. +# ~~~ + +add_executable(dynamic_rendering_get_proc_addr dynamic_rendering_get_proc_addr.cpp) +target_link_libraries(dynamic_rendering_get_proc_addr testing_dependencies) + +add_subdirectory(dynamic_loader_behavior) + +if(APPLE_STATIC_LOADER) + add_executable(macos_static_loader_build macos_static_loader_build.cpp) + target_link_libraries(macos_static_loader_build loader_common_options vulkan Vulkan::Headers) + if (TEST_USE_THREAD_SANITIZER) + target_compile_options(macos_static_loader_build PUBLIC -fsanitize=thread) + target_link_options(macos_static_loader_build PUBLIC -fsanitize=thread) + endif() +endif() + +add_executable(time_dynamic_loading time_dynamic_loading.cpp) +target_link_libraries(time_dynamic_loading Vulkan::Headers vulkan) diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/CMakeLists.txt b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/CMakeLists.txt new file mode 100644 index 0000000000..67eacd5ad8 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/CMakeLists.txt @@ -0,0 +1,49 @@ +# ~~~ +# Copyright (c) 2022 Valve Corporation +# Copyright (c) 2022 LunarG, 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. +# ~~~ + +if (WIN32) + #tests use dlsym and linux specific library names +else() +add_library(dynamic_library_a dynamic_library.cpp) +target_link_libraries(dynamic_library_a PUBLIC testing_framework_util) +target_compile_definitions(dynamic_library_a PRIVATE PRINT_OUTPUT_A) + +add_library(dynamic_library_b dynamic_library.cpp) +target_link_libraries(dynamic_library_b PUBLIC testing_framework_util) +target_compile_definitions(dynamic_library_b PRIVATE PRINT_OUTPUT_B) + +add_library(dynamic_library_c dynamic_library.cpp) +target_link_libraries(dynamic_library_c PUBLIC testing_framework_util) +target_compile_definitions(dynamic_library_c PRIVATE PRINT_OUTPUT_C) + +add_executable(test_dynamic_linking_a_first test_dynamic_linking.cpp) +add_executable(test_dynamic_linking_b_first test_dynamic_linking.cpp) +add_executable(test_dynamic_linking_c_then_load test_dynamic_linking.cpp) +target_link_libraries(test_dynamic_linking_a_first PUBLIC dynamic_library_a dynamic_library_b) +target_link_libraries(test_dynamic_linking_b_first PUBLIC dynamic_library_b dynamic_library_a) +target_link_libraries(test_dynamic_linking_c_then_load PUBLIC dynamic_library_c) +target_compile_definitions(test_dynamic_linking_c_then_load PRIVATE PRINT_OUTPUT_C) + + +add_executable(test_dynamic_loading test_dynamic_loading.cpp) +target_link_libraries(test_dynamic_loading PUBLIC testing_framework_util) + +add_executable(test_dynamic_loading_and_linking test_dynamic_loading_and_linking.cpp) +target_link_libraries(test_dynamic_loading_and_linking PUBLIC testing_framework_util) +target_link_libraries(test_dynamic_loading_and_linking PUBLIC dynamic_library_a) + +endif() diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.cpp new file mode 100644 index 0000000000..3126cad7a9 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "dynamic_library.h" + +FRAMEWORK_EXPORT char do_logic() { +#if defined(PRINT_OUTPUT_A) + return 'A'; +#elif defined(PRINT_OUTPUT_B) + return 'B'; +#elif defined(PRINT_OUTPUT_C) + return 'C'; +#endif +} + +FRAMEWORK_EXPORT void init() { +#if defined(PRINT_OUTPUT_A) + static LibraryWrapper b{}; + static LibraryWrapper a{}; + a = LibraryWrapper{"./libdynamic_library_a.dylib"}; + b = LibraryWrapper{"./libdynamic_library_b.dylib"}; +#endif +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.h b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.h new file mode 100644 index 0000000000..1d88d306e6 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_library.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_util.h" + +extern "C" { + +using DoLogicFunction = char (*)(); +#define DO_LOGIC_FUNCTION_NAME "do_logic" +FRAMEWORK_EXPORT char do_logic(); + +using InitFunction = void (*)(); +#define INIT_FUNCTION_NAME "init" +FRAMEWORK_EXPORT void init(); +}; + +#if defined(WIN32) +#if !defined(LIB_EXT) +#define LIB_EXT "dll" +#endif +#elif defined(__APPLE__) +#if !defined(LIB_EXT) +#define LIB_EXT "dylib" +#endif +#else +#if !defined(LIB_EXT) +#define LIB_EXT "so" +#endif +#endif diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_loading_behavior.md b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_loading_behavior.md new file mode 100644 index 0000000000..3f7f50876d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/dynamic_loading_behavior.md @@ -0,0 +1,31 @@ +# General behavior of dynamic linkers on linux and macOS + +## Linking only + +Symbols are found based on link order. If two libraries export the same symbol, +the first library in the link list is the library which is called. + +## Loading + +Applications cannot load symbols without specifying a library. +Putting RTLD_NEXT in dlsym will not find any symbols even if a loaded library +should contain them. +An app _must_ reference a library that was loaded with `dlopen` to be able to +get at its exported symbols through `dlsym`. +If a loaded library loads subsequent libraries, and they all export the same +symbols, the library which the application explicitly loaded is the one whose +symbols are used. + +## Linking and Loading + +Applications can now use RTLD_NEXT to query symbols. +They will always be the first linked library is that exported the symbol. +In other words, loading a library explicitly doesn't change the behavior. + +Similarly, explicitly loaded libraries behave the same. +Symbols from loaded libraries must be referenced to load the symbol, RTLD_NEXT +doesn't work. +If a loaded library subsequently loads another library which exports the same +symbols, then the library the application explicitly loaded is used. +If one of the subsequently loaded libraries happened to be linked, this doesn't +affect the behavior when querying functions from the application loaded library. \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_linking.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_linking.cpp new file mode 100644 index 0000000000..2d2d6b35c1 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_linking.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "dynamic_library.h" + +int main() { + std::cout << do_logic() << "\n"; +#if defined(PRINT_OUTPUT_C) + LibraryWrapper dynamic_library_c{std::string("./libdynamic_library_c.") + LIB_EXT}; + InitFunction init = dynamic_library_c.get_symbol(INIT_FUNCTION_NAME); + if (init == nullptr) return 1; + init(); + DoLogicFunction do_logic = dynamic_library_c.get_symbol(DO_LOGIC_FUNCTION_NAME); + if (do_logic == nullptr || do_logic() != 'C') return 2; + + do_logic = reinterpret_cast(dlsym(RTLD_NEXT, DO_LOGIC_FUNCTION_NAME)); + if (do_logic == nullptr || do_logic() != 'A') return 3; + std::cout << "Success\n"; +#endif + return 0; +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading.cpp new file mode 100644 index 0000000000..118d005168 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "dynamic_library.h" + +int main() { + { + LibraryWrapper dynamic_library_a{std::string("./libdynamic_library_a.") + LIB_EXT}; + LibraryWrapper dynamic_library_b{std::string("./libdynamic_library_b.") + LIB_EXT}; + + DoLogicFunction do_logic = nullptr; + do_logic = dynamic_library_a.get_symbol(DO_LOGIC_FUNCTION_NAME); + if (do_logic == nullptr || do_logic() != 'A') return 1; + do_logic = dynamic_library_b.get_symbol(DO_LOGIC_FUNCTION_NAME); + if (do_logic == nullptr || do_logic() != 'B') return 2; + } + { + LibraryWrapper dynamic_library_c{std::string("./libdynamic_library_c.") + LIB_EXT}; + InitFunction init = dynamic_library_c.get_symbol(INIT_FUNCTION_NAME); + if (init == nullptr) return 3; + init(); + DoLogicFunction do_logic = dynamic_library_c.get_symbol(DO_LOGIC_FUNCTION_NAME); + if (do_logic == nullptr || do_logic() != 'C') return 4; + // should fail because RTLD_NEXT on linux only is for dynamically *linked* libraries + do_logic = reinterpret_cast(dlsym(RTLD_NEXT, DO_LOGIC_FUNCTION_NAME)); + if (do_logic != nullptr) return 5; + } + std::cout << "Success\n"; + return 0; +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading_and_linking.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading_and_linking.cpp new file mode 100644 index 0000000000..97b7bd8765 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_loader_behavior/test_dynamic_loading_and_linking.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "dynamic_library.h" + +int main() { + DoLogicFunction do_logic = nullptr; + do_logic = reinterpret_cast(dlsym(RTLD_NEXT, DO_LOGIC_FUNCTION_NAME)); + if (do_logic == nullptr || do_logic() != 'A') return 1; + + LibraryWrapper dynamic_library_c{std::string("./libdynamic_library_c.") + LIB_EXT}; + InitFunction init = dynamic_library_c.get_symbol(INIT_FUNCTION_NAME); + if (init == nullptr) return 2; + init(); + + do_logic = dynamic_library_c.get_symbol(DO_LOGIC_FUNCTION_NAME); + if (do_logic == nullptr || do_logic() != 'C') return 3; + + do_logic = reinterpret_cast(dlsym(RTLD_NEXT, DO_LOGIC_FUNCTION_NAME)); + if (do_logic == nullptr || do_logic() != 'A') return 4; + + std::cout << "Success\n"; + return 0; +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_rendering_get_proc_addr.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_rendering_get_proc_addr.cpp new file mode 100644 index 0000000000..61144f760d --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/dynamic_rendering_get_proc_addr.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +/* + * Tests to see if drivers return vkCmdBeginRenderingKHR as an unknown device or physical device extension + * If it is returned as a physical device extension, this test should crash. Otherwise it should work just fine. + */ + +int main() { + VulkanFunctions vk_funcs{}; + + InstWrapper inst(vk_funcs); + inst.CheckCreate(); + auto phys_devs = inst.GetPhysDevs(); + + for (const auto& phys_dev : phys_devs) { + uint32_t count = 0; + VkResult res = vk_funcs.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &count, nullptr); + if (res != VK_SUCCESS) { + std::cout << "Failed to query device extension count\n"; + } + std::vector extensions{count}; + res = vk_funcs.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &count, extensions.data()); + if (res != VK_SUCCESS) { + std::cout << "Failed to query device extensions\n"; + } + + bool has_dynamic_rendering = false; + for (const auto& ext : extensions) { + if (string_eq("VK_KHR_dynamic_rendering", ext.extensionName)) { + has_dynamic_rendering = true; + break; + } + } + if (has_dynamic_rendering) { + DeviceWrapper dev(inst); + dev.create_info.add_extension("VK_KHR_dynamic_rendering"); + dev.CheckCreate(phys_dev); + + DeviceFunctions funcs{vk_funcs, dev}; + VkCommandPool command_pool; + VkCommandPoolCreateInfo pool_create_info{}; + pool_create_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + funcs.vkCreateCommandPool(dev, &pool_create_info, nullptr, &command_pool); + VkCommandBuffer command_buffer; + VkCommandBufferAllocateInfo alloc_info{}; + alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + alloc_info.commandBufferCount = 1; + alloc_info.commandPool = command_pool; + funcs.vkAllocateCommandBuffers(dev, &alloc_info, &command_buffer); + PFN_vkBeginCommandBuffer vkBeginCommandBuffer = + reinterpret_cast(vk_funcs.vkGetInstanceProcAddr(inst.inst, "vkBeginCommandBuffer")); + VkCommandBufferBeginInfo begin_info{}; + begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + res = vkBeginCommandBuffer(command_buffer, &begin_info); + if (res != VK_SUCCESS) { + std::cout << "Failed to begin command buffer\n"; + } + + // call the dynamic rendering function -- should not go into the physical device function trampoline. + PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = + reinterpret_cast(vk_funcs.vkGetInstanceProcAddr(inst.inst, "vkCmdBeginRenderingKHR")); + VkRenderingInfoKHR rendering_info{}; + rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR; + vkCmdBeginRenderingKHR(command_buffer, &rendering_info); + } + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/macos_static_loader_build.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/macos_static_loader_build.cpp new file mode 100644 index 0000000000..4292fa5d85 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/macos_static_loader_build.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include +#include +#include +#include + +#include "vulkan/vulkan.h" + +static std::atomic_bool is_running; + +void run_vk_code(int which_func) { + while (!is_running) { + // busy wait so all threads have a chance to spawn + } + while (is_running) { + switch (which_func) { + default: + case 0: { + VkInstance inst; + VkInstanceCreateInfo info{}; + vkCreateInstance(&info, nullptr, &inst); + break; + } + case 1: { + uint32_t count = 0; + vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); + std::vector props(count, VkExtensionProperties{}); + vkEnumerateInstanceExtensionProperties(nullptr, &count, props.data()); + break; + } + case 2: { + uint32_t count = 0; + vkEnumerateInstanceLayerProperties(&count, nullptr); + std::vector layers(count, VkLayerProperties{}); + vkEnumerateInstanceLayerProperties(&count, layers.data()); + + break; + } + case 3: { + uint32_t version = 0; + vkEnumerateInstanceVersion(&version); + break; + } + } + } +} + +int main() { + uint32_t thread_count = 4; + is_running = false; + std::vector threads; + for (uint32_t i = 0; i < thread_count; i++) { + threads.emplace_back(run_vk_code, i % 4); + } + is_running = true; + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + is_running = false; + for (auto& t : threads) { + t.join(); + } + return 0; +} \ No newline at end of file diff --git a/local/recipes/libs/vulkan-loader/source/tests/live_verification/time_dynamic_loading.cpp b/local/recipes/libs/vulkan-loader/source/tests/live_verification/time_dynamic_loading.cpp new file mode 100644 index 0000000000..840afae183 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/live_verification/time_dynamic_loading.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include + +#include +#include +#include +#include +#include +#include + +int main() { + // uint32_t iterations = 20; + // std::vector samples; + // samples.resize(iterations); + // for (uint32_t i = 0; i < iterations; i++) { + // auto t1 = std::chrono::system_clock::now(); + // uint32_t count = 0; + // vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); + // // vkEnumerateInstanceLayerProperties(&count, nullptr); + // // vkEnumerateInstanceVersion(&count); + // auto t2 = std::chrono::system_clock::now(); + // samples[i] = std::chrono::duration_cast(t2 - t1); + // } + // std::chrono::microseconds total_time{}; + // for (uint32_t i = 0; i < iterations; i++) { + // total_time += samples[i]; + // } + // std::cout << "average time " << total_time.count() / iterations << " (μs)\n"; + // std::cout << std::setw(10) << "Iteration" << std::setw(12) << " Time (μs)\n"; + // for (uint32_t i = 0; i < iterations; i++) { + // std::cout << std::setw(10) << std::to_string(i) << std::setw(12) << samples[i].count() << "\n"; + // } + + uint32_t count = 0; + VkInstanceCreateInfo ci{}; + VkInstance i{}; + auto res = vkCreateInstance(&ci, nullptr, &i); + if (res != VK_SUCCESS) return -1; + std::cout << "After called vkCreateInstance\n"; + do { + std::cout << '\n' << "Press a key to continue..."; + } while (std::cin.get() != '\n'); + vkDestroyInstance(i, nullptr); + std::cout << "After called vkDestroyInstance\n"; + do { + std::cout << '\n' << "Press a key to continue..."; + } while (std::cin.get() != '\n'); +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_alloc_callback_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_alloc_callback_tests.cpp new file mode 100644 index 0000000000..1701bfb927 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_alloc_callback_tests.cpp @@ -0,0 +1,1066 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +#include +#include + +struct MemoryTrackerSettings { + bool should_fail_on_allocation = false; + size_t fail_after_allocations = 0; // fail after this number of allocations in total + bool should_fail_after_set_number_of_calls = false; + size_t fail_after_calls = 0; // fail after this number of calls to alloc or realloc +}; + +class MemoryTracker { + std::mutex main_mutex; + MemoryTrackerSettings settings{}; + VkAllocationCallbacks callbacks{}; + // Implementation internals + struct AllocationDetails { + std::unique_ptr allocation; + size_t requested_size_bytes; + size_t actual_size_bytes; + size_t alignment; + VkSystemAllocationScope alloc_scope; + }; + const static size_t UNKNOWN_ALLOCATION = std::numeric_limits::max(); + size_t allocation_count = 0; + size_t call_count = 0; + std::unordered_map allocations; + + void* allocate(size_t size, size_t alignment, VkSystemAllocationScope alloc_scope) { + if ((settings.should_fail_on_allocation && allocation_count == settings.fail_after_allocations) || + (settings.should_fail_after_set_number_of_calls && call_count == settings.fail_after_calls)) { + return nullptr; + } + call_count++; + allocation_count++; + AllocationDetails detail{nullptr, size, size + (alignment - 1), alignment, alloc_scope}; + detail.allocation = std::unique_ptr(new char[detail.actual_size_bytes]); + if (!detail.allocation) { + abort(); + }; + uint64_t addr = (uint64_t)detail.allocation.get(); + addr += (alignment - 1); + addr &= ~(alignment - 1); + void* aligned_alloc = (void*)addr; + allocations.insert(std::make_pair(aligned_alloc, std::move(detail))); + return aligned_alloc; + } + void* reallocate(void* pOriginal, size_t size, size_t alignment, VkSystemAllocationScope alloc_scope) { + if (pOriginal == nullptr) { + return allocate(size, alignment, alloc_scope); + } + auto elem = allocations.find(pOriginal); + if (elem == allocations.end()) return nullptr; + size_t original_size = elem->second.requested_size_bytes; + + // We only care about the case where realloc is used to increase the size + if (size >= original_size && settings.should_fail_after_set_number_of_calls && call_count == settings.fail_after_calls) + return nullptr; + call_count++; + if (size == 0) { + allocations.erase(elem); + allocation_count--; + return nullptr; + } else if (size < original_size) { + return pOriginal; + } else { + void* new_alloc = allocate(size, alignment, alloc_scope); + if (new_alloc == nullptr) return nullptr; + allocation_count--; // allocate() increments this, we we don't want that + call_count--; // allocate() also increments this, we don't want that + memcpy(new_alloc, pOriginal, original_size); + allocations.erase(elem); + return new_alloc; + } + } + void free(void* pMemory) { + if (pMemory == nullptr) return; + auto elem = allocations.find(pMemory); + if (elem == allocations.end()) { + assert(false && "Should never be freeing memory that wasn't allocated by the MemoryTracker!"); + return; + } + allocations.erase(elem); + assert(allocation_count != 0 && "Cant free when there are no valid allocations"); + allocation_count--; + } + + // Implementation of public functions + void* impl_allocation(size_t size, size_t alignment, VkSystemAllocationScope allocationScope) noexcept { + std::lock_guard lg(main_mutex); + void* addr = allocate(size, alignment, allocationScope); + return addr; + } + void* impl_reallocation(void* pOriginal, size_t size, size_t alignment, VkSystemAllocationScope allocationScope) noexcept { + std::lock_guard lg(main_mutex); + void* addr = reallocate(pOriginal, size, alignment, allocationScope); + return addr; + } + void impl_free(void* pMemory) noexcept { + std::lock_guard lg(main_mutex); + free(pMemory); + } + void impl_internal_allocation_notification([[maybe_unused]] size_t size, + [[maybe_unused]] VkInternalAllocationType allocationType, + [[maybe_unused]] VkSystemAllocationScope allocationScope) noexcept { + std::lock_guard lg(main_mutex); + // TODO? + } + void impl_internal_free([[maybe_unused]] size_t size, [[maybe_unused]] VkInternalAllocationType allocationType, + [[maybe_unused]] VkSystemAllocationScope allocationScope) noexcept { + std::lock_guard lg(main_mutex); + // TODO? + } + + public: + MemoryTracker(MemoryTrackerSettings settings) noexcept : settings(settings) { + allocations.reserve(3000); + + callbacks.pUserData = this; + callbacks.pfnAllocation = public_allocation; + callbacks.pfnReallocation = public_reallocation; + callbacks.pfnFree = public_free; + callbacks.pfnInternalAllocation = public_internal_allocation_notification; + callbacks.pfnInternalFree = public_internal_free; + } + MemoryTracker() noexcept : MemoryTracker(MemoryTrackerSettings{}) {} + + VkAllocationCallbacks* get() noexcept { return &callbacks; } + + bool empty() noexcept { return allocation_count == 0; } + + // Static callbacks + static VKAPI_ATTR void* VKAPI_CALL public_allocation(void* pUserData, size_t size, size_t alignment, + VkSystemAllocationScope allocationScope) noexcept { + return reinterpret_cast(pUserData)->impl_allocation(size, alignment, allocationScope); + } + static VKAPI_ATTR void* VKAPI_CALL public_reallocation(void* pUserData, void* pOriginal, size_t size, size_t alignment, + VkSystemAllocationScope allocationScope) noexcept { + return reinterpret_cast(pUserData)->impl_reallocation(pOriginal, size, alignment, allocationScope); + } + static VKAPI_ATTR void VKAPI_CALL public_free(void* pUserData, void* pMemory) noexcept { + reinterpret_cast(pUserData)->impl_free(pMemory); + } + static VKAPI_ATTR void VKAPI_CALL public_internal_allocation_notification(void* pUserData, size_t size, + VkInternalAllocationType allocationType, + VkSystemAllocationScope allocationScope) noexcept { + reinterpret_cast(pUserData)->impl_internal_allocation_notification(size, allocationType, allocationScope); + } + static VKAPI_ATTR void VKAPI_CALL public_internal_free(void* pUserData, size_t size, VkInternalAllocationType allocationType, + VkSystemAllocationScope allocationScope) noexcept { + reinterpret_cast(pUserData)->impl_internal_free(size, allocationType, allocationScope); + } +}; + +// Test making sure the allocation functions are called to allocate and cleanup everything during +// a CreateInstance/DestroyInstance call pair. +TEST(Allocation, Instance) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + MemoryTracker tracker; + { + InstWrapper inst{env.vulkan_functions, tracker.get()}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + } + ASSERT_TRUE(tracker.empty()); +} + +// Test making sure the allocation functions are called to allocate and cleanup everything during +// a CreateInstance/DestroyInstance call pair with a call to GetInstanceProcAddr. +TEST(Allocation, GetInstanceProcAddr) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + MemoryTracker tracker; + { + InstWrapper inst{env.vulkan_functions, tracker.get()}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + auto* pfnCreateDevice = inst->vkGetInstanceProcAddr(inst, "vkCreateDevice"); + auto* pfnDestroyDevice = inst->vkGetInstanceProcAddr(inst, "vkDestroyDevice"); + ASSERT_TRUE(pfnCreateDevice != nullptr && pfnDestroyDevice != nullptr); + } + ASSERT_TRUE(tracker.empty()); +} + +// Test making sure the allocation functions are called to allocate and cleanup everything during +// a vkEnumeratePhysicalDevices call pair. +TEST(Allocation, EnumeratePhysicalDevices) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + MemoryTracker tracker; + { + InstWrapper inst{env.vulkan_functions, tracker.get()}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + uint32_t physical_count = 1; + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, &physical_device)); + ASSERT_EQ(physical_count, returned_physical_count); + } + ASSERT_TRUE(tracker.empty()); +} + +// Test making sure the allocation functions are called to allocate and cleanup everything from +// vkCreateInstance, to vkCreateDevicce, and then through their destructors. With special +// allocators used on both the instance and device. +TEST(Allocation, InstanceAndDevice) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device(PhysicalDevice{"physical_device_0"} + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}) + .finish()); + + MemoryTracker tracker; + { + InstWrapper inst{env.vulkan_functions, tracker.get()}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + uint32_t physical_count = 1; + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, &physical_device)); + ASSERT_EQ(physical_count, returned_physical_count); + + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + VkDevice device; + ASSERT_EQ(inst->vkCreateDevice(physical_device, dev_create_info.get(), tracker.get(), &device), VK_SUCCESS); + + VkQueue queue; + inst->vkGetDeviceQueue(device, 0, 0, &queue); + + inst->vkDestroyDevice(device, tracker.get()); + } + ASSERT_TRUE(tracker.empty()); +} +// Test making sure the allocation functions are called to allocate and cleanup everything from +// vkCreateInstance, to vkCreateDevicce, and then through their destructors. With special +// allocators used on only the instance and not the device. +TEST(Allocation, InstanceButNotDevice) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device(PhysicalDevice{"physical_device_0"} + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}) + .finish()); + + MemoryTracker tracker; + { + InstWrapper inst{env.vulkan_functions, tracker.get()}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + uint32_t physical_count = 1; + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, &physical_device)); + ASSERT_EQ(physical_count, returned_physical_count); + + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + VkDevice device; + ASSERT_EQ(inst->vkCreateDevice(physical_device, dev_create_info.get(), nullptr, &device), VK_SUCCESS); + VkQueue queue; + inst->vkGetDeviceQueue(device, 0, 0, &queue); + + inst->vkDestroyDevice(device, nullptr); + } + ASSERT_TRUE(tracker.empty()); +} + +// Test making sure the allocation functions are called to allocate and cleanup everything from +// vkCreateInstance, to vkCreateDevicce, and then through their destructors. With special +// allocators used on only the device and not the instance. +TEST(Allocation, DeviceButNotInstance) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device(PhysicalDevice{"physical_device_0"} + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}) + .finish()); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + MemoryTracker tracker; + { + InstWrapper inst{env.vulkan_functions}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + uint32_t physical_count = 1; + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, &physical_device)); + ASSERT_EQ(physical_count, returned_physical_count); + + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + VkDevice device; + ASSERT_EQ(inst->vkCreateDevice(physical_device, dev_create_info.get(), tracker.get(), &device), VK_SUCCESS); + + VkQueue queue; + inst->vkGetDeviceQueue(device, 0, 0, &queue); + + inst->vkDestroyDevice(device, tracker.get()); + } + ASSERT_TRUE(tracker.empty()); +} + +// Test failure during vkCreateInstance to make sure we don't leak memory if +// one of the out-of-memory conditions trigger. +TEST(Allocation, CreateInstanceIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_SUCCESS) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + } + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance to make sure we don't leak memory if +// one of the out-of-memory conditions trigger and there are invalid jsons in the same folder +TEST(Allocation, CreateInstanceIntentionalAllocFailInvalidManifests) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + std::vector invalid_jsons; + invalid_jsons.push_back(","); + invalid_jsons.push_back("{},[]"); + invalid_jsons.push_back("{ \"foo\":\"bar\", }"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": [], },"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": [{},] },"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": {\"fee\"} },"); + invalid_jsons.push_back("{\"\":\"bar\", \"baz\": {}"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": {\"fee\":1234, true, \"ab\":\"bc\"} },"); + + for (size_t i = 0; i < invalid_jsons.size(); i++) { + auto file_name = std::string("invalid_implicit_layer_") + std::to_string(i) + ".json"; + std::filesystem::path new_path = + env.get_folder(ManifestLocation::implicit_layer).write_manifest(file_name, invalid_jsons[i]); + env.platform_shim->add_manifest(ManifestCategory::implicit_layer, new_path); + } + + const char* layer_name = "VkLayerImplicit0"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_SUCCESS) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + } + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance & surface creation to make sure we don't leak memory if +// one of the out-of-memory conditions trigger. +TEST(Allocation, CreateSurfaceIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + inst_create_info.setup_WSI(); + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + ASSERT_TRUE(tracker.empty()); + fail_index++; + continue; + } + + VkSurfaceKHR surface{}; + result = create_surface(&env.vulkan_functions, instance, surface); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + fail_index++; + continue; + } + env.vulkan_functions.vkDestroySurfaceKHR(instance, surface, tracker.get()); + + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance to make sure we don't leak memory if +// one of the out-of-memory conditions trigger. +TEST(Allocation, CreateInstanceIntentionalAllocFailWithSettingsFilePresent) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("auto") + .set_path(env.get_shimmed_layer_manifest_path(0))))); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_SUCCESS) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + } + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance & surface creation to make sure we don't leak memory if +// one of the out-of-memory conditions trigger. +TEST(Allocation, CreateSurfaceIntentionalAllocFailWithSettingsFilePresent) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("auto") + .set_path(env.get_shimmed_layer_manifest_path(0))))); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + inst_create_info.setup_WSI(); + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + ASSERT_TRUE(tracker.empty()); + fail_index++; + continue; + } + + VkSurfaceKHR surface{}; + result = create_surface(&env.vulkan_functions, instance, surface); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + fail_index++; + continue; + } + env.vulkan_functions.vkDestroySurfaceKHR(instance, surface, tracker.get()); + + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance to make sure we don't leak memory if +// one of the out-of-memory conditions trigger. +TEST(Allocation, DriverEnvVarIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + env.env_var_vk_icd_filenames.add_to_list("totally_made_up/path_to_fake/jason_file.json"); + env.env_var_vk_icd_filenames.add_to_list("another\\bonkers\\file_path.json"); + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_SUCCESS) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + } + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateDevice to make sure we don't leak memory if +// one of the out-of-memory conditions trigger. +// Use 2 physical devices so that anything which copies a list of devices item by item +// may fail. +TEST(Allocation, CreateDeviceIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device(PhysicalDevice{"physical_device_0"} + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}) + .finish()) + .add_physical_device(PhysicalDevice{"physical_device_1"} + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}) + .finish()); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + InstWrapper inst{env.vulkan_functions}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + uint32_t physical_count = 2; + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDevice physical_devices[2]; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, physical_devices)); + ASSERT_EQ(physical_count, returned_physical_count); + + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[0], &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[0], &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + MemoryTracker tracker({false, 0, true, fail_index}); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + VkDevice device; + result = inst->vkCreateDevice(physical_devices[0], dev_create_info.get(), tracker.get(), &device); + if (result == VK_SUCCESS || fail_index > 10000) { + VkQueue queue; + inst->vkGetDeviceQueue(device, 0, 0, &queue); + + inst->vkDestroyDevice(device, tracker.get()); + break; + } + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance and vkCreateDevice to make sure we don't +// leak memory if one of the out-of-memory conditions trigger. +// Includes drivers with several instance extensions, drivers that will fail to load, directly loaded drivers +TEST(Allocation, CreateInstanceDeviceIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + uint32_t num_physical_devices = 4; + uint32_t num_implicit_layers = 3; + for (uint32_t i = 0; i < num_physical_devices; i++) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2) + .icd_manifest.set_is_portability_driver(false) + .set_library_arch(sizeof(void*) == 8 ? "64" : "32")) + .set_icd_api_version(VK_API_VERSION_1_1) + .add_instance_extension("VK_KHR_get_physical_device_properties2") + .add_physical_device("physical_device_0") + .physical_devices.at(0) + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}) + .add_extensions({"VK_EXT_one", "VK_EXT_two", "VK_EXT_three", "VK_EXT_four", "VK_EXT_five"}); + } + + env.add_icd(TestICDDetails(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE).set_is_fake(true)); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none)); + + VkDirectDriverLoadingInfoLUNARG ddl_info{}; + ddl_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG; + ddl_info.pfnGetInstanceProcAddr = env.icds.back().icd_library.get_symbol("vk_icdGetInstanceProcAddr"); + + VkDirectDriverLoadingListLUNARG ddl_list{}; + ddl_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG; + ddl_list.mode = VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG; + ddl_list.driverCount = 1; + ddl_list.pDrivers = &ddl_info; + + const char* layer_name = "VK_LAYER_ImplicitAllocFail"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + for (uint32_t i = 1; i < num_implicit_layers + 1; i++) { + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_Implicit1" + std::to_string(i)) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer_" + std::to_string(i) + ".json"); + } + // Throw in a complex json file to flex the json allocation routines + env.write_file_from_source(COMPLEX_JSON_FILE, ManifestCategory::explicit_layer, ManifestLocation::explicit_layer, + "VK_LAYER_complex_file.json"); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker{{false, 0, true, fail_index}}; + fail_index++; // applies to the next loop + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + inst_create_info.add_extension(VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME); + inst_create_info.instance_info.pNext = reinterpret_cast(&ddl_list); + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + ASSERT_TRUE(tracker.empty()); + continue; + } + ASSERT_EQ(result, VK_SUCCESS); + + uint32_t returned_physical_count = 0; + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, nullptr); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + ASSERT_EQ(result, VK_SUCCESS); + ASSERT_EQ(num_physical_devices, returned_physical_count); + + std::vector physical_devices; + physical_devices.resize(returned_physical_count); + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, physical_devices.data()); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + ASSERT_EQ(result, VK_SUCCESS); + ASSERT_EQ(num_physical_devices, returned_physical_count); + for (uint32_t i = 0; i < returned_physical_count; i++) { + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices.at(i), &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices.at(i), &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + VkDevice device; + result = env.vulkan_functions.vkCreateDevice(physical_devices.at(i), dev_create_info.get(), tracker.get(), &device); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + break; + } + ASSERT_EQ(result, VK_SUCCESS); + + VkQueue queue; + env.vulkan_functions.vkGetDeviceQueue(device, 0, 0, &queue); + + env.vulkan_functions.vkDestroyDevice(device, tracker.get()); + } + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + + ASSERT_TRUE(tracker.empty()); + } +} + +// Test failure during vkCreateInstance when a driver of the wrong architecture is present +// to make sure the loader uses the valid ICD and doesn't report incompatible driver just because +// an incompatible driver exists +TEST(TryLoadWrongBinaries, CreateInstanceIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + env.add_icd(TestICDDetails(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE).set_is_fake(true)); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_SUCCESS) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + } + ASSERT_NE(result, VK_ERROR_INCOMPATIBLE_DRIVER); + ASSERT_TRUE(tracker.empty()); + fail_index++; + } +} + +// Test failure during vkCreateInstance and vkCreateDevice to make sure we don't +// leak memory if one of the out-of-memory conditions trigger. +TEST(Allocation, EnumeratePhysicalDevicesIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + size_t fail_index = 0; + bool reached_the_end = false; + uint32_t starting_physical_dev_count = 3; + while (!reached_the_end && fail_index <= 10000) { + fail_index++; // applies to the next loop + uint32_t physical_dev_count = starting_physical_dev_count; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + auto& driver = env.reset_icd(); + + for (uint32_t i = 0; i < physical_dev_count; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)) + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}); + } + MemoryTracker tracker{{false, 0, true, fail_index}}; + InstanceCreateInfo inst_create_info; + VkInstance instance; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + ASSERT_TRUE(tracker.empty()); + continue; + } + + uint32_t returned_physical_count = 0; + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, nullptr); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + ASSERT_EQ(physical_dev_count, returned_physical_count); + + for (uint32_t i = 0; i < 2; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(physical_dev_count)) + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}); + physical_dev_count += 1; + } + + std::vector physical_devices{physical_dev_count, VK_NULL_HANDLE}; + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, physical_devices.data()); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + if (result == VK_INCOMPLETE) { + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, nullptr); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + physical_devices.resize(returned_physical_count); + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, physical_devices.data()); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + } + ASSERT_EQ(physical_dev_count, returned_physical_count); + + std::array devices; + for (uint32_t i = 0; i < returned_physical_count; i++) { + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + result = env.vulkan_functions.vkCreateDevice(physical_devices[i], dev_create_info.get(), tracker.get(), &devices[i]); + + VkQueue queue; + if (result == VK_SUCCESS) { + env.vulkan_functions.vkGetDeviceQueue(devices[i], 0, 0, &queue); + } + } + for (uint32_t i = 0; i < returned_physical_count; i++) { + if (result == VK_SUCCESS) { + env.vulkan_functions.vkDestroyDevice(devices[i], tracker.get()); + } + } + + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + reached_the_end = true; + } +} +#if defined(WIN32) +// Test failure during vkCreateInstance and vkCreateDevice to make sure we don't +// leak memory if one of the out-of-memory conditions trigger. +TEST(Allocation, CreateInstanceDeviceWithDXGIDriverIntentionalAllocFail) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_6).set_discovery_type(ManifestDiscoveryType::null_dir)); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + for (uint32_t i = 0; i < 2; i++) { + auto& driver = env.get_test_icd(i); + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)) + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false}); + } + + const char* layer_name = "VK_LAYER_implicit"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json"); + env.get_test_layer().set_do_spurious_allocations_in_create_instance(true).set_do_spurious_allocations_in_create_device(true); + + auto& known_driver = known_driver_list.at(2); // which drive this test pretends to be + DXGI_ADAPTER_DESC1 desc1{}; + desc1.VendorId = known_driver.vendor_id; + desc1.AdapterLuid = _LUID{10, 1000}; + env.platform_shim->add_dxgi_adapter(GpuType::discrete, desc1); + env.get_test_icd(0).set_adapterLUID(desc1.AdapterLuid); + + env.platform_shim->add_d3dkmt_adapter(D3DKMT_Adapter{0, _LUID{10, 1000}}.add_driver_manifest_path(env.get_icd_manifest_path())); + + size_t fail_index = 0; + VkResult result = VK_ERROR_OUT_OF_HOST_MEMORY; + while (result == VK_ERROR_OUT_OF_HOST_MEMORY && fail_index <= 10000) { + MemoryTracker tracker({false, 0, true, fail_index}); + fail_index++; // applies to the next loop + + VkInstance instance; + InstanceCreateInfo inst_create_info{}; + result = env.vulkan_functions.vkCreateInstance(inst_create_info.get(), tracker.get(), &instance); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + ASSERT_TRUE(tracker.empty()); + continue; + } + + uint32_t physical_count = 2; + uint32_t returned_physical_count = 0; + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, nullptr); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY || result == VK_INCOMPLETE) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + ASSERT_EQ(physical_count, returned_physical_count); + + std::array physical_devices; + result = env.vulkan_functions.vkEnumeratePhysicalDevices(instance, &returned_physical_count, physical_devices.data()); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY || result == VK_INCOMPLETE) { + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + ASSERT_TRUE(tracker.empty()); + continue; + } + ASSERT_EQ(physical_count, returned_physical_count); + + std::array devices; + for (uint32_t i = 0; i < returned_physical_count; i++) { + uint32_t family_count = 1; + uint32_t returned_family_count = 0; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &returned_family_count, nullptr); + ASSERT_EQ(returned_family_count, family_count); + + VkQueueFamilyProperties family; + env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &returned_family_count, &family); + ASSERT_EQ(returned_family_count, family_count); + ASSERT_EQ(family.queueFlags, static_cast(VK_QUEUE_GRAPHICS_BIT)); + ASSERT_EQ(family.queueCount, family_count); + ASSERT_EQ(family.timestampValidBits, 0U); + + DeviceCreateInfo dev_create_info; + dev_create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + + result = env.vulkan_functions.vkCreateDevice(physical_devices[i], dev_create_info.get(), tracker.get(), &devices[i]); + if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { + devices[i] = VK_NULL_HANDLE; + } else { + VkQueue queue; + env.vulkan_functions.vkGetDeviceQueue(devices[i], 0, 0, &queue); + } + } + for (uint32_t i = 0; i < returned_physical_count; i++) { + if (devices[i] != VK_NULL_HANDLE) { + env.vulkan_functions.vkDestroyDevice(devices[i], tracker.get()); + } + } + env.vulkan_functions.vkDestroyInstance(instance, tracker.get()); + + ASSERT_TRUE(tracker.empty()); + } +} +#endif diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_debug_ext_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_debug_ext_tests.cpp new file mode 100644 index 0000000000..aa6b7f0e7c --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_debug_ext_tests.cpp @@ -0,0 +1,1238 @@ +/* + * Copyright (c) 2022 The Khronos Group Inc. + * Copyright (c) 2022 Valve Corporation + * Copyright (c) 2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + * Author: Mark Young + */ + +#include "test_environment.h" + +// +// VK_EXT_debug_report specific tests +// ========================================= +// + +// Prototype declaration for callback so we can use it in class utility methods +VkBool32 VKAPI_CALL test_DebugReportCallback(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, + size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage, + void* pUserData); + +class DebugReportTest : public ::testing::Test { + public: + void VerifyExpected(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT object_type, const std::string& message) { + if (object_type == expected_object_type && 0 < (flags | expected_flag)) { + if (allow_any_message || (std::string::npos != message.find(expected_message))) { + message_found = true; + } + } + } + + protected: + virtual void SetUp() { + env = std::unique_ptr(new FrameworkEnvironment()); + for (uint32_t icd = 0; icd < 3; ++icd) { + env->add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_0)); + env->get_test_icd(icd).physical_devices.push_back({}); + env->get_test_icd(icd).physical_devices.push_back({}); + } + // Initialize the expected output + allow_any_message = false; + expected_message = ""; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; + message_found = false; + } + + VkResult CreateReportInstance(VkDebugReportFlagsEXT debug_report_flags, VkInstance* inst, + VkApplicationInfo* app_info = nullptr) { + std::vector enabled_extensions; + enabled_extensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); + + // Setup the debug report struct + VkDebugReportCallbackCreateInfoEXT debug_report_info{VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT}; + debug_report_info.pNext = nullptr; + debug_report_info.flags = debug_report_flags; + debug_report_info.pfnCallback = reinterpret_cast(test_DebugReportCallback); + debug_report_info.pUserData = reinterpret_cast(this); + + // Pass it into instance create struct + VkInstanceCreateInfo create_info{}; + create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + create_info.pNext = &debug_report_info; + create_info.pApplicationInfo = app_info; + create_info.enabledExtensionCount = static_cast(enabled_extensions.size()); + create_info.ppEnabledExtensionNames = enabled_extensions.data(); + + return env->vulkan_functions.vkCreateInstance(&create_info, nullptr, inst); + } + + VkResult CreateReportCallback(VkInstance inst, VkDebugReportFlagsEXT debug_report_flags, VkDebugReportCallbackEXT* callback) { + PFN_vkCreateDebugReportCallbackEXT create_debug_report = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkCreateDebugReportCallbackEXT")); + if (nullptr == create_debug_report) { + return VK_ERROR_INITIALIZATION_FAILED; + } + VkDebugReportCallbackCreateInfoEXT debug_report_info{VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT}; + debug_report_info.pNext = nullptr; + debug_report_info.flags = debug_report_flags; + debug_report_info.pfnCallback = reinterpret_cast(test_DebugReportCallback); + debug_report_info.pUserData = reinterpret_cast(this); + return create_debug_report(inst, &debug_report_info, nullptr, callback); + } + + VkResult DestroyReportCallback(VkInstance inst, VkDebugReportCallbackEXT callback) { + PFN_vkDestroyDebugReportCallbackEXT destroy_debug_report = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkDestroyDebugReportCallbackEXT")); + if (nullptr == destroy_debug_report) { + return VK_ERROR_INITIALIZATION_FAILED; + } + destroy_debug_report(inst, callback, nullptr); + return VK_SUCCESS; + } + + virtual void TearDown() { env.reset(); } + + std::unique_ptr env; + bool allow_any_message; + std::string expected_message; + VkDebugReportObjectTypeEXT expected_object_type; + VkDebugReportFlagBitsEXT expected_flag; + bool message_found; +}; + +// This is the actual callback prototyped above. +VkBool32 VKAPI_CALL test_DebugReportCallback(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, + [[maybe_unused]] uint64_t object, [[maybe_unused]] size_t location, + [[maybe_unused]] int32_t messageCode, [[maybe_unused]] const char* pLayerPrefix, + const char* pMessage, void* pUserData) { + DebugReportTest* debug_report_test = reinterpret_cast(pUserData); + debug_report_test->VerifyExpected(flags, objectType, pMessage); + return VK_FALSE; +} + +class CreateDestroyInstanceReport : public DebugReportTest {}; +class SeparateReport : public DebugReportTest {}; +class ManualReport : public DebugReportTest {}; + +// Test creating and destroying instance looking for errors, but none should occur. +TEST_F(CreateDestroyInstanceReport, NoCallback) { + // Make sure we don't find any errors + allow_any_message = true; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(false, message_found); +} + +// Test report (error) created in vkCreateInstance with warning in vkCreateInstance +TEST_F(CreateDestroyInstanceReport, WarnInCreateIgnored) { + expected_message = "The API Variant specified"; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_WARNING_BIT_EXT; + + VkApplicationInfo app_info; + app_info.apiVersion = VK_MAKE_API_VERSION(1, 1, 0, 0); + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst, &app_info)); + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should NOT be found (because we only have errors reported in create) + ASSERT_EQ(false, message_found); +} + +// Test creating and destroying instance looking for errors, but none should occur. +TEST_F(CreateDestroyInstanceReport, WarnInCreate) { + expected_message = "The API Variant specified"; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_WARNING_BIT_EXT; + + VkApplicationInfo app_info; + app_info.apiVersion = VK_MAKE_API_VERSION(1, 1, 0, 0); + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_WARNING_BIT_EXT, &inst, &app_info)); + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should be found (because we only have errors reported in create) + ASSERT_EQ(true, message_found); +} + +// Test report (error/warning) created in vkCreateInstance with error in vkEnumeratePhysicalDevices. +// This should not be logged because we have only defined the debug report logging for vkCreateInstance +// and vkDestroyInstance. +TEST_F(SeparateReport, ErrorInEnumDevsNoCallback) { + // Look for the invaid count param message + expected_message = "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter"; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, nullptr, nullptr), VK_ERROR_INITIALIZATION_FAILED); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should NOT be found (because we don't have a report callback setup outside of the create/destroy instance chain) + ASSERT_EQ(false, message_found); +} + +// Test report created outside of vkCreateInstance with error in vkEnumeratePhysicalDevices. +// This should be logged now. +TEST_F(SeparateReport, ErrorInEnumDevs) { + // Look for the invaid count param message + expected_message = "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter"; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + VkDebugReportCallbackEXT callback; + ASSERT_EQ(VK_SUCCESS, CreateReportCallback(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, &callback)); + + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, nullptr, nullptr), VK_ERROR_INITIALIZATION_FAILED); + + ASSERT_EQ(VK_SUCCESS, DestroyReportCallback(inst, callback)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should be found + ASSERT_EQ(true, message_found); +} + +// Test report created outside of vkCreateInstance with info in vkEnumeratePhysicalDevices. +// This should not be logged because type is wrong. +TEST_F(SeparateReport, InfoInEnumDevsIgnored) { + expected_message = "Trimming device count from 6 to 5"; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_INFORMATION_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + VkDebugReportCallbackEXT callback; + ASSERT_EQ(VK_SUCCESS, CreateReportCallback(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, &callback)); + + uint32_t max_count = 5; + std::array devices; + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, &max_count, devices.data()), VK_INCOMPLETE); + + ASSERT_EQ(VK_SUCCESS, DestroyReportCallback(inst, callback)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found (because it's info) + ASSERT_EQ(false, message_found); +} + +// Test report created outside of vkCreateInstance with info in vkEnumeratePhysicalDevices. +// This should be logged because type is correct. +TEST_F(SeparateReport, InfoInEnumDevs) { + expected_message = "Trimming device count from 6 to 5"; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_INFORMATION_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + VkDebugReportCallbackEXT callback; + ASSERT_EQ(VK_SUCCESS, CreateReportCallback(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, &callback)); + + uint32_t max_count = 5; + std::array devices; + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, &max_count, devices.data()), VK_INCOMPLETE); + + ASSERT_EQ(VK_SUCCESS, DestroyReportCallback(inst, callback)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should be found + ASSERT_EQ(true, message_found); +} + +// Test report created outside of vkCreateInstance with a manual info message of the wrong message flag type to be logged. +TEST_F(ManualReport, InfoIgnoredWrongType) { + const char my_message[] = "This is my special message!"; + expected_message = my_message; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_INFORMATION_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + VkDebugReportCallbackEXT callback; + ASSERT_EQ(VK_SUCCESS, CreateReportCallback(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, &callback)); + + PFN_vkDebugReportMessageEXT log_debug_report = + reinterpret_cast(env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkDebugReportMessageEXT")); + ASSERT_NE(nullptr, log_debug_report); + log_debug_report(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, (uint64_t)(inst), 0, 0, + nullptr, my_message); + + ASSERT_EQ(VK_SUCCESS, DestroyReportCallback(inst, callback)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found + ASSERT_EQ(false, message_found); +} + +// Test report created outside of vkCreateInstance with a manual info message of the wrong object type to be logged. +TEST_F(ManualReport, InfoIgnoredWrongObject) { + const char my_message[] = "This is my special message!"; + expected_message = my_message; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_INFORMATION_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + VkDebugReportCallbackEXT callback; + ASSERT_EQ(VK_SUCCESS, CreateReportCallback(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, &callback)); + + PFN_vkDebugReportMessageEXT log_debug_report = + reinterpret_cast(env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkDebugReportMessageEXT")); + ASSERT_NE(nullptr, log_debug_report); + log_debug_report(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, (uint64_t)(inst), 0, 0, + nullptr, my_message); + + ASSERT_EQ(VK_SUCCESS, DestroyReportCallback(inst, callback)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found + ASSERT_EQ(false, message_found); +} + +// Test report created outside of vkCreateInstance with a manual info message to be logged. +TEST_F(ManualReport, InfoMessage) { + const char my_message[] = "This is my special message!"; + expected_message = my_message; + expected_object_type = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + expected_flag = VK_DEBUG_REPORT_INFORMATION_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateReportInstance(VK_DEBUG_REPORT_ERROR_BIT_EXT, &inst)); + + VkDebugReportCallbackEXT callback; + ASSERT_EQ(VK_SUCCESS, CreateReportCallback(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, &callback)); + + PFN_vkDebugReportMessageEXT log_debug_report = + reinterpret_cast(env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkDebugReportMessageEXT")); + ASSERT_NE(nullptr, log_debug_report); + log_debug_report(inst, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, (uint64_t)(inst), 0, 0, + nullptr, my_message); + + ASSERT_EQ(VK_SUCCESS, DestroyReportCallback(inst, callback)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should be found + ASSERT_EQ(true, message_found); +} + +// +// VK_EXT_debug_util specific tests +// ========================================= +// + +// Prototype declaration for callback so we can use it in class utility methods +VkBool32 VKAPI_CALL test_DebugUtilsCallback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, + VkDebugUtilsMessageTypeFlagsEXT message_types, + const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data); + +class DebugUtilTest : public ::testing::Test { + public: + void VerifyExpected(VkDebugUtilsMessageTypeFlagsEXT message_flags, VkDebugUtilsMessageSeverityFlagsEXT severity_flags, + const std::string& message, const VkDebugUtilsMessengerCallbackDataEXT* callback_data) { + if ((0 < (severity_flags | expected_severity_flags)) && (0 < (message_flags | expected_message_flags))) { + if (allow_any_message || (std::string::npos != message.find(expected_message))) { + for (uint32_t obj = 0; obj < callback_data->objectCount; ++obj) { + if (callback_data->pObjects[obj].objectType == expected_object_type && + (!check_object_handle || callback_data->pObjects[obj].objectHandle == expected_object_handle)) { + message_found = true; + break; + } + } + } + } + } + + protected: + virtual void SetUp() { + env = std::unique_ptr(new FrameworkEnvironment()); + for (uint32_t icd = 0; icd < 3; ++icd) { + env->add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_0)); + env->get_test_icd(icd).physical_devices.push_back({}); + env->get_test_icd(icd).physical_devices.push_back({}); + } + // Initialize the expected output + allow_any_message = false; + expected_message = ""; + expected_object_type = VK_OBJECT_TYPE_UNKNOWN; + check_object_handle = false; + expected_object_handle = 0; + message_found = false; + } + + VkResult CreateUtilsInstance(VkDebugUtilsMessageTypeFlagsEXT types, VkDebugUtilsMessageSeverityFlagsEXT severities, + VkInstance* inst, VkApplicationInfo* app_info = nullptr) { + std::vector enabled_extensions; + enabled_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + + // Setup the debug utils struct + VkDebugUtilsMessengerCreateInfoEXT debug_utils_info{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT}; + debug_utils_info.pNext = nullptr; + debug_utils_info.messageSeverity = severities; + debug_utils_info.messageType = types; + debug_utils_info.pfnUserCallback = reinterpret_cast(test_DebugUtilsCallback); + debug_utils_info.pUserData = reinterpret_cast(this); + + VkInstanceCreateInfo create_info{}; + create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + create_info.pNext = &debug_utils_info; + create_info.pApplicationInfo = app_info; + create_info.enabledExtensionCount = static_cast(enabled_extensions.size()); + create_info.ppEnabledExtensionNames = enabled_extensions.data(); + return env->vulkan_functions.vkCreateInstance(&create_info, nullptr, inst); + } + + VkResult CreateUtilsMessenger(VkInstance inst, VkDebugUtilsMessageTypeFlagsEXT types, + VkDebugUtilsMessageSeverityFlagsEXT severities, VkDebugUtilsMessengerEXT* messenger) { + PFN_vkCreateDebugUtilsMessengerEXT create_messenger = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkCreateDebugUtilsMessengerEXT")); + if (nullptr == create_messenger) { + return VK_ERROR_INITIALIZATION_FAILED; + } + VkDebugUtilsMessengerCreateInfoEXT debug_utils_info{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT}; + debug_utils_info.pNext = nullptr; + debug_utils_info.messageSeverity = severities; + debug_utils_info.messageType = types; + debug_utils_info.pfnUserCallback = reinterpret_cast(test_DebugUtilsCallback); + debug_utils_info.pUserData = reinterpret_cast(this); + return create_messenger(inst, &debug_utils_info, nullptr, messenger); + } + + VkResult DestroyUtilsMessenger(VkInstance inst, VkDebugUtilsMessengerEXT messenger) { + PFN_vkDestroyDebugUtilsMessengerEXT destroy_messenger = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkDestroyDebugUtilsMessengerEXT")); + if (nullptr == destroy_messenger) { + return VK_ERROR_INITIALIZATION_FAILED; + } + destroy_messenger(inst, messenger, nullptr); + return VK_SUCCESS; + } + + virtual void TearDown() { env.reset(); } + + std::unique_ptr env; + bool allow_any_message; + std::string expected_message; + VkObjectType expected_object_type; + bool check_object_handle; + uint64_t expected_object_handle; + VkDebugUtilsMessageTypeFlagsEXT expected_message_flags; + VkDebugUtilsMessageSeverityFlagsEXT expected_severity_flags; + bool message_found; +}; + +// This is the actual callback prototyped above. + +VkBool32 VKAPI_CALL test_DebugUtilsCallback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, + VkDebugUtilsMessageTypeFlagsEXT message_types, + const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data) { + DebugUtilTest* debug_util_test = reinterpret_cast(user_data); + debug_util_test->VerifyExpected(message_types, message_severity, callback_data->pMessage, callback_data); + return VK_FALSE; +} + +class CreateDestroyInstanceMessenger : public DebugUtilTest {}; +class SeparateMessenger : public DebugUtilTest {}; +class ManualMessage : public DebugUtilTest {}; + +// Test creating and destroying instance looking for errors, but none should occur. +TEST_F(CreateDestroyInstanceMessenger, NoCallback) { + // Make sure we don't find any errors + allow_any_message = true; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(false, message_found); +} + +// Test debug utils (error) created in vkCreateInstance with warning in vkCreateInstance +TEST_F(CreateDestroyInstanceMessenger, WarnInCreateIgnored) { + expected_message = "The API Variant specified"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; + + VkApplicationInfo app_info; + app_info.apiVersion = VK_MAKE_API_VERSION(1, 1, 0, 0); + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst, &app_info)); + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(false, message_found); +} + +// Test debug utils (error/warning) created in vkCreateInstance with warning in vkCreateInstance +TEST_F(CreateDestroyInstanceMessenger, WarnInCreate) { + expected_message = "The API Variant specified"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; + + VkApplicationInfo app_info; + app_info.apiVersion = VK_MAKE_API_VERSION(1, 1, 0, 0); + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, &inst, &app_info)); + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(true, message_found); +} + +// Test debug utils error created in vkCreateInstance with error in vkEnumeratePhysicalDevices. +// This should not be logged because we have only defined the debug utils logging for vkCreateInstance +// and vkDestroyInstance. +TEST_F(SeparateMessenger, ErrorInEnumDevsNoMessenger) { + expected_message = "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, nullptr, nullptr), VK_ERROR_INITIALIZATION_FAILED); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should NOT be found (because we don't have a report callback setup outside of the create/destroy instance chain) + ASSERT_EQ(false, message_found); +} + +// Test debug utils created outside of vkCreateInstance with error in vkEnumeratePhysicalDevices, but, with the wrong +// message type so it still won't be logged. +TEST_F(SeparateMessenger, ErrorInEnumDevsWrongType) { + expected_message = "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect performance warnings and errors + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, + &messenger)); + + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, nullptr, nullptr), VK_ERROR_INITIALIZATION_FAILED); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(false, message_found); +} + +// Test debug utils created outside of vkCreateInstance with error in vkEnumeratePhysicalDevices, but, with the wrong +// message severity so it still won't be logged. +TEST_F(SeparateMessenger, ErrorInEnumDevsWrongSeverity) { + expected_message = "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect only validation warnings + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, &messenger)); + + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, nullptr, nullptr), VK_ERROR_INITIALIZATION_FAILED); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(false, message_found); +} + +// Test debug utils created outside of vkCreateInstance with error in vkEnumeratePhysicalDevices with the correct type. +TEST_F(SeparateMessenger, ErrorInEnumDevs) { + expected_message = "VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect validation errors + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &messenger)); + + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, nullptr, nullptr), VK_ERROR_INITIALIZATION_FAILED); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + ASSERT_EQ(true, message_found); +} + +// Test debug utils created outside of vkCreateInstance with info in vkEnumeratePhysicalDevices. +// This should not be logged because type is wrong. +TEST_F(SeparateMessenger, InfoInEnumDevsIgnoredType) { + expected_message = "Trimming device count from 6 to 5"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect validation info + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, &messenger)); + + uint32_t max_count = 5; + std::array devices; + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, &max_count, devices.data()), VK_INCOMPLETE); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found (because it's info) + ASSERT_EQ(false, message_found); +} + +// Test debug utils created outside of vkCreateInstance with info in vkEnumeratePhysicalDevices. +// This should not be logged because severity is wrong. +TEST_F(SeparateMessenger, InfoInEnumDevsIgnoredSeverity) { + expected_message = "Trimming device count from 6 to 5"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect general errors/warnings + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, + &messenger)); + + uint32_t max_count = 5; + std::array devices; + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, &max_count, devices.data()), VK_INCOMPLETE); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found (because it's info) + ASSERT_EQ(false, message_found); +} + +// Test debug utils created outside of vkCreateInstance with info in vkEnumeratePhysicalDevices. +TEST_F(SeparateMessenger, InfoInEnumDevs) { + expected_message = "Trimming device count from 6 to 5"; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + ASSERT_EQ(false, message_found); + + // Create the debug utils messenger to collect general errors/warnings + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, &messenger)); + + uint32_t max_count = 5; + std::array devices; + ASSERT_EQ(env->vulkan_functions.vkEnumeratePhysicalDevices(inst, &max_count, devices.data()), VK_INCOMPLETE); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should be found + ASSERT_EQ(true, message_found); +} + +// Test messenger created outside of vkCreateInstance with a manual info message of the wrong message severity to be logged. +TEST_F(ManualMessage, InfoMessageIgnoredSeverity) { + const char my_message[] = "This is my special message!"; + expected_message = my_message; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect general errors/warnings + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, + CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, + &messenger)); + + // Trigger the message + PFN_vkSubmitDebugUtilsMessageEXT submit_message = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkSubmitDebugUtilsMessageEXT")); + ASSERT_NE(nullptr, submit_message); + + VkDebugUtilsObjectNameInfoEXT object{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT}; + object.objectType = VK_OBJECT_TYPE_INSTANCE; + object.objectHandle = (uint64_t)inst; + VkDebugUtilsMessengerCallbackDataEXT message_data{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT}; + message_data.pMessage = my_message; + message_data.objectCount = 1; + message_data.pObjects = &object; + submit_message(inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, &message_data); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found + ASSERT_EQ(false, message_found); +} + +// Test messenger created outside of vkCreateInstance with a manual info message of the wrong object type to be logged. +TEST_F(ManualMessage, InfoMessageIgnoredObject) { + const char my_message[] = "This is my special message!"; + expected_message = my_message; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect general errors/warnings + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, &messenger)); + + // Trigger the message + PFN_vkSubmitDebugUtilsMessageEXT submit_message = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkSubmitDebugUtilsMessageEXT")); + ASSERT_NE(nullptr, submit_message); + + VkDebugUtilsObjectNameInfoEXT object{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT}; + object.objectType = VK_OBJECT_TYPE_COMMAND_POOL; + object.objectHandle = (uint64_t)inst; + VkDebugUtilsMessengerCallbackDataEXT message_data{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT}; + message_data.pMessage = my_message; + message_data.objectCount = 1; + message_data.pObjects = &object; + submit_message(inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, &message_data); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should not be found + ASSERT_EQ(false, message_found); +} + +// Test messenger created outside of vkCreateInstance with a manual info message. +TEST_F(ManualMessage, InfoMessage) { + const char my_message[] = "This is my special message!"; + expected_message = my_message; + expected_object_type = VK_OBJECT_TYPE_INSTANCE; + expected_message_flags = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; + expected_severity_flags = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + VkInstance inst = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsInstance(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, &inst)); + + // Create the debug utils messenger to collect general errors/warnings + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, CreateUtilsMessenger(inst, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, + VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, &messenger)); + + // Trigger the message + PFN_vkSubmitDebugUtilsMessageEXT submit_message = reinterpret_cast( + env->vulkan_functions.vkGetInstanceProcAddr(inst, "vkSubmitDebugUtilsMessageEXT")); + ASSERT_NE(nullptr, submit_message); + + VkDebugUtilsObjectNameInfoEXT object{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT}; + object.objectType = VK_OBJECT_TYPE_INSTANCE; + object.objectHandle = (uint64_t)inst; + VkDebugUtilsMessengerCallbackDataEXT message_data{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT}; + message_data.pMessage = my_message; + message_data.objectCount = 1; + message_data.pObjects = &object; + submit_message(inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, &message_data); + + // Now that we should have gotten our message, destroy the messenger + ASSERT_EQ(VK_SUCCESS, DestroyUtilsMessenger(inst, messenger)); + + env->vulkan_functions.vkDestroyInstance(inst, nullptr); + + // Message should be found + ASSERT_EQ(true, message_found); +} + +void CheckDeviceFunctions(FrameworkEnvironment& env, bool use_GIPA, bool enable_debug_extensions, + bool hardware_supports_debug_exts) { + InstWrapper inst(env.vulkan_functions); + if (enable_debug_extensions) { + inst.create_info.add_extension("VK_EXT_debug_utils"); + inst.create_info.add_extension("VK_EXT_debug_report"); + } + inst.create_info.setup_WSI(); + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + auto phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension("VK_KHR_swapchain"); + dev.create_info.add_device_queue(DeviceQueueCreateInfo{}.add_priority(0.0f)); + if (enable_debug_extensions) { + dev.create_info.add_extension("VK_EXT_debug_marker"); + } + + if (enable_debug_extensions && !hardware_supports_debug_exts) { + // if the hardware doesn't support VK_EXT_debug_marker and we are trying to enable it, then we should exit since that will + // fail to create a device + + dev.CheckCreate(phys_dev, VK_ERROR_EXTENSION_NOT_PRESENT); + return; + } else { + ASSERT_NO_FATAL_FAILURE(dev.CheckCreate(phys_dev)); + } + DeviceFunctions dev_funcs{env.vulkan_functions, dev}; + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + + VkSwapchainCreateInfoKHR info{}; + info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + info.surface = surface; + + VkSwapchainKHR swapchain{}; + ASSERT_EQ(VK_SUCCESS, dev_funcs.vkCreateSwapchainKHR(dev.dev, &info, nullptr, &swapchain)); + + auto load_function = [&inst, &dev, use_GIPA](const char* func_name) { + return use_GIPA ? inst.load(func_name) : dev.load(func_name); + }; + + // Debug marker + PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT = load_function("vkDebugMarkerSetObjectTagEXT"); + PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT = load_function("vkDebugMarkerSetObjectNameEXT"); + PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT = load_function("vkCmdDebugMarkerBeginEXT"); + PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT = load_function("vkCmdDebugMarkerEndEXT"); + PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT = load_function("vkCmdDebugMarkerInsertEXT"); + // Debug utils + PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT = load_function("vkSetDebugUtilsObjectNameEXT"); + PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT = load_function("vkSetDebugUtilsObjectTagEXT"); + PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT = load_function("vkQueueBeginDebugUtilsLabelEXT"); + PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT = load_function("vkQueueEndDebugUtilsLabelEXT"); + PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT = load_function("vkQueueInsertDebugUtilsLabelEXT"); + PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT = load_function("vkCmdBeginDebugUtilsLabelEXT"); + PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT = load_function("vkCmdEndDebugUtilsLabelEXT"); + PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT = load_function("vkCmdInsertDebugUtilsLabelEXT"); + + // Debug marker functions - should always be found when using GIPA but when using GDPA found only when the extension is enabled + if (use_GIPA) { + ASSERT_TRUE(nullptr != DebugMarkerSetObjectTagEXT); + ASSERT_TRUE(nullptr != DebugMarkerSetObjectNameEXT); + ASSERT_TRUE(nullptr != CmdDebugMarkerBeginEXT); + ASSERT_TRUE(nullptr != CmdDebugMarkerEndEXT); + ASSERT_TRUE(nullptr != CmdDebugMarkerInsertEXT); + } else { + ASSERT_EQ(enable_debug_extensions, nullptr != DebugMarkerSetObjectTagEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != DebugMarkerSetObjectNameEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != CmdDebugMarkerBeginEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != CmdDebugMarkerEndEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != CmdDebugMarkerInsertEXT); + } + + // Debug utils functions - should only be found if the extension was enabled (because its instance level) + ASSERT_EQ(enable_debug_extensions, nullptr != SetDebugUtilsObjectNameEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != SetDebugUtilsObjectTagEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != QueueBeginDebugUtilsLabelEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != QueueEndDebugUtilsLabelEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != QueueInsertDebugUtilsLabelEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != CmdBeginDebugUtilsLabelEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != CmdEndDebugUtilsLabelEXT); + ASSERT_EQ(enable_debug_extensions, nullptr != CmdInsertDebugUtilsLabelEXT); + + if (SetDebugUtilsObjectNameEXT) { + VkDebugUtilsObjectNameInfoEXT obj_name_info{}; + obj_name_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + obj_name_info.objectHandle = (uint64_t)swapchain; + obj_name_info.objectType = VK_OBJECT_TYPE_SWAPCHAIN_KHR; + obj_name_info.pObjectName = " Your mom!"; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(dev.dev, &obj_name_info)); + + obj_name_info.objectHandle = (uint64_t)(uintptr_t)surface; + obj_name_info.objectType = VK_OBJECT_TYPE_SURFACE_KHR; + obj_name_info.pObjectName = " Your moms surface!"; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(dev.dev, &obj_name_info)); + + obj_name_info.objectHandle = (uint64_t)(uintptr_t)phys_dev; + obj_name_info.objectType = VK_OBJECT_TYPE_PHYSICAL_DEVICE; + obj_name_info.pObjectName = "Physical Device AAAAAAAAA"; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(dev.dev, &obj_name_info)); + + obj_name_info.objectHandle = (uint64_t)(uintptr_t)inst.inst; + obj_name_info.objectType = VK_OBJECT_TYPE_INSTANCE; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(dev.dev, &obj_name_info)); + } + if (SetDebugUtilsObjectTagEXT) { + VkDebugUtilsObjectTagInfoEXT utils_object_tag{}; + utils_object_tag.objectHandle = (uint64_t)(uintptr_t)inst.inst; + utils_object_tag.objectType = VK_OBJECT_TYPE_INSTANCE; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectTagEXT(dev.dev, &utils_object_tag)); + + utils_object_tag.objectHandle = (uint64_t)(uintptr_t)phys_dev; + utils_object_tag.objectType = VK_OBJECT_TYPE_PHYSICAL_DEVICE; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectTagEXT(dev.dev, &utils_object_tag)); + + utils_object_tag.objectHandle = (uint64_t)surface; + utils_object_tag.objectType = VK_OBJECT_TYPE_SURFACE_KHR; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectTagEXT(dev.dev, &utils_object_tag)); + } + VkDebugMarkerObjectTagInfoEXT marker_object_tag{}; + VkDebugMarkerObjectNameInfoEXT marker_object_name{}; + if (use_GIPA && !enable_debug_extensions) { + // These functions crash when the extension isn't enabled and the function was acquired with GIPA. + ASSERT_DEATH(DebugMarkerSetObjectTagEXT(dev.dev, &marker_object_tag), ""); + ASSERT_DEATH(DebugMarkerSetObjectNameEXT(dev.dev, &marker_object_name), ""); + } else { + if (DebugMarkerSetObjectTagEXT) { + marker_object_tag.object = (uint64_t)(uintptr_t)swapchain; + marker_object_tag.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(dev.dev, &marker_object_tag)); + + marker_object_tag.object = (uint64_t)(uintptr_t)phys_dev; + marker_object_tag.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(dev.dev, &marker_object_tag)); + + marker_object_tag.object = (uint64_t)surface; + marker_object_tag.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(dev.dev, &marker_object_tag)); + + marker_object_tag.object = (uint64_t)(uintptr_t)inst.inst; + marker_object_tag.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(dev.dev, &marker_object_tag)); + } + if (DebugMarkerSetObjectNameEXT) { + marker_object_name.object = (uint64_t)(uintptr_t)swapchain; + marker_object_name.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(dev.dev, &marker_object_name)); + + marker_object_name.object = (uint64_t)(uintptr_t)phys_dev; + marker_object_name.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(dev.dev, &marker_object_name)); + + marker_object_name.object = (uint64_t)surface; + marker_object_name.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(dev.dev, &marker_object_name)); + + marker_object_name.object = (uint64_t)(uintptr_t)inst.inst; + marker_object_name.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(dev.dev, &marker_object_name)); + } + } + VkQueue queue{}; + dev.functions->vkGetDeviceQueue(dev.dev, 0, 0, &queue); + VkDebugUtilsLabelEXT utils_label{}; + utils_label.pLabelName = "Testing testing 123"; + if (QueueBeginDebugUtilsLabelEXT) QueueBeginDebugUtilsLabelEXT(queue, &utils_label); + if (QueueEndDebugUtilsLabelEXT) QueueEndDebugUtilsLabelEXT(queue); + if (QueueInsertDebugUtilsLabelEXT) QueueInsertDebugUtilsLabelEXT(queue, &utils_label); + VkCommandBuffer cmd_buf{}; + VkCommandPool cmd_pool; + VkCommandPoolCreateInfo cmd_pool_info{}; + cmd_pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + ASSERT_EQ(VK_SUCCESS, dev_funcs.vkCreateCommandPool(dev.dev, &cmd_pool_info, nullptr, &cmd_pool)); + VkCommandBufferAllocateInfo cmd_buf_alloc_info{}; + cmd_buf_alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + cmd_buf_alloc_info.commandBufferCount = 1; + cmd_buf_alloc_info.commandPool = cmd_pool; + ASSERT_EQ(VK_SUCCESS, dev_funcs.vkAllocateCommandBuffers(dev.dev, &cmd_buf_alloc_info, &cmd_buf)); + if (CmdBeginDebugUtilsLabelEXT) CmdBeginDebugUtilsLabelEXT(cmd_buf, &utils_label); + if (CmdEndDebugUtilsLabelEXT) CmdEndDebugUtilsLabelEXT(cmd_buf); + if (CmdInsertDebugUtilsLabelEXT) CmdInsertDebugUtilsLabelEXT(cmd_buf, &utils_label); + + dev_funcs.vkDestroySwapchainKHR(dev.dev, swapchain, nullptr); + env.vulkan_functions.vkDestroySurfaceKHR(inst.inst, surface, nullptr); +} + +TEST(GetProcAddr, DebugFuncsWithTerminator) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).setup_WSI().add_physical_device("physical_device_0"); + driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain"}); + // Hardware doesn't support the debug extensions + + // Use getDeviceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, false)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, false)); + + // Use getInstanceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, false)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, false)); + + // Now set the hardware to support the extensions and run the situations again + driver.add_instance_extensions({"VK_EXT_debug_utils", "VK_EXT_debug_report"}); + driver.physical_devices.at(0).add_extensions({"VK_EXT_debug_marker"}); + + // Use getDeviceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, true)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, true)); + + // Use getInstanceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, true)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, true)); +} + +TEST(GetProcAddr, DebugFuncsWithTrampoline) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).setup_WSI().add_physical_device("physical_device_0"); + driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain"}); + // Hardware doesn't support the debug extensions + + // Use getDeviceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, false)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, false)); + + // Use getInstanceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, false)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, false)); + + // Now add a layer that supports the extensions and run the situations again + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_test_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_instance_extensions({{VK_EXT_DEBUG_REPORT_EXTENSION_NAME}, + {VK_EXT_DEBUG_UTILS_EXTENSION_NAME}}) + .add_device_extension({VK_EXT_DEBUG_MARKER_EXTENSION_NAME})), + "test_layer.json"); + + // // Use getDeviceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, true)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, true)); + + // Use getInstanceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, true)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, true)); +} + +TEST(GetProcAddr, DebugFuncsWithDebugExtsForceAdded) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).setup_WSI().add_physical_device("physical_device_0"); + driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain"}); + // Hardware doesn't support the debug extensions + + // Use getDeviceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, false)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, false)); + + // Use getInstanceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, false)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, false)); + + // Now add a layer that supports the extensions and run the situations again + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_test_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "test_layer.json"); + env.get_test_layer() + .add_injected_instance_extensions({{VK_EXT_DEBUG_REPORT_EXTENSION_NAME}, {VK_EXT_DEBUG_UTILS_EXTENSION_NAME}}) + .add_injected_device_extension({VK_EXT_DEBUG_MARKER_EXTENSION_NAME}); + + // Use getDeviceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, true)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, true)); + + // Use getInstanceProcAddr & vary enabling the debug extensions + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, true)); + ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, true)); +} + +TEST(DebugUtils, WrappingLayer) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .set_min_icd_interface_version(5) + .add_physical_device(PhysicalDevice{}.add_extension(VK_EXT_DEBUG_MARKER_EXTENSION_NAME).finish()) + .add_instance_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + + const char* wrap_objects_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(wrap_objects_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS) + .set_disable_environment("DISABLE_ME") + .add_instance_extension({VK_EXT_DEBUG_UTILS_EXTENSION_NAME})), + "wrap_objects_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.add_extension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); + inst.create_info.add_layer(wrap_objects_name); + inst.CheckCreate(); + DebugUtilsWrapper log{inst}; + CreateDebugUtilsMessenger(log); + + auto phys_dev = inst.GetPhysDev(); + DeviceWrapper device{inst}; + device.create_info.add_extension(VK_EXT_DEBUG_MARKER_EXTENSION_NAME); + device.CheckCreate(phys_dev); + { + PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT = inst.load("vkSetDebugUtilsObjectNameEXT"); + + VkDebugUtilsObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + info.objectType = VK_OBJECT_TYPE_DEVICE; + info.objectHandle = (uint64_t)device.dev; + info.pObjectName = "Test Name"; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(device, &info)); + + info.objectType = VK_OBJECT_TYPE_PHYSICAL_DEVICE; + info.objectHandle = (uint64_t)phys_dev; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(device, &info)); + + info.objectType = VK_OBJECT_TYPE_INSTANCE; + info.objectHandle = (uint64_t)inst.inst; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectNameEXT(device, &info)); + } + { + PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT = inst.load("vkSetDebugUtilsObjectTagEXT"); + + VkDebugUtilsObjectTagInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT; + info.objectType = VK_OBJECT_TYPE_DEVICE; + info.objectHandle = (uint64_t)device.dev; + info.pTag = "Test Name"; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectTagEXT(device, &info)); + + info.objectType = VK_OBJECT_TYPE_PHYSICAL_DEVICE; + info.objectHandle = (uint64_t)phys_dev; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectTagEXT(device, &info)); + + info.objectType = VK_OBJECT_TYPE_INSTANCE; + info.objectHandle = (uint64_t)inst.inst; + ASSERT_EQ(VK_SUCCESS, SetDebugUtilsObjectTagEXT(device, &info)); + } + // Debug marker + { + PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT = inst.load("vkDebugMarkerSetObjectNameEXT"); + + VkDebugMarkerObjectNameInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT; + info.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT; + info.object = (uint64_t)device.dev; + info.pObjectName = "Test Name"; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(device, &info)); + + info.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT; + info.object = (uint64_t)phys_dev; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(device, &info)); + + info.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + info.object = (uint64_t)inst.inst; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectNameEXT(device, &info)); + } + { + PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT = inst.load("vkDebugMarkerSetObjectTagEXT"); + + VkDebugMarkerObjectTagInfoEXT info = {}; + info.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT; + info.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT; + info.object = (uint64_t)device.dev; + info.pTag = "Test Name"; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(device, &info)); + + info.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT; + info.object = (uint64_t)phys_dev; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(device, &info)); + + info.objectType = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT; + info.object = (uint64_t)inst.inst; + ASSERT_EQ(VK_SUCCESS, DebugMarkerSetObjectTagEXT(device, &info)); + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_envvar_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_envvar_tests.cpp new file mode 100644 index 0000000000..c94c2ecdd4 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_envvar_tests.cpp @@ -0,0 +1,851 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + * Author: Mark Young + */ + +#include "test_environment.h" + +// Don't support vk_icdNegotiateLoaderICDInterfaceVersion +// Loader calls vk_icdGetInstanceProcAddr second +// does not support vk_icdGetInstanceProcAddr +// must export vkGetInstanceProcAddr, vkCreateInstance, vkEnumerateInstanceExtensionProperties +TEST(EnvVarICDOverrideSetup, version_0_none) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_EQ(env.get_test_icd(0).called_vk_icd_gipa, CalledICDGIPA::vk_gipa); +} + +// Don't support vk_icdNegotiateLoaderICDInterfaceVersion +// the loader calls vk_icdGetInstanceProcAddr first +TEST(EnvVarICDOverrideSetup, version_1_icd_gipa) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_ICD_GIPA).set_discovery_type(ManifestDiscoveryType::env_var)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_EQ(env.get_test_icd(0).called_vk_icd_gipa, CalledICDGIPA::vk_icd_gipa); +} + +// support vk_icdNegotiateLoaderICDInterfaceVersion but not vk_icdGetInstanceProcAddr +TEST(EnvVarICDOverrideSetup, version_negotiate_interface_version_death_test) { + FrameworkEnvironment env{}; + env.add_icd( + TestICDDetails(TEST_ICD_PATH_EXPORT_NEGOTIATE_INTERFACE_VERSION).set_discovery_type(ManifestDiscoveryType::env_var)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); +} + +// export vk_icdNegotiateLoaderICDInterfaceVersion and vk_icdGetInstanceProcAddr +TEST(EnvVarICDOverrideSetup, version_2_negotiate_interface_version_and_icd_gipa) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2).set_discovery_type(ManifestDiscoveryType::env_var)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_EQ(env.get_test_icd(0).called_vk_icd_gipa, CalledICDGIPA::vk_icd_gipa); +} + +// export vk_icdNegotiateLoaderICDInterfaceVersion and vk_icdGetInstanceProcAddr +TEST(EnvVarICDOverrideSetup, version_2_negotiate_interface_version_and_icd_gipa_unicode) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(widen(TEST_ICD_PATH_VERSION_2_UNICODE)) + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_json_name(widen(TEST_JSON_NAME_VERSION_2_UNICODE))); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_EQ(env.get_test_icd(0).called_vk_icd_gipa, CalledICDGIPA::vk_icd_gipa); +} + +// Test VK_DRIVER_FILES environment variable +TEST(EnvVarICDOverrideSetup, TestOnlyDriverEnvVar) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var)); + env.get_test_icd(0).add_physical_device("pd0"); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + EXPECT_FALSE( + env.debug_log.find("Ignoring override VK_ICD_FILENAMES, VK_DRIVER_FILES, and VK_ADD_DRIVER_FILES due to high-integrity")); + + std::array phys_devs_array; + uint32_t phys_dev_count = 1; + ASSERT_EQ(inst1->vkEnumeratePhysicalDevices(inst1.inst, &phys_dev_count, phys_devs_array.data()), VK_SUCCESS); + ASSERT_EQ(phys_dev_count, 1U); + + for (uint32_t add = 0; add < 2; ++add) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var)) + .add_physical_device("pd" + std::to_string(add) + "0") + .add_physical_device("pd" + std::to_string(add) + "1"); + } + + env.debug_log.clear(); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + phys_dev_count = 5; + ASSERT_EQ(inst2->vkEnumeratePhysicalDevices(inst2.inst, &phys_dev_count, phys_devs_array.data()), VK_SUCCESS); + ASSERT_EQ(phys_dev_count, 5U); + + env.debug_log.clear(); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + + EXPECT_TRUE(env.debug_log.find("vkCreateInstance: Found no drivers!")); + + env.platform_shim->set_elevated_privilege(false); +} + +// Test VK_DRIVER_FILES environment variable containing a path to a folder +TEST(EnvVarICDOverrideSetup, TestOnlyDriverEnvVarInFolder) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var).set_is_dir(false)); + env.get_test_icd(0).add_physical_device("pd0"); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + EXPECT_FALSE( + env.debug_log.find("Ignoring override VK_ICD_FILENAMES, VK_DRIVER_FILES, and VK_ADD_DRIVER_FILES due to high-integrity")); + + std::array phys_devs_array; + uint32_t phys_dev_count = 1; + ASSERT_EQ(inst1->vkEnumeratePhysicalDevices(inst1.inst, &phys_dev_count, phys_devs_array.data()), VK_SUCCESS); + ASSERT_EQ(phys_dev_count, 1U); + + for (uint32_t add = 0; add < 2; ++add) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var)) + .add_physical_device("pd" + std::to_string(add) + "0") + .add_physical_device("pd" + std::to_string(add) + "1"); + } + + env.debug_log.clear(); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + phys_dev_count = 5; + ASSERT_EQ(inst2->vkEnumeratePhysicalDevices(inst2.inst, &phys_dev_count, phys_devs_array.data()), VK_SUCCESS); + ASSERT_EQ(phys_dev_count, 5U); + + env.debug_log.clear(); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + + EXPECT_TRUE(env.debug_log.find("vkCreateInstance: Found no drivers!")); + + env.platform_shim->set_elevated_privilege(false); +} + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +// Make sure the loader reports the correct message based on if LOADER_USE_UNSAFE_FILE_SEARCH is set or not +TEST(EnvVarICDOverrideSetup, NonSecureEnvVarLookup) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + +#if !defined(LOADER_USE_UNSAFE_FILE_SEARCH) + ASSERT_FALSE(log.find("Loader is using non-secure environment variable lookup for")); +#else + ASSERT_TRUE(log.find("Loader is using non-secure environment variable lookup for")); +#endif +} + +// Check for proper handling of paths specified via environment variables. +TEST(EnvVarICDOverrideSetup, XDG) { + // Set up a layer path that includes default and user-specified locations, + // so that the test app can find them. Include some badly specified elements as well. + // Need to redirect the 'home' directory + std::filesystem::path HOME = "/home/fake_home"; + EnvVarWrapper home_env_var{"HOME", HOME}; + EnvVarWrapper xdg_config_dirs_env_var{"XDG_CONFIG_DIRS", ":/tmp/goober:::::/tmp/goober/::::"}; + EnvVarWrapper xdg_config_home_env_var{"XDG_CONFIG_HOME", ":/tmp/goober:::::/tmp/goober2/::::"}; + EnvVarWrapper xdg_data_dirs_env_var{"XDG_DATA_DIRS", "::::/tmp/goober3:/tmp/goober4/with spaces:::"}; + EnvVarWrapper xdg_data_home_env_var{"XDG_DATA_HOME", "::::/tmp/goober3:/tmp/goober4/with spaces:::"}; + + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + auto check_paths = [](DebugUtilsLogger const& debug_log, ManifestCategory category) { + EXPECT_TRUE(debug_log.find((std::filesystem::path("/tmp/goober/vulkan") / category_path_name(category)))); + EXPECT_TRUE(debug_log.find((std::filesystem::path("/tmp/goober2/vulkan") / category_path_name(category)))); + EXPECT_TRUE(debug_log.find((std::filesystem::path("/tmp/goober3/vulkan") / category_path_name(category)))); + EXPECT_TRUE(debug_log.find((std::filesystem::path("/tmp/goober4/with spaces/vulkan") / category_path_name(category)))); + }; + check_paths(env.debug_log, ManifestCategory::icd); + check_paths(env.debug_log, ManifestCategory::implicit_layer); + check_paths(env.debug_log, ManifestCategory::explicit_layer); +} +// Check that a json file in the paths don't cause the loader to crash +TEST(EnvVarICDOverrideSetup, XDGContainsJsonFile) { + // Set up a layer path that includes default and user-specified locations, + // so that the test app can find them. Include some badly specified elements as well. + // Need to redirect the 'home' directory + EnvVarWrapper xdg_config_dirs_env_var{"XDG_CONFIG_DIRS", "bad_file.json"}; + + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); +} +#endif + +// Test VK_ADD_DRIVER_FILES environment variable +TEST(EnvVarICDOverrideSetup, TestOnlyAddDriverEnvVar) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::add_env_var)); + env.get_test_icd(0).physical_devices.emplace_back("pd0"); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + std::array phys_devs_array; + uint32_t phys_dev_count = 1; + ASSERT_EQ(inst1->vkEnumeratePhysicalDevices(inst1.inst, &phys_dev_count, phys_devs_array.data()), VK_SUCCESS); + ASSERT_EQ(phys_dev_count, 1U); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + + EXPECT_TRUE(env.debug_log.find("vkCreateInstance: Found no drivers!")); + + env.platform_shim->set_elevated_privilege(false); +} + +// Test Both VK_DRIVER_FILES and VK_ADD_DRIVER_FILES environment variable +TEST(EnvVarICDOverrideSetup, TestBothDriverEnvVars) { + FrameworkEnvironment env{}; + + // Add a driver that isn't enabled with the environment variable + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var)); + env.get_test_icd(0).add_physical_device("pd0").add_physical_device("pd1"); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::add_env_var)); + env.get_test_icd(0).add_physical_device("pd2"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // The enumerate should now detect both drivers because we used the add + std::array phys_devs_array; + uint32_t phys_dev_count = 3; + ASSERT_EQ(inst->vkEnumeratePhysicalDevices(inst.inst, &phys_dev_count, phys_devs_array.data()), VK_SUCCESS); + ASSERT_EQ(phys_dev_count, 3U); +} + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +// Test VK_LAYER_PATH environment variable +TEST(EnvVarICDOverrideSetup, TestOnlyLayerEnvVar) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + env.platform_shim->redirect_path("/tmp/carol", env.get_folder(ManifestLocation::explicit_layer_env_var).location()); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + TestLayerDetails(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json") + .set_discovery_type(ManifestDiscoveryType::env_var)); + + // Now set up a layer path that includes default and user-specified locations, + // so that the test app can find them. Include some badly specified elements as well. + // Need to redirect the 'home' directory + std::filesystem::path HOME = "/home/fake_home"; + EnvVarWrapper home_env_var{"HOME", HOME}; + std::string vk_layer_path = ":/tmp/carol::::/:"; + vk_layer_path += (HOME / "/ with spaces/:::::/tandy:"); + EnvVarWrapper layer_path_env_var{"VK_LAYER_PATH", vk_layer_path}; + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + // look for VK_LAYER_PATHS + EXPECT_TRUE(env.debug_log.find("/tmp/carol")); + EXPECT_TRUE(env.debug_log.find("/tandy")); + EXPECT_TRUE(env.debug_log.find((HOME / "/ with spaces/"))); + + env.debug_log.clear(); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + + EXPECT_FALSE(env.debug_log.find("/tmp/carol")); + + env.platform_shim->set_elevated_privilege(false); +} + +// Test VK_ADD_LAYER_PATH environment variable +TEST(EnvVarICDOverrideSetup, TestOnlyAddLayerEnvVar) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + env.platform_shim->redirect_path("/tmp/carol", env.get_folder(ManifestLocation::explicit_layer_add_env_var).location()); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + TestLayerDetails(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json") + .set_discovery_type(ManifestDiscoveryType::add_env_var)); + + // Set up a layer path that includes default and user-specified locations, + // so that the test app can find them. Include some badly specified elements as well. + // Need to redirect the 'home' directory + std::filesystem::path HOME = "/home/fake_home"; + EnvVarWrapper home_env_var{"HOME", HOME}; + std::string vk_layer_path = ":/tmp/carol::::/:"; + vk_layer_path += (HOME / "/ with spaces/:::::/tandy:"); + EnvVarWrapper add_layer_path_env_var{"VK_ADD_LAYER_PATH", vk_layer_path}; + + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + // look for VK_ADD_LAYER_PATHS + EXPECT_TRUE(env.debug_log.find("/tmp/carol")); + EXPECT_TRUE(env.debug_log.find("/tandy")); + EXPECT_TRUE(env.debug_log.find((HOME / "/ with spaces/"))); + + env.debug_log.clear(); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + + EXPECT_FALSE(env.debug_log.find("/tmp/carol")); + + env.platform_shim->set_elevated_privilege(false); +} + +// Test VK_IMPLICIT_LAYER_PATH environment variable +TEST(EnvVarICDOverrideSetup, TestOnlyImplicitLayerEnvVar) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + env.platform_shim->redirect_path("/tmp/carol", env.get_folder(ManifestLocation::implicit_layer_env_var).location()); + + const char* layer_name = "TestLayer"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json") + .set_discovery_type(ManifestDiscoveryType::env_var)); + + // Now set up a layer path that includes default and user-specified locations, + // so that the test app can find them. Include some badly specified elements as well. + // Need to redirect the 'home' directory + std::filesystem::path HOME = "/home/fake_home"; + EnvVarWrapper home_env_var{"HOME", HOME}; + std::string vk_implicit_layer_path = ":/tmp/carol::::/:"; + vk_implicit_layer_path += (HOME / "/ with spaces/:::::/tandy:"); + EnvVarWrapper implicit_layer_path_env_var{"VK_IMPLICIT_LAYER_PATH", vk_implicit_layer_path}; + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + auto active_layers1 = inst1.GetActiveLayers(inst1.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(active_layers1.at(0).layerName, layer_name)); + + // look for VK_IMPLICIT_LAYER_PATHS + EXPECT_TRUE(env.debug_log.find("/tmp/carol")); + EXPECT_TRUE(env.debug_log.find("/tandy")); + EXPECT_TRUE(env.debug_log.find((HOME / "/ with spaces/"))); + + env.debug_log.clear(); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + auto active_layers2 = inst2.GetActiveLayers(inst2.GetPhysDev(), 0); + ASSERT_TRUE(active_layers2.empty()); + + EXPECT_FALSE(env.debug_log.find("/tmp/carol")); + + env.platform_shim->set_elevated_privilege(false); +} + +// Test VK_ADD_IMPLICIT_LAYER_PATH environment variable +TEST(EnvVarICDOverrideSetup, TestOnlyAddImplicitLayerEnvVar) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + env.platform_shim->redirect_path("/tmp/carol", env.get_folder(ManifestLocation::implicit_layer_add_env_var).location()); + + const char* layer_name = "TestLayer"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ENV")), + "test_layer.json") + .set_discovery_type(ManifestDiscoveryType::add_env_var)); + + // Set up a layer path that includes default and user-specified locations, + // so that the test app can find them. Include some badly specified elements as well. + // Need to redirect the 'home' directory + std::filesystem::path HOME = "/home/fake_home"; + EnvVarWrapper home_env_var{"HOME", HOME}; + std::string vk_add_implicit_layer_path = ":/tmp/carol::::/:"; + vk_add_implicit_layer_path += (HOME / "/ with spaces/:::::/tandy:"); + EnvVarWrapper add_implicit_layer_path_env_var{"VK_ADD_LAYER_PATH", vk_add_implicit_layer_path}; + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + auto active_layers1 = inst1.GetActiveLayers(inst1.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(active_layers1.at(0).layerName, layer_name)); + + // look for VK_ADD_IMPLICIT_LAYER_PATHS + EXPECT_TRUE(env.debug_log.find("/tmp/carol")); + EXPECT_TRUE(env.debug_log.find("/tandy")); + EXPECT_TRUE(env.debug_log.find((HOME / "/ with spaces/"))); + + env.debug_log.clear(); + + env.platform_shim->set_elevated_privilege(true); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + auto active_layers2 = inst2.GetActiveLayers(inst2.GetPhysDev(), 0); + ASSERT_TRUE(active_layers2.empty()); + + EXPECT_FALSE(env.debug_log.find("/tmp/carol")); + + env.platform_shim->set_elevated_privilege(false); +} + +#endif + +// Test that the driver filter select will only enable driver manifest files that match the filter +TEST(EnvVarICDOverrideSetup, FilterSelectDriver) { + FrameworkEnvironment env{}; + EnvVarWrapper filter_select_env_var{"VK_LOADER_DRIVERS_SELECT"}; + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_6).set_disable_icd_inc(true).set_json_name("ABC_ICD")); + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_6, VK_API_VERSION_1_2}.set_disable_icd_inc(true).set_json_name("BCD_ICD")); + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_6, VK_API_VERSION_1_3}.set_disable_icd_inc(true).set_json_name("CDE_ICD")); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match full-name + env.debug_log.clear(); + filter_select_env_var.set_new_value("ABC_ICD.json"); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match prefix + env.debug_log.clear(); + filter_select_env_var.set_new_value("ABC*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match suffix + env.debug_log.clear(); + filter_select_env_var.set_new_value("*C_ICD.json"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match sub-string + env.debug_log.clear(); + filter_select_env_var.set_new_value("*BC*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + inst5.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match all with star '*' + env.debug_log.clear(); + filter_select_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + inst6.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match all with special name + env.debug_log.clear(); + filter_select_env_var.set_new_value("~all~"); + + InstWrapper inst7{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + inst7.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // The full-name string is not a valid match if it doesn't also include the file extension + env.debug_log.clear(); + filter_select_env_var.set_new_value("ABC_ICD"); + + InstWrapper inst8{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst8.create_info, env.debug_log); + inst8.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); +} + +// Test that the driver filter disable disables driver manifest files that match the filter +TEST(EnvVarICDOverrideSetup, FilterDisableDriver) { + FrameworkEnvironment env{}; + EnvVarWrapper filter_disable_env_var{"VK_LOADER_DRIVERS_DISABLE"}; + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_6).set_disable_icd_inc(true).set_json_name("ABC_ICD")); + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_6, VK_API_VERSION_1_2}.set_disable_icd_inc(true).set_json_name("BCD_ICD")); + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_6, VK_API_VERSION_1_3}.set_disable_icd_inc(true).set_json_name("CDE_ICD")); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match full-name + env.debug_log.clear(); + filter_disable_env_var.set_new_value("ABC_ICD.json"); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match prefix + env.debug_log.clear(); + filter_disable_env_var.set_new_value("ABC_*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match suffix + env.debug_log.clear(); + filter_disable_env_var.set_new_value("*C_ICD.json"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match substring + env.debug_log.clear(); + filter_disable_env_var.set_new_value("*BC*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + inst5.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match all with star '*' + env.debug_log.clear(); + filter_disable_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + inst6.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Match all with special name + env.debug_log.clear(); + filter_disable_env_var.set_new_value("~all~"); + + InstWrapper inst7{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + inst7.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); +} + +// Test that the when both driver filter select and disable environment variables are present, that the +// appropriate drivers are enabled and disabled +TEST(EnvVarICDOverrideSetup, FilterSelectAndDisableDriver) { + FrameworkEnvironment env{}; + EnvVarWrapper filter_disable_env_var{"VK_LOADER_DRIVERS_DISABLE"}; + EnvVarWrapper filter_select_env_var{"VK_LOADER_DRIVERS_SELECT"}; + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_6).set_disable_icd_inc(true).set_json_name("ABC_ICD")); + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_6, VK_API_VERSION_1_2}.set_disable_icd_inc(true).set_json_name("BCD_ICD")); + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_6, VK_API_VERSION_1_3}.set_disable_icd_inc(true).set_json_name("CDE_ICD")); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Disable two, but enable one + env.debug_log.clear(); + filter_disable_env_var.set_new_value("*BC*"); + filter_select_env_var.set_new_value("BCD*"); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Disable all, but enable two + env.debug_log.clear(); + filter_disable_env_var.set_new_value("*"); + filter_select_env_var.set_new_value("*BC*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); + + // Disable all, but enable all + env.debug_log.clear(); + filter_disable_env_var.set_new_value("*"); + filter_select_env_var.set_new_value("*"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "ABC_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("ABC_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "BCD_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("BCD_ICD.json", "ignored because it was disabled by env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found ICD manifest file", "CDE_ICD.json")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because not selected by env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("CDE_ICD.json", "ignored because it was disabled by env var")); +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_fuzz_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_fuzz_tests.cpp new file mode 100644 index 0000000000..8ac252cd2e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_fuzz_tests.cpp @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2024 The Khronos Group Inc. + * Copyright (c) 2024 Valve Corporation + * Copyright (c) 2024 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +extern "C" { +#include "loader.h" +#include "loader_json.h" +#include "settings.h" +} + +void execute_instance_enumerate_fuzzer(std::filesystem::path const& filename) { + FrameworkEnvironment env{}; + env.write_file_from_source((std::filesystem::path(CLUSTERFUZZ_TESTCASE_DIRECTORY) / filename).string().c_str(), + ManifestCategory::implicit_layer, ManifestLocation::implicit_layer, "complex_layer.json"); + env.write_file_from_source((std::filesystem::path(CLUSTERFUZZ_TESTCASE_DIRECTORY) / filename).string().c_str(), + ManifestCategory::settings, ManifestLocation::settings_location, "vk_loader_settings.json"); + + uint32_t pPropertyCount; + VkExtensionProperties pProperties = {0}; + + env.vulkan_functions.vkEnumerateInstanceExtensionProperties("test_auto", &pPropertyCount, &pProperties); +} +void execute_instance_create_fuzzer(std::filesystem::path const& filename) { + FrameworkEnvironment env{}; + env.write_file_from_source((std::filesystem::path(CLUSTERFUZZ_TESTCASE_DIRECTORY) / filename).string().c_str(), + ManifestCategory::implicit_layer, ManifestLocation::implicit_layer, "complex_layer.json"); + env.write_file_from_source((std::filesystem::path(CLUSTERFUZZ_TESTCASE_DIRECTORY) / filename).string().c_str(), + ManifestCategory::settings, ManifestLocation::settings_location, "vk_loader_settings.json"); + env.write_file_from_source((std::filesystem::path(CLUSTERFUZZ_TESTCASE_DIRECTORY) / filename).string().c_str(), + ManifestCategory::icd, ManifestLocation::driver, "icd_test.json"); + VkInstance inst = {0}; + const char* instance_layers[] = {"VK_LAYER_KHRONOS_validation", "VK_LAYER_test_layer_1", "VK_LAYER_test_layer_2"}; + VkApplicationInfo app{}; + app.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + app.pNext = NULL; + app.pApplicationName = "TEST_APP"; + app.applicationVersion = 0; + app.pEngineName = "TEST_ENGINE"; + app.engineVersion = 0; + app.apiVersion = VK_API_VERSION_1_0; + + VkInstanceCreateInfo inst_info{}; + inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + inst_info.pNext = NULL; + inst_info.pApplicationInfo = &app; + inst_info.enabledLayerCount = 1; + inst_info.ppEnabledLayerNames = (const char* const*)instance_layers; + inst_info.enabledExtensionCount = 0; + inst_info.ppEnabledExtensionNames = NULL; + + VkResult err = env.vulkan_functions.vkCreateInstance(&inst_info, NULL, &inst); + if (err != VK_SUCCESS) { + return; + } + + env.vulkan_functions.vkDestroyInstance(inst, NULL); +} + +void execute_json_load_fuzzer(std::string const& filename) { + FrameworkEnvironment env{}; + + cJSON* json = NULL; + loader_get_json(NULL, filename.c_str(), &json); + + if (json == NULL) { + return; + } + bool out_of_mem = false; + char* json_data = loader_cJSON_Print(json, &out_of_mem); + + if (json_data != NULL) { + free(json_data); + } + + if (json != NULL) { + loader_cJSON_Delete(json); + } +} +void execute_setting_fuzzer(std::filesystem::path const& filename) { + FrameworkEnvironment env{}; + + env.write_file_from_source((std::filesystem::path(CLUSTERFUZZ_TESTCASE_DIRECTORY) / filename).string().c_str(), + ManifestCategory::settings, ManifestLocation::settings_location, "vk_loader_settings.json"); + + update_global_loader_settings(); + struct loader_layer_list settings_layers = {0}; + bool should_search_for_other_layers = true; + get_settings_layers(NULL, &settings_layers, &should_search_for_other_layers); + loader_delete_layer_list_and_properties(NULL, &settings_layers); +} + +TEST(BadJsonInput, ClusterFuzzTestCase_5599244505186304) { + // Doesn't crash with ASAN or UBSAN + // Doesn't reproducibly crash - instance_create_fuzzer: Abrt in loader_cJSON_Delete + execute_instance_create_fuzzer("clusterfuzz-testcase-instance_create_fuzzer-5599244505186304"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5126563864051712) { + // Doesn't crash with ASAN or UBSAN + // Doesn't reproducibly crash - instance_enumerate_fuzzer: Abrt in loader_cJSON_Delete + execute_instance_enumerate_fuzzer("clusterfuzz-testcase-instance_enumerate_fuzzer-5126563864051712"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6308459683315712) { + // Doesn't crash with ASAN or UBSAN + // Doesn't reproducibly crash - instance_enumerate_fuzzer: Null-dereference READ in + // combine_settings_layers_with_regular_layers + execute_instance_enumerate_fuzzer("clusterfuzz-testcase-instance_enumerate_fuzzer-6308459683315712"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6583684169269248) { + // Crashes ASAN + // Nullptr dereference in loader_copy_to_new_str + execute_instance_enumerate_fuzzer("clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6583684169269248"); +} + +TEST(BadJsonInput, ClusterFuzzTestCase_5258042868105216) { + // Doesn't crash with ASAN or UBSAN + // Doesn't reproducibly crash - json_load_fuzzer: Abrt in loader_cJSON_Delete + execute_json_load_fuzzer("clusterfuzz-testcase-json_load_fuzzer-5258042868105216"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5487817455960064) { + // Doesn't crash with ASAN or UBSAN + // Doesn't reproducibly crash - json_load_fuzzer: Abrt in std::__Fuzzer::vector, std::__ + execute_json_load_fuzzer("clusterfuzz-testcase-json_load_fuzzer-5487817455960064"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_4558978302214144) { + // Does crash with UBSAN and ASAN + // loader.c:287: VkResult loader_copy_to_new_str(const struct loader_instance *, const char *, char **): Assertion + // `source_str + // && dest_str' failed. + // instance_create_fuzzer: Null-dereference READ in loader_copy_to_new_str + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-4558978302214144"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_4568454561071104) { + // Does crash with UBSAN and ASAN + // Causes hangs - instance_create_fuzzer: Timeout in instance_create_fuzzer + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-4568454561071104"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_4820577276723200) { + // Does crash with UBSAN and ASAN + // instance_create_fuzzer: Crash in printf_common + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-4820577276723200"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5177827962454016) { + // Does crash with UBSAN and ASAN + // free(): invalid next size (fast) + // instance_create_fuzzer: Abrt in instance_create_fuzzer + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-5177827962454016"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5198773675425792) { + // Does crash with UBSAN and ASAN + // stack-overflow + // instance_create_fuzzer: Stack-overflow with empty stacktrace + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-5198773675425792"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5416197367070720) { + // Does crash with UBSAN and ASAN + // free(): invalid next size (fast) + // instance_create_fuzzer: Overwrites-const-input in instance_create_fuzzer + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-5416197367070720"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5494771615137792) { + // Does crash with UBSAN and ASAN + // stack-overflow + // instance_create_fuzzer: Stack-overflow in verify_meta_layer_component_layers + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-5494771615137792"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5801855065915392) { + // Does crash with ASAN + // Doesn't crash with UBSAN + // Causes a leak - instance_create_fuzzer: Direct-leak in print_string_ptr + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-5801855065915392"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6353004288081920) { + // Does crash with ASAN and UBSAN + // Stack overflow due to recursive meta layers + execute_instance_create_fuzzer("clusterfuzz-testcase-minimized-instance_create_fuzzer-6353004288081920"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5817896795701248) { + execute_instance_create_fuzzer("clusterfuzz-testcase-instance_create_fuzzer-5817896795701248"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6541440380895232) { + execute_instance_create_fuzzer("clusterfuzz-testcase-instance_create_fuzzer-6541440380895232"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6465902356791296) { + // Does crash with UBSAN + // Doesn't crash with ASAN + // Causes an integer overflow - instance_enumerate_fuzzer: Integer-overflow in parse_value + execute_instance_enumerate_fuzzer("clusterfuzz-testcase-minimized-instance_enumerate_fuzzer-6465902356791296"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_4512865114259456) { + // Does crash with UBSAN and ASAN + // malloc(): invalid size (unsorted) + // json_load_fuzzer: Heap-buffer-overflow in parse_string + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-4512865114259456"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_4552015310880768) { + // Does crash with UBSAN + // Doesn't crash with ASAN + // Causes an integer overflow + // json_load_fuzzer: Integer-overflow in parse_value + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-4552015310880768"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5208693600747520) { + // Does crash with UBSAN and ASAN + // Stack overflow + // json_load_fuzzer: Stack-overflow in print_value + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-5208693600747520"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5347670374612992) { + // Doesn't crash with ASAN or UBSAN + // No reported leaks in head, crashes in 1.3.269 & 1.3.250 + // Causes a leak - json_load_fuzzer: Direct-leak in parse_array + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-5347670374612992"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5392928643547136) { + // Does crash with UBSAN and ASAN + // free(): corrupted unsorted chunks + // json_load_fuzzer: Abrt in std::__Fuzzer::basic_filebuf>::~basic_fil + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-5392928643547136"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5636386303049728) { + // Does crash with UBSAN and ASAN + // terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc + // json_load_fuzzer: Abrt in json_load_fuzzer + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-5636386303049728"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6182254813249536) { + // Doesn't crash with ASAN or UBSAN + // No leaks reported in main, 1.3.269, nor 1.3.250 + // Causes a leak - json_load_fuzzer: Indirect-leak in parse_object + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-6182254813249536"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6265355951996928) { + // Does crash with UBSAN and ASAN + // json_load_fuzzer: Null-dereference READ in json_load_fuzzer + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-6265355951996928"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6363106126659584) { + // Does crash with UBSAN and ASAN + // json_load_fuzzer: Overwrites-const-input in json_load_fuzzer + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-6363106126659584"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_6482033715838976) { + // Does crash with UBSAN and ASAN + // json_load_fuzzer: Stack-overflow in parse_array + execute_json_load_fuzzer("clusterfuzz-testcase-minimized-json_load_fuzzer-6482033715838976"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_4857714377818112) { + // Does crash with UBSAN and ASAN + // settings_fuzzer: Abrt in settings_fuzzer + execute_setting_fuzzer("clusterfuzz-testcase-minimized-settings_fuzzer-4857714377818112"); +} +TEST(BadJsonInput, ClusterFuzzTestCase_5123849246867456) { + // Doesn't crash with ASAN or UBSAN + // No leaks reported in main, 1.3.269, nor 1.3.250 + // Causes a leak - settings_fuzzer: Direct-leak in loader_append_layer_property + execute_setting_fuzzer("clusterfuzz-testcase-minimized-settings_fuzzer-5123849246867456"); +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_get_proc_addr_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_get_proc_addr_tests.cpp new file mode 100644 index 0000000000..a2fe578d8e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_get_proc_addr_tests.cpp @@ -0,0 +1,496 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +// Verify that the various ways to get vkGetInstanceProcAddr return the same value +TEST(GetProcAddr, VerifyGetInstanceProcAddr) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + // NOTE: The vulkan_functions are queried using the platform get proc addr from the loader. So we'll compare + // that to what is returned by asking it what the various Vulkan get proc addr functions are. + PFN_vkGetInstanceProcAddr gipa_loader = env.vulkan_functions.vkGetInstanceProcAddr; + PFN_vkGetInstanceProcAddr gipa_queried = reinterpret_cast( + env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetInstanceProcAddr")); + ASSERT_EQ(gipa_loader, gipa_queried); + } + + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_3); + inst.CheckCreate(); + + // NOTE: The vulkan_functions are queried using the platform get proc addr from the loader. So we'll compare + // that to what is returned by asking it what the various Vulkan get proc addr functions are. + PFN_vkGetInstanceProcAddr gipa_loader = env.vulkan_functions.vkGetInstanceProcAddr; + PFN_vkGetInstanceProcAddr gipa_queried = reinterpret_cast( + env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetInstanceProcAddr")); + ASSERT_EQ(gipa_loader, gipa_queried); + } +} + +// Verify that the various ways to get vkGetDeviceProcAddr return the same value +TEST(GetProcAddr, VerifyGetDeviceProcAddr) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + // NOTE: The vulkan_functions are queried using the platform get proc addr from the loader. So we'll compare + // that to what is returned by asking it what the various Vulkan get proc addr functions are. + PFN_vkGetDeviceProcAddr gdpa_loader = env.vulkan_functions.vkGetDeviceProcAddr; + PFN_vkGetDeviceProcAddr gdpa_inst_queried = inst.load("vkGetDeviceProcAddr"); + ASSERT_EQ(gdpa_loader, gdpa_inst_queried); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + + PFN_vkGetDeviceProcAddr gdpa_dev_queried = dev.load("vkGetDeviceProcAddr"); + ASSERT_EQ(gdpa_loader, gdpa_dev_queried); +} + +// Load the global function pointers with and without a NULL vkInstance handle. +// Call the function to make sure it is callable, don't care about what is returned. +TEST(GetProcAddr, GlobalFunctions) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + auto& gipa = env.vulkan_functions.vkGetInstanceProcAddr; + // global entry points with NULL instance handle + { + auto EnumerateInstanceExtensionProperties = + reinterpret_cast(gipa(NULL, "vkEnumerateInstanceExtensionProperties")); + handle_assert_has_value(EnumerateInstanceExtensionProperties); + uint32_t ext_count = 0; + ASSERT_EQ(VK_SUCCESS, EnumerateInstanceExtensionProperties("", &ext_count, nullptr)); + + auto EnumerateInstanceLayerProperties = + reinterpret_cast(gipa(NULL, "vkEnumerateInstanceLayerProperties")); + handle_assert_has_value(EnumerateInstanceLayerProperties); + uint32_t layer_count = 0; + ASSERT_EQ(VK_SUCCESS, EnumerateInstanceLayerProperties(&layer_count, nullptr)); + + auto EnumerateInstanceVersion = reinterpret_cast(gipa(NULL, "vkEnumerateInstanceVersion")); + handle_assert_has_value(EnumerateInstanceVersion); + uint32_t api_version = 0; + EnumerateInstanceVersion(&api_version); + + auto GetInstanceProcAddr = reinterpret_cast(gipa(NULL, "vkGetInstanceProcAddr")); + ASSERT_EQ(GetInstanceProcAddr, + reinterpret_cast(GetInstanceProcAddr(NULL, "vkGetInstanceProcAddr"))); + + auto CreateInstance = reinterpret_cast(gipa(NULL, "vkCreateInstance")); + handle_assert_has_value(CreateInstance); + } + // Now create an instance and query the functions again - should work because the instance version is less than 1.2 + for (int i = 0; i <= 2; i++) { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.api_version = VK_MAKE_API_VERSION(0, 1, i, 0); + inst.CheckCreate(); + + PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties = + inst.load("vkEnumerateInstanceExtensionProperties"); + handle_assert_has_value(EnumerateInstanceExtensionProperties); + uint32_t ext_count = 0; + ASSERT_EQ(VK_SUCCESS, EnumerateInstanceExtensionProperties("", &ext_count, nullptr)); + + PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties = inst.load("vkEnumerateInstanceLayerProperties"); + handle_assert_has_value(EnumerateInstanceLayerProperties); + uint32_t layer_count = 0; + ASSERT_EQ(VK_SUCCESS, EnumerateInstanceLayerProperties(&layer_count, nullptr)); + + PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion = inst.load("vkEnumerateInstanceVersion"); + handle_assert_has_value(EnumerateInstanceVersion); + uint32_t api_version = 0; + EnumerateInstanceVersion(&api_version); + + PFN_vkGetInstanceProcAddr GetInstanceProcAddr = inst.load("vkGetInstanceProcAddr"); + handle_assert_has_value(GetInstanceProcAddr); + ASSERT_EQ(GetInstanceProcAddr, + reinterpret_cast(GetInstanceProcAddr(inst, "vkGetInstanceProcAddr"))); + + PFN_vkCreateInstance CreateInstance = inst.load("vkCreateInstance"); + handle_assert_has_value(CreateInstance); + } + { + // Create a 1.3 instance - now everything should return NULL + InstWrapper inst{env.vulkan_functions}; + inst.create_info.api_version = VK_MAKE_API_VERSION(0, 1, 3, 0); + inst.CheckCreate(); + + PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties = + inst.load("vkEnumerateInstanceExtensionProperties"); + handle_assert_null(EnumerateInstanceExtensionProperties); + + PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties = inst.load("vkEnumerateInstanceLayerProperties"); + handle_assert_null(EnumerateInstanceLayerProperties); + + PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion = inst.load("vkEnumerateInstanceVersion"); + handle_assert_null(EnumerateInstanceVersion); + + PFN_vkCreateInstance CreateInstance = inst.load("vkCreateInstance"); + handle_assert_null(CreateInstance); + + PFN_vkGetInstanceProcAddr GetInstanceProcAddr = inst.load("vkGetInstanceProcAddr"); + handle_assert_equal(env.vulkan_functions.vkGetInstanceProcAddr, GetInstanceProcAddr); + ASSERT_EQ(GetInstanceProcAddr, + reinterpret_cast(GetInstanceProcAddr(inst, "vkGetInstanceProcAddr"))); + ASSERT_EQ(GetInstanceProcAddr, + reinterpret_cast(GetInstanceProcAddr(NULL, "vkGetInstanceProcAddr"))); + // get a non pre-instance function pointer + PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices = inst.load("vkEnumeratePhysicalDevices"); + handle_assert_has_value(EnumeratePhysicalDevices); + + EnumeratePhysicalDevices = reinterpret_cast(gipa(NULL, "vkEnumeratePhysicalDevices")); + handle_assert_null(EnumeratePhysicalDevices); + } +} + +TEST(GetProcAddr, Verify10FunctionsFailToLoadWithSingleDriver) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}).set_can_query_GetPhysicalDeviceFuncs(false); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); +} + +TEST(GetProcAddr, Verify10FunctionsLoadWithMultipleDrivers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}).set_can_query_GetPhysicalDeviceFuncs(false); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + inst.GetPhysDevs(1); +} + +// Swapchain functions which require a terminator in all cases have situations where the driver may have a +// NULL function pointer but the loader shouldn't abort() if that is the case. Rather, it should log a message +// and return VK_SUCCESS to maintain previous behavior. +TEST(GetDeviceProcAddr, SwapchainFuncsWithTerminator) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).setup_WSI().add_physical_device("physical_device_0"); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.add_extension("VK_EXT_debug_utils"); + inst.create_info.setup_WSI(); + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + + VkSurfaceKHR surface2{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface2)); + + DebugUtilsWrapper log{inst}; + ASSERT_EQ(VK_SUCCESS, CreateDebugUtilsMessenger(log)); + auto phys_dev = inst.GetPhysDev(); + { + DeviceWrapper dev{inst}; + ASSERT_NO_FATAL_FAILURE(dev.CheckCreate(phys_dev)); + DeviceFunctions dev_funcs{env.vulkan_functions, dev}; + + PFN_vkCreateSwapchainKHR CreateSwapchainKHR = dev.load("vkCreateSwapchainKHR"); + PFN_vkCreateSwapchainKHR inst_CreateSwapchainKHR = inst.load("vkCreateSwapchainKHR"); + PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR = + dev.load("vkGetDeviceGroupSurfacePresentModesKHR"); + PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR = dev.load("vkCreateSharedSwapchainsKHR"); + ASSERT_FALSE(CreateSwapchainKHR); + ASSERT_TRUE(inst_CreateSwapchainKHR); + ASSERT_FALSE(GetDeviceGroupSurfacePresentModesKHR); + ASSERT_FALSE(CreateSharedSwapchainsKHR); + + VkSwapchainCreateInfoKHR info{}; + info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + info.surface = surface; + + VkSwapchainKHR swapchain{}; + log.logger.clear(); + ASSERT_FALSE(dev_funcs.vkDestroySwapchainKHR); + + // try to call the vkCreateSwapchainKHR acquired from the instance - this *should* abort due to not enabling the extension + ASSERT_DEATH(inst_CreateSwapchainKHR(dev.dev, &info, nullptr, &swapchain), + "vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain " + "extension enabled?"); + + log.logger.clear(); + ASSERT_FALSE(dev_funcs.vkDestroySwapchainKHR); + } + driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain", "VK_KHR_display_swapchain", "VK_EXT_debug_marker"}); + { + DeviceWrapper dev{inst}; + dev.create_info.add_extensions({"VK_KHR_swapchain", "VK_KHR_display_swapchain", "VK_EXT_debug_marker"}); + ASSERT_NO_FATAL_FAILURE(dev.CheckCreate(phys_dev)); + DeviceFunctions dev_funcs{env.vulkan_functions, dev}; + + PFN_vkCreateSwapchainKHR CreateSwapchainKHR = dev.load("vkCreateSwapchainKHR"); + PFN_vkCreateSwapchainKHR inst_CreateSwapchainKHR = inst.load("vkCreateSwapchainKHR"); + PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR = + dev.load("vkGetDeviceGroupSurfacePresentModesKHR"); + PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR = dev.load("vkCreateSharedSwapchainsKHR"); + ASSERT_TRUE(CreateSwapchainKHR); + ASSERT_TRUE(inst_CreateSwapchainKHR); + ASSERT_TRUE(GetDeviceGroupSurfacePresentModesKHR); + ASSERT_TRUE(CreateSharedSwapchainsKHR); + ASSERT_TRUE(dev_funcs.vkDestroySwapchainKHR); + + VkSwapchainCreateInfoKHR info{}; + info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + info.surface = surface; + + VkSwapchainKHR swapchain{}; + CreateSwapchainKHR(dev.dev, &info, nullptr, &swapchain); + ASSERT_FALSE( + log.find("vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain " + "extension enabled?")); + log.logger.clear(); + dev_funcs.vkDestroySwapchainKHR(dev.dev, swapchain, nullptr); + inst_CreateSwapchainKHR(dev.dev, &info, nullptr, &swapchain); + ASSERT_FALSE( + log.find("vkCreateSwapchainKHR: Driver's function pointer was NULL, returning VK_SUCCESS. Was the VK_KHR_swapchain " + "extension enabled?")); + log.logger.clear(); + dev_funcs.vkDestroySwapchainKHR(dev.dev, swapchain, nullptr); + + VkDeviceGroupPresentModeFlagsKHR modes{}; + GetDeviceGroupSurfacePresentModesKHR(dev.dev, surface, &modes); + + std::array infos{}; + infos[0] = info; + infos[1].sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + infos[1].surface = surface2; + + ASSERT_EQ(VK_SUCCESS, CreateSharedSwapchainsKHR(dev.dev, 2, infos.data(), nullptr, &swapchain)); + } + env.vulkan_functions.vkDestroySurfaceKHR(inst.inst, surface, nullptr); + env.vulkan_functions.vkDestroySurfaceKHR(inst.inst, surface2, nullptr); +} + +// Verify that the various ways to get vkGetDeviceProcAddr return the same value +TEST(GetProcAddr, PreserveLayerGettingVkCreateDeviceWithNullInstance) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_technically_buggy_layer") + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("if_you_can")), + "buggy_layer_1.json")); + env.get_test_layer().set_buggy_query_of_vkCreateDevice(true); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); +} + +// The following tests - AppQueries11FunctionsWhileOnlyEnabling10, AppQueries12FunctionsWhileOnlyEnabling11, and +// AppQueries13FunctionsWhileOnlyEnabling12 - check that vkGetDeviceProcAddr only returning functions from core versions up to +// the apiVersion declared in VkApplicationInfo. Function querying should succeed if VK_KHR_maintenance_5 is not enabled, and they +// should return zero when that extension is enabled. + +TEST(GetDeviceProcAddr, AppQueries11FunctionsWhileOnlyEnabling10) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_icd_api_version(VK_API_VERSION_1_1) + .add_physical_device( + PhysicalDevice{}.set_api_version(VK_API_VERSION_1_1).add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME).finish()); + + std::vector functions = {"vkGetDeviceQueue2", "vkCmdDispatchBase", "vkCreateDescriptorUpdateTemplate"}; + for (const auto& f : functions) { + driver.physical_devices.back().add_device_function(VulkanFunction{f, [] {}}); + } + { // doesn't enable the feature or extension + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 0, 0); + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(inst.GetPhysDev()); + for (const auto& f : functions) { + ASSERT_NE(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } + { // doesn't enable the feature + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 0, 0); + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); + dev.CheckCreate(inst.GetPhysDev()); + for (const auto& f : functions) { + ASSERT_NE(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } + { // enables the feature and extension + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 0, 0); + inst.CheckCreate(); + + VkPhysicalDeviceMaintenance5FeaturesKHR features{}; + features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR; + features.maintenance5 = VK_TRUE; + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); + dev.create_info.dev.pNext = &features; + dev.CheckCreate(inst.GetPhysDev()); + for (const auto& f : functions) { + ASSERT_EQ(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } +} + +TEST(GetDeviceProcAddr, AppQueries12FunctionsWhileOnlyEnabling11) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2) + .add_physical_device( + PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME).finish()); + std::vector functions = {"vkCmdDrawIndirectCount", "vkCmdNextSubpass2", "vkGetBufferDeviceAddress", + "vkGetDeviceMemoryOpaqueCaptureAddress"}; + for (const auto& f : functions) { + driver.physical_devices.back().add_device_function(VulkanFunction{f, [] {}}); + } + { // doesn't enable the feature or extension + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(inst.GetPhysDev()); + + for (const auto& f : functions) { + ASSERT_NE(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } + { // doesn't enable the feature + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); + dev.CheckCreate(inst.GetPhysDev()); + + for (const auto& f : functions) { + ASSERT_NE(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } + { // enables the feature and extension + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + VkPhysicalDeviceMaintenance5FeaturesKHR features{}; + features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR; + features.maintenance5 = VK_TRUE; + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); + dev.create_info.dev.pNext = &features; + dev.CheckCreate(inst.GetPhysDev()); + + for (const auto& f : functions) { + ASSERT_EQ(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } +} + +TEST(GetDeviceProcAddr, AppQueries13FunctionsWhileOnlyEnabling12) { + FrameworkEnvironment env{}; + auto& driver = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_3)) + .set_icd_api_version(VK_API_VERSION_1_3) + .add_physical_device( + PhysicalDevice{}.set_api_version(VK_API_VERSION_1_3).add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME).finish()); + std::vector functions = {"vkCreatePrivateDataSlot", "vkGetDeviceBufferMemoryRequirements", "vkCmdWaitEvents2", + "vkGetDeviceImageSparseMemoryRequirements"}; + + for (const auto& f : functions) { + driver.physical_devices.back().add_device_function(VulkanFunction{f, [] {}}); + } + { // doesn't enable the feature or extension + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 2, 0); + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(inst.GetPhysDev()); + + for (const auto& f : functions) { + ASSERT_NE(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } + { // doesn't enable the feature + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 2, 0); + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); + dev.CheckCreate(inst.GetPhysDev()); + + for (const auto& f : functions) { + ASSERT_NE(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } + { // enables the feature and extension + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 2, 0); + inst.CheckCreate(); + + VkPhysicalDeviceMaintenance5FeaturesKHR features{}; + features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR; + features.maintenance5 = VK_TRUE; + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE_5_EXTENSION_NAME); + dev.create_info.dev.pNext = &features; + dev.CheckCreate(inst.GetPhysDev()); + + for (const auto& f : functions) { + ASSERT_EQ(nullptr, dev->vkGetDeviceProcAddr(dev.dev, f)); + } + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_handle_validation_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_handle_validation_tests.cpp new file mode 100644 index 0000000000..7154393f94 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_handle_validation_tests.cpp @@ -0,0 +1,1720 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author(s): Charles Giessen + * Mark Young + */ + +#include "test_environment.h" + +// ---- Invalid Instance tests + +struct BadData { + uint64_t bad_array[3] = {0x123456789AB, 0x23456789AB1, 0x9876543210AB}; +}; +template +T get_bad_handle() { + static BadData my_bad_data; + return reinterpret_cast(static_cast(&my_bad_data)); +} + +TEST(LoaderHandleValidTests, BadInstEnumPhysDevices) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + uint32_t returned_physical_count = 0; + + ASSERT_DEATH(env.vulkan_functions.vkEnumeratePhysicalDevices(bad_instance, &returned_physical_count, nullptr), + "vkEnumeratePhysicalDevices: Invalid instance \\[VUID-vkEnumeratePhysicalDevices-instance-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadInstGetInstProcAddr) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + ASSERT_DEATH(env.vulkan_functions.vkGetInstanceProcAddr(bad_instance, "vkGetBufferDeviceAddress"), + "vkGetInstanceProcAddr: Invalid instance \\[VUID-vkGetInstanceProcAddr-instance-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadInstDestroyInstance) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + ASSERT_DEATH(env.vulkan_functions.vkDestroyInstance(bad_instance, nullptr), + "vkDestroyInstance: Invalid instance \\[VUID-vkDestroyInstance-instance-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadInstDestroySurface) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_EXT_headless_surface"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(first_ext.extensionName.c_str()); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + ASSERT_DEATH(env.vulkan_functions.vkDestroySurfaceKHR(bad_instance, VK_NULL_HANDLE, nullptr), + "vkDestroySurfaceKHR: Invalid instance \\[VUID-vkDestroySurfaceKHR-instance-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadInstCreateHeadlessSurf) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_EXT_headless_surface"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()}); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkHeadlessSurfaceCreateInfoEXT surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateHeadlessSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateHeadlessSurfaceEXT: Invalid instance \\[VUID-vkCreateHeadlessSurfaceEXT-instance-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadInstCreateDisplayPlaneSurf) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_KHR_display"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()}); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkDisplaySurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateDisplayPlaneSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateDisplayPlaneSurfaceKHR: Invalid instance \\[VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter\\]"); +} + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +TEST(LoaderHandleValidTests, BadInstCreateAndroidSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkAndroidSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateAndroidSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateAndroidSurfaceKHR: Invalid instance \\[VUID-vkCreateAndroidSurfaceKHR-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_ANDROID_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +TEST(LoaderHandleValidTests, BadInstCreateDirectFBSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkDirectFBSurfaceCreateInfoEXT surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateDirectFBSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateDirectFBSurfaceEXT: Invalid instance \\[VUID-vkCreateDirectFBSurfaceEXT-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_FUCHSIA) +TEST(LoaderHandleValidTests, BadInstCreateFuchsiaSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkImagePipeSurfaceCreateInfoFUCHSIA surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateImagePipeSurfaceFUCHSIA(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateImagePipeSurfaceFUCHSIA: Invalid instance \\[VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_FUCHSIA + +#if defined(VK_USE_PLATFORM_GGP) +TEST(LoaderHandleValidTests, BadInstCreateGGPSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkStreamDescriptorSurfaceCreateInfoGGP surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH( + env.vulkan_functions.vkCreateStreamDescriptorSurfaceGGP(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateStreamDescriptorSurfaceGGP: Invalid instance \\[VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_IOS_MVK) +TEST(LoaderHandleValidTests, BadInstCreateIOSSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkIOSSurfaceCreateInfoMVK surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateIOSSurfaceMVK(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateIOSSurfaceMVK: Invalid instance \\[VUID-vkCreateIOSSurfaceMVK-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +TEST(LoaderHandleValidTests, BadInstCreateMacOSSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkMacOSSurfaceCreateInfoMVK surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateMacOSSurfaceMVK(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateMacOSSurfaceMVK: Invalid instance \\[VUID-vkCreateMacOSSurfaceMVK-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_METAL_EXT) +TEST(LoaderHandleValidTests, BadInstCreateMetalSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkMetalSurfaceCreateInfoEXT surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateMetalSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateMetalSurfaceEXT: Invalid instance \\[VUID-vkCreateMetalSurfaceEXT-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +TEST(LoaderHandleValidTests, BadInstCreateQNXSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkScreenSurfaceCreateInfoQNX surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateScreenSurfaceQNX(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateScreenSurfaceQNX: Invalid instance \\[VUID-vkCreateScreenSurfaceQNX-instance-parameter\\]"); + // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#if defined(VK_USE_PLATFORM_VI_NN) +TEST(LoaderHandleValidTests, BadInstCreateViNNSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkViSurfaceCreateInfoNN surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateViSurfaceNN(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateViSurfaceNN: Invalid instance \\[VUID-vkCreateViSurfaceNN-instance-parameter\\]"); + // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown +} +#endif // VK_USE_PLATFORM_VI_NN + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +TEST(LoaderHandleValidTests, BadInstCreateWaylandSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkWaylandSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateWaylandSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateWaylandSurfaceKHR: Invalid instance \\[VUID-vkCreateWaylandSurfaceKHR-instance-parameter\\]"); + // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +TEST(LoaderHandleValidTests, BadInstCreateWin32Surf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkWin32SurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateWin32SurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateWin32SurfaceKHR: Invalid instance \\[VUID-vkCreateWin32SurfaceKHR-instance-parameter\\]"); + // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) +TEST(LoaderHandleValidTests, BadInstCreateXCBSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkXcbSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateXcbSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateXcbSurfaceKHR: Invalid instance \\[VUID-vkCreateXcbSurfaceKHR-instance-parameter\\]"); + // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +TEST(LoaderHandleValidTests, BadInstCreateXlibSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_instance = get_bad_handle(); + + VkXlibSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateXlibSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), + "vkCreateXlibSurfaceKHR: Invalid instance \\[VUID-vkCreateXlibSurfaceKHR-instance-parameter\\]"); + // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +// ---- Invalid Physical Device tests + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceFeatures features = {}; + ASSERT_DEATH( + env.vulkan_functions.vkGetPhysicalDeviceFeatures(bad_physical_dev, &features), + "vkGetPhysicalDeviceFeatures: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkFormatProperties format_info = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceFormatProperties(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, &format_info), + "vkGetPhysicalDeviceFormatProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkImageFormatProperties format_info = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceImageFormatProperties(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, + VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_LINEAR, + VK_IMAGE_USAGE_STORAGE_BIT, 0, &format_info), + "vkGetPhysicalDeviceImageFormatProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceProperties properties = {}; + ASSERT_DEATH( + env.vulkan_functions.vkGetPhysicalDeviceProperties(bad_physical_dev, &properties), + "vkGetPhysicalDeviceProperties: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceQueueFamilyProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceMemoryProperties properties = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceMemoryProperties(bad_physical_dev, &properties), + "vkGetPhysicalDeviceMemoryProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevCreateDevice) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + float queue_priorities[3] = {0.0f, 0.5f, 1.0f}; + VkDeviceQueueCreateInfo dev_queue_create_info = {}; + dev_queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + dev_queue_create_info.pNext = nullptr; + dev_queue_create_info.flags = 0; + dev_queue_create_info.queueFamilyIndex = 0; + dev_queue_create_info.queueCount = 1; + dev_queue_create_info.pQueuePriorities = queue_priorities; + VkDeviceCreateInfo dev_create_info = {}; + dev_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + dev_create_info.pNext = nullptr; + dev_create_info.flags = 0; + dev_create_info.queueCreateInfoCount = 1; + dev_create_info.pQueueCreateInfos = &dev_queue_create_info; + dev_create_info.enabledLayerCount = 0; + dev_create_info.ppEnabledLayerNames = nullptr; + dev_create_info.enabledExtensionCount = 0; + dev_create_info.ppEnabledExtensionNames = nullptr; + dev_create_info.pEnabledFeatures = nullptr; + VkDevice created_dev = VK_NULL_HANDLE; + ASSERT_DEATH(env.vulkan_functions.vkCreateDevice(bad_physical_dev, &dev_create_info, nullptr, &created_dev), + "vkCreateDevice: Invalid physicalDevice \\[VUID-vkCreateDevice-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevEnumDevExtProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkEnumerateDeviceExtensionProperties(bad_physical_dev, nullptr, &count, nullptr), + "vkEnumerateDeviceExtensionProperties: Invalid physicalDevice " + "\\[VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevEnumDevLayerProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkEnumerateDeviceLayerProperties(bad_physical_dev, &count, nullptr), + "vkEnumerateDeviceLayerProperties: Invalid physicalDevice " + "\\[VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSparseImageFormatProperties( + bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TYPE_2D, VK_SAMPLE_COUNT_1_BIT, + VK_IMAGE_USAGE_STORAGE_BIT, VK_IMAGE_TILING_LINEAR, &count, nullptr), + "vkGetPhysicalDeviceSparseImageFormatProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceFeatures2 features = {}; + features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; + features.pNext = nullptr; + ASSERT_DEATH( + env.vulkan_functions.vkGetPhysicalDeviceFeatures2(bad_physical_dev, &features), + "vkGetPhysicalDeviceFeatures2: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkFormatProperties2 properties = {}; + properties.sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; + properties.pNext = nullptr; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceFormatProperties2(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, &properties), + "vkGetPhysicalDeviceFormatProperties2: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceImageFormatInfo2 format_info = {}; + format_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2; + format_info.pNext = nullptr; + VkImageFormatProperties2 properties = {}; + properties.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2; + properties.pNext = nullptr; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceImageFormatProperties2(bad_physical_dev, &format_info, &properties), + "vkGetPhysicalDeviceImageFormatProperties2: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceProperties2 properties = {}; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = nullptr; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceProperties2(bad_physical_dev, &properties), + "vkGetPhysicalDeviceProperties2: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties2(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceQueueFamilyProperties2: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceMemoryProperties2 properties = {}; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2; + properties.pNext = nullptr; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceMemoryProperties2(bad_physical_dev, &properties), + "vkGetPhysicalDeviceMemoryProperties2: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps2) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceSparseImageFormatInfo2 info = {}; + info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2; + info.pNext = nullptr; + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSparseImageFormatProperties2(bad_physical_dev, &info, &count, nullptr), + "vkGetPhysicalDeviceSparseImageFormatProperties2: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternFenceProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceExternalFenceInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO; + info.pNext = nullptr; + VkExternalFenceProperties props = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalFenceProperties(bad_physical_dev, &info, &props), + "vkGetPhysicalDeviceExternalFenceProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternBufferProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceExternalBufferInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO; + info.pNext = nullptr; + VkExternalBufferProperties props = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalBufferProperties(bad_physical_dev, &info, &props), + "vkGetPhysicalDeviceExternalBufferProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternSemaphoreProps) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(1, 1, 0); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VkPhysicalDeviceExternalSemaphoreInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO; + info.pNext = nullptr; + VkExternalSemaphoreProperties props = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalSemaphoreProperties(bad_physical_dev, &info, &props), + "vkGetPhysicalDeviceExternalSemaphoreProperties: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceSupportKHR) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_KHR_display"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(first_ext.extensionName.c_str()); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + VkBool32 supported = VK_FALSE; + + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceSupportKHR(bad_physical_dev, 0, VK_NULL_HANDLE, &supported), + "vkGetPhysicalDeviceSurfaceSupportKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCapsKHR) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_KHR_display"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(first_ext.extensionName.c_str()); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + VkSurfaceCapabilitiesKHR caps = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(bad_physical_dev, VK_NULL_HANDLE, &caps), + "vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormatsKHR) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_KHR_display"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(first_ext.extensionName.c_str()); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceFormatsKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), + "vkGetPhysicalDeviceSurfaceFormatsKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModesKHR) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_KHR_surface"}; + Extension second_ext{"VK_KHR_display"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions({first_ext, second_ext}) + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(first_ext.extensionName.c_str()); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfacePresentModesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), + "vkGetPhysicalDeviceSurfacePresentModesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter\\]"); +} + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +TEST(LoaderHandleValidTests, BadPhysDevGetDirectFBPresentSupportKHR) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + IDirectFB directfb; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDirectFBPresentationSupportEXT(bad_physical_dev, 0, &directfb), + "vkGetPhysicalDeviceDirectFBPresentationSupportEXT: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +TEST(LoaderHandleValidTests, BadPhysDevGetQNXPresentSupportKHR) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + ASSERT_DEATH(env.vulkan_functions.PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX(bad_physical_dev, 0, nullptr), + "vkGetPhysicalDeviceScreenPresentationSupportQNX: Invalid instance " + "\\[VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-instance-parameter\\]"); +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWaylandPresentSupportKHR) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceWaylandPresentationSupportKHR(bad_physical_dev, 0, nullptr), + "vkGetPhysicalDeviceWaylandPresentationSupportKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWin32PresentSupportKHR) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceWin32PresentationSupportKHR(bad_physical_dev, 0), + "vkGetPhysicalDeviceWin32PresentationSupportKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) +TEST(LoaderHandleValidTests, BadPhysDevGetXCBPresentSupportKHR) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + auto bad_physical_dev = get_bad_handle(); + + xcb_visualid_t visual = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceXcbPresentationSupportKHR(bad_physical_dev, 0, nullptr, visual), + "vkGetPhysicalDeviceXcbPresentationSupportKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +TEST(LoaderHandleValidTests, BadPhysDevGetXlibPresentSupportKHR) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + + VisualID visual = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceXlibPresentationSupportKHR(bad_physical_dev, 0, nullptr, visual), + "vkGetPhysicalDeviceXlibPresentationSupportKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +InstWrapper setup_BadPhysDev_env(FrameworkEnvironment& env, std::vector exts) { + std::vector ext_modified; + for (const auto& ext : exts) { + ext_modified.push_back(Extension{ext}); + } + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extensions(ext_modified) + .setup_WSI() + .add_physical_device("physical_device_0"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions(exts); + instance.CheckCreate(); + return instance; +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPropsKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPropertiesKHR(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceDisplayPropertiesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlanePropsKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPlanePropertiesKHR(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceDisplayPlanePropertiesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneSupportedDisplaysKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneSupportedDisplaysKHR(bad_physical_dev, 0, &count, nullptr), + "vkGetDisplayPlaneSupportedDisplaysKHR: Invalid physicalDevice " + "\\[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModePropsKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH( + env.vulkan_functions.vkGetDisplayModePropertiesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), + "vkGetDisplayModePropertiesKHR: Invalid physicalDevice \\[VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevCreateDisplayModeKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + VkDisplayModeCreateInfoKHR create_info = {}; + create_info.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; + create_info.pNext = nullptr; + VkDisplayModeKHR display_mode; + ASSERT_DEATH( + env.vulkan_functions.vkCreateDisplayModeKHR(bad_physical_dev, VK_NULL_HANDLE, &create_info, nullptr, &display_mode), + "vkCreateDisplayModeKHR: Invalid physicalDevice \\[VUID-vkCreateDisplayModeKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCapsKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + VkDisplayPlaneCapabilitiesKHR caps = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneCapabilitiesKHR(bad_physical_dev, VK_NULL_HANDLE, 0, &caps), + "vkGetDisplayPlaneCapabilitiesKHR: Invalid physicalDevice " + "\\[VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevPresentRectsKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDevicePresentRectanglesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), + "vkGetPhysicalDevicePresentRectanglesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayProps2KHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayProperties2KHR(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceDisplayProperties2KHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlaneProps2KHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPlaneProperties2KHR(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceDisplayPlaneProperties2KHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModeProps2KHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetDisplayModeProperties2KHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), + "vkGetDisplayModeProperties2KHR: Invalid physicalDevice " + "\\[VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCaps2KHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); + + auto bad_physical_dev = get_bad_handle(); + VkDisplayPlaneInfo2KHR disp_plane_info = {}; + disp_plane_info.sType = VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR; + disp_plane_info.pNext = nullptr; + VkDisplayPlaneCapabilities2KHR caps = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneCapabilities2KHR(bad_physical_dev, &disp_plane_info, &caps), + "vkGetDisplayPlaneCapabilities2KHR: Invalid physicalDevice " + "\\[VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCaps2KHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"}); + + auto bad_physical_dev = get_bad_handle(); + VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {}; + phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; + phys_dev_surf_info.pNext = nullptr; + VkSurfaceCapabilities2KHR caps = {}; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceCapabilities2KHR(bad_physical_dev, &phys_dev_surf_info, &caps), + "vkGetPhysicalDeviceSurfaceCapabilities2KHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormats2KHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"}); + + auto bad_physical_dev = get_bad_handle(); + VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {}; + phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; + phys_dev_surf_info.pNext = nullptr; + uint32_t count = 0; + ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceFormats2KHR(bad_physical_dev, &phys_dev_surf_info, &count, nullptr), + "vkGetPhysicalDeviceSurfaceFormats2KHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevEnumPhysDevQueueFamilyPerfQueryCountersKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR pfn = + instance.load("vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, 0, &count, nullptr, nullptr), + "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR: Invalid physicalDevice " + "\\[VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamilyPerfQueryPassesKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {}); + + auto bad_physical_dev = get_bad_handle(); + VkQueryPoolPerformanceCreateInfoKHR create_info = {}; + create_info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR; + create_info.pNext = nullptr; + uint32_t count = 0; + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR pfn = + instance.load("vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, &create_info, &count), + "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFragmentShadingRatesKHR) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {}); + + auto bad_physical_dev = get_bad_handle(); + uint32_t count = 0; + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR pfn = instance.load("vkGetPhysicalDeviceFragmentShadingRatesKHR"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceFragmentShadingRatesKHR: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevMSPropsEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {}); + + auto bad_physical_dev = get_bad_handle(); + VkMultisamplePropertiesEXT props = {}; + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT pfn = instance.load("vkGetPhysicalDeviceMultisamplePropertiesEXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, VK_SAMPLE_COUNT_1_BIT, &props), + "vkGetPhysicalDeviceMultisamplePropertiesEXT: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevAcquireDrmDisplayEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"}); + + auto bad_physical_dev = get_bad_handle(); + PFN_vkAcquireDrmDisplayEXT pfn = instance.load("vkAcquireDrmDisplayEXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, 0, VK_NULL_HANDLE), + "vkAcquireDrmDisplayEXT: Invalid physicalDevice \\[VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetDrmDisplayEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"}); + + auto bad_physical_dev = get_bad_handle(); + PFN_vkGetDrmDisplayEXT pfn = instance.load("vkGetDrmDisplayEXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, 0, 0, VK_NULL_HANDLE), + "vkGetDrmDisplayEXT: Invalid physicalDevice " + "\\[VUID-vkGetDrmDisplayEXT-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevReleaseDisplayEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_direct_mode_display"}); + + auto bad_physical_dev = get_bad_handle(); + PFN_vkReleaseDisplayEXT pfn = instance.load("vkReleaseDisplayEXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, VK_NULL_HANDLE), + "vkReleaseDisplayEXT: Invalid physicalDevice \\[VUID-vkReleaseDisplayEXT-physicalDevice-parameter\\]"); +} + +#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) +TEST(LoaderHandleValidTests, BadPhysDevAcquireXlibDisplayEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"}); + + auto bad_physical_dev = get_bad_handle(); + PFN_vkAcquireXlibDisplayEXT pfn = instance.load("vkAcquireXlibDisplayEXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, nullptr, VK_NULL_HANDLE), + "vkAcquireXlibDisplayEXT: Invalid physicalDevice \\[VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter\\]"); +} + +TEST(LoaderHandleValidTests, BadPhysDevGetRandROutputDisplayEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"}); + + auto bad_physical_dev = get_bad_handle(); + RROutput rrout = {}; + VkDisplayKHR disp; + PFN_vkGetRandROutputDisplayEXT pfn = instance.load("vkGetRandROutputDisplayEXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH( + pfn(bad_physical_dev, nullptr, rrout, &disp), + "vkGetRandROutputDisplayEXT: Invalid physicalDevice \\[VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModes2EXT) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + auto bad_physical_dev = get_bad_handle(); + VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {}; + phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; + phys_dev_surf_info.pNext = nullptr; + uint32_t count = 0; + PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT pfn = instance.load("vkGetPhysicalDeviceSurfacePresentModes2EXT"); + ASSERT_NE(pfn, nullptr); + ASSERT_DEATH(pfn(bad_physical_dev, &phys_dev_surf_info, &count, nullptr), + "vkGetPhysicalDeviceSurfacePresentModes2EXT: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter\\]"); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevToolPropertiesEXT) { + FrameworkEnvironment env{}; + auto instance = setup_BadPhysDev_env(env, {}); + + auto bad_physical_dev = get_bad_handle(); + PFN_vkGetPhysicalDeviceToolPropertiesEXT pfn = instance.load("vkGetPhysicalDeviceToolPropertiesEXT"); + ASSERT_NE(pfn, nullptr); + uint32_t count = 0; + ASSERT_DEATH(pfn(bad_physical_dev, &count, nullptr), + "vkGetPhysicalDeviceToolPropertiesEXT: Invalid physicalDevice " + "\\[VUID-vkGetPhysicalDeviceToolPropertiesEXT-physicalDevice-parameter\\]"); +} + +#if defined(VK_USE_PLATFORM_ANDROID_KHR) +TEST(LoaderHandleValidTests, VerifyHandleWrappingAndroidSurface) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkAndroidSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateAndroidSurfaceKHR pfn_CreateSurface = instance.load("vkCreateAndroidSurfaceKHR"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_ANDROID_KHR + +#if defined(VK_USE_PLATFORM_DIRECTFB_EXT) +TEST(LoaderHandleValidTests, VerifyHandleWrappingDirectFBSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkDirectFBSurfaceCreateInfoEXT surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateDirectFBSurfaceEXT pfn_CreateSurface = instance.load("vkCreateDirectFBSurfaceEXT"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_DIRECTFB_EXT + +#if defined(VK_USE_PLATFORM_FUCHSIA) +TEST(LoaderHandleValidTests, VerifyHandleWrappingFuchsiaSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkImagePipeSurfaceCreateInfoFUCHSIA surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateImagePipeSurfaceFUCHSIA pfn_CreateSurface = instance.load("vkCreateImagePipeSurfaceFUCHSIA"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_FUCHSIA + +#if defined(VK_USE_PLATFORM_GGP) +TEST(LoaderHandleValidTests, VerifyHandleWrappingGGPSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkStreamDescriptorSurfaceCreateInfoGGP surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateStreamDescriptorSurfaceGGP pfn_CreateSurface = instance.load("vkCreateStreamDescriptorSurfaceGGP"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_GGP + +#if defined(VK_USE_PLATFORM_IOS_MVK) +TEST(LoaderHandleValidTests, VerifyHandleWrappingIOSSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkIOSSurfaceCreateInfoMVK surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateIOSSurfaceMVK pfn_CreateSurface = instance.load("vkCreateIOSSurfaceMVK"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_IOS_MVK + +#if defined(VK_USE_PLATFORM_MACOS_MVK) +TEST(LoaderHandleValidTests, VerifyHandleWrappingMacOSSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_MACOS_MVK"); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI("VK_USE_PLATFORM_MACOS_MVK"); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkMacOSSurfaceCreateInfoMVK surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateMacOSSurfaceMVK pfn_CreateSurface = instance.load("vkCreateMacOSSurfaceMVK"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_MACOS_MVK + +#if defined(VK_USE_PLATFORM_METAL_EXT) +TEST(LoaderHandleValidTests, VerifyHandleWrappingMetalSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_METAL_EXT"); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI("VK_USE_PLATFORM_METAL_EXT"); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkMetalSurfaceCreateInfoEXT surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateMetalSurfaceEXT pfn_CreateSurface = instance.load("vkCreateMetalSurfaceEXT"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_METAL_EXT + +#if defined(VK_USE_PLATFORM_SCREEN_QNX) +TEST(LoaderHandleValidTests, VerifyHandleWrappingQNXSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkScreenSurfaceCreateInfoQNX surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateScreenSurfaceQNX pfn_CreateSurface = instance.load("vkCreateScreenSurfaceQNX"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_SCREEN_QNX + +#if defined(VK_USE_PLATFORM_VI_NN) +TEST(LoaderHandleValidTests, VerifyHandleWrappingViNNSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkViSurfaceCreateInfoNN surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateViSurfaceNN pfn_CreateSurface = instance.load("vkCreateViSurfaceNN"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_VI_NN + +#if defined(VK_USE_PLATFORM_WAYLAND_KHR) +TEST(LoaderHandleValidTests, VerifyHandleWrappingWaylandSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR"); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR"); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkWaylandSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateWaylandSurfaceKHR pfn_CreateSurface = instance.load("vkCreateWaylandSurfaceKHR"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_WAYLAND_KHR + +#if defined(VK_USE_PLATFORM_WIN32_KHR) +TEST(LoaderHandleValidTests, VerifyHandleWrappingWin32Surf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkWin32SurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateWin32SurfaceKHR pfn_CreateSurface = instance.load("vkCreateWin32SurfaceKHR"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_WIN32_KHR + +#if defined(VK_USE_PLATFORM_XCB_KHR) +TEST(LoaderHandleValidTests, VerifyHandleWrappingXCBSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI(); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkXcbSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateXcbSurfaceKHR pfn_CreateSurface = instance.load("vkCreateXcbSurfaceKHR"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_XCB_KHR + +#if defined(VK_USE_PLATFORM_XLIB_KHR) +TEST(LoaderHandleValidTests, VerifyHandleWrappingXlibSurf) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_XLIB_KHR"); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.setup_WSI("VK_USE_PLATFORM_XLIB_KHR"); + // + for (auto& ext : instance.create_info.enabled_extensions) { + std::cout << ext << "\n"; + } + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkXlibSurfaceCreateInfoKHR surf_create_info = {}; + surf_create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; + surf_create_info.pNext = nullptr; + VkSurfaceKHR created_surface = VK_NULL_HANDLE; + PFN_vkCreateXlibSurfaceKHR pfn_CreateSurface = instance.load("vkCreateXlibSurfaceKHR"); + ASSERT_NE(pfn_CreateSurface, nullptr); + PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(pfn_DestroySurface, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); + pfn_DestroySurface(instance, created_surface, nullptr); +} +#endif // VK_USE_PLATFORM_XLIB_KHR + +VKAPI_ATTR VkBool32 VKAPI_CALL JunkDebugUtilsCallback([[maybe_unused]] VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + [[maybe_unused]] VkDebugUtilsMessageTypeFlagsEXT messageTypes, + [[maybe_unused]] const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + [[maybe_unused]] void* pUserData) { + // This is just a stub callback in case the loader or any other layer triggers it. + return VK_FALSE; +} + +TEST(LoaderHandleValidTests, VerifyHandleWrappingDebugUtilsMessenger) { + FrameworkEnvironment env{}; + Extension ext{"VK_EXT_debug_utils"}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_instance_extensions({ext}); + + const char* wrap_objects_name = "WrapObjectsLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension("VK_EXT_debug_utils"); + instance.create_info.add_layer(wrap_objects_name); + instance.CheckCreate(); + + VkDebugUtilsMessengerCreateInfoEXT debug_messenger_create_info = {}; + debug_messenger_create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + debug_messenger_create_info.pNext = nullptr; + debug_messenger_create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + debug_messenger_create_info.messageType = + VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + debug_messenger_create_info.pfnUserCallback = reinterpret_cast(JunkDebugUtilsCallback); + VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; + PFN_vkCreateDebugUtilsMessengerEXT pfn_CreateMessenger = instance.load("vkCreateDebugUtilsMessengerEXT"); + ASSERT_NE(pfn_CreateMessenger, nullptr); + PFN_vkDestroyDebugUtilsMessengerEXT pfn_DestroyMessenger = instance.load("vkDestroyDebugUtilsMessengerEXT"); + ASSERT_NE(pfn_DestroyMessenger, nullptr); + ASSERT_EQ(VK_SUCCESS, pfn_CreateMessenger(instance, &debug_messenger_create_info, nullptr, &messenger)); + pfn_DestroyMessenger(instance, messenger, nullptr); +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_layer_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_layer_tests.cpp new file mode 100644 index 0000000000..0fae6ce964 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_layer_tests.cpp @@ -0,0 +1,5740 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +void CheckLogForLayerString(FrameworkEnvironment& env, const char* implicit_layer_name, bool check_for_enable) { + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + if (check_for_enable) { + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); + } else { + ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); + } + } + env.debug_log.clear(); +} + +const char* lunarg_meta_layer_name = "VK_LAYER_LUNARG_override"; + +TEST(ImplicitLayers, WithEnableAndDisableEnvVar) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + EnvVarWrapper enable_env_var{"ENABLE_ME"}; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_env_var.get()) + .set_enable_environment(enable_env_var.get())), + "implicit_test_layer.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // didn't set enable env-var, layer should not load + CheckLogForLayerString(env, implicit_layer_name, false); + + // set enable env-var to 0, no layer should be found + enable_env_var.set_new_value("0"); + CheckLogForLayerString(env, implicit_layer_name, false); + + // set enable env-var, layer should load + enable_env_var.set_new_value("1"); + CheckLogForLayerString(env, implicit_layer_name, true); + + // remove enable env var, so we can check what happens when only disable is present + enable_env_var.remove_value(); + + // set disable env-var to 0, layer should not load + disable_env_var.set_new_value("0"); + CheckLogForLayerString(env, implicit_layer_name, false); + + // set disable env-var to 1, layer should not load + disable_env_var.set_new_value("1"); + CheckLogForLayerString(env, implicit_layer_name, false); + + // set both enable and disable env-var, layer should not load + enable_env_var.set_new_value("1"); + disable_env_var.set_new_value("1"); + CheckLogForLayerString(env, implicit_layer_name, false); +} + +TEST(ImplicitLayers, OnlyDisableEnvVar) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_env_var.get())), + "implicit_test_layer.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // don't set disable env-var, layer should load + CheckLogForLayerString(env, implicit_layer_name, true); + + // set disable env-var to 0, layer should load + disable_env_var.set_new_value("0"); + CheckLogForLayerString(env, implicit_layer_name, false); + + // set disable env-var to 1, layer should not load + disable_env_var.set_new_value("1"); + CheckLogForLayerString(env, implicit_layer_name, false); + + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(implicit_layer_name); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); + } +} + +TEST(ImplicitLayers, PreInstanceEnumInstLayerProps) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_env_var.get()) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties"))), + "implicit_test_layer.json"); + + uint32_t layer_props = 43; + auto& layer = env.get_test_layer(0); + layer.set_reported_layer_props(layer_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, layer_props); + + // set disable env-var to 1, layer should not load + disable_env_var.set_new_value("1"); + + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_NE(count, 0U); + ASSERT_NE(count, layer_props); +} + +TEST(ImplicitLayers, PreInstanceEnumInstExtProps) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_env_var.get()) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties"))), + "implicit_test_layer.json"); + + uint32_t ext_props = 52; + auto& layer = env.get_test_layer(0); + layer.set_reported_extension_props(ext_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, ext_props); + + // set disable env-var to 1, layer should not load + disable_env_var.set_new_value("1"); + + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_NE(count, 0U); + ASSERT_NE(count, ext_props); +} + +TEST(ImplicitLayers, PreInstanceVersion) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3)); + + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3)) + .set_disable_environment(disable_env_var.get()) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "implicit_test_layer.json"); + + uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); + auto& layer = env.get_test_layer(0); + layer.set_reported_instance_version(layer_version); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, layer_version); + + // set disable env-var to 1, layer should not load + disable_env_var.set_new_value("1"); + + version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_NE(version, 0U); + ASSERT_NE(version, layer_version); +} + +// Run with a pre-Negotiate function version of the layer so that it has to query vkCreateInstance using the +// renamed vkGetInstanceProcAddr function which returns one that intentionally fails. Then disable the +// layer and verify it works. The non-override version of vkCreateInstance in the layer also works (and is +// tested through behavior above). +TEST(ImplicitLayers, OverrideGetInstanceProcAddr) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 0, 0}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_1) + .set_disable_environment(disable_env_var.get()) + .add_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkGetInstanceProcAddr") + .set_override_name("test_override_vkGetInstanceProcAddr"))), + "implicit_test_layer.json"); + + { + InstWrapper inst1{env.vulkan_functions}; + inst1.CheckCreate(VK_ERROR_INVALID_SHADER_NV); + } + + { + // set disable env-var to 1, layer should not load + disable_env_var.set_new_value("1"); + InstWrapper inst2{env.vulkan_functions}; + inst2.CheckCreate(); + } +} + +// Force enable with filter env var +TEST(ImplicitLayers, EnableWithFilter) { + FrameworkEnvironment env; + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .add_physical_device({}) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* implicit_json_name_1 = "First_layer.json"; + const char* disable_layer_name_1 = "DISABLE_FIRST"; + const char* enable_layer_name_1 = "ENABLE_FIRST"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_enable_environment(enable_layer_name_1) + .set_disable_environment(disable_layer_name_1) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_1); + + const char* implicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* implicit_json_name_2 = "Second_layer.json"; + const char* disable_layer_name_2 = "DISABLE_SECOND"; + const char* enable_layer_name_2 = "ENABLE_SECOND"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_enable_environment(enable_layer_name_2) + .set_disable_environment(disable_layer_name_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_2); + + const char* implicit_layer_name_3 = "VK_LAYER_LUNARG_Second_test_layer"; + const char* implicit_json_name_3 = "Second_test_layer.json"; + const char* disable_layer_name_3 = "DISABLE_THIRD"; + const char* enable_layer_name_3 = "ENABLE_THIRD"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_3) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_enable_environment(enable_layer_name_3) + .set_disable_environment(disable_layer_name_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_3); + + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE"}; + EnvVarWrapper layer_1_enable_env_var{enable_layer_name_1}; + + // First, test an instance/device without the layer forced on. + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Now force on one layer with its full name + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value(implicit_layer_name_1); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match prefix + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("VK_LAYER_LUNARG_*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match suffix + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("*Second_layer"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match substring + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + inst5.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with star '*' + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + inst6.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with special name + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("~all~"); + + InstWrapper inst7{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + inst7.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match substring, but enable the other layer manually + // ------------------------------------------ + env.debug_log.clear(); + layer_1_enable_env_var.set_new_value("1"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst8{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst8.create_info, env.debug_log); + inst8.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); +} + +// Force disabled with new filter env var +TEST(ImplicitLayers, DisableWithFilter) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* implicit_json_name_1 = "First_layer.json"; + const char* disable_layer_name_1 = "DISABLE_FIRST"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_1) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_1); + + const char* implicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* implicit_json_name_2 = "Second_layer.json"; + const char* disable_layer_name_2 = "DISABLE_SECOND"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_2); + + const char* implicit_layer_name_3 = "VK_LAYER_LUNARG_Second_test_layer"; + const char* implicit_json_name_3 = "Second_test_layer.json"; + const char* disable_layer_name_3 = "DISABLE_THIRD"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_3) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_3); + + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + + // First, test an instance/device + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Now force off one layer with its full name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value(implicit_layer_name_1); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match prefix + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("VK_LAYER_LUNARG_*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match suffix + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*Second_layer"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match substring + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*Second*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + inst5.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with star '*' + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + inst6.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with special name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~all~"); + + InstWrapper inst7{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + inst7.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); +} + +// Force disabled with new filter env var +TEST(ImplicitLayers, DisableWithFilterWhenLayersEnableEnvVarIsActive) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* implicit_json_name_1 = "First_layer.json"; + const char* disable_layer_name_1 = "DISABLE_FIRST"; + const char* enable_layer_name_1 = "ENABLE_FIRST"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_1) + .set_enable_environment(enable_layer_name_1) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_1); + + const char* implicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* implicit_json_name_2 = "Second_layer.json"; + const char* disable_layer_name_2 = "DISABLE_SECOND"; + const char* enable_layer_name_2 = "ENABLE_SECOND"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_2) + .set_enable_environment(enable_layer_name_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_2); + + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + EnvVarWrapper layer_1_enable_env_var{enable_layer_name_1}; + EnvVarWrapper layer_2_enable_env_var{enable_layer_name_2}; + + // First, test an instance/device + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + + // Set the layers enable env-var + // ------------------------------------------ + env.debug_log.clear(); + layer_1_enable_env_var.set_new_value("1"); + layer_2_enable_env_var.set_new_value("1"); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + + // Now force off one layer with its full name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value(implicit_layer_name_1); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + + // Now force off both layers + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~implicit~"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); +} + +// Test interaction between both the enable and disable filter environment variables. The enable should always +// override the disable. +TEST(ImplicitLayers, EnableAndDisableWithFilter) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* implicit_json_name_1 = "First_layer.json"; + const char* disable_layer_name_1 = "DISABLE_FIRST"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_1) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_1); + + const char* implicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* implicit_json_name_2 = "Second_layer.json"; + const char* disable_layer_name_2 = "DISABLE_SECOND"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_2); + + const char* implicit_layer_name_3 = "VK_LAYER_LUNARG_Second_test_layer"; + const char* implicit_json_name_3 = "Second_test_layer.json"; + const char* disable_layer_name_3 = "DISABLE_THIRD"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name_3) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_layer_name_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + implicit_json_name_3); + + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE"}; + + // Disable 2 but enable 1 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*Second*"); + layers_enable_env_var.set_new_value("*test_layer"); + + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable all but enable 2 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable all but enable 2 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~all~"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable implicit but enable 2 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~implicit~"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable explicit but enable 2 (should still be everything) + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~explicit~"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + inst5.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable implicit but enable all + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~implicit~"); + layers_enable_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + inst6.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", implicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", implicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(implicit_layer_name_3, "disabled because name matches filter of env var")); +} + +// Add 2 implicit layers with the same layer name and expect only one to be loaded. +// Expect the second layer to be found first, because it'll be in a path that is searched first. +TEST(ImplicitLayers, DuplicateLayers) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* same_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("if_you_can")), + "regular_layer_1.json")); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + layer1.set_make_spurious_log_in_create_instance("actually_layer_1"); + + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("if_you_can")), + "regular_layer_1.json") + // use override folder as just a folder and manually add it to the implicit layer search paths + .set_discovery_type(ManifestDiscoveryType::override_folder)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + layer2.set_make_spurious_log_in_create_instance("actually_layer_2"); +#if defined(WIN32) + env.platform_shim->add_manifest(ManifestCategory::implicit_layer, env.get_folder(ManifestLocation::override_layer).location()); +#elif COMMON_UNIX_PLATFORMS + env.platform_shim->redirect_path(std::filesystem::path(USER_LOCAL_SHARE_DIR "/vulkan/implicit_layer.d"), + env.get_folder(ManifestLocation::override_layer).location()); +#endif + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); +} + +TEST(ImplicitLayers, VkImplicitLayerPathEnvVar) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layer loads successfully when setting VK_IMPLICIT_LAYER_PATH to a full filepath + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Yikes")), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(false)); + + InstWrapper inst(env.vulkan_functions); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name_1)); +} + +TEST(ImplicitLayers, VkImplicitLayerPathEnvVarContainsMultipleFilePaths) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layers load successfully when setting VK_IMPLICIT_LAYER_PATH to multiple full filepaths + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Yikes")), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(false)); + + const char* regular_layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Yikes")), + "regular_layer_2.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(false)); + + InstWrapper inst(env.vulkan_functions); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name_1, regular_layer_name_2}, layer_props)); +} + +TEST(ImplicitLayers, VkImplicitLayerPathEnvVarIsDirectory) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layers load successfully when setting VK_IMPLICIT_LAYER_PATH to a directory + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Yikes")), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* regular_layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Yikes")), + "regular_layer_2.json") + .set_discovery_type(ManifestDiscoveryType::env_var)); + + InstWrapper inst(env.vulkan_functions); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name_1, regular_layer_name_2}, layer_props)); +} + +// Test to make sure order layers are found in VK_IMPLICIT_LAYER_PATH is what decides which layer is loaded +TEST(ImplicitLayers, DuplicateLayersInVkImplicitLayerPath) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name = "VK_LAYER_RegularLayer1"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Boo!")), + "layer.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(true)); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Ah!")), + "layer.json") + // putting it in a separate folder then manually adding the folder to VK_IMPLICIT_LAYER_PATH + .set_discovery_type(ManifestDiscoveryType::override_folder) + .set_is_dir(true)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + env.env_var_vk_implicit_layer_paths.add_to_list(env.get_folder(ManifestLocation::override_layer).location().string()); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_name, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer_name, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + + EnvVarWrapper inst_layers_env_var{"VK_INSTANCE_LAYERS"}; + inst_layers_env_var.add_to_list(layer_name); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Expect the first layer added to be found + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layer_name, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[0].description)); +} + +TEST(ImplicitLayers, DuplicateLayersInVK_ADD_IMPLICIT_LAYER_PATH) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* same_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Red")), + "regular_layer_1.json") + // use override folder as just a folder and manually set the VK_ADD_IMPLICIT_LAYER_PATH env-var to it + .set_discovery_type(ManifestDiscoveryType::override_folder) + .set_is_dir(true)); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + layer1.set_make_spurious_log_in_create_instance("actually_layer_1"); + env.add_env_var_vk_implicit_layer_paths.add_to_list(env.get_folder(ManifestLocation::override_layer).location()); + + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Blue")), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::add_env_var) + .set_is_dir(true)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + layer2.set_make_spurious_log_in_create_instance("actually_layer_2"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); +} + +// Meta layer which contains component layers that do not exist. +TEST(MetaLayers, InvalidComponentLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* meta_layer_name = "VK_LAYER_MetaTestLayer"; + const char* invalid_layer_name_1 = "VK_LAYER_InvalidLayer1"; + const char* invalid_layer_name_2 = "VK_LAYER_InvalidLayer2"; + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(meta_layer_name) + .add_component_layers({invalid_layer_name_1, invalid_layer_name_2}) + .set_disable_environment("NotGonnaWork") + .add_instance_extension({"NeverGonnaGiveYouUp"}) + .add_device_extension({"NeverGonnaLetYouDown"})), + "meta_test_layer.json"); + + const char* regular_layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + // should find 1, the 'regular' layer + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(meta_layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_TRUE(env.debug_log.find(std::string("verify_meta_layer_component_layers: Meta-layer ") + meta_layer_name + + " can't find component layer " + invalid_layer_name_1 + " at index 0. Skipping this layer.")); +} + +// Meta layer that is an explicit layer +TEST(MetaLayers, ExplicitMetaLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + const char* meta_layer_name = "VK_LAYER_MetaTestLayer"; + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{}.set_name(meta_layer_name).add_component_layers({regular_layer_name})), + "meta_test_layer.json"); + + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + { // global functions + // should find 1, the 'regular' layer + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, meta_layer_name}, layer_props)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + } + { // don't enable the layer, shouldn't find any layers when calling vkEnumerateDeviceLayerProperties + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(meta_layer_name); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name, meta_layer_name}, layer_props)); + } +} + +// Meta layer which adds itself in its list of component layers +TEST(MetaLayers, MetaLayerNameInComponentLayers) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* meta_layer_name = "VK_LAYER_MetaTestLayer"; + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(meta_layer_name) + .add_component_layers({meta_layer_name, regular_layer_name}) + .set_disable_environment("NotGonnaWork") + .add_instance_extension({"NeverGonnaGiveYouUp"}) + .add_device_extension({"NeverGonnaLetYouDown"})), + "meta_test_layer.json"); + + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + // should find 1, the 'regular' layer + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(meta_layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_TRUE(env.debug_log.find(std::string("verify_meta_layer_component_layers: Meta-layer ") + meta_layer_name + + " lists itself in its component layer " + "list at index 0. Skipping this layer.")); +} + +// Meta layer which adds another meta layer as a component layer +TEST(MetaLayers, MetaLayerWhichAddsMetaLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* meta_layer_name = "VK_LAYER_MetaTestLayer"; + const char* meta_meta_layer_name = "VK_LAYER_MetaMetaTestLayer"; + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{}.set_name(meta_layer_name).add_component_layers({regular_layer_name})), + "meta_test_layer.json"); + env.add_explicit_layer(ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(meta_meta_layer_name) + .add_component_layers({meta_layer_name, regular_layer_name})), + "meta_meta_test_layer.json"); + + auto layer_props = env.GetLayerProperties(3); + EXPECT_TRUE(check_permutation({regular_layer_name, meta_layer_name, meta_meta_layer_name}, layer_props)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(meta_layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("verify_meta_layer_component_layers: Adding meta-layer ") + meta_meta_layer_name + + " which also contains meta-layer " + meta_layer_name)); +} + +TEST(MetaLayers, InstanceExtensionInComponentLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* meta_layer_name = "VK_LAYER_MetaTestLayer"; + const char* regular_layer_name = "VK_LAYER_TestLayer"; + const char* instance_ext_name = "VK_EXT_headless_surface"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .add_instance_extension({instance_ext_name})), + "regular_test_layer.json"); + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{}.set_name(meta_layer_name).add_component_layers({regular_layer_name})), + "meta_test_layer.json"); + + auto extensions = env.GetInstanceExtensions(1, meta_layer_name); + EXPECT_TRUE(string_eq(extensions[0].extensionName, instance_ext_name)); +} + +TEST(MetaLayers, DeviceExtensionInComponentLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* meta_layer_name = "VK_LAYER_MetaTestLayer"; + const char* regular_layer_name = "VK_LAYER_TestLayer"; + const char* device_ext_name = "VK_EXT_fake_dev_ext"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .add_device_extension({device_ext_name})), + "regular_test_layer.json"); + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{}.set_name(meta_layer_name).add_component_layers({regular_layer_name})), + "meta_test_layer.json"); + + ASSERT_NO_FATAL_FAILURE(env.GetInstanceExtensions(0, meta_layer_name)); + + { // layer is not enabled + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Meta-layer ") + meta_layer_name + " component layer " + regular_layer_name + + " adding device extension " + device_ext_name)); + + auto extensions = inst.EnumerateLayerDeviceExtensions(inst.GetPhysDev(), meta_layer_name, 1); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, device_ext_name)); + } + { // layer is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(meta_layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Meta-layer ") + meta_layer_name + " component layer " + regular_layer_name + + " adding device extension " + device_ext_name)); + + auto extensions = inst.EnumerateLayerDeviceExtensions(inst.GetPhysDev(), meta_layer_name, 1); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, device_ext_name)); + } +} + +// Override meta layer missing disable environment variable still enables the layer +TEST(OverrideMetaLayer, InvalidDisableEnvironment) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_device_extension({"NeverGonnaLetYouDown"})), + "regular_test_layer.json"); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layers({regular_layer_name})), + "meta_test_layer.json"); + + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); +} + +// Override meta layer whose version is less than the api version of the instance +TEST(OverrideMetaLayer, OlderVersionThanInstance) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_device_extension({"NeverGonnaLetYouDown"})), + "regular_test_layer.json"); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .set_disable_environment("DisableMeIfYouCan") + .add_component_layers({regular_layer_name})), + "meta_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } + { // 1.1 instance + InstWrapper inst{env.vulkan_functions}; + inst.create_info.api_version = VK_API_VERSION_1_1; + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + ASSERT_TRUE(string_eq(layer_props[1].layerName, lunarg_meta_layer_name)); + } + { // 1.3 instance + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.api_version = VK_API_VERSION_1_3; + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + + ASSERT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + ASSERT_TRUE(string_eq(layer_props[1].layerName, lunarg_meta_layer_name)); + } +} + +TEST(OverrideMetaLayer, OlderMetaLayerWithNewerInstanceVersion) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + "regular_test_layer.json"); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layers({regular_layer_name}) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } + { + // 1.1 instance + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + ASSERT_TRUE(string_eq(layer_props[1].layerName, lunarg_meta_layer_name)); + } + + { + // 1.3 instance + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 3, 0); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + ASSERT_TRUE(string_eq(layer_props[1].layerName, lunarg_meta_layer_name)); + } +} + +TEST(OverrideMetaLayer, NewerComponentLayerInMetaLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_2)), + "regular_test_layer.json"); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layers({regular_layer_name}) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + + { // global functions + auto layer_props = env.GetLayerProperties(2); + // Expect the explicit layer to still be found + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } + { + // 1.1 instance + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + // Newer component is allowed now + EXPECT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } + env.debug_log.clear(); + + { + // 1.3 instance + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.set_api_version(1, 3, 0); + inst.CheckCreate(); + // Newer component is allowed now + EXPECT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } +} + +TEST(OverrideMetaLayer, OlderComponentLayerInMetaLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + "regular_test_layer.json"); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layers({regular_layer_name}) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + } + { + // 1.1 instance + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + EXPECT_TRUE( + env.debug_log.find("verify_meta_layer_component_layers: Meta-layer uses API version 1.1, but component layer 0 has API " + "version 1.0 that is lower. Skipping this layer.")); + env.debug_log.clear(); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + + { + // 1.2 instance + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.set_api_version(1, 2, 0); + inst.CheckCreate(); + ASSERT_TRUE( + env.debug_log.find("verify_meta_layer_component_layers: Meta-layer uses API version 1.1, but component layer 0 has API " + "version 1.0 that is lower. Skipping this layer.")); + env.debug_log.clear(); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +TEST(OverrideMetaLayer, ApplicationEnabledLayerInBlacklist) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* automatic_regular_layer_name = "VK_LAYER_TestLayer_1"; + const char* manual_regular_layer_name = "VK_LAYER_TestLayer_2"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(automatic_regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + "regular_test_layer_1.json"); + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(manual_regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + "regular_test_layer_2.json"); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(automatic_regular_layer_name) + .add_blacklisted_layer(manual_regular_layer_name) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + { // Check that enumerating the layers returns only the non-blacklisted layers + override layer + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(check_permutation({automatic_regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } + { + // enable the layer in the blacklist + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(manual_regular_layer_name); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_TRUE(env.debug_log.find(std::string("loader_remove_layers_in_blacklist: Override layer is active and layer ") + + manual_regular_layer_name + + " is in the blacklist inside of it. Removing that layer from current layer list.")); + env.debug_log.clear(); + } + { // dont enable the layer in the blacklist + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("loader_remove_layers_in_blacklist: Override layer is active and layer ") + + manual_regular_layer_name + + " is in the blacklist inside of it. Removing that layer from current layer list.")); + env.debug_log.clear(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(check_permutation({automatic_regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } +} + +TEST(OverrideMetaLayer, BasicOverridePaths) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + auto& override_layer_folder = env.get_folder(ManifestLocation::override_layer); + + const char* regular_layer_name = "VK_LAYER_TestLayer_1"; + override_layer_folder.write_manifest("regular_test_layer.json", + ManifestLayer{} + .add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))) + .get_manifest_str()); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(regular_layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(override_layer_folder.location())), + "meta_test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + env.layers.clear(); +} + +TEST(OverrideMetaLayer, BasicOverridePathsIgnoreOtherLayers) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + auto& override_layer_folder = env.get_folder(ManifestLocation::override_layer); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + "regular_test_layer.json"); + + const char* special_layer_name = "VK_LAYER_TestLayer_1"; + override_layer_folder.write_manifest("regular_test_layer.json", + ManifestLayer{} + .add_layer(ManifestLayer::LayerDescription{} + .set_name(special_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))) + .get_manifest_str()); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(special_layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(override_layer_folder.location())), + "meta_test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.create_info.add_layer(regular_layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + env.layers.clear(); +} + +TEST(OverrideMetaLayer, OverridePathsInteractionWithVK_LAYER_PATH) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // add explicit layer to VK_LAYER_PATH folder + const char* env_var_layer_name = "VK_LAYER_env_var_set_path"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(env_var_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + "regular_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::env_var)); + + // add layer to regular explicit layer folder + const char* regular_layer_name = "VK_LAYER_regular_layer_path"; + env.add_explicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + "regular_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(regular_layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(env.get_folder(ManifestLocation::override_layer).location())), + "meta_test_layer.json"); + + auto meta_layer_path = env.get_folder(ManifestLocation::override_layer).location(); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.create_info.add_layer(env_var_layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + env_var_layer_name)); + ASSERT_TRUE(env.debug_log.find( + std::string("Ignoring VK_LAYER_PATH. The Override layer is active and has override paths set, which takes priority. " + "VK_LAYER_PATH is set to ") + + env.env_var_vk_layer_paths.value())); + ASSERT_TRUE(env.debug_log.find("Override layer has override paths set to " + meta_layer_path.string())); + + env.layers.clear(); +} + +// Make sure that implicit layers not in the override paths aren't found by mistake +TEST(OverrideMetaLayer, OverridePathsEnableImplicitLayerInDefaultPaths) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + auto& override_layer_folder = env.get_folder(ManifestLocation::override_layer); + + const char* implicit_layer_name = "VK_LAYER_ImplicitLayer"; + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + "implicit_test_layer.json"); + + const char* regular_layer_name = "VK_LAYER_TestLayer_1"; + override_layer_folder.write_manifest("regular_test_layer.json", + ManifestLayer{} + .add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))) + .get_manifest_str()); + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layers({regular_layer_name, implicit_layer_name}) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(override_layer_folder.location())), + "meta_test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); + ASSERT_TRUE( + env.debug_log.find("Removing meta-layer VK_LAYER_LUNARG_override from instance layer list since it appears invalid.")); + env.layers.clear(); +} + +TEST(OverrideMetaLayer, ManifestFileFormatVersionTooOld) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + auto& override_layer_folder = env.get_folder(ManifestLocation::override_layer); + + const char* regular_layer_name = "VK_LAYER_TestLayer_1"; + override_layer_folder.write_manifest("regular_test_layer.json", + ManifestLayer{} + .add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))) + .get_manifest_str()); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 0, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(regular_layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(override_layer_folder.location())), + "meta_test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + ASSERT_TRUE(env.debug_log.find(std::string("Layer \"") + lunarg_meta_layer_name + + "\" contains meta-layer-specific override paths, but using older JSON file version.")); + env.layers.clear(); +} + +// app_key contains test executable name, should activate the override layer +TEST(OverrideMetaLayer, AppKeysDoesContainCurrentApplication) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + std::string cur_path = test_platform_executable_path(); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .add_component_layers({regular_layer_name}) + .set_disable_environment("DisableMeIfYouCan") + .add_app_key(cur_path)), + "meta_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } + { + // instance + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + } +} + +// app_key contains random strings, should not activate the override layer +TEST(OverrideMetaLayer, AppKeysDoesNotContainCurrentApplication) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .add_component_layers({regular_layer_name}) + .set_disable_environment("DisableMeIfYouCan") + .add_app_keys({"/Hello", "Hi", "./../Uh-oh", "C:/Windows/Only"})), + "meta_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + } + { + // instance + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +TEST(OverrideMetaLayer, RunningWithElevatedPrivilegesFromSecureLocation) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + auto& override_layer_folder = env.get_folder(ManifestLocation::override_layer); + + const char* regular_layer_name = "VK_LAYER_TestLayer_1"; + override_layer_folder.write_manifest("regular_test_layer.json", + ManifestLayer{} + .add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))) + .get_manifest_str()); + auto override_folder_location = override_layer_folder.location().string(); + env.add_implicit_layer(TestLayerDetails{ + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(regular_layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(override_layer_folder.location())), + "meta_test_layer.json"}); + + { // try with no elevated privileges + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + env.debug_log.clear(); + } + + env.platform_shim->set_elevated_privilege(true); + + { // try with elevated privileges + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, active_layer_props)); + } +} + +// Override layer should not be found and thus not loaded when running with elevated privileges +TEST(OverrideMetaLayer, RunningWithElevatedPrivilegesFromUnsecureLocation) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + auto& override_layer_folder = env.get_folder(ManifestLocation::override_layer); + + const char* regular_layer_name = "VK_LAYER_TestLayer_1"; + override_layer_folder.write_manifest("regular_test_layer.json", + ManifestLayer{} + .add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))) + .get_manifest_str()); + env.add_implicit_layer(TestLayerDetails{ + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(regular_layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(override_layer_folder.location())), + "meta_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::unsecured_generic)); + + { // try with no elevated privileges + auto layer_props = env.GetLayerProperties(2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, layer_props)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + env.debug_log.clear(); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name, lunarg_meta_layer_name}, active_layer_props)); + } + + env.platform_shim->set_elevated_privilege(true); + + { // try with no elevated privileges + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +// Makes sure explicit layers can't override pre-instance functions even if enabled by the override layer +TEST(ExplicitLayers, OverridePreInstanceFunctions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + const char* explicit_layer_name = "VK_LAYER_enabled_by_override"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "explicit_test_layer.json"); + + auto& layer = env.get_test_layer(0); + layer.set_reported_layer_props(34); + layer.set_reported_extension_props(22); + layer.set_reported_instance_version(VK_MAKE_API_VERSION(1, 0, 0, 1)); + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .add_component_layers({explicit_layer_name}) + .set_disable_environment(disable_env_var)), + "override_meta_layer.json"); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, 2U); + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, 4U); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, VK_HEADER_VERSION_COMPLETE); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, lunarg_meta_layer_name)); +} + +TEST(ExplicitLayers, LayerSettingsPreInstanceFunctions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + const char* explicit_layer_name = "VK_LAYER_enabled_by_override"; + + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "explicit_test_layer.json"); + + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(false))); + env.update_loader_settings(env.loader_settings); + + auto& layer = env.get_test_layer(0); + layer.set_reported_layer_props(34); + layer.set_reported_extension_props(22); + layer.set_reported_instance_version(VK_MAKE_API_VERSION(1, 0, 0, 1)); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, 1U); + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, 4U); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, VK_HEADER_VERSION_COMPLETE); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); +} + +TEST(ExplicitLayers, ContainsPreInstanceFunctions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + const char* explicit_layer_name = "VK_LAYER_enabled_by_override"; + + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "explicit_test_layer.json"); + + auto& layer = env.get_test_layer(0); + layer.set_reported_layer_props(34); + layer.set_reported_extension_props(22); + layer.set_reported_instance_version(VK_MAKE_API_VERSION(1, 0, 0, 1)); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, 1U); + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, 4U); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, VK_HEADER_VERSION_COMPLETE); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); +} + +TEST(ExplicitLayers, CallsPreInstanceFunctionsInCreateInstance) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + const char* explicit_layer_name = "VK_LAYER_enabled_by_override"; + + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer.json"); + + auto& layer = env.get_test_layer(0); + layer.set_query_vkEnumerateInstanceLayerProperties(true); + layer.set_query_vkEnumerateInstanceExtensionProperties(true); + layer.set_query_vkEnumerateInstanceVersion(true); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); +} + +// This test makes sure that any layer calling GetPhysicalDeviceProperties2 inside of CreateInstance +// succeeds and doesn't crash. +TEST(LayerCreateInstance, GetPhysicalDeviceProperties2) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .add_physical_device({}) + .set_icd_api_version(VK_API_VERSION_1_1); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + auto& layer_handle = env.get_test_layer(0); + layer_handle.set_create_instance_callback([](TestLayer& layer) -> VkResult { + uint32_t phys_dev_count = 0; + VkResult res = layer.instance_dispatch_table.EnumeratePhysicalDevices(layer.instance_handle, &phys_dev_count, nullptr); + if (res != VK_SUCCESS || phys_dev_count > 1) { + return VK_ERROR_INITIALIZATION_FAILED; // expecting only a single physical device. + } + VkPhysicalDevice phys_dev{}; + res = layer.instance_dispatch_table.EnumeratePhysicalDevices(layer.instance_handle, &phys_dev_count, &phys_dev); + if (res != VK_SUCCESS) { + return VK_ERROR_INITIALIZATION_FAILED; + } + VkPhysicalDeviceProperties2 props2{}; + props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + layer.instance_dispatch_table.GetPhysicalDeviceProperties2(phys_dev, &props2); + + VkPhysicalDeviceFeatures2 features2{}; + features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; + layer.instance_dispatch_table.GetPhysicalDeviceFeatures2(phys_dev, &features2); + return VK_SUCCESS; + }); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(regular_layer_name).set_api_version(1, 1, 0); + inst.CheckCreate(); +} + +TEST(LayerCreateInstance, GetPhysicalDeviceProperties2KHR) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .add_physical_device({}) + .add_instance_extension({"VK_KHR_get_physical_device_properties2", 0}); + + const char* regular_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + auto& layer_handle = env.get_test_layer(0); + layer_handle.set_create_instance_callback([](TestLayer& layer) -> VkResult { + uint32_t phys_dev_count = 1; + VkPhysicalDevice phys_dev{}; + layer.instance_dispatch_table.EnumeratePhysicalDevices(layer.instance_handle, &phys_dev_count, &phys_dev); + + VkPhysicalDeviceProperties2KHR props2{}; + props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; + layer.instance_dispatch_table.GetPhysicalDeviceProperties2KHR(phys_dev, &props2); + + VkPhysicalDeviceFeatures2KHR features2{}; + features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR; + layer.instance_dispatch_table.GetPhysicalDeviceFeatures2KHR(phys_dev, &features2); + return VK_SUCCESS; + }); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(regular_layer_name).add_extension("VK_KHR_get_physical_device_properties2"); + inst.CheckCreate(); +} + +TEST(ExplicitLayers, MultipleLayersInSingleManifest) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + const char* regular_layer_name_2 = "VK_LAYER_RegularLayer2"; + const char* regular_layer_name_3 = "VK_LAYER_RegularLayer3"; + env.add_explicit_layer(TestLayerDetails( + ManifestLayer{} + .set_file_format_version({1, 0, 1}) + .add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)) + .add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)) + .add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_3).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "multi_layer_manifest.json")); + + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(regular_layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(regular_layer_name_2, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(regular_layer_name_3, layer_props[2].layerName)); +} + +TEST(ExplicitLayers, WrapObjects) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0"); + + const char* wrap_objects_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer(ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "wrap_objects_layer.json"); + + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json"); + + const char* regular_layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_2.json"); + + { // just the wrap layer + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(wrap_objects_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + } + { // wrap layer first + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(wrap_objects_name).add_layer(regular_layer_name_1); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + } + { // wrap layer last + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(regular_layer_name_1).add_layer(wrap_objects_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + } + { // wrap layer last + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(regular_layer_name_1).add_layer(wrap_objects_name).add_layer(regular_layer_name_2); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + } +} + +TEST(ExplicitLayers, VkLayerPathEnvVar) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer( + TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(false)); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.add_layer(regular_layer_name_1); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name_1)); +} + +TEST(ExplicitLayers, VkLayerPathEnvVarContainsMultipleFilepaths) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layers load successfully when setting VK_LAYER_PATH to multiple full filepaths + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer( + TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(false)); + + const char* regular_layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_explicit_layer( + TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_2.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(false)); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.add_layer(regular_layer_name_1); + inst.create_info.add_layer(regular_layer_name_2); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name_1, regular_layer_name_2}, layer_props)); +} + +TEST(ExplicitLayers, VkLayerPathEnvVarIsDirectory) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layers load successfully when setting VK_LAYER_PATH to a directory + const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer( + TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* regular_layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_explicit_layer( + TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_2.json") + .set_discovery_type(ManifestDiscoveryType::env_var)); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.add_layer(regular_layer_name_1); + inst.create_info.add_layer(regular_layer_name_2); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + EXPECT_TRUE(check_permutation({regular_layer_name_1, regular_layer_name_2}, layer_props)); +} + +TEST(ExplicitLayers, DuplicateLayersInVK_LAYER_PATH) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath + const char* same_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + // use override folder as just a folder and manually set the VK_LAYER_PATH env-var to it + .set_discovery_type(ManifestDiscoveryType::override_folder) + .set_is_dir(true)); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + layer1.set_make_spurious_log_in_create_instance("actually_layer_1"); + env.env_var_vk_layer_paths.add_to_list(env.get_folder(ManifestLocation::override_layer).location()); + + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(true)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + layer2.set_make_spurious_log_in_create_instance("actually_layer_2"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(same_layer_name_1); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); + } + env.debug_log.clear(); + + { + EnvVarWrapper layers_enable_env_var{"VK_INSTANCE_LAYERS", same_layer_name_1}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); + } + env.debug_log.clear(); + + { + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE", same_layer_name_1}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); + } + env.debug_log.clear(); +} + +TEST(ExplicitLayers, DuplicateLayersInVK_ADD_LAYER_PATH) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* same_layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + // use override folder as just a folder and manually set the VK_ADD_LAYER_PATH env-var to it + .set_discovery_type(ManifestDiscoveryType::override_folder) + .set_is_dir(true)); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + layer1.set_make_spurious_log_in_create_instance("actually_layer_1"); + env.add_env_var_vk_layer_paths.add_to_list(env.get_folder(ManifestLocation::override_layer).location()); + + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(same_layer_name_1) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::add_env_var) + .set_is_dir(true)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + layer2.set_make_spurious_log_in_create_instance("actually_layer_2"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(same_layer_name_1, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(same_layer_name_1); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); + } + env.debug_log.clear(); + + { + EnvVarWrapper layers_enable_env_var{"VK_INSTANCE_LAYERS", same_layer_name_1}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); + } + env.debug_log.clear(); + + { + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE", same_layer_name_1}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(same_layer_name_1, enabled_layer_props.at(0).layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props.at(0).description)); + ASSERT_TRUE(env.debug_log.find("actually_layer_1")); + ASSERT_FALSE(env.debug_log.find("actually_layer_2")); + } + env.debug_log.clear(); +} + +TEST(ExplicitLayers, CorrectOrderOfEnvVarEnabledLayers) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(true)); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + + const char* layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_2) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_2.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(true)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + // 1 then 2 + { + EnvVarWrapper inst_layers_env_var{"VK_INSTANCE_LAYERS"}; + inst_layers_env_var.add_to_list(layer_name_1); + inst_layers_env_var.add_to_list(layer_name_2); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Expect the env-var layer to be first + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), enabled_layer_props[1].description)); + ASSERT_TRUE(string_eq(layer_name_1, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, enabled_layer_props[1].layerName)); + } + // 2 then 1 + { + EnvVarWrapper inst_layers_env_var{"VK_INSTANCE_LAYERS"}; + inst_layers_env_var.add_to_list(layer_name_2); + inst_layers_env_var.add_to_list(layer_name_1); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Expect the env-var layer to be first + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer2.description.c_str(), enabled_layer_props[0].description)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[1].description)); + ASSERT_TRUE(string_eq(layer_name_2, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_1, enabled_layer_props[1].layerName)); + } +} +// Test to make sure order layers are found in VK_LAYER_PATH is what decides which layer is loaded +TEST(ExplicitLayers, DuplicateLayersInVkLayerPath) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "layer.json") + .set_discovery_type(ManifestDiscoveryType::env_var) + .set_is_dir(true)); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "layer.json") + // putting it in a separate folder then manually adding the folder to VK_LAYER_PATH + .set_discovery_type(ManifestDiscoveryType::override_folder) + .set_is_dir(true)); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + env.env_var_vk_layer_paths.add_to_list(env.get_folder(ManifestLocation::override_layer).location().string()); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_name, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer_name, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + + EnvVarWrapper inst_layers_env_var{"VK_INSTANCE_LAYERS"}; + inst_layers_env_var.add_to_list(layer_name); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Expect the first layer added to be found + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layer_name, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[0].description)); +} + +TEST(ExplicitLayers, CorrectOrderOfEnvVarEnabledLayersFromSystemLocations) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json")); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + + const char* layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_2) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_2.json")); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + // 1 then 2 + { + EnvVarWrapper inst_layers_env_var{"VK_INSTANCE_LAYERS"}; + inst_layers_env_var.add_to_list(layer_name_1); + inst_layers_env_var.add_to_list(layer_name_2); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), enabled_layer_props[1].description)); + ASSERT_TRUE(string_eq(layer_name_1, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, enabled_layer_props[1].layerName)); + } + // 2 then 1 + { + EnvVarWrapper inst_layers_env_var{"VK_INSTANCE_LAYERS"}; + inst_layers_env_var.add_to_list(layer_name_2); + inst_layers_env_var.add_to_list(layer_name_1); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Expect the env-var layer to be first + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer2.description.c_str(), enabled_layer_props[0].description)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[1].description)); + ASSERT_TRUE(string_eq(layer_name_2, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_1, enabled_layer_props[1].layerName)); + } +} + +TEST(ExplicitLayers, CorrectOrderOfApplicationEnabledLayers) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name_1 = "VK_LAYER_RegularLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_1) + .set_description("actually_layer_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_1.json")); + auto& layer1 = env.get_test_layer(0); + layer1.set_description("actually_layer_1"); + layer1.set_make_spurious_log_in_create_instance("actually_layer_1"); + + const char* layer_name_2 = "VK_LAYER_RegularLayer2"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_2) + .set_description("actually_layer_2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_layer_2.json")); + auto& layer2 = env.get_test_layer(1); + layer2.set_description("actually_layer_2"); + layer2.set_make_spurious_log_in_create_instance("actually_layer_2"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, layer_props[1].layerName)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), layer_props[1].description)); + + // 1 then 2 + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name_1); + inst.create_info.add_layer(layer_name_2); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + // Expect the env-var layer to be first + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[0].description)); + ASSERT_TRUE(string_eq(layer2.description.c_str(), enabled_layer_props[1].description)); + ASSERT_TRUE(string_eq(layer_name_1, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, enabled_layer_props[1].layerName)); + } + // 2 then 1 + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name_2); + inst.create_info.add_layer(layer_name_1); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + // Expect the env-var layer to be first + auto enabled_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer2.description.c_str(), enabled_layer_props[0].description)); + ASSERT_TRUE(string_eq(layer1.description.c_str(), enabled_layer_props[1].description)); + ASSERT_TRUE(string_eq(layer_name_2, enabled_layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_1, enabled_layer_props[1].layerName)); + } +} + +TEST(LayerExtensions, ImplicitNoAdditionalInstanceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var)), + "implicit_wrap_layer_no_ext.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + // Make sure the extensions that are implemented only in the test layers is not present. + ASSERT_FALSE(contains(extensions, VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)); + ASSERT_FALSE(contains(extensions, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Make sure all the function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ImplicitDirDispModeInstanceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_1) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var) + .add_instance_extension({VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, 1, {"vkReleaseDisplayEXT"}})), + "implicit_wrap_layer_dir_disp_mode.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + auto extensions = env.GetInstanceExtensions(5); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)); + + // Make sure the extensions that are implemented only in the test layers is not present. + ASSERT_FALSE(contains(extensions, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME); + inst.CheckCreate(); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ImplicitDispSurfCountInstanceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_2) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var) + .add_instance_extension({VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, + 1, + {"vkGetPhysicalDeviceSurfaceCapabilities2EXT"}})), + "implicit_wrap_layer_disp_surf_count.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + auto extensions = env.GetInstanceExtensions(5); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME); + inst.CheckCreate(); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkReleaseDisplayEXT")); + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ImplicitBothInstanceExtensions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var) + .add_instance_extension({VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, 1, {"vkReleaseDisplayEXT"}}) + .add_instance_extension( + {VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, 1, {"vkGetPhysicalDeviceSurfaceCapabilities2EXT"}})), + "implicit_wrap_layer_both_inst.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + auto extensions = env.GetInstanceExtensions(6); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(5).extensionName, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME) + .add_extension(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME); + inst.CheckCreate(); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkReleaseDisplayEXT")); + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ExplicitNoAdditionalInstanceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "explicit_wrap_layer_no_ext.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + // Now query by layer name. + ASSERT_NO_FATAL_FAILURE(env.GetInstanceExtensions(0, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Make sure all the function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ExplicitDirDispModeInstanceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_1) + .add_instance_extension({VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, 1, {"vkReleaseDisplayEXT"}})), + "explicit_wrap_layer_dir_disp_mode.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + // Now query by layer name. + auto layer_extensions = env.GetInstanceExtensions(1, explicit_layer_name); + EXPECT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)); + + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_extension(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME); + inst1.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst1.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst1.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(explicit_layer_name).add_extension(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME); + inst2.CheckCreate(); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst2.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst2.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ExplicitDispSurfCountInstanceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_2) + .add_instance_extension({VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, + 1, + {"vkGetPhysicalDeviceSurfaceCapabilities2EXT"}})), + "explicit_wrap_layer_disp_surf_count.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + // Now query by layer name. + auto layer_extensions = env.GetInstanceExtensions(1, explicit_layer_name); + EXPECT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)); + + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_extension(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME); + inst1.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst1.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst1.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(explicit_layer_name).add_extension(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME); + inst2.CheckCreate(); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst2.inst, "vkReleaseDisplayEXT")); + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst2.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); +} + +TEST(LayerExtensions, ExplicitBothInstanceExtensions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .add_instance_extension({VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, 1, {"vkReleaseDisplayEXT"}}) + .add_instance_extension( + {VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, 1, {"vkGetPhysicalDeviceSurfaceCapabilities2EXT"}})), + "explicit_wrap_layer_both_inst.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + + // Make sure the extensions still aren't present in this layer + auto layer_extensions = env.GetInstanceExtensions(2, explicit_layer_name); + EXPECT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(layer_extensions.at(1).extensionName, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME)); + + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_extension(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME) + .add_extension(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME); + inst1.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst1.inst, "vkReleaseDisplayEXT")); + handle_assert_null(env.vulkan_functions.vkGetInstanceProcAddr(inst1.inst, "vkGetPhysicalDeviceSurfaceCapabilities2EXT")); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(explicit_layer_name) + .add_extension(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME) + .add_extension(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME); + inst2.CheckCreate(); + VkPhysicalDevice phys_dev = inst2.GetPhysDev(); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(env.vulkan_functions.vkGetInstanceProcAddr(inst2.inst, "vkReleaseDisplayEXT")); + PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT pfnGetPhysicalDeviceSurfaceCapabilities2EXT = + inst2.load("vkGetPhysicalDeviceSurfaceCapabilities2EXT"); + handle_assert_has_value(pfnGetPhysicalDeviceSurfaceCapabilities2EXT); + + VkSurfaceCapabilities2EXT surf_caps{VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT}; + + // Call and then check a few things + ASSERT_EQ(VK_SUCCESS, pfnGetPhysicalDeviceSurfaceCapabilities2EXT(phys_dev, VK_NULL_HANDLE, &surf_caps)); + ASSERT_EQ(7U, surf_caps.minImageCount); + ASSERT_EQ(12U, surf_caps.maxImageCount); + ASSERT_EQ(365U, surf_caps.maxImageArrayLayers); +} + +TEST(LayerExtensions, ImplicitNoAdditionalDeviceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var)), + "implicit_wrap_layer_no_ext.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + ASSERT_NO_FATAL_FAILURE(inst.EnumerateDeviceExtensions(phys_dev, 0)); + + // Device functions queried using vkGetInstanceProcAddr should be non-NULL since this could be available for any attached + // physical device. + PFN_vkTrimCommandPoolKHR pfn_vkTrimCommandPool = inst.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_vkGetSwapchainStatus = inst.load("vkGetSwapchainStatusKHR"); + PFN_vkSetDeviceMemoryPriorityEXT pfn_vkSetDeviceMemoryPriority = inst.load("vkSetDeviceMemoryPriorityEXT"); + handle_assert_has_value(pfn_vkTrimCommandPool); + handle_assert_has_value(pfn_vkGetSwapchainStatus); + handle_assert_has_value(pfn_vkSetDeviceMemoryPriority); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + + // Query again after create device to make sure the value returned by vkGetInstanceProcAddr did not change + PFN_vkTrimCommandPoolKHR pfn_vkTrimCommandPool2 = inst.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_vkGetSwapchainStatus2 = inst.load("vkGetSwapchainStatusKHR"); + PFN_vkSetDeviceMemoryPriorityEXT pfn_vkSetDeviceMemoryPriority2 = inst.load("vkSetDeviceMemoryPriorityEXT"); + ASSERT_EQ(pfn_vkTrimCommandPool, pfn_vkTrimCommandPool2); + ASSERT_EQ(pfn_vkGetSwapchainStatus, pfn_vkGetSwapchainStatus2); + ASSERT_EQ(pfn_vkSetDeviceMemoryPriority, pfn_vkSetDeviceMemoryPriority2); + + // Make sure all the function pointers returned by vkGetDeviceProcAddr for non-enabled extensions are NULL + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkSetDeviceMemoryPriorityEXT")); + + // Even though the instance functions returned are non-NULL. They should not work if we haven't enabled the extensions. + ASSERT_DEATH(pfn_vkTrimCommandPool(dev.dev, VK_NULL_HANDLE, 0), ""); + ASSERT_DEATH(pfn_vkGetSwapchainStatus(dev.dev, VK_NULL_HANDLE), ""); + ASSERT_DEATH(pfn_vkSetDeviceMemoryPriority(dev.dev, VK_NULL_HANDLE, 0.f), ""); +} + +TEST(LayerExtensions, ImplicitMaintenanceDeviceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_1) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var)), + "implicit_wrap_layer_maint.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 1); + ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME); + dev.CheckCreate(phys_dev); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); +} + +TEST(LayerExtensions, ImplicitPresentImageDeviceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_2) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var)), + "implicit_wrap_layer_pres.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 1); + ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME); + dev.CheckCreate(phys_dev); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); +} + +TEST(LayerExtensions, ImplicitBothDeviceExtensions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + const char* enable_env_var = "ENABLE_ME"; + const char* disable_env_var = "DISABLE_ME"; + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .set_disable_environment(disable_env_var) + .set_enable_environment(enable_env_var)), + "implicit_wrap_layer_both_dev.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); + + // set enable env-var, layer should load + EnvVarWrapper wrap_enable_env_var{enable_env_var, "1"}; + CheckLogForLayerString(env, implicit_layer_name, true); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 2); + ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)); + ASSERT_TRUE(string_eq(device_extensions.at(1).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME).add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME); + dev.CheckCreate(phys_dev); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); +} + +TEST(LayerExtensions, ExplicitNoAdditionalDeviceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), + "explicit_wrap_layer_no_ext.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + ASSERT_NO_FATAL_FAILURE(inst.EnumerateDeviceExtensions(phys_dev, 0)); + ASSERT_NO_FATAL_FAILURE(inst.EnumerateLayerDeviceExtensions(phys_dev, explicit_layer_name, 0)); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + + // Make sure all the function pointers are NULL as well + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkSetDeviceMemoryPriorityEXT")); +} + +TEST(LayerExtensions, ExplicitMaintenanceDeviceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_1) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0)) + .add_device_extension({VK_KHR_MAINTENANCE1_EXTENSION_NAME, 1, {"vkTrimCommandPoolKHR"}})), + "explicit_wrap_layer_maint.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + ASSERT_NO_FATAL_FAILURE(inst.EnumerateDeviceExtensions(phys_dev, 0)); + auto layer_extensions = inst.EnumerateLayerDeviceExtensions(phys_dev, explicit_layer_name, 1); + ASSERT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME); + dev.CheckCreate(phys_dev); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); +} + +TEST(LayerExtensions, ExplicitPresentImageDeviceExtension) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0)) + .add_device_extension({VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, 1, {"vkGetSwapchainStatusKHR"}})), + "explicit_wrap_layer_pres.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + ASSERT_NO_FATAL_FAILURE(inst.EnumerateDeviceExtensions(phys_dev, 0)); + auto layer_extensions = inst.EnumerateLayerDeviceExtensions(phys_dev, explicit_layer_name, 1); + ASSERT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME); + dev.CheckCreate(phys_dev); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_null(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkGetSwapchainStatusKHR")); +} + +TEST(LayerExtensions, ExplicitBothDeviceExtensions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0)) + .add_device_extension({VK_KHR_MAINTENANCE1_EXTENSION_NAME, 1, {"vkTrimCommandPoolKHR"}}) + .add_device_extension({VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, 1, {"vkGetSwapchainStatusKHR"}})), + "explicit_wrap_layer_both_dev.json"); + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + handle_assert_has_value(phys_dev); + + ASSERT_NO_FATAL_FAILURE(inst.EnumerateDeviceExtensions(phys_dev, 0)); + auto layer_extensions = inst.EnumerateLayerDeviceExtensions(phys_dev, explicit_layer_name, 2); + ASSERT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)); + ASSERT_TRUE(string_eq(layer_extensions.at(1).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME).add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME); + dev.CheckCreate(phys_dev); + + // Make sure only the appropriate function pointers are NULL as well + handle_assert_has_value(dev->vkGetDeviceProcAddr(dev.dev, "vkTrimCommandPoolKHR")); + + PFN_vkGetSwapchainStatusKHR gipa_pfnGetSwapchainStatusKHR = inst.load("vkGetSwapchainStatusKHR"); + PFN_vkGetSwapchainStatusKHR gdpa_pfnGetSwapchainStatusKHR = dev.load("vkGetSwapchainStatusKHR"); + handle_assert_has_value(gipa_pfnGetSwapchainStatusKHR); + handle_assert_has_value(gdpa_pfnGetSwapchainStatusKHR); + + // Make sure both versions (from vkGetInstanceProcAddr and vkGetDeviceProcAddr) return the same value. + ASSERT_EQ(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, gipa_pfnGetSwapchainStatusKHR(dev.dev, VK_NULL_HANDLE)); + ASSERT_EQ(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, gdpa_pfnGetSwapchainStatusKHR(dev.dev, VK_NULL_HANDLE)); +} + +TEST(TestLayers, ExplicitlyEnableImplicitLayer) { + FrameworkEnvironment env; + uint32_t api_version = VK_API_VERSION_1_2; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version)) + .set_icd_api_version(api_version) + .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish()); + + const char* regular_layer_name = "VK_LAYER_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .set_disable_environment("DisableMeIfYouCan")), + "regular_test_layer.json"); + { // 1.1 instance + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(regular_layer_name); + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } + { // 1.2 instance + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(regular_layer_name); + inst.create_info.set_api_version(1, 2, 0); + inst.CheckCreate(); + inst.GetActiveLayers(inst.GetPhysDev(), 1); + } +} + +TEST(TestLayers, NewerInstanceVersionThanImplicitLayer) { + FrameworkEnvironment env; + uint32_t api_version = VK_API_VERSION_1_2; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version)) + .set_icd_api_version(api_version) + .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish()); + + const char* regular_layer_name = "VK_LAYER_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .set_disable_environment("DisableMeIfYouCan")), + "regular_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + } + { // 1.1 instance - should find the implicit layer + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + EXPECT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + env.debug_log.clear(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } + { // 1.2 instance -- instance layer should be found + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 2, 0); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + EXPECT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + regular_layer_name)); + env.debug_log.clear(); + + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } +} + +TEST(TestLayers, ImplicitLayerPre10APIVersion) { + FrameworkEnvironment env; + uint32_t api_version = VK_API_VERSION_1_2; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version)) + .set_icd_api_version(api_version) + .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish()); + + const char* regular_layer_name = "VK_LAYER_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 0, 1, 0)) + .set_disable_environment("DisableMeIfYouCan")), + "regular_test_layer.json"); + { // global functions + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props[0].layerName, regular_layer_name)); + } + { // 1.0 instance + DebugUtilsLogger log; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 0, 0); + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + EXPECT_TRUE(log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } + { // 1.1 instance + DebugUtilsLogger log; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + EXPECT_TRUE(log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } + { // 1.2 instance + DebugUtilsLogger log; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 2, 0); + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + EXPECT_TRUE(log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } + { // application sets its API version to 0 + DebugUtilsLogger log; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(0); + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + EXPECT_TRUE(log.find(std::string("Insert instance layer \"") + regular_layer_name)); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(regular_layer_name, layer_props.at(0).layerName)); + } +} + +// Verify that VK_INSTANCE_LAYERS work. To test this, make sure that an explicit layer does not affect an instance until +// it is set with VK_INSTANCE_LAYERS +TEST(TestLayers, InstEnvironEnableExplicitLayer) { + FrameworkEnvironment env; + uint32_t api_version = VK_API_VERSION_1_2; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version)) + .set_icd_api_version(api_version) + .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish()); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0)) + .add_device_extension({VK_KHR_MAINTENANCE1_EXTENSION_NAME, 1, {"vkTrimCommandPoolKHR"}}) + .add_device_extension({VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, 1, {"vkGetSwapchainStatusKHR"}})), + "explicit_wrap_layer_both_dev.json"); + + // First, test an instance/device without the layer forced on. The extensions shouldn't be present and + // the function pointers should be NULL. + InstWrapper inst1{env.vulkan_functions}; + inst1.CheckCreate(); + VkPhysicalDevice phys_dev1 = inst1.GetPhysDev(); + + ASSERT_NO_FATAL_FAILURE(inst1.EnumerateDeviceExtensions(phys_dev1, 0)); + + // Create a device and query the function pointers + DeviceWrapper dev1{inst1}; + dev1.CheckCreate(phys_dev1); + PFN_vkTrimCommandPoolKHR pfn_TrimCommandPoolBefore = dev1.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_GetSwapchainStatusBefore = dev1.load("vkGetSwapchainStatusKHR"); + handle_assert_null(pfn_TrimCommandPoolBefore); + handle_assert_null(pfn_GetSwapchainStatusBefore); + + // Now setup the instance layer + EnvVarWrapper instance_layers_env_var{"VK_INSTANCE_LAYERS", explicit_layer_name}; + + // Now, test an instance/device with the layer forced on. The extensions should be present and + // the function pointers should be valid. + InstWrapper inst2{env.vulkan_functions}; + inst2.CheckCreate(); + VkPhysicalDevice phys_dev2 = inst2.GetPhysDev(); + + auto layer_extensions = inst2.EnumerateLayerDeviceExtensions(phys_dev2, explicit_layer_name, 2); + ASSERT_TRUE(string_eq(layer_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)); + ASSERT_TRUE(string_eq(layer_extensions.at(1).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)); + + DeviceWrapper dev2{inst2}; + dev2.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME) + .add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME); + dev2.CheckCreate(phys_dev2); + + PFN_vkTrimCommandPoolKHR pfn_TrimCommandPoolAfter = dev2.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_GetSwapchainStatusAfter = dev2.load("vkGetSwapchainStatusKHR"); + handle_assert_has_value(pfn_TrimCommandPoolAfter); + handle_assert_has_value(pfn_GetSwapchainStatusAfter); + + ASSERT_EQ(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, pfn_GetSwapchainStatusAfter(dev2.dev, VK_NULL_HANDLE)); +} + +// Verify that VK_LOADER_LAYERS_ENABLE work. To test this, make sure that an explicit layer does not affect an instance until +// it is set with VK_LOADER_LAYERS_ENABLE +TEST(TestLayers, EnvironLayerEnableExplicitLayer) { + FrameworkEnvironment env; + uint32_t api_version = VK_API_VERSION_1_2; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version)) + .set_icd_api_version(api_version) + .add_physical_device(PhysicalDevice{}); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_1); + + const char* explicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* explicit_json_name_2 = "Second_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_2); + + const char* explicit_layer_name_3 = "VK_LAYER_LUNARG_second_test_layer"; + const char* explicit_json_name_3 = "second_test_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_3) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_3); + + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE"}; + + // First, test an instance/device without the layer forced on. + InstWrapper inst1{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + inst1.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Now force on one layer with its full name + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value(explicit_layer_name_1); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + inst2.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match prefix + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("VK_LAYER_LUNARG_*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + inst3.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match suffix + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("*Second_layer"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + inst4.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match substring + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + inst5.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with star '*' + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + inst6.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with special name + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value("~all~"); + + InstWrapper inst7{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + inst7.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); +} + +// Verify that VK_LOADER_LAYERS_DISABLE work. To test this, make sure that an explicit layer does not affect an instance until +// it is set with VK_LOADER_LAYERS_DISABLE +TEST(TestLayers, EnvironLayerDisableExplicitLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2) + .add_physical_device(PhysicalDevice{}); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_1); + + const char* explicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* explicit_json_name_2 = "Second_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_2); + + const char* explicit_layer_name_3 = "VK_LAYER_LUNARG_Second_test_layer"; + const char* explicit_json_name_3 = "Second_test_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_3) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_3); + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + + // First, test an instance/device without the layer forced on. + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst1.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Now force on one layer with its full name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value(explicit_layer_name_1); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst2.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match prefix + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("VK_LAYER_LUNARG_*"); + + InstWrapper inst3{env.vulkan_functions}; + inst3.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst3.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match suffix + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*Second_layer"); + + InstWrapper inst4{env.vulkan_functions}; + inst4.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst4.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match substring + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*Second*"); + + InstWrapper inst5{env.vulkan_functions}; + inst5.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst5.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with star '*' + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*"); + + InstWrapper inst6{env.vulkan_functions}; + inst6.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst6.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match all with special name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~all~"); + + InstWrapper inst7{env.vulkan_functions}; + inst7.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst7.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Match explicit special name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~explicit~"); + + InstWrapper inst8{env.vulkan_functions}; + inst8.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst8.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst8.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // No match implicit special name + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~implicit~"); + + InstWrapper inst9{env.vulkan_functions}; + inst9.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst9.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst9.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); +} + +// Verify that VK_LOADER_LAYERS_ENABLE + VK_LOADER_LAYERS_DISABLE work.(results in the layer still being +// enabled) +TEST(TestLayers, EnvironLayerEnableDisableExplicitLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_1); + + const char* explicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* explicit_json_name_2 = "Second_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_2); + + const char* explicit_layer_name_3 = "VK_LAYER_LUNARG_Second_test_layer"; + const char* explicit_json_name_3 = "Second_test_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_3) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_3); + + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE"}; + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + + // First, test an instance/device without the layer forced on. + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst1.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable 2 but enable 1 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*Second*"); + layers_enable_env_var.set_new_value("*test_layer"); + + InstWrapper inst2{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst2.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable all but enable 2 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst3{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst3.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable all but enable 2 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~all~"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst4{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst4.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst4.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable explicit but enable 2 + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~explicit~"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst5{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst5.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst5.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable implicit but enable 2 (should still be everything) + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~implicit~"); + layers_enable_env_var.set_new_value("*Second*"); + + InstWrapper inst6{env.vulkan_functions}; + inst6.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst6.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst6.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); + + // Disable explicit but enable all + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("~explicit~"); + layers_enable_env_var.set_new_value("*"); + + InstWrapper inst7{env.vulkan_functions}; + inst7.create_info.add_layer(explicit_layer_name_1).add_layer(explicit_layer_name_2).add_layer(explicit_layer_name_3); + FillDebugUtilsCreateDetails(inst7.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst7.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_3)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_3, "disabled because name matches filter of env var")); +} + +// Verify that VK_INSTANCE_LAYERS + VK_LOADER_LAYERS_DISABLE work.(results in the layer still being +// enabled) +TEST(TestLayers, EnvironVkInstanceLayersAndDisableFilters) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_1); + + const char* explicit_layer_name_2 = "VK_LAYER_LUNARG_Second_layer"; + const char* explicit_json_name_2 = "Second_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_2); + + EnvVarWrapper layers_enable_env_var{"VK_INSTANCE_LAYERS"}; + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + + // First, test an instance/device without the layer forced on. + InstWrapper inst1{env.vulkan_functions}; + inst1.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst1.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + + // Enable the non-default enabled layer with VK_INSTANCE_LAYERS + // ------------------------------------------ + env.debug_log.clear(); + layers_enable_env_var.set_new_value(explicit_layer_name_2); + + InstWrapper inst2{env.vulkan_functions}; + inst2.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst2.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst2.CheckCreate()); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); + + // Try to disable all + // ------------------------------------------ + env.debug_log.clear(); + layers_disable_env_var.set_new_value("*"); + + InstWrapper inst3{env.vulkan_functions}; + inst3.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst3.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer", explicit_layer_name_2)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_2, "disabled because name matches filter of env var")); +} + +// Verify that layers enabled through VK_INSTANCE_LAYERS which were not found get the proper error message +TEST(TestLayers, NonExistantLayerInVK_INSTANCE_LAYERS) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name = "VK_LAYER_test_layer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + EnvVarWrapper layers_enable_env_var{"VK_INSTANCE_LAYERS", "VK_LAYER_I_dont_exist"}; + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE( + env.debug_log.find("Layer \"VK_LAYER_I_dont_exist\" was not found but was requested by env var VK_INSTANCE_LAYERS!")); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + // Make sure layers that do exist are loaded + env.debug_log.clear(); + layers_enable_env_var.add_to_list(layer_name); + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE( + env.debug_log.find("Layer \"VK_LAYER_I_dont_exist\" was not found but was requested by env var VK_INSTANCE_LAYERS!")); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); + } + // Make sure that if the layer appears twice in the env-var nothing bad happens + env.debug_log.clear(); + layers_enable_env_var.add_to_list("VK_LAYER_I_dont_exist"); + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE( + env.debug_log.find("Layer \"VK_LAYER_I_dont_exist\" was not found but was requested by env var VK_INSTANCE_LAYERS!")); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); + } +} + +// Verify that if the same layer appears twice in VK_INSTANCE_LAYERS nothing bad happens +TEST(TestLayers, DuplicatesInEnvironVK_INSTANCE_LAYERS) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* layer_name = "VK_LAYER_test_layer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + EnvVarWrapper layers_enable_env_var{"VK_INSTANCE_LAYERS"}; + + layers_enable_env_var.add_to_list(layer_name); + layers_enable_env_var.add_to_list(layer_name); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + auto layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); +} + +TEST(TestLayers, AppEnabledExplicitLayerFails) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0))), + explicit_json_name_1); + + env.debug_log.clear(); + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE", explicit_layer_name_1}; + + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + + InstWrapper inst3{env.vulkan_functions}; + inst3.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst3.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst3.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); +} + +TEST(TestLayers, OverrideEnabledExplicitLayerWithDisableFilter) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + explicit_json_name_1); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(explicit_layer_name_1) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + + env.debug_log.clear(); + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE", explicit_layer_name_1}; + + auto layers = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(lunarg_meta_layer_name, layers[0].layerName)); + + { // both override layer and Disable env var + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE( + env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + } + env.debug_log.clear(); + { // Now try to enable the explicit layer as well + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE( + env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + } +} + +TEST(TestLayers, OverrideEnabledExplicitLayerWithDisableFilterForOverrideLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + explicit_json_name_1); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(explicit_layer_name_1) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + + env.debug_log.clear(); + EnvVarWrapper layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE", lunarg_meta_layer_name}; + + auto layers = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(explicit_layer_name_1, layers[0].layerName)); + + { // both override layer and Disable env var + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE( + env.debug_log.find_prefix_then_postfix(lunarg_meta_layer_name, "disabled because name matches filter of env var")); + } + env.debug_log.clear(); + { // Now try to enable the explicit layer as well + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_FALSE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_TRUE( + env.debug_log.find_prefix_then_postfix(lunarg_meta_layer_name, "disabled because name matches filter of env var")); + } +} + +TEST(TestLayers, OverrideBlacklistedLayerWithEnableFilter) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2); + + const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer"; + const char* explicit_json_name_1 = "First_layer.json"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0))), + explicit_json_name_1); + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer(ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_blacklisted_layer(explicit_layer_name_1) + .set_disable_environment("DisableMeIfYouCan")), + "meta_test_layer.json"); + + env.debug_log.clear(); + EnvVarWrapper layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE", explicit_layer_name_1}; + + auto layers = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(explicit_layer_name_1, layers[0].layerName)); + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE( + env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + } + env.debug_log.clear(); + { // Try to enable a blacklisted layer + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name_1); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Insert instance layer ", explicit_layer_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix("Found manifest file", explicit_json_name_1)); + ASSERT_TRUE(env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "forced enabled due to env var")); + ASSERT_FALSE( + env.debug_log.find_prefix_then_postfix(explicit_layer_name_1, "disabled because name matches filter of env var")); + } +} + +// Add a device layer, should not work +TEST(TestLayers, DoNotUseDeviceLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2) + .add_physical_device(PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).finish()); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0)) + .add_device_extension({VK_KHR_MAINTENANCE1_EXTENSION_NAME, 1, {"vkTrimCommandPoolKHR"}}) + .add_device_extension({VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, 1, {"vkGetSwapchainStatusKHR"}})), + "explicit_wrap_layer_both_dev.json"); + + // First, test an instance/device without the layer forced on. The extensions shouldn't be present and + // the function pointers should be NULL. + InstWrapper inst1{env.vulkan_functions}; + inst1.CheckCreate(); + VkPhysicalDevice phys_dev1 = inst1.GetPhysDev(); + + // Make sure the extensions in the layer aren't present + ASSERT_NO_FATAL_FAILURE(inst1.EnumerateDeviceExtensions(phys_dev1, 0)); + + // Create a device and query the function pointers + DeviceWrapper dev1{inst1}; + dev1.CheckCreate(phys_dev1); + PFN_vkTrimCommandPoolKHR pfn_TrimCommandPoolBefore = dev1.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_GetSwapchainStatusBefore = dev1.load("vkGetSwapchainStatusKHR"); + handle_assert_null(pfn_TrimCommandPoolBefore); + handle_assert_null(pfn_GetSwapchainStatusBefore); + + // Now, test an instance/device with the layer forced on. The extensions should be present and + // the function pointers should be valid. + InstWrapper inst2{env.vulkan_functions}; + inst2.CheckCreate(); + VkPhysicalDevice phys_dev2 = inst2.GetPhysDev(); + + // Make sure the extensions in the layer aren't present + ASSERT_NO_FATAL_FAILURE(inst2.EnumerateDeviceExtensions(phys_dev2, 0)); + + DeviceWrapper dev2{inst2}; + dev2.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME) + .add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME) + .add_layer(explicit_layer_name); + dev2.CheckCreate(phys_dev2, VK_ERROR_EXTENSION_NOT_PRESENT); + + DeviceWrapper dev3{inst2}; + dev3.create_info.add_layer(explicit_layer_name); + dev3.CheckCreate(phys_dev2); + + PFN_vkTrimCommandPoolKHR pfn_TrimCommandPoolAfter = dev3.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_GetSwapchainStatusAfter = dev3.load("vkGetSwapchainStatusKHR"); + handle_assert_null(pfn_TrimCommandPoolAfter); + handle_assert_null(pfn_GetSwapchainStatusAfter); +} + +// Make sure that a layer enabled as both an instance and device layer works properly. +TEST(TestLayers, InstanceAndDeviceLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2) + .add_physical_device(PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).finish()); + + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_lib_path(TEST_LAYER_WRAP_OBJECTS_3) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 0, 0)) + .add_device_extension({VK_KHR_MAINTENANCE1_EXTENSION_NAME, 1, {"vkTrimCommandPoolKHR"}}) + .add_device_extension({VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, 1, {"vkGetSwapchainStatusKHR"}})), + "explicit_wrap_layer_both_dev.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME) + .add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME) + .add_layer(explicit_layer_name); + dev.CheckCreate(phys_dev); + + PFN_vkTrimCommandPoolKHR pfn_TrimCommandPoolAfter = dev.load("vkTrimCommandPoolKHR"); + PFN_vkGetSwapchainStatusKHR pfn_GetSwapchainStatusAfter = dev.load("vkGetSwapchainStatusKHR"); + handle_assert_has_value(pfn_TrimCommandPoolAfter); + handle_assert_has_value(pfn_GetSwapchainStatusAfter); + + ASSERT_EQ(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, pfn_GetSwapchainStatusAfter(dev.dev, VK_NULL_HANDLE)); +} + +// Make sure loader does not throw an error for a device layer that is not present +TEST(TestLayers, DeviceLayerNotPresent) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2)) + .set_icd_api_version(VK_API_VERSION_1_2) + .add_physical_device(PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).finish()); + const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects"; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_layer(explicit_layer_name); + dev.CheckCreate(phys_dev); +} + +TEST(LayerPhysDeviceMod, AddPhysicalDevices) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_add_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_ADD_PHYS_DEV")), + "test_layer_add.json"); + + auto& layer = env.get_test_layer(0); + layer.set_add_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_devices = 6; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t dev_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &dev_count, nullptr)); + ASSERT_GT(dev_count, icd_devices); + + auto not_exp_physical_devices = std::vector(icd_devices); + uint32_t returned_phys_dev_count = icd_devices; + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, not_exp_physical_devices.data())); + ASSERT_EQ(icd_devices, returned_phys_dev_count); + + auto physical_devices = std::vector(dev_count); + returned_phys_dev_count = dev_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + ASSERT_EQ(dev_count, returned_phys_dev_count); + + uint32_t diff_count = dev_count - icd_devices; + uint32_t found_incomplete = 0; + uint32_t found_added_count = 0; + for (uint32_t dev = 0; dev < dev_count; ++dev) { + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(physical_devices[dev], &props); + if (string_eq(props.deviceName, "physdev_added_xx")) { + found_added_count++; + } + for (uint32_t incomp = 0; incomp < icd_devices; ++incomp) { + if (not_exp_physical_devices[incomp] == physical_devices[dev]) { + found_incomplete++; + break; + } + } + } + + // We should have added the number of diff items, and the incomplete count should match the number of + // original physical devices. + ASSERT_EQ(found_added_count, diff_count); + ASSERT_EQ(found_incomplete, icd_devices); +} + +TEST(LayerPhysDeviceMod, RemovePhysicalDevices) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_remove_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_REMOVE_PHYS_DEV")), + "test_layer_remove.json"); + + auto& layer = env.get_test_layer(0); + layer.set_remove_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_devices = 6; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t dev_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &dev_count, nullptr)); + ASSERT_LT(dev_count, icd_devices); + + auto physical_devices = std::vector(dev_count); + uint32_t returned_phys_dev_count = dev_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + ASSERT_EQ(dev_count, returned_phys_dev_count); +} + +TEST(LayerPhysDeviceMod, ReorderPhysicalDevices) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_reorder_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_REORDER_PHYS_DEV")), + "test_layer_reorder.json"); + + auto& layer = env.get_test_layer(0); + layer.set_reorder_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_devices = 6; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t dev_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &dev_count, nullptr)); + ASSERT_EQ(dev_count, icd_devices); + + auto physical_devices = std::vector(dev_count); + uint32_t returned_phys_dev_count = dev_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + ASSERT_EQ(dev_count, returned_phys_dev_count); +} + +TEST(LayerPhysDeviceMod, AddRemoveAndReorderPhysicalDevices) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_all_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_ALL_PHYS_DEV")), + "test_layer_all.json"); + + auto& layer = env.get_test_layer(0); + layer.set_add_phys_devs(true).set_remove_phys_devs(true).set_reorder_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_devices = 6; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t dev_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &dev_count, nullptr)); + ASSERT_GT(dev_count, icd_devices); + + auto physical_devices = std::vector(dev_count); + uint32_t returned_phys_dev_count = dev_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + ASSERT_EQ(dev_count, returned_phys_dev_count); + + uint32_t found_added_count = 0; + for (uint32_t dev = 0; dev < dev_count; ++dev) { + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(physical_devices[dev], &props); + if (string_eq(props.deviceName, "physdev_added_xx")) { + found_added_count++; + } + } + + // Should see 2 removed, but 3 added so a diff count of 1 + uint32_t diff_count = dev_count - icd_devices; + ASSERT_EQ(1U, diff_count); + ASSERT_EQ(found_added_count, 3U); +} + +bool GroupsAreTheSame(VkPhysicalDeviceGroupProperties a, VkPhysicalDeviceGroupProperties b) { + if (a.physicalDeviceCount != b.physicalDeviceCount) { + return false; + } + for (uint32_t dev = 0; dev < a.physicalDeviceCount; ++dev) { + if (a.physicalDevices[dev] != b.physicalDevices[dev]) { + return false; + } + } + return true; +} + +TEST(LayerPhysDeviceMod, AddPhysicalDeviceGroups) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_add_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_ADD_PHYS_DEV")), + "test_layer_remove.json"); + + auto& layer = env.get_test_layer(0); + layer.set_add_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_groups = 4; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t grp_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &grp_count, nullptr)); + ASSERT_GT(grp_count, icd_groups); + + auto not_exp_phys_dev_groups = + std::vector(icd_groups, {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + + uint32_t returned_group_count = icd_groups; + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, not_exp_phys_dev_groups.data())); + ASSERT_EQ(icd_groups, returned_group_count); + + auto phys_dev_groups = + std::vector(grp_count, {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + + returned_group_count = grp_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, phys_dev_groups.data())); + ASSERT_EQ(grp_count, returned_group_count); + + uint32_t diff_count = grp_count - icd_groups; + uint32_t found_incomplete = 0; + uint32_t found_added_count = 0; + for (uint32_t grp = 0; grp < grp_count; ++grp) { + // Shortcut, only groups with 1 device could be added in the newly added count + if (1 == phys_dev_groups[grp].physicalDeviceCount) { + for (uint32_t dev = 0; dev < phys_dev_groups[grp].physicalDeviceCount; ++dev) { + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(phys_dev_groups[grp].physicalDevices[dev], &props); + if (string_eq(props.deviceName, "physdev_added_xx")) { + found_added_count++; + } + } + } + for (uint32_t incomp = 0; incomp < icd_groups; ++incomp) { + if (GroupsAreTheSame(not_exp_phys_dev_groups[incomp], phys_dev_groups[grp])) { + found_incomplete++; + break; + } + } + } + + // We should have added the number of diff items, and the incomplete count should match the number of + // original physical devices. + ASSERT_EQ(found_added_count, diff_count); + ASSERT_EQ(found_incomplete, icd_groups); +} + +TEST(LayerPhysDeviceMod, RemovePhysicalDeviceGroups) { + FrameworkEnvironment env; + EnvVarWrapper disable_linux_sort("VK_LOADER_DISABLE_SELECT", "1"); + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_remove_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_REMOVE_PHYS_DEV")), + "test_layer_remove.json"); + + auto& layer = env.get_test_layer(0); + layer.set_remove_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_groups = 3; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t grp_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &grp_count, nullptr)); + ASSERT_EQ(grp_count, icd_groups); + + auto phys_dev_groups = + std::vector(grp_count, {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + + uint32_t returned_group_count = grp_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, phys_dev_groups.data())); + ASSERT_EQ(grp_count, returned_group_count); +} + +TEST(LayerPhysDeviceMod, ReorderPhysicalDeviceGroups) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_reorder_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_REORDER_PHYS_DEV")), + "test_layer_reorder.json"); + + auto& layer = env.get_test_layer(0); + layer.set_reorder_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[2]); + } + const uint32_t icd_groups = 4; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t grp_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &grp_count, nullptr)); + ASSERT_EQ(grp_count, icd_groups); + + auto phys_dev_groups = + std::vector(grp_count, {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + + uint32_t returned_group_count = grp_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, phys_dev_groups.data())); + ASSERT_EQ(grp_count, returned_group_count); +} + +TEST(LayerPhysDeviceMod, AddRemoveAndReorderPhysicalDeviceGroups) { + FrameworkEnvironment env; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_LunarG_all_phys_dev") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_API_VERSION_1_1) + .set_disable_environment("TEST_DISABLE_ALL_PHYS_DEV")), + "test_layer_all.json"); + + auto& layer = env.get_test_layer(0); + layer.set_add_phys_devs(true).set_remove_phys_devs(true).set_reorder_phys_devs(true); + + for (uint32_t icd = 0; icd < 2; ++icd) { + auto& cur_icd = + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_2)).set_icd_api_version(VK_API_VERSION_1_2); + VkPhysicalDeviceProperties properties{}; + properties.apiVersion = VK_API_VERSION_1_2; + properties.vendorID = 0x11000000 + (icd << 6); + for (uint32_t dev = 0; dev < 3; ++dev) { + properties.deviceID = properties.vendorID + dev; + properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + auto dev_name = std::string("physdev_") + std::to_string(icd) + "_" + std::to_string(dev); +#if defined(_WIN32) + strncpy_s(properties.deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, dev_name.c_str(), dev_name.length() + 1); +#else + strncpy(properties.deviceName, dev_name.c_str(), VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +#endif + cur_icd.add_physical_device({}); + cur_icd.physical_devices.back().set_properties(properties); + } + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[0]); + cur_icd.physical_device_groups.back().use_physical_device(cur_icd.physical_devices[1]); + cur_icd.physical_device_groups.emplace_back(cur_icd.physical_devices[2]); + } + const uint32_t icd_groups = 4; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t grp_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &grp_count, nullptr)); + ASSERT_GT(grp_count, icd_groups); + + auto phys_dev_groups = + std::vector(grp_count, {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + + uint32_t returned_group_count = grp_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, phys_dev_groups.data())); + ASSERT_EQ(grp_count, returned_group_count); + + uint32_t diff_count = grp_count - icd_groups; + uint32_t found_added_count = 0; + for (uint32_t grp = 0; grp < grp_count; ++grp) { + // Shortcut, only groups with 1 device could be added in the newly added count + if (1 == phys_dev_groups[grp].physicalDeviceCount) { + for (uint32_t dev = 0; dev < phys_dev_groups[grp].physicalDeviceCount; ++dev) { + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(phys_dev_groups[grp].physicalDevices[dev], &props); + if (string_eq(props.deviceName, "physdev_added_xx")) { + found_added_count++; + } + } + } + } + + // Should see 2 devices removed which should result in 1 group removed and since 3 + // devices were added we should have 3 new groups. So we should have a diff of 2 + // groups and 3 new groups + ASSERT_EQ(2U, diff_count); + ASSERT_EQ(found_added_count, 3U); +} + +TEST(TestLayers, AllowFilterWithExplicitLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* layer_name = "VK_LAYER_test_layer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer_all.json"); + + EnvVarWrapper allow{"VK_LOADER_LAYERS_ALLOW", layer_name}; + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + EnvVarWrapper enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(false))); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +TEST(TestLayers, AllowFilterWithImplicitLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* layer_name = "VK_LAYER_test_layer"; + const char* disable_env_var = "TEST_DISABLE_ENV_VAR"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment(disable_env_var)), + "test_layer_all.json"); + + EnvVarWrapper allow{"VK_LOADER_LAYERS_ALLOW", layer_name}; + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + EnvVarWrapper enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + + env.remove_loader_settings(); + + // Set the disable_environment variable + EnvVarWrapper set_disable_env_var{disable_env_var, "1"}; + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + EnvVarWrapper enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // layer's disable_environment takes priority + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +TEST(TestLayers, AllowFilterWithConditionallyImlicitLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* layer_name = "VK_LAYER_test_layer"; + const char* enable_env_var = "TEST_ENABLE_ENV_VAR"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("TEST_DISABLE_ENV_VAR") + .set_enable_environment(enable_env_var)), + "test_layer_all.json"); + + EnvVarWrapper allow{"VK_LOADER_LAYERS_ALLOW", layer_name}; + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + EnvVarWrapper enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + + env.remove_loader_settings(); + + // Repeate the above tests but with the enable_environment variable set + EnvVarWrapper set_enable_env_var{enable_env_var, "1"}; + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + EnvVarWrapper enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } +} + +TEST(TestLayers, AllowFilterWithConditionallyImlicitLayerWithOverrideLayer) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* layer_name = "VK_LAYER_test_layer"; + const char* enable_env_var = "TEST_ENABLE_ENV_VAR"; + env.add_implicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_api_version(VK_API_VERSION_1_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("TEST_DISABLE_ENV_VAR") + .set_enable_environment(enable_env_var)), + "test_layer_all.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 2, 0}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(lunarg_meta_layer_name) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)) + .add_component_layer(layer_name) + .set_disable_environment("DisableMeIfYouCan") + .add_override_path(env.get_folder(ManifestLocation::override_layer).location().string())), + "meta_test_layer.json"); + + EnvVarWrapper allow{"VK_LOADER_LAYERS_ALLOW", layer_name}; + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, lunarg_meta_layer_name)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, lunarg_meta_layer_name)); + } + { + EnvVarWrapper disable{"VK_LOADER_LAYERS_DISABLE", layer_name}; + EnvVarWrapper enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, lunarg_meta_layer_name)); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, lunarg_meta_layer_name)); + } + { + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + { + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_phys_dev_inst_ext_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_phys_dev_inst_ext_tests.cpp new file mode 100644 index 0000000000..00c1eaf4c5 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_phys_dev_inst_ext_tests.cpp @@ -0,0 +1,5619 @@ +/* + * Copyright (c) 2021-2022 The Khronos Group Inc. + * Copyright (c) 2021-2022 Valve Corporation + * Copyright (c) 2021-2022 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + * Author: Mark Young + */ + +#include "test_environment.h" + +// These tests are all instance extension tests that touch physical devices. This was +// before the idea that physical device extensions were more appropriately found in the +// list of device extensions. Because of that, all these tests need to support devices +// that don't support the extension and have a fallback path in the loader that needs +// validation. + +// Fill in random but valid data into the device properties struct for the current physical device +void FillInRandomICDInfo(uint32_t& vendor_id, uint32_t& driver_vers) { + vendor_id = VK_MAKE_API_VERSION(0, rand() % 64, rand() % 255, rand() % 255); + driver_vers = VK_MAKE_API_VERSION(0, rand() % 64, rand() % 255, rand() % 255); +} + +// Fill in random but valid data into the device properties struct for the current physical device +void FillInRandomDeviceProps(VkPhysicalDeviceProperties& props, uint32_t api_vers, uint32_t vendor, uint32_t driver_vers) { + props.apiVersion = api_vers; + props.driverVersion = driver_vers; + props.vendorID = vendor; + props.deviceID = (static_cast(rand()) >> 4) + (static_cast(rand()) << 2); + props.deviceType = static_cast(rand() % 5); + for (uint8_t idx = 0; idx < VK_UUID_SIZE; ++idx) { + props.pipelineCacheUUID[idx] = static_cast(rand() % 255); + } +} + +// +// VK_KHR_get_physical_device_properties2 +// + +// Test vkGetPhysicalDeviceProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2KHR GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2KHR"); + ASSERT_EQ(GetPhysDevProps2, nullptr); +} + +// Test vkGetPhysicalDeviceProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevProps2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceProperties2KHR GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2KHR"); + ASSERT_EQ(GetPhysDevProps2, nullptr); +} + +// Test vkGetPhysicalDeviceProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_API_VERSION_1_0, 5, 123); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2KHR GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2KHR"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_device, &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR}; + GetPhysDevProps2(physical_device, &props2); + + // Both properties should match + ASSERT_EQ(props.apiVersion, props2.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2.properties.vendorID); + ASSERT_EQ(props.deviceID, props2.properties.deviceID); + ASSERT_EQ(props.deviceType, props2.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2.properties.pipelineCacheUUID, VK_UUID_SIZE)); +} + +// Test vkGetPhysicalDeviceProperties2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_1)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_API_VERSION_1_1, 5, 123); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_device, &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR}; + GetPhysDevProps2(physical_device, &props2); + + // Both properties should match + ASSERT_EQ(props.apiVersion, props2.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2.properties.vendorID); + ASSERT_EQ(props.deviceID, props2.properties.deviceID); + ASSERT_EQ(props.deviceType, props2.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2.properties.pipelineCacheUUID, VK_UUID_SIZE)); + } + + { // Do the same logic but have the application forget to use 1.1 and doesn't enable the extension - should emulate the call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_device, &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR}; + GetPhysDevProps2(physical_device, &props2); + + // Both properties should match + ASSERT_EQ(props.apiVersion, props2.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2.properties.vendorID); + ASSERT_EQ(props.deviceID, props2.properties.deviceID); + ASSERT_EQ(props.deviceType, props2.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2.properties.pipelineCacheUUID, VK_UUID_SIZE)); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_device, &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR}; + GetPhysDevProps2(physical_device, &props2); + + // Both properties should match + ASSERT_EQ(props.apiVersion, props2.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2.properties.vendorID); + ASSERT_EQ(props.deviceID, props2.properties.deviceID); + ASSERT_EQ(props.deviceType, props2.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2.properties.pipelineCacheUUID, VK_UUID_SIZE)); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceProperties2 and vkGetPhysicalDeviceProperties2KHR where ICD is 1.0 and supports +// extension but the instance supports 1.1 and the extension +TEST(LoaderInstPhysDevExts, PhysDevProps2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_0)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_API_VERSION_1_0, 5, 123); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2KHR = instance.load("vkGetPhysicalDeviceProperties2KHR"); + ASSERT_NE(GetPhysDevProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_device, &props); + VkPhysicalDeviceProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + GetPhysDevProps2(physical_device, &props2); + + // Both VkPhysicalDeviceProperties2 properties should match + ASSERT_EQ(props.apiVersion, props2.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2.properties.vendorID); + ASSERT_EQ(props.deviceID, props2.properties.deviceID); + ASSERT_EQ(props.deviceType, props2.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2.properties.pipelineCacheUUID, VK_UUID_SIZE)); + + VkPhysicalDeviceProperties2KHR props2KHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR}; + GetPhysDevProps2(physical_device, &props2KHR); + + // Both VkPhysicalDeviceProperties2KHR properties should match + ASSERT_EQ(props.apiVersion, props2KHR.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2KHR.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2KHR.properties.vendorID); + ASSERT_EQ(props.deviceID, props2KHR.properties.deviceID); + ASSERT_EQ(props.deviceType, props2KHR.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2KHR.properties.pipelineCacheUUID, VK_UUID_SIZE)); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} + +// Test vkGetPhysicalDeviceProperties2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevProps2Mixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + GetPhysDevProps2(physical_devices[dev], &props2); + + // Both properties should match + ASSERT_EQ(props.apiVersion, props2.properties.apiVersion); + ASSERT_EQ(props.driverVersion, props2.properties.driverVersion); + ASSERT_EQ(props.vendorID, props2.properties.vendorID); + ASSERT_EQ(props.deviceID, props2.properties.deviceID); + ASSERT_EQ(props.deviceType, props2.properties.deviceType); + ASSERT_EQ(0, memcmp(props.pipelineCacheUUID, props2.properties.pipelineCacheUUID, VK_UUID_SIZE)); + } +} + +// Fill in random but valid data into the features struct for the current physical device +void FillInRandomFeatures(VkPhysicalDeviceFeatures& feats) { + feats.robustBufferAccess = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.fullDrawIndexUint32 = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.imageCubeArray = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.independentBlend = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.geometryShader = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.tessellationShader = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sampleRateShading = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.dualSrcBlend = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.logicOp = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.multiDrawIndirect = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.drawIndirectFirstInstance = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.depthClamp = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.depthBiasClamp = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.fillModeNonSolid = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.depthBounds = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.wideLines = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.largePoints = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.alphaToOne = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.multiViewport = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.samplerAnisotropy = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.textureCompressionETC2 = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.textureCompressionASTC_LDR = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.textureCompressionBC = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.occlusionQueryPrecise = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.pipelineStatisticsQuery = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.vertexPipelineStoresAndAtomics = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.fragmentStoresAndAtomics = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderTessellationAndGeometryPointSize = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderImageGatherExtended = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderStorageImageExtendedFormats = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderStorageImageMultisample = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderStorageImageReadWithoutFormat = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderStorageImageWriteWithoutFormat = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderUniformBufferArrayDynamicIndexing = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderSampledImageArrayDynamicIndexing = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderStorageBufferArrayDynamicIndexing = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderStorageImageArrayDynamicIndexing = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderClipDistance = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderCullDistance = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderFloat64 = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderInt64 = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderInt16 = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderResourceResidency = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.shaderResourceMinLod = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseBinding = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidencyBuffer = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidencyImage2D = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidencyImage3D = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidency2Samples = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidency4Samples = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidency8Samples = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidency16Samples = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.sparseResidencyAliased = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.variableMultisampleRate = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; + feats.inheritedQueries = (rand() % 2) == 0 ? VK_FALSE : VK_TRUE; +} + +// Test vkGetPhysicalDeviceFeatures2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevFeats2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysDevFeats2KHR = instance.load("vkGetPhysicalDeviceFeatures2KHR"); + ASSERT_EQ(GetPhysDevFeats2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceFeatures2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevFeatsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysDevFeats2KHR = instance.load("vkGetPhysicalDeviceFeatures2KHR"); + ASSERT_EQ(GetPhysDevFeats2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceFeatures2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevFeats2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomFeatures(env.get_test_icd(0).physical_devices.back().features); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysDevFeats2KHR = instance.load("vkGetPhysicalDeviceFeatures2KHR"); + ASSERT_NE(GetPhysDevFeats2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceFeatures feats{}; + instance->vkGetPhysicalDeviceFeatures(physical_device, &feats); + VkPhysicalDeviceFeatures2 feats2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR}; + GetPhysDevFeats2KHR(physical_device, &feats2); + ASSERT_EQ(feats, feats2); +} + +// Test vkGetPhysicalDeviceFeatures2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevFeats2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_1)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + env.get_test_icd(0).physical_devices.back().set_api_version(VK_API_VERSION_1_1); + FillInRandomFeatures(env.get_test_icd(0).physical_devices.back().features); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFeatures2 GetPhysDevFeats2 = instance.load("vkGetPhysicalDeviceFeatures2"); + ASSERT_NE(GetPhysDevFeats2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceFeatures feats{}; + instance->vkGetPhysicalDeviceFeatures(physical_device, &feats); + VkPhysicalDeviceFeatures2 feats2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + GetPhysDevFeats2(physical_device, &feats2); + ASSERT_EQ(feats, feats2); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFeatures2 GetPhysDevFeats2 = instance.load("vkGetPhysicalDeviceFeatures2"); + ASSERT_NE(GetPhysDevFeats2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceFeatures feats{}; + instance->vkGetPhysicalDeviceFeatures(physical_device, &feats); + VkPhysicalDeviceFeatures2 feats2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + GetPhysDevFeats2(physical_device, &feats2); + ASSERT_EQ(feats, feats2); + + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFeatures2 GetPhysDevFeats2 = instance.load("vkGetPhysicalDeviceFeatures2"); + ASSERT_NE(GetPhysDevFeats2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceFeatures feats{}; + instance->vkGetPhysicalDeviceFeatures(physical_device, &feats); + VkPhysicalDeviceFeatures2 feats2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + GetPhysDevFeats2(physical_device, &feats2); + ASSERT_EQ(feats, feats2); + + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceFeatures2 and vkGetPhysicalDeviceFeatures2KHR where ICD is 1.0 and supports +// extension but the instance supports 1.1 and the extension +TEST(LoaderInstPhysDevExts, PhysDevFeats2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_0)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomFeatures(env.get_test_icd(0).physical_devices.back().features); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysDevFeats2KHR = instance.load("vkGetPhysicalDeviceFeatures2KHR"); + ASSERT_NE(GetPhysDevFeats2KHR, nullptr); + + PFN_vkGetPhysicalDeviceFeatures2 GetPhysDevFeats2 = instance.load("vkGetPhysicalDeviceFeatures2"); + ASSERT_NE(GetPhysDevFeats2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceFeatures feats{}; + instance->vkGetPhysicalDeviceFeatures(physical_device, &feats); + + VkPhysicalDeviceFeatures2KHR feats2KHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR}; + GetPhysDevFeats2KHR(physical_device, &feats2KHR); + ASSERT_EQ(feats, feats2KHR); + + VkPhysicalDeviceFeatures2 feats2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + GetPhysDevFeats2(physical_device, &feats2); + ASSERT_EQ(feats, feats2); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} + +// Test vkGetPhysicalDeviceFeatures2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevFeatsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomFeatures(cur_dev.features); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFeatures2 GetPhysDevFeats2 = instance.load("vkGetPhysicalDeviceFeatures2"); + ASSERT_NE(GetPhysDevFeats2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceFeatures feats{}; + instance->vkGetPhysicalDeviceFeatures(physical_devices[dev], &feats); + VkPhysicalDeviceFeatures2 feats2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; + GetPhysDevFeats2(physical_devices[dev], &feats2); + ASSERT_EQ(feats, feats2); + } +} + +// Fill in random but valid data into the format properties struct for the current physical device +void FillInRandomFormatProperties(std::vector& props) { + props.resize(5); + for (uint8_t form = 0; form < 5; ++form) { + props[form].bufferFeatures = static_cast(rand()); + props[form].linearTilingFeatures = static_cast(rand()); + props[form].optimalTilingFeatures = static_cast(rand()); + } +} + +// Test vkGetPhysicalDeviceFormatProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevFormatProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysDevFormatProps2KHR = + instance.load("vkGetPhysicalDeviceFormatProperties2KHR"); + ASSERT_EQ(GetPhysDevFormatProps2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceFormatProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevFormatPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysDevFormatProps2KHR = + instance.load("vkGetPhysicalDeviceFormatProperties2KHR"); + ASSERT_EQ(GetPhysDevFormatProps2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceFormatProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevFormatProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomFormatProperties(env.get_test_icd(0).physical_devices.back().format_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysDevFormatProps2KHR = + instance.load("vkGetPhysicalDeviceFormatProperties2KHR"); + ASSERT_NE(GetPhysDevFormatProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkFormatProperties props{}; + instance->vkGetPhysicalDeviceFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props); + VkFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2KHR(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props2); + + ASSERT_EQ(props.bufferFeatures, props2.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2.formatProperties.optimalTilingFeatures); +} + +// Test vkGetPhysicalDeviceFormatProperties2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevFormatProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_1)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + env.get_test_icd(0).physical_devices.back().set_api_version(VK_API_VERSION_1_1); + FillInRandomFormatProperties(env.get_test_icd(0).physical_devices.back().format_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysDevFormatProps2 = instance.load("vkGetPhysicalDeviceFormatProperties2"); + ASSERT_NE(GetPhysDevFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkFormatProperties props{}; + instance->vkGetPhysicalDeviceFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props); + VkFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props2); + + ASSERT_EQ(props.bufferFeatures, props2.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2.formatProperties.optimalTilingFeatures); + } + { // Do the same logic but have the application forget to enable 1.1 and doesn't enable the extension + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysDevFormatProps2 = instance.load("vkGetPhysicalDeviceFormatProperties2"); + ASSERT_NE(GetPhysDevFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkFormatProperties props{}; + instance->vkGetPhysicalDeviceFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props); + VkFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props2); + + ASSERT_EQ(props.bufferFeatures, props2.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2.formatProperties.optimalTilingFeatures); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysDevFormatProps2 = instance.load("vkGetPhysicalDeviceFormatProperties2"); + ASSERT_NE(GetPhysDevFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkFormatProperties props{}; + instance->vkGetPhysicalDeviceFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props); + VkFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props2); + + ASSERT_EQ(props.bufferFeatures, props2.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2.formatProperties.optimalTilingFeatures); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} +// Test vkGetPhysicalDeviceFormatProperties2 and vkGetPhysicalDeviceFormatProperties2KHR where ICD is 1.0 and supports +// extension but the instance supports 1.1 and the extension +TEST(LoaderInstPhysDevExts, PhysDevFormatProps2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomFormatProperties(env.get_test_icd(0).physical_devices.back().format_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysDevFormatProps2 = instance.load("vkGetPhysicalDeviceFormatProperties2"); + ASSERT_NE(GetPhysDevFormatProps2, nullptr); + + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysDevFormatProps2KHR = + instance.load("vkGetPhysicalDeviceFormatProperties2KHR"); + ASSERT_NE(GetPhysDevFormatProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkFormatProperties props{}; + instance->vkGetPhysicalDeviceFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props); + VkFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props2); + + ASSERT_EQ(props.bufferFeatures, props2.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2.formatProperties.optimalTilingFeatures); + + VkFormatProperties2KHR props2KHR{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2KHR(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, &props2KHR); + + ASSERT_EQ(props.bufferFeatures, props2KHR.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2KHR.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2KHR.formatProperties.optimalTilingFeatures); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} + +// Test vkGetPhysicalDeviceFormatProperties2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevFormatPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomFormatProperties(cur_dev.format_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysDevFormatProps2 = instance.load("vkGetPhysicalDeviceFormatProperties2"); + ASSERT_NE(GetPhysDevFormatProps2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkFormat format = static_cast((dev + 1) % 5); + VkFormatProperties props{}; + instance->vkGetPhysicalDeviceFormatProperties(physical_devices[dev], format, &props); + VkFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + GetPhysDevFormatProps2(physical_devices[dev], format, &props2); + + ASSERT_EQ(props.bufferFeatures, props2.formatProperties.bufferFeatures); + ASSERT_EQ(props.linearTilingFeatures, props2.formatProperties.linearTilingFeatures); + ASSERT_EQ(props.optimalTilingFeatures, props2.formatProperties.optimalTilingFeatures); + } +} + +// Fill in random but valid data into the image format data struct for the current physical device +void FillInRandomImageFormatData(VkImageFormatProperties& props) { + props.maxExtent = {static_cast(rand() % 512), static_cast(rand() % 512), + static_cast(rand() % 512)}; + props.maxMipLevels = static_cast(1 << (rand() % 16)); + props.maxArrayLayers = static_cast(1 << (rand() % 16)); + props.sampleCounts = static_cast(1 << (rand() % 7)); + props.maxResourceSize = static_cast(rand()); +} + +// Test vkGetPhysicalDeviceImageFormatProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevImageFormatProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysDevImageFormatProps2 = + instance.load("vkGetPhysicalDeviceImageFormatProperties2KHR"); + ASSERT_EQ(GetPhysDevImageFormatProps2, nullptr); +} + +// Test vkGetPhysicalDeviceImageFormatProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevImageFormatPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysDevImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceImageFormatProperties2KHR"); + ASSERT_EQ(GetPhysDevImageFormatProps2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceImageFormatProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevImageFormatProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomImageFormatData(env.get_test_icd(0).physical_devices.back().image_format_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysDevImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceImageFormatProperties2KHR"); + ASSERT_NE(GetPhysDevImageFormatProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkImageFormatProperties props{}; + ASSERT_EQ(VK_SUCCESS, + instance->vkGetPhysicalDeviceImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_IMAGE_TILING_OPTIMAL, 0, 0, &props)); + + VkPhysicalDeviceImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_IMAGE_TILING_OPTIMAL, // tiling + 0, // usage + 0, // flags + }; + VkImageFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2KHR(physical_device, &info2, &props2)); + + ASSERT_EQ(props.maxExtent.width, props2.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2.imageFormatProperties.maxResourceSize); +} + +// Test vkGetPhysicalDeviceImageFormatProperties2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevImageFormatProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomImageFormatData(env.get_test_icd(0).physical_devices.back().image_format_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysDevImageFormatProps2 = + instance.load("vkGetPhysicalDeviceImageFormatProperties2"); + ASSERT_NE(GetPhysDevImageFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkImageFormatProperties props{}; + ASSERT_EQ(VK_SUCCESS, + instance->vkGetPhysicalDeviceImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_IMAGE_TILING_OPTIMAL, 0, 0, &props)); + + VkPhysicalDeviceImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_IMAGE_TILING_OPTIMAL, // tiling + 0, // usage + 0, // flags + }; + + VkImageFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2(physical_device, &info2, &props2)); + + ASSERT_EQ(props.maxExtent.width, props2.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2.imageFormatProperties.maxResourceSize); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysDevImageFormatProps2 = + instance.load("vkGetPhysicalDeviceImageFormatProperties2"); + ASSERT_NE(GetPhysDevImageFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkImageFormatProperties props{}; + ASSERT_EQ(VK_SUCCESS, + instance->vkGetPhysicalDeviceImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_IMAGE_TILING_OPTIMAL, 0, 0, &props)); + + VkPhysicalDeviceImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_IMAGE_TILING_OPTIMAL, // tiling + 0, // usage + 0, // flags + }; + + VkImageFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2(physical_device, &info2, &props2)); + + ASSERT_EQ(props.maxExtent.width, props2.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2.imageFormatProperties.maxResourceSize); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysDevImageFormatProps2 = + instance.load("vkGetPhysicalDeviceImageFormatProperties2"); + ASSERT_NE(GetPhysDevImageFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkImageFormatProperties props{}; + ASSERT_EQ(VK_SUCCESS, + instance->vkGetPhysicalDeviceImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_IMAGE_TILING_OPTIMAL, 0, 0, &props)); + + VkPhysicalDeviceImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_IMAGE_TILING_OPTIMAL, // tiling + 0, // usage + 0, // flags + }; + + VkImageFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2(physical_device, &info2, &props2)); + + ASSERT_EQ(props.maxExtent.width, props2.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2.imageFormatProperties.maxResourceSize); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceImageFormatProperties2 and vkGetPhysicalDeviceImageFormatProperties2KHR where instance supports, an ICD, +// and a device under that ICD also support, so everything should work and return properly. +TEST(LoaderInstPhysDevExts, PhysDevImageFormatProps2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomImageFormatData(env.get_test_icd(0).physical_devices.back().image_format_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysDevImageFormatProps2 = + instance.load("vkGetPhysicalDeviceImageFormatProperties2"); + ASSERT_NE(GetPhysDevImageFormatProps2, nullptr); + + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysDevImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceImageFormatProperties2KHR"); + ASSERT_NE(GetPhysDevImageFormatProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkImageFormatProperties props{}; + ASSERT_EQ(VK_SUCCESS, + instance->vkGetPhysicalDeviceImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_IMAGE_TILING_OPTIMAL, 0, 0, &props)); + + VkPhysicalDeviceImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_IMAGE_TILING_OPTIMAL, // tiling + 0, // usage + 0, // flags + }; + + VkImageFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2(physical_device, &info2, &props2)); + + ASSERT_EQ(props.maxExtent.width, props2.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2.imageFormatProperties.maxResourceSize); + + VkImageFormatProperties2KHR props2KHR{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2KHR(physical_device, &info2, &props2KHR)); + + ASSERT_EQ(props.maxExtent.width, props2KHR.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2KHR.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2KHR.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2KHR.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2KHR.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2KHR.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2KHR.imageFormatProperties.maxResourceSize); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} + +// Test vkGetPhysicalDeviceImageFormatProperties2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevImageFormatPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomImageFormatData(cur_dev.image_format_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysDevImageFormatProps2 = + instance.load("vkGetPhysicalDeviceImageFormatProperties2"); + ASSERT_NE(GetPhysDevImageFormatProps2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkImageFormatProperties props{}; + ASSERT_EQ(VK_SUCCESS, + instance->vkGetPhysicalDeviceImageFormatProperties(physical_devices[dev], VK_FORMAT_R4G4_UNORM_PACK8, + VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_OPTIMAL, 0, 0, &props)); + + VkPhysicalDeviceImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_IMAGE_TILING_OPTIMAL, // tiling + 0, // usage + 0, // flags + }; + VkImageFormatProperties2 props2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2}; + ASSERT_EQ(VK_SUCCESS, GetPhysDevImageFormatProps2(physical_devices[dev], &info2, &props2)); + + ASSERT_EQ(props.maxExtent.width, props2.imageFormatProperties.maxExtent.width); + ASSERT_EQ(props.maxExtent.height, props2.imageFormatProperties.maxExtent.height); + ASSERT_EQ(props.maxExtent.depth, props2.imageFormatProperties.maxExtent.depth); + ASSERT_EQ(props.maxMipLevels, props2.imageFormatProperties.maxMipLevels); + ASSERT_EQ(props.maxArrayLayers, props2.imageFormatProperties.maxArrayLayers); + ASSERT_EQ(props.sampleCounts, props2.imageFormatProperties.sampleCounts); + ASSERT_EQ(props.maxResourceSize, props2.imageFormatProperties.maxResourceSize); + } +} + +// Test vkGetPhysicalDeviceMemoryProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevMemoryProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysDevMemoryProps2KHR = + instance.load("vkGetPhysicalDeviceMemoryProperties2KHR"); + ASSERT_EQ(GetPhysDevMemoryProps2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceMemoryProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevMemoryPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysDevMemoryProps2KHR = + instance.load("vkGetPhysicalDeviceMemoryProperties2KHR"); + ASSERT_EQ(GetPhysDevMemoryProps2KHR, nullptr); +} + +// Fill in random but valid data into the memory data struct for the current physical device +void FillInRandomMemoryData(VkPhysicalDeviceMemoryProperties& props) { + props.memoryTypeCount = (rand() % 7) + 1; + props.memoryHeapCount = (rand() % 7) + 1; + for (uint32_t i = 0; i < props.memoryHeapCount; ++i) { + props.memoryHeaps[i].size = (rand() % 728) + (rand() % 728) + 1; + props.memoryHeaps[i].flags = (rand() % 2) + 1; + } + for (uint32_t i = 0; i < props.memoryTypeCount; ++i) { + props.memoryTypes[i].propertyFlags = static_cast((rand() % 2) + 1); + props.memoryTypes[i].heapIndex = rand() % props.memoryHeapCount; + } +} + +// Test vkGetPhysicalDeviceMemoryProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevMemoryProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomMemoryData(env.get_test_icd(0).physical_devices.back().memory_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysDevMemoryProps2KHR = + instance.load("vkGetPhysicalDeviceMemoryProperties2KHR"); + ASSERT_NE(GetPhysDevMemoryProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceMemoryProperties props{}; + instance->vkGetPhysicalDeviceMemoryProperties(physical_device, &props); + + VkPhysicalDeviceMemoryProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2}; + GetPhysDevMemoryProps2KHR(physical_device, &props2); + ASSERT_EQ(props, props2); +} + +// Test vkGetPhysicalDeviceMemoryProperties2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevMemoryProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomMemoryData(env.get_test_icd(0).physical_devices.back().memory_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysDevMemoryProps2 = instance.load("vkGetPhysicalDeviceMemoryProperties2"); + ASSERT_NE(GetPhysDevMemoryProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceMemoryProperties props{}; + instance->vkGetPhysicalDeviceMemoryProperties(physical_device, &props); + + VkPhysicalDeviceMemoryProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2}; + GetPhysDevMemoryProps2(physical_device, &props2); + ASSERT_EQ(props, props2); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysDevMemoryProps2 = instance.load("vkGetPhysicalDeviceMemoryProperties2"); + ASSERT_NE(GetPhysDevMemoryProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceMemoryProperties props{}; + instance->vkGetPhysicalDeviceMemoryProperties(physical_device, &props); + + VkPhysicalDeviceMemoryProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2}; + GetPhysDevMemoryProps2(physical_device, &props2); + ASSERT_EQ(props, props2); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysDevMemoryProps2 = instance.load("vkGetPhysicalDeviceMemoryProperties2"); + ASSERT_NE(GetPhysDevMemoryProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceMemoryProperties props{}; + instance->vkGetPhysicalDeviceMemoryProperties(physical_device, &props); + + VkPhysicalDeviceMemoryProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2}; + GetPhysDevMemoryProps2(physical_device, &props2); + ASSERT_EQ(props, props2); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceMemoryProperties2 and vkGetPhysicalDeviceMemoryProperties2KHR where ICD is 1.0 and supports +// extension but the instance supports 1.1 and the extension +TEST(LoaderInstPhysDevExts, PhysDevMemoryProps2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomMemoryData(env.get_test_icd(0).physical_devices.back().memory_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysDevMemoryProps2 = instance.load("vkGetPhysicalDeviceMemoryProperties2"); + ASSERT_NE(GetPhysDevMemoryProps2, nullptr); + + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysDevMemoryProps2KHR = + instance.load("vkGetPhysicalDeviceMemoryProperties2KHR"); + ASSERT_NE(GetPhysDevMemoryProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceMemoryProperties props{}; + instance->vkGetPhysicalDeviceMemoryProperties(physical_device, &props); + + VkPhysicalDeviceMemoryProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2}; + GetPhysDevMemoryProps2(physical_device, &props2); + ASSERT_EQ(props, props2); + + VkPhysicalDeviceMemoryProperties2KHR props2KHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR}; + GetPhysDevMemoryProps2KHR(physical_device, &props2KHR); + ASSERT_EQ(props, props2KHR); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} +// Test vkGetPhysicalDeviceMemoryProperties2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevMemoryPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomMemoryData(cur_dev.memory_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysDevMemoryProps2 = instance.load("vkGetPhysicalDeviceMemoryProperties2"); + ASSERT_NE(GetPhysDevMemoryProps2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceMemoryProperties props{}; + instance->vkGetPhysicalDeviceMemoryProperties(physical_devices[dev], &props); + + VkPhysicalDeviceMemoryProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2}; + GetPhysDevMemoryProps2(physical_devices[dev], &props2); + ASSERT_EQ(props, props2); + } +} + +// Test vkGetPhysicalDeviceQueueFamilyProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevQueueFamilyProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysDevQueueFamilyProps2KHR = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + ASSERT_EQ(GetPhysDevQueueFamilyProps2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceQueueFamilyProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevQueueFamilyPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysDevQueueFamilyProps2KHR = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + ASSERT_EQ(GetPhysDevQueueFamilyProps2KHR, nullptr); +} + +// Fill in random but valid data into the queue family data struct for the current physical device +uint32_t FillInRandomQueueFamilyData(std::vector& props) { + props.resize((rand() % 4) + 1); + for (uint32_t i = 0; i < props.size(); ++i) { + props[i].properties.queueFlags = (rand() % 30) + 1; + props[i].properties.queueCount = (rand() % 7) + 1; + props[i].properties.timestampValidBits = (rand() % 30) + 7; + props[i].properties.minImageTransferGranularity.width = (rand() % 30) + 1; + props[i].properties.minImageTransferGranularity.height = (rand() % 30) + 1; + props[i].properties.minImageTransferGranularity.depth = (rand() % 30) + 1; + props[i].support_present = rand() % 2 == 0; + } + return static_cast(props.size()); +} + +// Test vkGetPhysicalDeviceQueueFamilyProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevQueueFamilyProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + uint32_t num_fam = FillInRandomQueueFamilyData(env.get_test_icd(0).physical_devices.back().queue_family_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysDevQueueFamilyProps2KHR = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + ASSERT_NE(GetPhysDevQueueFamilyProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + uint32_t ret_fam_1 = 0; + std::vector props{}; + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, nullptr); + ASSERT_EQ(num_fam, ret_fam_1); + props.resize(ret_fam_1); + + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, props.data()); + + std::vector props2{}; + uint32_t ret_fam_2 = 0; + GetPhysDevQueueFamilyProps2KHR(physical_device, &ret_fam_2, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2); + props2.resize(ret_fam_2, VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2}); + GetPhysDevQueueFamilyProps2KHR(physical_device, &ret_fam_2, props2.data()); + ASSERT_EQ(props, props2); +} + +// Test vkGetPhysicalDeviceQueueFamilyProperties2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevQueueFamilyProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + uint32_t num_fam = FillInRandomQueueFamilyData(env.get_test_icd(0).physical_devices.back().queue_family_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysDevQueueFamilyProps2 = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2"); + ASSERT_NE(GetPhysDevQueueFamilyProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + uint32_t ret_fam_1 = 0; + std::vector props{}; + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, nullptr); + ASSERT_EQ(num_fam, ret_fam_1); + props.resize(ret_fam_1); + + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, props.data()); + + std::vector props2{}; + uint32_t ret_fam_2 = 0; + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2); + props2.resize(ret_fam_2, VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2}); + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, props2.data()); + ASSERT_EQ(props, props2); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysDevQueueFamilyProps2 = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2"); + ASSERT_NE(GetPhysDevQueueFamilyProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + uint32_t ret_fam_1 = 0; + std::vector props{}; + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, nullptr); + ASSERT_EQ(num_fam, ret_fam_1); + props.resize(ret_fam_1); + + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, props.data()); + + std::vector props2{}; + uint32_t ret_fam_2 = 0; + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2); + props2.resize(ret_fam_2, VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2}); + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, props2.data()); + ASSERT_EQ(props, props2); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysDevQueueFamilyProps2 = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2"); + ASSERT_NE(GetPhysDevQueueFamilyProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + uint32_t ret_fam_1 = 0; + std::vector props{}; + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, nullptr); + ASSERT_EQ(num_fam, ret_fam_1); + props.resize(ret_fam_1); + + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, props.data()); + + std::vector props2{}; + uint32_t ret_fam_2 = 0; + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2); + props2.resize(ret_fam_2, VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2}); + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, props2.data()); + ASSERT_EQ(props, props2); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceQueueFamilyProperties2 and vkGetPhysicalDeviceQueueFamilyProperties2KHR where ICD is 1.0 and supports +// extension but the instance supports 1.1 and the extension +TEST(LoaderInstPhysDevExts, PhysDevQueueFamilyProps2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + uint32_t num_fam = FillInRandomQueueFamilyData(env.get_test_icd(0).physical_devices.back().queue_family_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysDevQueueFamilyProps2 = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2"); + ASSERT_NE(GetPhysDevQueueFamilyProps2, nullptr); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysDevQueueFamilyProps2KHR = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2KHR"); + ASSERT_NE(GetPhysDevQueueFamilyProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + uint32_t ret_fam_1 = 0; + std::vector props{}; + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, nullptr); + ASSERT_EQ(num_fam, ret_fam_1); + props.resize(ret_fam_1); + + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_device, &ret_fam_1, props.data()); + + std::vector props2{}; + uint32_t ret_fam_2 = 0; + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2); + props2.resize(ret_fam_2, VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2}); + GetPhysDevQueueFamilyProps2(physical_device, &ret_fam_2, props2.data()); + ASSERT_EQ(props, props2); + + std::vector props2KHR{}; + uint32_t ret_fam_2_khr = 0; + GetPhysDevQueueFamilyProps2KHR(physical_device, &ret_fam_2_khr, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2_khr); + props2KHR.resize(ret_fam_2_khr, VkQueueFamilyProperties2KHR{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR}); + GetPhysDevQueueFamilyProps2KHR(physical_device, &ret_fam_2_khr, props2KHR.data()); + ASSERT_EQ(props, props2KHR); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} + +// Test vkGetPhysicalDeviceQueueFamilyProperties2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevQueueFamilyPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomQueueFamilyData(cur_dev.queue_family_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysDevQueueFamilyProps2 = + instance.load("vkGetPhysicalDeviceQueueFamilyProperties2"); + ASSERT_NE(GetPhysDevQueueFamilyProps2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + uint32_t ret_fam_1 = 0; + std::vector props{}; + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[dev], &ret_fam_1, nullptr); + props.resize(ret_fam_1); + instance->vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[dev], &ret_fam_1, props.data()); + + std::vector props2{}; + uint32_t ret_fam_2 = 0; + GetPhysDevQueueFamilyProps2(physical_devices[dev], &ret_fam_2, nullptr); + ASSERT_EQ(ret_fam_1, ret_fam_2); + props2.resize(ret_fam_2, VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2}); + GetPhysDevQueueFamilyProps2(physical_devices[dev], &ret_fam_2, props2.data()); + ASSERT_EQ(props, props2); + } +} + +// Test vkGetPhysicalDeviceSparseImageFormatProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevSparseImageFormatProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysDevSparseImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + ASSERT_EQ(GetPhysDevSparseImageFormatProps2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceSparseImageFormatProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevSparseImageFormatPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysDevSparseImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + ASSERT_EQ(GetPhysDevSparseImageFormatProps2KHR, nullptr); +} + +// Fill in random but valid data into the sparse image format data struct for the current physical device +void FillInRandomSparseImageFormatData(std::vector& props) { + props.resize((rand() % 4) + 1); + for (uint32_t i = 0; i < props.size(); ++i) { + props[i].aspectMask = static_cast((rand() % 0x7FE) + 1); + props[i].imageGranularity = {static_cast(rand() % 512), static_cast(rand() % 512), + static_cast(rand() % 512)}; + props[i].flags = static_cast((rand() % 6) + 1); + } +} + +// Test vkGetPhysicalDeviceSparseImageFormatProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevSparseImageFormatProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomSparseImageFormatData(env.get_test_icd(0).physical_devices.back().sparse_image_format_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysDevSparseImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t sparse_count_1 = 0; + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, nullptr); + ASSERT_NE(sparse_count_1, 0U); + props.resize(sparse_count_1); + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, props.data()); + ASSERT_NE(sparse_count_1, 0U); + + VkPhysicalDeviceSparseImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_SAMPLE_COUNT_4_BIT, // samples + VK_IMAGE_USAGE_STORAGE_BIT, // usage + VK_IMAGE_TILING_OPTIMAL, // tiling + }; + std::vector props2{}; + uint32_t sparse_count_2 = 0; + GetPhysDevSparseImageFormatProps2KHR(physical_device, &info2, &sparse_count_2, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2); + props2.resize(sparse_count_2, VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2}); + GetPhysDevSparseImageFormatProps2KHR(physical_device, &info2, &sparse_count_2, props2.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2); + ASSERT_EQ(props, props2); +} + +// Test vkGetPhysicalDeviceSparseImageFormatProperties2 where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevSparseImageFormatProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomSparseImageFormatData(env.get_test_icd(0).physical_devices.back().sparse_image_format_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysDevSparseImageFormatProps2 = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t sparse_count_1 = 0; + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, nullptr); + ASSERT_NE(sparse_count_1, 0U); + props.resize(sparse_count_1); + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, props.data()); + ASSERT_NE(sparse_count_1, 0U); + + VkPhysicalDeviceSparseImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_SAMPLE_COUNT_4_BIT, // samples + VK_IMAGE_USAGE_STORAGE_BIT, // usage + VK_IMAGE_TILING_OPTIMAL, // tiling + }; + std::vector props2{}; + uint32_t sparse_count_2 = 0; + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2); + props2.resize(sparse_count_2, VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2}); + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, props2.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2); + ASSERT_EQ(props, props2); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysDevSparseImageFormatProps2 = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t sparse_count_1 = 0; + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, nullptr); + ASSERT_NE(sparse_count_1, 0U); + props.resize(sparse_count_1); + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, props.data()); + ASSERT_NE(sparse_count_1, 0U); + + VkPhysicalDeviceSparseImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_SAMPLE_COUNT_4_BIT, // samples + VK_IMAGE_USAGE_STORAGE_BIT, // usage + VK_IMAGE_TILING_OPTIMAL, // tiling + }; + std::vector props2{}; + uint32_t sparse_count_2 = 0; + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2); + props2.resize(sparse_count_2, VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2}); + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, props2.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2); + ASSERT_EQ(props, props2); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysDevSparseImageFormatProps2 = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t sparse_count_1 = 0; + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, nullptr); + ASSERT_NE(sparse_count_1, 0U); + props.resize(sparse_count_1); + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, props.data()); + ASSERT_NE(sparse_count_1, 0U); + + VkPhysicalDeviceSparseImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_SAMPLE_COUNT_4_BIT, // samples + VK_IMAGE_USAGE_STORAGE_BIT, // usage + VK_IMAGE_TILING_OPTIMAL, // tiling + }; + std::vector props2{}; + uint32_t sparse_count_2 = 0; + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2); + props2.resize(sparse_count_2, VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2}); + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, props2.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2); + ASSERT_EQ(props, props2); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceSparseImageFormatProperties2 and vkGetPhysicalDeviceSparseImageFormatProperties2KHR where ICD is 1.0 and +// supports extension but the instance supports 1.1 and the extension +TEST(LoaderInstPhysDevExts, PhysDevSparseImageFormatProps2KHRInstanceSupports11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + FillInRandomSparseImageFormatData(env.get_test_icd(0).physical_devices.back().sparse_image_format_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.create_info.add_extensions( + {VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_EXTENSION_NAME}); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysDevSparseImageFormatProps2 = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2, nullptr); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysDevSparseImageFormatProps2KHR = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t sparse_count_1 = 0; + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, nullptr); + ASSERT_NE(sparse_count_1, 0U); + props.resize(sparse_count_1); + instance->vkGetPhysicalDeviceSparseImageFormatProperties(physical_device, VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, + VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, props.data()); + ASSERT_NE(sparse_count_1, 0U); + + VkPhysicalDeviceSparseImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_SAMPLE_COUNT_4_BIT, // samples + VK_IMAGE_USAGE_STORAGE_BIT, // usage + VK_IMAGE_TILING_OPTIMAL, // tiling + }; + std::vector props2{}; + uint32_t sparse_count_2 = 0; + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2); + props2.resize(sparse_count_2, VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2}); + GetPhysDevSparseImageFormatProps2(physical_device, &info2, &sparse_count_2, props2.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2); + ASSERT_EQ(props, props2); + + std::vector props2KHR{}; + uint32_t sparse_count_2_khr = 0; + GetPhysDevSparseImageFormatProps2KHR(physical_device, &info2, &sparse_count_2_khr, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2_khr); + props2KHR.resize(sparse_count_2, VkSparseImageFormatProperties2KHR{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR}); + GetPhysDevSparseImageFormatProps2KHR(physical_device, &info2, &sparse_count_2_khr, props2KHR.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2_khr); + ASSERT_EQ(props, props2KHR); + + ASSERT_FALSE(log.find("Emulating call in ICD")); +} + +// Test vkGetPhysicalDeviceSparseImageFormatProperties2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevSparseImageFormatPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomSparseImageFormatData(cur_dev.sparse_image_format_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysDevSparseImageFormatProps2 = + instance.load("vkGetPhysicalDeviceSparseImageFormatProperties2"); + ASSERT_NE(GetPhysDevSparseImageFormatProps2, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + std::vector props{}; + uint32_t sparse_count_1 = 0; + instance->vkGetPhysicalDeviceSparseImageFormatProperties( + physical_devices[dev], VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, nullptr); + ASSERT_NE(sparse_count_1, 0U); + props.resize(sparse_count_1); + instance->vkGetPhysicalDeviceSparseImageFormatProperties( + physical_devices[dev], VK_FORMAT_R4G4_UNORM_PACK8, VK_IMAGE_TYPE_2D, VK_SAMPLE_COUNT_4_BIT, VK_IMAGE_USAGE_STORAGE_BIT, + VK_IMAGE_TILING_OPTIMAL, &sparse_count_1, props.data()); + ASSERT_NE(sparse_count_1, 0U); + + VkPhysicalDeviceSparseImageFormatInfo2 info2{ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, // sType + nullptr, // pNext + VK_FORMAT_R4G4_UNORM_PACK8, // format + VK_IMAGE_TYPE_2D, // type + VK_SAMPLE_COUNT_4_BIT, // samples + VK_IMAGE_USAGE_STORAGE_BIT, // usage + VK_IMAGE_TILING_OPTIMAL, // tiling + }; + std::vector props2{}; + uint32_t sparse_count_2 = 0; + GetPhysDevSparseImageFormatProps2(physical_devices[dev], &info2, &sparse_count_2, nullptr); + ASSERT_EQ(sparse_count_1, sparse_count_2); + props2.resize(sparse_count_2, VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2}); + GetPhysDevSparseImageFormatProps2(physical_devices[dev], &info2, &sparse_count_2, props2.data()); + ASSERT_EQ(sparse_count_1, sparse_count_2); + ASSERT_EQ(props, props2); + } +} + +// +// VK_KHR_external_memory_capabilities +// + +// Test vkGetPhysicalDeviceExternalBufferPropertiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevExtBufPropsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceExternalBufferPropertiesKHR, nullptr); +} + +// Test vkGetPhysicalDeviceExternalBufferPropertiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevExtBufPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceExternalBufferPropertiesKHR, nullptr); +} + +// Fill in random but valid data into the external memorydata struct for the current physical device +void FillInRandomExtMemoryData(VkExternalMemoryProperties& props) { + props.externalMemoryFeatures = static_cast((rand() % 6) + 1); + props.exportFromImportedHandleTypes = static_cast((rand() % 0x1FFE) + 1); + props.compatibleHandleTypes = static_cast((rand() % 0x1FFE) + 1); +} + +// Test vkGetPhysicalDeviceExternalBufferPropertiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevExtBufProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomExtMemoryData(env.get_test_icd(0).physical_devices.back().external_memory_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceExternalBufferPropertiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalBufferInfoKHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR}; + VkExternalBufferPropertiesKHR props{VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR}; + GetPhysicalDeviceExternalBufferPropertiesKHR(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_memory_properties, props.externalMemoryProperties); +} + +// Test vkGetPhysicalDeviceExternalBufferProperties where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevExtBufProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 0}); + FillInRandomExtMemoryData(env.get_test_icd(0).physical_devices.back().external_memory_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties = + instance.load("vkGetPhysicalDeviceExternalBufferProperties"); + ASSERT_NE(GetPhysicalDeviceExternalBufferProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalBufferInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO}; + VkExternalBufferProperties props{VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES}; + GetPhysicalDeviceExternalBufferProperties(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_memory_properties, props.externalMemoryProperties); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties = + instance.load("vkGetPhysicalDeviceExternalBufferProperties"); + ASSERT_NE(GetPhysicalDeviceExternalBufferProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalBufferInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO}; + VkExternalBufferProperties props{VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES}; + GetPhysicalDeviceExternalBufferProperties(physical_device, &info, &props); + // Compare against 'zeroed' out VkExternalMemoryProperties + ASSERT_EQ(VkExternalMemoryProperties{}, props.externalMemoryProperties); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties = + instance.load("vkGetPhysicalDeviceExternalBufferProperties"); + ASSERT_NE(GetPhysicalDeviceExternalBufferProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalBufferInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO}; + VkExternalBufferProperties props{VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES}; + GetPhysicalDeviceExternalBufferProperties(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_memory_properties, props.externalMemoryProperties); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceExternalBufferProperties where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevExtBufPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomExtMemoryData(cur_dev.external_memory_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties = + instance.load("vkGetPhysicalDeviceExternalBufferProperties"); + ASSERT_NE(GetPhysicalDeviceExternalBufferProperties, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkPhysicalDeviceExternalBufferInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO}; + VkExternalBufferProperties props{VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES}; + GetPhysicalDeviceExternalBufferProperties(physical_devices[dev], &info, &props); + // No driver support for extension or 1.1 for ICD 1, all others support + if (icd != 1) { + ASSERT_EQ(cur_dev.external_memory_properties, props.externalMemoryProperties); + } else { + ASSERT_EQ(props.externalMemoryProperties, VkExternalMemoryProperties{}); + } + + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// +// VK_KHR_external_semaphore_capabilities +// + +// Test vkGetPhysicalDeviceExternalSemaphorePropertiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevExtSemPropsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceExternalSemaphorePropertiesKHR, nullptr); +} + +// Test vkGetPhysicalDeviceExternalSemaphorePropertiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevExtSemPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceExternalSemaphorePropertiesKHR, nullptr); +} + +// Fill in random but valid data into the external semaphore data struct for the current physical device +void FillInRandomExtSemData(VkExternalSemaphoreProperties& props) { + props.sType = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES; + props.pNext = nullptr; + props.exportFromImportedHandleTypes = static_cast((rand() % 0xFFF) + 1); + props.compatibleHandleTypes = static_cast((rand() % 0xFFF) + 1); + props.externalSemaphoreFeatures = static_cast((rand() % 0xFFF) + 1); +} + +// Test vkGetPhysicalDeviceExternalSemaphorePropertiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevExtSemProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomExtSemData(env.get_test_icd(0).physical_devices.back().external_semaphore_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceExternalSemaphorePropertiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalSemaphoreInfoKHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR}; + VkExternalSemaphorePropertiesKHR props{VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR}; + GetPhysicalDeviceExternalSemaphorePropertiesKHR(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_semaphore_properties, props); +} + +// Test vkGetPhysicalDeviceExternalSemaphoreProperties where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevExtSemProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 0}); + FillInRandomExtSemData(env.get_test_icd(0).physical_devices.back().external_semaphore_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties = + instance.load("vkGetPhysicalDeviceExternalSemaphoreProperties"); + ASSERT_NE(GetPhysicalDeviceExternalSemaphoreProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalSemaphoreInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO}; + VkExternalSemaphoreProperties props{VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES}; + GetPhysicalDeviceExternalSemaphoreProperties(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_semaphore_properties, props); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties = + instance.load("vkGetPhysicalDeviceExternalSemaphoreProperties"); + ASSERT_NE(GetPhysicalDeviceExternalSemaphoreProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalSemaphoreInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO}; + VkExternalSemaphoreProperties props{VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES}; + GetPhysicalDeviceExternalSemaphoreProperties(physical_device, &info, &props); + // Compare against 'zeroed' out VkExternalSemaphoreProperties + ASSERT_EQ(VkExternalSemaphoreProperties{}, props); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties = + instance.load("vkGetPhysicalDeviceExternalSemaphoreProperties"); + ASSERT_NE(GetPhysicalDeviceExternalSemaphoreProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalSemaphoreInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO}; + VkExternalSemaphoreProperties props{VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES}; + GetPhysicalDeviceExternalSemaphoreProperties(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_semaphore_properties, props); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} + +// Test vkGetPhysicalDeviceExternalSemaphoreProperties where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevExtSemPropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomExtSemData(cur_dev.external_semaphore_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties = + instance.load("vkGetPhysicalDeviceExternalSemaphoreProperties"); + ASSERT_NE(GetPhysicalDeviceExternalSemaphoreProperties, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkPhysicalDeviceExternalSemaphoreInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO}; + VkExternalSemaphoreProperties props{VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES}; + GetPhysicalDeviceExternalSemaphoreProperties(physical_devices[dev], &info, &props); + // No driver support for extension or 1.1 for ICD 1, all others support + if (icd != 1) { + ASSERT_EQ(cur_dev.external_semaphore_properties, props); + } else { + ASSERT_EQ(props, VkExternalSemaphoreProperties{}); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// +// VK_KHR_external_fence_capabilities +// + +// Test vkGetPhysicalDeviceExternalFencePropertiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevExtFencePropsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalFencePropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceExternalFencePropertiesKHR, nullptr); +} + +// Test vkGetPhysicalDeviceExternalFencePropertiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevExtFencePropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalFencePropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceExternalFencePropertiesKHR, nullptr); +} + +// Fill in random but valid data into the external fence data struct for the current physical device +void FillInRandomExtFenceData(VkExternalFenceProperties& props) { + props.sType = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES; + props.pNext = nullptr; + props.exportFromImportedHandleTypes = static_cast((rand() % 0xFFF) + 1); + props.compatibleHandleTypes = static_cast((rand() % 0xFFF) + 1); + props.externalFenceFeatures = static_cast((rand() % 0xFFF) + 1); +} + +// Test vkGetPhysicalDeviceExternalFencePropertiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevExtFenceProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomExtFenceData(env.get_test_icd(0).physical_devices.back().external_fence_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR = + instance.load("vkGetPhysicalDeviceExternalFencePropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceExternalFencePropertiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalFenceInfoKHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR}; + VkExternalFencePropertiesKHR props{VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR}; + GetPhysicalDeviceExternalFencePropertiesKHR(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_fence_properties, props); +} + +// Test vkGetPhysicalDeviceExternalFenceProperties where instance supports, an ICD, and a device under that ICD +// also support, so everything should work and return properly. +// Also check if the application didn't enable 1.1 and when a layer 'upgrades' the api version to 1.1 +TEST(LoaderInstPhysDevExts, PhysDevExtFenceProps2Simple) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).icd_api_version = VK_API_VERSION_1_1; + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 0}); + FillInRandomExtFenceData(env.get_test_icd(0).physical_devices.back().external_fence_properties); + { + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties = + instance.load("vkGetPhysicalDeviceExternalFenceProperties"); + ASSERT_NE(GetPhysicalDeviceExternalFenceProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalFenceInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO}; + VkExternalFenceProperties props{VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES}; + GetPhysicalDeviceExternalFenceProperties(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_fence_properties, props); + } + { // Now do the same logic but the application didn't enable 1.0 or the extension so they get the emulated call + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties = + instance.load("vkGetPhysicalDeviceExternalFenceProperties"); + ASSERT_NE(GetPhysicalDeviceExternalFenceProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalFenceInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO}; + VkExternalFenceProperties props{VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES}; + GetPhysicalDeviceExternalFenceProperties(physical_device, &info, &props); + // Compare against 'zeroed' out VkExternalFenceProperties + ASSERT_EQ(VkExternalFenceProperties{}, props); + ASSERT_TRUE(log.find("Emulating call in ICD")); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("modify_api_version_layer") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DisableEnvVar")), + "modify_api_version_layer.json"); + env.get_test_layer().set_alter_api_version(VK_API_VERSION_1_1); + { // Now do the same as above but with a layer that updates the version to 1.1 on behalf of the application + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + instance.CheckCreate(); + DebugUtilsWrapper log{instance, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + CreateDebugUtilsMessenger(log); + PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties = + instance.load("vkGetPhysicalDeviceExternalFenceProperties"); + ASSERT_NE(GetPhysicalDeviceExternalFenceProperties, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkPhysicalDeviceExternalFenceInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO}; + VkExternalFenceProperties props{VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES}; + GetPhysicalDeviceExternalFenceProperties(physical_device, &info, &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().external_fence_properties, props); + ASSERT_FALSE(log.find("Emulating call in ICD")); + } +} +// Test vkGetPhysicalDeviceExternalFenceProperties where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevExtFencePropsMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomExtFenceData(cur_dev.external_fence_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties = + instance.load("vkGetPhysicalDeviceExternalFenceProperties"); + ASSERT_NE(GetPhysicalDeviceExternalFenceProperties, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkPhysicalDeviceExternalFenceInfo info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO}; + VkExternalFenceProperties props{VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES}; + GetPhysicalDeviceExternalFenceProperties(physical_devices[dev], &info, &props); + // No driver support for extension or 1.1 for ICD 1, all others support + if (icd != 1) { + ASSERT_EQ(cur_dev.external_fence_properties, props); + } else { + ASSERT_EQ(props, VkExternalFenceProperties{}); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// +// VK_KHR_get_surface_capabilities2 +// + +// Test vkGetPhysicalDeviceSurfaceCapabilities2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevSurfaceCaps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR = + instance.load("vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + ASSERT_EQ(GetPhysicalDeviceSurfaceCapabilities2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceSurfaceCapabilities2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevSurfaceCaps2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR = + instance.load("vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + ASSERT_EQ(GetPhysicalDeviceSurfaceCapabilities2KHR, nullptr); +} + +// Fill in random but valid data into the surface capability data struct for the current physical device +void FillInRandomSurfaceCapsData(VkSurfaceCapabilitiesKHR& props) { + props.minImageCount = (rand() % 0xFFF) + 1; + props.maxImageCount = (rand() % 0xFFF) + 1; + props.currentExtent.width = (rand() % 0xFFF) + 1; + props.currentExtent.height = (rand() % 0xFFF) + 1; + props.minImageExtent.width = (rand() % 0xFFF) + 1; + props.minImageExtent.height = (rand() % 0xFFF) + 1; + props.maxImageExtent.width = (rand() % 0xFFF) + 1; + props.maxImageExtent.height = (rand() % 0xFFF) + 1; + props.maxImageArrayLayers = (rand() % 0xFFF) + 1; + props.supportedTransforms = static_cast((rand() % 0xFFF) + 1); + props.currentTransform = static_cast((rand() % 0xFFF) + 1); + props.supportedCompositeAlpha = static_cast((rand() % 0xFFF) + 1); + props.supportedUsageFlags = static_cast((rand() % 0xFFF) + 1); +} + +// Test vkGetPhysicalDeviceSurfaceCapabilities2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevSurfaceCaps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_SURFACE_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}; + Extension third_ext{VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME}; + auto& cur_icd = env.get_test_icd(0); + cur_icd.add_instance_extensions({first_ext, second_ext, third_ext}); + cur_icd.physical_devices.push_back({}); + cur_icd.min_icd_interface_version = 3; + cur_icd.enable_icd_wsi = true; + FillInRandomSurfaceCapsData(env.get_test_icd(0).physical_devices.back().surface_capabilities); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions( + {VK_KHR_SURFACE_EXTENSION_NAME, VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR = + instance.load("vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceCapabilitiesKHR, nullptr); + PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT = instance.load("vkCreateHeadlessSurfaceEXT"); + ASSERT_NE(CreateHeadlessSurfaceEXT, nullptr); + PFN_vkDestroySurfaceKHR DestroySurfaceKHR = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(DestroySurfaceKHR, nullptr); + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR = + instance.load("vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceCapabilities2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkSurfaceKHR surface; + VkHeadlessSurfaceCreateInfoEXT create_info{VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT}; + ASSERT_EQ(VK_SUCCESS, CreateHeadlessSurfaceEXT(instance.inst, &create_info, nullptr, &surface)); + + VkSurfaceCapabilitiesKHR props{}; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, surface, &props)); + + VkPhysicalDeviceSurfaceInfo2KHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, nullptr, surface}; + VkSurfaceCapabilities2KHR props2{VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR}; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceCapabilities2KHR(physical_device, &info, &props2)); + ASSERT_EQ(props, props2.surfaceCapabilities); + + DestroySurfaceKHR(instance.inst, surface, nullptr); +} + +// Test vkGetPhysicalDeviceSurfaceCapabilities2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevSurfaceCaps2KHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + Extension first_ext{VK_KHR_SURFACE_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}; + Extension third_ext{VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME}; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.min_icd_interface_version = 3; + cur_icd.enable_icd_wsi = true; + cur_icd.add_instance_extensions({first_ext, third_ext}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension(second_ext); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_SURFACE_EXTENSION_NAME, 0}); + cur_dev.extensions.push_back({VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomSurfaceCapsData(cur_dev.surface_capabilities); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions( + {VK_KHR_SURFACE_EXTENSION_NAME, VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR = + instance.load("vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceCapabilitiesKHR, nullptr); + PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT = instance.load("vkCreateHeadlessSurfaceEXT"); + ASSERT_NE(CreateHeadlessSurfaceEXT, nullptr); + PFN_vkDestroySurfaceKHR DestroySurfaceKHR = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(DestroySurfaceKHR, nullptr); + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR = + instance.load("vkGetPhysicalDeviceSurfaceCapabilities2KHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceCapabilities2KHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + VkSurfaceKHR surface; + VkHeadlessSurfaceCreateInfoEXT create_info{VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT}; + ASSERT_EQ(VK_SUCCESS, CreateHeadlessSurfaceEXT(instance.inst, &create_info, nullptr, &surface)); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkSurfaceCapabilitiesKHR props{}; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceCapabilitiesKHR(physical_devices[dev], surface, &props)); + + VkPhysicalDeviceSurfaceInfo2KHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, nullptr, surface}; + VkSurfaceCapabilities2KHR props2{VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR}; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceCapabilities2KHR(physical_devices[dev], &info, &props2)); + ASSERT_EQ(props, props2.surfaceCapabilities); + } + + DestroySurfaceKHR(instance.inst, surface, nullptr); +} + +// Test vkGetPhysicalDeviceSurfaceFormats2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevSurfaceFormats2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR = + instance.load("vkGetPhysicalDeviceSurfaceFormats2KHR"); + ASSERT_EQ(GetPhysicalDeviceSurfaceFormats2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceSurfaceFormats2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevSurfaceFormats2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR = + instance.load("vkGetPhysicalDeviceSurfaceFormats2KHR"); + ASSERT_EQ(GetPhysicalDeviceSurfaceFormats2KHR, nullptr); +} + +// Fill in random but valid data into the surface formats data struct for the current physical device +void FillInRandomSurfaceFormatsData(std::vector& props) { + props.resize((rand() % 5) + 1); + for (uint32_t i = 0; i < props.size(); ++i) { + props[i].format = static_cast((rand() % 0xFFF) + 1); + props[i].colorSpace = static_cast((rand() % 0xFFF) + 1); + } +} + +// Test vkGetPhysicalDeviceSurfaceFormats2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevSurfaceFormats2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_SURFACE_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}; + Extension third_ext{VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME}; + auto& cur_icd = env.get_test_icd(0); + cur_icd.add_instance_extensions({first_ext, second_ext, third_ext}); + cur_icd.physical_devices.push_back({}); + cur_icd.min_icd_interface_version = 3; + cur_icd.enable_icd_wsi = true; + FillInRandomSurfaceFormatsData(env.get_test_icd(0).physical_devices.back().surface_formats); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions( + {VK_KHR_SURFACE_EXTENSION_NAME, VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR = + instance.load("vkGetPhysicalDeviceSurfaceFormatsKHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceFormatsKHR, nullptr); + PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT = instance.load("vkCreateHeadlessSurfaceEXT"); + ASSERT_NE(CreateHeadlessSurfaceEXT, nullptr); + PFN_vkDestroySurfaceKHR DestroySurfaceKHR = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(DestroySurfaceKHR, nullptr); + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR = + instance.load("vkGetPhysicalDeviceSurfaceFormats2KHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceFormats2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkSurfaceKHR surface; + VkHeadlessSurfaceCreateInfoEXT create_info{VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT}; + ASSERT_EQ(VK_SUCCESS, CreateHeadlessSurfaceEXT(instance.inst, &create_info, nullptr, &surface)); + + std::vector formats{}; + uint32_t count_1 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormatsKHR(physical_device, surface, &count_1, nullptr)); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().surface_formats.size(), count_1); + formats.resize(count_1); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormatsKHR(physical_device, surface, &count_1, formats.data())); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().surface_formats.size(), count_1); + + VkPhysicalDeviceSurfaceInfo2KHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, nullptr, surface}; + std::vector formats2{}; + uint32_t count_2 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormats2KHR(physical_device, &info, &count_2, nullptr)); + ASSERT_EQ(count_1, count_2); + formats2.resize(count_2, VkSurfaceFormat2KHR{VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormats2KHR(physical_device, &info, &count_2, formats2.data())); + ASSERT_EQ(formats, formats2); + DestroySurfaceKHR(instance.inst, surface, nullptr); +} + +// Test vkGetPhysicalDeviceSurfaceFormats2 where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevSurfaceFormats2KHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + Extension first_ext{VK_KHR_SURFACE_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}; + Extension third_ext{VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME}; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.enable_icd_wsi = true; + cur_icd.min_icd_interface_version = 3; + cur_icd.add_instance_extensions({first_ext, third_ext}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension(second_ext); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_SURFACE_EXTENSION_NAME, 0}); + cur_dev.extensions.push_back({VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomSurfaceFormatsData(cur_dev.surface_formats); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions( + {VK_KHR_SURFACE_EXTENSION_NAME, VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR = + instance.load("vkGetPhysicalDeviceSurfaceFormatsKHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceFormatsKHR, nullptr); + PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT = instance.load("vkCreateHeadlessSurfaceEXT"); + ASSERT_NE(CreateHeadlessSurfaceEXT, nullptr); + PFN_vkDestroySurfaceKHR DestroySurfaceKHR = instance.load("vkDestroySurfaceKHR"); + ASSERT_NE(DestroySurfaceKHR, nullptr); + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR = + instance.load("vkGetPhysicalDeviceSurfaceFormats2KHR"); + ASSERT_NE(GetPhysicalDeviceSurfaceFormats2KHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + VkSurfaceKHR surface; + VkHeadlessSurfaceCreateInfoEXT create_info{VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT}; + ASSERT_EQ(VK_SUCCESS, CreateHeadlessSurfaceEXT(instance.inst, &create_info, nullptr, &surface)); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + std::vector formats{}; + uint32_t count_1 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormatsKHR(physical_devices[dev], surface, &count_1, nullptr)); + ASSERT_NE(0U, count_1); + formats.resize(count_1); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormatsKHR(physical_devices[dev], surface, &count_1, formats.data())); + ASSERT_NE(0U, count_1); + + VkPhysicalDeviceSurfaceInfo2KHR info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, nullptr, surface}; + std::vector formats2{}; + uint32_t count_2 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormats2KHR(physical_devices[dev], &info, &count_2, nullptr)); + ASSERT_EQ(count_1, count_2); + formats2.resize(count_2, VkSurfaceFormat2KHR{VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceFormats2KHR(physical_devices[dev], &info, &count_2, formats2.data())); + ASSERT_EQ(count_1, count_2); + ASSERT_EQ(formats, formats2); + } + + DestroySurfaceKHR(instance.inst, surface, nullptr); +} + +// +// VK_KHR_display +// + +// Test vkGetPhysicalDeviceDisplayPropertiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevDispPropsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayPropertiesKHR, nullptr); +} + +// Test vkGetPhysicalDeviceDisplayPropertiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevDispPropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayPropertiesKHR, nullptr); +} + +VkDisplayKHR CreateRandomDisplay() { return (VkDisplayKHR)(((rand() % 0xFFFFFFFBull) << 12) * (rand() % 0xFFFFFFFull) + 1); } + +VkDisplayModeKHR CreateRandomDisplayMode() { + return (VkDisplayModeKHR)(((rand() % 0xFFFFFFFBull) << 12) * (rand() % 0xFFFFFFFull) + 1); +} + +// Fill in random but valid data into the display property data struct for the current physical device +void FillInRandomDisplayPropData(std::vector& props) { + props.resize((rand() % 5) + 1); + for (uint32_t i = 0; i < props.size(); ++i) { + props[i].display = CreateRandomDisplay(); + props[i].physicalDimensions.width = static_cast((rand() % 0xFFF) + 1); + props[i].physicalDimensions.height = static_cast((rand() % 0xFFF) + 1); + props[i].physicalResolution.width = static_cast((rand() % 0xFFF) + 1); + props[i].physicalResolution.height = static_cast((rand() % 0xFFF) + 1); + props[i].supportedTransforms = static_cast((rand() % 0xFFE) + 1); + props[i].planeReorderPossible = rand() % 2 > 0 ? VK_TRUE : VK_FALSE; + props[i].persistentContent = rand() % 2 > 0 ? VK_TRUE : VK_FALSE; + } +} + +// Test vGetPhysicalDeviceDisplayPropertiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevDispPropsKHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomDisplayPropData(env.get_test_icd(0).physical_devices.back().display_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPropertiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_device, &prop_count, nullptr)); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().display_properties.size(), prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_device, &prop_count, props.data())); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().display_properties.size(), prop_count); + + ASSERT_EQ(props, env.get_test_icd(0).physical_devices.back().display_properties); +} + +// Test vkGetPhysicalDeviceDisplayPropertiesKHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevDispPropsKHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomDisplayPropData(cur_dev.display_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPropertiesKHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_devices[dev], &prop_count, nullptr)); + if (icd == 1) { + // For this extension, if no support exists (like for ICD 1), the value of 0 should be returned by the + // loader. + ASSERT_EQ(0U, prop_count); + } else { + ASSERT_EQ(cur_dev.display_properties.size(), prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, + GetPhysicalDeviceDisplayPropertiesKHR(physical_devices[dev], &prop_count, props.data())); + ASSERT_EQ(cur_dev.display_properties.size(), prop_count); + + ASSERT_EQ(props, cur_dev.display_properties); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// Test vkGetPhysicalDeviceDisplayPlanePropertiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevDispPlanePropsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayPlanePropertiesKHR, nullptr); +} + +// Test vkGetPhysicalDeviceDisplayPlanePropertiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevDispPlanePropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayPlanePropertiesKHR, nullptr); +} + +// Fill in random but valid data into the display plane property data struct for the current physical device +void FillInRandomDisplayPlanePropData(std::vector& props) { + props.resize((rand() % 5) + 1); + for (uint32_t i = 0; i < props.size(); ++i) { + props[i].currentDisplay = CreateRandomDisplay(); + props[i].currentStackIndex = static_cast((rand() % 0xFFF) + (rand() % 0xFFF) + 1); + } +} + +// Test vGetPhysicalDeviceDisplayPlanePropertiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevDispPlanePropsKHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomDisplayPlanePropData(env.get_test_icd(0).physical_devices.back().display_plane_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPlanePropertiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_device, &prop_count, nullptr)); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().display_plane_properties.size(), prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_device, &prop_count, props.data())); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().display_plane_properties.size(), prop_count); + + ASSERT_EQ(props, env.get_test_icd(0).physical_devices.back().display_plane_properties); +} + +// Test vkGetPhysicalDeviceDisplayPlanePropertiesKHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevDispPlanePropsKHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomDisplayPlanePropData(cur_dev.display_plane_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPlanePropertiesKHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_devices[dev], &prop_count, nullptr)); + if (icd == 1) { + // For this extension, if no support exists (like for ICD 1), the value of 0 should be returned by the + // loader. + ASSERT_EQ(0U, prop_count); + } else { + ASSERT_EQ(cur_dev.display_plane_properties.size(), prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, + GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_devices[dev], &prop_count, props.data())); + ASSERT_EQ(cur_dev.display_plane_properties.size(), prop_count); + + ASSERT_EQ(props, cur_dev.display_plane_properties); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// Test vkGetDisplayPlaneSupportedDisplaysKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDispPlaneSupDispsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR = + instance.load("vkGetDisplayPlaneSupportedDisplaysKHR"); + ASSERT_EQ(GetDisplayPlaneSupportedDisplaysKHR, nullptr); +} + +// Test vkGetDisplayPlaneSupportedDisplaysKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDispPlaneSupDispsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR = + instance.load("vkGetDisplayPlaneSupportedDisplaysKHR"); + ASSERT_EQ(GetDisplayPlaneSupportedDisplaysKHR, nullptr); +} + +// Fill in random but valid data into the display plane property data struct for the current physical device +void GenerateRandomDisplays(std::vector& disps) { + disps.resize((rand() % 5) + 1); + for (uint32_t i = 0; i < disps.size(); ++i) { + disps[i] = CreateRandomDisplay(); + } +} + +// Test vGetDisplayPlaneSupportedDisplaysKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDispPlaneSupDispsKHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + GenerateRandomDisplays(env.get_test_icd(0).physical_devices.back().displays); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR = + instance.load("vkGetDisplayPlaneSupportedDisplaysKHR"); + ASSERT_NE(GetDisplayPlaneSupportedDisplaysKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector disps{}; + uint32_t disp_count = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneSupportedDisplaysKHR(physical_device, 0, &disp_count, nullptr)); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().displays.size(), disp_count); + disps.resize(disp_count); + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneSupportedDisplaysKHR(physical_device, 0, &disp_count, disps.data())); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().displays.size(), disp_count); + + ASSERT_EQ(disps, env.get_test_icd(0).physical_devices.back().displays); +} + +// Test vkGetDisplayPlaneSupportedDisplaysKHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDispPlaneSupDispsKHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplays(cur_dev.displays); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR = + instance.load("vkGetDisplayPlaneSupportedDisplaysKHR"); + ASSERT_NE(GetDisplayPlaneSupportedDisplaysKHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + std::vector disps{}; + uint32_t disp_count = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneSupportedDisplaysKHR(physical_devices[dev], 0, &disp_count, nullptr)); + if (icd == 1) { + // For this extension, if no support exists (like for ICD 1), the value of 0 should be returned by the + // loader. + ASSERT_EQ(0U, disp_count); + } else { + ASSERT_EQ(cur_dev.displays.size(), disp_count); + disps.resize(disp_count); + ASSERT_EQ(VK_SUCCESS, + GetDisplayPlaneSupportedDisplaysKHR(physical_devices[dev], 0, &disp_count, disps.data())); + ASSERT_EQ(cur_dev.displays.size(), disp_count); + + ASSERT_EQ(disps, cur_dev.displays); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// Test vkGetDisplayModePropertiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDispModePropsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR = instance.load("vkGetDisplayModePropertiesKHR"); + ASSERT_EQ(GetDisplayModePropertiesKHR, nullptr); +} + +// Test vkGetDisplayModePropertiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDispModePropsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR = instance.load("vkGetDisplayModePropertiesKHR"); + ASSERT_EQ(GetDisplayModePropertiesKHR, nullptr); +} + +// Fill in random but valid data into the display mode properties data struct for the current physical device +void GenerateRandomDisplayModeProps(std::vector& disps) { + disps.resize((rand() % 5) + 1); + for (uint32_t i = 0; i < disps.size(); ++i) { + disps[i].displayMode = CreateRandomDisplayMode(); + disps[i].parameters.visibleRegion.width = static_cast((rand() % 0xFFFFFFF) + 1); + disps[i].parameters.visibleRegion.height = static_cast((rand() % 0xFFFFFFF) + 1); + disps[i].parameters.refreshRate = 1 << (rand() % 8); + } +} + +// Test vGetDisplayModePropertiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDispModePropsKHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + GenerateRandomDisplayModeProps(env.get_test_icd(0).physical_devices.back().display_mode_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR = instance.load("vkGetDisplayModePropertiesKHR"); + ASSERT_NE(GetDisplayModePropertiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t props_count = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayModePropertiesKHR(physical_device, VK_NULL_HANDLE, &props_count, nullptr)); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().display_mode_properties.size(), props_count); + props.resize(props_count); + ASSERT_EQ(VK_SUCCESS, GetDisplayModePropertiesKHR(physical_device, VK_NULL_HANDLE, &props_count, props.data())); + ASSERT_EQ(env.get_test_icd(0).physical_devices.back().display_mode_properties.size(), props_count); + + ASSERT_EQ(props, env.get_test_icd(0).physical_devices.back().display_mode_properties); +} + +// Test vkGetDisplayModePropertiesKHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDispModePropsKHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplayModeProps(cur_dev.display_mode_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR = instance.load("vkGetDisplayModePropertiesKHR"); + ASSERT_NE(GetDisplayModePropertiesKHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + uint32_t props_count = 0; + ASSERT_EQ(VK_SUCCESS, + GetDisplayModePropertiesKHR(physical_devices[dev], VK_NULL_HANDLE, &props_count, nullptr)); + if (icd == 1) { + // For this extension, if no support exists (like for ICD 1), the value of 0 should be returned by the + // loader. + ASSERT_EQ(0U, props_count); + } else { + std::vector props{}; + ASSERT_EQ(cur_dev.display_mode_properties.size(), props_count); + props.resize(props_count); + ASSERT_EQ(VK_SUCCESS, + GetDisplayModePropertiesKHR(physical_devices[dev], VK_NULL_HANDLE, &props_count, props.data())); + ASSERT_EQ(cur_dev.display_mode_properties.size(), props_count); + + ASSERT_EQ(props, cur_dev.display_mode_properties); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// Test vkCreateDisplayModeKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDispModesKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR = instance.load("vkCreateDisplayModeKHR"); + ASSERT_EQ(CreateDisplayModeKHR, nullptr); +} + +// Test vkCreateDisplayModeKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDispModesKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR = instance.load("vkCreateDisplayModeKHR"); + ASSERT_EQ(CreateDisplayModeKHR, nullptr); +} + +// Test vkCreateDisplayModeKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDispModesKHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.back().display_mode = CreateRandomDisplayMode(); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR = instance.load("vkCreateDisplayModeKHR"); + ASSERT_NE(CreateDisplayModeKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkDisplayModeKHR mode{}; + VkDisplayModeCreateInfoKHR create_info{VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR}; + ASSERT_EQ(VK_SUCCESS, CreateDisplayModeKHR(physical_device, VK_NULL_HANDLE, &create_info, nullptr, &mode)); + ASSERT_EQ(mode, env.get_test_icd(0).physical_devices.back().display_mode); +} + +// Test vkCreateDisplayModeKHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDispModesKHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + cur_dev.display_mode = CreateRandomDisplayMode(); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR = instance.load("vkCreateDisplayModeKHR"); + ASSERT_NE(CreateDisplayModeKHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkDisplayModeKHR mode{}; + VkDisplayModeCreateInfoKHR create_info{VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR}; + if (icd == 1) { + // Unsupported ICD should return initialization failed (instead of crash) + ASSERT_EQ(VK_ERROR_INITIALIZATION_FAILED, + CreateDisplayModeKHR(physical_devices[dev], VK_NULL_HANDLE, &create_info, nullptr, &mode)); + } else { + ASSERT_EQ(VK_SUCCESS, + CreateDisplayModeKHR(physical_devices[dev], VK_NULL_HANDLE, &create_info, nullptr, &mode)); + ASSERT_EQ(mode, cur_dev.display_mode); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// Test vkGetDisplayPlaneCapabilitiesKHR where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDispPlaneCapsKHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_EQ(GetDisplayPlaneCapabilitiesKHR, nullptr); +} + +// Test vkGetDisplayPlaneCapabilitiesKHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDispPlaneCapsKHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_EQ(GetDisplayPlaneCapabilitiesKHR, nullptr); +} + +// Fill in random but valid data into the display plane caps for the current physical device +void GenerateRandomDisplayPlaneCaps(VkDisplayPlaneCapabilitiesKHR& caps) { + caps.supportedAlpha = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minSrcPosition.x = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minSrcPosition.y = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxSrcPosition.x = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxSrcPosition.y = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minSrcExtent.width = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minSrcExtent.height = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxSrcExtent.width = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxSrcExtent.height = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minDstPosition.x = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minDstPosition.y = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxDstPosition.x = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxDstPosition.y = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minDstExtent.width = static_cast((rand() % 0xFFFFFFF) + 1); + caps.minDstExtent.height = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxDstExtent.width = static_cast((rand() % 0xFFFFFFF) + 1); + caps.maxDstExtent.height = static_cast((rand() % 0xFFFFFFF) + 1); +} + +// Test vkGetDisplayPlaneCapabilitiesKHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDispPlaneCapsKHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({}); + GenerateRandomDisplayPlaneCaps(env.get_test_icd(0).physical_devices.back().display_plane_capabilities); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_NE(GetDisplayPlaneCapabilitiesKHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkDisplayPlaneCapabilitiesKHR caps{}; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneCapabilitiesKHR(physical_device, 0, 0, &caps)); + ASSERT_EQ(caps, env.get_test_icd(0).physical_devices.back().display_plane_capabilities); +} + +// Test vkGetDisplayPlaneCapabilitiesKHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDispPlaneCapsKHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplayPlaneCaps(cur_dev.display_plane_capabilities); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_NE(GetDisplayPlaneCapabilitiesKHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkDisplayPlaneCapabilitiesKHR caps{}; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneCapabilitiesKHR(physical_devices[dev], 0, 0, &caps)); + if (icd != 1) { + ASSERT_EQ(caps, cur_dev.display_plane_capabilities); + } else { + ASSERT_EQ(caps, VkDisplayPlaneCapabilitiesKHR{}); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// +// VK_KHR_get_display_properties2 +// + +// Test vkGetPhysicalDeviceDisplayProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevDispProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayProperties2KHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayProperties2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceDisplayProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevDispProps2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayProperties2KHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayProperties2KHR, nullptr); +} + +// Test vGetPhysicalDeviceDisplayProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevDispProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_DISPLAY_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}; + env.get_test_icd(0).add_instance_extensions({first_ext, second_ext}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomDisplayPropData(env.get_test_icd(0).physical_devices.back().display_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPropertiesKHR, nullptr); + PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayProperties2KHR"); + ASSERT_NE(GetPhysicalDeviceDisplayProperties2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_device, &prop_count, nullptr)); + ASSERT_NE(0U, prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_device, &prop_count, props.data())); + + std::vector props2{}; + uint32_t prop_count_2 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayProperties2KHR(physical_device, &prop_count_2, nullptr)); + ASSERT_EQ(prop_count, prop_count_2); + props2.resize(prop_count_2, {VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayProperties2KHR(physical_device, &prop_count_2, props2.data())); + ASSERT_EQ(prop_count, prop_count_2); + ASSERT_EQ(props, props2); +} + +// Test vkGetPhysicalDeviceDisplayProperties2KHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevDispProps2KHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomDisplayPropData(cur_dev.display_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPropertiesKHR, nullptr); + PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayProperties2KHR"); + ASSERT_NE(GetPhysicalDeviceDisplayProperties2KHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_devices[dev], &prop_count, nullptr)); + ASSERT_NE(0U, prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPropertiesKHR(physical_devices[dev], &prop_count, props.data())); + + std::vector props2{}; + uint32_t prop_count_2 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayProperties2KHR(physical_devices[dev], &prop_count_2, nullptr)); + ASSERT_EQ(prop_count, prop_count_2); + props2.resize(prop_count_2, {VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayProperties2KHR(physical_devices[dev], &prop_count_2, props2.data())); + ASSERT_EQ(prop_count, prop_count_2); + ASSERT_EQ(props, props2); + } +} + +// Test vkGetPhysicalDeviceDisplayPlaneProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, PhysDevDispPlaneProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayPlaneProperties2KHR, nullptr); +} + +// Test vkGetPhysicalDeviceDisplayPlaneProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, PhysDevDispPlaneProps2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + ASSERT_EQ(GetPhysicalDeviceDisplayPlaneProperties2KHR, nullptr); +} + +// Test vGetPhysicalDeviceDisplayPlaneProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, PhysDevDispPlaneProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_DISPLAY_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}; + env.get_test_icd(0).add_instance_extensions({first_ext, second_ext}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomDisplayPlanePropData(env.get_test_icd(0).physical_devices.back().display_plane_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPlanePropertiesKHR, nullptr); + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPlaneProperties2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_device, &prop_count, nullptr)); + ASSERT_NE(0U, prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_device, &prop_count, props.data())); + + std::vector props2{}; + uint32_t prop_count2 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlaneProperties2KHR(physical_device, &prop_count2, nullptr)); + ASSERT_EQ(prop_count, prop_count2); + props2.resize(prop_count2, {VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlaneProperties2KHR(physical_device, &prop_count2, props2.data())); + ASSERT_EQ(props, props2); +} + +// Test vkGetPhysicalDeviceDisplayPlaneProperties2KHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, PhysDevDispPlaneProps2KHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + FillInRandomDisplayPlanePropData(cur_dev.display_plane_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR = + instance.load("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPlanePropertiesKHR, nullptr); + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR = + instance.load("vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); + ASSERT_NE(GetPhysicalDeviceDisplayPlaneProperties2KHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + std::vector props{}; + uint32_t prop_count = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_devices[dev], &prop_count, nullptr)); + ASSERT_NE(0U, prop_count); + props.resize(prop_count); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlanePropertiesKHR(physical_devices[dev], &prop_count, props.data())); + + std::vector props2{}; + uint32_t prop_count2 = 0; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlaneProperties2KHR(physical_devices[dev], &prop_count2, nullptr)); + ASSERT_EQ(prop_count, prop_count2); + props2.resize(prop_count2, {VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceDisplayPlaneProperties2KHR(physical_devices[dev], &prop_count2, props2.data())); + ASSERT_EQ(props, props2); + } +} + +// Test vkGetDisplayModeProperties2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDispModeProps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR = instance.load("vkGetDisplayModeProperties2KHR"); + ASSERT_EQ(GetDisplayModeProperties2KHR, nullptr); +} + +// Test vkGetDisplayModeProperties2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDispModeProps2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR = instance.load("vkGetDisplayModeProperties2KHR"); + ASSERT_EQ(GetDisplayModeProperties2KHR, nullptr); +} + +// Test vGetDisplayModeProperties2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDispModeProps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_DISPLAY_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}; + env.get_test_icd(0).add_instance_extensions({first_ext, second_ext}); + env.get_test_icd(0).physical_devices.push_back({}); + GenerateRandomDisplayModeProps(env.get_test_icd(0).physical_devices.back().display_mode_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR = instance.load("vkGetDisplayModePropertiesKHR"); + ASSERT_NE(GetDisplayModePropertiesKHR, nullptr); + PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR = instance.load("vkGetDisplayModeProperties2KHR"); + ASSERT_NE(GetDisplayModeProperties2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + std::vector props{}; + uint32_t props_count1 = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayModePropertiesKHR(physical_device, VK_NULL_HANDLE, &props_count1, nullptr)); + ASSERT_NE(0U, props_count1); + props.resize(props_count1); + ASSERT_EQ(VK_SUCCESS, GetDisplayModePropertiesKHR(physical_device, VK_NULL_HANDLE, &props_count1, props.data())); + + std::vector props2{}; + uint32_t props_count2 = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayModeProperties2KHR(physical_device, VK_NULL_HANDLE, &props_count2, nullptr)); + ASSERT_EQ(props_count1, props_count2); + props2.resize(props_count2, {VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetDisplayModeProperties2KHR(physical_device, VK_NULL_HANDLE, &props_count2, props2.data())); + ASSERT_EQ(props, props2); +} + +// Test vkGetDisplayModeProperties2KHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDispModeProps2KHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplayModeProps(cur_dev.display_mode_properties); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR = instance.load("vkGetDisplayModePropertiesKHR"); + ASSERT_NE(GetDisplayModePropertiesKHR, nullptr); + PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR = instance.load("vkGetDisplayModeProperties2KHR"); + ASSERT_NE(GetDisplayModeProperties2KHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + std::vector props{}; + uint32_t props_count1 = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayModePropertiesKHR(physical_devices[dev], VK_NULL_HANDLE, &props_count1, nullptr)); + ASSERT_NE(0U, props_count1); + props.resize(props_count1); + ASSERT_EQ(VK_SUCCESS, GetDisplayModePropertiesKHR(physical_devices[dev], VK_NULL_HANDLE, &props_count1, props.data())); + + std::vector props2{}; + uint32_t props_count2 = 0; + ASSERT_EQ(VK_SUCCESS, GetDisplayModeProperties2KHR(physical_devices[dev], VK_NULL_HANDLE, &props_count2, nullptr)); + ASSERT_EQ(props_count1, props_count2); + props2.resize(props_count2, {VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR}); + ASSERT_EQ(VK_SUCCESS, GetDisplayModeProperties2KHR(physical_devices[dev], VK_NULL_HANDLE, &props_count2, props2.data())); + ASSERT_EQ(props, props2); + } +} + +// Test vkGetDisplayPlaneCapabilities2KHR where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDispPlaneCaps2KHRNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_EQ(GetDisplayPlaneCapabilitiesKHR, nullptr); +} + +// Test vkGetDisplayPlaneCapabilities2KHR where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDispPlaneCaps2KHRNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_EQ(GetDisplayPlaneCapabilitiesKHR, nullptr); +} + +// Test vkGetDisplayPlaneCapabilities2KHR where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDispPlaneCaps2KHRInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_DISPLAY_EXTENSION_NAME}; + Extension second_ext{VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}; + env.get_test_icd(0).add_instance_extensions({first_ext, second_ext}); + env.get_test_icd(0).physical_devices.push_back({}); + FillInRandomDisplayPropData(env.get_test_icd(0).physical_devices.back().display_properties); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_NE(GetDisplayPlaneCapabilitiesKHR, nullptr); + PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR = instance.load("vkGetDisplayPlaneCapabilities2KHR"); + ASSERT_NE(GetDisplayPlaneCapabilities2KHR, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkDisplayPlaneCapabilitiesKHR caps{}; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneCapabilitiesKHR(physical_device, 0, 0, &caps)); + VkDisplayPlaneCapabilities2KHR caps2{}; + VkDisplayPlaneInfo2KHR info{VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR}; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneCapabilities2KHR(physical_device, &info, &caps2)); + ASSERT_EQ(caps, caps2); +} + +// Test vkGetDisplayPlaneCapabilities2KHR where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDispPlaneCaps2KHRMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplayPlaneCaps(cur_dev.display_plane_capabilities); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR = instance.load("vkGetDisplayPlaneCapabilitiesKHR"); + ASSERT_NE(GetDisplayPlaneCapabilitiesKHR, nullptr); + PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR = instance.load("vkGetDisplayPlaneCapabilities2KHR"); + ASSERT_NE(GetDisplayPlaneCapabilities2KHR, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkDisplayPlaneCapabilitiesKHR caps{}; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneCapabilitiesKHR(physical_devices[dev], 0, 0, &caps)); + VkDisplayPlaneCapabilities2KHR caps2{}; + VkDisplayPlaneInfo2KHR info{VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR}; + ASSERT_EQ(VK_SUCCESS, GetDisplayPlaneCapabilities2KHR(physical_devices[dev], &info, &caps2)); + ASSERT_EQ(caps, caps2); + } +} + +// +// VK_EXT_acquire_drm_display +// + +// Test vkAcquireDrmDisplayEXT where nothing supports it. +TEST(LoaderInstPhysDevExts, AcquireDrmDisplayEXTNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT = instance.load("vkAcquireDrmDisplayEXT"); + ASSERT_EQ(AcquireDrmDisplayEXT, nullptr); +} + +// Test vkAcquireDrmDisplayEXT where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, AcquireDrmDisplayEXTNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT = instance.load("vkAcquireDrmDisplayEXT"); + ASSERT_EQ(AcquireDrmDisplayEXT, nullptr); +} + +// Test vkAcquireDrmDisplayEXT where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, AcquireDrmDisplayEXTInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_DISPLAY_EXTENSION_NAME}; + Extension second_ext{VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}; + env.get_test_icd(0).add_instance_extensions({first_ext, second_ext}); + env.get_test_icd(0).physical_devices.push_back({}); + GenerateRandomDisplays(env.get_test_icd(0).physical_devices.back().displays); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT = instance.load("vkAcquireDrmDisplayEXT"); + ASSERT_NE(AcquireDrmDisplayEXT, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkDisplayKHR display = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, AcquireDrmDisplayEXT(physical_device, 0, display)); +} + +// Test vkAcquireDrmDisplayEXT where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, AcquireDrmDisplayEXTMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplays(cur_dev.displays); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT = instance.load("vkAcquireDrmDisplayEXT"); + ASSERT_NE(AcquireDrmDisplayEXT, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkDisplayKHR display = VK_NULL_HANDLE; + if (icd == 1) { + // For this extension, if no support exists (like for ICD 1), the value of 0 should be returned by the + // loader. + ASSERT_EQ(VK_ERROR_EXTENSION_NOT_PRESENT, AcquireDrmDisplayEXT(physical_devices[dev], 0, display)); + } else { + ASSERT_EQ(VK_SUCCESS, AcquireDrmDisplayEXT(physical_devices[dev], 0, display)); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +// Test vkGetDrmDisplayEXT where nothing supports it. +TEST(LoaderInstPhysDevExts, GetDrmDisplayEXTNoSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT = instance.load("vkGetDrmDisplayEXT"); + ASSERT_EQ(GetDrmDisplayEXT, nullptr); +} + +// Test vkGetDrmDisplayEXT where instance supports it, but nothing else. +TEST(LoaderInstPhysDevExts, GetDrmDisplayEXTNoICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(0).physical_devices.push_back({}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME); + instance.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + + PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT = instance.load("vkGetDrmDisplayEXT"); + ASSERT_EQ(GetDrmDisplayEXT, nullptr); +} + +// Test vkGetDrmDisplayEXT where instance and ICD supports it, but device does not support it. +TEST(LoaderInstPhysDevExts, GetDrmDisplayEXTInstanceAndICDSupport) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + Extension first_ext{VK_KHR_DISPLAY_EXTENSION_NAME}; + Extension second_ext{VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}; + env.get_test_icd(0).add_instance_extensions({first_ext, second_ext}); + env.get_test_icd(0).physical_devices.push_back({}); + GenerateRandomDisplays(env.get_test_icd(0).physical_devices.back().displays); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT = instance.load("vkGetDrmDisplayEXT"); + ASSERT_NE(GetDrmDisplayEXT, nullptr); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &driver_count, &physical_device)); + ASSERT_EQ(driver_count, 1U); + + VkDisplayKHR display = VK_NULL_HANDLE; + ASSERT_EQ(VK_SUCCESS, GetDrmDisplayEXT(physical_device, 0, 0, &display)); + ASSERT_EQ(display, env.get_test_icd(0).physical_devices.back().displays[0]); +} + +// Test vkGetDrmDisplayEXT where instance supports it with some ICDs that both support +// and don't support it: +// ICD 0 supports +// Physical device 0 does not +// Physical device 1 does +// Physical device 2 does not +// ICD 1 doesn't support +// Physical device 3 does not +// ICD 2 supports +// Physical device 4 does not +// Physical device 5 does not +// ICD 3 supports +// Physical device 6 does +TEST(LoaderInstPhysDevExts, GetDrmDisplayEXTMixed) { + FrameworkEnvironment env{}; + const uint32_t max_icd_count = 4; + const uint32_t dev_counts[max_icd_count] = {3, 1, 2, 1}; + const uint32_t max_phys_devs = 7; + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, icd != 1 ? VK_API_VERSION_1_1 : VK_API_VERSION_1_0)); + auto& cur_icd = env.get_test_icd(icd); + cur_icd.icd_api_version = VK_API_VERSION_1_0; + cur_icd.add_instance_extension({VK_KHR_DISPLAY_EXTENSION_NAME}); + + // ICD 1 should not have 1.1 + if (icd != 1) { + cur_icd.icd_api_version = VK_API_VERSION_1_1; + cur_icd.add_instance_extension({VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}); + } + + uint32_t rand_vendor_id; + uint32_t rand_driver_vers; + FillInRandomICDInfo(rand_vendor_id, rand_driver_vers); + + for (uint32_t dev = 0; dev < dev_counts[icd]; ++dev) { + uint32_t device_version = VK_API_VERSION_1_0; + cur_icd.physical_devices.push_back({}); + auto& cur_dev = cur_icd.physical_devices.back(); + cur_dev.extensions.push_back({VK_KHR_DISPLAY_EXTENSION_NAME, 0}); + + // 2nd device in ICD 0 and the one device in ICD 3 support the extension and 1.1 + if ((icd == 0 && dev == 1) || icd == 3) { + cur_dev.extensions.push_back({VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME, 0}); + device_version = VK_API_VERSION_1_1; + } + + // Still set physical device properties (so we can determine if device is correct API version) + FillInRandomDeviceProps(cur_dev.properties, device_version, rand_vendor_id, rand_driver_vers); + GenerateRandomDisplays(cur_dev.displays); + } + } + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extensions({VK_KHR_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME}); + instance.CheckCreate(); + + PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT = instance.load("vkGetDrmDisplayEXT"); + ASSERT_NE(GetDrmDisplayEXT, nullptr); + + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties pd_props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &pd_props); + + for (uint32_t icd = 0; icd < max_icd_count; ++icd) { + auto& cur_icd = env.get_test_icd(icd); + bool found = false; + for (uint32_t pd = 0; pd < dev_counts[icd]; ++pd) { + auto& cur_dev = cur_icd.physical_devices[pd]; + // Find the ICD device matching the physical device we're looking at info for so we can compare the + // physical devices info with the returned info. + if (cur_dev.properties.apiVersion == pd_props.apiVersion && cur_dev.properties.deviceID == pd_props.deviceID && + cur_dev.properties.deviceType == pd_props.deviceType && + cur_dev.properties.driverVersion == pd_props.driverVersion && + cur_dev.properties.vendorID == pd_props.vendorID) { + VkDisplayKHR display = VK_NULL_HANDLE; + if (icd == 1) { + // For this extension, if no support exists (like for ICD 1), the value of 0 should be returned by the + // loader. + ASSERT_EQ(VK_ERROR_EXTENSION_NOT_PRESENT, GetDrmDisplayEXT(physical_devices[dev], 0, 0, &display)); + } else { + ASSERT_EQ(VK_SUCCESS, GetDrmDisplayEXT(physical_devices[dev], 0, 0, &display)); + ASSERT_EQ(display, cur_dev.displays[0]); + } + found = true; + break; + } + } + if (found) { + break; + } + } + } +} + +TEST(LoaderInstPhysDevExts, DifferentInstanceExtensions) { + FrameworkEnvironment env{}; + + // Add 3 drivers each of which supports a different instance extension + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(0).add_instance_extension({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({"pd0"}); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(1).add_instance_extension({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(1).physical_devices.push_back({"pd1"}); + env.get_test_icd(1).physical_devices.back().extensions.push_back({VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(2).add_instance_extension({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME}); + env.get_test_icd(2).physical_devices.push_back({"pd2"}); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 0}); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extensions({VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, + VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, + VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME}); + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + + const uint32_t expected_device_count = 3; + auto physical_devices = inst.GetPhysDevs(expected_device_count); + + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferProperties = + inst.load("vkGetPhysicalDeviceExternalBufferPropertiesKHR"); + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphoreProperties = + inst.load("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFenceProperties = + inst.load("vkGetPhysicalDeviceExternalFencePropertiesKHR"); + ASSERT_NE(nullptr, GetPhysicalDeviceExternalBufferProperties); + ASSERT_NE(nullptr, GetPhysicalDeviceExternalSemaphoreProperties); + ASSERT_NE(nullptr, GetPhysicalDeviceExternalFenceProperties); + + // The above are instance extensions, so shouldn't crash even if only one physical device supports each + // extension. + for (uint32_t dev = 0; dev < expected_device_count; ++dev) { + VkPhysicalDeviceExternalBufferInfo ext_buf_info{}; + VkExternalBufferProperties ext_buf_props{}; + VkPhysicalDeviceExternalSemaphoreInfo ext_sem_info{}; + VkExternalSemaphoreProperties ext_sem_props{}; + VkPhysicalDeviceExternalFenceInfo ext_fence_info{}; + VkExternalFenceProperties ext_fence_props{}; + GetPhysicalDeviceExternalBufferProperties(physical_devices[dev], &ext_buf_info, &ext_buf_props); + GetPhysicalDeviceExternalSemaphoreProperties(physical_devices[dev], &ext_sem_info, &ext_sem_props); + GetPhysicalDeviceExternalFenceProperties(physical_devices[dev], &ext_fence_info, &ext_fence_props); + } +} + +TEST(LoaderInstPhysDevExts, DifferentPhysicalDeviceExtensions) { + FrameworkEnvironment env{}; + + // Add 3 drivers each of which supports a different physical device extension + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(0).physical_devices.push_back("pd0"); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(1).physical_devices.push_back("pd1"); + env.get_test_icd(1).physical_devices.back().extensions.push_back({VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(2).physical_devices.push_back("pd2"); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME, 0}); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + + const uint32_t expected_device_count = 3; + auto physical_devices = inst.GetPhysDevs(expected_device_count); + + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR + EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = + inst.load("vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT = + inst.load("vkGetPhysicalDeviceMultisamplePropertiesEXT"); + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT = + inst.load("vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); + ASSERT_NE(nullptr, EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR); + ASSERT_NE(nullptr, GetPhysicalDeviceMultisamplePropertiesEXT); + ASSERT_NE(nullptr, GetPhysicalDeviceCalibrateableTimeDomainsEXT); + + for (uint32_t dev = 0; dev < expected_device_count; ++dev) { + uint32_t extension_count = 0; + std::vector device_extensions; + bool supports_query = false; + bool supports_samples = false; + bool supports_timestamps = false; + ASSERT_EQ(VK_SUCCESS, + inst->vkEnumerateDeviceExtensionProperties(physical_devices[dev], nullptr, &extension_count, nullptr)); + ASSERT_GT(extension_count, 0U); + device_extensions.resize(extension_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_devices[dev], nullptr, &extension_count, + device_extensions.data())); + for (uint32_t ext = 0; ext < extension_count; ++ext) { + if (string_eq(VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, &device_extensions[ext].extensionName[0])) { + supports_query = true; + } + if (string_eq(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, &device_extensions[ext].extensionName[0])) { + supports_samples = true; + } + if (string_eq(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME, &device_extensions[ext].extensionName[0])) { + supports_timestamps = true; + } + } + + // For physical device extensions, they should work for devices that support it and crash for those that don't. + if (supports_query) { + ASSERT_EQ(VK_SUCCESS, EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(physical_devices[dev], 0, nullptr, + nullptr, nullptr)); + } else { + ASSERT_DEATH( + EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(physical_devices[dev], 0, nullptr, nullptr, nullptr), + ""); + ASSERT_FALSE( + log.find("ICD associated with VkPhysicalDevice does not support " + "EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR")); + } + if (supports_samples) { + GetPhysicalDeviceMultisamplePropertiesEXT(physical_devices[dev], VK_SAMPLE_COUNT_2_BIT, nullptr); + } else { + ASSERT_DEATH(GetPhysicalDeviceMultisamplePropertiesEXT(physical_devices[dev], VK_SAMPLE_COUNT_2_BIT, nullptr), ""); + ASSERT_FALSE( + log.find("ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceMultisamplePropertiesEXT")); + } + if (supports_timestamps) { + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceCalibrateableTimeDomainsEXT(physical_devices[dev], nullptr, nullptr)); + } else { + ASSERT_DEATH(GetPhysicalDeviceCalibrateableTimeDomainsEXT(physical_devices[dev], nullptr, nullptr), ""); + ASSERT_FALSE( + log.find("ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceCalibrateableTimeDomainsEXT")); + } + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_regression_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_regression_tests.cpp new file mode 100644 index 0000000000..c2d652f6cd --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_regression_tests.cpp @@ -0,0 +1,4866 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2023-2023 RasterGrid Kft. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +// Test case origin +// LX = lunar exchange +// LVLGH = loader and validation github +// LVLGL = loader and validation gitlab +// VL = Vulkan Loader github +// VVL = Vulkan Validation Layers github + +TEST(CreateInstance, BasicRun) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); +} + +// LX435 +TEST(CreateInstance, ConstInstanceInfo) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + VkInstance inst = VK_NULL_HANDLE; + VkInstanceCreateInfo const info = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, nullptr, 0, nullptr, 0, nullptr, 0, nullptr}; + ASSERT_EQ(env.vulkan_functions.vkCreateInstance(&info, VK_NULL_HANDLE, &inst), VK_SUCCESS); + // Must clean up + env.vulkan_functions.vkDestroyInstance(inst, nullptr); +} + +// VUID-vkDestroyInstance-instance-parameter, VUID-vkDestroyInstance-pAllocator-parameter +TEST(CreateInstance, DestroyInstanceNullHandle) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + env.vulkan_functions.vkDestroyInstance(VK_NULL_HANDLE, nullptr); +} + +// VUID-vkDestroyDevice-device-parameter, VUID-vkDestroyDevice-pAllocator-parameter +TEST(CreateInstance, DestroyDeviceNullHandle) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + env.vulkan_functions.vkDestroyDevice(VK_NULL_HANDLE, nullptr); +} + +// VUID-vkCreateInstance-ppEnabledExtensionNames-01388 +TEST(CreateInstance, ExtensionNotPresent) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension("VK_EXT_validation_features"); // test icd won't report this as supported + inst.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension("Non_existant_extension"); // unknown instance extension + inst.CheckCreate(VK_ERROR_EXTENSION_NOT_PRESENT); + } +} + +TEST(CreateInstance, LayerNotPresent) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer("VK_NON_EXISTANT_LAYER"); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); +} + +TEST(CreateInstance, LayerPresent) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}).add_physical_device({}); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); +} + +TEST(CreateInstance, RelativePaths) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.set_library_path_type(LibraryPathType::relative)).add_physical_device({}); + + const char* layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"} + .set_library_path_type(LibraryPathType::relative)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); +} + +TEST(CreateInstance, ApiVersionBelow1_0) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + DebugUtilsLogger debug_log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, debug_log); + inst.create_info.api_version = 1; + inst.CheckCreate(); + ASSERT_TRUE( + debug_log.find("VkInstanceCreateInfo::pApplicationInfo::apiVersion has value of 1 which is not permitted. If apiVersion is " + "not 0, then it must be " + "greater than or equal to the value of VK_API_VERSION_1_0 [VUID-VkApplicationInfo-apiVersion]")); +} + +TEST(CreateInstance, ConsecutiveCreate) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + for (uint32_t i = 0; i < 100; i++) { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + } +} + +TEST(CreateInstance, ConsecutiveCreateWithoutDestruction) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + std::vector instances; + for (uint32_t i = 0; i < 100; i++) { + instances.emplace_back(env.vulkan_functions); + instances.back().CheckCreate(); + } +} + +TEST(NoDrivers, CreateInstance) { + FrameworkEnvironment env{}; + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); +} + +TEST(EnumerateInstanceLayerProperties, UsageChecks) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + const char* layer_name_1 = "TestLayer1"; + const char* layer_name_2 = "TestLayer1"; + + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer_1.json"); + + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer_2.json"); + + { // OnePass + VkLayerProperties layer_props[2] = {}; + uint32_t layer_count = 2; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&layer_count, layer_props)); + ASSERT_EQ(layer_count, 2U); + auto layers = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, layer_props[1].layerName)); + } + { // OnePass + uint32_t layer_count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&layer_count, nullptr)); + ASSERT_EQ(layer_count, 2U); + + VkLayerProperties layer_props[2] = {}; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&layer_count, layer_props)); + ASSERT_EQ(layer_count, 2U); + ASSERT_TRUE(string_eq(layer_name_1, layer_props[0].layerName)); + ASSERT_TRUE(string_eq(layer_name_2, layer_props[1].layerName)); + } + { // PropertyCountLessThanAvailable + VkLayerProperties layer_props{}; + uint32_t layer_count = 1; + ASSERT_EQ(VK_INCOMPLETE, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&layer_count, &layer_props)); + ASSERT_TRUE(string_eq(layer_name_1, layer_props.layerName)); + } +} + +TEST(EnumerateInstanceExtensionProperties, UsageChecks) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + Extension first_ext{"VK_EXT_validation_features"}; // known instance extensions + Extension second_ext{"VK_EXT_headless_surface"}; + env.reset_icd().add_instance_extensions({first_ext, second_ext}); + + { // One Pass + uint32_t extension_count = 6; + std::array extensions; + ASSERT_EQ(VK_SUCCESS, + env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, extensions.data())); + ASSERT_EQ(extension_count, 6U); // default extensions + our two extensions + + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, first_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, second_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(5).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + } + { // Two Pass + auto extensions = env.GetInstanceExtensions(6); + // loader always adds the debug report & debug utils extensions + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, first_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, second_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(5).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + } +} + +TEST(EnumerateInstanceExtensionProperties, PropertyCountLessThanAvailable) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + uint32_t extension_count = 0; + std::array extensions; + { // use nullptr for null string + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, nullptr)); + ASSERT_EQ(extension_count, 4U); // return debug report & debug utils & portability enumeration & direct driver loading + extension_count = 1; // artificially remove one extension + + ASSERT_EQ(VK_INCOMPLETE, + env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, extensions.data())); + ASSERT_EQ(extension_count, 1U); + // loader always adds the debug report & debug utils extensions + ASSERT_TRUE(string_eq(extensions[0].extensionName, "VK_EXT_debug_report")); + } + { // use "" for null string + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties("", &extension_count, nullptr)); + ASSERT_EQ(extension_count, 4U); // return debug report & debug utils & portability enumeration & direct driver loading + extension_count = 1; // artificially remove one extension + + ASSERT_EQ(VK_INCOMPLETE, + env.vulkan_functions.vkEnumerateInstanceExtensionProperties("", &extension_count, extensions.data())); + ASSERT_EQ(extension_count, 1U); + // loader always adds the debug report & debug utils extensions + ASSERT_TRUE(string_eq(extensions[0].extensionName, "VK_EXT_debug_report")); + } +} + +TEST(EnumerateInstanceExtensionProperties, FilterUnkownInstanceExtensions) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + Extension first_ext{"FirstTestExtension"}; // unknown instance extensions + Extension second_ext{"SecondTestExtension"}; + env.reset_icd().add_instance_extensions({first_ext, second_ext}); + { + auto extensions = env.GetInstanceExtensions(4); + // loader always adds the debug report & debug utils extensions + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + } + { // Disable unknown instance extension filtering + EnvVarWrapper disable_inst_ext_filter_env_var{"VK_LOADER_DISABLE_INST_EXT_FILTER", "1"}; + + auto extensions = env.GetInstanceExtensions(6); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, first_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, second_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(5).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + } +} + +TEST(EnumerateDeviceLayerProperties, LayersMatch) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + { // LayersMatch + auto layer_props = inst.GetActiveLayers(phys_dev, 1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); + } + { // Property count less than available + VkLayerProperties layer_props; + uint32_t layer_count = 0; + ASSERT_EQ(VK_INCOMPLETE, env.vulkan_functions.vkEnumerateDeviceLayerProperties(phys_dev, &layer_count, &layer_props)); + ASSERT_EQ(layer_count, 0U); + } +} + +TEST(EnumerateDeviceExtensionProperties, DeviceExtensionEnumerated) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + std::array device_extensions = {Extension{"MyExtension0", 4}, Extension{"MyExtension1", 7}}; + for (auto& ext : device_extensions) { + driver.physical_devices.front().extensions.push_back(ext); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &driver_count, &physical_device)); + + uint32_t extension_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, nullptr)); + ASSERT_EQ(extension_count, device_extensions.size()); + + std::array enumerated_device_exts; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, + enumerated_device_exts.data())); + ASSERT_EQ(extension_count, device_extensions.size()); + ASSERT_TRUE(device_extensions[0].extensionName == enumerated_device_exts[0].extensionName); + ASSERT_TRUE(device_extensions[0].specVersion == enumerated_device_exts[0].specVersion); +} + +TEST(EnumerateDeviceExtensionProperties, PropertyCountLessThanAvailable) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + std::array device_extensions = {Extension{"MyExtension0", 4}, Extension{"MyExtension1", 7}}; + for (auto& ext : device_extensions) { + driver.physical_devices.front().extensions.push_back(ext); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t driver_count = 1; + VkPhysicalDevice physical_device; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &driver_count, &physical_device)); + + uint32_t extension_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, "", &extension_count, nullptr)); + ASSERT_EQ(extension_count, device_extensions.size()); + extension_count -= 1; + + std::array enumerated_device_exts; + ASSERT_EQ(VK_INCOMPLETE, + inst->vkEnumerateDeviceExtensionProperties(physical_device, "", &extension_count, enumerated_device_exts.data())); + ASSERT_EQ(extension_count, device_extensions.size() - 1); + ASSERT_TRUE(device_extensions[0].extensionName == enumerated_device_exts[0].extensionName); + ASSERT_TRUE(device_extensions[0].specVersion == enumerated_device_exts[0].specVersion); +} + +TEST(EnumerateDeviceExtensionProperties, ZeroPhysicalDeviceExtensions) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + inst.CheckCreate(); + + auto phys_dev = inst.GetPhysDev(); + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + + uint32_t ext_count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &ext_count, nullptr)); + ASSERT_EQ(ext_count, 0U); + VkExtensionProperties ext_props{}; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &ext_count, &ext_props)); + ASSERT_EQ(ext_count, 0U); +} + +void exercise_EnumerateDeviceExtensionProperties(InstWrapper& inst, VkPhysicalDevice physical_device, + std::vector& exts_to_expect) { + { // "expected enumeration pattern" + uint32_t extension_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, nullptr)); + ASSERT_EQ(extension_count, exts_to_expect.size()); + + std::vector enumerated_device_exts{extension_count}; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, + enumerated_device_exts.data())); + ASSERT_EQ(extension_count, exts_to_expect.size()); + for (uint32_t i = 0; i < exts_to_expect.size(); i++) { + ASSERT_TRUE(exts_to_expect[i].extensionName == enumerated_device_exts[i].extensionName); + ASSERT_EQ(exts_to_expect[i].specVersion, enumerated_device_exts[i].specVersion); + } + } + { // "Single call pattern" + uint32_t extension_count = static_cast(exts_to_expect.size()); + std::vector enumerated_device_exts{extension_count}; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, + enumerated_device_exts.data())); + ASSERT_EQ(extension_count, exts_to_expect.size()); + enumerated_device_exts.resize(extension_count); + + ASSERT_EQ(extension_count, exts_to_expect.size()); + for (uint32_t i = 0; i < exts_to_expect.size(); i++) { + ASSERT_TRUE(exts_to_expect[i].extensionName == enumerated_device_exts[i].extensionName); + ASSERT_EQ(exts_to_expect[i].specVersion, enumerated_device_exts[i].specVersion); + } + } + { // pPropertiesCount == NULL + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, nullptr, nullptr)); + } + { // 2nd call pass in way more than in reality + uint32_t extension_count = std::numeric_limits::max(); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, nullptr)); + ASSERT_EQ(extension_count, exts_to_expect.size()); + + // reset size to a not earthshatteringly large number of extensions + extension_count = static_cast(exts_to_expect.size()) * 4; + std::vector enumerated_device_exts{extension_count}; + + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, + enumerated_device_exts.data())); + ASSERT_EQ(extension_count, exts_to_expect.size()); + for (uint32_t i = 0; i < exts_to_expect.size(); i++) { + ASSERT_TRUE(exts_to_expect[i].extensionName == enumerated_device_exts[i].extensionName); + ASSERT_EQ(exts_to_expect[i].specVersion, enumerated_device_exts[i].specVersion); + } + } + { // 2nd call pass in not enough, go through all possible values from 0 to exts_to_expect.size() + uint32_t extension_count = std::numeric_limits::max(); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, nullptr)); + ASSERT_EQ(extension_count, exts_to_expect.size()); + std::vector enumerated_device_exts{extension_count}; + for (uint32_t i = 0; i < exts_to_expect.size() - 1; i++) { + extension_count = i; + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumerateDeviceExtensionProperties(physical_device, nullptr, &extension_count, + enumerated_device_exts.data())); + ASSERT_EQ(extension_count, i); + for (uint32_t j = 0; j < i; j++) { + ASSERT_TRUE(exts_to_expect[j].extensionName == enumerated_device_exts[j].extensionName); + ASSERT_EQ(exts_to_expect[j].specVersion, enumerated_device_exts[j].specVersion); + } + } + } +} + +TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentNoExtensions) { + FrameworkEnvironment env{}; + + std::vector exts = {Extension{"MyDriverExtension0", 4}, Extension{"MyDriverExtension1", 7}, + Extension{"MyDriverExtension2", 6}, Extension{"MyDriverExtension3", 10}}; + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_physical_device("physical_device_0") + .physical_devices.at(0) + .add_extensions(exts); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + exercise_EnumerateDeviceExtensionProperties(inst, inst.GetPhysDev(), exts); +} + +TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithExtensions) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector exts; + std::vector layer_exts; + for (uint32_t i = 0; i < 6; i++) { + exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + layer_exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_device_extensions({layer_exts})), + "implicit_test_layer.json"); + auto& layer = env.get_test_layer(); + layer.device_extensions = exts; + + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4); + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7); + + exts.insert(exts.begin(), driver.physical_devices.front().extensions.begin(), driver.physical_devices.front().extensions.end()); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice physical_device = inst.GetPhysDev(); + exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts); +} + +TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithLotsOfExtensions) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector exts; + std::vector layer_exts; + for (uint32_t i = 0; i < 26; i++) { + exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + layer_exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_device_extensions({layer_exts})), + "implicit_test_layer.json"); + auto& layer = env.get_test_layer(); + layer.device_extensions = exts; + + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4); + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7); + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension2", 6); + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension3", 9); + + exts.insert(exts.begin(), driver.physical_devices.front().extensions.begin(), driver.physical_devices.front().extensions.end()); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice physical_device = inst.GetPhysDev(); + exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts); +} + +TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentWithExtensions) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector exts; + std::vector layer_exts; + for (uint32_t i = 0; i < 6; i++) { + exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + layer_exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_device_extensions({layer_exts})), + "implicit_test_layer.json"); + auto& layer = env.get_test_layer(); + layer.device_extensions = exts; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice physical_device = inst.GetPhysDev(); + exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts); +} + +TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentWithLotsOfExtensions) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector exts; + std::vector layer_exts; + for (uint32_t i = 0; i < 6; i++) { + exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + layer_exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_device_extensions({layer_exts})), + "implicit_test_layer.json"); + auto& layer = env.get_test_layer(); + layer.device_extensions = exts; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice physical_device = inst.GetPhysDev(); + exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts); +} + +TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithDuplicateExtensions) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector exts; + std::vector layer_exts; + for (uint32_t i = 0; i < 26; i++) { + exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + layer_exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_device_extensions({layer_exts})), + "implicit_test_layer.json"); + auto& layer = env.get_test_layer(); + layer.device_extensions = exts; + + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4); + driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7); + + driver.physical_devices.front().extensions.insert(driver.physical_devices.front().extensions.end(), exts.begin(), exts.end()); + exts.emplace_back("MyDriverExtension0", 4); + exts.emplace_back("MyDriverExtension1", 7); + + driver.physical_devices.front().extensions = exts; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice physical_device = inst.GetPhysDev(); + exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts); +} + +TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithOnlyDuplicateExtensions) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector exts; + std::vector layer_exts; + for (uint32_t i = 0; i < 26; i++) { + exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + layer_exts.emplace_back(std::string("LayerExtNumba") + std::to_string(i), i + 10); + } + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_device_extensions({layer_exts})), + "implicit_test_layer.json"); + auto& layer = env.get_test_layer(); + layer.device_extensions = exts; + + driver.physical_devices.front().extensions = exts; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice physical_device = inst.GetPhysDev(); + exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts); +} + +TEST(EnumeratePhysicalDevices, OneCall) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + driver.add_physical_device("physical_device_0"); + driver.add_physical_device("physical_device_1"); + driver.add_physical_device("physical_device_2"); + driver.add_physical_device("physical_device_3"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = static_cast(driver.physical_devices.size()); + std::vector physical_device_handles = std::vector(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles.data())); + ASSERT_EQ(physical_count, returned_physical_count); +} + +TEST(EnumeratePhysicalDevices, TwoCall) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .set_min_icd_interface_version(5) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + + const uint32_t real_device_count = 2; + for (uint32_t i = 0; i < real_device_count; i++) { + driver.add_physical_device(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + std::array physical_device_handles; + ASSERT_EQ(VK_SUCCESS, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, physical_device_handles.data())); + ASSERT_EQ(physical_count, returned_physical_count); +} + +TEST(EnumeratePhysicalDevices, MatchOneAndTwoCallNumbers) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .set_min_icd_interface_version(5) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + + const uint32_t real_device_count = 3; + for (uint32_t i = 0; i < real_device_count; i++) { + driver.add_physical_device(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + } + + InstWrapper inst1{env.vulkan_functions}; + inst1.CheckCreate(); + + uint32_t physical_count_one_call = static_cast(driver.physical_devices.size()); + std::array physical_device_handles_one_call; + ASSERT_EQ(VK_SUCCESS, + inst1->vkEnumeratePhysicalDevices(inst1, &physical_count_one_call, physical_device_handles_one_call.data())); + ASSERT_EQ(real_device_count, physical_count_one_call); + + InstWrapper inst2{env.vulkan_functions}; + inst2.CheckCreate(); + + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst2->vkEnumeratePhysicalDevices(inst2, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + + std::array physical_device_handles; + ASSERT_EQ(VK_SUCCESS, inst2->vkEnumeratePhysicalDevices(inst2, &returned_physical_count, physical_device_handles.data())); + ASSERT_EQ(real_device_count, returned_physical_count); + + ASSERT_EQ(physical_count_one_call, returned_physical_count); +} + +TEST(EnumeratePhysicalDevices, TwoCallIncomplete) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .set_min_icd_interface_version(5) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + + const uint32_t real_device_count = 2; + for (uint32_t i = 0; i < real_device_count; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t physical_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &physical_count, nullptr)); + ASSERT_EQ(physical_count, driver.physical_devices.size()); + + std::array physical; + + auto temp_ptr = std::unique_ptr(new int()); + physical[0] = reinterpret_cast(temp_ptr.get()); + physical[1] = reinterpret_cast(temp_ptr.get()); + + // Use zero for the device count so we can get the VK_INCOMPLETE message and verify nothing was written into physical + physical_count = 0; + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &physical_count, physical.data())); + ASSERT_EQ(physical_count, 0U); + ASSERT_EQ(static_cast(physical[0]), static_cast(temp_ptr.get())); + ASSERT_EQ(static_cast(physical[1]), static_cast(temp_ptr.get())); + + // Remove one from the physical device count so we can get the VK_INCOMPLETE message + physical_count = 1; + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &physical_count, physical.data())); + ASSERT_EQ(physical_count, 1U); + ASSERT_EQ(static_cast(physical[1]), static_cast(temp_ptr.get())); + + physical_count = 2; + std::array physical_2; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &physical_count, physical_2.data())); + + // Verify that the first physical device shows up in the list of the second ones + ASSERT_TRUE(std::find(physical_2.begin(), physical_2.end(), physical[0]) != physical_2.end()); +} + +TEST(EnumeratePhysicalDevices, ZeroPhysicalDevices) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); + inst.CheckCreate(); + + uint32_t count = 0; + ASSERT_EQ(VK_ERROR_INITIALIZATION_FAILED, env.vulkan_functions.vkEnumeratePhysicalDevices(inst, &count, nullptr)); + ASSERT_EQ(count, 0U); +} + +TEST(EnumeratePhysicalDevices, ZeroPhysicalDevicesAfterCreateInstance) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)).set_min_icd_interface_version(5); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + driver.physical_devices.clear(); + + uint32_t physical_device_count = 1000; // not zero starting value + VkPhysicalDevice physical_device{}; + + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, inst->vkEnumeratePhysicalDevices(inst, &physical_device_count, nullptr)); + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, inst->vkEnumeratePhysicalDevices(inst, &physical_device_count, &physical_device)); + + uint32_t physical_device_group_count = 1000; // not zero starting value + VkPhysicalDeviceGroupProperties physical_device_group_properties{}; + + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, inst->vkEnumeratePhysicalDeviceGroups(inst, &physical_device_group_count, nullptr)); + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + inst->vkEnumeratePhysicalDeviceGroups(inst, &physical_device_group_count, &physical_device_group_properties)); +} + +TEST(EnumeratePhysicalDevices, CallTwiceNormal) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + for (size_t i = 0; i < 4; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Call twice in a row and make sure nothing bad happened + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = static_cast(driver.physical_devices.size()); + std::vector physical_device_handles_1 = std::vector(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_1.data())); + ASSERT_EQ(physical_count, returned_physical_count); + std::vector physical_device_handles_2 = std::vector(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_2.data())); + ASSERT_EQ(physical_count, returned_physical_count); + // Make sure devices are same between the two + for (uint32_t count = 0; count < driver.physical_devices.size(); ++count) { + ASSERT_EQ(physical_device_handles_1[count], physical_device_handles_2[count]); + } +} + +TEST(EnumeratePhysicalDevices, CallTwiceIncompleteOnceNormal) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + for (size_t i = 0; i < 8; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Query 3, then 5, then all + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = 3; + std::vector physical_device_handles_1 = std::vector(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_1.data())); + ASSERT_EQ(3U, returned_physical_count); + returned_physical_count = 5; + std::vector physical_device_handles_2 = std::vector(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_2.data())); + ASSERT_EQ(5U, returned_physical_count); + returned_physical_count = physical_count; + std::vector physical_device_handles_3 = std::vector(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_3.data())); + ASSERT_EQ(physical_count, returned_physical_count); + // Make sure devices are same between the three + for (uint32_t count = 0; count < driver.physical_devices.size(); ++count) { + if (count < physical_device_handles_1.size()) { + ASSERT_EQ(physical_device_handles_1[count], physical_device_handles_3[count]); + } + if (count < physical_device_handles_2.size()) { + ASSERT_EQ(physical_device_handles_2[count], physical_device_handles_3[count]); + } + } +} + +TEST(EnumeratePhysicalDevices, CallThriceSuccessReduce) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + for (size_t i = 0; i < 8; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + // Query all at first, then 5, then 3 + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = physical_count; + std::vector physical_device_handles_1 = std::vector(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_1.data())); + ASSERT_EQ(physical_count, returned_physical_count); + returned_physical_count = 5; + std::vector physical_device_handles_2 = std::vector(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_2.data())); + ASSERT_EQ(5U, returned_physical_count); + returned_physical_count = 3; + std::vector physical_device_handles_3 = std::vector(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_3.data())); + ASSERT_EQ(3U, returned_physical_count); + // Make sure devices are same between the three + for (uint32_t count = 0; count < driver.physical_devices.size(); ++count) { + if (count < physical_device_handles_2.size()) { + ASSERT_EQ(physical_device_handles_2[count], physical_device_handles_1[count]); + } + if (count < physical_device_handles_3.size()) { + ASSERT_EQ(physical_device_handles_3[count], physical_device_handles_1[count]); + } + } +} + +TEST(EnumeratePhysicalDevices, CallThriceAddInBetween) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + driver.physical_devices.emplace_back("physical_device_0"); + driver.physical_devices.emplace_back("physical_device_1"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = physical_count; + std::vector physical_device_handles_1 = std::vector(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_1.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + driver.physical_devices.emplace_back("physical_device_2"); + driver.physical_devices.emplace_back("physical_device_3"); + + std::vector physical_device_handles_2 = std::vector(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_2.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + physical_count = static_cast(driver.physical_devices.size()); + returned_physical_count = physical_count; + std::vector physical_device_handles_3 = std::vector(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_3.data())); + ASSERT_EQ(physical_count, returned_physical_count); + // Make sure devices are same between the three + for (uint32_t count = 0; count < physical_device_handles_3.size(); ++count) { + if (count < physical_device_handles_1.size()) { + ASSERT_EQ(physical_device_handles_1[count], physical_device_handles_3[count]); + } + if (count < physical_device_handles_2.size()) { + ASSERT_EQ(physical_device_handles_2[count], physical_device_handles_3[count]); + } + } +} + +TEST(EnumeratePhysicalDevices, CallThriceRemoveInBetween) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + for (size_t i = 0; i < 4; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = physical_count; + std::vector physical_device_handles_1 = std::vector(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_1.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + // Delete the 2nd physical device + driver.physical_devices.erase(std::next(driver.physical_devices.begin())); + + physical_count = static_cast(driver.physical_devices.size()); + std::vector physical_device_handles_2 = std::vector(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_2.data())); + ASSERT_EQ(physical_count, returned_physical_count); + physical_device_handles_2.resize(returned_physical_count); + + returned_physical_count = physical_count; + std::vector physical_device_handles_3 = std::vector(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_device_handles_3.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + // Make sure one has 1 more device that two or three + ASSERT_EQ(physical_device_handles_1.size(), physical_device_handles_2.size() + 1); + ASSERT_EQ(physical_device_handles_1.size(), physical_device_handles_3.size() + 1); + + // Make sure the devices in two and three are all found in one + uint32_t two_found = 0; + uint32_t three_found = 0; + for (uint32_t count = 0; count < physical_device_handles_1.size(); ++count) { + for (uint32_t int_count = 0; int_count < physical_device_handles_2.size(); ++int_count) { + if (physical_device_handles_2[int_count] == physical_device_handles_1[count]) { + two_found++; + break; + } + } + for (uint32_t int_count = 0; int_count < physical_device_handles_3.size(); ++int_count) { + if (physical_device_handles_3[int_count] == physical_device_handles_1[count]) { + three_found++; + break; + } + } + } + ASSERT_EQ(two_found, returned_physical_count); + ASSERT_EQ(three_found, returned_physical_count); +} + +TEST(EnumeratePhysicalDevices, MultipleAddRemoves) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5); + + for (size_t i = 0; i < 4; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + } + std::array, 8> physical_dev_handles; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + uint32_t physical_count = static_cast(driver.physical_devices.size()); + uint32_t returned_physical_count = physical_count; + physical_dev_handles[0].resize(physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[0].data())); + ASSERT_EQ(physical_count, returned_physical_count); + + // Delete the 2nd physical device (0, 2, 3) + driver.physical_devices.erase(std::next(driver.physical_devices.begin())); + + // Query using old number from last call (4), but it should only return 3 + physical_count = static_cast(driver.physical_devices.size()); + physical_dev_handles[1].resize(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[1].data())); + ASSERT_EQ(physical_count, returned_physical_count); + physical_dev_handles[1].resize(returned_physical_count); + + // Add two new physical devices to the front (A, B, 0, 2, 3) + driver.physical_devices.emplace(driver.physical_devices.begin(), "physical_device_B"); + driver.physical_devices.emplace(driver.physical_devices.begin(), "physical_device_A"); + + // Query using old number from last call (3), but it should be 5 + physical_count = static_cast(driver.physical_devices.size()); + physical_dev_handles[2].resize(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[2].data())); + ASSERT_EQ(physical_count - 2, returned_physical_count); + physical_dev_handles[2].resize(returned_physical_count); + + // Query again to get all 5 + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, nullptr)); + physical_dev_handles[3].resize(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[3].data())); + ASSERT_EQ(physical_count, returned_physical_count); + + // Delete last two physical devices (A, B, 0, 2) + driver.physical_devices.pop_back(); + + // Query using old number from last call (5), but it should be 4 + physical_count = static_cast(driver.physical_devices.size()); + physical_dev_handles[4].resize(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[4].data())); + ASSERT_EQ(physical_count, returned_physical_count); + physical_dev_handles[4].resize(returned_physical_count); + // Adjust size and query again, should be the same + physical_dev_handles[5].resize(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[5].data())); + + // Insert a new physical device (A, B, C, 0, 2) + driver.physical_devices.insert(driver.physical_devices.begin() + 2, "physical_device_C"); + + // Query using old number from last call (4), but it should be 5 + physical_count = static_cast(driver.physical_devices.size()); + physical_dev_handles[6].resize(returned_physical_count); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[6].data())); + ASSERT_EQ(physical_count - 1, returned_physical_count); + // Query again to get all 5 + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, nullptr)); + physical_dev_handles[7].resize(returned_physical_count); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_physical_count, physical_dev_handles[7].data())); + + // Check final results + // One [4] - 0, 1, 2, 3 + // Two [3] - 0, 2, 3 + // Three [3] - A, B, 0 + // Four [5] - A, B, 0, 2, 3 + // Five [4] - A, B, 0, 2 + // Six [4] - A, B, 0, 2 + // Seven [4] - A, B, C, 0 + // Eight [5] - A, B, C, 0, 2 + ASSERT_EQ(4U, physical_dev_handles[0].size()); + ASSERT_EQ(3U, physical_dev_handles[1].size()); + ASSERT_EQ(3U, physical_dev_handles[2].size()); + ASSERT_EQ(5U, physical_dev_handles[3].size()); + ASSERT_EQ(4U, physical_dev_handles[4].size()); + ASSERT_EQ(4U, physical_dev_handles[5].size()); + ASSERT_EQ(4U, physical_dev_handles[6].size()); + ASSERT_EQ(5U, physical_dev_handles[7].size()); + + // Make sure the devices in two and three are all found in one + uint32_t found_items[8]{}; + for (uint32_t handle = 1; handle < 8; ++handle) { + for (uint32_t count = 0; count < physical_dev_handles[0].size(); ++count) { + for (uint32_t int_count = 0; int_count < physical_dev_handles[handle].size(); ++int_count) { + if (physical_dev_handles[handle][int_count] == physical_dev_handles[0][count]) { + found_items[handle]++; + break; + } + } + } + } + // Items matching from first call (must be >= since handle re-use does occur) + ASSERT_EQ(found_items[1], 3U); + ASSERT_GE(found_items[2], 1U); + ASSERT_GE(found_items[3], 3U); + ASSERT_GE(found_items[4], 2U); + ASSERT_GE(found_items[5], 2U); + ASSERT_GE(found_items[6], 1U); + ASSERT_GE(found_items[7], 2U); + + memset(found_items, 0, 8 * sizeof(uint32_t)); + for (uint32_t handle = 0; handle < 7; ++handle) { + for (uint32_t count = 0; count < physical_dev_handles[7].size(); ++count) { + for (uint32_t int_count = 0; int_count < physical_dev_handles[handle].size(); ++int_count) { + if (physical_dev_handles[handle][int_count] == physical_dev_handles[7][count]) { + found_items[handle]++; + break; + } + } + } + } + // Items matching from last call (must be >= since handle re-use does occur) + ASSERT_GE(found_items[0], 2U); + ASSERT_GE(found_items[1], 2U); + ASSERT_GE(found_items[2], 3U); + ASSERT_GE(found_items[3], 4U); + ASSERT_GE(found_items[4], 4U); + ASSERT_GE(found_items[5], 4U); + ASSERT_GE(found_items[6], 4U); +} + +TEST(EnumeratePhysicalDevices, OneDriverWithWrongErrorCodes) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + { + env.get_test_icd().set_enum_physical_devices_return_code(VK_ERROR_INITIALIZATION_FAILED); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 0); + } + { + env.get_test_icd().set_enum_physical_devices_return_code(VK_ERROR_INCOMPATIBLE_DRIVER); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 0); + } + { + env.get_test_icd().set_enum_physical_devices_return_code(VK_ERROR_SURFACE_LOST_KHR); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 0); + } +} + +TEST(EnumeratePhysicalDevices, TwoDriversOneWithWrongErrorCodes) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + TestICD& icd1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + { + icd1.set_enum_physical_devices_return_code(VK_ERROR_INITIALIZATION_FAILED); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 1); + } + { + icd1.set_enum_physical_devices_return_code(VK_ERROR_INCOMPATIBLE_DRIVER); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 1); + } + { + icd1.set_enum_physical_devices_return_code(VK_ERROR_SURFACE_LOST_KHR); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 1); + } +} + +TEST(CreateDevice, ExtensionNotPresent) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_extension("NotPresent"); + + dev.CheckCreate(phys_dev, VK_ERROR_EXTENSION_NOT_PRESENT); +} + +// LX535 / MI-76: Device layers are deprecated. +// Ensure that no errors occur if a bogus device layer list is passed to vkCreateDevice. +// https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation +TEST(CreateDevice, LayersNotPresent) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_layer("NotPresent"); + + dev.CheckCreate(phys_dev); +} + +// Device layers are deprecated. +// Ensure that no error occur if instance and device are created with the same list of layers. +// https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation +TEST(CreateDevice, MatchInstanceAndDeviceLayers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_layer(layer_name); + + dev.CheckCreate(phys_dev); +} + +// Device layers are deprecated. +// Ensure that a message is generated when instance and device are created with different list of layers. +// At best , the user can list only instance layers in the device layer list +// https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation +TEST(CreateDevice, UnmatchInstanceAndDeviceLayers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + DebugUtilsLogger debug_log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, debug_log); + inst.CheckCreate(); + + DebugUtilsWrapper log{inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_layer(layer_name); + + dev.CheckCreate(phys_dev); + + ASSERT_TRUE( + log.find("loader_create_device_chain: Using deprecated and ignored 'ppEnabledLayerNames' member of 'VkDeviceCreateInfo' " + "when creating a Vulkan device.")); +} + +// Device layers are deprecated. +// Ensure that when VkInstanceCreateInfo is deleted, the check of the instance layer lists is running correctly during VkDevice +// creation +// https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation +TEST(CreateDevice, CheckCopyOfInstanceLayerNames) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + { + // We intentionally create a local InstanceCreateInfo that goes out of scope at the } so that when dev.CheckCreate is called + // the layer name pointers are no longer valid + InstanceCreateInfo create_info{}; + create_info.add_layer(layer_name); + inst.CheckCreateWithInfo(create_info); + } + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.create_info.add_layer(layer_name); + + dev.CheckCreate(phys_dev); +} + +TEST(CreateDevice, ConsecutiveCreate) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + for (uint32_t i = 0; i < 100; i++) { + driver.physical_devices.emplace_back("physical_device_0"); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(100); + for (uint32_t i = 0; i < 100; i++) { + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_devs[i]); + } +} + +TEST(CreateDevice, ConsecutiveCreateWithoutDestruction) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + for (uint32_t i = 0; i < 100; i++) { + driver.physical_devices.emplace_back("physical_device_0"); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(100); + + std::vector devices; + for (uint32_t i = 0; i < 100; i++) { + devices.emplace_back(inst); + DeviceWrapper& dev = devices.back(); + + dev.CheckCreate(phys_devs[i]); + } +} + +TEST(TryLoadWrongBinaries, WrongICD) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + env.add_icd(TestICDDetails(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE).set_is_fake(true)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(); + +#if _WIN32 || _WIN64 + ASSERT_TRUE(log.find("Failed to open dynamic library")); +#endif +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +#if defined(__x86_64__) || __ppc64__ || __aarch64__ + ASSERT_TRUE(log.find("wrong ELF class: ELFCLASS32")); +#else + ASSERT_TRUE(log.find("wrong ELF class: ELFCLASS64")); +#endif +#endif + + uint32_t driver_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &driver_count, nullptr)); + ASSERT_EQ(driver_count, 1U); +} + +TEST(TryLoadWrongBinaries, WrongExplicit) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "DummyLayerExplicit"; + env.add_fake_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE)), + "dummy_test_layer.json"); + + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_name, layer_props[0].layerName)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst.create_info, log); + + // Explicit layer not found should generate a VK_ERROR_LAYER_NOT_PRESENT error message. + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + + // Should get an error message for the explicit layer +#if !defined(__APPLE__) + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" was wrong bit-type!"))); +#else // __APPLE__ + // Apple only throws a wrong library type of error + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" failed to load!"))); +#endif // __APPLE__ +} + +TEST(TryLoadWrongBinaries, WrongImplicit) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "DummyLayerImplicit0"; + env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE) + .set_disable_environment("DISABLE_ENV")), + "dummy_test_layer.json"); + + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_name, layer_props[0].layerName)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + + // We don't want to return VK_ERROR_LAYER_NOT_PRESENT for missing implicit layers because it's not the + // application asking for them. + inst.CheckCreate(); + +#if !defined(__APPLE__) + // Should get an info message for the bad implicit layer + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" was wrong bit-type."))); +#else // __APPLE__ + // Apple only throws a wrong library type of error + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" failed to load."))); +#endif // __APPLE__ +} + +TEST(TryLoadWrongBinaries, WrongExplicitAndImplicit) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name_0 = "DummyLayerExplicit"; + env.add_fake_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name_0).set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE)), + "dummy_test_layer_0.json"); + const char* layer_name_1 = "DummyLayerImplicit"; + env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_1) + .set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE) + .set_disable_environment("DISABLE_ENV")), + "dummy_test_layer_1.json"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(check_permutation({layer_name_0, layer_name_1}, layer_props)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name_0); + FillDebugUtilsCreateDetails(inst.create_info, log); + + // Explicit layer not found should generate a VK_ERROR_LAYER_NOT_PRESENT error message. + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + +#if !defined(__APPLE__) + // Should get error messages for both (the explicit is second and we don't want the implicit to return before the explicit + // triggers a failure during vkCreateInstance) + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_0) + std::string("\" was wrong bit-type!"))); + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_1) + std::string("\" was wrong bit-type."))); +#else // __APPLE__ + // Apple only throws a wrong library type of error + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_0) + std::string("\" failed to load!"))); + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_1) + std::string("\" failed to load."))); +#endif // __APPLE__ +} + +TEST(TryLoadWrongBinaries, WrongExplicitAndImplicitErrorOnly) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name_0 = "DummyLayerExplicit"; + env.add_fake_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name_0).set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE)), + "dummy_test_layer_0.json"); + const char* layer_name_1 = "DummyLayerImplicit"; + env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_1) + .set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE) + .set_disable_environment("DISABLE_ENV")), + "dummy_test_layer_1.json"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(check_permutation({layer_name_0, layer_name_1}, layer_props)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name_0); + FillDebugUtilsCreateDetails(inst.create_info, log); + + // Explicit layer not found should generate a VK_ERROR_LAYER_NOT_PRESENT error message. + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + +#if !defined(__APPLE__) + // Should not get an error messages for either + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_0) + std::string("\" was wrong bit-type!"))); + ASSERT_FALSE(log.find(std::string("Requested layer \"") + std::string(layer_name_1) + std::string("\" was wrong bit-type."))); +#else // __APPLE__ + // Apple only throws a wrong library type of error + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_0) + std::string("\" failed to load!"))); + ASSERT_FALSE(log.find(std::string("Requested layer \"") + std::string(layer_name_1) + std::string("\" failed to load."))); +#endif // __APPLE__ +} + +TEST(TryLoadWrongBinaries, BadExplicit) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "DummyLayerExplicit"; + env.add_fake_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_BAD)), + "dummy_test_layer.json"); + + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_name, layer_props[0].layerName)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst.create_info, log); + + // Explicit layer not found should generate a VK_ERROR_LAYER_NOT_PRESENT error message. + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + +// Should get an error message for the bad explicit +#if defined(WIN32) + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" was wrong bit-type!"))); +#else + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" failed to load!"))); +#endif // defined(WIN32) +} + +TEST(TryLoadWrongBinaries, BadImplicit) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name = "DummyLayerImplicit0"; + env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_BAD) + .set_disable_environment("DISABLE_ENV")), + "dummy_test_layer.json"); + + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_name, layer_props[0].layerName)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + + // We don't want to return VK_ERROR_LAYER_NOT_PRESENT for missing implicit layers because it's not the + // application asking for them. + inst.CheckCreate(); + + // Should get an info message for the bad implicit +#if defined(WIN32) + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" was wrong bit-type."))); +#else + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name) + std::string("\" failed to load."))); +#endif // defined(WIN32) +} + +TEST(TryLoadWrongBinaries, BadExplicitAndImplicit) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); + + const char* layer_name_0 = "DummyLayerExplicit"; + env.add_fake_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name_0).set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_BAD)), + "dummy_test_layer_0.json"); + const char* layer_name_1 = "DummyLayerImplicit0"; + env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name_1) + .set_lib_path(CURRENT_PLATFORM_DUMMY_BINARY_BAD) + .set_disable_environment("DISABLE_ENV")), + "dummy_test_layer_1.json"); + + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(check_permutation({layer_name_0, layer_name_1}, layer_props)); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name_0); + FillDebugUtilsCreateDetails(inst.create_info, log); + + // Explicit layer not found should generate a VK_ERROR_LAYER_NOT_PRESENT error message. + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); +#if defined(WIN32) + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_0) + std::string("\" was wrong bit-type!"))); + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_1) + std::string("\" was wrong bit-type."))); +#else + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_0) + std::string("\" failed to load!"))); + ASSERT_TRUE(log.find(std::string("Requested layer \"") + std::string(layer_name_1) + std::string("\" failed to load."))); +#endif // defined(WIN32) +} + +TEST(TryLoadWrongBinaries, WrongArchDriver) { + FrameworkEnvironment env{}; + // Intentionally set the wrong arch + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.icd_manifest.set_library_arch(sizeof(void*) == 4 ? "64" : "32")) + .add_physical_device("physical_device_0"); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + ASSERT_TRUE( + log.find("loader_parse_icd_manifest: Driver library architecture doesn't match the current running architecture, skipping " + "this driver")); +} + +TEST(TryLoadWrongBinaries, WrongArchLayer) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}).add_physical_device("physical_device_0"); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + // Intentionally set the wrong arch + .set_library_arch(sizeof(void*) == 4 ? "64" : "32")), + "test_layer.json"); + + DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, log); + inst.create_info.add_layer(layer_name); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + ASSERT_TRUE(log.find(std::string("The library architecture in layer ") + env.get_shimmed_layer_manifest_path(0).string() + + " doesn't match the current running architecture, skipping this layer")); +} + +TEST(EnumeratePhysicalDeviceGroups, OneCall) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + + // ICD contains 3 devices in two groups + for (size_t i = 0; i < 3; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[1]); + driver.physical_device_groups.emplace_back(driver.physical_devices[2]); + const uint32_t max_physical_device_count = 3; + + // Core function + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + auto physical_devices = std::vector(max_physical_device_count); + uint32_t returned_phys_dev_count = max_physical_device_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + handle_assert_has_values(physical_devices); + + uint32_t group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = group_count; + std::vector group_props{}; + group_props.resize(group_count, VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props.data())); + ASSERT_EQ(group_count, returned_group_count); + + // Make sure each physical device shows up in a group, but only once + std::array found{false}; + for (uint32_t group = 0; group < group_count; ++group) { + for (uint32_t g_dev = 0; g_dev < group_props[group].physicalDeviceCount; ++g_dev) { + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + if (physical_devices[dev] == group_props[group].physicalDevices[g_dev]) { + ASSERT_EQ(false, found[dev]); + found[dev] = true; + break; + } + } + } + } + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + ASSERT_EQ(true, found[dev]); + } + for (auto& group : group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + VkBaseInStructure spacer_structure{}; + spacer_structure.sType = static_cast(100000); + spacer_structure.pNext = reinterpret_cast(&group_info); + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &spacer_structure; + dev.CheckCreate(group.physicalDevices[0]); + + // This convoluted logic makes sure that the pNext chain is unmolested after being passed into vkCreateDevice + // While not expected for applications to iterate over this chain, since it is const it is important to make sure + // that the chain didn't change somehow, and especially so that iterating it doesn't crash. + int count = 0; + const VkBaseInStructure* pNext = reinterpret_cast(dev.create_info.dev.pNext); + while (pNext != nullptr) { + if (pNext->sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO) { + ASSERT_EQ(&group_info, reinterpret_cast(pNext)); + } + if (pNext->sType == 100000) { + ASSERT_EQ(&spacer_structure, pNext); + } + pNext = pNext->pNext; + count++; + } + ASSERT_EQ(count, 2); + } + } + driver.add_instance_extension({VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME}); + // Extension + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME); + inst.CheckCreate(); + + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = inst.load("vkEnumeratePhysicalDeviceGroupsKHR"); + + auto physical_devices = std::vector(max_physical_device_count); + uint32_t returned_phys_dev_count = max_physical_device_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + handle_assert_has_values(physical_devices); + + uint32_t group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = group_count; + std::vector group_props{}; + group_props.resize(group_count, VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, group_props.data())); + ASSERT_EQ(group_count, returned_group_count); + + // Make sure each physical device shows up in a group, but only once + std::array found{false}; + for (uint32_t group = 0; group < group_count; ++group) { + for (uint32_t g_dev = 0; g_dev < group_props[group].physicalDeviceCount; ++g_dev) { + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + if (physical_devices[dev] == group_props[group].physicalDevices[g_dev]) { + ASSERT_EQ(false, found[dev]); + found[dev] = true; + break; + } + } + } + } + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + ASSERT_EQ(true, found[dev]); + } + for (auto& group : group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + VkBaseInStructure spacer_structure{}; + spacer_structure.sType = static_cast(100000); + spacer_structure.pNext = reinterpret_cast(&group_info); + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &spacer_structure; + dev.CheckCreate(group.physicalDevices[0]); + } + } +} + +TEST(EnumeratePhysicalDeviceGroups, TwoCall) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + + // ICD contains 3 devices in two groups + for (size_t i = 0; i < 3; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[1]); + driver.physical_device_groups.emplace_back(driver.physical_devices[2]); + const uint32_t max_physical_device_count = 3; + + // Core function + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + auto physical_devices = std::vector(max_physical_device_count); + uint32_t returned_phys_dev_count = max_physical_device_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + handle_assert_has_values(physical_devices); + + uint32_t group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, nullptr)); + ASSERT_EQ(group_count, returned_group_count); + + std::vector group_props{}; + group_props.resize(group_count, VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props.data())); + ASSERT_EQ(group_count, returned_group_count); + + // Make sure each physical device shows up in a group, but only once + std::array found{false}; + for (uint32_t group = 0; group < group_count; ++group) { + for (uint32_t g_dev = 0; g_dev < group_props[group].physicalDeviceCount; ++g_dev) { + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + if (physical_devices[dev] == group_props[group].physicalDevices[g_dev]) { + ASSERT_EQ(false, found[dev]); + found[dev] = true; + break; + } + } + } + } + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + ASSERT_EQ(true, found[dev]); + } + for (auto& group : group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } + } + driver.add_instance_extension({VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME}); + // Extension + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension("VK_KHR_device_group_creation"); + inst.CheckCreate(); + + auto physical_devices = std::vector(max_physical_device_count); + uint32_t returned_phys_dev_count = max_physical_device_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &returned_phys_dev_count, physical_devices.data())); + handle_assert_has_values(physical_devices); + + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = inst.load("vkEnumeratePhysicalDeviceGroupsKHR"); + + uint32_t group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = 0; + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, nullptr)); + ASSERT_EQ(group_count, returned_group_count); + + std::vector group_props{}; + group_props.resize(group_count, VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, group_props.data())); + ASSERT_EQ(group_count, returned_group_count); + + // Make sure each physical device shows up in a group, but only once + std::array found{false}; + for (uint32_t group = 0; group < group_count; ++group) { + for (uint32_t g_dev = 0; g_dev < group_props[group].physicalDeviceCount; ++g_dev) { + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + if (physical_devices[dev] == group_props[group].physicalDevices[g_dev]) { + ASSERT_EQ(false, found[dev]); + found[dev] = true; + break; + } + } + } + } + for (uint32_t dev = 0; dev < max_physical_device_count; ++dev) { + ASSERT_EQ(true, found[dev]); + } + for (auto& group : group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } + } +} + +TEST(EnumeratePhysicalDeviceGroups, TwoCallIncomplete) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + + // ICD contains 3 devices in two groups + for (size_t i = 0; i < 3; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[1]); + driver.physical_device_groups.emplace_back(driver.physical_devices[2]); + + // Core function + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + uint32_t group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, nullptr)); + ASSERT_EQ(group_count, returned_group_count); + + returned_group_count = 1; + std::array group_props{}; + group_props[0].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props.data())); + ASSERT_EQ(1U, returned_group_count); + + returned_group_count = 2; + std::array group_props_2{}; + group_props_2[0].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + group_props_2[1].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_2.data())); + ASSERT_EQ(2U, returned_group_count); + + ASSERT_EQ(group_props[0].physicalDeviceCount, group_props_2[0].physicalDeviceCount); + ASSERT_EQ(group_props[0].physicalDevices[0], group_props_2[0].physicalDevices[0]); + ASSERT_EQ(group_props[0].physicalDevices[1], group_props_2[0].physicalDevices[1]); + + for (auto& group : group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } + } + driver.add_instance_extension({VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME}); + // Extension + { + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension("VK_KHR_device_group_creation"); + inst.CheckCreate(); + + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = inst.load("vkEnumeratePhysicalDeviceGroupsKHR"); + + uint32_t group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = 0; + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, nullptr)); + ASSERT_EQ(group_count, returned_group_count); + + returned_group_count = 1; + std::array group_props{}; + group_props[0].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + ASSERT_EQ(VK_INCOMPLETE, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, group_props.data())); + ASSERT_EQ(1U, returned_group_count); + + returned_group_count = 2; + std::array group_props_2{}; + group_props_2[0].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + group_props_2[1].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, group_props_2.data())); + ASSERT_EQ(2U, returned_group_count); + + ASSERT_EQ(group_props[0].physicalDeviceCount, group_props_2[0].physicalDeviceCount); + ASSERT_EQ(group_props[0].physicalDevices[0], group_props_2[0].physicalDevices[0]); + ASSERT_EQ(group_props[0].physicalDevices[1], group_props_2[0].physicalDevices[1]); + + for (auto& group : group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } + } +} + +// Call the core vkEnumeratePhysicalDeviceGroups and the extension +// vkEnumeratePhysicalDeviceGroupsKHR, and make sure they return the same info. +TEST(EnumeratePhysicalDeviceGroups, TestCoreVersusExtensionSameReturns) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1) + .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}) + .add_instance_extension({VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME}); + + // Generate the devices + for (size_t i = 0; i < 6; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + + // Generate the starting groups + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.emplace_back(driver.physical_devices[1]); + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[2]) + .use_physical_device(driver.physical_devices[3]); + driver.physical_device_groups.emplace_back(driver.physical_devices[4]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[5]); + + uint32_t expected_counts[3] = {1, 3, 2}; + uint32_t core_group_count = 0; + std::vector core_group_props{}; + uint32_t ext_group_count = 0; + std::vector ext_group_props{}; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.create_info.add_extension("VK_KHR_device_group_creation"); + inst.CheckCreate(); + + // Core function + core_group_count = static_cast(driver.physical_device_groups.size()); + uint32_t returned_group_count = 0; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, nullptr)); + ASSERT_EQ(core_group_count, returned_group_count); + + core_group_props.resize(returned_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, core_group_props.data())); + ASSERT_EQ(core_group_count, returned_group_count); + + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = inst.load("vkEnumeratePhysicalDeviceGroupsKHR"); + + ext_group_count = static_cast(driver.physical_device_groups.size()); + returned_group_count = 0; + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, nullptr)); + ASSERT_EQ(ext_group_count, returned_group_count); + + ext_group_props.resize(returned_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, vkEnumeratePhysicalDeviceGroupsKHR(inst, &returned_group_count, ext_group_props.data())); + ASSERT_EQ(ext_group_count, returned_group_count); + + // Make sure data from each matches + ASSERT_EQ(core_group_count, 3U); + ASSERT_EQ(ext_group_count, 3U); + for (uint32_t group = 0; group < core_group_count; ++group) { + ASSERT_EQ(core_group_props[group].physicalDeviceCount, expected_counts[group]); + ASSERT_EQ(ext_group_props[group].physicalDeviceCount, expected_counts[group]); + for (uint32_t dev = 0; dev < core_group_props[group].physicalDeviceCount; ++dev) { + ASSERT_EQ(core_group_props[group].physicalDevices[dev], ext_group_props[group].physicalDevices[dev]); + } + } + // Make sure no physical device appears in more than one group + for (uint32_t group1 = 0; group1 < core_group_count; ++group1) { + for (uint32_t group2 = group1 + 1; group2 < core_group_count; ++group2) { + for (uint32_t dev1 = 0; dev1 < core_group_props[group1].physicalDeviceCount; ++dev1) { + for (uint32_t dev2 = 0; dev2 < core_group_props[group1].physicalDeviceCount; ++dev2) { + ASSERT_NE(core_group_props[group1].physicalDevices[dev1], core_group_props[group2].physicalDevices[dev2]); + } + } + } + } + for (auto& group : core_group_props) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } +} + +// Start with 6 devices in 3 different groups, and then add a group, +// querying vkEnumeratePhysicalDeviceGroups before and after the add. +TEST(EnumeratePhysicalDeviceGroups, CallThriceAddGroupInBetween) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1); + + // Generate the devices + for (size_t i = 0; i < 7; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + + // Generate the starting groups + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.emplace_back(driver.physical_devices[1]); + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[2]) + .use_physical_device(driver.physical_devices[3]); + driver.physical_device_groups.emplace_back(driver.physical_devices[4]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[5]); + + uint32_t before_expected_counts[3] = {1, 3, 2}; + uint32_t after_expected_counts[4] = {1, 3, 1, 2}; + uint32_t before_group_count = 3; + uint32_t after_group_count = 4; + uint32_t returned_group_count = 0; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + std::vector group_props_before{}; + group_props_before.resize(before_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = before_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_before.data())); + ASSERT_EQ(before_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_before[group].physicalDeviceCount, before_expected_counts[group]); + } + + // Insert new group after first two + driver.physical_device_groups.insert(driver.physical_device_groups.begin() + 2, driver.physical_devices[6]); + + std::vector group_props_after{}; + group_props_after.resize(before_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_INCOMPLETE, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after.data())); + ASSERT_EQ(before_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_after[group].physicalDeviceCount, after_expected_counts[group]); + } + + group_props_after.resize(after_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = after_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after.data())); + ASSERT_EQ(after_group_count, returned_group_count); + for (uint32_t group = 0; group < after_group_count; ++group) { + ASSERT_EQ(group_props_after[group].physicalDeviceCount, after_expected_counts[group]); + } + + // Make sure all devices in the old group info are still found in the new group info + for (uint32_t group1 = 0; group1 < group_props_before.size(); ++group1) { + for (uint32_t group2 = 0; group2 < group_props_after.size(); ++group2) { + if (group_props_before[group1].physicalDeviceCount == group_props_after[group2].physicalDeviceCount) { + uint32_t found_count = 0; + bool found = false; + for (uint32_t dev1 = 0; dev1 < group_props_before[group1].physicalDeviceCount; ++dev1) { + found = false; + for (uint32_t dev2 = 0; dev2 < group_props_after[group2].physicalDeviceCount; ++dev2) { + if (group_props_before[group1].physicalDevices[dev1] == group_props_after[group2].physicalDevices[dev2]) { + found_count++; + found = true; + break; + } + } + } + ASSERT_EQ(found, found_count == group_props_before[group1].physicalDeviceCount); + } + } + } + for (auto& group : group_props_after) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } +} + +// Start with 7 devices in 4 different groups, and then remove a group, +// querying vkEnumeratePhysicalDeviceGroups before and after the remove. +TEST(EnumeratePhysicalDeviceGroups, CallTwiceRemoveGroupInBetween) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1); + + // Generate the devices + for (size_t i = 0; i < 7; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + + // Generate the starting groups + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.emplace_back(driver.physical_devices[1]); + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[2]) + .use_physical_device(driver.physical_devices[3]); + driver.physical_device_groups.emplace_back(driver.physical_devices[4]); + driver.physical_device_groups.emplace_back(driver.physical_devices[5]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[6]); + + uint32_t before_expected_counts[4] = {1, 3, 1, 2}; + uint32_t after_expected_counts[3] = {1, 3, 2}; + uint32_t before_group_count = 4; + uint32_t after_group_count = 3; + uint32_t returned_group_count = 0; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + std::vector group_props_before{}; + group_props_before.resize(before_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = before_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_before.data())); + ASSERT_EQ(before_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_before[group].physicalDeviceCount, before_expected_counts[group]); + } + + // Insert new group after first two + driver.physical_device_groups.erase(driver.physical_device_groups.begin() + 2); + + std::vector group_props_after{}; + group_props_after.resize(after_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after.data())); + ASSERT_EQ(after_group_count, returned_group_count); + for (uint32_t group = 0; group < after_group_count; ++group) { + ASSERT_EQ(group_props_after[group].physicalDeviceCount, after_expected_counts[group]); + } + + // Make sure all devices in the new group info are found in the old group info + for (uint32_t group1 = 0; group1 < group_props_after.size(); ++group1) { + for (uint32_t group2 = 0; group2 < group_props_before.size(); ++group2) { + if (group_props_after[group1].physicalDeviceCount == group_props_before[group2].physicalDeviceCount) { + uint32_t found_count = 0; + bool found = false; + for (uint32_t dev1 = 0; dev1 < group_props_after[group1].physicalDeviceCount; ++dev1) { + found = false; + for (uint32_t dev2 = 0; dev2 < group_props_before[group2].physicalDeviceCount; ++dev2) { + if (group_props_after[group1].physicalDevices[dev1] == group_props_before[group2].physicalDevices[dev2]) { + found_count++; + found = true; + break; + } + } + } + ASSERT_EQ(found, found_count == group_props_after[group1].physicalDeviceCount); + } + } + } + for (auto& group : group_props_after) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } +} + +// Start with 6 devices in 3 different groups, and then add a device to the middle group, +// querying vkEnumeratePhysicalDeviceGroups before and after the add. +TEST(EnumeratePhysicalDeviceGroups, CallTwiceAddDeviceInBetween) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1); + + // Generate the devices + for (size_t i = 0; i < 7; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + + // Generate the starting groups + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.emplace_back(driver.physical_devices[1]); + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[2]) + .use_physical_device(driver.physical_devices[3]); + driver.physical_device_groups.emplace_back(driver.physical_devices[4]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[5]); + + uint32_t expected_group_count = 3; + uint32_t before_expected_counts[3] = {1, 3, 2}; + uint32_t after_expected_counts[3] = {1, 4, 2}; + uint32_t returned_group_count = 0; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + std::vector group_props_before{}; + group_props_before.resize(expected_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = expected_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_before.data())); + ASSERT_EQ(expected_group_count, returned_group_count); + for (uint32_t group = 0; group < expected_group_count; ++group) { + ASSERT_EQ(group_props_before[group].physicalDeviceCount, before_expected_counts[group]); + } + + // Insert new device to 2nd group + driver.physical_device_groups[1].use_physical_device(driver.physical_devices[6]); + + std::vector group_props_after{}; + group_props_after.resize(expected_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after.data())); + ASSERT_EQ(expected_group_count, returned_group_count); + for (uint32_t group = 0; group < expected_group_count; ++group) { + ASSERT_EQ(group_props_after[group].physicalDeviceCount, after_expected_counts[group]); + } + + // Make sure all devices in the old group info are still found in the new group info + for (uint32_t group1 = 0; group1 < group_props_before.size(); ++group1) { + for (uint32_t group2 = 0; group2 < group_props_after.size(); ++group2) { + uint32_t found_count = 0; + bool found = false; + for (uint32_t dev1 = 0; dev1 < group_props_before[group1].physicalDeviceCount; ++dev1) { + found = false; + for (uint32_t dev2 = 0; dev2 < group_props_after[group2].physicalDeviceCount; ++dev2) { + if (group_props_before[group1].physicalDevices[dev1] == group_props_after[group2].physicalDevices[dev2]) { + found_count++; + found = true; + break; + } + } + } + ASSERT_EQ(found, found_count != 0 && found_count == before_expected_counts[group1]); + if (found) { + break; + } + } + } + for (auto& group : group_props_after) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } +} + +// Start with 6 devices in 3 different groups, and then remove a device to the middle group, +// querying vkEnumeratePhysicalDeviceGroups before and after the remove. +TEST(EnumeratePhysicalDeviceGroups, CallTwiceRemoveDeviceInBetween) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1); + + // Generate the devices + for (size_t i = 0; i < 6; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + + // Generate the starting groups + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.emplace_back(driver.physical_devices[1]); + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[2]) + .use_physical_device(driver.physical_devices[3]); + driver.physical_device_groups.emplace_back(driver.physical_devices[4]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[5]); + + uint32_t before_expected_counts[3] = {1, 3, 2}; + uint32_t after_expected_counts[3] = {1, 2, 2}; + uint32_t expected_group_count = 3; + uint32_t returned_group_count = 0; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + std::vector group_props_before{}; + group_props_before.resize(expected_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = expected_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_before.data())); + ASSERT_EQ(expected_group_count, returned_group_count); + printf("Before:\n"); + for (uint32_t group = 0; group < expected_group_count; ++group) { + printf(" Group %u:\n", group); + ASSERT_EQ(group_props_before[group].physicalDeviceCount, before_expected_counts[group]); + for (uint32_t dev = 0; dev < group_props_before[group].physicalDeviceCount; ++dev) { + printf(" Dev %u: %p\n", dev, group_props_before[group].physicalDevices[dev]); + } + } + + // Remove middle device in middle group + driver.physical_device_groups[1].physical_device_handles.erase( + driver.physical_device_groups[1].physical_device_handles.begin() + 1); + + std::vector group_props_after{}; + group_props_after.resize(expected_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after.data())); + ASSERT_EQ(expected_group_count, returned_group_count); + printf("After:\n"); + for (uint32_t group = 0; group < expected_group_count; ++group) { + printf(" Group %u:\n", group); + ASSERT_EQ(group_props_after[group].physicalDeviceCount, after_expected_counts[group]); + for (uint32_t dev = 0; dev < group_props_after[group].physicalDeviceCount; ++dev) { + printf(" Dev %u: %p\n", dev, group_props_after[group].physicalDevices[dev]); + } + } + + // Make sure all devices in the new group info are found in the old group info + for (uint32_t group1 = 0; group1 < group_props_after.size(); ++group1) { + for (uint32_t group2 = 0; group2 < group_props_before.size(); ++group2) { + uint32_t found_count = 0; + bool found = false; + for (uint32_t dev1 = 0; dev1 < group_props_after[group1].physicalDeviceCount; ++dev1) { + found = false; + for (uint32_t dev2 = 0; dev2 < group_props_before[group2].physicalDeviceCount; ++dev2) { + if (group_props_after[group1].physicalDevices[dev1] == group_props_before[group2].physicalDevices[dev2]) { + found_count++; + found = true; + break; + } + } + } + ASSERT_EQ(found, found_count != 0 && found_count == after_expected_counts[group1]); + if (found) { + break; + } + } + } + for (auto& group : group_props_after) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } +} + +// Start with 9 devices but only some in 3 different groups, add and remove +// various devices and groups while querying in between. +TEST(EnumeratePhysicalDeviceGroups, MultipleAddRemoves) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)) + .set_min_icd_interface_version(5) + .set_icd_api_version(VK_API_VERSION_1_1); + + // Generate the devices + for (size_t i = 0; i < 9; i++) { + driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i)); + driver.physical_devices.back().properties.apiVersion = VK_API_VERSION_1_1; + } + + // Generate the starting groups + driver.physical_device_groups.emplace_back(driver.physical_devices[0]); + driver.physical_device_groups.emplace_back(driver.physical_devices[1]); + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[2]) + .use_physical_device(driver.physical_devices[3]); + driver.physical_device_groups.emplace_back(driver.physical_devices[4]); + driver.physical_device_groups.back().use_physical_device(driver.physical_devices[5]); + + uint32_t before_expected_counts[3] = {1, 3, 2}; + uint32_t after_add_group_expected_counts[4] = {1, 3, 1, 2}; + uint32_t after_remove_dev_expected_counts[4] = {1, 2, 1, 2}; + uint32_t after_remove_group_expected_counts[3] = {2, 1, 2}; + uint32_t after_add_dev_expected_counts[3] = {2, 1, 4}; + uint32_t before_group_count = 3; + uint32_t after_group_count = 4; + uint32_t returned_group_count = 0; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.set_api_version(1, 1, 0); + inst.CheckCreate(); + + // Should be: 3 Groups { { 0 }, { 1, 2, 3 }, { 4, 5 } } + std::vector group_props_before{}; + group_props_before.resize(before_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = before_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_before.data())); + ASSERT_EQ(before_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_before[group].physicalDeviceCount, before_expected_counts[group]); + } + + // Insert new group after first two + driver.physical_device_groups.insert(driver.physical_device_groups.begin() + 2, driver.physical_devices[6]); + + // Should be: 4 Groups { { 0 }, { 1, 2, 3 }, { 6 }, { 4, 5 } } + std::vector group_props_after_add_group{}; + group_props_after_add_group.resize(after_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = after_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after_add_group.data())); + ASSERT_EQ(after_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_after_add_group[group].physicalDeviceCount, after_add_group_expected_counts[group]); + } + + // Remove first device in 2nd group + driver.physical_device_groups[1].physical_device_handles.erase( + driver.physical_device_groups[1].physical_device_handles.begin()); + + // Should be: 4 Groups { { 0 }, { 2, 3 }, { 6 }, { 4, 5 } } + std::vector group_props_after_remove_device{}; + group_props_after_remove_device.resize(after_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = after_group_count; + ASSERT_EQ(VK_SUCCESS, + inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after_remove_device.data())); + ASSERT_EQ(after_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_after_remove_device[group].physicalDeviceCount, after_remove_dev_expected_counts[group]); + } + + // Remove first group + driver.physical_device_groups.erase(driver.physical_device_groups.begin()); + + // Should be: 3 Groups { { 2, 3 }, { 6 }, { 4, 5 } } + std::vector group_props_after_remove_group{}; + group_props_after_remove_group.resize(before_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = before_group_count; + ASSERT_EQ(VK_SUCCESS, + inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after_remove_group.data())); + ASSERT_EQ(before_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_after_remove_group[group].physicalDeviceCount, after_remove_group_expected_counts[group]); + } + + // Add two devices to last group + driver.physical_device_groups.back() + .use_physical_device(driver.physical_devices[7]) + .use_physical_device(driver.physical_devices[8]); + + // Should be: 3 Groups { { 2, 3 }, { 6 }, { 4, 5, 7, 8 } } + std::vector group_props_after_add_device{}; + group_props_after_add_device.resize(before_group_count, + VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES}); + returned_group_count = before_group_count; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &returned_group_count, group_props_after_add_device.data())); + ASSERT_EQ(before_group_count, returned_group_count); + for (uint32_t group = 0; group < before_group_count; ++group) { + ASSERT_EQ(group_props_after_add_device[group].physicalDeviceCount, after_add_dev_expected_counts[group]); + } + for (auto& group : group_props_after_add_device) { + VkDeviceGroupDeviceCreateInfo group_info{}; + group_info.sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO; + group_info.physicalDeviceCount = group.physicalDeviceCount; + group_info.pPhysicalDevices = &group.physicalDevices[0]; + DeviceWrapper dev{inst}; + dev.create_info.dev.pNext = &group_info; + dev.CheckCreate(group.physicalDevices[0]); + } +} + +// Fill in random but valid data into the device properties struct for the current physical device +void FillInRandomDeviceProps(VkPhysicalDeviceProperties& props, VkPhysicalDeviceType dev_type, uint32_t api_vers, uint32_t vendor, + uint32_t device) { + props.apiVersion = api_vers; + props.vendorID = vendor; + props.deviceID = device; + props.deviceType = dev_type; + for (uint8_t idx = 0; idx < VK_UUID_SIZE; ++idx) { + props.pipelineCacheUUID[idx] = static_cast(rand() % 255); + } +} + +// Pass in a PNext that the fake ICD will fill in some data for. +TEST(EnumeratePhysicalDeviceGroups, FakePNext) { + FrameworkEnvironment env{}; + + // ICD 0: Vulkan 1.1 + // PhysDev 0: pd0, Discrete, Vulkan 1.1, Bus 7 + // PhysDev 1: pd1, Integrated, Vulkan 1.1, Bus 3 + // PhysDev 2: pd2, Discrete, Vulkan 1.1, Bus 6 + // Group 0: PhysDev 0, PhysDev 2 + // Group 1: PhysDev 1 + // ICD 1: Vulkan 1.1 + // PhysDev 4: pd4, Discrete, Vulkan 1.1, Bus 1 + // PhysDev 5: pd5, Discrete, Vulkan 1.1, Bus 4 + // PhysDev 6: pd6, Discrete, Vulkan 1.1, Bus 2 + // Group 0: PhysDev 5, PhysDev 6 + // Group 1: PhysDev 4 + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_1)); + auto& cur_icd_0 = env.get_test_icd(0); + cur_icd_0.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_0.physical_devices.push_back({"pd0"}); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 888, 0xAAA001); + cur_icd_0.physical_devices.push_back({"pd1"}); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_1, 888, 0xAAA002); + cur_icd_0.physical_devices.push_back({"pd2"}); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 888, 0xAAA003); + cur_icd_0.physical_device_groups.push_back({}); + cur_icd_0.physical_device_groups.back() + .use_physical_device(cur_icd_0.physical_devices[0]) + .use_physical_device(cur_icd_0.physical_devices[2]); + cur_icd_0.physical_device_groups.push_back({cur_icd_0.physical_devices[1]}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_1)); + auto& cur_icd_1 = env.get_test_icd(1); + cur_icd_1.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_1.physical_devices.push_back({"pd4"}); + cur_icd_1.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_1.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC001); + cur_icd_1.physical_devices.push_back({"pd5"}); + cur_icd_1.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_1.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC002); + cur_icd_1.physical_devices.push_back({"pd6"}); + cur_icd_1.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_1.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC003); + cur_icd_1.physical_device_groups.push_back({}); + cur_icd_1.physical_device_groups.back() + .use_physical_device(cur_icd_1.physical_devices[1]) + .use_physical_device(cur_icd_1.physical_devices[2]); + cur_icd_1.physical_device_groups.push_back({cur_icd_1.physical_devices[0]}); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = inst.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + // NOTE: This is a fake struct to make sure the pNext chain is properly passed down to the ICD + // vkEnumeratePhysicalDeviceGroups. + // The two versions must match: + // "FakePNext" test in loader_regression_tests.cpp + // "test_vkEnumeratePhysicalDeviceGroups" in test_icd.cpp + struct FakePnextSharedWithICD { + VkStructureType sType; + void* pNext; + uint32_t value; + }; + + const uint32_t max_phys_dev_groups = 4; + uint32_t group_count = max_phys_dev_groups; + std::array fake_structs; + std::array physical_device_groups{}; + for (uint32_t group = 0; group < max_phys_dev_groups; ++group) { + physical_device_groups[group].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + fake_structs[group].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT; + physical_device_groups[group].pNext = &fake_structs[group]; + } + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &group_count, physical_device_groups.data())); + ASSERT_EQ(group_count, max_phys_dev_groups); + + // Value should get written to 0xDECAFBADD by the fake ICD + for (uint32_t group = 0; group < max_phys_dev_groups; ++group) { + ASSERT_EQ(fake_structs[group].value, 0xDECAFBAD); + } +} + +TEST(ExtensionManual, ToolingProperties) { + VkPhysicalDeviceToolPropertiesEXT icd_tool_props{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT, + nullptr, + "FakeICDTool", + "version_0_0_0_1.b", + VK_TOOL_PURPOSE_VALIDATION_BIT_EXT, + "This tool does not exist", + "No-Layer"}; + { // No support in driver + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_dev = inst.GetPhysDev(); + + PFN_vkGetPhysicalDeviceToolPropertiesEXT getToolProperties = inst.load("vkGetPhysicalDeviceToolPropertiesEXT"); + handle_assert_has_value(getToolProperties); + + uint32_t tool_count = 0; + ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr)); + ASSERT_EQ(tool_count, 0U); + } + { // extension is supported in driver + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .set_supports_tooling_info_ext(true) + .add_tooling_property(icd_tool_props) + .add_physical_device(PhysicalDevice{}.add_extension(VK_EXT_TOOLING_INFO_EXTENSION_NAME).finish()); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_dev = inst.GetPhysDev(); + + PFN_vkGetPhysicalDeviceToolPropertiesEXT getToolProperties = inst.load("vkGetPhysicalDeviceToolPropertiesEXT"); + handle_assert_has_value(getToolProperties); + uint32_t tool_count = 0; + ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr)); + ASSERT_EQ(tool_count, 1U); + VkPhysicalDeviceToolPropertiesEXT props{}; + ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, &props)); + ASSERT_EQ(tool_count, 1U); + string_eq(props.name, icd_tool_props.name); + } + { // core + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_3)) + .add_physical_device({}) + .set_supports_tooling_info_core(true) + .add_tooling_property(icd_tool_props) + .physical_devices.back() + .properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 3, 0); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_dev = inst.GetPhysDev(); + + PFN_vkGetPhysicalDeviceToolProperties getToolProperties = inst.load("vkGetPhysicalDeviceToolProperties"); + handle_assert_has_value(getToolProperties); + uint32_t tool_count = 0; + ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr)); + ASSERT_EQ(tool_count, 1U); + VkPhysicalDeviceToolProperties props{}; + ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, &props)); + ASSERT_EQ(tool_count, 1U); + string_eq(props.name, icd_tool_props.name); + } +} +TEST(CreateInstance, InstanceNullLayerPtr) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + VkInstance inst = VK_NULL_HANDLE; + VkInstanceCreateInfo info{}; + info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + info.enabledLayerCount = 1; + + ASSERT_EQ(env.vulkan_functions.vkCreateInstance(&info, VK_NULL_HANDLE, &inst), VK_ERROR_LAYER_NOT_PRESENT); +} +TEST(CreateInstance, InstanceNullExtensionPtr) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + VkInstance inst = VK_NULL_HANDLE; + VkInstanceCreateInfo info{}; + info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + info.enabledExtensionCount = 1; + + ASSERT_EQ(env.vulkan_functions.vkCreateInstance(&info, VK_NULL_HANDLE, &inst), VK_ERROR_EXTENSION_NOT_PRESENT); +} + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__GNU__) || defined(__QNX__) +// NOTE: Sort order only affects Linux +TEST(SortedPhysicalDevices, DevicesSortEnabled10NoAppExt) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({"pd0"}); + env.get_test_icd(0).physical_devices.back().set_pci_bus(7); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_1, 888, 0xAAA001); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(0).physical_devices.push_back({"pd1"}); + env.get_test_icd(0).physical_devices.back().set_pci_bus(3); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_1, 888, 0xAAA002); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(1).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(1).physical_devices.push_back({"pd2"}); + env.get_test_icd(1).physical_devices.back().set_pci_bus(0); + FillInRandomDeviceProps(env.get_test_icd(1).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_CPU, VK_API_VERSION_1_0, + 1, 0xBBBB001); + env.get_test_icd(1).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(2).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(2).physical_devices.push_back({"pd3"}); + env.get_test_icd(2).physical_devices.back().set_pci_bus(1); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_1, 75, 0xCCCC001); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(2).physical_devices.push_back({"pd4"}); + env.get_test_icd(2).physical_devices.back().set_pci_bus(4); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_0, 75, 0xCCCC002); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(3).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(3).physical_devices.push_back({"pd5"}); + env.get_test_icd(3).physical_devices.back().set_pci_bus(0); + FillInRandomDeviceProps(env.get_test_icd(3).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, + VK_API_VERSION_1_1, 6940, 0xDDDD001); + env.get_test_icd(3).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + InstWrapper instance(env.vulkan_functions); + instance.CheckCreate(); + + const uint32_t max_phys_devs = 6; + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &props); + + switch (dev) { + case 0: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd3", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC001); + break; + case 1: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd4", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC002); + break; + case 2: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd0", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA001); + break; + case 3: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU); + ASSERT_EQ(true, !strcmp("pd1", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA002); + break; + case 4: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU); + ASSERT_EQ(true, !strcmp("pd5", props.deviceName)); + ASSERT_EQ(props.vendorID, 6940U); + ASSERT_EQ(props.deviceID, 0xDDDD001); + break; + case 5: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); + ASSERT_EQ(true, !strcmp("pd2", props.deviceName)); + ASSERT_EQ(props.vendorID, 1U); + ASSERT_EQ(props.deviceID, 0xBBBB001); + break; + default: + ASSERT_EQ(false, true); + } + } + + // Make sure if we call enumerate again, the information is the same + std::array physical_devices_again; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices_again.data())); + ASSERT_EQ(device_count, max_phys_devs); + for (uint32_t dev = 0; dev < device_count; ++dev) { + ASSERT_EQ(physical_devices[dev], physical_devices_again[dev]); + } +} + +TEST(SortedPhysicalDevices, DevicesSortEnabled10AppExt) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({"pd0"}); + env.get_test_icd(0).physical_devices.back().set_pci_bus(7); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_1, 888, 0xAAA001); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(0).physical_devices.push_back({"pd1"}); + env.get_test_icd(0).physical_devices.back().set_pci_bus(3); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_1, 888, 0xAAA002); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(1).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(1).physical_devices.push_back({"pd2"}); + env.get_test_icd(1).physical_devices.back().set_pci_bus(0); + FillInRandomDeviceProps(env.get_test_icd(1).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_CPU, VK_API_VERSION_1_0, + 1, 0xBBBB001); + env.get_test_icd(1).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(2).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(2).physical_devices.push_back({"pd3"}); + env.get_test_icd(2).physical_devices.back().set_pci_bus(1); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_1, 75, 0xCCCC001); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(2).physical_devices.push_back({"pd4"}); + env.get_test_icd(2).physical_devices.back().set_pci_bus(4); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_0, 75, 0xCCCC002); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(3).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(3).physical_devices.push_back({"pd5"}); + env.get_test_icd(3).physical_devices.back().set_pci_bus(0); + FillInRandomDeviceProps(env.get_test_icd(3).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, + VK_API_VERSION_1_1, 6940, 0xDDDD001); + env.get_test_icd(3).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2KHR GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2KHR"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + const uint32_t max_phys_devs = 6; + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT}; + props2.pNext = &pci_bus_info; + GetPhysDevProps2(physical_devices[dev], &props2); + + switch (dev) { + case 0: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd3", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC001); + ASSERT_EQ(pci_bus_info.pciBus, 1U); + break; + case 1: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd4", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC002); + ASSERT_EQ(pci_bus_info.pciBus, 4U); + break; + case 2: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd0", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA001); + ASSERT_EQ(pci_bus_info.pciBus, 7); + break; + case 3: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU); + ASSERT_EQ(true, !strcmp("pd1", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA002); + ASSERT_EQ(pci_bus_info.pciBus, 3U); + break; + case 4: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU); + ASSERT_EQ(true, !strcmp("pd5", props.deviceName)); + ASSERT_EQ(props.vendorID, 6940U); + ASSERT_EQ(props.deviceID, 0xDDDD001); + ASSERT_EQ(pci_bus_info.pciBus, 0U); + break; + case 5: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); + ASSERT_EQ(true, !strcmp("pd2", props.deviceName)); + ASSERT_EQ(props.vendorID, 1U); + ASSERT_EQ(props.deviceID, 0xBBBB001); + ASSERT_EQ(pci_bus_info.pciBus, 0U); + break; + default: + ASSERT_EQ(false, true); + } + } + + // Make sure if we call enumerate again, the information is the same + std::array physical_devices_again; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices_again.data())); + ASSERT_EQ(device_count, max_phys_devs); + for (uint32_t dev = 0; dev < device_count; ++dev) { + ASSERT_EQ(physical_devices[dev], physical_devices_again[dev]); + } +} + +TEST(SortedPhysicalDevices, DevicesSortEnabled11) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(0).set_icd_api_version(VK_API_VERSION_1_1); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({"pd0"}); + env.get_test_icd(0).physical_devices.back().set_pci_bus(7); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_0, 888, 0xAAA001); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(0).physical_devices.push_back({"pd1"}); + env.get_test_icd(0).physical_devices.back().set_pci_bus(3); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_0, 888, 0xAAA002); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(1).set_icd_api_version(VK_API_VERSION_1_1); + env.get_test_icd(1).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(1).physical_devices.push_back({"pd2"}); + env.get_test_icd(1).physical_devices.back().set_pci_bus(0); + FillInRandomDeviceProps(env.get_test_icd(1).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_CPU, VK_API_VERSION_1_0, + 1, 0xBBBB001); + env.get_test_icd(1).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(2).set_icd_api_version(VK_API_VERSION_1_1); + env.get_test_icd(2).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(2).physical_devices.push_back({"pd3"}); + env.get_test_icd(2).physical_devices.back().set_pci_bus(1); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_1, 75, 0xCCCC001); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(2).physical_devices.push_back({"pd4"}); + env.get_test_icd(2).physical_devices.back().set_pci_bus(4); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_1, 75, 0xCCCC002); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + env.get_test_icd(3).set_icd_api_version(VK_API_VERSION_1_1); + env.get_test_icd(3).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(3).physical_devices.push_back({"pd5"}); + env.get_test_icd(3).physical_devices.back().set_pci_bus(0); + FillInRandomDeviceProps(env.get_test_icd(3).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, + VK_API_VERSION_1_1, 6940, 0xDDDD001); + env.get_test_icd(3).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.set_api_version(VK_API_VERSION_1_1); + instance.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = instance.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + const uint32_t max_phys_devs = 6; + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + for (uint32_t dev = 0; dev < device_count; ++dev) { + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[dev], &props); + VkPhysicalDeviceProperties2KHR props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT}; + props2.pNext = &pci_bus_info; + GetPhysDevProps2(physical_devices[dev], &props2); + + switch (dev) { + case 0: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd3", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC001); + ASSERT_EQ(pci_bus_info.pciBus, 1U); + break; + case 1: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd4", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC002); + ASSERT_EQ(pci_bus_info.pciBus, 4U); + break; + case 2: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd0", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA001); + ASSERT_EQ(pci_bus_info.pciBus, 7); + break; + case 3: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU); + ASSERT_EQ(true, !strcmp("pd1", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA002); + ASSERT_EQ(pci_bus_info.pciBus, 3U); + break; + case 4: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU); + ASSERT_EQ(true, !strcmp("pd5", props.deviceName)); + ASSERT_EQ(props.vendorID, 6940U); + ASSERT_EQ(props.deviceID, 0xDDDD001); + ASSERT_EQ(pci_bus_info.pciBus, 0U); + break; + case 5: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); + ASSERT_EQ(true, !strcmp("pd2", props.deviceName)); + ASSERT_EQ(props.vendorID, 1U); + ASSERT_EQ(props.deviceID, 0xBBBB001); + ASSERT_EQ(pci_bus_info.pciBus, 0U); + break; + default: + ASSERT_EQ(false, true); + } + } + + // Make sure if we call enumerate again, the information is the same + std::array physical_devices_again; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices_again.data())); + ASSERT_EQ(device_count, max_phys_devs); + for (uint32_t dev = 0; dev < device_count; ++dev) { + ASSERT_EQ(physical_devices[dev], physical_devices_again[dev]); + } +} + +TEST(SortedPhysicalDevices, DevicesSortedDisabled) { + FrameworkEnvironment env{}; + + EnvVarWrapper disable_select_env_var{"VK_LOADER_DISABLE_SELECT", "1"}; + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(0).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(0).physical_devices.push_back({"pd0"}); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_0, 888, 0xAAA001); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(0).physical_devices.push_back({"pd1"}); + FillInRandomDeviceProps(env.get_test_icd(0).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_0, 888, 0xAAA002); + env.get_test_icd(0).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(1).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(1).physical_devices.push_back({"pd2"}); + FillInRandomDeviceProps(env.get_test_icd(1).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_CPU, VK_API_VERSION_1_0, + 1, 0xBBBB001); + env.get_test_icd(1).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(2).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(2).physical_devices.push_back({"pd3"}); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_0, 75, 0xCCCC001); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + env.get_test_icd(2).physical_devices.push_back({"pd4"}); + FillInRandomDeviceProps(env.get_test_icd(2).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, + VK_API_VERSION_1_0, 75, 0xCCCC002); + env.get_test_icd(2).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_0)); + env.get_test_icd(3).add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}); + env.get_test_icd(3).physical_devices.push_back({"pd5"}); + FillInRandomDeviceProps(env.get_test_icd(3).physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, + VK_API_VERSION_1_0, 6940, 0xDDDD001); + env.get_test_icd(3).physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + + InstWrapper instance(env.vulkan_functions); + instance.create_info.add_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instance.CheckCreate(); + + // Just make sure we have the correct number of devices + const uint32_t max_phys_devs = 6; + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + // make sure the order is what we started with - but its a bit wonky due to the loader reading physical devices "backwards" + VkPhysicalDeviceProperties props{}; + instance->vkGetPhysicalDeviceProperties(physical_devices[0], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU); + ASSERT_STREQ(props.deviceName, "pd5"); + + instance->vkGetPhysicalDeviceProperties(physical_devices[1], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd3"); + + instance->vkGetPhysicalDeviceProperties(physical_devices[2], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd4"); + + instance->vkGetPhysicalDeviceProperties(physical_devices[3], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); + ASSERT_STREQ(props.deviceName, "pd2"); + + instance->vkGetPhysicalDeviceProperties(physical_devices[4], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd0"); + + instance->vkGetPhysicalDeviceProperties(physical_devices[5], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU); + ASSERT_STREQ(props.deviceName, "pd1"); + + // Make sure if we call enumerate again, the information is the same + std::array physical_devices_again; + ASSERT_EQ(VK_SUCCESS, instance->vkEnumeratePhysicalDevices(instance, &device_count, physical_devices_again.data())); + ASSERT_EQ(device_count, max_phys_devs); + for (uint32_t dev = 0; dev < device_count; ++dev) { + ASSERT_EQ(physical_devices[dev], physical_devices_again[dev]); + } +} + +TEST(SortedPhysicalDevices, DeviceGroupsSortedEnabled) { + FrameworkEnvironment env{}; + + // ICD 0: Vulkan 1.1 + // PhysDev 0: pd0, Discrete, Vulkan 1.1, Bus 7 + // PhysDev 1: pd1, Integrated, Vulkan 1.1, Bus 3 + // PhysDev 2: pd2, Discrete, Vulkan 1.1, Bus 6 + // Group 0: PhysDev 0, PhysDev 2 + // Group 1: PhysDev 1 + // ICD 1: Vulkan 1.1 + // PhysDev 3: pd3, CPU, Vulkan 1.1, Bus 0 + // ICD 2: Vulkan 1.1 + // PhysDev 4: pd4, Discrete, Vulkan 1.1, Bus 1 + // PhysDev 5: pd5, Discrete, Vulkan 1.1, Bus 4 + // PhysDev 6: pd6, Discrete, Vulkan 1.1, Bus 2 + // Group 0: PhysDev 5, PhysDev 6 + // Group 1: PhysDev 4 + // ICD 3: Vulkan 1.1 + // PhysDev 7: pd7, Virtual, Vulkan 1.1, Bus 0 + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_0 = env.get_test_icd(0); + cur_icd_0.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_0.physical_devices.push_back({"pd0"}); + cur_icd_0.physical_devices.back().set_pci_bus(7); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 888, 0xAAA001); + cur_icd_0.physical_devices.push_back({"pd1"}); + cur_icd_0.physical_devices.back().set_pci_bus(3); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_1, 888, 0xAAA002); + cur_icd_0.physical_devices.push_back({"pd2"}); + cur_icd_0.physical_devices.back().set_pci_bus(6); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 888, 0xAAA003); + cur_icd_0.physical_device_groups.push_back({}); + cur_icd_0.physical_device_groups.back() + .use_physical_device(cur_icd_0.physical_devices[0]) + .use_physical_device(cur_icd_0.physical_devices[2]); + cur_icd_0.physical_device_groups.push_back({cur_icd_0.physical_devices[1]}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_1 = env.get_test_icd(1); + cur_icd_1.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_1.physical_devices.push_back({"pd3"}); + cur_icd_1.physical_devices.back().set_pci_bus(0); + cur_icd_1.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_1.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_CPU, VK_API_VERSION_1_1, 1, + 0xBBBB001); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_2 = env.get_test_icd(2); + cur_icd_2.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_2.physical_devices.push_back({"pd4"}); + cur_icd_2.physical_devices.back().set_pci_bus(1); + cur_icd_2.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_2.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC001); + cur_icd_2.physical_devices.push_back({"pd5"}); + cur_icd_2.physical_devices.back().set_pci_bus(4); + cur_icd_2.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_2.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC002); + cur_icd_2.physical_devices.push_back({"pd6"}); + cur_icd_2.physical_devices.back().set_pci_bus(2); + cur_icd_2.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_2.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC003); + cur_icd_2.physical_device_groups.push_back({}); + cur_icd_2.physical_device_groups.back() + .use_physical_device(cur_icd_2.physical_devices[1]) + .use_physical_device(cur_icd_2.physical_devices[2]); + cur_icd_2.physical_device_groups.push_back({cur_icd_2.physical_devices[0]}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_3 = env.get_test_icd(3); + cur_icd_3.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_3.physical_devices.push_back({"pd7"}); + cur_icd_3.physical_devices.back().set_pci_bus(0); + cur_icd_3.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_3.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, VK_API_VERSION_1_1, + 6940, 0xDDDD001); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = inst.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + const uint32_t max_phys_devs = 8; + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + const uint32_t max_phys_dev_groups = 6; + uint32_t group_count = max_phys_dev_groups; + std::array physical_device_groups{}; + for (auto& group : physical_device_groups) group.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &group_count, physical_device_groups.data())); + ASSERT_EQ(group_count, max_phys_dev_groups); + + uint32_t cur_dev = 0; + for (uint32_t group = 0; group < max_phys_dev_groups; ++group) { + for (uint32_t dev = 0; dev < physical_device_groups[group].physicalDeviceCount; ++dev) { + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(physical_device_groups[group].physicalDevices[dev], &props); + VkPhysicalDeviceProperties2 props2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + VkPhysicalDevicePCIBusInfoPropertiesEXT pci_bus_info{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT}; + props2.pNext = &pci_bus_info; + GetPhysDevProps2(physical_device_groups[group].physicalDevices[dev], &props2); + switch (cur_dev++) { + case 0: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd4", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC001); + ASSERT_EQ(pci_bus_info.pciBus, 1U); + break; + case 1: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd6", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC003); + ASSERT_EQ(pci_bus_info.pciBus, 2U); + break; + case 2: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd5", props.deviceName)); + ASSERT_EQ(props.vendorID, 75); + ASSERT_EQ(props.deviceID, 0xCCCC002); + ASSERT_EQ(pci_bus_info.pciBus, 4U); + break; + case 3: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd2", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA003); + ASSERT_EQ(pci_bus_info.pciBus, 6); + break; + case 4: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_EQ(true, !strcmp("pd0", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA001); + ASSERT_EQ(pci_bus_info.pciBus, 7); + break; + case 5: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU); + ASSERT_EQ(true, !strcmp("pd1", props.deviceName)); + ASSERT_EQ(props.vendorID, 888); + ASSERT_EQ(props.deviceID, 0xAAA002); + ASSERT_EQ(pci_bus_info.pciBus, 3U); + break; + case 6: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU); + ASSERT_EQ(true, !strcmp("pd7", props.deviceName)); + ASSERT_EQ(props.vendorID, 6940U); + ASSERT_EQ(props.deviceID, 0xDDDD001); + ASSERT_EQ(pci_bus_info.pciBus, 0U); + break; + case 7: + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); + ASSERT_EQ(true, !strcmp("pd3", props.deviceName)); + ASSERT_EQ(props.vendorID, 1U); + ASSERT_EQ(props.deviceID, 0xBBBB001); + ASSERT_EQ(pci_bus_info.pciBus, 0U); + break; + default: + ASSERT_EQ(false, true); + } + } + } + + // Make sure if we call enumerate again, the information is the same + std::array physical_device_groups_again{}; + for (auto& group : physical_device_groups_again) group.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &group_count, physical_device_groups_again.data())); + ASSERT_EQ(group_count, max_phys_dev_groups); + for (uint32_t group = 0; group < max_phys_dev_groups; ++group) { + ASSERT_EQ(physical_device_groups[group].physicalDeviceCount, physical_device_groups_again[group].physicalDeviceCount); + for (uint32_t dev = 0; dev < physical_device_groups[group].physicalDeviceCount; ++dev) { + ASSERT_EQ(physical_device_groups[group].physicalDevices[dev], physical_device_groups_again[group].physicalDevices[dev]); + } + } +} + +TEST(SortedPhysicalDevices, DeviceGroupsSortedDisabled) { + FrameworkEnvironment env{}; + + EnvVarWrapper disable_select_env_var{"VK_LOADER_DISABLE_SELECT", "1"}; + + // ICD 0: Vulkan 1.1 + // PhysDev 0: pd0, Discrete, Vulkan 1.1, Bus 7 + // PhysDev 1: pd1, Integrated, Vulkan 1.1, Bus 3 + // PhysDev 2: pd2, Discrete, Vulkan 1.1, Bus 6 + // Group 0: PhysDev 0, PhysDev 2 + // Group 1: PhysDev 1 + // ICD 1: Vulkan 1.1 + // PhysDev 3: pd3, CPU, Vulkan 1.1, Bus 0 + // ICD 2: Vulkan 1.1 + // PhysDev 4: pd4, Discrete, Vulkan 1.1, Bus 1 + // PhysDev 5: pd5, Discrete, Vulkan 1.1, Bus 4 + // PhysDev 6: pd6, Discrete, Vulkan 1.1, Bus 2 + // Group 0: PhysDev 5, PhysDev 6 + // Group 1: PhysDev 4 + // ICD 3: Vulkan 1.1 + // PhysDev 7: pd7, Virtual, Vulkan 1.1, Bus 0 + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_0 = env.get_test_icd(0); + cur_icd_0.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_0.physical_devices.push_back({"pd0"}); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 888, 0xAAA001); + cur_icd_0.physical_devices.push_back({"pd1"}); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, + VK_API_VERSION_1_1, 888, 0xAAA002); + cur_icd_0.physical_devices.push_back({"pd2"}); + cur_icd_0.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_0.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 888, 0xAAA003); + cur_icd_0.physical_device_groups.push_back({}); + cur_icd_0.physical_device_groups.back() + .use_physical_device(cur_icd_0.physical_devices[0]) + .use_physical_device(cur_icd_0.physical_devices[2]); + cur_icd_0.physical_device_groups.push_back({cur_icd_0.physical_devices[1]}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_1 = env.get_test_icd(1); + cur_icd_1.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_1.physical_devices.push_back({"pd3"}); + cur_icd_1.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_1.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_CPU, VK_API_VERSION_1_1, 1, + 0xBBBB001); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_2 = env.get_test_icd(2); + cur_icd_2.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_2.physical_devices.push_back({"pd4"}); + cur_icd_2.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_2.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC001); + cur_icd_2.physical_devices.push_back({"pd5"}); + cur_icd_2.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_2.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC002); + cur_icd_2.physical_devices.push_back({"pd6"}); + cur_icd_2.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_2.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, VK_API_VERSION_1_1, + 75, 0xCCCC003); + cur_icd_2.physical_device_groups.push_back({}); + cur_icd_2.physical_device_groups.back() + .use_physical_device(cur_icd_2.physical_devices[1]) + .use_physical_device(cur_icd_2.physical_devices[2]); + cur_icd_2.physical_device_groups.push_back({cur_icd_2.physical_devices[0]}); + + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2, VK_API_VERSION_1_1)); + auto& cur_icd_3 = env.get_test_icd(3); + cur_icd_3.set_icd_api_version(VK_API_VERSION_1_1); + cur_icd_3.physical_devices.push_back({"pd7"}); + cur_icd_3.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0}); + FillInRandomDeviceProps(cur_icd_3.physical_devices.back().properties, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, VK_API_VERSION_1_1, + 6940, 0xDDDD001); + + InstWrapper inst(env.vulkan_functions); + inst.create_info.set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + PFN_vkGetPhysicalDeviceProperties2 GetPhysDevProps2 = inst.load("vkGetPhysicalDeviceProperties2"); + ASSERT_NE(GetPhysDevProps2, nullptr); + + const uint32_t max_phys_devs = 8; + uint32_t device_count = max_phys_devs; + std::array physical_devices; + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDevices(inst, &device_count, physical_devices.data())); + ASSERT_EQ(device_count, max_phys_devs); + + const uint32_t max_phys_dev_groups = 6; + uint32_t group_count = max_phys_dev_groups; + std::array physical_device_groups{}; + for (auto& group : physical_device_groups) group.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &group_count, physical_device_groups.data())); + ASSERT_EQ(group_count, max_phys_dev_groups); + + // make sure the order is what we started with - but its a bit wonky due to the loader reading physical devices "backwards" + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(physical_devices[0], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU); + ASSERT_STREQ(props.deviceName, "pd7"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[1], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd4"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[2], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd5"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[3], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd6"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[4], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); + ASSERT_STREQ(props.deviceName, "pd3"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[5], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd0"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[6], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU); + ASSERT_STREQ(props.deviceName, "pd1"); + + inst->vkGetPhysicalDeviceProperties(physical_devices[7], &props); + ASSERT_EQ(props.deviceType, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); + ASSERT_STREQ(props.deviceName, "pd2"); + + // Make sure if we call enumerate again, the information is the same + std::array physical_device_groups_again{}; + for (auto& group : physical_device_groups_again) group.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES; + + ASSERT_EQ(VK_SUCCESS, inst->vkEnumeratePhysicalDeviceGroups(inst, &group_count, physical_device_groups_again.data())); + ASSERT_EQ(group_count, max_phys_dev_groups); + for (uint32_t group = 0; group < max_phys_dev_groups; ++group) { + ASSERT_EQ(physical_device_groups[group].physicalDeviceCount, physical_device_groups_again[group].physicalDeviceCount); + for (uint32_t dev = 0; dev < physical_device_groups[group].physicalDeviceCount; ++dev) { + ASSERT_EQ(physical_device_groups[group].physicalDevices[dev], physical_device_groups_again[group].physicalDevices[dev]); + } + } +} + +#endif // __linux__ || __FreeBSD__ || __OpenBSD__ || __GNU__ + +const char* portability_driver_warning = + "vkCreateInstance: Found drivers that contain devices which support the portability subset, but " + "the instance does not enumerate portability drivers! Applications that wish to enumerate portability " + "drivers must set the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit in the VkInstanceCreateInfo " + "flags and enable the VK_KHR_portability_enumeration instance extension."; + +const char* portability_flag_missing = + "vkCreateInstance: Found drivers that contain devices which support the portability subset, but " + "the instance does not enumerate portability drivers! Applications that wish to enumerate portability " + "drivers must set the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit in the VkInstanceCreateInfo " + "flags."; + +const char* portability_extension_missing = + "VkInstanceCreateInfo: If flags has the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit set, the " + "list of enabled extensions in ppEnabledExtensionNames must contain VK_KHR_portability_enumeration " + "[VUID-VkInstanceCreateInfo-flags-06559 ]" + "Applications that wish to enumerate portability drivers must enable the VK_KHR_portability_enumeration " + "instance extension."; + +TEST(PortabilityICDConfiguration, PortabilityICDOnly) { + FrameworkEnvironment env{}; + env.add_icd( + TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true))) + .add_physical_device("physical_device_0") + .set_max_icd_interface_version(1); + { // enable portability extension and flag + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.add_extension("VK_KHR_portability_enumeration"); + inst.create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(portability_driver_warning)); + + DebugUtilsWrapper log{inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + auto phys_dev = inst.GetPhysDev(); + handle_assert_has_value(phys_dev); + + DeviceWrapper dev_info{inst}; + dev_info.CheckCreate(phys_dev); + ASSERT_FALSE(log.find(portability_driver_warning)); + ASSERT_FALSE(log.find(portability_flag_missing)); + ASSERT_FALSE(log.find(portability_extension_missing)); + } + { // enable portability flag but not extension - shouldn't be able to create an instance when filtering is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + ASSERT_TRUE(env.debug_log.find(portability_extension_missing)); + } + { // enable portability extension but not flag - shouldn't be able to create an instance when filtering is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension("VK_KHR_portability_enumeration"); + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + ASSERT_TRUE(env.debug_log.find(portability_flag_missing)); + } + { // enable neither the portability extension or the flag - shouldn't be able to create an instance when filtering is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.flags = 0; // make sure its 0 - no portability + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); + ASSERT_TRUE(env.debug_log.find(portability_driver_warning)); + } +} + +TEST(PortabilityICDConfiguration, PortabilityAndRegularICD) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))); + env.add_icd( + TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true))); + + auto& driver0 = env.get_test_icd(0); + auto& driver1 = env.get_test_icd(1); + + driver0.physical_devices.emplace_back("physical_device_0"); + driver0.max_icd_interface_version = 1; + + driver1.physical_devices.emplace_back("portability_physical_device_1"); + driver1.max_icd_interface_version = 1; + { // enable portability extension and flag + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.add_extension("VK_KHR_portability_enumeration"); + inst.create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(portability_driver_warning)); + + DebugUtilsWrapper log{inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + CreateDebugUtilsMessenger(log); + + auto phys_devs = inst.GetPhysDevs(2); + for (const auto& phys_dev : phys_devs) { + handle_assert_has_value(phys_dev); + } + DeviceWrapper dev_info_0{inst}; + DeviceWrapper dev_info_1{inst}; + dev_info_0.CheckCreate(phys_devs[0]); + dev_info_1.CheckCreate(phys_devs[1]); + } + { // enable portability extension but not flag - should only enumerate 1 physical device when filtering is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.add_extension("VK_KHR_portability_enumeration"); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(portability_driver_warning)); + + DebugUtilsWrapper log{inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + CreateDebugUtilsMessenger(log); + auto phys_dev = inst.GetPhysDev(); + handle_assert_has_value(phys_dev); + DeviceWrapper dev_info_0{inst}; + dev_info_0.CheckCreate(phys_dev); + } + { // enable portability flag but not extension - should only enumerate 1 physical device when filtering is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(portability_driver_warning)); + + DebugUtilsWrapper log{inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + CreateDebugUtilsMessenger(log); + auto phys_dev = inst.GetPhysDev(); + handle_assert_has_value(phys_dev); + DeviceWrapper dev_info_0{inst}; + dev_info_0.CheckCreate(phys_dev); + } + { // do not enable portability extension or flag - should only enumerate 1 physical device when filtering is enabled + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(portability_driver_warning)); + + DebugUtilsWrapper log{inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + CreateDebugUtilsMessenger(log); + auto phys_dev = inst.GetPhysDev(); + handle_assert_has_value(phys_dev); + DeviceWrapper dev_info_0{inst}; + dev_info_0.CheckCreate(phys_dev); + } +} + +// Check that the portability enumeration flag bit doesn't get passed down +TEST(PortabilityICDConfiguration, PortabilityAndRegularICDCheckFlagsPassedIntoICD) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2))); + env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2).set_is_portability_driver(true))); + + auto& driver0 = env.get_test_icd(0); + auto& driver1 = env.get_test_icd(1); + + driver0.physical_devices.emplace_back("physical_device_0"); + driver0.max_icd_interface_version = 1; + + driver1.physical_devices.emplace_back("portability_physical_device_1"); + driver1.add_instance_extension("VK_KHR_portability_enumeration"); + driver1.max_icd_interface_version = 1; + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.add_extension("VK_KHR_portability_enumeration"); + inst.create_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR | 4; + + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(portability_driver_warning)); + + ASSERT_EQ(static_cast(4), driver0.passed_in_instance_create_flags); + ASSERT_EQ(VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR | static_cast(4), + driver1.passed_in_instance_create_flags); +} + +TEST(PortabilityICDConfiguration, PortabilityAndRegularICDPreInstanceFunctions) { + FrameworkEnvironment env{}; + Extension first_ext{"VK_EXT_validation_features"}; // known instance extensions + Extension second_ext{"VK_EXT_headless_surface"}; + env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))) + .add_physical_device("physical_device_0") + .set_max_icd_interface_version(1) + .add_instance_extensions({first_ext, second_ext}); + env.add_icd( + TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true))) + .add_physical_device("portability_physical_device_1") + .set_max_icd_interface_version(1); + { + // check that enumerating instance extensions work with a portability driver present + auto extensions = env.GetInstanceExtensions(6); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, first_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, second_ext.extensionName.c_str())); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(4).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(5).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); + } + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + { // LayersMatch + auto layer_props = inst.GetActiveLayers(phys_dev, 1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); + } + { // Property count less than available + VkLayerProperties layer_props; + uint32_t layer_count = 0; + ASSERT_EQ(VK_INCOMPLETE, env.vulkan_functions.vkEnumerateDeviceLayerProperties(phys_dev, &layer_count, &layer_props)); + ASSERT_EQ(layer_count, 0U); + } +} + +#if defined(_WIN32) +TEST(AppPackageDiscovery, AppPackageDrivers) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.set_discovery_type(ManifestDiscoveryType::windows_app_package)) + .add_physical_device({}); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); +} +TEST(AppPackageDiscovery, AppPackageLayers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2))).add_physical_device({}); + + const char* layer_name = "VK_LAYER_test_package_layer"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "test_package_layer.json") + .set_discovery_type(ManifestDiscoveryType::windows_app_package)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1U); + ASSERT_EQ(layers.size(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); +} + +TEST(AppPackageDiscovery, AppPackageICDAndLayers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.set_discovery_type(ManifestDiscoveryType::windows_app_package)) + .add_physical_device({}); + + const char* layer_name = "VK_LAYER_test_package_layer"; + env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "test_package_layer.json") + .set_discovery_type(ManifestDiscoveryType::windows_app_package)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1U); + ASSERT_EQ(layers.size(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); +} + +// Make sure that stale layer manifests (path to nonexistant file) which have the same name as real manifests don't cause the real +// manifests to be skipped. Stale registry entries happen when a registry is written on layer/driver installation but not cleaned up +// when the corresponding manifest is removed from the file system. +TEST(DuplicateRegistryEntries, Layers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2))); + + auto null_path = env.get_folder(ManifestLocation::null).location() / "test_layer.json"; + + env.platform_shim->add_manifest(ManifestCategory::explicit_layer, null_path); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + inst.CheckCreate(); +} + +// Check that the de-duplication of drivers found in both PnP and generic Khronos/Vulkan/Drivers doesn't result in the same thing +// being added twice +TEST(DuplicateRegistryEntries, Drivers) { + FrameworkEnvironment env{}; + auto null_path = env.get_folder(ManifestLocation::null).location() / "test_icd_0.json"; + env.platform_shim->add_manifest(ManifestCategory::icd, null_path); + + env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA}.set_discovery_type(ManifestDiscoveryType::null_dir)) + .add_physical_device("physical_device_0") + .set_adapterLUID(_LUID{10, 1000}); + env.platform_shim->add_d3dkmt_adapter(D3DKMT_Adapter{0, _LUID{10, 1000}}.add_driver_manifest_path(env.get_icd_manifest_path())); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(std::string("Skipping adding of json file \"") + null_path.string() + + "\" from registry \"HKEY_LOCAL_MACHINE\\" VK_DRIVERS_INFO_REGISTRY_LOC + "\" to the list due to duplication")); +} +#endif + +TEST(LibraryLoading, SystemLocations) { + FrameworkEnvironment env{}; + EnvVarWrapper ld_library_path("LD_LIBRARY_PATH", env.get_folder(ManifestLocation::driver).location().string()); + ld_library_path.add_to_list(env.get_folder(ManifestLocation::explicit_layer).location()); + + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2).set_library_path_type(LibraryPathType::default_search_paths)) + .add_physical_device({}); + const char* fake_ext_name = "VK_FAKE_extension"; + driver.physical_devices.back().add_extension(fake_ext_name); + + const char* layer_name = "TestLayer"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "test_layer.json"} + .set_library_path_type(LibraryPathType::default_search_paths)); + + auto props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(props.at(0).layerName, layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(layer_name); + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + auto phys_dev = inst.GetPhysDev(); + + auto active_props = inst.GetActiveLayers(phys_dev, 1); + ASSERT_TRUE(string_eq(active_props.at(0).layerName, layer_name)); + + auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 1); + ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, fake_ext_name)); +} + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) +// Check that valid symlinks do not cause the loader to crash when directly in an XDG env-var +TEST(ManifestDiscovery, ValidSymlinkInXDGEnvVar) { + FrameworkEnvironment env{FrameworkSettings{}.set_enable_default_search_paths(false)}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::override_folder)) + .add_physical_device({}); + + auto symlink_path = + env.get_folder(ManifestLocation::driver_env_var).add_symlink(env.get_icd_manifest_path(0), "symlink_to_driver.json"); + + EnvVarWrapper xdg_config_dirs_env_var{"XDG_CONFIG_DIRS", symlink_path}; + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); +} + +// Check that valid symlinks do not cause the loader to crash +TEST(ManifestDiscovery, ValidSymlink) { + FrameworkEnvironment env{FrameworkSettings{}.set_enable_default_search_paths(false)}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::override_folder)) + .add_physical_device({}); + + auto symlink_path = + env.get_folder(ManifestLocation::driver_env_var).add_symlink(env.get_icd_manifest_path(0), "symlink_to_driver.json"); + + env.platform_shim->set_fake_path(ManifestCategory::icd, env.get_folder(ManifestLocation::driver_env_var).location()); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); +} + +// Check that invalid symlinks do not cause the loader to crash when directly in an XDG env-var +TEST(ManifestDiscovery, InvalidSymlinkXDGEnvVar) { + FrameworkEnvironment env{FrameworkSettings{}.set_enable_default_search_paths(false)}; + + auto symlink_path = + env.get_folder(ManifestLocation::driver) + .add_symlink(env.get_folder(ManifestLocation::driver).location() / "nothing_here.json", "symlink_to_nothing.json"); + + EnvVarWrapper xdg_config_dirs_env_var{symlink_path}; + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); +} + +// Check that invalid symlinks do not cause the loader to crash +TEST(ManifestDiscovery, InvalidSymlink) { + FrameworkEnvironment env{FrameworkSettings{}.set_enable_default_search_paths(false)}; + + auto symlink_path = + env.get_folder(ManifestLocation::driver_env_var) + .add_symlink(env.get_folder(ManifestLocation::driver).location() / "nothing_here.json", "symlink_to_nothing.json"); + + env.platform_shim->set_fake_path(ManifestCategory::icd, env.get_folder(ManifestLocation::driver_env_var).location()); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER); +} +#endif + +#if defined(__APPLE__) +// Add two drivers, one to the bundle and one to the system locations +TEST(ManifestDiscovery, AppleBundles) { + FrameworkEnvironment env{}; + env.setup_macos_bundle(); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::macos_bundle)); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.at(0).properties.deviceID = 1337; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + env.get_test_icd(1).physical_devices.push_back({}); + env.get_test_icd(1).physical_devices.at(0).properties.deviceID = 9999; + + InstWrapper inst{env.vulkan_functions}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + auto physical_devices = inst.GetPhysDevs(); + ASSERT_EQ(1, physical_devices.size()); + + // Verify that this is the 'right' GPU, aka the one from the bundle + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(physical_devices[0], &props); + ASSERT_EQ(env.get_test_icd(0).physical_devices.at(0).properties.deviceID, props.deviceID); +} + +// Add two drivers, one to the bundle and one using the driver env-var +TEST(ManifestDiscovery, AppleBundlesEnvVarActive) { + FrameworkEnvironment env{}; + env.setup_macos_bundle(); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::macos_bundle)); + env.get_test_icd(0).physical_devices.push_back({}); + env.get_test_icd(0).physical_devices.at(0).properties.deviceID = 1337; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::env_var)); + env.get_test_icd(1).physical_devices.push_back({}); + env.get_test_icd(1).physical_devices.at(0).properties.deviceID = 9999; + + InstWrapper inst{env.vulkan_functions}; + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate()); + auto physical_devices = inst.GetPhysDevs(); + ASSERT_EQ(1, physical_devices.size()); + + // Verify that this is the 'right' GPU, aka the one from the env-var + VkPhysicalDeviceProperties props{}; + inst->vkGetPhysicalDeviceProperties(physical_devices[0], &props); + ASSERT_EQ(env.get_test_icd(1).physical_devices.at(0).properties.deviceID, props.deviceID); +} +#endif + +TEST(LayerCreatesDevice, Basic) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer.json"); + env.get_test_layer().set_call_create_device_while_create_device_is_called(true); + env.get_test_layer().set_physical_device_index_to_use_during_create_device(0); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer2.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(inst.GetPhysDev()); +} + +TEST(LayerCreatesDevice, DifferentPhysicalDevice) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + env.get_test_icd(0).physical_devices.emplace_back("Device0"); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + env.get_test_icd(1).physical_devices.emplace_back("Device1"); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer.json"); + env.get_test_layer().set_call_create_device_while_create_device_is_called(true); + env.get_test_layer().set_physical_device_index_to_use_during_create_device(1); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name2") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer2.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_devs.at(0)); +} + +TEST(Layer, pfnNextGetInstanceProcAddr_should_not_return_layers_own_functions) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer.json"); + env.get_test_layer(0).set_check_if_EnumDevExtProps_is_same_as_queried_function(true); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_devs.at(0)); +} + +TEST(Layer, LLP_LAYER_21) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer.json"); + env.get_test_layer(0).set_clobber_pInstance(true); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); +#if defined(WIN32) +#if defined(_WIN64) + ASSERT_DEATH( + inst.CheckCreate(), + testing::ContainsRegex( + R"(terminator_CreateInstance: Instance pointer \(................\) has invalid MAGIC value 0x00000000. Instance value )" + R"(possibly corrupted by active layer \(Policy #LLP_LAYER_21\))")); +#else + ASSERT_DEATH( + inst.CheckCreate(), + testing::ContainsRegex( + R"(terminator_CreateInstance: Instance pointer \(........\) has invalid MAGIC value 0x00000000. Instance value )" + R"(possibly corrupted by active layer \(Policy #LLP_LAYER_21\))")); +#endif +#else + ASSERT_DEATH( + inst.CheckCreate(), + testing::ContainsRegex( + R"(terminator_CreateInstance: Instance pointer \(0x[0-9A-Fa-f]+\) has invalid MAGIC value 0x00000000. Instance value )" + R"(possibly corrupted by active layer \(Policy #LLP_LAYER_21\))")); +#endif +} + +TEST(Layer, LLP_LAYER_22) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("implicit_layer_name") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_test_layer.json"); + env.get_test_layer(0).set_clobber_pDevice(true); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension("VK_EXT_debug_utils"); + inst.CheckCreate(); + + DebugUtilsWrapper log{inst}; + CreateDebugUtilsMessenger(log); + + DeviceWrapper dev{inst}; +#if defined(WIN32) +#if defined(_WIN64) + ASSERT_DEATH( + dev.CheckCreate(inst.GetPhysDev()), + testing::ContainsRegex( + R"(terminator_CreateDevice: Device pointer \(................\) has invalid MAGIC value 0x00000000. The expected value is 0x10ADED040410ADED. Device value )" + R"(possibly corrupted by active layer \(Policy #LLP_LAYER_22\))")); +#else + ASSERT_DEATH( + dev.CheckCreate(inst.GetPhysDev()), + testing::ContainsRegex( + R"(terminator_CreateDevice: Device pointer \(........\) has invalid MAGIC value 0x00000000. The expected value is 0x10ADED040410ADED. Device value )" + R"(possibly corrupted by active layer \(Policy #LLP_LAYER_22\))")); +#endif +#else + ASSERT_DEATH( + dev.CheckCreate(inst.GetPhysDev()), + testing::ContainsRegex( + R"(terminator_CreateDevice: Device pointer \(0x[0-9A-Fa-f]+\) has invalid MAGIC value 0x00000000. The expected value is 0x10ADED040410ADED. Device value )" + R"(possibly corrupted by active layer \(Policy #LLP_LAYER_22\))")); +#endif +} + +TEST(InvalidManifest, ICD) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector invalid_jsons; + invalid_jsons.push_back(","); + invalid_jsons.push_back("{},[]"); + invalid_jsons.push_back("{ \"foo\":\"bar\", }"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": [], },"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": [{},] },"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": {\"fee\"} },"); + invalid_jsons.push_back("{\"\":\"bar\", \"baz\": {}"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": {\"fee\":1234, true, \"ab\":\"bc\"} },"); + + for (size_t i = 0; i < invalid_jsons.size(); i++) { + auto file_name = std::string("invalid_driver_") + std::to_string(i) + ".json"; + std::filesystem::path new_path = env.get_folder(ManifestLocation::driver).write_manifest(file_name, invalid_jsons[i]); + env.platform_shim->add_manifest(ManifestCategory::icd, new_path); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); +} + +TEST(InvalidManifest, Layer) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + std::vector invalid_jsons; + invalid_jsons.push_back(","); + invalid_jsons.push_back("{},[]"); + invalid_jsons.push_back("{ \"foo\":\"bar\", }"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": [], },"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": [{},] },"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": {\"fee\"} },"); + invalid_jsons.push_back("{\"\":\"bar\", \"baz\": {}"); + invalid_jsons.push_back("{\"foo\":\"bar\", \"baz\": {\"fee\":1234, true, \"ab\":\"bc\"} },"); + + for (size_t i = 0; i < invalid_jsons.size(); i++) { + auto file_name = std::string("invalid_implicit_layer_") + std::to_string(i) + ".json"; + std::filesystem::path new_path = + env.get_folder(ManifestLocation::implicit_layer).write_manifest(file_name, invalid_jsons[i]); + env.platform_shim->add_manifest(ManifestCategory::implicit_layer, new_path); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); +} +#if defined(WIN32) +void add_dxgi_adapter(FrameworkEnvironment& env, std::filesystem::path const& name, LUID luid, uint32_t vendor_id) { + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_6).set_discovery_type(ManifestDiscoveryType::null_dir)); + driver.set_min_icd_interface_version(5); + driver.set_max_icd_interface_version(6); + driver.setup_WSI(); + driver.set_icd_api_version(VK_API_VERSION_1_1); + driver.physical_devices.emplace_back(name.string()); + auto& pd0 = driver.physical_devices.back(); + pd0.properties.apiVersion = VK_API_VERSION_1_1; + driver.set_adapterLUID(luid); + + // luid is unique per DXGI/D3DKMT adapters.Don't add extra DXGI device if one is already created. + // Just add path icd path to matching d3dkmt_adapter. + D3DKMT_Adapter* pAdapter = NULL; + for (uint32_t i = 0; i < env.platform_shim->d3dkmt_adapters.size(); i++) { + if (env.platform_shim->d3dkmt_adapters[i].adapter_luid.HighPart == luid.HighPart && + env.platform_shim->d3dkmt_adapters[i].adapter_luid.LowPart == luid.LowPart) { + pAdapter = &env.platform_shim->d3dkmt_adapters[i]; + break; + } + } + if (pAdapter == NULL) { + DXGI_ADAPTER_DESC1 desc{}; + desc.VendorId = known_driver_list.at(vendor_id).vendor_id; + desc.AdapterLuid = luid; + wcsncpy_s(desc.Description, 128, name.c_str(), name.native().size()); + env.platform_shim->add_dxgi_adapter(GpuType::discrete, desc); + + env.platform_shim->add_d3dkmt_adapter( + D3DKMT_Adapter{static_cast(env.icds.size()) - 1U, desc.AdapterLuid}.add_driver_manifest_path( + env.get_icd_manifest_path(env.icds.size() - 1))); + } else { + pAdapter->add_driver_manifest_path(env.get_icd_manifest_path(env.icds.size() - 1)); + } +} + +TEST(EnumerateAdapterPhysicalDevices, SameAdapterLUID_reordered) { + FrameworkEnvironment env; + + uint32_t physical_count = 3; + + // Physical devices are enumerated: + // a) first in the order of LUIDs showing up in DXGIAdapter list + // b) then in the reverse order to the drivers insertion into the test framework + add_dxgi_adapter(env, "physical_device_2", LUID{10, 100}, 2); + add_dxgi_adapter(env, "physical_device_1", LUID{20, 200}, 1); + add_dxgi_adapter(env, "physical_device_0", LUID{10, 100}, 2); + + { + uint32_t returned_physical_count = 0; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + std::vector physical_device_handles{returned_physical_count}; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, + physical_device_handles.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDeviceProperties phys_dev_props[3]{}; + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[0], &(phys_dev_props[0])); + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[1], &(phys_dev_props[1])); + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[2], &(phys_dev_props[2])); + + EXPECT_TRUE(string_eq(phys_dev_props[0].deviceName, "physical_device_0")); + EXPECT_TRUE(string_eq(phys_dev_props[1].deviceName, "physical_device_2")); + // Because LUID{10,100} is encountered first, all physical devices which correspond to that LUID are enumerated before any + // other physical devices. + EXPECT_TRUE(string_eq(phys_dev_props[2].deviceName, "physical_device_1")); + + // Check that both devices do not report VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT + VkPhysicalDeviceLayeredDriverPropertiesMSFT layered_driver_properties_msft{}; + layered_driver_properties_msft.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT; + VkPhysicalDeviceProperties2 props2{}; + props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + props2.pNext = (void*)&layered_driver_properties_msft; + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[0], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[1], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[2], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); + } + // Set the first physical device that is enumerated to be a 'layered' driver so it should be swapped with the first physical + // device + env.get_test_icd(2).physical_devices.back().layered_driver_underlying_api = VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT; + { + uint32_t returned_physical_count = 0; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + std::vector physical_device_handles{returned_physical_count}; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, + physical_device_handles.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDeviceProperties phys_dev_props[3]{}; + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[0], &(phys_dev_props[0])); + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[1], &(phys_dev_props[1])); + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[2], &(phys_dev_props[2])); + + // Because the 'last' driver has the layered_driver set to D3D12, the order is modified + EXPECT_TRUE(string_eq(phys_dev_props[0].deviceName, "physical_device_2")); + EXPECT_TRUE(string_eq(phys_dev_props[1].deviceName, "physical_device_0")); + // Because LUID{10,100} is encountered first, all physical devices which correspond to that LUID are enumerated before any + // other physical devices. + EXPECT_TRUE(string_eq(phys_dev_props[2].deviceName, "physical_device_1")); + + // Check that the correct physical device reports VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT + VkPhysicalDeviceLayeredDriverPropertiesMSFT layered_driver_properties_msft{}; + layered_driver_properties_msft.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT; + VkPhysicalDeviceProperties2 props2{}; + props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + props2.pNext = (void*)&layered_driver_properties_msft; + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[0], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[1], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT); + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[2], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); + } +} + +TEST(EnumerateAdapterPhysicalDevices, SameAdapterLUID_same_order) { + FrameworkEnvironment env; + + uint32_t physical_count = 3; + + // Physical devices are enumerated: + // a) first in the order of LUIDs showing up in DXGIAdapter list + // b) then in the reverse order to the drivers insertion into the test framework + add_dxgi_adapter(env, "physical_device_2", LUID{10, 100}, 2); + add_dxgi_adapter(env, "physical_device_1", LUID{20, 200}, 1); + add_dxgi_adapter(env, "physical_device_0", LUID{10, 100}, 2); + + // Set the last physical device that is enumerated last to be a 'layered' physical device - no swapping should occur + env.get_test_icd(0).physical_devices.back().layered_driver_underlying_api = VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT; + + uint32_t returned_physical_count = 0; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + ASSERT_EQ(physical_count, returned_physical_count); + std::vector physical_device_handles{returned_physical_count}; + ASSERT_EQ(VK_SUCCESS, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, physical_device_handles.data())); + ASSERT_EQ(physical_count, returned_physical_count); + + VkPhysicalDeviceProperties phys_dev_props[3]{}; + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[0], &(phys_dev_props[0])); + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[1], &(phys_dev_props[1])); + env.vulkan_functions.vkGetPhysicalDeviceProperties(physical_device_handles[2], &(phys_dev_props[2])); + + // Make sure that reordering doesn't occur if the MSFT layered driver appears second + EXPECT_TRUE(string_eq(phys_dev_props[0].deviceName, "physical_device_0")); + EXPECT_TRUE(string_eq(phys_dev_props[1].deviceName, "physical_device_2")); + // Because LUID{10,100} is encountered first, all physical devices which correspond to that LUID are enumerated before any + // other physical devices. + EXPECT_TRUE(string_eq(phys_dev_props[2].deviceName, "physical_device_1")); + + // Check that the correct physical device reports VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT + VkPhysicalDeviceLayeredDriverPropertiesMSFT layered_driver_properties_msft{}; + layered_driver_properties_msft.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT; + VkPhysicalDeviceProperties2 props2{}; + props2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + props2.pNext = (void*)&layered_driver_properties_msft; + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[0], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[1], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT); + + env.vulkan_functions.vkGetPhysicalDeviceProperties2(physical_device_handles[2], &props2); + EXPECT_EQ(layered_driver_properties_msft.underlyingAPI, VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT); +} + +TEST(EnumerateAdapterPhysicalDevices, WrongErrorCodes) { + FrameworkEnvironment env; + + add_dxgi_adapter(env, "physical_device_0", LUID{10, 100}, 2); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + // TestICD only fails in EnumAdapters, so shouldn't fail to query VkPhysicalDevices + { + env.get_test_icd().set_enum_adapter_physical_devices_return_code(VK_ERROR_INITIALIZATION_FAILED); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 1); + } + { + env.get_test_icd().set_enum_adapter_physical_devices_return_code(VK_ERROR_INCOMPATIBLE_DRIVER); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 1); + } + { + env.get_test_icd().set_enum_adapter_physical_devices_return_code(VK_ERROR_SURFACE_LOST_KHR); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 1); + } + + // TestICD fails in EnumPhysDevs, should return VK_ERROR_INCOMPATIBLE_DRIVER + auto check_icds = [&env, &inst] { + env.get_test_icd().set_enum_adapter_physical_devices_return_code(VK_ERROR_INITIALIZATION_FAILED); + uint32_t returned_physical_count = 0; + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 0); + + env.get_test_icd().set_enum_adapter_physical_devices_return_code(VK_ERROR_INCOMPATIBLE_DRIVER); + returned_physical_count = 0; + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 0); + + env.get_test_icd().set_enum_adapter_physical_devices_return_code(VK_ERROR_SURFACE_LOST_KHR); + returned_physical_count = 0; + EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, + env.vulkan_functions.vkEnumeratePhysicalDevices(inst.inst, &returned_physical_count, nullptr)); + EXPECT_EQ(returned_physical_count, 0); + }; + + // TestICD fails in EnumPhysDevs, should return VK_ERROR_INCOMPATIBLE_DRIVER + env.get_test_icd().set_enum_physical_devices_return_code(VK_ERROR_INITIALIZATION_FAILED); + check_icds(); + + // TestICD fails in EnumPhysDevs, should return VK_ERROR_INCOMPATIBLE_DRIVER + env.get_test_icd().set_enum_physical_devices_return_code(VK_ERROR_INCOMPATIBLE_DRIVER); + check_icds(); + + // TestICD fails in EnumPhysDevs, should return VK_ERROR_INCOMPATIBLE_DRIVER + env.get_test_icd().set_enum_physical_devices_return_code(VK_ERROR_SURFACE_LOST_KHR); + check_icds(); +} + +TEST(EnumerateAdapterPhysicalDevices, ManyAdapters) { + FrameworkEnvironment env; + + uint32_t icd_count = 10; + for (uint32_t i = 0; i < icd_count; i++) { + // Add 2 separate physical devices with the same luid + LUID luid{10U + i, static_cast(100U + i)}; + add_dxgi_adapter(env, std::string("physical_device_") + std::to_string(i), luid, 2); + add_dxgi_adapter(env, std::string("physical_device_") + std::to_string(i + icd_count), luid, 2); + } + uint32_t device_count = icd_count * 2; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().set_api_version(VK_API_VERSION_1_1); + inst.CheckCreate(); + + auto physical_devices = inst.GetPhysDevs(device_count); + for (auto physical_device : physical_devices) { + DeviceWrapper dev{inst}; + dev.CheckCreate(physical_device); + } +} +#endif // defined(WIN32) + +void try_create_swapchain(InstWrapper& inst, VkPhysicalDevice physical_device, DeviceWrapper& dev, VkSurfaceKHR const& surface) { + PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR = inst.load("vkGetPhysicalDeviceSurfaceSupportKHR"); + PFN_vkCreateSwapchainKHR CreateSwapchainKHR = dev.load("vkCreateSwapchainKHR"); + PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR = dev.load("vkGetSwapchainImagesKHR"); + PFN_vkDestroySwapchainKHR DestroySwapchainKHR = dev.load("vkDestroySwapchainKHR"); + ASSERT_TRUE(nullptr != GetPhysicalDeviceSurfaceSupportKHR); + ASSERT_TRUE(nullptr != CreateSwapchainKHR); + ASSERT_TRUE(nullptr != GetSwapchainImagesKHR); + ASSERT_TRUE(nullptr != DestroySwapchainKHR); + + VkBool32 supported = false; + ASSERT_EQ(VK_SUCCESS, GetPhysicalDeviceSurfaceSupportKHR(physical_device, 0, surface, &supported)); + ASSERT_EQ(supported, VK_TRUE); + + VkSwapchainKHR swapchain{}; + VkSwapchainCreateInfoKHR swap_create_info{}; + swap_create_info.surface = surface; + + ASSERT_EQ(VK_SUCCESS, CreateSwapchainKHR(dev, &swap_create_info, nullptr, &swapchain)); + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, GetSwapchainImagesKHR(dev, swapchain, &count, nullptr)); + ASSERT_GT(count, 0U); + std::array images; + ASSERT_EQ(VK_SUCCESS, GetSwapchainImagesKHR(dev, swapchain, &count, images.data())); + DestroySwapchainKHR(dev, swapchain, nullptr); +} + +void add_driver_for_unloading_testing(FrameworkEnvironment& env) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) + .add_instance_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME) + .setup_WSI() + .add_physical_device(PhysicalDevice{} + .add_extension("VK_KHR_swapchain") + .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, true}) + .finish()); +} + +void add_empty_driver_for_unloading_testing(FrameworkEnvironment& env) { + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_instance_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME).setup_WSI(); +} + +TEST(DriverUnloadingFromZeroPhysDevs, InterspersedThroughout) { + FrameworkEnvironment env{}; + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + + DebugUtilsLogger debug_log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().add_extension("VK_EXT_debug_report"); + FillDebugUtilsCreateDetails(inst.create_info, debug_log); + inst.CheckCreate(); + DebugUtilsWrapper log{inst}; + ASSERT_EQ(VK_SUCCESS, CreateDebugUtilsMessenger(log)); + + PFN_vkSubmitDebugUtilsMessageEXT submit_message = inst.load("vkSubmitDebugUtilsMessageEXT"); + ASSERT_TRUE(submit_message != nullptr); + + VkSurfaceKHR pre_surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, pre_surface)); + WrappedHandle pre_enum_phys_devs_surface{ + pre_surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR}; + + VkDebugReportCallbackEXT debug_callback{}; + VkDebugReportCallbackCreateInfoEXT debug_report_create_info{}; + ASSERT_EQ(VK_SUCCESS, create_debug_callback(inst, debug_report_create_info, debug_callback)); + WrappedHandle + pre_enum_phys_devs_debug_report_callback{debug_callback, inst.inst, env.vulkan_functions.vkDestroyDebugReportCallbackEXT}; + + auto phys_devs = inst.GetPhysDevs(); + std::vector> messengers; + std::vector> surfaces; + for (uint32_t i = 0; i < 35; i++) { + VkDebugUtilsMessengerEXT messenger; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkCreateDebugUtilsMessengerEXT(inst.inst, log.get(), nullptr, &messenger)); + messengers.emplace_back(messenger, inst.inst, env.vulkan_functions.vkDestroyDebugUtilsMessengerEXT); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + surfaces.emplace_back(surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR); + } + for (const auto& phys_dev : phys_devs) { + DeviceWrapper dev{inst}; + dev.create_info.add_extension("VK_KHR_swapchain"); + dev.CheckCreate(phys_dev); + for (const auto& surface : surfaces) { + try_create_swapchain(inst, phys_dev, dev, surface.handle); + } + } +} + +TEST(DriverUnloadingFromZeroPhysDevs, InMiddleOfList) { + FrameworkEnvironment env{}; + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + inst.create_info.setup_WSI().add_extension("VK_EXT_debug_report"); + inst.CheckCreate(); + DebugUtilsWrapper log{inst}; + ASSERT_EQ(VK_SUCCESS, CreateDebugUtilsMessenger(log)); + + VkSurfaceKHR pre_surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, pre_surface)); + WrappedHandle pre_enum_phys_devs_surface{ + pre_surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR}; + + VkDebugReportCallbackEXT debug_callback{}; + VkDebugReportCallbackCreateInfoEXT debug_report_create_info{}; + ASSERT_EQ(VK_SUCCESS, create_debug_callback(inst, debug_report_create_info, debug_callback)); + WrappedHandle + pre_enum_phys_devs_debug_report_callback{debug_callback, inst.inst, env.vulkan_functions.vkDestroyDebugReportCallbackEXT}; + + auto phys_devs = inst.GetPhysDevs(); + std::vector> messengers; + std::vector> surfaces; + for (uint32_t i = 0; i < 35; i++) { + VkDebugUtilsMessengerEXT messenger; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkCreateDebugUtilsMessengerEXT(inst.inst, log.get(), nullptr, &messenger)); + messengers.emplace_back(messenger, inst.inst, env.vulkan_functions.vkDestroyDebugUtilsMessengerEXT); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + surfaces.emplace_back(surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR); + } + for (const auto& phys_dev : phys_devs) { + DeviceWrapper dev{inst}; + dev.create_info.add_extension("VK_KHR_swapchain"); + dev.CheckCreate(phys_dev); + for (const auto& surface : surfaces) { + try_create_swapchain(inst, phys_dev, dev, surface.handle); + } + } +} + +TEST(DriverUnloadingFromZeroPhysDevs, AtFrontAndBack) { + FrameworkEnvironment env{}; + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + + DebugUtilsLogger debug_log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().add_extension("VK_EXT_debug_report"); + FillDebugUtilsCreateDetails(inst.create_info, debug_log); + inst.CheckCreate(); + + DebugUtilsWrapper log{inst}; + ASSERT_EQ(VK_SUCCESS, CreateDebugUtilsMessenger(log)); + + VkSurfaceKHR pre_surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, pre_surface)); + WrappedHandle pre_enum_phys_devs_surface{ + pre_surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR}; + + VkDebugReportCallbackEXT debug_callback{}; + VkDebugReportCallbackCreateInfoEXT debug_report_create_info{}; + ASSERT_EQ(VK_SUCCESS, create_debug_callback(inst, debug_report_create_info, debug_callback)); + WrappedHandle + pre_enum_phys_devs_debug_report_callback{debug_callback, inst.inst, env.vulkan_functions.vkDestroyDebugReportCallbackEXT}; + + auto phys_devs = inst.GetPhysDevs(); + std::vector> messengers; + std::vector> surfaces; + for (uint32_t i = 0; i < 35; i++) { + VkDebugUtilsMessengerEXT messenger; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkCreateDebugUtilsMessengerEXT(inst.inst, log.get(), nullptr, &messenger)); + messengers.emplace_back(messenger, inst.inst, env.vulkan_functions.vkDestroyDebugUtilsMessengerEXT); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + surfaces.emplace_back(surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR); + } + for (const auto& phys_dev : phys_devs) { + DeviceWrapper dev{inst}; + dev.create_info.add_extension("VK_KHR_swapchain"); + dev.CheckCreate(phys_dev); + + for (const auto& surface : surfaces) { + try_create_swapchain(inst, phys_dev, dev, surface.handle); + } + } +} + +TEST(DriverUnloadingFromZeroPhysDevs, MultipleEnumerateCalls) { + FrameworkEnvironment env{}; + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + + uint32_t extension_count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, 0)); + ASSERT_EQ(extension_count, 6U); // default extensions + surface extensions + std::array extensions; + ASSERT_EQ(VK_SUCCESS, + env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, extensions.data())); + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto phys_devs1 = inst.GetPhysDevs(); + auto phys_devs2 = inst.GetPhysDevs(); + } + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto phys_devs1 = inst.GetPhysDevs(); + auto phys_devs2 = inst.GetPhysDevs(); + } +} +TEST(DriverUnloadingFromZeroPhysDevs, NoPhysicalDevices) { + FrameworkEnvironment env{}; + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + + DebugUtilsLogger debug_log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().add_extension("VK_EXT_debug_report"); + FillDebugUtilsCreateDetails(inst.create_info, debug_log); + inst.CheckCreate(); + DebugUtilsWrapper log{inst}; + ASSERT_EQ(VK_SUCCESS, CreateDebugUtilsMessenger(log)); + + VkSurfaceKHR pre_surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, pre_surface)); + WrappedHandle pre_enum_phys_devs_surface{ + pre_surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR}; + + VkDebugReportCallbackEXT debug_callback{}; + VkDebugReportCallbackCreateInfoEXT debug_report_create_info{}; + ASSERT_EQ(VK_SUCCESS, create_debug_callback(inst, debug_report_create_info, debug_callback)); + WrappedHandle + pre_enum_phys_devs_debug_report_callback{debug_callback, inst.inst, env.vulkan_functions.vkDestroyDebugReportCallbackEXT}; + + // No physical devices == VK_ERROR_INITIALIZATION_FAILED + inst.GetPhysDevs(VK_ERROR_INITIALIZATION_FAILED); + + std::vector> messengers; + std::vector> surfaces; + for (uint32_t i = 0; i < 35; i++) { + VkDebugUtilsMessengerEXT messenger; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkCreateDebugUtilsMessengerEXT(inst.inst, log.get(), nullptr, &messenger)); + messengers.emplace_back(messenger, inst.inst, env.vulkan_functions.vkDestroyDebugUtilsMessengerEXT); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + surfaces.emplace_back(surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR); + } +} + +TEST(DriverUnloadingFromZeroPhysDevs, HandleRecreation) { + FrameworkEnvironment env{}; + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + add_driver_for_unloading_testing(env); + add_empty_driver_for_unloading_testing(env); + + DebugUtilsLogger debug_log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT}; + InstWrapper inst{env.vulkan_functions}; + inst.create_info.setup_WSI().add_extension("VK_EXT_debug_report"); + FillDebugUtilsCreateDetails(inst.create_info, debug_log); + inst.CheckCreate(); + DebugUtilsWrapper log{inst}; + ASSERT_EQ(VK_SUCCESS, CreateDebugUtilsMessenger(log)); + + PFN_vkSubmitDebugUtilsMessageEXT submit_message = inst.load("vkSubmitDebugUtilsMessageEXT"); + ASSERT_TRUE(submit_message != nullptr); + + VkSurfaceKHR pre_surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, pre_surface)); + WrappedHandle pre_enum_phys_devs_surface{ + pre_surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR}; + + VkDebugReportCallbackEXT debug_callback{}; + VkDebugReportCallbackCreateInfoEXT debug_report_create_info{}; + ASSERT_EQ(VK_SUCCESS, create_debug_callback(inst, debug_report_create_info, debug_callback)); + WrappedHandle + pre_enum_phys_devs_debug_report_callback{debug_callback, inst.inst, env.vulkan_functions.vkDestroyDebugReportCallbackEXT}; + + auto phys_devs = inst.GetPhysDevs(); + std::vector> messengers; + std::vector> surfaces; + for (uint32_t i = 0; i < 35; i++) { + VkDebugUtilsMessengerEXT messenger; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkCreateDebugUtilsMessengerEXT(inst.inst, log.get(), nullptr, &messenger)); + messengers.emplace_back(messenger, inst.inst, env.vulkan_functions.vkDestroyDebugUtilsMessengerEXT); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + surfaces.emplace_back(surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR); + } + // Remove some elements arbitrarily - remove 15 of each + // Do it backwards so the indexes are 'corect' + for (uint32_t i = 31; i > 2; i -= 2) { + messengers.erase(messengers.begin() + i); + surfaces.erase(surfaces.begin() + i); + } + // Add in another 100 + for (uint32_t i = 0; i < 100; i++) { + VkDebugUtilsMessengerEXT messenger; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkCreateDebugUtilsMessengerEXT(inst.inst, log.get(), nullptr, &messenger)); + messengers.emplace_back(messenger, inst.inst, env.vulkan_functions.vkDestroyDebugUtilsMessengerEXT); + + VkSurfaceKHR surface{}; + ASSERT_EQ(VK_SUCCESS, create_surface(inst, surface)); + surfaces.emplace_back(surface, inst.inst, env.vulkan_functions.vkDestroySurfaceKHR); + } + for (const auto& phys_dev : phys_devs) { + DeviceWrapper dev{inst}; + dev.create_info.add_extension("VK_KHR_swapchain"); + dev.CheckCreate(phys_dev); + for (const auto& surface : surfaces) { + try_create_swapchain(inst, phys_dev, dev, surface.handle); + } + } + VkDebugUtilsMessengerCallbackDataEXT data{}; + data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT; + data.pMessage = "I'm a test message!"; + data.messageIdNumber = 1; + submit_message(inst.inst, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, &data); + + ASSERT_EQ(120U + 1U, log.count(data.pMessage)); +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_settings_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_settings_tests.cpp new file mode 100644 index 0000000000..b3313c7b0e --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_settings_tests.cpp @@ -0,0 +1,3020 @@ +/* + * Copyright (c) 2023 The Khronos Group Inc. + * Copyright (c) 2023 Valve Corporation + * Copyright (c) 2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +#include + +std::string get_settings_location_log_message([[maybe_unused]] FrameworkEnvironment const& env, + [[maybe_unused]] bool use_secure = false) { + std::string s = "Using layer configurations found in loader settings from "; +#if defined(WIN32) + return s + (env.get_folder(ManifestLocation::settings_location).location() / "vk_loader_settings.json").string(); +#elif COMMON_UNIX_PLATFORMS + if (use_secure) + return s + "/etc/vulkan/loader_settings.d/vk_loader_settings.json"; + else + return s + "/home/fake_home/.local/share/vulkan/loader_settings.d/vk_loader_settings.json"; +#endif +} +enum class LayerType { + exp, + imp, + imp_with_enable_env, +}; +const char* add_layer_and_settings(FrameworkEnvironment& env, const char* layer_name, LayerType layer_type, const char* control) { + if (layer_type == LayerType::imp) { + env.add_implicit_layer( + ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("BADGER" + std::to_string(env.layers.size()))), + std::string(layer_name) + std::to_string(env.layers.size()) + ".json"); + } else if (layer_type == LayerType::imp_with_enable_env) { + env.add_implicit_layer( + ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("BADGER" + std::to_string(env.layers.size())) + .set_enable_environment("MUSHROOM" + std::to_string(env.layers.size()))), + std::string(layer_name) + std::to_string(env.layers.size()) + ".json"); + } else if (layer_type == LayerType::exp) { + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + std::string(layer_name) + std::to_string(env.layers.size()) + ".json"}); + } else { + abort(); + } + env.loader_settings.app_specific_settings.back().add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name) + .set_control(control) + .set_treat_as_implicit_manifest(layer_type != LayerType::exp) + .set_path(env.get_shimmed_layer_manifest_path(env.layers.size() - 1))); + return layer_name; +} + +// Make sure settings layer is found and that a layer defined in it is loaded +TEST(SettingsFile, FileExist) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all")); + const char* regular_layer_name = add_layer_and_settings(env, "VK_LAYER_TestLayer_0", LayerType::exp, "on"); + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, regular_layer_name)); + } +} + +// Make sure that if the settings file is in a user local path, that it isn't used when running with elevated privileges +TEST(SettingsFile, SettingsInUnsecuredLocation) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* regular_layer_name = "VK_LAYER_TestLayer_0"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_layer_name) + .set_path(env.get_layer_manifest_path()) + .set_control("on")))); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + env.debug_log.clear(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); + } + env.platform_shim->set_elevated_privilege(true); + { + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +TEST(SettingsFile, SettingsInSecuredLocation) { + FrameworkEnvironment env{FrameworkSettings{}.set_secure_loader_settings(true)}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + const char* regular_layer_name = "VK_LAYER_TestLayer_0"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_layer_name) + .set_path(env.get_layer_manifest_path()) + .set_control("on")))); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env, true))); + env.debug_log.clear(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); + } + env.platform_shim->set_elevated_privilege(true); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env, true))); + env.debug_log.clear(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); + } +} + +// Make sure settings file can have multiple sets of settings +TEST(SettingsFile, SupportsMultipleSettingsSimultaneously) { + FrameworkEnvironment env{}; + const char* app_specific_layer_name = "VK_LAYER_TestLayer_0"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(app_specific_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "VK_LAYER_app_specific.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + const char* global_layer_name = "VK_LAYER_TestLayer_1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(global_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "VK_LAYER_global.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + env.update_loader_settings( + env.loader_settings + // configuration that matches the current executable path - but dont set the app-key just yet + .add_app_specific_setting(AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(app_specific_layer_name) + .set_path(env.get_layer_manifest_path(0)) + .set_control("on")) + .add_app_key("key0")) + // configuration that should never be used + .add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration( + LoaderSettingsLayerConfiguration{}.set_name("VK_LAYER_haha").set_path("/made/up/path").set_control("auto")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name("VK_LAYER_haha2") + .set_path("/made/up/path2") + .set_control("auto")) + .add_app_key("key1") + .add_app_key("key2")) + // Add a global configuration + .add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(global_layer_name) + .set_path(env.get_layer_manifest_path(1)) + .set_control("on")))); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, global_layer_name)); + + // Check that the global config is used + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, global_layer_name)); + } + env.debug_log.clear(); + // Set one set to contain the current executable path + env.loader_settings.app_specific_settings.at(0).add_app_key(test_platform_executable_path()); + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, app_specific_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, app_specific_layer_name)); + } +} + +// Make sure layers found through the settings file are enableable by environment variables +TEST(SettingsFile, LayerAutoEnabledByEnvVars) { + FrameworkEnvironment env{}; + env.loader_settings.set_file_format_version({1, 0, 0}); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* layer_name = "VK_LAYER_automatic"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "layer_name.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{}.set_name(layer_name).set_path(env.get_layer_manifest_path(0)).set_control("auto")))); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + { + EnvVarWrapper instance_layers{"VK_INSTANCE_LAYERS", layer_name}; + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } + env.debug_log.clear(); + + { + EnvVarWrapper loader_layers_enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); + } +} + +// Make sure layers are disallowed from loading if the settings file says so +TEST(SettingsFile, LayerDisablesImplicitLayer) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* implicit_layer_name = "VK_LAYER_Implicit_TestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("oof")), + "implicit_test_layer.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("off") + .set_treat_as_implicit_manifest(true)))); + { + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } +} + +// Implicit layers should be reordered by the settings file +TEST(SettingsFile, ImplicitLayersDontInterfere) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("oof")), + "implicit_test_layer1.json"); + const char* implicit_layer_name2 = "VK_LAYER_Implicit_TestLayer2"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("oof")), + "implicit_test_layer2.json"); + // validate order when settings file is not present + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name2)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name2)); + } + // Now setup the settings file to contain a specific order + env.update_loader_settings( + LoaderSettings{}.add_app_specific_setting(AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name1) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name2) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name2)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name2)); + } + + // Flip the order and store the settings in the env for later use in the test + env.loader_settings = + LoaderSettings{}.add_app_specific_setting(AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name2) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name1) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); + } + + // Now add an explicit layer into the middle and verify that is in the correct location + const char* explicit_layer_name3 = "VK_LAYER_Explicit_TestLayer3"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name3).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer3.json"); + env.loader_settings.app_specific_settings.at(0).layer_configurations.insert( + env.loader_settings.app_specific_settings.at(0).layer_configurations.begin() + 1, + LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name3) + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_control("on")); + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, implicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name3)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); + } +} + +// Make sure layers that are disabled can't be enabled by the application +TEST(SettingsFile, ApplicationEnablesIgnored) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* explicit_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("off")))); + { + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(explicit_layer_name); + ASSERT_NO_FATAL_FAILURE(inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); + } +} + +TEST(SettingsFile, LayerListIsEmpty) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* implicit_layer_name = "VK_LAYER_TestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("HeeHee")), + "regular_test_layer.json"); + + JsonWriter writer{}; + writer.StartObject(); + writer.AddKeyedString("file_format_version", "1.0.0"); + writer.StartKeyedObject("settings"); + writer.StartKeyedObject("layers"); + writer.EndObject(); + writer.EndObject(); + writer.EndObject(); + env.write_settings_file(writer.output); + + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); +} + +// If a settings file exists but contains no valid settings - don't consider it +TEST(SettingsFile, InvalidSettingsFile) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* explicit_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("foobarbaz")), + "implicit_test_layer.json"); + auto check_integrity = [&env, explicit_layer_name, implicit_layer_name]() { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name)); + }; + + { + std::fstream fuzzer_output_json_file{FUZZER_OUTPUT_JSON_FILE, std::ios_base::in}; + ASSERT_TRUE(fuzzer_output_json_file.is_open()); + std::stringstream fuzzer_output_json; + fuzzer_output_json << fuzzer_output_json_file.rdbuf(); + env.write_settings_file(fuzzer_output_json.str()); + + check_integrity(); + } + + // No actual settings + { + JsonWriter writer{}; + writer.StartObject(); + writer.AddKeyedString("file_format_version", "0.0.0"); + writer.EndObject(); + env.write_settings_file(writer.output); + + check_integrity(); + } + + { + JsonWriter writer{}; + writer.StartObject(); + writer.AddKeyedString("file_format_version", "0.0.0"); + writer.StartKeyedArray("settings_array"); + writer.EndArray(); + writer.StartKeyedObject("settings"); + writer.EndObject(); + writer.EndObject(); + env.write_settings_file(writer.output); + + check_integrity(); + } + + { + JsonWriter writer{}; + writer.StartObject(); + for (uint32_t i = 0; i < 3; i++) { + writer.StartKeyedArray("settings_array"); + writer.EndArray(); + writer.StartKeyedObject("boogabooga"); + writer.EndObject(); + writer.StartKeyedObject("settings"); + writer.EndObject(); + } + writer.EndObject(); + env.write_settings_file(writer.output); + + check_integrity(); + } +} + +// Unknown layers are put in the correct location +TEST(SettingsFile, UnknownLayersInRightPlace) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* explicit_layer_name1 = "VK_LAYER_TestLayer1"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer1.json"); + const char* implicit_layer_name1 = "VK_LAYER_ImplicitTestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("foobarbaz")), + "implicit_test_layer1.json"); + const char* explicit_layer_name2 = "VK_LAYER_TestLayer2"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer2.json"); + const char* implicit_layer_name2 = "VK_LAYER_ImplicitTestLayer2"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("foobarbaz")), + "implicit_test_layer2.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name2) + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_control("on")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name2) + .set_path(env.get_shimmed_layer_manifest_path(3)) + .set_control("on") + .set_treat_as_implicit_manifest(true)))); + + auto layer_props = env.GetLayerProperties(4); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_name2)); + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_name2)); +} + +// Settings file allows loading multiple layers with the same name - as long as the path is different +TEST(SettingsFile, MultipleLayersWithSameName) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_description("0000") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer1.json"); + + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(explicit_layer_name) + .set_description("1111") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer2.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("on")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("on")))); + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(0).description, "0000")); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).description, "1111")); + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); + ASSERT_TRUE(string_eq(layers.at(0).description, "0000")); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).description, "1111")); +} + +// Settings file shouldn't be able to cause the same layer from the same path twice +TEST(SettingsFile, MultipleLayersWithSamePath) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer1.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("on")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("on")))); + + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); +} + +// Settings contains a layer whose name doesn't match the one found in the layer manifest - make sure the layer from the settings +// file is removed +TEST(SettingsFile, MismatchedLayerNameAndManifestPath) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* manifest_explicit_layer_name = "VK_LAYER_MANIFEST_TestLayer"; + const char* settings_explicit_layer_name = "VK_LAYER_Settings_TestLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(manifest_explicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer1.json"); + + const char* implicit_layer_name = "VK_LAYER_Implicit_TestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("oof")), + "implicit_test_layer.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(settings_explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("on")))); + + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); +} + +// Settings file should take precedence over the meta layer, if present +TEST(SettingsFile, ImplicitLayerWithEnableEnvironment) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_1 = "VK_LAYER_Regular_TestLayer"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"); + + const char* implicit_layer_1 = "VK_LAYER_RegularImplicit_TestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("AndISaidHey") + .set_enable_environment("WhatsGoingOn")), + "implicit_layer1.json"); + + const char* explicit_layer_2 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer2.json")); + + const char* implicit_layer_2 = "VK_LAYER_RegularImplicit_TestLayer2"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("HeyHeyHeyyaya") + .set_enable_environment("HeyHeyHeyhey")), + "implicit_layer2.json")); + const char* explicit_layer_3 = "VK_LAYER_Regular_TestLayer3"; + env.add_explicit_layer(TestLayerDetails( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_3).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer3.json")); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_1) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(false)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_1) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_2) + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_control("auto") + .set_treat_as_implicit_manifest(false)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_2) + .set_path(env.get_shimmed_layer_manifest_path(3)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_3) + .set_path(env.get_shimmed_layer_manifest_path(4)) + .set_control("on") + .set_treat_as_implicit_manifest(false)))); + { + auto layer_props = env.GetLayerProperties(5); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_2)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_2)); + ASSERT_TRUE(string_eq(layer_props.at(4).layerName, explicit_layer_3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_3)); + } + { + EnvVarWrapper enable_meta_layer{"WhatsGoingOn", "1"}; + auto layer_props = env.GetLayerProperties(5); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_2)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_2)); + ASSERT_TRUE(string_eq(layer_props.at(4).layerName, explicit_layer_3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_3)); + } + { + EnvVarWrapper enable_meta_layer{"HeyHeyHeyhey", "1"}; + auto layer_props = env.GetLayerProperties(5); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_2)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_2)); + ASSERT_TRUE(string_eq(layer_props.at(4).layerName, explicit_layer_3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_2)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_3)); + } +} + +// Settings file should take precedence over the meta layer, if present +TEST(SettingsFile, MetaLayerAlsoActivates) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* settings_explicit_layer_name = "VK_LAYER_Regular_TestLayer"; + env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(settings_explicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer.json"); + + const char* settings_implicit_layer_name = "VK_LAYER_RegularImplicit_TestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(settings_implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("AndISaidHey") + .set_enable_environment("WhatsGoingOn")), + "implicit_layer.json"); + + const char* component_explicit_layer_name1 = "VK_LAYER_Component_TestLayer1"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(component_explicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "component_test_layer1.json")); + + const char* component_explicit_layer_name2 = "VK_LAYER_Component_TestLayer2"; + env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(component_explicit_layer_name2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "component_test_layer2.json")); + + const char* meta_layer_name1 = "VK_LAYER_meta_layer1"; + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} + .set_name(meta_layer_name1) + .add_component_layer(component_explicit_layer_name2) + .add_component_layer(component_explicit_layer_name1) + .set_disable_environment("NotGonnaWork")), + "meta_test_layer.json"); + + const char* meta_layer_name2 = "VK_LAYER_meta_layer2"; + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} + .set_name(meta_layer_name2) + .add_component_layer(component_explicit_layer_name1) + .set_disable_environment("ILikeTrains") + .set_enable_environment("BakedBeans")), + "not_automatic_meta_test_layer.json"); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(settings_explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("on") + .set_treat_as_implicit_manifest(false)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(settings_implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + { + EnvVarWrapper enable_meta_layer{"WhatsGoingOn", "1"}; + auto layer_props = env.GetLayerProperties(6); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, settings_explicit_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, meta_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, meta_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, component_explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(4).layerName, component_explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(5).layerName, settings_implicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 5); + ASSERT_TRUE(string_eq(layers.at(0).layerName, settings_explicit_layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, component_explicit_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, component_explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(3).layerName, meta_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(4).layerName, settings_implicit_layer_name)); + } + { + EnvVarWrapper enable_meta_layer{"BakedBeans", "1"}; + auto layer_props = env.GetLayerProperties(6); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, settings_explicit_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, meta_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, meta_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(3).layerName, component_explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(4).layerName, component_explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(5).layerName, settings_implicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 5); + ASSERT_TRUE(string_eq(layers.at(0).layerName, settings_explicit_layer_name)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, component_explicit_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, component_explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(3).layerName, meta_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(4).layerName, meta_layer_name2)); + } +} + +// Layers are correctly ordered by settings file. +TEST(SettingsFile, LayerOrdering) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"); + + const char* explicit_layer_name2 = "VK_LAYER_Regular_TestLayer2"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer2.json"); + + const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Domierigato")), + "implicit_layer1.json"); + + const char* implicit_layer_name2 = "VK_LAYER_Implicit_TestLayer2"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name2) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Mistehrobato")), + "implicit_layer2.json"); + + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all")); + + std::vector layer_configs{4}; + layer_configs.at(0) + .set_name(explicit_layer_name1) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("on") + .set_treat_as_implicit_manifest(false); + layer_configs.at(1) + .set_name(explicit_layer_name2) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("on") + .set_treat_as_implicit_manifest(false); + layer_configs.at(2) + .set_name(implicit_layer_name1) + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_control("on") + .set_treat_as_implicit_manifest(true); + layer_configs.at(3) + .set_name(implicit_layer_name2) + .set_path(env.get_shimmed_layer_manifest_path(3)) + .set_control("on") + .set_treat_as_implicit_manifest(true); + + std::sort(layer_configs.begin(), layer_configs.end()); + uint32_t permutation_count = 0; + do { + env.loader_settings.app_specific_settings.at(0).layer_configurations.clear(); + env.loader_settings.app_specific_settings.at(0).add_layer_configurations(layer_configs); + env.update_loader_settings(env.loader_settings); + + auto layer_props = env.GetLayerProperties(4); + for (uint32_t i = 0; i < 4; i++) { + ASSERT_TRUE(layer_configs.at(i).name == layer_props.at(i).layerName); + } + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto active_layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + for (uint32_t i = 0; i < 4; i++) { + ASSERT_TRUE(layer_configs.at(i).name == active_layers.at(i).layerName); + } + env.debug_log.clear(); + permutation_count++; + } while (std::next_permutation(layer_configs.begin(), layer_configs.end())); + ASSERT_EQ(permutation_count, 24U); // should be this many orderings +} + +TEST(SettingsFile, EnvVarsWork_VK_LAYER_PATH) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"} + .set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Domierigato")), + "implicit_layer1.json"); + const char* non_env_var_layer_name2 = "VK_LAYER_Regular_TestLayer2"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(non_env_var_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer2.json"}); + + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name1)); + } + env.update_loader_settings(env.loader_settings.add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(non_env_var_layer_name2) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(2))) + .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")))); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, non_env_var_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, non_env_var_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, non_env_var_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, explicit_layer_name1)); + } +} + +TEST(SettingsFile, EnvVarsWork_VK_ADD_LAYER_PATH) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Domierigato")), + "implicit_layer1.json"); + const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"} + .set_discovery_type(ManifestDiscoveryType::add_env_var)); + const char* non_env_var_layer_name2 = "VK_LAYER_Regular_TestLayer2"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(non_env_var_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer2.json"}); + + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, non_env_var_layer_name2)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name1)); + } + + env.update_loader_settings(env.loader_settings.add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name1) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(1))) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(non_env_var_layer_name2) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(2))) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name1) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true)))); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, non_env_var_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, implicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, non_env_var_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, non_env_var_layer_name2)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); + } +} + +TEST(SettingsFile, EnvVarsWork_VK_IMPLICIT_LAYER_PATH) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"} + .set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Domierigato")), + "implicit_layer1.json"); + const char* settings_layer_path = "VK_LAYER_Regular_TestLayer2"; + env.add_implicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(settings_layer_path) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Domierigato")), + "implicit_test_layer2.json"}); + + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, settings_layer_path)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, settings_layer_path)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, settings_layer_path)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, explicit_layer_name1)); + } + env.update_loader_settings(env.loader_settings.add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(settings_layer_path) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")))); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, settings_layer_path)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, settings_layer_path)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, settings_layer_path)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, explicit_layer_name1)); + } +} + +TEST(SettingsFile, EnvVarsWork_VK_ADD_IMPLICIT_LAYER_PATH) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name1) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("Domierigato")), + "implicit_layer1.json"); + const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"} + .set_discovery_type(ManifestDiscoveryType::add_env_var)); + const char* settings_layer_name = "VK_LAYER_Regular_TestLayer2"; + env.add_implicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(settings_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("gozaimasu")), + "implicit_test_layer2.json"}); + + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, settings_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, settings_layer_name)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, settings_layer_name)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, explicit_layer_name1)); + } + + env.update_loader_settings(env.loader_settings.add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name1) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(1))) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(settings_layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name1) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true)))); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, settings_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, implicit_layer_name1)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, settings_layer_name)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); + } + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.create_info.add_layer(explicit_layer_name1); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, settings_layer_name)); + ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); + } +} + +TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* filler_layer_name = "VK_LAYER_filler"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(filler_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "filler_layer.json"}); + + const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"}); + + { + EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS", explicit_layer_name}; + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, filler_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layer = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layer.at(0).layerName, explicit_layer_name)); + } + env.update_loader_settings(env.loader_settings.add_app_specific_setting( + AppSpecificSettings{} + .add_stderr_log_filter("all") + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(filler_layer_name) + .set_control("auto") + .set_path(env.get_shimmed_layer_manifest_path(0))) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_control("off") + .set_path(env.get_shimmed_layer_manifest_path(1))))); + { + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, filler_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS", explicit_layer_name}; + { + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, filler_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).control = "auto"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, filler_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).control = "on"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, filler_layer_name)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); + } +} + +TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS_multiple_layers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"}); + + const char* explicit_layer_name2 = "VK_LAYER_Regular_TestLayer2"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer2.json"}); + + const char* explicit_layer_name3 = "VK_LAYER_Regular_TestLayer3"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name3).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer3.json"}); + + EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS"}; + vk_instance_layers.add_to_list(explicit_layer_name2); + vk_instance_layers.add_to_list(explicit_layer_name1); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); + auto layer = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layer.at(0).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer.at(1).layerName, explicit_layer_name1)); + } + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configurations( + {LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name1) + .set_control("off") + .set_path(env.get_shimmed_layer_manifest_path(0)), + LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name2) + .set_control("off") + .set_path(env.get_shimmed_layer_manifest_path(1)), + LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name3) + .set_control("auto") + .set_path(env.get_shimmed_layer_manifest_path(2))})); + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).control = "auto"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).control = "on"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).control = "off"; + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).control = "auto"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name2)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).control = "on"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name2)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).control = "auto"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name2)); + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).control = "on"; + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(3); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name2)); + ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name3)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); + ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name2)); + } +} + +// Make sure that layers disabled by settings file aren't enabled by VK_LOADER_LAYERS_ENABLE +TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_ENABLE) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all")); + const char* explicit_layer_name = add_layer_and_settings(env, "VK_LAYER_Regular_TestLayer1", LayerType::exp, "off"); + env.update_loader_settings(env.loader_settings); + + EnvVarWrapper vk_instance_layers{"VK_LOADER_LAYERS_ENABLE", explicit_layer_name}; + ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); +} + +TEST(SettingsFile, settings_disable_layer_enabled_by_env_vars) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all")); + std::vector layer_names; + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_alpha", LayerType::imp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_bravo", LayerType::imp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_charlie", LayerType::imp, "auto")); + env.loader_settings.app_specific_settings.back().add_layer_configuration( + LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_delta", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_echo", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_foxtrot", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_gamma", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_indigo", LayerType::exp, "auto")); + auto disable_layer_name = add_layer_and_settings(env, "VK_LAYER_juniper", LayerType::exp, "off"); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_kangaroo", LayerType::exp, "on")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_lima", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_mango", LayerType::exp, "auto")); + + env.update_loader_settings(env.loader_settings); + { + EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS", disable_layer_name}; + auto layer_props = env.GetLayerProperties(11); + for (size_t i = 0; i < layer_props.size(); i++) { + ASSERT_TRUE(string_eq(layer_names.at(i), layer_props.at(i).layerName)); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + ASSERT_TRUE(string_eq(layer_names.at(0), layers.at(0).layerName)); + ASSERT_TRUE(string_eq(layer_names.at(1), layers.at(1).layerName)); + ASSERT_TRUE(string_eq(layer_names.at(2), layers.at(2).layerName)); + ASSERT_TRUE(string_eq(layer_names.at(8), layers.at(3).layerName)); + } + { + EnvVarWrapper vk_instance_layers{"VK_LOADER_LAYERS_ENABLE", disable_layer_name}; + auto layer_props = env.GetLayerProperties(11); + for (size_t i = 0; i < layer_props.size(); i++) { + ASSERT_TRUE(string_eq(layer_names.at(i), layer_props.at(i).layerName)); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + ASSERT_TRUE(string_eq(layer_names.at(0), layers.at(0).layerName)); + ASSERT_TRUE(string_eq(layer_names.at(1), layers.at(1).layerName)); + ASSERT_TRUE(string_eq(layer_names.at(2), layers.at(2).layerName)); + ASSERT_TRUE(string_eq(layer_names.at(8), layers.at(3).layerName)); + } + { + auto layer_props = env.GetLayerProperties(11); + for (size_t i = 0; i < layer_props.size(); i++) { + ASSERT_TRUE(string_eq(layer_names.at(i), layer_props.at(i).layerName)); + } + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(disable_layer_name); + inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT); + } +} + +// Make sure that layers enabled by settings file aren't disabled by VK_LOADER_LAYERS_ENABLE +TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_DISABLE) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"}); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0))))); + + EnvVarWrapper vk_instance_layers{"VK_LOADER_LAYERS_DISABLE", explicit_layer_name}; + auto layer_props = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); +} + +#if defined(WIN32) +TEST(SettingsFile, MultipleKeysInRegistryInUnsecureLocation) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.platform_shim->add_unsecured_manifest(ManifestCategory::settings, "jank_path"); + env.platform_shim->add_unsecured_manifest(ManifestCategory::settings, "jank_path2"); + + const char* regular_layer_name = "VK_LAYER_TestLayer_0"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_layer_name) + .set_path(env.get_layer_manifest_path()) + .set_control("on")))); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); +} + +TEST(SettingsFile, MultipleKeysInRegistryInSecureLocation) { + FrameworkEnvironment env{FrameworkSettings{}.set_secure_loader_settings(true)}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.platform_shim->add_manifest(ManifestCategory::settings, "jank_path"); + env.platform_shim->add_manifest(ManifestCategory::settings, "jank_path2"); + + const char* regular_layer_name = "VK_LAYER_TestLayer_0"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_test_layer.json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_layer_name) + .set_path(env.get_layer_manifest_path()) + .set_control("on")))); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + + // Make sure it works if the settings file is in the HKEY_LOCAL_MACHINE + env.platform_shim->set_elevated_privilege(true); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); + { + auto layer_props = env.GetLayerProperties(1); + EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); + + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); + } +} +#endif + +// Preinstance functions respect the settings file +TEST(SettingsFile, PreInstanceFunctions) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties")) + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "implicit_test_layer.json"); + + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_control("on") + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_treat_as_implicit_manifest(true))); + env.update_loader_settings(env.loader_settings); + { + auto& layer = env.get_test_layer(0); + // Check layer props + uint32_t layer_props = 43; + layer.set_reported_layer_props(layer_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, layer_props); + + // check extension props + uint32_t ext_props = 52; + layer.set_reported_extension_props(ext_props); + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, ext_props); + + // check version + uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); + layer.set_reported_instance_version(layer_version); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, layer_version); + } + // control is set to off + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); + env.update_loader_settings(env.loader_settings); + + { + auto& layer = env.get_test_layer(0); + // Check layer props + uint32_t layer_props = 43; + layer.set_reported_layer_props(layer_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, 0U); // dont use the intercepted count + + // check extension props + uint32_t ext_props = 52; + layer.set_reported_extension_props(ext_props); + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, 4U); // dont use the intercepted count - use default count + + // check version + uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); + layer.set_reported_instance_version(layer_version); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, VK_HEADER_VERSION_COMPLETE); + } + + // control is set to auto + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); + env.update_loader_settings(env.loader_settings); + + { + auto& layer = env.get_test_layer(0); + // Check layer props + uint32_t layer_props = 43; + layer.set_reported_layer_props(layer_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, layer_props); + + // check extension props + uint32_t ext_props = 52; + layer.set_reported_extension_props(ext_props); + count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, ext_props); + + // check version + uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); + layer.set_reported_instance_version(layer_version); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, layer_version); + } +} + +// If an implicit layer's disable environment variable is set, but the settings file says to turn the layer on, the layer should be +// activated. +TEST(SettingsFile, ImplicitLayerDisableEnvironmentVariableOverriden) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + + const char* filler_layer_name = "VK_LAYER_filler"; + env.add_explicit_layer( + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(filler_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer.json"); + + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .set_enable_environment("ENABLE_ME")), + "implicit_test_layer.json"); + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configurations( + {LoaderSettingsLayerConfiguration{} + .set_name(filler_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(false), + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)})); + + auto check_log_for_insert_instance_layer_string = [&env, implicit_layer_name](bool check_for_enable) { + { + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + if (check_for_enable) { + ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name)); + } else { + ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); + ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); + } + } + env.debug_log.clear(); + }; + + // control is set to on + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).set_control("on"); + env.update_loader_settings(env.loader_settings); + { + EnvVarWrapper enable_env_var{"ENABLE_ME"}; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + auto layers = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layers[0].layerName, filler_layer_name)); + ASSERT_TRUE(string_eq(layers[1].layerName, implicit_layer_name)); + + check_log_for_insert_instance_layer_string(true); + + enable_env_var.set_new_value("0"); + check_log_for_insert_instance_layer_string(true); + + enable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(true); + + enable_env_var.remove_value(); + + disable_env_var.set_new_value("0"); + check_log_for_insert_instance_layer_string(true); + + disable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(true); + + enable_env_var.set_new_value("1"); + disable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(true); + } + + // control is set to off + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).set_control("off"); + env.update_loader_settings(env.loader_settings); + { + EnvVarWrapper enable_env_var{"ENABLE_ME"}; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + auto layers = env.GetLayerProperties(1); + ASSERT_TRUE(string_eq(layers[0].layerName, filler_layer_name)); + + check_log_for_insert_instance_layer_string(false); + + enable_env_var.set_new_value("0"); + check_log_for_insert_instance_layer_string(false); + + enable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(false); + + enable_env_var.remove_value(); + + disable_env_var.set_new_value("0"); + check_log_for_insert_instance_layer_string(false); + + disable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(false); + + enable_env_var.set_new_value("1"); + disable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(false); + } + + // control is set to auto + env.loader_settings.app_specific_settings.at(0).layer_configurations.at(1).set_control("auto"); + env.update_loader_settings(env.loader_settings); + { + EnvVarWrapper enable_env_var{"ENABLE_ME"}; + EnvVarWrapper disable_env_var{"DISABLE_ME"}; + + auto layers = env.GetLayerProperties(2); + ASSERT_TRUE(string_eq(layers[0].layerName, filler_layer_name)); + ASSERT_TRUE(string_eq(layers[1].layerName, implicit_layer_name)); + + check_log_for_insert_instance_layer_string(false); + + enable_env_var.set_new_value("0"); + check_log_for_insert_instance_layer_string(false); + + enable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(true); + + enable_env_var.remove_value(); + + disable_env_var.set_new_value("0"); + check_log_for_insert_instance_layer_string(false); + + disable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(false); + + enable_env_var.set_new_value("1"); + disable_env_var.set_new_value("1"); + check_log_for_insert_instance_layer_string(false); + } +} + +TEST(SettingsFile, ImplicitLayersNotAccidentallyEnabled) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all")); + std::vector layer_names; + + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_alpha", LayerType::imp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_bravo", LayerType::imp_with_enable_env, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_charlie", LayerType::imp_with_enable_env, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_delta", LayerType::imp_with_enable_env, "auto")); + + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_echo", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_foxtrot", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_gamma", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_indigo", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_juniper", LayerType::exp, "auto")); + + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_kangaroo", LayerType::exp, "on")); + + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_lima", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_mango", LayerType::exp, "auto")); + layer_names.push_back(add_layer_and_settings(env, "VK_LAYER_niagara", LayerType::exp, "auto")); + + env.update_loader_settings(env.loader_settings); + { + auto layer_props = env.GetLayerProperties(13); + for (size_t i = 0; i < layer_props.size(); i++) { + ASSERT_TRUE(string_eq(layer_names.at(i), layer_props.at(i).layerName)); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_names.at(0))); + ASSERT_TRUE(string_eq(layers.at(1).layerName, layer_names.at(9))); + } + + { + EnvVarWrapper env_var{"MUSHROOM1", "1"}; + auto layer_props = env.GetLayerProperties(13); + for (size_t i = 0; i < layer_props.size(); i++) { + ASSERT_TRUE(string_eq(layer_names.at(i), layer_props.at(i).layerName)); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_names.at(0))); + ASSERT_TRUE(string_eq(layers.at(1).layerName, layer_names.at(1))); + ASSERT_TRUE(string_eq(layers.at(2).layerName, layer_names.at(9))); + } + { + EnvVarWrapper env_var{"BADGER0", "1"}; + auto layer_props = env.GetLayerProperties(13); + for (size_t i = 0; i < layer_props.size(); i++) { + ASSERT_TRUE(string_eq(layer_names.at(i), layer_props.at(i).layerName)); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_names.at(9))); + } +} + +TEST(SettingsFile, ImplicitLayersPreInstanceEnumInstLayerProps) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties"))), + "implicit_test_layer.json"); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + + uint32_t layer_props = 43; + auto& layer = env.get_test_layer(0); + layer.set_reported_layer_props(layer_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, layer_props); +} + +TEST(SettingsFile, EnableEnvironmentImplicitLayersPreInstanceEnumInstLayerProps) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .set_enable_environment("ENABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceLayerProperties") + .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties"))), + "implicit_test_layer.json"); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + + uint32_t layer_props = 43; + auto& layer = env.get_test_layer(0); + layer.set_reported_layer_props(layer_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); + ASSERT_EQ(count, 1U); + std::array layers{}; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, layers.data())); + ASSERT_EQ(count, 1U); + ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name)); +} + +TEST(SettingsFile, ImplicitLayersPreInstanceEnumInstExtProps) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties"))), + "implicit_test_layer.json"); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + + uint32_t ext_props = 52; + auto& layer = env.get_test_layer(0); + layer.set_reported_extension_props(ext_props); + + uint32_t count = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); + ASSERT_EQ(count, ext_props); +} + +TEST(SettingsFile, EnableEnvironmentImplicitLayersPreInstanceEnumInstExtProps) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer( + ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME") + .set_enable_environment("ENABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceExtensionProperties") + .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties"))), + "implicit_test_layer.json"); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + + uint32_t ext_props = 52; + auto& layer = env.get_test_layer(0); + layer.set_reported_extension_props(ext_props); + + auto extensions = env.GetInstanceExtensions(4); + EXPECT_TRUE(string_eq(extensions.at(0).extensionName, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(1).extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(2).extensionName, VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)); + EXPECT_TRUE(string_eq(extensions.at(3).extensionName, VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME)); +} + +TEST(SettingsFile, ImplicitLayersPreInstanceVersion) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3)); + + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3)) + .set_disable_environment("DISABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "implicit_test_layer.json"); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + + uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); + auto& layer = env.get_test_layer(0); + layer.set_reported_instance_version(layer_version); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, layer_version); +} + +TEST(SettingsFile, EnableEnvironmentImplicitLayersPreInstanceVersion) { + FrameworkEnvironment env; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)) + .add_physical_device({}) + .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3)); + + const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; + + env.add_implicit_layer(ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( + ManifestLayer::LayerDescription{} + .set_name(implicit_layer_name) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3)) + .set_disable_environment("DISABLE_ME") + .set_enable_environment("ENABLE_ME") + .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} + .set_vk_func("vkEnumerateInstanceVersion") + .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), + "implicit_test_layer.json"); + + env.update_loader_settings( + env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(implicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)))); + + uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); + auto& layer = env.get_test_layer(0); + layer.set_reported_instance_version(layer_version); + + uint32_t version = 0; + ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); + ASSERT_EQ(version, VK_HEADER_VERSION_COMPLETE); +} + +// Settings can say which filters to use - make sure those are propagated & treated correctly +TEST(SettingsFile, StderrLogFilters) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* explicit_layer_name = "Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"}); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path()) + .set_control("on")) + .add_layer_configuration( + LoaderSettingsLayerConfiguration{}.set_name("VK_LAYER_missing").set_path("/road/to/nowhere").set_control("on")))); + + std::string expected_output_verbose; + expected_output_verbose += "[Vulkan Loader] DEBUG: Layer Configurations count = 2\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: ---- Layer Configuration [0] ----\n"; + expected_output_verbose += std::string("[Vulkan Loader] DEBUG: Name: ") + explicit_layer_name + "\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Path: " + env.get_shimmed_layer_manifest_path().string() + "\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Layer Type: Explicit\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Control: on\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: ---- Layer Configuration [1] ----\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Name: VK_LAYER_missing\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Path: /road/to/nowhere\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Layer Type: Explicit\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Control: on\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: ---------------------------------\n"; + + std::string expected_output_info = + std::string("[Vulkan Loader] INFO: ") + get_settings_location_log_message(env) + "\n"; + + std::string expected_output_warning = "[Vulkan Loader] WARNING: Layer name " + std::string(explicit_layer_name) + + " does not conform to naming standard (Policy #LLP_LAYER_3)\n"; + + std::string expected_output_error = + "[Vulkan Loader] ERROR: loader_get_json: Failed to open JSON file /road/to/nowhere\n"; + + env.loader_settings.app_specific_settings.at(0).stderr_log = {"all"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_TRUE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error: ERROR | " + "WARNING | INFO | DEBUG | PERF | DRIVER | LAYER\n")); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {"error", "warn", "info", "debug"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_TRUE( + env.platform_shim->find_in_log("[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard " + "Error: ERROR | WARNING | INFO | DEBUG\n")); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {"warn", "info", "debug"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_TRUE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error: WARNING | INFO | DEBUG\n")); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {"debug"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_TRUE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error: DEBUG\n")); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {"info"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_FALSE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error: INFO\n")); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {"warn"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_FALSE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error: WARNING\n")); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {"error"}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_FALSE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error: ERROR\n")); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_TRUE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {""}; // Empty string shouldn't be misinterpreted + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_FALSE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error:")); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.platform_shim->clear_logs(); + env.loader_settings.app_specific_settings.at(0).stderr_log = {}; // No string in the log + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + ASSERT_FALSE(env.platform_shim->find_in_log( + "[Vulkan Loader] DEBUG: Loader Settings Filters for Logging to Standard Error:")); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_verbose)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_info)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_warning)); + ASSERT_FALSE(env.platform_shim->find_in_log(expected_output_error)); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } +} + +// Settings can say which filters to use - make sure the lack of this filter works correctly with VK_LOADER_DEBUG +TEST(SettingsFile, StderrLog_NoOutput) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* explicit_layer_name = "Regular_TestLayer1"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"}); + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path()) + .set_control("auto")) + .add_layer_configuration( + LoaderSettingsLayerConfiguration{}.set_name("VK_LAYER_missing").set_path("/road/to/nowhere").set_control("auto")))); + env.loader_settings.app_specific_settings.at(0).stderr_log = {""}; + env.update_loader_settings(env.loader_settings); + + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + EXPECT_TRUE(env.platform_shim->fputs_stderr_log.empty()); + + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 0); + EXPECT_TRUE(active_layer_props.size() == 0); + } + // Check if an empty string (vs lack of the stderr_log field) produces correct output + env.loader_settings.app_specific_settings.at(0).stderr_log = {}; + env.update_loader_settings(env.loader_settings); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + EXPECT_TRUE(env.platform_shim->fputs_stderr_log.empty()); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 0); + EXPECT_TRUE(active_layer_props.size() == 0); + } + + env.loader_settings.app_specific_settings.at(0).stderr_log.clear(); + env.update_loader_settings(env.loader_settings); + { + EnvVarWrapper instance_layers{"VK_INSTANCE_LAYERS", explicit_layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + EXPECT_TRUE(env.platform_shim->fputs_stderr_log.empty()); + + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + + { + EnvVarWrapper instance_layers{"VK_LOADER_LAYERS_ENABLE", explicit_layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + EXPECT_TRUE(env.platform_shim->fputs_stderr_log.empty()); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + env.loader_settings.app_specific_settings.at(0).stderr_log = {}; + env.update_loader_settings(env.loader_settings); + { + EnvVarWrapper instance_layers{"VK_INSTANCE_LAYERS", explicit_layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + EXPECT_TRUE(env.platform_shim->fputs_stderr_log.empty()); + + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } + + { + EnvVarWrapper instance_layers{"VK_LOADER_LAYERS_ENABLE", explicit_layer_name}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + EXPECT_TRUE(env.platform_shim->fputs_stderr_log.empty()); + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); + } +} + +// Settings can say which filters to use - make sure the lack of this filter works correctly with VK_LOADER_DEBUG +TEST(SettingsFile, NoStderr_log_but_VK_LOADER_DEBUG) { + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("all")}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + + const char* explicit_layer_name = "Regular_TestLayer1"; + + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_test_layer1.json"}); + + env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(explicit_layer_name) + .set_path(env.get_shimmed_layer_manifest_path()) + .set_control("auto")) + .add_layer_configuration( + LoaderSettingsLayerConfiguration{}.set_name("VK_LAYER_missing").set_path("/road/to/nowhere").set_control("auto")))); + env.loader_settings.app_specific_settings.at(0).stderr_log = {}; + env.update_loader_settings(env.loader_settings); + + std::string expected_output_verbose; + expected_output_verbose += "[Vulkan Loader] DEBUG: Layer Configurations count = 2\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: ---- Layer Configuration [0] ----\n"; + expected_output_verbose += std::string("[Vulkan Loader] DEBUG: Name: ") + explicit_layer_name + "\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Path: " + env.get_shimmed_layer_manifest_path().string() + "\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Layer Type: Explicit\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Control: auto\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: ---- Layer Configuration [1] ----\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Name: VK_LAYER_missing\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Path: /road/to/nowhere\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Layer Type: Explicit\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: Control: auto\n"; + expected_output_verbose += "[Vulkan Loader] DEBUG: ---------------------------------\n"; + + std::string expected_output_info = + std::string("[Vulkan Loader] INFO: ") + get_settings_location_log_message(env) + "\n"; + + std::string expected_output_warning = + "[Vulkan Loader] WARNING: Layer name Regular_TestLayer1 does not conform to naming standard (Policy #LLP_LAYER_3)\n"; + + std::string expected_output_error = + "[Vulkan Loader] ERROR: loader_get_json: Failed to open JSON file /road/to/nowhere\n"; + + env.platform_shim->clear_logs(); + { + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + EXPECT_TRUE(env.platform_shim->find_in_log(expected_output_verbose)); + EXPECT_TRUE(env.platform_shim->find_in_log(expected_output_info)); + EXPECT_TRUE(env.platform_shim->find_in_log(expected_output_warning)); + EXPECT_TRUE(env.platform_shim->find_in_log(expected_output_error)); + + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 0); + EXPECT_TRUE(active_layer_props.size() == 0); + } +} +TEST(SettingsFile, ManyLayersEnabledInManyWays) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + const char* layer1 = "VK_LAYER_layer1"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_layer1.json"}); + const char* layer2 = "VK_LAYER_layer2"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_layer2.json"}); + const char* layer3 = "VK_LAYER_layer3"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer3).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_layer3.json"}); + const char* layer4 = "VK_LAYER_layer4"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer4).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_layer4.json"}); + const char* layer5 = "VK_LAYER_layer5"; + env.add_explicit_layer( + TestLayerDetails{ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(layer5).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "explicit_layer5.json"}); + + env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configurations( + {LoaderSettingsLayerConfiguration{}.set_name(layer1).set_path(env.get_shimmed_layer_manifest_path(0)).set_control("on"), + LoaderSettingsLayerConfiguration{} + .set_name(layer2) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("auto"), + LoaderSettingsLayerConfiguration{} + .set_name(layer3) + .set_path(env.get_shimmed_layer_manifest_path(2)) + .set_control("auto"), + LoaderSettingsLayerConfiguration{} + .set_name(layer4) + .set_path(env.get_shimmed_layer_manifest_path(3)) + .set_control("auto"), + LoaderSettingsLayerConfiguration{} + .set_name(layer5) + .set_path(env.get_shimmed_layer_manifest_path(4)) + .set_control("on")})); + env.update_loader_settings(env.loader_settings); + + EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS", layer2}; + EnvVarWrapper vk_loader_layers_enable{"VK_LOADER_LAYERS_ENABLE", layer1}; + + auto layers = env.GetLayerProperties(5); + ASSERT_TRUE(string_eq(layers[0].layerName, layer1)); + ASSERT_TRUE(string_eq(layers[1].layerName, layer2)); + ASSERT_TRUE(string_eq(layers[2].layerName, layer3)); + ASSERT_TRUE(string_eq(layers[3].layerName, layer4)); + ASSERT_TRUE(string_eq(layers[4].layerName, layer5)); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 3); + EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, layer1)); + EXPECT_TRUE(string_eq(active_layer_props.at(1).layerName, layer2)); + EXPECT_TRUE(string_eq(active_layer_props.at(2).layerName, layer5)); +} + +// Enough layers exist that arrays need to be resized - make sure that works +TEST(SettingsFile, TooManyLayers) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); + env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{}.add_stderr_log_filter("all")); + std::string layer_name = "VK_LAYER_regular_layer_name_"; + uint32_t layer_count = 40; + for (uint32_t i = 0; i < layer_count; i++) { + env.add_explicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(layer_name + std::to_string(i)) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + layer_name + std::to_string(i) + ".json"} + .set_discovery_type(ManifestDiscoveryType::override_folder)); + env.loader_settings.app_specific_settings.at(0).add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(layer_name + std::to_string(i)) + .set_path(env.get_layer_manifest_path(i)) + .set_control("on")); + } + env.update_loader_settings(env.loader_settings); + + { + auto layer_props = env.GetLayerProperties(40); + for (uint32_t i = 0; i < layer_count; i++) { + std::string expected_layer_name = layer_name + std::to_string(i); + EXPECT_TRUE(string_eq(layer_props.at(i).layerName, expected_layer_name.c_str())); + } + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + env.debug_log.clear(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 40); + for (uint32_t i = 0; i < layer_count; i++) { + std::string expected_layer_name = layer_name + std::to_string(i); + EXPECT_TRUE(string_eq(layers.at(i).layerName, expected_layer_name.c_str())); + } + } + env.loader_settings.app_specific_settings.at(0).layer_configurations.clear(); + + // Now reverse the order to make sure adding the 'last' layer first works + for (uint32_t i = 0; i < layer_count; i++) { + env.loader_settings.app_specific_settings.at(0).add_layer_configuration( + LoaderSettingsLayerConfiguration{} + .set_name(layer_name + std::to_string(layer_count - i - 1)) + .set_path(env.get_layer_manifest_path(layer_count - i - 1)) + .set_control("on")); + } + env.update_loader_settings(env.loader_settings); + + { + auto layer_props = env.GetLayerProperties(40); + for (uint32_t i = 0; i < layer_count; i++) { + std::string expected_layer_name = layer_name + std::to_string(layer_count - i - 1); + EXPECT_TRUE(string_eq(layer_props.at(i).layerName, expected_layer_name.c_str())); + } + InstWrapper inst{env.vulkan_functions}; + FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); + inst.CheckCreate(); + + ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); + env.debug_log.clear(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 40); + for (uint32_t i = 0; i < layer_count; i++) { + std::string expected_layer_name = layer_name + std::to_string(layer_count - i - 1); + EXPECT_TRUE(string_eq(layers.at(i).layerName, expected_layer_name.c_str())); + } + } +} + +TEST(SettingsFile, EnvVarsWorkTogether) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device(PhysicalDevice{}.set_deviceName("regular").finish()); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2).set_discovery_type(ManifestDiscoveryType::env_var)) + .add_physical_device(PhysicalDevice{}.set_deviceName("env_var").finish()); + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2).set_discovery_type(ManifestDiscoveryType::add_env_var)) + .add_physical_device(PhysicalDevice{}.set_deviceName("add_env_var").finish()); + + const char* regular_explicit_layer = "VK_LAYER_regular_explicit_layer"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(regular_explicit_layer).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_explicit_layer.json"}); + const char* regular_explicit_layer_settings_file_set_on = "VK_LAYER_regular_explicit_layer_settings_file_set_on"; + env.add_explicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name(regular_explicit_layer_settings_file_set_on) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_explicit_layer_settings_file_set_on.json"}); + + const char* env_var_explicit_layer = "VK_LAYER_env_var_explicit_layer"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(env_var_explicit_layer).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "env_var_explicit_layer.json"} + .set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* add_env_var_explicit_layer = "VK_LAYER_add_env_var_explicit_layer"; + env.add_explicit_layer(TestLayerDetails{ + ManifestLayer{}.add_layer( + ManifestLayer::LayerDescription{}.set_name(add_env_var_explicit_layer).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "add_env_var_explicit_layer.json"} + .set_discovery_type(ManifestDiscoveryType::add_env_var)); + + const char* regular_implicit_layer = "VK_LAYER_regular_implicit_layer"; + env.add_implicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_disable_environment("A") + .set_name(regular_implicit_layer) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "regular_implicit_layer.json"}); + + const char* env_var_implicit_layer = "VK_LAYER_env_var_implicit_layer"; + env.add_implicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_disable_environment("B") + .set_name(env_var_implicit_layer) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "env_var_implicit_layer.json"} + .set_discovery_type(ManifestDiscoveryType::env_var)); + + const char* add_env_var_implicit_layer = "VK_LAYER_add_env_var_implicit_layer"; + env.add_implicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_disable_environment("C") + .set_name(add_env_var_implicit_layer) + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), + "add_env_var_implicit_layer.json"} + .set_discovery_type(ManifestDiscoveryType::add_env_var)); + + // Settings file only contains the one layer it wants enabled + env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( + AppSpecificSettings{} + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_implicit_layer) + .set_path(env.get_shimmed_layer_manifest_path(4)) + .set_control("auto") + .set_treat_as_implicit_manifest(true)) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_explicit_layer) + .set_path(env.get_shimmed_layer_manifest_path(0)) + .set_control("auto")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{} + .set_name(regular_explicit_layer_settings_file_set_on) + .set_path(env.get_shimmed_layer_manifest_path(1)) + .set_control("on")) + .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location"))); + env.update_loader_settings(env.loader_settings); + + { // VK_INSTANCE_LAYERS + EnvVarWrapper instance_layers{"VK_INSTANCE_LAYERS", regular_explicit_layer}; + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer)); + EXPECT_TRUE(string_eq(layers.at(2).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE(string_eq(layers.at(3).layerName, env_var_implicit_layer)); + EXPECT_TRUE(env.platform_shim->find_in_log( + "env var 'VK_INSTANCE_LAYERS' defined and adding layers: VK_LAYER_regular_explicit_layer")); + } + env.platform_shim->clear_logs(); + { // VK_LOADER_LAYERS_ENABLE + EnvVarWrapper env_var_enable{"VK_LOADER_LAYERS_ENABLE", regular_explicit_layer}; + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer)); + EXPECT_TRUE(string_eq(layers.at(2).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE(string_eq(layers.at(3).layerName, env_var_implicit_layer)); + EXPECT_TRUE(env.platform_shim->find_in_log( + "Layer \"VK_LAYER_regular_explicit_layer\" forced enabled due to env var 'VK_LOADER_LAYERS_ENABLE'")); + } + env.platform_shim->clear_logs(); + { // VK_LOADER_LAYERS_DISABLE + EnvVarWrapper env_var_disable{"VK_LOADER_LAYERS_DISABLE", "~all~"}; // ignored by settings file + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE( + env.platform_shim->find_in_log("Layer \"VK_LAYER_env_var_implicit_layer\" forced disabled because name matches filter " + "of env var 'VK_LOADER_LAYERS_DISABLE'")); + } + env.platform_shim->clear_logs(); + + { // VK_LOADER_LAYERS_ALLOW + EnvVarWrapper env_var_allow{"VK_LOADER_LAYERS_ALLOW", regular_implicit_layer}; + // Allow only makes sense when the disable env-var is also set + EnvVarWrapper env_var_disable{"VK_LOADER_LAYERS_DISABLE", "~implicit~"}; + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); + // The regular_implicit_layer is set to "auto" so is affected by environment variables + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on)); + + EXPECT_TRUE( + env.platform_shim->find_in_log("Layer \"VK_LAYER_env_var_implicit_layer\" forced disabled because name matches filter " + "of env var 'VK_LOADER_LAYERS_DISABLE'")); + } + env.platform_shim->clear_logs(); + + { // VK_LAYER_PATH + // VK_LAYER_PATH is set by add_explicit_layer() + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(env_var_explicit_layer); + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE(string_eq(layers.at(2).layerName, env_var_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(3).layerName, env_var_explicit_layer)); + EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_env_var_explicit_layer\"")); + } + env.platform_shim->clear_logs(); + { // VK_IMPLICIT_LAYER_PATH + // VK_IMPLICIT_LAYER_PATH is set by add_implicit_layer() + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE(string_eq(layers.at(2).layerName, env_var_implicit_layer)); + EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_env_var_implicit_layer\"")); + } + env.platform_shim->clear_logs(); + { // VK_ADD_LAYER_PATH + // VK_ADD_LAYER_PATH is set by add_explicit_layer(), but we need to disable VK_LAYER_PATH + // since VK_LAYER_PATH overrides VK_ADD_LAYER_PATH + EnvVarWrapper env_var_vk_layer_path{"VK_LAYER_PATH", ""}; + env_var_vk_layer_path.remove_value(); + InstWrapper inst{env.vulkan_functions}; + inst.create_info.add_layer(add_env_var_explicit_layer); + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE(string_eq(layers.at(2).layerName, env_var_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(3).layerName, add_env_var_explicit_layer)); + EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_add_env_var_explicit_layer\"")); + } + env.platform_shim->clear_logs(); + { // VK_ADD_IMPLICIT_LAYER_PATH + // VK_ADD_IMPLICIT_LAYER_PATH is set by add_explicit_layer(), but we need to disable VK_LAYER_PATH + // since VK_IMPLICIT_LAYER_PATH overrides VK_ADD_IMPLICIT_LAYER_PATH + EnvVarWrapper env_var_vk_layer_path{"VK_IMPLICIT_LAYER_PATH", ""}; + env_var_vk_layer_path.remove_value(); + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); + EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer)); + EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on)); + EXPECT_TRUE(string_eq(layers.at(2).layerName, add_env_var_implicit_layer)); + EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_add_env_var_implicit_layer\"")); + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_testing_main.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_testing_main.cpp new file mode 100644 index 0000000000..018bea4340 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_testing_main.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021-2023 The Khronos Group Inc. + * Copyright (c) 2021-2023 Valve Corporation + * Copyright (c) 2021-2023 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +// Makes any failed assertion throw, allowing for graceful cleanup of resources instead of hard aborts +class ThrowListener : public testing::EmptyTestEventListener { + void OnTestPartResult(const testing::TestPartResult& result) override { + if (result.type() == testing::TestPartResult::kFatalFailure) { + // We need to make sure an exception wasn't already thrown so we dont throw another exception at the same time + std::exception_ptr ex = std::current_exception(); + if (ex) { + return; + } + throw testing::AssertionException(result); + } + } +}; + +int main(int argc, char** argv) { +#if defined(_WIN32) + // Avoid "Abort, Retry, Ignore" dialog boxes + _set_error_mode(_OUT_TO_STDERR); + _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); + _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); + _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); + _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); +#endif + + // make sure the tests don't find these env-vars if they were set on the system + EnvVarWrapper vk_icd_filenames_env_var{"VK_ICD_FILENAMES"}; + EnvVarWrapper vk_driver_files_env_var{"VK_DRIVER_FILES"}; + EnvVarWrapper vk_add_driver_files_env_var{"VK_ADD_DRIVER_FILES"}; + EnvVarWrapper vk_layer_path_env_var{"VK_LAYER_PATH"}; + EnvVarWrapper vk_add_layer_path_env_var{"VK_ADD_LAYER_PATH"}; + EnvVarWrapper vk_implicit_layer_path_env_var{"VK_IMPLICIT_LAYER_PATH"}; + EnvVarWrapper vk_add_implicit_layer_path_env_var{"VK_ADD_IMPLICIT_LAYER_PATH"}; + EnvVarWrapper vk_instance_layers_env_var{"VK_INSTANCE_LAYERS"}; + EnvVarWrapper vk_loader_drivers_select_env_var{"VK_LOADER_DRIVERS_SELECT"}; + EnvVarWrapper vk_loader_drivers_disable_env_var{"VK_LOADER_DRIVERS_DISABLE"}; + EnvVarWrapper vk_loader_layers_enable_env_var{"VK_LOADER_LAYERS_ENABLE"}; + EnvVarWrapper vk_loader_layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"}; + EnvVarWrapper vk_loader_debug_env_var{"VK_LOADER_DEBUG"}; + EnvVarWrapper vk_loader_disable_inst_ext_filter_env_var{"VK_LOADER_DISABLE_INST_EXT_FILTER"}; + +#if COMMON_UNIX_PLATFORMS + // Set only one of the 4 XDG variables to /etc, let everything else be empty + EnvVarWrapper xdg_config_home_env_var{"XDG_CONFIG_HOME", ETC_DIR}; + EnvVarWrapper xdg_config_dirs_env_var{"XDG_CONFIG_DIRS"}; + EnvVarWrapper xdg_data_home_env_var{"XDG_DATA_HOME"}; + EnvVarWrapper xdg_data_dirs_env_var{"XDG_DATA_DIRS"}; + EnvVarWrapper home_env_var{"HOME", HOME_DIR}; +#endif + ::testing::InitGoogleTest(&argc, argv); + ::testing::UnitTest::GetInstance()->listeners().Append(new ThrowListener); + int result = RUN_ALL_TESTS(); + + return result; +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_threading_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_threading_tests.cpp new file mode 100644 index 0000000000..482bd5fb6f --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_threading_tests.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2021 The Khronos Group Inc. + * Copyright (c) 2021 Valve Corporation + * Copyright (c) 2021 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +#include + +void create_destroy_instance_loop_with_function_queries(FrameworkEnvironment* env, uint32_t num_loops_create_destroy_instance, + uint32_t num_loops_try_get_instance_proc_addr, + uint32_t num_loops_try_get_device_proc_addr) { + for (uint32_t i = 0; i < num_loops_create_destroy_instance; i++) { + InstWrapper inst{env->vulkan_functions}; + inst.CheckCreate(); + PFN_vkEnumeratePhysicalDevices enum_pd = nullptr; + for (uint32_t j = 0; j < num_loops_try_get_instance_proc_addr; j++) { + enum_pd = inst.load("vkEnumeratePhysicalDevices"); + ASSERT_NE(enum_pd, nullptr); + } + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + + DeviceWrapper dev{inst}; + dev.CheckCreate(phys_dev); + for (uint32_t j = 0; j < num_loops_try_get_device_proc_addr; j++) { + PFN_vkCmdBindPipeline p = dev.load("vkCmdBindPipeline"); + p(VK_NULL_HANDLE, VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_GRAPHICS, VK_NULL_HANDLE); + } + } +} + +void create_destroy_device_loop(FrameworkEnvironment* env, uint32_t num_loops_create_destroy_device, + uint32_t num_loops_try_get_proc_addr) { + InstWrapper inst{env->vulkan_functions}; + inst.CheckCreate(); + for (uint32_t i = 0; i < num_loops_create_destroy_device; i++) { + DeviceWrapper dev{inst}; + dev.CheckCreate(inst.GetPhysDev()); + + for (uint32_t j = 0; j < num_loops_try_get_proc_addr; j++) { + PFN_vkCmdBindPipeline p = dev.load("vkCmdBindPipeline"); + PFN_vkCmdBindDescriptorSets d = dev.load("vkCmdBindDescriptorSets"); + PFN_vkCmdBindVertexBuffers vb = dev.load("vkCmdBindVertexBuffers"); + PFN_vkCmdBindIndexBuffer ib = dev.load("vkCmdBindIndexBuffer"); + PFN_vkCmdDraw c = dev.load("vkCmdDraw"); + p(VK_NULL_HANDLE, VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_GRAPHICS, VK_NULL_HANDLE); + d(VK_NULL_HANDLE, VkPipelineBindPoint::VK_PIPELINE_BIND_POINT_GRAPHICS, VK_NULL_HANDLE, 0, 0, nullptr, 0, nullptr); + vb(VK_NULL_HANDLE, 0, 0, nullptr, nullptr); + ib(VK_NULL_HANDLE, 0, 0, VkIndexType::VK_INDEX_TYPE_UINT16); + c(VK_NULL_HANDLE, 0, 0, 0, 0); + } + } +} +VKAPI_ATTR void VKAPI_CALL test_vkCmdBindPipeline(VkCommandBuffer, VkPipelineBindPoint, VkPipeline) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdBindDescriptorSets(VkCommandBuffer, VkPipelineBindPoint, VkPipelineLayout, uint32_t, uint32_t, + const VkDescriptorSet*, uint32_t, const uint32_t*) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdBindVertexBuffers(VkCommandBuffer, uint32_t, uint32_t, const VkBuffer*, const VkDeviceSize*) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdBindIndexBuffer(VkCommandBuffer, uint32_t, uint32_t, const VkBuffer*, const VkDeviceSize*) {} +VKAPI_ATTR void VKAPI_CALL test_vkCmdDraw(VkCommandBuffer, uint32_t, uint32_t, uint32_t, uint32_t) {} +TEST(Threading, InstanceCreateDestroyLoop) { + const auto processor_count = std::thread::hardware_concurrency(); + + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("")}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + uint32_t num_loops_create_destroy_instance = 500; + uint32_t num_loops_try_get_instance_proc_addr = 5; + uint32_t num_loops_try_get_device_proc_addr = 100; + + driver.physical_devices.emplace_back("physical_device_0") + .known_device_functions.push_back({"vkCmdBindPipeline", to_vkVoidFunction(test_vkCmdBindPipeline)}); + + std::vector instance_creation_threads; + std::vector function_query_threads; + for (uint32_t i = 0; i < processor_count; i++) { + instance_creation_threads.emplace_back(create_destroy_instance_loop_with_function_queries, &env, + num_loops_create_destroy_instance, num_loops_try_get_instance_proc_addr, + num_loops_try_get_device_proc_addr); + } + for (uint32_t i = 0; i < processor_count; i++) { + instance_creation_threads[i].join(); + } +} + +TEST(Threading, DeviceCreateDestroyLoop) { + const auto processor_count = std::thread::hardware_concurrency(); + + FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("")}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + + uint32_t num_loops_create_destroy_device = 1000; + uint32_t num_loops_try_get_device_proc_addr = 5; + + driver.physical_devices.emplace_back("physical_device_0").known_device_functions = { + {"vkCmdBindPipeline", to_vkVoidFunction(test_vkCmdBindPipeline)}, + {"vkCmdBindDescriptorSets", to_vkVoidFunction(test_vkCmdBindDescriptorSets)}, + {"vkCmdBindVertexBuffers", to_vkVoidFunction(test_vkCmdBindVertexBuffers)}, + {"vkCmdBindIndexBuffer", to_vkVoidFunction(test_vkCmdBindIndexBuffer)}, + {"vkCmdDraw", to_vkVoidFunction(test_vkCmdDraw)}}; + + std::vector device_creation_threads; + + for (uint32_t i = 0; i < processor_count; i++) { + device_creation_threads.emplace_back(create_destroy_device_loop, &env, num_loops_create_destroy_device, + num_loops_try_get_device_proc_addr); + } + for (uint32_t i = 0; i < processor_count; i++) { + device_creation_threads[i].join(); + } +} diff --git a/local/recipes/libs/vulkan-loader/source/tests/loader_unknown_ext_tests.cpp b/local/recipes/libs/vulkan-loader/source/tests/loader_unknown_ext_tests.cpp new file mode 100644 index 0000000000..7822756821 --- /dev/null +++ b/local/recipes/libs/vulkan-loader/source/tests/loader_unknown_ext_tests.cpp @@ -0,0 +1,1309 @@ +/* + * Copyright (c) 2021 The Khronos Group Inc. + * Copyright (c) 2021 Valve Corporation + * Copyright (c) 2021 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and/or associated documentation files (the "Materials"), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to the following conditions: + * + * The above copyright notice(s) and this permission notice shall be included in + * all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE + * USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Author: Charles Giessen + */ + +#include "test_environment.h" + +enum class TestConfig { + add_layer_implementation, + add_layer_interception, +}; + +bool has_flag(std::vector const& flags, TestConfig config) { + for (auto const& flag : flags) + if (flag == config) return true; + return false; +} + +/* + Creates a TestICD with a function unknown to the loader called vkNotRealFuncTEST. The TestICD, when + vk_icdGetPhysicalDeviceProcAddr is called, will return the custom_physical_device_function if the function name matches + vkNotRealFuncTEST. The test then calls the function to verify that the unknown physical device function dispatching is + working correctly. +*/ +template +struct custom_functions { + static VKAPI_ATTR uint32_t VKAPI_CALL func_zero(DispatchableHandleType, uint32_t foo) { return foo; }; + static VKAPI_ATTR uint32_t VKAPI_CALL func_one(DispatchableHandleType, uint32_t foo, uint32_t bar) { return foo + bar; }; + static VKAPI_ATTR float VKAPI_CALL func_two(DispatchableHandleType, uint32_t foo, uint32_t bar, float baz) { + return baz + foo + bar; + }; + static VKAPI_ATTR int VKAPI_CALL func_three(DispatchableHandleType, int* ptr_a, int* ptr_b) { return *ptr_a + *ptr_b; }; + static VKAPI_ATTR float VKAPI_CALL func_four(DispatchableHandleType, int* ptr_a, int* ptr_b, int foo, int bar, float k, float l, + char a, char b, char c) { + return *ptr_a + *ptr_b + foo + bar + k + l + static_cast(a) + static_cast(b) + static_cast(c); + }; +}; + +/* +Functions for testing of layer interception of unknown functions. Note the need to pass a pointer to the layer and the name +of the called function as a parameter, this is necessary to allow a generic layer implementation, as the layer must look up +the function pointer to use. A real layer would store the function pointer in a dedicated structure per-instance/device, but +since the TestLayer is a generic layer, there isn't a fixed list of functions that should be supported. +*/ + +PFN_vkVoidFunction find_custom_func(TestLayer* layer, const char* name) { + if (layer->custom_dispatch_functions.count(name) > 0) { + return layer->custom_dispatch_functions.at(name); + } + return nullptr; +} + +template +struct layer_intercept_functions { + static VKAPI_ATTR uint32_t VKAPI_CALL func_zero(DispatchableHandleType handle, TestLayer* layer, const char* name, uint32_t i) { + auto func = reinterpret_cast(find_custom_func(layer, name)); + if (func == nullptr) return 1337; + return func(handle, layer, name, i + 3); + } + static VKAPI_ATTR uint32_t VKAPI_CALL func_one(DispatchableHandleType handle, TestLayer* layer, const char* name, uint32_t i, + float f) { + auto func = reinterpret_cast(find_custom_func(layer, name)); + if (func == nullptr) return 1337; + return func(handle, layer, name, i + 2, f + 1.f); + } + static VKAPI_ATTR float VKAPI_CALL func_two(DispatchableHandleType handle, TestLayer* layer, const char* name, uint32_t foo, + uint32_t bar, float baz) { + auto func = reinterpret_cast(find_custom_func(layer, name)); + if (func == nullptr) return -1337; + return func(handle, layer, name, foo + 1, bar + 2, baz * 2); + }; + static VKAPI_ATTR int VKAPI_CALL func_three(DispatchableHandleType handle, TestLayer* layer, const char* name, int* ptr_a, + int* ptr_b) { + auto func = reinterpret_cast(find_custom_func(layer, name)); + if (func == nullptr) return -1337; + *ptr_a += 1; + *ptr_b -= 2; + return func(handle, layer, name, ptr_a, ptr_b); + }; + static VKAPI_ATTR float VKAPI_CALL func_four(DispatchableHandleType handle, TestLayer* layer, const char* name, int* ptr_a, + int* ptr_b, int foo, int bar, float k, float l, char, char, char) { + auto func = reinterpret_cast(find_custom_func(layer, name)); + if (func == nullptr) return -1337.f; + return func(handle, layer, name, ptr_a, ptr_b, foo + 4, bar + 5, k + 1, l + 2, 'd', 'e', 'f'); + }; +}; + +template +struct layer_implementation_functions { + static VKAPI_ATTR uint32_t VKAPI_CALL func_zero(DispatchableHandleType, TestLayer*, const char*, uint32_t i) { return i * 3; } + static VKAPI_ATTR uint32_t VKAPI_CALL func_one(DispatchableHandleType, TestLayer*, const char*, uint32_t i, float f) { + return static_cast(i * 3 + f * 10.f); + } + static VKAPI_ATTR float VKAPI_CALL func_two(DispatchableHandleType, TestLayer*, const char*, uint32_t foo, uint32_t bar, + float baz) { + return baz + foo + bar; + }; + static VKAPI_ATTR int VKAPI_CALL func_three(DispatchableHandleType, TestLayer*, const char*, int* ptr_a, int* ptr_b) { + return *ptr_a + *ptr_b; + }; + static VKAPI_ATTR float VKAPI_CALL func_four(DispatchableHandleType, TestLayer*, const char*, int* ptr_a, int* ptr_b, int foo, + int bar, float k, float l, char a, char b, char c) { + return *ptr_a + *ptr_b + foo + bar + k + l + static_cast(a) + static_cast(b) + static_cast(c); + }; +}; + +// Add function_count strings to the func_names vector, starting at function_start place. Essentially a utility for filling +// up a list of names to use later +void add_function_names(std::vector& func_names, uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + func_names.push_back(std::string("vkNotIntRealFuncTEST_") + std::to_string(i++)); + func_names.push_back(std::string("vkNotIntRealIntFuncTEST_") + std::to_string(i++)); + func_names.push_back(std::string("vkIntNotIntRealFloatFuncTEST_") + std::to_string(i++)); + func_names.push_back(std::string("vkNotRealFuncPointerPointerTEST_") + std::to_string(i++)); + func_names.push_back(std::string("vkNotRealFuncTEST_pointer_pointer_int_int_float_float_char_char_char_") + + std::to_string(i++)); + } +} + +// Add data to the function_list, which could be a driver or a layer list of implementation functions. +template +void fill_implementation_functions(std::vector& function_list, std::vector& func_names, + FunctionStruct const& funcs, uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + function_list.push_back(VulkanFunction{func_names.at(i++), to_vkVoidFunction(funcs.func_zero)}); + function_list.push_back(VulkanFunction{func_names.at(i++), to_vkVoidFunction(funcs.func_one)}); + function_list.push_back(VulkanFunction{func_names.at(i++), to_vkVoidFunction(funcs.func_two)}); + function_list.push_back(VulkanFunction{func_names.at(i++), to_vkVoidFunction(funcs.func_three)}); + function_list.push_back(VulkanFunction{func_names.at(i++), to_vkVoidFunction(funcs.func_four)}); + } +} + +// Add device interception functions to a layer. Need to call `add_custom_device_interception_function` since the layer has +// to setup a unordered_map for storing the next function in the chain, and key it based on the name +template +void fill_device_intercept_functions(TestLayer& layer, std::vector& func_names, FunctionStruct const& funcs, + uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + layer.add_custom_device_interception_function(func_names.at(i++), to_vkVoidFunction(funcs.func_zero)); + layer.add_custom_device_interception_function(func_names.at(i++), to_vkVoidFunction(funcs.func_one)); + layer.add_custom_device_interception_function(func_names.at(i++), to_vkVoidFunction(funcs.func_two)); + layer.add_custom_device_interception_function(func_names.at(i++), to_vkVoidFunction(funcs.func_three)); + layer.add_custom_device_interception_function(func_names.at(i++), to_vkVoidFunction(funcs.func_four)); + } +} +// Add physical device interception functions to a layer. Need to call `add_custom_device_interception_function` since the +// layer has to setup a unordered_map for storing the next function in the chain, and key it based on the name +template +void fill_phys_dev_intercept_functions(TestLayer& layer, std::vector& func_names, FunctionStruct const& funcs, + uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + layer.add_custom_physical_device_intercept_function(func_names.at(i++), to_vkVoidFunction(funcs.func_zero)); + layer.add_custom_physical_device_intercept_function(func_names.at(i++), to_vkVoidFunction(funcs.func_one)); + layer.add_custom_physical_device_intercept_function(func_names.at(i++), to_vkVoidFunction(funcs.func_two)); + layer.add_custom_physical_device_intercept_function(func_names.at(i++), to_vkVoidFunction(funcs.func_three)); + layer.add_custom_physical_device_intercept_function(func_names.at(i++), to_vkVoidFunction(funcs.func_four)); + } +} + +template +void check_custom_functions(FunctionLoader& loader, ParentType parent, DispatchableHandleType handle, FunctionStruct const&, + std::vector& func_names, uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + decltype(FunctionStruct::func_zero)* returned_func_i = loader.load(parent, func_names.at(i++).c_str()); + ASSERT_NE(returned_func_i, nullptr); + EXPECT_EQ(returned_func_i(handle, i * 10), i * 10); + + decltype(FunctionStruct::func_one)* returned_func_ii = loader.load(parent, func_names.at(i++).c_str()); + ASSERT_NE(returned_func_ii, nullptr); + EXPECT_EQ(returned_func_ii(handle, i * 10, i * 5), i * 10 + i * 5); + + decltype(FunctionStruct::func_two)* returned_func_iif = loader.load(parent, func_names.at(i++).c_str()); + ASSERT_NE(returned_func_iif, nullptr); + EXPECT_NEAR(returned_func_iif(handle, i * 10, i * 5, 0.1234f), i * 10 + i * 5 + 0.1234f, 0.001); + + int x = 5; + int y = -505; + decltype(FunctionStruct::func_three)* returned_func_pp = loader.load(parent, func_names.at(i++).c_str()); + ASSERT_NE(returned_func_pp, nullptr); + EXPECT_EQ(returned_func_pp(handle, &x, &y), -500); + + x = 5; + y = -505; + decltype(FunctionStruct::func_four)* returned_func_ppiiffccc = loader.load(parent, func_names.at(i++).c_str()); + ASSERT_NE(returned_func_ppiiffccc, nullptr); + EXPECT_NEAR(returned_func_ppiiffccc(handle, &x, &y, 200, 300, 0.123f, 1001.89f, 'a', 'b', 'c'), + -500 + 200 + 300 + 0.123 + 1001.89 + 97 + 98 + 99, 0.001f); + } +} + +template +void check_layer_custom_functions(FunctionLoader& loader, ParentType parent, DispatchableHandleType handle, TestLayer& layer, + FunctionStruct const&, std::vector& func_names, uint32_t function_count, + uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + decltype(FunctionStruct::func_zero)* returned_func_i = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_i, nullptr); + EXPECT_EQ(returned_func_i(handle, &layer, func_names.at(i).c_str(), i), (i + 3) * 3); + i++; + decltype(FunctionStruct::func_one)* returned_func_if = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_if, nullptr); + EXPECT_EQ(returned_func_if(handle, &layer, func_names.at(i).c_str(), i, i + 1.f), (i + 2) * 3 + (i + 2) * 10); + i++; + + decltype(FunctionStruct::func_two)* returned_func_iif = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_iif, nullptr); + EXPECT_NEAR(returned_func_iif(handle, &layer, func_names.at(i).c_str(), i * 10, i * 5, 0.1234f), + (i * 10 + 1) + (i * 5 + 2) + (0.1234f * 2.f), 0.001); + i++; + + int x = 5 + i; + int y = -505 - i; + decltype(FunctionStruct::func_three)* returned_func_pp = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_pp, nullptr); + EXPECT_EQ(returned_func_pp(handle, &layer, func_names.at(i).c_str(), &x, &y), + (5 + static_cast(i) + 1) + (-505 - static_cast(i) - 2)); + i++; + + x = 5; + y = -505; + decltype(FunctionStruct::func_four)* returned_func_ppiiffccc = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_ppiiffccc, nullptr); + EXPECT_NEAR( + returned_func_ppiiffccc(handle, &layer, func_names.at(i).c_str(), &x, &y, 200, 300, 0.123f, 1001.89f, 'a', 'b', 'c'), + -500 + (200 + 4) + (300 + 5) + (0.123 + 1) + (1001.89 + 2) + 100 + 101 + 102, + 0.001f); // layer changes abc to def + i++; + } +} + +template +void check_layer_custom_functions_no_implementation(FunctionLoader& loader, ParentType parent, DispatchableHandleType handle, + TestLayer& layer, FunctionStruct const&, std::vector& func_names, + uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + decltype(FunctionStruct::func_zero)* returned_func_i = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_i, nullptr); + EXPECT_EQ(1337U, returned_func_i(handle, &layer, func_names.at(i).c_str(), i)); + i++; + decltype(FunctionStruct::func_one)* returned_func_if = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_if, nullptr); + EXPECT_EQ(1337U, returned_func_if(handle, &layer, func_names.at(i).c_str(), i, i + 1.f)); + i++; + + decltype(FunctionStruct::func_two)* returned_func_iif = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_iif, nullptr); + EXPECT_NEAR(-1337.0, returned_func_iif(handle, &layer, func_names.at(i).c_str(), i * 10, i * 5, 0.1234f), 0.001); + i++; + + int x = 5 + i; + int y = -505 - i; + decltype(FunctionStruct::func_three)* returned_func_pp = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_pp, nullptr); + EXPECT_EQ(-1337, returned_func_pp(handle, &layer, func_names.at(i).c_str(), &x, &y)); + i++; + + x = 5; + y = -505; + decltype(FunctionStruct::func_four)* returned_func_ppiiffccc = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_ppiiffccc, nullptr); + EXPECT_NEAR( + -1337.0, + returned_func_ppiiffccc(handle, &layer, func_names.at(i).c_str(), &x, &y, 200, 300, 0.123f, 1001.89f, 'a', 'b', 'c'), + 0.001); + i++; + } +} + +template +void check_layer_custom_functions_no_interception(FunctionLoader& loader, ParentType parent, DispatchableHandleType handle, + TestLayer& layer, FunctionStruct const&, std::vector& func_names, + uint32_t function_count, uint32_t function_start = 0) { + for (uint32_t i = function_start; i < function_start + function_count;) { + decltype(FunctionStruct::func_zero)* returned_func_i = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_i, nullptr); + EXPECT_EQ(returned_func_i(handle, &layer, func_names.at(i).c_str(), i), (i)*3); + i++; + decltype(FunctionStruct::func_one)* returned_func_if = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_if, nullptr); + EXPECT_EQ(returned_func_if(handle, &layer, func_names.at(i).c_str(), i, i + 1.f), (i)*3 + (i + 1) * 10); + i++; + + decltype(FunctionStruct::func_two)* returned_func_iif = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_iif, nullptr); + EXPECT_NEAR(returned_func_iif(handle, &layer, func_names.at(i).c_str(), i * 10, i * 5, 0.1234f), + (i * 10) + (i * 5) + (0.1234f), 0.001); + i++; + + int x = 5 + i; + int y = -505 - i; + decltype(FunctionStruct::func_three)* returned_func_pp = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_pp, nullptr); + EXPECT_EQ(returned_func_pp(handle, &layer, func_names.at(i).c_str(), &x, &y), + (5 + static_cast(i)) + (-505 - static_cast(i))); + i++; + + x = 5; + y = -505; + decltype(FunctionStruct::func_four)* returned_func_ppiiffccc = loader.load(parent, func_names.at(i).c_str()); + ASSERT_NE(returned_func_ppiiffccc, nullptr); + EXPECT_NEAR( + returned_func_ppiiffccc(handle, &layer, func_names.at(i).c_str(), &x, &y, 200, 300, 0.123f, 1001.89f, 'a', 'b', 'c'), + -500 + (200) + (300) + (0.123) + (1001.89) + 97 + 98 + 99, 0.001f); + i++; + } +} + +using custom_physical_device_functions = custom_functions; +using layer_intercept_physical_device_functions = layer_intercept_functions; +using layer_implementation_physical_device_functions = layer_implementation_functions; + +TEST(UnknownFunction, PhysicalDeviceFunction) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + std::vector function_names; + add_function_names(function_names, function_count); + + fill_implementation_functions(driver.physical_devices.at(0).custom_physical_device_functions, function_names, + custom_physical_device_functions{}, function_count); + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + check_custom_functions(env.vulkan_functions, inst.inst, phys_dev, custom_physical_device_functions{}, function_names, + function_count); +} + +TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupport) { + FrameworkEnvironment env{}; + auto& driver_0 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + auto& driver_1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + std::vector function_names; + add_function_names(function_names, function_count); + + // used to identify the GPUs + driver_0.physical_devices.emplace_back("physical_device_0").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + driver_1.physical_devices.emplace_back("physical_device_1").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; + + for (uint32_t i = 0; i < function_count / 10; i++) { + fill_implementation_functions(driver_0.physical_devices.at(0).custom_physical_device_functions, function_names, + custom_physical_device_functions{}, 5, i * 10); + fill_implementation_functions(driver_1.physical_devices.at(0).custom_physical_device_functions, function_names, + custom_physical_device_functions{}, 5, i * 10 + 5); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(2); + VkPhysicalDevice phys_dev_0 = phys_devs[0]; + VkPhysicalDevice phys_dev_1 = phys_devs[1]; + VkPhysicalDeviceProperties props{}; + env.vulkan_functions.vkGetPhysicalDeviceProperties(phys_devs[0], &props); + if (props.deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) { + phys_dev_0 = phys_devs[1]; + phys_dev_1 = phys_devs[0]; + } + for (uint32_t i = 0; i < function_count / 10; i++) { + check_custom_functions(env.vulkan_functions, inst.inst, phys_dev_0, custom_physical_device_functions{}, function_names, 5, + i * 10); + check_custom_functions(env.vulkan_functions, inst.inst, phys_dev_1, custom_physical_device_functions{}, function_names, 5, + i * 10 + 5); + } +} + +// Add unknown functions to driver 0, and try to use them on driver 1. +TEST(UnknownFunctionDeathTests, PhysicalDeviceFunctionErrorPath) { + FrameworkEnvironment env{}; + auto& driver_0 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + auto& driver_1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + std::vector function_names; + add_function_names(function_names, 1); + + // used to identify the GPUs + driver_0.physical_devices.emplace_back("physical_device_0").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + driver_1.physical_devices.emplace_back("physical_device_1").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; + function_names.push_back(std::string("vkNotIntRealFuncTEST_0")); + + custom_physical_device_functions funcs{}; + driver_0.physical_devices.at(0).custom_physical_device_functions.push_back( + VulkanFunction{function_names.back(), to_vkVoidFunction(funcs.func_zero)}); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(2); + VkPhysicalDevice phys_dev_to_use = phys_devs[1]; + VkPhysicalDeviceProperties props{}; + env.vulkan_functions.vkGetPhysicalDeviceProperties(phys_devs[1], &props); + if (props.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) phys_dev_to_use = phys_devs[0]; + // use the wrong GPU to query the functions, should get 5 errors + + decltype(custom_physical_device_functions::func_zero)* returned_func_i = + env.vulkan_functions.load(inst.inst, function_names.at(0).c_str()); + ASSERT_NE(returned_func_i, nullptr); + ASSERT_DEATH(returned_func_i(phys_dev_to_use, 0), "Function vkNotIntRealFuncTEST_0 not supported for this physical device"); +} + +TEST(UnknownFunction, PhysicalDeviceFunctionWithImplicitLayerImplementation) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + std::vector function_names; + add_function_names(function_names, function_count); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept.json"); + auto& layer = env.get_test_layer(); + fill_implementation_functions(layer.custom_physical_device_implementation_functions, function_names, + layer_implementation_physical_device_functions{}, function_count); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + check_layer_custom_functions_no_interception(env.vulkan_functions, inst.inst, phys_dev, layer, + layer_implementation_physical_device_functions{}, function_names, function_count); +} + +TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupportWithImplicitLayerImplementation) { + FrameworkEnvironment env{}; + auto& driver_0 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + auto& driver_1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + std::vector function_names; + add_function_names(function_names, function_count); + + // used to identify the GPUs + driver_0.physical_devices.emplace_back("physical_device_0").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + driver_1.physical_devices.emplace_back("physical_device_1").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; + for (uint32_t i = 0; i < function_count / 10; i++) { + fill_implementation_functions(driver_0.physical_devices.at(0).custom_physical_device_functions, function_names, + custom_physical_device_functions{}, 5, i * 10); + fill_implementation_functions(driver_1.physical_devices.at(0).custom_physical_device_functions, function_names, + custom_physical_device_functions{}, 5, i * 10 + 5); + } + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept.json"); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + auto phys_devs = inst.GetPhysDevs(2); + VkPhysicalDevice phys_dev_0 = phys_devs[0]; + VkPhysicalDevice phys_dev_1 = phys_devs[1]; + VkPhysicalDeviceProperties props{}; + env.vulkan_functions.vkGetPhysicalDeviceProperties(phys_devs[0], &props); + if (props.deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) { + phys_dev_0 = phys_devs[1]; + phys_dev_1 = phys_devs[0]; + } + for (uint32_t i = 0; i < function_count / 10; i++) { + check_custom_functions(env.vulkan_functions, inst.inst, phys_dev_0, custom_physical_device_functions{}, function_names, 5, + i * 10); + check_custom_functions(env.vulkan_functions, inst.inst, phys_dev_1, custom_physical_device_functions{}, function_names, 5, + i * 10 + 5); + } +} + +TEST(UnknownFunction, PhysicalDeviceFunctionWithImplicitLayerInterception) { + FrameworkEnvironment env{}; + env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + + std::vector function_names; + add_function_names(function_names, function_count); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept.json"); + auto& layer = env.get_test_layer(); + fill_phys_dev_intercept_functions(layer, function_names, layer_intercept_physical_device_functions{}, function_count); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + check_layer_custom_functions_no_implementation(env.vulkan_functions, inst.inst, phys_dev, layer, + layer_intercept_physical_device_functions{}, function_names, function_count); +} + +TEST(UnknownFunction, PhysicalDeviceFunctionDriverSupportWithImplicitLayerInterception) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + uint32_t function_count = 100; + std::vector function_names; + add_function_names(function_names, function_count); + fill_implementation_functions(driver.physical_devices.at(0).custom_physical_device_functions, function_names, + layer_implementation_physical_device_functions{}, function_count); + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept.json"); + auto& layer = env.get_test_layer(); + fill_phys_dev_intercept_functions(layer, function_names, layer_intercept_physical_device_functions{}, function_count); + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + check_layer_custom_functions(env.vulkan_functions, inst.inst, phys_dev, layer, layer_intercept_physical_device_functions{}, + function_names, function_count); +} + +TEST(UnknownFunction, PhysicalDeviceFunctionWithMultipleImplicitLayersInterception) { + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)); + std::vector function_names; + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + add_function_names(function_names, function_count); + driver.physical_devices.emplace_back("physical_device_0"); + + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept_0") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept_0.json"); + auto& layer_0 = env.get_test_layer(0); + layer_0.set_use_gipa_GetPhysicalDeviceProcAddr(true); + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept_1") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept_1.json"); + auto& layer_1 = env.get_test_layer(1); + layer_1.set_use_gipa_GetPhysicalDeviceProcAddr(false); + for (uint32_t i = 0; i < function_count / 10; i++) { + fill_implementation_functions(driver.physical_devices.at(0).custom_physical_device_functions, function_names, + layer_implementation_physical_device_functions{}, 5, i * 10); + fill_phys_dev_intercept_functions(layer_0, function_names, layer_intercept_physical_device_functions{}, 5, i * 10); + fill_phys_dev_intercept_functions(layer_1, function_names, layer_intercept_physical_device_functions{}, 5, i * 10 + 5); + } + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + VkPhysicalDevice phys_dev = inst.GetPhysDev(); + for (uint32_t i = 0; i < function_count / 10; i++) { + check_layer_custom_functions(env.vulkan_functions, inst.inst, phys_dev, layer_0, + layer_intercept_physical_device_functions{}, function_names, 5, i * 10); + check_layer_custom_functions_no_implementation(env.vulkan_functions, inst.inst, phys_dev, layer_1, + layer_intercept_physical_device_functions{}, function_names, 5, i * 10 + 5); + } +} + +template +ParentType get_parent_type(InstWrapper const& inst, DeviceWrapper const& dev); + +template <> +VkInstance get_parent_type(InstWrapper const& inst, DeviceWrapper const&) { + return inst.inst; +} +template <> +VkDevice get_parent_type(InstWrapper const&, DeviceWrapper const& dev) { + return dev.dev; +} + +template +DispatchableHandleType get_dispatch_handle(FrameworkEnvironment& env, DeviceWrapper const& dev, + std::vector const& flags); + +template <> +VkDevice get_dispatch_handle(FrameworkEnvironment&, DeviceWrapper const& dev, std::vector const&) { + return dev.dev; +} + +template <> +VkCommandBuffer get_dispatch_handle(FrameworkEnvironment& env, DeviceWrapper const& dev, + std::vector const&) { + VkCommandPool command_pool; + VkCommandPoolCreateInfo pool_create_info{}; + DeviceFunctions funcs{env.vulkan_functions, dev}; + funcs.vkCreateCommandPool(dev, &pool_create_info, nullptr, &command_pool); + VkCommandBuffer command_buffer; + VkCommandBufferAllocateInfo alloc_info{}; + alloc_info.commandBufferCount = 1; + alloc_info.commandPool = command_pool; + funcs.vkAllocateCommandBuffers(dev, &alloc_info, &command_buffer); + return command_buffer; +} + +template <> +VkQueue get_dispatch_handle(FrameworkEnvironment& env, DeviceWrapper const& dev, std::vector const&) { + DeviceFunctions funcs{env.vulkan_functions, dev.dev}; + VkQueue queue; + funcs.vkGetDeviceQueue(dev, 0, 0, &queue); + return queue; +} + +template +void unknown_function_test_impl(std::vector const& flags) { + using custom_functions_type = custom_functions; + using layer_implementation_functions_type = layer_implementation_functions; + using layer_intercept_functions_type = layer_intercept_functions; + + FrameworkEnvironment env{}; + auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); + uint32_t function_count = MAX_NUM_UNKNOWN_EXTS; + + std::vector function_names; + add_function_names(function_names, function_count); + + if (has_flag(flags, TestConfig::add_layer_interception)) { + fill_implementation_functions(driver.physical_devices.back().known_device_functions, function_names, + layer_implementation_functions_type{}, function_count); + } else { + fill_implementation_functions(driver.physical_devices.back().known_device_functions, function_names, + custom_functions_type{}, function_count); + } + TestLayer* layer_ptr = nullptr; + if (has_flag(flags, TestConfig::add_layer_implementation) || has_flag(flags, TestConfig::add_layer_interception)) { + env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} + .set_name("VK_LAYER_implicit_layer_unknown_function_intercept") + .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) + .set_disable_environment("DISABLE_ME")), + "implicit_layer_unknown_function_intercept.json"); + layer_ptr = &env.get_test_layer(); + } + if (has_flag(flags, TestConfig::add_layer_implementation) && has_flag(flags, TestConfig::add_layer_interception)) { + for (uint32_t i = 0; i < function_count / 10; i++) { + fill_implementation_functions(layer_ptr->custom_device_implementation_functions, function_names, + layer_implementation_functions_type{}, 5, i * 10); + fill_device_intercept_functions(*layer_ptr, function_names, layer_intercept_functions_type{}, 5, i * 10 + 5); + } + } else if (has_flag(flags, TestConfig::add_layer_implementation)) { + fill_implementation_functions(layer_ptr->custom_device_implementation_functions, function_names, custom_functions_type{}, + function_count); + } else if (has_flag(flags, TestConfig::add_layer_interception)) { + fill_device_intercept_functions(*layer_ptr, function_names, layer_intercept_functions_type{}, function_count); + } + + InstWrapper inst{env.vulkan_functions}; + inst.CheckCreate(); + + DeviceWrapper dev{inst}; + dev.create_info.add_device_queue({}); + dev.CheckCreate(inst.GetPhysDev()); + auto dispatch_type = get_dispatch_handle(env, dev, flags); + auto parent_type = get_parent_type(inst, dev); + + if (has_flag(flags, TestConfig::add_layer_implementation) && has_flag(flags, TestConfig::add_layer_interception)) { + for (uint32_t i = 0; i < function_count / 10; i++) { + check_layer_custom_functions_no_interception(env.vulkan_functions, parent_type, dispatch_type, *layer_ptr, + layer_implementation_functions_type{}, function_names, 5, i * 10); + } + } else if (has_flag(flags, TestConfig::add_layer_interception)) { + check_layer_custom_functions(env.vulkan_functions, parent_type, dispatch_type, *layer_ptr, layer_intercept_functions_type{}, + function_names, function_count); + + } else { + check_custom_functions(env.vulkan_functions, parent_type, dispatch_type, custom_functions_type{}, function_names, + function_count); + } +} + +// Device + +TEST(UnknownFunction, DeviceFromGDPA) { unknown_function_test_impl({}); } + +TEST(UnknownFunction, DeviceFromGDPAWithLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, DeviceFromGDPAWithLayerInterception) { + unknown_function_test_impl({TestConfig::add_layer_interception}); +} + +TEST(UnknownFunction, DeviceFromGDPAWithLayerInterceptionAndLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_interception, TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, DeviceFromGIPA) { unknown_function_test_impl({}); } + +TEST(UnknownFunction, DeviceFromGIPAWithLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, DeviceFromGIPAWithLayerInterception) { + unknown_function_test_impl({TestConfig::add_layer_interception}); +} + +TEST(UnknownFunction, DeviceFromGIPAWithLayerInterceptionAndLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_interception, TestConfig::add_layer_implementation}); +} + +// Command buffers + +TEST(UnknownFunction, CommandBufferFromGDPA) { unknown_function_test_impl({}); } + +TEST(UnknownFunction, CommandBufferFromGDPAWithLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, CommandBufferFromGDPAWithLayerInterception) { + unknown_function_test_impl({TestConfig::add_layer_interception}); +} + +TEST(UnknownFunction, CommandBufferFromGDPAWithLayerInterceptionAndLayerImplementation) { + unknown_function_test_impl( + {TestConfig::add_layer_interception, TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, CommandBufferFromGIPA) { unknown_function_test_impl({}); } + +TEST(UnknownFunction, CommandBufferFromGIPAWithLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, CommandBufferFromGIPAWithLayerInterception) { + unknown_function_test_impl({TestConfig::add_layer_interception}); +} + +TEST(UnknownFunction, CommandBufferFromGIPAWithLayerInterceptionAndLayerImplementation) { + unknown_function_test_impl( + {TestConfig::add_layer_interception, TestConfig::add_layer_implementation}); +} + +// Queues + +TEST(UnknownFunction, QueueFromGDPA) { unknown_function_test_impl({}); } + +TEST(UnknownFunction, QueueFromGDPAWithLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, QueueFromGDPAWithLayerInterception) { + unknown_function_test_impl({TestConfig::add_layer_interception}); +} + +TEST(UnknownFunction, QueueFromGDPAWithLayerInterceptionAndLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_interception, TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, QueueFromGIPA) { unknown_function_test_impl({}); } + +TEST(UnknownFunction, QueueFromGIPAWithLayer) { + unknown_function_test_impl({TestConfig::add_layer_implementation}); +} + +TEST(UnknownFunction, QueueFromGIPAWithLayerInterception) { + unknown_function_test_impl({TestConfig::add_layer_interception}); +} + +TEST(UnknownFunction, QueueFromGIPAWithLayerInterceptionAndLayerImplementation) { + unknown_function_test_impl({TestConfig::add_layer_interception, TestConfig::add_layer_implementation}); +} + +/* + The purpose of LayerInterceptData is to provide a place to store data that is accessible inside the interception function. + It works by being a templated type with static variables. Every unique type used creates a new template instantiation, with its own + static variable storage. Thus interception functions that are templated correctly have per-template static data storage at their + disposal, which is used to query the next function in the chain and call down. +*/ + +template +struct LayerInterceptData { + static TestLayer* layer; + static const char* name; +}; +template +TestLayer* LayerInterceptData::layer = nullptr; +template +const char* LayerInterceptData::name = nullptr; + +template +struct FunctionZero { + static VKAPI_ATTR uint32_t VKAPI_CALL implementation(DispatchableHandle, uint32_t a, uint32_t b) { return a + b; } + + template + static VKAPI_ATTR uint32_t VKAPI_CALL intercept(DispatchableHandle handle, uint32_t a, uint32_t b) { + decltype(implementation)* func = + reinterpret_cast(LayerType::layer->get_custom_intercept_function(LayerType::name)); + if (func == nullptr) return 1337; + return func(handle, a + 3, b + 7); + } + + template + static void check(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, const char* name, + uint32_t interception_count = 1) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + EXPECT_EQ(returned_func(dispatch_type, 4, 9), (4 + 3 * interception_count) + (9 + 7 * interception_count)); + } + template + static void check_no_implementation(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, + const char* name) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + EXPECT_EQ(returned_func(dispatch_type, 5, 2), 1337U); + } +}; + +template +struct FunctionOne { + static VKAPI_ATTR uint32_t VKAPI_CALL implementation(DispatchableHandle, uint32_t a, uint32_t b, char c) { return a + b + c; } + + template + static VKAPI_ATTR uint32_t VKAPI_CALL intercept(DispatchableHandle handle, uint32_t a, uint32_t b, char c) { + decltype(implementation)* func = + reinterpret_cast(LayerType::layer->get_custom_intercept_function(LayerType::name)); + if (func == nullptr) return 1337; + return func(handle, a + 2, b + 9, c + 1); + } + + template + static void check(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, const char* name, + uint32_t interception_count = 1) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + EXPECT_EQ(returned_func(dispatch_type, 12, 17, 'a'), + (12 + 2 * interception_count) + (17 + 9 * interception_count) + ('a' + 1 * interception_count)); + } + template + static void check_no_implementation(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, + const char* name) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + EXPECT_EQ(returned_func(dispatch_type, 1, 516, 'c'), 1337U); + } +}; + +template +struct FunctionTwo { + static VKAPI_ATTR float VKAPI_CALL implementation(DispatchableHandle, int* ptr_a, int* ptr_b) { + return 0.123f + *ptr_a + *ptr_b; + } + + template + static VKAPI_ATTR float VKAPI_CALL intercept(DispatchableHandle handle, int* ptr_a, int* ptr_b) { + decltype(implementation)* func = + reinterpret_cast(LayerType::layer->get_custom_intercept_function(LayerType::name)); + if (func == nullptr) return -1337.f; + *ptr_a += 2; + *ptr_b += 5; + return func(handle, ptr_a, ptr_b); + } + + template + static void check(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, const char* name, + uint32_t interception_count = 1) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + int x = 10, y = 3; + EXPECT_NEAR(returned_func(dispatch_type, &x, &y), 0.123f + (10 + 2 * interception_count) + (3 + 5 * interception_count), + 0.001); + } + template + static void check_no_implementation(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, + const char* name) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + int x = 10, y = 0; + EXPECT_NEAR(returned_func(dispatch_type, &x, &y), -1337.f, 0.001); + } +}; + +template +struct FunctionThree { + static VKAPI_ATTR float VKAPI_CALL implementation(DispatchableHandle, int* ptr_a, float* ptr_b, uint32_t c) { + return 0.456f + *ptr_a + *ptr_b + c; + } + + template + static VKAPI_ATTR float VKAPI_CALL intercept(DispatchableHandle handle, int* ptr_a, float* ptr_b, uint32_t c) { + decltype(implementation)* func = + reinterpret_cast(LayerType::layer->get_custom_intercept_function(LayerType::name)); + if (func == nullptr) return -1837.f; + *ptr_a += 55; + *ptr_b += 5.98f; + return func(handle, ptr_a, ptr_b, c + 100); + } + + template + static void check(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, const char* name, + uint32_t interception_count = 1) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + int x = 96; + float y = 7; + EXPECT_NEAR(returned_func(dispatch_type, &x, &y, 30), + 0.456f + (96 + 55 * interception_count) + (7 + 5.98f * interception_count) + (30 + 100 * interception_count), + 0.001); + } + template + static void check_no_implementation(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, + const char* name) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + int x = 10; + float y = 0; + EXPECT_NEAR(returned_func(dispatch_type, &x, &y, 40), -1837.f, 0.001); + } +}; + +template +struct FunctionFour { + static VKAPI_ATTR VkResult VKAPI_CALL implementation(DispatchableHandle, VkPhysicalDeviceLimits* limits, uint32_t* count, + VkExtensionProperties* props) { + limits->nonCoherentAtomSize = 0x0000ABCD0000FEDCU; + if (props == nullptr) { + *count = 5; + return VK_INCOMPLETE; + } else { + for (uint32_t i = 0; i < *count; i++) { + props[i].specVersion = i; + } + return VK_SUCCESS; + } + } + + template + static VKAPI_ATTR VkResult VKAPI_CALL intercept(DispatchableHandle handle, VkPhysicalDeviceLimits* limits, uint32_t* count, + VkExtensionProperties* props) { + decltype(implementation)* func = + reinterpret_cast(LayerType::layer->get_custom_intercept_function(LayerType::name)); + if (func == nullptr) return VK_ERROR_DEVICE_LOST; + VkResult res = func(handle, limits, count, props); + if (props) { + for (uint32_t i = 5; i < *count; i++) { + props[i].specVersion = 1234 + i * 2; + } + } else if (count) { + *count += 1; + } + return res; + } + + template + static void check(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, const char* name, + uint32_t interception_count = 1) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + VkPhysicalDeviceLimits limits{}; + uint32_t count = 0; + EXPECT_EQ(returned_func(dispatch_type, &limits, &count, nullptr), VK_INCOMPLETE); + EXPECT_EQ(count, 5 + interception_count); + std::vector props(count, VkExtensionProperties{}); + EXPECT_EQ(returned_func(dispatch_type, &limits, &count, props.data()), VK_SUCCESS); + for (uint32_t i = 0; i < 5; i++) { + EXPECT_EQ(props.at(i).specVersion, i); + } + for (uint32_t i = 5; i < interception_count; i++) { + EXPECT_EQ(props.at(i).specVersion, 1234 + i * 2); // interception should do this + } + } + template + static void check_no_implementation(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type, + const char* name) { + decltype(implementation)* returned_func = loader.load(parent, name); + ASSERT_NE(returned_func, nullptr); + VkPhysicalDeviceLimits limits{}; + EXPECT_EQ(returned_func(dispatch_type, &limits, nullptr, nullptr), VK_ERROR_DEVICE_LOST); + } +}; + +struct UnknownFunction { + std::string name; + + bool has_implementation = false; + std::vector interception_stack; + + UnknownFunction() = default; + UnknownFunction(std::string name) : name(name) {} + + template + void check(VulkanFunctions const& loader, ParentType parent, DispatchableHandle dispatch_type) { + if (has_implementation) { + // Find how many layers intercept this function, stop if any layer 'implements' the function, thus doesn't return + uint32_t intercept_count = 0; + for (auto const& elem : interception_stack) { + if (elem == 1) break; + intercept_count++; + } + FunctionType::Function::check(loader, parent, dispatch_type, name.c_str(), intercept_count); + } else { + FunctionType::Function::check_no_implementation(loader, parent, dispatch_type, name.c_str()); + } + } + + void push_layer_implementation() { interception_stack.push_back(1); } + void push_layer_interception() { interception_stack.push_back(0); } +}; + +// For VkDevice, VkCommandBuffer, & VkQueue +template +struct UnknownFunctionInfo { + using Function = FunctionType; + + static void add_to_driver(UnknownFunction& func, PhysicalDevice& physical_device) { + physical_device.add_device_function({func.name.c_str(), to_vkVoidFunction(Function::implementation)}); + func.has_implementation = true; + } + + template + static void add_to_layer(UnknownFunction& func, TestLayer& layer, LayerStruct) { + LayerInterceptData::layer = &layer; + LayerInterceptData::name = func.name.c_str(); + layer.add_custom_device_interception_function( + func.name, to_vkVoidFunction(&Function::template intercept>)); + func.push_layer_interception(); + } + + static void add_implementation_to_layer(UnknownFunction& func, TestLayer& layer) { + layer.add_custom_device_implementation_function({func.name.c_str(), to_vkVoidFunction(Function::implementation)}); + func.has_implementation = true; + func.push_layer_implementation(); + } +}; + +// Specialization for VkPhysicalDevice + +template +struct UnknownFunctionInfo { + using Function = FunctionType; + + static void add_to_driver(UnknownFunction& func, PhysicalDevice& physical_device) { + physical_device.add_custom_physical_device_function({func.name.c_str(), to_vkVoidFunction(Function::implementation)}); + func.has_implementation = true; + } + + template + static void add_to_layer(UnknownFunction& func, TestLayer& layer, LayerStruct) { + LayerInterceptData::layer = &layer; + LayerInterceptData::name = func.name.c_str(); + layer.add_custom_physical_device_intercept_function( + func.name, to_vkVoidFunction(&Function::template intercept>)); + func.push_layer_interception(); + } + + static void add_implementation_to_layer(UnknownFunction& func, TestLayer& layer) { + layer.add_custom_physical_device_implementation_function({func.name.c_str(), to_vkVoidFunction(Function::implementation)}); + func.has_implementation = true; + func.push_layer_implementation(); + } +}; + +struct Functions { + template

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%0AaWbF+Uusl(o*sm9*)h{bN2Em#N{spI@6 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